《操作系统原理》第三章 进程间的并发控制与死锁.pptVIP

《操作系统原理》第三章 进程间的并发控制与死锁.ppt

  1. 1、本文档共73页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
producer:begin repeat produce an item: ringbuffer.put(item); until false; end consumer:begin repeat ringbuffer.get(item); consume the item; until false end 管程实例:生产者/消费者-3 消息缓冲- 高级通信原语 高级通信:是指用户可直接利用操作系统的一组通信命令,高效地传递大量数据的一种通信方式 高效通信机制一般有:管道通信系统、消息传递系统等 消息传递系统:进程间的数据交换以消息(message)为单位,直接利用系统提供的一组通信命令(原语)实现通信 消息:是进程之间以不连续的成组方式发送的信息。 消息缓冲区:系统设置一个大的缓冲区,作为消息缓冲池,它又分成若干消息缓冲区,每个放一个消息 当进程需要发送消息时,就申请消息缓冲区。消息缓冲区是进程通信的基本单位。 消息缓冲区的类型 struct message_buffer { xx sender; 发送进程标识符 xx size; 消息长度 xx text; 消息正文 struct message_buffer *next; 指向下一个 消息缓冲区的指针 } PCB中有关消息通信的数据项 struct PCB{ .. .. .. mq ;接受消息队列队首指针 sm ;接受消息队列资源信号量 mutex ;接受消息队列互斥信号量 .. .. .. } 消息缓冲通信的过程 发送原语.. .. .. .. 接受原语.. .. .. .. 申请消息缓冲区 消息进入消息缓冲区 消息缓冲区挂入接受队列 接收进程摘下消息缓冲区,读入 归还系统消息缓冲区 显然,P、V操作的引入,克服了加锁操作的忙等待现象,有效提高了系统的效率 操作系统正是利用信号量的状态对进程和资源进行管理和控制的。 从物理意义上理解,P操作相当于申请资源;V操作相当于释放资源。 1、利用信号量实现进程之间的互斥 引入一个互斥信号量,用mutex表示。对于互斥使用的资源,其信号量的初值为1 欲进入临界区执行的进程须先对互斥信号量mutex执行P操作若已有进程占有临界资源,进程必须等待,直到临界资源空闲为止;若无进程占用,可使用它 进程完成临界区操作(即临界资源使用完)后,通过执行V操作释放临界资源,供其它进程使用 P/V操作实现进程间互斥 输入进程A …… P(s) 读消息到缓冲区 V(s) …… 输出进程B …… P(s) 从缓冲区取走消息 V(s) …… 用信号量可以方便地解决n个进程互斥地使用临界区的问题。信号量的取值范围是+1~(1-n)。信号量的值为负时,说明一个进程正在临界区执行,其它的正排在信号量等待队列中等待,等待的进程数等于信号量值的绝对值 例:若P、V操作的信号量初值为1,当前值为-3,则表示3个等待进程。 2、利用信号量实现进程之间的同步 进程同步:是指相互合作的一组共行进程,各自以独立的,不可预知的速度向前推进,在前进过程中彼此之间需要相互协调步伐,才能更好地完成统一项任务。 这些进程互相合作,在一些关键点上可能需要互相等待或互通消息。 为了解决进程的同步,同样也可以引入信号量 P/V操作实现进程间同步 例:用信号量实现计算进程与打印进程之间的同步过程。假定计算进程和打印进程共同使用一个单缓冲。 分析: 当计算进程对数据的计算尚未完成时,计算的结果没有送入缓冲区,打印进程不能执行打印操作。一旦计算机把计算结果送入缓冲区后,就应给打印进程发送一信号,打印进程收到该信号后,便可从缓冲区取出计算结果进行打印。 在打印进程尚未把缓冲区的计算结果打印完之前,计算进程也不能把下一次的计算结果送入缓冲区。只有在打印进程打印完缓冲区中的内容,给计算进程发出一个信号后,计算进程才能将下一次的计算结果送入缓冲区。 因此,计算进程和打印进程也是同步的。 为此,引入两个同步信号量s1和s2。 S1:表示缓冲区是否空,s1的初值为1; S2:表示缓冲区中是否有可供打印的计算结果,其初始值为0。 计算进程(Pc)和打印进程(Pp)之间的同步算法如下: int s1,s2; s1=1;s2=0; void Pc( ){ /*计算进程*/ while(TRUE){ computer next number p(s1); add the number to buffer

文档评论(0)

wuhuaiyu002 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档