|
zdjpnwusi3u64012786252.gif (60.41 KB, 下載次數(shù): 0)
下載附件
保存到相冊
zdjpnwusi3u64012786252.gif
前天 22:07 上傳
! n, B$ D6 F; i( {0 D5 V點(diǎn)擊上方藍(lán)色字體,關(guān)注我們' d/ X. e2 q, L; F g
) L! b+ h! z. Z d. o, |在 Linux 系統(tǒng)中,進(jìn)程狀態(tài)及其轉(zhuǎn)換關(guān)系是進(jìn)程調(diào)度和管理的核心。我們可以將這些狀態(tài)視作進(jìn)程在其生命周期中所處的不同階段。2 O, W" l6 X# W! g3 j$ n3 N8 k
: I$ K6 }9 D5 s
ykyaecwsze564012786352.png (72.79 KB, 下載次數(shù): 0)
下載附件
保存到相冊
ykyaecwsze564012786352.png
前天 22:07 上傳
; n" l Z! A1 f3 O2 V進(jìn)程各狀態(tài)之間的切換- k' c% ?. j: {- ~( D
, \2 e8 W+ R* Y: s5 [: h) W
1、就緒態(tài)(Ready)/ f% L. |1 c; h/ Q2 F/ r
2 `' p3 q. ?; C5 w) ]就緒態(tài)表示進(jìn)程已經(jīng)具備執(zhí)行的條件,所有資源都已準(zhǔn)備好,但由于 CPU 正在忙于執(zhí)行其他任務(wù),進(jìn)程暫時(shí)沒有獲得執(zhí)行權(quán)。
8 b% Y0 x) |# A
2 z9 _/ ^& ^" I- o) f就緒態(tài)是動態(tài)的,當(dāng) CPU 變得空閑時(shí),調(diào)度器會從就緒態(tài)鏈表中選擇一個(gè)進(jìn)程進(jìn)行執(zhí)行。
2 n* Z c. L( H4 ~! X( K( D2 T
& s9 A" v8 v2 x6 B/ i/ o轉(zhuǎn)換關(guān)系:9 p& f9 o T1 d4 h8 z/ S
從創(chuàng)建態(tài)進(jìn)入就緒態(tài):進(jìn)程在創(chuàng)建時(shí)進(jìn)入就緒態(tài),等待被調(diào)度。從運(yùn)行態(tài)回到就緒態(tài):當(dāng)進(jìn)程的時(shí)間片耗盡或 CPU 被其他更高優(yōu)先級的進(jìn)程搶占,進(jìn)程會回到就緒態(tài),等待下次調(diào)度。
7 ]( f) O/ B/ n* {5 N$ H$ } ^0 a2 N/ o0 c9 x. U- F
2、運(yùn)行態(tài)(Running)
- h8 L s" t! Y' D8 A+ s6 B運(yùn)行態(tài)表示進(jìn)程正在被 CPU 執(zhí)行。CPU 將按照調(diào)度算法分配給該進(jìn)程時(shí)間片,允許其在有限時(shí)間內(nèi)執(zhí)行。
1 S2 U) P* y, T; e- w# f0 p7 c! d0 E' n
轉(zhuǎn)換關(guān)系:' U; n/ e5 D( I- Z, V3 g) Y
從就緒態(tài)進(jìn)入運(yùn)行態(tài):當(dāng)調(diào)度器選中某個(gè)進(jìn)程并為其分配 CPU 時(shí),進(jìn)程進(jìn)入運(yùn)行態(tài)。從運(yùn)行態(tài)轉(zhuǎn)換到其他狀態(tài):- V/ Y+ R2 B' r0 W" O& M4 |7 l
如果進(jìn)程時(shí)間片耗盡,會返回到就緒態(tài)。如果進(jìn)程需要等待某種資源或事件,會進(jìn)入睡眠態(tài)(等待態(tài))。進(jìn)程也可以通過收到信號進(jìn)入暫停態(tài)。
/ L% \# Q+ T/ `) a# L' a
^2 C1 \: f* E- ~9 n7 ^3、僵尸態(tài)(Zombie)+ i5 @/ J4 r# M. ?
僵尸態(tài)進(jìn)程(Zombie Process)是指進(jìn)程已完成執(zhí)行,但其父進(jìn)程尚未通過 wait() 或 waitpid() 系統(tǒng)調(diào)用獲取其退出狀態(tài)并清理資源。/ b o1 C, Y8 |" W3 K; I: K
; f+ z$ z5 Y/ ^" Y& }% n, A因此,進(jìn)程仍然保留著一個(gè)條目以供父進(jìn)程讀取其退出狀態(tài)。% y; Q {1 b/ ?/ ^* G! l2 \" m
0 K G% x) E1 L3 K9 x! S
僵尸態(tài)進(jìn)程不會消耗任何 CPU 資源,但其進(jìn)程表項(xiàng)仍占用系統(tǒng)資源。2 e9 ], Z, _3 ~4 v1 y2 F
+ Z: P6 c/ S7 U [5 {
, q( D. O- ~9 f
轉(zhuǎn)換關(guān)系:+ ^: a$ C9 v1 K6 c4 ^+ }
從運(yùn)行態(tài)進(jìn)入僵尸態(tài):當(dāng)進(jìn)程執(zhí)行完畢并調(diào)用 exit() 結(jié)束運(yùn)行后,進(jìn)入僵尸態(tài),等待父進(jìn)程回收其資源。從僵尸態(tài)到消失:一旦父進(jìn)程讀取子進(jìn)程的退出狀態(tài),系統(tǒng)會刪除僵尸進(jìn)程條目,釋放其占用的資源。4 l/ q; I' c- _4 X
1 G t0 I& |" w ?4、可中斷睡眠態(tài)(Interruptible Sleep)5 f& J( k/ ~: r9 A2 m, s% M
可中斷睡眠態(tài)是進(jìn)程正在等待某一事件的發(fā)生,例如等待 I/O 操作完成。
- W, |& U" X, c& o" Z# g: `. _; L2 i& v, Q k6 J
此時(shí)進(jìn)程處于睡眠狀態(tài),可以通過信號喚醒。
; u# _/ S4 @: q- B
: ^8 I/ H4 x) Y5 N轉(zhuǎn)換關(guān)系:
( k( b+ i! V+ `9 S1 p從運(yùn)行態(tài)進(jìn)入可中斷睡眠態(tài):進(jìn)程調(diào)用某些阻塞型系統(tǒng)調(diào)用(如 read() 等)等待某種外部事件時(shí)進(jìn)入此狀態(tài)。從可中斷睡眠態(tài)進(jìn)入就緒態(tài):當(dāng)外部事件(如 I/O 完成或信號觸發(fā))發(fā)生時(shí),進(jìn)程被喚醒,進(jìn)入就緒態(tài)。
% p, G+ @ }! e1 J( u7 [* |' K) S8 r" U
5、不可中斷睡眠態(tài)(Uninterruptible Sleep)
. o9 ?' M; y. K4 D- o2 E" k5 B$ A- F不可中斷睡眠態(tài)是進(jìn)程等待某種無法通過信號喚醒的資源。
! y* p4 q, `3 f1 n9 h! W; }/ s- e, K, R# a0 m# Z2 ^, _" @. y
例如,等待硬件操作完成時(shí),進(jìn)程會進(jìn)入此狀態(tài)。此時(shí)進(jìn)程不會響應(yīng)任何信號,直到所等待的事件發(fā)生。* g, l, ^9 o$ b
: Q( `1 U0 v& j* U
轉(zhuǎn)換關(guān)系:
5 b* c& W+ N. P5 H' \從運(yùn)行態(tài)進(jìn)入不可中斷睡眠態(tài):進(jìn)程等待特定資源(如硬件 I/O)時(shí)進(jìn)入此狀態(tài)。從不可中斷睡眠態(tài)進(jìn)入就緒態(tài):( |) P$ P3 r- X! h
當(dāng)?shù)却馁Y源可用時(shí),進(jìn)程會從不可中斷睡眠態(tài)醒來,重新進(jìn)入就緒態(tài)。" t. L7 x; n! Y U# i. l
# Y9 [4 g9 A8 g" k
6、暫停態(tài)(Stopped)5 |9 u$ k# |, A: Y Z% c Z* k
暫停態(tài)是進(jìn)程被暫停運(yùn)行的狀態(tài),通常由接收到 SIGSTOP 信號導(dǎo)致。6 O3 W. r; q7 z, R
% L# X3 ~, O1 a# H* a, u$ b+ W進(jìn)程停止運(yùn)行但沒有終止,所有的上下文信息都會被保留。
( T* v& G( \9 ]. G* o% O, q8 x4 ?* Q2 T- z; C
轉(zhuǎn)換關(guān)系:
4 G7 U0 e% z# `: H$ V, D) Y# k' p從運(yùn)行態(tài)或就緒態(tài)進(jìn)入暫停態(tài):進(jìn)程接收到 SIGSTOP 信號后會進(jìn)入暫停態(tài),暫停其執(zhí)行。從暫停態(tài)回到就緒態(tài):當(dāng)進(jìn)程接收到 SIGCONT 信號時(shí),進(jìn)程恢復(fù)執(zhí)行并進(jìn)入就緒態(tài),等待 CPU 調(diào)度。2 G* S* b) B- m1 l
+ _( x* b& F, `0 }( j9 sLinux 進(jìn)程的狀態(tài)變化主要受 CPU 調(diào)度、系統(tǒng)調(diào)用、信號機(jī)制以及資源可用性等因素的影響。 G/ U8 t2 g; d. t8 D( k) {/ u
) Q: }2 G, o, X8 B$ U
掌握進(jìn)程狀態(tài)的轉(zhuǎn)換不僅有助于理解 Linux 的調(diào)度機(jī)制,也能有效幫助調(diào)試與優(yōu)化系統(tǒng)中的進(jìn)程行為。. g! e2 R' j! t( A
zp0lb15juaa64012786452.jpg (71.14 KB, 下載次數(shù): 0)
下載附件
保存到相冊
zp0lb15juaa64012786452.jpg
前天 22:07 上傳
- H6 q a6 t5 U5 m9 l' H4 S# k( R4 g; F! Y7 e' l
yogi2f0otvd64012786552.gif (45.46 KB, 下載次數(shù): 0)
下載附件
保存到相冊
yogi2f0otvd64012786552.gif
前天 22:07 上傳
6 L( l3 _- j: V" V, y) d$ q/ x, @
點(diǎn)擊閱讀原文,更精彩~ |
|