繁体   English   中英

Linux中的内核映射是什么?

[英]what is kernel mapping in linux?

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

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

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

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

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

地址类型: 在此处输入图片说明

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

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

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

高低内存:

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

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

在此处输入图片说明

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

参考:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM