第二章进程管理¶
答案速对¶
| 题号 | 年份-题号 | 正确答案 | 题号 | 年份-题号 | 正确答案 | 题号 | 年份-题号 | 正确答案 |
|---|---|---|---|---|---|---|---|---|
| 1 | 2010-24 | C | 20 | 2010-26 | A | 39 | 2010-27 | D |
| 2 | 2014-26 | A | 21 | 2011-23 | B | 40 | 2016-27 | B |
| 3 | 2015-25 | D | 22 | 2012-29 | B | 41 | 2018-32 | C |
| 4 | 2018-27 | C | 23 | 2013-31 | B | 42 | 2010-25 | B |
| 5 | 2019-24 | C | 24 | 2014-23 | A | 43 | 2016-32 | A |
| 6 | 2020-29 | B | 25 | 2016-24 | B | 44 | 2018-28 | D |
| 7 | 2021-24 | B | 26 | 2017-23 | D | 45 | 2009-25 | C |
| 8 | 2022-28 | D | 27 | 2018-24 | D | 46 | 2014-24 | B |
| 9 | 2023-27 | C | 28 | 2019-27 | C | 47 | 2021-31 | C |
| 10 | 2024-24 | A | 29 | 2020-26 | D | 48 | 2011-27 | D |
| 11 | 2024-25 | D | 30 | 2021-25 | C | 49 | 2012-27 | D |
| 12 | 2011-25 | D | 31 | 2021-27 | D | 50 | 2013-32 | B |
| 13 | 2012-31 | A | 32 | 2022-25 | C | 51 | 2018-26 | A |
| 14 | 2019-23 | B | 33 | 2023-29 | B | 52 | 2019-30 | B |
| 15 | 2024-28 | B | 34 | 2024-30 | C | 53 | 2020-27 | B |
| 16 | 2014-31 | C | 35 | 2011-32 | C | 54 | 2022-26 | B |
| 17 | 2012-30 | C | 36 | 2016-30 | C | 55 | 2015-26 | B |
| 18 | 2017-27 | B | 37 | 2018-25 | B | 56 | 2016-25 | C |
| 19 | 2009-24 | D | 38 | 2020-32 | C |
(一)进程与线程¶
1.进程与线程的基本概念¶
2.进程/线程的状态与转换¶
- 【2010-24】下列选项中,导致创建新进程的操作是( )。
I. 用户登录成功
II. 设备分配
III. 启动程序执行
A. 仅I和II B. 仅II和III C. 仅I和III D. I、II和III
解析
答案:C
用户登录成功后,系统通常要为该用户创建相应的服务进程或命令解释程序;启动程序执行也需要创建新进程。设备分配只是把设备资源分配给已有进程,不必创建新进程。因此导致创建新进程的是Ⅰ和Ⅲ。
- 【2014-26】一个进程的读磁盘操作完成后,操作系统针对该进程必做的是( )。
A. 修改进程状态为就绪态
B. 降低进程优先级
C. 给进程分配用户内存空间
D. 增加进程时间片大小
解析
答案:A
进程发出读磁盘请求后通常因等待 I/O 而进入阻塞态。磁盘读操作完成会产生中断,操作系统必须解除该进程的等待,使其由阻塞态转为就绪态并进入就绪队列。优先级、用户内存和时间片大小均不必因此改变。
- 【2015-25】下列选项中,会导致进程从执行态变为就绪态的事件是( )。
A. 执行 P (wait) 操作
B. 申请内存失败
C. 启动I/O设备
D. 被高优先级进程抢占
解析
答案:D
执行 P(wait)操作、申请内存失败或启动 I/O 都可能使进程等待某个条件,从执行态进入阻塞态。被更高优先级进程抢占时,原进程仍具备运行条件,只是暂时失去 CPU,因此应由执行态转为就绪态。
- 【2018-27】下列选项中,可能导致当前进程 P 阻塞的事件是
Ⅰ. 进程 P 申请临界资源
Ⅱ. 进程 P 从磁盘读数据
Ⅲ. 系统将 CPU 分配给高优先权的进程
A. 仅Ⅰ
B. 仅Ⅱ
C. 仅Ⅰ、Ⅱ
D. Ⅰ、Ⅱ、Ⅲ
解析
答案:C
申请临界资源时,如果资源正被占用,进程可能阻塞;从磁盘读取数据时,进程也可能因等待 I/O 完成而阻塞。CPU 被分配给高优先权进程只会使当前进程由执行态转为就绪态,不会使其阻塞。因此Ⅰ、Ⅱ正确。
- 【2019-24】下列选项中,可能会将进程唤醒的事件是( )。
Ⅰ. I/O结束
Ⅱ. 某进程退出临界区
Ⅲ. 当前进程的时间片用完
A. 仅Ⅰ
B. 仅Ⅲ
C. 仅Ⅰ、Ⅱ
D. Ⅰ、Ⅱ、Ⅲ
解析
答案:C
I/O 结束会使等待该 I/O 的进程由阻塞态转为就绪态。某进程退出临界区并释放临界资源,也可能唤醒等待该资源的进程。时间片用完只会使当前执行进程回到就绪队列,不属于唤醒阻塞进程。因此Ⅰ、Ⅱ正确。
- 【2020-29】下列关于父进程与子进程的叙述中,错误的是( )。
A. 父进程与子进程可以并发执行
B. 父进程与子进程共享虚拟地址空间
C. 父进程与子进程有不同的进程控制块
D. 父进程与子进程不能同时使用同一临界资源
解析
答案:B
父进程和子进程可以并发执行,并分别拥有独立的 PCB。它们的虚拟地址空间在创建初期可以具有相同内容,但逻辑上是彼此独立的地址空间,并非共享同一个虚拟地址空间。临界资源受互斥机制保护,父子进程也不能同时进入同一临界资源的临界区。
- 【2021-24】下列操作中,操作系统在创建新进程时,必须完成的是( )。
Ⅰ. 申请空白的进程控制块
Ⅱ. 初始化进程控制块
Ⅲ. 设置进程状态为执行态
A. 仅Ⅰ
B. 仅Ⅰ、Ⅱ
C. 仅Ⅰ、Ⅲ
D. 仅Ⅱ、Ⅲ
解析
答案:B
创建新进程时,操作系统必须申请一个空白 PCB,并用进程标识、资源信息、上下文等内容对其初始化。新进程通常先被设置为就绪态,只有经调度获得 CPU 后才进入执行态。因此必须完成Ⅰ、Ⅱ,不必须完成Ⅲ。
- 【2022-28】下列事件或操作中,可能导致进程P由执行态变为阻塞态的是( )。
Ⅰ. 进程P读文件
Ⅱ. 进程P的时间片用完
Ⅲ. 进程P申请外设
Ⅳ. 进程P执行信号量的wait()操作
A. 仅Ⅰ、Ⅳ
B. 仅Ⅱ、Ⅲ
C. 仅Ⅲ、Ⅳ
D. 仅Ⅰ、Ⅲ、Ⅳ
解析
答案:D
读文件可能需要等待磁盘 I/O,申请外设可能需要等待设备,执行信号量 wait() 时若资源不足也会阻塞,故Ⅰ、Ⅲ、Ⅳ均可能使进程由执行态进入阻塞态。时间片用完表示进程仍可运行,只是被剥夺 CPU,应转为就绪态。
- 【2023-27】下列给出当前线程引起的事件或执行的操作中,可能导致该线程由执行态变为就绪态的是( )。
A. 键盘输入
B. 缺页异常
C. 主动出让CPU
D. 执行信号量的wait()操作
解析
答案:C
当前线程主动出让 CPU 后仍然具备运行条件,因而由执行态转为就绪态。缺页异常通常使线程等待调页而阻塞;wait() 在条件不满足时也使线程阻塞;键盘输入本身通常用于唤醒正在等待输入的线程,不会使当前执行线程转为就绪态。
- 【2024-24】下列选项中,操作系统在终止进程时不一定执行的是
A. 终止子进程
B. 回收分配的内存资源
C. 撤销进程 PCB
D. 回收进程占用的设备
解析
答案:A
终止进程时必须撤销其 PCB,并回收其占用的内存和设备等资源。是否同时终止子进程取决于操作系统的进程管理策略;有些系统会让子进程继续运行,并由其他进程接管。因此终止子进程不是必然操作。
- 【2024-25】在支持页式存储管理的系统中,进程切换时操作系统要执行的操作是
Ⅰ. 更新程序计数器的值
Ⅱ. 更新栈基址寄存器的值
Ⅲ. 更新页基地址寄存器的值
A. 仅Ⅲ
B. 仅I、Ⅱ
C. 仅Ⅰ、Ⅲ
D. Ⅰ、Ⅱ、Ⅲ
解析
答案:D
进程切换需要保存旧进程的处理器上下文并恢复新进程的上下文,其中包括程序计数器和栈相关寄存器。页式存储管理下,不同进程通常使用不同页表,因此还要更新页表基址寄存器。Ⅰ、Ⅱ、Ⅲ都要执行。
3.线程的实现(内核支持的线程,线程库支持的线程)¶
- 【2011-25】在支持多线程的系统中,进程P创建的若干个线程不能共享的是( )。
A. 进程P的代码段
C. 进程P的全局变量
B. 进程P中打开的文件
D. 进程P中某线程的栈指针
解析
答案:D
同一进程的线程共享代码段、全局变量和已打开文件等进程级资源。每个线程必须拥有独立的执行现场,包括程序计数器、寄存器和栈,因此某线程的栈指针不能由其他线程共享。
- 【2012-31】下列关于进程和线程的叙述中,正确的是( )。
A. 不管系统是否支持线程,进程都是资源分配的基本单位
B. 线程是资源分配的基本单位,进程是调度的基本单位
C. 系统级线程和用户级线程的切换都需要内核的支持
D. 同一进程中的各个线程拥有各自不同的地址空间
解析
答案:A
进程是系统进行资源分配和保护的基本单位;在线程系统中,线程通常是独立调度的基本单位。用户级线程的管理和切换由线程库完成,不一定进入内核;同一进程中的线程共享进程地址空间。因此只有 A 正确。
- 【2019-23】下列关于线程的描述中,错误的是( )。
A. 内核级线程的调度由操作系统完成
B. 操作系统为每个用户级线程建立一个线程控制块
C. 用户级线程间的切换比内核级线程间的切换效率高
D. 用户级线程可以在不支持内核级线程的操作系统上实现
解析
答案:B
内核级线程由操作系统直接管理和调度,操作系统为其维护线程控制块。用户级线程由用户态线程库管理,操作系统通常只看到其所属进程,不会为每个用户级线程建立内核线程控制块。用户级线程切换不进入内核,开销通常较小,也能在不支持内核级线程的系统上实现。
4.进程与线程的组织与控制¶
- 【2024-28】若进程 P 中线程 T 先打开文件,得到文件描述符 fd,再创建线程 Ta 和 Tb,则下列资源中,线程 Ta 与 Tb 可共享的是
Ⅰ. 进程 P 的地址空间
Ⅱ. 线程 T 的栈
Ⅲ. 文件描述符 fd
A. 仅I
B. 仅I、Ⅲ
C. 仅Ⅱ、Ⅲ
D. Ⅰ、Ⅱ、Ⅲ
解析
答案:B
同一进程内的线程共享整个进程地址空间,也共享进程已打开的文件及文件描述符表,因此 fd 可由 Ta、Tb 使用。线程 T 的栈属于该线程的私有执行现场,其他线程不共享。故可共享的是Ⅰ、Ⅲ。
5.进程间通信(共享内存,消息传递,管道,信号)¶
- 【2014-31】下列关于管道(Pipe)通信的叙述中,正确的是( )。
A. 一个管道可实现双向数据传输
B. 管道的容量仅受磁盘容量大小限制
C. 进程对管道进行读操作和写操作都可能被阻塞
D. 一个管道只能有一个读进程或一个写进程对其操作
解析
答案:C
普通管道通常是单向的;若要双向通信,一般需要建立两个管道。管道容量由内核缓冲区大小决定,并非仅受磁盘容量限制。管道为空时读进程可能阻塞,管道已满时写进程也可能阻塞;同一管道可以存在多个读者或写者。
(二)CPU 调度与上下文切换¶
调度的基本概念¶
- 【2012-30】若某单处理器多进程系统中有多个就绪态进程,则下列关于处理机调度的叙述中,错误的是( )。
A. 在进程结束时能进行处理机调度
B. 创建新进程后能进行处理机调度
C. 在进程处于临界区时不能进行处理机调度
D. 在系统调用完成并返回用户态时能进行处理机调度
解析
答案:C
进程结束、创建新进程以及系统调用返回用户态时,都可能出现重新调度的时机。进程处于临界区并不意味着调度程序绝对不能运行;是否允许抢占取决于所采用的同步机制和内核设计。临界区互斥应由锁等机制保证,不能简单等同于“禁止调度”。
- 【2017-27】下列有关基于时间片的进程调度的叙述中,错误的是( )。
A. 时间片越短,进程切换的次数越多,系统开销也越大
B. 当前进程的时间片用完后,该进程状态由执行态变为阻塞态
C. 时钟中断发生后,系统会修改当前进程在时间片内的剩余时间
D. 影响时间片大小的主要因素包括响应时间、系统开销和进程数量等
解析
答案:B
时间片越短,进程切换越频繁,调度开销越大。时钟中断用于更新已用或剩余时间片;时间片大小还需综合响应时间、进程数量和系统开销等因素。时间片用完后,当前进程仍具备运行条件,应由执行态转为就绪态,而不是阻塞态。
调度的目标¶
调度的实现¶
CPU 调度算法¶
- 【2009-24】下列进程调度算法中,综合考虑进程等待时间和执行时间的是( )。
A. 时间片轮转调度算法
B. 短进程优先调度算法
C. 先来先服务调度算法
D. 高响应比优先调度算法
解析
答案:D
高响应比优先算法使用
其中 为等待时间,
为要求服务时间。该算法同时考虑进程已经等待的时间和自身运行时间,因此选 D。
- 【2010-26】下列选项中,降低进程优先级的合理时机是( )。
A. 进程的时间片用完
B. 进程刚完成I/O,进入就绪列队
C. 进程长期处于就绪列队中
D. 进程从就绪态转为运行态
解析
答案:A
进程用完整个时间片,通常说明它具有较强的 CPU 密集特征。适当降低其优先级,可以把更多 CPU 机会让给交互型或 I/O 型进程。刚完成 I/O 的进程往往应维持或提高优先级;长期等待的进程也应通过老化提高优先级,以避免饥饿。
- 【2011-23】下列选项中,满足短任务优先且不会发生饥饿现象的调度算法是( )。
A. 先来先服务
B. 高响应比优先
C. 时间片轮转
D. 非抢占式短任务优先
解析
答案:B
高响应比优先算法在服务时间相同时优先选择等待较久的任务,在等待时间相同时又偏向服务时间较短的任务。随着等待时间增加,长任务的响应比会不断提高,最终可以获得调度,因此既体现短任务优先,又能避免长期饥饿。
- 【2012-29】一个多道批处理系统中仅有P1和P2两个作业,P2比P1晚5ms到达,它们的计算和I/O操作顺序如下:
P1:计算60ms,I/O80ms,计算20ms
P2:计算120ms,I/O40ms,计算40ms
若不考虑调度和切换时间,则完成两个作业需要的时间最少是( )。
A. 240ms
B. 260ms
C. 340ms
D. 360ms
解析
答案为 B,260 ms。
时间安排:
- P1:CPU
0–60,I/O60–140,等待140–180,CPU180–200 - P2:等待
5–60,CPU60–180,I/O180–220,CPU220–260 - 因此两个作业在
260 ms时全部完成。

- 【2013-31】某系统正在执行三个进程 P1、P2 和 P3,各进程的计算 (CPU) 时间和 I/O 时间比例如下表所示。
\(\begin{array}{|c|c|c|}\hline \text{进程}&\text{计算时间}&\text{I/O时间}\\\hline \text{P1}&90\%&10\%\\\hline \text{P2}&50\%&50\%\\\hline \text{P3}&15\%&85\%\\\hline \end{array}\)
为提高系统资源利用率,合理的进程优先级设置应为( )。
A. P1>P2>P3
B. P3>P2>P1
C. P2>P1=P3
D. P1>P2=P3
答案
本题选B。
从I/O时间占比角度分析:
在I/O密集型进程中,I/O操作的速度和效率是主要瓶颈,因为它更多的时间花在等待 I/O 操作完成上,而不是在需要持续 CPU 计算的任务上,CPU的处理能力往往有闲置。因此,为了有效利用系统资源,应当给予这类进程较高的优先级。
当一个进程在等待 I/O 操作完成时,操作系统可以将 CPU 时间分配给其他可执行的进程,从而实现资源的更有效利用。这种情况下,给予 I/O 占比高的进程较高的优先级,有助于确保系统能够更灵活地响应 I/O 操作,从而提高整体的系统资源利用率。
在本题中,P1的I/O时间占比<P2的I/O时间占比<P3的I/O时间占比,因此合理的进程优先级设置应P3>P2>P1。
从CPU时间占比角度分析:
类比短进程优先算法,将I/O时间不占用CPU,计算时间占用CPU,可以让计算时间较短(或计算时间占比较少)的进程优先执行,从而降低平均周转时间,提高CPU和I/O设备的并行度。
在本题中,P1的计算时间占比>P2的计算时间占比>P3的计算时间占比,因此合理的进程优先级设置应为P3>P2>P1。
综上,综合考虑进程的计算 (CPU) 时间和 I/O 时间,合理的进程优先级设置应为P3>P2>P1。
- 【2014-23】下列调度算法中,不可能导致饥饿现象的是( )。
A. 时间片轮转
B. 静态优先数调度
C. 非抢占式短作业优先
D. 抢占式短作业优先
解析
案:A
时间片轮转按就绪队列顺序让各进程轮流获得 CPU,只要时间片和调度过程正常,每个就绪进程最终都会被调度,不会发生饥饿。静态优先级和短作业优先类算法都可能使低优先级或长作业长期得不到运行机会。
- 【2016-24】某单CPU系统中有输入和输出设备各1台,现有3个并发执行的作业,每个作业的输入、计算和输出时间均分别为2ms、3ms和4ms,且都按输入、计算和输出的顺序执行,则执行完3个作业需要的时间最少是( )。
A. 15ms
B. 17ms
C. 22ms
D. 27ms
解析
本题选 B,17 ms。
调度过程:
- P1:输入
0–2,计算2–5,输出5–9 - P2:输入
2–4,计算5–8,输出9–13 - P3:输入
4–6,计算8–11,输出13–17
输出设备最早在 2+3=5 ms 开始工作,3 个作业共需输出 3×4=12 ms。所以最短时间为:
5+12=17 ms
该调度使输出设备从 5 ms 到 17 ms 连续工作,确实达到了理论下界。

- 【2017-23】假设4个作业到达系统的时刻和运行时间如下表所示。

系统在t=2时开始作业调度。若分别采用先来先服务和短作业优先调度算法,则选中的作业分别是( )。
A. J2、J3
B. J1、J4
C. J2、J4
D. J1、J3
答案
本题选D。
系统在t=2时开始作业调度,此时已经到达的作业有J1、J2和J3。
先来先服务调度算法优先选择到达时刻早的作业,J1、J2和J3中J1到达时刻最早。若采用先来先服务调度算法,则选中J1。
短作业优先调度算法优先选择运行时间短的作业,J1、J2和J3中J3的运行时间最短。若采用短作业优先调度算法,则选中J3。
- 【2018-24】某系统采用基于优先权的非抢占式进程调度策略,完成一次进程调度和进程切换的系统时间开销为1μs。在T时刻就绪队列中有3个进程P1、P2和P3,其在就绪队列中的等待时间、需要的CPU时间和优先权如下表所示。
\(\begin{array}{|c|}\hline \text{进程}&\text{等待时间}&\text{需要的CPU时间}&\text{优先权}\\\hline \text{P1}&\text{30μs}&\text{12μs}&10\\ \text{P2}&\text{15μs}&\text{24μs}&30\\ \text{P3}&\text{18μs}&\text{36μs}&20\\\hline \end{array}\)
若优先权值大的进程优先获得CPU,从T时刻起系统开始进程调度,则系统的平均周转时间为( )。
A. 54μs
B. 73μs
C. 74μs
D. 75μs
答案
本题选D。

因优先权值大的进程优先获得CPU,进程的执行顺序为P2, P3, P1。
进程Pi的周转时间 = 进程Pi的等待时间 + 一次进程调度和进程切换的系统时间开销 + 进程Pi需要的CPU时间。
进程Pi的等待时间 = 进程Pi初始时在就绪队列中的等待时间 + 之前进程需要的CPU时间+之前进程调度和进程切换的系统时间开销。
P2的周转时间(单位:μs)为:15+0+1+24=40;
P3的周转时间(单位:μs)为:18+1+24+1+36=80;
P1的周转时间(单位:μs)为:30+1+24+1+36+1+12=105。
系统的平均周转时间(单位:μs)为:(40+80+105) / 3 = 225 / 3 =75。
- 【2019-27】系统采用二级反馈队列调度算法进行进程调度。就绪队列Q1采用时间片轮转调度算法,时间片为10ms;就绪队列Q2采用短进程优先调度算法;系统优先调度Q1队列中的进程,当Q1为空时系统才会调度Q2中的进程;新创建的进程首先进入Q1;Q1中的进程执行一个时间片后,若未结束,则转入Q2。若当前Q1、Q2为空,系统依次创建进程P1、P2后即开始进程调度,P1、P2需要的CPU时间分别为30ms和20ms,则进程P1、P2在系统中的平均等待时间为( )。
A. 25ms
B. 20ms
C. 15ms
D. 10ms
解析
本题选 C,15 ms。
调度顺序如下:
0-10 ms:P1 在 Q1 运行,剩余 20 ms,转入 Q2。10-20 ms:P2 在 Q1 运行,剩余 10 ms,转入 Q2。20 ms:Q1 已空。Q2 按短进程优先调度,先选剩余时间较短的 P2。20-30 ms:P2 运行完成。30-50 ms:P1 运行完成。
因此:
- P1 等待时间:
30-10=20 ms - P2 等待时间:
10-0=10 ms - 平均等待时间:
(20+10)/2=15 ms

- 【2020-26】下列与进程调度有关的因素中,在设计多级反馈队列调度算法时需要考虑的是( )。
Ⅰ. 就绪队列的数量
Ⅱ. 就绪队列的优先级
Ⅲ. 各就绪队列的调度算法
Ⅳ. 进程在就绪队列间的迁移条件
A. 仅Ⅰ、Ⅱ
B. 仅Ⅲ、Ⅳ
C. 仅Ⅱ、Ⅲ、Ⅳ
D. Ⅰ、Ⅱ、Ⅲ和Ⅳ
解析
答案:D
设计多级反馈队列时,需要确定队列数量、各队列之间的优先级、每个队列内部采用的调度算法,以及进程在队列之间升级或降级的条件。这四项共同决定调度策略的响应性、公平性和系统开销,因此Ⅰ、Ⅱ、Ⅲ、Ⅳ均需考虑。
- 【2021-25】下列内核的数据结构或程序中,分时系统实现时间片轮转调度需要使用的是( )。
Ⅰ. 进程控制块
Ⅱ. 时钟中断处理程序
Ⅲ. 进程就绪队列
Ⅳ. 进程阻塞队列
A. 仅Ⅱ、Ⅲ
B. 仅Ⅰ、Ⅳ
C. 仅Ⅰ、Ⅱ、Ⅲ
D. 仅Ⅰ、Ⅱ、Ⅳ
解析
答案:C
时间片轮转需要用 PCB 保存进程状态和时间片等信息,用就绪队列组织等待 CPU 的进程,并依靠时钟中断处理程序在时间片到期时夺回 CPU。阻塞队列用于组织等待事件的进程,不是实现时间片轮转本身必需的数据结构。因此选择Ⅰ、Ⅱ、Ⅲ。
- 【2021-27】下列事件中,可能引起进程调度程序执行的是( )。
Ⅰ. 中断处理结束
Ⅱ. 进程阻塞
Ⅲ. 进程执行结束
Ⅳ. 进程的时间片用完
A. 仅Ⅰ、Ⅲ
B. 仅Ⅱ、Ⅳ
C. 仅Ⅲ、Ⅳ
D. Ⅰ、Ⅱ、Ⅲ和Ⅳ
解析
答案:D
进程阻塞、进程执行结束和时间片用完都会直接使当前进程无法继续占用 CPU,因而需要调度其他进程。中断处理结束时也可能因唤醒更高优先级进程或发现调度条件成立而调用调度程序。因此四类事件都可能引起进程调度。
- 【2022-25】进程P0、P1、P2和P3进入就绪队列的时刻、优先级(值越小优先权越高)及CPU执行时间如下表所示。
\(\begin{array}{|c|}\hline \text{进程}&\text{进入就绪队列的时刻}&\text{优先级}&\text{CPU执行时间}\\\hline \text{P0}&\text{0 ms}&15&\text{100 ms}\\ \text{P1}&\text{10 ms}&20&\text{60 ms}\\ \text{P2}&\text{10 ms}&10&\text{20 ms}\\ \text{P3}&\text{15 ms}&6&\text{10 ms}\\\hline \end{array}\)
若系统采用基于优先权的抢占式进程调度算法,则从0ms时刻开始调度,到4个进程都运行结束为止,发生进程调度的总次数为( )。
A. 4
B. 5
C. 6
D. 7
答案
本题选C。
按时间序列进程分析:
- 0ms时刻,只有P0进入就绪队列,开始运行P0。
- 10ms时刻,P1、P2进入就绪队列,P0运行了10ms-0ms=10ms,其CPU执行时间为100ms,剩余CPU执行时间为100ms-10ms=90ms。就绪队列中存在P0、P1、P2三个进程。系统采用基于优先权的抢占式进程调度算法,三个进程中P2的优先级值最小,值越小优先权越高,P2抢占执行。
- 15ms时刻,P3进入就绪队列,P2运行了15ms-10ms=5ms,其CPU执行时间为20ms,剩余CPU执行时间为20ms-5ms=15ms。就绪队列中存在P0、P1、P2、P3四个进程,此时所有进程都以就绪,系统采用基于优先权的抢占式进程调度算法,值越小优先权越高,优先级值从小到大依次为P3、P2、P0、P1,此时P3抢占执行。
综上,从0ms开始到4个进程都运行结束为止,进程执行序列为P0、P2、P3、P2、P0、P1,发生进程调度的总次数为6。

- 【2023-29】进程P1、P2和P3进入就绪队列的的时刻,优先值(越大优先权越高)以及CPU的 执行时间如下表所示。
\(\begin{array}{|c|}\hline \text{进程名}&\text{进入就绪队列的时刻}&\text{优先级}&\text{CPU执行时间}\\\hline \text{P1}&\text{0 ms}&1&\text{60 ms}\\ \text{P2}&\text{20 ms}&10&\text{42 ms}\\ \text{P3}&\text{30 ms}&100&\text{13 ms}\\\hline \end{array}\)
系统采用基于优先权的抢占式CPU调度算法,从0ms时刻开始进行调度,则P1、P2和P3的平均周转时间为( )。
A. 60 ms
B. 61 ms
C. 70 ms
D. 71 ms
答案
本题选B。

按时间序列进程分析:
- 0ms时刻,只有P1进入就绪队列,开始运行P0。
- 20ms时刻,P2进入就绪队列,P1运行了20ms-0ms=20ms,其CPU执行时间为60ms,剩余CPU执行时间为60ms-20ms=40ms。就绪队列中存在P1和P2两个进程。系统采用基于优先权的抢占式进程调度算法,P2优先级值比P1优先级值大,值越大优先权越高,P2抢占执行。
- 30ms时刻,P3进入就绪队列,P2运行了30ms-20ms=10ms,其CPU执行时间为42ms,剩余CPU执行时间为42ms-10ms=32ms。就绪队列中存在P1、P2、P3三个进程,此时所有进程都以就绪,系统采用基于优先权的抢占式进程调度算法,值越大优先权越高,优先级值从大到小依次为P3、P2、P1,此时P3抢占执行。
- 30ms+13ms=43ms时刻,P3执行完毕,P2执行。
- 43ms+32ms=75ms时刻,P2执行完毕,P1执行。
- 75ms+40ms=115ms时刻,P1执行完毕,此时所有进程均已执行完毕。
进程周转时间 = 进程完成时刻-进程进入就绪队列的时刻。
- P1周转时间 = P1进程完成时刻-P1进程进入就绪队列的时刻 = 115ms-0ms = 115ms;
- P2周转时间 = P2进程完成时刻-P2进程进入就绪队列的时刻 = 75ms-20ms = 55ms;
- P3周转时间 = P3进程完成时刻-P3进程进入就绪队列的时刻 = 43ms-30ms = 13ms;
- P1、P2和P3的平均周转时间 = (P1周转时间 + P2周转时间 + P3周转时间)/3 = 61ms。
- 【2024-30】假设某系统使用时间片轮转调度算法进行 CPU 调度,时间片大小为 5 ms,系统共有 10 个进程,初始时均处于就绪队列,执行结束前仅处于执行态或就绪态。若队尾的进程 P 所需 CPU 时间最短,时间为 25 ms。在不考虑系统开销的情况下,则进程 P 的周转时间为
A. 200 ms
B. 205 ms
C. 250 ms
D. 295 ms
解析
答案:C

进程 P 在队尾,每轮都要等前面的 9 个进程各运行一个 ms 时间片。P 需要
个时间片才能完成。由于 P 所需 CPU 时间最短,其他进程在 P 完成前都至少要经历这 5 轮。每轮耗时为
ms,因此 P 在第 5 轮末完成,周转时间为
多处理机调度¶
上下文及其切换机制¶
(三)同步与互斥¶
同步与互斥的基本概念¶
- 【2011-32】有两个并发执行的进程P1和P2,共享初值为1的变量x。P1对x加1,P2对x减1。加1和减1操作的指令序列分别如下所示。
P1 // 加1操作
load R1, x // 取x到寄存器R1中
inc R1
store x, R1 // 将R1的内容存入x
P2 // 减1操作
load R2, x // 取x到寄存器R2中
dec R2
store x, R2 // 将R2的内容存入x
两个操作完成后,x的值( )。
A. 可能为-1或3
B. 只能为1
C. 可能为0、1或2
D. 可能为-1、0、1或2
解析
答案:C
若两个操作串行执行,最终结果为 1。若两个进程都先读到初值 1,再分别计算出 2 和 0,则最后一次写操作可能把结果写成 2 或 0。因而所有可能结果为
不会得到 或 3,因为每个进程只执行一次加 1 或减 1。
- 【2016-30】进程P1和P2均包含并发执行的线程,部分伪代码描述如下所示。
下列选项中,需要互斥执行的操作是( )。
A. a=1与a=2
B. a=x与b=x
C. x+=1与x+=2
D. x+=1与x+=3
解析
本题选C。

首先需要明确的是,进程(或线程)外的为全局变量,进程(或线程)内的为局部变量,多进程(或线程)并发执行时,全局变量为临界资源,需要互斥访问。
A错误。a=1中的a为Thread1中的局部变量,a=2中的a为Thread2中的局部变量,两者相互独立。
B错误。a=x中的a为Thread3中的局部变量,b=x中的b为Thread4中的局部变量,两者相互独立。
C正确。x+=1在Thread1中执行,x+=2在Thread2中执行,Thread1和Thread2都属于进程P1,Thread1和Thread2并行修改进程P1的全局变量x,需要互斥执行。
D错误。x+=1在Thread1中执行,x+=3在Thread3中执行,Thread1属于进程P1,而Thread3属于进程P2,这两个x分属于不同进程,两者相互独立。
- 【2018-25】属于同一进程的两个线程thread1和thread2并发执行,共享初值为0的全局变量x。thread1和thread2实现对全局变量x加1的机器级代码描述如下。
// thread1
mov R1,x //(x)→R1
inc R1 //(R1)+1→R1
mov x,R1 //(R1)→x
// thread2
mov R2,x //(x)→R2
inc R2 //(R2)+1→R2
mov x,R2 //(R2)→x
在所有可能的指令执行序列中,使 x 的值为 2 的序列个数是( )。
A. 1
B. 2
C. 3
D. 4
解析
答案:B
要使最终 ,第二个线程读取
x 时,第一个线程必须已经完成写回,使其读到 1。满足条件的执行方式只有两种:
- thread1 的三条指令全部完成,再执行 thread2 的三条指令;
- thread2 的三条指令全部完成,再执行 thread1 的三条指令。
因此满足条件的指令序列共有 2 个。
- 【2020-32】下列准则中,实现临界区互斥机制必须遵循的是( )。
Ⅰ. 两个进程不能同时进入临界区
Ⅱ. 允许进程访问空闲的临界资源
Ⅲ. 进程等待进入临界区的时间是有限的
Ⅳ. 不能进入临界区的执行态进程立即放弃CPU
A. 仅Ⅰ、Ⅳ
B. 仅Ⅱ、Ⅲ
C. 仅Ⅰ、Ⅱ、Ⅲ
D. 仅Ⅰ、Ⅲ、Ⅳ
解析
答案:C
临界区互斥机制必须满足:忙则等待,即两个进程不能同时进入临界区;空闲让进,即临界资源空闲时允许申请者进入;有限等待,即进程不能无限期等待。让权等待是理想要求,但自旋锁等合法互斥实现并不满足它,因此Ⅳ不是所有互斥机制都必须具备的条件。
基本的实现方法(软件方法;硬件方法)¶
- 【2010-27】进程P0和P1的共享变量定义及其初值为
若进程P0和P1访问临界资源的类C伪代码实现如下:
void P0() { //进程P0
while (TRUE) {
flag[0] = TRUE;
turn = 1;
while (flag[1] && (turn == 1));
临界区;
flag[0] = FALSE;
}
}
void P1() { //进程P1
while (TRUE) {
flag[1] = TRUE;
turn = 0;
while (flag[0] && (turn == 0));
临界区;
flag[1] = FALSE;
}
}
则并发执行进程P0和P1时产生的情形是( )。
A. 不能保证进程互斥进入临界区,会出现“饥饿”现象
B. 不能保证进程互斥进入临界区,不会出现“饥饿”现象
C. 能保证进程互斥进入临界区,会出现“饥饿”现象
D. 能保证进程互斥进入临界区,不会出现“饥饿”现象
解析
答案:D
该程序是 Peterson 两进程互斥算法。flag[i] 表示进程进入临界区的意愿,turn 在双方同时申请时决定让谁先进入。该算法能保证互斥、空闲让进和有限等待,因此既不会让两个进程同时进入临界区,也不会导致某一进程永久饥饿。
- 【2016-27】使用TSL (Test and Set Lock) 指令实现进程互斥的伪代码如下所示。
下列与该实现机制相关的叙述中,正确的是( )。
A. 退出临界区的进程负责唤醒阻塞态进程
B. 等待进入临界区的进程不会主动放弃CPU
C. 上述伪代码满足“让权等待”的同步准则
D. while (TSL(&lock)) 应在关中断状态下执行
解析
答案:B
TSL 是原子硬件指令,等待进程在 while 循环中不断测试锁,属于忙等待,不会主动放弃 CPU。该实现没有阻塞队列,也不需要退出临界区的进程执行唤醒操作;TSL 本身已经保证测试与置位的原子性,无须额外关中断。
- 【2018-32】在下列同步机制中,可以实现让权等待的是( )。
A. Peterson方法
B. swap指令
C. 信号量方法
D. TestAndSet指令
解析
答案:C
信号量的 wait 操作在资源不足时可以把进程阻塞并交出 CPU,资源可用后再由 signal 操作唤醒它,因此能够实现让权等待。Peterson、swap 和 TestAndSet 的典型实现都采用循环检测,属于忙等待。
锁¶
信号量¶
- 【2010-25】设与某资源关联的信号量初值为3,当前值为1。若M表示该资源的可用个数,N表示等待该资源的进程数,则M、N分别是( )。
A. 0、1 B. 1、0 C. 1、2 D. 2、0
解析
答案:B
信号量当前值为 1,且为正数,表示还有 1 个资源可用,没有进程因等待该资源而阻塞。因此
条件变量¶
- 【2016-32】下列关于管程的叙述中,错误的是( )。
A. 管程只能用于实现进程的互斥
B. 管程是由编程语言支持的进程同步机制
C. 任何时候只能有一个进程在管程中执行
D. 管程中定义的变量只能被管程内的过程访问
解析
答案:A
管程既能通过“任一时刻至多一个进程在管程内活动”实现互斥,也能借助条件变量的 wait、signal 等操作实现进程同步,所以它并非只能实现互斥。管程通常由编程语言或编译系统支持,管程内数据只能由管程过程访问。
- 【2018-28】若 x 是管程内的条件变量,则当进程执行 x.wait() 时所做的工作是
A. 实现对变量 x 的互斥访问
B. 唤醒一个在 x 上阻塞的进程
C. 根据 x 的值判断该进程是否进入阻塞状态
D. 阻塞该进程,并将之插入 x 的阻塞队列中
解析
答案:D
条件变量本身不是普通数值变量,也不用于直接实现互斥。进程执行 x.wait() 时,会释放对管程的占用、阻塞自身,并进入条件变量 x 对应的等待队列,直到其他进程执行相应的唤醒操作。
经典同步问题(生产者-消费者问题;读者-写者问题;哲学家进餐问题)¶
(四)死锁¶
死锁的基本概念¶
- 【2009-25】某计算机系统中有8台打印机,由K个进程竞争使用,每个进程最多需要3台打印机。该系统可能会发生死锁的K的最小值是( )。
A. 2
B. 3
C. 4
D. 5
解析
答案:C
每个进程最多需要 3 台打印机。若有 个进程,为确保不发生死锁,最坏情况下每个进程先占有 2 台,还应至少多保留 1 台,即资源数需满足
当 时需要 7 台即可保证安全,现有 8 台不会死锁;当
时需要 9 台才能保证安全,而系统只有 8 台,可能出现 4 个进程各占 2 台并各等 1 台的死锁。因此最小
。
- 【2014-24】某系统有 n 台互斥使用的同类设备,三个并发进程分别需要3、4、5台设备,可确保系统不发生死锁的设备数 n 最小为( )。
A. 9
B. 10
C. 11
D. 12
解析
答案:B
三个进程的最大需求分别为 3、4、5。要保证不发生死锁,最坏情况下允许它们分别先占有 2、3、4 台设备,还必须剩余 1 台使某个进程完成。因此最少设备数为
死锁预防¶
- 【2021-31】若系统中有n(n≥2)个进程,每个进程均需要使用某类临界资源2个,则系统不会发生死锁所需的该类资源总数至少是( )。
A. 2
B. n
C. n+1
D. 2n
解析
答案:C
每个进程最多需要 2 个同类资源。最坏情况下 个进程各占有 1 个资源,并继续申请第 2 个。只要系统再多 1 个资源,就能使其中一个进程完成并释放资源,继而使其他进程依次完成。因此至少需要
个资源。
死锁避免¶
- 【2011-27】某时刻进程的资源使用情况如下表所示。

此时的安全序列是( )。
A. P1, P2, P3, P4
C. P1, P4, P3, P2
B. P1, P3, P2, P4
D. 不存在
解析
答案:D
初始可用资源向量为
只有 P1 的尚需资源 不超过
Work,故 P1 先完成。释放 P1 已分配的 后:
此时只有 P4 的需求 可满足;P4 完成并释放
后:
但 P2、P3 对 的剩余需求均为 3,而当前仅有 2 个
,二者都无法完成。因此不存在安全序列,系统处于不安全状态。
- 【2012-27】假设5个进程P0、P1、P2、P3、P4共享三类资源R1、R2、R3,这些资源总数分别为18、6、22。T0时刻的资源分配情况如下表所示,此时存在的一个安全序列是( )。

A. P0, P2, P4, P1, P3
B. P1, P0, P3, P4, P2
C. P2, P1, P0, P3, P4
D. P3, P4, P2, P1, P0
解析
答案:D
系统初始可用资源为总资源减去全部已分配资源:
各进程尚需资源等于“最大需求减已分配资源”。按选项 D 检查:

每一步均满足 Need <= Work,故安全序列为
- 【2013-32】下列关于银行家算法的叙述中,正确的是( )。
A. 银行家算法可以预防死锁
B. 当系统处于安全状态时,系统中一定无死锁进程
C. 当系统处于不安全状态时,系统中一定会出现死锁进程
D. 银行家算法破坏了死锁必要条件中的“请求和保持”条件
解析
答案:B
银行家算法属于死锁避免算法,通过拒绝会使系统进入不安全状态的资源分配来保持安全状态。安全状态意味着至少存在一个安全序列,因此系统中一定没有死锁进程;不安全状态只表示将来可能发生死锁,并不表示当前一定已经死锁。该算法也不是通过破坏“请求和保持”条件实现的。
- 【2018-26】假设系统中有 4 个同类资源,进程 P1、P2 和 P3需要的资源数分别为 4、3 和 1,P1、P2 和 P3 已申请到的资源数分别为 2、1 和 0,则执行安全性检测算法的结果是
A. 不存在安全序列,系统处于不安全状态
B. 存在多个安全序列,系统处于安全状态
C. 存在唯一安全序列 P3、P1、P2,系统处于安全状态
D. 存在唯一安全序列 P3、P2、P1,系统处于安全状态
解析
答案:A
系统共有 4 个资源,已经分配 个,所以初始可用资源数为 1。各进程尚需资源数为:
初始只有 P3 能获得所需的 1 个资源,但 P3 原先占有 0 个资源;在安全性检测算法中,P3 完成后加回的是其原已分配量 0,所以 Work 仍为 1,仍无法满足 P1 或 P2 的剩余需求 2。因此不存在安全序列,系统不安全。
- 【2019-30】下列关于死锁的叙述中,正确的是( )。
Ⅰ. 可以通过剥夺进程资源解除死锁
Ⅱ. 死锁的预防方法能确保系统不发生死锁
Ⅲ. 银行家算法可以判断系统是否处于死锁状态
Ⅳ. 当系统出现死锁时,必然有两个或两个以上的进程处于阻塞态
A. 仅Ⅱ、Ⅲ
B. 仅Ⅰ、Ⅱ、Ⅳ
C. 仅Ⅰ、Ⅱ、Ⅲ
D. 仅Ⅰ、Ⅲ、Ⅳ
解析
答案:B
Ⅰ正确:可以剥夺部分死锁进程的资源,并将资源交给其他进程,以解除循环等待。Ⅱ正确:死锁预防通过破坏至少一个死锁必要条件,从机制上确保死锁不发生。Ⅲ错误:银行家算法判断的是分配后系统是否安全,用于死锁避免,不是死锁检测算法。Ⅳ正确:死锁涉及进程之间的循环等待,必然存在两个或两个以上无法继续执行的阻塞进程。因此正确的是Ⅰ、Ⅱ、Ⅳ。
- 【2020-27】某系统中有A、B两类资源各6个,t时刻资源分配及需求情况如下表所示。

t时刻安全性检测结果是( )。
A. 存在安全序列P1、P2、P3
B. 存在安全序列P2、P1、P3
C. 存在安全序列P2、P3、P1
D. 不存在安全序列
解析
答案:B
两类资源各有 6 个。当前已分配总量为
故初始可用向量为
各进程尚需向量为:P1 为 ,P2 为
,P3 为
。初始只有 P2 可以完成;P2 释放
后,
Work 变为 ,此时只有 P1 可以完成;P1 再释放
后,
Work 变为 ,最后 P3 可以完成。因此安全序列为
- 【2022-26】系统中有三个进程P0、P1、P2及三类资源A、B、C。若某时刻系统分配资源的情况如下表所示,则此时系统中存在的安全序列的个数为( )。

A. 1
B. 2
C. 3
D. 4
解析
答案:B
初始可用资源为
P0 的尚需向量为 ,可以立即满足;P1、P2 对 C 类资源的尚需量均为 3,初始只有 2 个,不能先完成。因此第一项只能是 P0。P0 释放已分配资源
后:
此时 P1、P2 均可完成,顺序可以互换,所以共有两个安全序列:
死锁检测和解除¶
- 【2015-26】若系统S1采用死锁避免方法,S2采用死锁检测方法。下列叙述中,正确的是( )。
Ⅰ. S1会限制用户申请资源的顺序,而S2不会
Ⅱ. S1需要进程运行所需资源总量信息,而S2不需要
Ⅲ. S1不会给可能导致死锁的进程分配资源,而S2会
A. 仅Ⅰ、Ⅱ
B. 仅Ⅱ、Ⅲ
C. 仅Ⅰ、Ⅲ
D. Ⅰ、Ⅱ、Ⅲ
解析
答案:B
死锁避免系统 S1 需要预先知道进程的最大资源需求,并在每次分配前进行安全性检查;死锁检测系统 S2 不需要最大需求信息,可以先分配资源,再周期性检测是否已经发生死锁。因此Ⅱ正确。S1 不会执行可能使系统进入不安全状态的分配,而 S2 可能执行这种分配,故Ⅲ正确。限制用户必须按固定次序申请资源属于死锁预防策略,不是死锁避免的必然要求,故Ⅰ错误。
- 【2016-25】系统中有3个不同的临界资源R1、R2和R3,被4个进程p1、p2、p3及p4共享。各进程对资源的需求为:p1申请R1和R2,p2申请R2和R3,p3申请R1和R3,p4申请R2。若系统出现死锁,则处于死锁状态的进程数至少是( )。
A. 1
B. 2
C. 3
D. 4
解析
答案:C
单个进程不可能形成进程间循环等待。任取两个进程,它们的资源需求集合最多只形成单向等待,无法构成“进程甲等待进程乙占有的资源,同时进程乙又等待进程甲占有的另一资源”的环。
三个进程则可以形成如下循环:
- P1 占有
,等待 P2 占有的
;
- P2 占有
,等待 P3 占有的
;
- P3 占有
,等待 P1 占有的
。
此时形成
的循环等待。因此处于死锁状态的进程数至少为 3。