程序的幾種狀態

2021-07-15 19:30:58 字數 1795 閱讀 4973

程序:程序(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) 作業系統的需要。作業系統有時希望掛起某些程序,以便檢查執行中的資源使用情況或進行記賬。

具有掛起狀態的程序狀態轉換圖為:

程序的幾種狀態

程序的幾種狀態 1 執行狀態 程序正在處理器上上執行。在單處理器環境下,每個時刻最多只有乙個程序處於執行狀態。2 就緒狀態 程序已處於準備執行狀態,即程序獲得了除了處理器之外的一切所需資源,一旦得到處理器即可執行。3 阻塞狀態 又稱為等待狀態,程序正在等待某一事件而暫停執行,如等待某資源為可用 不包...

Linux程序的幾種狀態

linux是乙個多使用者,多工的系統,可以同時執行多個使用者的多個程式,就必然會產生很多的程序,而每個程序會有不同的狀態。linux程序狀態 r task running 可執行狀態。只有在該狀態的程序才可能在cpu上執行。而同一時刻可能有多個程序處於可執行狀態,這些程序的task struct結構...

程序的狀態

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