Linux程序排程之CFS

2021-06-18 01:15:39 字數 649 閱讀 7127

在linux2.6核心中,開發人員引入了一種新的排程策略,旨在解決2.5及之前的排程器在處理使用者互動式程式時延遲大的不足。這種排程器就是completely fair scheduler(簡稱cfs)。

排程器的任務就是從當前系統中的就緒任務中選擇合適的任務執行。排程器需要確定在什麼時候排程什麼任務,這個是由排程器採用的排程策略決定的。每種排程策略都有自己的一套策略來完成這種決策,或者是基於優先順序,或者基於時間片,或者其他的一些策略。

由於系統中的任務一般可分為i/o密集型任務和cpu密集型任務。i/o密集型的任務大部分時間都在進行i/o操作,對cpu的占用比較小,比如word程式;而cpu密集型任務大部分時間都在進行計算。i/o密集型任務對於延遲比較敏感,需要及時響應外部的i/o事件,而cpu密集型任務對延遲的敏感性要低得多。所以,排程器在進行決策的時候,還需要考慮到這兩種任務的特性,盡量讓i/o密集型的任務優先得到排程,以降低延遲,這個目的在基於優先順序排程模型中可以通過為i/o密集性任務分配較高優先順序來完成。

在典型的基於優先順序的排程器中,系統總是從就緒佇列中選擇優先順序最高的任務執行,否則,如果有多個優先順序相同的任務,則按照時間片輪轉算**流執行著具有相同優先順序的任務。另外,排程器還需要決定任務執行的時間片。在一些系統中,高優先順序的任務一般會獲得較長的時間片。在這些系統中,任務的優先順序即可以配使用者配置,可以被核心設定。

linux核心分析之排程演算法 CFS排程分析

前面對linux排程演算法的框架進行了介紹,在這裡對cfs 完全公平排程 演算法進行分析。cfs允許每個程序執行一段時間 迴圈輪轉 選擇執行最少的程序作為下乙個執行程序,而不再採用分配給每個程序時間片的做法了,cfs在所有可執行程序總數基礎上計算出乙個程序應該執行多久,而不是依靠nice值來計算時間...

inux核心 CFS程序排程器

現代作業系統設計的目的在於管理底層硬體資源並使整個計算機系統執行效能達到最優。我們可以發現實現這一目的的方法可以歸結為兩點 cpu虛擬化和記憶體虛擬化。現代作業系統一般都能提供多工執行環境,每個程序都可以擁有自己的虛擬cpu,程序在執行過程中感覺自己是獨佔cpu。類似地,記憶體虛擬化是通過讓每個程序...

CFS排程器(一)

關於排程類和優先順序的概念,前面的文章 排程器概述 中已經做了介紹了,本文不在重述。本文主要關注的就是cfs排程器,或者叫做fair sched class排程類。這種排程器是被sched normal sched batch這兩種排程策略使用的。本文基於linux4.0 提到排程器涉及到兩個問題 ...