概要
1000行でOSを作ってみようというオンラインブックを今年の年始に知って、隙間時間にコツコツ書いていたのがようやく全て実装できた。
元々はGIGAZINEの記事で知ったんだけど日本語版の公開は2023年末だったそう。英語版が2024年12月に公開だそうなので、そのタイミングで記者が見つけたのだろうか。
初めた当初は知らなかったけど作者は『自作OSで学ぶマイクロカーネルの設計と実装』を書いた方。書店で見つけて気になっていた本だった。1000行OSはそれより小規模とのことだが無料というのはありがたい。
実装した感想
1000行OSはそれくらいなら何とか書けそうかなというので初めてみたけど、デバッグの仕方が独特で思ったより時間がかかった。
実装記録は以下。元のコードに比べて章ごとの実装順序のずれデバッグによるコメントアウトもそのまま残している。
ソース自体はいじったわけではなく、コピペはほぼ使わずでタイプミスで七転八倒したりした。
環境はWindows11Pro(23H2)とWSL2。これは本の1章にあるUbuntu版の開発環境に沿えばすぐ構築できた。
低レイヤはCはなんだかんだ書いてきたし、マイコンはそこそこ、なんちゃってでアセンブラやらFPGAやリアルタイムOSも書いたり読んだりはしてきたので感覚は分かると思ってきたけど、思ったよりもOSというもの自体の用語や概念が分からなくて戸惑った。マイクロカーネルの本を読み込めばもう少し根本の理解ができるだろうか。
レジスタで色々設定するのはマイコンぽさがあって馴染みやすかった。コンフィギュレーションをGUI使わず仕様書とにらめっこしながらビット立てて、とかやっていたのでそこは感覚が近い。なんだかんだ組込みの経験がある人は最後まで行けやすいと思う。逆に無いとひたすら写経に感じるかもしれない。
つまづきやすいポイント
作者も書いているけどデバッグが難しい。
本当にわからなくなったらバイナリダンプして追っかけなければいけない。IDEとか専用デバッガがあれば良いのだが無いのは仕方ない(無ければ作るという領域だろう)ので、タイプミスでうまく動かないときは地道にソースとバイナリを追いかけるしかない。
最後16章のファイルシステムだけはどうしてもファイル書き込み処理がうまくいかず、コピペしてタイプミスを修正した。それ以外は何とかバイナリダンプのデバッグで乗り切った。
自分の環境が貧弱だからかもしれないが、14章で実装するシステムコールの入力に結構ディレイがあり、デバッグ中に難儀した。当然実装していないのでタイプミスしてもバックスペースは効かない。
ただ、マイコン触っているとそういう注意深さが問われる入力はしょっちゅうなのでそういう意味ではたじろぐことは無かったと思う。やはり慣れが必要か。
今後
マイクロカーネルの本も懐と時間に余裕ができたら買って読んでみたい。TCP/IPのネットワーク通信も実装できるということで遊びの幅が広がる。
RISC-Vなので秋月のマイコンとかに実装できるとさらに楽しいんだけど、そちらは難易度が高そう。