【1】广义的总线介绍
总线是计算机内数据传输(计算机在执行指令的过程中CPU、存储器和I/O模块之间要不断进行数据交换)的公共路径,用于实现两个或以上部件之间的信息交换。计算机系统中有多种总线,它们在各个层次上提供部件之间的连接和信息交换通路。
总线的分类
1.1 按照功能分有三类总线
- 核内总线:在处理器核内部各元件之间连线的总线称为核内总线,可连接核内各寄存器、ALU、指令部件等
- 系统总线:指连接CPU、主存和I/O接口等主要部件的总线,通常所说的总线是指这类在系统主要模块之间互连的总线。下面要介绍的也是这种系统总线。
- 通信总线:计算机系统之间或计算机系统与其他系统(远程通信设备、测试设备)之间进行通信的总线,又称外部总线
1.2 按照数据传送方式分有两类总线
- 串行总线:只含有一条双向数据线或两条单向数据线,数据按位分时传送。适合远距离通信,大多数通信总线属于串行总线
- 并行总线:含有多条双向数据线,可实现多位同时传送。传输效率高,但相邻数据线之间会相互干扰,适合近距离传输。大多数系统总线属于并行总线
1.3 按照时序控制方式分有两类总线
- 同步总线:采用公共的时钟信号进行定时,挂接在总线上的所有设备都从时钟线上获得定时信号
- 总线定时以最慢设备所用时间为标准,因此适合于存取时间相差不大的多个功能部件之间的通信
- 由于时钟偏移问题,导致同步总线不能过长,否则会降低总线传输效率
- 同步总线常采用并行传输,即总线的数据条数为8、16、32或64位等
- 异步总线:总线上连接的各部件或设备没有统一的时钟,而是依靠各自内部的定时操作,通过信号握手的方式来进行规定的总线操作,从而完成部件或设备之间的数据传输
- 由于同步并行总线使用快速且长的传输线时,会导致传送到另一端的波形发生变形,从而使得(并行传输的)所有位中最快和最慢的位信号之间的时间差较大,因此现在更多使用异步串行方式进行传输:串行–传输速率可更快+不会影响到其他位
- 一个半吊子-半同步总线:在异步总线中引入了时钟信号,这类总线的就绪信号和应答信号在时钟的上升沿或下降沿有效,所以不会受到其他时间的信号干扰
【2】系统总线
1. 组成:通常由一组控制线、一组数据线和一组地址线构成。也有些总线没有单独的地址线,即数据线和地址线复用
- 数据线:可传输传输指令、操作数,也可传输CPU向I/O模块发出的控制命令或从I/O模块收集到的状态信息。(数据线和地址线复用的话,数据线上也可以传送地址信息)
- 位数(数据总线条数)与机器字长、存储字长有关,一般是8位、16位、32位
- 数据通路和数据线区别:前者是指连接在数据总线上的各个功能部件形成的数据传输路径;后者是数据传输的载体
- 地址线:用来指出主存单元或I/O端口的地址。地址线是单向的,总是由CPU将地址信息送到地址线,然后传送给CPU要访问的主存储器或I/O模块。
- 其位数决定了CPU可寻址的地址空间的上限
- 控制线:用来控制对数据线和地址线的访问和使用。用来传输定时信号和命令信息。除地址线和数据线以外的通信线都称为控制线,如用于传送时钟、复位、总线操作控制、总线请求和总线回答等信号
2. 系统总线的结构
- 单总线结构:CPU、主存、I/O设备(通过I/O接口)都连在一组总线(数据线+地址线+控制线)上
- 主存与I/O设备共用一组地址线,统一编址
- 双总线结构:分为主存总线和I/O总线,前者负责CPU、主存和通道之间的数据传输,后者负责外设与通道之间的数据传输
- 将低速的I/O设备从原来的单系统总线上分离出来,挂接在专门的I/O总线上,提升了系统工作效率。但是在主存总线和I/O总线之间需要增加通道等硬件设备
- 三总线结构(DMA控制器的工作原理):共有三类总线,主存总线(用于CPU与主存之间传输)、I/O总线(用于CPU与外设之间传递信息)、DMA总线(用于主存与高速外设直接交换信息)
- 主存总线和DMA总线不能同时对主存进行存取
- I/O总线只有在CPU执行I/O指令时才能用到
3. 总线事务
- 概念:指在一个总线周期(从请求总线到完成总线)内发生的一系列活动,分为:
- 总线请求:当CPU或DMA等主设备需要使用总线时,发出总线传输申请
- 主模块如CPU、DMA控制器或多处理器的系统
- 对于仅有一个主模块的简单系统,无须申请、分配和撤出,总线使用权始终归它占有
- 总线仲裁:多个主设备同时发出总线请求时,由总线仲裁机构决定哪个申请者获得下一个传输周期的总线控制权
- 设备寻址:主设备获得总线控制权后,将要访问的从设备地址及相关命令发送到总线上,启动参与本次数据传输的从设备
- 数据传输:该阶段主从设备通常只能传输一个字长的数据
- 总线释放:指总线的控制权被释放
- 总线请求:当CPU或DMA等主设备需要使用总线时,发出总线传输申请
- 总线突发(猝发)传送方式:指在数据传输中一次性传送在地址上连续的一批数据。该方式只需获得这批数据的首地址,就可在传输阶段传送地址连续的多个单元的数据。
- 由于总线突发传送方式在多个总线周期内只需要传送一次首地址与控制信息,所以其传输速度要比普通传送方式更快。
4. 总线定时方式(总线通信方式)
- 同步定时方式:指系统采用一个统一的时钟信号来协调发送和接收双方的传送定时关系。时钟信号通常由CPU的总线控制部件发出,送到总线上的所有部件;也可以由每个部件各自的时序发生器发出,但必须由总线控制部件发出的时钟信号对它们进行同步。
- 优点:传送速度快,具有较高的传输速率,总线控制逻辑简单,模块间的配合简单一致
- 缺点:
- 总线定时以最慢设备所用时间为标准,严重影响总线工作效率
- 主从设备属于强制性同步,必须在限定时间内完成规定的要求
- 不能及时进行数据通信的有效性检验,可靠性较差
- 给设计带来了局限性,缺乏灵活性
- 同步总线不能过长,否则会降低总线传输效率。同步总线通常采用并行传输方式,因此使用更快传送速度、更长传输线的总线时,会导致传送到另一端的波形变形
- 异步定时方式:没有统一的时钟,也没有固定的时间间隔,完全依靠传送双方相互制约的“握手”信号来实现定时控制(握手方式也称应答方式)。异步蠢行通信字符格式中包含若干附加位(如起始位、终止位、校验位),因此用比特率来衡量异步串行通信的数据传输速率,即单位时间内传送二进制有效数据的位数,用波特率表示单位时间内传送二进制数据的位数
- 工作方式:主设备发出请求信号时,一直等待从设备反馈回来“响应”信号后,才开始通信
- 根据“请求”和“回答”信号的撤销是否互锁,分为三种类型:
- 不互锁方式(速度最快、可靠性最差):主设备发出“请求”信号后,不必等到接到从设备的“回答”信号,而是自己经过一段时间后便撤销“请求”信号;从设备接到“请求”信号后,发出“回答”信号,并经过一段时间自动撤销“回答”信号
- 半互锁方式:主设备发出“请求”信号后,必须接到从设备的“回答”信号,才能撤销“请求”信号;从设备接到“请求”信号后,发出“回答”信号,并经过一段时间自动撤销“回答”信号
- 全互锁方式(速度最慢、最可靠):主设备发出“请求”信号后,必须接到从设备的“回答”信号,才能撤销“请求”信号;从设备接到“请求”信号后,发出“回答”信号,且必须获知主设备“请求”信号已撤销后,才能撤销“回答”信号
- 优点:
- 总线周期长度可变,能保证两个工作速度相差很大的部件或设备之间可靠地进行信息交换,自动适应时间的配合
- 因为串行,每次在一根信号线上传送数据位,因此传输速率可以比并行总线高得多
- 缺点:比同步控制方式稍复杂一些,速度比同步方式慢
- 半同步通信方式:指在统一时钟的基础上,增加一个“等待”相应信号
W
A
I
T
‾
\overline{WAIT}
WAIT
- 工作方式:主设备在第一个时钟发出地址信号,在第二个时钟的上升沿发出读命令,在同步定时方式中,第二个时钟后,从设备需要准备好数据,但有的从设备可能跟不上节奏,所以这时它会通过控制线路给总线的控制器进行反馈,让总线控制器等自己几个节拍。所以后面的
T
W
T_W
TW两个节拍其实就是总线控制器在等待从设备准备数据。经过两个等待节拍后,从设备准备好数据,并在
T
3
T_3
T3节拍把准备好的数据通过数据总线发送给主设备。最后在
T
4
T_4
T4节拍,主设备撤销读命令以及地址信息。这样就完成了半同步的总线传输工作
- 评价:同步定时方式,每个总线传输周期都是定长的,都是固定为四个总线的时钟周期;而半同步的通信方式结合了异步通信方式的一个优点,即增加了一个等待的反馈信号,这样,总线控制器就可以根据这个反馈信号来动态调节传输周期里面应该包含的时钟周期数。而之所以称为半同步通信方式,是因为它也有一个统一的时钟节拍,但是由于可以动态的调整每一个传输周期内包含的时钟节拍数,因此它也能够支持速度差异比较大的主设备和从设备之间进行数据的交互,是同步和异步思想的结合。
半同步通信适用于系统工作速度不高但又包含了由许多工作速度差异较大的各类设备组成的简单系统。半同步通信控制方式比异步通信简单,各模块又在统一的系统时钟控制下同步工作,可靠性较高,同步结构较方便。缺点是对系统时钟频率不能要求太高,即系统工作的速度不是很高
- 工作方式:主设备在第一个时钟发出地址信号,在第二个时钟的上升沿发出读命令,在同步定时方式中,第二个时钟后,从设备需要准备好数据,但有的从设备可能跟不上节奏,所以这时它会通过控制线路给总线的控制器进行反馈,让总线控制器等自己几个节拍。所以后面的
T
W
T_W
TW两个节拍其实就是总线控制器在等待从设备准备数据。经过两个等待节拍后,从设备准备好数据,并在
T
3
T_3
T3节拍把准备好的数据通过数据总线发送给主设备。最后在
T
4
T_4
T4节拍,主设备撤销读命令以及地址信息。这样就完成了半同步的总线传输工作
- 分离式通信方式
- 上述三种的共同点是一个总线传输周期以下三个阶段,并总线使用权完全由占有使用权的主模块和由它选中的从模块占据
- 主模块发地址和命令(使用总线)
- 从模块按照命令读数据(总线空闲,但主从设备依然占着总线的控制权)
- 从模块向主模块发数据(使用总线)
- 分离式通信:把总线周期切分为两个独立的子周期,充分利用从设备准备数据的这段时间,在这段时间把总线的使用权分配给其他的设备来使用,让总线的数据传输效率更高
- 子周期1:主模块获取总线使用权,然后将命令、地址以及其他信息(如主模块编号)发到系统总线上,经总线传输后由从模块接收下来
- 子周期2:将数据准备好后,从模块便申请总线使用权,一旦获取,从模块便将主模块的编号、从模块的地址、主模块所需的数据等一系列信息送到总线上,供主模块接收。
- 特点:
- 各模块欲占用总线使用权都必须提出申请
- 两个传输子周期都只有单方向的数据流,每个模块都变成了主模块
- 采用同步方式通信,不等对方回答(即主设备在规定的节拍内发出请求信号,不需要等待从设备的回应)
- 各模块准备数据时,不占用总线
- 总线利用率提高
- 这种方式控制比较复杂,一般在普通微型计算机系统很少使用
- 上述三种的共同点是一个总线传输周期以下三个阶段,并总线使用权完全由占有使用权的主模块和由它选中的从模块占据
5. 总线的性能指标
- 总线宽度:每次(一个总线时钟周期内)能同时传输的信息位数,也即数据线的条数
- 总线带宽:即总线在数据传输时单位时间内最多可传输的数据量,也即总线的最大数据传输率。通常用每秒传送信息的字节数来衡量,单位可用字节/秒表示(B/s)。 总线带宽 = 总线工作频率 × ( 总线宽度 8 ) 总线带宽=总线工作频率\times\left(\dfrac{总线宽度}{8}\right) 总线带宽=总线工作频率×(8总线宽度)
- 总线工作频率和总线传输周期:
- 总线工作频率:总线上各种操作的频率,为总线周期的倒数。即一秒内传送几次数据。若总线传输周期=N个总线时钟周期,则总线的工作频率= 总线时钟频率 N \dfrac{总线时钟频率}{N} N总线时钟频率
- 总线传输周期:指一次总线操作所需的时间,包括申请阶段、寻址阶段、传输阶段和结束阶段。总线传输周期通常由若干总线时钟周期构成。与总线工作频率互为倒数
其实总线周期和总线时钟周期并非绝对是一对多的关系,有时一个总线周期可能对应一个总线时钟周期,有时还可能出现多个总线周期对应一个总线时钟周期的情况。如在一个总线时钟周期内,可能在上升沿传送一次数据,下降沿又传送一次数据
- 总线时钟周期和总线时钟频率:
- 总线时钟周期:即机器的时钟周期。计算机有一个统一的时钟,以控制整个计算机的各个部件,总线也要受此时钟的控制
- 总线时钟频率:即机器的时钟频率,它为时钟周期的倒数。
- 总结一下就是:总线时钟周期=机器时钟周期,机器时钟频率= 1 总线时钟周期 = 1 机器时钟周期 \frac{1}{总线时钟周期}=\frac{1}{机器时钟周期} 总线时钟周期1=机器时钟周期1=总线时钟频率
- 总线复用:一种信号线在不同的时间传输不同的信息,可使用较少的线传输更多的信息,从而节省空间和成本。如数据线和地址线复用时,数据线即可以传输数据,也可以传输地址
- 总线传送方式:分为两种
- 非突发方式:在每个传送周期内都是先传地址,再传数据
- 突发方式:先传数据块在存储器中的首地址,然后连续地传送数据块中的后续数据,后续数据的地址默认为前面数据的地址加上一个数据所占的内存单元数。在总线宽度和总线时钟频率相同的情况下,比非突发传送方式的数据传输率高
- 总线寻址能力:即由地址线位数所确定的可寻址地址空间的大小
- 信号线数:控制总线、数据总线和地址总线三种总线数目的总和
- 总线负载能力:指总线上所能挂接的设备的数目。一般是总线上扩展槽的个数
- 总线的最主要性能指标为总线宽度、总线(工作)频率、总线带宽,总线带宽是指总线本身所能达到的最高传输速率,是衡量总线性能的重要指标。
6. 常见的总线标准(具体见这篇)
- ISA
- EISA
- PCI
- AGP
- PCI-E
- VESA
- RS-232C
- USB
- PCMCIA
- IDE
- SCSI
- SATA
【3】双/三总线结构中的I/O总线
- 功能:用于为系统中的各种I/O设备提供输入/输出通路
- 是什么:物理上通常是主板上的一些I/O扩展槽
- 后期:将北桥芯片功能集成到CPU芯片后,主板上的芯片组不再是传统的三芯片结构(CPU+北桥+南桥)。根据不同的组合,现在有多种主板芯片组结构,如:
- 双芯片结构(CPU+PCH):PCH(platform controller hub)芯片包含原来南桥(ICH)的I/O控制器集线器功能,以及北桥中的图形显示控制单元、管理引擎单元、NVRAM控制单元
- 三芯片结构(CPU+IOH+ICH)
- I/O接口:
- 功能:是主机(CPU、主存等)和外设之间信息传输的桥梁,用于解决它们之间的同步与协调、工作速度的匹配和数据格式的转换等问题。它在主机侧和外设侧各提供一个接口:主机侧为内部接口,通过系统总线和CPU、内存相连,数据只能是并行传输;外设侧为外部接口,通过USB、串/并行电缆等各种接口电缆与外设相连,数据可以是串行或并行传输。通过I/O接口,可以在CPU、主存和外设之间建立一个高效的信息传输“通路”,这个“通路”即:CPU和内存 ---- I/O总线 ---- I/O接口(带连接器插座的设备控制器)---- 电缆 ---- 外设。一个I/O接口可以通过多个外部接口连接多个设备。具体功能如下:
- 数据缓冲:CPU寄存器、主存等主机部件的存取速度比外设快很多,因此为了速度匹配,可将数据提前存到I/O接口中的数据缓冲区,用以中和高速系统组件和低速外部设备之间的速度差异
- 数据格式转换:主机和外设的数据格式不同,I/O接口提供数据格式的相互转换,如串并转换、数模转换等
- 控制和定时:为来自系统总线的控制信号和定时信号提供控制和定时逻辑,对内部资源及外设间动作的先后关系进行协调,并对数据通信过程进行控制
- 错误或状态检测:提供可以保存各种状态信息的状态寄存器,CPU通过读取这些寄存器来了解接口和外设的出错情况或状态
- 与主机和设备通信:上述四个功能都必须通过主机与I/O接口之间和I/O接口与外设之间的通信来完成
- I/O接口与CPU之间通信的是I/O指令;I/O接口与外设之间是控制信号(I/O接口会将收到的I/O指令通过I/O控制逻辑译码成控制信号,然后送给外设)
- 在哪里:外设的I/O接口位于外设和I/O总线之间的部分,又称设备控制器、I/O控制器、I/O控制接口、I/O模块。不同的外设往往对应不同的设备控制器。其独立于外部设备,可集成在主板上或以插卡的形式插接在I/O总线扩展槽上,如下图就是一些外设I/O接口
- 看图记I/O接口:
- I/O接口与内部:通过I/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控制逻辑还要能对控制寄存器中的命令字进行译码,并将译码得到的控制信号通过外设界面控制逻辑(带连接器插座)送外设,同时将数据缓冲寄存器的数据发送到外设或从外设接收数据到数据缓冲寄存器。
- 另外,还要有收集外设状态到状态寄存器的功能
- 控制器与设备的接口:完成I/O接口与设备的通信。有三个部分:数据(传送输入/输出数据)、状态(设备要反馈状态)、控制(I/O控制器向设备发出控制信息,即通过CPU发送的命令和参数经过I/O控制逻辑译码后翻译成的控制设备的电路信号)
- 过程:CPU通过地址线指明它要往哪个寄存器里读或写数据,通过控制线发出读还是写的命令,用于指明对这个寄存器是读还是写。此外控制线还会用于给CPU反馈中断请求信号(如I/O设备完成操作,会通过控制线给CPU发送一个中断请求,让它处理后续的操作)。CPU要输入或输出的数据都是通过数据线进行传送,此外数据线也会用于传输状态字和命令字(命令字也称控制字),此外数据线还会用于传输中断类型号(如一个设备工作已完成,需要给CPU发送一个中断,而若设备出现故障,也需要CPU进行不同的中断处理,所以为了让CPU知道当前这个中断请求到底应该怎么处理,需要通过数据线,再结合状态寄存器里的内容给CPU反馈一个具体的中断类型号,让CPU 知道接下来应该怎么处理)
- 操作系统中讲的过程(和上述略有不同,待考证):CPU通过控制线向I/O控制器(的I/O逻辑中)发出一个具体的I/O指令,同时CPU在地址线说明要操纵的是哪个设备。若此时是输出一个数据的话,CPU会通过数据线将要输出的数据放到数据寄存器中。之后,I/O逻辑就从数据寄存器中取得CPU要输出的数据。而CPU此时发出的I/O指令可能会有一些相关的参数,这些参数会通过数据线被放到控制寄存器中,I/O逻辑从控制寄存器中读出相应的参数。此外,为了实现对各个设备的管理,I/O逻辑会往状态寄存器中写入相应的数据来告诉CPU各个设备的状态是什么,然后CPU会从状态寄存器中读出各个设备的状态。
- 关于指明设备号的问题:
- 有的系统中,地址线除了指明CPU要读或写的寄存器之外,也会用来指明具体的设备编号,但需要分两次传输;有的是说io指令由操作码、命令码和设备码构成。
- 有的系统中,每一个外设都有一个与之对应的一组寄存器(数据寄存器+状态/控制寄存器),当CPU要操作不同设备时就往与该设备对应的寄存器组中读写数据即可
- 数据线:
- I/O接口与内部:通过I/O总线与内存、CPU相连
- I/O端口的编址(即I/O接口中寄存器们的编址)
- 独立编址方式:有独立的I/O地址空间,因此指令系统要有专门的I/O指令来访问I/O端口,并在I/O指令的地址码部分给出I/O端口号
- 优点:I/O端口数很少,因此I/O接口只需要少量的地址线,这使得在选择I/O端口时译码更加简单,寻址速度更快;且由于使用专用的I/O指令,和主存指令完全区分开,就使得程序更加清晰,有助于理解和检查
- 缺点:CPU必须分别为存储器和I/O设备提供单独的读写命令,就使得总线控制逻辑更加复杂。此外实现独立的地址空间需要有专门的硬件保护机制
- 统一编址方式(内存映像I/O):I/O地址空间与主存地址空间统一编号,根据地址范围区分访问的是I/O端口还是主存单元,因此无需设置专门的I/O指令,只要一般的访存指令就可存取I/O端口,有非常大的灵活性
- 优点:访问时不再需要专门的I/O指令,且I/O寄存器的数目只受存储容量的制约;另一方面,由于任何访存指令都可以用于I/O端口,这意味着访存指令的寻址方式和保护机制(分段或分页存储管理实现)等特性都可以被共享,所以不需要再设置专门的保护机制,提高编程灵活性
- 缺点:I/O端口占用了部分主存空间的地址,减少了主存可用容量;此外,由于在访问I/O端口时全部地址线都参与地址译码,就使得译码过程复杂,降低寻址速度
- 独立编址方式:有独立的I/O地址空间,因此指令系统要有专门的I/O指令来访问I/O端口,并在I/O指令的地址码部分给出I/O端口号
- 功能:是主机(CPU、主存等)和外设之间信息传输的桥梁,用于解决它们之间的同步与协调、工作速度的匹配和数据格式的转换等问题。它在主机侧和外设侧各提供一个接口:主机侧为内部接口,通过系统总线和CPU、内存相连,数据只能是并行传输;外设侧为外部接口,通过USB、串/并行电缆等各种接口电缆与外设相连,数据可以是串行或并行传输。通过I/O接口,可以在CPU、主存和外设之间建立一个高效的信息传输“通路”,这个“通路”即:CPU和内存 ---- I/O总线 ---- I/O接口(带连接器插座的设备控制器)---- 电缆 ---- 外设。一个I/O接口可以通过多个外部接口连接多个设备。具体功能如下:
【4】I/O数据传送控制方式
主要有4种:程序查询方式(程序直接控制方式)、中断驱动方式、DMA方式、通道控制方式
4.1 程序查询方式
直接通过查询程序来控制主机和外设之间的数据交换,数据从设备->CPU->内存
- 过程:
- CPU向控制器(I/O控制逻辑)发出读指令,设备启动,且将状态寄存器设为1(未就绪)
- CPU轮询检查控制器的状态,若状态一直是1,就说明设备还没有准备好要输入的数据,于是CPU会不断轮询
- 输入设备准备好数据后将数据传送给控制器,并报告自身状态
- 控制器将输入的数据放到数据寄存器中,并将状态改成0(已就绪)
- CPU发现设备已就绪,将数据读如CPU的寄存器中,再把CPU寄存器中的内容放入内存
- 无条件传送方式(同步)
- 工作方式:处理器对外设的I/O接口进行周期性的定时访问,直接对I/O端口进行数据存取。即通过程序来定时,以在规定的时间用相应的I/O指令对接口中的寄存器进行信息的输入或输出
- 评价:对于慢速设备,因为定时访问时间间隔长,所以I/O操作所用的处理器时间占整个处理器时间的比例较少,对处理器效率影响不大;对于快速设备,因为需要频繁I/O访问,所以很多处理器时间被I/O操作占用,因而这种方式不适用于高速设备的I/O
- 条件传送方式(异步)(也称为程序查询方式)
- 工作方式:通过查询程序中安排相应的I/O端口访问指令,由这些指令直接从I/O接口中取得外设和接口的状态(如就绪、忙、完成),根据状态来控制外设和主机的信息交换
- 评价:设备是否适合采用条件传送方式,主要取决于I/O设备本身的特点以及设备是否能够独立启动I/O等。
- 对于用户按下键盘、移动鼠标这种,虽然可独立启动I/O设备,但由于设备的启动是由用户随机进行的,所以有可能用户长时间没有输入而引起查询程序长时间等待,从而降低处理器的使用效率;
- 而对于像磁带、磁盘、光盘存储器等成块传送设备一旦被启动,便可连续不断传送一批数据,处理器无需对每个数据的传送进行启动,且每个数据之间的传输时间很短,若用定时查询方式,则会因为频繁查询而使处理器为I/O操作所花费的时间比例非常大,因此不适合采用程序查询方式
- 对于针式打印机等字符类设备,每个字符之间的传输时间很长,并且每传送一个字符需要启动一次,因而可以使用程序查询方式
- 评价:
- 简单(用软件方式即可实现:在读/写指令后,加上实现循环检查的一系列指令即可,因此才称为“程序直接控制方式”)、易控制、外围接口控制逻辑少。
- 但CPU需要从外设接口读取状态,并在外设未就绪时一直处于忙等待。由于外设速度比处理器慢得多,所以在CPU等待外设完成任务的过程中浪费了许多处理器的时间。CPU和I/O设备是串行工作的
- 且本来是要从设备将数据输入内存的,但这种方式必须先经过CPU的寄存器,然后再由寄存器转存到内存中
4.2 中断驱动方式
- 过程:在CPU发出读/写命令后,将等待I/O的进程阻塞,切换到别的进程执行。当I/O完成后,控制器向CPU发出一个中断信号,CPU检测到中断信号后,会保存当前进程的运行环境信息,转去执行中断处理程序处理该中断。处理中断的过程中,CPU从I/O控制器读一个字的数据传送到CPU寄存器,再写入主存,接着,CPU恢复等待I/O的进程(或其他进程)的运行环境,然后继续执行。
- 评价:
- CPU只在每次I/O操作开始前和完成后介入,等待I/O完成的过程中CPU可切换到别的进程执行,因此提高效率,CPU和I/O设备可并行工作
- 中断处理过程需要保存、恢复进程的运行环境,这个过程也需要一定的时间开销,若中断发生频率太高也会降低系统性能。而中断驱动方式每次只传送一个字的数据,且I/O设备和内存间的传输都要经过CPU
4.3 DMA方式
- 为什么要发明DMA:有了上面的程序中断方式,虽然在一定程度上实现了CPU和外设的并行工作,但并不完全并行。CPU只是在外设的数据准备阶段可以去执行其他程序而不需要原地等待,在执行中断服务程序传输数据时仍要全程参与。因此如果是高速I/O设备,CPU仍要频繁的暂停现行程序去处理中断。因此提出DMA:使得在中断方式的“CPU与外设并行工作”基础上,增加“传送与主程序并行工作”的特点
- 原理:让数据传送不再需要经过CPU,而是直接在外设和内存之间开辟一条“直接数据通路”,使得数据传送期间不再需要占用CPU时间处理中断、保护断点和恢复CPU现场等繁琐操作。在DMA方式中,CPU只参与预处理(CPU通过初始化程序来设置DMA控制器的个参数寄存器的初始值,如内存首地址、字计数值等)和后处理过程(传送完成后CPU会进行数据校验等工作)。通常适用于以块读写的设备。
- DMA方式与中断I/O方式一样,也是采用“请求-响应”的方式,只是中断I/O方式请求的是处理器的时间,DMA方式请求的是总线控制权。如下图,为进程P1在磁盘和主存之间进行数据交换的过程示意图:
- 首先,P1采用程序查询方式设置传送参数,通过执行相应的指令对有关参数寄存器进行初始化;
- 然后CPU执行I/O指令发出“寻道”命令到磁盘控制器,由磁盘控制器控制磁盘驱动器开始移动磁头,同时,CPU切换到其他进程(如P2)执行;
- 当磁盘完成寻道操作后,向CPU发出“寻道结束”中断请求;
- CPU响应并处理该中断请求,中止正在执行的进程P2,在中断服务程序中通过执行I/O指令发出“查找扇区”命令到磁盘控制器,CPU启动“查找扇区”命令后,返回被中止的进程P2执行;
- 当磁盘完成扇区查找操作,就向CPU发出“查找结束”中断请求;
- CPU响应并处理该中断,又一次中断正在执行的进程P2,然后在中断服务程序中启动进行DMA传送,由DMA控制器控制数据在主存和磁盘之间进行数据传送;CPU启动DMA传送后,又回到被中止的进程P2继续执行,直到DMA传送结束;
- 此时,由DMA控制器发出“DMA结束”中断请求,CPU响应并处理该中断请求,对传送的数据进行校验等后处理
- 具体过程:
- DMA控制器的初始化(可与设备驱动程序的执行过程进行对比)
- 准备内存区:若是从外设输入数据,就进行内存缓冲区的申请,并对缓冲区进行初始化;若是输出数据到外设,就先在内存准备好数据
- 设置传送参数:执行I/O访问指令来测试外设状态,并对DMA控制器设置各种参数(如将内存首址送地址寄存器、字计数值送字计数器、传送方向送控制寄存器、设备地址送设备地址寄存器)
- 发送“启动DMA传送”命令,然后调度CPU执行其他进程
- DMA数据传送:数据传送的过程完全由DMA硬件实现,CPU不再参与
- CPU对DMA控制器进行初始化并发送“启动DMA传送”命令后,就把数据传送的工作交给了DMA控制器。在整个DMA传送过程中,不再需要CPU的参与,完全由DMA控制器实现数据的传送。DMA控制器给出内存地址,并在其读/写线上发出“读”命令或“写”命令,随后在数据总线上给出数据。DMA控制器每完成一个数据的传送,就将字计数值-1,并修改主存地址。当字计数器为0时,完成所有I/O操作
- DMA结束处理:
- 当字计数器为0,则发出“DMA结束”中断请求信号给CPU,转入中断服务程序,进行DMA结束处理工作(CPU在当前机器周期结束时响应这个中断请求,中止现行程序的运行,转而去执行中断服务程序,完成数据校验等后续处理工作)
(DMA在从设备将数据读入内存时,也是一个字一个字读入的,每次读入的一个字也是闲存放在DR,再从DR写到内存中)
宏观图示:
- 当字计数器为0,则发出“DMA结束”中断请求信号给CPU,转入中断服务程序,进行DMA结束处理工作(CPU在当前机器周期结束时响应这个中断请求,中止现行程序的运行,转而去执行中断服务程序,完成数据校验等后续处理工作)
- DMA控制器的初始化(可与设备驱动程序的执行过程进行对比)
- DMA控制器的组成:(和I/O控制器类似)
- 主机-控制器接口
- DR(数据寄存器):暂存从设备到内存或从内存到设备的数据
- MAR(内存地址寄存器):在输入时,MAR表示数据应放到内存中的什么位置;输出时MAR表示要输出的数据在内存的什么位置
- DC(数据计数器):表示剩余要读/写的字节数
- CR(命令/状态寄存器):用于存放CPU发来的I/O命令,或设备的状态信息
- I/O控制逻辑
- 块设备-控制器接口
- 主机-控制器接口
- DMA的传送方式:在DMA方式中,DMA接口和CPU共享主存,因此它们同时访问主存时,会出现争用问题,为了实现主存的分时复用,有以下三种方法:
- 停止CPU访存法
- 交替分时访存法
- 周期挪用(窃取)法
DMA的访存优先级要高于CPU,这是因为DMA接口不立即访问主存就可能会出现数据丢失
- 评价: 相比于中断驱动方式,又有如下改进
- 数据的传送单位是每次读/写一个或多个块,不再是一个字、一个字的传送(每次读写的只能是连续的多个块,且这些块读入内存后在内存中也必须是连续的)
- 数据的流向是从设备直接放入内存,或从内存直接到设备,不再需要CPU作为“快递小哥”
- CPU对I/O操作的介入频率进一步降低:只在传送一个或多个数据块的开始和结束时,才需要CPU介入
- 若读取离散的数据块,或读取的数据块要离散地存放在不同的内存区域中时,就需要发出多条I/O指令(这是DMA方式还可以进一步改进的特点)
4.4 通道控制方式
- 什么是通道:
通道是一种硬件,可以理解成“弱鸡版的CPU”,通道可以识别并执行一系列通道指令。但是它可以执行的指令很单一,所以是弱鸡版。通道程序是放在内存中的,也就是通道和CPU共享内存。
一个通道可以控制多个I/O控制器,而一个I/O控制器可以控制多个I/O设备。
宏观图:
- 过程:
- CPU向通道发出I/O指令,指明通道程序(可理解为任务清单,本质上是一系列通道指令的集合)在内存中的位置,并指明要操作的是哪个I/O设备。然后CPU转头执行其他进程
- 通道根据CPU的指示,执行内存中的通道程序(其中指明了要读入/写入多少数据、读/写的数据放在内存的什么位置等信息)
- 通道执行完规定任务后,向CPU发出中断信号,之后CPU对中断信号进行处理
- 评价:
- 这种方式下CPU对I/O操作的频率极低,可以一下子扔给通道一堆事情做。通道只有完成一组数据块的读/写后才需要发出中断信号,请求CPU干预。 DMA是一次读写一个数据块或多个连续的数据块;而通道控制方式是可以每次读写一组数据块
- 通道控制方式也是让数据直接从I/O设备读入内存,或直接将内存中的数据输出到I/O设备当中
- 实现复杂,需要专门的通道硬件支持
- CPU、通道、I/O设备可以并行工作,资源利用率很高
4.5 I/O控制器、DMA控制器、通道关系
- I/O控制器和DMA控制器相当于同一种东西,只不过是为了不同种类的设备而设计的。I/O控制器是给低速设备如键盘使用的,DMA控制器是给高速设备(且一次要读写的数据较多)如磁盘使用的。二者不能共存。
而通道另一种机制,相当于多加了一个小CPU,是在I/O控制器的级别之上的,是用来向I/O控制器发送命令,进行控制的。 - 一个通道可以控制多个设备控制器,一个设备控制器可控制多个设备(如下图左边有多个接口)。而通道不可以直接控制设备(它只能先控制设备控制器,再控制设备)