http://blog.csdn.net/mu0206mu/article/details/7348618
◆運(yùn)行狀態(tài)(TASK_RUNNING)
當(dāng)進(jìn)程正在被CPU執(zhí)行,或已經(jīng)準(zhǔn)備就緒隨時(shí)可由調(diào)度程序執(zhí)行,則稱該進(jìn)程為處于運(yùn)行狀態(tài)(running)。進(jìn)程可以在
內(nèi)核
態(tài)運(yùn)行,也可以在用戶態(tài)運(yùn)行。當(dāng)系統(tǒng)資源已經(jīng)可用時(shí),進(jìn)程就被喚醒而進(jìn)入準(zhǔn)備運(yùn)行狀態(tài),該狀態(tài)稱為就緒態(tài)。這些狀態(tài)(圖中中間一列)在內(nèi)核中表示方法相同,都被成為處于TASK_RUNNING狀態(tài)。
◆可中斷睡眠狀態(tài)(TASK_INTERRUPTIBLE)
當(dāng)進(jìn)程處于可中斷等待狀態(tài)時(shí),系統(tǒng)不會(huì)調(diào)度該進(jìn)程執(zhí)行。當(dāng)系統(tǒng)產(chǎn)生一個(gè)中斷或者釋放了進(jìn)程正在等待的資源,或者進(jìn)程收到一個(gè)信號(hào),都可以喚醒進(jìn)程轉(zhuǎn)換到就緒狀態(tài)(運(yùn)行狀態(tài))。
◆不可中斷睡眠狀態(tài)(TASK_UNINTERRUPTIBLE)
與可中斷睡眠狀態(tài)類似。但處于該狀態(tài)的進(jìn)程只有被使用wake_up()函數(shù)明確喚醒時(shí)才能轉(zhuǎn)換到可運(yùn)行的就緒狀態(tài)。
◆暫停狀態(tài)(TASK_STOPPED)
當(dāng)進(jìn)程收到信號(hào)SIGSTOP、SIGTSTP、SIGTTIN或SIGTTOU時(shí)就會(huì)進(jìn)入暫停狀態(tài)。可向其發(fā)送SIGCONT信號(hào)讓進(jìn)程轉(zhuǎn)換到可運(yùn)行狀態(tài)。在Linux 0.11中,還未實(shí)現(xiàn)對該狀態(tài)的轉(zhuǎn)換處理。處于該狀態(tài)的進(jìn)程將被作為進(jìn)程終止來處理。
◆僵死狀態(tài)(TASK_ZOMBIE)
當(dāng)進(jìn)程已停止運(yùn)行,但其父進(jìn)程還沒有詢問其狀態(tài)時(shí),則稱該進(jìn)程處于僵死狀態(tài)。
當(dāng)一個(gè)進(jìn)程的運(yùn)行時(shí)間片用完,系統(tǒng)就會(huì)使用調(diào)度程序強(qiáng)制切換到其它的進(jìn)程去執(zhí)行。另外,如果進(jìn)程在內(nèi)核態(tài)執(zhí)行時(shí)需要等待系統(tǒng)的某個(gè)資源,此時(shí)該進(jìn)程就會(huì)調(diào)用sleep_on()或sleep_on_interruptible()自愿地放棄CPU的使用權(quán),而讓調(diào)度程序去執(zhí)行其它進(jìn)程。進(jìn)程則進(jìn)入睡眠狀態(tài)(TASK_UNINTERRUPTIBLE或TASK_INTERRUPTIBLE)。
只有當(dāng)進(jìn)程從“內(nèi)核運(yùn)行態(tài)”轉(zhuǎn)移到“睡眠狀態(tài)”時(shí),內(nèi)核才會(huì)進(jìn)行進(jìn)程切換操作。在內(nèi)核態(tài)下運(yùn)行的進(jìn)程不能被其它進(jìn)程搶占,而且一個(gè)進(jìn)程不能改變另一個(gè)進(jìn)程的狀態(tài)。為了避免進(jìn)程切換時(shí)造成內(nèi)核數(shù)據(jù)錯(cuò)誤,內(nèi)核在執(zhí)行臨界區(qū)代碼時(shí)會(huì)禁止一切中斷。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
