221_处理机调度的概念、层次
# 2.2_1_处理机调度的概念、层次
各位同学大家好,在这个小节中,我们会学习处理机调度的基本概念和几个调度的层次,分别为高级调度、中级调度和低级调度。其中由中级调度也就是内存调度,我们会引出补充一个课本上没有太多提及的知识点,就是进程的挂起态,并且会介绍一个进程状态的七状态模型。之后我们还会介绍三个调度层次的联系和对比。
# 调度的基本概念
那么首先来看一下什么是调度,其实调度这个概念和我们的生活离得并不遥远,比如说在我们去银行的时候,这个银行它可能只有几个窗口可以为客户服务,那么这些客户到底应该先为谁服务?银行一般采用的就是先到先服务的这种原则。如果说此时有一个 VIP 客户,这个客户在银行里存了几个小目标,就是存了几个亿,那么 VIP 客户可能就会被银行优先的服务,它的优先级更高。
再看另外一个场景,早上咱们起床的时候可能每个宿舍只有一个卫生间,但是大家都想成为坐在王座上的男人,那么每个人都想使用,但是有的人说使我想要使用 3 分钟,有的人要 10 分钟,有的人要一分钟,还有一个人他也需要使用三分钟,大家经过商量之后就决定了一种使用资源的一个原则,时间使用的短的可以让它先使用,而时间长的就后使用。
如果说时间长度相同的,那么就先进入队列,先排队的就可以先使用。所以大家经过商量之后,就决定用 1234 这样的顺序来使用卫生间资源,
所以其实所谓的调度它就是指当我们有一堆东西一堆任务要处理的时候,由于当前的资源有限,那么这些事情没办法同时的被处理,这个时候我们就需要按照某种规则,比如说先到先服务,或者说时间短的优先,各种这样的规则来决定我们要用什么样的顺序来处理这些任务,这就是所谓的调度研究的问题。
处理机调度
那么再来看什么是处理机调度,在多道程序系统当中,一般来说进程的数量是要比处理机的个数更多的,所以这就发生了刚才咱们所说的资源数量,并不能满足同时为这么多的进程同时服务这样的事情,所以我们就需要决定一种顺序来为这些进程依次的服务。那么这就是所谓的处理机调度研究的一个问题,就是指我们要从就绪队列当中,按照一定的算法来选择一个进程,然后把处理机分配给他。
# 调度的三个层次
# 高级调度
那么我们先来看一下高级调度的问题,在早期的多道批处理操作系统当中,用户会首先通过外围机或者外围的一些输入设备,把自己的作业输入到一个更高速的磁盘或者硬盘这样的外存空间上,但是由于内存的地址空间是有限的,我们并不能直接把所有的这些作业全部一口气放到内存,内存装不下,所以这就出现了刚才我们所说资源不够的问题。
因此这种情况下我们就需要用调度来解决,来决定到底先把哪一个作业先调入内存让它运行,所以这就是所谓的高级调度,或者说作业调度管的东西。它会按照一定的原则,从外存的后备队列,后备作业队列当中选择一个作业,然后把它调入内存,并且会给它分配相应的一些系统资源,建立进程的 PCB,只有建立了进程之后,他才可以获得竞争处理机的权限,就像这个样子会建立它的 PCB。
那么高级调度可以看到它其实是外存和内存之间的一个调度,并且每一个作业它只可能被调入一次,刚开始被调入,然后当作业运行结束之后再被调出,而作业被调出之前,它的作业的运行结果有可能是通过一种 l 设备把它输出,或者说输出到一个磁带或者硬盘上面,各不相同,然后这些输出工作完成之后,系统会回收作业所占有的这些内存空间等等一系列的系统资源,并且会撤销它的 PCB。
那么可以看到其实作业调出的时机肯定是作业运行结束了才把作业调出,而作业调入的时机其实才是需要操作系统来管理来决定的一个问题,所以所谓的高级调度主要指的其实是调入的问题,因为只有调入的时候我们才需要选择,而调出的时候只要这个作业运行结束了,就立即把它调出就可以了,那么这就是高级调度。
# 中级调度
接下来我们再来看一下什么是中级调度,我们知道当一个作业被调入内存之后,它会建立起相应的一些进程,但是在第三个章节当中,大家会学到一个所谓的虚拟存储技术,这个地方大家只需要有个印象,就可以之后会有详细的学习。
那么为了实现虚拟存储技术的话,我们会把内存当中暂时有可能运行不到的这些进程,它相关的一些数据调到外存等待,然后一直到进程重新具备了运行的条件,或者说内存又有空闲空间的时候,再把这个进程相应的数据给调回内存,这么做的目的很显然就是可以提高内存空间的利用率,我们可以尽可能的保证在当前处于内存当中的这些进程,都是可以运行的这些进程,这样的话系统资源的利用率就会更高,并且系统的吞吐量也会相应的增大,就是这个样子
但是这些进程被调出调到外存之后,之后他还需要被重新的调回内存继续执行下去。这个过程也需要我们用调度来选择,我们到底是先把哪一个进程相关的数据把它调回内存让它执行呢?这就是中级调度管的东西。那么当一个进程它相关的数据被调到外存之后,进程的状态会变为一种所谓叫做挂起状态,这是咱们之前没有提到过的一个一种进程状态。在王道书里也没有具体的聊过,但是考试当中挂起状态相关的内容也是有可能在选择题当中被考察的。
但是这些进程被调出外存之后,他们的 PCB 其实是会常驻内存的,并不会跟着一起调出外存,因为操作系统还需要继续对这些进程进行管理,而这些进程相关的管理的数据都存在 PCB 当中,所以 PCB 当然是需要常驻内存的。
那么操作系统会为这些处于挂起态的进程,建立一个所谓的挂起队列,把这些进程的 PCB 用一个队列的方式把它组织起来,挂起队列就有点类似于咱们之前提到的所有的处于就绪态的进程,把它组织成一个就绪队列。然后阻塞它的进程处,把它组织成一个阻塞队列,这其实都是为了操作系统方便管理而设计的一种机制。
那么当这些进程需要被重新调入内存运行的时候,就会使用到所谓的中级调度或者叫内存调度,这个时候就需要决定我们需要把挂起队列当中的这些进程,哪一个的数据先把它调回内存,相比于之前提到的高级调度,每一个作业只会被调入一次,调出一次,这样的情况来说,中级调度其实是可能会发生多次的一个进程,它有可能被多次的调出多次的调入,所以中级调度的发生频率显然要比高级调度要更高一些。
# 七状态模型
那么既然提到了挂起状态,我们再来补充一个和挂起状态相关的七状态模型。其实挂起状态又可以进一步的细分为就绪挂起和阻塞挂起两种状态。咱们之前已经学了进程的五状态模型,这也是 408 里要求掌握的一个进程的状态模型,但是对于一些自主命题的学校来说,也有可能会考察七状态模型,所以大家也不要掉以轻心。
那么在引入了就绪挂起和阻塞挂起两种状态之后,一个处于就绪态的进程,如果说此时这个系统的负载比较高,内存空间已经不够用了,那么他有可能会把一个处于就绪态的进程放到把它暂时调到外存当中,然后进程就进入了一个就绪挂起的状态,一直到内存空间空闲,或者说进程又需要继续执行,那么进程又会被激活,把它的数据相应的数据又挪回内存当中,这样的话一个就绪挂起的进程又回到了就绪态
除此之外,一个处于阻塞态的进程也可以被挂起,相应的也可以再重新的被调入内存,然后进行激活,重新回到阻塞态。而有的操作系统有可能会使一个处于阻塞挂起的进程。当他等待的阻塞事件发生的时候,进程就会直接进入到一个就绪挂起的状态,然后之后当它在重新被调回内存的时候,是直接回到就绪态,而不是回到阻塞态。
而有的时候一个进程,当它处于运行态运行结束之后,可能进程调出处理机的时候,就会被直接放到外存当中,进行一个把让它进入就绪挂起的状态。
而有的时候一个处于创建态的进程,当它创建结束之后,创建完 PCB 之后,有可能出现内存空间不够的情况,这种情况下有可能一个创建的处于撞见态的进程之后,会先进入到一个就绪挂起的状态。那么这就是所谓的七状态模型,大家需要注意的是挂起和阻塞的区别。这两种状态都是暂时不能获得 CPU 服务的两种状态,但是区别在于处于挂起态的进程印象是放在外存里的,而处于阻塞态的进程印象其实还在内存当中,而有的操作系统有可能会把这些处于就绪挂起和阻塞挂起的这些进程分为两个不同的挂起队列。当然也有的操作系统还会根据阻塞的原因不同,再把阻塞挂起的这些进程再细分为多个队列,那么这就是七状态模型,大家也需要注意一下。
# 低级调度
最后我们再来介绍调度的第三个层次,低级调度,所谓低级调度也可以称之为进程调度,那么进程调度主要的任务就是按照某一种算法,从就绪队列当中选择一个进程,为它分配处理机资源,把它调到处理机上运行,这就是所谓的进程调度。
进程调度它很显然它是实现进程并发运行的一个基础,所以进程调度它也是操作系统当中最基本的一种调度,是最基本的一种调度,所以在一般的操作系统当中都会配置进程调度相关的一些模块策略。
那么为了实现进程的并发执行,进程调度的频率就有可能会很高,一般来说几十毫秒就会进行一次进程调度,只有这样才可以让这些进程在宏观上看是可以并行的执行的。而微观上其实他们是用很快的频率交替的执行的,这就是第三种低级调度。
# 三层调度的联系和对比
我们再来整理一下三层调度的联系和对比,这三层调度分别要做什么,相信刚才的讲解应该已经比较细了,这就不再展开。
那么高级调度和中级调度这两层调度是发生在外存和内存之间的调度,区别在于高级调度它是面向作业调作面向作业的调度,一个作业在刚开始会被调入一次被调出一次,并且作业调入的时候会为这个作业建立相应的 PCB,也就是建立它相应的进程。
而中级调度,内存调度它是面向进程的一种调度,它是把暂时不会运行进程映像相关的一些数据把它调到外存里,然后之后通过中级调度再把这些进程的数据从外存调回内存。
低级调度它是内存和 CPU 之间的一个调度
发对于这三层调度的发生频率来说,它们的发生频率依次是从低到高的,而这三种调度对进程状态的影响是:
- 高级调度它有可能会使一个进程从无到创建态,最后当他创建完了 PCB 创建完毕之后,还会把进程放入到就绪队列里,让他进入就绪台,所以他对进程状态的影响是这个样子。
- 而内存调度它会使一个处于挂起态的进程重新回到就绪态,而如果说挂起它又细分为阻塞挂起和就绪挂起的话,那么也可以说它可以使一个处于阻塞挂起的进程重新回到阻塞态
- 而低级调度它也就是进程调度,它是选择一个处于就绪态的进程,让它进入运行态投入处理机开始运行,
所以这是这三种调度对进程状态的影响。
# 小结
那么我们再来简单回顾一下。这个小节我们介绍了处理机调度的基本概念和三个调度的层次,我们需要注意的是这三种调度的后面一种名称,这三个名称才是在咱们的考题当中最高频最容易出现的一种名称,所以大家需要注意。
另外我们需要理解三层调度的联系和对比,大家在脑子里再回忆一下对比一下。那么我们还通过中级调度引出了一个咱们梳理没有具体介绍的一个知识点,就是所谓的挂起态,并且介绍了和挂起态相关的七状态模型。
这两个知识点其实在考试当中也是有可能被考到的,特别是自主命题的一些学校。那么最后我们需要注意的是,咱们在介绍这几种三层调度的时候,都是说他们都是按照某种规则,那么这个课当中我们主要学习的是高级调作业调度和进程调度相关的这些所谓的规则,而这个咱们之后要研究的调度算法的问题
好的,那么这就是小节的全部内容。