このページの本文へ

前へ 1 2 3 4 次へ

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

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

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

文● 塩田紳二

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

ドライバースタックはどうやってできる?

 デバイスをアクセスしようとしたときに、必要となるドライバーはどうやって決まるのだろうか?

 例えば、USBデバイスがパソコンに装着された場合を考えてみよう。デバイスが装着されたことはUSBコントローラーが検出して、これをWindows側に通知する。この時点で、追加されたデバイスにどうやってアクセスするかが確定する。

 これは、USBインターフェースそのもの(例えばExpressカードタイプのUSB 3.0インターフェース)であっても事情は同じで、デバイスが装着されたことが、PCI Express側(ソフトウェア上はPCIとほぼ同じ)から通知されるだけで、接続されたUSB 3.0のコントローラーにどうアクセスするのかは、この時点で決まっている。

 そこでWindowsは、新たに接続されたデバイスのためにデバイススタックを構成する。このときに、必要に応じてドライバーがインストールされる。このあたりの処理はPlug&Playマネージャーの担当だ。デバイスドライバーがロードされれば、デバイスドライバー内部の初期化ルーチンが必要な設定をして、内部にある処理関数のアドレスなどをOSに登録していく。

 デバイススタックがどう構成されているのかという情報は、IRPのヘッダ部分に登録されている。IRPが作られると、I/Oマネージャーがヘッダを見ながら、必要なドライバーを順次呼び出していく(図4)。

デバイスが接続されてからドライバーが構成され、使えるようになるまでの手順

カーネルモードドライバーと
ユーザーモードドライバー

 Windowsのドライバーには、大きく「カーネルモードドライバー」と「ユーザーモードドライバー」がある。なぜ2種類あるのかというと、カーネルモードではプログラム上の小さなミスが、システム全体のクラッシュを引き起こす可能性があるからだ。そのためカーネルモードで動作させる必要がないなら、デバイスドライバーであってもユーザーモード側で動作させたほうが安全である。

 ただしユーザーモード側のドライバーは、カーネルモード側に比べると処理効率が悪くなる。ユーザーモード側は、メモリーアドレスが仮想アドレスであり、必ずしも確保しているメモリーが物理メモリー上にない可能性があること。またスケジューリングにより、必ずしも一定時間内に処理が完了するとは限らない可能性があることなどが原因だ。

 そのため、Windows 2000のときに作られたWDM(Windows Driver Model)では、仕組みとしてはユーザーモードドライバーを作れたが、実際にはカーネルモードドライバーのみだっだ。というのも、作成に必要なサンプルやドキュメントが未整備であったり、「何をカーネルモードドライバーとすべきか」という指針もなかったからである。

 また、Windowsでのデバイスドライバーは、カーネルのみが実行可能な機能を利用するための仕組みとしても利用されてきたという経緯もあり、カーネルモードドライバーのみが作られる原因ともなった。例えばHDD上のマスターブートレコード(MBR)へのアクセスするためには、カーネルモードからしか利用できない領域を読み出す必要があるが、そのために専用のドライバーが作られるなどしていた。

 実際にマイクロソフトが発行していた技術誌「Microsoft System Journal」にも、そのような記事が掲載されていたくらいで、「カーネル機能を使うための方法としてのデバイスドライバー」という使われ方は、かなり頻繁に行なわれていたようだ。

前へ 1 2 3 4 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

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

ピックアップ

ASCII.jp RSS2.0 配信中

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