gpt4 book ai didi

linux - Linux内核虚拟内存中的直接映射

转载 作者:行者123 更新时间:2023-12-05 07:43:46 25 4
gpt4 key购买 nike

LDD 中所述内核虚拟内存(IA-32 地址空间中的前 1GB)被划分为内核逻辑地址和内核虚拟地址。内核逻辑地址是直接映射的,这意味着您可以通过减去某个(0xC0000000)值来将虚拟地址映射到物理地址。为了移动 btwn 映射,定义了一对宏:__pa()__va()

我的问题是:“这些宏的用例是什么?”以及:“直接映射有什么好处?”

我听说直接映射允许使用更大的页面(例如 4MB),从而提高翻译效率。是否使用页表执行直接映射区域的转换?

最佳答案

众所周知,在32位时代,0~3GB的虚拟内存地址空间属于用户空间;3GB~4GB的虚拟内存地址空间属于内核空间;

在内核中,通常从Normal Zone中分配物理内存,一般在1GB以下;

例如,我们通过kmalloc(100, GFP_KERNEL)分配内存

GFP_KERNEL表示从Zone Normal分配物理内存;

由此,内核可以很容易地将0xC000000(aka,3 GB偏移量)添加到物理内存地址(0 ~ 1 GB),然后物理内存地址直接映射到内核虚拟内存地址(3 ~ 4 GB);

通过这种方式,内核可以更快地访问底层物理内存,只需减去 0xC0000000; (内存访问是通过虚拟地址,需要将虚拟地址映射到物理地址)

关于linux - Linux内核虚拟内存中的直接映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43390947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com