ベストアンサー1
とても簡単に:
デバイスドライバで最も重要なのは、カーネルスペースで実行され、カーネルと同じ権限を持つため、ハードウェアに直接アクセスできることです。アプリケーションは(通常)これを許可しません。
したがって、デバイスドライバは、一部のハードウェア(「デバイス」)へのアクセスを構成するカーネルの一部と考えることができます。
/proc/
アプリケーションは、より高い抽象化(ファイルシステムなど)から中間抽象化(ブロックデバイス)、非常に低いレベルの抽象化(または一部のファイル、デバイスの一部のファイル)/sys
までioctls
、/dev
さまざまなレベルでカーネルと対話できます。したがって、低レベルの相互作用は、カーネルが呼び出しをデバイスドライバにリダイレクトする非常に薄いレイヤを使用してデバイスドライバと非常に直接通信します。したがって、「アプリケーションはデバイスドライバと直接対話できず、オペレーティングシステムでのみ行うことができます」という事実でも偽でもあります。
また、図に示すように、カーネルには多くの抽象化層があります(「オペレーティングシステムから送信されたメッセージは同じで、デバイスドライバはハードウェアと通信するために別のメッセージを使用します)。受信しますが、他のUSBホストコントローラを使用することもできます。
したがって、状況ははるかに困難です。カーネルには階層とサブシステムがあり、ハードウェアと実際に通信するデバイスドライバはその階層の下部にあります。状況をさらに混乱させることは、デバイスドライバや他の層がモジュール(Linux用)の形で提供されることです。と入力すると、どのlsmod
モジュールがアクティブで、どのモジュールがどの他のモジュールを使用しているかを確認できます。
また、印刷は本当に悪い例です。ほとんどのプリンタ固有の処理は、デバイスドライバではなくユーザースペースで発生します。
Windows、Linux、およびMacOSはすべてこれらの原則に従いますが、詳細は大きく異なります。
これは役に立ちますか?
編集する:
今日、Linuxでの印刷は通常、次のように行われます。カップ。 Cupsには、さまざまなプリンタ用のドキュメントをレンダリングするためのさまざまなプログラムがあります。これらのプログラムはすべてファイル(文書はpdf / postscript / ...)をインポートし、プリンタが理解できる形式の他のファイルに変換します。これらの操作はすべてカーネルの外部で発生します。どちらも物理ハードウェアにアクセスする必要がないためです。ただファイルを読み書きするだけです。変換されたデータをプリンタに送信するときは、最後の部分だけがカーネルを使用します。その後、同じタイプのプリンタでも、ネットワーク、USB、シリアル接続など、さまざまなパスを使用できます。最後の部分は通常プリンタとは関係ありません。
したがって、Linuxは実際にはほとんどのプリンタにプリンタ固有のデバイスドライバを提供しません。 (複数のプリンタの場合は1つが必要な場合があります)。