3章操作系统信号量典型题.docx

上传人:b****7 文档编号:9401472 上传时间:2023-02-04 格式:DOCX 页数:35 大小:3.37MB
下载 相关 举报
3章操作系统信号量典型题.docx_第1页
第1页 / 共35页
3章操作系统信号量典型题.docx_第2页
第2页 / 共35页
3章操作系统信号量典型题.docx_第3页
第3页 / 共35页
3章操作系统信号量典型题.docx_第4页
第4页 / 共35页
3章操作系统信号量典型题.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

3章操作系统信号量典型题.docx

《3章操作系统信号量典型题.docx》由会员分享,可在线阅读,更多相关《3章操作系统信号量典型题.docx(35页珍藏版)》请在冰豆网上搜索。

3章操作系统信号量典型题.docx

3章操作系统信号量典型题

第三章进程的同步与通信

1.3临界资源(criticalresource)

系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源或共享变量。

如磁带机,打印机等。

1.4临界区(criticalsection)

一个程序片段的集合,我们把在每个进程中访问临界资源的那段代码称为临界区。

1.5进程的同步(直接作用)

指系统中一些进程需要相互合作,共同完成一项任务。

具体说,一个进程运行到某一点时要求另一伙伴进程为它提供消息,在未获得消息之前,该进程处于等待状态,获得消息后被唤醒进入就绪态。

1.6进程的互斥(间接作用)

由于各进程要求共享资源,而有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系为进程的互斥。

2.进程的互斥

2.1临界区的使用原则

1)空闲让进:

当无进程在临界区时,任何有权使用临界区的进程可进入。

2)忙则等待:

不允许两个以上的进程同时进入临界区。

3)有限等待:

任何进入互斥区的要求应在有限的时间内得到满足,以免陷入“死等”。

4)让权等待:

当进程不能进入自己的临界区时,应立即释放处理机,以免进入“忙等”。

•缺点:

强制轮流进入临界区,没有考虑进程的实际需要。

容易造成资源利用不充分:

在Pi出让临界区之后,Pj使用临界区之前,Pi不可能再次使用临界区;

•优点:

不用交替进入,可连续使用;

•缺点:

Pi和Pj可能同时进入临界区。

在Pi和Pj都不在临界区时,假设按下面序列执行时,会同时进入:

“Pi;Pj;Pi;Pj”。

即在检查对方flag之后和切换自己flag之前有一段时间,结果都检查通过。

这里的问题出在检查和修改操作不能连续进行。

•缺点:

Pi和Pj可能都进入不了临界区。

在Pi和Pj都不在临界区时,假设按下面序列执行时,会都进不了临界区:

"PiPjPiPj"。

即在切换自己flag之后和检查对方flag之前有一段时间,结果都切换flag,都检查不通过。

硬件方法的优点[WS]

–适用于任意数目的进程,在单处理器或多处理器上(除中断方法)

–简单,容易验证其正确性

–可以支持进程内存在多个临界区,只需为每个临界区设立一个布尔变量

硬件方法的缺点[WS]

–等待要耗费CPU时间,不能实现"让权等待"

–可能“饥饿”(不公平):

从等待进程中随机选择一个进入临界区,有的进程可能一直选不上

–可能死锁:

进程P1执行TS或Exchange指令并进入临界区,然后P1被P2中断并把CPU给具有更高优先级的P2,若P2试图使用与P1相同的资源,由于互斥机制,它被拒绝访问,因此进入忙等待循环,又因P2先级高于P1,所以P1总得不到调度执行。

3.信号量机制

3.1信号量简介

1965年,由荷兰学者Dijkstra提出(所以P、V分别是荷兰语的test(proberen)和increment(verhogen)),是一种卓有成效的进程同步机制。

P.V操作讨论

1)信号量的物理含义:

S>0表示有S个资源可用

S=0表示无资源可用

S<0则|S|表示S等待队列中的进程个数

P(S):

表示申请一个资源

V(S)表示释放一个资源。

信号量的初值应该大于等于0

4.进程的同步机制──管程

4.1管程的提出

采用PV同步机制来编写并发程序,对于共享变量及信号量变量的操作将被分散于各个进程中

缺点:

(1)易读性差,因为要了解对于一组共享变量及信号量的操作是否正确,则必须通读整个系统或者并发程序

2)不利于修改和维护,因为程序的局部性很差,所以任一组变量或一段代码的修改都可能影响全局

(3)正确性难以保证,因为操作系统或并发程序通常很大,要保证这样一个复杂的系统没有逻辑错误是很难的

管程:

一种同步机制

(管程-类程-进程)

4.2管程定义:

指关于共享资源的数据及在其上操作的一组过程或共享数据结构及其规定的所有操作

系统按资源管理的观点分解成若干模块,用数据表示抽象系统资源,同时分析了共享资源和专用资源在管理上的差别,按不同的管理方式定义模块的类型和结构,使同步操作相对集中,从而增加了模块的相对独立性

管程:

集中式同步机制,它的基本思想是将共享变量以及对共享变量能够进行的所有操作集中在一个模块中,一个操作系统或并发程序由若干个这样的模块所构成,由于一个模块通常较短,模块之间关系清晰,提高了可读性,便于修改和维护,正确性易于保证

管程的形式

TYPEmonitor_name=MONITOR;

共享变量说明

define本管程内所定义、本管程外可调用的过程(函数)名字表

use本管程外所定义、本管程内将调用的过程(函数)名字表

PROCEDURE过程名(形参表);

过程局部变量说明;

BEGIN

语句序列;

END;

......

FUNCTION函数名(形参表):

值类型;

函数局部变量说明;

BEGIN

语句序列;

END;

......

BEGIN

共享变量初始化语句序列;

END;

•5.高级通信方式

一、共享存储器系统(Shared-memorysystem)

相互通信的进程共享某些数据结构或共享存储区。

一组进程向该公共区中写,另一组进程从公共区中读,通过这种方式实现两组进程间的信息交换。

因此又分为:

1基于共享数据结构的通信方式:

进程之间能够通过某种类型的数据结构(如有界缓冲区)交换信息,如生产者和消费者问题。

操作系统只负责提供共享存储区,而共享数据结构和对进程间的同步处理都是程序员的事。

因而,通信效率低,只适合于传递少量信息。

•二、消息系统(MessageSystem)

进程间的信息交换以消息或报文为单位,程序员利用系统提供的一组通信命令(原语)实现通信。

操作系统隐藏了通信的实现细节,简化了编程的复杂性。

分为两种:

•直接通信方式:

发送进程发消息时要指定接收进程的名字,反过来,接收时要指明发送进程的名字。

系统提纲两条原语:

Send(receiver,message)

Receiver(sender,message

•二、重点、难点提示

1同步相关概念的理解

2信号量机制和P、V操作,并能解决实际问题。

•三、典型例题分析

•解决互斥同步问题的主要步骤:

1)分析清楚题目涉及的进程间制约关系。

2)设置信号量(包括信号量的个数和初值,对同步问题还要写出信号量物理含义)

3)给出进程相应程序的算法描述或流程控制,并把P、V操作加到程序适当之处。

 

2.读者写者问题

有两组并发进程:

读者和写者,共享一组数据区

要求:

允许多个读者同时执行读操作

不允许读者、写者同时操作

不允许多个写者同时操作

例题1(北京大学1999年)

有一个仓库,可以存放A和B两种产品,仓库的存储空间足够大,但要求:

(1)一次只能存人一种产品((A或B);

(2)一N

其中,N和M是正整数。

试用“存放A’和‘存放B’以及P操作和V操作描述产品A和产品B的人库过程。

解答:

应先将表达式转换成制约条件,不可在程序中直接使用该表达式

将表达式分解为:

B产品数量—A产品数量

A产品数量—B产品数量<M

可这样理解:

(1)若只放人A产品,而不放入B产品,则A产品最多可放M—1次便被阻塞,即A进程每操作一次就应当将计数器减1(计数器初值为M—1),当计数器值为0时,进程程A被阻塞;每当放入一个B产品,则可令A产品的计数器增加1,表明A产品可以多一次放入产品的机会;同理,

(2)若只放人B产品,而不放入A产品,则B产品最多可;放N一1次便被阻塞,即A进程每操作一次就应当将计数器减1(计数器初值为N—1)。

当计数器值为0时,进程B被阻塞;每当放人一个A产品,则可令B产品的计数器增加1,表明B产品可以多一次放入产品的机会。

由此可见,该问题是一个同步控制问题。

又因为一次仅允许一种产品人库,设置信号量mutex控制粮进程互斥访问临界资源(仓库)。

过程如下:

begin

mutex:

=1;

Sa:

=M-1;

Sb:

=N-1;

Parbegin

A产品

begin

repeat

P(Sa);

P(mutex);

A人库;

V(mutex);

V(Sb);

Untilfalse;

End;

B产品

begin

repeat

P(Sb);

P(mutex);

B人库;

V(mutex);

V(Sa);

Untilfalse;

End;

rend;

 

例题2(华中理工大学1999年试题)

设公共汽车上,司机和售票员的活动分别是:

司机:

售票员:

启动车辆上乘客

正常行车关车门

到站停车售票

开车门

下乘客

在汽车不断地到站,停车,行驶过程中,这两个活动有什么同步关系?

并用信号灯的P,V操作实现它们的同步。

解答:

该题没有给出具体的控制关系,可根据常识自己定。

(1)售票员关车门后司机才可以启动车辆。

(2)司机到站停车后,票员方可开车门。

由此可见本题的控制关系较为简单。

过程如

下:

定义信号量run,stop;

Stop:

=0;run:

=0;

Purbegin

司机:

begin

L1:

P(run);

启动车辆;

正常行车;

到站停车;

V(stop);

GotoLl;

End;

售票员:

begin

L2:

上乘客;

关车门;

V(run);

售票;

P(stop);

开车门;

下乘客;

gotoL2;

end;

parend.

 

例题3(南开大学1997年试题)

天大

在南开大学和天津大学之间有一条弯曲的小路,其中从S到T一段路每次只允许一辆自行车通过,但中间有一个小的“安全岛”M(同时允许两辆自行车停留),可供两辆自行车已从两端进人小路情况下错车使用,如图4.3所示。

试设计一个算法使来往的自行车均可顺利通过。

T

L

K

S

南开

解答:

本题临界资源较多,需仔细考虑。

首先中间的安全岛M仅允许两辆自行车通过,应作为临界资源设置信号量。

但仔细分析发现,在任何时刻进人小路的自行车最多不会超过两辆(南开和天大方向各一辆),因此不需为安全岛M设置信号量。

在路口S处,南开出发的若干辆自行车应进行路口资源的争夺,以决定谁先进人小路SK段,为此设置信号量S,用以控制路口资源的争夺;同理,设置信号量T,控制天大方向自行车对路口T的争夺。

又小路SK段仅允许一辆车通过,设置信号量SK初值为1,同理设置小路LT段信号量LT初值为1。

程序如下:

S:

=l;T:

=1;SK:

=1;LT:

=1;

Parbegin

进程P:

(南开方向自行车)

begin

P(S);{与其它同方向的自行车争夺路口S}

P(SK);{同对面自行车争夺路段SK}

通过SK;

进人M;**

V(SK);{一旦进人M,便可释放路段SK}

P(LT);{同对面的自行车争夺路段LT}

通过LT;

V(LT);{将路段LT释放}

V(S);{将路口S释放给同方向的正在路口S处等待的自行车}

end,

 

进程Q:

(天大方向自行车‘)

begin

P(T);

P(LT);

通过LT;

进人M;

V(LT);

P(SK);

通过SK;

V(SK);

V(T);

End;

Parend。

说明**:

P进程进人安全岛M后,释放了路段SK,但没有释放路口S,原因在于它是向对面的4进程释放路段资源SK,而在P进程离开小路LT后,才会将路口S释放给其他P进程,如不这样,就会死锁。

请考虑如下情况:

两个方向各有一辆车前进,若在P进程到达安全岛M后,执行V(S)及V(SK)操作,则有可能使得同方向的其它P进程得到路段SK的使用权,而进人小路;同理,Q进程到达安全岛后执行V(LT)及V(T)操作,有可能使得同方向的其它Q进程得到路段LT而进人小路。

此时共有四辆车在整个路径中,最终出现死锁状态。

例题4(北京理工大学1996年试题)

进程之间存在哪几种相互制约关系?

各是什么原因引起的?

下列活动分别属于哪种

制约关系?

(1)若干同学去图书馆借书;

(2)两队举行篮球比赛;

(3)流水线生产的各道工序;

(4)商品生产和社会消费。

解答:

有直接制约关系(即同步问题)和间接制约关系(即互斥问题);同步问题是存在逻辑关系的进程之间相互等待所产生的制约关系,互斥问题是相互无逻辑关系的进程间竞争使用资源所发生的制约关系。

(1)约属于互斥关系,因为书的个数是有限的,一本书只能借给一个同学;

(2)属于互斥关系,篮球只有一个,两队都要争夺;

(3)属于同步关系,各道工序的开始都依赖前道工序的完成;

(4)属于同步关系,商品没生产出来,消费无法进行,商品未消费完,生产也无须

进行。

例题5。

(北京邮电大学1999年试题)

某招待所有100个床位,住宿者住人要先登记(在登记表上填写姓名及床位号),离去时要撤消登记(在登记表上删去姓名和床位号)。

请给出住宿登记及撤消登记(退宿)过程的算法描述。

解答:

该题同有限缓冲区的生产者/消费者问题一致,缓冲单元为100个,顾客人住时执行生产者操作,登记过程对应于放产品过程,故对登记表的修改须互斥执行,当床位客满时便不可人住(即放产品).顾客离开时执行消费者操作,退宿过程对应于取产品过程,包括修改登记表,删去姓名(即取产品),并将床位归还(空出一个单元)。

过程:

例题6。

(南京大学2000年试题)

桌子上有一只盘子,最多可容纳两个水果,每次只能放人或取出一个水果。

爸爸专向盘子中放苹果(apple),妈妈专向盘子中放橘子(orange),两个儿子专等吃盘子中的橘子,两个女儿专等吃盘子中的苹果。

请用P,V操作来实现爸爸、妈妈、儿子、女儿之间的同步与互斥关系。

解答:

盘子为互斥资源,因可以放两个水果,empty初值为2;father放苹果前先看看有无空间,若有则抢盘子,放人apple。

后向女儿发信号(V(apple));mother放橘子前先看看有无空间,若有则抢盘子,放人橘子后向儿子发信号(V(orange));女儿先看有无苹果,若有则抢盘子,取走苹果后将盘子置空(V(empty));儿子先看有无橘子,若有则抢盘子,取走橘子后将盘子置空。

该题是生产者/消费者问题的变形,有两对生产者和消费者。

生产者需指明是给哪个消费者的产品,但消费者取走产品后无须特别通知某个生产者,因为空出的缓冲区(盘子)可由两个生产者随意争夺。

设信号量mutex初值为1,控制对盘子的互斥访问;apple表示盘中苹果个数,orange表示盘中橘子个数,初值均为0.

parbegin

father:

begin

Ll:

P(empty);

P(mmex);

放苹果;。

V(mutex);

V(apple);

GotoLl;

End;

mother:

begin

L2:

P(empty);

P(mutex);

放橘子;

V(murex);

V(orange);

CotoL2;

End;

daughter:

begin

L3:

P(apple);

P(mutex);

取苹果

V(murex);

V(empty);

GotoL3;

End;

son:

begin

L4:

P(orange);

P(mutex);

取橘子

V(mutex);

V(empty);

GotoM;

End;

Parend

例题7。

某工厂有两个生产车间和一个装配车间,两个生产车间分别生产A,B两种零件,装配车间的任务是把A,B两种零件组装成产品。

两个生产车间每生产一个零件后都要分别把它们送到装配车向的货架F1,F2上,Fl存放零件A,F2存放零件B,Fl和F2的容量均为可以存放10个零件。

装配工人每次从货架上取一个A零件和一个B零件然后组装成产品。

请用PV操作进行正确管理。

解答:

该题是生产者/消费者问题的变形,可认为一个消费者(装配工人)同两个生产者(A,B车间)互斥使用两个缓冲区(Fl,F2),可设mutexl,mutex2(初值为1)控制进程对Fl,F2的互斥操作,另设一emptyl,empty2(初值均为10),fulll,full2(初值均为0)。

过程如下:

parbegin

A车间:

begin

Ll:

生产一个产品;

P(emptyl);

P(mutexl);

放人Fl;

V(mutexl);

V(full));

GotoLl;

End;

B车间:

begin

L2:

生产一个产品;

P(empty2);

P(mutex2);

放人F2;

V(mutex2);

V(full2);

GotoL2;

装配工人:

begin

L3:

P(full1);

P(full2);

P(mutexl);

P(mutex2);

取A和B;

V(mutex1);

V(mutex2);

V(emptyl);

V(empty2);

GotoL3;

End;

Parend.

 

例题8(北京邮电大学1998年试题)

某寺庙,有小、老和尚若干,有一水缸,由小和尚提水人缸(向缸中倒水)供老和尚饮用。

水缸可容10桶水,水取自同一井中。

水井径窄,每次只能容一个捅取水。

水桶总数为3个。

每次人、取缸水仅为1桶,且不可同时进行。

试给出有关从缸中取水和向缸中倒水的算法描述。

解答:

应首先考虑清楚本题需要几个进程。

从井中取水后向缸中倒水为连续动作,可算同一进程,从缸中取水为另一进程。

再考虑信号量.有关互斥的资源有水井(一次仅一个水桶进出)和水缸(一次入、取水为一桶),分别为之设信号量mutexl,mutex2控制互斥;

另有同步问题存在:

三个水桶无论从井中取水还是人出水缸都是一次一个,应为之设信号量count,抢不到水桶的进程只好等待;还有水缸满时,不可人水,设信号量empty控制人水量.水缸空时不可出水,设信号量full,控制出水量。

mutexl:

=1;mutex2:

=1;empty:

=10;full:

=0;  count:

=3;

parbegin

入水:

begin

Ll:

P(empty);

P(count);

P(mutexl);

从井中取水;

V(mutext1);

P(mutex2);

送人水缸;

V(mutex2);

V(count);

V(full);

GotoLl;

End;

取水:

begin

L2:

P(full);

P(count);

P(mutex2);

从缸中取水;

V(mutex2);

V(empty);

V(count);

GotoL2;

End;

Parend.

例题9(北方交通大学1999年试题)

有一阅览室,读者进人阅览室必须先在一张登记表((TB)上登记,该表为每一座位设一个表目,读者离开时要消掉其登记信息,阅览室共有100个座位,为了描述读者的动作,请用类Pascal语言和P,V操作写出进程间的同步算法。

约定:

1)flag的值:

0座位空闲,1座位被占用。

2)用语句I=getflag(0)可搜索到一个空座位i,用语句i.flag=0或1,可给标志位赋值。

3)用i=getname(readername)可搜索到某读者所登记的座位号i;

用i..name=0或i.name=readrname。

可给姓名字段赋值,0表示清除读者姓名。

4)计数信号量用count,互斥信号量用mutex.

解答:

该题所提供的已知条件和语句过多,容易给考生造成混乱,因此看到此题应先理清思路,先不要考虑约定中提供的各种语句。

首先,按照惯常的同步互斥问题思路来思考。

读者进程:

讲入阅览室首先应检杳是否有空位子。

若没有则等待,若有则登记,可设信号量count,控制各进程对座位的争夺;读者离去时,便可释放该座位。

登记时要对表中各量进行修改,该过程相对于各进程而言为互斥操作,因此设信号量mutex,控制读者进人和离去时对表的互斥修改,题目所提供的各种语句只是用在修改登记表时所进行的具体操作,对本题的同步互斥问题无任何影响,照抄即可。

count:

=100;mutex:

=1;

读者进程:

begin

进人阅览室;

P(count);

P(mutex);

i=getflag(0);

i.flag=1;

i.name=readername;

V(mutex);

坐下看书;

P(mutex);

i=getname(readername);

i.name=0;i.flag=0;

V(mutex);

V(count);

离开;

end.

 

例题10。

用信号量描述4乘100米接力过程

解答:

P1:

P2:

P(Sl);P3:

P(S2);P4:

P(S3);

起跑,前进l00m;起跑,前进l00m;起跑,前进l00m;起跑,前进l00m;

V(S1);V(S2);V(S3);到达终点。

 

例题11(北京大学1992年试题)

有桥如图4.15所示。

车流如箭头所示。

桥上不允许两车交会,但允许同方向多辆车依次通行(即桥上可以有多个同方向的车)。

用P,V操作实现交通管理以防桥上堵塞。

 

 

 

解答:

设置:

信号量mutex1,murex2,初值为1;bridge初值为1;计数器count1,count2,初值为0。

北方:

南方:

P(mutex1);P(mutex2);

count1:

=count1+1;count2:

=count2+1;

ifcount1=1thenP(bridge);ifcount2=1thenP(bridge);

V(mutexl);V(mutex2);

过桥;过桥;

P(mutexl);P(mutex2);

count1:

=count1一1;count2:

=count2一1;

ifcount1=0thenV(bridge);ifcount2=0thenV(bridge);

V(mutex1);V(mutex2);

例题12。

“吸烟者”问题:

假设一个系统有三个吸烟者(Smoker)进程和一个供货商((Agent)进程。

每个吸烟者连续不断地制造香烟并吸掉它。

但是,制造一支香烟需要三种材料;烟丝、纸、火柴。

第一个吸烟者进程有纸,第二个有烟丝,第三个有火柴。

供货商进程可以无限地提供这三种材料。

供货商将

展开阅读全文
相关搜索

当前位置:首页 > 教学研究 > 教学反思汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1