网站大量收购独家精品文档,联系QQ:2885784924

哈工大威海 操作系统课件 第3章进程同步.ppt

哈工大威海 操作系统课件 第3章进程同步.ppt

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

司机 P1 售票员 P2 REPEAT REPEAT 启动 关门 正常运行 售票 到站停 开门 UNTIL FALSE UNTIL FALSE 进程间的关系——进程间并发举例 进程间的关系——并发执行举例 例3:与进程的执行顺序有关的错误 进程间的关系——并发执行举例 例3:与进程的执行顺序有关的错误 正确执行顺序 生产者进程 Buffer:interger Processer producer Begin L1:produce a product; Buffer:=product; go to L1 end 生产者对它做加1操作,消费者对它做减1操作,这两个操作在用机器语言实现时, 常可用下面的形式描述: register1 ∶ =counter; register2∶=counter; register1∶=register1+1; register2∶=register2-1; counter∶ =register1; counter∶=register2; 假设:counter的当前值是5。无论是先执行生产者的语句还是先执行消费者的语句,counter都为5 4、互斥算法——使用临界区遵循的原则 空闲则入:其他进程均不处于临界区; 忙则等待:已有进程处于其临界区; 有限等待:等待进入临界区的进程不能死等; 让权等待:不能进入临界区的进程,应释放CPU(如转换到阻塞状态) 临界区的使用原则是什么? 上面4条。 5 进程互斥的软件方法 有两个进程Pi, Pj,其中: 缺点:强制轮流进入临界区,没有考虑进程的实际需要。容易造成资源利用不充分:在Pi出让临界区之后,Pj使用临界区之前,Pi不可能再次使用临界区; 算法2:双标志、先检查 设立一个标志数组flag[]:描述进程是否在临界区,初值均为FALSE。 先检查,后修改:在进入区检查另一个进程是否在临界区,不在时修改本进程在临界区的标志; 在退出区修改本进程在临界区的标志; 优点:不用交替进入,可连续使用; 缺点:Pi和Pj可能同时进入临界区。按下面序列执行时,会同时进入:Pia Pja Pib Pjb。即在检查对方flag之后和切换自己flag之前有一段时间,结果都检查通过。这里的问题出在检查和修改操作不能连续进行。 算法3:双标志、后检查 类似于算法2,与互斥算法2的区别在于先修改后检查。可防止两个进程同时进入临界区。 flag[]初值均为FALSE 缺点:Pi和Pj可能都进入不了临界区。按下面序列执行时,会都进不了临界区:Pib Pjb Pia Pja。即在切换自己flag之后和检查对方flag之前有一段时间,结果都切换flag,都检查不通过。 信号量(semaphore) 信号量和P、V原语的另一种解释 每个信号量s除一个整数值s.count(计数)外,还有一个进程阻塞队列s.queue,其中是阻塞在该信号量的各个进程的标识 信号量只能通过初始化和两个标准的原语来访问--作为OS核心代码执行,不受进程调度的打断。 初始化指定一个非负整数值,表示空闲资源总数(又称为“资源信号量”)*****若为非负值表示当前的空闲资源数,若为负值其绝对值表示当前等待临界区的进程数。 二进制信号量(binary semaphore):只允许信号量取0或1值 1. P原语wait(s) --s.count; //表示申请一个资源; if (s.count 0) //表示没有空闲资源; { 调用进程进入阻塞队列s.queue; 阻塞调用进程; } 2. V原语signal(s) ++s.count; //表示释放一个资源; if (s.count = 0) //表示有进程处于阻塞状态; { 从等待队列s.queue中取出一个进程P; 进程P进入就绪队列; } P、V操作是定义在信号量S上的两个操作,其定义如下: P(S): ① S∶=S-1; ② 若S≥0,则调用P(S)的进程继续运行; ③ 若S0,则调用P(S)的进程被阻塞, 并把它插入到等 待信号量S的阻塞队列中。 

文档评论(0)

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

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

1亿VIP精品文档

相关文档