为什么内核为用户页面有单独的虚拟地址?

时间:2015-01-07 08:06:27

标签: memory-management operating-system kernel virtual-memory pintos

我对这句话感到困惑:

来自http://web.stanford.edu/class/cs140/projects/pintos/pintos_4.html#SEC63

  

在Pintos中,每个用户虚拟页面都别名为其内核虚拟   页。

我认为内核只能使用用户虚拟地址来引用用户页面,其上面有内核虚拟地址。例如,在下面的图像中,整个VAS不会是0到4GB,用户虚拟地址空间将被限制在PHYS_BASE以下的地址,而内核也可以访问它上面的地址?

virtual memory map
(来自http://web.stanford.edu/class/cs140/cgi-bin/section/10sp-proj3.pdf

这似乎不是它的工作方式,因为PintOS文档仍在继续:

  

您必须以某种方式管理这些别名。例如,您的代码   可以检查和更新两个地址的访问和脏位。   或者,内核可以通过仅访问来避免该问题   用户数据通过用户虚拟地址。

这意味着内核可以通过单独的内核虚拟地址访问用户数据。我不确定为什么这两个地址会有所不同。

感谢您的任何澄清。

1 个答案:

答案 0 :(得分:1)

要访问页面,需要将其映射到当前的虚拟地址空间。

因此,如果内核想要访问用户页面,则有两种解决方案:

  • 将页面映射到我们当前的地址空间,即内核的地址空间,并确保两个页面表条目保持一致(您不必严格保持一致,但真的想要到)。
  • 切换到已映射该页面的地址空间,即用户自己的地址空间

您的内核似乎正在选择选项1,这对性能来说是一件好事。切换到另一个地址空间并返回需要相当多的时间。 它可以选择选项2,并在每次想要访问用户页面时切换到用户的地址空间,这可能会通过避免一些簿记使代码更简单,但这将非常慢。