" q p) \8 A3 ?# p 进程调度算法(全网最细)3 E- c# D5 E: Q7 k% L
' }3 c h& n' h& b! [* \; j写在前面:我是【程序员宝藏】的宝藏派发员,致力于创作原创干货。我热爱技术、热爱开源与分享,创作的【计算机基础面试问题】系列文章和【计算机基础主干知识】系列文章广受好评!后期会创作更多优质原创系列文章!如果您对计算机基础知识、编程等感兴趣,可以关注我,我们一起成长!9 `) _3 |: B! z1 G1 X& M1 I
; \1 M: m; z H
本人力荐:如果觉得CSDN排版不够美观,欢迎来我的个人原创公zong号【程序员宝藏】(号如其名,诚不欺你!)查看有红色重点标记和排版美观的全系列文章(不细你来找我要红包)$ R2 T/ f1 C/ m( {. O+ p9 [! e
参考链接:TCP三次握手四次挥手' r! \* m" u' Q% H& O3 Y
( ^ m& o/ b t3 F7 X( x- @好多同学问我要pdf版,我干脆把全部文章都整理成了pdf直接打印版,在公zong号后台回复关键字【宝藏】即可免费带回家慢慢看! - `! k! H9 l% N9 \. o' P. u 8 d, Q7 p# ?+ I相关系列文章: / V$ T6 l$ a% G- Z ; l. A, m9 ]! N6 M( C+ b1 MTCP三次握手和四次挥手加拓展面试题(全网最细) 5 j V- Y5 |- y3 q% u4 a1 o# q介质访问控制全网最细没有之一 ! u% A _/ c" D Q路由算法(全网最细)9 ~3 l6 x2 H' F7 `3 G
各层网络协议加面试拓展(全网最细) 5 c- u7 u$ N" R+ N& c各层网络设备加拓展(全网最细)% l: }- P1 `2 b: `8 D- U
线程|进程|程序比较总结(全网最细)1 O5 y0 p& o5 u( C+ Q
死锁加拓展问题(全网最细) * T4 Z; F. i, a# j7 p" A1 d( Y/ `1 ]文章目录/ `3 ?5 `) _' Y. i* B }
@[toc]+ Y& `! d S! l3 s; _4 z7 x5 b* R
正文开始 / C8 ~! C; U3 q, W! M1 W1.前导知识简述# X8 s: ]* u. w
调度的基本评价准则- u8 U8 j8 l4 \
2.先来先服务调度算法(FCFS): z% R9 z4 @' |- _% c
3.短进程优先调度算法(SPF) % Q, Z) a% {; k4.优先级调度算法7 f b5 y1 J5 S9 l R5 Y$ {* d, \0 e
5.时间片轮转调度算法/ \& N" N, S3 B1 c7 c1 V
6.高响应比优先调度算法 $ Q+ c( Y+ a: S2 M; r# Y7.多级反馈队列调度算法 \# d/ u8 ]7 G! M正文开始& E( u& U3 [* k8 }0 a/ U
1.前导知识简述9 r; G6 y; j% g- ]
【问】:为什么要进行处理机调度? ! q- F% x2 s% n4 O, w' M# ?8 G* ]& C若没有处理机调度,同意味着要等到当前运行的进程执行完毕后,下一个进程才能执行,而实际情况中,进程时常需要等待一些外部设备的输入,而外部设备的速度与处理机相比是非常缓慢的,若让处理机总是等待外部设备,则对处理机的资源是极大的浪费。而引进处理机调度后,可在运行进程等待外部设备时,把处理机调度给其他进程,从而提高处理机的利用率。用一句简单的话说,就是为了合理地处理计算机的软/硬件资源。 }" m! M1 J5 R
6 i+ e) b- e; j$ j- y
所谓进程调度方式,是指当某个进程正在处理机上执行时,若有某个更为重要或紧迫的进程需要处理,即有优先权更高的进程进入就绪队列,此时应如何分配处理机。通常有以下两种进程调度方式:6 D5 h9 I) w! \( ]% F' d
: O0 m2 r6 H' k# H" f. a
非剥夺调度方式,又称非抢占方式。非剥夺调度方式是指当一个进程正在处理机上执行时,即使有某个更为重要或紧迫的进程进入就绪队列,仍然让正在执行的进程继续执行,直到该进程完成或发生某种事件而进入阻塞态时,才把处理机分配给更为重要或紧迫的进程。 : @; I R9 D- q这种方式的优点是实现简单、系统开销小,适用于大多数的批处理系统,但它不能用于分时系统和大多数的实时系统。 ; m6 O! T! e- Z! G/ b # S1 s S, d# Z: I+ w剥夺调度方式,又称抢占方式。剥夺调度方式是指当一个进程正在处理机上执行时,若有某个更为重要或紧迫的进程需要使用处理机,则立即暂停正在执行的进程,将处理机分配给这个更为重要或紧迫的进程。采用剥夺式的调度,对提高系统吞吐率和响应效率都有明显的好处。 ) l4 M; J: D; ^但“剥夺”不是一种任意的行为,必须遵循一定的原则,主要有优先权、段进程优先和时间片原则等 / L L$ E. f; n ' ^0 W* U# X+ Y: Z. }调度的基本评价准则 0 c+ B# O2 `3 C3 T2 p7 K' SCPU利用率 $ }5 D A5 b! Y; o% g. r: ^系统吞吐量:单位时间内CPU完成作业的数量 : v7 v9 n5 [/ ~周转时间:作业完成时间 - 作业提交时间1 G5 O4 T0 l. ]7 K, U
等待时间:等待时间指进程处于等处理机状态的时间之和,等待时间越长,用户满意度越低。处理机调度算法实际上并不影响作业执行或输入/输出操作的时间,只影响作业在就绪队列中等待所花的时间。因此,衡量一个调度算法的优劣,常常只需简单地考察等待时间。4 s0 v" n1 C* V5 p9 ^
响应时间:响应时间指从用户提交请求到系统首次产生响应所用的时间。在交互式系统中,周转时间不可能是最好的评价准则,一般采用响应时间作为衡量调度算法的重要准则之一。从用户角度来看,调度策略应尽量降低响应时间,使响应时间处在用户能接受的范围之内。/ k1 B9 C2 a+ @1 s0 @+ I' @
2.先来先服务调度算法(FCFS)( n' |0 H! v/ c: n) |
FCFS 调度算法是一种最简单的调度算法,它既可用于作业调度,又可用于进程调度。在作业调度中,算法每次从后备作业队列中选择最先进入该队列的一个或儿个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列。 $ Z& Q- h1 a5 \6 H) _8 O" F9 K 9 ~ O9 b4 }; v8 i在过程调度中, FCFS调度算法每次从就绪队列中选择最先进入该队列的进程,将处理机分配给它,使之投入运行,直到完成或因某种原因而阻塞时才释放处理机。 j, }; b! ?0 W9 f1 O8 W) s0 I' u- l3 Y
FCFS调度算法属于不可剥夺算法。从表面上看,它对所有作业都是公平的,但若一个长作业先到达系统,就会使后面的许多短作业等待很长时间,因此它不能作为分时系统和实时系统的主要调度策略。但它常被结合在其他调度策略中使用。例如,在使用优先级作为调度策略的系统中,往往对多个具有相同优先级的进程按FCFS原则处理。 4 k1 d) S0 e# {5 m1 ]4 x' Y E. ?, j& E# t; L/ ?
FCFS 调度算法的特点是算法简单,但效率低;对长作业比较有利,但对短作业不利(相对SPF和高响应比);有利于CPU繁忙型作业,而不利于I/0繁忙型作业。【跨考解答】:为什么CPU繁忙型是长作业,因为长短是使用CPU的长短,I/O繁忙型使用CPU比较短。' R' J$ G9 ^* G% c0 D3 q
' S3 y1 Z2 H# x, h& i4 [
3.短进程优先调度算法(SPF)- V( o) s3 ^# o8 l; p6 m+ M" F( _' A0 N
短作业(进程)优先调度算法是指对短作业(进程)优先调度的算法。短进程优先(SPF) 调度算法从就绪队列中选择一个估计运行时间最短的进程,将处理机分配给它,使之立即执行,直到完成或发生某事件而阻塞时,才释放处理机。(每次调度都选就绪队列中最短的) # O$ [1 [6 W* }% p" f+ w! u# @# P6 A0 o$ I
SPF调度算法也存在不容忽视的缺点:1) 该算法对长作业不利。更为严重的是,若有一长进程进入就绪队列,由于调度程序总是优先调度那些(即使是后来进来的)短作业,将导致长作业长期不被调度(饥饿)。 3 @ W; T6 X$ M. }8 T, D2)该算法完全未考虑作业的紧迫程度,因而不能保证紧追性作业会被及时处理。( n! n4 S+ N) c- a+ u0 U
3)由于作业的长短只是根据用户所提供的估计执行时间而定的,而用户又可能会有意或无 4 A, ~$ }5 U" I意地缩短其作业的估计运行时间,致使该算法不一定能真正做到短作业优先调度。3 A5 b. t6 u% b" Q& w
: W/ a( i/ Y3 K8 p7 N# l【注意】 SPF调度算法的平均等待时间、平均周转时间最少。 , @' Q4 x6 D# p5 n$ G5 h/ I1 E D* @. w4 \7 r7 g
4.优先级调度算法4 y# @9 W7 u$ E4 u8 c1 X/ I
在进程调度中,优先级调度算法每次从就绪队列中选择优先级最高的进程,将处理机分配给它,使之投入运行。 * N, ^( W$ U3 U& |1 m6 s / Z) _: c: n4 b* `% S# r根据新的更高优先级进程能否抢占正在执行的进程,可将该调度算法分为如下两种: 3 R% g* Z. Z3 n/ i) Y) B5 \* H k7 z& w" G' q" Q) I0 s
非剥夺式优先级调度算法。当一个进程正在处理机上运行时,即使有某个更为重要或紧迫的进程进入就绪队列,仍然让正在运行的进程继续运行,直到由于其自身的原因而主动让出处理机时(任务完成或等待事件),才把处理机分配给更为重要或紧迫的进程。: t b3 A8 G( U5 Z, [" f
剥夺式优先级调度算法。当一个进程正在处理机上运行时,若有某个更为重要或紧迫的进程进入就绪队列,则立即暂停正在运行的进程,将处理机分配给更重要或紧迫的进程。 6 ]& C9 B( p6 P3 x而根据进程创建后其优先级是否可以改变,可以将进程优先级分为以下两种: ' V: \) H. a7 _/ z/ n1 y+ C6 ^. c; F
静态优先级。优先级是在创建进程时确定的,且在进程的整个运行期间保持不变。确定静态优先级的主要依据有进程类型、进程对资源的要求、用户要求。 [5 r( Z: b: |* M3 D
动态优先级。在进程运行过程中,根据进程情况的变化动态调整优先级。动态调整优先级的主要依据有进程占有CPU 时间的长短、就绪进程等待CPU 时间的长短。! F5 ]% Q6 G. z9 K
一般来说,进程优先级的设置可以参照以下原则:: o4 Y* |! e2 q, R' z2 R+ e
- i: {, d" N9 c4 V* g& N系统进程>用户进程。系统进程作为系统的管理者,理应拥有更高的优先级。8 J- X( u+ G- U) q
交互型进程>非交互型进程(或前台进程>后台进程)。大家平时在使用手机时,在前台运行的正在和你交互的进程应该更快速地响应你,因此自然需要被优先处理,即要有更高的优先级。 7 i2 H$ x) b' r! R% h6 YI/0 型进程>计算(CPU)型进程。我们知道, I/0 设备(如打印机)的处理速度要比CPU 慢得多,因此若将I/0 型进程的优先级设置得更高,就更有可能让I/0 设备尽早开始工作,进而提升系统的整体效率。 ' O- b* k9 N8 b5.时间片轮转调度算法 % j) `6 U& d. m时间片轮转调度算法主要适用于分时系统。在这种算法中,系统将所有就绪进程按到达时间 * h+ s9 F6 F8 i* l) r& p, u: v' Q的先后次序排成一个队列,进程调度程序总是选择就绪队列中的第一个进程执行,即先来先服务的原则,但仅能运行一个时间片,如l00ms 。在使用完一个时间片后,即使进程并未完成其运行,它也必须释放出(被剥夺)处理机给下一个就绪的进程,而被剥夺的进程返回到就绪队列的末尾重新排队,等候再次运行。 1 A, U, V, o& ?. k' ~6 a, q# \& |1 J8 U h" G
在时间片轮转调度算法中,时间片的大小对系统性能的影响很大。若时间片足够大,以至于所有进程都能在一个时间片内执行完毕,则时间片轮转调度算法就退化为先来先服务调度算法。若时间片很小,则处理机将在进程间过于频繁地切换,使处理机的开销增大,而真正用于运行用户进程的时间将减少。因此,时间片的大小应选择适当。 . V& d! M! H( F+ v9 ~( C- u# x4 k0 i6 D1 M
时间片的长短通常由以下因素确定:系统的响应时间、就绪队列中的进程数目和系统的处理 $ I9 D1 ^ S5 v |/ N6 E能力。 1 y- D/ z( F# o" c# }0 b8 a8 d 0 G$ r+ L, l4 N( t: O u6.高响应比优先调度算法' O7 y$ c/ F3 w- H- U
高响应比优先调度算法是对FCFS调度算法和SPF调度算法的一种综合平衡,同时考虑了每个作业的等待时间和估计的运行时间。在每次进行作业调度时,先计算后备作业队列中每个作业的响应比,从中选出响应比最高的作业投入运行。响应比的变化规律可描述为:8 w4 t' q" X) v7 V) i# ~
响应比=(等待时间+要求服务时间)/要求服务时间 % c7 M g- t1 {* U* t根据公式可知: & K3 ^% c% H9 x W, w* }1 k' e' c- G" ?5 b0 g0 d5 Z
作业的等待时间相同时,要求服务时间越短,响应比越高,有利于短作业。1 K8 w* C: x6 [, J, P; P
要求服务时间相同时,作业的响应比由其等待时间决定,等待时间越长,其响应比越高,因而它实现的是先来先服务。 X4 C) d; n7 V, I对于长作业,作业的响应比可以随等待时间的增加而提高,等待时间足够长时,其响应比便可升到很高,从而也可获得处理机。因此,克服了饥饿状态,兼顾了长作业。' f7 N6 a. G8 r; _' |
7.多级反馈队列调度算法" \+ t8 N+ W8 I
多级反馈队列调度算法是时间片轮转调度算法和优先级调度算法的综合与发展,如下图所示。通过动态调整进程优先级和时间片大小,多级反馈队列调度算法可以兼顾多方面的系统目标。例如,为提高系统吞吐量和缩短平均周转时间而照顾短进程;为获得较好的I/0 设备利用率和缩短响应时间而照顾I/0 型进程;同时,也不必事先估计进程的执行时间。 ' ?8 W8 p6 D* l1 m5 z% y) }4 h" E * i" Q* z3 g1 Z( F 1 z: A+ ^+ d: a- t; x$ \) l; }8 j% \( [, b6 P9 R( P& s# o
多级反馈队列调度算法的实现思想如下:# {8 q, A$ X; f! A