カーネルモードとユーザーモード
CPU には権限の高いカーネルモードと低いユーザーモードがあり、OS の中核だけを特権で動かして安全を守ります。アプリはシステムコールでカーネルに処理を依頼します。
- 1.CPU は特権レベルを持ち、OS の中核はカーネルモード、アプリはユーザーモードで動きます。
- 2.ユーザーモードではハードを直接触れず、危険な操作はカーネルに依頼するため安全です。
- 3.その依頼の窓口がシステムコールで、ここでモードがカーネル側へ切り替わります。
なぜモードを分けるのか
もし全プログラムがハードウェアを自由に触れたら、1つのアプリのバグが メモリを壊し、ディスクを消し、他のプログラムや OS ごと巻き込んで システム全体を不安定にできてしまいます。
これを防ぐため、CPU は 特権レベル という仕組みを持ちます。OS の中核(カーネル)だけを高い権限で動かし、一般のアプリは権限を制限した状態で動かす——この 権限の分離 が、現代 OS の安全性とマルチタスクの土台です。
2つのモード
実行モードは大きく2つに分かれます。
| 観点 | カーネルモード | ユーザーモード |
|---|---|---|
| 権限 | 高い(特権命令を実行可) | 低い(制限される) |
| 動かす主体 | OS カーネル・デバイスドライバ | 一般アプリ |
| ハード操作 | 直接できる | 直接はできない |
| アクセス範囲 | 全メモリ・全資源 | 自プロセスの範囲のみ |
| 障害の影響 | システム全体に波及しうる | 原則そのプロセス内で済む |
x86 系では特権レベルが リング0(最高)〜リング3(最低) に分かれ、実用上はリング0をカーネル、リング3をユーザーに使います。CPU は 今どのモードか を内部に保持し、ユーザーモードで特権命令を実行しようとすると 例外を発生させて拒否 します。
境界をまたぐ:システムコール
ユーザーモードのアプリは、ファイルを開く・通信する・プロセスを作るといった 特権が要る操作を自分では実行できません。代わりに OS へ「これをやってほしい」と依頼します。この依頼の窓口が システムコール です。
1. アプリが read() を呼ぶ(ユーザーモード)
2. 専用の命令でカーネルへ制御を移す(→ カーネルモードへ切替)
3. カーネルが引数を検査し、実際にディスクから読む
4. 結果を返してユーザーモードへ戻る
ポイントは、勝手にカーネル空間へ飛び込めるわけではない ことです。入口は OS が用意した番号付きの窓口だけで、カーネルは渡された引数を必ず 検査 してから処理します。これにより、不正な依頼を水際で弾けます。
普段書く printf や fopen はライブラリ関数で、その内部で write や open といったシステムコールを呼んでいます。アプリが直接モードを切り替える命令を書くことは、ほとんどありません。
モード切替のコスト
ユーザーとカーネルの行き来は 無料ではありません。レジスタの退避・復元や引数の検査、場合によってはキャッシュやパイプラインへの影響が伴います。
そのため、システムコールを呼びすぎると遅くなる ことがあります。1バイトずつ write を何度も呼ぶより、まとめてバッファリングして一度に書くほうが速いのはこのためです。標準ライブラリの入出力がバッファを持つのも、切替回数を減らす工夫です。
システムコールによるモード切替は、同じプロセス内でカーネルへ入って戻るだけです。一方コンテキストスイッチは、CPU で動かすプロセス自体を別のものに入れ替えることを指します。混同しないようにしましょう。
まとめ
- CPU の 特権レベル で世界を分け、OS の中核は カーネルモード、アプリは ユーザーモード で動かす。
- 目的は 安全性——1つのアプリの暴走を、その範囲に閉じ込める。
- 特権が要る操作は システムコール でカーネルに依頼し、そこでモードが切り替わる。
依頼の仕組みの詳細は システムコールとカーネル、切り替えの話は プロセスとスレッド も合わせてどうぞ。
OS Article
カーネルモードとユーザーモードを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
カーネルモード
比較で見る軸
難易度: intermediate / カテゴリ: OS / タグ数: 4
導入後に効く点
ユーザーモードではハードを直接触れず、危険な操作はカーネルに依頼するため安全です。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- intermediate
- カテゴリ
- OS
- タグ数
- 4
判断チェックリスト
- 自社の用途が「カーネルモード / ユーザーモード」に近いか確認する。
- 強みである「CPU は特権レベルを持ち、OS の中核はカーネルモード、アプリはユーザーモードで動きます。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。