软件工程

本类阅读TOP10

·PHP4 + MYSQL + APACHE 在 WIN 系统下的安装、配置
·Linux 入门常用命令(1)
·Linux 入门常用命令(2)
·使用 DCPROMO/FORCEREMOVAL 命令强制将 Active Directory 域控制器降级
·DirectShow学习(八): CBaseRender类及相应Pin类的源代码分析
·基于ICE方式SIP信令穿透Symmetric NAT技术研究
·Windows 2003网络负载均衡的实现
·一网打尽Win十四种系统故障解决方法
·数百种 Windows 软件的免费替代品列表
·收藏---行百里半九十

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
unix内核学习心得(一)

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

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

在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算法将逻辑文件的字节偏移量映射到文件系统的块上。


三,目录

目录是使文件系统具有树型结构的那些文件。目录是文件,它只是数据是一些目录表项的文件,每个目录表项有他们的索引结点号和此目录下的文件名构成,路径就是有/分割成的各个独立分量构成的。
目录的读权限为允许进程读目录,写权限为允许进程创建子目录或删除子目录,执行权限为允许进程寻找文件而搜索整个目录。

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

(未完)




相关文章

相关软件