文章目录
-
-
- 单项选择题
- 填空题
- 基本概念解释和辨析
- 论述题
-
- (1)什么是“忙等待”?如何克服“忙等待”?
- (2)在解决进程互斥时,如果TS指令的执行可以中断,则会出现什么情况?而如果wait、signal的执行可分割,又会出现什么情况?
- (3)设有n个进程共享一互斥段,对于如下两种情况:
- (4)下面是两个并发执行的进程,它们能正确执行吗?若不能正确执行,请举例说明,并改正之(x是公共变量)。
- (5)共享存储区通信是如何实现的?
- (6)假设某系统未直接提供信号量机制,但提供了进程通信工具。如果某程序希望使用关于信号量的wait、signal操作,那么该程序应如何利用通信工具模拟信号量机制?要求说明如何用send/receive操作及消息表示wait/signal操作及信号量。
- 应用题解答
-
单项选择题
- (1)有3个进程P1、P2、P3共享同一个程序段,而每次最多允许两个进程进入该程序段,则信号量S的初值为。
- A. 0
- B. 1
- C. 2
- D. 3
答案:C. 2
解释:信号量用于控制对共享资源的访问。如果每次最多允许两个进程进入程序段,信号量S的初值应为2。
- (2)在操作系统中,wait、signal操作是一种。
- A. 机器指令
- B. 系统调用命令
- C. 作业控制命令
- D. 低级进程通信
答案:D. 低级进程通信
解释:wait和signal操作是用于进程间通信的低级原语,它们用于实现进程同步和互斥。
- (3)用signal操作唤醒一个进程时,被唤醒进程的状态应变成状态。
- A. 等待
- B. 运行
- C. 就绪
- D. 完成
答案:C. 就绪
解释:signal操作用于唤醒处于等待状态的进程,将其状态改变为就绪状态。
- (4)用信箱实现并发进程间的通信需要两个基本的通信原语,它们是。
- A. wait原语和signal原语
- B. send原语和receive原语
- C. R(S)和W(S)
- D. 以上都不是
答案:B. send原语和receive原语
解释:send和receive是信箱通信中的基本原语,用于发送和接收消息。
- (5)设与某资源关联的信号量初值为3,当前值为1。若M表示当前该资源的可用个数,N表示当前等待该资源的进程数,则M、N分别是。
- A. 0、1
- B. 1、0
- C. 1、2
- D. 2、0
答案:B. 1、0
解释:信号量的当前值为1,表示有一个资源可用(M=1)。由于没有进程在等待(信号量值不是负数),N=0。
- (6)用来实现进程同步与互斥的wait操作和signal操作,实际上是的过程。
- A. 一个可被中断
- B. 一个不可被中断
- C. 两个可被中断
- D. 两个不可被中断
答案:D. 两个不可被中断
解释:wait和signal操作通常是原子操作,不可被中断,以确保进程同步和互斥的正确性。
填空题
- (1)临界资源是一次只允许一个进程使用的资源,临界区是访问临界资源的那段代码。
- (2)信号量s>0时,表示资源的空闲数量;当s=0时,表示资源已经耗尽,但没有进程在等待;若s<0,则表示有|s|个进程在等待。
- (3)设计进程同步机制的准则有空闲让进、忙则等待、有限等待和让权等待。
基本概念解释和辨析
-
同步与互斥
- 同步:指协调进程间的执行顺序,使得进程按照一定的顺序执行。
- 互斥:指确保在任何时刻,只有一个进程能访问临界资源。
-
临界资源与临界区
- 临界资源:指一次只能被一个进程使用的资源。
- 临界区:指访问临界资源的代码段,需要互斥执行。
-
高级通信与低级通信
- 高级通信:指操作系统提供的进程间通信机制,如消息队列、共享内存等。
- 低级通信:指基本的通信原语,如信号量、管程等。
-
直接通信与间接通信
- 直接通信:指进程间直接交换信息,如通过共享内存。
- 间接通信:指进程间通过某种中介(如信箱、消息队列)交换信息。
论述题
(1)什么是“忙等待”?如何克服“忙等待”?
**“忙等待”**是指当一个进程试图进入一个已经被占用的临界区时,该进程不断检查资源是否可用的状态,而不是挂起等待资源释放。这种状态下,进程白白消耗CPU时间,不做任何有用的工作。
**克服“忙等待”**的方法是让试图进入忙状态的临界区的进程进入“睡眠”状态,即阻塞状态,这样它就不会消耗CPU资源。当资源被释放时,由释放资源的进程通过某种机制(如信号量)来唤醒等待的进程。
(2)在解决进程互斥时,如果TS指令的执行可以中断,则会出现什么情况?而如果wait、signal的执行可分割,又会出现什么情况?
如果TS(Test and Set)指令的执行可以中断,则可能破坏互斥条件。TS指令用于设置一个标志位,并返回设置前的标志位值。如果TS指令在测试和设置之间被中断,其他进程可能错误地认为资源可用,导致多个进程同时进入临界区。
如果wait、signal操作的执行可分割,则可能破坏信号量机制的原子性。wait操作应该原子性地减少信号量的值,而signal操作应该原子性地增加信号量的值。如果这些操作可以被中断,它们可能不会正确地更新信号量的值,导致进程同步问题。
(3)设有n个进程共享一互斥段,对于如下两种情况:
(1)每次只允许一个进程进入临界区;
(2)最多允许m个进程(m<n)同时进入临界区。
所采用的信号量是否相同?信号量值的变化范围如何?
对于这两种情况,所采用的信号量是不同的。第一种情况使用的是互斥信号量,其初值设为1,允许一个进程进入临界区。第二种情况使用的是计数信号量,其初值设为m,允许最多m个进程同时进入临界区。信号量值的变化范围为:
- 第一种情况:信号量的值变化范围为0到1。
- 第二种情况:信号量的值变化范围为0到m。
(4)下面是两个并发执行的进程,它们能正确执行吗?若不能正确执行,请举例说明,并改正之(x是公共变量)。
这两个进程不能正确执行,因为它们对共享变量x的访问没有进行同步,导致了竞态条件。进程P1和P2中的代码片段不是原子操作,它们可以被中断,导致x、y、z的值可能不正确。
改正方法:
使用信号量或其他同步机制来确保对共享变量x的操作是原子的,并且避免竞态条件。例如:
struct semaphore s;
s.value = 1;
void P1() {
int y, z;
wait(s);
x = 1;
y = 0<