第八章 文件系统
文件系统的目的是组织和存储数据。文件系统通常支持用户和应用程序之间的数据共享,以及持久性,以便在重新启动后数据仍然可用。
xv6文件系统提供类似于Unix的文件、目录和路径名(参见第1章),并将其数据存储在virtio磁盘上以便持久化(参见第4章)。文件系统解决了几个难题:
注:完整计算机中的CPU被支撑硬件包围,其中大部分是以I/O接口的形式。Xv6是以qemu的“-machine virt”选项模拟的支撑硬件编写的。这包括RAM、包含引导代码的ROM、一个到用户键盘/屏幕的串行连接,以及一个用于存储的磁盘。
- 文件系统需要磁盘上的数据结构来表示目录和文件名称树,记录保存每个文件内容的块的标识,以及记录磁盘的哪些区域是空闲的。
- 文件系统必须支持崩溃恢复(crash recovery)。也就是说,如果发生崩溃(例如,电源故障),文件系统必须在重新启动后仍能正常工作。风险在于崩溃可能会中断一系列更新,并使磁盘上的数据结构不一致(例如,一个块在某个文件中使用但同时仍被标记为空闲)。
- 不同的进程可能同时在文件系统上运行,因此文件系统代码必须协调以保持不变量。
- 访问磁盘的速度比访问内存慢几个数量级,因此文件系统必须保持常用块的内存缓存。
本章的其余部分将解释xv6如何应对这些挑战。