カーネルバージョン4.19.2を使用して、Linux CFSスケジューラがどのように機能するかを理解しようとしています。
ドキュメントで述べたように、従来の方法でタイムスライスを使用せずに仮想ランタイムの概念を使用します。各プロセスの vruntime 更新はファイルで行われます。カーネル/sched/fair.c
更新された正確な行は次のとおりです。
curr->vruntime += calc_delta_fair(delta_exec, curr);
//curr is the currently scheduled task, the function cal_delta_fair()
returns a value depending on the duration the task ran and its priority
ensuring fairness.
vruntime変数はu64で、カーネル型では符号なし整数64Bとして定義されています。プロセスの vruntime がどのように変更されるかを理解するために、その値を取得するシステムコールを作成しましたが、結果は時々負の場合もあり、時には正の場合もあります。どのように? vruntimeの負の値はどういう意味ですか?
答え1
vruntimeのデータ型は符号なし64ビット整数です。負の数を読み取る場合は、システムコールの実装で変数を正しい型にキャストする必要があると思います。