(57)【特許請求の範囲】
【請求項１】
複数のオペレーティングシステム（以下、ＯＳ）夫々に対応するハードウェア資源を制御する制御手段を備え、複数のＯＳを実行させる情報処理装置であって、
前記制御手段は、
各ＯＳからのハードウェア資源への入出力命令を捕捉する捕捉手段と、
該捕捉手段が捕捉した前記入出力命令を前記ハードウェア資源へ直接的に与えて制御する直接制御手段と、
前記ハードウェア資源における動作をエミュレートし、前記捕捉手段が捕捉した前記入出力命令へ応答するエミュレータと、
前記直接制御手段により制御している場合に、前記捕捉手段が捕捉した入出力命令が、特定のハードウェア資源の停止状態への遷移を指示する状態制御命令であるか否かを判断する第１判断手段と、
前記エミュレータにより、制御している場合に、前記捕捉手段が捕捉した入出力命令が、特定のハードウェア資源の稼働状態への遷移を指示する状態制御命令であるか否かを判断する第２判断手段と、
前記第１判断手段が前記特定のハードウェア資源の停止状態への遷移を指示する状態制御命令であると判断した場合、前記状態制御命令であると判断した命令より後に捕捉した当該ＯＳから前記特定のハードウェア資源への前記入出力命令を渡す先を前記エミュレータへ切り替え、前記第２判断手段が、稼動状態への遷移を指示する状態制御命令であると判断した場合、前記状態制御命令であると判断した命令および以後に捕捉した当該ＯＳから前記特定のハードウェア資源への前記入出力命令を渡す先を前記直接制御手段へ切り替える切替手段と
を備える情報処理装置。
【請求項２】
前記ＯＳは、前記制御手段を、
各ＯＳ上で実行されるアプリケーションプログラムの実行状態を取得する状態取得手段、及び
該状態取得手段が取得した実行状態に応じて、前記状態制御命令を発行する手段
として機能させるようにしてある請求項１に記載の情報処理装置。
【請求項３】
前記ＯＳは、前記制御手段を、
該ＯＳに対応するハードウェア資源の電力供給状態を遷移させる場合、前記入出力命令を出力するよりも前に、前記電力供給状態を遷移させることを示す状態遷移通知を前記判断手段へ通知する手段として機能させるようにしてあり、
前記判断手段は、前記状態遷移通知を受けた場合に判断を行なうようにしてある請求項１又は２に記載の情報処理装置。
【請求項４】
前記ＯＳは、前記制御手段を、
該ＯＳの処理結果を受け付ける外部装置から該外部装置の稼働状況を示す稼働状況通知を受け付け、受け付けた外部装置の稼働状況通知が示す稼働状況に応じて前記状態制御命令を発行する手段として機能させるようにしてある請求項１に記載の情報処理装置。
【請求項５】
前記制御手段は、
各ＯＳに対応する外部装置から、該外部装置の稼働状況を示す稼働状況通知を受け付ける手段を更に備え、
前記入出力命令を捕捉するより前に、外部装置から稼働状況通知を受け付けた場合に、前記判断手段による判断を行なうようにしてある請求項４に記載の情報処理装置。
【請求項６】
複数のＯＳ夫々に対応するハードウェア資源の制御を行ない、情報処理装置に複数のＯＳを実行させる情報処理装置の制御方法であって、
各ＯＳからのハードウェア資源への入出力命令を捕捉し、
捕捉した入出力命令を前記ハードウェア資源へ直接的に与えて制御する直接制御手段により制御している場合に、捕捉した入出力命令が、特定のハードウェア資源の停止状態への遷移を指示する状態制御命令であるか否かを判断し、
前記ハードウェア資源における動作をエミュレートし、捕捉した入出力命令へ応答するエミュレータにより制御している場合に、捕捉した入出力命令が、特定のハードウェア資源の稼働状態への遷移を指示する状態制御命令であるか否かを判断し、
前記特定のハードウェア資源の停止状態への遷移を指示する状態制御命令であると判断した場合、前記状態制御命令であると判断した命令より後に捕捉した当該ＯＳから前記特定のハードウェア資源への前記入出力命令を渡す先を前記エミュレータへ切り替え、稼動状態への遷移を指示する状態制御命令であると判断した場合、前記状態制御命令であると判断した命令および以後に捕捉した当該ＯＳから前記特定のハードウェア資源への前記入出力命令を渡す先を前記直接制御手段へ切り替える情報処理装置の制御方法。
【請求項７】
コンピュータに、複数のＯＳ夫々に対応するハードウェア資源の割り当て及び制御を行なわせ、複数のＯＳを実行させるコンピュータプログラムであって、
コンピュータを、
各ＯＳからのハードウェア資源への入出力命令を捕捉する捕捉手段、
該捕捉手段が捕捉した前記入出力命令を前記ハードウェア資源へ直接的に与えて制御する直接制御手段、
前記ハードウェア資源における動作をエミュレートし、前記捕捉手段が捕捉した前記入出力命令へ応答するエミュレータ、
前記直接制御手段により制御している場合に、前記捕捉手段が捕捉した入出力命令が、特定のハードウェア資源の停止状態への遷移を指示する状態制御命令であるか否かを判断する第１判断手段、
前記エミュレータにより、制御している場合に、前記捕捉手段が捕捉した入出力命令が、特定のハードウェア資源の稼働状態への遷移を指示する状態制御命令であるか否かを判断する第２判断手段、
前記第１判断手段が前記特定のハードウェア資源の停止状態への遷移を指示する状態制御命令であると判断した場合、前記状態制御命令であると判断した命令より後に捕捉した当該ＯＳから前記特定のハードウェア資源への前記入出力命令を渡す先を前記エミュレータへ切り替え、前記第２判断手段が、稼動状態への遷移を指示する状態制御命令であると判断した場合、前記状態制御命令であると判断した命令および以後に捕捉した当該ＯＳから前記特定のハードウェア資源への前記入出力命令を渡す先を前記直接制御手段へ切り替える切替手段
として機能させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一の情報処理装置を仮想的に複数の情報処理装置として動作させることを可能にする仮想化技術が適用される情報処理装置に関する。特に、仮想化技術によって実行される複数のＯＳと、ハードウェア資源との間の入出力制御の方式を切り替えることが可能な情報処理装置、情報処理装置の制御方法及びコンピュータプログラムに関する。
【背景技術】
【０００２】
１つのコンピュータ装置（ホストマシン）を論理的に分割し、仮想的に複数の独立したコンピュータ装置（仮想マシン）として動作することを実現する仮想化技術が普及している。仮想化技術により、各仮想マシンによって使用されるハードウェア資源及び種々のハードウェア資源の組み合わせについては、ホストマシンを構成する実ハードウェア資源の物理的な構成に拠らない柔軟な分割・統合が実現される。
【０００３】
仮想化技術により、仮想マシンは夫々独立してオペレーションシステム（以下、ＯＳという）、及びＯＳ上で動作するアプリケーションプログラムを実行する。仮想マシンは、ＯＳ及びアプリケーションプログラムに基づく動作に応じて、ホストマシン上のハードウェア資源へのアクセス及びハードウェア資源における様々のイベントの制御を行なう。
【０００４】
ハードウェア資源としては、プロセッサ、プロセッサ上に存在するレジスタ、キャッシュ、メモリ、及び、入出力デバイス等がある。そしてハードウェア資源における様々なイベントとしては、割り込み、例外、初期化、システム管理割り込み等がある。
【０００５】
このような仮想化環境を実現するためには、仮想マシン上で動作する各ＯＳと実ハードウェア資源との入出力制御を仲介するＶＭＭ（Virtual Machine Monitor）と呼ばれるプログラムが実行されている必要がある。ホストマシン上でＶＭＭが実行されることにより、仮想マシンに対応する複数のＯＳの実行、並びに夫々のＯＳからのハードウェア資源へのアクセス及びイベント制御が実現される。
【０００６】
ＶＭＭが実行されることにより、各ＯＳからのハードウェア資源へのアクセス命令及びイベント制御命令が監視・捕捉される。また、ハードウェア資源は空間的又は時間的に分割されて各ＯＳに割り当てられ、捕捉された命令に応じて実際の処理が行なわれる。また、実際のハードウェア資源が存在しない場合であっても、ＯＳからのアクセス命令及びイベント制御命令に対し適宜応答するエミュレーションにより、仮想ハードウェア資源として動作することが可能である。
【０００７】
なお、ＶＭＭによりハードウェア資源を分割する際、特に、コンピュータ装置にバスを介して接続されるＩ／Ｏデバイスへの入出力制御については、ＶＭＭによりＩ／Ｏデバイスの動作をエミュレーションにより実現するエミュレーション方式と、仮想マシン上で動作するＯＳへ実際のＩ／Ｏデバイスを割り当てて直接的にアクセスさせる直接Ｉ／Ｏ方式とがある。
【０００８】
特許文献１及び２には、入出力制御命令に対してエミュレーションにより割り込みを通知する技術が開示されている。特許文献３及び５には、システムプログラム毎にエミュレーション方式及び直接Ｉ／Ｏ方式夫々で動作させ、一つのハードウェア資源で複数のシステムプログラムを動作させる技術が開示されている。また、特許文献５には、システムプログラム動作中であってもエミュレーション方式及び直接Ｉ／Ｏ方式の切り替えが可能な技術が開示されている。
【特許文献１】特開昭６０−０１７５３９号公報
【特許文献２】特開平３−１００８３３号公報
【特許文献３】特開平１−１８５７３３号公報
【特許文献４】特開平２−２０７３６２号公報
【特許文献５】特開平７−９２７６１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
エミュレーション方式では、実Ｉ／Ｏデバイスは不要である。しかしながら、Ｉ／Ｏデバイスの仕様全てをソフトウェア的に再現する必要があるので性能・互換性の問題が起こる可能性が高い。多種多様なＩ／Ｏデバイス夫々に対応させ、任意のＩ／Ｏデバイスの動作をエミュレーションにより再現することは困難である。
【００１０】
直接Ｉ／Ｏ方式では、ＯＳから直接的にＩ／Ｏデバイスへの入出力が行なえるので、高速で且つ信頼性の高い処理を行なうことができる。しかしながら、各ＯＳによってＩ／Ｏデバイスが占有されるので、仮想化技術により１つのホストマシンで複数のＯＳが実行可能であっても、その数に応じてＩ／Ｏデバイスが必要となり非効率的である。
【００１１】
仮想化技術により複数のＯＳが実行されているホストマシンで、一のＯＳが直接Ｉ／Ｏ方式によりＩ／Ｏデバイスを占有している場合であっても、実際にはＩ／Ｏデバイスに対応する処理が実行されていないなど、Ｉ／Ｏデバイスの動作状態が休止状態であるときがある。この場合、一のＯＳが当該Ｉ／Ｏデバイスを占有したままでは他のＯＳは使用できない。他のＯＳにＩ／Ｏデバイスを使用させるためには、夫々のＯＳを停止させ、再起動により、Ｉ／ＯアドレスをＯＳ夫々に展開し直させてＩ／Ｏデバイスを割り当て直す必要がある。しかしながら、処理の開始／終了／休止に応じて当該処理に対応するＩ／Ｏデバイスを占有させるためにＯＳを再起動するのでは利便性が低い。
【００１２】
特許文献５に記載されている技術により、ＯＳ動作中に直接Ｉ／Ｏ方式とエミュレーション方式（入出力シミュレーションモード）とを切り替えることが可能であるが、この場合、方式切り替えの要求がされたときに切り替え可能な条件を満たしているか否かの判定処理が必要となる。
【００１３】
本発明は斯かる事情に鑑みてなされたものであり、直接Ｉ／Ｏ方式に部分的にエミュレーション方式を組み合わせ、各ＯＳからＩ／Ｏデバイスへの入出力制御の方式を、Ｉ／Ｏデバイスの動作状態遷移に応じてＯＳ動作中に切り替え可能な構成とすることにより、Ｉ／Ｏデバイスを効率的に使用させることができる情報処理装置、情報処理装置の制御方法及びコンピュータプログラムを提供することを目的とする。
【００１４】
また、本発明の他の目的は、Ｉ／Ｏデバイスの動作状態が特定の状態へ遷移する場合にのみ入出力制御の方式を切り替える構成とすることにより、エミュレーション方式で再現する動作を特定の状態における動作のみに限定し、仕様全てを再現することなく性能・互換性を高めることが可能な情報処理装置を提供することにある。
【課題を解決するための手段】
【００１５】
第１発明に係る情報処理装置は、複数のＯＳ（Operating System）夫々に対応するハードウェア資源を制御する制御手段を備え、複数のＯＳを実行させる情報処理装置であって、前記制御手段は、各ＯＳからのハードウェア資源への入出力命令を捕捉する捕捉手段と、該捕捉手段が捕捉した前記入出力命令を前記ハードウェア資源へ直接的に与えて制御する直接制御手段と、前記ハードウェア資源における動作をエミュレートし、前記捕捉手段が捕捉した前記入出力命令へ応答するエミュレータと、前記直接制御手段により制御している場合に、前記捕捉手段が捕捉した入出力命令が、特定のハードウェア資源の停止状態への遷移を指示する状態制御命令であるか否かを判断する第１判断手段と、前記エミュレータにより、制御している場合に、前記捕捉手段が捕捉した入出力命令が、特定のハードウェア資源の稼働状態への遷移を指示する状態制御命令であるか否かを判断する第２判断手段と、前記第１判断手段が前記特定のハードウェア資源の停止状態への遷移を指示する状態制御命令であると判断した場合、前記状態制御命令であると判断した命令より後に捕捉した当該ＯＳから前記特定のハードウェア資源への前記入出力命令を渡す先を前記エミュレータへ切り替え、前記第２判断手段が、稼動状態への遷移を指示する状態制御命令であると判断した場合、前記状態制御命令であると判断した命令および以後に捕捉した当該ＯＳから前記特定のハードウェア資源への前記入出力命令を渡す先を前記直接制御手段へ切り替える切替手段とを備える。
【００１６】
第２発明に係る情報処理装置は、前記ＯＳは、前記制御手段を、各ＯＳ上で実行されるアプリケーションプログラムの実行状態を取得する状態取得手段、及び該状態取得手段が取得した実行状態に応じて、前記状態制御命令を発行する手段として機能させるようにしてある。
【００１７】
第３発明に係る情報処理装置は、前記ＯＳは、前記制御手段を、該ＯＳに対応するハードウェア資源の電力供給状態を遷移させる場合、前記入出力命令を出力するよりも前に、前記電力供給状態を遷移させることを示す状態遷移通知を前記判断手段へ通知する手段として機能させるようにしてあり、前記判断手段は、前記状態遷移通知を受けた場合に判断を行なうようにしてある。
【００１８】
第４発明に係る情報処理装置は、前記ＯＳは、前記制御手段を、該ＯＳの処理結果を受け付ける外部装置から該外部装置の稼働状況を示す稼働状況通知を受け付け、受け付けた外部装置の稼働状況通知が示す稼働状況に応じて前記状態制御命令を発行する手段として機能させるようにしてある。
【００１９】
第５発明に係る情報処理装置は、前記制御手段は、各ＯＳに対応する外部装置から、該外部装置の稼働状況を示す稼働状況通知を受け付ける手段を更に備え、前記入出力命令を捕捉するより前に、外部装置から稼働状況通知を受け付けた場合に、前記判断手段による判断を行なうようにしてある。
【００２０】
第６発明に係る情報処理装置の制御方法は、複数のＯＳ夫々に対応するハードウェア資源の制御を行ない、情報処理装置に複数のＯＳを実行させる情報処理装置の制御方法であって、各ＯＳからのハードウェア資源への入出力命令を捕捉し、捕捉した入出力命令を前記ハードウェア資源へ直接的に与えて制御する直接制御手段により制御している場合に、捕捉した入出力命令が、特定のハードウェア資源の停止状態への遷移を指示する状態制御命令であるか否かを判断し、前記ハードウェア資源における動作をエミュレートし、捕捉した入出力命令へ応答するエミュレータにより制御している場合に、捕捉した入出力命令が、特定のハードウェア資源の稼働状態への遷移を指示する状態制御命令であるか否かを判断し、前記特定のハードウェア資源の停止状態への遷移を指示する状態制御命令であると判断した場合、前記状態制御命令であると判断した命令より後に捕捉した当該ＯＳから前記特定のハードウェア資源への前記入出力命令を渡す先を前記エミュレータへ切り替え、稼動状態への遷移を指示する状態制御命令であると判断した場合、前記状態制御命令であると判断した命令および以後に捕捉した当該ＯＳから前記特定のハードウェア資源への前記入出力命令を渡す先を前記直接制御手段へ切り替える。
【００２１】
第７発明に係るコンピュータプログラムは、コンピュータに、複数のＯＳ夫々に対応するハードウェア資源の割り当て及び制御を行なわせ、複数のＯＳを実行させるコンピュータプログラムであって、コンピュータを、各ＯＳからのハードウェア資源への入出力命令を捕捉する捕捉手段、該捕捉手段が捕捉した前記入出力命令を前記ハードウェア資源へ直接的に与えて制御する直接制御手段、前記ハードウェア資源における動作をエミュレートし、前記捕捉手段が捕捉した前記入出力命令へ応答するエミュレータ、前記直接制御手段により制御している場合に、前記捕捉手段が捕捉した入出力命令が、特定のハードウェア資源の停止状態への遷移を指示する状態制御命令であるか否かを判断する第１判断手段、前記エミュレータにより、制御している場合に、前記捕捉手段が捕捉した入出力命令が、特定のハードウェア資源の稼働状態への遷移を指示する状態制御命令であるか否かを判断する第２判断手段、前記第１判断手段が前記特定のハードウェア資源の停止状態への遷移を指示する状態制御命令であると判断した場合、前記状態制御命令であると判断した命令より後に捕捉した当該ＯＳから前記特定のハードウェア資源への前記入出力命令を渡す先を前記エミュレータへ切り替え、前記第２判断手段が、稼動状態への遷移を指示する状態制御命令であると判断した場合、前記状態制御命令であると判断した命令および以後に捕捉した当該ＯＳから前記特定のハードウェア資源への前記入出力命令を渡す先を前記直接制御手段へ切り替える切替手段として機能させる。
【００２２】
第１発明、第６発明及び第７発明では、ＯＳからのハードウェア資源への入出力命令は捕捉手段により捕捉される。捕捉された入出力命令が特定のハードウェア資源の電力供給状態を特定の電力供給状態へ遷移させることを伴なう状態制御命令であるか否かが判断手段により判断される。ＯＳ実行手段からハードウェア資源への入出力命令の制御については、ハードウェア資源の入出力インタフェースへ直接的に入出力命令を与える直接制御手段による制御と、ハードウェア資源による動作をソフトウェア的にエミュレートして、同様の応答を実現するエミュレータによる応答とのいずれもが実現可能に構成される。そして、判断手段により特定のハードウェア資源を特定の電力供給状態へ遷移させる状態制御命令であると判断された場合、前記特定のハードウェア資源に対して直接制御手段による制御からエミュレータによる応答へ、又は、エミュレータによる応答から直接制御手段による制御へ切り替えが可能となる。
【００２３】
第２発明では、ＯＳによって実行されるアプリケーションプログラムの実行状態が取得され、実行状態に応じてハードウェア資源の電力供給状態を変更する状態制御命令がＯＳによって発行される。アプリケーションプログラムの動作状態、即ち実ハードウェアにおける処理を必要とするアプリケーションであるか、又は、起動しているアプリケーションプログラムの実ハードウェアとの入出力の要不要等の状態に応じて直接制御手段による制御又はエミュレータによる応答のいずれかに切り替えられる。状態制御に応じて切り替えられるので、アプリケーションプログラムの動作中であってもハードウェア資源の開放／割当が可能となる。
【００２４】
第３発明では、状態制御命令が発行される場合には事前に、ＯＳから通知がされる。したがって、判断手段は捕捉された入出力命令の内容を常に判断する必要がなく、通知がされた場合のみ判断処理を行えばよく、効率的に処理を行なうことができる。
【００２５】
第４発明では、ＯＳは自身に対応する外部装置（端末装置）からの通知を受けることにより、外部装置における稼働状況を取得する。外部装置における稼働状況に応じてＯＳから状態制御命令が発行される。外部装置の稼働が中断される場合、ＯＳからの動作結果の受け付けを中断する場合等、ハードウェア資源の解放が可能な状態への遷移をＯＳ側で検知が困難が場合でも、外部装置からの通知によって検知が可能であり、有効に実ハードウェアの解放が可能となる。
【００２６】
第５発明では、ＯＳのみならず、制御手段でも外部装置からの通知を受けるようにしてあり、通知を受けた場合のみ判断手段による判断が行なわれる。これにより、判断手段は捕捉された入出力命令の内容を常に判断する必要がなく、効率的に処理を行なうことができる。
なお、本願に開示する情報処理装置の構成要素または構成要素の任意の組合せを、方法、各種装置、各種装置に包含される回路、システム、コンピュータプログラム、記録媒体、データ構造などに適用したものも、他の態様として有効である。
【発明の効果】
【００２７】
本発明による場合、各ＯＳでは自身がハードウェア資源であるＩ／Ｏデバイスに対して発行した入出力命令が、直接制御手段によって直接与えられ、応答がされたか、又は、エミュレータによって応答がされたかを意識することなく、常に対応するハードウェア資源が存在する状態で処理を実行し続けることが可能である。これにより、ＯＳの停止及び再起動を行なうことなしに、ハードウェア資源の開放／割当を行なうことができる。
【００２８】
なお、ハードウェア資源の電力供給状態が休止状態又は停止状態等の特定の電力供給状態への状態遷移を伴なう状態制御命令時に限ってエミュレータによる応答へ切り替えられるようにすることにより、エミュレータはＩ／Ｏデバイスにおける動作全てを再現する必要がなくなる。この場合、エミュレータは休止状態又は停止状態にある場合のＩ／Ｏデバイスからの限定された応答のみを再現できればよい。したがって、エミュレーションによる性能及び互換性の問題の発生を抑制することができる。
【００２９】
本発明による場合、各ＯＳがアプリケーションプログラムの実行状態に応じて状態制御命令を発行するので、アプリケーションプログラムが実行中であっても、実ハードウェア資源が使用されない状態である場合には、直接Ｉ／Ｏ方式からエミュレーション方式へ切り替えられ、他のＯＳへ当該Ｉ／Ｏデバイスを使用させることができる。これにより、少ないハードウェア資源でも、より効率的に多くのＯＳを実行させることができる。
【００３０】
入出力命令が電力供給状態の遷移を伴なうか否かを監視するだけでなく、アプリケーションの実行状態に応じたＯＳからの通知、ＯＳの処理結果を受け付ける外部装置（端末装置）からの稼働状況の通知により、状態遷移命令を予め待ち受けることができるので、より確実なタイミングで制御方式の切り替えができ、Ｉ／Ｏデバイスの開放／割当を行なうことができる。
【発明を実施するための最良の形態】
【００３１】
以下本発明をその実施の形態を示す図面に基づき具体的に説明する。
【００３２】
なお、以下に説明する実施の形態１乃至４では、シンクライアントシステムを実現するシンクライアントサーバに、本発明に係る情報処理装置を適用した場合の例を用いて説明する。
【００３３】
（実施の形態１）
図１は、実施の形態１におけるシンクライアントシステムの構成の概要を模式的に示す説明図である。シンクライアントシステムは、本発明に係る情報処理装置を適用したサーバ装置１と、サーバ装置１にネットワークＮを介して接続される端末装置２，２，…とを含んで構成される。端末装置２，２，…はシンクライアント（thin client）として使用される装置であり、ハードディスク等の大容量の記憶媒体を備えないパーソナルコンピュータ装置によって構成されている。端末装置２，２，…は、液晶表示装置等の表示装置に接続するセットトップボックス（ＳＴＢ：Set Top Box）でも、ＰＤＡ（Personal Digital Assistant）、携帯電話機等の携帯型端末装置でもよい。
【００３４】
サーバ装置１には、一の装置で複数の情報処理装置（仮想マシン）として動作する仮想化技術が適用されており、各端末装置２，２，…に対応するＯＳを起動して実行するようにしてある。図１の説明図に示すように、サーバ装置１はＩ／Ｏデバイス１５，１５，…として複数のグラフィックカード１５１，１５１，…を備えており、後述のＶＭＭ（Virtual Machine Monitor）プログラム１１２が実行されることによって、各グラフィックカード１５１，１５１，…は端末装置に対応するＯＳ１０１，１０１，…夫々に割り当てられる。また、端末装置２からは対応するＯＳ１０１へキーボード、マウス等の入力インタフェースからの入力信号が入力される。各ＯＳ１０１，１０１，…では入力信号に応じて処理が実行され、各ＯＳ１０１，１０１，…は発行するＧＵＩ（Graphical User Interface）に関する描画コマンドを割り当てられているグラフィックカード１５１，１５１，…へ入力する。各グラフィックカード１５１，１５１，…では、入力された描画コマンドに則した画像データが生成され、対応する端末装置２，２，…へ送信される。これにより、映像転送方式によるシンクライアントシステムが実現される。なお、画像データの生成手段は各ＯＳ１０１，１０１，…に割り当てるグラフィックカード１５１，１５１，…に限らず、ソフトウェアプログラムにより描画コマンドに則した画像データを生成して各端末装置２，２，…へ送信する構成、又はＯＳ１０１から発行される描画コマンドを送信する構成としてもよい。
【００３５】
またサーバ装置１は、ＭＰＥＧ（Moving Picture Experts Group）−２デコーダ１５２，１５２，…をＩ／Ｏデバイス１５，１５，…として備えている。ユーザは端末装置２をパーソナルコンピュータ装置として使用し、サーバ装置１で対応して実行されるＯＳ１０１上でＭＰＥＧ−２デコーダ１５２を使用した映像視聴アプリケーションプログラムを実行させることが可能である。ただし、実行されるＯＳ１０１，１０１，…夫々に実Ｉ／Ｏデバイス１５，１５，…のＭＰＥＧ−２デコーダ１５２，１５２，…を割り当てるとすると、サーバ装置１で実現できる仮想マシンの台数分のＭＰＥＧ−２デコーダ１５２，１５２，…が必要となる。シンクライアントを利用する全ユーザが同時に映像視聴アプリケーションプログラムを実行させることは現実的でなく、仮想マシンの台数分のＭＰＥＧ−２デコーダ１５２，１５２，…をサーバ装置１が備えることも現実的でない。
【００３６】
そこで、実施の形態１におけるサーバ装置１は、ｎ台の仮想マシンの動作を実現できるのに対し、仮想マシンの台数よりも少ないｍ台（ｎ＞ｍ）のＭＰＥＧ−２デコーダ１５２，１５２，…を備える構成とする。そしてサーバ装置１は、端末装置に対応するＯＳ１０１を起動するに際し、ＯＳ１０１に初期的にＭＰＥＧ−２デコーダ１５２をエミュレーション方式により割り当てる。各ＯＳ１０１，１０１，…は、デバイスエミュレータ部１２９によって実現されるＭＰＥＧ−２デコーダ１５２，１５２，…に対応するデバイスレジスタ（実デバイスへはアクセスしない）をＩ／Ｏ空間に展開してＭＰＥＧ−２デコーダ１５２，１５２，…を認識する。そして実施の形態１におけるサーバ装置１では、ＯＳ１０１で実際に映像視聴アプリケーションプログラム１１３が実行される場合に、当該ＯＳ１０１からＭＰＥＧ−２デコーダ１５２への入出力制御を直接Ｉ／Ｏ方式に切り替えられるようにする。これにより、ｎ人のユーザが端末装置２，２，…を利用している場合であっても、ｍ台のＭＰＥＧ−２デコーダ１５２，１５２，…で対応可能であり、一部のユーザは端末装置２，２，…を使用しＭＰＥＧ−２映像を視聴することが可能である。
【００３７】
図２は、実施の形態１におけるシンクライアントシステムを構成するサーバ装置１の内部構成を示すブロック図である。サーバ装置１は、ＣＰＵを利用した制御部１０と、ハードディスクを利用した記憶部１１と、ＳＲＡＭ（Static Radom Access Memory）、ＤＲＡＭ（Dynamic Random Access Memory）等を利用した一時記憶領域１２と、ネットワークカードを利用した通信部１３と、ＰＣＩ（Peripheral Component Ｉnterconnect）、ＡＧＰ（Accelerated Graphics Port）等のバスインタフェースを利用した入出力部１４と、該入出力部１４を介して接続される複数のグラフィックカード１５１，１５１，…及び複数のＭＰＥＧ−２デコーダ１５２，１５２，…を含むＩ／Ｏデバイス群１５，１５，…と、ＤＶＤ（Digital Versatile Disk）、ＣＤ−ＲＯＭ等の記憶媒体１７からデータを読み取る補助記憶部１６とを備えている。
【００３８】
記憶部１１には、ＯＳプログラム１１１、ＶＭＭプログラム１１２、及び種々のアプリケーションプログラム１１３，１１３，…が記憶されている。ＯＳプログラム１１１、ＶＭＭプログラム１１２は、ＤＶＤ、ＣＤ−ＲＯＭ等の記憶媒体１７に記憶されており、制御部１０が補助記憶部１６により記憶媒体１７から読み出して記憶部１１に記憶したものでもよい。
【００３９】
ＶＭＭプログラム１１２は、仮想化環境を提供するソフトウェアプログラムである。制御部１０は、記憶部１１からＶＭＭプログラム１１２を読み出して実行することにより、ＶＭＭ１０２として動作し、サーバ装置１が論理的に複数の情報処理装置（仮想マシン＃１〜＃ｎ）として動作する仮想化環境を提供する。ＶＭＭ１０２として動作する制御部１０は基本的に、各ＯＳ１０１，１０１，…へのハードウェア資源の割り当て、及び、ＯＳプログラム１１１を含む各ソフトウェアとハードウェア資源との間での入出力制御、割り込み等を管理する。なお、ＶＭＭプログラム１１２を実行することにより、制御部１０も論理的に分割されて複数（ｎ個）の制御部１０として動作し、夫々独立したＯＳ１０１，１０１，…を実行することが可能となる。
【００４０】
ＯＳプログラム１１１は、Windows（登録商標）、Linux（登録商標）等のＯＳソフトウェアプログラムである。制御部１０は複数の仮想マシンに対応する制御部１０として動作することにより夫々、記憶部１１からＯＳプログラム１１１を読み出して実行する。制御部１０は、ＶＭＭ１０２として動作することにより、又は、ＶＭＭ１０２としての動作を含む仮想環境を管理するサーバ管理部（ホストＯＳ）が動作することにより、端末装置２，２，…からの起動要求を受け付ける。制御部１０は、受け付けた起動要求に対して端末装置２に対応する設定情報を読み出してＯＳ１０１を起動させる。このときに制御部１０はＶＭＭ１０２として動作することにより、起動するＯＳ１０１にＩ／Ｏデバイス群１５，１５，…を割り当てる処理を行なう。
【００４１】
制御部１０は、複数の仮想マシンに対応してＯＳプログラム１１１を実行することにより、各々ＯＳ１０１，１０１，…として動作し、端末装置２，２，…から入力される入力信号に応じてイベント通知、Ｉ／Ｏデバイス群１５，１５，…を含む各ハードウェア資源への制御命令等を発行する。また、制御部１０はＯＳ１０１として動作することにより入力信号に応じて種々のアプリケーションプログラム１１３，１１３，…の起動、終了及び動作を制御する。
【００４２】
一時記憶領域１２には、上述のように制御部１０によって記憶部１１から読み出されるＯＳプログラム１１１、ＶＭＭプログラム１１２、及び種々のアプリケーションプログラム１１３，１１３，…が展開されるのみならず、ＯＳ１０１が実行する処理によって発生する各種情報が一時的に記憶される。なお、一時記憶領域１２も論理的に分割されて各ＯＳ１０１，１０１，…に割り当てられる。
【００４３】
通信部１３は、ネットワークＮを介して端末装置２，２，…との通信を実現するハードウェアである。通信部１３もポート等により論理的に分割され、起動される各ＯＳ１０１，１０１，…に対応して割り当てられる。制御部１０は、端末装置２に対応するＯＳ１０１の起動後、キーボード、マウス等の入力インタフェースから入力信号、及び、グラフィックカード１５１，１５１，…から出力されるビデオ信号を通信部１３により送受信する。
【００４４】
なお、入力インタフェースからの入力信号、及びビデオ信号については、ＫＶＭ（Keyboard／Video／Mouse）スイッチと呼ばれる切り替え器を用い、ネットワークＮとは異なる伝送媒体を介してサーバ装置１と端末装置２，２，…との間で入出力されるように構成されてもよい。又は、グラフィックカード１５１，１５１，…を用いて画像を送信する場合、グラフィックカード１５１，１５１，…内にネットワークコントローラ機構を備え、ビデオ信号を割り当てられたＯＳ１０１に対応する端末装置２へ送信するようにしてもよい。更にグラフィックカード１５１，１５１，…内に入力信号をもＩＰパケット化する機構を備え、グラフィックカード１５１，１５１，…及びネットワークＮを介してＯＳ１０１と端末装置２との間で入力信号、ビデオ信号が入出力されるように構成されてもよい。
【００４５】
図３は、実施の形態１におけるサーバ装置１の制御部１０により実現される機能を概念的に示すブロック図である。
【００４６】
制御部１０はＶＭＭプログラム１１２を記憶部１１から読み出して実行することにより、ＶＭＭ１０２として動作して仮想化環境を実現する。詳細には、ＶＭＭプログラム１１２は制御部１０がＩ／Ｏ命令捕捉部１２１、Ｉ／Ｏ監視部１２２、Ｉ／Ｏバス切替部１２３、Ｉ／Ｏ管理部１２４、割り込み入力切替部１２５、仮想割り込み生成部１２６、Ｉ／Ｏアドレス変換部１２７、割り込みハンドラ１２８、デバイスエミュレータ部１２９として機能することが可能なように構成されている。
【００４７】
制御部１０はＩ／Ｏ命令捕捉部１２１として機能することにより、各ＯＳ１０１，１０１，…からのＩ／Ｏデバイス１５，１５，…への入出力命令を捕捉する。
【００４８】
制御部１０はＩ／Ｏバス切替部１２３として機能することにより、Ｉ／Ｏ命令捕捉部１２１が捕捉した入出力命令が、直接Ｉ／Ｏ方式で割り当てられているＩ／Ｏデバイス１５への命令である場合には、入出力命令をＩ／Ｏアドレス変換部１２７へ渡し、エミュレーション方式で割り当てられているＩ／Ｏデバイス１５への命令である場合には、入出力命令をデバイスエミュレータ部１２９へ渡すように切り替える。
【００４９】
制御部１０は、割り込み入力切替部１２５として機能することにより、実Ｉ／Ｏデバイス１５からの割り込み及びデバイスエミュレータ部１２９からの割り込みを切り替えて仮想割り込み生成部１２６へ渡す。
【００５０】
制御部１０はＩ／Ｏ監視部１２２として機能することにより、Ｉ／Ｏ命令捕捉部１２１が捕捉した入出力命令の内、特定のＩ／Ｏデバイス１５の状態遷移を伴なう入出力命令を判別する。
【００５１】
制御部１０は、Ｉ／Ｏ管理部１２４として機能することにより、Ｉ／Ｏ監視部１２２で判別した入出力命令に基づいてＩ／Ｏバス切替部１２３及び割り込み入力切替部１２５へ切り替えを指示する。
【００５２】
また、制御部１０は仮想割り込み生成部１２６として機能することにより、割り込み入力切替部１２５から渡される割り込みを仮想マシン夫々に対する割り込みとして生成し、対応する仮想マシンとして動作する各ＯＳへ通知する。
【００５３】
制御部１０は、Ｉ／Ｏアドレス変換部１２７として機能することにより、入出力命令に含まれるＩ／Ｏアドレスを実Ｉ／Ｏデバイス１５のＩ／Ｏアドレスに変換する。そして制御部１０は、割り込みハンドラ１２８として機能することにより、各Ｉ／Ｏデバイス１５，１５，…から割り込みコントローラ１５３を介して出力される割り込み信号を検知して、実Ｉ／Ｏデバイス１５のデバイスレジスタへの書き込み／読み出し処理を行ない、ＯＳ１０１へ返す処理を行なう。Ｉ／Ｏアドレス変換部１２７、割り込みハンドラ１２８は、直接Ｉ／Ｏ方式でＩ／Ｏデバイス１５，１５，…が割り当てられている際に機能する。
【００５４】
制御部１０は、デバイスエミュレータ部１２９として機能することにより、入出力命令に対してエミュレーションによりデバイスの動作を再現して応答を返す。なお、デバイスエミュレータ部１２９は、各Ｉ／Ｏデバイス１５，１５，…の特定の状態における動作のみを再現するように構成されている。なお、ＶＭＭプログラム１１２に含まれるデバイスエミュレータ部１２９の機能については、別途デバイスエミュレータ部１２９としての機能のみを実現するプログラムとして構成され、制御部１０が当該プログラムを読み出して実行することにより、デバイスエミュレータ部１２９として機能する専用の仮想マシン（ＯＳ）上で動作するように構成されていてもよい。また制御部１０は、デバイスエミュレータ部１２９として機能するに際し、動作を再現する対象となるＩ／Ｏデバイス１５，１５，…とは別の実ハードウェア資源を利用し、当該実ハードウェア資源へは直接的に入出力命令及び割り込みを入出力する場合もある。
【００５５】
制御部１０は、ＶＭＭ１０２としての動作によって実現される仮想化環境上で複数のＯＳプログラム１１１を読み出して実行することにより、複数のＯＳ１０１，１０１，…を動作させる。ＯＳプログラム１１１は、制御部１０がＩ／Ｏデバイス１５，１５，…への入出力命令を発行するデバイスドライバ１０３、及び割り込みを検知して処理する割り込みハンドラ１０４としての機能を発揮するように構成される。
【００５６】
制御部１０によって動作される各ＯＳ１０１，１０１，…は、各Ｉ／Ｏデバイス１５，１５，…の電力供給状態を制御することが可能である。Ｉ／Ｏデバイス１５，１５，…の電力供給状態の制御はＡＣＰＩの仕様に従った状態制御命令をＯＳ１０１が発行することにより実現される。ＡＣＰＩの仕様におけるデバイスの状態制御命令には、以下の４つの動作状態が定義されている。
Ｄ０：電源オン、全機能が動作（稼働状態）、
Ｄ１／Ｄ２：低消費電力モード（Ｄ１／Ｄ２の差異はデバイスによる）、
Ｄ３：電源オフ（停止状態）
【００５７】
なお、各状態におけるデバイスコンテキスト、電源状態の詳細については、デバイスの種別、及びデバイスのベンダー特有に実装される。
【００５８】
Ｉ／Ｏデバイス１５，１５，…もこれに応じて、上述のＡＣＰＩの仕様に従った電力供給状態の制御命令に対応するように構成されている。特に、ＰＣＩバスインタフェースを備えるＩ／Ｏデバイス１５，１５，…への制御命令については、ＰＣＩＳＩＧ（PCＩ Special Ｉnterest Group）により、デバイスの状態確認、状態遷移命令、復帰イベント通知命令等が定義されている。
【００５９】
実施の形態１におけるサーバ装置１では、Ｉ／Ｏデバイス１５，１５，…への入出力命令でデバイスの電力供給状態の状態制御を行なう例として、上述のＡＣＰＩの仕様に準じた制御命令を利用する。そして、ＶＭＭプログラム１１２は、各Ｉ／Ｏデバイス１５，１５，…の電力供給状態がＡＣＰＩにおけるＤ０となる場合に直接Ｉ／Ｏ方式で入出力制御を行ない、Ｄ３を特定の状態として定義し、電力供給状態がＤ３となる場合に限りエミュレーション方式で入出力制御を行なうように構成する。つまり、ＯＳ１０１がＩ／Ｏデバイス１５，１５，…を使用した動作を行なう場合には直接Ｉ／Ｏ方式で使用させ、ＯＳ１０１からＩ／Ｏデバイス１５，１５，…が認識されているのみで使用されない場合にはエミュレーション方式で使用させるように制御する。したがって、Ｉ／Ｏ管理部１２４として機能する制御部１０は、Ｉ／Ｏ監視部１２２で判別した入出力命令がＤ０への状態遷移を伴なう場合に直接Ｉ／Ｏ方式による入出力制御へ切り替え、Ｄ３への状態遷移を伴なう場合にエミュレーション方式による入出力制御へ切り替えるように、Ｉ／Ｏバス切替部１２３及び割り込み入力切替部１２５へ切り替えを指示する。例えば、コンフィグレーションレジスタを読み出して出力するのみの応答で足りるような場合、エミュレーション方式で応答を実現するように切り替える。この場合、エミュレーション方式で実現できる機能は、上述のようなコンフィグレーションレジスタの読み出し等の限られた構成のみで済む。これにより、デバイスエミュレータ部１２９としての機能は、最小限のＰＣＩコンフィグレーションスペースでの入出力を再現できればよく、最小限の構成でよいので互換性の問題が発生する可能性が低い。
【００６０】
このとき各ＯＳ１０１，１０１，…では、Ｉ／Ｏデバイス１５，１５，…へ直接Ｉ／Ｏ方式で入出力制御を行なっているか、エミュレーション方式で入出力制御を行なっているかを意識する必要がない。Ｉ／Ｏデバイス１５，１５，…に対応するＩ／Ｏアドレスが、ＯＳ１０１，１０１，…として動作する制御部１０によってアクセス可能な領域であり、入出力命令に対する応答が適宜返されるのであれば、いずれの場合でも動作に異常を来すことはない。ただし、実Ｉ／Ｏデバイス１５，１５，…が入出力命令に応じた処理手順を実行している間は、当該Ｉ／Ｏデバイス１５，１５，…内での手順の経過をＶＭＭ１０２，１０２，…から把握することは難しい。したがって、Ｉ／Ｏデバイス１５，１５，…の割り当てを切り替えるタイミングとして上述のように、Ｉ／Ｏデバイス１５，１５，…の電力供給状態（ＡＣＰＩ）が休止状態、停止状態（Ｄ３）へ遷移、又は、稼働状態（Ｄ０）へ遷移するタイミングに限る。この場合、処理手順が停止されるので切り替えても問題とならない。また、必要に応じて停止前のＩ／Ｏバス、コンフィグレーションレジスタの内容を保持しておき、復帰する際にＩ／Ｏバス、レジスタの内容を復元してから稼働状態（Ｄ０）へ遷移することにより、スムーズに処理を実行させることが可能になる。
【００６１】
次に、制御部１０がＶＭＭ１０２として動作し、各機能により入出力制御の方式を切り替える手順をフローチャートを参照して説明する。
【００６２】
図４は、実施の形態１におけるサーバ装置１の制御部１０による方式の切り替えのための判定処理手順の一例を示すフローチャートである。図４のフローチャートに示す処理手順は、直接Ｉ／Ｏ方式で入出力制御を行なっている場合の判定処理を示す。
【００６３】
制御部１０は、Ｉ／Ｏ命令捕捉部１２１として機能することにより、ＯＳからの入出力命令を捕捉したか否かを判断する（ステップＳ１１）。制御部１０は入出力命令を捕捉していないと判断した場合（Ｓ１１：ＮＯ）、処理をステップＳ１１へ戻す。
【００６４】
制御部１０は、入出力命令を捕捉したと判断した場合（Ｓ１１：ＹＥＳ）、Ｉ／Ｏ監視部１２２として機能することにより、直接Ｉ／Ｏ方式とエミュレーション方式とで制御を切り替える対象であるＩ／Ｏデバイス１５への入出力命令であるか否かを判断する（ステップＳ１２）。制御部１０は、対象Ｉ／Ｏデバイス１５への入出力命令でないと判断した場合（Ｓ１２：ＮＯ）、他のＩ／Ｏデバイス１５へ入出力命令を渡す等の所定の処理を行ない、判定処理を終了する。
【００６５】
制御部１０は、対象Ｉ／Ｏデバイス１５への入出力命令であると判断した場合（Ｓ１２：ＹＥＳ）、捕捉した入出力命令が停止状態（ＡＣＰＩにおけるＤ３）への遷移を伴なう状態遷移命令であるか否かを判断する（ステップＳ１３）。
【００６６】
制御部１０は、捕捉した入出力命令が停止状態への遷移を伴なう状態遷移命令であると判断した場合（Ｓ１３：ＹＥＳ）、対象Ｉ／Ｏデバイス１５で停止状態（Ｄ３）への状態遷移を実行させ（ステップＳ１４）、状態遷移が完了するまで待機する（ステップＳ１５）。制御部１０は停止状態への状態遷移が完了した後、Ｉ／Ｏバス切替部１２３をデバイスエミュレータ部１２９へ入出力命令を渡すように切り替え、割り込み入力切替部１２５をデバイスエミュレータ部１２９からの割り込みを仮想割り込み生成部１２６へ渡すように切り替える（ステップＳ１６）。これにより以後、対応するＯＳ１０１からの入出力制御がエミュレーション方式に切り替えられ、制御部１０は判定処理を終了する。以後稼働状態への遷移を伴なう命令が捕捉されるまで、当該Ｉ／Ｏデバイス１５への入出力命令はデバイスエミュレータ部１２９により応答される。
【００６７】
制御部１０は、捕捉した入出力命令が停止状態への遷移を伴なう状態遷移命令でないと判断した場合（Ｓ１３：ＮＯ）、捕捉した入出力命令をＩ／Ｏアドレスを実Ｉ／Ｏデバイス１５の実アドレスに変換して命令を実行させ（ステップＳ１７）、判定処理を終了する。
【００６８】
図５は、実施の形態１におけるサーバ装置１の制御部１０による方式切り替えのための判定処理手順の一例を示すフローチャートである。図５のフローチャートに示す処理手順は、エミュレーション方式で入出力制御を行なっている場合の判定処理を示す。
【００６９】
制御部１０は、Ｉ／Ｏ命令捕捉部１２１として機能することにより、ＯＳからの入出力命令を捕捉したか否かを判断する（ステップＳ２１）。制御部１０は入出力命令を捕捉していないと判断した場合（Ｓ２１：ＮＯ）、処理をステップＳ２１へ戻す。
【００７０】
制御部１０は、入出力命令を捕捉したと判断した場合（Ｓ２１：ＹＥＳ）、Ｉ／Ｏ監視部１２２として機能することにより、対象のＩ／Ｏデバイス１５への入出力命令であるか否かを判断する（ステップＳ２２）。制御部１０は、対象Ｉ／Ｏデバイス１５への入出力命令でないと判断した場合（Ｓ２２：ＮＯ）、他のＩ／Ｏデバイス１５へ入出力命令を渡す等の所定の処理を行ない、判定処理を終了する。
【００７１】
制御部１０は、対象Ｉ／Ｏデバイス１５への入出力命令であると判断した場合（Ｓ２２：ＹＥＳ）、捕捉した入出力命令が稼働状態（ＡＣＰＩにおけるＤ０）への遷移を伴なう状態遷移命令であるか否かを判断する（ステップＳ２３）。
【００７２】
制御部１０は、捕捉した入出力命令が稼働状態への遷移を伴なう状態遷移命令であると判断した場合（Ｓ２３：ＹＥＳ）、Ｉ／Ｏバス切替部１２３を実Ｉ／Ｏデバイス１５へ入出力命令を渡すように切り替え、割り込み入力切替部１２５を実Ｉ／Ｏデバイス１５からの割り込みを仮想割り込み生成部１２６へ渡すように切り替える（ステップＳ２４）。これにより以後、対応するＯＳからのＩ／Ｏデバイス１５への入出力制御が直接Ｉ／Ｏ方式に切り替えられる。そして制御部１０は、対象Ｉ／Ｏデバイス１５で稼働状態（Ｄ０）への状態遷移を実行させ（ステップＳ２５）、状態遷移が完了するまで待機し（ステップＳ２６）、判定処理を終了する。以後、停止状態への遷移を伴なう命令が捕捉されるまで、当該Ｉ／Ｏデバイス１５への入出力命令は実Ｉ／Ｏデバイス１５へ渡される。
【００７３】
制御部１０は、捕捉した入出力命令が稼働状態への遷移を伴なう状態遷移命令でないと判断した場合（Ｓ２３：ＮＯ）、捕捉した入出力命令に対してはデバイスエミュレータ部１２９により命令を実行させ（ステップＳ２７）、判定処理を終了する。
【００７４】
初期状態として仮想マシン＃１のＯＳ１０１にＭＰＥＧ−２デコーダ１５２がエミュレーション方式により割り当てられている場合、仮想マシン＃１のＯＳ１０１がＭＰＥＧ−２デコーダ１５２へ稼働状態への遷移を伴なう入出力命令を発行したときは、制御部１０がＶＭＭ１０２として動作してこれを捕捉し、稼働状態への遷移を伴なう命令であることを判別し、実ハードウェアのＭＰＥＧ−２デコーダ１５２を直接Ｉ／Ｏ方式により割り当てる。これにより、仮想マシン＃１では映像視聴アプリケーションによりＭＰＥＧ−２デコーダ１５２を使用してＭＰＥＧ−２映像の視聴が可能である。
【００７５】
そして、仮想マシン＃１のＯＳ１０１が、ＭＰＥＧ−２デコーダ１５２に対して停止状態への遷移を伴なう入出力命令が発行した場合も、制御部１０がＶＭＭ１０２として動作してこれを捕捉し、停止状態への遷移を伴なう命令であることを判別し、ＭＰＥＧ−２デコーダ１５２を停止させ、仮想マシン＃１のＯＳ１０１へはデバイスエミュレータ部１２９により応答させるように切り替える。ＭＰＥＧ−２デコーダ１５２は開放され、他のＯＳ１０１，１０１，…へ割り当て可能な状態となる。
【００７６】
これにより、サーバ装置１はｎ台の仮想マシンに相当する複数のＯＳ１０１，１０１，…の動作を実現できるのに対し、ｎよりも少ないｍ台のＭＰＥＧ−２デコーダ１５２，１５２，…を備える構成としても、効率的にＭＰＥＧ−２デコーダ１５２，１５２，…を割り当てて使用可能とすることができる。
【００７７】
このように、サーバ装置１の制御部１０は、ＯＳ１０１の停止及び再起動を行なって実Ｉ／Ｏデバイス１５に対応するＩ／Ｏアドレスを展開し直すことなしに、各ＯＳ１０１，１０１，…からは一貫して実Ｉ／Ｏデバイス１５，１５，…へ入出力命令を発行して制御しているかのように振舞いながら、各ＯＳ１０１，１０１，…に対して実Ｉ／Ｏデバイス１５，１５，…の割り当て及び開放を実現することが可能となる。
【００７８】
また、Ｉ／Ｏデバイス１５，１５，…を停止状態へ遷移させる状態遷移命令があった場合に限りエミュレーション方式へ入出力制御を切り替えるので、実Ｉ／Ｏデバイス１５，１５，…の実際の状態が、切り替えることができる状態であるか否かの判断を行なう必要もなく、簡易な処理で高速に切り替えることが可能である。また、デバイスエミュレータ部１２９として再現すべき処理は、Ｉ／Ｏデバイス１５が停止状態にある場合の処理に限ることができる。したがって、各Ｉ／Ｏデバイス１５，１５，…の性能の再現性の問題、及びベンダー、バージョンの違いに対する互換性の問題が発生する可能性が低い点、優れた効果を奏する。
【００７９】
（実施の形態２）
実施の形態２では、更に、仮想マシンに対応する各ＯＳ１０１，１０１，…上でアプリケーションプログラム１１３，１１３，…の起動／終了を監視するサービスプログラム（以下、状態監視サービスプログラム）が実行され、アプリケーションプログラム１１３，１１３，…の動作に応じて各Ｉ／Ｏデバイス１５，１５，…の状態を遷移させる命令がＯＳから通知（発行）される構成とする。その他、シンクライアントシステムの構成は実施の形態１と同様であるので、共通する構成には実施の形態１と同一の符号を付して詳細な説明を省略する。
【００８０】
実施の形態２におけるサーバ装置１の記憶部１１には、状態監視サービスプログラムが記憶されており、制御部１０は状態監視サービスプログラムを読み出して実行する。これにより、制御部１０はＯＳ１０１上で実行される種々のアプリケーションプログラム１１３，１１３，…の内、特定のアプリケーションプログラム１１３の動作状態の変化に応じて、対応するＩ／Ｏデバイス１５への状態遷移命令を発行する。これにより、既存のＯＳ１０１から発行される状態遷移命令のみならず、ＯＳ１０１上で動作するサービスプログラムから能動的に状態遷移を制御することができ、更に効率的に実Ｉ／Ｏデバイス群１５，１５，…を各ＯＳ１０１，１０１，…へ割り当てることが可能となる。
【００８１】
図６は、実施の形態２におけるサーバ装置１の制御部１０が、アプリケーションプログラム１１３の起動及び終了に応じて状態制御命令を発行する処理手順を示すフローチャートである。
【００８２】
制御部１０は、状態監視サービスプログラムを読み出して状態監視サービスとして動作することにより、特定のアプリケーションプログラム１１３の実行状態が変化したか否かを判断する（ステップＳ３１）。制御部１０は、特定のアプリケーションプログラム１１３の実行状態が変化していないと判断した場合（Ｓ３１：ＮＯ）、処理をステップＳ３１へ戻す。
【００８３】
制御部１０は、特定のアプリケーションプログラム１１３の実行状態が変化したと判断した場合（Ｓ３１：ＹＥＳ）、実行状態の変化がアプリケーション起動であるか否かを判断する（ステップＳ３２）。制御部１０は、実行状態の変化がアプリケーション起動であると判断した場合（Ｓ３２：ＹＥＳ）、当該特定のアプリケーションプログラム１１３に対応するＩ／Ｏデバイス１５をＡＣＰＩにおける稼働状態（Ｄ０）へ復帰させる状態遷移命令を発行し（ステップＳ３３）、処理を終了する。
【００８４】
制御部１０は、実行状態の変化がアプリケーション起動でないと判断した場合（Ｓ３２：ＮＯ）、アプリケーション終了であるか否かを判断する（ステップＳ３４）。制御部１０は、実行状態の変化がアプリケーション終了であると判断した場合（Ｓ３４：ＹＥＳ）、当該特定のアプリケーションプログラム１１３に対応するＩ／Ｏデバイス１５をＡＣＰＩにおける停止状態（Ｄ３）へ遷移させる状態遷移命令を発行し（ステップＳ３５）、処理を終了する。
【００８５】
また制御部１０は、実行状態の変化がアプリケーション終了でないと判断した場合（Ｓ３４：ＮＯ）、そのまま処理を終了する。制御部１０は、図６のフローチャートに示した処理を繰り返し、アプリケーションプログラム１１３の実行状態の監視を継続する。
【００８６】
制御部１０が状態監視サービスとして動作することにより、特定のアプリケーションプログラム１１３として映像視聴アプリケーションプログラム１１３の実行状態の変化を監視する場合は、以下のように動作する。制御部１０は、映像視聴アプリケーションプログラム１１３が起動されたことを検知した場合、実行状態が変化したと判断し、状態の変化はアプリケーション起動であると判断し、映像視聴アプリケーションプログラム１１３に対応するＩ／Ｏデバイス１５であるＭＰＥＧ−２デコーダ１５２を稼働状態（Ｄ０）へ復帰させる状態遷移命令を発行する。これに対し、制御部１０はＶＭＭ１０２として動作することにより、捕捉した入出力命令がＭＰＥＧ−２デコーダ１５２への稼働状態への状態遷移命令であることを判別し、実Ｉ／Ｏデバイス１５であるＭＰＥＧ−２デコーダ１５２を対応するＯＳ１０１へ直接Ｉ／Ｏ方式により割り当てる。
【００８７】
逆に、制御部１０は、映像視聴アプリケーションプログラム１１３が終了されたことを検知した場合、対応するＭＰＥＧ−２デコーダ１５２を停止状態（Ｄ３）へ遷移させる状態遷移命令を発行する。この場合、制御部１０はＶＭＭ１０２として動作することにより、捕捉した入出力命令がＭＰＥＧ−２デコーダ１５２への停止状態への状態遷移命令であることを判別し、実Ｉ／Ｏデバイス１５であるＭＰＥＧ−２デコーダ１５２を開放し、以後エミュレーション方式により入出力制御を行なう。
【００８８】
ｎ人のユーザがシンクライアントとして端末装置２，２，…を利用している場合、同時に映像視聴アプリケーションプログラム１１３，１１３，…を起動可能であるユーザはｍ人に限定される（ｍ＜ｎ）。既にｍ人のユーザの操作によってｍ台の仮想マシンでのＯＳへ、ＭＰＥＧ−２デコーダ１５２，１５２，…が直接Ｉ／Ｏ方式で割り当てられている場合の処理について説明する。ｍ＋１人目のユーザが映像視聴アプリケーションプログラム１１３の起動を試みる操作をした場合、当該ｍ＋１人目のユーザに対応するＯＳ１０１上で動作している状態監視サービスが、映像視聴アプリケーションプログラム１１３のアプリケーション起動を検知する。状態監視サービスによりＯＳ１０１からＭＰＥＧ−２デコーダ１５２へ稼働状態（Ｄ０）への状態遷移命令が発行される。ＶＭＭ１０２はＩ／Ｏ監視部１２２により、捕捉した入出力命令が映像視聴アプリケーションプログラム１１３への状態遷移命令であることを判別するが、ｍ＋１台目のＭＰＥＧ−２デコーダ１５２が存在しない。したがってＩ／Ｏ管理部１２４としての制御部１０は、直接Ｉ／Ｏ方式への切り替えができない。この場合、制御部１０はデバイスエミュレータ部１２９としての機能により、対応するＯＳ１０１へエラーを返すようにしてある。ＯＳ１０１は、ＭＰＥＧ−２デコーダ１５２として認識しているデバイスからエラーが返された場合、映像視聴アプリケーションプログラム１１３へエラーを通知する。制御部１０は、映像視聴アプリケーションプログラム１１３を起動する際に、エラーが通知されていることを検知した場合には、「現在デバイスが利用できないためしばらくお待ちください」などのエラーメッセージを対応するＧＵＩで表示させる。
【００８９】
なお、制御部１０はＶＭＭ１０２として動作するに際し、各ＯＳ１０１，１０１，…に直接Ｉ／Ｏ方式により実Ｉ／Ｏデバイス１５，１５，…を割り当てた期間を計測しておき、計測しておいた期間が長いＯＳ１０１へは、一定期間が経過するまで直接Ｉ／Ｏ方式への切り替えを拒否する機能を実現してもよい。これにより、Ｉ／Ｏデバイス１５，１５，…が不足して直接Ｉ／Ｏ方式への切り替えができない状況にある場合、平等に映像視聴アプリケーションプログラム１１３，１１３，…を実行可能とすることができる。
【００９０】
このように、アプリケーションプログラム１１３，１１３，…の実行状態を監視するサービスが、状態遷移命令を発行させることにより、アプリケーションプログラム１１３，１１３，…の実行状態に応じて直接Ｉ／Ｏ方式と、エミュレーション方式とで入出力制御を切り替えることが可能になる。
【００９１】
なお、制御部１０が状態監視サービスとして動作することにより、アプリケーションプログラム１１３，１１３，…の起動又は停止のみならず、アプリケーションプログラム１１３，１１３，…で開かれるデータの種類に応じて対応するＩ／Ｏデバイス１５，１５，…への状態遷移命令を発行するようにしてもよい。例えば、映像視聴アプリケーションプログラム１１３が起動されたのみならず、視聴対象がＭＰＥＧ−２データファイル又はストリーミングである場合、状態監視サービスとして動作する制御部１０は、ＭＰＥＧ−２デコーダ１５２，１５２，…を復帰させるための状態遷移命令を発行するようにしてもよい。
【００９２】
また、制御部１０は、状態監視サービスとして動作することにより、状態遷移命令を発行する前に、状態遷移を行なうことを通知する機能を備える構成としてもよい。この場合、制御部１０は状態監視サービスとして動作してＯＳ１０１から状態遷移命令を発行させる前に、状態遷移通知をＶＭＭ１０２へ通知する。制御部１０はＶＭＭ１０２として動作することにより、状態遷移通知を受けた場合、Ｉ／Ｏ監視部１２２としての機能を開始し、捕捉された入出力命令が特定のＩ／Ｏデバイス１５，１５，…への状態遷移命令であることを判別するまで判別処理を継続する。これにより、制御部１０は常にＩ／Ｏ監視部１２２としての機能を発揮して入出力命令が特定のＩ／Ｏデバイス１５，１５，…への状態遷移命令であるか否かを判別する必要がなくなり、ＶＭＭ１０２としての処理が軽量化される。
【００９３】
（実施の形態３）
実施の形態３では、各端末装置２，２，…で表示する画面を表わす画像データの生成をグラフィックカード１５１，１５１，…で生成する構成とする。そして、実施の形態３では、サーバ装置１でｎ台の仮想マシンの動作を実現できるのに対し、サーバ装置１で使用可能なグラフィックカード１５１，１５１，…は仮想マシンの台数よりも少ないｍ台（ｎ＞ｍ）である場合に、グラフィックカード１５１，１５１，…の開放／割り当てを行なう例を挙げて説明する。
【００９４】
実施の形態３におけるシンクライアントシステムの構成は、実施の形態１と同様であるので共通する部分には同一の符号を付して詳細な説明を省略する。
【００９５】
図７は、実施の形態３におけるシンクライアントシステムのサーバ装置１によるグラフィックカード１５１，１５１，…への入出力制御の切り替え処理の概要を示す模式図である。実施の形態３で説明する例では、サーバ装置１の制御部１０がＶＭＭ１０２又はサーバ管理部として動作することにより端末装置２，２，…からの起動要求を受け付けた場合、端末装置２に対応するＯＳ１０１を起動するに際し、初期的にＯＳ１０１に対してグラフィックカード１５１をエミュレーション方式で割り当てる。このとき、グラフィックカード１５１はＡＣＰＩにおけるＤ３状態であり、ＯＳ１０１からは画面出力が行なわれない。そして、ユーザが端末装置２の操作を行った場合に、対応するＯＳ１０１がグラフィックカード１５１の状態を稼働状態（Ｄ０）へ遷移させる状態遷移命令を発する。この場合、制御部１０はＶＭＭ１０２として動作することにより当該状態遷移命令を捕捉し、対応するＯＳ１０１のグラフィックカード１５１，１５１，…への入出力制御を直接Ｉ／Ｏ方式へ切り替える。直接Ｉ／Ｏ方式へ切り替えられることにより、各ＯＳ１０１，１０１，…から発行される描画コマンドがグラフィックカード１５１，１５１，…に入力され、グラフィックカード１５１，１５１，…が生成した画像データが対応する端末装置２，２，…へ送信される。また、端末装置２，２，…から入力信号が入力されない期間が継続した場合、又は、サスペンド状態（スタンバイ／休止）への移行が指示された場合、対応するＯＳ１０１はサスペンド状態へ遷移するに際し、画面出力を停止してグラフィックカード１５１へ停止状態への状態遷移命令を発行する。この場合、制御部１０はＶＭＭ１０２として動作することにより当該状態遷移命令を捕捉し、対応するＯＳ１０１のグラフィックカード１５１への入出力制御をエミュレーション方式へ切り替える。対応するＯＳ１０１でグラフィックカード１５１がエミュレーション方式へ切り替えられ、画像データが送信されない間、端末装置２側でスクリーンセーバー用の画像を表示する機能を備える構成としてもよい。
【００９６】
これにより、グラフィックカード１５１，１５１，…を用いた画像転送方式のシンクライアントシステムでも、グラフィックカード１５１，１５１，…の台数（ｍ）以上の数（ｎ）の仮想マシンの動作を実現することが可能である。したがって、ユーザの操作状態に応じて効率的にグラフィックカード１５１，１５１，…を利用することができる。
【００９７】
なお、実施の形態３における端末装置２，２，…は、自身が備える入力インタフェースの内のオン／オフボタン等の特定のキー、ボタンが押下された場合に、端末装置２からサスペンド状態への指示を示す休止命令、又はサスペンド状態からの復帰の指示を示す復帰命令をサーバ装置１へ通知する構成としてもよい。その場合、サーバ装置１で起動される各ＯＳ１０１，１０１，…上で動作する状態監視サービスプログラムは、端末装置２，２，…から通知される休止命令及び復帰命令を受け付け、ユーザによる端末装置２の利用状態を把握する機能を実現するように構成される。各ＯＳとして動作する制御部１０は、状態監視サービスプログラムを実行することにより、休止命令又は復帰命令を受け付けてＯＳ１０１をサスペンド状態へ移行させると共に、対応するグラフィックカード１５１の入出力制御の方式を直接Ｉ／Ｏ方式とエミュレーション方式とで切り替える。なお、制御部１０がＶＭＭ１０２又はサーバ管理部として動作することにより、直接的に端末装置２からの休止命令又は復帰命令を受け付け、対応するＯＳ１０１へ命令を出力してサスペンド状態へ移行させると共に、ＯＳ１０１に対応するグラフィックカード１５１の入出力制御の方式を直接Ｉ／Ｏ方式とエミュレーション方式とで切り替える構成としてもよい。
【００９８】
図８は、実施の形態３における端末装置２，２，…による復帰命令及び休止命令を通知する処理手順の一例を示すフローチャートである。
【００９９】
端末装置２は、シンクライアントとしての起動時に、又は対応するＯＳがサスペンド状態にある間、入力インタフェースからの入力を受け付けたか、又は特定のキー、ボタンが押下されたか否かにより、端末装置２がアクティブ状態へ移行したか否かを判断する（ステップＳ４１）。端末装置２は、入力インタフェースからの入力も受け付けず、特定のキー、ボタンも押下されず、アクティブ状態へ移行していないと判断した場合（Ｓ４１：ＮＯ）、処理をステップＳ４１へ戻す。
【０１００】
端末装置２は、入力インタフェースからの入力を受け付けたか、又は特定のキー、ボタンが押下されて自身がアクティブ状態へ移行したと判断した場合（Ｓ４１：ＹＥＳ）、復帰命令をサーバ装置１へ通知する（ステップＳ４２）。以降、端末装置１はアクティブ状態での処理を開始する（ステップＳ４３）。
【０１０１】
そして、端末装置２はアクティブ状態にある間、入力インタフェースからの入力を一定期間以上受け付けていないか、又は特定のキー、ボタンが再度押下されたか否かにより、自身がサスペンド状態へ移行したか否かを判断する（ステップＳ４４）。端末装置２は、自身がサスペンド状態へ移行していないと判断した場合（Ｓ４４：ＮＯ）、処理をステップＳ４４へ戻す。そして端末装置２は、自身がサスペンド状態へ移行したと判断した場合（Ｓ４４：ＹＥＳ）、休止命令をサーバ装置１へ通知する（ステップＳ４５）。以降、端末装置２はサスペンド状態での処理を開始し（ステップＳ４６）、処理をステップＳ４１へ戻す。このとき、自身でスクリーンセーバー用の画像を表示させるようにしてもよい。
【０１０２】
端末装置２，２，…は、電源がオフとなるまで図８のフローチャートに示した処理を繰り返して実行する。
【０１０３】
図９は、実施の形態３におけるサーバ装置１の制御部１０による入出力制御方式の切り替えの処理手順の一例を示すフローチャートである。図９のフローチャートに示す処理手順は、図８のフローチャートに示した端末装置２から通知される復帰命令及び休止命令に対応して行なわれる。
【０１０４】
制御部１０は、ＯＳ１０１上の状態監視サービスプログラムに基づく動作により、対応する端末装置２から復帰命令を受け付けたか否かを判断し（ステップＳ５０１）、復帰命令を受け付けていないと判断した場合（Ｓ５０１：ＮＯ）、処理をステップＳ５０１へ戻す。なお、ステップＳ５０１における処理は、上述のように制御部１０がＶＭＭ１０２又はサーバ管理部として直接的に受け付ける構成としてもよい。
【０１０５】
制御部１０は対応する端末装置２から復帰命令を受け付けたと判断した場合（Ｓ５０１：ＹＥＳ）、画面出力を開始し（ステップＳ５０２）、この場合、デバイスドライバ１０３によりグラフィックカード１５１への出力命令を発行する。制御部１０はＶＭＭ１０２として動作し、Ｉ／Ｏ命令捕捉部１２１としての機能により、発行された出力命令を捕捉し（ステップＳ５０３）、この場合の特定のＩ／Ｏデバイス１５であるグラフィックカード１５１への出力命令であることを判別する（ステップＳ５０４）。制御部１０はＶＭＭ１０２として動作し、エミュレーション方式で割り当てられていたグラフィックカード１５１を直接Ｉ／Ｏ方式へ切り替える（ステップＳ５０５）。このとき制御部１０は、Ｉ／Ｏ管理部１２４としての機能により、対応するデバイスエミュレータ部１２９の動作を停止させる。なお、制御部１０は直接Ｉ／Ｏ方式への切り替えに際し、備えられているグラフィックカード１５１，１５１，…の内の空き状態のグラフィックカード１５１，１５１，…をラウンドロビン式に割り当てる。また、必要に応じて制御部１０は、前回休止状態へ遷移させる前に保存しておいたレジスタ値をグラフィックカード１５１のレジスタへ戻して復帰させる構成としてもよい。
【０１０６】
制御部１０は、ＶＭＭ１０２又はサーバ管理部としての機能により直接的に端末装置２から復帰命令を受け付ける構成とした場合、端末装置２から復帰命令を受け付けたと判断したとき（Ｓ５０１：ＹＥＳ）、ＯＳ１０１からグラフィックカード１５１への出力命令が発行される前に、対応するグラフィックカード１５１を直接Ｉ／Ｏ方式によって割り当てる処理を開始しておいてもよい。また、制御部１０がＶＭＭ１０２又はサーバ管理部としての機能により端末装置１から復帰命令を受け付けたと判断した場合にＩ／Ｏ監視部１２２としての機能を開始する構成としてもよい。これにより、入出力命令を判別する処理を常に行なう必要がなくなる。
【０１０７】
制御部１０は、グラフィックカード１５１への入出力制御の方式が直接Ｉ／Ｏ方式へ切り替えられへ画面出力を継続している間、ＯＳ１０１上の状態監視サービスプログラムに基づく動作により、対応する端末装置２から休止命令を受け付けたか否かを判断する（ステップＳ５０６）。制御部１０は、休止命令を受け付けていないと判断した場合（Ｓ５０６：ＮＯ）、処理をステップＳ５０６へ戻す。
【０１０８】
制御部１０は端末装置２から休止命令を受け付けたと判断した場合（Ｓ５０６：ＹＥＳ）、グラフィックカード１５１への画面出力を停止し（ステップＳ５０７）、グラフィックカード１５１へ出力停止命令を発行する（ステップＳ５０８）。制御部１０はＶＭＭ１０２として動作し、Ｉ／Ｏ命令捕捉部１２１としての機能により、発行された命令を捕捉し（ステップＳ５０９）、この場合の特定のＩ／Ｏデバイス１５であるグラフィックカード１５１への出力停止命令であることを判別する（ステップＳ５１０）。制御部１０はＶＭＭ１０２として動作し、Ｉ／Ｏ管理部１２４としての機能により、直接Ｉ／Ｏ方式で割り当てられていたグラフィックカード１５１を停止させて開放し、エミュレーション方式に切り替える（ステップＳ５１１）。これにより、グラフィックカード１５１は開放されるので他のＯＳ１０１，１０１，…への割り当てが可能となり、効率的な使用が可能となる。また、この際に制御部１０は必要に応じて、停止させるグラフィックカード１５１のレジスタ値を読み出しておき、保存しておく構成としてもよい。他のＯＳ１０１，１０１，…にも割り当て可能として効率的に使用する構成とし、復帰したＯＳ１０１へ他のグラフィックカード１５１が割り当てられる場合であっても、休止した時点での状況に戻すことができ、サーバ装置１では、ハードウェア資源が切り替えられていることをユーザによって意識されずに動作が可能である。
【０１０９】
なお、この場合も、制御部１０がＶＭＭ１０２又はサーバ管理部としての機能により直接的に端末装置２から休止命令を受け付ける構成とした場合、端末装置２から休止命令を受け付けたと判断したとき（Ｓ５０６：ＹＥＳ）、ＯＳ１０１からグラフィックカード１５１への出力停止命令が発行される前に、対応するデバイスエミュレータ部１２９としての動作を開始しておいてもよい。また、制御部１０がＶＭＭ１０２又はサーバ管理部としての機能により端末装置２から休止命令を受け付けたと判断した場合、Ｉ／Ｏ監視部１２２としての機能を開始する構成としてもよい。これにより、入出力命令を判別する処理を常に行なう必要がなくなる。
【０１１０】
サーバ装置１の制御部１０は、ＯＳ１０１が起動された以後は図９のフローチャートに示した処理手順を繰り返し、端末装置２の利用状態に応じてＩ／Ｏデバイス１５，１５，…の入出力制御の方式を切り替える。制御部１０は、ＶＭＭ１０２又はサーバ管理部として動作することにより、対応する端末装置２の動作が停止し、ＯＳ１０１を終了させた場合に図９のフローチャートに示した処理を終了させる。
【０１１１】
このように、ユーザが端末装置２をシンクライアントとして動作させ、入力信号が入力されている間は、対応するＯＳ１０１へは直接Ｉ／Ｏ方式によりグラフィックカード１５１が割り当てられる。また、ユーザが離席した場合、又はユーザによる操作によって能動的にサスペンド状態へ移行された場合には、対応するＯＳ１０１へは停止状態のグラフィックカード１５１としての動作を再現するグラフィックエミュレータ部がエミュレーション方式により割り当てられる。このように、ＯＳ１０１の停止／再起動を行なうことなしに実デバイスであるグラフィックカード１５１の開放／割り当てが行なわれ、ユーザとしてはＯＳ１０１及びＯＳ上で動作する各アプリケーションプログラム１１３，１１３，…をスムーズに利用することができる。そして、サーバ装置１でグラフィックカード１５１，１５１，…の台数（ｍ）以上の数（ｎ台）の仮想マシンの動作を実現可能であり、一のＯＳ１０１がサスペンド状態にある間などは、他のＯＳ１０１，１０１，…で再起動なしにグラフィックカード１５１を利用することができ、効率的にハードウェア資源を利用させることが可能である。
【０１１２】
（実施の形態４）
実施の形態１乃至３におけるシンクライアントシステムでは、サーバ装置１の制御部１０がＶＭＭ１０２又はサーバ管理部として機能することにより、端末装置２，２，…からの起動要求を受け付ける構成とした。実施の形態４におけるシンクライアントシステムでは、端末装置２，２，…からの起動要求を受け付け、シンクライアントとしての動作を許可するか否かの認証を実行する認証装置Ｓを更に含む構成とする。
【０１１３】
図１０は、実施の形態４におけるシンクライアントシステムの構成を示す説明図である。実施の形態１乃至３におけるシンクライアントシステムと共通する構成については同一の符号を付して詳細な説明を省略する。
【０１１４】
実施の形態４におけるシンクライアントシステムは、サーバ装置１と、端末装置２，２，…と、認証装置Ｓと、ネットワークＮとを含んで構成される。認証装置Ｓは、サーバ装置１と端末装置２，２，…との間の接続を認証する装置であり、端末装置２，２，…からの起動要求を受け付ける。認証装置Ｓは、起動要求と共に端末装置２，２，…から送信される端末装置２，２，…を識別する情報、及び端末装置２，２，…を使用するユーザ夫々を識別する情報等を含む認証情報を、自身が記憶する情報と照合する。認証装置Ｓは、認証情報が自身が記憶する情報と合致し、接続可と判断した場合にのみ、起動要求をサーバ装置１へ送信し、起動要求の送受信、入力信号の送受信を実現するための接続を確立する。
サーバ装置１では、制御部１０のＶＭＭ１０２又はサーバ管理部（ホストＯＳ）としての動作により認証装置Ｓ経由で受信した起動要求を受け付け、認証によって接続可と判断された端末装置２に対応するＯＳ１０１にのみ、グラフィックカード１５１，１５１，…を割り当てるようにしてある。実施の形態４におけるサーバ装置１の制御部１０は、ＶＭＭと１０２して動作することにより、ＯＳ１０１を起動する際にはグラフィックカード１５１をエミュレーション方式により割り当て、認証装置Ｓにより接続が確立された経路により入力信号が入力された場合、グラフィックカード１５１への入出力制御を直接Ｉ／Ｏ方式へ切り替える。これにより、認証されたユーザが使用する端末装置２のみがシンクライアントとしての動作を許可され、より安全性の高いシンクライアントシステムを提供することが可能となる。
【０１１５】
また、認証装置Ｓは、端末装置２，２，…から復帰命令、休止命令が通知される場合、これを受け付ける機能を有する。認証装置Ｓは、復帰命令に対しては特に、認証されたユーザが使用する端末装置２からの復帰命令である場合のみ制御部１０により動作しているＶＭＭ１０２又はサーバ管理部（ホストＯＳ）、若しくは対応するＯＳ１０１によって実行されている状態監視サービスへ通知する機能を有する。このとき、認証装置Ｓは、サーバ装置１の制御部１０が動作させているＶＭＭ１０２又はサーバ管理部、及び、状態監視サービスのいずれもへ復帰命令を通知する構成としてもよい。
【０１１６】
これに対し、サーバ装置１の制御部１０はＯＳ１０１として動作することにより、休止命令を受け付けた場合には対応するＩ／Ｏデバイス１５，１５，…へデバイスが停止状態（Ｄ３）へと遷移するために出力停止命令を発行し、復帰命令を受け付けた場合には出力命令を発行してＩ／Ｏデバイス１５，１５，…を稼働状態（Ｄ０）へ遷移させる。
【０１１７】
ＯＳ１０１が自身の実行状態を監視し、入力信号を一定期間以上受け付けない等の条件によりサスペンド状態へ遷移して、対応するＩ／Ｏデバイス１５，１５，…へ停止状態への遷移を伴なう出力停止命令を発行し、その後入力信号を受け付けたと判断した場合に対応するＩ／Ｏデバイス１５，１５，…へ稼働状態への遷移を伴なう出力命令を発行する構成のみならず、上述のように端末装置２，２，…からの起動要求、復帰命令及び休止命令を外部装置である認証装置Ｓにより認証した上で間接的に受け付けた場合に各Ｉ／Ｏデバイス１５，１５，…の切り替えがされる点、安全性が高くなる。
【０１１８】
なお、認証装置Ｓとしての動作は、サーバ装置１の制御部１０によって実現される一の仮想マシンのＯＳの動作によって実行される構成としてもよい。なお、グラフィックカード１５１，１５１，…から直接的に画像データを送信する構成とする場合、端末装置２，２，…から認証装置Ｓ経由でサーバ装置１へ起動要求、復帰命令及び休止命令を送信及び通知する通信経路と、グラフィックカード１５１，１５１，…から各端末装置２，２，…へ画像データを送信する通信経路とを別経路とすることにより、より安全性の高いシンクライアントシステムを構成することが可能となる。
【０１１９】
実施の形態１乃至４では、仮想化環境は一個の筺体で構成されるサーバ装置１内で実現されるように説明した。しかしながら、複数の筺体で構成されるサーバ装置群で複数のＯＳを実行するように構成し、ＶＭＭとして動作する制御部１０は異なる装置におけるハードウェア資源の割り当て、及び入出力命令の制御を行なう構成としてもよい。
【０１２０】
また、実施の形態１乃至４では、本発明に係る情報処理装置をシンクライアントシステムを実現するシンクライアントサーバにおける仮想化環境に適用した例を挙げた。勿論、本発明はこれに限らず、仮想化技術を利用して少ないハードウェア資源を効率的に使用する情報処理装置に利用可能である。例えば、種々のサービスを実現するためのサーバ／クライアントシステムにおけるサーバ装置に適用することにより、サーバ装置に備えられるハードウェア資源を効率的に使用させることができ、サーバ装置のコンパクト化を図ることも可能である。
【０１２１】
以上の実施の形態に関し更に、以下の付記を開示する。
【０１２２】
（付記１）
複数のオペレーティングシステム（以下、ＯＳ）夫々に対応するハードウェア資源を制御する制御手段を備え、複数のＯＳを実行させる情報処理装置であって、
前記制御手段は、
各ＯＳからのハードウェア資源への入出力命令を捕捉する捕捉手段と、
該捕捉手段が捕捉した前記入出力命令を前記ハードウェア資源へ直接的に与えて制御する直接制御手段と、
前記ハードウェア資源における動作をエミュレートし、前記捕捉手段が捕捉した前記入出力命令へ応答するエミュレータと、
前記捕捉手段が捕捉した入出力命令が、ハードウェア資源の稼働状態の遷移を伴なう状態制御命令であるか否かを判断する判断手段と、
該判断手段が状態制御命令であると判断した場合、前記稼働状態の遷移に応じて前記直接制御手段による制御又は前記エミュレータによる応答のいずれかに切り替える切替手段と
を備える情報処理装置。
【０１２３】
（付記２）
前記切替手段は、前記稼働状態の遷移が、特定の状態への遷移を伴なうと判断された場合に、前記エミュレータによる応答へ切り替えるようにしてある付記１に記載の情報処理装置。
【０１２４】
（付記３）
前記制御手段は、
各ＯＳ上で実行されるアプリケーションプログラムの実行状態を取得する状態取得手段と、
該状態取得手段が取得した実行状態に応じて、前記状態制御命令を発行する手段と
を備える付記１に記載の情報処理装置。
【０１２５】
（付記４）
前記制御手段は、
前記直接制御手段による制御が行なわれた期間をＯＳ毎に計測する手段を備え、
計測された期間を合計し、合計期間が少ないＯＳからの状態制御命令に対し優先的に前記直接制御手段による制御に切り替えるようにしてある付記１乃至３のいずれかに記載の情報処理装置。
【０１２６】
（付記５）
各ＯＳは、状態を遷移させることを示す状態遷移通知を前記制御手段へ通知するようにしてあり、
前記判断手段は、前記状態遷移通知を検知した場合に判断を行なうようにしてある付記１乃至３のいずれかに記載の情報処理装置。
【０１２７】
（付記６）
各ＯＳは、
該ＯＳの処理結果を受け付ける外部装置から該外部装置の稼働状況を示す稼働状況通知を受け付け、受け付けた外部装置の稼働状況通知が示す稼働状況に応じて前記状態制御命令を発行するようにしてある付記１に記載の情報処理装置。
【０１２８】
（付記７）
前記制御手段は、
各ＯＳに対応する外部装置から、該外部装置の稼働状況を示す稼働状況通知を受け付ける手段を更に備え、
外部装置から稼働状況通知を受け付けた場合に、前記判断手段による判断を行なうようにしてある付記６に記載の情報処理装置。
【０１２９】
（付記８）
付記６又は７に記載の情報処理装置と、該情報処理装置に接続され、前記ＯＳ夫々上で実行される情報処理結果を受け付ける一又は複数の端末装置とを含み、
前記情報処理装置では、前記端末装置夫々に対応するＯＳが実行されるようにしてあり、
前記端末装置は、自身の稼働状況を示す稼働状況通知を前記情報処理装置へ通知するようにしてある情報処理システム。
【０１３０】
（付記９）
複数のＯＳ夫々に対応するハードウェア資源の制御を行ない、情報処理装置に複数のＯＳを実行させる情報処理装置の制御方法であって、
各ＯＳからのハードウェア資源への入出力命令を捕捉し、
捕捉した入出力命令が、ハードウェア資源の稼働状態の遷移を伴なう状態制御命令であるか否かを判断し、
稼働状態の遷移を伴なう状態制御命令であると判断した場合、前記稼働状態の遷移に応じて、捕捉した前記入出力命令を前記ハードウェア資源へ直接的に与えて制御する直接制御と、前記ハードウェア資源における動作をエミュレートし、捕捉した入出力命令へ応答するエミュレーション制御とを切り替える情報処理装置の制御方法。
【０１３１】
（付記１０）
コンピュータに、複数のＯＳ夫々に対応するハードウェア資源の割り当て及び制御を行なわせ、複数のＯＳを実行させるコンピュータプログラムであって、
コンピュータを、
各ＯＳからのハードウェア資源への入出力命令を捕捉する捕捉手段、
該捕捉手段が捕捉した前記入出力命令を前記ハードウェア資源へ直接的に与えて制御する直接制御手段、
前記ハードウェア資源における動作をエミュレートし、前記捕捉手段が捕捉した前記入出力命令へ応答するエミュレータ、
前記捕捉手段が捕捉した入出力命令が、ハードウェア資源の稼働状態の遷移を伴なう状態制御命令であるか否かを判断する判断手段、及び、
該判断手段が状態制御命令であると判断した場合、前記稼働状態の遷移に応じて前記直接制御手段による制御又は前記エミュレータによる応答のいずれかに切り替える切替手段
として機能させるコンピュータプログラム。
【０１３２】
（付記１１）
付記１０に記載のコンピュータプログラムが、コンピュータによって読み取り可能に記憶されている記憶媒体。
【図面の簡単な説明】
【０１３３】
【図１】実施の形態１におけるシンクライアントシステムの構成の概要を模式的に示す説明図である。
【図２】実施の形態１におけるシンクライアントシステムを構成するサーバ装置の内部構成を示すブロック図である。
【図３】実施の形態１におけるサーバ装置の制御部により実現される機能を概念的に示すブロック図である。
【図４】実施の形態１におけるサーバ装置の制御部による方式の切り替えのための判定処理手順の一例を示すフローチャートである。
【図５】実施の形態１におけるサーバ装置の制御部による方式切り替えのための判定処理手順の一例を示すフローチャートである。
【図６】実施の形態２におけるサーバ装置の制御部が、アプリケーションプログラムの起動及び終了に応じて状態制御命令を発行する処理手順を示すフローチャートである。
【図７】実施の形態３におけるシンクライアントシステムのサーバ装置によるグラフィックカードへの入出力制御の切り替え処理の概要を示す模式図である。
【図８】実施の形態３における端末装置による復帰命令及び休止命令を通知する処理手順の一例を示すフローチャートである。
【図９】実施の形態３におけるサーバ装置の制御部による入出力制御方式の切り替えの処理手順の一例を示すフローチャートである。
【図１０】実施の形態４におけるシンクライアントシステムの構成を示す説明図である。
【符号の説明】
【０１３４】
１  サーバ装置
１０  制御部
１０１  ＯＳ
１０２  ＶＭＭ
１１３  アプリケーションプログラム
１２１  Ｉ／Ｏ命令捕捉部
１２２  Ｉ／Ｏ監視部
１２３  Ｉ／Ｏバス切替部
１２４  Ｉ／Ｏ管理部
１２５  割り込み入力切替部
１２９  デバイスエミュレータ部
１５  Ｉ／Ｏデバイス
２  端末装置
【図１】
0005251188.tif 000002
【図２】
0005251188.tif 000003
【図３】
0005251188.tif 000004
【図４】
0005251188.tif 000005
【図５】
0005251188.tif 000006
【図６】
0005251188.tif 000007
【図７】
0005251188.tif 000008
【図８】
0005251188.tif 000009
【図９】
0005251188.tif 000010
【図１０】
0005251188.tif 000011