Dead locks
概念
死锁
- 进程永远被阻塞称之为死锁
starvation
- 进程没阻塞但是无限制被推后
资源
- 可抢占资源
- 不可抢占资源
必要条件
- 互斥条件:一个资源每次只能被一个进程使用
- 占有和等待条件:已经得到资源的进程可以请求新的资源
- 不可抢占条件:被占有的资源只能由占有它的进程显示释放
- 环路等待条件:≥2个进程形成一个环,每个进程都在等待下一个进程的资源
处理方法
不避免死锁的发生,而是等发生了再解决
鸵鸟策略
- 处理死锁的代价过于高昂
死锁检测
一对一类型的死锁检测
每个进程一个资源
- 检测有向图中环的存在
一对多类型的死锁检测
每个进程多个资源
- 模拟一下,先执行能执行的,执行完后释放资源。如此往复,最后剩下的都是死锁进程。
死锁恢复
- 抢占
- 回滚
- kill进程
死锁预防
时间
- 程序运行之前
方法
破坏互斥条件
- 只读性文件可以不用互斥
破坏占有和等待条件
- 比如让进程在一开始就请求所有所需资源
破坏不可抢占条件
破坏环路等待条件
- 将所有资源编号,进程只能请求比已经持有资源编号更大的资源,这样一来不可能形成环
死锁避免
安全状态
概念
存在一种调度次序可以使所有进程都能完成
安全状态也有可能死锁,但一定可以避免死锁
不安全状态
- 无法保证所有进程都能完成
银行家算法
算法
- 判断对请求的满足是否会进入不安全状态,如果是,就拒绝请求;否则予以分配。
单个资源
多个资源