操作系统之死锁

一、死锁的概念

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

二、产生死锁的原因

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

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

三、产生死锁的必要条件

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

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

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

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

四、死锁的处理方法

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

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

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

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

相关推荐
Trouvaille ~10 小时前
【Linux】进程间关系与守护进程详解:从进程组到作业控制到守护进程实现
linux·c++·操作系统·守护进程·作业·会话·进程组
_OP_CHEN11 小时前
【Linux系统编程】(二十九)深度解密静态链接:从目标文件到可执行程序的底层魔法
linux·操作系统·链接·文件系统·c/c++·静态链接
_OP_CHEN1 天前
【Linux系统编程】(二十八)深入 ELF 文件原理:从目标文件到程序加载的完整揭秘
linux·操作系统·编译·c/c++·目标文件·elf文件
肆忆_1 天前
手搓 VM 复盘:从我的 C++ 并发 GC 到字节 PrimJS 的架构演进
操作系统
c++逐梦人1 天前
Linux基础IO
linux·操作系统·io
凉、介1 天前
VMware 三种网络模式(桥接 / NAT / Host-Only)原理与实验解析
c语言·网络·笔记·操作系统·嵌入式·vmware
_OP_CHEN2 天前
【Linux系统编程】(二十七)手撕动静态库原理与实战:从底层逻辑到代码落地
linux·操作系统·动态库·静态库·c/c++·库的原理与制作
fakerth3 天前
【OpenHarmony】输入法imf框架
操作系统·openharmony
Trouvaille ~3 天前
【Linux】UDP Socket编程实战(二):网络字典与回调设计
linux·运维·服务器·网络·c++·udp·操作系统
凉、介3 天前
静态路由探究
网络·笔记·操作系统·嵌入式