确定页面表大小

确定页面表大小

问题描述:

我有一个关于确定页面大小的架构类的HW问题。我看到,已经有关于这个SO进入这里:确定页面表大小

Determine page table size for virtual memory

,但我有将其应用于我的问题烦恼。

据我所知,一般方程为:

(共#页)×(页面大小)

但是,当我做数学的数字没有意义。有人能帮我看看我做错了什么吗?

字节可寻址存储器, 48位虚拟空间, 16 KB的页面大小(14位来表示),
4 GB物理存储器(22位来表示),& 有效的,肮脏的,参照对每个比特页面

一个应用程序的表大小是多少?

总#页= 2 ^2分之48^ 14 = 2^34

页面大小= 16KB

总计页面大小=(总#页)×(页面大小)= 2^34 x 16 kB = 274877906944 kB?!?!?

一些帮助将非常感谢 - 显然有一些我做错了。

谢谢。

+0

1)这是单层页面表吗? 2)虚拟地址空间的虚拟页面数量限制是最大的吗?页表项是32位还是64位? – user3344003 2014-10-27 00:14:51

你用页表项混淆页:

  1. 页表由页表项
  2. 每个页表项拥有一个地址到一个页的物理内存
  3. The page is a 16kB slice of memory

您希望将4GB物理内存映射到多个16kB页面上。

所以你需要(4 * 10^6/16 * 10^3)= 250页(不会忽略)

每个地址以页表条目其是,它由32位整数保持的物理内存中的地址以及关于该页面的一些修饰符/信息位。

每个进程需要至少一个页表。它由250个页面表项组成。每一页表项的大小是32位(4B)号(称它为任何你想要的)

所以需要一个过程的总大小是:

250 * 4B = 1000 B = 1KB的

为什么不使用基于x86 MMU所使用的分页模型的方法:

您所描述的单级别分页机制的问题是每个(无论多小)进程都需要:4GB/16kb = 4 * 10^6 B/16 * 10^3 B = 0,25 * 1000 = 250页表项
250 * 4字节(每项32位)=每过程1 KB

这看似不起眼并不但在这里你已经使用16个KB的页面(例如大多数x86系统使用4KB页,所以你需要1MB每个进程

这就是为什么x86使用两级寻呼过程中,每个进程都有1024个目录项和每个这些条目的保存页面表的地址(持有1024页表项)。因此,进程的最小分配内存变为: 4个字节(页目录项)+ 1024 * 4个字节(1024个32位页表项) 每个页表项都指向内存中的一个4kB物理页面。

1024页目录项*为每个目录* 4kB的页1024个表项=寻址存储器

虚拟地址包括4GB大致是:

  • 页目录项索引
  • 页表进入指数
  • 在4KB的页面偏移

ŧ他的意思是,即使增加单个页面的大小(从而减少了所需的页表条目数量),也需要更大的数字来描述偏移量。