什么是内核映射?什么是永久映射和临时映射。在这种情况下,窗口是什么?我经历了代码和对此的解释,但对此不理解
答案 0 :(得分:1)
完整答案将非常漫长,因为详细信息(例如)指的是Linux Kernel Addressing或Understanding the Linux Kernel(第306-页)。这些概念与Linux中地址空间的组织方式有关。首先,如何将内核空间映射到用户空间(将内核映射到用户空间简化了用户和内核模式之间的切换),其次,将物理内存映射到内核空间的方式(因为内核必须管理物理内存)。
请注意,在现代64位体系结构中这无关紧要。
答案 1 :(得分:1)
我假设您正在谈论Linux内核中的内存映射。
内存映射是将内核地址空间直接映射到用户进程的地址空间的过程。
用户虚拟地址:这些是用户空间程序看到的常规地址
物理地址:处理器和系统内存之间使用的地址。
高低内存:
内核将虚拟地址分为两个部分:用户地址空间和内核地址空间。内核的代码和数据结构必须适合该空间,但是内核地址空间的最大消耗者是物理内存的虚拟映射。因此,内核需要它必须直接接触的任何内存的虚拟地址。因此,内核可以处理的最大物理内存量就是可以映射到虚拟地址空间的内核部分的数量,减去内核代码使用的空间。
临时映射::当必须创建映射但当前上下文无法休眠时,内核会提供临时映射(也称为原子映射)。内核可以原子地将高内存页面映射到其中一个保留映射(可以保留临时映射)中。因此,可以在无法睡眠的地方(例如中断处理程序)使用临时映射,因为获取映射不会阻塞。
参考: