os例题(7)

2019-09-01 22:22

p(rmutex); p(wmutex);

if rcount==0 then 写数据; p(wmutex); v(wmutex); v(rmutex); v(w) v(w); end 读数据; p(rmutex);

rcount:=rcount-1; if rcount==0 then v(rmutex); v(rmutex); end coend

3 吸烟者问题 这个题目很传统,和前面问题一致这里简单阐述一下。这里再给出一个简单解法。 k 三个吸烟者(A,B,C)和一个经销商(D),三个吸烟者可以吸烟的条件不一样,具 体看经销商往桌子上放的原料

k 每个吸烟者需要一个进程,分别和经销商进行同步 k 互斥资源:桌子

k A,B,C,D四个进程,A表示烟草拥有者,B是纸拥有者,C火柴拥有者,D经销 商

k S实现互斥,表示桌子上是否放有东西

k Sad,Sbd,Scd分别表示进程AD,BD,CD之间的同步

CHAPTER 3. 九阴真经之研究生题辑52

The P,V code Using Pascal

cobegin

经销商烟草拥有者纸拥有者火柴拥有者 begin begin begin begin p(s); p(Sad); p(Sbd); p(Scd);

放原料; 取纸和火柴; 取烟草和火柴; 取纸和烟草; if(纸和火柴) v(s); v(s); v(s);

v(Sad); 吸烟; 吸烟; 吸烟; else end end end if(烟草和火柴) v(Sbd); else v(Scd); end coend

4 生产者-消费者扩展 有n+1个进程A1,A2,¢ ¢ ¢ ,An和B: k (1)A1,A2,¢ ¢ ¢ ,An通过同一个缓冲池各自不断地向B发送消息,B不断地取消 息,它必须取走发来的每个消息,刚开始时缓冲区为空,使用P,v操作实现之。

k (2)若缓冲区个数增至M个,试用P,V实现正确通讯

这个问题较为简单,请读者自行解决。这里给出参考答案。

The P,V code Using Pascal

var full,empty,mutex:semaphore; full=0; empty=1; mutex=1; cobegin

procedure A_i(i=1,...,n) procedure B: begin begin

p(empty); P(full); p(mutex); p(mutex);

put message to the buffer; Get the message; v(mutex); v(mutex); v(full); v(empty); end end

5 阅览室问题

有一个阅览室,共有100个座位,读者进入时必须先在一张登记表上登记,该表为每一个座位列一表目,包括座号和读者姓名等,读者离开时要消掉登记的信息,试问;

k (1)为描述读者的动作,应编写几个程序,设臵几个进程?

CHAPTER 3. 九阴真经之研究生题辑53

k (2)试用PV操作描述各个进程之间的同步互斥关系。 问题分析:

读者动作有两个,一个时填表进入阅览室,这时要考虑阅览室里是否有空位;一是读者阅读完毕,离开阅览室,这时的操作要考虑阅览室里是否有读者。读者在阅览室读书时,由于没有引起资源的变动,不算动作变化。

算法的信号量有三个:seats-表示阅览室时否有座位(初值为100);readers-表示阅览室里的读者数,初值为0;用于互斥的mutex,初值为1。

The P,V code Using Pascal

var seats, raaders,mutex:semaphore; seats:=100; readers:=0; mutex:=1; cobegin

procedure Enter begin

while TRUE begin

p(seats); //没有座位则离开 p(mutex); //进入临界区 填写登记表;

进入阅览室阅读; v(mutex); //离开临界区 v(readers); end end

procedure Leave begin

while TRUE begin

p(readers); p(mutex); 消掉登记; 离开阅览室; v(mutex); v(seats); end end coend

_思考:

某超市可同时供100人购物,入口处备有篮子,每个购物者可带一个篮子入超市购物,出口时结账并归还篮子(出入口仅容一人)。

CHAPTER 3. 九阴真经之研究生题辑54

6 P,V改错(2001)

设有两个优先级相同的进程P1,P2如下。令信号S1,S2的初值为0,已知z=2,试问P1,P2并发运行结束后x=?y=?z=? 进程P1 进程P2 y:=1; x:=1;

y:=y+2; x:=x+1; V(S1); P(S1); z:=y+1; x:=x+y; P(S2); V(S2); y:=z+y; z:=x+z;

受信号量S1和S2的控制,进程P1和P2中P,V操作的顺序应明确。但当进程P2执行v(S2)调用后,可能会产生这种情形,即P2中的语句“z:=x+z”可以在P1中的语句“y:=z+y”前面或后面执行,因而P1和P2并发运行结束后,有两种可能的结果。即: x=5、y=12、z=9或x=5、y=7、z=9。 7 面包店(2001)

面包师有很多面包,由n个销售人员推销。每人顾客进店后先取一个号,并且等待叫号。当一个销售人员空闲下来时,就叫下一个号。试设计一个使销售人员和顾客同步的算法。 问题分析:

该题目和银行排队问题一致的。解法一样!! 8 公交车问题(2002)

在一辆公共汽车上,司机和售票员各行其职,司机负责开车和到站停车;售票员负责售票和开、关门,当售票员关好车门后,司机才能继续开车行驶。试用P、V操作实现司机与售票员之间的同步。 9 P,V改错(2002)

下面是两个并发执行的进程。它们能正确运行吗?若不能请举例说明,并改正之: parbegin var x:integer;

process P1 process P2

var y, z:integer; var t, u:integer; begin begin x:=1; x:=0; y:=0; t:=0;

if x≥1 then y:=y+1; if x≤1 then t:=t+2; z:=y; u:=t; end end parend

CHAPTER 3. 九阴真经之研究生题辑55

他们不能正确运行。因为题中的进程P1和P2之间有一个共享变量X,由于进程的并发执行,可能会产生与时间有关的错误。比如进程P1先于P2运行,程序执行完成后Z的值是1,u的值为2.但若进程P1 执行到赋值语句“X:=1”后,进程调度P2运行,此时X的值又被重新赋值为0,待进程P2运行结束后,进程P1运行,当两个进程都结束运行时,Z的值0,u的值2.若要使P1和P2能正确执行,必须设臵一互斥信号量,以便对P1和P2中的临界区互斥使用。改正后的程序如下:

The P,V code Using Pascal

parbegin var x:integer;

mutex:semaphore; process P1 process P2

var y, z:integer; var t, u:integer; begin begin

p(mutex); p(mutex); x:=1; x:=0; y:=0; t:=0;

if x≥1 then y:=y+1; if x≤1 then t:=t+2; v(mutex); v(mutex); z:=y; u:=t; end end parend__


os例题(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:广西贺州市2016年中考物理试题(word版,含解析)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: