(57)【特許請求の範囲】
【請求項１】
制御プログラムの制御下で１台の計算機上で複数のＯＳが同時に動作し、各ＯＳの仮想メモリ空間で少なくとも１つのプロセスが動作し、各ＯＳは、各プロセスが使用する仮想メモリ空間のマッピング先の物理メモリ空間の開始物理アドレスが格納されるメモリ空間変換テーブルを有する計算機システムの共有メモリ構築方法であって、
前記制御プログラムは、前記複数のＯＳの各プロセスが共有メモリ空間として使用する物理メモリ空間の開始物理アドレスが格納される共有メモリ制御テーブルを有し、
あるＯＳで動作する第１のプロセスが前記制御プログラムに共有メモリ空間の使用を要求し、該要求を受けた前記制御プログラムは、当該第１のプロセス対応に前記メモリ空間変換テーブルに格納されている開始物理アドレスを前記共有メモリ制御テーブルに格納されている開始物理アドレスに書き換えることを特徴とする計算機システムの共有メモリ構築方法。
【請求項２】
他のＯＳで動作する第２のプロセスが前記制御プログラムに当該第２のプロセスが使用する仮想メモリ空間を共有メモリ空間として登録することを要求し、該要求を受けた前記制御プログラムは当該第２のプロセスが使用する仮想メモリ空間のマッピング先の物理メモリ空間の先頭物理アドレスを開始物理アドレスとして前記共有メモリ制御テーブルに格納することを特徴とする請求項１記載の計算機システムの共有メモリ構築方法。
【請求項３】
前記共有メモリ空間として、どのＯＳにも割り当てられていない物理メモリ空間が割り当てられることを特徴とする請求項１記載の計算機システムの共有メモリ構築方法。
【請求項４】
前記共有メモリ空間として割り当てられる物理メモリ空間が、ＯＳが制御可能なメモリサイズより大きいことを特徴とする請求項３記載の計算機システムの共有メモリ構築方法。
【請求項５】
前記共有メモリ空間として、メモリマップトＩ／Ｏ領域が割り当てられることを特徴とする請求項１記載の計算機システムの共有メモリ構築方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、１台の計算機上の制御プログラムの制御下で複数の異種または同種のＯＳが同時に動作することが可能な計算機システムの共有メモリ構築方法に係り、特に、それぞれのＯＳ上で動作するプロセス間で共有メモリを構築することを可能とした計算機システムの共有メモリ構築方法に関する。
【０００２】
【従来の技術】
共有メモリを構築することが可能な計算機システムに関する従来技術として、複数の仮想計算機が動作する１つの実計算機上において、複数の仮想計算機に割り当てるメモリ空間を相互に一部または全部を重複して設定し、その設定範囲内でメモリ空間を占有または共有することにより、仮想計算機相互間での共有メモリ空間を実現するというものが知られている。
【０００３】
そして、前述の従来技術は、ＯＳ上で動作するプロセスが共有メモリ空間を必要とする場合、この仮想計算機相互間に提供された共有メモリ空間を使用することにより、プロセス間でのメモリの共有が可能とされている。
【０００４】
なお、共有メモリの構築に関する従来技術として、例えば、特開平１１―２４９９１６号公報等に記載された技術が知られている。
【０００５】
【発明が解決しようとする課題】
前述した従来技術は、ＯＳ上で動作するプロセスからの共有メモリの要求に対して、プロセス間ではなくそのプロセスが動作しているＯＳの仮想計算機相互間で共有メモリ空間を実現するために、プロセスレベルの要求がＯＳ及び仮想計算機のメモリ空間の割り当ての変更にまで波及し、共有メモリ構築のためのオーバーヘッドが大きくなるという問題点を有している。
【０００６】
また、前述した従来技術は、予め仮想計算機に割り当てるメモリ空間を相互に一部または全部を重複して設定しておく必要があり、重複して設定したメモリ空間より大きいサイズの共有メモリ空間を動的に確保することが不可能であり、必要な場合には仮想計算機へのメモリ割り当てを再設定する必要が生じ、この再設定のために大きなオーバーヘッドが生じるという問題点を有している。
【０００７】
本発明の目的は、前述した従来技術の問題点を解決し、１台の計算機上の制御プログラムの制御下で複数の異種または同種のＯＳが同時に動作することが可能な計算機システムにおいて、計算機システム上で動作するＯＳに対して柔軟なメモリ空間の割り当てを可能としつつ、共有メモリ空間として割り当てられるメモリ空間サイズの各ＯＳに割り当てられるメモリ空間サイズへの依存を解消してオーバーヘッドの低減を図り、任意のサイズの共有メモリ空間の構築を可能とした計算機システムの共有メモリ構築方法を提供することにある。
【０００８】
また、本発明の目的は、ＯＳ上で動作するプロセスからのプロセス間での共有メモリの構築要求に対し、プロセスと制御プログラムとによって共有メモリを実現することを可能として、ＯＳの介入を必要とせずＯＳに対して透過的に動的な共有メモリの構築を可能とした計算機システムの共有メモリ構築方法を提供することにある。
【０００９】
【課題を解決するための手段】
本発明によれば前記目的は、制御プログラムの制御下で１台の計算機上で複数のＯＳが同時に動作し、各ＯＳの仮想メモリ空間で少なくとも１つのプロセスが動作し、各ＯＳは、各プロセスが使用する仮想メモリ空間のマッピング先の物理メモリ空間の開始物理アドレスが格納されるメモリ空間変換テーブルを有する計算機システムの共有メモリ構築方法であって、前記制御プログラムは、前記複数のＯＳの各プロセスが共有メモリ空間として使用する物理メモリ空間の開始物理アドレスが格納される共有メモリ制御テーブルを有し、あるＯＳで動作する第１のプロセスが前記制御プログラムに共有メモリ空間の使用を要求し、該要求を受けた前記制御プログラムは、当該第１のプロセス対応に前記メモリ空間変換テーブルに格納されている開始物理アドレスを前記共有メモリ制御テーブルに格納されている開始物理アドレスに書き換えることにより達成される。
【００１０】
それぞれのＯＳ上では共有メモリを使用するプロセスが動作しており、これらのプロセスは、共有メモリの設計仕様に従って設計されている。この設計仕様は、プロセスがその実行に際し、共有メモリ空間に指定する仮想メモリ空間のマッピング先の物理メモリ空間を占有して使用できるようＯＳに対して要求し、指定した物理メモリ空間を占有使用することが求められる。また、同一の共有メモリ空間を共有するそれぞれのプロセスは、共有メモリの構築に際して同一のメモリ空間サイズを要求することを求められる。
【００１１】
それぞれのＯＳ上で動作するプロセスが制御プログラムに対してメモリ空間の共有を要求すると、要求を受け取った制御プログラムは、ＯＳが管理するメモリ空間変換テーブル内の共有メモリ空間として指定する仮想メモリ空間のメモリマッピングを、共有メモリ空間に指定された物理メモリ空間にＯＳに非通知に変更することによりＯＳが関与することなく共有メモリを構築する。
【００１２】
一般的には、ＯＳ上のプロセスが使用する仮想メモリ空間に対応する物理メモリ空間は、ＯＳが状況に応じてメモリ割り当ての変更を行うが、本発明は、プロセスが共有メモリに使用する仮想メモリ空間のマッピング先の物理メモリ空間を占有しているため、ＯＳによってメモリマップが変更されることはない。従って、共有メモリ空間の構築時にメモリ空間変換テーブルの書き換えを行ってもＯＳによって検出されることはない。また、ハードウェアによるメモリ空間の変換は、マッピングを変更しただけなので性能が低下することもない。
【００１３】
プロセスが共有メモリ空間の使用を終了した場合、プロセスは、共有メモリ空間の開放を制御プログラムに要求する。制御プログラムは、共有メモリ空間構築の際と同様に、ＯＳに非通知にＯＳのメモリ空間変換テーブルを共有メモリ空間の構築前のマッピングに戻すことによって、共有メモリ空間の構築以前のメモリ割り当て状態に完全に戻す。
【００１４】
共有メモリの構築からプロセスによる共有メモリ空間の使用、及び、共有メモリ空間の開放に至る一連の処理において、ＯＳにはメモリ空間変換テーブルが書き換えられたことは通知せず、ＯＳによってメモリ空間変換テーブルの書き換えを検知されることもない。また、一連の処理にＯＳは一切関与しない。
【００１５】
前述したように、本発明は、ＯＳをスルーして要求を発行し制御プラグラムが要求を処理することにより、ＯＳがプロセス間共有メモリ機構等を有する必要がなく、通常の物理計算機上で動作するＯＳであれば本発明を適応可能なＯＳの種類は問わない。また、共有メモリ要求に際して、メモリ空間の占有を宣言することにより、ＯＳは、対応するメモリ空間を、その要求を発行したプロセスに占有させるため、一度共有メモリ要求を発行すれば共有メモリ空間の開放要求を出さない限り共有メモリ空間を使用しつづけることができ、マッピング変更に伴なうハードウェアによる空間変換の性能低下もない。
【００１６】
共有メモリ空間の開放要求時、変更したメモリマップをもとに戻すことにより、ＯＳは、マッピング変更前となんらかわらずに動作が可能となる。また、アトミック命令で共有メモリのロック制御が可能で、ＯＳの排他制御機構を使用しないため異種ＯＳのプロセス間であってもメモリの共有が可能である。
【００１７】
本発明は、ＯＳの介入を必要としないため、ＯＳが有する機能に制約されることがなく本発明の対象となるＯＳは限定されない。また、本発明は、ＯＳ上で動作するプロセスと制御プログラムによってプロセス間共有メモリを実現することができ、ＯＳ介入がない分、計算機システムの性能向上を図ることができる。
【００１８】
【発明の実施の形態】
以下、本発明による計算機システムの共有メモリ構築方法の実施形態を図面により詳細に説明する。
【００１９】
図１は本発明の一実施形態による計算機システムの構成を示すブロック図、図２は複数のプロセスが共有メモリを構築していない状態のメモリマップの構成を示す図、図３は複数のプロセスが共有メモリを構築している状態のメモリマップの構成を示す図、図４は共有メモリ制御プログラムが制御する共有メモリ制御テーブルの構成を示す図である。図１〜図４において、１００はハードウェア、２００はハイパバイザ、２１０は共有メモリ制御プログラム、２２０は共有メモリ制御テーブル、３００はＯＳａ、４００はＯＳｂ、３１０はプロセスａ、４１０はプロセスｂ、３２０はメモリ空間変換テーブルａ、４２０はメモリ空間変換テーブルｂ、１１００はＯＳａの仮想メモリ空間、１２００はＯＳｂの仮想メモリ空間、１５００は物理メモリ空間である。
【００２０】
本発明の一実施形態による計算機システムは、図１に示すように、計算機システムを構成するハードウェア１００と、１台の計算機上で複数の異なるＯＳが同時に動作することを可能とする制御プログラムであるハイパバイザ２００と、ハイパバイザ２００上で動作するＯＳａ３００、ＯＳｂ４００と、ＯＳａ３００、ＯＳｂ４００上で動作するプロセスａ３１０、プロセスｂ４１０とにより構成されている。そして、ハイパバイザ２００は、共有メモリ制御プログラム２１０を備え、この共有メモリ制御プログラム２１０は、共有メモリ制御プログラム２１０が制御する共有メモリ制御テーブル２２０を有している。また、ＯＳａ３００、ＯＳｂ４００は、各ＯＳが管理するメモリ空間変換テーブルａ３２０、メモリ空間変換テーブルｂ４２０を有している。
【００２１】
なお、図１に示す計算機システムの例は、それぞれ１つのプロセスが動作する２つのＯＳを有するとして示しているが、ＯＳはさらに多数であってよく、また、プロセスも、１つのＯＳ上で複数が動作するものであってよい。
【００２２】
図１に示す計算機システムの動作時の２つのプロセスが共有メモリ空間を構築していない状態でのメモリマップを図２に示している。図２において、ＯＳａ３００の仮想メモリ空間１１００内では、プロセスａ３１０が仮想メモリ空間１１５１及び１１５２で動作し、ＯＳｂ４００の仮想メモリ空間１２００内では、プロセスｂ４１０が仮想メモリ空間１２５１及び１２５２で動作している。また、Ｖａ−１及びＳａ−１は、仮想メモリ空間１１５１の開始仮想アドレス及びサイズを、Ｖａ−２及びＳａ−２は、仮想メモリ空間１１５２の開始仮想アドレス及びサイズを示している。Ｖｂ−１及びＳｂ−１は、仮想メモリ空間１２５１の開始仮想アドレス及びサイズを、Ｖｂ−２及びＳｂ−２は、仮想メモリ空間１２５２の開始仮想アドレス及びサイズを示している。
【００２３】
物理メモリ空間１５００内では、ハイパバイザ２００が物理メモリ空間１５７０で動作している。物理メモリ空間１５３０は、ハイパバイザ２００によってＯＳａのメモリ空間１１００に割り当てられた物理メモリ空間を示し、物理メモリ空間１５５０は、ハイパバイザ２００によってＯＳｂのメモリ空間１２００に割り当てられた物理メモリ空間を示している。共有メモリ構築前、物理メモリ空間１５３１は、仮想メモリ空間１１５１のマッピング先とされ、物理メモリ空間１５３２は、仮想メモリ空間１１５２のマッピング先とされ、物理メモリ空間１５５１は、仮想メモリ空間１２５１のマッピング先とされ、物理メモリ空間１５５２は、仮想メモリ空間１２５２のマッピング先とされている。
【００２４】
前述の状態で、プロセスａ及びプロセスｂは、ＯＳａ及びＯＳｂに対して、マッピング先の物理メモリ空間の占有使用を要求し、各物理メモリ空間がプロセスに占有使用されている。Ｐａ−１は、物理メモリ空間１５３１の開始物理アドレスを、Ｐａ−２は、物理メモリ空間１５３２の開始物理アドレスを、Ｐｂ−１は、物理メモリ空間１５５１の開始物理アドレスを、Ｐｂ−２は、物理メモリ空間１５５２の開始物理アドレスをそれぞれ示している。
【００２５】
図２内に示しているテーブルは、ハードウェアのメモリ空間変換を示すものであり、テーブル３２１は、ＯＳａ３００が管理するメモリ空間変換テーブルａ３２０のプロセスａ３１０に関する部分を示したものである。このテーブル３２１における３２５はプロセスａ３１０が使用している仮想メモリ空間１１５１のマッピング先の物理メモリ空間の開始物理アドレスを示している。また、テーブル４２１は、ＯＳｂ４００が管理するメモリ空間変換テーブルｂ４２０のプロセスｂ４１０に関する部分を示したものである。このテーブル４２０における４２５はプロセスｂ４１０が使用している仮想メモリ空間１２５１のマッピング先の物理メモリ空間の開始物理アドレスを示している。
【００２６】
図１に示す計算機システムの動作時の２つのプロセスが共有メモリ空間を構築している状態でのメモリマップを図３に示している。図３において、図２と異なるのは、仮想メモリ空間１１５１のマッピング先が物理メモリ空間１５３１ではなく、物理メモリ空間１５５１になっている点である。共有メモリ構築の際、メモリ空間変換テーブルａ３２０内の仮想メモリ空間１１５１のマッピング先の物理アドレスがＰａ−１からＰｂ−１に変更される。この結果、物理メモリ空間１５５１は、仮想メモリ空間１１５１及び仮想メモリ空間１２５１のマッピング先の共有メモリ空間となり、物理メモリ空間１５３１は、どの仮想アドレス空間もマッピングされない状態となる。
【００２７】
共有メモリ制御プログラム２１０が制御する共有メモリ制御テーブル２２０の構成を図４に示している。共有メモリ制御テーブル２２０は、エントリ名２２１、開始物理アドレス２２２、共有メモリサイズ２２３、アクセスフラグ２２４、制御フラグ２２５、変更前物理アドレス２２６の各フィールドにより構成される。エントリ名２２１には、その共有メモリ空間を使用するプロセス名等のエントリの名前が格納される。開始物理アドレス２２２には、共有メモリ空間として使用する物理メモリ空間の開始アドレスが格納される。共有メモリサイズ２２３には、共有メモリ空間として使用する物理メモリ空間のサイズが格納される。アクセスフラグ２２４には、その共有メモリ空間を使用中のプロセス及びそのプロセスが動作するＯＳを識別するための識別子が格納される。制御フラグ２２５には、その共有メモリ空間へのプロセス毎のアクセス権等が格納される。変更前物理アドレス２２６には、そのエントリの共有メモリ空間にマッピングされる全ての仮想メモリ空間が共有メモリ空間へのマッピングを変更する前にマッピングされていた物理メモリ空間の物理アドレスが格納される。
【００２８】
プロセス内の仮想メモリ空間のマッピング先の物理メモリ空間を共有メモリ空間として提供したプロセスの場合、変更前物理アドレス２２６には開始物理アドレス２２２と同じ値が格納される。アクセスフラグ２２４、制御フラグ２２５及び変更前物理アドレス２２６には、各エントリに対して、そのエントリの共有メモリ空間にマッピングされている全ての仮想メモリ空間に関するものが格納される。共有メモリ制御テーブル２２０は、共有メモリ制御プログラム２１０によってのみ制御される。ＯＳ上の各プロセスが共有メモリ空間を使用する際に、各プロセスが発行するエントリ名は一致しなければならない。エントリ名が異なる共有メモリを使用することはできない。プロセスは、異なるエントリ名を使用することにより、複数の共有メモリを使用することが可能となる。
【００２９】
図５はＯＳｂ上のプロセスｂが共有メモリ制御プログラムに対して共有メモリ空間の登録を要求したときの処理動作を説明するフローチャート、図６はＯＳａ上のプロセスａが共有メモリ制御テーブルに登録された共有可能メモリ空間の使用を要求したときの処理動作を説明するフローチャート、図７は共有メモリ空間の開放処理、すなわち、ＯＳａ上のプロセスａが仮想メモリ空間のマッピングを共有メモリ構築以前の状態に戻す処理動作を説明するフローチャート、図８はＯＳｂ上のプロセスｂが共有メモリ制御テーブルの共有メモリ空間の登録を抹消する要求を行った場合の処理動作について説明するフローチャートである。
【００３０】
図５に示すフローは、仮想メモリ空間の一部または全部を同一の物理メモリ空間にマッピングする処理において、特に、仮想メモリ空間の一部を物理メモリ空間にマッピングする場合の処理の例であり、以下、これについて説明する。
【００３１】
（１）ＯＳｂ上のプロセスｂがメモリ空間の共有メモリ制御テーブルへの登録要求を行うことにより処理が開始され、ＯＳｂ上のプロセスｂは、現在使用している仮想メモリ空間の一部の仮想メモリ空間１２５１を共有メモリとして使用するため、共有メモリ制御プログラム２１０に対して共有メモリ制御テーブル２２０に仮想メモリ空間１２５１を共有メモリとして登録するよう要求する（ステップ２０１０、２０２０）。
【００３２】
（２）この要求に対して、共有メモリ制御プログラム２１０は、共有メモリ制御テーブル２２０内をサーチし、指定されたエントリ名がエントリ名２２１に登録されいるか否かを調べ、同名のエントリがエントリ名２２１に存在する場合、登録不可能なため、エラーリターンとなる（ステップ２０３０、２１５０）。
【００３３】
（３）ステップ２０３０で、エントリ名２２１に同一のエントリ名が存在しない場合、エントリ名２２１へ当該エントリを格納し、次に、メモリ空間変換テーブルｂ４２０内を検索して仮想メモリ空間１２５１に対応する物理メモリ空間１５５１の先頭物理アドレスＰｂ−１を求め、共有メモリ制御テーブル２２０内の開始物理アドレス２２２へ格納する（ステップ２０４０、２０５０）。
【００３４】
（４）次に、共有メモリ空間のサイズ、この場合、Ｓｂ−１を共有メモリサイズ２２３に格納し、さらに、アクセスフラグ２２４へ要求を出したプロセスｂ及びプロセスｂが動作しているＯＳｂを識別するための識別子を格納する（ステップ２０６０、２０７０）。
【００３５】
（５）次に、制御フラグ２２５へこの共有メモリ空間へのアクセス権などを格納する。この処理を開始させた要求は、プロセスｂ内の仮想メモリ空間１２５１のマッピング先の物理メモリ空間を共有メモリ空間として提供するものであるので、変更前物理アドレス２２６に、開始物理アドレス２２２と同じ物理メモリ空間１５５１の先頭物理アドレスＰｂ−１を格納して、処理を正常終了する（ステップ２０８０、２０９０、２１００）。
【００３６】
前述の処理が終了した時点で、物理アドレスＰｂ−１から大きさＳｂ−１までの物理メモリ空間１５５１は、共有メモリ空間として共有メモリ制御テーブル２２０内に登録されたことになり、エントリ名が一致すればＯＳｂ上のプロセスｂ以外のプロセスから共有可能となる。
【００３７】
次に、図６に示すフローを参照してＯＳａ上のプロセスａが共有メモリ制御テーブルに登録された共有可能メモリ空間の使用を要求したときの共有処理動作について説明する。
【００３８】
（１）共有処理が開始されると、ＯＳａ上のプロセスａは、仮想メモリ空間１１５１のマッピングを現在のマッピング先である物理アドレスＰａ−１からサイズＳａ−１を持つ物理メモリ空間１５３１から共有メモリテーブル２２０に登録されている共有メモリ空間にマッピングを変更するよう共有メモリ制御プログラム２１０に要求する。プロセスは、共有メモリを構築する際に同一のエントリ名を使用するよう設計されており、この場合もプロセスａは、ＯＳｂ上のプロセスｂが共有メモリテーブル２２０に登録したエントリ名と同一のエントリ名を使用して要求を発行する（ステップ２２１０、２２２０）。
【００３９】
（２）プロセスａからの要求に対して、共有メモリ制御プログラム２１０は、共有メモリ制御テーブル２２０内のエントリ名２２１に、要求されたエントリ名が登録されているか否かをサーチする。エントリ名２２１に同一のエントリ名が登録されていなければ、要求を実行することができないのでエラーリターンとする（ステップ２２３０、２３５０）。
【００４０】
（３）ステップ２２３０で、エントリ名２２１に同一のエントリ名が登録されていた場合、次に、共有メモリサイズ２２３をチェックする。このチェックの結果、要求された共有メモリ空間のサイズが登録されている共有メモリサイズと等しくなければ、すなわち、Ｓａ−１がＳｂ−１に等しくなければ要求を満たすことができないためエラーリターンとする（ステップ２２４０、２３５０）。
【００４１】
（４）ステップ２２４０のチェックの結果、要求された共有メモリ空間のサイズが登録されている共有メモリサイズと等しかった場合、次に、マッピング可能か否かを制御フラグ２２５をチェックして調べ、不可である場合、エラーリターンとする（ステップ２２５０、２３５０）。
【００４２】
（５）ステップ２２５０のチェックで、マッピング可能であった場合は、ＯＳａが管理するメモリ空間変換テーブルａ３２０内から仮想アドレスＶａ−１からサイズＳａ−１を持つ仮想メモリ空間１１５１に関するエントリを検索し、現在のマッピング先の物理メモリ空間１５３１の開始物理メモリアドレス３２５の値Ｐａ−１を変更前アドレス２２６に追加する。また、メモリ空間変換テーブルａ３２０内に仮想メモリ空間１１５１に関するエントリがない場合、エラーリターンとする（ステップ２２６０、２２７０、２３５０）。
【００４３】
（６）次に、開始物理メモリアドレス３２５を現在のマッピング先の物理メモリ空間１５３１の開始物理アドレスＰａ−１から共有メモリ制御テーブル２２０内の該当エントリの開始物理アドレス２２２が示す共有メモリ空間１５５１の物理アドレスＰｂ−１に書き換える。このとき、ＯＳａには、メモリ空間変換テーブルａ３２０が書き換えられたことは通知されない（ステップ２２８０）。
【００４４】
（７）次に、アクセスフラグ２２４に、新たにプロセスａ及びプロセスａが動作するＯＳａを識別するための識別子を追加して、処理を正常終了する（ステップ２２９０、２３００）。
【００４５】
前述した処理が終了した時点で、ＯＳａ上で動作するプロセスａとＯＳｂ上で動作するプロセスｂとは、それぞれの仮想メモリ空間１１５１及び仮想メモリ空間１２５１が同一の物理メモリ空間１５５１へマッピングされたことになり、共有メモリとして使用可能となる。マッピングの変更要求は、プロセスから共有メモリ制御プログラム２１０に対して発行され、共有メモリ制御プログラム２１０がマッピングの変更を行うため、ＯＳが関与する必要はない。
【００４６】
前述した図６に示すフローの処理は、プロセスｂからの要求により、図５に示したフローの処理を実行して、プロセスｂが使用しているメモリ空間を共有メモリ空間として提供することが登録された後に、プロセスａがプロセスｂが提供した共有メモリ空間を使用するための処理であったが、本発明は、プロセスｂによる共有メモリ空間の提供がなくても、プロセスａが、プロセスｂが使用しているメモリ空間を共有メモリ空間として使用可能とすることができる。このような使用の形態は、例えば、プロセスａがプロセスｂの動作を監視する等の場合に好適なものである。
【００４７】
この場合の処理は、プロセスａがプロセスｂの動作を監視する等の場合、前述した図６に示すフローのステップ２２２０で、特別のエントリ名を持ってマッピングの要求を出すこととしておき、ステップ２２３０でのチェックで、未登録と判定された場合に、直ちにエラーリターンとするのではなく、未登録と判定された場合に、要求されたエントリ名が特別なものであるか否かをチェックし、もし、エントリ名が特別のものである場合に、ステップ２２８０の処理に移行して、メモリ空間変換テーブルを更新する処理とすればよい。
【００４８】
次に、図７に示すフローを参照して共有メモリ空間の開放処理、すなわち、ＯＳａ上のプロセスａが仮想メモリ空間１１５１のマッピングを共有メモリ構築以前に戻す処理動作について説明する。この処理は、ＯＳｂ上のプロセスｂが一部の仮想メモリ空間１２５１のマッピング先の物理メモリ空間１５５１を共有メモリとして提供し、ＯＳａ上のプロセスａが一部の仮想メモリ空間１１５１をプロセスａが提供した共有メモリ空間にマッピングすることによりＯＳａ上のプロセスａとＯＳｂ上のプロセスｂが共有メモリ空間を使用している場合に、ＯＳａ上のプロセスａが仮想メモリ空間１１５１のマッピングを共有メモリ構築以前の状態に戻すことにより、共有メモリ空間へのアクセス権を放棄する処理である。
【００４９】
（１）処理が開始されると、ＯＳａ上のプロセスａは、仮想メモリ空間１１５１の共有メモリ空間１５５１へのマッピングを共有メモリ構築前にマッピングしていた物理メモリ空間１５３１へマッピングを戻すように共有メモリ制御プログラム２１０に対して要求を行う（ステップ２４１０、２４２０）。
【００５０】
（２）要求を受け取った共有メモリ制御プログラム２１０は、要求されたエントリ名が共有メモリ制御テーブル２２０内のエントリ名２２１に存在するか否かをサーチしてチェックし、該当するエントリ名が登録されていなければエラーリターンとする（ステップ２４３０、２５００）。
【００５１】
（３）ステップ２４３０で、要求されたエントリ名が存在した場合、次に、そのエントリの変更前アドレス２２６からプロセスａの変更前アドレスＰａ−１を求め、ＯＳａが管理するメモリ空間変換テーブルａ３２０内の仮想メモリ空間１１５１のマッピング先の物理メモリアドレス３２５を物理メモリ空間１５５１を示す物理アドレスＰｂ−１から変更前アドレスＰａ−１に書き換える（ステップ２４４０）。
【００５２】
（４）次に、そのエントリにおけるＯＳａ上のプロセスａに関するアクセスフラグ２２４、制御フラグ２２５及び変更前アドレス２２６をクリアして、処理を正常終了する（ステップ２４５０、２４６０、２４７０、２４８０）。
【００５３】
次に、図８を参照して、ＯＳｂ上のプロセスｂが共有メモリ制御テーブルの共有メモリ空間の登録を抹消する要求を行った場合の処理動作について説明する。この処理は、ＯＳａ上のプロセスａとＯＳｂ上のプロセスｂとが、プロセスｂが提供した共有メモリ空間を使用していて、ＯＳａ上のプロセスａが共有メモリ空間へのアクセスを放棄した後、ＯＳｂ上のプロセスｂによる共有メモリ制御テーブル２２０の共有メモリ空間の登録抹消の要求を行った場合の処理である。
【００５４】
（１）登録抹消の処理が開始されると、ＯＳｂ上のプロセスｂは、仮想メモリ空間１２５１のマッピング先である物理メモリ空間１５５１を共有メモリ制御テーブル２２０から共有メモリ空間としての登録を抹消するように共有メモリ制御プログラム２１０に要求を行う（ステップ２６１０、２６２０）。
【００５５】
（２）要求を受け取った共有メモリ制御プログラム２１０は、要求されたエントリ名が共有メモリ制御テーブル２２０内のエントリ名２２１に存在するか否かをサーチしてチェックし、要求されたエントリ名が登録されていなければエラーリターンとする（ステップ２６３０、２７５０）。
【００５６】
（３）ステップ２６３０のチェックで、要求されたエントリ名が存在した場合、他にアクセス中のプロセスが存在するす否かをアクセスフラグ２２４をチェックして調べ、他にアクセス中のプロセスが存在する場合、共有メモリの登録を解除することができないのでエラーリターンとする（ステップ２６４０、２７５０）。
【００５７】
（４）ステップ２６４０のチェックで、他にアクセス中のプロセスが存在しない場合、そのエントリに関する全ての項目、すなわち、アクセスフラグ２２４、制御フラグ２２５、変更前アドレス２２６、開始物理アドレス２２２、共有メモリサイズ２２３、エントリ名２２１をクリア、すなわち、削除して、処理を正常終了する（ステップ２６５０、２６６０、２６７０、２６８０、２６９０、２７００、２７１０）。
【００５８】
なお、前述した処理で、ＯＳｂが管理するメモリ空間変換テーブルｂ４２０には、変更は加えられない。
【００５９】
前述した処理が終了した時点で、ＯＳのメモリ空間変換テーブルは、共有メモリ空間構築前の状態に戻され、ＯＳは、プロセス間での共有メモリ構築以前と同様の動作環境で動作を継続する。
【００６０】
前述で説明した本発明の実施形態は、共有メモリ制御プログラム内の共有メモリ制御テーブルを使用して、共有メモリ空間を構築するとして説明したが、本発明は、共有メモリ制御テーブル２１０を使用することなくプロセス間で共有メモリを構築することもできる。この場合、前述した実施形態に比較して、処理の一部をプロセス側に任せることにより、共有メモリ制御プログラムを簡素化することができるという利点を得ることができる。
【００６１】
ＯＳａ上で動作するプロセスａ及びＯＳｂ上で動作するプロセスｂは、共有メモリ設計仕様に従って設計され、動作に際しＯＳに対してＯＳ空間内での固定オフセットアドレスに占有メモリ空間を要求する。ＯＳａ上で動作するプロセスａ及びＯＳｂ上で動作するプロセスｂは、その動作時の実行アドレスが固定的に規定されている。すなわち、ＯＳａ上で動作するプロセスａの仮想メモリ空間１１５１及び１１５２の物理メモリ空間１５３０内でのオフセットアドレス、ＯＳｂ上で動作するプロセスｂの仮想メモリ空間１２５１及び１２５２の物理メモリ空間１５５０内でのオフセットアドレスは固定的であり、それぞれのプロセスはお互いのプロセスのオフセットアドレスを計算により求めることができる。
【００６２】
以下、共有メモリ制御テーブルを用いない本発明の他の実施形態における処理動作を説明する。なお、計算機システムの構成は、図１に示す計算機システムにおける共有メモリ制御プログラムの中から共有メモリ制御テーブルを除いた構成でよい。
【００６３】
図９はＯＳｂ上のプロセスｂが共有メモリ制御プログラムに対して共有メモリ空間の登録を要求したときの本発明の他の実施形態の処理動作を説明するフローチャート、図１０はＯＳａ上のプロセスａが共有可能メモリ空間の使用を要求したときの本発明の他の実施形態の処理動作を説明するフローチャート、図１１は共有メモリ空間の開放処理、すなわち、ＯＳａ上のプロセスａが仮想メモリ空間のマッピングを共有メモリ構築以前の状態に戻す本発明の他の実施形態の処理動作を説明するフローチャート、図１２はＯＳｂ上のプロセスｂが共有メモリ空間の登録を抹消する要求を行った場合の本発明の他の実施形態の処理動作について説明するフローチャートである。
【００６４】
図９に示すフローによるＯＳｂのプロセスｂが共有メモリ空間の登録を要求したときの本発明の他の実施形態の処理動作は、ＯＳｂ上のプロセスｂによる仮想メモリ空間の共有メモリ空間への登録処理が開始されると、ＯＳｂ上のプロセスｂがプロセス内の仮想メモリ空間１２５１を共有メモリ空間としてプロセスｂ内に設定して、正常終了することにより行われる（ステップ３０１０、３０２０、３０３０）。この処理の設定により、プロセスｂ上でこの仮想メモリ空間１２５１が共有メモリ空間として認識される。共有メモリ制御プログラム２１０に対しては処理要求が出されない。
【００６５】
次に、図１０に示すフローを参照して、ＯＳａ上のプロセスａによるメモリ空間の共有メモリ空間へのマッピング変更要求の処理動作について説明する。
【００６６】
（１）ＯＳａ上のプロセスａによる仮想メモリ空間の共有メモリ空間へのマッピング変更処理が始点されると、ＯＳａ上のプロセスａは、仮想メモリ空間１１５１のマッピングを現在のマッピング先である物理メモリ空間１５３１からＯＳｂ上のプロセスｂが提供する共有メモリ空間１５５１にマッピングを変更するように共有メモリ制御プログラム２１０に要求を行う。プロセスａ内の仮想メモリ空間１１５１の物理メモリ空間１５５０におけるオフセットアドレス及びプロセスｂ内の仮想メモリ空間１２５１の物理メモリ空間１５５０におけるオフセットアドレスは固定的であり、プロセスａ及びプロセスｂには既知の値である（ステップ３１１０、３１２０）。
【００６７】
（２）共有メモリ制御プログラム２１０は、プロセスａからのマッピング変更要求に対して、ＯＳａ内のメモリ空間変換テーブルａ３２０内の仮想メモリ空間１１５１の物理メモリアドレス３２５を物理メモリ空間１５３１の物理開始アドレスＰａ−１から図９のステップ３０２０で登録された仮想メモリ空間１２５１のマッピング先の物理メモリ空間の開始物理アドレスＰｂ−１に書き換えて処理を正常終了する。この場合、共有メモリ制御プログラム２１０は、プロセスからの要求に対してメモリ空間サイズ等のチェックを行わず、要求通りにマッピングの変更を行う。これは、共有メモリに使用する物理アドレス空間のサイズ等の管理が全てプロセス側の責任で行われるからである（ステップ３１３０、３１４０）。
【００６８】
図９、図１０に示すフローの処理が終了した時点で、ＯＳａ上で動作するプロセスａとＯＳｂ上で動作するプロセスｂとは、それぞれの仮想メモリ空間１１５１及び１２５１が同一の物理メモリ空間１５５１へマッピングされたことになり、物理メモリ空間１５５１を共有メモリとして使用可能となる。マッピングの変更要求は、プロセスから共有メモリ制御プログラム２１０に対して発行され、共有メモリ制御プログラム２１０が直接ＯＳのメモリ変換テーブル内の該当エントリを書き換えるため、共有メモリ空間の構築にＯＳが関与することはない。
【００６９】
次に、図１１に示すフローを参照して、共有メモリ空間の開放処理、すなわち、ＯＳａ上のプロセスａが仮想メモリ空間のマッピングを共有メモリ構築以前の状態に戻す処理動作を説明する。図１１に示すフローの処理は、図９及び図１０に示したフローによって、ＯＳｂ上のプロセスｂが仮想メモリ空間１２５１のマッピング先の物理メモリ空間１５５１を共有メモリ空間として提供し、ＯＳａ上のプロセスａが仮想メモリ空間１１５１をプロセスｂが提供した共有メモリ空間にマッピングすることにより、ＯＳａ上のプロセスａとＯＳｂ上のプロセスｂとが共有メモリを使用している場合に、ＯＳａ上のプロセスａが共有メモリ空間に対するマッピングを共有メモリ構築以前の状態に戻し共有メモリ空間へのアクセス権を放棄する処理である。
【００７０】
（１）ＯＳａ上のプロセスａによるマッピング変更の処理が開始されると、ＯＳａ上のプロセスａは、現在仮想メモリ空間１１５１が共有メモリ空間１５５１にマッピングされている状態を、共有メモリ構築前のマッピング先である物理メモリ空間１５３１にマッピングを変更するように共有メモリ制御プログラム２１０に要求を行う（ステップ３２１０、３２２０）。
【００７１】
（２）共有メモリ制御プログラム２１０は、プロセスａからの要求に対して、メモリ空間のサイズ等のチェックを行わずに要求通りに、ＯＳａのメモリ空間変換テーブルａ３２０内の仮想メモリ空間１１５１のエントリの物理アドレス３２５を共有メモリ空間１５５１の開始物理アドレスＰｂ−１から固定オフセットアドレスにある仮想メモリ空間１５３１を示す開始物理アドレスＰａ−１に変更して、処理を正常終了する。これは、共有メモリ空間に使用する物理アドレス空間のアクセス管理が全てプロセス側の責任で行われるからである（ステップ３２３０、３２４０）。
【００７２】
次に、図１２を参照して、ＯＳｂ上のプロセスｂが共有メモリ空間の登録を抹消する要求を行った場合の処理動作を説明する。図１２に示すフローの処理は、図９及び図１０に示すフローの処理により、ＯＳａ上のプロセスａとＯＳｂ上のプロセスｂとがプロセスｂが提供した共有メモリを使用していて、ＯＳａ上のプロセスａが共有メモリ空間へのアクセス権を放棄した後、ＯＳｂ上のプロセスｂによる共有メモリ空間の登録を削除する処理である。
【００７３】
この処理は、登録を削除する処理が開始されると、ＯＳｂ上のプロセスｂが、プロセスｂ内での仮想メモリ空間１２５１の共有メモリ空間登録を削除して、処理を正常終了することにより行われる（ステップ３３１０、３３２０、３３３０）。
【００７４】
前述の図１１、図１２の処理の終了の時点で、ＯＳのメモリ空間変換テーブルは、共有メモリ空間構築前の状態に戻され、ＯＳは、プロセス間での共有メモリ構築以前と同様の動作環境で動作を継続する。
【００７５】
前述までに説明した本発明の実施形態は、ＯＳに割り当てられている物理メモリ空間を共有メモリ空間として割り当てるとしたが、本発明は、どのＯＳにも割り当てられていない物理メモリ空間を共有メモリ空間として割り当てるようにすることができる。
【００７６】
図１３はどのＯＳにも割り当てられていない物理メモリ空間を共有メモリ空間として割り当てた場合のメモリマップの一例を示す図であり、以下、これについて説明する。この例の場合、前述までに説明した実施形態と比較して、共有メモリ空間として物理メモリ空間を提供しているＯＳがダウンした場合に、他のＯＳへその影響が波及することがないという利点を得ることができる。
【００７７】
図１３に示すメモリマップの例は、図２に示すメモリマップの例から、ＯＳａのメモリ空間変換テーブルａ３２０の一部を示すテーブル３２１における仮想メモリ空間１１５１の物理アドレスが、物理メモリ空間１５３１の開始物理アドレスＰａ−１から共有メモリ空間１５４０の開始物理アドレスＰ０−１に変更され、ＯＳｂのメモリ空間変換テーブルｂ４２０の一部を示すテーブル４２１の仮想メモリ空間１２５１の物理アドレスが、物理メモリ空間１５５１の開始物理アドレスＰｂ−１から共有メモリ空間１５４０の開始物理アドレスＰ０−１に変更されている。従って、ＯＳａ上の仮想メモリ空間１１５１及びＯＳｂ上の仮想メモリ空間１２５１は共に、物理メモリ空間内の共有メモリ空間１５４０へマッピングされており、ＯＳａ上のプロセスａとＯＳｂ上のプロセスｂとは、共有メモリ空間１５４０を共有する共有メモリを構築している。
【００７８】
なお、前述した例における共有メモリ空間１５４０は、ＯＳが制御可能なメモリサイズより大きいサイズとして割り当てることができる。但し、この場合、ＯＳが制御可能なメモリサイズより大きいサイズとして割り当てられる共有メモリ空間は、ＯＳが制御可能なメモリサイズを有する複数の共有メモリ空間として物理メモリ空間に設けられ、それらの共有メモリ空間の開始物理アドレスを順次変更していくように制御される。
【００７９】
図１３に示す例は、物理メモリ空間１５００内の特にＯＳに割り当てられていない物理メモリ空間を共有メモリ空間として使用した場合を示しているが、本発明は、ＯＳに割り当てられているが、その時点ではＯＳが使用していない、すなわち、プロセス等に割り当てられていない物理メモリ空間を共有メモリ空間として割り当てることも可能である。
【００８０】
図１４は複数のＯＳがメモリマップトＩ／Ｏを共有メモリ空間として割り当てた場合のメモリマップの一例を示す図であり、以下、これについて説明する。
【００８１】
一般に、１つのＩ／Ｏ装置を複数のプロセスが使用するために、物理メモリ空間にメモリマップトＩ／Ｏと呼ばれるメモリ領域が確保されており、図１４に示すメモリマップの例は、このような場合に、メモリマップトＩ／Ｏを共有メモリ空間として割り当てた例である。
【００８２】
図１４において、１５８０はシステムに１つ搭載されるメモリマップトＩ／Ｏ、１１８０はＯＳａの仮想メモリ空間１１００におけるメモリマップトＩ／Ｏ、１２８０はＯＳｂの仮想メモリ空間１２００におけるメモリマップトＩ／Ｏを示している。メモリ空間変換テーブルａ３２０の一部を示すテーブル３２１内のメモリマップトＩ／Ｏ１１８０の物理アドレス３２５は、図２に示す物理メモリ空間１５３１の開始物理アドレスＰａ−１からメモリマップトＩ／Ｏ１５８０の開始物理アドレスＰ０−２に変更され、メモリ空間変換テーブルｂ４２０の一部を示すテーブル４２１内のメモリマップトＩ／Ｏ１２８０の物理アドレス４２５は、物理メモリ空間１５５１の開始物理アドレスＰｂ−１からメモリマップトＩ／Ｏ１５８０の開始物理アドレスＰ０−２に変更されている。従って、ＯＳａ上のメモリマップトＩ／Ｏ１１８０及びＯＳｂ上のメモリマップトＩ／Ｏ１２８０は、物理メモリ空間内のメモリマップトＩ／Ｏ１５８０へマッピングされたことになり、ＯＳａとＯＳｂとは、メモリマップトＩ／Ｏを共有する共有メモリ空間を構築している。
【００８３】
なお、前述した例は、複数のプロセスが、共有メモリ空間として設定されたメモリマップトＩ／Ｏを共有するとして説明したが、この共有メモリ空間として設定されたメモリマップトＩ／Ｏは、複数のＯＳからも共有メモリ空間として使用することができる。
【００８４】
【発明の効果】
以上説明したように本発明によれば、１台の計算機上で制御プログラムの制御下で複数のＯＳが同時に動作する計算機システムにおいて、それぞれの異種または同種のＯＳ上で動作する異なるプロセス間でＯＳに非依存で透過的に共有メモリを構築することが可能となるので、プロセス間での共有メモリの構築におけるオーバーヘッドを低減することができ、自由度の高い共有メモリ空間の構築を行うことができる。
【００８５】
また、本発明によれば、システム内に１つしか存在しないメモリマップトＩ／Ｏを複数の異種または同種のＯＳに共有メモリ空間として割り当てることもできる。さらに、本発明によれば、あるＯＳ上のプロセスが他のＯＳに割り当てられた物理メモリ空間をそのＯＳに非通知に共有メモリ空間として使用することができるので、そのプロセスが他のＯＳに割り当てられたメモリ空間をそのＯＳに認識されずに参照及び変更することが可能となる。
【図面の簡単な説明】
【図１】本発明の一実施形態による計算機システムの構成を示すブロック図である。
【図２】複数のプロセスが共有メモリを構築していない状態のメモリマップの構成を示す図である。
【図３】複数のプロセスが共有メモリを構築している状態のメモリマップの構成を示す図である。
【図４】共有メモリ制御プログラムが制御する共有メモリ制御テーブルの構成を示す図である。
【図５】ＯＳｂ上のプロセスｂが共有メモリ制御プログラムに対して共有メモリ空間の登録を要求したときの処理動作を説明するフローチャートである。
【図６】ＯＳａ上のプロセスａが共有メモリ制御テーブルに登録された共有可能メモリ空間の使用を要求したときの処理動作を説明するフローチャートである。
【図７】ＯＳａ上のプロセスａが仮想メモリ空間のマッピングを共有メモリ構築以前の状態に戻す処理動作を説明するフローチャートである。
【図８】ＯＳｂ上のプロセスｂが共有メモリ制御テーブルの共有メモリ空間の登録を抹消する要求を行った場合の処理動作について説明するフローチャートである。
【図９】ＯＳｂ上のプロセスｂが共有メモリ制御プログラムに対して共有メモリ空間の登録を要求したときの本発明の他の実施形態の処理動作を説明するフローチャートである。
【図１０】ＯＳａ上のプロセスａが共有可能メモリ空間の使用を要求したときの本発明の他の実施形態の処理動作を説明するフローチャートである。
【図１１】ＯＳａ上のプロセスａが仮想メモリ空間のマッピングを共有メモリ構築以前の状態に戻す本発明の他の実施形態の処理動作を説明するフローチャートである。
【図１２】ＯＳｂ上のプロセスｂが共有メモリ空間の登録を抹消する要求を行った場合の本発明の他の実施形態の処理動作について説明するフローチャートである。
【図１３】どのＯＳにも割り当てられていない物理メモリ空間を共有メモリ空間として割り当てた場合のメモリマップの一例を示す図である。
【図１４】複数のＯＳがメモリマップトＩ／Ｏを共有メモリ空間として割り当てた場合のメモリマップの一例を示す図である。
【符号の説明】
１００  ハードウェア
２００  ハイパバイザ
２１０  共有メモリ制御プログラム
２２０  共有メモリ制御テーブル
３００  ＯＳａ
４００  ＯＳｂ
３１０  プロセスａ
４１０  プロセスｂ
３２０  メモリ空間変換テーブルａ
４２０  メモリ空間変換テーブルｂ
１１００  ＯＳａの仮想メモリ空間
１２００  ＯＳｂの仮想メモリ空間
１５００  物理メモリ空間
【図１】
0003874603.tif 000002
【図２】
0003874603.tif 000003
【図３】
0003874603.tif 000004
【図４】
0003874603.tif 000005
【図５】
0003874603.tif 000006
【図６】
0003874603.tif 000007
【図７】
0003874603.tif 000008
【図８】
0003874603.tif 000009
【図９】
0003874603.tif 000010
【図１０】
0003874603.tif 000011
【図１１】
0003874603.tif 000012
【図１２】
0003874603.tif 000013
【図１３】
0003874603.tif 000014
【図１４】
0003874603.tif 000015