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

Linux kernel 访问用户空间地址的内核线程,linux-kernel,kernel,virtual-memory,Linux Kernel,Kernel,Virtual Memory,这里引用了《理解Linux内核》一书中的一段话 。。。不需要使引用用户模式线性地址的TLB条目无效,因为没有内核线程访问用户模式地址空间 我理解用户空间进程不能访问内核空间,但为什么我认为上面这句话的意思是相反的呢?这是由硬件实现的,还是仅仅是内核的设计选择?这句话是错误的,但在上下文中已经足够好了 全文引述如下: 事实上,每个内核线程都没有自己的页面表集; 相反,它利用了属于正则表达式的页面表集 过程但是,不需要使以下TLB条目无效: 指用户模式线性地址,因为没有内核线程 访问用户模式地址空间

这里引用了《理解Linux内核》一书中的一段话

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


我理解用户空间进程不能访问内核空间,但为什么我认为上面这句话的意思是相反的呢?这是由硬件实现的,还是仅仅是内核的设计选择?

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

全文引述如下:

事实上,每个内核线程都没有自己的页面表集; 相反,它利用了属于正则表达式的页面表集 过程但是,不需要使以下TLB条目无效: 指用户模式线性地址,因为没有内核线程 访问用户模式地址空间

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

这不能与访问用户空间的内核代码混淆——这种情况经常发生,例如,当用户线程执行系统调用时


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

我确实在书的后面找到了解释。这里的内核线程不同于用户进程的内核模式执行。此线程类似于异步内核任务的工作线程,如回收内存、延迟中断等。因为它只执行内核作业,所以不需要访问用户空间。