|
FreeBSD 核心 (1)
|
|
说,如果没有它,用户就不能使用unix文件系统。还有就是,如果boot
progam参数指定-s的话,它就过渡到单一的用户模式。相对来说,普通的用户
模式也就是multi模式。为了使普通用户能够使用系统,/sbin/init的参考文件
主要在/etc目录里放着。主要就是运行/etc/rc文件对系统进行初始化。
/etc/rc文件的主要内容和作用如下:
。使系统能够使用swap区
。检查/etc/fstab,检查它的连贯性,如果有问题就转到单一的用户模式
。mount nfs以外的文件系统
。读入network 的设定和各种daemon进程的设定情况的记录文件
/etc/c.conf,这个内容作为shell script的变量设定,以下的就是
各个shell的动作调整
。serial的初始化(/etc/rc.serial)
。运行PCMCIA卡的插拔监控守护进程(/etc/rc.pccard)
。network的部分初始化(/etc/rc.network)
。如果有nfs的时候就进行mount操作
。network的最终初始化(/etc/rc.network:启动和entwork有关的daemon)
。共有库的有关信息的初始化
。intd,lpd,sendmail的启动
。依赖系统的一些初始化进程
/etc/rc的处理完了后,/sbin/init就对/etc/ttys等记述的一些终端的用户login进行
监视。对于这个,/etc/ttys里指定的终端,fork()后的进程里:
。exec()指定的程序(普通的情况是/usr/libexec/getty)
。/usr/libexec/getty进行终端速度等的设定。提示login:,等待用户输入
。用户输入后,名字作为参数exec() /etc/bin/login
。/usr/bin/login就提示出passwd:,等待用户的输入
。准备user名和passwd,对输入的用户名进行确定,正确的话就exec()用户
shell
下图就是/sbin/init的监视进程图:
process #1
-------------------------------------------------------->
/sbin/init | ^ \
| fork() | | fork()
+ exec() exec() exec() | | exec()
process #n |---------->+--------->+------------------*+--------
getty login user的login shell process #m
(第一章完,下一章介绍文件系统和驱动程序,liangvy)
FreeBSD核心探讨.4.驱动程序篇
翻译:liangvy liangvy@bigfoot.com icewolf.leon
版权所有,可以转贴
第二章 文件系统和设备驱动程序
这章主要介绍文件系统和特殊的设备文件以及它们的对应关系。
2..1 disk上的 unix file system 的基本知识
首先介绍一下经典的unix file system的思维方法。
disk 的 partition就是从0到512byte的连续长度的block的东西。这里有
1.file/directory有关的固定长度的信息,i-node
2.file/directory的本体,data block
的两样不同的东西。partition的前面的附近块(block#16 ,1--15用于boot
program )就是i-node,data block用的领域等等的开始位置(block号)
和长度(block数量)等的记录,叫做super-block。一个block可能的容量只
能有固定数目的i-node,所以如果分配了固定的i-node,收录了节点号和节
点的块号和块的位置就可以计算出来。
i-node就是
。表明i-node的种类(file ,direstory,device等)
。这个节点参考的次数(目录数)
。参考,作成,变化的时间
。权限
。所有者的user id / group id
。本体的长度
。收集本体的data block的block号码的固定长度的对应表
的一些记录。因为data block的对应表是固定的关系,比
如10个,最长就能够作出512*10=5k为止的file。
当文件比块大的时候,unix就采用成组联结的方式对它们进行管理。就是
把所有的空闲块以一定数目为一组的方法作成单向空闲块stacker。
特别地,文件的从先头的byte位置开始和i-node内的对应表有着密切的关系。
而且,对于i-node的输入输出,可以对应指定位置的数据块进行读写。重要
的是,核心可以依照这个管理表对io装置进行管理。
unix对io设备的操作也是作为(特殊)文件进行的。对于用i-node进行
描述的io设备,data block数据块的对应表就没必要了。这个部分的io设备
的识别就通过device号码来进行。向这些对i-node进行输入输出处理的,
就又设备驱动号区别,来进行device driver驱动。
那么,节点怎么的进行查找呢?partition的最初的目录(根目录)就是,
从第二个i-node开始,一个一个顺着节点进行查找。
比如,对于目录/uuu/vvv/.../yyy/zzz的查找方式,有这种关系:
。i-node #2 所存放的是root directory。读入它的本体,就可以找到
相应的uuu所对应的i-node。
。读入这个i-node所存放的directory的i-node本体,找到相应的vvv节点。
......
查找对应yyy的节点
。读入这个节点的本体信息,这里包含目录本题的内容,这样就可以找到
zzz所对应的i-node。
目录里面由于记录了对应文件名的节点号,所以,也有可能同一个节点号
根据文件名不一样,就可以找到不同的目录名。这就是硬连接(hard link).
但是,节点号有只存在于节点所在的分区的含义,所以,不同的分区,
这种硬连接就不具有存在的可能性。为了解决这个矛盾,就有了符号连接
(symble link)的说法。当节点是输入符号连接的时候,符号连接就包含
了这个节点的data block所指定的路径名。但是,空连接和loop连接这种
情况也是允许的,所以核心要指定循环连接的最大次数。具体由参数
MAXSYMLINKS(@sys/param.h)指定。
这样,多个分区建立一个文件系统就有可能了。启动核心的分区作为一个
已存的文件系统,其他的分区就嫁接到目录层上面。这个操作过程就是mount。
利用mount指令,就可以实现上面的操作。但是,mount之前的目录,在mount后
就给屏蔽了,直到mount结束,那些目录就可以再现。
以上就是经典的unix文件系统理论。但是,对于读入了i-node,就去读
data block ,这种情况,对于一个比较大的分区,硬盘磁头向disk head的距
离就太大了。总的来说,访问时间就会变长。在这里有一些指导思想:
。分区要比较小,多分小区
。了解超级块的地位,超级块记录了分区的信息,考虑由于介质的原因而
使这个超级块造成损害,所以,在分区内部就必须为它准备多几个拷贝。
。目录和它下层的文件,要在相同的领域内放置。
。确保单位data block要比磁盘的block大。
考虑了一些东西后,经过改良标准,freebsd就采用一个叫做FFS的文件系
统(Fast File System),但这只是i-node领域/data领域的配置方法的变化,基
本的考虑方法并没有变。对磁盘分区进行文件系统的构造的初始化由命令newfs
提供。看看它的source就知道怎么配置的了。其他的构造(......)对应于kernel
的source,对于构成boot program的文件disk.c和sys.c(@i386/boot/biosboot)
比较简单易懂(单纯性)。
上面讲述的i-node对disk的partition的记录形式,详细的(source)在
struct dinode(@ufs/ufs/dinode.h)里面有。在核心内部使用的,包含这个东西
的是struct inode(@ufs/ufs.inode.h)。
描述io设备的文件叫特殊文件(special file),他对应的i-node有两个种
类:
。块型(block)
和装置的固有的数据记录的单位(大多数的情况是512byte)无关。读写
的最小单位是1byte,可以在任意的场所里任意长度的data。核心对各个
block型的特殊文件进行固定的记录单位长度(倍数)进行缓冲(buffer)
管理,这样就可以处理任意长度的读写了.
。文字型(char)
读写的基本单位是,受到装置固有的date记录单位长的限定。没有block
型的缓冲管理,对应于装置的物理特性,读写属于专用。或者说,是读写
两用。
除了网络接口之外,io装置可以全部分为文字型和块型两个大类。总的来说,
磁盘操作的两样都用,但其他的io装置只有文字型。还有就是一些没对应物理设
备的kernel modules提供的虚拟设备也有,它们对应着文字型的特殊文件。特殊
文件习惯放在目录/dev里面。
对于特殊设备文件的i-node有block和chat两个类,设备通过驱动号进行记录
。通过这些,就可以识别device driver。device 号就是major号(8bit)(主设备
号)和minor号(24bit)(辅助设备号),device driver的识别就是由major的不
一样而区别。而且呢,block型,char型的等等可能存在最大数目是256种类。一般的
情况,同种类的设备不同数目的区别就是通过
上一页 [1] [2] [3] [4] 下一页
|
| 上一篇:文件特殊权限的解释 下一篇:FreeBSD 核心 (2) |