Linux 内核是否为其数据结构(页表、描述符等)使用虚拟内存?进一步来说:
内核空间地址是否在 MMU 中进行了转换(页表遍历)?
内核内存可以被换出吗?
对内核数据结构的内存访问会导致页面错误吗?
linux和其他unix在这方面有什么区别吗?
答案1
内核空间地址是否在 MMU 中进行了转换(页表遍历)?
是的,所有地址都在MMU中进行转换;看MMU 是在 Unix/Linux 内核内部吗?或者只是在有自己的内存的硬件设备中?了解详情。
内核内存可以被换出吗?
一个内核可以理论上是可以设计成可以更换的。实际上这很困难;尤其是 Linux 内核不能被换出。然而,内核中的某些代码路径确实必须处理页面调入;看当内核映射到与进程本身相同的虚拟地址空间时,为什么需要“copy_from_user()”和“copy_to_user()”?例如。
对内核数据结构的内存访问会导致页面错误吗?
在大多数(如果不是全部)情况下,如果发生这种情况,将会导致内核恐慌。所以,是的,这可能会发生,但这将是一个错误。
linux和其他unix在这方面有什么区别吗?
据我所知,其他(当前)Unix 风格的实现是类似的。早期的 Unix 不支持基于虚拟内存的交换(IE无论如何,调出任意页面)所以这不是一个问题。