逻辑地址,虚拟地址,物理地址,总线地址

        很多人可能写程序这么多年,都分不清以下几个地址的概念,亦或是当进入程序员行列时由于平台的关系有些概念已经渐渐弱化,没有赶上那个必须与硬件亲密接触才能够写好程序的年代,所以平时也不会接触到这些概念,但了解这些概念无疑是对编程生涯是有好处的,下面就简述一下这几个概念的意思。

        逻辑地址,虚拟地址,物理地址,总线地址:

        逻辑地址:由段地址和段内偏移组成,类似于 CS:offset

        虚拟地址:由逻辑地址计算得来

        物理地址:由 CPU 内部的MMU 单元通过页表,计算出物理地址,物理地址是出现在地址

                总线上的值。

        总线地址:CPU 是个独立的模块,它可以应用到不同的地方,例如主板上,测试板上,面

        包机上,路由器上。它只是提供了一些针脚与外部连接。以 x86 经典架构为例,CPU 的

输出针脚包括地址总线,数据总线,控制总线等,它们组成 FSB,然后与北桥芯片组相连,与北桥芯片组相连的还有外围设备总线,如果 ram 的 ddr 控制器也连接到北桥的话,ram 也算是这些设备其中之一,当 cpu 产生了一个物理地址,这个信号被北桥芯片接收,北桥芯片会转译成总线地址(所有的外设,包括ram 都会配置在这个空间中,这个过程叫做 IOMMU,与具体架构有关),然后再去判断,配置在这个地址区域的设备,其实是设备的控制器接收到信号去响应了而已。Dma 操作时使用的就是总线地址,如果   在总线上挂载了 ram ,就可以直接操作了。

你可能感兴趣的:(逻辑地址,物理地址,虚拟地址,总线地址)