第I篇PCI体系结构概述
PCI总线作为处理器系统的局部总线,主要目的是为了连接外部设备,而不是作为处理器的系统总线连接Cache和主存储器。但是PCI总线、系统总线和处理器体系结构之间依然存在着紧密的联系。
PCI总线作为系统总线的延伸,其设计考虑了许多与处理器相关的内容,如处理器的Cache共享一致性和数据完整性,以及如何与处理器进行数据交换等一系列内容。其中Cache共享一致性和数据完整性是现代处理器局部总线的设计的重点和难点,也是本书将重点讲述的主题之一。
独立地研究PCI总线并不可取,因为PCI总线仅是处理器系统的一个组成部分。深入理解PCI总线需要了解一些与处理器体系结构相关的知识。这些知识是本书所侧重描述的,同时也是PCI总线规范所忽略的内容。脱离实际的处理器系统,不容易也不可能深入理解PCI总线规范。
对于今天的读者来说,PCI总线提出的许多概念略显过时,也有许多不足之处。但是在当年,PCI总线与之前的存在其他并行局部总线如ISA、EISA和MCA总线相比,具有许多突出的优点,是一个全新的设计。
(1) PCI总线空间与处理器空间隔离
PCI设备具有独立的地址空间,即PCI总线地址空间,该空间与存储器地址空间通过HOST主桥隔离。处理器需要通过HOST主桥才能访问PCI设备,而PCI设备需要通过HOST主桥才能主存储器。在HOST主桥中含有许多缓冲,这些缓冲使得处理器总线与PCI总线工作在各自的时钟频率中,彼此互不干扰。HOST主桥的存在也使得PCI设备和处理器可以方便地共享主存储器资源。
处理器访问PCI设备时,必须通过HOST主桥进行地址转换;而PCI设备访问主存储器时,也需要通过HOST主桥进行地址转换。HOST主桥的一个重要作用就是将处理器访问的存储器地址转换为PCI总线地址。PCI设备使用的地址空间是属于PCI总线域的,而与存储器地址空间不同。
x86处理器对PCI总线域与存储器域的划分并不明晰,这也使得许多程序员并没有准确地区分PCI总线域地址空间与存储器域地址空间。而本书将反复强调存储器地址和PCI总线地址的区别,因为这是理解PCI体系结构的重要内容。
PCI规范并没有对HOST主桥的设计进行约束。每一个处理器厂商使用的HOST主桥,其设计都不尽相同。HOST主桥是联系PCI总线与处理器的核心部件,掌握HOST主桥的实现机制是深入理解PCI体系结构的前提。
本书将以Freescale的PowerPC处理器和Intel的x86处理器为例,说明各自HOST主桥的实现方式,值得注意的是本书涉及的PowerPC处理器仅针对Freescale的PowerPC处理器,而不包含IBM和AMCC的Power和PowerPC处理器。而且如果没有特别说明,本书中涉及的x86处理器特指Intel的处理器,而不是其他厂商的x86处理器。
(2) 可扩展性
PCI总线具有很强的扩展性。在PCI总线中,HOST主桥可以直接推出一条PCI总线,这条总线也是该HOST主桥的所管理的第一条PCI总线,该总线还可以通过PCI桥扩展出一系列PCI总线,并以HOST主桥为根节点,形成1颗PCI总线树。这些PCI总线都可以连接PCI设备,但是在1颗PCI总线树上,最多只能挂接256个PCI设备(包括PCI桥)。
在同一条PCI总线上的设备间可以直接通信,并不会影响其他PCI总线上设备间的数据通信。隶属于同一颗PCI总线树上的PCI设备,也可以直接通信,但是需要通过PCI桥进行数据转发。
PCI桥是PCI总线的一个重要组成部件,该部件的存在使得PCI总线极具扩展性。PCI桥也是有别于其他局部总线的一个重要部件。在“以HOST主桥为根节点”的PCI总线树中,每一个PCI桥下也可以连接一个PCI总线子树,PCI桥下的PCI总线仍然可以使用PCI桥继续进行总线扩展。
PCI桥可以管理这个PCI总线子树,PCI桥的配置空间含有一系列管理PCI总线子树的配置寄存器。在PCI桥的两端,分别连接了两条总线,分别是上游总线(Primary Bus)和下游总线(Secondary Bus)。其中与处理器距离较近的总线被称为上游总线,另一条被称为下游总线。这两条总线间的通信需要通过PCI桥进行。PCI桥中的许多概念被PCIe总线采纳,理解PCI桥也是理解PCIe体系结构的基础。
(3) 动态配置机制
PCI设备使用的地址可以根据需要由系统软件动态分配。PCI总线使用这种方式合理地解决了设备间的地址冲突,从而实现了“即插即用”功能。从而PCI总线不需要使用ISA或者EISA接口卡为解决地址冲突而使用的硬件跳线。
每一个PCI设备都有独立的配置空间,在配置空间中含有该设备在PCI总线中使用的基地址,系统软件可以动态配置这个基地址,从而保证每一个PCI设备使用的物理地址并不相同。PCI桥的配置空间中含有其下PCI子树所能使用的地址范围。
(4) 总线带宽
PCI总线与之前的局部总线相比,极大提高了数据传送带宽,32位/33MHz的PCI总线可以提供132MB/s的峰值带宽,而64位/66MHz的PCI总线可以提供的峰值带宽为532MB/s。虽然PCI总线所能提供的峰值带宽远不能和PCIe总线相比,但是与之前的局部总线ISA、EISA和MCA总线相比,仍然具有较大的优势。
ISA总线的最高主频为8MHz,位宽为16,其峰值带宽为16MB/s;EISA总线的最高主频为8.33MHz,位宽为32,其峰值带宽为33MB/s;而MCA总线的最高主频为10MHz,最高位宽为32,其峰值带宽为40MB/s。PCI总线提供的峰值带宽远高于这些总线。
(5) 共享总线机制
PCI(Peripheral Component Interconnect)总线的诞生与PC(Personal Computer)的蓬勃发展密切相关。在处理器体系结构中,PCI总线属于局部总线(Local Bus)。局部总线作为系统总线的延伸,主要功能是为了连接外部设备。
处理器主频的不断提升,要求速度更快,带宽更高的局部总线。起初PC使用8位的XT总线作为局部总线,并很快升级到16位的ISA(Industry Standard Architecture)总线,逐步发展到32位的EISA(Extended Industry Standard Architecture)、VESA(Video Electronics Standards Association)和MCA(Micro Channel Architecture)总线。
PCI总线规范在上世纪九十年代提出。这条总线推出之后,很快得到了各大主流半导体厂商的认同,迅速统一了当时并存的各类局部总线。EISA、VESA等其他32位总线很快就被PCI总线淘汰了。从那时起,PCI总线一直在处理器体系结构中占有重要地位。
在此后相当长的一段时间里,PC处理器系统的大多数外部设备都是直接或者间接地与PCI总线相连。即使目前PCI Express总线逐步取代了PCI总线成为PC局部总线的主流,也不能掩盖PCI总线的光芒。从软件层面上看,PCI Express总线与PCI总线基本兼容;从硬件层面上看,PCI Express总线在很大程度上继承了PCI总线的设计思路。因此PCI总线依然是软硬件工程师在进行处理器系统的开发与设计时,必须要掌握的一条局部总线。
PCI总线V1.0规范仅针对在一个PCB(Printed Circuit Board)环境内的,器件之间的互连,而1993年4月30日发布的V2.0规范增加了对PCI插槽的支持。1995年6月1日,PCI V2.1总线规范发布,这个规范具有里程碑意义。正是这个规范使得PCI总线大规模普及,至此PCI总线完成了对(E)ISA和MCA总线的替换。
至1996年,VESA总线也逐渐离开了人们的视线,当然PCI总线并不能完全提供显卡所需要的带宽,真正替代VESA总线的是AGP总线。随后PCISIG(PCI Special Interest Group)陆续发布了PCI总线V2.2,V2.3规范,并最终将PCI总线规范定格在V3.0。
除了PCI总线规范外,PCISIG还定义了一些与PCI总线相关的规范,如PCMCIA(Personal Computer Memory Card International Association)规范和MiniPCI规范。其中PCMCIA规范主要针对Laptop应用,后来PCMCIA升级为PC Card(Cardbus)规范,而PC Card又升级为ExpressCard规范。
PC Card规范基于32位,33MHz的PCI总线;而ExpressCard规范基于PCI Express和USB 2.0。这两个规范都在Laptop领域中获得了成功。除了PCMCIA规范外,Mini PCI总线也非常流行,与标准PCI插槽相比,Mini PCI插槽占用面积较小,适用于一些对尺寸有要求的应用。
除了以上规范之外,PCISIG还推出了一系列和PCI总线直接相关的规范。如PCI-to-PCI桥规范、PCI电源管理规范、PCI热插拔规范和CompactPCI总线规范。其中PCI-to-PCI桥规范最为重要,理解PCI-to-PCI桥是理解PCI体系结构的基础;而CompactPCI总线规范多用于具有背板结构的大型系统,并支持热拔插。
PCISIG在PCI总线规范的基础上,进一步提出PCI-X规范。与PCI总线相比,PCI-X总线规范可以支持133MHz、266MHz和533MHz的总线频率,并在传送规则上做了一些改动。虽然PCI-X总线还没有得到大规模普及就被PCI Express总线替代,但是在PCI-X总线中提出的许多设计思想仍然被PCI Express总线继承。
PCI总线规范是Intel对PC领域做出的一个巨大贡献。Intel也在PCI总线规范留下了深深的印记,PCI总线规范的许多内容都与基于IA (Intel Architecture)架构的x86处理器密切相关。但是这并不妨碍其他处理器系统使用PCI总线,事实上PCI总线在非x86处理器系统上也取得了巨大的成功。目前绝大多数处理器系统都使用PCI/PCI Express总线连接外部设备,特别是一些通用外设。
随着时间的推移,PCI和PCI-X总线逐步遇到瓶颈。PCI和PCI-X总线使用单端并行信号进行数据传递,由于单端信号容易被外部系统干扰,其总线频率很难进一步提高。目前,为了获得更高的总线频率以提高总线带宽,高速串行总线逐步替代了并行总线。PCI Express总线也逐渐替代PCI总线成为主流。但是从系统软件的角度上看,PCI Express总线仍然基于PCI总线。理解PCI Express总线的一个基础是深入理解PCI总线,同时PCI Express总线也继承了PCI总线的许多概念。本篇将详细介绍与处理器体系结构相关的,一些必备的PCI总线知识。
为简化起见,本篇主要介绍PCI总线的32位地址模式。在实际应用中,使用64位地址模式的PCI设备非常少。而且在PCI Express总线逐渐取代PCI总线的大趋势之下,将来也很难会有更多的,使用64位地址的PCI设备。如果读者需要掌握PCI总线的64位地址模式,请自行阅读PCI总线的相关规范。实际上,如果读者真正掌握了PCI总线的32位地址模式之后,理解64位地址模式并不困难。
为节省篇幅,下文将PCI Express总线简称为PCIe总线,PCI-to-PCI桥简称为PCI桥,PCI Express-to-PCI桥简称为PCIe桥,Host-to-PCI主桥简称为HOST主桥。值得注意的是许多书籍将HOST主桥称为PCI主桥或者PCI总线控制器。
第I篇PCI体系结构概述的更多相关文章
- 第II篇PCI Express体系结构概述
虽然PCI总线取得了巨大的成功,但是随着处理器主频的不断提高,PCI总线提供的带宽愈发显得捉襟见肘.PCI总线也在不断地进行升级,其位宽和频率从最初的32位/33MHz扩展到64位/66MHz,而PC ...
- [转帖]Java虚拟机(JVM)体系结构概述及各种性能参数优化总结
Java虚拟机(JVM)体系结构概述及各种性能参数优化总结 2014年09月11日 23:05:27 zhongwen7710 阅读数 1437 标签: JVM调优jvm 更多 个人分类: Java知 ...
- 转:用C++实现的一种插件体系结构-----概述
用C++实现的一种插件体系结构-----概述 本文讨论一种简单却有效的插件体系结构,它使用C++,动态链接库,基于面向对象编程的思想.首先来看一下使用插件机制能给我们带来哪些方面的好处,从而在适当时候 ...
- 解剖SQLSERVER 第七篇 OrcaMDF 特性概述(译)
解剖SQLSERVER 第七篇 OrcaMDF 特性概述(译) http://improve.dk/orcamdf-feature-recap/ 时间过得真快,这已经过了大概四个月了自从我最初介绍我 ...
- 学习笔记:oracle学习一:oracle11g体系结构之体系结构概述和逻辑存储结构
目录 1.oracle 11g体系结构概述 1.1 三个重要概念 1.2 oracle数据库存储结构 2 逻辑存储结构 2.1 数据块(Data Blocks) 2.2 数据区(Extent) 2.3 ...
- 第二篇--PCI设备解析
介绍:参考 一个系统上最多有256个PCI总线,每个总线最多有32个设备,每个设备最多有8个功能,每个功能最多有256字节的配置地址空间,所以总的配置地址空间是16M. PCI设备有物理设备和逻辑设备 ...
- JVM 体系结构概述 (一)
一.jvm运行在操作系统之上的,它与硬件没有直接交互: 二.JVM体系结构概览 JVM的基本结构:类加载器.执行引擎.运行时数据区.本地方法接口: 过程:class文件 ----> 类加载器 - ...
- Java虚拟机(JVM)体系结构概述及各种性能参数优化总结
转自:http://blog.csdn.net/zhongwen7710/article/details/39213377 第一部分:相关的概念 数据类型 Java虚拟机中,数据类型可以分为两类:基本 ...
- Java:HttpClient篇,Cookie概述,及其在HttpClient4.2中的应用
1. Cookie 概述 Cookie是什么? Cookie 是一小段文本信息,伴随着用户请求和页面在 Web 服务器和浏览器之间传递.Cookie 包含每次用户访问站点时 Web 应用程序都可以读取 ...
随机推荐
- unity getcomponentsinchildren 翻船
今天使用GetComponentsInChildren, 老司机翻船.因为一直以来我使用这个函数,下意识的从来所有的相同component都是放在子节点下,本身节点肯定不会放一个相同的componen ...
- Eclipse 配置运行Spark
本文主要记录Spark 在 Eclipse中报 找不到主类的问题.在新建Spark工程,然后add external jars 选择 spark-assembly-1.4.0-hadoop2.6.0. ...
- iOS导出ipa包时四个选项的意义
1. Save for iOS App Store Deployment 保存到本地 准备上传App Store 或者在越狱的iOS设备上使用 2. Save for Ad Hoc Deploymen ...
- Codeforce D. Make a Permutation!
D. Make a Permutation! time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- Codeforce C. Bus
C. Bus time limit per test 2 seconds memory limit per test 256 megabytes input standard input output ...
- 面试中的Https
在Http协议中有可能存在信息窃听或身份伪装的安全问题.使用HTTPS通信机制可以有效地防止这些问题. Https Http的缺点 通信使用明文(不加密),内容可能会被窃听. 不验证通信方的身份,因此 ...
- 浅探element-ui2组件源码之upload
最近不小心更新了element-ui的版本,已经到了2.1.0,以前修改的源码都失效了. 于是重新尝试下面的指令重新修改: git clone https://github.com/ElemeFE/e ...
- 一步一步从原理跟我学邮件收取及发送 10.四句代码说清base64
经过前几篇的文章,大家应该都能预感到一定要讲解 base64 函数的内容了.是的,马上要到程序登录的代码,base64 是必须要实现的. base64 很早以前我就接触了,在项目中也很喜欢用.但每换一 ...
- c# 程序结构
最近工作中需要用到c#,所以从今天开始博客不定期更新c#学习笔记 c#程序结构大体分为, 命名空间 类 Main 方法 命名空间 相当于一个仓库 通过 using 引入命名空间 比如 using ...
- [搬运] DotNetAnywhere:可供选择的 .NET 运行时
原文 : DotNetAnywhere: An Alternative .NET Runtime 作者 : Matt Warren 译者 : 张很水 我最近在收听一个名为DotNetRock 的优质播 ...