简介这是一份面向计算机专业本科生的操作系统课程期末复习笔记聚焦核心概念梳理与考点精讲帮助学生高效突破并发、同步、进程管理等难点。资源以1个1.17MB的Word文档.docx形式提供内容结构完整覆盖操作系统目标方便性、有效性、可扩充性、开放性、发展历程批处理→分时→实时系统、四大基本特性并发性、共享性、虚拟性、异步性以及处理机、存储器、设备和文件四大管理功能重点详解前趋图、进程三态/五态模型、PCB组成、信号量机制整型/记录型/AND型/信号量集、P/V操作实现互斥与同步、经典同步问题等高频考点。文字表述简明关键术语加粗标注逻辑层层递进便于考前快速回顾与体系化记忆。目前已有779人学习下载是兼顾理论深度与应试实用性的优质复习材料。1. 操作系统期末复习一张不能跳过的知识地图如果你正在翻这本笔记大概率是离期末考只剩两周、刚合上《现代操作系统》第3章、对着“松弛度完成截止时间−剩余服务时间−当前时间”发了三分钟呆——别慌这不是你一个人的玄学现场。操作系统这门课最让人抓狂的地方不是概念多而是所有知识点都像齿轮咬合漏掉一个状态转换就看不懂调度算法没吃透临界区信号量题直接归零快表命中率算错整个EAT公式全盘崩塌。这份笔记不是按教材章节平铺直叙而是按真实考场高频失分路径重新组织从“为什么必须用记录型信号量而不是整型”这种血泪经验到“银行家算法手算时最容易在哪个矩阵位置抄错数字”的踩坑细节再到“分页vs分段地址结构图怎么一眼区分”的视觉锚点。它覆盖的不是全部知识而是期末卷子上85%的分值落点——包括那些老师从不点名但必考的隐性逻辑比如为什么“可重定位装入”不能解决运行时地址修改答案藏在静态重定位的定义里也包括那些看似简单却年年翻车的操作比如画五态图时挂起阻塞态→就绪挂起态的箭头必须经过“对换”这个动作缺了就是0分。适合两类人一类是想用72小时把散装知识点拧成一股绳的冲刺者另一类是已经刷过三套真题、发现总在“进程通信类型判断”和“页面置换命中率计算”上反复失分的查漏者。现在我们从这张地图的起点出发并发、共享、虚拟、异步——这四个词不是并列关系而是因果链因为要并发所以必须共享因为要共享所以需要虚拟化资源因为资源被虚拟化进程推进必然异步。抓住这条线整本书就活了。2. 进程管理状态转换、同步机制与经典问题的硬核拆解2.1 进程生命周期从三态到七态的演进逻辑进程状态不是凭空画出的圆圈而是为解决具体矛盾而层层叠加的设计。最基础的三态模型就绪/执行/阻塞解决的是CPU空转问题当进程因I/O等待而阻塞时OS立即将CPU切换给就绪队列中的其他进程。但现实更复杂——比如内存不足时一个就绪进程可能被强行移出内存此时它既不是就绪没在内存也不是阻塞没在等I/O于是引入挂起态Suspended形成七态模型创建/就绪/执行/阻塞/终止/就绪挂起/阻塞挂起。关键在于理解状态转换的触发条件就绪→就绪挂起内存紧张时OS选择一个就绪进程换出到外存对换阻塞→阻塞挂起进程等待某事件如I/O完成同时内存不足被换出就绪挂起→就绪内存空闲且该进程优先级高被换入内存阻塞挂起→就绪挂起它等待的事件发生了如I/O完成但仍在外存需先换入才能就绪。提示考试画状态图时所有带“挂起”的转换必须标注“对换”动作这是判分关键点。只画箭头不写动作扣分。2.2 进程控制块PCB操作系统眼中的进程身份证PCB不是数据结构练习题而是OS管理进程的唯一依据。它的字段设计直指管理需求字段作用考试易考点进程标识符全局唯一ID如PID区分父子进程时子进程PID由fork()返回值决定处理机状态字PSW保存CPU寄存器现场PC、IR、SP等进程切换时必须先保存当前PCB的PSW再加载新PCB的PSW进程调度信息优先级、等待时间、已执行时间片HRRN算法中“响应比等待时间要求服务时间/要求服务时间”等待时间来自此字段进程控制信息进程状态、程序/数据段指针、资源清单状态字段直接驱动状态转换资源清单用于死锁检测的资源分配图PCB常驻内存且每个进程有且仅有一个。当进程创建时OS为其分配PCB并初始化进程终止时OS回收PCB。没有PCB进程就不存在——这是理解“进程是资源分配基本单位”的底层逻辑。2.3 同步机制从软件方案到信号量的进化本质为什么Peterson算法被淘汰为什么TSL指令在单核有效、多核失效答案藏在“让权等待”这个核心规则里。四种软件方案单标志/双标志先检查/双标志后检查/Peterson均无法避免忙等进程在while循环中不断测试条件浪费CPU。而硬件方案中断屏蔽/TSL/Swap虽能保证原子性但中断屏蔽会降低系统响应性TSL/Swap在多处理器下需总线锁开销大。信号量机制的革命性在于用阻塞代替忙等。当wait(S)发现S≤0时进程主动放弃CPU进入阻塞队列直到signal(S)唤醒它。看这段记录型信号量的核心代码typedef struct { int value; // 资源数量或阻塞进程数 struct process *list; // 阻塞队列指针 } semaphore; void wait(semaphore *S) { S-value--; // 原子操作减1 if (S-value 0) { // 资源不足 add_to_list(S-list, current_process); // 加入阻塞队列 block(); // 主动阻塞当前进程 } } void signal(semaphore *S) { S-value; // 原子操作加1 if (S-value 0) { // 有进程在等 process remove_from_list(S-list); // 取出一个阻塞进程 wakeup(process); // 唤醒它 } }注意block()和wakeup()是内核原语不可分割。考试若问“记录型信号量如何实现让权等待”答案必须包含“value0时调用block()阻塞进程”这一动作。2.4 经典同步问题生产者-消费者与哲学家进餐的破题心法所有经典问题本质都是资源竞争模式的具象化。生产者-消费者问题暴露的是缓冲区容量限制下的互斥与同步双重约束互斥对缓冲区临界资源的访问必须互斥用mutex信号量初值1同步生产者不能向满缓冲区放数据用empty信号量初值n消费者不能从空缓冲区取数据用full信号量初值0。关键陷阱wait(empty)必须在wait(mutex)之前否则可能死锁——假设缓冲区已满生产者先wait(mutex)成功再wait(empty)阻塞此时mutex仍被占用消费者无法signal(empty)。哲学家进餐问题则揭示循环等待死锁的最小模型。五种解法中考试最常考的是“奇偶编号法”规定奇数号哲学家先拿左叉、偶数号先拿右叉。这样打破循环等待链——因为相邻两人拿叉顺序不同不可能同时持有左叉等待右叉。记住任何打破“请求并保持”或“循环等待”的策略都是可行解。2.5 易错点进程管理中90%考生栽跟头的5个细节易漏点①P/V操作顺序颠倒导致死锁→ 为什么漏教材强调“先P后V”但未说明互斥与同步信号量的P操作必须严格嵌套。例如生产者中wait(mutex)和wait(empty)顺序错误或消费者中wait(mutex)和wait(full)顺序错误。→ 怎么补牢记口诀“同步信号量P在前互斥信号量P在中V操作逆序写”。生产者wait(empty)→wait(mutex)→操作缓冲区→signal(mutex)→signal(full)。易漏点②信号量初值设置错误→ 为什么漏混淆互斥信号量初值1与同步信号量初值0或资源总数。如将full初值设为1会导致消费者首次取数据时误以为缓冲区有数据。→ 怎么补画表格固化规则信号量类型初值物理意义互斥信号量1表示临界资源可用数量同步信号量空闲资源n表示空闲槽位数如empty同步信号量已用资源0表示已用槽位数如full易漏点③管程与信号量的适用场景混淆→ 为什么漏认为管程是“高级信号量”忽略其封装性优势。管程强制互斥访问每次仅一个进程进入而信号量需程序员手动保证P/V配对。→ 怎么补记牢管程的两个铁律① 所有共享变量只能在管程内访问② 管程内过程调用是互斥的。考试若问“为何管程比信号量更安全”答“管程将同步逻辑封装在内部避免程序员遗漏P/V操作”。易漏点④进程通信类型判断失误→ 为什么漏看到“QQ发送文件”就选“消息传递”忽略线程间通信更常用共享内存。进程通信分低级PV操作和高级共享内存/消息传递/管道/套接字。→ 怎么补用资源粒度判断——共享内存大块数据同进程内线程消息传递小块数据跨进程管道单向流父子进程。易漏点⑤死锁检测算法中资源分配图的化简错误→ 为什么漏化简时只找“无请求边的进程节点”却忽略“该进程必须持有至少一个资源才能运行”。若进程P1持有R1但请求R2P2持有R2但请求R1两者都无“无请求边”图无法化简即死锁。→ 怎么补化简四步法① 找无请求边的进程节点② 释放其持有资源③ 删除其所有边④ 重复直到无节点可删。若剩余节点0则死锁。3. 处理机调度从算法原理到考场手算的避坑指南3.1 调度层次三级调度的本质差异与协同关系调度不是单一动作而是三层防御体系高级调度作业调度决定“哪些作业从外存调入内存”频率最低秒级目标是平衡系统吞吐量与响应时间。典型算法HRRN高响应比优先因其综合考虑等待时间与服务时间避免SJF对长作业的饥饿。中级调度对换调度决定“哪些进程从内存换出到外存”频率中等分钟级目标是提高内存利用率。当内存紧张时OS选择阻塞态或就绪态进程换出待内存空闲再换入。低级调度进程调度决定“就绪队列中哪个进程获得CPU”频率最高毫秒级直接影响用户感知。算法选择取决于系统类型分时系统用RR时间片轮转实时系统用EDF最早截止时间优先。三者关系高级调度选中的作业经中级调度装入内存后其进程进入就绪队列再由低级调度分配CPU。低级调度是基石高级调度是宏观调控中级调度是内存压力缓冲阀。3.2 调度算法手算FCFS、SJF、HRRN、RR的逐行演算考试必考手算核心是掌握“到达时间、服务时间、完成时间、周转时间、带权周转时间”的递推关系。以4个进程为例进程到达时间服务时间P108P214P329P435FCFS先来先服务严格按到达顺序执行。P1(0-8)→P2(8-12)→P3(12-21)→P4(21-26)。P2完成时间12周转时间12-111。SJF短作业优先非抢占式P1(0-8)→P2(8-12)→P4(12-17)→P3(17-26)。注意P2到达时P1已在运行P2需等待P1结束。HRRN高响应比优先响应比(等待时间服务时间)/服务时间。t0时只有P1到达运行P1至t1t1时P2到达P1等待时间1响应比(18)/81.125P2响应比(04)/41选P1t2时P3到达P1响应比(28)/81.25P21P31仍P1... 直到P1结束再比较剩余进程。RR时间片轮转设时间片4。就绪队列变化[P1]→P1执行4ms(0-4)剩余4ms→[P2,P1]→P2执行4ms(4-8)剩余0ms→[P1,P3]→P1执行4ms(8-12)剩余0ms→[P3,P4]→P3执行4ms(12-16)剩余5ms→[P4,P3]→P4执行4ms(16-20)剩余1ms→[P3]→P3执行5ms(20-25)剩余0ms→[ ]。提示RR手算易错点——时间片用完但进程未结束必须将其放回就绪队列队尾而非直接终止。3.3 实时调度EDF与LLF算法的 deadline 敏感性实时系统的核心是时间即正确性。EDF最早截止时间优先和LLF最低松弛度优先都动态调整优先级但计算逻辑不同EDF优先级截止时间截止时间越早优先级越高。例P1截止时间10P28则P2优先。LLF松弛度截止时间−剩余服务时间−当前时间松弛度越小越紧急。例t5时P1剩余服务时间3截止时间10松弛度10−3−52P2剩余服务时间2截止时间9松弛度9−2−52两者松弛度相同需按EDF或FCFS决定。关键区别EDF只看截止时间LLF还看剩余工作量。LLF能更好应对突发长任务但计算开销更大。考试若给定进程参数必须先算松弛度再排序。3.4 死锁从必要条件到银行家算法的实战推演死锁四必要条件互斥/请求保持/不可抢占/循环等待是理论骨架银行家算法是血肉。其核心是安全序列判定是否存在一个进程执行顺序使每个进程都能获得所需资源并完成。步骤初始化WorkAvailableFinish[i]false寻找满足Need[i]≤Work的进程Pi若找到WorkWorkAllocation[i]Finish[i]true返回步骤2若所有Finish[i]true则安全否则不安全。以经典例题为例系统有3类资源A,B,CAvailable(3,3,2)P0-P4的Need和Allocation如下进程NeedAllocationP0(7,4,3)(0,1,0)P1(1,2,2)(2,0,0)P2(6,0,0)(3,0,2)P3(0,1,1)(2,1,1)P4(4,3,1)(0,0,2)手算安全序列Work(3,3,2)P1的Need(1,2,2)≤Work执行P1→Work(32,30,20)(5,3,2)P3的Need(0,1,1)≤Work执行P3→Work(52,31,21)(7,4,3)P0的Need(7,4,3)≤Work执行P0→Work(70,41,30)(7,5,3)P2的Need(6,0,0)≤Work执行P2→Work(73,50,32)(10,5,5)P4的Need(4,3,1)≤Work执行P4。安全序列P1→P3→P0→P2→P4。注意银行家算法中“请求资源”时需先检查Request[i]≤Need[i]再检查Request[i]≤Available最后模拟分配并验证安全性。三步缺一不可。3.5 易错点调度与死锁中隐藏最深的4个逻辑陷阱易错点①HRRN算法中“等待时间”计算错误→ 为什么错将“等待时间”理解为从t0开始的绝对等待实际是从进程到达时刻到被调度时刻的时间差。P1到达t0t5被调度等待时间5P2到达t2t5被调度等待时间3。→ 怎么补手算时在草稿纸上为每个进程单独列“到达时间”“开始执行时间”“等待时间开始执行时间−到达时间”。易错点②RR算法中时间片边界与进程完成的混淆→ 为什么错认为时间片用完进程必须让出CPU忽略“时间片用完时进程恰好完成”的情况。若P1服务时间4时间片4则P1执行完直接退出不放回就绪队列。→ 怎么补判断标准执行后剩余服务时间0才放回队尾。易错点③死锁预防中“破坏请求保持条件”的误解→ 为什么错认为“一次性分配所有资源”就能避免死锁忽略AND型信号量的局限性——它要求进程预知所有资源需求而实际中资源需求可能动态变化。→ 怎么补记牢破坏请求保持进程运行前申请全部资源破坏循环等待按序分配资源如给资源编号进程只能按升序申请。易错点④银行家算法中“Work”变量的物理意义混淆→ 为什么错将Work等同于Available实际Work是模拟分配过程中当前可用的资源总量初始值Available后续随进程完成而增加WorkWorkAllocation[i]。→ 怎么补手算时用不同颜色笔写Work每步更新后标注“←WorkAllocation[i]”。4. 存储管理从连续分配到虚拟内存的演进逻辑4.1 内存层次结构速度、容量、成本的三角博弈存储器不是平面列表而是金字塔顶层寄存器CPU内部ns级KB级最贵→ 存临时运算数据第二层CacheCPU芯片内ns级MB级→ 缓存主存热点数据第三层主存DRAMns级GB级→ 存当前运行程序第四层磁盘缓存内存中一块区域us级→ 缓存频繁访问的磁盘块底层辅存磁盘/SSDms级TB级最便宜→ 长期存储。关键规律越靠近CPU速度越快、容量越小、成本越高。OS的存储管理目标就是让程序感觉“内存无限大、访问速度如Cache”通过虚拟内存技术实现。4.2 连续分配从固定分区到动态可重定位的碎片治理连续分配的核心矛盾是外部碎片内存中分散的小空闲区。四种方式对比方式分区特点碎片问题重定位方式单一连续用户区1个大分区无外部碎片但内存浪费严重无需重定位固定分区分区大小固定产生内部碎片分区进程静态重定位动态分区分区大小按进程需求产生外部碎片静态重定位动态可重定位分区可移动通过紧凑消除外部碎片动态重定位重定位寄存器紧凑Compaction是动态可重定位的灵魂将所有进程向内存一端移动合并空闲区。但移动后进程地址改变需动态重定位——CPU访问内存时地址重定位寄存器值逻辑地址。考试若问“为什么动态可重定位能解决碎片”答“紧凑后重定位寄存器值更新所有进程逻辑地址不变物理地址自动适配新位置”。4.3 分页与分段地址结构、映射机制与根本差异分页和分段是离散分配的两大支柱区别不在技术细节而在设计哲学分页面向机器解决内存利用率问题。页是固定大小的物理块如4KB用户不可见。地址结构页号页内偏移一维线性。分段面向用户解决程序模块化问题。段是逻辑单位如main段、stack段大小可变。地址结构段号段内偏移二维。地址变换对比分页逻辑地址→页号/页内偏移→查页表得块号→物理地址块号×页大小页内偏移分段逻辑地址→段号/段内偏移→查段表得基址/段长→检查偏移段长→物理地址基址段内偏移。提示考试必考地址变换计算。分页题给逻辑地址和页大小求物理地址分段题给逻辑地址、段表项基址、长度先检查越界再计算。4.4 虚拟内存局部性原理与页面置换算法的性能博弈虚拟内存的根基是局部性原理时间局部性刚用过的指令/数据很快会被再用如循环空间局部性刚用过的存储单元附近很快会被访问如数组遍历。这使得OS可以只装入部分页面按需调页。页面置换算法的目标是最小化缺页率但最优算法OPT无法实现故用近似FIFO淘汰最早装入页面。易出现Belady异常增加内存帧数缺页率反而上升LRU淘汰最久未用页面。需硬件支持如TLB中的访问位软件实现用栈或寄存器ClockFIFO的改进用访问位A标记是否被访问。A0时淘汰A1时置0并轮询下一个。改进型Clock增加修改位M(A,M)组合决定淘汰优先级——(0,0)最优未访问未修改(1,1)最差刚访问刚修改。考试若给页面状态表按(A,M)字典序排序即可。4.5 易漏点存储管理中被忽视的3个底层机制易漏点①快表TLB命中率对EAT的指数级影响→ 为什么漏只记公式EATH×(t₁t₂)(1−H)×(t₁t₃t₂)忽略t₁TLB访问时间≈1nst₃内存访问页表≈100ns。当H0.9时EAT≈0.9×(1100)0.1×(1100100)110.9nsH0.99时EAT≈0.99×1010.01×201101.99ns。命中率每提升1%EAT下降近9ns。→ 怎么补手算EAT时先确认题目给的t₁/t₃/t₂值再代入公式勿省略单位。易漏点②分段存储中“段长”字段的越界检查作用→ 为什么漏认为段表只存基址忽略段长是保护关键。CPU访问时先查段表得基址和段长若段内偏移≥段长则触发越界中断。→ 怎么补画段表结构图标出“段长”字段并注明“用于地址越界检查”。易漏点③对换Swapping与页面置换Paging的本质区别→ 为什么漏混为一谈。对换是进程级操作将整个进程换入/换出页面置换是页面级操作只换出一页。对换频率低秒级页面置换频率高毫秒级。→ 怎么补记口诀“对换搬全家置换搬行李”。5. I/O管理与文件系统从设备控制到虚拟设备的抽象跃迁5.1 I/O控制方式从轮询到通道的效率革命I/O效率瓶颈在于CPU与设备速度不匹配。四种方式演进程序I/O轮询CPU不断查询设备状态寄存器直到就绪。CPU利用率≈0纯属浪费中断驱动I/OCPU发I/O命令后去干别的设备就绪时发中断CPU响应中断处理。CPU利用率提升但每次中断开销大DMA直接内存访问CPU初始化DMA控制器DMA接管总线直接在内存与设备间传数据块完成后发中断。CPU只需干预一次I/O通道通道是专用处理器CPU只需发一条通道命令如“传送1000字节”通道自行执行命令序列。CPU干预最少。提示考试问“哪种方式CPU干预最少”答“I/O通道”问“哪种方式适合大数据块传输”答“DMA”。5.2 SPOOLing技术虚拟设备的实现原理与打印机案例SPOOLingSimultaneous Peripheral Operations On-Line是虚拟设备的经典。其核心是用高速设备磁盘模拟低速设备打印机将独占设备变为共享设备。四部分详解输入井/输出井磁盘上的存储区域分别暂存输入数据和输出数据输入缓冲区/输出缓冲区内存中的缓冲区缓解CPU与磁盘速度差输入进程/输出进程常驻内存的系统进程负责数据搬运井管理程序控制作业与井的数据交换。打印机虚拟化流程用户进程发出打印请求 → 假脱机管理进程在磁盘缓冲区申请空闲块存入数据创建假脱机文件加入假脱机文件队列假脱机打印进程从队首取文件 → 将数据从输出井读入内存输出缓冲区 → 交付打印机。关键点打印机始终只与假脱机打印进程交互多个用户进程通过“假脱机文件队列”间接共享打印机。5.3 文件管理逻辑结构、物理结构与目录实现的协同文件系统是OS的“数据管家”三层抽象逻辑结构用户视角如流式文件无结构字节流、记录式文件有结构记录物理结构磁盘视角如连续分配速度快但易碎片、链接分配无碎片但随机访问慢、索引分配折中UNIX用i-node目录结构文件组织方式单级目录简单但命名冲突、两级目录用户级主目录、树形目录现代OS主流支持路径名。i-node索引节点是UNIX/Linux精髓每个文件对应一个i-node存文件属性权限、大小、时间和直接/间接地址项。直接地址项指向数据块间接地址项指向地址块。这样既支持小文件直接寻址快又支持大文件间接寻址扩展。5.4 易错点I/O与文件系统中3个隐蔽的实现细节易错点①DMA控制器中“字节数计数器”的清零时机→ 为什么错认为DMA启动后计数器自动清零。实际是CPU初始化DMA时写入字节数DMA每传一个字节减1减到0时发中断。若未清零DMA会继续传无效数据。→ 怎么补记牢DMA初始化三步① CPU送内存起始地址② CPU送设备地址③ CPU送字节数。易错点②SPOOLing中“输入进程”与“用户进程”的并发关系→ 为什么错认为输入进程是用户进程的一部分。实际输入进程是OS常驻进程独立于用户进程运行。用户进程只负责生成数据并提交给输入进程。→ 怎么补画时序图用户进程→写数据到输入缓冲区→输入进程→从缓冲区读数据→写入输入井。易错点③文件物理结构中“索引分配”的多重间接寻址层级→ 为什么错只知一级间接忽略多级。如Linux ext412个直接块1个一级间接块存256个地址1个二级间接块存256×256个地址1个三级间接块256³个地址。→ 怎么补考试若问“某文件大小超过直接块能存的范围如何寻址”答“使用一级间接块其中每个表项指向一个数据块”。6. 复习清单一份可执行的期末冲刺自查表现在合上笔记拿出一张白纸按以下清单逐项自测。这不是泛泛而谈的“多看书”而是针对期末卷子上最常出现、最易失分、最需要肌肉记忆的点设计的行动清单。每完成一项在旁边打钩卡壳处立刻翻笔记对应章节——这才是高效复习。6.1 核心概念闪电测限时3分钟/题[ ]默写操作系统四大特性定义及相互关系并发宏观同时微观交替、共享互斥/同时访问、虚拟时分/空分复用、异步停停走走。关系并发→共享→虚拟→异步。[ ]画出七态图并标注所有转换条件重点检查“就绪挂起→就绪”需“对换”、“阻塞→阻塞挂起”需“对换事件未发生”。[ ]写出记录型信号量的wait/signal伪代码并解释value0时的阻塞动作value--后若0add_to_list()并block()。[ ]列出死锁四必要条件并各举一个生活例子互斥厕所隔间、请求保持一边吃饭一边要筷子、不可抢占借出的书不能强抢、循环等待四人四筷围坐。6.2 算法手算实战表每题限时5分钟用下面这组数据手算四种调度算法的平均周转时间结果保留1位小数进程到达时间服务时间A03B16C34D52| 算法 | 计算过程本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?