计组笔记第七章——输入输出系统

7.1.1 I/O系统和IO控制方式

  • 常见I/O设备:
    鼠标、键盘;显示器、打印机;硬盘、光盘。
  • 主机如何与I/0设备进行交互?
    I/O接口:又称I/O控制器、设备控制器,负责协调主机与外部设备之间的数据传输。
    I/O接口与CPU之间靠总线连接,与外设之间靠USB连接线连接。
    I/O接口多种多样,也会指定相应的标准,如:用于控制USB设备的I/O接口、用于控制SATA3.0硬盘的IO接口等。
    现在的I/O接口(芯片)也会被集成在南桥芯片内部。

I/O控制方式简介

img
对于如下C语言程序:

#include<stdio.h>
int main() {
    char i;
    scanf("%c", &i);
    printf("i = %c\n", i);
    return 0;
}

程序运行到scanf("%c", &i)时会停在那里,等待键盘输入。

  • CPU如何控制键盘I/O的完成呢?
    • I/O接口由数据寄存器、控制寄存器和状态寄存器构成。
    • 数据寄存器用来存放IO设备写到CPU中的数据或者CPU写给IO总线的设备。
    • 控制寄存器:控制外设具体做什么动作的控制信息存在控制寄存器中。
    • 状态寄存器:这个寄存器反映了外设的状态。
    • CPU通过控制总线,向IO接口发出一个读命令。同时地址总线指明要读的是哪个设备。地址总线也可以用来指明此次读的数据放到哪个数据寄存器中。
    • 如何查询状态寄存器?
    1. 程序查询方式:CPU不断轮询检查IO控制器中的“状态寄存器”,检测到状态为“已完成”后,再从数据寄存器取出输入数据。
    2. 程序中断方式:等待键盘IO时CPU可以先去执行其他程序,键盘IO完成后IO控制器向CPU发出中断请求,CPU响应中断请求,并取走输入数据。
    • 数据流:键盘->IO接口寄存器->数据总线->CPU某寄存器->主存
  • 思考:对于某些快速的IO设备,如“磁盘”,每准备好一个字就发送一次中断请求,会导致什么问题?
    答:CPU需要花大量的时间来处理中断服务程序,CPU利用率严重下降。
  • 为了让快速IO设备和CPU之间的交互效率更高,提出一种DMA控制方式。
    DMA控制方式
    注:DMA接口,即DMA控制器,也是一种特殊的IO控制器。
    DMA控制方式:主存与高速IO设备之间有一条直接数据通路(DMA总线)。CPU向DMA接口发出“读/写”命令,并指明主存地址、磁盘地址、读写数据量等参数。DMA接口自动控制磁盘与主存的数据读写,每完成一整块数据读写(如1KB为一整块),才向CPU发出一次中断请求。
  • 通道控制方式:
    有的商用中型机、大型机可能会接超多的IO设备,CPU难以负担。这时采用通道控制方式。
    通道控制
    通道是具有特殊功能的处理器,能对IO设备进行统一管理。通道可以理解为功能较弱的CPU,可识别并执行一些列通道指令,通道指令种类、功能通常比较单一。
    通道控制过程大致如下:
    • CPU向通道发出IO指令。指明通道程序在内存中的位置,并指明要操作的是哪个IO设备。CPU就可以去做其他事情。
    • 通道执行内存中的通道程序,控制IO设备完成一系列任务。
    • 通道执行完成规定任务后,向CPU发出中断请求,之后CPU对中断进行处理。

IO系统基本组成

  1. IO硬件:包括外部设备、IO接口、IO总线等
  2. IO软件:包括驱动程序、用户程序,管理程序,升级补丁等。
    通常采用IO指令和通道指令实现主机和IO设备的信息交换。
    • IO指令:CPU指令的一部分。
      结构:操作码 + 命令码 + 设备码
      操作码:判断是不是IO指令,用于和其他指令进行区分。
      命令码:指明做什么操作。
      设备码:对哪个设备进行操作。
    • 通道指令:通道能识别的指令。
      通道程序提前编制好放在主存中。在含有通道的计算机中,CPU执行IO指令对通道发出命令,由通道执行一系列通道指令,代替CPU对IO设备进行管理。
      注:IO指令与普通指令格式略有不同。操作码指明了CPU要对IO接口做什么,命令码指明了IO接口要对设备做什么。

7.1.2 外部设备

输入设备

  • 键盘是最常用的输入设备,每个键相当于一个开关,当按下键时,电信号连通;松开时电信号断开。
    键盘输入信息可分为3步:
  1. 查出按下的是哪个键;
  2. 将该键翻译成能被主机接收的编码,如ASCII码。
  3. 将编码传给主机。
  • 鼠标
    常用的定位输入设备,工作原理是当鼠标在平面上移动时,其底部传感器把运动方向和距离检测出来,从而控制光标做相应运动。

输出设备

  • 显示器:
    • 分类:
      按显示器件分为阴极射线管显示器、液晶显示器和LED显示器。
      按所显示的信息内容分为字符显示器、图形显示器、图像显示器。
    • 显示器参数:
      • 屏幕大小:显示器对角线长度
      • 分辨率:多能表示的像素个数,以宽、高像素的乘积表示。
      • 灰度级:指黑白显示器中所显示的像素点的光暗差别,在彩色显示器中则表示为颜色的不同,灰度级越多,图像层次越清楚逼真,典型的有8位(256级)、16位等。
      • 刷新:光电只能保持极短的时间就会消失,为此必须在光点消失之前再重新扫描显示一遍,这个过程称为刷新。刷新频率:单位时间内扫描这个屏幕内容的次数,按照人的视觉生理,刷新频率大于30Hz时才不会感到闪烁,通常显示器刷新频率在60~120Hz.
      • 显示存储器(VRAM):也称刷新存储器,为了不断提高刷新图像的信号,必须把一帧图像信息存储在刷新存储器中。其存储容量由图像分辨率和灰度级决定,分辨率越高,灰度级越多,刷新存储器容量越大。
        VRAM容量 = 分辨率 * 灰度级位数
        VRAM带宽 = 分辨率 * 灰度级位数 * 帧频
        注:现代计算机中,显存除了作为当前显示帧的缓存,还会用于保存即将渲染的图像数据,在集成显卡计算机中,通常分配一片内存作为显存。
  • 打印机:
    • 根据印字原理不同可分为击打式打印机和非击打式打印机。
      击打式打印机:利用机械动作使印字结构与色带和纸相撞而打印字符。优点:成本低、印字质量好。缺点:噪声大、速度慢。
      非击打式打印机:采用电、磁、光、喷墨等物理、化学方法来印刷字符。优点:速度快,噪声小。缺点:成本高。
    • 根据打印机工作方式不同可分为串行打印机和行式打印机。
      串行打印机:逐字打印,速度慢。
      行式打印机:逐行打印,速度快。
    • 按工作方式可分为:针式打印机、喷墨打印机和激光打印机。

7.2.1 IO接口

IO接口的作用

IO接口:又称IO控制器、设备控制器,负责协调主机与外部设备之间的数据传输。
由于CPU和外设之间的数据差距很大,所以需要有数据寄存器(也叫数据缓冲寄存器)

  • IO接口的作用:
  1. 数据缓冲:通过数据缓冲寄存器(DBR)达到主机和外设工作速度的匹配。
  2. 错误或状态监测:通过状态寄存器反馈设备的各种错误、状态信息,供CPU查用。
  3. 控制和定时:接收从控制总线发来的控制信号、时钟信号
  4. 数据格式转换:串-并、并-串等格式转换
  5. 与主机和设备通信:实现主机 <-> IO接口 <-> IO设备之间的通信。
  • IO接口的内部结构:
    IO接口的内部结构
    主机侧(内部接口):内部接口与系统总线相连,实质上是与内存、CPU相连,数据的传输方式早年是并行,现在也有串行。
    设备侧(外部接口):外部接口通过接口电缆与外设相连,外部接口的数据传输可能是串行方式,因此IO接口需要具有串/并转换功能。
    有的IO接口可以连接多个设备。也可以对应一个设备。

IO接口的工作原理

  • 如果CPU要操控打印机进行打印任务,CPU需要把打印命令发到控制寄存器中。发送命令字后,在地址译码器和IO控制逻辑的作用下给CPU控制的外设发出一些控制信号,以此启动打印机。
  1. 发命令:发送命令字到IO控制寄存器,向设备发送命令(需要驱动程序的协助)
  2. 读状态:从状态寄存器读取状态字,获得设备或IO控制器的状态信息。
  3. 读/写数据:从数据缓冲寄存器发送或读取数据,完成主机与外设的数据交换。
  • 为什么状态寄存器和控制寄存器写在一起了?
    因为在CPU控制外设工作时,首先要向控制寄存器发送指令,设备接收这个指令之后,控制寄存器就不用一直存放控制指令了,后续设备状态就可以存放到同一个寄存器中,由此实现寄存器的重复利用。
    由于控制寄存器和状态寄存器在使用时间上是错开的,因此有的IO接口中可将二者合二为一。
  • IO接口中的各种寄存器被称为IO端口。
    地址线的作用是指明IO端口,要往哪个寄存器里面读数据或者写数据。
    数据线里可以传输读写数据、状态字、控制字和中断类型号。
    控制线里传输读写IO端口的信号、中断请求信号。
  • 对于连接多个外设的IO接口,如何确定要操作的设备?
    每个设备对应一组寄存器,操作不同的寄存器就是在操作不同的设备。

IO端口的编址

IO端口是指接口电路中可以被CPU直接访问的寄存器。IO端口可以分为数据端口(CPU可读写),控制端口(CPU只写)和状态端口(CPU只读)。
对于IO端口编址可以采用统一编址和独立编址。

  • 统一编址(存储器映射方式):IO端口地址和内存地址是一个整体。地址译码器可以根据地址信号确定当前访问的是内存还是IO端口。
    靠不同的地址码区分内存和IO设备。访存类的指令都可以访问IO端口。
    RISC机器常用。
    优点:不需要专门的输入输出指令,所有访存指令都可以直接访问端口,程序设计灵活性高。端口有较大的编址空间。读写控制逻辑电路简单。
    缺点:端口占用了主存地址空间,使主存地址空间变小,外设寻址时间长(地址位数多,地址译码速度慢)
  • 独立编址:IO端口地址和内存地址和互相独立的。
    靠不同的指令区分内存和IO设备。只能用专门的IO指令访问IO端口。
    Intel处理器常用,IN、OUT就是IO指令。
    优点:使用专用IO指令,程序编制清晰。IO端口地址位数少,地址译码速度快。IO端口地址不占用主存空间。
    缺点:IO指令类型少,一般只能对端口进行传送操作,程序设计灵活性差。需要CPU提高存储器读写信号、IO设备读写信号,增加了控制逻辑电路的复杂性。

7.3 IO方式

程序查询方式

  • 程序查询方式的示意图如下:
    程序查询方式
  • 结合X86指令说明打印3个字符的操作是怎么进行的。
    首先通过OUT直接将打印命令传给控制寄存器。控制寄存器将指令传给地址译码器和IO控制逻辑,译码出端口地址和写命令。写数据通过数据线传给数据缓冲寄存器。控制信号传给打印机,打印机准备就绪。CPU轮询检查状态寄存器,发现打印机已就绪,就给打印机输出第一个字符。CPU通过地址线指明当前要写入的端口,控制线给出写命令,数据线传递一个字符。IO控制逻辑把这个字符传给打印机。打印之后打印机把就绪状态通过IO控制逻辑传给状态寄存器。后面的过程与此相同。等打印结束后CPU会发出一个停机指令。
  • 程序查询方式流程图:
    程序查询方式流程图
  • 优点:接口设计简单、设备量少。
  • 缺点:CPU在信息传送过程中要花费很多时间用于查询和等待,而且在一段时间内只能和一台外设交换信息,效率大大降低。
  • CPU查询等待的方式:
    • 独占查询:CPU 100%的时间都在查询IO状态,完全串行。
    • 定时查询:在保证数据不丢失的情况下,每隔一段时间CPU就查询一次IO状态。查询的间隔内CPU可以执行其他程序。

程序中断方式

中断系统

中断的基本概念

  • 程序中断是指在计算机执行现行程序的过程中,出现某些急需处理的溢出情况或特殊情况,CPU暂时中止现行程序,而转去对这些异常情况或特殊请求进行处理,在处理完毕后CPU又自动返回线性程序的断点处,继续执行原程序。
  • 对于不同的中断请求,需要用不同的中断服务程序来处理。
  • 工作流程:
    • 中断请求:
      中断源向CPU发送中断请求信号。
    • 中断响应:
      响应中断的条件。
      中断判优:多个中断源同时提出请求时中断判优逻辑响应一个中断源。
    • 中断处理:
      中断隐指令。本质上是修改PC的值,使其指向中断服务程序的第一条指令。
      中断服务程序。

中断请求的分类

  • 中断可被分为外中断和内中断。外中断是狭义上的中断,信号来源是CPU外部,与当前执行的指令无关。可能情况有外设请求(如IO操作完成发出的中断信号)和人工干预(如用户强行终止一个进程)。外中断可被分为非屏蔽中断(关中断时也会被响应,如掉电)和可屏蔽中断(关中断时不会被响应)
  • 关中断是一种状态,在PSW中用字符IF表示,IF = 1表示开中断(允许中断),IF = 0表示关中断(不允许中断)
  • 内中断也称异常、例外、陷入。信号来源是CPU内部与当前执行的指令有关。内中断可分为自愿中断和强迫中断;自愿中断是指令中断(如系统调用时使用的访管指令(又叫陷入指令、trap指令))。强迫中断可分为硬件故障(缺页)和软件中断(整数除0)
  • 关中断的作用是实现某些原子操作。原子操作指一些操作要么一个都不做,要么就不间断的做完。

中断请求标记

  • 每个中断源向CPU发出中断请求的时间是随机的。为了记录中断事件并区分不同的中断源,中断系统需对每个中断源设置中断请求标记触发器INTR,当其状态为“1”时,表示中断源有请求。这些触发器可组成中断请求标记寄存器,该寄存器可集成在CPU中,也可分散在各个中断源中。
  • 对于外中断,CPU是在统一的时刻即每条指令执行阶段结束前,向接口发出中断查询信号,以获取IO的中断请求,也就是说,CPU响应中断的时间是在每条指令执行阶段的结束时刻。
  • CPU响应中断必须满足以下3个条件:
    • 中断源有中断请求
    • CPU允许中断(即当前处于开中断状态)
    • 一条指令执行完毕,且没有更紧迫的任务。

中断判优

  • 中断判优既可以用硬件实现,也可以用软件实现:
    • 硬件实现是通过硬件排队器实现的,它既可以设置在CPU中,也可以分散在各个中断源中;
    • 软件实现是通过查询程序实现的。
  • 硬件排队器:
    硬件排队器
  • 查询程序:
    查询程序
  • 中断判优的优先级设置:
  1. 硬件故障中断源属于最高级,其次是软件中断。
  2. 非屏蔽中断优于屏蔽中断;
  3. DMA请求优于IO设备传送的中断请求
  4. 高速设备优于低速设备
  5. 输入设备优于输出设备
  6. 实时设备优于普通设备

中断处理过程

  • 当前指令结束后,PC内容为K + 1。此时出现中断信号,进入中断服务程序的方式是把第一条指令的地址放入PC。
    中断服务程序处理结束回到主程序的方法是把K+1放回到PC中去。
  • 中断隐指令:保存源程序的PC值,并让PC指向中断服务程序的第一条指令。
  • 中断隐指令的主要任务:
    • 关中断:在中断服务程序中,为了保护中断现场(即CPU主要寄存器中的内容)期间不能被新的中断所打断,必须关中断,从而保证被中断的程序在中断服务程序执行完毕之后能接着正确地执行下去。
    • 保存断点:为了保证在中断服务程序执行完毕后能正确地返回原来的程序,必须将原来程序的断点(即程序计数器(PC)的内容)保存起来。可以存入堆栈,也可以存入指定单元。
    • 引出中断服务程序:引出中断服务程序的实质就是取出中断服务程序的入口地址并传送给程序计数器。
      这一步有两种方法:
      • 软件查询法:
      • 硬件向量法:给每个中断请求编号,主存中有各个编号的中断请求无条件跳转指令。指明中断服务程序的入口地址。
  • 中断服务程序的主要任务:
    • 保护现场:
      保存通用寄存器和状态寄存器的内容,以便返回程序后可以恢复CPU环境。可使用堆栈,也可使用特定存储单元。
    • 中断服务(设备服务):
      主体部分,如通过程序控制需打印的字符代码送入打印机的缓冲寄存器中。
    • 恢复现场:
      通过出栈指令或取数指令把之前保存的信息送回寄存器中。
    • 中断返回:
      开中断(保证中断服务程序一气呵成),通过中断返回指令回到原程序断点处。
  • 中断处理过程流程图:
    中断处理过程流程图

多重中断

  • 单重中断:执行中断服务程序时不响应新的中断请求。
  • 多重中断:又称中断嵌套,执行中断服务程序时可响应新的中断请求。
  • 对比表格
    保护现场和恢复现场的过程必须一气呵成,对于多重中断程序来说其他部分可以中断。
  • 单重中断和多重中断示意图:
    单重中断和多重中断示意图
  • 中断屏蔽技术:
    每个中断源都有一个屏蔽触发器,1表示屏蔽该中断源的请求,0表示可以正常申请,所有屏蔽触发器组合在一起,便构成一个屏蔽字寄存器,屏蔽字寄存器的内容称为屏蔽字。
    中断屏蔽技术用于多重中断,CPU要具备多重中断的功能,需满足以下条件:
    • 在中断服务程序中提前设置开中断指令。
    • 优先级别高的中断源有权中断优先级别低的中断源。
  • 屏蔽字设置的规律:
    • 一般用1表示屏蔽,0表示正常申请
    • 每个中断源对应一个屏蔽字(在处理该中断源的中断服务程序时,屏蔽寄存器中的内容为该中断源对应的屏蔽字)
    • 屏蔽字中1越多,优先级越高,每个屏蔽字中至少有一个1(至少能屏蔽自身的中断)。

程序中断方式

程序中断方式
程序中断方式

DMA方式

DMA方式

DMA控制器

DMA控制器
DMA控制器通常是用来控制块设备(如磁盘)
CPU可以向DMA控制器指明要输入还是输出;要传送多少个数据;数据在正常、外存中的地址。

  • DMA控制器的工作过程:
  1. 接收外设发出的DMA请求(外设传送一个字的请求),并向CPU发出总线请求。
  2. CPU响应此总线请求,发出总线响应信号,接管总线控制权,并进入DMA操作周期。
  3. 确定传送数据的主存单元地址及长度,并能自动修改主存地址计数和传送长度计数。
  4. 规定数据在主存和外设间的传送方向,发出读写等控制信号,执行数据传送操作。
  5. 向CPU报告DMA操作的结束。
  • DMA的内部结构:
    DMA的内部结构
    • 控制/状态寄存器:由控制和时序电路及状态标志组成,用于指定传送方向,修改传送参数,并对DMA请求信号和CPU响应信号进行协调和同步。
    • DMA请求触发器:每当IO设备准备好数据后给出一个控制信号,使DMA请求触发器置位。
    • 主存地址计数器:简称AR,存放要交换数据的主存地址。
    • 传送长度计数器:简称WC,用来记录传送数据的长度,计数溢出时,数据即传送完毕,自动发出中断请求信号。
    • 数据缓冲寄存器:用于暂存每次传送的数据。
    • 中断机构:当一个数据块传送完毕后触发中断机构,向CPU提出中断请求。
  • 注:在DMA传送过程中,DMA控制器将接管CPU地址总线、数据总线和控制总线。CPU的主存控制信号被禁止使用。而当DMA传送结束后,将恢复CPU的一切权利并开始执行其操作。

DMA传送过程

DMA传送过程

DMA的传送方式

组成和DMA控制器之间有一条数据通路,因此主存和IO设备之间交换信息时,不通过CPU。担当IO设备和CPU同时访问主存时,可能发生冲突,为了有效地使用主存,DMA控制器与CPU通常采用以下3种方法使用主存。

  1. 停止CPU访问主存:
    停止CPU访问主存
    优点:控制简单
    缺点:CPU处于不工作状态或保持状态未充分发挥CPU对主存的利用率。
  2. DMA与CPU交替访存:
    DMA与CPU交替访存
    优点:不需要总线使用权的申请、建立和归还过程。
    缺点:硬件逻辑更为复杂。
  3. 周期挪用(周期窃取):
    周期挪用
    当DMA访问正常时:
    若CPU此时不访存,则DMA之间访问。
    若CPU正在访存,则DMA需要等到CPU存取周期结束后让出总线。
    若CPU同时请求访存,则DMA访存优先。

DMA方式的特点

  1. 它使主存与CPU的固定联系脱钩,主存既可被CPU访问,又可被外设访问。
  2. 在数据块传送时,主存地址的确定、传送数据的计数等都由硬件电路直接实现。
  3. 主存中要开辟专用缓冲区,及时供给和接收外设的数据。
  4. DMA传送速度快,CPU和外设并行工作,提高了系统效率。
  5. DMA在传送开始前要通过程序进行预处理,结束后要通过中断方式进行后处理。
posted @ 2024-07-27 18:08  菜鸟小楠  阅读(77)  评论(0编辑  收藏  举报