MST

星途 面试题库

面试题:并发与同步:资源分配不当引发死锁的常见场景及解决思路

请描述在操作系统中,由于资源分配不当可能导致死锁的几种常见场景,并阐述针对这些场景如何运用死锁预防策略来避免死锁的发生。
38.8万 热度难度
操作系统并发与同步

知识考点

AI 面试

面试题答案

一键面试

常见死锁场景

  1. 资源竞争场景:多个进程竞争同一类资源,如打印机等独占资源。例如,进程A已经占有了打印机,进程B也请求打印机,而进程A又需要另一个资源(如扫描仪),进程B也需要该扫描仪,双方都不释放已占资源,从而导致死锁。
  2. 循环等待场景:进程之间形成一种环形的资源依赖关系。比如,进程P1持有资源R1并请求资源R2,进程P2持有资源R2并请求资源R3,进程P3持有资源R3并请求资源R1,形成一个等待环,导致死锁。
  3. 不可剥夺资源场景:当一个进程获得了某些不可剥夺的资源后,其他进程无法强行获取该资源。例如,一个进程申请到了内存空间,在它使用完毕之前,其他进程不能剥夺该内存空间,若资源分配不当,容易引发死锁。

死锁预防策略

  1. 破坏互斥条件:使资源不再具有互斥性。但对于一些资源(如打印机)本身就需要互斥使用,这种方法适用性有限。不过在某些情况下,可通过共享资源来避免互斥,比如将打印机共享给多个进程同时使用(如采用虚拟打印机技术)。
  2. 破坏占有并等待条件:进程在请求新资源时,不能持有其他资源。可以要求进程一次性申请所有需要的资源,若不能满足则不分配任何资源。例如,一个进程需要打印机和扫描仪,它必须在开始时就同时申请这两个资源,若资源不足则等待,而不是先占有打印机再申请扫描仪。
  3. 破坏不可剥夺条件:允许对资源进行剥夺。当一个进程占有了部分资源,在申请新资源失败时,可剥夺其已占有的资源分配给其他进程。例如,进程A占有了资源R1,申请资源R2失败,系统可以剥夺进程A的资源R1给其他需要的进程,进程A等待资源R1和R2都可用时再重新申请。
  4. 破坏循环等待条件:通过资源分配图算法(如银行家算法)来避免形成循环等待。为进程分配资源时,确保分配后不会形成进程之间的环形等待关系。或者对资源进行排序,规定进程只能按照资源序号递增的顺序申请资源。比如,资源R1序号小于R2,进程必须先申请R1,再申请R2,这样可以避免循环等待。