gpt4 book ai didi

memory-management - 如何使用倒排页表节省空间?

转载 作者:行者123 更新时间:2023-12-04 07:50:48 27 4
gpt4 key购买 nike

如果我们使用倒排页表将虚拟地址映射到物理地址,为什么要节省内存?例如,如果我们有两个进程,它们都有 4 个页面,我们将在两个不同的表中有 8 个条目,从虚拟地址指向物理地址:

Process 1:
[0] = 1
[1] = 5
[2] = 63
[3] = 0

Process 2:
[20] = 14
[21] = 55
[22] = 11
[25] = 9

如果我们使用倒页表,我们将只有一个大表指向相反的方向。但在大小上它们相等。
2) Inverted page table

[0] = <p1 | 3>
[1] = <p1 | 0>
[5] = <p1 | 1>
[9] = <p2 | 25>
[11]= <p2 | 22>
[14]= <p2 | 20>
[55]= <p2 | 21>
[63]= <p1 | 2>

最佳答案

第一种情况下的页表是每个进程数据结构 的 。每个进程都有一个指向它自己的页表的指针,这个指针在进程被调度时被加载到 %CR3 寄存器中。它也在上下文中被保存与其他寄存器一起切换。

但是反向哈希表是一个 全局数据结构 。使用这种技术的操作系统将使用一些锁定机制在给定的时间点只允许访问 1 个进程。(想象一下 2 个内核上的 2 个进程同时访问一个全局数据)。

假设每个进程 ram 为 4GB,页面大小为 4096,在第一种情况下,每个进程有 4GB/4096 ,(其页表中的条目数 * 每个页表条目的大小),所有这些都会占用空间,对于每个进程创建/ fork 。用于映射虚拟到物理的总内存是所有进程的页表大小的总和。这是更简单的方法,因为在每次上下文切换时,您只会更改一个指针,没有什么复杂的。

在第二种情况下,您将有一个只有 4GB/4096 个条目的单个表,因此节省了空间,但内存管理变得复杂,因为这是一个全局数据,您必须在每个条目中添加更多信息,告诉当前所有者如何是(如您所示)等。MMU/OS 必须注意同步。

但是您给出的示例不准确,在具有每个进程页表的真实系统上,可以访问整个地址,在您的情况下,进程 p1 有 4 页,而 p2 有不同的页集。实际上,两个进程都可以访问相同的虚拟地址,映射到不同的物理帧。所以每个表中的每个表必须有 8 个条目。

关于memory-management - 如何使用倒排页表节省空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10772094/

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