Linux如何实现O(1)进程调度
来源:互联网 发布:ubuntu 实时聊天工具 编辑:程序博客网 时间:2024/06/06 00:38
Linux调度主要是在一个runqueue结构体上操作。runqueue结构体有一个prio_array结构体数组,该数组中有个两个prio_array结构体。prio_array结构体的定义如下:
struct prio_array { int nr_active /* number of tasks in the queue */; unsigned long bitmap[BITMAP_SIZE]; /* priority bitmap */ struct list_head queue[MAX_PRIO]; /* priority queue */}
这两个prio_array,一个挂着expired task(时间片已经用完的task),另一个挂着active task(时间片尚未用完的task)。当active task为空时,就交换这两个prio_array的指针值就OK了。
接下来讲解prio_array中的成员
nr_active:就不用多说了,就表示该prio_array结构体上挂着多少个任务。
struct list_head queue[MAX_PRIO]:这是一个指针数组,每个数组标记一个链表头,每个链表头上挂着一串相同优先级的task。
unsigned long bitmap[BITMAP_SIZE]:这个成员的每一个表示对应的优先级的task链表上是否为空。
有了上面的基础,接下来就讲解如何实现O(1)调度,当要调度程序时,
1)首先找到bitmap成员上第一个为 1 的bit位置,比如说bitmap的第8位为1,则表示前面0~7高优先级的task链表上没有task。
2)然后访问struct list_head queue[MAX_PRIO]数组的第八个成员,该成员是优先级为8的task链表的表头,
3)最后通过表头取下第一个task,再将其调度上CPU,这样就实现了O(1)调度。
- Linux如何实现进程O(1)调度
- Linux如何实现O(1)进程调度
- Linux进程调度-------O(1)调度和CFS调度器
- Linux进程调度算法之O(1)算法
- linux o(1)调度
- Linux Kernel 2.6内核进程调度复杂度为O(1)的代码分析
- Linux进程调度机制(1)
- linux进程调度(1)
- Linux进程调度学习1
- Linux进程调度CFS算法实现分析
- Linux进程调度CFS算法实现分析
- 《Linux内核设计与实现》--进程调度
- 【Linux内核设计与实现】进程调度
- Linux进程调度内核实现分析
- linux O(1)调度器分析
- Linux I/O调度
- Linux I/O调度
- Linux I/O调度
- win7有线无线可以联网,但是显示图标打红叉
- db4o的使用
- ASSERT
- jxl使用总结
- POJ 3268
- Linux如何实现O(1)进程调度
- Android通过tcpdump抓包
- android dynamic broadcast
- android Bitmap
- 12306订票助手,春运抢票之必备良品,圆你回家梦
- 数组和指针
- Linux安装预备知识
- AfxIsValidAddress
- 真机调试