虚拟地址与物理地址的区别

2025 年 4 月 28 日 | 阅读 5 分钟

地址在操作系统中标识内存中实际代码所在的具体位置。我们将数据存储在内存的不同位置并赋予地址,以便将来需要时再次访问这些数据。操作系统中用于内存的地址有两种类型,即 **物理地址** 和 **逻辑地址**。

逻辑地址是用户所看到的虚拟地址。用户无法直接看到物理地址。逻辑地址用作访问物理地址的参考。逻辑地址和物理地址的根本区别在于,CPU在程序执行期间生成逻辑地址。而物理地址则指的是内存单元中的一个位置。

什么是逻辑地址?

逻辑地址是CPU在程序执行期间生成的一种地址。逻辑地址是虚拟地址,因为它不实际存在,因此也称为 **虚拟地址**。此地址用作CPU访问物理内存位置的参考。术语“逻辑地址空间”用于设置从程序角度生成的所有逻辑地址。

逻辑地址通常范围从零到最大值 (max)。生成逻辑地址的用户程序假定进程在0到max之间的位置运行。此逻辑地址(由CPU生成)与MMU生成的 **基地址** 结合形成物理地址。称为内存管理单元的硬件设备用于将逻辑地址映射到其对应的物理地址。

什么是物理地址?

物理地址标识内存中所需数据的物理位置。用户从不直接处理物理地址,但可以通过其对应的逻辑地址访问它。用户程序生成逻辑地址并认为它正在其中运行,但程序需要物理内存才能执行。因此,逻辑地址在使用前必须由MMU映射到物理地址。“物理地址空间”用于指代逻辑地址空间中所有对应于逻辑地址的物理地址。

逻辑地址与物理地址的区别

逻辑地址和物理地址的基本区别在于,逻辑地址是由CPU从程序的角度生成的。而物理地址是内存单元中实际存在的一个位置。逻辑地址空间是CPU为程序生成的所有逻辑地址的集合。而所有映射到相应逻辑地址的物理地址则称为物理地址空间。逻辑地址在内存中不实际存在,而物理地址是内存中可以物理访问的位置。

Virtual vs Physical Address

编译时和加载时地址绑定方法会生成相同的逻辑地址,但在运行时地址绑定方法中则不同。CPU在程序运行时生成逻辑地址,而物理地址由内存管理单元 (MMU) 计算。逻辑地址和物理地址之间还有一些其他区别,让我们借助下面的比较表进行讨论。

条款逻辑地址物理地址
定义CPU在程序运行时生成逻辑地址物理地址是内存中的一个位置。
地点逻辑地址在内存中不实际存在,因此有时也称为虚拟地址。物理地址是内存单元中的一个位置。
访问逻辑地址用作访问物理地址的参考。物理地址不能直接访问。
地址空间CPU针对程序生成的所有逻辑地址的集合称为逻辑地址空间。而所有映射到逻辑地址的物理地址则称为物理地址空间。

将虚拟地址映射到物理地址

内存由大数组地址组成。CPU负责从程序计数器中获取指令地址。这些指令可能会导致加载或存储到特定的内存地址。

Virtual vs Physical Address

地址绑定是将一个地址空间映射到另一个地址空间的过程。逻辑地址由CPU在执行期间生成,而物理地址指的是物理内存单元中的位置(加载到内存中的那个)。请注意,用户只处理逻辑地址。MMU翻译逻辑地址。此过程的输出是RAM中数据的相应物理地址。地址绑定可以通过三种不同的方式完成:

  1. 编译时: 如果在编译时知道进程将驻留在内存中的位置,则可以生成绝对地址。也就是说,在编译期间在程序可执行文件中生成物理地址。将此类可执行文件加载到内存中非常快。但是,如果另一个进程占用了生成的地址空间,那么程序就会崩溃,并且需要重新编译程序才能使用虚拟地址空间。
  2. 加载时: 如果在编译时不知道进程将驻留在何处,则会生成重定位地址。加载器将重定位地址转换为绝对地址。加载器将主内存中进程的基地址添加到所有逻辑地址,以生成绝对地址。如果进程的基地址更改,则需要重新加载进程。
  3. 执行时: 指令已经加载到内存中并由CPU处理。此时可能会分配或重新分配额外的内存。如果进程可以在执行期间从一个内存移动到另一个内存(在加载或运行时进行动态链接),则使用此过程。例如 - 压缩。

什么是内存管理单元 (MMU)

虚拟地址和物理地址之间的运行时映射由称为MMU的硬件设备完成。操作系统将处理内存管理中的进程,并在磁盘和内存之间移动进程。它跟踪可用和已使用的内存。内存管理单元是这两个寄存器的组合:

  1. 基址寄存器: 它包含进程的起始物理地址。
  2. 限长寄存器: 它指出进程所占区域相对于基地址的限制。

下一主题Oreo操作系统