为什么内核不能直接访问用户进程地址

时间:2018-01-01 08:42:28

标签: linux-kernel operating-system

这篇文章https://lwn.net/Articles/75174/

说如果内核想要访问物理页面,则需要将其映射到内核空间中的线性地址(到高内存区域)。

假设页面已经由用户进程映射,内核是否可以直接使用用户进程页表来访问该页面(因为它们共享相同的页表)?为什么内核必须再次映射它?

1 个答案:

答案 0 :(得分:0)

  

假设页面已经由用户进程映射,内核是否可以直接使用用户进程页表来访问该页面(因为它们共享同一页表)?

是的,在您查看if the userspace-supplied pointer is valid后,您可以取消引用它。内核有copy_(to|from)_user个帮助器封装了这个。

  

为什么内核必须再次映射它?

通常,当您需要摆弄物理地址时,比如说与内存映射设备进行交互时,您将无法找到已在用户空间中映射的页面。如果它不在低内存区域内,您有页面表,则必须映射它们。

请注意,对于64位系统,这不再是一个问题,因为你有足够的位来使所有内存都是低内存。