【发布时间】:2014-03-24 04:35:01
【问题描述】:
据我了解,每个进程都有一个用户堆栈和内核堆栈。除此之外,ARM 架构中的每种模式都有一个堆栈。所以我想知道不同的堆栈和堆栈指针在 ARM 模式下是如何工作的?还有什么时候会使用这个与进程关联的内核栈?
【问题讨论】:
标签: linux-kernel arm linux-device-driver
据我了解,每个进程都有一个用户堆栈和内核堆栈。除此之外,ARM 架构中的每种模式都有一个堆栈。所以我想知道不同的堆栈和堆栈指针在 ARM 模式下是如何工作的?还有什么时候会使用这个与进程关联的内核栈?
【问题讨论】:
标签: linux-kernel arm linux-device-driver
... 与进程关联的内核堆栈何时使用?
当您进行系统调用时。就像您想获取接口的 IP 地址一样,内核就像任何其他应用程序一样需要一些堆栈来准备您想要的东西。因此,当您切换到系统调用的内核端时,它具有相应的堆栈。
堆栈和堆栈指针在 ARM 模式下的工作方式有何不同?
ARM 定义了一些硬件模式来处理系统的不同输入。例如,您可以突然执行非法指令(或未定义)。在这种情况下,CPU 中的执行进入不同的模式,需要被告知如何继续。由于大多数时候您需要一些堆栈空间才能优雅地处理此问题,因此您需要一个单独的堆栈用于此模式。 ARM 为您提供不同的堆栈寄存器,因此当您切换到不同的硬件模式时,您不会覆盖以前的模式堆栈指针。
【讨论】:
内核堆栈与任何特定的进程无关堆栈从此进程可以访问内核的私有数据结构,这对内核是有害的。
【讨论】: