x64
x64またはx86-64とは、x86アーキテクチャを64ビットに拡張した命令セットアーキテクチャ。
実際には、AMDが発表したAMD64命令セット、続けてインテルが採用したIntel 64命令セット(かつてEM64TまたはIA-32eと呼ばれていた)などを含む、各社の互換命令セットの総称である。x86命令セットと互換性を持っていることから、広義にはx86にx64を含む場合がある。
なお、インテルはIntel 64の他にIA-64の名前で64ビット命令セットアーキテクチャを開発・展開しているが、これはx64命令セット、x86命令セットのいずれとも互換性がない。
目次 |
[編集] 概要
この命令セットアーキテクチャは、元々AMDがx86-64の名前で仕様を発表したものが元になっている。AMDは2003年にAMD64と名前を改めて実装しており[1]、インテルもAMD64の互換命令セットをEM64T(後にIntel 64と改称)として実装した。現在ではVIAがこれに続いている。
このような経緯もあり、ソフトウェアの対応命令セットの表記には、採用時期またはマイクロプロセッサベンダーとの立場などから、x86-64(x86_64), x64, AMD64, IA-32e, EM64T, Intel 64など複数の名称が用いられている。実際には、これらは全てAMD64(x86-64)を源流とする互換命令セットを指している。
特に「x64」の名称はマイクロプロセッサベンダーに中立的な用語として用いられる傾向がある。著名な例ではオラクルに買収されたサン・マイクロシステムズ[2]や、マイクロソフト[3]なども「x64」の用語を使用している。
仕様等については、本記事#AMD64の節で説明する。
[編集] AMD64
AMD64は、AMDのOpteron、Athlon 64、Turion 64など最初に実装されたK8マイクロアーキテクチャとその後継製品に実装されている。
[編集] 開発経緯
PC用アーキテクチャとして広く普及したx86は、半導体の製造技術とマイクロアーキテクチャの革新とともに性能の向上を続け、サーバやワークステーションといったエントリークラスのエンタープライズ市場でも広く受け入れられるに至った。しかし、IA-32の性能向上によって自社開発の64ビットアーキテクチャであるIA-64との競合を懸念したインテルは、x86の拡張を32ビットアーキテクチャの範囲に留めてIA-64との棲み分けを図った。これに対し、市場からは広く普及したIA-32アーキテクチャと互換性を保ちつつ64ビットに拡張した、よりコストパフォーマンスに優れたエンタープライズ製品の登場が待ち望まれていた。高収益を望めるエンタープライズ市場への進出を図っていたAMDはそうした需要に応えて、x86の64ビット拡張アーキテクチャとして、従来のIA-32のソフトウェアも利用が可能な命令セットとしてx86-64を発表した。その後の実際の製品発表でAMD64と改称された。この計画は、2000年8月に発表され、最初のプロセッサは2003年4月に出荷された。
[編集] 仕様
64ビットの汎用レジスタを持ち、32ビットのx86より広い物理および仮想のアドレス空間をサポートするため、プログラムが大きいデータをより容易に操作する事が可能である。またx64は32ビットのプログラムコードと完全な後方互換性を持つ[4]。全ての32ビットの命令セットが、エミュレーションを介在せずにハードウェア上に実装され続けているため、32ビットのx86実行ファイルは、互換性上あるいは性能上の損失なしに稼動できる[5]。ただし、既存のアプリケーションソフトウェアが性能向上を可能にするプロセッサ設計上の新機能を使用するには、再コード化が必要である。
[編集] アーキテクチャの特徴
AMD64命令セットには、インテルのIA-32アーキテクチャに指摘されるアンバランスで特異な部分を、きれいで使いやすいものにするという目論見があった。また、同時に先行している 64ビットRISC環境に似せたアーキテクチャにしようと考えて設計された。DEC Alpha の設計者の一人 ダーク・メイヤー が AMD64仕様の作成に関わり、彼をはじめとするDEC出身者の経験がこのプロジェクトに活かされた。特筆すべき点は以下のようなものである。
- レジスタの追加と拡張
- 汎用レジスタ (GPR) 数はIA-32の8本 (EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP) に更にR8〜R15の8本を追加して16本に増やされ、各レジスタのビット幅も32ビットから64ビットに拡張された。IA-32は汎用レジスタが少ないことからコンパイラによる最適化に限界があり、これが最も大きな欠点とされた。AMD64に最適化されたアプリケーションでは、レジスタ本数の増加によって性能向上が見込まれ、特に深いループを持った演算主体のソフトウェアでその傾向が強いと見込まれる。さらに128ビットのXMMレジスタの本数も8本から16本に増やされた(Streaming SIMD命令で使われる)。
- アドレス空間の拡張
- AMD64アーキテクチャでは、現状の実装で48ビットのアドレス空間を持ち、256テラバイトまでのメモリを扱うことが出来る。IA-32アーキテクチャにおいて初期のプロセッサでは、アドレス空間は32ビットで表現できる4GiBに制約され、Pentium Pro以降の実装で追加された物理アドレス拡張機能を使用することで64GiBのメモリを接続できるが、1プロセスで利用可能なメモリ空間はやはり4GiBに制約された。32bit版Windowsシリーズにおいては、OSの仕様でアプリケーションが利用可能なメモリはおよそ3GiBに制約される[6]。これに対しAMD64のLongモードでは、IA-32の物理アドレス拡張をベースに、論理アドレス空間を48ビットへ拡張し(現状物理アドレス空間は52ビット)、将来の拡張で4エクサバイトまでの仮想空間をサポートできるようになっている。
- 関連:2進接頭辞
- RIP相対データアクセス
- プログラムカウンタ (RIP) 相対でデータにアクセスすることができ、リロケータブルな共有ライブラリのコードを作成できる。また、共有ライブラリを仮想アドレス空間のどこにでも配置することができる。
- SSE 命令
- AMD64アーキテクチャでは明確にインテルのSSEとSSE2を基本命令セットに組み込んでいる。SSE2はx87の80ビット浮動小数点数から 32ビット/64ビットの浮動小数点数に置き換えたものである。SSE/SSE2命令セットは追加の8本のXMMレジスタを扱えるように拡張された。SSEとSSE2がAMD64命令セットに組み込まれており、それが従来のx87 FPUやMMXや3DNow!の機能をカバーする。x64版Windowsでの64ビットプログラムでは、FPU/MMXレジスタをコンテキストスイッチの際に保存しないようにすると噂されたが、実際には保存されるようになっている[1]。
[編集] 動作モード
| 動作モード | 必要なOS | 再コンパイルの必要性 | アドレスサイズの既定値 | オペランドサイズの既定値 | レジスタの拡張 | 典型的な汎用レジスタの幅 | |
|---|---|---|---|---|---|---|---|
| Long モード | 64ビット モード | 新しい 64ビットOS | 必要 | 64 | 32 | 有り | 64 |
| 互換モード | 不要 | 32 | 32 | なし | 32 | ||
| 16 | 16 | 16 | |||||
| Legacy モード | プロテクト モード | 従来の 16/32ビットOS | 不要 | 32 | 32 | なし | 32 |
| 16 | 16 | ||||||
| 仮想8086 モード | 16 | 16 | 16 | ||||
| リアル モード | 従来の 16ビットOS | ||||||
このアーキテクチャは、LongモードとLegacyモードという二つの動作モードを持つ。
[編集] Long モード
AMD64で拡張された部分に対応する動作モードである。これにはネイティブの64ビットモードと互換のための32ビットモードが含まれる。IA-32でのマイナーな動作モードはサポートされない。このモードは64ビットのOSで使用される。
基本的な命令セットは同じなので、x86コードを実行しても性能が低下することはない。インテルのIA-64では32ビットコードの性能低下が問題となったが、これは命令セットが全く違うためにエミュレート実行していたためである。一方、AMD64では32ビットのx86用アプリケーションを再コンパイルすれば(レジスタが増えているため)性能が向上する。
Long モードを使うと、64ビットOSは 32ビットアプリケーションと64ビットアプリケーションを並行して実行できる。また、AMD64は 16ビットのアプリケーションも実行することができる。しかし、Windowsの16ビットアプリケーション (Win16) のサポートに欠かせない仮想86モードは使用できないため、マイクロソフトは WOW64サブシステムでの16ビットアプリケーションの実行機能の実装を断念し、Windows XP Professional x64 Edition でのWin16アプリケーション実行をサポートしていない。これはWindows Vista以降のx64版にも引き継がれる制限となっている。
詳細は「Windows_NT系#Win16サブシステム」および「仮想DOSマシン#NT系での仮想DOSマシン」を参照
[編集] Legacy モード
16ビットOS(MS-DOS - Windows 3.1等)や32ビットOS(Windows 95 - Windows XP等)で使われるモード。このモードでは、64ビットのプログラムは動作できない。IA-32互換。
[編集] AMD64を採用するCPU
次のプロセッサは、AMD64を実装する:
- AMD Athlon 64
- AMD Athlon 64 X2
- AMD Athlon 64 FX
- AMD Athlon II (搭載コア数などから、'X2', 'X3', 'X4', XLTモデルに分かれる)
- AMD Opteron
- AMD Turion 64
- AMD Turion 64 X2
- AMD Sempron ("Palermo" E6 ステッピングと、全ての"Manila"モデル)
- AMD Phenom (搭載コア数から、'X3', 'X4'に分かれる)
- AMD Phenom II (搭載コア数から、'X2', 'X3', 'X4' 'X6'に分かれる)
- AMD Bulldozer (マイクロアーキテクチャ) FX
[編集] Intel 64
Intel 64は、IA-32アーキテクチャの64ビット拡張であり、インテルによるx86-64の実装である。
インテルは、x86-64互換命令セットをIA-32に分類しており、IA-32の拡張を意味するIA-32e、EM64T (Extended Memory 64-bit Technology)などの名称を用いた。現在は「Intel 64」の名称に落ち着いており、これらは全て同じものを指している。
[編集] 開発経緯
従来、AMDはインテルがオリジナルであるx86の互換プロセッサを開発・生産していた。しかし、x86-64では立場が逆転し、インテルはAMDが開発した、インテルによるx86プロセッサの拡張アーキテクチャを採用した。
当初プロジェクトは、Yamhill[7]というコード名で始まった。このプロジェクトの存在を否定し続けて数年が経ち、2004年2月のIDFで、インテルはプロジェクトが進行中である事を発表した。インテルの当時の会長クレイグ・バレットは、これが重要な機密の一つであった事を認めた[8][9]。
インテルによるこの命令セットの名称は、今日までに数回の変更を経ている。IDFで用いられた名前は CT(Clackamas Technology[10])、その数週間後に IA-32e (for IA-32 extensions) と呼称を変更し、2004年4月にはこれを EM64T (Extended Memory 64 Technology) という名前を公式に発表した。製品リリース後の2006年7月27日には、インテルはEM64TをIntel 64と改称している[11]。
[編集] Intel 64を採用するCPU
インテルで最初にIntel 64を実装したのは、Noconaというコード名で2004年6月に発表されたマルチソケットのXeonプロセッサである。Xeonはデスクトップ向け Pentium 4 をベースにしているため、同時期の Pentium 4 もIntel 64を実装しているはずだが、ハイパースレッディング・テクノロジーのときと同様、この機能は Prescott では最初は動かないようになっていた。これはおそらく初期の実装が完全ではなかったためで、インテルはその後Intel 64を使用可能にしたPrescottのE0バージョンを model F として販売し始めた。このバージョンではAMD64の NXビットに相当する機能がIntel 64でサポートされた。インテルではこれを eXecute Disable (XD) ビットと呼んでいる。この機能はすぐに Nocona(Xeon系列)にも実装された。8xx/6xx/5x6/5x1/3x6/3x1シリーズのCPUは全てIntel 64が使用可能になった。また、Intel Core 2・Intel AtomでもIntel 64が採用された。
Intel 64を実装しているCPUは以下のものがある。
- Xeon (Nocona以降、Sossaman除、Xeon MPについてはCranford/Potomac以降)
- Intel Core 2
- Intel Core i7
- Intel Core i5
- Intel Core i3
- Pentium Dual-Core
- Intel Atom (model 230/330,N450/D510/D410)
- Pentium D
- Pentium 4 (Prescottはmodel F以降、model 521/531/541/551/561/571)
- Pentium Extreme Edition
- Celeron D (model 326/331/336/341/346/351/355/356)
- Celeron Dual-Core
- Celeron M (model 520/530)
- Celeron 200シリーズ(model 220)
- Celeron 400シリーズ
- Celeron 500シリーズ
[編集] VIAによるx64の実装
VIA Nanoにおいて、x64互換命令セットであるVIA Isaiahアーキテクチャが採用されている。
[編集] AMD64とIntel64の差異
[編集] オペレーティングシステムの互換性と扱い
次のオペレーティングシステムは、x86-64アーキテクチャのLong modeをサポートする。
[編集] BSD
[編集] DOS
[編集] Linux
2001年、LinuxはLong modeでx86-64アーキテクチャを動作させる初めてのオペレーティングシステム・カーネルとなり、起動にはkernel 2.4が用いられた。Linuxは32ビット実行可能ファイルの実行に関して後方互換を保っている。
[編集] Mac OS X
Mac OS X 10.4のうちv10.4.7及びそれよりも高いバージョンは、64ビットのインテルベースマシン上でPOSIX及び数学ライブラリを用いて64ビットコマンドラインツールが起動する。Mac OS X 10.4において、これ以外のライブラリ、フレームワークは、64ビットアプリケーションをサポートしない。このカーネル、およびカーネル拡張は32ビットのみである。
Mac OS X v10.5は、64ビットのPowerPCマシン同様に、64ビットのインテルベース・マシンにおいてCocoa, Quartz, OpenGL, そしてX11を用いたGUIアプリケーションをサポートした。全ての非GUIライブラリとフレームワークは、このプラットフォームで64ビットアプリケーションをサポートしている。このカーネル、そして全てのカーネル拡張は、32ビットのみである。
Mac OS X x10.6は、64ビットカーネルをサポートしたMac OS Xの最初のバージョンである。しかし、最初のリリース(v10.6.0)では、全ての64ビットコンピュータをサポートされなかった。64ビットカーネルは、32ビットカーネル同様に32ビットアプリケーションをサポートし、それぞれのカーネルも同様に64ビットアプリケーションをサポートした。32ビットアプリケーションは、いずれのカーネルにおいても仮想アドレス空間が4GBであるという制限があった。 64ビットカーネルは32ビットカーネル拡張をサポートせず、同様に32ビットカーネルは64ビットカーネル拡張をサポートしない。
この時期のMacは、x86/x64の32ビット・64ビットだけでなく、PowerPCとインテル・アーキテクチャのサポートなど、アーキテクチャの互換性問題が複雑に入り組んでいた為、ユーザが混乱しない為にOSレベルでユニバーサルバイナリなどの仕組みが整えられた。これは、一つのアプリケーションファイル、またはライブラリファイルに対して複数のコードをパッケージし、実行時に最適なバージョンが選択されるというものである。
[編集] Solaris
Solaris 10及びそれ以降のリリースでは、x86-64アーキテクチャをサポートする。SPARCアーキテクチャ同様に、32ビットと64ビットのx86システムに同じオペレーティングシステム・イメージが準備されており、DVD-ROMイメージには「x64/x86」とラベルされている。
標準では64ビット・カーネルが起動するように振る舞い、64ビットと32ビット両方の実行可能ファイルが動作する。32ビット・カーネルは前宅的に利用可能で、この場合32ビットの実行可能ファイルのみが動作する。「isainfo」コマンドを利用することで、システムが64ビットで動作しているかどうかを調べられる。
[編集] Windows
Microsoft Windowsは、2005年4月(日本においては6月)にWindows XP Professional x64 Edition(クライアント版)、Windows Server 2003 x64 Editionをリリースし、x64に対応した。どちらもWindows Server 2003をベースとしており、ビルド番号も同じであり(5.2.3790.1830 SP1)、かつてのWindows 2000 ProfessionalとServer同様にシステムアップデートも統一されていた。Windows XPのメジャーバージョンが5.1である事からも分かる通り、Windows XP Professional x64 Editionは、Windows XPというよりWindows Server 2003のクライアント版という位置付けに近い。
Windows Vistaは2007年1月に、Windows 7は2009年7月にリリースされ、いずれもx86、x64の両方をサポートしている。現在のところ、クライアント版のx86サポートが打ち切られる様子は見られない。
Windows Server 2008は2008年2月にリリースされ、x86、x64に加えて、IA-64もItanium版としてサポートしている。
Windows Server 2008 R2ではx86版のリリースが打ち切られ、x64とItanium版のみのリリースとなった。Itanium版もこの版が最終リリースとなることが決定しており、これ以降はx64版だけがリリースされる事になる。
[編集] 脚注
- ^ Rust, Adamson (2003年4月24日). “AMD bans use of Hammer word, X86-64”. The Inquirer. 2010年10月30日閲覧。
- ^ “Solaris 10 on AMD Opteron”. Oracle. 2010年12月9日閲覧。
- ^ “Microsoft 64-Bit Computing”. Microsoft. 2010年12月9日閲覧。
- ^ AMD Corporation (2011年5月). “Volume 2: System Programming (pdf)”. AMD64 Architecture Programmer's Manual. AMD Corporation. 2011年10月29日閲覧。
- ^ IBM Corporation (2007年9月6日). “IBM WebSphere Application Server 64-bit Performance Demystified”. p. 14. 2010年4月9日閲覧。 “"Figures 5, 6 and 7 also show the 32-bit version of WAS runs applications at full native hardware performance on the POWER and x86-64 platforms. Unlike some 64-bit processor architectures, the POWER and x86-64 hardware does not emulate 32-bit mode. Therefore applications that do not benefit from 64-bit features can run with full performance on the 32-bit version of WebSphere running on the above mentioned 64-bit platforms."”
- ^ 詳細についてはWindows NT系の表を参照のこと。
- ^ オレゴン州の ウィラメットバレー (Willamette Valley) を流れる Yamhill 川から来た名前である。
- ^ "Craig Barrett confirms 64 bit address extensions for Xeon. And Prescott", from The Inquirer
- ^ "A Roundup of 64-Bit Computing", from internetnews.com
- ^ オレゴン州を流れるクラッカマス川(Clackamas River)の名前に由来し、ウィラメット川 (Willamette River) の支流である。
- ^ "Intel® 64 Architecture"
[編集] 関連項目
- プロセッサ - 命令セット - レジスタ (コンピュータ) - アドレッシングモード
- 32ビット - x86 - IA-32
- 64ビット - x64 / IA-64
- Windows NT系#32ビットと64ビット
[編集] 外部リンク
|
||||||||