Skip to content
On this page

简介


软件版本硬件版本更新内容
linux 5.8.18

1. 硬件的样子

addr-bus 如上图所示,地址总线一般从CPU的引脚发出,连接到一些外围设备,这里一定的注意的是,地址总线上挂载的不只有内存,任何一个可以被CPU直接寻址的设备都会挂载到CPU的地址总线上,比如X86平台显卡设备,PCI设备,再比如ARM平台的片上外围器件,如I2C控制器等。

2. 地址空间的形成

如果你有数字逻辑电路的知识,应该很好理解地址的形成,如下图所示: add-yimaqi 上图是一个简易的存储器芯片的译码器部分,这个存储器可以存储4个字节的数据,那个需要的地址线就是两根A0,A1,原因也很好理解,每个根地址线可以有两种状态,高电平和低电平,对应表示01,那个两根地址线组合之后会有4种状态,所以可以选择读取或者写入4个字节的数据。 从上面的这个简易的存储器我们就可以得到地址空间的概念,也就是所有的地址线的排列组合,也就从0到。这个空间和外围挂载多少设备,什么样的设备没有任何关系,它就是一个CPU可以寻址的范围。

3. 编址方式

3.1 统一编址

每一种编址方式就是统一编址,也就是所有的设备共享同一个地址空间,典型的就是ARM平台。 统一编址的情况IO端口数目不受限制,而且CPU也无需产生存储器或者IO操作的控制信号,但同时 引入的问题就是地址译码器相对比较复杂,而且IO端口常常会占用内存的一部分(当然一般的平台IO端口所需要的地址空间很少,比如X86 IA32平台也就是64K)。

3.2 独立编址

独立编址主要在X86平台中使用,主要是指IO存储器分别有自己的地址总线,访问时相与不存在任何关系,这种方式最大的好处就是IO端口不占用存储器空间,但这种方式需要特殊的IO访问指令,比如in,out指令。

4. 地址空间的划分

地址空间的划分是指把整个空间划分为多个区域,每个区域对应一个设备。

4.1 通过硬连线来划分

这种方式在一般简单的嵌入式系统中经常使用,也就是存储器设备会连接到不同的地址总线上或片选信号线上(本质上片选信号线也是一种地址表示形式),这样就从硬件上决定了各个设备的基址就是不同的。典型的案例就是三星嵌入式处理器S3C2440平台,存储器区域分为8个bank,每个bank基址不同,详细的可以参考S3C2440手册。

4.2 通过软件来划分

这种方式就是在系统启动初期会形成地址映射表,地址映射表决定的地址的接收设备,典型的就是X86平台。在X86平台会有一个北桥芯片CPU所有的地址访问,都会通过前端总线发送给北桥芯片,北桥芯片再通过地址映射表决定地址转发给显卡内存还是PCI

注意

这里地址映射表不是内核中的虚拟地址映射表,它仅仅存在于北桥芯片芯片中,一般由BOIS生成。

5. 小结

本文从宏观的角度讨论了计算机系统的地址空间基本原理,当然每一个具体的芯片可能有它自己对地址空间的规划,具体参考芯片手册。


提示

欢迎评论、探讨,如果发现错误请指正。转载请注明出处! 探索者


Released under the MIT License.