デバイスドライバ

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

コンピューティングでは、デバイスドライバーは、コンピューターまたはオートマトンに接続されている特定のタイプのデバイスを操作または制御するコンピュータープログラムです。[1]ドライバーは、ハードウェアデバイスへのソフトウェアインターフェイスを提供し、オペレーティングシステムやその他のコンピュータープログラムが、使用されているハードウェアに関する正確な詳細を知る必要なしにハードウェア機能にアクセスできるようにします。

ドライバーは、ハードウェアが接続するコンピューターバスまたは通信サブシステムを介してデバイスと通信します。呼び出し元のプログラムがドライバーでルーチンを呼び出すと、ドライバーはデバイスにコマンドを発行します(デバイスを駆動します)。デバイスがデータをドライバーに送り返すと、ドライバーは元の呼び出し側プログラムのルーチンを呼び出すことができます。

ドライバーはハードウェアに依存し、オペレーティングシステムに固有です。これらは通常、必要な非同期の時間依存ハードウェアインターフェイスに必要な割り込み処理を提供します。[2]

目的

デバイスドライバーの主な目的は、ハードウェアデバイスと、それを使用するアプリケーションまたはオペレーティングシステムとの間のトランスレーターとして機能することにより、抽象化を提供することです。[1] プログラマーは、エンドユーザーが使用している特定のハードウェアに関係なく、より高レベルのアプリケーションコードを記述できます。たとえば、シリアルポートと対話するための高レベルのアプリケーションは、単に「データの送信」と「データの受信」の2つの機能を備えている場合があります。下位レベルでは、これらの機能を実装するデバイスドライバーは、ユーザーのコンピューターにインストールされている特定のシリアルポートコントローラーと通信します。16550 UARTを制御するために必要なコマンドは、 FTDIを制御するために必要なコマンドとは大きく異なります。シリアルポートコンバーターですが、各ハードウェア固有のデバイスドライバーは、これらの詳細を同じ(または同様の)ソフトウェアインターフェイスに 抽象化します。

開発

デバイスドライバーを作成するには、特定のプラットフォーム機能でハードウェアとソフトウェアがどのように機能するかを深く理解する必要があります。ドライバーは動作するためにハードウェア機能への低レベルのアクセスを必要とするため、ドライバーは通常、特権の高い環境で動作し、問題が発生した場合にシステムの動作上の問題を引き起こす可能性があります。対照的に、最新のオペレーティングシステム上のほとんどのユーザーレベルのソフトウェアは、システムの他の部分に大きな影響を与えることなく停止できます。ユーザーモードで実行しているドライバーでさえ、デバイスが誤ってプログラムされている場合、システムをクラッシュさせる可能性があります。これらの要因により、問題の診断がより困難で危険になります。[3]

したがって、ドライバーを作成する作業は、通常、ハードウェア開発会社で働くソフトウェアエンジニアまたはコンピューターエンジニアに委ねられます。これは、ハードウェアの設計について、ほとんどの部外者よりも優れた情報を持っているためです。さらに、クライアントがハードウェアを最適な方法で使用できることを保証することは、ハードウェアメーカーの利益のために伝統的に考えられていました。通常、論理デバイスドライバー(LDD)はオペレーティングシステムベンダーによって作成され、物理デバイスドライバー(PDD)はデバイスベンダーによって実装されます。ただし、近年、非ベンダーは、主に無料のオープンソースで使用するために、プロプライエタリデバイス用の多数のデバイスドライバーを作成しています。 オペレーティングシステムこのような場合、ハードウェアの製造元がデバイスの通信方法に関する情報を提供することが重要です。代わりに、この情報はリバースエンジニアリングによって学習できますが、これはソフトウェアよりもハードウェアの方がはるかに困難です。

Microsoftは、 Windows Driver Frameworks(WDF)と呼ばれる、ドライバー開発用の新しいフレームワークを作成することにより、デバイスドライバーの記述が不十分なために発生するシステムの不安定性を軽減しようと試みました。これには、特定の種類のドライバー(主に、デバイスと通信するためのメッセージベースのプロトコルを実装するドライバー)の開発をユーザーモードドライバーとして奨励するユーザーモードドライバーフレームワーク(UMDF)が含まれます。このようなドライバが誤動作しても、システムが不安定になることはありません。カーネルモードドライバーフレームワーク(KMDF)モデルは、カーネルモードデバイスドライバーの開発を引き続き許可しますが、I / O操作のキャンセル、電源管理、プラグアンドプレイデバイスのサポートなど、問題を引き起こすことが知られている機能の標準実装を提供しようとします。

Appleには、 I / Oキットと呼ばれる macOSでドライバを開発するためのオープンソースフレームワークがあります。

Linux環境では、プログラマーは、カーネルの一部として、個別にロード可能なモジュールとして、またはユーザーモードドライバーとして(USBデバイスなどのカーネルインターフェイスが存在する特定のタイプのデバイスの場合)、デバイスドライバーを構築できます。Makedevには、ttyS(ターミナル)、lp(パラレルポート)、hd(ディスク)、ループ、サウンド(ミキサーシーケンサーdsp、オーディオなど)を含むLinuxのデバイスのリストが含まれています。[4]

Microsoft Windows.sysファイルおよびLinux.koファイルには、ロード可能なデバイスドライバーを含めることができますロード可能なデバイスドライバの利点は、必要な場合にのみロードしてからアンロードできるため、カーネルメモリを節約できることです。

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

特に最新のMicrosoftWindowsプラットフォーム上のデバイスドライバーは、カーネルモードx86 CPUではリング0)またはユーザーモード(x86 CPUではリング3)で実行できます。[5]ドライバーをユーザーモードで実行する主な利点は、安定性が向上することです。これは、ユーザーモードのデバイスドライバーの記述が不十分な場合、カーネルメモリを上書きしてシステムをクラッシュさせることができないためです。[6]一方、ユーザー/カーネルモードの遷移は通常、かなりのパフォーマンスオーバーヘッドを課すため、低遅延ネットワークにはカーネルモードドライバーが推奨されます。

カーネルスペースには、システムコールを使用することによってのみユーザーモジュールからアクセスできます。UNIXシェルやその他のGUIベースのアプリケーションなどのエンドユーザープログラムは、ユーザースペースの一部です。これらのアプリケーションは、カーネルがサポートする機能を介してハードウェアと対話します。

アプリケーション

最新のハードウェアとオペレーティングシステムは多様であるため、ドライバーはさまざまな環境で動作します。[7]ドライバーは以下とインターフェースすることができます:

デバイスドライバーの一般的な抽象化レベルは次のとおりです。

  • ハードウェアの場合:
    • 直接インターフェース
    • デバイス制御レジスタへの書き込みまたはデバイス制御レジスタからの読み取り
    • より高いレベルのインターフェース(ビデオBIOSなど)を使用する
    • 別の低レベルのデバイスドライバーを使用する(例:ディスクドライバーを使用するファイルシステムドライバー)
    • まったく異なることをしながら、ハードウェアでの作業をシミュレートする[8]
  • ソフトウェアの場合:
    • オペレーティングシステムがハードウェアリソースに直接アクセスできるようにする
    • プリミティブのみを実装する
    • 非ドライバーソフトウェア(TWAINなど)のインターフェイスの実装
    • 言語の実装、場合によっては非常に高レベル(PostScriptなど)

したがって、特定のハードウェアに適切なデバイスドライバーを選択してインストールすることは、多くの場合、コンピューターシステム構成の重要なコンポーネントです。[9]

仮想デバイスドライバー

仮想デバイスドライバーは、デバイスドライバーの特定のバリアントを表します。これらは、特に仮想化環境で、たとえばDOSプログラムがMicrosoft Windowsコンピューターで実行されている場合、またはゲストオペレーティングシステムがたとえばXenホストで実行されている場合に、ハードウェアデバイスをエミュレートするために使用されます。ゲストオペレーティングシステムがハードウェアと対話できるようにする代わりに、仮想デバイスドライバーは反対の役割を果たし、ハードウェアの一部をエミュレートするため、ゲストオペレーティングシステムとそのドライバーは仮想マシン内で実行されます。実際のハードウェアにアクセスしているように見せかけることができます。ゲストオペレーティングシステムによるハードウェアへのアクセスの試行は、たとえば関数呼び出しとして、ホストオペレーティングシステムの仮想デバイスドライバーにルーティングされ ます仮想デバイスドライバーは、割り込みなどのシミュレートされたプロセッサーレベルのイベントを仮想マシンに送信することもできます。

仮想デバイスは、仮想化されていない環境でも動作する場合があります。たとえば、仮想ネットワークアダプタ仮想プライベートネットワークで使用され、仮想ディスクデバイスはiSCSIで使用されます。仮想デバイスドライバーの良い例は、DaemonToolsです。

VxDVLM 、VDDなど、仮想デバイスドライバーにはいくつかのバリエーションがあります

オープンソースドライバー

一般的に使用されるデバイスドライバの Solarisの説明:

  • fas:高速/ワイドSCSIコントローラー
  • hme:高速(10/100 Mbit / s)イーサネット
  • isp:差動SCSIコントローラーとSunSwiftカード
  • glm:(Gigabaud Link Module [12])UltraSCSIコントローラー
  • scsi:Small Computer Serial Interface(SCSI)デバイス
  • sf:soc +またはソーシャルファイバーチャネルアービトレートループ(FCAL)
  • soc:SPARCストレージアレイ(SSA)コントローラーと制御デバイス
  • ソーシャル:FCAL用シリアル光コントローラー(soc +)

API

識別子

PCIバスまたはUSB上のデバイスは、それぞれ4つの16進数で構成される2つのIDによって識別されます。ベンダーIDは、デバイスのベンダーを識別します。デバイスIDは、そのメーカー/ベンダーの特定のデバイスを識別します。

PCIデバイスには、多くの場合、デバイスのメインチップのIDペアと、ベンダーを識別するサブシステムIDペアがあり、チップの製造元とは異なる場合があります。

も参照してください

参考文献

  1. ^ a b 「すべてのデバイスドライバとは何ですか?」WhatIs.comTechTarget。2021年2月13日にオリジナルからアーカイブされました2018年3月19日取得
  2. ^ EMC Education Services(2010)。情報の保存と管理:デジタル情報の保存、管理、保護ジョン・ワイリー&サンズ。ISBN 97804706183322021-02-13にオリジナルからアーカイブされました2020年11月10日取得
  3. ^ バーク、ティモシー(1995)。デバイスドライバーの作成:チュートリアルとリファレンスデジタルプレス。ISBN 97815555814112021-01-26にオリジナルからアーカイブされました2016年8月5日取得
  4. ^ 「MAKEDEV— Linuxコマンド—Unixコマンド」Linux.about.com。2009-09-11。2009年4月30日にオリジナルからアーカイブされまし2009年9月17日取得
  5. ^ 「ユーザーモードとカーネルモードのドライバー」Microsoft2003-03-01。2008-03-09にオリジナルからアーカイブされました2008年3月4日取得
  6. ^ 「ユーザーモードドライバーフレームワーク(UMDF)の紹介」Microsoft2006-10-10。2010年1月7日にオリジナルからアーカイブされました2008年3月4日取得
  7. ^ デボラ・モーリー(2009)。コンピュータ2009を理解する:今日と明日センゲージラーニング。ISBN 97803248301322021-06-09にオリジナルからアーカイブされました2020年11月10日取得
  8. ^ コンピュータ周辺機器およびインターフェーステクニカルパブリケーションプネ。2008年1月。5〜8ページ。ISBN 978-81843147482016年5月3日取得
  9. ^ 「デバイスドライバーとは何ですか?なぜそれらが必要なのですか?」drivers.com2015年4月17日。2016年11月20日のオリジナルからアーカイブ2018年3月19日取得
  10. ^ 「CCISS」SourceForge2010年。2010年8月21日のオリジナルからアーカイブ2010年8月11日取得ハードウェアRAID機能を提供するHP(以前のCompaq)スマートアレイコントローラー用のドライバー。
  11. ^ ラッセル、スティーブ; etal。(2003-10-21)。略語と頭字語IBM eserver xSeries440およびVMwareESXServeを使用したサーバーの統合IBMインターナショナル・テクニカル・サポート機構。p。207. ISBN 0-7384-2684-92011年8月14日取得[永久リンク切れ]
  12. ^ 「米国特許5969841-受信電力検出信号を備えたギガボーリンクモジュール」パテントストームLLC。2011年6月12日にオリジナルからアーカイブされました2009年9月8日取得ホストデバイスとシリアル転送メディア間で双方向のデータ転送を実行するために、改良されたギガボーリンクモジュール(GLM)が提供されています。
  13. ^ 「統一オーディオモデル(Windows CE5.0)」msdn.microsoft.com2017年6月22日にオリジナルからアーカイブされまし2016年9月19日取得
  14. ^ 米国のDell。「DCHドライバとは何ですか。なぜそれらについて知る必要があるのですか?| DellUS」www.dell.com 2020年10月29日取得
  15. ^ "dxd --dynaxドライバーフレームワーク:メインページ"dxd.dynax.at2016年5月29日にオリジナルからアーカイブされました2016年9月19日取得

外部リンク