处理死锁的四种方法

前面讲过预防死锁是通过破坏死锁的四个必要条件,所以就有四个预防死锁的方法吗?错!只有三种,因为互斥条件是必须的,不仅不能改变,还应该加以保证。因此只能破坏后三个条件。

一、破坏请求和保持条件

方法一 —— 破坏“请求”条件(预先静态分配法)
每个进程执行之前,必须一次性地申请其在整个运行期间所需的全部资源,全部申请到了才能运行。这样它在整个运行过程中便不会再提出资源请求,从而破坏了“请求”条件。

缺点:
① 资源利用率很低:有些资源可能在最后才会用到,它却一直占用了那么久
② 进程可能出现饥饿现象:可能由于个别资源别其他进程占用而导致某进程迟迟不能开始

• 方法二 —— 破坏“保持”条件
每个进程提出申请资源前必须释放已占有的一切资源


二、破坏非抢占条件

方法一 —— 走不通就放弃自己的已有资源造福别人
进程 Pi 申请 Rj 类资源时,检查 Rj 中有无可用资源:有则分配给 Pi ;否则将 Pi 占有的资源全部释放而进入等待状态(Pi等待其原占有的所有资源和申请的资源)

• 方法二 —— 走不通先去抢别人的(前提是别人也走不通),抢不到就放弃自己的
当进程 Pi 申请 Rj 类型的资源时检查 Rj 中有无可用资源:有则分配给 Pi ;否则检查已获得 Rj 类资源的进程 Pk ,若 Pk 处于等待资源状态,则抢占 Pk 的 Rj 类资源并分配给 Pi,若 Pk 不处于等待资源状态,则置 Pi 于等待资源状态(此时Pi原已占有的资源可能被抢占)

这两种方法的缺点:
① 有的资源是不可抢占资源,比如打印机,被抢占后可能导致前一阶段的工作失效
② 延长了周转时间,降低了系统吞吐量,增加了系统开销:因为某些进程的执行可能会被无限推迟


三、破坏循环等待条件(有序资源使用法)

给系统中的所有资源类型进行排序编号
• 每个进程只能按递增顺序申请资源,即进程申请了序号为 8 的资源后,下次只能申请序号为 9 或以上资源
• 如果进程需要同一资源类型的多个实例(也就是序号相同的资源),则必须对它们一起进行申请
• 如果进程后面又想申请序号低的资源(比如5),那就必须把现在拥有的序号为5及其以上的资源全部释放

为什么这种规则可以破坏循环等待条件?
核心: 每个进程只能按递增顺序申请资源
因此每个时刻总有一个进程占据了较高序号的资源,那么它后面继续申请的资源一定是空闲的,这就保证了进程是可以一直向前推进的,举个例子:

在这里插入图片描述

 

优点:
与前两种策略相比,其资源利用率和系统吞吐量都有明显的改善

缺点:
① 序号必须相对稳定,这就限制了新设备的增加
② 如果作业使用各类资源的顺序与系统规定的递增顺序不符合的话,就会造成资源的浪费
③ 按规定次序申请资源的方法会限制用户简单、自主地编程

参考自:【OS笔记 28】处理死锁的四种方法——预防死锁(破坏四个必要条件之一)_Crayon小鱼干的博客-CSDN博客_预防死锁的四种方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/567436.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++输出小数点后几位_Python格式化输出的精度和位数控制

上一期小哥讲解了Python格式化输出的三种方式:本期小哥讲解一下关于小数精度和字符串位数的控制:1. 小数精度控制Python中对于小数精度的控制的使用方法:# 定义变量a 3.1415926# 小数点后保留3位%.3f% a# 输出:3.142# 小数点后保…

tomcat 参数最佳实践_一线架构师开发总结:剖析并发编程+JVM性能,深入Tomcat与MySQL...

每一个程序员都有自己清晰的职业规划和终极目标,无论之后是继续钻研技术,还是转管理岗、产品岗,都是需要自己具备有一定的实力,换句话说技术要牛逼。架构师,是很多程序员的终极目标,而成为一名Java架构师&a…

改进型的时钟置换算法-解惑

此算法又称为第二次机会算法;大致有两种思路: 思路1: 王道讲解的: 思路2: 清华大学陈渝讲解的: 刚开始接触时,觉得有一个是错误的,但不知道是哪个错误,其次清华大学这…

ifconfig相关

目录 一、ifconfig command not found 二、ifconfig结果相关参数解释 一、ifconfig command not found 出现这个问题的原因是新版本的linux默认不带 ifconfig(我这里是centos7,最小安装),官方推荐使用ip命令查看ip:i…

k8s jenkins pipeline 多分支发布_给 Jenkins 换一个新皮肤:BlueOcean

BlueOcean是什么Jenkins是一款Java开发的跨平台持续集成和持续发布的开源项目,它具有如下特征:安装及迁移方便:安装直接部署war包,迁移只需替换JENKINS_HOME目录。配置方便:可视化后台操作。丰富的插件生态圈&#xff…

linux文件目录解释

/根目录/bin存放用户使用的命令,二进制的可执行文件/boot开机启动相关的文件/dev系统中必要的设备文件/etc系统配置文件/home普通用户家目录,在目录下有与普通用户同名的目录rootroot用户的家目录/lib,/lib64库文件/media可以热插拔的设备的挂载点/mnt临…

python读取大文件的坑_如何在Python中读取大文件的特定部分

Given a large file (hundreds of MB) how would I use Python to quickly read the content between a specific start and end index within the file? Essentially, Im looking for a more efficient way of doing: open(filename).read()[start_index:end_index] 解决方案…

POSIX与程序可移植性

目录 一、系统调用和库函数 1、系统调用 2、库函数 二、程序的可移植性及其本质 三、系统开销 四、POSIX 1、定义 2、历史 3、谁来遵循 一、系统调用和库函数 1、系统调用 系统调用是通向操作系统本身的接口,是面向底层硬件的。通过系统调用,可…

144显示器只有60_你知道显示器60Hz和144Hz的刷新率差别有多大吗?你没有用过吗?...

不知什么时候开始,高刷新率成为了显示器的一个重要卖点,成为了电竞游戏显示器的标配,越来越多的人在购买显示器时,开始抛弃早已定格60Hz刷新率,逐渐向120Hz刷/144Hz刷乃至更高的刷新率上靠拢。那么显示器60Hz和144Hz刷…

linux用户权限不够解析及解决方案

目录 一、用户账户:普通账户、超级账户(root) 二、组账户:私有组、标准组 三、linux下账户配置文件:passwd、shadow、group、gshadow。 四、文件权限 1、权限分类 2、文件权限含义 3、目录权限含义 四、权限不够…

chmod -R 644 dir04 报错:权限不够

错误截图 错误分析 1、分析当前用户有无对dir04的操作权限 有,dir04的所有者为wlh,wlh的权限为rwx。 2、分析-R是否可以使用空文件夹和文件,而非空文件夹不可以 可能是这样,但是尝试chmod -R 777 dir04成功。所以与非空无关&am…

云桌面部署_东胜区检察院检察工作网统一业务系统2.0云桌面终端全面部署完成...

按照最高检顶层设计和自治区院、市院关于做好统一业务系统2.0版试点应用工作的相关要求,东胜区人民检察院党组高度重视,高标准、高效率、高质量开展部署准备工作,着力保障统一业务应用2.0系统上线后稳、准、快的运行。为按时按要求完成任务&a…

python处理表格数据教程_python利用Excel读取和存储测试数据完成接口自动化教程...

http_request2.py用于发起http请求 #读取多条测试用例 #1、导入requests模块 import requests #从 class_12_19.do_excel1导入read_data函数 from do_excel2 import read_data from do_excel2 import write_data from do_excel2 import count_case #定义http请求函数 COOKIENon…

linux递归参数-R(r)和-p的区别

在linux系统中创建、复制、删除目录或文件时,常常会用到递归参数。常用的递归参数有-p,-r,-P等。为方便初学者学习、分辨与记忆,将其分类整理如下。 一般常用到递归的命令有:mkdir、cp、rm、ls、grep、chmod、chown等。 而mv命令没有递归参…

html table设置行高_字号与行高

1. 什么是字号与行高什么是字号大小?字号大小就是字体的高度,例如设置字号为50px,那么它的高度如下图所示:什么是行距呢?如下图所示:其中半行距 (lineHeight – fontSize) / 2。但是实际上,fon…

linux 用户名为没有名字 报错:cannot find name for user ID

经过一系列用户权限更改后,切换到普通用户,失败,报错如下: 解决方案:这个问题是因为普通用户没有权限读取/etc/passwd和/etc/group文件造成,添加权限即可。 转载自:id: cannot find name for us…

xposed hook 静态函数_浅谈 Xposed 新概念【模块作用域】

众所周知,Xposed 是一个系统级别的软件框架,它与 Cydia Substrate 不同,Xposed 仅可 hook app_process 中的 java 函数,不过对于大部分的 Android 应用来说已经足够了;它所提供的 API 可以供模块开发者在不修改目标应用…

adc0808温度换算公式_温湿度传感器的三种模拟量换算关系

气候的变化常常会导致空气当中的湿度以及温度随之而产生相应的变化,如果想及时感知空气中温湿度的变化,那就需要温湿度传感器。在日常生活中,温湿度传感器种类有很多,按照数据上传方式分有RS485型温湿度传感器、模拟量型温湿度传感…

共阳数码管段码表_简单共阴极数码管电路图大全

共阴极则是把所有LED的阴极连接到共同接点com,而每个LED的阳极分别为a、b、c、d、e、f、g及dp(小数点),如下图所示。图中的8个LED分别与上面那个图中的A~DP各段相对应,通过控制各个LED的亮灭来显示数字。判断公阴极和公阳极找公共共阴和公共共…

linux find 报错路径必须在表达式之前

执行 find -name yum*,查看当前文件夹下以yum开头的文件。 报错路径必须在表达式之前,如下图所示: 解决方案: 会出现“find: 路径必须在表达式之前”的错误提示。解决的方法有两种 使用转义符把*转义,即 yum\*用引号引起来 &am…