I/O:Input / Output,即输入/输出。
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设备:输入设备(鼠标,键盘),输出设备(显示器,打印机等),外存储器(简称外存,硬盘,光盘等)。
其中:显示器(阴极射线管CRT显示器、液晶LCD显示器、LED显示器)
显示器的性能指标:
- 屏幕大小:以对角线长度表示。
- 分辨率:像素个数。屏幕上一个光点就是一个像素。宽的像素 * 高的像素。
- 灰度级:黑白显示器(例如:kindle)所显示的像素点的亮暗差别;彩色显示器所表现的颜色的不同。灰度级越高,图像层次越清楚逼真。灰度级位数n,则亮度或颜色种。
- 刷新频率:单位时间内扫描整个屏幕内容的次数。通常显示器刷新频率在60~120Hz。刷新频率超过30Hz才不会感到闪烁。(因光点很快消失,需在消失前重新扫描显示,即刷新)
- 显示存储器(VRAM):刷新存储器。存储容量由图像分辨率和灰度级决定。至少存储一帧图像信息。
VRAM容量 = 分辨率 * 灰度级位数。
VRAM带宽 = 分辨率 * 灰度级位数 * 帧频。
I/O设备由机械部件和电子部件组成。
I/O设备的机械部件主要用于执行具体的I/O操作。CPU不能直接控制I/O设备的机械部件。
I/O设备的电子部件是I/O接口,介于主机和I/O设备的机械部件之间,用于实现CPU对设备的控制(CPU控制I/O接口,I/O接口控制I/O设备的机械部件)。
I/O接口(又称I/O控制器、设备控制器)
主机和I/O设备的数据传送,通过I/O接口实现。
I/O接口种类很多,也会制定相应的标准。大部分I/O接口是可编程的。
I/O接口可能是串行接口(一位一位数据传送,例如USB),也可能是并行接口(多位数据同时传送)。
I/O接口是块芯片,常集成在主板上,通过总线(地址总线、数据总线、控制总线)与主机连接。也有的I/O接口集成在南桥芯片(桥接器)中。
I/O接口中包含一系列寄存器(数据缓冲寄存器、控制寄存器、状态寄存器等)。
I/O接口的功能:
- 缓冲数据:CPU速度快,I/O设备速度慢,为了缓解两者速度的矛盾,因此需I/O接口中的数据缓冲寄存器暂存需传送的数据。
- 数据格式转换:因为CPU到I/O接口大多为并行,也可能串行;外部设备到I/O接口可能串行也可能并行,因此需I/O接口中的串-并转换机构负责数据格式转换(串行-并行转换)。
- 检测状态和错误:检测设备的状态和错误信息,以便CPU查询。
- 接收并识别CPU发出的命令。
- 地址译码和设备选择功能。
- 控制逻辑,如中断、DMA控制逻辑(允许产生DMA请求信号并在响应后完成DMA传输)、设备操作等。
CPU --> I/O接口:
- CPU通过控制总线向I/O接口发送命令、时钟信号等。
- CPU通过地址总线向I/O接口指明I/O端口。
- CPU通过查询I/O接口的状态寄存器来获取外部设备的状态或错误。
- (向I/O设备写数据)CPU通过数据总线向I/O接口的数据缓冲寄存器传送数据;(从I/O设备读数据)CPU通过数据总线从I/O接口的数据缓冲寄存器接收数据存入主存。
I/O接口:
- I/O接口通过控制总线向CPU反馈中断请求信号。
- I/O接口通过数据总线向CPU传送中断类型号。
- I/O接口通过地址译码逻辑电路将地址信号映射到指定端口。
- I/O接口通过I/O控制逻辑电路根据控制字(命令字,即CPU对设备发出的具体命令)向设备发出控制信号。
- (向I/O设备写数据)将I/O接口中的数据缓冲寄存器的数据写入外部设备;(从I/O设备读数据)外部设备向I/O接口的数据缓冲寄存器传送数据。
注:控制寄存器和状态寄存器因时间错开,有些I/O接口中控制寄存器和状态寄存器为同一个寄存器。
一个IO接口可以对应一个或者多个设备,每个设备可以有自己的一组寄存器(数据寄存器、控制寄存器、状态寄存器)。CPU通过控制不同组的寄存器,来控制不同的设备。
I/O接口中能被CPU直接访问的寄存器称为I/O端口(PORT)。
I/O端口主要有数据端口、控制端口和状态端口,若干端口加上相应的控制逻辑电路组成接口。
一般CPU能对数据端口执行读写操作,对控制端口只能执行写操作,对状态端口只能执行读操作。
I/O端口的编址
一个I/O端口对应一个或一组寄存器,都有各自的编号(即地址)。
I/O端口的编址方式:统一编址,独立编址。
(1)统一编址:将I/O端口当做主存单元进行地址分配。将主存划分出一部分作为I/O端口的地址空间。也称为存储器映射方式。一般用于单总线结构的计算机系统中。
统一的访存指令。访问主存的指令都可以访问I/O端口。使用不同的地址码区分主存和I/O端口。
控制电路简单,程序设计较灵活,端口有较大编址空间,但占用主存地址空间,地址位数多,译码速度慢。
(2)独立编址:I/O端口的地址和主存地址是相互独立的。也称为I/O映射方式。
专门的I/O指令访问I/O端口。使用不同的指令区分内存和I/O端口。在X86中,I/O指令有IN、OUT、INS、OUTS。
有专门的I/O指令,程序清晰,不占用主存地址空间,地址位数少,译码速度快,但控制电路复杂,I/O指令少,程序设计灵活性差。
I/O指令,通道指令
通常,CPU通过I/O指令,访问I/O端口,从而实现主机和外部设备之间的数据传送。
有通道的系统中,CPU通过I/O指令启动/停止设备、控制通道等,通道通过通道指令完成主机和设备之间的数据传送。
I/O指令:CPU指令的一部分。I/O指令是只能在操作系统内核使用的特权指令。
格式:操作码、命令码、设备码。
- 操作码:识别是否是I/O指令。
- 命令码:执行什么操作。
- 设备码:对哪个设备执行操作。
通道指令:通道能识别的指令。
通道指令序列组成通道程序,通道程序提前编制好存放在内存中。
CPU通过I/O指令向通道发出命令(通道程序在内存中的位置、哪个设备等),通道识别并执行一系列通道指令,代替CPU对I/O设备进行统一管理。
I/O控制方式
外部设备(外设)和主机之间的输入/输出控制方式:程序查询方式,程序中断方式,DMA方式,通道控制方式等。
(1)程序查询方式:也称为程序直接控制方式。
- CPU启动I/O设备后,不断循环查询I/O设备的状态,等到I/O设备数据准备好,进行数据传送(一般每次传送一个字)。
CPU和I/O设备只能串行工作。CPU不断轮询检查设备状态,长时间处于忙等状态,CPU利用率低。
注:从外部设备读数据时,CPU从I/O接口中的数据缓冲寄存器将数据读入CPU寄存器,再将CPU寄存器中的内容写入主存。
(2)程序中断方式:也称中断驱动方式。
- CPU启动I/O设备后,CPU继续执行当前程序;
- I/O设备准备好数据后,向CPU发出中断请求,CPU响应请求则暂停当前程序,开始处理中断服务程序(I/O设备与主机之间的数据传送);
- CPU处理完中断,CPU再继续执行被暂停的程序。
CPU和I/O设备可并行工作,提高CPU的工作效率,但要每个设备分配相应的中断请求号和中断服务程序,以及增加中断控制器,且每准备好一个字就发出一次中断请求,降低系统性能。
字符设备常采用中断方式。字符设备:以字符或字节为单位进行数据传送的设备,传输速率慢,不可寻址,例如:鼠标,键盘。
(3)DMA方式:需要DMA控制器(又称DMA接口,一种I/O接口,连接高速设备、块设备)。
DMA,Direct Memory Access,直接主存访问。
块设备:以“块”为单位进行数据传送的设备,传输速率较快,可寻址,例如:磁盘。
DMA方式,数据传送时是由DMA控制器控制不需要CPU干预,CPU只涉及开始时向DMA控制器发出命令、数据传送完处理中断请求。
进一步提高CPU和I/O设备的并行性。但对于多个离散的数据块,CPU需发出多次I/O指令、处理多次中断请求。
【单总线结构】以从I/O设备读数据为例:
- CPU启动I/O指令将主机地址、外部设备地址、数据长度等传送到DMA控制器,CPU仍执行当前程序;
- I/O设备将数据暂存在DMA控制器的数据缓冲寄存器,每准备好一个字,向DMA控制器发出一次DMA请求;
- DMA控制器向CPU申请总线,CPU将总线控制权交给DMA控制器;
- DMA控制器控制I/O设备与主机之间数据传送(每次传送一个字,此时CPU不能使用总线不能访问主存);
- 一整块或多个连续块的数据传送完,DMA控制器才向CPU发出一次中断请求表明数据已传送完;
- CPU响应并处理中断请求。
【三总线结构】以从I/O设备读数据为例:
- CPU启动I/O指令将主机地址、外部设备地址、数据长度等传送到DMA控制器,CPU仍执行当前程序;
- I/O设备将数据暂存在DMA控制器的数据缓冲寄存器,每准备好一个字,向DMA控制器发出一次DMA请求;
- DMA控制器花费一个存取周期通过专门的DMA总线控制I/O设备和主存之间的数据传送(每次传送一个字,此时CPU不能访问主存);
- 一整块或多个连续块的数据传送完,DMA控制器才向CPU发出中断请求表明数据已传送完;
- CPU响应并处理中断请求。
【三总线结构】CPU和DMA控制器都有专门的总线访问主存,在访存时可能产生冲突。
CPU和DMA控制器访问主存的方式:
- DMA控制器传送一整块数据时CPU都不能访问主存,CPU利用率不高;
- DMA控制器和CPU交替访问主存,硬件逻辑复杂;
- 存取周期挪用:CPU访问主存时DMA控制器等待,CPU不访问主存(或存取周期结束后)DMA控制器访问主存,若同时访问则DMA控制器先访问主存(I/O访存优先)。
(4)通道控制方式:需要硬件设备通道,通道程序提前编制好存放在主存中。
- CPU向通道发送I/O指令(通道程序在内存中的位置、哪个设备等),CPU仍执行当前程序;
- 通道执行内存中通道程序的一系列通道指令,控制I/O设备完成数据传送;
- 通道执行完规定的任务后(即传送完一组数据块),向CPU发出中断请求;
- CPU响应并处理中断请求。
通道控制方式,数据传送时是由通道控制不需要CPU干预,CPU只涉及开始时向通道发出命令、数据传送完处理中断请求。
补充:中断
中断:多道程序中,程序执行过程中,因某些情况,CPU暂停当前程序,去处理其他程序,处理完,再继续原程序。
引起中断的事件称为中断源。即可以产生中断请求信号的部件为中断源。
中断源向CPU 发出中断请求信号称为中断请求。
发生中断时被打断程序的暂停点称为断点。
CPU暂停当前程序而转为响应中断请求的过程称为中断响应。
处理中断源的程序称为中断处理程序。
CPU执行有关的中断处理程序称为中断处理。
返回断点的过程称为中断返回。
中断分类:内中断,外中断(狭义上的中断)。
CPU响应中断必须满足的条件:
(1)有中断源发出中断请求,
(2)CPU处于开中断状态(即允许中断),
(3)一条指令执行完并且没有更紧急的任务。
CPU响应中断的时间:
每条指令执行阶段的结束时刻。
(每条指令执行阶段结束前,CPU向接口发出中断查询信号以获取I/O的中断请求)
中断判优:多个中断源同时发出中断请求时,通过中断判优逻辑(优先级)响应一个中断源。可由硬件实现(硬件排队器)也可由软件实现(查询程序)。通常使用硬件排队器来实现中断判优。
中断处理过程(CPU执行):中断隐指令,中断服务程序。
中断隐指令:
- 关中断(确保在中断服务程序时,保护中断现场或恢复中断现场不被新的中断打断,中断处理完可以回到原程序正确执行下去),
- 保存断点(用堆栈或特定存储单元保存当前程序的PC值即程序计数器的内容,保证中断处理后能正确返回原程序),
- 引出中断服务程序(硬件排队器择优后,通过中断向量地址形成部件映射到对应的向量地址即中断类型号,根据向量地址对应的无条件转移指令(JMP指令)的中断向量,获得中断服务程序的入口地址并传送给PC)。
中断服务程序:
- 保护现场(用堆栈或特定存储单元保存通用寄存器和状态寄存器的内容,保证返回原程序时恢复中断时的CPU环境),
- 中断服务(设备服务,即操作系统内核处理中断),
- 恢复现场(通过出栈指令或取数指令把之前保存的信息送回到各自寄存器中),
- 中断返回(通过中断返回指令回到原程序断点处,即把之前保存的PC值即断点送回到PC中)。
多重中断(中断嵌套):
多重中断:执行中断服务程序时,可响应新的中断请求。但需有选择的响应中断请求。
中断屏蔽:当CPU检测到中断请求时,中断控制器通过中断屏蔽字决定是否响应中断请求。1表示屏蔽该中断源(即不响应该中断源的中断请求),0表示该中断源可正常申请中断。
每个中断源必须屏蔽自身(即不能被自身中断);优先级高的中断源可以中断优先级低的中断源(例如:A的优先级高于B,A执行时,B发出中断请求 将被屏蔽不被响应;若B执行时,A发出中断请求,暂停B执行A即A的中断请求被响应)。
每个中断源都有一个屏蔽触发器,所有屏蔽触发器组合在一起就是屏蔽字寄存器,屏蔽寄存器的内容称为屏蔽字。