(57)【特許請求の範囲】
【請求項１】
非イベントドリブン方式のＯＳにより処理を実行するコンピュータがデバイスを管理する方法として、
上記コンピュータはカーネル空間に、
コアドライバと、
クラスドライバと
を有し、
上記コンピュータはユーザ空間に、
フックプログラムと、
所定の処理手順と、上記フックプログラムを呼び出すコードとが記述されているホットプラグスクリプトと、
ホットプラグデーモンと、
このホットプラグデーモンから情報を得てユーザアプリケーションにＡＰＩを提供するホットプラグライブラリと
を有し、
上記コンピュータに対してデバイスの接続があったとき、上記コアドライバにより上記ホットプラグスクリプトを呼び出し、
このホットプラグスクリプトは、上記呼び出しが行われたとき、そのホットプラグスクリプトに記述されている上記処理手順における処理を実行することにより、上記クラスドライバをロードして仮想ファイルの内容を更新し、
この更新後、上記コードにしたがって上記フックプログラムを呼び出し、
このフックプログラムは、これが呼び出されたとき、上記ホットプラグスクリプトの環境変数をメッセージで上記ホットプラグデーモンに送り、
このホットプラグデーモンは、上記フックプログラムから上記メッセージが送られてきたとき、そのメッセージをもとにして上記接続されたデバイスに関する情報を収集し、
この収集の結果、監視しているユーザアプリケーションがあれば、上記ホットプラグライブラリにメッセージを通知し、
上記ホットプラグライブラリは、上記ユーザアプリケーションから要求があれば、上記ホットプラグデーモンにその要求を伝え、
上記コンピュータに対して上記デバイスの接続を止めるとき、そのデバイスの接続のときと同様の処理によりそのデバイスの使用を不許可にする
ようにしたデバイス管理方法。
【請求項２】
請求項１に記載のデバイス管理方法として、
上記カーネルをLinux（登録商標）のカーネルとする
ようにしたデバイス管理方法。
【請求項３】
非イベントドリブン方式のＯＳにおいて、デバイスを管理するデバイス管理システムとして、
フックプログラムと、
所定の処理手順と、上記フックプログラムを呼び出すコードとが記述されているホットプラグスクリプトと、
ホットプラグデーモンと、
このホットプラグデーモンから情報を得てユーザアプリケーションにＡＰＩを提供するホットプラグライブラリと
を有し、
上記ホットプラグスクリプトは、コンピュータに対してデバイスの接続があったとき、上記コンピュータのカーネル空間のコアドライバにより呼び出されるとともに、
この呼び出しにより上記ホットプラグスクリプトに記述されている上記処理手順における処理を実行することにより、上記カーネル空間にクラスドライバをロードして仮想ファイルの内容を更新し、
この更新後、上記コードにしたがって上記フックプログラムを呼び出し、
このフックプログラムは、これが呼び出されたとき、上記ホットプラグスクリプトの環境変数をメッセージで上記ホットプラグデーモンに送り、
このホットプラグデーモンは、上記フックプログラムから上記メッセージが送られてきたとき、そのメッセージをもとにして上記接続されたデバイスに関する情報を収集し、
この収集の結果、監視しているユーザアプリケーションがあれば、上記ホットプラグライブラリにメッセージを通知し、
上記ホットプラグライブラリは、上記ユーザアプリケーションから要求があれば、上記ホットプラグデーモンにその要求を伝え、
上記コンピュータに対して上記デバイスの接続を止めるとき、そのデバイスの接続のときと同様の処理によりそのデバイスの使用を不許可にする
ようにしたデバイス管理システム。
【請求項４】
請求項３に記載のデバイス管理システムとして、
上記カーネルをLinux（登録商標）のカーネルとする
ようにしたデバイス管理システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、非イベントドリブン方式のＯＳにおいて、デバイス（周辺機器）に対するホットプラグ機能を実現するためのデバイス管理方法および管理システムに関する。
【０００２】
【従来の技術】
ＡＶ機器として、パーソナルコンピュータと組み合わせて利用できるようにしたものや、さらに、ネットワークを通じてオーディオデータやビデオデータをやりとりできるようにしたものがある。そのようなＡＶ機器に接続するパーソナルコンピュータには、一般にマルチタスク方式のＯＳが使用される。
【０００３】
そして、Microsoft Windows（登録商標）のようなイベントドリブン方式のＯＳにおいては、ユーザアプリケーションは、ＯＳからシステムメッセージを受け取ると、起動、終了、描画などの対応する処理を実行するようにされている。したがって、イベントドリブン方式のＯＳのもとでは、ＵＳＢ接続のようなホットプラグのイベントについても、ユーザアプリケーションはＯＳからのシステムメッセージを受け取ることにより必要な処理を実行することができる。
【０００４】
しかし、Linux（登録商標）のような非イベントドリブン方式のＯＳにおいては、イベントドリブン方式のＯＳにおけるようなシステムメッセージは用意されていない。このため、ユーザアプリケーションがホットプラグのイベントを補捉するには、ユーザアプリケーションが常にポーリングを行っている必要がある。つまり、ユーザアプリケーションは、一定の時間間隔でバスラインをモニタし、ホットプラグのイベントが発生したら対応する処理を実行することになる（例えば、特許文献１参照）。
【０００５】
図２は、そのようにポーリングによりホットプラグイベントを処理する場合の概要を示す。なお、以下の説明は、Kernel2.4のLinux（登録商標）を搭載したパーソナルコンピュータに、ホットプラグ処理としてマスストレージ機器をＵＳＢ接続する場合である。また、以下の説明における符号▲１▼〜▲４▼は、図２の符号▲１▼〜▲４▼に対応する。
【０００６】
すなわち、Linux（登録商標）のカーネル空間KERNELには、ＵＳＢコアドライバusbcoreと、ＵＳＢマスストレージ用のクラスドライバusb-storageとが用意される。また、ユーザ空間USERに、ホットプラグスクリプトhotplugおよびＵＳＢスクリプトusb.agentが用意される。そして、パーソナルコンピュータにＵＳＢマスストレージ機器を接続すると、
▲１▼  カーネル空間KERNELに用意されているコアドライバusbcoreのプローブ関数probeの処理の延長でホットプラグスクリプトhotplugが呼び出される。このとき、各種の環境変数が設定されてホットプラグスクリプトhotplugが実行される。今の場合、環境変数の一部には、ＵＳＢ機器の接続であることを示す値が設定される。
▲２▼  ホットプラグスクリプトhotplugは、これの実行のきっかけとなったイベントに対応したスクリプトを実行する。今の場合、▲１▼により設定された環境変数にしたがってＵＳＢスクリプトusb.agentを実行する。
▲３▼  ＵＳＢスクリプトusb.agentは、これの実行のきっかけとなったイベントに対応するクラスドライバ、今の場合、ＵＳＢマスストレージ機器のクラスドライバusb-storageをロードする。
▲４▼  ＵＳＢコアドライバusbcoreが仮想ファイル/proc/bus/usb/devicesの内容を更新する。
という一連の処理を実行する。
【０００７】
したがって、ユーザアプリケーションがポーリングにより仮想ファイル/proc/bus/usb/devicesをモニタしていれば、マスストレージ機器をＵＳＢ接続したとき、そのマスストレージ機器の使用が可能となる。ただし、現行のLinux（登録商標）におけるホットプラグ処理は、該当するクラスドライバを動的に組み込む場合にだけ使用されている。
【０００８】
【特許文献１】
特開２００２−３００１７６公報
【０００９】
【発明が解決しようとする課題】
ところが、上記のようにポーリングによりホットプラグのイベントを補捉する場合には、ポーリングの間隔を短くすると、システムの負荷が増大してしまう。しかし、逆に、ポーリングの間隔を長くすると、ホットプラグイベントが発生してから対応する処理が実行されるまでに時間遅れを生じてしまう。
【００１０】
このような問題は、ＣＰＵとして高速のものを採用することにより、ある程度回避ないし軽減することができるが、その場合には高価なＣＰＵが必要となってしまう。また、ＡＶ機器などにおいて、そのシステム制御回路をマイクロコンピュータにより構成した場合、全体に占めるＣＰＵの価格も重要であり、高速であっても高価なＣＰＵは採用できない。
【００１１】
この発明は、以上のような問題点を解決しようとするものである。
【００１２】
【課題を解決するための手段】
この発明においては、
非イベントドリブン方式のＯＳにより処理を実行するコンピュータがデバイスを管理する方法として、
上記コンピュータはカーネル空間に、
コアドライバと、
クラスドライバと
を有し、
上記コンピュータはユーザ空間に、
フックプログラムと、
所定の処理手順と、上記フックプログラムを呼び出すコードとが記述されているホットプラグスクリプトと、
ホットプラグデーモンと、
このホットプラグデーモンから情報を得てユーザアプリケーションにＡＰＩを提供するホットプラグライブラリと
を有し、
上記コンピュータに対してデバイスの接続があったとき、上記コアドライバにより上記ホットプラグスクリプトを呼び出し、
このホットプラグスクリプトは、上記呼び出しが行われたとき、そのホットプラグスクリプトに記述されている上記処理手順における処理を実行することにより、上記クラスドライバをロードして仮想ファイルの内容を更新し、
この更新後、上記コードにしたがって上記フックプログラムを呼び出し、
このフックプログラムは、これが呼び出されたとき、上記ホットプラグスクリプトの環境変数をメッセージで上記ホットプラグデーモンに送り、
このホットプラグデーモンは、上記フックプログラムから上記メッセージが送られてきたとき、そのメッセージをもとにして上記接続されたデバイスに関する情報を収集し、
この収集の結果、監視しているユーザアプリケーションがあれば、上記ホットプラグライブラリにメッセージを通知し、
上記ホットプラグライブラリは、上記ユーザアプリケーションから要求があれば、上記ホットプラグデーモンにその要求を伝え、
上記コンピュータに対して上記デバイスの接続を止めるとき、そのデバイスの接続のときと同様の処理によりそのデバイスの使用を不許可にする
ようにしたデバイス管理方法
とするものである。
したがって、ホットプラグイベントを生じると、ホットプラグスクリプトからフックプログラムを通じてホットプラグマネージャが実行され、そのホットプラグイベントについての情報がユーザアプリケーションに提供される。
【００１３】
【発明の実施の形態】
上述から明かなように、現行のLinux（登録商標）においては、ＵＳＢ機器をホットプラグ接続した場合、その接続した機器にかかわらず▲１▼のホットプラグスクリプトhotplugが実行される。
【００１４】
この発明は、そのような点に着目し、▲１▼のホットプラグスクリプトhotplugを利用してホットプラグ処理を実現するものである。以下、Kernel2.4のLinux（登録商標）を搭載したパーソナルコンピュータに、ホットプラグ処理としてマスストレージ機器をＵＳＢ接続する場合について、図１によりその一例を説明する。なお、以下の説明における符号▲１▼〜▲９▼は、図１の符号▲１▼〜▲９▼に対応する。
【００１５】
すなわち、図２の場合と同様、Linux（登録商標）のカーネル空間KERNELに、ＵＳＢコアドライバusbcoreと、ＵＳＢマスストレージ用のクラスドライバusb-storageとが用意され、ユーザ空間USERに、ホットプラグスクリプトhotplugおよびＵＳＢスクリプトusb.agentが用意される。
【００１６】
さらに、ユーザ空間USERに、フックプログラムhookerが設けられるとともに、ホットプラグマネージャpnpmanagerを構成するホットプラグデーモンpnpmgrおよびホットプラグライブラリlibpnpmgrが設けられる。
【００１７】
この場合、フックプログラムhookerは、ホットプラグスクリプトhotplugから実行されるものであり、このため、ホットプラグスクリプトhotplugの最後に、フックプログラムhookerを呼び出すコードが追記される。また、フックプログラムhookerは、ホットプラグマネージャpnpmanagerのメッセージキューを使用してそのホットプラグマネージャpnpmanagerに環境変数を渡すようにされている。
【００１８】
さらに、ホットプラグデーモンpnpmgrは、プログラムhookerからの情報を元にデバイス情報の収集を行うものであり、必要に応じてホットプラグライブラリlibpnpmgrにイベントの通知を行う。また、ホットプラグライブラリlibpnpmgrは、ユーザアプリケーションにＡＰＩを提供するものである。
【００１９】
そして、そのＡＰＩが提供する機能として、
(1) イベント待ちの登録／解除
ホットプラグデーモンpnpmgrの機能の使用の登録／解除を行う。登録をすると、イベントの発生の通知やデバイス情報の取得が可能となる。
(2) デバイス情報の取得
現在パーソナルコンピュータに接続されているデバイスの情報を取得する。ここで取得した情報には、ユーザアプリケーションがそのデバイスにアクセスするために必要な情報がすべて含まれる。
(3) イベントの通知
登録時に指定しておいたコールバック関数callbackに、ホットプラグ機器の着脱の情報とデバイスタイプとを通知する。
などが用意される。
【００２０】
さらに、フックプログラムhookerとホットプラグデーモンpnpmgrとの間、およびホットプラグデーモンpnpmgrとホットプラグライブラリlibpnpmgrと間は、メッセージの交換によってプロセス間通信を実現する。
【００２１】
このような構成において、パーソナルコンピュータにＵＳＢマスストレージ機器を接続すると、まず、▲１▼〜▲４▼が上述と同様に実行される。続いて、
▲５▼  ホットプラグスクリプトhotplugがフックプログラムhookerを呼び出す。
▲６▼  フックプログラムhookerがホットプラグスクリプトhotplugの環境変数をメッセージでホットプラグデーモンpnpmgrに送る。
▲７▼  ホットプラグデーモンpnpmgrは、フックプログラムhookerからのメッセージをもとにしてＵＳＢ接続されたデバイスに関する情報を収集する。
▲８▼  ホットプラグデーモンpnpmgrは、監視しているユーザアプリケーションがあれば、ホットプラグライブラリlibpnpmgrにメッセージを通知する。
▲９▼  ホットプラグライブラリlibpnpmgrは、ユーザアプリケーションから要求があれば、ホットプラグデーモンpnpmgrにその要求を出す。
の処理が順に実行される。
【００２２】
したがって、マスストレージ機器をＵＳＢ接続すると、そのマスストレージ機器を使用できるようになる。また、マスストレージ機器のＵＳＢ接続をやめると、同様の処理によりそのマスストレージ機器の使用が不許可とされる。
【００２３】
こうして、図１に示すシステムによれば、Linux（登録商標）においてホットプラグを実現することができるが、この場合、ユーザアプリケーションから見てホットプラグ機器の追加・削除を非同期に実行することができるとともに、そのとき、ポーリングが不要である。したがって、ホットプラグ機器が接続されてから対応する処理が実行されるまでの時間に遅れを生じることがなく、ＣＰＵの負荷を軽減することができるとともに、コストの上昇を抑えることができる。
【００２４】
また、ホットプラグマネージャpnpmanagerは、ホットプラグデーモンpnpmgrと、ホットプラグライブラリlibpnpmgrとに分割しているので、それらの間のプロセス間通信をユーザアプリケーションから隠蔽することができる。したがって、ユーザアプリケーションは、通常のライブラリをアクセスをするときと同様にホットプラグのイベントをハンドリングすることができる。
【００２５】
さらに、ユーザアプリケーションは、ホットプラグデーモンPnpmgrにコールバック関数callbackを登録することにより非同期でイベントの情報を受け取ることができ、あるいは関心のあるデバイスのイベントの情報だけを受け取ることができる。しかも、カーネル空間KERNELおよびユーザ空間USERに対する変更は、ホットプラグスクリプトhotplugの最後にフックプログラムhookerを呼び出すための１行を追記するだけでよいので、システムに対する影響がない。
【００２６】
なお、上述においては、この発明をＵＳＢ機器のホットプラグイベントに適用した場合であるが、ＩＥＥＥ１３９４、ネットワークアダプタ、ＰＣＭＣＩＡカードなどのホットプラグイベントにも適用することができる。
【００２７】
〔この明細書で使用している略語の一覧〕
ＡＰＩ      ：Application Program Interface
ＡＶ        ：Audio and Visual
ＣＰＵ      ：Central Processing Unit
ＩＥＥＥ    ：Institute of Electrical and Electronics Engineers
ＯＳ        ：Operating System
ＰＣＭＣＩＡ：Personal Computer Memory Card International Association
ＵＳＢ      ：Universal Serial Bus
【００２８】
【発明の効果】
この発明によれば、例えばLinux（登録商標）のような非イベントドリブン方式のＯＳにおいてホットプラグを実現することができる。また、ホットプラグイベントが発生してから対応する処理が実行されるまでの時間に遅れを生じることがなく、しかも、システムの負荷を軽減することができる。さらに、ＣＰＵとして高速のものを必要とすることがなく、システムのコストの上昇を抑えることができる。
【図面の簡単な説明】
【図１】この発明の一形態を示す図である。
【図２】この発明を説明するための図である。
【符号の説明】
hokker…フックプログラム、hotplug…ホットプラグスクリプト、KERNEL…カーネル空間、libpnpmgr…ホットプラグライブラリ、pnpmanager…ホットプラグマネージャ、pnpmgr…ホットプラグデーモン、USER…ユーザ空間、usbcore…ＵＳＢコアドライバ
【図１】
0004284499.tif 000002
【図２】
0004284499.tif 000003