小林coding學習筆記(程序排程演算法)

Zhang_WUyue發表於2024-09-16

//程序排程演算法
程序排程演算法是CPU透過程序排程演算法決定某個時刻去呼叫哪個程序到CPU上執行的演算法
1、先來先服務排程演算法
每次從就緒佇列的隊頭排程到CPU上執行,直到程序退出或被阻塞,才會繼續從佇列中排程程序執行。
特點:對短作業不利,對長作業有利,無法平衡短作業與長作業。
2、最短作業優先排程演算法
每次排程就緒佇列中執行時長最短的程序,直到程序退出或被阻塞,才會繼續從佇列中排程程序執行。
特點:增加了吞吐量,對短作業有利,但對長作業不利,無法平衡短作業與長作業。
3、高響應比優先排程演算法
每次進行程序排程時,先計算就緒佇列中的響應比,選擇響應比最高的程序排程到CPU上。
響應比=(等待時間+要求服務時間)/要求服務時間,當等待時間相同時,短作業服務時間短,則響應比高,對短作業有利。當要求服務時間相同時,等待時間越長,則響應比越大,對長作業有利。
所以高響應比優先排程演算法兼顧了短作業與長作業。
4、時間片排程演算法
最古老、最廣、最簡單、公平的方法就是時間片排程演算法
就是就緒佇列中的每個程序被排程到CPU上執行的時間都是固定的一個時間片(時鐘中斷),如果程序執行時間到了,那麼CPU就會釋放該程序,讓下一個程序排程到CPU。如果程序在時間片結束前阻塞或結束,則CPU立即進行切換。
5、優先順序排程演算法
對於計算機來說,實際應用中有些程序是更為緊迫和更為需要的,所以此時就產生了優先順序的概念,優先順序排程就是從就緒佇列中選擇優先順序高的任務排程到CPU上執行。
在訊息佇列中(kafka)中設計的有優先順序佇列這種模組,C++裡面使用priority_queue<pair<int,function<void()>>來實現任務的優先順序,第一個引數int代表優先順序,第二個引數function<void()>代表任務函式。
靜態優先順序是一開始設定好優先順序,而動態優先順序是根據執行過程中,如果執行時間增加則降低優先順序,等待時間增加就提升優先順序。
6、多級反饋佇列排程演算法
多級即多個佇列,從上到下優先順序降低的多個佇列
反饋表示當有新的程序加入優先順序較高的佇列時,執行在CPU上的程序會被阻塞,然後CPU排程新程序。

其結構如上圖所示,從上到下佇列優先順序依次降低,且優先順序越高的佇列時間片越短

相關文章