x86架构学习之中断

VIPx86架构学习之中断
外部中断,一般是由CPU的外部引脚电信号触发,这些引脚留给硬件厂商去定义中断,例如主板厂商可以将USB中断挂载70号中断引脚上,MCU厂商可以将片上外设(SPI、I2C等)的中断挂载在指定中断线上。中断描述符主要用于说明该中断的入口地址,中断描述符表则是将中断描述符一项一项管理在一个数组中,每一项中断描述符占用8个字节(64位模式下,占用16字节),其。简称中断,后文如果没特别说明,中断都指外部中断,由外部IO事件触发,由于时钟源来自CPU外部,与CPU时钟不同源,因此是异步事件。
开通可读全文 ·1.5k 人阅读
最低0.47元/天 解锁文章

前言

读本文前,你需要了解x86的操作模式、寻址方式、特权级相关知识,具体参考这篇文章

中断与异常

打断cpu当前任务的事件都叫中断,根据是否可屏蔽分为:

  • 可屏蔽中断,即可通过软件配置相关寄存器(通常是PIC中的某个寄存器)来开启和关闭。
  • 不可屏蔽中断,即中断不可关闭,一般用在一些非常紧急或灾难性的事件上。

根据中断的来源,我们将中断分为外部中断和内部异常

外部中断

简称中断,后文如果没特别说明,中断都指外部中断,由外部IO事件触发,由于时钟源来自CPU外部,与CPU时钟不同源,因此是异步事件。
外部中断,一般是由CPU的外部引脚电信号触发,这些引脚留给硬件厂商去定义中断,例如主板厂商可以将USB中断挂载70号中断引脚上,MCU厂商可以将片上外设(SPI、I2C等)的中断挂载在指定中断线上。

内部异常

由CPU内部事件触发,触发时钟源与CPU时钟同源,因此是同步事件。

  • 处理器探测异常
    • 故障,可修复,修复后可正常运行,如0除数、计算结果溢出、缺页等。故障发生时,入栈作为故障处理函数返回地址的,是故障指令所在的地址,而不是下一条指令的地址(这是一般中断和异常的行为),以便修复故障后,指令能够再次被执行,如缺页。
    • 陷阱,通过软件插入断点指令触发。
    • 异常终止,应用级灾难,只能终止当前任务。
  • 编程异常,即通过软件插入中断或异常(INT n)指令来触发,由于需要显示的中断指令,因此,被称为软中断,利用软中断,可以模拟任意外部中断信号,在操作系统,软中断多用于系统调用。
  • 机器检测异常,硬件上检测到错误时,会触发的异常,这个异常属于纯硬件故障,不同的版本的x86架构实现不同,因此不存在兼容性。(可以理解为硬件bug检测机制,硬件的设计不可能完美)

中断号

x86的中断号总共有256个,其中前32个(0~31)中断号已经被CPU硬件预定义或保留,软件无法修改,这32个中断号也是异常,后224个中断号可由硬件厂商自由配置使用。

中断号 异常类型 简称 描述 触发源
0 故障 #DE Divide 错误使用 DIV and IDIV 指令
1 陷阱 #DB Debug 任意代码和数据访问都有可能
2 故障 NMI Interrupt 不可屏蔽中断
3 陷阱 #BP Breakpoint INT3 指令.
4 陷阱 #OF Overflow INTO 指令.
5 故障 #BR BOUND Range Exceeded BOUND 指令.
6 故障 #UD Invalid Opcode (Undefined Opcode) 执行无效指令
7 故障 #NM Device Not Available (No Math Coprocessor) Floating-point or WAIT/FWAIT 指令
8 故障 异常终止 #DF Double Fault
9 故障 异常终止 #MF CoProcessor Segment Overrun (reserved)
10 故障 #TS Invalid TSS 硬件任务切换时,TSS段无效
11 故障 #NP Segment Not Present 访问不存在的段
12 故障 #SS Stack Segment Fault 非法栈操作,ss寄存器加载无效值
13 故障 #GP General Protection 各
VIP Double Fault & Triple Fault Double Fault从字面上来讲,就是前后的动作连续触发两个中断的异常,比如一个缺页异常没有对应的异常中断处理函数(用c代码表示即为NULL,空指针),这就将会引发一个典型的Double Fault,在这种情况下,如果发生缺页异常则将触发一个中断,此时cpu要去调用缺页异常中断处理函数进行处理,但却发现没有这个处理函数,因而这又是一个异常而再次触发中断,此时触发的就是Double Fault异常中断。前32个中断,每个中断的含义都可以在intel手册“ 开通可读全文·3.2w 阅读·9 点赞·5 收藏 阅读全文

相关推荐

第8章 计算机中断机制与控制接口设计

本文详细介绍了计算机中断机制与控制接口设计,重点分析了x86架构的中断体系结构、8259A可编程中断控制器的工作原理及应用。主要内容包括:1)x86处理器的中断分类(硬件中断、软件中断和异常)及响应机制;2)8259A控制器的内部结构、中断处理过程和工作模式(全嵌套、轮转优先级等);3)中断服务程序设计方法,包括外部设备中断处理和驻留程序(TSR)实现;4)PC系统中8259A的典型配置与应用实例。文章通过大量C语言代码示例展示了中断系统的编程实现,涵盖了从底层硬件操作到高层应用设计的完整流程。最后提出了相

小宝哥Code的专栏 1065

RISC-V、ARM、x86三大架构中断机制对比:从流程到实战

中断是处理器架构设计的核心,无论是嵌入式系统的定时器驱动,还是操作系统中的任务调度,都依赖中断机制高效运转。理解中断流程,关键在于把握中断源识别、仲裁路由、入口跳转、现场保存与返回五个环节,而不同架构在这五步中的软硬件分工截然不同。x86凭借复杂的IDT与APIC硬件自动完成大量工作,ARM Cortex-M通过硬件自动压栈实现快速响应,Cortex-A则依赖GIC进行分发,RISC-V以极简CSR和灵活的中断控制器将控制权交给软件。掌握这些差异,不仅能帮助开发者定位中断不生效、嵌套状态丢失等常见问题,也能

weixin_42657024的博客 348

DPDK技术学习路线总结,虚拟化专家之路

现在非常流行的DPDK技术,随着实时响应万维网的广泛使用,音频、图像、视频的使用越来越多,带动了服务质量需求的增长。为了应对这种增长,TCP/IP体系结构开发了QoS(服务质量),以支持具有各种QoS要求的各种类型的流量。数据平面是QoS框架的三个平面之一,承担着分组队列管理、队列调度、拥塞避免等机制,对提高网络通信效率起着至关重要的作用。在此基础上,人们期望以更低的成本和更短的产品开发周期提供多样化的网络单元和丰富的功能,如应用处理、控制处理、分组处理、信号处理等。

Linuxhus的博客 541

手搓操作系统进阶总结:从LED点灯到多任务内核的完整图景

操作系统是计算机硬件与软件之间的桥梁,理解其底层原理是每位开发者的进阶阶梯。从按下电源键到用户进程运行,引导扇区加载、保护模式切换、内存分页、中断描述符表构建、进程调度与特权级切换,每一步都环环相扣。许多学习者卡在“代码看起来全对但跑不起来”的困境,往往源于栈指针未初始化、链接脚本入口错误、中断现场保存顺序错位等沉默细节。手写一个微型内核,能让你直观掌握硬件机制如何配合软件策略,并构建精确的计算机运转心智模型。这类实践不仅适用于x86架构学习,也为阅读Linux内核源码、从事驱动开发或嵌入式系统设计打下扎实

weixin_29722783的博客 73

自研操作系统实战:从零编写内核、引擎与架构的完整技术路径

操作系统内核是系统软件的核心,自研内核意味着从引导扇区、内存管理到中断处理全部自主实现,而非基于Linux等开源内核二次开发。理解其原理,需要掌握汇编、C语言与硬件交互,其中GDT与分页机制是构建保护模式的基础。自研操作系统的价值在于实现真正自主可控的技术栈,尤其是在信创替代、嵌入式定制和底层原理学习等场景下,能够帮助团队深入掌控系统行为。本文以可运行的最小内核为目标,展示从编写引导扇区、链接内核入口、配置GDT到通过QEMU虚拟机验证输出的完整路径,帮助开发者亲手从零构建一个能启动的自研内核。

weixin_34221654的博客 333

Linux在x86上的中断处理过程

Linux在x86上的中断处理过程一:引言二:x86的中断处理过程三:注意事项术语解释:CPL,DPL,RPL5.1.CPL5.2.DPL5.3.RPLx86 Registers 一:引言 在Intel的文档中,把中断分为两种。一种是异常,也叫 同步中断 。一种称之为中断,也叫 异常中断 。同步中断指的是由CPU控制单元产生,之所以称之为同步,是因为只有一条指令执行完毕后才会发出中断。例如除法运算...

truth_01的博客 1194

x86 kernel 中断分析三——中断处理流程

CPU检测中断CPU在执行每条程序之前会检测是否有中断到达,即中断控制器是否有发送中断信号过来查找IDTCPU根据中断向量到IDT中读取对应的中断描述符表项,根据段选择符合偏移确定中断服务程序的地址见附录2interrupt数组在分析一中,我们看到,填充IDT中断服务程序的是interrupt数组的内容,所以第2步跳转到interrupt数组对应的表项,表项的内容之前也已分析过push vector

Burning Water 4073

x86架构中的外部中断结构-Part 1:中断控制器的演化

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475       本文主要讲解了x****86体系架构从外部设备接受中断的过程,本文是系列文章的第一部分,试图回答以下问题: 什么是PIC以及它的用途是什么? 什么是APIC以及它的用途是什么?LAPIC和I/O APIC的目的是什么? APIC,xA

虚幻私塾 1155

实验3前篇——X86的中断管理

实验3主要内容是用户进程的创建,运行,销毁;从操作系统的角度来看用户进程,可以看作是动态加载可运行的程序,然后进行不断地动态切换,这里我们当然也可以从虚拟机的角度来考察操作系统——操作系统其实是在硬件上为用户进程创建虚拟机,每个虚拟机都是单独运行在整个硬件平台上的;而从用户进程看操作系统,则是固定的程序部分,并且提供硬件接口的程序。当我们需要理解该实验的内容时,可以想象一下,程序运

yiye_01的专栏 1995

Intel x86 CPU中断和异常的定义和分类

中断通常被定义为一个打断CPU芯片指令执行的事件,该事件对应到对应到CPU芯片内部或者外部的电路产生的电子信号。 中断信号可以被划分为同步中断和异步中断: 同步中断,该类型中断由CPU的控制单元在执行指令的时候产生,并且是在当前指令执行完毕下一个指令执行之前产生。 异步中断,该类型中断由其他硬件设备在任意的时间产生,并且遵循CPU的时钟信号传递给CPU。 对于Intel的CPU而言,它将同步...

2822

X86、NP、ASIC、MIPS架构对比

x86性能最多只能达到2Gbps 长久以来,国内许多安全厂商的防火墙产品都采用基于x86的架构,而国外厂商的多数防火墙则采用ASIC架构。几年前,随着技术的更新换代,随着网络处理 器(NP)技术的兴起,为了赶超国际上的先进水平,弥补国内防火墙性能上的不足,很多国内厂商开始采用“NP+ASIC”的架构。x86架 构是一种通用的“CPU+Linux”操作系统的架构。其处理...

weixin_34390105的博客 3793

ARM与X86架构:计算领域的两大支柱

ARM与X86架构作为计算领域的两大支柱,各自承载着不同的使命和应用场景。它们在不同的领域中发挥着举足轻重的作用,共同推动着数字世界的快速发展。 随着5G、物联网和人工智能等技术的快速发展,ARM架构在高性能计算领域的应用前景广阔。尽管ARM架构在移动和低功耗领域具有明显优势。随着制造工艺的进步和电源管理技术的优化,X86架构在功耗方面的表现将不断提升。未来,随着技术的不断进步和应用场景的不断拓展,ARM与X86架构将继续演进和创新,为用户带来更多的便利和价值。

weixin_70208651的博客 3136

X86架构寄存器介绍

x86 寄存器系统通过分工协作实现高效计算与控制:通用寄存器处理数据操作,段寄存器管理内存分区,EFLAGS 跟踪状态,控制寄存器管理 CPU 模式。理解其设计对操作系统开发、逆向工程和性能优化至关重要。在 64 位模式下,寄存器扩展和新增的 R8-R15 进一步提升了复杂应用的效率。

sinat_56559405的博客 2506

x86 kernel 中断机制分析一——IDT

本篇主要分析IDT的初始化流程。IDT简介IDT——interrupt description table,用来描述中断异常向量,表中的每一个entry对应一个向量。IDT entry:每个entry为8bytes,有以下关键bit: 16~31:code segment selector 0~15 & 46-64:segment offset (根据以上两项可确定中断处理函数的地址) Typ

Burning Water 3913

Debian 10 中 Linux 4.19 内核在 x86_64 架构上对中断嵌套的支持情况

中断嵌套是指在一个中断处理程序(ISR)正在执行的过程中,另一个更高优先级的中断请求到来,系统暂停当前中断处理程序,转而处理新的高优先级中断。处理完高优先级中断后,系统返回到原来的中断处理程序继续执行。这种机制允许系统更高效地响应紧急事件,但同时也增加了系统复杂性和潜在风险。在Debian 10上运行的Linux 4.19内核,基于x86_64架构的CPU,默认情况下不支持硬中断嵌套。硬中断处理程序在执行期间会屏蔽相应的中断源,确保处理的原子性和一致性。

数字人生 891

x86架构中断描述符表(IDT)详解:从实模式到保护模式

当你在键盘上敲下一个字母,屏幕立刻显示字符;当程序计算时出现除零错误,系统弹出"崩溃提示"——这些日常操作的背后,都依赖计算机的中断机制。本文聚焦x86架构中中断管理的核心数据结构:中断描述符表(IDT),覆盖从8086时代的实模式到80286后的保护模式的演进过程,解析IDT的设计原理、实现细节及实际应用。本文将按照"中断基础→实模式IVT→保护模式IDT→实战演示"的逻辑展开。先通过生活案例理解中断概念,再对比IVT与IDT的差异,最后通过一个简单的内核实验演示IDT的初始化过程。

操作系统内核探秘的博客 944

COMSOL仿真分析高压直流GIS/GIL绝缘性能优化

高压直流气体绝缘设备(GIS/GIL)的绝缘性能是保障电网可靠运行的关键。通过COMSOL Multiphysics多物理场仿真,可以深入分析气固界面电场分布与电荷积聚机理。该技术结合静电场、热场和电荷传输耦合计算,能准确模拟温度梯度对SF6气体与环氧树脂界面特性的影响。工程实践中,这类仿真可优化导体结构设计、改进绝缘材料配方,并建立电场-温度关联预警模型。特别是在80℃高温工况下,仿真显示界面电荷密度会显著增加23%,这对设备安全运行具有重要指导价值。

weixin_32075843的博客 188

Autodesk全家桶安装总报错1603?一个服务设置搞定3dsMax和CAD安装回滚问题

本文详细解析了Autodesk全家桶安装过程中常见的1603错误,特别是3ds Max和CAD安装回滚问题。通过调整AdskLicensingService服务的账户权限,提供四步修复法和安装流程优化策略,帮助用户彻底解决安装难题,提升Autodesk软件的安装成功率。

weixin_30955617的博客 1107

TensorRT-LLM环境配置避坑指南:从安装到实战

本文是一份详尽的TensorRT-LLM环境配置避坑指南。文章重点解析了从Python、CUDA、PyTorch版本选择,到解决mpi4py安装这一核心难题的完整流程,并提供了经过验证的稳定版本组合与实战排错方案,帮助开发者高效部署大语言模型推理优化环境。

a0b1c2d3的专栏 972

PADS Layout差分对布线实战:从规则设置到高速信号优化

本文详细讲解了在PADS Layout中进行差分对布线的完整实战流程。从在Layout中定义差分对网络,到进入Router配置线宽、间距等关键规则,再到布线实战技巧与高速信号完整性优化,系统阐述了如何确保差分信号(如USB、HDMI)的稳定传输,是高速PCB设计的核心技能。

weixin_29274969的博客 518

【VS Code插件开发】通用功能(二)

本篇主要从command(命令)、menus(菜单)、快捷键三个方面讲解,都归于通用功能。

编码世界 1万+

VSCode 配置 Claude Code 插件的 4 步安装法与 3 类常见报错解决方案

介绍 VSCode 中 Claude Code 插件的 4 步可靠安装流程与 3 类高频报错(上下文丢失、认证失败、加载卡死)的根因分析和精准修复方案,聚焦文件上下文捕获机制、请求头注入要求及缓存失效逻辑,提供可验证的命令行操作与日志定位方法。

weixin_28728443的博客 484

Unity 面试篇|(六)数据结构和算法篇 【全面总结 | 持续更新】

先拿10000个数建堆,然后一次添加剩余元素,如果大于堆顶的数(10000中最小的),将这个数替换堆顶,并调整结构使之仍然是一个最小堆,这样遍历完后,堆中的10000个数就是所需的最大的10000个。桶排序是计数排序的升级版。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。这样处理就可以分别在每个文件的10^6个数据中找出最大的10000个数,合并到一起在再找出1000*10000中的最终的结果。

游戏开发小Y的博客 12万+

基于YOLOv11的仓库机器人导航系统设计与实现:Amazon Robotics Challenge解决方案

本文将详细介绍一个基于YOLOv11目标检测算法的仓库机器人导航系统,该系统能够准确识别托盘(pallet)和箱子(box),为机器人提供精确的导航信息。而基于深度学习的视觉导航系统能够实时识别环境中的关键物体,如托盘和箱子,从而实现更智能的路径规划和货物搬运。YOLOv11作为YOLO系列的最新演进版本,在检测精度和速度上都有显著提升,非常适合仓储环境中的实时物体检测任务。YOLOv11在保持实时性的同时,提高了对小物体和密集物体的检测能力,这对仓储环境中的托盘和箱子检测尤为重要。

YOLO 298

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: gcc整数溢出检测 __mulvsi3 __addvdi3
下一篇: c++学习之多重继承指针强转父类

双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —
lax-fly
博客等级 码龄12年 168粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值