现在的位置: 首页 >> 操作系统 >> FreeBSD >> FreeBSD 核心 (1)
添加时间:2005-8-21 来源:网教中国 作者:
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)
大部分文章摘自网上,如有侵犯您的权益请与我们联系,我们会第一时间进行处理,谢谢! [ 打印文章 ] [ 关闭窗口 ]
推荐文章
·FreeBSD handbook中文版 9 配制F
·FreeBSD 升级系统
·Ports & Package
·FreeBSD kernel 编译大法(二)ker
·FreeBSD 上使用Kerberos 5认证
·FreeBSD 5.x 中 gbfs 的修正,及
·FreeBSD 安装Linuxigd
·FreeBSD 使用cvsd创建安全的cvs
·FreeBSD trafcount命令介绍
·FreeBSD入门安装及汉化
相关文章
·FreeBSD4.8 IPFW How to!
·FreeBSD下的内存文件系统
·FreeBSD 核心 (2)
·FreeBSD内核定制参考
·freebsd系统日志与备份
·关于FreeBSD4.4网络源代码接口层
·FreeBSD 5.2.1 boot0(启动扇区代
·FreeBSD中的设备命名规则
·FreeBSD 5内核源代码分析之copyi
·FreeBSD 5内核源代码分析之系统
最新文章
·FreeBSD连载(94):基于NAT的负载
·FreeBSD连载(93):反向代理负载
·FreeBSD连载(92):基于DNS的负载
·FreeBSD连载(91):提升静态网页
·FreeBSD连载(90):单服务器性能
·FreeBSD连载(89):CGI和SSI的安
·FreeBSD连载(88):安全连接方式S
·FreeBSD连载(87):基于用户的访
·FreeBSD连载(86):对IP地址和域
·FreeBSD连载(85):配置Apache服(
Google