memory - 如何计算二级页表大小?

标签 memory memory-management computer-science virtual-memory

鉴于: 32位虚拟地址, 每页 4KiB, 4B - 页表条目的大小, 1 - 地址空间 GiB 大小

对于一个进程使用1GiB地址空间,当页表目录有1024个表项时,找出一级页表和二级页表的大小。 对于 2 级页表 - 页表的最大和最小大小是多少?

所以...我知道页偏移量是 12 位,页码是 20 位。因此我们得到了 2^20 个条目,因此 1 级页表的总页表大小应为 4.2 MB。

但是如何计算2级页表的大小呢?有什么建议吗?

最佳答案

可以这样检查两级情况:

  1. 第一级将有一个页面。
  2. 将有足够的页面来满足第二级所需的地址空间。

现在每个 2 级页面可以映射 2^10 * 2^12 字节,因为它有 2^10 个条目,并且每个条目都指向 2^12 字节的页面。这会产生 2^22 字节。

现在您的目标地址空间为 2^30 (1GB),因此您需要 2^30/2^22 或 2^8 2 级页面。此外,您还需要一个一级页面。

总共使用了 1 + 2^8 或 257 页或 1028 KB

关于memory - 如何计算二级页表大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50449484/

相关文章:

C. 函数修改动态分配的二维数组时出现段错误

objective-c - 使用@property(copy) 与@property(retain) 的经验法则是什么?

computer-science - X 位计算机如何处理 2X 位数字?

xml - Groovy:使用 StreamingMarkupBuilder 处理大量数据

python - Python中的内存错误解决方案

binary-tree - FULL 二叉树的数量

haskell - 所有函数类型都形成 `Hask` 的子类别吗?

java - 清理内存后Android应用程序崩溃

javascript - Node.js 获取内存使用率高的通知

c++ - 如何检查数组更新