6日目「これほどまでに…」

 これほどまで「むりぽ」と叫びたくなったことが、いまだかつてあっただろうか。
 軽快なテキスト、語りかけるような口調、丁寧な解説、例題に沿ったサンプルプログラム、どこをどうとっても、この本は初心者に向けて書かれてあるはずだった。いや、事実、初心者のための本であったのだ。しかし、この6日目はいったいなんだというのだ。著者自身もラスボス級とおっしゃっていたので覚悟はしていたのだが、本当にラスボス級じゃないですか…
 やっぱりあれですかね、もしかして、読者にも人造人間セルと対峙した時のヤムチャの気持ちを分からせようとしたとかですかね? いや、ホントもう分かりました。ごめんなさい。これまでことごとくヤムチャを馬鹿にしてきてごめんなさい。ヤムチャだって頑張っていたんですよね。ナッパが植えたサイバイマンに普通にやられた時には「まさか〜、こんくらいじゃ死なないよ〜、冗談だろ?」と本気で思った俺が浅はかでした。本当にすみませんでした。
 それで、今回の問題はセグメンテーションというやつだ。これはいわゆるプログラムごとにメモリを分割する仕組みみたいなもので、本来メモリは4GBすべてにアドレス0x00000000〜0xFFFFFFFFが数値で割り当てられているのだが、例えばあるプログラムが0x1FFFFFFF〜0x2FFFFFFFのメモリ領域を使うからといって、じゃあメモリアドレス0x2FFFFF00に15を代入とかいう風にプログラムされているわけがない。だとしたら、このプログラムは必ずどんな環境においても0x1FFFFFFF〜0x2FFFFFFFに読み込まれなければ正常に動作しなくなるので、まったくもって実用性がない。んで、じゃあどうしよ? というわけで、考えられたのがセグメンテーション。これはすべてのメモリを任意のサイズに分割して、その分割されたひとつの領域は必ずアドレス0から始まるようにするというもの(らしい)。これで、どんなプログラムも0からアドレスが始まるわけなので、そのようにして作っておけば、万時OK。
 そして、これを設定するためにはメモリ上にGDTというのを作らないとダメらしい。そしてそのGDTのアドレスをCPUのGDTRレジスタに入れることで、セグメンテーションが発動する(多分こんな感じだ)。次に、割り込みの話に移る。割り込みの設定もこのセグメンテーションと似ている。割り込みってのは要するにマウスとかキーボードとかが何かしらの動作をしたら、それをCPUに通知して、通知を受け取ったCPUが、現在行っている処理を一時中断して、割り込み関数を実行し、実行し終わったらまた以前行っていた処理に戻るという仕組みだ。これもメモリ上にIDTというやつを作ってCPUのIDTRレジスタにそのアドレスを入れないとダメというわけだ。
 要するに、今回やっていることは「CPUのこと」なわけだ。CPU様にどうにかこうにか力を貸して欲しいというわけなのだ。そして、割り込み信号を送ってくれるPICというなんかどうにもいけ好かないやつがいて、どうやらCPU様の他にそいつのご機嫌もとらなければ割り込み処理はできないらしい。だから、ソフトウェアとかマシン語とかプログラムとかそんな目に見えないもんなんてとりあえずどうでもいいから、PCの中身を開けてCPUとPICを見て、こいつらがこの難易度の元凶か、くたばれ〜。バキッ。あ〜やっちゃった〜。というわけなのだ。
 だから、難しいといえばまぁ難しいんだけど、要するにCPUとPICの設定方法に終始しているわけだから、多分覚えてしまえばなんとかなると思うんだ。きっとそうなると思うんだ。俺は信じるんだ。いつまでも信じ続けるんだ。きっと…(そして僕は星になった…)。
 ただ、正直、俺自身まだあまり理解できてない部分もある。でも、著者の川合氏も、とりあえず先に進むことで分かってくるというスタンスですし、俺もこういうタイプの難易度のものは先に進めばあとからちゃんと分かってくると思っている。本書自体も、常にソースコードがついており、分からなくてもとりあえず先に進めるような構成になっているので、これはおそらくそういった場合を考えて書かれているんだと思う。このBlogの主旨でもあるわけだが、とりあえずは30日続けること。文句はそれからどんどん言おう(笑)。ということで、とりあえず、今日の成果だ→本当に30日でOSが出来上がるのかを試してみるページ(6日目)
 今日の分は1週間後にもう一度もどってきてちゃんと読んでみようと思う。というわけで、とりあえず明日も進んでみる! さて、6日目をあまり理解していないが、7日目以降も読み進めることができるのか。
 乞うご期待!