天天看點

i386、i686、IA-32、x86-64、AMD64、EM64T、IA-64

作者:李響

連結:http://www.zhihu.com/question/19573226/answer/14267936

來源:知乎

著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

x86架構首度出現在1978年推出的Intel 8086中央處理器,它是從Intel 8008處理器中發展而來的,而8008則是發展自Intel 4004的。Intel之後又推出了包括80186、80286、80386以及80486。 在設計上,這些後續的處理器使用的指令集都是在8086的基礎上添加新支援的指令進行改進的,是以可以說都是向下相容的(backward compatibie),即能再8086上運作的程式在80486上也一定能運作。由于都是以86結尾(不過8088也是x86),是以把這一系列的指令集稱之為x86指令集(架構)。

準确的來講,x86這一術語并不是指的某一個(具體CPU使用的)具體的指令集,而是在8086(的指令集)基礎上發展而來的所有指令集的泛稱。

實際上,在80486以後Intel推出的絕大多數CPU都是“x86”的,包括Pentium 、Pentium Pro 、Pentium MMX ,Pentium 2 ,還有後面的Pentium 3、Pentium 4 、Pentium D 、Core 全系列,(x86系列的) Xeon。另外,使用x86架構的處理器制造商遠非Intel一家,最著名的就是AMD,其他的還有VIA,Cyrix。具體的産品及特性可以見附錄的表格。可以說,x86架構就是桌面級CPU的标準,你能買到的品牌或者組裝的PC,幾乎沒有不是x86 CPU的。不過雖說都是x86的,但隻能說明使用的指令集是相容8086的,除8086指令集之外的其他指令支援情況就不一樣;其内部實作的微體系結構 microarchitecture 顯然也是各自不同,就好比Linux和Unix雖然都是POSIX相容的OS,都有fork這個系統調用,但是這個調用的實作确實各不相同。

從1985年80386開始,Intel通過對x86架構進行32位的擴充,實作了32位CPU,而之前的都是16位。Intel把支援32位的x86指令集架構命名為IA-32(Intel Architecture 32bit)。

實際上由于32位x86處理器的統治性,術語“x86”幾乎等于IA-32,即32位的x86或x86-32,例如Windows和 Linux發行版的32位命名都是x86(而不是x86-32或IA-32)。後來的“x86-64”名稱也繼續強化了這種約定方式。這裡還是要強調 x86是一系列架構的泛稱,支援16位、32位和64位的指令都有。

該來的還是會來,在1999年,AMD宣布了x86-64架構。其實作方式與之前的80386思路一緻,繼續對IA-32擴充,增加64位通用寄存器、證書預算單元和邏輯操作,支援64位虛位址;向前相容IA-32。 2003年第一款x86-64處理器釋出,AMD Operon。同時AMD也将x86-64正式命名為AMD64。這下Intel徹底2B了(原因後面說),以前都是AMD小弟追随者Intel大哥的腳步,如今AMD先實作了64位民用桌面級CPU。

其實Intel也有其64位計劃,在2004年的IDF上,Intel承認其64位計劃,命名為ia-32e,即ia-32 extension,之後又改成EM64T,Extended Memory 64 Technology,最終命名為Intel64。實際上EM64T與AMD64幾乎相同。早期EM64T不相容AMD64的少量指令,但是由于AMD在64位技術中的領先地位,Intel2005年不得 不宣布将完全相容AMD64。是以現在裝的64位版本作業系統從沒有說是面向Intel還是AMD的。不過在稱謂上,大多數廠商還是使用 x86-64(x86_64,或者就是x64)來稱呼此架構,進而保持中立。

“i386”和”i486″作為Intel 80386和80486處理器的别名是比較顯然的。由于不能使用數字作為注冊商标,而且也需要一個正式的名稱命名,從586開始就變為Pentium了, 這時候i586就作為了最原始Pentium的微處理架構“P5”的别名,同樣的i686對P6(Pentium Pro使用),i786對應P68,或NetBurst架構。

在我看來,在軟體包的命名上使用“i某86”時應該是說适用于使用這一代微架構的CPU。但微架構是硬體上事,是以還是在說明适用對應CPU使用的指令集。比如,i386對應IA-32,并且由于相容性肯定适用于i486~i686;i686不僅适用Pentium Pro,也适用K7架構的Athlon。

前文提到Intel在AMD推出民用64位技術後很被動。其實Intel也有64位x86 CPU的計劃,但是由于對于這個市場的不重視,認為需求不足,一直不見面世。而在對64位需求更加強勁的企業伺服器和高性能計算市場上,1994年 HP就和 Intel合作開始開發一款與 x86架構完全沒關系的全新的IA-64架構。顯然IA-64不相容x86-64更别說IA32,IA64天生就是64位,基于顯式并行指令運算(EPIC)。2001年第一款IA-64架構的處理器Itanium(安騰)釋出。可見,IA-64跟IA-32在實作上沒有什麼關系,跟x86-64也是完全并行的兩種架構,x86架構的Intel的Xeon就是Intel Itanium的競争對手之一。後來Intel把IA-64也幹脆改稱為Intel Itanium架構。

參考和附錄在我部落格原文上有。歡迎通路。