操作系统-处理机调度

本文介绍处理机调度相关的内容,主要涉及三级调度与调度算法等知识。

三级调度

作业从提交到完成一般需要经历三级调度:作业调度(高级调度)、内存调度(中级调度)和进程调度(低级调度),调度的频率依次递增。

  • 作业调度:作业调度一般是将一个作业从外存调入内存,为其分配内存、外设等资源,使其能够竞争处理机资源。对每个作业来说,每个作业一般只调入一次、调出一次。

  • 内存调度:内存调度是为了提高内存利用率系统吞吐量,一般会将暂时无法运行的进程挂起,当具备运行条件且内存有空闲时,会将这些进程调回,挂在就绪队列上等待调度。

  • 进程调度:最频繁的调度方式,一般从就绪队列中调出一个进程,为它分配处理机资源。

进程调度方式

  • 非剥夺调度方式:当一个进程处于运行状态时,即使有更紧急或优先级更高的进程进入就绪队列,也不会抢占正在运行进程的处理机资源,只有当前运行进程结束运行或进入阻塞状态时才会从就绪队列将更紧迫的进程调出并分配处理机资源。

  • 剥夺调度方式:当有一个更紧急或优先级更高的进程需要使用处理机,当前进程会被暂停,执行更紧迫进程的调度方式。

调度基本准则

  • CPU利用率:当CPU一直处于忙碌状态时,CPU利用率最高。

  • 系统吞吐量:表示单位时间内完成的作业数量,当作业都是短作业时,系统吞吐量会比较大。

  • 周转时间:是作业从提交到完成的时间,包括作业等待、在就绪队列排队、运行、IO操作的时间总和。

  • 平均周转时间:是多个作业的周转时间的平均值。

  • 带权周转时间: = 带权周转时间=\frac{作业周转时间作业}{实际运行时间}

  • 平均带权周转时间:是多个带权周转时间的平均值。

  • 等待时间:进程等待处理机的时间之和。

  • 响应时间:从用户提交到首次响应所花费的时间。

调度算法

调度算法是本文的重点,也是很常见的考点,以下介绍常见的调度算法。

先来先服务(FCFS)调度算法

从名字就可以知道这是一种“先来后到”的调度算法,这种调度算法支持作业调度和进程调度。FCFS调度算法每次挑选队列中最先到达的进程或作业,依次进行调度。
这是一种非剥夺调度算法,直观来看,非常公平,但是还是有缺点的。

特点:算法简单,但效率低,对长作业有利,短作业可能要等待很长时间。有利于CPU密集型作业,不利于IO密集型作业。

短作业/进程优先(SJF/SPF)调度算法

短作业/进程优先算法是一种优先调度短作业(进程)的调度算法,同样也是一种非剥夺调度算法

特点:对短作业有利,对长作业不利,如果一直有短作业进来,可能长作业会一直得不到执行。不考虑作业紧迫程度,有些紧迫的作业可能不能及时处理。有利于IO密集型作业,不利于CPU密集型作业。

优先级调度算法

优先级调度算法既可以用于作业调度也可以用于进程调度。当用于作业调度时,会从后备作业队列中选出一个或多个优先级最高的作业,将它们调入内存中,并分配相应资源;当用于进程调度时,会从就绪队列中选出优先级最高的进程,将处理机分配给这个进程,使它能够运行。

根据高优先级进程能否抢占处理机还可以将这种算法分为非剥夺式优先级调度算法和剥夺式优先级调度算法。

在进程创建后进程优先级能否改变又可以将进程优先级分为静态优先级和动态优先级。

  • 静态优先级。静态优先级是进程在创建时就已经确定好的,在进程运行期间不能改变。

  • 动态优先级。动态优先级是指进程运行期间优先级根据进程实际运行情况动态变化的。

高响应比优先调度算法

高响应比优先调度算法适用于作业调度,是短作业优先调度算法和先来先服务算法的折中。我们先来看一下什么是响应比吧。

= + 响应比=\frac{等待时间+要求服务时间}{要求服务时间}

高响应比优先调度算法具有以下特点:

  • 短作业的要求服务时间很短,因此在相同等待时间的情况下,短作业的响应比也更高,会被优先执行。

  • 当要求服务时间相同时,等待时间长的作业会被优先服务。

  • 长作业的要求服务时间比较长,但是随着等待时间的增加,长作业的响应比也会增加,然后可以分配处理机。

时间片轮转调度算法

时间片轮转调度算法一般在分时系统上使用,每个进程被分配固定大小的时间片,当时间片用完以后,无论进程是否执行结束,处理机都将被剥夺给下一个进程。

特点:时间片轮转调度算法的时间片大小选择很讲究,如果时间片过大,该调度算法会退化成为先来先服务调度算法,而时间片设置过小,处理机会频繁切换,进程真正使用处理机的时间减少,系统吞吐量下降。

多级反馈队列调度算法

多级反馈队列调度算法是这些调度算法中最复杂的,也是整合了前面一些调度算法而形成的算法,我们来看一下它的工作过程。

多级反馈队列调度算法

多级反馈队列调度算法工作过程有以下这些特点:

  • 每一级队列从上至下的优先级逐渐递减,优先级越高的队列时间片越小。也就是说,最顶层的队列的时间片最小。

  • 最新的进程进入内存会被放入最上层的队列末尾,当执行到这个进程时,如果能在分配的时间片内完成则会出队列,如果不能在时间片内完成就进入下一级队列末尾,等待处理机资源。

  • 如果高优先级队列有进程存在,则处理机会优先处理上级队列中的进程。如果处理机正在执行某一队列中的进程,此时更高优先级队列中有进程进入,那么当前正在执行的进程会回到当前队列的队尾,处理机执行新进入队列的进程。

最后要提一点,多级反馈队列调度算法兼顾短作业优先的同时,不会让长作业长期处于等待状态最终出现饥饿。

猜你喜欢

转载自blog.csdn.net/qq_32273417/article/details/106835630
今日推荐