zoukankan      html  css  js  c++  java
  • 互斥和死锁

    互斥的概念:当一个进程在临界区访问共享资源时,不允许其它进程访问。

    死锁:两个及以上的进程持有某种资源而又在等待别的进程释放它或它们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。

    产生死锁的原因:系统能够提供的资源个数比请求该资源的进程数少。当系统中两个或多个进程若因申请资源得不到满足而等待时,若各个进程都没有能力进一步执行时,系统就发生死锁。

    产生死锁的必要条件:

    1、互斥条件:多进程共享的资源具有互斥特性,一次只能由一个进程使用,其他进程必须等待直到该资源被释放

    2、不剥夺条件:进程所获得的资源在未使用完之前,不能被其他进程强行剥夺。

    3、占有并等待:当进程在等待别的资源的时候,继续占有它已经获得的资源。

    4、循环等待:存在一种进程的循环链,链中的每一个进程已获得资源的同时被链中的下一个进程所请求。

    为了使系统不发生死锁,必须要破坏产生死锁的4个必要条件之一。下面针对每一个条件分别讨论。

    1、互斥条件,这是难易否定的,因为资源的互斥性是由其自身的性质决定的(如打印机),无法更改。

    2、不剥夺条件,容易否定但很难实现。若资源可被剥夺即允许如下规则:若某进程的资源请求被拒绝则必须释放所有已获得的资源,如果需要再和其他资源一起申请。在系统所有资源中,只有中央处理器被抢占所产生的开销相对较小。

    3、占有并等待,既容易否定又容易实现。可以规定各进程所需的全部资源只能申请一次,并且在没有获得全部资源之前进程不能投入运行。资源分配上可以采用静态的一次性分配方法来保证死锁不可能发生。缺点是被分配的资源使用时间很短,而在长时间内,其他的进程却不能访问他们,使资源利用率很低。

    4、环路条件,若资源分配图中没有环,系统就不会放生死锁。所以在资源分配之前先检查是否会出现环路,只要有可能发生死锁就不预分配。

    还有两种策略:一种是允许发生死锁,死锁发生时有能力修复,这种方法开销大一般不采用。另一种是忽略死锁的发生,一旦发生死锁重启系统。

    死锁的预防:可以分为静态预防和动态避免两种。静态预防采用资源的静态分配方法即一次性全部分配。此方法的缺点是一个作业在运行前可能提不出它将要使用的全部设备;用户作业只有在获得全部资源后才会运行,实际上某些资源可能到运行后期才会用到;某些资源的使用时间很少或者只有在某种情况下才会使用,导致资源被长时间占用并闲置,造成资源的浪费。动态避免则采用资源的动态分配方法。

    死锁的避免,两种避免死锁的方法:

    1、有序资源分配法。

    1)进程必须使用某一类的所有资源时,必须一次申请完。

    2)对各类资源进行编号,在申请资源时,必须按各类的编号上升次序依次申请。

    有点:用户不用事先预说明各类资源的最大需求量,只要在申请时按序申请即可。

    缺点:用户使用资源的顺序和资源编号的顺序的可能并不相同,仍然会造成资源的浪费。

    2、银行家算法。

    要求进入系统的进程必须说明它对各类资源类型的实例的最大需求量。这一数量不能超过系统各类资源的总数。如果系统现存的资源数量不能满足进程的需要,进程就必须等待直到其他进程释放足够的资源为止。当申请者可以在一定时间内无条件的归还它所申请的全部资源时,才能把资源分配给它。

  • 相关阅读:
    echarts .NET类库开源
    公司笔试题
    ASP.NET Word/Excel 权限问题
    ASP.NET XmlSerializer权限问题
    jQuery Ajax 处理 HttpStatus
    C#调用百度静态地图
    .NET和F#周报第35周-.NET 8月重大更新
    F#.NET周报 2018第34周-Ionide下载量100万
    字符串切分
    最近很火的一首小诗 You are in your TIME ZONE
  • 原文地址:https://www.cnblogs.com/mingyao123/p/7420502.html
Copyright © 2011-2022 走看看