进程调度程序亦称“低级调度程序”,是并发程序设计中,用于调度和分派处理器的程序。在并发程序设计系统中,在同一时刻可能有多个进程同时竞争处理器,需进行进程调度。
功能进程调度主要功能有:
(1)记录系统中所有进程的状态、优先数和资源需求情况。
(2)确定调度算法和调度方式。
(3)分配处理器给某进程,完成处理器的切换。1
进程调度时机(1)任务完成。正在运行的进程完成其任务后,主动释放对CPU的控制。
(2)等待资源。由于等待某些资源或事件,正在运行的进程不得不放弃CPU。
(3)运行到时。在分时系统中,当前进程使用完规定的时间片,时钟中断,使该进程让出CPU。
(4)发现标志。核心处理完中断或陷入事件后,发现系统中“重新调度”标志(如 Linux系统中进程 task struct的成员 need resched)被置上,表示有比当前用户进程更适宜运行的进程,于是执行进程调度。
进程调度程序是操作系统的真正核心,它直接负责CPU的分配。系统中所有进程都是在CPU上运行的,进程调度程序就是它们的切换开关。如果把硬件CPU看成一台裸机,那么加上这个进程调度程序之后,就变成了多台逻辑上相同的CPU,只是速度慢一些。在有的机器上,甚至可以用微程序设计把这个程序装入只读存储器( Read-Only Memory,ROM)中,从而提高CPU的调度效率。2
流程进程调度程序的主要工作流程如下:
1、把当前进程(即调用进程调度程序的进程)的现场信息(寄存器的内容)存入它的PCB中,包括程序状态字,程序计数器,各通用寄存器等;
2、根据某种调度算法,从就绪进程中选出一个进程;
3、复被选中讲程的现场信息即将它的PCB中的现场信息存入相应的寄存器中。3
算法常用的进程调度算法有优先权调度、轮转法调度和分级调度等。随着分布式系统的发展,分布式任务调度算法成为关注的热点。4
静态优先权法优先权法按照进程执行任务的轻重缓急程度使每个进程都有一调度优先权,优先权的高低用优先数表示。系统在调度进程时按优先权从高到低选择进程。如果在创建进程时就确定其优先权,而且在进程运行过程中不再改变,那么这种优先权称为静态优先权。5
动态优先权法静态优先权法实现起来比较简单,但是不能反映系统以及进程在运行过程中发生的变化。动态优先权法则克服了这一缺陷。它按照变化着的情况对各进程的优先权不断地进程调整,因此能获得更好的效果。如可以按进程等待处理机的时间的长短调整进程的优先权,使每一个进程都有机会占有处理机无论是静态优先权或是动态优先权,按照占用处理机的方式可以分成剥夺抢占和非剥夺抢占两种方式。非剥夺抢占方式是指,一旦某个优先权高的进程占用了处理机就一直运行下去,直到它终止,或由于自身原因不能运行下去时才选取另一个优先权最高的进程占用处理机。剥夺抢占方式则相反,在某个进程运行过程中,一旦有另一个优先权更高的进程被唤醒处于就绪状态,就迫使正在运行的进程放弃处理机,而将其交给优先权更高的进程使用。5
按时间片轮转法时间片轮转法规定由各个就绪进程轮流地使用处理机,而且每一次使用的时间长度为定值,例如50MS或100MS。如果一个进程运行了一个时间片后没有结束,则进入就绪队列末尾,等待下一次机会如果由于等待某种事件,进程没有用完时间片就进入睡眠状态,则当它被唤醒后按其时间片未用的值插入就绪队列中的某个位置。这种方法的优点是各进程能比较均匀地使用处理机,因此适用于分时系统。5
本词条内容贡献者为:
徐恒山 - 讲师 - 西北农林科技大学