关于栈(STACK)的一点思考

从OS / VM角度谈一谈栈的应用

系统中一个栈代表一个执行流,那么到底有多少种栈

首先用户空间,也就是进程至少有一个用户栈(每个线程有一个独立的用户栈)

中断、异常处理程序有独立的调用栈

系统调用有独立的调用栈 – 进程(线程)的内核栈

信号处理程序的执行肯定是在用户空间,有可能会有一个独立的栈去运行,也有可能直接使用进程的用户栈。

信号处理程序虽然是异步的,但和正常执行流是不可能并发(更不可能并行)的,其执行顺序为:

用户态程序 → 中断返回检查是否有挂起信号 → 用户态信号处理函数 → 返回内核态 → 恢复用户态现场寄存器。所以直接使用用户栈也是没问题的。