x86-64

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

AMD Opteron、2003年にx86-64拡張機能を導入した最初のCPU
2002年にAMDによって発行および配布されたx86-64アーキテクチャプログラマーズガイドの5巻セット

x86-64 ( x64x86_64AMD64、およびIntel 64とも呼ばれます[注1]は、 1999年に最初にリリースされたx86命令セットの64ビットバージョンです。64ビットモードという2つの新しい動作モードが導入されました。互換性モードと、新しい4レベルのページングモード。

64ビットモードと新しいページングモードでは、32ビットの以前のモードよりもはるかに大量の仮想メモリ物理メモリをサポートし、プログラムが大量のデータをメモリに格納できるようにします。 x86-64はまた、汎用レジスターを64ビットに拡張し、それらの数を8(スタック管理などの機能が制限または固定されているものもある)から16(完全に一般的)に拡張し、他の多くの拡張機能を提供します。浮動小数点演算は、必須のSSE2のような命令を介してサポートされ、x87 / MMXスタイルのレジスタは通常使用されません(ただし、64ビットモードでも使用可能です)。代わりに、16のセットそれぞれ128ビットのベクトルレジスタが使用されます。(各レジスタは、1つまたは2つの倍精度数、1つから4つの単精度数、またはさまざまな整数形式を格納できます。)64ビットモードでは、64ビットオペランドと64ビットアドレッシングモードをサポートするように命令が変更されます

アーキテクチャで定義されている互換モードにより、16ビットおよび32ビットのユーザーアプリケーションを変更せずに実行でき、64ビットオペレーティングシステムでサポートされている場合は64ビットアプリケーションと共存できます。[11] [注2]完全な x8616ビットおよび32ビット命令セットはエミュレーションを介さずにハードウェアに実装されたままであるため、これらの古い実行可能ファイルはパフォーマンスの低下をほとんどまたはまったく伴わずに実行できます[13]。プロセッサ設計の新機能を利用して、パフォーマンスを向上させます。また、x86-64をサポートするプロセッサは、8086との完全な下位互換性のために、リアルモードでパワーオンします。、プロテクトモードをサポートするx86プロセッサが80286以降に行ってきたように

AMDによって作成され、2000年にリリースされた元の仕様は、 AMD、 Intel、およびVIAによって実装されています。OpteronおよびAthlon64プロセッサに搭載されたAMDK8マイクロ アーキテクチャは、最初に実装されました。これは、Intel以外の会社によって設計されたx86アーキテクチャへの最初の重要な追加でした。 Intelはそれに追随することを余儀なくされ、AMDの仕様とソフトウェア互換性のある修正されたNetBurstファミリを導入しました。 VIA Technologiesは、VIANanoを使用してVIAIsaiahアーキテクチャにx86-64を導入しました

x86-64アーキテクチャは、Intel Itaniumアーキテクチャ(以前のIA-64 )とは異なります。アーキテクチャはネイティブの命令セットレベルでは互換性がなく、一方用にコンパイルされたオペレーティングシステムとアプリケーションをもう一方で実行することはできません。

AMD64

AMD64ロゴ

歴史

AMD64(AMDは、文献やドキュメントで「AMD64ビットテクノロジー」および「AMDx86-64アーキテクチャ」ともさまざまに呼んでいます)は、 IntelHewlett-Packardによって設計された根本的に異なるIA-64アーキテクチャの代替として作成されました。 、これは、 x86アーキテクチャの32ビットバージョンであるIA-32下位互換性がありませんでした。当初は1999年に発表され[14]、2000年8月に完全な仕様が利用可能になりました[15] AMD64アーキテクチャは、64ビットコンピューティングを追加する進化的な方法として最初からAMDによって位置付けられていましたIA-64を使用してまったく新しい64ビットアーキテクチャを作成するIntelのアプローチとは対照的に、 従来の32ビットx86コードをサポートしながら既存のx86アーキテクチャに機能を追加します。

最初のAMD64ベースのプロセッサであるOpteronは、2003年4月にリリースされました。

実装

AMD64アーキテクチャを実装するAMDのプロセッサには、OpteronAthlon 64Athlon 64 X2Athlon 64 FXAthlon II(コアの数を示す「X2」、「X3」、または「X4」が続く)、Turionが含まれます。 64Turion 64 X2Sempron(「Palermo」E6ステッピングおよびすべての「Manila」モデル)、Phenom(コアの数を示す「X3」または「X4」が続く)、Phenom II(「X2」、「 X3 "、" X4 "または" X6 "はコアの数を示します)、FXFusion / APUおよびRyzen / Epyc[要出典]

アーキテクチャ上の特徴

AMD64の主な特徴は、64ビットの汎用プロセッサレジスタ(たとえば、rax)、64ビットの整数算術および論理演算、および64ビットの仮想アドレスの可用性です。[要出典] 設計者は、他の改善も行う機会を得ました。

64ビット拡張機能の注目すべき変更点は次のとおりです。

64ビット整数機能
すべての汎用レジスタ(GPR)は32ビットから64ビットに拡張され 、すべての算術および論理演算、メモリからレジスタおよびレジスタからメモリの演算などは、64ビットの整数を直接操作できます。スタックのプッシュとポップデフォルトで8バイトのストライドであり、ポインターの幅は8バイトです。
追加レジスタ
汎用レジスタのサイズを増やすことに加えて、名前付き汎用レジスタの数がx86の8(eaxecxedxebxespebpesiedi)から16(つまり、rax)に増えました。RCXRDXRBXRSPRBPRSIRDIR8R9R10R11R12R13r14r15)。したがって、スタックではなくレジスタに多くのローカル変数を保持し、レジスタに頻繁にアクセスされる定数を保持させることができます。小さくて速いサブルーチンの引数も、より多くの範囲でレジスターに渡される可能性があります。
AMD64には、多くのRISC 命令セットPA-RISCPower ISAMIPSには32のGPR、Alpha64ビットARMSPARCには31)やIA-64などのVLIWのようなマシンIA-64など)よりもレジスタが少なくなっています。 128個のレジスタがあります)。ただし、AMD64実装には、命令セットによって公開されるアーキテクチャレジスタの数よりもはるかに多くの内部レジスタが含まれる場合があります(レジスタの名前変更を参照)。(たとえば、AMD Zenコアには、168個の64ビット整数と160個の128ビットベクトル浮動小数点物理内部レジスタがあります。)
追加のXMM(SSE)レジスタ
同様に、128ビットXMMレジスタ(ストリーミングSIMD命令に使用される)の数も8から16に増加します。
従来のx87FPUレジスタスタックは、拡張されたSSE2で使用されるXMMレジスタと比較して、64ビットモードのレジスタファイルサイズ拡張には含まれていません。x87レジスタ・スタック、それは低コストの交換操作によって個々のレジスタへの直接アクセスを可能にしていますが、単純なレジスタ・ファイルではありません。
より大きな仮想アドレス空間
AMD64アーキテクチャは、64ビットの仮想アドレス形式を定義します。現在の実装では、その下位48ビットが使用されています。[11] :120 これにより、最大256  TiB(2 48 バイト)の仮想アドレス空間が可能になります。アーキテクチャ定義により、将来の実装でこの制限を完全な64ビットに引き上げることができます。[11] :2  :3  :13  :117  :120 仮想アドレス空間を16  EiB(2 64バイト)に拡張します。[16]これは、x86のわずか4 GiB(2 32バイト)と比較され ます。 [17]
つまり、非常に大きなファイルはファイルの領域をアドレス空間。
より大きな物理アドレス空間
AMD64アーキテクチャの元の実装では、40ビットの物理アドレスが実装されていたため、最大1 TiB(2 40バイト)のRAMをアドレス指定できました。[11] :24  AMD64アーキテクチャの現在の実装(AMD 10hマイクロアーキテクチャから開始)は、これを48ビットの物理アドレス[18]に拡張しているため、最大256 TiB(2 48バイト)のRAMをアドレス指定できます。アーキテクチャでは、これを将来52ビットに拡張できます[11] :24  [19](ページテーブルエントリ形式によって制限されます)。[11] :131 これにより、最大4PiBのRAMのアドレス指定が可能になります。比較のために、32ビットx86プロセッサは、物理アドレス拡張(PAE)モードでは64 GiBのRAM、[20]またはPAEモードなしでは4GiBのRAMに制限されています。[11] :4 
レガシーモードでのより大きな物理アドレス空間
レガシーモードで動作している場合、AMD64アーキテクチャは現在のほとんどのx86プロセッサと同様に物理アドレス拡張(PAE)モードをサポートしますが、AMD64はPAEを36ビットから52ビットの物理アドレスのアーキテクチャ制限に拡張します。したがって、どの実装でも、ロングモードの場合と同じ物理アドレス制限が許可されます[11] :24 
命令ポインタの相対データアクセス
命令は、命令ポインタ(RIPレジスタ)に関連するデータを参照できるようになりました。これにより、共有ライブラリでよく使用される位置に依存しないコードや、実行時に読み込まれるコードがより効率的になります。
SSE命令
オリジナルのAMD64アーキテクチャは、コア命令としてIntelのSSESSE2を採用していました。これらの命令セットは、単精度および倍精度のデータ型に対して、スカラーx87FPUのベクトル補足を提供します。 SSE2は、8ビットから64ビットの精度の範囲のデータ型に対して整数ベクトル演算も提供します。これにより、アーキテクチャのベクトル機能は、当時の最も高度なx86プロセッサの機能と同等になります。これらの命令は、32ビットモードでも使用できます。 64ビットプロセッサの急増により、これらのベクトル機能は家庭用コンピュータに広く普及し、32ビットアプリケーションの標準を向上させることができます。たとえば、32ビット版のWindows 8には、SSE2命令が必要です。[21] SSE3命令以降のストリーミングSIMD拡張命令セットは、アーキテクチャの標準機能ではありません。
いいえ-実行ビット
No-ExecuteビットまたはNXビット(ページテーブルエントリのビット63)を使用すると、オペレーティングシステムは、仮想アドレス空間のどのページに実行可能コードを含めることができ、どのページに含めることができないかを指定できます。「実行なし」とタグ付けされたページからコードを実行しようとすると、読み取り専用ページに書き込もうとした場合と同様に、メモリアクセス違反が発生します。これにより、悪意のあるコードが「バッファオーバーラン」または「チェックされていないバッファ」攻撃を介してシステムを制御することがより困難になります。同様の機能は、80286以降、セグメント記述子の属性としてx86プロセッサで使用できますただし、これは一度にセグメント全体でのみ機能します。
セグメント化されたアドレス指定は長い間廃止された動作モードと見なされており、現在のすべてのPCオペレーティングシステムは事実上それをバイパスし、すべてのセグメントをゼロのベースアドレスと(32ビット実装では)4GiBのサイズに設定します。AMDは、リニアアドレッシングモードでno-executeを実装した最初のx86ファミリベンダーでした。この機能は、PAEが使用されている場合、AMD64プロセッサおよび最近のIntelx86プロセッサのレガシーモードでも使用できます。
古い機能の削除
x86アーキテクチャのいくつかの「システムプログラミング」機能は、最新のオペレーティングシステムでは使用されていないか、十分に使用されておらず、AMD64のロング(64ビットおよび互換)モードでは使用できないか、限られた形式でしか存在しません。これらには、セグメント化されたアドレス指定(ただし、FSおよびGSセグメントはオペレーティングシステム構造へのエクストラベースポインタとして使用するために痕跡形式で保持されます)、[11] :70 タスク状態切り替えメカニズム、および仮想8086モードが含まれます。これらの機能は「レガシーモード」で完全に実装されたままであり、これらのプロセッサは変更なしで32ビットおよび16ビットのオペレーティングシステムを実行できます。スタック上のセグメントレジスタの保存/復元、すべてのレジスタの保存/復元(PUSHA / POPA)、10進演算、BOUNDおよびINTO命令など、ほとんど役に立たないことが判明した一部の命令は、64ビットモードではサポートされません。 far」ジャンプし、即時オペランドを使用して呼び出します。

仮想アドレス空間の詳細

標準形アドレス

標準的なアドレス空間の実装(図は縮尺どおりではありません)
現在の48ビット実装
57ビットの実装
64ビットの実装

仮想アドレスは64ビットモードでは64ビット幅ですが、現在の実装(および計画段階にあることがわかっているすべてのチップ)では、2 64バイト(16  EiB)の仮想アドレス空間全体を使用できません。これは、32ビットマシンの仮想アドレス空間の約40億倍のサイズになります。ほとんどのオペレーティングシステムとアプリケーションは、当面の間、このような大きなアドレススペースを必要としないため、このような広い仮想アドレスを実装すると、アドレス変換の複雑さとコストが増加するだけで、実際のメリットはありません。したがって、AMDは、アーキテクチャの最初の実装では、仮想アドレスの最下位48ビットのみが実際にアドレス変換に使用されることを決定しました(ページテーブル見上げる)。[11] :120 

さらに、AMD仕様では、仮想アドレスの最上位16ビットであるビット48〜63は、ビット47のコピーである必要があります(符号拡張と同様の方法で)。この要件が満たされない場合、プロセッサは例外を発生させます。[11] :131 この規則に準拠するアドレスは、「標準形」と呼ばれます。[11] :130の 標準形アドレスは0から00007FFF'FFFFFFFFまで、およびFFFF8000'00000000からFFFFFFFF'FFFFFFFFまで実行され、合計 256TiBの使用可能な仮想アドレス空間になります。これは、32ビットマシンの仮想4GiBアドレス空間の65,536倍です。

この機能により、後の真の64ビットアドレス指定へのスケーラビリティが容易になります。多くのオペレーティングシステム( Windows NTファミリを含むがこれに限定されない)は、アドレス空間の上位半分(カーネル空間と呼ばれる)を自分自身のために使用し、下位アドレス半分(ユーザー空間)をアプリケーションコード、ユーザーモード用に残します。スタック、ヒープ、およびその他のデータ領域。[22]「正規アドレス」設計により、AMD64準拠のすべての実装で、実質的に2つのメモリ半分が確保されます。下半分は00000000'00000000から始まり、より多くの仮想アドレスビットが使用可能になると「上向きに成長」し、上半分は「ドッキング」されます。アドレス空間の一番上に移動し、下に向かって成長します。また、未使用のアドレスビットをチェックしてアドレスの「標準形」を適用すると、オペレーティングシステムがフラグや特権マーカーなどのタグ付きポインタで使用するのを防ぐことができます。アーキテクチャを拡張して仮想を実装すると、このような使用が問題になる可能性があります。アドレスビット。

Windows for x64の最初のバージョンは、256TiB全体を使用していませんでした。それらは、8TiBのユーザースペースと8TiBのカーネルスペースに制限されていました。[22] Windowsは、2013年10月にリリースされたWindows 8.1まで、48ビットアドレス空間全体をサポートしていませんでした。 [22]

ページテーブル構造

64ビットアドレッシングモード(「ロングモード」)は、物理アドレス拡張(PAE)のスーパーセットです。このため、ページサイズは4  KiB(2 12バイト)または2  MiB(2 21バイト)になる場合があります。[11] :120 ロングモードは、1  GiB(2 30バイト)のページサイズもサポートします。[11] :120  PAEモードのシステムで使用される3レベルのページテーブルシステムではなく、ロングモードで実行されるシステムは4つのレベルのページテーブルを使用します。PAEのページディレクトリポインタテーブルは4エントリから512に拡張され、追加のページマップレベル4(PML4)テーブルが追加され、48ビット実装の512エントリが含まれます。[11] :  13148ビットスペース全体の4KiBページの完全なマッピング階層は、512  GiBを少し超えるメモリ(256 TiB仮想スペースの約0.195%)を必要とします。

Intelは、 5レベルのページテーブルを使用するスキームを実装しました。これにより、Intel64プロセッサは57ビットの仮想アドレス空間をサポートできます。[23]さらなる拡張により、ページテーブルエントリサイズを128ビットに拡張することで完全な64ビット仮想アドレス空間と物理メモリが可能になり、さらに大きな64 KiBページ割り当てサイズを使用することで5レベル階層のページウォークを減らすことができます。下位互換性のために4KiBページ操作をサポートします。[24]

オペレーティングシステムの制限

オペレーティングシステムは、仮想アドレス空間を制限することもできます。詳細は、該当する場合、「オペレーティングシステムの互換性と特性」セクションに記載されています。

物理アドレス空間の詳細

現在のAMD64プロセッサは、最大2 48バイトのRAM、つまり 256TiBの物理アドレス空間をサポートしています。[18]ただし、2020年の時点で、 256TiBのRAMをサポートする既知のx86-64マザーボードはありませんでした。[25] [26] [27] [28] [失敗した検証]オペレーティングシステムは、使用可能またはサポートされているRAMの量に追加の制限を課す場合があります。この点の詳細は​​、この記事の「オペレーティングシステムの互換性と特性」セクションに記載されています。

動作モード

アーキテクチャには、ロングモードとレガシーモードの2つの主要な動作モードがあります。

オペレーティング 必要な オペレーティングシステム 実行されているコードのタイプ サイズ(ビット単位) 汎用レジスタ数
モード サブモード 住所 オペランド(イタリック体のデフォルト
ロングモード 64ビットモード 64ビットOS、64ビットUEFIファームウェア、または64ビットファームウェアのUEFIインターフェイスを介して相互作用する前の2つ 64ビット 64 8、16、32、64 _ _ 16
互換モード ブートローダーまたは64ビットOS 32ビット 32 8、16、32 _ 8
16ビットプロテクトモード 16 8、16、32 _ _ 8
レガシーモード 保護モード ブートローダー、32ビットOS、32ビットUEFIファームウェア、またはファームウェアのUEFIインターフェイスを介して相互作用する後者の2つ 32ビット 32 8、16、32 _ 8
16ビットプロテクトモードOS 16ビットプロテクトモード 16 8、16、32 [ m 1 ] 8
仮想8086モード 16ビットプロテクトモードまたは32ビットOS リアルモードのサブセット 16 8、16、32 [ m 1 ] 8
非現実的なモード ブートローダーまたはリアルモードOS リアルモード 16、20、32 8、16、32 [ m 1 ] 8
リアルモード ブートローダー、リアルモードOS、またはファームウェアのBIOSインターフェイスとインターフェイスする任意のOS [29] リアルモード 16、20、21 _ 8、16、32 [ m 1 ] 8
  1. ^ a b c d 80286以下用に記述された16ビットコードは、32ビットのオペランド命令を使用しないことに注意してください。80386以降用に記述されたコードでは、オペランドサイズのオーバーライドプレフィックス(0x66)を使用できます。通常、このプレフィックスは、16ビットオペランドを使用する目的で保護されたロングモードコードによって使用されます。このコードは、デフォルトのオペランドサイズが32ビットのコードセグメントで実行されるためです。リアルモードでは、デフォルトのオペランドサイズは16ビットであるため、0x66プレフィックスの解釈が異なり、オペランドサイズが32ビットに変更されます。
x86-64動作モードの状態図

ロングモード

ロングモードは、アーキテクチャが意図するプライマリ動作モードです。これは、プロセッサのネイティブ64ビットモードと、32ビットと16ビットの互換モードを組み合わせたものです。 64ビットオペレーティングシステムで使用されます。 64ビットオペレーティングシステムでは、64ビットプログラムは64ビットモードで実行され、32ビットおよび16ビットのプロテクトモードアプリケーション(実行するためにリアルモードまたは仮想8086モードを使用する必要はありません)時間)互換モードで実行します。リアルモードプログラムおよび仮想8086モードをいつでも使用するプログラムは、これらのモードがソフトウェアでエミュレートされない限り、ロングモードで実行することはできません。[11] :11 ただし、このようなプログラムは、 VT-xまたはAMD-Vをサポートするプロセッサでロングモードで実行されているオペレーティングシステムから開始できます。 目的のモードで実行される仮想プロセッサを作成します。

基本的な命令セットは同じであるため、プロテクトモードのx86コードを実行してもパフォーマンスが低下することはほとんどありません。これは、基になる命令セットの違いが32ビットコードの実行をx86のエミュレーション(プロセスを遅くする)または専用のx86コプロセッサーのいずれかで実行する必要があることを意味するIntelのIA-64とは異なります。ただし、x86-64プラットフォームでは、64ビットコードの追加レジスタとコンパイラによるSSE2ベースのFPUサポートが保証されているため、多くのx86アプリケーションが64ビット再コンパイルの恩恵を受ける可能性があります。最適化に使用できます。ただし、暗号化アルゴリズムなど、32ビットより広い整数を定期的に処理するアプリケーションでは、64ビットレジスタを利用するために、巨大な整数を処理するコードを書き直す必要があります。

レガシーモード

レガシーモードは、プロセッサがロングモードでないときにプロセッサが存在するモードです。[11] :14 このモードでは、プロセッサは古いx86プロセッサのように動作し、16ビットと32ビットのコードのみを実行できます。レガシーモードでは、最大32ビットの仮想アドレス指定が可能であり、仮想アドレス空間が4GiBに制限されます。[11] :14  :24  :11864 ビットプログラムはレガシーモードから実行できません。

プロテクトモード

プロテクトモードはレガシーモードのサブモードになります。[11] :14  x86-64 CPUで実行している場合、32ビットオペレーティングシステムと16ビットプロテクトモードオペレーティングシステムが動作するサブモードです。[11] :14 

リアルモード

リアルモードは、プロセッサが初期化されたときの初期動作モードであり、レガシーモードのサブモードです。これは、元のIntel8086およびIntel8088プロセッサとの下位互換性があります。リアルモードは、現在主にオペレーティングシステムのブートローダーによって使用されています。オペレーティングシステムのブートローダーは、より高いモードに移行する前に仮想メモリの詳細を構成するためにアーキテクチャで必要です。このモードは、従来のBIOSスタイルのインターフェイスを使用してシステムファームウェアと通信する必要があるオペレーティングシステムでも使用されます。[29]

Intel 64

Intel 64は、Intelによるx86-64の実装であり、Intel製のさまざまなプロセッサで使用および実装されています。

歴史

歴史的に、AMDはIntelの元の設計に基づいてパターン化された命令セットを備えたプロセッサを開発および製造してきましたが、x86-64では、役割が逆転しました。Intelは、AMDがIntel独自のx86プロセッサラインの拡張として作成 したISAを採用する立場にありました。

Intelのプロジェクトは、もともとコードネームが Yamhillでした(オレゴン州のウィラメットバレーのYamhill Riverにちなんで)。 [要出典]数年にわたってその存在を否定した後、Intelは2004年2月のIDFで、プロジェクトが実際に進行中であることを発表しました。当時のIntelの会長であるCraigBarrettは、これが彼らの最悪の秘密の1つであることを認めました。[30] [31]

この命令セットのIntelの名前は数回変更されています。IDFで使用された名前はCT [32]でした(おそらく[元の研究? ]オレゴン川からの別のコードネームであるClackamas Technologyの場合)。数週間以内に彼らはそれをIA-32eIA-32拡張用)と呼び始め、2004年3月に「正式な」名前EM64T(拡張メモリ64テクノロジー)を発表しました。2006年後半にインテルではなく名前を使用し始めたインテルの64名のAMD64のAMDの使用を並列に、その実施のために。[33]

Intel 64を実装した最初のプロセッサは、2004年6月にコードネームNoconaのマルチソケットプロセッサXeonでした。対照的に、最初のPrescottチップ(2004年2月)ではこの機能が有効になりませんでした。その後、IntelはPrescottコアのE0リビジョンを使用してIntel64対応のPentium4の販売を開始し、OEM市場でPentium 4、モデルFとして販売されました。E0リビジョンにはeXecute Disable(XD)(IntelのNXビットの名前)も追加されています。 )をIntel 64に移行し、現在のXeonコード名Irwindaleに含まれています。主流のデスクトッププロセッサでのIntelのIntel64(当時はEM64Tという名前で)の正式な発売は、N0ステッピングPrescott-2Mでした。

Intel 64を実装する最初のIntelモバイルプロセッサは、2006年7月27日にリリースされたCore 2プロセッサのMeromバージョンです。Intelの以前のノートブックCPU(Core DuoPentium MCeleron MMobile Pentium 4)はいずれもIntel64を実装していません。

実装

Intel64アーキテクチャを実装するIntelのプロセッサには、Pentium 4Fシリーズ/ 5x1シリーズ、506、および516、Celeron Dモデル3x1、3x6、355、347、352、360、および365、およびそれ以降のすべてのCeleron、以降のすべてのXeonモデルが含まれます。 Nocona "、" Merom-2M "以降のPentiumデュアルコアプロセッサのすべてのモデル、 Atom 230、330、D410、D425、D510、D525、N450、N455、N470、N475、N550、N570、N2600、N2800、すべてのバージョンPentium DPentium Extreme EditionCore 2Core i9Core i7Core i5およびCore i3プロセッサ、およびXeon Phi7200シリーズプロセッサ。

VIAのx86-64実装

VIA Technologiesは、CPU部門であるCentaur Technologyによる5年間の開発の後、2008年にx86-64アーキテクチャの最初の実装を導入しました コードネーム「Isaiah」の64ビットアーキテクチャは、2008年1月24日に発表され[ 35] 、 VIANanoブランド名で5月29日に発売されました。[36]

プロセッサは、低電力アプライアンスの効率を高めるように設計された、VIA固有のx86拡張機能を多数サポートしています。 Isaiahアーキテクチャは、同等のクロック速度で、前世代のVIAEstherの2倍の整数パフォーマンスと4倍の浮動小数点パフォーマンスになると予想されます。消費電力も前世代のVIACPUと同等であり、熱設計電力は5Wから25Wの範囲であると予想されます。 [37] 完全に新しい設計であるため、Isaiahアーキテクチャはx86などの機能をサポートして構築されました。 -64命令セットとx86仮想化は、その前身であるVIAC7では利用できませんでした 暗号化拡張機能を保持しながら、行。

マイクロアーキテクチャレベル

2020年には、ベンダー間のコラボレーションを通じて、いくつかのマイクロアーキテクチャレベル、x86-64-v2、x86-64-v3、およびx86-64-v4が定義されました。[38]これらのレベルは、コンパイル時の最適化を提供するためにプログラマーがターゲットにできる特定の機能を定義します。各レベルで公開されている機能は次のとおりです。[39]

CPUマイクロアーキテクチャレベル
レベル CPU機能 指示例
x86-64
(ベースライン:すべてのx86-64 CPU)
CMOV cmov
CX8 cmpxchg8b
FPU fld
FXSR fxsave
MMX emms
OSFXSR fxsave
SCE システムコール
SSE cvtss2si
SSE2 cvtpi2pd
x86-64-v2
(2009年頃:ネハレムとジャガー)

また:

CMPXCHG16B cmpxchg16b
LAHF-SAHF lahf
POPCNT popcnt
SSE3 addsubpd
SSE4_1 blendpd
SSE4_2 pcmpestri
SSSE3 phaddd
x86-64-v3
(2015年頃:HaswellおよびExcavator)

また:

AVX vzeroall
AVX2 vpermd
BMI1 andn
BMI2 bzhi
F16C vcvtph2ps
FMA vfmadd132pd
LZCNT lzcnt
MOVBE movbe
OSXSAVE xgetbv
x86-64-v4
AVX-512の汎用サブセット)
AVX512F kmovw
AVX512BW vdbpsadbw
AVX512CD vplzcntd
AVX512DQ vpmullq
AVX512VL 該当なし

すべてのレベルには、前のレベルで見つかった機能が含まれています。AES-NIRDRANDなど、汎用計算に関係のない命令セット拡張は、レベル要件から除外されます。

AMD64とIntel64の違い

ほぼ同じですが、主にシステムプログラミングに使用される、めったに使用されないいくつかのマシン命令(またはシチュエーション)のセマンティクスには、2つの命令セットの間にいくつかの違いがあります[40]コンパイラは通常、少なくとも通常のアプリケーションプログラムでは、違いを回避する実行可能ファイル(つまり、マシンコード)を生成しますしたがって、これは主に、個々の特別なシステム命令を処理する必要のあるコンパイラ、オペレーティングシステムなどの開発者にとって重要です。

最近の実装

  • ソースがゼロでオペランドサイズが32ビットの場合、Intel64と命令BSF動作はAMD64とは異なります。BSRプロセッサはゼロフラグを設定し、宛先の上位32ビットを未定義のままにします[要出典]。この場合、Intelは宛先レジスタの値が未定義であると文書化していますが、実際にはシリコンではAMDと同じ動作を実装しています(宛先は変更されていません)。アッパー32のビットを保持しない可能性があるという別の主張は検証されていませんが、Core2とSkylakeについてのみ除外されています[41]。64ビットPentium4や低電力AtomなどのすべてのIntelマイクロアーキテクチャではありません。
  • AMD64は、異なるマイクロコード更新フォーマットと制御MSR(モデル固有のレジスタ)を必要としますが、Intel 64は、32ビットのみのプロセッサから変更されていないマイクロコード更新を実装します。
  • Intel 64には、AMD64でアーキテクチャと見なされるMSRがいくつかありません。これらには、、、SYSCFGおよびTOP_MEMが含まれTOP_MEM2ます。
  • Intel 64は、64ビットモード(互換モードではない)でSYSCALL/のみを許可し[42]、両方のモードで/を許可します。[43] AMD64には、ロングモードの両方のサブモードがありません[11] :33 SYSRETSYSENTERSYSEXITSYSENTERSYSEXIT
  • 64ビットモードでは、66H(オペランドサイズオーバーライド)プレフィックスが付いたnearブランチの動作が異なります。Intel 64は、このプレフィックスを無視します。命令には32ビットの符号拡張オフセットがあり、命令ポインタは切り捨てられません。AMD64は、命令で16ビットのオフセットフィールドを使用し、命令ポインタの上位48ビットをクリアします。
  • AMDプロセッサは、80ビットシグナリングNaNのFLDまたはを実行するときに浮動小数点の無効な例外を発生させますが、Intelプロセッサは発生しません。FSTP
  • Intel 64には、浮動小数点状態の縮小版(したがって高速版)を保存および復元する機能がありません(FXSAVEおよびFXRSTOR命令を含む)。[説明が必要]
  • Opteron Rev.EおよびAthlon64 Rev. D以降のAMDプロセッサは、64ビットゲストの仮想化を容易にするために、Long Mode Segment Limit Enable(LMSLE)ビットを介したセグメンテーションの限定的なサポートを再導入しました。[44] [45]
  • を使用して非正規アドレスに戻る場合SYSRET、AMD64プロセッサは特権レベル3で一般保護違反ハンドラを実行し[46]、Intel64プロセッサでは特権レベル0で実行されます。[47]

古い実装

  • 初期のAMD64プロセッサ(通常はSocket 939および940)には命令がありませんでした。これは、ほとんどの80486以降のプロセッサに存在CMPXCHG16Bする命令の拡張です。と同様にオクタワード(128ビット値)でのアトミック操作が可能です。これは、ロックフリーおよびウェイトフリーアルゴリズムで一般的な、ポインターのサイズよりも大きいデータの比較およびスワップを使用する並列アルゴリズムに役立ちます。クリティカルセクションや代替のロックフリーアプローチなどの回避策を使用する必要があります。 [48]この機能がないため、Windows8.1より前の64ビットWindowsでユーザーモードを使用することもできません。CMPXCHG8BCMPXCHG8BCMPXCHG16BCMPXCHG16B8TiBより大きいアドレス空間 [49] 64ビットバージョンのWindows8.1には命令が必要です。[50]
  • 初期のAMD64およびIntel64 CPUには欠けていLAHFSAHF、64ビットモードの命令がありました。AMDは2005年3月にAthlon64、Opteron、Turion 64リビジョンDプロセッサでこれらの命令(64ビットモードでも)を導入しましたが[51] [52] [53]、Intelは2005年12月にPentium 4G1ステッピングで命令を導入しました。64ビットバージョンのWindows8.1には、この機能が必要です。[50]
  • Intel64を搭載した初期のIntelCPUにも、AMD64アーキテクチャのNXビットがありません。この機能は、Windows8.xのすべてのバージョンで必要です。
  • 初期のIntel64実装(PrescottおよびCedar Mill)は64 GiBの物理メモリへのアクセスのみを許可していましたが、元のAMD64実装は 1TiBの物理メモリへのアクセスを許可していました。最近[いつ? ] AMD64実装は256TiBの物理アドレス空間を提供し(AMDは4  PiBへの拡張を計画しています)、[要出典]一部のIntel64実装は最大64TiBをアドレス指定できます。[54]このサイズの物理メモリ容量は、大規模アプリケーション(大規模データベースなど)および高性能コンピューティング(中央指向のアプリケーションおよび科学計算)に適しています。

採用

1993年から2019年までのTOP500スーパーコンピューターランキングリストにあるマイクロプロセッサーのさまざまなファミリーの表現を示す面グラフ。[55]

TOP500によって追跡されるスーパーコンピューターでは、x86アーキテクチャーの64ビット拡張機能の出現により、AMDおよびIntelによる64ビットx86プロセッサーが、そのようなシステムで以前に使用されていたほとんどのRISCプロセッサーアーキテクチャー(PA-RISCSPARCAlphaなどを含む)に取って代わりました。 、および32ビットx86は、Intel自体が最初にx86をItaniumプロセッサの新しい互換性のない64ビットアーキテクチャに置き換えようとして失敗しましたが

2020年現在富士通 A64FXベースの富岳と呼ばれるスーパーコンピューターがナンバーワンです。最初のARMベースのスーパーコンピューターは2018年にリストに登場し[56]、近年、非CPUアーキテクチャコプロセッサー(GPGPU)もパフォーマンスに大きな役割を果たしています。IntelのXeonPhi "Knights Corner"コプロセッサは、いくつかのベクトル拡張を備えたx86-64のサブセットを実装し[57] 、 Tianhe-2スーパーコンピュータではx86-64プロセッサとともに使用されます。[58]

オペレーティングシステムの互換性と特性

次のオペレーティングシステムとリリースは、ロングモードでx86-64アーキテクチャをサポートしています。

BSD

DragonFly BSD

x86-64ポートの予備的なインフラストラクチャ作業が2004年2月に開始されました。[59]この開発は後に行き詰まった。開発は2007年7月に再開され[60] 、 Google Summer of Code2008およびSoC2009の 間も継続されました。 [61] [62] x86-64サポートを含む最初の公式リリースはバージョン2.4でした。[63]

FreeBSD

FreeBSDは、2003年6月の5.1-RELEASEで、実験的なアーキテクチャとして「amd64」という名前でx86-64サポートを最初に追加しました。2004年1月の5.2-RELEASEで、標準の配布アーキテクチャとして含まれました。 Tier1プラットフォーム。6.0-RELEASEバージョンは、amd64でx86実行可能ファイルを実行することでいくつかの癖を取り除き、ほとんどのドライバーはx86アーキテクチャーと同じように動作します。Linux 32ビットABI互換性が現在機能しているのと同じ方法で、 x86アプリケーションバイナリインターフェイス(ABI)をより完全に統合するための作業が現在行われています。

NetBSD

x86-64アーキテクチャのサポートは、2001年6月19日に最初にNetBSDソースツリーにコミットされました。2004年12月9日にリリースされたNetBSD 2.0の時点で、NetBSD / amd64は完全に統合されサポートされているポートです。32ビットコードは64ビットモードでも引き続きサポートされ、32ビットシステムコール用のnetbsd-32カーネル互換性レイヤーがあります。NXビットは、実行不可能なスタックとヒープにページごとの粒度を提供するために使用されます(32ビットx86ではセグメントの粒度が使用されます)。

OpenBSD

OpenBSDは、2004年5月1日にリリースされたOpenBSD 3.5以降AMD64をサポートしています。AMDがその年のプロジェクトのハッカソンに複数のマシンを貸与したため、ハードウェアの最初のリリースの前に、AMD64サポートの完全なツリー内実装が達成されました。 OpenBSD開発者は、 NXビットをサポートしているため、このプラットフォームを採用しました。これにより、 W ^ X機能を簡単に実装できます。

OpenBSDのAMD64ポートのコードは、AMD64拡張機能のクローン使用を含むIntel 64プロセッサでも実行されますが、Intelは初期のIntel 64プロセッサでページテーブルNXビットを省略したため、これらのIntelCPUにはW ^ X機能がありません。 ; その後、Intel64プロセッサは「XDビット」という名前でNXビットを追加しました。対称型マルチプロセッシング(SMP)は、2004年11月1日のリリース3.6以降、OpenBSDのAMD64ポートで動作します。

DOS

DOSエクステンダなしDOSでロングモードに入ることができますが[64]、BIOSまたはDOS割り込みを呼び出すには、ユーザーはリアルモードに戻る必要があります。

DOS / 4GWと同様のDOSエクステンダを使用してロングモードに入る可能性もありますが、x86-64には仮想8086モードがないため、より複雑ですDOS自体はそれを認識しておらず、適切な仮想化ドライバーバックエンド(たとえば、大容量ストレージインターフェイス)を備えたエミュレーションでDOSを実行しない限り、メリットは期待できません。

Linux

Linuxは、x86-64アーキテクチャをロングモードで実行した最初のオペレーティングシステムカーネルであり、2001年の2.4バージョンから始まりました(ハードウェアが利用可能になる前)。[65] [66] Linuxは、32ビット実行可能ファイルを実行するための下位互換性も提供します。これにより、32ビットプログラムの使用を維持しながら、プログラムをロングモードに再コンパイルできます。現在、いくつかのLinuxディストリビューションには、x86-64ネイティブのカーネルとユーザーランドが付属しています。Arch Linux[67] SUSEMandrivaDebianなどの一部ユーザーが64ビットDVDからインストールするときに、32ビットコンポーネントとライブラリのセットをインストールできるようにすることで、既存のほとんどの32ビットアプリケーションを64ビットOSと一緒に実行できるようにします。FedoraSlackwareUbuntuなどの他のディストリビューションは、32ビットアーキテクチャ用にコンパイルされたバージョンと64ビットアーキテクチャ用にコンパイルされたバージョンで利用できます。 FedoraとRedHat Enterprise Linuxでは、64ビットシステムに32ビットバージョンと64ビットバージョンの両方のすべてのユーザーランドコンポーネントを同時にインストールできます。

Linux3.4で導入されたx32ABI(Application Binary Interface)を使用すると、x32 ABI用にコンパイルされたプログラムをx86-64の64ビットモードで実行し、32ビットのポインターとデータフィールドのみを使用できます。[68] [69] [70] これにより、プログラムは4 GiBの仮想アドレス空間に制限されますが、プログラムのメモリフットプリントも減少し、場合によっては、より高速に実行できるようになります。[68] [69] [70]

64ビットLinuxは、個々のプロセスに最大128  TiBの仮想アドレス空間を許可し、プロセッサとシステムの制限に従って、約64TiBの物理メモリをアドレス指定できます。[71]

macOS

Mac OS X10.4.7以降のバージョンのMacOS X 10.4は、64ビットのIntelベースのマシンでPOSIXおよび数学ライブラリを使用して64ビットのコマンドラインツールを実行します。これは、Mac OS X10.4および10.5のすべてのバージョンがそれらを実行するのと同じです。 64ビットPowerPCマシン。Mac OS X 10.4では、64ビットアプリケーションで動作するライブラリやフレームワークは他にありません。[72] カーネル、およびすべてのカーネル拡張は、32ビットのみです。

Mac OS X 10.5は、 64ビットIntelベースのマシンおよび64ビットPowerPCマシンで、 CocoaQuartzOpenGL、およびX11を使用する64ビットGUIアプリケーションをサポートします。[73] すべての非GUIライブラリおよびフレームワークは、これらのプラットフォームで64ビットアプリケーションもサポートします。カーネルお​​よびすべてのカーネル拡張は、32ビットのみです。

Mac OS X 10.6は、64ビットカーネルをサポートするmacOSの最初のバージョンです。ただし、すべての64ビットコンピューターが64ビットカーネルを実行できるわけではなく、64ビットカーネルを実行できるすべての64ビットコンピューターがデフォルトで実行できるわけではありません。[74] 64ビットカーネルは、32ビットカーネルと同様に、32ビットアプリケーションをサポートします。どちらのカーネルも64ビットアプリケーションをサポートしています。 32ビットアプリケーションには、どちらのカーネルでも4GiBの仮想アドレス空間制限があります。[75] [76] 64ビットカーネルは32ビットカーネル拡張をサポートしておらず、32ビットカーネルは64ビットカーネル拡張をサポートしていません。

OS X 10.8には64ビットカーネルのみが含まれていますが、引き続き32ビットアプリケーションをサポートしています。ただし、32ビットカーネル拡張はサポートしていません。

macOS 10.15には64ビットカーネルのみが含まれ、32ビットアプリケーションはサポートされなくなりました。このサポートの削除は、32ビットWindowsアプリケーションを実行できる必要があるため、 WineHQ(および商用バージョンのCrossOver )に問題をもたらしました。wine32on64と呼ばれる解決策は、名目上64ビットのアプリケーションでCPUを32ビット互換モードに出し入れするサンクを追加することでした。[77] [78]

macOSは、ユニバーサルバイナリ形式を使用して、32ビットおよび64ビットバージョンのアプリケーションとライブラリコードを1つのファイルにパッケージ化します。ロード時に最も適切なバージョンが自動的に選択されます。Mac OS X 10.6では、ユニバーサルバイナリ形式は、カーネルと、32ビットカーネルと64ビットカーネルの両方をサポートするカーネル拡張機能にも使用されます。

Solaris

Solaris 10以降のリリースは、x86-64アーキテクチャをサポートしています。

Solaris 10の場合、SPARCアーキテクチャと同様に、32ビットカーネルと64ビットカーネルを含むオペレーティングシステムイメージは1つだけです。これは「x64 / x86」DVD-ROMイメージとしてラベル付けされています。デフォルトの動作では、64ビットカーネルを起動し、64ビットと既存または新規の32ビット実行可能ファイルの両方を実行できるようにします。32ビットカーネルを手動で選択することもできます。その場合、32ビットの実行可能ファイルのみが実行されます。このisainfoコマンドを使用して、システムが64ビットカーネルを実行しているかどうかを判別できます。

Solaris 11の場合、64ビットカーネルのみが提供されます。ただし、64ビットカーネルは、32ビットと64ビットの両方の実行可能ファイル、ライブラリ、およびシステムコールをサポートします。

Windows

Microsoft Windowsクライアントおよびサーバーのx64エディション(Windows XP Professional x64EditionおよびWindowsServer 2003 x64 Edition)は、2005年3月にリリースされました。[79]内部的には、実際には同じビルド(5.2.3790.1830 SP1)、[80] [81]それらは同じソースベースとオペレーティングシステムバイナリを共有するため、システムアップデートでさえ、Windows 2000ProfessionalおよびServerエディションのx86とほぼ同じ方法で統合パッケージでリリースされます。さまざまなエディションがあるWindowsVistaは、2007年1月にリリースされました。Windows7は2009年7月にリリースされました。WindowsServer2008 R2x64およびItaniumエディションでのみ販売されました。それ以降のバージョンのWindowsServerは、x64エディションのみを提供します。

Windows8.1およびWindowsServer 2012R2より前のバージョンのWindowsfor x64は、次の機能を提供します。

  • 8 TiBのプロセスごとの仮想アドレス空間。ユーザーモードとカーネルモードの両方からアクセスでき、ユーザーモードアドレス空間と呼ばれます。x64プログラムは、システムのバッキングストアの制限に従って、これらすべてを使用できます。ただし、「ラージアドレス対応」オプションとリンクされている必要があります。[82]これは、32ビットWindowsによって提供されるデフォルトの2GiBユーザーモード仮想アドレス空間の4096倍の増加です。[83] [84]
  • オペレーティングシステムのカーネルモード仮想アドレス空間の8TiB。[83]ユーザーモードのアドレス空間と同様に、これは32ビットWindowsバージョンの4096倍の増加です。スペースの増加は、主にファイルシステムキャッシュとカーネルモードの「ヒープ」(非ページプールとページプール)にメリットをもたらします。初期のAMD64プロセッサには命令がなかったため、Windowsはプロセッサによって実装された256TiBのうち合計16TiBしか使用しませんCMPXCHG16B[85]

Windows8.1およびWindowsServer 2012 R2では、ユーザーモードとカーネルモードの両方の仮想アドレス空間が128TiBに拡張されました。[22]これらのバージョンのWindowsは、命令がないプロセッサにはインストールされませんCMPXCHG16B

次の追加の特性は、Windowsのすべてのx64バージョンに適用されます。

  • WoW64がそのバージョンでサポートされている場合、WoW64使用して既存の32ビットアプリケーション(.exeプログラム)およびダイナミックリンクライブラリ(.dlls)を実行する機能。さらに、32ビットプログラムが「ラージアドレス対応」オプションとリンクされている場合、[82]は、デフォルトの2 GiB(オプションの3 GiB)の代わりに、64ビットWindowsで最大4GiBの仮想アドレス空間を使用できます。32ビットWindowsが提供するブートオプションと「ラージアドレス対応」リンクオプション付き)[86] x86でのブートオプションの使用とは異なり、これにより、オペレーティングシステムで使用可能なカーネルモードの仮想アドレス空間が減少することはありません。したがって、32ビットアプリケーションは、x86-64用に再コンパイルされていない場合でも、x64Windowsで実行することでメリットが得られます。/3GB/3GB
  • 32ビットと64ビットの両方のアプリケーションは、「ラージアドレス対応」にリンクされていない場合、2GiBの仮想アドレス空間に制限されます。
  • 最大128GiB(Windows XP / Vista)、192 GiB(Windows 7)、512 GiB(Windows 8)、1 TiB(Windows Server 2003)、2 TiB(Windows Server 2008 / Windows 10)、4 TiB( Windows Server 2012)、または24 TiB(Windows Server 2016/2019)の物理ランダムアクセスメモリ(RAM)。[87]
  • LLP64データモデル:「int」および「long」タイプは32ビット幅、long longは64ビットですが、ポインターおよびポインターから派生したタイプは64ビット幅です。
  • カーネルモードのデバイスドライバーは64ビットバージョンである必要があります。64ビットオペレーティングシステム内で32ビットカーネルモードの実行可能ファイルを実行する方法はありません。ユーザーモードのデバイスドライバーは、32ビットまたは64ビットのいずれかです。
  • 16ビットWindows(Win16)およびDOSアプリケーションは、仮想8086モードを使用する機能に依存していた仮想DOSマシンサブシステム(NTVDM)が削除されたため、x86-64バージョンのWindowsでは実行されません。ロングモードでの実行中は、仮想8086モードに入ることができません。
  • NX(実行なし)ページ保護機能の完全な実装。これは、最近の32ビットバージョンのWindowsがPAEモードで起動されたときにも実装されます。
  • Windows NTファミリのx86バージョンのFSセグメント記述子の代わりに、GSセグメント記述子は、ユーザーモードのスレッド情報ブロック(NT_TIB)とカーネルモードのプロセッサ制御領域(KPCR)の2つのオペレーティングシステム定義の構造を指すために使用されます。したがって、たとえば、ユーザーモードGS:0では、スレッド情報ブロックの最初のメンバーのアドレスになります。この規則を維持することでx86-64ポートが容易になりましたが、セグメント化されたアドレス指定自体は最新のオペレーティングシステムでは実際には使用されていませんが、AMDはFSおよびGSセグメントの機能をロングモードで維持する必要がありました。 [83]
  • 初期のレポートでは、オペレーティングシステムスケジューラはスレッドコンテキストスイッチ間でx87FPUマシンの状態を保存および復元しないと主張していました。観察された動作は、これが当てはまらないことを示しています。カーネルモードのみのスレッド(32ビットバージョンにも存在する制限)を除いて、x87状態が保存および復元されます。Microsoftから入手できる最新のドキュメントには、x87 / MMX / 3DNow!命令はロングモードで使用される可能性がありますが、非推奨であり、将来的に互換性の問題を引き起こす可能性があります。[86]
  • Jet DatabaseEngineDataAccess Objectsなどの一部のコンポーネントは、x86-64やIA-64などの64ビットアーキテクチャに移植されません。[88] [89] [90]
  • Microsoft Visual Studioは、ネイティブアプリケーションをコンパイルして、64ビットMicrosoft Windowsでのみ実行できるx86-64アーキテクチャ、または32ビットMicrosoftWindowsで32ビットアプリケーションとして実行できるIA-32アーキテクチャのいずれかをターゲットにすることができます。 WoW64エミュレーションモードの64ビットMicrosoftWindows 。管理対象アプリケーションは、IA-32、x86-64、またはAnyCPUモードのいずれかでコンパイルできます。最初の2つのモードで作成されたソフトウェアは、それぞれIA-32またはx86-64のネイティブコードの対応物のように動作します。ただし、AnyCPUモードを使用する場合、32ビットバージョンのMicrosoft Windowsのアプリケーションは32ビットアプリケーションとして実行されますが、64ビットエディションのMicrosoftWindowsでは64ビットアプリケーションとして実行されます。

ビデオゲーム機

PlayStation4XboxOneの両方、およびそれらのバリアントには、 Jaguar マイクロアーキテクチャに基づくAMDx86-64プロセッサが組み込まれています。[91] [92]ファームウェアとゲームはx86-64コードで書かれています。レガシーx86コードは含まれていません。

次世代のPlayStation5XboxシリーズXおよびシリーズSには、それぞれZen2マイクロアーキテクチャに基づくAMDx86-64プロセッサが組み込まれています。[93] [94]

業界の命名規則

AMD64とIntel64は実質的に類似しているため、多くのソフトウェアおよびハードウェア製品は、両方の実装との互換性を示すために1つのベンダー中立の用語を使用します。このプロセッサアーキテクチャのAMDの元々の呼称である「x86-64」は、バリアント「x86_64」と同様に、この目的で使用されることがあります[2][3] [4]のような他の企業、マイクロソフト[6]サン・マイクロシステムズ/オラクル・コーポレーション[5]マーケティング資料の縮小"のx64"を使用。

IA-64という用語Itaniumプロセッサを指し、完全に異なる命令セットであるため、x86-64と混同しないでください。

多くのオペレーティングシステムおよび製品、特にIntelが市場に参入する前にx86-64サポートを導入したものでは、AMD64とIntel64の両方を指すために「AMD64」または「amd64」という用語を使用します。

  • amd64
    • FreeBSDMidnightBSDNetBSDOpenBSDなどのほとんどのBSDシステムは、アーキテクチャ名「amd64」でAMD64とIntel64の両方を参照しています。
    • DebianUbuntuGentoo Linuxなどの一部のLinuxディストリビューションは、アーキテクチャ名「amd64」でAMD64とIntel64の両方を参照しています。
    • Microsoft Windowsのx64バージョンは、AMD64モニカを内部的に使用して、このアーキテクチャを使用する、またはこのアーキテクチャと互換性のあるさまざまなコンポーネントを指定します。たとえば、環境変数PROCESSOR_ARCHITECTUREには、32ビットバージョンでは「x86」ではなく「AMD64」という値が割り当てられ、Windows x64 EditionインストールCD-ROMのシステムディレクトリには、「i386」ではなく「AMD64」という名前が付けられます。 "32ビットバージョン。[95]
    • SunのSolarisisalistコマンドは、AMD64ベースのシステムとIntel64ベースのシステムの両方を「amd64」として識別します。
    • Java Development Kit(JDK):「amd64」という名前は、x86-64ファイルを含むディレクトリ名で使用されます。
  • x86_64

ライセンス

x86-64 / AMD64は、AMDによってのみ開発されました。AMDは、AMD64で使用される技術に関する特許を保有しています。[97] [98] [99] AMD64を実装するには、これらの特許はAMDからライセンス供与されている必要があります。IntelはAMDとクロスライセンス契約を締結し、既存のx86技術に関する特許をAMDにライセンス供与し、x86-64で使用される技術に関する特許をAMDからライセンス供与しました。[100] 2009年、AMDとIntelはいくつかの訴訟とクロスライセンスの不一致を解決し、クロスライセンス契約を延長しました。[101] [102] [103]

も参照してください

メモ

  1. ^ 命令セットにはさまざまな名前が使用されています。発売前はx86-64とx86_64が使用されていましたが、リリース時にAMDはAMD64と名付けました。 [1] Intelは、最初はIA-32eおよびEM64T という名前を使用していましたが、最終的にその実装に「Intel64」を採用しました。 Apple含む業界の一部[2] [3] [4]はx86-64とx86_64を使用し、他の業界、特にSun Microsystems [5] (現在はOracle Corporation)とMicrosoft [ 6] はx64を使用しています。 BSDファミリーのOSといくつかのLinuxディストリビューション[7] [8] 内部でMicrosoftWindowsを使用する場合と同様に、AMD64を使用します。[9] [10]
  2. ^ 実際には、64ビットオペレーティングシステムは一般に16ビットアプリケーションをサポートしていませんが、最新バージョンのMicrosoft Windowsには、16ビットInstallShieldおよびMicrosoft ACMEインストーラーを32ビットコードにサイレントに置き換えることで効果的にサポートする限定的な回避策が含まれています。[12]

参考文献

  1. ^ 「DebianAMD64FAQ」DebianWiki 2012年5月3日取得
  2. ^ a b c "x86-64コードモデル"アップル2012年11月23日取得
  3. ^ a b c arch(1)  – ダーウィンおよびmacOS一般コマンドマニュアル
  4. ^ a b c Kevin Van Vechten(2006年8月9日)。「re:IntelXNUバグレポート」Darwin-devメーリングリストアップルコンピュータ2020年2月1日にオリジナルからアーカイブされました2006年10月5日取得カーネルお​​よび開発者ツールは、Mach-Oアーキテクチャの名前として「x86_64」で標準化されています
  5. ^ a b "AMDOpteron上のSolaris10"Oracle 2010年12月9日取得
  6. ^ a b "Microsoft64ビットコンピューティング"マイクロソフト。2010年12月12日にオリジナルからアーカイブされました2010年12月9日取得
  7. ^ 「AMD64ポート」Debian 2012年11月23日取得
  8. ^ 「Gentoo / AMD64プロジェクト」Gentooプロジェクト2013年5月27日取得
  9. ^ 「WOW64実装の詳細」
  10. ^ 「ProcessorArchitectureクラス」
  11. ^ a b c d e f g h i j k l m n o p q r s t u AMD Corporation(2016年12月)。「第2巻:システムプログラミング」(PDF)AMD64アーキテクチャプログラマーズマニュアルAMDCorporation 2017年3月25日取得
  12. ^ レイモンドチェン(2013年10月31日)。「64ビットWindowsに16ビットエミュレーションレイヤーがない場合、特定の16ビットインストーラーの実行が許可されるのはなぜですか?」
  13. ^ IBM Corporation(2007年9月6日)。「IBMWebSphereApplication Server 64ビットパフォーマンスの謎を解き明かす」(PDF)。 p。 14 2010年4月9日取得図5、6、および7は、32ビットバージョンのWASが、POWERおよびx86-64プラットフォームで完全なネイティブハードウェアパフォーマンスでアプリケーションを実行することも示しています。一部の64ビットプロセッサアーキテクチャとは異なり、POWERおよびx86-64ハードウェアは32ビットモードをエミュレートしません。したがって、64ビット機能の恩恵を受けないアプリケーションは、上記の64ビットプラットフォームで実行されている32ビットバージョンのWebSphereで完全なパフォーマンスで実行できます。
  14. ^ 「AMDはMicroporcessorフォーラムで新技術を開示します」(プレスリリース)。AMD。1999年10月5日。2012年3月8日のオリジナルからアーカイブ2010年11月9日取得
  15. ^ 「AMDはx86-64アーキテクチャ仕様をリリースし、64ビットコンピューティングへの市場主導の移行を可能にします」(プレスリリース)。AMD。2000年8月10日。2012年3月8日のオリジナルからアーカイブ2010年11月9日取得
  16. ^ Mauerer、W。(2010)。プロフェッショナルなLinuxカーネルアーキテクチャ。ジョン・ワイリー&サンズ。
  17. ^ 「Intel64およびIA-32アーキテクチャソフトウェア開発者マニュアル、第3A巻:システムプログラミングガイド、パート1」(PDF)pp。4–7 2019年7月10日取得
  18. ^ a b 「AMDファミリ10hプロセッサ用のBIOSおよびカーネル開発者ガイド(BKDG)」(PDF)p。24 2016年2月27日取得物理アドレス空間が48ビットに増加しました。
  19. ^ 「64ビットLinuxに関する神話と事実」(PDF)2008年3月2日。p。7. 2010年10月10日にオリジナル(PDF)からアーカイブされました2010年5月30日取得物理アドレス空間が48ビットに増加しました
  20. ^ シャンリー、トム(1998)。PentiumProおよびPentiumIIシステムアーキテクチャPCシステムアーキテクチャシリーズ(第2版)。アディソン-ウェスリー。p。 445ISBN 0-201-30973-4
  21. ^ マイクロソフトコーポレーション。「PAE、NX、およびSSE2とは何ですか。また、Windows 8を実行するためにPCがそれらをサポートする必要があるのはなぜですか?」2013年3月19日取得
  22. ^ bはCのD の"Windowsのリリースのためのメモリ制限"MSDNMicrosoft2013年11月16日2014年1月20日取得
  23. ^ 「5レベルのページングと5レベルのEPT」(PDF)インテル。2017年5月2017年6月17日取得
  24. ^ 米国特許9858198、Larry Seiler、「4KBページ操作をサポートする64KBページシステム」、2016年12月29日公開、2018年1月2日発行、IntelCorpに譲渡。 
  25. ^ 「Opteron6100シリーズマザーボード」SupermicroCorporation 2010年6月22日取得
  26. ^ 「SupermicroXeonSolutions」SupermicroCorporation 2010年6月20日取得
  27. ^ 「Opteron8000シリーズマザーボード」SupermicroCorporation 2010年6月20日取得
  28. ^ 「TyanProductMatrix」MiTECインターナショナルコーポレーション2010年6月21日取得
  29. ^ a b "「AMIアーカイブから:AMIBIOS8とEFIへの移行」"アメリカンメガトレンド。2017年9月8日。 2021年10月25日取得
  30. ^ 「CraigBarrettはXeonの64ビットアドレス拡張を確認します。そしてPrescott」インクワイアラー。2004年2月17日。2013年1月12日のオリジナルからアーカイブ。{{cite web}}: CS1 maint: unfit URL (link)
  31. ^ "「internetnews.comからの64ビットコンピューティングのまとめ」 。 2012年9月25日のオリジナルからアーカイブ。 2006年9月18日取得
  32. ^ ラペダス、マーク。「IntelがIDFで「CT」64ビットプロセッサラインをデモする」EDNAspenCoreMedia 2021年5月25日取得
  33. ^ 「Intel64アーキテクチャ」インテル2007年6月29日取得
  34. ^ 「VIAは2008年第1四半期に新しいプロセッサアーキテクチャを立ち上げる」(サブスクリプションが必要)DigiTimes 2007年7月25日取得
  35. ^ ストークス、ジョン(2008年1月23日)。「イザヤが明らかにした:VIAの新しい低電力アーキテクチャ」ArsTechnica 2008年1月24日取得
  36. ^ 「VIAはVIANanoプロセッサフ​​ァミリを発表します」(プレスリリース)。VIA2008年5月29日2017年5月25日取得
  37. ^ 「VIAIsaiahアーキテクチャの紹介」(PDF)VIA2008年1月23日。2008年9月7日のオリジナル(PDF)からアーカイブ2013年7月31日取得
  38. ^ ワイマー、フロリアン(2020年7月10日)。「新しいx86-64マイクロアーキテクチャレベル」llvm-dev(at)lists.llvm.orgメーリングリスト
  39. ^ 「SystemVアプリケーションバイナリインターフェイスの低レベルシステム情報」x86-64psABIリポジトリ2021年1月29日–GitLab経由。
  40. ^ ワッソン、スコット(2005年3月23日)。「理論と実践における64ビットコンピューティング」技術レポート技術レポート2011年3月22日取得
  41. ^ 「スタックオーバーフローに関する議論」2021年3月2021年3月2日取得
  42. ^ 「Intel64およびIA-32アーキテクチャソフトウェア開発者マニュアル第2巻(2A、2B、および2C):命令セットリファレンス、AZ」(PDF)インテル。2013年9月。pp。4–397 2014年1月21日取得
  43. ^ 「Intel64およびIA-32アーキテクチャソフトウェア開発者マニュアル第2巻(2A、2B、および2C):命令セットリファレンス、AZ」(PDF)インテル。2013年9月。pp。4–400 2014年1月21日取得
  44. ^ 「AMD64ロングモードでのセグメンテーションの廃止がVMwareをどのように破壊したか」Pagetable.com。2006年11月9日2010年5月2日取得
  45. ^ 「VMwareおよびCPU仮想化テクノロジー」(PDF)VMware 2010年9月8日取得
  46. ^ 「AMD64アーキテクチャプログラマーズマニュアル第3巻:汎用およびシステムの説明」(PDF)AMD。2018年5月。p。419 2018年8月2日取得
  47. ^ 「Intel64およびIA-32アーキテクチャソフトウェア開発者マニュアル第2巻(2A、2B、および2C):命令セットリファレンス、AZ」(PDF)インテル。2014年9月。pp。4–412 2014年12月28日取得
  48. ^ マーギド・M・マイケル。「64ビットCASを使用した実用的なロックフリーおよびウェイトフリーのLL / SC / VL実装」(PDF)IBM 2014年1月21日取得
  49. ^ darwou(2004年8月20日)。「とにかく仮想アドレス空間が4GBなのはなぜですか?」古い新しいものマイクロソフト。
  50. ^ a b "システム要件—Windows8.1" 2014年4月27日取得64ビットPCに64ビットOSをインストールするには、プロセッサがCMPXCHG16b、PrefetchW、およびLAHF / SAHFをサポートしている必要があります。
  51. ^ 「AMDAthlon64およびAMDOpteronプロセッサの改訂ガイド」、AMDから
  52. ^ 「AMDTurion64が写真に撮られて実行されています」インクワイアラー2013年2月22日にオリジナルからアーカイブされました。{{cite web}}: CS1 maint: unfit URL (link)
  53. ^ 「Athlon64リビジョンEは一部のNforce3 / 4ボードでは動作しません」インクワイアラー2012年9月14日にオリジナルからアーカイブされました。{{cite web}}: CS1 maint: unfit URL (link)
  54. ^ 「Intel64アーキテクチャは、ソフトウェアの線形アドレス空間を64ビットに増やし、最大46ビットの物理アドレス空間をサポートします。」ページVol。1 2-21 of Intel64およびIA-32アーキテクチャソフトウェア開発者マニュアル2014年9月
  55. ^ 「統計| TOP500スーパーコンピューターサイト」Top500.org 2014年3月22日取得
  56. ^ 「サブリストジェネレーター| TOP500スーパーコンピューターサイト」www.top500.org 2018年12月6日取得
  57. ^ 「Intel®XeonPhiTMコプロセッサー命令セットアーキテクチャリファレンスマニュアル」(PDF)インテル。2012年9月7日。セクションB.2Intel XeonPhiコプロセッサー64ビットモードの制限。
  58. ^ 「インテルは世界最速のスーパーコンピューターに電力を供給し、新しい将来のハイパフォーマンスコンピューティングテクノロジーを明らかにします」2013年6月21日取得
  59. ^ "cvs commit:src / sys / amd64 / amd64 genassym.c src / sys / amd64 / include asm.h atom.h bootinfo.h coredump.h cpufunc.h elf.h endian.h exec.h float.h fpu .h frame.h globaldata.h ieeefp.h Limits.h lock.h md_var.h param.h pcb.h pcb_ext.h pmap.h proc.h profile.h psl.h ... " 2009年5月3日取得
  60. ^ 「AMD64ポート」2009年5月3日取得
  61. ^ 「DragonFlyBSD:GoogleSoC2008」2009年5月3日取得
  62. ^ 「SummerofCodeは学生を受け入れました」2009年5月3日取得
  63. ^ 「DragonFlyBSD:release24」2009年5月3日取得
  64. ^ 「DOSから保護された長いモードに入るためのチュートリアル」2017年2月22日にオリジナルからアーカイブされまし2008年7月6日取得
  65. ^ Andi Kleen(2001年6月26日)。「Linuxのx86-64への移植」2010年9月10日にオリジナルからアーカイブされました。ステータス:カーネル、コンパイラ、ツールチェーンが機能しています。カーネルは起動してシミュレーターで動作し、ユーザーランドの移植とプログラムの実行に使用されます
  66. ^ アンディクリーン。「AndiKleenのページ」これは、x86-64がシミュレーターでのみ利用可能だった頃のLinuxx86-64カーネルポートについて説明した元の論文でした。
  67. ^ 「Arch64FAQ」2012年4月23日。multilibパッケージまたはi686chrootのいずれかを使用できます。
  68. ^ a b Thorsten Leemhuis(2011年9月13日)。「カーネルログ:x32ABIには64ビットの欠点があります」www.h-online.com。2011年10月28日にオリジナルからアーカイブされました2011年11月1日取得
  69. ^ a b "x32-x86-64用のネイティブ32ビットABI"linuxplumbersconf.org 2011年11月1日取得
  70. ^ a b "x32-abi"Googleサイト2011年11月1日取得
  71. ^ 「AMD64ポート」debian.org 2011年10月29日取得
  72. ^ 「Apple– Mac OS X Xcode 2.4リリースノート:コンパイラツール」Apple Inc. 2007年4月11日。2009年4月22日のオリジナルからアーカイブ2012年11月19日取得
  73. ^ 「Apple– Mac OS X Leopard –テクノロジー–64ビット」Apple Inc. 2009年1月12日のオリジナルからアーカイブ2012年11月19日取得
  74. ^ 「MacOSX v10.6:64ビットカーネルを使用するMac」AppleInc 2012年11月29日取得
  75. ^ ジョン・シラクサ。「MacOSX 10.6 Snow Leopard:ArsTechnicaレビュー」Ars TechnicaLLC 2010年6月20日取得
  76. ^ 「MacOSXテクノロジー」Apple Inc. 2011年3月28日のオリジナルからアーカイブ2012年11月19日取得
  77. ^ 「だから私たちはカタリナの解決策を持っていません...まだ」CodeWeaversブログ
  78. ^ トーマス、ケン(2019年12月11日)。「macOS上のwin32」
  79. ^ 「MicrosoftはWindowsServer2003およびWindowsXPProfessionalの64ビット版の可用性で速度制限を引き上げます|ニュースセンター」news.microsoft.com 2016年8月14日取得
  80. ^ 「WindowsServer2003およびWindowsXP Professional x64Editionのx64ベースのバージョンの説明」Microsoftサポート2016年8月14日取得
  81. ^ 「WindowsServer2003SP1管理ツールパック」Microsoftダウンロードセンター2016年8月27日にオリジナルからアーカイブされました2016年8月14日取得
  82. ^ a b "/ LARGEADDRESSAWARE(大きなアドレスを処理する)"Visual Studio 2005のドキュメント– Visual C ++ –リンカーオプションMicrosoft 2010年6月19日取得/ LARGEADDRESSAWAREオプションは、アプリケーションが2ギガバイトを超えるアドレスを処理できることをリンカに通知します。
  83. ^ a b c マット・ピエトレック(2006年5月)。「64ビットWindowsシステムのプログラミングを開始するために知っておくべきことすべて」Microsoft 2010年5月24日取得
  84. ^ Chris St. Amand(2006年1月)。「x64への移行」Microsoft 2010年5月24日取得
  85. ^ 「Windowsx86-64の44ビット仮想メモリアドレス制限の背後」2009年7月2日取得
  86. ^ ab 「ゲーム開発者向け 64ビットプログラミング」2013年8月21日取得
  87. ^ 「Windowsリリースのメモリ制限」Microsoft 2013年2月20日取得
  88. ^ 「一般的な移植ガイドライン」64ビットWindows用プログラミングガイド。MicrosoftDocs2021年12月25日取得
  89. ^ 「MicrosoftSQLServerのドライバー履歴」MicrosoftDocs2021年12月25日取得
  90. ^ 「JetおよびJetODBCドライバー用のMicrosoftOLEDBプロバイダーは32ビットバージョンでのみ使用可能です」OfficeAccess。MicrosoftDocsKB957570 2021年12月25日取得
  91. ^ Anand Lal Shimpi(2013年5月21日)。「XboxOne:ハードウェア分析とPlayStation4との比較」アナンドテック2013年5月22日取得
  92. ^ 「技術仕様テスト:XboxOne対PlayStation4」ゲームインフォーマー。2013年5月21日2013年5月22日取得
  93. ^ 「11月のソニーの「プレイステーション5」の発売に期待すること」インドエクスプレス2020年8月31日2020年9月14日取得
  94. ^ Cutress, Dr Ian. "Hot Chips 2020 Live Blog: Microsoft Xbox Series X System Architecture (6:00pm PT)". www.anandtech.com. Retrieved September 14, 2020.
  95. ^ ProcessorArchitecture Fields
  96. ^ "An example file from Linux 3.7.8 kernel source tree displaying the usage of the term x86_64". Archived from the original on September 23, 2005. Retrieved February 17, 2013.
  97. ^ US 6877084 
  98. ^ US 6889312 
  99. ^ US 6732258 
  100. ^ "Patent Cross License Agreement Between AMD and Intel". January 1, 2001. Archived from the original on June 21, 2007. Retrieved August 23, 2009.
  101. ^ "AMD Intel Settlement Agreement".
  102. ^ Stephen Shankland and Jonathan E. Skillings (November 12, 2009). "Intel to pay AMD $1.25 billion in antitrust settlement". CNET. Retrieved April 24, 2012.
  103. ^ Smith, Ryan (November 12, 2009). "AMD and Intel Settle Their Differences: AMD Gets To Go Fabless". AnandTech. Archived from the original on May 13, 2010.

External links