RustでOS開発#3 ELFとシステムコールを実装する
自作 OS「FerriOS」の開発日記、第3回です。前回はユーザプロセスを実装して機械語コードでループさせてみて、なんとなく動いていそうだなぁというところまでできました。 しかし、これじゃユーザプロセスからはなんの文字出力もできないですし、使い物になりませんよね。 なので今回は簡単なシステムコールを実装して、ユーザアプリケーションからカーネルに対して文字出力を実行させることで、ユーザプロセスが動いている様を確認できるようにしたいと思います。今回実装するシステムコールは下記の4つ。 fork() exec() getpid() print_num():数値表示用 print_str():文字列表示用 print_num()、print_str() は、write() システムコールを実装するまでの暫定的なシステムコールとして実装しています。実際のところは Linux などでは write() システムコールを通して VGA なりデバイスファイルに文字を書き込むことで文字列を表示しているのですが、FerriOS にはまだファイルシステムを全く実装しておりませんので、文字表示専用のシステムコールを用意しています。 また、今回はユーザアプリケーションを ELF アプリケーションとしてビルドし、exec() で ELF からユーザ空間にコードをロードして実行できるようにします。お楽しみに!