x86-64(又稱x64,即英文詞64-bit extended,64位元拓展的簡寫)是一個處理器的指令集架構,基於x86架構的64位元拓展,向後相容於16位元及32位元的x86架構。x64於1999年由AMD設計,AMD首次公開64位元集以擴充給x86,稱為「AMD64」。其後也為英特爾所採用,現時英特爾稱之為「Intel 64」,在之前曾使用過「Clackamas Technology」 (CT)、「IA-32e」及「EM64T」。
蘋果公司和RPM套件管理員以「x86-64」或「x86_64」稱呼此64位元架構。甲骨文公司及Microsoft稱之為「x64」。BSD家族及其他Linux發行版則使用「amd64」,32位元版本則稱為「i386」(或 i486/586/686),Arch Linux及其衍生發行版用x86_64稱呼此64位元架構。
AMD64
AMD64指令集被應用在Athlon 64、Athlon 64 FX、Athlon 64 X2、Turion 64、Turion 64 X2、Opteron、Sempron、Phenom、Athlon II、Phenom II、AMD APU、AMD FX、AMD Ryzen、AMD Epyc等處理器上。
在x86-64出現以前,英特爾與惠普聯合設計出IA-64架構;惟IA-64並不與x86相容,且市場反應較冷淡,同時受制於多個專利權,使其他廠商不能模仿,規模沒有很大。與x86相容的AMD64架構便應運而生,其主要特點如名稱所述,既有支援64位元通用暫存器、64位元整數及邏輯運算、以及64位元虛擬地址,設計人員又為架構作出不少改進,部份重大改變如下:
AMD64代表AMD放棄了跟隨Intel標準的一貫作風,選擇了像把16位元的Intel 8086擴充成32位元的80386般,去把x86架構擴充成64位元版本,且相容原有標準,沒想到比Intel自己發表的64位元架構還要被認同。因為AMD64架構在IA-32上新增了64位元暫存器,並相容早期的16位元和32位元軟件,可使現有以x86為對象的編譯器容易轉為AMD64版本。除此之外,NX bit也是引人注目的特色之一。
不少人認為,像DEC Alpha般的64位元RISC晶片,最終會取代現有過時及多變的x86架構。但事實上,為x86系統而設的應用軟件實在太龐大,成為Alpha不能取代x86的主要原因,AMD64能有效地把x86架構移至64位元的環境,並且能相容原有的x86應用程式,顯然得到了多數開發者的歡迎。
Intel 64
Intel 64指令集被應用於Pentium 4、Pentium D、Pentium Extreme Edition、Celeron、Xeon、Pentium Dual-Core、Intel Core 2、Intel Core i3、Intel Core i5、Intel Core i7及Intel Core i9處理器上。
Intel 64計劃的歷史可謂相當長及複雜,其原因主要是因為Intel自身的內政問題。該計劃開始時,其代號為「Yamhill」,不過Intel一直對外宣稱其計劃不存在;至2004年初,Intel才改口承認,並把代號改為CT(Clackamas Technology)。在宣佈CT計劃的數個星期內,Intel為計劃給予多個新名稱。在2004年春季的Intel開發者討論區後,Intel將之命名為「IA-32E」,意即IA-32的延伸;在數星期後,才改稱為EM64T。
Intel曾長時間把該計劃保持機密,其原因有以下兩點。第一,Intel不想給客戶混淆資訊,把未來Itanium IA-64處理器的展望與x86混為一談;但在Intel眼見使用AMD64的Opteron及Athlon 64取得成功,便需要對競爭者的威脅作出迎擊。而第二個原因,是Intel為了自身的面子,必然不會承認使用了對手AMD的技術,因此Intel把該技術以EM64T這個名字來推出,雖然核心與AMD64幾乎相同,猶如一對孿生兄弟,但如果Intel使用了AMD64這名字,等於在幫對手做廣告宣傳。在以往Intel的行銷中,Intel總把AMD的產品貶為自家技術的仿製品;不過這回AMD率先開發民用64位元技術,Intel需要反過來吸納AMD的技術,使Intel在研發x86處理器技術的領導地位受到重挫,因此Intel在造勢方面便需要使用更多的人力物力。Intel主席Craig Barrett之後也承認,在保密方面,這個機密算是保護得最差的。
在Intel 64(EM64T)的檔案中,對於其指令集的起源隻字不提;因此有媒體為它起了「iAMD64」這個別名,諷刺Intel在迎擊AMD的民用64位元技術上,使用了AMD的技術,直接把AMD64吸納過來,並以新名重新包裝使用。後來Intel索性將此技術正式命名為Intel 64。
Intel 64可使處理器直接存取超過4GB的記憶體,容許執行更大的應用程式。而x86-64架構也加入了額外的暫存器及其他改良在指令集上。透過64位元的記憶體地址上限,其理論記憶體大小上限達16,777,216TB(16EB),不過在初期的應用上並未能支援完整的64位元地址。
Intel在之前已在Itanium處理器上使用了自家的64位元IA-64技術,雖然說Intel 64也是64位元,但兩者並不相容,即IA-64的軟件不能直接在Intel 64上執行。Intel 64所用的x86-64是IA-32指令集的延伸,而IA-64則是另一款獨立的架構,沒有任何IA-32的影子。雖然IA-64可透過模擬來執行IA-32的指令,但指令在執行前需經轉換,才能在IA-64上執行,導致其速度變慢。由於x86-64是從IA-32衍生而來,因此執行IA-32與64位元程式的表現也顯得綽綽有餘。
首顆使用Intel 64技術的處理器屬於Xeon型號,支援雙處理器,其核心名稱為Nocona。由於Xeon是直接建基於桌上型Pentium 4的架構上,因此Pentium 4主機板也可使用Intel 64,如使用超線程(Hyper-Threading)等。不過Intel 64在初期的Prescott版本尚未啟用,其原因大概是當時其尚未完善。在使用Prescott核心E0更新版本的Pentium 4處理器已可使用Intel 64,被稱為Pentium 4 F。再者,E0更新版本加入了「禁止執行」位元,稱為XD bit(eXecute Disable),相當於AMD64的NX bit。
VIA x86-64
VIA在Centaur研發部門五年的研發後,發佈了其第一款x86-64改進架構[1],微架構研發代號"Isaiah", 而64位元微架構於2008年1月24日首次展示[2],並在5月29日以VIA Nano品牌發佈產品。[3]
該處理器支援一類VIA專為提高低功率應用情景下的效率而研發的x86擴充指令集。 Isaiah微架構預計與前一代架構Esther相比,同時鐘頻率下,在整數運算表現上會有兩倍提效能提升升, 浮點運算上會有四倍效能提升。而在功耗上,處理器 TDP設置為5 W到 25 W。[4] 此外,對於前代產品 VIA C7系列尚不支援的x86虛擬化技術,該架構也作了支援,同時也保留了加密擴充。
虛擬地址空間的細節
儘管虛擬地址有64位元的寬度,但目前的實現機制(以及任何已知處在計劃階段的晶片)並不允許整個16EB的虛擬地址空間都被使用。大多數的作業系統和應用程式在可見的未來都用不到如此巨大的地址空間(比如,Windows在AMD64上的實現僅應用了256TB,即48位元的寬度),所以實現如此巨大的地址寬度只會增加系統的複雜度和地址轉換的成本,帶不來任何好處。AMD因此決定,在對這一架構的首次實現中,只有虛擬地址的最低48位元才會在地址轉換(頁表查詢)時被使用。但是,任何虛擬地址的48位元至63位必須與47位一致(按照符號位擴展的方式),否則處理器將會報告一個異常。符合這一規則的地址被稱作「傳統格式」。傳統格式將從0至00007FFF`FFFFFFFF,以及從FFFF8000`00000000至FFFFFFFF`FFFFFFFF總計256TB的地址範圍作為可以使用的虛擬地址空間。
這種「古怪」的規則為日後擴展到真正的64位元尋址保留了一個重要的特性:很多的作業系統(包括但不限於Windows NT系列)將地址空間的高半部分(被稱作內核空間)留給自己,將低半部分(用戶空間)留給應用程式代碼、用戶態棧、堆和其他數據區。這種「傳統地址」的設計保證了每一個符合AMD64的實現都擁有兩個主記憶體片段:低半段從00000000`00000000開始,隨着更多的虛擬地址位元變得可用而「向上生長」;高半部分被「懸掛」在地址空間的頂部而「向下生長」。同樣,將未被使用的地址位元內容固定下來防止被作業系統用作標誌位、特權級標號等其他用途,是爲了避免當架構擴展至52, 56, 60和64位元的時候出現問題。
目前48位元的實現方式 | 57位的實現方式 | 完全64位元的實現方式 |
(非按比例繪製) |
64位元尋址模式(長模式),是實體位址擴展(PAE)的超集;因此,記憶體分頁大小可以是4KB,2MB,或1GB。但是,與系統在PAE模式下使用的三級分頁表機制不同,長模式下系統使用四級分頁表:PAE的頁目錄指針表的表項從4個擴展到了512個,而且附加了一個第四級頁面對映表(Page-Map Level 4 Table,PML4 Table),包含512個採用48位元實現的表項。整個48位元地址空間的4KB頁面完整對映層級將會佔據略多於512GB的記憶體(256TB虛擬地址空間的0.196%)。在提供更大虛擬地址的實現中,這個表被一個更高的對映層級所對映,即第五級頁面對映表(PML5[5]),可以提供52位實體位址(4PiB)和57位虛擬地址(128PiB)的實現。
執行模式
x86-64主要有兩種執行模式:長模式和遺留模式。
執行模式 | 作業系統要求 | 執行代碼類型 | 長度(位元組) | 暫存器堆數 | ||
---|---|---|---|---|---|---|
模式 | 子模式 | 地址 | 運算元 | |||
長模式 | 64位元模式 | 64位元作業系統、64位元UEFI韌體 | 長模式 | 64 | 8, 16, 32, 64 | 16 |
相容模式 | Bootloader或64位元作業系統 | 保護模式 | 32 | 8, 16, 32 | 8 | |
保護模式 | 16 | 8, 16, 32 | 8 | |||
遺留模式 | 保護模式 | Bootloader、32位元作業系統、32位元UEFI韌體 | 保護模式 | 32 | 8, 16, 32 | 8 |
16位元保護模式作業系統 | 保護模式 | 16 | 8, 16, 32 | 8 | ||
虛擬8086模式 | 16位元保護模式或32位元作業系統 | 真實模式的子集 | 16 | 8, 16, 32 | 8 | |
Unreal模式 | Bootloader、真實模式作業系統 | 真實模式 | 16, 20, 32 | 8, 16, 32 | 8 | |
真實模式 | Bootloader、真實模式作業系統 | 真實模式 | 16, 20, 21 | 8, 16, 32 | 8 |
作業系統支援
以下作業系統均支援長模式(long mode)的x86-64架構。
在DOS環境下可透過DOS Extender(例如DOS4GW)來進入保護模式。
FreeBSD在5.1正式版曾為x86-64作試驗,至6.0正式版解決了在x86-64執行32位元程式出現的一些問題,以及能支援不少驅動程式。
Linux在2.6版本的內核開始加入長模式,支援x86-64,能相容32位元程式及模擬32位元系統,容許在32位元的環境下,把程式編譯為64位元版本。
Mac OS X 10.6 Snow Leopard開始提供64位元內核,並可以在部分處理器上打開64位元內核。64位元內核只支援64位元的內核擴充,反之亦然;但對於普通應用程式,無論32位元或64位元內核均可以支援兩種位寬的應用程式,但32位元程式只能使用4GB的主記憶體空間[6][7] 。
Mac OS X 10.5 Leopard在Intel與PowerPC上提供對Cocoa, Quartz, OpenGL與X11的GUI程式的64位元支援[8],並支援全部的命令列庫和程式。但內核仍只有32位元版本。
Mac OS X使用通用二進制檔案格式將32位元和64位元程式和庫代碼包裝在同一檔案中,在載入時自動選擇最合適的版本。在Mac OS X 10.6中,內核和內核擴充也使用通用二進制格式以同時支援兩種構架。
蘋果公司於2018年4月起,在macOS High Sierra作業系統內執行32位元應用程式時,會提醒訊息。並已在2018年6月的WWDC上宣佈macOS Mojave將是最後一版支援32位元應用程式的macOS[9]。
x86-64版本的MenuetOS系統於2005年6月推出,雖然原有的32位元版本Menuet以GPL授權,但x86-64版本則維持專屬,並以免費軟件方式發佈,以及提供部分元件的原始碼。
x86-64版本的NetBSD最早於2001年6月19日被提出,至2004年12月9日推出的NetBSD 2.0已能完全支援x86-64。
OpenBSD自2004年5月1日推出的3.5版起,已支援x86-64。
昇陽的Solaris自版本10開始已支援x86-64。
供用戶端使用的Windows XP Professional x64 Edition以及供伺服器使用的Windows Server 2003 x64 Edition均已於2005年3月推出。Windows Vista、Windows Server 2008、Windows Server 2012、Windows Server 2012 R2、Windows Server 2016、Windows Server 2019、Windows 7、Windows 8、Windows 8.1以及Windows 10均有對應的64位元版本。從Windows Server 2008 R2開始的Windows Server作業系統只提供64位元版本,從Windows 11開始的面向消費者的Windows作業系統只提供64位元版本。
業界稱謂慣例
由於AMD64和Intel64基本上一致,很多軟硬件產品都使用一種不傾向任何一方的詞彙來表明它們對兩種架構的同時相容。出於這個目的,AMD對這種CPU架構的原始稱呼——「x86-64」被不時地使用,還有變體「x86_64」。其他公司如微軟和太陽電腦在行銷資料中使用「x64」作為對「x86-64」的縮寫。
許多作業系統及產品,尤其那些是在Intel進入這塊市場之前就引入「x86-64」支援的,使用「AMD64」或「amd64」同時指代AMD64和Intel64。
- BSD系統(如FreeBSD、NetBSD和OpenBSD)和一些Linux發行版(如Debian、Ubuntu、和Gentoo)將AMD64和Intel64都稱作「amd64」。Red Hat的RPM將x86-64稱為x86_64或x86-64,將32位元的IA-32稱為i*86(*為數字3-6,比如i386)。Arch Linux將x86-64稱為x86_64。
- Fedora PackageKit稱64位元架構為「x86_64」。
- Java Development Kit(JDK):包含x86-64檔案的目錄命名為「amd64」。
- Mac OS X:終端下的命令arch以及開發人員文件都表明蘋果稱64位元架構為「x86_64」。
- Microsoft Windows:稱在IA-32處理器上使用64位元技術為「x64」,但一些相關目錄使用AMD64來標明。例如,Windows x64版安裝CD上的系統目錄命名為「AMD64」,而32位元版本上用「i386」。
- Solaris:作業系統的命令isalist將AMD64和Intel64都定義成「amd64」。
應用產品
以下處理器產品使用了x86-64技術,截至2018年9月,幾乎等同於市場上所有消費級產品皆使用x86-64技術。
- AMD K8 (AMD64)微處理器架構
- AMD Athlon 64
- AMD Athlon 64 X2
- AMD Athlon 64 FX
- AMD Opteron
- AMD Turion 64
- AMD Sempron(限使用E6步進以後的Palermo、全數Manila型號和全數Sparta型號)
- AMD K10微處理器架構
- AMD 推土機微處理器架構
- AMD FX-Series
- AMD Fusion (APU)
- AMD Bobcat微處理器架構的CPU核心
- AMD K10微處理器架構的CPU核心
- AMD Llano
- AMD Ryzen
- Intel NetBurst (Intel 64)
- Intel Xeon(自"Nocona"起的部分型號)
- Celeron D(自"Prescott"起的部分型號)
- Pentium 4(自"Prescott"起的部分型號)
- Pentium D
- Pentium Extreme Edition
- Intel Core微處理器架構
- Intel Xeon ("Woodcrest")
- Intel Core 2
- Intel Pentium Dual-Core
- Intel Celeron
- Intel Nehalem微處理器架構
- Intel Sandy Bridge微處理器架構
- Intel Ivy Bridge微處理器架構
- Intel Haswell微處理器架構
- Intel Broadwell微處理器架構
- Intel Skylake微處理器架構
- Intel Kaby Lake微處理器架構
- Intel Coffee Lake微處理器架構
- Intel Atom(部分)
- VIA/兆芯[10]
- VIA Nano
- ZX-C 系列
- ZX-C+ 系列
- KX-5000 系列
- KX-6000 系列
- KH-20000 系列
- KH-30000系列
參考文獻
參見
外部連結
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.