Linux系统的中断完整流程

基本术语

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

总流程

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

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

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

4、先保护现场,然后再执行逻辑代码

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

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

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

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

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

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

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

4、先保护现场,然后再执行逻辑代码

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

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

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

最后

注意

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

参考:

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

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

3、GPT

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值