|
zdjpnwusi3u64012786252.gif (60.41 KB, 下載次數(shù): 1)
下載附件
保存到相冊(cè)
zdjpnwusi3u64012786252.gif
2024-11-23 22:07 上傳
2 |2 s' E& {7 E5 |# |
點(diǎn)擊上方藍(lán)色字體,關(guān)注我們
: n' G; i7 ^ N& z( [
. k4 v/ O; _9 Z# q1 z9 c在 Linux 系統(tǒng)中,進(jìn)程狀態(tài)及其轉(zhuǎn)換關(guān)系是進(jìn)程調(diào)度和管理的核心。我們可以將這些狀態(tài)視作進(jìn)程在其生命周期中所處的不同階段。- G- C2 [9 O( C
* r; @2 e) S$ f
ykyaecwsze564012786352.png (72.79 KB, 下載次數(shù): 2)
下載附件
保存到相冊(cè)
ykyaecwsze564012786352.png
2024-11-23 22:07 上傳
3 Q( @5 P( Z! L* j' L, q
進(jìn)程各狀態(tài)之間的切換
: ?6 [ t2 \1 g6 a
" B% T3 q: r: t1、就緒態(tài)(Ready)
6 Y% Q6 S/ ], W8 e w! A: Y. @# A' p+ N/ L
就緒態(tài)表示進(jìn)程已經(jīng)具備執(zhí)行的條件,所有資源都已準(zhǔn)備好,但由于 CPU 正在忙于執(zhí)行其他任務(wù),進(jìn)程暫時(shí)沒有獲得執(zhí)行權(quán)。
; A) V) Y# Z' U8 L% v! a( ]' q; ]9 S* q7 L) K3 J: Y
就緒態(tài)是動(dòng)態(tài)的,當(dāng) CPU 變得空閑時(shí),調(diào)度器會(huì)從就緒態(tài)鏈表中選擇一個(gè)進(jìn)程進(jìn)行執(zhí)行。( @& e% d" }) s* B# M: v* d
& P, Y/ ^+ \9 L轉(zhuǎn)換關(guān)系:
. `: T/ n; A# Z2 f: U8 A從創(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í)的進(jìn)程搶占,進(jìn)程會(huì)回到就緒態(tài),等待下次調(diào)度。
: a# d- f, e) s2 E" a2 M- |1 ^0 |) B; [/ s1 _0 g9 N% x
2、運(yùn)行態(tài)(Running)3 Q- c) n8 k6 O+ k9 T4 M) E; H0 g
運(yùn)行態(tài)表示進(jìn)程正在被 CPU 執(zhí)行。CPU 將按照調(diào)度算法分配給該進(jìn)程時(shí)間片,允許其在有限時(shí)間內(nèi)執(zhí)行。
! j+ E* V& a, p S9 d! C5 w5 E# T3 l
轉(zhuǎn)換關(guān)系:
7 B; r" O! Z H從就緒態(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):/ P5 d9 C& @9 c. @, T/ F
如果進(jìn)程時(shí)間片耗盡,會(huì)返回到就緒態(tài)。如果進(jìn)程需要等待某種資源或事件,會(huì)進(jìn)入睡眠態(tài)(等待態(tài))。進(jìn)程也可以通過收到信號(hào)進(jìn)入暫停態(tài)。
# {. w+ \5 [3 A' U x9 p2 t
- M, t6 w) a1 \+ D, J) c; l3、僵尸態(tài)(Zombie)
9 C2 ?- F6 A* x8 b僵尸態(tài)進(jìn)程(Zombie Process)是指進(jìn)程已完成執(zhí)行,但其父進(jìn)程尚未通過 wait() 或 waitpid() 系統(tǒng)調(diào)用獲取其退出狀態(tài)并清理資源。
$ T# [: _) i( n! z/ I. U u8 l. W
因此,進(jìn)程仍然保留著一個(gè)條目以供父進(jìn)程讀取其退出狀態(tài)。1 x4 W/ [0 e9 v$ E! K, p
0 x) ?5 B/ K1 M2 E) \僵尸態(tài)進(jìn)程不會(huì)消耗任何 CPU 資源,但其進(jìn)程表項(xiàng)仍占用系統(tǒng)資源。$ O5 s4 x- ^, K$ d& P8 |+ r
# X. s/ A+ v7 V( d. \- f
, ]& i- V3 N; ]" ^+ s轉(zhuǎn)換關(guān)系:
. \, s' B3 Z s% R從運(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)會(huì)刪除僵尸進(jìn)程條目,釋放其占用的資源。
- _/ D: l2 p5 e' K# f* H5 d3 X3 z. q( n; R" L
4、可中斷睡眠態(tài)(Interruptible Sleep)
' J5 y0 b- Z9 C; M$ s& r$ _可中斷睡眠態(tài)是進(jìn)程正在等待某一事件的發(fā)生,例如等待 I/O 操作完成。7 Y8 n2 m/ k( Q4 e6 r
7 x, P- i5 ]$ Q9 i- V此時(shí)進(jìn)程處于睡眠狀態(tài),可以通過信號(hào)喚醒。
9 O* _( z3 s, e) C3 K i/ ?& r" B3 m) @+ P) e5 M w) o
轉(zhuǎn)換關(guān)系:
$ S e+ Q9 S# i6 R( L& b7 ]. z從運(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 完成或信號(hào)觸發(fā))發(fā)生時(shí),進(jìn)程被喚醒,進(jìn)入就緒態(tài)。6 L: p8 {: V8 \& j4 s3 i
' |& x, G6 k% p5 ?/ ~# w' u5、不可中斷睡眠態(tài)(Uninterruptible Sleep)- t- U: U1 p' t0 w7 ~+ K
不可中斷睡眠態(tài)是進(jìn)程等待某種無(wú)法通過信號(hào)喚醒的資源。3 j& _2 w; g7 r0 U
! ~# r3 O" ~( S+ o6 T: [9 }3 v6 ?例如,等待硬件操作完成時(shí),進(jìn)程會(huì)進(jìn)入此狀態(tài)。此時(shí)進(jìn)程不會(huì)響應(yīng)任何信號(hào),直到所等待的事件發(fā)生。
) K4 L: i. K. @2 q
; B8 ?& s2 d* ]轉(zhuǎn)換關(guān)系:
$ J8 L4 \2 q- a0 ^' [# O從運(yùn)行態(tài)進(jìn)入不可中斷睡眠態(tài):進(jìn)程等待特定資源(如硬件 I/O)時(shí)進(jìn)入此狀態(tài)。從不可中斷睡眠態(tài)進(jìn)入就緒態(tài):
" `9 b/ M# f( o7 u7 W' W當(dāng)?shù)却馁Y源可用時(shí),進(jìn)程會(huì)從不可中斷睡眠態(tài)醒來(lái),重新進(jìn)入就緒態(tài)。
+ ^/ ]7 m' i: W* ?, O. c
( L! v; q. n" G- B- z' H. m, n6、暫停態(tài)(Stopped)& {- e- {: P. x1 B3 y, q9 b3 d) r
暫停態(tài)是進(jìn)程被暫停運(yùn)行的狀態(tài),通常由接收到 SIGSTOP 信號(hào)導(dǎo)致。
. Y) z/ r% R$ p$ i g, K8 K x4 f4 _$ b9 F" s
進(jìn)程停止運(yùn)行但沒有終止,所有的上下文信息都會(huì)被保留。- c x: E) M. L4 s6 L( P
% K9 d1 \4 {. f) I, e6 Y; z轉(zhuǎn)換關(guān)系:' D3 R( D5 _- L5 ~: X. A
從運(yùn)行態(tài)或就緒態(tài)進(jìn)入暫停態(tài):進(jìn)程接收到 SIGSTOP 信號(hào)后會(huì)進(jìn)入暫停態(tài),暫停其執(zhí)行。從暫停態(tài)回到就緒態(tài):當(dāng)進(jìn)程接收到 SIGCONT 信號(hào)時(shí),進(jìn)程恢復(fù)執(zhí)行并進(jìn)入就緒態(tài),等待 CPU 調(diào)度。- V8 e, v0 l0 X) \' \
V& a2 z( B# W3 ELinux 進(jìn)程的狀態(tài)變化主要受 CPU 調(diào)度、系統(tǒng)調(diào)用、信號(hào)機(jī)制以及資源可用性等因素的影響。
! ^ C, e- d4 Q9 }% l: d9 O. t/ }# E( T3 V' E" ~
掌握進(jìn)程狀態(tài)的轉(zhuǎn)換不僅有助于理解 Linux 的調(diào)度機(jī)制,也能有效幫助調(diào)試與優(yōu)化系統(tǒng)中的進(jìn)程行為。
K. O+ G. m. ^+ @" R$ I- E0 X
zp0lb15juaa64012786452.jpg (71.14 KB, 下載次數(shù): 2)
下載附件
保存到相冊(cè)
zp0lb15juaa64012786452.jpg
2024-11-23 22:07 上傳
! c' n; L E* Q y% s$ c, k7 m- P/ y
# ~( u5 l7 E$ C
yogi2f0otvd64012786552.gif (45.46 KB, 下載次數(shù): 2)
下載附件
保存到相冊(cè)
yogi2f0otvd64012786552.gif
2024-11-23 22:07 上傳
- e2 c& r. ` U& j點(diǎn)擊閱讀原文,更精彩~ |
|