assembly - 了解页面目录

标签 assembly memory-management x86 paging

我读了一些有关页目录和页表的手册,但对这些概念仍然很困惑。例如here我发现只进行单级分页会浪费内存。因此,在 x86 架构中,我们使用 2 级分页。

cr3 --> PageDirectory --> PageTable --> Page

因此考虑以下线性地址。

01001010101 1010101101 10101110101010 
 page tbl     page      offset

使用page tbl位我们找到页目录项的物理地址。 PD = cr3 + L * (page tbl) 其中包含页表物理地址PT。现在我们正在寻找我们的页面P = PT + L * page。因此,在单个级别中,我们有一个页表 4MiB。现在我们总共有 1024 个页表 4KiB = 4MiB。看不到内存经济。

我错过了什么?

最佳答案

通常情况下,页表远未满。对于平面页表,如果只需要前几个和最后几个条目,仍然需要分配整个表。对于页目录,除了第一个和最后一个页表之外的所有页表都可以省略,从而节省大量内存。在当今 RAM 巨大的时代,这种 yield 似乎很小,但在计算机总共只有 4 MiB RAM 的时候,这种 yield 确实很大。

关于assembly - 了解页面目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47310883/

相关文章:

c - 为什么我无法通过整数加法获得最佳性能?

assembly - 开始组装,简单的计算器问题

linux - 汇编代码一直显示段错误

c++ - 更改完全不相关的代码时,Visual Studio C++ 编译器生成的代码速度降低了 3 倍

c++ - 运营商删除 - 如何实现?

c - 进程中如何动态分配内存变量?

ios - CGContextDrawPDFPage 在没有产生内存警告的情况下崩溃

assembly - 在 MIPS/SPIM 中,li 和 lw 有什么区别?

c - 用于调用系统调用并检索其结果的内联汇编器

assembly - 在古代 NASM 版本 (0.98.39) 中,常见符号报告为 'redefined'