1. 程式人生 > >多級反饋佇列演算法補充

多級反饋佇列演算法補充

http://pages.cs.wisc.edu/~remzi/OSTEP/cpu-sched-mlfq.pdf

本文是多級反饋佇列(multi-level feedback queue,MLFQ)演算法的一些小補充(兩個缺陷與修改方法),參考了上面連結。因為自己用中文沒有搜到想要的內容所以寫一下部落格。

這裡的原始的MLFQ的規則如下:

  1. 如果兩個任務AB,優先順序(A)>優先順序(B),則執行A
  2. 如果兩個任務AB,優先順序(A)=優先順序(B),則使用時間片輪轉演算法執行A、B
  3. 新任務獲得最高的優先順序
  4. 如果某任務在某一優先順序執行一個時間片後仍未結束,則下調一個優先順序;如果某任務在一個時間片未完成前掛起,則優先順序不變

問題有二:

  1. 如果系統中以一個較高頻率產生短時的任務,依據規則,一個需要較長時間執行的任務會被調到低優先順序佇列並在之後得不到cpu資源。
  2. 如果一個程式被巧妙地程式設計,使得它可以在一個時間片完成前把自己掛起一下並很快喚醒,則可以一直呆在高優先順序佇列,佔有過多資源。

 

圖全部來自文章頂連結(不知道這樣算不算侵權了...)分別對應一種問題和一種解決方案

 

針對問題一,解決方案為 Priority Boost 優先度提升,具體思想是每隔一段時間,將所有任務都放到優先度最高的佇列中去,具體效果可以見上圖。

針對問題二,解決方案為 Gaming Tolerance  對策容忍,具體思想是記憶某一個任務的歷史記錄,也就是說,記錄一個任務在一段時間內總的執行時間,達到一個時間片便下調優先順序,而不需要它連續

執行一個時間片再下調優先順序。

 

 

————

算原創呢還是翻譯呢?