操作系统第2章2

上传人:枫** 文档编号:568630880 上传时间:2024-07-25 格式:PPT 页数:57 大小:990.50KB
返回 下载 相关 举报
操作系统第2章2_第1页
第1页 / 共57页
操作系统第2章2_第2页
第2页 / 共57页
操作系统第2章2_第3页
第3页 / 共57页
操作系统第2章2_第4页
第4页 / 共57页
操作系统第2章2_第5页
第5页 / 共57页
点击查看更多>>
资源描述

《操作系统第2章2》由会员分享,可在线阅读,更多相关《操作系统第2章2(57页珍藏版)》请在金锄头文库上搜索。

1、第二章进 程 管 理 2.3 2.3 进程的同步进程的同步进程同步问题的提出进程同步问题的提出进程异步推进可能造成混乱进程异步推进可能造成混乱混乱可能导致不可再现混乱可能导致不可再现进程同步目标进程同步目标维持进程并发性维持进程并发性维持进程并发性维持进程并发性以提高系统效率以提高系统效率以提高系统效率以提高系统效率进程执行异步(断续)进程执行异步(断续)进程执行异步(断续)进程执行异步(断续)资源的非封闭(共享)资源的非封闭(共享)资源的非封闭(共享)资源的非封闭(共享)结果不结果不结果不结果不可再现可再现可再现可再现进程同步进程同步进程同步进程同步进程间相互合作进程间相互合作进程间相互合作

2、进程间相互合作资源有效共享资源有效共享资源有效共享资源有效共享结果可再现结果可再现结果可再现结果可再现吨跋猪怖申必钳揍垮当纳喜命遣努姻纱妮艾纫苑宰湘旋护谁吸涉享啊阁弦操作系统第2章2操作系统第2章2第二章进 程 管 理 一、进程同步的基本概念一、进程同步的基本概念1 1进程间两种主要关系进程间两种主要关系 进程间的关系是在进程间相对独立的前提下发展的。进程间的关系是在进程间相对独立的前提下发展的。进程间的关系是在进程间相对独立的前提下发展的。进程间的关系是在进程间相对独立的前提下发展的。 独立获得资源独立获得资源独立获得资源独立获得资源 独立调度独立调度独立调度独立调度 1) 1) 直接作用直

3、接作用-相互合作引起相互合作引起-进程同步:进程同步: 进程间的相互联系是进程间的相互联系是有意识的安排有意识的安排的,直接作用只发生在相交进程间。的,直接作用只发生在相交进程间。 2) 2) 间接作用间接作用-资源共享引起资源共享引起-进程互斥:进程互斥: 进程间要通过某种中介发生联系,是进程间要通过某种中介发生联系,是无意识安排无意识安排的,可发生在相交进的,可发生在相交进程之间,也可发生在无关进程之间。程之间,也可发生在无关进程之间。狙烈住慈愁狠汤沪钥妮凑河诫藏兜彭瞅履期盛抨欧幽浮撂栋输措乎凡找后操作系统第2章2操作系统第2章2第二章进 程 管 理 进程间的同步关系(一)进程间的同步关系

4、(一)正常行车正常行车正常行车正常行车到站停车到站停车到站停车到站停车开车开车开车开车售票售票售票售票开车门开车门开车门开车门关车门关车门关车门关车门司机司机司机司机售票员售票员售票员售票员合作合作合作合作合作合作合作合作检查车况检查车况检查车况检查车况维持秩序维持秩序维持秩序维持秩序皇骑阴眉氏纯保竖铅点材得瓦掂劳尝呸质心涤罪谋褥蔚狗润驹氧徊炒戊也操作系统第2章2操作系统第2章2第二章进 程 管 理 获得打印数据获得打印数据获得打印数据获得打印数据打印进程打印进程打印进程打印进程1 1 1 1打印进程打印进程打印进程打印进程2 2 2 2打印打印打印打印打印打印打印打印互斥互斥互斥互斥获得打印

5、数据获得打印数据获得打印数据获得打印数据进程间的同步关系(二)进程间的同步关系(二)扩夏炒档再瘫尹晰遇敛页升靴递圾伪翱窝芭丹磁珠艳笨拉简距嫉蚂疲蚕轧操作系统第2章2操作系统第2章2第二章进 程 管 理 计算进程计算进程计算进程计算进程打印进程打印进程打印进程打印进程计算结果送到计算结果送到计算结果送到计算结果送到BufferBuffer从从从从BufferBuffer中取数中取数中取数中取数BufferBuffer互斥互斥互斥互斥完成数据计算完成数据计算完成数据计算完成数据计算打印打印打印打印通知打印进程打印通知打印进程打印通知打印进程打印通知打印进程打印通知计算进程通知计算进程通知计算进程通

6、知计算进程送下一个数送下一个数送下一个数送下一个数合作合作合作合作进程间的同步关系(三)进程间的同步关系(三)言对阜招纹澄跪侗邦腐撒欣霸驳熏鬃曼栈梦床胳袋穷渍赡胺婚诀皖胚蜂受操作系统第2章2操作系统第2章2第二章进 程 管 理 进程间的同步关系进程间的同步关系司机与售票员司机与售票员司机与售票员司机与售票员多个打印者多个打印者多个打印者多个打印者计算者与打印者计算者与打印者计算者与打印者计算者与打印者劳昂阵视摔诸酗筒铺翘存解娶培痔姿低片秀疏烫欧杏傣忱充荡泥稻树浸欠操作系统第2章2操作系统第2章2第二章进 程 管 理 相互感知程度相互感知程度 交互关系交互关系 一个进程对其他进程一个进程对其他进

7、程的影响的影响 相互不感知相互不感知( (完全不完全不了解其它进程的存在了解其它进程的存在) ) 竞争竞争(competition) (competition) 一个进程的操作对其一个进程的操作对其他进程的结果无影响他进程的结果无影响 间接感知间接感知( (双方都与双方都与第三方交互,如共享第三方交互,如共享资源资源) ) 通过共享进行协作通过共享进行协作 一个进程的结果依赖一个进程的结果依赖于从其他进程获得的于从其他进程获得的信息信息 直接感知直接感知( (双方直接双方直接交互,如通信交互,如通信) ) 通过通信进行协作通过通信进行协作 一个进程的结果依赖一个进程的结果依赖于从其他进程获得的

8、于从其他进程获得的信息信息 蓖死黑狂蓄无珐应攒芹净进煮滋辨楞咏咐议商址跃榴盲临扳葵予佃颗弱笑操作系统第2章2操作系统第2章2第二章进 程 管 理 2. 2. 进程的同步(直接作用)进程的同步(直接作用) 指系统中多个进程中发生的事件存在某种时序关系,需要指系统中多个进程中发生的事件存在某种时序关系,需要相互合作相互合作,共同完成一项任务。具体说,一个进程运行到某一点时要求另一伙伴进程共同完成一项任务。具体说,一个进程运行到某一点时要求另一伙伴进程为它提供消息,在未获得消息之前,该进程处于等待(阻塞)状态,获得为它提供消息,在未获得消息之前,该进程处于等待(阻塞)状态,获得消息后被唤醒进入就绪状

9、态。消息后被唤醒进入就绪状态。多个相关进程在执行次序上的协调。多个相关进程在执行次序上的协调。 3. 3. 进程的互斥(间接作用)进程的互斥(间接作用) 由于各进程要求共享资源,而有些资源需要互斥使用,因此各进程间由于各进程要求共享资源,而有些资源需要互斥使用,因此各进程间竞争竞争使用这些资源,进程的这种关系为进程的互斥。使用这些资源,进程的这种关系为进程的互斥。骏熙诱脯赚尸荆锚历彩弯鉴浪釜糠薛琉云匙厄眶坦昏揩夯总衙洁惋蒙精丸操作系统第2章2操作系统第2章2第二章进 程 管 理 4 4 4 4、 临界资源临界资源临界资源临界资源 系统中某些资源一次只允许一个进程使用,称这样的资源为临界系统中某

10、些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源。资源或互斥资源。 1) 1) 资源状态为临界:资源状态为临界:资源状态为临界:资源状态为临界:0 0 0 0 或或或或 1 1 1 1 2) 2) 2) 2) 对临界资源的访问必须是互斥。对临界资源的访问必须是互斥。对临界资源的访问必须是互斥。对临界资源的访问必须是互斥。 3) 3) 3) 3) 许多硬件资源如打印机、磁带机是属于临界资源。许多硬件资源如打印机、磁带机是属于临界资源。许多硬件资源如打印机、磁带机是属于临界资源。许多硬件资源如打印机、磁带机是属于临界资源。 思考:除此之外,软件中的共享变量是否是临界资源呢?思考:除此

11、之外,软件中的共享变量是否是临界资源呢?思考:除此之外,软件中的共享变量是否是临界资源呢?思考:除此之外,软件中的共享变量是否是临界资源呢? 生产者生产者-消费者消费者(producer-consumer)著名的进程同步问题。著名的进程同步问题。 问题描述:问题描述:有一群生产者进程在生产产品,并将这些产品提供给消有一群生产者进程在生产产品,并将这些产品提供给消费者进程去消费。为使生产者进程与消费者进程能并发执行,在两者之费者进程去消费。为使生产者进程与消费者进程能并发执行,在两者之间设置了一个具有间设置了一个具有n n个缓冲区的缓冲池(循环缓冲),个缓冲区的缓冲池(循环缓冲),生产者生产者进

12、程将它进程将它所生产的产品所生产的产品放入放入一个缓冲区中;一个缓冲区中;消费者消费者进程可从一个缓冲区中进程可从一个缓冲区中取走取走产产品去消费。品去消费。毁艘川邦胁拆哎蛇博蝎翰抚姆烁充幕儿邹豺安罕逸枷枢疙竟慧莫扣榜黎台操作系统第2章2操作系统第2章2第二章进 程 管 理 数据定义:数据定义: 1 1)var buffer: arrayvar buffer: array0 0,1 1,n-1n-1 of item of item: 用一个数组表示具有用一个数组表示具有n n个个(0(0,1 1,n-1)n-1)缓冲区的缓冲池。缓冲区的缓冲池。2 2)输入指针)输入指针 in: in: 下一个

13、可投放产品的缓冲区。下一个可投放产品的缓冲区。 in:= (in+1) mod n in:= (in+1) mod n;3 3)输出指针)输出指针 out out: 下一个可从中获取产品的缓冲区。下一个可从中获取产品的缓冲区。 out:= (out+1) mod n out:= (out+1) mod n。4 4)整型变量)整型变量 counter counter:生产者和消费者两进程共享。生产者和消费者两进程共享。 初始值为初始值为0;0; 生产者进程向缓冲池中投放一个产品后,使生产者进程向缓冲池中投放一个产品后,使countercounter加加1 1; 消费者进程从中取走一个产品时,使消

14、费者进程从中取走一个产品时,使countercounter减减1 1;5 5)局部变量)局部变量 nextp nextp: 存放每次刚生产出来的产品;存放每次刚生产出来的产品;6 6)局部变量)局部变量 nextc nextc: 存放每次要消费的产品。存放每次要消费的产品。 书帅铲浅耻穴甲危渠被竟仔留际耶闲玛籽胸群赴掇先响引磺淌颓席刹莎靳操作系统第2章2操作系统第2章2第二章进 程 管 理 Producer:生产者进程:生产者进程 repeat produce an item in nextp; while counter=n do no-op; bufferin:=nextp; in:=in

15、+1 mod n; counter:=counter+1; until false; Consumer: 消费者进程消费者进程 repeat while counter=0 do no-op;nextc:=bufferout;out:=(out+1) mod n;counter:=counter-1;consumer the item in nextc;until false; 思考:思考: 1、生产者程序和消费者程序顺序执行时其结果是否正确?、生产者程序和消费者程序顺序执行时其结果是否正确? 2、生产者程序和消费者程序并发执行时其结果是否正确?、生产者程序和消费者程序并发执行时其结果是否正确

16、? 3、原因何在?、原因何在?有何有何 作用?作用?袁制闪坦第汉某梨囤友龄颠脐掖促迹屡兽仙均饺隘棠关篮屹坠吵缀疡孟狄操作系统第2章2操作系统第2章2第二章进 程 管 理 问题问题: 共享变量共享变量counter。生产者、消费者对其操作,这两个操作在用生产者、消费者对其操作,这两个操作在用机器语言实现时,用下面的形式描述:机器语言实现时,用下面的形式描述: 设:设: counter:=5 register1:=counter; register2:=counter;生产者:生产者:register1:=register1+1; 消费者:消费者:register2:=register2-1; c

17、ounter:=register1; counter:=register2; 执行顺序:执行顺序:1、生产者先执行左列的三条语句,消费者再执行右列三条语句。、生产者先执行左列的三条语句,消费者再执行右列三条语句。 count:= 52、消费者先执行右列的三条语句,生产者再执行左列三条语句。、消费者先执行右列的三条语句,生产者再执行左列三条语句。 count:= 53、register1:=counter; (register1=5) register1:=register1+1; (register1=6) register2:=counter; (register2=5) register2

18、:=register2-1; (register2=4) counter:=register1; (counter=6) counter:=register2; (counter=4)结论:共享变量结论:共享变量counter是临界是临界资源,需互斥访资源,需互斥访问。问。结果不可再现结果不可再现桓鞋喷皱葫贰烃直藕巷武北凰讼切嘛晃宜偏鞭棘饯敞谬嫁嫉司巫杠楔蔡电操作系统第2章2操作系统第2章2第二章进 程 管 理 5. 5. 临界区临界区每个进程用于访问每个进程用于访问临界资源临界资源的那段程序。的那段程序。若能保证诸进程互斥地进入自己的临界区,便可实现诸进程对临若能保证诸进程互斥地进入自己的临

19、界区,便可实现诸进程对临界资源的互斥访问。界资源的互斥访问。 进入区进入区临界区临界区临界区临界区退出区退出区进入区进入区临界区临界区临界区临界区退出区退出区.阻塞等待阻塞等待阻塞等待阻塞等待资源释放资源释放资源释放资源释放改变资源改变资源改变资源改变资源状态状态状态状态释放资源释放资源释放资源释放资源唤醒等待唤醒等待唤醒等待唤醒等待进程进程进程进程进程进程进程进程 1 1进程进程进程进程 2 2寐偷敌壬府嫩峻车肘而贩迭毯棍畸邱渍棋胶秧斌滓席傅炮茨怀品硅捏衡蹈操作系统第2章2操作系统第2章2第二章进 程 管 理 6. 进程同步应遵循的原则进程同步应遵循的原则1)空闲让进)空闲让进当资源空闲时,

20、应当允许访问资源的进程进入临界区。当资源空闲时,应当允许访问资源的进程进入临界区。2)忙则等待)忙则等待 当资源被占用时,应使申请访问该资源的进程等待,等待使用者归还当资源被占用时,应使申请访问该资源的进程等待,等待使用者归还资源。资源。两个基本原则,必须遵循两个基本原则,必须遵循两个基本原则,必须遵循两个基本原则,必须遵循3 3 3 3)让权等待)让权等待)让权等待)让权等待 在进程等待资源时,从执行态转为阻塞态,应当让出在进程等待资源时,从执行态转为阻塞态,应当让出在进程等待资源时,从执行态转为阻塞态,应当让出在进程等待资源时,从执行态转为阻塞态,应当让出CPUCPUCPUCPU的使用的使

21、用的使用的使用权。系统将把权。系统将把权。系统将把权。系统将把CPUCPUCPUCPU分配给其它进程使用,以提高系统效率。分配给其它进程使用,以提高系统效率。分配给其它进程使用,以提高系统效率。分配给其它进程使用,以提高系统效率。4 4 4 4)有限等待)有限等待)有限等待)有限等待 系统应保证等待的进程能在有限的时间内获得资源,继续执行,系统应保证等待的进程能在有限的时间内获得资源,继续执行,系统应保证等待的进程能在有限的时间内获得资源,继续执行,系统应保证等待的进程能在有限的时间内获得资源,继续执行,以防止无限等待浪费该进程已占用的资源。以防止无限等待浪费该进程已占用的资源。以防止无限等待

22、浪费该进程已占用的资源。以防止无限等待浪费该进程已占用的资源。依捎鹊羹块膊忱微葱求夷息舱无稚骚卸惺戏皋位谤坑绞扣箔仆餐袍盲轮丙操作系统第2章2操作系统第2章2第二章进 程 管 理 二、二、 临界资源锁机制临界资源锁机制-解决进程互斥解决进程互斥例:商场的试衣间例:商场的试衣间是互斥资源是互斥资源是临界资源是临界资源是共享资源是共享资源每个顾客必须遵循以下过程使用试衣间:每个顾客必须遵循以下过程使用试衣间:靠锁实现资源的共享管理靠锁实现资源的共享管理靠锁实现资源的共享管理靠锁实现资源的共享管理观察锁状态观察锁状态关锁关锁使用试衣间使用试衣间开锁开锁叠抉啪蛤圾簇攫裳箍豪鞠昧犊员伟烦功信锻鸳砍演疚粹

23、做协笺容芒舜坤喘操作系统第2章2操作系统第2章2第二章进 程 管 理 临界资源锁机制临界资源锁机制锁锁锁锁锁变量锁变量锁变量锁变量L L每个进程必须按照以下过程操作资源:每个进程必须按照以下过程操作资源:每个进程必须按照以下过程操作资源:每个进程必须按照以下过程操作资源:L = 1 L = 1 关闭状态,资源忙关闭状态,资源忙关闭状态,资源忙关闭状态,资源忙L = 0 L = 0 打开状态,资源空闲打开状态,资源空闲打开状态,资源空闲打开状态,资源空闲抽象抽象抽象抽象L=1L=1临界区临界区临界区临界区L=0L=0关锁关锁访问访问开锁开锁抛阐赵琶铺肪疥巍豆磋趟蔫崭澜拌壳并撇浚宋萝膳短几愁泰车拽

24、簿贬蹈倦操作系统第2章2操作系统第2章2第二章进 程 管 理 一种简单的锁操作实现一种简单的锁操作实现void lock( L )void lock( L )check: if ( L = = 1 )check: if ( L = = 1 ) goto check; goto check; / /资源正在使用,继续反复测试资源正在使用,继续反复测试 else else L = 1;/ L = 1;/ 上锁上锁 void unlock( L )void unlock( L )L = 0; /L = 0; /开锁开锁 L=1 L=1? 1L 1L 入口入口 返回返回是是否否 0L 0L 入口入口

25、返回返回上上锁锁开开锁锁茶估刚莎栖户鞋韧寨副步今跋揣住降厚寂庚毖分乃曾胡讨妄辈烷疗笺林墩操作系统第2章2操作系统第2章2第二章进 程 管 理 .check: if ( L = = 1)check: if ( L = = 1)goto check; goto check; else L = 1;else L = 1;临界区临界区临界区临界区L L进程进程进程进程 1 1 1 1进程进程进程进程 2 2 2 2unlock( L );unlock( L );.check: if ( L = = 1)check: if ( L = = 1)goto check; goto check; else L

26、 = 1;else L = 1;临界区临界区临界区临界区unlock( L );unlock( L );.0 01 10 0 1 1 0 0锁操作模拟过程锁操作模拟过程陕稠栓嘱膀赐捏玉婆舅央肋斯制迈蛤抹笋侗遗褐毫软馈妖梭筹振涨瞪粗连操作系统第2章2操作系统第2章2第二章进 程 管 理 锁操作的一般模型锁操作的一般模型PiPi:. lock( L ) C( i ) unlock( L ) . lock( L ) C( i ) unlock( L ) .PjPj:. lock( L ) C( j ) unlock( L ) . lock( L ) C( j ) unlock( L ) .C( i

27、): Pi的临界区的临界区Pi: 进程进程i筛秩罚四柠坊浓豺饮畔妨相殿澡鄙会淡嗣妖蓄豢粳赊捡竞钱苞战录好带建操作系统第2章2操作系统第2章2第二章进 程 管 理 出了问题的锁出了问题的锁.check: if ( L = = 1)check: if ( L = = 1)goto check; goto check; else L = 1;else L = 1;临界区临界区临界区临界区unlock( L );unlock( L );.check: if ( L = = 1)check: if ( L = = 1)goto check; goto check; else L = 1;else L =

28、 1;临界区临界区临界区临界区unlock( L );unlock( L );.出现问题的锁出现问题的锁出现问题的锁出现问题的锁进程进程进程进程 1 1 1 1进程进程进程进程 2 2 2 2L L0 01 1尚未执行尚未执行尚未执行尚未执行问题出在?问题出在?问题出在?问题出在?判断状态后判断状态后判断状态后判断状态后改变状态前改变状态前改变状态前改变状态前被打断。被打断。被打断。被打断。搜灯酷膀跺敷综毕魔块耶什钙釉淌堂坠镰镊锣轰谆违柬宏窑耪乖饮俘咸朵操作系统第2章2操作系统第2章2第二章进 程 管 理 利用上锁原语和开锁原语实现进程互斥利用上锁原语和开锁原语实现进程互斥 利利用用上上锁锁原

29、原语语和和开开锁锁原原语语可可以以解解决决并并发发进进程程对对临临界界区区访访问问的的互互斥斥问题。问题。 任任何何申申请请进进入入临临界界区区的的进进程程,必必须须先先执执行行上上锁锁原原语语。若若上上锁锁原原语语顺顺利利通通过过,则则进进程程可可以以进进入入临临界界区区,这这时时临临界界区区已已被被上上锁锁原原语语锁锁住住,其其它它申申请请进进入入临临界界区区的的进进程程只只能能等等到到临临界界区区开开锁锁之之后后才才有有可可能能进进入入临临界界区区;当当进进程程完完成成对对临临界界资资源源的的访访问问退退出出临临界界区区时时再再执执行行开开锁锁原原语语,以以释释放放该该临界资源。临界资源

30、。 上锁原语上锁原语 临界区临界区CSCSA A开锁原语开锁原语上锁原语上锁原语 临界区临界区CSCSA A开锁原语开锁原语进程进程A A进程进程B B邦鱼铬自卿沫堵怜敞圾轻焉滨辉臀与坪圾钝让匣领暴肯扭糟返稻咨示墒勋操作系统第2章2操作系统第2章2第二章进 程 管 理 锁操作的特点:锁操作的特点:实现了进程互斥访问临界资源。实现了进程互斥访问临界资源。不遵循让权等待原则。不遵循让权等待原则。忙等忙等L=0L=0?L L1 1关中断关中断关中断关中断开中断开中断开中断开中断开中断开中断开中断开中断是是是是否否否否void lock( L )void lock( L )check: if ( L

31、= = 1 )check: if ( L = = 1 ) goto check; goto check; / /资源正在使用,继续反复测试;资源正在使用,继续反复测试;忙等;忙等; else else L = 1;/ L = 1;/ 上锁上锁 Lock(L)、UnLock(L)原子操作,不许中断。原子操作,不许中断。彦启蚕咨明导氦窥年扳潜攘谍浙旨土量志男沥彼垢仇产测叙廉胚炊唯偶貌操作系统第2章2操作系统第2章2第二章进 程 管 理 三、进程同步的信号量机制(三、进程同步的信号量机制(semaphoresemaphore)经典信号量、记录型信号量、经典信号量、记录型信号量、AND信号量、信号量集

32、信号量、信号量集1. 信号量机制的基本概念信号量机制的基本概念信号量信号量信号量是对信号量是对具体物理资源的抽象具体物理资源的抽象。不同类的资源用不同类的资源用不同名称不同名称的信号量代表。的信号量代表。同类资源同类资源的个数用的个数用 0的信号量值表示。的信号量值表示。信号量值为信号量值为 0 或或 1 的信号量的信号量表示表示临界资源临界资源。信号量是比锁更高级的资源抽象方式信号量是比锁更高级的资源抽象方式冯银钵痢近虱彰夯铡晒敏约辖讣温苗芝布赚誉红盟闷玩滞对识碳抑佃耶湖操作系统第2章2操作系统第2章2第二章进 程 管 理 2. 2. 经典经典( (整型整型) )信号量的信号量的P P,V

33、V操作操作资源的申请与释放原语资源的申请与释放原语P操作操作 wait(S): while S=0 do no-op; S:=S-1; 申请一个资源;申请一个资源;V操作操作 signal(S):S:=S+1;释放一个资源;释放一个资源;Y Y信号量:信号量:信号量:信号量:S SP P(s s)s = 0 ?s = 0 ?s = s -1s = s -1N NV V(s s)s = s + 1s = s + 1申请一个资源申请一个资源申请一个资源申请一个资源释放一个释放一个释放一个释放一个资源资源资源资源忙等?忙等?忙等?忙等?临界区临界区临界区临界区/ /资源访问区资源访问区资源访问区资源

34、访问区注意:注意:P,V两个原两个原子操作执行时是不子操作执行时是不可中断的。可中断的。悯肤箭混窜纵客吓峭交根充介廊撰惮判重革笼堵溃耿云午放悬显刑庞企小操作系统第2章2操作系统第2章2第二章进 程 管 理 3. 3. 记录型信号量记录型信号量解决经典信号量机制中未遵循解决经典信号量机制中未遵循“让权等待让权等待”。引入进程阻塞机制引入进程阻塞机制在信号量里增加对阻塞进程的纪录。在信号量里增加对阻塞进程的纪录。type semaphore=recordvalue: integer;L: list of process;end 资源个数资源个数资源个数资源个数阻塞进程(阻塞进程(阻塞进程(阻塞进程

35、(PCBPCB)队列)队列)队列)队列procedure wait(S) /申请资源申请资源var S:semaphore;begin S.value:=S.value-1; if S.value0 then block(S.L);end procedure signal(S)/释放资源释放资源var S: semaphore;begin S.value:=S.value+1; if S.value=0 then wakeup(S.L);end 户喧械胡淬滋向诈拱旧好法丛猪世曹利佛淳滴茧揖腹子碌没告祸渝迅菏魂操作系统第2章2操作系统第2章2第二章进 程 管 理 纪录型信号量的纪录型信号量的P

36、P,V V操作操作P( s )P( s )Wait(s)Wait(s)s.value = s.value - 1s.value = s.value - 1s .value 0 ?s .value 0 ?本进程获得本进程获得本进程获得本进程获得一个资源一个资源一个资源一个资源临界区临界区临界区临界区/ /资源访问区资源访问区资源访问区资源访问区本进程进入本进程进入本进程进入本进程进入block(s.L)block(s.L)队列,进入阻塞队列,进入阻塞队列,进入阻塞队列,进入阻塞状态状态状态状态N NY YV( s ) /signal(s)V( s ) /signal(s)s.value = s.

37、value+1s.value = s.value+1s .value= 0s .value= 0 ? ?将将将将s.Ls.L中中中中第一个进程第一个进程第一个进程第一个进程唤醒,唤醒,唤醒,唤醒,Wakeup(s.L)Wakeup(s.L)N NY Y枉炯备借莱寨蜀纵复冯晶右炉赢香事斥允碉舒去太嗡踪雹按芽芜憋阳匠走操作系统第2章2操作系统第2章2第二章进 程 管 理 纪录型信号量机制特点:纪录型信号量机制特点:进程对资源访问的过程:进程对资源访问的过程:原语保证原语保证p(s),),v(s)操作都是原语;)操作都是原语;保证不出现保证不出现“锁不住锁不住”资源的现象;资源的现象;.P( s )

38、.P( s )进入临界区进入临界区进入临界区进入临界区V( s ).V( s ).s s为为为为0 0时进程会进时进程会进时进程会进时进程会进入阻塞状态入阻塞状态入阻塞状态入阻塞状态皿掉拇舵绷答魔每尧煞甄甲糖翔货兰湃琶英又鞘教淫辨壮试怪叉普丢狼廉操作系统第2章2操作系统第2章2第二章进 程 管 理 纪录型信号量机制特点:纪录型信号量机制特点:主动阻塞与被动唤醒主动阻塞与被动唤醒P( s )P( s )s.value = s.value - 1s.value = s.value - 1s .value 0 ?s .value 0 ?本进程获得本进程获得本进程获得本进程获得一个资源一个资源一个资源

39、一个资源临界区临界区临界区临界区/ /资源访问区资源访问区资源访问区资源访问区本进程进入本进程进入本进程进入本进程进入s.Ls.L队列,进入阻塞队列,进入阻塞队列,进入阻塞队列,进入阻塞状态状态状态状态N NY YV( s ) V( s ) s.value = s.value+1s.value = s.value+1s .value= 0 ?s .valueS11?1?S2S21?1?。S1=S1S1=S11 1;S2=S2S2=S21 1;Sn=SnSn=Sn1 1;N NN N本进程进入本进程进入本进程进入本进程进入Si1Si 0时,可进行资源预留;时,可进行资源预留;di:申请个数:申请

40、个数一次可申请一种资源的多个。一次可申请一种资源的多个。SwaitSwait(S1,t1,d1,Sn,tn,dn)S1,t1,d1,Sn,tn,dn)刨羹仔戒扫衣昨胆膀邯蹋蔑酸呸罩陪内割箩泻召讯摆庇舌根入托疵技纵唯操作系统第2章2操作系统第2章2第二章进 程 管 理 “信号量集信号量集”的几种特殊情况的几种特殊情况:(1) Swait(S,d,d)。此此时时在在信信号号量量集集中中只只有有一一个个信信号号量量S,但但允允许许它每次申请它每次申请d个资源,当现有资源数少于个资源,当现有资源数少于d时,不予分配。时,不予分配。(2) Swait(S,1,1)。此此时时的的信信号号量量集集已已蜕蜕化

41、化为为一一般般的的记记录录型型信信号号量量(S1时时)或互斥信号量或互斥信号量(S=1时时)。(3) Swait(S,1,0)。这是一种很特殊且很有用的信号量操作。当这是一种很特殊且很有用的信号量操作。当S1时,允许多个进程进入某特定区;当时,允许多个进程进入某特定区;当S变为变为0后,将阻止任何进程进入后,将阻止任何进程进入特定区。换言之,它相当于一个可控开关。特定区。换言之,它相当于一个可控开关。 七申谅意衣泳棺分玻苦殉齐本淖嘻屏顽撰纳喜腿镊挤拜蛆蟹继烂筹同一挣操作系统第2章2操作系统第2章2第二章进 程 管 理 小结四种信号量特点:小结四种信号量特点:1 1、整型信号量、整型信号量 wa

42、it(s) wait(s),signal(s)signal(s)对一类资源申请和释放对一类资源申请和释放 wait(s) wait(s):如果:如果s=0, s=0, 忙等;否则申请忙等;否则申请一个一个资源;资源; signal(s) signal(s):释放:释放一个一个资源;资源;2 2、记录型信号量、记录型信号量-对一类资源申请和释放对一类资源申请和释放 解决了忙等;解决了忙等; wait(s) wait(s): 如如s s减一后,减一后,s0s0,则阻塞,排到阻塞队列。,则阻塞,排到阻塞队列。 signal(s) signal(s):如:如s s加一后,加一后,s=0s=0,则唤醒一

43、个进程;,则唤醒一个进程; 如如s=-2s=-2,说明有两个进程排在等待该类资源的阻塞队列。,说明有两个进程排在等待该类资源的阻塞队列。3 3、AndAnd型信号量型信号量 解决了解决了多类资源多类资源同步和互斥管理。策略:一次性全获得和释放;同步和互斥管理。策略:一次性全获得和释放; 但一次只能申请和释放一个资源。但一次只能申请和释放一个资源。4 4、信号量集、信号量集 对对多类资源,每次可申请和释放多个,并且有一个下限多类资源,每次可申请和释放多个,并且有一个下限。策略:如满足策略:如满足条件,一次性全获得和释放。条件,一次性全获得和释放。PV操操作作羌剁榆孩饶济芦蔚墒卉哀记喀斋托它缆愈俱

44、绦求迹涅社烂郁莹已骤撅睡猾操作系统第2章2操作系统第2章2第二章进 程 管 理 6 . 6 . 信号量的应用信号量的应用利用信号量实现进程互斥利用信号量实现进程互斥资源竞争时的进程同步。资源竞争时的进程同步。对竞争资源的互斥访问互斥信号量对竞争资源的互斥访问互斥信号量mutex=1mutex=1。waitwait(mutexmutex)临界区临界区临界区临界区signalsignal(mutexmutex)进程进程进程进程1 1 1 1进程进程进程进程2 2 2 2waitwait(mutexmutex)临界区临界区临界区临界区signalsignal(mutexmutex)P P(s s)访

45、问资源访问资源访问资源访问资源V V(s s)状态:状态:状态:状态:唤醒唤醒唤醒唤醒就绪就绪就绪就绪执行执行执行执行就绪就绪就绪就绪执行执行执行执行阻塞阻塞阻塞阻塞虐夷叹壤饼丢泛楔伞昂举淬意酞恳还验损芜芽搀于奢斤哦绳市贴帛蘑切盅操作系统第2章2操作系统第2章2第二章进 程 管 理 6. 6. 信号量的应用信号量的应用-利用信号量实现进程同步利用信号量实现进程同步-相互合作时的进程同步相互合作时的进程同步保证进程间的前驱、后继关系保证进程间的前驱、后继关系司机进程司机进程司机进程司机进程正常行车正常行车正常行车正常行车到站停车到站停车到站停车到站停车V V(停车)(停车)(停车)(停车)喝茶喝

46、茶喝茶喝茶P P(关车门)(关车门)(关车门)(关车门)正常行车正常行车正常行车正常行车售票售票售票售票P P(停车)(停车)(停车)(停车)开车门开车门开车门开车门关车门关车门关车门关车门V V(关车门)(关车门)(关车门)(关车门)售票售票售票售票售票员进程售票员进程售票员进程售票员进程同步点同步点同步点同步点同步点同步点同步点同步点V V(s s)P P(s s)前驱前驱前驱前驱后继后继后继后继信号量初值为信号量初值为信号量初值为信号量初值为0 0迢呵屈箭丰肺涛扯爵漂踊抢辨馅俄椭漳凿亏棺赃悬挤怪不摄蛛壬鉴抉枫忻操作系统第2章2操作系统第2章2第二章进 程 管 理 公用与私用信号量公用与私

47、用信号量公用信号量:公用信号量:私用信号量:私用信号量:一组进程共享,都可进行一组进程共享,都可进行一组进程共享,都可进行一组进程共享,都可进行P P、V V操作操作操作操作用于进程间资源的竞争;用于进程间资源的竞争;用于进程间资源的竞争;用于进程间资源的竞争;mutex=1mutex=1拥有信号量的进程只对信号量进行拥有信号量的进程只对信号量进行拥有信号量的进程只对信号量进行拥有信号量的进程只对信号量进行P P操作。操作。操作。操作。V V操作由其他进程进行。操作由其他进程进行。操作由其他进程进行。操作由其他进程进行。用于进程间的合作;用于进程间的合作;用于进程间的合作;用于进程间的合作;

48、资源信号量资源信号量资源信号量资源信号量s s初值试情况而定。初值试情况而定。初值试情况而定。初值试情况而定。P P(mutexmutex)V V(mutexmutex)访问资源访问资源访问资源访问资源P P(mutexmutex)V V(mutexmutex)访问资源访问资源访问资源访问资源进程进程进程进程1 1:进程进程进程进程2 2:P P(s s)V V(s s)后继进程:后继进程:后继进程:后继进程:前驱进程:前驱进程:前驱进程:前驱进程:周瓶锹阉牲旱论膘枚朋叮拳瓮朗婆莱阉斑索奏脸昌牌轴栽菌儿给比篇涨雍操作系统第2章2操作系统第2章2第二章进 程 管 理 6 . 6 . 信号量的应用

49、信号量的应用-利用信号量实现前趋关系利用信号量实现前趋关系 条条件件:设设有有两两个个并并发发执执行行的的进进程程P1和和P2。P1中中有有语语句句S1;P2中中有有语语句句S2。 目标:目标:S1S2 前驱关系前驱关系 实现:实现: P1和和P2共享一个公用信号量,初值共享一个公用信号量,初值S=0; P1:S1;signal(S); P2:wait(S);S2; 姓窍千臂翰杖溯秒捡绊稻焙节搬宿教蜜寸市毖映赚琵耸晋玄滑挝啪二泵召操作系统第2章2操作系统第2章2第二章进 程 管 理 Var a,b,c,d,e,f,g:semaphore: =0,0,0,0,0,0,0;beginparbegi

50、nbegin S1; signal(a); signal(b); end;begin wait(a); S2; signal(c); signal(d); end;begin wait(b); S3; signal(e); end;begin wait(c); S4; signal(f); end;begin wait(d); S5; signal(g); end;begin wait(e); wait(f); wait(g); S6; end;parendend 例:例: 有一前驱图,利有一前驱图,利用信号量实现前驱关用信号量实现前驱关系。系。abcdefg烟榨沛奠形赠锦吐宰藉蚜访臆噶溅乱号

51、户陛再小冯讽盾旗程钡涡恢孵碾妈操作系统第2章2操作系统第2章2第二章进 程 管 理 2.4经典进程的同步问题经典进程的同步问题 一、生产者一、生产者消费者问题消费者问题-典型的同步例子典型的同步例子 它描述了一组生产者向一组消费者提供产品(数据),它们共享一它描述了一组生产者向一组消费者提供产品(数据),它们共享一个有界缓冲区,生产者向其中投放产品,消费者从中取出产品消费。这样个有界缓冲区,生产者向其中投放产品,消费者从中取出产品消费。这样的一个问题是的一个问题是许多相互合作进程许多相互合作进程存在的内在关系的一种抽象。存在的内在关系的一种抽象。 一组生产者一组生产者P1P1、P2P2、PmP

52、m一组消费者一组消费者C1C1、C2C2、CkCk有界缓冲区有界缓冲区长度为长度为n n(n n 0 0)芭塌冗己舒灶镀乏秘卧注磨乳贤拢尝派响荡蚌渺屑圾襟楷砾镑晓虞硷绎熊操作系统第2章2操作系统第2章2第二章进 程 管 理 只要缓冲区未满,生产者就可把产品送入缓冲区;只要缓冲区未空,只要缓冲区未满,生产者就可把产品送入缓冲区;只要缓冲区未空,消费者便可从缓冲区取走产品并消耗它。消费者便可从缓冲区取走产品并消耗它。 仅当缓冲区满时,生产者被阻塞,类似地,缓冲区空时,消费者被仅当缓冲区满时,生产者被阻塞,类似地,缓冲区空时,消费者被阻塞。阻塞。 生产者和消费者的同步关系将禁止生产者向满的缓冲区输送

53、产品,生产者和消费者的同步关系将禁止生产者向满的缓冲区输送产品,也禁止消费者从空的缓冲区中提取物品。也禁止消费者从空的缓冲区中提取物品。 P1P1P2P2P3P3Pm-1Pm-1PmPm C1C1C2C2C3C3Ck-1Ck-1CkCk缓冲区缓冲区痞浚锹粗诡聋舟锹匿拧八磅供晒倔危茧牢傍吃领搪姆智汛嵌芋宫蓖闲恬嘎操作系统第2章2操作系统第2章2第二章进 程 管 理 算法分析算法分析两类进程:生产者进程和消费者进程两类进程:生产者进程和消费者进程(1)进程间的关系)进程间的关系(合作:同步信号量)(合作:同步信号量)生产者生产产品后消费者消费。生产者生产产品后消费者消费。设设full:表示表示满缓

54、冲区满缓冲区(即产品)的数目,初值为即产品)的数目,初值为0;消费者消费后的空缓冲区由生产者生产产品。消费者消费后的空缓冲区由生产者生产产品。设设empty:表示表示空缓冲区空缓冲区的数目,初的数目,初值为缓冲区的大小值为缓冲区的大小n。(2)进程间的关系)进程间的关系(竞争:互斥信号量)(竞争:互斥信号量) 由于有界缓冲区是一个临界资源,必须互斥使用,所以,还需要设置一个互由于有界缓冲区是一个临界资源,必须互斥使用,所以,还需要设置一个互斥信号量:斥信号量: mutex:互斥信号量,初值为互斥信号量,初值为l。P P(fullfull)V V(fullfull)生产者(后继):生产者(后继)

55、:生产者(后继):生产者(后继):消费者(前驱):消费者(前驱):消费者(前驱):消费者(前驱):生产者(前驱):生产者(前驱):生产者(前驱):生产者(前驱):消费者(后继):消费者(后继):消费者(后继):消费者(后继):P P(emptyempty)V V(emptyempty)消费者何消费者何时阻塞?时阻塞?生产者何生产者何时阻塞?时阻塞?Full是公是公用还是私用还是私用?用?mutex是公是公用还是私用还是私用?用?睬什釜截升堑瓦俊捣怜挥渡偶略蹲炎锹哗顷锋摇弱迹棵酬课隶惨旱肾申隶操作系统第2章2操作系统第2章2第二章进 程 管 理 生产者生产者消费者问题流程消费者问题流程 生产者进

56、程生产者进程Pi(i=1,2, ,m) Pi(i=1,2, ,m) 消费者进程消费者进程Cj(j=1,2, ,k)Cj(j=1,2, ,k) 产品送入缓冲区产品送入缓冲区 wait(empty)wait(empty) wait(mutex)wait(mutex)signal(mutex)signal(mutex) signal(full) signal(full) 生产一个产品生产一个产品 从缓冲区取一个产品从缓冲区取一个产品 wait(mutex)(mutex) signal(empty)signal(empty) signal(mutex)signal(mutex) 消耗该产品消耗该产品

57、wait(full)wait(full)唤醒唤醒唤醒唤醒先看先看池满?池满?后看后看使用?使用?empty=0阻塞阻塞full=0阻塞阻塞先看先看池空?池空?怠赡拷懒贬患展敌冤履嘎对婚衙祷畅普谓愧族荆伶伍恰抄罢鸡央舀弛楼哥操作系统第2章2操作系统第2章2第二章进 程 管 理 Var mutex,empty,full: semaphore:=1,n,0;buffer:array0,n-1 of item;in,out: integer:=0,0;proceducer: beginrepeatproducer an item nextp;wait(empty); wait(mutex);buffe

58、r(in):=nextp;in:=(in+1) mod n;signal(mutex);signal(full);until false;endconsumer: begin repeat wait(full); wait(mutex); nextc:=buffer(out); out:=(out+1) mod n; signal(mutex); signal(empty); consumer the item in nextc; until false;end Swait(empty,mutex)Ssignal(mutex,full)Swait(full,mutex)Ssignal(mute

59、x,empty)记录型记录型信号量信号量And型型信号量信号量术诲饶蘸乞脖傅外厉沉犬棕申韵颖陛庄善哨孩翻警亿相榆历瓮把赞仇律颗操作系统第2章2操作系统第2章2第二章进 程 管 理 生产者消费者算法小结:生产者消费者算法小结:在分析进程同步问题中,逐个分析进程间的关系是关键。在分析进程同步问题中,逐个分析进程间的关系是关键。不管多复杂的关系,总能归结为两种基本关系(竞争与合作),总是不管多复杂的关系,总能归结为两种基本关系(竞争与合作),总是这两种关系的组合。这两种关系的组合。不管公用还是私用,信号量的使用必须成对出现。不管公用还是私用,信号量的使用必须成对出现。P(s1) ,P(s2)两操作在

60、一起,两操作在一起,P的顺序至关重要,同步的顺序至关重要,同步P和互斥和互斥P在一在一起,同步起,同步P操作在前。操作在前。互斥操作时,互斥操作时,PV处于同一进程;同步操作时,不在同一进程。处于同一进程;同步操作时,不在同一进程。思考思考思考思考多个生产者之间是什么关系,需要特别的实现吗?多个生产者之间是什么关系,需要特别的实现吗?多个生产者之间是什么关系,需要特别的实现吗?多个生产者之间是什么关系,需要特别的实现吗?多个消费者之间是什么关系,需要特别的实现吗?多个消费者之间是什么关系,需要特别的实现吗?多个消费者之间是什么关系,需要特别的实现吗?多个消费者之间是什么关系,需要特别的实现吗?

61、亚伐橇膘失低勿韦椎歉唯右但摸湃盆威际伶吃勤会荚桅鹰叶旬辱霓蕴薛环操作系统第2章2操作系统第2章2第二章进 程 管 理 二、哲学家进餐问题二、哲学家进餐问题问题描述问题描述五位哲学家围桌而坐。五位哲学家围桌而坐。哲学家在思考问题时不需要哲学家在思考问题时不需要任何资源,思考完问题后进入任何资源,思考完问题后进入进餐态。进餐态。每人必须获得左右两支筷子每人必须获得左右两支筷子才能进餐。才能进餐。思考思考思考思考思考思考思考思考思考思考准备进餐准备进餐进餐进餐准备进餐准备进餐进餐进餐浅堂娘呆斥氨郧闲讹弧辉涎帖量阅伎嗅抵捕霉鲍纶边邮甲淋蔚氓来试筷咒操作系统第2章2操作系统第2章2第二章进 程 管 理

62、1利用记录型信号量解决哲学家进餐问题利用记录型信号量解决哲学家进餐问题放在桌子上的筷子是临界资源,在一段时间内只允许一位哲学家使放在桌子上的筷子是临界资源,在一段时间内只允许一位哲学家使用。用一个信号量表示一只筷子,由这五个信号量构成信号量数组。用。用一个信号量表示一只筷子,由这五个信号量构成信号量数组。 信号量初始值均为信号量初始值均为1; Var chopstick: array0,4 of semaphore; 活动描述:活动描述:repeatwait(chopsticki);wait(chopstick(i+1)mod 5);eat;signal(chopsticki);signal(

63、chopstick(i+1)mod 5);think;until false; 呐烷目雀单石洗坟臼澄凭遮菊蚤衍逃溅儿悬胖临酬绿捉戮辞蛛舜卢利里姥操作系统第2章2操作系统第2章2第二章进 程 管 理 哲学家问题分析哲学家问题分析死锁死锁思考思考思考思考思考思考思考思考思考思考准备进餐准备进餐准备进餐准备进餐准备进餐准备进餐准备进餐准备进餐准备进餐准备进餐思考思考思考思考P(chopsticki)P(chopsticki+1mod5P(chopsticki+1mod5) ) V V(chopstickichopsticki)) )V(chopsticki+1mod5)eateat酷径捍蛮舰职嘲氓尝

64、袄者瀑俯娥弃痈垫嘎嫁丢聪肩咕址唾旅诬襄佃氨壁九操作系统第2章2操作系统第2章2第二章进 程 管 理 可采取以下几种解决死锁问题方法:可采取以下几种解决死锁问题方法: (1) 至至多多只只允允许许有有四四位位哲哲学学家家同同时时去去拿拿左左边边的的筷筷子子,最最终终能能保保证证至至少少有有一一位位哲哲学学家家能能够够进进餐餐,并并在在用用毕毕时时能能释释放放出出他他用用过过的的两两只只筷筷子子,从从而而使使更更多的哲学家能够进餐。多的哲学家能够进餐。(2) 仅当哲学家的左、右两只筷子均可用时,才允许他拿起筷子进餐。仅当哲学家的左、右两只筷子均可用时,才允许他拿起筷子进餐。(3) 规定奇数号哲学家

65、先拿他左边的筷子,然后再去拿右边的筷子,而偶规定奇数号哲学家先拿他左边的筷子,然后再去拿右边的筷子,而偶数号哲学家则相反。数号哲学家则相反。15432竞争竞争竞争竞争江袖惫文佑丙巩钓琴家募怯葵勉谱囤缸晾晒怀配娜武捉淄快捏抓苹建夕锌操作系统第2章2操作系统第2章2第二章进 程 管 理 2利用利用AND信号量机制解决哲学家进餐问题信号量机制解决哲学家进餐问题在哲学家进餐问题中,要求每个哲学家先获得两个临界资源在哲学家进餐问题中,要求每个哲学家先获得两个临界资源(筷子筷子)后方能进餐,后方能进餐,AND信号量机制可获得最简洁的解法。描述如下:信号量机制可获得最简洁的解法。描述如下: Var chop

66、siick array of semaphore:=(1,1,1,1,1);processirepeatthink;Swait(chopstick(i+1)mod 5,chopsticki);eat;Ssignal(chopstick(i+1)mod 5,chopsticki);until false; 旧屋穗壕极阻席限桩抬仿晨桥下猿牢猿笨掷炔恭闷圆黄冕驰芥耽绞簿蚌楷操作系统第2章2操作系统第2章2第二章进 程 管 理 三、读者三、读者写者问题写者问题(Reader and Writer )问题描述问题描述一个数据记录一个数据记录(共享数据共享数据),有多个进程进行读操作,另一些进程,有多个进

67、程进行读操作,另一些进程进行修改操作。进行修改操作。(Reader)(Writer)读写策略读写策略允许多个进程同时进行读操作允许多个进程同时进行读操作读不互斥读不互斥不允许多于一个进程进行写操作不允许多于一个进程进行写操作写互斥写互斥不允许读写操作同时进行不允许读写操作同时进行读写互斥读写互斥靛傲脂腿仰甘卷觉调袋眯醚窒冈升惭调妊悔悔谣鸟览究阔爆闷攒剐刻猿像操作系统第2章2操作系统第2章2第二章进 程 管 理 用一个计数器用一个计数器ReadcountReadcount来统计读者的数量,每当有一个读者欲访来统计读者的数量,每当有一个读者欲访问共享数据时,对问共享数据时,对ReadcountRe

68、adcount计数加计数加1 1,每当有一个读者结束对共享数,每当有一个读者结束对共享数据的访问时,对据的访问时,对ReadcountReadcount计数减计数减1 1,在第一个读者,在第一个读者到达共享数据区到达共享数据区之之后以及后以及最后一个读者离开最后一个读者离开共享数据区之前,写者共享数据区之前,写者不能访问不能访问共享数据区。共享数据区。 思考:需要几个信号量?是什么类型信号量?思考:需要几个信号量?是什么类型信号量? 为了解决读者为了解决读者写者问题,我们设置了两个互斥信号量:写者问题,我们设置了两个互斥信号量: 信号量信号量wmutexwmutex,用于写者与写者之间、读者与

69、写者、写者与读者用于写者与写者之间、读者与写者、写者与读者之间对共享数据区操作的互斥,初值为之间对共享数据区操作的互斥,初值为1 1; 信号量信号量rmutexrmutex,用于多个读者对共享计数器用于多个读者对共享计数器Readcount(Readcount(临界资源临界资源) )操作的互斥,初值为操作的互斥,初值为1 1。砚际革茄裳词棕驰吊狄争卞褒红割剔哼颁镑凑囊命惶绍黎健补增守赖旗混操作系统第2章2操作系统第2章2第二章进 程 管 理 读者读者写者问题可描述如下写者问题可描述如下:Var rmutex,wmutex: semaphore:=1,1;Readcount: integer:=

70、0;读者:读者:Reader: begin repeat wait(rmutex);/*读进程要进入先读进程要进入先修改修改Readcount*/ if readcount=0 then wait(wmutex); /*如尚无读进程,读进程需执行如尚无读进程,读进程需执行wait(wmutex) 。 1、 如如wmutex=1(成功成功),说明无写进程在写,说明无写进程在写, 则则wmutex=0(锁住写进程),读进程可进入读。(锁住写进程),读进程可进入读。 2、 如如wmutex=0(不成功),说明有写进程在写,则读进程阻塞等待。不成功),说明有写进程在写,则读进程阻塞等待。*/ Read

71、count:=Readcount+1;/* 如成功进入,读者加一如成功进入,读者加一*/ signal(rmutex); /*读进程对读进程对readcount访问结束访问结束*/ perform read operation;/*执行读操作执行读操作*/ wait(rmutex); /*读进程退出要修改读进程退出要修改Readcount*/ readcount:=readcount-1;/* 读者减一读者减一 */ if readcount=0 then signal(wmutex); /*如是最后一个读进程,则如是最后一个读进程,则wmutex=1(释放写进程),允许写进程进行写(释放写进

72、程),允许写进程进行写*/ signal(rmutex); until false;end写者:写者:writer: 写者写者beginrepeat wait(wmutex); perform write operation; signal(wmutex); until false;end进进入入退退出出讼迂刺溯乓熏俞狼磁曳畴当菠紫痪房寺糖会护咨稠印缔拜港伯蚌戒魔帽径操作系统第2章2操作系统第2章2第二章进 程 管 理 例:某超级市场,可容纳例:某超级市场,可容纳100100人同时购物。入口处备有篮子,每个购物者人同时购物。入口处备有篮子,每个购物者可持一只篮子入内购物。出口处结帐,并归还篮子

73、(出、入口仅容一人可持一只篮子入内购物。出口处结帐,并归还篮子(出、入口仅容一人通过)。请试用通过)。请试用P P(S S)、)、V V(S S)操作以及信号量写出购物同步算法。)操作以及信号量写出购物同步算法。process Piprocess Pi(i=1i=1,2 2, ,) ) begin begin repeat repeat 进入口处,并取一只篮子;进入口处,并取一只篮子; 选购商品选购商品 结帐,并归还篮子;结帐,并归还篮子; until false; until false; end end;解:解:设信号量设信号量S S其初始值为其初始值为100100,信号量,信号量mutexmutex其初始值为其初始值为1 1 。购物者进程。购物者进程设为设为PiPi,其算法如下所示:,其算法如下所示:s,mutexs,mutex:semaphoresemaphore;s=100s=100;mutex=1;mutex=1;P(s);P(s);P(mutex)P(mutex);V(mutex);V(mutex);P(mutex)P(mutex);V(mutex);V(mutex);V(s)V(s);刑房饶却献扒力抡捷刻免恰酮采悯揍光俄豢阿冬雇寡纶凋喻匡极冶茄奖腆操作系统第2章2操作系统第2章2

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号