萌えハッカーニュースリーダー

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

出典: https://popovicu.com/posts/writing-an-operating-system-kernel-from-scratch/
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

ブー!正解は「動作が重くなる」じゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search