计算页表大小

问题描述 投票:0回答:6

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

考虑一个具有 32 位逻辑地址空间的系统。如果此类系统中的页面大小为 4 KB (2^12),则页表可能包含最多 100 万个条目 (2^32/2^12)。假设每个条目由 4 个字节组成,则每个进程仅页表就可能需要多达 4 MB 的物理地址空间。

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

memory-management paging
6个回答
84
投票

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


25
投票

我的解释使用了帮助我理解的基本构建块。请注意,我正在利用 @Deepak Goyal 的上述回答,因为他提供了清晰的答案:

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

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

  • 这意味着每个内存地址可以是 32 位长。
  • “一个 32 位条目可以指向 2^32 个物理页框之一”[2],换句话说,
  • [“一个32位寄存器可以存储2^32个不同的值”][3]

我们还被告知

每个页面大小为 4 KB

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

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

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_PgTable = Size_of_Page_Entry_in_bytes x Num_Pages_in_PgTable
Memory_Required_Per_PgTable =           4                 x     2^20
Memory_Required_Per_PgTable =     4 MB (Megabytes)

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

示例

现在,如果教授想让问题比书中的解释更具挑战性,他们可能会询问 64 位计算机。假设他们想要的内存。为了解决这个问题,我们将遵循相同的过程,只是确保将 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_PgTable = Size_of_Page_Entry_in_bytes x Num_Pages_in_PgTable 
Memory_Required_Per_PgTable =   4 bytes x 8 bits/byte    x     2^52
Memory_Required_Per_PgTable =     32 bits                x   2^2 x 2^50
Memory_Required_Per_PgTable =     32 bits                x    4  x 2^50
Memory_Required_Per_PgTable =     128 Petabits

[2]:操作系统概念(第 9 版)- Gagne、Silberschatz 和 Galvin [3]:https://en.wikipedia.org/wiki/32-bit


5
投票

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


5
投票

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


4
投票

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


1
投票

是的,它代表一个进程实际页表占用的空间。

如果每个页面是 4KB -> 12 位偏移(如何?)

1 kb 是 2^10 字节 => 4 kb 是 4*2^10 字节,即 2^12 => 因此 12 位用于偏移,其余 20 位用于 VPN => 2^20 翻译,这意味着 2^20 个页面是否存在这意味着页表中有 2^20 个条目。

因此,页表的大小 = 页表中的条目数 * 一个条目的大小

=> 页表大小 = 2^20 * 4 KB = 2^22 kB 1 MB 为 2^20 KB => 4 MB

© www.soinside.com 2019 - 2024. All rights reserved.