现代操作系统笔记——死锁

《现代操作系统》第六章——死锁(读后笔记) 死锁:多个进程都被阻塞,并且一直处于这种状态。软硬件资源都有可能。 死锁规范定义在 6.2 本章讨论几类死锁,如何出现,如何防止或避免死锁的方法。 6.1 资源 为了更好的讨论将,需要排他性使用的对象称为『资源』。 6.1.1 可抢占资源和不可抢占资源 可抢占资源:可以从拥有它的进程中抢占,如内存(可以页面置换) 不可抢占资源:不引起相关计算失败的情况下,无法将它从其他占有它的进程处抢占过来。如打印机 死锁与不可抢占资源有关,可抢占资源有潜在死锁可以通过分配资源化解,所以重点讨论不可抢占资源。 使用一个资源 阅读详情

**

现代操作系统笔记——死锁

**

笔记以cyc2018大佬的github地址为大纲,以《现代操作系统》为基础进行摘抄总结。

1.相关概念

(1)资源:某类需要排他性使用的对象,可以是硬件设备也可以是一组信息。通俗的来说,资源就是随着时间放入推移,必须能获得、使用以及释放的任何东西。
(2)资源分为两类:可抢占的和不可抢占的。
–可抢占资源:可以从拥有它的进程中抢占而不会产生任何副作用, 例如存储器。
–不可抢占资源:指在不引起相关的计算失败的情况下,无法把它从占有它的进程处抢占过来。例如:蓝光光盘刻录机。
**注意:****总的来说:死锁与不可抢占资源有关。**因为有关可抢占资源的死锁通常可以通过在进程之间重新分配资源而化解。
(3)死锁的规范定义:如果一个进程集合中的每个进程都在等待只能由该进程集合中的其他进程才能引发的事件,那么,该进程集合就是死锁。
(4)资源死锁:大多数情况下,每个进程所等待的事件是释放进程集合中其他进程所占有的资源。此类死锁称之为资源死锁。它不是唯一的一种死锁,却是最常见的一种。之后的介绍也都是围绕着它展开的。

2.(资源)死锁发生的四个必要条件:

(1)互斥:每个资源要么已经分配给了一个进程,要么就是可用的。
(2)占有和等待:已经得到了某个资源的进程可以再请求新的资源。
(3)不可抢占:已经分配给一个进程的资源不能强制性地被抢占,它只能被占有它的进程显式地释放。
(4)环路等待:死锁发生时,系统一定有两个或者两个以上的进程组成一条环路,该环路中的每个进程都在等待下一个进程所占有的资源。

3.死锁建模

可用有向图建立资源分配图。在有向图中有两类节点:用圆形表示进程,用方形表示资源。
从资源节点指向进程节点表示该资源已经被请求、授权并被进程占用。
从进程节点指向资源节点则表示当前节点正在请求该资源,并且该进程已经被阻塞,处于等待该资源的状态。
资源分配图
a)占有一个资源 b)请求一个资源 c)死锁

4.四种处理死锁的策略方法

–忽略该问题。——鸵鸟算法
–死锁检测和死锁恢复
–死锁避免
–死锁预防

(1)鸵鸟算法
把头埋在沙子里,假装根本没发生问题。
因为解决死锁问题的代价很高,因此鸵鸟策略这种不采取任务措施 的方案会获得更高的性能。当发生死锁时不会对用户造成多大影响,或发生死锁的概率很低,可以采用鸵鸟策略。
大多数操作系统,包括 Unix,Linux 和 Windows,处理死锁问题的办法仅仅是忽略它。
(2)死锁检测
系统并不试图阻止死锁的产生,而是当检测到死锁发生时,采取措施进行恢复。
–每种类型一个资源的死锁检测
在这里插入图片描述

在一张资源分配图中,如果图中包含了一个或者一个以上的环,那么死锁就存在。在此环中的任何一个进程就都是死锁进程。如果没有这样的环,系统就没有发生死锁。
图 a 可以抽取出环,如图 b,它满足了环路等待条件,因此会发生死锁。
每种类型一个资源的死锁检测算法是:通过检测有向图是否存在环来实现,依次将每一个节点作为一棵树的根节点,并进行深度优先搜索,对访问过的节点进行标记,如果访问了已经标记的节点,就表示有向图存在环,也就是检测到死锁的发生。
–每种类型多个资源的死锁检测
如果有多种相同的资源存在,就采用一种基于矩阵的算法来检测死锁。
在这里插入图片描述
上图中,有三个进程四个资源,每个数据代表的含义如下:

E 向量:资源总量
A 向量:资源剩余量
C 矩阵:每个进程所拥有的资源数量,每一行都代表一个进程拥有资源的数量
R 矩阵:每个进程请求的资源数量
进程 P1 和 P2 所请求的资源都得不到满足,只有进程 P3 可以,让 P3 执行,之后释放 P3 拥有的资源,此时 A = (2 2 2 0)。P2 可以执行,执行后释放 P2 拥有的资源,A = (4 2 2 1) 。P1 也可以执行。所有进程都可以顺利执行,没有死锁。

算法总结如下:

每个进程最开始时都不被标记,执行过程有可能被标记。当算法结束时,任何没有被标记的进程都是死锁进程。

寻找一个没有标记的进程 Pi,它所请求的资源小于等于 A。
如果找到了这样一个进程,那么将 C 矩阵的第 i 行向量加到 A 中,标记该进程,并转回 1。
如果没有这样一个进程,算法终止。
(3)死锁恢复
–利用抢占恢复
–利用回滚恢复

将进程复位到一个更早的状态,那时它还没取得所需的资源,接着就把这个资源分配给一个死锁进程。如果复位后的进程试图重新获得对该资源的控制,它就必须一直等到该资源可用时为止。
–通过杀死进程恢复
一共有两种方法。
法1:杀掉环中的一个进程。如果这样做行不通的话,就需要继续杀死别的进程直到打破死锁为止。
法2:选一个环外的进程作为牺牲品以释放该进程的资源。应该选择正好持有环中某些进程所需资源的进程,最好杀死可以从头重新运行而且不会带来副作用的进程。如编译进程。
(4)死锁避免
—安全状态在这里插入图片描述
图 a 的第二列 Has 表示已拥有的资源数,第三列 Max 表示总共需要的资源数,Free 表示还有可以使用的资源数。从图 a 开始出发,先让 B 拥有所需的所有资源(图 b),运行结束后释放 B,此时 Free 变为 5(图 c);接着以同样的方式运行 C 和 A,使得所有进程都能成功运行,因此可以称图 a 所示的状态时安全的。

**安全状态定义:**如果没有死锁发生,并且即使所有进程突然请求对资源的最大需求,也仍然存在某种调度次序能够使得每一个进程运行完毕,则称该状态是安全的。
注意:不安全状态并不一定引起死锁。

安全状态的检测与死锁的检测类似,因为安全状态必须要求不能发生死锁。下面的银行家算法与死锁检测算法非常类似,可以结合着做参考对比。
—单个资源的银行家算法
一个小城镇的银行家,他向一群客户分别承诺了一定的贷款额度,算法要做的是判断对请求的满足是否会进入不安全状态,如果是,就拒绝请求;否则予以分配。
在这里插入图片描述
上图 c 为不安全状态,因此算法会拒绝之前的请求,从而避免进入图 c 中的状态。
—多个资源的银行家算法
在这里插入图片描述
上图中有五个进程,四个资源。左边的图表示已经分配的资源,右边的图表示还需要分配的资源。最右边的 E、P 以及 A 分别表示:总资源、已分配资源以及可用资源,注意这三个为向量,而不是具体数值,例如 A=(1020),表示 4 个资源分别还剩下 1/0/2/0。

检查一个状态是否安全的算法如下:

查找右边的矩阵是否存在一行小于等于向量 A。如果不存在这样的行,那么系统将会发生死锁,状态是不安全的。
假若找到这样一行,将该进程标记为终止,并将其已分配资源加到 A 中。
重复以上两步,直到所有进程都标记为终止,则状态时安全的。
如果一个状态不是安全的,需要拒绝进入这个状态。
在实际中,只有极少的系统使用银行家算法来避免死锁,,因为很少有进程能够在运行前就知道其所需资源的最大值,而且进程数往往也是变化的。
使用银行家算法之类的启发式算法:当缓冲区利用率达到70%以上时,网络会实现自动节流,此时网络预计剩余的30%就足够用户完成任务并返回资源。
(5)死锁预防
在程序运行之前破坏死锁产生的四个条件。
1. 破坏互斥条件
例如假脱机打印机技术允许若干个进程同时输出,唯一真正请求物理打 印机的进程是打印机守护进程。
2. 破坏占有和等待条件
一种实现方式是规定所有进程在开始执行前请求所需要的全部资源。
一种实现方式是当一个进程请求资源时,先暂时释放其当前占用的所有资源,然后在尝试一次获得所需的全部资源。
3. 破坏不可抢占条件
4. 破坏环路等待
(1)给资源统一编号,进程只能按编号顺序来请求资源。
(2)保证每一个进程在任何时刻只能占用一个资源,如果要请求另外一个资源,它必须先释放第一个资源

5.其他问题

(1)两阶段加锁
在很多数据库系统中,一个经常发生的操作是请求锁住一些记录,然后更新所有锁住的记录。当同时有多个进程进行的时候就有出现死锁的危险。
这时候最常用的就是两阶段加锁。
在第一阶段,进程试图对所有所需的记录进行加锁,一次锁一个记录。如果第一阶段加锁成功,就开始第二阶段,完成更新然后释放锁。在第一阶段并没有做实际的工作。
如果在第一阶段某个进程需要的记录已经被加锁,那么该进程释放它所用加锁的记录,然后重新开始第一阶段。
(2)活锁与饥饿
活锁和死锁的问题有些相似,那就是他可以停止所有的转发进程,但是二者的技术不同,由于活锁包含了一些实际上并没有锁住的进程,因此可以通过先来先服务的分配策略来避免饥饿。

读书笔记-现代操作系统-6死锁-6.3鸵鸟算法6.4死锁检测和死锁恢复 6.3 鸵鸟算法不考虑死锁问题。 因为实际工作中很可能有其他更为严重的问题。如果死锁的频率不高可不考虑死锁。6.4 死锁检测和死锁恢复6.4.1 每种类型一个资源的死锁检测步骤: 1. 对图中的每一个节点N,将N作为起始点执行下面5个步骤。 2. 将L初始化为空表,并清除所有的有向边标记。 3. 将当前节点添加到L的尾部,并检测该节点是否在L中已出现两次,如果是。那么该图包含了一个环(已列在 阅读详情

相关推荐

2022-2028年全球与中国玄武岩连续纤维(BCF)行业深度分析

本文研究全球与中国市场玄武岩连续纤维(BCF)的发展现状及未来发展趋势,分别从生产和消费的角度分析玄武岩连续纤维(BCF)的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。 主要生产商包括: Kamenny Vek TESPE Mafic Technobasalt Russian Basalt ISOMATEX SA Sudaglass Basalt Fiber INNEGRA LAVAint

Fj69258的博客 615

死锁的四个必要条件以及处理策略

一、什么是死锁 死锁是指两个或两个以上的进程(线程)在运行过程中因争夺资源而造成的一种僵局。 例如,某计算机系统中只有一台打印机和一台输入设备,进程P1正占用输入设备,同时又提出使用打印机的请求,但此时打印机正被进程P2 所占用,而P2在未释放打印机之前,又提出请求使用正被P1占用着的输入设备。这样两个进程相互无休止地等待下去,均无法继续执行,此时两个进程陷入死锁状态。 关于死锁的一些结论: 参与死锁的进程数至少为两个; 参与死锁的所有进程均等待资源; 参与死锁的进程至少有两个已经占有资源; 死锁会浪

wy749929317的博客 3万+

Google AdSense收款前必做:W-8BEN税务认证的3个关键选择与1个提交时机小技巧

本文深入解析Google AdSense收款前必须完成的W-8BEN税务认证,重点介绍账号类型选择、特殊税率勾选、美国活动界定等3个关键决策,并分享提交时机的小技巧,帮助站长高效通过审核,确保广告收入顺利到账。

weixin_30443731的博客 671

理解死锁产生的四个必要条件

死锁的定义 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 死锁产生的四个必要条件 1、互斥条件:线程对已经获取到的资源进行排他性使用,即该资源同时只有一个线程占用,如果此时还有其他线程请求获取该资源,则必须等待,直到占用资源的线程释放。 2、请求并持有条件:一个线程已经持有了至少一个资源,但又请求了新的资源,而新的资源已经被其他线程占用,所以当前

自律使我自由 9014

电池管理系统(BMS)系列(四)—数据采集之温度

属于BMS系列文章,介绍了电池包温度采集相关方式

zxx52113140的博客 5458

Windows下Python安装geopandas全攻略:解决GDAL依赖问题的5个关键步骤

本文详细解析了在Windows系统下安装Python地理空间分析库geopandas时,如何有效解决其核心依赖GDAL的编译难题。文章提供了五个关键步骤,包括理解依赖关系、获取预编译wheel文件、顺序安装及环境验证,旨在帮助用户绕过复杂的C++编译环境,顺利完成geopandas的安装部署。

weixin_28221501的博客 284

【计算机系统】死锁的四个必要条件

转载地址: 死锁的四个必要条件 操作系统中有若干进程并发执行,它们不断申请、使用、释放系统资源,虽然系统的进 程协调、通信机构会对它们进行控制,但也可能出现若干进程都相互等待对方释放资源才能 继续运行,否则就阻塞的情况。此时,若不借助外界因素,谁也不能释放资源,谁也不能解 除阻塞状态。根据这样的情况,操作系统中的死锁被定义为系统中两个或者多个进程无限期 地等待永远不会发生的条件,系统处于停滞状态,这就是死锁。 死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它

Hanrovey Blog 3813

手把手教你用Qt5打造二次元游戏启动器(附鸣潮同款UI源码)

本文详细介绍了如何使用Qt5框架从零开始构建一个功能完整、UI风格贴近《鸣潮》的二次元游戏启动器。教程涵盖无边框窗口、动态背景、自定义控件绘制、多线程资源加载以及下载管理等核心模块的实现,并提供了可运行的源码参考,帮助C++开发者和Qt爱好者深入掌握现代桌面应用开发技术。

weixin_29291863的博客 264

死锁的四个必要条件

死锁产生的四个必要条件

乐嘉工作室 6620

从URDF到Gazebo:一个完整的ROS2机械臂仿真项目实战与避坑指南

本文提供了一个完整的ROS2机械臂仿真项目实战指南,详细讲解了从URDF建模、ROS2 Control配置、MoveIt2集成到Gazebo仿真的全流程。文章重点分享了URDF惯性参数设置、Gazebo插件选择、MoveIt2配置修正等关键步骤的避坑经验,帮助开发者快速搭建可用的六轴机械臂仿真环境,实现从静态模型到物理仿真的跨越。

weixin_29279153的博客 275

Uniapp返回上一页并刷新:亲测有效的 goBack 实现技巧!

这个技巧在实际开发中非常常用,特别适合表单提交后返回列表刷新这类场景。比起依赖onShow或复杂的vuex状态同步,这种方式更直接、好维护,也不容易出 bug。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1841

造成死锁的四条件

死锁的四个条件

m0_64886876的博客 854

【乐企文件生成工程】乐企文件生成支持所有特定要素类型发票

【代码】【乐企文件】乐企文件生成最新更新!!!

九七的博客 850

《现代操作系统》精读与思考笔记 第六章 死锁

  本系列博文是《现代操作系统(英文第三版)》(Modern Operating Systems,简称MOS)的阅读笔记,定位是正文精要部分的摘录理解和课后习题精解,因此不会事无巨细的全面摘抄,仅仅根据个人情况进行记录和推荐。由于是英文版,部分内容会使用英文原文。   课后习题的选择标准:尽量避免单纯的概念考察(如:What is spooling?)或者简单的数值计算,而是能够引起思考加深理解...

weixin_33774883的博客 118

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

现代操作系统笔记——第六章死锁

第六章死锁 可抢占资源:可以从拥有它的进程中抢占而不会产生任何副作用,例如存储器 不可抢占资源:在不引起相关的计算失败的情况下,无法把它从占有它的进程处抢占过来。 死锁与不可抢占资源有关,有关可抢占资源的潜在死锁通常可以通过在进程之间重新分配资源而化解。 使用资源的顺序:请求、使用、释放资源。 死锁定义 死锁的必要条件 死锁建模 检查资源分配图是否有环路来判断死锁。...

qq_36718317的博客 559

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

现代操作系统学习笔记三、死锁

死锁   在计算机系统中,有很多独占性资源,在任一时刻,它们都只能被一个进程使用,如打印机,文件系统表中的表项。于是,操作系统都具有授权一个进程排他的访问某一种资源的能力。   很多应用中,需要一个进程排他性地访问若干资源而不是一种。举例如下,进程A和进程B都想将扫描的文档记录到蓝光光盘上,A请求扫描仪,被授权使用;B请求光盘刻录机,被授权使用;此时A请求光盘刻录机,该请求在B释放光盘刻录机之前会一直被拒绝,然而B此时非但不释放光盘刻录机,而是去请求扫描仪。这种情况下,两个进程都被阻塞,并一直处于这样的状态

菜到不敢run 334

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

《现代操作系统》读书笔记---死锁篇

《现代操作系统》读书笔记—死锁篇标签: 读书笔记 校招 操作系统 面试资源可剥夺资源:是指虽然资源占有者进程需要使用该资源,但另一个进程可以强行把该资源从占有者进程处剥夺来归自己使用。 不可剥夺资源:是指除占有者进程不再需要使用该资源而主动释放资源,其他进程不得在占有者进程使用资源过程中强行剥夺。死锁概述死锁定义如果一个进程集合中的每个进程都在等待只能由该进程集合中的其他进程才能引发的事件,那么,

https://github.com/androidfans 1218

读书笔记-现代操作系统-6死锁-6.5死锁避免

6.5 死锁避免系统判断分配资源是否安全,并且只能在保证安全的条件下分配资源。6.5.1 资源轨迹图 当在t点时系统必须做出正确的判断,应该将一部分程序挂起以避免产生死锁6.5.2 安全状态和不安全状态 安全状态 如果没有死锁状态,而且即使所有进程突然请求对资源的最大需求,也仍然存在某种调度次序能够使得每个进程运行完毕,则该状态是安全的。 如果线程可以通过仔细的调度避免死锁,所有状态时安全的,

千念飞羽的专栏 928

《现代操作系统》阅读笔记——调度和死锁

调度是操作系统的最底层 何时需要调度 创建新的进程时 运行父进程还是子进程 进程退出时 进程阻塞时 I/O中断结束后 调度算法目标 给所有进程公平的CPU份额 能够保证按照规定的策略执行 比如某些安全控制进程必须能够得到执行 保持系统的每个部分都忙碌 两种调度方式 抢占式 一个进程最多运行n ms, 如果还没运行结束,就会被始终中断,调用别的程序 非抢占......

firefly 203

现代操作系统读书笔记--第6章 死锁

在很多应用中,需要一个进程排他性地访问若干种资源而不是一种,容易造成死锁。 死锁也有可能发生在机器之间。 加锁过程也会产生死锁。 所以,软硬件都有可能死锁。 6.1 资源 需要排他性使用的对象称为资源,可以是硬件设备或是一组信息,简单来说,资源就是随着时间推移,必须能够获得、使用以及释放地任何东西。 6.1.1 可抢占资源和不可抢占资源 可抢占资源:可以从拥有它的进程中抢占而不会产生...

铭宇要做后台攻城狮 417

现代操作系统随心笔记(第六章 死锁)学习理解+面试复习

文章目录第六章随心记录问题部分1、什么是死锁 举例解释2、死锁与可抢占资源有关还是不可抢占3、死锁的规范定义4、死锁的四个必要条件5、四种处理死锁策略 第六章随心记录问题部分 1、什么是死锁 举例解释 2、死锁与可抢占资源有关还是不可抢占 3、死锁的规范定义 4、死锁的四个必要条件 5、四种处理死锁策略 ...

Love 6's Private Blog 615

读书笔记-现代操作系统-6死锁-6.6死锁预防

6.6.1 破坏互斥条件如果资源不被一个进程独占,死锁就不会产生。 比如打印机,通过采用假脱机打印机技术可以允许若干个进程同时产生输出。这个模型中唯一正值请求使用物理打印机的进程是打印机的守护进程,由于守护进程绝不会请求别的资源,所以不会因打印机而产生死锁。 从思路的角度说尽量让能请求资源的进程尽可能的少。6.6.2 破坏占有和等待条件只要禁止已持有资源的进程再等待其他资源,可以消除死锁:一种实

千念飞羽的专栏 633

读书笔记-现代操作系统-6死锁-6.1资源6.2 死锁概述

6. 死锁6.1 资源为了尽可能使关于死锁的讨论通用,我们把这类需要排他性使用的对象成为资源。 资源可以是硬件设备或是一组信息。 资源就是随着时间的推移必须能获得、使用以及释放的任何东西6.1.1 可抢占资源和不可抢占资源可抢占资源(preemptable resource)可以从拥有它的进程中抢占而不会产生任何副作用。 比如进程a和b都占用了打印机,进程a占用了打印机,但是在打印机完成之前用

千念飞羽的专栏 691
下一篇: Linux基本概念及操作-实验楼报告总结
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值