基礎解説:OSの「ユーザーモード」と「カーネルモード」の役割とはこれを読めば「CrowdStrikeの不具合がWindowsに影響した理由」が分かる

TechTargetは「OSのユーザーモードとカーネルモード」に関する記事を公開した。カーネルモードは、ユーザーのアプリケーションによってシステムの重要な機能が中断されないようにするために存在する。本稿では、各モードの仕組みとカーネルモードでエラーが発生した場合に何が起こるかを説明する。

» 2024年10月10日 08時00分 公開
[Ben LutkevichTechTarget]

 TechTargetは2024年8月16日(米国時間)、「OSのユーザーモードとカーネルモード」に関する記事を公開した。コンピュータのOSは2つのモードに分けられている。こうすることで、コンピュータシステムの基本機能が保護され、安定性が確保される。コンピュータの動作中、抽象度の高い機能とコンピュータの重要なコンポーネントに関わる機能が分離され、フォールトトレランスが向上する。

画像 ユーザーモードとカーネルモード:OSの説明(提供:TechTarget)

 コンピュータのCPUは、実行中のコードに応じて、ユーザーモードとカーネルモードが切り替わる。ユーザーモードに動作が限定されるアプリケーションもあれば、カーネルモードで動作するアプリケーションもある。一般的には、ユーザーアプリケーションはユーザーモードで動作し、OSの基本コンポーネントはカーネルモードで動作する。

 2024年に起きたCrowdStrikeの障害では、Microsoftの「Windows」を搭載する何百万台ものPCが動作不能に陥ったが、これはカーネルモードで動作しているセキュリティソフトウェアが誤動作したことに原因がある。

ユーザーモードとは

 ユーザーモードとは、コンピュータシステムのハードウェアとリソースへのアクセスが制限されたOSの状態だ。ユーザーモードはカーネルモードよりも権限レベルが低く、システムの安定性を損なう可能性のある特定のコマンドは実行できないようになっている。ユーザーモードのアプリケーションは、特権的なハードウェアとの通信や特権的な操作の実行を、システムコールを通じてのみ実施することができ、そのシステムコールはOSのAPIを使用して送信される。

 ワードプロセッサ、Webブラウザ、ビデオプレーヤーなどのユーザーアプリケーションは、ユーザーモードで動作する。こうしたユーザーアプリケーションが起動されると、OSによってプロセスが作成され、メモリ内にそのアプリケーション独自のプライベート仮想アドレス空間が確保される。

 これによってユーザーモードのプログラムには、他のアプリケーションがアクセスできないメモリのプライベートセクションが提供され、ユーザーモードのアプリケーションが互いのデータを変更できなくなる。そのため、1つのアプリケーションがクラッシュしても、他のアプリケーションからは独立しているため、システム全体がダウンすることはない。

カーネルモードとは

 カーネルモードとは、システムリソースとシステムハードウェアに制限なくアクセスできるOSの状態を指す。OSのコア機能が実行される特権モードで、ユーザーモードからのシステムコールを処理することで、プロセス間を強制的に分離させる。また、周辺機器への直接アクセスも可能になる。

画像 カーネルはOSとハードウェアの橋渡しの役割を果たす

 カーネルモードでは、仮想アドレス空間は分離されず、全てのコードがメモリ内の同じ仮想アドレス空間を共有する。つまりCPUは、実行中のプログラムと、カーネルメモリとユーザーメモリの読み取りと書き込みを切り替えられるということだ。

 カーネルモードで実行されるプログラムにはOSそのものとプロセス関連のコード、一部のセキュリティソフトウェアなどが含まれる。このモードで動作するプログラムのデータは、他のアプリケーションから保護されない。カーネルモードでアプリケーションがクラッシュすると、カーネルモードで動作している他のアプリケーションに悪影響が及ぶ可能性がある。例えば、カーネルモードでドライバがクラッシュすると、OS全体が損傷する可能性がある。

ユーザーモードとカーネルモードの違い

 ユーザーモードもカーネルモードもOSの状態を示し、両モードが連携してコンピュータシステムのセキュリティと安定性を確保する。

特性 ユーザーモード カーネルモード
定義 アプリケーションコードの動作が制限されるOSモード OSのコア機能のための特権モード
リソースアクセス システムリソースとシステムハードウェアへのアクセスが制限される システムリソースとシステムハードウェア全てにアクセスできる
メモリアクセス カーネルメモリへの直接アクセスは許可されず、コードは分離される ユーザーメモリにもカーネルメモリにも制限なくアクセスでき、コードは分離されない
特権レベル 権限レベルは低い 権限レベルは高い
目的 システムソフトウェア以外(アプリケーションなど)を実行する システムリソースを管理し、制限を適用する
セキュリティと安定性 システム運用上の重要度は低く、エラーの影響も少ない システム運用上の重要度は高く、エラーの影響も大きい

ユーザーモードとカーネルモードが連携する仕組み

 CPUには「CPUがユーザーモードとカーネルモードのどちらで動作しているか」を記録するレジスタがある。CPUはカーネルモードで起動され、OSをロードして実行する。その後は、例えばユーザーからのトリガーによって、OSはプログラムを実行するための命令をロードし、プログラムを実行するためのメモリを設定する。CPUは命令を実行する前に、レジスタをユーザーモードに変更し、ユーザーモードに入ることを示す。次に、CPUは安全レベルに制限のあるユーザーモードでプログラムを実行する。

ユーザーモードからカーネルモードに切り替える方法

 ユーザーモードで動作するアプリケーションは通常、重要なシステムリソースへのアクセスが制限される。だが、システムリソースにアクセスする必要がある状況もある。例えば、プログラムがハードウェアデバイスにアクセスしたり、システム設定を更新したりする必要がある場合、そのプログラムはシステムコールを実行する。このシステムコールを通じて、プログラムはカーネルに対して必要な特定のサービスを要求する。システムコールの命令にはメモリ保護の機能があり、ユーザーモードプログラムによる変更や読み取りは許可しない。システムコールの処理が終わったら、ユーザーモードにリセットされる。

ユーザーモードで動作するプログラムとカーネルモードで動作するプログラム

 メモリ管理、プロセス管理、入出力管理を実行するプログラムは通常、カーネルモードで実行される。このモードのソフトウェアはシステムへのフルアクセスが可能なため、高い信頼性が求められる。カーネル内のコードやカーネルに挿入される新しいコードは、実行後にコンピュータのコア機能を損傷しない高い信頼性が必要になる。

画像 コンピュータシステムの権限はリング(輪)状になっている。カーネルモードは、最も特権の高いゾーンである「リング0」で動作する。ユーザーモードは、最小権限ゾーンである「リング3」で動作する。「リング1」と「リング2」は、システムアーキテクチャに応じて「スーパーバイザーレベル」と呼ばれることもある。

 この高い信頼性を実現するのがシステムコールだ。ワードプロセッサなどのアプリケーションは基本的にユーザーモードで動作するが、システムコールを使用して定期的にカーネルモードに入り、周辺機器やメモリに関連するプロセスを実行している。例えば、ワードプロセッサがファイルを保存する場合、情報を書き込むためディスクにアクセス必要がある。そこでシステムコールを使って保存を実行するというわけだ。入力やカーソル移動についても同様で、プログラムから何らかの方法でハードウェアとやりとりする必要がある場合にカーネルレベルのアクセスが必要になる。

 プログラムが着信ネットワーク接続を待ち受けているときにもシステムコールが実行される。プログラムはシステムコールを使って、今後の着信ネットワークパケットを受信できるようにデータ構造を調整するようカーネルのネットワークスタックに指示する。

 これらは、ユーザーモードで実行されるが、システムコールを使ってカーネルモードでアクセスするプログラムの例だ。カーネルへのアクセスを必要とするソフトウェアのもう1つの例が、サードパーティーのセキュリティソフトウェアだ。この種のソフトウェアの注目すべき一例が、CrowdStrikeの「Falcon」センサーだ。このセンサーは、ソフトウェアが新しい脅威を検出できるように、カーネルにコンテンツのアップデートを定期的に公開する。センサーはコンテンツを検証するため、理論上はカーネル内で安全にジョブを実行できる。

 だが、コンテンツ検証ツールのバグが原因で、問題のあるデータを含むコンテンツアップデートがリリースされた。その結果、CrowdStrikeソフトウェアがクラッシュした。このソフトウェア(少なくとも一部)がカーネル内に存在したため、アップデートを受け取ったWindows PCも巻き込まれることになった。この例は、カーネル内では信頼性の高いプロセスのみを実行することの重要性を示している。

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。