时间片轮转调度算法详细判断流程:
例题:
进程 | 到达时间 | 服务时间 |
P1 | 0.0 | 7 |
P2 | 2.0 | 4 |
P3 | 4.0 | 1 |
P4 | 5.0 | 4 |
时间片为1
先放出来最终的结果
↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ |
P1 | P1 | P2 | P1 | P2 | P3 | P1 | P4 | P2 | P1 | P4 | P2 | P1 | P4 | P1 | P4 |
↑ | ↑ | P1 | P2 | P3 | P1 | P4 | P2 | P1 | P4 | P2 | P1 | P4 | P1 | P4 | ↑ |
↑ | ↑ | P1 | P4 | P2 | P1 | P4 | P2 | P1 | P4 | ↑ | ↑ | ↑ | |||
↑ | P2 | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ||||||||
↑ |
因为时间片为1,所以我们每隔1就要中断一下
0时刻,P1到达,第1个时间片执行服务开始,此时队列中的数据如下(箭头向上代表流动方向,上面的代表出队列,下面的代表入队列)
↑ |
P1 |
↑ |
1时刻没有陆续到达的,第1个时间片执行完成,队列中仍然是P1
p1已服务时间: 1 ,p2已服务时间: 0 ,p3已服务时间: 0 ,p4已服务时间: 0
队列如下
↑ |
P1 |
↑ |
再执行1个时间片(第2个时间片执行服务开始),总状态(除最后一列外的左边列代表已执行过的队列,最后一列代表当前队列)
↑ | ↑ |
P1 | P1 |
↑ | ↑ |
2时刻P2到达,第2个时间片执行完成,P2入队列,P1出队列循环到队尾,此时队列如下
p1已服务时间: 2 ,p2已服务时间: 0 ,p3已服务时间: 0 ,p4已服务时间: 0
↑ |
P2 |
P1 |
↑ |
再执行1个时间片(第3个时间片执行服务开始),总状态
↑ | ↑ | ↑ |
P1 | P1 | P2 |
↑ | ↑ | P1 |
↑ |
3时刻没有到达的,第3个时间片执行完成,继续循环出队列然后进队列,P2到队尾,此时状态
p1已服务时间: 2 ,p2已服务时间: 1 ,p3已服务时间: 0 ,p4已服务时间: 0
↑ |
P1 |
P2 |
↑ |
再执行1个时间片(第4个时间片执行服务开始),总状态
↑ | ↑ | ↑ | ↑ |
P1 | P1 | P2 | P1 |
↑ | ↑ | P1 | P2 |
↑ | ↑ |
继续循环,4时刻,P3到达,第4个时间片执行完成,P1到队尾,此时状态
p1已服务时间: 3 ,p2已服务时间: 1 ,p3已服务时间: 0 ,p4已服务时间: 0
↑ |
P2 |
P3 |
P1 |
↑ |
再执行1个时间片(第5个时间片执行服务开始),总状态
↑ | ↑ | ↑ | ↑ | ↑ |
P1 | P1 | P2 | P1 | P2 |
↑ | ↑ | P1 | P2 | P3 |
↑ | ↑ | P1 | ||
↑ |
继续循环,5时刻,P4到达,第5个时间片执行完成,P2到队尾,此时的状态
p1已服务时间: 3 ,p2已服务时间: 2 ,p3已服务时间: 0 ,p4已服务时间: 0
↑ |
P3 |
P1 |
P4 |
P2 |
↑ |
再执行1个时间片(第6个时间片执行服务开始),总状态
↑ | ↑ | ↑ | ↑ | ↑ | ↑ |
P1 | P1 | P2 | P1 | P2 | P3 |
↑ | ↑ | P1 | P2 | P3 | P1 |
↑ | ↑ | P1 | P4 | ||
↑ | P2 | ||||
↑ |
继续循环,6时刻,第6个时间片执行完成,P3完成,此时状态
p1已服务时间: 3 ,p2已服务时间: 2 ,p3已服务时间: 1 ,p4已服务时间: 0
↑ |
P1 |
P4 |
P2 |
↑ |
再执行1个时间片(第7个时间片执行服务开始),总状态
↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ |
P1 | P1 | P2 | P1 | P2 | P3 | P1 |
↑ | ↑ | P1 | P2 | P3 | P1 | P4 |
↑ | ↑ | P1 | P4 | P2 | ||
↑ | P2 | ↑ | ||||
↑ |
继续循环,7时刻,第7个时间片执行完成,P1到队尾,此时状态
p1已服务时间: 4 ,p2已服务时间: 2 ,p3已服务时间: 1 ,p4已服务时间: 0
↑ |
P4 |
P2 |
P1 |
↑ |
再执行1个时间片(第8个时间片执行服务开始),总状态
↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ |
P1 | P1 | P2 | P1 | P2 | P3 | P1 | P4 |
↑ | ↑ | P1 | P2 | P3 | P1 | P4 | P2 |
↑ | ↑ | P1 | P4 | P2 | P1 | ||
↑ | P2 | ↑ | ↑ | ||||
↑ |
继续循环,8时刻,第8个时间片执行完成,P4到队尾,此时状态
p1已服务时间: 4 ,p2已服务时间: 2 ,p3已服务时间: 1 ,p4已服务时间: 1
↑ |
P2 |
P1 |
P4 |
↑ |
再执行1个时间片(第9个时间片执行服务开始),总状态
↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ |
P1 | P1 | P2 | P1 | P2 | P3 | P1 | P4 | P2 |
↑ | ↑ | P1 | P2 | P3 | P1 | P4 | P2 | P1 |
↑ | ↑ | P1 | P4 | P2 | P1 | P4 | ||
↑ | P2 | ↑ | ↑ | ↑ | ||||
↑ |
继续循环,9时刻,第9个时间片执行完成,p2到队尾,此时状态
p1已服务时间: 4 ,p2已服务时间: 3 ,p3已服务时间: 1 ,p4已服务时间: 1
↑ |
P1 |
P4 |
P2 |
↑ |
再执行1个时间片(第10个时间片执行服务开始),总状态
↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ |
P1 | P1 | P2 | P1 | P2 | P3 | P1 | P4 | P2 | P1 |
↑ | ↑ | P1 | P2 | P3 | P1 | P4 | P2 | P1 | P4 |
↑ | ↑ | P1 | P4 | P2 | P1 | P4 | P2 | ||
↑ | P2 | ↑ | ↑ | ↑ | ↑ | ||||
↑ |
继续循环,10时刻,第10个时间片执行完成,P1到队尾,此时状态
p1已服务时间: 5 ,p2已服务时间: 3 ,p3已服务时间: 1 ,p4已服务时间: 1
↑ |
P4 |
P2 |
P1 |
↑ |
再执行1个时间片(第11个时间片执行服务开始),总状态
↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ |
P1 | P1 | P2 | P1 | P2 | P3 | P1 | P4 | P2 | P1 | P4 |
↑ | ↑ | P1 | P2 | P3 | P1 | P4 | P2 | P1 | P4 | P2 |
↑ | ↑ | P1 | P4 | P2 | P1 | P4 | P2 | P1 | ||
↑ | P2 | ↑ | ↑ | ↑ | ↑ | ↑ | ||||
↑ |
继续循环,11时刻,第11个时间片执行完成,P4到队尾,此时状态
p1已服务时间: 5 ,p2已服务时间: 3 ,p3已服务时间: 1 ,p4已服务时间: 2
↑ |
P2 |
P1 |
P4 |
↑ |
再执行1个时间片(第12个时间片执行服务开始),总状态
↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ |
P1 | P1 | P2 | P1 | P2 | P3 | P1 | P4 | P2 | P1 | P4 | P2 |
↑ | ↑ | P1 | P2 | P3 | P1 | P4 | P2 | P1 | P4 | P2 | P1 |
↑ | ↑ | P1 | P4 | P2 | P1 | P4 | P2 | P1 | P4 | ||
↑ | P2 | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ||||
↑ |
继续循环,12时刻,第12个时间片执行完成,P2完成,此时状态
p1已服务时间: 5 ,p2已服务时间: 4 ,p3已服务时间: 1 ,p4已服务时间: 2
↑ |
P1 |
P4 |
↑ |
再执行1个时间片(第13个时间片执行服务开始),总状态
↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ |
P1 | P1 | P2 | P1 | P2 | P3 | P1 | P4 | P2 | P1 | P4 | P2 | P1 |
↑ | ↑ | P1 | P2 | P3 | P1 | P4 | P2 | P1 | P4 | P2 | P1 | P4 |
↑ | ↑ | P1 | P4 | P2 | P1 | P4 | P2 | P1 | P4 | ↑ | ||
↑ | P2 | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | |||||
↑ |
继续循环,13时刻,第13个时间片执行完成,P1到队尾,此时状态
p1已服务时间: 6 ,p2已服务时间: 4 ,p3已服务时间: 1 ,p4已服务时间: 2
↑ |
P4 |
P1 |
↑ |
再执行1个时间片(第14个时间片执行服务开始),总状态
↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ |
P1 | P1 | P2 | P1 | P2 | P3 | P1 | P4 | P2 | P1 | P4 | P2 | P1 | P4 |
↑ | ↑ | P1 | P2 | P3 | P1 | P4 | P2 | P1 | P4 | P2 | P1 | P4 | P1 |
↑ | ↑ | P1 | P4 | P2 | P1 | P4 | P2 | P1 | P4 | ↑ | ↑ | ||
↑ | P2 | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ||||||
↑ |
继续循环,14时刻,第14个时间片执行完成,P4到队尾,此时状态
p1已服务时间: 6 ,p2已服务时间: 4 ,p3已服务时间: 1 ,p4已服务时间: 3
↑ |
P1 |
P4 |
↑ |
再执行1个时间片(第15个时间片执行服务开始),总状态
↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ |
P1 | P1 | P2 | P1 | P2 | P3 | P1 | P4 | P2 | P1 | P4 | P2 | P1 | P4 | P1 |
↑ | ↑ | P1 | P2 | P3 | P1 | P4 | P2 | P1 | P4 | P2 | P1 | P4 | P1 | P4 |
↑ | ↑ | P1 | P4 | P2 | P1 | P4 | P2 | P1 | P4 | ↑ | ↑ | ↑ | ||
↑ | P2 | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | |||||||
↑ |
继续循环,15时刻,第15个时间片执行完成,P1完成,此时状态
p1已服务时间: 7 ,p2已服务时间: 4 ,p3已服务时间: 1 ,p4已服务时间: 3
↑ |
P4 |
↑ |
再执行1个时间片(第16个时间片执行服务开始),总状态
↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ |
P1 | P1 | P2 | P1 | P2 | P3 | P1 | P4 | P2 | P1 | P4 | P2 | P1 | P4 | P1 | P4 |
↑ | ↑ | P1 | P2 | P3 | P1 | P4 | P2 | P1 | P4 | P2 | P1 | P4 | P1 | P4 | ↑ |
↑ | ↑ | P1 | P4 | P2 | P1 | P4 | P2 | P1 | P4 | ↑ | ↑ | ↑ | |||
↑ | P2 | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ||||||||
↑ |
第16个时间片执行完,16时刻,第15个时间片执行完成,P4结束,全部完成,此时状态
p1已服务时间: 7 ,p2已服务时间: 4 ,p3已服务时间: 1 ,p4已服务时间: 4
最终结束完毕,状态如下:
↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ |
P1 | P1 | P2 | P1 | P2 | P3 | P1 | P4 | P2 | P1 | P4 | P2 | P1 | P4 | P1 | P4 |
↑ | ↑ | P1 | P2 | P3 | P1 | P4 | P2 | P1 | P4 | P2 | P1 | P4 | P1 | P4 | ↑ |
↑ | ↑ | P1 | P4 | P2 | P1 | P4 | P2 | P1 | P4 | ↑ | ↑ | ↑ | |||
↑ | P2 | ↑ | ↑ | ↑ | ↑ | ↑ | ↑ | ||||||||
↑ |
所以调度结果为:
P1 | P1 | P2 | P1 | P2 | P3 | P1 | P4 | P2 | P1 | P4 | P2 | P1 | P4 | P1 | P4 |