PCI简介(二)

1.x86处理器系统地址空间简介3d

1.1 CPU地址空间blog

    CPU地址空间是指CPU所能寻址的空间大小,好比对于32位CPU来讲,其所能寻址的空间大小为0~4G。这是由CPU自身的地址总线数目决定的。这段空间也被称做CPU物理地址空间。内存

1.2 内存地址空间硬件

    内存地址空间就是指内存控制器所能寻址的空间大小。在x86处理器系统中,内存地址空间是CPU地址空间的一部分。在32位x86系统中,并非全部的内存地址空间都能被系统使用,以下图所示:im

    如上图所示,左侧0~4G为CPU所能寻址的地址空间,红框内的空间是能被CPU识别的内存地址空间。右侧为内存控制器所能寻址的空间,大小为4GB,可是只有一部分空间能被CPU所识别。这就是为何4GB内存在32位x86系统只能被识别为3G多的缘由,由于剩下的CPU地址空间被其余设备占用了,好比PCI设备、Local APIC或者IO APIC等,这些CPU地址空间对应的是这些设备的寄存器区域。db

1.3 设备的内存映射空间img

    这里的设备内存映射空间是指硬件机制上实现的设备寄存器访问方式映射,而不是指MMU中虚拟地址到物理地址的映射。CPU经过CPU地址空间中的内存地址空间能访问内存设备,大概的访问流程以下图所示:端口

    CPU发送相关信号给北桥,告知其要访问内存,而后北桥经过内存控制器来访问内存设备。在汇编指令级别,这是经过MOV指令实现的,好比MOV eax,[mem addr],就能触发北桥经过内存控制器访问内存。co

    在CPU地址空间中有一段空间叫作PCI Memory Range,这段空间也叫作PCI设备寄存器映射区。CPU经过访问这段空间,从而达到访问PCI设备的目的。因为这种方式一样是经过MOV指令实现的,故这种方式被称为内存映射访问,意思就是CPU能经过像访问内存那样的方式来访问这些设备。注意,CPU访问CPU地址空间上的设备都是经过MOV指令来实现的。CPU访问PCI设备的大概流程以下图所示:ps

    CPU发送相关信号给北桥,告知其要访问PCI设备,而后北桥经过PCI控制器来访问PCI设备中的寄存器。

1.4 端口地址空间

    端口地址访问是x86处理器系统中另一种访问设备的方式,不一样于CPU地址空间,端口地址空间只有64KB大小,为0~65535,这是由于访问端口时必须将端口地址放入dx寄存器,dx寄存器是16位的,故端口地址空间只有64KB大小。以下图所示:

    端口其实就是设备中的寄存器,只不过访问这些寄存器并非经过MOV指令来访问,而是经过IN/OUT指令来访问。好比在北桥中有一个端口,其地址为0xCF8,访问这个端口流程以下图所示:

    CPU发送相关信号给北桥,告知其要访问0xCF8端口,北桥发现这个端口属于本身,直接访问。

相关文章
相关标签/搜索