Windows ストレージ ドライバーのアーキテクチャ

周辺ストレージ デバイスの Windows オペレーティング システム クラスとフィルター ドライバーは、クラスまたはフィルター ドライバーの上に階層化された中間または最上位レベルのドライバーと、システム提供のポート ドライバーの間のインターフェイスとして機能します。

ユーザー アプリケーションまたはカーネル コンポーネントからの I/O 要求は、I/O システム サービスと、ファイル システム ドライバーなどの 1 つ以上の中間または最上位レベルのドライバーを介して記憶域クラス ドライバーに到達します。 記憶域クラス ドライバーは、次の下位ドライバーに各 IRP を送信する前に、SCSI コマンド記述子ブロック (CDB) を含むシステム定義 SCSI 要求ブロック (SRB) を持つ IRP に取得する標準 IRP を変換します。 ストレージ ポート ドライバーは、クラス ドライバーからバス固有のコマンドに SRB を変換します。このコマンドは、I/O バス ドライバーと、場合によっては 1 つ以上のフィルター ドライバーを介して、ストレージ HBA に送信します。

次の図は、Windows ストレージ ドライバーの階層化アーキテクチャを示しています。

diagram illustrating the layered architecture of nt-based operating system storage drivers.

図の下部から、次に示す各種類のストレージ ドライバーについて説明します。

  1. ストレージ ポート ドライバーは、システム提供のディスク、テープ、CDROM、DVD、およびチェンジャー クラス ドライバーを含むすべての Windows 記憶域クラス ドライバーへのインターフェイスを定義します。 このポート/クラス インターフェイスは、各デバイスが接続されているホスト バス アダプターのアダプター固有の要件からクラス ドライバーを分離します。 ストレージ ポート ドライバーは、対応する HBA 上のデバイスのすべてのドライバーのバスへのアクセスも同期します。 このシステムは、SCSI、IDE、USB、IEEE 1394 アダプター用のストレージ ポート ドライバーを提供します。

    ストレージ ポート ドライバーは、次の上位ドライバー (記憶域クラス ドライバーまたは中間フィルター ドライバー) から SRB を受信し、次のように処理します。

    • SCSI または他のバスのストレージ ポート ドライバーは、対応するポート ドライバーに動的にリンクされ、特定の HBA のハードウェア固有のサポートを提供するオペレーティング システムに依存しない、HBA 固有 の Storport ミニポート ドライバー に、CDB を持つ SRB を渡します。 SCSI ミニポート ドライバーの実装の詳細については、Storport ミニポート ドライバーを参照してください。
    • 従来の IDE/ATAPI または IEEE 1394 バスのストレージ ポート ドライバーは、記憶域クラス ドライバーから受信した SRB を基になるアダプターで必要な形式に変換します。たとえば、バス固有の転送 プロトコルに従って CDB を再パッケージ化したり、別の形式に変換したりすることで、基になるバスの特性から上位レベルのドライバーを保護します。
  2. 上位または下位の 記憶域フィルター ドライバーは、システム提供の記憶域クラス ドライバーによって提供されないデバイス固有の機能をサポートします。 下位フィルター ストレージ ドライバーは、記憶域クラス ドライバーによって発行された SRB や IRP を監視し、次の下位ドライバー (ストレージ ポート ドライバーまたは別の記憶域フィルター ドライバー) に渡す前に、必要に応じて変更します。

    記憶域フィルター ドライバーの実装の詳細については、記憶域フィルター ドライバーを参照してください。

  3. 記憶域クラス ドライバーは、SCSI ポート/クラス インターフェイスを使用して、システムがストレージ ポート ドライバーを提供する任意のバスで、その種類のデバイスを制御します。 クラス ドライバーは、デバイスの特定のクラスに固有です。たとえば、あるクラス ドライバーは、サポートされている任意のバスですべての CD-ROM デバイスを実行でき、別のクラス ドライバーはすべてのディスク デバイスを制御できます。 記憶域クラス ドライバーは、ユーザー アプリケーションまたはストレージ スタック内の上位のドライバーからの I/O 要求を処理します。この要求は、デバイスが SCSI デバイスであるかのように、CDB を含む SRB をビルドし、次の下位ドライバー (ストレージ ポート ドライバーまたは中間フィルター ドライバー) に発行します。

    記憶域クラス ドライバーの実装は、上位レベルのドライバーに対して透過的です。 テープまたは中規模のチェンジャー デバイスのクラス ドライバーは、システム提供のクラス ドライバーにリンクするデバイス固有のミニクラス ドライバーとして実装されます。 ディスクや CD-ROM/DVD など、他のストレージ デバイス用のシステム提供のクラス ドライバーは、単一モノリシック ドライバーとして実装されます。

    記憶域クラス ドライバーの実装の詳細については、記憶域クラス ドライバーを参照してください。 テープまたはチェンジャー のミニクラス ドライバーの実装については、テープ ドライバーチェンジャー ドライバーをそれぞれ参照してください。

  4. 上位フィルター ストレージ ドライバーは、ストレージ スタック内の上位のユーザー アプリケーションとドライバーから IRP をインターセプトし、次の下位ドライバー (記憶域クラス ドライバーまたは別の記憶域フィルター ドライバー) に渡す前にそれらを変更する可能性があります。 フィルター ドライバーは、通常、基になるデバイスのパフォーマンスを監視します。

デバイスが接続されているバスの種類とそのストレージ ポート ドライバーの実装は、上位レベルのドライバーに対して透過的です。 ストレージ ポート ドライバーは、SCSI ポート ドライバーのように、IDE/ATAPI ポート ドライバーなど、単一の標準的なハードウェアを制御するモノリシック ドライバーとして、あるいは IEEE 1394 ポート ドライバーなど、別のドライバー スタックで必要な形式に SRB を変換するフィルター ドライバーとしてといったように、ポート/ミニポート ドライバーアーキテクチャに従って実装される場合があります。

システム提供の SCSI ポート ドライバーは、記憶域クラス ドライバーと、同じ種類の非 SCSI ストレージ デバイスを制御する SCSI ミニポート ドライバー間のインターフェイスとして機能することもできます。 たとえば、ドライバー ライターは、新しいディスク アレイ コントローラーのドライバーを記述する代わりに、システム SCSI ポート ドライバーにリンクし、それが提供するインターフェイスを使用する擬似 SCSI ミニポート ドライバーを記述することによって、かなりの設計、開発、およびデバッグ作業を保存できます。 このようなミニポート ドライバーは、デバイス固有のコマンドに着信 SCSI コマンドを変換する必要があります。 一方、システム提供のポートとクラス ドライバーは、初期化中のレジストリ アクセス、すべてのリソースとオブジェクトの割り当て、同期、ミニポートのデバイスの機能に合わせて要求された転送のプリサイズ、要求の再試行など、擬似 SCSI ミニポートの代わりに多くの必要な作業を処理します。

SRB の詳細については、「カーネル モード ドライバー アーキテクチャ リファレンス」を参照してください。 CDB に関するデバイス・タイプ固有の情報については、「INCITS SCSI-3 標準の適切なコマンド セット」を参照してください。