操作系统知识速记:死锁
什么是死锁?
死锁是指两个或多个进程因争夺资源而造成的一种相互等待的状态,进程间形成循环等待,导致所有进程均无法继续执行。通常情况下,死锁的发生有以下四个必要条件:
- 互斥条件:资源不能被多个进程同时占用。
- 持有并等待:已获得资源的进程在等待申请其他资源。
- 不抢占:已经分配给进程的资源在其使用完之前,不能被其他进程强行抢占。
- 循环等待:进程形成一个环形链,每个进程等待下一个进程所持有的资源。
死锁实例
考虑一个简单的例子,我们有两个进程 P1 和 P2,以及两个资源 A 和 B:
- P1 持有资源 A,并等待资源 B。
- P2 持有资源 B,并等待资源 A。
在这种情况下,P1 和 P2 都在等待对方释放资源,导致停滞不前,形成死锁状态。
如何避免死锁?
死锁可以通过多种策略来避免,下面介绍几种常见的方法:
1. 资源分配图法
使用资源分配图监控系统资源的分配情况,保证在分配资源后,系统不会进入不安全状态。具体做法是:每次资源请求后,检查分配后是否会形成环路。
2. 银行家算法
银行家算法是处理多个进程的资源分配的一种算法,由 Edsger Dijkstra 提出的。系统在分配资源时先进行安全性检查,确保在任何资源请求后,系统都处于安全状态。只有安全性校验通过后,才允许分配资源。
3. 有序资源请求
规定所有资源的请求顺序,进程在请求资源时必须按照规定的顺序进行,避免形成循环等待。例如,进程必须先请求资源 A 然后请求资源 B。
4. 预防策略
通过破坏死锁的四个必要条件中的至少一个条件来避免死锁。例如,允许进程在请求资源时释放已持有的资源,或者使每个进程在运行之前预先申请所有所需资源。