current-> mm在linux内核中给出NULL

时间:2013-06-07 02:36:54

标签: memory-management linux-kernel

我想走页表,所以我访问了current-> mm,但它给出了NULL值。

我正在研究linux内核3.9,我不明白current-> mm是如何为零的。

我在这里想念一下吗?

2 个答案:

答案 0 :(得分:12)

这意味着你在一个内核线程中。

在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);
    ...
}

如果下一个线程没有mm(内核线程)。调度程序不会切换mm并只重用前一个线程的mm。

答案 1 :(得分:1)

需要active_mm赋值:通过“借用”上一个任务使用的switch_mm()并将其置于任务_ {{1}中,可以避免调用mm_struct,从而导致TLB刷新}。这种技术对上下文切换时间进行了大量改进。