2011-08-23 180 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

谢谢。我的问题很古老,我的回答很好。 –