cpu-architecture - 拥有比有效地址大的虚拟地址有什么意义?

标签 cpu-architecture virtual-memory powerpc

我熟悉虚拟内存以及虚拟地址与物理地址的概念。我也熟悉多级页面翻译方案。我最近遇到的一件事是“有效”地址的想法。查看它,它用于索引到分段地址空间,您需要将其转换为线性化地址空间中的虚拟地址。从表面上看,这对我来说很有意义,但后来我发现了一个这样的图表:

enter image description here
Source

我真的不明白从 64 位 EAddr 到 80 位 VAddr 的意义是什么。您可以拥有 2^36 个唯一的 VSID,因为 ESID 是 36 位。结合 2^16 个不同的页索引值意味着您只能访问 2^52 个不同的虚拟页码,而不是像您期望的 80 位 VAddr 那样的 2^68。
那么为什么这个系统会费心去做这些呢?当你只使用 60 位时移动 80 位听起来像是浪费接线。有什么我想念的吗?我是否误解了分割市场的工作方式?

最佳答案

这里的“虚拟地址”与通常在虚拟/物理意义上理解的含义不同。
它特定于 PowerPC 用于地址转换的哈希页表 (HPT) MMU。
全局使用单个哈希表结构来转换地址。
不同的内存上下文(例如进程)使用单独的段表,因此它们将生成唯一的虚拟地址。
虚拟地址用作共享哈希页表中查找转换的键。
虚拟地址需要大于有效地址范围,以便不同的上下文可以在哈希表中具有唯一的转换。
有关更多详细信息,请查看 POWER ISA .特别是第三卷:第五章存储控制。

关于cpu-architecture - 拥有比有效地址大的虚拟地址有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69472919/

相关文章:

optimization - 如果处理器支持乱序执行,那么优化数据危害是否有意义?

windows - 为什么锁定页面不计入工作集大小?

linux - 在哪里可以找到 PPC64LE 上 SLES 12 的 libstdc++.so.5 32 位版本

assembly - 具有只写目标并在英特尔的任何端口上运行的 x86 非 mov 指令?

linux - 如何找到我的 CPU 拓扑?

intel - 了解 CYCLE_ACTIVITY.* Haswell 性能监控事件

assembly - 这个堆栈检查 PPC 程序集在做什么?

c++ - Visual Studio 2010 - 数据段和堆栈内存相同

c - mach_vm_region 与 mach_vm_region_recurse

assembly - tlbiel 指令是什么?它有什么作用?