最近面試時遇到乙個問題,特意看看有多少人認為cpu的位寬意味著定址能力,結果發現也有相當一部分人被誤導!請注意:2^cpu位寬次方這種計算方法是明顯錯誤的!
系統上也是,一早就有技術支援64g記憶體,只不過微軟為錢,沒在32位的桌面級電腦上允許那項功能!
先講cpu定址能力!
一般廠商標示多少位cpu是說cpu的運算位寬!
而cpu的位寬一般是以 min決定的!也就是說cpu由alu、通用暫存器、資料匯流排三者之中最少的位寬決定!所以cpu位寬與其定址能力並不是掛鉤的!
就正如我上邊提示過的16位cpu能上1m的記憶體(這是本人乙個筆誤,應該是寫8086 cpu),1m剛好是20位,這就已經說明cpu位寬與定址能力不掛鉤!
因此某些**幾年前曾經說過(最近由於與網友中山狐討論開一些問題而講起pae而記起來的),而且在網路上也流傳得比較廣泛的乙個理論:現時cpu都是32位,所以定址能力是2^32=4g這種說法是明顯的錯誤!
再有!有的**曾經說64位cpu最大的好處是支援更大的記憶體這也是乙個典型的錯誤!在amd k8時代引入64位後,amd的u定址位就達到物理定址40多位,而intel在p4 6系列之後物理定址定址能力亦達到40位,這大概是1tb,而如果是64位定址應該是16eb,所以,以cpu位寬衡量cpu定址能力是乙個典型的錯誤!
有乙個細心的人兄還發現其實我這篇文章中貌似是突出了32位這個詞而虛化了cpu這個詞!的確,我就是按當年那些文章那種說法而提出這問題的,目的就是想看看多少人被人誤導!結果在這貼中也看到比例也不在少數(雖然不佔大部分,但是人數也不少!)
事實上cpu定址能力因每種cpu設計不同而不同!就正如說32位的x86cpu,其實就在pentiumii是引入了36位的擴充套件pae機制(physical address extention)位址位來支援64g記憶體(源於當時伺服器的問題),正常情況下也是用32位定址,但通過設定相應的暫存器(沒記錯是cr4)的相應位啟用pae就可以支援64位定址了!
所以,請記住:每個cpu的定址能力是看其設計的!而單純以cpu位寬來看待該cpu定址能力(就是上邊紅色字的那種定址能力為2的cpu位寬的次方的說法是錯誤的!
上邊講到pentiumii通過設定控制暫存器來實現36位定址,而正常情況下就32位定址,而且能與前面的架構相容!
但因為intel面臨伺服器方面記憶體容量問題,就開始想辦法了,於是,設計師開始想辦法,但由於前邊那設計的基礎,他們很快就想到了,加多一級頁表項,並加入相應控制暫存器,對其進行訪問控制!這樣,就可以對前的架構進行相容,又能夠在特殊情況滿足要求哦!這套機制到現時還在用哦,目前最新的x86 cpu(扣肉架構、k8的後代物理定址大概都在40位左右,但要相容32位系統,所以還在用這套機制!)。
講完硬體,當然要講軟體了,系統上一般是如何實現pae呢,當然對硬體方面那聰明的設計是依樣畫葫了,最基本的手段是利用二進位制在高位上增加0對數的大小是沒影響這種想法,在演算法上就直接增加位數來頁表級數並實現虛存管理(這個與虛擬快取有關係,但不相同)!然後對利用嵌入彙編對相應暫存器進行判斷,一但發現不可用就將相應頁置0,嘿嘿,這招好使好用喔!就算64位定址都通殺!這是最基本的,還有其它方面的一些處理!例如設定一些狀態位之類的操作和開了pae後那些頁的資料長度上是有變化的!linux核心就採用這種方法的,微軟的嘛因為非開源,不知道(即使你知道微軟的api,那也僅僅是函式介面,內部實現不可能太清楚)。
再說說關於32位系統開了pae效能會下降這個話題吧!個人結合看過的相關資料認為:如果是4g以下(包含4g),如果開pae,記憶體效能是很有影響的,因為開了pae,在系統上要加多幾級頁目錄,這樣增加了上下文切換,減低效能情況明顯!相對地,因為分頁單元和cpu是同速率執行,因此影響相對是極少極少的!記憶體2g比4g差最主要是因為在作業系統上的問題
32位CPU定址小結
32位cpu 位址線擴充套件成了32位,這和資料線的寬度是一致的。因此,在32位機裡其實並不需要採用 實體地址 段 偏移 這種位址表達方式。原來在16位機裡規定的每乙個段不大於64kb在32位機裡也不是必要的。所以,對於32位機來講,最簡單的方法就是用乙個32位數來標識乙個位元組的儲存位址,定址時只...
記憶體位址 位寬與容量
首先說明一下單位 1k 2 10,1m 2 20 1mb 1m byte 2 20 byte 8 2 20 bit 1mb 1m bit 2 20 bit 儲存容量 定址範圍 x 計算機處理位寬 字長 注意位址一般用十六進製制表示,0x1表示2 1,0x3表示2 2,0x7表示2 3,0xf表示2 ...
位 位元組 半字 字和記憶體位寬
1.記憶體單元大小的單位有 位 bit 位元組 1byte 8bit 半字 記憶體單元位寬的一半 32位系統中為16bit 字 記憶體單元的位寬 32位系統為32bit 位和位元組的大小是固定的,1位永遠是等於1bit,1位元組永遠是等於8bit 2.記憶體位寬 從硬體角度講 硬體記憶體的實現本身是...