Memory 是什么让指向页表项的指针数组比页表项数组更好?
在这里,我们将讨论页表的一些极端实现以及一些合理的实现 最极端的情况之一是分配一个平面阵列,将每个可能的虚拟地址映射到一个物理地址 在Memory 是什么让指向页表项的指针数组比页表项数组更好?,memory,memory-management,operating-system,kernel,paging,Memory,Memory Management,Operating System,Kernel,Paging,在这里,我们将讨论页表的一些极端实现以及一些合理的实现 最极端的情况之一是分配一个平面阵列,将每个可能的虚拟地址映射到一个物理地址 在19:19(给定的链接将从这一分钟开始)的那一分钟,讲师说他正在谈论指向PTE的一组平面指针。然后提到他本可以做一些更愚蠢的事情,那就是使用一个实际的页面表条目数组 为什么拥有一个指向PTE的指针数组比拥有一个实际的PTE数组更好 他说的是一个地址为4字节的32位系统,但PTE也是4字节 指针数组占用的空间是原来的两倍(指针为4字节,PTE为4字节),这难道不是更
19:19
(给定的链接将从这一分钟开始)的那一分钟,讲师说他正在谈论指向PTE的一组平面指针。然后提到他本可以做一些更愚蠢的事情,那就是使用一个实际的页面表条目数组
为什么拥有一个指向PTE的指针数组比拥有一个实际的PTE数组更好
他说的是一个地址为4字节的32位系统,但PTE也是4字节
指针数组占用的空间是原来的两倍(指针为4字节,PTE为4字节),这难道不是更浪费吗
另外,我认为分配大量分布在物理内存中的PTE会导致碎片化,并且很难管理,而不是创建一个PTE数组,它是一个不需要大量管理的内存块
为什么拥有指针数组会更好呢?遍历页表以查找翻译时会产生开销。时不时会有一篇新的论文发表,解释它们的实现是如何优越的。有人建议。我建议您不要想得太多,要理解遍历页表的原理,一个简单的实现就足以掌握它。遍历页表以查找翻译时会产生开销。时不时会有一篇新的论文发表,解释它们的实现是如何优越的。有人建议。我建议您不要想得太多,要了解遍历页表的原理,一个简单的实现就足以掌握。如果您有许多虚拟地址空间,每个都是4 GiB;你可能会发现:
- 一个大的区域(例如1 GiB)用于内核,并且需要在所有虚拟地址空间中保持相同。由于这在所有虚拟地址空间中都是相同的,因此此区域中的任何修改都需要同时修改每个虚拟地址空间
- 由于其他原因,2个或更多虚拟地址空间将共享不同的区域-内存映射文件、共享库、共享内存、“写时拷贝”区域由“
”引起,等等fork()
- 在相同的虚拟地址空间中,某些区域将是相同的(例如,参考相同的“充满零的只读物理页”以实现“写时分配”策略)
- 大量空间将完全未使用(可能每个虚拟地址空间平均2 GiB)
它们都比较可怕;我希望讲师准备引入多级分页(其中“每页一个指向PTE的指针”替换为“一个指向PTE组的指针”),这是大多数真实CPU所使用的;你可能会发现:
- 一个大的区域(例如1 GiB)用于内核,并且需要在所有虚拟地址空间中保持相同。由于这在所有虚拟地址空间中都是相同的,因此此区域中的任何修改都需要同时修改每个虚拟地址空间
- 由于其他原因,2个或更多虚拟地址空间将共享不同的区域-内存映射文件、共享库、共享内存、“写时拷贝”区域由“
”引起,等等fork()
- 在相同的虚拟地址空间中,某些区域将是相同的(例如,参考相同的“充满零的只读物理页”以实现“写时分配”策略)
- 大量空间将完全未使用(可能每个虚拟地址空间平均2 GiB)