文件系统结构
4.1 讲了文件这个抽象,4.2 讲了目录这套映射,但两者都是”是什么”。4.3 换一个视角:把这些东西真正实现出来,代码要分成几层、磁盘要怎么划、空间怎么管、不同文件系统怎么共存。
这一节先立分层。分层的价值在于每一层只关心一件事,而 408 的考点几乎全部集中在辨认”某件事归哪一层管”。
机制
四个层次
文件系统自底向上分为四层,下层为上层提供服务,上层不需要知道下层怎么做到的:
① I/O 控制层——最底层,由设备驱动程序和中断处理程序组成,负责在内存与磁盘之间传输信息。它接收诸如”读取第 123 块”这样的命令,并把它翻译成对具体磁盘控制器的位级操作。
② 基本文件系统——也称物理 I/O 层,向对应的设备驱动程序发送读写物理块的通用命令。它只认物理块号,不知道这个块属于哪个文件。
③ 文件组织模块——知道文件及其逻辑块和物理块,负责把逻辑块号翻译成物理块号交给基本文件系统。它还管理空闲空间(哪些物理块还没被使用)。
④ 逻辑文件系统——最高层,管理文件系统中的元数据信息。元数据包括文件系统的所有结构数据,而不包括文件的实际内容。它管理目录结构,根据给定的文件名向文件组织模块提供所需信息;它通过 FCB 维护文件结构;它还负责保护和安全。
一次访问怎样穿过四层
以”读文件 /home/he/a.txt 的第 1000 个字节”为例,每一层各回答一个问题:
逻辑文件系统回答”这是哪个文件、这个用户有没有权限”——它解析路径、查目录、拿到 inode、检查权限。
文件组织模块回答”第 1000 个字节属于第几个逻辑块,这个逻辑块对应哪个物理块”——它执行 4.1.5 讲的那套地址翻译。
基本文件系统回答”给我把第 5871 号物理块读出来”——它不知道也不关心这块属于谁。
I/O 控制层回答”5871 号块在哪个柱面、哪个磁道、哪个扇区,怎么驱动磁头去取”。
这条链条的价值在于:换一种文件物理结构只影响文件组织模块,换一块磁盘只影响 I/O 控制层,两者互不牵连。
逻辑文件系统具体管什么
疑问点:逻辑文件系统的功能
逻辑文件系统的功能有哪些。
它管的是”元数据”,即除文件内容之外的一切。 具体可拆成五项:
目录管理——完成文件名到 FCB / inode 的映射,即 4.2.4 那套路径查找。
FCB / inode 管理——维护文件的属性、权限、时间、大小、链接计数等元数据。
文件保护——检查访问控制表或 rwx 权限,决定本次访问是否被允许。
文件基本操作的逻辑处理——创建、删除、打开、关闭等操作的上层管理。
打开文件表管理——维护 fd、打开方式、读写指针和引用计数。
要特别注意它不管什么:“第
边界
逻辑文件系统与文件组织模块的分界
这两层最容易混,判据只有一句:逻辑文件系统管”名字与属性”,文件组织模块管”地址与空间”。
| 一件事 | 归哪层 |
|---|---|
| 解析路径、查目录 | 逻辑文件系统 |
| 检查权限 | 逻辑文件系统 |
| 维护打开文件表 | 逻辑文件系统 |
| 逻辑块号 → 物理块号 | 文件组织模块 |
| 空闲空间管理 | 文件组织模块 |
“空闲空间管理归文件组织模块”这一条尤其容易记错——它看起来像”全局管理”因而像是最高层的事,但它本质上是在回答”下一个可用的物理块是哪个”,属于地址与空间的范畴。
基本文件系统不知道文件的存在
“基本”这个名字容易让人以为它是文件系统的核心,实际恰恰相反:它是四层里唯一完全不理解”文件”概念的一层。
它接到的命令只有”读第
这正是分层的意义:把”文件”这个语义留在上面,下面只做搬运。
分层结构与虚拟文件系统的关系
四层结构描述的是一个文件系统内部的实现分层;VFS 解决的是多个不同文件系统如何共存的问题。
VFS 插在系统调用接口与逻辑文件系统之间——它不是第五层,而是横向的分派器:向上提供统一接口,向下把请求转给 ext4、FAT 或 procfs 各自的那一套四层实现。
操作系统的文件缓存与磁盘设备自带的缓存
疑问点:文件系统缓存与固态硬盘参数中"缓存"的关系
文件系统的缓存如何实现,与固态硬盘规格中标注的”缓存 2GB”是否为同一件事。
不是同一件事,两者位于完全不同的位置,由完全不同的主体管理。
操作系统的文件缓存位于主机内存中,由操作系统管理,缓存的是文件的数据块。读文件时先查缓存,命中就直接返回、不碰磁盘;写文件时先写进缓存并标记为脏,之后由内核按策略统一写回。它的收益来自局部性原理,与 页面缓冲算法是同一套思路。
固态硬盘参数里标注的缓存位于设备内部,由 SSD 的控制器管理,通常用来缓存闪存转换层的映射表等控制器自身的元数据,或以高速模式临时承接写入。操作系统看不到它,也无权调度它。
判据是”谁管理它、它在哪一侧”:主机内存 + 操作系统管理 = 文件缓存;设备内部 + 控制器管理 = 设备缓存。
这条区分在做题时的用处:崩溃恢复类题目中说的”脏数据尚未写回”,指的一律是操作系统的文件缓存;商品参数里的数字与 408 的知识点无关。缓存与缓冲区的完整讨论属于第 5 章 5.2.2 节。
对照速查
| 层次(自顶向下) | 职责 | 认识”文件”吗 |
|---|---|---|
| 逻辑文件系统 | 元数据:目录、FCB、保护、打开文件表 | 认识(管名字与属性) |
| 文件组织模块 | 逻辑块号 → 物理块号;空闲空间管理 | 认识(管地址与空间) |
| 基本文件系统(物理 I/O 层) | 向驱动发出读写物理块的通用命令 | 不认识 |
| I/O 控制层 | 设备驱动 + 中断处理 | 不认识 |
| 一次访问 | 该层回答的问题 |
|---|---|
| 逻辑文件系统 | 这是哪个文件、有无权限 |
| 文件组织模块 | 第几逻辑块 → 第几物理块 |
| 基本文件系统 | 把第 |
| I/O 控制层 | 该块在哪个柱面/磁道/扇区 |
| 缓存 | 位置 | 谁管理 | 缓存什么 |
|---|---|---|---|
| 操作系统文件缓存 | 主机内存 | 操作系统 | 文件数据块 |
| SSD 内部缓存 | 设备内部 | SSD 控制器 | 映射表等控制器元数据 |
考点
- 四层名称与自底向上的顺序,I/O 控制层在最底、逻辑文件系统在最高
- 逻辑文件系统管元数据(目录、FCB、保护、打开文件表),不管逻辑块到物理块的映射
- 逻辑块号 → 物理块号 和 空闲空间管理都归文件组织模块(高频)
- 基本文件系统不知道”文件”的存在,只认物理块号
- VFS 不是第五层,是横向分派器
- 操作系统文件缓存与设备自带缓存的判据:谁管理、在哪一侧
链接
- 🏠 返回总览:操作系统第 4 章:文件管理总览
- ⬅️ 上一节:4.2.5 文件共享
- ➡️ 下一节:4.3.2 文件系统布局
- 🔗 地址翻译的具体做法,见 4.1.5 文件的物理结构
- 📖 名词库:第 4 章名词库