首页 > 解决方案 > linux中的内核映射是什么?

问题描述

什么是内核映射?什么是永久映射和临时映射。在这种情况下,什么是窗口?我浏览了代码和对此的解释,但无法理解

标签: linuxkernel

解决方案


我假设您正在谈论 linux 内核中的内存映射。

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

地址类型: 在此处输入图像描述

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

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

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

高内存和低内存:

  • 低内存:内核空间中存在逻辑地址的内存。在您可能遇到的几乎每个系统上,所有内存都是低内存。
  • 高内存:不存在逻辑地址的内存,因为它超出了为内核虚拟地址预留的地址范围。这意味着内核需要开始使用它想要访问的物理内存的临时映射。

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

在此处输入图像描述

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

参考:


推荐阅读