处理机调度
在多道程序环境下,内存中存在着多个进程,其数目往往多于处理机数目。这就要求系统能按某种算法,动态地将处理机分配给处于就绪状态的一个进程、使之执行。分配处理机的任务是由处理机调度程序完成的。对于大型系统运行时的性能,如系统吞吐量、资源利用率、作业周转时间或响应的及时性等,在很大程度上都取决于处理机调度性能的好坏。因而,处理机调度便成为OS中至关重要的部分。
作业与作业调度
1.先来先服务(FCFS)调度算法
该算法即可用于作业调度,也可用于进程调度
2.短作业优先(short job first SJF)的调度算法
可以分别作用于作业调度和进程调度,作业的长度是以作业所要求的运行时间来衡量的(预估时间)。
3.优先级调度算法(PSA)
可以作为作业调度算法,也可作为进程调度算法。根据优先级进行调度。
4.高响应比优先调度算法(HRRN)
为每个作业引入一个动态优先级,即优先级可以改变,令它随等待时间延长而增加,这将使长作业的优先级在等待期间不断地增加,等到足够的时间后,必然有机会获得处理机。
优先权 = (等待时间+要求服务时间)/要求服务时间
进程调度
早期所采用的非抢占方式存在着很大的局限性,很难满足交互性作业和实时任务的需求。为此,在进程调度中又引入了抢占方式。
- 非抢占方式
抢占方式
1.优先权原则
2.短进程优先原则
3.时间片原则
轮转调度算法
基于时间片的的轮转(RR)调度算法。系统根据FCFS策略,将所有的就绪进程排成一个就绪队列,并设置每隔一定时间间隔(如30ms)即产生一次中断,激活系统中的进程调度程序,完成一次调度,将CPU分配给队首进程,令其执行。当该进程的时间片耗尽或运行完毕时,系统再次将CPU分配给新的队首进程(或新到达的紧迫进程)。由此,可保证就绪队列中的所有进程在一个确定的时间段内,都能够获得一次CPU执行。
多级反馈队列调度算法
1、设有N个队列(Q1,Q2….QN),其中各个队列对于处理机的优先级是不一样的,也就是说位于各个队列中的作业(进程)的优先级也是不一样的。一般来说,优先级Priority(Q1) > Priority(Q2) > … > Priority(QN)。怎么讲,位于Q1中的任何一个作业(进程)都要比Q2中的任何一个作业(进程)相对于CPU的优先级要高(也就是说,Q1中的作业一定要比Q2中的作业先被处理机调度),依次类推其它的队列。
2、对于某个特定的队列来说,里面是遵循时间片轮转法。也就是说,位于队列Q2中有N个作业,它们的运行时间是通过Q2这个队列所设定的时间片来确定的(为了便于理解,我们也可以认为特定队列中的作业的优先级是按照FCFS来调度的)。
3、各个队列的时间片是一样的吗?不一样,这就是该算法设计的精妙之处。各个队列的时间片是随着优先级的增加而减少的,也就是说,优先级越高的队列中它的时间片就越短。同时,为了便于那些超大作业的完成,最后一个队列QN(优先级最低的队列)的时间片一般很大(不需要考虑这个问题)。
实时调度
最早截止时间优先EDF算法
该算法是根据任务的截止时间确定任务的优先级,任务的截止时间愈早,其优先级愈高,具有最早截止时间的任务排在队列的队首。调度程序在选择任务时,总是选择就绪队列中的第一个任务,为之分配处理机。最早截止时间优先算法即可用于抢占式调度,也可用于非抢占式调度方式。
最低松弛度优先LLF算法
该算法在确定任务的优先级时,根据的是任务的紧急(或松弛)程度。任务紧急程度愈高,赋予该任务的优先级就愈高,以使之优先执行。例如,一个任务在200ms时必须完成,而它本身所需的运行时间是100ms,因此调度程序必须在100ms之前调度执行,该任务的紧急程度(松弛程度)为100ms。在实现该算法时要求系统中有一个按松弛度排序的实时任务就绪队列,松弛度最低的任务排在最前面,调度程序选择队列中的队首任务执行。