我对这句话感到困惑:
来自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文档仍在继续:
您必须以某种方式管理这些别名。例如,您的代码 可以检查和更新两个地址的访问和脏位。 或者,内核可以通过仅访问来避免该问题 用户数据通过用户虚拟地址。
这意味着内核可以通过单独的内核虚拟地址访问用户数据。我不确定为什么这两个地址会有所不同。
感谢您的任何澄清。
答案 0 :(得分:1)
要访问页面,需要将其映射到当前的虚拟地址空间。
因此,如果内核想要访问用户页面,则有两种解决方案:
您的内核似乎正在选择选项1,这对性能来说是一件好事。切换到另一个地址空间并返回需要相当多的时间。 它可以选择选项2,并在每次想要访问用户页面时切换到用户的地址空间,这可能会通过避免一些簿记使代码更简单,但这将非常慢。