image.png
image.png
如上图为一张CPU整体架构图。

参考链接: https://blog.csdn.net/qq_25814297/article/details/122121545 https://blog.csdn.net/weixin_44395686/article/details/105240630 https://blog.csdn.net/pwl999/article/details/78212508

1、CPU寻址

假定机器是32位处理器,则通常我们将CPU寻址为4G,则最大可以支持的内存为4G。但是一般也会讲,CPU会预留一些地址空间给显卡/BIOS等使用。同时也需要知道CPU寻址不等同于物理地址,具体的物理寻址一般是有北桥芯片来做的

1.1、预留的地址空间和内存是什么关系

这里需要明确一个概念,CPU寻址空间和内存容量并无实际关系。CPU寻址指的是CPU通过前端总线发出的地址信号,假定前端总线有X根,则代表CPU寻址最大为2^X。而前端总线是CPU连接北桥芯片的总线。因此CPU发出的地址信号实际是由北桥芯片做物理寻址。因此当CPU发出的地址信号是预留给主存使用的话,北桥芯片会讲地址信号转发给主存。同时如果是给其他设备,比如PCI设备,则会讲地址信号发送给PCI设备。在北桥芯片内部会有一个address map保存系统空间地址的分配情况

2、PCI设备物理地址分配

PCI设备一般需要向OS申请IO地址/系统地址,从而驱动通过做mmap做地址映射,访问PCI设备

2.1、PCI设备物理地址谁来分配

机器启动的时候会由BIOS来进行PCI设备扫描,同时根据PCI设备的配置集群器(必须需要多大空间)进行物理地址分配,同时将相关baseAddr写入PCI设备的基址寄存器等。同时北桥芯片会更新address map,且OS会将物理地址分配(其实就是系统地址)记录在OS的结构体中,那么驱动初始化的时候会找到对应的设备结构体拿到对应的物理地址,进行mmap映射