1.先來先服務調度算法
? 近乎單線程/單進程
2.時間片輪轉算法
? 周期性地進行進程切換。
? 改善短程序的響應時間,但系統的響應時間依賴于時間片的選擇。
? 進程切換需要一定的時間和空間成本。
? 進程多的時候,時間片就要短一點,否則交互體驗會很差;
? 進程數量少,時間片就可以適量長一點。
3.短任務優先算法
? 短任務的優先級比長任務的高,我們總是安排優先級高的程序先運行。
? 非搶占式:讓已經在CPU上運行的程序執行到結束或阻塞,然后再執行下一個。
? 搶占式:每新增加一個進程就要對所有進程(包括正在運行的)進行檢查,誰的時間短,就執行誰。
? 優點:在所有非搶占調度算法中,非搶占短任務優先算法響應時間最優,在所有搶占調度算法中,搶占短任務優先算法響應時間也最優。
? 缺點:可能造成長程序無法得到CPU時間二導致“饑餓”。需要估算程序運轉的時間(啟發式估算:1.根據程序大小推測程序所需CPU時間。2.將每個程序先運行一遍,記錄其所用的CPU時間)。
4.優先級調度算法
? 給每個進程賦予一個優先級(短任務優先算法也是優先級調度算法)。
? 缺點:低優先級的進程可能會“饑餓”。
? (解決:只要動態地調節優先級即可,如:一個進程執行特定CPU時間后將其優先級降低一個級別;一個進程等待了長時間,可以將優先級持續提升而超過其他進程)
5.混合調度算法
? 之前介紹的所有算法都存在缺點,我們自然想設計一個算法合并他們的優點,摒棄他們的缺點。這就是所謂的混合調度算法。
? 將所有進程分為不同的大類,每個大類為一個優先級。如果兩個進程處于不同的大類,則處于高優先級的大類的進程優先執行;如果兩個進程處于同一個大類,則采用時間片輪轉來執行。
6.其他調度算法
除了上面介紹的各種算法外,有的操作系統還實現了一些其他算法,它們包括:保證調度、彩票調度、用戶公平調度。
? 保證調度算法的目標是保證每個進程占用CPU的時間完全一樣,如果一個系統共有n個進程,則每個進程占用CPU的時間為1/n。保障就是肯定運轉1/n的時間,不多不少。保障調度不一定要輪轉,每次給的時間片不一定要一樣。
? 彩票調度算法是一種概率算法。給每個進程發一定數量的彩票,而調度器則從所有的彩票中隨機抽取一張彩票,而持有該彩票的進程就獲得CPU。優點:靈活,可以用于模擬其他調度算法。
? 用戶公平調度算法按照每個用戶而不是每個進程來進行公平分配。如果一個用戶進程多,則其進程獲得的CPU時間將短,反之則多。
7.實時調度算法
? 實時系統是一種必須提供時序可預測性的系統,應用范圍廣和特性不同于一般計算機,因此調度算法也別出一格。前面的算法只要考慮的是平均響應時間和系統吞吐率的問題,而實時系統則必須考慮每個具體的任務響應時間必須符合要求,即每個任務必須要在什么時間之前完成,而無需考慮如何降低整個系統響應時間或吞吐率。?
? EDF調度算法:就是最早截止的任務先做(early deadline first?),是搶占式的。(實時調度里面最優的算法)如果一組任務可以被調度的話,那EDF可以滿足;如果一批任務不能全部滿足,那么EDF能滿足的任務最多。
? 缺點:這是一種動態調度算法。意思是該算法動態地計算每個任務的截止時間并動態調節優先級,但是動態計算截止時間和動態搶占要占用CPU資源
? RMS調度算法:在進行調度之前就計算出所有任務的優先級,然后按照計算出來的優先級,然后按照計算出來的優先級進行調度,任務執行期間既不接收新進程,也不進行優先級的調整或者CPU搶占。因此這種算法的優點是系統消耗小,是靜態最優算法,缺點是不靈活。(如果CPU利用率在ln2(0.693147)以下,所有任務都能在截止時間前滿足)