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