Edit:
在quora上的一个问题看到Robert Love 大神的一段回答,正好能回答这个问题:
Why map both the user process and kernel into virtual memory at the same time? Why not map in the user process when in user-space and map the kernel when in kernel-space? One reason: Performance. Swapping the virtual address space incurs a nontrivial cost. Worse, depending on the system, various caches must be flushed. For example, on x86, the TLB, which caches virtual to physical address translations, must be flushed whenever the virtual mappings change. On systems with virtually-tagged caches, such as older ARM architectures, the entirety of the data and instruction cache must be flushed whenever you context switch! Cache performance is everything on modern systems, so avoiding such flushes is of paramount importance.
Consequently, by mapping both the kernel and user address spaces into memory at the same time, context switching into the kernel becomes relatively cheap, particularly on systems such as Linux where entry into the kernel is otherwise lightweight. On system call and interrupt-heavy workloads, this makes a very large and tangible difference, as the address space need not be swapped out and caches need not be flushed on every system call or interrupt.