【问题标题】:Calculating The NO of pages in 32-bit Virtual machine计算 32 位虚拟机中的页数
【发布时间】:2019-02-14 08:23:04
【问题描述】:

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

我这样做了: .

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. " 据我了解,页表是一个页表条目数组,每个虚拟页一个。所以没有页表条目应该等于没有页面。 那么为什么#Pages 等于 2^10??

另一件事是“物理页面大小为 4KB”。 ??页面是虚拟地址,是不是意味着一个页面占用了物理内存的 4KB 空间??

我们将不胜感激。

【问题讨论】:

  • 我仍然不明白为什么学生要接受这样的练习。这个问题完全是FUed。程序大小只有1KB??????如果我们假设这一 KB 已被塞进一页(不是一个有效的假设),这意味着该进程只需要一个页表条目。页表条目的数量是进程大小的函数;不是虚拟地址大小。因此,除非页表条目很大(页表条目大小是另一个未指定的值),否则您只需要一页来存储运行 1KB 程序的进程所需的一个页表条目。

标签: memory-management operating-system computer-science


【解决方案1】:

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

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

但是,对于 32 位物理地址空间大小和 4 KiB 页面大小,我们知道地址的 12 位将用于“页内偏移”,而地址的其余 20 位将用于“页数字”;因此我们知道页表项必须至少为 20 位,因此我们知道所有页表项所需的内存总量至少为“1048576 * 20 位 = 20971520 位 = 2560 KiB”。

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

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

另一件事是“物理页面大小为 4KB”。 ??页面是虚拟地址,是不是意味着一个页面占用了物理内存的 4KB 空间??

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

基本思想是将一个虚拟地址分成两部分(用掩码/与和移位)使得“(virtual_page_number

为此,虚拟页面的大小必须与物理页面的大小相同;所以“页面大小”这个词用来指代虚拟页面大小和物理页面大小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多