操作系统

Book Notes · 01 · OSTEP

操作系统导论
三块机制笔记

英文本 Three Easy Pieces 与中译本是同一本书。下面按虚拟化、并发、持久化重组,不按原书目录逐页复印。目标是能自己讲清「为什么要抽象、错在哪条边界」。

I虚拟化

把一份 CPU 和一份物理内存,表现成许多进程各自以为「独占」。这是机制,不是某家虚拟化硬件的广告。

进程:资源单位

进程带着独立地址空间和 PCB。创建常见路径是复制后再换映像。切换要保存内核上下文;跨进程还要换页表。未引入线程时,进程同时是调度单位。

PCB→就绪→运行→阻塞 / 终止

调度:谁上 CPU

低级调度只从就绪队列挑人。FCFS 的典型问题是护航效应(短作业被长作业挡住)。非抢占 SJF 可能使长作业饥饿。RR 通常避免饥饿,但时间片过小会增加切换开销;不要说轮转「最公平」。作业调度、交换调度是另外两级。

地址空间与缺页

VPN 经 TLB 或页表得到页框号。存在位为 0 只表示未驻留;访问合法页才缺页。有空闲页框就直接调入,没有才走置换。缺页进程常因磁盘 I/O 阻塞,系统仍可能调度别人。

易错:把缺页写成调度算法的一步;或把 P=0 直接叫缺页事件。

II并发

并发是宏观上多个任务推进,单核交替即可;并行才是同一时刻真正同时执行。二者不是同义词。

线程

线程共享本进程地址空间,自有栈与 TCB,是调度单位。多对一模型里,一个阻塞型系统调用可能拖住整个进程。不要写「线程有独立地址空间」。

锁与信号量

临界区要空闲让进、忙则等待、有限等待;让权等待避免空转。记录型信号量 P/V 必须原子;值减到小于 0 就阻塞。有界缓冲用 empty / full / mutex,先等空槽或满槽,再抢互斥锁。

P(empty)→P(mutex)→写入→V(mutex)→V(full)

死锁

互斥、占有并等待、不可抢占、循环等待同时成立才可能死锁,且只卡住相关进程集合。银行家是避免(查安全序列),不是预防。

易错:缓冲区未满时「先锁再 P(empty)」未必死锁;卡死发生在 empty 已为 0、生产者握着 mutex、消费者又要 mutex 才能 V(empty) 时。

III持久化

把易失的内存状态落到磁盘,并在崩溃后还能讲出一个一致的故事。

设备与 DMA

程序轮询、中断驱动、DMA、通道是 CPU 介入粒度的谱。DMA 传送过程不逐字节占用 CPU,但启动与完成中断仍要内核参与。

文件与打开

文件系统是软件:命名、权限、盘块分配。磁盘控制器是 I/O 硬件。fd 是进程文件描述符表里的整数索引,指向系统打开文件表项。两次 open 通常两套偏移;dup 共享同一表项。

崩溃一致性

一次「创建文件并写数据」会动目录、inode、数据块、位图。中途掉电可能出现悬空 inode 或丢失数据。日志、写时复制、fsck 是不同代价的修补策略。本笔记只要求能说出「为什么不能假设多块写是原子的」。

章末自测

CPU 与内存的虚拟化;共享数据上的并发控制;把状态持久化到设备与文件系统。
否。访问合法且未驻留的页才缺页;有空闲框直接调入,无空闲才置换。
不是。中译本即 OSTEP。