6

ユーザー アプリケーションは、システム セキュリティのためのユーザー モードでのみ実行できることを知っています。逆に、ほとんどのドライバーはカーネル モードで実行され、I/O デバイスにアクセスします。それでも、一部のドライバーはユーザー モードで実行されますが、I/O デバイスへのアクセスは許可されています。そこで、次の質問があります。ドライバーとユーザー アプリケーションの主な違いは何ですか? 一部のドライバーのように、ユーザー アプリケーションに I/O デバイスへのアクセスを許可することはできませんか?

ありがとう。

4

1 に答える 1

5

まず、このリンクからのプレビュー:-

アプリケーションはユーザー モードで実行され、コア オペレーティング システム コンポーネントはカーネル モードで実行されます。多くのドライバーはカーネル モードで実行されますが、一部のドライバーはユーザー モードで実行されます。

ユーザー モード アプリケーションを起動すると、Windows (または任意の OS)によってアプリケーションのプロセスが作成されます。このプロセスにより、アプリケーションにプライベート仮想アドレス空間とプライベート ハンドル テーブルが提供されます。アプリケーションの仮想アドレス空間はプライベートであるため、あるアプリケーションが別のアプリケーションに属するデータを変更することはできません。

プライベートであることに加えて、ユーザー モード アプリケーションの仮想アドレス空間は制限されています。ユーザー モードで実行されているプロセッサは、オペレーティング システム用に予約されている仮想アドレスにアクセスできません。ユーザー モード アプリケーションの仮想アドレス空間を制限すると、アプリケーションがオペレーティング システムの重要なデータを変更したり、場合によっては破損したりするのを防ぐことができます。

カーネル モードで実行されるすべてのコードは、単一の仮想アドレス空間を共有します。これは、カーネル モード ドライバーが他のドライバーやオペレーティング システム自体から分離されていないことを意味します。カーネル モード ドライバーが誤って間違った仮想アドレスに書き込むと、オペレーティング システムまたは別のドライバーに属するデータが危険にさらされる可能性があります。

また、こちらのリンクから

ソフトウェア ドライバー

一部のドライバーは、ハードウェア デバイスにまったく関連付けられていません。たとえば、コア オペレーティング システムのデータ構造にアクセスできるツールを作成する必要があるとします。このデータ構造には、カーネル モードで実行されているコードだけがアクセスできます。これを行うには、ツールを 2 つのコンポーネントに分割します。最初のコンポーネントはユーザー モードで実行され、ユーザー インターフェイスを表示します。2 番目のコンポーネントはカーネル モードで実行され、コア オペレーティング システム データにアクセスできます。ユーザー モードで実行されるコンポーネントはアプリケーションと呼ばれ、カーネル モードで実行されるコンポーネントはソフトウェア ドライバーと呼ばれます。ソフトウェア ドライバーは、ハードウェア デバイスに関連付けられていません。

また、ソフトウェア drivers() は常にカーネル モードで実行されます。ソフトウェア ドライバーを作成する主な理由は、カーネル モードでのみ使用できる保護されたデータにアクセスすることです。ただし、デバイス ドライバーは常にカーネル モードのデータとリソースにアクセスする必要はありません。そのため、一部のデバイス ドライバーはユーザー モードで実行されます。


ドライバーとユーザー アプリケーションの主な違いは何ですか?

潜水艦と船の違いと同じです。ドライバーは、ハードウェアに依存し、オペレーティング システムに固有です。これらは通常、必要な非同期時間依存ハードウェア インターフェイスに必要な割り込み処理を提供します。したがって、それらのほとんどすべてがカーネル モードで実行されます。一方、2 番目のパラグラフで指定されているように、アプリケーションが重要な OS データを損傷するのを防ぐために、ユーザー アプリケーションはユーザー空間で実行するようにバインドされています。

また、すべてのドライバーがデバイスと直接通信するわけではありません。特定の I/O 要求 (デバイスからのデータの読み取りなど) の場合、多くの場合、要求に参加する複数のドライバーがスタックに階層化されています。デバイスと直接通信するスタック内の 1 つのドライバーは、ファンクション ドライバーと呼ばれます。補助処理を行うドライバーをフィルタードライバーと呼びます。

一部のドライバーのように、ユーザー アプリケーションに I/O デバイスへのアクセスを許可することはできませんか?

アプリケーションはオペレーティング システムによって実装された関数を呼び出し、オペレーティング システムはドライバーによって実装された関数を呼び出します。ドライバーは、デバイス ハードウェアと通信してデータを取得する方法を認識しています。ドライバーはデバイスからデータを取得した後、そのデータをオペレーティング システムに返し、オペレーティング システムはそのデータをアプリケーションに返します。

アプリケーションは、デバイス ドライバー (OS ではなく) によって提供される API/インターフェイスを介して IO デバイスに接続します。OS は、ほとんどのハードウェア/ソフトウェアの相互作用を処理します。ハードウェア ベンダーは、OS が特定のハードウェアを制御できるようにする「プラグイン/モジュール/ドライバー」を作成します。したがって、OS によって提供されるインターフェイスを使用して、IO デバイスにアクセスするアプリケーションを作成できます。

したがって、デバイスドライバーはハードウェアと通信できる低レベル言語で記述されているため、階層の下のすべてのドライバーがデバイスにアクセスするため、ドライバーの助けなしにユーザーアプリケーションがハードウェアに直接アクセスすることはできません。高級言語で書かれています。

また、この回答を確認して、さまざまな OS のドライバーのアドレス空間について理解を深めてください。

于 2015-07-12T17:41:56.900 に答える