面试题答案
一键面试死锁预防的四个必要条件
- 互斥条件:资源在某一时刻只能被一个进程所使用。
- 占有并等待条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
- 不可剥夺条件:进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
- 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
通过破坏条件预防死锁
- 破坏互斥条件:某些资源本身不支持共享使用,但对于一些可共享的资源,如打印机,可采用假脱机技术,将打印机的独占访问转换为共享访问。
- 破坏占有并等待条件:进程在运行前一次性申请它所需要的全部资源,在资源未满足前,进程不投入运行。例如银行家算法的变体,让进程预先声明所需资源,系统判断能否满足,能则分配全部资源,进程开始运行。
- 破坏不可剥夺条件:当一个已获得某些资源的进程,请求新资源而得不到满足时,它必须释放已获得的所有资源,以后再重新申请。例如在内存管理中,若一个进程因申请内存不足,可剥夺其已占内存分配给其他进程。
- 破坏循环等待条件:可采用资源分配图算法,将所有资源类型进行线性排序,进程只能按照资源序号递增的顺序申请资源。例如为系统中的各种设备编号,进程申请设备时,只能从低编号设备开始申请。
实际操作系统中应用场景举例
以破坏循环等待条件为例,在Linux操作系统的文件系统中,inode号是一种资源标识。在对文件进行操作时,为防止死锁,进程获取inode资源时按inode号从小到大的顺序申请。例如进程A和进程B,如果都需要对两个文件进行操作,且文件的inode号分别为10和20,那么进程A和进程B都先申请inode号为10的资源,再申请inode号为20的资源,避免了循环等待,从而预防死锁。