操作系统原理第五章概要1.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统原理第五章概要1

*/19 5.3.3 哲学家进餐问题 管程中设置了三个函数: pickup[i] (外部函数)。如哲学家处于饥饿状态,且左、右两位哲学家都未进餐,允许这位哲学家进餐;但只要其左、右两位哲学家中有一位正在进餐,将执行self[i].wait操作来推迟进餐。 putdown[i] 函数(外部函数)。当哲学家进餐毕,通过该函数放下其手中的筷子。 test[i](内部函数)。测试哲学家是否已具备用餐条件,若为真,允许该哲学家进餐,否则,哲学家等待。该函数只能被本管程内的两个外部函数pickup和putdown调用,不能由进程直接调用。 */19 5.3.3 哲学家进餐问题 利用管程解哲学家进餐问题,要建立一个管程 : Monitor Dining-Philosophers ; 共享变量定义; void Entry pickup(int i) { state[i]=hungry; test(i); if state[i]!=eating self[i].wait; } */19 5.3.3 哲学家进餐问题 void Entry putdown (int i) { state[i]=thinking; test ((i+4)% 5); test ((i+1l)% 5); } void test (int k) { if (state[(k+4)%5]!=eating) (state[k]=hungry) (state[k+1 mod 5 ]!=eating) { state[k]=eating; self[k].signal; } } */19 5.3.3 哲学家进餐问题 { for(i=0;4;i++) /* 管程初始化 */ state[i]=thinking; } 有了管程Dining-Philosophers以后,哲学家进程可描述如下: void philosopher (int i) { while (true) { thinking; pickup; eating; putdown; } } */19 5.4 进程通信 进程通信:指的是并发进程之间相互交换信息,这种信息交换的量可大可小。 从某种意义上说,前面所讨论的进程之间的互斥与同步就是一种通信,只不过交换的信息量很小,因此这种进程通信方式称为低级进程通信方式。 本节所讨论的通信,强调的是进程之间有较大信息量的交换,例如一进程向另一进程传送其获得的计算结果,称为高级通信方式。 */19 5.4 进程通信 5.4.1 进程通信的方式 5.4.2 消息缓冲通信 5.4.3 信箱通信 5.4.4 共享文件通信 5.4.5 消息传递系统的若干问题 */19 5.4.1 进程通信的方式 高级进程通信机制可分为三大类: 1. 共享存储器系统(Shared-Memory System) 2. 消息传递系统(Message passing system) (1)直接通信方式:消息缓冲通信 (2)间接通信方式:又称为信箱通信方式 3. 管道(Pipe)通信:又名共享文件通信 */19 5.4.2 消息缓冲通信 是一种直接通信方式 ,操作系统提供消息缓冲区。当一进程向另一进程发送消息时,便向系统申请一个缓冲区,并把已制备好的消息从发送区复制到该缓冲区,然后把它插入接收进程的消息链中。 操作系统提供下述两个通信命令(原语): Send(Receiver, message) :发送消息 Receive(Sender, message) :接收消息 */19 5.4.2 消息缓冲通信 消息缓冲通信示意图 */19 5.4.2 消息缓冲通信 在某些情况下,接收进程可与多个发送进程通信,因此,它不可能事先指定发送进程。例如,用于提供打印服务的进程,它可以接收来自任何一个进程的“打印请求”消息。接收原语可表示为: Receive (id, message) 其中id是完成通信后的返回值。 */19 5.4.3 信箱通信 是一种间接通信方式,通信时发送进程它的信件投入信箱,接收进程可以在任何时候取走信件而不会丢失 ,进程间通过信箱实现通信。 单向信箱通信:只要信箱中有空格,发送进程便可向信箱中投递信件,若所有格子都已装满,则发送进程等待,或者继续执行,待有空格子时再发送。只要格子中有信,接收进程便能取出—信件。若信箱为空,接收进程或者等待,或者继续执行。 */19 5.4.3 信箱通信 双向信箱通信:信箱中既有发送进程发出的

文档评论(0)

yaocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档