(57)【要約】【課題】業界標準規格のバスを搭載するオープン系サーバにおいて、制御レジスタをメモリ空間及びＩＯ空間にマッピングし、且つ該デバイスを制御するための制御レジスタを一つしか保持していないデバイスをＬＰＡＲ制御プログラムの制御下で動作する複数のＯＳからの同時アクセスを可能とする技術を提供する。【解決手段】計算機システムにおいて、ＬＰＡＲ制御プログラム１００は、１つの物理的なデバイスのメモリ空間及びＩＯ空間を各ＯＳに対して仮想的にマッピングする機能を有する。さらに、前記ＬＰＡＲ制御プログラムは、１台の計算機システムを論理的な複数のパーティション（ＬＰＡＲ）に分割し、各ＬＰＡＲに対してＬＰＡＲを特定するためのＬＰＡＲ識別子を割当てる機能を有する。【選択図】図１
2008158710.tif 000002
【特許請求の範囲】
【請求項１】
デバイスの制御レジスタがメモリ空間及びＩＯ空間にマッピングされ、オペレーティングシステムからはマッピングされたメモリ空間及びＩＯ空間へのアクセスによりデバイスを制御する事が可能であり、ＬＰＡＲ制御プログラムが１台の計算機システムを複数の論理的パーティションに分割し、各論理的パーティション上でオペレーティングシステムが動作し、１台の計算機システム上で複数のオペレーティングシステムが同時に動作する事が可能な計算機システムであって、
前記ＬＰＡＲ制御プログラムは、１つの物理的なデバイスのメモリ空間及びＩＯ空間を各オペレーティングシステムに対して仮想的にマッピングする機能を有する事を特徴とする計算機システム。
【請求項２】
請求項１記載の計算機システムにおいて、
前記ＬＰＡＲ制御プログラムは、前記各論理的パーティションに対して論理的パーティションを特定するためのＬＰＡＲ識別子を割当てる機能を有する事を特徴とする計算機システム。
【請求項３】
請求項２記載の計算機システムにおいて、
前記各オペレーティングシステムにマッピングした仮想的なメモリ空間及びＩＯ空間は、前記各オペレーティングシステムからのアクセスやデバイスの動作により独立した情報を持つ事を特徴とする計算機システム。
【請求項４】
請求項３記載の計算機システムにおいて、
前記ＬＰＡＲ制御プログラムは、前記各オペレーティングシステムにマッピングした仮想的なメモリ空間及びＩＯ空間に対する各オペレーティングシステムからのアクセスをトラップし、前記ＬＰＡＲ識別子を付加して物理的なメモリ空間及びＩＯ空間をアクセスし、前記仮想的なメモリ空間及びＩＯ空間へのアクセス結果を前記仮想的なメモリ空間及びＩＯ空間に各オペレーティングシステム個別で反映させる機能を有する事を特徴とする計算機システム。
【請求項５】
請求項４記載の計算機システムにおいて、
前記デバイスは、前記物理的なメモリ空間及びＩＯ空間へのアクセスによる動作指示を受付け、前記ＬＰＡＲ識別子と前記動作指示の内容を受取り、前記動作指示の内容を処理後、前記ＬＰＡＲ識別子を付加して前記物理的なメモリ空間及びＩＯ空間に動作指示に対する終了報告を行う機能を有する事を特徴とする計算機システム。
【請求項６】
請求項５記載の計算機システムにおいて、
前記ＬＰＡＲ制御プログラムは、前記物理的なメモリ空間及びＩＯ空間に報告された前記ＬＰＡＲ識別子と前記終了報告を受付け、前記ＬＰＡＲ識別子に基づいて論理的パーティションを特定し、この特定した論理的パーティション上で動作するオペレーティングシステムの前記仮想的なメモリ空間及びＩＯ空間に終了報告を反映させる機能を有する事を特徴とする計算機システム。
【請求項７】
請求項３記載の計算機システムにおいて、
前記デバイスは、前記ＬＰＡＲ識別子と非同期事象情報を前記物理的なメモリ空間及びＩＯ空間に設定する機能を有し、
前記ＬＰＡＲ制御プログラムは、前記ＬＰＡＲ識別子に基づいて論理的パーティションを特定し、この特定した論理的パーティション上で動作するオペレーティングシステムの前記仮想的なメモリ空間及びＩＯ空間に前記非同期事象情報を反映させる機能を有する事を特徴とする計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、１台の計算機システム上で複数のＯＳ（オペレーティングシステム）が同時に動作する事が可能な計算機システムにおいて、制御レジスタがメモリ空間及びＩＯ空間にマッピングされる１つの物理的なデバイスに対する複数のＯＳからの処理を同時に実行する計算機システムに関するものである。
【背景技術】
【０００２】
これまで、メインフレームでは１つのシステム上においてＬＰＡＲ制御プログラムの下で複数のＯＳを動作させるＬＰＡＲ（Ｌｏｇｉｃａｌ  Ｐａｒｔｉｔｉｏｎ：論理的パーティション）機能をサポートしてきた。
【０００３】
近年、前記ＬＰＡＲ機能をメインフレームだけでなく、オープン系サーバもサポートするようになってきている。オープン系サーバにて前記ＬＰＡＲ機能をサポートするにあたり、搭載デバイス数に制限があり１つのデバイスを複数のＯＳから共有する事が求められている。しかし、入出力資源の共有を実現しているメインフレームの場合、サポートしている入出力資源がメインフレームベンダの固有仕様によるものが多く、業界標準規格のデバイスをサポートしているオープン系サーバでは実現が困難である。
【０００４】
オープン系サーバでは、デバイスはオープン系サーバのスロットに挿入され、ホスト・プロセッサと接続する業界標準規格の手段としてはＰＣＩ−ＳＩＧにて策定されたＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｈａｎｇｅ）バスを用いる構成が広く用いられている。ＰＣＩバスの場合、各デバイスに対して標準的に所持しているＰＣＩコンフィギュレーションレジスタを含み、該デバイスを制御するための制御レジスタを一つしか保持しておらず、該理由からも複数のＯＳによって共用することは困難であった。
【０００５】
メインフレームで入出力資源を共有した例として、例えば特許文献１がある。１台の計算機システム上で異なる資源区画（ＬＰＡＲ）で動作する各ＯＳの全てが共通的にアクセス可能であり、且つデバイスからもアクセス可能な空間（ＨＳＡ）が存在し、ＨＳＡ上に各ＯＳ個別の制御情報を作成することにより、入出力資源を共有する例である。また、特許文献２には、区画識別子を定め、区画識別子を起動情報に設定し、ＩＯ割込み時、区画識別子により割込みを行う区画（ゲスト）を特定する技術が記載されている。
【特許文献１】特開平６−３５７２５号公報
【特許文献２】特開昭６４−３７６３６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
前述のように、メインフレームで入出力資源を共有した例として、特許文献１，２がある。しかし、業界標準規格バスを搭載するオープン系サーバでは、ＯＳのメモリ空間及びＩＯ空間にマッピングされたデバイスの制御レジスタをアクセスする事によりデバイスの制御を行う。マッピングされた空間へのＯＳからのアクセスは、そのアクセスが直接デバイスの制御レジスタアクセスとなりデバイスを制御する。従って、共有するＯＳ数分の制御レジスタを物理デバイスが所持しなければ、各ＯＳからの制御レジスタに対するアクセスは競合し、各ＯＳからは期待通りの結果を得ることはできず、共有を実現する事はできない。
【０００７】
また、オープン系サーバではＨＳＡのように１台の計算機システム上で異なる資源区画（ＬＰＡＲ）で動作する各ＯＳの全てが共通的にアクセス可能な空間はなく実現は困難である。
【０００８】
そこで、本発明は、特許文献１，２のような従来例では実現が困難である業界標準規格のバスを搭載するオープン系サーバにおいて、制御レジスタをメモリ空間及びＩＯ空間にマッピングし、且つ該デバイスを制御するための制御レジスタを一つしか保持していないデバイスをＬＰＡＲ制御プログラムの制御下で動作する複数のＯＳからの同時アクセスを可能とする技術を提供する事を目的とするものである。
【０００９】
本発明の前記ならびにその他の目的と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１０】
本願において開示される発明のうち、代表的なものの概要を簡単に説明すれば、次のとおりである。すなわち、本発明の計算機システムは、以下のような特徴を有するものである。
【００１１】
（１）ＬＰＡＲ制御プログラムが、１台の計算機システムを論理的な複数のパーティション（ＬＰＡＲ）に分割し、各ＬＰＡＲにＬＰＡＲを特定するためのＬＰＡＲ識別子（ＩＤ）を割当てる手段を備える。
【００１２】
（２）ＬＰＡＲ制御プログラムが、ＬＰＡＲ制御プログラムの制御下で動作する複数のＯＳのメモリ空間及びＩＯ空間に物理（共有）デバイスのメモリ空間及びＩＯ空間を各ＯＳ毎に独立した仮想的なメモリ空間及びＩＯ空間としてマッピングする手段を備える。
【００１３】
（３）ＬＰＡＲ制御プログラムは、各ＯＳからの前記仮想的なメモリ空間及びＩＯ空間へのアクセスをトラップし、前記ＩＤを付加して物理（共有）デバイスの物理的なメモリ空間及びＩＯ空間をアクセスする事により物理（共有）デバイス内のハードウェアレジスタに書込みを行う。ＬＰＡＲ制御プログラムは、物理（共有）デバイスがハードウェアレジスタに書込みを行ったアクセス結果と前記ＩＤを物理的なメモリ空間及びＩＯ空間からリードし、前記ＩＤよりＬＰＡＲを特定し、特定したＬＡＰＲ上で動作するＯＳの前記仮想的なメモリ空間及びＩＯ空間にアクセス結果を報告する手段を備える。
【００１４】
（４）物理（共有）デバイスで発生する非同期な事象のＯＳへの報告についても、物理（共有）デバイスは前記ＩＤを付加して報告する事により、ＬＰＡＲ制御プログラムは前記ＩＤで示されるＬＰＡＲで動作中のＯＳの仮想的なメモリ空間及びＩＯ空間に反映する手段を備える。
【発明の効果】
【００１５】
本願において開示される発明のうち、代表的なものによって得られる効果を簡単に説明すれば以下のとおりである。すなわち、本発明の計算機システムによれば、以下のような効果を得ることができる。
【００１６】
（１）業界標準規格のバスを搭載するオープン系サーバにおいて、制御レジスタをメモリ空間及びＩＯ空間にマッピングするデバイスをＬＰＡＲ制御プログラムの制御下で動作する複数のＯＳから共有するシステムを提供できる。
【００１７】
（２）ＯＳ上で動作するデバイス制御プログラムは共有を意識する必要がなく修正が不要である。
【００１８】
（３）ＬＰＡＲ制御プログラムの制御下で動作する複数のＯＳから共有を可能とするために、デバイスはＬＰＡＲ制御プログラムの制御下で動作するＯＳ数分の制御レジスタを持つ必要がない。
【００１９】
（４）デバイスはＬＰＡＲ制御プログラムが物理的なメモリ空間及びＩＯ空間にアクセスする時に、ＬＰＡＲを特定するＬＰＡＲ識別子（ＩＤ）をアクセス結果と共に報告するだけという簡単な実装で、ＬＰＡＲ制御プログラムの制御下で動作する複数のＯＳからの共有が可能となる。
【発明を実施するための最良の形態】
【００２０】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一の部材には原則として同一の符号を付し、その繰り返しの説明は省略する。
【００２１】
図２は、本発明を適用する計算機システムの構成例（ハードウェア）を示す。計算機システム２００は、ＣＰＵ２０１，２０２、ノースブリッジ２０４、主記憶（ＭＳ）２０６、サウスブリッジ２０８、ＰＣＩスロット２１０，２１１、ホストバスアダプタ（ＨＢＡ）２１２、ネットワークインタフェースカード（ＮＩＣ）２１３、各種バス等から構成され、外部ストレージ２１４、ＬＡＮ２１５に接続されている。
【００２２】
この計算機システム２００は、複数のＣＰＵ２０１，２０２を有し、フロントサイドバス（ＦＳＢ）２０３によりノースブリッジ２０４に接続される。ノースブリッジ２０４は、メモリバス２０５により主記憶（ＭＳ）２０６と接続され、バス２０７によりサウスブリッジ２０８と接続される。サウスブリッジ２０８は、ＰＣＩバス２０９によりＰＣＩスロット２１０，２１１に接続される。
【００２３】
ＰＣＩスロット２１０，２１１に搭載されるＰＣＩカードの例としては、外部ストレージ２１４に接続されるホストバスアダプタ（ＨＢＡ）２１２やＬＡＮ２１５に接続されるネットワークインタフェースカード（ＮＩＣ）２１３等がある。本実施の形態では、共有するデバイスとして、ＰＣＩカード（以下においては、ホストバスアダプタ（ＨＢＡ）２１２をＰＣＩカード２１２、ネットワークインタフェースカード（ＮＩＣ）２１３をＰＣＩカード２１３と記す）の例を示す。
【００２４】
図２で示した計算機システム２００上でＰＣＩカード２１２，２１３を制御する方法について記述する。
【００２５】
図２で示した計算機システム２００は、図３で示すようにＯＳ上で動作するプログラムやそのプログラムが扱うデータ等を格納する領域であるメモリ空間（ＭＥＭ）３００とＰＣＩカード２１２，２１３等のデバイスとの通信を行うための領域であるＩＯ空間（ＩＯ）３０１を持つ。ＰＣＩカード２１２，２１３の中にはＯＳ上で動作するプログラムと通信を行う為の領域をメモリ空間（ＭＥＭ）３００上に持つ物もある。該計算機システム２００は該メモリ空間（ＭＥＭ）３００と該ＩＯ空間（ＩＯ）３０１に対してリード、ライトを実施する事によりＯＳ上で動作するプログラムからの要求を実行する。ＰＣＩカードメモリ空間（ＭＭＩＯ）３０２とＰＣＩカードＩＯ空間（ＩＯＭＩＯ）３０３については後述する。
【００２６】
ＰＣＩに関する仕様検討を行うグループであるＰＣＩ−ＳＩＧで規定された仕様により、ＰＣＩカード４００（図２のＰＣＩカード２１２，２１３に対応）は、図４に示す通りＰＣＩコンフィギュレーションレジスタ４０１、ＰＣＩカードメモリ空間レジスタ４０２、ＰＣＩカードＩＯ空間レジスタ４０３を含む。ＯＳ上からＰＣＩカード４００の制御を可能とするためにＰＣＩコンフィギュレーションレジスタ４０１中のメモリ空間ベースアドレスレジスタ４０４及びＩＯ空間ベースアドレスレジスタ４０５に各空間のマッピングを行う開始アドレスを設定する。該設定によりメモリ空間（ＭＥＭ）３００のメモリ空間ベースアドレスレジスタ４０４に設定したアドレスから始まる領域にＰＣＩカードメモリ空間（ＭＭＩＯ）３０２がマッピングされ、ＩＯ空間（ＩＯ）３０１のＩＯ空間ベースアドレスレジスタ４０５に設定したアドレスから始まる領域にＰＣＩカードＩＯ空間（ＩＯＭＩＯ）３０３がマッピングされる。
【００２７】
ＯＳ上からマッピングを行った該ＰＣＩカードメモリ空間（ＭＭＩＯ）３０２及びＰＣＩカードＩＯ空間（ＩＯＭＩＯ）３０３に対してリード、ライトを実行する事によりＰＣＩカード４００の制御を行う。
【００２８】
図５を用いて、ＬＰＡＲ制御プログラムが動作していない構成（１つの計算機システム上で１つのＯＳのみが動作している構成）にて、ＯＳ上からＰＣＩカードメモリ空間（ＭＭＩＯ）３０２を使用してＰＣＩカード２１２，２１３を制御する流れについて説明する。
【００２９】
図５は、ユーザＯＳ（Ｕｓｅｒ  ＯＳ）５００のみが動作しており、該ＯＳ上でＰＣＩカード５１０を制御するプログラムであるＰＣＩカードドライバ５２０が動作している。また、該ＯＳはメモリ空間（ＭＥＭ）５０１を含み、該ＭＥＭ５０１にはＰＣＩカードメモリ空間（ＭＭＩＯ）５０２がマッピングされている。該ＭＭＩＯ５０２は、ＰＣＩカードドライバ５２０からＰＣＩカード５１０に動作指示を行う為のＰＣＩカード５１０内の制御レジスタ（ＣＭＤ−ＲＥＧ）５１２にアクセスを行う為のフィールド（ＣＭＤ）５０３及びＰＣＩカード５１０が前記動作指示に対する実行結果コードを設定する制御レジスタ（ＳＴ−ＲＥＧ）５１３にアクセスを行う為のフィールド（ＳＴ）５０４を含む。
【００３０】
ＣＭＤ−ＲＥＧ５１２とＣＭＤ５０３のフォーマットは共通であり、その例を図７に示す。Ｃｏｍｍａｎｄ（コマンドフィールド）７００はＰＣＩカード５１０に行わせる動作を示し、Ｐａｒａｍｅｔｅｒ（パラメータフィールド）７０１はＣｏｍｍａｎｄ７００で示された動作を行うために必要となるパラメータを示し、Ｒｅｓｅｒｖｅ（リザーブフィールド）７０２は現在未使用の領域である事を示す。また、ＳＴ−ＲＥＧ５１３とＳＴ５０４のフォーマットは共通であり、その例を図８に示す。Ｆａｃｔｏｒ  Ｃｏｄｅ（要因フィールド）８００はＰＣＩカードが報告しようとしている要因を示し、Ｓｔａｔｕｓ（ステータスフィールド）８０１はＦａｃｔｏｒ  Ｃｏｄｅ８００で報告する要因の状態を示し、Ｒｅｓｅｒｖｅ（リザーブフィールド）８０２は現在未使用の領域である事を示す。
【００３１】
ＰＣＩカードドライバ５２０はＣＭＤ５０３をリードし、クリアされた状態であるなら、ＣＭＤ５０３に動作指示コードをライトする。該ライトにより計算機システム２００上では、ＣＰＵ２０１，２０２からメモリへのライト動作指示が発行される。該ライト動作指示はフロントサイドバス２０３を経由してノースブリッジ２０４に到達する。ノースブリッジ２０４は該ライト動作指示が主記憶（ＭＳ）２０６へのライトではなく、ＰＣＩカード２１２，２１３へのライトであると判断し、バス２０７を経由してサウスブリッジ２０８に到達する。サウスブリッジ２０８はＰＣＩカード２１２，２１３に対してＯＳ上でライトされた動作指示コードをライトデータとするライトトランザクションを実行する。該ライトトランザクション実行により、該動作指示コードはＰＣＩカード５１０内のＣＭＤ−ＲＥＧ５１２に書込みが行われる。該書込みを契機としてＰＣＩカード５１０の制御を行うＰＣＩカードファームウェア５１１に動作指示コードが報告される。
【００３２】
ＰＣＩカードファームウェア５１１は受取った動作指示コードの管理テーブル（ＴＡＳＫ−ＬＩＳＴ）５１５に動作指示コードをキューイングし、ＣＭＤ−ＲＥＧ５１２をクリアする。該クリアによりＣＭＤ５０３をリードするとクリアされた値がリードされ、これによりＰＣＩカードドライバ５２０は次の動作指示コードをＣＭＤ５０３にライトできると判断する。ＰＣＩカードファームウェア５１１はＴＡＳＫ−ＬＩＳＴ５１５内の複数の動作指示コードを平行して処理する。処理が完了した動作指示コードからＴＡＳＫ−ＬＩＳＴ５１５からデキューし、実行結果コードをＳＴ−ＲＥＧ５１３に書込みを行う。該書込みにより、ＯＳ上に割込みが発生する。割込みを契機にしてＰＣＩカードドライバ５２０からＳＴ５０４をリードすると、前記ＣＭＤ５０３へのライト動作と同様に、ＣＰＵ２０１，２０２からのリード動作指示はフロントサイドバス２０３、ノースブリッジ２０４、バス２０７を経由して、サウスブリッジ２０８に到達し、サウスブリッジ２０８はＰＣＩバス２０９上にＳＴ−ＲＥＧ５１３をリードするトランザクションを実行し、ＳＴ−ＲＥＧ５１３の値をリードする。該リードした値は、サウスブリッジ２０８、バス２０７、ノースブリッジ２０４、フロントサイドバス２０３を経由してＣＰＵ２０１，２０２に動作指示の実行結果コードが報告される。
【００３３】
即ち、ＬＰＡＲ制御プログラムが動作していない構成（１つの計算機システム上で１つのＯＳのみが動作している構成）では、ＯＳ上からはＰＣＩカードメモリ空間であるＭＭＩＯ５０２をリード、ライトする事により、ＰＣＩカード５１０のハードウェアが持つ制御レジスタ群５１４がリード、ライトされ、これによりＰＣＩカードドライバ５２０からＰＣＩカード５１０の制御が行われる。
【００３４】
図１は、図５のＬＰＡＲ制御プログラムが動作していない構成（１つの計算機システム上で１つのＯＳのみが動作している構成）に対して、本発明の特徴を示した一実施の形態の構成例（ソフトウェア）である。ＬＰＡＲ機能をサポートしている該計算機システム２００上で、ＬＰＡＲ制御プログラム１００の制御の下で、Ｕｓｅｒ  ＬＰＡＲ＃１からＵｓｅｒ  ＬＰＡＲ＃ｎのｎ個のユーザＬＰＡＲ１０４，１０５，１０６が立ち上がり、それぞれのＵｓｅｒ  ＬＰＡＲ１０４，１０５，１０６上で、Ｕｓｅｒ  ＯＳ＃１からＵｓｅｒ  ＯＳ＃ｎのｎ個のユーザＯＳ１０１，１０２，１０３が稼動する事を示す。ｎ個のＵｓｅｒ  ＯＳ１０１，１０２，１０３が各々独立して図３で示すメモリ空間（ＭＥＭ）３００とＩＯ空間（ＩＯ）３０１を含む。
【００３５】
ＬＰＡＲ制御プログラム１００の制御の下で動作するｎ個のＵｓｅｒ  ＯＳ１０１，１０２，１０３から共有する物理（共有）デバイス１１１として、ＰＣＩカード２１２，２１３を例にして説明する。
【００３６】
ＬＰＡＲ制御プログラム１００は、ＰＣＩコンフィギュレーションレジスタ４０１中のメモリ空間ベースアドレスレジスタ４０４にメモリ空間（ＭＥＭ）３００にマッピングを行う開始アドレスをライトする事によりＰＣＩカード４００をメモリ空間（ＭＥＭ）３００へマッピングする。該物理的にマッピングされたＰＣＩカードメモリ空間（ＭＭＩＯ）３０２であるＰ−ＭＭＩＯ１１０へのアクセスによりＰＣＩカード５１０のハードウェアが持つレジスタ群５１４にアクセスが行われる事になる。
【００３７】
一方、ＰＣＩカード４００をメモリ空間（ＭＥＭ）３００へマッピングする為に、該ｎ個のＵｓｅｒ  ＯＳ１０１，１０２，１０３は各々独立してＰＣＩコンフィギュレーションレジスタ４０１中のメモリ空間ベースアドレスレジスタ４０４にメモリ空間（ＭＥＭ）３００にマッピングを行う開始アドレスのライト動作指示を行う。ＬＰＡＲ制御プログラム１００は該ライト動作指示をトラップし、メモリ空間ベースアドレスレジスタ４０４には実際には書込みを行わず、更に各Ｕｓｅｒ  ＯＳ１０１，１０２，１０３に対してはメモリ空間ベースアドレスレジスタ４０４へのライト動作を正常終了させる。これにより、各Ｕｓｅｒ  ＯＳ１０１，１０２，１０３に対して仮想的なＰＣＩカードメモリ空間（ＭＭＩＯ）であるＶ−ＭＭＩＯ１０７，１０８，１０９をマッピングする。ＯＳ上から仮想的にマッピングされたＰＣＩカードメモリ空間（ＭＭＩＯ）であるＶ−ＭＭＩＯ１０７，１０８，１０９に対してライト動作指示が行われると、ＬＰＡＲ制御プログラム１００がトラップした後、ＬＰＡＲ制御プログラム１００が物理的にマッピングされたＰＣＩカードメモリ空間（ＭＭＩＯ）であるＰ−ＭＭＩＯ１１０にライトを行い、ＰＣＩカード５１０のハードウェアが持つレジスタ群５１４に書込みを行う。ＯＳ上から仮想的にマッピングされたＰＣＩカードメモリ空間であるＶ−ＭＭＩＯ１０７，１０８，１０９に対してリード動作指示が行われると、ＬＰＡＲ制御プログラム１００がトラップし、ＰＣＩカード５１０のハードウェアが持つレジスタ群５１４から読込みを行うのではなく、ＬＰＡＲ制御プログラム１１０がＵｓｅｒ  ＯＳ１０１，１０２，１０３毎に管理している仮想的にマッピングされたＰＣＩカードメモリ空間（ＭＭＩＯ）であるＶ−ＭＭＩＯ１０７，１０８，１０９の値を見せかける。
【００３８】
仮想的なＰＣＩカードメモリ空間（ＭＭＩＯ）であるＶ−ＭＭＩＯ１０７，１０８，１０９のマッピングと同様にＬＰＡＲ制御プログラムがＩＯ空間ベースアドレスレジスタ４０５へのライト動作をトラップする事により仮想的なＰＣＩカードＩＯ空間（ＩＯＭＩＯ）を各ＯＳにマッピングする事も可能である。図１は、仮想的なＰＣＩカードメモリ空間（ＭＭＩＯ）であるＶ−ＭＭＩＯ１０７，１０８，１０９の例のみを示す。
【００３９】
図６は、ＬＰＡＲ制御プログラム６２０（図１のＬＰＡＲ制御プログラム１００に対応）の制御下で２つのＵｓｅｒ  ＯＳ６００（図１のＵｓｅｒ  ＯＳ１０１に対応），６１０（図１のＵｓｅｒ  ＯＳ１０２に対応）が動作しており、それぞれのＵｓｅｒ  ＯＳ上でＰＣＩカードドライバ６０５，６１５が独立して動作している。また、Ｕｓｅｒ  ＯＳ６００，６１０はそれぞれ独立したメモリ空間であるＭＥＭ６０１，６１１を含み、それぞれのＭＥＭ６０１，６１１は仮想的にマッピングされたＰＣＩカードメモリ空間であるＶ−ＭＭＩＯ６０２，６１２を含む。仮想的にマッピングされたＰＣＩカードメモリ空間であるＶ−ＭＭＩＯ６０２，６１２には、ＬＰＡＲ制御プログラムが動作していない構成の場合と同様に、ＰＣＩカード６３０（図２のＰＣＩカード２１２，２１３に対応）内のＣＭＤ−ＲＥＧ６３２をアクセスする為のフィールドであるＶ−ＣＭＤ６０３，６１３と、ＳＴ−ＲＥＧ６３４をアクセスする為のフィールドであるＶ−ＳＴ６０４，６１４を含む。
【００４０】
ここで、ＣＭＤ５０３とＶ−ＣＭＤ６０３，６１３、ＳＴ５０４とＶ−ＳＴ６０４，６１４は共通フォーマットであるが、ＣＭＤ−ＲＥＧ６３２のフォーマットはＣＭＤ−ＲＥＧ５１２とは異なり、ＳＴ−ＲＥＧ６３４のフォーマットはＳＴ−ＲＥＧ５１３とは異なる。ＣＭＤ−ＲＥＧ６３２のフォーマットを図９に示し、ＳＴ−ＲＥＧ６３４のフォーマットを図１０に示す。図９は、ＣＭＤ−ＲＥＧ５１２では未使用の領域であったＲｅｓｅｒｖｅ７０２の一部を、ＣＭＤ−ＲＥＧ６３２ではＩＤ−ＣＭＤ（ＬＰＡＲ識別番号フィールド）９０２に割当てている事を示す（９００はコマンドフィールド、９０１はパラメータフィールド、９０３はリザーブフィールド）。同様に、図１０は、ＳＴ−ＲＥＧ５１３では未使用の領域であったＲｅｓｅｒｖｅ８０２の一部を、ＳＴ−ＲＥＧ６３４ではＩＤ−ＳＴ（ＬＰＡＲ識別番号フィールド）１００２に割当てている事を示す（１０００は要因フィールド、１００１はステータスフィールド、１００３はリザーブフィールド）。ＩＤ−ＣＭＤ９０２、ＩＤ−ＳＴ１００２については後述する。
【００４１】
図１１及び図１２は、図６で示す構成においてＰＣＩカードドライバ６０５，６１５がＰＣＩカード６３０に動作指示を送り、その終了報告を得るまでの本発明を適用した一実施の形態を示すフローチャートである。
【００４２】
図１１及び図１２を用いて、ＬＰＡＲ制御プログラムが動作している構成（１つの計算機システム上で複数のＯＳが動作している構成）でのＰＣＩカードメモリ空間（ＭＭＩＯ）３０２を経由したＰＣＩカード制御の流れについて説明する。
【００４３】
図１１において、Ｓ１１００では、Ｕｓｅｒ  ＯＳ＃１上で動作するＰＣＩカードドライバ６０５はＶ−ＣＭＤ６０３に動作指示コードのライト可否を判定する為にＶ−ＣＭＤ６０３をリードする。Ｖ−ＣＭＤ６０３がクリアされていれば（Ｙｅｓ）、Ｓ１１０１へ進む。
【００４４】
Ｓ１１０１では、ＰＣＩカードドライバ６０５はＶ−ＣＭＤ６０３に動作指示コードをライトする。次の新たな動作指示コードをライトする為には再びＳ１１００へ進み、Ｖ−ＣＭＤ６０３がクリアされている事を確認する。次の動作指示がなければＰＣＩカードからの終了報告を待つ。
【００４５】
Ｓ１１０２では、ＬＰＡＲ制御プログラム６２０がＶ−ＣＭＤ６０３へのライトをトラップし、Ｓ１１０３へ進む。
【００４６】
Ｓ１１０３では、ＬＰＡＲ制御プログラム６２０はトラップした動作指示コードを動作指示コード管理テーブル６２１にキューイングする。
【００４７】
図１３は、動作指示コード管理テーブル６２１のフォーマットを示す。該テーブルの各エントリは図９で示すＣＭＤ−ＲＥＧ（ＬＰＡＲ制御プログラムが動作している構成）と同じフォーマットを持つＦＩＦＯ構造のテーブルである（１２００はコマンドフィールド、１２０１はパラメータフィールド、１２０２はＬＰＡＲ識別番号フィールド、１２０３はリザーブフィールド）。
【００４８】
すなわち、前記Ｓ１１０３では、ＬＰＡＲ制御プログラム６２０はトラップした動作指示コードにどのＯＳからの動作指示コードであるかを示すＬＰＡＲ番号識別子（ＩＤ）を付加して、該テーブルの最後尾にキューイングする。更なるＶ−ＣＭＤ６０３，６１３へのライトがあれば、Ｓ１１０２からの処理を繰り返し実行する。
【００４９】
Ｓ１１０４では、ＬＰＡＲ制御プログラム６２０が動作指示コード管理テーブル６２１中にＳ１１０５からＳ１１０７の処理を実施していないエントリが存在すると判断し、動作指示コード管理テーブル６２１の先頭からデキューし、Ｓ１１０５へ進む。
【００５０】
Ｓ１１０５では、ＬＡＰＲ制御プログラム６２０はＣＭＤ−ＲＥＧ６３２への動作指示コードのライト可否を判定する為にＣＭＤ−ＲＥＧ６３２をリードする。ＣＭＤ−ＲＥＧ６３２がクリアされていれば（Ｙｅｓ）、Ｓ１１０６へ進む。
【００５１】
Ｓ１１０６では、新たな動作指示コードをＶ−ＣＭＤ６０３にライト可能である事をＰＣＩカードドライバ６０５に示す為にＶ−ＣＭＤ６０３をクリアし、Ｓ１１０７へ進む。
【００５２】
Ｓ１１０７では、ＬＰＡＲ制御プログラム６２０は、Ｓ１１０４にて動作指示コード管理テーブル６２１からデキューしたエントリのデータをＰＣＩカード６３０内の制御レジスタであるＣＭＤ−ＲＥＧ６３２にライトする。更に動作指示コード管理テーブル６２１内に未処理のエントリがあれば、Ｓ１１０４からの処理を繰り返し実行する。
【００５３】
Ｓ１１０８では、ＬＰＡＲ制御プログラム６２０によるＣＭＤ−ＲＥＧ６３２へのライトを契機としてＰＣＩカード６３０の制御を行うＰＣＩカードファームウェア６４０に動作指示コードと前記ＩＤが報告され、図１２のＳ１１０９へ進む。
【００５４】
図１２において、Ｓ１１０９では、ＰＣＩカードファームウェア６４０はＴＡＳＫ−ＬＩＳＴ６４１に動作指示コードと前記ＩＤをキューイングし、Ｓ１１１０へ進む。
【００５５】
Ｓ１１１０では、ＬＰＡＲ制御プログラム６２０に次の動作指示をＣＭＤ−ＲＥＧ６３２にライト可能である事を示す為にＣＭＤ−ＲＥＧ６３２をクリアし、Ｓ１１１１へ進む。
【００５６】
Ｓ１１１１では、ＰＣＩカードファームウェア６４０はＴＡＳＫ−ＬＩＳＴ６４１内の動作指示コードに従った処理の実行を開始する。ＬＰＡＲ制御プログラム６２０から新たなＣＭＤ−ＲＥＧ６３２へライトが実行されると、Ｓ１１０８からＳ１１１１の処理が実行される。ＰＣＩカードファームウェア６４０はＴＡＳＫ−ＬＩＳＴ６４１内の複数の動作指示コードを平行して実行する事が可能である。完了する順番は動作指示コードを受付けた順番とは異なる可能性もある。動作指示に従った処理が完了した動作指示コードからＳ１１１２へ進む。
【００５７】
Ｓ１１１２では、動作指示に従う処理が完了し、Ｓ１１１３へ進む。
【００５８】
Ｓ１１１３では、完了した動作指示コードから順番にＴＡＳＫ−ＬＩＳＴ６４１からデキューし、実行結果コードと動作指示コードと共に受取った前記ＩＤをＰＣＩカード６３０内の制御レジスタであるＳＴ−ＲＥＧ６３４に書込む。該書込みにより、ＰＣＩバス上に割込みが発生する。
【００５９】
Ｓ１１１４では、ＬＰＡＲ制御プログラム６２０は該割込みをトラップし、Ｓ１１１５へ進む。
【００６０】
Ｓ１１１５では、ＰＣＩカード６３０内の制御レジスタであるＳＴ−ＲＥＧ６３４をリードする。ＳＴ−ＲＥＧ６３４中のＩＤ−ＳＴ１００２からリードした前記ＩＤからＵｓｅｒ  ＯＳ＃１を特定し、Ｕｓｅｒ  ＯＳ＃１の仮想的にマッピングされたＰＣＩカードメモリ空間であるＶ−ＭＭＩＯ６０２中のＶ−ＳＴ６０４にＰＣＩカード内の制御レジスタであるＳＴ−ＲＥＧ６３４からリードした値からＩＤ−ＳＴ１００２をクリアし、実行結果コードを設定すると共にＵｓｅｒ  ＯＳ＃１に割込みを発生させる。
【００６１】
Ｓ１１１６では、Ｕｓｅｒ  ＯＦ＃１において割込みが発生し、Ｓ１１１７へ進む。
【００６２】
Ｓ１１１７では、該割込みを契機にして、ＰＣＩカードドライバ６０５はＶ−ＳＴ６０４をリードし、ＰＣＩカード内の制御レジスタであるＳＴ−ＲＥＧ６３４からリードした実行結果コードをリードし、動作指示は完了する。
【００６３】
該Ｕｓｅｒ  ＯＳ＃１（６００）が実行するＰＣＩカード６３０の前記制御動作によって、Ｕｓｅｒ  ＯＳ＃２（６１０）の仮想的なＰＣＩカードメモリ空間であるＶ−ＭＭＩＯ６１２に変化はない。
【００６４】
以上により、ＯＳ上で動作するＰＣＩカードドライバの修正を行う事なく、ＰＣＩカードファームウェアに少ない修正を加えるだけで、複数ＯＳから同時にＰＣＩカードを共有可能である。
【００６５】
更に、ＰＣＩカード６３０の中にはキュー構造のＣＭＤ−ＲＥＧ６３２を持つＰＣＩカードもある。該ＰＣＩカードの制御ではＣＭＤ−ＲＥＧ６３２のライト可否判定を行う必要がないため、ＰＣＩカードファームウェア６４０への動作指示は簡単なフローとなる。
【００６６】
図１４は、図１１のＳ１１００からＳ１１０７のフローを、キュー構造のＣＭＤ−ＲＥＧ６３２を持つＰＣＩカードの場合に置き換えた例を示すフローチャートであり、Ｓ１１０８以降のフローは図１１及び図１２と同様である。
【００６７】
Ｓ１３００にて、ＰＣＩカードドライバ６０５，６１５はＶ−ＣＭＤ６０３，６１３のライト可否を確認する事なく、Ｖ−ＣＭＤ６０３，６１３に動作指示コードをライトする。
【００６８】
Ｓ１３０１にて、ＬＰＡＲ制御プログラム６２０はＰＣＩカードドライバ６０５，６１５が実行したＶ−ＣＭＤ６０３，６１３へのライトをトラップする。
【００６９】
Ｓ１３０２にて、ＬＰＡＲ番号識別子を付加してＣＭＤ−ＲＥＧ６３２にライトする。
【００７０】
それ以降のフローは図１１のＳ１１０８と同様である。
【００７１】
以上により、キュー構造のＣＭＤ−ＲＥＧ６３２を持つＰＣＩカード６３０に対してはより簡単な実装で複数のＯＳから同時にＰＣＩカードを共有可能である。
【００７２】
また、ＰＣＩカード６３０が検出した非同期事象についても、ＰＣＩカードファームウェア６４０がＳＴ−ＲＥＧ６３４に非同期事象コードとＬＰＡＲ識別子（ＩＤ）を設定する事により、実行結果コードを報告する場合と同様の流れにより、ＩＤ−ＳＴ１００２で指定したＬＰＡＲ上で動作するＵｓｅｒ  ＯＳにＳＴ−ＲＥＧ６３４に設定した非同期事象を報告する事が可能である。
【００７３】
以上のように、本実施の形態によれば、複数のＯＳから同時にデバイスの共有が可能であるため、物理的に搭載できるデバイス数に制限のある計算機システムにおいて、デバイスを共有する事により、各ＯＳに論理的に多くのデバイスを接続可能である。
【００７４】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【産業上の利用可能性】
【００７５】
本発明は、業界標準規格のバスを搭載するオープン系サーバにおいて、制御レジスタがメモリ空間及びＩＯ空間にマッピングされる１つの物理的なデバイスに対する複数のＯＳからの処理を同時に実行する計算機システムに利用可能である。
【図面の簡単な説明】
【００７６】
【図１】本発明の一実施の形態の計算機システムの構成例（ソフトウェア）を示すブロック図である。
【図２】本発明の一実施の形態の計算機システムの構成例（ハードウェア）を示すブロック図である。
【図３】本発明の一実施の形態の計算機システムにおいて、ユーザＯＳが管理する空間を示す説明図である。
【図４】本発明の一実施の形態の計算機システムにおいて、ＰＣＩカードの構成を示す説明図である。
【図５】本発明の一実施の形態の計算機システムに対して、１つの計算機システム上で１つのＯＳのみが動作している構成におけるＰＣＩカード制御に関する説明図である。
【図６】本発明の一実施の形態の計算機システムにおいて、１つの計算機システム上で複数のＯＳが動作している構成におけるＰＣＩカード制御に関する説明図である。
【図７】本発明の一実施の形態の計算機システムに対して、ＯＳ上の制御プログラムがアクセスする動作指示フィールドのフォーマットを示す説明図である。
【図８】本発明の一実施の形態の計算機システムに対して、ＯＳ上の制御プログラムがアクセスする実行結果フィールドのフォーマットを示す説明図である。
【図９】本発明の一実施の形態の計算機システムにおいて、ＰＣＩカード内の動作指示レジスタフォーマットを示す説明図である。
【図１０】本発明の一実施の形態の計算機システムにおいて、ＰＣＩカード内の実行結果レジスタフォーマットを示す説明図である。
【図１１】本発明の一実施の形態の計算機システムにおいて、ＰＣＩカードの制御の流れを示すフローチャートである。
【図１２】本発明の一実施の形態の計算機システムにおいて、図１１に続くＰＣＩカードの制御の流れを示すフローチャートである。
【図１３】本発明の一実施の形態の計算機システムにおいて、動作指示コード管理テーブルを示す説明図である。
【図１４】本発明の一実施の形態の計算機システムにおいて、キュー構造のＣＭＤ−ＲＥＧを持つＰＣＩカードの場合の制御の流れを示すフローチャートである。
【符号の説明】
【００７７】
１００…ＬＰＡＲ制御プログラム、１０１，１０２，１０３…ユーザＯＳ（Ｕｓｅｒ  ＯＳ）、１０４，１０５，１０６…ユーザＬＰＡＲ（Ｕｓｅｒ  ＬＰＡＲ）、１０７，１０８，１０９…各ユーザＯＳのメモリ空間に仮想的にマッピングされたＰＣＩカードメモリ空間（Ｖ−ＭＭＩＯ）、１１０…メモリ空間に物理的にマッピングされたＰＣＩカードメモリ空間（Ｐ−ＭＭＩＯ）、１１１…物理（共有）デバイス、
２００…計算機システム、２０１，２０２…ＣＰＵ、２０３…フロントサイドバス、２０４…ノースブリッジ、２０５…メモリバス、２０６…主記憶（ＭＳ）、２０７…ノースブリッジとサウスブリッジを接続するバス、２０８…サウスブリッジ、２０９…ＰＣＩバス、２１０，２１１…ＰＣＩスロット、２１２…ホストバスアダプタ（ＨＢＡ）、２１３…ネットワークインタフェースカード（ＮＩＣ）、２１４…外部ストレージ、２１５…ＬＡＮ、
３００…メモリ空間（ＭＥＭ）、３０１…ＩＯ空間（ＩＯ）、３０２…ＰＣＩカードメモリ空間（ＭＭＩＯ）、３０３…ＰＣＩカードＩＯ空間（ＩＯＭＩＯ）、
４００…ＰＣＩカード、４０１…ＰＣＩコンフィギュレーションレジスタ、４０２…ＰＣＩカードメモリ空間レジスタ、４０３…ＰＣＩカードＩＯ空間レジスタ、４０４…メモリ空間ベースアドレスレジスタ、４０５…ＩＯ空間ベースアドレスレジスタ、
５００…ユーザＯＳ（Ｕｓｅｒ  ＯＳ）、５０１…メモリ空間（ＭＥＭ）、５０２…ＰＣＩカードメモリ空間（ＭＭＩＯ）、５０３…ＣＭＤ−ＲＥＧが物理的にメモリ空間にマップされたフィールド（ＣＭＤ）、５０４…ＳＴ−ＲＥＧが物理的にメモリ空間にマップされたフィールド（ＳＴ）、５１０…ＰＣＩカード、５１１…ＰＣＩカードファームウェア、５１２…コマンドコードが設定されるＰＣＩカード内の制御レジスタ（ＣＭＤ−ＲＥＧ）、５１３…実行結果コードが設定されるＰＣＩカード内の制御レジスタ（ＳＴ−ＲＥＧ）、５１４…ＰＣＩカード内の制御レジスタ群、５１５…ＰＣＩカード制御部がＯＳ上の制御プログラムから受取った動作指示コードの管理テーブル（ＴＡＳＫ−ＬＩＳＴ）、５２０…ＰＣＩカードドライバ、
６００，６１０…ＬＰＡＲ制御プログラムの制御下で動作するユーザＯＳ（Ｕｓｅｒ  ＯＳ）、６０１，６１１…ユーザＯＳ管理のメモリ空間（ＭＥＭ）、６０２，６１２…メモリ空間に仮想的にマッピングされたＰＣＩカードメモリ空間（Ｖ−ＭＭＩＯ）、６０３，６１３…ＣＭＤ−ＲＥＧが仮想的にメモリ空間にマップされたフィールド（Ｖ−ＣＭＤ）、６０４，６１４…ＳＴ−ＲＥＧが仮想的にメモリ空間にマップされたフィールド（Ｖ−ＳＴ）、６０５，６１５…ＰＣＩカードドライバ、６２０…ＬＰＡＲ制御プログラム、６２１…動作指示コード管理テーブル、６３０…ＰＣＩカード、６３２…コマンドコードが設定されるＰＣＩカード内の制御レジスタ（ＣＭＤ−ＲＥＧ）、６３４…実行結果コードが設定されるＰＣＩカード内の制御レジスタ（ＳＴ−ＲＥＧ）、６４０…ＰＣＩカードファームウェア、６４１…ＰＣＩカード制御部がＯＳ上の制御プログラムから受取った動作指示コードの管理テーブル（ＴＡＳＫ−ＬＩＳＴ）、
７００…コマンドフィールド（Ｃｏｍｍａｎｄ）、７０１…パラメータフィールド（Ｐａｒａｍｅｔｅｒ）、７０２…リザーブフィールド（Ｒｅｓｅｒｖｅ）、
８００…要因フィールド（Ｆａｃｔｏｒ  Ｃｏｄｅ）、８０１…ステータスフィールド（Ｓｔａｔｕｓ）、８０２…リザーブフィールド（Ｒｅｓｅｒｖｅ）、
９００…コマンドフィールド（Ｃｏｍｍａｎｄ）、９０１…パラメータフィールド（Ｐａｒａｍｅｔｅｒ）、９０２…ＬＰＡＲ識別番号フィールド（ＩＤ−ＣＭＤ）、９０３…リザーブフィールド（Ｒｅｓｅｒｖｅ）、
１０００…要因フィールド（Ｆａｃｔｏｒ  Ｃｏｄｅ）、１００１…ステータスフィールド（Ｓｔａｔｕｓ）、１００２…ＬＰＡＲ識別番号フィールド（ＩＤ−ＳＴ）、１００３…リザーブフィールド（Ｒｅｓｅｒｖｅ）、
１２００…コマンドフィールド（Ｃｏｍｍａｎｄ）、１２０１…パラメータフィールド（Ｐａｒａｍｅｔｅｒ）、１２０２…ＬＰＡＲ識別番号フィールド（ＩＤ−ＣＭＤ）、１２０３…リザーブフィールド（Ｒｅｓｅｒｖｅ）。
【図１】
2008158710.tif 000003
【図２】
2008158710.tif 000004
【図３】
2008158710.tif 000005
【図４】
2008158710.tif 000006
【図５】
2008158710.tif 000007
【図６】
2008158710.tif 000008
【図７】
2008158710.tif 000009
【図８】
2008158710.tif 000010
【図９】
2008158710.tif 000011
【図１０】
2008158710.tif 000012
【図１１】
2008158710.tif 000013
【図１２】
2008158710.tif 000014
【図１３】
2008158710.tif 000015
【図１４】
2008158710.tif 000016