I/O系统
主机与I/O设备的交互
I/O接口:又称I/O控制器、设备控制器(一般被集成在主板上)负责协调主机与外设的数据传输,内含以下三个寄存器
- 数据寄存器
- 控制寄存器
- 状态寄存器
CPU控制I/O
- 程序查询:轮询查询I/O控制器的状态寄存器,检测到状态为已完成,就从寄存器取出数据放到主存
- 程序中断:等待I/O时,CPU执行其他程序,I/O完成后,I/O控制器向CPU发出请求,CPU相应中断请求,并取走数据放到主存
- DMA方式:主存与高速I/O有单独一条直接数据通路(DMA)总线,CPU向DMA接口发出读写命令,并告诉它主存地址、磁盘地址、读写数据量等参数
- DMA控制器控制磁盘与主存数据读写,完成一整块读写数据,就向CPU发出一次中断
- 通道控制方式:用于主机上挂载巨多I/O设备的情况
外部设备
磁盘
-
磁盘设备的组成
- 存储区域:一块硬盘含有若干记录面,每个记录面划分为若干条磁道,而每条磁道又划分为若干个扇区(块),每个扇区是读写的最小单位。
- 磁头数:即记录面数
- 柱面数:表示硬盘每一面盘片上有多少条磁道,不同记录面上的相同编号的各个磁道组成一个柱面
- 扇区数:每一条磁道上有多少个扇区
- 磁盘驱动器:包含磁头、盘片组件
- 磁盘控制器:硬盘存储器和主机的接口,标准有:IDE、SCSI、SATA等
- 存储区域:一块硬盘含有若干记录面,每个记录面划分为若干条磁道,而每条磁道又划分为若干个扇区(块),每个扇区是读写的最小单位。
-
性能指标:
- 容量
- 记录密度:单位面积上盘片记录的二进制数据、通常以道密度、位密度、面密度表示
- 道密度:沿磁盘半径方向单位长度上的磁道数,最外侧磁道位密度最低(所有磁道记录的信息量都相等)
- 位密度:磁道单位长度上能记录的二进制代码位数
- 面密度:道密度*位密度
- 平均存取时间:寻道时间+旋转延迟时间+传输时间
- 数据传输率:设磁盘转数为r(转/秒),每条磁道有n个字节,则传输率Dr=rN
-
磁盘地址:主机向磁盘控制器发送的寻址信息
- 磁盘工作流程
- 寻址、读盘、写盘,每一个操作对应一个控制字
- 第一步取控制字,第二部执行控制字
- 读写操作是串行的
磁盘阵列(RAID)
将多个独立的物理磁盘组成一个独立的逻辑盘,数据在多个物理盘上分割交叉存储、并行访问、拥有更好的存储性能、可靠性和安全性
-
RAID0:无冗余、无校验的磁盘阵列,有一个磁盘炸了,则无法恢复其数据,且无法检验二进制信息因为某些问题产生的跳变。
-
RAID1:镜像磁盘阵列,存两份数据,需要增加一倍的冗余磁盘
-
RAID2: 采用纠错的海明码的磁盘阵列,如果各个盘中有4bit信息位+3bit校验位,则只需增加3个冗余磁盘。
-
RAID3:位交叉奇偶校验的磁盘阵列
-
RAID4:块交叉奇偶校验的磁盘阵列
-
RAID5:无独立校验的奇偶校验磁盘阵列
I/O接口
并行接口:一个子直接或一个字所有位同时传送
串行接口:一位一位传送
这里的串行并行指的是外设和接口侧,主机和接口侧在2000年前并行传输,之后才有串行传输方式
作用
- 数据缓冲:通过数据缓冲寄存器DBR达到主机与外设的速度匹配
- 错误或状态检测:通过状态寄存器反馈设备的各种错误、状态信息、供CPU查阅
- 控制和定时:接受从控制总线发来的控制信号、时钟信号
- 数据格式转换:串-并、并-串
工作原理
I/O端口:I/O控制器中的各种寄存器
对系统内部暴露:
- 数据缓冲寄存器和状态/控制寄存器的数据线
- 地址译码和I/O控制逻辑的地址线和控制线,分别用以指明I/O端口以及读写I/O端口的信号、中断请求信号
对系统外部(设备)暴露:
- 外设界面控制逻辑:用以表明数据、状态、控制
- 发命令:发送命令字到I/O控制寄存器,向设备发送命令
- 读状态:从状态寄存器读取状态字,获得设备或I/O控制器的状态信息
- 读写数据:从数据缓冲寄存器发送或读取数据,完成主机与外设的数据交换
接口与端口
- 统一编址(存储器映射方式):与内存编址一致
- RISC机器常用
- 访存类的指令都可以访问I/O端口
- 主存地址空间变小
- 外设寻址时间长(地址位数多,地址译码速度慢)
- 独立编址:内存编址与端口编址两套独立
- 靠不同的指令区分内存和I/O设备,需要专门I/O指令访问
- intel处理器常用
- 程序编制清晰(专门指令)
- 地址位数小
- 控制逻辑电路复杂性高,
程序查询方式
在发出OUT指令后,轮询执行IN指令,检查I/O接口的状态寄存器是否Ready
-
CPU与I/O串行工作,一旦启动I/O,必须停止线性程序的运行,并在现行程序中插入一段程序
-
程序查询方式适用于低速I/O
-
独占查询方式下:CPU 100%的事件都在查询I/O状态,完全串行
-
定时查询:在保证数据不丢失的情况下,每隔一段时间CPU就查询一次I/O状态,查询间隔,CPU可以执行其他任务
程序中断方式(重要)
中断:用于让正在执行现行程序的CPU转去执行发出中断请求的中断源的任务
流程:
- 中断请求:中断源向CPU发出中断请求信号
- 中断响应:CPU通过判优逻辑响应多个中断源同时发出的多个请求中的一个
- 中断处理:中断隐指令通过修改PC值跳转到中断服务程序
原子操作:一次运行到底的操作,不会被线程调度打断
关中断:用于实现原子操作,然而在发生非屏蔽中断时(掉电),中断也会被响应
中断系统
中断请求标记
用来区分不同的中断源,中断系统通过中断请求标记寄存器来保存中断源的状态(0/1表示)
中断判优
可以用硬件、软件实现
-
硬件:硬件排队器,可以在CPU\中断源设置,速度快
-
软件:程序查询方式,很慢
-
中断判优优先级设置:
- 硬件故障、其次是软件中断(系统调用)
- 非屏蔽中断优于可屏蔽中断
- DMA请求优于I/O设备发送的中断请求
- 高速设备优于低速设备
- 输入设备优于输出设备
- 实时设备优于普通设备
中断隐指令
分为中断响应、程序断点压栈、关中断、向量地址→PC四步
如何引出中断服务程序:
- 排队器输出一组二进制数据交给中断向量地址形成部件
- 这个部件生成的是向量地址,存放着中断向量的地址(指针的指针)
- 拿到中断向量以后根据这个向量跳转到对应的中断服务入口地址
- 由于中断服务程序存在被修改的可能(占据的地址空间变化),所以需要二级指针实现,这样不用修改硬件电路,只需修改中断向量即可
中断服务程序
- 保护现场:
- 保存通用寄存器和状态寄存器的内容,用于终端结束后恢复CPU原来的环境,可以用堆栈、特定存储单元实现
- 中断服务:
- 主体部分,有可能会修改ACC寄存器中的值
- 恢复现场:
- 通过出栈指令或取数指令把1过程保存的信息返回寄存器中
- 中断返回:
- 弹出栈底保存的断点信息,返回原程序断点处
CPU在指令的中断阶段检查有无中断源发出中断请求
单重中断:执行中断服务程序不相应新的中断请求
多重中断
在执行中断服务程序时,可以响应另一个中断请求,又称中断嵌套
屏蔽字:用以屏蔽某些中断请求
中断屏蔽技术
- 在中断服务程序中提前设置开中断指令。
- 优先级别高的中断源有权中断优先级别低的中断源
- 每一个中断源都有一个屏蔽触发器,1表示屏蔽该中断源请求,0表示正常申请,所有屏蔽触发器组合在一起,便构成一个屏蔽字寄存器,里面的内容被称为屏蔽字
注:每个屏蔽字至少有一个1(至少能屏蔽自身的中断,防止自己中断自己)
DMA方式
-
DMA控制器通常用来控制以块为单位读写的I/O设备
-
CPU向DMA控制器指明输入还是输出;传输多少数据;数据在主存、外设中的地址
传送前:
- 接受外设发出的DMA请求,并向CPU发出总线请求。
- CPU响应总线请求,发出总线响应信号,接管总线控制权,进入DMA操作周期
传送时:
-
确定传送数据的贮存单元地址及长度,并能自动修改主存地址计数和传送长度计数
-
规定数据在贮存和外设间的传送方向,发出读写等控制信号,执行数据传送操作
传送后:
- 向CPU报告DMA操作结束
-
控制/状态逻辑:指定传送方向,修改传送参数,并对DMA请求信号和CPU响应信号进行协调和同步,向总线发出总线请求。
-
DMA请求触发器:I/O准备好数据后给出一个控制信号,使DMA请求触发器置位,写满一个块时,向DMA控制器发出DMA请求
-
主存地址计数器AR:存放要交换数据的主存地址
-
传送长度计数器WC:用来寄存传送数据的长度,计数溢出时,数据即传送完毕,发出中断请求信号(实际上是传给中断机构一个溢出信号)
-
中断机构:一个数据块传送完毕后触发中断机构,向CPU发出中断请求
注:在DMA传送过程中,DMA控制器将接管CPU地址总线、数据总线、控制总线,CPU的主存控制信号将被禁用
DMA的特点
- 使主存与CPU的固定联系脱钩,主存可被CPU、主存访问
- 主存地址的确定、传送数据计数由硬件电路实现
- 主存要开辟专用缓冲区,及时供给和接受外设和数据
- DMA传送速度块,CPU和外设并行工作,提高了系统效率
- DMA需要预处理和后处理
- I/O和主机并行工作,程序和传送并行工作
DMA传送方式
- 停止CPU访问主存
- CPU对主存的利用率低
- DMA和CPU交替访存
- 不需要总线使用权的申请、建立、归还
- 硬件逻辑复杂
- 周期挪用(周期窃取)
- CPU正在访存时,等待存取周期结束让出总线
- CPU不访存,不会发生冲突
- CPU与DMA同时请求访存:DMA优先