【发布时间】:2018-02-23 04:57:52
【问题描述】:
linux 内核栈在每个进程上下文中是否位于相同的虚拟地址?
在回答之前,请注意我已经指定了内核堆栈而不是用户空间堆栈。
【问题讨论】:
-
每个内核线程都有自己的堆栈。由于整个内核共享相同的虚拟地址空间,因此不同线程的内核堆栈应该不同。
-
假设我有一个单线程 CPU。我推断所有进程内核堆栈都映射到相同的虚拟地址。同意吗?
-
不懂你。让内核线程T1有栈S1,线程T2有栈S2。如果您谈论不同线程的单个堆栈,那么是的,堆栈S1对于T1和T2。如果您谈论他们自己线程的堆栈地址,那么S1的地址与S2之一不同。
-
好的,我尝试重新阐述。单独生活线程并考虑在单个核心 cpu 中运行的两个进程(任务)(没有多线程,也没有 SMP)。它们在两个不同的物理地址有两个不同的物理堆栈。我想知道物理地址是否映射到相同的虚拟地址。
-
I was wondering if the physical addresses are mapped to the same virtual address.- 不。正如我在第一条评论中解释的那样,所有内核线程都存在于相同的虚拟地址空间中。在那个空间内,不同的物理地址不能映射到同一个虚拟地址。根本不可能创建这样的地址空间。