《操作系统》——死锁

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

相关文章

Linux操作系统 初识

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

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

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

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

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

操作系统安全保护

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

Linux操作系统命令集(一)

最近开了操作系统的课,弄着虚拟机的linux系统命令学学 文件和目录操作命令: ls:列出目录内容 示例:ls -l 以长格式列出目录内容cd:切换目录 示例:cd /home/user 切换到 /home/user 目录mkdir:创建目录 示例:mkdir new_directory 创建名为 new_directory 的目录rmdir:删除空目录touch:创建空文件或更新文件的时间戳

【Linux修行路】线程安全和死锁

目录 ⛳️推荐 一、线程安全 1.1 常见的线程不安全情况 1.2 常见的线程安全情况 1.3 常见的不可重入情况 1.4 常见可重入的情况 1.5 可重入与线程安全的联系 1.6 可重入与线程安全的区别 二、死锁 2.1 死锁的四个必要条件 2.2 如何避免产生死锁? ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大

操作系统分页式存储管理

每次输入地址后,计算出页号,若页号越界,则给出错误提示。否则依次调用FIFO和LRU算法,这里值得注意的是,由于我们的FIFO算法先于LRU算法被调用,那么当在处理FIFO算法时,我们暂且不将位视图相应位置做变化,留到处理LRU算法再做处理。 对于FIFO、LRU算法的缺页,我们分两种情况考虑,第一种是模拟栈内还有空间,那么直接将其入栈。第二种是模拟栈内无空间,要发生置换。发生置换时把模拟栈最底

linux定时监听ssh服务是否启动-------麒麟操作系统永久关闭swap

linux监听ssh服务是否启动 1、监听脚本2、定时任务3、麒麟操作系统,永久关闭swap 1、监听脚本 #在/usr/local/bin目录下新建脚本文件 cd /usr/local/bintouch check_sshd.sh#给可执行权限chmod +x /usr/local/bin/check_sshd.sh 脚本内容如下: #!/bin/bashs

【银河麒麟高级服务器操作系统实例】虚拟化平台系统服务中断现象分析及处理建议

服务器环境以及配置 【机型】虚机 处理器: Kunpeng-920 内存: 40G 【内核版本】 4.19.90-23.8.v2101.ky10.aarch64 【OS镜像版本】 银河麒麟操作系统 Kylin-Server-10-SP1-Release-Build20-20210518-arm64 【第三方软件】 智能运维系统、mysql数据集群 现象描述 环境描

VMware17 虚拟机下载以及 CentOS8 操作系统安装配置 一条龙全教程

目录 一、安装 vmware workstation 虚拟机  二、安装 CentOS8 操作系统 三、安装 FinalShell 远程连接 一、安装 vmware workstation 虚拟机     安装中...(耐心等待)  到此安装完成,点击启动运行  激活码如下:  MC60H-DWHD5-H80U9-6V85M-8280D