9

为什么编译时和加载时地址绑定会生成相同的物理和逻辑地址,而执行时地址绑定会生成不同的物理和逻辑地址?

4

1 回答 1

14

自从提出这个问题以来已经很久了,但我只是出于存档目的添加答案。

让我们看一下下面的定义:

Logical address: CPU 生成的地址

Physical address: 内存管理单元 (MMU) 看到的地址

现在compile time binding我们假设一定范围的内存位置总是可用的(这对于程序来说已经足够了)并且生成了绝对代码。因此,无论 CPU 生成什么地址(如指针地址等),都与 MMU 看到的相同。

更好的内存利用率版本是将绑定延迟到加载时间,这样内存就不会被磁盘上的程序使用。为此,以可重定位格式生成的代码。这是load time binding.

现在execution time binding有点不同,绑定延迟到执行时间。在这种情况下,CPU 生成一个地址,比如说300,并对地址进行所有操作,300但是只要有实际的内存访问,这个地址就会通过将可重定位寄存器的值(比如说R)添加到这个地址来转换。所以逻辑地址范围是0-LIM,而物理地址空间是R-(R+LIM)

让我也用一个例子来解释一下,这样就更清楚了:

如果您交换了一个程序,则考虑交换,load time binding您需要将其交换回同一位置(因为指令中的所有地址都是根据该地址出价的),而在execution time binding您可以将任何进程交换回任何位置,因为您只需要更改可重定位寄存器中的值,它会正常工作。从而提高内存利用率。

于 2012-11-11T18:21:21.427 回答