请阅读【ARMv8/v9 ARM64 System Exception】
上篇文章:ARMv8/v9 异常模型入门及渐进 11 - Linux 中断上下文判断 及 in_interrupt 跟踪分析
下篇文章:ARMv8/v9 异常模型入门及渐进 13 – ARM Linux 系统调用流程分析
1.1 Linux 进程/线程栈
每个进程被创建的时候,在生成进程描述符 task_struct 的同时,会生成两个栈:
- 一个是用户栈,位于用户地址空间;位于用户地址空间靠近末端的部分。用户态进程所用的栈,是在进程线性地址空间中;
- 一个是内核栈,位于内核空间,实际上就位于当前任务的,
task_struct
结构所在页面的末端。
进程内核栈在 kernel 中的定义是:
union thread_union