计算页面大小

min*_*ino 37 paging memory-management

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

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

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

min*_*ino 58

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

  • @MukhtarBimurat 每个地址都指向内存中的一个完整字节。单个位不可寻址。所以你可以寻址 2^32 个字节。页表是从虚拟地址空间到物理地址空间的映射。但它不映射单个字节,而是映射为称为页的块。此示例中的页面大小为 2^12 字节。因此,您的页表需要 2^32/2^12=2^20 个条目来映射所有可能的页面。 (2认同)

小智 15

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

我们获得了一个逻辑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(千字节不是千).

正如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) 
Run Code Online (Sandbox Code Playgroud)

作者继续给出了页表中每个条目占用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)
Run Code Online (Sandbox Code Playgroud)

所以是的,每个进程都需要至少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×1024字节= 2 ^ 2×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 `  
Run Code Online (Sandbox Code Playgroud)

每页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
Run Code Online (Sandbox Code Playgroud)

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


小智 5

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


小智 5

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