CPU和内存之间有三根总线,地址,数据,和控制总线。
这是在说地址之间的问题。CPU和内存之间用地址来查找数据,但是两者的地址并不总是一样的,CPU产生的是逻辑地址,而内存的就是物理地址。通常都是不一样的,所以需要地址映射。
正好是从编程人员的角度看,(不考虑解释执行)程序总是经过源程序编译,连接,运行三个阶段。在这个过程中,指令和数据就要调到内存。
地址捆绑的三种形式:
编译时:编译时就生成了绝对地址。MS-DOS的COM程序就是这样的。
加载时:编译时编译器生成可重定位代码,在加载时捆绑。
执行时:执行时才能绑定。
上面说的都是内存中的物理地址,对于编译时和加载时的地址,物理地址和CPU产生的逻辑地址都是一样的。但是对于运行时的绑定,逻辑地址(又称虚拟地址)和物理地址是不一样的。这时候就需要有一个地址映射的问题,这个问题由MMU(内存管理单元)来完成。
这个实现其实就像是分段寻址一样,有一个重定位寄存器,其实就是基址寄存器,cpu生成的都是逻辑地址,也就是说都是个偏移量,当要把数据放到内存里时,总是要将偏移量加上基址才是真正的物理地址。
用户处理的也都是逻辑地址,也就是说我们编程时查看的地址都是逻辑地址。
动态加载:
就是说只有当运行时,并且程序调用子程序时,链接