在多道程序系统中,进程的数量往往多于处理机的个数,这样就不能同时并行的处理各个进程。
处理机调度就是,从就绪队列中按照一定的算法选择一个进程将处理机分配给他运行,以实现进程的并行执行。

处理机调度

处理机调度分为三个层次:高级调度、中级调度、低级调度

高级调度(作业调度)

由于内存空间有限,有时无法将用户提交的作业全部的放入到内存中,因此就需要确定某种规则来决定将作业调入内存的顺序。

高级调度(作业调度):按照一定的原则,从外存上处于后备队列的作业中挑选一个或多个作业,给他们分配内存等必要资源,并建立相应进程(PCB)等,使他们获得竞争处理机的权利。

高级调度是辅存(外存)与内存之间的调度。每个作业只调入一次,调出一次。作业调入时会创建相应的PCB,作业调出时会撤销PCB。高级调度主要是指调入的问题,因为只有调入的时机需要操作系统来决定,但调出的时机必然是该作业的运行结束。

中级调度(内存调度)

在引入了虚拟存储技术之后,可以将暂时不能运行的进程调至外存等待。等他重新具备了运行的条件且内存有空闲时,在重新调入内存。
这样做的目的是提高内存的使用率和系统吞吐量。

暂时调到外存等待的进程状态为挂起状态
注意:**虽然进程进入了挂起状态,但他的PCB不会一起调到外存中,而是存到一个PCB挂起队列,并且常驻内存。**PCB中记录了进程数据在外存中的存放位置,进程状态信息,OS会通过内存中的PCB来管理监控各个进程。(因此不能调入外存)。

中级调度(内存调度):就是决定将哪个处于挂起状态的进程重新调入内存。
一个进程可能会被多次的调入、调出内存,因此中级调度的发生频率要比高级调度高的多

进程挂起与七状态模型

暂时调到外存等待的进程状态称为挂起状态
挂起状态又可以进一步细分为就绪挂起阻塞挂起两种状态。

下面是七状态模型的交互图
image.png
“挂起”和“阻塞”的区别
两种状态都是暂时不能获得CPU的服务,但挂起状态时将进程映像调到外存中去了,而阻塞状态下的进程映像还在内存中。
有的操作系统会把就绪挂起、阻塞挂起分为两个挂起队列,甚至会根据阻塞原因将不同的阻塞队列进程进一步细分为多个队列。

低级调度(进程调度)

低级调度(进程调度):其主要的任务是按照某种方法的策略从就绪队列中选取一个进程,将处理机分配给他们。
进程调度是操作系统中最基本的一种调度,在一般的操作系统中对必须配置进程调度。进程调度的频率很高,一般几十毫秒一次。

三次调度的对比

image.png