日期:2014-05-16  浏览次数:20697 次

Linux中进程的优先级

Linux采用两种不同的优先级范围,一种是nice值,另一种是实时优先级。

1.nice值

nice值得范围是-20~19,默认值是0。越大的nice值意味着更低的优先级,也就是说nice值为-20的优先级最高。

2.实时优先级

实时优先级的范围是0~99,其值得意义与nice值相反。即:越高的实时优先级数值意味着进程优先级越高。Linux的进程可分为普通进程和实时进程,实时进程都是一些对响应时间要求比较高的进程,因此实时进程的优先级比普通进程的优先级要高。

3.优先级比较

Linux中的这两种优先级划分,是不是难以理解?到底哪种优先级高?如果一个进程同时含有上述两种优先级呢?

对于上述的两个问题,最好的回答方式就是用代码说话。

Linux 3.6内核中,关于进程的优先级,include/linux/sched.h文件中有如下的一段描述:

1597 /*
1598  * Priority of a process goes from 0..MAX_PRIO-1, valid RT
1599  * priority is 0..MAX_RT_PRIO-1, and SCHED_NORMAL/SCHED_BATCH
1600  * tasks are in the range MAX_RT_PRIO..MAX_PRIO-1. Priority
1601  * values are inverted: lower p->prio value means higher priority.
1602  *
1603  * The MAX_USER_RT_PRIO value allows the actual maximum                                                                                                                   
1604  * RT priority to be separate from the value exported to
1605  * user-space.  This allows kernel threads to set their
1606  * priority to a value higher than any user task. Note:
1607  * MAX_RT_PRIO must not be smaller than MAX_USER_RT_PRIO.
1608  */
1610 #define MAX_USER_RT_PRIO    100
1611 #define MAX_RT_PRIO     MAX_USER_RT_PRIO
1612 
1613 #define MAX_PRIO        (MAX_RT_PRIO + 40)
1614 #define DEFAULT_PRIO        (MAX_RT_PRIO + 20)

通过上述的描述和代码,我们可以看出:

1) 实时优先级的范围是0~99,nice值得范围是100~139。

2)实时优先级的优先级别要高于nice值。

那么如果几个进程同时含有上述两种优先级会怎么样呢?

优先级,而普通进程对应的则是nice值。这样的话,理论上就不会出现一个进程同时含有两种不同的优先级。那事实是不是这样的呢?再重复一遍上面的一句话:Linux中的进程分为实时进程和普通进程。其中实时进程对应的就是实时优先级,而普通进程对应的则是nice值。这样的话,理论上就不会出现一个进程同时含有两种不同的优先级。那事实是不是这样的呢?

可以使用如下命令来查看进程的优先级: