|
zdjpnwusi3u64012786252.gif (60.41 KB, 下載次數(shù): 1)
下載附件
保存到相冊
zdjpnwusi3u64012786252.gif
2024-11-23 22:07 上傳
) k5 k( I) q7 h- E% u9 T+ L p點擊上方藍色字體,關(guān)注我們0 E7 ` r% @* k D# f& e
% q$ z0 m4 u% `" z在 Linux 系統(tǒng)中,進程狀態(tài)及其轉(zhuǎn)換關(guān)系是進程調(diào)度和管理的核心。我們可以將這些狀態(tài)視作進程在其生命周期中所處的不同階段。: S% H L4 g3 Z, I# w1 r
4 f: o9 ~/ t8 ^" Q2 b6 q
ykyaecwsze564012786352.png (72.79 KB, 下載次數(shù): 2)
下載附件
保存到相冊
ykyaecwsze564012786352.png
2024-11-23 22:07 上傳
6 _7 @. b1 {4 l# \8 J0 k; {進程各狀態(tài)之間的切換9 Q5 k* m3 l1 E: N4 i
$ D) M1 h! U8 ]1 d9 \$ a, }1、就緒態(tài)(Ready)
9 {) v7 Q7 o) k. O3 Q: g2 S2 w1 t7 Q6 q; z4 A+ W8 C
就緒態(tài)表示進程已經(jīng)具備執(zhí)行的條件,所有資源都已準備好,但由于 CPU 正在忙于執(zhí)行其他任務(wù),進程暫時沒有獲得執(zhí)行權(quán)。/ z5 Q# i% i- S+ H
) i' E1 P3 A) b6 m, ~9 W" d2 m就緒態(tài)是動態(tài)的,當 CPU 變得空閑時,調(diào)度器會從就緒態(tài)鏈表中選擇一個進程進行執(zhí)行。1 |, r4 o9 z7 x( s6 A! G
7 Y% c' ~* e- R4 l5 x+ o轉(zhuǎn)換關(guān)系:0 J1 s$ Z8 ]$ B S1 \$ N: p- `+ h1 J& u2 E
從創(chuàng)建態(tài)進入就緒態(tài):進程在創(chuàng)建時進入就緒態(tài),等待被調(diào)度。從運行態(tài)回到就緒態(tài):當進程的時間片耗盡或 CPU 被其他更高優(yōu)先級的進程搶占,進程會回到就緒態(tài),等待下次調(diào)度。
2 C5 W& W. B/ `. }. u' J1 j+ h
2、運行態(tài)(Running)5 ^( k7 \' `$ e* R1 C" e" E$ ~# m
運行態(tài)表示進程正在被 CPU 執(zhí)行。CPU 將按照調(diào)度算法分配給該進程時間片,允許其在有限時間內(nèi)執(zhí)行。6 W5 F9 W' t# H, r/ a/ p/ W
/ e2 x: [! a& n' F轉(zhuǎn)換關(guān)系:( V! u( S- u) |$ m a* O5 @, C
從就緒態(tài)進入運行態(tài):當調(diào)度器選中某個進程并為其分配 CPU 時,進程進入運行態(tài)。從運行態(tài)轉(zhuǎn)換到其他狀態(tài):2 R- z% b, N% W8 e1 H# a
如果進程時間片耗盡,會返回到就緒態(tài)。如果進程需要等待某種資源或事件,會進入睡眠態(tài)(等待態(tài))。進程也可以通過收到信號進入暫停態(tài)。
( l+ w1 Y2 H; K: ?! ]6 C, l) j5 J( X" }2 e0 [5 Y* U
3、僵尸態(tài)(Zombie)
# R$ c, B3 @5 H9 q6 _6 Y: j6 C僵尸態(tài)進程(Zombie Process)是指進程已完成執(zhí)行,但其父進程尚未通過 wait() 或 waitpid() 系統(tǒng)調(diào)用獲取其退出狀態(tài)并清理資源。2 N6 k- l. y4 g5 t3 F2 W
$ K1 c2 k( h3 O/ |6 v
因此,進程仍然保留著一個條目以供父進程讀取其退出狀態(tài)。
: G& O; p! s, r( }% A9 o) p) x1 Z! ^8 X; }3 ?$ X
僵尸態(tài)進程不會消耗任何 CPU 資源,但其進程表項仍占用系統(tǒng)資源。
' X7 @, B# p1 _* ]1 m1 q! _, g; T! u. e4 ~% T( g
7 d' [; L: N7 B r
轉(zhuǎn)換關(guān)系:' `$ o* h: r+ E+ j& A
從運行態(tài)進入僵尸態(tài):當進程執(zhí)行完畢并調(diào)用 exit() 結(jié)束運行后,進入僵尸態(tài),等待父進程回收其資源。從僵尸態(tài)到消失:一旦父進程讀取子進程的退出狀態(tài),系統(tǒng)會刪除僵尸進程條目,釋放其占用的資源。/ j" }2 v, G- b$ b" z
7 @7 E& J2 B) S* T" \2 u& P6 A1 b8 ~4、可中斷睡眠態(tài)(Interruptible Sleep)
: d5 u* @; S% N" l7 {可中斷睡眠態(tài)是進程正在等待某一事件的發(fā)生,例如等待 I/O 操作完成。2 N, F0 W# J) ]8 c1 i& f
- \& }" w+ M% Z! g6 ?6 i, Z! l此時進程處于睡眠狀態(tài),可以通過信號喚醒。
. l. V, M7 L6 S9 y/ c0 |2 x' H* |: p+ Q# k$ C
轉(zhuǎn)換關(guān)系:
, u9 v8 u3 t8 J2 g- ~1 u從運行態(tài)進入可中斷睡眠態(tài):進程調(diào)用某些阻塞型系統(tǒng)調(diào)用(如 read() 等)等待某種外部事件時進入此狀態(tài)。從可中斷睡眠態(tài)進入就緒態(tài):當外部事件(如 I/O 完成或信號觸發(fā))發(fā)生時,進程被喚醒,進入就緒態(tài)。
8 f" N3 E! ] I0 S& v) B5 W6 P6 i) O% k0 X, g
5、不可中斷睡眠態(tài)(Uninterruptible Sleep)
, U* P2 h$ f: e不可中斷睡眠態(tài)是進程等待某種無法通過信號喚醒的資源。2 N. b5 P. `2 U5 I
* Q' _7 D4 B; y2 j) J/ }* Z& x) y例如,等待硬件操作完成時,進程會進入此狀態(tài)。此時進程不會響應(yīng)任何信號,直到所等待的事件發(fā)生。. i* q$ m" P8 P5 n% t9 Y+ O
, g8 h" D" N- ^% G+ S o0 T! ]轉(zhuǎn)換關(guān)系:8 \: Q4 f" I1 s0 y4 u1 c$ i! v
從運行態(tài)進入不可中斷睡眠態(tài):進程等待特定資源(如硬件 I/O)時進入此狀態(tài)。從不可中斷睡眠態(tài)進入就緒態(tài):
- y. m9 I( X& d# u& u4 J9 x當?shù)却馁Y源可用時,進程會從不可中斷睡眠態(tài)醒來,重新進入就緒態(tài)。9 d# y% c4 c o; e
& @ Q) o* J) p3 [4 `6、暫停態(tài)(Stopped)
% T. |2 `" J: V暫停態(tài)是進程被暫停運行的狀態(tài),通常由接收到 SIGSTOP 信號導(dǎo)致。
$ E1 e! G; M% ]5 x& ~# f2 |4 p7 G
進程停止運行但沒有終止,所有的上下文信息都會被保留。
0 y( b3 _* F. ~5 B
; v- h( w% ^! j轉(zhuǎn)換關(guān)系:" c$ X# V6 w5 _/ g$ O7 H7 l0 G( _
從運行態(tài)或就緒態(tài)進入暫停態(tài):進程接收到 SIGSTOP 信號后會進入暫停態(tài),暫停其執(zhí)行。從暫停態(tài)回到就緒態(tài):當進程接收到 SIGCONT 信號時,進程恢復(fù)執(zhí)行并進入就緒態(tài),等待 CPU 調(diào)度。1 n L+ E c" t1 X4 s6 F& {
, G+ \5 u; g$ G% y: b
Linux 進程的狀態(tài)變化主要受 CPU 調(diào)度、系統(tǒng)調(diào)用、信號機制以及資源可用性等因素的影響。; M- p: ?5 n& u- s
- ^* l' w9 [- l$ s; x9 D. f. d, z0 _掌握進程狀態(tài)的轉(zhuǎn)換不僅有助于理解 Linux 的調(diào)度機制,也能有效幫助調(diào)試與優(yōu)化系統(tǒng)中的進程行為。1 ~6 e. U7 o$ n1 l
zp0lb15juaa64012786452.jpg (71.14 KB, 下載次數(shù): 2)
下載附件
保存到相冊
zp0lb15juaa64012786452.jpg
2024-11-23 22:07 上傳
6 V: ~& s/ P$ E7 z/ R. Q, y
: u* U& g7 p" H0 Y2 `
yogi2f0otvd64012786552.gif (45.46 KB, 下載次數(shù): 2)
下載附件
保存到相冊
yogi2f0otvd64012786552.gif
2024-11-23 22:07 上傳
; ?- x5 ^% z. |# A+ m4 ~
點擊閱讀原文,更精彩~ |
|