408 · 操作系统 · 整体结构

一堆程序,抢一台机器

整本操作系统只回答一个问题:有限的 CPU、内存、磁盘和设备,怎么分给同时运行的多个程序,还不能让它们打架。四大管理模块各管一种资源;第 1 章讲的特权级、系统调用和中断,是把它们拼在一起的框架。

系统长这样

点任意模块看它的"演进链",每一项技术都是为了解决上一项留下的问题。切到"路径"标签,看一次真实操作怎样穿过整个系统。

用户态
应用程序 进程 P进程 Q进程 R … 只能执行非特权指令,想用硬件必须请内核代劳
入口
内核态
硬件
CPUPSW · 寄存器 · MMU
主存页框 · 页表 · 缓冲区
磁盘文件块 · 对换区
I/O 设备控制器 · DMA

每个模块正下方就是它管理的那种硬件。

四大管理,其实是同一个套路

横着对比:每种资源都先抽象成一个好用的概念,再用一张描述表登记它,然后用某种策略分配,最后处理共享冲突和速度问题。复习时每学一个模块,就去填这张表里的那一列。

处理机 内存 文件 设备
管的是什么CPU 时间内存空间磁盘上的数据各种外设
抽象成进程 / 线程虚拟地址空间文件与目录逻辑设备(设备独立性)
描述表PCB页表 / 段表FCB / inodeDCT · COCT · CHCT · SDT
组织方式就绪队列、阻塞队列空闲分区链、空闲页框目录树、FAT、索引块设备等待队列
分配策略调度算法分区算法、置换算法物理分配方式、空闲空间管理设备分配、磁盘调度
共享与冲突同步互斥、死锁共享页 / 段、存储保护硬链接 / 软链接、存取控制独占 vs 共享、SPOOLing
提速手段线程、多级反馈队列TLB、多级页表打开文件表、索引缓冲、DMA、通道

贯穿全书的三个思想

遇到没见过的机制,先想它属于下面哪一种,基本就能猜出它为什么存在。

虚拟化

让每个程序都以为自己独占了资源。

一个 CPU 变成多个进程;小内存变成大地址空间;一台打印机通过 SPOOLing 变成多台;磁盘块变成有名字的文件。

局部性 + 缓存

把常用的东西放得更近一些。

TLB、页面置换、磁盘缓冲区、打开文件表都是这个思路,和计组里的 Cache 是同一个道理。

登记 + 排队

管理就是用一张表记下来,再把等待者排成队。

PCB 配就绪 / 阻塞队列,信号量配等待队列,设备表配设备队列。做 P/V 题时,想的就是"谁在哪个队列里等"。