计算机组成原理-学习笔记17-IO输入输出

计算机组成原理-学习笔记17-IO输入输出

Lecture 17 IO输入输出

  • 外围设备:
    • 外部设备提供了在外部环境和计算机系统之间的数据交换,通常被称为外围设备(peripheral device),简称为外设(peripheral)。
  • 类型
    • 人可读设备:适用于与计算机用户通信
      • 显示器, 打印机, ……
    • 机器可读设备:适用于与设备通信
      • 磁盘, 磁带, ……
    • 通信设备:适用于与远程设备通信

1.IO模块

产生背景

  • 不可以将外设直接连接到系统总线上
    • 外设操作方法多种多样
    • 外设数据传送速度比cpu和存储器慢得多
    • 某些外设数据传送速度比cpu和存储器快(反正就是不一样)
    • 数据格式和字长度和cpu不同

IO模块是计算机内部系统和外设之间的桥梁。(仍属于计算机系统的一部分)

  • 通过系统总线和中央交换器和存储器连接
  • 通过专用数据线与一个或多个外设连接

采用统一的接口格式

image-20230223232738686

  • 输入/输出模块的接口以控制、状态和数据信号的形式出现
  • 与设备相关的控制逻辑控制外设的操作,以响应来自输入/输出模块的命令
  • 缓冲器用于缓存输入/输出模块和外设之间传送的数据
    • 目的:解决IO太快或太慢
    • 缓冲器的大小一般为8位或16位
  • 转换器:模拟信号与数字信号

1.1.IO模块的功能

双向通信

  • 与处理器通信
    • 命令译码: 输入/输出模块接收来自处理器的命令,这些命令一般作为信号发送到控制总线
    • 状态报告: 由于外设速度很慢, 所以知道输入/输出模块的状态很重要
    • 数据: 数据是在处理器和输入/输出模块之间经由数据总线来交换的
    • 地址识别: 输入/输出模块必须能识别它所控制的每个外设的唯一地址
  • 设备通信
    • 通信内容包含命令、 状态信息和数据

数据缓冲

  • 类比银行柜员处理文件,排队

控制和定时

  • 原因
    • 处理器会非预期的与一个或几个外设进行通信
    • 一些内部资源, 如主存和系统总线, 是被共享的

检错

  • 检错并把差错信息报告给处理器
  • 差错类型
    • 设备报告的机械和电路故障
    • 传输过程中数据位的变化

1.2.IO模块的结构

image-20230223234124654

大图=小图逆时针转了90°

  • 左侧:状态/控制寄存器用来保存CPU对外设的命令

    • 寄存器复用,知道状态才能控制
  • 右侧:有多组外部设备

外部接口(上图左右的细化)

  • 串行(用的多):只有一根线用于传输数据,每次只传输一位数据
    • 传得远,时钟频率高
  • 并行:多根线连接输入/输出模块和外设,同时传送多位数据
    • 并行多条线需要保持信息同步(多人走路)
    • 当传输速度和总线长度增加时, 总线的时钟频率会受到限制
      • 相邻传输间隔时间变长,避免混淆

image-20230223234912904

  • 例子
    • FireWire: IEEE标准1394串行总线
    • USB: 通用串行总线(Universal Serial Bus)
      • 更主流,更快

1.3.IO操作技术

  • 编程式I/O:处理器通过执行程序来直接控制I/O操作,当处理器发送一条命令到I/O模块时,它必须等待,直到I/O操作完成

  • 中断驱动式 I/O: 处理器发送一条I/O命令后,继续执行其他指令;并且当I/O模
    块完成其工作后, 才去中断处理器工作

  • 直接存储器读取(Direct Memory Access,DMA) : I/O模块与主存直接交换数据, 而不需要处理器的干涉

    • 仅指数据处理不需要cpu。其他可能要用cpu

编程式IO

  • 当处理器在执行过程中遇到一条与I/O操作有关的指令时, 它通过发送指令到适当的I/O模块来执行这条指令

    • 读状态->未就绪 / 就绪 / 出错
    • 若就绪,由IO读取字
  • I/O不会中断处理器, 因此处理器需要周期性地检查I/O模块的状态, 直到发现该操作完成

  • image-20230224121950485

  • CPU全程100%投入

IO命令

  • 处理器发送一个指定具体I/O模块和外设的地址, 并发送一条I/O命令
  • 控制命令: 激活外设并告诉它要做什么
  • 测试命令: 测试I/O模块及其外设相关的各种状态条件
  • 读命令: 使I/O模块从外设获得一个数据, 把它存入内部缓冲区
  • 写命令: 使I/O模块从数据总线获得一个数据, 把它传入外设

IO指令

  • I/O指令很容易映射为I/O命令, 并且两者之间通常是简单的一一对应关系
  • 编址方式
    • 存储器映射式IO:存储单元和I/O设备有统一的地址空间
      • pros:能使用大的指令系统,可进行更有效的编程
        cons:I/O设备占用地址空间
    • 分离式IO:让总线既有存储器的读线和写线,同时也有输入和输出命令线

中断驱动式IO

image-20230224124611822

  • 处理器发送一个I/O命令到模块,然后去处理其它有用的工作
  • 当I/O模块准备和处理器交换数据时,它中断处理器以请求服务

从IO模块角度:

  • I/O模块接收来自处理器的读命令
  • I/O模块从相关的外设中读入数据
  • 一旦数据进入I/O模块的数据寄存器后, 该模块通过控制总线给处理器发送中断信号
    • 对应上方1.2 IO模块的结构
  • I/O模块等待直到处理器请求该数据时为止
    • CPU可能有更重要的事
  • 当处理器有数据请求时, I/O模块把数据传送到数据总线上, 并准备另一个I/O操作

**从处理器的角度来看 **

  • 处理器发送一个读命令
  • 处理器离开去做其它的事情, 并在每个指令周期结束时检查中断
  • 当来自I/O模块的中断出现时, 处理器保存当前程序的现场
  • 处理器从I/O模块读取数据字并保存到主存中
  • 处理器恢复刚才正在运行的程序的现场, 并继续运行原来的程序

两种状态:中断允许/禁止

image-20230224125420695

  • 有时数据过多,需要传送数据时便设为“中断禁止”
  • 中断处理时,也是“中断允许”状态
    • 可嵌套中断,涉及优先级

响应优先级和处理优先级

  • 例子:公交车上抢座位,响应优先级是小伙子腿脚麻利。处理优先级是老太太有让座权
  • 存在两个优先级都高的中断源。而高中断源会屏蔽低中断源,只看到更高中断源

image-20230224130208975

  • 掩码字:根据处理优先级,表示会不会屏蔽其他中断。1表示屏蔽
    • 行屏蔽列
    • 主程序的优先级可以看作最低的
  • 例子流程:
    • 1:主程序
    • 2:先中断1(响应优先级)
      • 中断关闭,处理保存,中断1开始
    • 3:处理完1,恢复主程序(pop栈)
    • 4:响应3(push栈3)(响应优先级)
    • 5:中断4抢夺3(push栈4)(处理优先级)(3还没动)
    • 6:恢复3,对2视而不见(处理优先级)
    • 7:恢复主程序
    • 8:push2
    • 9:恢复主程序

设备识别

例:设备有多个USB插口

  • 多条中断线: 处理器仅仅挑选具有最高优先级的中断线

    • 固定优先级
    • 即使有多条中断线可用, 每条线上也需要采用其它三种技术中的一种
  • 软件轮询: 模块的轮询次序就决定了模块的优先级

    • 轮询顺序决定优先级
    • 轮询每一个I/O模块来确定是哪个模块发生的中断
  • 菊花链: 链接模块次序就决定了模块的优先级

    • 总线结构决定优先级
    • 所有的I/O模块共享一条中断请求线, 中断应答线采用菊花链穿过这些中断模块
  • 独立请求: 中断控制器决定

    • 特定的中断控制器用于解码和分析优先级

DMA直接存储器存取

前两种技术的不足

  • I/O传送速度受处理器测试和服务设备速度的限制
  • 处理器负责管理I/O传送,对于每一次I/O传送,处理器必须执行很多指令

DMA:无需经过处理器即可直接访问内存的模块

  • 解放了CPU,需要另一个硬件去控制

  • image-20230224155053193

  • CPU需要通知DMA

    • 处理器通过发送以下信息向DMA模块发出命令:读/写、 I/O设备地址、 内存中的起始位置、 字数
    • 处理器继续进行其他工作
    • DMA模块将全部数据块, 每次一个字, 直接将数据传输到存储器或从存储器读出, 而无需经过处理器
    • 当传输完成时,DMA模块向处理器发送一个中断信号
    • DMA优先于CPU访问内存,因为IO设备更快
    • image-20230224160653238

DMA访问法

  • CPU停止法

image-20230224161449205

优点: 控制简单
缺点: 影响CPU,没有充分利用内存
适用: 高速I/O设备的块传输(数据连续)

  • 周期窃取法

image-20230224161540555

优点: 充分利用CPU和内存,及时响应I/O请求
缺点: DMA每次都请求总线
适用: I/O周期大于存储周期(一波波数据)

  • 交替分时访问法(各占一半)

image-20230224161731176

优点: CPU未停止或等待, DMA不请求总线
缺点: CPU周期大于存储周期

DMA配置

(以下方式IO聚合度逐渐提高)

  • 单总线分离DMA
    • 相当于编程式直接分离CPU

image-20230224162052936

  • 单总线集合的DMA-I/O
    • DMA成为IO的一部分

image-20230224162223050

  • I/O 总线
    • 共享DMA

image-20230224162334994

DMA总流程

image-20230224162507820

由此可知:查询传送参数、寻道、查找扇区、校验都需要CPU,DMA只在连续读写发挥作用。

1.4.IO模块的演变

image-20230224163354333

发展趋势:效率提高、模块分离。

2.exam

4/5为重点

image-20230224172337405

本质上是寻址题。分辨有几位端口就是2的几次方

“隐含”并不影响结果

image-20230224172551429

知识点:扫描能使缓存清空。扫描间隔必须小于缓冲区存满的时间

频率(次数) = 1 / 时间

image-20230224174121224

(a)每秒传64kb,中断64x1000/8 = 8k次,共计 8k * 100μs = 800ms,80%

  • 1秒(s) =1000毫秒(ms)
    1毫秒(ms)=1000微秒 (μs)
    1微秒(μs)=1000纳秒 (ns)
    1纳秒(ns)=1000皮秒 (ps)

(b)

  • 中断处理 ≠ 中断服务

  • 中断耗时 = 中断处理时间 + 中断服务(题中说“延长”,故增加(16-1)*8μs)

  • 处理间隔变长了

image-20230224181938553

a)直接查询方式

  • 夺取总线+交回总线200+200
  • IO数据传送与总线数据传送同时进行
    • 故有max(128*500ns,128B/400kbs) + 500ns(最后一次一定为总线上)
    • ms和ns隔了6次方
  • 0.02ms是从?

b)周期窃取

  • 仅计算切换时间和总线传输时间。

  • IO传输时间2.56ms/128 = 0.02ms为什么不计?

image-20230225085646829

类似题4

  • 直接查询方式 image-20230225093908586
    • 1GHz=1000MHz = 10^9Hz
    • 比较IO传输时间(20μs)与总线传输时间(1000 * 1ns),最后加上总线时间1μs
    • CPU占用率一定为100%
  • 中断驱动image-20230225093914432
    • a)中断 = 中断请求 + 中断响应 + 中断执行 = 1202周期
    • b)每个字节传送时间(IO->CPU->内存,和cpu处理IO无关) + 处理每次中断时间 = 总时间
  • DMA
    • a)CPU时间只与DMA初始化后处理有关。2000 x 1s x 1000
    • b)总时间 = 每个字节传送时间 + DMA挪用时间(1000周期) + DMA处理时间(a中时间)

image-20230225100033436

缓冲区易丢失

image-20230225100115214

a)

  • 用缓冲区大小 + 中断处理次数 * 中断处理时间 判断能否中断
    • 单位时间最小中断次数 = 数据传输率 / 缓冲区大小
  • 总时间 = 最小次数 * 1/时钟频率 * 时钟周期数

b)同比计算

image-20230225100953723

image-20230225101024998

类似PPT例题

  1. 即使要抢夺,也得先处理响应较快的
  2. 回归后也不会第一时间被抢夺
  3. 被屏蔽的中断,需要等待回归主程序,再抢夺主程序

image-20230225101819003

a) 直接查询,条件是查询间隔时间 < 每个字节IO设备传输率

image-20230225103515327

c)中断驱动,条件是响应中断间隔时间 < 每个字节IO设备传输率

查看评论