操作系统中的死锁

1 死锁的基本概念

死锁的定义:一组进程中,每个进程都无限等待被该组进程中另一进程所占有的资源,因而永远无法得到的资源,这种现象称为进程死锁,这一组进程就称为死锁进程。如果死锁发生,会浪费大量系统资源,甚至导致系统崩溃

从死锁的定义中可以得到几个推论:参与死锁的所有进程都在等待资源;参与死锁的进程是当前系统中所有进程的子集。

资源数量有限、锁和信号量错误使用都可能导致死锁,锁和信号量的使用可能是开发人员编程导致的,下面着重介绍一下有限资源导致的死锁问题。在操作系统中资源使用的一般模式是:进程提出申请,操作系统进行相应的分配,如果进程所需要的资源不能满足的话,这个进程就进入阻塞或者等待状态,如果可以满足的话进程就直接使用资源,当进程使用完毕之后就释放资源。由于资源的使用方式就是申请-分配-使用-释放,因此有些进程得不到资源就会处理阻塞等待状态,资源有限的话就有可能出现死锁。

从死锁的角度可以把资源分为两类:一类是可重用资源,即可被多个进程多次使用。可重用资源包括处理器、I/O部件、内存、文件、数据库、信号量等,可重用资源又可以进一步划分为可抢占资源与不可抢占资源,例如cpu就是可抢占资源,进程在cpu上运行的时候允许比它优先级更高的进程抢占cpu,还有一些资源例如打印机是不可抢占的;另一类资源是可消耗资源,即只可使用一次、可创建和销毁的资源,包括信号、中断、消息等。下面讨论的死锁主要针对于可重用资源。

活锁和饥饿
活锁的情况是先对资源进行加锁,获得另外一个资源的锁时需要轮询,情况就是每个进程可以上cpu执行,cpu时间片执行完了之后又下cpu,进程既没有进展也不产生阻塞,这种现象就是活锁,而死锁是进程进入等待状态无法获取cpu的执行权。饥饿往往是由于资源分配的策略所决定等待,某个进程一直得不到cpu的使用权,就会造成饥饿。

产生死锁的必要条件
(1)互斥使用(资源独占):一个资源每次只能给一个进程使用
(2)占有且等待(请求和保持,部分分配):进程在申请新的资源的同时保持对原有资源的占有
(3)不可抢占(不可剥夺):资源申请者不能强行的从资源占有者手中夺取资源,资源只能由占有者自愿释放
(4)循环等待:存在一个进程等待队列 {P1 , P2 , … , Pn},其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路。
当死锁产生的时候一定会有这四个条件,有一个条件不成立都不会造成死锁。

2 资源分配图(RAG)

用有向图描述系统资源和进程的状态,从图的角度为解决死锁提供理论和依据。定义一个二元组G=(V,E)有两个集合组成。其中V是结点的集合,分为P(进程),R(资源)两部分,P = {P1, P2, … , Pn},R = {R1, R2, … , Rm}。E是有向边的集合,其元素为有序二元组,可以是进程节点指向资源节点的有向边后者资源节点指向进程节点的有序边。

资源分配图图画法说明
系统由若干类资源构成,一类资源称为一个资源类;每个资源类中包含若干个同种资源,称为资源实例。使用用方框表示资源类;用方框中的黑圆点表示资源实例;用圆圈中加进程名表示进程。分配边是资源实例指向的进程有向边,而申请边是进程指向资源实例的有向边。

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值