zoukankan      html  css  js  c++  java
  • 操作系统 死锁

    死锁

    定义:一组进程的每一个进程都在等待仅有该组进程中的其他进程才能引发的事件,那么这组进程是死锁的;

    引起死锁的必要条件:互斥条件,请求和保持,不可抢占,循环等待条件

    引起死锁的原因:竞争不可抢占性资源,竞争可消耗资源,进程推进不当

    死锁不能避免,只能降低死锁的概率

    预防死锁:即破坏形成死锁的四种必要条件之一就能避免死锁。破坏请求和保持,进程运行前请求所有需要的资源,如果不能申请到就阻塞自己,这种方法资源利用率低,进程经常发生饥饿现象; 改进,进程获得所需资源后即开始运行,执行过程中逐步释放资源; 破坏不可抢占条件,当一个进程已经保持了一些不可抢占资源的时候,提出申请资源而不能得到满足的时候,必须释放已经保持的所有资源,以后再重新申请,实现的代价很大,延长周转时间,还增加系统开销; 破坏循环等待条件,对所有资源进行线性排序,资源申请只能按照顺序申请,当要申请当前资源后面的资源的时候,就放弃现在所有的资源。 这些办法都是不可行的开销太大,且效率低下

    避免死锁:为进程分配资源的时候,每当分配完后,检查系统是否处于安全状态。若是就分配成功,否则分配失败。所谓的安全状态就是指,系统在当前状态下,能按照某个顺序,为系统中的每个进程分配所需资源,且最终全部进程都能顺利完成。 不安全状态不一定会进入死锁。常用的算法是银行家算法

    死锁的检测和解除:当进程请求分配资源的时,只要系统有可用资源满足就分配,系统定期检查进程图或者资源图时候存在环路,如果存在就就有死锁的存在,则立即进行系统恢复;解除死锁的方法通常有,抢占资源,从其他进程抢占足够资源给死锁进程;终止进程,终止一个或多个进程来打破循环环路; 终止进程的方法:1.终止所有进程,简单粗暴,但是进程的执行还可能同样出现死锁,并且所有的进程都要从头再来;逐个终止进程,按照某种顺序,逐个终止进程,直至有足够的资源以打破循环等待。采取的策略是“代价最小”。通常考虑以下几点,优先级,还需要多少时间完成,还需要多少资源,进程是交互式还是批处理

     

    有疑惑或者更好的解决方法的朋友,可以联系我,大家一起探讨。qq:1546431565
  • 相关阅读:
    原生js实现outerWidth()方法,用到getComputedStyle
    正则取数字
    关于JavaScript的各种width
    原生JavaScript根据类名获取元素
    通过DriveManager类实现数据库MySQL的连接
    org.apache.http.conn.HttpHostConnectException: Connection to xxx refused.
    C# 序列化原因 (转)
    C# 序列化理解 2(转)
    C# 序列化理解 1(转)
    C# using一般用法 (转)
  • 原文地址:https://www.cnblogs.com/mr-stn/p/9090582.html
Copyright © 2011-2022 走看看