
简介这份资源是面向山东大学操作系统课程期末复习的笔记资料适合正在备考操作系统考试、需要系统梳理知识框架的本科生使用。内容围绕操作系统基本概念与功能展开覆盖进程管理、存储管理、文件管理、设备管理、作业管理及文件系统管理等核心章节并重点整理了进程状态转换、PCB组成、进程调度队列、父子进程与僵尸/孤儿进程、进程间通信的消息传递与共享内存对比等高频考点同时涉及操作系统结构设计中的Simple structure、Layered与Microkernel三种方案及系统调用接口机制。资源包为1个PDF文件大小约2.91MB便于打印或平板阅读。目前已有974人学习下载说明该笔记在同类复习资料中具有一定参考价值适合用于考前快速回顾与查漏补缺。1. 从一道“送分题”说起操作系统期末到底考什么“描述操作系统的概念并解释其主要作用。”这道题几乎年年出现在卷面上但每年都有大批人写不满三行。不是不会是不知道阅卷人要什么。操作系统期末的套路非常固定概念题考“关键词踩点”计算题考“步骤完整”代码题考“信号量/PV操作写对顺序”。整张卷子大约 60% 是记忆性内容30% 是计算与推导剩下 10% 是综合设计。换句话说只要你把高频考点背成条件反射计算题练到不假思索这门课拿高分并不玄学。这份笔记覆盖了从导论到文件系统实现的全部章节适合正在突击期末、想用最短时间抓住分值分布的人。下面按考点模块拆开讲每一章都配真题思路和易错提醒。2. 进程与线程状态转换、PCB 与通信方式是必考三件套2.1 进程状态转换图四个箭头对应四种时机进程状态转换几乎是每张卷子的第一道大题。你需要画出三态模型就绪、运行、等待/阻塞并标注四个转换方向运行 → 等待进程请求 I/O 或等待某事件发生等待 → 就绪等待的事件已经发生运行 → 就绪时间片用完或有更高优先级进程抢占就绪 → 运行被调度程序选中分配到 CPU阅卷时最常扣分的地方是“等待 → 运行”这个箭头。它不存在必须经过就绪态。另一个高频追问是“进程与程序的区别”标准答案四条进程由程序和数据组成程序是静态的进程是动态的进程有生命周期程序相对长久一个程序可以对应多个进程。2.2 PCB 与进程控制父子进程、僵尸与孤儿PCB 是进程存在的唯一标志包含进程标识符、状态、程序计数器、寄存器、内存指针、I/O 状态等信息。进程三要素是程序、数据、PCB。真题常考父子进程行为。看下面这段典型代码#include stdio.h #include unistd.h #include sys/wait.h int main() { pid_t pid fork(); // 创建子进程 if (pid 0) { // 子进程pid 返回 0 printf(child process\n); } else if (pid 0) { // 父进程pid 返回子进程的 PID wait(NULL); // 父进程等待子进程结束 printf(parent process\n); } return 0; }fork()调用一次返回两次子进程中返回 0父进程中返回子进程 PID。写时复制意味着父子进程初始共享页面任一方写入时才复制副本各自变量互不影响。如果子进程终止而父进程未调用wait()子进程变成僵尸进程如果父进程先终止子进程变成孤儿进程由 init 进程收养。2.3 进程间通信共享内存与消息传递的取舍共享内存和消息传递是两种基本方式。共享内存由应用程序员自己编写访问代码操作系统只提供共享区域优点是速度快、不需要系统调用缺点是同步复杂容易出竞态。消息传递由操作系统提供机制适合交换少量数据实现简单但每次通信都要陷入内核。真题问法“描述进程间通信的两种方式说明优缺点和适用场合。”答题模板先定义再对比最后给场景。共享内存适合大数据量、高频通信消息传递适合分布式系统或数据量小的场景。2.4 线程用户级与内核级的区别线程是 CPU 使用的基本单元引入线程是为了提高响应度、资源共享、经济性和多处理器利用。用户级线程由线程库管理内核不感知阻塞一个线程会导致整个进程阻塞内核级线程由操作系统直接管理阻塞互不影响但切换代价接近进程。多线程模型有多对一、一对一、多对多三种。线程取消分异步撤销和延迟撤销线程池预先创建线程等待工作。3. CPU 调度与死锁计算题的分值都藏在这里3.1 调度算法FCFS、SJF、RR 与多级反馈队列CPU 调度是计算题重灾区。你需要掌握每种算法的周转时间、等待时间计算。算法抢占性特点缺点FCFS非抢占简单先到先服务护航效果短进程等待久SJF非抢占平均等待时间最小长进程可能饥饿SRTF抢占最短剩余时间优先上下文切换频繁RR抢占时间片轮转分时系统时间片过小开销大优先级两者均可高优先级先执行低优先级饥饿需老化多级反馈队列抢占进程可在队列间移动参数最多最复杂真题常给一组进程到达时间和执行时间让你算平均周转时间和平均等待时间。步骤画甘特图 → 算每个进程完成时间 → 周转时间 完成时间 - 到达时间 → 等待时间 周转时间 - 执行时间。3.2 死锁四个必要条件与银行家算法死锁的四个必要条件互斥、占有并等待、非抢占、循环等待。这四个必须同时成立才可能死锁。银行家算法是必考计算题。核心是安全性算法检查是否存在安全序列。给一个例子# 银行家算法安全性检查伪代码 def is_safe(available, max_need, allocation): work available[:] # 当前可用资源 finish [False] * len(max_need) safe_seq [] while len(safe_seq) len(max_need): found False for i in range(len(max_need)): if not finish[i]: need [max_need[i][j] - allocation[i][j] for j in range(len(work))] if all(need[j] work[j] for j in range(len(work))): work [work[j] allocation[i][j] for j in range(len(work))] finish[i] True safe_seq.append(i) found True if not found: return False, [] return True, safe_seqavailable是当前可用资源向量max_need是每个进程最大需求矩阵allocation是已分配矩阵。need矩阵由max - allocation得到。如果找不到任何一个进程能满足说明系统不安全。考试时手算要列表格逐步更新 Work、Need、Allocation。3.3 死锁检测与恢复单实例资源用等待图有环即有死锁。多实例资源用类似银行家算法的检测算法。恢复手段包括选择牺牲品进程、回滚、终止进程。饥饿与死锁的区别常考死锁一定涉及循环等待且多个进程饥饿可能只有一个进程且等待的资源会被释放但不会分配给自己。4. 内存管理与虚拟内存分页、分段、页面置换一网打尽4.1 连续分配与非连续分配连续分配分固定分区和可变分区。可变分区的分配算法有首次适应、最佳适应、最差适应。外碎片用紧缩解决内碎片是分区内浪费的空间。非连续分配重点是分页和分段。分页将逻辑空间等分为页物理空间等分为帧页表记录映射。TLB 是快表并行查找提高效率。二级页表需要访问三次内存一次页表、一次二级页表、一次主存。分段按程序逻辑划分段号加段内偏移得到物理地址。段页式是两者结合先分段段内分页。4.2 页面置换算法FIFO、LRU、时钟虚拟内存的核心是按需调页。缺页率 缺页次数 / 访问页面总数。算法置换目标特点FIFO最先调入的页可能出现 Belady 异常OPT未来最远才访问的页理论最优无法实现LRU最近最少使用的页性能好实现开销大时钟访问位为 0 的页二次机会指针循环增强时钟未使用且未修改的页使用位优先于修改位真题常给一个访问串让你算缺页次数。务必按步骤画表访问页 → 内存块状态 → 是否缺页 → 置换哪一页。4.3 系统颠簸与帧分配颠簸是频繁调页导致换页时间大于运行时间。解决方法局部置换、调整帧分配、页错误率策略。全局置换从所有帧中选吞吐量更好但可能引发颠簸局部置换只从自己帧中选可能浪费空闲帧。5. 文件系统与 I/OFCB、分配方式与目录共享5.1 文件分配连续、链接、索引连续分配访问性能最好但有外部碎片文件扩展困难。链接分配无外部碎片但不能直接访问指针损坏影响大。FAT 把指针集中成表提高随机访问性能。索引分配支持直接访问但索引块占空间。5.2 打开文件的过程系统调用open()将文件名传给文件系统搜索目录找到 FCB复制到系统打开文件表在进程打开文件表中增加条目并指向系统表。返回指向进程打开文件表的指针。系统打开文件表包含 FCB 副本和打开计数进程表包含指针和访问模式。5.3 文件共享与虚拟文件系统无环图目录结构允许同一文件出现在多个目录中。符号链接不处理悬挂链接硬链接增加引用计数。虚拟文件系统在接口和具体实现之间加一层统一不同文件系统。6. 易错点与失分点这些坑年年有人踩6.1 进程状态转换写错方向错在哪把“等待 → 运行”画成直接转换。为什么错等待态必须经过就绪态才能被调度。怎么答对牢记只有就绪 → 运行等待 → 就绪运行 → 就绪运行 → 等待四个方向。6.2 信号量 PV 操作顺序颠倒错在哪生产者代码中先 P(mutex) 再 P(empty)。为什么错如果缓冲区满先锁互斥再等空位会导致死锁。怎么答对生产者先 P(empty) 再 P(mutex)消费者先 P(full) 再 P(mutex)V 操作顺序相反。6.3 银行家算法忘记检查 Need错在哪只比较 Request 和 Available忽略 Need。为什么错进程请求可能超过其最大需求。怎么答对三步检查——Request ≤ NeedRequest ≤ Available试探分配后系统安全。6.4 页面置换算错缺页次数错在哪初始内存为空时第一次访问不算缺页。为什么错首次调入也是缺页。怎么答对只要页面不在内存中就是缺页包括第一次装入。6.5 死锁与饥饿混淆错在哪认为饥饿一定涉及多个进程。为什么错饥饿可能只有一个进程。怎么答对死锁一定循环等待且多个进程饥饿可能单个进程且资源会被释放。7. 最后一周怎么背从真题反推答题模板到了考前一周不要再从头翻书。拿三套往年题按题型分类概念题、计算题、代码题。概念题只背关键词比如“操作系统功能”就背进程管理、存储管理、文件管理、设备管理、作业管理五个词每个词展开一句话。计算题把银行家算法、页面置换、调度算法各练五遍练到看到题目就能画表。代码题重点背生产者-消费者、读者-写者、哲学家进餐三个模型的 PV 操作顺序。答题时注意概念题分点写计算题写步骤代码题写注释。卷面留白要合理不要挤成一团。如果遇到没见过的题先写相关定义再写自己的分析阅卷老师会按点给分。我当年期末前三天才把银行家算法彻底搞懂之前一直觉得“大概会了”结果一做题就卡在安全序列的更新上。从那以后我每次复习计算题都强制走一遍手算流程不跳步。希望帮到你。本文还有配套的精品资源点击获取