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

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

“从中断返回”如何知道返回的位置? PCB是保存在内核堆栈还是其他地方?

请不要犹豫,纠正它我所说的真实不是.

非常感谢你的帮助.

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

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

点赞