《操作系统》——死锁

2024-08-27 20:58
文章标签 操作系统 死锁

本文主要是介绍《操作系统》——死锁,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    在计算机中,各种资源(包括硬件资源和软件资源)都是由操作系统进行管理和分配的。但是如果资源分配不当,就会造成死锁。

    死锁定义:系统中存在一组进程(两个或者多个),它们中的每一个进程都占用了某种资源而又都在等待该组进程中另一个进程所占用的资源,从而造成这种等待永远不能结束,则说明系统出现了死锁。如下图所示。



    进程A和进程B都要访问资源1和资源2,但是进程A占用资源1,他想要得到进程B占用的资源2才能完成任务,而进程B占用资源2的同时,又想得到进程A释放资源1才能完成任务,在此时,进程A、B都没有完成任务并且占用资源不放,又想得到对方的资源,这就造成了进程的相互等待状态。死锁的形成原因就是这个原理。

    死锁形成的原因:各个进程都要访问共享资源,但是共享资源数比进程所需要的资源数要少,系统如果给各个进程分配资源时分配不当,这就会造成死锁。

    

    死锁形成一定同时保持四个必要条件

    1、互斥的使用资源——每个资源每次只能给一个进程使用。

    2、占有且等待资源——一个进程申请资源得不到满足时处于等待状态,并且不释放自己所占用的资源。

    3、非抢夺式分配——任何一个进程不能抢夺另一个进程所占用的资源,即已经被占用的资源只能有占用的进程自己来释放。

    4、循环等待资源——存在一组进程,其中每个进程分别等待另一个进程所占用的资源。

    这四个条件仅仅是必要条件,而不是充分条件,只要放生死锁,这四个条件一定同时成立,若有一个或多个条件不成立,则一定没有死锁。

    死锁的防止

    为了避免系统产生死锁,我们可以采取三种方式分配资源避免死锁的发生。

    1、静态分配资源:进程在开始执行前就已经申请到自己所需要的全部资源,仅当系统能够满足进程的全部资源申请要求且把资源分配给进程后,进程才开始执行。这样破坏了占有且等待资源,和循环等待资源这两个条件,这样死锁就不存在了。

    2、按序分配资源:对系统中每一个资源给出编号,规定任何一个进程申请两个或两个以上的资源时,总是先申请编号小的资源,然后再申请编号大的资源。这里破坏的是循环等待资源。

   例如:进程A和进程B都要访问资源1和资源2,访问顺序是先访问资源1,再访资源2,系统将资源1分配给进程A后,进程B不能访问资源2(虽然它需要资源2),他只先访问资源1之后再访问资源2,这样,进程A再使用资源2时就没有进程跟他抢了,能保证进程A完成任务,等进程A完成任务之后,进程B就能访问资源1和资源2了。

    3:剥夺式分配资源:当一个进程申请资源得不到满足时,可以从另一个进程那里去抢夺。显然,这种防止死锁的方式就是破坏第三个条件“非抢夺式分配”。这种分配策略目前只是适用于对处理器和主存资源的分配。

   小结

    从上面的分析看出,死锁的形成原因是各个进程都要访问共享资源并且共享资源数小于进程所需要的资源数造成的。想要破坏死锁,只要破坏死锁形成时同时所保持的四个必要条件就行,因为四个条件必须同时成立才能形成死锁,当有一个或者多个条件不成立时死锁就不会发生,所以,破坏保持死锁的必要条件,就能破坏死锁。


这篇关于《操作系统》——死锁的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1112762

相关文章

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

Java死锁问题解决方案及示例详解

《Java死锁问题解决方案及示例详解》死锁是指两个或多个线程因争夺资源而相互等待,导致所有线程都无法继续执行的一种状态,本文给大家详细介绍了Java死锁问题解决方案详解及实践样例,需要的朋友可以参考下... 目录1、简述死锁的四个必要条件:2、死锁示例代码3、如何检测死锁?3.1 使用 jstack3.2

Mysql如何解决死锁问题

《Mysql如何解决死锁问题》:本文主要介绍Mysql如何解决死锁问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录【一】mysql中锁分类和加锁情况【1】按锁的粒度分类全局锁表级锁行级锁【2】按锁的模式分类【二】加锁方式的影响因素【三】Mysql的死锁情况【1

MySql死锁怎么排查的方法实现

《MySql死锁怎么排查的方法实现》本文主要介绍了MySql死锁怎么排查的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录前言一、死锁排查方法1. 查看死锁日志方法 1:启用死锁日志输出方法 2:检查 mysql 错误

C#多线程编程中导致死锁的常见陷阱和避免方法

《C#多线程编程中导致死锁的常见陷阱和避免方法》在C#多线程编程中,死锁(Deadlock)是一种常见的、令人头疼的错误,死锁通常发生在多个线程试图获取多个资源的锁时,导致相互等待对方释放资源,最终形... 目录引言1. 什么是死锁?死锁的典型条件:2. 导致死锁的常见原因2.1 锁的顺序问题错误示例:不同

MYSQL事务死锁问题排查及解决方案

《MYSQL事务死锁问题排查及解决方案》:本文主要介绍Java服务报错日志的情况,并通过一系列排查和优化措施,最终发现并解决了服务假死的问题,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录问题现象推测 1 - 客户端无错误重试配置推测 2 - 客户端超时时间过短推测 3 - mysql 版本问

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

Linux操作系统 初识

在认识操作系统之前,我们首先来了解一下计算机的发展: 计算机的发展 世界上第一台计算机名叫埃尼阿克,诞生在1945年2月14日,用于军事用途。 后来因为计算机的优势和潜力巨大,计算机开始飞速发展,并产生了一个当时一直有效的定律:摩尔定律--当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。 那么相应的,计算机就会变得越来越快,越来越小型化。