操作系统复习 五、六章
发布时间:2024年01月14日
操作系统复习 五、六章
第五章 并发性: 互斥和同步
基本概念
实现临界区互斥访问的基本方法
- 软件实现方法
- 单标志法
- 两个程序进程交替进入临界区
- 优点:实现简单
- 缺点:可能会违背空闲让进,造成资源无法充分利用
- 双标志先检查
- 每个进程访问临界区资源前,先检查临界资源是否被访问,如果空闲才能进入
- 优点:不用交替进入可以连续使用
- 缺点:两个进程可能同时进入临界区,违背忙则等待
- 双标志后检查
- 先设置自己标志,表明自己想要进入,检查对方标志,如果对方也要进入,那么就等待否则就进入
- 优点:不会导致两个进程都进入临界区
- 缺点:双方可能会互相谦让,导致饥饿现象
- 皮特森林算法
- 防止两个进程无限期等待,在算法三的基础上增加一个标志位,从而防止饥饿
- 优点:解决了饥饿现象
- 缺点:算法复杂
- 硬件实现方法
- 中断屏蔽法
- 对中断进行屏蔽、关中断
- 优点:关中断非常方便
- 缺点:限制了处理机交替执行程序的能力
- 硬件指令法
- 优点:
- 适用于任意数目的进程
- 简单且容易验证正确性
- 支持进程内有多个临界区
- 缺点
信号量
- 整形信号量
- wait: 资源-1, signal= 资源+1
- 没有遵循让权等待机制,会导致进程处于“忙等”状态
- 记录型信号量 记录型信号量不存在 “忙等” 现象,除了需要一个用于代表资源数目的了整型变量value 意外,再需要一个进程链表L ,用于链接所有等待该资源的进程
- 利用信号量实现同步 设S为进程P1和P2同步的公共信号量,初值为0,通过设置S的值可以使得P1与P2按照一定顺序执行
- 利用信号量实现互斥 通过设置S的值,可以实现进程对临界资源的互斥访问
- 利用信号量实现前驱关系 通过设置不同的进程运行结束后,产生不同的信号量,从而可以使得目标进程运行,从而实现前驱关系
管程
-
定义
- 一组数据以及定义在这组数据之上的对这组数据的操作组成的软件模块,这组操作能初始化并改变管程中的数据和同步进程
-
组成
- 局部于管程的共享结构数据说明
- 对该数据结构进行操作的一组过程
- 对局部于管程的共享数据设置初始值的语句
-
基本特性
- 局部于管程的数据只能被局部于管程内的过程所访问
- 一个进程只有通过调用管程内的过程才能进入管程访问共享数据
- 每次仅允许一个进程在管程内执行某个内部过程
-
经典问题的解决
- 生产者/消费者问题、读者/写者问题、哲学家就餐问题
第六章 并发性:死锁和饥饿
死锁的概念
- 定义: 多个进程因为竞争资源造成的一种僵局,没有外力作用,这些进程都无法向前继续推进
- 死锁产生的原因
- 系统资源的竞争
- 进程推进顺序非法
- 死锁产生的必要条件
- 互斥条件:进程对分配的资源进行排他性控制
- 不可剥夺条件:进程获得资源在未使用完之前,不能被其他进程强行夺走
- 请求并保持条件:进程已经保持了至少一个资源,提出新的资源请求,而该资源已经被其他进程占有,此时该进程被阻塞,但是自己已经获得的资源保持不放
- 循环等待条件:你等我释放我等你释放
死锁的处理策略
- 死锁的预防
- 破坏四个必要条件中的一个或几个,防止死锁
- 资源分配保守,宁可资源闲置
- 一次性请求所有资源,资源剥夺,资源按序分配
- 优点:适用于突发式处理的进程,不必进行剥夺
- 缺点:效率低,进程初始化时间长,剥夺次数过多,不变灵活申请新资源
- 避免死锁
- 在资源的动态分配中,用某种方法防止系统进入不安全状态,避免死锁
- 运行过程中预测分配资源是否会死锁
- 寻找可能的安全序列
- 优点:不必进行剥夺
- 缺点:必须知道将来的资源需求,进程不能被长时间阻塞
- 死锁的检测及解除
- 允许进程死锁,通过检测及时的判断死锁,然后对其进行解除
- 宽松,只要允许就分配资源
- 定期检查是否死锁
- 优点:不延长初始化时间,允许对死锁进行现场处理
- 缺点:通过到夺解除死锁,造成损失
死锁的预防
- 破坏互斥条件 某些资源只能被互斥访问,并且某些情况下必须保护互斥性
- 破坏不可剥夺条件
- 释放已经占有的资源
- 特点:增加系统开销实现复杂降低吞吐量
- 用于状态易于保存和恢复的数据(CPU的寄存器及内存资源)
- 破坏请求并保持条件
- 一次性申请完所需要的全部资源
- 特点:实现简单,但是资源被严重浪费,甚至可能导致进程饥饿
- 破坏循环等待条件
- 采用顺序资源法,对进程进行顺序推荐
- 特点:进程编号必须稳定,可能会导致资源浪费,并且不利于用户编程
死锁避免
- 系统安全状态
- 按照某种方式分配资源后,是否会导致死锁,如果会导致死锁,那么就是不安全状态,反之就是安全状态
- 银行家算法
- 思想:通过计算当前资源的不同分配方式,从而预测系统是否会进入不安全状态。就像是银行贷款,是否会导致银行没有足够的资金对外出借
死锁的检测和接触
- 资源分配图
- 圆圈表示进程,框表示一类资源,进程到资源的有向边称为请求边,资源到进程的边称为分配边
- 死锁定理
- 在资源分配图中找到分配满足的进程,然后消去其请求边与分配边
- 如果最后所有边都可以被消去,那么就是可以简化的,不存在死锁,反之存在死锁
- 死锁解除
- 资源剥夺法:挂起某些死锁进程,抢占资源,将这些资源分配给其他死锁进程,但是要防止挂起时间过长
- 撤销进程法:强制撤销部分甚至全部死锁进程,并且剥夺他们的资源,撤销原则可以根据优先级和撤销进程的代价进行
- 进程回退法:让一个或者多个进程回退到足以回避死锁的地步,进程回退时自愿释放资源而非被剥夺。要求系统保持进程历史信息,设置还原点
饥饿、死锁、死循环的区别
- 死锁:各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象
- 饥饿:由于长期得不到想要的资源,某进程无法向前推进的现象
- 死循环:某进程执行过程中一直跳不出某个循环的现象
大家好,我是xwhking,一名技术爱好者,目前正在全力学习 Java,前端也会一点,如果你有任何疑问请你评论,或者可以加我QQ(2837468248)说明来意!希望能够与你共同进步
文章来源:https://blog.csdn.net/Go_ahead_forever/article/details/135587353
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:chenni525@qq.com进行投诉反馈,一经查实,立即删除!