前回が80286だったので、今回は80386です。昭和63年に工学社さんから翻訳出版されたもの。原著はクロフォード氏とゲルシンガー氏による前年の御本です。80386を設計したチームの中心人物お二人さまの御執筆。そういえばゲルシンガー氏はインテルのCEOまで務めたですが、昨年秋にクビになられた筈。およよ。
※『Literature Watch Returns (L.W.R.)』の投稿順 index はこちら
80286登載のPC/ATの登場を前回の御本のときに書きました。しかし登場後、80286の「売り」であった筈の「プロテクトモード」はアプリ的にはかなり長い間使われることなく、「速い8088」としての利用が主だった記憶。PCに使われた8088のクロック速度は約5MHz弱、一方、80286はというとPC/ATの最初期バージョンは確か6MHz、主力は8MHz(後にAMDがもっと速いクロックの製品だしてインテルと揉めることになる)でした。しかし両者のクロック速度は大差ないけど処理速度は段違いでした。
このCPU性能の違いには明らかな理由があります。それがバスに現れてます。The PC、PC/XTに採用された8088は、「悪名高い」マルチプレクス・バスです。8086も同じです。アドレスを出しておいて外部デバイスにアドレスをラッチしてもらい(ALE信号による)、ラッチ後、アドレスバスの下位をデータバスに切り替えてからデータのやり取りをするという方法です。この方法の良いところは端子数が少なくて済む(ボード・コストもお安くできる)ところ。同時期の他社16ビットCPU、モトローラ68000、ザイログZ8000に対して8088、8086は小さくて「お求めやすい」40ピン・パッケージに入ってました。これもIBM採用の一因かと。
しかし良いところがあれば悪いところもあり、8088、8086は基本バス・サイクルは4クロックです。16ビットデータバスの8086であればこの4クロックで2バイト(16ビット)を出し入れできますが、8ビットデータバスの8088は同じクロックで1バイトです。性能低いぜ。
一方80286は、アドレス、データバスは完全分離、2クロックで2バイトの出し入れができます。同じクロックの8086と比べて倍、8088と比べると4倍のバスバンド幅っす。当然、内部のパイプライン構造も「太い」フェッチ速度、データの出し入れに対応できるように8088/86よりは各段に改良されてました。
「速い8088」として受け入れられた80286ですが、さらなる高速化には障壁がありました。プロセスです。80286はNMOS(インテル的にはHMOSと呼称)です。直流電流が流れてしまう回路形式デス。8MHz動作でもチンチンに熱くなってました(当時はCPUクーラーを取り付けるという解決策もなく。)
これを打破すべくインテルは80386にてプロセスを変更しました。直流電流が流れない(トランジスタのスイッチング時のみ電流が流れる)CMOSプロセスへです。現代のプロセッサの大多数はCMOSなので、プロセス的には80386が嚆矢(当時も他社にCMOSプロセッサはあったけれども。)
80386はその初期から286の倍の16MHz動作を叩きだし「速い80286」となります。CMOS化によりクロック速度は伸びたものの、内部のパイプライン動作的には80286と「似たようなもん」であったので、同じクロックで走らせると「似たような」性能になってしまうのですが。
しかし、80386には80286に無い、今日につながる大きな1歩が含まれてました。32ビット化です。80286はプロテクトモードを導入し、セグメンテーションの世界で16Mバイトの物理空間上に仮想記憶まで備えたシステムを構築できるように設計されました。一方80386は、80286のセグメンテーション世界の先に(互換性はあり)、4Gバイトの物理空間上にリニアな32ビット世界、ページングが使える、を構築できるようになってました。
80286のセグメンテーションの世界は旧世代のOSの一部でサポートされたものの、結局、Windows系もUnix系もフラットでリニアな空間が使える80386以降対応となりました。これがx86の32ビットの世界です。命令セット的には80386がその基礎っす。
つまり、この分厚くて重い’(約700ページ弱)ご本はその386の32ビット世界でのプログラミングを解説するために、設計者自らが表したものだ、と。ホントか?
なお、現行のパソコンは64ビットです。これはこのご本の著者らが作った32ビットの世界を64ビット化したものです。64ビット化したのはAMDで、インテルではありませぬ(インテルは64ビットではVLIW推しだった。これも黒歴史?失礼。)しかし、AMDの64ビット化はインテルの32ビットを下敷きにしてきわめて整合性よく設計されていたので、結局インテルもAMDに同調することになっていきます。ただし、64ビット世界に入ると32ビット世界のソフトはいつでも走るけれども16ビットはダメよ、という仕組み。よって80386用の32ビットソフトは今でも簡単に走らせられるけれども、8088/8086、80286向けのソフトは過去のものとなりました。