Plug and Play 略して PnP は人の手を何ら煩わすことなく、ハードウェアを 挿す (Plug) だけで、使用 (Play) できるようにする仕組みのことです。 PnP を実現するには、広い分野に渡る規格化、標準化が必要です。
PnP (挿せば使える)を実現するためには、幾つかの条件を規定、規格化する 必要があります。その条件を下記に示します。 下記の項目で使用している記号について説明します。
ハードウェアで対応
ハードウェア または OS で対応
ハードウェアと OS が協調して対応
OS で対応
対応するのに必要なもの | 条件 | 説明 |
HD | 機械的に接続できること | 機械的な形状や、ピンの数、オスメスの区別等を規定しないと、挿す (Plug) ことができません。 |
HD | 電気的に接続できること | 機械的に挿せても、電気的に接続できなければなりません。オプションとか、ベンダデファイン(製造元が自由に定義できる部分)が含まれていても、いけません。さらに、信号電位、タイミング、ハードウェア上のプロトコルも規定する必要があります。 |
HD/OS | 接続の有無が判別できること | 機械的な機構、電気的な方法、ソフトウェアによる方法等を使用し、接続の有無が判別できなければなりません。 |
HD/OS | 分離(isolate)できること | バス(Bus)接続ができる機器の場合、個々の機器が分離して、識別できる必要があります。 |
HD+OS | 何が接続されているか識別できること | 何が接続されているか識別できることが、必要です。多くの PnP の場合、複数の識別子(種類、製造元、機器、改訂等)を使って、識別をしています。識別子を識別する方法や、識別子の意味が規定されている必要があります。別の機器と混同しないように、これらの識別子の幾つかは、その PnP の規格団体等で一意に管理されています。 |
HD+OS | 必要な情報について規定されていること | 必要な情報とは、接続されている機種や PnP の規格に依存します。例えば、PCIの場合、 I/O ポートアドレスや、IRQ 等です。ディスプレイ・モニタ(DDC)の場合、解像度等です。必要な情報の取り出す方法(プロトコル)や、情報の内容が規定されている必要があります。 |
OS | リソースの割り当てができること | 接続される機器にリソース(I/O ポートアドレスや IRQ 等)の割り当てが必要な場合、現在のリソースと衝突しないように、割り当てることが必要です。 |
OS | デバイスドライバの割り当てができること | 接続された、機器に対応したデバイスドライバを自動的に見つけ出せることが、必要です。人手により、設定する場合、ハードウェアの情報を、人にとって、わかりやすい方法で、提示する必要があります。デバイスドライバと機器のリソースが一致するように割り当てることと、デバイスドライバが割り当てられたリソースで動作できなければ、なりません。 |
PnP の実現条件を実際にどのように実現しているか、
概略を説明します。
実現に必要なもの | 条件 | 説明 |
HD | 機械的に接続できること・電気的に接続できること | これらを実現するには、PnP 対応ハードウェアの供給元に規格を守ってもらうしか、ありません。より効果的に、PnP に対応させるため、PnP 規格団体を設立する方法があります。この団体は、シンボルやマークの制定、ハードウェアの識別子の管理、PnP 規格の情報(Know-How)の提供等を行います。ハードウェアの供給元はこの団体に加盟し、PnP 規格を準拠したものに対して、シンボルの使用許可や、識別子の割り当てを得ます。一時期の USB のように、規格そのものを団体の加盟者以外には、秘密にすることもあります(顰蹙を買い、現在 USB 規格は公開されています)。尚、シンボルやマークは著作権の保護下に置くことで、勝手に使用できないようにできます。 |
HD/OS | 接続の有無が判別できること・分離(isolate)できること | これらは Bus 接続される ハードウェアに関連する項目です。当初から PnP を目指した Bus 規格では、仕様に織り込み済みですので問題はありません。後から、PnP 対応にした ISAPnP では、大きな問題があります。 |
HD+OS | 何が接続されているか識別できること・必要な情報について規定されていること | これらは、PnP 対応ハードウェアに自己紹介させる、仕組みを用意することで、実現します。実際には ハードウェアにコンフィグレーションレジスタ群を使用します。このレジスタ群に、ハードウェアの ID(識別子)や、リソースの情報等を納めます。 |
OS | リソースの割り当てができること・デバイスドライバの割り当てができること | これらは、OS がリソースとデバイスドライバを管理して、実現します。割り当てに必要なリソースの情報はコンフィグレーションレジスタ群から読み取ります。OS は現在管理しているリソース表から、未使用のリソースをコンフィグレーションレジスタ群に書き込んで設定し、OS の管理しているリソース表を更新します。デバイスドライバの割り当ては、デバイスドライバの特定と設定の二つの段階に分けられます。デバイスドライバの特定には、コンフィグレーションレジスタ群から、ID(識別子)を読み取ることで行います。この ID とデバイスドライバの対応表(データーベース)から、デバイスドライバを特定します。または、ID を人にとって理解しやすい方法で、表現し、人にデバイスドライバを選んでもらいます(PnP の目的(人手を煩わすことなく)に反します)。デバイスドライバが特定できたら、コンフィグレーションレジスタに書き込んだリソース情報と同じものを、デバイスドライバにも適応します。 |
もともと PnP とは、Intel 社と Microsoft 社により、1993年 3月に発表された、 "Plug and Play ISA Specification"に由来します。単に PnP と いった場合、ISAPnP のことでした。現在は Plug and Play(挿せば使える)に、 対応したハードウェアや仕組みのことを、すべて PnP と呼んでいます。
PnP に対応したハードウェアはたくさんあります。 これらについて、簡単に説明します。
x86 系の CPU には、CPU の特性が、特別なレジスタに書き込まれてい
ます。これを、CPU ID と呼んでいます。 Linux では CPU ID を CPU 内蔵
キャッシュメモリ容量の調査と設定、 MTRR の設定に利用しています。
CPU ID の情報は /proc/cpuinfo
で調べることができます。
メモリの種類(EDO, SD, PROM)、容量、ECC やパリティの有無 を調べることと、タイミング(CAS, RAS のレイテンシー)の設定ができます。
ISA Bus で PnP を実現したものです。 ISAPnP についてで説明します。
すべての CPU で共通に使用できることを目指した高速 32bit Bus の 規格です。コネクタやカードの機械的な形状の規定と電気的な特性や タイミングの規定と、識別子や、ハードウェアの情報を CPU 等から、読み書き する方法の規定を含みます。PCI は拡張カードや周辺機器の接続だけではなく、 Bus そのものの拡張方法やコンピュータ同士の接続についても、規格化されていま す。Linux では、問題なく認識できますが、拡張カードではデバイスドライバを 指定しないと、動作しません。
電源を切ることなく、機器の取り外しや、取り付けができることが特徴 です。手軽に扱えるため、最近は様々な機器のインターフェースに採用されていま す。しかし Linux では機器毎にプロトコルが存在するため、それに対応するのが 遅れています(ネットワークに当てはめていうと、パケットの送受はできてるが、 サービス ftp smtp pop 等に対応していない状況です)。
コネクタの機械的な形状、ケーブルの特性、電気的な特性やタイミ ングの規定と、送受するコマンドの規定が規格されています。 高速パラレルインターフェースとして、ハードディスクや様々な機器、さらに、 コンピュータまで接続できます。SCSI-2 以前の SCSI は送受するコマンドが 規定されていなかったため、機器の組み合わせの相性問題がありました。
もともと ATA は IDE ハードディスクの規格でしたが、SCSI コマンドに 似た ATAPI コマンドを規定したことで、CDROM, CDR, DVD, テープ、フロッピーディスク等、多くの機器が接続できるようになりました。
ディスプレイやモニタの特性(解像度等)をビデオカード等から読める
ようにした規格です。XFree86 4.0 でサポートされるようになりました。
あの面倒くさい Modeline
から、解放されるかもしれません。
IBM PC/AT 互換機のパラレルポートが双方向だったこ とから、発展し IEEE1284 になりました。そして、プリンタ以外にもフロッピーディ スクドライブ等、比較的低速なパラレルインターフェースに使用できるようになり ました。
主に、ノートパソコンの拡張用に使用されています。PC Card 規格 の起源は電子手帳に使用するメモリーカードから始まっています。 1986 年に、最初の規格が JEIDA からガイドラインとして公開されました。 その後 1989 年にアメリカで、PCMCIA が設立され、1993 年に JEIDA と PCMCIA の規格を統一した PC Card 規格になりました。1997 年に CardBus 規格が 発行されました。PnP という言葉の前にできた、最初の PnP です。 Linux では pcmcia-cs として、サポートされてきました。kernel 2.4 では、 PC Card のサポートは kernel に組み込まれました。
略語説明 JEIDA : 日本電子工業振興協会 PCMCIA : Personal Computer Memory Card International Association