雑記帳
ここはhideyosiの雑記帳です。テケトーに書き散らしてるだけなので間違っていたりとは普通にしてます。信用度は相当低いことをあらかじめご了承を。またご覧のようにWikiを使ってますが、hideyosi意外は書き込めません。

OSはどうやって作ったらいいのでしょう。

OSは大雑把に言えば以下のような部品に分けることができますね。

  • ブートローダー
  • OS本体(カーネル等)
  • シェル
  • アプリケーション

これらのうち、どこから作り始めるかでやり方が変わるのではと考えます。

ブートローダーから作りたい anchor.png

話を簡単にするために、FDから起動するOSを考えてみましょう。 FDから自動的に起動させるためにはIPL(ブートローダー等)が読み込まれ、実行されます。これらはまず、CやJAVA等の高級言語で書くことはできません。 (時々むりやり、丸々アセンブラで作って関数化して「ほら!Cで書けたぞ!」という人がいますが・・・) また、PCが起動してIPLを読み込む段階ではリアルモード(8086と同じ状態)になっていますので、8086用のアセンブラの知識が必要になります。 またアセンブラでプログラムを組む場合、ハードウェアの知識が不可欠になります。 いずれにしても、アセンブラがまったくわからないという状態ではちょっと無理でしょう。

Page Top

カーネルから作りたい anchor.png

ブートローダーを自作せずに実際の動作をするカーネルを作り始める・・・そんなことが可能なのでしょうか?

実はそう難しいことではありません。世の中にはけっこう「汎用ブートローダー」というものがあります。ブートローダーはとりあえずそちらをそのまま使うということにして、カーネル本体の作成に取り掛かることは可能です。

しかし、この段階においてもC等で作るのは難しいでしょう。Cで使える関数等はほとんどOSの機能を前提にしています。OSがなにもない段階で(いまそのOSを作っているのだから)これを使えるわけはありません。

OSASK等のオリジナルOSの場合、確かにCが使われていますが、これはあらかじめアセンブラ等を使って関数を作っておいたからできるのです。

Page Top

結論 anchor.png

いずれにしても、アセンブラをまったく使わずにOSを「作る」ことはできない。もしくはかなり変則的な方法でむりやり行うことになるでしょう。

Page Top

異論 anchor.png

学術的な研究などでOSを作ってみるということがあるようです。(私はよく知りませんが、情報系の大学などではこういった授業があるようです)

そういったこと等の見地から見れば、「いきなりCでOSを作ることは可能」となります。 また私はそれに異論を唱えるつもりはまったくありません。

しかし、当サイトでいうところのOSという条件にはあてはまらないので。


Last-modified: 2012-10-22 (Mon) 22:05:14 (GMT) (2812d) by