天天看点

操作系统原理:进程调度

进程是操作系统资源分配和调度的基本单位,也是操作系统的基础结构。如果说程序是指令、数据及其组织形式的描述,那么进程是程序的实体。

本文简单介绍了进程调度的意义,以及几种常见的进程调度算法的简单原理及优缺点。

进程调度的任务

  1. 保存处理机的现场信息:在调度其他进程之前先要保存当前进程的现场信息,比如寄存器中的内容等
  2. 按照算法选取进程:按照某种算法选择就绪队列中的一个进程,将其状态改为运行状态然后为其分配处理机资源
  3. 分配处理机资源给进程:分配处理器给进程,比如将进程的控制块中有关信息写入处理器相应的寄存器,让进程从上一次断点开始运行

调度方式

  1. 非抢占式:该方式一旦处理器被分配给一个进程就无法被其他进程剥夺。只有当前进程结束后释放资源或者当前进程阻塞其他进程才能使用处理器资源。
  2. 抢占式:这种方式下系统会根据某种原则暂停当前进程,从而把处理器资源让给其他进程。这样可以防止一个进程长时间占用系统资源。资源抢占的原则有:优先权原则、短进程优先原则、时间片原则几种。

短进程优先和先来先服务(FCFS)

进程的短进程优先和FCFS与作业调度相似,在此不做介绍。

参考:作业与作业调度

时间片轮转调度算法

时间片轮转算法是分时系统中常见的进程调度算法。该算法采用了非常公平的调度方式,即每个进程都享有相同的运行时间片长度,时间片结束就必须将资源让给下一个进程。这样每一个进程都能平均的占有处理器。

基本原理:系统从就绪队列队首调度一个进程,并在一个时间片后自动中断。如果当前进程没有完成,就将它转入就绪队列队尾,然后调度就绪队列的新进程。如果进程在时间片内已经完成,就在进程完成时中断,调度就绪队列的新进程。

进程切换时机:根据原理,我们可以发现进程只会在两种情况下切换:(1)时间片结束,切换新的进程;(2)进程完成而时间片还未结束,调度新进程,开启新时间片

时间片长度的确定:时间片长度的确定决定了时间片轮转法的优异性。比如说时间片太长,就失去了轮转的意义,该算法就会与FCFS算法相同;如果时间片太短,就会导致系统中断和进程调度频繁,增加了系统开销。所以确定一个合适的时间片大小很重要,它将决定轮转算法的效率。

优先级调度算法

非抢占式优先级调度:该算法规定一旦将处理机资源分配给就绪队列中的高优先级进程,就必须等到该进程结束或阻塞才能把资源释放。

抢占式优先级调度:把处理机优先分配给高优先级进程,如果执行过程中有更高优先级进程就绪,会中断当前进程把资源分配给更高优先级进程

静态优先级:静态优先级是在进程创建时就确定的,无法改变。确定静态优先级的依据有:(1)进程类型:比如系统进程优先级往往高于用户进程;(2)进程对资源需求:往往需求资源少的进程优先级高;(3)用户需求:根据用户进程紧迫程度确定优先级

动态优先级:动态优先级会在进程创建时先赋予一个初始值,但是根据后来的等待情况等会动态调节。高响应比算法就是典型的动态优先级,它会根据进程等待时间和所需服务时间动态调节。

多队列调度算法

前面所述的各种算法,因为系统只设置了一个就绪队列,即调度算法是固定的、单一的,所以无法满足用户的不同调度策略。这里引入了多队列调度算法来解决这个问题。顾名思义多队列就是多个就绪队列,每个队列对应一类进程和一种调度算法。这样就针对不同的用户需求提供了多种调度策略

多级反馈队列(multileved feedback queue)调度算法

前面的各种调度算法有局限性,即在未提供进程长度时短进程优先等基于进程长度的算法都无法使用。而多级队列反馈调度算法就解决了这个问题。

1.调度机制

(1)设置多个就绪队列,并为每个队列设置递减的优先级。同时每个队列的时间片也不同,越高优先级的队列的时间片越短

(2)每个队列采取先来先服务(FCFS)策略,队列中的进程按照FCFS策略和时间片轮转法调度。

(3)按照队列优先级调度队列,先为高优先级队列分配处理器资源。

继续阅读