linux中的内核映射是什么?

linux中的内核映射是什么?,linux,kernel,Linux,Kernel,什么是内核映射?什么是永久映射和临时映射。在这种情况下,什么是窗口?我阅读了代码和解释,但无法理解这一点完整的答案将非常长,因为详细信息(例如)参考或(第306页-)。这些概念与Linux中地址空间的组织方式有关。首先是内核空间如何映射到用户空间(内核映射到用户空间简化了用户和内核模式之间的切换),其次是物理内存映射到内核空间的方式(因为内核必须管理物理内存) 请注意,这在现代64位体系结构中并不重要。我假设您讨论的是linux内核中的内存映射 内存映射是将内核地址空间直接映射到用户进程地址空间

什么是内核映射?什么是永久映射和临时映射。在这种情况下,什么是窗口?我阅读了代码和解释,但无法理解这一点

完整的答案将非常长,因为详细信息(例如)参考或(第306页-)。这些概念与Linux中地址空间的组织方式有关。首先是内核空间如何映射到用户空间(内核映射到用户空间简化了用户和内核模式之间的切换),其次是物理内存映射到内核空间的方式(因为内核必须管理物理内存)


请注意,这在现代64位体系结构中并不重要。

我假设您讨论的是linux内核中的内存映射

内存映射是将内核地址空间直接映射到用户进程地址空间的过程

地址类型:

  • 用户虚拟地址:这些是用户空间程序看到的常规地址

  • 物理地址:处理器和系统内存之间使用的地址

  • 总线地址:外围总线和内存之间使用的地址。通常,它们与处理器使用的物理地址相同,但情况并非如此
  • 内核逻辑地址:这些地址构成内核的正常地址空间
  • 内核虚拟地址:内核虚拟地址与逻辑地址类似,因为它们是从内核空间地址到物理地址的映射
高内存和低内存:

  • 内存不足:内核空间中存在逻辑地址的内存。在您可能遇到的几乎每个系统上,所有内存都是低内存
  • 高内存:不存在逻辑地址的内存,因为它超出了为内核虚拟地址预留的地址范围。这意味着内核需要开始使用它要访问的物理内存块的临时映射
内核将虚拟地址分成两部分:用户地址空间和内核地址空间。内核的代码和数据结构必须适合这个空间,但是内核地址空间的最大消费者是物理内存的虚拟映射。因此,内核需要它自己的虚拟地址来存放它必须直接接触的任何内存。因此,内核可以处理的最大物理内存量是可以映射到虚拟地址空间内核部分的内存量,减去内核代码使用的空间

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

Ref:


请告诉我,在哪里可以找到上面的映射图;