获取具有少量内存(只有几个页面)的系统的页表大小



我被要求制作一个页表内的内存在这些条件下。

  1. 我们有16位虚拟地址
  2. 内存大小为512字
  3. 页面大小为128字节

所以我试着这样做:

  1. 2^16/2^7 = 2^9 Pages
  2. 2^9 * 4 = 2^11 Bytes = 2KB页表大小,假设每个表项为4字节。

所以问题在这里:主内存是512字= 2048Bytes = 2KB,这意味着整个内存是页表,我是对的吗?如果没有,你能告诉我这里哪里做错了吗?

根据单词的定义,该系统有8或16页。通常,在16位系统上,word = 2字节,而不是4字节,所以我假设是这样,但是YMMV。这意味着主存是1KB(而不是2KB)。

然而,因为只有8页,这意味着一个正常的页表条目只需要几个位(物理页码是0-7,所以是3位),所以可能每个虚拟页最多一个字节-甚至可能小到一个nibble(半字节),这意味着你需要512个nibble,例如256字节。

然而,即使存在一个很小的TLB,这也会对有限的物理内存造成巨大的浪费。我会重新设计页表数组相反(这就叫做倒置的页表,就像一个扩展的TLB软件)。

通常,页表由虚拟页码索引,每个索引处的元素保存该索引的物理页码。这意味着在给定虚拟地址的情况下,理论上对页表项的访问为0(1)。

反转意味着表是按物理页码索引的,这使得整个表总共只有8个条目长!这样的表不能通过虚拟页码建立索引,但是可以搜索它,并且由于只有8个条目要搜索,这不是一个大的搜索-因此平均我们有O(4),这实际上与O(1)相同。可能每个条目有两个字节大,包含一个虚拟页码(9位)和一些状态位(2字节中有7位用于状态)。

正如我所提到的,如果有一个小的TLB,这种安排将使页表存储更紧凑,同时在TLB丢失上产生较小的搜索成本

理想情况下,如果TLB有8个条目,这将足以映射所有具有物理页面的地址的虚拟地址,并且TLB在有效的虚拟内存访问上的错误也将表明页面丢失/错误。

最新更新