linux2.4到linux2.6内核调度(5)
2013-10-08 12:45
281 查看
调度系统代码结构 绝大多数调度系统的实现代码,包括 runqueue 结构的定义,都在[kernel/sched.c]文件中,这样做的目的是将所有调度系统的代码集中起来,便于更新和替换。除非特别注明,本文所引代码和函数实现均位于[kernel/sched.c]中。
3. 改进后的 task_struct
2.6 版的内核仍然用 task_struct 来表征进程,尽管对线程进行了优化,但线程的内核表示仍然与进程相同。随着调度器的改进,task_struct 的内容也有了改进,交互式进程优先支持、内核抢占支持等新特性,在 task_struct 中都有所体现。在 task_struct 中,有的属性是新增加的,有的属性的值的含义发生了变化,而有的属性仅仅是改了一下名字。
1) state
进程的状态仍然用 state 表示,不同的是,2.6 里的状态常量重新定义了,以方便位操作:
/* 节选自[include/linux/sched.h] */
#define TASK_RUNNING 0
#define TASK_INTERRUPTIBLE 1
#define TASK_UNINTERRUPTIBLE 2
#define TASK_STOPPED 4
#define TASK_ZOMBIE 8
#define TASK_DEAD 16
新增加的TASK_DEAD指的是已经退出且不需要父进程来回收的进程。
2) timestamp
进程发生调度事件的时间(单位是 nanosecond,见下)。包括以下几类:
被唤醒的时间(在 activate_task() 中设置);
被切换下来的时间(schedule());
被切换上去的时间(schedule());
负载平衡相关的赋值(见"调度器相关的负载平衡")。
从这个值与当前时间的差值中可以分别获得"在就绪队列中等待运行的时长"、"运行时长"等与优先级计算相关的信息(见"优化了的优先级计算方法")。
3. 改进后的 task_struct
2.6 版的内核仍然用 task_struct 来表征进程,尽管对线程进行了优化,但线程的内核表示仍然与进程相同。随着调度器的改进,task_struct 的内容也有了改进,交互式进程优先支持、内核抢占支持等新特性,在 task_struct 中都有所体现。在 task_struct 中,有的属性是新增加的,有的属性的值的含义发生了变化,而有的属性仅仅是改了一下名字。
1) state
进程的状态仍然用 state 表示,不同的是,2.6 里的状态常量重新定义了,以方便位操作:
/* 节选自[include/linux/sched.h] */
#define TASK_RUNNING 0
#define TASK_INTERRUPTIBLE 1
#define TASK_UNINTERRUPTIBLE 2
#define TASK_STOPPED 4
#define TASK_ZOMBIE 8
#define TASK_DEAD 16
新增加的TASK_DEAD指的是已经退出且不需要父进程来回收的进程。
2) timestamp
进程发生调度事件的时间(单位是 nanosecond,见下)。包括以下几类:
被唤醒的时间(在 activate_task() 中设置);
被切换下来的时间(schedule());
被切换上去的时间(schedule());
负载平衡相关的赋值(见"调度器相关的负载平衡")。
从这个值与当前时间的差值中可以分别获得"在就绪队列中等待运行的时长"、"运行时长"等与优先级计算相关的信息(见"优化了的优先级计算方法")。
相关文章推荐
- linux2.4到linux2.6内核调度(1)
- linux2.4到linux2.6内核调度(2)
- linux2.4到linux2.6内核调度(3)
- linux2.4到linux2.6内核调度(4)
- linux2.4到linux2.6内核调度(6)
- linux2.4到linux2.6内核调度(8)
- linux2.4到linux2.6内核调度(7)
- linux2.4到linux2.6内核调度(9)
- linux2.4到linux2.6内核调度(11)
- linux2.4到linux2.6内核调度(10)
- Linux2.6 内核进程调度分析
- Linux2.6内核驱动与2.4的区别
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
- linux2.4内核升级到linux2.6
- Linux2.6内核比2.4内核的改进细节
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
- linux 任务调度,进程创建(fork)(2.6内核)
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响