在多道程序系统中,进程的数量往往多于处理机的个数,这样就不能同时并行的处理各个进程。
处理机调度就是,从就绪队列中按照一定的算法选择一个进程并将处理机分配给他运行,以实现进程的并行执行。
处理机调度
处理机调度分为三个层次:高级调度、中级调度、低级调度
高级调度(作业调度)
由于内存空间有限,有时无法将用户提交的作业全部的放入到内存中,因此就需要确定某种规则来决定将作业调入内存的顺序。
高级调度(作业调度):按照一定的原则,从外存上处于后备队列的作业中挑选一个或多个作业,给他们分配内存等必要资源,并建立相应进程(PCB)等,使他们获得竞争处理机的权利。
高级调度是辅存(外存)与内存之间的调度。每个作业只调入一次,调出一次。作业调入时会创建相应的PCB,作业调出时会撤销PCB。高级调度主要是指调入的问题,因为只有调入的时机需要操作系统来决定,但调出的时机必然是该作业的运行结束。
中级调度(内存调度)
在引入了虚拟存储技术之后,可以将暂时不能运行的进程调至外存等待。等他重新具备了运行的条件且内存有空闲时,在重新调入内存。
这样做的目的是提高内存的使用率和系统吞吐量。
暂时调到外存等待的进程状态为挂起状态。
注意:**虽然进程进入了挂起状态,但他的PCB不会一起调到外存中,而是存到一个PCB挂起队列,并且常驻内存。**PCB中记录了进程数据在外存中的存放位置,进程状态信息,OS会通过内存中的PCB来管理监控各个进程。(因此不能调入外存)。
中级调度(内存调度):就是决定将哪个处于挂起状态的进程重新调入内存。
一个进程可能会被多次的调入、调出内存,因此中级调度的发生频率要比高级调度高的多。
进程挂起与七状态模型
暂时调到外存等待的进程状态称为挂起状态。
挂起状态又可以进一步细分为就绪挂起、阻塞挂起两种状态。
下面是七状态模型的交互图
“挂起”和“阻塞”的区别
两种状态都是暂时不能获得CPU的服务,但挂起状态时将进程映像调到外存中去了,而阻塞状态下的进程映像还在内存中。
有的操作系统会把就绪挂起、阻塞挂起分为两个挂起队列,甚至会根据阻塞原因将不同的阻塞队列进程进一步细分为多个队列。
低级调度(进程调度)
低级调度(进程调度):其主要的任务是按照某种方法的策略从就绪队列中选取一个进程,将处理机分配给他们。
进程调度是操作系统中最基本的一种调度,在一般的操作系统中对必须配置进程调度。进程调度的频率很高,一般几十毫秒一次。