1. 程式人生 > >程序的幾種狀態和排程方法

程序的幾種狀態和排程方法

1、程序的基本狀態:

(1)執行:已經獲得必要的資源  佔用處理機 處理機正在執行該程序

(2)就緒:程序等待分配CPU

(3)阻塞:等待某個事件


 執行——>就緒:1,主要是程序佔用CPU的時間過長,時間片用完

      2,在採用搶先式優先順序排程演算法的系統中,當有更高優先順序的程序要執行時,該程序就被迫讓出CPU,該程序便由執行狀態轉變為就緒狀態。

       就緒——>執行:執行的程序的時間片用完,排程就轉到就緒佇列中選擇合適的程序分配CPU

       執行——>阻塞:正在執行的程序因發生某等待事件而無法執行,則程序由執行狀態變為阻塞狀態,如發生了I/O請求

       阻塞——>就緒: 程序所等待的事件已經發生,就進入就緒佇列

2.

掛起狀態

掛起狀態:在執行狀態的程序通過掛起即可進入就緒狀態,如圖所示,就緒狀態和阻塞狀態都分為活動態和靜止態。由活動態向靜止態轉換就是通過掛起實現的。

  在不少系統中程序只有上述三種狀態,但在另一些系統中,又增加了一些新狀態,最重要的是掛起狀態。引入掛起狀態的原因有:

(1) 終端使用者的請求。當終端使用者在自己的程式執行期間發現有可疑問題時,希望暫時使自己的程式靜止下來。亦即,使正在執行的程序暫停執行;若此時使用者程序正處於就緒狀態而未執行,則該程序暫不接受排程,以便使用者研究其執行情況或對程式進行修改。我們把這種靜止狀態稱為掛起狀態。  

(2) 父程序請求。有時父程序希望掛起自己的某個子程序,以便考查和修改該子程序,或者協調各子程序間的活動。

(3) 負荷調節的需要。當實時系統中的工作負荷較重,已可能影響到對實時任務的控制時,可由系統把一些不重要的程序掛起,以保證系統能正常執行。

(4) 作業系統的需要。作業系統有時希望掛起某些程序,以便檢查執行中的資源使用情況或進行記賬。

具有掛起狀態的轉換圖

\

建立狀態

  建立一個程序一般要通過一下兩個兩個步驟

(1) 為一個新程序建立PCB,並填寫必要的管理資訊.

(2) 把該程序轉入就緒狀態並插入就緒佇列之中。當一個新程序被建立時,系統已為其分配了PCB,填寫了程序標識等資訊,但由於該程序所必需的資源或其它資訊,如主存資源尚未分配等,一般而言,此時的程序已擁有了自己PCB,但程序自身還未進入主存,即建立工作尚未完成,程序還不能被排程執行,其所處的狀態就是建立狀態。 引入建立狀態,是

為了保證程序的排程必須在建立工作完成後進行,以確保對程序控制塊操作的完整性。同時,建立狀態的引入,也增加了管理的靈活性,作業系統可以根據系統性能或主存容量的限制,推遲建立狀態程序的提交。對於處於建立狀態的程序,獲得了其所必需的資源,以及對其PCB初始化工作完成後,程序狀態便可由建立狀態轉入就緒狀態。

終止狀態

等待作業系統進行善後處理,然後將其PCB清零,並將PCB空間返還系統。當一個程序到達了自然結束點,或是出現了無法克服的錯誤,或是被作業系統所終結,或是被其他有終止權的程序所終結,它將進入終止狀態。進入終止態的程序以後不能再執行,但在作業系統中依然保留一個記錄,其中儲存狀態碼和一些計時統計資料,供其它程序收集。一旦其它程序完成了對終止狀態程序的資訊提取之後,作業系統將刪除該程序

程序的排程演算法:

1、先來先服務FCFS:該演算法即可用於作業排程,也可用於程序排程

2.短作業優先/短程序優先 :SJF/  SPF :選擇剩餘時間最短的

3.優先權優先  FPF

4.時間片輪詢法