26考研——中央处理器_异常和中断机制(5)

news2025/7/8 9:22:47

408答疑


文章目录

  • 五、异常和中断机制
    • 异常和中断的基本概念
    • 异常和中断的分类
      • 异常的分类
        • 故障 (Fault)
        • 自陷 (Trap)
        • 终止 (Abort)
      • 中断的分类
        • 可屏蔽中断
        • 不可屏蔽中断
    • 异常和中断响应过程
      • 关中断
      • 保存断点和程序状态
      • 识别异常和中断并转到相应的处理程序
  • 八、参考资料
    • 鲍鱼科技课件
    • 26王道考研书


五、异常和中断机制

  • 现代计算机中都配有完善的异常和中断处理系统,CPU 的数据通路中有相应的异常检测和响应逻辑,外设接口中有相应的中断请求和控制逻辑,操作系统中有相应的中断服务程序。
  • 这些中断硬件电路和中断服务程序有机结合,共同完成异常和中断的处理过程。

异常和中断的基本概念

  • 由 CPU 内部产生的意外事件被称为异常,有些教材中也称内中断。由来自 CPU 外部的设备向 CPU 发出的中断请求被称为中断,通常用于信息的输入和输出,有些教材中也称外中断,内中断和外中断的联系与区别如下图所示。
    在这里插入图片描述

    • 异常是 CPU 执行一条指令时,由 CPU 在其内部检测到的、与正在执行的指令相关的同步事件;
    • 中断是一种典型的由外部设备触发的、与当前正在执行的指令无关的异步事件。
  • 异常和中断处理过程的描述如下:若 CPU 在执行用户程序的第 i i i 条指令时检测到一个异常事件,或者执行第 i i i 条指令后发现一个中断请求信号,则 CPU 打断当前程序,然后转去执行相应的异常或中断处理程序。

    • 若异常或中断处理程序能够解决相应的问题,则在异常或中断处理程序的最后,CPU 通过执行异常或中断返回指令,回到被打断的用户程序的第 i i i 条指令或第 i + 1 i+1 i+1 条指令继续执行;
    • 若异常或中断处理程序发现是不可恢复的致命错误,则终止用户程序。
  • 通常情况下,对异常和中断的具体处理过程由操作系统(和驱动程序)完成。

异常和中断的处理过程基本是相同的,这也是有些教材将两者统称为中断的原因。

  • 中断和异常在本质上是一样的,但它们之间有两个重要的不同点:
    1. “缺页”或“溢出”等异常事件是由特定指令在执行过程中产生的,而中断不和任何指令相关联,也不阻止任何指令的完成。
    2. 异常的检测由 CPU 自身完成,不必通过外部的某个信号通知 CPU。对于中断,CPU 必须通过中断请求线获取中断源的信息,才能知道哪个设备发生了何种中断。

异常和中断的分类

异常的分类

  • 异常是由 CPU 内部产生的意外事件,分为硬故障中断和程序性异常。

    • 硬故障中断是由硬连线出现异常引起的,如存储器校验错、总线错误等。
    • 程序性异常也称软件中断,是指在 CPU 内部因执行指令而引起的异常事件。如整除 0、溢出、断点、单步跟踪、非法指令、栈溢出、地址越界、缺页等。
  • 按异常发生原因和返回方式的不同,可分为故障、自陷和终止。

故障 (Fault)
  • 指在引起故障的指令启动后、执行结束前被检测到的异常事件。
    • 例如,指令译码时,出现“非法操作码”;
    • 取数据时,发生“缺权”或“缺页”;
    • 执行整数除法指令时,发现“除数为 0”等。
  • 对于“缺段”“缺页”等异常事件,经处理后,可将所需的段或页面从磁盘调入主存,回到发生故障的指令继续执行,断点为当前发生故障的指令;
  • 对于“非法操作码”“除数为 0”等,因为无法通过异常处理程序恢复故障,因此不能回到原断点执行,必须终止进程的执行。
自陷 (Trap)

自陷也称陷阱或陷入,它是预先安排的一种“异常”事件,就像预先设定的“陷阱”一样。

  • 通常的做法是:事先在程序中用一条特殊指令或通过某种方式设定特殊控制标志来人为设置一个“陷阱”,当执行到被设置了“陷阱”的指令时,CPU 在执行完自陷指令后,自动根据不同“陷阱”类型进行相应的处理,然后返回到自陷指令的下一条指令执行。

  • 在 x86 机器中,用于程序调试“断点设置”和单步跟踪的功能就是通过陷阱机制实现的。此外,系统调用指令、条件自陷指令(如 MIPS 中的 teq、teqi、tne、tnei 等)等都属于陷阱指令,执行到这些指令时,无条件或有条件地自动调出操作系统内核程序进行执行。

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

终止 (Abort)
  • 若在执行指令的过程中发生了使计算机无法继续执行的硬件故障,如控制器出错、存储器校验错、总线错误等,则程序将无法继续执行,只能终止,此时,调出异常服务程序来重启系统。
  • 这种异常与故障和自陷不同,不是由特定指令产生的,而是随机发生的。

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

中断的分类

  • 中断是指来自 CPU 外部、与 CPU 执行指令无关的事件引起的中断,包括 I/O 设备发出的 I/O 中断(如键盘输入、打印机缺纸等),或发生某种特殊事件(如用户按 Esc 键、定时器计数时间到)等。

  • 外部 I/O 设备通过特定的中断请求信号线向 CPU 提出中断请求,CPU 每执行完一条指令就检查中断请求信号线,若检测到中断请求,则进入中断响应周期。

  • 中断可分为可屏蔽中断和不可屏蔽中断。

可屏蔽中断
  • 指通过可屏蔽中断请求线 INTR 向 CPU 发出的中断请求。
  • CPU 可以通过在中断控制器中设置相应的屏蔽字来屏蔽它或不屏蔽它,被屏蔽的中断请求将不被送到 CPU。
不可屏蔽中断
  • 指通过专门的不可屏蔽中断请求线 NMI 向 CPU 发出的中断请求。
  • 通常是非常紧急的硬件故障,如电源掉电等。这类中断请求信号不可被屏蔽,以让 CPU 快速处理这类紧急事件。

异常和中断响应过程

  • CPU 执行指令时,若发生了异常或中断请求,则必须进行相应的处理。
  • 从 CPU 检测到异常或中断事件,到调出相应的处理程序,整个过程称为异常和中断响应。
  • CPU 对异常和中断响应的过程可分为关中断、保存断点和程序状态、识别异常和中断并转到相应的处理程序。

关中断

在保存断点和程序状态期间,不能被新的中断打断,因此要禁止响应新的中断,即关中断。

  • 通常通过设置“中断允许”(IF)触发器来实现,若 IF 置为 1,则为开中断,表示允许响应中断;
  • 若 IF 置为 0,则表示关中断,表示不允许响应中断。

保存断点和程序状态

  • 为了能在异常和中断处理后正确返回到被中断的程序继续执行,必须将程序的断点(返回地址)送到栈或特定寄存器中。通常保存在栈中,这是为了支持异常或中断的嵌套。
  • 异常和中断处理后可能还要回到被中断的程序继续执行,被中断时的程序状态字寄存器 PSW 的内容也需要保存在栈或特定寄存器中,在异常和中断返回时恢复到 PSW 中。

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

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

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

  • 硬件识别方式也称向量中断,异常或中断处理程序的首地址称为中断向量,所有中断向量都存放在中断向量表中。每个异常或中断都被指定一个中断类型号。在中断向量表中,类型号和中断向量一一对应,因此可以根据类型号快速找到对应的处理程序。

  • 整个响应过程是不可被打断的。

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

注意:
所有的异常和中断事件都是由硬件检测发现的。
此外,根据识别中断服务程序地址的方式,可分为向量中断和非向量中断;根据中断处理过程是否允许被打断,还可分为单重中断和多重中断。

八、参考资料

鲍鱼科技课件

b站免费王道课后题讲解:
在这里插入图片描述

网课全程班:
在这里插入图片描述

26王道考研书

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

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

相关文章

数据库实验报告 SQL SERVER 2008的基本操作 1

实验报告(第 1 次) 实验名称 SQL SERVER 2008的基本操作 实验时间 9月14日1-2节 一、实验内容 数据库的基本操作:包括创建、修改、附加、分离和删除数据库等。 二、源程序及主要算法说明 本次实验不涉及程序和算法。 三、测…

Nature图形复现—两种快速绘制热图的方法

相信大家在科研过程中,会遇到热图,有时候会觉得热图理解起来比较困难,或者觉得绘制热图也比较困难。本期教程我们来深入了解热图、绘制热图。 热图是一种通过颜色深浅或色阶变化来直观展示数据分布、密度或数值大小的可视化工具。它在多个领域…

INFINI Console 纳管 Elasticsearch 9(一):指标监控、数据管理、DSL 语句执行

Elasticsearch v9.0 版本最近已发布,而 INFINI Console 作为一款开源的非常轻量级的多集群、跨版本的搜索基础设施统一管控平台,是否支持最新的 Elasticsearch v9.0 集群管理呢?本文以 INFINI Console v1.29.2 为例,从指标监控、数…

texlive 与 Texmaker 安装

一、安装 Texmaker 1、下载Texmaker 链接地址: Texmaker (free cross-platform latex editor) 点击 FREE DOWNLOAD ,点击 Texmaker_6.0.1_Win_x64.msi ,下载即可。 2、安装Texmaker 双击如下文件 若出现如下,点击更多信息 点击仍要运行 …

机试刷题:进制转换3

题目来源&#xff1a;N诺 一、题目描述 二、解题思路 过程模拟&#xff0c;先转换为十进制&#xff0c;再转换为N进制即可。 注意&#xff1a;转换的时候可能出现字母&#xff0c;注意字母的表示。 用string和char类型对数据进行存储要更方便。 #include <iostream>…

(顺序表、单链表、双链表)==>一篇解决!(Java版)

文章目录 一、线性表二、顺序表三、单链表四、双链表 一、线性表 线性表是最基本、最简单、也是最常用的一种数据结构。一个线性表是n个具有相同特性的数据元素的有限序列。 线性表的特征&#xff1a;数据元素之间具有一种“一对一”的逻辑关系。 线性表的分类&#xff1a; 线…

JPG与PDF格式转换器

该插件可实现JPG与PDF格式的互转。 MainForm.Designer.cs using System.Windows.Forms; namespace JpgToPdfConverter {partial class MainForm{private System.ComponentModel.IContainer components null;protected override void Dispose(bool disposing){if (disposing &…

手搓传染病模型(SEIARW)

在传染病传播的研究中&#xff0c;水传播途径是一个重要的考量因素。SEAIRW 模型&#xff08;易感者 S - 暴露者 E - 感染者 I - 无症状感染者 A - 康复者 R - 水中病原体 W&#xff09;综合考虑了人与人接触传播以及水传播的双重机制&#xff0c;为分析此类传染病提供了全面的…

【Mac 从 0 到 1 保姆级配置教程 15】- Python 环境一键安装与配置,就是这么的丝滑

文章目录 前言安装 Python 环境VSCode 配置Python 环境NeoVim 配置 Python 环境&#xff08;选看&#xff09;1. Python LSP 配置2. 打开 python 语言支持 最后参考资料系列教程 Mac 从 0 到 1 保姆级配置教程目录&#xff0c;点击即可跳转对应文章&#xff1a; 【Mac 从 0 到 …

【递归、搜索与回溯】专题一:递归(二)

&#x1f4dd;前言说明&#xff1a; 本专栏主要记录本人递归&#xff0c;搜索与回溯算法的学习以及LeetCode刷题记录&#xff0c;按专题划分每题主要记录&#xff1a;&#xff08;1&#xff09;本人解法 本人屎山代码&#xff1b;&#xff08;2&#xff09;优质解法 优质代码…

Spark缓存-cache

一、RDD持久化 1.什么时候该使用持久化&#xff08;缓存&#xff09; 2. RDD cache & persist 缓存 3. RDD CheckPoint 检查点 4. cache & persist & checkpoint 的特点和区别 特点 区别 二、cache & persist 的持久化级别及策略选择 Spark的几种持久化…

记录算法笔记(2025.5.13)二叉树的最大深度

给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3 示例 2&#xff1a; 输入&#xff1a;root [1,null,2] …

【Linux】简单设计libc库

&#x1f4dd;前言&#xff1a; 经过之间两篇文章&#xff0c;【Linux】基础IO&#xff08;一&#xff09;和【Linux】基础IO&#xff08;二&#xff09;的学些&#xff0c;我们对文件的基础IO已经有了一定的理解。 这篇文章我们来简单设计一下libc库&#xff0c;来复习一下文…

milvus+flask山寨《从零构建向量数据库》第7章case2

继续流水账完这本书&#xff0c;这个案例是打造文字形式的个人知识库雏形。 create_context_db: # Milvus Setup Arguments COLLECTION_NAME text_content_search DIMENSION 2048 MILVUS_HOST "localhost" MILVUS_PORT "19530"# Inference Arguments…

【Canda】常用命令+虚拟环境创建到选择

目录 一、conda常用命令 二、conda 环境 2.1 创建虚拟环境 2.2 conda环境切换 2.3 查看conda环境 2.4 删除某个conda环境 2.5 克隆环境 三、依赖包管理 3.1 安装命令 3.2 更新包 3.3 卸载包 3.4 查看环境中所有包 3.5 查看某个包的版本信息 3.6 搜索包 四、环境…

【登录认证】JWT令牌

一、概述 JWT全称:**JSON Web Token **(https://jwt.io/)定义了一种简洁的、自包含的格式&#xff0c;用于通信双方以json数据格式安全的传输信息。组成: ①第一部分:Header(头)&#xff0c;记录令牌类型、签名算法等。例如: (“alg”:" HS256"," type":“…

python3:文件与异常

本来这篇教程是打算在base python数据类型之后出的&#xff0c;但是计划赶不上变化&#xff0c;反正最后都要融会贯通&#xff0c;今日有时间、今天遇到了类似的问题&#xff0c;就今天做这一模块的整理&#xff0c;顺序不是重点。 参考我的上一篇博客&#xff1a;https://blo…

【兽医电子处方软件】佳易王宠物医院电子处方管理系统:宠物医院诊所用什么软件?一键导入配方模板软件程序实操教程 #操作简单 #宠物医院软件下载安装

一、概述 软件试用版资源文件下载方法&#xff1a; 【进入头像主页第一篇文章最后 卡片按钮 可点击了解详细资料 或左上角本博客主页 右侧按钮了解具体资料信息】 本实例以 佳易王宠物医院电子处方管理系统软件 为例说明&#xff0c;其他版本可参考本实例。试用版软…

问题及解决02-处理后的图像在坐标轴外显示

一、问题 在使用matlab的appdesigner工具来设计界面&#xff0c;可以通过点击处理按钮来处理图像&#xff0c;并将处理后的图像显示在坐标轴上&#xff0c;但是图像超出了指定的坐标轴&#xff0c;即处理后的图像在坐标轴外显示。 问题图如下图所示。 原来的坐标轴如下图所…

EasyX开发——绘制跟随鼠标移动的小球

游戏主循环&#xff1a; #include<graphics.h>int main() {initgraph(1280, 720);while (true){}return 0; } peekmessage函数&#xff1a;如果成功拉取到了消息&#xff0c;函数就会返回true&#xff0c;反之就会返回false 使用另外一个循环来不断地从消息队列当中拉取…