1. 文件系统的定义
三个方面:
某种文件格式、以某种格式存储的设备、某种管理文件的机制。
2. VFS与文件系统
VFS是虚拟文件系统的缩写。不同的文件系统有不同的格式、管理机制和实现。VFS则是各种文件系统必须遵守的API规范。
3. 进程与文件系统
task_struct中有两个指针,一个指向fs_struct,记录了文件系统相关的属性;一个是file_struct,记录了所有打开的文件列表。
4. inode与identry
一个文件可以有多个文件名,通过不同的文件名访问有不同的权限。identry对应文件名,而inode对应文件。identry与inode是一对一或者多对一的关系。
5.连接
一个inode直接连接另一个inode就叫连接;如果两个inode在同一个文件系统中,就叫普通连接。如果两个inode可能不在同一个文件系统中,就叫符号连接,符号连接可能悬空。
6.目录与文件
目录也是文件,如果一个目录不在任何目录之内,这个目录就叫根目录。
每个文件系统都有一个根目录,这个根目录也是文件系统的入口。通过根目录可以访问该文件系统内的所有文件和目录。
整个系统有一个根目录,这个根目录是整个系统的入口。通过系统根目录可访问该系统内的所有文件和目录。
文件系统的根目录挂在系统根目录下。
系统的根目录一般是引导操作系统的文件系统的根目录。
7. 超级块
超级块记录了文件系统的一些属性。以EXT2文件系统为例,
第一个部分是magic number,通过该number,文件系统管理器可识别该文件系统为EXT2.
此外,还记录了数据块的大小,每个组中数据块的数量,总的数据块的数量,空闲的数据块的数量。
超级块还记录了第一个inode的位置,第一个inode就是该文件系统的根目录。
文件系统一般分为四部分;
引导区:用来存储操作系统引导程序;
超级块;
inode块:记录了所有的inode;
数据块;
8. 文件系统与磁盘驱动
文件系统不会知道数据存储的具体位置,这个由磁盘驱动来处理。文件系统处理的就是数据块。
9. 超级块的同步
在系统启动后,超级块会从存储设备上导入到内存中,此时,就会存在内存中的超级块与存储设备中的超级块同步的文件。
一般来讲,在系统启动时和关闭时,两部分是同步的。内核会定期同步两部分的数据。
当系统由于突然掉电而关机时,数据就没有得到同步。文件系统的完整性被破坏。
Unix系统的处理办法是,在系统启动时,从掉电时对应的内存中的超级块中取出数据,与存储设备中的超级块同步。
这也是Unix比windows稳定的原因。