x86 - 分页命名法
问题描述
在研究虚拟内存时,我有时会看到名词page table、page table entry和page的使用冲突。例如“页表是页表......”和“页表包含页表条目”。
我对关系的理解(在 x86-64 的上下文中)如下:
- 虚拟内存分为块(即页)
- 页表是一组条目
- 每页有一个条目
- 每个条目是一个由元数据组成的地址
- 权限位
- 在直接映射中,物理地址到帧
- 或者,另一个页表的物理地址
这个高层次的总结,以及上述名词的使用,准确吗?
解决方案
这个高层次的总结,以及上述名词的使用,准确吗?
不完全是(没有一个条目包含虚拟地址)。对于 80x86(2 级)上的“普通 32 位分页”:
页面目录是页面目录条目的数组
- 页目录条目包含页表的物理地址,其中一些位(本来为零)重新用于各种标志(例如权限位)
页表是页表条目的数组
- 页表条目包含页面的物理地址,其中一些位(本来为零)重新用于各种标志(例如权限位)
对于 80x86(4 级)上的“长模式分页”:
PML4(Page Map Level 4)是 PML4 条目的数组
- PML4 条目包含页面的物理地址,其中一些位(本来为零)重新用于各种标志(例如权限位)
PDPT(页面目录指针表)是 PDPT 条目的数组
- PDPT 条目包含页面目录的物理地址,其中一些位(本来为零)重新用于各种标志(例如权限位)
页面目录是页面目录条目的数组
- 页目录条目包含页表的物理地址,其中一些位(本来为零)重新用于各种标志(例如权限位)
页表是页表条目的数组
- 页表条目包含页面的物理地址,其中一些位(本来为零)重新用于各种标志(例如权限位)
当然这里有一个模式:
A
<NAME>
是一个<NAME>
条目数组<NAME>
条目包含 a 的物理地址,<NEXT_LOWER_LEVEL_NAME>
其中一些位(本来为零)重新用于各种标志(例如权限位)
.. 其中“ <NAME>
”是(从最高到最低)以下之一:PML5
, PML4
, Page Directory Pointer Table
, Page Directory
, Page Table
.
推荐阅读
- python - 你能反转 PyTorch 神经网络并激活输出中的输入吗?
- wordpress - 如何以编程方式提交联系表格 7
- pysdl2 - PySDL2在窗口表面显示灰度numpy数组
- python - 模拟 for 循环迭代来自多个数组的所有可能选项
- visual-studio - 在 Visual Studio 2019 中更改 docker compose up 名称
- airflow - 当我们进行回填时,Composer/Airflow 如何自动跳过时间传感器?
- html - HTML 和 CSS:表格上的圆角
- r - 用R中不同数据帧的值替换数据帧中的部分值(starts_with)
- python-3.x - 从以 XML 格式存储的 UML 模型中提取类和关系
- android - Flutter firebase 消息推送通知格式 3 行