《计算机操作系统》课件第4章 (2).ppt

上传人(卖家):momomo 文档编号:7862535 上传时间:2024-08-28 格式:PPT 页数:124 大小:800KB
下载 相关 举报
《计算机操作系统》课件第4章 (2).ppt_第1页
第1页 / 共124页
《计算机操作系统》课件第4章 (2).ppt_第2页
第2页 / 共124页
《计算机操作系统》课件第4章 (2).ppt_第3页
第3页 / 共124页
《计算机操作系统》课件第4章 (2).ppt_第4页
第4页 / 共124页
《计算机操作系统》课件第4章 (2).ppt_第5页
第5页 / 共124页
点击查看更多>>
资源描述

1、第 4 章进程同步与通信4.1 与时间有关的错误4.2 进程的互斥4.3 信号量与PV操作4.4 进程同步4.5 进程通信4.6 进程同步实现举例4.7 进程通信的实现举例习题第 4 章进程同步与通信在采用多道程序设计技术的系统中,若干个作业可以同时执行,而每一个作业又需要由多个进程的协作来完成。因此,系统中会同时存在许多进程来竞争处理机。另外,在一个进程运行过程中,由于自身或外界的原因,该进程可能被中断,且断点是不固定的。一个进程被中断后,哪个进程可以运行,被中断的进程什么时候再去占用处理机,这些问题是与进程调度策略有关的,所以,进程的执行速度是不能由自己来控制的。4.1 与时间有关的错误与

2、时间有关的错误第 4 章进程同步与通信若系统中存在一组进程的执行在时间上是重叠的,就称该组进程具有并发性,这组进程就被称为“并发进程”。并发进程相互之间可能是无关的,也可能是有交往的。如果一个进程的执行不影响其他进程的执行,且与其他进程的进展情况无关,即它们是各自独立的,则称这些并发进程相互之间是无关的。如果一个进程的执行可能影响其他进程的执行结果,则称这些并发进程相互之间是有交往的。对于有交往的并发进程来说,可能有若干并发进程同时使用共享资源,即一个进程一次使用未结束,另一进程就开始使用,形成交替使用共享资源。如果对这种情况不加控制,在共享资源时就会出错。第 4 章进程同步与通信其中观察者进

3、程能识别卡车,并对通过的卡车计数,报告者进程定时将观察者的计数值打印输出,每次打印后把计数值清“0”。两个进程的并发执行可完成对每小时中卡车流量的统计,两个进程的功能描述如下:main()int count=0;/*用于计数*/cobegin Process Observer while(1)observe a lorry;count=count+1;第 4 章进程同步与通信 Process Reporter while(1)printf(%d,count);count=0;coend 第 4 章进程同步与通信在cobegin 和coend之间的进程为可并发执行的进程。观察者进程和报告者进程并

4、发执行时可能有如下两种情况:(1)报告者进程执行时无卡车通过。这种情况下,报告者进程把上一小时通过的卡车数打印输出后将计数器清“0”,完成了一次任务后,当有卡车通过时,观察者进程重新开始对一个新时间段内的流量进行统计。第 4 章进程同步与通信(2)报告者进程执行时有卡车通过。当报告者进程工作时,启动了打印机,在等待打印机打印输出时恰好有一辆卡车通过,这时,观察者进程工作将计数器count的值又增加“1”。报告者进程在打印完成后继续执行count=0,将计数器上新增加的“1”也清除了。如果在打印输出期间有多个卡车通过,观察者进程虽然将它们记录到计数器上,但都因报告者进程执行count=0而把计数

5、值丢失了,导致了统计结果的错误。第 4 章进程同步与通信可见,由于并发进程执行的随机性,其中一个进程对另一个进程的影响是不可预知的。关键是它们都涉及到共享变量count,当在不同时刻交替地修改了count的值就会造成结果的不正确。导致不正确的原因与进程占用处理机的时间、执行的速度以及外界的影响有关。这些因素都与时间有关,所以称为“与时间有关的错误”。第 4 章进程同步与通信4.2.1 临界资源临界资源有交往的并发进程执行时出现与时间有关的错误,其根本原因是对共享资源的使用不受限制,当进程交叉使用了共享资源就造成了错误。例如,进程A,B共享一台打印机,若让它们任意使用,那么可能发生的情况是:两个

6、进程的输出结果将交织在一起,很难区分。解决这一问题的办法是:进程A要使用打印机时应先提出申请,一旦系统把资源分配给它,就一直为它所独占。这时,即使进程B要使用打印机,也必须等待,直到进程A用完并释放后,系统才把打印机分配给进程B使用。4.2 进进程程的的互互斥斥第 4 章进程同步与通信由此可见,虽然系统中可同时存在许多进程,它们共享着各种资源,然而有许多资源一次只能为一个进程使用。通常把一次仅允许一个进程使用的资源称为临界资源。许多物理设备,如输入机、打印机、磁带机等都具有这种性质。除了物理设备外,还有一些软件资源,如变量、数据、表格、队列等也都具有这一特点。第 4 章进程同步与通信允许若干进

7、程均能访问和修改的存储单元称为公共变量。并发进程对公共变量进行访问和修改时,必须作某种限制,否则就会产生与时间有关的错误。例如,在一个机票预订系统中,某一机座的订购情况由一个确定的内存单元的内容表示,假设把若干个订票处看成为若干个访问这一内存单元的进程。如果一次有两个或n个进程同时存取该变量,那么就有可能使两家或几家订票处同时帮顾客订到相同的机座。第 4 章进程同步与通信所以,当两个(或n个)进程可能异步地改变公共数据区内容时,必须防止两个(或n个)进程同时存取或改变数据。如果两个进程共用一个变量,则它们必须顺序地使用,即一个进程对公共变量操作完毕后,另一个进程才能去访问和修改这一变量。综上所

8、述,对公共变量这样的临界资源的共享有这样的限制:共享的各方不能同时读写同一数据区,只有当一方读写完成后,另一方才能读写。到底哪一方先读写,要根据问题的性质和设计人员的意图而定。第 4 章进程同步与通信4.2.2 临界区临界区在每个进程中,访问临界资源的那段程序能够从概念上分离出来,因而称为临界区或临界段。它就是进程中对公共变量进行访问与修改的程序段,称为相对于该公共变量的临界区。例如,前面提到的自动计数系统中,观察者进程的临界区是“count=count+1”,报告者进程的临界区是“printf(%d,count);count=0;”。第 4 章进程同步与通信如果有进程在相关临界区执行,不让另

9、一个进程进入相关的临界区执行,就不会形成多个进程对共享变量交叉访问,于是就可以避免出现与时间有关的错误。在观察者和报告者进程并发执行时,当报告者进程启动打印机后,在执行count=0之前,虽然观察者进程发现有卡车通过,但应该限制观察者进程进入相关临界区(即暂不执行count=count+1),直到报告者进程执行了count=0退出临界区,观察者进程才可以执行,否则就可能在观察者进程执行完count=count+1后,报告者进程执行了count=0,而导致数据丢失。当报告者进程退出临界区后,观察者进程再进入临界区执行,第 4 章进程同步与通信这样就不会交替地修改count的值,观察到的卡车数被统

10、计在下一个时间段内,不会出现数据丢失。对若干进程共享某一变量的相关临界区的管理应满足如下三个要求:(1)每次最多有一个进程处于临界区。(2)任何一个进入临界区执行的进程必须在有限的时间内退出临界区。(3)当有若干进程欲进入它的临界区时,应在有限时间内使进程进入临界区。需要注意的一点是,临界区是对某一资源而言的,对于不同资源的临界区,它们之间是不相交的,不必互斥执行。第 4 章进程同步与通信4.2.3 互斥的概念互斥的概念在操作系统中,当一个进程进入临界区使用临界资源时,另一个进程必须等待,当占用临界资源的进程退出临界区后,另一进程才被允许去访问此临界资源。进程之间的这种相互制约关系被称为互斥。

11、下面几节将列出处理互斥问题的几种方法。第 4 章进程同步与通信4.2.4 上锁和解锁操作上锁和解锁操作在大多数同步机构中,必须用一个标志来代表某一资源的状态。比如,标志为“0”表示未被使用,标志为“1”表示已被使用。这一标志经常被称为锁或信号量。对于每一共享数据块或设备都要有一个单位的锁位。常用的锁位值为“0”表示资源可用,为“1”表示资源已被占用。第 4 章进程同步与通信进程在使用某一共享资源之前必须完成下列操作:(1)考察锁位的值。(2)如果原来的值为0,将锁位置1。(3)如果原来的值为1,则返回第一步再考察。系统提供在一个锁位W上的两个原语操作:上锁原语LOCK(W)和开锁原语UNLOC

12、K(W),其功能可描述如下:LOCK(W)UNLOCK(W)L:if W=1 then GOTO LW=0;else W=1;第 4 章进程同步与通信4.2.5 利用上锁和解锁操作实现进程互斥利用上锁和解锁操作实现进程互斥使用上锁原语和开锁原语可以解决并发进程的互斥问题,任何欲进入临界区的进程,必须先执行上锁原语,若上锁原语顺利通过,则进程可进入临界区,当完成对临界资源的访问后再执行开锁原语,释放该临界资源。第 4 章进程同步与通信对两个进程关于临界资源的操作可描述为:进程 P1 进程 P2 LOCK(W);LOCK(W);CS1 CS2 UNLOCK(W);UNLOCK(W);其中,CS1和

13、 CS2代表两个进程所对应的临界区。第 4 章进程同步与通信4.3.1 信号量的概念信号量的概念信号量是一个确切的二元组(S,Q),S是一个具有非负初值的整型变量,Q是一个初始状态为空的队列。整型变量S代表资源的实体,操作系统利用它的状态对并发进程、共享资源进行管理。信号量的值只能通过P,V操作来改变,其可能的取值范围是负整数、零、正整数。信号量是操作系统中实现进程间同步和通信的常用工具。一个信号量的建立必须经过说明,即应该准确说明S的意义和初值。每个信号量都有相应的一个队列,在建立信号量时,队列为空。4.3 信号量和信号量和PV操作操作第 4 章进程同步与通信4.3.2 PV操作操作信号量的

14、数值仅能由P,V操作加以改变。对信号量的P操作记为P(S),对信号量的V操作记为V(S),它们都是不可分割的原语操作。它们的主要操作过程如下:1.P操作过程操作过程(1)S值减1。(2)若相减结果大于或等于0,则进程继续执行。(3)若相减结果小于0,则该进程被阻塞,并将它插入到该信号量的等待队列中,然后转进程调度。第 4 章进程同步与通信2.V操作过程操作过程(1)S值加1。(2)若相加结果大于0,则进程继续执行。(3)若相加结果小于或等于0,则从该信号量的等待队列中移出一个进程,解除它的等待状态,然后返回本进程继续执行。第 4 章进程同步与通信4.3.3 利用信号量实现进程互斥利用信号量实现

15、进程互斥为了实现对相关临界区的管理要求,先分析一下P,V操作的两个过程,如果把信号量S的初值定为“1”,此时有若干个进程都要调用P(S),则只有第一个调用P(S)的进程不会处于等待而可以继续执行下去。P(S)被调用一次后S的值变为“0”,以后其他进程调用P(S)时,在执行S=S-1后,S的值总是小于“0”,于是这些进程均被置成等待信号量S的状态。直到有进程调用一次V(S),将信号量S加“1”,若其结果不大于“0”,说明有进程正处于等待信号量S的状态,这时V(S)将释放其中的一个进程,每调用一次V(S)就可释放一个等待信号量S的进程。第 4 章进程同步与通信因此,用PV操作能够实现对相关临界区的

16、管理要求。只要用一个信号量与一组涉及共享变量的相关临界区联系起来,信号量的初值定为“1”,任何一个进程要进入临界区前先调用P操作,执行完临界区的操作后,退出临界区时调用V操作。第 4 章进程同步与通信例如,设两个并发进程A和B,具有相对于变量N的临界段CSA和CSB,用信号量实现它们的互斥情况可描述如下:进程 A 进程 B P(S);P(S);CSA;CSB;V(S);V(S)第 4 章进程同步与通信对于两个并发进程,互斥信号量的值仅取1、0、-1三个值。若S=1,表示没有进程进入临界区;若S=0,表示有一个进程进入临界区;若S=-1,表示一个进程进入临界区,另一个进程等待进入。下面请大家思考

17、这样一个问题,如果N个并发进程共用一个公共变量Q,用信号量和PV操作实现这N个进程的互斥,信号量的取值范围如何呢?第 4 章进程同步与通信首先要把信号量的初值定为“1”,当N个进程中有一个进程进入临界区时,由于调用了P(S),则信号量的值将变为“0”。其余N-1个进程也要调用P(S),而且第一个进程没有退出临界区,导致了N-1个进程均被置成等待信号量S的状态,当第二个进程置成等待状态时,信号量的值为-2,依次类推,-3、-4,直到信号量的值为-(N-1),此时N-1个进程都入了等待队列。所以,信号量的取值范围为-(N-1),1。第 4 章进程同步与通信前面曾讨论过交通路口的自动计数系统中出现的

18、与时间有关的错误,现在可以用PV操作来解决这个问题,具体过程描述如下:main()int count=0;int s=1;/*互斥信号量*/cobegin Process Observer 第 4 章进程同步与通信 while(1)observe a lorry;P(S);count=count+1;V(S);Process Reporter 第 4 章进程同步与通信 while(1)P(S);printf(%d,count);count=0;V(S);coend 第 4 章进程同步与通信4.3.4 哲学家进餐问题哲学家进餐问题哲学家问题是描述有5个哲学家,它们的生活方式是交替地进行思考和进餐

19、。哲学家们共用一张圆桌,分别坐在周围的5把椅子上。在圆桌上有5个碗和5支筷子,平时一个哲学家进行思考,饥饿时便试图取用其左右最靠近他的筷子,只有在他拿到两支筷子时才能进餐。进餐毕,放下筷子又继续思考。请用信号量和PV操作说明这五位哲学家的同步过程。第 4 章进程同步与通信经过分析可以知道,相邻的两个哲学家是不能同时拿起它们中间的筷子的,在使用这个筷子的时候,哲学家们必须互斥使用。由于每个哲学家之间的筷子都不能同时拿起,因此,需要设置5个互斥信号量,下面是具体的实现过程:main()int chopstick1=1;int chopstick2=1;int chopstick3=1;int ch

20、opstick4=1;int chopstick5=1;cobegin 第 4 章进程同步与通信 Process Ph1 while(1)P(chopstick1);进餐;V(chopstick2);讨论问题;第 4 章进程同步与通信 Process Ph2 while(1)P(chopstick2);进餐;V(chopstick3);讨论问题;第 4 章进程同步与通信 Process Ph3 while(1)P(chopstick3);进餐;V(chopstick4);讨论问题;第 4 章进程同步与通信第 4 章进程同步与通信 Process Ph5 while(1)P(chopstick5

21、);进餐;V(chopstick1);讨论问题;coend 第 4 章进程同步与通信4.3.5 读者写者问题读者写者问题在计算机系统中,有些文件是可以供若干进程共享的。假定有某个共享文件F,系统允许进程对文件F读或者修改,但规定:(1)多个进程可以同时读文件F。(2)任一个进程在对文件F进行修改时不允许其他进程对文件进行读或者修改。(3)当有进程在读文件时不允许任何进程去修改文件。第 4 章进程同步与通信在这个问题中,可以把想读文件的进程称为读者,把想修改文件的进程称为写者。当有多个读者和写者都要对文件读或写时,按规定每次只允许一个进程执行写操作且有进程执行写时不允许进程去读文件。显然,写者和

22、写者之间要互斥,写者和读者之间也要互斥,但多个读者之间可同时读。下面用PV操作实现“读者和写者”问题。第 4 章进程同步与通信main()int rc=0;/*记录读者的个数*/int s=1;/*互斥信号量,用于读者和写者之间的互斥*/int sr=1;/*互斥信号量,用于对访问公共变量 rc 的互斥*/cobegin Process Readeri(i=1,2,)第 4 章进程同步与通信 while(1)P(sr);if(rc=1)then P(S);rc=rc+1;V(sr);read file F;P(sr);rc=rc-1;if(rc=0)then V(S);V(sr);第 4 章进

23、程同步与通信 Process Writerj(j=1,2,)while(1)P(S);write file F;V(S);coend 第 4 章进程同步与通信4.4.1 同步的概念同步的概念利用信号量可以解决进程的互斥问题,互斥主要解决并发进程对临界区的使用问题。这种基于临界区控制的交互作用是比较简单的,只要各进程对临界区的执行时间互斥,每个进程就可忽略其他进程的存在和作用。4.4 进进 程程 同同 步步第 4 章进程同步与通信在计算机系统中,还会存在一组相互合作的进程实现一个共同的任务的情况。在这组相互合作的并发进程中,每一个进程都以各自独立、不可预知的速度向前推进,它们之间要协作,就要交换

24、一定的信息,需要彼此知道相互的存在和作用。例如,当某进程未获得其合作进程发出的消息之前,该进程就等待,直到所需信息收到时才变为就绪状态以便继续执行,从而实现各进程的协调运行。第 4 章进程同步与通信所谓同步,就是并发进程在一些关键点上可能要互相等待与互通消息,这种相互制约的等待与互通消息称为进程同步。同步意味着两个或多个进程之间根据它们一致同意的协议进行相互作用。要实现同步,一定存在着必须遵循的同步规则。第 4 章进程同步与通信同步的例子不仅在操作系统中有,在日常生活中也大量存在。例如,医生为某病员诊病,认为需要做某些化验,于是,就为病员开了化验单。病员取样送到化验室,等待化验完毕交回化验结果

25、,然后继续诊病。医生为病员诊病是一个进程,化验室的化验工作又是另一个进程,它们是各自独立的活动单位,但他们共同完成医疗任务,所以需要交换信息。上述这两个合作进程之间的同步关系为:化验进程只有在接收到诊病进程的化验单后才开始工作;而诊病进程只有获得化验结果后才能继续为该病员诊病,并根据化验结果确定医疗方案。第 4 章进程同步与通信在操作系统中进程同步的例子:为了把原始的一批记录加工成当前需要的记录,创建两个进程A和B。进程A启动输入设备不断地读记录,每读一个记录,存入缓冲区,进程B从缓冲区中取出记录进行加工。第 4 章进程同步与通信进程A和进程B是两个并发进程,它们共享缓冲区,如果对两个进程不进

26、行制约的话就会造成如下错误:(1)当进程A的执行速度超过进程B的执行速度时,可能进程A把一个记录存入缓冲区后,进程B还没有取走,进程A又把新读出的一个记录存入缓冲区,后一个记录就会把尚未取走的记录覆盖了,造成记录的丢失。(2)当进程B的执行速度超过进程A的执行速度时,可能进程B从缓冲区取出一个记录并加工后,进程A仍没有把下一个新记录存入缓冲区,而进程B却又从缓冲区去取记录,造成重复地取出同一个记录加工。第 4 章进程同步与通信用进程互斥的办法不能克服上述两种错误,事实上,进程A和进程B虽然共享缓冲区,但它们都是在无进程使用缓冲区时才向缓冲区存记录或从缓冲区取记录的。也就是说,它们在互斥使用共享

27、缓冲区的情况下仍发生错误。引起错误的根本原因是它们的速度,可以采用互通消息的办法来控制它们的执行速度,使相互协作的进程正确工作。第 4 章进程同步与通信两个进程应如下协作:(1)进程A把一个记录存入缓冲区后,应向进程B发送“缓冲区中有记录”的消息。(2)进程B从缓冲区中取出记录后,应向进程A发送“缓冲区中的记录已取走”的消息。(3)进程A只有在得到进程B发送来的“缓冲区中的记录已取走”的消息后,才能把下一个记录再存入缓冲区。否则进程A等待,直到消息到达。(4)进程B只有在得到进程A发送来的“缓冲区中有记录”的消息后,才能从缓冲区中取出记录并加工。否则进程B等待,直到消息到达。第 4 章进程同步

28、与通信4.4.2 利用信号量和利用信号量和PV操作实现进程同步操作实现进程同步要实现进程的同步就必须提供一种机制,该机制能把进程需要的消息发出去,也能测试自己需要的消息是否到达。把能实现进程同步的机制称为“同步机制”。不同的同步机制实现同步的方法也不同,在这里,将介绍利用PV操作实现进程的同步。在前面的学习中,已经知道如何用PV操作实现进程的互斥。事实上,PV操作不仅是实现进程互斥的有效工具,而且还是实现同步的工具。把一个信号量与一个消息联系起来,当信号量的值为“0”时,表示期望的消息尚未产生,当信号量的值为非“0”时,表示期望的消息已经存在。假定信号量S表示某个消息,现在来看如何用PV操作实

29、现进程同步。第 4 章进程同步与通信1调用调用P操作判定消息是否到达操作判定消息是否到达任何进程调用P操作可以判定自己所期望的消息是否到达。若消息尚未产生,则S=0,调用P(S)后,在执行完P操作的第一步S=S-1后,S的值变成-1,使调用者成为等待信号量S的状态,即调用者要等待直到消息到达为止;若消息已经存在,则S0,调用P(S)后,进程不会成为等待状态而可以继续执行,即进程测试到自己期望的消息已经存在。第 4 章进程同步与通信2调用调用V操作发送消息操作发送消息任何进程调用V操作可以向其他进程发送消息。若调用V操作之前S=0,表示消息尚未产生且无等待消息的进程,调用V(S)后,在执行完V操

30、作的第一步S=S+1后,使S0,即意味着消息已经存在;若调用V操作之前S2)结点(进程)。根据通信方式的不同,又可把链路分为:(1)单向通信链路。只允许发送进程向接收进程发送消息。(2)双向链路。允许由进程A向进程B发送消息,也允许进程B同时向进程A发送消息。第 4 章进程同步与通信根据通信链路容量的不同也可把链路分成:(1)无容量通信链路。在这种通信链路上没有缓冲区,因而不能暂存任何消息。(2)有容量通信链路。在通信链路中设置了缓冲区,因而能暂存消息。缓冲区数目愈大,通信链路的容量愈大。第 4 章进程同步与通信2.消息的格式消息的格式在消息传递系统中所用的消息格式,与它所处的环境有关。在单机

31、系统环境中,消息格式比较简单;但在计算机网络环境下,消息的格式就比较复杂了。通常,可把一个消息分成消息头和消息正文两部分。消息头包括消息传输时所需的控制信息,如发送进程名、接收进程名、消息长度、消息类型、消息编号及消息的发送日期和时间;而消息正文则是发送进程实际上所发送的数据。第 4 章进程同步与通信3.进程同步方式进程同步方式在进程之间进行通信时,往往也需要辅以进程同步,以使它们能协调通信。这样,当一个进程发送一个消息后,存在两种可能性:一是发送进程阻塞,直到消息被接收进程接收;或者发送进程继续执行。类似地,接收进程执行完接收原语后,也有两种可能性:一是当它接收完后,其所需的消息又已到达,它

32、将继续执行,再接收新消息;另一种可能性则是在它接收完后,它所需的新消息尚未到达,此时,接收进程又可采取两种方式之一进行处理:其一是进行自我阻塞,直至新消息到达;另一种方式是进程继续执行,放弃本次接收。第 4 章进程同步与通信根据发送进程和接收进程都可采取阻塞或继续执行两种方式的情况,可组合出以下三种情况。当然,对于一个实际系统,只能采取其中的一种或两种。1)发送进程阻塞、接收进程阻塞这种情况主要用于进程之间紧密同步、发送进程和接收进程之间无缓冲区时。这两个进程平时都处于阻塞状态,直到有消息传递时才进行发送和接收。这种同步方式称为汇合。第 4 章进程同步与通信2)发送进程不阻塞、接收进程阻塞这是

33、一种应用最广泛的进程同步方式。平时发送进程不阻塞,因而它可以尽快地把一个或多个消息发给多个目标;而接收进程平时则处于阻塞状态,直到发送进程发来消息时,才被唤醒。3)发送进程和接收进程均不阻塞这也是一种较常见的进程同步方式。平时发送进程和接收进程都忙于自己的事情,仅当发生某事件使它无法继续运行时,才把自己阻塞起来等待。第 4 章进程同步与通信1实验内容实验内容进程同步实验。2实验目的实验目的通过模拟进程同步操作解决生产者消费者问题,了解系统中并发进程是怎样同步执行的。3实验题目实验题目编写一段程序模拟PV操作实现进程同步,且用PV操作解决生产者消费者问题。4.6 进程同步实现举例进程同步实现举例

34、第 4 章进程同步与通信4实验提示实验提示(1)PV操作由P操作原语和V操作原语组成。P操作原语P(S)将信号量S减1,若S0则执行原语的进程被置成等待状态。V操作原语V(S)将信号量S加1,若S0则释放一个等待的进程。(2)生产者、消费者问题主要解决的是进程并发执行时访问公共变量的问题。假定有一个生产者和一个消费者。生产者每次生产一个产品,并把产品存入共享缓冲区供消费者取走。消费者每次从共享缓冲区中取出一个产品去消费。禁止生产者将产品放入已满的缓冲区,禁止消费者从空缓冲区内取产品。(3)模拟程序中对应关系如表4-1所示。第 4 章进程同步与通信表表4-1 对对 应应 关关 系系产品数量 in

35、t _nCurrProductor 共享缓冲区大小 int MaxBuffer 信号量 S pthread_mutex_t _dealmutex P(S)原语 pthread_mutex_lock(&_dealmutex)V(S)原语 pthread_mutex_unlock(&_dealmutex)生产一个产品 _nCurrProductor+消费一个产品 _nCurrProductor-第 4 章进程同步与通信5实例代码实例代码/进程同步生产者、消费者实例pcustomer.c/运行环境Redhad9.0 gcc 4.0#include#include#include/产品数量int _n

36、CurrProductor=0;int MaxBuffer=10;/信号量pthread_mutex_t _dealmutex;void*producer(void*arg)/生产者进程第 4 章进程同步与通信while(1)pthread_mutex_lock(&_dealmutex);/信号量锁定 if(_nCurrProductor MaxBuffer)printf(当前的产品数%6d 仓库满了,停止生产产品。n,_nCurrProductor);Else _nCurrProductor+;/生产一个产品 printf(当前的产品数%6d 生产了一个产品。n,_nCurrProducto

37、r);第 4 章进程同步与通信 pthread_mutex_unlock(&_dealmutex);/信号量解锁 sleep(2);void*customer(void*arg)/消费者进程 while(1)pthread_mutex_lock(&_dealmutex);/信号量锁定 if(_nCurrProductor 0)_nCurrProductor-;/消费一个产品 printf(当前的产品数%6d 消费了一个产品。n,_nCurrProductor);第 4 章进程同步与通信 else printf(当 前 的 产 品 数%6d 加 快 生 产 速 度,没 有 产 品 了。n,_ n

38、CurrProductor);pthread_mutex_unlock(&_dealmutex);/信号量解锁 sleep(3);int main(int argc,char*argv)printf(开始!n);pthread_mutex_init(&_dealmutex,NULL);/信号量初始化 pthread_t pt1;第 4 章进程同步与通信 pthread_t pt2;/建立生产者和消费者进程 int pret2=pthread_create(&pt2,NULL,customer,NULL);int pret1=pthread_create(&pt1,NULL,producer,N

39、ULL);if(pret1!=0|pret2!=0)printf(进程创建失败!n);exit(1);while(1)pthread_join(pt1,NULL);pthread_join(pt2,NULL);printf(结束!n);return 0;第 4 章进程同步与通信运行结果:rootredlinux ys#gcc-lpthread pcustomer.c-o pcustomer.o rootredlinux ys#./pcustomer.o 开始!当前的产品数 0 加快生产速度呀,没有产品了。当前的产品数 1 生产了一个产品。当前的产品数 2 生产了一个产品。当前的产品数 1 消费

40、了一个产品。当前的产品数 2 生产了一个产品。当前的产品数 1 消费了一个产品。第 4 章进程同步与通信第 4 章进程同步与通信6结果分析结果分析通过运行程序可以看到生产和消费的过程。正如所设想的那样,当没有产品时消费者进程会等待一个产品的生产,并提示“没有产品了”。而缓冲区装满时生产者进程会停止生产,等待消费者进程消费产品。两个进程间通过信号量方法实现进程同步。第 4 章进程同步与通信1实验内容实验内容进程通信实验。2实验目的实验目的通过编写进程通信程序,了解进程间是怎样通信的。掌握一种进程通信方法并从原理入手,深入理解进程通信是如何实现的。3实验题目实验题目编写一段程序,用文件管道法实现进

41、程间的通信。要求从甲进程输入一串字符,从乙进程输出这串字符。4.7 进程通信的实现举例进程通信的实现举例第 4 章进程同步与通信4实验提示实验提示(1)进程通信的方法很多,管道法是其中的一种。所谓管道法,是指利用一个共享文件作为进程通信的管道,并通过读写进程以生产者、消费者方式对其进行操作。(2)这里可以写两个程序fifoserver和fifoclient来表示两个进程。建立一个文件myfifo作为两个进程通信的管道,两个进程通过访问这个文件来实现进程间的通信。第 4 章进程同步与通信5.实例代码实例代码/文件管道法服务端fifoserver.c/运行环境Redhad9.0 gcc 4.0#i

42、nclude#include#include#include#include#define filename myfifoint main(void)第 4 章进程同步与通信 FILE*fp;char readbuf80;umask(0);/清除权限掩码 mknod(filename,S_IFIFO|0666,0);/创建一个命令管道 while(1)fp=fopen(filename,r);/打开文件 fgets(readbuf,80,fp);/读入管道中的数据 printf(收到的数据:%sn,readbuf);/输出数据 fclose(fp);/关闭文件 第 4 章进程同步与通信 ret

43、urn(0);/文件管道法客户端 fifoclient.c/运行环境 Redhad9.0 gcc 4.0#include#include#define filename myfifo int main(int argc,char*argv)第 4 章进程同步与通信 FILE*fp;if(argc!=2)/显示帮助信息 printf(Use:fileclient string n);exit(1);if(fp=fopen(filename,w)=NULL)/打开文件 perror(fopen);exit(1);fputs(argv1,fp);/向管道文件中写入输入信息 fclose(fp);/关

44、闭文件 return(0);第 4 章进程同步与通信运行结果:rootredlinux ys#gcc fifoserver.c-o fifoserver.o rootredlinux ys#gcc fifoclient.c-o fifoclient.o rootredlinux ys#./fifoserver.o 收到的数据:abc 收到的数据:book 收到的数据:system 第 4 章进程同步与通信rootredlinux ys#./fifoclient.o abc rootredlinux ys#./fifoclient.o book rootredlinux ys#./fifocli

45、ent.o system rootredlinux ys#rootredlinux ys#ls fifoserver.c fifoserver.o fifoclient.c fifoclient.o myfifo 第 4 章进程同步与通信6.结果分析结果分析运行结果中fifoserver.o和fifoclient.o是在两个命令窗口中同时运行的,fifoclient.o发送一串字符就会在fifoserver.o程序中显示出来。这说明两个进程可以通过管道方式进行通信。另外也可以看到,运行程序后系统中又产生了一个新的文件myfifo,这个文件就是两个进程的管道文件。第 4 章进程同步与通信1.程序

46、并发执行时一定会产生与时间有关的错误吗?2.什么是临界资源和临界区?3.若用PV操作管理某一组相关临界区,其信号量S的值在-1,1之间变化,讨论当S=-1,S=0,S=1时,其物理含义是什么?4.什么是进程间的互斥?什么是进程间的同步?5.试比较用PV操作和上锁解锁原语实现进程互斥有什么区别。6.试描述经典进程同步问题生产者消费者问题。习习 题题 第 4 章进程同步与通信7.假定有三个进程R,W1,W2 共享一个缓冲区B,B中每次只能存放一个数。进程R每次从输入设备读入一个数并把它存放到缓冲区B中,若存放到B中的是奇数,则由进程W1将其取出打印;若存放到B中的是偶数,则由进程W2将其取出打印。

47、请用PV操作管理这三个并发进程,使它们能正确地同步工作。8.现有四个进程R1,R2,W1,W2,它们共享可以存放一个数的缓冲区B。进程R1每次把来自键盘的一个数存入缓冲区B中,供进程W1打印输出;进程R2每次把来自磁盘的一个数存入缓冲区B中,供进程W2打印输出;如何用PV操作来协调这四个进程的并发执行?第 4 章进程同步与通信9.今有三个并发进程R,M,P,它们共享一个缓冲区B。进程R负责从输入设备读信息,每读出一个记录后把它存放在缓冲区B中。进程M在缓冲区B中加工进程R存入的记录。进程P负责把加工后的记录打印输出。缓冲区B中每次只能存放一个记录,请用PV操作写出它们并发执行时能正确工作的程序。第 4 章进程同步与通信10.有一个仓库,可以存放A和B两种产品,但要求:(1)每次只能存入一种产品(A或B);(2)-NA产品数量-B产品数量M。其中,N和M是正整数。试用PV操作描述产品A与产品B的入库过程。11.请用信号量和PV操作描述读者写者问题。12.在单处理机环境下,进程间有哪几种通信方式?

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 大学
版权提示 | 免责声明

1,本文(《计算机操作系统》课件第4章 (2).ppt)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|