## 2.3.8 本节习题精选
### 一、单项选择题
01. 下列对临界区的论述中,正确的是()。
A. 临界区是指进程中用于实现进程互斥的那段代码
B. 临界区是指进程中用于实现进程同步的那段代码
C. 临界区是指进程中用于实现进程通信的那段代码
D. 临界区是指进程中用于访问临界资源的那段代码
02. 不需要信号量就能实现的功能是()。
A. 进程同步
B. 进程互斥
C. 执行的前驱关系
D. 进程的并发执行
03. 若一个信号量的初值为 3,经过多次 PV 操作后当前值为 -1,这表示等待进入临界区的进程数是()。
A. 1
B. 2
C. 3
D. 4
04. 一个正在访问临界资源的进程由于申请等待 I/O 操作而被中断时,它()。
A. 允许其他进程进入与该进程相关的临界区
B. 不允许其他进程进入任何临界区
C. 允许其他进程抢占处理器,但不得进入该进程的临界区
D. 不允许任何进程抢占处理器
05. 两个旅行社甲和乙为旅客到某航空公司订飞机票,形成互斥资源的是()。
A. 旅行社
B. 航空公司
C. 飞机票
D. 旅行社与航空公司
06. 临界区是指并发进程访问共享变量段的()。
A. 管理信息
B. 信息存储
C. 数据
D. 代码程序
07. 以下不是同步机制应遵循的准则的是()。
A. 让权等待
B. 空闲让进
C. 忙则等待
D. 无限等待
08. 以下()不属于临界资源。
A. 打印机
B. 非共享数据
C. 共享变量
D. 共享缓冲区
09. 以下()属于临界资源。
A. 磁盘存储介质
B. 公用队列
C. 私用数据
D. 可重入的程序代码
10. 在操作系统中,要对并发进程进行同步的原因是()。
A. 进程必须在有限的时间内完成
B. 进程具有动态性
C. 并发进程是异步的
D. 进程具有结构性
11. 进程 A 和进程 B 通过共享缓冲区协作完成数据处理,进程 A 负责产生数据并放入缓冲区,进程 B 从缓冲区读数据并输出。进程 A 和进程 B 之间的制约关系是()。
A. 互斥关系
B. 同步关系
C. 互斥和同步关系
D. 无制约关系
12. 在操作系统中,P, V 操作是一种()。
<!-- page: 126 -->
A. 机器指令
B. 系统调用命令
C. 作业控制命令
D. 低级进程通信原语
13. P 操作可能导致( )。
A. 进程就绪
B. 进程结束
C. 进程阻塞
D. 新进程创建
14. 原语是( )。
A. 运行在用户态的过程
B. 操作系统的内核
C. 可中断的指令序列
D. 不可分割的指令序列
15. ( )定义了共享数据结构和各种进程在该数据结构上的全部操作。
A. 管程
B. 类程
C. 线程
D. 程序
16. 用 V 操作唤醒一个等待进程时,被唤醒进程变为( )态。
A. 运行
B. 等待
C. 就绪
D. 完成
17. 在用信号量机制实现互斥时,互斥信号量的初值为( )。
A. 0
B. 1
C. 2
D. 3
18. 用 P, V 操作实现进程同步,信号量的初值为( )。
A. -1
B. 0
C. 1
D. 由用户确定
19. 可以被多个进程在任意时刻共享的代码必须是( )。
A. 顺序代码
B. 机器语言代码
C. 不允许任何修改的代码
D. 无转移指令代码
20. 一个进程映像由程序、数据及PCB组成,其中( )必须用可重入编码编写。
A. PCB
B. 程序
C. 数据
D. 共享程序段
21. 下列关于互斥锁的说法中,正确的是( )。
A. 互斥锁只能用于多线程之间,不能用于多进程之间
B. 互斥锁只能用于多进程之间,不能用于多线程之间
C. 互斥锁可用于多线程或多进程之间,但只能由创建它的线程或进程来加锁和解锁
D. 互斥锁可用于多线程或多进程之间,但只能由对它加锁的线程或进程来解锁
22. 在使用互斥锁进行同步互斥时,下列( )情况会导致死锁。
A. 一个线程对同一个互斥锁连续加锁两次
B. 一个线程尝试对一个已加锁的互斥锁再次加锁
C. 两个线程分别对两个不同的互斥锁先后加锁,但顺序相反
D. 一个线程对一个互斥锁加锁后忘记解锁
23. 用来实现进程同步与互斥的 PV 操作实际上是由( )过程组成的。
A. 一个可被中断的
B. 一个不可被中断的
C. 两个可被中断的
D. 两个不可被中断的
24. 对于两个并发进程,设互斥信号量为 mutex(初值为 1),若 mutex = 0,则表示( )。
A. 没有进程进入临界区
B. 有一个进程进入临界区
C. 有一个进程进入临界区,另一个进程等待进入
D. 有一个进程在等待进入
25. 对于两个并发进程,设互斥信号量为 mutex(初值为 1),若 mutex = -1,则( )。
A. 表示没有进程进入临界区
B. 表示有一个进程进入临界区
<!-- page: 127 -->
C. 表示有一个进程进入临界区,另一个进程等待进入
D. 表示有两个进程进入临界区
26. 一个进程因在互斥信号量 mutex 上执行 V(mutex)操作而导致唤醒另一个进程时,执行 V 操作后 mutex 的值为 ( )。
A. 大于 0
B. 小于 0
C. 大于或等于 0
D. 小于或等于 0
27. 一个系统中共有 5 个并发进程涉及某个相同的变量 A,变量 A 的相关临界区是由( )个临界区构成的。
A. 1
B. 3
C. 5
D. 6
28. 下述( )选项不是管程的组成部分。
A. 局限于管程的共享数据结构
B. 对管程内数据结构进行操作的一组过程
C. 管程外过程调用管程内数据结构的说明
D. 对局限于管程的数据结构设置初始值的语句
29. 以下关于管程的叙述中,错误的是( )。
A. 管程是进程同步工具,解决信号量机制大量同步操作分散的问题
B. 管程每次只允许一个进程进入管程
C. 管程中 signal 操作的作用和信号量机制中的 V 操作相同
D. 管程是被进程调用的,管程是语法范围,无法创建和撤销
30. 对信号量 S 执行 P 操作后,使该进程进入资源等待队列的条件是( )。
A. S.value < 0
B. S.value <= 0
C. S.value > 0
D. S.value >= 0
31. 若系统有 $n$ 个进程,则就绪队列中进程的个数最多有(①)个;阻塞队列中进程的个数最多有(②)个。
① A. $n + 1$
B. $n$
C. $n - 1$
D. 1
② A. $n + 1$
B. $n$
C. $n - 1$
D. 1
32. 下列关于 PV 操作的说法中,正确的是( )。
I. PV 操作是一种系统调用命令
II. PV 操作是一种低级进程通信原语
III. PV 操作是由一个不可被中断的过程组成
IV. PV 操作是由两个不可被中断的过程组成
A. I、III
B. II、IV
C. I、II、IV
D. I、IV
33. 下列关于临界区和临界资源的说法中,正确的是( )。
I. 银行家算法可以用来解决临界区(Critical Section)问题
II. 临界区是指进程中用于实现进程互斥的那段代码
III. 公用队列属于临界资源
IV. 私用数据属于临界资源
A. I、II
B. I、IV
C. 仅 III
D. 以上答案都错误
34. 有一个计数信号量 $S$:
1)假如若干进程对 $S$ 进行 28 次 P 操作和 18 次 V 操作后,信号量 $S$ 的值为 0。
2)假如若干进程对信号量 $S$ 进行了 15 次 P 操作和 2 次 V 操作。请问此时有多少个进
<!-- page: 128 -->
程等待在信号量 $S$ 的队列中?()
A. 2
B. 3
C. 5
D. 7
35. 有两个并发进程 $\mathrm{P}_1$ 和 $\mathrm{P}_2$,其程序代码如下:
可能打印出的 $z$ 值有(),可能打印出的 $c$ 值有()(其中 $x$ 为 $\mathrm{P}_1, \mathrm{P}_2$ 的共享变量)。
A. $z = 1, -3$; $c = -1.9$
B. $z = -1.3$; $c = 1.9$
C. $z = -1.3, 1$; $c = 9$
D. $z = 3$; $c = 1.9$
36. 并发进程之间的关系是()。
A. 无关的
B. 相关的
C. 可能相关的
D. 可能是无关的,也可能是有交往的
37. 若系统中有 4 个进程共享 3 台打印机,采用信号量机制控制打印机的共享使用,则信号量的取值范围是()。
A. $[-1, 4]$
B. $[-2, 2]$
C. $[-1, 3]$
D. $[-3, 2]$
38. 两个进程 $\mathrm{P}_0, \mathrm{P}_1$ 互斥的 Peterson 算法描述如下:
进程 P0
flag[0]=1;
(1);
while (flag[1] && turn == 1);
临界区;
flag[0]=0;
其余代码;
进程 P1
flag[1]=1;
(2);
while (flag[0] && turn == 0);
临界区;
flag[1]=0;
其余代码;
其中,(1) 和 (2) 处的代码分别为()。
A. $\text{turn} = 0, \text{turn} = 0$
B. $\text{turn} = 0, \text{turn} = 1$
C. $\text{turn} = 1, \text{turn} = 0$
D. $\text{turn} = 1, \text{turn} = 1$
39. 在 Peterson 算法中,flag 数组的作用是()。
A. 表示每个线程是否想进入临界区
B. 表示每个线程是否已进入临界区
C. 表示每个线程是否已退出临界区
D. 表示每个线程是否已完成任务
40. 在 Peterson 算法中,turn 变量的作用是()。
A. 表示轮到哪个线程进入临界区
B. 表示哪个线程先发出访问请求
C. 表示哪个线程后发出访问请求
D. 表示哪个线程已进入临界区
41. 生产者-消费者问题用于解决()。
A. 多个进程共享一个数据对象的问题
B. 多个进程之间的同步和互斥问题
C. 多个进程共享资源的死锁与饥饿问题
D. 利用信号量实现多个进程并发的问题
42. 所有的消费者必须等待生产者先运行的前提条件是()。
A. 缓冲区空
B. 缓中区满
C. 缓冲区不可用
D. 缓冲区半空
43. 下列关于生产者-消费者问题的唤醒操作的说法中,正确的是()。
I. 生产者唤醒其他生产者
II. 生产者唤醒消费者
III. 消费者唤醒其他消费者
IV. 消费者唤醒生产者
A. I 和 II
B. III 和 IV
C. II 和 III
D. I、II、III 和 IV
44. 在 9 个生产者、6 个消费者共享容量为 8 的缓冲区的生产者-消费者问题中,互斥使用缓
<!-- page: 129 -->
冲区的信号量初始值为( )。
A. 1
B. 6
C. 8
D. 9
45. 消费者进程阻塞在 wait(m)(m 是互斥信号量)的条件是( )。
I. 没有空缓冲区
II. 没有满缓冲区
III. 有其他生产者已进入临界区
IV. 有其他消费者已进入临界区
A. I 和 II
B. III 和 IV
C. I 和 III
D. II 和 IV
46. 在读者-写者问题中,能同时执行的是( )。
A. 读者和写者
B. 不同的写者
C. 不同的读者
D. 都不能
47. 在哲学家就餐问题中,若同时存在左撇子和右撇子(将先拿起左边筷子的人称为左撇子,而将先拿起右边筷子的人称为右撇子),则不会发生死锁,因为破坏了( )。
A. 互斥条件
B. 请求与保持条件
C. 不剥夺条件
D. 循环等待条件
48. 哲学家就餐问题的解决方案如下:
下列与该实现机制相关的叙述中,正确的是()。
A. 退出临界区的进程负责唤醒阻塞态进程
B. 等待进入临界区的进程不会主动放弃 CPU
<!-- page: 131 -->
C. 上述伪代码满足“让权等待”的同步准则
D. while(TSL(&lock))语句应在关中断状态下执行
55. 【2016 统考真题】下列关于管程的叙述中,错误的是( )。
A. 管程只能用于实现进程的互斥
B. 管程是由编程语言支持的进程同步机制
C. 任何时候只能有一个进程在管程中执行
D. 管程中定义的变量只能被管程内的过程访问
56. 【2018 统考真题】属于同一进程的两个线程 thread1 和 thread2 并发执行,共享初值为 0 的全局变量 x。thread1 和 thread2 实现对全局变量 x 加 1 的机器级代码描述如下。
[tbl-30.md](tbl-30.md)
在所有可能的指令执行序列中,使 x 的值为 2 的序列个数是( )。
A. 1
B. 2
C. 3
D. 4
57. 【2018 统考真题】若 x 是管程内的条件变量,则当进程执行 x wait() 时所做的工作是( )。
A. 实现对变量 x 的互斥访问
B. 嗅醒一个在 x 上阻塞的进程
C. 根据 x 的值判断该进程是否进入阻塞态
D. 阻塞该进程,并将之插入 x 的阻塞队列中
58. 【2018 统考真题】在下列同步机制中,可以实现让权等待的是( )。
A. Peterson 方法
B. swap 指令
C. 信号量方法
D. TestAndSet 指令
59. 【2020 统考真题】下列准则中,实现临界区互斥机制必须遵循的是( )。
I. 两个进程不能同时进入临界区
II. 允许进程访问空闲的临界资源
III. 进程等待进入临界区的时间是有限的
IV. 不能进入临界区的执行态进程立即放弃 CPU
A. 仅 I, IV
B. 仅 II, III
C. 仅 I, II, III
D. 仅 I, III, IV
## 二、综合应用题
01. 下面是两个并发执行的进程,它们能正确运行吗?若不能清单例说明并改正。