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