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

Windows を実行しているコンピューターのプロセッサは、ユーザー モードカーネル モードという 2 つの異なるモードで動作します。 プロセッサは、実行しているコードの種類に応じて、これらのモードを切り替えます。 アプリケーションはユーザー モードで動作し、コア オペレーティング システム コンポーネントはカーネル モードで機能します。 多くのドライバーはカーネル モードで動作しますが、ユーザー モードで機能するドライバーもあります。

ユーザー モード

アプリケーションをユーザー モードで起動すると、Windows によってそのプロセスが作成されます。 このプロセスは、アプリケーションにプライベート仮想アドレス空間とプライベート ハンドル テーブルを提供します。 各アプリケーションの仮想アドレス空間はプライベートであるため、あるアプリケーションが別のアプリケーションのデータを変更することはできません。 各アプリケーションは分離して実行されるため、1 つのアプリケーションがクラッシュしても他のアプリケーションやオペレーティング システムに影響が及ぶことはありません。

ユーザーモード アプリケーションの仮想アドレス空間も制限されています。 ユーザー モードで実行されているプロセスは、オペレーティング システム用に予約されている仮想アドレスにアクセスできません。 ユーザーモード アプリケーションの仮想アドレス空間を制限することで、アプリケーションが重要なオペレーティング システム データを変更または損傷するのを防ぐことができます。

カーネル モード

カーネル モードで実行されているすべてのコードは、1 つの仮想アドレス空間を共有します。 その結果、カーネルモード ドライバーは、他のドライバーやオペレーティング システムから分離されません。 カーネルモード ドライバーが誤って不適切な仮想アドレスに書き込んだ場合、オペレーティング システムまたは別のドライバーに属するデータが侵害される可能性があります。 カーネルモード ドライバーがクラッシュすると、オペレーティング システム全体がクラッシュします。

次の図は、ユーザー モード コンポーネントとカーネル モード コンポーネント間の通信を示しています。

Diagram that shows the communication between user-mode and kernel-mode components in a computer system.

仮想アドレス領域