第5章 文件系统与 I/O¶
内存断电即失,而存储设备速度慢、接口异步、故障模式复杂。文件系统把块设备抽象成可命名、可共享、可持久化的文件与目录;I/O 子系统则用缓存、队列、中断和 DMA 隐藏设备细节并提高并行度。
两条相互交织的主线¶
文件系统关注“数据是什么、叫什么、崩溃后还是否一致”;设备子系统关注“请求怎样排队、怎样传输、完成后怎样通知”。一次真实文件 I/O 会同时经过两条主线。
小结目录¶
- 文件、目录与 inode:理解文件描述符、打开文件对象、目录项、inode、硬链接和符号链接。
- 崩溃一致性、日志与磁盘调度:从一次跨多个块的更新推导日志、写时复制、刷盘语义与请求调度。
- I/O 模型与设备驱动:比较阻塞、非阻塞、多路复用、信号驱动和异步 I/O,并说明驱动的角色。
- 中断、DMA 与缓存层次:跟踪设备请求提交、DMA 数据传输、中断完成和缓存一致性问题。
学完应能回答¶
- 文件描述符为什么只是进程局部整数,而不是磁盘文件本身?
- 删除一个仍被进程打开的文件时,空间为什么不一定立刻释放?
- 只保证元数据日志与保证数据日志有何不同?
- 阻塞 I/O 与同步 I/O是否是同一个维度?
- DMA 为什么减少 CPU 搬运,却不等于完全不消耗 CPU?
关于性能的提醒¶
“磁盘慢”只是一个粗略判断。性能瓶颈可能位于路径解析、锁竞争、页缓存缺失、脏页回写、请求合并、设备队列、网络文件系统或应用访问模式。诊断时应沿层次逐步取得证据,而不是一看到 I/O 延迟就立即归因于硬件。