一、系统地址空间、PCI的地址空间和PCI的配置空间之间的映射关系
从上一篇我们知道PCI有32位或64位的地址/数据复用线,所以对于一个32位地址线的PCI主设备,如果它发起存储器访问,它可以寻址到的最大地址是B=
B*
*
*
=1KB*1024*1024*4=4GB,对于64位,它可以寻址到的最大地址是16EB(1EB=
B),这两个数据也就是PCI总线上的所有设备内部拥有的最大存储空间(如果发起IO访问,也是这么大)。一般情况下32位地址就足够使用,所以下面的讨论全部是针对32位PCI总线进行的。
学过计算机组成原理的朋友应该知道,老式的x86CPU的计算机内部存在着两个独立的物理地址空间,一个叫做存储器空间,一个叫做IO空间,这里我把它们统称为系统地址空间。从上一篇PCI的文章中,我们知道PCI总线上的事务有存储器读和存储器写,也有IO读和IO写,也就是说对于一个PCI设备来说,它既可以访问PCI的存储器空间,也可以访问PCI的IO空间,这里我把PCI的这两个空间统称为PCI的地址空间(这两个空间都最大支持4GB)。实际上,系统的地址空间和PCI的地址空间是统一编址的,也就是说,对于一个老式的x86CPU的计算机,系统的存储器空间和PCI的存储器空间可以看作是一个空间,IO空间也同理。对于前端总线是32位的计算机系统,系统的存储器空间大小也是4GB,因为它和PCI的存储器空间统一编址,所以PCI的存储器空间其实并没有4GB。对于IO空间,理论上PCI的IO空间可以支持4GB,但是由于x86CPU只支持16位的IO地址线,即64KB的IO地址空间