Linux如何记住其内核堆栈指针?

时间:2015-02-26 04:23:47

标签: linux linux-kernel stack kernel interrupt

我知道Linux中有两种类型的堆栈:每个用户线程的用户堆栈和内核线程的内核堆栈(但是1个进程)。中断,更准确地说是中断过程,是这两种模式(内核(0)和用户(3))之间的桥梁。中断向量表让处理器在PC寄存器中加载正确的指令地址,但是当它在内核模式下切换时,堆栈指针寄存器是如何改变的?子例程是否在第一条指令之前指示内核堆栈的位置?或者处理器是否使用两个堆栈指针寄存器(我真的怀疑它)?

"如何从中断返回"知道在哪里归来? PCB是否保存在内核堆栈或其他地方?

请不要犹豫,纠正我所说的不是真的。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:2)

Linux内核中的内核模式堆栈存储在task_struct->stack中。它来自何处以及如何来自完全取决于平台。有些平台可能没有像上面那样保存它。但是,您可以使用task_stack_page()来查找堆栈。

进入中断处理程序时,PC存储在内核堆栈中。从中断返回时,此PC从内核堆栈加载回来。