首页 / 资讯中心 / 文章详情

操作系统期末复习指南:进程线程、调度算法与虚拟内存核心知识点梳理

操作系统期末复习指南:进程线程、调度算法与虚拟内存核心知识点梳理 ★ FEATURED ARTICLE
简介这份山东大学操作系统期末复习笔记面向准备操作系统课程期末考核的高校学生尤其适合需要系统梳理考点、快速回顾核心概念的备考人群。内容覆盖操作系统概念与功能、系统结构、进程管理、进程状态转换、进程调度与进程间通信等模块并对并发与并行、用户模式与核心模式、API 与系统调用接口、Simple structure、Layered、Microkernel 等结构设计做了对比整理还涉及存储管理、文件管理、设备管理与作业管理等章节要点。资源包共 1 个文件为 pdf 格式大小约 2.91MB便于打印或平板批注复习。目前已有 974 人学习下载说明该笔记在同类复习资料中具有一定参考价值。读者可借助其中的概念辨析、状态转换时机分析和结构设计优缺点对比快速定位薄弱环节提升期末复习效率。1. 操作系统到底在管什么从“电脑的大管家”说起很多人第一次翻开操作系统教材看到“进程管理、存储管理、文件管理、设备管理”这排词脑子里冒出的第一个念头是这不就是电脑里那个看不见摸不着的东西吗它到底在忙什么其实你可以把一台计算机想象成一家餐厅——硬件是厨房设备应用程序是各色菜品而操作系统就是那位后厨总管。它不亲自炒菜但没有它灶台没人分配、食材没人看管、订单没人排期整个厨房立刻乱成一锅粥。操作系统是一种系统软件它的核心任务是组织和管理计算机的软硬件资源控制程序执行并向用户提供服务。换句话说它是硬件之上、应用之下的那层“中间人”。搞懂它不只是为了应付期末复习里那些概念题更是理解“为什么电脑能同时开这么多程序还不崩”的底层逻辑。这份复习资料把操作系统从导论到文件系统实现的知识点串成了一条线接下来我们就沿着这条线把几个最容易懵的概念一个个拆开看。2. 进程与线程为什么程序“跑起来”就变了个人2.1 进程不是程序就像跑步不是跑道程序是躺在磁盘上的静态实体是一堆指令和数据的集合。当你双击它、把它加载到内存里执行它就变成了进程。打个比方程序是一份菜谱进程是照着菜谱真正在厨房里忙活的那次烹饪过程。菜谱可以复印很多份同一份菜谱也可以同时被多个人做——这就是为什么一个程序可以对应多个进程。进程的组成不只是一段代码它还包括数据段全局变量、寄存器内容、栈临时变量和堆动态分配的内存。而操作系统为了管理进程专门给它配了一张“身份证”——PCB进程控制块记录进程的外部特征和运行变化。程序加数据加PCB构成进程三要素。进程有生命周期会诞生也会消亡。它有三种基本状态运行、等待、就绪。运行中的进程如果发出I/O请求就进入等待状态等待的事件发生了它回到就绪状态排队时间片用完或有更高优先级进程出现运行态也会退回就绪态只有被调度程序选中就绪态才能再次变成运行态。这套状态转换图是期末考卷上的常客画的时候记住一句话等待态不能直接跳到运行态必须先回到就绪队列重新排队。2.2 线程是进程里的“轻量级打工人”有了进程为什么还要引入线程因为进程太“重”了。创建一个进程要分配独立的内存空间、切换时要保存大量上下文开销不小。而线程是CPU使用的基本单元同一个进程里的多个线程共享该进程的内存和资源创建和切换的代价都小得多。线程带来的好处很直接响应度高一个线程阻塞了其他线程还能继续跑资源共享方便同一进程内的线程天然共享内存经济实惠切换成本低还能利用多处理器让一个进程里的多个线程真正并行跑在不同CPU上。线程分两种。用户线程由用户空间的线程库管理不需要内核支持但一个线程阻塞可能导致整个进程阻塞。内核线程由操作系统直接支持和管理线程之间阻塞不相互影响但切换代价接近进程。多线程模型有多对一、一对一、多对多三种分别对应不同的映射策略。这里有个容易翻车的点线程取消分异步撤销和延迟撤销。异步撤销是立即终止目标线程简单粗暴但可能导致资源没释放延迟撤销是让目标线程定期检查是否需要被取消更安全但需要线程配合。考试里问“哪种更推荐”答案通常是延迟撤销因为异步撤销容易留下“烂摊子”。3. CPU调度与进程同步谁先跑、谁等谁规则比你想的复杂3.1 调度算法不是玄学是取舍CPU调度要解决的核心问题是就绪队列里一堆进程下一个该谁上CPU不同的调度算法就是不同的“排队规则”。先到先服务FCFS最简单非抢占谁先来谁先跑。但它有个著名的“护航效果”——一个长进程排在前面后面一堆短进程全被堵住平均等待时间很难看。最短作业优先SJF理论上能给出最小平均等待时间但问题是你怎么知道下一个作业要跑多久所以它常用于长期调度短期调度里更多用它的抢占版本SRTF。轮转法RR是分时系统的标配。每个进程执行一个时间片q用完就回到就绪队列末尾。q的设置是个技术活q太大就退化成FCFSq太小则上下文切换开销过大。经验法则是让时间片比上下文切换时间长一个数量级。优先级调度允许高优先级进程抢占CPU但会带来“饥饿”问题——低优先级进程可能永远排不上。解决办法是“老化”随着等待时间增加逐渐提高进程优先级。多级队列调度把就绪队列分成多个独立队列比如前台交互进程一个队列、后台批处理进程一个队列各自用不同的调度算法。多级反馈队列则更进一步允许进程在队列之间移动占CPU时间太多的进程被降到低优先级队列等待太久的进程被升到高优先级队列。这是最常用也最复杂的调度程序I/O约束型和交互型进程通常留在高优先级队列。衡量调度算法好坏的指标包括CPU使用率、吞吐量、周转时间、等待时间和响应时间。需要最大化的有CPU使用率和吞吐量需要最小化的有周转时间、等待时间和响应时间。对于交互系统最小化响应时间的方差比最小化平均值更重要——用户能忍受偶尔慢但不能忍受忽快忽慢。3.2 临界区、信号量与死锁同步的三道坎进程同步要解决的是多个进程同时访问共享数据时怎么保证不出错。临界区是每个进程里那段可能改变共享变量的代码必须保证没有两个进程同时在临界区内执行。一个合格的临界区解决方案要满足三个条件互斥、有空让进、有限等待。Peterson算法是经典的软件方法只适用于两个进程。硬件方法用TestAndSet原子指令来加锁。但实际系统里最常用的是信号量。信号量S是一个整数变量除了初始化外只能通过P操作和V操作访问。计数信号量值域不受限二进制信号量只能取0或1也就是互斥锁。自旋锁是忙等待的信号量进程在等待时还在循环检查这在单处理器系统里是灾难——CPU被白白浪费。但在多处理器系统里自旋锁反而有用一个线程在一个CPU上自旋时另一个线程可以在另一个CPU上执行临界区代码。信号量和互斥锁的区别是高频考点信号量用于同步互斥锁用于互斥互斥锁只能0或1信号量可以是其他整数互斥锁的加锁和解锁必须由同一线程完成信号量可以一个进程释放、另一个进程获得。死锁是同步问题里最麻烦的一种一组进程各自持有资源又都在等别人释放资源形成循环等待谁也动不了。死锁有四个必要条件——互斥、占有并等待、非抢占、循环等待。处理死锁有三条路预防破坏必要条件、避免银行家算法确保系统不进入不安全状态、检测与恢复允许死锁发生检测到再处理。这里要区分死锁和饥饿。死锁是循环等待涉及多个进程等待的是永远不会释放的资源饥饿是某个进程长期得不到调度可能只有一个进程等待的是会被释放但总不分配给自己的资源。死锁一定涉及循环等待饥饿则不一定。4. 内存与虚拟内存为什么你的电脑能同时开这么多程序4.1 从分区到分页内存分配的进化史早期内存管理用连续分配。固定分区把内存划成固定大小的块每个块装一个进程简单但浪费——进程比分区小就产生内碎片比分区大就装不下。可变分区根据进程大小动态划分灵活但会产生外碎片——总空闲内存够但不连续装不下新进程。解决办法是“紧缩”把分散的空闲空间合并起来但紧缩本身很费时间。非连续分配解决了碎片问题。分页把进程空间切成固定大小的页物理内存切成同样大小的帧页可以离散地装进任意空闲帧里。页表记录页到帧的映射关系PTBR寄存器存页表基地址PTLR存页表长度。TLB是页表的高速缓存并行搜索能大幅提高地址转换效率。分段则按程序自身逻辑划分每段有段号内存动态划分为长度不同的物理段。分段对用户更友好因为符合程序的自然结构分页对系统更友好因为消除了外碎片。段页式结合两者先分段段内再分页。地址绑定有三种时机编译时生成绝对代码、加载时生成重定位代码、执行时需要硬件支持。逻辑地址是CPU生成的地址物理地址是内存单元看到的地址。编译和加载时两者相同执行时绑定方案下两者不同。4.2 虚拟内存给每个进程一个“幻觉”虚拟内存的核心思想是把用户逻辑内存和物理内存分开。程序不需要全部加载到内存就能运行只有真正用到的页才调入物理内存。这带来几个好处弥补物理内存不足、提高编程便利性、允许共享页、减少物理内存读取。按需调页是虚拟内存的基础。访问一个尚未调入内存的页会触发缺页陷阱操作系统处理中断、读入页、重新启动进程。缺页率等于缺页次数除以访问页面总数。页面置换算法决定了内存满了该换出哪一页。FIFO换掉最先调入的简单但可能换出常用页。最优置换换掉未来最远才访问的页理论最优但无法实现只能用来做基准比较。LRU换掉最近最少使用的页用计数器或栈实现效果接近最优但开销大。二次机会算法给每个页一个引用位FIFO选中某页时如果引用位是1就给它第二次机会挪到链表尾并清零引用位。时钟算法是二次机会的环形实现。增强二次机会同时考虑使用位和修改位优先换出最近没使用也没修改的页。帧分配有平均分配和比例分配两种。全局置换从所有帧里选牺牲页系统吞吐量更好局部置换只从进程自己的帧里选可能导致某些帧一直空闲。系统颠簸是频繁调页导致换页时间大于运行时间解决办法是根据缺页率动态调整分配的帧数。5. 文件系统与死锁数据怎么存、进程怎么卡5.1 文件系统从文件名到磁盘块的距离文件系统要解决的核心问题是用户给一个文件名系统怎么找到对应的文件内容答案是FCB文件控制块。FCB包含文件的各项信息——访问许可、文件大小、数据块位置等。系统调用open()时文件系统搜索目录结构找到FCB复制到系统范围内的打开文件表再在单个进程的打开文件表里创建条目通过指针相连。open()返回的是指向进程打开文件表条目的指针。文件分配空间有三种方式。连续分配把文件存在一系列连续磁盘块上访问性能最好但外部碎片严重。链接分配把文件块做成单向链表无外部碎片但指针损坏会导致严重问题且不支持直接访问。FAT文件分配表把散落的指针收拢到一张表里下标是块号值指向下一个块号便于快速访问和缓存。FAT32每项占32位。虚拟文件系统VFS在文件系统接口和具体实现之间加了一层把不同实现的文件系统统一起来。这样上层应用不需要关心底层是本地文件系统还是远程文件系统。5.2 死锁处理预防、避免与检测死锁预防是静态策略通过限制资源申请来破坏四个必要条件之一。比如要求进程在执行前一次性申请所有资源或者按资源编号递增顺序申请。代价是资源利用率低可能产生饥饿。死锁避免是动态策略系统事先知道进程的最大资源需求在每次分配前用银行家算法评估分配后系统是否仍处于安全状态安全状态是指存在一个进程序列每个进程都能获得所需资源并顺利完成。安全状态不会死锁不安全状态可能死锁。银行家算法要求进程说明最大需求、申请资源小于可用总数、等待时间有限、进程间无顺序关系且无需协作同步。死锁检测允许死锁发生然后检测并恢复。单实例资源用等待图有环就有死锁。多实例资源用类似银行家算法的检测算法找request小于available加前面进程allocation的序列排不进序列的进程产生死锁。恢复方法包括选择牺牲品进程、回滚到安全状态、终止进程并重启。选择牺牲品时要小心饥饿——某个进程总被选中就会一直得不到执行。6. 什么时候该用这些知识一个复习者的边界判断学操作系统最怕的是把概念背得滚瓜烂熟一到实际问题就不知道用哪个。这里给几个判断场景帮你把知识落到地上。当你需要分析“为什么电脑同时开浏览器、音乐播放器和文档编辑器不卡”时用进程和线程的知识每个应用是一个进程浏览器里多个标签页可能是多个线程操作系统通过调度算法分配CPU时间片通过虚拟内存让每个进程觉得自己独占内存。当你需要解释“为什么程序偶尔会卡死”时用死锁和饥饿的知识如果多个进程互相等待对方持有的资源就是死锁如果某个进程长期得不到调度就是饥饿。死锁需要打破循环等待饥饿需要老化机制。当你需要理解“为什么硬盘上文件删了还能恢复”时用文件系统的知识删除通常只是标记FCB为可用实际数据块还没被覆盖。连续分配的文件恢复概率高链接分配和FAT的文件恢复要看指针链是否完整。注意考试里问“哪种调度算法最好”没有标准答案。FCFS简单但护航效果严重SJF理论最优但需要预知运行时间RR适合分时系统但时间片设置敏感多级反馈队列最通用但最复杂。答题时要根据场景说取舍不要只背结论。有个血泪经验复习时不要只背算法名字和定义一定要动手画一遍进程状态转换图、算一遍银行家算法的安全序列、模拟一遍LRU的页面置换过程。这些计算题光看是看不出坑的只有自己算一遍才知道哪里容易翻车。比如银行家算法里安全序列可能不止一个但考试通常只要求找到一个LRU的栈实现里栈顶是最近使用的栈底是牺牲页别搞反了。从那以后我每次复习操作系统都会先把进程状态图、调度算法对比表、页面置换模拟这三样东西手写一遍再去看其他概念。因为这三块是计算题和综合题的高频区概念题反而可以靠理解拿分。希望这份梳理能帮你在期末复习里少走点弯路把操作系统这头“大象”真正装进脑子里。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站