著作一覧 |
現時点では今後どうなるのか良くわからないアスキーの鈴木さんからもらったLinuxのブートプロセスをみるを読み始めた。
役に立つかどうかは別として無暗におもしろい。
最初はx86(x64)マシンのブートから始まるので、8086互換のリアルモードに始まって、次にプロテクトモード(これ、以前はプロテクトッドモードではないかとかいろいろ言われてたような気がするけど、今はプロテクトモード一択で落ち着いたのかな)経由でx64の場合はさらにIA-32eモードに推移するまでの石の動きの説明で始まる。
説明するにはリアルモードがあるためにセグメントの説明からIOポートの説明まであり、と、どんどん深みにはまっていく。
とにかくx86についての前提知識のために、ある項目を説明するにはある項目の知識が必要で、しかし順序からはその知識の説明は後回しにせざるを得ず、という状態で、本書そのものが複雑なブートプロセスで構成されているのだが、意図的だとしたら面白すぎる。
と言う具合にPC/ATアーキテクチャの説明を読み終わると1章が完結して全体の1/4くらい。
全体が付録含めて10章だから、いかにx86がぶっ飛んだCPUかが良くわかる。
以下、読んでいてひっかかった表現など。
・P26先頭
……必要なセグメントデスクリプタを並べて作成し、その開始アドレスと数をCPUに通知する命令を実行します。これをセグメント・デスクリプタテーブルと呼びます。
ちょっとおかしい。命令を実行することがテーブルみたいに読める。おれなら「必要なセグメントデスクリプタを並べて作成し(これをセグメント・デスクリプタテーブルと呼びます)、その開始アドレス……命令を実行します。」とするかな。
・P26
「その数は65,536(0xFFFFH)」意味はわかるがちょっと変。あと、0xをプリフィクスしているのにHをポストフィックスする記法が妙かな。
・P26下
上位13ビットの数を8倍した値がオフセット位置だが、実際には下位3ビットをマスクすれば求められると書いているけど、それはその通りなんだけど、てへぺろ感があるような。
・P.28表
コンフォーミングコードって何?(検索してみるとユーザーモードのままで実行できるカーネルメモリ内のコードという意味っぽい)
・他にも表か図で何か気付いた(たいてい校正するとき表の中は見落とすんだよなと思った)のだが忘れた。
・そこはツッコミどころではなく楽しみ箇所
さんざん引っ張ってからこれはLinuxでは使わないのでどうでも良いですというのと、最初からこれはLinuxでは使わないので説明しません、というのが混在していて、つまり前者は書きたかったんだろうなと想像すると楽しい。
というか、x86ってつくづく化け物だな。おそらく互換性を維持しながら高速に処理可能なように拡張方法を設計しているはずなので(マスクとフェッチと論理和のみで済むのかな)、それにしても良くこういう仕組みに作ったなぁと畏敬の念を覚えると同時に、ゼロベースで設計してこれに勝てない(いや、ARMがあるというのはあるけど)他のCPUというのはなんなのだろうという不思議というか。
ジェズイットを見習え |