

-
哲学家就餐问题
五个哲学家围圆,哲学家需要思考休息吃饭,但只有5支筷子
吃饭使用两支筷子,每次只取一支筷子,且只能取身边的筷子,吃完放下筷子。 -
死锁的概念
两个或多个进程无限期地等待永远不会发生地条件地一种系统状态,结果每个进程都永远阻塞。
在两个或多个进程中,每个进程都持有某种资源,但又仅需申请其他进程已持有的某种资源。此时每个进程都拥有其运行时所需的一部分资源,但又都不够,从而每个进程都不能向前推进,陷于阻塞状态。 -
死锁的起因
进程对独占性资源(键盘,打印机等)的竞争而产生死锁
并发进程的请求和释放资源的顺序不当而产生死锁
不争取的PV操作也可能产生死锁
** 系统资源有限并不会导致死锁** -
死锁的一些结论
参与死锁的进程至少是2个
参与死锁的进程至少有2个已经占有资源
参与死锁的所有进程都在等待资源
参与死锁的进程是当前系统所有进程的子集
死锁会浪费大量系统资源,甚至导致系统崩溃 -
死锁的必要条件
1.互斥条件:进程互斥使用资源,资源具有独占性
2.不剥夺条件:进程访问完资源前不能被其他进程强制剥夺
3.部分分配条件:区别于全部分配,进程边运行边申请资源
4.环路条件:多个进程构成环路,环中每个进程已占有资源被前一个进程申请,想申请的资源被后一个进程占用
逻辑环路
-
解决死锁
策略 | 方法 |
---|---|
预防策略 | 通过设置限制条件,破坏4个必要条件中的一个或多个来防止死锁 |
避免策略 | 不事先采取限制区破坏产生死锁的条件,而是在资源分配过程中,用某种方法去评估分配资源是否会让系统进入死锁状态,若是,则拒绝此次分配资源,从而避免死锁的方式 |
检测策略、恢复策略 | 允许死锁产生,但通过检测机制及时检测出死锁状态,并精确确定与死锁有关的进程和资源,然后采取适当措施,将系统已发生的死锁清除,将进程从死锁状态解脱出来 |
-
预防策略
破坏互斥条件(难),破坏不剥夺条件(代价大,不稳定),破坏部分分配条件(预先静态分配),破坏环路条件(有序资源分配)
较易实现,早期广泛使用,但限制太严格,造成资源利用率和吞吐量降低 -
预先静态分配,破坏部分分配条件
策略:进程运行前将所需资源一次性全部分配给它,因此进程再运行过程中不再提出资源请求,从而避免出现阻塞或死锁。
特点:所需资源不能全部满足时,执行会被延迟;运行前估算资源需求,应用开销增大;资源被占而不用,资源利用率低
改进:可将资源分配的单位由进程改为程序步 -
有序资源分配,破坏环路条件
策略:系统中每个资源分配有以一个唯一序号,进程每次申请资源时,只能申请序号更大的资源,分配资源时检查资源序号是否复合递增规定 -
避免策略
银行家算法
只需要较弱的限制条件,可获取较高的资源利用率和吞吐量,但算法难度大 -
检测和恢复策略
检测方法复杂,实现难度大
恢复方法靠人工,撤销一些进程,回收资源再分配 -
Windows和Linux采用何种死锁解决方案
死锁解决算法复杂,取得的效益差,因此现有操作系统认为死锁不会发生而不做处理 ,留给用户进行操作:类似鸵鸟策略,对危险视而不见。
网友评论