进程管理-处理机调度

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、处理机调度概念、层次

在这里插入图片描述
调度的基本概念
在这里插入图片描述
高级调度

在早期的多道批操作系统当中,用户首先会通过外围机或者外围的输入设备把自己的作业输入到更高速的磁盘或者硬盘这种外存空间上,但是由于内存的地址空间是有限的,我们并不能把所有的作业一口气放到内存当中,所以这个时候就出现了资源不够的问题,因此这种情况下我们就需要通过调度进行解决,来决定到底先把哪个作业先调入内存进行运行,所以这就是所谓的高级调度(作业调度)。
在这里插入图片描述
在这里插入图片描述
高级调度其实是外存和内存之间的一个调度,并且每一个作业只可能被调入一次,刚开始被调入,然后当作业运行结束之后被调出,而作业被调出之前作业的运行结构有可能是通过一种IO设备把他输出或者是输出到一个磁带或者硬盘上面,这些输出工作完成之后,系统会回收这些资源所占用的内存空间等待一系列的内存资源,并且会撤销它的PCB。其实作业调出的时机是作业运行结束了,才把作业调出,而作业调入的时机才是操作系统需要管理的,所以高级调度主要指的是调度的问题,因为调入的时候才需要选择,而调出只要作业运行结束就可以。
在这里插入图片描述
中级调度

当一个作业调度内存之后,会建立起相应的进程。
不能运行的进程被调到外存之后,还要被调回内存进行继续的执行,这个过程也需要用调度来选择,我们到底先把哪个数据调回内存进行执行呢,这就是中级调度管的东西。
在这里插入图片描述
在这里插入图片描述
挂起状态

一个处于就绪态的进程,如果此时这个系统的负载比较高,内存空间已经不够用了,他有可能把一个处于就绪态的进程把它暂时调到外存当中,然后这个进程就进入了一个就绪挂起的状态,一直到内存的空闲或者说这个进程要继续执行,那么这个进程又会被激活,它的相应的数据又会被挪回内存,这样的话一个就绪挂起的进程又回到了就绪态,除此之外一个处于阻塞态的进程也可以被挂起,相应的也可以重新被调入内存进行激活,而有的操作系统会使一个阻塞挂起的进程,当他等待的阻塞事情发生以后,这个进程就会直接进入一个就绪挂起的状态,然后之后当他重新被调回内存的时候,是直接回到就绪态,而不是回到阻塞态。

而有时候一个进程当他处于运行态,运行结束之后,可能这个进程下处理的时候,这个进程可能直接被放到外存当中,让他进入就绪挂起的状态。而有时候一个处于创建态的进程,当他创建结束之后,有可能出现内存空间不够的情况,那这种情况下有可能一个处于创建态的进程会先进入到一个就绪挂起的状态。

综上所述,这就是所谓的七状态的模型。
在这里插入图片描述
低级调度

低级调度又称为进程调度,进程调度主要的任务就是按照某一种算法从就绪队列当中选择一个进程为他分配处理机资源,调到处理机上运行,这就是所谓的进程调度。

进程调度很显然,它是实现进程并发运行的一个基础,所以进程调度也是操作系统当中最基本的一种调度,所以在一般的操作系统都会配置进程调度。

进程调度频率很高,这也就使得进程调度在宏观上是并行执行的,而在微观上是使用很快的频率交替执行的,这就是低级调度。
在这里插入图片描述
三层调度的联系和对比
在这里插入图片描述
在这里插入图片描述
高级调度和中级调度是发送在外存和内存之间的调度。区别在于高级调度是面向作业的调度,一个作业在刚开始会被调入一次,调出一次,并且作业调入的时候,会为其建立相应的PCB,也就是建立相应的进程。而中级调度(内存调度),它是面向进程的一种调度,它是把暂时不会运行的进程(相关的数据)把它调入到外存里,然后之后通过中级调度再把这些数据从外存调回内存,而低级调度它是内存和CPU之间的一个调度,对于这三层的调度的发生频率来说,他们的发送频率依次是从低到高,而他们对进程状态的影像也是不同的。
在这里插入图片描述
总结:
在这里插入图片描述
在这里插入图片描述

二、进程调度的时机切换与过程调度方式

在这里插入图片描述
进程调度的时机
在这里插入图片描述
原语操作,从阻塞态变为就绪态的时候,那么我们继续要修改PCB中进程状态的标志位,并且把PCB放到相应的队列中,如果我们只做了前面的事情,中间就开始进程切换,就有可能导致PCB中记录的状态标志和PCB实际放的就绪队列还是阻塞队列是不相匹配的,而这种数据的不匹配就可能给系统带来安全隐患,所以说这种原语中间的过程肯定是不允许进程切换的。
在这里插入图片描述
当一个进程此时处于内核程序临界区并且这个临界区,它是要访问就绪队列的话,在访问之前他会把就绪队列上锁,如果说这个进程当前还没有退出临界区(还没解锁),在没有解锁的过程中,如果说发生进程调度的话,那么进程调度相关的程序肯定是要访问就绪队列这个临界资源的,因为他要从就绪队列中挑选一个进程为他分配处理机,由于就绪队列这个临界资源此时他还是上锁的状态,所以说在这种情况下进行进程调度的话那么进程调度肯定是没办法进行下去的。
在这里插入图片描述
在访问内核程序临界区的时间内,我们不能进行进程的调度和切换,我们必须让这个进程迅速的,尽快的执行完内核临界区的那些代码,完成对临界资源的访问,之后就尽快把临界资源的锁解除,只有这样其他的操作系统内核才能有序的进行管理工作。

假如进程访问的是普通的临界资源,比如是打印机的话,那么他在访问它的时候,首先会进行上锁,打印机完成打印之前,进程一直处于临界区内,他还一直保持对打印机的访问,但是由于他还没有退出临界区,所以这个临界资源并不会解锁,但是打印机又是一种慢速的IO设备,如果这个i情况下一直不允许进程调度与切换的话,那么就会导致这个进程一直是空等着打印机的打印结束,所以在进程空等的过程当中,同时他还霸占着CPU,CPU可以说一直在空闲。
在这里插入图片描述
所以说进程在访问普通的临界资源,这个情况下是应该进程进程调度的。 因为普通的临界区访问的临界资源并不会像之前所说的例子一样直接影响到操作系统的内核管理工作,所以说为了增加系统的并发度,增加CPU的利用率,那么在访问这些普通的临界区的时候是可以进行进程的调度与切换。
在这里插入图片描述
通过上面的内容就解释了为什么前者对,后者错。
在这里插入图片描述
进程是否可以可以被强行剥夺处理器资源,引出来了进程调度的方式。
在这里插入图片描述
对数据的保存,其实是保存到PCB中。对数据进行恢复,其实是从PCB中对数据进行恢复。
在这里插入图片描述
总结
在这里插入图片描述

三、调度算法的评价指标

在这里插入图片描述
CPU的造假很昂贵。
CPU利用率
在这里插入图片描述
系统吞吐量
在这里插入图片描述
周转时间

周转时间相同,但实际的运行时间不同会带来用户的体验不同。例如排队上厕所,假如两人的周转时间是11分钟,前者上厕所需要1分钟,但排对需要10分钟;另外一个人排队需要1分钟,上厕所需要10分钟;这样相同的周转时间可以看出体验是不同的。
在这里插入图片描述
带权周转时间
在这里插入图片描述
等待时间
在这里插入图片描述
响应时间
在这里插入图片描述
总结
在这里插入图片描述
作业、进程、程序的理解:

作业是用户提交给系统的一个任务,在用户向计算机提交作业后,系统将它放入外存中的作业等待队列中等待执行。而进程则是完成用户任务的执行实体,是向系统申请分配资源的基本单位。任一进程,只要它被创建,总有相应的部分存在于内存中。

一个作业通常包括几个进程,几个进程共同完成一个任务,且必须至少由一个进程组成。
用户提交作业以后,当作业被调度,系统会为作业创建进程,一个进程无法完成时,系统会为这个进程创建子进程。
作业与进程最主要的区别是:前者是由用户提交,后者是由系统自动生成;前者以用户任务为单位,后者是操作系统控制的单位。

一个作业通常包括程序、数据和操作说明书3部分。

每一个进程由PCB、程序和数据集合组成。这说明程序是进程的一部分,是进程的实体。

因此,一个作业可划分为若干个进程来完成,而每一个进程有其实体————程序和数据集合。

四、调度算法1

在这里插入图片描述
在这里插入图片描述
先来先服务算法

后备队列是在外存中的。

非抢占式的算法,也就是说正在占用处理机的进程或者作业,只有这个进程主动放弃处理机的时候才会进程调度,才会用这个调度算法规则选择下一个应该得到服务的进程。
在这里插入图片描述
排队买奶茶采用的就是先来先服务的算法,但是如果这个时候前面有一个要买20杯奶茶的(长作业),而做自己奶茶的很快(短作业),这个时候自己的体验就会非常不好。

等待时间越久越先得到服务,指的到有些人越先到的,越排在前面,但是先到也意味着等得久。
在这里插入图片描述
不会导致饥饿,因为不管哪个作业到来,只要等着,前面的进程总会处理的。
在这里插入图片描述
短作业优先算法
在这里插入图片描述
举例:
0 时刻只有P1到达了,所以只能处理P1。等到处理完成之后,P2 P3 P4都到达了,在就绪队列。
在这里插入图片描述
使用抢占式的短作业优先算法(SRTN)
在这里插入图片描述
标红的地方就是因为抢占要先运行。
在这里插入图片描述
在这里插入图片描述
SJF 算法说是最短,其实是不严谨的,因为抢占式的更短。

缺点:如果短作业源源不断的到来的话,就会导致长作业饥饿。
在这里插入图片描述
在这里插入图片描述
高响应比优先算法

要求服务时间=运行时间
在这里插入图片描述
举例的题目是纯计算型的,没有IO操作,也就是没有主动的阻塞。
在这里插入图片描述
在这里插入图片描述
总结
在这里插入图片描述

五、调度算法2

在这里插入图片描述
时间片轮转:
时间片轮转算法是伴随着分时操作系统的诞生而诞生的。
进程调度才有时间片的概念。
在这里插入图片描述
时间片的轮转:
时间片大小为2
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
时间片大小为5:
在这里插入图片描述
时间片如果设置很大的话,则会退化为先来先服务调度算法。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
时间片轮转对各个进程是公平的,轮流的为他们服务。时间片合理的话,就会在一定时间内对各个进程进行一个响应,体现出响应快的优点。
在这里插入图片描述
时间片太大,轮转算法会退化为先来先服务算法。
而时间片太小的话,进行切换频繁,会产生一定的开销。

优先级调度算法

作业调度:把处于外存中的作业选择进入内存。
就绪调度:选择在内存就绪队列中的进程为他分配处理机。
在这里插入图片描述
举例

非抢占式的优先级调度算法
在这里插入图片描述
抢占式的优先级调度算法
在这里插入图片描述
如果某进程在就绪队列中等待了很长时间,则可以适当提升其优先级。这个跟前面提到的高响应比算法很像,也就是说等待时间长了,响应比增大了,也就优先级高了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
多级反馈队列调度算法
在这里插入图片描述
举例学习

P1先到达,先放入第一级队列中,但是第一级队列只有1个时间片,所以当P1执行完一个单位的时间片之后,他的时间片就用完了,他在用完时间片之后还没有结束,还会进入下一级队列的队尾。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当P1执行结束之后,P2也是紧随其后,在1时刻到达的,所以此时由于我们更高级别的队列还有一个进程没有处理完,所以不会处理更低级别当中的进程,因此在这种情况下,1这个时刻会选择P2这个进程上处理机运行。同样的它运行的时间片大小为1个单位的时间,所以运行了一个单位的时间之后,会放入到下一级队列的队尾。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
接下来,在2这个时刻,由于第1级的队列全部为空,所以才会为第二级队列进行调度。此时第2级队列的时间片大小为2,所以P1会执行两个单位的时间,那么当他执行完了之后,运行时间还没有全部结束,所以还会放入到下一级的队列当中。

此时,下一级队列调度,由于第二级队列还有一个进程,所以就会让P2进行运行,但需要注意的是,当P2运行了一个单位的时间之后,他的时间片还没有用完,在5时刻P3进场了,到达第1级队列,由于此时有一个更高级别的优先级到达,所以会发生抢占处理机的情况,所以此时P2这个进程会被剥夺处理机,但是并不是放到下一级队列,而是放到本级队列的队尾。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
之后,让P3上处理机运行,然后运行了一个单位的时间之后,刚好运行完成,调出处理机。
在这里插入图片描述
在这里插入图片描述
接下来又是P2进行运行,由于之前P2运行1个单位+1个单位的时间(总计两个单位时间),所以这次P2上处理机,只需要运行完2个单位的时间片之后,他总共就运行了四个单位的时间,所以这个时候P2完成,就可以调出内存。
在这里插入图片描述
在这里插入图片描述
所以当上面的这些队列当中的进程已经全部完成以后,才会调度最低级的队列,让P1上处理机,运行四个单位的时间,因为这个时候队列的时间片大小为4个队列。然后当他运行了四个单位的时间之后,总共运行了1+2+4=7个单位的时间,但是它的运行时间是8个单位。由于此时P1已经在最下面一级,所以此时没办法再往下面了,此时只会被到同样队列的队尾,然后再次被调度。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
他之前已经运行了7个单位的时间,最后只需要在运行1个单位的时间,则总共运行了8个单位的时间,此时P1完成,在调出内存。
在这里插入图片描述
综上所述:就是多级反馈队列调度算法的流程。比之前所有的算法都要复杂。
在这里插入图片描述
会导致饥饿,因为如果有短进程源源不断的到达的话,可能短进程在第一级队列被分配一个较短的时间片之后就可以被处理完,这种进程源源不断地到来的话,那么已经被降级为更低优先级的进程就有可能长期得不到服务,从而导致饥饿的现象。

总结:
在这里插入图片描述
优先级调度:注意非抢占式的优先级调度算法,我们只需要注意各个进程主动的放弃处理机这样的时刻,那么在这个时刻检查处理机是否调度就可以。而对于抢占式的优先级调度算法,除了刚才所说的情况之外,还需要注意就绪队列发生改变的这种情况,看是否发生抢占,这个时候需要进程检查。
在这里插入图片描述

总结

学习了有关处理机调度的知识,重点理解处理机调度的不同算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值