unix核心编程原理(二)

                                                                                                  文件系统篇

文件系统可以用来存储文件内容,文件属性(文件所有者,日期等)和目录,这些不同类型的数据是如何存储在被编号的磁盘块上的呢?
Unix使用了一个简单的方法。它将这些磁盘块分成了3部分:
1,超级块
文件系统中的第一个块被称为超级块。这个块存放文件系统本身的结构信息。例如,超级块记录了每个区域的大小。超级块也存放未被使用的磁盘块的信息。不同版本的Unix的超级块的内容和结构稍有不同。
2,i-节点表
文件系统的下一个部分称为i-节点表。每个文件都有一些属性,如大小,文件所有者和最近修改时间等。这些性质被记录在一个称为i-节点表的结构中。所有的i-节点都有相同的大小,并且i-节点表是这些结构的一个列表。文件系统中的每个文件在该列表中都有一个i-节点。如果你有root权限,就可以像操作文件一样将分区打开,阅读并显示i-节点表。在显示utmp文件时就用过类似的技术。
以下一点很重要:表中的每个i-节点都通过位置来标识。例如,标识为2的i-节点(inode 2)位于文件系统i-节点表的第三个位置。
3,数据区
文件系统的第3个部分是数据区。文件的内容保存在这个区域。磁盘上所有块的大小都是一样的。如果文件包含了超过一个块的内容,则文件会存放在多个磁盘块中。

文件有内容和属性,内核将文件内容存放在数据区,文件属性存放在i-节点,文件名存放在目录。



创建一个新文件的过程:
1,存储属性    文件属性的存储:内核先找到一个空的i-节点,假如编号是47。内核把文件的信息记录其中。
2,存储数据   根据文件的大小,分配相应数目的块
3,记录分配情况    文件内容按顺序存放在块中,内核在i-节点的磁盘分布区记录了上述的块序列。磁盘分布区是一个磁盘块序号的列表,这3个编号放在最开始的3个位置。
4,添加文件名到目录   假设文件名是usrlist,内核将入口(47,usrlist)添加到目录文件。文件名和i-节点号之间的对应关系将文件名和文件的内容及属性连接了起来。

当用cat命令查看文件内容时,首先在目录文件中根据文件名usrlist找到所在记录的包含编号为47的i-节点号。定位i-节点号47并读取其内容。内核在文件系统中的i-节点区域找到i-节点47.i节点包含数据块编号的列表。然后cat不断的调用read函数,使得内核不断将字节从磁盘复制到内核缓冲区,进而到达用户空间。

可以得到一下结论:
目录包含的是文件的引用,每个引用被称为连接。文件的内容存储在数据块,文件的属性被记录在一个被称为i-节点的结构中,i-节点的编号和文件名存储在目录中。“目录包含子目录”的原理与此相同。

磁盘空间不足的概念:
一个Unix文件系统有一个i-节点区域和一个数据区域。因此,即使数据区有空间,i-节点空间也有可能不足。当Unix上安装了一个新的磁盘,需要将磁盘分成i-节点表和数据区。文件系统的每个文件都需要一个i-节点。i-节点表越大,则留给文件内容的空间越小。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值