ユーザー モードとカーネル モード
Windows を実行しているコンピューターのプロセッサには、ユーザー モードとカーネル モードという 2 つのモードがあります。2 つのモードの間で使うプロセッサのスイッチは、プロセッサ上で実行されているコードの種類によって異なります。アプリケーションはユーザー モードで、オペレーティング システムのコア コンポーネントはカーネル モードでそれぞれ実行されます。多くのドライバーがカーネル モードで実行される一方、ユーザー モードで実行されるドライバーもあります。
ユーザー モード アプリケーションを開始すると、Windows はアプリケーションに対するプロセスを生成します。このプロセスにより、アプリケーションにプライベート仮想アドレス領域とプライベート ハンドル テーブルが提供されます。アプリケーションの仮想アドレス領域はプライベートな空間であるため、あるアプリケーションから、別のアプリケーションに属するデータを変更することはできません。各アプリケーションは個別に実行されるため、あるアプリケーションがクラッシュしても、その影響は当該のアプリケーションだけに限定されます。別のアプリケーションやオペレーティング システムがクラッシュの影響を受けることはありません。
ユーザー モード アプリケーションの仮想アドレス領域には、プライベートであるという点以外にも制限があります。それは、ユーザー モードで実行されているプロセッサから、オペレーティング システムで予約された仮想アドレスにはアクセスできない点です。ユーザー モード アプリケーションの仮想アドレス領域を制限することにより、重要なオペレーティング システムのデータがアプリケーション側から変更されたり、損傷を受けたりするのを防止できます。
カーネル モードで実行されるコードはすべて、単一の仮想アドレス領域を共有します。つまり、カーネル モード ドライバーは、その他のドライバーやオペレーティング システム自体から独立していないということです。万が一、カーネル モード ドライバーが誤って仮想アドレスに書き込みを行った場合、オペレーティング システムや別のドライバーに属するデータが損傷を受けることがあります。カーネル モード ドライバーがクラッシュすると、オペレーティング システム全体がクラッシュします。
次の図は、ユーザー モードとカーネル モードのコンポーネント間のやり取りを表したものです。