我读到 linux 内核线程没有自己的地址空间,它们的 mm 字段设置为 NULL。我知道所有内核线程共享地址空间,但它们仍然有自己的堆栈,对吧?他们需要以某种方式描述那个领域,没有 mm,他们该怎么做?和其他列表,如打开的文件,他们把它放在哪里?另外,将 active_mm 字段设置为上一个用户任务的 mm 有什么意义?提前致谢。
最佳答案
顾名思义,内核线程在内核模式下工作,因此它的堆栈由 CPU 寄存器引用(即:ss
、ebp
)。
打开文件引用(与任何其他进程一样)保存在进程描述符字段 struct files_struct *files
中。它们与内存描述符无关。
对于常规流程,字段mm
和active_mm
通常是相同的。内核线程不拥有任何内存描述符,因此它们使用先前运行进程的事件 (active_mm
),因此,内核线程mm
始终为 null,他们使用 active_mm
。
希望这对您有所帮助!
关于Linux内核线程地址空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21174222/