CS130 操作系统I Project 4 File Systems | 文件系统

aaaaa Lv3

恭喜你来到了 Pintos 整个项目的最后一关!在 Project 2 和 3 中,我们一直在“白嫖”现有的文件系统,而这一次,我们要亲手重写它。Project 4 是整个 Pintos 项目代码量最大的部分。

Project 4 File Systems 的核心目标是将那个“简陋”的文件系统(只能创建固定大小文件、没有子目录、磁盘访问极慢)改造成一个类 Unix 的现代文件系统。

根据官方建议,可以基于 Project 2 的代码开始,但是如果你对自己的 Project 3 较为自信,也可以基于 Proj 3,但调试难度较大。(笔者的队友是基于笔者写的 Project 3 开始的,似乎也没有发生什么问题)

先下载设计文档模板


文件介绍

filesys 目录下的重要文件

  • inode.c / inode.h
    • 管理文件在磁盘上的布局。你需要将原来的“连续分配”改为“索引分配”(类似 Linux 的 Ext2)。
  • directory.c / directory.h
    • 将文件名映射到 Inode。你需要将其改为支持层级结构(子目录)。
  • filesys.c / filesys.h
    • 文件系统的顶层接口。
  • cache.c / cache.h (需新建)
    • 块缓存 (Buffer Cache):为了减少磁盘 I/O,你需要实现一个 64 扇区限制的内存缓存。
  • free-map.c / free-map.h
    • 管理磁盘空闲块(位图)。

任务要求

1. Buffer Cache (块缓存)

目前的 Pintos 每次读写文件都直接操作磁盘,效率极低。

  • 64 扇区限制:你最多只能在内存里缓存 64 个扇区的代码。
  • 置换算法:实现类似 Clock 或 LRU 的算法。
  • Write-behind:修改数据先写到缓存,稍后再异步写回磁盘(或是进程结束时写回)。
  • Read-ahead:预读下一个块。

2. Indexed and Extensible Files (索引与可扩展文件)

原来的文件系统是“连续存储”的,容易产生碎片,且文件大小在创建时就固定了。

  • Inode 改造:实现直接块、一级间接块和二级间接块,支持最大 8MB 的文件。
  • 动态增长:文件最初大小为 0,随着 write 自动增长。
  • 空洞文件 (Sparse Files):支持 seek 到文件末尾之后再写入。

3. Subdirectories (多级子目录)

现在所有文件都挤在根目录下,这显然不行。

  • 路径解析:支持 /a/b/c 这种绝对路径和 ../../d 这种相对路径。
  • CWD (当前工作目录):每个进程需要记录自己当前在哪。
  • 特殊目录:支持 . (当前) 和 .. (父目录)。
  • 新系统调用chdir, mkdir, readdir, isdir, inumber

4. Fine-grained Synchronization (细粒度同步)

原来的文件系统是用一个大锁一把抓的。

  • 并发访问:要求支持多个进程同时读取同一个文件。
  • 独立操作:对不同文件的操作不应该互相阻塞。

执行建议

由于 Project 4 的测试极其依赖 tar 工具的稳定性,建议按照以下顺序:

  1. Buffer Cache:首先实现它并集成。完成后,Project 2 的测试应该依然全部 Pass。
  2. Inode 索引化:修改 inode.c 以支持不连续存储和文件增长。这是最硬的骨头。
  3. 子目录基础:修改 directory.c,让目录项可以指向另一个目录。
  4. 路径解析与 Syscalls:在 syscall.c 中实现 chdir, mkdir 等。
  5. 同步与持久性优化:处理并发 Bug,确保 pintos poweroff 后数据能正确写入磁盘。

代码量参考值

这是官方参考实现的 diffstat。由于需要实现缓存和复杂的索引结构,代码量再次刷新记录(约 2700 行):

1
2
3
4
5
6
7
8
filesys/cache.c      |  473 +++++++++++++++++++++++++
filesys/directory.c | 99 ++++-
filesys/filesys.c | 194 +++++++++-
filesys/inode.c | 444 ++++++++++++++++++-----
userprog/process.c | 332 +++++++++++++----
userprog/syscall.c | 582 ++++++++++++++++++++++++++++++-
...
30 files changed, 2721 insertions(+), 286 deletions(-)

到这里,恭喜你完成了整个 Pintos 系列 Project!你对操作系统的理解已经进入了一个新的等级了!


回到目录

  • 标题: CS130 操作系统I Project 4 File Systems | 文件系统
  • 作者: aaaaa
  • 创建于 : 2026-07-04 23:00:00
  • 更新于 : 2026-07-04 21:11:46
  • 链接: https://redefine.ohevan.com/2026/07/04/零基础速通系列/CS130 操作系统I/零基础速通:CS130 操作系统I_Proj_4/
  • 版权声明: 版权所有 © aaaaa,禁止转载。