操作系统之死锁

一、死锁的概念

死锁是指在一个进程集合中的每个进程都在等待只能由该集合中的其它进程才能引起的事件,而无限期陷入僵持的局面。若无外力作用,这些进程都将无法向前推进。

二、产生死锁的原因

资源有限:当系统中多个进程共享资源时,如打印机、磁带机等,其数目不足以满足诸进程的需要,会引起进程对资源的竞争而产生死锁。通常是对不可剥夺资源的竞争才会引发死锁,可剥夺资源的竞争是不会引起死锁的。

并发进程间的推进顺序不当:进程在运行过程中,请求和释放资源的顺序不当,也会产生进程死锁。

三、产生死锁的必要条件

互斥条件:并发进程所要求和占有的资源是不能同时被两个以上进程的使用或操作的,进程对它所需要的资源进行排他性控制。

不剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行剥夺,而只能由获得该资源的进程自己释放。

部分分配(请求和保持条件):进程每次申请它所需要的一部分资源时,在等待新资源的同时继续占用已分配到的资源。

环路条件:存在一种进程循环链,链中每一个进程已获得的资源同时被下一个进程请求。

四、死锁的处理方法

预防死锁:破坏死锁的四个必要条件之一,从而预防死锁的发生。但这种方法可能会降低系统的并发性。

避免死锁:允许进程动态申请资源,但系统在资源分配之前会先计算资源分配的安全性。若分配不会导致系统从安全状态向不安全状态转换,则将资源分配给进程;反之,则不分配资源,进程必须阻塞等待。

检测死锁并恢复:系统定时运行一个"死锁检测"程序,如果检测到系统发生了死锁,再采取措施解除它。死锁检测算法可以提供程序最大的并发性。

鸵鸟策略:像鸵鸟一样对死锁视而不见,即不采取任何措施来预防、避免或检测死锁。这种策略在大多数操作系统中用于终端用户进程,当系统仅用于浏览和其他正常进程时,这种方法是适用的。但如果一个进程必须始终运行,并且发生死锁,则重新启动系统是推荐的最佳解决方案。

相关推荐
fakerth29 分钟前
【OpenHarmony】communication_ipc模块
操作系统·openharmony
Coisinier4 小时前
RHCE中shell脚本基础(磁盘剩余空间监控,Web 服务状态检查,curl 访问 Web 服务并返回状态)
linux·运维·服务器·前端·nginx·操作系统
小宇子2B1 天前
free 完再 malloc 同样大小,为什么常拿回刚还回去的那块?
操作系统
触底反弹3 天前
拷个 .exe 到新电脑就跑不起来?你缺的不是文件,是对链接的理解
c++·windows·操作系统
杊页3 天前
第一板块:Android 系统基石与运行原理 | 第二篇:Android 编译、打包与安装机制
android·操作系统
壮Sir不壮3 天前
GO语言——GMP调度模型
linux·开发语言·golang·go·操作系统·线程·协程
Surest3 天前
OpenHarmony 技术拆解(二):从 capability 看懂分布式软总线与任务迁移
操作系统
OpenAnolis小助手4 天前
如何利用 AI Agent 实现热补丁的自动化生成
人工智能·安全·ai·操作系统·agent·龙蜥
小宇子2B5 天前
缺页中断不是“出错”,是内核最忙的一条正常路径
操作系统
小宇子2B5 天前
内存不够时,内核怎么把"冷"页踢出去——swap 与页面回收
操作系统