2025/09/14 15:44 Writing an operating system kernel from scratch

ロボ子、今日はRISC-V上で動く最小限のタイムシェアリングOSカーネルの話じゃぞ!

RISC-Vですか!最近よく耳にしますね。タイムシェアリングOSカーネルとは、具体的にどのようなものでしょうか?

簡単に言うと、一つのCPUを複数のプログラムで時間で区切って共有する仕組みのことじゃ。この記事では、それをRISC-Vというアーキテクチャで実現したらしいぞ。

なるほど。記事によると、Zig言語で実装されているんですね。珍しい選択ですね。

そうじゃな。Zigはメモリ管理とか、ローレベルな制御がしやすい言語じゃから、OSカーネルのようなものを作るには向いているのかもしれんの。

OpenSBIをSBIレイヤーとして利用している点も興味深いですね。これはどういう役割を果たすのでしょうか?

OpenSBIは、簡単に言うと、OSとハードウェアの間を取り持つ役割じゃ。これがあるおかげで、OSはハードウェアの細かいことを気にせずに済むんじゃ。

記事には、静的に定義されたスレッドをサポートし、スレッドがユーザーモードで動作するとありますね。これはセキュリティ的に重要なポイントですか?

その通り!ユーザーモードで動くことで、スレッドがカーネルを直接めちゃくちゃにすることができなくなるんじゃ。システムコールを使って、安全にカーネルの機能を利用する、というわけじゃな。

時間スライスをスレッド間で割り当てる、というのもタイムシェアリングの基本的な考え方ですね。

そうじゃ。CPUの時間を細かく区切って、それぞれのスレッドに順番に割り当てることで、複数のプログラムが同時に動いているように見せかけるんじゃ。

仮想化についても触れられていますね。スレッド、プロセス、コンテナ、VMなど、さまざまなレベルでの仮想化オプションがあるとのことですが。

仮想化は、リソースを抽象化して、複数のプログラムで共有するための技術じゃ。スレッドはプロセスよりも軽い仮想化単位で、コンテナやVMはさらに大きな単位になるぞ。

割り込みスタックの規約を利用して、スレッド間のシームレスなタイムシェアリングを実現しているんですね。具体的な仕組みが気になります。

割り込みが発生したときに、CPUの状態をスタックに保存するんじゃ。それをうまく利用して、別のスレッドに切り替えるときに、保存しておいた状態を復元することで、シームレスな切り替えを実現するんじゃな。

カーネル空間とユーザー空間を分離して、それぞれSモードとUモードで実行する、というのもセキュリティの基本ですね。

その通り!Sモードは特権モードで、カーネルだけが実行できるんじゃ。Uモードはユーザーモードで、一般のプログラムが実行できる。これにより、カーネルが保護されるんじゃな。

QEMU仮想マシン上でカーネルをデプロイする方法も解説されていますね。実際に試してみるのも面白そうです。

QEMUは、色々なCPUの動きをシミュレートできる便利なツールじゃ。これを使えば、実際にハードウェアがなくても、OSを試すことができるんじゃ。

RISC-V、OpenSBI、Zigを組み合わせたOSカーネルの実験、教育的な価値がありそうですね。

そうじゃな。ローレベルなシステムソフトウェアを理解したい人にとっては、良い教材になるじゃろう。しかし、ロボ子よ、もしOSが風邪をひいたらどうなると思う?

え?風邪ですか?OSはソフトウェアなので、風邪はひかないと思いますが…

ブー!正解は「動作が重くなる」じゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
