linux2.4到linux2.6内核调度(6)
2013-10-08 12:45
246 查看
两种时间单位 系统的时间是以 nanosecond(十亿分之一秒)为单位的,但这一数值粒度过细,大部分核心应用仅能取得它的绝对值,感知不到它的精度。
时间相关的核心应用通常围绕时钟中断进行,在 Linux 2.6 中,系统时钟每 1 毫秒中断一次(时钟频率,用 HZ 宏表示,定义为 1000,即每秒中断 1000 次,--2.4 中定义为 100,很多应用程序也仍然沿用 100 的时钟频率),这个时间单位称为一个 jiffie。很多核心应用都是以 jiffies 作为时间单位,例如进程的运行时间片。
jiffies 与绝对时间之间的转换公式如下:
nanosecond=jiffies*1000000
核心用两个宏来完成两种时间单位的互换:JIFFIES_TO_NS()、NS_TO_JIFFIES(),很多时间宏也有两种形式,例如 NS_MAX_SLEEP_AVG 和 MAX_SLEEP_AVG。
3) prio
优先级,相当于 2.4 中 goodness() 的计算结果,在 0~MAX_PRIO-1 之间取值(MAX_PRIO 定义为 140),其中 0~MAX_RT_PRIO-1 (MAX_RT_PRIO 定义为100)属于实时进程范围,MAX_RT_PRIO~MX_PRIO-1 属于非实时进程。数值越大,表示进程优先级越小。
2.6 中,动态优先级不再统一在调度器中计算和比较,而是独立计算,并存储在进程的 task_struct 中,再通过上面描述的 priority_array 结构自动排序。
prio 的计算和很多因素相关,在"优化了的优先级计算方法"中会详细讨论。
4) static_prio
静态优先级,与 2.4 的 nice 值意义相同,但转换到与 prio 相同的取值区间。
nice 值沿用 Linux 的传统,在 -20 到 19 之间变动,数值越大,进程的优先级越小。nice 是用户可维护的,但仅影响非实时进程的优先级。2.6 内核中不再存储 nice 值,而代之以 static_prio。进程初始时间片的大小仅决定于进程的静态优先级,这一点不论是实时进程还是非实时进程都一样,不过实时进程的static_prio 不参与优先级计算。
nice 与 static_prio 之间的关系如下:
static_prio = MAX_RT_PRIO + nice + 20
内核定义了两个宏用来完成这一转换:PRIO_TO_NICE()、NICE_TO_PRIO()。
时间相关的核心应用通常围绕时钟中断进行,在 Linux 2.6 中,系统时钟每 1 毫秒中断一次(时钟频率,用 HZ 宏表示,定义为 1000,即每秒中断 1000 次,--2.4 中定义为 100,很多应用程序也仍然沿用 100 的时钟频率),这个时间单位称为一个 jiffie。很多核心应用都是以 jiffies 作为时间单位,例如进程的运行时间片。
jiffies 与绝对时间之间的转换公式如下:
nanosecond=jiffies*1000000
核心用两个宏来完成两种时间单位的互换:JIFFIES_TO_NS()、NS_TO_JIFFIES(),很多时间宏也有两种形式,例如 NS_MAX_SLEEP_AVG 和 MAX_SLEEP_AVG。
3) prio
优先级,相当于 2.4 中 goodness() 的计算结果,在 0~MAX_PRIO-1 之间取值(MAX_PRIO 定义为 140),其中 0~MAX_RT_PRIO-1 (MAX_RT_PRIO 定义为100)属于实时进程范围,MAX_RT_PRIO~MX_PRIO-1 属于非实时进程。数值越大,表示进程优先级越小。
2.6 中,动态优先级不再统一在调度器中计算和比较,而是独立计算,并存储在进程的 task_struct 中,再通过上面描述的 priority_array 结构自动排序。
prio 的计算和很多因素相关,在"优化了的优先级计算方法"中会详细讨论。
4) static_prio
静态优先级,与 2.4 的 nice 值意义相同,但转换到与 prio 相同的取值区间。
nice 值沿用 Linux 的传统,在 -20 到 19 之间变动,数值越大,进程的优先级越小。nice 是用户可维护的,但仅影响非实时进程的优先级。2.6 内核中不再存储 nice 值,而代之以 static_prio。进程初始时间片的大小仅决定于进程的静态优先级,这一点不论是实时进程还是非实时进程都一样,不过实时进程的static_prio 不参与优先级计算。
nice 与 static_prio 之间的关系如下:
static_prio = MAX_RT_PRIO + nice + 20
内核定义了两个宏用来完成这一转换:PRIO_TO_NICE()、NICE_TO_PRIO()。
相关文章推荐
- linux2.4到linux2.6内核调度(1)
- linux2.4到linux2.6内核调度(2)
- linux2.4到linux2.6内核调度(3)
- linux2.4到linux2.6内核调度(4)
- linux2.4到linux2.6内核调度(5)
- 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 内核可装载模块机制的改变对设备驱动的影响