JP2011145827A - 仮想バスシステム、およびデバイス管理方法 - Google Patents

仮想バスシステム、およびデバイス管理方法 Download PDF

Info

Publication number
JP2011145827A
JP2011145827A JP2010005047A JP2010005047A JP2011145827A JP 2011145827 A JP2011145827 A JP 2011145827A JP 2010005047 A JP2010005047 A JP 2010005047A JP 2010005047 A JP2010005047 A JP 2010005047A JP 2011145827 A JP2011145827 A JP 2011145827A
Authority
JP
Japan
Prior art keywords
port
virtual
descriptor
remote
device management
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2010005047A
Other languages
English (en)
Inventor
Masaya Umemura
雅也 梅村
Takatoshi Kato
崇利 加藤
Tomihisa Hatano
富久 幡野
Makoto Kayashima
信 萱島
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Omron Terminal Solutions Corp
Original Assignee
Hitachi Omron Terminal Solutions Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Omron Terminal Solutions Corp filed Critical Hitachi Omron Terminal Solutions Corp
Priority to JP2010005047A priority Critical patent/JP2011145827A/ja
Publication of JP2011145827A publication Critical patent/JP2011145827A/ja
Pending legal-status Critical Current

Links

Images

Abstract

【課題】従来、仮想化環境に用いられるPCのOSはUSBデバイスのプラグインイベント(イベント)を受け取ってもイベントに対するエニュメレーションの妥当性を検証できずに、機械的にエニュメレーションする。そのため、USBデバイス1機種あたり1回のインストールで済ませることはできず、ポートの数だけ冗長なインストレーションを許してしまう。
【解決手段】ローカルPC81とリモートPC82の間にデバイス管理部44を具備し、デバイス管理部44はイベントの通知を受信すると、デバイス管理テーブル47に従いエニュメレーションの妥当性を検証する。妥当と判断するとデバイスの機種毎にポート番号を付与し、リモートPC82のOS(ゲストOS)にイベントを通知する。このイベントにより、リモートPC81のOSにはいつも同じポート番号にデバイスが挿された(抜かれた)と通知されるので、インストール回数は1回で済む。
【選択図】図6

Description

本発明は、リモート(のPC(Personal Computer))からデバイスを制御する仮想バスシステムにおけるデバイスの管理手法に関する。
従来、仮想化環境に用いられるPCのOS(Operating System)は、USB(Universal Serial Bus)デバイス(単に、「デバイス」と称する場合がある)がPCのUSBポートに挿されると、挿されたUSBデバイスのエニュメレーションを開始する。「エニュメレーション」とは、デバイスの識別子(デバイスディスクリプタ)を生成し、それをOSのシステムコンポーネントに通知することで、プラグアンドプレイに対応したデバイスを検出する処理をいう。USBデバイスが未インストールの場合、USBデバイスが挿されたUSBポート毎にドライバやミドル(ウェア)、アプリ(ケーション)がインストールされることで、PCがデバイスを制御することが可能となる。複数のUSBポートを具備するPCで、全てのUSBポートに対しUSBデバイスが挿抜されると、USBポートの数だけインストールが実行され、所定の設定が記録、保持される。
非特許文献1のUSB/IP(Internet Protocol)技術では、デバイスを制御するクライアント(リモートPC)から、デバイスが挿されるサーバ(ローカルPC)のUSBポートを監視している。サーバにUSBデバイスが挿され、クライアントがプラグインイベント(単に、「イベント」と称する場合がある)を検知すると、クライアントはデバイスが挿されたポート番号を参照してUSBデバイスをインストールしていた。
IPネットワークを介したUSB拡張手法の提案、広渕崇宏、2007年3月23日、奈良先端科学技術大学院大学情報科学研究科博士論文 2007年3月
PCのOSはプラグインイベントを受け取っても、プラグインイベントに対するエニュメレーションの妥当性を検証できずに、機械的にエニュメレーションする。そのため、他のUSBポートにインストール済みのUSBデバイスがあったとしても、そのUSBデバイスを他のUSBポートに挿すとインストールが再度発生する。つまりUSBポートの数だけ冗長なインストレーションを許している。
このような事態は非特許文献1で例示したUSB/IP技術におけるリモートPCのOSでも同様であり、リモートPCのOSがローカルPCのUSBのポート番号を参照してUSBデバイスをエニュメレーションする場合、ローカルPC上でUSBデバイスが挿されたポート毎に1回ずつ冗長にインストールが実行される。
つまり従来の、仮想化環境に用いられるPCのOSでもリモートPCのOSでも、USBデバイス1機種あたり1回のインストールで済ませることはできず、ポートの数だけ冗長にインストールが実行され、所定の設定が記録、保持される。その結果、例えばサービスマンが、仮想化環境を提供するシステムのメンテナンス作業、特に、デバイスの接続の確認に要する作業を行う場合、その作業自体が煩雑化したり、作業の遅延を招いたりして、負担が大きい。
このような事情を鑑みて、本発明では、仮想化環境におけるデバイスの接続を簡易化することを目的とする。
本発明は、ローカルPCのポートに接続されたデバイスを管理するデバイス管理部にプラグインイベントを通知し、デバイス管理部がデバイス管理テーブルに従いエニュメレーションの妥当性を検証する。エニュメレーションが妥当と判断すると、デバイスの機種毎にポート番号を付与し、リモートPCのOS(ゲストOS)にプラグインイベントを通知する。このプラグインイベントにより、リモートPCのOS(ゲストOS)にはいつも同じポート番号にデバイスが挿された、ないしデバイスが抜かれたと通知されるので、インストール回数を1回にとどめる。
USBデバイスがローカルPCに挿されるとローカルPCのOS(ホストOS)でエニュメレーションが始まり、USBデバイス本来のデバイスドライバの代わりにポートリダイレクタドライバ(単に、「ポートリダイレクタ」と称する場合がある。デバイスドライバの一種。)がロードされる。ロード後、ポートリダイレクタドライバによるデバイスの追加処理が済むとポートリダイレクタドライバはデバイス管理部にプラグインイベントと、イベントが発生したポート番号とデバイスディスクリプタを通知する。
デバイス管理部は、デバイス管理部が保持するデバイス管理テーブルにデバイスディスクリプタが示すUSBデバイスが登録されていて、既に1台以上挿されておらず、イベントが発生したポート番号に挿すことを許されていることを確認してエニュメレーションの妥当性を検証する。
デバイス管理部の検証が済み、リモートのPCのOSに対してプラグインイベントと、当該デバイスに付与したポート番号とデバイスディスクリプタを通知すると、リモートのPCのOS上で当該デバイスのエニュメレーションが始まる。当該デバイスはリモートのPCのOS上ではインストール済みなので、当該デバイス本来のデバイスドライバがロードされ、リモートPCから当該デバイスを制御することが可能となる。これにより、リモートPCのOSにおいて冗長にインストールが繰り返される事態を回避する。
詳細は、後記する。
本発明によれば、仮想化環境におけるデバイスの接続を簡易化することができる。
本発明の第1の実施形態のソフトウェアスタック構成を示す図である。 本発明の第1の実施形態でデバイスリセット後の再接続の処理手順を示す図である。 本発明の第1の実施形態で同一機種が2台挿された状態での処理手順を示す図である。 本発明の第1の実施形態で別機種のデバイスが挿された時の処理手順を示す図である。 本発明の第1、第2の実施形態のデバイス管理テーブルを示す図である。 本発明の第2の実施形態のソフトウェアスタック構成を示す図である。
次に、本発明を実施するための形態(以下、「実施形態」という。)について、適宜図面を参照しながら説明する。
≪第1の実施形態≫
まず、本発明の第1の実施形態について、図1から図5を用いて説明する。図中、2はバスのホストコントローラを制御するバスドライバ、3はポートリダイレクタ、4はデバイス管理部、5は仮想バス、6はデバドラA(「デバドラ」はデバイスドライバの略称)、8はPC上のホストOS(ローカルマシン)、9はホストOSが提供する仮想マシン実行環境で動作するゲストOS(リモートマシン)、11はルートハブ、12、14はプラグアンドプレイマネジャ(図中では、「P&P Mngr」と表記)、13,15はUSBデバイスのインストール等に関する設定を格納するレジストリファイル、46はデバイス管理テーブル、105はポート5、106はポート6、141はデバイスA、201、301、501、601はデバイスオブジェクト(図中では「DO」(Device Object)と表記)、401は仮想ポート1、701はデバイスAの制御ミドルであるミドルA、711はデバイスAを制御するアプリAである。
図1は本発明の第1の実施形態のソフトウェアスタック構成を示す図であり、(例えば1台の)PCのポートに挿されたデバイスをハイパバイザから仮想マシン(以下、「VM」(Virtual Machine)と表記する場合がある)上の仮想バスでプラグアンドプレイさせる処理手順を示している。
図1を用いて、ホストOSないしハイパバイザが動作するPCにデバイスを挿した後、同じPCのゲストOSないしVM上の仮想バスでプラグアンドプレイするまでの処理を説明する。なお、本実施形態のPCは、入力部(デバイスと接続する入力用インターフェイスを含む)、出力部(デバイスと接続する出力用インターフェイスを含む)、制御部(例:CPU(Central Processing Unit))、記憶部(例:メモリ、ストレージデバイス)といったハードウェア構成を備え、以下に説明する情報処理を実現する。また、このPCは、前記情報処理を実現するのに必要なコードが記述されたデバイス管理用のプログラムを記憶している。
(デバイス)
図中デバイスA(141)はスキャナやプリンタ等のデバイスの機能を表す。具体的には、デバイスを挿すポートないしバスが規定するプラグアンドプレイに対応する機能、例えばデバイスディスクリプタの応答や、プリンタなら印刷と言ったデバイス本来の機能、電源状態に応じて節電運転する電源モード管理機能からなる。
(エニュメレーション)
ポート5(105)にデバイスA(141)が挿されると、ルートハブ11がデバイスの挿入を検知し、プラグアンドプレイマネジャ12にプラグインイベント(図中では「Plug-in」と表記)を通知する。プラグアンドプレイマネジャ12はバスドライバ2に対し、ポート5(105)にデバイスA(141)がプラグインした旨伝達し、ポート5(105)に挿したデバイスA(141)からデバイスディスクリプタを読み出し、レジストリファイル13を検索してバスドライバ2の上位にデバイスドライバをロードする。図1において、レジストリファイル13に記載されているデバイスA(141)のデバイスドライバはポートリダイレクタ3である。レジストリファイル13にはデバイスのインストール時に、デバイスディスクリプタの情報とデバイスドライバの名称と所在等情報が記載ないし格納されており、これら情報を参照することでロードすべきデバイスドライバを特定することができる。ポートリダイレクタ3はすでにメモリ上にロードされているのでロードは省略し、ポートリダイレクタ3を初期化してデバイスA(141)を制御するためのデバイス追加処理としてデバイスオブジェクト(201,301)がポートリダイレクタ3とバスドライバ2に作成される。
(デバイスオブジェクト)
デバイスオブジェクト(201,301)はデバイスがプラグアンドプレイされる度にデバイス毎にバスドライバとデバイスドライバ(ホストOS(8)においては、ポートリダイレクタ3)に作成される。デバイスオブジェクト(201,301)にはデバイスを制御する際の電文(コマンドとデータ)を格納するバッファへのポインタと、電文を処理するコードを指し示すポインタと、対応するデバイスオブジェクト(201,301)を指し示すポインタとが格納される。
デバイスドライバであってもバスドライバであっても、一般的にドライバは入出力リクエストパケット(IRP(I/O Request Packet))をI/Oマネージャ(不図示)から受け取ると、IRPに対応するデバイスのデバイスオブジェクト(201,301)を参照し、処理した上で、上位ないし下位のドライバにIRPを受け渡しデバイスの制御を実現する。
(デバイス追加処理)
ポート5(105)に挿したデバイスA(141)に関して、バスドライバ2でデバイス追加処理が実行されるとデバイスオブジェクト201が作成され、ポートリダイレクタ3でデバイス追加処理が実行されるとデバイスオブジェクト301が作成される。そして、デバイスオブジェクト201とデバイスオブジェクト301とが互いにポインタを格納することで関連付けが完了し、デバイス追加処理が終了する。ポートリダイレクタ3はデバイスオブジェクト301を作成した際、デバイスオブジェクト301にセッション番号を付与し、デバイスオブジェクトを識別する。デバイスオブジェクト301にはセッション1が付与される。
(デバイス管理部へのプラグインイベント通知)
デバイス追加処理が成功し、完了すると、ポートリダイレクタ3はデバイス管理部4に対し、ポート5(105)にデバイスA(141)がプラグインされた旨を示すイベントを通知し、当該デバイスディスクリプタとセッション番号を受け渡し、処理を終了する。
(デバイス放置)
ポートリダイレクタ3はデバイス追加処理とデバイス削除処理(デバイスのアンインストール)と電文の中継処理に機能が限定されるので、この後自発的にデバイスA(141)を制御することは無い。そのため、デバイスA(141)は初期化ないし活性化されないまま、ポート5(105)につながった状態で初期化ないし活性化を待ち続ける。
(適・不適の判定と仮想ポートの特定)
プラグインイベントを受けたデバイス管理部4はデバイス管理テーブル46を参照し、[1]受け渡されたデバイスディスクリプタが既知のデバイスのデバイスディスクリプタと一致し、[2]そのデバイスが予め許可されたポートに挿されていて、[3]仮想バス5に既にプラグアンドプレイされており、started状態(ゲストOS(9)が制御している状態)である同一機種のデバイスが存在しない、という以上の3条件を満足するか確認する。条件が満足していると、エニュメレーションが妥当であることを意味し、デバイスディスクリプタからデバイスの機種を特定し、機種ごとに割り当てられた仮想ポートのポート番号を特定する。図1においてデバイスA(141)の仮想ポートは仮想ポート1(401)である。
(デバイス管理テーブル)
図5にデバイス管理部4が参照するデバイス管理テーブルを示す。デバイス管理テーブル(第1の実施形態では、符号46)には既知のデバイスAとデバイスBとデバイスCが登録されている。この登録は、例えば、各デバイスの初回のインストール時に行われる。デバイスの名称(デバイス名5001)はデバイスディスクリプタに記載されたデバイス名とデバイスの機種毎に固有のID(インスタンスID)とが登録され、デバイス管理部4はいずれかで検索する。換言すれば、デバイス名5001には、デバイスのデバイスディスクリプタが登録されており、デバイスがポートに挿されるときに読み出されるデバイスディスクリプタを検索キーとして、デバイス名5001に対して検索が実行される。
デバイスAに関していえば、デバイスディスクリプタ5002には仮想バス5が動作するOSのプラグアンドプレイマネジャ14に受け渡す代替デバイスディスクリプタAが、ゲストOS(9)でエニュメレーションを行うときにゲストOS(9)に割り当てられる仮想的なポートを示す仮想ポート番号5003には仮想ポート1が、ホストOS(8)が動くPC上でデバイスA(141)が挿されるべきポートを表す実ポート番号5004はポート5が、それぞれ記載されている。
デバイス管理テーブル46においてセッション番号5005以外は固定値であり、管理者や管理権限を持ったプログラム、例えばインストーラが追加、修正、削除する。セッション番号5005はデバイスが挿されていないときはヌル(NULL)であり、デバイスが挿されてポートリダイレクタ3がセッション番号を付与するたびに上書きされる。
デバイス管理部4はこのデバイス管理テーブル46に従い、ポート5(105)に1台だけデバイスA(141)が挿されていれば好適と判断する。デバイスBも同様である。デバイスCは実ポート番号5004と仮想ポート番号5003ともにヌル(NULL)である。これはホストOS(8)が動くPC上に挿されるべきポートが無く、仮想バス5にもつながらないことを意味するため、デバイス管理部4はデバイスCが挿されると無条件で不適と判断する。
(いつも同じポートに同じデバイスが挿抜されたと通知)
デバイス管理部4は、デバイス管理テーブル4を参照して、ゲストOS(9)のプラグアンドプレイマネジャ14に、挿抜されたデバイスに対応する代替デバイスディスクリプタと仮想ポートとを通知する。これにより、プラグアンドプレイマネジャ14は初回のインストール時に仮想ポート番号と代替デバイスディスクリプタの情報をレジストリファイル15に書き込む。以後、ゲストOS(9)において、同じポートに同じデバイスが挿抜されたと認識する。
(プラグインイベント通知)
デバイス管理部4はプラグアンドプレイマネジャ14に対してプラグインイベント(図中では「Plug-in」と表記)を通知する。この通知は、ホストOS(8)とゲストOS(9)をつなぐ仮想マシンバス(VM Bus)を介してメッセージを送受信して実現している。通知の際、デバイスA(141)が挿されているポートは、先に特定した仮想ポート1(401)に置き換えて通知する。プラグアンドプレイマネジャ14は仮想バス5に対して、仮想ポート1(401)へデバイスA(141)がプラグインした旨通知する。
(仮想バスへのエニュメレーション)
プラグアンドプレイマネジャ14はデバイス管理部4から代替デバイスディスクリプタを受け取り、レジストリファイル15を検索して仮想バス5の上位にデバイスドライバとしてデバイスA本来のデバイスドライバであるデバドラA(6)をロードする。デバドラA(6)はメモリ上にロードされ、初期化の後、デバイスA(141)を制御するためのデバイス追加処理としてデバイスオブジェクト(501,601)が作成される。
(デバイス追加処理)
仮想ポート1(401)に仮想的に挿されたデバイスA(141)に関して、仮想バス5でデバイス追加処理が実行されるとデバイスオブジェクト501が作成される。そして、デバドラA(6)でデバイス追加処理が実行されるとデバイスオブジェクト601が作成され、デバイスオブジェクト501とデバイスオブジェクト601とが互いにポインタを格納することで関連付けが完了し、デバイス追加処理が終了する。
(セッション番号)
デバイス管理部4はプラグアンドプレイマネジャ14に通知した情報(デバイスディスクリプタと仮想ポート番号)とセッション番号とを、仮想バス5に通知する(図示せず)。この通知は、ホストOS(8)とゲストOS(9)をつなぐ仮想マシンバス(VM Bus)を介してメッセージを送受信して実現している。仮想バス5はセッション番号としてセッション1を受け取り、デバイスオブジェクト501にセッション1を付与する。
付与されたセッション番号により、デバイスオブジェクト201,301,501,601が関連付けられる。このセッション番号での関連付けがなされてはじめて、上位のドライバであるデバドラA(6)が受けたIRPが最下位のバスドライバ2に受け渡される状態になり、ゲストOS(9)はホストOS(8)を介してデバイスA(141)を制御できる。
(効果)
図1の構成によれば、本発明のデバイス管理部4がデバイス管理テーブル46(図5)を参照し、挿されたデバイスの適/不適を判定することで、適と判断した場合には、ゲストOS(9)のプラグアンドプレイマネジャ14にプラグインイベントを通知し、ゲストOS(9)におけるエニュメレーションを許可できる。不適と判断した場合にはゲストOS(9)のプラグアンドプレイマネジャ14にプラグインイベントを通知しないのでエニュメレーションを抑止できる。また、当該デバイスはホストOS(8)のポートリダイレクタ3が占有することで、ゲストOS(9)やホストOS(8)の他のドライバやミドル、アプリが制御できない隔離状態を実現している。
デバイス管理部4が適と判断し、ゲストOS(9)のプラグアンドプレイマネジャ14にプラグインイベントを通知する際、デバイス種別ないし機種毎に割り当てられた仮想ポート番号を通知することで、ゲストOS(9)のプラグアンドプレイマネジャ14やアプリやミドルにはいつも同じポートに同じ(同種の)デバイスが挿されたように見せることができる。これにより、デバイスを不意にホストOS(8)の別のポートに挿しても(そのデバイスに関し、そのポートも許可されていれば)プラグアンドプレイマネジャ14は同じポートに挿したと認識するので、デバイスのインストール回数は1機種あたり1回で済ませられる。これにより、アプリケーションやミドルはデバイスが挿されたポートを検索する手間も省ける。
デバイス管理テーブル46にデバイス毎に挿しても良いポートが記載されていることで、不意に別の許可されていないポートに挿した場合、エニュメレーションは抑止される。これにより、利用者はデバイスを間違ったポートに挿したと認識できる。
図2は本発明の第1の実施形態でデバイスをリセット後、デバイスを再接続する際の処理手順を示す図である。
図2を用いて、デバイスA(141)にリセットがかかり、デバイスA(141)が再起動した後、同じPCのゲストOS(9)ないしVM上の仮想バス5でプラグアンドプレイするまでの処理を説明する。簡単のため、図1と重複する処理について説明を省略する(他の図面を用いた説明においても同様)。また、同一の構成には、同一の符号を付す(他の図面においても同様)。
(リセット)
図2において、ゲストOS(9)上のアプリA(711)ないしミドルA(701)がデバイスA(141)をリセットし、デバイスA(141)が再起動すると、ホストOS(8)はポート5(105)にプラグインを検知する。
リセットはこの他、デバイスA(141)の瞬断や操作により電源が落ちた場合、ポート5(105)で抜き挿しされた場合等に発生する。
(エニュメレーションとデバイス追加処理)
ホストOS(8)上でエニュメレーションが進行すると、バスドライバ2にデバイスオブジェクト202が、ポートリダイレクタ3にデバイスオブジェクト302が作成される。そして、デバイス追加処理でセッション番号としてセッション2が付与される。このときデバイス管理部4は、デバイス管理テーブル46のデバイスAにおけるセッション番号5005の値を更新する。バスドライバ2はデバイス追加処理を終えると、デバイス管理部4にプラグインイベントを通知する。
(適・不適の判定と仮想ポートの特定)
プラグインイベントを受けたデバイス管理部4は、[1]受け渡されたデバイスディスクリプタが既知のデバイスのデバイスディスクリプタと一致し、[2]そのデバイスが予め許可されたポートに挿されていて、[3]仮想バス5に既にプラグアンドプレイされており、started状態である同一機種のデバイスが存在しない、という以上の3条件を満足するか確認する。満足されていると、エニュメレーションが妥当であることを意味し、デバイスディスクリプタからデバイスの機種を特定し、機種ごとに割り当てられた仮想ポートのポート番号から、該当する仮想ポートのポート番号を仮想ポート1(401)に特定する。デバイスA(141)がリセットした前後で挿されているデバイスの数やポート番号に変化が無いので、デバイス管理部4における処理は図1による説明と同じ結果にいたる。
(ゲストOS上の仮想バスへのエニュメレーション)
プラグアンドプレイマネジャ14はデバイス管理部4から代替デバイスディスクリプタを受け取り、レジストリファイル15を検索して仮想バス5の上位にデバイスドライバとして、デバイスA本来のデバイスドライバであるデバドラA(6)を特定する。デバドラA(6)はメモリ上にロードされ初期化済みなので、デバイスA(141)を制御するためのデバイス追加処理としてデバイスオブジェクト(502,602)が作成される。
(デバイス追加処理)
仮想ポート1(401)に仮想的に挿されたデバイスA(141)に関して、仮想バス5でデバイス追加処理が実行されるとデバイスオブジェクト502が作成され、デバドラA(6)でデバイス追加処理が実行されるとデバイスオブジェクト602が作成される。そして、デバイスオブジェクト502とデバイスオブジェクト602とが互いにポインタを格納することで関連付けが完了し、デバイス追加処理が終了する。
(セッション番号)
図2においてデバイスA(141)のリセット後に付与されたセッション番号はセッション2となり、デバイスオブジェクト202,302,502,602が関連付けられる。このセッション番号での関連付けがなされてはじめて、上位のドライバであるデバドラA(6)が受けたIRPが最下位のバスドライバ2に受け渡される状態になり、ゲストOS(9)はホストOS(8)を介してデバイスA(141)を制御できる。これにより、ミドルA(701)とアプリA(711)はリセット後もデバイスA(141)を制御できる。
(効果)
図2の構成によれば、本発明のデバイス管理部4がデバイス管理テーブル46(図5)を参照し、挿されたデバイスの適/不適を判定することで、電源が再投入される等してデバイスがリセットされたり、ポートに抜き挿ししたりしたためプラグインされたと認識されたデバイスについて、リセットや抜き挿しの前後であっても同一個体と認識できる。リセットや抜き挿しの前後で同一個体と認識することで、ゲストOS(9)におけるエニュメレーションを許可し、ミドルやアプリはリセットや抜き挿しの前後で同一デバイスを制御できる。
また、リセットや抜き挿しの前後でポート番号は変わらないので、アプリケーションやミドルはデバイスが挿されたポートを検索する手間も省ける。
図3は本発明の第1の実施形態で同一機種が2台挿された状態での処理手順を示す図である。
図3を用いて、同一機種を2台挿したときのホストOS側の処理を説明する。
(2台目)
図3においてデバイスA(141)は既にプラグアンドプレイを終え、ゲストOS(9)上のミドルA(701)とアプリA(711)が制御している。この状況でデバイスA(142)をポート6(106)に挿すとホストOS(8)上でエニュメレーションが進行し、デバイス追加処理の結果、バスドライバ2にデバイスオブジェクト203が、ポートリダイレクタ3にデバイスオブジェクト303がそれぞれ作成される。また、図示していないがセッション番号は付与される。
(デバイス管理へのプラグインイベント通知)
デバイス追加処理に成功し完了するとポートリダイレクタ3はデバイス管理部4に対し、ポート6(106)にデバイスA(142)がプラグインされた旨を示すイベントを通知し、当該デバイスディスクリプタとセッション番号を受け渡し、処理を終了する。
(適・不適の判定と仮想ポートの特定)
プラグインイベントを受けたデバイス管理部4は、既にstarted状態にある同一機種のデバイスA(141)が、仮想バス5にプラグアンドプレイされているので(条件[3]を満たしていないので)、このデバイスA(142)を不適と判断する。不適と判断したデバイスA(142)に関して、プラグアンドプレイマネジャ14にプラグインイベントの通知は行わない。引き続きデバイス管理部4は、判断材料となったデバイスディスクリプタとポート番号とデバイスA(141)のデバイスディスクリプタと判断結果と判断した時刻をログ41に書き込み処理を終了する。
(デバイス放置)
ポートリダイレクタ3はデバイス追加処理とデバイス削除処理と電文の中継処理に機能が限定されるので、この後自発的にデバイスA(142)を制御することは無い。そのため、デバイスA(142)は初期化ないし活性化されないまま、ポート6(106)につながった状態で初期化ないし活性化を待ち続ける。
(ログの保存場所)
本発明の第1の実施形態において、デバイス管理部4が書き込んだログ41はデバイス管理部4が動作しているホストOS(8)がマウントしているストレージデバイスにファイルとして保存される。
(効果)
図3の構成によれば、本発明のデバイス管理部4がデバイス管理テーブル46(図5)を参照し、挿されたデバイスの適/不適を判定することで、同一機種のデバイスが既にエニュメレーションされた状態で、2台目以後同一機種のデバイスが挿されると不適と判断し、ゲストOS(9)のプラグアンドプレイマネジャ14にプラグインイベントを通知しないので、2台目以後同一機種のデバイスのエニュメレーションを抑止できる。これにより、ミドルやアプリの誤作動や、デバイスのすり替えを防げる。また、当該デバイスはホストOS(8)のポートリダイレクタ3が占有することで、ゲストOS(9)やホストOS(8)の他のドライバやミドル、アプリが制御できない隔離状態を実現している。
図4は本発明の第1の実施形態で別機種のデバイスが挿された時の処理手順を示す図である。
図4を用いて、他機種のデバイスを挿した後、ゲストOSないしVM上の仮想バスでプラグアンドプレイするまでの処理を説明する。簡単のため、図1と重複する処理について説明を省略する。
(別デバイスのプラグイン)
図4において、ゲストOS(9)上のアプリA(711)ないしミドルA(701)がデバイスA(141)を制御している最中に、ホストOS(8)がデバイスB(143)のプラグインを検知する。
(エニュメレーションとデバイス追加処理)
ホストOS(8)上でデバイスB(143)のエニュメレーションが進行すると、バスドライバ2にデバイスオブジェクト204が、ポートリダイレクタ3にデバイスオブジェクト304が作成される。また、デバイス追加処理でセッション番号としてセッション3が付与される。バスドライバ2はデバイス追加処理を終えるとデバイス管理部4にプラグインイベントを通知する。
(適・不適の判定と仮想ポートの特定)
プラグインイベントを受けたデバイス管理部4は、デバイスB(143)に関して、[1]受け渡されたデバイスディスクリプタが既知のデバイスのデバイスディスクリプタと一致し、[2]そのデバイスが予め許可されたポートに挿されていて、[3]仮想バス5に既にプラグアンドプレイされており、started状態である同一機種のデバイスが存在しない、という以上の3条件を満足するか確認する。満足されていると、エニュメレーションが妥当であることを意味し、デバイスディスクリプタからデバイスの機種を特定し、機種ごとに割り当てられた仮想ポートのポート番号を特定する。つまり、デバイス管理テーブル46(図5参照)にその旨を登録する。図4においてデバイスB(143)の仮想ポートは仮想ポート3(402)である。
(ゲストOS上の仮想バスへのエニュメレーション)
プラグアンドプレイマネジャ14はデバイス管理部4から代替デバイスディスクリプタを受け取り、レジストリファイル15を検索して仮想バス5の上位にデバイスドライバとして、デバイスB本来のデバイスドライバであるデバドラB(62)を特定する。デバドラB(62)はメモリ上にロードされ、デバイスB(143)を制御するためのデバイス追加処理としてデバイスオブジェクト(503,621)が作成される。
(デバイス追加処理)
仮想ポート3(402)に仮想的に挿されたデバイスB(143)に関して、仮想バス5でデバイス追加処理が実行されるとデバイスオブジェクト503が作成される。そして、デバドラB(62)でデバイス追加処理が実行されるとデバイスオブジェクト621が作成され、デバイスオブジェクト503とデバイスオブジェクト621とが互いにポインタを格納することで関連付けが完了し、デバイス追加処理が終了する。
(セッション番号)
図4においてデバイスB(143)の接続後に付与されたセッション番号はセッション3となり、デバイスオブジェクト204,304,503,621が関連付けられる。このセッション番号での関連付けがなされてはじめて、上位のドライバであるデバドラB(62)が受けたIRPが最下位のバスドライバ2に受け渡される状態になり、ゲストOS(9)はホストOS8を介してデバイスB(143)を制御できる。これにより、ミドルB(702)とアプリB(712)はリセット後もデバイスB(142)を制御できる。
(効果)
図4の構成によれば、本発明のデバイス管理部4がデバイス管理テーブル46(図5)を参照し、挿されたデバイスの適/不適を判定することで、既にエニュメレーションされたデバイスと挿されたデバイスとが別機種だと認識し、挿された別機種のデバイスについて適/不適を判定できるので、既にエニュメレーションされたデバイスに影響を及ぼさない。
(デバイス管理部の位置)
図1〜図5による説明の通り、本発明の第1の実施形態のデバイス管理部4はホストOS(8)側に実装され、PCのポートに挿されたUSBデバイスの適・不適を判断し、不適の場合ゲストOS(9)上の仮想バス5への当該デバイスのエニュメレーションを抑止し、当該デバイスを使用できなくしている。
本発明のデバイス管理部4はゲストOS(9)側に実装しても、ポートリダイレクタ3からのプラグインイベントの通知は受けることはできる。よって、プラグインイベントで知らされたPCのポートに挿されたUSBデバイスの適・不適を判断することができ、適と判断した場合ゲストOS(9)上のプラグアンドプレイマネジャ14と仮想バス5にプラグインを通知し、ゲストOS(9)におけるエニュメレーションを許可できる。よって、デバイス管理部4をホストOS(8),ゲストOS(9)のいずれに実装してもかまわない。
また、ポートリダイレクタ3からのプラグインイベント、ゲストOS(9)上のプラグアンドプレイマネジャ14と仮想バス5へのプラグイン通知のいずれも仮想マシンバス(VM Bus)を通るので、本発明のデバイス管理部4を仮想マシンバスに実装してもかまわない。
(ログの保存場所)
本発明の第1の実施形態において、図3の説明の通りデバイス管理部4が書き込んだログ41はデバイス管理部4が動作しているホストOS(8)がマウントしているストレージデバイスにファイルとして保存される。デバイス管理部4をゲストOS(9)に実装した場合、ゲストOS(9)がマウントしているストレージデバイスにファイルとして保存する。原理的にゲストOS(9)は仮想マシンバス(VM Bus)を介してホストOS(8)がマウントしているストレージデバイスにアクセス可能なので、ログ41をゲストOS(9)がマウントしているストレージデバイスに保存してもかまわない。
(効果)
デバイス管理部4をホストOS(8)に実装するため、ログ41をホストOS(8)がマウントしているストレージデバイスに保存することで、ゲストOS(9)が複数動作する環境でも、すべてのログ41をホストOS(8)が管理できる。
≪第2の実施形態≫
次に、本発明の第2の実施形態について、図5と図6を用いて説明する。図中、2はバスのホストコントローラを制御するバスドライバ、3はポートリダイレクタ、42はセキュア通信サービスのクライアントプログラム、43はセキュア通信サービスのサーバプログラム、44はデバイス管理部、45はログ、47はデバイス管理テーブル、51は仮想バス、61はデバドラA、81はローカルPC(ローカルマシン)、82はリモートPC(リモートマシン)、11はルートハブ、12,16はプラグアンドプレイマネジャ(図中では、「P&P Mngr」と表記)、13,17は設定を格納するレジストリファイル、105はポート5、106はポート6、141はデバイスA、201、301、511、611はデバイスオブジェクト(図中では「DO」と表記)、401は仮想ポート1、701はデバイスAの制御ミドルあるミドルA、711はデバイスAを制御するアプリAである。
図6は本発明の第2の実施形態のソフトウェアスタック構成を示す図であり、ローカルPCのポートに挿されたデバイスをデータセンタ内に設置されたリモートPC上の仮想バスでプラグアンドプレイさせる処理手順を示す図である。
図6を用いて、ローカルPCにデバイスを挿した後、リモートPC上の仮想バスでデバイスのプラグアンドプレイをするまでの処理を説明する。なお、本実施形態のローカルPC、リモートPCは、第1の実施形態で説明したハードウェア構成を備え、以下に説明する情報処理を実現する。また、このローカルPC、リモートPCは、前記情報処理を実現するのに必要なコードが記述されたデバイス管理用のプログラムを記憶している。
(デバイス)
図中デバイスA(141)はスキャナやプリンタ等のデバイスの機能を表す。具体的には、デバイスを挿すポートないしバスが規定するプラグアンドプレイに対応する機能、例えばデバイスディスクリプタの応答や、プリンタなら印刷と言ったデバイス本来の機能、電源状態に応じて節電運転する電源モード管理機能からなる。
(エニュメレーション)
ポート5(105)にデバイスA(141)が挿されると、ルートハブ11がデバイスの挿入を検知し、プラグアンドプレイマネジャ12にプラグインイベント(図中では「Plug-in」と表記)を通知する。ローカルPC81のプラグアンドプレイマネジャ12はバスドライバ2にポート5(105)に対し、デバイスA(141)がプラグインした旨伝達し、ポート5(105)に挿したデバイスA(141)からデバイスディスクリプタを読み出し、レジストリファイル13を検索してバスドライバ2の上位にデバイスドライバをロードする。図6において、レジストリファイル13に記載されているデバイスA(141)のデバイスドライバはポートリダイレクタ3である。レジストリファイル13にはデバイスのインストール時に、デバイスディスクリプタの情報とデバイスドライバの名称と所在等情報が記載ないし格納されており、これら情報を参照することでロードすべきデバイスドライバを特定することができる。ローカルPC81において、ポートリダイレクタ3はすでにメモリ上にロードされているのでロードは省略し、ポートリダイレクタ3を初期化してデバイスA(141)を制御するためのデバイス追加処理としてデバイスオブジェクト(201,301)がポートリダイレクタ3とバスドライバ2に作成される。
(デバイスオブジェクト)
デバイスオブジェクト(201,301)はデバイスがプラグアンドプレイされる度にデバイス毎にバスドライバとデバイスドライバ(ローカルPC81においては、ポートリダイレクタ3)に作成される。デバイスオブジェクト(201,301)にはデバイスを制御する際の電文(コマンドとデータ)を格納するバッファへのポインタと、電文を処理するコードを指し示すポインタと、対応するデバイスオブジェクト(201,301)を指し示すポインタとが格納される。
デバイスドライバであってもバスドライバであっても、一般的にドライバは入出力リクエストパケット(IRP)をI/Oマネージャ(不図示)から受け取ると、IRPに対応するデバイスのデバイスオブジェクト(201,301)を参照し、処理した上で、上位ないし下位のドライバにIRPを受け渡しデバイスの制御を実現する。
(デバイス追加処理)
ポート5(105)に挿したデバイスA(141)に関して、バスドライバ2でデバイス追加処理が実行されるとデバイスオブジェクト201が作成され、ポートリダイレクタ3でデバイス追加処理が実行されるとデバイスオブジェクト301が作成される。そして、デバイスオブジェクト201とデバイスオブジェクト301とが互いにポインタを格納することで関連付けが完了し、デバイス追加処理が終了する。ポートリダイレクタ3はデバイスオブジェクト301を作成した際、デバイスオブジェクト301にセッション番号を付与し、デバイスオブジェクトを識別する。デバイスオブジェクト301にはセッション1が付与される。
(セキュア通信)
本発明の第2の実施形態においてローカルPC81はデータセンタ内に設置されたリモートPC82とセキュア通信サービスで接続される。セキュア通信サービスはサーバプログラム43がリモートPC82に、クライアントプログラム42がローカルPC81にそれぞれOSのサービスとして常駐している。ローカルPC81の起動後、クライアントプログラム42が常駐すると、リモートPC82を探索し、リモートPC82で常駐するサーバプログラム43に接続し通信路を確立する。
(デバイス管理部へのプラグインイベント通知)
デバイス追加処理が成功し、完了すると、ローカルPC81のポートリダイレクタ3は、リモートPC82のデバイス管理部44に対し、セキュア通信が確立した通信を介して、ポート5(105)にデバイスがプラグインされた旨を示すイベントを通知し、当該デバイスディスクリプタとセッション番号を受け渡し、処理を終了する。
(デバイス放置)
ポートリダイレクタ3はデバイス追加処理とデバイス削除処理と電文の中継処理に機能が限定されるので、この後自発的にデバイスA(141)を制御することは無い。そのため、デバイスA(141)は初期化ないし活性化されないまま、ポート5(105)につながった状態で初期化ないし活性化を待ち続ける。
(適・不適の判定と仮想ポートの特定)
プラグインイベントを受けたデバイス管理部44はデバイス管理テーブル(第2の実施形態では、符号47。図5参照)を参照し、[1]受け渡されたデバイスディスクリプタが既知のデバイスのデバイスディスクリプタと一致し、[2]そのデバイスが予め許可されたポートに挿されていて、[3]仮想バス5に既にプラグアンドプレイされており、started状態である同一機種のデバイスが存在しない、という以上の3条件を満足するか確認する。条件が満足していると、エニュメレーションが妥当であることを意味し、デバイスディスクリプタからデバイスの機種を特定し、機種ごとに割り当てられた仮想ポートのポート番号を特定する。図6においてデバイスA(141)の仮想ポートは仮想ポート1(401)である。
(いつも同じポートに同じデバイスが挿抜されたと通知)
デバイス管理部44は、デバイス管理テーブル47を参照して、リモートPC82のOSのプラグアンドプレイマネジャ16に、挿抜されたデバイスに対応する代替デバイスディスクリプタと仮想ポートを通知する。これにより、プラグアンドプレイマネジャ16は初回のインストール時に仮想ポート番号と代替デバイスディスクリプタの情報をレジストリファイル17に書き込む。以後、リモートPC82において、同じポートに同じデバイスが挿抜されたと認識する。
(プラグインイベント通知)
リモートPC上のデバイス管理部44はプラグアンドプレイマネジャ16に対してプラグインイベント(図中では「Plug-in」と表記)を通知する。通知の際、デバイスA(141)が挿されているポートは、先に特定した仮想ポート1(401)に置き換えて通知する。プラグアンドプレイマネジャ16は仮想バス51に、仮想ポート1(401)にデバイスA(141)がプラグインした旨通知する。
(仮想バスへのエニュメレーション)
プラグアンドプレイマネジャ16はデバイス管理部44から代替デバイスディスクリプタを受け取り、レジストリファイル17を検索して仮想バス51の上位にデバイスドライバとしてデバイスA本来のデバイスドライバであるデバドラA(61)をロードする。デバドラA(61)はメモリ上にロードされ、初期化の後、デバイスA(141)を制御するためのデバイス追加処理としてデバイスオブジェクト(501,601)が作成される。
(デバイス追加処理)
仮想ポート1(401)に仮想的に挿されたデバイスA(141)に関して、仮想バス51でデバイス追加処理が実行されるとデバイスオブジェクト511が作成される。そして、デバドラA(61)でデバイス追加処理が実行されるとデバイスオブジェクト611が作成され、デバイスオブジェクト511とデバイスオブジェクト611とが互いにポインタを格納することで関連付けが完了し、デバイス追加処理が終了する。
(セッション番号)
デバイス管理部44はプラグアンドプレイマネジャ16に通知した情報(デバイスディスクリプタと仮想ポート番号)とセッション番号を、仮想バス51に通知する(図示せず)。仮想バス51はセッション番号としてセッション1を受け取り、デバイスオブジェクト501にセッション1を付与する。
付与されたセッション番号はサーバプログラム43がクライアントプログラム42との間のセキュア通信で照会し、セッション1の通信セッションを確立する。確立した通信セッションとデバイスオブジェクト201,301,511,611がセッション番号で関連付けられる。このセッション番号での関連付けがなされてはじめて、上位のドライバであるデバドラA(61)が受けたIRPが最下位のバスドライバ2に受け渡される状態になり、リモートPC82はローカルPC81を介してデバイスA(141)を制御できる。
(ログ)
デバイス管理部44は、デバイスのエニュメレーションを不適と判断した際に、判断材料となったデバイスディスクリプタとポート番号とデバイスA(141)のデバイスディスクリプタと判断結果と判断した時刻をログ45に書き込む。
そのほかに、サーバプログラム43は、セキュア通信サービスの起動・停止・異常処理の際、発生した事象に関する情報をログ45に書き込む。
(デバイス管理部の位置)
図6の説明の通り、本発明の第2の実施形態のデバイス管理部44はリモートPC82に実装され、ローカルPC81のポートに挿されたUSBデバイスの適・不適を判断し、不適の場合リモートPC82の仮想バス51への当該デバイスのエニュメレーションを抑止し、当該デバイスを使用できなくしている。
本発明のデバイス管理部44はローカルPC81に実装しても、ポートリダイレクタ3からのプラグインイベントの通知は受けることはできる。よって、プラグインイベントで知らされたポートに挿されたUSBデバイスの適・不適を判断でき、適と判断した場合リモートPC82上のプラグアンドプレイマネジャ16と仮想バス51にプラグインを通知し、リモートPC82におけるエニュメレーションを許可できる。よって、デバイス管理部44をローカルPC81,リモートPC82のいずれに実装してもかまわない。
(ログの保存場所)
本発明の第2の実施形態において、図6の説明の通りデバイス管理部44が書き込んだログ45はデバイス管理部44が動作しているリモートPC82がマウントしているストレージデバイスにファイルとして保存される。デバイス管理部44をローカルPC81に実装した場合、ローカルPC81がマウントしているストレージデバイスにファイルとして保存する。原理的にローカルPC81はネットワーク越しにリモートPC82がマウントしているストレージデバイスにアクセス可能なので、ログ45をリモートPC82がマウントしているストレージデバイスに保存してもかまわない。
(効果)
図6の構成によれば、本発明のデバイス管理部44がデバイス管理テーブル47(図5)を参照し、挿されたデバイスの適/不適を判定することで、適と判断した場合には、リモートPC82のプラグアンドプレイマネジャ14にプラグインイベントを通知し、リモートPC82におけるエニュメレーションを許可できる。不適と判断した場合にはリモートPC82のOSのプラグアンドプレイマネジャ16にプラグインイベントを通知しないのでエニュメレーションを抑止できる。また、当該デバイスはローカルPC81のポートリダイレクタ3が占有することで、ローカルPC81やリモートPC82の他のドライバやミドル、アプリが制御できない隔離状態を実現している。
デバイス管理部44が適を判定しリモートPC82のプラグアンドプレイマネジャにプラグインイベントを通知する際、デバイス種別ないし機種毎に割り当てられた仮想ポート番号を通知することで、リモートPC82のプラグアンドプレイマネジャ16やアプリやミドルにはいつも同じポートにデバイスが挿されたように見せることができる。これにより、デバイスを不意にローカルPC81の別のポートに挿してもプラグアンドプレイマネジャ16は同じポートに挿したと認識するので、デバイスのインストール回数は1機種あたり1回で済ませられる。これにより、アプリケーションやミドルはデバイスが挿されたポートを検索する手間も省ける。
デバイス管理テーブル47にデバイス毎に挿しても良いポートが記載されていることで、不意に別の許可されていないポートに挿した場合、エニュメレーションは抑止される。これにより、利用者はデバイスを間違ったポートに挿したと認識できる。
第2の実施形態のように本発明をリモートアクセスに適用する場合、デバイス管理部44をリモートPC82に実装する構成で、ログ45をリモートPC82がマウントしているストレージデバイスに保存する。これにより、ローカルPC81が遠隔地の複数の拠点で複数台動作する状況でも、すべてのログ45をセンタ内のリモートPC82ないしセンタ内のストレージデバイスに保存するので、センタ側でログを一括管理できる。よって、センタ側でデバイスの状態(接続状況や障害発生状況)が把握できる。
≪その他≫
なお、前記した実施形態は、本発明を実施するための好適なものであるが、その実施形式はこれらに限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変形することが可能である。
例えば、ハードウェア、ソフトウェア、等の具体的な構成について、本発明の趣旨を逸脱しない範囲で適宜変更が可能である。
2…バスのホストコントローラを制御するバスドライバ
3…ポートリダイレクタ
4、44…デバイス管理部(デバイス管理機能)
42…セキュア通信サービスのクライアントプログラム
43…セキュア通信サービスのサーバプログラム
41、45…ログ
46、47…デバイス管理テーブル(許可リストを含む)
5、51…仮想バス
6、61…デバドラA
8…PC上のホストOS(ローカルマシン)
9…ホストOSが提供する仮想マシン実行環境で動作するゲストOS(リモートマシン)
81…ローカルPC(ローカルマシン)
82…リモートPC(リモートマシン)
11…ルートハブ
12、14、16…プラグアンドプレイマネジャ
13、15、17…設定を格納するレジストリファイル
105…ポート5
106…ポート6
141、142…デバイスA
201、301、501、511、601、611…デバイスオブジェクト
401、402…仮想ポート1、3
701…ミドルA
711…アプリA

Claims (10)

  1. リモートマシン上の仮想バスとプラグアンドプレイマネジャと、ローカルマシンおよびローカルマシンに接続されるデバイスとデバイスの接続を検知する手段と、前記リモートマシンないし前記ローカルマシンのいずれかに搭載するデバイス管理機能から構成されるバスシステムであって、
    前記ローカルマシンに前記デバイスを接続すると前記デバイスの接続を検知する手段が前記デバイス管理機能に接続を通知し、前記デバイス管理機能は許可リストと他のデバイスの接続状態を登録するデバイス管理テーブルを参照しエニュメレーションの可否を判断し、可と判断すると前記プラグアンドプレイマネジャが前記仮想バス上でエニュメレーションを実行することを特徴とする仮想バスシステム。
  2. 請求項1記載の前記デバイスの接続を検知する手段であって、
    接続を検知した前記デバイスの前記ローカルマシンにおける接続位置を認識し、
    前記デバイスから前記デバイスのディスクリプタ情報を読み出し、
    前記デバイスのディクリプタ情報と前記接続位置を前記デバイス管理機能に通知することを特徴とした仮想バスシステム。
  3. 請求項2記載の前記デバイスから読み出した前記デバイスのディスクリプタ情報には前記デバイスの固体識別番号を含むことを特徴とする仮想バスシステム。
  4. 請求項1記載の前記許可リストであって前記許可リストには接続を許可されたデバイスのディスクリプタ情報と、接続を許可されたローカルマシンにおける接続位置と、前記デバイスの機種毎に付与される固定値のインスタンスIDとディスクリプタ情報が記載されていることを特徴とする仮想バスシステム。
  5. 請求項1記載の前記デバイス管理機能であって、前記ローカルマシンに接続されたデバイスのディスクリプタが前記許可リストに記載され、且つ、前記許可リストに記載された接続を許可されたローカルマシンにおける接続位置に接続され、且つ、前記ローカルマシンに前記デバイスが同一機種で唯一接続されている場合、接続を許可することを特徴とする仮想バスシステム。
  6. 請求項1記載の前記デバイス管理機能であって、前記デバイス管理機能は前記プラグアンドプレイマネジャに、前記許可リストに記載された前記デバイスの機種毎に付与される固定値のインスタンスIDとディスクリプタ情報を通知し、エニュメレーションを実行させることを特徴とする仮想バスシステム。
  7. 請求項2記載のローカルマシンにおける接続位置であって、前記ローカルマシンのポートの識別子によりローカルマシンにおける接続位置を認識することを特徴とした仮想バスシステム。
  8. 仮想化環境を実現する1以上のコンピュータ上で構成されるローカルマシンとリモートマシンとが仮想的に接続される仮想バスシステムにおいて、
    前記コンピュータの記憶部は、
    前記ローカルマシンが備える実ポートに挿入されるデバイスに関し、少なくとも、前記リモートマシンに通知する代替デバイスディスクリプタ、当該デバイスの挿入が予め許可された実ポートの実ポート番号、および前記リモートマシンが前記デバイスを制御するために仮想的に生成される仮想ポートの仮想ポート番号が登録されるデバイス管理テーブルを記憶しており、
    前記コンピュータの制御部は、
    前記ローカルマシンが備える実ポートにデバイスが挿入されたとき、前記挿入されたデバイスのデバイスディスクリプタを取得する制御と、
    前記取得したデバイスディスクリプタにより、前記デバイス管理テーブルを参照して、前記挿入されたデバイスに関する前記デバイス管理テーブルの登録はすでになされており、前記デバイスは予め許可された実ポートに挿入されており、前記挿入されたデバイスと同種のデバイスが前記実ポートに挿入されていない、という条件を満たすか否かを判定する制御と、
    前記条件を満たしていれば、前記デバイス管理テーブルに登録されている、前記挿入されたデバイスの前記代替デバイスディスクリプタおよび前記仮想ポート番号を前記リモートマシンに通知し、前記リモートマシンにおける前記挿入されたデバイスのエニュメレーションを許可する制御と、
    前記条件を満たしていなければ、前記デバイス管理テーブルに登録されている、前記挿入されたデバイスの前記代替デバイスディスクリプタおよび前記仮想ポート番号を前記リモートマシンに通知せず、前記リモートマシンにおける前記挿入されたデバイスのエニュメレーションを抑止する制御と、を実行する
    ことを特徴とする仮想バスシステム。
  9. 前記制御部は、
    前記リモートマシンによる、前記挿入されたデバイスのリセットおよび再起動が実行されたとき、前記ローカルマシンが備える実ポートに挿入されたデバイスと同種のデバイスが別の実ポートに挿入されたとき、または前記ローカルマシンが備える実ポートに挿入されたデバイスと別種のデバイスが別の実ポートに挿入されたとき、前記条件を満たすか否かを判定する制御を実行する
    ことを特徴とする請求項8に記載の仮想バスシステム。
  10. 仮想化環境を実現する1以上のコンピュータ上で構成されるローカルマシンとリモートマシンとが仮想的に接続される仮想バスシステムにおけるデバイス管理方法において、
    前記コンピュータの記憶部は、
    前記ローカルマシンが備える実ポートに挿入されるデバイスに関し、少なくとも、前記リモートマシンに通知する代替デバイスディスクリプタ、当該デバイスの挿入が予め許可された実ポートの実ポート番号、および前記リモートマシンが前記デバイスを制御するために仮想的に生成される仮想ポートの仮想ポート番号が登録されるデバイス管理テーブルを記憶しており、
    前記コンピュータの制御部は、
    前記ローカルマシンが備える実ポートにデバイスが挿入されたとき、前記挿入されたデバイスのデバイスディスクリプタを取得するステップと、
    前記取得したデバイスディスクリプタにより、前記デバイス管理テーブルを参照して、前記挿入されたデバイスに関する前記デバイス管理テーブルの登録はすでになされており、前記デバイスは予め許可された実ポートに挿入されており、前記挿入されたデバイスと同種のデバイスが前記実ポートに挿入されていない、という条件を満たすか否かを判定するステップと、
    前記条件を満たしていれば、前記デバイス管理テーブルに登録されている、前記挿入されたデバイスの前記代替デバイスディスクリプタおよび前記仮想ポート番号を前記リモートマシンに通知し、前記リモートマシンにおける前記挿入されたデバイスのエニュメレーションを許可するステップと、
    前記条件を満たしていなければ、前記デバイス管理テーブルに登録されている、前記挿入されたデバイスの前記代替デバイスディスクリプタおよび前記仮想ポート番号を前記リモートマシンに通知せず、前記リモートマシンにおける前記挿入されたデバイスのエニュメレーションを抑止するステップと、を実行する
    ことを特徴とするデバイス管理方法。
JP2010005047A 2010-01-13 2010-01-13 仮想バスシステム、およびデバイス管理方法 Pending JP2011145827A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010005047A JP2011145827A (ja) 2010-01-13 2010-01-13 仮想バスシステム、およびデバイス管理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010005047A JP2011145827A (ja) 2010-01-13 2010-01-13 仮想バスシステム、およびデバイス管理方法

Publications (1)

Publication Number Publication Date
JP2011145827A true JP2011145827A (ja) 2011-07-28

Family

ID=44460631

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010005047A Pending JP2011145827A (ja) 2010-01-13 2010-01-13 仮想バスシステム、およびデバイス管理方法

Country Status (1)

Country Link
JP (1) JP2011145827A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013200690A (ja) * 2012-03-23 2013-10-03 Fujitsu Ltd 処理システム、機器管理装置、及びプログラム
JP2017107445A (ja) * 2015-12-10 2017-06-15 日本電信電話株式会社 情報処理装置、接続デバイス識別方法およびプログラム
US10157163B2 (en) 2014-06-12 2018-12-18 Nec Corporation Computer system, connection management method for remote device, and program recording medium

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013200690A (ja) * 2012-03-23 2013-10-03 Fujitsu Ltd 処理システム、機器管理装置、及びプログラム
US9253039B2 (en) 2012-03-23 2016-02-02 Fujitsu Limited Device management system and device management apparatus
US10157163B2 (en) 2014-06-12 2018-12-18 Nec Corporation Computer system, connection management method for remote device, and program recording medium
JP2017107445A (ja) * 2015-12-10 2017-06-15 日本電信電話株式会社 情報処理装置、接続デバイス識別方法およびプログラム

Similar Documents

Publication Publication Date Title
US11151225B2 (en) License management in pre-boot environments
JP4805116B2 (ja) 情報処理システム、情報処理システムの制御方法、サービス利用装置及びサービス提供装置
KR101453266B1 (ko) 서비스 프로세서 컴플렉스 내의 데이터 저장을 위한 요구 기반 usb 프록시
US8997090B2 (en) Installing an operating system in a host system
US7930371B2 (en) Deployment method and system
JP6067771B2 (ja) ネットワークインターフェースコントローラ情報の帯域外取得
JP5333579B2 (ja) 管理サーバ、ブートサーバ、ネットワークブートシステムおよびネットワークブート方法
US9912535B2 (en) System and method of performing high availability configuration and validation of virtual desktop infrastructure (VDI)
JP2010152704A (ja) 計算機システムの運用管理システム及び管理方法
US8874891B2 (en) Systems and methods for activation of applications using client-specific data
US20110296404A1 (en) Systems and methods for host-level distributed scheduling in a distributed environment
JP2009140194A (ja) 障害回復環境の設定方法
JP2008532161A (ja) ドライバのインストール
US20110083004A1 (en) Performing recovery of a headless computer
WO2016062146A1 (zh) 序列号信息的更新方法、装置及终端
JP2010219725A (ja) ネットワーク装置および外部記憶装置をネットワーク上に公開する方法
US20220244942A1 (en) Selecting and sending subset of components to computing device prior to operating system install
US9058231B2 (en) Deployment of operating systems with detection of loop conditions
JP2007183837A (ja) 環境設定プログラム、環境設定システムおよび環境設定方法
JP2011145827A (ja) 仮想バスシステム、およびデバイス管理方法
JP4982454B2 (ja) 情報処理方法および情報処理システム
JP2016025656A (ja) Ipアドレスの帯域外設定
JP2023544001A (ja) アクセラレータカードのセキュリティモードの静的構成
JP7084160B2 (ja) 起動制御装置、起動制御システム、起動制御方法、及び、起動制御プログラム
JP6051798B2 (ja) ファームウェア検証システム、ファームウェア検証方法およびファームウェア検証プログラム