《操作系统》——死锁

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

相关文章

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个月便会增加一倍,性能也将提升一倍。 那么相应的,计算机就会变得越来越快,越来越小型化。

1、简述linux操作系统启动流程

1、简述linux操作系统启动流程 启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。开机时将ROM中的指令映射到RAM的低地址空间,CPU读取到这些指令,硬件的健康状况进行检查,按照BIOS中设置的启

操作系统是怎么为不同的程序分配所需的内存空间的

操作系统为不同的程序分配内存空间的过程涉及多个关键步骤,确保每个程序都有其所需的内存资源,同时避免程序之间的冲突。以下是操作系统如何为程序分配内存空间的详细过程: 1. 内存管理的基础概念 虚拟内存:现代操作系统使用虚拟内存机制来为程序提供隔离的内存空间。每个程序运行在其独立的虚拟地址空间中,这使得程序间的内存互不干扰。物理内存:实际的 RAM(随机存取存储器),由操作系统和硬件共同管理。虚拟

操作系统安全保护

操作系统安全概述 概念:满足安全策略要求,具有响应安全机制及安全功符合特定安全标准,在一定约束条件下 能抵御常见网络安全威胁,保障自身安全运行及资源安全 安全等级:根据安全功能和安全保障要求分为 用户自主保护级  系统审计保护级 安全标记保护级 结构化保护级 访问验证保护级 操作系统作用: 负责计算系统的资源管理、支撑和控制各种应用程序运行,为用户提供计算机系统管理接口 是构成网络信息