Introduction
「1000行で作るOS」という怒田晟也さんが公開している無料のオンライン教材がある.
たった1000行でOSの基本的機能であるコンテキストスイッチ,ページング,ユーザーモード,コマンドラインシェル,ディスクデバイスドライバ,ファイルの読み書きをC言語で実装するというものである.
OSというか,扱うのはほとんどカーネルと呼ばれるものである.
3年前に大学の先生から教えてもらったが,今年の3月くらいからちまちまやってようやく全部終わったので,感想をメモしておく.
OSはLinux Mint 22.1で実行した.親切に環境構築のセクションからスタートするのでどのOSでもできると思われる.
やってよかったこと:OS開発者の気分を楽しめる
この教材ではRISC-Vと呼ばれる命令セットアークテクチャ用のOSを少しずつ実装し,QEMUというエミュレータで実行して動作を確認する.
普通のアプリ開発だと,コンパイラが親切にエラーメッセージを出してくれて,AIに丸投げ!とかできるのだが,OSだとこうもいかない.
カーネルのコンパイルの時点でエラーが出るのはまだいいが,コンパイルしてQEMUで実行したときに,実装していない処理はそもそも未定義なので,コードが間違っていて動作が想定と違っても何も起こらない.
だからデバッグするときは,qemuの機能やobjdumpを使ってこっち側からメモリやバイナリのおかしいところを探しに行かないといけない.この作業が,特にOS開発者の気分と専門性を感じさせてくれた.
したがってやることはずっと,ちょっとコーディングしてqemu, ちょっとコーディングしてqemu, たまにqemuのモニター機能を使ってメモリダンプして中身をチェックしたりするという感じだった.
このあたりは,昔授業でやったアセンブラを思い出した.
正直このデバッグの仕方は専門的すぎて,教材のガイド無しでデバッグできる気がしないが,体験としてはとても面白かった.
Conclusion
こういった数少ない日本語の自作OSの教材を作ってくれる人々には頭が上がらない.
最後までやってみた結果,特に低レイヤのCに慣れておらず,結局細かいところはまだわからない.
一方それなりに,OS開発の流れと雰囲気は味わえたので満足である.
特に楽しかったところは,helloとexitコマンドだけの簡易shellが動かせるようになったところ.
あと,最後のtarファイルを簡易ファイルシステムとして使うセクションもアイデアが斬新で面白かった.
おすすめです.試してみてねー