操作系统关键知识点之银行家算法(死锁避免的经典策略)
·
操作系统关键知识点之银行家算法(死锁避免的经典策略)
本次重新学习操作系统,希望通过对所学内容进行总结,与大家一同学习进步。以下将围绕“银行家算法”这一核心,梳理其在单资源和多资源场景下的应用逻辑、知识点及通俗理解,最后通过表格总结。
一、知识点总结
(一)银行家算法的核心思想(单资源场景)
-
模型类比
- 将操作系统比作“银行家”,进程比作“客户”,资源比作“贷款额度”。银行家需确保分配资源后,仍存在一种调度顺序使所有进程(客户)完成(偿还贷款),避免系统进入死锁(挤兑)。
-
关键概念
- 安全状态:存在进程执行顺序,使所有进程均能获得最大资源需求并完成。例如,图6-11a中银行家持有10单位资金,客户最大需求总和为22单位,但通过合理调度(如先满足C),所有客户均可完成。
- 不安全状态:无安全执行顺序,可能导致死锁。如图6-11c中给B分配资源后,银行家无法满足所有客户最大需求。
-
算法步骤
- 对于每个资源请求,模拟分配后检查系统是否仍处于安全状态:
- 若是,允许分配;
- 若否,拒绝分配。
- 对于每个资源请求,模拟分配后检查系统是否仍处于安全状态:
(二)多资源场景的银行家算法
-
数据结构扩展
- 已分配矩阵 (C):记录每个进程已获得的各类资源数(如进程A已获得3台磁带机)。
- 需求矩阵 (R):记录每个进程完成所需的各类资源数(如进程A还需1台磁带机)。
- 现有资源向量 (E)、可用资源向量 (A):含义与死锁检测相同,其中 (A = E - \sum C)。
-
安全状态检查算法
- 寻找需求矩阵中某一行 (R_i \leq A) 的进程,假设其完成并释放资源((A += C_i)),重复此过程直至所有进程完成(安全)或无法继续(死锁)。
- 示例:图6-12中,可用资源 (A=(1,0,2,0)),进程C的需求 (R_C=(0,1,0,0) \leq A),允许其完成后释放资源,更新 (A) 并继续检查其他进程。
-
资源请求处理
- 若进程请求资源 (Request \leq R_i) 且 (Request \leq A),模拟分配后执行安全状态检查,仅在安全时实际分配。
二、通俗讲解
(一)单资源银行家算法:银行如何防“挤兑”
- 场景类比:银行有10万元存款,4个客户分别最多需要6万、5万、4万、7万元贷款。
- 安全状态(图6-11a):
- 客户已贷款0元,银行剩余10万元。此时无论客户按什么顺序贷款,银行都能满足(如先贷给C 4万元,C还后有14万元,再贷给其他客户)。
- 不安全状态(图6-11c):
- 银行贷给B 2万元、C 2万元、D 4万元,剩余1万元。若所有客户突然要求贷到最大额度(B还需3万、D还需3万),银行无法满足,可能“挤兑”(死锁)。
- 安全状态(图6-11a):
- 重点:银行家算法就像银行审批贷款,先算“批了这笔钱后,我能不能收回所有贷款”,能就批,不能就拒绝。
(二)多资源银行家算法:资源分配的“统筹规划”
- 场景类比:图书馆有6台电脑(磁带机)、3个插座(绘图仪)、4张桌子(打印机)、2个插线板(CD-ROM),5个学生借用品:
- 已分配情况:学生A用3台电脑、1张桌子;学生B用1台电脑、1个插座、2个插线板;等等。
- 需求检查:
- 学生C还需要1个插座(当前可用插座为0,但学生C已借0个插座,需求为1个)。此时检查:若借给他,是否存在一种顺序让所有学生用完还回?
- 步骤:先找“需求≤剩余”的学生,比如学生E啥都没借,需求是2台电脑、1个插座、1张桌子、0个插线板。但当前可用电脑1台,不够,所以看学生C:需求1个插座,但可用插座0,也不够。直到找到学生D,需求1张桌子,可用桌子2张,满足!让D先用,还回后可用桌子变为3张,再满足其他学生。
- 重点:多资源场景需同时满足所有资源类型的需求(如借电脑时,不仅要看电脑剩余,还要看插座、桌子等是否足够),通过“逐个满足可完成的进程”来验证安全性。
三、知识点表格总结
| 知识点 | 单资源场景 | 多资源场景 | 重点对比 |
|---|---|---|---|
| 核心思想 | 模拟银行贷款审批,确保分配后仍能收回所有“贷款”(资源) | 扩展至多维度资源,需同时满足所有资源类型的需求分配 | |
| 关键数据结构 | 客户最大需求、已分配贷款、剩余资金 | 已分配矩阵 (C)、需求矩阵 (R)、现有资源 (E)、可用资源 (A) | |
| 安全状态判断 | 存在单一资源顺序使所有进程完成 | 存在多资源分配顺序使所有进程完成,需逐行检查 (R_i \leq A) 并更新 (A) | |
| 请求处理逻辑 | 若分配后剩余资金≥某客户最大需求-已分配,允许分配 | 若请求≤需求且≤可用资源,模拟分配后执行安全检查,仅安全时分配 | |
| 示例 | 图6-11中通过先满足C避免死锁 | 图6-12中通过优先满足进程C/D验证安全状态 |
写作不易,希望这篇总结能帮助大家理解银行家算法的核心逻辑!如果觉得有用,欢迎关注我的博客,点赞评论分享,一起探讨更多操作系统知识~
更多推荐


所有评论(0)