User/Kernel mode
Windowsが動作するコンピュータのプロセッサには、User-modeとKernel-modeという2つの異なるモードがあります。
processorは、processor上でどのような種類のコードが実行されているかによって、2つのモードを切り替えています。アプリケーションはユーザーモードで実行され、コアオペレーティングシステムはカーネルモードで実行されます。多くのドライバはカーネルモードで実行されますが、一部のドライバはユーザーモードで実行される場合があります。
目次
User mode
ユーザーモードのアプリケーションを起動すると、Windowsはそのapplication processを作成します。このプロセスは、アプリケーションにprivate virtual address space とprivate handle tableを提供します。アプリケーションのvirtual address spaceはプライベートなので、あるアプリケーションが他のアプリケーションに属するデータを変更することはできません。各アプリケーションは分離して実行され、あるアプリケーションがクラッシュした場合、そのクラッシュはそのアプリケーションに限定されます。他のアプリケーションやオペレーティングシステムは、そのクラッシュの影響を受けません。
プライベートであることに加え、user-mode applicationのvirtual address spaceは制限されています。ユーザーモードで動作しているprocessorは、operating system用に予約されているvirtual addressesにアクセスすることができません。ユーザーモードアプリケーションの仮想アドレス空間を制限することで、アプリケーションが重要なオペレーティングシステムのデータを変更したり、場合によっては破損したりするのを防ぐことができます。
Kernel mode
Kernel modeで実行されるすべてのコードは、1つのvirtual address spaceを共有します。つまり、kernel-mode driver は、他のdriversやoperating system自体から分離されていないのです。kernel-mode driverが誤って間違った仮想アドレスに書き込んだ場合、オペレーティングシステムや他のドライバに属するデータが危険にさらされる可能性があります。カーネルモードドライバがクラッシュすると、オペレーティングシステム全体がクラッシュしてしまいます。