You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

x86_64架构硬件中断所用栈及中断栈切换机制相关问询

问题1解答

你提到的硬件自动保存上下文用的interrupt stack,绝大多数场景下就是Linux内核每CPU专属的hardirq_stack,只有NMI、双异常(double fault)等特殊中断会使用x86_64架构提供的IST(中断栈表)中单独配置的专用栈,不走通用hardirq_stack。

关于softirq共用栈的一致性保证逻辑:

  • 常规场景下softirq是在硬中断处理完成、返回上下文之前执行的,此时本身就运行在当前CPU的hardirq_stack上。如果此时触发新的硬件中断,CPU会直接在当前hardirq_stack上按栈结构向下压入新的中断上下文,遵循后进先出的嵌套规则,嵌套中断全部处理完成后逐层弹栈,不会出现栈数据混乱。
  • 当softirq积压过多时,内核会唤醒ksoftirqd内核线程处理剩余softirq,此时softirq运行在ksoftirqd的进程栈上,这种情况下触发硬件中断,CPU会自动从进程栈切换到hardirq_stack处理中断,处理完成后再切回原进程栈,完全不会互相干扰。

问题2解答

x86_64架构下硬件触发中断时,只会自动把SS、RSP、RFLAGS、CS、RIP以及部分中断带有的错误码压入栈中,其余通用寄存器、段寄存器等上下文的保存是由内核中断入口的汇编代码实现的:

  • Linux内核在entry_64.S的中断入口逻辑中,会按pt_regs结构体的固定格式,把所有通用寄存器、段寄存器依次手动压入栈中,后续的C语言中断处理函数可以直接通过pt_regs结构体访问所有寄存器状态。
  • 中断处理完成返回中断前上下文时,汇编代码会先把手动压入的寄存器依次弹出恢复,最后执行iret指令弹出硬件自动保存的上下文,完成整个寄存器状态的恢复。

内容的提问来源于stack exchange,提问作者byWind

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:24:03