如何在ARM体系结构中使用不同处理器模式的内核堆栈?

时间:2014-03-24 04:35:02

标签: linux-kernel arm linux-device-driver

据我所知,每个进程都有一个用户堆栈和内核堆栈。除此之外,ARM架构中的每个模式都有一个堆栈。所以我想知道不同的堆栈和堆栈指针在ARM模式下是如何工作的?此外,当使用与该进程关联的内核堆栈时?

2 个答案:

答案 0 :(得分:4)

  
    

...何时使用与该进程关联的内核堆栈?

  

进行系统调用时。就像你想获得一个接口的IP地址一样,内核就像任何其他应用程序需要一些堆栈来准备你想要的东西。因此,当您切换到系统调用的内核端时,它具有相应的堆栈。

  
    

不同的堆栈和堆栈指针在ARM模式下如何工作?

  

ARM定义了一些硬件模式来处理系统的不同输入。例如,你无处可执行非法指令(或未定义)。在这种情况下,CPU中的执行进入不同的模式,需要告知如何继续。由于大多数情况下您需要一些堆栈空间才能正常处理此问题,因此您需要为此模式使用单独的堆栈。 ARM为您提供了不同的堆栈寄存器,因此当您切换到不同的HW模式时,不会覆盖以前的模式堆栈指针。

答案 1 :(得分:0)

内核堆栈与内核使用的任何特定进程没有关联,以跟踪它自己的函数和由processes调用的系统调用。因为系统调用处理内核数据结构,它的堆栈无法在进程上维护从那时起,进程可以访问对内核有害的内核私有数据结构。