Memory management 计算页表大小

Memory management 计算页表大小,memory-management,paging,Memory Management,Paging,我正在阅读一个页面表示例,刚刚发现: 考虑一个具有32位逻辑地址空间的系统。如果这样一个系统中的页面大小为4KB(2^12),那么一个页面表可能包含多达一百万个条目(2^32/2^12)。假设每个条目由4个字节组成,则每个进程可能需要多达4 MB的物理地址空间,仅用于页表。 我真的不明白4MB的结果代表什么。它是否表示实际页表占用的空间?因为我们有一个2^32的虚拟地址空间,并且每个页面大小都2^12,所以我们可以存储(2^32/2^12)=2^20页。由于此页表中的每个条目都有一个大小为4字节

我正在阅读一个页面表示例,刚刚发现:

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


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

因为我们有一个2^32的虚拟地址空间,并且每个页面大小都2^12,所以我们可以存储(2^32/2^12)=2^20页。由于此页表中的每个条目都有一个大小为4字节的地址,因此我们有2^20*4=4MB。因此页表占用内存4MB假设逻辑地址空间为**32位,那么可能的逻辑条目总数为2^32,另一方面假设每个页大小为4字节,则一页的大小为*2^2*2^10=2^12…* 现在我们知道页表中的页数是 pages=可能的逻辑地址条目总数/页面大小 所以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位地址空间(即,我们有一台32位计算机)

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

  • 这意味着每个内存地址可以是32位长
  • “32位条目可以指向2^32个物理页面帧中的一个”[2],以不同的方式表示
我们还被告知

每个页面大小为4KB

  • 1 KB(千字节)=1 x 1024字节=2^10字节
  • 4 x 1024字节=2^2 x 2^10字节=>4KB(即2^12字节)
  • 因此,每个页面的大小为4KB(Kilo字节而不是Kilo
正如Depaak所说,我们使用以下公式计算page表中的页数:

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

让我们逐步完成这个示例

吉文斯:
  • 逻辑地址空间:64位
  • 页面大小:4KB
  • 每个页面的条目大小:4字节
回忆:64位条目可以指向2^64个物理页帧中的一个 -因为页面大小是4KB,所以我们仍然有2^12字节页面大小

  • 1 KB(千字节)=1 x 1024字节=2^10字节
  • 每页大小=4 x 1024字节=2^2 x 2^10字节=2^12字节
页表中有多少页? 每页有多少内存位?
[2] :操作系统概念(第9版)-Gagne、Silberschatz和Galvin

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

仅供参考,这一行来自操作系统概念,Avi Silberschatz,Peter Baer Galvin,Greg Gagne-第8版第8.5.1节。“由于逻辑地址空间为32位,这意味着程序大小为2^32字节??”你刚才不是把位和字节混淆了吗?如果我没有错的话,“逻辑地址空间是32位长”意味着我们最多可以存储2^32个数字,即2^32个内存地址,每个内存地址/位置可以存储1个字节的数据,所以您总共可以存储2^32个字节的数据Hi,感谢您的解释,我不明白:如果页面大小是2^12字节,为什么我们不将其转换为(2^12字节=2^15位)这样的位,然后计算2^32(位)/2^15(位)=2^17(最大可能页数)?为什么要使用字节?@MukhtarBimurat每个地址都指向内存中的一个完整字节。单个位不可寻址。因此,您可以寻址2^32个字节。页表是从虚拟地址空间到物理地址空间的映射。但它不映射单个字节,而是映射成称为页面的块。本例中的页面大小为2^12字节。因此,页面表需要2^32/2^12=2^20个条目来映射所有可能的页面。
`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 `  
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