Operating System
-
操作系统并发
这篇文章围绕操作系统并发控制中的几个核心主题做了系统梳理。正文先定义 critical section、race condition、mutual exclusion 等基本术语,再逐步比较关闭中断、简单自旋锁、基于 Test-And-Set、CAS 和 Fetch-And-Add 的锁实现,以及 ticket lock、sleep/wakeup、two-phase lock 在正确性、公平性和性能上的差异。后半部分则转向 condition variable、生产者消费者模型和 semaphore 的实现与使用细节,最后简要提到 event-based concurrency 中的 select、poll 等思路。
-
CPU Scheduling Policies 调度算法
这篇文章系统梳理了操作系统中常见的 CPU 调度算法及其取舍。正文先介绍 turnaround time 和 response time 两个核心衡量指标,再依次讨论 FIFO、Shortest Job First、STCF、Round Robin、MLFQ、Lottery Scheduling 和 Stride Scheduling 的基本思路、优缺点与适用场景,随后重点展开 Linux Completely Fair Scheduler 的 vruntime、sched_latency、min_granularity、nice/weight 和红黑树实现方式,最后补充了多处理器环境下 single-queue 与 multi-queue 调度在负载均衡、锁竞争和 cache affinity 上的差异。
-
Log-Structured File System
这篇文章围绕 Log-Structured File System 的设计思想展开,说明它为何选择把大量小而随机的写操作先缓存在内存中,再聚合为顺序 log 写入磁盘,以尽量规避磁盘寻道开销。正文进一步介绍了 LFS 如何通过 inode map 和 checkpoint region 定位文件、如何用 segment 组织磁盘空间、如何借助 segment summary block 和 segment cleaning 回收无效数据,以及在 checkpoint 更新和 log 落盘过程中如何通过 roll forward 完成 crash recovery。
-
Fast File System
这篇文章系统梳理了 Fast File System 相比 Old Unix File System 的关键改进,重点解释它为何能在不改变 open()、read()、write() 等上层接口的前提下显著提升文件系统性能。正文先分析老 Unix 文件系统因 block 过小和数据碎片化导致的效率问题,再介绍 FFS 的 cylinder group 组织方式、更大的 block size、fragment 机制、按硬件参数优化布局和按 locality 进行文件摆放的策略,同时也补充了长文件名、符号链接、原子重命名和配额等功能增强,最后总结了 FFS 对后续现代文件系统设计的影响。