在编译时间和加载时间期间,地址绑定逻辑地址与物理地址相同。我的问题是,如果逻辑地址和物理地址在编译时和加载时地址绑定中是相同的,那么为什么我们称它为逻辑地址?术语“逻辑地址”不应该仅用于执行时绑定吗
发布于 2019-07-12 13:51:15
首先,有两种类型的绑定:
MMU1)动态/基于硬件/运行时绑定:这里MMU (内存管理单元)负责转换逻辑地址。假设每个程序在逻辑地址0处被加载。当程序开始运行时,操作系统决定它应该驻留在实际物理内存中的什么位置,并将一个称为基址寄存器的特殊寄存器设置为物理内存中的偏移量。然后,以这种方式转换每个逻辑地址:
物理Address=逻辑地址+基址寄存器值。
*请注意,如果你查看程序的汇编代码,地址是逻辑的,因此如果你重新编译,它们不会改变。
2)静态/基于软件的绑定:在编译时,OS知道进程将驻留在物理内存中的什么位置。因此,编译/汇编代码中的地址将是实际的物理地址,请注意,如果我们重新编译,这些地址可能会更改。
最后注意:我认为现在不再使用静态绑定..因此,逻辑地址与物理地址(动态绑定) 100%不同。
https://stackoverflow.com/questions/56713252
复制相似问题