【万字长文】操作系统原理期末试题深度剖析与核心考点精讲(卷一)

前言 操作系统(Operating System, OS)是计算机科学与技术专业的核心基础课程,也是考研(如408统考)和大厂校招笔试、面试的必考重镇。许多同学在期末复习或备考时,往往只停留在“刷题-对答案”的浅层阶段,忽略了题目背后庞大的知识网络和底层设计哲学。
本系列博客将对《操作系统原理》期末经典试题进行逐题深度解剖。本文作为卷一,不仅提供标准答案,更将每道题作为切入点,横向拓展核心概念,纵向深挖底层原理,补充图解说明、伪代码实现及易错点避坑指南。全文超万字,建议收藏、点赞并反复阅读,将其作为你的操作系统“复习字典”。
目录
一、单项选择题:基础概念的精准狙击
1. 操作系统的分类与演进
【原题】 以下著名的操作系统中,属于多用户、分时系统的是( )。 A. DOS系统 B. UNIX系统 C. Windows NT系统 D. OS/2系统 【答案】B
【深度解析】
本题考查的是操作系统的分类及其典型代表。要准确作答,必须清晰掌握各类操作系统的核心特征:
- 分时操作系统(Time-Sharing OS):系统将CPU的运行时间划分成极短的时间片(Time Slice),轮流分配给多个联机终端作业。其核心特征是多路性、独立性、及时性和交互性。UNIX是分时系统的鼻祖和最经典的代表,它允许多个用户通过终端同时登录并交互式地使用系统资源。
- DOS系统(Disk Operating System):如MS-DOS,是典型的单用户单任务操作系统。同一时间只能有一个用户运行一个程序,没有多用户和分时的概念。
- Windows NT系统:虽然支持多用户和多任务,但它主要被设计为网络操作系统和现代通用操作系统,其内核架构(混合内核/微内核演进)与传统的UNIX纯分时系统在调度策略(如优先级抢占式调度)上有显著区别。
- OS/2系统:IBM和微软早期合作开发的操作系统,主要定位为单用户多任务的PC操作系统,后逐渐被市场淘汰。
【知识拓展:操作系统的五大基本类型】
【避坑指南】
很多同学会把“多任务”和“分时”混为一谈。注意:多任务不等于分时。现代PC操作系统(如Windows 11)是多任务、多用户的,但它们采用的是基于优先级的抢占式调度,而不是传统意义上为了公平交互而设计的固定时间片轮转的“分时系统”。在应试中,“分时系统”往往特指UNIX及其衍生理念。
2. 进程的核心特征
【原题】 在操作系统中,进程的最基本的特征是( )。 A. 动态性和并发性 B. 顺序性和可再现性 C. 与程序的对应性 D. 执行过程的封闭性 【答案】A
【深度解析】
本题考查进程与程序的本质区别。
- 进程(Process):是程序的一次执行过程,是系统进行资源分配和调度的基本单位。
- 程序(Program):是存放在磁盘上的指令和数据的静态集合。
进程具有五大特征,其中最基本、最核心的是动态性和并发性:
选项B(顺序性)、D(封闭性)是程序在单道环境下执行时的特征。一旦引入多道程序并发执行,程序就失去了封闭性(执行结果受其他进程影响)和可再现性(初始条件相同,结果可能不同),从而演变为进程。
【知识拓展:并发 vs 并行】
- 并发(Concurrency):两个或多个事件在同一时间间隔内发生。在单核CPU上,多进程是并发执行的(交替占用CPU)。
- 并行(Parallelism):两个或多个事件在同一时刻发生。在多核CPU上,不同核心上的进程是并行执行的。
- 名言警句:“并发是关乎逻辑结构,并行是关乎物理执行。”(Rob Pike)
3. 信号量与PV操作的本质
【原题】 操作系统中利用信号量和P、V操作,( )。 A. 只能实现进程的互斥 B. 只能实现进程的同步 C. 可实现进程的互斥和同步 D. 可完成进程调度 【答案】C
【深度解析】
信号量(Semaphore)机制由Dijkstra提出,是解决进程同步与互斥问题的最经典工具。
- 互斥(Mutual Exclusion):解决的是“争夺”问题。多个进程访问临界资源(如打印机、共享变量)时,必须保证同一时刻只有一个进程进入临界区。
- 实现方式:设置互斥信号量 mutex,初值为 1。进入临界区前执行 P(mutex),离开后执行 V(mutex)。
- 同步(Synchronization):解决的是“协作”问题。多个进程需要按照特定的先后顺序执行(如生产者必须先生产,消费者才能消费)。
- 实现方式:设置同步信号量 empty 和 full,初值通常为 0。前操作完成后执行 V(S),后操作开始前执行 P(S)。
【知识拓展:记录型信号量与整型信号量】
早期的整型信号量存在“忙等”(Busy Waiting)问题,即进程在 P 操作不满足时会不断循环测试,浪费CPU资源。 现代OS采用记录型信号量,除了整型值 value,还增加了一个进程链表 list:
typedef struct {
int value;
struct process_control_block *list;
} semaphore;
// P操作 (wait)
void wait(semaphore *S) {
S->value—;
if (S->value < 0) {
block(S->list); // 阻塞当前进程,加入等待队列
}
}
// V操作 (signal)
void signal(semaphore *S) {
S->value++;
if (S->value <= 0) {
wakeup(S->list); // 从等待队列唤醒一个进程
}
}
注:S->value 的绝对值表示等待队列中阻塞进程的个数。
【避坑指南】
选项D“可完成进程调度”是干扰项。PV操作属于进程同步机制,而进程调度(如选择哪个就绪进程上CPU)是由调度程序(Scheduler) 根据调度算法(如RR、SJF)完成的。虽然PV操作会导致进程阻塞和唤醒,从而间接触发调度,但它本身不是调度算法。
4. 作业调度的核心目标
【原题】 作业调度的关键在于( )。 A. 选择恰当的进程管理程序 B. 用户作业准备充分 C. 选择恰当的作业调度算法 D. 有一个较好的操作环境 【答案】C
【深度解析】
在批处理系统中,作业管理分为两级调度:作业调度(高级调度)和进程调度(低级调度)。
- 作业调度:决定将外存后备队列中的哪些作业调入内存,为其创建进程并分配资源。
- 关键在于算法:作业调度算法的优劣直接决定了系统的吞吐量(单位时间完成的作业数)、周转时间(作业从提交到完成的总时间)、带权周转时间等核心性能指标。
【知识拓展:经典作业调度算法对比】
| FCFS (先来先服务) | 按到达时间先后调度 | 公平、实现简单 | 对短作业不利,平均周转时间长 | 无明显偏好 |
| SJF (短作业优先) | 优先调度估计运行时间最短的作业 | 平均周转时间最短 | 可能导致长作业“饥饿”,需预知运行时间 | 批处理系统 |
| HRRN (高响应比优先) | 响应比 = (等待时间+运行时间)/运行时间 | 兼顾长短作业,不会饥饿 | 每次调度需计算所有作业响应比,开销大 | 批处理系统 |
5. 虚拟内存的“噩梦”:系统抖动
【原题】 系统抖动是指( )。 A. 使用机器时,屏幕闪烁的现象 B. 由于主存分配不当,偶然造成主存不够的现象 C. 系统盘有问题,致使系统不稳定的现象 D. 被调出的页面又立刻被调入所形成的频繁调入调出现象 【答案】D
【深度解析】
抖动(Thrashing,也称颠簸) 是请求分页虚拟存储系统中的一种病态现象。 当系统中运行的进程过多,分配给每个进程的物理块数少于其工作集(Working Set) 大小时,进程会频繁发生缺页中断。
- 表现:系统大部分时间都在进行页面的换入换出(磁盘I/O),而极少进行实际的CPU计算。CPU利用率断崖式下跌,系统吞吐量趋近于0。
- 根本原因:多道程序度过高,内存资源严重不足。
- 解决策略:引入工作集模型或页面置换算法的优化,必要时挂起(Suspend) 部分进程,降低多道程序度。
【避坑指南】
不要把“抖动”和“Belady异常”混淆。
- 抖动是宏观上的系统性能崩溃(频繁换页)。
- Belady异常是指在使用FIFO页面置换算法时,分配给进程的物理块数增加,缺页率反而上升的局部反常现象。
6. 分页存储管理的地址映射
【原题】 在分页存储管理系统中,从页号到物理块号的地址映射是通过( )实现的。 A. 段表 B. 页表 C. PCB D. JCB 【答案】B
【深度解析】
分页存储管理将用户的逻辑地址空间划分为大小相等的页(Page),将物理内存划分为同样大小的物理块/页框(Page Frame)。
- 页表(Page Table):每个进程拥有一张页表,存放在内存中。页表的第 i 项记录了逻辑页号 i 对应的物理块号 b。
- 地址转换过程:
- 逻辑地址 = 页号 P + 页内偏移量 W。
- 查页表,找到页号 P 对应的物理块号 b。
- 物理地址 = 物理块号 b × 页面大小 + 页内偏移量 W。
【知识拓展:PCB与JCB的区别】
- PCB (Process Control Block,进程控制块):进程存在的唯一标志,包含进程状态、程序计数器、寄存器、内存指针等信息。
- JCB (Job Control Block,作业控制块):作业存在的唯一标志,包含作业名、类型、资源需求、当前状态等,主要用于批处理系统的作业调度。
- 段表:用于分段存储管理,记录段号到内存起始地址和段长的映射。
7. 文件系统目录结构的演进
【原题】 在下述文件系统目录结构中,能够用多条路径访问同一文件(或目录)的目录结构是() A. 单级目录 B. 二级目录 C. 纯树型目录 D. 非循环图目录 【答案】D
【深度解析】
目录结构的演进是为了解决文件重名、查找效率和文件共享的问题。
【避坑指南】
“非循环”是重点。如果目录结构中存在循环(如目录A包含目录B,目录B又包含目录A),在进行文件遍历(如 rm -rf 或 find)时会导致死循环。因此,现代文件系统(如ext4, NTFS)在实现共享链接时,必须通过算法(如引用计数、垃圾回收)严格防止循环的产生。
8. SPOOLing技术的虚拟化魔法
【原题】 SPOOLing技术可以实现设备的()分配。 A. 独占 B. 共享 C. 虚拟 D. 物理 【答案】C
【深度解析】
SPOOLing(Simultaneous Peripheral Operations On-Line,假脱机技术) 是操作系统中“虚拟技术”在设备管理上的经典应用。
- 痛点:打印机是独占设备,同一时刻只能被一个进程使用。如果进程A在打印,进程B就必须阻塞等待,导致CPU和打印机效率低下。
- 解决方案:在磁盘上开辟两个区域:输入井和输出井。
- 当进程A请求打印时,OS并不真正把打印机分配给它,而是将打印数据写入磁盘的输出井中,并返回“打印完成”。
- 后台有一个缓输出进程,负责不断从输出井读取数据,真正驱动打印机进行打印。
- 本质:利用磁盘(共享设备)模拟了多台逻辑上的打印机,将独占设备改造成了共享设备,对用户而言,实现的是虚拟设备的分配。
9. 死锁的避免:银行家算法
【原题】 避免死锁的一个著名的算法是()。 A. 先人先出算法 B. 优先级算法 C. 银行家算法 D. 资源按序分配法 【答案】C
【深度解析】
处理死锁的策略分为四种,必须严格区分:
【避坑指南】
题目问的是“避免”,所以选C(银行家算法)。如果问“预防”,则选D(资源按序分配法)。这是期末考试中最喜欢玩的文字游戏。
10. 进程与线程的从属关系
【原题】 下列关于进程和线程的叙述中,正确的是()。 A. 一个进程只可拥有一个线程 B. 一个线程只可拥有一个进程 C. 一个进程可拥有若干个线程 D. 一个线程可拥有若干个进程 【答案】C
【深度解析】
- 进程:资源分配的基本单位。拥有独立的地址空间、文件描述符等。
- 线程:CPU调度的基本单位。是进程内的一个执行流。
- 关系:
- 一个进程可以包含一个或多个线程(多线程进程)。
- 线程不能脱离进程而存在,它必须依附于某个进程,共享该进程的地址空间和资源(如堆、全局变量、打开的文件)。
- 线程自己只拥有极少的资源(如栈、寄存器、程序计数器、线程控制块TCB)。
【知识拓展:用户级线程 vs 内核级线程】
- 用户级线程(ULT):线程管理在用户空间完成,内核不可见。切换快,但一个线程阻塞会导致整个进程阻塞。
- 内核级线程(KLT):线程管理由OS内核完成。一个线程阻塞不影响同进程的其他线程,但切换需要陷入内核,开销大。 现代OS(如Linux的NPTL,Windows)普遍采用1:1模型(一个用户线程映射到一个内核线程)。
二、判断题:易混淆细节的火眼金睛
1. 进程与程序的对应关系
【原题】 简单地说,进程是程序的执行过程。因而,进程和程序是一一对应的。( × ) 【解析】 进程与程序不是一一对应的。
【深度剖析】
这是一个极其经典的易错点。我们可以从两个方向来反驳“一一对应”:
- 场景:你在电脑上同时打开了3个Word文档,或者打开了5个Chrome浏览器窗口。
- 本质:磁盘上只有一个 WINWORD.EXE 或 chrome.exe 的程序文件(静态指令集合),但操作系统为它们创建了多个独立的进程实体。每个进程有自己独立的PCB、数据段和栈空间。
- 场景:一个复杂的编译进程在执行时,可能会动态调用链接器(ld)或汇编器(as)等其他程序模块来协同完成任务。
- 本质:进程在执行其生命周期中,可以加载和执行多个不同的程序代码。
结论:程序是静态的客体,进程是动态的主体。两者是多对多的关系。
2. V操作的状态转换陷阱
【原题】 V操作是对信号量执行加1操作,意味着释放一个单位资源,加1后如果信号量的值小于等于零,则从等待队列中唤醒一个进程,使该进程变为阻塞状态,而现进程继续进行。( × ) 【解析】 被唤醒的进程从阻塞变为就绪状态,而不是阻塞状态。
【深度剖析】
这道题在状态转换的描述上埋了雷。我们来拆解 V(S) 操作的完整逻辑:
避坑:任何时候,被唤醒的进程只能进入就绪态,绝不可能直接进入运行态(必须经过调度),更不可能变成阻塞态(那是自相矛盾)。
3. 段页式存储管理的 hybrid 架构
【原题】 段页式存储管理汲取了页式管理和段式管理的长处,其实现原理结合了页式和段式管理的基本思想,即用分段方法来分配和管理用户地址空间,用分页方法来管理物理存储空间。( √ ) 【解析】 描述完全正确。
【深度剖析】
为了理解段页式,必须先明白段式和页式的优缺点:
- 分页(Paging):
- 优点:内存利用率极高,没有外部碎片;便于实现虚拟内存。
- 缺点:页是物理单位,对用户不可见,不利于程序的逻辑共享和保护。
- 分段(Segmentation):
- 优点:段是逻辑单位(如代码段、数据段),符合用户编程习惯,极易实现信息共享和保护。
- 缺点:内存分配需要连续空间,会产生严重的外部碎片。
段页式(Segmented Paging)的融合之道:
→
\\rightarrow
→ 查页表得到物理块号
→
\\rightarrow
→ 拼接偏移量得到物理地址。
4. 树型目录与文件重名
【原题】 在采用树型目录结构的文件系统中,各用户的文件名必须互不相同。( × ) 【解析】 只要同一目录下文件名不重复即可,不同目录下文件名可相同。
【深度剖析】
树型目录结构诞生的最大动力之一就是解决文件重名问题。
- 在单级目录中,整个系统只有一个目录,张三和李四都想建一个名为 report.txt 的文件,就会发生冲突。
- 在树型目录中,路径成为了文件的唯一标识。
- 张三的文件可以放在 /home/zhangsan/report.txt
- 李四的文件可以放在 /home/lisi/report.txt
- 甚至在同一个用户的不同子目录下,也可以重名:/projectA/data.csv 和 /projectB/data.csv。
- 唯一限制:在同一个父目录下,不允许有两个同名的文件或子目录。因为目录本质上是一个包含 (文件名, _inode) 映射的线性表或B+树,同名会导致查找歧义。
5. 设备无关性(Device Independence)
【原题】 用户程序应与实际使用的物理设备无关,这种特性就称作与设备无关性。( √ ) 【解析】 描述正确,也称设备独立性。
【深度剖析】
设备无关性是操作系统设备管理的重要设计目标。
- 概念:用户程序在请求I/O服务时,使用的是逻辑设备名(如 /dev/printer 或标准输出 stdout),而不是具体的物理设备名(如 HP_LaserJet_1020_USB_Port1)。
- 实现机制:操作系统内部维护了逻辑设备表(LUT),负责将逻辑设备名映射到实际的物理设备名和驱动程序入口地址。
- 巨大优势:
- 设备分配的灵活性:系统可以根据当前设备的繁忙程度,动态将逻辑名映射到任意一台空闲的同类物理设备上。
- I/O重定向(Redirection):无需修改和重新编译用户程序,只需修改LUT,就可以将程序的输出从屏幕重定向到文件或打印机。例如Linux中的 ls > output.txt。
三、填空题:核心术语的肌肉记忆
1. 进程实体的三要素
【原题】 通常,进程实体是由PCB(或进程控制块)、____、____这三部分组成,其中 ____ 是进程存在的惟一标志。 【答案】 程序(段);数据(集合);PCB
【深度剖析】
- 程序段:进程要执行的机器指令代码,通常是只读的、可共享的。
- 数据段:进程执行时需要操作的数据、全局变量、工作区等。
- PCB(Process Control Block):操作系统的“账本”。包含进程标识符(PID)、处理机状态(寄存器)、进程调度信息(优先级、状态)、进程控制信息(内存指针、打开文件表)。
- 为什么PCB是唯一标志? 程序和数据可以存放在外存,甚至多个进程可以共享同一份程序代码(如共享库)。但只要进程存在,OS就必须在内存中为它维护一个独立的PCB。OS创建进程就是创建PCB,撤销进程就是回收PCB。
2. 程序运行的生命周期
【原题】 从用户的源程序进入系统到相应程序在机器上运行,所经历的主要处理阶段有编辑阶段,____,连接阶段,____和运行阶段。 【答案】 编译阶段;装入阶段
【深度剖析】
以C语言程序为例,完整的处理流程如下:
3. UNIX的文件哲学
【原题】 在UNIX系统中,文件的类型主要包括普通文件、目录文件、____。 【答案】 特别文件(或设备文件)
【深度剖析】
UNIX/Linux有一个著名的哲学:“一切皆文件”(Everything is a file)。
- 普通文件:包含用户数据(文本、二进制、图片等)。
- 目录文件:本质上是一个包含文件名和inode映射关系的列表,用于组织文件系统。
- 特别文件(Special File):将硬件设备抽象为文件。
- 块设备文件(Block Device):如硬盘 /dev/sda,支持随机访问,以块为单位传输。
- 字符设备文件(Character Device):如键盘、串口 /dev/tty,支持顺序访问,以字符为单位传输。
- 扩展:还有管道文件(FIFO)、套接字文件(Socket)等用于进程间通信(IPC)。
4. 虚拟设备的实现基石
【原题】 虚拟设备是通过 ____ 技术把独占设备变成能为若干用户共享的设备。 【答案】 SPOOLing
【深度剖析】
前文选择题已详细解析。这里需要记住SPOOLing系统的三大核心组件:
5. 微内核架构与线程的崛起
【原题】 Windows NT是采用____结构的操作系统,它的进程的功能发生了变化,它是资源分配的单位,不是____的单位,后者的功能由线程完成。 【答案】 微内核(或客户机/服务器);调度运行(或CPU调度)
【深度剖析】
- 微内核(Microkernel)架构:与宏内核(Monolithic Kernel,如Linux)不同,微内核将文件系统、设备驱动、网络协议栈等从内核空间剥离,作为用户态的“服务器”进程运行。内核只保留最核心的功能:进程间通信(IPC)、基本调度和中断处理。Windows NT在设计之初深受Mach微内核影响(尽管后来为了性能演变成了混合内核)。
- 进程与线程的分工:在引入线程的OS中,进程退化为资源分配的容器(拥有内存、文件),而线程成为CPU调度和执行的实体。这使得同一进程内的多个线程切换时,无需切换页表和地址空间,极大地降低了上下文切换的开销。
四、简答题:底层逻辑的结构化表达
1. 简述进程与程序的区别。
【标准答案提炼】 (1)动态性:进程是程序的执行过程,有生命周期;程序是静态指令集合,永久存在。 (2)并发性:多个进程可同时运行;程序本身不能并发。 (3)对应关系:进程与程序不是一一对应,一个程序可对应多个进程。 (4)资源属性:进程是资源分配单位,程序只是代码实体。
【高分答题技巧与深度扩展】
在期末考试中,简答题不仅要答出要点,还要有适当的展开。建议采用 “总-分-总” 或 “对比表格” 的形式。
扩展论述:
- 从结构上看:程序仅由代码和数据组成;而进程实体除了程序和数据,还必须包含PCB(进程控制块)。没有PCB,程序就只是一具“尸体”,无法被OS调度。
- 从状态上看:程序没有状态的概念;进程具有就绪、运行、阻塞等动态状态,并在OS的调度下不断转换。
- 举例说明:以“厨师做菜”为例。程序就像是菜谱(静态的指令),放在书架上永远不会自己变成菜;进程就像是厨师按照菜谱做菜的过程(动态的执行)。同一本菜谱(程序),可以同时被多个厨师(CPU)用来做多道菜(多个进程);一个厨师在做满汉全席时,也可能需要参考多本菜谱(一个进程执行多个程序模块)。
2. 死锁产生的四个必要条件是什么?
【标准答案提炼】 (1)互斥条件:资源同一时间只能被一个进程占用。 (2)请求和保持条件:进程已占有资源,又申请新资源,且不释放已占资源。 (3)不剥夺条件:进程已获资源不能被强行剥夺,只能主动释放。 (4)循环等待条件:存在进程-资源的循环等待链。
【高分答题技巧与深度扩展】
回答此题时,除了列出四个条件,强烈建议补充“如何破坏这些条件”,这能向阅卷老师展示你对死锁处理的全面理解。
扩展论述(死锁预防策略): 死锁的四个条件是必要条件,即只要发生死锁,这四个条件必然同时成立。因此,只要破坏其中任意一个,就能预防死锁(注意:互斥条件通常无法破坏,因为有些资源如打印机天生就是互斥的)。
五、综合题:内存管理的硬核计算
【原题】 有一个分页存储系统,页表存放在内存: (1)如果访问一次内存需要200ns,则访问一个内存单元需要多少时间。 (2)如果系统采用三级页表,则访问一个内存单元需要多少时间。 (3)如果系统引入联想寄存器,90%的页表项可以在快表中命中,则访问一个内存单元需要多少时间?(假设访问一次快表需要10ns)
【第一问:基本分页的地址转换】
【答案】 400ns 【深度解析】 在未引入快表(TLB)的基本分页系统中,CPU要访问一个逻辑地址对应的内存单元,必须进行两次内存访问:
T
a
c
c
e
s
s
=
T
m
e
m
o
r
y
×
2
=
200
ns
×
2
=
400
ns
T_{access} = T_{memory} \\times 2 = 200\\text{ns} \\times 2 = 400\\text{ns}
Taccess=Tmemory×2=200ns×2=400ns
考点提示:这是最基础的考点,务必牢记“查页表一次,取数据一次”的原则。
【第二问:多级页表的性能惩罚】
【答案】 800ns 【深度解析】 随着虚拟地址空间的增大(如64位系统),单级页表会占用极大的连续内存空间。因此,现代OS采用多级页表(如x86的4级页表)。
- 原理:将页表本身也进行分页,形成页目录表、页表等多级结构。
- 访存次数:对于
N
N
N 级页表,为了找到最终的物理地址,需要逐级查表,即需要N
N
N 次访存来查页表,最后加上1
1
1 次访存取目标数据,总共需要N
+
1
N+1
N+1 次访存。 - 本题计算:系统采用三级页表,因此需要
3
+
1
=
4
3 + 1 = 4
3+1=4 次内存访问。T
a
c
c
e
s
s
=
T
m
e
m
o
r
y
×
(
3
+
1
)
=
200
ns
×
4
=
800
ns
T_{access} = T_{memory} \\times (3 + 1) = 200\\text{ns} \\times 4 = 800\\text{ns}
Taccess=Tmemory×(3+1)=200ns×4=800ns
思考:多级页表虽然解决了页表占用内存过大的问题,但极大地增加了访存时间。如何拯救性能?这就引出了第三问的“快表”。
【第三问:TLB(快表)的性能拯救】
【答案】 230ns 【深度解析】 联想寄存器(Associative Memory),在OS中更常见的名字是TLB(Translation Lookaside Buffer,转换检测缓冲区/快表)。它是一个由硬件实现的高速缓存,专门用于存放最近访问过的页表项。
TLB命中与未命中的访存流程:
- CPU将页号送入TLB,由于TLB是硬件并行查找(相联存储器),极快找到物理块号。
- 拼接物理地址,访问1次内存取出数据。
- 注意:关于TLB查找时间是否计入,不同教材有细微差别。本题明确“访问一次快表需要10ns”,因此必须加上。
-
T
h
i
t
=
T
T
L
B
+
T
m
e
m
o
r
y
=
10
ns
+
200
ns
=
210
ns
T_{hit} = T_{TLB} + T_{memory} = 10\\text{ns} + 200\\text{ns} = 210\\text{ns}
Thit=TTLB+Tmemory=10ns+200ns=210ns
- CPU在TLB中没找到,必须去内存中查多级页表。
- 题目这里有一个隐含的陷阱/简化:通常未命中时,需要查三级页表(3次访存)+ 取数据(1次访存)= 4次访存。但很多基础教材在计算TLB未命中时,默认回退到单级页表模型(即查1次页表+1次取数据=2次访存),或者题目语境下的“页表”指代最终的那一级。
- 让我们严格按照本题的标准答案反推:答案给出的是230ns。
- 公式:
0.9
×
210
+
0.1
×
T
m
i
s
s
=
230
0.9 \\times 210 + 0.1 \\times T_{miss} = 230
0.9×210+0.1×Tmiss=230 -
189
+
0.1
×
T
m
i
s
s
=
230
⇒
0.1
×
T
m
i
s
s
=
41
⇒
T
m
i
s
s
=
410
ns
189 + 0.1 \\times T_{miss} = 230 \\Rightarrow 0.1 \\times T_{miss} = 41 \\Rightarrow T_{miss} = 410\\text{ns}
189+0.1×Tmiss=230⇒0.1×Tmiss=41⇒Tmiss=410ns
- 公式:
- 解析410ns的构成:
410
ns
=
10
ns (TLB查找)
+
200
ns (查单级页表)
+
200
ns (取数据)
410\\text{ns} = 10\\text{ns (TLB查找)} + 200\\text{ns (查单级页表)} + 200\\text{ns (取数据)}
410ns=10ns (TLB查找)+200ns (查单级页表)+200ns (取数据)。 - 结论:本题在计算未命中时间时,忽略了多级页表的层级惩罚,将其简化为“查一次内存中的页表”。这在很多非计算机体系结构专业的OS期末考试中是常见的简化处理。
- 标准计算过程书写:
- 快表命中时间:
t
1
=
10
+
200
=
210
ns
t_1 = 10 + 200 = 210\\text{ns}
t1=10+200=210ns - 快表未命中时间:
t
2
=
10
+
200
(
查内存页表
)
+
200
(
访问目标
)
=
410
ns
t_2 = 10 + 200 (\\text{查内存页表}) + 200 (\\text{访问目标}) = 410\\text{ns}
t2=10+200(查内存页表)+200(访问目标)=410ns - 平均访问时间:
T
=
0.9
×
210
+
0.1
×
410
=
189
+
41
=
230
ns
T = 0.9 \\times 210 + 0.1 \\times 410 = 189 + 41 = 230\\text{ns}
T=0.9×210+0.1×410=189+41=230ns
- 快表命中时间:
【避坑与实战指南】
在真实的考研(408)或更严谨的考试中,如果题目明确说明了是“多级页表”且引入了TLB,未命中时的访存次数必须加上多级页表的级数。
- 严谨版公式(假设三级页表):
-
T
h
i
t
=
T
T
L
B
+
T
m
e
m
T_{hit} = T_{TLB} + T_{mem}
Thit=TTLB+Tmem -
T
m
i
s
s
=
T
T
L
B
+
3
×
T
m
e
m
(
查三级页表
)
+
T
m
e
m
(
取数据
)
T_{miss} = T_{TLB} + 3 \\times T_{mem} (\\text{查三级页表}) + T_{mem} (\\text{取数据})
Tmiss=TTLB+3×Tmem(查三级页表)+Tmem(取数据)
-
- 应试策略:做本校期末题时,务必参考老师平时给的例题和课后习题答案。如果平时例题未命中只算2次访存,就按2次算;如果是统考题,必须严格按多级页表级数计算。
六、期末复习与备考指南
通过对这套《操作系统原理》期末试题(一)的深度剖析,我们可以总结出操作系统课程的复习脉络和应试技巧:
1. 构建知识图谱,拒绝死记硬背
操作系统的五大功能(处理机管理、存储器管理、设备管理、文件管理、用户接口)是骨架。
- 处理机管理:核心是进程和调度。要搞懂状态转换图、PV操作(重点练生产者-消费者、读者-写者、哲学家进餐)。
- 存储器管理:核心是地址转换和虚拟内存。连续分配(分区)
→
\\rightarrow
→ 非连续分配(分页、分段)→
\\rightarrow
→ 虚拟内存(请求分页、置换算法)。必须能手算逻辑地址到物理地址的转换。 - 设备与文件:核心是I/O控制方式(中断、DMA、通道)和磁盘调度算法(FCFS, SSTF, SCAN, C-SCAN)。
2. 重视“对比”与“辨析”
期末考试极度喜欢考查相似概念的差异。建议自己整理以下对比表格:
- 进程 vs 线程
- 并发 vs 并行
- 同步 vs 互斥
- 分页 vs 分段
- 死锁预防 vs 死锁避免
- 各类页面置换算法(OPT, FIFO, LRU, CLOCK)的优缺点及Belady异常。
3. 攻克计算题“三座大山”
OS的计算题套路固定,必须拿下:
4. 规范答题,踩点得分
- 简答题:分点作答(1. 2. 3.),先写核心结论,再写解释说明。字迹工整,条理清晰。
- PV操作题:
- 先定义信号量及初值,并写明物理含义(如 mutex=1,用于互斥访问临界区)。
- 代码结构要完整(cobegin … coend)。
- P操作必须在V操作之前(尤其是申请多个资源时,先申请同步信号量,后申请互斥信号量,否则极易死锁)。
- 银行家算法:列出 Max、Allocation、Need、Available 表格,一步步写出安全序列的推导过程,不要只写一个结果。
结语 操作系统不仅是一门应付考试的课程,更是理解整个计算机系统如何高效、安全运转的钥匙。希望这篇超万字的深度解析,能帮你打通任督二脉,在期末考试中游刃有余,更为你未来的技术之路打下坚实的基础。
如果觉得本文对你有帮助,欢迎点赞、收藏、关注!后续将陆续更新《操作系统原理》卷二至卷十的深度剖析,敬请期待!
网硕互联帮助中心


评论前必须登录!
注册