实验一:写一个 shell

用 fork / exec / wait / pipe / dup2 写一个能真正用的 shell。验收标准不由我给——你的 shell 跑出来的东西要和 bash 跑出来的一模一样,diff 说了算。从执行一条命令开始,逐步加上重定向、管道、后台任务和信号处理。

2026-09-03 · ifcalm

实验二:调度器——自己实现,再和真实的 CFS 对照

先写一个能跑的调度器模拟器,实现 FIFO、SJF、RR 和 CFS 的 vruntime,算出周转和响应时间。然后做这个实验真正的部分:用同样的负载去问真实的 Linux,把你的模型和内核的实际行为并排放。模型对不上的地方,才是你真正学到东西的地方。

2026-09-03 · ifcalm

实验三:内存分配器——自己写一个 malloc

用 mmap 向内核要地,自己在上面切。实现空闲链表、切分、合并,然后用真实的程序压它。验收不靠自测——把你的分配器用 LD_PRELOAD 挂到真实命令上去,让 ls、grep、python 跑在你的 malloc 上。它们跑通了,才算你写对了。

2026-09-03 · ifcalm

实验四:并发——写一个线程安全的哈希表

从一个故意写错的并发哈希表开始,用 ThreadSanitizer 让它自己招供——它会精确指出是哪一行、哪两个线程。然后一步步修:一把大锁、每桶一把锁、无锁读。每一步都要测扩展性,而且每一步都必须在 TSan 下干干净净。裁判是 TSan,不是「跑了几次没崩」。

2026-09-03 · ifcalm

实验五:迷你文件系统——在一个普通文件上做出 inode 和目录

拿一个 16 MB 的普通文件当「磁盘」,在上面摆出超级块、位图、inode 表和数据块,实现 mkfs、create、write、read、mkdir、ls、unlink。验收方式很硬:把你的文件系统挂到 FUSE 上,然后用真正的 cp、tar、diff 去操作它——这些工具会用你没想到的方式调用你的接口,它们通过了才算数。

2026-09-03 · ifcalm

实验六:崩溃一致性——模拟断电,验证日志

给实验五那个文件系统加一层可以随时「断电」的块设备:写到第 N 次就直接扔掉后面所有的写。然后穷举所有的断点,看每一次崩溃之后文件系统还对不对。你会发现没日志的版本有大量崩点会留下损坏,加了日志之后应该一个都没有。验收不是「试了几次没事」,是穷举。

2026-09-03 · ifcalm

习题一:虚拟化(CPU 与内存)

覆盖第 2 到 15 篇。十二道题,一半是要动笔算的:调度指标、页表大小、TLB 覆盖范围、缺页代价。每题都附完整解答和推导过程,算错了能看出错在哪一步。

2026-09-03 · ifcalm

习题二:并发

覆盖第 16 到 22 篇。有找 bug 的(给一段代码,指出它在什么交错下会错)、有算账的(阿姆达尔定律、锁竞争、C10K 的资源)、也有设计题(怎么破坏死锁的四个条件)。每题附完整解答。

2026-09-03 · ifcalm

习题三:持久化与隔离

覆盖第 23 到 30 篇。磁盘 IOPS 的算术、写放大的估算、崩溃点的枚举、inode 与链接数的推理,以及容器隔离的边界在哪。最后两道是综合题,把整门课的线索串起来。每题附完整解答。

2026-09-03 · ifcalm

术语表:中英文对照

操作系统里的中英文对应特别容易翻车:「页」到底是 page 还是 frame、「阻塞」是 blocked 还是 blocking、「中断」和「陷入」中文常常混着用。这一页把这些坑单独标出来,并注明每个词在哪一篇里第一次出现。

2026-09-03 · ifcalm