操作系统概念笔记——第七章:死锁

第七章:死锁

在多程序环境下,多个进程竞争一定数量的资源

某个进程申请一个资源,如果这个进程所申请的资源被其它进程所占有,那么该等待进程有可能再也无法改变其状态,这周情况被称为死锁

这章主要介绍一些方法,用于处理或预防死锁

7.1 系统模型

一个系统拥有一定数量的资源,这些资源可以被分为多种类型
这些资源类型的例子有

  • 内存空间
  • CPU周期
  • 文件
  • IO设备(打印机)

正常情况下,进程只能按如下顺序使用资源

  1. 申请:如果申请不能被立即允许,那么申请进程必须等待
  2. 使用:进程对资源进行操作
  3. 释放:进程释放资源

7.2 死锁特征

1.死锁的必要条件

如果在一个系统中下面4个条件同时满足,会引起死锁

  1. 互斥:至少有一个资源必须处于非共享模式,一次只能由一个进程使用
  2. 占有并等待:一个进程必须占有至少一个资源,并等待另一资源,而该资源为其它进程所占有
  3. 非抢占:资源不能被抢占,资源只能在进程完成任务后自动释放
  4. 循环等待:一组进程{P0,P1,…,Pn},P0等待的资源被P1所占有,P1等待的资源被P2占有,以此类推,Pn等待的资源被P0所占有

只有四个条件同时满足时,才会出现死锁

2.资源分配图

死锁问题可以用系统资源分配图的有向图进行更为精确的描述
资源分配图的构成

  • 节点集合V:P = {P1,P2…Pn}(进程活动集合),R = {R1,R2,…,Rm}(系统所有资源类型的集合)
  • 边集合E:其中Pi->Rj表示资源类型Rj的一个实例已经分配给进程Pi,Pi->Rj被称为申请边,Rj->Pi被称为分配边

资源分配图的实例
在这里插入图片描述
存在死锁的资源分配图

该系统中有两个最小环
P1->R1->P2->R3->P3->R2->P1
P2->R3->P3->R2->P2
在这里插入图片描述
要注意的是环的存在只是构成死锁的一个条件,不是说有环就一定会死锁

死锁必有环,有环不一定死锁

存在环但是没有死锁的资源分配图
在这里插入图片描述

7.3 死锁处理

有三种处理死锁问题的方法

  1. 预防死锁,确保系统不会进入死锁状态
  2. 允许系统进入死锁状态,加入检测机制,并加以恢复
  3. 忽视死锁

接下来几节将会讲到死锁预防和死锁避免等

7.4 死锁预防

由于产生死锁有四个必要条件,因此只要确保一个必要条件不成立,就能预防死锁发生

7.4.1 互斥

对于非共享资源,必须有互斥条件
但是对于一些可共享的数据,可以不要求互斥访问以避免死锁
但是通常不能通过否定互斥条件来预防死锁,因为有的资源就是共享的

7.4.2 占有并等待

为了确保占有并等待不会在系统内出现,必须保证一个进程在申请资源时,不能占有其它资源

有两种协议可以实现这个功能

  1. 每个进程在执行前申请并获得所有资源
  2. 仅允许进程在没有资源时才可申请资源

这两种协议的缺点

  1. 资源利用率较低,许多资源可能已经被分配,但是却长时间没有被使用
  2. 可能会发生饥饿。如果一个进程需要多个常用资源,则可能永久等待,因为它所需的资源中至少有一个已分配给其它进程
7.4.3 非抢占

为了使资源能被抢占,可以使用以下这个协议
如果一个进程占有资源并申请另一个不能被立即分配的资源,那么现已分配的资源都可被抢占

如果一个进程申请资源,首先检查它们是否可用,如果可用,就分配资源,如果不可用,就检查这些资源是否已经分配给其它正在等待的进程,如果是,就从等待进程中抢占这些资源

7.4.4 循环等待

确保循环等待不成立的条件是对所有资源类型进行排序,并且要求每个进程按递增顺序来申请资源

设R={R1,R2,R3…,Rm} 为资源的集合,需要为一个资源分配唯一的整数来比较两个资源的先后顺序
定义函数F

比如:

  • R1对应5,即F(R1) = 5
  • R2对应7,即F(R2) = 7
  • R3对应10,即F(R3) = 10

采用如下的协议预防死锁,每个进程只按递增顺序申请资源,即一个进程开始时可以申请任意资源类型Ri的实例。之后,当且仅当F(Rj) > F(Ri)时,该进程才能申请Rj
换句话说,如果一个进程需要申请一个名为Rj的资源时,必须释放所有的资源Ri(F(Ri) > F(Rj))
根据上述协议,循环等待就无法实现了

7.5 死锁避免

虽然7.4节介绍了很多预防死锁的方法,但是上面介绍的这四种方法可能产生的副作用更大
老师上课说,举个例子就像为了预防灰指甲,而选择截肢
上面这种预防死锁的办法会导致低设备使用率和低系统吞吐率

避免死锁的另一种方法是,根据进程申请资源后的情况来决定是否应该分配这些资源
根据这种方法,需要每个进程给出它所需要的各种资源的最大需求,之后构造一个算法,以确保系统绝不会进入死锁状态

这种算法定义了死锁避免方法,死锁避免算法动态地检测资源分配状态以确保循环等待条件不可能成立。

7.5.1 安全状态

如果能让系统按某个顺序为进程分配资源,并保证不会死锁,那就说明这个系统状态是安全的

安全状态不是死锁状态,死锁状态是不安全状态
在这里插入图片描述
对于进程<P1,P2,…,Pn>,如果对于每个Pi,Pi可以申请的资源数小于当前可用资源加上所有进程Pj(其中j<i) 所占有的资源,则这一顺序为安全序列。在这个时候,如果Pi所需要的资源不能被立刻使用,那么Pi可等待所有Pj释放其资源

7.5.2 资源分配图算法

在资源分配图中,除了申请边和分配边外,引入一条新类型的边,称为需求边
需求边Pi->Rj表示进程Pi可能在将来某个时候申请Rj
如果用虚线表示Pi->Rj,则该边变为了申请边

7.5.3 银行家算法

对于每种资源类型有多个实例的资源分配系统,资源分配图算法就不适用了。需要使用“银行家算法”

当新进程进入系统时,必须说明它所需要的每种资源的实例的最大数量,这一数量不能超过系统资源的总和,当用户申请资源时,系统必须确定这些资源的分配是否会使系统仍处于安全状态。如果是,就分配资源,如果不是,该进程必须等待其它进程释放足够资源才可

银行家算法中的变量和实例

  • n:系统进程的个数
  • m:共有m中资源
  • Available[j] = k:资源Rj有k个实例
  • MAX[n][m]:MAX[i][j] = k,进程Pi最多可申请k个Rj实例
  • Allocation[n][m]:表示进程已分配的资源实例
  • Need[n][m]:Need = Max - Allocation,表示还需要多少资源
  • Allocation i表示分配给进程Pi的资源
  • Need i表示进程Pi为完成其任务还需要的资源

1.安全性算法

该算法用于检测当前系统是否处于安全状态
在这里插入图片描述
2.资源请求算法
在这里插入图片描述

7.6 死锁检测

这一部分内容和上一部分内容有点难,等到期末的时候再来整理

7.7 死锁恢复

打破死锁有两个方法,一种方法是简单地终止一个或多个进程以打破循环等待。另一个方法是从一个或多个死锁进程中抢占一个或多个资源

7.7.1 进程终止

有两种方法通过终止进程以停止死锁

  1. 一次终止所有死锁进程
  2. 一次只终止一个进程,知道取消死循环为止
7.7.2 资源抢占

使用资源抢占以取消死锁,逐步从进程中抢占资源以供其它资源使用,直到死锁被打破为止

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 《操作系统概念:第九版》是由Abraham Silberschatz、Peter B. Galvin和Greg Gagne合著的一本计算机科学领域的经典教材。本书系统地介绍了操作系统的基本概念、原理和设计方法,深入讨论了多道程序、处理器调度、内存管理、文件系统等重要主题。 该书可以分为七个主要部分。第一部分介绍了操作系统的概述,包括操作系统的作用、功能和发展历史。第二部分探讨了进程管理,包括进程的创建、调度、同步和通信。第三部分涵盖了内存管理,包括分区管理、页面置换算法和虚拟内存等内容。 第四部分介绍了文件系统,包括文件和目录的组织、磁盘调度以及文件系统的实现。第五部分讨论了输入/输出系统,包括驱动程序、设备管理和磁盘存储等。第六部分介绍了分布式系统和并行操作系统,包括网络和分布式文件系统。最后一部分讨论了安全性和保护机制,包括访问控制和安全策略等。 该书采用了清晰的语言和生动的例子,结合了最新的研究成果和实际案例,使读者更容易理解和应用操作系统概念。此外,书中还包含了大量的习题和实践项目,帮助读者加深理解,并将所学知识应用到实际问题中。 《操作系统概念:第九版》是一本全面且权威的操作系统教材。它不仅适用于计算机科学专业的学生,也适用于从业人员和对操作系统感兴趣的读者。无论是在理论研究还是在实践应用方面,这本教材都是值得一读的重要参考书。 ### 回答2: 《操作系统概念(abraham silberschatz pdf)第九版》是一本面向计算机科学专业学生和专业人士的经典教材。本书对操作系统概念和原理进行了详细而全面的介绍。 首先,本书从操作系统的角度定义了计算机系统,并解释了它的组成部分。书中详细讨论了进程管理、内存管理、文件系统、输入输出管理等关键概念,并提供了相应的算法和实例。此外,本书还介绍了多处理器系统、并行计算和分布式系统等现代操作系统的新兴技术。 此外,本书还对操作系统的设计与实现进行了探讨。作者详细解释了操作系统的内核设计和模块化,提供了实践项目和实验手册,帮助读者深入理解操作系统的实际运作。并且,本书还对操作系统的安全性和保护机制进行了介绍,让读者了解如何保护计算机系统免受恶意软件和非法访问的侵害。 此外,本书在自愿顺序和并发性方面提供了许多实例和案例研究。它详细介绍了进程同步、进程互斥、死锁的原因和解决方法,让读者有系统地了解并理解操作系统的关键概念。 综上所述,《操作系统概念(abraham silberschatz pdf)第九版》是一本经典的操作系统教材,对操作系统概念和原理进行了全面而深入的介绍。无论是对于计算机科学专业学生还是专业人士,都是一本值得阅读和参考的书籍。 ### 回答3: 《操作系统概念(第九版)》是Abraham Silberschatz等人合著的经典教材。本书详细介绍了操作系统概念、原理、设计和实现等方面的知识。 首先,操作系统是计算机系统中最基础的软件之一,它负责管理计算机的硬件和软件资源,为用户和应用程序提供一个友好且高效的运行环境。本书从操作系统的基本概念入手,探讨了各种操作系统的常见功能和特性,例如进程管理、内存管理、文件系统等。 其次,在介绍操作系统的各个组成部分时,本书还深入讨论了各种操作系统的设计和实现原理,包括进程调度算法、内存管理策略、磁盘调度算法等等。读者可以通过学习这些原理,了解操作系统是如何高效地管理计算机资源的。 此外,本书还涵盖了一些当前热门的操作系统相关技术和概念,如多核处理器、虚拟化技术、云计算等。这些内容让读者能够紧跟操作系统领域的最新发展,并理解这些技术对操作系统设计和实现带来的挑战与机遇。 《操作系统概念(第九版)》以其全面、系统的内容、清晰易懂的语言和详细的例子,深受师生们的喜爱。无论是作为本科生的教材还是研究生的参考书,它都是一本不可或缺的操作系统经典教材。通过学习这本书,读者可以全面掌握操作系统的基本概念和原理,提升计算机科学领域的专业技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值