内核线程访问用户空间地址

时间:2017-11-10 08:07:03

标签: linux-kernel kernel virtual-memory

引用了解Linux内核一书(强调我的)

  

...无需使引用用户模式线性地址的TLB条目无效,因为没有内核线程访问用户模式地址空间

我理解用户空间进程无法访问内核空间,但为什么反向(这是我认为上面的句子所暗示的)是真的?这是由硬件强制执行还是仅仅是内核的设计选择?

1 个答案:

答案 0 :(得分:1)

这句话是错误的,但在上下文中它已经足够了。

完整的引用是:

  

实际上,每个内核线程都没有自己的页表集;   相反,它使用属于常规的页表集   处理。但是,没有必要使TLB条目无效   指的是用户模式的线性地址,因为没有内核线程   访问用户模式地址空间

他们的意思是切换用户< - >用户线程更改地址空间(duh),但用户线程 - >内核线程和内核线程 - >内核线程不作为优化。内核线程没有绑定到任何用户线程,因此首先没有要访问的地址空间的特定用户部分。随着时间的推移,事情以不同的顺序进行调度,并且在随机用户线程之后执行特定的内核线程,它会继续执行用户部分的不同页表(内核部分保持不变)。因此,内核线程无需在用户空间中访问。只需执行ps auxw并检查所有包含在'[]'中的内容。那是内核线程。

这不能与访问用户空间的内核代码混淆 - 这种情况一直在发生,例如:当用户线程执行系统调用时。

我还说句子是错误的,因为在特殊情况下,内核线程可以显式设置特定的地址空间以供使用。这是由aio完成的。