操作系统 虚拟地址和物理地址之间的区别
地址用于在操作系统中标识实际代码所在的内存位置。我们将数据存储在内存的不同位置,并使用地址来在将来需要时再次访问数据。操作系统中用于内存的地址有两种类型,即 物理地址 和 逻辑地址 。
逻辑地址是用户视图的虚拟地址。用户无法直接查看物理地址。逻辑地址被用作访问物理地址的参考。逻辑地址和物理地址的基本区别在于,CPU在程序执行过程中生成逻辑地址,而物理地址是指内存单元中的位置。
什么是逻辑地址
逻辑地址是CPU在程序执行过程中生成的地址。逻辑地址是虚拟地址,因为它在物理上不存在,因此也被称为 虚拟地址 。该地址被用作CPU访问物理内存位置的参考。逻辑地址空间是从程序角度生成的所有逻辑地址的集合。
逻辑地址通常范围从0到最大(max)。生成逻辑地址的用户程序假设该进程在0和max之间的位置上运行。由CPU生成的逻辑地址与MMU生成的 基地址 结合,形成物理地址。硬件设备称为内存管理单元(MMU)用于将逻辑地址映射到相应的物理地址。
什么是物理地址
物理地址标识内存中所需数据的物理位置。用户从不直接处理物理地址,但可以通过相应的逻辑地址访问它。用户程序生成逻辑地址并认为自己在其中运行,但程序需要物理内存来执行。因此,逻辑地址在使用之前必须通过MMU映射到物理地址。物理地址空间用于所有与逻辑地址空间中的逻辑地址相对应的物理地址。
逻辑地址和物理地址之间的区别
逻辑地址和物理地址的基本区别在于,CPU从程序的角度生成逻辑地址,而物理地址是存在于内存单元中的位置。逻辑地址空间是CPU为一个程序生成的所有逻辑地址的集合。而所有与相应逻辑地址映射的物理地址称为物理地址空间。逻辑地址在内存中并不存在,而物理地址是可以物理访问的内存位置。
编译时间和装载时间的地址绑定方法会生成相同的逻辑地址,而运行时间的地址绑定方法则不同。CPU在程序运行时生成逻辑地址,而物理地址由内存管理单元(MMU)计算。逻辑地址和物理地址还有一些其他的区别,让我们通过下面的比较表来讨论它们。
术语 | 逻辑地址 | 物理地址 |
---|---|---|
定义 | CPU在程序运行时生成逻辑地址。 | 物理地址是内存中的一个位置。 |
位置 | 逻辑地址在内存中不存在,因此有时被称为虚拟地址。 | 物理地址是内存单元中的一个位置。 |
访问 | 逻辑地址被用作访问物理地址的参考。 | 无法直接访问物理地址。 |
地址空间 | CPU生成的某个程序的所有逻辑地址的集合称为逻辑地址空间。 | 而映射到逻辑地址的所有物理地址称为物理地址空间。 |
将虚拟地址映射到物理地址
内存由一个大数组地址组成。将指令地址从程序计数器中提取是CPU的责任。这些指令可能会导致加载或存储到特定的内存地址。
地址绑定是将一个地址空间映射到另一个地址空间的过程。逻辑地址是在CPU执行期间生成的,而物理地址是指在物理内存单元中的位置(即加载到内存中的位置)。要注意的是,用户只处理逻辑地址。MMU会将逻辑地址翻译成适当的数据在RAM中的物理地址。地址绑定可以通过三种不同的方式进行:
- 编译时: 如果在编译时知道进程将在内存中的哪个位置,就可以生成绝对地址。也就是说,在编译过程中,程序可执行文件会生成一个物理地址。将这样的可执行文件加载到内存中非常快。但是,如果另一个进程占用了生成的地址空间,那么程序会崩溃,必须重新编译程序以使用虚拟地址空间。
- 装入时: 如果在编译时不知道进程将驻留的位置,则会生成重定位地址。加载器将重定位地址转换为绝对地址。装入器将进程在主内存中的基址添加到所有逻辑地址上,以生成绝对地址。如果进程的基址发生更改,则需要重新加载进程。
- 执行时: 指令已经加载到内存中,并由CPU处理。此时可以分配或重新分配其他内存。如果进程在执行期间可以从一个内存移到另一个内存(在加载或运行时进行动态链接),则使用此过程。例如,压缩。
内存管理单元(MMU)是什么
虚拟地址和物理地址之间的运行时映射是由一种硬件设备称为MMU完成的。操作系统在内存管理中处理进程并在磁盘和内存之间移动进程。它跟踪可用内存和已使用内存。内存管理单元是这两个寄存器的组合,
- 基址寄存器: 它包含进程的起始物理地址。
- 限制寄存器: 它指定相对于基址的限制,即进程占用的区域的限制。