为什么要编译时间&加载时间地址绑定生成相同的物理和逻辑地址,而执行时间地址绑定生成不同的物理和地址。逻辑地址?
答案 0 :(得分:12)
很久以来,这个问题被问到了,但我只是为归档目的添加答案。
让我们看看以下定义:
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
您可以交换将任何进程返回到任何地方,因为您只需要更改可重定位寄存器中的值,它就可以正常工作。因此增加了内存利用率。