我是Linux内核和低级编程的新手。 我想知道linux调度器应该如何在时间复杂度上成为O(1)。
我遇到以下文章,这是非常丰富的,但我有一个问题,理解我已经转载下面http://www.ibm.com/developerworks/linux/library/l-scheduler/
调度程序的工作很简单:select要执行的最高优先级列表上的任务。 为了使这个过程更有效率,使用位图来定义任务在给定优先级列表上的时间。 因此,在大多数体系结构中,使用find-first-bit-set指令来查找五个32位字中的一个(140个优先级)中设置的最高优先级位。 find要执行的任务所需的时间不取决于活动任务的数量,而取决于优先级的数量。 这使得2.6调度器成为一个O(1)进程,因为无论活动任务的数量如何,调度时间都是固定的和确定性的。
为什么在140个队列中有5个32位的字? 谁find了第一个位设置指令有助于select140队列之一?
我将如何去debugging执行脚本的cron作业,但脚本似乎不完整?
在Linux内核实时调度程序中,不了解某些函数的内部结构
在中断的时候得到current-> pid
为什么启用超线程后性能变差?
在线唤醒执行
如何创build一个新的Linux内核调度程序
* nix下的非GUI应用程序的体面事件库是什么? (C ++)
是否有可能从sched_entityfind相应的task_struct?
文件通过SFTP传输
位字段使用单个值来表示一些布尔状态,例如,如果我们使用8位整数,那么我们可以这样说:
17 (decimal) = 00010001 (binary)
这将表明第4和第8个布尔值是true,其他所有布尔值都是false。 总共可以跟踪8个布尔状态,因为有8个比特。
因为我们希望跟踪140个状态(每个队列1个,true表示队列包含一个任务),所以需要140个比特,所以我们需要至少5个32位整数来存储所有的布尔状态。
像这样的东西:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。