第三章进程管理(3)_第1页
第三章进程管理(3)_第2页
第三章进程管理(3)_第3页
第三章进程管理(3)_第4页
第三章进程管理(3)_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

1、1操作系统原理操作系统原理Principles of Operating System第三章第三章进进 程程 管管 理理(3)3.6 进程同步进程同步n3.6.1 同步的概念同步的概念n3.6.2 私用信号量私用信号量n3.6.3 用用P,V原语操作实现同步原语操作实现同步n3.6.4 生产者生产者-消费者问题消费者问题3.6.1 同步的概念同步的概念n例子例子: 计算进程和打印进程共同使用同一缓计算进程和打印进程共同使用同一缓冲区冲区Buf。教材。教材P593.6.1 同步的概念同步的概念n直接制约:直接制约:一组在异步环境下的并发进程,一组在异步环境下的并发进程,各自的执行结果互为对方的执

2、行条件各自的执行结果互为对方的执行条件,从而,从而限制各进程的执行速度的过程称为并发进程限制各进程的执行速度的过程称为并发进程间的直接制约,简称间的直接制约,简称直接制约直接制约。n异步环境:异步环境:主要指主要指各并发进程各并发进程的的执行起始时执行起始时间的随机性间的随机性和和执行速度的独立性执行速度的独立性。3.6.1 同步的概念同步的概念n同步:同步:把异步环境下的一组并发进程,把异步环境下的一组并发进程,因直因直接制约接制约而而互相发送消息互相发送消息而进行而进行互相合作、互互相合作、互相等待相等待,使得各进程按一定的速度执行的过,使得各进程按一定的速度执行的过程称为程称为进程间的同

3、步进程间的同步。n具有同步关系的一组并发进程称为具有同步关系的一组并发进程称为合作进程合作进程。3.6.1 同步的概念同步的概念n合作进程间互相发送的合作进程间互相发送的信号信号称为称为消息消息或或事件事件。wait(消息名):进程等待合作进程发来消息名):进程等待合作进程发来“消息名消息名”的消息。的消息。signal(消息名):向合作进程发送(消息名):向合作进程发送“消息名消息名”的消息。的消息。例例n利用过程利用过程wait和和signal描述上例中的计算进描述上例中的计算进程程PC和打印进程和打印进程PP的同步关系。的同步关系。n(1) 设消息名设消息名Bufempty表示表示Buf

4、空,消息名空,消息名Buffull表示表示Buf中装满了数据。中装满了数据。n(2) 初始化初始化Bufempty=true,Buffull=false 。解解PC:A: wait(Bufempty) /等等合作者等等合作者Pp发来发来Bufempty为空的消息为空的消息计算计算Buf 计算结果计算结果Bufempty falsesignal(Buffull) /向合作者向合作者Pp发送发送Buffull为满的消息为满的消息GotoA解解PP:B: wait(Buffull) /等等合作者等等合作者Pc发来发来Buffull为满的消息为满的消息打印打印Buf中的数据中的数据清除清除Buf中的数

5、据中的数据Buffull falsesignal(Bufempty) /向合作者向合作者Pc发送发送Bufempty为空的消息为空的消息GotoB3.6.2 私用信号量私用信号量n私用信号量:私用信号量:只与制约进程及被制约进程有只与制约进程及被制约进程有关的信号量。关的信号量。n公用信号量:公用信号量:与一组并发进程有关的信号量。与一组并发进程有关的信号量。n进程进程Pi的私用信号量的私用信号量Semi:是:是从制约进程发从制约进程发送来的送来的、进程进程Pi的执行条件所需要的的执行条件所需要的消息消息。3.6.3 用用P,V原语操作实现同步原语操作实现同步n解决步骤:解决步骤:n为各并发进

6、程设置私用信号量;为各并发进程设置私用信号量;n为私用信号量赋初值;为私用信号量赋初值;1.利用,原语和私用信号量规定各进程的执利用,原语和私用信号量规定各进程的执行顺序。行顺序。例例设进程设进程PA和和PB通过缓冲区队列传递数据。通过缓冲区队列传递数据。PA为发送进程,为发送进程,PB为接收进程。为接收进程。PA发送数据时调用发送过程发送数据时调用发送过程deposit(data),PB接收数据时调用过程接收数据时调用过程remove(data)。且数据的发送和。且数据的发送和接收过程满足如下条件:接收过程满足如下条件: (1) 在在PA至少送一块数据入一个缓冲区之前,至少送一块数据入一个缓

7、冲区之前,PB不可能从缓冲区中不可能从缓冲区中取出数据(假定数据块长等于缓冲区长度);取出数据(假定数据块长等于缓冲区长度); (2) PA往缓冲队列发送数据时,至少有一个缓冲区是空的;往缓冲队列发送数据时,至少有一个缓冲区是空的; (3) 由由PA发送的数据块在缓冲队列中按先进先出(发送的数据块在缓冲队列中按先进先出(FIFO)方式排列。)方式排列。 描述发送过程描述发送过程deposit(data)和接收过程和接收过程remove(data)。分析分析nPa和和Pb要合作完成,这是一个同步问题,要合作完成,这是一个同步问题,要设置私用信号量。要设置私用信号量。n设设Pa(放,(放,depo

8、sit)的)的私用信号量私用信号量Bufempty,表示,表示空缓冲区的个数空缓冲区的个数,初值为,初值为n;n设设Pb(取,(取,remove)的)的私用信号量私用信号量Buffull,表示表示已用缓冲区的个数已用缓冲区的个数,初值为,初值为0。进程的操作流程进程的操作流程PA: deposit(data):是否有空缓冲区?无则等待。是否有空缓冲区?无则等待。按按FIFO方式选择一个空缓冲区方式选择一个空缓冲区Buf(x)Buf(x) dataBuf(x)置满标记置满标记设置缓冲区有数据的标志设置缓冲区有数据的标志PB:remove(data):是否有装满数据的缓冲区?无则等。是否有装满数据

9、的缓冲区?无则等。按按FIFO方式选择一个装满数据的缓方式选择一个装满数据的缓冲区冲区Buf(x);data Buf(x);Buf(x)置空标记;置空标记;设置缓冲区有空间的标志。设置缓冲区有空间的标志。解解PA: deposit(data):begin local xP(Bufempty)按按FIFO方式选择一个空缓冲区方式选择一个空缓冲区Buf(x)Buf(x) dataBuf(x)置满标记置满标记(Buffull)end解解PB: remove(data):Begin local x (Buffull););按按FIFO方式选择一个装满数据的缓冲区方式选择一个装满数据的缓冲区Buf(x)

10、;data Buf(x);Buf(x)置空标记;置空标记;(Bufempty););end思思 考考n1、在该题中需要考虑互斥吗?为什么?、在该题中需要考虑互斥吗?为什么?n2、如果每次只允许一个进程对缓冲队列进、如果每次只允许一个进程对缓冲队列进行操作时怎么办?行操作时怎么办?问题问题2分析分析n如果每次只允许一个进程对缓冲队列进行操如果每次只允许一个进程对缓冲队列进行操作时,涉及到进程间的互斥,需要设置一个作时,涉及到进程间的互斥,需要设置一个公用信号量公用信号量mutex,初值为,初值为1,表示可用缓,表示可用缓冲区的个数。冲区的个数。3.6.3 用用P,V原语操作实现同步原语操作实现同

11、步n用用P,V原语操作实现同步应注意的问题:原语操作实现同步应注意的问题:n分析进程间的制约关系,确定信号量种类。在确保进程分析进程间的制约关系,确定信号量种类。在确保进程间有正确的同步关系的情况下,哪个进程先执行,哪些间有正确的同步关系的情况下,哪个进程先执行,哪些进程后执行,彼此之间通过什么资源(信号量)进行协进程后执行,彼此之间通过什么资源(信号量)进行协调,从而明确设置哪些信号量。调,从而明确设置哪些信号量。n信号量的初值与相应资源的数量有关,也与信号量的初值与相应资源的数量有关,也与P、V操作操作在程序代码中出现的位置有关。在程序代码中出现的位置有关。1.同一信号量的同一信号量的P、

12、V操作要成对出现,但它们分别在不操作要成对出现,但它们分别在不同的进程代码中。同的进程代码中。例例 子子设公共汽车上有一位司机和一位售票员,它们的活设公共汽车上有一位司机和一位售票员,它们的活动如下,请分析司机与售票员之间的关系,如何动如下,请分析司机与售票员之间的关系,如何用用PV操作实现。操作实现。 司机:司机: 售票员:售票员:启动车辆启动车辆正常行车正常行车到站停车到站停车售票售票开车门开车门关车门关车门解解同步关系分析同步关系分析n为了安全起见,显然要求:为了安全起见,显然要求:关车门后才能启关车门后才能启动车辆;到站停车后才能开车门动车辆;到站停车后才能开车门。所以司机。所以司机和

13、售票员在到站停车、开门、关门、启动车和售票员在到站停车、开门、关门、启动车辆这几个活动之间存在着同步关系。辆这几个活动之间存在着同步关系。进程的操作流程进程的操作流程是否关门?是否关门?启动车辆启动车辆正常行驶正常行驶到站停车到站停车设车停标志设车停标志售票售票是否停车?是否停车?开车门开车门关车门关车门设门关标志设门关标志司机司机进程进程售票员进程:售票员售票员进程进程解解算法算法n由于司机与售票员之间要互通消息,由于司机与售票员之间要互通消息,司机司机进程进程设置一个设置一个私有信号量私有信号量run,用于判断司,用于判断司机机能否进行工作能否进行工作,初值为初值为1。售票员进程售票员进程

14、设设置一个置一个私有信号量私有信号量stop,用于判断,用于判断是否停是否停车车,售票员,售票员是否能够开车门是否能够开车门,初值为初值为0。解解算法算法n同步算法描述如下:同步算法描述如下:P(run)启动车辆启动车辆正常行驶正常行驶到站停车到站停车V(stop)售票售票P(stop)开车门开车门关车门关车门V(run)司机司机进程进程售票员进程:售票员售票员进程进程解解算法算法n程序中程序中PV操作出现的顺序与信号量的初值设操作出现的顺序与信号量的初值设置有关,以本题为例,算法描述如下时,置有关,以本题为例,算法描述如下时, run、stop的初值应为?的初值应为?售票售票P(stop)开

15、车门开车门关车门关车门V(run)售票员售票员进程:进程:正常行驶正常行驶到站停车到站停车 V(stop) P(run)启动车辆启动车辆司机司机进程进程例子例子n桌上有一空盘,允许存放一只水果。爸爸可桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果,也可向盘中放桔子,儿子专向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取规定当盘空时一次只能放一只水果供吃者取用,请用用,请用P、V原语实现爸爸、儿子、女儿三原语实现爸爸、儿子、女儿三个并发进程的关系。个并发进程的关系。分析分析n爸爸、儿子、女

16、儿共用一个盘子,盘中一次只能放爸爸、儿子、女儿共用一个盘子,盘中一次只能放一个水果。当盘子为空时,爸爸可将一个水果放入一个水果。当盘子为空时,爸爸可将一个水果放入果盘中。若放入果盘中的是桔子,则允许儿子吃,果盘中。若放入果盘中的是桔子,则允许儿子吃,女儿必须等待;若放入果盘中的是苹果,则允许女女儿必须等待;若放入果盘中的是苹果,则允许女儿吃,儿子必须等待。爸爸与儿子、爸爸与女儿之儿吃,儿子必须等待。爸爸与儿子、爸爸与女儿之间存在同步关系。间存在同步关系。n提示:提示:设置一个信号量表示可否向盘中放水果,一设置一个信号量表示可否向盘中放水果,一个信号量表示可否取桔子,一个信号量表示可否取个信号量

17、表示可否取桔子,一个信号量表示可否取苹果。苹果。解解n设置三个信号量设置三个信号量S、So、Sa,信号量,信号量S表示表示盘子是否为空,其初值为盘子是否为空,其初值为1;信号量;信号量So表示表示盘中是否有桔子,其初值为盘中是否有桔子,其初值为0;信号量;信号量Sa表表示盘中是否有苹果,其初值为示盘中是否有苹果,其初值为0。同步描述。同步描述如下:如下:解解int S1;int Sa0;int So0; main() begin father(); /*父亲进程父亲进程*/ son(); /*儿子进程儿子进程*/ daughter(); /*女儿进程女儿进程*/ end father() wh

18、ile(1) P(S); 将水果放入盘中将水果放入盘中; if(放入的是桔子)(放入的是桔子)V(So); else V(Sa); son() while(1) P(So); 从盘中取出桔子从盘中取出桔子; V(S); 吃桔子吃桔子; daughter() while(1) P(Sa); 从盘中取出苹果从盘中取出苹果; V(S); 吃苹果吃苹果; 3.6.4 生产者/消费者问题n生产者消费者问题是一种同步问题的抽生产者消费者问题是一种同步问题的抽象描述。计算机系统中的每个进程都可象描述。计算机系统中的每个进程都可以消费(使用)或生产(释放)某类资以消费(使用)或生产(释放)某类资源。这些资源可

19、以是硬件资源,也可以源。这些资源可以是硬件资源,也可以是软件资源。是软件资源。n当某一进程使用某一资源时,可以看作当某一进程使用某一资源时,可以看作是消费,称该进程为是消费,称该进程为消费者消费者。而当某一。而当某一进程释放某一资源时,它就相当于进程释放某一资源时,它就相当于生产生产者者。问题描述把一个长度为的有界缓冲区(把一个长度为的有界缓冲区(n0)与一群生产者进程与一群生产者进程1,2,m和一群消费者进程和一群消费者进程1,2,k联系起联系起来(如图来(如图3.15所示)。所示)。设生产者进程和消费者进程是互相等效的,其中,各生产者进设生产者进程和消费者进程是互相等效的,其中,各生产者进

20、程使用的过程程使用的过程deposit(data)和各消费者使用的过程和各消费者使用的过程remove(data)可描述如下:可描述如下:首先,上述生产者首先,上述生产者-消费者问题是一个同步问题。即生产者和消费者问题是一个同步问题。即生产者和消费者之间满足如下条件:消费者之间满足如下条件:(1) 消费者想接收数据时,有界缓冲区中至少有一个单元是满消费者想接收数据时,有界缓冲区中至少有一个单元是满的;的;(2) 生产者想发送数据时,有界缓冲区中至少有一个单元是空生产者想发送数据时,有界缓冲区中至少有一个单元是空的。的。另外,由于有界缓冲区是临界资源,因此,各生产者进程和各另外,由于有界缓冲区是

21、临界资源,因此,各生产者进程和各消费者进程之间必须互斥执行。消费者进程之间必须互斥执行。图图3.15 生产者生产者-消费者问题消费者问题1问题分析n为解决生产者消费者问题,应该设两个同步信为解决生产者消费者问题,应该设两个同步信号量,一个说明号量,一个说明空缓冲区的数目空缓冲区的数目,用,用avail表示,表示,初值为有界缓冲区的大小初值为有界缓冲区的大小N,另一个说明,另一个说明已用缓已用缓冲区的数目冲区的数目,用,用full表示,初值为表示,初值为。n由于在此问题中有由于在此问题中有M个生产者和个生产者和N个消费者,它个消费者,它们在执行生产活动和消费活动中要对有界缓冲们在执行生产活动和消

22、费活动中要对有界缓冲区进行操作。区进行操作。有界缓冲区是一个临界资源有界缓冲区是一个临界资源,必,必须须互斥使用互斥使用,需要设置一个,需要设置一个互斥信号量互斥信号量mutex,其初值为其初值为。进程的操作流程进程的操作流程n生产者进程:生产者进程:deposit(data):判断缓冲区是否有空间?判断缓冲区是否有空间?判断缓冲区是否可操作?判断缓冲区是否可操作?送数据入缓冲区某单元送数据入缓冲区某单元设缓冲区有数据的标志。设缓冲区有数据的标志。设缓冲区可操作的标志。设缓冲区可操作的标志。n消费者进程:消费者进程: remove(data):判断缓冲区是否有数据?判断缓冲区是否有数据?判断缓

23、冲区是否可操作?判断缓冲区是否可操作?取缓冲区中某单元数据取缓冲区中某单元数据设缓冲区有空间的标志。设缓冲区有空间的标志。设缓冲区可操作的标志。设缓冲区可操作的标志。问题解问题解n生产者进程:生产者进程: deposit(data):begin(avail)(mutex)送数据入缓冲区某单元送数据入缓冲区某单元(full)(mutex)end问题解问题解n消费者进程:消费者进程: remove(data):begin(full)(mutex)取缓冲区中某单元数据取缓冲区中某单元数据(avail)(mutex)end思思 考考n上例中生产者进程、消费者进程中的两个上例中生产者进程、消费者进程中的

24、两个V操作是否可以交换位置,操作是否可以交换位置,P操作呢?为什么?操作呢?为什么?读者读者/写者问题写者问题 有两组并发进程有两组并发进程: : 读者和写者读者和写者, ,共享一组数据区共享一组数据区 要求:要求: 允许多个读者同时执行读操作允许多个读者同时执行读操作 不允许读者、写者同时操作不允许读者、写者同时操作 不允许多个写者同时操作不允许多个写者同时操作读者优先读者优先如果读者来:如果读者来:1 1)无读者、写者,新读者可以读)无读者、写者,新读者可以读2 2)有写者等,但有其它读者正在读,则新读者有写者等,但有其它读者正在读,则新读者也可以读也可以读3 3)有写者写,新读者等)有写

25、者写,新读者等如果写者来:如果写者来:1 1)无读者,新写者可以写)无读者,新写者可以写2 2)有读者,新写者等待)有读者,新写者等待3 3)有其它写者,新写者等待)有其它写者,新写者等待读者优先的解法读者优先的解法n设公用信号量设公用信号量w,用于读者和写者、写者和写者之间的互斥,用于读者和写者、写者和写者之间的互斥,初值初值w=1。n只要有一个读者进程在读,便不允许读者进程去写,所以要只要有一个读者进程在读,便不允许读者进程去写,所以要设一个设一个全局变量全局变量readcount,表示正在读的读者数目,初值,表示正在读的读者数目,初值readcount =0;仅当仅当readcount=

26、0, 读者进程才需要执行读者进程才需要执行P(w)操作。操作。n若若P(w)操作成功,读者进程便可去读,相应地做操作成功,读者进程便可去读,相应地做readcount +1操作操作。同理,。同理,仅当读者进程完成时执行了仅当读者进程完成时执行了Readcount-1操作后其值为操作后其值为0时,才须执行时,才须执行V(w)操作,以便让写者进程写操作,以便让写者进程写。n又因为又因为Readcount是一个可被多个读者进程访问的临界资源是一个可被多个读者进程访问的临界资源,因此,为它设置一个互斥信号量因此,为它设置一个互斥信号量mutex,用于对,用于对readcount 这个临界资源的互斥访问

27、,初值这个临界资源的互斥访问,初值mutex=1读者:读者: while (1) P(mutex); readcount +; if (readcount=1) P (w); V(mutex); 读读 P(mutex); readcount -; if (readcount=0) V(w); V(mutex); ;写者:写者: while (1) P(w); 写写 V(w); ;例例 子子n某寺庙,有小和尚、老和尚若干庙内有一某寺庙,有小和尚、老和尚若干庙内有一水缸,由小和尚提水入缸,供老和尚饮水缸,由小和尚提水入缸,供老和尚饮用水缸可容纳用水缸可容纳 30 桶水,每次入水、取水桶水,每次入水

28、、取水仅为仅为1桶,不可同时进行。水取自同一井中,桶,不可同时进行。水取自同一井中,水井径窄,每次只能容纳一个水桶取水。设水井径窄,每次只能容纳一个水桶取水。设水桶个数为水桶个数为5个,试用信号量和个,试用信号量和 PV 操作给操作给出老和尚和小和尚的活动。出老和尚和小和尚的活动。 解解n小和尚提水,老和尚取水,他们之间是一种合作关系,涉小和尚提水,老和尚取水,他们之间是一种合作关系,涉及进程的及进程的同步同步;设置两个私用信号量:;设置两个私用信号量:empty为为小和尚小和尚进进程的程的私用信号量私用信号量,表示水缸中,表示水缸中还可以装多少桶水还可以装多少桶水,初值为,初值为30;ful

29、l为为老和尚老和尚进程的进程的私用信号量私用信号量,表示,表示水缸中有多少桶水缸中有多少桶水水,初值为,初值为0。n对水缸的操作中,每次入水、取水仅为对水缸的操作中,每次入水、取水仅为1桶,不可同时进行。桶,不可同时进行。水缸是共享资源水缸是共享资源。这涉及到进程的。这涉及到进程的互斥互斥。设置。设置公用信号量公用信号量mutex_bigjar,用于实现对水缸的互斥操作,初值为,用于实现对水缸的互斥操作,初值为1。n水取自同一井中,水井径窄,每次只能容纳一个水桶取水。水取自同一井中,水井径窄,每次只能容纳一个水桶取水。井也是共享的资源井也是共享的资源,涉及到进程的,涉及到进程的互斥互斥。设置公

30、用信号量。设置公用信号量mutex_well,用于实现对井的互斥操作,初值为,用于实现对井的互斥操作,初值为1。n所有的和尚都要用桶来提水或取水,所有的和尚都要用桶来提水或取水,水桶是共享资源水桶是共享资源,涉,涉及进程的及进程的互斥互斥。设置。设置公用信号量公用信号量bucket,表示,表示空桶的个数空桶的个数,初值为初值为5。解解semaphore empty=30; / 表示缸中目前还能装表示缸中目前还能装多少桶水,初始时还能装多少桶水,初始时还能装 30 桶水桶水 semaphore full=0; / 表示缸中有多少桶水,初始表示缸中有多少桶水,初始时缸中没有水时缸中没有水 sema

31、phore buckets=5; / 表示有多少只空桶可表示有多少只空桶可用,初始时有用,初始时有 5 只桶可用只桶可用 semaphore mutex_well=1; / 用于实现对井的用于实现对井的互斥操作互斥操作 semaphore mutex_bigjar=1; / 用于实现对缸的用于实现对缸的互斥操作互斥操作 解解young_monk(): while(ture) P(empty); P(buckets);get a bucket ; go to the well; P(mutex_well); get water; V(mutex_well); go to the temple;

32、P(mutex_bigjar); pure the water into the bigjar; V(mutex_bigjar); V(buckets); V(full); old_monk() : while(ture) P(full); P(buckets); get a bucket; P(mutex_bigjar); get water; V(mutex_bigjar); V(buckets); V(empty); 例例 子子n有一个阅览室,共有有一个阅览室,共有100个座位,读者进个座位,读者进入时必须先在一张登记表上登记,该表为入时必须先在一张登记表上登记,该表为每一座位列一表目,

33、包括座号和读者姓名每一座位列一表目,包括座号和读者姓名等,读者离开时要消掉登记的信息,试问:等,读者离开时要消掉登记的信息,试问:n为描述读者的动作,应编写几个程序,设置几为描述读者的动作,应编写几个程序,设置几个进程?个进程?1.试用试用PV操作描述读者进程之间的关系。操作描述读者进程之间的关系。 解解n读者的动作有两个:一是读者的动作有两个:一是填表填表进入阅览室进入阅览室,这时要,这时要考虑阅览室里是否有座位;一是读者阅读完毕,考虑阅览室里是否有座位;一是读者阅读完毕,离离开阅览室开阅览室清除表清除表,这时的操作要考虑阅览室里是否,这时的操作要考虑阅览室里是否有读者。读者在阅览室读书时,

34、由于没有引起资源有读者。读者在阅览室读书时,由于没有引起资源的变动,不算动作变化。的变动,不算动作变化。 n算法的信号量有三个:算法的信号量有三个:seats表示阅览室是否表示阅览室是否有座位(初值为有座位(初值为100,代表阅览室的空座位数);,代表阅览室的空座位数);readers表示阅览室里的读者数,初值为表示阅览室里的读者数,初值为0;设置公用信号量设置公用信号量mutex ,表示被共享的,表示被共享的登记表登记表这这一一临界资源临界资源,初值为,初值为1,用来防止两个以上读者进,用来防止两个以上读者进程同时查表。程同时查表。 解解读者进入阅览室的动作描述读者进入阅览室的动作描述get

35、in:while(TRUE) P (seats); /*没有座位则离开没有座位则离开*/ P(mutex); /*进入临界区(查表)进入临界区(查表)*/ 填写登记表填写登记表; 进入阅览室读书进入阅览室读书; V(mutex); /*离开临界区离开临界区*/ V(readers); 解解读者离开阅览室的动作描述读者离开阅览室的动作描述getout:while(TRUE) P(readers) /*阅览室是否有人读书阅览室是否有人读书*/ P(mutex) /*进入临界区进入临界区*/ 消掉登记;消掉登记; 离开阅览室;离开阅览室; V(mutex) /*离开临界区离开临界区*/ V(seat

36、s) /*释放一个座位资源释放一个座位资源*/例例 子子n桌子上有一只盘子,桌子上有一只盘子,最多可容纳两个水果最多可容纳两个水果,每次只能放入或取出一个水果每次只能放入或取出一个水果,爸爸专向盘,爸爸专向盘子中放苹果(子中放苹果(apple),妈妈专向盘子中放),妈妈专向盘子中放橘子(橘子(orange),两个儿子专等吃盘子中),两个儿子专等吃盘子中的橘子,两个女儿专等吃盘子中的苹果,请的橘子,两个女儿专等吃盘子中的苹果,请用用P.V操作来实现爸爸、妈妈、儿子、女儿操作来实现爸爸、妈妈、儿子、女儿间的同步与互斥关系。间的同步与互斥关系。 解解n该题是生产者该题是生产者/消费者的变形,有两对生

37、产消费者的变形,有两对生产者和消费者,生产者需指明是给哪个消费者者和消费者,生产者需指明是给哪个消费者的产品,但消费者取走产品后无须特别通知的产品,但消费者取走产品后无须特别通知某个生产者,因为空出的缓冲区可由两个生某个生产者,因为空出的缓冲区可由两个生产者随意争夺。产者随意争夺。解解n盘子为互斥资源,可以放两个水果,因此设生产者(爸爸、盘子为互斥资源,可以放两个水果,因此设生产者(爸爸、妈妈)私用信号量妈妈)私用信号量empty,初值为,初值为2;设公用信号量;设公用信号量mutex,初值为初值为1,控制对盘子的互斥访问;设置女儿进程的私用信号,控制对盘子的互斥访问;设置女儿进程的私用信号量

38、量apple,表示盘子中的苹果数,儿子进程的私用信号量,表示盘子中的苹果数,儿子进程的私用信号量orange,表示盘中橘子个数,初值均为,表示盘中橘子个数,初值均为0。n爸爸放苹果前先看看有无空间,若有,则放入苹果,向女儿爸爸放苹果前先看看有无空间,若有,则放入苹果,向女儿发信号发信号V(apple);妈妈放橘子前先看看盘子有无空间,若);妈妈放橘子前先看看盘子有无空间,若有,放入橘子后向儿子发信号有,放入橘子后向儿子发信号V(orange)。)。n女儿先看看有无苹果,若有,则取走苹果后将盘子置空女儿先看看有无苹果,若有,则取走苹果后将盘子置空V(empty);儿子先看看有没有橘子,若有,则取走橘子后);儿子先看看有没有橘子,若有,则取走橘子后将盘子置空。将盘子置空。解解 爸爸、妈妈、儿子、女儿进程如下:爸爸、妈妈、儿子、女儿进程如下: 爸爸爸爸 妈妈妈妈 女儿女儿 儿子儿子L1:P(empty) L2:P(empty) L3:P(apple) L4:P(orange) P(mutex) P(mutex) P(mutex) P(mutex) 放苹果放苹果 放橘子放橘子 取苹果取苹果 取橘子取橘子 V(mutex) V(mu

温馨提示

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

评论

0/150

提交评论