这篇文章https://lwn.net/Articles/75174/
说如果内核想要访问物理页面,则需要将其映射到内核空间中的线性地址(到高内存区域)。
假设页面已经由用户进程映射,内核是否可以直接使用用户进程页表来访问该页面(因为它们共享相同的页表)?为什么内核必须再次映射它?
答案 0 :(得分:0)
假设页面已经由用户进程映射,内核是否可以直接使用用户进程页表来访问该页面(因为它们共享同一页表)?
是的,在您查看if the userspace-supplied pointer is valid后,您可以取消引用它。内核有copy_(to|from)_user
个帮助器封装了这个。
为什么内核必须再次映射它?
通常,当您需要摆弄物理地址时,比如说与内存映射设备进行交互时,您将无法找到已在用户空间中映射的页面。如果它不在低内存区域内,您有页面表,则必须映射它们。
请注意,对于64位系统,这不再是一个问题,因为你有足够的位来使所有内存都是低内存。