异常和中断

news2024/11/18 17:25:43

异常和中断机制

请添加图片描述

​ 现代计算机中都配有完善的异常和中断处理系统,CPU的数据通路中有相应的异常检测和响应逻辑,外设接口中有相应的中断请求和控制逻辑,操作系统中有相应的中断服务程序。

异常和中断的基本概念

  • 异常(内中断):CPU内部产生的意外事件

    异常是CPU执行一条指令时,由CPU在其内部检测到的、与正在执行的指令相关的同步事件

  • 中断(外中断):CPU外部的设备向CPU发出的中断请求

    中断是一种外部设备触发的、与当前执行的指令无关的异步事件

若异常或中断处理程序发现是不可恢复的致命错误,则终止用户程序。对异常和中断的具体处理过程有操作系统(和驱动程序)完成

异常的分类

​ 异常有:整除0、溢出(浮点数运算的下溢不算)、断点、单步跟踪、非法指令、栈溢出、地址越界、缺页等。按照发生的原因和返回方式不同分为故障自陷终止

故障 Fault

指在引起故障的指令启动后、执行结束前被检测到的异常事件。

例如:指令译码时出现“非法操作码”;取数据时发生缺页缺段;执行整数触发指令时发现”除数为0“等

一般处理完故障后回到发生故障的指令开始执行(处理完后不会进入直接进入下一条执行),或终止程序

自陷 Trap

自陷也称为陷阱或陷入,它是一种预先安排的一种“异常”事件。通常的做法是:事先在程序中用一条特殊指令或通过某种方式设定特殊控制标志来人为设置一个陷阱,当CPU执行完自陷指令后,根据不同“陷阱”类型进行相应的处理,然后回到自陷指令的下一条指令(易错)执行

例如:程序调式的“断点设置”、单步追踪;系统调用指令、条件自陷指令、无条件自陷指令(如MIPS中的teq、teqi、tne、tnei)等都属于陷阱指令。执行到这些指令时,无条件或有条件的自动调出操作系统内核程序进行执行

故障异常自陷异常属于程序性异常(软件中断)

终止 Abort

如果在执行指令的过程发生使计算机无法继续执行的硬件故障,如控制器出错、存储器校验错等,那么程序将无法继续执行,只能终止调出中断服务程序来重启系统。这种异常是随机发生的

终止异常外中断属于硬件中断

中断的分类

中断包括:IO设备发出的IO中断(如键盘输入、打印机缺纸等),或发生某种特殊事件(如用户按Esc键、定时器计数时间到)。外部IO设备通过特定的中断请求信号线向CPU提出中断请求,CPU每执行完一条指令就检查中断请求信号线,若检测到中断信号则进入中断响应周期

中断可分为可屏蔽中断不可屏蔽中断

可屏蔽中断

可屏蔽中断指通过请求线INTR向CPU发出中断请求。CPU可通过在中断控制器设置相应的屏蔽字来屏蔽它或不频闭它,被屏蔽的中断请求将不被送到CPU

不可屏蔽中断

指通过专门的不可屏蔽中断请求线NMI向CPU发送的中断请求,通常是非常紧急的硬件故障,如电源掉电。这类中断信号不可被屏蔽

中断和异常的不同点

中断和异常在本质上是一样的,但它们之间有以下两个重要的不同点:

  • “缺页”或“溢出”等异常事件是由特定指令执行过程种产生的,而中断不和任何指令相关联,也不阻止任何指令的完成
  • 异常的检测是由CPU自身完成的,不必通过外部的某个信号通知CPU;对于中断则必须通过中断请求线获取中断信息源的信息,才能知道哪个设备发生了什么中断

异常和中断响应过程

CPU对异常和中断响应的过程分为:关中断、保存断点和程序状态、识别异常和中断并转到相应的处理程序

关中断

在保存断点和程序状态期间,不能被新的中断打断,因此要禁止响应新的中断,即关中断。通常设置PSW种的“IF=0”来实现关中断

保存断点和程序状态

保存程序的断点,要保存PC和PSWR,以保证异常和中断处理后正确返回到被中断的程序继续执行

识别异常和中断并转到相应的处理程序

异常和中断源的识别要有软件识别硬件识别两种。异常的识别大多采用软件识别方式,而中断可以采用软件识别也可以采用硬件识别

软件识别方式是指CPU设置一个异常状态寄存器,用于记录异常原因。操作系统使用一个统一的异常或中断查询程序,按照优先级顺序查询异常状态寄存器,以检测异常和中断类型,先查询到的先被处理,然后转到内核中相应的处理程序

硬件识别又称为向量中断异常或中断处理程序的首地址称为中断向量,所有中断向量都放在中断向量表(在内存)中。每个异常或中断都被指定一个中断类型号(不实际存在,类似数组下标),在中断向量表中,类型号和中断向量一一对应。

整个响应的过程是不可被打断的。中断响应结束后,CPU就从PC中取出中断服务程序的第一条指令开始执行,直至中断返回,这部分任务由中断服务程序完成,整个中断处理过程由软硬件偕同完成

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构之树,实现堆的增删改查接口及堆的应用

目录 一、树 1.树的概念及结构 1.1树的概念 1.2树的相关概念 1.3树的表示 2.二叉树的概念及结构 2.1二叉树的概念 2.2特殊的二叉树 2.3二叉树的性质 2.4二叉树的存储结构 3.二叉树的顺序结构及实现 3.1二叉树的顺序结构 3.2堆的概念及结构 二、堆的实现 0.定义堆…

神经网络:Zero2Hero 2 - MLP、Embedding

Zero → \to → Hero : 2 接上篇,Zero → \to → Hero : 1,进一步的扩展模型: 增加输入字符序列的长度,通过多个字符预测下一个字符的概率分布增加模型的深度,通过多层的MLP来学习和预测字符的生成概率增加嵌入层&…

LeetCode高频算法刷题记录5

文章目录 1. 最长递增子序列【中等】1.1 题目描述1.2 解题思路1.3 代码实现 2. 接雨水【困难】2.1 题目描述2.2 解题思路2.3 代码实现 3. 二叉树中的最大路径和【困难】3.1 题目描述3.2 解题思路3.3 代码实现 4. 二叉树的中序遍历【简单】4.1 题目描述4.2 解题思路4.3 代码实现…

HTB靶机014-Sunday-WP

Sunday 靶机IP:10.10.10.76 PortScan Nmap 快速扫描: ┌──(xavier㉿kali)-[~] └─$ sudo nmap -sSV -T4 -F 10.10.10.76 Starting Nmap 7.93 ( https://nmap.org ) at 2023-05-06 00:10 CST Nmap scan report for 10.10.10.76 Host is …

2023年广东省中职网络安全Web渗透测试解析(超详细)

一、竞赛时间 180分钟 共计3小时 二、竞赛阶段 1.访问地址http://靶机IP/task1,分析页面内容,获取flag值,Flag格式为flag{xxx}; 2.访问地址http://靶机IP/task2,访问登录页面。用户user01的密码为1-1000以内的数,获取用户user01的密码,将密码作为Flag进行提交,Flag格式…

客户端读取响应头+后端读取请求头的那些事

在一些特殊场景中,我们在客户端想要去获取服务端接口设置的一些自定义响应头,服务端该如何处理,客户端才能取到这些自定义响应头的值呢? 特殊场景,我这里也举例一下,原生页面webView嵌入web页面。这个时候…

Shell脚本编程入门--Day2

文章目录 几个简单内置shell命令shell字串的语法计算变量长度的各种玩法批量修改文件名特殊shell扩展变量实际应用父子shell创建进程列表(创建子shell) 几个简单内置shell命令 echo -n 不换行输出 -e 解析字符串中的特殊符号 (\n, \r, \t, \…

浏览器的进程和线程

浏览器是多进程多线程的应用程序 浏览器进程 主要负责界面显示、用户交互、子进程管理等。浏览器进程内部会启动多个线程处理不同的任务。 网络进程 负责加载网络资源。网络进程内部会启动多个线程来处理不同的网络任务。 渲染进程 渲染进程启动后,会开启一个染主线…

macOS 13.4正式版(22F66)With OpenCore 0.9.2开发版 and winPE双引导分区原版镜像

镜像特点 原文地址:http://www.imacosx.cn/113625.html 完全由黑果魏叔官方制作,针对各种机型进行默认配置,让黑苹果安装不再困难。系统镜像设置为双引导分区,全面去除clover引导分区(如有需要,可以自行直…

java boot项目基础配置之设置启动端口

因为 springboot 项目是一个内嵌的tomcat 那么 我们就来研究一下 怎么改它的启动端口 其实 它的配置 还是非常多的 我们基础部分讲一下 后面 到实用部分 再一边用 一边再看一些 首先 我们如果不设置 他就会占用 我们的 8080端口 那么 我们最好就直接用 80端口 就不用输入端口…

【滤波】卡尔曼滤波数学

本文主要翻译自rlabbe/Kalman-and-Bayesian-Filters-in-Python的第7章节07-Kalman-Filter-Math(卡尔曼滤波数学)。 %matplotlib inline#format the book import book_format book_format.set_style()简介 如果你已经学习到了这一步,我希望你…

vue基础知识一:说说你对vue的理解?

一、从历史说起 Web是World Wide Web的简称,中文译为万维网 我们可以将它规划成如下的几个时代来进行理解 石器时代 文明时代 工业革命时代 百花齐放时代 石器时代 石器时代指的就是我们的静态网页,可以欣赏一下1997的Apple官网 最早的网页是没有数据库…

day1 IO 模型

目录 基本概念 同步和异步 阻塞和非阻塞 线程在运行过程中,可能由于以下几种原因进入阻塞状态: 可能阻塞套接字的Linux Sockets API调用分为以下四种 五种 I/O 模型 阻塞I/O 非阻塞I/O ​编辑 I/O多路复用模型 信号驱动式I/O模型 异步I/O 模型 …

网络模块封装

网络模块封装 library-network模块配置依赖一.自定义LiveDataCallAdapterFactory1.定义ApiResponse返回的数据类型2.LiveDataCallAdapter.kt3.LiveDataCallAdapter.kt 二.自定义CustomGsonConverterFactory三.拦截器1.HeaderInterceptor请求头拦截器2.BasicParamsInterceptor参…

Android - 内容提供者(Content Provider) 使用

Android - 内容提供者(Content Provider) 内容提供者组件通过请求从一个应用程序向其他的应用程序提供数据。这些请求由类 ContentResolver 的方法来处理。内容提供者可以使用不同的方式来存储数据。数据可以被存放在数据库,文件,甚至是网络。 有时候需…

Python如何进行性能测试?(Locust对接口进行压测)

python如何进行性能测试呢?其实原理就是对于接口进行加线程,打个比方就是当你有一个电梯,你同时可以搭载多少个人坐电梯那这个人数就是这部电梯的其中一个性能指标,那么对于接口来说每秒钟能有多少人成功发起请求后得到成功的响应…

QT 学习笔记2 信号与槽

上次做的界面,并没有逻辑。你点击按钮,并不会执行什么 要想其能作出反映,就不得不提到一个很重要的机制---信号与槽 当我们点击确定的时候,按钮会发出一个信号 点击确定的时候,会执行一段代码,这段程序就…

Ada 语言学习(3)复合类型数据——Array

文章目录 Array数据类型声明数组索引数组范围数组复制数组初始化直接赋值通过拷贝赋值不同索引范围但长度相等非指定类型边界收缩 多维数组数组遍历数组切片访问和动态检查直接访问动态检查 数组字面量 Array literal数组拼接两个数组拼接数组和单个值拼接 Array Equality&…

机器学习平台 PAI 支持抢占型实例,模型服务最高降本 90%

助力模型推理服务降本增效,适用于推理成本敏感场景,如:AIGC 内容生成异步推理、批量图像处理、批量音视频处理等。 在 AI 开发及服务不断追求效率的背景下,阿里云机器学习平台 PAI 宣布支持抢占型实例(Spot Instance&a…

2023逆向分析代码渗透测试flag0072解析(超详细)

一、竞赛时间 180分钟 共计3小时 1.从靶机服务器的FTP上下载flag0072,分析该文件,请提交代码保护技术的类型。提交格式:XXXX。 2.提交被保护的代码所在地址。提交格式: 0xXXXX。 3.提交代码解密的密钥。提交格式: 0xXX。 4.请提交输入正确flag时的输出。提交格式: XXXX。…