12/08/2012

x86アーキテクチャを語る 〜ハードウェア編 その1〜

久々に続き書く気になりました。よって書きます。


今日は、ハードウェア構成の歴史的な遷移を語ろうかなと思います。

最近のPCの構成要素はCPU、PCHの2つのチップが中心となる構成になっています。
つい2年くらい前まではCPU、MCH(ノースブリッジ)、ICH(サウスブリッジ)の3チップ構成でした。

でもね、シリコンの集積技術の向上でチップの統合が進んでますが、元祖PC/ATは、もう何チップあるのか数えるのがメンドクサイくらいチップ乗ってます。もうゲジゲジ(DIP)だらけです。

で、例えば、現在はPCHに内蔵されている割り込みコントローラ(8259A)やDMAコントローラ(8237A)、タイマー(8253)、ディスクコントローラは全部別チップだったのです。
CPUの数値演算コプロセッサ(80287)も別チップだし。

今日のポイントはここんとこです。
つまり、当時のチップの互換性を維持してPCHに統合されているんです。そうしないとDOSとかブートローダとか古い仕組みに依存しているソフトは動きませんからね。

当時の設計者が別々のチップを組み合わせてPC/ATを設計したわけですが、これが互換性維持のために約30年もの間、継承されているというわけです。うーーん興味深いですねえ。
なので現在のチップセットでシステム設計とかやってる人は、そこんとこを考慮に入れておくべきです。

例えば割り込みコントローラとか、当時は1つのチップでは事足りなかったので8259Aを2つ使って合計16本の割り込みを扱えるように設計してました。ですが、実はIRQ2はカスケード接続に使っていて、デバイス用には使えなかったりします。
さらに、当時の設計でタイマーはIRQ0とかキーボードはIRQ1とかに繋いでいたので、これを変えると古いソフトが動かなくなるちゅうわけで、現在でも踏襲されていたりします。
で、これがこのまんま現在のPCHに入っています。現在の技術を使えばカスケード接続なんて回りくどいことをせんでも、いくらでもシンプルかつ高機能にできるのに、当時の仕様のまま入ってるんです。

なので、x86でハード見るときは、なんだ、このアホ仕様と思うことも多いと思いますが、そんなときは、古いハード仕様に立ち返って理解して行きましょう。というはなし。
割り込み周りはかなり複雑なのでまたそのうち詳しく語ろうと思います(未定)。


今日はここまでにしときます。なんかいまひとつまとまりに欠ける気もするけど、To Be Continued.
ああ、あと、なんか特定のテーマについて語ってほしいリクエストがあれば優先的に書くかもですので、気軽にコメントください。

10/08/2012

x86アーキテクチャを語る 〜歴史編〜

 さて、まずはx86アーキテクチャの歴史から語るとします。
現在のCPUでも過去の互換性を維持するため、過去のCPUの非効率かつ回りくどい仕様が多くの残っています。
 そのおかげで、最新のCPUでもDOSとかの古いOSが動作するわけですが、その代償として複雑なアーキテクチャとなっています。
 これらは古いCPUの仕様を知らなければ理解に苦しむ部分が多々あるかと思います。そんなわけで、まずx86の歴史的経緯を知っておくことが重要だと思います故、ここから話を始めます。


歴史編



 まずx86はPCの歴史と密接に関わっています。x86の進化の大部分はPCの高性能化のためといっても過言ではありません。 そのルーツは1981年のIBM PCにIntel 8088が採用されたところから始まります。この意思決定は、その後のPCシリーズにx86を採用する第一歩として重要な出来事です。
 8088について簡単に紹介しますと、8086の廉価版で、8086では内部、外部共に16ビットですが、8088は内部16ビット、外部バスが8ビットになっています。

 ちなみに、8086以前は8ビットCPUの8080やその互換プロセッサのZ80とか神話の時代がありますが、まあ、それは主題に対してさほど重要ではないので、まあいっか。

そんで、1983年にIBM PCの後継機PC/XTが発表され、1984年に現在主流となっているパーソナルコンピュータのベースとなったPC/ATが発表されました。このマシンはIntel 80286を搭載していて、このCPUはフル16ビットでプロテクトモードが搭載されていました。(プロテクトモードについては、そのうち詳しく語ります)
 で、そんなことより、重要なのはPC/ATは、なんと仕様が公開されたのです。 これにより、他のベンダーが互換機を作ったり、拡張ボードが豊富になったりと素敵なことになりました。そう、今でもよくPCをPC/AT互換機といったりするのは、そんな経緯からなんですねえ。

 その後、IBMはPC/ATの後継機としてPS/2(プレイステーション2じゃないよ)を発表したんですが、IBMのおじさんたちは、ちょっと欲張ってしまったのか、PS/2では仕様を公開せずロイヤリティー戦略にしたのです。
 それが皮肉にも運命の分かれ道となりました。PS/2は残念ながら、あまり受け入れられず、世の中的にはPC/AT互換機をベースに進化していくこととなりました。

 というわけで、現在のPC、Corei7とかのやつでもなんと、30年も前のアーキテクチャがベースになっていて、PCI Expressだとか、64ビットだとかデュアルコアだとかを後付けして進化してきているのです。しかも互換性をほぼ維持したまま。もう、半端ない辻褄あわせが行われていることは想像に難くないと思います。


今回はここまでにしときます。ちょっとずつ掘り下げていきます。

10/02/2012

x86アーキテクチャを語る 〜はじめに〜

私は、これまでx86アーキテクチャに携わって来ましたが、脳みそがボケる前に情報をブログに残しておこうと思い立ちました。x86系の開発者や、PCマニア諸兄に有益な情報源となれればいいなーと思います。
暇をみてチマチマ書いていこうと思います。途中で挫折したらごめんなさい。


はじめに

x86アーキテクチャはPCの歴史と共に過去の互換性を維持しつつ、時代の要求に応えて進化し続けているアーキテクチャです。

しかしながら、アーキテクチャを理解するにあたって、まとまった情報が不足しているようにも思います。CPUのデベロッパーマニュアルや、データシートは過去から変わっていない基本的な設計思想は知ってる体で書かれていたり、情報の羅列だったりします。これを読みこなすには、それなりに予備知識が必要になってきます。
それにはまず、x86アーキテクチャの歴史を知る必要がありますが、インターネットのない時代に誕生したCPUです。情報源は古い書籍や、御老体方の武勇伝くらいしかありません。
さらに、古い書籍は当然、古いCPUについて書かれていて、現在のCPUの進化した部分の情報はありません。それらを踏まえて理解することは、私のような、三度の飯よりPC好きな方や、ギークさんたちにとっては楽しい作業かもしれませんが、並の開発者の多くは情報量の多さに吐き気を催す可能性大です。

というわけで、私のx86アーキテクチャ探究記的な感じ書いていこうと思います。

能書きはこれくらいにしておきます。

9/10/2012

Let's Androidプログラミング

久々にブログ書いてみます。

いろいろあって、体調ぶち壊れて暫く冬眠してましたが、這い上がりぎみです。
最近はAndroidプログラミングに片足突っ込んでます。やってみるとなかなか面白いですなあ。

さしあたってOpenGLの立方体を傾きセンサーで傾かせるとか、ピンチイン、ピンチアウトで拡大縮小してグニグニ動くプログラム作ってみました。ちょっとかわええので、Youtubeにアップしました。



まだ、入門して一ヶ月と経ってないですが、これくらいのことは比較的簡単にできてしまうAndroid恐るべし。
豊富なセンサーやタッチ、カメラやマイクとかの入力を組み合わせれば、なんか面白いことができる予感するね。これ。

今回は実験的に行き当たりばったりで作ったので、ソースはぐちゃぐちゃなので、恥ずかしく載せませんが、またなんか面白いのできたらアップするかもしれません(未定)。