概念:各进程相互等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象。

死锁/饥饿/死循环

饥饿:由于长期得不到资源,某进程无法向前推进的现象。(短进程优先(SPF)调度算法中,若源源不断地有短进程进来,则长进程一直无法获取资源,产生饥饿现象。)

死循环:某进程执行过程中一直挑不出某个循环的现象。

 

 产生死锁的必要条件:1)互斥条件(只有对必须互斥使用的资源才会产生死锁现象) 2)不剥夺条件(资源只能主动释放,不能由其他进程抢走) 3)循环等待 4)请求和保持条件

注意:发生死锁时一定有循环等待,但有循环等待时不一定发生了死锁

什么时候会发生死锁? -->对不可剥夺资源的不合理分配,可能会导致死锁

预防死锁的策略:

1)预防死锁:破坏死锁发生的一个或几个必要条件

2)避免死锁:采取算法避免系统进入不安全状态,从而避免死锁

3)死锁的检测和接触:允许死锁的发生,不过操作系统会负责检测出死锁的发生,然后采取策略解除死锁。

 

1)预防死锁

破坏互斥条件

 

 破坏不剥夺条件

 

 破坏请求和保持条件

 

 

 破坏循环等待条件