1 point;
第 3 版 · OCR 辅助 · 原书检索 · 文字用于定位,公式与图表请回原页核验 · 本次导入快照
<!-- page: 296 -->
系统互连及输入输出组织
总线不能过长,否则将会降低总线传输效率。同步总线通常采用并行传输方式,即总线的数
据线条数为8位、16位、32位或64位等,同时并行传输的这些数据位信号的定时必须相同,
因此,使用更快传送速度、更长传输线的总线时,会导致传送到另一端的波形发生变形,从而
使得所有位中最快和最慢的位信号之间的时间差较大。
由于同步总线的上述问题,现在越来越多的总线采用异步串行方式进行传输。因为串
行传输方式每次在一根信号线上传送数据位,因此传输速率可以比并行总线高得多,而且由
于每个位各自传输,因而传输时延的细微变化不会影响其他数据位的传送。通过多个数据
通道的组合,串行传输可以实现比传统并行总线高得多的数据传输带宽。
总线的性能指标通常包含以下几方面。
1.总线宽度
总线中数据线的条数称为总线宽度,它决定了每次能同时传输的信息的位数。并行传
输总线的总线宽度为16位,32位、64位或128位等。
2.总线工作频率
早期的总线通常一个时钟周期传送一次数据,因此,总线工作频率等于总线时钟频率。
现在有些总线一个时钟周期可以传送2次或4次数据,因此,总线工作频率是总线时钟频率
的2倍或4倍。
3.总线带宽
总线带宽指总线的最大数据传输率,即总线在进行数据传输时单位时间内最多可传输
的数据量,不考虑其他如总线裁决、地址传送等所花的时间。总线带宽的计算公式为
B=W×F/N
其中,W为总线宽度,即总线能同时并行传送的数据位数,通常以字节为单位;F 为总线的
时钟频率;N为完成一次数据传送所用的时钟周期数;F/N为总线工作频率。
例8.1 某同步总线在一个时钟周期内传送一个4字节的数据,总线时钟频率为
33MHz,求总线带宽是多少?如果总线宽度改为64位,一个时钟周期能传送2次数据,总
线时钟频率为66MHz,则总线带宽为多少?提高了多少倍?
解:由上述同步总线带宽计算公式,可得总线带宽为4B×33MHz/1=132MB/s。
总线性能改进后的总线带宽为8B×66MHz/0.5=1056MB/s,提高了7倍。
4.总线寻址能力
总线的寻址能力主要指由地址线位数所确定的可寻址地址空间的大小。例如,若地址
线有16位,不采用分时多次传送地址的话,则可访问的存储单元最多只能有21?个。
5.总线定时方式
按照总线上信息传送的定时方式来分,有同步通信、异步通信和半同步通信3种。同步
通信总线由时钟信号同步;异步通信总线指前一个信号的结束就是下一个信号的开始,信息
的改变是顺序的;半同步通信总线则是同步和异步两种总线定时方式的结合。
6.总线传送方式
总线上数据传送分非突发方式和突发方式两种。非突发传送方式在每个传送周期内都
是先传送地址,再传送数据。在突发(burst)传送方式下,总线能够进行连续的成块数据传
送,传送开始时,先给出数据块在存储器中的首地址,然后连续传送数据块中的后续数据,后
续数据的地址默认为前面数据的地址加上一个数据所占的内存单元数。突发传送无须在地
第8章
279
<!-- page: 297 -->
计算机组成与系统结构(第3版)
280
址线上传送后续数据的地址信息,因而在总线宽度和总线时钟频率相同的情况下,比非突发
传送方式的数据传输率高。
7.总线负载能力
总线的负载能力指总线上所能挂接的遵循总线电气规范的总线设备的数目。由于总线
上只有扩展槽能由用户使用,所以总线的负载一般指总线上扩展槽的个数。
8.3.2基于总线的互连结构
图8.3 是一个传统的基于总线互连的计算机结构示意图,在其互连结构中,除了CPU、
主存储器以及各种接插在主板扩展槽上的I/O控制卡(如声卡、视频卡)外,还有北桥芯片
和南桥芯片。这两块超大规模集成电路芯片组成一个“芯片组”,是计算机中各个组成部分
相互连接和通信的枢纽。主板上所有的存储器控制功能和I/O控制功能几乎都集成在该
芯片组内,它既实现了总线的功能,又提供了各种I/O接口及相关的控制功能。其中,北桥
是一个主存控制器集线器(memory controller hub,MCH)芯片,本质上是一个 DMA(direct
memory access)控制器,因此,可通过MCH芯片,直接访问主存和显卡中的显存。南桥是
一个I/O 控制器集线器(1/O controller hub,ICH)芯片,其中可以集成 USB控制器、磁盘控
制器、以太网络控制器等各种外设控制器,也可以通过南桥芯片引出若干主板扩展槽,用以
接插一些 I/O 控制卡。
寄存器组
R6
CPU总线接口
ALU
CPU(前端)总线
显卡
北桥芯片
存储器总线
主存储器
y
0
A
USB
控制器和接口
鼠标器
键盘
VO总线
以太网卡
网线
南桥芯片
VO总线
磁盘控制器
光驱
disk
主板扩展槽
PCl接口
声卡视频卡
图8.3 外设、设备控制器和CPU及主存的互连
如图8.3所示,CPU 与主存之间由处理器总线(也称前端总线或 CPU 总线)和存储器
总线相连,各类I/O设备通过相应的设备控制器,如显示适配卡(显卡)、USB控制器、以太
网卡、磁盘控制器等,连接到I/O总线上,而1/O总线通过芯片组与主存和CPU连接。
传统上,总线分为处理器-存储器总线和1/O总线。处理器-存储器总线比较短,通常是
高速总线。通常处理器总线和存储器总线是分开的,它们之间可以通过北桥芯片(桥接器)
连接,CPU 芯片通过 CPU插座插在处理器总线上,内存条通过内存条插槽插在存储器总
线上。
下面对处理器总线、存储器总线和I/O 总线进行简单说明。
<!-- page: 298 -->
系统互连及输入输出组织
1.处理器总线
早期的Intel微处理器的处理器总线称为前端总线(front side bus,FSB),它是主板上
最快的总线,主要用作处理器与北桥芯片进行信息交换。
FSB的传输速率单位实际上是MT/s,表示每秒传送多少百万次。MHz是时钟频率单
位,早期的 FSB每个时钟周期传送一次数据,因此时钟频率与传输速率一致。但是,从
Pentium Pro开始,FSB采用四倍并发(quad pumped)技术,在每个总线时钟周期内传4次
数据,也就是说总线的传输速率等于总线时钟频率的4倍,若时钟频率为333MHz,则传输
速率为 1333MT/s,即1.333GT/s,但习惯上称 1333MHz。若前端总线的工作频率为
1333MHz(实际时钟频率为333MHz),总线宽度为64位,则总线带宽为10.664GB/s。
Intel公司推出 Core i7时,北桥芯片的功能被集成到了CPU芯片内,CPU通过存储器
总线(即内存条插槽)直接和内存条相连,而在CPU芯片内部的核与核之间、CPU芯片与其
他CPU芯片之间,以及CPU芯片与IOH(input/output hub)芯片之间,则通过QPI(quick
path interconnect,快速通道互联)总线相连。
QPI总线是一种基于包传输的串行高速点对点连接协议,采用差分信号与专门的时钟
信号进行传输。QPI总线有20条数据线,发送方(TX)和接收方(RX)有各自的时钟信号,
每个时钟周期传输2次。一个QPI数据包包含80位的数据,需要两个时钟周期或4次传
输才能完成整个数据包的传送。在每次传输的20位数据中,有16位是有效数据,其余4位
用于循环冗余校验,以提高系统的可靠性。由于QPI是双向的,在发送的同时也可以接收
另一端传输来的数据,这样,每个 QPI总线的带宽计算公式为
QPI总线带宽=每秒传输次数×每次传输的有效数据×2
QPI总线的速度单位通常为GT/s,若QPI的时钟频率为2.4GHz,则速度为4.8GT/s,表示
每秒钟传输4.8G次数据,并称该QPI工作频率为4.8GT/s。因此,工作频率为4.8GT/s的
QPI总线的总带宽为4.8GT/s×2B×2=19.2GB/s。工作频率为6.4GT/s的QPI总线的总
带宽为6.4GT/s×2B×2=25.6GB/s。
图8.4给出了Intel Core i7中核与核之间、核与主存控制器之间以及各级 cache 之间的
互连结构。
从图8.4可以看出,一个 Core i7处理器中有4个CPU核(core),每两个核之间都用
QPI总线互连,并且每个核还有一条 QPI总线可以与IOH芯片互连。处理器支持三通道
DDR3 SDRAM内存条插槽,因此,处理器中包含有3个主存控制器,并有3个并行传输的
存储器总线,这意味着一组存储器总线包含3个内存条插槽,正如7.2.4节中图7.9(a)所示
的双通道内存条插槽一样,组内的内存条可以以并行方式存取信息。
2.存储器总线
早期的存储器总线由北桥芯片控制,处理器通过北桥芯片和主存储器、图形卡(显卡)以
及南桥芯片进行互连。Core i7以后的处理器芯片中集成了主存控制器,因而,存储器总线
直接连接到处理器,如图8.4所示。
根据芯片组设计时确定的芯片组能够处理的主存类型的不同,存储器总线有不同的运
行速度。如图8.4所示的计算机中,存储器总线宽度为64位,每秒钟传输1333M次,总线
带宽为1333M×64/8=10.664GB/s,因而3个通道的总带宽为32GB/s,与此配套的内存条
型号为 DDR3-1333。
第8章
281
<!-- page: 299 -->
计算机组成与系统结构(第3版)
CPU芯片内含的核,共4个
282
寄存器组
指令预取
L1 d-cache
32KB,8路
Ll i-cache
32KB,8路
L2联合cache
256KB,8路
MMU
L1 d-TLB
64个页表项,4路
L1 i-TLB
128个页表项,4路
L2联合TLB
512个页表项,4路
QPI点对点连接总线
4条,每个带宽为25.6GB/s
连接
其他核
连接IOH
L3联合cache
8MB,16路
(所有核共享)
DDR3主存控制器
3×64bit @10.664GB/s
总带宽32GB/s(所有核共享)
主存储器
三通道 DDR3-1333 SDRAM
图8.4 Intel Core i7中各类存储器以及核之间的互连
3.I/O 总线
I/O总线用于为系统中的各种1/O设备提供输入/输出通路,物理上通常是主板上的一
些I/O扩展槽。早期的第一代I/O总线有XT、ISA、EISA,VESA,这些I/O总线早已被淘
汰;第二代I/O总线包括 PCI、AGP、PCI-X;第三代I/O总线是 PCI-Express。
与前两代I/O总线采用并行传输的同步总线不同,PCI-Express采用串行传输方式。
两个 PCI-Express设备之间以一个链路(link)相连,每个链路可包含多条通路(lane),可能
的通路数为1、2、4、8、16或32,PCI-Express×n表示具有n个通路的 PCI-Express 链路。
每条通路由发送和接收数据线构成,在发送和接收两个方向上都各有两条差分信号线,
可同时发送和接收数据。在发送和接收过程中,每个数据字节实际上被转换成了10位信息
后才被传输,以保证所有位都含有信号电平的跳变。这是因为在链路上没有专门的时钟信
号,接收器使用锁相环(PLL)从进入的位流0-1和1-0跳变中恢复时钟。
PCI-Express1.0规范支持通路中每个方向的发送或接收速率为2.5Gb/s。因此,PCI
Express 1.0 规范总线的总带宽计算公式(单位为 GB/s)为
PCI-Express 1.0 规范总线带宽=2.5Gb/s×2×通路数/10
根据上述公式可知,在 PCI-Express1.0规范下,PCI-Express×1的总带宽为0.5GB/s;PCI
Express×2的总带宽为1GB/s;PCI-Express×16 的总带宽为 8GB/s。
将北桥芯片功能集成到 CPU 芯片后,主板上的芯片组不再是传统的三芯片结构
(CPU+北桥+南桥)。根据不同的组合,现在有多种主板芯片组结构,有的是双芯片结构
(CPU+PCH),有的是三芯片结构(CPU+IOH+ICH)。其中,双芯片结构中的 PCH
(platform controller hub)芯片除了包含原来南桥(ICH)的I/O控制器集线器的功能外,以
前北桥中的图形显示控制单元、管理引擎(management engine,ME)单元也集成到了PCH
<!-- page: 300 -->
系统互连及输入输出组织
中,另外还包括 NVRAM((non-volatile random access memory)控制单元等。也就是说,
PCH比以前南桥的功能要复杂得多。
图8.5是一个基于Intel Core i7系列三芯片结构的单处理器计算机系统互连结构。
Core i7处理器芯片直接与三通道 DDR3 SDRAM主存储器连接,并提供一个带宽为
25.6GB/s的QPI总线,与基于X58芯片组的IOH芯片相连。图中每个通道的存储器总线
时钟频率为533MHz,每个时钟周期进行2次数据传送,因而总线带宽为64b/8×533MHz×
2=8.5GB/s,所配内存条速度为533MHz×2=1066MT/s。
PCI-Express 2.0
1×16、2×16、4×8
或其他组合
最多
36条
6个PCl-Express×1
10/100/1000Mbps
网卡接口
Intel Core i7处理器
QPI
25.6GB/s
X58
IOH
DMI ,2GB/s
ICH10
ICHIOR
64b,8.5GB/s
64b,8.5GB/s
64b,8.5GB/s
DDR3 1066
DDR3 1066
DDR3 1066
集成声卡
6个SATA□
12个高速USB口
图8.5 基于Intel Core i7系列处理器的计算机互连结构
在图8.5所示的互连结构中,IOH的重要功能是提供对 PCI-Express 2.0的支持,最多
可支持36条 PCI-Express 2.0通路,可以配置为一个或两个 PCI-Express 2.0×16的链路,
或者4个PCI-Express 2.0×8的链路,或者其他的组合,如8个 PCI-Express 2.0×4的链路
等。这些 PCI-Express 链路可以支持多个图形显示卡。
IOH与ICH芯片(ICH10或ICH10R)通过 DMI(Direct Media Interface)总线连接。
DMI采用点对点的连接方式,时钟频率为100MHz,因为上行与下行各有1GB/s的数据传
输率,因此总带宽达到2GB/s。ICH芯片中集成了相对慢速的外设I/O接口,包括6个
PCI-Express×1接口、10/100/1000Mbps 网卡接口、集成声卡(HD Audio)、6个SATA硬
盘控制接口和12个支持 USB 2.0标准的 USB接口。若采用ICH10R 芯片,则还支持
RAID功能,即ICH10R芯片中还包含RAID控制器。
8.3.3I/O 接口的功能
外部设备种类繁多,且具有不同的工作特性,因而它们在工作方式、数据格式和工作速
度等方面存在很大差异。此外,由于CPU、内存等计算机主机部件采用高速元器件,使得主
机和外设之间在技术特性上有很大的差异,它们之间采用异步工作方式。为此,在各个外设
和主机之间必须要有相应的逻辑部件来解决它们之间的同步与协调、工作速度的匹配和数
据格式的转换等问题,该逻辑部件就是外设的I/O接口。
外设的I/O接口又称设备控制器、I/O控制器或I/O控制接口,也称I/O模块。它是
介于外设和I/O总线之间的部分,不同的外设往往对应不同的设备控制器。设备控制器通
第8章
283
<!-- page: 301 -->
计算机组成与系统结构(第3版)
284
常独立于外部设备,它可以集成在主板上(即ICH芯片内)或以插卡的形式插接在I/O总线
扩展槽上。例如,图8.3和图8.5中的显卡、磁盘控制器、以太网卡(网络控制器)、USB控制
器、声卡、视频卡等都是一种外设I/O接口。
键盘接口
并行口
以太网
双绞线接口
鼠标器
串行口
显示器
USB
接口
接口
接口
图8.6 常用的I/O 设备插座
麦克风
音箱
外设的I/O接口根据从CPU接收到的控制命令来对相应外设进行控制。它在主机一
侧与I/O总线相连,在外设一侧提供相应的连接器插座,在插座上连上相应的连接外设的
电缆,就可以将外设通过相应的I/O接口连接到主机。
图8.6给出了常用的几种连接外设的连接器插座。例如,键盘和鼠标可以连接在 PS/2
插座(图中键盘接口和鼠标器接口处)上,也可以连在USB接口上。目前很多外设都连接在
USB接口上。
I/O接口是连接外设和主机的一个“桥梁”,因此它在外设侧和主机侧各有一个接口。
通常把它在主机侧的接口称为内部接口,在外设侧的接口称为外部接口。内部接口通过
1/O总线和内存、CPU相连,而外部接口则通过各种I/O接口电缆(如 USB线、IEEE1394
线、串行电缆、并行电缆、网线或 SCSI电缆等)将其连到外设上。因此,通过1/O接口,可以
在CPU、主存和外设之间建立一个高效的信息传输“通路”。这个通路就是“CPU和内存一
I/O总线—I/O接口(带连接器插座的设备控制器)—电缆—外设”。
I/O接口的职能可概括为以下几方面。
(1)数据缓冲。由于主存和CPU寄存器的存取速度非常快,而外设速度则较低,所以
在I/O接口中引入数据缓冲寄存器,可以实现主机和外设工作速度的匹配。
(2)错误或状态检测。在I/O接口中提供状态寄存器,以保存各种状态信息,供CPU
查用。如设备是否完成打印或显示,是否已准备好输入数据以供主机来读取,是否发生缺纸
等出错情况。接口和外设发生的出错情况有两类:一类是设备电路故障或异常情况;另一
类是数据传输错,这种错误是通过采用数据校验码来检测的。
(3)控制和定时。提供控制和定时逻辑,以接收从I/O总线传来的控制命令(命令字)
和定时信号。CPU根据程序中的I/O请求,选择相应的设备进行通信,要求一些内部资源
(如主存或寄存器、总线等)参与到I/O过程中,这样I/O接口就必须提供定时和控制功能,
以协调内部资源与外设之间动作的先后关系,控制数据通信过程。
(4)数据格式转换。提供数据格式转换部件(如进行串-并转换的移位寄存器),使通过
外部接口得到的数据转换为内部接口需要的格式,或在相反的方向进行数据格式转换。例
<!-- page: 302 -->
系统互连及输入输出组织
如,从磁盘驱动器以二进制位的形式读出或写入后,在磁盘控制器中,应对读出的数据进行
串-并转换,或对写入的数据进行并-串转换。
8.3.4I/O 接口的通用结构
不同的I/O接口在复杂性和控制外设的数量上相差很大,图8.7给出了一个I/O接口
的通用结构。
主机侧(VO总线)
人
设备侧(接口电缆)
数据线
地址线
控制线
数据缓冲寄存器
状态/控制寄存器
地址译码和
L/O控制逻辑
外设界面
控制逻辑
外设界面
控制逻辑
数据
状态
控制
数据
状态
控制
图8.7 1/O 接口的通用结构
如图8.7所示,I/O接口在内部的主机侧通过1/O总线与内存、CPU 相连。通过其中
的数据线,在数据缓冲寄存器与内存或 CPU的寄存器之间进行数据传送。同时I/O接口
和设备的状态信息被记录在状态寄存器中,通过数据线可将状态信息送到CPU,以供查用。
CPU对外设的控制命令也是通过数据线传送的,一般将其送到I/O接口的控制寄存器。从
功能上来说,状态寄存器和控制寄存器在传送方向上是相反的,而且CPU对它们的访问在
时间上一般是错开的,因此有的I/O接口中将它们合二为一。
I/O总线的地址线用于给出要访问的I/O接口中寄存器的地址,它和读写控制信号一
起被送到I/O接口的I/O控制逻辑部件中,其中地址信息用于选择和主机交换数据的寄存
器,通过控制线传送来的读/写控制信号也有可能参与地址译码,例如,可以用读/写信号确
定是接收寄存器(写信号)还是发送寄存器(读信号)。此外,控制线中还有一些仲裁信号和
握手信号等也可被I/O接口使用。
I/O接口中的I/O控制逻辑还要能对控制寄存器中的命令字进行译码,并将译码得到
的控制信号通过外设界面控制逻辑(带连接器插座)送外设,同时将数据缓冲寄存器的数据
发送到外设或从外设接收数据到数据缓冲寄存器。另外,还要具有收集外设状态到状态寄
存器的功能。
如果某个I/O接口能够作为数据通信的主控设备(例如 DMA控制器),那么它就可以
发起总线事务并控制总线进行数据传送,控制线上的控制信号由它确定,它的地址线方向是
输出。
有了设备控制器这一类的I/O接口,底层I/O软件就可以通过I/O接口来控制外设,
因而编写底层I/O软件的程序员只需要了解I/O接口的工作原理,包括其中有哪些程序可
访问的寄存器、控制/状态寄存器中每一位的含义、I/O接口与外设之间的通信协议等,而关
第8章
285
<!-- page: 303 -->
计算机组成与系统结构(第3版)
286
于外设的机械特性,程序员则无须了解。
在底层I/O软件中,可以将控制命令送到控制寄存器来启动外设工作;可以读取状态
寄存器来了解外设和设备控制器的状态;可以通过直接访问数据缓冲寄存器来进行数据的
输入和输出。当然,这些对数据缓冲寄存器、控制/状态寄存器的访问操作是通过相应的指
令来完成的,通常把这类指令称为I/O指令。因为这些I/O指令只能在操作系统内核的底
层I/O 软件中使用,因而它们是一种特权指令。
例如,IA-32中提供了4条专门的I/O指令:in、ins,out和outs,其中的in和 ins 指令
用于将I/O接口中某个寄存器的内容取到CPU内的通用寄存器中;out 和outs用于将通
用寄存器的内容输出到I/O 接口的某个寄存器中。
8.3.5I/O 端口及其编址
系统如何在I/O指令中标识要访问I/O接口中的哪个寄存器呢?这就是I/O 端口的
编址问题。I/O端口实际上就是I/O接口中的寄存器,例如,数据缓存寄存器就是数据端
口,控制/状态寄存器就是控制/状态端口。为了便于CPU对I/O设备的快速选择和对I/O
端口的方便寻址,必须给所有I/O接口中各个可访问的寄存器进行编址。有独立编址和统
一编址两种方式。
1.独立编址方式
独立编址方式是对所有的1/O端口单独进行编号,使它们成为一个独立的I/O地址空
间。这种情况下,指令系统中需要有专门的I/O指令来访问I/O端口,在I/O指令的地址
码部分给出1/O端口号。因为独立编址方式中的I/O 地址空间和主存地址空间是两个独
立的地址空间,因而无法从地址码的形式上区分,所以需用专门的I/O指令来表明访问的
是I/O地址空间。CPU执行I/O指令时,会产生I/O读或I/O写总线事务,CPU通过1/O
读或I/O写总线事务访问I/O端口。
通常,I/O端口数比存储器单元少得多,选择I/O端口时只需少量地址线,因此I/O 端
口译码简单,寻址速度快。使用专用1/O指令,使得程序清晰,便于理解和检查。但I/O指
令往往只提供简单的传输操作,故程序设计灵活性差些。
例如,Intel处理器架构就采用了独立编址方式,提供了专门的I/O指令:in(ins)指令
和out(outs)指令。其I/O地址空间由21?=64K个地址编号组成,每个编号可以寻址一个
8位的I/)端口,两个编号连续的8位端口可看成一个16位端口。例如,以下两条指令就
是将AL寄存器中的字符数据送到打印机数据缓冲寄存器(端口号为378H)中:
MOV DX,378H
OUT DX,AL
2.统一编址方式
统一编址方式下,I/O 地址空间与主存地址空间统一编号,即从主存地址空间中分出一
部分地址给1/0端口进行编号。因为I/O端口和主存单元在同一个地址空间的不同分段
中,根据地址范围就可区分访问的是I/O端口还是主存单元,因而无须设置专门的I/O指
令,只要用一般的访存指令就可以存取I/O端口。因为这种方法是将I/O端口映射到主存
空间的某个地址段上,所以,也被称为“存储器映射方式”。
<!-- page: 304 -->
系统互连及输入输出组织
因为统一编址方式下I/O访问和主存访问共用同一组指令,所以它的保护机制可由分
段或分页存储管理来实现,而无须专门的保护机制。这种存储器映射方式给编程提供了非
常大的灵活性。任何对内存存取的指令都可用来访问位于主存空间中的I/O端口,并且所
有有关主存的寻址方式都可用于I/O端口的寻址。例如,可用访存指令实现CPU寄存器
和I/O端口之间的数据传送;可用and、or或 test等指令直接操作I/O接口中的控制寄存
器或状态寄存器。
大多数 RISC架构都采用统一编址方式,如 RISC-V和MIPS这两种架构的I/O 端口采
用存储器统一编址方式,对I/O端口中信息的读/写是通过load/store指令实现的,通过指
令中操作数地址的范围可区分读写的是主存单元还是I/O端口。
对于MIPS 32 架构,图8.8 给出了其虚拟地址空间映射,其中内核空间中位于
0xA000 0000~0xBFFF FFFF 的 kseg1区域是非映射非缓存区域。它被固定映射到物理
地址空间最开始的512MB(Ox0000 0000~0x1FFF FFFF)区间,只需将虚拟地址最高三位
清零即可转换为物理地址,无须经过MMU转换,因此它是非映射(unmapped)区域。同时,
它也是非缓存(uncached)区域,该区域中的信息不能送 cache 进行缓存。
OxFFFF FFFF
kseg2
(1GB)
OxC000 0000
0xBFFF FFFF
kseg1
(512MB)
0xA000 0000
Ox9FFF FFFF
kseg0
(512MB)
0x8000 0000[
Ox7FFF FFFF
用户栈
$sp
运行时堆
(用malloc创建)
可读写数据区域
只读代码区域
0x0040 0000
未使用
0
图8.8 MIPS 32 虚拟地址
内核空间
(2GB)
用户空间
(2GB)
通常将I/O端口地址空间分配在 ksegl区域,其原因是该区域的非缓存特性(即在
cache中没有副本)能保证对I/O空间访问的数据一致性。此外,kseg1 是唯一能在系统启
动时(此时 MMU和 cache还未能正常工作)可以访问的地址空间,因此,MIPS 32 规定,上
电重启后所运行程序的第一条指令的地址为OxBFC0 0000,所映射的对应物理地址是
0x1FC0 0000。
如果将 MIPS32虚拟地址空间的 kseg1区域中的一块地址分配给I/O 地址空间,其中
第8章
287
<!-- page: 305 -->
计算机组成与系统结构(第3版)
288
的地址对应到不同外设控制器中的I/O端口号,例如,可将 0xB0C0 0000~0xBOC0 OFFF
范围的地址分配给网卡(网络控制器)中的I/O端口。执行lw装入指令时,只要通过简单
的虚实地址变换,将分配给I/O端口号的虚拟地址变换为对应的物理地址,CPU将该物理
地址送到系统总线上,最终通过I/O总线的地址线传送到I/O接口中,从而选中要访问的
I/O端口。例如,执行以下两条指令就可以将1/O端口(地址为B0C0 0010H)中的信息(数
据或状态)取到通用寄存器$t8中。
lui $t9,0xb0c0
*将立即数BOC00000H装入寄存器st9
1w St8,0x10($t9)
#访问的虚拟地址为 B0C0 0000H+10H=B0C0 0010H
8.4I/O数据传送控制方式
外设与主机之间的数据传送称为输入/输出,简称I/O。主要有程序直接控制、中断控
制和 DMA控制3种I/O数据传送控制方式。
8.4.1程序直接控制I/O 方式
程序直接控制方式直接通过查询程序来控制主机和外设之间的数据交换,通常有无条
件传送和条件传送两种方式。
1.无条件传送方式
无条件传送方式也称同步传送方式,主要用于对一些简单外设(如开关、继电器、7段数
码显示器或机械式传感器等)在规定的时间用相应的I/O指令对接口中的寄存器进行信息
的输入或输出。其实质是通过程序来定时,以同步传送数据,适合于各类巡回采样检测或过
程控制。图8.9是一个采用无条件传送方式的接口示意图。图中的接口中有一个数据锁存
器和一个三态缓冲器,它们共用同一个地址,可以看成同一个输入/输出数据寄存器,通过相
应的I/O端口访问指令可直接对该寄存器进行存取,在读/写信号的控制下进行数据的输
入和输出。由此可见,无条件传送的接口比较简单,无须任何定时信号和状态查询,只需要
进行相应的读/写控制和地址译码即可。
系统总线 DB-
,8
锁存器
CE
8
至输出设备
三态缓冲器
CE
8
来自输入设备
来自系统总线 AB
来自系统总线CB
MIO
端口
地址
译码器
WR
RD
图8.9 无条件传送接口
无条件传送方式下,处理器对外设的1/O接口进行周期性的定时访问,直接对I/O端
<!-- page: 306 -->
系统互连及输入输出组织
口进行数据存取。对于慢速设备,因为定时访问时间间隔长,所以I/O操作所用的处理器
时间占整个处理器时间的比例较少,对处理器效率影响不大;而对于快速设备,因为需要频
繁进行I/O访问,所以很多处理器时间被I/O操作占用,因而这种方式不宜用于高速设备
的1/O。
2.条件传送方式
条件传送方式也称异步传送方式。对于一些较复杂的1/O接口,往往有多个控制、状
态和数据寄存器,对设备的控制必须在一定的状态条件下才能进行。此时,可通过在查询程
序中安排相应的I/O端口访问指令,由这些指令直接从I/O接口中取得外设和接口的状
态,如“就绪(Ready)”“忙(Busy)""完成(Done)”等,根据这些状态来控制外设和主机的信息
交换。这是一种通过查询接口中的状态来控制数据传送的方式,因此也称为程序查询方式,
其接口结构如图8.10 所示。
第8章
289
数据线
准备就绪
⑥
⑤i
数据缓冲寄存器
启动命令①
D
B
地址线 t
设备选择电路
③
②
④
数据输入
启动设备
设备工作结束
图8.10 条件传送方式接口
图8.10所示的I/O接口中,左边是I/O总线侧,CPU执行相应指令,通过I/O总线向
I/O接口送出“启动”命令,并读取“就绪”等状态信息,或向(从)数据缓冲寄存器写入(读取)
数据。I/O接口的右边是和设备相连的电缆和接口插座侧,可以送出“启动设备”命令,或接
受“设备工作结束”等信号,并可通过数据线和设备交换数据信息。CPU采用条件传送方式
通过该I/O接口读取外设数据的过程是:①CPU执行相应的I/O访问指令向该接口送出
“启动”命令,设备选择电路对CPU送出的地址进行译码,选中本1/O接口,这样,与非门输
出信号使“完成”状态触发器D清零,而使“启动”命令触发器B置1;②1/O接口通过连接
电缆向外设发送“启动设备”命令;③外设准备好一个数据,通过电缆向I/O 接口中的数据
缓冲寄存器输入数据;④外设向I/O接口回送“设备工作结束”状态信号,使状态触发器D
置1,使命令触发器B清零;⑤CPU通过执行指令不断读取I/O接口状态,因触发器 D已
经被置1,所以查询到外设“准备就绪”;⑥CPU通过执行I/O访问指令从数据缓冲寄存器
读取数据。通过以上6个步骤,CPU 和外设之间完成一次数据交换过程。
设备是否适合采用条件传送方式,主要取决于I/O设备本身的特点以及设备是否能够
独立启动I/O等。键盘和鼠标等是随机启动的低速I/O设备,当用户按下键盘、移动鼠标
或单击鼠标按钮时,便启动了I/O设备的输入操作。对于这类自身能独立启动I/O的设
备,虽然可以采用定时程序查询方式,但是由于设备的启动是由用户随机进行的,所以有可
能用户长时间没有输入而引起查询程序长时间等待,从而降低处理器的使用效率,因此,这
类设备大多采用后面要介绍的中断方式进行I/O;对于由操作系统启动的设备,则只有被操
<!-- page: 307 -->
计算机组成与系统结构(第3版)
290
作系统激活后才需要查询。对于像磁盘、磁带和光盘存储器等成块传送设备一旦被启动,便
可连续不断地传送一批数据,处理器无须对每个数据的传送进行启动,而且每个数据之间的
传输时间很短,如果用定时查询方式,则会因为频繁查询而使处理器为1/O操作所花费的
时间比例变得很大,因此,不适合采用程序查询方式。像针式打印机等字符类设备,每个字
符之间的传输时间较长,并且每传送一个字符需要启动一次,因而可以采用程序查询方式。
根据查询操作被启动的方式的不同,程序查询方式分为两种:定时查询和独占查询。
定时查询是指周期性地查询接口状态,每次查询总是一直等到条件满足,才进行一个数据的
传送,传送完成后返回到用户程序。定时查询的时间间隔与设备的数据传输率有关。下面
举例说明对于不同I/O传输速率的设备,CPU 为其I/O操作所花费的时间开销是不同的。
例8.2 假定查询程序中所有指令执行的操作(包括读取I/O端口并分析状态、传送数
据等)所用的时钟周期数至少是400个,处理器的主频为500MHz,即处理器每秒钟产生
500×10?个时钟周期。若设备一直持续工作,采用定时查询方式,则在以下3种情况下,
CPU用于I/O的时间占整个CPU时间的百分比各是多少?
(1)鼠标必须每秒钟至少被查询30次,才能保证不错过用户的任何一次移动。
(2)软盘按16位为单位进行数据传送,数据传输率为50KB/s,要求没有任何数据传送
被错过。
(3)硬盘以16字节为单位进行数据传送,数据传输率为4MB/s,要求没有任何数据传
输被错过。
解:对于查询方式,CPU花在输入/输出上的时间由查询次数乘以查询操作时间得到。
(1)对于鼠标,每秒钟内用于查询的时钟周期数至少为30×400=12 000,因此,CPU
用于鼠标I/O的时间占整个 CPU时间的百分比至少为12 000/(500×10)≈0.002??显
然,CPU 对鼠标的查询操作对性能的影响不是很大。
(2)对于软盘,因为每次数据传送的单位为16位,占两字节,所以只有当查询的速率达
到每秒50KB/2B=25K次时才能保证没有任何数据传送被丢失。因此,每秒钟内用于软盘读
写的时钟周期数为25K×400,在整个CPU时间中所占百分比为25k×400/(500×10)=2??
(3)对于硬盘,要求每次以16字节为单位进行查询,因此查询的速率应达到每秒
4MB/16B=250k次,故每秒钟内用于硬盘I/O的时钟周期数为250k×400,CPU 用于硬盘
读写的时间占整个 CPU时间的百分比为250k×400/(500×10°)=20??也就是说,CPU
的五分之一时间都用于硬盘读写,显然,对硬盘采用查询方式是不可取的。
如果软盘和硬盘仅有25??时间是活动的,那么,操作系统只要在设备被激活时进行
查询,所以查询的平均开销将被分别降到0.5?5??尽管这样降低了开销,但是一旦操
作系统发出一个对设备的启动命令,它就必须接连不断地查询,因为操作系统不知道什么时
候设备会响应并准备好一次传送。这种一旦设备被启动,CPU 就一直持续对设备进行查询
的方式,称为独占查询方式。
独占查询方式下,CPU被独占用于进行某设备的I/O,由CPU控制I/O整个过程,即
CPU花费了100??时间在I/O操作上,此时,外设和CPU完全串行工作,其查询程序的
流程如图8.11所示。
从图8.11中可以看出,在任何一个数据传送之前,必须先读接口的状态,判断接口是否
“就绪”,只有在接口“就绪”的情况下,才继续进行传送。否则,CPU将一直处于等待状态直