关于操作系统是如何虚拟化 CPU 的我们上一篇文章已经聊过了,今天再深入一下,聊一聊进程调度那些事。

关于操作系统是怎么虚拟化 CPU 的咱们上一篇文章现已聊过了,今日再深化一下,聊一聊进程调度那些事。

 操作系统的进程调度算法(CPU虚拟化)(操作系统 进程调度算法) CPU 虚拟化 调度 第1张

咱们现已知道,对 CPU 虚拟化的意图便是能够一同运转多个进程(这不是仅有意图),而本质便是对进程的切换,也便是快速的切换履行多个进程,这样关于用户而言,一切的进程都是一同进行的,可是咱们应该怎么对多个进程来公平合理并安全高效的运转呢?所以,咱们就呈现了许多的进程调度算法。这儿咱们由浅入深,来讲一下现在比较广泛的算法。

第一个便是最简略的先进先出(FIFO),也能够叫做先到先服务。这个算法的最大长处便是简略。没错,便是咱们了解的那个进程先来了,CPU 就先处理哪个,等当时的处理完毕,在处理下一个。

咱们假定有三个进程,每一个进程处理需求10s,这时,不管哪个进程先来,终究一个进程的完结时刻都是30s,也便是说这种状况下最大完结时刻是一切进程需求时刻之和。可是假设相同有三个进程,其间两个进程需求10s,别的一个进程需求100s,这种状况,最大完结时刻便是120s,由于三个进程的各自完结时刻不同,所以依据他们抵达的次序不同终究的影响也有很大差异。假定三个进程 A(10s)、B(10s)、C(100s),假设依照 A、B、C 的次序抵达,那么履行的过和咱们料想的是相同的,开端十秒钟,A 履行完毕,二十秒后,B 履行完毕,一百二十秒后,C履行完毕。可是假设是依照相反的次序抵达的呢?C、B、A,这样开端一百秒后,C 履行完毕,一百一十秒后,B 履行完毕,一百二十秒后,A 履行完毕。很明显,这种状况下,B 和 A 都要等候时刻最长的 C 完毕才干够履行,所以这个算法的功率依据抵达的次序有很大联系。明显,这并不是咱们想要的。在这儿咱们核算一下进程的均匀周转时刻,当三个进程都需求10s的时分均匀周转时刻:

(10+20+30)/3=20,由于 A 在第10s完结,B 在第20s完结,C 在第30s完结。咱们想一下当进程 A、B、C 时刻分别为 10s、10s、100s呢?此刻进程的次序是 C、B、A,那么均匀周转时刻便是:(100+110+120)/3=110。这是咱们不能承受的。这个问题一般被称为护航效应(convoy effect)。这种状况在咱们日子中也是十分常见的,例如咱们去一个当地办一件事,大多数人只需求一分钟就能够办完,可是前面有一个人需求三十分钟才干够办完,那么后边的人都要一同等候这三十分钟。

针对上面的问题,咱们有新的处理方案:最短使命优先(SJF)与最短完结时刻优先(STCF)。

最短使命优先望文生义,便是需求占用 CPU 时刻短的进程先履行,也便是在上面的比如中(A需求10s、B需求20s、C需求100s),先让A和B先抵达,履行完毕后在履行C。可是这种算法中,咱们仍然不能确保C必定终究抵达,假设C仍然是最早抵达,状况仍然糟糕,状况下图:

操作系统的进程调度算法(CPU虚拟化)(操作系统 进程调度算法)  CPU 虚拟化 调度 第2张

SJF

为了处理这个问题,咱们放款条件,便是咱们不需求确保一切的进程有必要一次都履行完。现在咱们在假定最坏的状况,C先抵达,之后才是A和B。当C总履行时刻需求100s时,刚开端履行到了10s的时分,B抵达,此刻咱们不需求确保C履行悉数完结,发现B的时刻只需求10s就能够完毕,此刻就暂停C一同开端履行B,当B履行完毕后,A又抵达,此刻咱们相同不履行C而是履行A,当A完毕后,咱们再回到C,这样功用又上升了一个台阶。如下图:

操作系统的进程调度算法(CPU虚拟化)(操作系统 进程调度算法)  CPU 虚拟化 调度 第3张

STCF

上面的算法中首要考量的是均匀周转时刻,可是实际中假设用这样的算法仍然是不可靠的,试想咱们翻开一个软件,某一个功用需求等候100s后才反响,那咱们岂不是要疯掉?此刻新的衡量目标呈现了:呼应时刻(呼应时刻=初次运转-抵达时刻)。

咱们再介绍新的算法,轮转(Round-Robin,RR)。望文生义,便是轮训履行进程。在一个时刻片内运转一个作业,然后切换到运转行列中的下一个使命。重复履行,直到一切完毕。这儿咱们有一点需求留意,便是时刻片需求是时钟中止周期的倍数,时钟中止部分这儿不再细讲,上一篇文章咱们现已聊过了。假设时钟中止周期是10ms,那么时刻片能够是10ms、20ms、30ms或许10ms的任何倍数。三个进程A、B、C,所需时刻都是5,假设运用RR这种算法,履行进程便是如下图:

操作系统的进程调度算法(CPU虚拟化)(操作系统 进程调度算法)  CPU 虚拟化 调度 第4张

RR

可是这种算法还要支付别的的价值,便是上下文切换的本钱。所以说需求找一个合理的时刻片。可是最首要的问题是,这种算法与之前的最短使命优先与最短完结时刻优先是有些相反的,也便是说,这种算法导致了周转时刻变得更长。如图比如,A程序在13完结,B在14,C在15,这是十分可怕的。

现在咱们有了两种算法,各自的衡量规范不同,一个是周转时刻,另一个是呼应时刻,可是鱼与熊掌不可兼得的道理咱们都知道,那么咱们详细应该怎么做呢?下一篇文章咱们持续聊愈加完善的两个算法多级反应行列与比例比例。​这两个算法内容较多,所以再独自拿出来。

今日说的是比较根底的东西,能够说的进程调度思维的一个起步,有了这个根底咱们就能够愈加深化的了解后边的多级反应行列算法与比例比例。再烦琐几句,最近为什么要写操作系统相关的内容呢?由于我觉得这对出产是有很大协助的,尤其在出产环境中找问题,功用提升等,所以主张咱们能够了解一些。这也是我一向所发起的,言语仅仅东西,结构也是东西,可是百变不离其宗,只要把握了最中心,最根底的才干所向无敌。

转载请说明出处
知优网 » 操作系统的进程调度算法(CPU虚拟化)(操作系统 进程调度算法)

发表评论

您需要后才能发表评论