今年一年を振り返って

30日でできる! OS自作入門

30日でできる! OS自作入門

4月はじめ

4月

  • 数日でとりあえずざっと読み終わりました
  • C++ を使いたかったので、tolset を使わず(このときはC言語しか使えなかったので)gcc と nasm で実装を開始しました
  • ld で吐いたバイナリーを実行させる方法がわからず挫折しました orz
  • Mona0.2.2 を最小まで小さくしたものを作ってみました(Noma
  • Noma ではセグメントを使ったマルチプロセス化がうまくいかず、結局断念しました orz

5月

  • ここを参考にして、tolsetでC++が使えるようになりました♪(このときの嬉しさはまさに天にも昇る気持ち)
  • やりたいことはまさにこれだったので、gcc と nasm を使った旧コードはすべて破棄しました
  • 怒涛の勢いでC++化をすすめ、C++化がほぼ完了しました
    • オリジナルのC言語版のコードは参考にはしていますが、C++版は似ても似つかぬコードです(笑)
  • 最初のタスクスイッチができました(マルチタスクまであと一歩です)
  • カーネルモードでとりあえず BayGUI を実装してみました

6月

  • 下敷きのアルゴリズムが読んでいても全然わからず(汗)、ゼロから自分で作ってみたのですが、まったく速度が出ず、試行錯誤を繰り返しました
  • カーネルモードで試しに InfoNES をビルドしてみたら、1MB弱になってしまったので、やはりアプリケーションは圧縮がきくユーザーモードじゃないと使い物にならないとわかりました
  • ユーザーモードではじめてアプリケーションが起動しました
  • ユーザーモードでメモリ管理ができるようになりました(mallocってこうやって作るのか・・と自分の手で実感できました)

7月

  • はりぼて Wiki にあった似非ファイルシステムに乗り換えました
  • ウィンドウの枠を描画するようにしました(やっと見た目が OSっぽくなってきました)

8月

9月

  • 仕事が忙しすぎてお休みです

10月

11月

  • 描画を早くしたり、中身をリファクタリングしたりしていました
  • はりぼて OS に壁紙を読む込む機能をつけました(これでスクリーンショットが華やかになりますね)
  • メッセージングフレームワークを追加しました(これで MonaOS みたいにプロセス間通信を行えるようになります)
    • MonaOS ではメッセージのデータが固定長(しかも128バイトしかない)で、使いづらかったので、可変長にしてみました

12月

  • カーネルモードで一度実装していた BayGUI をユーザーモードで再実装しました
  • せっかく作り直すので、いままでできなかったことを取り入れて、BayGUI2.0 になる予定です(今年はなんちゃら2.0が流行りましたねぇ・・でも、シングルプロセスの頃から数えると3代目?)
  • メッセージフレームワーク上に、マウスやキーボードイベントを実装しました(いまのところ動いているようです)

まとめ

  • 振り返って見ると、最初の3ヶ月は挫折の連続で苦しかったです
  • 自分で OS を作ってみると OS の構造がすみずみまで理解でき、とてつもなくいい経験になります
  • 最近は、カーネル部分より、本来やりたかった GUI 部分に専念できるようになり、楽しい反面、ちょっと飽き気味かな・・
  • 今後は、音やネットワークやCD-ROMに対応して、簡単に遊べるホビーOS にしていきます

はりぼて友の会 は今後も要注目です!