面试题答案
一键面试基本原理
死锁避免的动态调整策略是基于系统当前的资源分配情况和进程对资源的需求情况,动态地评估和调整资源分配,以确保系统不会进入死锁状态。该策略通过跟踪系统中资源的使用情况和进程的资源请求,在每次资源请求发生时,判断如果满足该请求是否会导致系统进入不安全状态(可能引发死锁)。若会进入不安全状态,则拒绝该请求;若不会,则批准请求。其核心是通过不断地监测和调整资源分配,使系统始终处于安全状态,即存在一种资源分配序列,能让所有进程都顺利完成。
简单场景说明
假设有三个进程P1、P2、P3,三种资源R1、R2、R3,每种资源数量分别为3个、3个、2个。 进程P1已分配到1个R1,还需要1个R1和1个R2; 进程P2已分配到1个R2,还需要1个R1和1个R3; 进程P3已分配到1个R3,还需要1个R2和1个R3。
初始时系统资源情况:
进程 | 已分配R1 | 已分配R2 | 已分配R3 | 需要R1 | 需要R2 | 需要R3 |
---|---|---|---|---|---|---|
P1 | 1 | 0 | 0 | 1 | 1 | 0 |
P2 | 0 | 1 | 0 | 1 | 0 | 1 |
P3 | 0 | 0 | 1 | 0 | 1 | 1 |
可用资源 | 1 | 2 | 1 | - | - | - |
此时P2请求1个R1资源。系统进行安全性检查,若分配给P2这1个R1资源,系统资源情况变为:
进程 | 已分配R1 | 已分配R2 | 已分配R3 | 需要R1 | 需要R2 | 需要R3 |
---|---|---|---|---|---|---|
P1 | 1 | 0 | 0 | 1 | 1 | 0 |
P2 | 1 | 1 | 0 | 0 | 0 | 1 |
P3 | 0 | 0 | 1 | 0 | 1 | 1 |
可用资源 | 0 | 2 | 1 | - | - | - |
经过分析发现,此时系统不存在一个安全序列能让所有进程都顺利完成(例如P1获取所需资源后释放,也无法满足P3完成,P3获取资源完成后释放也无法满足P2完成等),所以系统拒绝P2对R1资源的请求,从而避免死锁。只有当系统评估分配请求后能找到一个安全序列,才会批准资源请求。