死锁

1. 什么是死锁

1.1. 什么是资源

计算机排他性的访问并使用的对象,叫做资源.资源按照其调度方案可以分为可抢占资源不可抢占资源两种.

  1. 可抢占资源:从占有它的进程中抢占不会引起错误的资源,例如存储器等.

  2. 不可抢占资源:不引起进程故障的情况下,无法从占有它的进程中抢占的资源,例如打印机等.

死锁和不可抢占资源有关.

1.2. 死锁

死锁是一种场景.

假设有A和B两个进程.A进程持有资源R,请求资源Q.B进程持有资源Q,请求资源R.而且A和B在未完成各自作业之前,不会释放已持有的资源.

当R和Q资源都是不可抢占资源时,就发生了死锁.

因为操作系统调度程序在通常情况下不会对已分配的不可抢占资源进行重分配,而是等待占有它的进程显示释放.

2. 形成条件

  1. 互斥条件: 资源只有两种状态.要么分配给了进程,要么就是可用的.

  2. 占有和等待条件: 已经得到某个资源的进程可以再次请求新的资源.

  3. 不可抢占条件: 已经分配的资源不能被抢占,只能由占有它的进程显式释放.

  4. 环路等待条件: 死锁发生时,系统中一定由两个或两个以上的进程组成一条环路,该环路中,每个进程都在等待下一个进程所占有的资源.

3. 避免

没有一种算法可以完全避免所有环境中可能发生的死锁.只能通过运行时场景来选择合理的方式避免.

比如,数据库为了避免死锁,采用的两阶段加锁,不适用于进程作业不确定的场景.

再如,存储空间大的系统可以采用守护进程加假脱机打印目录来解决打印机死锁,但不适用于小存储空间系统.

3.1. 银行家算法

银行家算法是指,银行家将定量的资金贷给若干个企业家,企业家需求资金总量已知,但是资金不会全部立即到账,只能由企业家分阶段申请.企业家在获得全部所需资金后归还全部资金.通过银行家算法,银行家可以完美调度资金,满足所有企业家的需求.

但是,银行家算法只能作为参考,而没有通用性.因为,讲资金换成资源,银行家换成操作系统,几乎所有的进程在运行前是不知道自己所需某种资源的数量.

在一些大型批处理作业中,可以参考银行家算法来避免死锁.

以下是多种资源的银行家算法(单个资源的银行家算法也适配于此):

假设:

  1. 有m种资源.有n个进程.
  2. 各个资源总数组成的向量为E.


    E.gif
    E.gif
  3. 各个资源剩余量组成的向量为A.


    A.gif
    A.gif
  4. C为当前分配资源.


    C.gif
    C.gif
  5. R为请求资源.


    R.gif
    R.gif

存在恒等式:


sum.gif
sum.gif

算法描述如下:

  1. 检查R中是否有一行,满足各项都小于A.
  2. 如果有,则分配.进程被标记.之后释放所有资源,加到A中.
  3. 重复以上步骤,直到所有进程被标记.如果存在无法标记的进程,则当前分配方案存在死锁.

3.2. 破坏死锁形成条件

这种方法是破坏思索形成四个条件中的任意一个,从而避免思索.每个条件的背后都有隐含的条件,并不适用于所有场景,只能因地制宜,选择最合适的方法.

3.2.1. 破坏互斥条件

方法: 假脱机,由守护进程专门负责资源操作.

问题: 以假脱机打印为例,如果假脱机目录在接收到文件时就开始打印.这样一来,存储空间的需求就是未知的.如果文件就绪再打印,那么脱机打印目录在空间有限的前提下,本身就会发生死锁.因为可能所有的进程在写入一半时,空间满了.

3.2.2. 破坏占有和等待条件

方法: 在进程开始前请求所有资源.

问题: 一般情况下,进程是不知道自己将来的资源需求的.

3.2.3. 破坏不可抢占条件

方法: 抢占.

问题: 在一般进程间会发生错误.

3.2.4. 破坏环路等待条件

方法1: 每个进程只能拥有一个资源.

问题: 如果有需要两个资源的进程,则这个进程无法运行.

方法2: 给每个资源编号,然后进程按照标号增(或减)序,申请资源.

问题: 每个进程申请资源的刚性顺序貌似是随机的.所以,宏观来看,不存在一种可以运行所有进程的资源排序.

4. 综上所述

想要在全部维度完全避免死锁,为此寻找一个一劳永逸的方法,当前是不可能的.所以要在有死锁发生潜在可能的环境中,根据需求,合理的选择避免死锁的方法.其中可能包含银行家算法,也可以打破死锁发生的条件.或者使用特殊的资源调度算法.

来自博客:http://newlooc.com

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,013评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,205评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,370评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,168评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,153评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,954评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,271评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,916评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,382评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,877评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,989评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,624评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,209评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,199评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,418评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,401评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,700评论 2 345

推荐阅读更多精彩内容

  • 1、竞态条件: 定义:竞态条件指的是一种特殊的情况,在这种情况下各个执行单元以一种没有逻辑的顺序执行动作,从而导致...
    Hughman阅读 1,283评论 0 7
  • 死锁的定义 进程之间互相等待资源又都不能向前推进的情况,即造成进程相互死等的局面。即每个进程“抓住”一些为其他进程...
    曲谐_阅读 791评论 0 1
  • 一、死锁的基本概念 1.1 死锁的定义 一组进程中,每个进程都无限等待被该组进程中另一进程所占用的资源,因而永远无...
    yjaal阅读 1,464评论 0 6
  • 文/小宋老师 01 昨天晚上,我拖着疲惫的身躯乘坐地铁回家,回家的路上感觉心乱如麻。因为心头积压了很多的事情等待着...
    小宋老师的幸福课阅读 1,853评论 15 26
  • 《时代》封面上的第一个中国人,西方列强都看好他能武力统一中国“一文发布以后,有部分读者以为北洋军阀是被歪曲了,大多...
    那天早上阅读 248评论 0 1