



我们在第3章中介绍了I/O体系结构的两大类:内存映射I/O和端口映射I/O。在早期的PC中,物理地址线的数量将处理器总的内存空间限制在1MB之内,这种情况下,这两种映射方法的优缺点就很明显。现代处理器体系结构能够支持更大的内存范围,通常为数十个GB。地址空间扩展的结果使得为I/O接口分配地址空间变得非常简单。由于大多数接口的需要,现代32位和64位通用处理器采用了内存映射的I/O。
复杂的现代处理器通常是在处理器芯片内来实现内存控制器,并直接与DDR内存模块连接。大多数I/O操作被处理器加载到一个或多个称为 芯片组 (chipset)的外部集成电路。即使只需要一个芯片就可以实现I/O功能,也要称为芯片组。
该芯片组为多种外设提供接口,例如磁盘驱动器、网络接口、键盘、鼠标和其他许多USB设备等。大多数接口通过使用某种串行总线实现。以下各节介绍了现代计算机中最常用的I/O技术。
并行数据总线在两个或多个通信端点之间的多条导线上同时传送多位数据。早期的PC使用并行总线来实现将打印机连接到计算机等功能。随着时间的推移,并行总线的一些限制就变得显而易见:
● 根据支持的位数,并行总线可能需要大量的信号线,导致线缆价格昂贵,另外,当电缆断裂或连接器接触不良时,通信很容易出现问题。
● 计算机系统开发人员一直在努力提高计算机的性能(以便获得竞争优势),并行总线的另一个限制因素变得很明显:虽然一个设备发送数据时,所有位可以同时驱动其输出,但是信号可能不能同时到达目的地。这是由电缆中或整个电路板上的导线的长度差异引起的。因此,并行总线所能支持的数据传输速率存在一个上限。
● 并行总线的另一个限制是,除非有另外一组重复的连接可同时用于在相反方向上传送数据,否则一组总线一次只能在一个方向上传送数据(称为 半双工 (halfduplex))。并行总线通常不提供双向通信能力。双向通信能力称为 全双工操作 (fullduplex)。
串行数据总线使用一对导线在两个通信端点之间传送数据,每次传输一位数据。现代计算机中处理器与外围设备之间的大多数高速通信线路都使用某种形式的串行总线。表面上看,从并行总线结构转为串行总线似乎在吞吐能力上有很大的损失,但是串行总线却具有一些重要的优势,这些优势可以在性能关键型应用中更具吸引力。
个人和商用计算机系统中的高速串行总线使用差分导线进行通信。采用 差分信号 (Differential signaling)需要使用两根导线,这两根导线需具有相同的长度,并表现出几乎相同的电气特性。将它们绝缘后相互缠绕在一起形成双绞线(twisted pair)作为线缆使用。图4.7表示使用差分信号的串行数据总线。
图4.7 使用差分信号的串行数据总线
要发送的数字信号通过图4.7中左边的输入到达发送器(使用Tx表示)。输入信号被转换成一对电压后在两条平行导线上传输。小圆圈表示发送器的顶部信号与底部信号反相。
在典型的串行电路中,发送器的高电平输入将在顶部串行导线上产生1.0V的电压,在底部导线上产生1.4V的电压;低电平输入在顶部导线上产生1.4V的电压,在底部导线上产生1.0V电压。接收器(使用Rx表示)的输入表现为高阻抗,这就意味着接收器从电路吸收的电流可忽略不计。接收器测量电阻(标准值为100Ω)两端的电压,当Tx的输入为高电平时,Rx的上端电压比下端电压低0.4V。当Tx输入为低电平时,Rx的上端电压比下端电压高0.4V。
接收器通过将其中一个输入(最上面带有小圆圈的一端)反相并将其结果加到另一个输入上来生成其输出。换句话说,接收器只测量了两根导线之间的电压差。这种方法的好处是许多形式的破坏性干扰都会在传送信号的导线上引起电压变化,而将两根导线紧密耦合会使得一根导线上的大部分噪声电压也将出现在另一根导线上。两根导线上的电压值做减法运算消除了大部分噪声,否则这些噪声会干扰接收器对信号检测的准确性。
串行数据总线可以以数十亿数据位/每秒的速率传送数据,远远超过了以前的PC中并行总线的传输速率。可以同时使用多条串行总线将数据传输带宽按总线数量的比例提升。两个端点的多条串行总线连接方式和并行总线之间的关键区别在于,对于某些接口标准来说,串行总线在某种程度上可以独立传送,而在并行总线中,所有位必须同步传送。如果能够对两条导线的长度和电气特性进行精确的匹配,这种互连方式可以很容易地实现非常高速的数据传输率。
现代处理器与其主板芯片组之间的连接通常由多条串行数据总线组成,称之为 高速输入输出 (High-Speed Input Output,HSIO)通道。每个通道都是一个支持全双工操作的串行连接,且都有一条如图4.7所示的连接通路。可以将各个通道分配给特定类型的外围设备接口,这些接口也是通过串行连接实现的,例如PCI Express、SATA和USB。接下来的各节将分别深入介绍这些接口。
1995~2005年,运行频率为33MHz的 外设部件互连 (Peripheral Component Interconnect,PCI)总线是应用于PC中的32位并行总线。计算机主板上的PCI插槽可用于插入各类扩展卡,这些扩展卡可以实现网络连接、视频显示和音频输出等功能。到21世纪初期,并行总线体系结构的局限性已经很明显,因此人们开发了串行的PCI Express总线,用来替代PCI总线。
PCI Express(缩写为PCIe)是一种双向差分信号串行总线,主要用于连接计算机主板上的通信端点。PCIe的传输速率高达数十亿次/每秒(GT/s)。“传输”是指从发送器到接收器通过总线传送一个比特。PCIe在每次通信中都需要插入额外的冗余比特,以确保数据的完整性。冗余比特的开销在不同版本的PCIe中有所不同,从而影响有效的数据传输速率。表4.1显示了PCIe的主要版本、发布的年份、以GT/s为单位的单通道传输速率以及以MB/s为单位的有效数据传输速率。
表4.1 PCI Express版本
PCIe可以同时在两个方向上进行全速数据传输,此处显示的有效数据速率是用于单向通信的。
在PCIe标准中可以用符号x1、x2、x4、x8、x16和x32来表示多通道连接。大多数现代主板至少要实现PCIe x1和x16的插槽。PCI x1插槽兼容长度为25mm的主板边缘连接器,而x16插槽则兼容长度为89mm的主板边缘连接器。PCIe卡只要能够插进任一插槽就可以正常运行。例如,可以将PCIe x1卡插入x16插槽中,这种情况下只使用了x16插槽可用通道的十六分之一。
PCIe x16插槽主要应用于处理器和显卡之间的接口,其目的是为游戏等图形密集型应用程序提供最佳性能。PCIe 5.0 x16接口能够以63GB/s的速率进行单向数据传输。
在现代计算机体系结构中,处理器芯片通常提供16个通道的PCIe接口,该接口与安装在PCIe x16插槽中的显卡直接连接。这可以避免显卡的PCIe信号经过芯片组。
除了图形显示器和DDR SDRAM接口外,现代计算机系统中的大多数I/O都由芯片组管理。处理器和芯片组通过一组HSIO通道进行通信。该芯片组支持磁盘驱动器、网络接口、键盘和鼠标等外围设备的接口。这些设备的接口通常使用SATA、M.2和USB串行接口。
串行ATA(Serial AT Attachment,SATA)是将计算机主板与存储设备连接的双向串行接口标准。SATA中的“AT”指早期的IBM PC AT。与单个PCIe通道类似,SATA包含两对差分信号导线,这两对导线分别在每个方向上传输数据。与PCIe使用主板上的信号线不同,SATA通过电缆进行数据传输。除了电气和数据格式外,SATA标准还定义了电缆和连接器的详细规范。
SATA电缆是一条双向通道,支持处理器与磁盘驱动器、光盘驱动器和固态驱动器等存储设备之间的通信。表4.2给出了SATA标准的主要修订版本、发布年份以及性能参数。
表4.2 SATA版本
该表中的数据传输速率是指单向通信的传输速率,但是与PCIe一样,SATA也支持全双工数据传输。
SATA标准仍在不断改进,但是截至2024年,还未宣布要推出数据传输速率更快的SATA版本。
现代 固态硬盘 (Solid-State Drive,SSD)采用闪存技术来存储数据,而不是采用传统硬盘中的旋转磁盘。由于SSD的技术与传统硬盘所用的技术完全不同,所以在大多数情况下,SATA驱动器接口虽然在旋转磁盘上可以很好地工作,但对于SSD来说是一个非常严重的性能障碍。
要访问磁盘驱动器上的任意数据块(称为 扇区 (sector)),驱动器磁头必须移动到该扇区所在的磁道上,并且必须等待扇区的起点旋转到磁头所在的位置之后,驱动器才可以开始读取数据。与这些步骤相比,SSD可以直接寻址任何数据区,寻址的方式与处理器访问DRAM位置的方式非常类似。
开发M.2接口规范是为了给小型便携式设备中的闪存存储提供小尺寸和高性能的接口。该接口不仅消除了SATA接口的性能限制,而且SSD的数据传输速率比SATA所能支持的速率快好几倍。
除了支持大容量的存储设备外,M.2还支持PCIe、USB、蓝牙和Wi-Fi等其他接口。现代主板已经开始含有M.2插槽,除了具有更高的性能外,在计算机机箱中所占用的空间也要比传统磁盘更少。
通用串行总线 (Universal Serial Bus,USB)接口提供了一个将多种外围设备连接到计算机系统中的简单接口(从用户的角度来看)。USB电缆具有快速识别的连接器类型且支持热插拔(在通电时拔插设备)。USB设备是自动配置的,因此在大多数情况下,用USB电缆将新设备连接到计算机时,用户不需要安装设备驱动程序。
早期的USB数据线(USB 2.0)含有一个差分信号对,一次只能沿一个方向传递数据。更高版本的USB标准(USB 3.2 Gen1及更高版本)可支持双向数据传输。此外,USB 3.2及USB4能提供两条通道,使得数据传输速率加倍。
表4.3给出了USB标准的主要修订版本、发布年份、可支持的最大通道数以及数据传输性能。
表4.3 USB版本
在USB 2.0版本中,通信完全在主机的控制下进行。每次通信都由主机发起,首先将数据包地址发送给指定的设备,然后进行和设备之间的数据传输。从USB 3.2 Gen 1开始,设备可以发起与主机的通信,从而有效地为连接在外围的设备提供中断功能。
雷电接口(Thunderbolt)是2011年推出的高速串行接口标准集。原始的雷电接口是用两个串行的雷电通道将PCIe和显示端口(DisplayPort)信号传输结合在一起。
雷电4(Thunderbolt 4)是最新一代的雷电标准,其中增加了与USB4的兼容性,同时支持使用一个计算机端口与PCIe设备和多个高分辨率显示器的连接。雷电4使用的连接器与USB 3.2及更高版本(USB-C的连接器)相同,支持40Gbit/s的USB4数据传输速率。当连接到计算机的雷电4接口时,所有的USB设备都能正常运行。然而雷电4外围设备与非雷电4 USB-C端口不兼容。
下一节将介绍最流行的图形显示接口标准。