操作系统关键知识点之银行家算法(死锁避免的经典策略)

本次重新学习操作系统,希望通过对所学内容进行总结,与大家一同学习进步。以下将围绕“银行家算法”这一核心,梳理其在单资源和多资源场景下的应用逻辑、知识点及通俗理解,最后通过表格总结。

一、知识点总结

(一)银行家算法的核心思想(单资源场景)

  1. 模型类比

    • 将操作系统比作“银行家”,进程比作“客户”,资源比作“贷款额度”。银行家需确保分配资源后,仍存在一种调度顺序使所有进程(客户)完成(偿还贷款),避免系统进入死锁(挤兑)。
  2. 关键概念

    • 安全状态:存在进程执行顺序,使所有进程均能获得最大资源需求并完成。例如,图6-11a中银行家持有10单位资金,客户最大需求总和为22单位,但通过合理调度(如先满足C),所有客户均可完成。
    • 不安全状态:无安全执行顺序,可能导致死锁。如图6-11c中给B分配资源后,银行家无法满足所有客户最大需求。
  3. 算法步骤

    • 对于每个资源请求,模拟分配后检查系统是否仍处于安全状态:
      • 若是,允许分配;
      • 若否,拒绝分配。

(二)多资源场景的银行家算法

  1. 数据结构扩展

    • 已分配矩阵 (C):记录每个进程已获得的各类资源数(如进程A已获得3台磁带机)。
    • 需求矩阵 (R):记录每个进程完成所需的各类资源数(如进程A还需1台磁带机)。
    • 现有资源向量 (E)可用资源向量 (A):含义与死锁检测相同,其中 (A = E - \sum C)。
  2. 安全状态检查算法

    • 寻找需求矩阵中某一行 (R_i \leq A) 的进程,假设其完成并释放资源((A += C_i)),重复此过程直至所有进程完成(安全)或无法继续(死锁)。
    • 示例:图6-12中,可用资源 (A=(1,0,2,0)),进程C的需求 (R_C=(0,1,0,0) \leq A),允许其完成后释放资源,更新 (A) 并继续检查其他进程。
  3. 资源请求处理

    • 若进程请求资源 (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台电脑(磁带机)、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验证安全状态

写作不易,希望这篇总结能帮助大家理解银行家算法的核心逻辑!如果觉得有用,欢迎关注我的博客,点赞评论分享,一起探讨更多操作系统知识~

更多推荐