信号量的PV操作(例题)

更新时间:2024-03-13 12:34:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

???信号量的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 L2

2、请用PV操作实现他们之间的同步关系:

(1)桌上一个盘子,只能放一只水果。爸爸放苹果,妈妈放桔子,儿子只吃桔子,女儿只吃苹果。

(2)桌上一个盘子,只能放一只水果。爸爸放苹果,妈妈放桔子,儿子吃桔子、苹果。 参考答案:

第一步:确定进程

4个进程Father(爸爸)、Mother(妈妈)、Son(儿子)、Daughter(女儿) Father进程:

? 将苹果放入盘中

Mother进程:

? 将桔子放入盘中 Son进程:

? 从盘中取出桔子 ? 吃桔子 Daughter进程:

? 从盘中取出苹果 ? 吃苹果

第二步:确定进程的同步、互斥关系

? 同步:Father当盘中无水果时,才可以将苹果放入盘中 ? 同步:Mother当盘中无水果时,才可以将桔子放入盘中 ? 同步:Son当盘中有桔子时,才可以从盘中取出桔子

? 同步:Daughter当盘中有苹果时,才可以从盘中取出苹果

第三步:设置信号量

? 盘中无水果,Sp,初值1 ? 盘中有桔子,So,初值0 ? 盘中有苹果,Sa,初值0

第四步:用伪代码描述

begin

Sp,So,Sa:semaphore; Sp :=1; So :=0; Sa :=0;

cobegin

Father ( ); Mother ( ); Son ( );

Daughter ( ); coend; end;

process Father ( ) begin

L1: P(Sp);

将苹果放入盘中; V(Sa); goto L1; end;

process Mother ( ) begin

L2: P(Sp);

将桔子放入盘中; V(So);

goto L2; end;

process Son ( ) begin

L3: P(So);

从盘中取出桔子; V(Sp) 吃桔子; goto L3; end;

process Daughter ( ) begin

L4: P(Sa);

从盘中取出苹果; V(Sp) 吃苹果; goto L4; end;

(2)

第一步:确定进程

3个进程Father(爸爸)、Mother(妈妈)、Son(儿子) Father进程:

? 将苹果放入盘中 Mother进程:

? 将桔子放入盘中 Son进程:

? 从盘中取出水果(桔子或苹果) ? 吃水果(桔子或苹果)

第二步:确定进程的同步、互斥关系

? 同步:Father当盘中无水果时,才可以将苹果放入盘中 ? 同步:Mother当盘中无水果时,才可以将桔子放入盘中

? 同步:Son当盘中有水果(桔子或苹果)时,才可以从盘中取出水果

第三步:设置信号量

? 盘中无水果,empty,初值1 ? 盘中有水果(桔子或苹果),full,初值0

第四步:用伪代码描述

begin

empty, full:semaphore; empty:=1; full :=0;

cobegin

Father ( ); Mother ( ); Son ( ); coend; end;

process Father ( ) begin

L1: P(empty); 将苹果放入盘中; V(full); goto L1; end;

process Mother ( ) begin

L2: P(empty); 将桔子放入盘中; V(full); goto L2; end;

process Son ( ) begin

L3: P(full); 从盘中取出水果; V(empty); 吃水果; goto L3; end;

3. 某工厂有一个可以存放设备的仓库,总共可以存放10台设备。生产的每一台设备都必

须入库,销售部门可从仓库提出设备供应客户。设备的入库和出库都必须借助运输工具。现只有一台运输工具,每次只能运输一台设备。请设计一个能协调工作的自动调度管理系统。

参考答案:

第一步:确定进程

可以为入库(Pin)和出库(Pout)各设置一个进程 Pin进程:

? 生产了一台设备 ? 使用运输工具入库 Pout进程:

? 使用运输工具出库

? 提出设备供应客户

第二步:确定进程的同步、互斥关系

? 同步:当仓库中有空余位置存放设备时,设备才可以入库 ? 同步:当仓库中有存放的设备时,设备才可以出库 ? 互斥:运输工具是临界资源,要互斥访问

第三步:设置信号量

? 仓库中有空余位置数量,empty,初值10 ? 仓库中有存放的设备数量,full,初值 0

? 为运输工具设置互斥信号量S,初值 1,表示当前可用

第四步:用伪代码描述

begin

empty, full, S:semaphore; empty := 10;

full := 0; S := 1; cobegin Pin (); Pout (); coend; end;

process Pin ( ) begin

L1: 生产了一台设备 ;

P(empty);

P (S);

使用运输工具入库; V (S);

V(full); goto L1; end;

process Pout ( ) begin

L2: P(full);

P (S);

使用运输工具出库; V (S); V(empty);

提出设备供应客户;

goto L2; end;

4、写者优先的“读者――写者”问题:

Sin, Sout, seat:semaphore; seat :=100; Sin := 1; Sout := 1;

cobegin

process Reader-i ( i = 1,2,…,n ); begin

P(seat); P(Sin);

登记; V(Sin); 进入阅览室; 读书;

离开阅览室; P(Sout); 注销;

V(Sout);

V(seat); end coend; end;

17、设一个机票订购系统有n个售票处,每个售票处通过网络终端访问系统的公共数据区,假定公共数据区中的一些单元Aj(j=1,2,……)分别存放各次航班的余票数,售票时,若某次航班还有余票,则售给乘客,否则,拒绝售票。请用信号量的PV操作实现各售票进程的并发执行。

解: 设Pi(i=1,2,…,n)表示各售票处的售票处理进程,公共数据区是多个售票进程共享的临界资源,为其设置互斥信号量S,初值为1,表示资源可用。算法描述如下:

begin

S:semaphore; S :=1; cobegin

process Pi(i=1,2,…,n) begin

Ri:integer // 表示各进程执行时所用的工作单元 P(S) Ri := Aj;

if Ri ≥1 then begin Ri := Ri -1;

Aj := Ri;

V(S); 输出一张票 end

else begin V(S); 输出“票已售完”信息;

end; end; coend; end;

注意:算法中“else”部分的V操作不能少,否则当进程在临界区中判别条件Ri ≥1不成立时无法退出临界区,当然也就不能唤醒等待进入临界区的其它进程,这就违反了同步机制应遵循的“空闲让进”和“有限等待”两个原则。

18、有三个进程PA、PB、PC合作解决文件打印问题:PA将文件记录从磁盘读入内存的缓冲区1,每执行一次读一个记录;PB将缓冲区1的记录复制到缓冲区2,每执行一次复制一个记录;PC打印缓冲区2中的记录,每执行一次打印一个记录。每个缓冲区只能存放一个记录。请用信号量机制实现文件的正确打印。

解:本题中,进程PA、PB、PC之间的合作关系如图2-3所示:

PA读入记录缓冲区1PB复制缓冲区2PC打印

图2-3 文件打印流程图

当缓冲区1为空时,PA可将记录读入其中,否则,PA需等待;当缓冲区1有记录而缓冲区2为空时,PB可进行复制工作,否则PB需等待;当缓冲区2有记录时,PC可打印记录,否则PC需等待。为此,设置4个信号量empty1、empty2、full1、full2,其中empty1、empty2分别表示缓冲区1和缓冲区2是否为空,初值均为“1”;full1、full2分别表示缓冲区1和缓冲区2中是否有记录,其初值均为“0”。算法描述如下:

begin process PA ( )

empty1,empty2,full1,full2:semaphore; empty1 :=1; empty2 :=1; full1 :=0; full2 :=0;

cobegin

PA ( ); PB ( ); PC ( ); coend; end;

begin

L1: 从磁盘读一个记录; P(empty1); 将记录存入缓冲区1; V(full1); goto L1 end;

process PB ( ) begin

L2: P(full1);

从缓冲区1取一个记录; V(empty1) P(empty2); 将记录存入缓冲区2; V(full2); goto L2 end;

process PC ( ) begin

L3: P(full2)

从缓冲区2取出一个记录; V(empty2); 打印输出记录; goto L3 end;

本文来源:https://www.bwwdw.com/article/8zl8.html

Top