(57)【要約】【課題】  複数のオブジェクト間で共通する変数群を同一メモリ配置としてメモリを共有させることができるメモリ共有方法、プログラム、メモリ共有化システムを提供する。【解決手段】  オブジェクト５Ｂから集成体１のメモリ配置イメージ６Ｂに対応するマッピング情報を抽出してマッピング情報ファイル１０を生成する。オブジェクト５Ｂとは異なるコンパイラ３Ａ、リンカ４Ａを介して生成されたオブジェクト５Ａの集成体変数のメモリ配置イメージは、６Ａとなる。これをマッピング情報ファイル１０を参照し、マッピング変換装置１３により、再マッピングしてメモリ配置イメージ８Ａ（＝６Ｂ）となる集成体を有するオブジェクト７Ａを生成することで、オブジェクト７Ａ、５Ｂは、共有メモリ９において集成体変数を相互参照することが可能となる。【選択図】  図１
2007058797.tif 000002
【特許請求の範囲】
【請求項１】
同一構成変数からなる変数群を使用する２以上のオブジェクトのうち少なくとも一のオブジェクトが使用する前記変数群は、他のオブジェクトが使用する前記変数群のメモリ配置と異なるメモリ配置となる場合に前記変数群を記憶するメモリを共有するメモリ共有方法であって、
前記他のオブジェクトから前記変数群のメモリ配置情報を抽出し、
前記抽出結果に基づき、前記他のオブジェクトの前記変数群のメモリ配置と同一の配置となるよう、前記一のオブジェクトの前記変数群のメモリ配置を変換するメモリ共有方法。
【請求項２】
前記一のオブジェクトは、前記他のオブジェクトとは異なるプロセッサにより使用されるものである
ことを特徴とする請求項１記載のメモリ共有方法。
【請求項３】
前記一のオブジェクトは、前記他のオブジェクトとは異なるコンパイラによりコンパイルされたものである
ことを特徴とする請求項１記載のメモリ共有方法。
【請求項４】
前記変数群は、集成体である
ことを特徴とする請求項１記載のメモリ共有方法。
【請求項５】
前記２以上のオブジェクトは、一の集成体を共有する２以上のソースプログラムから２以上のコンパイラにより生成されたものである
ことを特徴とする請求項４記載のメモリ共有方法。
【請求項６】
前記メモリ配置情報を変換する際には、
前記他のオブジェクトから各変数の配置アドレスを抽出し、前記一のオブジェクトにおける各変数の配置アドレスを当該抽出した各変数の配置アドレスに変換する
ことを特徴とする請求項５記載のメモリ共有方法。
【請求項７】
前記配置情報は、集成体のベースアドレス及び各メンバのオフセット値を含む
ことを特徴とする請求項５記載のメモリ共有方法。
【請求項８】
同一構成変数からなる変数群を使用する２以上のオブジェクトのうち少なくとも一のオブジェクトが使用する前記変数群は、他のオブジェクトが使用する前記変数群のメモリ配置と異なるメモリ配置となる場合に前記変数群を記憶するメモリを共有させる動作をコンピュータに実行させるためのプログラムであって、
前記他のオブジェクトから前記変数群のメモリ配置情報を抽出し、
前記抽出結果に基づき、前記他のオブジェクトの前記変数群のメモリ配置と同一の配置となるよう、前記一のオブジェクトの前記変数群のメモリ配置を変換するプログラム。
【請求項９】
同一構成変数からなる変数群を使用する２以上のオブジェクトのうち少なくとも一のオブジェクトが使用する前記変数群は、他のオブジェクトが使用する前記変数群のメモリ配置と異なるメモリ配置となる場合に前記変数群を記憶するメモリを共有させるためのメモリ共有化システムであって、
前記他のオブジェクトから前記変数群のメモリ配置情報を抽出する配置情報抽出装置と、
前記配置情報抽出部が抽出した抽出結果に基づき前記一のオブジェクトの前記変数群のメモリ配置を前記他のオブジェクトの前記変数群のメモリ配置と同一の配置となるよう変換する配置情報変換装置とを有するメモリ共有化システム。
【請求項１０】
同一構成変数からなる変数群を使用する２以上のオブジェクトのうち少なくとも一のオブジェクトが使用する前記変数群は、他のオブジェクトが使用する前記変数群のメモリ配置と異なるメモリ配置となる場合に前記変数群を記憶するメモリを共有させるためのメモリ共有化システムであって、
前記他のオブジェクトの前記変数群のメモリ配置情報が登録される配置情報データベースと、
ソースプログラムをコンパイルして前記一のオブジェクトを生成するオブジェクト生成装置とを備え、
前記オブジェクト生成装置は、上記ソースプログラムをコンパイルするコンパイラと、前記コンパイラを介して生成された前記一のオブジェクトから前記変数群のメモリ配置情報を抽出する配置情報抽出部と、前記配置情報データベースを参照し、前記一のオブジェクトの前記変数群のメモリ配置を前記他のオブジェクトの前記変数群のメモリ配置と同一の配置となるよう変換する配置情報変換部とを有するメモリ共有化システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、同一の変数から構成される変数群であってメモリへの配置位置が異なる変数群を使用する２以上のオブジェクト間において前記変数群を記憶するメモリを共有するメモリ共有方法、プログラム及びメモリ共有化装置に関する。
【背景技術】
【０００２】
図５は、従前の問題点を説明するための図である。ソースプログラム１０２Ａ、１０２Ｂは、同一の構造体又は共有体（以下、集成体という。）１０１を共有する。構造体、共有体は、Ｃ言語のデータ型の１つを示す。構造体は、複数の変数の集まりを１つにまとめたデータ型である。また、共有体は、一のオブジェクト内で同じメモリを複数の変数について共有して使用するデータ型である。これをプロセッサが異なる等してそれぞれ異なるコンパイラ・リンカ１０３Ａ、１０３Ｂを使用すると、それぞれオブジェクト１０４Ａ、１０４Ｂが生成される。コンパイラ・リンカ１０３Ａ、１０３Ｂは、コンパイラによりソースプログラム１０２Ａ、１０２Ｂをプロセッサ（ＣＰＵ：Central Processing Unit）で動作可能な形式の中間オブジェクトコードに変換し、リンカによりコンパイラにより生成された複数の中間オブジェクトコードを結合し、１つの実行可能なオブジェクトコードを生成するものである。
【０００３】
オブジェクト１０４Ａ、１０４Ｂは、同一の集成体１０１を含むものの、メモリにおける集成体変数のメモリ配置位置が異なる。ここで、１０５Ａ、１０５Ｂは、メモリにおける集成体変数のメモリ配置位置（以下、メモリ配置イメージという。）を示す。
【０００４】
例えばコンパイラ・リンカ１０３Ａは、構造体１０１を構成するメンバＡ〜メンバＥを、構造体１０１の記載順序通りメモリに配置するものとする。これに対し、コンパイラ・リンカ１０３Ｂは、構造体１０１を構成するメンバＡ〜メンバＥを、その容量が大きいものからメモリに配置するものとする。このような場合に、メモリ配置イメージ１０５Ａ、１０５Ｂに示すように、集成体変数の配置位置が異なるため、オブジェクト１０４Ａ、１０４Ｂ間でメモリ１０６を共有することができない。すなわち、複数の異なるオブジェクト間で同一変数をシェアする場合に集成体変数のメモリへの配置が異なれば、互いに集成体の同一メンバを共有することができない。これに対し、従来、下記に示す方法により、メモリの共有を可能としていた。
【０００５】
図６は、公知のメモリ共有方法を説明する図である。メモリを共有する方法の一例としては、ソースプログラムの段階で、集成体変数の宣言を一方のメモリ配置に合わせるように人為的に手作業で修正する方法がある。すなわち、図６に示すように、図５に示すソースプログラム１０２Ａ、１０２Ｂをそれぞれ異なるコンパイラ・リンカ１０３Ａ、１０３Ｂでコンパイルして得られるオブジェクトにおいて、構造体変数についてのメモリを共有するため、ソースプログラム１０２Ａにおいて、構造体１０１を修正して構造体１０７を作成しておき、これをコンパイラ・リンカ１０３にてコンパイルすると、集成体変数の配置位置１１０Ａとなり、オブジェクト１０４Ｂの集成体変数の配置位置１０５Ａに一致する。これにより、オブジェクト１０９Ａとオブジェクト１０４Ｂは、集成体変数を共有メモリ１０６にて共有可能になる。
【０００６】
図６に示す例においては、コンパイラ・リンカ１０３Ａは、集成体１０１の変数の記載順序通りにメモリに配置する性質を有すること及びコンパイラ・リンカ１０３Ｂは、集成体変数の容量が大きいものからメモリに配置する性質を有することを予め把握し、例えばコンパイラ・リンカ１０３Ａにてオブジェクトを生成する側のソースプログラム１０８Ａにおいて、集成体の変数を容量の大きいものから順に記載するよう集成体１０１を集成体１０７のように書き直す。これにより、いずれのコンパイラ・リンカ１０３Ａ、１０３Ｂから得られたオブジェクト１０９Ａ、１０４Ｂにおける集成体変数のメモリ配置イメージは、１１０Ａ、１０５Ｂに示すように同一となり、オブジェクト１０９Ａ、１０４Ｂは、集成体を共有メモリにて相互参照することができる。
【０００７】
ところで、上記のようにメモリ配置を同一としてメモリを共有する方法の他に、特許文献１に記載のメモリマッピング方式がある。図７は特許文献１に記載のメモリマッピング方式を説明する図である。この特許文献１に記載のメモリマッピング装置においては、複数のＣＰＵシステム内にアドレスを変換する装置を具備することでそれぞれのＣＰＵシステム間でメモリを共有する方式である。
【０００８】
図５に示すように、複数のＣＰＵシステム２０１１〜２０１ｎが接続されてなるシステムにおいて、各ＣＰＵシステム２０１１〜２０１ｎは、メモリ２０２１〜２０２ｎと、メモリ制御部２０３１〜２０３ｎと、他のＣＰＵとのインターフェースを制御する他ＣＰＵ制御部２０４１〜２０４ｎとを有し、少なくとも１つのメモリ、例えばメモリ２０２１を共有メモリとして他のＣＰＵ２０１２〜２０２ｎからも制御可能なシステムを構成する。各ＣＰＵ２０１２〜２０１ｎからは、共有メモリ２０２１にアクセスするために設定したそれぞれのアドレスを、共有メモリ２０２１を備えたＣＰＵシステム２００１の他ＣＰＵ制御部２０４１に送り、共有メモリ２０２１を備えたＣＰＵシステム２００１は、それぞれのアドレスをメモリ制御部２０３１のアドレスデコーダ部２３１及びＡＮＤ回路２３２にて共有メモリ２０２１のアドレスに変換することでメモリの共有を行う。
【特許文献１】特開平１１−２４９８６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、上述したように、コンパイル前のソースプログラムにおいて、集成体を変更しておくことで、異なるコンパイラ・リンカによるオブジェクト生成後における集成体変数のメモリ配置位置を同一としてメモリを共有するには、
１．ソースプログラム開発工数がかかる
２．ソースプログラムの再利用性が低くなる
３．ソースプログラムの品質が低くなる
などの問題点がある。
【００１０】
つまり、ソースプログラム作成時に、コンパイラ・リンカ１０３Ａ、コンパイラ・リンカ１０３Ｂが、集成体１０１をメモリにどのように配置するのかを予め調査しておく必要がある。また、配置方法が異なるなる他コンパイラ・リンカを使用する場合、ソースプログラムの変更が必要となるため、プログラム開発工数が増大すると共に、プログラム再利用性が低くなってしまう。更に、ソースプログラムの変更は、プログラミングの段階での手作業となるため、品質上の問題が生じる可能性がある。
【００１１】
また、特許文献１に記載の方法においては、
１．共有メモリへのアクセスにオーバーヘッドがかかる
２．ハードウェアまたはソフトウェアのサイズが大きくなる
などの問題点がある。
【００１２】
つまり、他のＣＰＵから共有メモリへアクセスするためには、共有メモリ２０２１を有するＣＰＵシステム１００１の他ＣＰＵ制御部２０４１及びメモリ制御部２０３１を介すため、その分メモリアクセスへのオーバーヘッドがかかる。更に、このシステムをハードウェアで実装する場合、他ＣＰＵ制御部２０４１及びメモリ制御部２０３１を具備する必要があり、これらの分ハードウェアのサイズが大きくなってしまう。一方、このシステムをソフトウェアで実装する場合、他ＣＰＵ制御部２０４１及びメモリ制御部２０３１はソースプログラムで記述する必要がありその分オブジェクトサイズが大きくなり、使用メモリが増加してしまう。
【課題を解決するための手段】
【００１３】
本発明にかかるメモリ共有方法は、同一構成変数からなる変数群を使用する２以上のオブジェクトのうち少なくとも一のオブジェクトが使用する前記変数群は、他のオブジェクトが使用する前記変数群のメモリ配置と異なるメモリ配置となる場合に前記変数群を記憶するメモリを共有するメモリ共有方法であって、前記他のオブジェクトから前記変数群のメモリ配置情報を抽出し、前記抽出結果に基づき、前記他のオブジェクトの前記変数群のメモリ配置と同一の配置となるよう、前記一のオブジェクトの前記変数群のメモリ配置を変換するものである。
【００１４】
本発明においては、同一の構成変数からなる変数群であってメモリへの配置位置が異なる変数群を使用する２以上のオブジェクト間において、一方のメモリ配置を他方のメモリ配置と同一となるように変換することで、前記変数群を記憶するメモリを共有することができる。
【００１５】
本発明にかかるメモリ共有化システムは、同一構成変数からなる変数群を使用する２以上のオブジェクトのうち少なくとも一のオブジェクトが使用する前記変数群は、他のオブジェクトが使用する前記変数群のメモリ配置と異なるメモリ配置となる場合に前記変数群を記憶するメモリを共有させるためのメモリ共有化システムであって、前記他のオブジェクトから前記変数群のメモリ配置情報を抽出する配置情報抽出装置と、前記配置情報抽出部が抽出した抽出結果に基づき前記一のオブジェクトの前記変数群のメモリ配置を前記他のオブジェクトの前記変数群のメモリ配置と同一の配置となるよう変換する配置情報変換装置とを有するものである。
【００１６】
本発明においては、配置情報抽出装置により他のオブジェクトのメモリ配置情報を抽出し、配置情報変換装置により一のオブジェクトのメモリ配置を他のオブジェクトのメモリ配置と同一となるよう変換することができるため、本システムを適用することで、同一の変数から構成される変数群であってメモリへの配置位置が異なる変数群を使用する２以上のオブジェクト間においてメモリを共有することができる。
【００１７】
本発明に係る他のメモリ共有化システムは、同一構成変数からなる変数群を使用する２以上のオブジェクトのうち少なくとも一のオブジェクトが使用する前記変数群は、他のオブジェクトが使用する前記変数群のメモリ配置と異なるメモリ配置となる場合に前記変数群を記憶するメモリを共有させるためのメモリ共有化システムであって、前記他のオブジェクトの前記変数群のメモリ配置情報が登録される配置情報データベースと、ソースプログラムをコンパイルして前記一のオブジェクトを生成するオブジェクト生成装置とを備え、前記オブジェクト生成装置は、上記ソースプログラムをコンパイルするコンパイラと、前記コンパイラを介して生成された前記一のオブジェクトから前記変数群のメモリ配置情報を抽出する配置情報抽出部と、前記配置情報データベースを参照し、前記一のオブジェクトの前記変数群のメモリ配置を前記他のオブジェクトの前記変数群のメモリ配置と同一の配置となるよう変換する配置情報変換部とを有するものである。
【００１８】
本発明においては、コンパイラ、配置情報抽出部及び配置情報変換部からなるオブジェクト生成装置を具備し、配置情報抽出部が抽出した情報を配置情報データベースに登録するようにしたので、複数のオブジェクト生成装置において配置情報データベースを共有するなどすれば、異なるオブジェクト間における変数群についてのメモリ共有が可能となる。
【発明の効果】
【００１９】
本発明によれば、複数のオブジェクト間で共通する変数群を同一メモリ配置としてメモリを共有させることができるメモリ共有方法、プログラム、メモリ共有化システムを提供することができる。
【発明を実施するための最良の形態】
【００２０】
以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。図１は、本発明の実施の形態１にかかるメモリ共有方法を説明するための図である。ソースプログラム２Ａ、ソースプログラム２Ｂは、共に構造体又は共有体を含むソースプログラムであり、その構造体又は共有体を共有している。
【００２１】
なお、以下の説明においては、構造体（struct）及び共有体（union）（共用体ともいう。）の総称を集成体（集合体ともいう。）１ということとする。構造体、共有体は、Ｃ言語のデータ型の１つを示す。構造体は、複数の変数の集まりを１つにまとめたデータ型である。また、共有体は、一のオブジェクト内で同じメモリを複数の変数について共有して使用するデータ型である。
【００２２】
これに対し、本実施の形態におけるメモリの共有は、共有体のように一のオブジェクト内におけるメモリの共有ではなく、２以上の異なるオブジェクト間におけるメモリの共有に係る。また、本実施の形態は、Ｃ言語を例にとって説明するが、Ｃ言語に限らず、プロセッサが異なる等により、同一構成変数からなる変数群を使用する２以上のオブジェクトのうち少なくとも一のオブジェクトが使用する前記変数群が他のオブジェクトが使用する前記変数群のメモリ配置と異なるメモリ配置となるような場合に好適である。ここで２以上のオブジェクトは、同一のソースプログラムから、異なるコンパイラを介して生成されたものであってもよく、又は異なるプロセッサにより使用されるものであってもよい。また、同一の変数群を共有して使用する異なるソースプログラムから生成されたものであってもよい。
【００２３】
集成体１を有するソースプログラム２Ａは、コンパイラ３Ａにより、ソースプログラム２Ａをプロセッサ（ＣＰＵ）で動作可能な形式の中間オブジェクトコード（オブジェクトモジュール）に変換する。そして、リンカ４Ａは、複数のオブジェクトモジュールを結合し、１つの実行可能なオブジェクト５Ａを生成する。このリンカ４Ａは、いくつかのオブジェクトモジュールやライブラリをリンクさせ、ひとつの整合性のあるプログラムを作成する。オブジェクトモジュールは、アセンブラやコンパイラが出力したマシンコードであり、実行可能なマシンコードとデータとが含まれると同時に、リンカ４Ａがモジュールを結合してひとつのプログラム（オブジェクト）を作るための情報も含まれている。
【００２４】
ここで、本実施の形態におけるオブジェクト５Ａの集成体変数のメモリ配置イメージは６Ａのようになる。すなわち、コンパイラ３Ａは、集成体１を構成する変数（メンバ）を集成体１の記載順序で各メンバＡ〜Ｅをメモリに配置する。よって集成体変数のメモリ配置イメージ６Ａは、集成体変数は配置される先頭アドレス（ベースアドレス）からメンバＡ〜メンバＥの順に配置される。
【００２５】
一方、ソースプログラム２Ａと同一の集成体１を使用するソースプログラム２Ｂは、コンパイラ３Ａ、リンカ４Ａとは異なるコンパイラ３Ｂ、リンカ４Ｂを介してオブジェクト５Ｂとされる。このことにより、オブジェクト５Ｂの集成体変数のメモリ配置イメージは、６Ｂのようになる。すなわち、コンパイラ３Ｂは、集成体１の各メンバＡ〜Ｅのうち、データ量が大きいものから順に配列する。上述したように、オブジェクト５Ａの集成体変数のメモリ配置イメージ６Ａとオブジェクト５Ｂの集成体変数のメモリ配置イメージ６Ｂとはその配置が異なるため、このままではオブジェクト５Ａとオブジェクト５Ｂは、メモリを相互参照することができない。
【００２６】
そこで本実施の形態においては、メモリ共有化装置１０により、両オブジェクトのメモリ配置を統一する。本実施の形態においては、オブジェクト５Ａの集成体変数のメモリ配置イメージ６Ａをオブジェクト５Ｂの集成体変数のメモリ配置イメージ６Ｂに統一するものとする。
【００２７】
メモリ共有化装置１０は、配置情報抽出部としてのマッピング情報抽出装置１１、配置情報データベースとしてのマッピング情報ファイル１２及び配置情報変換装置としてのマッピング変換装置１３を有する。マッピング情報抽出装置１１は、共有メモリ９にて使用するメモリ配置（以下、共有メモリ配置）として使用する側のオブジェクト５Ｂの集成体変数のメモリ配置情報を抽出する。マッピング情報ファイル１２は、マッピング情報抽出装置１１にて抽出された抽出情報（マッピングファイル情報）を格納する。マッピング変換装置１３は、オブジェクト５Ａの集成体変数のメモリ配置を、マッピング情報ファイル１２を参照して、オブジェクト５Ｂの集成体変数のメモリ配置（共有メモリ配置）と同一になるよう変換する。すなわち、オブジェクト５Ａの集成体変数を再マッピングし、オブジェクト５Ｂの集成体変数と同一の集成体変数のメモリ配置を有するオブジェクト７Ａを生成する。オブジェクト７Ａの集成体変数のメモリ配置イメージ８Ａは、オブジェクト５Ｂの集成体変数のメモリ配置イメージ６Ｂと同一となっている。これにより、２つのオブジェクト７Ａ、５Ｂは、共有メモリ９において集成体変数を共有することができる。
【００２８】
以下、マッピング変換の動作について詳細に説明する。図２は、メモリ共有化装置１０の動作を説明するための図である。図３は、メモリ共有化装置１０の動作を示すフローチャートである。
【００２９】
オブジェクト５Ａ、オブジェクト５Ｂは、例えばＥＬＦ（Executable and Linking Format）形式や、ＣＯＦＦ（Common Object File Format）形式等のバイナリファイルであり、通常、変数、関数などのシンボル情報を含む。マッピング情報抽出装置１１は、オブジェクト５Ｂに含まれるシンボル情報を解析し、マッピング情報ファイル１２を生成する（ステップＳ１）。なおマッピング情報ファイル１２は、オブジェクト５Ｂの集成体の情報のみならず、他の集成体の情報が含まれていてもよい。
【００３０】
マッピング変換装置１３は、オブジェクト５Ａの集成体情報を抽出し（ステップＳ２）、マッピング情報ファイル１２に格納されている情報において、オブジェクト５Ａに含まれる集成体１のシンボル名（集成体名）を検索する（ステップＳ３）。集成体情報には、シンボル名の他、集成体１のメモリにおける先頭アドレスを示すベースアドレス、集成体のサイズ、並びに集成体１の各構成メンバのメンバ名、オフセット値、型及びサイズ等が含まれる。次に、検索された集成体１の各メンバ情報のうち、本実施の形態においては各メンバのオフセット値の書き換えを行なう。オフセット値はベースアドレスからの各メンバの相対アドレスを示す値である。
【００３１】
先ず、オブジェクト５Ａにおいて先頭に配置されるのはメンバＡであるので、メンバＡを検索する（ステップＳ４）。オブジェオクト５ＢにおいてメンバＡは２番目に配置されているため、ベースアドレスからの相対アドレスを示すオフセット値が異なる。オブジェクト５Ａにおける集成体１のメンバＡのオフセット値をオブジェクト５Ｂにおける集成体１のメンバＡのオフセット値に書き換える（ステップＳ５）。これにより、オブジェクト６Ｂとオブジェクト６ＡにおけるメンバＡのオフセット値が一致し、メンバＡのメモリでの配置位置が同一となる。以降、オブジェクト５Ａにおいて最後に配置されるメンバＥのオフセット値の書き換え（再マッピング）が終了するまで、ステップＳ４、Ｓ５の処理を繰り返す。このことにより、マッピング変換装置１３は、オブジェクト７Ａを生成する。オブジェクト７Ａは、再マッピングによりその集成体変数の配置位置がオブジェクト５Ｂの集成体変数の配置と一致している。これにより、集成体変数のメモリ配置イメージ８Ａ又は６Ｂに示すように、両オブジェクト７Ａ、５Ｂは集成体１の相互参照が可能となりメモリを共有することができる。
【００３２】
本実施の形態においては、集成体のメモリ配置が異なる場合には、オブジェクト生成後にメモリ共有化装置１０により集成体の再マッピングを行なう。このことにより、ソースプログラム開発時に、ソースプログラムにおいて集成体変数宣言で同一の宣言文をそのまま使用でき、手作業によるコンパイル・リンク後のメモリ配置の検討及び変更の必要もなく、ソースプログラム開発工数を削減することができる。よって、メモリへの配置方法が異なる他コンパイラ・リンカを使用する場合でも、メモリ共有化装置により再マッピングが可能であるため、ソースプログラムを書き直す必要がなく、ソースプログラムの再利用性が向上する。
【００３３】
また、従来のように、コンパイラ・リンカでオブジェクトを生成する前に手作業での集成体変数を変更しておき、オブジェクト生成後に共用できるようにする方法と比べると、本実施の形態では手作業での変更がなくなるため、ソースプログラムの品質を向上させることができる。
【００３４】
更に、共有メモリへのアクセス時にアドレスを変換する装置又はプログラムを具備する必要がないため、共有メモリへのアクセス時のオーバーヘッドを削減することができる。すなわち、集成体変数を共有するオブジェクトは、集成体変数を共有するために、アドレス変換のための処理やアドレス変換のためのテーブルを有する必要がないため、オブジェクトサイズを小さくすることができ、使用メモリを削減することができる。また、アドレス変換のための特別なハードウェアを用意する必要がなく、ハードウェアサイズを削減することができる。
【００３５】
このように、本実施の形態においては、集成体変数のメモリへの配置が複数の異なるオブジェクト間で集成体変数をシェアする場合、メモリ共有化装置によりメモリ配置位置を自動的に統一することで、相互のメモリ配置仕様を意識することなしにオブジェクトを生成することができる。そして、オブジェクトを生成する段階でアドレスの変換を行うようにすることで、ハードウェアやソフトウェアに特別な装置を不要とすることができる。
【００３６】
次に、本発明の実施の形態２について説明する。図４は、本実施の形態にかかるメモリ共有方法を説明する図である。なお、図４に示す本実施の形態２において、図１に示す実施の形態１と同一構成要素には同一の符号を付してその詳細な説明は省略する。本実施の形態においては、コンパイラ及びリンカを１つのプログラムとし、更に、マッピング情報抽出装置及びマッピング変換装置の機能を追加したオブジェクト生成装置２０Ａ、２０Ｂを備える。
【００３７】
コンパイラ・リンカは、ソースプログラムをコンパイルし、複数のオブジェクトモジュールやライブラリをリンクさせ、ひとつの整合性のあるプログラムを作成するものであるが、これに上述の実施の形態１におけるメモリ共有化装置１０のマッピング情報抽出装置及びマッピング変換装置の機能を持たせたオブジェクト生成装置２０Ａ、２０Ｂにより、マッピング情報ファイル２４を生成したり、マッピング情報ファイル２４を参照して他のオブジェクト生成装置と同様の集成体変数のメモリ配置としたオブジェクトを生成することができる。
【００３８】
本実施の形態にかかるメモリ共有方法について更に詳細に説明する。ソースプログラム２Ａ、ソースプログラム２Ｂは、集成体１を共有する。オブジェクト生成装置２０Ｂは、コンパイラ・リンカ２１Ｂを使用してソースプログラム２Ｂからオブジェクト５Ｂを生成する。このときの集成体１のメモリへの配置イメージは６Ｂのようになる。オブジェオクト生成装置２０Ｂにおいては、オブジェクト５Ｂを生成する同時にマッピング情報抽出装置２２Ｂによりオブジェクト５Ｂに含まれる集成体の情報を抽出し、実施の形態１のマッピング情報ファイル１２と同様のマッピング情報ファイル２４を生成する。このマッピング情報ファイル２４は、他のオブジェクト生成装置が生成したマッピング情報や、オブジェクト生成装置２０Ｂが生成した他のオブジェクトに含まれる他の集成体の情報などもファイリングされていてもよい。
【００３９】
次に、オブジェクト生成装置２０Ａは、コンパイラ・リンカ２１Ｂが生成したオブジェオクト５Ｂに含まれる集成体変数と同一のメモリ配置を有する集成体変数を含むオブジェオクトを生成する。この際、コンパイラ・リンカ２１Ａを使用してソースプログラム２Ａからオブジェクト７Ａを生成するが、コンパイラ・リンカ２１Ａが通常通りオブジェオクトを生成すると実施の形態１のオブジェオクト５Ａとなる。すなわち、その集成体変数のメモリ配置イメージがオブジェクト５Ｂと異なってしまう。そこで、オブジェクト生成装置２０Ａのマッピング変換装置２３Ａは、マッピング情報ファイル２４を参照しオブジェクト５Ｂに含まれる集成体変数のメモリ配置イメージ６Ｂと同じ配置イメージとなるように集成体変数のマッピング変換を行い、メモリ配置イメージ８Ａとなる集成体を含むオブジェクト７Ａを生成する。マッピング変換の動作は実施の形態１と同様であり、集成体１の各メンバのオフセット値をオブジェクト５Ｂに合わせることで行なわれる。
【００４０】
ここで、オブジェクト生成装置においては、マッピング情報ファイルを生成する場合、すなわち、統一するメモリ配置を有する側のオブジェクトを生成するオブジェクト生成装置２０Ｂでは、マッピング情報抽出装置２２Ｂによりマッピング情報ファイル２４を生成し、メモリ配置を統一される側のオブジェクトを生成するオブジェオクト生成装置２０Ａではマッピング変換装置２３Ａがマッピング情報ファイル２４を参照してマッピング変換を実行する。
【００４１】
本実施の形態においても実施の形態１と同様の効果を奏する。そして、更に、本実施の形態においては、実施の形態１でのソースプログラム２Ａのオブジェクト生成手順において、オブジェクト生成後に別途行っていたマッピング変換作業を、コンパイラ・リンカの機能にマッピング変換機能を持たせたオブジェオクト生成装置によって行なうことにより、オブジェクト生成後にプログラマがマッピング変換作業を行う必要がなくなり、実施の形態１に比べて更にプログラム開発工数を削減することができる。
【００４２】
なお、本発明は上述した実施の形態のみに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。例えば、上述の実施の形態では、ハードウェアの構成として説明した装置等においては、これに限定されるものではなく、任意の処理を、ＣＰＵにコンピュータプログラムを実行させることにより実現することも可能である。この場合、コンピュータプログラムは、記録媒体に記録して提供することも可能であり、また、インターネットその他の伝送媒体を介して伝送することにより提供することも可能である。
【００４３】
更に、上述の実施の形態においては、２つのソースプログラムからそれぞれ得られる２つのオブジェオクトを例にとって説明したが、扱うオブジェクトは２つに限らず、３つ以上であってよいことは勿論である。
【図面の簡単な説明】
【００４４】
【図１】本発明の実施の形態１にかかるメモリ共有方法を説明するための図である。
【図２】本発明の実施の形態１におけるメモリ共有化装置の動作を説明するための図である。
【図３】本発明の実施の形態１におけるメモリ共有化装置の動作を示すフローチャートである。
【図４】本発明の実施の形態２にかかるメモリ共有方法を説明するための図である。
【図５】従前の問題点を説明するための図である。
【図６】公知のメモリ共有方法を説明する図である。
【図７】特許文献１に記載のメモリマッピング方式を説明する図である。
【符号の説明】
【００４５】
２Ａ，２Ｂ  ソースプログラム
３Ａ，３Ｂ  コンパイラ
４Ａ，４Ｂ  リンカ
５Ａ，５Ｂ，７Ａ，２０  オブジェオクト
６Ａ，６Ｂ，８Ａ  メモリ配置イメージ
９  共有メモリ
１０  メモリ共有化装置
１１  マッピング情報抽出装置
１２  マッピング情報ファイル
１３  マッピング変換装置
２０Ａ，２０Ｂ  オブジェオクト生成装置
２１Ａ，２１Ｂ  コンパイラ・リンカ
２２Ａ，Ｂ  マッピング情報抽出装置
２３Ａ，２３Ｂ  マッピング変換装置
２４  マッピング情報ファイル
【図１】
2007058797.tif 000003
【図２】
2007058797.tif 000004
【図３】
2007058797.tif 000005
【図４】
2007058797.tif 000006
【図５】
2007058797.tif 000007
【図６】
2007058797.tif 000008
【図７】
2007058797.tif 000009