程序排程基礎
程序排程負責根據排程演算法選擇一個程序分配給處理器,以及從處理器上移除一個程序。它是作業系統中多道程式設計的重要組成部分。
程序排程演算法
程序排程演算法用於處理為處理器選擇程序或在程序之間分配資源。
一些程序排程演算法如下所示:
- 先來先服務
此演算法按照程序到達就緒佇列的順序處理程序。FCFS是最簡單的排程演算法。FCFS中沒有搶佔,因此不會發生飢餓現象。儘管如此,它的吞吐量仍然很低,因為大型程序可能會長時間佔用CPU。
- 最短作業優先
此演算法按照程序執行時間的順序執行程序,即首先選擇執行時間最短的程序。SJF支援搶佔,因此可能導致某些程序飢餓。但是,在大多數情況下,它提供了最大的吞吐量。
- 固定優先順序排程
此演算法按照每個程序指定的優先順序順序執行程序。低優先順序程序可能會被高優先順序程序搶佔,這可能導致某些程序飢餓。
- 輪循排程
此演算法為每個程序提供固定的時間片,並在所有程序之間迴圈,直到它們的執行完成。由於每個程序都有機會執行,因此不會發生飢餓現象。如果時間片過長,則輪循演算法的行為類似於FIFO,如果時間片過短,則其行為類似於SJF。
程序排程程式
程序排程涉及短期排程程式、中期排程程式和長期排程程式。這些程式的詳細資訊如下所示:
- 長期排程程式
長期排程程式執行長期排程。這涉及從輔助儲存器中的儲存池中選擇程序,並將其載入到主儲存器中的就緒佇列中以供執行。
長期排程程式控制多道程式設計的程度。它必須選擇I/O繫結和CPU繫結程序的謹慎組合,以產生最佳的系統吞吐量。如果它選擇了太多CPU繫結程序,則I/O裝置處於空閒狀態;如果它選擇了太多I/O繫結程序,則處理器將無事可做。
- 短期排程程式
短期排程程式執行短期排程。這涉及從就緒佇列中選擇一個程序,並將其安排執行。短期排程程式使用排程演算法來決定接下來由哪個程序執行。
下圖展示了使用長期和短期排程程式進行排程的過程:
- 中期排程程式
中期排程程式執行中期排程。這涉及將程序從主記憶體中交換出去。稍後可以從該程序停止執行的位置交換回該程序。
這也可以稱為掛起和恢復程序,有助於降低多道程式設計的程度。交換也有助於改善記憶體中I/O繫結和CPU繫結程序的組合。
下圖展示了中期排程的過程: