【问题标题】:Calculating Page Table Size计算页表大小
【发布时间】:2013-04-25 18:57:27
【问题描述】:

我正在阅读页表的示例,发现了这个:

考虑一个具有 32 位逻辑地址空间的系统。如果这样的系统中的页面大小是 4 KB (2^12),那么一个页表可能包含多达 100 万个条目 (2^32/2^12)。假设每个条目由 4 个字节组成,那么每个进程可能需要多达 4 MB 的物理地址空间用于单独的页表。

我不太明白这个 4MB 的结果代表什么。是否代表实际页表占用的空间?

【问题讨论】:

  • 仅供参考,此行来自 Operating System Concepts、Avi Silberschatz、Peter Baer Galvin、Greg Gagne - 第 8 版中的第 8.5.1 节。

标签: memory-management paging


【解决方案1】:

由于我们有一个2^32的虚拟地址空间,每个页面大小是2^12,我们可以存储(2^32/2^ 12) = 2^20 页。由于该页表中的每个条目都有一个大小为 4 字节的地址,因此我们有 2^20*4 = 4MB。所以页表占用了4MB内存

【讨论】:

  • 嗨,感谢您的解释,我不明白:如果页面大小为 2^12 字节,为什么我们不将其转换为位(2^12 字节 = 2 ^ 15 位)然后计算除法 2^32(位)/2^15(位)= 2^17(最大可能页数)?为什么要使用字节?
  • @MukhtarBimurat 每个地址都指向内存中的一个完整字节。个别位不可寻址。所以你可以处理 2^32 个字节。页表是从虚拟地址空间到物理地址空间的映射。但它并不映射单个字节,而是映射成称为页的块。此示例中的页面大小为 2^12 字节。因此,您的页表需要 2^32/2^12=2^20 个条目来映射所有可能的页面。
  • 另请注意,MB 在技术上应该是 MiB,即 2^20 字节而不是 10^6 字节。
【解决方案2】:

假设逻辑地址空间是 32 位,那么可能的逻辑条目总数将是 2^32 另一方面假设每个页面大小是 4 KB 那么一页的大小是 2^22^10 =2^12... 现在我们知道了。页表中的页数是 pages=总可能的逻辑地址条目/页面大小 所以 pages=2^32/2^12 =2^20 现在假设页表中的每个条目占用 4 个字节,那么 物理内存中页表的总大小将是=2^22^20=2^22=4mb**

【讨论】:

    【解决方案3】:

    由于逻辑地址空间是 32 位长,这意味着程序大小为 2^32 字节,即 4GB。 现在我们有 4KB 的页面大小,即 2^12 字节。因此程序中的页面数为 2^20。(程序中的页面数 = 程序大小/页面大小)。现在页表条目的大小为 4字节因此页表的大小为 2^20*4 = 4MB(页表大小 = 程序中的页数 * 页表条目大小)。因此,内存中需要 4MB 空间来存储页表。

    【讨论】:

    • "由于逻辑地址空间是 32 位长,这意味着程序大小是 2^32 字节???"你不是把比特和字节混为一谈了吗?
    • 如果我没记错的话,'逻辑地址空间是 32 位长'意味着我们最多可以存储 2^32 个数字,即 2^32 个内存地址,每个内存地址/位置可以存储 1 个字节数据,因此您总共可以存储 2^32 字节的数据
    【解决方案4】:

    我的解释使用了帮助我理解的基本构建块。请注意,我正在利用 @Deepak Goyal's answer above,因为他提供了明确性:

    我们获得了一个逻辑 32 位地址空间(即我们有一台 32 位计算机)

    考虑一个具有 32 位逻辑地址空间的系统

    我们也被告知

    每页大小为 4 KB

    • 1 KB(千字节)= 1 x 1024 字节 = 2^10 字节
    • 4 x 1024 字节 = 2^2 x 2^10 字节 => 4 KB(即 2^12 字节)
    • 因此,每个页面的大小为 4 KB(千字节而不是千)。

    正如德帕克所说,我们用这个公式计算页表中的页数:

    Num_Pages_in_PgTable = Total_Possible_Logical_Address_Entries / page size 
    Num_Pages_in_PgTable =         2^32                           /    2^12
    Num_Pages_in_PgTable = 2^20 (i.e. 1 million) 
    

    作者继续给出页表中的每个条目占用 4 个字节的情况。这意味着 物理内存 中页表的总大小将为 4MB:

    Memory_Required_Per_Page = Size_of_Page_Entry_in_bytes x Num_Pages_in_PgTable
    Memory_Required_Per_Page =           4                 x     2^20
    Memory_Required_Per_Page =     4 MB (Megabytes)
    

    所以是的,每个进程至少需要 4MB 内存才能运行,增量为 4MB。

    示例

    现在,如果教授想让这个问题比书中的解释更具挑战性,他们可能会询问 64 位计算机。假设他们想要bits的内存。为了解决这个问题,我们将遵循相同的过程,只是确保将 MB 转换为 Mbits。

    让我们逐步完成这个例子。

    给定:

    • 逻辑地址空间:64 位
    • 页面大小:4KB
    • Entry_Size_Per_Page:4 个字节

    回想一下:一个 64 位条目可以指向 2^64 个物理页框之一 - 由于页面大小是 4 KB,所以我们仍然有 2^12 字节的页面大小

    • 1 KB(千字节)= 1 x 1024 字节 = 2^10 字节
    • 每页大小 = 4 x 1024 字节 = 2^2 x 2^10 字节 = 2^12 字节

    页表中有多少页?

    `Num_Pages_in_PgTable = Total_Possible_Logical_Address_Entries / page size 
    Num_Pages_in_PgTable =         2^64                            /    2^12
    Num_Pages_in_PgTable =         2^52 
    Num_Pages_in_PgTable =      2^2 x 2^50 
    Num_Pages_in_PgTable =       4  x 2^50 `  
    

    每页有多少 BITS 内存?

    Memory_Required_Per_Page = Size_of_Page_Entry_in_bytes x Num_Pages_in_PgTable 
    Memory_Required_Per_Page =   4 bytes x 8 bits/byte    x     2^52
    Memory_Required_Per_Page =     32 bits                x   2^2 x 2^50
    Memory_Required_Per_Page =     32 bits                x    4  x 2^50
    Memory_Required_Per_Page =     128 Petabits
    

    [2]:操作系统概念(第 9 版)- Gagne、Silberschatz 和 Galvin

    【讨论】:

      【解决方案5】:

      在 32 位虚拟地址系统中,我们可以有 2^32 个唯一地址,因为给定的页面大小是 4KB = 2^12,所以页面中需要 (2^32/2^12 = 2^20) 个条目表,如果每个条目是 4Bytes 那么页表的总大小 = 4 * 2^20 Bytes = 4MB

      【讨论】:

        猜你喜欢
        • 2023-03-22
        • 2014-07-28
        • 2011-12-16
        • 2012-05-28
        • 1970-01-01
        • 2015-07-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多