2016-08-13 45 views
-3

我有很難計算頁面大小,從下面的鏈接來計算:如何頁表的大小,這裏

http://www.embedded-bits.co.uk/2011/mmucode/

正如我們在此表中知道的頁表項是4個字節長,並且有最大4096項(一個用於地址空間的每個1MB),我們可以計算出表的大小爲16KB

頁表的現在總的大小是4096個條目* 4個字節寬條目= 16384個字節= 16KB

但是從上面開始每個4096條目對應於1 Mb的地址空間,這意味着1條目= 1MB。

由於有4096個條目,存儲它所需的空間是4096MB,但我們只有16kb的頁表大小。

另外,這1MB的節有多少虛擬地址,250000?

編輯:

對不起,如果它從我的結尾會更愚蠢。我試圖再次理解它。這1 Mb的部分是物理內存的一部分,而不是虛擬內存/頁表(這是我之前瞭解的)。

現在每個條目都是4個字節長,這是否意味着4個虛擬地址將覆蓋1 Mb的物理內存部分?

+0

虛擬地址空間的1MB包含_by定義1048576個虛擬地址_...我實在無法理解的問題的其餘部分是什麼,因爲「我們知道一個頁表項佔用了4個字節,並描述了1MB區域是如何映射的,因此4 == 1048576並且我沒有剩餘內存「推理顯然是荒謬的。 – Notlikethat

+0

你能告訴我,你是怎麼計算出來的。 1MB = 1024KB和1024KB = 1024 * 1024字節= 1048576,每個地址佔用4byets,所以虛擬地址= 1048574%4 = 262144? –

+0

什麼?沒有。有4096個虛擬1MB區域,每個區域可映射到4096個物理1MB區域中的一個區域(或者什麼都不是,或者是由2級表格描述的更細粒度的佈局,但我們忽略它)。這就是PTE中12位地址所表示的內容。 VA的較低位形成該虛擬區域的偏移,並且到物理區域的相同偏移產生所得到的PA。見例如[這些插圖](http://infocenter.arm.com/help/topic/com.arm.doc.den0024a/ch12s03.html)(公衆AArch64版本的插圖,但註冊一個帳戶,並獲取ARMv7-A指南細節)。 – Notlikethat

回答

0

不太清楚問題的要求,但在典型的AArch32 MMU中(禁止更新的擴展),您將在典型配置中擁有第一和第二級轉換表。

第一級轉換表將整個地址空間拆分爲1MB段,通常包含指向2級表的指針,這些指針將這些1MB段拆分爲粒度頁(傳統上大多數機器上爲4KB)。第二級轉換表存儲對應於那些虛擬地址的物理地址(每個條目存儲一個物理地址以及一些標誌)。虛擬地址由其在L1和L2表中的位置決定。爲了進一步說明,存儲在頁表中的所有地址(包括L1表中的L2表的地址)是物理

第一級翻譯表具有固定的大小,但取決於您正在運行的體系結構,您可以更改其大小(許多ARM內核使用該大小來提供用戶/內核地址空間拆分)。每個千兆字節的虛擬內存空間需要4096字節頁面大小的L1表中4096字節。

爲了進一步闡明,據我所知,可以使用L1條目直接映射1MB塊而不使用L2表,L1條目的類型用較低的位表示。

(很抱歉,如果我得到了單位後綴錯)