几种进程状态
進程的幾種狀態
版權聲明:本文為博主原創文章,未經博主允許不得轉載。
進程:進程(Process)是計算機中的程序關于某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位。
進程狀態:一個進程的生命周期可以劃分為一組狀態,這些狀態刻畫了整個進程。進程狀態即體現一個進程的生命狀態。
進程狀態:
一般來說,進程有三個狀態,即就緒狀態,運行狀態,阻塞狀態。
運行態:進程占用CPU,并在CPU上運行;
???????就緒態:進程已經具備運行條件,但是CPU還沒有分配過來;
???????阻塞態:進程因等待某件事發生而暫時不能運行;
下面是3種狀態轉換圖
?
?
當然理論上上述三種狀態之間轉換分為六種情況;
???????運行——>就緒:1,主要是進程占用CPU的時間過長,而系統分配給該進程占用CPU的時間是有限的;2,在采用搶先式優先級調度算法的系統中,當有更高優先級的進程要運行時,該進程就被迫讓出CPU,該進程便由執行狀態轉變為就緒狀態。
???????就緒——>運行:運行的進程的時間片用完,調度就轉到就緒隊列中選擇合適的進程分配CPU
??????運行——>阻塞:正在執行的進程因發生某等待事件而無法執行,則進程由執行狀態變為阻塞狀態,如發生了I/O請求
??????阻塞——>就緒:進程所等待的事件已經發生,就進入就緒隊列
?
??????以下兩種狀態是不可能發生的:
????????阻塞——>運行:即使給阻塞進程分配CPU,也無法執行,操作系統在進行調度時不會從阻塞隊列進行挑選,而是從就緒隊列中選取
???????就緒——>阻塞:就緒態根本就沒有執行,談不上進入阻塞態。
?
在一些系統中,又增加了一些新狀態,如掛起狀態,可運行狀態,深度睡眠狀態,淺度睡眠狀態,暫停狀態,僵死狀態。
可運行狀態:運行狀態和就緒狀態的合并,表示進程正在運行或準備運行,Linux 中使用TASK_RUNNING 宏表示可運行狀態。
??????淺度睡眠狀態:進程正在睡眠(被阻塞),等待資源的到來是喚醒,也可以通過其他進程信號或時鐘中斷喚醒,進入運行隊列。Linux 中使用TASK_INTERRUPTIBLE 宏表示此狀態。
??????深度睡眠狀態:其和淺度睡眠基本類似,但不可被其他進程信號或時鐘中斷喚醒。Linux 中使用TASK_UNINTERRUPTIBLE 宏表示此狀態。
??????暫停狀態:進程暫停執行接受某種處理。Linux 使用TASK_STOPPED 宏表示此狀態。
??????僵死狀態:進程已經結束但未釋放進程控制塊(PCB),Linux 使用TASK_ZOMBIE 宏表示此狀態。
掛起狀態:在執行狀態的進程通過掛起即可進入就緒狀態,如圖所示,就緒狀態和阻塞狀態都分為活動態和靜止態。由活動態向靜止態轉換就是通過掛起實現的。
引入掛起狀態的原因有:
(1) 終端用戶的請求。當終端用戶在自己的程序運行期間發現有可疑問題時,希望暫時使自己的程序靜止下來。亦即,使正在執行的進程暫停執行;若此時用戶進程正處于就緒狀態而未執行,則該進程暫不接受調度,以便用戶研究其執行情況或對程序進行修改。我們把這種靜止狀態稱為掛起狀態。
(2) 父進程請求。有時父進程希望掛起自己的某個子進程,以便考查和修改該子進程,或者協調各子進程間的活動。
(3) 負荷調節的需要。當實時系統中的工作負荷較重,已可能影響到對實時任務的控制時,可由系統把一些不重要的進程掛起,以保證系統能正常運行。
(4) 操作系統的需要。操作系統有時希望掛起某些進程,以便檢查運行中的資源使用情況或進行記賬。
具有掛起狀態的進程狀態轉換圖為:
?
有關參考文章有:http://www.2cto.com/os/201412/358908.html ?
? ? ? ? ? ? ? ? ? ? ? http://blog.chinaunix.net/uid-26126915-id-2948970.html
? ? ? ? ? ? ? ? ? ? ??http://blog.csdn.net/u012824097/article/details/52058395
總結
- 上一篇: git中的工作区,暂存区,版本库
- 下一篇: 关于SET和UNORDER_SET