1. 程式人生 > >Linux中程序的狀態與轉換

Linux中程序的狀態與轉換

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

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

1)執行狀態

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

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

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

4)建立狀態

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

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

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

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

5)結束狀態

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

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

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

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

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

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

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

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

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

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

在這裡插入圖片描述

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

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

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

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

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

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

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

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

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