(操作系统课件)04第四章互斥同步与通讯(2会合).ppt

(操作系统课件)04第四章互斥同步与通讯(2会合).ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4.3.6 会 合 (Rendezvous) P/V操作、管程等同步机制 适合于单机系统及具有公共内存的多CPU系统; 会合适合于不具有公共内存的分布式系统; 80年代, Ada, Initiated by DOD; Ada 95, (Object-oriented) 会 合: 两个并发执行流汇集到一处。 并发执行流:调用;接受 均发生, 握手, 同步。 会合图示 Ada实现会合的核心语句: accept 语句的语义: 例4-10 (分布系统会合例):单一资源管理 任务及入口定义: 探险者任务: task readers_writers is entry start_read ; entry finish_read ; entry start_write ; entry finish_write ; end readers_writes ; task body readers_writers is var read_count , write_count : integer; begin read_count := 0; write_count := 0 ; loop select when write_count = 0 = accept start_read do read_count++; end start_read; or when read_count 0 = accept finish_read do read_count--; end finish_read; or when (write_count 0) = accept finish_write do write_count--; end finish_write ; or 读者活动: readers_writes . start_read ; 读操作; Readers_writers . finish_read ; 写者活动: readers_writers . start_write ; 写操作; readers_writers . finish_write ; 4.4 进程高级通信 低级通信 (简单信号) 进程互斥:相关或不相关进程之间; 进程同步:相关进程之间。 高级通信 (大宗信息的交换) memory sharing message passing direct vs. indirect symmetric vs. non-symmetric buffering vs. non-buffering 4.4.2 进程通信的模式 4.4.3 直接方式 对称形式 (symmetric): sender and receiver name each other send ( R , message ) ; receive ( S , message ) ; 4.4.3 直接方式(Cont.) Buffer pool management 发送/接收原语 Remarks: send/receive 为高级通信原语, 可用低级原语实现; send/receive不是真正意义的原语, 可以被中断。 每个进程的PCB中都要定义 S_msg 和 m_mutex . 优 点: 节省空间(不需要buffer) 缺 点: 并发性差: 发送进程需要等待接收进程执行receive 把信息复制到接收进程空间后才能继续。 4.4.4 间接方式 4.4.4 间接方式(Cont.) 4.4.4 间接方式(Cont.) 4.4.4 间接方式(Cont.) 类似管程的对象object 每个object有一个互斥锁lock,一般未用; 说明为synchronized的method启用互斥锁; 每个object内部有一个等待队列; wait() : 释放lock, 状态改为blocked, 进入wait set. notify() : 在wait set中取任意线程,移到entry set, 状态改为runnable. (Signal and continue) notifyAll wait set所有线程移到entry set, 状态改为runnable. entry set and wait set entry

文档评论(0)

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

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

1亿VIP精品文档

相关文档