8.1 Overview

  • xv6 的文件系统拥有 7 层结构:
    1. Disk: 物理硬盘. 逻辑上被切分为等长的块 (block).
    2. Buffer cache: 物理块在内存中的缓存.
    3. Logging: 用于对接来自高层的操作, 负责将高层操作转换为底层的关于多个块的操作 (这些操作整体被称为事务 (transaction)), 并确保转换后的这些底层操作仍然是原子性的 (这里的原子性是关于断电等物理情况而言的).
    4. Inode: 对文件的抽象. 一个 inode 由一个唯一的 i-number 进行索引, 其内容为所代表的文件的数据所在的物理块的索引.
    5. Directory: 特殊的文件, 其内容为目录项 (directory entry) 的序列, 其中每个目录项由某个文件的文件名和 i-number 构成.
    6. Pathname: 文件路径, 用于对文件进行递归查询.
    7. File descriptor: 用于对各种资源进行统一抽象, 包括管道, 设备, 以及文本文件等等.
  • 文件系统在硬盘中的组织结构按物理块 block 的下标从小到达分别组织为:
    1. boot: 第 0 块, 用于存储开机相关的数据. 文件系统总是不会使用该块.
    2. superblock: 第 1 块, 用于存储文件系统的元数据, 包括当前文件系统中单个 block 的大小, block 的总数, inode 的总数, 以及 log 中的 block 的总数等等.
    3. log: 第 2 块开始.
    4. inode: log 区域后开始.
    5. bitmap: inode 区域后开始, 用于标记所有空闲的 block.
    6. data block: bitmap 区域后开始直至最后.