OS处理机调度算法----理论篇

处理机调度----理论篇

​ 因为这一部分的知识点太过零碎,因此将处理机调度分为两部分,一是理论篇,二是调度算法篇。

​ 在传统的操作系统中(早期,OS为单处理机),处理机的分配和运行都是以进程为单位的(参考进程的定义),因而处理机的管理可归结为对进程的管理。处理机管理的功能主要包含:进程控制、进程同步、进程通信、调度。下面我们一个个的来分析其功能的具体含义。

  1. 进程控制:进程控制是处理机管理中最基本的功能,主要包含为调入内存中的作业创建进程、终止已完成的进程、将因发生等待事件而无法继续执行的进程置于阻塞状态、负责进程运行中状态的转换等功能。进程控制一般是由OS内核中的原语来实现的;
  2. 进程同步:进程同步机制主要为保证OS中多个进程能有条不紊的运行,可以使多个并发执行进程的按照规则共享系统资源,保证OS的并发性;
  3. 进程通信:当有一组进程相互合作着去完成一个共同的任务时,在他们之间通常需要交换信息,进程通信的任务就是实现他们见的信息交换;
  4. 调度:负责一个作业从转入内存开始到作业运行完毕中间的对处理机的分配问题,这中间可能会经历多级处理机调度。

​ 上面的三个功能我们已经在前文进行了详细的讲解,本文就对调度来进行分析。在多道程序环境下,内存中存在着多个进程,其数量往往多于处理机的数目,这就要求系统能按某种算法,动态地把处理机分配给就绪队列中的一个进程,使之执行。分配处理机的任务是由处理机调度程序完成的。处理机调度的性能的好坏,可以直接影响系统运行时的性能,如系统吞吐量、资源利用率、作业周转时间或相应的及时性等。所以处理机调度是OS中至关重要的部分。

​ 本文的主要内容包含一些重要概念、处理机调度的层次、调度算法的目标和调度算法。

1.处理机调度中的一些概念

周转时间:是指从作业被提交给系统开始,到作业完成为止的这段时间间隔。由下图可知,周转时间由四部分组成。需要注意的是,其中的后三项在一个作业的完成周期中,可能会发生多次。

平均周转时间:对于每个用户来讲,都希望自己作业的周转时间最短,但是作为计算机系统的管理者,则总是希望能使平均周转时间最短,这不仅会有效的提高系统的资源利用率,而且还可使大多数用户都感到满意。平均周转时间可由以下公式计算得到, T = 1 n i = 1 n T i T=\frac{1}{n}\sum_{i=1}^{n}T_i

带权周转时间:使用周转时间T和系统为他提供服务的时间(在CPU上运行的时间)Ts之比,即 W = T T s W=\frac{T}{T_s} 。带权周转时间主要是为了进一步反应调度的性能,更清晰的描述各进程在其周转期内,得带和执行时间的具体分配情况。平均带权周转时间则可表示为: W = 1 n i = 1 n T i T s W=\frac{1}{n}\sum_{i=1}^{n}\frac{T_i}{T_s}

资源利用率:资源的有效工作时间和总的时间的一个比值,计算公式如下: = + 资源利用率=\frac{资源有效工作时间}{资源有效工作时间+资源空闲时间}

系统吞吐量:指单位时间内系统所完成的作业数。

响应时间:指从用户提交一个请求开始,到处理结果输出为之的一段时间间隔。它包括三部分时间:从键盘输入的请求信息传送到处理机的时间,处理机对请求信息进行处理的时间,以及将所形成的响应信息回送到终端显示器的时间。

2.处理机调度的层次

​ 一个作业从提交到获得处理机执行,直至作业运行完毕,可能需要经历多级处理机调度。处理机调度的级别按照调度的运行频率分为以下三类:

  1. 高级调度:高级调度又称为长程调度或作业调度,调度的对象为作业,调度发生的周期较长。其主要功能是根据某种算法,决定将外存中处于后备队列中的哪几个作业调入内存,为他们创建进程、分配必要的资源,并将进程插入到就绪队列中。
  2. 中级调度:中级调度又称为内存调度,调度的对象是进程,调度发生的周期介于两者之间。其功能是将阻塞或者中断等不能运行的进程,调至外存等待,并将进程的状态变为挂起状态(或就绪驻外存状态),当进程又可以恢复运行时,有中级调度再进程重新调入内存中,状态改为就绪态,放入就绪队列上等待运行。中级调度也称存储器管理中的对换技术,是一种实现虚拟存储的技术。
  3. 低级调度:低级调度又称为短程调度或者进程调度,调度对象是进程,调度发生的频率最高。其功能主要是根据算法决定就绪队列中的哪个进程获得处理机,并由分派程序将处理机分配给被选中的进程。因为最后分配处理机的任务是由进程调度完成的,进程调度是最基本的一种调度。

​ 从图中我们可以看到,阻塞/唤醒等操作属于进程调度,挂起/激活等操作属于内存调度,从后备队列中选取作业进入内存,属于作业调度。

3.处理机调度算法的目标

​ 这里呢,我们的处理机调度目标类似于我们前面文章中讲到的每个操作系统的目标类似,因为每中OS选取的调度算法主要是为了满足其设计目标,因此我们按照OS的类型来对处理机调度算法的目标来进行讲解。

​ 首先是处理机调度算法的共同目标(就与OS的共同目标一样):

  1. 资源利用率高:系统中处理机和其他资源都应尽可能的保持忙碌状态,其中最重要的资源是处理机;
  2. 公平性:诸进程都获得合理的CPU时间,不会发生进程饥饿现象;
  3. 平衡性:调度算法应当尽可能的保证系统资源使用的平衡性;
  4. 策略强制执行:对于所制定的策略,只要需要,就必须执行,即使会造成某些工作的延迟也要执行。

​ 下面我们来看下不同系统中调度算法的目标。

批处理系统的目标:1.平均周转时间短;2.系统吞吐量高;3.处理机利用率高。

分时系统的目标:1.响应时间快;2.均衡性,指系统的响应时间的快慢应与用户请求服务的复杂性相适应。

实时系统的目标:1.截止时间的保证;2.可预测性。

​ 从上述不同系统中的调度算法的目标,我们也可以看到,其目标大致是和OS的目标相对应的,或者说,不同系统中的调度算法,就是为了满足不同系统的目标而设计的。

​ 下面我们来具体的讲解每一级调度的主要任务和所需要的执行条件。

4.作业调度

​ 首先,我们来看下作业调度中的几个概念。

作业(Job):作业是一个比程序更为广泛的概念,它不仅包含了通常的程序和数据,而且还应配有一份作业说明书,系统根据该说明书来对程序的运行进行控制。在多道批处理系统中,作业是用户提交给系统的一项相对独立的工作。这些作业进入到系统的磁盘存储器中,并保存在后备作业队列中。再由作业调度程序将其从外存调入内存。

作业步(Job Step):通常,在作业运行期间,每个作业都必须经过若干个相对独立,又相互关联的顺序加工步骤才能得到结果,我们把其中的每一个加工步骤称为一个作业步。各个作业步之间存在着相互联系,通常是一个作业步的输出是下一个作业步的输入。每个作业步可以简单的理解为程序中的一行或几行代码,后面的代码往往需要依赖前面的计算结果。

作业控制块(Job Controll Blcok, JCB):和PCB类似,OS为了管理和调度作业,为每个作业设置了一个作业控制块,如同进程控制块是进程在系统中存在的标志一样,它是作业在系统中存在的标志,其中保存了系统对作业进行管理和调度所需的全部信息。

​ 和进程在执行的过程中有诸多状态类似,作业从进入系统到运行,通常需要经历收容运行完成三个阶段,其对应的作业状态分别为:后备状态(后备队列中)、运行状态(创建进程,进程的生命周期)、完成状态(作业运行结束或提前中断)。

作业调度的主要任务:根据JCB中的信息,检查系统中的资源能否满足作业队资源的需求,以及按照一定的调度算法,从外存的后备对列选取某些作业调入内存,并为他们创建进程、分配必要的资源,并讲进程插入到就绪队列中。因此在每次执行作业调度时,需要作出两个决定:

  1. 接纳多少作业:即每次调度时,应当从后备队列中选取多少个作业调入内存,主要(也有可能会受存储器管理算法影响,可以参考后续博文)取决于多道程序的度(或者是道),即允许多少个作业同时在内存中运行。
  2. 接纳哪些作业:即每次调度时,应当从后备队列中哪些作业调入内存,这主要取决于所采用的调度算法。

​ 作业调度算法主要有先来先服务、短作业优先、优先级和高响应比调度算法,具体的算法分析参看另一篇博文。

5.进程调度

​ 讲到进程调度,在前面我们应该都有直接和间接的接触。比如说进程的状态由就绪态转为执行态,需要被分配处理机,其中,处理机的分配就是有进程调度完成的。因此,进程调度时OS中必不可少的一种调度,也是对系统性能影响最大的一种处理机调度。

进程调度的任务:主要是根据算法决定就绪队列中的哪个进程获得处理机,并由分派程序将处理机分配给被选中的进程。因此其任务可以具体的细分为三部分:

  1. 保存处理机的现场信息:对正在执行的进程进行切换,需要保存其处理机的现场信息,用于重新执行时恢复现场信息,包括程序计数器、多个通用寄存器中的内容等;
  2. 按照某种算法选取进程:按照调度算法从就绪队列中选取一个进程,将其状态改为运行态,并准备将处理机分配给他;
  3. 把处理器分配给进程:有分派程序把处理器分配给上一步中选中的进程,需要把PCB中有关处理机现场的信息装入处理器的各个寄存器中,把处理机的控球权交给进程,让他从上次的断点处恢复执行(如果之前执行过的情况下)。

进程调度机制:为了实现进程调度,在进程调度机制中,应当具有如下三个基本部分:排队器、分排器、上下文切换器。其中每个部分的基本功能如下:

  1. 排队器:主要是为了提高进程调度的效率。事先将系统中的所有就绪进程按照一定策略(调度算法)排成一个或多个队列,以便调度程序能最快的找到它;
  2. 分派器:从排队器排好的就绪队列中取出一个进程,然后进行从分派器到新选的进程间的上下文切换(依赖于上下文切换器),将处理机分配给新选出的进程;
  3. 上下文切换器:主要有两部分工作,一是保留当前进程的处理机上下文现场信息;二是将新被选中的进程的CPU现场信息进行恢复,也就是将信息装入到各个相应的寄存器中,以便新选进程运行。

进程调度方式:分为非抢占式和抢占式两种,主要的划分方式就是进程在正常执行的过程中(发生阻塞情况例外),处理机是否可以被抢占。

  1. 非抢占式:分派程序一旦把处理机分配给某进程后便让它一直运行下去,直到进程完成或发生某事件而阻塞时,才把处理机分配给另一个进程;
  2. 抢占式:当一个进程正在运行时,系统可以基于某种原则(优先权原则、短进程优先原则、时间片原则),剥夺已分配给它的处理机,将之分配给其它进程。

​ 在现代OS中,广泛采用抢占式调度,是因为对于批处理系统,可以防止一个长进程长时间的占用处理机,以确保处理机能够为所有进程提供更为公平的服务; 在分时系统中,只有采用抢占式才能实现人机交互(时间片结束抢占处理机);在实时系统中,抢占式能满足实时任务的要求。但同时抢占式比较复杂,所需要的系统开销也比较大。

​ 进程调度的算法主要有轮转调度算法、优先级调度算法、多队列调度算法、多级反馈队列调度算法等。

6.内存调度

​ 内存调度一般是用于存储器管理中的一种调度方式,主要是为了将系统中一些暂时无法运行的作业从内存中换出到外存,以腾出足够的内存空间(被换出的进程会被剥夺所拥有的资源,主要是内存),再把已具备运行条件的进程换入到内存。内存调度也被称为对换技术。

​ 内存调度的主要目的是提高内存的利用率和系统吞吐量,内存调度的主要任务也就是选取部分作业调出内存,并在内存有空闲时,选取处于外存并且具备运行条件的部分进程调入内存,重新为之分配资源,将进程的状态置为就绪态。

​ 关于这部分我们这里不做具体的分析,我们会在虚拟存储器中来详细的讲解。


​ 又到了分隔线以下,本文到此就结束了,本文内容全部都是由博主自己进行整理并结合自身的理解进行总结,如果有什么错误,还请批评指正。

​ 本篇内容到此就结束了,关于具体的调度算法还请参考后续的博文。

​ 如有兴趣,还可以查看我的其他几篇博客,都是OS的干货,喜欢的话还请点赞、评论加关注^_^。

操作系统武功修炼心法

发布了27 篇原创文章 · 获赞 212 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_34666857/article/details/104078365