64位的處理器的地址匯流排一定也是64位嗎?

我查到64位處理器的位一般指的是CPU GPRs(General-Purpose Registers,通用寄存器)的數據寬度為64位。但是64位處理器能支持大於4G內存是因為其地址匯流排是64位的,和通用寄存器數據寬度沒有關係。那麼64位的處理器的地址匯流排一定也是64位嗎?同理32位處理器地址匯流排一定也是32位嗎?有沒有32位處理器是64位地址匯流排的?


不一定。

就X86處理器而言。

32位處理器intel從奔騰Pro AMD從速龍加入PAE,將地址擴展到了36位。

64位處理器intel是40位。(intel datasheet寫的39-bit guest physical address and host physical address widths)AMD貌似也是40位,family 15h沒找到。

補充:安騰的話是50位(查於安騰9350 ),Power SPARC ARM等未查。

一般處理器多少位是指的寄存器的長度,當然數據線需要與之相同,地址線則不需要與之相等的。


很少有64為處理器能支持64位物理地址的,原因很簡單,沒那麼大需求。


內存位如果很大,處理起來會很麻煩。

因為內存定址長度並不是一個「數」,而是一個「指針」。過長會導致對應的檢索工作量加大。

所以 x86-64 現在沒有完全 64 位,扔掉了一部分,好像是最高用到 48 位定址,剩餘的最高位必須和 48 位一樣,能定址兩頭空間,也就是扔掉了中間部分。

而 i686 內存有 PAE 擴展,增加了 4 位,但是因為本身還是 32 位為主,多出來的幾位必須做附加的操作後才能用,導致性能因為步驟多了而不加。相對來說更多的是交給系統使用來進行內存頁切換,實際上的程序還是用 32 位內存。


兩位答的已經很棒了 真心覺得這個問題要給那些「電腦愛好者"們好好科普一下!


在X86-64處理器的64為模式,即使沒有用到64位的地址,也要把地址「補齊」至64位,這是該架構的要求。僅代表個人理解。

參考下文:

《Intel? 64 and IA-32 Architectures Software Developer』s Manual》卷一 3.3.7.1

In 64-bit mode, an address is considered to be in canonical form if address bits 63 through to the most-significant implemented bit by the microarchitecture are set to either all ones or all zeros.

Intel 64 architecture defines a 64-bit linear address. Implementations can support less. The first implementation of IA-32 processors with Intel 64 architecture supports a 48-bit linear address. This means a canonical address must have bits 63 through 48 set to zeros or ones (depending on whether bit 47 is a zero or one) .

Although implementations may not use all 64 bits of the linear address, they should check bits 63 through the most-significant implemented bit to see if the address is in canonical form. If a linear-memory reference is not in canonical form, the implementation should generate an exception. In most cases, a general-protection exception (#GP) is generated. However, in the case of explicit or implied stack references, a stack fault (#SS) is generated.


現代計算機都是一非常複雜的系統,裡面會有多種互相橋接,所以你說地址匯流排就不知道說的是什麼了。如果說CPU中跟CPU核直接相連的地址線,那麼答案是不一定,32位CPU可以有PAE,用的匯流排地址線位數多於32位。64位CPU現在市面上的幾乎沒有64位的,都是4x位。

如果說系統匯流排,那就更不是了,x86的QPI匯流排,不區分地址和數據的,都是串列的。如果說DDR介面,它的地址線從來就是十幾二十根的樣子,因為地址是分兩個周期下發的,先發一個行選(包括rank, bank),再發一個列選。


推薦閱讀:

學校各種洗衣卡的工作原理是什麼?
誰了解華燦光電晶元廠,怎麼樣,和三安比呢?
龍芯最新cpu龍芯3A3000能否進入民用市場?
圖中所示的這塊集成電路能否說它是一塊數字集成電路?
台積電在foundry行業的地位,是否意味著台灣在電子行業已經擁有了自己的核心技術?

TAG:操作系統 | 中央處理器CPU | 計算機 | 晶元集成電路 | 64位 |