一个作业从提交开始直到完成,往往经历以下三个调度:
一、作业调度
作业调度又称高级调度,主要任务是按照一定的原则从外存上处于后备队列的作业中挑选一个或者多个作业,为其分配内存、I/O设备等必要资源,并建立相应的进程,使它们获得竞争处理机的权利。简要地说就是内存与外存的调度,对于每个作业仅调入一次、调出一次。多道批处理系统中大多配有作业调度,而其他系统中通常不需要配置作业调度,作业调度的执行频率较低且时间较长,通常为几分钟一次。
二、内存调度
内存调度又称中级调度,引入中级调度的目的是为了提高内存利用率和系统吞吐量。内存调度将那些暂时不能运行的进程调至外存等待,把此时的进程状态称为挂起状态。当处于挂起状态的进程能够运行且内存有空闲时,将其重新调入内存并修改状态为就绪状态,挂在就绪队列上等待。
三、进程调度
进程调度又称低级调度,主要任务是按照某种方法和策略从就绪队列中选取一个进程,将处理机分配给它。进程调度是操作系统中最基本的一种调度,执行频率很高且时间较短,一般几十毫秒一次。
四、三级调度的联系
1、作业调度为进程活动做准备,进程调度使进程正常活动起来,内存调度将暂时不能运行的进程挂起,内存调度处于作业调度和进程调度之间;
2、作业调度次数最少,内存调度次数略多,进程调度频率最高;
3、进程调度是最基本的,不可或缺。
对以下2个例子进行分析:
1、有一个具有两道作业的批处理系统,作业调度采用短作业优先调度算法,进程调度采用抢占式优先级调度算法。作业的运行情况见下表,其中作业的优先数为进程的优先数,优先数越小,优先级越高。
作业名 |
到达时间 |
运行时间 |
优先数 |
1 |
8:00 |
40min |
5 |
2 |
8:20 |
30min |
3 |
3 |
8:30 |
50min |
4 |
4 |
8:50 |
20min |
6 |
8:00时,作业1到达,此时内存和处理机空闲,作业1进入内存并占用处理机;
8:20时,作业2到达,此时内存仍有1个位置空闲,处理机被占用,作业2进入内存,由于进程调度采用抢占式优先级调度,故作业2相应进程抢占处理机;
8:30时,作业3到达,但此时内存已无空位,故等待;
8:50时,作业2执行完成并空出一道内存空间并让出处理机,作业3和作业4竞争该道内存空间,由于作业4的运行时间短,故先调入内存,此时作业1相应进程优先级比作业4相应进程优先级高,故先执行作业1的相应进程;
9:10时,作业1执行完成并空出一道内存空间并让出处理机,将作业3调入内存,由于作业3相应进程优先级比作业4相应进程优先级高,故先执行作业3的相应进程;
10:00时,作业3执行完成并让出处理机,执行作业4相应进程,10:20时作业4执行完毕。
作业 |
到达时间 |
运行时间 |
优先数 |
进入内存时间 |
结束时间 |
周转时间 |
1 |
8:00 |
8:00-8:20, 8:50-9:10 |
5 |
8:00 |
9:10 |
70min |
2 |
8:20 |
8:20-8:50 |
3 |
8:20 |
8:50 |
30min |
3 |
8:30 |
9:10-10:00 |
4 |
9:10 |
10:00 |
90min |
4 |
8:50 |
10:00-10:20 |
6 |
8:50 |
10:20 |
90min |
注意:周转时间是指从作业提交到作业完成所经历的时间,包括作业在外存后备队列上等待,在内存就绪队列中等待,在处理机上运行以及I/O操作等所花费的时间。
2、在一个有两道作业的批处理系统中,有一作业序列,其到达时间及估计运行时间如下表,系统作业采用最高响应比优先调度算法(响应比=(等待时间+估计运行时间)/估计运行时间)。进程的调度采用短进程优先调度的抢占式调度算法。
作业 |
到达时间 |
估计运行时间/min |
J1 |
10:00 |
35 |
J2 |
10:10 |
30 |
J3 |
10:15 |
45 |
J4 |
10:20 |
20 |
J5 |
10:30 |
30 |
10:00时,作业J1到达,此时内存和处理机空闲,作业J1进入内存并占用处理机;
10:10时,作业J2到达,此时内存还有一个位置空闲,处理机被占用,故作业J2调入内存等待;
10:15、10:20、10:30时,作业J3、J4、J5分别到达,但三个作业到达时内存中已有J1、J2两道作业,故这三个作业都不能调入内存;
10:35时,作业J1执行完成并空出一道内存空间并让出处理机,此时作业J3、J4、J5响应比分别为65/45、35/20、35/30,则将作业J4调入内存,将处理机分配给运行时间较短的J4;
10:55时,作业J4执行完成并空出一道内存空间并让出处理机,此时作业J3、J5的响应比分别为85/45、55/30,则将作业J3调入内存,将处理机分配给运行时间较短的J2;
11:25时,作业J2执行完成并空出一道内存空间并让出处理机,将作业J5调入内存,将处理机分配给运行时间较短的J5;
11:55时,作业J5执行完成让出处理机,将处理机分配给作业J3,12:40时作业J3执行完成。
作业 |
到达时间 |
运行时间 |
进入内存时间 |
结束时间 |
周转时间 |
J1 |
10:00 |
10:00-10:35 |
10:00 |
10:35 |
35 |
J2 |
10:10 |
10:55-11:25 |
10:10 |
11:25 |
75 |
J3 |
10:15 |
11:55-12:40 |
10:55 |
12:40 |
145 |
J4 |
10:20 |
10:35-10:55 |
10:35 |
10:55 |
35 |
J5 |
10:30 |
11:25-11:55 |
11:25 |
11:55 |
85 |
个人总结:由以上两个例子可以看出,作业调度与进程调度采用不同的调度算法,具有相对的独立性。作业调度执行的是从外存后备队列调入至内存的这个过程,而进程调度执行的是从就绪队列中选择合适的进程进行处理机分配。作业调度在为进程调度做准备,所以之间又有相互联系。
资料来源:王道操作系统