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

Windows を実行しているコンピューターのプロセッサには、"ユーザー モード" と "カーネル モード" という 2 つのモードがあります。

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

ユーザー モード

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

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

カーネル モード

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

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

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

仮想アドレス領域