4 处理机调度
4.1 调度类型
操作系统必须为多个进程的竞争请求分配计算机资源。处理机调度的任务就是选出待分派的作业或进程,为之分配处理机。
为了便于处理机调度管理,通常在处理机调度中采用分级调度方式,其中包括以下3级调度:
1. 作业调度
作业调度,又称高级调度。其主要功能是根据一定的算法,从输人的一批作业中选出若干个作业,分配必要的资源,如内存、外设等,为它建立相应的用户作业进程和为其服务的系统进程(如输人、输出进程),最后把它们的程序和数据调人内存,等待进程调度程序对其执行调度,并在作业完成后作善后处理工作。
2. 交换调度
交换调度,又称中级调度。为了使内存中同时存放的进程数目不至于太多,有时就需要把某些进程从内存中移到外存上,以减少多道程序的数目,为此设立了中级调度。特别在采用虚拟存储技术的系统或分时系统中,往往增加中级调度这一级。所以中级调度的功能是在内存使用情况紧张时,将一些暂时不能运行的讲程从内存对换到外存上等待。当以后内存有足够的空闲空间时,再将合适的进程重新换人内存,等待进程调度。引人中级调度的主要目的是为了提高内存的利用率和系统吞吐量。它实际上就是存储器管理中的对换功能。
3.进程调度
进程调度,又称低级调度。其主要功能是根据一定的算法将CPU分派给就绪队列中的一个进程。执行低级调度功能的程序称做进程调度程序,由它实现CPU在进程间的切换。进程调度的运行频率很高,在分时系统中往往几十毫秒就要运行一次。进程调度是操作系统中最基本的一种调度。在一般类型的操作系统中都必须有进程调度,而且它的策略的优劣直接影响整个系统的计能。
4.2 进程调度
进程调度的主要功能是按照某种原则决定就绪队列中的哪个进程能够获得处理机,并将处理机出让给它进行工作。处理机分配任务是由进程调度程序完成的,它是操作系统最为核心的部分,执行十分频繁,并常驻内存工作。
继承调度的实现过程主要分为3步:
1. 保存现场
当前运行的进程调用进程调度程序时,表示该进程要求放弃CPU(因时间片用完或等待I/O等原因)。这时,进程调度程序把它的现场信息(如程序计数器及通用寄存器的内容等)保留在该进程PCB的现场信息区中。
2. 挑选进程
根据一定的调度算法(如优先级算法),从就绪队列中选出一个进程,把它的状态改为运行状态,准备把CPU分配给它。
3. 恢复现场
为选中的进程恢复现场信息,把CPU的控制权交给该进程,使它接着上次间断的地方继续运行。
4.2.1 引起进程调度的原因
什么时候需要执行进程调度呢?一般在以下事件发生后要执行进程调度:
1)当前运行进程结束。因任务完成而正常结束,或者因出现错误而异常结束。
2)当前运行进程因某种原因,如I/O请求,P操作、阻塞原语等,从运行状态进入阻塞状态。
3)执行完系统调用等系统程序后返回用户进程,这时可以看作系统进程执行完毕,从而可以调度一个新的用户进程。
4)在采用抢占调度方式的系统中,一个具有更高优先级的进程要求使用处理器,则使当前运行进程进入就绪队列(这与调度方式有关)。
5)在分时系统中,分配给该进程的时间片已用完(这与系统类型有关)。
4.2.2 进程调度的方式
进程调度方式是指当前一个进程正在处理器上执行,若有某个更为重要或紧迫的进程需要进行处理,此时应该如何分配处理器。
1. 非抢占式调度方式(Non-preemptive)
非抢占式调度方式是指当一个进程正在处理器上执行时,即使有某个更为重要或紧迫的进程进入就绪队列,仍然让正在执行的进程继续执行,直到该进程完成或发生某种事情而进入阻塞状态时,才把处理器分给该重要或紧迫的进程。
2.抢占式调度方式(preemptive)
抢占式调度方式是指当一个进程正在处理器上执行时,若有某个更为重要或紧迫的进程需要使用处理器,则立即暂停正在执行的进程,将处理器分配给这个更为重要或紧迫的进程。
4.3 调度准则
为了衡量调度算法的性能,人们提出了一些评价准则,主要有以下几点。
1.CPU利用率
CPU利用率是指CPU做有效工作的时间比例。即CPU利用率=CPU有效工作时间/CPU总的运行时间,CPU总的运行时间=CPU有效工作时间+CPU空闲等待时间。
2.系统吞吐量
系统吞吐量表示单位时间内完成作业的数量,系统吞吐量越大越好。长作业由于要占用较长的CPU处理时间,因此会导致吞吐量下降,对于短作业则相反。
3.就绪等待时间
就绪等待时间是指每个进程在就绪队列中的等待时间。
4.响应时间
响应时间是指从提出请求到第一次回应的时间。
5.周转时间
周转时间是指每个进程从提出请求到运行完成的时间。
4.4 调度算法
调度算法是指根据系统的资源分配策略所规定的资源分配方法。
4.4.1 批处理系统中采用的调度算法
1. 先来先服务
先来先服务(First Come First Serve,FCFS)是按照先进先出(First In First Out,FIFO)的思想设计的,按照进程就绪的先后顺序使用CPU,是一种非抢占式调度方式。
FCFS算法既可用于作业调度,又可用于进程调度。
优缺点:公平,实现简单,有利于长进程和CPU繁忙型作业,但是不利于短进程和I/O繁忙型作业。
2. 最短作业优先
短作业优先(Shortest Job First)是对FCFS算法的的改进,其目的是减少平均周转时间。采用该算法分配CPU时,选择所需处理时间最短的进程。
3. 最短剩余时间优先
最短剩余时间优先(Shortest Remaining Time First)是把SJF算法改为抢占式,即当一个新就绪的进程比当前运行进程具有更短的完成时间时,系统抢占当前进程,选择新就绪的进程执行。
4. 最高响应比优先
最高响应比优先是一个综合的算法啊,既考虑作业等待时间,又考虑作业运行时间,调度时,首先计算每个进程的响应比R,总是选择R最高的进程执行。
响应比R=周转时间/处理时间=(处理时间+等待时间)/处理时间=1+(等待时间/处理时间)。
4.4.2 交互式系统的调度算法
1. 优先级调度
优先级调度(Priority Scheduling,PS)算法是从就绪队列中选出优先级最高的进程,让它在CPU上运行。该算法的核心问题是如何确定进程的优先级。
通常:系统进程优先级高于用户进程;前台进程优先级高于后台进程;操作系统更偏好 I/O型进程。
优先级可以是静态不变的,也可以动态调整。
2. 时间片轮转法
时间片轮转法(Round-Robin,RR)的实现思想是:将系统中所有的就绪进程按照FCFS原则,排成一个队列。每次调度时将CPU分派个队首进程,让其执行一个时间片。把就绪队列看成一个环状结构,调度程序按时间片长度轮流调度就绪队列中的每一进程,使每一进程都有机会获得相同长度的时间占用处理机运行。在一个时间片结束时,发生时钟中断。调度程序据此暂停当前进程的执行,将其送到就绪队列的末尾,并通过上下文切换执行当前的队首进程。进程可以未使用完一个时间片就出让CPU(如阻塞)。
优缺点:
优点:简单易行,平均响应时间短。
缺点:不利于处理紧急作业。
3. 多级队列法
多级队列(Multilevel Queue,MQ)调度算法把就绪队列划分成几个单独的队列,一般根据进程的某些特性,如占有内存大小、进程优先级和进程类型,永久性地把各个进程分别链入不同的队列中,每个队列都有自己的调度算法。
4. 多级反馈队列法
多级反馈队列法(Multilevel Feedback Queue,MFQ)是