Linux 内核是否使用虚拟内存(用于其数据)?

Lui*_*uis 9 linux kernel virtual-memory

Linux 内核是否为其数据结构(页表、描述符等)使用虚拟内存?进一步来说:

内核空间地址是否在 MMU 中进行了转换(页表遍历)?

内核内存可以被换出吗?

对内核数据结构的内存访问会导致页面错误吗?

linux和其他unix在这方面有什么区别吗?

Ste*_*itt 17

\n

内核空间地址是否在 MMU 中进行了转换(页表遍历)?

\n
\n

是的,所有地址都在MMU中进行转换;请参阅MMU 位于 Unix/Linux 内核内部吗?或者只是在有自己的内存的硬件设备中?了解详情。

\n
\n

内核内存可以被换出吗?

\n
\n

理论上,内核可以被设计成可以被交换。实际上,这很困难;特别是 Linux 内核不能被换出\xe2\x80\x99。然而,内核中的某些代码路径确实必须处理页面调入;当内核映射到与进程本身相同的虚拟地址空间时,为什么需要“copy_from_user()”和“copy_to_user()”?例如。

\n
\n

对内核数据结构的内存访问会导致页面错误吗?

\n
\n

在大多数(如果不是全部)情况下,如果发生这种情况,将会导致内核恐慌。所以,是的,这可能会发生,但这将是一个错误。

\n
\n

linux和其他unix在这方面有什么区别吗?

\n
\n

据我\xe2\x80\x99m 所知,其他(当前)Unix 风格的实现是类似的。无论如何,早期的 Unix 不支持基于虚拟内存的交换(调出任意页面),因此这不是一个问题。

\n