操作系统-先来先服务FCFS和短作业优先SJF进程调度算法-课后小结
FCFS调度算法
先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。
当在作业调度中采用该算法时,系统将按照作业到达的先后次序来进行调度,若有多个作业等待,则优先考虑在系统中等待时间最长的作业,而不管改作业执行所需的时间,然后从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。
在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。
SJF调度算法:
短作业优先调度算法SJF,是指对短作业优先调度的算法。短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。作业越短,其优先级越高。作业的长短是以作业所要求的运行时间来衡量的。 SJF调度算法的缺点: 1)必须预知作业的运行时间。难以估计,若是太低,作业可能还未完成就被终止,所以一般会偏长。
2)该算法对长作业不利,如果有一长作业(进程)进入系统的后备队列(就绪队列),由于调度程序总是优先调度那些(即使是后进来的)短作业(进程),将导致长作业(进程)长期不被调度。
3)在使用该算法的时候,人机无法实现交互。
4)该算法完全未考虑作业的紧迫程度,因而不能保证紧迫性作业(进程)会被及时处理。
进程名 | A | B | C | D | E | 平均值 | ||
---|---|---|---|---|---|---|---|---|
到达时间 | 0 | 1 | 2 | 3 | 4 | |||
服务时间 | 4 | 3 | 5 | 2 | 4 | |||
FCFS | 开始执行时间 | 0 | 4 | 7 | 12 | 14 | ||
完成时间 | 4 | 7 | 12 | 14 | 18 | |||
周转时间 | 4 | 6 | 10 | 11 | 14 | 9 | ||
带权周转时间 | 1 | 2 | 2 | 5.5 | 3.5 | 2.8 | ||
SJF | 开始执行时间 | 0 | 6 | 13 | 4 | 9 | ||
完成时间 | 4 | 9 | 18 | 6 | 13 | |||
周转时间 | 4 | 8 | 16 | 3 | 9 | 8 | ||
带权周转时间 | 1 | 2.67 | 3.1 | 1.5 | 2.25 | 2.1 |
注:
1)FCFS是按照作业的先后到达,等待时间来调度的,当A到达时,只有A到达,先调度A,在A执行完后,B、C、 D、E都到达了,他们等待的时间分别为3、2、1、0,B等的最久,所以B第二个被调度,以此类推。
2)周转时间 = 完成时间-到达时间
带权周转时间=周转时间/服务时间
- FCFS调度算法有利于CPU繁忙型的作业,而不利于I/O繁忙型的作业(进程)。 CPU繁忙型作业是指该类作业需要大量的CPU时间进行计算,而很少请求I/O。通常的科学计算便属于CPU繁忙型作业。 I/O繁忙型作业是指CPU进行处理时需频繁地请求I/O。目前的大多数事务处理都属于I/O繁忙型作业。