据我了解,每个进程都有一个用户堆栈和内核堆栈。除此之外,ARM 架构中的每种模式都有一个堆栈。所以我想知道不同的堆栈和堆栈指针在 ARM 模式下如何工作?另外,何时会使用与进程关联的内核堆栈?
最佳答案
block 引用>... when this kernel stack associated with the process will be used ?
当您进行系统调用时。就像你想获取接口(interface)的 IP 地址一样,内核就像任何其他应用程序一样需要一些堆栈来准备你想要的东西。所以当你切换到系统调用的内核端时,它有一个相应的堆栈。
block 引用>How different stack and stack pointer works in ARM modes?
ARM 定义了几种硬件模式来处理系统的不同输入。例如,您可能会突然执行非法指令(或未定义的指令)。在这种情况下,CPU 中的执行会进入不同的模式,并且需要被告知如何继续。由于大多数时候您需要一些堆栈空间才能优雅地处理此问题,因此您需要为此模式提供单独的堆栈。 ARM 为您提供了不同的堆栈寄存器,因此当您切换到不同的硬件模式时,您不会覆盖以前模式的堆栈指针。
关于linux-kernel - ARM架构中不同处理器模式下如何使用内核堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22601165/