本文将从如下几个方面介绍IST(Interrupt Stack Table):

  1. 何为IST
  2. IST的motivaion

何为IST

通过阅读浅谈tss可以,当线程发生fault 时,会切换到线程的内核栈来调用handler。
但是却可能存在如下情况:内核栈溢出导致double fault时,不换栈大概率会导致triple fault。triple fault会导致系统重启。
IST(Interrupt Stack Table),顾名思义,当handle特定的interrupt(或fault)时,会运行在特定的stack中,而非内核栈中。
这样IST可以确保double fault的handler运行在一个good stack中。

IST的motivation

The motivation for the IST mechanism is to provide a method for specific interrupts (such as NMI, double-fault, and machine-check) to always execute on a known good stack.

详情请参考sdm vol3 6.14.5 Interrupt Stack Table。


参考资料:

  1. 解析因内核栈溢出导致的 “DOUBLE FAULT” 蓝屏
  2. Triple fault
  3. Kernel stacks on x86-64 bit