据我所知,每个进程都有一个用户堆栈和内核堆栈。除此之外,ARM架构中的每个模式都有一个堆栈。所以我想知道不同的堆栈和堆栈指针在ARM模式下是如何工作的?此外,当使用与该进程关联的内核堆栈时?
答案 0 :(得分:4)
...何时使用与该进程关联的内核堆栈?
进行系统调用时。就像你想获得一个接口的IP地址一样,内核就像任何其他应用程序需要一些堆栈来准备你想要的东西。因此,当您切换到系统调用的内核端时,它具有相应的堆栈。
不同的堆栈和堆栈指针在ARM模式下如何工作?
ARM定义了一些硬件模式来处理系统的不同输入。例如,你无处可执行非法指令(或未定义)。在这种情况下,CPU中的执行进入不同的模式,需要告知如何继续。由于大多数情况下您需要一些堆栈空间才能正常处理此问题,因此您需要为此模式使用单独的堆栈。 ARM为您提供了不同的堆栈寄存器,因此当您切换到不同的HW模式时,不会覆盖以前的模式堆栈指针。
答案 1 :(得分:0)
内核堆栈与内核使用的任何特定进程没有关联,以跟踪它自己的函数和由processes调用的系统调用。因为系统调用处理内核数据结构,它的堆栈无法在进程上维护从那时起,进程可以访问对内核有害的内核私有数据结构。