gpt4 book ai didi

Linux内核内存管理,它是否一直使用连续的内存页?

转载 作者:太空宇宙 更新时间:2023-11-04 09:50:36 25 4
gpt4 key购买 nike

linux 内核是否连续分配内存,例如从 malloc ?如果没有大的部分可用,只有较小的部分可以整体工作,Linux 会使用它吗?

最佳答案

我假设在问题中,“连续”指的是物理内存。

您在进程执行时看到的所有地址,例如当您使用 gdbaddr2line 时,都是虚拟地址。到物理内存的映射隐藏在幕后。

malloc 通常不是 系统调用。它是特定于平台的系统调用(例如 mmapbrk)的包装器。当被一个进程调用时,它会导致调用进程的内存被扩展。

例如,malloc(40960) 可以请求 10 页内存,假设页面大小为 4KB。 Memory Management Unit (MMU) 不会立即在物理内存中分配 10 页。相反,新条目(在本例中为 10)被添加到调用进程的地址空间中,也就是说,新条目被添加到该进程的页表中。此虚拟内存将是连续的。

现在假设在稍后的执行过程中,进程尝试使用这个新分配的内存,在那一刻,由于进程触及未分配的内存而调用页面错误。然后,MMU 将在 RAM 中分配一个实际的物理页(4096 个连续字节),更新页表并恢复进程的执行。

所以我们唯一可以确定的是 40960 字节中的 4096 字节(一页)在物理内存 (RAM) 中是连续的,尽管整个 40960 字节(10 页)在虚拟内存中看起来是连续的。 10 个页面中的任何一个或所有页面都可以映射到分散在 RAM 中的页面。

虚拟内存隐藏了这一点,并为进程提供了一个干净、连续的空间。 MMU 使用页表通过将虚拟内存映射到物理内存来提供后端支持。

关于Linux内核内存管理,它是否一直使用连续的内存页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11645513/

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