第4章进程同步与进程通信
解:设信号量s1=1;/*互斥使用取号机取号*/
S2=10;/*有10个空座位*/
S3=0;/*顾客人数*/
cobegin
{
process顾客i
{p(s2);
P(s1);
从取号机获得一个号码;
V(s1);
V(s3);
等待叫号;
获得服务;
}
process营业员
{
while(TRUE)
{p(s3);
叫号;
2、进程P0和P1的共享变量定义及其初值为.【2010】
Booleanflag[2];
int turn=0;
flag[0]=faulse; flag[1]=faulse;
若进程P0和P1访问临界资源的类C代码实现如下。
Void P0 () //进程P0
{
while (TURE){
Flag[0]=TURE;turn=1;
当信箱不满时,辩论者才能将新邮件放入信箱,否则等待。
请添加必要的信号量和P、V(或wait, signed)操作,以实现上述过程的同步,要求写出完整过程,并说明信号量的含义和初值。【2015】
7、某企业生产流水线M共有两位生产者,生产者甲不断地将其工序上加工的半成品放入半成品箱,生产者乙从半成品箱取出继续加工。假设半成品箱可存放n件半成品,采用pv操作实现生产者甲和生产者乙的同步可以设置三个信号量s,S1和S2,其同步模型如下图所示。
6、有A、B两人通过信箱进行辩论,每人都从自己的信箱中取得对方的问题。将答案和向对方提出的新问题组成一个邮件放入对方的邮箱中,设A的信箱最多放M个邮件,B的信箱最多放N个邮件。初始时A的信箱中有x个邮件(0<x<M). B中有y个(0<y<N)。辩论者每取出一个邮件,邮件数减1.
A、B两人操作过程:
第
一、填空
1.信号量的物理意义是当信号量值大于零时表示可用资源个数;当信号量值小于零时,其绝对值为等待进程个数。
2.所谓临界区是指进程程序中。
3.用P、V操作管理临界区时,一个进程在进入临界区前应对信号量执行p操作,退出临界区时应对信号量执行v操作。
4.有m个进程共享一个临界资源。若使用信号量机制实现对临界资源的互斥访问,则该信号量取值最大为1,最小为1-m。
9、如果系统采用信箱通信方式,当进程调用Send原语被设置成“等信箱”状态时,其原因是
(23)A.指定的信箱不存在B.调用时没有设置参数
C.指定的信箱中无信件D.指定的信箱中存满了信件
10、进程P1、P2、P3和P4的前趋图如下:
若用PV操作控制这儿个进程并发执行的过程,则需要设置4个信号量S1、S2、S3和S4且信号量初值都等于零。下图中a和b应分别填写(25),c和d应分别填写(26)。
A.直接B.间接C.低级D.信号量
三、问答
1.进程A和B共享一个变量,因此在各自的程序里都有自己的临界区。现在进程A在临界区里。试问进程A的执行能够被别的进程打断吗(可以)?能够被进程B打断吗(这里,“打断”的含义是调度新进程运行,使进程A暂停执行)(不可以)?
2.信号量上的P、V操作只是对信号量的值进行加1或减1操作吗(否)?在信号量上还能够执行除P、V操作外的其他操作吗?(不能)
{ while(1)
{ p(s3);
将b中记录取出;
V(s1);
打印记录;
}
}
3.假定有3个进程R、W1、W2共享一个缓冲区B,B中每次只能存放一个数。进程R从输入设备读入一个数,把它存放到缓冲区B里。如果存入的是奇数,则由进程W1取出打印;如果存入的是偶数,则由进程W2取出打印。规定进程R只有在缓冲区B为空或内容已经被打印后才能进行存放;进程W1和W2不能从空缓冲区里取数,也不能重复打印。试用信号量及其P、V操作管理这3个进程,让它们能够协调地正确工作。
A.共享系统资源B.在执行的时间上是重叠的
C.顺序执行D.相互制约
3.若信号量S初值为2,当前值为−1,则表示有个进程在与S相关的队列上等待。
A.0B.1C.2D.3
4.用P、V操作管理相关进程的临界区时,信号量的初值应定义为。
A.−1B.0C.1D.随意
5.用V操作唤醒一个等待进程时,被唤醒进程的状态变为。
A.等待B.就绪C.运行D.完成
6.若两个并发进程相关临界区的互斥信号量MUTEX现在取值为0,则正确的描述应该是。
A.没有进程进入临界区(MUTEX=1)
B.有一个进程进入临界区(MUTEX=0)
C.有一个进程进入临界区,另一个在等待进入临界区(MUTEX=-1)
D.不定
7.信箱通信是进程间的一种通信方式。
C. V(S1) V(S2)和P(S3) P(S4)D. P(S1) V(S3)和P(S2) V(S4)
(25)A. P(S3) P(S4)和V(S5) V(S6)B. V(S5) V(S6)和P(S5) P) P(S6)D. P(S4) V(S5)和P(S5) V(S6)
Code Begin
A{
While(TRUE){
从A的信箱中取出一个邮件;
回答问题并提出一个新问题;
将新邮件放入B的信箱;
}
}
B{
While(TRUE){
从B的信箱中取出一个邮件;
回答问题并提出一个新问题;
将新邮件放入A的信箱;
}
}
Code End
当信箱不为空时,辩论者才能从信箱中取邮件,否则等待。
(25)A.P(S1)P(S2)和P(S3)B.P(S1)P(S2)和V(S1)
C.V(S1)V(S2)和P(S1)D.V(S1)V(S2)和V(S3)
(26)A.P(S1)P(S2)和P(S4)B.P(S2)P(S3)和P(S4)
C.V(Sl)V(S2)和V(S4)D.V(S2)V(S3)和V(S4)
5.对信号量S的P操作原语中,使进程进入相应信号量队列等待的条件是s<0。
6.信箱在逻辑上被分为信箱头和信箱体两部分。
7.在操作系统中进程间的通信可以分为高级通信与低级通信两种。
二、选择
1.P、V操作是。
A.两条低级进程通信原语B.两条高级进程通信原语
C.两条系统调用命令D.两条特权指令
2.进程的并发执行是指若干个进程。
解:设信号量s1=0;/*不能启动车辆*/
S2=0;/*不能开车门*/
图1司机与售票员
2.今有3个并发进程R、S、T,它们共享一个缓冲区B。进程R负责从输入设备读入信息,每读出一个记录后就把它存入缓冲区B中;进程S利用缓冲区B加工进程R存入的记录;进程T把加工完毕的记录打印输出。缓冲区B一次只能存放一个记录。只有在进程T把缓冲区里的记录输出后,才能再往里存放新的记录。试用信号量及其P、V操作控制这3个进程间的的正确工作关系。
解:设信号量:s1=1;/*缓冲区b能放一个记录*/
S2=0;/*缓冲中没有可以加工的记录*/
S3=0;/*缓冲中没有可以打印的记录*/
R()
{ while(1)
{取到一个记录;
P(s1);
将记录放入缓冲;
V(s2);
}
}
S( )
{while(1)
{ p(s2);
将b中记录加工;
V(s3);
}
}
T( )
A.不能保证进程互斥进入临界区,会出现“饥饿”现象
B.不能保证进程互斥进入临界区,不会出现“饥饿”现象
C.能保证进程互斥进入临界区,会出现“饥饿”现象
D.能保证进程互斥进入临界区,不会出现“饥饿”现象
3、有两个并发执行的进程P1和P2,共享初值为1的变量x。P1对x加1,P2对x减1。加1和减1操作的指令序列分别如下所示。【2011】
//加1操作//减1操作
load R1, x //取x的值到寄存器R1中load R2, x
inc R1 dec R2
store x,R1 //将R1的内容存入x store x,R2
两个操作完成后,x的值为()。
A.可能为-1或3B.只能为1
C.可能为0、1或2D.可能为-1、0、1或2
4、某银行提供1个服务窗口和10个供顾客等待的座位。顾客到达银行时,若有空座位,则到取号机上领取一个号,等待叫号。取号机每次仅允许一位顾客使用。当营业员空闲时,通过叫号选取一位顾客,并为其服务。顾客和营业员的活动过程描述如下。【2011】
While (flag[1]&&(turn==1));
临界区;
Flag[0]=FALSE;
}
}
Void P1 () //进程P1
{
while (TURE){
Flag[1]=TURE;turn=0;
While (flag[0]&&(turn==0));
临界区;
Flag[1]=FALSE;
}
}
则并发执行进程P0和P1时产生的情况是()。
3.进程在运行时存在哪两种形式的制约?并举例说明之。(互斥和同步)
4.同步机构应遵循哪些基本准则?为什么?(空闲让进,忙则等待,让权等待,有限等待)
5.试比较进程间的低级与高级通信工具。
6.当前有哪几种高级通信机制?
7.消息队列通信机制有哪几方面的功能?
四、计算
1.在公共汽车上,司机和售票员的工作流程如图1所示。为了确保行车安全,试用信号量及其P、V操作来协调司机和售票员的工作。
4. 如果有n个进程共享一个互斥段:
(1)如果每次只允许一个进程进入互斥段。S=1,[-1,1]
(2)如果每次最多允许m个进程同时进入互斥段(m<n)。s=m,[m-n,m]
问采用的信号量初值是否相同?信号量值的变化范围如何?
五、软考
1、三个进程P1、P2、P3互斥使用一个包含N(N>0)个单元的缓冲区。P1每次用produce()生成一个正整数并用put()送入缓冲区某一空单元中;P2每次用getodd()从该缓冲区中取出一个奇数并用countodd()统计奇数个数;P3每次用geteven()从该缓冲区中取出一个偶数并用counteven()统计偶数个数。请用信号量机制实现这三个进程的同步与互斥活动,并说明所定义的信号量的含义。要求用伪代码描述。【2009】