热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

初识处理器—中断

概述中断是一种处理器与外设进行通信的一种机制,用于通知处理器(处理器并不关心外部事件,但是外设不能)外部有重要的外部事件发

概述

中断是一种处理器与外设进行通信的一种机制,用于通知处理器(处理器并不关心外部事件,但是外设不能)外部有重要的外部事件发生,一般情况下面中断需要被处理器响应。

处理器是怎么处理中断呢:需要中断服务程序(ISR)

中断一旦发生


  • 从外设中读取中断寄存器的值来判断当前中断的而类型。
  • 根据中断的类型具体设计逻辑。(执行中断服务程序)
  • 清除外设状态寄存器的中断。
  • 清除处理器中的中断标识。

中断服务程序

对于软件工程师而言,中断服务程序只是一个 C 函数。但是,不是所有的函数都可以的。中断服务函数是没有返回值,也不需要参数(为什么?中断服务程序是处理外设的事件,返回值返回给外设没有必要,至于处理参数,处理器处理外部事件并需要参数)。中断函数必须小儿短小,避免浮点运算(耗时,有些 CPU不支持)。


中断的意义


  1. 应用程序不必关心中断的发生与处理
  2. 中断服务程序不必关心应用程序的状态
  3. 中断是上层应用于底层代码的分割边界

最主要的一点是中断不是应用层的概念


中断的类型

硬中断: 外设通过中断信号线和处理器相连接(可能在其他的书籍叫中断)

软中断:通过非法和特殊的指令来触发(可能在其他的书籍叫陷阱 或者 异常 ,虽然命名的方式是不同的,但是本质是一样的)


中断的优先级

多个中断同时出现,处理器响应优先级高的中断,低优先级的中断 ISR 执行时,可以被高优先级的中断再次打断,ISP 比 APP Code 拥有更高的优先级(中断和应用不是一个层次的概念,没有必要将他们进行比较)。软中断的优先级和硬中断的优先级的比较(具体看中断的类型,例如,有些中断能被屏蔽,有些中断不能屏蔽(处理器不认识的指令))。


中断的应用

站在软件工程师的角度不去讨论中断的设计而是从中断的使用进行分析。


程序断点(断点调试工具)的实现:

实现的过程稍微复杂,但是具体的原理还是很简单的就是利用了中断。

一个难点是断点是怎么实现的&#xff08;其实很简单&#xff0c;指定代码行&#xff0c;C程序编译后变成汇编程序&#xff0c;因此每个C程序都对应着一个指令地址&#xff0c;在打断点的瞬间&#xff0c;我们只要将代码行对应的地址的指令&#xff0c;将中断指令替换<当中断发生后中断服务程序就开始工作了&#xff0c;调试程序在中断服务程序读取里面相关寄存器的数据>&#xff0c;当需要往下执行的时候&#xff0c;将之前的下文信息还原&#xff0c;然后将 PC 的指针指向之前的地址&#xff09;。中断的触发会被操作系统所感知&#xff0c;当操作系统感知到中断&#xff0c;就会发送消息&#xff0c;只要将这些 (linux下signal)&#xff08;windows下是mesage&#xff09; 发送到 调试应用程序就可以了,控制权就得到了转移。


推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 本文介绍了在多平台下进行条件编译的必要性,以及具体的实现方法。通过示例代码展示了如何使用条件编译来实现不同平台的功能。最后总结了只要接口相同,不同平台下的编译运行结果也会相同。 ... [详细]
author-avatar
mobiledu2502901883
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有