操作系统死锁相关知识点!
操作系统死锁相关知识点!
月伴飞鱼多个并发进程中,如果每个进程持有某种资源而又等待其它进程释放其他资源。
在未改变这种状态之前都不能向前推进,多个进程无限期相互等待 的一种状态。
四个必要条件
死锁产生的 4 个条件(有一个条件不成立,则不会产生死锁):
互斥:一个资源一次只能被一个进程使用。
请求与保持:一个进程因请求资源而阻塞时,对已获得资源保持不放。
非抢占:进程获得的资源,在未完全使用完之前,不能强行抢占。
循环等待:若干进程之间形成一种头尾相接的环形等待资源关系。
死锁处理方法
死锁的四个处理方法:
鸵鸟策略:忽略掉死锁,视而不见。
死锁检测与恢复:允许死锁发生,检测它们是否发生,一旦发生死锁,就采取行动解决问题。
死锁避免:仔细对资源进行分配,动态地避免死锁,银行家算法是避免死锁的经典算法。
死锁预防:破坏引起死锁的 4 个必要条件。
银行家算法
银行家算法的主要思想是避免系统进入不安全状态。
在每次进行资源分配时,它首先检查系统是否有足够的资源满足要求。
- 如果有,则先进行分配,并对分配后的新状态进行安全性检查。
如果新状态安全,则正式分配上述资源,否则就拒绝分配上述资源。
- 这样,它保证系统始终处于安全状态,从而避免死锁现象的发生。
安全状态
安全状态与不安全状态的区别是,从安全状态出发,系统能够保证所有的进程都能完成。
而从不安全状态出发,没有这样的保证。
活锁
活锁指进程并没有被阻塞,但由于某些条件没有满足,导致一直重复尝试、失败、尝试、失败。
进程仍可以在 CPU 上活动,但 CPU 时间片执行完了之后又下了 CPU,进程没有任何进展但也没有阻塞。
饥饿
进程无限等待的情况,饥饿 ≠ 死锁,但是饥饿至少有一个进程的执行被无限期推迟。
产生饥饿的原因:
- 往往是由于资源分配策略的 不公平性 导致的,比如短作业优先。
此时系统虽然没有发生死锁,某些进程也可能会一直得不到 CPU 的使用权而长时间等待。
当 饥饿 到一定程度,进程任务即使完成也不再具有实际意义时称该进程被饿死。