目錄
當計算機系統是多道程序設計系統時,通常就會有多個進程或者線程同時競爭CPU。
只要兩個或者更多的進程處於就緒狀態,就會有多個進程或者線程同時競爭CPU。
如果只有一個CPU可用,那麼就必須選擇下一個要運行的進程。
在操作系統中,完成選擇工作的這一部分稱爲調度程序,該程序使用的算法稱爲調度算法。
一、調度簡介
1、調度的要求
(1)調度程序要選取正確進程運行
對於網絡服務器,多個進程經常競爭CPU,因此調度功能變得至關重要。例如,當CPU必須在運行一個收集每日統計數據的進程和服務用戶需求的進程之間進行選擇的時候,如果後者首先佔用了CPU,用戶將會很高興。
(2)調度程序要考慮CPU的利用率
進程切換的代價是比較高的。
首先用戶態必須切換到內核態;然後要保存當前進程的狀態,包括在進程表中存儲寄存器值以便以重新裝載。在許多系統中,內存映像(例如,頁表內的內存訪問位)也必須保存;接着,通過運行調度算法選定一個新進程;之後,應該將新進程的內存映像重新裝入MMU;最後新進程開始運行。
除此之外,進程切換還要使整個內存高速緩存失效,強迫緩存從內存中動態重新裝入兩次(進入內核一次,離開內核一次)。
總之,如果每秒鐘切換進程的次數太多,會耗費大量的CPU時間,所以有必要提醒。
2、何時調度?
(1)創建一個新進程之後,需要決定是運行父進程還是子進程。
(2)在一個進程退出時必須做出調度決策。
(3)當一個進程阻塞在I/O和信號量或由於其他原因阻塞時,必須選擇另一個進程運行
(4)當一個I/O中斷髮生時,必須做出調度決策。
備註:
非搶佔式調度算法挑選一個進程,然後讓該進程運行直至被阻塞(阻塞在I/O等待另一個進程),或者直到該進程自動釋放CPU。即使該進程運行了若干個小時,它也不會被強迫掛起。結果是在時鐘中斷髮生時不會進行調度。在處理完時鐘中斷後,如果沒有更高優先級的進程等待到時,則被中斷的進程會繼續執行。
搶佔式調度算法挑選一個進程,並且讓該進程運行某個固定時段的最大值。如果在該時段結束時,該進程仍在運行,他就被掛起,而調度程序挑選另一個程序運行(如果存在一個就緒進程)。進行搶佔調度處理,需要再時間間隔的末端發生時鐘中斷,以便把CPU控制返回給調度程序。如果沒有可用時鐘,那麼非搶佔式調度就是唯一的選擇了。
3、調度算法的分類
批處理,交互式,實時。
4、調度算法的目標
二、批處理系統中的調度
1、先來先服務
2、最短作業優先
3、最短剩餘時間優先
三、交互式系統中的調度
1、輪轉調度
2、優先級調度
3、多級多列
4、最短進程優先
5、保證調度
6、彩票調度
7、公平分享調度