
简介这份资源是西安电子科技大学《操作系统》课程的期末试题及答案解析面向准备操作系统期末考核的本科生与考研复习者用于在闭卷、120分钟、满分100分的真实考试情境下检验知识掌握程度。压缩包内仅含1个PDF文件大小约118KB轻量便携适合打印或平板批注。试卷共四大题涵盖选择、填空等题型内容涉及操作系统组成、线程实现与调度、分页内存管理地址结构、局部性原理与虚拟内存、UNIX i-node目录项限制、磁盘访问时间构成、Linux chmod权限位、DMA与中断驱动I/O等核心考点并配有答案解析便于读者逐题核对思路、定位薄弱章节。已有207人学习适合作为考前自测与知识点串联的参考材料。1. 操作系统期末复习一张从进程到磁盘的知识地图操作系统这门课期末卷子看起来题量不大四大题、100 分、120 分钟但真正拉开差距的从来不是会不会背概念而是能不能把「进程—内存—文件—I/O」四条线串成一张网。很多人复习时按章节平推结果考场上遇到一道银行家算法或者页面置换的地址计算题就翻车本质是脑子里没有地图只有散点。这份试题把选择、填空、简答、综合四类题型铺开恰好覆盖了操作系统的全部主干进程与线程、调度、同步与死锁、内存管理与虚拟存储、文件系统与 i-node、磁盘调度与 I/O 方式、系统调用与安全目标。它适合已经过了一遍教材、需要快速定位重点和易错点的人也适合考前一周想用真题反推知识框架的人。下面按模块把这张地图拆开每一块都落到「考什么、怎么想、哪里容易错」。2. 进程与线程调度层次、共享边界与状态迁移2.1 进程、线程与三级调度的对应关系进程和线程这一块选择题最爱考的就是「什么是共享的、什么是私有的」以及「调度到底调的是谁」。先把三级调度的层次理清楚很多题就自动解开了。调度层次别名决策对象发生频率长期调度作业调度哪个作业被选中创建进程进入系统最低中期调度内存调度进程是否被换入/换出内存中等短期调度CPU 调度哪个就绪进程获得处理器最高短期调度就是 CPU 调度也叫进程调度它决定的是就绪队列里谁上 CPU而不是作业层面的取舍。这一条在选择题里经常用「job scheduling / process scheduling / thread scheduling / CPU scheduling」四个选项来混淆记住「short term CPU 调度」即可锁定。线程的实现方式同样是高频点。线程可以在用户空间实现也可以在内核中实现还可以混合实现。用户空间实现时内核完全不知道线程的存在从内核视角看就是一个普通单线程进程线程切换不需要陷入内核开销小但一个线程阻塞会导致整个进程阻塞内核实现时线程的创建和撤销都要走系统调用内核维护线程表阻塞粒度细但切换代价高。题目问「thread can be implemented in」正确答案是「内核空间或用户空间」因为两种都成立不要被「只能在内核」这种绝对化表述骗到。至于进程内线程的共享边界这是最容易记反的地方。同一进程的所有线程共享地址空间、打开文件表、记账信息accounting information但每个线程有自己独立的寄存器集合和栈。所以「哪个不被所有线程共享」的答案就是寄存器。梳理下来会发现判断标准其实很简单凡是和「执行流现场」相关的寄存器、栈、程序计数器都是线程私有凡是和「资源归属」相关的地址空间、文件、信号处理、记账都是进程级共享。2.2 进程状态图与系统调用的执行路径进程状态图是简答题的常客标准三态模型要能画也能讲运行态Running占用 CPU 正在执行就绪态Ready万事俱备只欠 CPU阻塞态Blocked在等 I/O 或某个事件即使给它 CPU 也跑不下去。迁移关系要背准就绪到运行是调度器选中运行到就绪是时间片用完或被抢占运行到阻塞是主动请求 I/O 或等待资源阻塞到就绪是等待的事件发生。注意没有「阻塞直接到运行」这条边这是画图题最常见的失分点。系统调用则要从「用户态陷入内核态」的角度讲清楚。系统调用是内核提供给用户程序的一组接口应用程序通过它请求内核完成受保护的操作。以读文件为例典型步骤是用户程序把系统调用号和参数放入约定寄存器执行陷入指令trap切换到内核态内核根据系统调用号查表找到对应的服务例程完成实际的文件读取并把结果写回用户空间最后返回用户态继续执行。答题时把「传参—陷入—查表分发—执行—返回」这条链路写全比只写一句「系统调用是操作系统提供的接口」要得分得多。提示状态图和系统调用这两道简答题评分点往往落在「迁移条件」和「态切换」上光画框不写箭头条件分数会打折。3. 同步与死锁信号量、管程和银行家算法的手算套路3.1 信号量、PV 操作与管程的互斥本质同步这一章的骨架是「临界区—信号量—管程」三层递进。信号量 S 是一个整型变量只能通过两个原子操作访问P 操作wait申请资源S 减一若小于零则阻塞和 V 操作signal释放资源S 加一若小于等于零则唤醒一个等待者。填空里问「两个标准原子操作」答案就是 P 和 V写 wait/signal 或 down/up 也对但要和题目用词对齐。管程Monitor是更高层的同步构造它把共享变量和一组操作这些变量的过程封装成一个模块关键特性是「任一时刻管程内只能有一个活跃进程」互斥由编译器或运行时自动保证程序员不用手写 PV。简答题问「能否用管程实现数据结构」答案是能典型做法是把队列的入队出队封装成管程过程条件变量配合 wait/signal 处理「队列满」「队列空」的等待。这里要区分管程的条件变量 wait 和信号量的 P条件变量的 wait 会释放管程锁并阻塞signal 只是唤醒等待者而不立即释放锁语义和 PV 不完全一样混着写是常见错误。生产者—消费者那道综合题本质就是信号量或条件变量加互斥锁的组合。填空的六个空对应的是生产者发现缓冲区非空就等buffer ! 0 时 wait生产后唤醒消费者并释放锁消费者发现缓冲区为空就等buffer 0 时 wait消费后唤醒生产者并释放锁。把「while 而不是 if」这个细节记住——条件等待必须放在循环里防止虚假唤醒这是并发编程的血泪经验也是阅卷老师爱看的点。3.2 死锁四个必要条件与银行家算法的判定流程死锁的四个必要条件是互斥、占有并等待hold and wait、不可抢占no preemption、循环等待circular wait四个缺一不可。填空常挖掉其中两个让你补注意「占有并等待」和「不可抢占」不要写反。银行家算法是综合题的重头戏手算流程要形成肌肉记忆。第一步算 Need 矩阵Need Max − Allocation逐进程逐资源减。第二步做安全性检查用 Available 向量去试分配找一个 Need ≤ Available 的进程假设它运行完并释放全部资源Available Allocation标记完成重复直到所有进程标记或找不到可满足的进程。如果全部能标记系统安全中途卡住系统不安全。第三步处理请求先检查 Request ≤ Need 且 Request ≤ Available然后试探性分配Available − RequestAllocation RequestNeed − Request再做一次安全性检查安全则批准不安全则回滚。这道题里系统初始状态是不安全的因为按 Available 只能顺序执行 P0、P3之后剩余资源无法满足其他进程而 P1 请求 (0,4,2,0) 后反而能形成 P0、P3、P1、P2、P4 的安全序列所以请求可以立即批准。这里最容易错的地方是「不安全 ≠ 死锁」不安全只是「可能」死锁银行家算法拒绝的是进入不安全状态而不是已经死锁。另一个易错点是回滚试探分配后如果判定不安全必须把 Available、Allocation、Need 全部还原很多人在卷面上只改不回后面全错。注意安全性检查的进程执行顺序不唯一只要找到一个安全序列就够不必穷举所有顺序。4. 内存管理分页地址结构、TLB 与页面置换的计算题4.1 分页地址的位划分与虚实地址转换分页系统的地址结构是「页号 页内偏移」题目给一个 32 位地址图高 22 位是页号、低 10 位是偏移就要能反推出页面大小和最大页数。偏移占 10 位页面大小 2^10 1K 字节页号占 22 位最大页数 2^22 4M 页。这类题的关键是「偏移位数决定页大小页号位数决定页数」两个方向别搞反。如果题目换成页大小 2K那偏移就是 11 位页号相应减少一位逻辑一样。虚实地址转换的手算步骤给定虚拟地址和页大小先算页号 P 虚拟地址 / 页大小整除偏移 offset 虚拟地址 mod 页大小查页表看该页是否有效有效则物理地址 物理页框号 × 页大小 offset无效则缺页。以页大小 2K、虚拟地址 8500 为例P 8500 / 2048 4offset 8500 − 4×2048 308查表第 4 页有效且物理页框为 3物理地址 3×2048 308 6452。1400 落在第 0 页02047而第 0 页无效所以产生缺页5000 落在第 2 页40966143有效物理页框 12100 落在第 1 页20484095无效缺页。把每个虚拟页的地址区间列出来第 k 页对应 k×2K 到 (k1)×2K − 1缺页区间和有效区间就一目了然这比逐个数硬算稳得多。4.2 TLB 的作用与局部性原理的正确表述TLBTranslation Lookaside Buffer转换检测缓冲区是 MMU 里的一个小型硬件缓存存放最近用过的页表项每个表项记录虚拟页号、物理页框号、修改位和保护码。它的作用是加速虚拟地址到物理地址的转换避免每次访存都去查内存中的页表。答题要点是「硬件、缓存页表项、命中则跳过页表访问」不要把它和 Cache 混为一谈——TLB 缓存的是地址映射Cache 缓存的是数据。局部性原理的表述要精确。它包含时间局部性和空间局部性核心结论是「程序在任一时刻只访问地址空间中相对较小的一部分」而不是「程序按顺序执行代码」或「连续访问大量变量」。虚拟存储正是建立在局部性之上因为访问集中才能把常用页留在内存、把冷页放到外存而不至于频繁缺页。选择题里那几个干扰项就是利用「顺序执行」「连续访问」这种似是而非的说法来设套认准「小部分地址空间」这个表述即可。提示地址转换题一定要先写公式再代数卷面上留下 P 和 offset 的计算过程即使最后数字算错也能拿步骤分。5. 文件系统与磁盘i-node、权限位和调度算法的横向对比5.1 i-node 目录项与 chmod 权限编码UNIX 的 i-node 方案里目录项只存两个字段文件名14 字节和 i-node 编号2 字节。文件元数据类型、大小、权限、时间戳、数据块指针等全部存在 i-node 里目录只是个「名字到编号」的映射表。文件系统能容纳多少文件取决于 i-node 编号的位数2 字节即 16 位最多 2^16 64K 个文件。这类题只要抓住「编号位宽决定文件数上限」就不会被文件名长度带偏。chmod 的权限编码是送分点也是送命点。r4、w2、x1三位八进制分别对应 owner、group、other。题目要求「属主可读写执行其他人只读」属主 4217组 4其他 4答案是 744。注意 755 是「属主全权限、其他人可读可执行」644 是「属主读写、其他人只读」611 是「属主读写执行、组和其他可执行」四个选项一字之差考的就是对位权的敏感度。Linux 中文件元数据存放在 i-node 中这也是填空的高频答案。5.2 磁盘访问时间构成与四种调度算法读写一个磁盘块的时间由三部分组成寻道时间磁臂移动到目标柱面、旋转延迟目标扇区转到磁头下、数据传输时间。对大多数磁盘而言寻道时间占主导因为机械移动远慢于旋转和传输。填空问「哪个主导」答寻道时间。磁盘调度算法的对比要能算也能说清楚适用场景算法决策依据特点本题寻道时间FCFS按请求到达顺序公平但寻道长876 msSSTF选距当前磁头最近的请求寻道短可能饥饿360 msSCAN电梯沿一个方向扫到底再反向兼顾吞吐与公平348 ms以初始柱面 20、请求序列 10、22、20、2、40、6、38、每移动一柱面 6 ms 为例FCFS 按原序走总移动量 1012218383432146 柱面乘 6 得 876 msSSTF 从 20 出发依次走 22、10、6、2、38、40移动量 2124436260 柱面得 360 msSCAN 初始向上先走 22、38、40 再反向到 10、6、2移动量 2162304458 柱面得 348 ms。算的时候把磁臂访问序列写出来再累加比心算靠谱。另外磁盘 0 号扇区是主引导记录 MBR这是填空常考点。5.3 三种 I/O 方式的分工差异I/O 实现方式有三种区别在于 CPU 参与程度。程序控制 I/O 让 CPU 全程忙等不断轮询状态寄存器CPU 利用率最低中断驱动 I/O 在等待设备就绪时允许 CPU 去做别的事设备就绪后发中断通知 CPU 处理CPU 不再空转DMA直接内存存取由 DMA 控制器在内存和 I/O 之间直接搬数据CPU 只在开始和结束时介入传输过程中完全不参与。所以「不需要 CPU 参与数据块传输」的答案是 DMA。简答题比较程序控制 I/O 和中断驱动 I/O 时核心就一句前者 CPU 忙等、后者等待期间 CPU 可执行其他任务。安全目标方面机密性、完整性之外还有系统可用性system availability三者合称 CIA填空别只写两个。6. 易错点排查五个最容易在考场上丢分的地方易漏点一把短期调度当成作业调度。为什么漏三级调度的中文别名太多长期作业、中期内存、短期CPU背的时候容易串。怎么补记「短快CPU」短期调度发生频率最高对应 CPU 调度作业调度是长期且频率最低。易漏点二线程共享内容记反。为什么漏地址空间和寄存器都像「进程的东西」不细想就混。怎么补用「执行现场私有、资源归属共享」一句话切分寄存器、栈、PC 私有地址空间、打开文件、记账信息共享。易漏点三银行家算法试探分配后不回滚。为什么漏手算时只顾着往下推安全序列忘了失败要还原三个矩阵。怎么补每次试探分配前先把 Available、Allocation、Need 抄一份备份判定不安全立即恢复卷面上也写出「回滚」二字。易漏点四地址转换把页号和偏移算反。为什么漏除法和取模一紧张就颠倒。怎么补先写「页号 地址 / 页大小偏移 地址 % 页大小」再代数同时把每页的地址区间列成表缺页判断直接查表。易漏点五把「不安全」直接等同于「死锁」。为什么漏两个词在中文语境里太像。怎么补不安全是「存在进入死锁的可能」死锁是「已经发生」银行家算法拒绝的是前者答题时明确写出「系统处于不安全状态但未必已死锁」。7. 考前查漏补缺一份可执行的复习清单复习到最后一两天最有效的动作不是再刷一套新题而是拿一张白纸把下面这张清单默写一遍写不出来的就是漏洞。清单按「概念—计算—画图」三类分开每类都有明确的验收标准。模块必须能默写/手算的内容验收方式进程线程三级调度对应关系、线程共享与私有、三态图迁移条件白纸画状态图并标箭头条件同步死锁P/V 语义、管程互斥特性、死锁四条件、银行家三步手算一道 Need 矩阵并写出安全序列内存地址位划分、虚实转换公式、TLB 作用、局部性表述任给一个虚拟地址 30 秒内算出物理地址或缺页文件磁盘i-node 目录项、chmod 编码、磁盘时间三要素、三种调度默写 744/755/644 含义并算一组寻道时间I/O 与安全三种 I/O 的 CPU 参与度、CIA 三要素一句话说清 DMA 为何不需要 CPU 搬数据具体操作上我自己的习惯是分三轮走。第一轮限时 20 分钟默写上面表格的左两列凡是卡壳超过 10 秒的就标记第二轮只攻标记项回到对应章节把公式和定义重新推一遍尤其是银行家算法的回滚和地址转换的取模必须动手算而不是看答案第三轮做「反向出题」拿真题里的选择题选项自己改一个数字或换一个词看还能不能选对比如把页大小从 1K 改成 2K、把 chmod 的 744 改成 755能改对说明真懂了。还有一个小技巧把所有计算题的公式集中写在一页纸上考前只看这一页。地址转换就三行——页号等于地址整除页大小、偏移等于地址对页大小取模、物理地址等于页框号乘页大小加偏移磁盘寻道就一行——总移动柱面数乘每柱面毫秒数银行家就三步——算 Need、找安全序列、试探后回滚。公式页比笔记页薄进考场前扫一眼比翻整本教材管用。注意默写清单时不要翻书翻书默写等于没默写标记出来的漏洞当天必须闭环拖到第二天基本就忘了。从那以后我每次考前复习都强制自己先默写这张清单再碰题因为翻车最多的从来不是难题而是那些「以为自己会」的基础点。这份试题加答案解析的价值就在于它把选择、填空、简答、综合四类题型的踩坑点都摆在了明面上对着它把上面五个易错点逐个过一遍比盲目刷十套卷子更踏实。希望帮到你。本文还有配套的精品资源点击获取