第2章进程同步与通信-3_第1页
第2章进程同步与通信-3_第2页
第2章进程同步与通信-3_第3页
第2章进程同步与通信-3_第4页
第2章进程同步与通信-3_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、第二章进 程 管 理 2.6 进程通信进程通信 进程通信进程通信是指进程之间的是指进程之间的信息交换信息交换 交换的信息量交换的信息量 一个状态或数值一个状态或数值 上千个字节上千个字节第二章进 程 管 理 2.6.1进程通信分类进程通信分类(1)低级通信:进程的互斥和同步。(2)高级通信: 指用户可直接利用os提供的一组通信命令,高效地传送大量数据的一种通信方式,对用户透明。第二章进 程 管 理 (2)高级通信分类1、共享存储器系统 (1)(1)共享数据结构的通信方式共享数据结构的通信方式 进程之间通过某种进程之间通过某种数据数据结构结构,如缓冲池进行通信属于低级通信方式;,如缓冲池进行通信

2、属于低级通信方式;(2)(2)共享存储区通信方式共享存储区通信方式 为了传送大量信息,在存储器为了传送大量信息,在存储器中划出一块共享存储区,进程可通过对共享存储区进中划出一块共享存储区,进程可通过对共享存储区进行读或写来实现通信,属于高级通信方式。行读或写来实现通信,属于高级通信方式。第二章进 程 管 理 2、管道通信 管道通信方式建立在文件系统的基础上,利用共享文件来连接两个相互通信的进程,此共享文件称为管道(Pipe)。 管道是指用于连接一个读进程和一个写进程,以实现它们之间通信的共享文件第二章进 程 管 理 写进程写进程读进程读进程管道管道第二章进 程 管 理 管道通信管道通信必需的协

3、调能力必需的协调能力(1)互斥 当一个进程正在对管道进行读写操作时,另一进程必须等待。(2)同步 当写(输入)进程把一定量的数据(如4K)写入管道后,便去睡眠等待,直到读(输出)进程取走数据后再把它唤醒。当读进程发现管道空时也应睡眠等待,直至写进程将消息写入管道后,才将它唤醒(3)判别对方是否存在,只有确定了对方存在时,方能进行通信。第二章进 程 管 理 3、消息传递系统信息交换的单位是消息或报文,分成两种:信息交换的单位是消息或报文,分成两种: 直接通信方式直接通信方式 间接通信方式间接通信方式 计算机网络中将消息称为计算机网络中将消息称为报文报文。第二章进 程 管 理 2.6.22.6.2

4、消息传递通信的实现方式消息传递通信的实现方式1 1、直接通信方式、直接通信方式 o 发送进程直接把消息发送给目标进程发送进程直接把消息发送给目标进程o 发送进程和接收进程都以显式方式分别提供对发送进程和接收进程都以显式方式分别提供对方的标识符。方的标识符。o系统提供两条通信原语系统提供两条通信原语 Send(Receiver,message); Receive(Sender,message);例如例如: Send(P2,m1); Receive(P1,m1);第二章进 程 管 理 解决生产者一消费者问题repeat produce an item in nextp; Send(consumer

5、,nextp);until false; repeat Receive(producer, nextp); Consumer the item in nextc;until false;第二章进 程 管 理 2 2、间接通信方式、间接通信方式 进程之间的通信需要通过某种中间实体,该实体用进程之间的通信需要通过某种中间实体,该实体用来暂存发送进程发送给目标进程的消息;接收进程来暂存发送进程发送给目标进程的消息;接收进程则从该实体中取出对方发送给自己的消息。则从该实体中取出对方发送给自己的消息。这种中间实体称为信箱。这种中间实体称为信箱。消息在信箱中可以安全地保存,只允许核准的目标消息在信箱中可以

6、安全地保存,只允许核准的目标用户随时读取,故可实现非实时通信。用户随时读取,故可实现非实时通信。第二章进 程 管 理 信箱的创建和撤消信箱的创建和撤消进程用信箱创建原语来建立一个新信箱。创建者进程应给出信箱名字、信箱属性(公用、私用或共享);对于共享信箱,还应给出共享者的名字。用信箱撤消原语来撤消。第二章进 程 管 理 消息的发送与接收 Send(mailbox,message):将一个消息发送到指:将一个消息发送到指定信箱;定信箱; Receive (mailbox,message) 从指定信箱中接收从指定信箱中接收一个消息一个消息第二章进 程 管 理 信箱分类v私用信箱。v公用信箱。v共享

7、信箱。第二章进 程 管 理 私用信箱私用信箱 用户进程建立,作为该进程的一部分。 拥有者有权读消息,其他用户只能发送。 采用单向通信链路。 进程结束时信箱也消失。第二章进 程 管 理 公用信箱公用信箱 它由OS创建。 提供给系统中的所有核准进程使用。 进程既发送也可取出。 采用双向通信链路的信箱来实现。 系统运行期间始终存在。第二章进 程 管 理 共享信箱共享信箱 由某进程创建,创建时提供共享进程(用户)的名字。 信箱的拥有者和共享者,都有权从信箱中取走发送给自己的消息。第二章进 程 管 理 信箱通信时,发送进程和接收进程的关系:信箱通信时,发送进程和接收进程的关系: 一对一关系。一对一关系。

8、建立一条专用的通信链路。建立一条专用的通信链路。 多对一关系。多对一关系。服务进程与多个用户进程之间进行交互服务进程与多个用户进程之间进行交互,又称客户服务器交互。,又称客户服务器交互。 一对多关系。一对多关系。一个发送进程与多个接收进程进行交互一个发送进程与多个接收进程进行交互,使发送进程可用广播形式,向接收者发送消息。,使发送进程可用广播形式,向接收者发送消息。 多对多关系。多对多关系。建立一个公用信箱,多个进程投递并取建立一个公用信箱,多个进程投递并取走自己的消息。走自己的消息。next:0mqsmmutexreceive(b)send(B,a)size:5sender:Atext:He

9、llosize:5sender:Atext:Hellosize:5sender:Atext:HelloPCB(B) 进程A进程B发送区接收区ab消息缓冲队列消息缓冲队列-示意图2、消息传递系统的实现、消息传递系统的实现消息缓冲队列消息缓冲队列-数据结构定义/消息缓冲区定义消息缓冲区定义struct message_buffer char sender30; /*发送者进程标识符*/ int size; /*消息长度*/ char text200; /*消息正文*/ struct message_buffer *next;/指向下一个消息缓冲区的指针/PCB中有关通信的数据项中有关通信的数据项s

10、truct process_control struct message_buffer *mq; /*消息队列队首指针*/ semaphore mutex=1; /*消息队列互斥信号量,初值为1*/ semaphore sm=0; /*消息队列同步信号量,记录消息的个数.初值为0*/char receiver30; char receiver30; structstruct message_buffermessage_buffer a; a;void send(receiver, a)/receivervoid send(receiver, a)/receiver为接收进程标识符,为接收进程标

11、识符,a a为发送区首址为发送区首址 structstruct message_buffermessage_buffer i i; ; structstruct process_controlprocess_control j; j; getbufgetbuf( (a.sizea.size, , i i););/ /* *根据根据发送区消息发送区消息a a的长度申请一缓冲区的长度申请一缓冲区i i* */ / i.senderi.sender = = a.sendera.sender; /; /将发送区将发送区a a的内容复制到消息缓冲区的内容复制到消息缓冲区i i; i.sizei.size

12、 = = a.sizea.size; ; copy( copy(i.text,a.texti.text,a.text); ); i.nexti.next =0; =0; getidgetid( (PCB_setPCB_set, receiver, j);, receiver, j);/ /* *获得接收进程的进程标识符获得接收进程的进程标识符j j* */ / P( P(j.mutexj.mutex);); Insert(j.mq, Insert(j.mq, i i););/ /* *将消息缓冲区将消息缓冲区i i挂到的消息队列挂到的消息队列j.mqj.mq上上* */ / V(V(j.mut

13、exj.mutex);); V(j.sm);/ V(j.sm);/唤醒接收进程,通知它可以接收消息了唤醒接收进程,通知它可以接收消息了 消息缓冲队列消息缓冲队列-发送原语消息缓冲队列消息缓冲队列-接收原语接收原语接收进程调用接收原语receive(b),从自己的消息缓冲队列mq中摘下第一个消息缓冲区i,并将其中的数据复制到以b为首址的指定消息接收区内。接收原语描述如下: struct message_buffer b;void receive(b) struct message_buffer i; struct process_control j; j = internal_name(); /

14、*接收进程的内部标识符接收进程的内部标识符*/ P(j.sm); P(j.mutex); remove(j.mq, i); /*从消息队列中摘下第一个消息缓冲区从消息队列中摘下第一个消息缓冲区*/ V(j.mutex); b.sender = i.sender;/将消息缓冲区将消息缓冲区i中信息复制到接收区中信息复制到接收区b b.size = i.size; copy(b.text,i.text); releasebuf(i);释放消息缓冲区释放消息缓冲区2.4.5管程机制引入的原因: 信号量机制虽然既方便又有效地解决了进程同步问题,但要求访问临界资源的进程自备同步操作wait(s)、sig

15、nal(s),使得大量的同步大量的同步操作分散在各个进程中,操作分散在各个进程中,给进程的管理带来不便,并会因同步操作使用不当导致死锁。Hoare和Hanson提出了管程的概念把分散在分散在各个进程中的与各个进程中的与同一共享资源同一共享资源有关的有关的同步处同步处理理从各进程中抽出并集中起来从各进程中抽出并集中起来。见书P57第二章进 程 管 理 Hansan为管程所下的定义是:一个管程定义了一个一个数据结构数据结构和能为并发进程所执行(在该数据结构上)能为并发进程所执行(在该数据结构上)的一组操作的一组操作,这组操作能同步进程和改变管程中的数据。管程管程= 数据结构+ 操作+ 对数据结构中

16、变量的初始化1、管程的定义第二章进 程 管 理 图2-15管程的示意图 共享数据一组操作过程初始化代码进入队列条件(不忙)队列管程相当于围墙,它把共享变量和对它进行操作的若干过程围了起来,所有进程要访问临界资源时,都必须经过管程(相当于通过围墙的门)才能进入,而管程每次只准许一个进程进入管程,从而实现了进程互斥。第二章进 程 管 理 管程的基本特性:(1)局部于管程的数据局部于管程的数据只能被局部于管程内的过程管程内的过程所访问。(2)一个进程只有通过调用调用管程内的过程管程内的过程才能进入管程访问共享数据。(3)每次仅允许一个进程仅允许一个进程在管程内执行某个内部过程。 管程是一个语言成分,

17、所以管程的互斥访问互斥访问完全由编译程序在编译时自动添加,无需程序员关注,而且保证正确。打磕睡的理发师问题打磕睡的理发师问题 理发店有一名理发师,一把理发椅,还有N把供等候理发的顾客坐的普通椅子。如果没有顾客到来,理发师就坐在理发椅上打磕睡。当顾客到来时,就唤醒理发师。如果顾客到来时理发师正在理发,顾客就坐下来等待。如果N把椅子都坐满了,顾客就离开该理发店去别处理发。 第二章进 程 管 理 waiting:对占用沙发的顾客计数,该变量将被多个顾客进程互斥地访问并修改,设mutex信号量。同步关系:1、如果没有顾客,理发师就打磕睡,有顾客等待,唤醒理发师。2、理发师理发,顾客等待。理发师理完发,

18、下一个顾客可以去。用信号量用信号量解决打磕睡的理发师问题打磕睡的理发师问题void customer ()/顾客进程P(mutex);if (waiting CHAIRS)/如果有空位,顾客等待waiting+; V(customers); /唤醒理发师 V(mutex); P(barners); /如果理发师正在理发,则顾客等待get_haircut();else/如果没有空位,则顾客离开 V(mutex);#define CHAIRS 5 /为等候的顾客准备的座椅数semaphore customers = 0;semaphore barners = 0;semaphore mutex =

19、 1;int waiting;/对占用沙发的顾客计数void barber()/理发师进程 while (true) P(customers);/如果没有顾客,理发师就打磕睡 P(mutex);/互斥进入临界区 waiting-; V(barners);/理发师准备理发了 V(mutex); cut_hair();/理发 第二章进 程 管 理 第二章总结第二章总结进程同步与通信进程同步与通信1、进程同步的基本概念(1)临界资源与临界区(2)同步:同步是进程间共同完成一项任务时直接发生相互作用的关系。(3)互斥:互斥是并发执行的多个进程由于竞争同一资源而产生的相互排斥的关系。(4)同步机制遵循的准则。2.实现临界区互斥的基本方法软件实现方法;硬件实现方法。3.信号量(1)整型信号量(2)记录

温馨提示

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

评论

0/150

提交评论