【发布时间】:2012-12-28 04:20:34
【问题描述】:
假设有这样的代码。
MOV [0x1234], EAX (intel assembly)
假设 CPU 想要处理这条指令。 让我们假设没有管理程序。 我们只是在linux环境中使用普通的x86 CPU(保护模式)。
现在,我的理解是 因为 0x1234 是虚拟地址,所以需要翻译 到物理地址。(让我们跳过分段部分)
CPU 只是将此地址(0x1234)传递给 MMU 硬件。 MMU 遍历页表并使用物理地址访问内存内容。
我说的对吗?
现在让我们假设有管理程序和这段代码 正在从来宾操作系统运行。
到底发生了什么??
我知道管理程序提供了另一层页表。 但我不明白这是如何工作的。
如果客户代码“MOV [0x1234], EAX”被执行 在真正的 CPU 中。虚拟地址 0x1234 将由 真正的硬件 MMU。所以我认为这个指令必须是 重写(0x1234 应替换为另一个地址 在代码执行之前),或者被困在管理程序中......
我错了吗? 如果我错了,请纠正我的理解...
提前谢谢你。
【问题讨论】:
标签: linux memory virtualization virtual-machine virtual-memory