gpt4 book ai didi

x86 - 多级分页如何节省内存?

转载 作者:行者123 更新时间:2023-12-04 21:38:03 25 4
gpt4 key购买 nike

我对多级分页方案的概念感到困惑。

让一个 32 位虚拟地址和一个页面为 4 KiB,那么我将有 220 个页面/页表条目。
设一个页表条目的大小为 4 个字节,因此页表的大小为 220 * 4 个字节。

如果我把虚拟地址分成10 | 10 | 12 ,那么我的理解是:

我有一个页表目录,它由虚拟地址的最高有效 10 位索引,因此它有 210 个条目并指向 210 个不同的页表(即在第二级)。
每个第 2 级表再次可以由(中间)10 位索引,相应的条目将保存实际的页框编号。

我的问题是:

  • 这是正确的吗?
  • 页目录和页表的大小是否相同?
  • 多级分页方案如何节省内存?
  • 最佳答案

    是的,都是对的。只有一级页表和每个条目 4 个字节,页表将有

    4 GiB (maximal physical address space) / 4 KiB (size of one page frame) * 4 Bytes = 4 MiB

    访问物理地址就像
    (page table entry)->(offset)

    为了减小这个大页表的大小,采用了多级分页方案,将大小减小到
    2^10 Bytes * 4 + 2^10 Bytes * 4 = 8 KiB

    并将虚拟地址的分辨率更改为物理地址以
    (page directory entry)->(page table entry)->(offset)

    这节省了一些字节 (4 MiB - 8 KiB),但有一个缺点:需要一个额外的内存引用来将虚拟地址转换为物理地址。在这里,TLB(Translation Lookaside Buffer)开始发挥作用。它是(与 L1 缓存相比)小型缓存,并在硬件中存储虚拟地址与物理地址的关联。这里使用了特殊的硬件,类似于哈希表(C++ 标准库中的 std::unordered_map),不同之处在于它是在硬件中实现的,因此速度更快。

    这是 x86 体系结构中采用的默认 32 位分页方案。 x86-64, PSE , PAE ,通过更多级别的页表、更大的页面大小(2 MiB、4 MiB,甚至 1 GiB)和更大的物理地址空间(PAE 最多 64 GiB)来稍微改变机制,从而导致更多级别的页表. x86-64 的虚拟地址大小为 48 位,导致 巨大的每个进程的地址空间(几个 TiB)。

    请注意页面和页框之间的区别。页是数据,页框是物理内存中页面被映射的区域。那里 系统在哪里 page's size = x * page frame's size ,其中 x > 1 .

    关于x86 - 多级分页如何节省内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33259119/

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