操作系统 – 内核堆栈和用户堆栈有什么区别?

在同一程序中需要使用两个不同的堆栈?陷阱如何将当前堆栈的程序从用户堆栈更改为内核堆栈?完成系统调用后怎么回到用户堆栈?

每个进程都有一个内核和用户堆栈?

每个CPU有一个“内核栈”.每个进程都有一个“用户堆栈”,尽管每个线程都有自己的堆栈,包括用户线程和内核线程.

如何“捕获更改堆栈”实际上相当简单.

由于中断,CPU会改变进程或“模式”.中断可能由于许多不同的原因发生 – 故障发生(如错误或页面故障)或物理硬件中断(例如来自设备) – 或定时器中断(例如,当进程使用时发生所有这些都分配了CPU时间“).

无论哪种方式 – 当调用此中断时,CPU寄存器都保存在堆栈中 – 所有寄存器 – 包括堆栈指针本身.

通常,将调用“调度程序”.调度程序然后选择另一个进程来运行 – 恢复其所有已保存的寄存器,包括堆栈指针,并继续执行从存储在返回地址指针中的位置.

这被称为“上下文切换”.

我简化了一些事情,如内存管理上下文的保存和恢复,但这是想法.它只是保存和恢复寄存器以响应中断 – 包括“堆栈指针”寄存器.

相关文章
相关标签/搜索