也許大家對這個問題都不陌生,實際裝過系統用過電腦的朋友可能都有這樣的經歷:自己電腦配的是4g的記憶體條,可是裝完系統之後發現電腦上顯示的只有3.2g左右可用記憶體,其它的記憶體跑到哪去了?網上也有很多朋友給出了一些解釋,大部分我覺得都沒有解釋得很清楚,今天我們就來看一下其中的具體緣由。
在此之前先來了解一些計算機系統結構和pc硬體方面的一些知識。
一.匯流排結構和主機板的構成
說起匯流排大家肯定不陌生,而且大家平時肯定跟它打過交道,我們在用u盤拷貝資料的時候先要把u盤通過usb介面與電腦相連才能拷貝。usb介面實際上就是一種匯流排,一般稱這種匯流排為usb匯流排(也叫做通用序列匯流排)。在很久之前是沒有usb匯流排的,那個時候每個外設各自採用自己的介面標準,舉個最簡單的例子:滑鼠生產廠商採用滑鼠特有的介面,鍵盤生產廠商用鍵盤特有的介面,這樣一來的話,pc機上就必須提供很多介面,這樣一來增加了硬體設計難度和成本,直到後來usb介面的出現,它統一了很多外設介面的標準,不僅使得使用者可以很方便地連線一些外設,更增強了pc的可擴充套件性。所以現在大家看到的滑鼠、鍵盤、u盤、印表機等等這些外設都可以直接通過usb介面直接插到電腦上的。
在計算機系統中匯流排是非常重要的乙個概念,正是因為有了匯流排,所有的組成部件才能一起正常協同分工合作。在很久以前的pc機中,採用的是三匯流排結構,即:資料匯流排、位址匯流排、控制匯流排。它們分別用來傳輸不同型別的資料,資料匯流排用來傳輸資料,位址匯流排用來傳輸位址,控制匯流排用來傳輸一些控制訊號。下面這幅圖很清楚地展示了三匯流排結構:
隨著時代的發展,這種簡單的匯流排結構逐漸被淘汰。下面這幅圖是現代計算採用的結構:
事實上這也是現代主機板所採用的結構,當然可能部分地方有略微不同(大體結構是差不多的),仔細觀察過主機板構成的朋友可能對上面一幅圖很熟悉。在主機板上主要有兩大主要部分:北橋(north bridge也稱host bridge)和南橋(south bridge)。北橋主要負責cpu和記憶體、顯示卡這些部件的資料傳送,而南橋主要負責i/o裝置、外部儲存裝置以及bios之間的通訊。現在有些主機板已經沒有北橋了,因為晶元廠商已經把北橋所負責的功能直接整合到cpu中了(不過暫且我們以上副圖的模型來討論)。
在上副圖中,我沒有畫出 資料匯流排和位址匯流排等,因為在某些匯流排標準中它們被整合到一起了,比如在pci匯流排中,位址匯流排和資料匯流排總是分時復用的(也就是說假如pci匯流排有32位資料匯流排,這32位匯流排在某個時刻可以充當資料匯流排的作用,在下一時刻可以充當位址匯流排的作用)。有的匯流排同時提供了資料匯流排和位址匯流排。
下面來說一下幾個主要匯流排和南北橋的作用:
fsb匯流排:即前端匯流排(front side bus),cpu和北橋之間的橋梁,cpu和北橋傳遞的所有資料必須經過fsb匯流排,可以這麼說fsb匯流排的頻率直接影響到cpu訪問記憶體的速度。
北橋:北橋是cpu和記憶體、顯示卡等部件進行資料交換的唯一橋梁,也就是說cpu想和其他任何部分通訊必須經過北橋。北橋晶元中通常整合的還有記憶體控制器等,用來控制與記憶體的通訊。現在的主機板上已經看不到北橋了,它的功能已經被整合到cpu當中了。
pci匯流排:pci匯流排是一種高效能區域性匯流排,其不受cpu限制,構成了cpu和外設之間的高速通道。比如現在的顯示卡一般都是用的pci插槽,pci匯流排傳輸速度快,能夠很好地讓顯示卡和cpu進行資料交換。
南橋:主要負責i/o裝置之間的通訊,cpu要想訪問外設必須經過南橋晶元。
在了解了這些基礎東西之後,下面來講解一下為何32位系統最大只支援4gb記憶體。
二.來由
在使用計算機時,其最大支援的記憶體是由 作業系統 和 硬體 兩方面決定的。
先說一下硬體方面的因素,在上面已經提到了位址匯流排,在計算機中 cpu的位址匯流排數目 決定了cpu 的 定址 範圍,這種由位址匯流排對應的位址稱作為實體地址。假如cpu有32根位址匯流排(一般情況下32位的cpu的位址匯流排是32位,也有部分32位的cpu位址匯流排是36位的,比如用做伺服器的cpu),那麼提供的可定址實體地址範圍 為 232=4gb(在這裡要注意一點,我們平常所說的32位cpu和64位cpu指的是cpu一次能夠處理的資料寬度,即位寬,不是位址匯流排的數目)。自從64位cpu出現之後,一次便能夠處理64位的資料了,其位址匯流排一般採用的是36位或者40位(即cpu能夠定址的實體地址空間為64gb或者1t)。在cpu訪問其它任何部件的時候,都需要乙個位址,就像乙個快遞員送快遞,沒有位址他是不知道往**送達的,舉個例子,cpu想從視訊記憶體單元讀取資料,必須知道要讀取的視訊記憶體單元的實際實體地址才能實現讀取操作,同樣地,從記憶體條上的記憶體單元讀取資料也需要知道記憶體單元的實體地址。換句話說,cpu訪問任何儲存單元必須知道其實體地址。
使用者在使用計算機時能夠訪問的最大記憶體不單是由cpu位址匯流排的位數決定的,還需要考慮作業系統的實現。實際上使用者在使用計算機時,程序所訪問到的位址是邏輯位址,並不是真實的實體地址,這個邏輯位址是作業系統提供的,cpu在執行指令時需要先將指令的邏輯位址變換為實體地址才能對相應的儲存單元進行資料的讀取或者寫入(注意邏輯位址和實體地址是一一對應的)。
所以當我們裝了32位的windows作業系統,即使我們買了4gb的記憶體條,實際上能被作業系統訪問到的肯定小於4gb,一般情況是3.2gb左右。假如說位址匯流排位數沒有32位,比如說是20位,那麼cpu能夠定址到1mb的實體地址空間,此時作業系統即使能支援4gb的邏輯位址空間並且假設記憶體條是4gb的,能夠被使用者訪問到的空間不會大於1mb(當然此處不考慮虛擬記憶體技術),所以使用者能夠訪問到的最大記憶體空間是由硬體和作業系統兩者共同決定的,兩者都有制約關係。
對於64位的作業系統,其邏輯位址編碼採用的位址位數是40位,能夠最大支援1t的邏輯位址空間。考慮一種情況,假如cpu是64位的,位址匯流排位數是40位,作業系統也是64位的,邏輯位址編碼採用的位址位數也是40位,記憶體條大小是64gb,那麼是不是記憶體條的64gb全部都能被利用了呢?答案是不一定,因為這裡面還要考慮乙個因素就是記憶體控制器,記憶體控制器位於北橋之內(現在基本都是放在cpu裡面了),記憶體控制器的實際連線記憶體的位址線決定了可以支援的記憶體容量,也就是說記憶體控制器與記憶體槽實際連線的位址線如果沒有40位的話,是無法完全利用64gb的記憶體條的儲存空間的。當然對於記憶體控制器這個問題幾乎可以不用考慮,因為現在大多數的記憶體控制器至少都採用的是40位位址匯流排。
32位系統最大只能支援4GB記憶體之由來
也許大家對這個問題都不陌生,實際裝過系統用過電腦的朋友可能都有這樣的經歷 自己電腦配的是4g的記憶體條,可是裝完系統之後發現電腦上顯示的只有3.2g左右可用記憶體,其它的記憶體跑到哪去了?網上也有很多朋友給出了一些解釋,大部分我覺得都沒有解釋得很清楚,今天我們就來看一下其中的具體緣由。在此之前先來了...
32位系統最大只能支援4GB記憶體之由來
也許大家對這個問題都不陌生,實際裝過系統用過電腦的朋友可能都有這樣的經歷 自己電腦配的是4g的記憶體條,可是裝完系統之後發現電腦上顯示的只有3.2g左右可用記憶體,其它的記憶體跑到哪去了?網上也有很多朋友給出了一些解釋,大部分我覺得都沒有解釋得很清楚,今天我們就來看一下其中的具體緣由。在此之前先來了...
32位作業系統使用4GB以上記憶體
一 3gb 方式 1 記憶體分配 從80386開始,出於安全性的考慮 防止使用者訪問並篡改作業系統的關鍵部分 以及考慮到系統的穩定性,該系列的cpu可以執行於ring0至ring3從高到低4個許可權級別,對資料也提供相應的4個保護級別。規則如下 1 執行於較低階別的 不能隨意呼叫高階別的 和訪問高階...