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

Linux如何记住它的内核堆栈指针?,linux,linux-kernel,stack,kernel,interrupt,Linux,Linux Kernel,Stack,Kernel,Interrupt,我知道Linux中有两种类型的堆栈:每个用户线程的用户堆栈和内核线程的内核堆栈(但只有一个进程)。中断,更准确地说,中断过程,是这两种模式,内核(0)和用户(3)之间的桥梁。中断向量表允许处理器在PC寄存器中加载正确的指令地址,但在内核模式下切换时堆栈指针寄存器是如何更改的?子例程是否指示内核堆栈在其第一条指令之前的位置?或者处理器使用两个堆栈指针寄存器(我真的很怀疑) “中断返回”如何知道返回的位置?PCB是保存在内核堆栈中还是其他地方 请不要犹豫,纠正它,我说的一切都是假的 非常感谢您的帮助

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

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

请不要犹豫,纠正它,我说的一切都是假的


非常感谢您的帮助。

Linux内核中的内核模式堆栈存储在
task\u struct->stack
中。它的来源和方式完全取决于平台。有些平台可能不会像上面那样保存它。但是,您可以使用
task\u stack\u page()
查找堆栈

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