我能够获取系统调用调用和内核中的处理执行。但是,还有一些事情不是很清楚。进入swi例程时,内核会将用户模式寄存器保存在堆栈上。问题是:
- 这是谁的堆栈?(因为swi处理和相应的系统调用例程需要堆栈框架来操作)
- 如果它是内核自己的堆栈,那么从哪里获得分配的堆栈? 它会开始使用当前的堆栈吗? 如果是,那么当前可以是任何可能正在内核中执行的进程。 这不会耗尽当前的堆栈吗?
- 如果它在swi处理程序中使用当前正在执行的用户进程的堆栈,则这将是内核现在将要访问的用户地址空间。 这是可能的吗? 因为内核可寻址内存在1GB内(如果在4GB RAM内存系统中使用1:3内核对用户地址空间比率)。