2013-03-26 168 views
11

我正在學習不同類型的內存管理。我不明白在虛擬地址中有一個偏移位。還有爲什麼頁面大小是2的權力?頁碼和偏移量

我的主要困惑是: 給我一個在指令中用來訪問某個虛擬地址的偏移量的例子嗎?

我的第二個疑惑是: 通常的說法是,如果邏輯地址的大小是2^m,頁大小是2^n,那麼邏輯地址的高位m-n位指定頁碼。

在此先感謝

回答

22

我認爲主要和次要混亂關於這個問題是由於一般的混亂:)

讓我談談解決此一點,希望我能有一定的幫助。首先,一個類比 - 想象你正試圖在一個城市找到一棟房子。想象一下,每棟房屋都有一個獨特的數字 - 你可以想象房屋的數量很快就會變得非常龐大而令人困惑。現在想象一下,你介紹街道的概念 - 房屋號碼現在變得有點可管理,因爲你已經把它們分成了很多塊。所以:街道=頁碼,門牌號碼=偏移地址。

擁有虛擬內存頁面的關鍵在於允許計算機將內存分割成可管理的塊,而不會浪費太多內存。將它分成塊(頁)可以對訪問,分頁和其他好東西進行精細控制。頁面越小,你將浪費的內存越少(如果進程A需要32k的內存,並且頁面大小爲64k,那麼最終會得到一些不被使用的內存),但是更高的內存系統開銷。

至於爲什麼頁面大小是2的冪,這是在地址內沒有浪費的空間。由於計算機基於二進制(目前),所有事情都傾向於歸結爲2的權力。想象一下,如果你有基於10的因素的東西。二進制的10是1010 - 你必須用4位來保存它,那麼爲什麼不選擇4位的全部值:0000 - 1111(0到15 = 16個值)。

對不起,我已經有點wa - 了 - 我希望這會把你推向正確的方向!

+0

非常感謝GHC,但我想看看的是程序集指令如何查看偏移量。 ld r2,0x0005也是如此。假定每個地址都是字大小的,並且每個頁面大小都是4個字節。所以在這種情況下,偏移量將是1個字節? 。 – user1493786 2013-03-26 14:50:33

+2

另外我在回覆之前做了一些研究,我們使用2的冪的原因是,當我們按照頁面大小劃分虛擬地址時,你會得到頁面號和偏移量,就像地址將是頁碼,後面的n位將成爲偏移量。雖然如果它不是2的冪,那麼劃分虛擬地址以定位頁碼和偏移需要%和/函數,這爲系統增加了開銷。 – user1493786 2013-03-26 14:54:59

+0

通過頁表虛擬到物理地址轉換具有另一個好處:它減輕了由於虛擬地址空間碎片導致的物理內存浪費。 – 2013-03-26 18:59:25

-1

我有同樣的困惑,但如果我已經理解了它的權利,那麼它就像下面這樣:除了對主題的一般理解之外,2例的權力稍微有些微。這更像是一個約定,因爲我們正在處理二進制值,並且需要適當地適合2的冪的比特之間的適當的劃分。

例如,如果一個具有PGE 64k字和每幀有4個字,然後2^X = 64 - > X = 6

這意味着每一幀可具有構成6個二進制值,即物理地址0或1,其中4將表示幀號。並且最後表示該單詞的確切位置在4.

請注意,這裏每個幀不能有5或任何其他值或所謂的約定失敗。

+0

您需要在SO上編寫適當的英文。 – 2016-10-23 17:30:24