指令集
AMD64指令集被套用在Athlon 64、Athlon 64 FX、Athlon 64 X2、Turion 64、Turion 64 X2、Opteron及較新款的Sempron和Phenom處理器上。
架構特色
在"x86-64"出現以前,英特爾與惠普(Hewlett Packard)聯合設計出"IA-64"架構,惟這款64位架構並不與x86兼容,且市場反應較冷淡,同時受制於多個專利權,使其他廠商不能模仿。與x86兼容的AMD64架構便應運而生,其主要特點如名稱所述,計有支持64位通用暫存器、64位整數及邏輯運算,以及64位虛擬地址。設計人員也為架構作出不少改進,部份重大改變如下:新增暫存器地址闊度加長SSE2、SSE3指令“禁止運行”比特 (NX-bit): AMD64其中一個特色是擁有“禁止運行”(No-Execute, NX)的比特,可以防止蠕蟲病毒以緩衝器滿溢的方式來進行攻擊(也稱:快取溢出攻擊,Buffer Overflow)。市場分析
AMD64代表AMD放棄了跟隨Intel標準的一貫作風,選擇了像把16位的Intel 8086擴充成32位的80386般,去把x86架構擴充成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指令集被套用於Pentium 4、Pentium D、Pentium Extreme Edition、Celeron D、Xeon、Intel Core 2、Intel Core 2 Quad、Intel Core i3、Intel Core i5及Intel Core i7處理器上。概要
Intel 64計畫的歷史可謂相當長及複雜,其原因主要是因為Intel自身的內政問題。該計畫開始時,其代號為Yamhill,不過Intel一直對外宣稱其計畫不存在,至2004年初才改口承認,並把代號改為CT(Clackamas Technology)。在宣布CT計畫的數個星期內,Intel為計畫給予多個新名稱。在2004年春季的IDF開發者論壇後,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索性將此技術正式命名為Intel64。架構特色
Intel 64可使處理器直接訪問超過4GB的存儲器,容許運行更大的應用程式。而x86-64架構也加入了額外的暫存器及其他改良在指令集上。通過64位的存儲器地址上限,其理論存儲器大小上限達16,000,000TB(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。虛擬地址
儘管虛擬地址有64位的寬度,但前的實現機制(以及任何已知處在計畫階段的晶片)並不允許整個16EB的虛擬地址空間都被使用。大多數的作業系統和應用程式在可見的未來都用不到如此巨大的地址空間(比如,Windows在AMD64上的實現僅套用了16TB,即44位的寬度),所以實現如此巨大的地址寬度只會增加系統的複雜度和地址轉換的成本,帶不來任何好處。AMD因此決定,在對這一架構的首次實現中,只有虛擬地址的最低48位才會在地址轉換(頁表查詢)時被使用。但是,任何虛擬地址的48位至63位必須與47位一致(按照符號位擴展的方式),否則處理器將會報告一個異常。符合這一規則的地址被稱作“傳統格式”。傳統格式將從0至00007FFF`FFFFFFFF,以及從FFFF8000`00000000至FFFFFFFF`FFFFFFFF總計256TB的地址範圍作為可以使用的虛擬地址空間。這種“古怪”的規則為日後擴展到真正的64位定址保留了一個重要的特性:很多的作業系統(包括但不限於Windows NT系列)將地址空間的高半部分(被稱作核心空間)留給自己,將低半部分(用戶空間)留給應用程式代碼、用戶態棧、堆和其他數據區。這種“傳統地址”的設計保證了每一個符合AMD64的實現都擁有兩個記憶體片段:低半段從00000000`00000000開始,隨著更多的虛擬地址比特變得可用而“向上生長”;高半部分被“懸掛”在地址空間的頂部而“向下生長”。同樣,將未被使用的地址比特內容固定下來防止被作業系統用作標誌位、特權級標號等其他用途,是為了避免當架構擴展至52, 56, 60和64位的時候出現問題。64位定址模式(長模式),是物理地址擴展(PAE)的超集;因此,記憶體頁大小可以是4KB,2MB,或1GB。但是,與系統在PAE模式下使用的三級標籤頁表機制不同,長模式下系統使用四級標籤頁表:PAE的頁目錄指針表的表項從4個擴展到了512個,而且附加了一個第四級頁面映射表(Page-Map Level 4 Table,PML4 Table),包含512個採用48位實現的表項。在提供更大虛擬地址的實現中,這個表既可以進行擴展來提供足夠數量的表項(對於64位實現來說理論值高達33,554,432個)以描述整個地址空間,也可以再被一個更高層映射級所映射,像是PML5。整個48位地址空間的4KB頁面完整映射層級將會占據略多於512GB的記憶體(256TB虛擬地址空間的0.196%)。運行模式
系統支持
以下作業系統均支持長模式(long mode)的x86-64架構。DOS在DOS環境下可通過DOS Extender(例如DOS4GW)來進入保護模式。FreeBSDFreeBSD在5.1正式版曾為x86-64作試驗,至6.0正式版解決了在x86-64運行32位程式出現的一些問題,以及能支持不少驅動程式。LinuxLinux在2.6版本的核心開始加入長模式,支持x86-64,能兼容32位程式及模擬32位系統,容許在32位的環境下,把程式編譯為64位版本。Mac OS XMac OS X 10.6 Snow Leopard開始提供64位核心,並可以在部分處理器上打開64位核心。64位核心只支持64位的核心擴展,反之亦然;但對於普通應用程式,無論32位或64位核心均可以支持兩種位寬的應用程式,但32位程式只能使用4GB的記憶體空間。Mac OS X 10.5 Leopard在Intel與PowerPC上提供對Cocoa, Quartz, OpenGL與X11的GUI程式的64位支持,並支持全部的命令行庫和程式。但核心仍只有32位版本。Mac OS X使用通用二進制檔案格式將32位和64位程式和庫代碼包裝在同一檔案中,在載入時自動選擇最合適的版本。在Mac OS X 10.6中,核心和核心擴展也使用通用二進制格式以同時支持兩種構架。MenuetOSx86-64版本的MenuetOS系統於2005年6月推出,雖然原有的32位版本Menuet以GPL授權,但x86-64版本則維持專屬,並以免費軟體方式發布,以及提供部分組件的原始碼。NetBSDx86-64版本的NetBSD最早於2001年6月19日被提出,至2004年12月9日推出的NetBSD 2.0已能完全支持x86-64。OpenBSDOpenBSD自2004年5月1日推出的3.5版起,已支持x86-64。Solari昇陽的Solaris自版本10開始已支持x86-64。Window供客戶端使用的Windows XP Professional x64 Edition以及供伺服器使用的Windows Server 2003 SP1 x64 Edition均已於2005年3月推出。Windows Vista、Windows Server 2008、Windows 7以Windows 8及均有對應的64位版本.Windows Server 2008 R2只提供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”。
FedoraPackageKit稱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技術。AMDK8(AMD64)微處理器架構
AMDAthlon64
AMDAthlon64X2
AMDAthlon64FX
AMDOpteron
AMDTurion64
AMDSempron(限使用E6步進以後的Palermo、全數Manila型號和全數Sparta型號)
AMDK10微處理器架構
AMDPhenom
AMDBulldozer微處理器架構
AMDFX-Series
AMDAMDFusion(APU)
AMDBobcat微處理器架構的CPU核心
AMDOntario
AMDZacate
AMDK10微處理器架構的CPU核心
AMDLlano
IntelNetBurst(Intel64)
Xeon(自"Nocona"起的部分型號)
CeleronD(自"Prescott"起的部分型號)
Pentium4(自"Prescott"起的部分型號)
PentiumD
PentiumExtremeEdition
IntelCore微處理器架構
Xeon("Woodcrest")
IntelCore2
IntelPentiumDual-Core
IntelCeleron(自"Core"起的型號)
IntelNehalem微處理器架構
IntelCorei7
IntelCorei5
IntelCorei3
IntelSandyBridge微處理器架構
IntelCorei7
IntelCorei5
IntelCorei3
IntelAtom(部分)