日期:2014-05-16  浏览次数:20747 次

cpu是怎么找到中断程序的堆栈的?
各位大师,请问一下中断程序的堆栈信息,如SS和SP存放在程序的什么地方?

------解决方案--------------------
中断程序用的就是内核的堆栈
------解决方案--------------------
中断程序所占有的堆栈空间不管有没有OS,都可以在初始化的时候分配好.一般CPU会提供多种可能的执行模式,初始化的时候只要指定在中断模式下堆栈的栈顶或栈底(根据是设定向上生长还是向下生长来定),当CPU产生中断了,这快堆栈空间就归中断处理程序用了.
------解决方案--------------------
对于中断处理程序使用的堆栈问题是这样的:
处理器会通过一个任务状态寄存器tss,在任务切换时来确定一些任务状态信息。程序通过中断将控制权转交给中断处理程序时,是低特权级向高特权级的转移。这种情况下必须通过调用门或者中断门来转移,而目标程序的堆栈,处理器会从tss中获取。tss中必须事先设置好相应特权级程序使用的堆栈的ss和esp的值。控制权转交给中断处理程序时,处理器会自动从tss中取出相应的ss和esp的值加载ss和esp寄存器。

表达能力不行,可能描述得不够清楚。具体可以参考intel80286芯片手册的关于tss任务状态段的章节