雑多なこと

386とか686って何?

IntelのIA32系(86系、80x86系)CPUの、基本となるアーキテクチャの世代を示す俗称(番号)のこと。Intelが公式に使用することは無いが、各種ディストリがパッケージやパッチ等の対応するCPUの世代・種別の表記に慣用的に用いることが多いため、基礎知識のひとつとして覚えておいた方が良い。

大別すると、16ビットCPUの世代(8086,186,286)、32ビットCPUの世代(386,486,P5/586,P6/686,P7/Netburst/786)に分けられる。 Linuxは初めから32bitの80386以上向けに開発されたため、386以前の16ビットCPUについて扱われることはまず無い。 *1

8086 8086。16bit。最初のx86系CPU。MS-DOSやCP/M86等の原始的なDOSが動作するのみ。
186 80186。16bit。周辺チップを統合した上、命令の拡張と高速化を行った8086。
286 80286。16bit。マルチタスク関連の命令を強化したが、それを活用したのは初期のOS/2程度。
386 80386 / i386。86系初の32ビットCPU。命令体系の刷新、MMUとVirtual86モードを搭載し、IA-32の歴史はここから始まった。
486 80486 / i486。高速化し、FPUを内蔵する等の強化を図った。
586 Pentium / MMX Pentium。P5アーキテクチャ。さらに高速化し、末期にはSIMD命令(MMX)を内蔵した。
686 Pentium Pro / 2 / 3 / M。P6マイクロアーキテクチャ。32ビット命令の高速化に特化し、Pentium 3でSSE命令を搭載。
786 Pentium 4。P7/Netburstアーキテクチャ。スケーラアーキテクチャに特化して高クロック化を図った。
Core Intel Coreアーキテクチャ。Netburstを置き換える新アーキテクチャ。ただしCPUIDではP6系と表示される。

※ CeleronはP6(i686)系とNetburst(i786)系が混在しているため、ここでは省いた。概ね1.4GHzまたはそれ以上のものがNetburst系、これ以下の動作クロックのものがP6系のCeleronである。

IA32 Intelの80386から始まった、x86系の32bit命令アーキテクチャ。現在の主流。
x64 AMDが始めた、IA32命令セットと共存可能な64bit命令アーキテクチャ。Windowsが64bit環境でIA32からの互換性を評価して採用を決めた事から、PCの世界では今後の主流に
IA64 IntelとHP(Hewlett Packard)が始めた、IA32とは直接の互換性の無い64bit命令アーキテクチャ。素性は良いが、互換性の点でWindowsに避けられたためPCの世界では斜陽(ワークステーションやサーバの世界では現役)

※ これらは市場において俗称として定着している呼称であって、正式な製品名や規格の名称ではない。

歴史 (386、686とか)

8086 〜 80286

一般に、かつてIBMが開発したパーソナルコンピュータ (the PC,IBM-PC) の後継機、IBM-PC/ATの互換機を指して、AT互換機(IBM PC/AT互換機)と呼ぶ。 IBMが、PC/ATの祖となるthe PC、初代IBM-PCを開発したときにそのCPUとして採用したのが 、Intel 製 の16bit CPU「8086」であった。(厳密には、16bit CPUである8086の外部データバスを8bitにシュリンクした、廉価版の8088という製品を採用した。その動作クロックはわずか5MHz。)

IBMがThe PCにこのIntelの8086CPUを採用するにあたり、当時まだポッと出のベンチャーに過ぎなかったIntelごときの製造・供給能力には信頼を置けないとしたことから、8086(8088)を他の半導体メーカーにセカンドソースとして生産させることを要求し、Intel側もその条件を呑んだ。ただし、このセカンドソース生産とは互換製品の開発・製造ではなく、Intel純正のマスクを用いて(例えば8086そのものを、バグやエラッタも含めて単純にコピーして)量産製造することを言う。このときに8086のセカンドソースを生産した半導体メーカーからは、のちに独自に拡張した86系互換CPUを製造・供給するものも現れるようになる(NECやAMDなど)。

その後、インテルがリリースする8086後継のCPU製品は、Pentiumが登場するまでの間ずっと「なんとか86」という製品名がつけられていたため、8086の後継CPUを「86系」や「x86」等とする呼び方が定着していった。

8086はその後、一部の命令を拡張して僅かに高速化した「80186」という製品が登場した後、さらに高速化し16bit CPUでありながら仮想メモリやマルチタスク環境をサポートした「80286」というCPUまで進化する。80286の初期は8MHz、最終的には12MHzまでの製品が出荷された。現在とは優に2桁以上違うね。

しかしこの80286の機能を活かした専用OSやアプリケーション環境が広く普及することは無く、一般的には当時事実上の標準(デファクトスタンダード)となっていた原始的なシングルタスクOS、MS-DOSを動かすための「ただ単に高速な8086」として扱われるのみであった。 (初期のOS/2は、この80286の仮想メモリやマルチタスク環境をサポートした、当時のコンシューマ用OSとしては画期的なOSであったが、上述のように広く普及することは無かった)

i386 〜 i486

80286の後で登場した「80386」ではCPU構造の大幅な改良を行い(というよりも、新規に設計した32bit CPUに8086/186/286との互換性を持たせていた、と言った方が正しいくらいの変貌ぶりであった)、単にアドレス空間やレジスタ、演算命令などを32bitに拡張するのみならず、MMUや仮想CPU機能まで備えた、一人前の32ビットCPUに成長した。動作クロックは16〜33MHz。

この頃、「CPUの命令体系や製品名をパクるな」という主張からインテルが8086互換プロセッサを供給していたメーカーを相手どって起こしていた互換CPUメーカーとの間での訴訟が決着し、「マイクロコードは著作物とは認めない」とか「数字の羅列だけでは商標とは言えない」などと言われて負けてしまったため、286以降のセカンドソース生産を取り止め、80386という名前をi386に改めたり、後継CPUではマイクロコードの採用を減らしてワイヤードロジック化を進めたりする動機となったりしている。またこの訴訟以降、セカンドソースを生産することができなくなった8086互換プロセッサメーカーからは、独自設計のx86互換プロセッサが引き続くこととなる。

そんなゴタゴタはともかく、i386は32bit CPUとしてはいっぱしの機能を実現していたため、そのころ大型コンピュータや高価なワークステーション等の限られた環境でしか動作していなかった近代的な32ビットOSも、やりようによってはPCに移植できるんじゃないの?って事で、ダウンサイジングの時流に乗ってUNIXライクなOSを386で動くように移植・実装しようという動きが活発になっていった。 BSD系のPC-UNIXが登場したり、Linus氏がPOSIXなシステムコールがついたOS(もともとはターミナルエミュレータだったらしい)を開発できるようになったのも、i386の登場によって真っ当な32bitプロセッサが安価なPCに載るようになったお陰といえる。 とはいえ、この当時は「PCでUNIXライクなOSが動くだけで凄い」というのが実状であった。

i386の登場を契機にこれらのUNIX likeなOSが開発・移植されるようになったことから、現在のIA32用のLinuxカーネルでも(386向けにビルドされていれば)原理上はi386搭載機でもそのまま動作する。(とは言え、当時のPCそのままではメモリもHDDも狭すぎ・遅すぎるので、現在のそこらのディストリビューションをそのまま入れて動作させるのは困難だろうと思われ)

その後 ワイヤードロジック化を押し進めてさらに高速化した80486(i486)が登場した。当初の動作クロックは25または33MHz。FPUの有無によってi486DXとi486SX(FPU無し)に差別化されていた。程なくクロックダブラー技術を用いてFSBの2倍速でCPUコアを駆動する50MHzと66MHzの486DX2が登場し、i486 の最後の世代DX4では、動作クロックが遂に100MHzの大台にまで達する。 66~100MHz駆動の486でBSDやLinuxを動作させると、SunやHPあたりが当時べらぼうな価格で売っていたエントリークラスのワークステーションとタメを張れるほどのパフォーマンスを発揮したため、貧乏な研究室や学生たちが挙って486マシンとBSDやLinuxに飛びつき始める。このあたりからPC-UNIXの本格的な隆盛が始まった。

この時期の互換プロセッサは、386のセカンドソースを生産できず、市場として終わっていた286からも締め出された元セカンドソース生産メーカー各社が、i386が終わるギリギリのタイミングでようやく市場に追い付きIntelの追撃を始めたことで活況を呈しており(言い替えれば混乱の渦中とも)、Cyrixの486DLCやTIの486SLC、IBMのBlueLightning等が登場し、これらを用いたアクセラレータも様々なサードパーティーやベンダーから乱造・発売された。

ただし、互換プロセッサにおける「486なんとか」は実際にはi386互換であり、i486互換プロセッサには「586なんたら」と命名される等、互換プロセッサメーカーにしてみれば「Intelの対象プロセッサよりすごいよ」と誇示してみたい感覚だったのだろうが、ユーザーにしてみれば必死な背伸びぶりも下手をすれば混乱の元でもあり、なんだかなーというのが正直なところであった。 中にはIntelの486DX4よりも高クロックの133MHzで動作する製品も登場したが、実効パフォーマンスでは…というのが実態でもあり、ユーザーに「取り付けても期待ほど速くはならない(486(Pentium)が欲しかったらそんなもん買わずに最初から486(Pentium)マシンを買え)」という認識を植え付け、AT互換機の世界でCPUアクセラレータが廃れてゆく原因を醸成したのもこの時代である。

またこの「背伸び命名」は現在も健在であり、AMDのx86互換プロセッサは486に対してK5、Pentium(586)に対してK6、P6(686、PenPRO〜Pen2/3/M/Core)に対してK7、Netburst(786)に対してK8…と、同世代のIntel側のx86プロセッサのxの部分にIntelよりひとつ上の数字を設定する慣わしになっている。

Pentium

i486 の次に登場したのが「Pentium」。これも開発中はP5(586)なんて呼ばれたが、単なる数字の羅列やアルファベットと数字の組合せだけでは商標とは認めないとする判例を受けてこの商標(Intelによる造語)が生まれた。

初代のP5は、FPUに演算バグを持っていたり、駆動クロック(50〜60MHz動作であった)を上げられず、既に普及していた100MHz駆動のi486DX4と実効性能で大差なかったりと、わりと踏んだり蹴ったりの醜態を晒してしまったため、のちにP54Cという改良高クロック版(75〜133MHz)が登場した。一般的に(MMXがつかない)Pentiumと言えばこのP54Cを指す場合が多い。このP54CとP5を区別するために、P5(初期の50〜60Hz動作のSocket4用)Pentiumを指して"Classic Pentium"と呼ぶ場合もある。 Pentiumは、最終的にはSIMD命令を追加してさらに高クロック化したP55C(MMX Pentium)まで進化し、デスクトップ用(Socket7)で166〜233MHz、ノート用では133〜300MHzの製品までが出荷された。

"i586"というのは Intel側では一切用いていない俗称ではあるが、i386/i486 互換の後継CPUという意味から、伝統的呼称として市場で定着したものとされる。

AMD の「K6」、「K6-2」、「K6-III」もまたこのPentiumの互換プロセッサと見なされるものであるため、基本的には i586 に含む。ちなみに、最初の K6 に 3DNow! 浮動小数点拡張命令を加えたものが K6-2, それに二次キャッシュを積んだものが K6-III (K6-II+ も二次キャッシュあり) で、一緒くたに K6 と呼ばれることが多い。

P6マイクロアーキテクチャ

P5(586)世代の後継で、再びマイクロコード路線に復帰しP6マイクロアーキテクチャを採用したたP6(686)世代の最初の製品として、もっぱらサーバ向けに登場したのが「Pentium Pro」 である。自然の成り行きで i686 と呼ばれる。

このPentium Pro は、133MHzから200MHzまでの製品が出荷された。製品レンジとしては現在で言うXeonの祖先と言える。一般コンシューマ向けの市場まで降りてくることはなく、しかも直接の後継製品に恵まれなかった(Xeonに発展的解消した)ために、縁遠い大多数のユーザーたちからは失敗作と誤解さがちな不遇の製品ではあるが、2006年現在もPentiumProを搭載して現役で稼働を続けるサーバが生き長らえているくらいであり、十分な性能とチップセットの安定性が評価され、実際に使用していたユーザーの間では定評のある「隠れた名プロセッサ」といえる。

その後現れた「Pentium2」やら「Pentium3」やら「Celeron」やらは、パッケージやソケット(スロット)形状を何度も変更してはいるものの、基本アーキテクチャは Pentium Pro から変わっていない(すべてP6マイクロアーキテクチャの発展型・バリエーションに過ぎない)ので、呼称も i686 のままである。 Pentium2は233〜450MHz、Pentium3では450MHz〜1.3GHz、Celeronは233MHz〜1.4GHzの製品が出荷され、各プロセッサはその中でもいくつかの世代に別れている。またIntelのIA-32プロセッサとして、動作クロックが初めて1GHzの大台に乗ったのはPentium3(Coppermine)である。

P6マイクロアーキテクチャはその基本設計の良さから、その後 Pentium2〜3、Pentium Mシリーズ、果てはIntel Coreアーキテクチャとして生きながらえている、Intelのラインナップ中でも特異と言えるほどの長寿アーキテクチャとなった。初代のPentiumProと最新のCore2Duoでは、その動作クロックは実に20倍近くまで向上している。

AMD の「Athlon」、「Duron」も基本的に i686互換 に含む(但しその実装については、P6マイクロアーキテクチャとは異なる、まったく別個の実装である)。このAthlonはK6の後継CPUであり、開発名でもある「K7」と呼ばれることもある。

現在注意しなければならないのはVIA の C3 シリーズのプロセサで、これは i686 世代ではあるが P6 アーキテクチャの命令を一部欠き、i486 と i586 中間ぐらいの命令セットとなっている。i686 指定では動かない場合があるので注意。

Net Burst(Pentium 4)

P6マイクロアーキテクチャに続く新アーキテクチャが、Netburst と呼ばれる Pentium 4 ファミリで、2005 年現在の Intel IA-32 の主流である。

8086から数えて7番目のアーキテクチャであることから、市場においてはi786や786などと俗称されることもあるが、Intel側ではもちろんこのような呼称は一切用いていない。またIntel社内のプロセッサ開発プロジェクトにおいてもP7アーキテクチャは歿っており(当初P7系プロセッサの開発プロジェクトを担当した開発チームはIA-64の開発に回されたことで、P7プロジェクトは消滅した。後にNetBurstとなったものはP8であり、P7ではない)、製品として存在していない点に注意が必要である。

このアーキテクチャは内部構造は一新されているが、命令セットは追加された SSE2,SSE3 などの浮動小数点命令を除けばソフトウェアからは P6 アーキテクチャとほぼ同じに見え、SSE 命令を多用するエンコードなどを除いてユーザが違いを意識することは少ない。

Net Burstは当初、IPC(Instructions Per Clock、1クロック当たりに処理可能な命令数)を下げてでもより高クロックな動作を目指し、最終的に高クロック動作での高パフォーマンスの達成を目標に設計された、野心的なアーキテクチャであった…が、エンジニアリング上の限界から高クロック化に失敗し、後継製品ではIntel Coreとして、P6マイクロアーキテクチャ(の発展系)への先祖返りを果たしたことは、記憶に新しい。

Intel Core

高クロック動作できなければ意味がないNetburstが、肝心の高クロック化に失敗してしまったため、P6マイクロアーキテクチャ(の発展系)に先祖返りしたのがこのIntelCoreである。実際には初期のP6の面影など俄には感じられない程に手が入っており、単純に先祖返りやーいと囃し立てるのも憚られるのだが、なら886なのかよ、というとどうもそうではなく…なにやら複雑な事情があるようである。げふんげふん(咳)。

元々素性の良いP6マイクロアーキテクチャをベースとしてこれをマルチコア化したものがCore2Duoであり、正統進化の道はこちらだったという事かもしれない。Windows環境では早速そのパフォーマンスを享受しており、Windows VistaもCore2Duoに最適化されるという話もあるようだが、Linux環境ではその対応が(特にチップセット方面の対応が)やや遅れ気味ということもあり、2006年夏の段階ではもっぱら人柱用、といったところか…。

64bit CPU

「Itanium」等の Intel 次世代 64bit CPU のアーキテクチャは Intel により「IA-64」と命名された。これに対して i386 から今までの 32bit アーキテクチャは「IA-32」と命名された。また、Intel 以外は IA-32 のことを「x86」と称することが多い。色々あるなぁ。

IA-64 の大きな問題点は x86 とのバイナリ互換性がなくなってしまっている点である。過去のしがらみを切り捨てて 64bit アーキテクチャとして良いものを目指したせいで、x86 向けに開発された OS などのソフトウェア資産がそのままでは動かない可能性がでてきた(OSより上位のアプリケーション等のソフトウェアは、コンパイルし直せば大丈夫なこともある)。マイクロソフトはこの点を見越して(かどうかは知らんが)、アプリケーションがCPUのネイティブコードにべったりと依存することを避けた抽象化コードの実行処理系を.NETと称して組み込もうとしている。

これに対し、AMDの64bitチップである「Opteron」や「Athlon64」(AMD64 / x86-64) は 80286 から i386 に進化した時の様に互換性重視で進化したアーキテクチャになった。これまでのx86向けのOS他ソフトウェア資産がほぼそのままで動き、メーカーの移行作業自体は楽な設計になった。マイクロソフトはコンシューマ向けのWindows 64bitエディション(x64)をx86-64向けのみに統一させる意向を発表した。ハードウェアメーカーも互換性重視のx86-64を歓迎。

この全体的な業界の動きにともない、IntelはAMDのx86-64互換アーキテクチャを「EM64T (IA-32e)」と称して、今後のPentium 4などに採用する方針を決定した。このチップはIA-64とは棲み分けが行われることになった。(ただし微妙に x86-64 と EM64T とは違いがある。これは、最初にAMDの発表したx86-64命令になかった3命令が製品として出荷されたx86-64製品には追加されていたため、Intelは初期のEM64Tプロセッサにはこの3命令を搭載できなかったためである。) ちなみに、このアーキテクチャの呼称は AMD が AMD64、Microsoft が x86-64、Intel が EM64T とバラバラである。Debian などが AMD64 と呼んでいるのは、開発時期による。

で、そのPentium4で採用されたNet-Burstアーキテクチャが、俗に786などと呼ばれていたりもするが、当のインテルがNet-Burstダメポと見限ってしまった模様なので、i786 とかの名称はもう使われずにこれからの時代へと移行しそうな気配でもある。

参考情報

開発

何をすれば良いですか?

とりあえず英語が使えなければ話にならない。

Linuxのための英語を勉強するスレ

http://academy6.2ch.net/test/read.cgi/english/1233898239/l50

カーネルの開発をしたい。

http://www.kernel.org/

他の開発をしたい。

適当にやれ

サバンナというところもある。

Savannah.gnu.org

http://savannah.gnu.org/

プログラマになりたい

ここが良いだろう

http://www5c.biglobe.ne.jp/~ecb/index.html

| 新しいページ | 編集 | 差分 | 編集履歴 | ページ名変更 | アップロード | 検索 | ページ一覧 | タグ | RSS | ご利用ガイド | 管理者に問合せ |
|ログイン|