分页,页面大小,页面 - 关于操作记忆的大小的结论

时间:2016-09-09 18:04:39

标签: memory-management paging cpu-architecture page-tables

  

让我们考虑页面大小等于1 KB。表中的一个条目   需要2B。页面表不超过一页(<= 1KB)。

     

我们能否得出结论:操作记忆的大小是<= 512 KB

正确答案是否定,但我无法理解。对我来说,回答是肯定的 - 请看我的理由,告诉我哪里出错了,拜托。

表格包含页面中的<=1024B/2B=512=2^9个条目。页面大小为1024B=2^10B,因此偏移量不超过<=10位。页面数量为<=9位 - 因为我们有512=2^9个条目。因此,9+10=19。因此,<=2^19 bits可以解决<= 2^19 B=2^9KB=512KB问题。

我哪里错了?

1 个答案:

答案 0 :(得分:0)

页表条目是2B,因此表条目可以指向2 ^ 16个物理页中的一个。这是2 * 16 kiB(因为页面是1kB)。因此内核可以使用高达65536 kiB(64MiB)的物理内存。

这假定整个页表条目(PTE)是物理页码。如果页面表中PTE的位置将其与虚拟地址相关联,则可以工作。即,将9比特的虚拟地址用作PT的索引,以选择PTE。

我们不能假设机器 以这种方式工作,但同样我们不能假设它 ,直到我们有更多信息。

鉴于问题中的信息,我们可以得出结论:

  • 可用物理内存最高可达65536kiB。
  • 一次最多可以映射512个虚拟页面(512kiB)。
  • 别的不多!许多可能性都是开放的。

更可能的设计在每个PTE中都有一个有效/无效的位。

如果PTE的内容(而不是其位置)指示它映射的虚拟页面,则可以将大的虚拟地址空间映射到非常少的物理页面上。这个地址空间必然是稀疏映射的,但内核可以通过保留一个单独的表来确定映射 应该是什么,从而为进程提供了大量活动映射的幻觉

因此,在页面错误时,内核会检查页面是否应该已映射。如果是这样,它将映射放在PTE中并重新开始该过程。 (这种事情发生在真实操作系统中,它被称为minor page fault。)

在此设计中,内核使用页表来保存实际映射的子集将类似于software-managed TLB。 (当然,这种架构可能有一个非连贯的TLB,每次PTE修改后都需要失效,所以这可能会表现得非常糟糕)。