[轉帖]關於內存管理:計算頁表大小

 

 

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所說,我們使用以下公式計算頁表中的頁數:

1
2
3
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:

1
2
3
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

頁表中有多少頁?

1
2
3
4
5
`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中有多少內存?

1
2
3
4
5
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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章