中断处理时的堆栈切换
时间:2006-06-06 来源:chouqiu
x86中进入中断时如果需要切换堆栈(由于运行级的差别), 则从TSS中装入新运行级的栈指针, 并将原栈指针暂存到TSS中, 在进入新栈后, 将原栈指针保存到新栈底部, 作为以后切回原运行级的依据. 这一过程主要指从用户栈向系统栈的切换, 反向则不须保存系统栈指针, 因为一旦返回用户态, 系统栈就被清空, 其栈底也可通过struct task_struct求出, 所以不需要保存. 同时, 利用这一点, 内核在进行进程切换时在系统栈底部保存了完整的用户态现场, 代替了TSS的作用, 但需要注意的是, 对x86CPU, 每次进行不同运行级的切换时硬件会自动从当前TSS中取新运行级的栈指针, 为了满足这点小小的要求, 内核在进行任务调度时会将新任务的系统栈指针更新到全局TSS中.
相关阅读 更多 +