【发布时间】:2015-03-05 01:53:48
【问题描述】:
我对这个说法感到困惑:
来自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 文档仍在继续:
您必须以某种方式管理这些别名。例如,您的代码 可以检查和更新两个地址的访问位和脏位。 或者,内核可以通过只访问 通过用户虚拟地址获取用户数据。
这意味着内核可以通过单独的内核虚拟地址访问用户数据。我不确定为什么这两个地址会不同。
感谢您的澄清。
【问题讨论】:
-
嗯..这是答案吗? “内核不能直接操作未映射到内核地址空间的内存。换句话说,内核需要它自己的虚拟地址来处理它必须直接接触的任何内存。因此,多年来,物理内存的最大数量是可以由内核处理的是可以映射到内核的虚拟地址空间部分的数量,减去内核代码本身所需的空间。”来自http://www.makelinux.net/ldd3/chp-15-sect-1
-
但是内核如何“只通过用户虚拟地址访问用户数据来避免问题”呢?
标签: memory-management operating-system kernel virtual-memory pintos