自作OSをやってみて良かったこと

自作OSアドベントカレンダー2019 11日目 (12/11)です。
アドベントカレンダーには初めて参加させていただきます、拙い文章ですが温かい目で見守っていただけると幸いです。

ここでは、自作OSに挑戦してみて良かったなと思ったことを書いていきたいと思います。
自分はx86でBIOS(レガシーBIOS)とUEFI(x64)から起動するタイプを途中まで(というか割と序盤で脱線していきました)作った程度です。

知識が増える

自作OSをやってみたことで、いるか要らないかはさておき知識が増えました。
例えば、OSが起動するまでに起きていることや呼出規約、UEFIとBIOS、アセンブリとインラインアセンブリとかとか...
普通に生きていれば、あんまり気にすることのなかったことでも、OSの自作に挑戦したことで、自分で調べたり、作ってみたりして色々知ることができました。
OSは現代的なシステムの基底となっているシステムなので、これを知っておくと大分能力の幅が大きくなると思います。実際に色々役に立っています。

OSの偉大さがわかる

自作OSでは、当たり前ですがOSの力を借りれません。一番基本(?)のデバッグ方法のprintfデバッグすらできません。
そういう環境を経験すると意外とOSのお世話になってるなと実感します。

OSのすごさを感じた点としては、Linuxのプロセススケジューラの実装があります。これを知ったとき「なにそれ、めっちゃ頭いいじゃん!!」とか思いました。自分が実装したら普通にキューに突っ込んで「優先度?なにそれ美味しいの?」みたいな実装になりかねないのでかなり感動しました。

プログラミング言語に関する能力が向上する

自分はCとC++でOSを書いてみたことがありますが、標準ライブラリがないので(newlibとか使えば良いのでしょうが)、必要な機能を作ることになります。
簡単なものならstrcmpやstrcpyなどから、printfのような作る前だと、「これどう作るんだ...」となる関数まで色々作れます。(競プロとは違うパズルみたいな楽しさがあって好きです)
普通にアプリを作っているときには使わなかったり気づかなかったりした機能にも気づけたりしてとてもおもしろいと思います。
自分はここで自作OSそっちのけでCとC++の標準ライブラリの実装に移ってしまうので、全然進まなくなっちゃいます。ですが未だに、領域からメモリを持ってくるという実装に悩んだりしてます。

楽しい

自作OSで一番良いと思うのはやっぱりやってて楽しいことです。普通にプログラムを作るのも楽しいですが、普段というか普通やらないレイヤーを触ることは新鮮でだいぶ気分も変わります。
どうせ、LinuxとかWindowsみたいなOSは作れないので、自分の欲しい機能だけに全振りしたOSとか、実用性皆無なOSとか考えているだけでも楽しくなってきます。
これを書いている間もこんなOS作りたいなとか思ってます。

最後に

次は脱線しないように標準ライブラリがある状態でやろうと思います。
osdev-jpなども参考にさせていただきたいと思います。

短いですが、以上です。
お付き合いいただきありがとうございます。

コメント

このブログの人気の投稿

初めの挨拶

C++11の機能 (型推論, 範囲for)

C++11の機能 (関数のdefault・delete宣言, overrideとfinal指定子, 移譲コンストラクタ, 継承コンストラクタ)