在Linux中,什么是内核映射?

3
什么是内核映射?什么是永久映射和临时映射?在这个上下文中,窗口是什么意思?我已经查看了代码和说明,但是无法理解其中的含义。
2个回答

4
我假设您谈论的是 Linux 内核中的内存映射。 内存映射是将内核地址空间直接映射到用户进程的地址空间的过程。 地址类型:enter image description here
  • 用户虚拟地址:这些是用户空间程序看到的常规地址。
  • 物理地址:处理器和系统内存之间使用的地址。
  • 总线地址:外围总线和内存之间使用的地址。它们通常与处理器使用的物理地址相同,但不一定如此。
  • 内核逻辑地址:这些组成了内核的正常地址空间。
  • 内核虚拟地址:内核虚拟地址类似于逻辑地址,因为它们是从内核空间地址映射到物理地址的。
高低内存:
  • 低内存:在内核空间中存在逻辑地址的内存。在几乎所有你可能遇到的系统中,所有的内存都是低内存。
  • 高内存:逻辑地址不存在的内存,因为它超出了为内核虚拟地址保留的地址范围。这意味着内核需要开始使用临时映射来访问它想要访问的物理内存片段。

内核将虚拟地址分成两部分用户地址空间和内核地址空间。内核的代码和数据结构必须适合该空间,但内核地址空间最大的消耗者是用于物理内存的虚拟映射。因此,内核需要自己的虚拟地址来直接访问任何内存。因此,内核可以处理的最大物理内存量是可以映射到内核虚拟地址空间的内存量,减去内核代码使用的空间。

enter image description here

临时映射:当必须创建映射但当前上下文无法休眠时,内核提供临时映射(也称为原子映射)。内核可以将高内存页面原子地映射到保留映射之一中(可以容纳临时映射)。因此,在不能休眠的位置(例如中断处理程序)可以使用临时映射,因为获取映射永远不会阻塞。 参考文献:

请告诉我,我们在哪里可以找到上述映射图。 - Ganapathi Bhat

2
完整的答案会很长,详情请参考(例如)Linux内核寻址理解Linux内核(第306页-)。这些概念涉及到Linux中地址空间的组织方式。首先是内核空间如何映射到用户空间(内核映射到用户空间简化了在用户模式和内核模式之间的切换),其次是物理内存如何映射到内核空间(因为内核必须管理物理内存)。

请注意,在现代64位体系结构中无需担心这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接