2012-10-07 49 views
0

以下是在linux調度中用於RT策略的實體類的代碼。sched_rt_entity中數據成員的含義

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_rqrt_rq以及誰會指向parent

又是什麼意思timeout數據成員。

評分: 我有很多很多這樣的問題,任何人都可以提出一個很好的閱讀。

回答

2

當使用組調度時,沒有一個隊列,而是一組組及其隊列。例如,當兩個用戶每個都有一個調度組時,整個組/隊列可能會爲每個用戶的組分配50%的CPU,而所有用戶的程序都在其隊列中並爭奪這50%。 有關多個隊列如何工作的更詳細說明,請參見CFS group scheduling

parent指向樹中上一層的實體; rt_rq是此實體運行的隊列,而my_q是此實體的子級運行的隊列。

back字段被用作dequeue_rt_stack()函數中的臨時存儲器來實現一個堆棧,其中我們有一個指向最低實體的指針,但想從頂層開始刪除它們。

timeout由看門狗定時器增加,用於檢查任務是否超過RLIMIT_RTTIME


沒有關於最近的內核變化的書籍。 使用源碼,盧克。

+0

我明白這一點,但如果您能夠提供更多的洞察,瞭解爲什麼會使用這樣的結構,因爲解釋引發了更多的問題。更具體地說,爲什麼需要孩子在跑步的隊列。 –

+0

另一個問題,因爲你提出了'dequeue_rt_stack',我不明白,如果指針不是最低的實體,當使用back的臨時分配將發生時,我們分配'rt_se-> back = back'這意味着我們將它分配給'null',而不必在意是否在任何列表的中間,換句話說,如果其他實體指向它(因爲它們是同一組的一部分),現在只有這個實體和他們的父母會保持在一起。 –