(57)【要約】【課題】クライアントコンピュータからサーバコンピュータのＩ／Ｏデバイスを使用可能にする。【解決手段】ＯＳとハードウェアとの間に介在するハイパバイザがＩ／Ｏデバイスの仮想化を行なう。【選択図】  図４
2004258840.tif 000002
【特許請求の範囲】
【請求項１】
第１のハイパバイザと、その上で動作する第１のＯＳとを有するクライアントコンピュータと、第２のハイパバイザと、その上で動作する第２のＯＳと、物理Ｉ／Ｏデバイスとを有するサーバコンピュータとを備え、前記クライアントコンピュータと前記サーバコンピュータとはネットワークで接続されており、前記第１のハイパバイザは前記サーバコンピュータの前記物理Ｉ／Ｏデバイスへのアクセスである論理Ｉ／Ｏデバイスアクセスを検出する論理Ｉ／Ｏデバイスアクセス検出手段と、前記論理Ｉ／Ｏデバイスアクセスがあったとき、前記論理Ｉ／Ｏデバイスアクセスのコマンドを前記ネットワークを介して前記サーバコンピュータへ送信する仮想Ｉ／Ｏクライアント処理とを有し、前記第２のハイパバイザは前記コマンドを前記ネットワークを介して受信して前記物理Ｉ／Ｏデバイスへコマンドを発行する仮想Ｉ／Ｏサーバ処理を有することを特徴とする仮想化されたＩ／Ｏデバイスをもつ計算機システム。
【請求項２】
前記クライアントコンピュータと前記サーバコンピュータの間での通信は前記第１と第２のハイパバイザが定めるプロトコルで行なわれることを特徴とする請求項１記載の仮想化されたＩ／Ｏデバイスをもつ計算機システム。
【請求項３】
前記クライアントコンピュータと前記サーバコンピュータの間での通信は前記サーバコンピュータ上で動作する第２のＯＳのプロトコルで行なわれることを特徴とする請求項１記載の仮想化されたＩ／Ｏデバイスをもつ計算機システム。
【請求項４】
前記仮想Ｉ／Ｏクライアント処理は前記論理Ｉ／Ｏデバイスアクセスのコマンドを前記サーバコンピュータの第２のＯＳが解釈可能なプロトコルに変換してから前記コマンドを前記サーバコンピュータに送ることを特徴とする請求項１記載の仮想化されたＩ／Ｏデバイスをもつ計算機システム。
【請求項５】
前記クライアントコンピュータは記憶保護制御機能を有し、更に、前記記憶保護制御機能を用いて前記論理Ｉ／Ｏデバイスへの読み出しコマンドと書き込みコマンドとを検出し前記第１のハイパバイザへ制御を移す手段を有することを特徴とする請求項１記載の仮想化されたＩ／Ｏデバイスをもつ計算機システム。
【請求項６】
前記クライアントコンピュータにおいて、特定のメモリアドレスに対する読み出し／書き込みが起きたときに記憶保護割込が発生し、記憶保護割込となった原因が前記論理Ｉ／Ｏデバイスへの読み出しコマンドの発行もしくは書き込みコマンドの発行であれば前記仮想Ｉ／Ｏクライアント処理を呼び出す手段を有することを特徴とする請求項５記載の仮想化されたＩ／Ｏデバイスをもつ計算機システム。
【請求項７】
前記第１のＯＳはアプリケーションプログラムが指定したファイルを格納しているＩ／Ｏデバイスに対応するデバイスドライバを検索し、この検索によって見つかったデバイスドライバを呼び出す手段を有し、前記デバイスドライバは読み出しコマンドを発行し、読み出しコマンドを論理Ｉ／Ｏデバイスのメモリアドレスに書き込みを行なうことを特徴とする請求項６記載の仮想化されたＩ／Ｏデバイスをもつ計算機システム。
【請求項８】
前記仮想Ｉ／Ｏクライアント処理はＩ／Ｏデバイスの制御用メモリアドレスに書き込まれたデータが読み出しコマンドか書き込みコマンドかを判定する手段と、読み出しコマンドである場合は読み出しコマンドと読み出しコマンドのパラメータを前記サーバコンピュータへ送信する手段と、前記サーバコンピュータがＩ／Ｏ読み出し処理で得たデータを受信する手段と、書き込みコマンドである場合は書き込みコマンドと書き込みコマンドのパラメータを前記サーバコンピュータに送信する手段と、書き込みデータを前記サーバコンピュータに送信する手段とを有することを特徴とする請求項１記載の仮想化されたＩ／Ｏデバイスをもつ計算機システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ネットワークを用いて接続された計算ノードをもつコンピュータシステムにおいて、特定の計算ノードに接続されたＩ／Ｏデバイスを他の計算ノードからでもアクセス可能なコンピュータシステムに関する。
【０００２】
【従来の技術】
コンピュータシステムは、ハードウェアコストの削減、システム構築の容易化などの理由から、機能の異なる複数の計算ノードをネットワークで結合して構築することが多い。しかしながら、この様に機能の異なる複数の計算ノードがネットワークで結合されたコンピュータシステムでは、特定の計算ノードにのみ接続されたＩ／Ｏデバイスがあることが多い。この時、他の計算ノードからこの特定のＩ／Ｏデバイスを使用するためには、Ｉ／Ｏデバイスが接続されている計算ノードにｌｏｇｉｎしたり、ノード間のデータ転送が必要になる。
【０００３】
このようなコンピュータシステムの利便性を高めるため、従来は、ＯＳ（オペレーティングシステム）が、特定の計算ノードに接続されたＩ／Ｏデバイスを任意の計算ノードからアクセス可能とする機能を提供していた。この機能をここではＩ／Ｏデバイスの仮想化機能と呼ぶ。以下、Ｉ／Ｏデバイスを持つ計算ノードをサーバコンピュータ、サーバコンピュータのＩ／Ｏデバイスにアクセスするコンピュータをクライアントコンピュータと呼ぶ。例えば、特開平１０−２１２０３号公報（特許文献１）に記載のように、クライアントコンピュータのＯＳがサーバコンピュータのＩ／Ｏ装置へのアクセス要求を出すために、クライアントコンピュータのＯＳがサーバコンピュータへのＩ／Ｏアクセスが出来る機能を持つＯＳでなくてはならない。
【０００４】
ＯＳによるＩ／Ｏデバイスの仮想化機能は以下の様に実現されている。クライアントコンピュータにあるアプリケーションプログラムが、サーバコンピュータに接続されているＩ／Ｏデバイス上にあるファイルを読み出す場合を考える。クライアントコンピュータとサーバコンピュータはネットワークを介して接続されている。クライアントコンピュータにあるアプリケーションプログラムがファイルを読み出す場合、ファイルの読み出し要求はＯＳの一部であるファイルシステムに伝えられる。ファイルシステムでは、ファイルの論理名から、そのファイルを含むＩ／Ｏデバイスが接続されているサーバコンピュータとサーバコンピュータ上での論理ファイル名を得る。そして、クライアントコンピュータのファイルシステムは、ネットワークを介してサーバコンピュータのファイルシステムに対して、サーバコンピュータ上でのファイルの論理名を伝える。サーバコンピュータのＯＳの一部であるファイルシステムは、ファイルの論理名からそのファイルを含むＩ／ＯデバイスとＩ／Ｏデバイスへの入出力を行なうデバイスドライバを特定する。デバイスドライバは、Ｉ／Ｏデバイスに読み出しコマンドを発行してファイルを読み出す。サーバコンピュータのファイルシステムは読み出したファイルをネットワークを介してクライアントコンピュータのファイルシステムに送る。クライアントコンピュータのファイルシステムは、アプリケーションプログラムに読み出したファイルを送る。これらの一連の処理により、クライアントコンピュータにあるプログラムが、サーバコンピュータに接続されているＩ／Ｏデバイスにあるファイルを読み出すことができる。
【０００５】
しかしながら、実際のコンピュータシステムでは、ＯＳによるＩ／Ｏデバイスの仮想化機能は使用できないことが多い。これは、Ｉ／Ｏの仮想化機能は、多くの場合同一ＯＳ間でのみ使用可能であることと、通常、複数種類のＯＳが一つのコンピュータシステム内に混在することが原因である。Ｉ／Ｏの仮想化が同一ＯＳ間に限られるのは、ＯＳごとにＩ／Ｏデバイスの仮想化方法が異なるからである。また、コンピュータシステムが複数種類のＯＳで構成されるのは、コンピュータシステムは一度に構築されるのではなく、拡張を繰り返して構築されることが多いが、拡張の際に、その時で最も条件のよいハードウェア、ＯＳ、ソフトウェアを選択するため、コンピュータシステム全体としては複数種類のＯＳが混在することになってしまうためである。
【０００６】
【特許文献１】
特開平１０−２１２０３号公報
【０００７】
【発明が解決しようとする課題】
上記従来技術では、ネットワークを用いて接続されたサーバコンピュータとクライアントコンピュータからなるコンピュータシステムにおいて、サーバコンピュータとクライアントコンピュータのＯＳが異なる場合に、サーバコンピュータに接続されたＩ／Ｏデバイスがクライアントコンピュータでは使用できないという問題がある。
【０００８】
本発明の目的は、ネットワークを用いて接続されたサーバコンピュータとクライアントコンピュータからなるコンピュータシステムにおいて、サーバコンピュータとクライアントコンピュータのＯＳが異なる場合でも、サーバコンピュータのＯＳもクライアントコンピュータのＯＳも変更することなく、サーバコンピュータに接続されたＩ／Ｏデバイスがクライアントコンピュータで使用することを可能にすることである。
【０００９】
【課題を解決するための手段】
上記目的を達成するため、本発明では、ＯＳよりハードウェアに近い階層で動作するハイパバイザを設ける。クライアントコンピュータのハイパバイザには、オペレーティングシステムとオペレーティングシステム上のプログラムを変更することなく、サーバコンピュータのＩ／Ｏデバイスへのアクセスを検出するための論理Ｉ／Ｏデバイスアクセス検出部と、サーバコンピュータのＩ／Ｏデバイスへのアクセスがあった時に、サーバコンピュータのＩ／Ｏデバイスへのコマンドをネットワークを介して送信する仮想Ｉ／Ｏクライアント処理を有する。サーバコンピュータのハイパバイザには、Ｉ／Ｏデバイスへのコマンドをネットワークから受信して、Ｉ／Ｏデバイスへコマンド発行する仮想Ｉ／Ｏサーバ処理とを有する。
【００１０】
【発明の実施の形態】
本発明の第一の実施の形態では、サーバコンピュータとクライアントコンピュータの間での通信は、両者のハイパバイザが定めるプロトコルで通信が行なわれるものである。一方、第二の実施の形態では、サーバコンピュータとクライアントコンピュータの間での通信は、サーバコンピュータ上で動作するＯＳのプロトコルで行なわれる。
【００１１】
図１に第一、第二の実施形態で共通に用いられるコンピュータシステムを示す。
本実施形態のコンピュータシステムは、１台以上のクライアントコンピュータ１０１と１台以上のサーバコンピュータ１０２と、これらのコンピュータを相互に結合するネットワーク１０３からなる。
【００１２】
クライアントコンピュータ１０１は、プログラムとデータを格納するメモリ９０１とメモリ９０１内のプログラムに従って処理を行うプロセッサ９００とネットワークに接続するためのＮＩＡ（ネットワークインターフェースアダプタ）９０２とプログラムとデータを保存するＨＤＤ（ハードディスク）９０３を有する。
【００１３】
同様に、サーバコンピュータ１０２は、プログラムとデータを格納するメモリ９１１とメモリ９１１内のプログラムに従って処理を行うプロセッサ９１０とネットワークに接続するためのＮＩＡ９１２とプログラムとデータを保存するＨＤＤ９１３とＩ／Ｏデバイス９１４を有する。Ｉ／Ｏデバイス９１４は例えばリムーバブルディスクドライブであるとする。
【００１４】
図２に、第一と第二の実施形態におけるＨＤＤ９０３の内容を示す。ＨＤＤ９０３には、アプリケーションプログラム１２１とオペレーティングシステム１２２とハイパバイザ１２３とブートローダ１２４が格納されている。
【００１５】
アプリケーションプログラム１２１  はファイルの読み出し２１０とファイルの書き込み３６０を含むプログラムであり、ハイパバイザの機能によってサーバコンピュータ１０２に接続されたＩ／Ｏ  デバイス９１４からの読み出しと書き込みを行なう。ハイパバイザ１２３には記憶保護割込処理３００  と仮想Ｉ／Ｏクライアント処理２６０が含まれる。記憶保護割込処理３００はアプリケーションプログラム１２１がファイルの読み出し２１０  とファイルの書き込み３６０を行なった時に、プロセッサ９００の記憶保護制御を用いて論理Ｉ／Ｏデバイスへの読み出しコマンドと書き込みコマンドを検出し、ハイパバイザへ制御を移す。仮想Ｉ／Ｏクライアント処理２６０は記憶保護割込処理３００  によって起動され、ネットワーク１０３を介してサーバコンピュータ１０２に接続されたＩ／Ｏ  デバイス９１４からの読み出しと書き込みを行なう。ブートローダ１２４はクライアントコンピュータ１０１の起動時にオペレーティングシステム１２２の起動前にハイパバイザ１２３を起動させ、記憶保護割込が起きた時にハイパバイザ１２３の記憶保護割込処理３００が呼び出されるようにする。
【００１６】
なお、本実施形態におけるアプリケーションプログラム１２１にはファイルの読み出し２１０とファイルの書き込み３６０が含まれているが、ファイルの読み出し２１０、ファイルの書き込み３６０のいずれか一方だけでも本実施形態と同様である。
【００１７】
図３に、第一の実施形態におけるＨＤＤ９１３の内容を示す。ＨＤＤ９１３には、オペレーティングシステム１３２とハイパバイザ１３３とブートローダ１３４  が格納されている。
【００１８】
ハイパバイザ１３３には記憶保護割込処理３８０とＮＩＡ受信割込処理２８０とが含まれる。記憶保護割込処理３８０はオペレーティングシステム１３２のＮＩＡ受信割込処理が呼び出される前にハイパバイザ１３３のＮＩＡ受信割込処理２８０が呼び出されるようにする。ＮＩＡ受信割込処理２８０では、クライアントコンピュータ１０１からネットワーク１０３を介してＩ／Ｏデバイス９１４の読み出し／書き込み要求が来た時に、仮想Ｉ／Ｏクアライアント処理２６０を呼び出す。仮想Ｉ／Ｏクライアント処理２６０は読み出し／書き込み要求に応じてＩ／Ｏデバイスの読み出し／書き込みを行なう。ブートローダ１３４はサーバコンピュータ１０２の起動時にオペレーティングシステム１２２の起動前にハイパバイザ１２３を起動させ、記憶保護割込とＮＩＡ受信割込が起きた時に、それぞれハイパバイザ１３３  の記憶保護割込処理３８０とＮＩＡ受信割込処理２８０とが呼び出されるようにする。
【００１９】
ブートローダ１２４はサーバコンピュータ１０２の起動時にオペレーティングシステム１３２の起動前にハイパバイザ１３３を起動させ、ＮＩＡ受信割込が起きた時にハイパバイザ１３３のＮＩＡ受信割込処理２８０が呼び出されるようにする。
【００２０】
図４に第一、第二の実施形態で共通に用いられるファイルの読み出し手順の詳細を示す。
【００２１】
クライアントコンピュータ１０１のアプリケーションプログラム１２１がファイルの読み出しを行なう場合、まず、オペレーティングシステム１２２はデバイスドライバの検索２１１を実行する。デバイスドライバは、オペレーティングシステムでＩ／Ｏデバイスを使用可能にするためのソフトウェアである。デバイスドライバはＩ／Ｏ  デバイスごとに異なるため、プログラムが指定したファイルを格納しているＩ／Ｏデバイスに対応するデバイスドライバを検索する。
【００２２】
次に、デバイスドライバの呼び出し２１２を実行して、デバイスドライバの検索２１１でみつかったデバイスドライバを呼び出す。さらに、デバイスドライバは、読み出しコマンド発行２１３を行ない、読み出しコマンドを論理Ｉ／Ｏデバイスの制御用メモリアドレスに書き込みを行なう。読み出しコマンド発行２１３により、プロセッサの記憶保護機能によって記憶保護割込が発生し、論理Ｉ／Ｏデバイスアクセス検出２１４が行なわれる。記憶保護割込によって制御がハイパバイザの記憶保護割込処理３００に移る。ハイパバイザによって仮想Ｉ／Ｏクライアント処理２６０が行われ、サーバコンピュータのＩ／Ｏデバイスからの読み出しが完了する。
【００２３】
図５に第一、第二の実施形態で共通に用いられるファイルの書き込み手順の詳細を示す。書き込みも図４のファイルの読み出し手順と基本的には同一であるが、読み出しコマンド発行２１３の代わりに書き込みコマンドの発行３６３を行なうことが異なる。
【００２４】
図６に第一、第二の実施形態で共通に用いられる記憶保護割込処理３００の手順の詳細を示す。記憶保護割込処理３００はクライアントコンピュータ１０１で実行されるハイパバイザ内のプログラムで、特定のメモリアドレスに対する読み出し／書き込みが起きた時に発生する記憶保護割込によって呼び出される。記憶保護割込処理３００は、割込要因となったメモリへの読み出し／書き込みアドレスによって（１）  論理Ｉ／Ｏ  デバイスに対する読み出しコマンド、もしくは、書き込みコマンドを検出し、仮想Ｉ／Ｏクライアント処理２６０  を呼び出す、（２）ＯＳが記憶保護割込アドレスに対する書きこみをした時にＯＳの記憶保護割込先アドレスを登録する、（３）前記以外の理由による割込であれば、ＯＳ  の記憶保護割込先アドレスに分岐する、という３つの処理を行なう。
【００２５】
記憶保護割込によって記憶保護割込処理３００が呼び出されると、まず、記憶保護割込アドレス判定３０１を行ない、記憶保護割込となった原因が記憶保護割込の分岐先アドレスに対する書き込みであるかを判定する。記憶保護割込の分岐先アドレスに対する書き込みであれば、ＯＳの記憶保護割込を登録３０２で、分岐先アドレスに書き込もうとしたデータを、ＯＳの記憶保護割込へ分岐３０４での分岐先アドレスに登録し、記憶保護割込処理３００を終了する。次に、Ｉ／Ｏアドレス判定３０３  を行ない、記憶保護割込となった原因が論理Ｉ／Ｏデバイスのメモリアドレスに対する書き込みで、論理Ｉ／Ｏデバイスへの読み出しコマンドの発行、もしくは、書き込みコマンドの発行であるかを判定する。論理Ｉ／Ｏデバイスへの読み出しコマンドの発行、もしくは、書き込みコマンドの発行であれば、仮想Ｉ／Ｏクライアント処理２６０を呼び出し、記憶保護割込処理３００を終了する。Ｉ／Ｏアドレスに対する書き込みでなければ、ＯＳの記憶保護割込へ分岐３０４を実行し、ＯＳの記憶保護割込に分岐する。
【００２６】
図７に第一、第二の実施形態で共通に用いられるサーバコンピュータ側の記憶保護割込処理３８０の手順の詳細を示す。記憶保護割込処理３８０はサーバコンピュータ１０２で実行されるハイパバイザ内のプログラムで、特定のメモリアドレスに対する読み出し／書き込みが起きた時に発生する記憶保護割込によって呼び出される。記憶保護割込処理３８０は、割込要因となったメモリへの読み出し／書き込みアドレスによって（１）ＯＳがＮＩＡ受信割込アドレスに対する書き込みをした時にＯＳの記憶保護割込先アドレスを登録する、（２）ＯＳが記憶保護割込アドレスに対する書き込みをした時にＯＳの記憶保護割込先アドレスを登録する、（３）前記以外の理由による割込であれば、ＯＳ  の記憶保護割込先アドレスに分岐する、という３つの処理を行なう。
【００２７】
記憶保護割込によって記憶保護割込処理３８０が呼び出されると、まず、記憶保護割込アドレス判定３８１を行ない、記憶保護割込となった原因が記憶保護割込の分岐先アドレスに対する書き込みであるかを判定する。記憶保護割込の分岐先アドレスに対する書き込みであれば、ＯＳの記憶保護割込アドレスを登録３８２で、分岐先アドレスに書き込もうとしたデータを、ＯＳの記憶保護割込へ分岐３８５での分岐先アドレスに登録し、記憶保護割込処理３８０を終了する。次に、ＮＩＡ受信割込アドレス判定３８３  を行ない、記憶保護割込となった原因がＮＩＡ受信割込の分岐先アドレスに対する書き込みであるかを判定する。ＮＩＡ受信割込の分岐先アドレスに対する書き込みであれば、ＮＩＡ受信割込アドレスを登録３８５で、分岐先アドレスに書き込もうとしたデータを、ＯＳのＮＩＡ受信割込処理へ分岐２８９での分岐先アドレスに登録し、記憶保護割込処理３８０を終了する。ＮＩＡ受信割込の分岐先アドレスに対する書き込みでなければ、ＯＳの記憶保護割込へ分岐３８４を実行し、ＯＳの記憶保護割込に分岐する。
【００２８】
図８に第一の実施形態における仮想Ｉ／Ｏクライアント処理２６０の手順の詳細を示す。仮想Ｉ／Ｏクライアント処理は、Ｉ／Ｏデバイスの制御用メモリアドレスに書き込みを行なうと記憶保護割込によって呼び出され、ネットワークを介してサーバコンピュータ１０２  に接続されているＩ／Ｏデバイス９１４に対して読み出し／書き込みを行なう。まず、コマンド判定２６１でＩ／Ｏデバイスの制御用メモリアドレスに書き込まれたデータが読み出しコマンドであるか書き込みコマンドであるかを判定する。読み出しコマンドである場合は、読み出しコマンドの送信２６２で読み出しコマンドと読み出しコマンドのパラメータ（本実施形態ではセクタ番号とセクタ数）をサーバコンピュータ１０２  に送信を行ない、続いて読み出しデータの受信２６３でサーバコンピュータ１０２がＩ／Ｏ読み出し処理で得たデータを受信する。書き込みコマンドである場合は、書き込みコマンドの送信２６４で書き込みコマンドと書き込みコマンドのパラメータ（本実施形態ではセクタ番号とセクタ数）をサーバコンピュータ１０２に送信を行ない、続いて書き込みデータの送信２６５  で書き込みを行なうデータをサーバコンピュータ１０２に送信する。
【００２９】
図９に第一の実施形態におけるＮＩＡ受信割込処理２８０の手順の詳細を示す。ＮＩＡ受信割込処理２８０はサーバコンピュータ１０２で実行されるハイパバイザ内のプログラムで、ＮＩＡ９１２がネットワークからデータを受信すると割込が発生して呼び出される。ＮＩＡ  受信割込処理２８０が呼び出されると、仮想Ｉ／Ｏコマンド判定２８１を実行し、ＮＩＡが受信したデータがクライアントコンピュータ１０１の読み出しコマンドの送信２６２、もしくは書き込みコマンドの送信２６４であるものかどうかを判定する。読み出しコマンドの送信２６２、もしくは、書き込みコマンドの送信２６４  である場合は、仮想Ｉ／Ｏサーバ処理４００を実行し、それ以外の場合は、ＯＳのＮＩＡ受信割込処理へ分岐２８９を実行し、ＯＳで受信割込処理を実行する。
【００３０】
図１０に第一の実施形態における仮想Ｉ／Ｏサーバ処理４００の手順の詳細を示す。まず、コマンド判定２８８を実行し、読み出しコマンドか書き込みコマンドかを判定する。読み出しコマンドである場合は、Ｉ／Ｏデバイス９１４に対して読み出しコマンド発行２８２  を行ない読み出しコマンドと読み出しコマンドのパラメータ（本実施形態ではセクタ番号とセクタ数）をＩ／Ｏデバイスのメモリアドレスに書き込みを行なう。読み出しコマンド発行２８２  が行なわれると、Ｉ／Ｏ  デバイス内でＩ／Ｏ読み出し処理２８３が実行され、Ｉ／Ｏデバイス９１４からデータの読み出しが行われる。続いて、読み出し結果の送信２８４  を行ない、Ｉ／Ｏデバイス９１４  から読み出したデータをクライアントコンピュータ１０１に送信する。書き込みコマンドである場合は、書き込みデータの受信２８５でクライアントコンピュータ１０１から書き込みデータを受信する。書き込みコマンド発行２８６が行なわれると、Ｉ／Ｏ  デバイス内でＩ／Ｏ書き込み処理２８７が実行され、Ｉ／Ｏデバイス９１４へデータの書き込みが行われる。
【００３１】
図１１に第一、第二の実施形態で共通に用いられるクライアントコンピュータ１０１における起動時処理３２０の手順の詳細を示す。起動時処理３２０はクライアントコンピュータ１０１が起動する時に呼び出され、ハイパバイザの起動、ＯＳの起動と記憶保護割込の設定が行う。
【００３２】
まず、プログラムローダをディスクからメモリに転送し、プログラムローダ起動３２１を行う。プログラムローダは、ハイパバイザをディスクからメモリに転送し、ハイパバイザ起動３２２を行なう。ハイパバイザは、読み出しコマンド発行２１３、書き込みコマンド発行３６３、記憶保護割込アドレスの変更を記憶保護機構を用いて監視するために、特権レベル取得３２３と記憶保護割込設定３２４を行い、Ｉ／Ｏデバイスのメモリアドレス、もしくは、記憶保護割込の分岐先アドレスへの書き込み、読み出しがある場合に記憶保護割込みが発生し、記憶保護割込処理３００へ分岐する様に設定する。
【００３３】
ここで、特権レベルについて説明する。通常プロセッサはＯＳカーネルが動作する特権レベルと、ユーザプログラムが動作する一つ以上の非特権レベルを持っている。特権レベルでは一切の制限なく全てのハードウェアをアクセスでき、逆に非特権レベルではハードウェアへのアクセスは一切出来ないようになっている。特権レベル取得では、プロセッサの動作モードを切り替え、特権レベルを使用可能にした上で特権レベルでプログラムを動作させるようにする。
【００３４】
続いて、プログラムローダは、ＯＳをディスクからメモリに転送し、ＯＳの起動３２５を行う。ＯＳは  記憶保護割込設定３２６  記憶保護割込の分岐アドレスにＯＳ  の記憶保護割込処理のアドレスの書き込みを行なう。この時、従来は記憶保護割込処理がＯＳに設定されるが、本実施例では、記憶保護割込が発生し、ハイパバイザの記憶保護割込処理３００内でＯＳの記憶保護割込３０４での分岐先アドレスとして登録される。
【００３５】
図１２に第一の実施形態におけるサーバコンピュータ１０２における起動時処理の手順の詳細を示す。起動時処理３４０はクライアントコンピュータ１０２が起動する時に呼び出され、ハイパバイザの起動、ＯＳの起動、記憶保護割込の設定、ＮＩＡ受信割込の設定を行なう。
【００３６】
まず、プログラムローダをディスクからメモリに転送し、プログラムローダ起動３４１を行う。プログラムローダは、ハイパバイザをディスクからメモリに転送し、ハイパバイザ起動３４２を行なう。ハイパバイザは、ＮＩＡ受信割込の分岐先アドレスと記憶保護割込の分岐先アドレスの変更を記憶保護機構を用いて監視するために、特権レベル取得３４３と記憶保護割込設定３４４を行い、記憶保護割込の分岐先アドレスとＮＩＡ受信割込の分岐先アドレスへの書き込み、読み出しがある場合に記憶保護割込みが発生し、記憶保護割込処理３８０へ分岐する様に設定する。さらに、ＮＩＡ受信割込設定３４５  によりＮＩＡがデータを受信した時にＮＩＡ  受信割込処理２８０へ分岐する様に設定する。
【００３７】
続いて、プログラムローダは、ＯＳをディスクからメモリに転送し、ＯＳの起動３４６を行う。ＯＳは  記憶保護割込設定３４７  で記憶保護割込の分岐先アドレスにＯＳ  の記憶保護割込処理のアドレスの書き込みを行なう。この時、従来は記憶保護割込処理がＯＳに設定されるが、本実施例では、記憶保護割込が発生し、ハイパバイザの記憶保護割込処理３８０内でＯＳの記憶保護割込３８４での分岐先アドレスとして登録される。同様に、ＯＳは  ＮＩＡ受信割込設定３４８でＮＩＡ  受信割込の分岐先アドレスにＯＳ  のＮＩＡ受信割込処理のアドレスの書き込みを行なう。この時、従来はＮＩＡ受信割込処理がＯＳに設定されるが、本実施例では、記憶保護割込が発生し、ハイパバイザの記憶保護割込処理３８０内でＯＳのＮＩＡ受信割込処理へ分岐２８９での分岐先アドレスとして登録される。以上の手順により、記憶保護割込とＮＩＡ受信割込をハイパバイザへ分岐する様にできる。
【００３８】
図１３に第二の実施形態における仮想Ｉ／Ｏクライアント処理２６０の手順の詳細を示す。第二の実施形態では、サーバコンピュータのＩ／ＯデバイスへのコマンドをハイパバイザがサーバコンピュータのＯＳが解釈可能なプロトコルに変換してからコマンドをサーバコンピュータに送るところが第一の実施形態と異なる。まず、コマンド判定４２１でＩ／Ｏデバイスのメモリアドレスに書き込まれたデータが読み出しコマンドであるか書き込みコマンドであるかを判定する。
【００３９】
読み出しコマンドである場合は、読み出しコマンドの変換４２２で読み出しコマンドをサーバコンピュータのＯＳが解釈可能なプロトコルに変換する。サーバコンピュータのＯＳがＵＮＩＸ（Ｘ／Ｏｐｅｎ  Ｃｏｍｐａｎｙ  Ｌｉｍｉｔｅｄが独占的にライセンスしている米国ならびに他の国における登録商標）であるならば、例えば、読み出しコマンドを  ｒｓｈサーバコンピュータｄｄ  ｉｆ＝Ｉ／Ｏデバイス名  ｓｋｉｐ＝読み出し開始ブロック番号  ｃｏｕｎｔ＝読み出しを行なうブロック数  を実行した時にサーバコンピュータに送信されるデータとする。読み出しコマンドの送信４２３では読み出しコマンドの変換４２２によって作成されたコマンドをサーバコンピュータ１０２  に送信する。続いて読み出しデータの受信４２４でサーバコンピュータ１０２のＯＳが読み出しコマンドを実行した結果を受信する。
【００４０】
書き込みコマンドである場合は、書き込みコマンドの変換４２５で書き込みコマンドをサーバコンピュータのＯＳが解釈可能なプロトコルに変換する。サーバコンピュータのＯＳがＵＮＩＸであるならば、例えば、書き込みコマンドを  ｒｓｈサーバコンピュータｄｄ  ｏｆ＝Ｉ／Ｏデバイス名  ｓｅｅｋ＝書き込み開始ブロック番号  ｃｏｕｎｔ＝書き込みを行なうブロック数  を実行した時にサーバコンピュータに送信されるデータとする。書き込みコマンドの送信４２６は読み出しコマンドの変換４２５によって作成されたコマンドをサーバコンピュータ１０２  に送信する。続いて書き込みデータの送信４２７で書き込みを行なうデータをサーバコンピュータ１０２に送信する。
【００４１】
以上のような実施の形態によって、Ｉ／Ｏデバイスの仮想化がハイパバイザによって行うことができるようになるため、サーバコンピュータとクライアントコンピュータのオペレーティングシステムやアプリケーションプログラムを変更することなく、サーバコンピュータに接続されたＩ／Ｏデバイスであっても、クライアントコンピュータに接続されたＩ／Ｏデバイスであるかのように扱うことができる。
【００４２】
また、第二の実施の形態のように、上記クライアントコンピュータのハイパバイザの仮想Ｉ／Ｏクライアント処理は、サーバコンピュータのオペレーティングシステムでサポートされているプロトコルでサーバコンピュータに読み出しコマンドもしくは書き込みコマンドを送信する。
【００４３】
これによって、Ｉ／Ｏデバイスの仮想化がクライアントコンピュータのハイパバイザによって行うことができるようになるため、クライアントコンピュータへハイパバイザを導入するだけで、サーバコンピュータとクライアントコンピュータのオペレーティングシステムやアプリケーションプログラムを変更することなく、サーバコンピュータに接続されたＩ／Ｏデバイスであっても、クライアントコンピュータに接続されたＩ／Ｏデバイスであるかのように扱うことができる。
【００４４】
【発明の効果】
本発明によれば、クライアントコンピュータのＯＳが論理Ｉ／Ｏデバイスにアクセスすると、ハイパバイザがネットワークを介してサーバコンピュータのＩ／Ｏデバイスへコマンドを発行する。これにより、クライアントコンピュータとサーバコンピュータのＯＳが異なる場合でも、ＯＳやアプリケーションプログラムを変更することなく、クライアントコンピュータからサーバコンピュータのＩ／Ｏデバイスをアクセスすることができる。
【図面の簡単な説明】
【図１】本発明を実施する計算機システムの構成図。
【図２】クライアントコンピュータのハードディスクに格納されたソフトウェア。
【図３】サーバコンピュータのハードディスクに格納されたソフトウェア。
【図４】読み出し処理を示すフローチャート。
【図５】書き込み処理を示すフローチャート。
【図６】クライアントコンピュータの記憶保護割込処理を示すフローチャート。
【図７】サーバコンピュータの記憶保護割込処理を示すフローチャート。
【図８】クライアントコンピュータの仮想Ｉ／Ｏ処理を示すフローチャート。
【図９】サーバコンピュータのＮＩＡ受信割込処理を示すフローチャート。
【図１０】サーバコンピュータの仮想Ｉ／Ｏ処理を示すフローチャート。
【図１１】クライアントコンピュータの起動時処理のフローチャート。
【図１２】サーバコンピュータの起動時処理のフローチャート。
【図１３】第二の実施形態におけるクライアントコンピュータの仮想Ｉ／Ｏ処理を示すフローチャート。
【符号の説明】
２１０：ファイルの読み出し、２１１：デバイスドライバの検索、
２１２：デバイスドライバの呼び出し、２１３：読み出しコマンド発行、
２１４：論理Ｉ／Ｏデバイスアクセス検出、
２６０：仮想Ｉ／Ｏクライアント処理。
【図１】
2004258840.tif 000003
【図２】
2004258840.tif 000004
【図３】
2004258840.tif 000005
【図４】
2004258840.tif 000006
【図５】
2004258840.tif 000007
【図６】
2004258840.tif 000008
【図７】
2004258840.tif 000009
【図８】
2004258840.tif 000010
【図９】
2004258840.tif 000011
【図１０】
2004258840.tif 000012
【図１１】
2004258840.tif 000013
【図１２】
2004258840.tif 000014
【図１３】
2004258840.tif 000015