■Windows XPでは,「Windows Driver Model」というデバイス・ドライバの仕組みが採用されている。この仕組みは,2006年末に登場する予定の「Windows Vista」で一新される予定だ。
■Windowsにはなぜ,デバイス・ドライバのような仕組みが必要なのだろうか。また,マイクロソフトはなぜVistaでドライバの仕組みを一新するのか。Windowsのデバイス・ドライバの歴史を紐解きながら,その詳しい仕組みを解説する。
最終回となる今回は,デバイス・ドライバを取り上げる。Windowsのデバイス・ドライバについては,2006年末に登場予定のWindows Vistaで仕様が変更される。
Windowsのデバイス・ドライバの仕様は,過去にも大きく変更されたことがあった。1996年に発表された「Win32 Driver Model」である。Windowsのドライバを統一しようとするこの仕組みは,紆余曲折の末「Windows Driver Model」へと変更された。基本的な構造は現在のWindows XPでも変わっていない。
マイクロソフトは,なぜWindows Vistaでデバイス・ドライバの仕様を変更するのだろうか。そもそも,なぜデバイス・ドライバというソフトがWindowsに必要なのだろうか。今回は,Windowsのデバイス・ドライバの歴史を紐解きながら,その詳しい仕組みを解説する。
OSとデバイスを駆動するソフトを切り離す
パソコンに詳しい人なら,初心者から「デバイス・ドライバって何?」と聞かれたら,「OSとハードウエアの間に入るプログラムのことだ」というような答えを返すだろう。「ハードウエア」のことを「デバイス」と呼び,そのデバイスを「動かす」つまり「ドライブ」するから「デバイス・ドライバ」なのだが,実際の詳しい仕組みとなると難しい。そもそも「ハードウエア」といってもその範囲は広いし,なぜデバイス・ドライバが必要なのかはWindowsがデバイスを制御する仕組みを知らなければ分からない。
今回取り上げる「デバイス」は,ディスプレイやプリンタ,デイスク装置など,コンピュータに後から追加するハードウエアを指している。これらのデバイスを動かすには,先ほどの「ドライバ」というソフトが必要になる。
![]() △ 図をクリックすると拡大されます |
図1●新しいハードウエアの追加を容易にするデバイス・ドライバ |
![]() △ 図をクリックすると拡大されます |
図2●Windows 95における仮想デバイス・ドライバの仕組み |
「OSとデバイスを駆動するソフトを切り離す」という仕組みは,MS-DOSのときからあった。しかし,マルチタスク処理が必要なWindowsでは,MS-DOSのようなドライバの作り方では動作しない。そこで「仮想デバイス・ドライバ」という仕組みに変更された。仮想デバイス・ドライバはWindows 3.1/9xにおいて,複数のプログラムが1つのデバイスを共有できるように調整する役割を担う。
この機能は,CPUが備えている仮想86モードのI/Oトラップ機構を利用して実装されている。この仕組みによって,プログラムのデバイスへのアクセスを仮想デバイス・ドライバが横取りできる。例えば,Windows 95には「VMM32.VXD」という仮想デバイス・ドライバが実装されている。これは,各ハードウエアの仮想デバイス・ドライバをロードし統合管理する(図2)。
図2はWindows 95を例にしているが,Windows 3.1では「WIN386.EXE」が,仮想デバイス・ドライバを統合管理していた。どちらにしても「仮想デバイス・ドライバ」によって,複数のプログラムが同じデバイスを共有できるようになった。ただここで重要なのは「マルチタスクが可能になった」ことではなく,「デバイス・ドライバを管理するデバイス・ドライバ」が登場した点にある。この「複数のドライバを組み合わせる」という手法は,次に登場する「WDM」で,非常に重要な意味を持つことになる。
Windows 9xとWindows NTのドライバを統合するWDM
Windows 95では仮想デバイス・ドライバを使って,デバイスをマルチタスク環境で利用できるようになった。しかし当時は,MS-DOSとの互換性を重視して16ビット部分を残していたWindows 9xと,完全な32ビットOSのWindows NTという2種類のWindowsがあり,デバイス・ドライバはこれら2つのWindowsの間で互換性がなかった。信頼性や可用性に優れる,完全な32ビットのWindows NTを普及させたいマイクロソフトは,Windows 95によってアプリケーションを32ビットに移行させ,アプリケーションのWindows NT対応化を進めたが,デバイス・ドライバのWindows NT対応はなかなか進まなかった。
そこで,Windows 9xとWindows NTのデバイス・ドライバの統一規格である「Win32 Driver Model」が発表された。
ただ実際には,目標としていたWindows NTとWindows 9xのデバイス・ドライバを,マシン語レベルで完全に統一することはできなかった。これは今でもWindows 9x用,Windows 2000/XP用に,それぞれドライバが提供されていることからも分かる。結局マイクロソフトは「WDM」を,いつしか「Windows Driver Model」と改め,ソース・コード・レベルでの互換性へと内容を変更してしまった。
クラス・ドライバとミニ・ドライバを組み合わせる
![]() △ 図をクリックすると拡大されます |
図3●WMDの仕組み |
さらに,USBのように機器を階層構造で管理するデバイスの場合には,「バス・クラス・ドライバ」や「バス・ミニ・ドライバ」と呼ぶドライバが存在する。バス・ドライバは,PCIやUSBのように,ほかのデバイスを接続するためのドライバである。
このような階層構造を持つデバイス・ドライバで重要なことは,下位のミニ・ドライバを上位のクラス・ドライバが抽象化している点だ。これはいわゆる「オブジェクト指向」の考え方である。上位ドライバは抽象的,汎用的な要求を処理し,具体的な処理は下位のドライバに任せる。このような構造を採っているため,さらに上位に位置するアプリケーションからは,物理的な構造を全く意識せずに,データの読み書きを命令できるのである。