本節目標:linux
進程的三種基本狀態數據結構
就緒(Ready)狀態ide
當進程已分配到除CPU之外的全部必要的資源,只要得到處理機即可當即執行,這時的進程狀態稱爲就緒狀態。函數
執行(Running)狀態
當進程已得到處理機,其程序正在處理機上執行,此時的進程狀態稱爲執行狀態。操作系統
阻塞(Blocked)狀態
正在執行的進程,因爲等待某個事件發生而沒法執行時,便放棄處理機而處於阻塞狀態。引發進程阻塞的事件可有多種,例如,等待I/O完成、申請緩衝區不能知足、等待信件(信號)等。設計
狀態轉換圖:指針
一個進程在運行期間,不斷地從一種狀態轉換到另外一種狀態,它能夠屢次處於就緒狀態和執行狀態,也能夠屢次處於阻塞狀態。調試
(1) 就緒→執行
處於就緒狀態的進程,當進程調度程序爲之分配了處理機後,該進程便由就緒狀態轉變成執行狀態。blog
(2) 執行→就緒
處於執行狀態的進程在其執行過程當中,因分配給它的一個時間片已用完或更高優先級的進程搶佔而不得不讓出處理機,因而進程從執行狀態轉變成就緒狀態。隊列
(3) 執行→阻塞
正在執行的進程因等待某種事件發生而沒法繼續執行時,便從執行狀態變成阻塞狀態。
(4) 阻塞→就緒
處於阻塞狀態的進程,若其等待的事件已經發生,因而進程由阻塞狀態轉變爲就緒狀態。
(5) 運行→終止
程序執行完畢,撤銷而終止
以上是最經典也是最基本的三種進程狀態,但如今的操做系統都根據須要從新設計了一些新的狀態。
如linux:
其和淺度睡眠基本相似,但有一點就是不可被其餘進程信號或時鐘中斷喚醒。Linux 使用TASK_UNINTERRUPTIBLE 宏表示此狀態。
狀態轉換圖以下:
就緒態在支持虛擬內存的操做系統中可能分爲:在內存中就緒和在交換空間就緒,由於支持虛擬內存的操做系統會將當前不太活躍的一些進程交換到交換空間,交換空間就緒進程要運行要先換人內存出入內存就緒態,在由cpu調度執行。
進程描述信息:
進程控制信息:
資源信息:
現場保護信息(cpu進行進程切換時):
能夠經過:cat /proc/sys/kernel/pid_max 查看系統支持多少進程
init進程其實是用戶進程,它是一個程序,在/sbin/init,linux啓動的第一個進程
實際上linux中還存在0號進程(內核進程),它是一個空閒進程,它進行空閒資源的統計及交換空間的換入換出,1(init)進程是由0號進程建立的。
進程終止時操做系統作如下工做: