分页,页面大小,页面 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 修改后都需要失效,所以这可能会执行得很糟糕)。
Lets consider that size of page is equal to
1 KB
. One entry in table takes2B
. 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 修改后都需要失效,所以这可能会执行得很糟糕)。