デバイスドライバをはじめ、デバイスにかかわるお困りごとの際はお気軽にお問い合わせください。
【 デバドラ講座3 : ドライバの種類 】
1.デバイスドライバの実体
デバイスドライバは、接続されたデバイスを制御し、アプリケーションと通信するソフトウェアです。インストールの際にはinfファイルと呼ばれるセットアップファイルが必要になります。infファイルが存在しない場合、ドライバファイルを規定の場所に置き、レジストリを自分で書き換える必要があります。
1-1.OSによるデバイスドライバファイルの違い
デバイスドライバはOSによってドライバファイルの拡張子が異なります。
ドライバファイル
.sys:システムファイル
接続されたデバイスを制御するデータが含まれており、これらのファイルがドライバです。
セットアップファイル
.inf:INFファイル
ドライバをインストールする際はこのセットアップファイルのデータを基にインストールを行います。INFファイルはドライバがインストールされた際に、”oemxx.inf”というファイル名に変更され、表1のセットアップファイル保存場所に保存されます。xxにはOSが連番で割り当てる数字が入ります。セットアップファイルには、アプリケーションソフトを組み込む際に必要となるデバイスの操作、動作制限のデータも保存されています。
1-2.デバイスドライバファイルはどこにあるか
デバイスドライバがどこにあるかWindows 8で、実際に確かめてみます。
OSによってドライバファイル、ドライバセットアップファイルの保存されている場所は異なります。[スタート]→[ファイル名を指定して実行]を開き、” %systemroot%\system32\drivers”とタイプするとドライバファイルが保存されたフォルダが開きます。” %systemroot%\inf”とタイプするとドライバセットアップファイルが保存されたフォルダが開きます。表1にドライバファイル、ドライバセットアップファイルの保存場所をOS別に示します。
OS | ドライバファイル | ドライバセットアップファイル |
---|---|---|
Windows 95/98/Me/XP以降 | ..\Windows\system32\drivers | ..\Windows\inf |
Windows NT | ..\WinNT\system32\drivers | |
Windows 2000 | ..\WinNT\system32\drivers | ..\WinNT\inf |
2.デバイスドライバの種類
デバイスドライバには大きく分けてクラスドライバとバスドライバの二つに分けられます。バスドライバはデバイスのインタフェース(接続口)によって分けられ、クラスドライバはデバイスの種類によって分けられます。例えば、キーボードはHID(Human Interface Device)クラスドライバを使用し、インタフェースによってUSBバスドライバ、PS/2バスドライバが使用されます。
例えば、デバイスにデータを書き込むとします。クラスドライバはファイルシステムの構成を理解しています。しかし、デバイスの操作方法は理解していないので、クラスドライバは適当なバスドライバを認識します。バスドライバは、コマンドを発行する方法を理解しています。バスドライバはデバイスにコマンドを伝えることができます。しかし、デバイスが特有の動作をする場合、バスドライバはその制御方法を理解していません。そこでバスドライバは適当なミニポートドライバにコマンドを渡します。ミニポートドライバはデバイス特有の動きを理解しているので、バスドライバから渡されたコマンドを実際にデバイスに伝え、ファイルを書き込みます。これらのドライバがどのような関係にあるか簡単に図3に示します。また、主なバスドライバを表2に示します。
バスドライバ名 | 機能 |
---|---|
ACPI(Advanced Configuration and Power Interface) | PCのACPI BIOSとやり取りし、システムのデバイスを列挙し、その電源使用を制御する |
PnPISA | プラグアンドプレイを使って構成できるISA(Industry Standard Architecture)デバイスの列挙と電源の制御を行う |
IEEE1394 | IEEE1394(Firewire)高速バスの列挙と制御を行う |
USB | USBバスの列挙と制御を行う |
SCSI CDROM/DVD |
ハードディスク、CD、及びDVDへのアクセスに使用する。 |
2-1.Plug and Play (PnP)
Plug and Play(PnP)とは、デバイスをPCに接続すると特別な操作を行わずにデバイスを使用できる機能です。デバイスが接続されると、OSは自動的にドライバをインストールします。OSはドライバをロードし、デバイスを有効に使える状態にします。
この一連の動作はOSが行うため、ユーザーにとってはデバイスを差し込むと使えるようになるという、単純で便利な機能です。
2-3. カーネルモードとユーザーモード
Windowsのシステムはカーネルモードとユーザーモードに分かれています。簡単に説明すると以下のような違いです。
- カーネルモード:OSの処理が動作するモード
- ユーザーモード:アプリケーション等を動かすユーザー寄りのモード
OSの大部分がカーネルモードで処理されています。ユーザーモードでは、1つ以上のアプリケーションが処理されています。ユーザーモードではプログラム同士、もしくはカーネルに対して悪影響を与えない様に、メモリへのアクセスが制限されています。カーネルモードでは必要な処理をすべて実行でき、すべてのメモリにアクセスすることが可能です。
デバイスドライバはカーネルモードで動くものと、ユーザーモードで動くものがあります。ユーザモードとカーネルモードについての詳しい説明は「デバドラ講座8」で行います。
3.デバイスとドライバ
3-1. デバイスとドライバの通信の基本
ドライバがデバイス(ハードウェア)と通信のやり取りをする際の処理の基本的なものを挙げます。詳しい説明は「デバドラ講座6」で行います。
デバイスレジスタ(I/Oレジスタ)
PCはデバイスと通信する際、操作の要求(コマンド)と状況を問い合わせる要求(ステータス要求)をデバイスに送信します。この要求に対して、デバイスはPCに結果を返すためデータを送信します。このようなデバイスとPCの通信の大部分はデバイスレジスタという記憶領域を通して行われます。
デバイスメモリ
実際はデバイスに存在するメモリが、PC上の通常のメモリとして定義されているメモリです。大きなデータをPCに転送するのは効率が悪いと考えられる場合、デバイスはデバイスメモリを用いて直接外部とデータのやり取りを行います。
割り込み
ある一連の処理が行われている最中に、強制的に別の処理を行わせることを割り込みと言います。割り込みの処理が終了すると、それまでに行われていた処理が再開されます。例えば、キーボードから入力を行うと、CPUが他の処理を行っているとしても、その処理に割り込んでキーデータを読み込みます。
DMA転送(Direct Memory Access)
CPUを介さずにデバイスとメモリ間、もしくはメモリ間同士で直接データを転送する方法です。DMA転送は高速、大容量のデータ転送を可能にします。
3-2. 物理インターフェース
USB (Universal Serial Bus)
キーボード、マウス、モデム、ジョイスティックなどの周辺機器とパソコンを結ぶデータ転送路の規格の1つです。現在商用化されている最新の規格はUSB3.0であり、理論値で最大5Gbpsのデータ伝送が可能となっています。
IEEE-1394 (Institute of Electrical and Electronic Engineers 1394)
高速なSCSI規格です。最大63台の機器の接続可能です。接続ケーブルによって電源の供給もできます。コンピュータと周辺機器の接続規格として期待されています。FireWire iLinkとも呼ばれます。USBとの違いとして、ホスト機器を必要とせず、P2P通信が可能です。IEEEE-1394bでは最大3.2Gbpsのデータ転送が可能です。
PCI Express (Peripheral Component Interconnect)
パソコン内部の各パーツを結ぶバスの規格です。長い間使われていたISAバスに変わる標準規格として、今ではほとんどのパソコンで使用されています。最新のものでは最速533M/sで伝送を行うことができます。
SCSI (Small Computer System Interface)
パソコン本体と周辺機器を接続する規格です。最初のSCSIから多くの点で改良されたSCSI-2、SCSI-3等が開発されており、現在SCSIの後継規格で最速320MB/sで転送できます。
参考資料
- アスキーデジタル用語辞典「プラグアンドプレイ」
- http://yougo.ascii24.com/gh/67/006744.html
- マイクロソフト「プラグアンドプレイの概要」
- http://www.microsoft.com/windows2000/ja/professional/help/default.asp?url=/windows2000/ja/professional/help/pnp_overview.htm
- マイクロソフト「ユーザーモードとカーネルモード」
- http://msdn.microsoft.com/ja-jp/library/ff554836(v=vs.85).aspx