ARM-异常与中断(四)

文章目录

    • 中断
      • 中断请求、中断源
      • 中断服务程序
      • 保存现场、恢复现场
      • 中断仲裁、中断优先级
      • 中断嵌套
    • 异常
    • 广义上的异常
      • 同步异常
      • 异步异常
        • 精确异步异常(Precise Asynchronous Exception)
        • 非精确异步异常(Imprecise Asynchronous Exception)
    • 异常处理流程

中断

中断(Interrupt)机制,即处理器在顺序执行程序指令流的过程中突然被别的请求打断而中止执行当前的程序,转而去处理别的事情,待其处理完了别的事情,然后重新回到之前程序中断的点继续执行之前的程序指令流,其要点如下

中断请求、中断源

打断处理器执行程序指令流的的“别的请求”便称之为中断请求(Interrupt Request),“别的请求”的来源便称之为中断源(Interrupt Source),中断源通常来自于外围设备。

中断服务程序

处理器转而去处理的“别的事情”便称之为中断服务程序(Interrupt Service Routine ISR)。

保存现场、恢复现场

中断处理是一种正常的机制,而非一种错误情形。处理器收到中断请求之后,需要保存当前程序的现场,简称为保存现场。等到处理完中断服务程序后,处理器需要恢复之前的现场,从而继续执行之前被打断的程序,简称为恢复现场。

中断仲裁、中断优先级

可能存在多个中断源同时向处理器发起请求的情形,因此需要对这些中断源进行仲裁,从而选择哪个中断源被优先处理,这种情况称为中断仲裁,可以给不同的中断分配优先级以便于仲裁,因此中断存在中断优先级的概念。

中断嵌套

如果处理器在处理某个中断过程中(执行该中断的 ISR之中),此时有一个优先级更高的新中断请求到来,此时处理器如何处理分两种情况

  • 第一种可能是处理器并不响应新的中断,而是继续执行当前正在处理的中断服务程序,待到彻底完成之后才响应新的中断请求,这种称为处理器不支持中断嵌套
  • 第二种可能是处理器中止当前的中断服务程序,转而开始响应新的中断,并执行新的中断的中断服务程序,如此便形成了中断嵌套(即前一个中断还没响应完,又开始响应新的中断),并且嵌套的层次可以有很多层。

Note:

  • 需要注意的是,假设新来的中断请求的优先级比正在处理的中断的优先级低(或者相同),则不管处理器是否支持中断嵌套,都不应该响应这个新的中断请求,处理器必须完成当前的中断服务程序之后才考虑响应新的中断请求(因为新中断请求的优先级并不比当前正在处理的中断优先级高)。

异常

异常(Exception)机制,即处理器在顺序执行程序指令流的过程中突然遇到了异常的事情而中止执行当前的程序,转而去处理异常,其要点如下

  • 处理器遇到的“异常的事情”称为异常(Exception)。异常与中断最大的区别在于中断往往是一种外因,而异常是由处理器内部事件或程序执行中的事件引起的,比如本身硬件故障,程序故障、非法指令,或者执行特殊的系统服务指令而引起的,简而言之是一种内因
  • 与中断服务程序类似,处理器也会进入异常服务处理程序。
  • 与中断类似,可能存在多个异常同时发生的情形,因此异常也有优先级,并且也可以发生多重异常的嵌套。

广义上的异常

如上一节所述,中断和异常最大的区别是起因内外有别。除此之外,从本质上讲,中断和异常对于处理器而言基本上是一个概念。
中断和异常发生时,处理器将暂停当前正在执行的程序,转而执行中断和异常处理程序;返回时,处理器恢复之前被暂停的程序。
因此中断和异常的划分是一种狭义上的划分。从广义上讲,中断和异常都被认为是一种广义上的异常。处理器广义上的异常,通常只分为同步异常(Synchronous Exception)和异步异常(Asynchronous Exception)。有些处理器将广义上的异常也叫做 Trap。

同步异常

同步异常是指由于执行程序指令流或者试图执行程序指令流而造成的异常。这种异常的原因能够被精确定位于某一条执行的指令。
同步异常另一个通俗的表现便是,无论程序程序在同样的环境下执行多少遍,每一次都能精确的复现出来。
例如,程序流中有一条非法的指令,那么处理器执行到该非法指令便会产生非法指令异常(Illegal Instruction Exception),能被精确地定位于这一条非法指令,并且能够被反复复现。

异步异常

异步异常是指那些产生原因不能够被精确定位于某条指令的异常。
异步异常另一个通俗的表现便是,程序在同样的环境下执行很多遍,每次发生异常的指令 PC 都可能会不一样。
最常见的异步异常是外部中断,外部中断的发生是由外围设备驱动的,一方面外部中断的发生带有偶然性,另一方面中断请求到达处理器之时,处理器的程序指令流执行到具体的哪一条指令带有偶然性。因此一次中断的到来可能会巧遇到某一条“正在执行的不幸指令”,而该指令便成了“背锅侠”。在它的指令 PC 所在之处,程序便停止执行,并转而响应中断去执行中断服务程序。但是当程序重复执行时,却很难会出现同一条指令反复“背锅”的精确情形。
对于异步异常,根据其响应异常后的处理器状态,又可以分为两种:

精确异步异常(Precise Asynchronous Exception)

指响应异常后的处理器状态能够精确反映为某一条指令的边界,即某一条指令执行完之后的处理器状态。外部中断是最常见的精确异步异常。

非精确异步异常(Imprecise Asynchronous Exception)

指响应异常后的处理器状态无法精确反映为某一条指令的边界,即可能是某一条指令执行了一半然后被打断的结果,或者是其他模糊的状态。读写存储器出错是一种常见的非精确异步异常,例如,写数据到 cache,然后该 cache 很久之后才被替换出来,写回外部存储器,但是写回外部存储器返回结果出错。此时处理器可能已经执行过了后续成百上千条指令,到底是哪一条指令当时写的这个地址的 cache ,不可能被精确定位。

异常处理流程

在这里插入图片描述
本文主要参考《手把手教你设计 CPU——RISC-V处理器》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/2320.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【推荐】win 安装 rust 1.70

目录 一、下载二、安装先决条件MinGW三、安装Rust四、配置国内镜像五、检查是否安装成功五、参考文章 一、下载 官网地址:https://www.rust-lang.org/zh-CN/ 二、安装先决条件MinGW win 安装 C运行环境 - MinGW 三、安装Rust 3.1首先设置安装路径和环境变量 配…

赛效:PDF文件怎么加密

1:在网页上打开并登录91ai工具,在特色功能里点击“PDF加密”。 2:点击上传文件,将本地PDF文件添加上去。 3:文件上传成功后,在文件下方设置密码后点击“开始加密”。 4:加密完成后点击下方下载按…

12.通用定时器基本原理

1.通用定时器概述: (1)STM32定时器 STM32F10x系列总共最多有8个定时器: (2)三种STM32定时器区别: (3)通用定时器功能特点描述: STM32的通用TIMx(TIM2、TIM…

量子机器学习Variational Quantum Classifier (VQC)简介

变分量子分类器(Variational Quantum Classifier,简称VQC)是一种利用量子计算技术进行分类任务的机器学习算法。它属于量子机器学习算法家族,旨在利用量子计算机的计算能力,潜在地提升经典机器学习方法的性能。 VQC的…

SpringBoot Thymeleaf企业级真实应用:使用Flying Saucer结合iText5将HTML界面数据转换为PDF输出(四) 表格中断问题

接上一篇 SpringBoot Thymeleaf企业级真实应用:使用Flying Saucer结合iText5将HTML界面数据转换为PDF输出(三) 给pdf加水印、页眉页脚、页眉logo 设置表格的css样式 table {/*分页时表格换行, 可不用, 使用表格行换行即可*//*page-break-before: always;*/border-…

【AI模型部署】基于gradio和python的网页交互界面(web-ui)——简易使用方法

使用gradio,只需在原有的代码中增加几行,快速部署机器学习模型,就能自动化生成交互式web页面,并支持多种输入输出格式,比如图像分类中的图>>标签,超分辨率中的图>>图等。 同时还支持生成能外部网络访问的链…

【Leetcode】17.电话号码的字母组合

一、题目 1、题目描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例1: 输入:digits = "23" 输出:["ad","ae",…

C高级重点

1、请简要描述一下Linux文件系统的层级结构,包括不同目录的作用和功能。 Linux的文件系统结构是一个倒插树结构,所有的文件都从根目录出发。 2、find指令的用途 find 查找的路径 -name 文件名 ----->在指定路径下,以文件名为条件查找文…

M1 macbook上安装docker 编译内核 并使用qemu启动内核。

1、在M1上安装docker这个就不用提供步骤了,网上自行搜索。 2、在M1上pull一个ubuntu的容器。docker pull ubuntu:18.04 docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 18.04 d1a528908992 …

SpringBoot(实用开发篇)

SpringBoot实用开发篇 第三方属性bean绑定 ConfigurationProperties 使用ConfigurationProperties为第三方bean绑定属性 配置文件 datasource:driverClassName: com.mysql.jdbc.Driver servers:ipAddress: 192.168.0.1port: 80timeout: -1ServerConfig类: Dat…

前端工程化 | vue3+ts+jsx+sass+eslint+prettier 配置化全流程

起因: 前端开发是一个工程化的流程。 包括持续集成、持续部署。 我认为集成 的第一方面就是开发,在前端项目开发中,需要保证代码格式规范的统一、代码质量、提交的规划。而这些要求需要通过各种插件来保证规范化和流程化开发。 如何配置这…

Vue中如何进行数据导入与Excel导入

Vue中如何进行数据导入与Excel导入 Vue是一款非常流行的JavaScript框架,它提供了一套用于构建用户界面的工具和库。在Vue中,我们可以使用多种方式来导入数据,包括从服务器获取数据、从本地存储获取数据、从文件中读取数据等等。其中&#xf…