ユーザー モードとカーネル モード

Windows を実行しているコンピューターのプロセッサには、"ユーザー モード" と "カーネル モード" という 2 つのモードがあります。 2 つのモードの間で使うプロセッサのスイッチは、プロセッサ上で実行されているコードの種類によって異なります。 アプリケーションはユーザー モードで、オペレーティング システムのコア コンポーネントはカーネル モードでそれぞれ実行されます。 多くのドライバーがカーネル モードで実行される一方、ユーザー モードで実行されるドライバーもあります。

ユーザー モード アプリケーションを開始すると、Windows はアプリケーションに対する "プロセス" を生成します。 このプロセスにより、アプリケーションにプライベート仮想アドレス領域とプライベート ハンドル テーブルが提供されます。 アプリケーションの仮想アドレス領域はプライベートな空間であるため、あるアプリケーションから、別のアプリケーションに属するデータを変更することはできません。 各アプリケーションは個別に実行されるため、あるアプリケーションがクラッシュしても、その影響は当該のアプリケーションだけに限定されます。 別のアプリケーションやオペレーティング システムがクラッシュの影響を受けることはありません。

ユーザー モード アプリケーションの仮想アドレス領域には、プライベートであるという点以外にも制限があります。 それは、ユーザー モードで実行されているプロセッサから、オペレーティング システムで予約された仮想アドレスにはアクセスできない点です。 ユーザー モード アプリケーションの仮想アドレス領域を制限することにより、重要なオペレーティング システムのデータがアプリケーション側から変更されたり、損傷を受けたりするのを防止できます。

カーネル モードで実行されるコードはすべて、単一の仮想アドレス領域を共有します。 つまり、カーネル モード ドライバーは、その他のドライバーやオペレーティング システム自体から独立していないということです。 万が一、カーネル モード ドライバーが誤って仮想アドレスに書き込みを行った場合、オペレーティング システムや別のドライバーに属するデータが損傷を受けることがあります。 カーネル モード ドライバーがクラッシュすると、オペレーティング システム全体がクラッシュします。

次の図は、ユーザー モードとカーネル モードのコンポーネント間のやり取りを表したものです。

ユーザー モードとカーネル モードのコンポーネントのブロック図

関連トピック

仮想アドレス領域