操作系统 死锁避免
在死锁避免中,如果系统的结果状态不会导致死锁,那么任何资源的请求都将被允许。系统的状态将被持续检查以确定其是否安全。
为了避免死锁,进程必须告知操作系统,它可以请求的资源数量的最大值来完成执行。
最简单、最有用的方法是,进程应声明其可能需要的每种类型资源的最大数量。死锁避免算法会检查资源分配,以确保永远不会出现循环等待的情况。
安全状态和不安全状态
系统的资源分配状态可以通过可用资源和已分配资源的实例以及进程所需资源的最大实例来定义。
下面是在某个随机时间记录的系统状态。
分配的资源
Process | Type 1 | Type 2 | Type 3 | Type 4 |
---|---|---|---|---|
A | 3 | 0 | 2 | 2 |
B | 0 | 0 | 1 | 1 |
C | 1 | 1 | 1 | 0 |
D | 2 | 1 | 4 | 0 |
仍需资源
Process | Type 1 | Type 2 | Type 3 | Type 4 |
---|---|---|---|---|
A | 1 | 1 | 0 | 0 |
B | 0 | 1 | 1 | 2 |
C | 1 | 2 | 1 | 0 |
D | 2 | 1 | 1 | 2 |
E = (7 6 8 4)
P = (6 2 8 3)
A = (1 4 0 1)
上述表格和向量E、P和A描述了系统的资源分配状态。系统中有4个进程和4种资源。表1显示了每个进程被分配的资源实例数量。
表2显示了每个进程仍需要的资源实例数量。向量E表示系统中每种资源的总实例数量。
向量P表示已分配给进程的资源实例数量。向量A表示未使用的资源数量。
如果系统能够分配所有进程请求的资源而不进入死锁状态,则系统的状态被称为安全状态。
如果系统不能满足所有进程的请求,则系统的状态被称为不安全状态。
死锁避免方法的关键在于,当资源请求被提出时,只有在结果状态也是安全状态的情况下,请求才能被批准。