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

下载本文档

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

文档简介

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

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

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

2.6.2消息传递通信的实现方式

1、直接通信方式发送进程直接把消息发送给目标进程发送进程和接收进程都以显式方式分别提供对方的标识符。系统提供两条通信原语

Send(Receiver,message);Receive(Sender,message);例如:Send(P2,m1);Receive(P1,m1);解决生产者一消费者问题repeat…produceaniteminnextp;…

Send(consumer,nextp);untilfalse;

repeat

Receive(producer,nextp);…Consumertheiteminnextc;untilfalse;2、间接通信方式进程之间的通信需要通过某种中间实体,该实体用来暂存发送进程发送给目标进程的消息;接收进程则从该实体中取出对方发送给自己的消息。这种中间实体称为信箱。消息在信箱中可以安全地保存,只允许核准的目标用户随时读取,故可实现非实时通信。信箱的创建和撤消进程用信箱创建原语来建立一个新信箱。创建者进程应给出信箱名字、信箱属性(公用、私用或共享);对于共享信箱,还应给出共享者的名字。用信箱撤消原语来撤消。消息的发送与接收Send(mailbox,message):将一个消息发送到指定信箱;Receive(mailbox,message)从指定信箱中接收一个消息信箱分类私用信箱。公用信箱。共享信箱。私用信箱用户进程建立,作为该进程的一部分。拥有者有权读消息,其他用户只能发送。采用单向通信链路。进程结束时信箱也消失。公用信箱它由OS创建。提供给系统中的所有核准进程使用。进程既发送也可取出。采用双向通信链路的信箱来实现。系统运行期间始终存在。共享信箱由某进程创建,创建时提供共享进程(用户)的名字。信箱的拥有者和共享者,都有权从信箱中取走发送给自己的消息。信箱通信时,发送进程和接收进程的关系:一对一关系。建立一条专用的通信链路。多对一关系。服务进程与多个用户进程之间进行交互,又称客户/服务器交互。一对多关系。一个发送进程与多个接收进程进行交互,使发送进程可用广播形式,向接收者发送消息。多对多关系。建立一个公用信箱,多个进程投递并取走自己的消息。消息缓冲队列-示意图2、消息传递系统的实现消息缓冲队列-数据结构定义//消息缓冲区定义structmessage_buffer{charsender[30]; /*发送者进程标识符*/intsize; /*消息长度*/chartext[200]; /*消息正文*/structmessage_buffer*next; //指向下一个消息缓冲区的指针}//PCB中有关通信的数据项structprocess_control{structmessage_buffer*mq;/*消息队列队首指针*/

semaphoremutex=1; /*消息队列互斥信号量,初值为1*/

semaphoresm=0;/*消息队列同步信号量,记录消息的个数.初值为0*/}charreceiver[30];structmessage_buffera;voidsend(receiver,a)//receiver为接收进程标识符,a为发送区首址{structmessage_bufferi;structprocess_controlj;getbuf(a.size,i);/*根据发送区消息a的长度申请一缓冲区i*/i.sender=a.sender;//将发送区a的内容复制到消息缓冲区i;i.size=a.size;copy(i.text,a.text);i.next=0;getid(PCB_set,receiver,j);/*获得接收进程的进程标识符j*/P(j.mutex);Insert(j.mq,i);/*将消息缓冲区i挂到的消息队列j.mq上*/

V(j.mutex);V(j.sm);//唤醒接收进程,通知它可以接收消息了}消息缓冲队列-发送原语消息缓冲队列-接收原语

接收进程调用接收原语receive(b),从自己的消息缓冲队列mq中摘下第一个消息缓冲区i,并将其中的数据复制到以b为首址的指定消息接收区内。接收原语描述如下:

structmessage_bufferb;voidreceive(b){structmessage_bufferi;structprocess_controlj;j=internal_name();/*接收进程的内部标识符*/P(j.sm);P(j.mutex);remove(j.mq,i);/*从消息队列中摘下第一个消息缓冲区*/

V(j.mutex);b.sender=i.sender;//将消息缓冲区i中信息复制到接收区bb.size=i.size;copy(b.text,i.text);releasebuf(i);释放消息缓冲区}2.4.5管程机制引入的原因:

●信号量机制虽然既方便又有效地解决了进程同步问题,但要求访问临界资源的进程自备同步操作wait(s)、signal(s),使得大量的同步操作分散在各个进程中,给进程的管理带来不便,并会因同步操作使用不当导致死锁。●Hoare和Hanson提出了管程的概念把分散在各个进程中的与同一共享资源有关的同步处理从各进程中抽出并集中起来。见书P57●Hansan为管程所下的定义是:一个管程定义了一个数据结构和能为并发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程和改变管程中的数据。●管程=数据结构+操作+对数据结构中变量的初始化●1、管程的定义图2-15管程的示意图管程相当于围墙,它把共享变量和对它进行操作的若干过程围了起来,所有进程要访问临界资源时,都必须经过管程(相当于通过围墙的门)才能进入,而管程每次只准许一个进程进入管程,从而实现了进程互斥。管程的基本特性:(1)局部于管程的数据只能被局部于管程内的过程所访问。(2)一个进程只有通过调用管程内的过程才能进入管程访问共享数据。(3)每次仅允许一个进程在管程内执行某个内部过程。管程是一个语言成分,所以管程的互斥访问完全由编译程序在编译时自动添加,无需程序员关注,而且保证正确。打磕睡的理发师问题

理发店有一名理发师,一把理发椅,还有N把供等候理发的顾客坐的普通椅子。如果没有顾客到来,理发师就坐在理发椅上打磕睡。当顾客到来时,就唤醒理发师。如果顾客到来时理发师正在理发,顾客就坐下来等待。如果N把椅子都坐满了,顾客就离开该理发店去别处理发。waiting:对占用沙发的顾客计数,该变量将被多个顾客进程互斥地访问并修改,设mutex信号量。同步关系:1、如果没有顾客,理发师就打磕睡,有顾客等待,唤醒理发师。2、理发师理发,顾客等待。理发师理完发,下一个顾客可以去。用信号量解决打磕睡的理发师问题voidcustomer() //顾客进程{P(mutex);if(waiting<CHAIRS)//如果有空位,顾客等待 {waiting++;

V(customers); //唤醒理发师

V(mutex);

P(barners);//如果理发师正在理发,则顾客等待 get_haircut(); }else //如果没有空位,则顾客离开

V(mutex); }#defineCHAIRS5 //为等候的顾客准备的座椅数

semaphorecustomers=0;

semaphorebarners=0;

semaphoremutex=1;

intwaiting;//对占用沙发的顾客计数voidbarber() //理发师进程{while(true){P(customers);//如果没有顾客,理发师就打磕睡

P(mutex);//互斥进入临界区

waiting--;V(barners);//理发师准备理发了

V(mutex);cut_hair();//理发}}第二章总结进程同步与通信1、进程同步的基本概念(1)临界资源与临界区(2)同步:同步是进程间共同完成一项任务时直接发生相互作用的关系。(3)互斥:互斥是并发执行的多个进程由于竞争同一资源而产生的相互排斥的关系。(4)同步机制遵循的准则。2.实现临界区互斥的基本方法软件实现方法;硬件实现方法。3.信号量(1)整型信号量(2)记录型信号量:利用信号量实现同步与互斥(3)And型信号量4.经典同步问题(1)生产者-消费者问题;(2)读者-写者问题;(3)哲学家进餐问题。5.进程通信PV操作是低级通信方式;高级通信:共享存储系统;消息传递系统;管道通信。6.管程(1)基本概念(2)组成(3)基本特性

练习题1、如果有三个进程共享同一程序段,而且每次最多允许两个进程进入该程序段,则信号量的初值应设置为多少?3 B.2 C.1 D.02、设有四个进程共享一个资源,如果每次只允许一个进程使用该资源,则用P、V操作管理时信号量S的可能取值是多少?

A.3,2,1,0,-1 B.2,1,0,-1,-2 C.1,0,-1,-2,-3 D.4,3,2,1,03、临界区是? A.一个缓冲区 B.一段数据区 C.一段程序

D.栈BCC4、在单处理机上,如果系统中有n个进程,则就绪队列中的进程个数最多是多少个?

A.1个 B.n+1个 C.n个 D.n-1个5、在单处理机上,如果系统中有n个进程,则等待队列中的进程个数最多是多

温馨提示

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

评论

0/150

提交评论