Linux内核线程地址空间

标签 linux memory-management linux-kernel kernel

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

最佳答案

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

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

对于常规流程,字段mmactive_mm 通常是相同的。内核线程不拥有任何内存描述符,因此它们使用先前运行进程的事件 (active_mm),因此,内核线程mm 始终为 null,他们使用 active_mm

希望这对您有所帮助!

关于Linux内核线程地址空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21174222/

相关文章:

linux - .vim/: No such file or directory

linux - 如何处理自写字符设备内核模块中的页域错误?

c - 如何在最小的 linux 内核环境中启动进程?

c - 没有 MMU 的内存保护

linux - 为什么在 kernel/exit.c 中定义的 do_exit() 末尾有一个死循环?

linux - apt-get 代理 : Permission denied

linux - "make -C X"与 "cd X; make"

c - Linux 字符设备驱动程序返回骰子 - 通过 read() 命令访问

iphone - 当您推送新 View 时,UINavigationViewController 中的 Root View 会发生什么?

iphone - iOS 中的内存保留和泄漏