memory-managementpaging

 

Calculating Page Table Size

 

 

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

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

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

相关讨论

 

 

  • 仅供参考,此行摘自操作系统概念,Avi Silberschatz,Peter Baer Galvin,Greg Gagne-第8版中的8.5.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项才能映射所有可能的页。

 

 


我的解释使用了帮助我理解的基本构建基块。请注意,我利用@Deepak Goyal的答案,因为他提供了明确的信息:

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

 


 

Consider a system with a 32-bit logical address space

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

我们还被告知

each page size is 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_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位计算机的问题。假设他们想要以位为单位的内存。为了解决这个问题,我们将遵循相同的过程,只是要确保将MB转换为Mbit。

让我们逐步看一下这个例子。

纪元:

  • Logical address space: 64-bit
  • Page Size: 4KB
  • Entry_Size_Per_Page: 4 bytes

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

  • 1 KB (kilobyte) = 1 x 1024 bytes = 2^10 bytes
  • Size of each page = 4 x 1024 bytes = 2^2 x 2^10 bytes = 2^12 bytes

页表中有多少页?

`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


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


由于逻辑地址空间是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个数据字节

 

 


 

 

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