我想了解Linux內核的調度器是如何工作的理解優先級陣列
由於此鏈接
http://books.google.co.in/books?id=NXVkcCjPblcC&lpg=PP1&pg=PA47#v=onepage&q&f=false 和下面的鏈接 http://www.informit.com/articles/article.aspx?p=101760&seqNum=2
結構runque給出的基本數據結構調度程序在其上運行
它是
0123上述有兩個成員
struct prio_array *active; /* pointer to the active priority
array */
struct prio_array *expired; /* pointer to the expired priority array */
和作爲
struct prio_array {
int nr_active; /* number of tasks */
unsigned long bitmap[BITMAP_SIZE]; /* priority bitmap */
struct list_head queue[MAX_PRIO]; /* priority queues */
};
我不與下面的句子明確結構prio_array定義
問題1)
Each priority array contains one queue of runnable processors per priority level.
的struct prio_array
上述定義中哪裏是可運行的處理器
的闕然後它說
The priority arrays also contain a priority bitmap used to
高效地發現在系統中的最高優先級的可運行的任務。
然後它說 「有140個優先級和32位字,這是五個。」
它是如何得出結論,這是五什麼是它背後的數學計算?
以上是本書第4章節摘錄的內容,第2章出版的內容都包含相同的文字。爲便於理解,此處僅作參考。
* UPDATE1 * 根據意見,我只是想澄清什麼,我問 作者說
BITMAP_SIZE是無符號long類型 的數組變量將必須提供大小每個有效優先級爲 一級。有140個優先級和32位字,這是五個。
問題2)
什麼我不清楚是每個位對應一個優先級,並給出140優先級有那麼如何數組的大小未來5我沒有得到BITMAP_SIZE計算邏輯不32分之140= 5
它有一些事情與以下的鏈接段落
When a task of a given priority becomes runnable (that is,
its state becomes TASK_RUNNING), the corresponding bit in the
bitmap is set to one. For example, if a task with priority seven is
runnable, then bit seven is set
其是其中陣列
unsigned long bitmap[BITMAP_SIZE]; /* priority bitmap */
被設置爲基本上我不清楚的是這個數組是如何設置的,並且如果我能夠正確解釋,請參閱問題1。
Update 2和下面
答案的解釋有了答案下面我只是增加一個小的解釋,可能幫助一些一個在未來 如果他們來到這裏基本上
調度保持runque和運行進程的每個運行進程是隻有一個運行隊列列表中,文章以它的鏈接我給曾考慮多處理器系統中有許多運行疑問句,回到我們的情況有一個處理器和不同優先級
與處理的runque有140的優先級的每個優先級具有TASK_RUNNING狀態不同的過程說,例如可以有優先權8的許多工藝等(我把8只是爲例) 結構runque指向優先陣列,它告訴
btimap[BITMAP] /* this is the priority level
struct list_head /* points to the start of list of processes of that run level
因此,runque指向優先級數組,從優先級數組中,您可以輕鬆獲得需要在O(1)時間內執行的進程 。
,你需要5個字來容納140位? –
看到2的五次方是32那麼它怎麼樣140 –
我寧願看到它是140/32略多於4個字,所以就這樣做吧5. –