当盘子为空时,爸爸可将一个水果放入果盘中。若放入果盘中的是桔子,则允许儿子吃,女儿必须等待;若放入果盘中的是苹果,则允许女儿吃,儿子必须等待。本题实际上是生产者-消费者问题的一种变形。这里,生产者放入缓冲区的产品有两类,消费者也有两类,每类消费者只消费其中固定的一类产品。 解:在本题中,应设置三个信号量S、So、Sa,信号量S表示盘子是否为空,其初值为l;信号量So表示盘中是否有桔子,其初值为0;信号量Sa表示盘中是否有苹果,其初值为0。同步描述如下: int S=1; int Sa=0; int So=0; main() {
cobegin
father(); /*父亲进程*/ son(); /*儿子进程*/ daughter(); /*女儿进程*/ coend } father() {
while(1) { P(S);
将水果放入盘中;
if(放入的是桔子)V(So); else V(Sa); } } son() {
while(1) {
P(So);
从盘中取出桔子; V(S); 吃桔子; } }
daughter() {
while(1) {
P(Sa);
从盘中取出苹果
V(S); 吃苹果; }
}
第二部分 进程管理(5)
? 四个进程A、B、C、D都要读一个共享文件F,系统允许多个进程同时读文件F,但限制是:进程A和进程C不能同时读文件F,进程B和进程D也不能同时读文件F。 请回答下面的问题: (1)应定义的信号量及初值: (2)试采用适当的P、V操作来完成各进程对文件的读操作,以保证它们能正确并发工作:
A() B() C() D() { { { {
[1]; [3]; [5]; [7];
read F; read F; read F; read F; [2]; [4]; [6]; [8]; } } } } 思考题解答:
(1)定义二个信号量S1、S2,初值均为1,即:S1=1,S2=1。其中进程A和C使用信号量S1,进程B和D使用信号量S2。
(2)从[1]到[8]分别为:P(S1) V(S1) P(S2) V(S2) P(S1) V(S1) P(S2) V(S2)
第二部分 进程管理(6)
? 用P、V操作解决下图之同步问题:一组get进程负责往缓冲池S中输入数据, 一组put进程负责从缓冲池S中取出数据用于处理(设缓冲池中有缓冲区N个)。
第二部分 进程管理(7)
? 如图所示,四个进程和四个信箱 ,进程间借助相邻信箱传递消息,即Pi每次从Mi中取一条消息,经加工后送入Mi+1 ,其中Mi(i=0~3)分别可存放3,3,2,2个消息。初始状态下,M0装了3条消息,其余为空。试以P、V操作为工具,写出 Pi (i=0~3)的同步工作算法。
答:
同步信号量:SM[i](i=0~3),信箱Mi中的消息数目,初值分别为3,0,0,0 TM[i](i=0~3),信箱Mi中还可容纳的消息数目,初值分别为0,3,2,2 互斥信号量:Mutex[i](i=0~3),
临界资源信箱Mi,初值分别为1,1,1,1 P[i] (i=0~3): P(SM[i]); P(Mutex[i]);
从信箱M[i]中取消息; V(Mutex[i]); V(TM[i]); 加工;
P(TM[(i+1)mod 4]); P(Mutex[(i+1)mod 4]);
放入信箱M[(i+1)mod 4]中; V(Mutex[(i+1)mod 4]); V(SM[(i+1)mod 4]); 第二部分 进程管理(8)
? 动物园的饲养员喂黑熊,饲养员苹果到盆中,黑熊从盆中抓走苹果吃掉,盆中只能放一个苹果。分别用饲养员进程、黑熊进程模拟饲养员喂黑熊的过程,请用P、V操作(即wait和signal)利用信号量机制实现这两个进程同步 (提示:进程饲养员、黑熊互斥使用盆,饲养员要用空盆,黑熊要吃盆中的苹果) 解
设置三个信号量:互斥信号量S=1—盆、S1=1—空间、S2=0—苹果 饲养员 黑熊 P(S1) P(S2) P(S) P(S)
〈放〉 〈取〉 V(S) V(S) V(S2) V(S1) 第二部分 进程管理(9)
设有一台计算机,有两条I/O通道,分别接一台卡片输入机和一台打印机。卡片机把一叠卡片逐一输入到缓冲区B1中,加工处理后再搬到缓冲区B2中,并在打印机上印出,问:
(1)系统要设几个进程来完成这个任务?各自的工作是什么? (2)这些进程间有什么样的相互制约关系? (3)用P、V操作写出这些进程的同步算法。
答:①系统可设三个进程来完成这个任务:R进程负责从卡片输入机上读入卡片信息,输入到缓冲区B1中;C进程负责从缓冲区B1中取出信息,进行加工处理,之后将结果送到缓冲区B2中;P进程负责从缓冲区B2中取出信息,并在打印机上印出。
②R进程受C进程影响,B1放满信息后R进程要等待——等C进程将其中信息全部取走,才能继续读入信息;C进程受R进程和P进程的约束:B1中信息放满后C进程才可从中取出它们,且B2被取空后C进程才可将加工结果送入其中;P进程受C进程的约束:B2中信息放满后P进程才可从中取出它们,进行打印。
第二部分 进程管理(10)
有两个优先级相同的进程P1和P2,各自执行的操作如右,信号量S1和S2初值均为0。
试问P1、P2并发执行后,x、y、z的值各为多少? P1: P2: begin begin
y:=1; x:=1;
y:=y+3 //y=4; x:=x+5; //x=6 V(S1); P(S1);
z:=y+1 //z= 5; x:=x+y;//x=10 P(S2); V(S2); y:=z+y z:=z+x;
end. end. 10 ,9 ,15 x=10,y=19,z=15 ; 10,9,5 第二部分 进程管理(11) 有一个阅览室,读者进入时必须先在一张登记表上进行登记,该表为每一座位列
一表
目,包括座号和读者姓名,读者离开时,要删掉登记的信息,阅览室共有100个座试 问:(1)为描写读者动作,应编写几个程序,应设置几个进程?进程与程序间关系如何?(2)试用P、V操作写出这些进程间的同步算法。 答:(1) 应编写1个程序;设置2个进程; 进程与程序间的对应关系是:多对1。
(2) begin 信号量S1:=100 (有100个座位) 信号量S2:=0 (阅读者) 信号量S: =1 cobegin P1: repeat P(S1); P(S); 登记信息; V(S); V(S2) 就座,阅读; until false coend end
第二部分 进程管理(12)
动物园的饲养员喂黑熊,饲养员苹果到盆中,黑熊从盆中抓走苹果吃掉,盆中只能放一个苹果。分别用饲养员进程、黑熊进程模拟饲养员喂黑熊的过程,请用P、V操作(即wait和signal)利用信号量机制实现这两个进程同步 解:
设置三个信号量:互斥信号量S=1—盆、S1=1—空间、S2=0—苹果 饲养员 黑熊 P(S1) P(S2) P(S) P(S) 〈放〉 〈取〉 V(S) V(S) V(S2) V(S1) 第二部分 进程管理(13)
设公共汽车上有一位司机和一位售票员,它们的活动如下,请分析司机与售票员之间的同步关系,如何用PV操作实现。 司机 售票员: 启动车辆 正常行车 到站停车 售票 开车门 关车门