Linux 适用硬件平台/系统架构(i386 / i586 / i686 / x86 / x86_64)名词理解和区别
我們在網上下載各種版本的?Linux?OS?時,會經常看到不同版本的系統鏡像名中帶有 i386、i486?、i586、i686、x86x86_64/AMD64,那么這些?i386、i486?、i586、i686、x86、x86_64/AMD64?分別代表什么呢?
i386?是?Intel?80386?架構,Intel?的?80486?是?i486?架構,以此類推,Pentium?是?i586?,Pentium?Pro?(這個不是民用級別的)開始是?i686?架構。
x86_64/AMD64?(簡稱x64)是?x86?架構的?64?位版,也就是?AMD?公司的?x86_64?位架構?amd64?。Intel?的?x86_64?架構稱為“Intel 64”(在這之前曾稱“Clackamas Technology”CT、“IA-32e”、“EM64T”)?,不過這個是兼容?AMD64?架構的。區別只有一個?CPU?指令。這個不同的指令還不是架構必須的。AMD??athlon?64?及以后的?CPU?都是?AMD64?的。至于Intel?的CPU?,Core?系列都是?64?的,但?Pentium?系列只有部分是?64?位的(比如?E5200)。
架構和?CPU?必須一一對應,不過高級架構支持低端架構的,比如?Core?2?Dou?即可以跑?i386、i486、i586、i686?架構的所有系統,也可以跑?AMD64?的架構系統。但老?Pentium4?是?32?Bit?的,可以跑?i386?到?i686?的系統,但不能跑?AMD64?的系統。
相對來說,越高級的架構,性能功能越好,i686?>?i586 > i486 > i386 。
64?位對?32?位程序不兼容,必須通過?64?位內核開啟兼容?32?位支持,內核會去調用?32?位的函數庫運行?32?位程序,這樣同時支持兩個架構才能支持?32?位環境,這會導致支持兩個架構時的系統系統里面必須有兩套完整的系統函數庫。
現在?64?位?Linux?系統對?32?、64?共存的實現很完美,但安裝軟件時最好還是針對當前默認架構選擇,不然兩套相同的系統函數庫同時存在很占地方。
x86、x86_64主要的區別就是32位和64位的問題,x86中只有8個32位通用寄存器,eax,ebx,ecx,edx, ebp, esp, esi, edi。x86_64把這8個通用寄存器擴展成了64位的,并且比x86增加了若干個寄存器(好像增加了8個,變成了總共16個通用寄存器)。同樣的MMX的寄存器的位數和數量也進行了擴展。此外cpu擴展到64位后也能支持更多的內存了,等等許多好處。
對于普通程序來說,CPU位數的擴展、寄存器數量的增加不會帶來明顯的性能提升,比如IE瀏覽器、Office辦公這類的軟件。特定的程序很能夠充分利用64位CPU、更多的寄存器帶來的優勢,比如MMX除了能提升多媒體程序的性能,對矩陣、多項式、向量計算都能帶來提升,更多的MMX寄存器、更大的寄存器字長都有利于SIMD指令的執行,能夠提升CPU對數據的吞吐量(RISC指令集的CPU動不動就有數百個寄存器,可以有效的緩存中間計算結果,不需要把中間結果寫入內存,從而減少內存訪問次數,顯著提升性能)
關于AMD和Intel的歷史趣事:
x86是指intel的開發的一種32位指令集,從386開始時代開始的,一直沿用至今,是一種cisc指令集,所有intel早期的cpu,amd早期的cpu都支持這種指令集,Intel官方文檔里面稱為“IA-32”
x84_64是x86 CPU開始邁向64位的時候,有2選擇:1、向下兼容x86。2、完全重新設計指令集,不兼容x86。AMD搶跑了,比Intel率先制造出了商用的兼容x86的CPU,AMD稱之為AMD64,搶了64位PC的第一桶金,得到了用戶的認同。而Intel選擇了設計一種不兼容x86的全新64為指令集,稱之為IA-64(似乎就是安騰),但是比amd晚了一步,而且IA-64也挺慘淡的,因為是全新設計的CPU,沒有編譯器,也不支持windows(微軟把intel給忽悠了,承諾了會出安騰版windows server版,但是遲遲拿不出東西)。后來不得不在時機落后的情況下也開始支持AMD64的指令集,但是換了個名字,叫x86_64,表示是x86指令集的64擴展(大概是不愿意承認x64是AMD設計出來的)。
也就是說實際上,x86_64, x64和AMD64基本上是同一個東西,我們現在用的intel/amd的桌面級CPU基本上都是x86_64,與之相對的arm, ppc等都不是x86_64。
總結
以上是生活随笔為你收集整理的Linux 适用硬件平台/系统架构(i386 / i586 / i686 / x86 / x86_64)名词理解和区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QT下 cannot find -IGL
- 下一篇: CPU和内存之间——地址映射(理解很重要