gpt4 book ai didi

linux - 连续的内存块如何减少内存访问时间?

转载 作者:IT王子 更新时间:2023-10-29 00:43:42 25 4
gpt4 key购买 nike

据说当我们使用 kmalloc() 时,该函数返回连续的物理内存块(如果可用),而使用 vmalloc() 时,我们得到非连续的内存块(如果可用)。

进一步说明,与非连续内存块相比,连续内存块的访问速度更快[Source Link] .

更具体地说,让我们考虑两种情况:

设 1 个物理框架 = 4 KB,页面大小 = 4 KB

案例一: 在我的模块代码中,我使用 kmalloc() 将 20 KB 内存分配给一个 char 数组;调用成功。

案例二:我已经使用 vmalloc() 完成了上述请求并且调用成功了。

我的问题是:

a) 与 vmalloc() 相比,kmalloc() 完成请求所需的时间为何更少?

b) 与非连续分配相比,连续分配如何导致内存的快速访问?

在每种情况下,CPU 生成虚拟地址,提供给 MMU(如果 TLB 未命中),执行页面遍历,识别帧号,然后将虚拟地址转换为物理地址。地址是连续的还是不连续的有什么关系?

最佳答案

对于 kmalloc,整个物理 RAM 已经以偏移量1 1:1 映射,即物理 RAM 地址 N 映射到虚拟地址 N+PAGE_OFFSET。这使得使用 kmalloc 的分配比使用 vmalloc 更简单,因为 vmalloc 必须找到空闲页面并设置页表,以便将页面映射到连续的地址 block 。

访问 kmalloc 与 vmalloc 分配的内存时,访问时间没有差异,除了您链接到的文档中提到的页面错误。

1 物理内存多于为内核保留的虚拟地址空间的系统除外。

关于linux - 连续的内存块如何减少内存访问时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43865379/

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