程序的幾種狀態和排程方法
1、程序的基本狀態:
(1)執行:已經獲得必要的資源 佔用處理機 處理機正在執行該程序
(2)就緒:程序等待分配CPU
(3)阻塞:等待某個事件
執行——>就緒:1,主要是程序佔用CPU的時間過長,時間片用完;
2,在採用搶先式優先順序排程演算法的系統中,當有更高優先順序的程序要執行時,該程序就被迫讓出CPU,該程序便由執行狀態轉變為就緒狀態。
就緒——>執行:執行的程序的時間片用完,排程就轉到就緒佇列中選擇合適的程序分配CPU
執行——>阻塞:正在執行的程序因發生某等待事件而無法執行,則程序由執行狀態變為阻塞狀態,如發生了I/O請求
阻塞——>就緒: 程序所等待的事件已經發生,就進入就緒佇列
2.掛起狀態
掛起狀態:在執行狀態的程序通過掛起即可進入就緒狀態,如圖所示,就緒狀態和阻塞狀態都分為活動態和靜止態。由活動態向靜止態轉換就是通過掛起實現的。在不少系統中程序只有上述三種狀態,但在另一些系統中,又增加了一些新狀態,最重要的是掛起狀態。引入掛起狀態的原因有:
(1) 終端使用者的請求。當終端使用者在自己的程式執行期間發現有可疑問題時,希望暫時使自己的程式靜止下來。亦即,使正在執行的程序暫停執行;若此時使用者程序正處於就緒狀態而未執行,則該程序暫不接受排程,以便使用者研究其執行情況或對程式進行修改。我們把這種靜止狀態稱為掛起狀態。
(2) 父程序請求。有時父程序希望掛起自己的某個子程序,以便考查和修改該子程序,或者協調各子程序間的活動。
(3) 負荷調節的需要。當實時系統中的工作負荷較重,已可能影響到對實時任務的控制時,可由系統把一些不重要的程序掛起,以保證系統能正常執行。
(4) 作業系統的需要。作業系統有時希望掛起某些程序,以便檢查執行中的資源使用情況或進行記賬。
具有掛起狀態的轉換圖
建立狀態
建立一個程序一般要通過一下兩個兩個步驟(1) 為一個新程序建立PCB,並填寫必要的管理資訊.
(2) 把該程序轉入就緒狀態並插入就緒佇列之中。當一個新程序被建立時,系統已為其分配了PCB,填寫了程序標識等資訊,但由於該程序所必需的資源或其它資訊,如主存資源尚未分配等,一般而言,此時的程序已擁有了自己PCB,但程序自身還未進入主存,即建立工作尚未完成,程序還不能被排程執行,其所處的狀態就是建立狀態。
引入建立狀態,是
終止狀態
等待作業系統進行善後處理,然後將其PCB清零,並將PCB空間返還系統。當一個程序到達了自然結束點,或是出現了無法克服的錯誤,或是被作業系統所終結,或是被其他有終止權的程序所終結,它將進入終止狀態。進入終止態的程序以後不能再執行,但在作業系統中依然保留一個記錄,其中儲存狀態碼和一些計時統計資料,供其它程序收集。一旦其它程序完成了對終止狀態程序的資訊提取之後,作業系統將刪除該程序
程序的排程演算法:
1、先來先服務FCFS:該演算法即可用於作業排程,也可用於程序排程
2.短作業優先/短程序優先 :SJF/ SPF :選擇剩餘時間最短的
3.優先權優先 FPF4.時間片輪詢法