在早期的時間片輪轉法中,系統將所有的就緒進程按先來先服務的原則排成一個佇列,每次調度時,把 CPU 分配給隊首進程,並令其執行一個時間片。時間片的大小從幾 ms 到幾百 ms。當執行的時間片用完時,由一個計時器發出時鐘中斷請求,調度程式便據此信號來停止該進程的執行,並將它送往就緒佇列的末尾;然後,再把處理機分配給就緒佇列中新的隊首進程,同時也讓它執行一個時間片。這樣就可以保證就緒佇列中的所有進程在一給定的時間內均能獲得一時間片的處理機執行時間。換言之,系統能在給定的時間內回響所有用戶的請求。
多級反饋佇列調度算法
調度算法的實施過程如下所述。
(1) 應設定多個就緒佇列, 並為各個佇列賦予不同的優先權。 第一個佇列的優先權最高,第二個佇列次之,其餘各佇列的優先權逐個降低。該算法賦予各個佇列中進程執行時間片的大小也各不相同,在優先權愈高的佇列中,為每個進程所規定的執行時間片就愈小。例如,第二個佇列的時間片要比第一個佇列的時間片長一倍,……,第 i+1 個佇列的時間片要比第 i 個佇列的時間片長一倍。圖是多級反饋佇列算法的示意。
(2) 當一個新進程進入記憶體後,首先將它放入第一佇列的末尾,按 FCFS 原則排隊等待調度。當輪到該進程執行時,如它能在該時間片內完成,便可準備撤離系統;如果它在一個時間片結束時尚未完成,調度程式便將該進程轉入第二佇列的末尾,再同樣地按 FCFS原則等待調度執行;如果它在第二佇列中運行一個時間片後仍未完成,再依次將它放入第三佇列,……,如此下去,當一個長作業(進程)從第一佇列依次降到第 n 佇列後,在第 n 佇列中便採取按時間片輪轉的方式運行。
(3) 僅當第一佇列空閒時,調度程式才調度第二佇列中的進程運行;僅當第 1~(i-1)佇列均空時,才會調度第 i 佇列中的進程運行。如果處理機正在第 i 佇列中為某進程服務時,又有新進程進入優先權較高的佇列(第 1~(i-1)中的任何一個佇列),則此時新進程將搶占正在運行進程的處理機, 即由調度程式把正在運行的進程放回到第 i 佇列的末尾,把處理機分配給新到的高優先權進程。