如何计算FIFO与RR调度的周转时间、响应时间及二者区别
调度算法核心指标定义(FIFO/RR通用)
- 周转时间(TT):进程从到达系统到完全执行完毕的总耗时,统一公式为
完成时间 - 到达时间,你之前了解的 exit-arrival 是完全正确的,burst - waiting 是等价推导公式,二者结果一致。 - 响应时间(RT):进程从到达系统到第一次获得CPU执行的时间差,统一公式为
首次执行开始时间 - 到达时间,和你已知的定义一致。
你给出示例的RR调度计算步骤
你示例中的RR调度时间片为1,三个进程参数统一如下:
| 进程 | 到达时间 | CPU burst时长 |
|---|---|---|
| P1 | 0 | 10 |
| P2 | 0 | 10 |
| P3 | 0 | 10 |
RR调度逻辑为:按顺序循环给每个进程分配1个时间片的CPU使用权,时间片用完后切换到下一个等待进程,直到所有进程执行完毕。
RT计算
三个进程首次获得CPU的时间点分别为:
- P1:时间0~1执行,首次开始时间为0 → RT=0-0=0
- P2:时间1~2执行,首次开始时间为1 → RT=1-0=1
- P3:时间2~3执行,首次开始时间为2 → RT=2-0=2
和你推算的结果完全一致。
TT计算
每个进程需要累计执行满10个时间单位才会结束:
- 前9轮循环调度:每个进程各执行9次,每次1单位,总耗时9*3=27个时间单位,此时三个进程各剩余1个单位的CPU时长未执行
- 第10轮调度:
- 时间27~28:P1执行最后1单位,执行完毕,完成时间为28 → TT=28-0=28
- 时间28~29:P2执行最后1单位,执行完毕,完成时间为29 → TT=29-0=29
- 时间29~30:P3执行最后1单位,执行完毕,完成时间为30 → TT=30-0=30
和书中给出的结果完全匹配。
代码问题修正
- 周转时间函数:你当前写的
(j.finished - j.arrival - j.estimated) + j.estimated等价于j.finished - j.arrival,公式本身是对的,问题大概率出在j.finished的赋值逻辑:RR调度下进程会被多次中断、多次调度,只有当进程剩余CPU时长归0时的那次调度结束时间,才是最终的j.finished,不能把中间某次调度的结束时间赋值给它。 - 响应时间函数:删掉多余的
if j.id == 1硬编码判断即可,j.start必须赋值为进程第一次获得CPU的时间,不能是后续调度的开始时间,直接返回j.start - j.arrival就是正确结果。
内容的提问来源于stack exchange,提问作者Marsh Mellow
相关产品推荐
相关产品推荐

