XV6 实现了 Unix / Linux 风格的文件系统,虽然功能简单并缺少性能上的考虑,但是能体现出 Unix 文件系统所有的核心概念。可以提供用户数据的保存和管理,实现在 IDE 硬盘上的数据持久化(persistence)能力。
简单说来,xv6fs
文件系统和其他文件系统一样,需要解决以下几个问题:
为了提高性能和可靠性,XV6 和通常的文件系统一样,还提供了以下的能力:
xv6fs
将整个磁盘进行分割以形成不同用途的区域:
一个 xv6fs
中的文件用一个索引节点 inode
来管理其数据盘块,即混合索引方式。一部分数据的盘块号直接记录在 inode
的一个数组成员变量中,可以快速方便地访问到。其余的数据盘块号(如果有的话)记录到一个索引盘块中,需要间接访问才能获得。
索引节点 inode
虽然管理了一个文件的磁盘盘块,但是文件系统中有众多的文件需要有效管理, 而实践中树形目录结构是常用的有效方式。xv6fs
中一个目录记录为一个文件,该文件的数据按照目录项的结构进行解析,每一个项包含一个文件名(或子目录)以及对应的索引节点号。 与 Linux 的 EXT 文件系统类似,根目录 /
有固定的位置,xv6fs
的根目录对应索引节点为 1 的那个文件。通过目录文件的层次关系,就可以建立起目录的树形结构。
文件系统并不只是磁盘上的数据,而且还包含如何访问它们的代码。xv6fs
提供了若干文件系统访问的系统调用,包括读写、创建与删除、链接等。这些代码需要根据前面文件系统的存储规范(布局、索引等格式)来获取所需的数据,而且还需要和其他辅助系统互动,包括: