问题标签 [page-tables]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
250 浏览

cpu-architecture - 页表条目大小 - 为什么是 2 的幂?

我解决了一些问题,其中页表条目大小只需要 26 位 - 22 位用于物理地址,4 位用于脏位等。但是它被四舍五入到 32 - 因为 26 不是 2 的幂。一定是我想念的简单的东西,但为什么我们必须这样做?谢谢!

0 投票
0 回答
447 浏览

assembly - X86 64 位长模式表

我已成功进入 32 位保护模式,现在希望进入 64 位长模式。我了解执行此操作的代码,但不了解 64 位表与 32 位 GDT 相比如何工作。我想知道是否有关于此的教程或解释它的简单方法,或者我只需要阅读 AMD 手册(不容易理解)。我知道结构是

但我不确定如何使用它。我假设 32 位模式的 GDT 不用于 64 位长模式?

0 投票
1 回答
711 浏览

memory - 如何根据 TLB 大小和平均内存访问时间计算进程大小

在整个进程加载到内存中(而不是请求分页)的分页内存系统中,您有一个 35 条目的 TLB。假设任何一页内存访问的概率是相同的(与正常情况不同)。如果TLB搜索时间是5nsec,内存访问时间是50nsec,那么如果有效访问时间是70nsec,那么page中的进程有多大?

我如何计算进程的大小?

0 投票
2 回答
3367 浏览

linux - Arm64 Linux 页表遍历

目前我正在开发一些与研究相关的程序,我需要找到pte一些特定的地址。我的开发环境是 Juno r1 板(CPU 是 A53 和 A57 ),它运行 arm64 Linux 内核。

我使用一些典型的页表遍历代码,如下所示:

但是,当程序检查pte地址(0xffffffc0008b2000)时,它总是返回一个空的pmd

我的猜测是我pgd在第一步中弄错了。我看到Tims Notes说 using current->mmonly 可以获取pgd of TTBR0(用户空间pgd),而我检查的地址是内核空间地址,所以我应该尝试获取pgd of TTBR1.

所以我的问题是:如果我想获取pte内核空间地址,我可以current->mm用来获取pgd吗?

如果我不能,还有什么我可以尝试的吗?

欢迎任何建议!谢谢你。

西蒙

0 投票
3 回答
3174 浏览

cpu-architecture - 访问内存时,是否会在缓存命中情况下设置页表访问/脏位?

据我所知,CPU的内存访问涉及CPU缓存和MMU。CPU 将尝试在缓存中找到其目标,如果发生缓存未命中,CPU 将转向 MMU。在 MMU 访问过程中,对应页表项的访问/脏位将由硬件设置。

但是据我所知,除非缓存未命中,否则大多数 CPU 设计都不会触发 MMU,而我的问题是,页表条目的访问/脏位是否仍会设置为缓存命中?还是与架构有关?

0 投票
1 回答
146 浏览

cpu-architecture - 每个级别的页表条目覆盖的虚拟内存总量是多少?

以下参数适用于使用 40 位虚拟地址和 1G 字节物理(主)内存的系统。字大小为 64 位(8 字节)。地址指向字节并在字节边界上对齐。我们对 i 位地址使用以下符号:Ai-1...A2,A1,A0 其中 Ai-1 是地址的最高有效位,A0 是地址的最低有效位。虚拟地址用 V39-V0 表示,物理地址用 P29-P0 表示。

这是我目前发现的,

由于它是一个 40 位的虚拟地址并且页面大小为 64kB (2^16),因此 16 位用于偏移量,我们从 40 中减去 16。剩余的 24 位用于虚拟页码 (VPN)。VPN 分为 3 个字段,每个字段 8 位。所以我们有一个三级页表。每个表有 2^8 个条目,每个表的大小为2^8 * 4 bytes = 1024 bytes.

从这里我们将如何继续并找到每个级别的页表条目所覆盖的虚拟内存总量?

0 投票
1 回答
645 浏览

operating-system - 操作系统内存分页中的分层页表

现在我正在学习操作系统中的内存管理

在分层页表结构中,如果有 32 位机器4KBpage-size则为4B大小page-entry

为什么地址被划分为10-10-12

我知道20 - 1212位是offset4kbyte -> 2^12

但是为什么 20 位变成 10-10

11-9或12-8不可能吗?

0 投票
1 回答
3111 浏览

operating-system - 分层页表与倒排表

我读到了内存的页面结构,但无法得到一些观点:

  • 页表:据我了解,该进程(如 Intel i5)具有集成在其晶体中的页表和 TLB,不是吗?但是这个表不包含虚拟页面的地址,所以操作系统必须在操作内存中还有一个页表。所以?

  • 倒排表:我知道它有页表,但该表包含内存实际块的地址。而我只得到了一个。该表位于进程或操作系统中的何处在操作内存中提供它。哈希函数有什么用? 从图片来看。PID - 进程 ID(它是干什么用的),p - 页号(物理页还是虚拟页?如果是物理页,这个表是干什么用的?)。
    倒置页表

请不要将我推荐给 Wiki 等。我已经阅读了它,但我无法获得。有人可以更清楚地解释吗?

0 投票
1 回答
41 浏览

mmu - 页表大小和可用物理地址

假设我们有 4 GiB 的 RAM,我们使用 4 kiB 大小的页表,具有 32 位地址。

经过我的计算,我得到:

  • 我们最多只能处理 2^32 个地址;
  • 每个页表共有 2^20 个条目;
  • 我们总共有 4 GiB/4 kiB = 1048576 页。

但我不明白的是,如果一个页表有 2^20 个条目,我们已经用这个页表覆盖了所有可能的地址。如果每个进程都有自己的页表,这怎么可能?那么应该可以在多个页表上拥有相同的物理地址,这可能会导致严重的问题,或者我错过了什么?

非常感谢您的帮助。

0 投票
0 回答
1640 浏览

caching - 页表会放在CPU缓存中吗?

根据我的理解,load/操作将访问(vaddr)store的一些数据,这将被转换为(paddr)以便由内存层次结构来实现。翻译过程将首先在 TLB 中查找,如果没有找到匹配项,则触发多级(?)页表查找。virtual memory addressvaddrphysical address

我的问题是:除了非常有限的 TLB 条目之外,页表是否会放在 L1D 缓存、L2 缓存或 LLC 中?