操作系统PV操作习题课_第1页
操作系统PV操作习题课_第2页
操作系统PV操作习题课_第3页
操作系统PV操作习题课_第4页
操作系统PV操作习题课_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

P,V操作习题课主讲人:张婷生产者消费者问题第一种情况:一个生产者,一个消费者,公用一个缓冲区。定义两个同步信号量:Se——表示缓冲区是否为空,初值为1。Sf——表示缓冲区中是否为满,初值为0。Buffer:integer;

Se,Sf:semaphore;

Se:=1;Sf:=0;ProcessproducerBegin RepeatProduceaproduct;Wait(Se);Buffer:=product;Signal(Sf);UntilfalseEnd; ProcessconsumerBeginRepeatWait(Sf);Takeaproduct;Signal(Se);Consumer;UntilfalseEnd;生产者消费者问题第二种情况:一个生产者,一个消费者,公用n个环形缓冲区定义两个同步信号量:Se——表示缓冲区是否为空,初值为n。Sf——表示缓冲区中是否为满,初值为0。

12345NN+11生产者消费者问题分析:当缓冲区没有放满N个产品时,生产者进程调用wait(Se)都不会成为阻塞状态,可把产品送入缓冲区。但缓冲区中已有N个产品时,生产者进程会阻塞。由于每送入一个产品后要调用Signal(Sf)

,所以此时Sf的值表示缓冲区中可取产品数,只要Sf≠0,消费者进程调用wait(Sf)

后可从缓冲区取产品。每取走一个产品就调用Signal(Se),因此增加了一个存放产品的位置。可以用指针in和out分别指示生产者进程向缓冲区送产品和消费者进程从缓冲区取产品的相对位置;指针的初始值为“0”。B:array[0..n-1]ofinteger;

in,out:integer; in:=out:=0;

Se,Sf:semaphore;Se:=n;Sf:=0;

ProcessproducerBeginRepeatProduceaproduct;Wait(Se);B[in]:=product;in:=(in+1)modn;Signal(Sf);Untilfalse

End;ProcessconsumerBeginRepeatWait(Sf);TakeaproductfromB[out];out:=(out+1)modn;Signal(Se);

Consumer;UntilfalseEnd;生产者消费者问题第三种情况:一组生产者,一组消费者,公用n个环形缓冲区

生产者消费者问题分析:生产者与消费者之间要同步M个生产者之间、R个消费者之间还必须互斥地访问缓冲区。如果M个生产者进程各自个向缓冲区送产品,当第一个生产者按指针in指示的位置送一个产品,但在改变指针前可能被打断执行,于是当第二个生产者送产品时仍按原指针所指出的位置存放,这样两个产品被放在同一个单元,造成数据丢失。同样,R个消费者都要取产品时可能都从指针out指出的位置取产品,造成一个产品被重复取出。生产者消费者问题定义四个信号量:Se——表示缓冲区是否为空,初值为n。Sf——表示缓冲区中是否为满,初值为0。mutex——生产者之间的互斥信号量,消费者之间的互斥信号量,初值为1。设缓冲区的编号为1~n1,定义两个指针in和out,分别是生产者进程和消费者进程使用的指针,指向下一个可用的缓冲区。生产者消费者问题生产者进程while(TRUE){

生产一个产品;P(Se);P(mutex);产品送往buffer[in];

in=(in+1)modn;

V(mutex);V(Sf);}生产者消费者问题消费者进程while(TRUE){P(Sf);P(mutex);从buffer[out]中取出产品;

out=(out+1)modn;

V(mutex);

V(Se);

消费该产品;}生产者消费者问题问题:如果生产者或消费者进程中的两个wait操作次序对调可以吗?在生产者—消费者问题中,如果将两个wait操作,即wait(Sf)和wait(mutex)互换位置后,可能引起死锁。考虑系统中缓冲区全满时,若一生产者进程先执行了wait(mutex)操作并获得成功,则当再执行wait(Se)操作时,它将因失败而进入阻塞状态,它期待消费者进程执行signal(Se)来唤醒自己,在此之前,它不可能执行signal(mutex)操作,从而使试图通过执行wait(mutex)操作而进入自己的临界区的其他生产者和所有消费者进程全部进入阻塞状态,这样容易引起系统死锁。

吃水果问题问题描述:桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进程的同步。吃水果问题分析:在本题中,爸爸、儿子、女儿共用一个盘子,盘中一次只能放一个水果。当盘子为空时,爸爸可将一个水果放入果盘中。若放入盘中的是桔子,则儿子吃,女儿必须等待;若放入盘中的是苹果,则女儿吃,儿子必须等待。本题实际上是生产者-消费者问题的一种变形。生产者放入缓冲区的产品有两类,消费者也有两类,每类消费者只消费其中固定的一类产品。吃水果问题应设置三个信号量:

S:表示盘子是否为空,其初值为l;So:表示盘中是否有桔子,其初值为0;Sa:表示盘中是否有苹果,其初值为0。吃水果问题father()

Son()

daughter(){

{

{

while(1)

while(1)

while(1)

{

{

{P(S);

P(So);

P(Sa);

将水果放入盘中;

从盘中取出桔子;

从盘中取出苹果;if(放入的是桔子)V(So);

V(S);

V(S);

elseV(Sa);

吃桔子;

吃苹果;}}}}}

}

吃水果问题2题目:桌上有一只盘子,允许存放一个水果,父亲专向盘中放苹果,母亲专向盘中放桔子,儿子专等吃盘里的桔子,女儿专等吃盘里的苹果。只要盘子空,则父亲或母亲可向盘中放水果,仅当盘中有自己需要的水果时,儿子或女儿可从中取出。请给出四人之间的同步关系,并用PV操作实现四人正确活动的程序。

吃水果问题2分析:四人之间的关系:1父亲、母亲要互斥使用盘子,所以两者之间是互斥关系;2父亲放的苹果,女儿吃,所以两者是同步关系;3母亲放的桔子,儿子吃,所以两者也是同步关系。semaphoreS_Plate=1,S_Apple=0,S_Orange=0;

voidfather()//父亲进程{while(1){P(S_Plate);

往盘子中放入一个苹果;

V(S_Apple);}}voidmother()//母亲进程{while(1){P(S_Plate);

往盘子中放入一个桔子;

V(S_Orange);}}voidson()//儿子进程{while(1){P(S_Orange);

从盘中取出一个桔子;

V(S_Plate);

吃桔子;

}}voiddaughter()//女儿进程{while(1){P(S_Apple);

从盘中取出一个苹果;

V(S_Plate);

吃苹果;

}}取动物问题题目:有一只铁笼子,每次只能放入一只动物,猎人向笼中放入老虎,农民向笼中放入猪,动物园等待取笼中的老虎,饭店等待取笼中的猪。试用P、V操作写出能同步执行的程序。取动物问题分析:四者之间的关系:1.猎人和农民要互斥使用笼子,所以两者之间是互斥关系;

2.猎人放老虎,动物园取老虎,所以两者是同步关系;3.农民房猪,饭店取猪,所以两者也是同步关系。semaphoreS_EmptyCage=1,S_Tiger=0,S_Pig=0;voidhunter()//猎人进程{while(1){P(S_EmptyCage);

往笼子里放入一只老虎;

V(S_Tiger);}}voidfarmer()//农民进程{while(1){P(S_EmptyCage);

往笼子里放入一只猪;

V(S_Pig);}}voidzoo()//动物园进程{while(1){P(S_Tiger);

从笼子里取出一只老虎;

V(S_EmptyCage);;

}}voidrestaurant()//饭店进程{while(1){P(S_Pig);

从笼子里取出一只猪;

V(S_EmptyCage);;

}}思考题1四个进程A、B、C、D都要读一个共享文件F,系统允许多个进程同时读文件F,但限制是:进程A和进程C不能同时读文件F,进程B和进程D也不能同时读文件F。请回答下面的问题:(1)应定义的信号量及初值:定义二个信号量S1、S2,初值均为1,即:S1=1,S2=1。其中进程A和C使用信号量S1,进程B和D使用信号量S2。(2)在下列的程序中填上适当的P、V操作,以保证它们能正确并发工作:

A()B()C()D(){{{{[1][3][5][7]readF;readF;readF;readF;[2]

[4][6][8]}}}}

1.当()时,进程从执行状态转变为就绪状态。

A.进程被调度程序选中

B.时间片到

C.等待某一事件

D.等待的事件发生2.下列各项工作步骤中,()不是创建进程所必需的步骤。

A.建立一个PCBB.作业调度程序为进程分配CPUC.为进程分配内存等资源

D.将PCB链入进程就绪队列3.下列关于进程的叙述中,正确的是()。

A.进程通过进程调度程序而获得CPU。

B.优先级是进行进程调度的重要依据,一旦确定不能改变。

C.在单CPU系统中,任一时刻都有1个进程处于运行状态。

D.进程申请CPU得不到满足时,其状态变为等待状态。BBA4.从资源管理的角度看,进程调度属于()。

A.I/O管理

B.文件管理

C.处理机管理

D.存储器管理5.一个进程释放一种资源将有可能导致一个或几个进程()。

A.由就绪变运行

B.由运行变就绪

C.由阻塞变运行

D.由阻塞变就绪6.一次I/O操作的结束,有可能导致()。

A.一个进程由睡眠变就绪

B.几个进程由睡眠变就绪

C.一个进程由睡眠变运行

D.几个进程由睡眠变运行CDA7.在下面的叙述中,不正确的是()。

A.一个进程可创建一个或多个线程

B.一个线程可创建一个或多个线程

C.一个线程可创建一个或多个进程

D.一个进程可创建一个或多个进程8.若系统中只有用户级线程,则处理机调度单位是(

)。

A.线程

B.进程

C.程序

D.作业9.下列几种关于进程的叙述,(

)最不符合操作系统对进程的理解?

A.进程是在多程序并行环境中的完整的程序。

B.进程可以由程序、数据和进程控制块描述。

C.线程是一种特殊的进程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论