为linux中的每个进程保留不同的内核堆栈有什么意义?
为什么不保留一个堆栈供内核使用?
答案 0 :(得分:3)
为linux中的每个进程保留不同的内核堆栈有什么意义?
它简化了内核空间中进程的抢占。
为什么不保留一个堆栈供内核使用?
在没有单独筹码的情况下实施先发制人将是一场噩梦。
单独的内核堆栈并不是真正强制要求的。每个架构都可以随意做任何事情。如果在系统调用期间没有执行,那么单个内核堆栈可能有意义。
但是,* nix具有进程,每个进程都可以进行系统调用。但是,Linux允许在write()
等期间抢占一项任务,并安排另一项任务。内核堆栈是正在为每个进程执行的内核工作上下文的快照。
此外,每进程内核堆栈的开销很小。需要thread_info
或从汇编程序获取进程信息的某种机制。这至少是页面分配。通过将内核模式堆栈放在同一位置,一个简单的掩码可以从汇编器获取thread_info
。因此,我们已经需要每进程变量和分配。为什么不将它用作堆栈来存储内核上下文并允许在系统调用期间进行抢占?
答案 1 :(得分:1)
为什么不保留一个堆栈供内核使用?
在这种情况下,一次只能有一个进程/线程进入内核。
基本上,每个线程都有自己的堆栈,并且将用户空间穿过内核边界不会改变这个事实。内核也有自己的内核线程(不属于任何用户空间进程),并且它们都有自己的堆栈。