pci总线,如果不说人话的话,那是相当复杂的, 难以理解的。
说起pci总线要从总线开始:
微机原理上这么说:计算机系统是由许多具有独立功能的模块互相连接组成的。 同时,随着计算机的不断发展和广泛应用,各厂商处理向用户提供整套系统外, 还设计和提供各种功能的插件模块, 让用户根据需要构成应用系统活着扩充原有的系统。这些模块间需要互相通信,需要高速,可靠的信息交换通道,这就产生了总线的概念。
其实这个说法并没有抓出总线的本质,为什么叫总线呢? 重点在总的位置, 想象我们编程的时候遇到多对多的情况,耦合是不是非常严重, 通常我们会拆成两个1对多的系统, 从而来解耦合, 总线也是有这个思想的(设备面向总线)。
总结下总线的作用就是量点
1 减少设备互联的成本
2 提供设备接入的标准接口
pci也是总线的一种,所以pci具备这样的能力。
pci相对于isa, eisa(两种古老的总线)的有点如下:
1 速度快
2 自动配置,即插即用
3 与硬件无关
4 容易扩展
我们看这张图来说明pci的种种有点
pci总线可以通过pci桥(一种特殊的pci设备)桥接其他总线,易扩展
pci通过pci桥级连的方式可以把慢速设备和快速设备连接到不同的总线上来提高性能
另外pci总线可以配置设备的地址空间,灵活易扩展。
对于系统编程来说最重要的就是pci设备驱动和pci的地址空间配置。所以这里说明下系统如何配置pci地址空间
1 首先计算机会在物理地址空间中预留pci的区域,用于分配给pci设备。
2 每个pci设备都有配置寄存器,用于保存系统分配给pci设备的地址空间
3 操作系统活着bios会分配地址空间给pci设备,写入pci设备配置寄存器(bar)
操作系统如何给设备分配地址空间?
操作系统通过从根pci桥向下遍历pci总线来分配地址空间。
具体参考文章浅谈Linux PCI设备驱动