计组第五章 输入输出系统
第五章 输入输出系统
输入输出系统是现代计算机系统中种类最多,功能最多,结构最复杂,构成最多样的系统
现代计算机系统中,外设的成本可以占到总的计算机成本的80%以上
可以说,没有丰富多彩的外设,就没有现在计算机的大规模应用
早期的计算机用于计算,直到上世纪60年代,计算机被应用到文本当中,就产生了字符发生器和字符型显示器
随着计算机发展,计算机在嵌入式和大数据方面得到应用
比如将计算机嵌入到自动设备、武器装备当中,控制他们自主工作
物联网,云计算,物理信息系统,互联网+等都是
所以说,外设是计算机系统中非常重要的一部分
5.1 概述
5.1.1. 输入输出系统的发展概况
(1) 早期-分散连接
特点:
- 早期的外设种类比较少,与CPU采用分散连接
- 也就是说,每一个外部设备都有专门的控制电路
- 这些控制电路甚至和CPU的控制电路设计在一起,紧紧耦合
缺点:
- 耦合性大,添加与删除很麻烦
- 设备移植的时候也麻烦,不便于设备移植
工作方式(主机与IO的信息传输方式):
-
串行工作—程序查询方式
串行工作也就是说IO在进行输入输出的时候,CPU必须运行响应的程序
由于外部设备种类较少,这种方式还是适用的
(2) 接口模块和 DMA 阶段
特点:
- 随着外部设备种类的增多,分散连接已经不适合计算机领域的发展
- 出现了IO接口和点位控制器
- 采用总线连接,一个总线可以连接多个外设,总线另一端与主机相连
工作方式:
- 并行工作
- 中断方式
- DMA方式
(3) 具有通道结构
-
在上一阶段的基础上,为了使得主机与IO结构进行信息传输的过程中或者之后,CPU仍要参与信息传输的处理工作
-
为了使得主机与IO设备能够并行工作,或者说让数据传输控制模块从主机中独立出来,出现了具有通道的IO阶段
-
通道:
- 小型的处理器或者功能更强的DMA处理机,能执行通道程序,有自己的指令系统,有自己的控制器,有的还有自己的存储器
- 通过控制通道系统,可以控制连接在通道上的IO设备与主机进行直接信息传输
(4) 具有 I/O 处理机
IO进行信息传输,其独立性更强,可以有专用的处理机
在大型计算机中,可以用微处理机或者和主机相同的处理器作为IO处理机
这种处理机的功能特别强大,甚至没有IO设备也可以作为主机的处理器完成应用
总结:
随着IO设备的发展,数据控制系统会逐渐从主机中独立出来,IO设备的独立性越强
5.1.2. 输入输出系统的组成
(1) I/O 软件
① I/O指令
主处理器或者CPU的指令集里面的IO指令,CPU执行这些指令控制外部设备
格式如下
- 操作码:表明这是IO操作
- 命令码:进行什么操作,读还是写或者是其他的
- 设备码:IO设备的地址或者IO里面寄存器的地址
② 通道指令
通道自身的指令
使用方式:
- 程序员在应用程序中添加
广义的IO指令
- 这些指令指出了
参加数据传输的IO设备
,数据在主存中的首地址
,传输的长度
以及传输的方向
操作系统
根据这些广义的IO参数,编写出由通道指令组成的通道程序
,将程序在内存或者通道自身的内存的指定位置- 启动通道执行工作
因此通道指令的参数需要指出数组的首地址、传送字数、操作命令等,这种通道指令一般比较长
如 IBM/370 通道指令为 64 位
通道下面还有多个子通道,每个子通道下面有多个设备控制器,每个控制器可以连接多个IO设备
(2) I/O 硬件
两种连接方式
- 设备——IO接口——主机
- 设备——设备控制器——子通道——通道(采用通道方式)
5.1.3. I/O 设备与主机的联系方式
CPU要启动IO设备如何连接IO设备
(1) I/O 设备编址方式
统一/不统一编制
编址方式 | 说明 | 特点 | 适用 |
---|---|---|---|
统一编址 | 1. IO的编址与内存地址统一,即从内存中分出一部分地址给IO设备 2. 当指令的地址落入到这一部分时,就表示对IO进行操作,此时可以用原有的取数、存数指令对IO进行操作 |
1. 不需要专门的IO指令,IO指令集简单 | 内存空间比较大的情况 |
不统一编制 | 1. IO设备有独立的编制空间 2. 有专用的IO指令对IO设备进行操作 |
有了地址就要进行选址
(2) 设备选址
用设备选择电路
识别是否被选中
这个设备中内部保存有预先设定号的地址
设备选中之后就可以进行信息传输
(3) 传送方式
- 串行:慢,但是距离远
- 并行:块,距离近,数据线有多条,通常为8的倍数
(4) 联络方式
① 立即响应
比如LED灯,直接就亮了
② 异步工作采用应答信号
CPU和接口之间一般都是并行传输,所以此处索书号的异步工作指的是IO接口与IO设备之间的传输
异步分为并行传输和串行传输
-
并行传输
-
IO接口与设备之间有多条数据线构成类似总线的传输线
-
IO端口将数据 准备好之后通过“Ready”信号告诉IO设备端口数据已经准备好了
IO设备对端口数据处理(输入或者输出),并且给出应答信号
比如读操作,IO端口缓冲空的时候,端口会发出准备信号,设备传输内容
-
-
串行传输
串行工作就是一连串的二进制代码么,串行传输有个起始位和终止位
起始位有一个固定时长9.09ms的低电平,然后是若干位数据,然后是两段高电平作为终止位
③ 同步工作采用同步时标
- 设备和主机之间通过定宽定距的时标
- 在某一工作中必须进行传输工作
(5) I/O 设备与主机的连接方式
前面已经介绍过了
① 辐射式连接(分散连接)
② 总线连接
- 外设通过接口与主机通过总线连接
- 中间可以有缓存进行数据转换等工作
- 接口是有国际标准的
5.1.4. I/O设备与主机信息传送的控制方式
为什么有这个发展
,因为外设
传输的内容是传输到内存
中的,CPU如果花太多精力控制这个,CPU执行自己任务的时间就会降低,因此要逐步将CPU从这个任务中解放出来
(1) 程序查询方式(串行)
串行工作,外设进行信息传输的时候,CPU必须进行对应的控制
我们以数据输入为例
流程分析
- CPU发出指令之后,IO设备准备数据
- 如果数据准备好,IO设备会设置IO状态
CPU从IO接口中读取一个字或者一个字节到CPU的寄存器中
,然后向主存中写- 如果数据没准备好,CPU会反复读取IO状态
效率低下分析:
- CPU的速度比较快,IO的速度比较慢,如果IO设备一直准备不好,CPU就会卡在循环中原地踏步,无法执行其他的任务,造成效率低下
- 除此之外,每次进行数据读写,CPU都要先从IO或者内存中读取数据到自己的寄存器中,然后发送到对方,也就是说,CPU要同时拖着内存和IO设备
(2) 程序中断方式
CPU被一定程度地从数据的输入输出中解放出来
IO工作分为两步
-
自身准备——CPU 不查询
-
与主机(内存)交换信息——CPU 暂停现行程序
CPU 暂停现行程序,因此这种方式称为程序中断方式
图分析:
- 图中是CPU执行第K条指令的时候,收到了来自IO的中断请求,CPU执行K后,保存相关寄存器内容,跳转到中断服务程序,然后恢复寄存器内容,执行K+1指令
效率分析:
- CPU和IO部分并行,对CPU的解放不是完全的,而且进行跳转需要对现场进行保护和恢复,也会消耗时间
- 并且数据传输
也会需要CPU作为中介
工作流程图
(3) DMA 方式(周期窃取)
DMA 进一步使得CPU从输入输出中解放出来
-
主存和 I/O 之间有一条
直接数据通道
-
不中断现行程序
-
工作方式:周期挪用(周期窃取)
DMA控制信息交换,一定使用到总线(地址 数据 控制),CPU要将总线的控制权让出来,这段时间叫做存储周期
也就是DMA窃取了一部分周期
效率分析:
-
在存储周期中,尽管CPU不能使用总线,不能取指令,但是其还能够执行程序
比如在现代计算机中,指令并不是随用随取的,指令是预取的,预先取好若干条指令到CPU的指令缓存中了,数据也是一样的在数据缓存中的
-
输入输出不再由CPU执行程序了,不会中断,不需要保存恢复现场,不需要执行中断服务程序
-
不再需要CPU作为中介了,IO与内存直接连接
原理在下面多路型DMA中有讲解
(4) 比较
5.2 IO设备(简)
种类非常多,涉及到物理,机械,计算机多个领域,IO设备不是计组原理这一门课能讲清楚的,因此这里主要是对外设进行了分类
5.2.1. 概述
外部设备如何和主机相连的
- 外部设备有个设备控制器与IO接口进行连接
- 主机通过IO接口向设备控制器传输命令,或者通过IO接口获取IO状态
外部设备大致分为三类
类型 | 举例 | 说明 |
---|---|---|
人机交互设备 | 键盘、鼠标、打印机、显示器 | 将人能识别的信息转换为计算机能识别的二进制信息; 或者将计算机中的二进制信息转换为人能识别的文字,图像,声音等 |
计算机信息存储设备 | 磁盘、光盘、磁带 | 既是存储系统,也是外部设备,也需要IO接口与注解连额吉 |
机—机通信设备 | 调制解调器、网卡等 | 计算机和其他大型或者小型设备的连接 |
5.2.2. 输入设备
设备 | 说明 |
---|---|
键盘 | 按键,判断哪个键按下,将此键翻译成 ASCII 码 (编码键盘法) 分为采用硬件和软件的方式判断哪个键被按下 |
鼠标 | 机械式—金属球,电位器;光电式——光电转换器 |
触摸屏 |
它们各自具体的工作原理可以参考附录
5.2.3. 输出设备
显示器
- 字符显示——字符发生器,早期就是通过字符矩阵
- 图形显示——主观图像(就是由人在计算机上画的由点线面构成的图形)
- 图像显示——客观图像
打印机
-
击打式——点阵式(逐字、逐行)
以前使用的很多,现在也有使用,比如说出租车的发票
-
非击打式——激光(逐页)喷墨(逐字)
5.2.4. 其他设备
A/D、D/A
- 模拟/数字(数字/模拟)转换器
- 计算机内的信号都是数字信号
- 在进行远程信息传输的时候,发送端要将数字信号转换为模拟信号传输,接收端将模拟信号转换为数字信号接受
- 外设的信息输入也可能是采用模拟信号的方式
终端
- 由键盘和显示器组成,还有控制系统和缓存
- 类似于现在的瘦客户机
- 完成显示控制与存储、键盘管理及通信控制,不能进行单独使用
汉字处理或者其他的文字处理
- 汉字输入、汉字存储、汉字输出
5.2.5. 多媒体技术
-
这是英译,多种媒体技术相结合的综合应用,给人更多的视听动作感受
-
比如虚拟现实模拟
-
多媒体计算机的关键技术
数据的压缩,解压缩,语音识别,编码技术,图像识别等
这是现在非常热门的方向
5.3 I/O接口
接口可以用在 软件-软件,硬件-硬件,硬件-软件《计算机组织与设计 硬软件接口》就是将硬软件的接口的
这节主要讲主机与IO的接口,既包括接口硬件,也包括控制软件
5.3.1. 为什么要设置接口(接口的功能)
-
实现设备的选择
外设一般有地址,CPU通过地址找到外设,接口就是选择设备的
-
实现数据缓冲达到速度匹配
外部设备的工作速度不一样,通过接口实现缓冲,达到数据匹配
-
实现数据格式的转换(串并行)
主机和接口之间采用并行数据传输,一次传输一个字,但是外设可能和接口进行串行传输,一次传输一位,用接口将这些位进行组合或者解析
-
实现电平转换
主机和IO设备工作的电平不一致,IO设备进行转化
-
传送控制命令
CPU给外设的命令先传到接口,接口控制外设操作
-
反映设备的状态(“忙”、“就绪”、 “中断请求”)
5.3.2. 接口的功能和组成
上述6点就是接口的功能,这些功能决定了接口的硬件结构
(1) 总线连接方式的 I/O 接口电路
从主机引出一条IO总线
与设备和接口连接
IO总线分成四种线
线 | 传输的信息 | 说明 | 方向 |
---|---|---|---|
设备选择线 | 传输本次使用的设备的设备码或者端口号,实际上就是设备的地址 | 传输给IO接口,在IO接口中匹配,看是否是这个接口上连接的某个设备参与数据传输 | 单向(主机->接口) |
数据线 | 数据输出输入 | 条数和接口有关 | 双向 |
命令线 | 来着主机的命令 | 命令传到IO接口中进行缓冲和译码,然后IO接口根据命令控制设备 | 单向(主机->接口) |
状态线 | 设备的命令 | 单向(主机<-接口) |
可以看到,设备不会直接与总线相连,都是与接口相连的
图中没有显示电平转换和数据格式转换,但实际上有
(2) IO接口的组成
同样的,组成也没有给出电平转换
和数据格式转换
功能 | 组成 |
---|---|
选址功能 | 设备选择电路 SEL |
传送命令的功能 | 命令寄存器、命令译码器 |
传送数据的功能 | 数据缓冲寄存器 DBR |
反映设备状态的功能 | 设备状态标记 |
设备状态标记由一系类触发器完成
触发器 | 说明 |
---|---|
完成触发器D | 反应设备是否准备好,D=1表示准备完成,D=0表示没完成 |
工作触发器B | B=1表示设备忙,在工作状态,B=0表示工作完成 |
中断请求触发器 INTR(中断请求方式才会有) | 设备准备好向主机发送中断请求 |
屏蔽触发器MASK | 中断请求是否能发送还要看重要性,因此有屏蔽触发器,如果主机正在做的工作比中断请求更重要,屏蔽触发器就会屏蔽中断请求,不允许发送中断信号 |
(3) I/O 接口的基本组成框图
控制逻辑电路控制IO接口各个组件的协调工作
CPU与IO接口的数据线是并行的
5.3.3. 接口分类
-
按数据传输方式分类
类型 举例 并行接口 Intel 8255 串行接口 Intel 8251 传输方式指的是外设和接口的传输方式,接口和主机都是通过并行传输的
-
按功能 选择的灵活性 分类
接口的功能是可以通过编程来设计的
类型 举例 可编程接口 Intel 8255、 Intel 8251 不可编程接口 Intel 8212 -
按 通用性 分类
将多种接口通用的部分可以做到一个芯片当中,就得到了通用接口
类型 举例 通用接口 Intel 8255、 Intel 8251 专用接口 Intel 8279、 Intel 8275 -
按数据传送的 控制方式 分类
类型 举例 中断接口 Intel 8259 DMA 接口 Intel 8257 程序查询方式不需要接口控制
5.4 程序查询方式
这节课更加深入的讲解程序查询方式
5.4.1. 程序查询流程
(1) 查询流程
- CPU向设备发出命令之后就反复循环检测状态标记,知道设备准备好数据后设置好状态
- 使用到的指令有:
- 测试指令:检测状态标记
- 转移指令:判断是否准备就绪
- 传送指令:交换数据
- 如果是多个设备,会按照设备的优先级对设备进行排序,再根据优先级逐个检查状态标记,如果有一个准备就绪,就处理这个设备
(2) 程序流程图
程序员要编写程序就是按着这个程序写的
5.4.2. 程序查询方式的接口电路及执行流程
根据程序员编写的流程和接口的内容进行设计接口电路
结构分析:
设备选择电路
判断地址线的数据是否是对应的设备(事实上,设备选择电路的输出是整个IO接口电路的选择信号,只有这个有效,IO接口电路才会运行)- DBR:数据缓存器
- D B:设备状态标记
这都与前面的接口的组成相对应
执行流程分析(以输入为例):
-
主机通过地址线发出设备地址,接口中的
设备选择电路
进行判断,如果是这台接口对应的设备,就发出有效信号 -
只有当有效信号
SEL
和启动命令
同时发生的时候,再发出信号对状态标记置位 -
设置状态标记
:B=1,表示设备忙,D=0表示数据没有准备好 -
B会向设备发送消息
启动设备
-
设备启动好之后,输入数据到
DBR数据缓冲器
中,此时设备工作结束设备将数据传输到接口的数据缓冲器中就表示设备工作结束了
-
设备通过设备状态线
修改设备状态标记
:B=0表示设备工作结束,D=1表示数据准备好了数据准备好不仅仅是设备有数据了,还表示数据发送到接口的缓冲器中了
-
D准备就绪信号被输出
在此之前,CPU一直在原地踏步,在查询D的信号
-
CPU通过数据线读入数据
这个电路非常简单,实际上更麻烦
- 比如对命令进行译码,在时序电路的控制下生成一系列的指令
5.5 程序中断方式
5.5.1. 中断的概念
中断:中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行——百度百科
5.5.2 I/O中断的产生
以打印机为例
图上显示的是打印机打印了两次的图
CPU 与打印机部分并行工作
5.5.3 程序中断方式的接口电路
除了程序查询流程中的接口组件,程序中断电路还有其他组件
组件 | 功能 |
---|---|
中断请求触发器 INTR | 设备准备好向主机发送中断请求 |
中断屏蔽触发器 MASK | 中断请求是否能发送还要看重要性,因此有屏蔽触发器,如果主机正在做的工作比中断请求更重要,屏蔽触发器就会屏蔽中断请求,不允许发送中断信号 |
排队器 | 不同设备的优先级不一样,比如高速设备的速度必须尽快缓存,优先级较高,排队器就对提出中断请求的设备进行优先级排序 |
中断向量地址形成部件 | 生成中断服务程序的入口地址 |
(1) 配置中断请求触发器和中断屏蔽触发器(产生中断请求)
发出中断请求的流程:
-
D=1,表示数据准备好并且传输到DBR数据缓冲器中的时候,才能发出中断请求
-
此时如果中断屏蔽触发器的Q=0,即Q非=1的时候,才会发出请求,经过取反之后到达INTR有效
-
并且当来自CPU的中断查询信号到来之后
中断请求能否发出还得看CPU发出中断查询信号
-
INTR发出中断请求
(2) 排队器(对中断请求排队)
在多设备情况下,要对发出中断请求的设备的中断响应进行优先级排队
排队的是中断响应而不是请求
分为硬件和软件
种类 | 说明 |
---|---|
硬件 | 在 CPU 内或在接口电路中(链式排队器) |
软件 | 详见第八章 |
我们这里讲解硬件方式:在每个设备的INTR的信号发出之后,前面一个非门,后面一个与非门,生成新的信号INTR',多个设备的元件组合起来形成一个链式结构
图中,设备 1、2、3、4 优先级按 降序排列
分析:
INTR为1表示有中断请求,此时INTR非=0表示有中断请求
-
假设INTR2非=0,表示2有中断信号,那么与非门输出的就是1,那么到了3的非门后,INTP3'就为0,后面以此类推
也就是说,前面的有中断请求,那么后面所有的中断请求都为0,即前面的优先级大于后面的
-
对于第一个,INTP1'始终为1,如果INTR1非为1,即1没有中断请求的话,与非门输出的是0,INTP2'就是1
此时如果INTR2非输出的是1,即2没有中断信号,那么同理,INTP3‘输出的就是1,
如果3有中断信号,那么,从INTP4'开始,所有的信号都为INTPi都为0
-
最终的结果就是
- INTRi非控制着INTPi+1,也就是控制着下一位的
- 如果当前设备 i 前面所有的设备未发送中断请求,那么INTP1—INTPi全为1,后面的全为0
- 这就表示INTRi发出了中断请求
-
结论:
- 最终生成的INTP序列是11111111100000000...,最后一个1是最先发出中断请求的,比如最后一个1是第 i 位,那么就是第i个设备优先级最高,发出了中断请求
结论看起来很好做,但是如何让计算机容易识别呢?
这个思路要学习,很巧妙,使用与非门是与非门的实现逻辑简单?
(3) 中断向量地址形成部件(产生中断向量地址)
入口地址同样有两种方法
-
软件产生:软件查表得到,详见第八章
-
硬件向量法:由 硬件 产生 向量地址,再由 向量地址 找到 入口地址
概念:
-
中断号:CPU中有256个中断,被编号成0-255,就是终端号
-
中断向量:中断服务程序的入口地址,比如x86中可以为中断服务程序的段地址和偏移量组成的向量,有的时候也指程序状态字
向量中断即中断源的识别标志,可用来存放中断服务程序的入口地址或跳转到中断服务程序的入口地址。——百度百科
在PC/AT机中, 中断向量 是指中断服务程序的入口地址,每个 中断向量 分配4个连续的字节单元,两个高字节单元存放入口的 段地址 CS,两个低字节单元存放入口的段内 偏移量 IP。
-
中断程序的入口地址:中断向量生成
-
向量地址:中断向量保存的内存单元的地址,或者用一条跳转指令跳转到服务程序,这条跳转指令保存的内存中的地址
详细可以键下方示意图
中断向量是一个东西,向量地址是其内容
-
- 排队器的输出作为中断向量地址行程部件的输入
- 有多少个设备或者对应多少个中断程序,就有多少位输入
- 每次只有一位是1(排队器中讲了)
这个部件输入只有1个1,输出是01编码,这种形式的部件叫做设备编码器
设备编码器
生成的向量地址通过数据线传给CPU
- 比如向量地址是12H,表明
中断服务程序的入口地址
或者跳转指令
保存在内存单元的12H的位置上,到这个地址,可以看到是跳转指令,JMP200,跳转到那里,是打印机服务程序
(4) 程序中断方式接口电路的基本组成
5.5.4 I/O 中断处理过程
(1) CPU 响应中断的条件和时间
① CPU 响应中断的条件
- CPU中的
允许中断触发器
EINT = 1
- 用 开中断 指令将 EINT 置 “1”,称为
开中断
- 用 关中断 指令将 EINT 置“ 0” 或硬件 自动复位,称为
关中断
② CPU 响应中断的时间
-
当 D = 1(随机)且 MASK = 0 时
外部设备可以随时向CPU发出请求,但是CPU不能随时响应中断
-
在每条指令执行阶段的结束时,CPU查询是否有中断请求,进行中断响应
-
CPU 发 中断查询信号(将 INTR 置“1”)
事实上,程序中断方式,CPU也会在每条指令结束之后发出中断查询信号,也是在反复查询的,只是不会一直守着IO接口查询
中断请求是需要CPU查询中断请求后才会发出的
(2) 程序中断方式处理过程
简单流程:
- CPU发出启动命令和地址线发出地址,然后启动设备
- 设备准备好数据后设置标记触发器,这个同时CPU在每条指令执行完成时发出中断查询信号
- 2中的两个都搞好之后接口向CPU发出中断请求
- CPU收到中断请求后发出中断响应
- 排队器对中断响应进行排序
- 排序后的结果传给设备编码器
- 设备编码器生成向量地址,通过数据线传给CPU
- CPU根据向量地址执行中断操作,将数据从DBR中取走
学习这个电路的思路
5.5.5. 中断服务程序流程
(1) 中断服务程序的流程
① 保护现场
保护两个
-
程序断点的保护,完成的指令是
中断软指令
程序断点的保护包含
- 中断程序返回后执行指令的地址,也就是当前PC中保存的地址
- 还就就是中断状态字
中断软指令,并不是指令集的指令,而是硬件会自动执行的操作
-
寄存器内容的保护,在中断服务程序中执行进栈指令
不一定要进栈,也可以存储到内存或者其他地方的寄存器中,只要能够保护这些内容即可
② 中断服务
对不同的 I/O 设备具有不同内容的设备服务
③ 恢复现场
出栈指令,如果采用进栈指令保存的话
④ 中断返回
执行中断返回指令
(2) 单重中断和多重中断
中断类型 | 说明 |
---|---|
单重 中断 | 在执行中断程序的时候,如果出现新的中断请求,那么不论优先级有多高,都不能中断现行的中断服务程序 |
多重 中断(中断嵌套) | 允许级别更高 的中断源中断 现行的 中断服务程序 |
单重中断和多重中断的服务程序流程
分析:
-
中断否
的判断是CPU发出中断查询
,如果查询为否,继续执行指令(CPU也是在不断查询的) -
中断周期是指令解释过程的一个阶段,使用中断隐指令,即非指令集的指令,而是硬件自动完成的
取指令,执行指令,中短周期都属于指令解释过程
-
开/关中断
:CPU有个允许中断触发器
EINT- EINT=1,开中断,可以执行中断服务程序
- ENIT=0,关中断,不能执行指令服务程序
-
区别:
单重中断
:在中断服务程序执行结束,恢复现场之后才开中断,允许执行中断服务程序多重中断
:保护现场之后就可以立即开中断,允许插入新的中断
(3) 主程序和(中断)服务程序抢占 CPU 示意图
-
服务程序都是指中断服务程序
-
CPU发出一次请求之后,要进行多次中断传输数据,因为一次只能传输一个字
-
宏观 上 CPU 和 I/O 并行 工作
-
微观 上 CPU 中断现行程序 为 I/O 服务
5.6 DMA方式
程序查询和程序中断方式都要经过CPU作为缓冲并且进行转存操作
5.6.1. DMA方式的特点
(1) DMA 和程序中断两种方式的数据通路
-
中断方式数据传输通
路中,要用CPU的寄存器(这里是ACC,也可以是其他寄存器)作为缓存在外设准备数据的时候CPU可以执行自己的工作,但是进行信息传输的时候,CPU必须中断当前的程序,中断服务程序执行数据的输入和输出操作
-
DMA方式:外设和内存的数据交换可以通过DMA接口
(2) DMA 与主存交换数据的三种方式
① 停止 CPU 访问主存
特点:
- 在进行一段数据的传输的时候,从第一个字开始传输,CPU就放弃了总线的控制权和内存的访问权
- 在这段时间,如果CPU的指令缓存器中有指令,那么CPU可以继续执行指令
优点:
- 控制简单
缺点:
-
如果CPU的指令寄存器中没有指令,CPU就会处于不工作状态或保持状态
未充分发挥 CPU 对主存的利用率,因为即使是一块数据进行传输,数据也只是一个字一个字进行传输,传输的间隔可能比加大,这个时间会超过一个存储周期
这段时间虽然DMA没有使用主存,但是仍然占用了主存的访问权,CPU在这段时间不能使用主存
② 周期挪用(或周期窃取)
-
这里提到的周期是指访存周期
也就是DMA准备好数据,申请建立总线的使用前,
申请一个或者几个内存访问周期
(而不是将总线全部占住直到一块数据全部传输完),申请的周期结束后又让出总线,也就是说,在两个字传输的间隔,CPU可以访存
DMA访问主存的时候有三种可能
- CPU 此时不访存,DMA可以直接占用总线
- CPU 正在访存,即正处在某一个访问周期阶段,DMA只能等,不能抢占
- CPU 与 DMA 同时请求访存,CPU 将总线控制权让给 DMA
③ DMA 与 CPU 交替访问
实用性并不强
CPU的工作周期分成两部分
- C1 专供 DMA 访存
- C2 专供 CPU 访存
特点:
- 访存时间是自动划分的,
不需要 申请建立和归还 总线的使用权
- 也比较简单
5.6.2. DMA 接口的功能和组成
① DMA 接口的功能
-
向 CPU 申请 DMA 传送,占用总线
-
处理总线 控制权的转交
-
管理 系统总线、控制 数据传送
-
确定 数据传送的 (在内存中)首地址和长度
修正 传送过程中的数据 地址 和 长度,就是每传输一个字之后修正
-
DMA 传送结束时,给出操作完成信号
根据DMA接口的功能,看接口
② DMA 接口组成
这个图假设采用单总线结构,并且将主存和CPU给显示出来了
DMA内部结构:
-
寄存器
- 地址寄存器AR
- 传输长度WC(word count)
假设数据是从低位到高位进行存取,每存取完一个字之后AR+1
数据长度是 -n的补码(n为实际长度),没存取完一个字之后+1
- 数据缓存器BR,外部的数据线缓存到这里
- 设备地址寄存器DAR
- 供设备选择电路使用,看本次访问的设备是不是这个接口接的设备
- 对硬盘这样的设备进行访问汇总,DAR可以保存磁道号,扇区号等
-
地址线:AR把要访问的内存的地址送给主存,此时DMA已经接管了总线
-
数据线,寄存器的值都要通过数据线进行设置
-
外部设备:与BR相连进行信息交换
-
DMA控制逻辑:控制输入输出过程
- 向CPU发出总线使用请求HRQ,CPU发出应答信号HLDA
- 外部设备向DMA控制逻辑发出请求信号DREQ,后者发出应答信号DACK
-
中断机构:
- 用于数据传输完之后,处理后续工作
- 一旦WC=0,给中断机构的中断请求触发器置一,当一条指令结束后,发送中断请求,进行后续工作
5.6.3. DMA 的工作过程
DMA数据传送过程可以分为预处理,数据传送,后处理三部分
(1) DMA传送过程
① 预处理
通过几条输入输出指令预置如下信息
- 通知 DMA 控制逻辑传送方向(入/出)
- 设备地址 ——> DMA 的 DAR
- 主存地址 ——> DMA 的 AR
- 传送字数 ——> DMA 的 WC
② DMA 传送过程示意图
可以看到,CPU仍然需要执行一些操作:预处理,后处理
③数据传送过程
在此之前,已经完成了预处理,也就是寄存器中已经有数值了
a. 输入
-
设备发送数据到BR数据寄存器
-
设备向DMA控制逻辑发送数据传输请求
-
控制逻辑向CPU发出总线占用请求
-
CPU给出响应,即让渡总线的控制权给DMA
(如果这里没有相应,DMA会一直发送请求,可以看上面的流程图)
-
AR通过地址线向内存发送数据地址,表示开始进行数据传输
-
DMA控制逻辑也会发出响应(这里是为了让设备不要继续发请求)
-
BR将数据通过总线传送给内存
-
一个字的数据传输结束后,AR和WC都会+1,WC会判断是否溢出(负数补码表示,如果到0会溢出)
如果没有溢出,从1开始继续
否则会向中断机构发出溢出型号,发出中断请求
b. 输出
④ 后处理
由中断服务程序完成
- 校验送入主存的数是否正确
- 是否继续用 DMA
- 测试传送过程是否正确,错则转诊断程序
(2) 多个DMA 接口与系统的连接方式
一台机器上可以有多个DMA接口,这个与之前总线判优方式一样,两种方式区别的就是请求响应的仲裁
① 具有公共请求线的 DMA 请求
分析:
- DMA接口共享数据线和地址线与主存进行连接(这无妨,因为同时只有一个外设进行传输)
- 所有的接口共享一条请求线发出响应
- CPU发出DMA响应,通过一根查询先逐个查询哪个DMA发出请求,越靠近CPU的优先级越高
优缺点与之前一样
② 独立的 DMA 请求
特点:
- 数据线和地址线共享
- 但是请求响应线独有
- 排队的方式在CPU内部完成,好像有个排队器
优缺点与之前一样
(3) DMA 方式 vs 程序中断方式
指标 | 中断方式 | DMA方式 |
---|---|---|
数据传送 | 程序(CPU执行) | 硬件 |
CPU响应时间 | 指令执行结束 | 存取周期结束 |
处理异常情况 (是否能处理异常) |
能 | 不能 |
中断请求作用 | 传送数据 | 后处理 |
使用优先级 | 低 | 高 |
(4) DMA 接口的类型
① 选择型
一个DMA接口
- 在 物理上 连接 多个 设备
- 在 逻辑上 只允许连接 一个 设备(逻辑上一次使用一个设备)
- 一个接口,时序电路,寄存器只有一套
- CPU设置好设备地址寄存器后,只有被选中的设备能够使用DMA接口,其余的就不能使用,相当于只连接了一个设备
② 多路型
一个DMA接口:
-
在 物理上 连接 多个 设备
-
在 逻辑上 允许连接 多个 设备同时工作
在数据传输的时候只有一个设备能和主存进行传输,但是在数据准备阶段可以多个设备同时进行准备
我们以通道为例
通道是一种小型的DMA处理器,实际上也是一种DMA接口
结构分析:
- 一个通道下面包含了若干个子通道
- 每个子通道都有一个主存地址寄存器AR,设备地址寄存器,字计数器
- 一个子通道会含有多个设备
执行流程:
- CPU发出设备命令后,会将预处理的信息传给对应的设备对应的子通道
- 如果CPU再次发出命令,并且这次的设备与前面的设备使用的不是一个子通道的话,第二个设备也会进行准备,即多个设备的数据准备是并行的
- 外设准备好,通过子通道发出请求,这个时候,不同设备的数据传输就是串行的
特点:
- 多个设备
- 数据准备阶段并行
- 数据传输阶段串行
多路型 DMA 接口的工作原理
条件:
- 磁盘每隔30μs发送一次请求,磁带45,打印机150,然后真正用于数据传输的时间是5μs
- 一个多路型接口连接这三个设备
工作原理:(就是讲解图中的流程)
(发出DMA请求表示数据已经准备好了,可以直接传输数据了)
-
打印机先发出请求,5个μs给打印机传输数据
-
然后磁盘磁带同时发出请求,速度越高的设备优先级越高,所以磁盘先传输
由于是多路型的,因此数据已经提前都准备好了
-
磁盘传输完成之后,磁带立刻开始传输
图中可以看到,还有很多空闲时间不进行信息传输,因此还可以有更多的设备