(1)抢占式优先权调度算法相关计算解析
步骤1:梳理调度时间线(核心逻辑:高优先级进程抢占CPU,新进程到达时优先比较优先级)
- **0~1时间片**:仅P1到达(到达时间0),无更高优先级进程,P1运行1个时间片,剩余运行时间=3-1=2。
- **1时间片**:P2到达(到达时间1),其优先级(1)高于P1(2),抢占CPU;P1进入就绪队列,剩余运行时间2。
- **1~3时间片**:P2运行2个时间片(满足其总运行时间2),于3时间片完成;此时就绪队列包含P1(优先级2)、P3(2时间片到达,优先级3),P1优先级更高。
- **3~5时间片**:P1继续运行2个时间片(消耗剩余运行时间2),于5时间片完成;此时就绪队列包含P3(优先级3)、P4(3时间片到达,优先级4),P3优先级更高。
- **5~9时间片**:P3运行4个时间片(满足其总运行时间4),于9时间片完成;仅剩P4在就绪队列。
- **9~10时间片**:P4运行1个时间片(满足其总运行时间1),于10时间片完成。
步骤2:计算各进程关键指标
| 进程 | 完成时间 | 周转时间(完成时间-到达时间) |
|------|----------|--------------------------------|
| P1 | 5 | 5-0=5 |
| P2 | 3 | 3-1=2 |
| P3 | 9 | 9-2=7 |
| P4 | 10 | 10-3=7 |
步骤3:计算平均周转时间
平均周转时间=(P1周转时间+P2周转时间+P3周转时间+P4周转时间)/4 =(5+2+7+7)/4=21/4=5.25。
(2)银行家算法安全状态判断解析
步骤1:计算各进程的剩余需求资源(Need=Max-Allocated)
| 进程 | 剩余需求资源(R1,R2,R3) |
|------|--------------------------|
| P1 | (3-1,2-0,1-1)=(2,2,0) |
| P2 | (2-1,3-2,2-1)=(1,1,1) |
| P3 | (4-2,1-0,3-2)=(2,1,1) |
| P4 | (1-0,2-1,2-1)=(1,1,1) |
步骤2:检查安全序列(核心逻辑:寻找“可用资源≥剩余需求”的进程,释放其资源后更新可用资源,循环直至所有进程完成)
1. 初始可用资源Available=(2,2,0),仅P1的剩余需求(2,2,0)与Available完全匹配,优先执行P1。
2. P1完成后释放已分配资源(1,0,1),Available更新为(2+1,2+0,0+1)=(3,2,1)。
3. 用更新后的Available=(3,2,1)检查:P2的剩余需求(1,1,1)满足,执行P2;P2完成释放(1,2,1),Available更新为(3+1,2+2,1+1)=(4,4,2)。
4. 用Available=(4,4,2)检查:P3的剩余需求(2,1,1)满足,执行P3;P3完成释放(2,0,2),Available更新为(4+2,4+0,2+2)=(6,4,4)。
5. 最后执行P4,其剩余需求(1,1,1)远小于Available=(6,4,4),P4完成。
结论
当前系统处于安全状态,一个安全序列为**P1→P2→P3→P4**(序列不唯一,如P1→P2→P4→P3也符合要求)。