4进程的同步与通信,进程死锁.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文档。上传文档
查看更多
* P(s),V(s)的实现 P(s){ disableIntrrupt(); While(s≤0){ enableIntrrupt(); disableIntrrupt(); } s=s-1; enableIntrrupt(); } V(s){ disableIntrrupt(); s=s+1; enableIntrrupt(); } * 实现信号量时与进程调度相结合,消除忙等待现象。 基本思想是: 在P操作循环等待的地方加入放弃处理机,进入等待队列动作; 在V操作时,从等待队列中摘取进程变为就绪态。 2. 信号量的具体实现 * 1. 信号量定义 typedef struct{ int:value; 一个数型变量 struct process *L;一个PCB队列 } Semaphore Semaphore S; 2. P操作 P(S): S.Value=S.value-1; if S.value0 then 保存现场, 将本进程挂入S.L队列,等待重新调度。 3. V操作 V(S): S.value:=value+1 if S.value≤0 then 从S.L队列 取一进程,挂入就绪队列。 4. P,V操作的优点:同步能力强 5. P,V操作的缺点:程序结构差,易产生死锁。 * 信号量的物理意义 P(s)操作: ①请求分配一个S代表的资源,执行S.value-1; ②若S.value0,表示系统已无该类资源,申请者阻塞。此时, |S.value|表示该信号量上阻塞的进程数; V(s)操作: ①进程释放一个S代表的资源,执行S.value+1; ②若S.value=0,表示尚有进程因等待S代表的资源而处于阻塞状态,所以应唤醒其中之一。 * 3. 利用信号量实现进程互斥 使用方法: 1)为每一个共享的临界资源设置一个互斥信号量,其初值为1。 2)各进程在进入临界段前先对该信号量进行P操作,退出临界段后执行V操作,从而保证各进程互斥的进入相关临界段。 注意:对同一信号量操作的P与V操作在进程中必须成对出现。 * 进程 Pi : 信号量 mutex=1 P(mutex) V(mutex) 临界段 非临界段 do{ }While(1) * 例子: 有一飞机机票售票系统,有m个售票处,各售票处通过计算机与该系统的票务中心连网,中心数据区中用Ri代表某天某次航班的余票数。进程pi为第i个售票处为旅客服务的进程,进程功能如下: pi() { 接受旅客订票要求; Xi=Ri ; //将票务中心该次航班的余票 //取出送该进程工作单元Xi if (Xi=1) { Xi= Xi-1; Ri =Xi; 输出一张机票; } else 输出机票已售完; } * 存在的问题: 1)存在几个旅客几乎同时在不同的售票处要求订购同天同一次航班的可能。 2)几个进程都要访问票务中心的共享变量Ri,可能出现这样的执行顺序: ①第i个售票处的售票进程pi刚刚取出Ri, 执行Xi=Ri; ②第j个售票处的售票进程pj马上执行Xj= Xj-1;Ri =Xj; ③pi再执行Xi= Xi-1;Ri =Xi。 产生的错误:pi,pj都售出了一张机票,但票务中心记录机票余额的变量Ri却只减了1。 * semaphore mutex; mutex=1; pi() { 接受旅客订票要求; P(mutex); Xi=Ri ; //将票务中心该次航班的余票Ri取出送该进 //程工作单元Xi if (Xi=1) { Xi= Xi-1; Ri =Xi; V(mutex); 输出一张机票; } else { V(mutex); 输出机票已售完; } 解决办法 * 同步模型:假设有两个协作的并发进程P1,P2,S1是P1中的一段代码,S2是P2中的一段代码,只有P1中的S1执行完后P2中的S2才能开始执行 实现方法:利用信号量的同步原语P可以实现P1向P2发送消息,用V来测试P1的消息是否到达。设sync

文档评论(0)

131****5901 + 关注
官方认证
文档贡献者

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

认证主体成都禄辰新动科技文化有限公司
IP属地四川
统一社会信用代码/组织机构代码
91510100MAACQANX1E

1亿VIP精品文档

相关文档