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