【答案解析】[分析]
目前存在着多种调度算法,有的算法适合作业调度;有的算法适用于进程调度;但也有些调度算法,既可用于作业调度,也可用于进程调度。
其中,先来先服务(FCFS)调度算法是一种最简单的调度算法。当在作业调度中采用该算法时,每次调度是从后备作业队列中,选择一个或多个最先进入该队列的作用,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。
在进程调度中,采用FCFS调度算法时,则每次调度就是从就绪队列中选择一个最先进入该队列的进程,把处理机分配给它,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后,才放弃处理机。
FCFS算法比较有利于长作业(进程),而不利于短作业(进程),如表2-6所示列出了A、B、C、D四个作业分别到达系统的时间、要求服务的时间、开始执行时间及各自的完成时间,并计算出各自的周转时间和带权周转时间。
表2-6 四个作业情况表 进程名 | 到达时间 | 服务时间 | 开始执行时间 | 完成时间 | 周转时间 | 带权周转时间 | A | 0 | 1 | 0 | 1 | 1 | 1 | B | 1 | 100 | 1 | 101 | 100 | 1 | C | 2 | 1 | 101 | 102 | 100 | 100 | D | 3 | 100 | 102 | 202 | 199 | 1.99 | |
从表2-6中可以看出,其中短作业C的带权周转时间竟高达100,而长作业D的带权周转时间仅为1.99。 由此可见,FCFS调度算法有利于CPU繁忙型的作业,而不利于I/O繁忙型的作业(进程)。CPU繁忙型作业,是指该类作业需要大量的CPU时间进行计算,而很少请求I/O。通常的科学计算便属于CPU繁忙型作业。I/O繁忙型作业是指CPU进行处理时,又需频繁地请求I/O,而每次I/O的操作时间却很短,目前大多数的事务处理,都属于I/O繁忙型作业。 可以通过一个例子来说明采用FCFS调度算法的调度性能,表2-7中有5个进程A、B、C、D和E,它们到达的时间分别是0、1、2、3和4,所要求的服务时间分别是4、3、5、2和4,由表2-7还可以看出,A、B、C、D和E的完成时间分别是4、7、12、14和18,从每个进程的完成时间中减去其到达时间,即得到每个进程的周转时间,进而可以算出每个进程的带权周转时间。
表2-7 FCFS高度算法性能 作业情况 | 进程名称 | A | B | C | D | E | 平均 | | 到达时间 | 0 | 1 | 2 | 3 | 4 | | 调度算法 | 服务时间 | 4 | 3 | 5 | 2 | 4 | | | FCFS | 完成时间 | 4 | 7 | 12 | 14 | 18 | | 周转时间 | 4 | 6 | 10 | 11 | 14 | 9 | 带权周转时间 | 1 | 2 | 2 | 5.5 | 3.5 | 2.8 | |