跳到主要内容

登录

我们假设每台主机内部总有一个正在执行的进程在监听登录请求。我们把这个进程称为登录服务进程, 它属于一个用户编号为零的特殊虚拟网。登录服务进程被编程为监听 socket 编号 0 上的呼叫。收到呼叫后, 登录服务进程把它切换到编号更高的 (偶数) socket, 并向编号比最初发起呼叫的发送 socket 小一的 socket 返回一个呼叫。以这种方式, 登录服务进程可以发起 127 次会话。

为便于说明, 假设一个标识为 X'010005' (UCLA 上的用户编号 5) 的用户登录到 UCLA, 启动他的某个程序, 而这个程序想要在 SRI 启动一个进程。目前除登录服务进程外没有进程愿意监听我们的用户, 于是他执行

Init, <port> = 1, <AEN 1> = 7, <AEN 2> = 7,
<foreign socket> = 0

他的进程被阻塞, 而 UCLA 的 NCP 发送

RFC   <my socket 1> = X'0100050107',
<my socket 2> = X'0100050107',
<your socket> = X'000000200'

SRI 的登录服务进程在收到这条消息时得到通知, 因为它先前已执行

Listen   <port> = 9, <AEN 1> = 0.

登录服务进程随后执行

Accept   <AEN 2> = 88.

作为对 Accept 的响应, SRI 的 NCP 发送

RFC   <my socket 1> = X'0000000200'
<my socket 2> = X'0000000258'
<your socket> = X'0100050107'
<link> = 37

其中链路是从可用链路集合中选出的。SRI 的登录服务进程随后执行

Init     <port> = 10
<AEN 1> = 89, <AEN 2> = 89,
<foreign socket> = X'0100050106'

这使 NCP 发送

RFC   <my socket 1> = X'0000000259'
<my socket 2> = x'0000000259'
<your socket> = X'0100050106'

UCLA 的进程被解除阻塞, 并收到 Init 成功的通知。由于 SRI 的登录服务进程总是向编号比它刚连接到的 AEN 小一的 AEN 发起连接, UCLA 的进程随后执行

Listen   <port> = 11
<AEN 1> = 6

并在被解除阻塞时

Accept   <AEN 2> = 6

当这些事务完成时, UCLA 的进程就与 SRI 的登录服务进程建立了双重连接。登录服务进程随后将询问 UCLA 的进程, 如果满意, 就在 SRI 创建一个新进程。这个新进程将被标记为用户编号 X'010005', 并且两条连接都将被切换到新进程。在这种情况下, 把连接切换到新进程相当于许多分时系统中的 "把控制台向下传递"。