I/O系统
I/O系统的组成
- 外部设备
- 接口部件
- 总线
- 相应的管理软件
I/O软件
- 将用户编制的程序(或数据)输入主机内
- 将运算结果输出给用户
- 实现输入输出系统与主机工作的协调
I/O系统的基本功能
- 完成计算机内部二进制信息与外部多种信息形式间的交流
- 保证CPU能正确选择I/O设备并实现对其控制,传输大量数据,避免数据出错
- 利用数据缓冲,选择合适的数据传送方式等,实现主机与外设间速度的匹配
I/O系统的特性
异步性 | 外设的工作速度和CPU相差甚远,外围设备相对于处理机通常是异步工作 |
实时性 | 输入输出的操作必须按各设备实际工作速度,控制信息流量和信息交换的时刻 |
设备无关性 | 输入输出与具体设备无关,具有独立性 |
接口
一种为主机和外设之间传送信息而设置的硬件线路。在系统总线和外设之间传输信号,提供缓冲作用,以满足接口两边的时序要求。
主要部件:
- 数据缓冲寄存器
- 设备地址识别线路
- 设备状态字寄存器
- 主机命令字寄存器
- 数据格式转换线路
- 数据地址寄存器
- 控制逻辑
I/O指令
操作码 | 命令码 | 设备码 |
---|---|---|
判别代码 | I/O设备的具体操作 | 设备的地址 |
I/O指令是机器指令的一类,其指令格式与其他指令既有相似之处,又有所不同。
I/O接口编址方式
- 统一编址方式:把I/O端口当做存储器的单元进行地址分配。
优点 | 缺点 |
---|---|
不需要专门的I/O指令,CPU访问I/O操作更灵活、更方便 | 端口占用了存储器地址 |
还可使端口有较大的编址空间 | 数据I/O操作执行速度较慢 |
- 单独编址方式
优点 | 缺点 |
---|---|
I/O指令和存储器指令区别明显,程序编址清晰,便于理解 | I/O指令少,一般只能对端口进行传送操作 |
需要CPU增加 M/IO*信号,增加了控制的复杂性 |
I/O设备与CPU通信的过程
I/O方式
- 无条件I/O
- 程序控制I/O
- 中断I/O
- DMA
- 通道
- I/O处理机
无条件I/O
CPU默认外设始终准备就绪,不检查I/O的状态就进行数据的传输
- 输入时:必须确保CPU执行I/O指令读取数据时外设已将数据准备好
- 输出时:必须确保外设的数据锁存器为空(外设已将上次的数据取走,等待接收新的数据,否则会导致数据传输出错)
优点 | 缺点 |
---|---|
硬件接口电路和软件控制程序都比较简单 | 一般的外设难以满足要求 |
程序控制I/O
接口电路
- 数据缓冲寄存器:匹配主机与外设的速度差异
- 设备地址识别线路:设备地址的译码器
- 设备状态字寄存器:用来标志设备的工作状态,以便接口对外设进行监视
流程
CPU通过程序不断查询I/O设备是否做好准备,从而控制I/O设备与主机交换信息
优点 | 缺点 |
---|---|
主机和外设之间能同步,接口设计简单,设备量少 | CPU花费大量时间查询和等待,效率低下 |
中断I/O
CPU启动I/O设备之和,不查询设备是否准备好,继续执行自身程序,当I/O设备准备就绪并向CPU发出中断请求之和才予以响应。
中断的定义:CPU正常运行程序时,出现异常或特殊请求,CPU中断正在运行的程序,转到中断事件服务程序,服务完毕,再回到原程序的过程。
中断作用:
- 实现CPU与I/O设备并行工作
- 硬件故障
- 实现人机联系
- 实现多道程序和分时操作
- 实现实时处理
- 实现应用程序和操作系统的联系
- 多处理机系统各处理机间的联系
中断的分类:
接口电路
- 中断请求触发器和中断屏蔽触发器
- 排队器
- 中断向量地址形成部件(设备编码器)
中断请求的保持和清除
中断排队
既可用硬件排队,也可用软件排队
多个中断源提出请求,处理器在一个时刻只能响应一个请求,按优先级予以响应
一般速度较快的I/O设备优先级较高
中断源识别
程序查询法:
当有中断请求时,CPU转向固定的中断查询程序入口,按照优先级依次检查所有设备。适用于低速和中速设备。
优点 | 缺点 |
---|---|
程序可以任意改变设备优先级 | 速度慢 |
硬件向量法:
中断号:系统分配给每个中断源的代号,便于识别和处理。
编码电路根据排队器的输出信号产生一个预定的地址码,称为中断号。中断号0~255。每项4个字节。构成了中断向量表。中断向量表在主存中00000H-003FFH共1KB的空间,存放了中断处理子程序的入口地址信息。
00000H | 子程序所在段的段偏移 |
---|---|
00001H | 子程序所在段的段偏移 |
00002H | 子程序所在段的段首址 |
00003H | 子程序所在段的段首址 |
高地址内容送入CS,低地址内容送入IP
CPU响应中断的条件
- 中断允许触发器EINT为“1”
开中断 | 关中断 |
---|---|
EINT置1 | EINT置0 |
- 中断请求触发器为“1”,保持中断请求信号
- 中断屏蔽触发器为“0”
- CPU在现行指令结束的最后一个状态周期
- 无DMA请求
中断嵌套
处理某个中断时又来了新的中断请求,中断当前服务程序的执行,转去执行新的中断处理。一般等级高的中断打断等级低的中断,等级相同或低的不能打断等级高的中断。
INTR可以进行中断嵌套,NMI不能进行中断嵌套
中断流程
单级中断:执行中断服务程序时对新的中断不予理睬
Created with Raphaël 2.2.0
单级中断
关中断
识别中断源
设置新的屏蔽字
中断服务
恢复现场和屏蔽字
开中断
中断返回 恢复断点
关中断 | EINT置0,CPU专心保存或恢复现场,即使有更高级中断请求也不响应 |
保护现场 | 1. 保存程序断点 2. 除了PC和PSW,如果中断服务程序要动用哪些寄存器,就把这些寄存器原来的内容压入堆栈 |
设置新屏蔽字 | 封锁优先级相同或比较低的请求,让CPU不用去判断是否响应 |
恢复现场和屏蔽字 | 将保存在堆栈中的信息送回原来的寄存器中 |
中断返回 | 回到原程序的断点处 |
多级中断:在保护现场后开中断,可以执行中断嵌套
Created with Raphaël 2.2.0
多级中断
关中断
识别中断源
设置新的屏蔽字
开中断
中断服务
关中断
恢复现场和屏蔽字
开中断
中断返回 恢复断点
程序控制I/O和中断I/O的对比
- 程序控制I/O是CPU查询外设,中断I/O是外设主动通知CPU
- 程序控制I/O方式中,CPU和外设不能并行工作,中断I/O可以并行工作。
- 程序控制I/O无法处理异常
- 程序控制I/O硬件结构比较简单,缺点是CPU效率低且只能进行数据传输
- 中断I/O硬件结构比较复杂
DMA Direct Memory Access
DMA控制器获得总线的控制权,数据交换不经过CPU,而直接在内存和设备之间进行。适用于高速大批量数据传送的系统中,比如磁盘和主存之间。
DMA控制器的工作状态 | |
---|---|
被动态 | 未去掉总线控制权,受CPU的控制 |
主动态 | 接管并取得总线控制权,取代CPU而成为系统的主控者 |
DMAC
Address Register | 存放主存中需要交换的数据的地址 |
Word Counter | 用于记录传送数据的总字数,当WC溢出(全0),表示一批数据交换完毕 |
Buffer Register | 用于暂存每次传送的数据 |
DMA控制逻辑 | 负责管理DMA的传送过程,由控制电路、时序电路及命令状态控制寄存器组成 |
中断机构 | WC溢出时,溢出信号通过中断机构向CPU提出中断请求,请求CPU作DMA操作后处理 |
Device Address Register | 存放I/O设备的设备码或表示设备信息存储区的寻址信息 |
DMA工作过程
Created with Raphaël 2.2.0
预处理
提出占用总线请求
CPU按优先级响应请求
数据传输
后处理
预处理:
- 给DMA控制逻辑指明当前数据传送使输入(WR)还是输出(RD)
- 给DAR送设备号
- 给AR送主存中目标数据的地址
- WC赋交换数据的个数
数据输入:
- BR读入I/O设备的一个字,I/O设备向DMAC发请求(DREQ)
- DMAC向CPU申请总线控制权(HRQ)
- CPU发回HLDA信号,允许DMAC控制总线
- DMAC的AR向AB发送地址,命令存储器写
- 通知设备已被授予一个DMA周期(DACK),为下一个字的传输做准备
- DMAC的BR向DB发送数据
- 主存写入
- AR和BR的内容修改
- 判断是否传送结束。若WC溢出,向CPU申请中断
数据输出:
- DMAC的BR空
- 设备向DMAC发送DREQ
- DMAC向CPU发HRQ
- CPU发回HLDA
- DMAC的AR送AB,命令存储器读
- 通知设备,为下一个字传输做准备
- DMAC的BR读入DB上的数据
- AR和BR内容修改
- 判断是否结束
后处理:CPU进入中断,为DMA收尾。
- 校验主存写入数据是否正确
- 决定是否继续用DMA传送其他数据块,若继续则初始化DMAC;不继续则停止外设
- 测试传送过程是否发生错误,出错则转入诊断和处理错误程序
DMA传送方式
- 停止CPU访问内存:在DMA传送过程中,CPU基本处于挂起状态。
优点 | 缺点 |
---|---|
适用于数据传输速率很高的设备进行成组传送(磁盘) | DMAC访存过程中,内存的效能够没有充分发挥 |
停止CPU访存方式下,相当一部分内存工作周期是空闲的。因为传送两个数据之间的间隔一般总是大于内存存储周期,即使高速I/O设备也是如此。
- 周期挪用:当I/O设备有DMA请求时,I/O设备挪用一个或几个内存周期。若CPU也同时要访存,此时I/O设备访存优先。
优点 | 缺点 |
---|---|
既实现了I/O传送,又较好地发挥了内存和CPU的效率 | 每次周期挪用都要申请,建立,归还总线控制权 |
周期挪用方式适用于I/O设备读写周期大于内存存储周期的情况。
- DMA与CPU交替访存:将CPU工作周期一分为二,一半由DMA使用,一半为CPU使用。CPU既不停止主程序的运行,也不进入等待状态。
优点 | 缺点 |
---|---|
不需要频繁重复总线使用权申请,建立,归还的过程。 | CPU的系统周期比存储周期长得多,相应硬件逻辑更复杂 |
DMA和中断的比较
- 中断的数据传送靠程序,DMA靠硬件
- DMA优先级高于中断
- CPU在指令执行结束时响应中断请求,DMA在指令周期任一存取周期结束时响应。
- DMA不能处理异常
- DMA不用保护现场
通道
通道是一个特殊功能的处理器,有自己的指令和程序专门负责数据输入输出的传输控制
CPU将“传输控制”的功能下放给通道。通道与CPU分时使用内存,实现了CPU内部运算和I/O设备的并行工作。
I/O设备——键盘
工作流程
Created with Raphaël 2.2.0
按下一个键
查出按下的是哪个键
把该键翻译成ASCII码
发送给主机
硬件编码键盘
未按键时:扫描随计数器的循环计数而反复进行
按下某键时:键盘通过单稳电路产生一个脉冲信号。
- 计数器停止计数,终止扫描,此刻计数器的值和按键的位置相对应。计数器的值作为ROM的输入地址,这个地址指向按键的ASCII码
- 脉冲经中断请求触发器向CPU发送中断请求,CPU响应请求后转入中断服务程序。CPU读入ROM里指定的ASCII码。
RD信号用途:
- 可以用来作为读出ROM的片选信号
- 经过一段延迟后,可以用来清除中断请求触发器,并重新启动计数器
消抖电路:按键时出现的机械抖动容易造成误动
采用奇偶校验来提高传输的可靠性
非编码键盘
由简单的硬件和专用软件识别按键的位置,提供位置码,然后由CPU执行查表程序,将位置码转换成ASCII码
I/O系统的更多相关文章
- 2012高校GIS论坛
江苏省会议中心 南京·钟山宾馆(2012年4月21-22日) 以"突破与提升"为主题的"2012高校GIS论坛"将于4月在南京举行,由南京大学和工程中心共同承办 ...
- 在Openfire上弄一个简单的推送系统
推送系统 说是推送系统有点大,其实就是一个消息广播功能吧.作用其实也就是由服务端接收到消息然后推送到订阅的客户端. 思路 对于推送最关键的是服务端向客户端发送数据,客户端向服务端订阅自己想要的消息.这 ...
- 数据库优化案例——————某市中心医院HIS系统
记得在自己学习数据库知识的时候特别喜欢看案例,因为优化的手段是容易掌握的,但是整体的优化思想是很难学会的.这也是为什么自己特别喜欢看案例,今天也开始分享自己做的优化案例. 最近一直很忙,博客产出也少的 ...
- ABP文档 - 通知系统
文档目录 本节内容: 简介 发送模式 通知类型 通知数据 通知重要性 关于通知持久化 订阅通知 发布通知 用户通知管理器 实时通知 客户端 通知存储 通知定义 简介 通知用来告知用户系统里特定的事件发 ...
- win7安装时,避免产生100m系统保留分区的办法
在通过光盘或者U盘安装Win7操作系统时,在对新硬盘进行分区时,会自动产生100m的系统保留分区.对于有洁癖的人来说,这个不可见又删不掉的分区是个苦恼.下面介绍通过diskpart消灭保留分区的办法: ...
- iOS---iOS10适配iOS当前所有系统的远程推送
一.iOS推送通知简介 众所周知苹果的推送通知从iOS3开始出现, 每一年都会更新一些新的用法. 譬如iOS7出现的Silent remote notifications(远程静默推送), iOS8出 ...
- (系统架构)标准Web系统的架构分层
标准Web系统的架构分层 1.架构体系分层图 在上图中我们描述了Web系统架构中的组成部分.并且给出了每一层常用的技术组件/服务实现.需要注意以下几点: 系统架构是灵活的,根据需求的不同,不一定每一层 ...
- Hyper-V 激活Windows系统重启后黑屏的解决方法 + 激活方法
异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 服务器相关的知识点:http://www.cnblogs.com/dunitia ...
- Beanstalkd一个高性能分布式内存队列系统
高性能离不开异步,异步离不开队列,内部是Producer-Consumer模型的原理. 设计中的核心概念: job:一个需要异步处理的任务,是beanstalkd中得基本单元,需要放在一个tube中: ...
- [APUE]系统数据文件与信息
一.口令文件 UNIX口令文件包含下表中的各个字段,这些字段包含在 由于历史原因,口令文件是/bin/passwd,而且是一个文本文件,每一行都包括了上表中的七个字段,字段之间用":&quo ...
随机推荐
- 从kratos分析breaker熔断器源码实现
为什么要用熔断 前面我们讲过限流保证服务的可用性,不被突如其来的流量打爆.但是两种情况是限流解决不了的. 如果我们服务只能处理1000QPS,但是有10wQPS打过来,服务还是会炸.因为拒绝请求也需要 ...
- 使用vbs调用excel中的宏
使用vbs打开excel文件,并且传递参数调用excel中的macro,自动化完成excel文件的制作. Set oExcel = createobject("Excel.Applicati ...
- [源码解析] 深度学习流水线并行 PipeDream(5)--- 通信模块
[源码解析] 深度学习流水线并行 PipeDream(5)--- 通信模块 目录 [源码解析] 深度学习流水线并行 PipeDream(5)--- 通信模块 0x00 摘要 0x01 前言 0x02 ...
- SpingBoot-Dubbo-Zookeeper-分布式
目录 分布式理论 什么是分布式系统? Dubbo文档 单一应用架构 垂直应用架构 分布式服务架构 流动计算架构 什么是RPC RPC基本原理 测试环境搭建 Dubbo Dubbo环境搭建 Window ...
- 第七章:网络优化与正则化(Part1)
任何数学技巧都不能弥补信息的缺失. --科尼利厄斯·兰佐斯(Cornelius Lanczos) 匈牙利数学家.物理学家 文章相关 1 第七章:网络优化与正则化(Part1) 2 第七章:网络优化与正 ...
- 傻子都能懂的并查集题解——HDU1232畅通工程
原题内容: Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都 ...
- 无序数组求第K大的数
问题描述 无序数组求第K大的数,其中K从1开始算. 例如:[0,3,1,8,5,2]这个数组,第2大的数是5 OJ可参考:LeetCode_0215_KthLargestElementInAnArra ...
- Spring Native实战(畅快体验79毫秒启动springboot应用)
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- JS高级面试题思路(装箱和拆箱、栈和堆、js中sort()方法、.js中Date对象中的getMounth() 需要注意的、开发中编码和解码使用场景有哪些)
1.装箱和拆箱: 装箱:把基本数据类型转化为对应的引用数据类型的操作: var num = 123 // num var objNum = new Num(123) // object console ...
- gin 源码阅读(1) - gin 与 net/http 的关系
gin 是目前 Go 里面使用最广泛的框架之一了,弄清楚 gin 框架的原理,有助于我们更好的使用 gin. 这个系列 gin 源码阅读会逐步讲明白 gin 的原理. gin 概览 想弄清楚 gin, ...