MST
星途 面试题库

面试题:并发与同步:死锁预防策略在系统设计中的应用

请简要阐述死锁预防的四个必要条件,并说明在系统级设计中如何通过破坏这些条件来预防死锁,举例说明其中一种破坏条件的方法在实际操作系统中的应用场景。
39.0万 热度难度
操作系统并发与同步

知识考点

AI 面试

面试题答案

一键面试

死锁预防的四个必要条件

  1. 互斥条件:资源在某一时刻只能被一个进程所使用。
  2. 占有并等待条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
  3. 不可剥夺条件:进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
  4. 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

通过破坏条件预防死锁

  1. 破坏互斥条件:某些资源本身不支持共享使用,但对于一些可共享的资源,如打印机,可采用假脱机技术,将打印机的独占访问转换为共享访问。
  2. 破坏占有并等待条件:进程在运行前一次性申请它所需要的全部资源,在资源未满足前,进程不投入运行。例如银行家算法的变体,让进程预先声明所需资源,系统判断能否满足,能则分配全部资源,进程开始运行。
  3. 破坏不可剥夺条件:当一个已获得某些资源的进程,请求新资源而得不到满足时,它必须释放已获得的所有资源,以后再重新申请。例如在内存管理中,若一个进程因申请内存不足,可剥夺其已占内存分配给其他进程。
  4. 破坏循环等待条件:可采用资源分配图算法,将所有资源类型进行线性排序,进程只能按照资源序号递增的顺序申请资源。例如为系统中的各种设备编号,进程申请设备时,只能从低编号设备开始申请。

实际操作系统中应用场景举例

以破坏循环等待条件为例,在Linux操作系统的文件系统中,inode号是一种资源标识。在对文件进行操作时,为防止死锁,进程获取inode资源时按inode号从小到大的顺序申请。例如进程A和进程B,如果都需要对两个文件进行操作,且文件的inode号分别为10和20,那么进程A和进程B都先申请inode号为10的资源,再申请inode号为20的资源,避免了循环等待,从而预防死锁。