OSとは何か:カーネルとユーザー空間
コンピュータが起動すると、最初に動き出すソフトウェアがオペレーティングシステム(OS)です。Windows、macOS、Linux、iOS、AndroidなどはすべてOSです。OSは、ハードウェアを抽象化し、アプリケーションに共通のインターフェースを提供するソフトウェアです。OSが持つ役割と、安全性を確保するための「特権分離」について学びます。
1. もしもOSが存在しなかったら?
OSの役割を理解するために、もしOSが存在しない世界(ベアメタル)でゲームアプリを作ると想像してください。
OSがないと、ゲームアプリの開発者は以下のような低レベルなハードウェア制御コードを自前で書かなければなりません。
- 「キーボードの特定のピンの電圧変化を検知して入力を判断する」
- 「ディスプレイの特定のアドレスに直接ピクセルデータを送り込む」
- 「SSDの特定のセクター(物理的な位置)を指定してセーブデータを保存する」
また、OSがない環境では「複数のアプリを同時に実行することができない」という問題があります。 もし、あるバグを含んだゲームアプリがメモリの不適切な領域にデータを書き込んでしまったら、同時に動いていた別の音楽再生アプリのデータを上書きしてしまい、システム全体がクラッシュする可能性があります。
このように、ハードウェアを直接制御させるのは非効率的で危険です。そこで、ハードウェアの制御を行い、アプリに対して安全で使いやすいインターフェースを提供する共通の管理プログラムが必要になりました。これがOSです。
2. カーネルとユーザー空間の分離
OSは、システムの安全を守るために、CPUが持つ「権限レベル」の機能を利用して、実行環境を厳格に2つに分離しています。
- カーネル空間(Kernel Space):特権モード
OSのコアである「カーネル」が動作する領域です。ハードウェア(CPU、メモリ、周辺機器など)への全権限を持っており、どんな命令でも直接実行できます。 - ユーザー空間(User Space):非特権モード
ブラウザ、ゲーム、テキストエディタなどの一般的なアプリケーションが動作する領域です。ハードウェアへの直接アクセスは完全に禁止されており、許可されていないメモリ領域を読み書きしようとすると、即座にCPUによって強制遮断されます。
3. 唯一の公式窓口:システムコール(System Call)
ユーザー空間のアプリが「ファイルをディスクに保存したい」「ネットワークで通信したい」「画面に文字を出したい」といったハードウェア操作を行いたい場合、自分で直接操作することはできません。
その代わりに、カーネルに対して安全に作業を依頼する公式の依頼窓口を利用します。この窓口のことをシステムコール(System Call)と呼びます。
システムコールが呼ばれると、CPUの権限レベルが一時的に「特権モード(カーネル空間)」に切り替わり、カーネルがリクエストを受け取ります。カーネルは、そのアプリに権限があるか(例:そのファイルを書き換えてもよいか)を厳格にチェックした上で、代わりにハードウェアを操作し、結果をアプリに返します。
このチェック機構があるおかげで、1つのアプリが暴走してもシステム全体が巻き添えでクラッシュするのを防ぐことができます。
4. まとめ
OSは、ハードウェアの直接的な操作を代行し、ユーザー空間とカーネル空間の分離を行うことで、現代の安全なマルチタスク環境を支えています。
次のセクションでは、このOSの上でプログラムが「実行中」の状態になった最小単位である「プロセス」と「スレッド」の仕組みについて学びます。