系统结构第三章-I/O系统

2021/02/04

I/O系统是对外部设备的一个输入输出管理,I/Oinput/ouput的缩写。

外部设备是指除了CPU存储器之外的所有设备。

基本概念

外部设备中包含了两类:

  • 存储设备:硬盘、磁带、光碟等
  • I/O设备:鼠标、键盘、显示器、打印机等

统一编址:存储器和I/O设备的统一编址在一个块,CPU通过loadstore指令进行操作,对主存地址发出指令就是对读写,对I/O地址发出指令就是向设备发出控制命令。

独立编址:设定专用的的I/O指令对I/O设备进行操作,根据CPU发出的信号判断访问的I/O设备地址。 读取主存就用主存指令,进行I/O就使用I/O指令。

统一编址模型
地址
主存空间
I/O空间,键盘、鼠标、显示器等各占一个位置
独立编址流程图,若是统一编址`CPU`出来只有一条线
classDiagram
CPU -- 主存空间: 主存指令
CPU --|> IO设备: I/O指令
IO设备 --* 键盘
IO设备 --* 鼠标
IO设备 --* 显示器
IO设备 --* 等

轮询:由程序员进行在代码判断是否有事件发生,若是有事情发送就处理事情。

中断:由操作系统实现中断传输数据,数据量小没问题,但是数据量大的情况,会出现大问题,因为中断嵌套,一个I/O进来就是一个中断,I/O没有完成就又来一个I/O,造成无限套娃

轮询和中断的学习笔记

DMA:DMA进行传输数据,CPU把主存地址、I/O地址、数据长度、什么时候开始传输等信息发给DMADMA根据CPU的信息开始数据传输,虽然节省了传输时间,但是CPU依然要寻找数据地址,寻找放置数据的主存地址等操作。

没有DCM前传输数据
sequenceDiagram
    participant 主存
    participant CPU
    participant I/O设备
    loop 读取I/O数据
        I/O设备-->>CPU:取数据
        CPU-->>主存:存数据
    end
    loop 写入I/O数据
    主存-->>CPU:取数据
   	CPU-->>I/O设备:存数据
	end
有DMA后传输数据
sequenceDiagram
    participant CPU
    participant DMA
    participant 主存
    participant I/O设备
    loop 读取I/O数据
    CPU->>DMA: 发送主存地址,I/O地址,数据长度、什么时候开始传输等信息
   	I/O设备-->>DMA:读取数据
   	DMA-->>主存:传输数据
   	DMA->>CPU: 我读取好了
   	end
    loop 写入I/O数据
    CPU->>DMA: 发送主存地址,I/O地址,数据长度、什么时候开始传等信息
   	主存-->>DMA:读取数据
   	DMA-->>I/O设备:传输数据
   	DMA->>CPU: 我读取好了
   	end 

通道

通道程序是由硬件实现,拥有自己的一套I/O指令,通过接收CPU的请求,对数据进行传输。

相当于CPU从自己身体分离了一个小弟,专门干I/O的事情。

通道的功能:

  1. 接收CPU的请求,并根据指令要求选择指定外设和通道相连接
  2. 执行通道程序,从主存取出通道指令,进行译码,向设备控制器发出操作命令
  3. 给出读写操作的数据所在地址:磁盘存储器的柱面号、磁头号、扇区等。
  4. 寻找主存的首地址,该缓冲区存放从外设读取数据或者将要输出到外设的数据
  5. 控制外设与主存缓冲区之间的数据传输,对传送的数据进行计数,由此判断是否完成。
  6. 指定传输结束后要进行的操作:中断请求及通道中断请求送往CPU
  7. 检查外设是否正常,并将该状态信息送往主存指定单元保存
  8. 对传输的数据进行格式转换,如:比特流转换成字节,把字节转换为字等
使用通道导入数据过程
sequenceDiagram
    participant CPU
    participant 通道
    participant 主存
    participant I/O设备控制器
    CPU->>通道: 帮我把硬盘的数据导入一下
    主存-->>通道: 取出通道指令,进行译码
    通道->>I/O设备控制器: 搜索数据所在地址
    通道->>主存: 搜索主存空闲的位置,返回首地址
    I/O设备控制器-->>通道: 读取数据
    通道-->>主存: 写入数据
   	通道->>CPU: 发送中断:数据导入完成,返回导入数据所在的主存地址。

目 录