zoukankan      html  css  js  c++  java
  • 操作系统学习笔记:死锁

    死锁现象,无须多言,人人明白。

    一、死锁必要条件

    形成死锁有四个必要条件:

    1、互斥:

    一个进程占用的资源必须被释放才可被其他进程访问。

    2、占有并等待:

    一个进程必须占有至少一个资源,并等待另一个资源,而该资源被其他进程占有。

    3、非抢占

    资源不能被抢占,只能在进程完成任务后自动释放

    4、循环等待

    大家都捧着自己碗看着别人的碗,不占点便宜都不吃饭。


    二、死锁处理方法

    使用协议预防或避免死锁

    允许系统死锁,一旦检测到,加以恢复

    认为死锁不会发生。万一死锁,人工重启。事实上,这正是目前绝大多数操作系统采用的策略,包括UNIX、WINDOWS,问你死未。究其原因,是因为死锁预防、避免、检测,都很消耗资源。


    1、死锁预防

    针对死锁四条件,只要确保至少一个条件不成立即可。

    1)互斥

    非共享资源设为共享资源,比如只读文件。但并非所有非共享资源都能共享。

    2)占有并等待

    两种策略:进程执行前申请所有资源,或者在申请资源时必须释放现已分配资源。

    缺点是资源利用率比较低,或者是可能会有进程发生饥饿。

    3)非抢占

    可抢占。进程处于等待状态时,已分配给它的资源可被抢占。

    4)循环等待

    对资源类型进行完全排序,要求每个进程按递增顺序进行申请。


    2、死锁避免

    申请资源的时候,要求系统综合考虑,包括可用资源、已分配资源及将要申请与释放的资源,以决定当前申请是否满足或等待。

    1)资源分配图算法

    避免资源图出现环。适合每种资源只有一个实例的情况。


    2)银行家算法

    适合每种资源存在多个实例的情况。该算法可用于银行系统,故而得名。

    算法采用几个矩阵(或曰二维数组)来代表可用资源、已分配资源、最大需求、剩余需求。

    当进程申请一组资源时,系统就检查这些矩阵,是否处于安全状态,或者假设可以分配,修改相关矩阵,考察是否安全,以此决定进程等待或可以资源分配。


    3、死锁检测

    如果一个系统既不采用死锁预防或避免算法,那么可能会出现死锁。这时,系统应提供:

    1)死锁检测

    也分为资源是否单个或多个实例两种情况。

    单例可以采用等待图进行考察。等待图是去掉资源环节,将进程相连,出现环形即存在死锁。

    多例采用类似银行家算法。

    何时进行检测取决于死锁发生的频率以及死锁的影响程度。


    2)死锁恢复


    4、死锁恢复

    如果死锁已经存在,那么一种措施是人工处理,另一种是自动恢复。

    自动恢复,打破死锁有两个方法:

    (1)终止一个或多个进程

    终止哪些进程,需要多方面的考虑,比如优先级,进程已运行时间等


    (2)从死锁进程抢占资源

    有三个问题需要考虑:
    谁被抢?
    被抢占后做何安排?
    确保不发生饥饿

    版权声明:本文为博主原屙文章,喜欢你就担走。

  • 相关阅读:
    查看JAVA的class二进制文件的方法
    常见算法整理(二)
    常见算法整理(一)
    JAVA的Spring注入机制事例详解
    Spring的PropertyPlaceholderConfigurer事例应用
    eclipse 使用总结
    Mysql的union
    filter中的DelegatingFilterProxy使用事例
    Spring组件扫描<context:component-scan/>详解
    JAVA 注解的几大作用及使用方法详解
  • 原文地址:https://www.cnblogs.com/leftfist/p/4764247.html
Copyright © 2011-2022 走看看