发布时间:2026/7/16 18:27:21
银行家算法详细计算:安全性检测、资源分配、死锁避免 文章目录前言摘要一、从银行家算法计算题出错说起二、银行家算法数据结构2.1 基本数据结构2.2 计算Need矩阵三、安全性检测算法3.1 安全性检测步骤3.2 查找安全序列技巧四、资源请求算法4.1 资源请求处理4步骤4.2 资源请求完整模拟五、银行家算法计算技巧5.1 手工计算技巧5.2 资源请求判断技巧六、银行家算法总结6.1 核心要点6.2 考研408重点前言银行家算法是408操作系统死锁避免的必考计算题。如何判断系统是否处于安全状态安全序列如何找资源请求如何处理试探性分配如何回退理解安全性检测的完整流程、Need矩阵的计算、Work向量的更新、安全序列的查找顺序、资源请求算法的四步检查才能掌握死锁避免计算的本质。摘要从银行家算法计算题频繁出错问题出发剖析银行家算法的核心计算方法。通过Available向量的资源统计、Max矩阵的最大需求、Allocation矩阵的已分配、Need矩阵的仍需资源、Work向量的模拟分配、Finish数组的完成标记揭秘安全性检测的完整计算逻辑。配合详细手工模拟给出408满分解题的透彻理解。一、从银行家算法计算题出错说起周四上午哈吉米做408死锁避免计算题场景1安全性检测做错题目 系统有3类资源A、B、C数量分别为10、5、7 当前状态 Allocation Max Available A B C A B C A B C P0 0 1 0 7 5 3 3 3 2 P1 2 0 0 3 2 2 P2 3 0 2 9 0 2 P3 2 1 1 2 2 2 P4 0 0 2 4 3 3 问系统是否安全给出安全序列 哈吉米的错误 1. Need矩阵算错 2. Work向量更新错 3. 找不到安全序列 4. 步骤混乱哈吉米“银行家算法步骤太多容易算错。”南北绿豆“需要标准化的计算流程——先算Need再找安全序列。”场景2资源请求处理出错题目接上 P1请求资源Request(1, 0, 2) 能否分配 哈吉米的错误 1. 忘记检查Request ≤ Need 2. 忘记检查Request ≤ Available 3. 试探性分配后没有安全性检测 4. 不知道如何回退哈吉米“资源请求算法有4步检查容易漏步骤。”阿西噶阿西“银行家算法要严格按步骤不能跳步。”二、银行家算法数据结构2.1 基本数据结构南北绿豆“银行家算法用5个数据结构。”数据结构定义假设 n个进程P0-P4 m种资源A、B、C 数据结构 1. Available可用资源向量 长度m的向量 Available[i]资源i的可用数量 2. Max最大需求矩阵 n×m矩阵 Max[i][j]进程i对资源j的最大需求 3. Allocation已分配矩阵 n×m矩阵 Allocation[i][j]进程i已分配的资源j数量 4. Need仍需资源矩阵 n×m矩阵 Need[i][j]进程i还需要的资源j数量 Need[i][j] Max[i][j] - Allocation[i][j] 5. Work工作向量 长度m的向量 模拟分配过程中的可用资源 初始Work Available数据结构关系关系公式 1. Need Max - Allocation 2. Allocation Need Max 3. ΣAllocation Available 系统资源总数哈吉米“Need矩阵要用Max减Allocation计算。”2.2 计算Need矩阵Need矩阵详细计算给定 Allocation Max A B C A B C P0 0 1 0 7 5 3 P1 2 0 0 3 2 2 P2 3 0 2 9 0 2 P3 2 1 1 2 2 2 P4 0 0 2 4 3 3Need计算表进程Need[A]Need[B]Need[C]计算过程P0743(7-0, 5-1, 3-0)P1122(3-2, 2-0, 2-0)P2600(9-3, 0-0, 2-2)P3011(2-2, 2-1, 2-1)P4431(4-0, 3-0, 3-2)完整Need矩阵 Need A B C P0 7 4 3 P1 1 2 2 P2 6 0 0 P3 0 1 1 P4 4 3 1验证Need矩阵检查Need Allocation Max P0(7,4,3) (0,1,0) (7,5,3) ✓ P1(1,2,2) (2,0,0) (3,2,2) ✓ P2(6,0,0) (3,0,2) (9,0,2) ✓ P3(0,1,1) (2,1,1) (2,2,2) ✓ P4(4,3,1) (0,0,2) (4,3,3) ✓ 全部正确 ✓南北绿豆“Need矩阵计算是第一步必须准确。”三、安全性检测算法3.1 安全性检测步骤安全性检测5步骤步骤1初始化 Work Available Finish[i] false所有进程 步骤2查找进程 找到满足条件的进程i - Finish[i] false - Need[i] ≤ Work 步骤3模拟分配 Work Work Allocation[i] Finish[i] true 记录进程i到安全序列 步骤4重复 重复步骤2、3 步骤5判断 if (所有Finish[i] true): 系统安全 ✓ 输出安全序列 else: 系统不安全 ❌安全性检测详细计算初始数据 Available (3, 3, 2) Allocation Need A B C A B C P0 0 1 0 7 4 3 P1 2 0 0 1 2 2 P2 3 0 2 6 0 0 P3 2 1 1 0 1 1 P4 0 0 2 4 3 1逐步检测表步骤Work检查进程Need≤Work?选择Finish安全序列初始(3,3,2)---全false[]1(3,3,2)P0(7,4,3)≤(3,3,2)?✗--(3,3,2)P1(1,2,2)≤(3,3,2)?✓P1true[P1]2(5,3,2)P0(7,4,3)≤(5,3,2)?✗-[P1](5,3,2)P2(6,0,0)≤(5,3,2)?✗-[P1](5,3,2)P3(0,1,1)≤(5,3,2)?✓P3true[P1,P3]3(7,4,3)P0(7,4,3)≤(7,4,3)?✓P0true[P1,P3,P0]4(7,5,3)P2(6,0,0)≤(7,5,3)?✓P2true[P1,P3,P0,P2]5(10,5,5)P4(4,3,1)≤(10,5,5)?✓P4true[P1,P3,P0,P2,P4]结果 所有Finish true ✓ 系统安全 安全序列P1 → P3 → P0 → P2 → P4Work向量更新详解为什么Work Work Allocation 模拟进程执行完成 进程获得Need资源 → 执行 → 完成后释放所有资源Allocation → Work增加 ✓ 例子 P1完成前 Work (3,3,2) P1持有(2,0,0) P1完成后 释放(2,0,0) Work (3,3,2) (2,0,0) (5,3,2) ✓哈吉米“Work向量模拟了进程完成后释放资源。”3.2 查找安全序列技巧查找顺序优化技巧优先选择Need小的进程 原因 Need小的进程容易满足 → 容易找到安全序列 例子 Work (3,3,2) P1: Need (1,2,2) ← Need小优先选择 P4: Need (4,3,1) ← Need大后选择 先满足P1 → Work增加 → 更容易满足其他进程 ✓可能有多个安全序列系统状态 Work (5,3,2) P1: Need (1,2,2) ✓可以 P3: Need (0,1,1) ✓也可以 安全序列不唯一 序列1P1 → P3 → ... 序列2P3 → P1 → ... 都是合法的安全序列 ✓ 题目要求 给出一个安全序列 → 任意一个即可找不到安全序列的情况场景 Work (1, 0, 0) 所有进程的Need P0: (2, 1, 0) P1: (1, 1, 1) P2: (3, 0, 0) 检查 P0: (2,1,0) ≤ (1,0,0)? ✗ P1: (1,1,1) ≤ (1,0,0)? ✗ P2: (3,0,0) ≤ (1,0,0)? ✗ 没有进程能满足 ❌ → 无安全序列 → 系统不安全南北绿豆“找到一个进程能满足就继续找不到任何进程就不安全。”四、资源请求算法4.1 资源请求处理4步骤请求处理流程进程Pi请求资源Request[i] 步骤1检查请求合法性 if (Request[i] Need[i]): 错误超过最大需求 拒绝 步骤2检查资源是否足够 if (Request[i] Available): 等待资源不足 步骤3试探性分配 Available Available - Request[i] Allocation[i] Allocation[i] Request[i] Need[i] Need[i] - Request[i] 步骤4安全性检测 执行安全性算法 步骤5判断结果 if (系统安全): 正式分配 ✓ else: 恢复原状态 ❌ Available Available Request[i] Allocation[i] Allocation[i] - Request[i] Need[i] Need[i] Request[i] 进程等待资源请求详细计算示例题目 在前面安全状态下P1请求资源Request(1, 0, 2) 当前状态 Available (3, 3, 2) P1: Allocation (2, 0, 0) Need (1, 2, 2)请求处理计算表步骤检查/操作计算结果1. 合法性Request ≤ Need?(1,0,2) ≤ (1,2,2)✓2. 资源够Request ≤ Available?(1,0,2) ≤ (3,3,2)✓3. 试探分配Available Available - Request(3,3,2) - (1,0,2) (2,3,0)-Allocation[P1] Allocation Request(2,0,0) (1,0,2) (3,0,2)-Need[P1] Need - Request(1,2,2) - (1,0,2) (0,2,0)-试探分配后的新状态 Available (2, 3, 0) Allocation Need A B C A B C P0 0 1 0 7 4 3 P1 3 0 2 0 2 0 ← 变化 P2 3 0 2 6 0 0 P3 2 1 1 0 1 1 P4 0 0 2 4 3 1步骤4安全性检测轮次Work检查进程Need≤Work?选择Work更新安全序列初始(2,3,0)----[]1(2,3,0)P1(0,2,0)≤(2,3,0)?✓(5,3,2)[P1]2(5,3,2)P3(0,1,1)≤(5,3,2)?✓(7,4,3)[P1,P3]3(7,4,3)P0(7,4,3)≤(7,4,3)?✓(7,5,3)[P1,P3,P0]4(7,5,3)P2(6,0,0)≤(7,5,3)?✓(10,5,5)[P1,P3,P0,P2]5(10,5,5)P4(4,3,1)≤(10,5,5)?✓(10,5,7)[P1,P3,P0,P2,P4]结果 找到安全序列P1 → P3 → P0 → P2 → P4 ✓ 步骤5正式分配 系统安全 → 同意P1的请求 保持试探分配的新状态如果不安全的情况假设P1请求Request(0, 2, 0) 步骤1-3试探分配 Available (3,3,2) - (0,2,0) (3,1,2) 安全性检测 Work (3,1,2) 检查P0(7,4,3) ≤ (3,1,2)? ✗ 检查P1(1,0,2) ≤ (3,1,2)? ✓ 分配P1Work (3,1,2) (2,0,0) (5,1,2) 检查P0(7,4,3) ≤ (5,1,2)? ✗ 检查P2(6,0,0) ≤ (5,1,2)? ✗ 检查P3(0,1,1) ≤ (5,1,2)? ✓ 分配P3Work (5,1,2) (2,1,1) (7,2,3) 检查P0(7,4,3) ≤ (7,2,3)? ✗B不够 检查P2(6,0,0) ≤ (7,2,3)? ✓ ... 假设最终找不到安全序列 ❌ 步骤5回退 撤销试探分配 恢复原状态 P1等待阿西噶阿西“不安全就回退保证系统始终处于安全状态。”4.2 资源请求完整模拟完整请求处理流程图否是否是是否进程Pi请求RequestRequest≤ Need?错误超过最大需求Request≤ Available?进程等待资源不足试探性分配Available - RequestAllocation RequestNeed - Request执行安全性检测找到安全序列?正式分配保持新状态回退恢复原状态分配成功请求处理关键点关键1试探分配前检查 Request ≤ Need不超过需求 Request ≤ Available资源够 关键2试探分配是临时的 先假设分配 检查安全性 不安全则回退 ✓ 关键3安全性检测用新状态 用更新后的Available、Allocation、Need 检查能否找到安全序列 关键4回退要完整 三个向量/矩阵都要恢复 Available Request Allocation - Request Need Request哈吉米“资源请求算法就是加了安全性检测的分配算法。”五、银行家算法计算技巧5.1 手工计算技巧计算流程总结第1步计算Need矩阵 Need Max - Allocation 逐个计算列表展示 第2步初始化Work和Finish Work Available Finish全部false 第3步循环查找 for each 进程: if (Finishfalse Need≤Work): 选中该进程 第4步更新Work Work Work Allocation Finish true 记录到安全序列 第5步重复第3-4步 直到所有Finishtrue或无进程满足 第6步判断结果 全true → 安全输出序列 有false → 不安全画表技巧建议表格格式 步骤 | Work | P0 | P1 | P2 | P3 | P4 | 选择 | 安全序列 -----|------|----|----|----|----|----|----------- 初始 |(3,3,2)| ✗ | ✓ | ✗ | ✗ | ✗ | P1 | [P1] 1 |(5,3,2)| | | | ✓ | | P3 | [P1,P3] 2 |(7,4,3)| ✓ | | | | | P0 | [P1,P3,P0] ... 符号说明 ✓Need≤Work可以选择 ✗NeedWork不满足 空已完成Finishtrue常见错误及避免错误原因避免方法Need算错减法错误列表逐项计算验证NeedAllocationMaxWork更新错加法错误明确写出WorkWorkAllocation漏检进程遗漏某进程用表格逐个打勾顺序错误NeedWork仍选择每次明确检查Need≤Work南北绿豆“用标准表格逐步填写避免出错。”5.2 资源请求判断技巧快速判断方法技巧1先看资源够不够 if (Request Available): 直接判断等待 ✓ 无需试探分配 技巧2检查是否明显不安全 试探分配后 if (新Available很小 剩余Need都很大): 大概率不安全 技巧3优先级检查 先满足Need小的进程 → 如果它们都满足不了 → 不安全请求判断示例题目 P4请求Request(3, 3, 0) 当前Available (3, 3, 2) 快速判断 Request (3,3,0) Available (3,3,2) Request ≤ Available? ✓ 刚好够 试探分配 新Available (0,0,2) 检查所有Need P0: (7,4,3) ≤ (0,0,2)? ✗ P1: (1,2,2) ≤ (0,0,2)? ✗ P2: (6,0,0) ≤ (0,0,2)? ✗ P3: (0,1,1) ≤ (0,0,2)? ✗ P4: (1,3,1) ≤ (0,0,2)? ✗假设 没有任何进程满足 ❌ → 明显不安全 → 不需要详细计算 ✓阿西噶阿西“掌握技巧快速判断节省时间。”六、银行家算法总结6.1 核心要点南北绿豆总结数据结构Available、Max、Allocation、Need、Work、FinishNeed计算Need Max - Allocation安全性检测查找满足Need≤Work的进程更新Work重复安全序列所有进程Finishtrue的执行顺序资源请求4步检查合法性、资源够、试探分配、安全性检测不安全处理回退试探分配进程等待6.2 考研408重点阿西噶阿西必考题型 ✓ 计算Need矩阵 ✓ 安全性检测找安全序列 ✓ 资源请求能否分配 ✓ 判断系统是否安全 ✓ 画出安全性检测过程表 必记公式 ✓ Need[i][j] Max[i][j] - Allocation[i][j] ✓ Work Work Allocation[i]进程i完成后 ✓ 初始Work Available 必记要点 ✓ 安全状态存在安全序列所有进程能完成 ✓ 不安全状态不存在安全序列 ✓ 安全序列所有进程按某顺序执行都能完成 ✓ 查找条件Finish[i]false Need[i]≤Work ✓ Work更新Work Work Allocation[i] ✓ 资源请求Request≤Need且Request≤Available ✓ 试探分配临时修改状态检测安全性 计算步骤安全性检测 1. 计算Need Max - Allocation 2. 初始化WorkAvailableFinish全false 3. 找进程iFinish[i]false Need[i]≤Work 4. Work Work Allocation[i]Finish[i]true 5. 重复3-4直到全true或无进程满足 6. 全true→安全否则不安全 计算步骤资源请求 1. 检查Request ≤ Need不超需求 2. 检查Request ≤ Available资源够 3. 试探分配三个数据结构更新 4. 安全性检测 5. 安全→分配不安全→回退 典型考题 题给定系统状态和Need矩阵判断是否安全 答 画表列出每步Work、检查的进程、选择结果 例如 Work(3,3,2) P1: Need(1,2,2)≤(3,3,2) ✓ 选P1 Work(5,3,2) P3: Need(0,1,1)≤(5,3,2) ✓ 选P3 ... 所有进程Finishtrue 安全序列P1→P3→P0→P2→P4 系统安全哈吉米“掌握了银行家算法详细计算408死锁避免的计算题就完全拿下了。”参考资料《操作系统概念》第9版- Abraham Silberschatz《现代操作系统》第4版- Andrew S. Tanenbaum《计算机操作系统》第4版- 汤小丹408统考大纲 - 操作系统部分

相关新闻

2026/7/16 18:27:21

Vscode相关操作

摘要:本文整理了 VSCode 使用中的实用技巧与问题解决方案,包括:1)Windows/Linux 下配置 SSH 免密登录的详细步骤;2)常用快捷键如代码格式化、多光标操作等;3)将制表符转换为空格的方…

2026/7/16 18:27:21

「新品发布」DAVIS346 AER / DVXplorer S Duo - 高性能事件相机

全球知名的神经形态视觉传感器厂商iniVation发布两款全新的高性能事件相机,DAVIS346 AER和DVXplorer S Duo,下面我们将对这两款产品进行简要介绍。 欢迎访问iniVation中国区代理商官网:www.event-cam.cn 关于iniVation iniVation是一家来专…

2026/7/16 19:22:26

Mousecape:macOS光标定制终极指南,让你的鼠标指针与众不同

Mousecape:macOS光标定制终极指南,让你的鼠标指针与众不同 【免费下载链接】Mousecape Cursor Manager for OSX 项目地址: https://gitcode.com/gh_mirrors/mo/Mousecape 想让你的Mac拥有独一无二的个性化鼠标指针吗?Mousecape是一款专…

2026/7/16 19:22:26

OpenList-Desktop日志监控与故障排查:新手必备的实用指南

OpenList-Desktop日志监控与故障排查:新手必备的实用指南 【免费下载链接】OpenList-Desktop A desktop application for OpenList 项目地址: https://gitcode.com/gh_mirrors/op/OpenList-Desktop OpenList-Desktop是一款功能强大的桌面应用,提供…

2026/7/16 19:22:26

Ursine主题高级定制:颜色方案修改与个性化样式调整技巧

Ursine主题高级定制:颜色方案修改与个性化样式调整技巧 【免费下载链接】typora-theme-ursine A Typora theme, inspired by Bear 项目地址: https://gitcode.com/gh_mirrors/ty/typora-theme-ursine Ursine主题是一款深受Bear应用启发的优雅Typora主题&…

2026/7/16 19:22:26

WeChat Assistant开发者手册:基于Electron与微信Hook的实现原理

WeChat Assistant开发者手册:基于Electron与微信Hook的实现原理 【免费下载链接】wechat-assistant ⚠️ 停止维护 - 微信助手,支持群发消息、定时任务、消息防撤回等功能 项目地址: https://gitcode.com/gh_mirrors/wec/wechat-assistant 微信助…

2026/7/15 17:04:06

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾在网易云音乐下载了心爱的歌曲&#…

2026/7/15 22:21:34

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境随着新能源汽车行业的快速发展,充电通信协议的标准化和测试验证变得尤为重要。GB/T 27930-2023作为中国智能充电协议的最新版本,对充电机与电动汽车之间的通信提出了更严格…

2026/7/15 23:18:22

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡 【免费下载链接】rtl8852be Realtek Linux WLAN Driver for RTL8852BE 项目地址: https://gitcode.com/gh_mirrors/rt/rtl8852be 还在为Linux系统无法识别RTL8852BE Wi-Fi 6网卡而烦恼吗?&#x1f…

2026/7/16 0:04:06

AD9215BRUZRL7-105是一款工业 10bit 流水线模数转换器

型号介绍AD9215BRUZRL7-105 是一款10 位单通道高速流水线模数转换器,它采用模拟单电源独立供电 数字驱动分离供电双电源架构,模拟电源 AVDD 额定 3V,允许工作区间 2.7V~3.3V;数字驱动电源 DRV 独立设计,支持 2.25V~3.…

2026/7/16 0:04:06

LTC4418IUF#TRPBF是一款工业级双通道控制器

型号介绍LTC4418IUF#TRPBF 是一款工业级双通道电源路径控制器,它芯片采用 20 引脚 4mm4mm QFN 封装,底部附带外露散热焊盘作为 21 号 GND 引脚,热阻 θJA 为 47℃/W、θJC 仅 4.5℃/W,散热性能适配大功率切换场景;温区…

2026/7/16 0:04:06

uos-exporter核心组件解析:10个关键监控导出器功能详解

uos-exporter核心组件解析:10个关键监控导出器功能详解 【免费下载链接】uos-exporter uos-exporter collects metrics from os 项目地址: https://gitcode.com/openeuler/uos-exporter 前往项目官网免费下载:https://ar.openeuler.org/ar/ uos-…

2026/7/16 13:58:36

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…