一、作业调度
作业调度主要是将位于外存后备队列中的某个(或某几个)作业调入内存,排在就绪队列上。这个时候仅仅是将作业调入内存,并为作业创建进程、分配资源,此时进程处于就绪态,并没有执行。
二、进程调度
进程调度主要是从就绪队列中选取一个(或几个)进程,并分配处理机的过程,此时为执行。
三、二者的区别
前者是为作业建立进程的过程,是将作业由外存调入内存的过程;而后者整个过程并没有跑出内存的范围,是将就绪态的进程变为运行态的过程。
例:有一个单CPU两道批处理系统,在作业调度算法采用短作业优先调度、进程调度算法采用抢占式优先级调度。假设有四个作业A、B、C、D,其运行情况如下表所示,采用“优先数越小、优先级越高”的原则,计算平均周转时间。
作业序号 | 到达时间 | 运行时间 | 优先数 |
A | 8:00 | 40 | 5 |
B | 8:20 | 30 | 3 |
C | 8:30 | 50 | 4 |
D | 8:50 | 20 | 6 |
题目是单CPU两道批处理系统,说明CPU一次能处理一个作业,允许两个作业存在。
1、首先,8:00的时候A作业到达,这里到达不是指到达就绪队列,并没有执行,而是指进入了内存,我理解是它进入了一个小方框,这个方框里面有两个区域,分别为内存1和内存2,只允许两个作业存在。
内存块:
内存1(A) | 内存2(B) |
就绪队列:
CPU之前并没有处理相关作业,此时A作业的内存1开始执行,进入就绪队列,分配CPU,转为运行态。
2、CPU运行到8:20的时候,B作业到达,此时内存2空闲,B作业调入内存2,进入就绪队列中,然后两个作业如何分配CPU,需要看进程调度算法,使用抢占式优先级调度算法,B作业优先级高于A作业,所以A作业中断执行,回到就绪队列中,B作业从就绪队列中出去,分配CPU,进入运行态,A作业还剩20处理时间。
就绪队列:
A |
3、CPU运行到8:30的时候,此时C作业到达,但是此时内存块区域中两个区域都被A、B作业占用,所以C作业只能在外存的后备队列中等待,进入不了就绪队列中,此时就绪队列不改变。
就绪队列:
A |
4、CPU运行到8:50的时候,B作业执行完毕,内存2空闲,此时D作业到达。然后考虑C、D作业谁进入内存块区域内存2中,这时需要看作业调度算法,短作业优先,D作业的时间比C作业的时间短,所以D作业进入内存2中。
就绪队列:
A | D |
就绪队列中A、D作业如何分配CPU,执行,需要考虑进程调度算法,非抢占式优先级算法。此时A作业的优先级大,所以A执行,从就绪态转为运行态。
就绪队列:
D |
5、CPU运行到9:10的时候,A执行完毕,内存1空闲,此时C作业进入内存1,进入就绪队列中
就绪队列:
D | C |
就绪队列中D、C作业如何分配CPU,执行,需要考虑进程调度算法,非抢占式优先级算法。此时C作业的优先级大,所以C作业执行,从就绪态转为运行态。
就绪队列:
D |
6、CPU执行到10:00的时候,C作业执行完毕。没有后续作业加入就绪队列中,所以D作业直接分配CPU,执行,从就绪态转为运行态。CPU运行到10:20的时候,D作业执行完毕。此时,作业全部执行完毕。
就绪队列:
CPU执行图:
A B A C D
|____________|______|____________|____________|_____________________|____________|
8:00 8:20 8:30 8:50 9:10 10:00 10:20
周转时间 = 完成时间 - 到达时间
等待时间 = 周转时间 - 运行时间
带权周转时间 = 周转时间 / 运行时间
作业序号 | 到达时间 | 运行时间 | 开始时间 | 完成时间 | 周转时间 | 等待时间 |
A | 8:00 | 40 | 8:00 | 9:10 | 70 | 30 |
B | 8:20 | 30 | 8:20 | 8:50 | 30 | 0 |
C | 8:30 | 50 | 9:10 | 10:00 | 90 | 40 |
D | 8:50 | 20 | 10:00 | 10:20 | 90 | 70 |
本人是操作系统初学者,想通过这篇文章来巩固自己的知识体系,若有不对的地方,请多多包涵,谢谢!