为什么不对文件系统使用“块 table”(类似于页面 table)?

Why not use a ‘block table’ for file systems (in analogy to a page table)?

文件系统结构与内存管理结构类似:

  1. 将不连续的物理帧映射到连续的虚拟内存
  2. 将不连续的物理磁盘块映射到连续的文件。

为什么不对文件系统使用“块 table”(类似于页面 table)?

大多数文件系统确实使用某种基于树的表示来存储它们的数据。但是,在文件系统树中存储的状态(例如目录结构、不同长度的文件等)比你可以存储在页面 table.

页面 table 旨在让硬件:

  • 轻松将概念上的平面地址 space(进程内存)转换为另一个概念上的平面地址 space(物理内存)
  • 快速了解何时生成页面错误以供 OS 处理

任何传统文件系统的内部数据结构都将针对以下方面进行优化:

  • 从目录和文件的逻辑概念到平面地址的映射space(磁盘上的块)
  • 为此减少磁盘读取次数

从性能角度来看,页面 tables 总是需要恰好 log(N) 次读取(其中 N 是地址 space 的最大大小)才能到达具有其中的数据(忽略翻译后备缓冲区中的缓存值)。如果您使用类似于页面 table 的结构表示文件(这可能有意义,因为那将是平面地址 space(文件)到平面地址 space(磁盘)的映射),如果文件真的很大而且很稀疏,你可以将它存储在 B 树中,这样在你获得数据之前需要遍历的层数更少(log(n),其中 n 是非空页的数量)正在寻找。对旋转磁盘的每次随机访问都非常昂贵,因此这将是一个有价值的优化。