让我们考虑页面大小等于
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
问题。
我哪里错了?
答案 0 :(得分:0)
页表条目是2B,因此表条目可以指向2 ^ 16个物理页中的一个。这是2 * 16 kiB(因为页面是1kB)。因此内核可以使用高达65536 kiB(64MiB)的物理内存。
这假定整个页表条目(PTE)是物理页码。如果页面表中PTE的位置将其与虚拟地址相关联,则可以工作。即,将9比特的虚拟地址用作PT的索引,以选择PTE。
我们不能假设机器 以这种方式工作,但同样我们不能假设它不 ,直到我们有更多信息。
鉴于问题中的信息,我们可以得出结论:
更可能的设计在每个PTE中都有一个有效/无效的位。
如果PTE的内容(而不是其位置)指示它映射的虚拟页面,则可以将大的虚拟地址空间映射到非常少的物理页面上。这个地址空间必然是稀疏映射的,但内核可以通过保留一个单独的表来确定映射 应该是什么,从而为进程提供了大量活动映射的幻觉
因此,在页面错误时,内核会检查页面是否应该已映射。如果是这样,它将映射放在PTE中并重新开始该过程。 (这种事情发生在真实操作系统中,它被称为minor page fault。)
在此设计中,内核使用页表来保存实际映射的子集将类似于software-managed TLB。 (当然,这种架构可能有一个非连贯的TLB,每次PTE修改后都需要失效,所以这可能会表现得非常糟糕)。