最近开始学习linux,有一系列的问题,想请教一下。
在阅读时,我遇到了一个术语“内核堆栈”,我无法理解为什么 Linux 内核为每个进程使用内核堆栈?
当一个进程正在执行时,为什么esp寄存器有
该进程的内核堆栈顶部的地址,而为什么没有相应进程的用户模式堆栈顶部的地址?
答案1
当进程由于系统调用而进入内核模式时,堆栈将从用户模式堆栈切换到内核堆栈。这样做是为了保持内核的完整性,否则进程(例如另一个线程)可能会对堆栈做一些讨厌的事情。
每个进程都需要一个单独的内核栈来保存进程的状态。需要保存状态,以防执行任务切换,即当前进程进入睡眠状态,而其他进程计划运行。发生这种情况时,寄存器值(包括堆栈指针寄存器)将被恢复,以便要运行的进程可以从挂起时的确切位置继续运行。