死锁 银行家算法
2015-09-21 20:40
246 查看
死锁 银行家算法
1. 死锁
1.1 产生死锁的4个必要条件
产生死锁的4个必要条件:1. 互斥条件:每个资源要么已经分配给一个进程,要么就是可用的;
2. 占有和等待条件:已经得到了某个资源的进程可以再请求新的资源;
3. 不可抢占条件:已经分配给一个进程的资源不能强制性地被抢占,它只能被占有的进程显式地释放;
4. 环路等待条件:死锁发生时,系统中一定有两个或两个以上的进程组成一条环路,该环路中每个进程都在等待下一个进程所占有的资源。
死锁发生时,上述4个条件一定是同时满足的,如果其中任何一个不成立,死锁就不会发生。
1.2 处理死锁
4种处理死锁的策略:1. 忽略;
2. 检测死锁并恢复。让死锁发生,检测它们是否发生,一旦发生死锁,采取行动解决问题;
3. 仔细对资源进行分配,动态地避免死锁;
4. 破坏死锁发生的4个必要条件之一,防止死锁发生。
1.3 安全状态、不安全状态
安全状态和不安全状态:安全状态:如果存在一个由系统中所有进程构成的安全序列P1,…,Pn,则系统处于安全状态。安全状态一定是没有死锁发生。
不安全状态:不存在一个安全序列。不安全状态不一定导致死锁。
2. 银行家算法
Dijkstra(1965)提出的避免死锁的调度算法,称为银行家算法。银行家算法,检查满足一个请求是否会达到安全状态,如果能达到安全状态,就接受,如何判断是安全状态,具体过程请看参考。
参考:
[1] 《现代操作系统》
相关文章推荐
- Oracle外键不加索引引起死锁示例
- SQL2008中SQL应用之- 死锁(Deadlocking)
- C#中lock死锁实例教程
- 利用sys.sysprocesses检查SqlServer的阻塞和死锁
- 深入浅出解析mssql在高频,高并发访问时键查找死锁问题
- PHP 解决session死锁的方法
- 查找MySQL线程中死锁的ID的方法
- MySQL Innodb表导致死锁日志情况分析与归纳
- Oracle删除死锁进程的方法
- Oracle对于死锁的处理方法
- 如何捕获和记录SQL Server中发生的死锁
- Python多线程编程(五):死锁的形成
- python避免死锁方法实例分析
- 线程池的理解
- Oracle死锁查询和处理
- oracle死锁
- pl/sql死锁情况:record is locked by another user
- Java多线程之死锁(哲学家进餐问题)
- kazoo在多进程下使用全局连接死锁问题
- 检测和杀死锁