导图社区 计算机考研第七章 输入输出系统
计算机考研计算机组成原理第七章 输入输出系统思维导图,知识点系统且全面,希望对大家有用。
编辑于2024-05-04 21:24:33第七章 输入输出系统
I/O设备
输入输出系统
IO控制方式
外部设备
知识点补充:
异步串行传输方式
计网中的内容,默认是要有一个起始位 + 一/多个终止位 + 可有可无的校验位
注意区分“需要xxx个周期”和“需要xxx条指令”
注意区分速率和容量中的“K M G”
速率是10的n次方
容量是2的n次方
*
考频:低
10
I/O接口
考频:低
12、14、17、21
IO软件
通道指令:通道执行的指令,与CPU机器指令不是一套东西
I/O指令:CPU执行的指令,用于控制IO接口或控制通道
功能
实现主机和外设的通信联络控制
IO设备是通过IO接口与主机进行沟通的
例:IO控制与定时、与主机外设通信
进行地址译码和设备选择
主机发送的指令地址是需要经过一次地址转化过后才会对应到IO设备的地址
实现数据缓冲
主机和IO设备之间的数据传输速率不匹配,故在接口处可以进行数据缓冲
实现信号格式的转换
主机传输一定是采用高低电平的 0 1 来传输的,而不同IO设备的电气特性可能不同,0 1 所对应的高低电平值也可能不同
例如:数据格式转换,电平转换、并/串转换
传送控制信号和状态信息
主机需要发送控制信息指明操作命令,而IO设备需要发送状态位信息给主机
例如:IO过程中错误与状态检测
理解并记忆
I/O控制器
I/O接口
I/O控制器
设备控制器
负责协调主机与外部设备之间的数据传输
I/O内部
机械部件
看得见摸得着的实体
电子部件
藏起来的电路板
I/O控制器组成
from OS
由图可知:
1. 一个I/O控制器,管理多个IO设备
一个I/O设备中,也可以连接多个I/O控制器(多通路IO系统)
2. 每个I/O控制器中可以有多个(相同或不同的)寄存器。
3. 一个I/O控制器中有一个I/O逻辑,负责接受和识别CPU的命令,通过这个I/O逻辑,可以使这个I/O控制器管理的设备和CPU能够进行交互
4. I/O逻辑把命令发送到对应的接口处,由接口处的线来进行数据、控制的发送。同时也可以获得设备发来的状态
这里的I/O逻辑到设备的接口模型和CPU到I/O控制器的模型基本一致
计组书上的图
数据缓冲寄存器
暂存即将输入输出的数据
主机和外设的速度匹配
状态/控制寄存器
命令字:CPU对设备发出的具体命令
状态字:设备的状态信息,供CPU检查
串-并转换机构
数据格式的转换
I/O控制逻辑
根据命令字向设备发出控制信号
地址译码逻辑
将地址信号映射到指定I/O端口
I/O控制器功能
CPU无法直接控制I/O设备中的机器部件,所以I/O设备中还要有一个电子部件来作为中介
又称:
设备控制器
功能:
接受和识别CPU命令
把CPU的命令:例如read/write,放到【控制寄存器】中,同时通过【控制线】告知I/O设备发送了命令
向CPU报告设备状态
【状态寄存器】,表示空闲忙碌
数据交换
读写数据都放到【数据寄存器】
地址识别
把逻辑IO寄存器地址翻译为物理地址,通过【地址线】进行传输
【数据寄存器】 【控制寄存器】 【状态寄存器】 【地址线】 【控制线】
I/O 端口
设备控制器中可被CPU直接访问的寄存器
OS图中的白框
独立编址I/O
统一编址 = 内存映射I/O RISC机器常用
内存映射I/O简化了指令
寄存器独立编址让指令设计变得复杂,需要单独设计和read write相区别的指令(input output)
I/O接口类型
数据传送方式
并行
一个Byte或者一个字的所有bit同时传送
串行
一个bit一个bit进行传送
控制方式
程序查询接口
中断接口
DMA接口
灵活性
可编程接口
不可编程接口
I/O端口
端口与接口:
IO端口指接口电路中可以进行读、写的寄存器。【若干端口】 + 【对应的控制逻辑】=【接口】
组成:
数据端口、状态端口、控制端口
编址方式:
统一编址(存储器映射)
IO端口和主存地址空间统一,用访存指令访问IO端口
独立编址(I/O映射)
IO端口地址与主存地址相互独立,用IO指令访问IO端口
程序员进行系统调用访问是使用的是【逻辑地址】
而不是物理地址、主/从设备地址(主从设备地址是总线制裁的内容)
IO方式
中断
内中断
异常
来自CPU内部的
故障 fault
fault是可以被修复的异常
非法操作码、缺页、除数为0、溢出
自陷 trap
trap指令
安排好的时间,在用户态下调用操作系统内核程序
软件中断
终止 abort
abort是十分严重的异常
使CPU无法执行的硬件故障,例如控制器出错了、存储器校验错等
硬件中断
外中断
通常处理IO
可屏蔽中断 INTR
通过改变屏蔽字实现多重中断 (关中断不会被响应)
不可屏蔽中断 NMI
紧急的硬件故障 (关中断时也会被响应,如关机,掉电)
异常
异常(内部异常)和外部中断的识别方式不太一样
外部中断是在每条指令执行的最后的中断周期进行检测的
异常采用:【软件识别方式】来检测内部中断
首先:
CPU会设置一个异常状态寄存器,记录异常原因。
使用查询程序:
OS会有一个查询程序,查询程序会按照一定的异常优先级来遍历异常状态寄存器。先查到的先处理
不使用查询程序:
故障abort和陷阱trap指令是在指令内部可以直接得知出现了内部异常(例如除以0或者trap)
一旦发现了就可以立即处理,不需要专门的查询程序,在发现异常时直接可以转到相应的处理程序上
为什么异常、外部中断都是中断
因为他们的异常处理过程是基本一样的
程序查询方式
步骤:
独占查询,一直一直问
如果设备未就绪,CPU就一直卡在这里
原地踏步,CPU和IO串行合作
举例:
OUT Rd, Rs
数据线:
Rd中的数据传到数据总线上
地址线:
把Rs的地址传到地址线上
控制线:
指明操作是“写”
预置传送参数
如果此时外设没有准备好,那么CPU就一直等待
特点:
快速设备不要用程序查询/程序中断!
程序中断方式
大致流程:
图:
执行中断服务程序时可以被中断
如果去掉中间两个开关中断、屏蔽字、现场保护就是【单中断】
中断请求
中断源向CPU发送中断请求信号
中断响应
1. CPU现在是否能够进行中断处理
通过PSW中的IF位来进行判断的,如果IF = 1(开中断),则表示允许中断,如果IF = 0(关中断),则表示不允许中断
关中断的作用:实现原子操作
而系统中也有【非屏蔽中断】:
例如掉电、关机等
CPU响应中断的三个条件
中断源有中断请求
CPU允许中断即开中断
一条指令执行完毕,且没有更紧迫的任务
2. CPU进行中断判优
用来有多个中断信号 同时到来,先处理哪个
设置一系列的INTR(中断请求标记寄存器),给每一个外设都分配一个寄存器,如果寄存器值为 1,则说明进行了请求
INTR:用来判断是哪个设备发来的中断信号
在INTR中加入硬件排队器/查询程序,来获得当前的最优先请求
硬件排队器比查询程序速度快很多
优先级的设置:
硬件故障 > 软件故障
不可屏蔽中断 > 可屏蔽中断
高速设备 > 低速设备
DMA请求 > I/O请求
输入设备 > 输出设备
实时设备 > 普通设备
举例:
强制关机 > 机器故障 > 访管 > 程序性 > 让OS控制重新启动
中断处理
1. 执行中断隐指令
作用:保存原程序的PC值;并让PC指向中断服务程序的第一条指令
关中断
启动关中断,使得下面操作不被中断
保存断点
把PC当前的值放入到CPU的内核堆栈区/指定存储单元中
引出中断服务程序
实质就是取出入口地址 并传送到PC
硬件向量法
1. 根据硬件排队器的输出结果,每根线都只会对应一个【中断处理程序】
2. 通过一个【中断向量地址形成部件】获得排队器的输出结果写入到【向量地址】
3. 通过【向量地址/中断类型号】找到主存中对应的【中断向量】
4. 【中断向量】指明了中断服务程序的【入口地址】
软件查询法
不过多介绍
2. 找到对应的中断服务 程序,并执行
保护现场
保护通用寄存器、PSW、ACC等等,把这些压入堆栈
中断服务
运行中断服务程序
恢复现场
弹出数据,恢复数据
中断返回
弹出PC,恢复PC
PSW到底在哪里保存???
*应该是不会考的
《计算机组成原理》第3版,唐朔飞
结论:PC用硬件,PSW和通用寄存器用软件
《计算机操作系统》第4版,汤小丹
结论:PC、PSW都用硬件
多重中断与屏蔽字
多重中断:
在中断处理程序中,在执行中断处理程序时,选择为在【开中断模式】下执行,同时保存【程序的屏蔽字】
这样就可以使得在低级中断处理中如果遇到了更高级的中断处理请求,也可以执行
硬件排队器的改进:
MASK为该中断的中断屏蔽字 (每个中断源对应一个屏蔽字)
先屏蔽,在排队
程序运行轨迹
中断屏蔽字如果为‘ 1’,则说明要屏蔽对应的中断
如果为’0‘,则说明不需要屏蔽对应的中断
对角线单独记忆(自己不能中断自己)
屏蔽吗? 1 -> 屏蔽 , 0 -> 不屏蔽
单重中断与多重中断
一个混淆项:
中断请求优先级
请求决定
中断响应优先级
硬件决定
中断处理优先级
屏蔽字决定
请求优先级:1=2=3=4 响应优先级:1>2>3>4 处理优先级:3>1>4>2
DMA方式
考频:超高
09、10、11*2、12-15、17、18、19*2、20*3、21、22、09大、12大、16大、18大、22大
形如:
OS中的内容
CPU向DMA控制器指明要输入or输出,然后指明 1. 要传送多少个数据(块) 2. 主存地址、外设中的地址
DMAC
(单总线结构)
HRQ
DMA发送的总线请求
HLDA
CPU将总线控制权交给DMAC
控制/状态逻辑
控制/时序电路,指定每一步应该进行的操作
DMA请求触发器
当【设备】输入完成了一个字的数据,就给DMA请求触发器发出一个控制信号,使DMA请求触发器置位(改为 1)
所以是外设发出的DMA请求
主存地址计数器(AR)
存放交换数据的主存地址
传送长度计数器(WC)
用来数数的,记录剩余需要传送数/已传送数目,计数溢出时自动发出中断请求
这两个的总线上有一个+1,是由控制状态逻辑发出的自动加一操作
目的地址计数器(DAR)
记录交换数据在IO中的地址
数据缓存寄存器(DR)
用于暂存每次传送的数据(输入输出的数据都先放到这里)
中断机构
传送长度计数器通过发送溢出信号来控制中断机构何时发出中断请求
DMA传送过程
预处理: (CPU设置) 主存起始地址 -> AR I/O设备地址 -> DAR 传送数据个数 -> WC 启动I/O设备
数据传输: 继续执行主程序 同时完成一批数据的传送
1. DMA把数据放入到DR中
2. DR写满后设备向DMA请求触发器置为 1
3. 控制/状态逻辑收到DMA请求触发器的信号,向CPU发送一个HRQ信号
4. CPU如果此时系统总线空闲,就发送一个HLDA信号给DMAC
5. 此时DMAC开始接管总线
6. DMAC不断向总线上发出数据传送,每次发送一个字,不断地修改AR、WC、DAR的值
7. 当WC的值溢出时,WC向中断机构发出溢出信号,中断机构给CPU发送中断请求,指明已经完成传输
后处理: 中断服务程序 做DMA结束处理
内存 -> 数据总线 -> DMAC -> 外设
叫做:数据通路
和程序控制、程序中断的区别
1. DMA方式不需要CPU参与数据的搬运,CPU只是被剥夺了总线的访问权,依然可以在CPU中进行其他操作(前面两种CPU需要参与到数据运输)
DMA传送阶段 时的CPU
DMA与主存进行数据传输的阶段,会让CPU的主存控制信号被禁止使用。只有DMA传送结束后,才可以恢复CPU的主存控制信号
2. DMA方式申请一次可以进行传输的数据量是一个块(前面两种只能申请一次传输一个字)
总线结构
如果采用单总线结构,那么CPU和主存、主存和DMA的交互是冲突的
CPU决定了是否把总线的控制权交给DMA
优化 ↓
采用三总线结构,可以使IO和主机并行工作
现在的计算机基本都有DMA总线的
【如果主存不是双端口主存】且此时如果CPU和DMA同时都想要访问主存,该怎么办?
CPU的DMA的访问冲突:
方法一:DMA访问时主存不访问
还不如不用三总线呢
方法二:DMA和主存始终交替访问
不需要总线使用权的申请、建立和归还过程
硬件逻辑更为复杂
交替轮着来
方法三:周期窃取
DMA访问主存的三种可能:
CPU不访存
不冲突
CPU正在访存
存取周期结束让出总线
CPU和DMA同时请求
I/O访存优先
IO优先就完事了
DMA与中断的对比:
适用范围
中断低速
因为如果是高速设备一直请求程序中断,最后会占用大量的CPU时间
DMA高速
数据传输
中断程序
DMA硬件
通道是一种硬件 + 程序的数据传输方式
何时检测中断
DMA:
在【存取周期】末尾检测
例如:取指指令的后半部分不涉及访问Cache/主存,则可以用来进行DMA
程序中断:
在指令周期末尾
END