操作系统王道考研 p28-31 死锁的概念死锁的处理决策:预防避免检测和解除死锁
Posted karshey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作系统王道考研 p28-31 死锁的概念死锁的处理决策:预防避免检测和解除死锁相关的知识,希望对你有一定的参考价值。
死锁的概念
死锁的处理决策:预防死锁
死锁的处理决策:避免死锁
死锁的处理决策:检测和解除
知识总览
什么是死锁
哲学家进餐问题的每个哲学家先拿起左边的筷子,且都无法拿到右边的筷子,这些进程都在因等待筷子资源而被阻塞,就死锁了。
即,每个人都占有一个资源,同时又在等待另一个人手里的资源,就发生了“死锁”。
在并发环境下,各进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象,就是==“死锁”==。发生死锁后若无外力干涉,这些进程都将无法向前推进。
死锁VS饥饿VS死循环
死锁:进程都在等资源。(不调整就会一起饿死)
饥饿:一个进程等了很久。(可能之后等到了,也可能没等到)
死循环:如其名。是写程序的人的问题。
死锁产生的必要条件
四个条件:互斥条件、不剥夺条件、请求和保持条件、循环等待条件。
互斥条件让进程得以独占资源,不剥夺让进程不被剥夺资源,请求和保持让进程再请求等待别的资源并不放弃自己的资源,循环等待让进程占有的被一个资源都是另一个进程所需要的。
什么时候会发生死锁
死锁的处理策略
静态策略:预防死锁
破坏互斥条件
互斥条件:只有对必须互斥使用的资源的争抢才会导致死锁。
如果把只能互斥使用的资源改造成允许共享使用,就不会死锁,如SPOOLing技术。
缺点:很多时候无法破坏互斥条件。有的资源无法改造,有时候是为了系统安全。
破坏不剥夺条件
不剥夺条件:进程所获得的资源在未使用前,不能由其他进程强行夺走,只能主动释放。
破坏请求和保持条件
破坏循环等待条件
动态策略:避免死锁
安全序列、不安全状态、死锁的联系
银行家算法(重要!)
核心思想:在进程提出资源申请时,先预判此次分配是否会导致系统进入不安全状态,如果会进入不安全状态,就暂时不答应这次请求,让该进程先阻塞等待。
一些实现:
可以这样理解:
已知n个进程还需要的资源数量Need和当前空闲的资源数量Available。
如果空闲的资源数量Available满足任意一个进程的Need,那就给它用,用完后就可以释放已经分配给该进程的资源Allocation。
一直这样操作下去,如果能把所有进程都运行完,就是安全的。
如果不能运行完, 且当前的Available无法满足任意的Need,那就死锁了。
死锁的检测和解除
检测
资源分配图:
P->R:申请资源,P告诉R“我想要资源。”
R->P:分配资源,R告诉P“给你资源。”
用上面的Available,Need,Allocation来说:
每一次Available可以满足Need,就释放Allocation,即删除对应R与P的所有连线。
到最后如果还有线说明走到这里走不动了,Available无法满足Need,死锁了。即,化简完后还有边的进程是死锁的进程。
解除
三种方法的通俗解释:
资源剥夺:不给死锁进程分配资源,这样Available会变大,说不定就可以满足所有Need,就不死锁了。
撤销进程:解决不了死锁,就解决死锁的进程。
进程回退:倒回去看看是哪里出现了问题。
总结
以上是关于操作系统王道考研 p28-31 死锁的概念死锁的处理决策:预防避免检测和解除死锁的主要内容,如果未能解决你的问题,请参考以下文章
(王道408考研操作系统)第二章进程管理-第四节1:死锁相关概念
(王道408考研操作系统)第二章进程管理-第四节3:死锁处理策略之检测和解除
(王道408考研操作系统)第二章进程管理-第四节2:死锁处理策略之预防死锁