标签列表为什么Linux中的每个进程都有内核堆栈?linux-kernel3最近,我开始学习Linux,并且有一系列问题要问。

1. 在阅读过程中,我遇到了一个术语“内核栈”,但我不明白为什么Linux内核会为每个进程使用内核栈?

2. 当一个进程正在执行时,为什么esp寄存器的地址指向该进程的内核栈顶部,而不是该进程的用户模式栈顶部的地址?

- Rohit11你对(2)确定吗? - Stephen Kitt1个回答4当一个进程由于系统调用而进入内核模式时,堆栈会从用户模式堆栈切换到内核堆栈。这样做是为了保护内核的完整性,否则进程(例如另一个线程)可能会对堆栈进行一些恶意操作。

每个进程都需要一个单独的内核堆栈来保存进程的状态。在执行任务切换时,即当前进程被置于休眠状态,并调度运行其他进程时,需要保存状态。这时,寄存器的值(包括堆栈指针寄存器)将被恢复,以便要运行的进程可以从其被挂起时的确切位置继续执行。

- Johan Myréen11除此之外,内核栈还用于存储每个线程的thread_info结构体。关于你的第一段,线程甚至不需要拥有有效的用户模式栈,所以内核无法依赖它。 - Stephen Kitt回答链接相关问题30 Linux内核线程真的是内核进程吗?6 为什么内核线程被视为进程?9 每个USB设备都有供应商ID和产品ID吗?© 2023 根据CC BY-SA 4.0 许可证授权京ICP备19056307号-1