首页 > 其他分享 >中断和异常

中断和异常

时间:2023-04-27 17:24:00浏览次数:26  
标签:中断 屏蔽 处理程序 内核 异常 CPU

中断(interrupt)通常被定义为一个事件,该事件改变处理器执行的指令顺序。

中断通常分为同步(synchronous)中断和异步(asynchronous)中断:


  同步中断是当指令执行时由CPU控制单元产生的,之所以称为同步,是因为只有在一条指令终止执行后CPU才会发出中断。

  异步中断是由其他硬件设备依照CPU时钟信号随机产生的。

在intel微处理器中,把同步和异步中断分别称为异常(exception)和中断(interrupt)。

 

中断是由间隔定时器和I/O设备产生的,例如用户的一次按键引起一个中断

异常是由程序的错误产生的,或者是由内核必须处理的异常条件产生的。

 

中断信号的作用

当一个中断信号达到时,CPU必须停止它当前正在做的事情,并且切换到一个新的活动。为了做到这一点,就要在内核态堆栈保存程序计数器的当前值(即eip和cs寄存器的内容),并把与中断类型相关的一个地址放进程序计数器。

中断处理程序对比进程切换有一个明显的差异:由中断或异常处理程序执行的代码不是一个进程。更确切地说时,它是一个内核控制路径,代表中断发生时正在运行的进程执行。作为一个内核控制路径,中断处理程序比一个进程要”轻“。(中断的上下文很少,建立或终止中断处理需要的时间很少)。

中断处理是由内核执行的最敏感的任务之一,因为它必须满足下列约束:

  内核响应中断后需要进行的操作分为两部分:关键而紧急的部分,内核立即执行;其余的部分,内核随后执行。

  中断处理程序必须编写成使相应的内核控制路径能以嵌套的方式执行,当最后一个内核控制路径终止时,内核必须能恢复被中断进程的执行。

  尽管内核在处理前一个中断时可以接受一个新的中断,但在内核代码中还是存在一些临界区,在临界区中,中断必须被禁止。

 

中断和异常

中断:

  可屏蔽中断(maskable interrput)

    I/O设备发出的所有中断请求(IRQ)都产生可屏蔽中断。可屏蔽中断可以处于两种状态:屏蔽的或非屏蔽的;一个屏蔽的中断只要还是屏蔽的,控制单元就忽略它。

    要根据中断允许标志的设置来判断CPU是否能响应中断请求。

  非屏蔽中断(nonmaskable interrupt)

    只有几个危机事件(如硬件故障)才引起非屏蔽中断,非屏蔽中断由CPU辨认。

    不受中断允许标志的影响,不能用软件进行屏蔽。

异常:

  处理器探测异常

    当CPU执行指令时探测到的一个反常条件产生的异常。客园进一步分为三组,这取决与CPU控制单元产生异常时保存在内核态堆栈eip寄存器中的值。

    故障(fault)

      通常可以修正,修正后程序重新开始。保存在eip中的值是引起故障的指令地址,因此,当异常处理程序终止时,那条指令会被重新执行。

    陷阱(trap)

      在陷阱指令执行后立即报告,内核把控制权返回程序后就可以继续。保存在eip中的值是一个随后要执行的指令地址。只有当没必要执行已中止的指令时,才触发陷阱,陷阱的主要用途是为了调试程序。

    异常终止(abort)

      发生一个严重的错误,控制单元出了问题,不能在eip寄存器中保存异常指令的确切位置。如硬件故障或系统表中的无效值。

    编程异常(programmed exception)

      编程异常也通常叫做软中断,如into(检查溢出)和bound(检查地址出界),用途:执行系统调用及给调试程序通报一个特定的事件。

 

IRQ和中断

每个能发出中断请求的硬件设备控制器都有一条名为IRQ(Interrupt ReQuest)的输出线。所有现有的IRQ线都与一个名为可编程中断控制器的硬件电路的输入引脚相连。

 

异常

80x86微处理器发布了大约20种不同的异常,内核必须为每种异常提供一个专门的异常程序。对于某些异常,CPU控制单元在开始执行异常处理程序前会产生一个硬件出错码,并且压入内核堆栈。

 

 

一个中断处理程序既可以抢占其他的中断处理程序,也可以抢占异常处理程序。相反,异常处理程序从不抢占中断处理程序。

 

标签:中断,屏蔽,处理程序,内核,异常,CPU
From: https://www.cnblogs.com/wxk1213/p/17359505.html

相关文章

  • 《Effective C#》系列之(一)——异常处理与资源管理
    请注意,《EffectiveC#》中的异常处理与资源管理部分实际上是第四章的内容。以下是关于该章节的详细解释。第四章:异常处理与资源管理一.了解异常处理机制异常处理机制使程序员能够在程序运行过程中处理错误情况。C#提供了try-catch-finally语句块来捕获和处理异常。了解不同类......
  • 使用arcpy替换工程文件中的栅格图层数据源异常
    参考:https://www.cnblogs.com/Leechg/p/10668992.html前面的1月1日到1月31日输出正常但是从2月1日开始就开始重复输出1月1日的图片到3月1日开始也是输出1月1日的图片。。难道每个月的必须分开存放?原因是???......
  • Java8使用Stream API转换Map遇到的2种异常报错和解决思路
    问题java8提供了StreamAPI,配合Lambda表达式,让开发者能对集合对象进行便利、高效的操作。在日常业务开发中,有个经常用到的场景是将List类型对象转换为Map类型对象,方便后续操作。在java8之前,这种转换需要先new一个Map对象,遍历list然后通过Map#put来初始化。使用java8后,可方便的......
  • Django笔记三十一之全局异常处理
    本文首发于公众号:Hunter后端原文链接:Django笔记三十一之全局异常处理这一篇笔记介绍Django的全局异常处理。当我们在处理一个request请求时,会尽可能的对接口数据的格式,内部调用的函数做一些异常处理,但可能还是会有一些意想不到的漏网之鱼,造成程序的异常导致不能正常运行,......
  • oracle Io 异常: The Network Adapter could not establish the connection
    用jdbc连oracle的时候,报错:java.sql.SQLException:Io异常:TheNetworkAdaptercouldnotestablishtheconnection查看C:\oracle\product\10.2.0\db_1\NETWORK\ADMIN里的listener.ora和tnsnames.ora,发现端口变成了1527,不知道怎么回事,默认是1521啊。改回来,就可以了。......
  • PVD-CH32可编程电压控制器PVD中断的使用方法
    可编程电压监视器PVD,主要被用于监控系统主电源的变化,与电源控制寄存器PWR_CTLR的PLS[2:0]所设置的门槛电压相比较,配合外部中断寄存器(EXTI)设置,可产生相关中断,以便及时通知系统进行数据保存等掉电前操作。配置方法如下:先使能PWR时钟,然后设置电压监视阈值,随后使能PVDE开......
  • 16异常处理
    异常处理异常异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。一般情况下,在Python无法正常处理程序时就会发生一个异常。异常是Python对象,表示一个错误。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。捕获异常异常类型捕获#捕......
  • 通过SDK接入EasyCVR平台,设备录像文件出现播放异常的原因排查与解决
    EasyCVR视频融合平台基于云边端一体化架构,部署轻快、功能灵活,平台可支持多协议、多类型设备接入,包括:国标GB28181、RTMP、RTSP/Onvif、海康Ehome、海康SDK、大华SDK、宇视SDK等。平台可实现视频直播、录像、回放、检索、云存储、告警上报、语音对讲、电子地图、集群、智能分析以及......
  • linux设备树-中断控制器驱动
    我们在linux驱动移植-中断子系统执行流程 介绍了中断的执行流程,以及在没有使用设备树的情景下,中断控制器的注册流程,其主要流程:将S3C2440中断资源抽象为一个主中断控制器、两个子中断控制器,一个用于管理外部中断源、另一个管理带有子中断的内部中断源;采用基于数组方式分配中断......
  • mybatis与jstl异常汇总
    1,roblemaccessing/moviePlay/goMoviePlay/1/1/1.Reason:  /WEB-INF/views/workdetail.jsp(92,15)PWC6031:Unterminated<c:settagCausedby:org.apache.jasper.JasperException:/WEB-INF/views/workdetail.jsp(92,15)PWC6031:Unt......