Linux内核线程地址空间

Zha*_*dze 5 linux kernel memory-management linux-kernel

我读到Linux内核线程没有自己的地址空间,它们的mm字段设置为NULL。我知道所有内核线程共享地址空间,但是它们仍然有自己的堆栈,对吧?他们需要以某种方式描述那个领域,如果没有mm,他们该如何做到这一点?以及其他列表(例如打开的文件),它们将其保存在哪里?另外,将 active_mm 字段设置为上一个用户任务的 mm 有什么意义?提前致谢。

Pau*_* Bu 2

顾名思义,内核线程工作在内核模式下,因此其堆栈由 CPU 寄存器引用(即:ssebp)。

打开的文件引用(与任何其他进程一样)保存在进程描述符字段中struct files_struct *files。它们与内存描述符无关。

对于常规流程,字段mmactive_mm通常是相同的。内核线程不拥有任何内存描述符,因此它们使用先前运行的进程中处于活动状态( ) 的内存描述符,因此,内核线程始终为 null 并且它们使用.active_mmmmactive_mm

希望这可以帮助!