I/O系统(二)
程序查询流程
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系统(二)的更多相关文章
- Win7系统安装Centos7.0双系统(二)
4.6语言选择
- Epicor系统二次开发
Epicor系统二次开发 一.获取或修改界面EpiDataView的字段数据(Get EpiDataView data) C# EpiDataView edv = (EpiDataView)oTran ...
- go语言打造个人博客系统(二)
go语言打造个人博客系统(二) 在上篇文章go语言打造个人博客系统(一)中,我们了解了go语言的优点和go语言的数据库操作,本次我们会完成博客系统的后端开发. 博客系统后端接口开发 路由测试 ht ...
- UGUI的优点新UI系统二 直观、易于使用
UGUI的优点新UI系统二 直观.易于使用 对于UI控件,开发者可以直接使用鼠标在Scene视图里编辑它们的大小.位置和旋转角度,而无需编写任何代码,以Button为例,如图1-3.图1-4和图1 ...
- (dede)织梦系统二次开发笔记
(dede)织梦系统二次开发记录 --soulsjie 一.模板常用文件说明 模板文件都在文件夹templets下,我们以默认模板(default)为例,对模板文件结构进行分析: 首页模板文件目录 \ ...
- 亿级在线系统二三事-网络编程/RPC框架 原创: johntech 火丁笔记 今天
亿级在线系统二三事-网络编程/RPC框架 原创: johntech 火丁笔记 今天
- C#开发PACS医学影像处理系统(二):界面布局之菜单栏
在菜单栏布局上,为了使用自定义窗体样式和按钮,我们需要先将窗体设置为无边框,然后添加一个Grid作为菜单栏并置顶,VerticalAlignment="Top" logo图片和标题 ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(二)——通讯框架讲解
首先感谢张队@geffzhang公众号转发了上一篇文章,希望广大.neter多多推广dapr,让云原生更快更好的在.net这片土地上落地生根. 目录:一.通过Dapr实现一个简单的基于.net的微服务 ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(二十)——Saga框架实现思路分享
今天这篇博文的主要目的是分享一下我设计Saga的实现思路来抛砖引玉,其实Saga本身非常的类似于一个简单的工作流体系,相比工作流不一样的部分在于它没有工作流的复杂逻辑处理机制(比如会签),没有条件分支 ...
- 大数据系统之监控系统(二)Flume的扩展
一些需求是原生Flume无法满足的,因此,基于开源的Flume我们增加了许多功能. EventDeserializer的缺陷 Flume的每一个source对应的deserializer必须实现接口E ...
随机推荐
- java 读取外部和source下配置文件
import java.io.File; import java.io.FileInputStream; import java.net.URL; import java.util.Map; impo ...
- jar包冲突排解方法(sbt)
jar包依赖冲突,版本不兼容会导致各种各样的问题.这里推荐一款sbt插件用于查找项目中的jar包依赖关系,通过该插件可以轻松的看出某个jar包依赖哪些jar,以及某个jar被哪些jar所依赖.此外该插 ...
- 设计模式<2>------工厂模式和抽象工厂模式------创建型
简单工厂: 拿我们的简单三层举例子 先定义dal层 class Dal { public void Delete() { } } 工厂类 class Factory { //这样掉的好处是 当dal层 ...
- hive函数--编码解码
以UTF-8为例: 测试字符串:☕️午后咖啡☕️ 一.编码 hive"); 输出: %E2%98%95%EF%B8%8F%E5%8D%88%E5%90%8E%E5%92%96%E5%95%A ...
- Linux下Oracle开机启动
参考:http://blog.csdn.net/huangyanlong/article/details/36942155 一.保证dbstart能用:vi $ORACLE_HOME/bin/dbst ...
- 解决用try except 捕获assert函数产生的AssertionError异常时,导致断言失败的用例在测试报告中通过的问题
在使用Python3做自动化测试过程中可能会遇到,assert函数不加try except,就可以正常在报告里体现用例不通过,加上变成通过. 这是因为在使用try except 时,捕获了asser ...
- sentry的安装和使用以及各种问题处理
官方的git地址:https://github.com/getsentry/onpremise 需要先安装docker 1.10版本以上 假设你已经安装完docker,那么接下来 安装docker-c ...
- 显示开机信息-dmesg
显示开机信息-dmesg kernel会将开机信息存储在ring buffer中.您若是开机时来不及查看信息,可利用dmesg来查看.开机信息亦保存在/var/log目录中,名称为dmesg的文件里. ...
- python 反射 hasattr getattr
class BlackMedium: feature='Ugly' def __init__(self,name,addr): self.name=name ...
- docx httpheader头设置
设置contentType内容类型如下: Extension MIME Type .doc application/msword .dot application/msword .docx appli ...