デバイスドライバとは? わかりやすく解説

デバイスドライバ

別名:ドライバ
【英】device driver

デバイスドライバとは、パソコン接続されている周辺装置device)をOSによって制御するために用意されプログラムのことである。

デバイスドライバが周辺機器を扱う仕様提供することによって、OSがあらかじめ周辺機器対応している必要がなくなる。周辺機器メーカーも、OS持っている機能限定されることなく製品開発することができる。

Windowsシリーズでは、Windows 3.1Windows 95Windows 98ではデバイスドライバの形式として主にVxD使われてきたが、Windows MeWindows 2000Windows XPではWDMが主に用いられている。

Windows 95以降は、周辺機器拡張ボードなどをパソコン接続した場合に、デバイスドライバのシステムへの組み込み設定自動的に行う「PnP」(Plug and Play機能搭載された。これによって一部周辺機器では敢えてデバイスドライバを導入する必要がなくなっている。

Windows Vistaでは、新たにシステム内に設けられた「Driver Store」と呼ばれる領域ドライバ用意しておき、周辺機器接続され時にDriver Store自動的に参照することで、確実にPnPによって周辺機器認識し制御できるうになる、とされている(2005年現在)。


デバイスドライバ

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/04/02 07:32 UTC 版)

デバイスドライバ: device driver)とは、コンピュータのデバイスハードウェア類。たとえばディスプレイプリンターイーサネットボード、拡張カード、その他周辺機器など)をオペレーティングシステム (OS) が制御するためのソフトウェアである。しばしば略してドライバあるいはドライバーと呼ばれる。

概要

デバイスドライバは、一般にバスや通信サブシステムを経由してそこに接続している周辺機器通信する。プログラムからドライバ内のルーチンを呼び出すと、ドライバが周辺機器に対してコマンドを発行する。周辺機器がドライバに対してデータを送り返してきたら、ドライバは元の呼び出したプログラム内のルーチンを呼び出すなどする。ドライバはハードウェアに依存し、OS毎に異なる。非同期なハードウェアインターフェイスに対応するため、割り込み処理を提供していることが多い。

ワープロソフト表計算ソフトなどのアプリケーションなどが、モニター、プリンター、ネットワークカードなどのデバイスを利用する際、OSが提供する共通化されたAPI(アプリケーション・プログラミング・インターフェイス)によってデバイスの機能を利用できるようにしておく。そして、抽象化されたAPIとハードウェアとの間の対応を、各ハードウェア用のデバイスドライバが受け持つ。

このような仕組みを採用することで、結果的にハードウェアの差異を吸収することができる。ソフトウェアプログラマは、特定のハードウェアに対応する細々としたソフトウェアを書かずとも、APIにあわせたアプリケーションプログラムを作ることで、作成したソフトウェアから不特定多数のハードウェアを利用することができる。

デバイスドライバは基本的にOSが使うソフトウェアであり、人間(コンピュータのユーザ)が直接使うソフトウェアのたぐいではないので、通常これ自体は人間用のユーザインタフェース画面は持たない。

なお近年は多くの機器がプラグアンドプレイに対応しており、機器を接続した直後に、標準ドライバが自動でインストールされるため、ユーザーがデバイスドライバの存在を意識することは少なくなってきている。ユーザが意識せずにドライバが組み込まれることを「ドライバレス」や「ドライバ不要」と呼ぶ場合もある[1]。(つまりこれは、ドライバがコンピュータ内に存在しないという意味では決してなく、あくまで以前のようにユーザが意識的に自分の手でドライバをインストールする手間は必要なくなった、というようなニュアンスで言っているにすぎない。)

標準ドライバ

広く共通化が進んだハードウェア(キーボードマウスUSBなど)では、OS内部に標準ドライバ(ジェネリックドライバ)が含まれている場合が多い。標準ドライバがサポートしないハードウェアに関しては、一般に、そのハードウェアを提供するメーカー(ベンダー)が、デバイスドライバを製品にフロッピーディスクCD-ROMで添付するか、あるいはインターネット上で配布する。

プリンターやグラフィックスカードなど一部の製品では、ベンダーの提供するドライバと標準ドライバの両方が用意されている場合がある。標準ドライバは最低限の機能を有する安定したドライバ、ベンダー提供のドライバはそのハードウェアのもつ機能を最大限利用できる最適化されたドライバである場合が多い。

APIとの関係

ドライバは、OSの一部として機能する。

ユーザープロセスでのAPI呼び出しをきっかけに、ドライバのコードが呼び出される。しかしドライバのコード自身は、ユーザープロセスではなく、カーネルコードの一部として動作する。

上で言う抽象化されたAPIとは、ほとんどの近代的なOSでは、open, read, write, ioctl, close というAPIに統一化されている。歴史的にいうと、これらのAPIは、記憶装置上のファイルにアクセスするためのAPIであるが、これがデバイスに対してもアクセス可能なように拡張された形で提供されているのが、一般的な作りである。すなわち、デバイスに対して、入出力の準備をするopen処理、デバイスからデータを入力するためのread処理、デバイスにデータを出力するためのwrite処理、デバイスに対して特別な処理を行うためのioctl処理、入出力処理を終えるためのclose処理、などである。

read, writeで実際に何が行われるかは、デバイスごとに異なる。例えば、プリンターに対してwriteを行うと印字されるが、サウンドデバイスに対してwriteを行うと、音が鳴る。マウスに対してreadを行うと、マウスの移動量が読み出せる。デバイスによっては、read, writeの片方にしか意味がない場合も多い。例えば、プリンターに対してreadを行うと、何も行われない場合がほとんどである[2]。read, writeでは何もせずに、実際の入出力をioctlだけで行う、という実装も良く用いられる。

内部構成

デバイスドライバの一般的な内部プログラムの構成は、アプリケーションのAPI呼び出しをきっかけに起動されるディスパッチコードと、ハードウェア割り込みにより起動される割り込み処理コード、の2つからなる。 割り込みに対してはさらに、純粋な割り込みルーチンと、OSのタスクスイッチングのタイミングで呼び出される後処理コードの、2段階に分けて実装する作りになっているケースが多い。これは、ハードウェア割り込みルーチンからは、可能な限り早く復帰して欲しいという要望があるため(そうしないと、他のハードウェア割り込みが入れなくなる)、多少時間がかかっても良い処理は、カーネル内で余裕ができたタイミングまで後回しにして実行しよう、という考えに基づいた構成手法である。(後処理コードは、Windowsでは、DPC英語版 (Deferred Procedure Call) 、Linuxでは、softirqあるいはTaskletと呼ばれる部分に相当する。また、過去のLinuxの実装では、Bottom Halfと呼ばれた部分である。)

最近[いつ?]のOSでは、ハードウェア同士で機能が似たものは、まとめてひとつのクラス(デバイスクラス)として扱う仕組みも存在する。この場合のドライバはドライバモジュールによる階層構造になっており、あるデバイスクラスで共通の処理をするクラスドライバ: Class Driver)はOS側で供給され、デバイスベンダーが各デバイス固有のミニドライバ: Minidriver)を作製する[3]。これにより、ドライバの開発工数を削減できるようになっている。上位/下位のドライバペアは他の名称としてポートドライバ/ミニポートドライバ、クラスドライバ/ミニクラスドライバなどと呼ばれる場合もある[4]

例えば、シリアルポートではXON/XOFF英語版のようにシリアルポート全般に共通する標準通信プロトコルに対応する必要がある。これはシリアルポートの論理層(クラスドライバ)で管理することになる。しかし、物理層(ミニドライバ)は特定のシリアルポートのチップと通信できなければならない。16550 UART というハードウェアはPL011[5]とは異なる。物理層はそういったチップ固有の差異に対応している。慣例的に、OSからの要求はまず論理層に対して行われる。そして論理層から物理層が呼び出され、OSの要求をハードウェアが理解できる形にして実行する。逆にハードウェア周辺機器がOSに返答しなければならないとき、まず物理層が対応して論理層を呼び出す。

デバイスドライバがクラスごとに共通化されることで、特定のハードウェアが独自に持っている機能が使えなくなる、あるいは使いにくくなるという欠点もある。新規技術開発で出現したハードウェアでは、その機能をどのようにOSが抽象化するか(クラス化するか)が決まるまで、ミニドライバの開発が待たされることもある。この場合は、ハードウェア毎にネイティブなデバイスドライバを、階層化されないドライバ(モノリシック ドライバ)として作成すれば、早期にドライバを提供することができる。

モノリシックドライバでは、ioctlに、そのハードウェア独自の機能を使うための仕掛けを組み入れることも可能であり、これをあやつる専用のアプリケーションを作れば、さらにきめ細かなハードウェア制御を実現することもできる。

デバイスドライバの内部構造は、OSごとに大きく異なる。

Windowsでは、Windows 98以降、様々なバージョンのWindowsごとにドライバを書く手間を省くために、Win32 ドライバモデル (WDM) アーキテクチャが導入された。 Windowsでは、ドライバの最下層にハードウェアを抽象化する層である Hardware Abstraction Layer (HAL) を設けて、プラットフォームによる違いを吸収する仕組みも存在する(386, 486, Pentium, Alpha, SPARC, IA-32, IA-64, EM64Tなどといった、CPUの違い、CPUアーキテクチャの進化を吸収する)。

Linuxでは、デバイスドライバをLinuxカーネルの一部として構築することもできるし、Linuxカーネルとは別のモジュールとして構築することもできる。MakedevにはLinuxでの周辺機器の一覧が含まれており、ttyS(端末)、lp(パラレルポート)、hd(ディスク)、loop(ループデバイス英語版)、sound(mixer英語版sequencerdsp、audio を含む)など様々な周辺機器が定義されている[6]

ロード可能なデバイスドライバは、Windowsでは ".sys"、Linuxでは ".ko" という拡張子のファイルになっている。この形のデバイスドライバは必要なときだけロードできるという利点があり、カーネルメモリの節約につながる。

以上は、ハードウェアに合わせて、ドライバを各種OSに対して用意するという方針である。これとは逆に、PDAなどの開発現場では、ハードウェアの仕様をできるだけ同じにすることでデバイスドライバの開発の手間を省く、という方針が採用されているケースもある。

開発

デバイスドライバ開発には、そのプラットフォームでのハードウェアとソフトウェアについて詳細まで理解している必要がある。ドライバは高い特権を与えられた環境で動作するので、間違った動作をすると破壊的な結果を招く。対照的に現代のオペレーティングシステムでのユーザーレベルのソフトウェアは、システムの他の部分に影響せずに停止することができる。ユーザーモードで動作するデバイスドライバであっても、バグがあればシステムをクラッシュさせることがある。そういった要因から、問題の診断も困難で危険なものとなる。

したがってドライバを書く仕事は、ハードウェア開発企業のソフトウェア技術者の仕事となることが多い。これは、部外者よりもハードウェア開発元の方がそのデザインに関する情報をより多く得られるためである。さらに言えば、デバイスドライバを提供することで製品を最適な方法で使えることを保証するという意味もある。一般に論理層(クラスドライバ)はOSベンダーが書き、物理層(ミニドライバ)は周辺機器ベンダーが書く。しかし最近では FLOSS OS で使用するためにベンダー以外の者がデバイスドライバを書くことも増えている。その場合、ハードウェア製造業者がその周辺機器のインターフェイス仕様について情報を提供することが重要となる。リバースエンジニアリングでそういった情報を解明することもできるが、対応ソフトウェアが全くない状態ではそれも難しくなる。

マイクロソフトは品質の低いデバイスドライバによってシステムの安定性が損なわれるのを防ぐため、ドライバ開発の新たなフレームワーク Windows Driver Foundation (WDF) を開発した。WDFには User-Mode Driver Framework (UMDF) と Kernel-Mode Driver Framework (KMDF) がある。UMDFはユーザーモードで動作するドライバ開発用のフレームワークで、UMDFを使ったユーザーモードのドライバにバグがあったとしても、システム安定性に影響を与えない。KMDFはカーネルモードで動作するデバイスドライバ開発を扱うが、I/O操作のキャンセル、パワーマネジメント、プラグ・アンド・プレイのサポートなど問題を起こしやすい機能の標準的実装を提供している。

ApplemacOS用のドライバ開発のオープンソース・フレームワーク I/O Kit英語版 を提供している。

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

Windowsでは、デバイスドライバはカーネルモードx86 CPU のリング0)またはユーザーモード(x86 CPU のリング3)で動作する[7]。ドライバをユーザーモードで動作させる最大の利点は安定性の向上であり、ユーザーモードのデバイスドライバは品質が悪くてもカーネルメモリを上書きしてシステムをクラッシュさせるということがない[8]。一方、カーネルモードからユーザーモードに移行させると性能が低下するので、性能が要求されるデバイスドライバはユーザーモードに移行できない。

ユーザーモードのモジュールはシステムコールを使わないとカーネル空間にアクセスできない。

仮想デバイスドライバ

仮想デバイスドライバはハードウェア周辺機器をエミュレートするもので、特に仮想化環境で使われる。例えば、Windowsの動作しているコンピュータ上でMS-DOSプログラムを実行する場合や、Xenなどの上で動作するゲストOSの場合である。ゲストOSがハードウェアと直接やりとりできるようにするのではなく、仮想デバイスドライバがハードウェアをエミュレートすることで、VM内で動作するゲストOS(とその中のデバイスドライバ)が実際のハードウェアにアクセスしているかのような幻影を生じさせる。ゲストOSがハードウェアにアクセスしようとしたとき、ホストOS内の仮想デバイスドライバがそれに対応して呼び出される。仮想デバイスドライバはまた、VM内に割り込みなどのプロセッサレベルのイベントを擬似的に発生させることができる。

仮想化環境以外でも仮想デバイスが使われることがある。例えば、Virtual Private Networkでは仮想ネットワークカードが使われ、iSCSIでは仮想ディスクデバイスが使われる。仮想デバイスドライバの好例としてDaemon Toolsなどがある。

オープンなドライバ

アプリケーションソフトウェアとは違い、デバイスドライバはハードウェアのアーキテクチャや仕様が公開されていなければ作成が困難であるため、オープンソース版のドライバ開発はクローズドソース版と比較して活発でなかったり機能や性能が劣ったりすることが多い。

デバイスドライバ関連のAPIや規格

Windows

脚注

  1. ^ Microsoft はUniversal Printをドライバレスと言っている [1]
  2. ^ 印刷タスクの進行状況、紙切れやインク量の状態が読める、という実装もあり得る。
  3. ^ "A Microsoft-provided class driver is an intermediate driver designed to provide a simple interface between a vendor-written minidriver and the operating system." Class Driver and Minidriver Definitions. Windows Hardware Developer.
  4. ^ "The different technology-specific driver models use a variety of names for the specific and general pieces of a driver pair. ... Here are some of ... pairs ... audio miniport driver, audio port driver ... battery miniclass driver, battery class driver" Minidrivers, Miniport drivers, and driver pairs. Windows Hardware Developer.
  5. ^ PrimeCell UART (PL011) Technical Reference Manual”. ARM. 2012年10月3日閲覧。
  6. ^ MAKEDEV — Linux Command — Unix Command”. Linux.about.com (2009年9月11日). 2009年9月17日閲覧。
  7. ^ User-mode vs. Kernel-mode Drivers”. マイクロソフト (2003年3月1日). 2008年3月4日閲覧。
  8. ^ Introduction to the User-Mode Driver Framework (UMDF)”. マイクロソフト (2006年10月10日). 2008年3月4日閲覧。
  9. ^ CCISS”. SourceForge (2010年). 2010年8月11日閲覧。 “Drivers for the HP (previously Compaq) Smart Array controllers which provide hardware RAID capability.”
  10. ^ Open Source Zone - AMD
  11. ^ Intel® Graphics for Linux* | 01.org
  12. ^ "Windows Drivers will run on all Window 10 variants" Windows Hardware Developers. Getting Started with Windows Drivers.
  13. ^ "Windows Universal Drivers" Windows Blogs. Windows Universal Drivers.
  14. ^ "The Windows Driver classification will extend and replace the current Universal Driver classification." Windows Hardware Developers. Getting Started with Windows Drivers.
  15. ^ "For a software driver, your two options are KMDF and the legacy Windows NT driver model." Choosing a driver model. Windows Hardware Developer.

関連項目

外部リンク


デバイスドライバ

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/01/02 15:48 UTC 版)

Spectre」の記事における「デバイスドライバ」の解説

NVIDIAGeForce GPUのデバイスドライバにSpectre脆弱性パッチ適用公開した。なお、Geforce GPUそのものには脆弱性確認されていないとしている。

※この「デバイスドライバ」の解説は、「Spectre」の解説の一部です。
「デバイスドライバ」を含む「Spectre」の記事については、「Spectre」の概要を参照ください。

ウィキペディア小見出し辞書の「デバイスドライバ」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ

デバイスドライバ

出典:『Wiktionary』 (2021/08/16 04:22 UTC 版)

名詞

デバイスドライバ

  1. (情報技術) 周辺機器など装置直接制御して、橋渡しのために、抽象化され取り決め従った機能提供するプログラム

語源

発音(?)

で↗ばいすどら↘いば



固有名詞の分類


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「デバイスドライバ」の関連用語

デバイスドライバのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



デバイスドライバのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
IT用語辞典バイナリIT用語辞典バイナリ
Copyright © 2005-2024 Weblio 辞書 IT用語辞典バイナリさくいん。 この記事は、IT用語辞典バイナリの【デバイスドライバ】の記事を利用しております。
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのデバイスドライバ (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのSpectre (改訂履歴)、オペレーティングシステム (改訂履歴)、RT-11 (改訂履歴)、Unified Extensible Firmware Interface (改訂履歴)、マイクロカーネル (改訂履歴)、Windows NT系 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。
Text is available under Creative Commons Attribution-ShareAlike (CC-BY-SA) and/or GNU Free Documentation License (GFDL).
Weblioに掲載されている「Wiktionary日本語版(日本語カテゴリ)」の記事は、Wiktionaryのデバイスドライバ (改訂履歴)の記事を複製、再配布したものにあたり、Creative Commons Attribution-ShareAlike (CC-BY-SA)もしくはGNU Free Documentation Licenseというライセンスの下で提供されています。

©2024 GRAS Group, Inc.RSS