- 1、本文档共74页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 经典问题:睡眠理发师问题 问题描述 一把理发椅,N把等待座位 理发师为理发椅上的顾客理发,没有顾客就在理发椅上睡觉 有一个顾客时需要叫醒理发师 多个顾客时需要在等待座位上等候 进程通信 * 管程(monitor) 用信号量可实现进程间的同步,但由于信号量的控制分布在整个程序中,其正确性分析很困难。管程是管理进程间同步的机制,它保证进程互斥地访问共享变量,并方便地阻塞和唤醒进程。管程可以函数库的形式实现。相比之下,管程比信号量好控制。 * 1. 信号量同步的缺点 同步操作分散:信号量机制中,同步操作分散在各个进程中,使用不当就可能导致各进程死锁(如P、V操作的次序错误、重复或遗漏) 易读性差:要了解对于一组共享变量及信号量的操作是否正确,必须通读整个系统或者并发程序; 不利于修改和维护:各模块的独立性差,任一组变量或一段代码的修改都可能影响全局; 正确性难以保证:操作系统或并发程序通常很大,很难保证这样一个复杂的系统没有逻辑错误; * 2. 管程的引入 1973年,Hoare和Hanson所提出;其基本思想是把信号量及其操作原语封装在一个对象内部。即:将共享变量以及对共享变量能够进行的所有操作集中在一个模块中。 管程的定义:管程是关于共享资源的数据结构及一组针对该资源的操作过程所构成的软件模块。 管程可增强模块的独立性:系统按资源管理的观点分解成若干模块,用数据表示抽象系统资源,同时分析了共享资源和专用资源在管理上的差别,按不同的管理方式定义模块的类型和结构,使同步操作相对集中,从而增加了模块的相对独立性 引入管程可提高代码的可读性,便于修改和维护,正确性易于保证:采用集中式同步机制。一个操作系统或并发程序由若干个这样的模块所构成,一个模块通常较短,模块之间关系清晰。 * 3. 管程的主要特性 模块化:一个管程是一个基本程序单位,可以单独编译; 抽象数据类型:管程是一种特殊的数据类型,其中不仅有数据,而且有对数据进行操作的代码 信息封装:管程是半透明的,管程中的外部过程(函数)实现了某些功能,至于这些功能是怎样实现的,在其外部则是不可见的; * 4. 管程的实现要素 管程中的共享变量在管程外部是不可见的,外部只能通过调用管程中所说明的外部过程(函数)来间接地访问管程中的共享变量; 为了保证管程共享变量的数据完整性,规定管程互斥进入; 管程通常是用来管理资源的,因而在管程中应当设有进程等待队列以及相应的等待及唤醒操作; * 10. 管程和进程的异同点 设置进程和管程的目的不同 系统管理数据结构 进程:PCB 管程:等待队列 管程被进程调用 管程是操作系统的固有成分,无创建和撤消 * 作业 设有5个哲学家,共享一张放有5把椅子的桌子,每人分得1把椅子。但是,桌子上总共只有5支筷子,在每人两边分开各放一支。哲学家们在肚子饥饿时才试图分两次从两边拾起筷子就餐。 条件: 1)只有拿到两支筷子时,哲学家才能吃饭。 2)如果筷子已在他人手上,则该哲学家必须等待到他人吃完之后才能拿到筷子。 3)任何哲学家在自己未拿到两支筷子吃饭之前,决不放下自已手中的筷子。 要求: 1)有什么情况下5个哲学家全部吃不上饭? 2)描述一种没有人饿死(永远拿不到筷子)算法。 * * 实验 用信号灯来实现三个进程同步问题 * 小结 顺序执行和并发执行 进程的定义(与程序比较),静态表示(上下文,包括PCB),动态表示(状态),用户代码和OS代码 进程控制(注意:挂起和激活),UNIX和Windows NT举例 线程:引入原因,与进程比较 互斥和同步:信号量,信号量集,管程 进程间通信IPC:信号,共享存储区,管道,消息,管套 死锁问题:原因,条件,解决方法 其他方面:OS引导 * 4 用信号量实现进程的同步 要保证打印结果的正确, CP、IOP必须遵循以下同步规则: (1)当CP把结果送入buffer后,IOP才能从buffer中取,否则IOP必须等待; (2)当IOP从buffer中取走数据后, CP才能将新产生数据送buffer,否则也必须等待。 CP IOP * 4 用信号量实现进程的同步 解决这个问题的步骤: (1)分析问题,弄清楚同步关系,如上分析; (2)设置信号量 ,说明含义、初值; (3)写出程序描述。 两个信号量控制两个进程依次运行。 信号量Sa:表示缓冲区是否有数据可供打印; 初值为0,表示刚开始时候没有数据 信号量Sb:表示是否可以向缓冲区放新数据; 初值为1,表示刚开始时候可以放数据。 * 4 用信号量实现进程的同步 CP( )//计算进程 { 计算,得到一个结果; 将结果送到缓冲区; } IOP( )//打印进程 { 从缓冲区中取出一个数据; 打印取出的数据; } wait(sb); signal(sa); wait(
您可能关注的文档
最近下载
- 交叉偶极声波测井资料在碳酸盐岩储层评价中的应用.pdf VIP
- BIM建模——Revit建筑设计PPT教学课件(全707页).ppt VIP
- 钢筋翻样自动计算excel表格.xls VIP
- 高中数学竞赛(强基计划)历年真题练习 专题14 初等数论 (学生版+解析版).docx
- 高中数学竞赛(强基计划)历年真题练习 专题13 数学归纳法 (学生版+解析版).docx
- 钢筋笼(螺旋箍筋)工程量自动计算表.xlsx VIP
- G平法识图与钢筋量计算.pptx VIP
- 2024华医网继续教育心血管病预防与康复题库答案.docx VIP
- 雷克萨斯is250维修手册m be 0023.pdf VIP
- 2020年国家公务员考试面试真题(海关+海事局).doc VIP
文档评论(0)