一般的に言えば、最近のOSには、カーネルモードとユーザーモードの違いがあります。カーネルにはより高い特権があり、そのモードで実行できるのは特殊なコードのみです。ハードウェアリソースへのアクセスは、通常、カーネルモードのドメインです。一方、ユーザーモードコードは、CPUがこれらのリソースにアクセスすることを防ぎます。
あなたが話しているOSはわかりませんが、本質的にあなたが話しているドライバーはこの特殊なコードです。ユーザーモードコードはリソースに直接アクセスできないため、ドライバーと通信する必要があります。
区別がなく、したがってすべてのコードがハードウェアリソースにアクセスできる、MS-DOSなどのより単純なまたは古いOSを検討する場合。しかし、これを可能にする最新の汎用OSは知りません。
これは、カーネルモデルプログラミングのアイデアを説明するための非常に優れたウィキペディアの記事です。
Windows(および最新のオペレーティングシステム)では、「ユーザーモード」で実行されているコードと「カーネルモード」で実行されているコードに違いがあります。この章では、いくつかの違いを指摘します。まず、Intel CPUには、実行中のコードで使用可能な命令とメモリのタイプを指定するリングと呼ばれる動作モードがあります。4つのリングがあります:
- リング0(カーネルモードとも呼ばれます)は、すべてのリソースに完全にアクセスできます。これは、Windowsカーネルが実行されるモードです。
- リング1と2は、アクセスレベルに応じてカスタマイズできますが、仮想マシンが実行されていない限り、通常は使用されません。
- リング3(ユーザーモードとも呼ばれます)では、リソースへのアクセスが制限されています。
これは、すべてのプログラムがカーネルモードで実行されている場合、相互にメモリを上書きし、クラッシュしたときにシステム全体を停止させる可能性があるためです。