Linux的中断完整流程,以及软硬中断

本文详细介绍了Linux系统的中断处理流程,包括从硬件产生中断信号到操作系统处理中断的全过程。解释了中断控制器如何接收信号并通知CPU,以及CPU如何通过中断向量表跳转到相应的中断服务程序。还讨论了软中断和硬中断的区别及作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、基本术语

二、总流程

三、软中断和硬中断

四、补充

参考


一、基本术语

  • 中断源:引起中断的事件称为中断源
  • 中断号:唯一标识每个特定的中断类型
  • 中断向量:中断服务程序的入口地址(就是函数)
  • 中断向量表:存储着中断向量的表。就是一个函数指针数组,下标是中断号,值是函数指针
  • 断点:被中断打断的地点
  • 保护现场:保存程序当前断点的寄存器和相关数据

二、总流程

  1. 中断控制器接收中断信号、识别中断号
  2. 控制器通知CPU,CPU关中断、保存断点和识别中断源
  3. 根据中断向量表跳转到对应的中断服务程序
  4. 先保护现场,然后再执行服务程序
  5. 恢复现场,返回断点,重新打开中断

1、中断控制器接收中断信号、识别中断号

每个能产生中断的外设会连接到中断控制器的一条中断信号线,控制器会监视信号线(监视电平)。外设产生中断后控制器识别到对应中断号的信号线有信号,就确定了中断号

2、控制器通知CPU,CPU关中断、保存断点和识别中断源

控制器通知CPU发生了中断,CPU关闭中断,保存断点程序计数器和识别中断源。只有一个中断请求时,CPU直接获取中断号。但是有多个同时的中断请求时,CPU需要判断并获取优先级最高的中断号

3、根据中断向量表跳转到对应的中断服务程序

CPU根据中断号在中断向量表中找到对应的中断处理入口并跳转。进入中断服务函数后会关闭中断,防止中断嵌套问题。此外我问了一下GPT,在关了中断执行中断服务函数的过程中,如果出现异常要怎么跳转到异常服务函数。它的回答是中断服务函数执行期间会使用专门的异常堆栈来处理异常,确保异常处理程序能正确执行

4、先保护现场,然后再执行服务程序

进入中断服务函数后,要保护现场。就是把栈(就是把当前栈指针压栈)和一些寄存器(比如状态寄存器和通用寄存器)保存起来,保证中断服务程序结束后能回到原来的状态。

5、恢复现场,返回断点,重新打开中断

执行完逻辑代码后,恢复现场然后返回断点并打开中断

三、软中断和硬中断

Linux中断分为软中断和硬中断。硬中断是由硬件产生的中断,是短时间的、快速的操作。由于硬中断只能快速运行,所以就需要有软中断的机制,来完成硬中断做不了的、需要较长运行时间的任务。软中断通常在硬中断结束后开始,会将任务放入任务队列,在CPU没那么紧张时进行处理。

软中断分为两种,一种是简单的延时处理,就是在硬中断之后紧跟着进行处理,不会被其他进程中断。一种是工作队列,这种其实就和进程差不多,会跟其他进程一起参与进程的调度

四、补充

这篇文章讲的是Linux系统的中断流程,和单片机裸机的中断流程有一些区别。比如说Linux是不支持中断嵌套的,而单片机可以中断嵌套。所以单片机的中断流程会有更多开关中断操作、还需要手动设置中断屏蔽字。

参考

1、【中断】你对中断究竟有多了解?试着把中断的触发流程整理了一遍... (qq.com)

2、嵌入式基础知识-中断处理过程 - 知乎 (zhihu.com)

3、GPT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值