1

CFS スケジューリング アルゴリズムのデータ (サスペンド キューまたはレディ キューの内容、タスク期間など) が Linux に格納されている場所を知っている人はいますか? (この目的のための特別なファイルまたはデータ構造はありますか?)

ありがとう。

4

1 に答える 1

2

CFS は、システム内の処理単位ごとに異なるランキューを保持します (つまり、グローバル スケジューラではなく、異なるランキュー間のタスクの移行に依存します)。データ構造は、kernel/sched/sched.hファイル内のstruct cfs_rq です。

次に、各ランキューは、赤黒木データ構造を介して順序付けられたタスクを内部的に保持します。このデータ構造の実装は、include/linux/rbtree.hファイルに含まれています。これは、厳密にはスケジューリングに関連しないという意味で汎用的な実装であるため、この種のデータ構造でソートされたデータを保持する必要がある任意のカーネル コンポーネントで使用できます。

カーネル コード内で、プロセス (またはスレッド) に関する情報を含むデータ構造はtask_structであり、 include/linux/sched.h内に含まれます。これは、すべてのスケジューリング ポリシー (つまり、SCHED_FAIR、SCHED_FIFO/SCHED_RR、SCHED_DEADLINEなど)で使用される主要なタスク データ構造です。

CFS がどのように機能するかについての優れたドキュメントは、 Documentation/schedulerディレクトリ内にあります。

于 2015-11-19T10:46:45.583 に答える