jae*_*ong 5 memory-management linux-kernel
我想走页表,所以我访问了current-> mm,但它给出了NULL值.
我正在研究linux内核3.9,我不明白current-> mm是如何为零的.
这里有什么我想念的吗?
Nar*_*uil 13
这意味着你在一个内核线程中.
在linux中,内核线程没有mm结构.内核线程从前一个用户线程借用mm并将其记录在active_mm中.所以你应该使用active_mm.
更多细节:
在/kernel/sched/core.c中,您可以找到以下代码:
static inline void
context_switch(struct rq *rq, struct task_struct *prev,
struct task_struct *next)
{
...
if (!mm) {
next->active_mm = oldmm;
atomic_inc(&oldmm->mm_count);
enter_lazy_tlb(oldmm, next);
} else
switch_mm(oldmm, mm, next);
...
}
Run Code Online (Sandbox Code Playgroud)
如果下一个线程没有mm(内核线程).调度程序不会切换mm并只重用前一个线程的mm.