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通信的过程

选择输入设备
CPU把一个地址放在AB
CPU等候输入设备的数据成为有效
CPU从DB读入数据,放入寄存器
选择输出设备
CPU把一个地址放在AB
CPU把数据放在DB
输出设备认为数据有效,取走数据

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设备并行工作
  • 硬件故障
  • 实现人机联系
  • 实现多道程序和分时操作
  • 实现实时处理
  • 实现应用程序和操作系统的联系
  • 多处理机系统各处理机间的联系

中断的分类:

中断
内部中断
外部中断
自愿中断
指令中断
强迫中断
硬件故障
软件中断
可屏蔽 INTR
不可屏蔽 NMI

接口电路

  • 中断请求触发器和中断屏蔽触发器
  • 排队器
  • 中断向量地址形成部件(设备编码器)

中断请求的保持和清除


中断排队

既可用硬件排队,也可用软件排队

多个中断源提出请求,处理器在一个时刻只能响应一个请求,按优先级予以响应

一般速度较快的I/O设备优先级较高

中断源识别

程序查询法:

当有中断请求时,CPU转向固定的中断查询程序入口,按照优先级依次检查所有设备。适用于低速和中速设备。

优点 缺点
程序可以任意改变设备优先级 速度慢

硬件向量法:

中断号:系统分配给每个中断源的代号,便于识别和处理。

编码电路根据排队器的输出信号产生一个预定的地址码,称为中断号。中断号0~255。每项4个字节。构成了中断向量表。中断向量表在主存中00000H-003FFH共1KB的空间,存放了中断处理子程序的入口地址信息。

00000H 子程序所在段的段偏移
00001H 子程序所在段的段偏移
00002H 子程序所在段的段首址
00003H 子程序所在段的段首址

高地址内容送入CS,低地址内容送入IP

CPU响应中断的条件

  1. 中断允许触发器EINT为“1”
开中断 关中断
EINT置1 EINT置0
  1. 中断请求触发器为“1”,保持中断请求信号
  2. 中断屏蔽触发器为“0”
  3. CPU在现行指令结束的最后一个状态周期
  4. 无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系统的更多相关文章

  1. 2012高校GIS论坛

    江苏省会议中心 南京·钟山宾馆(2012年4月21-22日) 以"突破与提升"为主题的"2012高校GIS论坛"将于4月在南京举行,由南京大学和工程中心共同承办 ...

  2. 在Openfire上弄一个简单的推送系统

    推送系统 说是推送系统有点大,其实就是一个消息广播功能吧.作用其实也就是由服务端接收到消息然后推送到订阅的客户端. 思路 对于推送最关键的是服务端向客户端发送数据,客户端向服务端订阅自己想要的消息.这 ...

  3. 数据库优化案例——————某市中心医院HIS系统

    记得在自己学习数据库知识的时候特别喜欢看案例,因为优化的手段是容易掌握的,但是整体的优化思想是很难学会的.这也是为什么自己特别喜欢看案例,今天也开始分享自己做的优化案例. 最近一直很忙,博客产出也少的 ...

  4. ABP文档 - 通知系统

    文档目录 本节内容: 简介 发送模式 通知类型 通知数据 通知重要性 关于通知持久化 订阅通知 发布通知 用户通知管理器 实时通知 客户端 通知存储 通知定义 简介 通知用来告知用户系统里特定的事件发 ...

  5. win7安装时,避免产生100m系统保留分区的办法

    在通过光盘或者U盘安装Win7操作系统时,在对新硬盘进行分区时,会自动产生100m的系统保留分区.对于有洁癖的人来说,这个不可见又删不掉的分区是个苦恼.下面介绍通过diskpart消灭保留分区的办法: ...

  6. iOS---iOS10适配iOS当前所有系统的远程推送

    一.iOS推送通知简介 众所周知苹果的推送通知从iOS3开始出现, 每一年都会更新一些新的用法. 譬如iOS7出现的Silent remote notifications(远程静默推送), iOS8出 ...

  7. (系统架构)标准Web系统的架构分层

    标准Web系统的架构分层 1.架构体系分层图 在上图中我们描述了Web系统架构中的组成部分.并且给出了每一层常用的技术组件/服务实现.需要注意以下几点: 系统架构是灵活的,根据需求的不同,不一定每一层 ...

  8. Hyper-V 激活Windows系统重启后黑屏的解决方法 + 激活方法

    异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 服务器相关的知识点:http://www.cnblogs.com/dunitia ...

  9. Beanstalkd一个高性能分布式内存队列系统

    高性能离不开异步,异步离不开队列,内部是Producer-Consumer模型的原理. 设计中的核心概念: job:一个需要异步处理的任务,是beanstalkd中得基本单元,需要放在一个tube中: ...

  10. [APUE]系统数据文件与信息

    一.口令文件 UNIX口令文件包含下表中的各个字段,这些字段包含在 由于历史原因,口令文件是/bin/passwd,而且是一个文本文件,每一行都包括了上表中的七个字段,字段之间用":&quo ...

随机推荐

  1. 存储系统管理(一)——Linux系统的设备和分区管理

    1.设备名称的理解 /dev/sda1? sata硬盘,a1表示第一块硬盘中的第一个分区 /dev/cdrom 光驱 /dev/mapper/*? 系统中的虚拟设备 2.发现系统中的设备 ? fdis ...

  2. nginx简介,使用

    nginx是什么 nginx是一个开源的,支持高性能,高并发的www服务和代理服务软件. 支持高并发,能支持几万并发连接 资源消耗少,在3万并发连接下开启10个nginx线程消耗的内存不到200M 可 ...

  3. HCNP Routing&Switching之OSPF特殊区域

    前文我们了解了OSPF LSA更新规则以及路由汇总相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15231880.html:今天我们来聊一聊OSPF的 ...

  4. Kubernetes 组件简介

    关于Kubernetes是什么??? Kubernetes是致力于提供跨主机集群的自动部署.扩展.高可用以及运行应用程序容器的平台. Kubernets集群组成有哪些??? k8s由master和no ...

  5. python代码检查工具(静态代码审查)

    python静态代码检查 我们知道python是一门脚本语言,不像C#/Java等编译型语言可以在编译阶段就报出代码错误,脚本语言往往需要在运行期执行到这段代码时才会抛出代码错误. 那么在实际商业项目 ...

  6. 20210804 noip30

    考场 第一眼感觉 T1 是状压 DP,弃了.T2 好像也是 DP???看上去 T3 比较可做. 倒序开题.T3 暴力是 \(O(pn\log p)\)(枚举 \(x\),二分答案,看能否分成合法的不超 ...

  7. kali linux 的基本命令

    Kali Linux 命令集 系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2)uname -r 显示正在使用的内核版本dmidecode -q 显示硬件系统 ...

  8. Intel® QAT 加速卡之数据面流程(图)

    QAT数据面流程 sessionSetupData数据结构 pOpData数据结构

  9. redis存取数据Hash

    一.概念 二.存取散列Hash值 1. 2.JSON字符串存取,没有更新值的字段资源浪费 使用散列Hash存取,可以单独到一个或多个字段: 3.hsetnx,属性不存在就新增并赋值,属性已存在啥也不干 ...

  10. TCP协议和套接字

    一.TCP通信概述,逻辑连接就是三次握手 二.客户端和服务端实现TCP协议通信基本步骤 1.客户端套接字对象 Socket 2.服务端套接字ServerSocket 客户端补充完整代码:除了创建各自的 ...