程序查询流程
1测试指令,查询IO设备是否就绪。
2传送指令,当已经就绪时,执行传送功能。
3转移指令,未就绪时,转移至继续测试IO设备的状态。

当需要启动某一IO设备时,必须将该程序插入到现行程序中。
1,由于这种传送数据时要占用CPU寄存器,先将寄存器内容保护起来。
2,传送的是一批数据,先设置IO设备与主机交换数据的计数值
3,设置欲传送数据在主存缓冲区的首地址
4,CPU启动IO设备
5,将IO接口中的设备状态标志取至CPU并测试IO设备是否准备就绪。如果就绪就传输,如果没就绪等待。
6,CPU执行IO指令,或从IO接口的数据缓冲寄存器读一个数据,或把一个数据写入IO接口中的数据缓冲寄存器内,同时将接口中的状态标志复位。
7,修改主存地址。
8,修改计数值。
9,判断计数值
10,结束IO传送,继续执行现行程序。

程序中断方式

中断接口:
1,中断请求触发器和中断屏蔽触发器
每台设备必须配置一个请求触发器INTR,当为1时,表示该设备向CPU提出中断请求。提出中断请求时,本身必须准备就绪。多个中断源向CPU提出中断请求时,CPU必须坚持一个原则,即在任何瞬间,只能接受一个中断请求。其他的进行排队,接受级别高的。在IO接口中设置一个屏蔽触发器MASK,当为1时,表示屏蔽,即封锁其中中断源的请求。请求触发器和屏蔽触发器在IO接口中是成对出现的。
CPU总是在统一的时间,每条指令执行阶段的最后时刻,查询所有的设备是否有中断请求。

仅当设备准备就绪D=1,设备未屏蔽MASK=0,CPU中断查询信号可将中断请求触发器设置为1,INTR=1

2排队器
多个中断源同时向CPU提出请求时,根据性质不同,给予不同等级的优先权。速度越高的IO,优先级越高,因为若CPU不及时响应高速IO请求,其信息可能立即丢失。

3中断向量地址形成部件
一旦响应了IO中断,就要暂停现行程序,转去执行改设备中的中断服务程序。每个服务程序都有一个入口地址。
硬件方法寻找地址:通过向量地址来寻找设备的中断服务程序入口地址。中断向量地址形成部件的输入时来自排队器的输出INTP1,INTP2...INTPN。它的输出是中断向量,位数与计算机可以处理中断源的个数有关。一个中断源对应一个向量地址。其中12H,13H是向量地址,200,300是打印机服务程序和显示器服务程序入口地址。


IO中断处理过程

1,CPU响应中断的条件和时间。
CPU响应中断的时间是每条指令执行阶段的结束时刻。

2,IO中断处理过程。
当CPU通过IO指令的地址码选中某设备后
1,由CPU发动启动IO设备命令,将接口中B设置1,D设置0
2,接口启动输入设备开始工作
3,输入设备将数据传送到数据缓冲寄存器。
4,输入设备向接口发送设备工作结束信号,D设置为1,B设置为0,标志设备准备就绪。
5,当设备准备就绪D=1,且本设备未被屏蔽MASK=0,在指令结束时,由CPU发送出中断查询信号。
6,设备中断请求触发器INTR设置为1,标志设备向CPU提出中断请求,同时,INTR送至排队器,进行中断判优
7,若CPU允许中断EINT=1,设备又被排队选中,进入中断响应。由中断响应信号INTA将排队器输出送至编码器形成向量地址。
8,向量地址送至PC,作为下一条指令的地址。
9,由于向量地址中存放的是一条无条件转移指令,所以指令结束后,转至程序入口地址,开始执行中断服务程序。
10,中断服务程序最后一条指令是中断返回指令,当执行结束,返回到源程序的断点。

以上可以简单的归纳为:中断请求,中断判优,中断响应,中断服务,中断返回。

中断服务程序的流程

1,保护现场
1)保存程序的断点,由中断隐指令完成。2)保存通用寄存器和状态寄存器内容,由中断服务程序完成。

2,中断服务
对于不同中断请求,服务内容是不同的。比如,打印,显示字符。

3,恢复现场
通常采用取数指令或出栈指令(POP),将保存在储存器或堆栈中的信息送回到原来的寄存器中。

4,中断返回
返回到原来程序的断点处。

DMA方式

DMA特点:

在主存和DMA之间有一条数据通路,主存和设备交换信息不需要通过CPU,也不需要CPU暂停现行程序为设备服务,省去了保护现场和恢复现场。适合高速IO或辅存与主存之间的信息交换。若高速IO和CPU同时访问主存,CPU必须将总线占有权给DMA使用,即DMA采用周期窃取的方式占用一个存取周期。

为了有效分时使用主存,通常DMA与主存交换数据时采用的方法:
1,停止CPU访问主存
特点:适用数据传输率很高的IO设备实现成组数据传输。缺点是DMA接口在访问主存时,CPU基本上处于不工作状态或保持原态。可以再DMA接口中设置一个小容量储存器,使IO设备先与小容量储存器交换数据,然后再与主存交换。减少占用时间。减少CPU暂停工作时间。

2,周期挪用
每当IO设备发出DMA请求时,IO设备便挪用或窃取总线占用权,或几个主存周期,而DMA不请求时,CPU扔继续访问主存。
UI设备请求DMA传送三个情况:
1,CPU不需要访问主存,IO设备与CPU不冲突。
2,IO请求DMA传送时,CPU访问主存。此时等存取周期结束,CPU才能将总线占有权让出。
3,IO设备访问主存时,CPU也要访问,出现冲突。IO设备优先于CPU,窃取存储周期,延缓了CPU访问主存。

IO设备每挪用一个主存周期都要申请总线控制权,建立总线控制权和归还总线控制权。周期挪用的方法比较适合IO设备的读写周期大于主存周期。

3,DMA与CPU交替访问。
此方法适合CPU工作周期比主存存取周期长的情况。这种情况下不需要总线使用权的申请,建立和归还。

DMA接口功能和组成

DMA接口功能:
1,向CPU申请DMA传送
2,在CPU允许DMA工作时,处理总线控制权的转交,避免进入DMA而影响CPU正常活动。
3,在DMA期间管理系统总线,控制数据传输。
4,确定数据传送的起始地址和数据长度,修正传输过程中的数据地址和数据长度。
5,在数据块传送结束时,给出DMA操作完成的信号。

接口基本组成:
1,主存地址寄存器AR
AR用于存放主存中需要交换数据的地址。
2,字计数器WC
WC用于记录传送数据的总字数,通常交换字数的补码值预置。
3,数据缓冲寄存器BR
BR用于暂存每次传送的数据。
4,DMA控制逻辑
5,中断机构
当字计数器全0时,表示数据交换完毕,由溢出信号通过中断向CPU发出中断请求。
6,设备地址寄存器DAR
存放IO设备的设备码

DMA工作过程

1,预处理
在DMA接口开始工作之前,CPU给他预置信息。
DMA逻辑控制指明传输方向,读主存,写主存。
DMA设备地址寄存器送入设备号,启动设备
DMA主存地址寄存器送入交换数据的主存起始地址
对字计数器赋予交换数据的个数。
2,数据传送
DMA以数据块为单位传送的。

\\
             \\_
          .---(')
        o( )_-\_

3,后处理
包括校验送入主存数据正确性,是否继续传送等。

DMA接口和系统接连方式

与程序中断方式相比,DMA方式特点:

1,程序中断方式靠程序传输,DMA靠硬件传输。
2,中断在一条指令执行结束时响应,DMA在指令周期内任意存取周期结束时响应。
3,中断有异常处理事件能力,DMA没有。
4,中断需要保护现场,DMA不中断程序,无需保护现场。
5,DMA优先级比中断高。

DMA接口类型

1,选择型DMA接口
2,多路型DMA接口

I/O系统(二)的更多相关文章

  1. Win7系统安装Centos7.0双系统(二)

    4.6语言选择

  2. Epicor系统二次开发

    Epicor系统二次开发 一.获取或修改界面EpiDataView的字段数据(Get EpiDataView data) C# EpiDataView edv = (EpiDataView)oTran ...

  3. go语言打造个人博客系统(二)

    go语言打造个人博客系统(二)   在上篇文章go语言打造个人博客系统(一)中,我们了解了go语言的优点和go语言的数据库操作,本次我们会完成博客系统的后端开发. 博客系统后端接口开发 路由测试 ht ...

  4. UGUI的优点新UI系统二 直观、易于使用

    UGUI的优点新UI系统二 直观.易于使用   对于UI控件,开发者可以直接使用鼠标在Scene视图里编辑它们的大小.位置和旋转角度,而无需编写任何代码,以Button为例,如图1-3.图1-4和图1 ...

  5. (dede)织梦系统二次开发笔记

    (dede)织梦系统二次开发记录 --soulsjie 一.模板常用文件说明 模板文件都在文件夹templets下,我们以默认模板(default)为例,对模板文件结构进行分析: 首页模板文件目录 \ ...

  6. 亿级在线系统二三事-网络编程/RPC框架 原创: johntech 火丁笔记 今天

    亿级在线系统二三事-网络编程/RPC框架 原创: johntech 火丁笔记 今天

  7. C#开发PACS医学影像处理系统(二):界面布局之菜单栏

    在菜单栏布局上,为了使用自定义窗体样式和按钮,我们需要先将窗体设置为无边框,然后添加一个Grid作为菜单栏并置顶,VerticalAlignment="Top" logo图片和标题 ...

  8. 通过Dapr实现一个简单的基于.net的微服务电商系统(二)——通讯框架讲解

    首先感谢张队@geffzhang公众号转发了上一篇文章,希望广大.neter多多推广dapr,让云原生更快更好的在.net这片土地上落地生根. 目录:一.通过Dapr实现一个简单的基于.net的微服务 ...

  9. 通过Dapr实现一个简单的基于.net的微服务电商系统(二十)——Saga框架实现思路分享

    今天这篇博文的主要目的是分享一下我设计Saga的实现思路来抛砖引玉,其实Saga本身非常的类似于一个简单的工作流体系,相比工作流不一样的部分在于它没有工作流的复杂逻辑处理机制(比如会签),没有条件分支 ...

  10. 大数据系统之监控系统(二)Flume的扩展

    一些需求是原生Flume无法满足的,因此,基于开源的Flume我们增加了许多功能. EventDeserializer的缺陷 Flume的每一个source对应的deserializer必须实现接口E ...

随机推荐

  1. Python 目录整理

    基础部分: 1  常量  2 字符编码  字符编码补充 3 编码集 4 break与continue 5装饰器 6 迭代器 7生成器 8面向过程 9模块 10包 11 递归调用 12文件的用途 13类 ...

  2. 微信小程序是怎么运行的?

    微信客户端在打开小程序之前,会把整个小程序的代码包下载到本地. 紧接着通过 app.json 的 pages 字段就可以知道你当前小程序的所有页面路径 而写在 pages 字段的第一个页面就是这个小程 ...

  3. Win10启动tomcat控制台乱码解决方案

    1.找到${CATALINA_HOME}/conf/logging.properties 2.添加语句:java.util.logging.ConsoleHandler.encoding = GBK ...

  4. frist Django app — 五、Test

    Test——很重要但是没有被重视起来的一个环节,至少是我自己,其实自己之前在做java web的时候就去尝试过怎么做REST接口的测试,一直没有找到一种合适方式,而且因为时间紧没有进一步深究,但是造成 ...

  5. azkaban使用--指定executor

    PS:局限,虽然可以指定在一台节点上执行,但是失去了高可用的优势,如果有不同类型的任务建议用多套azkaban 假如二台executor,下图中的4,5,我想将任务运行在hadoop02上,因为只有这 ...

  6. python学习笔记----正则表达式

    正则: regular expression 常用的场景: #正则的包 >>> import re #match:开头匹配,匹配到,返回一个匹配对象,否则返回None >> ...

  7. 今日、本周、本月时间列表 python方法

    def get_time(self): ''' @author : Cong @Email : 624420781@qq.com @描 述 : 生产时间列表 ''' # 生成本日时间列表 i = da ...

  8. linux下redis的安装方法

    一.Linux环境下安装Redis   Redis的官方下载网址是:http://redis.io/download  (这里下载的是Linux版的Redis源码包) Redis服务器端的默认端口是6 ...

  9. centos病毒

    #!/bin/bash exec &>/dev/null {echo,ZXhlYyAmPi9kZXYvbnVsbApleHBvcnQgUEFUSD0kUEFUSDovYmluOi9zYm ...

  10. Java学习--变量

    参考  http://www.runoob.com/java/java-variable-types.html java变量使用前 java中的所有变量在使用前必须声明并且初始化 类变量和实例变量会默 ...