4

我对这个说法感到困惑:

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

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

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

虚拟内存映射
(来自http://web.stanford.edu/class/cs140/cgi-bin/section/10sp-proj3.pdf

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

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

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

感谢您的任何澄清。

4

1 回答 1

2

要访问一个页面,它需要映射到您当前的虚拟地址空间。

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

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

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

于 2015-01-07T11:48:19.187 回答