1.CPU发送启动I/O设备的命令,将I/O接口中的B触发器置1,D触发器置O

2.设备开始工作,需要向CPU传送数据时,将数据送入数据缓冲器中。

3.输入设备向I/O接口发出“设备工作结束”的信号,将D触发器置1,B触发器置0。标志着I/O设备已就绪。

4.CPU在每条指令执行即将结束时,发出中断查询信号。中断查询信号可以让那些接口中D触发器置1且中断屏蔽触发器(MASK)置0的设备的I/O接口中的中断请求触发器(INTR)置1若该设备的I/O接口中的中断请求触发器(INTR)置1,则代表该设备正式向CPU提出中断请求。

5.一般来说,在同一个时间点存在多个设备同时提出中断请求,存在一个INTRi序列。而CPU每次只能处理一个中断请求,因此将INTRi序列送至排队器进行中断判优,速度越快的I/O设备优先级越高。

6.在中断允许触发器(EINT)置1的情况下,CPU对优先级最高的设备进行中断响应,首先将INTR发送到编码器形成向量地址。将向量地址至PC作为下一条指令的地址

7.向量地址指向的主存的存储单元里存放的实际上是一条无条件转移指令(JMP),其中包含着中断服务程序的地址。执行完这条指令后,CPU就找到了中断服务程序的入口。

8.CPU进入中断服务程序阶段。进入中断服务阶段后,首先由硬件线路自动进行关中断将中断允许触发器(EINT)置0,避免其他中断源的请求打扰。

9.在提出中断请求的设备服务之前,CPU需要保存当前程序的断点保存通用寄存器和状态寄存器中的有用的信息至主存储器或堆栈。前者是通过中断隐指令完成,后者是通过中断程序的指令完成。中断隐指令不是一条真实存在的机器指令,而是由硬件电路自动完成的一条指令。

10.保护好现场之后,CPU进入中断服务程序的主体部分,进行设备服务。此时CPU通过输入指令,将设备发送到数据缓冲器中的数据送至通用寄存器,最终送至主存储器的存储单元。之后再进行恢复现场。

11.完成设备服务等操作之后,CPU执行中断服务程序的最后一条指令返回原程序的断点

12.CPU继续原程序的执行。

I/O中断处理详细过程的更多相关文章

  1. STM32F0xx_EXIT中断配置详细过程

    Ⅰ.概述 EXIT外部中断在使用到按键或者开关控制等应用中比较常见,低功耗中断唤醒也是很常见的一种.因此,EXIT在实际项目开发中也是比较常见的一种. STM32F0中外部中断EXIT属于中断和事件的 ...

  2. Linux下安装mongodb详细过程

    本次安装mongodb使用yum.repo方式.详细过程请参考,也列出一些安装过程中的错误,欢迎指正. mongodb版本:3.0 先在linux下cd 到 /etc/yum.repos.d/ 新建脚 ...

  3. 第一部分:使用iReport制作报表的详细过程(Windows环境下)

    提示:在有些板块,文中的图片看不到,建议到我的blog浏览文章:http://blog.csdn.net/jemlee2002/文章将会涉及3个方面的内容: 第一部分:使用iReport制作报表的详细 ...

  4. Ubuntu学习总结-01 用VMware 8安装Ubuntu 12.04详细过程

    1 Ubuntu 下载地址 http://www.ubuntu.com/download/desktop 2 安装Ubuntu 转载用VMware 8安装Ubuntu 12.04详细过程 http:/ ...

  5. spm完成dmp在windows系统上导入详细过程

    --查询dmp字符集 cat spmprd_20151030.dmp ','xxxx')) from dual; spm完成dmp在windows系统上导入详细过程 create tablespace ...

  6. Redis主从配置详细过程

    Redis的主从复制功能非常强大,一个master可以拥有多个slave,而一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构.下面楼主简单的进行一下配置. 1.上面安装 ...

  7. UCOS2_STM32F1移植详细过程(四)

    Ⅰ.概述 上一篇文章是讲述uC/OS-II Ports下面os_cpu_a.asm.os_cpu_c.c和os_cpu.h文件底层端口代码的移植(修改)和说明,接着上一篇文章来讲述关于UCOS移植应用 ...

  8. UCOS2_STM32F1移植详细过程(三)

    Ⅰ.概述 上一篇文章是讲述ST芯片相关的配置和OS裁剪相关的配置,接着上一篇文章来讲述关于UCOS的移植,该文主要针对uC/OS-II Ports下面os_cpu_a.asm.os_cpu_c.c和o ...

  9. UCOS2_STM32F1移植详细过程(二)

    Ⅰ.概述 打开上一篇文章新建的工程,是提取的ST标准库里面源代码文件和UCOS工程包源代码文件.下载过的朋友可能会知道,直接编译那个工程会有大片的错误和警告,原因在于那个工程是没有经过修改源代码的工程 ...

随机推荐

  1. gcc5.4报错对‘std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()’未定义的引用

    我在编译ligra是遇到了这个问题,网上搜了一遍,发现是了原因https://gcc.gnu.org/onlinedocs/libstdc%2B%2B/manual/using_dual_abi.ht ...

  2. 加一的golang实现

    给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一. 最高位数字存放在数组的首位, 数组中每个元素只存储一个数字. 你可以假设除了整数 0 之外,这个整数不会以零开头. 输入: [,,] ...

  3. Scrapy 框架 安装 五大核心组件 settings 配置 管道存储

    scrapy 框架的使用 博客: https://www.cnblogs.com/bobo-zhang/p/10561617.html 安装: pip install wheel 下载 Twisted ...

  4. [JXOI2018]守卫

    嘟嘟嘟 正如某题解所说,这题很有误导性:我就一直在想凸包. 随便一个数据,就能把凸包hack掉: 这样我们的点G就gg了. 所以正解是什么呢?dp. 题解看这位老哥的吧,我感觉挺好懂的:题解 P456 ...

  5. 【转】Mysql解决The total number of locks exceeds the lock table size错误

    InnoDB表执行大批量数据的更新,插入,删除操作时会出现这个问题,需要调整InnoDB全局的innodb_buffer_pool_size的值来解决这个问题,并且重启mysql服务. windows ...

  6. jsonp形式的ajax请求:

    sonp形式的ajax请求:并且通过get请求的方式传入参数,注意:跨域请求是只能是get请求不能使用post请求 <!DOCTYPE html> <html> <hea ...

  7. 【vue】vue中引入jquery

    简洁版: 第一步:首先在package.json中输入"jquery":"^3.2.1",其中“3.2.1”为jquery版本号,按需修改 注:package. ...

  8. PHP 3 函数

    PHP 的真正力量来自它的函数:它拥有超过 1000 个内建的函数. PHP 用户定义函数 除了内建的 PHP 函数,我们可以创建我们自己的函数. 函数是可以在程序中重复使用的语句块. 页面加载时函数 ...

  9. Linux kprobe调试技术使用

    kprobe调试技术是为了便于跟踪内核函数执行状态所设计的一种轻量级内核调试技术. 利用kprobe技术,可以在内核绝大多数函数中动态插入探测点,收集调试状态所需信息而基本不影响原有执行流程. kpr ...

  10. MySQL 数据库规范--调优篇(终结篇)

    前言 这篇是MySQL 数据库规范的最后一篇--调优篇,旨在提供我们发现系统性能变弱.MySQL系统参数调优,SQL脚本出现问题的精准定位与调优方法. 目录 1.MySQL 调优金字塔理论 2.MyS ...