操作系统关键知识点之死锁恢复与避免(资源管理进阶)
本次重新学习操作系统,希望通过对所学内容进行总结,与大家一同学习进步。以下将围绕“从死锁中恢复”和“死锁避免”两大核心内容,梳理知识点、通俗讲解并标注重点,最后通过表格总结。
一、知识点总结
(一)从死锁中恢复的方法
-
利用抢占恢复
- 核心思想:强制从某个进程手中夺取资源分配给其他进程,需人工干预或系统支持资源抢占。
- 适用场景:资源可临时转移(如打印机),但可能导致进程挂起或数据不一致。
-
利用回滚恢复
- 核心思想:通过周期性“检查点”记录进程状态和资源分配,死锁时将进程回退到未占用关键资源的检查点,重新分配资源。
- 关键点:检查点需包含进程状态和资源信息,回滚后需丢弃检查点之后的操作结果。
-
通过杀死进程恢复
- 核心思想:终止一个或多个死锁进程以释放资源,分为杀死死锁环内进程或环外“牺牲品”进程。
- 注意事项:优先选择可重启且无副作用的进程(如编译进程),避免杀死更新数据库等有状态的进程。
(二)死锁避免的核心概念与方法
-
安全状态与资源轨迹图
- 安全状态:存在一种资源分配顺序,使所有进程都能顺利完成,避免进入死锁状态。
- 资源轨迹图:用二维坐标表示进程执行与资源请求的关系,横轴和纵轴分别为进程A和B的执行步骤,图中斜线区域为死锁区,避免进入该区域即可防止死锁。
- 核心逻辑:通过轨迹图直观判断资源分配是否会导致进程进入循环等待(死锁环)。
-
资源请求与分配策略
- 动态判断:每次分配资源前,判断是否会导致系统进入不安全状态,仅在安全时分配。
- 关键前提:需预先知道进程的资源请求总量(如矩阵R),以便提前规划分配顺序。
二、通俗讲解
(一)从死锁中恢复:“止损”的三种手段
-
抢占资源:强行“夺资源”
- 好比老师发现两个学生抢同一支笔写作业(死锁),直接拿走其中一人的笔给另一人先用,用完再还回去。
- 重点:适合“可暂借”的资源(如打印机),但可能让被抢资源的学生(进程)暂停作业(挂起),甚至需要重新开始。
-
回滚恢复:“时光倒流”从头来
- 类似游戏存档,每隔一段时间保存进度。如果死锁发生,就加载之前的存档(检查点),让进程回到还没抢资源的状态,重新分配资源。
- 重点:存档(检查点)要记录进程的“进度”和“背包里的资源”,回滚后之前的“临时作业”(如未保存的输出)要丢弃。
-
杀死进程:“牺牲小我”换全局
- 直接终止死锁中的某个进程,释放它占有的资源。比如两个学生抢笔和本子死锁,旁边有个学生在玩玩具(非死锁进程),但玩具和笔、本子一样,杀死他(终止进程)就能拿到资源。
- 重点:优先杀“能重启”的进程(如重新编译代码),别杀“改数据”的进程(如转账操作,杀了会重复执行出错)。
(二)死锁避免:“防患于未然”的策略
-
安全状态:规划“资源使用路线”
- 想象两个学生要借笔和本子:如果先让学生A借笔,用完给学生B,同时学生B借本子,用完给A,两人都能完成作业(安全状态);但如果同时借同一种资源,就会卡死(死锁)。
- 重点:系统分配资源时,要先算好“顺序”,确保所有进程都能按计划拿到资源。
-
资源轨迹图:用“地图”避开死锁区
- 把两个进程的执行步骤画成“地图”,横轴是学生A的步骤,纵轴是学生B的步骤。图中有个“危险区”(死锁区),一旦两人的进度同时进入这个区域,就会抢资源卡死。系统要避免让他们同时走到危险区。
- 核心逻辑:就像开车看地图避开拥堵路段,分配资源时也要看“轨迹地图”,绕开死锁风险。
三、知识点表格总结
知识点分类 | 具体方法/概念 | 核心逻辑 | 重点/适用场景 |
---|---|---|---|
死锁恢复 | 利用抢占恢复 | 强制夺取资源重新分配 | 需人工干预,适合可暂借资源(如打印机),可能导致进程挂起 |
利用回滚恢复 | 通过检查点回退进程状态 | 需定期保存检查点,回滚后丢弃后续操作,适合可重复执行的任务 | |
通过杀死进程恢复 | 终止进程释放资源 | 优先杀无状态进程(如编译程序),避免杀有数据更新的进程 | |
死锁避免 | 安全状态 | 确保存在进程执行顺序使资源可满足 | 需预先知道进程资源请求总量,动态判断分配是否安全 |
资源轨迹图 | 用二维图表示进程执行与资源请求,避开死锁区 | 直观展示死锁风险,适用于分析简单系统的资源分配冲突 |
写作不易,希望这篇总结能帮助大家理解死锁恢复与避免的核心逻辑!如果觉得有用,欢迎关注我的博客,点赞评论分享,一起探讨更多操作系统知识~