- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统 进程管理三互斥和同步二精品.ppt
* 3. 哲学家进餐问题(the dining philosophers problem) 问题描述:(由Dijkstra首先提出并解决)5个哲学家围绕一张圆桌而坐,桌子上放着5支筷子,每两个哲学家之间放一支;哲学家的动作包括思考和进餐,进餐时需要同时拿起他左边和右边的两支筷子,思考时则同时将两支筷子放回原处。如何保证哲学家们的动作有序进行?如:不出现相邻者同时要求进餐;不出现有人永远拿不到筷子; * * 1.利用记录型信号量机制解决 2.利用AND型信号量机制解决 2.4.2哲学家就餐问题 * 哲学家就餐问题 问题分析: 筷子是临界资源:每根有多于一个哲学家要用,而且同时只能有一个哲学家使用 5根筷子可以用5个信号量表示。形成信号量数组: var chopstick:array[0,…4]of semaphore; 所有信号量初值为1,表示未被使用。 * 哲学家就餐问题 第i位哲学家的活动描述为: Repeat wait(chopstick[i]); wait(chopstick[(i+1)mod 5]); eat; signal(chopstick[i]); signal(chopstick[(i+1)mod 5]); think; Until false; parbegin philosopher (0); philosopher (1); philosopher (2); philosopher (3); philosopher (4); parend * 哲学家就餐问题 可能产生死锁: 五位哲学家同时饥饿,各自拿起左边的筷子时,会使得所有信号量的值为0,再试图拿起右边的筷子时,都将拿不到筷子。 解决死锁的方法: 至多允许四个哲学家同时进餐。 仅当哲学家的左右两支筷子均可用时,才进餐。(用AND信号量机制解决哲学家进餐问题。) 奇数号哲学家先拿左边的筷子,偶数号哲学家先拿右边的筷子。 * AND型信号量机制解决哲学家就餐问题 要求哲学家同时获得两根筷子,否则一根也不拿。 var chopstick:array[0,…4]of semaphore:=(1,1,1,1,1); Repeat think; Sswait(chopstick[(I+1)mod 5]),chopstick[I]); Eats; Ssignal(chopstick[(I+1)mod 5]),chopstick[I]); until false; * 思考: 用其余两种思路,怎样解决哲学家就餐问题? * 小结 顺序执行和并发执行 进程的定义(与程序比较),静态表示(上下文,包括PCB),动态表示(状态),用户代码和OS代码 进程控制(注意:挂起和激活),UNIX和Windows NT举例 线程:引入原因,与进程比较 互斥和同步:信号量,信号量集,管程 进程间通信IPC:信号,共享存储区,管道,消息,管套 死锁问题:原因,条件,解决方法 其他方面:OS引导 * 2.3.2.1 信号量和wait、signal原语 信号量只能通过初始化和两个标准的原语来访问--作为OS核心代码执行,不受进程调度的打断 在实际操作系统中,一般情况下是由机器硬件提供P、V操 作的指令,当然是原子操作,若机器不提供P、V操作的指 令,则操作系统提供P、V操作原语。 信号量的形式化定义: type semaphore=record value: integer; L: listofprocess; end 1. P原语(wait) * procedure wait(S) var S:semaphore; begin S.value:=S.value-1; //表示申请一个资源; if S.value0 then block(S.L); //如果没有空闲资源,调用进程进入和信号量S相关的等待队列 s.L; 阻塞调用wait 的进程 end 2. V原语(signal) procedure signal(S) var S: semaphore; begin S.value:=S.value+1; //表示释放一个资源; if S.value=0 then wakeup(S.L);//如果有进程处于阻塞状态,从等待队列s.L中取出一个进程P,将其唤醒; end * V原语通常唤醒进程等待队列中的头一个进程 * 3. 利用信号量实现互斥 为临界资源设置一个互斥信号量mutex(MUTual Exclusion),其初值为1;在每个进程中将临界区代码置于P(mutex)和V(mutex)原语之间 必须成对使用P和
您可能关注的文档
最近下载
- 《固定资产投资项目碳排放评价技术指南》DB4403T 658-2025.docx VIP
- 《离婚指南》小说改编_经典戏剧剧本.doc VIP
- 电力调度软件:OpenDSS二次开发_(4).Python与OpenDSS集成开发.docx VIP
- 水库移民突发事件应急预案.docx VIP
- (2025)必威体育精装版反洗钱知识试题题库及参考答案(通用版).pptx VIP
- 水库洪水调度考评规定SL224—98.doc VIP
- 2022国际特发性肺纤维化指南及进展性肺纤维化临床诊疗指南(全文).pdf VIP
- 沃尔玛绩效管理制度.docx
- 托幼机构工作人员健康检查表.doc VIP
- 2024版最全双重预防机制体系文件汇编.pdf VIP
文档评论(0)