面试题答案
一键面试资源分配算法设计思路
- 资源分配图算法:
- 维持一个资源分配图,节点表示进程和资源,边表示进程对资源的请求或分配关系。
- 通过算法(如银行家算法)检测图中是否存在环,若存在环则可能产生死锁,此时不进行资源分配。
- 按序分配资源:
- 为所有资源类型分配一个唯一编号。
- 要求每个进程按照编号递增的顺序请求资源。这样可避免形成环,因为若进程按序请求,就不会出现资源请求的循环依赖。
- 资源分配的层次化管理:
- 将资源划分为不同层次,高层次资源依赖低层次资源。
- 进程先获取低层次资源,再获取高层次资源,释放时反之。这有助于减少资源竞争的复杂性,降低死锁风险。
可能出现死锁的场景及预防方法
- 场景:
- 假设有两个进程 P1 和 P2,有资源 R1 和 R2。P1 已经占用了 R1 并请求 R2,P2 已经占用了 R2 并请求 R1,此时两个进程相互等待对方释放资源,形成死锁。
- 预防方法:
- 使用资源分配图算法:若采用银行家算法,在 P1 请求 R2 时,系统检查分配后是否安全,发现不安全则拒绝分配,避免死锁。
- 按序分配资源:若 R1 编号小于 R2,P2 不能先请求 R2 再请求 R1,只能按序先请求 R1,从而避免死锁。