Linux 内核任务能否访问其vm\u area\u结构?

Linux 内核任务能否访问其vm\u area\u结构?,linux,kernel,Linux,Kernel,我的理解是,用户任务可以访问3G用户空间和1G内核空间。但内核任务只能访问其仅有的1G内核空间。但在task_struct中,它链接到指向用户空间的vm_area_struct,对吗?如果正确,那么这意味着内核任务也可以直接访问用户空间?用户任务可以访问唯一的低3G用户空间(映射的区域),内核可以访问所有3G+1G空间。内核不直接访问用户空间地址,它使用copy_from(to)_user()API。下面是Robert Love的LKD3:mm_结构和内核线程(第309页) 内核线程没有进程地址

我的理解是,用户任务可以访问3G用户空间和1G内核空间。但内核任务只能访问其仅有的1G内核空间。但在task_struct中,它链接到指向用户空间的vm_area_struct,对吗?如果正确,那么这意味着内核任务也可以直接访问用户空间?

用户任务可以访问唯一的低3G用户空间(映射的区域),内核可以访问所有3G+1G空间。内核不直接访问用户空间地址,它使用copy_from(to)_user()API。

下面是Robert Love的LKD3:mm_结构和内核线程(第309页)

内核线程没有进程地址空间,因此没有associ- 因此,内核线程的进程描述符的mm字段为空。 这是没有用户上下文的内核线程进程的定义

由于内核线程从不访问任何用户,因此缺少地址空间是可以的- 空间存储器。(他们会访问谁的?)因为内核线程没有任何页面 在用户空间中,它们不应该拥有自己的内存描述符和页表。(第页 尽管如此,内核线程仍然需要一些 数据,如页表,甚至可以访问内核内存 所需的数据,而不会在内存描述符和页表上浪费内存,或浪费内存- 每当内核线程开始时,调整处理器周期以切换到新地址空间 运行时,内核线程使用以前运行的任何任务的内存描述符

每当调度进程时,该进程的 加载mm字段。然后更新流程描述符中的活动\u mm字段以引用 到新的地址空间。内核线程没有地址空间,mm为NULL。 因此,当内核线程被调度时,内核会注意到mm为NULL并保持不变 加载上一个进程的地址空间。然后内核更新活动的\u mm字段 内核线程的进程描述符,以引用前一个进程的内存 内核线程可以根据需要使用前一个进程的页表。 因为内核线程不访问用户空间内存,所以它们只使用 地址空间中与内核内存有关的信息,所有内核内存都是相同的 进程。

但内核结构不直接访问用户空间。所以我的问题是它如何处理它的vm\u area\u结构,它应该链接到用户空间?