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

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

ユーザー モード

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

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

カーネル モード

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

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

コンピューター システム内のユーザー モード コンポーネントとカーネル モード コンポーネント間の通信を示す図。

仮想アドレス領域