Linux 内核中的进程如何在内核模式下为不同线程分配单独的堆栈?

Linux 内核中的进程如何在内核模式下为不同线程分配单独的堆栈?

如果对进程进行系统调用并处于内核模式,则创建 2 个线程

a)每个线程的堆栈是如何在内核中创建的?

b)如果其中一个线程切换回用户模式,并且另一个线程保持在内核模式,那么我会丢失父线程分配的内核数据(本地)吗?

c)为什么创建的两个线程有​​不同的pid?

答案1

经过对内核的大量挖掘,并参与与同一主题相关的项目后,我发现:

a)是的,每个 kthread 都有其堆栈,该堆栈因 8k、4k 等架构而异

b)是的,如果当内核堆栈变空时切换回用户空间,我将失去其中一个线程的本地权限,但是如果我们声明一个全局变量并 exern 该变量将使该线程在另一个线程中可用。另外需要注意的是,整个内核只有1个数据段

c)这两个线程有​​不同的pid,因为这两个线程是内核上下文中的两个不同的进程,并且它们在ps中用[]表示

相关内容