操作系统 PV操作习题答案

合集下载

操作系统PV操作经典一百题

操作系统PV操作经典一百题
cobegin
procedure reader_i
begin // i=1,2,?.
P(rwmutex); //读者、写者互斥
P(rmutex);
V(rwmutex); // 释放读写互斥信号量,允许其它读、写进程访问资源
读数据;
V(rmutex);
end
procedure Writer_j
我们需要分两种情况实现该问题:
读优先: 要求指一个读者试图进行读操作时,如果这时正有其他读者在进行操作,他可直接开始读操作,而不需要等待。
写优先: 一个读者试图进行读操作时,如果有其他写者在等待进行写操作或正在进行写操作,他要等待该写者完成写操作后才开始读操作。
The P,V code Using Pascal
3)写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者)
如果读者数是固定的,我们可采用下面的算法:
rwmutex:用于写者与其他读者/写者互斥的访问共享数据
rmutex: 该信号量初始值设为10,表示最多允许10个读者进程同时进行读操作
var rwmutex, rmutex : semaphore := 1, 10 ;
操作系统P V题解
第一章 The P,V Theorem
在操作系统理论中有一个非常重要的概念叫做P,V原语。在我们研究进程间的互斥的时候经常会引入这个概念,将P,V操作方法与加锁的方法相比较,来解决进程间的互斥问题。实际上,他的应用范围很广,他不但可以解决进程管理当中的互斥问题,而且我们还可以利用此方法解决进程同步与进程通信的问题。
Figure 1.1: producer-consumer problem

信号量的PV操作(例题]

信号量的PV操作(例题]

???信号量的PV操作是如何定义的?试说明信号量的PV操作的物理意义。

参考答案:P(S):将信号量S减1,若结果大于或等于0,则该进程继续执行;若结果小于0,则该进程被阻塞,并将其插入到该信号量的等待队列中,然后转去调度另一进程。

V(S):将信号量S加1,若结果大于0,则该进程继续执行;若结果小于或等于0,则从该信号量的等待队列中移出一个进程,使其从阻塞状态变为就绪状态,并插入到就绪队列中,然后返回当前进程继续执行。

PV操作的物理含义:信号量S值的大小表示某类资源的数量。

当S>0时,其值表示当前可供分配的资源数目;当S<0时,其绝对值表示S信号量的等待队列中的进程数目。

每执行一次P操作,S值减1,表示请求分配一个资源,若S≥0,表示可以为进程分配资源,即允许进程进入其临界区;若S<0,表示已没有资源可供分配,申请资源的进程被阻塞,并插入S的等待队列中,S的绝对值表示等待队列中进程的数目,此时CPU将重新进行调度。

每执行一次V操作,S值加1,表示释放一个资源,若S>0,表示等待队列为空;若S≤0,则表示等待队列中有因申请不到相应资源而被阻塞的进程,于是唤醒其中一个进程,并将其插入就绪队列。

无论以上哪种情况,执行V操作的进程都可继续运行。

1、设公共汽车上,司机和售票员的活动分别是:司机的活动:启动车辆;正常行车;到站停车;售票员的活动:关车门;售票;开车门;在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?用P、V操作实现它们的同步。

设两个信号量S和C,初值为S=0;C=0;司机: L1:正常行车售票员: L2:售票到站停车 P(S)V(S)开车门P(C)关车门启动开车 V(C)GO TO L1 GO TO L22、请用PV操作实现他们之间的同步关系:(1)桌上一个盘子,只能放一只水果。

爸爸放苹果,妈妈放桔子,儿子只吃桔子,女儿只吃苹果。

(2)桌上一个盘子,只能放一只水果。

操作系统PV操作习题

操作系统PV操作习题

操作系统PV操作习题⼀、⽤P、V操作描述前趋关系。

P1、P2、P3、P4、P5、P6为⼀组合作进程,其前趋图如图2.3所⽰,试⽤P、V 操作描述这6个进程的同步。

p23图2.3说明任务启动后P1先执⾏,当它结束后P2、P3可以开始执⾏,P2完成后P4、P5可以开始执⾏,仅当P3、P4、P5都执⾏完后,P6才能开始执⾏。

为了确保这⼀执⾏顺序,设置5个同步信号量n、摄、f3、f4、g分别表⽰进程P1、P2、P3、P4、P5是否执⾏完成,其初值均为0。

这6个进程的同步描述如下:图2.3 描述进程执⾏先后次序的前趋图int f1=0; /*表⽰进程P1是否执⾏完成*/int f2=0; /*表⽰进程P2是否执⾏完成*/int f3=0; /*表⽰进程P3是否执⾏完成*/int f4=0; /*表⽰进程P4是否执⾏完成*/int f5=0; /*表⽰进程P5是否执⾏完成*/main() {cobeginP1( );P2( );P3( );P4( );P5( );P6( );coend}P1 ( ){┇v(f1);v(f1):}P2 ( ){p(f1);┇v(f2);v(f2);)P3 ( ){p(f1);┇v(f3);}P4( ){p(f2);┇v(f4);}P5 ( ){p(f2);┇v(f5);}P6( ){p(f3);p(f4);p(f5);┇}⼆、⽣产者-消费者问题p25⽣产者-消费者问题是最著名的进程同步问题。

它描述了⼀组⽣产者向⼀组消费者提供产品,它们共享⼀个有界缓冲区,⽣产者向其中投放产品,消费者从中取得产品。

⽣产者-消费者问题是许多相互合作进程的⼀种抽象。

例如,在输⼊时,输⼊进程是⽣产者,计算进程是消费者;在输出时,计算进程是⽣产者,打印进程是消费者。

因此,该问题具有很⼤实⽤价值。

我们把⼀个长度为n的有界缓冲区(n>0)与⼀群⽣产者进程P1、P2、…、Pm和⼀群消费者进程C1、C2、…、Ck 联系起来,如图2.4所⽰。

操作系统PV操作的作业参考答案

操作系统PV操作的作业参考答案

关于调度算法【例1】下表给出作业l,2,3的提交时间和运行时间。

采用先来先服务调度算法和短作业优先调度算法,试问作业调度次序和平均周转时间各为多少?(时间单位:小时,以十进制进行计算。

)分析解这样的题关键是要根据系统采用的调度算法,弄清系统中各道作业随时间的推进情况。

我们用一个作业执行时间图来形象地表示作业的执行情况,帮助我们理解此题。

采用先来先服务调度算法,是按照作业提交的先后次序挑选作业,先进入的作业优先被挑选。

然后按照“排队买票”的办法,依次选择作业。

其作业执行时间图如下:采用短作业优先调度算法,作业调度时根据作业的运行时间,优先选择计算时间短且资源能得满足的作业。

其作业执行时间图如下:由于作业1,2,3是依次到来的,所以当开始时系统中只有作业1,于是作业1先被选中。

在8.0时刻,作业1运行完成,这时系统中有两道作业在等待调度,作业2和作业3,按照短作业优先调度算法,作业3只要运行1个时间单位,而作业2要运行4个时间单位,于是作业3被优先选中,所以作业3先运行。

待作业3运行完毕,最后运行作业2。

作业调度的次序是1,3,2。

另外,要记住以下公式:作业i的周转时间T i=作业完成时间-作业提交时间系统中个作业的平均周转时间,其中Ti为作业i的周转时间。

解:采用先来先服务调度策略,则调度次序为l、2、3。

作业号提交时间运行时间开始时间完成时间周转时间1 0.0 8.0 0.0 8.0 8.02 0.4 4.0 8.0 12.0 11.63 1.0 1.0 12.0 13.0 12.0 平均周转时间T=(8+11.6+12)/3=10.53采用短作业优先调度策略,则调度次序为l、3、2。

作业号提交时间运行时间开始时间完成时间周转时间1 0.0 8.0 0.0 8.0 8.03 1.0 1.0 8.0 9.0 8.02 0.4 4.0 9.0 13.0 12.6 平均周转时间T=(8+8+12.6)/3=9.53思考题1请同学们判断这句话:作业一旦被作业调度程序选中,即占有了CPU。

pv操作的一些习题

pv操作的一些习题
分析:本题需设置4个信号量,其中empty表示还可以向盘中放几个水果,其初值为2;apple对应已放入盘中的苹果,orange对应已放入盘中的橘子,它们的初值均为0;mutex用来实现对盘子的互斥访问,其初值为1。
Main(0
Cobegin{
Father()
{while(1)
{p(empty);
P(mutex);
1、进程P0和P1的共享变量定义及其初值为:
boolean falg[2];
int turn=0;fal[0]=FALSE; falg[1]=FALSE;
若进程P0和P1访问临界资源的类C伪代码实现如下:
则并发执行进程P0和P1时产生的情形是【全国联考2010】
A.不能保证进程互斥进入临界区、会出现“饥饿”现象
答案:设置6个信号量full1、empty1、B-M1、full2、empty2、B-M2,它们的含义和初值如下:
1)full1表示Buff1是否有数据,初值为0;
2)empty1表示Buff1有空间,初值为m;
3)B-M1表示Buff1是否可操作,初值为1;
4)Full2表示Buff2是否有数据,初值为0;
5)Empty2表示Buff2有空间,初值为n;
6)B-M2表示Buff2是否可操作,初值为1;
<PUT类进程>
{
repeat
P(empty1);/*判断Buff1是否有空间,没有则等待*/
P(B-M1);/*是否可操作Buff1*/
PUT;
V(B-M1);/*设置Buff1可操作标志*/
V(full1);/*设置Buff1有数据的标志*/
GET;
V(B-M2);/*设置Buff2可操作标志*/

操作系统 信号量机制P、V操作习题全解

操作系统 信号量机制P、V操作习题全解
• 要求说明每个信号量是用于解决什么互斥、 什么同步关系的。
Get

Copy
Put
A
B
卡片机
buffer1
C
D
buffer2
打印机
• 2. 互斥信号量 s1=1, s2=1; • (因为只有一个get、copy和put进程,故可不定
义互斥信号量) • 同步信号量4个: • full1=0, empty1=1; 为一对 • full2=0, empty2=1; 为一对
• 两个同步关系: • 有顾客营业员才叫号s1=0 • 营业员先叫号,顾客才能被服务service
=0
• Process 顾客 i:
• { P (empty);
• P(mutex);
• 从取号机获取一个号码;
• V(mutex);
• V(s1);
• P(service); //等待叫号;
• V (empty); • 获得服务; •}
Agent() int rr, rr1=4; while (1) { do
rr = random (3); while (rr == rr1);
rr1=rr; wait (done); if (rr == 0) {
put paper and tobacco; signal (PaperTobacco ); } else if (rr == 1) {
put match and tobacco; signal (MatchTabacco);
}
else { put paper and match; signal (PaperMatch);
} Smaker1 () /* has match */ while(1) { wait (PaperTobacco);

OS7(PV习题)

OS7(PV习题)
分析: 分析: 本题中,爸爸、儿子、女儿共用一个盘子,盘中一次只能放一个水果。 本题中,爸爸、儿子、女儿共用一个盘子,盘中一次只能放一个水果。 当盘子为空时,爸爸可将一个水果放入果盘中。 当盘子为空时,爸爸可将一个水果放入果盘中。 若放入果盘中的是桔子,则允许儿子吃,女儿必须等待; 若放入果盘中的是桔子,则允许儿子吃,女儿必须等待; 若放入果盘中的是苹果,则允许女儿吃,儿子必须等待。 若放入果盘中的是苹果,则允许女儿吃,儿子必须等待。 本题实际上是生产者-消费者问题的一种变形: 本题实际上是生产者-消费者问题的一种变形: 这里,生产者放入缓冲区的产品有两类,消费者也有两类, 这里,生产者放入缓冲区的产品有两类,消费者也有两类,每类消费者 只消费其中固定的一类产品
Operating System
6
Lifang ©2011
设置三个信号量:S、So、Sa, 设置三个信号量:S、So、Sa, :S
S:表示盘子是否为空,其初值为l; 表示盘子是否为空,其初值为l So:表示盘中是否有桔子,其初值为0 So:表示盘中是否有桔子,其初值为0; Sa:表示盘中是否有苹果,其初值为0 Sa:表示盘中是否有苹果,其初值为0。 Son进程: Son进程: 进程 while(1) { P(So); 从盘中取出桔子; 从盘中取出桔子; V(S); 吃桔子; 吃桔子; } Daughter进程: Daughter进程: 进程 while(1) { P(Sa); 从盘中取出苹果; 从盘中取出苹果; V(S); 吃苹果; 吃苹果; }
乘务员进程: 乘务员进程: Begin Repeat 关门; 关门; V(S_Door); V(S_Door); 售票; 售票; P(S_Stop); P(S_Stop); 开门; 开门; false; Until false; End

操作系统PV操作经典例题与答案

操作系统PV操作经典例题与答案

操作系统PV操作经典例题与答案1. 推广例子中的消息缓冲问题。

消息缓冲区为k个,有1个发送进程,n个接收进程,每个接收进程对发送来的消息都必须取一次若有m个发送进程呢?Send:SB=k; //信号量,标记当前空余缓冲区资源。

i = 0; //标记存放消息的缓冲区位置while (true) {P(SB);往Buffer [i]放消息;V(SM);i = (i+1) % k;};Receive:j = 0; //标记取产品的缓存区位置SM=0;//信号量,标记初始没有消息ReadCount=0;//读进程计数器Mutex =1;//读进程互斥信号量SW=0; //信号量,读进程在此信号量等待while (true) {P(SM);从Buffer[j]取消息;ReadCount++If(ReadCount<n){< p="">V(SM);P(SW)}else{V(SB);j = (j+1) % k;for(int g=1; g< ReadCount;g++)V(SW);ReadCount=0;}};2.第二类读者写者问题:写者优先条件:1)多个读者可以同时进行读2)写者必须互斥(只允许一个写者写,也不能读者写者同时进行)3)写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者)rc=0, //正在读者计数器wc, //写计数器rw, //读等计数器R //等待读信号量W //等待写信号量读者:while (true) {P(mutex);if (wc >0){rw++P (R);}rc++;If(rw>0&&wc=0){V(R)rw--}V(mutex);读P(mutex);rc --;if (rc==0){If(wc>0)V(w)}V(mutex);};写者:while (true) {P(mutex);wc ++;if((wc >1)||(rc>0)){P(W)}V(mutex);写P(mutex);Wc --;if(wc>0)V(W);Else if(rw>0)V(R)rw--V(mutex);};3.理发师睡觉问题理发店里有一位理发师,一把理发椅和N把供等候理发的顾客坐的椅子如果没有顾客,则理发师便在理发椅上睡觉。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

4有三个并发进程,R负责从输入设备读入信息并传送给M,M将信息加工并传送给P,P将打印输出,写出下列条件下的并发程序:
单缓冲区,
缓冲区信号量初值mutex1=1; mutex2=1;
buffeR-M // R 和M之间的buf
bufferM_P // M 和P之间的buf
另外R 自己的缓存区data_buf1,
另外M 自己的缓存区data_buf2,
另外P 自己的缓存区data_buf3,
Procedure R:
begin
while true do
data_buf1 = 读入数据
P(mutex1);
buffeR-M = data_buf1;
V(mutex1);
end
end;
Procedure M:
begin
while true do
P(mutex2);
P(mutex1);
Data_buf2 = bufferR_M;
处理Data_buf2;
BufferM_P = data_buf2
V(mutex1);
V(mutex2);
end
end;
Procedure P:
begin
while true do
P(mutex2);
Data_buf3:= BufferM_P;
V(mutex2);
V(empty);
打印输出数据
end
end;
双缓冲区,
缓冲区信号量初值mutex1=1; mutex2=1; Empty1 = 2, full1 = 0; empty2=2, full2=0; buffeR-M[2] // R 和M之间的buf,有两个bufferM_P[2] // M 和P之间的buf 有两个另外R 自己有缓存区data_buf1,
另外M 自己有缓存区data_buf2,
另外P 自己有缓存区data_buf3,
var:i,j,k,n
Procedure R:
begin
while true do
data_buf1 = 读入数据
P(empty1)
P(mutex1);
buffeR-M[i] = data_buf1;
i=(i+1)mod 2;
V(mutex1);
V(full1)
end
end;
Procedure M:
begin
while true do
P(full1);
P(mutex1);
Data_buf2 = bufferR_M[j];
j=(j+1) mod 2
V(mutex1);
P(empty1);
处理Data_buf2;
P(empty2);
P(mutex2)
BufferM_P[k] = data_buf2;
k=(k+1) mod 2
V(mutex2);
V(full2);
end
end;
Procedure P:
begin
while true do
P(full2);
P(mutex2);
Data_buf3:= BufferM_P[n];
n=(n+1) mod 2
V(mutex2);
V(empty2);
打印输出数据
end
end;
设有三个进程A、B、C,其中A与B构成一对生产者与消费者(A为生产者,B为消费者),共享一个由n个缓冲块组成的缓冲池;B与C也构成一对生产者与消费者(此时B为生产者,C为消费者),共享另一个由m个缓冲块组成的缓冲池。

用PV操作描述它们之间的同步关系。

var mutex1,empty1,full1,mutex2,empty2,full2:psemaphore;//两个缓冲池编号1,2
//初值empty1=n,full1=0,empty2=m,full2=0 var i1,j1, goods1,j2,j2, goods2:integer;
buffer1: array[0…n-1] of item;
buffer2: array[0…m-1] of item;
procedure A;
begin
while true do
begin
produce next product;
P(empty1);
P(mutex1);
buffer1(i1):=product;
i1:=(i1+1)mod(n);
V(mutex1);
V(full1);
end
end;
procedure B;
begin
while true do
P(full1);
P(mutex1);
goods1:=buffer1(j1);
j1:=(j1)mod(n);
V(mutex1);
V(empty1);
处理goods1;
P(empty2);
P(mutex2);
buffer2(i2):=product;
i2:=(i2+1)mod(m);
V(mutex2);
V(full2);
end
end;
procedure C;
begin
while true do
P(full2);
P(mutex2);
goods2:=buffer2(j2);
j2:=(j2+1)mod(m);
V(mutex2);
V(empty2);
end
end;
思考.用P.V操作解决司机与售票员的问题初值: Door=0; Stop=0;
司机进程:
while(true){
P(Door);
启动车辆
正常驾驶
到站停车
V(Stop);
}
售票员进程:
While(true){
关门
V(Door);
售票
P(Stop);
开门
}。

相关文档
最新文档