




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统OperatingSystems徐小龙////xuxl@南京邮电大学NanjingUniversityofPostsandTelecommunicationsOS2023/1/112课程回顾上节课的重点内容引入进程并发提高系统效率进程异步执行资源共享使用导致程序结果不可再现引入进程同步机制进程有序合作(同步)资源合理共享(互斥)结果确定化基于进程间协商的同步机制有何问题?2023/1/113信号量与P/V操作本讲内容1、信号量(Semaphore)2、P(Proberen)、V(Verhogen)操作3、典型问题的解决方法4、问题思考与拓展学习2023/1/114信号量与P/V操作1、信号量(Semaphore)(1)信号量的提出荷兰著名科学家、计算机图灵奖获得者E.W.Dijkstra提出了一种卓有成效的进程互斥同步工具:信号量(Semaphore)机制,广泛应用于现代计算机系统中。E.W.Dijkstra2023/1/115信号量与P/V操作1、信号量(Semaphore)(2)信号量的构成Structsemaphore{
intvalue; //信号量值pointer_PCBqueue; //信号量队列指针}s.value信号量值进程1进程2进程3s.queue信号量队列指针2023/1/116信号量与P/V操作本讲内容1、信号量(Semaphore)2、P(Proberen)、V(Verhogen)操作3、典型问题的解决方法4、问题思考与拓展学习2023/1/117信号量与P/V操作2、P、V操作(1)P(Proberen)操作P(s){s.value=s.value-1;//s.value减1if(s.value<0) //该进程被阻塞,进入相应队列,然后转进程调度
{该进程状态置为等待状态;将该进程加入相应的等待队列s.queue的末尾;} //若s.value减1后仍大于或等于零,则进程继续执行
}
入口s.value=s.value-1转进程调度将进程加入s.queue指向的等待队列s.value<0?返回否是
P(s)2023/1/118信号量与P/V操作2、P、V操作(1)P(Proberen)操作P(s){s.value=s.value-1;//s.value减1if(s.value<0) //该进程被阻塞,进入相应队列,然后转进程调度
{该进程状态置为等待状态;将该进程加入相应的等待队列s.queue的末尾;} //若s.value减1后仍大于或等于零,则进程继续执行
}
入口s.value=s.value-1转进程调度将进程加入s.queue指向的等待队列s.value<0?返回否是
P(s)2023/1/119信号量与P/V操作2、P、V操作(1)P(Proberen)操作P(s){s.value=s.value-1;//s.value减1if(s.value<0) //该进程被阻塞,进入相应队列,然后转进程调度
{该进程状态置为等待状态;将该进程加入相应的等待队列s.queue的末尾;} //若s.value减1后仍大于或等于零,则进程继续执行
}
入口s.value=s.value-1转进程调度将进程加入s.queue指向的等待队列s.value<0?返回否是
P(s)2023/1/1110信号量与P/V操作2、P、V操作(1)P(Proberen)操作P(s){s.value=s.value-1;//s.value减1if(s.value<0) //该进程被阻塞,进入相应队列,然后转进程调度
{该进程状态置为等待状态;将该进程加入相应的等待队列s.queue的末尾;} //若s.value减1后仍大于或等于零,则进程继续执行
}
入口s.value=s.value-1转进程调度将进程加入s.queue指向的等待队列s.value<0?返回否是
P(s)2023/1/1111信号量与P/V操作2、P、V操作(1)P(Proberen)操作P(s){s.value=s.value-1;//s.value减1if(s.value<0) //该进程被阻塞,进入相应队列,然后转进程调度
{该进程状态置为等待状态;将该进程加入相应的等待队列s.queue的末尾;} //若s.value减1后仍大于或等于零,则进程继续执行
}
入口s.value=s.value-1转进程调度将进程加入s.queue指向的等待队列s.value<0?返回否是
P(s)2023/1/1112信号量与P/V操作2、P、V操作(2)V(Verhogen)操作V(s){s.value=s.value+1;//s.value加1if(s.value<=0)//从队列中唤醒一等待进程,然后继续执行或转进程调度{唤醒相应等待队列s.queue中等待的一个进程;将其状态修改为就绪态,并将其插入就绪队列;}//若相加结果大于零,进程继续执行} 入口s.value=s.value+1返回或转进程调度唤醒s.queue指向的等待队列中某进程s.value<0?返回否是
V(s)2023/1/1113信号量与P/V操作2、P、V操作(2)V(Verhogen)操作V(s){s.value=s.value+1;//s.value加1if(s.value<=0)//从队列中唤醒一等待进程,然后继续执行或转进程调度{唤醒相应等待队列s.queue中等待的一个进程;将其状态修改为就绪态,并将其插入就绪队列;}//若相加结果大于零,进程继续执行} 入口s.value=s.value+1返回或转进程调度唤醒s.queue指向的等待队列中某进程s.value<0?返回否是
V(s)2023/1/1114信号量与P/V操作2、P、V操作(2)V(Verhogen)操作V(s){s.value=s.value+1;//s.value加1if(s.value<=0)//从队列中唤醒一等待进程,然后继续执行或转进程调度{唤醒相应等待队列s.queue中等待的一个进程;将其状态修改为就绪态,并将其插入就绪队列;}//若相加结果大于零,进程继续执行} 入口s.value=s.value+1返回或转进程调度唤醒s.queue指向的等待队列中某进程s.value<0?返回否是
V(s)2023/1/1115信号量与P/V操作2、P、V操作(2)V(Verhogen)操作V(s){s.value=s.value+1;//s.value加1if(s.value<=0)//从队列中唤醒一等待进程,然后继续执行或转进程调度{唤醒相应等待队列s.queue中等待的一个进程;将其状态修改为就绪态,并将其插入就绪队列;}//若相加结果大于零,进程继续执行} 入口s.value=s.value+1返回或转进程调度唤醒s.queue指向的等待队列中某进程s.value<0?返回否是
V(s)2023/1/1116信号量与P/V操作2、P、V操作(2)V(Verhogen)操作V(s){s.value=s.value+1;//s.value加1if(s.value<=0)//从队列中唤醒一等待进程,然后继续执行或转进程调度{唤醒相应等待队列s.queue中等待的一个进程;将其状态修改为就绪态,并将其插入就绪队列;}//若相加结果大于零,进程继续执行} 入口s.value=s.value+1返回或转进程调度唤醒s.queue指向的等待队列中某进程s.value<0?返回否是
V(s)2023/1/1117信号量与P/V操作本讲内容1、信号量(Semaphore)2、P(Proberen)、V(Verhogen)操作3、典型问题的解决方法4、问题思考与拓展学习2023/1/1118信号量与P/V操作3、典型问题的解决方法苹果桔子问题问题描述:(1)桌上有一只盘子,每次只能放入一只水果;(2)爸爸专向盘子中放苹果,妈妈专向盘子中放桔子;(3)儿子专等吃盘子中的桔子,女儿专等吃盘子里的苹果。2023/1/1119信号量与P/V操作3、典型问题的解决方法苹果桔子问题对应的计算机系统问题:多个进程共享同一个缓冲区实现定向通信P1P2C1C22023/1/1120信号量与P/V操作3、典型问题的解决方法苹果桔子问题—解决思路—>(1)信号量的设置s代表可用的空盘子数,初值为1g1代表盘子里有无桔子,初值为0g2代表盘子里有无苹果,初值为0
2023/1/1121信号量与P/V操作3、典型问题的解决方法苹果桔子问题—解决思路—>(2)P、V操作的部署processfather
beginL1:削一个苹果;
P(s);放苹果;
V(g2);gotoL1;end;processdaughter
beginL4:P(g2);取苹果;
V(s);吃苹果;gotoL4;end;processmother
beginL2:剥一个桔子;
P(s);放桔子;
V(g1);gotoL2;end;processson
beginL3:P(g1);取桔子;
V(s);吃桔子;gotoL3;end;2023/1/1122信号量与P/V操作3、典型问题的解决方法苹果桔子问题—解决思路—>(2)P、V操作的部署processfather
beginL1:削一个苹果;
P(s);放苹果;
V(g2);gotoL1;end;2023/1/1123信号量与P/V操作3、典型问题的解决方法苹果桔子问题—解决思路—>(2)P、V操作的部署processfather
beginL1:削一个苹果;
P(s);放苹果;
V(g2);gotoL1;end;2023/1/1124信号量与P/V操作3、典型问题的解决方法苹果桔子问题—解决思路—>(2)P、V操作的部署processfather
beginL1:削一个苹果;
P(s);放苹果;
V(g2);gotoL1;end;入口s.value=s.value-1转进程调度将进程加入s.queue指向的等待队列s.value<0?返回否是
P(s)s.value=12023/1/1125信号量与P/V操作3、典型问题的解决方法苹果桔子问题—解决思路—>(2)P、V操作的部署processfather
beginL1:削一个苹果;
P(s);放苹果;
V(g2);gotoL1;end;入口s.value=s.value-1转进程调度将进程加入s.queue指向的等待队列s.value<0?返回否是
P(s)s.value=02023/1/1126信号量与P/V操作3、典型问题的解决方法苹果桔子问题—解决思路—>(2)P、V操作的部署processfather
beginL1:削一个苹果;
P(s);放苹果;
V(g2);gotoL1;end;入口s.value=s.value-1转进程调度将进程加入s.queue指向的等待队列s.value<0?返回否是
P(s)s.value=02023/1/1127信号量与P/V操作3、典型问题的解决方法苹果桔子问题—解决思路—>(2)P、V操作的部署processfather
beginL1:削一个苹果;
P(s);放苹果;
V(g2);gotoL1;end;s.value=0入口返回或转进程调度唤醒g2.queue指向的等待队列中某进程g2.value<0?返回否是
V(g2)g2.value=g2.value+1g2.value=02023/1/1128信号量与P/V操作3、典型问题的解决方法苹果桔子问题—解决思路—>(2)P、V操作的部署processfather
beginL1:削一个苹果;
P(s);放苹果;
V(g2);gotoL1;end;s.value=0入口g2.value=g2.value+1返回或转进程调度唤醒g2.queue指向的等待队列中某进程g2.value<0?返回否是
V(g2)g2.value=12023/1/1129信号量与P/V操作3、典型问题的解决方法苹果桔子问题—解决思路—>(2)P、V操作的部署s.value=0g2.value=1processdaughter
beginL4:P(g2);取苹果;
V(s);吃苹果;gotoL4;end;2023/1/1130信号量与P/V操作3、典型问题的解决方法苹果桔子问题—解决思路—>(2)P、V操作的部署s.value=0g2.value=1processdaughter
beginL4:P(g2);取苹果;
V(s);吃苹果;gotoL4;end;入口g2.value=g2.value-1转进程调度将进程加入g2.queue指向的等待队列g2.value<0?返回否是
P(g2)2023/1/1131信号量与P/V操作3、典型问题的解决方法苹果桔子问题—解决思路—>(2)P、V操作的部署s.value=0g2.value=0processdaughter
beginL4:P(g2);取苹果;
V(s);吃苹果;gotoL4;end;入口g2.value=g2.value-1转进程调度将进程加入g2.queue指向的等待队列g2.value<0?返回否是
P(g2)2023/1/1132信号量与P/V操作3、典型问题的解决方法苹果桔子问题—解决思路—>(2)P、V操作的部署s.value=0g2.value=0processdaughter
beginL4:P(g2);取苹果;
V(s);吃苹果;gotoL4;end;入口g2.value=g2.value-1转进程调度将进程加入g2.queue指向的等待队列g2.value<0?返回否是
P(g2)2023/1/1133信号量与P/V操作3、典型问题的解决方法苹果桔子问题—解决思路—>(2)P、V操作的部署s.value=0g2.value=0processdaughter
beginL4:P(g2);取苹果;
V(s);吃苹果;gotoL4;end;入口返回或转进程调度唤醒s.queue指向的等待队列中某进程s.value<0?返回否是
V(s)s.value=s.value+12023/1/1134信号量与P/V操作3、典型问题的解决方法苹果桔子问题—解决思路—>(2)P、V操作的部署s.value=1g2.value=0processdaughter
beginL4:P(g2);取苹果;
V(s);吃苹果;gotoL4;end;入口返回或转进程调度唤醒s.queue指向的等待队列中某进程s.value<0?返回否是
V(s)s.value=s.value+12023/1/1135信号量与P/V操作3、典型问题的解决方法苹果桔子问题—解决思路—>(3)异常情况processfather
beginL1:削一个苹果;
P(s);放苹果;
V(g2);gotoL1;end;s.value=0g2.value=12023/1/1136信号量与P/V操作3、典型问题的解决方法苹果桔子问题—解决思路—>(3)异常情况s.value=0g2.value=1processson
beginL3:P(g1);取桔子;
V(s);吃桔子;gotoL3;end;2023/1/1137信号量与P/V操作3、典型问题的解决方法苹果桔子问题—解决思路—>(3)异常情况s.value=0g2.value=1processson
beginL3:P(g1);取桔子;
V(s);吃桔子;gotoL3;end;入口g1.value=g1.value-1转进程调度将进程加入g1.queue指向的等待队列g1.value<0?返回否是
P(g1)g1.value=02023/1/1138信号量与P/V操作3、典型问题的解决方法苹果桔子问题—解决思路—>(3)异常情况s.value=0g2.value=1processson
beginL3:P(g1);取桔子;
V(s);吃桔子;gotoL3;end;入口
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大班穿鞋选择性安全
- 杭州电子科技大学信息工程学院《交直流调速控制系统》2023-2024学年第二学期期末试卷
- 防疫知识安全教育主题班会
- 湖北工程学院《环境影响评价》2023-2024学年第二学期期末试卷
- 浙江工业大学《形体训练与舞蹈编导基础》2023-2024学年第二学期期末试卷
- 2025年广东省名校高三第二次月考试题含解析
- 长安大学兴华学院《中间体化学》2023-2024学年第二学期期末试卷
- 北京师范大学珠海分校《麻醉设备学基础》2023-2024学年第二学期期末试卷
- 重酒石酸利斯的明口服溶液-药品临床应用解读
- 昆玉职业技术学院《湘西特色舞蹈》2023-2024学年第二学期期末试卷
- 2024年常德职业技术学院单招职业适应性测试题库
- 干细胞治疗护理
- 幼小衔接数学练习题-30套幼小衔接知识训练
- 招聘与录用(第3版)课件全套 王丽娟 第1-8章 概述、招聘前的理论准备工作 -录用与招聘评估
- 《中国铁路北京局集团有限公司营业线施工管理实施细则》
- 故障诊断技术的国内外发展现状
- 赣美版小学六年级上册美术教案(全册)
- 超长期特别国债项目
- 2012年卫辉市招聘教师笔试面试成绩花名册
- DL∕T 5210.4-2018 电力建设施工质量验收规程 第4部分:热工仪表及控制装置
- 大学与青年发展智慧树知到期末考试答案章节答案2024年华侨大学
评论
0/150
提交评论