存储器域与PCI总线域
2.1.2PCI总线域
在x86处理器系统中,PCI总线域是外部设备域的重要组成部分。实际上在Intel的x86处理器系统中,所有的外部设备都使用PCI总线管理。而AMD的x86处理器系统中还存在一条HT(HyperTransport)总线,在AMD的x86处理器系统中还存在HT总线域。本书对HT总线不做进一步介绍。
PCI总线域(PCI Segment)由PCI设备所能直接访问的地址空间组成。在一个处理器系统中,可能存在多个HOST主桥,因此也存在多个PCI总线域。如在图2‑1所示的处理器系统中,具有两个HOST主桥,因而在这个处理器系统中存在PCI总线x和y域。
在多数处理器系统中,分属于两个PCI总线域的PCI设备并不能直接进行数据交换,而需要通过FSB进行数据交换。值得注意的是,如果某些处理器的HOST主桥支持Peer-to-Peer数据传送,那么这个HOST主桥可以支持不同PCI总线域间的数据传送。
PowerPC处理器使用了OCeaN技术连接两个HOST主桥,OCeaN可以将属于x域的PCI数据请求转发到y域,OCeaN支持PCI总线的Peer-to-Peer数据传送。有关OCeaN技术的详细说明见第2.2节。
2.1.3处理器域
处理器域是指一个处理器系统能够访问的地址空间集合。处理器系统能够访问的地址空间由存储器域和外部设备域组成。其中存储器域地址空间较为简单,而在不同的处理器系统中,外部设备域的组成结构并不相同。如在x86处理器系统中,外部设备域主要由PCI总线域组成,因为大多数外部设备都是挂接在PCI总线[4]上的,而在PowerPC处理器和其他处理器系统中,有相当多的设备与FSB直接相连,而不与PCI总线相连。
本书仅介绍PCI总线域而不对其他外部设备域进行说明。其中存储器域与PCI总线域之间由HOST主桥联系在一起。深入理解这些域的关系是深入理解PCI体系结构的关键所在,实际上这也是理解处理器体系结构的基础。
通过HOST主桥,处理器系统可以将处理器域划分为存储器域与PCI总线域。其中存储器域与PCI总线域,彼此独立,并通过HOST主桥进行数据交换。HOST主桥是联系存储器域与PCI总线域的桥梁,是PCI总线域实际的管理者。
有些书籍认为HOST处理器是PCI总线域的管理者,这种说法并不精确。假设在一个SMP(symmetric multiprocessing)处理器系统中,存在4个CPU而只有一个HOST主桥,这4个CPU将无法判断究竟谁是HOST处理器。不过究竟是哪个处理器作为HOST处理器并不重要,因为在一个处理器系统中,是HOST主桥管理PCI总线域,而不是HOST处理器。当一个处理器系统中含有多个CPU时,如果这些CPU都可以访问HOST主桥,那么这些CPU都可以作为这个HOST主桥所管理PCI总线树的HOST处理器。
在一个处理器系统中,CPU所能访问的PCI总线地址一定在存储器域中具有地址映射;而PCI设备能访问的存储器域的地址也一定在PCI总线域中具有地址映射。当CPU访问PCI域地址空间时,首先访问存储器域的地址空间,然后经过HOST主桥转换为PCI总线域的地址,再通过PCI总线事务进行数据访问。而当PCI设备访问主存储器时,首先通过PCI总线事务访问PCI总线域的地址空间,然后经过HOST主桥转换为存储器域的地址后,再对这些空间进行数据访问。
由此可见,存储器域与PCI总线域的转换关系由HOST主桥统一进行管理。有些处理器提供了一些寄存器进行这种地址映射,如PowerPC处理器使用Inbound和Outbound寄存器组保存存储器域与PCI总线域的地址映射关系;而有些处理器并没有提供这些寄存器,但是存储器域到PCI总线域的转换关系依然存在。
HOST主桥进行不同地址域间的数据交换时,需要遵循以下规则。为区别存储器域到PCI总线域的地址映射,下文将PCI总线域到存储器域的地址映射称为反向映射。
(1)
(2)
(3)
本篇在第2.2节中,主要以PowerPC处理器为例说明HOST主桥的实现机制,并在第2.2.4节简要说明了x86处理器中的南北桥构架。尽管部分读者对PowerPC处理器并不感兴趣,笔者仍然强烈建议读者仔细阅读第2.2节的全部内容。
在PowerPC处理器中,HOST主桥的实现比较完整,尤其是PCI总线域与存储器域的映射关系比较明晰,便于读者准确掌握这个重要的概念。而x86处理器由于考虑向前兼容,设计中包含了太多的不得已,x86处理器有时不得不保留原设计中的不完美,向前兼容是Intel的重要成就,也是一个沉重的十字架。
[1]MPC8548处理器基于E500 V2内核。目前E500内核包括V1,V2和mc(MultiCore)三个版本。
[2]x86处理器的Memory Fence指令为MFENCE,LFENCE和SFENCE,而PowerPC处理器的Memory Fence指令为msync和mbar。
[3]PCI总线域只含有物理地址,因此下文将直接使用PCI总线地址,而不使用PCI总线物理地址。
[4]AMD的x86处理器中的某些外部设备,可能是基于HT总线,而不使用PCI总线。
评论