一. 单选题(共10题,10分)
1. (单选题, 1分) 一个正在访问临界资源的进程由于申请等待I/O操作而被中断,它是( )。
A、可以允许其它进程进入与该进程相关的临界区
B、不允许其它进程进入临界区C、可以允许其它进程抢占处理机,但不得进入该进程的临界区
D、不允许任何进程抢占处理机
解析:进程进入临界区必须满足互斥条件,当简称进入临界区但尚未离开时就被迫进入阻塞是可以的,系统中经常出现这样的情形。在此状态下,只要其他进程在运行过程中不寻求进入该进程的l临界区,就应允许其运行,即分配CPU。该进程所锁定的临界区时不允许其他进程访问的,其他进程若要访问,必定会在临界区的“锁”上阻塞,期待该进程下次运行时可以离开并将临界区交给它,所以正确答案为C。
2.(单选题, 1分) 以下( )不属于临界资源。
A、打印机B、非共享资源
C、共享变量
D、共享缓冲区
解析:临界资源时互斥共享资源,非共享资源不属于临界资源。打印机、共享变量和共享缓冲区都只允许一次工一个进程使用。
3.(单选题, 1分) 原语是( )。
A、运行在用户态的过程
B、操作系统的内核
C、可中断的指令序列D、不可分割的指令序列
解析:原语,顾名思义,就是原子性的、不可分割的操作。其严格定义为:由若干机器指令构成的完成某种特定功能的一段程序,其执行必须是连续的,在执行过程中不允许被中断。
4.(单选题, 1分) 在操作系统中,对信号量S的P原语操作定义中,使进程进入相应阻塞队列等待的条件是( )。
A、S>0
B、S=0C、S<0
D、S<=0
5.(单选题, 1分) 在操作系统中,要对并发进程进行同步的原因是( )。
A、进程必须在有限的时间内完成
B、进程具有动态性C、并发进程是异步的
D、进程具有结构性
解析:进程同步是指进程之间的一种直接的协同工作关系,浙西额进城的并发是异步的,他们相互合作,共同完成一项任务。
6.(单选题, 1分) 在用信号量机制实现互斥时,互斥信号量的初值为( )。
A、0B、1
C、2
D、3
解析:互斥信号量的初值为1。P操作成功则将其减1,禁止其他进程进入;V操作成功则将其加1,允许等待队列中的一个进程进入。
7.(单选题, 1分) 用PV操作实现进程同步,信号量的初值为( )。
A、-1
B、0
C、1D、由用户确定
解析:与互斥信号量初值一般为1时不同,用P,V操作实现进程同步,信号量的初值应根据具体情况来确定。若期望的消息尚未产生,则对应的初值为0,;若期望的消息已存在,则信号量的初值应设置为一个非0的正整数。
8. (单选题, 1分) 进程间的间接通信方式是指( )。
A、源进程将消息发送给管道
B、源进程将消息发送给缓冲区C、源进程将消息发送给信箱
D、源进程将消息直接发送给目标进程
9. (单选题, 1分) 使用共享文件进行通信的方式属于( )通信。
A、共享存储器
B、实时通信
C、信息缓冲通信D、管道通信
10. (单选题, 1分) P、V操作是( )。A、两条低级进程通信原语
B、两组不同的机器指令
C、两条系统调用命令
D、两条高级进程通信原语
解析:P、V操作只一种低级的进程通信原语,它是不能被中断的。
二. 填空题(共2题,13分)
11. (填空题, 4分) 1. 请在①②③④处给出答案,以便能正确描述如图1所示的前趋关系。
Var a,b,c: semaphore:=0,0,0;
Begin
Cobegin
Begin S1; ① ; end;
Begin S2; ② ; end;
Begin wait(a); wait(b); S3; ③ ; end;
Begin (D); ④ ;S4 end;
Coend;
End;解析:signal(a);signal(b);signal(c);wait(c);
12.(填空题, 9分) 对生产者-消费者问题的算法描述中,设置n个缓冲区,使用empty和full两个信号量表示缓冲区的状态,设置mutex信号量实现互斥。已知empty= ① ; full= ② ; mutex= ③ ;请在A、B、C、D、E、F处写出正确的PV操作代码(题目中M代表生产者生产的物品)。解析:n;0;1;wait(empty);wait(mutex);signal(mutex);signal(full);wait(full);signal(empty);
三. 简答题(共1题,3分)
13.(简答题, 3分) 常用的进程高级通信方法有哪些?
答:常用的高级通信方式有共享存储器系统、管道通信系统和消息传递系统。
共享存储器系统:相互通信的进程共享某些数据结构或共享存储区,进程之间能够通过它们进行通信。又可分为基于共享数据结构的通信方式和基于共享存储区的通信方式。
管道通信系统:管道是指用于连接一个读进程和一个写进程,以实现它们之间通信的共享文件。向管道提供输入的发送进程(写进程),以字符流形式将大量的数据送入管道;而接收管道输出的接收进程(读进程)可从管道中接收数据。
消息传递系统:进程间的数据交换以消息为单位,直接使用系统提供的一组通信原语来实现。可分为直接通信方式和间接通信方式。
四. 计算题(共6题,74分)
14. (计算题, 12分)
1.数学表达式的求解,可以分解为以下几个步骤。请用步骤S1~S4画出表达式M求解的前趋图,并用信号量实现该前趋关系。S1=X-Y;S2=Z+5;S3=S1×S2;S4=;
cobegin
begin S1;signal(a);end;
begin S2;signal(b);end;
begin wait(a);wait(b);S3;signal(c);end;
begin wait(c);S4;end;
coend
15.(计算题, 9分) 请用信号量和PV操作描绘出图2所示的前趋图。
Cobegin
Begin S1;signal(a);signal(b);signal(c);end;
Begin wait(a);S2;signal(d);end;
Begin wait(b);S3;signal(e);end;
Begin wait(c);S4;signal(f);end;
Begin wait(d);wait(e);S5;signal(g);end;
Begin wait(f);S6;signal(h);end;
Begin wait(g);wait(h);S7;end;
Coend
16.(计算题, 15分) 设在公共汽车上,司机和售票员的活动分别是,司机:启动车辆,正常行车,到站停车。售票员:上乘客,关车门,售票,开车门,下乘客。请用PV操作来实现司机和售票员之间的同步。
解析:
1.设置信号量run表示汽车启动,设置信号量open表示开门
2.分析同步互斥关系,当司机收到关门的信号。即open=1时启动车辆,正常行驶,当售票员收到车辆启动的信号后,即run=1时开始售票。注意哪个是发出信号,哪个接收信号。
3.信号量赋初值,一开始初状态,即无司机也无售票员,故赋值run=0;open=0;
4.实现算法。
Semaphore open,run;
open.value=0;run.value=0;
Cobegin
Driver()
{
while(true)
{
wait(run);
启动车辆;
正常行车;
到站停车;
signal(open);
}
}
Conductor()
{
while(true)
{
上乘客;
关车门;
signal(run);
售票;
wait(open);
开车门;
下乘客;
}
}
Coend
17.(计算题, 15分) 有三个进程PA、PB和PC合作解决文件打印问题:PA将文件记录从磁盘读入主存的缓冲区1,每执行一次读一个记录;PB将缓冲区1的内容复制到缓冲区2,每执行一次复制一个记录;PC将缓冲区2的内容打印出来,每执行一次打印一个记录。缓冲区的大小等于一个记录大小。如图3所示,请用P、V操作来保证文件的正确打印。
在本题中,进程PA、PB、PC之间的关系为:PA与PB共用一个单缓冲区,而PB又与PC共用一个单缓冲区。当缓冲区1为空时,进程PA可将一个记录读入其中;若缓冲区1中有数据且缓冲区2为空,则进程PB可将记录从缓冲区1复制到缓冲区2中;若缓冲区2中有数据,则进程PC可以打印记录。在其它条件下,相应进程必须等待。事实上,这是一个生产者-消费者问题。
在本题中,进程PA、PB、PC之间的关系为:PA与PB共用一个单缓冲区,而PB又与PC共用一个单缓冲区。当缓冲区1为空时,进程PA可将一个记录读入其中;若缓冲区1中有数据且缓冲区2为空,则进程PB可将记录从缓冲区1复制到缓冲区2中;若缓冲区2中有数据,则进程PC可以打印记录。在其它条件下,相应进程必须等待。事实上,这是一个生产者-消费者问题。
semaphore empty1,empty2,full1,full2;
empty1.value=1;empty2.value=1;full1.value=0;full2.value=0;
main()
{
cobegin
PA();
PB();
PC();
coend
}
PA()
{
while(true)
{
从磁盘读一个记录;
P(empty1);
将记录存入缓冲区1;
V(full1);
}
}
PB()
{
while(true)
{
P(full1)
从缓冲区1中取出记录;
V(empty1);
P(empty2);
将记录存入缓冲区2;
V(full2);
}
}
PC()
{
while(true)
{
P(full2);
从缓冲区2中取出记录;
P(empty2);
打印记录;
}
}
18.(计算题, 13分) 桌上有一个空盒,盒内只允许存放一个水果。爸爸向盒内放水果(苹果或者橘子)。儿子只吃盒中的苹果,女儿只吃盒中的橘子。用PV操作来协调3人的关系,实现3人正确的活动。
semaphore fruits,empty;
fruits.value=0,empty.value=1;
cobegin
Father()
{
while(true)
{
wait(empty);
放水果;
signal(fruits);
}
}
Son()
{
while(true)
{
wait(fruits);
if(fruits==apple)
signal(empty);
else
signal(fruits);
}
}
Daughter()
{
while(true)
{
wait(fruits);
if(fruits==orange)
signal(empty);
else
signal(fruits);
}
}
coend
19.(计算题, 10分) 现有四个进程R1、R2、W1、W2,它们共享可以存放一个数的缓冲器B。进程R1每次把来自键盘的一个数存入缓冲器B中,供进程W1打印输出;进程R2每次从磁盘上读一个数存放到缓冲器B中,供进程W2打印输出。为防止数据的丢失和重复打印,问怎样用信号量操作来协调这四个进程的并发执行。
semaphore mutex,monitor,read;
mutex.value=1;
monitor.value=0;
read.value=0;
main()
{
Cobegin
{
R1();
R2();
W1();
W2();
}
}
R1()
{
While(true)
{
监听键盘;
Wait(mutex);
将数据存入缓冲器B;
signal(monitor);
}
}
R2()
{
while(true)
{
从磁盘读数;
wait(mutex);
将数据写入缓冲区B;
Signal(read);
}
}
W1()
{
while(true)
{
wait(monitor);
打印数据;
signal(mutex);
}
}
W2()
{
while(true)
{
wait(read);
打印数据;
signal(mutex);
}
}