这里仅对先来先服务(FCFS)以及短作业优先(SJF)两种调度算法的相关计算做一个说明和比较
首先我们必须明确:FCFS和SJF两种调度算法,只有在进程的完成时间计算上有一些区别,其他时间(如周转时间等)的计算都是相同的。
周转时间 = 完成时间 - 到达时间
带权周转时间 = 周转时间 / 服务时间
平均周转时间 = 周转时间 / 进程数
平均带权周转时间 = 带权周转时间 / 进程数
1. FCFS的完成时间计算步骤:
step1:找出最先到达的进程(该进程的完成时间=到达时间+服务时间);
step2 : 根据给出的到达时间,找出下一个到达的进程(当前进程的完成时间=上一进程的完成时间 + 当前进程的服务时间);
step3 :重复step2直至完成所有进程的计算;
举个例子:
进程名 | A | B | C | D | E |
---|---|---|---|---|---|
到达时间 | 0 | 1 | 3 | 4 | 6 |
服务时间 | 5 | 7 | 3 | 8 | 2 |
完成时间 | 5 | 12 | 15 | 23 | 25 |
step1. 根据例子中给出的进程到达时间,确定A进程是最先到达的。计算出进程A的完成时间为:A的到达时间+A的服务时间=5+0=5;
step2. 根据到达时间,确定下一到达进程为B。计算出进程B的完成时间为:进程A的完成时间+进程B服务时间=5+7=12;
step3. 重复step2。根据到达时间,确定下一到达进程为C。计算出C的完成时间为:进程B的完成时间+进程C的服务时间=12+3=15...依次类推计算D和E进程的完成时间
2. SJF的完成时间计算步骤:
step1:找出最先到达的进程(当前进程的完成时间=到达时间+服务时间);
step2:根据上一进程的完成时间,找到在这个完成时间内所有到达的进程,并找到这些进程中服务时间最短的那个,然后计算它的完成时间(当前进程的完成时间=上一进程的完成时间 + 当前进程服务时间);
step3:重复step2,直至完成所有进程的计算。
还是上面的那个例子:
进程名 | A | B | C | D | E |
---|---|---|---|---|---|
到达时间 | 0 | 1 | 3 | 4 | 6 |
服务时间 | 5 | 7 | 3 | 8 | 2 |
完成时间 | 5 | 17 | 8 | 25 | 10 |
step1. 根据例子中给出的进程到达时间,确定A进程是最先到达的。计算出进程A的完成时间为:A的到达时间+A的服务时间=5+0=5;
step2.根据上一进程A的完成时间5,可确定已经到达的进程为A、B、C、D(进程E的到达时间为6,所以时间为5时进程E还没到达);其中由于C的服务时间最短,所以下一进程确定为C,C的完成时间为:A的完成时间+C的服务时间=3+5=8;
step3. 重复step2。根据上一进程C的完成时间8,可确定,已经到达的进程有A、B、C、D、E;其中由于E的服务时间最短,所以下一进程确定为E,E的完成时间为:C的完成时间+E的服务时间=8+2=10...依次可计算出其他进程的完成时间。
以上就是两种调度算法下的完成时间具体计算步骤。