9.2终端登录
先看一看登录到UNIX系统时所执行的各个程序。在早期的UNIX系统中,例如V7,用户用哑终端(通过RS-232连到主机)进行登录。终端或者是本地的(直接连接)或者是远程的(通过调制解调器连接)。在这两种情况下,登录都经由内核中的终端设备驱动程序。在PDP-11上常用的设备是DH-11和DZ-11。因为连到主机上的终端设备数已经确定,所以同时的登录数也就有了已知的上限。下面说明的登录过程适用于使用一个RS-232终端登录到UNIX系统中。
9.2.1 4.3+BSD终端登录
登录过程在过去15年中并没有多少改变。系统管理者创建一个通常名为/etc/ttys的文件,每个终端设备有一行,每一行说明设备名和传到getty程序的参数,这些参数说明了终端的波特率等。当系统自举时,内核创建进程ID 1,也就是init进程。init进程使系统进入多用户状态。init读文件/etc/ttys,对每一个允许登录的终端设备,init调用一次fork,它所生成的子进程则执行程序getty。各个进程的实际用户ID和有效用户ID都是0 (也就是它们都具有超级用户特权)。init以空环境执行getty程序。getty对终端设备调用open函数,以读、写方式将终端打开。如果设备是调制解调器,则open可能会在设备驱动程序中滞留,直到用户拨号调制解调器,并且线路被接通。一旦设备被打开,则文件描述符0、1、2就被设置到该设备。然后getty输出“login:”之类的信息,并等待用户键入用户名。如果终端支持多种速度,则getty可以测试特殊字符以便适当地更改终端速度(波特率)。关于getty程序以及有关数据文件的细节,请参阅getty命令用于设置终端机模式。
图9-1 init生成进程使终端可用于登录
暂无评论