1530 字
4 分钟
考研专业课学习记录2026-05-06
考研专业课学习记录 | 2026-05-06
今日学习内容
今天专业课学习三小时24分,走神大概四十分钟,主要完成了死锁的相关学习、死锁的产生条件、预防、避免、银行家算法、安全队列、死锁的检测和消除
AI知识点带复盘
死锁核心定义
考研408操作系统中,死锁指多个并发进程在执行过程中,因争夺共享资源陷入互相等待的僵局,若无外力干预,所有僵持进程都将无法继续推进。典型示例:进程P1持有打印机资源等待扫描仪,进程P2持有扫描仪资源等待打印机,二者形成循环等待陷入死锁。
死锁产生的四个必要条件
必须同时满足以下4个条件才会触发死锁,破坏任意一个即可避免死锁:
- 互斥条件:独占资源同一时刻只能被一个进程占用,如打印机、磁带机。
- 请求和保持条件:进程已持有至少一个资源,同时提出新资源请求,且未释放已持有的资源。
- 不剥夺条件:进程已获得的资源无法被强行剥夺,只能由进程主动释放。
- 环路等待条件:存在进程-资源循环链,即{P0,P1,…,Pn},Pi等待Pi+1占有的资源,Pn等待P0占有的资源。
死锁的预防
通过破坏死锁必要条件从根源杜绝死锁:
- 破坏请求和保持条件:要求进程一次性申请全部所需资源,未获取全部资源则不执行,缺点是资源利用率低。
- 破坏不剥夺条件:进程申请新资源未满足时,主动释放已持有的全部资源,后续重新申请,会增加上下文切换开销。
- 破坏环路等待条件:为所有资源分配唯一编号,要求进程按编号递增顺序申请资源,从根源打破循环等待,是工程常用方案。
- 破坏互斥条件:仅适用于可共享资源,独占资源无法通过该方式预防死锁。
死锁的避免
不破坏必要条件,通过动态评估资源分配状态,避免系统进入不安全状态,核心算法为银行家算法。核心思路是每次分配前模拟分配并检查是否存在安全序列,存在则正式分配,否则让进程等待。
银行家算法核心细节
核心数据结构
Available:系统可用各类资源数量数组Max:每个进程最大所需各类资源数量Allocation:每个进程当前已分配资源数量Need:每个进程剩余所需资源数量,Need = Max - Allocation
执行步骤
- 检查进程请求资源数是否不超过自身剩余需求
Request[i] ≤ Need[i],非法则报错 - 检查请求资源数是否不超过系统可用资源
Request[i] ≤ Available,不满足则进程等待 - 模拟分配并修改数据结构,随后执行安全性算法验证是否存在安全序列,存在则正式分配,否则回滚模拟数据让进程等待
安全队列(安全序列)
指按顺序推进的进程集合{P1,P2,…,Pn},按该顺序每个进程均可获取全部资源完成执行并释放资源,供后续进程使用。系统处于安全状态当且仅当存在至少一个安全序列。
死锁的检测
定期扫描系统状态判断是否出现死锁:
- 初始化
Work = Available,标记所有进程为未完成 - 遍历未完成进程,若存在进程满足
Need[i] ≤ Work,则标记其完成并将Work = Work + Allocation[i],重复该步骤 - 若所有进程均完成则无死锁,否则系统出现死锁
死锁的消除
检测到死锁后通过以下方式解除:
- 资源剥夺:强行从其他进程夺取资源分配给死锁进程
- 撤销进程:终止一个或多个死锁进程,释放其占用的全部资源
- 进程回退:让死锁进程回滚至检查点,释放当前占有的资源重新申请
问题与反思
- 今日走神时长约40分钟,占用近五分之一学习时间,压缩了知识点练习时长,后续需通过番茄工作法提升专注度,减少无效走神。
- 死锁预防、避免、检测与消除的边界容易混淆,尤其是预防和避免的核心区别需进一步梳理:预防是破坏必要条件从根源杜绝,避免是动态规避不安全状态。
- 多资源场景下银行家算法的安全序列推导容易出错,需要通过更多例题巩固练习。
收获与总结
- 系统梳理了死锁模块的完整知识框架,理清了从定义、产生条件到各类应对方案的逻辑链条,明确了各考点在408考试中的考查重点,比如银行家算法是高频计算题考点,死锁四个必要条件常以选择题形式考查。
- 掌握了银行家算法的核心流程和数据结构关系,能够独立完成简单场景下的资源分配模拟和安全序列查找。
- 明确了死锁预防、避免、检测与消除的适用场景和优缺点,为后续做综合应用题打下了扎实基础。
💡 碎碎念:踏实吃透每一个知识点!
文档内容由 AI 辅助生成
分享
如果这篇文章对你有帮助,欢迎分享给更多人!
考研专业课学习记录2026-05-06
https://elysiaweb.vercel.app/posts/408/5-6/ 部分信息可能已经过时
相关文章 智能推荐