死锁问题入门知识
今天我们一起来学习死锁,一起沐黎文伟老师的春风(我的操作系统老师叫做黎文伟),呵呵呵。
什么是死锁:
是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。
产生死锁的原因主要是:
因为系统资源不足。
进程运行推进的顺序不合适。
资源分配不当等。
如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则
就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。
死锁出现的必要条件:
互斥使用(资源独占)
一个资源每次只能给一个进程使用
不可强占(不可剥夺)
资源申请者不能强行的从资源占有者手中夺取资源,资源只能由占有者自愿释放
请求和保持(部分分配,占有申请)
一个进程在申请新的资源的同时保持对原有资源的占有(只有这样才是动态申请,动态分配)
循环等待
存在一个进程等待队列
{P1 , P2 , … , Pn},
其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路
资源分配图:
资源分配图用来精确描述系统资源分配场景(死锁)
资源分配图标识:
1、节点:进程节点P(每一个进程有一个节点),资源节点R(每一类有一个节点)
2、边:请求边(从进程节点指向资源节点),分配边()
画法:
Process:
Resource Type with 4 instances:
资源分配图的观察:
1、无环无死锁
2、有环可能死锁
a) 所有资源都是单资源实例
b) 多类资源,有一个资源有一个实例,其他资源有多个实例;环所涉及的资源只有一个实例
c) 无环一定无死锁
死锁实例:
活锁
如果有太多进程或操作在短时间内大量请求同一资源出现了活锁;
特点:
好像停滞了,但可以解开;
数据库例子:如果食物T1封锁了数据R,事务T2又请求封锁R,于是T2等待。T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然在等待。然后T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求,……,T2有可能永远等待,这就是活锁的情形
网络的例子:中断活锁;
网卡速率变化导致数据包处理方式的变化
中断->轮询
三种处理死锁的方式:
1、死锁的预防和避免
预防:防止死锁出现;
避免:评估死锁是否会发生进行评估,如果有可能则不执行;
2、死锁的检查和恢复
3、鸵鸟策略:不管它,忽略
鸵鸟策略看似可笑,但是应用还是比较广泛的:
数学家观点(理论型,完美主义者):
希望世界完美无缺
有问题就必须处理,无论任何代价
工程师观点(实践):
能够工作就可以
有问题(死锁):频率、危害、处理代价进行比较
死锁频率<其他故障频率
处理代价>大于处理代价
死锁避免和预防方法:
1、消除互斥——非共享资源必须互斥访问,可共享资源无需互斥访问。
(什么是共享?现代操作系统中,几乎所有的资源都是共享的,但这样的共享只是宏观意义上的,微观上,共享分为分时共享如CPU、打印机,和同时共享如只读文件)
2、消除持有并等待——进程请求资源时不持有任何资源
执行前请求所有资源(不一定可行,因为一个进程执行前,不一定知道自己需要多少资源)
在请求资源前先释放所有资源
这个方式的缺点:有可能一个进程申请了资源但很久才用,有可能一个进程需要多个资源,不是所有资源都不是一次性能申请到的;
3、消除非抢占——请求的资源不可得时已持有的资源可被抢占(隐式释放)
这样的方式只能用于一些特殊情况:只能用于状态可以保存和恢复的资源
4、循环等待条件的消除
以上就是今天给大家补的知识~~希望以后继续跟大家共同进步~~~
<!--EndFragment-->
相关推荐
读者具有数据库方面的基础知识有助于更好地理解《SQL Server 2008编程入门经典(第3版)》的内容。 作者简介 作者:(美国)韦拉(Rovert Vieria) 译者:孙皓 马煜 合著者:杨大川 韦拉(Robert Vieria),是畅销书作者...
读者具有数据库方面的基础知识有助于更好地理解《SQL Server 2008编程入门经典(第3版)》的内容。 作者简介 作者:(美国)韦拉(Rovert Vieria) 译者:孙皓 马煜 合著者:杨大川 韦拉(Robert Vieria),是畅销书作者...
此外本书还描述了多线程(或者多进程)环境下,如何处理死锁的问题。 本书使用的是Berkeley DB12c的第一版。library版本是12.1.6.0 本书的目标是实现一个在支持事务的应用中的软件引擎的编写。本书假设你已经了解...
动力节点的Java课程适合绝对零基础的观看,教程中讲解了Java开发环境搭建、Java的基础语法、...每一个知识点都讲解的非常细腻,由浅入深。适合非计算机专业,想转行做Java开发的朋友,或者想让Java基础更扎实的小伙伴。
14.3.2 死锁 14.4 优先级 14.4.1 线程组 14.5 回顾runnable 14.5.1 过多的线程 14.6 总结 14.7 练习 第15章 网络编程 15.1 机器的标识 15.1.1 服务器和客户机 15.1.2 端口:机器内独一无二的场所 15.2 套接字 ...
日本经典多线程入门书,原版长销11年! 1.图文并茂 通俗易懂 日本资-深技术作家、《程序员的数学》作者结城浩执笔,264张图表(UML类图、时序图、Timethreads图等)穿插文中,通过类比手法和浅显的语言,逐一讲解与...
14.3.2 死锁 14.4 优先级 14.4.1 线程组 14.5 回顾runnable 14.5.1 过多的线程 14.6 总结 14.7 练习 第15章 网络编程 15.1 机器的标识 15.1.1 服务器和客户机 15.1.2 端口:机器内独一无二的场所 15.2 套接字 ...
本课程将操作系统分为五个部分,分别是操作系统概述、进程...● 超易懂:考虑到不同人群接受能力不同,所有我们有基础入门知识,有高阶知识,搭建可以根据自己的情况进行学习,并且每个技术点以浅显易懂的方式进行深入
在SQL Server 2005中解决死锁 在 SQL Server 2005 中查询表结构及索引 sql server 2005中的DDL触发器 在 SQL Server 2005 中使用表值函数来实现空间数据库 SQL Server 2005的30个最重要特点 同时安装sql2000和sql...
第1章 RDBMS基础:SQLServer数据库的构成 ...14.5 处理死锁(1205错误) …… 第15章 触发器 第16章 初识XML 第17章 Reporting Services 第18章 使用Integration Services进行集成 第19章 扮演管理员的角色 附录
入门学习Linux常用必会60个命令实例详解 Linux必学的60个命令 Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。所以,在Linux系统上工作离不...
关键词: ACID , AUTOCOMMIT ,事务隔离级别死锁,死锁,分布分布式事务 :hammer:其他关系型数据库Nosql数据库整理主流Nosql数据库知识点。 :books: :hundred_points: :high_voltage: -关键词:内存淘汰,事件,...
12.3.4小心线程死锁 12.4认识定时器 12.4.1为什么需要定时器 12.4.2如何使用定时器 12.5小结 第13章反射技术 13.1为什么要学习反射 13.1.1引入配置文件 13.1.2配置文件遇到的问题 13.2认识Class类 13.2.1...
11.5 处理死锁(也称作“A 1205”) 11.6 小结 第12章 触发器 12.1 触发器的含义 12.2 为数据完整性规则使用触发器 12.3 触发器的其他常见用途 12.4 其他触发器问题 12.5 INSTEAD OF触发器 ...
11.5 处理死锁(也称作“A 1205”) 11.6 小结 第12章 触发器 12.1 触发器的含义 12.2 为数据完整性规则使用触发器 12.3 触发器的其他常见用途 12.4 其他触发器问题 12.5 INSTEAD OF触发器 ...
11.5 处理死锁(也称作“A 1205”) 11.6 小结 第12章 触发器 12.1 触发器的含义 12.2 为数据完整性规则使用触发器 12.3 触发器的其他常见用途 12.4 其他触发器问题 12.5 INSTEAD OF触发器 ...
11.5 处理死锁(也称作“A 1205”) 11.6 小结 第12章 触发器 12.1 触发器的含义 12.2 为数据完整性规则使用触发器 12.3 触发器的其他常见用途 12.4 其他触发器问题 12.5 INSTEAD OF触发器 ...
11.5 处理死锁(也称作“A 1205”) 11.6 小结 第12章 触发器 12.1 触发器的含义 12.2 为数据完整性规则使用触发器 12.3 触发器的其他常见用途 12.4 其他触发器问题 12.5 INSTEAD OF触发器 ...
11.5 处理死锁(也称作“A 1205”) 11.6 小结 第12章 触发器 12.1 触发器的含义 12.2 为数据完整性规则使用触发器 12.3 触发器的其他常见用途 12.4 其他触发器问题 12.5 INSTEAD OF触发器 ...