跳到主要内容

PDP-10 实现

尽管以下内容既可以实现为一组用户例程,也可以作为 UUO 嵌入监视器(我们的第一个实现将是前者),但在描述时我们将采用后一种形式。这些 UUO 将是:

UUO操作数说明
PUTFCH, E放入标志
PUTDCH, E放入数据
PUTCH, E放入记录
GETFDCH, E取出标志或数据
GETCH, E取出记录

在上文中,“CH”是逻辑通道号。用惯常的 OPEN 或 INIT UUO 来打开通道。分配标准格式的用户缓冲区。然而,环(ring)与缓冲区首部将以非标准的方式使用,因此分配数据模式 12 用于 Network 缓冲,并且对输入而言文件状态位 31 必须为开。(DSK、DTA、MTA 或 IMP 这些设备中的任何一个都可以在这种模式下使用。)

在哈佛的 NCP 与 HOST-HOST 协议实现中,用户缓冲区并不与消息直接对应。在输出时,每个用户缓冲区将被格式化为一个消息;在输入时,一个消息可能变成一次或两次用户缓冲区装载(使用 128 字的缓冲区,以便最大限度地利用磁盘服务例程的能力)。

PUTF UUO​

这条 UUO 把一个标志放入输出缓冲区。有效地址是一个字的所在位置:

         XWD operation, count

对于块标志,计数被忽略,因为它将根据下一次使用 PUTF 之前实际放入缓冲区的字节数计算得出。当每个缓冲区变满时,PUTF 与 PUTD 会自动插入 EOM 标志;如果当前正由 PUTD 把数据字节放入缓冲区,它还会在计算出缓冲区中前一个块标志的计数之后插入一个 EOM 标志,并在下一个缓冲区的开头放置一个同类型的新块标志,在此之前先插入一个说明当时字节大小的 SIZE 标志。

PUTD UUO​

这条 UUO 把数据放入输出缓冲区。有效地址是数据字节的所在位置(如果字节大小小于 36),或者是将要放入缓冲区的下一个 36 位数据字的所在位置。在第一种情况下,假定该字节位于所寻址字的低位部分。在第二种情况下,含有该字节最后几位的那个数据字把这些位放在字的高位部分,而下一个数据字节在 PDP-10 存储中开始一个新字。于是,对于 64 的字节大小,每传送一个字节将使用两次 PUTD 调用,第一次含 36 位,第二次含 28 位,左对齐。这一策略使得 PDP-10 的字节处理指令得到最大限度的利用。

PUT UUO​

这条 UUO 把一整条逻辑记录放入输出缓冲区。有效地址是一个字的地址:

         IOWD count, location

必须先使用过一条 PUTF UUO 来输出恰当的 SIZE 标志。此后,每次使用 PUT 都会输出一个 BLOCK 标志,[3]利用 IOWD 来模拟若干次对 PUTD 的调用以找出用户数据区的位置与大小,然后输出一个 RS 标志以表示记录结束。

在字节大小小于 36 位的情况下,PUT 将使用 ILDB 指令取出要由 PUTD 输出的字节。因此,这里使用的是标准的 PDP-10 字节处理格式,而 IOWD 的计数部分是总字节数,而不是字数。

上述 UUO 既有出错返回,也有正常返回。

GETFD UUO​

这条 UUO 的调用序列是:

         GETFD CH, E
error return
whyte flag return
block flag return
data return

有效地址是标志或数据将被返回的位置。标志以与 PUTF 相同的格式返回,数据以与 PUTD 相同的格式返回。某些标志(NUL、IGNORE 与 EOM)将完全在 UUO 内部处理,不会报告给用户。SYS 最终也应当这样处理,但在初期将由用户处理。

GET UUO​

这条 UUO 的调用序列是:

         GET CH, E
error return
end of file return
end of group return
normal return

GET 把下一条逻辑记录传送给用户,它使用 GETFD 并配以一个与 PUT 相同格式的 IOWD。如果在记录结束之前 IOWD 的计数就用完了,记录的剩余部分将被跳过。无论如何,更新后的 IOWD 都将在该 UUO 的有效地址处返回,以便告知用户传送或跳过了多少数据。