Linux中的内核映射是什么?

时间:2018-11-14 13:29:47

标签: linux kernel

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

2 个答案:

答案 0 :(得分:1)

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

请注意,在现代64位体系结构中这无关紧要。

答案 1 :(得分:1)

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

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

地址类型: enter image description here

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

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

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

高低内存:

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

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

enter image description here

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

参考: