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

第2章_进程管理讲解.ppt

  1. 1、本文档共131页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * 例1、有如下图所示的工作模型,三个进程P0, P1, P2和三个缓冲区B0, B1和B2,进程间借助于相邻的缓冲区传递消息,Pi每次从Bi中取一条消息,经加工送入B(i+1)%3中, B0, B1和B2分别可存放3,2,2个消息,初始时,仅B0有三条消息,用wait,signal操作写出P0, P1,P2的同步互斥流程。 M1 M2 M3 P2 P0 P1 B0 B2 B1 对B0,B1和B2缓冲区设3个互斥信号量mutex0=1,mutex1=1,mutex2=1 设P0的同步信号量,full0=3,empty1=0 设P1的同步信号量,full1=0,empty2=0 设P2的同步信号量,full2=0,empty0=0 P0: While(1) {wait(full0); wait(mutex0); 从B0取消息 signal(mutex0); signal(empty0); 加工该消息 wait(empty1); wait(mutex1); 消息放入B1 signal(mutex1); signal(full1); } P1: While(1) {wait(full1); wait(mutex1); 从B1取消息 signal(mutex1); signal(empty1); 加工该消息 wait(empty2); wait(mutex2); 消息放入B2 signal(mutex2); signal(full2); } P2: While(1) {wait(full2); wait(mutex2); 从B2取消息 signal(mutex2); signal(empty2); 加工该消息 wait(empty0); wait(mutex0); 消息放入B0 signal(mutex0); signal(full0); } 例2有桥如图,车流如箭头所示,桥上不允许两车交会,但允许同方向车辆通行(即桥上可以有多个同方向的车)用wait,signal操作实现交通管理,以防桥上堵塞。 南 北 设2个变量,count1为向南的车计数, count2为向北的车计数 为桥设置互斥信号量bridge, 设mutex1表示向南的车对count1的互斥使用,设mutex2表示向北的车对count2的互斥使用 南 北 向南的车: {wait(mutex1); count1++; if count1=1 wait(bridge); signal(mutex1); 过桥; wait(mutex1); count1--; if count1=0 signal(bridge); signal(mutex1); } 向北的车: {wait(mutex2); count2++; if count2=1 wait(bridge); signal(mutex2); 过桥; wait(mutex2); count2--; if count2=0 signal(bridge); signal(mutex2); } * * * * * * * * * * * * * * * * * * * * * * * * * * 管程通过使用条件变量condition提供对同步的支持。条件变量包含在管程中,并且只有在管程中才能被访问。 对于条件变量可以执行wait和signal操作。 c.wait :调用进程的执行在条件c上挂起,管程现在可被另一个进程使用。 c.signal :恢复执行在cwait之后因为某些条件而挂起的进程。如果有多个这样的进程,选择其中一个;如果没有这样的进程,什么也不做。 … 入口等待队列 … 紧急等待队列 局部于管程的数据结构 过程1 …… 过程n 初始化语句 入口等待队列:等待进入管程 紧急等待队列:在管程内部由于执行唤醒操作,可能 会出现多个等待进程 注:紧急等待队列优先级高于入口等待队列。 … wait(c1) …… … wait(cn) 处理方法有两种: (前提:P唤醒Q) 1、P等待、Q继续,直到Q退出或等待(Hoare) 2、Q等待、P继续,直到P退出或等待 规定唤醒操作为管程中最后一个可执行的操作(Hansen) 问题:多个进程出现在管程中 当一个进入管程的进程执行等待操作时,它应当释放管程的互斥权;当一个进入管程的进程执行唤醒操作时,(

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档