我读到linux内核线程没有自己的地址空间,他们的mm字段设置为NULL。我知道所有内核线程共享地址空间,但是,它们有自己的堆栈吗?他们需要以某种方式描述那个领域,没有mm,他们如何做到这一点?和其他列表如打开文件,他们在哪里保留它?另外,将active_mm字段设置为以前的用户任务的mm是什么意思?提前谢谢。
答案 0 :(得分:1)
顾名思义,内核线程在内核模式下工作,因此其堆栈由CPU寄存器引用(即:ss
,ebp
)。
打开文件引用(与任何其他进程一样)保存在进程描述符字段struct files_struct *files
中。它们与内存描述符无关。
对于常规流程,字段mm
和active_mm
通常是相同的。内核线程不拥有任何内存描述符,因此它们使用先前运行的进程的 active (active_mm
),因此,内核线程mm
始终为null他们使用active_mm
。
希望这有帮助!