操作系统之死锁

一、死锁的概念

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

二、产生死锁的原因

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

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

三、产生死锁的必要条件

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

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

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

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

四、死锁的处理方法

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

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

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

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

相关推荐
_OP_CHEN1 小时前
【Linux系统编程】(二十六)一文吃透 Ext 系列文件系统软硬链接:原理、实战与底层逻辑揭秘
linux·操作系统·文件系统·c/c++·硬链接·软链接·ext2文件系统
fleaxin2 小时前
统信服务器操作系统V20(1070)安装过程
docker·操作系统·nvidia·统信
_OP_CHEN1 天前
【Linux系统编程】(二十五)从路径到挂载:Ext 系列文件系统的 “导航” 与 “整合” 核心揭秘
linux·操作系统·文件系统·c/c++·ext2文件系统·路径解析·挂载分区
HalvmånEver3 天前
Linux:线程 ID 与地址空间布局:深入理解线程内存分布(线程七)
linux·运维·服务器·操作系统·线程
Trouvaille ~3 天前
【Linux】线程同步与互斥(四):线程池与任务管理
linux·运维·服务器·c++·操作系统·线程池·日志系统
燃于AC之乐3 天前
【Linux系统编程】Shell解释器完全实现:从命令解析、环境变量管理到内建命令的全面解析
linux·操作系统·命令行工具·进程控制·shell编程
2401_841495643 天前
【操作系统】存储器管理算法
python·操作系统·存储器管理·连续内存分配算法·非连续内存分配算法·虚拟存储页面置换算法·内存碎片整理与回收算法
holeer3 天前
CS.Math 之《离散数学》| 知识点笔记
数据结构·数据库·数学建模·操作系统·抽象代数·计算机组成
Serene_Dream4 天前
OS 内存小结
操作系统·内存
程序员一点4 天前
第3章:首次启动与基础配置
操作系统·openeuler