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