今読んでる本 - 『作りながら学ぶOSカーネル』

2009/04/22

新刊で OS の実装本が出てたので読んでます。

本書は,韓国人の著者さんが書いた日本語の技術書,といった変わった本です。んなもんで……というのかどうかは分からないけれど,ひいき目にみてもちと日本語はたどたどしい。下手な邦訳本よりはよっぽどよく書かれているので,それほど問題にはならないんですが。また,初版初刷だから仕方ないのかもしれないけれど,誤植もかなりあります。でも,この手の本は,ジャンルからしてニッチな部類にあるので,そうであっても貴重です。

内容は Intel の 32 bit CPU に乗っかる OS を作っちゃおうというもの。OS の実装本というと,既にある UN*X の解説本を除くと,『30日でできる! OS自作入門』があります。しかし, 『OS自作入門』がユーザランドを意識した実装本で,初めてアセンブリを触るような読者を対象としているのに対して,本書はもう少し玄人向けなんだと思う。

まず,本書は,アセンブリについて既知の読者を前提としています。アセンブリの解説は,処理系の違いを埋めたり(本書の処理系は NASM),普段使わないレジスタを触るときくらいに触れられる程度です。んなもんで,アセンブリを知らない人が読むのはキツいと思う。反面, 『OS自作入門』なんかは,アセンブリ入門から始まるので,とっつきやすいところはあるんだと思います。これもアセンブリを知ってる人からすると無駄な記述なので,ま,どっちを選ぶかといったところなんでしょうけれど。

また,本書の場合,直接的には OS のカーネルを作ることを目的にしているんですけれど,「それを通じて何を解説しているか」というと,実は,「Intel CPU の使い方」を説明しているんだと思う。『OS自作入門』がどちらかというと,ある程度実用レベル(自作のゲームが動く程度)の OS を作る事を目的にしている一方で,本書の場合,できあがる OS そのものの機能にはあまり頓着していません。これには一長一短あるんだと思う。

ある程度実用になる OS を作るとなると,CPU や周辺チップセットの制御といった,基本的な技術に紙面を割くことが難しくなる一方で,基本的な技術に紙面を割くと,あまり実用的な OS にならなかったりします。書籍の媒体を取る限り,これはトレードオフになってしまうんだと思う。

ただ,大多数の人は,自分で0から OS を作るなんてことはしようと思ってなくて,既存の OSS な OS のソースコードを読んだり,ちょっと改造したり,デバイスドライバを作ったり,とかいったところで OS の知識が必要なんだと思います。そう考えると, 『OS自作入門』よりは本書の方がお勧めです。

一方,本書を読むにあたっては,『はじめて読む8086』と『はじめて読む486』は併読したほうがいいんだと思う。本書だけだと分かりづらいから。

『486』の方は言わずもがな,Intel 32 bit CPU の基本的な解説書なので,本書を読むか迷うようなら,本書を読む前に『486』を読むべきなんだと思います。一方,『8086』の話がなんで必要なのかというと,x86 系のカーネルを作る場合,何より先に,まずリアルモードのプログラムを作る必要があるから。

リアルモードというのは,16 bit の CPU モードで,パソコンを起動するときに,最初に設定されるモードです。Intel CPU の場合,パソコンを起動するといきなり 32 bit でメモリ保護付きの環境が提供されるわけじゃなくて,最初は 16 bit ですっぴんの(メモリ保護も何もない)環境から始まります。MBR(Master Boot Record)からブートセクタを読み出すところなんかは 16 bit 環境で動いている。で,このリアルモードなんですけれど,メモリアドレッシングがかなり特殊で,セグメントとオフセットの組で所望のアドレスにアクセスすることになります。昔なつかしの FAR とか NEAR とかが生きてる世界。こゆ環境でのお作法を知ってないと,本書を読むのはややキツい。

本書は,どちらかというと『486』と『8086』を読んだ後,実際に生の CPU を触ってみたいなー……とか思っている方に向いているんじゃないかと思います。PC エミュレータである Bochs 上で動かす方法も載ってるし,処理系をセットアップする方法も載っているので,適当なターゲット機がなくても動かせます。手を動かしながら CPU の動きを確認するにはいいんじゃないかと思う。仮想記憶とか,自分で触ってみると,「ほほう……」となること請け合い。

Site Navigation
SNS Accounts (@aian)

普段はここら辺に住んでいます.