死锁的定义:两个或多个进程无限期地等待永远不会发生的条件的一种系统状态

  结果:每个进程都被永远堵塞

定义2:在两个或多个进程中,每个进程都有某种资源但需要申请另一个进程持有的某种资源,此时每个进程都拥有其部分运行所需的一部分资源但是都不够,所以都堵塞。

 

死锁的起因

  1.资源数目不足,进程对资源的竞争而产生死锁

  2.并发进程的推进顺序不当:

    进程请求资源和释放资源的顺序不当,导致死锁。

 

死锁预防策略:

   死锁的必要条件:

    1.互斥条件:进程互斥使用资源,资源具有独占性

    2.不剥夺条件:进程在访问完资源前不能被其他进程强行波多

    3.部分分配条件:

      进程边运行边申请资源,临时需要临时分配

      区别于 全部分配

    4.环路条件:

    多个进程构成环路:环中每个进程已占用的资源被前一进程申请,而自己所申请的资源又被环中后一进程占用着

 

解决死锁的策略

  预防死锁

    通过设置某些限制条件,破坏死锁四个必要条件中的一个或多个来预防死锁

      破坏互斥条件(难)

      破坏不剥夺条件(代价大)

      破坏部分分配条件(预先静态分配)

      破坏环路条件(有序资源分配)

    优点:容易实现,广泛使用

    缺点:限制严格,资源利用率和吞吐量降低

  避免死锁:

    不事先采取限制去破坏产生死锁的条件,而是在资源分配过程中,用某种方法去评估若分配资源是否会让系统进入死锁状态,若是拒绝分配从而避免死锁

    优点:只需要较弱的限制条件,可以获得较高的资源利用率和系统吞吐量

    缺点:实现比较难

  检测死锁和恢复死锁:

    允许死锁发生,但可以通过检测机制及时检测出死锁状态,并精确明确与死锁有关的进程和资源,然后采取适当措施,将系统中已发生的死锁清除,将进程从死锁状态解脱出来。

    缺点:1。检测方法复杂,难度大

       2.恢复方式靠人工

 

  预先静态分配法:

    目的:破坏部分分配条件

    策略:进程运行前将所需资源一次性全部分配给它。因此进程在运行过程中不再提出资源请求,从而避免出现堵塞或死锁。

    特点:

      1.执行可能被延迟,所需资源不能全部满足时

      2.应用开销增大:运行前估算资源需求。

      3.资源利用率低:资源被占而不用

    改进:资源分配的单位由进程改为程序步

 

  有序资源分配法:

    目的:破坏环路条件,使得环路无法构成

    策略:系统中的每个资源分配有一个唯一序号;

       进程每次申请资源时只能申请序号更大的资源

    资源分配策略:

      分配资源时检测资源序号是否符合递增规定