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

下载本文档

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

文档简介

1、第九讲 进程同步与通讯目的与要求:掌握信号量解决进程同步互斥问题的方法;掌握进程通信的基本实现方法。重点与难点:信号量的典型应用,通讯实现。作业:13,14,1514.2.5 进程同步与互斥举例一、有限缓冲区问题问题描述:设有n个缓冲区,一组生产者进程往缓冲区写数据,一组消费者进程从缓冲区取数据,写取以一个缓冲区为单位。说明: 将缓冲池看作是共享数据,对缓冲区的 操作必须是互斥操作。 如果n个缓冲区全满,生产者进程必须 等待。 如果缓冲区全空,消费者进程必须等待。2有限缓冲区的生产者/消费者问题(生产者和消费者共享一个产品缓冲池)共享N个缓冲区P1 P2 Pm C1 C2 Cn生产者消费者缓冲

2、池3解:设置以下信号量mutex,初值为1,控制互斥访问缓冲池。full,初值为0,表示当前缓冲池中满缓冲区数。empty,初值为N,表示当前缓冲池中空缓冲区数。 有限缓冲区生产者/消费者进程描述如下: item表示消息数据类型;semaphor full,empty,mutex;item nextp,nextc; 置初值full=0; empty=N; mutex=1; 4 P(empty); P(mutex); get a empty bufferi; bufferi =nextp; add bufferi to full buffer queue; V(full); V(mutex);

3、while(1) Producer(): do produce an item in nextp; .while(empty=0) ;empty=empty-1;full=full+15 consume the item in nextc; while(1) (两个P操作可以倒序吗?) consumer(): do P(full); P(mutex); get a buffer from full buffer queue; nextc=bufferi put bufferi back to empty queue; V(empty); V(mutex);while(full=0) ;full

4、=full-1;empty=empty+16存在共享数据A,那些对它进行只读访问进程叫Reader;对它进行了写操作的进程叫Writer。第一类Reader/ Writer问题(并发极大化):Reader和Writer争夺访问共享数据A时,如果已经有Reader访问A,后续Reader与后续Writer比有较高优先权。第二类Reader/ Writer问题(数据时效):Reader和Writer争夺访问共享数据A时,Writer有较高优先权。二、Readers/Writers问题7第一类Reader/ Writer问题描述:1、如果当前无进程访问A,则Reader/ Writer欲访问即可访问

5、。2、如果已存在一个Reader正在访问数据,其它欲访问Reader可马上访问(这体现Reader有较高优先权);而欲访问的Writer必须等待。3、若某个Writer正访问数据,则欲访问的Reader/ Writer都必须等待。4、当最后一个结束访问数据的Reader发现有Writer正在等待时,则将其中一个唤醒。5、当某个Writer结束访问时,若只有Writer在等待,则唤醒某个Writer,若既有Writer也有Reader;则按FIFO或其它原则唤醒一个Writer或所有Reader。8Writer:P(wrt);写数据AV(wrt);Reader:P(mutex); readcou

6、nt=readcount+1; if (readcount=1) P(wrt);V(mutex);读数据AP(mutex); readcount=readcount-1; if (readcount=0) V(wrt);V(mutex); 第一类Reader/ Writer问题编程信号量:wrt=1;(用于A的互斥访问)整型变量:readcount=0(用于reader计数)信号量:mutex=1;(用于对readcount互斥访问)9三、哲学家就餐问题 问题描述:五个哲学家五只筷子,哲学家循环做着思考和吃饭的动作,吃饭程序是:先取左边筷子,再取右边筷子,再吃饭,再放筷子。10实现:为每个筷子

7、设一把锁(信号量,初值为1)每个哲学家是一个进程。共享数据结构为semaphore chopstick5; 第i个进程描述为(i=0, ,4)doP(chopsticki);/ 取左边筷子;P(chopstick(i+1)% 5); / 取右边筷子;Eat; / 放左边筷子;V(chopsticki);/ 放右边筷子; V(chopstick(i+1) %5); Think;while(1);(这可能导致死锁)114.3 消息传递原理 两种基本进程通讯方法:1、共享存储(Shared-memory):相互通讯的进程有共享存储区.进程间可以通过直接读写共享存储区的变量来交互数据,同步与互斥在并发

8、程序设计时安排进入程序。操作系统提供这样的共享存储区及同步互斥工具。2、消息传递(message-passing):通过操作系统的相应系统调用进行消息传递通讯。12消息传递系统调用语句的一般形式:发送消息:Send(destination,&message);接收消息:Receive(source,&message)。消息传递方法1、直接通讯法基本思想:进程在发送和接收消息时直接指明接收者或发送者进程ID。缺点:必须指定接收进程ID。(UNIX的信号机制类似这种形式)4.3.1消息传递通讯原理13举例:(UNIX中两进程利用信号通讯)。Process A kill(1040, SIGUSR1)

9、; #向1040号进程发送 一个SIGUSR1信号。Process B Signal(SIGUSR1,func);#当收到SIGUSR1信 号时,就执行func(),如果SIGUSR1 信号未到,则系统登记func函数, 待其信号到时再调用执行。142、间接通讯法(信箱命名法)基本思想:系统为每个信箱设一个消息队列,消息发送和接收都指向该消息队列。 缺点:必须有一个通讯双方共享的一个逻辑消息队列(UNIX的IPC消息传递机制属于这种形式),使用时消息发送者约定写方式打开信箱,消息接受者约定读方式打开信箱或同时读写打开。优点:很容易建立双向通讯链(只要对信箱说明为读写打开)。 154.3.2 进

10、程消息传递通讯示例直接通讯消息系统,两个基本操作为:send(&A):&A指向含接收者pid和消息正文的空间。Receive(&A):&A指向缓冲区用于接收消息,该系统调用函数返回值是消息发送者pid。实现:系统有一空闲缓冲区池,每个进程有一个消息缓冲队列。缓冲区用于存放消息及消息发送者pid和消息链(用pid定位进程PCB表)。Senders pid消息正文下一消息链消息缓冲区16每个进程的消息队列存放发送给该进程的消息,队列头存于PCB中,同时在PCB中设一互斥信号量mutex(初值为1)和信号量Sm(初值为0),Sm用于记录消息队列中的消息数。.mutexSm.Senders pidte

11、xtSenders pidtextReceivers PCB message messageHptr17Send(&A): New(&p);从空缓冲区队列得一个buffer . 置senders pid; 将A中消息送buffer p; 获得A中Receivers pid; P(mutex); 将buffer p挂入相应的消息队列; V(Sm); V(mutex);18Receive(&A): P(Sm); P(mutex); 从本进程的消息队列取一个buffer f; V(mutex); 从buffer f中取得消息正文送A,并得到 senders pid作为Receive( )的返回值;. dispose(f);#释放buffer f到空缓冲队列

温馨提示

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

评论

0/150

提交评论