本当に30日でOSが出来上がるのかを試してみるBlog

本当に30日でOSが出来上がるのかを試してみるページ

2006-04-07

30日目「いろいろなアプリが動く! まさにOSっすよ!!」

 30日目は、最終的にどんなアプリケーションが作れるのかをとことん追求した内容となっている。まずは、コマンドライン上で動作する計算機、次にテキストビューアー、そして音楽プレーヤー、画像ビューアー、と続く。テキストエディタやお絵かきソフトではなく、あくまで「ビューアー」となっているのは、はりぼてOSにファイル書き込みのAPIが存在しないからだ。ここは、しょうがない。そして、最後に、IPLの改良と、CD-ROMからの起動に対応するためのツールが紹介されており、本書は無事、終了となる。

 そんなこんなで、長かったような短かったような1ヶ月が過ぎ去りました。ついに本書を読み終えることができました。はりぼてOSにはまだまだ不十分な機能が山のようにあります。だから31日目では、それらの機能を今度はあなたたち自身で改良していってください、といった感じになっています。また、これからOS作りをやろうと考えている人への助言や、オープンソースの話などが盛り込まれています。

 また、あとがきには「中学生でも読めるようにしようと全力をつくした」とあります。実際、本当に中学生が読めるかどうかは分かりませんが、少なくとも内容がとても分かりやすいことは事実です。

 さて、それで結局「この本で本当に30日でOSが作れるか?」だが、最初は、「作れるわけねーだろー、このやろ〜」という感じだったが、いまでは、もしかしたら、いけるかも分からんですたい、と思っている。まぁ、残念ながら、学生じゃないならば、30日では厳しい。ちなみに俺は1日だいたい3時間〜4時間くらい本書を理解するのに使っていたが、多分実質40日くらいかかっている気がする。でも、学生ならば(特に大学生なら)1日4時間くらい余裕で取れるはずなので、モウマンタイだ! 学生諸君は30日使って大いにOS作成を楽しんでくれ!! 最近の中高生は妙に賢い気がするので、その能力をこっちに使っちゃえば、OS作りで一躍有名人の仲間入りだ(ホントか?)。社会人は残念だ。30日じゃ困難を極めるから、40日とか50日とか100日とか、そのくらいを目安に読み進めた方が良いと思う。

 だから、学生は素直に「うおー、30日でOS作れるやーん」とワクワクしてもモウマンタイだ。がんがってくれ。だが、社会人は「うまい話にはウラがある、その手には乗らないぜ〜」と出版社や川合秀実氏を疑ってかかろう。ついでに「30日じゃ終わらなかったぜ、このやろ〜」という批判のメールを送ると、川合氏から「はりぼてOSのことか…、はりぼてOSのことかーー」ドゴーン、スーパーサイヤ人2。手に入れろ〜、はりぼてボール〜。

エピローグ「読み終えた後で」

 さて、というわけで、0日目〜31日目までの全32日分をすべて読み終えたこととなったが、実は本音を言うと、途中何度かあきらめそうにもなったし、全然わからねーと投げやりにもなった。楽しかったけど、同時に辛かったことも事実だ。しかし、なんとかかんとか、ここまでこぎつけることができた。本当に充実した時間だった

 だから、俺は今後もOSを作っていきます。ただ、もうこれまでのように詳細に更新、報告することはないです。多分本当に30日でOSが出来上がるのかを試してみるページの一番下のところにひっそりと公開していくだろうと思う。

 というわけで、最後に感謝の言葉でこのBlogを締めくくりたいと思う。

 まずは、一番最初に、この本の著者である川合秀実に感謝したい! ありがとう。あなたが書いたこの本で、少なからず、俺のこの1ヶ月は充実したものとなった。そして、この本をきっかけにOS作りの楽しさってのがほんの少しでも分かったことがよかった。心から、本当に心からありがとうと言いたい。

 次に、出版社、毎日コミュニケーションズに感謝! こんなナイスな本を出版するなんて、本当に良い仕事してますぜ、ダンナ。あんまり出版社とか知らないんだけど、これからもこういうナイスな本をどんどん出してください。期待〜。

 そして、最後に、このBlogを今日まで読んでくださった皆様に感謝! ありがとう。最初は1日数十人くらい見てもらえればいいかな、という感じで始めたこのBlogですが、終わってみれば、5万ヒット。たくさんの応援もいただきました。たくさんのサイトで紹介もしていただきました。本当にありがとうございました。

 さて、というわけで、いよいよを持って終わりです。俺がこのBlogを更新することも、多分もうないです。もともと本書を読むためだけに作ったBlogだから読み終えた今、もう役割は終わっています。ただ、今後、この本を買おうと思っている人や、まだ読み進めている人のために、このBlogはずっと残しておこうと思います。少なからず、参考になると思うから。

 最後に、このBlogを見ているすべての方々、ここまで付き合ってくださり、本当にありがとうございました。そして、さようなら。機会があれば、またどこかで会いましょう。


 ...fin...

2006-04-06

29日目「インベーダーゲームが動いているんだ…、間違いない!

 今日のメインディッシュは間違いなくインベーダーゲームだ。これ、間違いないです。というのも、実は、本屋でこの本を買った時の一番の決め手となったのが、実はこれなんです。「30日でOS? 最後には、いったいどんなものができるんだろ〜」と、なんとなく本書をパラパラとめくっていると、な、な、な、なんと、インベーダーゲームが動いているじゃーあーりませんかー。うっそーーん。マジ? これマジ? ということで、少なくともインベーダーゲームが動くほどのOSを本書によって作ることが可能であるというイメージを植えつけさせる、ある種の商業戦略! そして、それに見事ハマってしまった俺(ぉぃ)。出版社、毎日コミュニケーションズ、恐るべし。

 が、しかし、俺のようなシロウトはこれでまんまと騙せても、ある程度の玄人ともなると「インベーダー? そんなものでは俺が動かん!!」となるわけだ。が、しかし、そんな彼らに用意されたのが、OS圧縮技術tek! 玄人には圧縮という高レベルな話題を提供しつつ、素人にはインベーダーでポップなアピール! このあらゆる読者層に購買意欲を沸き立たせるための戦略。神! 出版社、毎日コミュニケーションズ、恐るべし。

 そして、今日は29日目。えっと、俺はというと…、終始インベーダーいじってました(ハマってんじゃん!!)。だって、圧縮とか全然分からんし、そういうムツカシイことはあとですよ。とりあえず、俺はインベーダーで遊ぶ!! ということで、インベーダーのソースコードをいろいろといじりながら、今日は実に充実した一日を過ごしました(OS作ってないじゃーん)。

 それにしても、これだけのものが作れれば、もう結構なアプリケーションは作れる気がする。なんか、あんまり気が付かないんだけど、はりぼてOSもそれなりのものになったなぁ…と最近少し感傷にひたり気味。と、まぁ、思い出話などなどは明日のエンディングにとっておいて。とりあえず今日はここまで。

 明日はついに30日目。内容としては、基本的にアプリを作るだけなので、そんな込み入った内容にはならないと予想。そして、その後エピローグにて、31日目を読み、このBlogの実質的なまとめとして、その役割を終えたいと思う。

 明日、ついにこのBlogもエンディング…。たくさんのアクセス、本当に、本当に、ありがとう!!! 最終回、乞うご期待!!

2006-04-05

28日目「ファイルと日本語表示について」

 スタートしてから28日目にして、ついにファイルの操作APIを追加した。そして、ついに日本語表示を実現した。ただ、日本語表示はいいとしてもファイルに関してはもう少し突っ込んだ内容が欲しかった。本書を読み始めて、こういう風に思ったことは一度も無いから、多分最初で最後だと思うんだが、俺としては、ぜひともファイルの書き込みについてもやってほしかったのだ。

 それで、このはりぼてOSではディスクへの書き込みを実装していないから、つまりはファイル書き込みのAPIを用意することができない。だから、今回もそのAPIを用意してはいない。だが、これはぜひとも用意したかった。そのために紙面を割いて欲しかった。かといって、じゃあ変わりにどの章を省くのだ? といわれると、どの章も重要そうでなかなか省けないのだが、でも、やっぱ、ファイル読み込みがあるなら、ファイル書き込みが欲しいじゃん。これら2つがそろって初めてファイルAPIって感じがするじゃん(俺はするんだ)。

 というわけで、残念ながら、はりぼてOSではファイル読み込みAPIのみの実装となった。あっ、もちろんファイルオープン、ファイルクローズ、そしてファイルポインタ移動辺りのAPIは実装しているぞ。ただ、この辺りはどうしても悔しいから誰か28日目の続きを書いてくれ。「ファイル書き込みも実装する方法」って感じでよろしくだ(他力本願〜)。

 それで、ファイル操作がアプリでできるようになれば、アプリとしてtypeコマンドが作れるようになるわけだ。なので、これまでOS内部に実装していたtypeコマンドは排除だ! 変わりにアプリとしてのtypeコマンドを作成し、これを今後使っていくことでモウマンタイなのだ。ささいなことだが、確実な進歩だ。

 そして、今日2番目のメインディッシュ、日本語表示となる。これは、申し訳ないんだけども、予想以上にメンドクサイ(笑)。漢字多っ。第○水準とかややこしっ。区画とか意味分からん。なんかあんまりOSとは関係のないところで戦っている気がするし、この辺り実はあんまり興味ないしで、モ、モチベーションが…。こ、こんなところで日本語の壁が〜(ニホンゴ、ムツカシイデス)。

 と、そんなこんなで今日は終わりだ。明日はついに29日目、インベーダーゲームの作成ときた。ゴールまで、あと2日、乞う、ご期待。

2006-04-04

27日目「LDTって結構重要じゃね?」

 さてさて、さてさて、ついにやってきました27日目。なんかもういかにも終盤って感じです。終わりです。最後です。RPGでいうならレベル40辺りです。RPGといえば、FF12はクリアしたでしょうか? まだでしょうか? まだダルマスカのために世界中を旅してるでしょうか? 帝國にしぶしぶ従っているでしょうか? 飛空挺で大空を飛び回っているでしょうか? そうですか。それはよかったですね。でもなぁ、お前らなぁ、俺の前でFF12の話をするなーーー(って、俺がしてるんだけども)。だってさぁ、だって、俺もやりたいもん。やりたいんだもん。俺もダルマスカ守りたいもん。死守したいもん、ダルマスカ。ちくしょう〜、面白いか? FF12は面白いか、このやろ〜。

 というわけで、最近は特に周りがFF12の話をするたびに、このやろ〜、となる俺ですが、俺が守っているのはダルマスカではなく、はりぼてアプリなのです(ダルマスカなんて滅びてしまえ!!)。それで、LDTというアプリを守るシステムがどうやらあるらしい。それでGDT(グローバルディスクリプターテーブル)はグローバルなので、全部のタスクから使えるセグメント設定であったわけだが、このLDT(ローカルディスクリプターテーブル)はローカル、つまりある特定のタスクでしか使用できないセグメント設定であるわけだ。そして、これをアプリに適応させることで、アプリを守ることができるのだ。そして、グローバルとローカルという違いしかないので、基本的な設定方法は同じなのだ。

 さらに、今日は、ライブラリやmake環境の整理などもやっている。読み進めている分には、ふむふむ、という感じなのだが、この内容をこの27日目で扱うところが本書の特徴だ。「必要になったら説明する」という著者の熱い想いがこめられている。また、明日の28日目まではOSとしての機能強化をあてるらしいが、29日目と30日目はアプリケーションの作成に終始するらしい。つまり純粋なOS作りという意味では明日が最後なのだろう。本当に、本書も、そしてこのBlogも、終わりへと近づいている…(うれしいような切ないような)。

 それで、今日は、一応俺が1から作り始めているOSをちょっとだけ公開してみる。

http://www.geocities.jp/hariboteos/simpleOS.zip

 ちなみに、まだ全然最初のほう(本書でいうと6日目くらい?)だからあまり期待はしないように(しないか(笑))。ただ、はりぼてOSとはメモリマップ自体からして違うし、ソースコードもほとんど書き換えているので、まぁオリジナルOSといってもいいかもしれない。実は30日目終了までにこれをある程度カタチにしたいとは思っているのだが、まぁいろいろあって、微妙なとこだ。ただ、本書を読み終えて、「OSができたー」となっても、CD-ROMに付属しているOSをコンパイルしただけじゃ、ちょとかっこ悪いかなぁと思って、自分で1から作り始めたのだ。

 さて、明日は28日目、ついに日本語の表示だ! いよいよを持ってして、はりぼてOSは完全体となる。フリーザ最終形態、セル完全体、ブウ(通常体型ver)、うーん、どいつもこいつもすごいやつらばかりだった…。というわけで、はりぼてOSの完全体に…、乞うご期待!

2006-04-03

26日目「もっとウィンドウ速度を速く! もっとコンソールを多く!!」

 ごぶさたしてました。なんとか、復帰しました。休日をすべてベッドの中で過ごしました(なんかもったいない気分)。しか〜し、もう迷わない、止まらない。走る〜、走る〜、俺たち〜、わっしょい。

 というわけで、今日は、いきなりウィンドウ移動の高速化をやった。実は、前々から、コンソールウィンドウを移動させるときに「やけに遅いなぁ」とは思っていたのだが、ここにきて、これを修正するのか…。お…、俺の心を読んだのか…、なかなかやるな川合氏。というわけで、さっそく試してみる。ちなみに、基本的に俺は動作確認をQEMU上でしか試さないため(しかもロースペックなPCなため)、かなりウィンドウ移動が遅くなっていた。が、sheet_refreshmap関数の改良と、sheet_refreshsub関数の改良はかなりナイスだ! ただ、1バイト単位でコピーしていたものを4バイト単位にしただけでこれほどまでに違いが現れるとは…。この辺はいろんな意味で、「アルゴリズムって大事だなー」と思わせるヒトトキだった。

 次に複数のコンソールを出したり、また、コンソール自体を消したりする処理などを追加したのだが、個人的にはこれはもっと早くに扱って欲しかった内容だった。だって、たくさんの真っ黒い画面があって、それらに読みきれないほどの文字が、だーーーーって流れているのが、なんかハッカーって感じでカッコイイ。俺の中では「真っ黒い画面=ハッカー」だから、もう真っ黒い画面がいっぱいあったらスーパーハッカーdirばっかり入力しててもスーパーハッカー。そもそもハッカーって悪い人って意味じゃないみたいだけど、そんなんどうでもよくて、真っ黒い画面はスーパーハッカー(って、技術者のかざかみにも置けんヤツだなぁ)。何はともあれたくさんの真っ黒い画面が俺は欲しいんだ。それで、たくさんの真っ黒い画面を出すんなら、当然消すこともできたい。だからそれらも実装!

 この辺りになってくると、もう完全にOSとしての機能を強化することに集中している感じだ。もうCPUだのPICだの16ビットだの32ビットだのというワケワカラン世界とは別世界だ。ある意味、普通にプログラミングを楽しむことができる期間だといえる。

 ゴールまであと4日 乞うご期待。

2006-04-01

お知らせ「すみません、もろに風邪をぶり返しました」

 このBlogを読んでる方には本当にご迷惑おかけします。

 実は風邪をおもいっきりぶり返してしまいまして、金曜日の夜に39.5度という限界値の熱が出てしまって、昨日はちょっとあまりの辛さに更新を休ませてもらいました。今は薬でなんとか熱は抑えているのですが、万全を期して今日は寝ます。もう終盤というのに、ここに来て、思わぬ敵にやられてしまいました(ぐふっ)。

 直り次第また頑張りたいと思います。地球のみんな…、オラにちょっとだけ、元気を分けてくれ…。

2006-03-30

25日目「BEEPサウンドともうひとつのコンソール」

 やっぱり音は重要だよ。音楽は世界共通なんだよ。音楽に国境はないんだよ。というわけで、はりぼてOSもついに音を鳴らすことができるようになった。BEEP音ですよ、BEEP音。そして、音を鳴らすためには→http://community.osdev.info/?%28PIT%298254を参照するのだ!

 というわけで、このアドレスのページを見てみると、なんかわけわからんことがいろいろと書いてあって、こんなん分かるかー、このやろ〜。という感じなのだが、よーく見ていくと、「ものぐさなひとのために」という、ナイスなテキストがあるじゃないか。そういうことは早く言ってくれよな〜。そうさ、俺はものぐささ、ものぐさ太郎さ。今日もひとりでものぐさ太郎さ。

 というわけで、BEEP音の制御とか、音程の操作とかその辺りを読破だ。そしてどうやら、EDXに20を入れて、EAXに周波数を入れると音が流れるらしい。うっほーい。ついに音が出るんだ。音楽だよ音楽。よっっしゃー、コンパイル! そして実行〜。って、QEMUじゃ音でねーよーーー(ちゃんと本書に書いてあります。実機で試さないとダメらしいです)。

 というわけで、次は色に関することなんだけども、申し訳ないけど、俺、色数とか興味ないんす。ごめん。だから、飛ばしました(ぉぃ)。いやいや、ちゃんとあとから読みます。きっと。だってなぁ、色とか難しそうなんやもん。なんか滑らかに色の変化をみせる方法とか、そんなん無理やもん。分からんもん。俺には理解できないこと山の如しやもん。

 というわけで、続いて、青コーナー、コンソールゥー。赤コーナー、コンソールゥー(って同じじゃーん)。コンソール大好きっす。大好きっ子っす。さっそく、コンソールをもうひとつ作っちゃいます。と思ったのも、つかの間。ちょと今日の内容むずくね? だって、これまであったコンソールの2つにするだけやん。簡単やん。余裕やん。と思ってたけど、実は結構難易度高かったです。それに、なんか著者もインベーダーまでラストスパート走ったるで〜という感じで、俺もインベーダーまでラストスパート走ってて、「おおー、奇遇だねー、目的地同じじゃーん」ってそれ違いますから〜!! これOS作る本ですから〜!! 残念〜〜〜〜!! ものぐさ太郎ぎり〜!!

 というのも、これまで書いてきたプログラムを改めて、書き直さなければならないので、微妙に忘れている箇所とかあって、ちょっとここ難しかったっす。というわけで、ラスト1週間。そろそろ、OSとしてある程度、カタチにする段階にきているのかもしれない。要するにまとめということなのか。

 OSとしての完成度は、ついに限界突破だ〜〜〜〜〜。

 乞うご期待!!

2006-03-29

24日目「ウィンドウを、出したり、消したり、動かしたりしたぞ!!」

 カップラーメン、食ってるか〜〜〜〜〜(オォーーーー!!!)ちゃんと3分、待ってるか〜〜〜〜〜〜(オォーーーー!!!)でも実はアレ、3分キッカリよりもむしろ2分30秒くらいで食べ始めたほうが、適度に美味しくいただけるって、知ってるか〜〜〜〜〜(オォーーーー!!!)。

 というわけで、今回はわざわざOSまで自作して何をしたかといえば、ラーメンタイマを作ったのだ〜。ラーメンタイマってのは、要するに3分間をはかってくれるというすぐれものツールで、な、なんと、ラーメンを作るのにうってつけのツールだ。これはすごいぞ!! このツールさえあれば、もうラーメンで悩む必要はまったくない、お好みに合わせた絶妙のめん固さを選ぶことが可能だ! 有名店にも負けないめんの固さを実現できる! これでカタめんにもやわめんにも対応だ、このやろ〜。

 というわけで、さっそくはりぼてOSにタイマAPIをふんだんに追加するのだ。基本的にタイマに関しては13日目辺りでもう嫌というほどやっているため、今回はそれをちょこちょこと変更するだけでOKだ。もう、この時期になると、以前作ったものをさらに改良してOSとしての機能を強化するところにチカラが入ってくるのだ。あの苦労の日々もまんざら無駄ではなかったのだ。すべてはうまいラーメンを作るためだったのだ(ラーメン王の称号は、俺のもんだーい、やっほーい)。

 さらに、今日はウィンドウ操作をパワーアップだ! マウスでウィンドウを動かしたり、消したりできるのだ。アプリケーションのウィンドウだってモウマンタイだ。こ、これは…、もはや、OSだよ…(いや、OS作ってるけども)。

 あの良く分からんシートという概念を、うがー、うがー、全然分からーーん、なんじゃこりゃ〜、といいながら、なんとか覚えた日々も、タイマだのマルチタスクだのの、ワケワカラン用語を一生懸命覚えた日々も、いまでは良い思い出だ。

 そして、なんか一番最後の日(31日目)には、なつかしのインベーダーゲームアプリが動いているではあーりませんか。これは、もう、はりぼてOSでインベーダーを遊ぶしかない!! 名古屋撃ちをするしかない。俺のテクを見せるしかないだぎゃー(名古屋?)。

 インベーダーまで突き進め! 俺!! 乞うご期待!!

2006-03-28

23日目「グラフィックAPIの追加だ!!」

 衝撃の23日目が始まった! 今日はグラフィックAPIをふんだんに、あふれんばかりに追加した。しかし、今日のみどころはそこではない! 今日は、実は著者の知られざる過去があきらかになるのだ。もし、このBlogを今読んでる方で、本書を持っている方がおられたら、ぜひとも477ページを開いてもらいたい。するとちょうどページの真ん中に「make run」をしたサンプル画像がある。夜空を描いた画像だ。ウィンドウに点を表示するAPIを追加したので、それを利用したサンプルプログラムなのだが、問題はその画像から下へ2行目を読んで欲しい。よ〜く読んで欲しい。

(以下引用)

(夜空を描いた画像を指して)ええとですね、これは
筆者の友人が住んでいるペポ星から見た夜空なんですよ。

 ……………ペポ星? って、それどこの星だよーーーーー。そんな宇宙の果てに友人がおられるとは…。恐るべし川合氏(笑)。

 と、まぁ、もちろんこのテキストは完全な冗談なので、本当にいるわけじゃ決してないし(当たり前か)、著者も冗談として書いているんだが、でもだ。でもでもだよ。ハウエバーだよ。この本って、技術書なわけだよ。技術書なんだよ。OS作っちゃう本なんだよ。OSっていったら、もうなんかすごそうじゃん。エライ学者さんが書いてそうじゃん。そんな本に冗談とはいえ「ペポ星」という単語を出してくる著者の川合氏。絶対、おかしい(笑)。でも本書はエライ学者さんが書いてる本よりも断然分かりやすいし、本当に初心者に向けて書いてある。本当に理解してもらおうという熱意が伝わってくる感じ。そんな本を書かれた著者の川合氏、エライ学者さんよりもよっぽど尊敬できると思うのだ(これはお世辞じゃないよ。ボクは悪いスライムじゃないよ)。

 とまぁ、そんなこんなで今日やったのは、メモリ確保APIウィンドウに点を打つAPIウィンドウをリフレッシュするAPI線を引くAPIウィンドウを閉じるAPIキー入力のAPIを一気に作ったのだ。そして、最後はそれらを利用して、walkというアプリを作成した。このwalkというアプリは、数十年前のRPGの移動部分だけを簡略化した感じに仕上げたものだ。つまり、十字キーを押すと、「*」が移動するだけなのだ。しかし、これは立派なアプリなのだ。はりぼてOSのAPIを駆使して作った立派なアプリなのだ。なんか…、なんかさぁ…、素で涙出てきた…(ごしごし)。

 今日は最初から最後までAPIの追加で終始した。もうホント、OSっぽくなってしまって…、このやろ〜。でも、この辺りになってくると、本書自体が、新しく学ぶというより、これまでやってきたことを駆使して新しい機能を追加するという感じになってくるので、なんかBlogに書くことがなくなるぞ、このやろ〜(汗)。

 明日24日目は「ウィンドウ操作」で、ウィンドウの切り替えなどなどをやるらしい。ついに、あと残り1週間をきった。乞うご期待。

2006-03-26

22日目「C言語でアプリを作れるぞ! ウィンドウを表示できるぞ!!」

 まずは、スタック例外の割り込みの話だ。

 はぁ? 例外って一個じゃないの? という感じなのだが、実は例外ってのは結構いろいろとあるらしいのだ。本書P451の欄外コメントを読むと、

CPUのマニュアルによると、0x00番から0x1f番までは、
例外用の番号ということになっている。それにあわせて、
IRQの割り込み番号設定では0x20番号以降にしたわけだ。

と書かれてある。つまり、例外用の番号は全部で32個も存在すんのかよ? という驚愕の事実。これはかなり驚きだ。それで、スタック例外の番号は0x0cなのだ。だから、割り込み設定で、0x0cを設定してやれば、これでスタック例外時の処理を行うことができる。

 そして今日の本題であるC言語でアプリを作成に入るのだが、今日はウィンドウを表示するAPIを作った。そして、それをC言語アプリから利用するのだ。さて、数日前からアプリを実行するようになったはりぼてOSだが、アプリケーションを実行させるには予想以上に大変であることが最近分かった。例えば一言でアプリを実行させるといっても、アプリが実行するコードを入れておく場所と、アプリが利用するデータを入れておく場所などをメモリ上で適切に分ける必要があるし、悪用目的でアプリを実行しようとする輩もいるだろうからだ。本当に細かい部分、普通にPCを使っている人には見えない部分にすごい気を使うのだ。

 俺はWindowsLinuxといった、あんなすごいOSを作る気なんてさらさらない(というか、そもそも作る技術がない)が、でも、この本を読んでいて思うのは、「ははー、OSの内部ってこうなってるんやなぁー」ということだ。このご時世、ただの一般市民な俺がOSを作るなんて、ぞくに言う「車輪の再開発」なわけで、ぶっちゃけ無意味なんだが(仕事じゃないし、1円の価値にもなんないし(笑))、でも、OS内部の仕組みを知ることがこれほど楽しいことだとは思わなかった。車輪の再開発だって? 大いに結構! 例えどんなにオンボロで、どんなに遅い自動車だったとしても、それが、自分ひとりで作った自動車だったなら、俺は乗ってみたい!!

 明日もいろいろなAPIを追加していくようだ。乞うご期待!

2006-03-25

21日目「それでも…、僕には…、守りたいOSがあるんだ!!」

はりぼるーぜ「どのみち私の勝ちだ。もはや止める術はない。メモリは書き換えられ、上書きされたコードは新たなるクラックののろしとなる。人があまた持つセキュリティホールのひとつだ。その程度のOS、作ってきたのは誰だ!! 君とて、その1人だろう」

はりぼてきら「それでも…、僕には…、守りたいOSがあるんだ!!」

 そうなんだ。俺はOSを守りたいんだ。って、ここでひとつ質問! 「そもそも、OSを守るって何? 意味が分からん。」と思ったそこのあなた! 実は俺もそう思いました。OSを守るってなんなんだよー。

 ここでWindowsとかLinuxとかを思い出してみる(思い出して〜ごらん、あんなこと、こんなこと、あったでしょ〜)。すると、プログラマなら分かると思うが、よくへんなプログラムを実行すると、メモリアクセス違反というのが発生してプログラムが強制終了されていた。WindowsXPなら、変なウィンドウがでて、この情報をマイクロソフトデータベースに送信しますか? とか言われるアレだ。

 それで、問題は「メモリアクセス違反っていったい何?」ってことなのだ。あれはぶっちゃけて言えば「アプリケーションが、OSしか使っちゃいけないはずのメモリを使おうとしましたよ」ということなのだ。いや、もしかしたら、微妙に違うかもしれんけど、そんな些細なことなんてどうでもいいんだ。要は、だいたいの感じをつかむことが大切なんだ。んで、つまりは、アプリケーションが勝手にいろいろな場所のメモリを書きかえることができたら、それはもう一撃でOSを粉砕することができるわけで、そんなことはOS的には、おいおいちょっと待てよ、というわけで、ここで、じゃあOSを守っちゃう仕組みを作っちゃおうという話になるわけですよ。

 だが、そのOSを守る仕組み(メモリ保護)は、またもやCPU様のお力を借りなければなし得ないことなわけなのだ。それで、どうやらCPUに、「ここから、ここまでのメモリはOSしか使えないからよろしく〜」といっておけば、そのメモリ領域にアプリケーションがアクセスした瞬間に、ちょい待ちよ〜だんな〜、そっから先はとうせんぽ、というわけで例外の割り込みを発生させてくれるというわけだ。そして、その例外割り込みは、具体的には「INT 0x0d」なんだ。つま〜り、マウスキーボード割り込みを扱ったときと同じようにすれば、例外時の処理をさせることもなんなく可能なわけだ。うーん、簡単やん。

 だから、やたらめったら難しい言葉を使うと分かりにくいが、要するにCPUに「ここから、ここまでのメモリはOSしか使えないからよろしく〜」といっておけば、アプリケーションがそこにアクセスしたときに、おい待てよ〜、となって、なんかアプリケーションが悪いことしてまっせ、とOSに通知してきて、OSがアプリ波動拳〜、アプリはあえなく撃沈! という筋書きだ。

 というわけで、今日はOSの保護についてだった。なんかここ最近は、WindowsLinuxといったOSを使っているときにも、ちらっと「見える」部分の作成に取り掛かっているような気がする。いやー、なんか確実に進んでる感があるな(うほー)。

 明日は、C言語でアプリ作成だ! 乞うご期待!

2006-03-24

20日目「文字表示のAPIを作ったぞ!」

 ついに20日目に突入だ。残りもあと10日。さて、実はこの辺りまで読み進めてきて、ふと思うことがある。それは、「俺も1からOS作ってみたい」ってことだ。もちろん、はりぼてOSを作ってる最中なんだけど、これはあくまでも本書の付録というか題材というか、本書の内容を理解するためのもので、自分が作りたいものではないわけだ。だから、著者の川合氏が書いたソースコードを読みつつ、うーんなるほど、と唸りつつ、そのコードを少し変更しては、「なるほど、なるほど。」と理解してればOKな代物なのだ。

 が、それじゃあ、なんか物足りない。いや、物足りなくなってしまった。本書を読み始めた最初の頃はOSのだいたいの仕組みを理解するだけで満足だと思った。そもそも、自作のOSを作る時間なんて俺にはねーよ! と思ってた。だが、ここまで来て、ここまで読んで、多少なりともOSについて知ってしまったら、もはや、そうはいられない。最近では、本書を読んでるだけで「俺だったらこういう仕組みにするけどなぁ…」とか思ってしまって、読書に集中できなくなる。申し訳ないけど、マジで作りたくなってきた。


「安西先生…、OSが…、作りたいです…」


 というわけで、俺は作る! もう誰がなんと言おうと、作ったる! で、ちょうど明日は土曜日、明後日は日曜日じゃないか。ふっ、ふっ、ふははははははははは…、休日が全て見えるぞ…、氷の世界!(跡部様〜)。というわけで、本書を読み終える31日目までには普通に無理かもしれないが、とりあえず作ってみることにする。それに、本書についているサンプルコード(はりぼてOS)を少し変更しただけで、30日でOSを作ったといっても、なんか説得力ない気がするし。やっぱり31日目にはどんなに低機能でも自分が作ったものがあった方が良いはずだ! というわけで、気持ちあらたに頑張ります!

 ちなみに今日はAPIを作りました(おまけ扱いかよ!!)。いやいや、今日の内容も、これが結構面白くて、新しい発見があった。例えば、DOSプログラミングシステムコールを呼ぶときのint命令とかもこういった仕組みで実現されてたんだなぁと。つまりIDTに0x30〜0xffのどれかを使って、API呼び出し用の関数を登録するわけだ。そして、アプリケーション側は「int 30h」という風にすることでAPIを呼び出すことができ、これをいわゆる「OSのシステムコール」なんていっちゃったりするのだ。さらに、21日目はメモリ保護(?)の話っぽいんだが、ここから先は、どうやらAPIの追加と、アプリケーションの実行が主な内容となっていきそうだ。ああ、はりぼてにどんどん肉がついていく…(うまー)。

 明日も乞うご期待!

2006-03-23

19日目「typeコマンドよ! ファイルの内容を表示するのだ!!」

 昨日は休んでしまってすみません。まだ風邪が直ってなく、とりあえず休養をとらせていただきました。今日はもう万全完璧モードなのでモウマンタイです。熱もありません(界王拳10倍です)。というわけで、今日はtypeコマンドを作りました。

 まず、大前提として、どうやらharibote.imgには「はりぼてOS」のすべてが集約されているという事実。これ、結構重要! というのも、この本ってあまりに準備がよすぎて、著者がコンパイラからmakeファイルまですべて自前で用意してくれている。この著者の技術力の高さに驚きで胸がいっぱいだが、それはさておき、準備がよすぎるからこそ、小さなことを理解しなくても先に進めてしまうという「もろはのつるぎ」…シロウトにはお勧めでき…じゃなくて、落とし穴があるわけだ(もう、なんか言いたいことがよく分からんようになってるぞ)。

 つまり、haribote.imgには、OSとしてのデータ(プログラム)といっしょに、HARIBOTE.SYS、IPL10.NAS、MAKE.BATという3つのファイルも追加されているのだ。これって多分、分かってる人には「当たり前じゃん。お前アホ?」って感じかもしれんが、分からん人にとっては、全然わからん事実なのだ(というか俺は分からんかった)。だから最初にdirコマンドが実装されているサンプルプログラムコンパイルして実行したとき、あれ? このHARIBOTE.SYSというファイルはWindows上にあるこのHARIBOTE.SYSファイルを参照しているのかな? という疑問を持ってしまった。いや、分かってる人には「当たり前じゃん。お前アホ?」って感じかもしれん*1。そうだよなぁ、分かってる人には「当たり前じゃん。お前アホ?」って感じだよなぁ。って、アホアホうるせーよ。何がアホだよ。アホいうほうがアホじゃ! アホはお前の方じゃ、このやろ〜。もうグレてやる、グレまくってやる。駄菓子屋の5円チョコ万引きしたる。駄菓子屋の5円チョコ万引きして、近所の子犬にあげたる。いつもは悪い不良が、たまに少し良いことをすると、必要以上に良い人に見られるという人間心理をあますことなく利用したる。へへへっ「俺は不良だが、本当はいいやつなんだぜ」というイメージをあますことなく植え付けさせたる、って、もうなんのBlogか全然分からーん

 それで、typeコマンドを作るためには、まずはharibote.imgの中に追加されているファイルを見ることになるのだが、ファイルというのは結局0と1の羅列であるため、haribote.imgのどこからがIPL10.NASなのかが分からんのだ。だって、ただ引っ付けているだけだから当たり前だ。だから、どこからがIPL10.NASなのか、どこからがHARIBOTE.SYSなのかをちゃんと書いておいて欲しいわけだ。だから、あらかじめそれが書いてある場所を決めておき、そして、それが書いてある場所のフォーマットがFILEINFO構造体で、この構造体を使って、ファイルの情報をゲットするわけなのだ。

 haribote.imgに必要なファイルを追加し、それをFILEINFOでゲットする。こういう流れではりぼてOS内でファイルの管理を行うことができるわけだが、ここでFATというふざけたやつらが登場する。お前らは俺たちを混乱させようとしているのか、まったく。たった0.2%のためにそんな複雑な仕組みを作るな、このやろ〜。

 Windowsのディスク管理方法では、512バイトよりも大きいファイルを扱うときに、次のセクタにデータの続きが書き込まれないことがあるらしい。なんじゃそりゃーー。意味わからんわ。嫌がらせか? おい? 嫌がらせか? 未来を担う子供たちにとことん苦労を背負わせようって魂胆か? と言う感じだが、だから、FAT(file allocation table)というファイル配置表をシリンダ0、ヘッド0、セクタ2〜9に置いているらしい。つまり、それを見て、適当にファイルを繋ぎ合わせてくれということらしい。もうマジめんどい。やめてほしい。

 だから、はりぼてOSで扱うファイルをFATに対応させるためには、こういう細かい苦労が必要になってくるのだ。FATに関する詳しいことは本書を読んでくれ。それで、今日のセイカブツは→本当に30日でOSが出来上がるのかを試してみるページ(19日目)だ。

 そういえば、この本にはファイル管理という章(?)がないけど、ファイル管理ってOS作るのに結構重要な知識ではないのかな? 正直こんな適当な理解でいいのかなぁという感じなのだが、一応、今日でアプリケーション的なものは実行できるようになったし、明日はAPIを作るらしいし、なんか本当にこの本は難しい理論を完全に抜きにして、プログラミング重視で突き進んでるなと思う。あんまり本書の評価を見たこと無いけど、意外と賛否両論かもしれない。個人的には、理論ばかりのOS解説本はすでに結構あるから、こういう解説本も必要だと思うんだけど。

 というわけで、明日はAPIを作っちゃうらしい。APIだよ、API。アプリケーション、プ…プログラミング、イ…、イン…テ…? イント…? イ…、イン………、乞うご期待!!

*1:ここはちょっと書き方がまずいので、注釈を追加します。この文は、Windows上にあるファイルを参照しているわけでは決してない。そんなことは当たり前。という意味です。そもそもそんなことだったらWindows上でしか動作しないという変なソフトになってしまう。

2006-03-21

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コマンドを作るようだ。

 乞うご期待!!

2006-03-20

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がカタチになっていく〜。乞うご期待!

2006-03-19

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

 なんとか分かったぞ。なんとか、なんとかな。もうこれ以上理解するのは無理! 不可能! すでに俺の頭脳の許容量の120%を使用しているからもう無理。無理。ホント勘弁してください(ピキーッ、ぼくはわるいスライムじゃないよ)。

 というかですよ。16日目は個人的に、かなり難易度高いよ。正直6日目の悪夢を思い出しましたよ。ただ、あれは著者が「6日目はむずいよ?」といっていたので、心の準備といいますか、まぁ心の準備ができたわけですけどね(だから心の準備だね?)。ただ、今回はなんの予告もないですから。いきなりですから。いきなり後ろから殴られた感じですから。スライムを倒してレベル上げようとフィールドを歩いていたら、いきなりドラキーが出てきたようなもんですから。

「おいおい、ドラキーとか強いよ〜、これは逃げるしかねー」にげる選択

「はりぼては逃げた。しかし、まわりこまれてしまった…」

ドラキーの攻撃!」 ガンッ!!! 「はりぼてに8のダメージ!!!」

「はりぼては死んでしまった…」テラリラ、テラリラ、テラリラ、テラリ〜…

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

 ちくしょー、ゴールド半分かよー(ってそれはドラクエだけだから、ドラクエの世界だけだからーー)。

 って、話がそれたけど。今回、俺が本当に難しいと思ったところは、タスク管理の優先順位というところだ。例えば音楽を鳴らすタスクや、マウスを動かす処理を受け持っているタスクというのは、一般的に、ほとんど途切れてはいけない処理。んで、逆に一定時間毎に数値をカウントする処理なんかは、ある特定の時間以外は別に何もしてなくてもよいわけで。つまり、タスクの種類によって、どのくらいCPUに働かせようかを決めなければならないわけだ。そして、それが優先順位という仕組み(少なくとも本書ではそう読んでいる)で実現するのだが、ホント、もうややこしいったらありゃしない。なんかこれまで学んできたこと総動員で、しかもタスク管理自体も難しくて、マジでこれは難易度高いと思う。ホッホッホッ、私の難易度は…53万です(フリーザ様〜〜)。

 それで、例えばもっとも処理を必要とするタスクレベル0とし、もっとも処理を必要としないタスクレベル10とする。そして、すべてのタスクをこのレベル0〜10までの範囲で振り分けて、なるべくレベル0の方から順にCPUに処理させるような仕組みを作る必要がある。前にも学んだとおり、CPUは一個しかないので、一瞬(1クロック?)で処理できる命令は必ず1つなのだ。つまり、1つのタスクしか処理をしていないため、ものすごい、本当にものすんごいスピードでタスクの間を行ったりきたりして処理していかなければならない。

 ここで、どのタスクをどれくらい優先させて処理させるか? ということが重要になってくる。すべてのタスクを均一に同じ期間だけ処理させるというのなら、さほど難しくはない。難しいのは、タスク別にどれだけ優先させるかという仕組みを作ることだ。

 それで、まさに分からんかったのはこれです。優先順位! 本当に完璧なまでのアルゴリズムな話なんですよ。本当に壁だと思うんだけど、俺だけなのかなー。

 というわけで、一応、ある程度理解したので、セイカブツを残します→本当に30日でOSが出来上がるのかを試してみるページマウスの動きとかウィンドウを移動したときの動きとかが微妙にあやしいのは、優先順位処理を最後までちゃんとやってないから。でも、なんとか理解はできたと思うから、明日のコンソールを作るついでにやったります。それに、この本は、そのときは分からなくても、読み進めていくと分かってくる場合もあるのだ(6日目同様)。だからとりあえず、この本を読んで楽しむことが重要なんじゃないのかな(多分)。

 あと、この辺りになると著者がちょっとノリにノッっているのが分かる。最初の方よりもOSっぽくなってきて、書く側としても面白く感じるのかもしれんです。テキストも内容もどんどんさくさく進んでいくし(速すぎてついていくのがやっとだけど(汗))。

 まぁというわけで、とりあえずは進む! 明日はコンソール。ずっと前からやりたいと思っていたところだ!! よっしゃー!! がんがったる!!!

 乞うご期待!