II. 软件组织的范围
该系统基于两个主要程序: 驱动通道硬件单元的 Handler 程序, 以及执行用户传输请求的 Network 程序。
由于通信是全双工的, 这两个程序各自都可以看作分为两部分: 一部分处理输出数据, 另一部分处理输入。(参见 Fig. 1)
这两个程序通过一个缓冲区池交换数据, 并通过一张接口表交换逻辑信息。
下文我们只关注每个程序的输出部分 (参见 Fig. 2)。输入部分将非常相似。
II-1. 网络程序
II-1-1. 多路复用功能
该程序对出站消息进行多路复用 (并分发入站消息)。多路复用在于把所有用户 (或调用方, 或参与方) 的请求堆叠起来, 并填满缓冲区池, 以使处理程序持续忙于发送。
多路复用 (和分发) 基于链路标识号。(链路 = 两个用户之间的逻辑连接)。多路复用问题与用户程序同网络程序之间的接口密切相关, 而该接口实际上是 ...(unreadable) 操作系统 (参见下文: 问题)。
II-1-2. 输出消息处理
当用户程序要发送文本时, 它应指明以下信息 (通过宏, 或作为调用参数): 文本位置、文本长度 (以字节计), 以及目的地。
使用这些数据, Network 程序会:
-
准备一个 16 位 Host 报头 (1 位: 追踪, 2 位: 备用, 8 位: 链路标识号, 5 位: 目的主机)
-
在报头与文本之间插入一个 16 位标记, 以便使文本从字边界开始。该标记由一个位于文本第一位之前的 1 组成, 而它本身之前又有十五个 0 以填补空隙。
-
检查用户文本的长度 —— 若其超过 1006 字节
+- -+
|8080 (max host message length) - 32 (heading + marking)|
|-------------------------------------------------------|
| 8 (byte = 8 bits) |
+- -+
该程序把文本分解为一系列消息, 其最大长度为 1006 字节 —— 每条消息前面都带有一个如上所述的报头。
备注: 在这种情况下, 报头备用位中的一位可用于指示若干条消息属于同一段文本。
-
将构成消息的 EBCDIC 字符 转码 为 ASCII 字符。
-
用消息的内容 填充 缓冲区池中的缓冲区。
-
更新 接口表的内容, 并移动填充指针 (见下文)。
II-2. 处理程序
该程序由网络程序或 I/O 中断启动。
该程序将非常短。它将以主模式 (特权指令) 编码, 并应集成到操作系统的 I/O 监控程序中。
该程序:
-
控制 通道硬件单元。它启动发送, 必要时在缓冲区之间提供数据链接, 并在收到中断时测试不同的设备状态。
-
清空 由网络程序填满的缓冲区。
-
探查 并 更新 接口表 (见下文)。
-
必要时可与 IMP 建立一种控制传输过程 (参见问题)。
II-3 缓冲区与接口表
II-3-1 缓冲区
它们应足够大, 以容纳最大主机消息文本 + 报头和标记 (1006 + 4 = 1010 字节)。
因此缓冲区大小可以选择为 256 个字 (1024 字节)。至于缓冲区的数量, 它将决定链路的利用频率 ——
II-3-2 接口表
网络程序正是通过这张表把待发送数据的位置和长度告知处理程序。
这张表可以是一张带 2 个指针的环形表: 一个用于填充, 另一个用于提取。它们分别由网络程序和处理程序更新。
[Length] of the message
contained
in the buffer
^
|
+--------------+----------+
| Buffer addr. | nb bytes |
+--------------+----------+
| | | <== Filling pointer
+--------------+----------+ |
| | V
| |
// //
| |
| |
| |
+--------------+----------+
| Buffer addr. | nb bytes | <== eEtracting pointer
+--------------+----------+ |
| Buffer addr. | nb bytes | V
+--------------+----------+