计算机操作系统 死锁问题

概念

  • 条件是基础,在一定的原因下,产生结果

死锁三胞胎

  • 死锁 僵持,消耗时间,双方都占用了部分资源,不释放
  • 活锁 双方互相谦让,都不占用资源
  • 饥饿 谦让的一方一直等待,无法占有资源,导致饥饿问题

死锁的原因以及必要的条件

应用程序 信号量使用不当 

  • 信号量的初始值设置错误,设为0,两个进程都卡死;
  • 解决办法 :代码开发人员 和 代码测试人员
semaphore s1 = 0;
semaphore s2 = 0;
A(){
    while(1){
        p(s1);
        吃饭;
        v(s2);
    }
}

B(){
    while (1)
    {
        p(s2);
        喝茶;
        v(s2);
    }
    
}

OS内核程序  不可剥夺的软硬件资源

  • 多进程对不可剥夺资源的竞争
  • 进程申请资源的顺序不合理

死锁的必要条件

死锁产生了,一定会产生如下四个条件;但是具有这四个条件不一定会造成死锁

  • 互斥条件          临界资源
  • 不可剥夺条件  进程之间不可以互相剥夺彼此的资源
  • 请求保持条件  占有资源不主动释放
  • 循环等待条件  

预防死锁

破坏死锁的必要条件

  • 互斥条件          临界资源   几乎行不通,比如更改临界资源
  • 不可剥夺条件  进程之间不可以互相剥夺彼此的资源  需要付出代价,也有,比如cpu的切换;但是如果是打印机,会造成彼此文件交叉融合
  • 请求保持条件  占有资源不主动释放   一次性申请完临界资源 
  • 循环等待条件  递增编号,按照顺序申请资源。比如一个资源切成两份,第一份资源叫1,第二份资源叫2,A申请资源1,B在申请的时候看到1号资源已经被占用,就需要等待,A继续申请2号资源,当A使用完资源,释放之后。B开始申请,按照资源的序号进行资源的申请

避免死锁

  • 银行家算法  计算安全序列
  • 规划合理的资源申请顺序,提高资金的流转速度
  • 安全序列 找到 无死锁 可以避免;找不到 必死锁 无法避免
  • 因此将1000万借给万达,收回3000万借给万科或者恒大都可以 
  • 访问顺序 万达 万科 恒大;万达 恒大 万科

例1

例2 

死锁的检测与解除

死锁定理和资源分配图

  • 化简 如果可以化简到最简则无死锁
  • 不能化简到最简模式则检测到死锁,进行下一步解除死锁,1,资源剥夺法;2,报销进程法;3,进程回退法

资源分配图

  • 圆圈代表进程
  • 长方形代表一类资源的容器
  • 长方形中的圆圈,代表该类资源,数量代表资源的数目
  • 边 :从长方形指向圆圈,代表已分配边;圆圈指向长方形,代表申请边,请求边

  • 寻找圆圈进程,依次尝试,判断p1的申请边(从圆圈指出的边)是否都可以得到满足,满足则删除,不满足则寻找下一个圆圈进程

死锁的解除

  • 资源剥夺法 
  • 撤销进程法 进程停止运行
  • 进程回退法 进行由运行80%出现死锁,进程回退到70%等待,继续执行
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值