|
Understanding The Linux Virtual Memory Manager上说使用active_mm可以避免TLB flush。可是我没看明白。
在源代码中找了一下,应该是在context_switch()这个函数中实现的吧,可是下面这段代码我没看明白
if (unlikely(!mm)) {
next->active_mm = oldmm;
atomic_inc(&oldmm->mm_count);
enter_lazy_tlb(oldmm, next, smp_processor_id());
} else
switch_mm(oldmm, mm, next, smp_processor_id());
if (unlikely(!prev->mm)) {
prev->active_mm = NULL;
BUG_ON(rq->prev_mm);
rq->prev_mm = oldmm;
}
为什么这段代码可以实现lazy TLB呢? |
|