地址绑定生成相同的地址

Gre*_*lin 8 operating-system

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

Ama*_*tam 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你可以将任何进程交换回任何地方,因为你只需要更改可重定位寄存器中的值,它将正常工作.因此提高内存利用率.