死锁的处理-避免死锁
静态策略:预防死锁
动态策略:避免死锁
一、安全序列,不安全状态,死锁的联系
1.安全序列
就是指如果系统按照这种序列分配资源,则每个进程都能顺利完成。只要能找出一个安全序列,系统就是安全状态。当然,安全序列可能有多个。
2.不安全状态
如果分配了资源之后,系统中找不出任何一个安全序列,系统就进入了不安全状态。这就意味着之后可能所有进程都无法顺利的执行下去。当然,如果有进程提前归还了一些资源,那系统也有可能重新回到安全状态,不过我们在分配资源之前总是要考虑到最坏的情况。
如果系统处于安全状态,就一定不会发生死锁。如果系统进入不安全状态,系统可能会发生死锁
3.联系
( 不安全状态未必就是发生了死锁,但发生死锁时一定是在不安全状态)
因此可以在资源分配之前预先判断这次分配是否会导致系统进入不安全状态,以此决定是否答应资源分配请求。这也是“银行家算法”的核心思想。
二、如何避免系统进入不安全状态-银行家算法
1.银行家算法
银行家算法是荷兰学者 Dijkstra为银行系统设计的,以确保银行在发放现金贷款时,不会发生不能满足所有客户需要的情况。后来该算法被用在操作系统中,用于避免死锁。
核心思想:在进程提出资源申请时,先预判此次分配是否会导致系统进入不安全状态。如果会进入不安全状态,就暂时不答应这次请求,让该进程先阻塞等待。
可以把单维的数字拓展为多维的向量。比如:系统中有5个进程P0~P4,3种资源 R0~R2,初始数量为(10,5,7),则某一时刻的情况可表示如下:
假设系统中有n个进程,m种资源
2.最大需求矩阵Max
每个进程在运行前先声明对各种资源的最大需求数
则可用一个n*m 的矩阵(可用二维数组实现)表示所有进程对各种资源的最大需求数。
不妨称为最大需求矩阵Max,Max[i,j]=K表示进程Pi最多需要K个资源Rj。
3.分配矩阵Allocation
同理,系统可以用一个n*m 的分配矩阵Allocation表示对所有进程的资源分配情况。
4.Need矩阵
Max - Allocation =Need矩阵,表示各进程最多还需要多少各类资源。
5.一维数组Available
另外,还要用一个长度为m的一维数组Available表示当前系统中还有多少可用资源。
6.一维数组Request
某进程Pi向系统申请资源,可用一个长度为m的一维数组Request;表示本次申请的各种资源量。
可用银行家算法预判本次分配是否会导致系统进入不安全状态:
1.如果Request[j]≤Need[i,j](O≤j<m)便转向2否则认为出错。(因为它所需要的资源数已超过它所宣布的最大值)2.如果Request[j]≤Available[i] (0≤j≤m)便转向3;否则表示尚无足够资源,Pi必须等待3.系统试探着把资源分配给进程Pi,并修改相应的数据(并非真的分配,修改数值只是为了做预判);4.操作系统执行安全性算法,检查此次资源分配后,系统是否进入安全状态。若安全,才正式分配,否则,恢复相应数据,让进程阻塞等待Available=Available-Request; Allocation[i,j]=Allocation[i,j]+Request[j]; Need[i,j]=Need[i,j]-Request[j];
总结:
数据结构:
长度为m的一维数组Available表示还有多少可用资源
n*m 矩阵Max表示各进程对资源的最大需求数
n*m 矩阵Allocation表示已经给各进程分配了多少资源
Max- Allocation = Need 矩阵表示各进程最多还需要多少资源
用长度为m 的一位数组 Request表示进程此次申请的各种资源数
银行家算法步骤:
1.检查此次申请是否超过了之前声明的最大需求数
2.检查此时系统剩余的可用资源是否还能满足这次请求
3.试探着分配,更改各数据结构
4.用安全性算法检查此次分配是否会导致系统进入不安全状态
安全性算法步骤:
检查当前的剩余可用资源是否能满足某个进程的最大需求,如果可以,就把该进程加入安全序列,并把该进程持有的资源全部回收。 不断重复上述过程,看最终是否能让所有进程都加入安全序列。
系统处于不安全状态,不一定死锁,但是死锁时一定处于不安全状态。系统处于安全状态一定不会死锁
死锁的处理-避免死锁相关推荐
- 面试官:谈谈什么是死锁?如何解决死锁?
死锁就是有一天你回家,拿着一把钥匙使劲往锁眼里面捅,结果钥匙断里面了,所以你就叫开锁师傅要开锁,结果锁给开死了,这就是死锁了.以上仅仅是玩笑话,以下步入正题. 什么是死锁? 要了解什么是死锁,要首先明 ...
- 死锁是什么?死锁产生的条件?如何避免死锁?以及死锁的示例代码(Java代码)
文章目录 一.什么是死锁? 二.产生死锁的条件? 三.产生死锁的示例代码(java) 四.如何避免死锁? 一.什么是死锁? 下面图片参考 JavaGuide中的内容: 死锁的概念: 死锁:指的是相互两 ...
- python中threading产生死锁_什么是死锁,如何避免死锁(4种方法)
当两个线程相互等待对方释放资源时,就会发生死锁.Python 解释器没有监测,也不会主动采取措施来处理死锁情况,所以在进行多线程编程时应该采取措施避免出现死锁. 一旦出现死锁,整个程序既不会发生任何异 ...
- tp3.2 不能提交到action方法_什么是死锁,如何避免死锁(4种方法)
当两个线程相互等待对方释放资源时,就会发生死锁.Python 解释器没有监测,也不会主动采取措施来处理死锁情况,所以在进行多线程编程时应该采取措施避免出现死锁. 一旦出现死锁,整个程序既不会发生任何异 ...
- java 分析java死锁_Java死锁示例–如何分析死锁情况
java 分析java死锁 死锁是两个线程或多个线程永远被阻塞的编程情况,这种情况发生在至少两个线程和两个或更多资源的情况下. 在这里,我编写了一个简单的程序,它将导致死锁情况,然后我们将看到如何对其 ...
- Java死锁示例–如何分析死锁情况
死锁是两个或多个线程永远被阻塞的编程情况,这种情况发生在至少两个线程和两个或更多资源的情况下. 在这里,我编写了一个简单的程序,该程序将导致死锁情况,然后我们将看到如何对其进行分析. Java死锁示例 ...
- mysql死锁的排查方法_MySQL死锁系列-线上死锁问题排查思路
前言 MySQL 死锁异常是我们经常会遇到的线上异常类别,一旦线上业务日间复杂,各种业务操作之间往往会产生锁冲突,有些会导致死锁异常.这种死锁异常一般要在特定时间特定数据和特定业务操作才会复现,并且分 ...
- 查看oracle死锁进程并结束死锁
查看oracle死锁进程并结束死锁 摘自: http://sqcjy111.iteye.com/blog/1183928 查看锁表进程SQL语句1: select sess.sid, sess.ser ...
- 死锁必要条件、解决死锁策略
文章目录 前言 一.死锁的必要条件 二.死锁的处理策略 1.死锁预防 2.死锁避免 3.死锁检测和解除 前言 死锁的规范定义:如果一个进程集合中的每个进程都在等待只能由该进程集合中的其他进程才能引发的 ...
- 预防死锁的方法以及死锁的检测与解除
3.6 预防死锁的方法 一.预防死锁 二.系统安全状态 三.利用银行家算法避免死锁 预防死锁和避免死锁这两种方法,实质上都是通过施加某些限制条件,来预防发生死锁: 两者的区别主要在于: 预防死锁: 施 ...
最新文章
- hutool获取5天前的日期_JavaSE基础:18个Java8处理日期的新花样,肯定没用过!
- Ajax — 新闻列表
- 【javascript动画系列之网页白板】javascript实现的白板(兼容ff,ie,chrome,……)
- jquery 验证email
- 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(Hdu2191)-多重背包
- 是谁断送了网络工程师的前途
- 他山之石 可以攻玉-《海量数据库解决方案》
- win10鼠标灵敏度怎么调_和平精英,灵敏度到底怎么调?小编视频来教你!
- java md5加密源码_javaMD5加密源码
- 照片视频拼接软件哪个好?一半图片一半视频的快速上手教程,朋友圈超吸赞效果
- linux _max_path,[apue] Linux / Windows 系统上只能建立不超过 PATH_MAX / MAX_PATH 长度的路径吗?...
- 2016matlab打开toolbox,MATLAB2016添加工具箱toolbox方法,有截图
- 小林相册批量下载器--相册图片万能批量下载器
- ALGORITHMIC COMPOSITION AS A MODEL OF CREATIVITY
- FFmpeg的Android平台移植—编译篇
- 成功的10000小时定律
- 关于handler子线程通知主线程的几种写法
- 云服务器和网站租用哪个好,自己购买服务器和租用云哪个好?
- 微信小程序用户昵称表情字符储存的方案
- 10004---简析TCP的三次握手与四次分手
热门文章
- STM32步进电机S型加减速算法
- 三个思维结构:黄金圈法则、金字塔结构、PREP结构
- 春雨(程序员减压儿歌)
- java迅雷下载excel,excel官方下载-excel2018 官方版
- 机器自动翻译古文拼音 - 十大宋词 - 念奴娇 赤壁怀古 苏轼
- 环保数采仪在加油站油气回收中的应用
- Problem B: 薪酬计算
- nvcc fatal : No input files specified; use option --help for more information
- PHP中preg_match函数详解
- File和MultipartFile互转