欢迎光临我的博客
分类:
2010-09-08 12:02:14
本章第15.2和15.3节已经超出UNIX第6版的范围,但鉴于它们现在应用的广泛性,并且它们综合体现了UNIX作为多用户分时操作系统和数据共享的特性,故在此做一介绍。
在第5章曾经提到过init进程,它是系统进程,进程号是1,在系统初始时创建,运行在用户空间,对应的可执行文件是/etc/init,其源码在/usr/source/s/s1/init.c中。这里对init进程再进行深入研究。
init进程作为调度进程的子进程,在内核初始化时被创建,并且永远不会退出。通过源码可以看出,它首先判断当前终端寄存器值,如果不是单用户(即reboot时),则创建一个shell子进程,然后等待其退出。再清除/etc/utmp文件,并且把用户名、~和当前时间写入到/usr/adm/wtmp文件中,如果该文件存在的话。init进程的该过程在整个系统初始化时只会运行一次,并且只在终端寄存器值不为单用户时。
这之后是init进程的主循环。它首先关闭所有文件。然后再次判断终端寄存器的值,如果为单用户,则终止所有子进程,然后创建子进程,等待其退出。子进程会打开终端/dev/tty8,并且运行shell。用户在此shell中应该根据需要编辑/etc/ttys文件,因为init进程此后会根据该文件内容来创建整个系统中所有的终端。
/etc/ttys文件的格式是:
flag line
comn \n
flag2 line2
comn2 \n
… …
实际每列之间并没有空格,这里为了阅读的方便。每列只有1个字节。每行定义一个终端。
flag指示当前行是否生效,1生效,0不生效。
line是tty编号。如果line等于1,则该行所对应的终端是/dev/tty1。
comn是tty类型,可以是 ‘-’、
‘0’、 ‘1’、 ‘2’、1或2。
\n换行符作为结束。
init进程把从/etc/ttys中读出的每行数据按顺序存放在如下内部全局结构数组中,而第2行存放在最后,该数组的初值为0:
|
tabsize的值为20,这样系统中最多可同时打开20个终端。如果/etc/ttys文件内容为空,则程序会跳转到终端寄存器的值为单用户情况时处理,打开shell让用户继续编辑/etc/ttys。
login程序主要提供界面让用户输入用户名和密码,并进行认证。如果通过认证,则运行shell程序,打开终端供用户使用。在讲解代码之前,首先介绍一下UNIX的几个系统文件。
utmp文件用来记录每个终端用户的登录情况,但只会保存最近一次登录的记录。在用户退出后,该记录被清除。每条记录是如下结构:
|
name是用户名,如果用户名长度超过8,则只取前8个字符。
tty是终端设备号,从‘0’到‘z’。也就是init进程中itab结构中的line。
time是登录时间。
ifill和ufill用于填充,凑齐16字节。
utmp文件的一个示例如表15-1所示。
表15-1 utmp文件的示例
文件偏移 |
值 |
0x0 |
Jerry 0 123456 |
0x10 |
Wly 1 128900 |
0x20 |
\0\0\0\0\0\0\0\0\0\0\0\0\0(tty2终端用户已退出) |
… |
… … |
0xA0 |
Youyou a 105632 |
utmp文件在/etc目录下,全路径是/etc/utmp。
wtmp文件和utmp文件很类似,也用于记录用户的登录的情况,并且每条记录和utmp相同。所不同的是:
(1)wtmp文件存储用户每次登录的记录,而不仅仅是最近一次。这导致wtmp文件不断增大,不像utmp文件大小固定。假如一共有n个终端设备,则utmp文件大小为n*16;
(2)wtmp文件不仅存储用户登录的记录,还存储用户退出的记录;
(3)各个终端用户记录在utmp文件中的位置都是固定的:从文件起始依次存储终端/dev/tty0、/dev/tty1…、/dev/ttyz的记录。而wtmp则不固定各终端用户的记录,每次新记录都会存到文件末,这样文件在不断增长。
wtmp文件的一个示例如表15-2所示。
表15-2 wtmp文件的示例
文件偏移 |
值 |
0x0 |
Youyou a 105632 |
0x10 |
\0\0\0\0\0\0\0\0 a 111000(Hawk退出记录) |
0x20 |
Jerry 0 123456 |
0x30 |
Wly 1 128900 |
|
\0\0\0\0\0\0\0\0 0 130000(Jerry退出记录) |
… |
… … |
可以看出,wtmp文件的记录是按时间排序的。
wtmp文件位于/usr/adm目录下,全路径是/usr/adm/wtmp。
motd是message of today的缩写,它是UNIX系统的一个公告文件,用户每次登录后,都会看到该文件的内容。它通常由系统管理员编辑,用于广播一些公共的事务,比如:
“Welcome
you! The system’s hardware is PDP 11/40 , memory size is 256K”
chinaunix网友2010-09-10 09:35:35
Download More than 1000 free IT eBooks: http://free-ebooks.appspot.com