unix内核学习心得(一)

王朝system·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

(一)文件系统的内部表示

在unix中文件系统在磁盘上的分布是如下的:

========================================

==引导块--超级块--索引结点表----数据块==

========================================

其中超级块与索引结点表为重点。

一,索引结点表

索引结点(index node,简称inode)是文件系统的核心内容,也是内核最重要的数据结构。unix中一个文件只有一个inode与其相对应,它的储存在磁盘的索引结点表里。索引结点表是一个线性数组。索引结点的各个域的内容如下:

1,文件所有者的标识号。

2,文件类型。

3,文件的存取权限。

4,文件的存取时间。

5,文件的联结数。

6,文件在磁盘上的位置。

7,文件大小。

(注意:索引结点不表明该文件的路径)

当索引结点被某个进程引用是,它被调入内存中。在内存中存在另外一个索引结点表(in-core inode list)和一个空闲索引结点表。当索引结点被调入内存时(在内核中使用iget算法),将索引结点放入内存索引结点表里,并将其引用数加1。

内存索引结点里的数据域除了磁盘索引结点的内容以外,还有以下新的域:

1,内存索引结点的状态

2, 含有该文件的文件系统的逻辑设备号。

3,索引结点号。(索引结点在磁盘上数组里索引)

4,指向其他内存索引结点的指针。

5,引用数。

内核用文件系统和索引结点号来标识特定的索引结点,在高层的系统调用请求是使用iget算法来分配一个索引结点的内存拷贝,即内存索引结点。内核独立的操纵索引结点锁和引用数。在系统调用执行期间将起锁住,防止其他的进程在此期间使用此结点,调用结束后开锁。在两次系统调用之间结点是不上锁的。

而iget算法主要完成的任务:索引结点号为参数,如果索引结点位于内存索引结点表中则引用数加1,返回索引结点,如果位结点位于空闲索引结点表中(此表中索引结点的引用数为0),则从该表中取出该索引结点,放入在内存索引结点表中,并将其引用数加1,如果在两个表中都没有该索引结点,则在空闲表中移出一个新的索引结点,在磁盘索引结点表中寻找到该结点,读入内存索引结点表中,然后返回该索引结点。

当内核释放索引结点时,引用数减1。如果引用数降为0,而且文件的内存拷贝与磁盘拷贝不同,则执行写磁盘操作,并把索引结点放入空闲表里。这里用到的算法是iput。如果文件的联结数为0,则内核释放该文件的所有数据块,并释放该文件的磁盘索引结点。

二,正规的文件结构

索引结点包含着文件在磁盘上位置的明细表。磁盘的每个块都编了号。在unix系统V中,块的大小是1k,(在windows里为4k),索引结点里包含指向各个数据块的指针,其中有10个直接块,1个1次间接块,1个2次间接快,1个3次间接块,如果使用到3次间接的话,单个文件的大小可以最大为16G,存取文件时,内核调用bmap算法将逻辑文件的字节偏移量映射到文件系统的块上。

三,目录

目录是使文件系统具有树型结构的那些文件。目录是文件,它只是数据是一些目录表项的文件,每个目录表项有他们的索引结点号和此目录下的文件名构成,路径就是有/分割成的各个独立分量构成的。

目录的读权限为允许进程读目录,写权限为允许进程创建子目录或删除子目录,执行权限为允许进程寻找文件而搜索整个目录。

注意:读权限与执行权限的区别。

(未完)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航