web-dev-qa-db-ja.com

x86、x32、x64アーキテクチャの違いは?

x86x32、およびx64の違いを説明してください。 x86x32に関しては、ほとんどの場合32ビットプログラムがx86で実行されるため、少し混乱します...

47
getjish

x86は、PCで使用されたIntelプロセッサアーキテクチャを指します。モデル番号は8088(8086の8ビットバスバージョンで、最初のIBM PCで使用)、8086、286、386、486でした。その後、AMDがプロセッサ名をコピーしないように、番号ではなく名前に切り替えました。 Pentiumなど、決してHexiumではありません:)。

x64は、64ビットコードを有効にするx86命令セットの拡張機能のアーキテクチャ名です。 AMDが発明し、後にIntelが自社の64ビットArchを競争力のあるものにできないとコピーしたため、Itaniumはうまくいきませんでした。他の名前はx86_64で、AMDの元の名前であり、オープンソースツールで一般的に使用されています。 AMDの次の名前であり、Microsoftツールで一般的に使用されているAMD64。 Intel自身の名前(EM64Tおよび "Intel 64")は決してキャッチされませんでした。

x32は、ハードウェアに関連付けられていないファジー用語です。 「32ビット」または「32ビットポインターアーキテクチャ」を意味するために使用される傾向があり、Linuxにはその名前のABIがあります。

25
Hans Passant

HansとDarkDustの回答はi386/i686とAMD64/x86_64を対象としているため、それらを再訪する意味はありません。この答えはX32に焦点を当て、X32移植後に学んだ情報を提供します。

x32は、32ビット整数、ロング、およびポインターを使用するAMD64/x86_64 CPU用のABIです。アイデアは、32ビットデータ型の小さなメモリとキャッシュフットプリントを、x86_64の大きなレジスタセットと組み合わせることです。 (参照: Debian X32 Portページ )。

x32では、メモリ使用量が最大約30%削減され、速度が最大約40%向上します。アーキテクチャの使用例は次のとおりです。

  • vserverホスティング(メモリバウンド)
  • ネットブック/タブレット(低メモリ、パフォーマンス)
  • 科学的課題(パフォーマンス)

x32はやや最近の追加です。カーネルサポート(3.4以上)、ディストリビューションサポート(以下を参照)、libcサポート(2.11以上)、およびGCC 4.8以上(アドレスサイズプレフィックスサポートの改善)が必要です。

ディストリビューションの場合、Ubuntu 13.04またはFedora 17で使用可能になりました。カーネルサポートは、0x00000000から0xffffffffの範囲内にあるポインターのみを必要としました。 System Vアプリケーションバイナリインターフェイス、AMD64(LP64およびILP32プログラミングモデルを使用) 、セクション10.4、p。 132(その唯一の文):

10.4カーネルサポート
カーネルは、システムコールから返されるスタックとアドレスを0x00000000〜0xffffffffの間に制限する必要があります。

bootingがサポートされているカーネルの場合、syscall.x32=yオプションを使用する必要があります。カーネルをbuildingする場合、CONFIG_X86_X32=yオプションを含める必要があります。 (参照: Debian X32 Portページ および X32 System Vアプリケーションバイナリインターフェイス )。


Debianの人々がテスト後にいくつかのバグを報告してから、最近の移植を通じて私が学んだことの一部を以下に示します。

  • システムはX86によく似ています
  • プリプロセッサは__x86_64__(およびフレンド)and__ILP32__を定義しますが、 __i386__/__i686__(および友人)ではありません
  • __ILP32__を単独で使用することはできません。ClangおよびSun Studioで予期せず表示されるためです
  • スタックと対話するときは、64ビット命令pushqおよびpopqを使用する必要があります
  • レジスタが32ビットのデータ型から生成/設定されると、adcqのように、それらに対して64ビット操作を実行できます。
  • 上位32ビットで発生する0拡張子に注意してください。

テストプラットフォームを探している場合は、Debian 8以降を使用できます。 Debian X32 Port のwikiページにはすべての情報があります。 3秒間のツアー:(1)起動時にカーネルでX32を有効にします。 (2)debootstrapを使用してX32 chroot環境をインストールし、(3)chroot debian-x32を使用して環境に入り、ソフトウェアをテストします。

29
jww

x86はIntel 80x86互換を意味します。これには、16ビットのみのプロセッサである8086が含まれていました。現在では、32ビットのIntel互換命令セット(通常はPentium以降のもの)を搭載したCPUをほぼ意味しています。読まないx32 使用されています。

x64は、x86互換性がありますが、64ビットモードもあります(ほとんどの場合、AMDによって導入された64ビット命令セットが意味されます。 )。

そのため、ほとんどの場合、次のように簡略化できます:x86は32ビットモードでIntelと互換性があり、x64は、64ビットモードでIntel互換です。

8
DarkDust