分页,页面大小,页面 table - 关于操作内存大小的结论

Pagination, size of page, table of pages - conclusion about size of operational memory

Lets consider that size of page is equal to 1 KB. One entry in table takes 2B. Table of pages takes not more than one page (so <= 1KB).

Can we conclude that size of operational memory is <= 512 KB ?

正确答案是否定的,但我无法理解。对我来说,答案是肯定的——看看我的推理,请告诉我哪里错了。

Table 在 table 页中包含 <=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

我哪里错了?

一个页面table条目是2B,所以一个table条目可以指向2^16个物理页面之一。那是 2*16 kiB(因为页面是 1kB)。因此内核最多可以使用 65536 kiB (64MiB) 的物理内存。

这假定整个页面 table 条目 (PTE) 是一个物理页码。如果 PTE 在页面 table 中的位置将其与虚拟地址相关联,那么这就可以工作。即,虚拟地址的 9 位用作 PT 的索引,select 一个 PTE。

我们不能假设机器确实这样工作,但同样我们不能假设它不这样工作,直到我们获得更多信息。

仅根据问题中的信息,我们可以得出结论:

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

更有可能的设计是在每个 PTE 中有一个 valid/invalid 位。

如果 PTE 的内容(而不是其位置)指示它映射的虚拟页面,则可以将较大的虚拟地址 space 映射到很少的物理页面上。这个地址 space 必然会被稀疏映射,但是内核可以通过保持一个单独的 table 来给进程 错觉 映射应该是。

因此在出现页面错误时,内核会检查页面是否应该被映射。如果是,它将映射放入 PTE 并恢复进程。 (这种事情发生在真实的操作系统中,它被称为minor page fault。)

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