18日目「dirコマンドを作ったぞ〜!! ファイルが列挙されるぞ〜!!」

 すみません、突然で申し訳ないんですが、風邪ひきました(ぉぃ)。鼻水はじゅるじゅるだし、ノドはガラガラだし、少し熱っぽいですが、セキはでないので、症状自体はそんなに重くないです。
 それで、これはチャンスだ! ということで、これを理由に明日の仕事休めないかな、と思って、同僚に電話で「ちょっと風邪っぽいんだけど、明日休んでだいじょうぶかな?」と聞いてみたところ、「ああ、なんか熱が42度を超えたらOKっぽいよ!」と言われました。「ああ〜、熱が42度かぁ〜、って、それ死んでませんかね?」 ちなみに俺は37.6度でした。これでも結構ダルいんだけどなぁ〜。
 というわけで、今日はmemコマンド、clsコマンド、そしてdirコマンドを作った!! うひょ〜、どんどんOSっぽくなっていくぞ〜(あれ? テンションおかしくね?)。それに今日もそんなに難しくなかったぞ。とりあえず→本当に30日でOSが出来上がるのかを試してみるページ(18日目)を見てくれ。昨日と比べてもbootpack.cとbootpack.hしか変更していない。その分bootpack.cがなんかむちゃくちゃ長くなっちゃってるけど、まぁその辺は後々、著者がなんとかしてくれるはず。
 memコマンドは以前から表示しているメモリの残量などなどをmemコマンド実行時に表示させるように変更しただけだ。clsコマンドは画面を消去するだけなので、まぁそんなに難しくない。それで、問題のdirコマンドなんだけど、これはなんかファイルフォーマットとかいう小難しいことを学ばないといけないらしいのだが、それはよく分からんからパス!(ぉぃ)。いや、あとでちゃんとやります。今日はちょっとマジで体調が悪いので、そういう難しいものは勘弁してください。
 というわけで、今日はちょっともう寝ます。なんか中途半端ですみません。とりあえず明日までに風邪を治さなきゃだ!! ちゃんと俺の風邪は治るのか? 乞うご期待! じゃなくて、明日はtypeコマンドを作るようだ。
 乞うご期待!!

17日目「オッス! オラ、コンソール! 黒い画面に白い文字なんて、オラわくわくすんぞ!!」

俺 「まず、これが、スーパーはりぼてOSだ!」
友人「?」
俺 「そしてこれがさっきみせたスーパーはりぼてOSを超えたスーパーはりぼてOS…、つまり、スーパーはりぼてOS2ってとこかな」
友人「?」
俺 「そして…」(コマンドプロンプト起動)
俺 「これが…………」(「make run」と入力)
俺 「さ………、さらにそれを超えた…………」(コンパイル中…)
俺 「うおおおおおーーーーーーーーーーーーー」(まだコンパイル中…)
......................
.............................
俺 「…スーパーはりぼてOS3だ。時間が、かかってすまなかったな。まだCPUが800MHzなんだ…」
友人「じゃ、俺、そろそろ帰るわ!!」
俺 「おい、待て〜い!」
 久しぶりに仲のよい友人がうちの家にきたので、俺はさっそくいま作っているOSを彼に見せたのだが、どうやらはりぼてOSの「良さ」がよく分かっていないようだ。
 それに、せっかくドラゴンボールのノリで俺のはりぼてOSを紹介してやったのに…。まったく冗談の分からんやつだ。まぁ文系のお前に見せたのがそもそも間違いだったよ(ってか俺も文系だけど)。少しずつカタチになってくるこのOSを見ていると心なしか感動するんだぞ。いやー振り返れば、遠いところまで来たものだ…(まだ17日目だけど)。
 さて、今日から、本格的にコンソールを作ることにあいなった。まず今日やるべきことは、真っ黒い画面を作ることと、その画面に真っ白い文字を入力できるようにすることだ。簡単に文字を入力するといっても、文字にはアルファベットの大文字小文字の他に記号もあるし、CapsLockやNumLockなんてのもあるわけだ。シフト押しながらだと大文字だけど、普通は小文字とかだ。つまり、一言でいってしまえば、キーボードとの対決なわけだ。ただ、真っ黒い画面に文字が入力できるだけでも、なんかすごいOSっぽくなっていて、マジで感動するぞ。
 それに今日はかなり簡単だった。基本的にbootpack.cしかいじるところはないし、やったことといったら、キーボードの入力データを加工するだけだ。それに、この本はだいたい難しい内容のあとはなぜか簡単なのだ。なので苦労したあとはさくさく進む…ような気がする。これも意図的にそういう作りにしてるのかも…。まさに川合マジックなのだ(ホイミ!)。
 そんなこんなで作ったのが、→本当に30日でOSが出来上がるのかを試してみるページ(17日目)だ。なんかコマンドプロンプトっぽい画面がでているが、あれがコンソールだ。でもEnterとか押しても反応ないから、ただのテキストを入力できる真っ黒い画面なだけなんだが、まぁそれでもこの雰囲気はナイスだ。グッジョブだ。最高だ。俺は今日のためにここまでやってきたみたいなとこがあったから、マジでこれには嬉しい思いだった。うーん、感動。
 なんか、ここ最近、加速度的に面白くなっていくぞ。マジでOSを作るのって楽しいのかもしれん。そして、それと同時に、なんか自分でも独自のOSを作りたくなってきた。本書のサンプルを元に作るのもいいのだが、自分で一から作ってみたいと思うようになってきた。ただでさえ時間ないのに、そんなもん作ってたらさらに時間なくなるぞ、と思うんだが、仕方がない。やりたいものはしょうがない。というわけで、今日からこつこつと、自分のOSを作ることに決めた。このBlogとは直接は関係ないかもしれないけれど、とりあえずやってみることにする。
 明日はdirコマンドの作成をするようだ。どんどん、どんどんOSがカタチになっていく〜。乞うご期待!

16日目(後半)「優先順位って、全然難しそうな雰囲気がないから、もっと難しそうな雰囲気を出してくれ!」

 なんとか分かったぞ。なんとか、なんとかな。もうこれ以上理解するのは無理! 不可能! すでに俺の頭脳の許容量の120%を使用しているからもう無理。無理。ホント勘弁してください(ピキーッ、ぼくはわるいスライムじゃないよ)。
 というかですよ。16日目は個人的に、かなり難易度高いよ。正直6日目の悪夢を思い出しましたよ。ただ、あれは著者が「6日目はむずいよ?」といっていたので、心の準備といいますか、まぁ心の準備ができたわけですけどね(だから心の準備だね?)。ただ、今回はなんの予告もないですから。いきなりですから。いきなり後ろから殴られた感じですから。スライムを倒してレベル上げようとフィールドを歩いていたら、いきなりドラキーが出てきたようなもんですから。
「おいおい、ドラキーとか強いよ〜、これは逃げるしかねー」にげる選択
「はりぼては逃げた。しかし、まわりこまれてしまった…」
ドラキーの攻撃!」 ガンッ!!! 「はりぼてに8のダメージ!!!」
「はりぼては死んでしまった…」テラリラ、テラリラ、テラリラ、テラリ〜…

川合秀実「ああ、はりぼてよ、死んでしまうとはなさけない…」

 ちくしょー、ゴールド半分かよー(ってそれはドラクエだけだから、ドラクエの世界だけだからーー)。
 って、話がそれたけど。今回、俺が本当に難しいと思ったところは、タスク管理の優先順位というところだ。例えば音楽を鳴らすタスクや、マウスを動かす処理を受け持っているタスクというのは、一般的に、ほとんど途切れてはいけない処理。んで、逆に一定時間毎に数値をカウントする処理なんかは、ある特定の時間以外は別に何もしてなくてもよいわけで。つまり、タスクの種類によって、どのくらいCPUに働かせようかを決めなければならないわけだ。そして、それが優先順位という仕組み(少なくとも本書ではそう読んでいる)で実現するのだが、ホント、もうややこしいったらありゃしない。なんかこれまで学んできたこと総動員で、しかもタスク管理自体も難しくて、マジでこれは難易度高いと思う。ホッホッホッ、私の難易度は…53万です(フリーザ様〜〜)。
 それで、例えばもっとも処理を必要とするタスクをレベル0とし、もっとも処理を必要としないタスクをレベル10とする。そして、すべてのタスクをこのレベル0〜10までの範囲で振り分けて、なるべくレベル0の方から順にCPUに処理させるような仕組みを作る必要がある。前にも学んだとおり、CPUは一個しかないので、一瞬(1クロック?)で処理できる命令は必ず1つなのだ。つまり、1つのタスクしか処理をしていないため、ものすごい、本当にものすんごいスピードでタスクの間を行ったりきたりして処理していかなければならない。
 ここで、どのタスクをどれくらい優先させて処理させるか? ということが重要になってくる。すべてのタスクを均一に同じ期間だけ処理させるというのなら、さほど難しくはない。難しいのは、タスク別にどれだけ優先させるかという仕組みを作ることだ。
 それで、まさに分からんかったのはこれです。優先順位! 本当に完璧なまでのアルゴリズムな話なんですよ。本当に壁だと思うんだけど、俺だけなのかなー。
 というわけで、一応、ある程度理解したので、セイカブツを残します→本当に30日でOSが出来上がるのかを試してみるページ。マウスの動きとかウィンドウを移動したときの動きとかが微妙にあやしいのは、優先順位処理を最後までちゃんとやってないから。でも、なんとか理解はできたと思うから、明日のコンソールを作るついでにやったります。それに、この本は、そのときは分からなくても、読み進めていくと分かってくる場合もあるのだ(6日目同様)。だからとりあえず、この本を読んで楽しむことが重要なんじゃないのかな(多分)。
 あと、この辺りになると著者がちょっとノリにノッっているのが分かる。最初の方よりもOSっぽくなってきて、書く側としても面白く感じるのかもしれんです。テキストも内容もどんどんさくさく進んでいくし(速すぎてついていくのがやっとだけど(汗))。
 まぁというわけで、とりあえずは進む! 明日はコンソール。ずっと前からやりたいと思っていたところだ!! よっしゃー!! がんがったる!!!
 乞うご期待!

16日目(前半)「マルチタスクですか…、なんか響き通りに難しいのですが…」

 昨日はマルチタスク簡単とか言ってすみませんでした。本当は難しかったです。俺は何も分かっていませんでした。マルチタスクの「マ」の字も分かっていませんでした。マルチタスクの「マ」の字も分かっていないただの若造でした。そういえば最近少し調子にのってたかもしれません。だんだんと、はりぼてがOSっぽくなってきて、少しいい気になっていたかもしれません。自分のチカラにおぼれていたかもしれません。世界を征服しようと思っていたかもしれません(えっ? OSで?)。そして僕は…、新世界のとなる!!!(えっ? OSで?)。
 つーわけでだ!! マルチタスク全然分からん!!! どこがというと、ぶっちゃけタスクの優先順位とかあの辺りだ。この辺りにきて、マジでソースコードがややこしくなってきたぞ。これはヤバイぞ。次(明日)はいよいよ俺がずっと楽しみにしてきたコンソールの作成だというのに、このやろ〜、このやろ〜〜。というか、この辺って特にソースコードの解説が減ってきてない? 手抜きになってない? 「お前らもう理解できるよなー」的なニュアンスになってない? 
 うーむむ、またしても立ちはだかるかアルゴリズムの壁…。ならば、よかろう…。この俺の全身全霊をもってして、お前(本書)の拳を打ち砕いてみせようぞ…。その愚かな希望と共にな!!!(えっ? 本に向かって言ってんの? 本に向かって話してんの?)。
 というわけで、えっと実質始めての次の日持ち越しです。なので、タイトルも「16日目(前半)」としていますが、これ明日になっても理解できなかったら(中半)とかにしようかなという感じなのですが、正直、理解できない自分に腹が立つので、明日は本気で(いやこれまでも本気ですが)やろうと思います。
 ああー、ぬわぁーーーーん、なんだよ、なんだよ。なんなんだよ。なんかすごい自分が悔しいぞ〜。まあいい。明日は日曜日だ。休みなのだ。ふふふ、休みなんだよー(ラッキー)。しかも予定は…ない!! 彼女もい…ない!!(それは関係ねーだろ!)
 さて、ちゃんとマルチタスクを理解することができるのか、俺。
 乞うご期待!

15日目「マルチタスクなんてなぁ…、響きが難しいんだよ、このやろ〜」

 志(こころざし)をあらたにスタートした15日目だが、まず最初に、言っておかなければならないことがある。実は、正直に告白するとだ、俺、数ヶ月前までマルチタスクの意味が分からんかったです(こいつダメダメだー)。プログラマって基本的にマルチタスクの意味を分かってなきゃダメらしいのだが、俺はマジで分かってなかった。
 いやだってですよ、そもそもパソコン使う上で、マルチタスクなんて言葉必要ないと思うのですよ。プログラマというのはテキストエディタに文字さえ書ければあとは何とかなる職業なんですよ。とりあえずはそれでなんとかなるんですよ。就職するときだって、会社の偉い人から「プログラミングの経験はありますか?」と聞かれたときに、プログラミング経験のあまりない俺はとっさに「ペラルはやったことあります。」と言い出しました。いま思えば、すごい度胸ですよね。ペラルですよ、ペラル。なんのことか分かりますか? そうです。Perl(パール)のことです(これはさすがに死んだ方がいいかもしれない(笑))。
 そんなアホみたいな人間にマルチタスクがどうのこうのなんて言っても、分かるわけがない。同時に実行するって意味わかんねーよ、なんなんだよいったいよー。
 だた、物事は何事もシンプルに考えればよいわけで、要するにだ、マルチタスクマルチタスクというけれど、結局のところCPUはひとつなわけだ。つまり、同時に複数の処理を実行する仕組みと言われても、本当にCPUが同時に複数の処理を実行しているわけがない。MOV命令を同じ瞬間に2回処理することはできないのだ。その時点で、すでに同時に処理を実行することは不可能ということが分かる(CPU自体が複数あれば別)。じゃあ、マルチタスクって結局は何? ということなのだが、これは、人間にはあたかも同時に処理しているように見えているだけ、なわけだ。
 1秒間に何千何万何億という処理を行うCPU様から言わせてみれば、人間の眼の認識速度なんて止まってるようなもので、仮に俺がイチローの動体視力を持っていたとしても、CPUのそれを追うことはできないのだ。でも俺がイチローの動体視力を持ってたら、パソコンの画面なんて見ずにメジャーリーグで10億円くらい稼ぐからモウマンタイなのだ。でも運動神経が体育の成績オール3の平凡ピープルだから、せいぜい眼が少し良いだけの一般ピープルが関の山なのだ(うるせー)。
 話がそれたけど、要するに0.02秒とか、そういうかなり短い間隔で複数のタスクを行き来して処理しているから、人間には同時に処理しているように見えるだけなのだ。本書に「忍者の『分身の術』みたいですね」と書いてあるが、これはすごい良い例えで、本当にその通りなのだ。
 それで、じゃあ実際にプログラムにするにはどうするのかというと、CPUのレジスタの値をすべてメモリに保存しておいて、そっから「タスクAのCPUレジスタ復元→タスクA実行→タスクAのCPUレジスタ保存→タスクBのCPUレジスタ復元→タスクB実行→タスクBのCPUレジスタ保存→タスクAのCPUレジスタ復元→」という具合に、CPUの状態をメモリに保存しておくことで対処することができる。この処理を0.02秒くらいの単位でパッパッパッと行えば、シュッシュッっとなって、ウワッ、となるわけだ。これで見事マルチタスク完了! 仕組み自体はそんなに難しくない。セイカブツは→本当に30日でOSが出来上がるのかを試してみるページ(15日目)。ちなみにこれまでのソースコードは自分で最初から書いてきたものだったが、ちょっとソースコードを整理したいのと、コメント多すぎてワケワカラン状態になってたのとで、ひとまずリセットして、今日からまた改めて15日目の本書のサンプルソースから始めることにした。ソースコードは整理しだいまた変更していこうと思う。
 明日もマルチタスクだ。今度は何をするのか? 乞うご期待!

14日目「折り返し地点到達! 本当の戦いはこれからだ!!」

 asmhead.nasを改良することで画面解像度を変更することが可能となった。本当に30日でOSが出来上がるのかを試してみるページ(14日目)では、640×480でのキャプチャ画像を載せている。画面解像度を変更するにはBIOSVESAという仕組みを使う必要があるようだ。そしてBIOSを使わなければならないということは、32ビットプロテクトモードになる前にうんたらかんたらしなければならないわけで、つまりはasmhead.nasを変更する必要が出てくるわけだ。VESAについては→http://community.osdev.info/?VESAを見ればモウマンタイ。
 うーん、思い返してみれば約2週間。なんだかんだでなんとかここまでやって来た。本当に実に大変な2週間だった。ときには仕事の合間にこっそりと本書を読んだり、また、仕事をさぼってこっそりと本書を読んだり、あと、仕事してるふりしてこっそり本書を読んだり、本当に大変だった(って、まずちゃんと仕事しろよ!)。うーん、長かったような短かったような…。それに、Blogを毎日見てくださるみなさんには本当に感謝〜。正直、Blogのアクセス数は純粋に頑張ろうという気持ちに繋がりました。2週間お付き合いくださり本当にありがとうございました。
 さて、昨日までの13日間の内容はどうやら著者が「OSを作るとしたらこれだけは用意しておこう」と考えていたものだったらしい。うむむ、なるほど。なら、とりあえずOS作成に関する最低限の知識は習得したことになるのか。個人的にははやくコンソール画面を出したいのだが、それはまだ少し先っぽい。んで、今日はひと段落ということで、解像度とキー入力の話とあいなった。
 ただ、キー入力の部分はほとんどマウスの制御部分と同じだったので、はっきりいっておまけ的な感じだった。キー入力に関しては→http://community.osdev.info/?%28AT%29keyboardを見るべし。これでマウス同様、キー入力の管理が可能。そして、解像度だが、それは前述の通りVESAを利用することでOKなようだ。今日の内容自体がおまけ的な要素も強くて今日は実に手軽で簡単だった気がする。明日からは「マルチタスク」が始まるし、初めてちょっと予習でもしてみるかな…(笑)。
 さぁ、初心に返って一から頑張って行くべし!! ここからが本当に面白くなっていくところだ(多分)。本当に30日でOSが出来上がるのかを試してみるBlog第2ラウンド! 乞うご期待!!

13日目「スタープラチナ・ザ・ワールド!! そして時は動き出す…」

 やっと少しハードウェア関連に戻ったのに、またアルゴリズムの話になっとる〜。ここ数日、ほんとにアルゴリズムばっかりやんか〜。「1週目はハードウェアの制御関連で苦労します。2週目はアルゴリズムで苦労します。」って一番最初にこの著者自身が言ってるけども、本当にその通りですよ。だって俺、ここ最近、紙と鉛筆を用意してこの本読んでますもん。紙と鉛筆ですよ、紙と鉛筆。この情報化社会において、しかもその最前線で活躍するプログラマという職業についてるこの俺が、紙と鉛筆ですよ。そして、アルゴリズムの動作原理を紙に書いて「ふむふむ」とか言ってるわけですよ(紙媒体最強!)。
 思い返せば、FIFOから始まったような気がする…。そしてメモリ管理、シートの描画&重ね合わせ、タイマ処理、ああー、もうお腹いっぱいです。しかもしかも、今日やったことといえば、タイマ処理の最適化や簡略化みたいな話(番兵とか線形リストとか)。
 実は、13日目にして、俺はこの著者のあるこだわりに気づいた…。それは、処理の最適化やプログラムサイズの軽量化について、この著者はものすごい突き詰めるというところだ。いまは21世紀ですよ。歩きながら電話ができ、ゲームができ、カメラが使えて、おまけにムービーまで送れる時代ですよ。メモリはメガだのギガだの言っており、ハードディスクにいたってはテラなんてのもあるわけですよ。テラなんて言葉、テラワロスくらいにしか使わないと思っていたのに…(ええ〜? お前の脳みそにテラワロスだよ〜)。
 そんな時代に、たった数キロバイト、数百バイトのためにあくせく思考をめぐらすこの著者さん。もうね、変人以外の何者でもないですよ(ぉぃ)。いや、これは誉め言葉です。まぁ、俺なんかに誉められてもあんまり意味ないですけどね。ただですよ、例えていうならみんなが右に向かって進んでいるときに、ひとりだけ左に突き進んでいるような人ですよね。というか、左というよりむしろ逆行してますよね。ひとりだけ高速道路を逆に走行してるような人ですよね(それは違くね?)。
 でも、やっぱり天才とはこういう人のことを言うのかもしれんです。んで、これだけの技術力を持っている方なので、さぞかしたくさん稼いでいるんだろうなーと思ったら、どうやら貧乏らしい(31日目「開発を終えた後で」より)。なんでだよ!! これだけの技術を持っていれば、普通に働いたら結構な金額を稼げそうなんだけど、どうもOS作りに専念したいので働かないらしい。「金で買えないものなんてあるわけないじゃないですか、女だって金でついてきますよ〜」と豪語する実業家が人気者になるこの時代に、あんた何やってんだよ…(でもなんかすげー好感持てるじゃねーかよー)。
 というわけで、少し話が脱線したけども、まぁ世の中いろいろな人がいるよなぁという話でした。それで、今日出来たセイカブツは→本当に30日でOSが出来上がるのかを試してみるページ(13日目)だ。起動後3秒目からcount変数の加算を開始し、起動後10秒目までの7秒間にcountをどれだけ加算できたのかを調べるものになっている。エミュレータで試すのと、実機で試すのとでは、結果が違うので、こういうプログラムはぜひ実機でやってみることをお勧め! これでタイマ関連は終了だ。これまでやってきたことは難しかったせいか、タイマ関連はさほど難しいとは感じなかった。いや、実際難しかったけども、これまでと比べるとという意味でね。
 そして、明日でついに2週間。そろそろ全体の約半分を消化することになる。長かったような短かったような、そんな感じだが、まだまだ先は長いので、一歩一歩確実に進んでいきたいと思う。
 以後、乞うご期待!