全部博文(175)
分类: LINUX
2013-04-25 15:58:47
1.虚拟内存信息(Virtual Memory)
除了内核线程(kernel thread),每个进程都拥有自己的地址空间(也叫虚拟空间),用mm_struct来描述。另外Linux2.4还引入了另外一个域active_mm,这是为内核线程而引入。因为内核线程没有自己的地址空间,为了让内核线程与普通进程具有统一的上下文切换方式,当内核线程进行上下文切换时,让切换进来的线程的active_mm指向刚被调度出去的进程的active_mm(如果进程的mm域不为空,则其active_mm域与mm域相同)。内存信息如表1所示
定义形式 |
解释 |
Struct mm_struct *mm |
描述进程的地址空间 |
Struct mm_struct *active_mm |
内核线程所借用的地址空间 |
表1 虚拟内存描述信息
2.优先级
int prio, static_prio, normal_prio;
unsigned int rt_priority;
static_prio= MAX_RT_PRIO + nice + 20 // (100 + nice +20)
实时进程
normal_prio=MAX_RT_PRIO-1 - p->rt_priority; p->prio =p->normal_prio
实时进程只是用了四个优先级变量中的三个(prio、normal_prio和rt_priority),而没有使用static_prio
普通进程
在调用接口set_user_nice()设置普通进程的优先级时,读者可以自己顺着函数set_user_nice()查看下面的关系。
p->static_prio = NICE_TO_PRIO(nice);
p->prio = effective_prio(p); 即p->prio = p->static_prio;
p->normal_prio = p->static_prio 参见函数effective_prio(p);