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