为什么 CPU 需要虚拟地址(逻辑地址)来从物理地址访问数据。
假设我们有这个命令:
mov dl,1
为什么这个命令的操作数使用寄存器dl的虚拟地址而不是它的物理地址?
答案1
如果没有虚拟地址的能力,那么过去、现在和将来的每个程序员编写的每个程序都必须就哪个程序使用哪个地址达成一致——否则,它们会意外地覆盖彼此的数据(或更糟的是,故意地病毒可能利用这些漏洞破坏或访问其他程序的内存(例如病毒可以读取密码),这包括已经死去的程序员和尚未出生的程序员。
虚拟化地址要容易得多。
当然,也可以完全禁止访问地址。许多现代编程平台都这样做,例如 Java 平台、通用语言基础结构/.NET 平台、Web 平台(即 ECMAScript)等。在这些系统中,内存由平台管理,用户代码无法直接访问内存,只能访问不透明、不可伪造、不可修改的指针。
但实际上,这只是内存虚拟化的另一种形式。