カーネル?

  • (by K, 2006.03.25)
  • 発展課題のページ(全部読む前にここを読むのは混乱するのでおすすめじゃないです)
  • 自作OSを作り始めているんだけど、カーネルとかシェルとかドライバとか、いわゆるそういう単語が気になる人向けのページです。

カーネルという語が一度も出てこない本なのはなぜか?

  • 0-4では一度だけ「こんな単語を知らなくていいよ」的な単語の筆頭として出てきますが、その後は一度も出てきません。それでも30日目にはあそこまでできるわけで、つまりカーネルという語は「偉そうな人はみんな知っているけど、何の役にも立たない知識」の代表例みたいなものだといえるでしょう。
  • OSを作るときに、OSをカーネルとシェルとドライバに分割して作る、みたいな流行があります。そして筆者でさえもこれは良い設計だと思っていますが、しかしこれはOSに欠かせないというものではありません。これがいいとされている理由は、分けて作っておけば部分的に入れ替えることができるからとか、デバッグのときにやりやすくなるからとか、せいぜいその程度です。
  • 逆にいうと部分的に入れ替える予定がないとか、そんなにバグに苦しむほど腕は落ちていないと思うのなら、こんな発想を意識するのはバカだと思います。それに個人レベルでの開発であれば、部分的に入れ替えるとはいっても、関数に分けておくくらいで十分で、わざわざharibote.sysから追い出して別のファイルにする必要はないかもしれません。わざわざかっこつけて別ファイルにしたら、読み込みに手間がかかって、起動時間が長くなって、その上動作も遅くなってメモリも余計に食うかもしれません。・・・分けて作るのが当たり前だと思い込んでしまうと、そんなダメなOSしか作れなくなる危険性があるわけです。
  • 筆者のOSASKも内部的には分けて作られていて(起動時間短縮のためにファイルは一つにつなげられてはいる)、確かにデバッグには有利でしたが、動作は遅くなっています(それでも「はりぼてOS」よりは速いですが)。OSの大きさも何割か余計に大きくなっています。分かれているので入れ替えられるということになっていますが、実際に入れ替えをしたことがあるのは画面表示用のドライバだけで、今のところそれ以外の部分については分けて作ってあるのは「ただの作者の自己満足」になってしまっています。使うほうからすれば、こんなのはただの迷惑ですね。苦労して分けたのに、誰も喜ばない例です。
  • つまり言いたいのはこういうことです。どう分けるかは「他のOSがどう分けているか」を参考にしないほうがいいということです。そんなことを勉強したら既存のOSのいいところを引き継げる半面、悪いところも引き継いでしまいます。そんなOSを作って楽しいですか?それなら参考にしたそのOSをそのまま使うほうがいいんじゃないですか?もちろん100くらいのOSを勉強していいとこ取りをするという方法もありますが、それは何も思いつかなくなった老プログラマがやる非常手段であって、これからOSを作ろう、あれもやりたい、これもやりたい、という若い発想の持ち主には到底おすすめできないものです。せっかく今は貴重な無知なのですから、それを生かさない手はないのです。くだらない知識を変にいろいろ詰め込んでしまうともう思いつけなくなってしまいますよ。
  • 自分で考えて自分の納得できる方法で、必要に応じて分けてください。それは結局既存のOS構成方法(モノリシックカーネル、マイクロカーネル、など)に終わってしまうかもしれません。でもそれとは違うものになるかもしれません。そして気が付いた頃には、あなたが新しいOS理論を打ち立てていることになるかもしれませんよ。
    • この分野の混乱を示すいい例として、モノリシックカーネルやマイクロカーネルの定義は人によってまちまちです。分け方すら一致していません。だから言葉の定義なんて気にしないで、自分がいいと思うことをやるべきです。そしてそれがあとから周囲の人に「ああそれは○○カーネルだね」とか言われても、気にしなければいいのです。レッテルを貼ってそれで分かった気になるのは専門家の悪いクセですから(筆者も頭が固くなってきてそんな悪い専門家になりつつあるような気がするので、筆者の言うこともあまり信じすぎないようにしてくださいね)。

こめんと欄


コメントお名前NameLink

リロード   新規 編集 差分 添付   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
Last-modified: 2006-03-25 (土) 13:13:09 (5570d)