先来先服务(FCFS)调度算法
系统将按照作业到达的先后次序来进行作业调度,或者说它是优先考虑在系统中等待时间最长的作业,而不管该作业所需执行时间的长短,从后备作业队列中优先选择几个最先进入该队列的作业,将他们调入内存,为他们分配资源和创建进程。然后把它放入就绪队列。当在进程调度中采用FCFS算法时,每次调度是从就绪的进程队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而组赛后,进程调度程序才将处理机分配给其他进程。
在进程调度中采用先来先服务算法的时候,每次调度就从就绪队列中选一个最先进入该队列的进程,为之分配处理机,即谁第一排队谁就先被执行。
优点:
- 有利于长作业(进程)
- 有利于CPU繁忙型的作业(进程)
缺点:
- 不利于短作业(进程)
- 不利于I/O繁忙型的作业(进程)
短作业优先(SJF)的调度算法
SJF算法是以优先级作业的长短来计算优先级的,作业越短,其优先级越高,作业的长短是以作业所要求的运行时间来衡量的。SJF算法可以分别用于作业调度和进程调度。再把短作业优先调度算法用于作业调度时,它将从外存的作业后背队列张选择若干个运行时间最短的作业,优先将他们调入内存运行。
短进程优先调度算法是从就绪队列中选出一个估计运行时间最短的进程,再将处理机分配给它,直到执行完成,而其他进程一般不抢先正在执行的进程。
优点:
- 算法对长作业(进程)不利(长作业(进程)长期不被调度)
- 未考虑进程的紧迫程度
- 由于是估计运行时间而定,而这个时间是由用户所提供的,所以该算法不一定能真正做到短作业优先调度
基于时间片的轮转调度(RR)算法
为了保证能及时响应用户的请求,所以我们采用了基于时间片的轮转调度算法,它的原理通俗来讲就是队列中每一个进程都获得了一定的执行时间,从几ms到几百ms,当一个执行时间结束,计时器会发出一个信号,此时正在执行的进程将被中断,同时此进程将被放在队列的末尾,然后执行这时候的队列的队首进程,因此队列中每一个进程都将获得一定时间执行。
RR算法(时间片轮转,假设时间片 q =1,q=2,q=4)来完成这些作业的调度情况
由于q=1,所以说明一次只能够运行一个
同理q=2,所以说明一次只能够运行两个
同理q=4,所以说明一次只能够运行四个
周转时间=完成时间-到达时间
q=1 |
|||||||||||||||||||
A |
A |
B |
A |
B |
C |
B |
D |
C |
B |
E |
D |
C |
B |
E |
D |
C |
B |
D |
D |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
q=2 |
||||||||||
A |
B |
A |
C |
B |
D |
C |
E |
B |
D |
D |
2 |
4 |
5 |
7 |
9 |
11 |
13 |
15 |
17 |
19 |
20 |
q=4 |
||||||
A |
B |
C |
D |
B |
E |
D |
3 |
7 |
11 |
15 |
17 |
19 |
20 |
进程名 |
A |
B |
C |
D |
E |
平均 |
q=1 |
||||||
到达时间 |
0 |
2 |
4 |
6 |
8 |
|
服务时间 |
3 |
6 |
4 |
5 |
2 |
|
完成时间 |
4 |
18 |
17 |
20 |
15 |
|
周转时间 |
4 |
16 |
13 |
14 |
8 |
10.8 |
带权周转时间 |
1.33 |
2.67 |
3.25 |
2.8 |
3.5 |
2.71 |
q=2 |
||||||
完成时间 |
5 |
17 |
13 |
20 |
15 |
|
周转时间 |
5 |
15 |
9 |
14 |
7 |
10.6 |
带权周转时间 |
1.67 |
2.5 |
2.25 |
2.8 |
3.5 |
2.54 |
q=4 |
||||||
完成时间 |
3 |
17 |
11 |
20 |
19 |
|
周转时间 |
3 |
15 |
7 |
14 |
11 |
10 |
带权周转时间 |
1 |
2.5 |
1.75 |
2.8 |
5.5 |
2.71 |