我想遍历页表,因此我访问了 current->mm,但它给出了 NULL 值。
我正在研究 linux 内核 3.9,我不明白 current->mm 怎么会为零。
这里有什么我想念的吗?
这意味着您处于内核线程中。
在Linux中,内核线程没有mm结构。内核线程从前一个用户线程借用 mm 并将其记录在 active_mm 中。所以你应该使用 active_mm 代替.
更多细节:
in /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。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)