I/O设备与主机信息传送的控制方式以及什么是中断

简介: I/O设备与主机信息传送的控制方式以及什么是中断

中断是什么

中断是指CPU在执行程序的过程当中,如果发生意外时间或者特殊事件(如异常),CPU要中断当前的程序的处理或者当前程序的执行,转而去处理这个特殊事件,或者是异常事件,通过执行中断服务程序的方式来进行处理,处理结束之后,要返回到被中断的程序的程序断电继续去执行原来的程序,这个过程就叫中断.

程序查询方式

程序查询方式是CPU和I/O设备串行工作的一种方式.

程序查询方式的基本思路为,当CPU在执行某个程序时,若遇到程序中要求使用I/O设备的指令,那么CPU便开始向I/O设备发送读/写指令,指令发出后CPU读取I/O状态,若I/O设备准备就绪,那么CPU从I/O设备中读取一个字节或字到CPU中,之后CPU再写入到主存中(因为程序运行时的数据存放在主存),这时CPU检查对I/O设备的访问是否完成,如若是,CPU继续执行原有程序,若不是,CPU继续重复发出读写指令.若I/O设备未准备就绪,那么CPU将已知进行读取I/O设备状态的指令,而不执行其他指令,这将导致CPU处于踏步等待的状态,即CPU在这段时间无法进行任何其他工作,对于这种方式,CPU大部分时间在查询等待I/O设备.

优点:电路设计简单

缺点:CPU效率低

其流程图如下:

程序中断方式

程序中断方式是一种CPU和I/O设备并行工作的方式.

其思路为,当CPU执行的程序需要访问I/O设备时,CPU发出启动I/O指令之后,CPU与外部I/O设备并行工作,CPU继续执行原有程序,外部设备开始准备数据,一段时间后,I/O设备准备好了数据,此时将通过I/O接口向CPU发送一个中断请求,CPU收到这个中断请求后,如果CPU当前可以相应这个中断,在某一条指令的执行周期结束之前,CPU可以相应这个中断,打断CPU当前执行的程序,去执行一个中断服务程序,这个中断服务函数将会完成数据的输入和输出操作,中断程序执行完后CPU会继续执行被中断的程序.

这种方式把CPU逐渐的从数据传输工作当中独立出来,使得I/O设备的自治能力越来越强.

优点:没有踏步等待现象,CPU被解放
缺点:需要中断现行程序,CPU需要保存现场,这是额外的开销,且之后还要恢复现场,CPU额外开销较大

流程图如下:

DMA方式

DMA方式是CPU和I/O设备并行工作的一种方式.

这种方式在主存与I/O设备之间直接建立一条数据通道,因此主存与I/O设备通过DMA控制器可以直接进行数据的交换.

其流程为,CPU执行当前程序时,若遇到需要访问I/O设备,那么CPU启动I/O设备,I/O进行数据的准备,CPU继续执行当前程序,外部设备数据准备结束之后,会窃取一个或几个的存储周期,在这些存储周期当中,外部设备和内存在DMA控制器的控制之下,完成一个或几个字的数据交换,交换结束之后CPU继续执行程序.

特别注意:虽然CPU将总线控制权转交给了DMA,但是CPU依旧可以继续执行主程序,只是在这种情况之下,CPU不能使用系统总线,不能访问内存.

优点:与程序中断方式相比,在数据传送过程当中,不需要保存现场,不需要恢复现场.不需要去执行中断服务程序,不需要用软件完成数据输入输出的控制,进一步把CPU与I/O之间的数据传送解放了出来

流程图如下.


相关文章
|
8月前
|
算法 芯片 异构计算
通过FPGA实现基于RS232串口的指令发送并控制显示器中目标位置
通过FPGA实现基于RS232串口的指令发送并控制显示器中目标位置
|
29天前
win10 蓝牙开关消失 设备管理器“设备描述符请求失败”
win10 蓝牙开关消失 设备管理器“设备描述符请求失败”
34 1
win10 蓝牙开关消失 设备管理器“设备描述符请求失败”
|
12月前
|
编解码 网络协议 数据库
通信交换系统——信令和端口
通信交换系统——信令和端口
|
12月前
|
Windows
USB 设备:自定义批量传输及实现
USB 设备:自定义批量传输及实现
711 0
|
C语言 Perl
西门子S7-1200的MODBUS通信如何组态,通信装载指令、主站设置指令、从站设置指令各参数的含义是什么
本篇我们来学习西门子S7-1200的MODBUS通信如何组态,通信装载指令、主站设置指令、从站设置指令各参数的含义是什么。
西门子S7-1200的MODBUS通信如何组态,通信装载指令、主站设置指令、从站设置指令各参数的含义是什么
接收PC端的信息控制LED灯(中断法)
接收PC端的信息控制LED灯(中断法) 宏定义 初始化 中断 主函数
128 0
如何判断设备使用网络的状态
如何判断设备使用网络的状态
120 0
|
Ubuntu Linux C语言
用C写蓝牙通讯程序:扫描、读取、发送
在Linux下,通过bluez 蓝牙库可以用C语言轻松实现蓝牙通信。在ubuntu下可以用 apt-get install libbluetooth-dev 安装该库。下面是几个简单示例。
1929 0
|
网络协议
求助:寻找一款采集数据类硬件,能够通过GPRS发送数据到现有服务器
我所开发的是工厂的MES系统,但是现在需求是要对一台原始冲压机床的工作次数进行计数,并把发工作次数到系统里   冲压机床是最原始的机器,没有任何可直接对接开发地方,只能考虑另外加装这么一款硬件实现计数和通讯。
2353 0