第一题:
1)此时可以找出安全序列{p1,p3,p0,p2}或{p3,p1,p0,p2},因此当前状态安全。
以{p3,p1,p0,p2}举例
剩余资源为{7,1,0,5},满足p3需求,将其加入安全序列,并更新后,剩余资源变为{10,2,1,5}
剩余资源为{10,2,1,5},满足p1需求,将其加入安全序列,并更新后,剩余资源变为{11,4,2,5}
剩余资源为{11,4,2,5},满足p0需求,将其加入安全序列,并更新后,剩余资源变为{15,4,2,6}
剩余资源为{15,4,2,6},满足p2需求,将其加入安全序列,并更新后,剩余资源变为{16,5,2,8}
2)允许p1进程申请1个单位的R1,当p1进程申请1个单位的R1后,系统中就只有0个单位的R1,剩余资源就要变为{7,0,0,5},相应Recourse变为{16,4,2,8}此时判断系统处于安全状态,安全序列{p3,p1,p0,p2}
剩余资源为{7,0,0,5},满足p3需求,将其加入安全序列,并更新后,剩余资源变为{10,1,1,5}
剩余资源为{10,1,1,5},满足p1需求,将其加入安全序列,并更新后,剩余资源变为{11,3,2,5}
剩余资源为{11,3,2,5},满足p0需求,将其加入安全序列,并更新后,剩余资源变为{15,3,2,6}
剩余资源为{15,3,2,6},满足p2需求,将其加入安全序列,并更新后,剩余资源变为{16,4,2,8}
满足,则为安全状态
3)允许p3进程申请6个单位的R0,当p3进程申请6个单位的R0后,剩余资源就要变为{1,1,0,5},相应Recourse变为{10,5,2,8}此时系统处于安全状态,有安全序列{p3,p1,p0,p2}
剩余资源为{1,0,0,5},满足p3需求,将其加入安全序列,并更新后,剩余资源变为{4,2,1,5}
剩余资源为{4,2,1,5},满足p1需求,将其加入安全序列,并更新后,剩余资源变为{5,4,2,5}
剩余资源为{5,4,2,5},满足p0需求,将其加入安全序列,并更新后,剩余资源变为{9,4,2,6}
剩余资源为{9,4,2,6},满足p2需求,将其加入安全序列,并更新后,剩余资源变为{10,5,2,8}
4)允许p2进程申请2个单位的R3,当p2进程申请2个单位的R3后,剩余资源就要变为{7,1,0,3},相应Recourse变为{16,5,2,6}此时系统处于安全状态,有安全序列{p3,p1,p0,p2}
剩余资源为{7,1,0,3},满足p3需求,将其加入安全序列,并更新后,剩余资源变为{10,2,1,3}
剩余资源为{10,2,1,3},满足p1需求,将其加入安全序列,并更新后,剩余资源变为{11,4,2,3}
剩余资源为{11,4,2,3},满足p0需求,将其加入安全序列,并更新后,剩余资源变为{15,4,2,4}
剩余资源为{15,4,2,4},满足p2需求,将其加入安全序列,并更新后,剩余资源变为{16,5,2,6}
第二题
设系统进程为p1、p2、p3,系统资源为R1、R2、R3、R4
1)系统资源分配图
这里解释一下:系统资源里面的点表示拥有的单位数。
资源单位数→进程
进程→系统资源
2)不会发生死锁,检测结果如下图所示:
这里解释一下:系统资源里面的点表示拥有的单位数。
资源单位数→进程
进程→系统资源
第一步:将p3进程的边简化地:
这里面就是R1的两个单位指向p2进程,R3的一个单位指向p1进程,R4的一个单位指向p2进程
第二步:
将p3进程释放资源后,再将p2进程可以获得资源,能够运行,简化p2,如下图所示:
第三步:
将p2进程释放资源后,p1进程将获得资源,继续运行,简化得到下图:
得出结论:系统中所有的节点都是孤立的,所有能够完全简化,不会发生死锁
3)如果检测到死锁,一般采用资源剥夺法、撤销进程法和进程回退法使系统从死锁中恢复。
资源剥夺法:挂起某些死锁进程,并抢占它的资源,将这些资源分配给其他死锁进程,但是要防止被挂起的进程长时间得不到资源而饥饿。
撤销进程法:强制撤销部分、甚至全部死锁进程,并剥夺这些进程的资源。
进程回退法:让一个或多个死锁进程回退到足以避免死锁的地步。要求系统要记录进程的历史信息,设置还原点。