IV. NCP 的总体结构
我们认为 NCP 由五个组成程序、若干关联表以及一些队列和缓冲区构成。
组成程序(见图 4.1)
1. 输入处理程序
这是一个中断驱动的例程。它启动 IMP 到主机的传输, 将数据送入常驻缓冲区, 并在传输完成时唤醒输入解释器。
2. 输出处理程序
这是一个中断驱动的输出例程。它从常驻缓冲区启动主机到 IMP 的传输, 并在传输完成时唤醒输出调度程序。
3. 输入解释器
该程序判断输入是发给用户的常规消息、网络控制消息、IMP 到主机的消息, 还是错误。对于每一类消息, 该程序调用一个子例程来采取相应的行动。
4. 输出调度程序
发送给 IMP 的消息分为三类
- (a) 主机到 IMP 的消息
- (b) 控制消息
- (c) 常规消息
我们认为应在这些类别之间施加优先级。我们建议的优先级即上述顺序。输出调度程序选出优先级最高的消息并将其交给输出处理程序。
主机到 IMP 的消息按先来先服务的方式处理。控制消息按主机逐一处理, 各主机轮流进行。为每个外部主机提供一个控制消息队列。当某个主机被调度输出时, 会把该主机的控制命令在能容纳的范围内尽可能多地拼接成一条消息。常规消息按主机和链路分组处理, 每个唯一的组合轮流进行。
5. 系统调用解释器
该程序解释来自用户的请求。每个系统调用都有一个相应的例程来采取适当的行动。
两个值得关注的组件是输入解释器和系统调用解释器。二者的相似之处在于: 输入解释器服务外部请求, 而系统调用解释器服务本地请求。
图 4.1 中的示意图是我们对网络控制程序的构想。软塌塌的类变形虫对象代表组成程序, 圆柱体代表队列, 箭头代表数据通路。在这张简化的示意图中没有画出表。[编者注: 原手绘图中“类变形虫”的对象现已改为规整的矩形框。]
图中缩写标签的含义如下:
- HIQ: 主机到 IMP 队列
- OCCQ: 输出控制命令队列
- DQ: 数据队列
- IHBUF: 输入处理程序缓冲区
- OHBUF: 输出处理程序缓冲区
____________
| USER | STRUCTURE OF THE NETWORK CONTROL PROGRAM
|____________|
^ | Fig. 4.1
_____|______V____
| |
| System |
| Call |
| Interpreter |
|_________________| _____________
^ | | | |
| | | +---------------| Input |
| | | | +-----| Interpreter |
| | | | | | |
| V V V V -------------
|======| |=========| |=======| | ^
| D Q | | O C C Q | | H I Q | | |
|======| |=========| |=======| | |
| ^ | | | |
| | | | | |
| +--------)----------)---------+ |
| | | |
+-------+ | +------+ |
__V___V___V__ |
| | |
| Output | |
| Scheduler | |
|_____________| |
| |
V |
(===========) (===========)
( O H B U F ) ( I H B U F )
(===========) (===========)
| ^
______V______ ______|______
| | | |
| Output | | Input |
| Handler | | Handler |
| | | |
------------- -------------
| ^
| |
+----------+ +-----------+
| |
____V____|____
| |
| I M P |
|______________|