1. 程式人生 > >程序生命週期與狀態轉換

程序生命週期與狀態轉換

http://www.cnblogs.com/qianye/archive/2012/11/25/2788330.html

程序在其生命週期內,由於系統中各程序之間的相互制約關係及系統的執行環境的變化,使得程序的狀態也在不斷地發生變化(一個程序會經歷若干種不同狀態)。通常程序有以下五種狀態,前三種是程序的基本狀態。


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

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

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


4) 建立狀態:程序正在被建立,尚未轉到就緒狀態。建立程序通常需要多個步驟:首先申請一個空白的PCB,並向PCB中填寫一些控制和管理程序的資訊;然後由系統為該程序分配執行時所必需的資源;最後把該程序轉入到就緒狀態。

5) 結束狀態:程序正從系統中消失,這可能是程序正常結束或其他原因中斷退出執行。當程序需要結束執行時,系統首先必須置該程序為結束狀態,然後再進一步處理資源釋放和回收等工作。

注意區別就緒狀態和等待狀態:就緒狀態是指程序僅缺少處理機,只要獲得處理機資源就立即執行;而等待狀態是指程序需要其他資源(除了處理機)或等待某一事件。之所以把處理機和其他資源劃分開,是因為在分時系統的時間片輪轉機制中,每個程序分到的時間片是若干毫秒。也就是說,程序得到處理機的時間很短且非常頻繁,程序在執行過程中實際上是頻繁地轉換到就緒狀態的;而其他資源(如外設)的使用和分配或者某一事件的發生(如I/O操作的完成)對應的時間相對來說很長,程序轉換到等待狀態的次數也相對較少。這樣來看,就緒狀態和等待狀態是程序生命週期中兩個完全不同的狀態,很顯然需要加以區分。


圖2-1說明了五種程序狀態的轉換,而三種基本狀態之間的轉換如下:(注意:阻塞到執行的箭頭反了)
圖2-1  五種程序狀態的轉換
就緒狀態 -> 執行狀態:處於就緒狀態的程序被排程後,獲得處理機資源(分派處理機時間片),於是程序由就緒狀態轉換為執行狀態。

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

執行狀態 -> 阻塞狀態:當程序請求某一資源(如外設)的使用和分配或等待某一事件的發生(如I/O操作的完成)時,它就從執行狀態轉換為阻塞狀態。程序以系統呼叫的形式請求作業系統提供服務,這是一種特殊的、由執行使用者態程式呼叫作業系統核心過程的形式。


阻塞狀態 -> 就緒狀態:當程序等待的事件到來時,如I/O操作結束或中斷結束時,中斷處理程式必須把相應程序的狀態由阻塞狀態轉換為就緒狀態。