0

以下は、Linux スケジューリングの RT ポリシーのエンティティ クラスのコードです。

struct sched_rt_entity {
     struct list_head run_list;
     unsigned long timeout;
     unsigned int time_slice;

     struct sched_rt_entity *back;
     #ifdef CONFIG_RT_GROUP_SCHED
     struct sched_rt_entity  *parent;
     /* rq on which this entity is (to be) queued: */
     struct rt_rq            *rt_rq;
     /* rq "owned" by this entity/group: */
     struct rt_rq            *my_q;
     #endif
};

backリストが既に実装されている場合に必要なデータ メンバーは何ですか。

また、グループ スケジューリング ポリシーがどのように実装されているか、特に必要性がmy_rqありrt_rq、誰がparent指し示す必要があるのか​​ もわかりません。

timeoutまた、データメンバーの意味は何ですか。

PS: 私はそのような質問をたくさん持っています。

4

1 に答える 1

2

グループ スケジューリングを使用する場合、キューは 1 つではなく、グループとそのキューのツリーになります。たとえば、2 人のユーザーがそれぞれスケジューリング グループを持っている場合、グループ/キュー全体が各ユーザーのグループに 50 % の CPU を割り当てる可能性がありますが、すべてのユーザーのプログラムはグループのキューにあり、その 50 % をめぐって競合します。複数のキューがどのように機能するかの詳細な説明については、CFS グループ スケジューリングを参照してください。

parentツリーの 1 レベル上のエンティティを指します。rt_rqはこのエンティティが実行されるmy_qキューで、 はこのエンティティの子が実行されるキューです。

このbackフィールドはdequeue_rt_stack()、スタックを実装する関数の一時ストレージとして使用されます。スタックには、最下位のエンティティへのポインターがありますが、最上位のエンティティからそれらを削除したいと考えています。

timeoutは、ウォッチドッグ タイマーによって増加され、タスクが より長く CPU を占有しないことを確認するために使用されますRLIMIT_RTTIME


最近のカーネルの変更に関する本はありません。 ソースを使用してください、ルーク。

于 2012-10-17T21:52:30.930 に答える