本书以“系统思维 + 实战驱动”为核心理念,打破传统孤立记忆模式,构建完整知识图谱—— 不是背概念,而是理解系统如何运行;不靠死记硬背,而靠逻辑推演与场景模拟。
在预备操作系统考研辅导书-操作系统辅导考研书的时候,最忌讳的就是照搬那些现成的大语文教材。那些书往往把知识点像分尸一样拆开揉碎了讲,让你认定每个概念都像是个孤立的球,互不相关。
实际上不然,操作系统没那么复杂,它更多是个大机器,你只需要学会如何让这台机器动就行。就像学开车,你不需要把引擎、变速箱和仪表盘都背下来,只要知道踩油门、转方向盘、看转速表如何配合,车就能跑。
大量人一上来就盯着那些抽象的 OSI 七层模型 要么复杂的进程调度算法死磕,结局写着写着就晕了。这时候得换个思路,把操作系统当成一个资源分配的大管家来想。
它面对的是 CPU、内存、磁盘这些简直无限的资源,如何把有限的精力分给各个进程,如何让它们有序地排队干活。这不只是是理论,更是你赶明儿写代码、搞项目时,想清楚“线程如何切换”、“内存如何回收”、“文件 IO 如何并发”的核心。
操作系统知识体系可分为五大模块:进程与线程、内存管理、文件系统、设备管理与安全机制。它们并非割裂存在,而是通过系统调用、中断机制、上下文切换等机制紧密耦合。
当你运行 cp file1.txt file2.txt 时:
态模型(新建→就绪→运行→阻塞→终止)是考研核心,需掌握状态转换条件与触发事件:
关键转换:
| 对比项 | 进程 | 线程 |
|---|---|---|
| 资源拥有 | 独立地址空间、文件描述符等 | 共享所属进程资源 |
| 切换开销 | 高(需保存/恢复MMU上下文) | 低(仅保存寄存器+栈指针) |
| 通信方式 | 管道、消息队列、共享内存 | 直接读写共享变量(需同步) |
? 应试提示:2022年统考选择题第8题考查“线程切换是否引起进程切换”,正确答案是“否”,但若未注意“同一进程内”条件则易错。
逻辑地址由CPU生成(如指令中的地址),物理地址是内存中的实际地址。重定位分两种:
静态重定位:装入时完成(早期系统),需连续内存;
动态重定位:运行时由MMU(内存管理单元)完成,依赖基址寄存器(Relocation Register)。
| 方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 连续分配 | 顺序访问快,支持直接存取 | 易产生外部碎片,文件难扩展 | 固定大小文件(如ISO镜像) |
| 链式分配 | 无外部碎片,文件可动态增长 | 只能顺序访问,可靠性差(指针损坏) | 磁带存储 |
| 索引分配 | 支持随机访问,无碎片 | 索引表占空间;大文件需多级索引 | Unix/Linux文件系统(如ext4) |
就拿进程调度那块儿来说,考研考重点往往挺细,比如“时间片轮转法”到底如何算,要么“抢占式调度”在啥场景下用。别光背定义,得自己造个场景演练一下。
题目:三个进程P1(到达=0, 爆发=8)、P2(到达=1, 爆发=4)、P3(到达=2, 爆发=2),时间片=2ms。求平均等待时间。
解题步骤:
等待时间计算:
平均等待时间:(6+3+4)/3 = 4.33ms
多级反馈队列是现代操作系统(如Windows NT内核、Linux CFS前身)的调度基础。其核心思想是:“动态调整优先级 + 适应不同行为的进程”。
规则:
? 应试技巧:题目若问“为何I/O密集型进程优先级高?”,答案应为:它们频繁让出CPU,保留高优先级;而CPU密集型进程被降级,避免独占CPU。
某系统采用最短作业优先(SJF)调度算法,非抢占式。现有进程:P1(到达=0, 服务=6)、P2(到达=1, 服务=2)、P3(到达=2, 服务=1)、P4(到达=3, 服务=3)。求P4的完成时间。
解:
答案:12ms
说到数据展示,实际上不用那些花哨的图表。自己写个好办的 Python 程序,用 Linux 的 mpstat 命令跑一下 CPU 负载,要么用 free -h 看一眼内存情况,截图贴进去。
比如你看到数据是 8%,别光说“内存占用正常”,能够接着说:“你看这里用到 8%,说明刚刚那轮代码跑完了,目前 CPU 又空闲下来预备接下一个任务了。要是显示 100%,那说明 CPU 被占满了,进程卡死在这了,这时候就得重启要么加内存了。”这种具体的手感,比背一堆“注意内存泄漏”的废话强多了。
在32位系统中,页大小4KB(2^12),页表项4B,则单级页表需1M项(2^20),占4MB内存。多级页表通过“页目录+页表”分层稀疏存储。
x86-32 二级页表示例:
TLB是高速缓存,存放最近使用的页表项。若TLB命中→1次内存访问;未命中→2次内存访问(先访页目录→再访页表)。
题目:TLB命中率95%,访存时间100ns,问有效访存时间?
解:有效时间 = 0.95×100 + 0.05×(100×2) = 95 + 10 = 105ns
每个段有基址+界限,CPU通过段寄存器(如CS、DS)获取段描述符。保护机制包括:
逻辑地址 → 段号+段内偏移 → 查段表得段基址 → 段基址+偏移 = 逻辑地址 → 分页转换 → 物理地址
关键点:段式管理解决“逻辑模块化”,页式管理解决“物理连续性”,段页式结合二者优势。
| 算法 | 原理 | 是否需要硬件支持 | 是否易产生Belady现象 |
|---|---|---|---|
| FIFO | 先进入内存的页先换出 | 否 | 是(3→4帧时缺页增加) |
| OPT | 未来最久不使用的页 | 需预知未来(理想算法) | 否 |
| LRU | 最近最少使用的页 | 需硬件支持(访问位/修改位) | 否 |
? 真题提示:2021年统考考到“FIFO算法缺页次数为12次,增加帧数后缺页变15次”,即Belady现象,属高频陷阱题。
还有几个好办让人抓狂的概念,像“死锁”和“僵尸进程”。死锁就像是两个人都等着对方手里的钥匙才能出门,最终哪位也不让哪位走,系统就僵住了。
这时候你得知道如何破,一般是先挑一个进程杀掉,要么给它加个锁,它走了别人就顺了。僵尸进程则是孩子出了门,家长忘了收钱了,系统里留着占个位置,但系统持续认定它在干活。
✅ 预防策略:破坏任一条件即可。如:
- 破坏“占有且等待”:要求进程一次性申请所有资源;
- 破坏“循环等待”:对资源编号,强制按序申请。
系统资源:A=10, B=5, C=7
当前状态:
| 进程 | Max | Allocation | Need |
|---|---|---|---|
| P0 | 7 5 3 | 0 1 0 | 7 4 3 |
| P1 | 3 2 2 | 2 0 0 | 1 2 2 |
| P2 | 9 0 2 | 3 0 2 | 6 0 0 |
Available = [3, 3, 2]
问题:P1请求(1,0,2),是否安全?
解:
结论:分配后系统仍处于安全状态,可批准。
还有带外设备和虚拟机的概念,这时候就要结合硬件知识了。比如一个 PC 插了一个 USB 板卡,操作系统得拍板把它当成啥。
有时候它能够是一般/平平的文件,有时候能够嵌入到你的图片里变成一个内嵌的 GIF。这就相当于虚拟机技术,你在虚拟机里运行数据库,外面的服务器负责给它供电和访问网络。
| 方式 | CPU参与度 | 适用场景 | 是否支持并发 |
|---|---|---|---|
| 程序查询 | 高(忙等) | 早期单任务系统 | 否 |
| 中断驱动 | 低(I/O完成才中断) | 键盘、鼠标等低速设备 | 是 |
| DMA | 极低(仅初始化+完成中断) | 磁盘、网卡等高速设备 | 是 |
| 通道控制 | 零(专用I/O处理器) | 大型机(如IBM S/390) | 是 |
虚拟内存:
虚拟机:
? 面试高频:“虚拟内存是否提高程序运行速度?” → 否! 它牺牲速度换空间(缺页中断开销大),但通过预调页(prefetching)和写时复制(COW)优化体验。
最终得提一下,操作系统这东西,理论深度实际上不深,重在应用。大量考研题实际上是在考你逻辑判断本事。比如问“为啥进程需求保护?”,答案往往不是“为了保险”,而是“为了公平和效率”。为了保护,需求权限管住;为了公平,需求调度算法;为了效率,需求缓存和页表。把这些点串起来,你就能在几十秒内想明白出题人的意图。
基础阶段:通读《操作系统概念》( dinosaur book),画知识树图,完成课后习题(重点:Ch3-7)
强化阶段:刷真题(近10年统考+名校自命题),建立错题本,重点攻克:
- 进程调度计算题
- 页表与地址转换
- 银行家算法手算
冲刺阶段:模拟考试(限时3小时),查漏补缺:
- 背诵高频考点(如页表结构、死锁条件)
- 熟记Linux命令(free, top, ps, vmstat)
- 整理“一句话答案”(如“TLB是页表缓存”)
strace -p PID跟踪系统调用,观察进程行为valgrind --tool=memcheck ./a.out)