对于linux 0.11内核的文件系统的开发,Linus主要参考了Andrew S.Tanenbaum所写的《MINIX操作系统设计与实现》,使用的是其中的1.0版本的MINIX文件系统。而高速缓冲区的工作原理参见M.J.Bach的《UNIX操作系统设计》第三章内容。
通过对源代码的分析,我们可以将minix文件系统分为四个部分,如下如1-1。
l 高速缓冲区的管理程序。主要实现了对硬盘等块设备进行数据高速存取的函数。
l 文件系统的底层通用函数。包括文件索引节点的管理、磁盘数据块的分配和释放以及文件名与i节点的转换算法。
l 有关对文件中的数据进行读写操作的函数。包括字符设备、块设备、管道、常规文件的读写操作,由read_write.c函数进行总调度。
l 涉及到文件的系统调用接口的实现,这里主要涉及文件的打开、关闭、创建以及文件目录等系统调用,分布在namei和inode等文件中。
图1-1 文件系统四部分之间关系图
1.1超级块
首先我们了解一下MINIX文件系统的组成,主要包括六部分。对于一个360K软盘,其各部分的分布如下图1-2所示:
图 1-2 建有MINIX文件系统的一个360K软盘中文件系统各部分的布局示意图
注释1:硬盘的一个扇区是512B,而文件系统的数据块正好是两个扇区。
注释2:引导块是计算机自动加电启动时可由ROM BIOS自动读入得执行代码和数据。
注释3:逻辑块一般是数据块的2幂次方倍数。MINIX文件系统的逻辑块和数据块同等大小
对于硬盘块设备,通常会划分几个分区,每个分区所存放的不同的文件系统。硬盘的第一个扇区是主引导扇区,其中存放着硬盘引导程序和分区表信息。分区表中得信息指明了硬盘上每个分区的类型、在硬盘中其实位置参数和结束位置参数以及占用的扇区总数。其结构如下图1-3所示。
图1-3 硬盘设备上的分区和文件系统
对于可以建立不同的多个文件系统的硬盘设备来说,minix文件系统引入超级块进行管理硬盘的文件系统结构信息。其结构如下图1-4所示。其中,s_ninodes表示设备上得i