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

合集下载

信号量机制例题集2

信号量机制例题集2

爸爸,妈妈,儿子,女儿
Var mutex,apple,banana:Semaphore:=1,0,0;son() Main() { while (true) { cobegin { p(banana);从盘子取香蕉; v(mutex); Father();mother();son();daugher(); 吃香蕉;} Coend } } Father() { while (true) {p(mutex); 将苹果放入盘子;v(apple);} daugher() { while (true) } { p(apple);从盘子取苹果; v(mutex); Mother() 吃苹果;} { while (true) } { p(mutex);将香蕉放入盘子;v(banana);} } 返回
Use() { while(true) { p (full) ;
p(count) ; P(mutex2) ;
从缸中取水;
v (mutex2) ; v(empty) ; v (count) ;
} } 返回
信号量机制例题:理发师
• 理发店里有一位理发师,一把理发椅,n把 侯等待理发的顾客坐的椅子。如果没有顾 客,理发师便在理发椅上睡觉,当一个顾 客到来时,他必须叫醒理发师。如果理发 师正在理发时又有顾客来到,那么,如果 又有空椅子可坐,顾客就坐下等待,否则 就离开理发店。
Else { p(sb); p(mutex); 将产品入库; v(mutex); v(sa);
返回
信号量机制例题:阅览室
有一个阅览室,共有100个座位,读者进入 时必须在一张登记表上登记,该表为每一座 位列一表目,包括做好和读者姓名等,读者 离开时要削掉登记的信息。
阅览室
Semaphore mutex=1;seats=100;readers=0 getin() { while(true) { p(seats); p(mutex); 填写登记表; 进入阅览室读书; v(mutex); v(readers); } }

操作系统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操作是指进程同步的一种经典方法,用于解决进程之间的互斥和同步问题。

在解题时,可以按照以下思路进行分析和回答:1. 什么是PV操作?PV操作是指通过对信号量进行P(Proberen)和V(Verhogen)操作来实现进程同步。

P操作用于申请资源,如果资源不可用,则进程进入等待状态;V操作用于释放资源,让等待的进程得以继续执行。

2. PV操作的作用是什么?PV操作用于解决进程之间的互斥和同步问题。

互斥是指同一时间只允许一个进程访问临界资源,而同步是指进程之间按照一定的顺序执行,避免出现竞态条件和死锁等问题。

3. PV操作的原理是什么?PV操作基于信号量(Semaphore)的概念。

信号量是一个计数器,用于控制对共享资源的访问。

P操作会将信号量的值减1,如果结果小于0,则进程进入等待状态;V操作会将信号量的值加1,如果结果小于等于0,则唤醒等待的进程。

4. PV操作的应用场景有哪些?PV操作常用于解决生产者-消费者问题、读者-写者问题、哲学家就餐问题等。

在这些场景中,通过合理使用PV操作可以实现进程之间的协调与同步,避免资源竞争和死锁。

5. PV操作有哪些特点和优势?PV操作具有以下特点和优势:互斥性,PV操作可以确保同一时间只有一个进程访问共享资源,避免数据的不一致性。

同步性,PV操作可以按照一定的顺序执行进程,避免竞态条件和死锁。

简单高效,PV操作是一种经典的进程同步方法,实现简单,高效可靠。

适用性广泛,PV操作可以应用于各种并发场景,解决不同类型的进程同步问题。

总结:PV操作是一种经典的进程同步方法,通过对信号量进行P和V 操作来实现互斥和同步。

它的应用场景广泛,可以解决生产者-消费者问题、读者-写者问题等。

PV操作具有互斥性、同步性、简单高效和适用性广泛等特点和优势。

在解题时,可以根据具体的问题场景,灵活运用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操作的作业参考答案

关于调度算法【例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操作(例题)

???信号量的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)桌上一个盘子,只能放一只水果。

P、V操作习题答案

P、V操作习题答案

信号量应用问题:1.写出程序描述下列前趋关系。

S1->S2, S1->S3, S2->S4, S2->S5 , S3->S6, S4->S7, S5->S7, S6->S7Var s1,s2, s3,s4:semaphore:=0, 0, 0, 0;BeginParbeginP1: begin….;V(s1);V(s1);End;P2: beginP(s1);…;V(s2);V(s2);End;P3: beginP(s1)…V(s3)End;P4: beginP(s2);…V(s4);P5: beginP(s2);..;V(s4);End;P6: beginP(s3)..V(s4)End;P7:beginP(s4);P(s4);P(s4);…End;Parendend2. 请用信号量实现4×100(4人,每人100米)接力赛的同步过程。

提示:前趋图同步问题,可设4个进程,三个信号量,进程1只设V操作,进程4只设P操作,其余进程先做P 操作再做V操作。

Var s1,s2,s3:semaphore:=0, 0, 0; BeginParbeginAthlete1: beginRun 100m;V(s1);End;Athlete2: beginP(s1)Run 100m;V(s2);End;Athlete3: beginP(s2) ;Run 100m;V(s3);End;Athlete4: beginP(s3);Run 100m;End;Parendend3.设公共汽车上,司机和售票员的活动分别是:司机:售票员:启动车辆上乘客正常行车关车门到站停车售票开车门下乘客在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?请用信号量机制实现他们的同步。

/-假定初始状态为停车状态,引入信号量Stop和Run:BEGINsemaphore Stop,Run;Stop:=Run:=0;CoBeginDriver: BEGINRepea tWa it(Run);启动车辆;正常行驶;到站停车;Si gnal(Stop);Until False;END;Conductor:BEGINRepea t上乘客;关车门;Si gnal(Run);售票;Wa it(Stop);开车门;下乘客;Until False;END;CoEnd;END;生产者消费者问题:1.桌上有一个可以容纳两个水果的盘子,每次只能放或取一个水果。

PV习题

PV习题

信号量与PV操作P操作:S=S-1若S>=0,则该进程继续运行若S<0,则进程被阻塞,并将它插入信号量S的等待队列中V操作S=S+1若S>0则进程继续运行若S<=0,则从信号量的等待队列中唤醒第一个进程,使其变为就绪状态,然后返回原进程继续执行。

信号量的应用互斥模型(S初值为1)进程P1 进程P2P(S) P(S)CS1 CS2V(S) V(S)同步模型(S初值设为0)进程P1 进程P2L1:P(S) L2:V(S)例一.在某展示厅设置一个自动计数系统,以计数器count表示在场的人数,count是动态变化的,若有一个人进入展示厅进程pin对计数器count加1,当有一个人退出展示厅时,进程pout实现计数器减1由于进、出所以展示厅的人是随机的,用P-V操作实现。

(并发进程之间的互斥问题)解:定义信号量:S:表示是否有进程进入临界区,初值为1.(表示没有进程进入临界区)begincount: Integer;S: semaphore;count:=0;S:=1;cobeginprocess Pin:beginP(S);count:=count+1;V(S);end;process Pout:beginP(S);count:=count-1;V(S);end;coend;例二.与生产者和消费过者相似的问题,把“A进程将记录送入缓冲器”看成生产者生产了一件物品且把物品存入缓冲器,把“B进程从缓冲器中取出记录并加工”看作是消费者从缓冲器取出物品去消费,缓冲器中只能放一个记录(一件物品),用P-V操作实现。

(并发进程之间的同步问题)解:定义两个信号量为:sp和sg。

sp:表示生产者是否右以把物品存入缓冲器。

由于缓冲器只能存放一个物品,因此sp的初值为1,即sp:=1。

sg:表示缓冲是否存有物品,它的初值应该为0,即sg:=0,表示缓冲器中还没有物品存在。

生产者和消费者两个进程并发执行时,可按以下的方式实现同步例三.如果一个生产者和一个消费共享缓冲器容量为可以存放n件物品时,生产者总可继续存入物品;同时当缓冲器的物品不为“0”时,消费者总可从缓冲器中取走物品,用P-V操作实现。

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

• get process: while (1) {
read data; wait (empty1); wait (s1)
put data into buffer1 //因为是单缓,故无in指针,可写为 // buffer1=x; signal (s1) signal (full1) }
• Copy process: while (1) {
– 进程A专门拣黑子,进程B专门拣白子;
– 每个进程每次只拣一个子,当一个进程在拣 子时不允许另一个进程去拣子;
– 当一个进程拣了一个棋子(黑子或白子)以 后,必须让另一个进程拣一个棋子(黑子或 白子),并要求A进程首先开始。
• 定义两个同步信号量s1,s2;
• 因为要求进程A先开始,故S1初值为1;s2初 值为0;
• Put process: while(1) {
wait (full2) wait (s2)
get data from buffer2 // z=buffer2 signal (s2) signal (empty2)
print data on printer }
• 3.在一个箱子里混装有数量相等的黑色围棋子 和白色围棋子,现要用自动分拣系统把黑子和 白子分开,该系统由两个并发执行的进程组成, 功能如下:
Process 营业员 while(TRUE)
{ P(s1); V(service); // 叫号; 为顾客提供服务;
}
• 5. 三个进程P1、P2、P3互斥使用一个包含 N(N>0)个单元的缓冲区。P1每次用 produce()生成一个正整数并用put()送入 缓冲区某个空单元中;P2每次用getodd() 从该缓冲区中取出一个奇数并用countodd() 统计奇数个数;P3每次用geteven()从该缓 冲区中取出一个偶数并用counteven()统计 偶数个数。请用信号量描述三个进程的同步 与互斥活动,并说明定义信号量的含义。
• 对buffer的互斥信号mutex=1
• P1生产,P2消费奇数,一对同步信号量 odd=0, empty=N;
• P1生产,P2消费偶数一对同步信号量 even=0, empty=N;
• P1进程: int num; while(1){ num=produce(); P(empty); P(mutex); put(); V(mutex); if (num%2) V(odd); else V(even);
• Pro
• 等待叫号;
• 获得服务;
•}
• Process 营业员
• while(TRUE)
•{

叫号;

为顾客提供服务;
•}
• 请用P、V操作实现上述过程中的互斥与 同步。说明信号量的含义并赋初值。
• 两个互斥互斥关系: • 一台叫号机--mutex=1 • 10个座位-- empty=10
} •
P2进程: While(1){
P(odd); P(mutex); getodd(); V(mutex); V(empty); Countodd(); }
• P3进程: • While(1){ • P(even); • P(mutex); • geteven(); • V(mutex); • V(empty); • Counteven(); •}
put match and tobacco; signal (MatchTabacco);
}
else { put paper and match; signal (PaperMatch);
} Smaker1 () /* has match */ while(1) { wait (PaperTobacco);
• 要求说明每个信号量是用于解决什么互斥、 什么同步关系的。
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; 为一对
6. 在某餐馆里有一个收银员,且同时最多 允许有30个顾客就餐,我们可以将顾客 和收银员看成是两类不同的进程。
为了利用PV操作正确地协调这两类进程之 间的工作,设置了四个信号量S1、S2、 S3和Sn,且初值分别为1、0、0和30。
有三个同步关系: ①收银员忙,顾客等---S1 ②无人付款,收银员等--S2 ③收银员收完钱,顾客可以离开---S3 一个互斥关系:30张餐桌---Sn
• 东边要过桥的车:

P(stop);

P(mutex1);

Count1++;

If (count1==1) P(wait);

V(mutex1);

V(stop);

{过桥}

P(mutex1);

Count1--

If (count1==0) V(wait);

V(mutex1);
• 西边要过桥的车
wait (empty); put data into buffer; //单缓,无in指针,可写为 buffer=x
signal (full);}
• 计算进程: • While(1){
wait (full); get data from buffer;
// 单缓,无out指针,可写为 y=buffer signal (empty);
• 顾客进程: while (1) {
p(sn); eat;
v(sn); p(s1);
pay; v(s2); p(s3) leave; }
收银员进程: do { p(s2); get the money; v(s1); v(s3); } while(1);
7.独木桥问题:东西方向汽车过独木桥, 为了保证安全,只要桥上无车,则允许 一方的汽车过桥,待一方的汽车全部通 过后,另一方的汽车才允许过桥。但, 当另一方提出过桥时,要阻止对方未上 桥的后继车辆,待桥面上的汽车过完桥 后,另一方的汽车开始过桥。适用信号
• 进程A while(1){ P(s1); 拣黑子;
V(s2); }
进程B: while(1){
P(s2); 拣白子;
V(s1); }
• 4. 某银行提供一个服务窗口和10个等待的座 位。顾客到达银行时,若有空座位,则到取号 机上领取一个号,等待叫号。取号机每次允许 一位顾客使用。当营业员空闲时,通过叫号选 取一位顾客,并为其服务。顾客和营业员的活 动描述如下:
• 两个同步关系: • 有顾客营业员才叫号s1=0 • 营业员先叫号,顾客才能被服务service
=0
• Process 顾客 i:
• { P (empty);
• P(mutex);
• 从取号机获取一个号码;
• V(mutex);
• V(s1);
• P(service); //等待叫号;
• V (empty); • 获得服务; •}
• 针对一个smoker与agent有两个同步关 系:
• 1)agent放了两样东西,smoker才能 抽烟---三个信号量
• 2)smoker把桌上东西拿走,agent才 能再放---信号量done,初值为1
semaphore PaperTobacco= 0; TobaccoMatch= 0; PaperMatch= 0; done =1;
• 1. 在测量控制系统中的数据采集任务时, 把采集的数据送一个单缓冲区;计算任务 从该缓冲区中取出数据进行计算。利用信 号量实现两者共享缓冲区的同步算法。
• 1. 是producer-consumer问题的简化版 • semphore empty=1, full=0 • 信号量初值必须说明 • 采集进程: • while(1){
wait (full1) wait (s1)
copy data from buffer1 //单缓,无out指针,可写y=buffer1 signal (s1) signal (empty1) wait (empty2) wait (s2)
put data into buffer2 // buffer2=y signal(s2) signal (full2) }
•}
• 2. 从读卡机上读进N张卡片,然后复制一份, 要求复制出来的卡片与读进的卡片完全一样。 该任务由三个进程get,copy和put及两个 缓冲区buffer1和buffer2完成。进程get的 功能是把一张卡片的信息从读卡机读入 buffer1;进程copy是把buffer1中的信息 复制到buffer2;进程put的功能是取出 buffer2中的信息并从打印机上打印。
量和P,V操作写出汽车过独木桥问题的 同步算法。并说明每个信号量的含义。
• Seamphore stop,wait,mutex1,mutex2; • Stop=1;mutex1=1;mutex2=1;wait=1; • Int counter1=0,counter2=0; • Mutex1互斥信号量,用于锁counter1。 • Mutex2互斥信号量,用于锁counter2。 • stop 用于提出过桥请求。 • wait用于排队过桥,即用于给桥加锁。
相关文档
最新文档