在编译时和加载时,地址绑定逻辑地址与物理地址相同。我的问题是,如果逻辑地址和物理地址在编译时和加载时地址绑定中相同,那么为什么将其称为逻辑地址? “逻辑地址”一词不应该仅在执行时绑定中使用
答案 0 :(得分:0)
首先有两种绑定类型:
1)动态/基于硬件/运行时绑定: MMU(内存管理单元)在这里负责翻译逻辑地址。假定每个程序都在逻辑地址零处加载。当程序开始运行时,操作系统会决定将其放置在实际物理内存中的位置,并将一个称为基址寄存器的特殊寄存器设置为物理内存中的偏移量。然后以这种方式转换每个逻辑地址:
物理地址=逻辑地址+基址寄存器值。
*请注意,如果您查看程序的汇编代码,则地址是逻辑的,因此重新编译时地址不会更改。
2)静态/基于软件的绑定: 在编译时,操作系统知道进程将驻留在物理内存中的位置。因此,已编译/汇编代码中的地址将是实际的物理地址,并请注意,如果我们重新编译,这些地址可能会更改。
最终提示::我认为现在不使用静态绑定。因此,逻辑地址与物理地址(动态绑定)相差100%。