Operating system 地址绑定生成相同的地址

Operating system 地址绑定生成相同的地址,operating-system,Operating System,为什么编译时和加载时地址绑定会生成相同的物理和逻辑地址,而执行时地址绑定会生成不同的物理和逻辑地址?很久没有人问过这个问题了,但我只是为了存档而添加答案 让我们看看以下定义: 逻辑地址:由CPU生成的地址 物理地址:内存管理单元(MMU)看到的地址 现在在编译时绑定中我们假设一定范围的内存位置将始终可用(这对于程序来说是足够的),并生成绝对代码。所以CPU生成的地址(如指针地址等)与MMU看到的地址相同 内存利用率的更好版本是将绑定延迟到加载时间,这样磁盘上的程序就不会使用内存。为此,代码以可重

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

很久没有人问过这个问题了,但我只是为了存档而添加答案

让我们看看以下定义:

逻辑地址
:由CPU生成的地址

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

现在在
编译时绑定中
我们假设一定范围的内存位置将始终可用(这对于程序来说是足够的),并生成绝对代码。所以CPU生成的地址(如指针地址等)与MMU看到的地址相同

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

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

让我也用一个例子来解释它,以便更清楚:


考虑交换如果您使用
加载时间绑定交换程序
,则需要将其交换回同一位置(因为指令中的所有地址都是根据此地址发出指令的)在执行时间绑定中,您可以将任何进程调回任何位置,因为您只需更改可重定位寄存器中的值,它就可以正常工作。因此提高了内存利用率。

您能告诉我重新定位和绑定有什么不同吗?