「カーネル」モードまたは「ユーザー」モードで実行されるアプリケーションについて聞いたことがあるかもしれません。すべては、オペレーティング システムが仕事を行うときにどのように動作するかにかかっています。それを理解すると、ユーザー モードとカーネル モードの違いを簡単に理解できるようになります。
オペレーティング システムの機能を理解する
コンピュータは、ハードウェア、電子コンポーネント、およびそのハードウェアによって実行されるコンピュータ コードであるソフトウェアで構成されます。しかし、あまり明確になっていないのは、これらがどのように連携するかということです。
コンピュータの最も重要な要素はビット、つまり「2 進数」です。コンピューターの動作はすべて 1 と 0 で表されます。コンピューターのコンポーネントが異なれば、ビットの表現方法も異なります。 CPU では、微細なトランジスタがオンまたはオフになることで 1 と 0 を表します。これらのトランジスタは、論理ゲートと呼ばれる論理構造に配置されます。
電子コンピュータ メモリでは、ビットは特定のしきい値以上または以下の電荷を持つメモリ セルによって表されます。機械式ハードドライブでは、ビットは回転するプラッター上で測定される磁気の変動として表されます。光ディスクでは、レーザー光を反射するピットとランドが同じ役割を果たします。
バイナリ コードの物理的表現がどのように実現されるかに関係なく、最終的にはすべてのコンシューマ コンピュータ コンポーネントをこの生のマシン コードに縮小することができます。
では、人間に優しいコンピュータのインターフェイスから、コンピュータ自体の生の低レベルのプロセスに移行するにはどうすればよいでしょうか?ここでオペレーティング システムが登場します。オペレーティング システムはコンピュータのハードウェアを直接制御します。
このソフトウェアは、アプリケーション (したがってユーザー) が必要とするすべてのものを、CPU やその他のコンポーネントが理解できるマシンコード命令に変換します。このプロセスで最も重要なソフトウェアはカーネルです。
カーネルとは何ですか?
カーネルは、名前が示すように、オペレーティング システムの中核です。カーネルは ラム に常駐し、コンピュータのすべての動作を制御するソフトウェアです。何かがメモリに書き込まれるとき、実行を指示するのはカーネルです。
カーネルは、GPU やネットワーク カードなどのハードウェアとインターフェースする方法を知っていますが、コンピュータ業界の一般的な標準に依存して、それらを最大限に活用する方法を知らない可能性があります。.
ここではハードウェア ドライバーが関係します。ドライバーは、オペレーティング システムに特定のコンポーネントの操作方法を指示します。そのため、たとえば、Nvidia GPU と AMD GPU には異なるドライバーが必要になります。
適切なドライバーを備えたカーネルは、データを壊滅的に破壊する可能性のある処理を行うなど、コンピューター内の最終的な権限を持ちます。
アプリケーション プログラミング インターフェイス (API) の役割
MS-DOS の時代、ソフトウェア開発者はユーザーのハードウェア専用にソフトウェアを作成する必要がありました。 MS-DOS システムにおけるこの最も悪名高い例は、サウンド カード ドライバでした。
特定のビデオ ゲームでは、最も人気のあるカード (Sound Blaster、Ad-lib、Gravis Ultrasound など) をサポートする必要があり、ほとんどのプレイヤーがカバーされることが望まれます。現在では、API のおかげで、物事の仕組みが大きく異なります。
Microsoft DirectX はその良い例です。詳細な説明が必要な場合は、DirectX とは何ですか? なぜ重要ですか? を参照してください。ただし、知っておくべき最も重要なことは、API はソフトウェア開発者が GPU などのコンポーネントからハードウェア リソースを要求するための標準的な方法を提供しているということです。さらに、ハードウェア メーカーは、自社の製品が DirectX に準拠していることのみを確認し、同様に準拠しているソフトウェアとの完全な互換性を確保する必要があります。
API は、ソフトウェア アプリケーションとハードウェア ドライバーを備えた低レベル カーネルの間の変換レイヤーを提供します。はい、これには若干のパフォーマンスの低下が伴います。それでも、最新のコンピューターでは、これは無視できる程度であり、さまざまな利点があり、最終的にユーザー モードとカーネル モードに行き着きます。
ユーザー モードとカーネル モード
最新のオペレーティング システムは、数百または数千の「プロセス」を同時に実行し、優先順位と計算能力要件に基づいて必要に応じて CPU 時間を動的に与えます。
アプリケーションを起動するとプロセスが生成され、CPU はユーザー モードまたはカーネル モードでプロセスを実行できます。
ユーザー モードで実行されている Windows プロセスは、独自のプライベート仮想メモリ アドレス空間とハンドル テーブルにのみアクセスできます。ソフトウェアはこれらのテーブルを使用して RAM にデータを保存し、リソースを要求します。メモリやその他のハードウェアに直接アクセスすることはできません。これらの仮想空間をコンピュータの実際のハードウェアにマッピングするのはオペレーティング システム次第です。.
これには多くの理由がありますが、最も重要な利点は、アプリケーションが仮想メモリ アドレス空間外のデータを上書きしたり変更したりできないことです。さらに、特定の機能はユーザー モード プロセスに対して禁止されており、主にシステムのクラッシュやデータの破壊につながる可能性があります。
プロセスが起動されるか、カーネル モードに昇格されると、そのプロセスは、オペレーティング システム用に予約されているものも含め、システム リソースに完全にアクセスできるようになります。したがって、理論上は、オペレーティング システムが適切に実行するために必要な重要なデータが上書きされる可能性があります。
トラップと例外
これら 2 つのモードは CPU 自体によってハードウェア レベルで強制されることを理解することが重要です。ユーザー モードで実行されているアプリケーションがカーネル モード アクセスを必要とする何かを実行しようとすると、「トラップ」または「例外」が生成されます。その後、オペレーティング システムはアプリケーションを処理します。通常はアプリケーションをシャットダウンし、クラッシュ ログを生成します。これにより、開発者は、異常が発生したときにメモリ内で何が起こったかを確認できます。
カーネル モードの危険性: 死のブルー スクリーン
コンピューターの電源をオフにするか再起動を強制するブルー スクリーンを経験したことがある場合 (経験したことのない人はいないでしょうか)、カーネル モード プロセスが原因である可能性が十分にあります。
カーネル モードのプロセスが予期されていないことを実行すると、オペレーティング システムはそこから回復できず、コンピューター全体が停止します。ユーザーモード プロセスが異常終了した場合、クラッシュするのはアプリケーションだけであり、残りのソフトウェアとオペレーティング システムは問題なく動作し続けます。
これは API がカーネル モード権限を要求するため、API が重要な役割を果たす領域の 1 つです。ユーザーモード アプリケーションは基本的に、カーネル モード権限が必要なリクエストを API に委任します。
これが、カーネル モードが通常、コンピュータのハードウェアに直接アクセスする必要がある低レベルのシステム プロセスにのみ許可される理由です。通常、この権限はプロセスに拡張されます。これは、プロセスがユーザー モードで提供できる以上のパフォーマンスが必要となるためです。一部の CPU 命令はカーネル モードでのみ動作するため、プロセスでこれらの関数を使用する必要がある場合は、昇格する必要があります。
死のブルー スクリーンで問題が発生した場合は、Windows 10 のブルー スクリーン トラブルシューティング ガイド を必ずお読みください。.
.