- 1、本文档共66页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
互斥和同
进程同步与互斥 并发(concurrency)是多道程序技术、多处理技术、分布式处理技术的基础,也是OS设计的重点 资源的共享和争用 多个进程活动的同步 分配给进程的处理器时间等。 1 并发的原理-控制对共享资源的访问 不加控制地访问共享资源会出现问题,要求控制对共享资源的访问! 2 进程间的制约关系 进程的同步(直接制约):synchronism 指系统中一些进程需要相互合作,共同完成一项任务。具体说,一个进程运行到某一点时要求另一伙伴进程为它提供消息,在未获得消息之前,该进程处于等待状态,获得消息后被唤醒进入就绪态 进程的互斥(间接制约)mutual exclusion 由于各进程要求共享资源,而有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系为进程的互斥 2 进程间的制约关系 相关概念: 互斥:指多个进程不能同时使用同一个资源; 死锁:指多个进程互不相让,都得不到足够的资源; 饥饿:指一个进程一直得不到资源(其他进程可能轮流占用资源) 临界资源:系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源或共享变量 临界区:进程中访问临界资源的一段代码。 (同步问题)例子:谁买面包? 甲 5:00 查看冰箱,面包没了 5:05 去超市 5:10 到达超市 5:15 买好面包 5:20 回家,把面包放入冰箱 5:25 5:30 乙 查看冰箱,面包没了 去超市 到达超市 买好面包 回家,把面包放入冰箱 噢,Too Much 3 临界区问题-原语 内核在执行某些基本操作时, 往往利用原语操作实现 原语 是一种广义指令, 相当于扩充了机器指令集 原语是由若干条指令构成、用于完成一定功能的一个过程. 原语是原子操作(atomic operation) 原子操作: 一个操作中的所有动作, 要么全做, 要么全不做. 原子操作是一个不可分割的操作 3 临界区问题-互斥的要求 使用临界区应遵循的准则 有空让进:当无进程在临界区时,任何有权使用临界区的进程可进入 无空等待:不允许两个以上的进程同时进入临界区 多中择一:当没有进程在临界区,而同时有多个进程要求进入临界区,只能让其中之一进入临界区,其他进程必须等待 有限等待:任何进入临界区的要求应在有限的时间内得到满足 让权等待:处于等待状态的进程应放弃占用CPU 平等竞争:任何进程无权停止其它进程的运行进程之间相对运行速度无硬性规定 4 实现互斥的方法 实现互斥的方法 软件方法 硬件方式:利用专门机器指令 4.1 实现互斥的方法:软件的方法(自学) 特点 无需硬件、OS和程序设计语言的支持 处理开销大, 容易出错 学习的意义 更好地理解并发处理的复杂性 适用范围 单处理器系统 共享主存的多处理系统 前提假设: 存储器级的访问是互斥的 4.1互斥:软件的方法-Dekker算法 Dijkstra报告了Dekker(荷兰数学家)设计的算法 尝试1:单标志 Dekker算法-尝试1 Dekker算法-尝试2:双标志、先检查 优点:不用交替进入,可连续使用; 缺点: 不能保证互斥!Pi 和 Pj可能同时进入临界区。在Pi 和 Pj都不在临界区时,假设按下面序列执行时,会同时进入:“Pia; Pja ; Pib; Pjb”。即在检查对方flag之后和切换自己 flag 之前有一段时间,结果都检查通过。这里的问题出在检查和修改操作不能连续进行。 一个进程在临界区内失败, 另一进程永远被阻塞 Dekker算法-尝试3:双标志、后检查 Dekker算法-尝试3:双标志、后检查 优点:类似于算法2,与算法2的区别在于先修改、后检查。可防止两个进程同时进入临界区,实现互斥。 缺点:Pi和Pj可能都进入不了临界区。在Pi和Pj都不在临界区时,假设按下面序列执行,则都进不了临界区:“Pia Pja Pib Pjb”。即在切换自己的flag之后和检查对方flag之前有一段时间,结果都切换flag,都检查不通过。 Dekker算法-尝试4 思路:使每个进程更礼让一些:每个进程设置自己的flag,表明自己想进入自己的临界区,但也准备重置flag,以尊重另一个进程。 优点:保证互斥 缺点: 出现活锁:一组进程都想进入它们的临界区,但没有一个能成功进入(不是死锁,因为两个进程相对速度的任何改变都会打破这种情形) 可能成功进入,也可能有使得任何进程都不能进入临界区的执行顺序。 一种正确的方案 避免“无原则”的礼让 规定在都想进入时的进入顺序 4.2 Peterson算法:先修改、后检查、后修改者等待 Flag表示每个进程关于互斥的位置,turn解决同时进入时的冲突问题 turn=j:描述可进入的进程(同时修改标志时) 在进入区先修改后检查,并检查并发修改的先
文档评论(0)