计算32位虚拟机的页数

Calculating The NO of pages in 32-bit Virtual machine

考虑物理页面大小为 4KB 的 32 位虚拟和物理地址 space。假设一个进程有 刚刚创建并将其程序复制到内存中。程序大小为 1 KB。会有多少内存 需要存储此进程的页面 tables?

我这样做了: .

PTE size for 32bit physical address = 32 bits = 4 bytes. no of PTEs in single level page table = virtual pages= virtual address space / page = 2^32 / 2^ = 2^20

所以页数 = 2^20。

但是在解决方案中他们也写成:

"#Pages in single level page table = #PTEs x PTE size / page size = 2^20 x 4 bytes / 2^12 bytes = 2^10. " 据我了解,页面 table 是一个页面 table 条目数组,每个虚拟页面一个。因此没有页面 table 条目应该等于没有页面。 那么为什么#Pages 等于 2^10??

另一件事是什么 "with physical page size of 4KB." ??页面是虚拟地址,那么这是否意味着一个页面在物理内存上占用 space 的 4KB??

我们将不胜感激。

对于单层页面tables;虚拟地址 space 是 4 GiB,一个页面是 4 KiB,所以你需要“4 GiB/4 KiB = 1048576 pages = 1048576 page table entries”。这是您得出的答案(2^20 页 table 个条目)。

如果有 1048576 页 table 条目并且您不知道页 table 条目有多大,那么所有页 table 条目所需的内存总量将为是“1048576 * 未知 = 不可知”。

但是,对于 32 位物理地址 space 大小和 4 KiB 页面大小,我们知道地址的 12 位将用于 "offset within page",地址的其余 20 位将用于 "page number";因此我们知道页面 table 条目必须至少为 20 位,因此我们知道所有页面 table 条目所需的内存总量至少为“1048576 * 20 位 = 20971520 位= 2560 KiB".

如果我们做出随机的潜在错误假设(基于有根据的猜测)并确定页面 table 条目可能是 4 个字节,我们可以说所有页面 [=40] 所需的内存总量=] 条目可能是“1048576 * 4 字节 = 4 MiB”。

如果所有页面 table 条目所需的内存总量为 4 MiB,物理页面为 4 KiB;那么您将需要“4 MiB / 4 KiB = 1024 页”来存储所有页面 table 条目。这是他们想出的答案(2^10 页)。

Another thing what is "with physical page size of 4KB." ?? Pages are virtual address so does that mean a page occupy 4KB of space on physical memory??

页面不是虚拟地址;并且有虚拟页面和物理页面。

基本思想是将虚拟地址分成两部分(使用 masking/AND 和移位)以便 "(virtual_page_number << K) + offset_within_page = virtual_address",然后使用 "virtual_page_number"(和页面 tables)找到 "physical_page_number",然后执行 "physical_address = (physical_page_number << K) + offset_within_page"。

为此,虚拟页面的大小必须与物理页面的大小相同;所以单词 "page size" 用于指代虚拟页面大小和物理页面大小。