x86
Intel 8086、及びその後方互換性を持つマイクロプロセッサの命令セットアーキテクチャ
x86︵エックスはちろく[1]︶は、Intel 8086およびその命令セットアーキテクチャ、およびそれと互換性を備えた命令セットを持つマイクロプロセッサ群の総称である。広義にはインテル以外のメーカー︵AMDなど︶の互換プロセッサを、さらに広義にはx86と互換性を保ちつつAMDによって64ビットに拡張され、それにインテルが追随し世に普及したx64︵x86-64︶アーキテクチャも含む。
開発者 |
インテル AMD |
---|---|
ビット数 | 16ビット, 32ビット, 64ビット |
発表 | 1978年 |
デザイン | CISC |
タイプ | Register-Memory |
エンコード | Variable (1 to 15 bytes) |
ブランチ | Condition code |
エンディアン | Little |
ページサイズ |
386:4KB Pentium:4MB x64:1GB |
拡張 | x87, IA-32, MMX, SSE, SSE2, x64, SSE3, SSSE3, SSE4, AVX, AMX, AES, VT-x, VT-d, SVM |
オープン | 非公開 |
レジスタ | |
汎用 |
16 bit: 6 semi-dedicated registers + bp and sp; 32 bit: 6 GPRs + bp and sp; 64 bit: 14 GPRs + bp and sp. |
初期は純粋なスカラープロセッサであったが、1997年にマルチメディア等のデータ処理のためにベクトル計算の機能を取り込んだ以降はハイブリッドなプロセッサとして進化を続けている[注 1]。
概要
編集
この命令セットアーキテクチャをもつプロセッサの型番が、最初の段階で﹁8086﹂、﹁80186﹂、﹁80286﹂、﹁80386﹂、﹁80486﹂と続いたため、総称して﹁80x86﹂、更に型番の下2桁が共通するところから﹁x86﹂︵エックスはちろく、ペケはちろく︶や﹁86系﹂などと呼ぶようになった。これらは初期の8086から80286までの16ビットのプロセッサの通称として始まり、主にユーザーや互換チップメーカーが用いた。同時期のモトローラのライバル的MPU﹁MC68000﹂と、そのファミリーがやはり型番から﹁68系﹂と呼ばれたので、それと対比するためにも用いるようになった。
最初に登場した8086は、1978年にインテルがリリースした16ビットのものであった。その8086、およびそれを多少改良したIntel 8088が、1980年代前半にIBM PCなどに採用された。これにより、パソコンなど小型コンピュータのデファクトスタンダードとして広く普及した[2]。1985年リリースの80386 (i386) は32ビットに拡張した。さらに2000年には、AMDが64ビットへ拡張する計画を発表し、2003年に発売した。インテルもそれに追随し、''x64'' (x86-64) が普及した。
「#歴史」も参照
なお、x86-64あるいは単にx64が登場した直後の移行期は、移行の必要性を訴えたり、移行作業を行ったりする都合上、なかんずくx64という用語は、主にx86と対比し、区別するために用いられた。つまり、32ビットのものと64ビットのものを対比し、区別するために使われていた。その後、64ビットのものが普及するにつれて、﹁x86﹂でx86-64まで含めた総称として使うような語法も見られる様になった。その結果﹁x86﹂という場合、16ビットから64ビットまで、ともかく最初の8086の命令セットアーキテクチャと互換性を備えた命令セットを持つプロセッサ群を広く指す総称として使用されるようになっている。AMDやVIAなどの互換プロセッサも含まれ、さまざまなメーカーによってさまざまなブランド、型番のものが販売されてきた。
「#製品群と世代」も参照
パーソナルコンピュータ (PC) からスーパーコンピュータ、サーバ、組み込みシステムまで広く使われていることから、従来は﹁PCサーバ﹂や﹁IAサーバ﹂と呼んでいたカテゴリーも﹁x86サーバ﹂や﹁x86システム﹂と呼ぶベンダーが増えている。
32ビットアーキテクチャに範囲を限れば、﹁x86﹂と﹁IA-32﹂はほぼ同義である[注2]。
なお、インテルのItanium︵アイテニアム︶プロセッサで使われているIA-64は、x86とは互換性のない、別の設計の64ビットアーキテクチャであるので区別するのが望ましい。Itaniumプロセッサは、﹁x86エミュレーションモード﹂を備えてはいるがx64によるLongモードという名称の互換モードでのネイティブ実行と比較すると低速である[3]。
歴史
編集- 前史
インテルによって1971年に発表された世界最初のマイクロプロセッサ4004や、1974年に発表された8ビットの8080は前史に当たる。
歴史
x86自体の歴史は、1978年に発売された16ビットマイクロプロセッサ8086から始まった。
8086は、8080とのバイナリ互換は無く、大幅に拡張されたものの、アセンブリ言語によるソースコードは大幅な書き換えなしで移植できるよう配慮されていた。同時にx86には、さらに過去からの影響が残った。﹁セグメント﹂と称された変則的なアドレッシング機構を備えてプログラミング上は不便ではあるものの、1MiBと当時としては広大なメインメモリ空間をサポートし、それとは別にI/O空間も設けられた。1979年には、外部データバスを8ビットとし、当時普及していた8ビット用の周辺ICを使いやすくした8088を発表した。[4]
1982年、IBMからIBM PCが発売されたが、これに8088が採用されたことが、以後のx86の運命を決定した。IBM PCの後継となったIBM PC/ATの互換機︵PC/AT互換機︶は後年には単にPCと呼ばれるようになり、x86はPCの為のプロセッサと認知されているが、IBM PCの設計の時点では、1年間で開発を完了するために、安定して入手可能で周辺回路も既存品を使用できること、OSを含むソフトウェアが調達可能であること、などから選定されたに過ぎない。
80186と80286が1982年に発表された。80286は1984年から出荷され、プロテクトモードや24ビット (16MiB) のアドレス空間を持つなどしていたが、パーソナルコンピュータではリアルモードで稼動するi8086向けのPC-DOS(MS-DOS)とそのアプリケーションを搭載し、﹁単に高速な8086﹂としての用法が主だった。
1985年には32ビットに拡張された80386が発表された。後にIA-32と呼ばれることになるアーキテクチャの誕生である。
32ビット化にあたって、16ビット時代のマイクロコントローラ的な部分︵特にその傾向が強かったのは80186︶を見直し、メインフレームと渡り合えるような、という意味でコンピュータとして再設計された。
80386は、8086ほぼそのままのリアルモードと、32ビットのプロテクトモードを持つ。さらにプロテクトモード中の仮想86モードにより、従来の8086のプログラムを仮想化して実行できる。
後にIA-64の登場に際し、32ビットx86アーキテクチャにはIA-32の名称が与えられた。なお、16ビットアーキテクチャに対しては公式の名称は付与されていない。
80386を搭載したPCを最初にリリースしたのは、本家IBMではなく、互換機メーカーのコンパックであった。
その後、486、Pentiumと続き、MMX Pentiumからベクトル計算機能を搭載し始め、64ビット化では紆余曲折を経て最終的に他社の制定したx64アーキテクチャを採用し今日に至る。互換性を維持し、後付で機能拡張が繰り返されたため、レガシーな命令が残されていたり、全体として命令体系が整っておらず非効率的という問題も生じている。
インテル自身は、80386より古くから計画された﹁マイクロメインフレーム﹂iAPX 432、90年代にはRISCのi860とi960、2000年代にはVLIWを改良したEPICアーキテクチャと称するIA-64といった、革新的アーキテクチャによりx86を置き換えようとしたが、ことごとく不成功に終わっている。結果としてx86は後付けの拡張を続け、64ビット化では互換CPUメーカーのAMDが定義した拡張を逆輸入までして、今日までインテルの主力アーキテクチャとして延命している。
製品群と世代
編集
x86が採用されたマイクロプロセッサは多岐にわたり、世代も多く存在している。インテルは普及を目的とし、自社のみで需要をまかないきれないリスク、IBM-PCにi8088を採用するにあたりIBMが他社とセカンドソース契約を結ぶよう要求したなどの事情から、セカンドソースを推奨していたため、各社より互換製品やクローン製品が発売された。
一方で独自に互換機能を実装したNEC V30などの製品に対し、著作権を侵害しているとして訴訟を起こしたこともあった。
●第1世代 - 8086およびその派生。後に複数の互換製品が登場した。
●改訂第1世代 - 80186およびその派生。後に複数の互換製品が登場した。
●第2世代 - 80286。 後に複数の互換製品が登場した。この頃より、製造を拡充したインテルは、セカンドソースも認めない方針に転換した。しかし既得権として各社は引き続き製造を続行し、それに留まらず独自改良を行うメーカーも現われた。
●第3世代 - 80386およびその派生。後に複数の互換製品が登場した。
●第4世代 - 486およびその派生。後に複数の互換製品が登場した。
●第5世代 ("P5") - PentiumおよびMMX Pentium。後に複数の互換製品が登場した。互換製品メーカーに対してインテルが訴訟を起こしており、以後、各社はそれ以前のインテル製品に改良を行った製品か、逆に独自に開発を行うようになった。インテルとのクロスライセンスを利用して合法的に互換のある製品も存在する。AMDは訴訟の和解条件として、命令互換性を維持しつつ独自に製品を設計する様になった。
●インテル
●第6世代 ("P6") - P6マイクロアーキテクチャ系。80x86固有の命令をRISC風命令 (μOPS) に分解して実行する。Pentium Proおよびその派生であるPentium II、Pentium IIIと、それらをベースとしたCeleronやXeon。
●第7世代 ("P7") - Itanium開発のため、P7マイクロアーキテクチャ開発はキャンセルされた。
●第8世代 - Pentium 4などのNetBurstマイクロアーキテクチャ系。
●第9世代 - Nehalemと仮称されている製品が予定されていたが、マイクロアーキテクチャの方向性が変わったため中止。名前は第12世代プロセッサに付された。
●第10世代 - Pentium Mマイクロアーキテクチャ。
●第11世代 - Coreマイクロアーキテクチャ。
●第12世代 - Nehalemマイクロアーキテクチャ。Intel Core i7シリーズなど。
●第13世代 - Nehalemの後継であるSandy Bridgeマイクロアーキテクチャ。Advanced Vector Extensions (AVX) という新しいSIMD命令フォーマットが導入された。
●第14世代 - Haswellマイクロアーキテクチャ
●上述の﹁世代﹂に属さない製品
●Intel Atom - LPIA専用設計の最初のマイクロアーキテクチャ、インオーダ実行、同時マルチスレッディング実装。2008年発表。
●Larrabee - x86から派生した命令セットをシェーダーコアに採用したGPU、インオーダー実行。[5]
●AMD
●第4世代 - Am4x86の他にAm5x86が発売された。
●第5世代 ("K5") - AMD K5
●第6世代 ("K6") - AMD K6、AMD K6-2、AMD K6-III。
●第7世代 ("K7") - Athlon、Duron。
●第8世代 ("K8") - OpteronおよびAthlon 64系。
●第9世代 ("K9") - 犬 (canine)と同じ発音である事から、Houndと呼ばれていた系統だと推定される。インテルと同様に方向性の失敗によりキャンセル。
●第10世代 ("K10") - PhenomやAthlon II、K10に基づくOpteron、Sempronなど。
●第11世代 ("K11") - FXシリーズ、またBulldozerに基づくFusionAPUなど。
●NexGen
●第5世代 - Nx586。バスやチップセットなどインテルと互換性がなく普及しなかった。
●第6世代 - Nx686。開発途中でAMDに買収される。AMDは開発中のK6を中止し、Nx686を改良した製品をK6として発売した。
●Rise Technology
●第5世代 - mP6。インテルの第五世代のマザーボードが使用できる。数字が6なのは、インテルなど他社が第六世代に突入していたためと思われる。
●第6世代 - RiSE Tiger370。mP6に競争力が無く、今世代は製品化されていない。SiSにライセンス供与してRiSEは撤退した。
●サイリックス
●第4世代 - Cx486SLC、Cx486DLC。386用のI/Oバスを持った第四世代のCPU。
●第5世代 - M1およびそれの派生コア、M2コアを採用した5x86、6x86、6x86MX、MII。
●Integrated Device Technology (IDT)
●第6世代 - IDT-C6を開発。商品名はWinChip。技術的にはIntelのP5の世代。
●VIA
●第6世代 - 買収したCentaur TechnologyのWinChip4をCyrix IIIと改称・設計変更して商品化。その後、VIA C3に名称変更。その後、インテルとのライセンス切れによりC3を置き換えるC7を発売。
●第7世代 - インテルとのライセンス切れにより、そのライセンスに拠らないV4バスを採用したC7を発売。基本的にはC3と特段の違いはない。
●第8世代 - VIA製CPUとして初めてアウト・オブ・オーダー実行およびスーパースケーラ命令パイプラインを搭載したVIA Nanoを発売。
●トランスメタ
●第6世代 - 命令セットのみx86を採用したVLIW型CPUを開発。世代は全く関係なくここでの表記上の便宜的なもの。最初の製品としてCrusoeを発売。低消費電力の先鞭を付けた。
●第7世代 - 後継のEfficeonを発売。しかし財務的に思わしくなく、チップ開発販売ではなくライセンス販売に転じた。
基本的な仕様
編集この節の加筆が望まれています。 |
主な拡張
編集ソフトウェア的な環境は、80386から下位互換性を保ちながら拡張されてきた。これらはユーザが使用可能な拡張については486以降のCPUではCPUID命令を発行することにより、どの拡張が有効であるかを知ることができる。
プロセッサ全体
編集- システムマネジメントモード:386SL以降
- プロセッサ内APIC:Pentium以降
- メモリタイプ範囲レジスタ (MTRR):Pentium Pro以降
- ハイパースレッディング・テクノロジー:Pentium 4 HTの一部と、Nehalemの一部以降
- CMOV命令:Pentium Pro以降
- デバッグレジスタ
- 64ビット拡張:Pentium 4 Prescott E0・Athlon 64
- マルチダイ・マルチコア:Pentium D
- シングルダイ・マルチコア:Intel Core・Core 2・Athlon 64 X2
- プロセッサ内キャッシュメモリ:i486以降
- スーパースケーラ:Pentium以降
- 対称型マルチプロセッシング:Pentium以降
- ライタブルコントロールストア:Pentium Pro以降
- デュアルインディペンデントバス:Pentium Pro以降
プロテクトモードに関する拡張
編集- 物理アドレス拡張(PAE):Pentium Pro以降
- ページサイズ拡張(PSE):Pentium以降
- 36ビットPSE(PSE36):DeschutesコアのPentium II/Pentium II Xeon以降
- 40ビット物理アドレス拡張:Xeon MP
仮想86モードに関する拡張
編集- 仮想モード拡張(VME):Pentium以降
仮想マシンに関する拡張
編集数値演算に関する拡張
編集
●浮動小数点演算機能 (x87 FPU) の統合: 486以降
●高速な浮動小数点演算コンテクストのセーブ
●SIMD命令セット
●MMX: MMX Pentium以降
●3DNow!: AMD独自のSIMD拡張命令
●SSE: Pentium III以降
●SSE2: Pentium 4以降
●SSE3: Pentium 4、Prescottコア以降
●SSSE3: Xeon 5100, Core 2 以降
●SSE4.1: Xeon 5400, Core 2 Penrynコア 以降
●SSE4.2: Core i7 以降
●SSE5: AMD Bulldozerコア 以降。SSEで初のAMD独自命令。
●AVX: MMX/SSEの後継となるSIMD命令セット。Sandy Bridge以降。
●AVX2: Haswell以降。
●AVX-512: Xeon Phi、Skylake以降のXeon
●AVX10
●AMX
省電力に関する拡張
編集- Intel SpeedStep テクノロジ: Pentium III-Mから搭載
- Cool'n'Quiet: AMDによる省電力機能実装
- PowerNow!: AMDによるモバイル向け省電力機能実装
その他
編集
●インテル ターボ・ブースト・テクノロジー: Core i5、Core i7の一部。熱容量、電力容量の許容範囲内で、CPUクロックを規定より上げる。
●AES-NI (AES instruction set): AESの高速化。Westmereの一部以降で対応
●Trusted Execution Technology‥Trusted Platform Module対応
●Pentium FDIV バグ
脚注
編集出典
編集- ^ x86 - デジタル大辞林
- ^ IT用語辞典【x86, x86系】
- ^ ASCII.jp:32bitアプリを64bit Windows 7で動かす「WOW64」 (1/3)|あなたの知らないWindows
- ^ 田辺皓正(編著)『マイクロコンピュータシリーズ15 8086マイクロコンピュータ』丸善株式会社、1983年4月30日。
- ^ インテル (2008年3月17日). “Intel Corporation's Multicore Architecture Briefing”. 2008年4月16日閲覧。