デバイスドライバとは
デバイスドライバとは、画像ディスプレイモニター、プリンターやイーサネットボード、拡張カードやその他周辺機器など、パソコンに接続されているハードウェアなどをOSによって制御可能にするために用意された、ソフトウェアの事
例えば、
ワープロソフトや表計算ソフトなどのアプリケーションなどが、モニター、プリンター、ネットワークカードなどのデバイスを利用する際、OSが提供する共通化されたAPI(アプリケーション・プログラミング・インターフェイス)によってデバイスの機能を利用できるようにしておく事ができる。
その他にも、様々な物がある
- 標準ドライバ・・広く共通化が進んだハードウェア(キーボード、マウス、USBなど)では、OS内部に標準ドライバ(ジェネリックドライバ)が含まれている場合が多い
- APIとの関係・・ユーザープロセスでのAPI呼び出しをきっかけに、ドライバのコードが呼び出される。しかしドライバのコード自身は、ユーザープロセスではなく、カーネルコードの一部として動作する事ができる
- 内部構成・・ハードウェア割り込みルーチンからは、可能な限り早く復帰して欲しいという要望があるため(そうしないと、他のハードウェア割り込みが入れなくなる)、多少時間がかかっても良い処理は、カーネル内で余裕ができたタイミングまで後回しにして実行しよう、という考えに基づいた構成手法
- 開発・・対照的に現代のオペレーティングシステムでのユーザーレベルのソフトウェアは、システムの他の部分に影響せずに停止することができる。ユーザーモードで動作するデバイスドライバであっても、バグがあればシステムをクラッシュさせることがある。そういった要因から、問題の診断も困難で危険なものとなる。
- カーネルモードとユーザーモード・・ドライバをユーザーモードで動作させる最大の利点は安定性の向上であり、ユーザーモードのデバイスドライバは品質が悪くてもカーネルメモリを上書きしてシステムをクラッシュさせるということがない
- 仮想デバイスドライバ・・仮想デバイスドライバはハードウェア周辺機器をエミュレートするもので、特に仮想化環境で使われる
- オープンなドライバ・・アプリケーションソフトウェアとは違い、デバイスドライバはハードウェアのアーキテクチャや仕様が公開されていなければ作成が困難であるため、オープンソース版のドライバ開発はクローズドソース版と比較して活発でなかったり機能や性能が劣ったりすることが多い
例えば、こんな感じ
プリンター: CUPS
RAID: CCISS[6]
スキャナー: SANE(英語版)
ビデオ: Vidix(英語版)、ダイレクト・レンダリング・インフラストラクチャ
Linux用AMD Radeonグラフィックスドライバ [7]
Linux用インテルグラフィックスドライバ [8]
Linux用NVIDIAグラフィクスドライバnouveau
RAID: CCISS[6]
スキャナー: SANE(英語版)
ビデオ: Vidix(英語版)、ダイレクト・レンダリング・インフラストラクチャ
Linux用AMD Radeonグラフィックスドライバ [7]
Linux用インテルグラフィックスドライバ [8]
Linux用NVIDIAグラフィクスドライバnouveau
結構沢山ありますな!
Windows Driver Foundation (WDF)
Windows Driver Model (WDM)
Network Driver Interface Specification (NDIS) – 標準ネットワークカードドライバAPI
Advanced Linux Sound Architecture (ALSA) – Linuxのサウンドドライバの標準インターフェイス
Scanner Access Now Easy(英語版) (SANE) – イメージスキャナ用のパブリックドメインのインターフェイス
I/O Kit(英語版) – アップルのmacOS用デバイスドライバのためのオープンソースのフレームワーク
Installable File System(英語版) (IFS) – OS/2とWindows NTのファイルシステムAPI。Windows Driver Kitの一部
Open Data-Link Interface (ODI) – NDISと同様のネットワークカード用API
Uniform Driver Interface(英語版) (UDI) – クロスプラットフォームのドライバインターフェイス策定プロジェクト。WindowsやUNIXなどのOSの枠を越えて、複数のOSに対して共通のドライバを1本書けば、どのOSでも動作可能なようにする試み
Dynax Driver Framework (dxd) – マイクロソフトのKMDFとアップルのI/O Kitで共通のドライバを開発可能にするC++のオープンソース・フレームワーク
沢山あって申し訳ないですが、デバイスドライバは様々な物に役立出ている事が解った。