Windowsのユーザーモードとカーネルモードとは

「カーネル」または「ユーザー」モードで実行されているアプリケーションについて聞いたことがあるかもしれません。それはすべて、オペレーティングシステムが仕事をするときにどのように機能するかにかかっています。それを理解すれば、ユーザーモードとカーネルモードの違いを簡単に理解できます。

オペレーティングシステムの機能を理解する(Does)

コンピューターは、ハードウェア、電子部品、およびソフトウェアで構成され、コンピューターコードはそのハードウェアによって実行されます。しかし、あまり明確ではないかもしれませんが、それらがどのように連携するかです。

コンピュータの最も重要な要素は、ビットまたは「2桁の数字」です。コンピュータが行うことはすべて(” Everything)、1と0で表されます。さまざま(Different)なコンピュータコンポーネントは、さまざまな方法でビットを表します。CPUでは、微細なトランジスタはオンまたはオフのいずれかで1と0を表します。これらのトランジスタは、論理ゲートと呼ばれる論理構造に配置されます。

電子コンピュータメモリでは、ビットは、特定のしきい値を超えるまたは下回る電荷を持つメモリセルによって表されます。機械式ハードドライブでは、ビットは回転するプラッターで測定された磁気変動として表されます。光ディスクでは、レーザー光を反射する、または反射しないピットとランドが同じ働きをします。 

バイナリコードの物理的表現がどのように実現されても、最終的にはすべてのコンシューマーコンピューターコンポーネントをこの生のマシンコードに減らすことができます。

では、コンピューターの人間に優しいインターフェースから、コンピューター自体の生の低レベルのプロセスにどのように移行するのでしょうか。そこでオペレーティングシステムが登場します。オペレーティングシステムは、コンピューターのハードウェアを直接制御します。 

このソフトウェアは、アプリケーション(したがってユーザー)が必要とするすべてのものを、CPUおよびその他のコンポーネントが理解できるマシンコード命令に変換します。このプロセスで最も重要なソフトウェアはカーネルです。

カーネルとは何ですか?

カーネルは、その名前が示すように、オペレーティングシステムのコアです。カーネルは、RAMに常駐し、コンピューターが実行するすべてのことを指示するソフトウェアです。何かがメモリに書き込まれるとき、実行を指示するのはカーネルです。

カーネルは、GPU(GPUs)やネットワークカードなどのハードウェアとのインターフェイス方法を知っていますが、コンピューター業界の一般的な標準に依存して、それらを最大限に活用する方法を知らない場合があります。

ここでハードウェアドライバーが機能します。ドライバーは、オペレーティングシステムに特定のコンポーネントの操作方法を指示します。そのため、たとえば、NvidiaAMDGPU(AMD GPUs)には異なるドライバーが必要です。

適切なドライバーを備えたカーネルは、データを壊滅的に破壊する可能性のあることを行うことを含め、コンピューター内の究極の権威です。

アプリケーションプログラミング(Application Programming Interfaces)インターフェイス(API(APIs))の役割(Role)

MS-DOSの時代には、ソフトウェア開発者はユーザーのハードウェア専用にソフトウェアを作成する必要がありました。MS-DOSシステムでのこの最も悪名高い例は、サウンドカードドライバでした。

特定のビデオゲームは、最も人気のあるカード(Sound BlasterAd-libGravis Ultrasoundなど)をサポートする必要があり、ほとんどのプレーヤーがカバーされることを期待しています。今日、 API(APIs)のおかげで、動作は大きく異なります。

MicrosoftDirectXはその良い例です。詳細な説明が必要な場合は、 DirectXとは何か、なぜそれが重要なのかを確認してください。(What Is DirectX and Why Is It Important?)ただし、知っておくべき最も重要なことは、APIは、ソフトウェア開発者が(API)GPUなどのコンポーネントからハードウェアリソースを要求するための標準的な方法を提供することです。さらに、ハードウェアメーカーは、同様に準拠するソフトウェアとの完全な互換性を確保するために、自社の製品がDirectXに準拠していることのみを確認する必要があります。(DirectX)

API(APIs)は、ソフトウェアアプリケーションと、ハードウェアドライバーを備えた低レベルカーネルとの間の変換レイヤーを提供します。はい、これにはわずかなパフォーマンスの低下が伴います。それでも、最近のコンピューターでは、これはごくわずかであり、さまざまな利点があり、最終的にユーザーモードとカーネルモードになります。

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

最新のオペレーティングシステムは、数百または数千の「プロセス」を同時に実行し、優先順位と計算能力の要件に基づいて、必要に応じて動的にCPU時間を与えます。(CPU)

アプリケーションを起動すると、プロセスが生成され、CPUはユーザーモードまたはカーネルモードのいずれかでプロセスを実行できます。

A Windows process running in user mode only has access to its own private virtual memory address space and handle table. The software uses these tables to store data in RAM and request resources. There’s no direct access to memory or other hardware, and it’s up to the operating system to map those virtual spaces to the actual hardware of the computer.

This is good for many reasons, but the most crucial benefit is that the application can’t overwrite or alter data outside its virtual memory address space. In addition, certain functions are off-limits to user-mode processes, mainly ones that could crash the system or destroy data.

プロセスが起動するか、カーネルモードに昇格すると、オペレーティングシステム用に予約されているものも含め、システムリソースに完全にアクセスできます。したがって、理論的には、オペレーティングシステムを適切に実行するために必要な重要なデータを上書きする可能性があります。

トラップと例外

これらの2つのモードは、 CPU(CPU)自体によってハードウェアレベルで適用されることを理解することが重要です。ユーザーモードで実行されているアプリケーションがカーネルモードアクセスを必要とする処理を実行しようとすると、「トラップ」または「例外」が生成されます。次に、オペレーティングシステムはアプリケーションを処理します。通常は、アプリケーションをシャットダウンしてクラッシュログを生成します。これにより、開発者は、問題が発生したときにメモリ内で何が起こったかを確認できます。

カーネルモード(Kernel Mode)危険性(Dangers):死(Death)ブルースクリーン(Blue Screen)

コンピュータの電源を切ったり再起動したりするブルースクリーンを経験したことがある場合は、カーネルモードのプロセスが原因である可能性(Death)あり(Blue Screen)ます。

カーネルモードのプロセスが想定外の処理を行うと、オペレーティングシステムはそのプロセスから回復できず、コンピューター全体が停止します。ユーザーモードのプロセスが失敗すると、アプリケーションのみがクラッシュし、残りのソフトウェアとオペレーティングシステムは問題なく続行できます。

これは、カーネルモードの特権を要求するAPIであるため、 (API)API(APIs)が重要な役割を果たす1つの領域です。ユーザーモードアプリケーションは、基本的に、カーネルモード特権を必要とするリクエストをAPIに委任します。

これが、カーネルモードが通常、コンピューターのハードウェアに直接アクセスする必要がある低レベルのシステムプロセスにのみ付与される理由です。通常、この特権は、ユーザーモードが提供できるよりも多くのパフォーマンスを必要とするため、プロセスに拡張されます。一部のCPU命令はカーネルモードでのみ機能するため、プロセスがこれらの関数を使用する必要がある場合は、昇格する必要があります。

ブルースクリーン(Blue Screen)オブデス(Death)で問題が発生した場合は、Windows10のブルースクリーンオブデストラブルシューティングガイドを(Blue Screen of Death Troubleshooting Guide for Windows 10)必ずお読みください。



About the author

私はユタ大学でコンピュータ エンジニアリングを卒業し、ソフトウェア開発と Windows 開発で 10 年以上の経験があります。PDF や Office ドキュメントを扱った経験があり、iOS や Android プラットフォームを使用してガジェットを作成した経験もあります。



Related posts