2011-08-23 84 views
6

我是Linux內核和低級編程的新手。我想知道linux調度程序在時間複雜度上應該是O(1)。瞭解linux調度程序

,我碰到下面的文章是非常豐富的,但我有理解我已複製下面 http://www.ibm.com/developerworks/linux/library/l-scheduler/

的pargraph問題調度的任務很簡單:選擇在最高 優先級的任務要執行的列表。爲了使此過程更高效,使用位圖來定義任務何時位於給定優先級列表中。因此,在大多數體系結構中,找到第一位設置指令是 ,用於查找在五個32位字 (對於140個優先級)之一中設置的最高優先級位。找到執行 的任務所需的時間不取決於活動任務的數量,而取決於優先級的數目 。這使得2.6調度程序成爲O(1)進程,因爲不管活動任務的數量如何,調度時間都是固定的和確定的。

爲什麼5個32位的字對於140個隊列?誰是find-first-bit-set指令有助於選擇140個隊列之一?

回答

4

位字段使用單個值來表示一個數布爾狀態,例如,如果我們使用的8位整數,然後我們可以說:

17 (decimal) = 00010001 (binary) 

這將表明,第4和第8布爾值爲true,其中所有其他布爾值爲false。總共有8個布爾狀態可以跟蹤,因爲有8個位。因爲我們希望追蹤140個狀態(每個隊列1個,true表示隊列包含一個任務),所以需要140個比特,所以我們需要至少5個32比特的整數來存儲所有布爾狀態。

0

事情是這樣的:

int bitmap_idx = priority/BITS_PER_WORD; 
int bitmap_bit = priority%BITS_PER_WORD; 

isSet = (bitmap[bitmap_idx]&(1<<bitmap_bit)); //test 
bitmap[bitmap_idx] |= 1<<bitmap_bit;    //set 

來達到優先排列在特定的過程,這是位圖是如何在調度這又取決於您所指出的結構prio_array

本文使用了已過期檢查這一個 http://www.informit.com/articles/article.aspx?p=101760&seqNum=2

+0

謝謝。我的問題很古老,我的回答很好。 –