このページの本文へ

基礎から覚える 最新OSのアーキテクチャー 第4回

Windowsを動かすデバイスドライバーの仕組み 前編

2011年09月15日 12時00分更新

文● 塩田紳二

  • この記事をはてなブックマークに追加
  • 本文印刷

 こうした構造は、現在のハードウェアではごく普通であり、そのためデバイスドライバーを何段も重ねて処理させる「ドライバースタック」、あるいは「レイヤードドライバー」という仕組みが導入されている(図3)。

図3 USBドライバーのレイヤー構成例

 これは、あるデバイスに必要なドライバーを連続して実行させるような仕組みになっており、キーボードを読み出したいのなら、前記のような順番でドライバーを実行して、接続しているデバイスへとコマンドを送ったり、データを読み書きする。

 全体をひとつのドライバーにしてしまわずに、レイヤー構成に分けるのは、個別のデバイスは変更される可能性もあるからだ。例えばUSBの場合、現時点ではUSB 2.0ホストとUSB 3.0ホストがあり、同じUSBでも違うコントローラーを使ってアクセスしなければならない。レイヤー状の構成にしておけば、接続先によってUSBホスト部分は2.0か3.0ドライバーを変えるかわりに、他の部分は同じドライバーが利用できるようになる。

 また、同じFATファイルシステムを使うストレージでも、USB接続のHDDもあれば、SATA接続やIEEE1394接続という可能性もある。ドライバーをレイヤー状にしておき、実際の接続に合わせてドライバースタックを構成することで、さまざまな接続やデバイスの組み合わせに対処できるようになるわけだ。

 実際には、このドライバースタックに含まれるドライバーは、前述のクラスドライバーとミニポートドライバーである。どちらもレイヤー状に積み重なるように、一連のドライバーのつながりとして動作するようになっている。

層構造のドライバーを動かす仕組み
DDIとIRP

 こうしたレイヤー状のドライバーのつながりを実現するためには、デバイスドライバーの被制御側(ドライバー自体を制御するインターフェース、OS側)と、ドライバーの制御側(デバイス側、下の層を制御するためのインターフェース側)がお互いに、きちんと接続できるようになっていなければならない。ちょうどブロック玩具で差し込む側と差し込まれる側の凹凸が、一致しているような感じだ。コネクターのオスメスのような関係と言ってもいい。このドライバー同士の接続の仕組みを、Windowsでは「DDI」(Device Driver Interface)と読んでいる。

 そして、統一的にドライバースタックを動かすためにWindowsが採用した仕組みが、「IRP」(I/O Request Packet)である。IRPはデバイスを制御するためのコマンドなどを格納する、ひとまとまりのデータだ。各ドライバー間でIRPの中身を解釈して実行していくことで、ドライバースタックを順次実行していく仕組みとなっている。

 イメージ的には、上流からパケットを渡されたらこれを処理して、下のドライバーに回すという感じだ。名前が「パケット」なので、このデータがドライバースタックという経路を流れていくようなイメージがあるが、実際にはIRPはコピーされたりはせず、メモリーのある場所から動くことはない。パケット内のデータを示すメモリーアドレスだけが次々と渡されていく。

 こうした処理を行なうのが、Windowsのカーネルモードで動作する「I/Oマネージャー」だ。またデバイス自体の管理は、「Plug&Playマネージャー」が担当している。デバイスが装着・着脱されたというイベントを受け取り、ドライバースタックがどうなるかを組み立てるのがその役目だ。

 Windowsのドライバーは、大きく3つに分類できる。ひとつはデバイスに対応して何らかの機能を実現しているドライバーで、これを「ファンクションドライバー」という。もうひとつは、デバイスが接続されるバス(例えばUSB)を管理するドライバーで、これは「バスドライバー」と呼ばれる。

 3つめは「フィルタードライバー」と呼ばれるもので、ドライバースタックの間に入り、ドライバースタックの動作を変更するためのドライバーである。例えば、Windowsの暗号化ファイルシステムは、通常のファイルフォーマットドライバーと記憶装置のファンクションドライバーの間に入り、ファイル内容の暗号化と復号化を処理する。フィルタードライバーという仕組みを使うことで、ドライバースタックにあとから機能を追加したり、変更することが可能になるわけだ。

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

最新記事

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン