Linux中程序的狀態與轉換

2021-08-28 18:31:00 字數 1444 閱讀 1463

程序在其生命週期內,由於系統中各程序之間的相互制約關係及系統的執行環境的變化,使得程序的狀態也在不斷的發生變化,即乙個程序會經歷若干種不同的狀態。

通常程序有以下五種狀態,前三種是程序的基本狀態。

1)執行狀態

程序正在處理機上執行。在單處理機環境下,每一時刻最多只有乙個程序處於執行狀態。

2)就緒狀態

程序已處於準備執行的狀態。即程序獲得了除處理機之外的一切所需資源,一旦得到處理機即可執行。

3)阻塞狀態(等待狀態)

程序正在等待某一事件而暫停執行,如等待某資源為可用(不包括處理機)或等待輸入/輸出完成。即使處理機空閒,該程序也不能執行。

4)建立狀態

程序正在被建立,尚未轉到就緒狀態。建立程序通常需要多個步驟:

首先申請乙個空白的pcb,並向pcb中填寫一些控制和管理程序的資訊。

然後由系統為該程序分配執行時所需的資源。

最後把該程序轉入到就緒狀態。

5)結束狀態

程序正從系統中消失,可能是程序正常結束或其他原因中斷退出執行。

當程序需要結束執行時,系統首先必須置該程序為結束狀態,然後再進一步處理資源釋

放和**等工作。

區別就緒狀態和等待狀態:

就緒狀態是指程序僅僅缺少處理機,只要獲得處理機資源就能立即執行。

等待狀態是指程序需要其他資源(除了處理機)或等待某一事件。

之所以把處理機和其他資源劃分開,是因為在分時系統的時間片輪轉機制中,每個程序分到的時間片是若干毫秒。

也就是說,程序得到處理機的時間很短且非常頻繁,程序在執行過程中實際上是頻繁的轉換到就緒狀態的。

而其他資源(外設等)的使用和分配或者某一事件的發生(如i/o操作)對應的時間相對來說很長,程序轉換到等待狀態的次數也相對較少。

所以,就緒狀態和等待狀態是程序生命週期中兩個完全不同的狀態,需要加以區分。

五種程序狀態的轉換如下:

1)就緒狀態->執行狀態

處於就緒狀態的程序被排程後,獲得處理機資源(分派處理機時間片),於是程序由就緒狀態轉換為執行狀態。

2)執行狀態->就緒狀態

處於執行狀態的程序在時間片用完後,不得不讓出處理機,從而程序由執行狀態轉換為就緒狀態。此外,在可剝奪的作業系統當中,當有更高優先順序的程序處於就緒狀態時:

排程程式將正在執行的程序轉換為就緒狀態,讓更高優先順序的程序執行。

3)執行狀態->阻塞狀態

當程序請求某一資源(如外設)的使用和分配或等待某一事件的發生時,它就從執行狀態轉換為阻塞狀態。

程序以系統呼叫的形式請求作業系統提供服務,這是一種特殊的、由執行使用者態程式呼叫作業系統核心過程的形式。

4)阻塞狀態->就緒狀態

當程序請求的資源可用(被其他程序釋放)或者等待的事件到來時,中斷處理程式將相應的程序由阻塞狀態轉換為就緒狀態。

linux中程序的狀態

1.使用命令 top c 來檢視程序狀態 redhat localhost top c r工作中的程序 s可中斷的睡眠狀態 i空閒狀態 idle o程序正在處理器執行 b程序正在等待更多的記憶體頁 d不可中斷的睡眠狀態 t暫停狀態或跟蹤狀態 x出狀態,程序即將被銷毀 z殭屍程序1 task runn...

Linux 程序狀態轉換

1.linux程序狀態有 task running 就緒態或者執行態,程序就緒可以執行,但是不一定正在占有cpu,對應程序狀態的r task interruptible 睡眠態,但是程序處於淺度睡眠,可以響應訊號,一般是程序主動sleep進入的狀態,對應程序狀態s task uninterrupti...

Linux 程序的狀態轉換

1.程序的三態模型 在多道程式系統中,程序在處理器上交替執行,狀態也不斷地發生變化。程序一般有3種基本狀態 執行 就緒和阻塞。1 執行 當乙個程序在處理機上執行時,則稱該程序處於執行狀態。處於此狀態的程序的數目小於等於處理器的數目,對於單處理機系統,處於執行狀態的程序只有乙個。在沒有其他程序可以執行...