|
zdjpnwusi3u64012786252.gif (60.41 KB, 下載次數(shù): 0)
下載附件
保存到相冊
zdjpnwusi3u64012786252.gif
前天 22:07 上傳
( j8 r- I2 Z/ S5 }
點擊上方藍色字體,關注我們
; a( z! b) o+ v7 j0 @: X; A3 C6 Y" d2 l" x
在 Linux 系統(tǒng)中,進程狀態(tài)及其轉換關系是進程調度和管理的核心。我們可以將這些狀態(tài)視作進程在其生命周期中所處的不同階段。
& `6 }2 R5 X Q8 `
& t, q( q! _0 k7 R7 f
ykyaecwsze564012786352.png (72.79 KB, 下載次數(shù): 1)
下載附件
保存到相冊
ykyaecwsze564012786352.png
前天 22:07 上傳
7 I2 x/ k4 k! ]! u# ^. _. M
進程各狀態(tài)之間的切換5 j. P1 ?. h( R8 j+ O3 G4 s6 _
' ?( x8 C) w' P5 C9 n3 l' C
1、就緒態(tài)(Ready)7 v' D4 n- H C
3 o4 c5 p0 o5 |$ u( F2 |9 p; |
就緒態(tài)表示進程已經具備執(zhí)行的條件,所有資源都已準備好,但由于 CPU 正在忙于執(zhí)行其他任務,進程暫時沒有獲得執(zhí)行權。1 i- P) Y' L" a4 ~
* c* I& m7 n q* j+ \就緒態(tài)是動態(tài)的,當 CPU 變得空閑時,調度器會從就緒態(tài)鏈表中選擇一個進程進行執(zhí)行。
- m& E; Y" W' E$ A# k* {! L2 d9 R: W1 N0 G$ l. z
轉換關系:
8 B# \* S8 |+ a* K: t/ w從創(chuàng)建態(tài)進入就緒態(tài):進程在創(chuàng)建時進入就緒態(tài),等待被調度。從運行態(tài)回到就緒態(tài):當進程的時間片耗盡或 CPU 被其他更高優(yōu)先級的進程搶占,進程會回到就緒態(tài),等待下次調度。
$ Y# ^/ R* a/ H4 J }, y$ n& e. S9 `+ U7 F8 W
2、運行態(tài)(Running)# H! u+ F2 C! h' Y% K
運行態(tài)表示進程正在被 CPU 執(zhí)行。CPU 將按照調度算法分配給該進程時間片,允許其在有限時間內執(zhí)行。
) A* n0 a! W0 `# @& ~: m1 P3 l/ V- | d* `1 m: U9 S! D; N/ d. ]! w; a
轉換關系:
8 P2 S" F I+ s7 Q' W4 q- W6 @從就緒態(tài)進入運行態(tài):當調度器選中某個進程并為其分配 CPU 時,進程進入運行態(tài)。從運行態(tài)轉換到其他狀態(tài):
; V+ W' Q( Y) s% b0 t3 E* ]8 a如果進程時間片耗盡,會返回到就緒態(tài)。如果進程需要等待某種資源或事件,會進入睡眠態(tài)(等待態(tài))。進程也可以通過收到信號進入暫停態(tài)。
4 v, }+ d$ U$ V" |9 |3 x; `+ e
4 r0 p7 i [# R4 k3、僵尸態(tài)(Zombie)
& `$ p8 a5 ]+ K) K N( P僵尸態(tài)進程(Zombie Process)是指進程已完成執(zhí)行,但其父進程尚未通過 wait() 或 waitpid() 系統(tǒng)調用獲取其退出狀態(tài)并清理資源。+ X. p' Z3 q F2 Y5 ?+ V
3 J1 N" S0 _1 [ x! w1 h( E7 @0 _
因此,進程仍然保留著一個條目以供父進程讀取其退出狀態(tài)。
3 z, n* U8 V& S/ ?
9 e1 P$ Q& U; v( ]僵尸態(tài)進程不會消耗任何 CPU 資源,但其進程表項仍占用系統(tǒng)資源。
% I* ]2 Q2 n5 Q9 H9 p( Y! x& o7 l. K" X0 O; S. z- e1 T; Q
5 l1 ^* C6 V/ j! U" h7 {7 e/ t, P+ E轉換關系:
3 D) `. l% K$ K! V! ~從運行態(tài)進入僵尸態(tài):當進程執(zhí)行完畢并調用 exit() 結束運行后,進入僵尸態(tài),等待父進程回收其資源。從僵尸態(tài)到消失:一旦父進程讀取子進程的退出狀態(tài),系統(tǒng)會刪除僵尸進程條目,釋放其占用的資源。. [( R$ q0 h% Y+ D( a9 H
6 K6 u8 R _- f( C. y5 o+ H4、可中斷睡眠態(tài)(Interruptible Sleep)
" @2 o1 x* ?- H" [1 L) w可中斷睡眠態(tài)是進程正在等待某一事件的發(fā)生,例如等待 I/O 操作完成。( n2 k8 v/ \! E
; t: j1 g3 h" F: A I8 ^
此時進程處于睡眠狀態(tài),可以通過信號喚醒。
& O+ ?- B( D9 M+ X+ m0 V; b
5 F' L V6 J" O; J& W) B4 n/ P2 k轉換關系:
# \% Z3 C* H, [6 I6 j4 P: e從運行態(tài)進入可中斷睡眠態(tài):進程調用某些阻塞型系統(tǒng)調用(如 read() 等)等待某種外部事件時進入此狀態(tài)。從可中斷睡眠態(tài)進入就緒態(tài):當外部事件(如 I/O 完成或信號觸發(fā))發(fā)生時,進程被喚醒,進入就緒態(tài)。" P2 m$ D$ `$ M6 @ g
! u/ o, O# y# l; _. u5 a* ~5、不可中斷睡眠態(tài)(Uninterruptible Sleep); S! p9 ?' u5 x, e8 n5 M
不可中斷睡眠態(tài)是進程等待某種無法通過信號喚醒的資源。
$ G1 J" S" R! y
+ T& o+ T; j! ^- n$ u" r例如,等待硬件操作完成時,進程會進入此狀態(tài)。此時進程不會響應任何信號,直到所等待的事件發(fā)生。
% l% G- E) _8 {" ^: d
i$ l' i; w7 a3 s7 @8 \ R轉換關系:$ h: Z9 l. R7 y- S% R
從運行態(tài)進入不可中斷睡眠態(tài):進程等待特定資源(如硬件 I/O)時進入此狀態(tài)。從不可中斷睡眠態(tài)進入就緒態(tài):- r d) @: e) H* ^
當?shù)却馁Y源可用時,進程會從不可中斷睡眠態(tài)醒來,重新進入就緒態(tài)。' I. p# D# i' w8 O; F
4 D) ?6 n, I* N! a6、暫停態(tài)(Stopped)- B' `. q0 J2 A6 E( B7 [# h0 c9 j
暫停態(tài)是進程被暫停運行的狀態(tài),通常由接收到 SIGSTOP 信號導致。
4 g, T) e# ?. p3 I
, r7 H8 m& R; f8 M5 K* A* P進程停止運行但沒有終止,所有的上下文信息都會被保留。
' e- f* V! w9 x. R# A1 z9 {* O' [1 O Y, i; C3 w
轉換關系:( T3 ], r: `/ ?" I( M" l1 A/ U+ l
從運行態(tài)或就緒態(tài)進入暫停態(tài):進程接收到 SIGSTOP 信號后會進入暫停態(tài),暫停其執(zhí)行。從暫停態(tài)回到就緒態(tài):當進程接收到 SIGCONT 信號時,進程恢復執(zhí)行并進入就緒態(tài),等待 CPU 調度。
, J; D5 z0 ~+ m, j# t3 H. V6 y/ }- C5 l0 \. i! R
Linux 進程的狀態(tài)變化主要受 CPU 調度、系統(tǒng)調用、信號機制以及資源可用性等因素的影響。4 o. ~: b! t9 M2 l9 P/ ?% I1 j
3 j4 n1 n5 H9 [3 e掌握進程狀態(tài)的轉換不僅有助于理解 Linux 的調度機制,也能有效幫助調試與優(yōu)化系統(tǒng)中的進程行為。3 @) o D! Q P; D3 @# Z
zp0lb15juaa64012786452.jpg (71.14 KB, 下載次數(shù): 1)
下載附件
保存到相冊
zp0lb15juaa64012786452.jpg
前天 22:07 上傳
! j) D i' u m- L: w! G
2 } `0 N) e6 Y/ y q j( [2 ?. ~
yogi2f0otvd64012786552.gif (45.46 KB, 下載次數(shù): 0)
下載附件
保存到相冊
yogi2f0otvd64012786552.gif
前天 22:07 上傳
: [, Q) Y' L0 q- @. Z點擊閱讀原文,更精彩~ |
|