32位CPU不支援4GB+記憶體? 終於搞懂了

本文經超能網授權轉載, 其它媒體轉載請經超能網同意

今天給大家科普一個, 那就是 記憶體定址能力與CPU的位寬有關係嗎?

答案是 沒有關係.

這個問題以訛傳訛了很多人, 傳了很久, 確實有必要說說.

CPU的定址能力與它的地址匯流排位寬有關, 而我們通常說的CPU位寬指的是數據匯流排位寬, 它和地址匯流排位寬半毛錢關係也沒有, 自然也與定址能力無關.

簡單的說, CPU位寬指的是一個時鐘周期內CPU能處理的二進位位數, 如8086 CPU是16位的, 可以一次處理2個位元組 (16個bit) , 80386 CPU是32位, 能一次處理4個位元組, 目前的CPU基本上64位的了, 一次能處理8個位元組.

我們的Windows作業系統也分為32位和64位, 主要是針對上面CPU的位寬做了些優化, 比如32位的CPU就不能用64位的Windows (因為CPU一次只能處理32bit, 而作業系統給你的指令是要處理64bit) , 但64位的CPU就可以運行32位的Windows, 也能運行64位Windows.

那CPU的地址匯流排位寬到底是個什麼鬼?

Intel的解釋是Physical Address Extensions (PAE) is a feature that allows 32-bit processors to access a physical address space larger than 4 gigabytes.

上面圖片是Intel Xeon E5-2698 v3的截圖, 專門就擴展物理地址作了說明, 大意就是說這個是為了讓32位的處理器能使用超過4GB的記憶體.

這個PAE就是CPU的地址匯流排位寬. 在8086這個16位CPU上, 它的地址匯流排位寬是20位, 正好能定址1MB, 80286它的PAE是24位, 在Pentium II (32位CPU) 時這個PAE變成了36位, 可以支援64GB的定址.

64位CPU出現之後, 其地址匯流排位寬一般採用的是36位或者40位, 它們定址的物理地址空間為64GB或者1T.

那地址匯流排和數據匯流排有什麼關係? 可以這麼理解, 地址匯流排用來定位, 數據匯流排用來傳輸, 也就是當CPU需要從記憶體讀取數據或向記憶體寫入數據時, 它使用地址匯流排來指定其需要訪問的存儲器塊的物理地址, 然後通過數據匯流排發送數據.

所以說, CPU的位寬和定址能力是沒有關係的, 16位CPU的地址匯流排位寬可以是20位, 32位CPU的地址匯流排可以是36位, 64位CPU的地址匯流排位寬可以是40位. 所以你下次一定不要說32位的CPU只能定址2^32(4GB)了, 大錯特錯.

那作業系統的位寬和定址能力有什麼關係嗎, 這個其實還是有的. 我們在使用計算機時, 操縱的其實是邏輯地址, 32位作業系統的邏輯地址定址範圍只有2^32=4GB.

所以, 不管你用什麼樣的CPU, 它最多也只支援4GB的記憶體容量, 但 這是作業系統的鍋, 並不是說32位CPU只能定址4GB空間. 可能是在這兒容易引起錯覺, 一定要還CPU一個清白.

2016 GoodChinaBrand | ICP: 12011751 | China Exports