(57)【要約】【課題】プロセス間の通信回数を削減することができる計算機、コンパイルプログラム及びコンパイル方法を提供する。【解決手段】ソースコードをコンパイルしてオブジェクトプログラムを生成する計算機であって、オブジェクトプログラムの実行に伴って生成される複数のプロセス間において、複数のプロセス間で通信される変数であってオブジェクトプログラムの実行に伴って記憶領域が割付けられる第１変数が記憶される第１記憶領域のアドレス情報を、オブジェクトプログラムが実行される際に互いに通知する、オブジェクトプログラムを生成するオブジェクト生成部を有する。【選択図】図１０
2017091287.tif 000002
【特許請求の範囲】
【請求項１】
ソースコードをコンパイルしてオブジェクトプログラムを生成する計算機であって、
前記オブジェクトプログラムの実行に伴って生成される複数のプロセス間において、前記複数のプロセス間で通信される変数であって前記オブジェクトプログラムの実行に伴って記憶領域が割付けられる第１変数が記憶される第１記憶領域のアドレス情報を、前記オブジェクトプログラムが実行される際に互いに通知する、前記オブジェクトプログラムを生成するオブジェクト生成部を有する、
ことを特徴とする計算機。
【請求項２】
請求項１において、
前記オブジェクト生成部は、前記オブジェクトプログラムが実行される際に、前記複数のプロセス間において、前記アドレス情報の記憶領域である第２記憶領域を互いに通知する、前記オブジェクトプログラムを生成する、
ことを特徴とする計算機。
【請求項３】
請求項１において、
前記オブジェクト生成部は、前記オブジェクトプログラムの実行に伴って前記複数のプロセスに含まれる他のプロセスの前記第１変数を参照する場合、参照する前記第１変数に対応する前記アドレス情報が示す記憶領域を参照する、前記オブジェクトプログラムを生成する、
ことを特徴とする計算機。
【請求項４】
請求項１において、
前記複数のプロセスは、それぞれ異なる物理マシンで動作するプロセスである、
ことを特徴とする計算機。
【請求項５】
請求項１において、
前記オブジェクト生成部は、前記オブジェクトプログラムが実行される際に、前記アドレス情報を作成する、前記オブジェクトプログラムを生成する、
ことを特徴とする計算機。
【請求項６】
ソースコードをコンパイルしてオブジェクトプログラムを生成するコンパイルログラムであって、
前記オブジェクトプログラムの実行に伴って生成される複数のプロセス間において、前記複数のプロセス間で通信される変数であって前記オブジェクトプログラムの実行に伴って記憶領域が割付けられる第１変数が記憶される第１記憶領域のアドレス情報を、前記オブジェクトプログラムが実行される際に互いに通知する、前記オブジェクトプログラムを生成する、
処理をコンピュータに実行させることを特徴とするコンパイルプログラム。
【請求項７】
ソースコードをコンパイルしてオブジェクトプログラムを生成するコンパイル方法であって、
前記オブジェクトプログラムの実行に伴って生成される複数のプロセス間において、前記複数のプロセス間で通信される変数であって前記オブジェクトプログラムの実行に伴って記憶領域が割付けられる第１変数が記憶される第１記憶領域のアドレス情報を、前記オブジェクトプログラムが実行される際に互いに通知する、前記オブジェクトプログラムを生成する、
ことを特徴とするコンパイル方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機、コンパイルプログラム及びコンパイル方法に関する。
【背景技術】
【０００２】
例えば、利用者に対してサービスを提供する事業者（以下、単に事業者とも呼ぶ）は、利用者に対して各種サービスの提供を行うために、用途に応じた業務システムを構築して稼働させる。
【０００３】
このような業務システムにおいて、事業者は、利用者に提供するサービスを高速化させるために、例えば、同一の処理を並列して実行させる場合がある。具体的に、業務システムは、並列に実行されることを予め想定したソースプログラム（以下、ソースコードとも呼ぶ）をコンパイルし、オブジェクトプログラム（以下、単にオブジェクトとも呼ぶ）を生成する。その後、業務システムは、生成されたオブジェクトを所定のタイミングで複数回実行する。これにより、業務システムは、オブジェクトに対応する処理を並列して実行することが可能になる。
【０００４】
また、業務システムがオブジェクトを実行することにより生成される各プロセスには、ソースコードに記述された変数を格納された値を記憶するためのメモリ領域がそれぞれ割当てられる。この場合において、各プロセスには、例えば、他のプロセスから参照可能な位置におけるメモリ領域（以下、共有メモリ領域とも呼ぶ）が割当てられる。そして、各プロセスは、オブジェクトの実行に伴って、各変数に格納された値を共有メモリ領域に記憶する。これにより、各プロセスは、各プロセスの変数に格納された値を共有することが可能になる（例えば、特許文献１、２参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平８−０３０５６９号公報
【特許文献２】特許第４７８４８４２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記のような業務システムにおいて、各プロセスが異なる物理マシンで実行される場合、各プロセスは、他のプロセスに割当てられた共有メモリ領域を参照する際に、他の物理マシンに対して通信を行う必要がある。そのため、この場合、他のプロセスとの通信に要する時間は、同一物理マシン内において他のプロセスが実行されている場合と比較して大きくなる。
【０００７】
さらに、各プロセスの変数が格納されるアドレス（共有メモリ領域内におけるアドレス）がオブジェクトの実行時に決定される場合、各プロセスは、他のプロセスの変数に格納された値を取得するために、他のプロセスが動作する物理マシンに複数回通信を行う必要がある場合がある。そのため、この場合、各プロセスが他のプロセスと通信を行う際に要する時間はより大きくなる。
【０００８】
そこで、一つの側面では、プロセス間の通信回数を削減することができる計算機、コンパイルプログラム及びコンパイル方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
実施の形態の一つの態様によれば、ソースコードをコンパイルしてオブジェクトプログラムを生成する計算機であって、前記オブジェクトプログラムの実行に伴って生成される複数のプロセス間において、前記複数のプロセス間で通信される変数であって前記オブジェクトプログラムの実行に伴って記憶領域が割付けられる第１変数が記憶される第１記憶領域のアドレス情報を、前記オブジェクトプログラムが実行される際に互いに通知する、前記オブジェクトプログラムを生成するオブジェクト生成部を有する。
【発明の効果】
【００１０】
一つの側面によれば、プロセス間の通信回数を削減することができる。
【図面の簡単な説明】
【００１１】
【図１】情報処理システム１０の全体構成を示す図である。
【図２】ストレージ装置３に記憶されたソースコードの具体例である。
【図３】ＡＬＬＯＣＡＴＡＢＬＥ属性を持たない変数に割り当てられる共有メモリ領域の具体例を説明する図である。
【図４】ＡＬＬＯＣＡＴＡＢＬＥ属性を持つ変数に割り当てられる共有メモリ領域の具体例を説明する図である。
【図５】本実施の形態における物理マシン１の共有メモリ領域を説明する図である。
【図６】物理マシン１、２のハードウエア構成を説明する図である。
【図７】情報格納領域３３０に格納される情報を説明する図である。
【図８】図６の物理マシン１の機能ブロック図である。
【図９】図６の物理マシン２の機能ブロック図である。
【図１０】第１の実施の形態におけるオブジェクト生成処理の概略を説明するフローチャートである。
【図１１】Ｓ２の処理で生成されたオブジェクト３３３が実行される場合を説明する図である。
【図１２】第１の実施の形態におけるオブジェクト生成処理の詳細を説明するフローチャートである。
【図１３】第１の実施の形態におけるオブジェクト生成処理の詳細を説明するフローチャートである。
【図１４】第１の実施の形態におけるオブジェクト生成処理の詳細を説明するフローチャートである。
【図１５】第１の実施の形態におけるオブジェクト生成処理の詳細を説明するフローチャートである。
【図１６】第１の実施の形態におけるオブジェクト生成処理の詳細を説明するフローチャートである。
【図１７】第１の実施の形態におけるオブジェクト生成処理の詳細を説明するフローチャートである。
【図１８】第１の実施の形態におけるオブジェクト生成処理の詳細を説明するフローチャートである。
【図１９】第１の実施の形態におけるオブジェクト生成処理の詳細を説明するフローチャートである。
【図２０】第１の実施の形態におけるオブジェクト生成処理の詳細を説明するフローチャートである。
【図２１】ＩＤ割当て情報１３３の具体例を説明する図である。
【図２２】ＩＤ幅情報１３４の具体例について説明する図である。
【図２３】ＩＤ幅情報１３４の具体例について説明する図である。
【図２４】ＩＤ幅情報１３４の具体例について説明する図である。
【図２５】ＩＤ割当て数情報１３５の具体例を説明する図である。
【図２６】ＩＤ割当て情報１３３の具体例を説明する図である。
【図２７】ＩＤ割当て数情報１３５の具体例を説明する図である。
【図２８】ＩＤ割当て情報１３３の具体例を説明する図である。
【図２９】ＩＤ割当て数情報１３５の具体例を説明する図である。
【図３０】ＩＤ割当て情報１３３の具体例を説明する図である。
【図３１】オブジェクト３３３の実行時に作成されるアドレス情報１３１の具体例を説明する図である。
【図３２】オブジェクト３３３の実行時に作成されるアドレス位置情報１３２の具体例を説明する図である。
【図３３】第１の実施の形態におけるオブジェクト実行処理を説明するフローチャートである。
【発明を実施するための形態】
【００１２】
［情報処理システムの構成］
図１は、情報処理システム１０の全体構成を示す図である。図１に示す情報処理システム１０（以下、業務システム１０とも呼ぶ）は、物理マシン１（以下、計算機１またはコンピュータ１とも呼ぶ）と、物理マシン２と、ストレージ装置３とを有する。図１に示す物理マシン１、２は、インターネット網等からなるネットワークＮＷを介して、事業者端末１１とアクセスが可能である。
【００１３】
物理マシン１、２は、利用者に対してサービスを提供するための処理を実行する。物理マシン１、２は、例えば、処理の実行に伴う負荷を分散するために、同一のオブジェクトを実行する。
【００１４】
ストレージ装置３は、例えば、利用者に対してサービスを提供するためのオブジェクト、ソースコード及びコンパイルプログラム（以下、コンパイラとも呼ぶ）を記憶している。そして、物理マシン１、２は、例えば、オブジェクトを実行する際に、そのオブジェクトをストレージ装置３から取得して実行する。
【００１５】
事業者端末１１は、事業者が物理マシン１、２やストレージ装置３の管理を行うための端末である。具体的に、事業者は、例えば、事業者端末１１を介して、各物理マシンにおけるオブジェクトの生成を指示する。また、事業者は、例えば、事業者端末１１を介して、各物理マシンにおけるオブジェクトの実行を指示する。
【００１６】
なお、図１に示す情報処理システム１０は、物理マシン１及び物理マシン２を有しているが、３台以上の物理マシンを有する構成であってよい。
【００１７】
［ソースコードの具体例］
図２は、ストレージ装置３に記憶されたソースコードの具体例である。具体的に、図２に示すソースコードは、「Ｆｏｒｔｒａｎ  ２００８」によって記述されたソースコードである。なお、図２に示す例において、ソースコードの左側には行番号が記述されている。
【００１８】
図２に示す例において、１行目の「ＴＹＰＥ  ＴＹ１」、２行目の「ＴＹＰＥ（ＴＹＰＥ＿Ｘ１）Ｘ１（２）」及び３行目の「ＥＮＤ  ＴＹＰＥ」では、ＴＹＰＥ＿Ｘ１型であって要素数が２である配列成分Ｘ１を持つ派生型ＴＹ１を定義している。
【００１９】
また、図２に示す例において、５行目の「ＴＹＰＥ  ＴＹＰＥ＿Ｘ１」、６行目の「ＴＹＰＥ（ＴＹＰＥ＿Ｙ１）：：Ｙ１」及び７行目の「ＥＮＤ  ＴＹＰＥ」では、ＴＹＰＥ＿Ｙ１型の成分Ｙ１を持つ派生型ＴＹＰＥ＿Ｘ１を定義している。
【００２０】
また、図２に示す例において、９行目の「ＴＹＰＥ  ＴＹＰＥ＿Ｙ１」、１０行目の「ＩＮＴＥＧＥＲ：：Ｚ１，Ｖ１」及び１１行目の「ＥＮＤ  ＴＹＰＥ」では、成分Ｚ１及び成分Ｖ１を持つ派生型ＴＹＰＥ＿Ｙ１を定義している。
【００２１】
また、図２に示す例において、１３行目の「ＴＹＰＥ  ＴＹ２」、１４行目の「ＴＹＰＥ（ＴＹＰＥ＿Ｘ２）Ｘ２（２）」及び１５行目の「ＥＮＤ  ＴＹＰＥ」では、ＴＹＰＥ＿Ｘ２型であり要素数が２である配列成分Ｘ２を持つ派生型ＴＹ２を定義している。
【００２２】
また、図２に示す例において、１７行目の「ＴＹＰＥ  ＴＹＰＥ＿Ｘ２」、１８行目の「ＴＹＰＥ（ＴＹＰＥ＿Ｙ２），ＡＬＬＯＣＡＴＡＢＬＥ：：Ｙ２」及び１９行目の「ＥＮＤ  ＴＹＰＥ」では、ＴＹＰＥ＿Ｙ２型の成分Ｙ２を持つ派生型ＴＹＰＥ＿Ｘ２を定義している。そして、図２に示す例における１８行目では、成分Ｙ２のメモリ領域（記憶領域）がオブジェクトの実行時に決定される旨を定義している。
【００２３】
また、図２に示す例において、２１行目の「ＴＹＰＥ  ＴＹＰＥ＿Ｙ１」、２２行目の「ＩＮＴＥＧＥＲ，ＡＬＬＯＣＡＴＡＢＬＥ：：Ｚ２，Ｖ２（：）」及び２３行目の「ＥＮＤ  ＴＹＰＥ」では、成分Ｚ２及び配列成分Ｖ２をもつ派生型ＴＹＰＥ＿Ｙ２を定義している。そして、図２に示す例における２２行目では、成分Ｚ２及び配列成分Ｖ２のメモリ領域がオブジェクトの実行時に決定される旨を定義している。
【００２４】
また、図２に示す例において、２５行目の「ＴＹＰＥ（ＴＹ１）：：Ｃ１［＊］」及び２６行目の「ＴＹＰＥ（ＴＹ２），ＡＬＬＯＣＡＴＡＢＬＥ：：Ｃ２［：］」では、ＴＹ１型の共配列（他のプロセスから参照される配列）Ｃ１及びＴＹ２型の共配列Ｃ２を定義している。そして、図２に示す例における２６行目では、共配列Ｃ２のメモリ領域がオブジェクトの実行時に決定される旨を定義している。
【００２５】
また、図２に示す例において、２８行目の「ＩＮＴＥＧＥＲ  Ｎ，ＭＹ」、２９行目の「Ｎ＝ＩＭＡＧＥ＿ＮＵＭ（）」及び３０行目の「ＭＹ＝ＴＨＩＳ＿ＩＭＡＧＥ（）」では、関数ＩＭＡＧＥ＿ＮＵＭ（）の戻り値を変数Ｎに格納し、関数ＴＨＩＳ＿ＩＭＡＧＥ（）の戻り値を変数ＭＹに格納する旨を定義している。
【００２６】
また、図２に示す例において、３２行目の「ＡＬＬＯＣＡＴＥ（Ｃ２［＊］）」及び３３行目の「ＡＬＬＯＣＡＴＥ（Ｃ２％Ｘ２（１）％Ｙ２）」では、オブジェクトの実行時に共配列Ｃ２及び変数Ｙ２（配列Ｘ２の１要素目の成分）の共有メモリ領域の確保を行う旨を定義している。また、図２に示す例において、３４行目の「ＡＬＬＯＣＡＴＥ（Ｃ２％Ｘ２（１）％Ｙ２％Ｚ２）」では、オブジェクトの実行時に変数Ｚ２の共有メモリ領域の確保を行う旨を定義している。さらに、図２に示す例において、３５行目の「ＡＬＬＯＣＡＴＥ（Ｃ２％Ｘ２（１）％Ｙ２％Ｖ２（Ｎ））」では、配列成分Ｖ２のＮ個の要素それぞれに対応する共有メモリ領域の確保を行う旨を定義している。
【００２７】
また、図２に示す例において、３７行目の「ＤＯ  Ｐ＝１，Ｎ」、３８行目の「Ｃ２［Ｐ］％Ｘ２（１）％Ｙ２％Ｖ２（ＭＹ）＝１０」及び３９行目の「ＥＮＤ  ＤＯ」では、プロセスの識別番号であるＰが１からＮになるまで、配列Ｖ２のＭＹ番目の要素に「１０」を格納する旨を定義している。
【００２８】
すなわち、図２に示すソースコードは、Ｎ個のプロセスそれぞれに割り当てられた共有メモリ領域のうち、配列成分Ｖ２のＭＹ番目の要素に対応する共有メモリ領域に、「１０」を格納する処理について記述したソースコードである。
【００２９】
［ＡＬＬＯＣＡＴＡＢＬＥ属性を持たない変数に割り当てられるメモリ領域の具体例］
次に、ＡＬＬＯＣＡＴＡＢＬＥ属性を持たない変数（アドレスがプロセスの動作中において変化しない変数）に割り当てられる共有メモリ領域の具体例について説明を行う。図３は、ＡＬＬＯＣＡＴＡＢＬＥ属性を持たない変数に割り当てられる共有メモリ領域の具体例を説明する図である。なお、以下、各プロセスが、図２に示すソースコードをコンパイルしたオブジェクトをそれぞれ実行することにより生成されたものとして説明を行う。
【００３０】
図２に示すソースコードにおいて、変数Ｚ１及び変数Ｖ１は、ＡＬＬＯＣＡＴＡＢＬＥ属性を持つ変数として定義されていない（図２の１０行目）。そのため、変数Ｚ１及び変数Ｖ１に割り当てられる共有メモリ領域は、図２に示すソースコードのコンパイル時に決定される。
【００３１】
具体的に、図３に示す例において、コンパイラは、例えば、配列Ｘ１の１要素目からから辿ることができる変数Ｚ１の共有メモリ領域としてＰ１番地を割当て、配列Ｘ１の１要素目からから辿ることができる変数Ｖ１の共有メモリ領域としてＰ１＋４番地を割当てる。また、図３に示す例において、コンパイラは、例えば、配列Ｘ１の２要素目からから辿ることができる変数Ｚ１の共有メモリ領域としてＰ１＋８番地を割当て、配列Ｘ１の２要素目からから辿ることができる変数Ｖ１の共有メモリ領域としてＰ１＋１２番地を割当てる。これにより、各プロセスは、他のプロセスの変数Ｚ１の内容または変数Ｖ１にアクセスを行う場合、各変数の内容のアドレス（Ｐ１番地、Ｐ１＋４番地、Ｐ１＋８番地、またはＰ１＋１２番地）を参照することで、必要な情報にアクセスすることが可能になる。すなわち、この場合、各プロセスは、他のプロセスに割当てられた共有メモリ領域を１回アクセスするのみで、他のプロセスの変数Ｚ１または変数Ｖ１にアクセスすることが可能になる。
【００３２】
［ＡＬＬＯＣＡＴＡＢＬＥ属性を持つ変数に割り当てられるメモリ領域の具体例］
次に、ＡＬＬＯＣＡＴＡＢＬＥ属性を持つ変数（アドレスがプロセスの動作中において動的に変化する変数）に割り当てられるメモリ領域の具体例について説明を行う。図４は、ＡＬＬＯＣＡＴＡＢＬＥ属性を持つ変数に割り当てられる共有メモリ領域の具体例を説明する図である。
【００３３】
図２に示すソースコードにおいて、変数Ｚ２及び配列Ｖ２は、ＡＬＬＯＣＡＴＡＢＬＥ属性を持つ変数として定義されている（図２の２２行目）。そのため、変数Ｚ２及び配列Ｖ２に割り当てられる共有メモリ領域は、図２に示すソースコードから生成されるオブジェクトの実行時に決定される。
【００３４】
この場合、コンパイラは、オブジェクトを生成する際に、例えば、変数Ｚ２及び配列Ｖ２の内容が格納される共有メモリ領域の他に、各変数の共有メモリ領域におけるアドレスを格納するメモリ領域を割り当てる。具体的に、コンパイラは、図４に示すように、変数Ｚ２及び配列Ｖ２の内容が格納される共有メモリ領域（図４のＰ６番地及びＰ７番地）の他に、共配列Ｃ２、変数Ｙ２、変数Ｚ２及び配列Ｖ２のアドレスがそれぞれ格納される共有メモリ領域（図４のＰ１番地、Ｐ２番地、Ｐ２＋４番地、Ｐ３番地、Ｐ３＋４番地、Ｐ６番地、及びＰ６＋４番地）をそれぞれ割り当てる。
【００３５】
そして、各プロセスは、例えば、他のプロセスの配列Ｘ２の１要素目から辿ることができる変数Ｚ２にアクセスする場合、Ｐ１番地にアクセスして共配列Ｃ２のアドレス（Ｐ２番地）を取得し、Ｐ２番地にアクセスして配列Ｘ２の１要素目の成分である変数Ｙ２のアドレス（Ｐ３番地）を取得する。その後、各プロセスは、Ｐ３番地にアクセスして変数Ｙ２の成分である変数Ｚ２のアドレス（Ｐ４番地）を取得し、Ｐ４番地にアクセスして変数Ｚ２の内容を取得する。
【００３６】
ここで、各プロセスが異なる物理マシンで実行される場合、各プロセスは、他のプロセスの共有メモリ領域を参照する際に、他の物理マシンに対してアクセスを行う必要がある。そのため、この場合、他のプロセスに対する通信に要する時間は、同一物理マシン内において他のプロセスが実行されている場合と比較して大きくなる。
【００３７】
さらに、各プロセスの共有メモリ領域内における変数のアドレスは、図４で説明したように、オブジェクトの実行時に決定される場合がある。そのため、各プロセスは、この場合、他のプロセスの変数にアクセスするまでに、他の物理マシンの共有メモリ領域に対して複数回のアクセスを行う必要がある。
【００３８】
そこで、本実施の形態における物理マシン１は、プロセス間で通信される変数であってオブジェクトの実行時にメモリ領域（共有メモリ領域）が割付けられる変数（以下、第１変数とも呼ぶ）のアドレス情報を、オブジェクトの実行される際に他の物理マシン（例えば、物理マシン２）との間で互いに通知するように、オブジェクトを生成する。以下、本実施の形態における物理マシン１の共有メモリ領域について説明を行う。
【００３９】
図５は、本実施の形態における物理マシン１の共有メモリ領域を説明する図である。本実施の形態における物理マシン１は、図５に示すように、図４で説明したメモリ領域の他に、プロセス間で通信される変数であって、オブジェクトの実行時に記憶領域（以下、第１記憶領域とも呼ぶ）が割り当てられる第１変数に対し、直接アクセスすることができるアドレスが格納されるメモリ領域を割り当てる。具体的に、物理マシン１は、図５に示すように、オブジェクトの実行時において、配列Ｘ２の１要素目から辿ることができる変数Ｙ２のアドレス、変数Ｚ２のアドレス、及び配列Ｖ２のアドレスがそれぞれＰ０番地、Ｐ０＋４番地、及びＰ０＋８番地のメモリ領域に、配列Ｘ２の２要素目から辿ることができる変数Ｙ２のアドレス、変数Ｚ２のアドレス、及び配列Ｖ２のアドレスがそれぞれＰ０＋１２番地、Ｐ０＋１６番地、及びＰ０＋２０番地のメモリ領域に格納されるようにオブジェクトを生成する。そして、本実施の形態における物理マシン１は、第１変数のアドレス情報を、他のプロセス（例えば、物理マシン２で動作するプロセス）との間で互いに通知する。
【００４０】
これにより、物理マシン１は、アクセスを行う他のプロセスが他の物理マシンに存在する場合であっても、他のプロセスの変数にアクセスするために要する通信回数を削減することが可能になる。そのため、物理マシン１は、オブジェクトの実行に要する時間を短縮させることが可能になる。
【００４１】
［物理マシンのハードウエア構成］
次に、物理マシン１、２のハードウエア構成について説明する。図６は、物理マシン１、２のハードウエア構成を説明する図である。
【００４２】
物理マシン１は、プロセッサであるＣＰＵ１０１と、メモリ１０２と、外部インターフェース（Ｉ／Ｏユニット）１０３と、記憶媒体（ストレージ）１０４とを有する。各部は、バス１０５を介して互いに接続される。
【００４３】
記憶媒体１０４は、記憶媒体１０４内のプログラム格納領域（図示しない）に、オブジェクトを生成する処理（以下、オブジェクト生成処理とも呼ぶ）を行うためのプログラム１１０（以下、オブジェクト生成プログラム１１０とも呼ぶ）を記憶する。また、記憶媒体１０４は、例えば、オブジェクト生成処理を行う際に用いられる情報を記憶する情報格納領域１３０（以下、記憶部１３０とも呼ぶ）を有する。
【００４４】
ＣＰＵ１０１は、図６に示すように、プログラム１１０の実行時に、プログラム１１０を記憶媒体１０４からメモリ１０２にロードし、プログラム１１０と協働してオブジェクト生成処理を行う。また、外部インターフェース１０３は、物理マシン２やストレージ装置３と通信を行う。
【００４５】
物理マシン２は、プロセッサであるＣＰＵ２０１と、メモリ２０２と、外部インターフェース（Ｉ／Ｏユニット）２０３と、記憶媒体（ストレージ）２０４とを有する。各部は、バス２０５を介して互いに接続される。
【００４６】
記憶媒体２０４は、記憶媒体２０４内のプログラム格納領域（図示しない）に、オブジェクト生成処理を行うためのオブジェクト生成プログラム２１０を記憶する。また、記憶媒体２０４は、例えば、オブジェクト生成処理を行う際に用いられる情報を記憶する情報格納領域２３０（以下、記憶部２３０とも呼ぶ）を有する。
【００４７】
ＣＰＵ２０１は、図６に示すように、プログラム２１０の実行時に、プログラム２１０を記憶媒体２０４からメモリ２０２にロードし、プログラム２１０と協働してオブジェクト生成処理を行う。また、外部インターフェース２０３は、物理マシン１やストレージ装置３と通信を行う。
【００４８】
ストレージ装置３は、物理マシン１のＣＰＵ１０１または物理マシン２のＣＰＵ２０１がオブジェクト生成処理を実行するために必要な情報を記憶する情報格納領域３３０（以下、記憶部３３０とも呼ぶ）を有する。以下、情報格納領域３３０に格納される情報について説明を行う。
【００４９】
図７は、情報格納領域３３０に格納される情報を説明する図である。情報格納領域３３０は、例えば、図７に示すように、ソースコード３３１と、ソースコード３３１のコンパイルを行うコンパイラ３３２と、ソースコード３３１をコンパイラ３３２によってコンパイルすることにより生成されるオブジェクト３３３とが記憶される。すなわち、情報格納領域３３０には、例えば、ＣＰＵ１０１及びＣＰＵ２０１のそれぞれがオブジェクト生成処理を実行するために必要な情報（物理マシン１及び物理マシン２が共有する情報）が記憶される。
【００５０】
[物理マシンのソフトウエア構成]
次に、物理マシン１、２のソフトウエア構成について説明する。図８は、図６の物理マシン１の機能ブロック図である。ＣＰＵ１０１は、プログラム１１０と協働することにより、オブジェクト生成部１１１と、オブジェクト実行部１１２として動作する。また、情報格納領域１３０には、アドレス情報１３１と、アドレス位置情報１３２と、ＩＤ割当て情報１３３と、ＩＤ幅情報１３４と、ＩＤ割当て数情報１３５と、ＩＤ割当て式情報１３６とが記憶されている。
【００５１】
オブジェクト生成部１１１は、情報格納領域３３０に記憶されたソースコード３３１及びコンパイラ３３２を取得する。そして、オブジェクト生成部１１１は、コンパイラ３３２によってソースコード３３１をコンパイルすることにより、オブジェクト３３３を生成する。その後、オブジェクト生成部１１１は、生成したオブジェクト３３３を情報格納領域３３０に記憶する。
【００５２】
具体的に、オブジェクト生成部１１１は、同一のオブジェクト３３３の実行に伴って生成される複数のプロセス間において、複数のプロセス間で通信される変数であってオブジェクト３３３の実行に伴って記憶領域が割当てられる第１変数の第１記憶領域のアドレス情報１３１を、オブジェクト３３３が実行される際に互いに通知するようにオブジェクト３３３を生成する。
【００５３】
なお、オブジェクト生成部１１１は、例えば、所定のソースコード３３１のコンパイルを開始する旨の情報を事業者端末１１から受信した際に、オブジェクト３３３の生成を行うものであってよい。また、オブジェクト生成部１１１は、アドレス情報１３１に代えて、アドレス情報１３１の記憶領域のアドレスを示すアドレス位置情報１３２を、オブジェクト３３３が実行される際に通知するようにオブジェクト３３３を生成するものであってもよい。
【００５４】
オブジェクト実行部１１２は、情報格納領域３３０に記憶されたオブジェクト３３３を取得する。そして、オブジェクト実行部１１２は、取得したオブジェクト３３３を実行する。この場合、オブジェクト実行部１１２は、オブジェクト３３３の実行に伴い、第１記憶領域に格納されたアドレス情報１３１を、オブジェクト３３３の実行に伴って生成される複数のプロセス間において互いに通知する。なお、ＩＤ割当て情報１３３、ＩＤ幅情報１３４、ＩＤ割当て数情報１３５及びＩＤ割当て式情報１３６については後述する。
【００５５】
また、図９は、図６の物理マシン２の機能ブロック図である。ＣＰＵ２０１は、プログラム２１０と協働することにより、オブジェクト生成部２１１と、オブジェクト実行部２１２として動作する。また、情報格納領域２３０には、アドレス情報２３１と、アドレス位置情報２３２と、ＩＤ割当て情報２３３と、ＩＤ幅情報２３４と、ＩＤ割当て数情報２３５と、ＩＤ割当て式情報２３６とが記憶されている。
【００５６】
なお、オブジェクト生成部２１１及びオブジェクト実行部２１２の動作は、オブジェクト生成部１１１及びオブジェクト実行部１１２の動作と同じであるため詳細な説明を省略する。また、アドレス情報２３１、アドレス位置情報２３２、ＩＤ割当て情報２３３及びＩＤ幅情報２３４の内容は、アドレス情報１３１、アドレス位置情報１３２、ＩＤ割当て情報１３３及びＩＤ幅情報１３４の内容と同じであるため詳細な説明を省略する。さらに、ＩＤ割当て数情報２３５及びＩＤ割当て式情報２３６の内容は、ＩＤ割当て数情報１３５及びＩＤ割当て式情報１３６の内容と同じであるため詳細な説明を省略する。
【００５７】
[第１の実施の形態の概略］
次に、第１の実施の形態の概略について説明する。図１０は、第１の実施の形態におけるオブジェクト生成処理の概略を説明するフローチャートである。なお、以下、物理マシン１がオブジェクト生成処理を実行する場合について説明を行う。
【００５８】
物理マシン１は、図１０に示すように、オブジェクト３３３を生成するタイミング（以下、オブジェクト生成タイミングとも呼ぶ）になるまで待機する（Ｓ１のＮＯ）。オブジェクト生成タイミングは、例えば、事業者端末１１において、オブジェクト３３３を生成する旨の情報が入力されたタイミングであってよい。また、オブジェクト生成タイミングは、例えば、所定時間毎（例えば、１時間毎）であってもよい。
【００５９】
そして、オブジェクト生成タイミングになった場合（Ｓ１のＹＥＳ）、物理マシン１は、コンパイラ３３２によってソースコード３３１をコンパイルすることにより、オブジェクト３３３を生成する。具体的に、物理マシン１は、オブジェクト３３３の実行に伴って生成される複数のプロセス間において、第１変数の第１記憶領域のアドレス情報１３１を、オブジェクト３３３が実行される際に互いに通知するようにオブジェクト３３３を生成する（Ｓ２）。以下、Ｓ２の処理で生成されたオブジェクトが実行される場合について説明を行う。
【００６０】
図１１は、Ｓ２の処理で生成されたオブジェクト３３３が実行される場合を説明する図である。図１１に示す例では、オブジェクト３３３がＣＰＵ１０１及びＣＰＵ２０１において同時に実行される際の状態を示している。なお、以下、ＣＰＵ１０１でオブジェクト３３３が実行されることによって動作するプロセスをプロセスＰ１とも呼び、ＣＰＵ２０１でオブジェクト３３３が実行されることによって動作するプロセスをプロセスＰ２とも呼ぶ。すなわち、図１１に示す例では、ＣＰＵ１０１においてプロセスＰ１が動作を開始し、ＣＰＵ２０１においてプロセスＰ２が動作を開始する際の状態を示している。
【００６１】
図１１に示す例において、物理マシン１（ＣＰＵ１０１）は、物理マシン１におけるオブジェクト３３３の実行に伴って、プロセスＰ１の第１変数が記憶されている第１記憶領域１０２ａのアドレス情報１３１を物理マシン２に通知する。また、物理マシン２（ＣＰＵ２０１）は、物理マシン２におけるオブジェクト３３３の実行に伴って、プロセスＰ２の第１変数が記憶されている第１記憶領域２０２ａのアドレス情報２３１を物理マシン１に通知する。
【００６２】
これにより、プロセスＰ１は、例えば、プロセスＰ２の第１変数にアクセスする場合に、第１記憶領域２０２ａを参照することが可能になる。そして、プロセスＰ１は、この場合、第１記憶領域２０２ａに記憶されたアドレス情報２３１に参照することで、プロセスＰ２の第１変数に直接アクセスすることが可能になる。これにより、物理マシン１は、オブジェクト３３３の実行に伴う物理マシン２との通信回数を削減することが可能になる。
【００６３】
ここで、物理マシン１は、図１１に示す例において、プロセスＰ２の第１変数（プロセスＰ２の第２変数のコピー）を、物理マシン１（例えば、第１記憶領域１０２ａ）内に記憶することも可能である。これにより、物理マシン１は、第１記憶領域２０２ａにアクセスすることなく、プロセスＰ２の第１変数にアクセスすることが可能になる。
【００６４】
しかしながら、図２に示すソースコードの３７行目から３９行目に記述された処理のように、各プロセスによってアクセスされる他のプロセスが、ループのイテレーション毎に変化する場合がある。この場合、物理マシン１は、プロセスＰ２の第１変数を物理マシン１内に保持した場合であっても、プロセスＰ２以外の他のプロセスの第１変数にアクセスする際の通信回数を削減することができない。
【００６５】
そのため、本実施の形態における物理マシン１は、物理マシン１内にプロセスＰ２の第１変数を記憶せず、プロセスＰ２の第１変数のアドレス情報２３１のみを記憶する。そして、物理マシン１は、アドレス情報２３１を参照し、物理マシン２の第１記憶領域２０２ａに記憶されたプロセスＰ２の第１変数にアクセスする。
【００６６】
このように、物理マシン１は、オブジェクト３３３の実行に伴って生成される複数のプロセス間において、複数のプロセス間で通信される変数であってオブジェクト３３３の実行に伴って記憶領域が割付けられる第１変数が記憶される第１記憶領域１０２ａのアドレス情報を、オブジェクト３３３が実行される際に互いに通知するように、オブジェクト３３３を生成するオブジェクト生成部１１１を有する。
【００６７】
これにより、物理マシン１は、アクセスを行う他のプロセスが他の物理マシンに存在する場合であっても、他のプロセスの変数にアクセスするために要する通信回数を削減することが可能になる。そのため、物理マシン１は、オブジェクトの実行に要する時間を短縮させることが可能になる。
【００６８】
[第１の実施の形態の詳細]
次に、第１の実施の形態の詳細について説明する。図１２から図２０は、第１の実施の形態におけるオブジェクト生成処理の詳細を説明するフローチャートである。また、図２１から図３２は、第１の実施の形態におけるオブジェクト生成処理の詳細を説明する図である。図２１から図３２を参照しながら、図１２から図２０のオブジェクト生成処理を説明する。なお、以下、図２で説明したソースコード３３１に基づいてオブジェクト３３３が生成される場合について説明を行う。
【００６９】
物理マシン１のオブジェクト生成部１１１は、図１２に示すように、オブジェクト生成タイミングになるまで待機する（Ｓ１１のＮＯ）。そして、オブジェクト生成タイミングになった場合（Ｓ１１のＹＥＳ）、オブジェクト生成部１１１は、コンパイラ３３２によってソースコード３３１をコンパイルすることにより、オブジェクト３３３の生成を開始する。具体的に、オブジェクト生成部１１１は、初めに、ソースコード３３１に記述された第１変数と、各第１変数を特定するための識別情報（以下、単にＩＤとも呼ぶ）とを対応付けた情報であるＩＤ割当て情報１３３の作成を行う（Ｓ１２）。以下、Ｓ１２の処理の詳細について説明を行う。
【００７０】
[Ｓ１２の処理の詳細]
図１３は、Ｓ１２の処理の詳細を説明する図である。オブジェクト生成部１１１は、初めに、ソースコード３３１を参照し、ＩＤの割当てを行う第１変数の抽出を行う（Ｓ２１）。すなわち、オブジェクト生成部１１１は、ＩＤ割当て情報１３３に情報の設定を行うべき第１変数の抽出を行う。以下、Ｓ２１の処理の詳細について説明を行う。
【００７１】
[Ｓ２１の処理の詳細]
図１４は、Ｓ２１の処理の詳細を説明する図である。オブジェクト生成部１１１は、初めに、ソースコード３３１からＡＬＬＯＣＡＴＥ文を１つ抽出する（Ｓ３１）。そして、オブジェクト生成部１１１は、Ｓ３１の処理で抽出したＡＬＬＯＣＡＴＥ文に含まれる第１変数を特定する（Ｓ３２）。
【００７２】
その後、オブジェクト生成部１１１は、例えば、Ｓ３２の処理で特定した第１変数を他のプロセスから参照する場合、３回以上の通信を要する第１変数であるか否かを判定する（Ｓ３３）。その結果、第１変数が他のプロセスから参照される場合に３回以上の通信を要する第１変数である場合（Ｓ３３のＹＥＳ）、オブジェクト生成部１１１は、Ｓ３２の処理で特定した第１変数をＩＤ割り当て情報１３３に追加する（Ｓ３４）。一方、第１変数が他のプロセスから参照される場合に３回以上の通信を要する第１変数でない場合（Ｓ３３のＮＯ）、オブジェクト生成部１１１は、Ｓ３４の処理を実行しない。
【００７３】
具体的に、図４に示す例において、他のプロセスが配列Ｘ２の１要素目から辿ることができる変数Ｚ２にアクセスする場合、他のプロセスは、Ｐ１番地にアクセスして共配列Ｃ２のアドレス（Ｐ２番地）を取得し、Ｐ２番地にアクセスして配列Ｘ２の１要素目の成分である変数Ｙ２のアドレス（Ｐ３番地）を取得する。その後、他のプロセスは、Ｐ３番地にアクセスして変数Ｙ２の成分である変数Ｚ２のアドレス（Ｐ４番地）を取得し、Ｐ４番地にアクセスして変数Ｚ２の内容を取得する。したがって、他のプロセスは、この場合、変数Ｚ２にアクセスするために４回の通信を要する（Ｓ３３のＹＥＳ）。そのため、オブジェクト生成部１１１は、Ｓ３２で抽出した第１変数が変数Ｚ２である場合、Ｓ３４の処理を実行する。
【００７４】
すなわち、オブジェクト生成部１１１は、Ｓ３３及びＳ３４の処理において、物理マシン間の通信回数を効率的に削減することができる第１変数のみをソースコード３３１から抽出する。
【００７５】
その後、オブジェクト生成部１１１は、ソースコード３３１から全てのＡＬＬＯＣＡＴＥ文を抽出したか否かを判定する（Ｓ３５）。その結果、全てのＡＬＬＯＣＡＴＥ文の抽出が完了している場合（Ｓ３５のＹＥＳ）、オブジェクト生成部１１１は、Ｓ２１の処理を終了する。一方、全てのＡＬＬＯＣＡＴＥ文の抽出が完了していない場合（Ｓ３５のＮＯ）、オブジェクト生成部１１１は、Ｓ３１以降の処理を再度実行する。
【００７６】
なお、オブジェクト生成部１１１は、Ｓ３３の処理において、Ｓ３２の処理で特定した第１変数がＩＤの割当てを静的に行うことができる変数である場合に限り、Ｓ３４の処理を実行するものであってもよい（Ｓ３３のＹＥＳ）。
【００７７】
すなわち、例えば、Ｓ３２の処理で抽出した第１変数がオブジェクトの実行時まで大きさが分からない配列等である場合、オブジェクト生成部１１１は、オブジェクト３３３の生成時においてＩＤを割り当てる必要がある第１変数の数を特定することができない。そのため、オブジェクト生成部１１１は、Ｓ３２の処理で特定した第１変数がＩＤの割当てを静的に行うことができない変数については、ＩＤを割り当てる第１変数から除外するために、ＩＤ割当て情報１３３への追加を行わないものであってもよい。
【００７８】
次に、Ｓ２１の処理の具体例について説明を行う。
【００７９】
図２に示すソースコード３３１において、オブジェクト生成部１１１は、３２行目に記述されている「ＡＬＬＯＣＡＴＥ（Ｃ２［＊］）」を抽出し、抽出した記述に含まれる共配列Ｃ２を特定する（Ｓ３１、Ｓ３２）。ここで、例えば、プロセスＰ２がプロセスＰ１の共配列Ｃ２にアクセスする場合、プロセスＰ２は、プロセスＰ１に割当てられた共有メモリ領域に対してアクセスを１回行う必要がある（Ｓ３３のＮＯ）。そのため、オブジェクト生成部１１１は、共配列Ｃ２をＩＤ割当て情報１３３に追加しない。
【００８０】
その後、オブジェクト生成部１１１は、３３行目に記述されている「ＡＬＬＯＣＡＴＥ（Ｃ２％Ｘ２（１）％Ｙ２）」を抽出し、抽出した記述に含まれる変数Ｙ２を特定する（Ｓ３１、Ｓ３２）。ここで、例えば、プロセスＰ２がプロセスＰ１の共配列Ｃ２にアクセスする場合、プロセスＰ２は、プロセスＰ１に割当てられた共有メモリ領域に対してアクセスを３回行う必要がある（Ｓ３３のＹＥＳ）。そのため、オブジェクト生成部１１１は、変数Ｙ２をＩＤ割当て情報１３３に追加する（Ｓ３４）。
【００８１】
同様に、オブジェクト生成部１１１は、３４行目に記述されている「ＡＬＬＯＣＡＴＥ（Ｃ２％Ｘ２（１）％Ｙ２％Ｚ２）」を抽出し、ＩＤ割当て情報１３３に変数Ｚ２を追加する（Ｓ３４）。また、オブジェクト生成部１１１は、３５行目に記述されている「ＡＬＬＯＣＡＴＥ（Ｃ２％Ｘ２（１）％Ｙ２％Ｖ２（Ｎ））」を抽出し、ＩＤ割当て情報１３３に配列Ｖ２を追加する（Ｓ３４）。以下、図２に示すソースコード３３１に対してＳ２１の処理が実行された場合のＩＤ割当て情報１３３の具体例について説明を行う。
【００８２】
[ＩＤ割当て情報の具体例]
図２１、図２６、図２８及び図３０は、ＩＤ割当て情報１３３の具体例を説明する図である。図２１、図２６、図２８及び図３０に示すＩＤ割当て情報１３３は、ＩＤ割当て情報に含まれる各情報を識別する「項番」と、第１変数を設定する「第１変数」と、各第１変数に割り当てられた識別情報（ＩＤ）を設定する「ＩＤ」とを項目として有する。
【００８３】
具体的に、図２１は、Ｓ２１の処理が実行された場合のＩＤ割当て情報１３３の具体例を説明する図である。図２１に示すＩＤ割当て情報１３３において、「項番」が「１」である情報には、「第１変数」として「Ｃ２％Ｘ２％Ｙ２」が設定されている。そして、図２１に示すＩＤ割当て情報１３３において、「項番」が「１」である情報の「ＩＤ」はブランクの状態である。図２１の他の情報については説明を省略する。また、図２６、図２８及び図３０に示すＩＤ割当て情報１３３については後述する。
【００８４】
図１３に戻り、オブジェクト生成部１１１は、ＩＤ幅情報１３４を作成する（Ｓ２２）。ＩＤ幅情報１３４は、Ｓ２１の処理で抽出した第１変数が配列の成分である場合において、その配列の各要素におけるＩＤ割当て情報１３３に含まれる成分の数（以下、単に幅とも呼ぶ）を示す情報である。以下、Ｓ２２の処理の詳細について説明を行う。
【００８５】
[Ｓ２２の処理の詳細]
図１５は、Ｓ２２の処理の詳細を説明する図である。オブジェクト生成部１１１は、初めに、ＩＤ割当て情報１３３から第１変数を１つ抽出する（Ｓ４１）。そして、オブジェクト生成部１１１は、Ｓ４１の処理で抽出した第１変数のＩＤ幅情報１３４に「１」を設定する（Ｓ４２）。以下、ＩＤ幅情報１３４の具体例について説明を行う。
【００８６】
[ＩＤ幅情報の具体例]
図２２から図２４は、ＩＤ幅情報１３４の具体例について説明する図である。図２２から図２４に示すＩＤ幅情報１３４は、ＩＤ幅情報１３４に含まれる各情報を識別する「項番」と、第１変数が設定される「第１変数」と、第１変数の幅が設定される「幅」とを項目として有する。
【００８７】
具体的に、図２２に示すＩＤ幅情報１３４において、「項番」が「１」である情報には、「第１変数」として「Ｃ２％Ｘ２」が設定され、「幅」はブランクの状態になっている。図２２の他の情報については説明を省略する。
【００８８】
そして、Ｓ４１の処理において配列Ｘ２を抽出した場合、オブジェクト生成部１１１は、図２３の下線部分に示すように、「第１変数」が「Ｃ２％Ｘ２」である情報（「項番」が「１」である情報）の「幅」に「１」を設定する。図２４に示すＩＤ幅情報１３４については後述する。
【００８９】
図１５に戻り、オブジェクト生成部１１１は、Ｓ４１の処理で抽出した第１変数、または、Ｓ４１の処理で抽出した第１変数を成分とする変数（以下、これらを変数Ｐとも呼ぶ）を１つ抽出する（Ｓ４３）。すなわち、オブジェクト生成部１１１は、第１変数を成分とする配列の抽出を行う。
【００９０】
続いて、変数Ｐが成分を有する配列（以下、これを派生型の配列とも呼ぶ）である場合（Ｓ４４のＹＥＳ）、オブジェクト生成部１１１は、変数Ｐの幅を算出するための処理（以下、幅算出処理とも呼ぶ）を実行する（Ｓ４５）。幅算出処理については後述する。一方、変数Ｐが派生型の配列でない場合（Ｓ４４のＮＯ）、Ｓ４５の処理を実行しない。
【００９１】
そして、オブジェクト生成部１１１は、全ての変数Ｐの抽出が完了していない場合（Ｓ４６のＮＯ）、Ｓ４３からＳ４５の処理を再度実行する。
【００９２】
具体的に、Ｓ４１の処理において変数Ｙ２を抽出した場合、オブジェクト生成部１１１は、変数Ｙ２を成分とする共配列Ｃ２を変数Ｐとして抽出する（Ｓ４３）。ここで、共配列Ｃ２は、派生型の配列ではない（Ｓ４４のＮＯ、Ｓ４６のＮＯ）。そのため、オブジェクト生成部１１１は、共配列Ｃ２についての幅算出処理を実行しない。また、変数Ｙ２自身を変数Ｐとして抽出した場合も同様に、オブジェクト生成部１１１は、変数Ｙ２についての幅算出処理を実行しない（Ｓ４３、Ｓ４４のＮＯ、Ｓ４６のＮＯ）。
【００９３】
一方、変数Ｙ２を成分とする変数である配列Ｘ２は、派生型の配列である（Ｓ４３、Ｓ４４のＹＥＳ）。そのため、オブジェクト生成部１１１は、配列Ｘ２を変数Ｐとして抽出した場合（Ｓ４３）、配列Ｙ２についての幅算出処理を実行する（Ｓ４４のＹＥＳ、Ｓ４５）。以下、変数Ｐの幅算出処理について説明を行う。
【００９４】
[変数Ｐの幅算出処理]
図１６及び図１７は、変数Ｐの幅算出処理を説明する図である。なお、以下、オブジェクト生成部１１１が幅算出処理を実行する際に、一時的に値を格納する変数として変数Ｗ１及び変数Ｗ２を用いるものとして説明を行う。
【００９５】
オブジェクト生成部１１１は、変数Ｗ１に「０」を設定する（Ｓ５１）。そして、変数ＰがＩＤ割当て情報１３３に存在している場合（Ｓ５２のＮＯ）、オブジェクト生成部１１１は、変数Ｗ１に「１」を設定する（Ｓ５３）。一方、変数ＰがＩＤ割当て情報１３３に存在しない場合（Ｓ５２のＮＯ）、オブジェクト生成部１１１は、Ｓ５３の処理を実行しない。
【００９６】
具体的に、変数Ｐが配列Ｘ２である場合、配列Ｘ２は、ＩＤ割当て情報１３３に存在しない（Ｓ５２のＮＯ）。そのため、オブジェクト生成部１１１は、この場合、Ｓ５３の処理を行わない。したがって、変数Ｗ１には、「０」が設定される（Ｓ５１）。
【００９７】
次に、変数Ｐが派生型の配列である場合（Ｓ６１のＹＥＳ）、オブジェクト生成部１１１は、図１７に示すように、変数Ｐの成分である変数Ｃを抽出し、抽出した変数Ｃの幅算出処理を実行する（Ｓ６２、Ｓ６３）。
【００９８】
続いて、Ｓ６２の処理で抽出した変数Ｃが派生型の配列である場合（Ｓ６４のＹＥＳ）、オブジェクト生成部１１１は、Ｓ６３の処理（変数Ｃの幅算出処理）の戻り値（変数Ｗ２）と、変数Ｃの要素数とを乗算した値を、変数Ｗ２として設定する（Ｓ６５）。一方、Ｓ６２で抽出した変数Ｃが派生型の配列でない場合（Ｓ６４のＮＯ）、オブジェクト生成部１１１は、Ｓ６５の処理を実行しない。
【００９９】
その後、オブジェクト生成部１１１は、変数Ｗ１と変数Ｗ２とを加算した値を変数Ｗ１として設定する（Ｓ６６）。そして、Ｓ６２の処理において、全ての変数Ｃの抽出が完了した場合（Ｓ６７のＹＥＳ）、または、変数Ｐが派生型の配列でない場合（Ｓ６１のＮＯ）、オブジェクト生成部１１１は、変数Ｗ１に格納された値を戻り値として返し、変数Ｐの幅算出処理を終了する（Ｓ６８）。
【０１００】
一方、全ての変数Ｃの抽出が完了していない場合（Ｓ６７のＮＯ）、Ｓ６２以降の処理を再度実行する。
【０１０１】
具体的に、配列Ｘ２は、派生型の配列である。そのため、Ｓ４３の処理において抽出された変数Ｐが配列Ｘ２である場合、オブジェクト生成部１１１は、配列Ｘ２の成分である変数Ｙ２を変数Ｃとして抽出する（Ｓ６１のＹＥＳ、Ｓ６２）。そして、Ｓ６２の処理の後、オブジェクト生成部１１１は、変数Ｃについての幅算出処理を実行する（Ｓ６３）。以下、変数Ｃが変数Ｙ２である場合の幅算出処理について説明を行う。
【０１０２】
[変数Ｃが変数Ｙ２である場合の幅算出処理]
図２１に示すＩＤ割当て情報１３３には、変数Ｙ２の情報が含まれている（「項番」が「１」である情報）。そのため、オブジェクト生成部１１１は、変数Ｗ１に「１」を設定する（Ｓ５２のＹＥＳ、Ｓ５３）。そして、変数Ｙ２は、派生型の配列である（Ｓ６１のＹＥＳ）。そのため、オブジェクト生成部１１１は、変数Ｙ２の成分である変数Ｚ２を抽出し、変数Ｚ２の幅算出処理を実行する（Ｓ６２、Ｓ６３）。以下、変数Ｃが変数Ｚ２である場合の幅算出処理について説明を行う。
【０１０３】
[変数Ｃが変数Ｚ２である場合の幅算出処理]
図２１に示すＩＤ割当て情報１３３には、変数Ｚ２の情報が含まれている（「項番」が「２」である情報）。そのため、オブジェクト生成部１１１は、変数Ｗ１に「１」を設定する（Ｓ５２のＹＥＳ、Ｓ５３）。そして、変数Ｚ２は、派生型の配列ではない（Ｓ６１のＮＯ）。そのため、オブジェクト生成部１１１は、変数Ｗ１に設定された値である「１」を戻り値として、変数Ｚ２の幅算出処理を終了する（Ｓ６８）。
【０１０４】
変数Ｙ２の幅算出処理に戻り、オブジェクト生成部１１１は、変数Ｚ２の幅算出処理の戻り値である「１」を変数Ｗ２に設定する（Ｓ６３）。そして、変数Ｚ２は、派生型の配列ではないため（Ｓ６４のＮＯ）、オブジェクト生成部１１１は、Ｓ６５の処理を実行しない。その後、オブジェクト生成部１１１は、変数Ｗ１に設定されている「１」と、変数Ｗ２に設定されている「１」とを加算した値である「２」を、変数Ｗ１に設定する（Ｓ６６）。
【０１０５】
ここで、変数Ｙ２の成分には、変数Ｚ２以外に配列Ｖ２が存在する。そのため、オブジェクト生成部１１１は、Ｓ６２以降の処理を再度実行する（Ｓ６７のＮＯ）。
【０１０６】
具体的に、オブジェクト生成部１１１は、変数Ｙ２の成分である配列Ｖ２を抽出し、配列Ｖ２の幅算出処理を実行する（Ｓ６２、Ｓ６３）。以下、変数Ｃが配列Ｖ２である場合の幅算出処理について説明を行う。
【０１０７】
[変数Ｃが配列Ｖ２である場合の幅算出処理]
図２１に示すＩＤ割当て情報１３３には、配列Ｖ２の情報が含まれている（「項番」が「３」である情報）。そのため、オブジェクト生成部１１１は、変数Ｗ１に「１」を設定する（Ｓ５２のＹＥＳ、Ｓ５３）。そして、配列Ｖ２は、派生型の配列ではないため（Ｓ６１のＮＯ）、オブジェクト生成部１１１は、変数Ｗ１に設定された値である「１」を戻り値として、配列Ｖ２の幅算出処理を終了する（Ｓ６８）。
【０１０８】
変数Ｙ２の幅算出処理に戻り、オブジェクト生成部１１１は、配列Ｖ２の幅算出処理の戻り値である「１」を変数Ｗ２に設定する（Ｓ６３）。そして、配列Ｖ２が派生型の配列ではないため（Ｓ６４のＮＯ）、オブジェクト生成部１１１は、Ｓ６５の処理を実行しない。その後、オブジェクト生成部１１１は、変数Ｗ１に設定されている「２」と、変数Ｗ２に設定されている「１」とを加算した値である「３」を、変数Ｗ１に設定する（Ｓ６６）。
【０１０９】
ここで、変数Ｙ２の成分である変数Ｚ２及び配列Ｖ２は、全て抽出されている（Ｓ６７のＹＥＳ）。そのため、オブジェクト生成部１１１は、変数Ｗ１に設定された値である「３」を戻り値として、変数Ｙ２の幅算出処理を終了する（Ｓ６８）。
【０１１０】
図１５に戻り、オブジェクト生成部１１１は、ＩＤ幅情報１３４における変数Ｐの「幅」に、変数Ｙ２の幅算出処理の戻り値を設定する（Ｓ４５）。そして、Ｓ４６の処理において、全ての変数Ｐの抽出が完了していると判定した場合（Ｓ４６のＹＥＳ）、オブジェクト生成部１１１は、全ての第１変数の抽出が完了しているか否かを判定する（Ｓ４７）。その結果、全ての第１変数の抽出が完了している場合（Ｓ４７のＹＥＳ）、オブジェクト生成部１１１は、Ｓ２２の処理を終了する。
【０１１１】
一方、Ｓ４６の処理において、全ての変数Ｐの抽出が完了していないと判定した場合（Ｓ４６のＮＯ）、オブジェクト生成部１１１は、Ｓ４３以降の処理を再度実行する。また、全ての第１変数の抽出が完了していない場合（Ｓ４７のＮＯ）、オブジェクト生成部１１１は、Ｓ４１以降の処理を再度実行する。
【０１１２】
具体的に、オブジェクト生成部１１１は、Ｓ４１の処理で抽出した第１変数が配列Ｘ２である場合、図２４の下線部分に示すように、変数Ｙ２の幅算出処理の戻り値である「３」を、ＩＤ幅情報１３４における「第１変数」が「Ｃ２％Ｘ２」である情報（「項番」が「１」である情報）の「幅」に「３」を設定する（Ｓ４５、Ｓ４６のＹＥＳ）。
【０１１３】
その後、オブジェクト生成部１１１は、第１変数として変数Ｚ２を抽出した場合におけるＳ２２の処理と、第１変数として配列Ｖ２を抽出した場合におけるＳ２２の処理をそれぞれ実行する（Ｓ４７のＮＯ）。ここで、変数Ｚ２及び配列Ｖ２は、派生型の配列ではないため（Ｓ４４のＮＯ、Ｓ４７のＹＥＳ）、変数Ｚ２の幅算出処理及び配列Ｖ２の幅算出処理は実行されない。これにより、オブジェクト生成部１１１は、図２４に示すように、配列Ｘ２の各要素の成分の数として、「３」を特定することが可能になる。
【０１１４】
図１３に戻り、オブジェクト生成部１１１は、Ｓ２１の処理で抽出した第１変数と、Ｓ２２の処理で算出したＩＤ幅情報１３４とに基づき、ＩＤ割当て情報１３３を作成する（Ｓ２３）。以下、Ｓ２３の処理の詳細について説明を行う。
【０１１５】
[Ｓ２３の処理の詳細]
図１８は、Ｓ２３の処理の詳細を説明する図である。オブジェクト生成部１１１は、初めに、ＩＤ割当て数情報１３５に「０」を設定する（Ｓ７１）。ＩＤ割当て数情報１３５は、ＩＤの割当てが完了した変数の数を示す情報である。以下、ＩＤ割当て数情報１３５の具体例について説明を行う。
【０１１６】
[ＩＤ割当て数情報の具体例]
図２５、図２７及び図２９は、ＩＤ割当て数情報１３５の具体例を説明する図である。図２５、図２７及び図２９に示すＩＤ割当て数情報１３５は、ＩＤ割当て数情報１３５に含まれる各情報を識別する「項番」と、オブジェクト生成部１１１がＩＤの割当てを行った変数の数を示す「ＩＤ」とを項目として有する。
【０１１７】
具体的に、オブジェクト生成部１１１は、Ｓ７１の処理において、図２５に示すように、「項番」が「１」である情報の「ＩＤ」に「０」を設定する。
【０１１８】
図１８に戻り、オブジェクト生成部１１１は、ソースコード３３１に記述された変数（以下、変数Ｄとも呼ぶ）を１つ抽出する（Ｓ７２）。ここで、変数Ｄは、例えば、自らが他の変数の成分となっていない変数のみであってよい。そのため、図２に示すソースコード３３１の場合、変数Ｄには、共配列Ｃ１及び共配列Ｃ２が該当する。その後、オブジェクト生成部１１１は、変数Ｄ及び変数Ｄの成分にＩＤを割り当てるための処理（以下、ＩＤ割当て処理とも呼ぶ）を実行する（Ｓ７３）。以下、変数ＤのＩＤ割当て処理について説明を行う。
【０１１９】
[変数ＤのＩＤ割当て処理]
図１９及び図２０は、変数ＤのＩＤ割当て処理を説明する図である。オブジェクト生成部１１１は、初めに、変数ＤがＩＤ割当て情報１３３に含まれるか否かを判定する（Ｓ８１）。そして、変数ＤがＩＤ割当て情報１３３に含まれると判定した場合（Ｓ８１のＹＥＳ）、オブジェクト生成部１１１は、ＩＤ割当て数情報１３５とＩＤ割当て式情報１３６とを加算した値を、変数ＤのＩＤ割当て情報１３３として設定する（Ｓ８２）。ＩＤ割当て式情報１３６は、変数Ｄの成分に配列が含まれている場合に、その配列の添え字に基づいて変数Ｄの成分である変数のＩＤを特定するため式を示す情報である。ＩＤ割当て式情報１３６の具体例については後述する。
【０１２０】
そして、オブジェクト生成部１１１は、ＩＤ割当て数情報１３５に「１」を加算した値を、新たなＩＤ割当て数情報１３５として設定する（Ｓ８３）。
【０１２１】
続いて、オブジェクト生成部１１１は、図２０に示すように、変数Ｄが配列である場合（Ｓ９１のＹＥＳ）、オブジェクト生成部１１１は、変数Ｄの添え字から「１」を減算した値と変数ＤのＩＤ幅情報１３４とを乗算した値に、ＩＤ割当て式情報１３６を加算した値を、変数ＤのＩＤ割当て情報１３３として算出する（Ｓ９２）。一方、変数Ｄが配列でない場合（Ｓ９１のＮＯ）、オブジェクト生成部１１１は、Ｓ９２の処理を実行しない。
【０１２２】
その後、オブジェクト生成部１１１は、変数Ｄに成分が存在する場合（Ｓ９３のＹＥＳ）、変数Ｄの成分である変数Ｅを抽出し、抽出した変数ＥについてのＩＤ割当て処理を実行する（Ｓ９４、Ｓ９５）。さらに、オブジェクト生成部１１１は、割当て数ＩＤ情報１３５に、Ｓ９５の処理で割り当てられたＩＤの数を加算した値を、割当て数ＩＤ情報１３５として設定する（Ｓ９６）。そして、オブジェクト生成部１１１は、全ての変数Ｅの抽出が完了した場合（Ｓ９７のＹＥＳ）、変数ＤのＩＤ割当て処理を終了する。一方、オブジェクト生成部１１１は、変数Ｄに成分が存在しない場合（Ｓ９３のＮＯ）、Ｓ９４からＳ９７の処理を実行しない。また、オブジェクト生成部１１１は、全ての変数Ｅの抽出が完了していない場合（Ｓ９７のＮＯ）、Ｓ９４以降の処理を再度実行する。
【０１２３】
図１８に戻り、全ての変数Ｄの抽出が完了した場合（Ｓ７４のＹＥＳ）、オブジェクト生成部１１１は、Ｓ２３の処理を終了する。一方、全ての変数Ｄの抽出が完了していない場合（Ｓ７４のＮＯ）、オブジェクト生成部１１１は、Ｓ７２以降の処理を再度実行する。
【０１２４】
具体的に、オブジェクト生成部１１１は、図２に示すソースコード３３１において、変数Ｄとして共配列Ｃ１を抽出し、共配列Ｃ１のＩＤ割当て処理を実行する（Ｓ７２、Ｓ７３）。この場合、共配列Ｃ１及び共配列Ｃ１の成分は、ＩＤ割当て情報１３３に含まれていない（Ｓ８１のＮＯ）。そのため、オブジェクト生成部１１１は、共配列Ｃ１及び共配列Ｃ１の成分についてＳ８２の処理を実行しない。すなわち、オブジェクト生成部１１１は、共配列Ｃ１及び共配列Ｃ１の成分に対してＩＤの割当てを行わない。
【０１２５】
次に、オブジェクト生成部１１１は、変数Ｄとして共配列Ｃ２を抽出し、共配列Ｃ２についてのＩＤ割当て処理を実行する（Ｓ７４のＮＯ、Ｓ７２、Ｓ７３）。
【０１２６】
ここで、ＩＤ割当て情報１３３には、共配列Ｃ２が含まれていない（Ｓ８１のＮＯ）。また、共配列Ｃ２は、配列ではない（Ｓ９１のＮＯ）。一方、共配列Ｃ２には、成分が存在する（Ｓ９３のＹＥＳ）。そのため、オブジェクト生成部１１１は、共配列Ｃ２の成分である配列Ｘ２を抽出し、抽出した配列Ｘ２についてのＩＤ割当て処理を実行する（Ｓ９４、Ｓ９５）。
【０１２７】
この場合、ＩＤ割当て情報１３３には、配列Ｘ２が含まれていない（Ｓ８１のＮＯ）。一方、配列Ｘ２は、配列である（Ｓ９１のＹＥＳ）。また、図２４に示すように、ＩＤ幅情報１３４において「第１変数」が「Ｃ２％Ｘ２」である情報（「項番」が「１」である情報）の「幅」には「３」が設定されている。そのため、オブジェクト生成部１１１は、「（配列Ｘ２の添え字−１）＊３」をＩＤ割当て式情報１３６として算出する（Ｓ９２）。
【０１２８】
その後、オブジェクト生成部１１１は、配列Ｘ２の成分である変数Ｙ２を抽出し、抽出した変数Ｙ２についてのＩＤ割当て処理を実行する（Ｓ９３のＹＥＳ、Ｓ９４、Ｓ９５）。
【０１２９】
この場合、ＩＤ割当て情報１３３には、変数Ｙ２が含まれている（Ｓ８１のＹＥＳ）。また、ＩＤ割当て数情報１３５は、「０」である。そのため、オブジェクト生成部１１１は、ＩＤ割当て数情報１３５の「０」と、ＩＤ割当て式情報１３６の「（配列Ｘ２の添え字−１）＊３」とを加算した値である「（配列Ｘ２の添え字−１）＊３」を算出する（Ｓ８２）。そして、オブジェクト生成部１１１は、図２６の下線部分に示すように、ＩＤ割当て情報１３３における「第１変数」が「Ｃ２％Ｘ２％Ｙ２」である情報（「項番」が「１」である情報）の「ＩＤ」に「（配列Ｘ２の添え字−１）＊３」を設定する。
【０１３０】
続いて、オブジェクト生成部１１１は、図２７の下線部分に示すように、ＩＤ割当て数情報１３５である「０」に「１」を加算した値である「１」を、ＩＤ割当て数情報１３５の「ＩＤ」に設定する（Ｓ８３）。その後、オブジェクト生成部１１１は、変数Ｙ２が配列ではないため、変数Ｙ２の成分である変数Ｚ２を抽出し、抽出した変数Ｚ２についてのＩＤ割当て処理を実行する（Ｓ９１のＮＯ、Ｓ９３のＹＥＳ、Ｓ９４、Ｓ９５）。
【０１３１】
この場合、ＩＤ割当て情報１３３には、変数Ｚ２が含まれている（Ｓ８１のＹＥＳ）。また、変数Ｙ２についてのＩＤ割当て処理におけるＩＤ割当て数情報１３５は、「１」である。そして、変数Ｙ２についてのＩＤ割当て処理におけるＩＤ割当て式情報１３６の「（配列Ｘ２の添え字−１）＊３」である。そのため、オブジェクト生成部１１１は、ＩＤ割当て数情報１３５の「１」と、ＩＤ割当て式情報１３６の「（配列Ｘ２の添え字−１）＊３」とを加算した値である「（配列Ｘ２の添え字−１）＊３＋１」を算出する。そして、オブジェクト生成部１１１は、図２８の下線部分に示すように、ＩＤ割当て情報１３３における「第１変数」が「Ｃ２％Ｘ２％Ｙ２％Ｚ２」である情報（「項番」が「２」である情報）の「ＩＤ」に「（配列Ｘ２の添え字−１）＊３＋１」を設定する（Ｓ８２）。
【０１３２】
そして、変数Ｚ２は、配列ではなく、成分を含まない（Ｓ９１のＮＯ、Ｓ９３のＮＯ）。そのため、オブジェクト生成部１１１は、変数Ｚ２についてのＩＤ割当て処理を終了する（Ｓ９７のＹＥＳ）。
【０１３３】
変数Ｙ２についてのＩＤ割当て処理に戻り、オブジェクト生成部１１１は、変数Ｙ２についてのＩＤ割当て処理におけるＩＤ割当て数情報１３５である「１」に、変数Ｚ２についてのＩＤ割当て処理において割り当てたＩＤの数である「１」を加算した値である「２」を算出する。そして、オブジェクト生成部１１１は、図２９の下線部分に示すように、算出した「２」を、変数Ｙ２についてのＩＤ割当て処理におけるＩＤ割当て数情報１３５として設定する（Ｓ９６）。
【０１３４】
その後、オブジェクト生成部１１１は、変数Ｙ２の成分である配列Ｖ２を抽出し、抽出した配列Ｖ２についてのＩＤ割当て処理を実行する（Ｓ９７のＮＯ、Ｓ９４、Ｓ９５）。
【０１３５】
この場合、ＩＤ割当て情報１３３には、配列Ｖ２が含まれている（Ｓ８１のＹＥＳ）。また、変数Ｙ２についてのＩＤ割当て処理におけるＩＤ割当て数情報１３５は、「２」である。そして、変数Ｙ２についてのＩＤ割当て処理におけるＩＤ割当て式情報１３６の「（配列Ｘ２の添え字−１）＊３」である。そのため、オブジェクト生成部１１１は、ＩＤ割当て数情報１３５の「２」と、ＩＤ割当て式情報１３６の「（配列Ｘ２の添え字−１）＊３」とを加算した値である「（配列Ｘ２の添え字−１）＊３＋２」を算出する。そして、オブジェクト生成部１１１は、図３０の下線部分に示すように、ＩＤ割当て情報１３３における「第１変数」が「Ｃ２％Ｘ２％Ｙ２％Ｖ２」である情報（「項番」が「３」である情報）の「ＩＤ」に「（配列Ｘ２の添え字−１）＊３＋２」を設定する（Ｓ８２）。
【０１３６】
ここで、配列Ｖ２は配列であるため（Ｓ９１のＹＥＳ）、オブジェクト生成部１１１は、配列Ｖ２についてのＩＤ割当て処理において、Ｓ９２の処理を実行する。ただし、オブジェクト生成部１１１は、Ｓ９２の処理で更新されたＩＤ割当て情報１３３を後続処理において使用しないため、その説明を省略する。
【０１３７】
そして、配列Ｖ２は成分を含まないため、オブジェクト生成部１１１は、配列Ｖ２についてのＩＤ割当て処理を終了する（Ｓ９３のＮＯ）。
【０１３８】
その後、オブジェクト生成部１１１は、変数Ｙ２についてのＩＤ割当て処理及び配列Ｘ２についてのＩＤ割当て処理を終了し、Ｓ２３の処理を終了する（Ｓ７４のＹＥＳ）。
【０１３９】
図１２に戻り、オブジェクト生成部１１１は、オブジェクト３３３が実行される際に、第１記憶領域１０２ａのアドレス情報１３１が作成されるように、オブジェクト３３３を生成する（Ｓ１３）。以下、アドレス情報１３１の具体例について説明を行う。
【０１４０】
[アドレス情報の具体例]
図３１は、オブジェクト３３３の実行時に作成されるアドレス情報１３１の具体例を説明する図である。図３１に示すアドレス情報１３１は、図２１等で説明した「ＩＤ」と、図１１で説明した第１記憶領域１０２ａにおける第１変数のアドレスを示す「第１変数のアドレス」とを項目として有する。
【０１４１】
具体的に、図３１に示すアドレス情報１３１において、「ＩＤ」が「０」である情報の「第１変数のアドレス」には、「Ｐ１１番地」が設定されている。図３１の他の情報については説明を省略する。
【０１４２】
すなわち、プロセスＰ２は、プロセスＰ１の第１変数にアクセスする場合、例えば、図３０で説明したＩＤ割当て情報１３３を参照する。具体的に、プロセスＰ１の配列Ｘ２の２要素目の成分である変数Ｚ２にアクセスする場合、プロセスＰ２は、ＩＤ割当て情報１３３における「第１変数」に「Ｃ２％Ｘ２％Ｙ２」が設定された情報の「ＩＤ」に設定された「（配列Ｘ２の添え字−１）＊３＋１」を参照する。そして、「配列Ｘ２の添え字」に「２」を代入し、「ＩＤ」として「４」を取得する。次に、プロセスＰ２は、図３１で説明したアドレス情報１３１のうち、「ＩＤ」が「４」である情報の「第１変数のアドレス」を参照し、「Ｐ１５番地」を取得する。
【０１４３】
これにより、プロセスＰ２は、プロセスＰ１に割当てられた共有メモリ領域のうち、アドレスが「Ｐ１５番地」であるメモリ領域にアクセスすることが可能になる。そして、プロセスＰ２は、プロセスＰ１の配列Ｘ２の２要素目にアクセスすることが可能になる。
【０１４４】
なお、プロセスＰ１及びプロセスＰ２は、同じオブジェクト３３３を実行することにより生成されたプロセスである。そのため、各プロセスに対応するアドレス情報１３１における「第１変数のアドレス」の並び順は、各プロセスにおいて一致する。
【０１４５】
図１２に戻り、オブジェクト生成部１１１は、オブジェクト３３３が実行される際に、他のプロセスとの間において、アドレス情報１３１の記憶領域（以下、第２記憶領域）のアドレスを互いに通知するように、オブジェクト３３３を生成する（Ｓ１４）。以下、アドレス位置情報１３２の具体例について説明を行う。
【０１４６】
[アドレス位置情報の具体例]
図３２は、オブジェクト３３３の実行時に作成されるアドレス位置情報１３２の具体例を説明する図である。図３２に示すアドレス位置情報１３２は、各プロセスを識別する「プロセス名」を項目として有する。また、図３２に示すアドレス位置情報１３２は、各プロセスのアドレス情報１３１の記憶領域（例えば、他の物理マシンにおける記憶領域）のアドレスを示す「アドレス情報のアドレス」を項目として有する。
【０１４７】
具体的に、図３２に示すアドレス位置情報１３２において、「プロセス名」に「Ｐ２」が設定された情報には、「アドレス情報のアドレス」として「Ｐ２３番地」が設定されている。図３２の他の情報については説明を省略する。
【０１４８】
すなわち、図３２に示すアドレス位置情報１３２は、オブジェクト３３３を実行することにより生成されたプロセスとして、プロセスＰ１以外にプロセスＰ２、Ｐ３、Ｐ４及びＰ５が存在することを示している。そして、オブジェクト実行部１１２は、オブジェクト３３３の実行時において、プロセスＰ２、Ｐ３、Ｐ４及びＰ５から、それぞれのプロセスに対応するアドレス情報１３１のアドレスを取得し、図３２に示すアドレス位置情報１３２を作成する。その後、オブジェクト実行部１１２は、例えば、作成したアドレス位置情報１３２を情報格納領域１３０に記憶する。
【０１４９】
これにより、オブジェクト実行部１１２は、他のプロセスに割当てられた共通メモリ領域にアクセスする際に、アドレス位置情報１３２を参照することで、他のプロセスに対応するアドレス情報１３１にアクセスすることが可能になる。また、オブジェクト実行部１１２は、オブジェクト３３３の実行時において、アドレス情報１３１そのものを他のプロセスに対して通知する必要がなくなる。
【０１５０】
図１２に戻り、オブジェクト生成部１１１は、オブジェクト３３３の実行に伴って他のプロセスの第１変数を参照する場合、その第１変数に対応するアドレス情報１３１を参照するように、オブジェクト３３３を生成する（Ｓ１５）。これにより、オブジェクト生成部１１１は、各プロセスが他のプロセスの第１変数にアクセスする場合に、アドレス情報１３１を経由してアクセスさせることが可能になる。
【０１５１】
その後、オブジェクト生成部１１１は、Ｓ１２からＳ１５の処理において生成したオブジェクト３３３をストレージ装置３の情報格納領域３３０に記憶する（Ｓ１６）。
【０１５２】
[オブジェクト実行処理］
次に、第１の実施の形態におけるオブジェクト３３３を実行する処理（以下、オブジェクト実行処理とも呼ぶ）について説明する。図３３は、第１の実施の形態におけるオブジェクト実行処理を説明するフローチャートである。なお、以下、物理マシン１がオブジェクト実行処理を実行する場合について説明を行う。
【０１５３】
物理マシン１のオブジェクト実行部１１２は、図３３に示すように、オブジェクト３３３を実行するタイミング（以下、オブジェクト実行タイミングとも呼ぶ）になるまで待機する（Ｓ１０１のＮＯ）。オブジェクト実行タイミングは、例えば、事業者端末１１において、オブジェクト３３３を実行する旨の情報が入力されたタイミングであってよい。
【０１５４】
その後、オブジェクト実行タイミングになった場合（Ｓ１０１のＹＥＳ）、オブジェクト実行部１１２は、ストレージ装置３の情報格納領域３３０からオブジェクト３３３を取得し、オブジェクト３３３の実行を開始する（Ｓ１０２）。
【０１５５】
そして、オブジェクト実行部１１２は、アドレス情報１３１を作成する（Ｓ１０３）。具体的に、オブジェクト実行部１１２は、例えば、図３１で説明したアドレス情報１３１の作成を行う。そして、オブジェクト実行部１１２は、作成したアドレス情報１３１を情報格納領域１３０に記憶する。
【０１５６】
続いて、オブジェクト実行部１１２は、他のプロセス（オブジェクト３３３を実行することにより生成されたプロセス）との間において、アドレス情報１３１の記憶領域（第２記憶領域）のアドレスを互いに通知し、アドレス位置情報１３２を作成する（Ｓ１０４）。
【０１５７】
具体的に、オブジェクト実行部１１２は、他の物理マシンで動作を開始した他のプロセスに対し、アドレス情報１３１の記憶領域のアドレスを送信する。そして、オブジェクト実行部１１２は、他の物理マシンで動作を開始した他のプロセスから、アドレス情報１３１の記憶領域のアドレスを受信する。その後、オブジェクト実行部１１２は、他のプロセスから受信したアドレス情報１３１の記憶領域のアドレスに基づき、例えば、図３２で説明したアドレス位置情報１３２の作成を行う。
【０１５８】
その後、オブジェクト実行部１１２は、ソースコード３３１の記述に対応する処理（オブジェクト３３３の後続処理）を実行する（Ｓ１０５）。
【０１５９】
なお、オブジェクト実行部１１２は、アドレス情報１３１及びアドレス位置情報１３２のそれぞれの作成について、各プロセス間で同期させるものであってもよい。すなわち、オブジェクト実行部１１２は、例えば、オブジェクト３３３を実行することにより生成される複数のプロセスに対応するアドレス情報１３１が全て作成されるまで、アドレス位置情報１３２の作成（Ｓ１０４の処理）を行わないものであってもよい。
【０１６０】
また、オブジェクト実行部１１２は、アドレス情報１３１及びアドレス位置情報１３２を、ソースコード３３１に記述された関数毎に作成するものであってもよい。この場合、オブジェクト実行部１１２は、アドレス情報１３１及びアドレス位置情報１３２のそれぞれの作成について、関数毎に各プロセス間で同期させるものであってもよい。
【０１６１】
このように、物理マシン１は、オブジェクト３３３の実行に伴って生成される複数のプロセス間において、複数のプロセス間で通信される変数であってオブジェクト３３３の実行に伴って記憶領域が割付けられる第１変数が記憶される第１記憶領域１０２ａのアドレス情報を、オブジェクト３３３が実行される際に互いに通知するように、オブジェクト３３３を生成するオブジェクト生成部１１１を有する。
【０１６２】
これにより、物理マシン１は、アクセスを行う他のプロセスが他の物理マシンに存在する場合であっても、他のプロセスの変数にアクセスするために要する通信回数を削減することが可能になる。そのため、物理マシン１は、オブジェクトの実行に要する時間を短縮させることが可能になる。
【０１６３】
以上の実施の形態をまとめると、以下の付記のとおりである。
【０１６４】
（付記１）
ソースコードをコンパイルしてオブジェクトプログラムを生成する計算機であって、
前記オブジェクトプログラムの実行に伴って生成される複数のプロセス間において、前記複数のプロセス間で通信される変数であって前記オブジェクトプログラムの実行に伴って記憶領域が割付けられる第１変数が記憶される第１記憶領域のアドレス情報を、前記オブジェクトプログラムが実行される際に互いに通知する、前記オブジェクトプログラムを生成するオブジェクト生成部を有する、
ことを特徴とする計算機。
【０１６５】
（付記２）
付記１において、
前記第１記憶領域は、前記複数のプロセスそれぞれから参照可能な記憶領域である、
ことを特徴とする計算機。
【０１６６】
（付記３）
付記１において、
前記オブジェクト生成部は、前記オブジェクトプログラムが実行される際に、前記複数のプロセス間において、前記アドレス情報の記憶領域である第２記憶領域を互いに通知する、前記オブジェクトプログラムを生成する、
ことを特徴とする計算機。
【０１６７】
（付記４）
付記１において、
前記オブジェクト生成部は、前記オブジェクトプログラムの実行に伴って前記複数のプロセスに含まれる他のプロセスの前記第１変数を参照する場合、参照する前記第１変数に対応する前記アドレス情報が示す記憶領域を参照する、前記オブジェクトプログラムを生成する、
ことを特徴とする計算機。
【０１６８】
（付記５）
付記１において、
前記複数のプロセスは、それぞれ異なる物理マシンで動作するプロセスである、
ことを特徴とする計算機。
【０１６９】
（付記６）
付記１において、
前記オブジェクト生成部は、前記オブジェクトプログラムが実行される際に、前記アドレス情報を作成する、前記オブジェクトプログラムを生成する、
ことを特徴とする計算機。
【０１７０】
（付記７）
ソースコードをコンパイルして生成されるオブジェクトプログラムであって、
前記オブジェクトプログラムの実行に伴って生成される複数のプロセス間において、前記複数のプロセス間で通信される変数であって前記オブジェクトプログラムの実行に伴って記憶領域が割付けられる第１変数が記憶される第１記憶領域のアドレス情報を互いに通知する、
処理をコンピュータに実行させることを特徴とするオブジェクトプログラム。
【０１７１】
（付記８）
付記７において、
前記第１記憶領域は、前記複数のプロセスそれぞれから参照可能な記憶領域である、
ことを特徴とするオブジェクトプログラム。
【０１７２】
（付記９）
付記７において、
前記通知する処理では、前記複数のプロセス間において、前記アドレス情報の記憶領域である第２記憶領域を互いに通知する、
ことを特徴とするオブジェクトプログラム。
【０１７３】
（付記１０）
付記７において、さらに、
前記複数のプロセスに含まれる他のプロセスの前記第１変数を参照する場合、参照する前記第１変数に対応する前記アドレス情報が示す記憶領域を参照する、
ことを特徴とするオブジェクトプログラム。
【０１７４】
（付記１１）
付記７において、
前記複数のプロセスは、それぞれ異なる物理マシンで動作するプロセスである、
ことを特徴とするオブジェクトプログラム。
【０１７５】
（付記１２）
付記７において、さらに、
前記アドレス情報を通知する処理の前に、前記アドレス情報を作成する、
ことを特徴とするオブジェクトプログラム。
【０１７６】
（付記１３）
ソースコードをコンパイルしてオブジェクトプログラムを生成するコンパイルログラムであって、
前記オブジェクトプログラムの実行に伴って生成される複数のプロセス間において、前記複数のプロセス間で通信される変数であって前記オブジェクトプログラムの実行に伴って記憶領域が割付けられる第１変数が記憶される第１記憶領域のアドレス情報を、前記オブジェクトプログラムが実行される際に互いに通知する、前記オブジェクトプログラムを生成する、
処理をコンピュータに実行させることを特徴とするコンパイルプログラム。
【０１７７】
（付記１４）
ソースコードをコンパイルしてオブジェクトプログラムを生成するコンパイル方法であって、
前記オブジェクトプログラムの実行に伴って生成される複数のプロセス間において、前記複数のプロセス間で通信される変数であって前記オブジェクトプログラムの実行に伴って記憶領域が割付けられる第１変数が記憶される第１記憶領域のアドレス情報を、前記オブジェクトプログラムが実行される際に互いに通知する、前記オブジェクトプログラムを生成する、
ことを特徴とするコンパイル方法。
【符号の説明】
【０１７８】
１：物理マシン                    ２：物理マシン
３：ストレージ装置                １１：事業者端末
【図１】
2017091287.tif 000003
【図２】
2017091287.tif 000004
【図３】
2017091287.tif 000005
【図４】
2017091287.tif 000006
【図５】
2017091287.tif 000007
【図６】
2017091287.tif 000008
【図７】
2017091287.tif 000009
【図８】
2017091287.tif 000010
【図９】
2017091287.tif 000011
【図１０】
2017091287.tif 000012
【図１１】
2017091287.tif 000013
【図１２】
2017091287.tif 000014
【図１３】
2017091287.tif 000015
【図１４】
2017091287.tif 000016
【図１５】
2017091287.tif 000017
【図１６】
2017091287.tif 000018
【図１７】
2017091287.tif 000019
【図１８】
2017091287.tif 000020
【図１９】
2017091287.tif 000021
【図２０】
2017091287.tif 000022
【図２１】
2017091287.tif 000023
【図２２】
2017091287.tif 000024
【図２３】
2017091287.tif 000025
【図２４】
2017091287.tif 000026
【図２５】
2017091287.tif 000027
【図２６】
2017091287.tif 000028
【図２７】
2017091287.tif 000029
【図２８】
2017091287.tif 000030
【図２９】
2017091287.tif 000031
【図３０】
2017091287.tif 000032
【図３１】
2017091287.tif 000033
【図３２】
2017091287.tif 000034
【図３３】
2017091287.tif 000035