Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Question] 关于 SV39 多级页表 的概念比较模糊 #154

Open
CelestialMelody opened this issue Nov 22, 2022 · 3 comments
Open

[Question] 关于 SV39 多级页表 的概念比较模糊 #154

CelestialMelody opened this issue Nov 22, 2022 · 3 comments
Labels
question Further information is requested

Comments

@CelestialMelody
Copy link

CelestialMelody commented Nov 22, 2022

关于《分析 SV39 多级页表的内存占用》,理论上的第一种上限

每映射一个 4KiB 的虚拟页面,需要初始就有一个页表根节点,因为还需其它两级页表节点,故最多还需要新分配两个物理页帧来保存新的节点。

我的问题是:

  1. 为什么“最多还需要新分配 两个 物理页帧来保存新的节点”?
  2. 没有理解这里 'S / 4KiB' 的含义。这里的计算看起来就像是:每连续映射 4KB 新分配 2 个 4KB 的页表。

一些概念的表述不太理解

在 SV39 中

  • 如果使用了一级页索引就停下来,则它可以涵盖虚拟页号的高 9 位为某一固定值的所有虚拟地址,对应于一个 1GiB 的大页;
  • 如果使用了二级页索引就停下来,则它可以涵盖虚拟页号的高 18 位为某一固定值的所有虚拟地址,对应于一个 2MiB 的大页;
  • 如果使用了所有三级页索引才停下来,它可以涵盖虚拟页号的高 27 位为某一个固定值的所有虚拟地址,自然也就对应于一个大小为 4KiB 的虚拟页面。

这里的 一级索引 在使用上似乎用于映射 根页表(第三级页表)的页表项(不知道有没有理解出错)

括号中的两项分别对应为了映射这段连续区间所需要新分配的最深层和次深层节点的数目:

  • 前者(对应 第二级页表)每连续映射 2MB 才会新分配一个 4KB 的第一级页表;
  • 后者(对应 根页表,第三级页表)每连续映射 1GB 才会新分配一个 4KB 的第二级页表。

我的问题是:

  1. 是否第三级页表映射地址范围为 512 GB(第二级页表范围为 1 GB,第三级页表为 2KB)?
  2. 根页表(第三级页表)包含的是虚拟页号的高 9 位(一级索引)映射的页表项?
@CelestialMelody CelestialMelody added the question Further information is requested label Nov 22, 2022
@YdrMaster
Copy link
Collaborator

多级页表是“字典树“。需要先理解什么是字典树,在多级页表里这个字典树索引的是什么,映射的又是什么。

@CelestialMelody
Copy link
Author

多级页表是“字典树“。需要先理解什么是字典树,在多级页表里这个字典树索引的是什么,映射的又是什么。

我理解的:
多级页表里的字典树索引是 vpn 的 27 位拆分的 3个级别的索引(前 9 位 为一级索引)

关于《分析 SV39 多级页表的内存占用》,理论上的第一种上限

每映射一个 4KiB 的虚拟页面,需要初始就有一个页表根节点,因为还需其它两级页表节点,故最多还需要新分配两个物理页帧来保存新的节点。

我的问题是:

  1. 为什么“最多还需要新分配 两个 物理页帧来保存新的节点”?
  2. 没有理解这里 'S / 4KiB' 的含义。这里的计算看起来就像是:每连续映射 4KB 新分配 2 个 4KB 的页表。

一些概念的表述不太理解

在 SV39 中

  • 如果使用了一级页索引就停下来,则它可以涵盖虚拟页号的高 9 位为某一固定值的所有虚拟地址,对应于一个 1GiB 的大页;
  • 如果使用了二级页索引就停下来,则它可以涵盖虚拟页号的高 18 位为某一固定值的所有虚拟地址,对应于一个 2MiB 的大页;
  • 如果使用了所有三级页索引才停下来,它可以涵盖虚拟页号的高 27 位为某一个固定值的所有虚拟地址,自然也就对应于一个大小为 4KiB 的虚拟页面。

这里的 一级索引 在使用上似乎用于映射 根页表(第三级页表)的页表项(不知道有没有理解出错)

括号中的两项分别对应为了映射这段连续区间所需要新分配的最深层和次深层节点的数目:

  • 前者(对应 第二级页表)每连续映射 2MB 才会新分配一个 4KB 的第一级页表;
  • 后者(对应 根页表,第三级页表)每连续映射 1GB 才会新分配一个 4KB 的第二级页表。

我的问题是:

  1. 是否第三级页表映射地址范围为 512 GB(第二级页表范围为 1 GB,第三级页表为 2KB)?
  2. 根页表(第三级页表)包含的是虚拟页号的高 9 位(一级索引)映射的页表项?

另外,我发现了似乎比较矛盾的地方:

  1. 注解中大页部分
  2. SV39 地址转换过程部分
    前后对一级索引的解释相矛盾了:前者说一级索引是虚拟页号高九位;后者说一级索引为 vpn 后九位

@YdrMaster
Copy link
Collaborator

@CelestialMelody 这个,直接看手册好了,从 79 页开始,4.3、4.4 两节

Volume II: RISC-V Privileged Architectures V20211203 Page79

4.3 Sv32: Page-Based 32-bit Virtual-Memory Systems

4.4 Sv39: Page-Based 39-bit Virtual-Memory System

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

2 participants