內存分頁技術可以讓 32 位操作系統管理 4GiB 以上內存,是什麼原因讓系統可用的物理內存容量受限於 4GiB?

分頁技術,已經使物理內存和虛擬內存分離,那麼應該說32位的限制已經體現在虛擬內存上了,那麼物理內存只要和虛擬內存形成映射,只要實現虛擬內存到物理內存的轉換就可以了,為什麼物理內存還收到4GiB的限制呢,不懂


確實,受到32位限制的是虛擬內存,也就是程序能訪問的內存只有32位。

物理內存在啟用PAE的情況下可以突破4G。但由於應用程序訪問的只是虛擬內存,所以即便你有32G,每個單個的32位進程還是只有4G內存。

Windows的server版預設開啟了pae,桌面版沒有開啟。


首先你要知道分頁技術是怎麼實現的。32位地址是被分成三個部分來進行虛擬內存地址到物理內存地址的翻譯的。最高的10位,作為page directory index,其後的10位是page table index,最後的12位是一個4k (4k == 4 * 1024 == 2 ^ 12) 內存頁內的offset。page directory/page table也是個4k的內存頁,10位作為index的話,每個entry就是4個位元組,32位 (4k / 2 ^ 10 = 4)。

翻譯的過程是先用高10位找到page directory裡面的一個對應的entry,然後這個entry裡面包含了一個page table的page number。這個page number對應一個物理頁,然後再用中間的10位找到一個對應的entry。這個entry裡面保存的page number就是最終對應這個虛擬內存的物理內存頁,然後把最後12位的offset加到這個物理內存頁上就得到了一個物理內存地址。

了解以上之後,物理內存的限制就清楚了。從page table的設計中,32位的entry裡面實際上只有20位對應一個page number,再加上最後的12位offset,就可以合成一個32位物理地址。所以物理地址也只有2^32這麼大,也就是4G。另外,32位CPU在不開啟PAE(http://en.wikipedia.org/wiki/Physical_Address_Extension)的情況下,內存匯流排一共就32位,因此4G就限制在那裡了。


這個問題問得毫無邏輯,搞不清楚在問什麼。

物理內存限制是多少,首先當然受物理地址長度的限制,和虛擬地址,分頁什麼的有啥關係?


物理地址確實沒必要限制在4GB範圍內,從Inter Pentium Pro開始可以選擇開啟PAE,這種情況下就可以定址36位物理地址,不過每個進程的虛擬地址空間還是4GB。

只考慮4KB內存頁的情況,開啟PAE後32位虛擬地址按2-9-9-12劃分成四部分,增加的最高兩位是頁目錄指針表索引(PDPTE),頁目錄表索引(PDE)和頁表索引(PTE)分別減一,虛擬地址還是32位。那既然還是2^32,為什麼能索引2^36個物理地址呢?因為頁表基地址和頁幀(Page Frame)基地址都變成了24位,下圖是從Intel手冊摘下來的。

所以整個過程就是從虛擬地址的高2位得到頁目錄表基地址,然後從後面9位得到頁表基地址,再然後從再後9位得到物理內存頁的基地址,這個24位基地址就是物理地址的高24位,最後加上虛擬地址的最低12位頁內偏移,就得到了36位物理內存,Intel的這張圖表示的很清楚了。


因為虛擬內存要大於等於物理內存才有意義。32位系統虛擬內存只能用到4G, 能用的物理內存當然只能比4G小。


推薦閱讀:

台式電腦主機為什麼要那麼大,僅僅是為了散熱?
零基礎如何學習計算機圖形學?
現在1w-1w5的工作對程序員的要求是什麼?
CS 專業未來幾年的前景如何,你怎樣看待?
為什麼解壓縮文件時往往需要先解壓縮到系統盤裡的臨時文件夾下,然後再複製到目標文件夾?

TAG:計算機 | 內存RAM | 虛擬內存 |