- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统教程-第2章4
6.管程机制 1) 管程引入 存在问题: 1、临界区的执行分散在各个进程中,不便于系统对临界资源的控制和管理。 2、难于发现和纠正用户程序中对同步原语使用的错误。 将分散的各同类临界区集中起来,为每一类共享资源设置一个“管理程序 ”,统一控制和管理各进程对该资源的访问,即任何一个进程要访问共享资源,必须通过管程。P、V操作仅出现在管程中. 管程定义:一个管程指定义了一个数据结构和能为并发程序在该数据结构上执行的一组操作,这组操作能同步进程和改变管程中的数据。 管程由以下几部分组成: (1) 管程标识符; (2) 局部于管程的共享变量说明; (3) 对该数据结构进行操作的一组过程; (4) 对局部于管程的数据的初始化过程。 实现管程的基本原则 ① 管程中的局部变量只能由该管程的过程来访问,不允许进程直接访问,也不允许其他管程访问。 ② 任何一个进程要访问共享资源必须通过管程(管程入口)。 ③ 管程每次只允许一个进程进入。 ④ 管程的过程执行时,因某种原因阻塞,应立即退出并释放资源。 Wait (Ci) 、Signal (Ci) 2.3.2 经典同步问题 1.生产者–消费者问题(即有界缓冲区问题) 1) 问题 所有的生产者与消费者必须互斥地访问缓冲区 生产与消费同步 2) 解决方法 (1) 用P、V操作解决。 设置信号量: 互斥使用有界缓冲区的信号量S,初值为1; 同步信号量: 有界缓冲区的大小,即可以存放产品的最大数n,初值为k; 有界缓冲区中已经存放的产品个数m,初值为0。 P(n)与P(S)颠倒? 1. 当缓冲区不满时,无影响 2. 当缓冲区刚满时,紧接着一个生产者到来执行P(s)之后,在执行P(n)时阻塞,由于s是互斥信号量,将所有后续到来的消费者和生产者都因s阻塞而产生死锁 P(m)与P(S)颠倒? 1.当缓冲区不空时,无影响 2.当缓冲区刚空时,紧接着一个消费者到来执行P(s)之后,在执行P(m)时阻塞,由于s是互斥信号量,将所有后续到来的生产者和消费者都因s阻塞而产生死锁 V(s)V(m)颠倒,V(s)V(n)颠倒? 2.读者–写者问题(Courtois etal,1971) 1) 问题 共读独写 “读-写”互斥, “写-写”互斥, 读-读允许 2) 解决方法 (1) 用P、V操作解决。 设置变量: 读者的计数变量readcount,初值为0; 设置信号量: 读者互斥访问计数变量readcount 的信号量r,初值为1; 写者与写者、写者与第一个读者互斥访问共享数据对象的信号量w,初值为1。 (2) 用信号量集机制解决。 设置信号量: 允许的最大读者个数信号量L,初值为RN; 写者与写者、写者与第一读者互斥访问共享数据对象的信号量mx,初值为1。 读者:当访问共享数据对象的读者个数未超过RN,并且无写者时,可以进行读操作; 写者:无一个写者并且无一个读者时,可以进行写操作。 3.哲学家就餐问题(Dijkstra,1965) 1) 问题 五个哲学家围坐一个圆桌,每人面前一碟面条,相邻两碟之间有一根筷子。假定哲学家有两种活动:吃饭与思考。当一个哲学家饥饿时,取左、右最靠近他的两根筷子进餐,餐毕,放下筷子继续思考。 设置信号量: 分别代表五根筷子的信号量shopstick[0,4],初值为1。 五个哲学家同时饥饿,都已拿起了左边的筷子,这时他们都会因为拿不到右边的筷子而无法就餐,于是谁也不能继续前进,这种情况称为“死锁”。 可采取以下几种解决方法: (1) 至多只允许有四位哲学家同时去拿左边的筷子,最终能保证至少有一位哲学家能够进餐,并在用毕时能释放出他用过的两只筷子,从而使更多的哲学家能够进餐。 (2) 仅当哲学家的左、右两只筷子均可用时,才允许他拿起筷子进餐。 (3) 规定奇数号哲学家先拿他左边的筷子,然后再去拿右边的筷子;而偶数号哲学家则相反。按此规定,将是1、 2号哲学家竞争1号筷子;3、4号哲学家竞争3号筷子。即五位哲学家都先竞争奇数号筷子,获得后,再去竞争偶数号筷子,最后总会有一位哲学家能获得两只筷子而进餐。 * * 管程的基本思想: ——加围墙,统管 系统资源 局部共享 数据结构 实施操作的 若干过程 ??? 抽象 建立 管程 调用 进程 S n 读者之间只互斥readcount,由r实现 第一个和最后一个读者与写者互斥 读者与写者、写者与写者用w互斥 读操作(共享数据) SV(L, 1) 返 回 SP(m
文档评论(0)