やりたくない日もあれば、普段より集中力が出る日もある。だから、本で指定された区切りで進めるかどうかは不明。多分、そうはならないと思う。でも、これだけは目標として持ちたい、というものがある。それは…


1日につき、最低1個は「新しく何か学んだぜー!」というものを書き記していく事


だ。ネットで日本の最新情報なんて漁っている時間があったら、勉強に使おう。永久にそういう生き方をしていくか?といえば流石にそれは無理だと思うが、まずは1ヶ月やってみようじゃないか。どういうやり方が現実的か?自分にあっているか?そんな事を考えていても始まらないので、とにかくやってみる。理屈を考えるパワーは勉強に使おう。


と、言うことで「OS自作入門」の1日目に挑戦である。


【お久しぶりだね、バイナリエディタ】

あー、画像データのコメント領域の文字列をチェックしたり、フォーマットの解析するのに使ってたアレか、と。まさかプライベート用途のPCにそんなものダウンロードする事になるとはねぇ、、なんて思いつつ本文を読み進める。どうやらフロッピーから立ち上げてメッセージを表示させるだけのプログラムを作るにあたって、いきなり全部バイナリで書いちゃえ!というのが作者の主旨のようだ。「プログラムをどんな方法で組むにせよ、最終的にはこういう姿になるのですよ」というのを、まず始めに意識させたいワケか。なるほど。


…って、、、納得したからってコツコツ全部打つかー!


作者の伝えたかった事は理解したよ、と勝手に決めつけて早速ズルをする。CD-ROMから出来上がったファイルをコピーし、フロッピーへ書き込み、【自作之輔】のフロッピードライブへ投入! なにやらスピーカ部から怪しげな音を出しながら(古いPCなんで単にボロくなってるだけと予想)も起動する【自作之輔】。頑張れ!


で、めでたく黒い背景の上に「hello, world」の文字列が表示された。おお、出た出た。人の作ったファイルで、中身も理解せずに起動させたダケなので当然ではあるが、特に感動はない。しかし、用意した環境でこの本を読み進めていけばOKだという確証は持てた。安心して学習を続けていこう。


【ざっくりCPU論】
そしてバイナリエディタを使ってやって見せた事は何だったのか?について説明する為にCPUの説明が始まった。「CPUはONとOFFしか理解出来ないんだぜ!」というフレーズが、ついつい「計算不可能性を設計する」で見た「ノイマン型の限界」議論を思い起こさせたりするわけだが、ここで量子コンピュータの持つ可能性について思いを馳せてしまうと脱線もいいところなので、一旦そのネタは忘れることにして読み進める。といっても、あとは16進と2進の相性の良さを改めて述べているくらいだが。(「予備知識なしで読み進められます」というだけあって、実に丁寧だなぁ、と感心)


【こんにちは、アセンブラ】
次にバイナリエディタでやった事を、アセンブラで書くとドウなるか?についての講義が始まる。「OS自作入門」では、NASMというフリーのアセンブラの親戚(文法が似ているという意味で、同じルーツを持っているワケではなさそう)で、作者オリジナルのNASKというものを使う、とある。


- 現時点で未解決な疑問 -
「NASKはNASMより自動最適化能力が高い」とあるが、NASMがどのように駄目なのかについては良く分からなかった。Wikiでアセンブリ言語 について眺める限り、ほぼ機械語に近いアセンブリ言語を利用しているにも拘わらず、果たして機械語に変換する過程で出力されるものに違いが出るのか?という点について、正直イメージが沸かない(これは多分、プリミティブな命令しか現時点で見ていないせいで、本来アセンブラは私の想像よりはるかに自由度の高い表現が使える、ということなのだろう)。OS-Wikiでの作者の発言 を見る限り、NASMの実装には何かよほど間抜けな欠陥があるようだ。
-------------


まずDBとRESBという命令が出てきた。この命令はNASKのみで有効な命令であって(でも文法が似てるって事ならNASMでも使えるのか?)、「アセンブラといえば使う命令は決まってるんだよ君!」という事じゃないんだろうなぁ、、という事で、これは付録としてつけられているツールの機能についての学習なんだと理解することにする。


DB(data byte) : 宣言されたデータを1バイト分だけ直接書く。続けて使うことで理論上は何でもファイルに書き込める。が、コツコツと埋めるだけの機能なので、同じデータの繰り返し等をしたい場合にはプログラミング作業として冗長になってしまう。


RESB(reserve byte):後に来る数字分のバイトを確保する。NASKでは確保した際に0x00で埋める形でそれを実現するので、0x00でとにかくディスクスペースを埋めたいような場合にも利用される。


しかし、相変わらずこれだけの命令で作られたアセンブラでは、何がなにやらサッパリである。そんなわけで新しい命令(及び、既出命令の新しい利用方法)が登場する。コメント命令万歳!


; : コメント命令。プログラムに解説を入れられる。おかげで一気に可読性が上がる。


DB : 既出命令だが、実は""で囲んだ文字列を直接書くことが出来るという情報が明かされた。(例:DB "Hello, world") といっても当然ASCIIコードの範囲だけの模様。


DW(data word): ワード(16ビット=2バイト)単位で処理されるDB命令。


DD(data double-word): ダブルワード(32ビット=4バイト)単位で処理されるDB命令。


ちなみにC言語等と同様、DB系の命令では、Hex(16進)と10進のどちらを利用しても良い。


そして重要なのが「$」である。先頭から何バイト目がを計算してくれるための変数として利用されており、プログラム上で、それより前方に記述されるデータの長さに変更があったとしても処理内容を書き直さなくても良いように使うことが出来る。例えばつまり、RESBを使ってある箇所から特定箇所までをずっと0x00で埋めたい場合に、その処理のスタート地点を数字で明記する代わりに、「ここから」という意味で「$」を使うことが出来るわけだ。


【その他メモ】

FAT12 :フロッピーのフォーマットとして生き続けているFATの初期バージョン。フロッピーから起動させる形にしている限りはお付き合いすることになりそう。詳しくはココ で。


ブートセクタ :フロッピーに存在している最初のセクタ。PCは、先ず始めにここを読み込み、最後の2バイトをチェック(0x55 0xAAか否か)する事で起動用のプログラムが書かれているかどうか?を判定している。何故に[0x55 0xAA]なのか?については謎。


IPL :initial program loaderの略。ブートセクタにOS全てを格納するのは容量的に無理があるので、ブートセクタにはOS自身をロードする為のプログラムのみを格納するのが一般的(とは言え、実際には一発でOSを読み込むよりも、OSを読み込むためのプログラムをさらに呼び出すようなケースも多いらしい)で、そのプログラムの事をIPLと呼ぶようだ。別称「ブートローダ 」。


おお、なんだこりゃ?!というくらい長い記事になった。しかし楽しい!初日から難しくては読者がドン引きするので、作者はかなり手加減しているものと思われるため、油断は大敵であるが。。



【其の壱:こんぴゅーたを入手せよ】
OSを作るということになれば、とにもかくにもそれを動かすPCが必要である。普段使っているPCを利用するとなると、再起動やら何やら面倒で仕方がないので、別のPCを用意する事を決意。中古PCで十分だろうと考え、会社の同期に「もう捨てようと思ってるようなPCはないかねー?」と聞いてみたところ、大掃除前の年末という時期のおかげもあってか、まんまと無料でゲット出来た。その名も「DynaBook SS 3380」。7年前のPCだそうな。相当な年季を感じさせるが、今となっては貴重なフロッピードライブもついていてニヤリである。

詳しいスペックは
コチラ

OS自作入門を学習する間には特に問題はなさそうだが、LANのコネクタがないので、通信機能周りを実装していこうとすると問題に直面しそうだ。だが、今はそんな先の事を気にしても仕方がないので、将来の話については、ひとまず先送りしておこう。ひとまず、本ブログではこのPCをこれから【自作之輔】と呼ぶことにする。


自作之輔


【其の弐:ふろっぴーどらいぶを入手せよ】
OSをブートするのに使うフロッピードライブは【自作之輔】についていた。しかし、肝心の開発用PCからフロッピーにデータを書き込む手段がないという事実に気づき愕然。USBメモリで移行した後、【自作之輔】のHDからフロッピーに書き込もうと思いきや、、、USB2.0は駄目なんですとか、そういう話なのだろうか?とにかく使えない。どうせ何かを買う必要があるなら、いっそ開発用PCから直接フロッピーに書き出す形にしてしまえ!ということで、某量販店に突撃。ミュンヘンでも流石に今時フロッピーなんて買う客はいないようで、探すのに一苦労。しかし何とかNEC製のUSBケーブル式フロッピードライブを入手出来た。お値段20ユーロ。


ふろっぴ

本当はデータが書き込めれば何でも良かったのだが、無駄に結構カッコイイ。ところで、ドライブは売ってるのに、メディアは売ってないってのはこれ如何に?

【其の参:マウスも買っとく?】
OS自作入門の帯を斜め読みしていた時、「マウス制御」なる言葉をキャッチ。ん?マウスってUSBでつなぐようなのじゃきっと駄目なんだよね?? という事で、これまたPS/2のマウスを探し回るも、どれもこれもUSBばかり。ここまで見事にないものなのか、、と感心しかけたところで、「コネクタをつけるとPS/2に変身」するUSBマウスを発見。


まうす

他に選択肢もなさそうだったので購入。お値段10ユーロちょい。生意気に光学式だったりする 笑

【準備完了?】
そんなこんなでひとまず必要そうなハード一式は揃えられたのではないかと思われる。さて、本を読み進めよう。



先日、日本出張の際に、書店で梅田望夫氏の「ウェブ時代をゆく」を購入した。とても面白く、一晩で読んでしまった。そして、読んでしまった後も、何度か読み返したい箇所がいくつもあり、ついつい本に手を伸ばしてしまっていた。これから先の生き方について、色々と考えているのは自分だけではないとは思っていたが、ここまで明快に提案を示している本は(少なくとも自分にとっては)初めてだったし、何より彼が描き出す世界は魅力的だった。

ウェブ時代をゆく ─いかに働き、いかに学ぶか (ちくま新書 687)/梅田 望夫
¥777
Amazon.co.jp
その直後に読んだ本、「計算不可能性を設計する」が、更に私の頭に強烈な刺激を与えてくれた。

「情報環境が発達して、どんどん便利になっていくのは良いんだけど、この進化の方向性の根底にある、システム設計者達が持つ哲学って何?」

という問いかけ。これはかなり衝撃的だった。普段から自分が感じていた違和感の正体に気づかされた感じがした。

計算不可能性を設計する―ITアーキテクトの未来への挑戦 (That’s Japan)/神成 淳司
¥1,680
Amazon.co.jp

これまで数々のサービスを実社会に投じて来た中、必要であれば実装レベルにも携わって来た。プログラミングも結構やった。会社の中で見れば、いわゆる「技術力のある」部類だと思っていた。しかし、、

我々は何所へ行くのか? 或いは、何所へ行こうとしているのか?

それを見極めるための資質が今の自分に備わっているのだろうか? ふと怖くなった。

何をやったらその状態から抜けられるのか?が見えない場合、不安はとても厄介だ。だから、とにかくやる事を決めてしまう事にした。

先ずは基本に立ち返る。

これである。コンピュータがどういう仕組みで動いているのか?それを理解しなければ話が始まらないと思った。そして世の中には「タイミング」というものが本当にあるらしい。ちょうど良い時にちょうど良い本に出会う事が出来た。それが「OS自作入門」である。

30日でできる! OS自作入門/川合 秀実
¥3,990
Amazon.co.jp

そんなワケで、先ずはこれを教材とし、学習成果を公表していく事から本ブログを始めたいと思う。読破してもゴールというワケではないが、当面はそれが目標になるだろう。本屋に行くと、色々と気になる本を沢山見つけてしまい、気がそれないよう自分を戒める意味でも、こうやってブログ形式にするのは有用な気がする。

ところで実は以前、ブログをつけていた事がある。2ヶ月程続いたように記憶しているが、途中で面倒になって止めてしまった。問題は、プライベートの日記をつけるならばSNSの方が何かと都合が良く、似たようなネタを2つの場所で書くのが億劫になってしまったからだ。

その反省を生かし、基本的に今回は完全にプライベートなネタになるようなものはこのブログには掲載せず、あくまで研究者としての自分が学習した成果を公開する場として利用する事にしようと思う。きっとそれが長く続けていくには必要な事だろうと考えるので。

そのようなワケで、本ブログ、めでたくスタートである。