如果对进程进行系统调用并处于内核模式,则创建 2 个线程
a)每个线程的堆栈是如何在内核中创建的?
b)如果其中一个线程切换回用户模式,并且另一个线程保持在内核模式,那么我会丢失父线程分配的内核数据(本地)吗?
c)为什么创建的两个线程有不同的pid?
答案1
经过对内核的大量挖掘,并参与与同一主题相关的项目后,我发现:
a)是的,每个 kthread 都有其堆栈,该堆栈因 8k、4k 等架构而异
b)是的,如果当内核堆栈变空时切换回用户空间,我将失去其中一个线程的本地权限,但是如果我们声明一个全局变量并 exern 该变量将使该线程在另一个线程中可用。另外需要注意的是,整个内核只有1个数据段
c)这两个线程有不同的pid,因为这两个线程是内核上下文中的两个不同的进程,并且它们在ps中用[]表示