计算机操作系统PV操作例题

合集下载

操作系统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原语例题

pv原语例题
(原创实用版)
目录
1.PV 原语的概念
2.PV 原语的例子
3.PV 原语的例题解析
正文
1.PV 原语的概念
PV 原语(PV 操作)是计算机科学中一种用于实现并发控制的原子操作。

PV 原语全称为 Procedure Call,是进程调用另一种进程所提供的服务。

PV 原语广泛应用于操作系统、数据库和网络系统等领域,以实现多进程或多线程之间的同步与互斥。

2.PV 原语的例子
PV 原语有很多实现方式,下面举一个简单的例子来说明 PV 原语的基本概念。

假设有两个进程 P1 和 P2,它们需要共享一个整数变量 count。

为了保证数据的一致性,当 P1 进程修改 count 的值时,需要确保 P2 进程不能同时修改 count。

可以使用 PV 原语来实现这一需求。

P1 进程:
```
int count = 0;
PV(P2_count); // 调用 P2 进程提供的 PV 操作
count++;
V(P2_count); // 释放 P2 进程的 PV 操作
```
P2 进程:
```
int count = 0;
PV(P1_count); // 调用 P1 进程提供的 PV 操作
count++;
V(P1_count); // 释放 P1 进程的 PV 操作
```
3.PV 原语的例题解析
假设有一个系统,需要实现生产者 - 消费者问题。

生产者进程负责生产产品,消费者进程负责消费产品。

为了避免竞争条件和死锁,可以使用 PV 原语来实现生产者和消费者之间的同步与互斥。

操作系统 PV操作习题答案

操作系统 PV操作习题答案

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

第11课PV操作练习

第11课PV操作练习

P(S1); 将缓冲区R中记 从T中取出记录 录拷贝到缓冲区 放入文件G中; T中; V(S2);
此种解法是否正确: GET: P(S1); 从文件F取记录 放入缓冲区R中; V(S2); COPY: P(S2); 将缓冲区R中记 录拷贝到缓冲区 T中; V(S3); PUT: P(S3); 从T中取出记录 放入文件G中; V(S1);
P145 GET: P(S2); 从文件F取记录 放入缓冲区R中; V(S1); COPY: PUT:
信号量S1,S2 初始值S1=0;S2=0
P(S1); 将缓冲区R中记 从T中取出记录 录拷贝到缓冲区 放入文件G中; T中; V(S2);
此种解法是否正确: GET: P(S1); 从文件F取记录 放入缓冲区R中; V(S2); COPY: P(S2); 将缓冲区R中记 录拷贝到缓冲区 T中; V(S3); PUT: P(S3); 从T中取出记录 放入文件G中; V(S1);
课堂练习

独木桥问题。某条河上只有一座独木桥, 以便行人过桥,现在河的两边都有人要过 桥,按照下面的规则过桥,为了保证过桥 安全,请用P,V操作分别实现正确的管理。 过桥的规则: 每次只允许一个人过桥
课堂练习

独木桥问题。某条河上只有一座独木桥, 以便行人过桥,现在河的两边都有人要过 桥,按照下面的规则过桥,为了保证过桥 安全,请用P,V操作分别实现正确的管理。 过桥的规则: 同一方向的可连续过桥,某方向有人过桥 时另一方向的人要等待。
课堂练习

独木桥问题。某条河上只有一座独木桥, 以便行人过桥,现在河的两边都有人要过 桥,按照下面的规则过桥,为了保证过桥 安全,请用P,V操作分别实现正确的管理。 过桥的规则: 当独木桥上有自东向西的行人时,同方向 的行人可以同时过桥,从西向东的方向, 只允许一个人单独过桥。

操作系统PV例题讲解

操作系统PV例题讲解
从等待队列队尾取一个进程唤醒, 插入就绪队列
问题:(实现 4 个进程使用某一个需互斥使用的资源) 1)这样定义 P、V 操作是否有问题?
不合理:先进后出;可能“无限等待”
2)先考虑用这样的 P、V 操作实现 N 个进程竞争使用某一共享变量的互斥机制。 思路:令等待队列中始终只有一个进程。 将 “栈” 变成 “队列”
IF fork [i]=used THEN test_and_pick_up=false
ELSE BEGIN fork [i]:=used; test_and_pick_up:=true END
END;
PROCEDURE put_down(i:0..4); BEGIN fork [i]=free; signal (queue [i]); END;
Then V(buff[j].empty); V(buff[j].mutex); j:=(j+1) mod k Until false; End
37.对 PV 操作定义做如下修改
P(s):
s:=s-1;
If s<0
Then 将本进程插入相应队列末尾等待;
V(s):
s:=s+1; If s<=0 Then
} }
消费者: Void consumer (void); {
int item, I;
Message m; For (i=0;i<N; i++) send (producer, &m); While (TRUE){
Receive ( producer ,&m); Extract_item( &m, &item); Send (producer ,&m); Consumer_item(item); } }

操作系统PV操作习题

操作系统PV操作习题

操作系统PV操作习题操作系统PV操作习题-----------------------------------------------------1、引言在操作系统中,PV操作(也称作P操作和V操作)是用于进程同步的一种常见机制。

P操作用于获取或申请资源,V操作用于释放资源。

本文将为您提供一些关于PV操作的习题,以帮助您巩固相关的概念和原理。

2、PV操作基本概念2.1 P操作描述P操作的基本概念和含义,以及在实际应用中的具体场景。

2.2 V操作解释V操作的基本概念和含义,并举例说明其在实际问题中的应用。

3、PV操作习题集3.1 习题一、生产者-消费者问题描述一个典型的生产者-消费者问题,并通过使用P操作和V操作对其进行解决。

3.2 习题二、读者-写者问题解释一个典型的读者-写者问题,并使用PV操作来实现对该问题的解决。

3.3 习题三、哲学家就餐问题描述哲学家就餐问题的场景,并说明如何采用PV操作来解决这一问题。

4、常见PV操作错误4.1 死锁解释什么是死锁以及为什么会发生死锁现象,同时提供一些避免死锁的方法。

4.2 饥饿描述什么是饥饿,以及一些可能导致饥饿的常见原因,并提供解决饥饿问题的一些策略。

5、附录本文档附带以下附件:- 习题的解答和详细说明- 相关的代码示例6、法律名词及注释在本文档中,涉及的法律名词及其注释如下:- PV操作:即P操作和V操作,用于进程同步的一种机制。

- 生产者-消费者问题:一种经典的并发控制问题,涉及到生产者和消费者之间的资源竞争。

- 读者-写者问题:一种并发控制问题,涉及到多个读者和写者对共享资源的访问。

- 哲学家就餐问题:一种经典的并发控制问题,涉及到多个哲学家通过共享的餐具进行就餐。

例题以及习题pv操作3

例题以及习题pv操作3

【实战3】理发师问题理发店有一位理发师、一把理发椅及三把供等候理发的顾客坐的椅子。

如果没有顾客,理发师就去睡觉。

如果顾客来时所有的椅子都有人,那么顾客就离去。

如果理发师在忙而有空闲的椅子,那么顾客就会坐在其中的一个空闲的椅子上。

如果理发师在睡觉,顾客会唤醒他。

请利用信号量(semaphores),写个程序来协调理发师和顾客进程。

【浙江大学2007】int count=0;//记录理发店里的顾客数量semaphore mutex=1;//用于互斥访问count变量所用的信号量semaphore barber_chair=0;//semaphore wait_chair=3;//顾客等待时可坐的椅子semaphore ready=0;//坐在等候椅子上等待理发的顾客数量Barber(){//理发师进程while(1){wait(ready);//是否有顾客在等待理发,没有则阻塞signal(barber_chair);//请等待时间最长的顾客坐到理发椅上signal(wait_chair);//坐到理发椅上的顾客让出一个等待时可坐的椅子barbering//给顾客理发}}Customer(){//顾客进程i{wait(mutex);if(count>=4){//如果理发店已经有四个顾客了signal(mutex);leave //走人}else{//理发店里顾客不足4个count++;//更新顾客人数signal(mutex);}wait(wait_chair);//先请求坐等待时坐的椅子signal(ready);//告诉理发师又有一位顾客准好了,等待理发wait(barber_chair);//再请求坐理发椅be barberedwait(mutex);count--;//更新店里的顾客人数signal(mutex);}}【练习1】 如图所示,有多个PUT 操作同时向BUFF1放数据,有一个MOVE 操作不断地将BUFF1的数据移到BUFF2,有多个GET 操作不断地从BUFF2中将数据取走。

PV操作例题

PV操作例题

PV操作例题问题1一个司机与售票员的例子在公共汽车上,为保证乘客的安全,司机和售票员应协调工作:停放后就可以进门,第一关车门后就可以行车。

用pv操作方式去同时实现他们之间的协同。

s1:与否容许司机启动汽车的变量s2:与否容许售票员进门的变量driver()//司机进程{while(1)//不停地循环{p(s1);//命令启动汽车启动汽车;正常行车;至东站停放;v(s2);//释放开门变量,相当于通知售票员可以开门}}busman()//售票员进程{while(1){第一关车门;v(s1);//释放开车变量,相当于通知司机可以开车售票p(s2);//命令进门驾车门;上下乘客;}}注意:busman()driver()两个不停循环的函数问题2图书馆存有100个座位,每位步入图书馆的读者必须在登记表上备案,选择退出时必须在登记表上冻结。

必须几个程序?存有多少个进程?(请问:一个程序;为每个读者设立一个进程)(1)当图书馆中没有座位时,后到的读者在图书馆为等待(阻塞)(2)当图书馆中没有座位时,后到的读者不等待,立即回家。

求解(1)设信号量:s=100;mutex=1p(s)p(mutex)备案v(mutex)写作p(mutex)注销v(mutex)v(s)求解(2)设整型变量count=100;信号量:mutex=1;p(mutex);if(count==0){v(mutex);return;} count=count-1;备案v(mutex);阅读p(mutex);count=count+1;v(mutex);return;问题3存有一座东西方向的独木桥;用p,v操作方式同时实现:(1)每次只容许一个人过桥;(2)当独木桥上有行人时,同方向的行人可以同时过桥,相反方向的人必须等待。

(3)当独木桥上有自东向西的行人时,同方向的行人可以同时过桥,从西向东的方向,只允许一个人单独过桥。

(此问题和读者与写者问题相同,东向西的为读者,西向东的为写者)。

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

问题1 一个司机与售票员的例子 在公共汽车上,为保证乘客的安全,司机和售票员应协调工作: 停车后才能开门,关车门后才能行车。用PV操作来实现他们之间的协调。 S1:是否允许司机启动汽车的变量 S2:是否允许售票员开门的变量 driver()//司机进程 { while (1)//不停地循环 { P(S1);//请求启动汽车 启动汽车; 正常行车; 到站停车; V(S2); //释放开门变量,相当于通知售票员可以开门 } } busman()//售票员进程 { while(1) { 关车门; V(S1);//释放开车变量,相当于通知司机可以开车 售票 P(S2);//请求开门 开车门; 上下乘客; } } 注意:busman() driver() 两个不停循环的函数

问题2 图书馆有100个座位,每位进入图书馆的读者要在登记表上登记,退出时要在登记表上注销。要几个程序?有多少个进程?(答:一个程序;为每个读者设一个进程)

(1) 当图书馆中没有座位时,后到的读者在图书馆为等待(阻塞) (2) 当图书馆中没有座位时,后到的读者不等待,立即回家。

解(1 ) 设信号量:S=100; MUTEX=1 P(S) P(MUTEX) 登记 V(MUTEX) 阅读 P(MUTEX) 注销 V(MUTEX) V(S)

解(2) 设整型变量 COUNT=100; 信号量:MUTEX=1; P(MUTEX); IF (COUNT==0) { V(MUTEX); RETURN; } COUNT=COUNT-1; 登记 V(MUTEX); 阅读 P(MUTEX); COUNT=COUNT+1; V(MUTEX); RETURN; 问题3 有一座东西方向的独木桥;用P,V操作实现: (1) 每次只允许一个人过桥; (2) 当独木桥上有行人时,同方向的行人可以同时过桥,相反方向的人必须等待。 (3) 当独木桥上有自东向西的行人时,同方向的行人可以同时过桥,从西向东的方向,只允许一个人单独过桥。(此问题和读者与写者问题相同,东向西的为读者,西向东的为写者)。 (1)解 设信号量 MUTEX=1 P (MUTEX) 过桥 V (MUTEX) (2)解 设信号量: MUTEX=1 (东西方互斥) MD=1 (东向西使用计数变量互斥) MX=1 (西向东使用计数变量互斥) 设整型变量: CD=0 (东向西的已上桥人数) CX=0 (西向东的已上桥人数)

从东向西: P (MD) IF (CD=0) {P (MUTEX) } CD=CD+1 V (MD) 过桥 P (MD) CD=CD-1 IF (CD=0) {V (MUTEX) } V (MD) 从西向东: P (MX) IF (CX=0) {P (MUTEX) } CX=CX+1 V (MX) 过桥 P (MX) CX=CX-1 IF (CX=0) {V (MUTEX) } V (MX)

(3) 解:从东向西的,和(2)相同;从西向东的和(1)相同。

问题4 有一个俱乐部,有甲乙两个服务员,当顾客有请求时,甲负责送烟,乙负责送火,无顾客请求时,服务员睡眠。顾客自己不能带烟和火,当顾客要抽烟时,可请求服务员送烟和火,烟和火还未送到时,顾客必须等待。 设信号量:SY, SH,CY,CH:初值都为0

甲服务员 REPEAT P(SY) 送烟 V(CY) UNTIL FALSE 乙服务员 REPEAT P(SH) 送火 V(CH) UNTIL FALSE 顾客 V(SY) V(SH) P(CY) P(CH) 抽烟

问题5一家四人父、母、儿子、女儿围桌而坐;桌上有一个水果盘; (1) 当水果盘空时,父亲可以放香蕉或者母亲可以放苹果,但盘中已有水果时,就不能放,父母等待。当盘中有香蕉时,女儿可吃香蕉,否则,女儿等待;当盘中有苹果时,儿子可吃,否则,儿子等待。 解 设信号量:SE=1 (空盘子);SA=0 (放了苹果的盘子);SB=0 (放了香蕉的盘子)

父亲 REPEAT 剥香蕉 P(SE) 放香蕉 V(SB) UNTIL FALSE 母亲 REPEAT 削苹果 P(SE) 放苹果 V(SA) UNTIL FALSE 儿子 P(SA) 拿苹果 V(SE) 吃苹果

女儿 P(SB) 拿香蕉 V(SE) 吃香蕉

(2) 把(1)改为:儿子要吃苹果时,请母亲放苹果,女儿要吃香蕉时,请父亲放香蕉,(还是盘子为空时才可以放)。

(2)解:再增加两个信号量:SF=0, SM=0

父亲 REPEAT P(SF) 剥香蕉 P(SE) 放香蕉 V(SB) UNTIL FALSE 母亲 REPEAT P(SM) 削苹果 P(SE) 放苹果 V(SA) UNTIL FALSE 儿子 V(SM) P(SA) 拿苹果 V(SE) 吃苹果

女儿 V(SF) P(SB) 拿香蕉 V(SE) 吃香蕉

问题6有一个超市,最多可容纳N个人进入购物,当N个顾客满员时,后到的顾客在超市外等待;超市中只有一个收银员。可以把顾客和收银员看作两类进程,两类进程间存在同步关系。写出用P;V操作实现的两类进程的算法(2003年系统设计员考试的题目) 解:设信号量:S=0,C=0 (顾客与收银员的同步信号量),M=N

收银员 P(S) 收银 V(C)

顾客 P(M) 进入店内购物 V(S) P(C) V(M)

问题7有一个理发店,店内共有20个座位供顾客等待理发,(进入理发店的顾客,都在此座位上等待理发,正在理发的顾客不占用此座位),当20个座位坐满了,后到的顾客不等待,立即回家。当没有顾客时,理发师睡眠等待。

解:设信号量:S=0.C=0,MUTEX=1 设整型变量 SM=20

理发师 REPEAT P(S) -------如无顾客,理发师等待 V(C) 叫一个顾客理发 理发 UNTIL FALSE

顾客 P(MUTEX) IF (SM=0) { V(MUTEX)――――满座,离开,回家 RETURN ELSE SM=SM-1―――――空座位数减 1 V(MUTEX) } V(S)――――――――通知理发师,增加了一个顾客,如理发师在等待则唤醒他 P(C) ———————等理发师叫自己理发 P(MUTEX) SM=SM+1―――――被叫到,释放一个空的座位 V(MUTEX) 接受理发 如果此题改为:满座时,顾客等待空座位:则 顾客进程的程序修改如下: 把SM设为信号量 SM=20 顾客 P(SM) ---------------------申请一个座位,无则等待 V(S)――――――――通知理发师,增加了一个顾客,如理发师在等待则唤醒他 P(C) ———————等理发师叫自己理发 V(SM) 接受理发 问题8一个盒子,内有黑白两种棋子(数量相等),甲每次从盒子中取出一颗黑子,乙每次从盒子中取出一颗白子,一人取了棋子后,必须等另一方取过棋子方可再取,(可假设甲先取)。 解: 设信号量:SJ=1,SY=0

甲 REPEAT P(SJ) 取一颗黑子 V(SY) UNTIL 盒子中无黑子 乙 REPEAT P(SY) 取一颗白子 V(SJ) UNTIL 盒子中无白子

(八)按要求完成下面的程序。设有三个进程,input进程、compute进程和output进程;它们通过共享一个缓冲区buf的合作关系如下: (1)input进程每次输入数据后,把数据送到buf,供compute进程计算和output进程打印; (2)comput进程每次从buf取出已输入的可计算的数据进行计算,并当output进程把输入数据打印完成后,把计算结果送入buf供output进程打印; (3)output进程每次按顺序把buf中的输入数据和计算结果在打印机上输出。 解: 设信号量:sa=1,sb=sc=sd=0, 请把能正确实现这三个进程同步关系的P、V 操作的语句填入下面的程序。 procedure input begin local data repeat get(data); p(sa); buf=data; (1) V ( sc ) v(sb); until false end; procedure compute begin locol data repeat (2) P ( sb ) data=buf; 计算data并把结果保存在data; (3) P ( sd ) buf=data;

相关文档
最新文档