目录
0.前言
本系列文章旨在记录操作系统的知识点,可用于期末复习,笔者理解尚浅,文中不正之处静待批正。加粗高亮部分为重点。
1.死锁原理
死锁源于两个或多个进程的资源需求冲突(一定处于阻塞态)
资源的分类:
可重用资源(Reusable resources):I/O,主存,处理器等(一次只能被一个进程使用)
消费型资源(Consumable resources):消息等(由进程创建和销毁)
1.1 资源分配图
通过有向图来表述系统中资源和进程的状态
1.2 死锁的条件
- 互斥(Mutual exclusion)----充分条件
- 持有等待(Hold and wait)----充分条件
- 不允许抢占(No preemption)----充分条件
- 循环等待(circular wait)----必要条件
2.死锁预防
- 互斥打破不了
- 打破持有等待:让进程持有所有需要的资源
- 打破无抢占(最容易打破):由操作系统来抢占进程,并释放资源;当请求被拒绝,主动释放资源
- 打破循环等待:将资源线性排序
3.死锁避免
在资源申请前进行判断
- 在进程刚开始时(进程启动拒绝):如果一个进程的请求会导致死锁,则不启动此进程
- 在资源分配时(资源分配拒绝):若一个进程增加资源的请求会导致死锁,则不分配
银行家算法见专题篇——操作系统(Operating System)专题篇——死锁与饥饿-CSDN博客
4.死锁检测
定义:所有新资源分配的请求都允许,周期性的检测当前的资源状况是否已经死锁
解锁策略(复杂度递增):
- 终止所有死锁进程
- 将每个死锁进程备份到之前定义的检查点,并重新启动所有进程
- 连续终止死锁进程直到不存在死锁
- 连续抢占资源直到不存在死锁
总结:
死锁、饥饿与死循环的区别:
哲学家就餐问题见专题篇——操作系统(Operating System)专题篇——死锁与饥饿-CSDN博客