您的位置:首页 > 运维架构 > Linux

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()。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: