论文部分内容阅读
文件系统是现代操作系统的重要组成部分。对于一个文件系统来说,最为关键的是可靠和高效。然而计算机还是可能因为断电或软硬件的失效而发生崩溃。一旦系统崩溃,传统文件系统就需要扫描整个磁盘分区来恢复数据一致性。在大型分区上,这个扫描恢复过程会很长,对于特大型分区可能需要好几个小时。这对许多应用来说是不可接受的。 目前主流操作系统均采用日志文件系统来解决这个问题。但是日志文件系统需要额外的空间来存放日志,这使得磁盘的利用率有所下降。 本文提出一种新的方法来解决文件系统中的这个问题。文中使用一种状态树转换的方法,这种状态树转换文件系统提供了一种对元数据改变的原子化操作,它将所有的操作在一个称为"工作区拷贝"的数据内完成,并且周期性的更新整个文件系统的根,这个根是一个指向这个工作区的一个指针。这样在操作系统崩溃时不需要进行扫描等操作来恢复文件系统的一致性,可以通过那个指向整个文件系统根的指针来找到一个一致的完整的文件系统。这种方法不需要额外的存储空间来存储日志,并且更重要的是,它的复杂度和开销改善了很多。本文利用这个方法设计了一个状态树转换文件系统并在Linux系统下实现了它。同时也对这个文件系统进行了一系列的测试,并在测试结果的基础上进行了分析与改进。最后还给出了一种兼容FAT32文件系统的状态树转换文件系统设计方案。