chap3-1 进程通讯.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
chap3-1 进程通讯

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 霍尔方法实现五个哲学家吃面问题(5) 哲学家想吃面时调用过程pickup,吃完后调用过程putdown。 霍尔方法实现哲学家吃面问题 Cobegin philosopher-_i() //i=0,1,…,4 { while(1) { P(IM.mutex); dining-philosopher.pickup(i); if (IM.next-count 0) V(IM.next); else V(IM.mutex); 吃通心面; P(IM.mutex); dining-philosopher.putdown(i); if (IM.next-count 0 ) V(IM.next); else V(IM.mutex); } } coend; 管程与进程作比较(1) ?管程定义的是公用数据结构,而进程定义的是私有数据结构; ?管程把共享变量上的同步操作集中起来,而临界区却分散在每个进程中; ?管程是为管理共享资源而建立的,进程主要是为占有系统资源和实现系统并发性而引入的; 管程与进程作比较(2) ?管程是被欲使用共享资源的进程所调用的,管程和调用它的进程不能并行工作,而进程之间能并行工作,并发性是其固有特性; ?管程是语言或操作系统的成分,不必创建或撤销,而进程有生命周期,由创建而产生至撤销便消亡。 * 3.7 进程间高级通信 3.7.1 进程通信的方式 3.7.2 消息缓冲机制 3.7.3 邮箱通信 3.7.4 进程通信的例子--管道 * 3.7.1 进程通信的方式 低级通信: 只能传递状态和整数值(控制信息),包括信号量和管程机制。优点是速度快。缺点是: 传送信息量小:效率低,每次通信传递的信息量固定,若传递较多信息则需要进行多次通信。 编程复杂:用户直接实现通信的细节,编程复杂,容易出错。 高级通信: 能够传送任意数量的数据,包括三类: 共享存储区、消息或信箱、管道。 * 共享内存: 相互通信的进程间设有公共内存,一组进程向该公共内存中写,另一组进程从公共内存中读,通过这种方式实现两组进程间的信息交换。 消息或信箱传递: 系统为进程提供了两个高级通讯原语send和receive。 当要进行消息传递时执行send。 当接收者要接收消息时执行receive。 共享文件模式: 管道通信 * 消息的一般形式 ? 消息缓冲通信技术基本思想是:根据“生产者——消费者关系”原理,利用公用消息缓冲区实现进程间的信息交换。 发送进程先申请一个消息缓冲区,写入消息后把该消息缓冲区送入接收进程的消息队列中,通知接收进程。接收进程从消息队列中摘下一消息缓冲区,取出所需要的信息。 3.7.2 消息缓冲机制 *  消息缓冲通信机构包含下列内容: 1.消息缓冲区是一个数据结构 sender: 消息发送者名 size: 消息长度 Text: 消息正文 Next: 下一个消息缓冲区的链指针 * PCB ...... Send(R, M) ...... 发送进程名:S 消息长度: SIZE 消息正文:TEXT ......  Receive(S, N) ...... 发送进程名:S 消息长度: SIZE 消息正文: TEXT M: N: ...... 消息链指针 ...... 接收进程 R 发送进程 S 消息1 消息n 消息2 .... send Receive * 2.?发送原语和接收原语 发送原语:send (R , M) 发送一个消息给进程 R; 发送进程存放的消息内存区的首址在M 中。 接收原语: Receive ( S, N) 接收来自S进程的消息。 * 例子: Send (R ,M ) {  向系统申请一个消息缓冲区;  P (mutex );  将发送区消息m 送入新申请的消息缓冲区;  把消息缓冲区挂入接收进程的消息队列;  V ( mutex );  V ( SM ); } 注:SM 为私用信号量,初值为0 * Receive ( S,N ) {  P( SM );  P ( mutex );

文档评论(0)

badjka + 关注
文档贡献者

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

1亿VIP精品文档

相关文档