(57)【要約】【課題】複数の仮想計算機間で、メモリにロードされたプログラムを共有可能なメモリ共有システムを提供する。【解決手段】メモリ利用情報記憶部５１は、仮想計算機Ａ用記憶部５２及び仮想計算機Ｂ用記憶部５３にロードされたプログラムファイルについて、プログラムファイルを一意に識別するためのプログラムＩＤ、要求元メモリアドレス、要求メモリサイズと、物理メモリアドレスとを対応付けて記憶する。メモリ確保手段４２は、メモリ確保要求に対応するプログラムファイルのプログラムＩＤ、要求元メモリアドレス、要求メモリサイズを検索キーとして、メモリ利用情報記憶部５１を検索する。メモリ確保手段４２は、検索にヒットしたときには、検索にキーに対応する物理メモリアドレスから要求メモリサイズ分のメモリを、複数の仮想計算機で共有するように共有化処理を行う。【選択図】図１
2008225620.tif 000002
【特許請求の範囲】
【請求項１】
使用すべきメモリ領域が計算機ごとに分割されたメモリにロードされたプログラムを、複数の計算機間で共有するメモリ共有システムであって、
一の計算機から、前記メモリへロードすべきプログラムを特定する情報を含むメモリ確保要求が発生すると、前記メモリにロード済みのプログラムについて、プログラムを一意に識別するためのプログラムＩＤを記憶するメモリ利用情報記憶部を参照して、前記メモリ確保要求が発生したプログラムに対応するプログラムＩＤと一致するプログラムＩＤが記憶されているか否かを判断するメモリ利用情報検索手段と、
前記メモリ利用情報検索手段にて一致するプログラムＩＤが記憶されていると判断されると、前記プログラムがロードされたメモリ領域を複数の計算機間で共有化する処理を行うメモリ確保手段とを備えることを特徴とするメモリ共有システム。
【請求項２】
前記メモリ確保手段は、前記メモリ利用情報検索手段にて一致するプログラムＩＤが前記メモリ利用情報記憶部に記憶されていないと判断されると、前記メモリ確保要求を発生した計算機が使用すべきメモリ領域に前記プログラムをロードし、メモリ利用情報書込み手段により、前記ロードしたプログラムのプログラムＩＤを、前記メモリ利用情報記憶部に格納する、請求項１に記載のメモリ共有システム。
【請求項３】
前記メモリ利用情報書込み手段は、前記プログラムＩＤ、前記メモリへロードすべきプログラム内のアドレスを示す要求元メモリアドレス、及び、前記メモリへロードする前記プログラムのメモリサイズを示す要求メモリサイズと、前記プログラムをロードしたメモリ領域の先頭メモリアドレスとを対応付けて、前記メモリ利用情報記憶部に格納する、請求項２に記載のメモリ共有システム。
【請求項４】
前記メモリ確保要求が、前記要求元メモリアドレス及び前記要求サイズを含んでおり、前記メモリ利用情報検索手段は、前記メモリにロードすべきプログラムのプログラムＩＤと、前記メモリ確保要求に含まれる要求元メモリアドレス及び要求メモリサイズとを検索キーとして前記メモリ利用情報記憶部を検索し、前記メモリ利用情報記憶部に、前記検索キーに一致するエントリが存在するか否かを判断する、請求項３に記載のメモリ共有システム。
【請求項５】
前記メモリ確保手段は、前記メモリ利用情報検索手段にて前記検索キーに一致するエントリが存在すると判断されると、当該エントリに記憶された前記先頭メモリアドレスから前記要求メモリサイズ分のメモリ領域を、前記メモリ確保要求を発生した計算機からも参照可能となるようにメモリ共有化処理をする、請求項４に記載のメモリ共有システム。
【請求項６】
前記計算機が、プログラムの実行を行い、プログラムファイルをメモリにロードする必要が生じると、前記要求元メモリアドレス及び前記要求メモリサイズを求めた上で、前記メモリ確保要求を発生するプログラム実行手段を備えている、請求項３に記載のメモリ共有システム。
【請求項７】
前記メモリへロードすべきプログラムの属性情報を取得する属性情報取得手段と、前記属性情報に基づいて、前記プログラムＩＤを生成するプログラムＩＤ生成手段とを備えている、請求項１に記載のメモリ共有システム。
【請求項８】
前記属性情報取得手段は、前記計算機内で前記プログラムのプログラムファイルを一意に識別するために割り当てられた識別子を含むプログラムファイル特定情報に基づいて前記プログラムファイルを特定し、該プログラムファイルの属性情報を取得する、請求項７に記載のメモリ共有システム。
【請求項９】
前記メモリ確保要求発生元の計算機の識別子と、前記プログラムファイル特定情報と、前記プログラムＩＤとを対応付けて記憶するプログラムＩＤ記憶部を参照し、前記属性情報取得手段にて特定されたプログラムファイルに対応するプログラムＩＤが記憶されているか否かを判断するプログラムＩＤ検索手段を更に備え、
前記プログラムＩＤ生成手段は、前記プログラムＩＤ検索手段にて前記属性情報取得手段が特定したプログラムファイルに対応するプログラムＩＤが記憶されていると判断されると、前記プログラムＩＤの生成に代えて、前記プログラムＩＤ記憶部に記憶されたプログラムＩＤを取得する、請求項８に記載のメモリ共有システム。
【請求項１０】
前記プログラムＩＤ生成手段は、前記プログラムＩＤ検索手段にて前記属性情報取得手段が特定したプログラムファイルに対応するプログラムＩＤが記憶されていないと判断されると、プログラムＩＤ書込み手段により、前記属性情報に基づいて生成したプログラムＩＤを、前記計算機の識別子及び前記プログラムファイル特定情報と対応付けて前記プログラムＩＤ記憶部に格納する、請求項９に記載のメモリ共有システム。
【請求項１１】
前記計算機が、実計算機上で実行される複数の仮想計算機を含み、前記メモリ確保手段は、前記プログラムがロードされた、一の仮想計算機に対応したメモリ領域を、複数の仮想計算機間で共有化する処理を行う、請求項１に記載のメモリ共有システム。
【請求項１２】
前記計算機が、実計算機、及び、実計算機上で実行される仮想計算機を含み、前記メモリ確保手段は、前記プログラムがロードされた、前記実計算機又は仮想計算機に対応したメモリ領域を、前記実計算機と前記仮想計算機との間で共有化する処理を行う、請求項１に記載のメモリ共有システム。
【請求項１３】
使用すべきメモリ領域が計算機ごとに分割されたメモリにロードされたプログラムを複数の計算機間で共有する、コンピュータにおけるメモリ共有方法であって、
前記コンピュータが、一の計算機から、前記メモリへロードすべきプログラムを特定する情報を含むメモリ確保要求が発生すると、前記メモリにロード済みのプログラムについて、プログラムを一意に識別するためのプログラムＩＤを記憶するメモリ利用情報記憶部を参照して、前記メモリ確保要求が発生したプログラムに対応するプログラムＩＤと一致するプログラムＩＤが記憶されているか否かを判断するメモリ利用情報検索ステップと、
前記コンピュータが、前記メモリ利用情報検索ステップで一致するプログラムＩＤが記憶されていると判断すると、前記プログラムがロードされたメモリ領域を複数の計算機間で共有化する処理を行うメモリ確保ステップとを有することを特徴とするメモリ共有方法。
【請求項１４】
前記コンピュータは、前記メモリ利用情報検索ステップで一致するプログラムＩＤが前記メモリ利用情報記憶部に記憶されていないと判断すると、前記メモリ確保要求を発生した計算機が使用すべきメモリ領域に前記プログラムをロードし、該ロードしたプログラムのプログラムＩＤを、前記メモリ利用情報記憶部に格納する、請求項１３に記載のメモリ共有方法。
【請求項１５】
前記コンピュータは、前記プログラムＩＤの前記メモリ利用情報記憶部への格納に際しては、前記プログラムＩＤ、前記メモリへロードすべきプログラム内のアドレスを示す要求元メモリアドレス、及び、前記メモリへロードする前記プログラムのメモリサイズを示す要求メモリサイズと、前記プログラムをロードしたメモリ領域の先頭メモリアドレスとを対応付けて、前記メモリ利用情報記憶部に格納する、請求項１４に記載のメモリ共有方法。
【請求項１６】
前記メモリ確保要求が、前記要求元メモリアドレス及び前記要求メモリサイズを含んでおり、前記メモリ利用情報検索ステップでは、前記コンピュータは、前記メモリにロードすべきプログラムのプログラムＩＤと、前記メモリ確保要求に含まれる要求元メモリアドレス及び要求メモリサイズとを検索キーとして前記メモリ利用情報記憶部を検索し、前記メモリ利用情報記憶部に、前記検索キーに一致するエントリが存在するか否かを判断する、請求項１５に記載のメモリ共有方法。
【請求項１７】
前記メモリ確保ステップでは、前記メモリ利用情報検索ステップで前記検索キーに一致するエントリが存在すると判断すると、当該エントリに記憶された前記先頭メモリアドレスから前記要求メモリサイズ分のメモリ領域を、前記メモリ確保要求を発生した計算機からも参照可能となるようにメモリ共有化処理をする、請求項１６に記載のメモリ共有方法。
【請求項１８】
前記コンピュータが、前記メモリへロードすべきプログラムの属性情報を取得し、該取得した属性情報に基づいて、前記プログラムＩＤを生成するステップを備えている、請求項１３に記載のメモリ共有方法。
【請求項１９】
前記属性情報を取得するステップでは、前記コンピュータは、前記計算機内で前記プログラムのプログラムファイルを一意に識別するために割り当てられた識別子を含むプログラムファイル特定情報に基づいて前記プログラムファイルを特定し、該プログラムファイルの属性情報を取得する、請求項１８に記載のメモリ共有方法。
【請求項２０】
前記コンピュータが、前記メモリ確保要求発生元の計算機の識別子と、前記プログラムファイル特定情報と、前記プログラムＩＤとを対応付けて記憶するプログラムＩＤ記憶部を参照し、前記特定したプログラムファイルに対応するプログラムＩＤが記憶されているか否かを判断するステップを更に有し、
前記コンピュータは、前記プログラムＩＤが前記メモリ利用情報記憶部に記憶されているか否かを判断するステップで、前記特定したプログラムファイルに対応するプログラムＩＤが記憶されていると判断すると、前記プログラムＩＤを生成するステップで前記プログラムＩＤを生成するのに代えて、前記プログラムＩＤ記憶部に記憶されたプログラムＩＤを取得する、請求項１９に記載のメモリ共有方法。
【請求項２１】
前記コンピュータは、前記プログラムＩＤが前記プログラムＩＤ記憶部に記憶されているか否かを判断するステップで、前記特定したプログラムファイルに対応するプログラムＩＤが記憶されていないと判断すると、前記属性情報に基づいてプログラムＩＤを生成し、該生成したプログラムＩＤと、前記計算機識別子及び前記プログラムファイル特定情報とを対応付けて前記プログラムＩＤ記憶部に格納する、請求項２０に記載のメモリ共有方法。
【請求項２２】
前記計算機が、前記コンピュータ上で実行される複数の仮想計算機を含み、前記メモリ確保ステップでは、前記コンピュータは、前記プログラムがロードされた、一の仮想計算機に対応したメモリ領域を、複数の仮想計算機間で共有化する処理を行う、請求項１３に記載のメモリ共有方法。
【請求項２３】
前記計算機が、前記コンピュータ自身、及び、前記コンピュータ上で実行される仮想計算機を含み、前記メモリ確保ステップでは、前記コンピュータは、前記プログラムがロードされた、前記コンピュータ又は前記仮想計算機に対応したメモリ領域を、前記コンピュータと前記仮想計算機との間で共有化する処理を行う、請求項１３に記載のメモリ共有方法。
【請求項２４】
コンピュータで、使用すべきメモリ領域が計算機ごとに分割されたメモリにロードされたプログラムを複数の計算機間で共有する処理を実行させるプログラムであって、前記コンピュータに、
一の計算機から、前記メモリへロードすべきプログラムを特定する情報を含むメモリ確保要求が発生すると、前記メモリにロード済みのプログラムについて、プログラムを一意に識別するためのプログラムＩＤを記憶するメモリ利用情報記憶部を参照して、前記メモリ確保要求が発生したプログラムに対応するプログラムＩＤと一致するプログラムＩＤが記憶されているか否かを判断するメモリ利用情報検索処理と、
前記メモリ利用情報検索処理で一致するプログラムＩＤが記憶されていると判断すると、前記プログラムがロードされたメモリ領域を複数の計算機間で共有化するメモリ確保処理とを実行させることを特徴とするプログラム。
【請求項２５】
前記メモリ利用情報検索処理で一致するプログラムＩＤが前記メモリ利用情報記憶部に記憶されていないと判断されると、前記コンピュータに、前記メモリ確保要求を発生した計算機が使用すべきメモリ領域に前記プログラムをロードし、該ロードしたプログラムのプログラムＩＤを、前記メモリ利用情報記憶部に格納する処理を実行させる、請求項２４に記載のプログラム。
【請求項２６】
前記コンピュータは、
前記プログラムＩＤを前記メモリ利用情報記憶部に格納する処理では、前記プログラムＩＤ、前記メモリへロードすべきプログラム内のアドレスを示す要求元メモリアドレス、及び、前記メモリへロードする前記プログラムのメモリサイズを示す要求メモリサイズと、前記プログラムをロードしたメモリ領域の先頭メモリアドレスとを対応付けて、前記メモリ利用情報記憶部に格納する、請求項２５に記載のプログラム。
【請求項２７】
前記メモリ確保要求が、前記要求元メモリアドレス及び前記要求メモリサイズを含んでおり、前記メモリ利用情報検索処理では、前記メモリにロードすべきプログラムのプログラムＩＤと、前記メモリ確保要求に含まれる要求元メモリアドレス及び要求メモリサイズとを検索キーとして前記メモリ利用情報記憶部を検索し、前記メモリ利用情報記憶部に、前記検索キーに一致するエントリが存在するか否かを判断する、請求項２６に記載のプログラム。
【請求項２８】
前記メモリ確保処理では、前記メモリ利用情報検索処理で前記検索キーに一致するエントリが存在すると判断すると、当該エントリに記憶された前記先頭メモリアドレスから前記要求メモリサイズ分のメモリ領域を、前記メモリ確保要求を発生した計算機からも参照可能となるようにメモリ共有化処理をする、請求項２７に記載のプログラム。
【請求項２９】
前記コンピュータに、前記メモリへロードすべきプログラムの属性情報を取得し、該取得した属性情報に基づいて、前記プログラムＩＤを生成する処理を更に実行させる、請求項２４に記載のプログラム。
【請求項３０】
前記属性情報の取得では、前記計算機内で前記プログラムのプログラムファイルを一意に識別するために割り当てられた識別子を含むプログラムファイル特定情報に基づいて前記プログラムファイルを取得し、該プログラムファイルの属性情報を取得する、請求項２９に記載のプログラム。
【請求項３１】
前記コンピュータに、前記メモリ確保要求発生元の計算機と、前記プログラムファイル特定情報と、前記プログラムＩＤとを対応付けて記憶するプログラムＩＤ記憶部を参照し、前記特定したプログラムファイルに対応するプログラムＩＤが記憶されているか否かを判断する処理を更に実行させ、
前記プログラムＩＤが前記メモリ利用情報記憶部に記憶されているか否かを判断する処理で、前記特定したプログラムファイルに対応するプログラムＩＤが記憶されていると判断されると、前記コンピュータに、前記プログラムＩＤを生成する処理に代えて、前記プログラムＩＤ記憶部に記憶されたプログラムＩＤを取得する処理を実行させる、請求項３０に記載のプログラム。
【請求項３２】
前記プログラムＩＤが前記プログラムＩＤ記憶部に記憶されているか否かを判断する処理で、前記特定したプログラムファイルに対応するプログラムＩＤが記憶されていないと判断されると、前記コンピュータに、前記属性情報に基づいてプログラムＩＤを生成し、該生成したプログラムＩＤと、前記プログラムファイル特定情報とを対応付けて前記プログラムＩＤ記憶部に格納する処理を実行させる、請求項３１に記載のプログラム。
【請求項３３】
前記計算機が、前記コンピュータ上で実行される複数の仮想計算機を含み、前記メモリ確保処理では、前記プログラムがロードされた、一の仮想計算機に対応したメモリ領域を、複数の仮想計算機間で共有化する処理を行う、請求項２４に記載のプログラム。
【請求項３４】
前記計算機が、前記コンピュータ自身、及び、前記コンピュータ上で実行される仮想計算機を含み、前記メモリ確保処理では、前記プログラムがロードされた、前記コンピュータ又は前記仮想計算機に対応したメモリ領域を、前記コンピュータと前記仮想計算機との間で共有化する処理を行う、請求項２４に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ共有システム、方法、及び、プログラムに関し、更に詳しくは、複数の計算機間でメモリを共有するメモリ共有システム、方法、及び、プログラムに関する。
【背景技術】
【０００２】
１つの実計算機上で複数の仮想計算機を実行する技術がある。１つの計算機上で複数の仮想計算機を実行する場合、各仮想計算機に独立したメモリ領域が割り当てられるため、仮想計算機の数に比例したメモリ領域が必要となる。このため、組込み機器など、使用可能なハードウェア資源が制限される小さい計算機では、計算機上で複数の仮想計算機を実行すると、メモリ領域が不足する問題が生じている。
【０００３】
１つの実計算機上で複数の仮想計算機を実行する場合、それぞれの仮想計算機上で同じプログラムが動作することがある。しかし、各仮想計算機が使用するメモリ領域は、実計算機のメモリ上に別々に確保されるため、実計算機上に同じプログラムファイルがメモリ上に二重にロードされることになる。例えば、１つの実計算機上で、Ｌｉｎｕｘベースの仮想計算機が２つ実行されている場合を考えると、それぞれの仮想計算機のメモリ領域に、同じバージョンのｇｌｉｂｃライブラリファイルがロードされることがある。このような状況から、複数の仮想計算機で同一のプログラムが実行される場合に、メモリにロードされるプログラムファイルを共有するためのメモリ共有システムが求められている。
【０００４】
ここで、ＯＳ内でのメモリ共有システムの一例が、非特許文献１に記載されている。非特許文献１では、メモリにロードされたファイルを複数のプログラムから参照可能なシステムについて記述されている。この手法は、１つのＯＳ内のメモリ共有手法として有名であるが、この手法を、仮想計算機間でのメモリ共有方法とし利用することはできない。以下、この手法が仮想計算機間でのメモリ共有手法として利用できないことを説明する。
【０００５】
非特許文献１に記載のシステムでは、ＯＳ上で動作するプログラムがファイルを参照する際には、ＯＳによって参照先ファイルに対して割り当てられている識別子（ｉノード番号）とファイル内オフセット値とを元に、メモリにロードすべきファイルデータを特定している。そして、同じＯＳ上で動作する他のプログラムから同一ファイル・同一オフセットに対する参照要求があったときには、ＯＳは既にメモリにロードしたファイルデータを他のプログラムにも参照させる。これにより、複数のプログラム間でメモリ共有を行っている。
【０００６】
しかし、非特許文献１に記載の技術を、複数の仮想計算機間でのメモリ共有に適用することを考えると、各仮想計算機は異なる仮想記憶装置を持つため、それぞれの仮想計算機内で同じｉノード番号のファイルを参照したとしても、参照先ファイルが同一のファイルでない可能性がある。例えば、仮想計算機Ａと仮想計算機Ｂでそれぞれ、／ｓｂｉｎ／ｉｎｉｔというファイルを参照する場合、仮想計算機Ａの仮想記憶装置内の／ｓｂｉｎ／ｉｎｉｔと、仮想計算機Ｂの仮想記憶装置内の／ｓｂｉｎ／ｉｎｉｔのファイルとが異なる可能性がある。このため、２つのファイルにそれぞれ同じｉノード番号が割り当てられていた場合であっても、この２つのファイルを同一のファイルとみなしプログラムファイルの共有化を行うと、プログラムが正常に動作しない可能性がある。このように、非特許文献１に記載されたメモリ共有システムは、仮想計算機間でのメモリ共有システムとして利用できない。
【０００７】
一方、複数の仮想計算機間でのメモリ共有システムの一例は、特許文献１、特許文献２に記載されている。特許文献１では、一つの実計算機上で動作する複数の仮想計算機間でメモリ領域の共有を行うシステムについて記述されている。このシステムでは、あらかじめメモリをいくつかのブロックに分割し、ブロックごとに「特定の仮想計算機からのみ参照可能なブロック」、「複数の仮想計算機間で共有可能なブロック」を指定した制御テーブルを用意する。そして、仮想計算機を実行するときには、メモリブロックの制御を行う制御プログラムが、前もって設定された制御テーブルに基づいて、メモリブロックを仮想計算機に割り当てる。
【０００８】
また、特許文献２では、ある仮想計算機で管理されているメモリ領域を、他の仮想計算機と共有するシステムについて記述されている。このシステムでは、仮想計算機Ａが、仮想計算機Ｂからメモリアクセス要求を受信すると、自身の管理するメモリ領域の一部をアクセス要求元の仮想計算機Ｂにマッピングする。このとき、仮想計算機Ｂに割り当てたページの参照カウントも管理しており、参照カウントが０になると、マッピングを解除することができる。
【非特許文献１】ＤＡＮＩＥＬ  Ｐ．  ＢＯＶＥＴ他著「詳細Ｌｉｎｕｘカーネル  第２版」オライリー・ジャパン、２００３年６月２４日、ｐｐ．５８０−５９１
【特許文献１】特開平１１−２４９９１６号公報
【特許文献２】特開２００６−２５２５５４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
第１の問題点は、複数の仮想計算機で同一のプログラムが実行されるとき、メモリにロードされたプログラムファイルを共有できないということである。その理由は、特許文献１及び２では、仮想計算機間でのメモリ領域の共有方法について述べているが、何れもプログラムファイルを共有することには適用できないからである。第２の問題点は、仮想計算機と実計算機とで同一のプログラムが実行されるときに、メモリにロードされるプログラムファイルを共有できないということである。その理由は、特許文献１及び２ともに、仮想計算機と実計算機とのメモリ領域の共有方法についても適用可能であるが、何れもプログラムファイルを共有することには適用できないからである。
【００１０】
本発明は、上記従来技術の問題点を解消し、複数の仮想計算機で同一のプログラムが実行されるときに、メモリにロードされるプログラムファイルを複数の仮想計算機間で共有できるメモリ共有システム、方法、及び、プログラムを提供することを目的とする。
【００１１】
また、本発明の別の目的は、実計算機と仮想計算機とで同一のプログラムが実行されるときに、メモリにロードされるプログラムファイルを実計算機と仮想計算機とで共有できるメモリ共有システム、方法、及び、プログラムを提供することである。
【課題を解決するための手段】
【００１２】
上記目的を達成するために、本発明のメモリ共有システムは、使用すべきメモリ領域が計算機ごとに分割されたメモリにロードされたプログラムを、複数の計算機間で共有するメモリ共有システムであって、一の計算機から、前記メモリへロードすべきプログラムを特定する情報を含むメモリ確保要求が発生すると、前記メモリにロード済みのプログラムについて、プログラムを一意に識別するためのプログラムＩＤを記憶するメモリ利用情報記憶部を参照して、前記メモリ確保要求が発生したプログラムに対応するプログラムＩＤと一致するプログラムＩＤが記憶されているか否かを判断するメモリ利用情報検索手段と、前記メモリ利用情報検索手段にて一致するプログラムＩＤが記憶されていると判断されると、前記プログラムがロードされたメモリ領域を複数の計算機間で共有化する処理を行うメモリ確保手段とを備えることを特徴とする。
【００１３】
本発明のメモリ共有方法は、使用すべきメモリ領域が計算機ごとに分割されたメモリにロードされたプログラムを複数の計算機間で共有する、コンピュータにおけるメモリ共有方法であって、前記コンピュータが、一の計算機から、前記メモリへロードすべきプログラムを特定する情報を含むメモリ確保要求が発生すると、前記メモリにロード済みのプログラムについて、プログラムを一意に識別するためのプログラムＩＤを記憶するメモリ利用情報記憶部を参照して、前記メモリ確保要求が発生したプログラムに対応するプログラムＩＤと一致するプログラムＩＤが記憶されているか否かを判断するメモリ利用情報検索ステップと、前記コンピュータが、前記メモリ利用情報検索ステップで一致するプログラムＩＤが記憶されていると判断すると、前記プログラムがロードされたメモリ領域を複数の計算機間で共有化する処理を行うメモリ確保ステップとを有することを特徴とする。
【００１４】
本発明のプログラムは、コンピュータに、使用すべきメモリ領域が計算機ごとに分割されたメモリにロードされたプログラムを複数の計算機間で共有する処理を実行させるプログラムであって、前記コンピュータに、一の計算機から、前記メモリへロードすべきプログラムを特定する情報を含むメモリ確保要求が発生すると、前記メモリにロード済みのプログラムについて、プログラムを一意に識別するためのプログラムＩＤを記憶するメモリ利用情報記憶部を参照して、前記メモリ確保要求が発生したプログラムに対応するプログラムＩＤと一致するプログラムＩＤが記憶されているか否かを判断するメモリ利用情報検索処理と、前記メモリ利用情報検索処理で一致するプログラムＩＤが記憶されていると判断すると、前記プログラムがロードされたメモリ領域を複数の計算機間で共有化するメモリ確保処理とを実行させることを特徴とする。
【００１５】
本発明のメモリ共有システム、方法、及び、プログラムでは、メモリにロードしたプログラムのプログラムＩＤをメモリ利用情報記憶部に記憶しておき、メモリ確保要求が発生したときには、メモリ確保要求対象のプログラムのプログラムＩＤが、メモリ利用情報記憶部に記憶されているか否かを検索する。記憶されているときには、メモリ確保要求を発生した計算機以外の計算機が使用するメモリ領域に、メモリ確保対象のプログラムが既にロードされているので、そのプログラムがロードされたメモリ領域を、複数の計算機間で共有化するように共有化処理する。このようにすることで、複数の計算機で同一のプログラムが実行されるときに、メモリにロードされるプログラムファイルを複数の仮想計算機間で共有できる。
【００１６】
本発明のメモリ共有システム、方法、及び、プログラムでは、前記メモリ利用情報の検索にて一致するプログラムＩＤが前記メモリ利用情報記憶部に記憶されていないと判断されたときには、前記メモリ確保要求を発生した計算機が使用すべきメモリ領域に前記プログラムをロードし、該ロードしたプログラムのプログラムＩＤを、前記メモリ利用情報記憶部に格納する構成を採用することができる。この場合、その後、他の計算機が同一プログラムについてメモリ確保要求を発生したときには、他の計算機との間で、メモリにロードされたプログラムを共有できる。
【００１７】
本発明のメモリ共有システム、方法、及び、プログラムでは、前記プログラムＩＤ、前記メモリへロードすべきプログラム内のアドレスを示す要求元メモリアドレス、及び、前記メモリへロードする前記プログラムのメモリサイズを示す要求メモリサイズと、前記プログラムをロードしたメモリ領域の先頭メモリアドレスとを対応付けて、前記メモリ利用情報記憶部に格納する構成を採用することができる。この場合、メモリ利用情報記憶部を参照することで、どのプログラムのどの部分をどれだけのメモリサイズ分だけ、どのメモリアドレスにロードしたかを知ることができる。
【００１８】
本発明のメモリ共有システム、方法、及び、プログラムでは、前記メモリ確保要求が、前記要求元メモリアドレス及び前記要求サイズを含んでおり、前記メモリ利用情報の検索では、前記メモリにロードすべきプログラムのプログラムＩＤと、前記メモリ確保要求に含まれる要求元メモリアドレス及び要求メモリサイズとを検索キーとして前記メモリ利用情報記憶部を検索し、前記メモリ利用情報記憶部に、前記検索キーに一致するエントリが存在するか否かを判断する構成を採用できる。この場合、前記メモリ利用情報の検索にて前記検索キーに一致するエントリが存在すると判断されたときは、当該エントリに記憶された前記先頭メモリアドレスから前記要求メモリサイズ分のメモリ領域を、前記メモリ確保要求を発生した計算機からも参照可能となるようにメモリ共有化処理をする構成を採用できる。検索の結果、検索キーに一致するエントリが存在したときは、メモリ発生要求の対象のプログラムについて、同一要求元メモリアドレス及び要求メモリサイズのプログラム部分が、既に別の計算機用のメモリ領域内にロードされていることを表している。従って、検索キーに対応して登録された先頭メモリアドレスから要求メモリサイズ分のメモリ領域を、メモリ確保要求を発生した計算機からも参照可能とすることで、メモリにロードされたプログラム（部分）を共有できる。
【００１９】
本発明のメモリ共有システムは、前記計算機が、プログラムの実行を行い、プログラムファイルをメモリにロードする必要が生じると、前記要求元メモリアドレス及び前記要求メモリサイズを求めた上で、前記メモリ確保要求を発生するプログラム実行手段を備えている構成を採用できる。
【００２０】
本発明のメモリ共有システム、方法、及び、プログラムでは、前記メモリへロードすべきプログラムの属性情報を取得し、該取得した属性情報に基づいて、前記プログラムＩＤを生成する構成を採用できる。属性情報には、ファイルに固有の情報を用いることができる。プログラムＩＤの生成は、例えば、属性情報をハッシュ値に変換することで行う。プログラムＩＤの生成は、各計算機で行ってもよく、或いは、各計算機からメモリ発生要求の対象のプログラムファイルの属性情報を取得して、複数の計算機のうちの何れかの計算機にてまとめて行ってもよい。
【００２１】
本発明のメモリ共有システム、方法、及び、プログラムでは、前記属性情報の取得では、前記計算機内で前記プログラムのプログラムファイルを一意に識別するために割り当てられた識別子を含むプログラムファイル特定情報に基づいて前記プログラムファイルを特定し、該プログラムファイルの属性情報を取得する構成を採用できる。例えば計算機上で実行されるＯＳがＬｉｎｕｘであれば、ファイルシステムの識別子としてデバイス番号を用い、プログラムファイルに割り当てられた識別子としてｉノード番号を用いることができる。
【００２２】
本発明のメモリ共有システム、方法、及び、プログラムでは、前記メモリ確保要求発生元の計算機の識別子と、前記プログラムファイル特定情報と、前記プログラムＩＤとを対応付けて記憶するプログラムＩＤ記憶部を参照し、前記特定されたプログラムファイルに対応するプログラムＩＤが記憶されているか否かを判断し、前記プログラムＩＤの検索にて前記取得されたプログラムファイルに対応するプログラムＩＤが記憶されていると判断されると、前記プログラムＩＤの生成に代えて、前記プログラムＩＤ記憶部に記憶されたプログラムＩＤを取得する構成を採用できる。この場合、プログラムＩＤ記憶部に、メモリ確保要求元の計算機の識別子及びファイル特定情報に一致するエントリが存在するときには、プログラムＩＤの生成に代えて、プログラムＩＤ記憶部の該当するエントリから、プログラムＩＤを生成する。このようにすることで、プログラムＩＤ記憶部に記憶済みのプログラムＩＤについては、プログラムＩＤの生成を省略できる。
【００２３】
本発明のメモリ共有システム、方法、及び、プログラムでは、前記プログラムＩＤの生成部では、前記プログラムＩＤの検索にて前記属性情報取得手段が取得した属性情報に対応するプログラムＩＤが記憶されていないと判断されると、前記属性情報に基づいて生成したプログラムＩＤを、前記プログラムファイル特定情報と対応付けて前記プログラムＩＤ記憶部に格納する構成を採用できる。この場合、属性情報に基づいて生成したプログラムＩＤを、プログラムＩＤ記憶部に記憶することで、生成済みのプログラムＩＤについては、再度プログラムＩＤを生成する必要がなくなり、プログラムＩＤの生成に要する処理負担を軽減することができる。
【００２４】
本発明のメモリ共有システム、方法、及び、プログラムでは、前記計算機が、実計算機上で実行される複数の仮想計算機を含み、前記メモリ確保手段は、前記プログラムがロードされた、一の仮想計算機に対応したメモリ領域を、複数の仮想計算機間で共有化する処理を行う構成を採用できる。この場合、実計算機上で実行される複数の仮想計算機ごとに、使用するメモリ領域が分割されているときでも、複数の仮想計算機間で、メモリにロードされたプログラムを共有できる。
【００２５】
本発明のメモリ共有システム、方法、及び、プログラムでは、前記計算機が、実計算機、及び、実計算機上で実行される仮想計算機を含み、前記メモリ確保手段は、前記プログラムがロードされた、前記実計算機又は仮想計算機に対応したメモリ領域を、前記実計算機と前記仮想計算機との間で共有化する処理を行う構成を採用できる。この場合、実計算機と、実計算機上で実行される仮想計算機とで、使用するメモリ領域が分割されているときでも、実計算機と仮想計算機とで、メモリにロードされたプログラムを共有できる。
【発明の効果】
【００２６】
メモリ確保要求対象のプログラムのプログラムＩＤがメモリ利用情報記憶部に記憶されているときには、メモリ確保要求対象のプログラムがロードされたメモリ領域を、メモリ確保要求を発生した計算機からも参照可能となるように共有化処理する。このようにすることで、複数の計算機で同一のプログラムが実行されるときに、メモリにロードされるプログラムファイルを複数の仮想計算機間で共有できる。これにより、メモリ使用量を抑えることができ、メモリ資源の有効活用を図ることができる。
【発明を実施するための最良の形態】
【００２７】
以下、図面を参照し、本発明の実施の形態を詳細に説明する。図１は、本発明の第１実施形態のメモリ共有システムの構成を示している。メモリ共有システム１００は、実計算機１０内の仮想計算機Ａ２０及び仮想計算機Ｂ３０と、プログラムにより動作するデータ処理装置４０と、メモリ５０とを備えている。なお、図１では、実計算機１０内で、２つの仮想計算機（仮想計算機Ａ２０、仮想計算機Ｂ３０）が実行される例を示しているが、実計算機１０内で実行される仮想計算機の数は任意であり、３以上の仮想計算機が実行されていてもよい。
【００２８】
仮想計算機Ａ２０は、プログラムにより動作する仮想データ処理装置Ａ２１と、情報を記憶する仮想記憶装置Ａ２２とを有する。仮想データ処理装置Ａ２１は、プログラム実行手段Ａ２１１と、プログラム属性取得手段Ａ２１２と、プログラムＩＤ生成手段Ａ２１３とを有する。仮想記憶装置Ａ２２は、仮想計算機Ａ２０が使用する仮想的な記憶装置であり、実体は実計算機１０の記憶装置内に含まれるデータである。仮想記憶装置Ａ２２には、仮想計算機Ａ２０が使用するファイル類が格納されている。図１では、仮想記憶装置Ａ２２内にプログラムファイルＡ２２１のみを図示しているが、他にも、システム設定ファイル、ドキュメントファイルなど、仮想計算機Ａ２０で使用される様々なファイルが格納されている。
【００２９】
プログラム実行手段Ａ２１１は、指定されたプログラムの実行を行う。また、プログラムファイルＡ２２１をメモリにロードする必要が生じたときには、要求元メモリアドレスと、要求メモリサイズを求めた上で、メモリ確保要求を出す。要求元メモリアドレスとは、プログラム実行時にメモリ確保が必要になったプログラム内のメモリアドレスである。Ｌｉｎｕｘなど、プログラムごとに仮想メモリアドレス空間が用意されるＯＳでは、プログラム実行中にメモリ確保が必要になった仮想メモリアドレスがこれに相当する。或いは、その仮想メモリアドレスに対応する物理メモリアドレスでもよい。プログラムごとに仮想メモリアドレス空間が用意されていないＯＳにおいては、プログラム実行中にメモリアドレスが必要になった物理メモリアドレスがこれに相当する。また、要求メモリサイズとは、プログラムファイルをメモリにロードするために必要なメモリ領域のサイズである。このメモリ確保要求は、逐次、他の構成要素に伝播し、最終的に後述するメモリ確保手段４２にてメモリ共有化又は新規確保の処理が行われることになる。
【００３０】
プログラム属性取得手段Ａ２１２は、メモリ要求発生元プログラムのプログラムファイルの属性情報を取得する。属性情報には、プログラムファイルにユニークな特徴を用いる。例えば、プログラムファイルのファイルサイズやタイムスタンプなどを用いる。プログラムファイルそのものとしてもよい。プログラムＩＤ生成手段Ａ２１３は、プログラム属性取得手段Ａ２１２が取得したプログラムファイルの属性情報を元に、プログラムファイルを一意に識別できる識別子（プログラムＩＤ）を生成する。プログラムＩＤの生成では、例えば属性情報をハッシュ値に変換し、これをプログラムＩＤとする。プログラムファイルが、属性情報として、プログラムファイルを一意に識別するための情報を持つ場合には、その属性情報をそのままプログラムＩＤとしてもよい。
【００３１】
仮想計算機Ｂ３０の構成は、仮想計算機Ａ２０の構成と同様である。すなわち、仮想計算機Ｂ３０は、仮想データ処理装置Ｂ３１と、仮想記憶装置Ｂ３２とを有する。仮想データ処理装置Ｂ３１は、プログラム実行手段Ｂ３１１、プログラム属性取得手段Ｂ３１２、及び、プログラムＩＤ生成手段Ｂ３１３を有し、仮想記憶装置Ｂ３２は、プログラムファイルＢ３２１を有する。図１では、仮想計算機Ａ２０内の構成要素と、仮想計算機Ｂ３０内の構成要素とを区別するために、語尾のＡをＢに置き換えているが、仮想計算機Ｂ３０内の各構成要素の動作は、仮想計算機Ａ２０内の各構成要素の動作と同じである。
【００３２】
ここで、仮想データ処理装置Ａ２１と、仮想データ処理装置Ｂ３１とは、何れも実体は実計算機１０上のデータ処理装置４０である。図１では、仮想計算機Ａ２０と仮想計算機Ｂ３０とに関する動作を明示するために、これらを３つに分割して図示している。また、仮想記憶装置Ａ２２と、仮想記憶装置Ｂ３２とは、何れも実体は実計算機１０上の記憶装置に含まれるデータである。図１では、仮想計算機Ａ２０及び仮想計算機Ｂ３０のそれぞれで使用する記憶装置を明示するために、２つに分割して図示している。
【００３３】
メモリ５０は、実計算機１０における主記憶装置である。メモリ５０は、メモリ利用情報記憶部５１と、仮想計算機Ａ用記憶部５２と、仮想計算機Ｂ用記憶部５３とを備えている。メモリ利用情報記憶部５１は、メモリにロードされたプログラムについて、プログラムＩＤ、要求元メモリアドレス、要求メモリサイズごとに、確保したメモリ領域の先頭メモリアドレス（以下、確保済メモリアドレスと表記）の対応付けを行ったメモリ利用情報を記憶する。仮想計算機Ａ用記憶部５２は、仮想計算機Ａ２０からメモリ確保要求があったときに使用される領域である。仮想計算機Ｂ用記憶部５３は、仮想計算機Ｂ３０からメモリ確保要求があったときに使用される領域である。
【００３４】
データ処理装置４０は、メモリ利用情報検索手段４１と、メモリ確保手段４２と、メモリ利用情報書込み手段４３とを備える。メモリ利用情報検索手段４１は、プログラムＩＤ生成手段Ａ２１３又はプログラムＩＤ生成手段Ｂ３１３で作成されたプログラムＩＤ、要求元メモリアドレス、及び、要求メモリサイズを検索キーとして、メモリ利用情報内に該当するエントリがあるか否かを検索する。メモリ確保手段４２は、メモリ利用情報検索手段４１において該当するエントリがあった場合、エントリに記載されている確保済メモリアドレスから要求メモリサイズ分のメモリ領域を、仮想計算機間で共有可能なメモリ領域となるよう共有化処理を行う。
【００３５】
メモリ利用情報検索手段４１において該当するエントリがなかった場合は、メモリ確保要求として指定された要求メモリサイズ分のメモリ領域を新規に確保し、プログラムファイルを確保したメモリにロードする。その際、メモリ確保要求元が仮想計算機Ａ２０であれば、仮想計算機Ａ用記憶部５２内にプログラムファイルをロードし、メモリ確保要求元が仮想計算機Ｂ３０であれば、仮想計算機Ｂ用記憶部５３内にプログラムファイルをロードする。メモリ利用情報書込み手段４３は、メモリ確保手段４２において新規にメモリ領域を確保した場合に、確保したメモリ領域の先頭メモリアドレスを確保済メモリアドレスとし、要求元メモリアドレス、要求メモリサイズとともに新規エントリとして、メモリ利用情報に書き込む。
【００３６】
図２は、メモリ共有システム１００の動作手順を示している。以下、図２を参照して、仮想計算機Ａ２０上でプログラムファイルＡ２２１を実行したときの動作について説明する。なお、仮想計算機Ｂ３０上でプログラムファイルＢ３２１を実行したときの動作は、プログラム実行手段Ａ２１１をプログラム実行手段Ｂ３１１に、プログラム属性取得手段Ａ２１２をプログラム属性取得手段Ｂ３１２に、プログラムＩＤ生成手段Ａ２１３をプログラムＩＤ生成手段Ｂ３１３に、仮想記憶装置Ａ２２を仮想記憶装置Ｂ３２に、プログラムファイルＡ２２１をプログラムファイルＢ３２１に、それぞれ置き換えれば、以下に説明するプログラムファイルＡ２２１を実行したときの動作と同様である。
【００３７】
仮想計算機Ａ２０のプログラム実行手段Ａ２１１は、プログラムＡの実行要求を受けて、プログラムファイルＡ２２１の実行を開始する（ステップＡ１）。その後、プログラム実行手段Ａ２１１は、プログラムファイルＡ２２１をメモリにロードする必要が生じると、要求元メモリアドレスと、要求メモリサイズを求めた上で、メモリ確保要求を出す（ステップＡ２）。プログラム属性取得手段Ａ２１２は、メモリ確保要求を受け取ると、メモリ要求発生元プログラムに対応するプログラムファイルＡ２２１の属性情報を取得する（ステップＡ３）。プログラムＩＤ生成手段Ａ２１３は、プログラム属性取得手段Ａ２１２からプログラムファイルＡ２２１の属性情報を受け取り、受け取った属性情報に基づいて、プログラムファイルＡ２２１のプログラムＩＤを生成する（ステップＡ４）。
【００３８】
メモリ利用情報検索手段４１は、プログラムＩＤ生成手段Ａ２１３で作成したプログラムＩＤと、要求元メモリアドレス及び要求メモリサイズとを検索キーとして、メモリ利用情報記憶部５１を検索し、メモリ利用情報内に該当するエントリがあるか否かを判断する（ステップＡ５）。該当するエントリが存在しない場合には、メモリ確保手段４２は、メモリ確保要求として指定された要求メモリサイズ分のメモリ領域を、仮想計算機Ａ用記憶部５２内に新規に確保し、確保したメモリ領域にプログラムファイルＡ２２１をロードする（ステップＡ７）。その後、メモリ利用情報書込み手段４３により、確保したメモリ領域の先頭メモリアドレスを確保済メモリアドレスとし、要求元メモリアドレス、要求メモリサイズと共に、新規エントリとして、メモリ利用情報に書き込む（ステップＡ８）。
【００３９】
該当するエントリがあった場合には、メモリ確保手段４２は、メモリ利用情報記憶部５１を参照して、エントリに記載されている確保済メモリアドレスから要求メモリサイズ分のメモリ領域を、共有可能なメモリ領域となるよう共有化処理を行う（ステップＡ６）。この共有化処理では、例えば、仮想計算機Ｂ３０用として確保された仮想計算機Ｂ用記憶部５３内の共有すべきメモリ領域に対するアクセス権限を変更して、仮想計算機Ａ２０からもアクセス可能とし、仮想計算機Ａ２０のアクセスアドレスと実計算機１０でのメモリアドレスとの対応付けなどを行うことで、仮想計算機Ａ２０から、仮想計算機Ｂ用記憶部５３内にロード済みのプログラムファイルＡ２２１にアクセスできるようにする。
【００４０】
本実施形態では、メモリ利用情報検索手段４１により、プログラムＩＤと要求元メモリアドレス、要求メモリサイズとを検索キーとしてメモリ利用情報を検索し、該当するエントリがあった場合には、メモリ確保手段４２が、既に確保されているメモリ領域の共有処理を行う。このようにすることで、複数の仮想計算機間で同じプログラムファイルを実行したときに、メモリにロードされるプログラムファイルを共有することができる。特に、複数の仮想計算機にて同種のＯＳが実行されている場合、個々の仮想計算機上で同じプログラムを実行すると、プログラムＩＤ、要求元メモリアドレス、要求メモリサイズが同じであることが多く、プログラムファイルの共有が促されることになる。
【００４１】
以下、実施例を用いて説明する。図３は、第１実施例のメモリ共有システムの構成を示している。第１実施例では、実計算機１０は、パーソナルコンピュータであり、メモリ５０には、ＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）を用いる。実計算機１０は、Ｌｉｎｕｘが実行される仮想マシンＡ（仮想計算機Ａ２０）と、Ｌｉｎｕｘが実行される仮想マシンＢ（仮想計算機Ｂ３０）とを備えている。仮想マシンＡ２０は、プログラム実行手段Ａ２１１、プログラム属性取得手段Ａ２１２、及び、プログラムＩＤ生成手段Ａ２１３として動作する仮想中央演算装置Ａ（仮想データ処理装置Ａ２１）を有している。仮想マシンＢ３０は、プログラム実行手段Ｂ３１１、プログラム属性取得手段Ｂ３１２、及び、プログラムＩＤ生成手段Ｂ３１３として動作する仮想中央演算装置Ｂ（仮想データ処理装置Ｂ３１）を有している。
【００４２】
仮想記憶装置Ａ２２には、仮想マシンＡ２０にて使用されるファイル類が格納されている。また、仮想記憶装置Ｂ３２には、仮想マシンＢ３０にて使用されるファイル類が格納されている。仮想記憶装置Ａ２２及び仮想記憶装置Ｂ３２には、それぞれＷｅｂサーバプログラムファイル２２２、３２２が記憶される。このＷｅｂサーバプログラムファイル２２２、３２２は、実体は同じプログラムファイルである。Ｗｅｂサーバプログラムファイル２２２、３２２は、仮想記憶装置Ａ２２及び仮想記憶装置Ｂ３２において同じディレクトリに置かれており、何れの仮想記憶装置でも、デバイス番号「２」、ｉノード番号「１００」が割り当てられているものとする。なお、プログラムファイルのデバイス番号とは、Ｌｉｎｕｘ上でプログラムファイルが置かれているファイルシステムの識別子であり、ｉノード番号とは、ファイルシステム内でのプログラムファイルに割り当てられた識別子である。
【００４３】
実計算機１０は、メモリ利用情報検索手段４１、メモリ確保手段４２、及び、メモリ利用情報書込み手段４３として機能する中央演算装置（データ処理装置４０）を有している。また、ＳＤＲＡＭ（メモリ５０）には、メモリ利用情報（メモリ利用情報記憶部５１）と、仮想マシンＡ用メモリ領域（仮想計算機Ａ用記憶部５２）と、仮想マシンＢ用メモリ領域（仮想計算機Ｂ用記憶部５３）とが確保されている。なお、仮想中央演算装置Ａ２１及び仮想中央演算装置Ｂ３１は、何れも実体は実計算機１０上の中央演算装置である。
【００４４】
メモリ利用情報の一例を図４に示す。メモリ利用情報には、メモリ確保要求を出した仮想マシン上のプログラムのプログラムＩＤ、要求元仮想メモリアドレス、要求メモリサイズ、確保した物理メモリアドレスが記憶されている。プログラムＩＤは、プログラムファイルの属性情報に基づいて生成された値であり、ここでは、プログラムファイルのハッシュ値を、プログラムＩＤとして用いている。図４では、メモリ利用情報は２つのエントリを有しているが、これらは、仮想マシンＢ３０上で実行されているＷｅｂサーバプログラムファイル３２２に対応したメモリ利用情報である。
【００４５】
仮想マシンＡ２０でＷｅｂサーバプログラムファイル２２２を実行するときにページフォルトが発生し、Ｗｅｂサーバプログラムの仮想アドレス空間０ｘＡ０００に、０ｘ１０００のサイズのメモリを割り当てる必要がある場合を考える。この場合、プログラム実行手段Ａ２１１は、Ｗｅｂサーバプログラムの仮想アドレス空間でメモリ（ページ）を割り当てる必要がある仮想メモリアドレス「０ｘＡ０００」と、必要なメモリサイズ「０ｘ１０００」とを求めた上で、メモリ確保要求を出す。
【００４６】
プログラム属性取得手段Ａ２１２は、メモリ確保要求を出したプログラムに対応するプログラムファイル、すなわちＷｅｂサーバプログラムファイル２２２のデバイス番号「２」とｉノード番号「１００」とを取得し、取得したデバイス番号とｉノード番号を元にプログラムファイルの属性情報を取得する。プログラムＩＤ生成手段Ａ２１３は、属性情報に基づいて、プログラムファイルのハッシュ値を計算し、プログラムＩＤ「１００００」を生成する。
【００４７】
メモリ利用情報検索手段４１は、プログラムＩＤ生成手段Ａ２１３にて作成されたプログラムＩＤ「１００００」、要求元メモリアドレス「０ｘＡ０００」、及び、要求メモリサイズ「０ｘ１０００」を検索キーとしてメモリ利用情報５１を検索し、メモリ利用情報内に該当するエントリがあるか否かを調べる。この検索では、図４の第１エントリが、検索キーにヒットする。すなわち、仮想マシンＡ用メモリ領域５２にロードしようとしているプログラムが、仮想マシンＢ用メモリ領域５３に既にロードされていることが判明する。この場合、メモリ確保手段４２は、ヒットしたエントリに記載されている物理メモリアドレス「０ｘ１００００」から要求メモリサイズ分「０ｘ１０００」のメモリ領域を、仮想マシンＡからも利用できるよう共有化処理を行う。
【００４８】
メモリ確保手段４２は、メモリ５０を、ページという単位でパーティショニングし、各ページの使用状況の管理、各ページへのアクセス権限の管理、仮想マシンＡ２０及び仮想マシンＢ３０における物理メモリアドレスと実計算機１０における物理メモリアドレスとの対応付けなどを行う。共有化処理では、メモリ利用情報５１の物理アドレスから該当するページを求め、そのページに対して仮想マシンＡ２０からもアクセスできるように、ページのアクセス権限を変更する。その後、そのページを、仮想マシンＡ２０の物理メモリとして割り当てることで、仮想マシンＢ３０用に割り当てられているページを、仮想マシンＡ２０に共有させる。
【００４９】
仮想記憶装置Ａ２２と、仮想記憶装置Ｂ３２とでは、ファイルシステムが異なるため、ディレクトリ構造が同じ場合でも、Ｗｅｂサーバプログラムファイル２２２及びＷｅｂサーバプログラムファイル３２２に対して、異なるデバイス番号及びｉノード番号が割り当てられることがある。しかし、Ｗｅｂサーバプログラムファイル２２２及びＷｅｂサーバプログラムファイル３２２の実体は、同じプログラムファイルであるので、そのプログラムファイルの属性情報に基づいて生成されたプログラムＩＤは同一となる。このように、プログラムファイルに一意に定まるプログラムＩＤを用いることで、複数の仮想計算機間で、メモリにロードされたプログラムファイルを共有できる。
【００５０】
次に、仮想マシンＡ２０上でＷｅｂサーバプログラムファイル２２２を実行中にページフォルトが発生し、Ｗｅｂサーバプログラムの仮想アドレス空間０ｘＢ０００に、０ｘ１０００のサイズのメモリを割り当てる必要がある場合を考える。この場合、プログラム実行手段Ａ２１１は、Ｗｅｂサーバプログラムの仮想アドレス空間でメモリ（ページ）を割り当てる必要がある仮想メモリアドレス「０ｘＢ０００」と、必要なメモリサイズ「０ｘ１０００」とを求めた上で、メモリ確保要求を出す。プログラム属性取得手段Ａ２１２は、メモリ確保要求を出したプログラムのデバイス番号「２」とｉノード番号「１００」とを取得し、プログラムファイルを取得する。
【００５１】
プログラムＩＤ生成手段Ａ２１３は、プログラムファイルを取得し、プログラムファイルのハッシュ値を計算して、プログラムＩＤ「１００００」を生成する。メモリ利用情報検索手段４１は、プログラムＩＤ生成手段Ａ２１３にて生成されたプログラムＩＤ「１００００」、要求元メモリアドレス「０ｘＢ０００」、及び、要求メモリサイズ「０ｘ１０００」を検索キーとしてメモリ利用情報５１を検索する。検索の結果、図４に示すメモリ利用情報には、検索キーにヒットするエントリが存在しないので、メモリ確保手段４２は、メモリ確保要求として指定された要求メモリサイズ「０ｘ１０００」分のメモリ領域を、仮想マシンＡ用メモリ領域５２内に、新規に確保する。
【００５２】
メモリ利用情報書込み手段４３は、メモリ確保手段４２が新規にメモリ領域を確保すると、メモリ利用情報５１に新規エントリを作成し、新規エントリに、プログラムＩＤ「１００００」、要求元メモリアドレス「０ｘＢ０００」、及び、要求メモリサイズ「０ｘ１０００」と、確保された物理メモリの先頭メモリアドレスとを対応付けて記憶する。この場合、別の仮想マシン（仮想マシンＢ３０）から、同じプログラムＩＤ「１００００」、要求元メモリアドレス「０ｘＢ０００」、要求メモリサイズ「０ｘ１０００」のメモリ確保要求があるときには、メモリ確保手段４２により、マシンＡ用メモリ領域５２にロードされたプログラムが共有化処理され、仮想マシンＡ２０用に確保されたメモリ領域が共有化される。
【００５３】
図５は、本発明の第２実施形態のメモリ共有システムの構成を示している。本実施形態のメモリ共有システム１００ａは、プログラムＩＤ生成手段４４が、仮想計算機ではなく実計算機１０に設けられている点で、第１実施形態のメモリ共有システム１００と相違する。その他の構成は、第１実施形態と同様である。また、プログラムＩＤ生成手段４４の動作は、図１におけるプログラムＩＤ生成手段Ａ２１３及びプログラムＩＤ生成手段Ｂ３１３と同様である。
【００５４】
図６は、メモリ共有システム１００ａの動作手順を示している。本実施形態のメモリ共有システムの動作（ステップＢ１〜Ｂ８）は、図２に示す第１実施形態のメモリ共有システムの動作（ステップＡ１〜Ａ８）と同様である。相違点は、ステップＢ４で、実計算機１０内のプログラムＩＤ生成手段４４により、仮想計算機Ａ２０及び仮想計算機Ｂ３０で発生したメモリ確保要求に対応するプログラムファイルのプログラムＩＤを生成する点である。
【００５５】
本実施形態では、プログラムＩＤ生成手段４４が、仮想計算機Ａ２０及び仮想計算機Ｂ３０から共用される構成となっている。このような構成とすることで、仮想計算機に追加すべき機能を減らすことができるという効果が得られる。その他の効果は、第１実施形態と同様である。すなわち、複数の仮想計算機間で同じプログラムファイルを実行したときに、メモリにロードされるプログラムファイルを、複数の計算機間で共有することができる。
【００５６】
以下、実施例を用いて説明する。図７は、第２実施例のメモリ共有システムの構成を示している。第２実施例では、実計算機１０は、パーソナルコンピュータであり、メモリ５０には、ＳＤＲＡＭを用いる。実計算機１０は、Ｌｉｎｕｘが実行される仮想マシンＡ（仮想計算機Ａ２０）と、Ｌｉｎｕｘが実行される仮想マシンＢ（仮想計算機Ｂ３０）とを備えている。仮想マシンＡ２０は、プログラム実行手段Ａ２１１、及び、プログラム属性取得手段Ａ２１２として動作する仮想中央演算装置Ａ（仮想データ処理装置Ａ２１）を有している。仮想マシンＢ３０は、プログラム実行手段Ｂ３１１、及び、プログラム属性取得手段Ｂ３１２として動作する仮想中央演算装置Ｂ（仮想データ処理装置Ｂ３１）を有している。仮想中央演算装置Ａ２１及び仮想中央演算装置Ｂ３１は、何れも実体は実計算機１０上の中央演算装置である。
【００５７】
仮想記憶装置Ａ２２には、仮想マシンＡ２０にて使用されるファイル類が格納されている。また、仮想記憶装置Ｂ３２には、仮想マシンＢ３０にて使用されるファイル類が格納されている。仮想記憶装置Ａ２２及び仮想記憶装置Ｂ３２には、それぞれＷｅｂサーバプログラムファイル２２２、３２２が記憶される。このＷｅｂサーバプログラムファイル２２２、３２２は、実体は同じプログラムファイルである。Ｗｅｂサーバプログラムファイル２２２、３２２は、仮想記憶装置Ａ２２及び仮想記憶装置Ｂ３２において同じディレクトリに置かれており、何れの仮想記憶装置でも、プログラムファイルに対して、デバイス番号「２」、ｉノード番号「１００」が割り当てられているものとする。
【００５８】
実計算機１０は、メモリ利用情報検索手段４１、メモリ確保手段４２、メモリ利用情報書込み手段４３、及び、プログラムＩＤ生成手段４４として機能する中央演算装置（データ処理装置４０）を有している。また、ＳＤＲＡＭ（メモリ５０）には、メモリ利用情報（メモリ利用情報記憶部５１）と、仮想マシンＡ用メモリ領域（仮想計算機Ａ用記憶部５２）と、仮想マシンＢ用メモリ領域（仮想計算機Ｂ用記憶部５３）とが確保されている。メモリ利用情報５１には、図４に示すメモリ利用情報が記憶されている。図４に示すメモリ利用情報の２つのエントリは、仮想マシンＢ３０上で実行されているＷｅｂサーバプログラムファイル３２２に対応したメモリ利用情報である。
【００５９】
仮想マシンＡ２０でＷｅｂサーバプログラムファイル２２２を実行するときにページフォルトが発生し、Ｗｅｂサーバプログラムの仮想アドレス空間０ｘＡ０００に、０ｘ１０００のサイズのメモリを割り当てる必要がある場合を考える。この場合、プログラム実行手段Ａ２１１は、Ｗｅｂサーバプログラムの仮想アドレス空間でメモリ（ページ）を割り当てる必要がある仮想メモリアドレス「０ｘＡ０００」と、必要なメモリサイズ「０ｘ１０００」とを求めた上で、メモリ確保要求を出す。
【００６０】
プログラム属性取得手段Ａ２１２は、メモリ確保要求を出したプログラムのデバイス番号「２」とｉノード番号「１００」とを取得し、プログラムファイルの属性情報を取得する。データ処理装置４０内のプログラムＩＤ生成手段４４は、仮想マシンＡ２０内のプログラム属性取得手段Ａ２１２からの属性情報を受け取り、プログラムファイルのハッシュ値を計算して、プログラムＩＤ「１００００」を生成する。メモリ利用情報検索手段４１は、プログラムＩＤ生成手段４４にて作成されたプログラムＩＤ「１００００」、要求元メモリアドレス「０ｘＡ０００」、及び、要求メモリサイズ「０ｘ１０００」を検索キーとしてメモリ利用情報５１を検索し、メモリ利用情報内に該当するエントリがあるか否かを調べる。
【００６１】
メモリ利用情報検索手段４１が検索を行うと、図４の第１エントリが、検索キーにヒットする。すなわち、仮想マシンＡ用メモリ領域５２にロードしようとしているプログラムが、仮想マシンＢ用メモリ領域５３に既にロードされていることが判明する。この場合、メモリ確保手段４２は、ヒットしたエントリに記載されている物理メモリアドレス「０ｘ１００００」から要求メモリサイズ分「０ｘ１０００」のメモリ領域を、仮想マシンＡからも利用できるよう共有化処理を行う。
【００６２】
図８は、本発明の第３実施形態のメモリ共有システムの構成を示している。本実施形態のメモリ共有システム１００ｂは、図５に示す第２実施形態の構成に加えて、プログラムＩＤ検索手段４５と、プログラムＩＤ書込み手段４６と、プログラムＩＤ記憶部５４とを有する。プログラムＩＤ記憶部５４は、プログラムファイルとプログラムＩＤとの対応を、プログラムＩＤリストとして記憶する。より詳細には、プログラムＩＤ生成手段４４にて生成されたプログラムＩＤと、そのプログラムＩＤに対応するプログラムファイルを特定する情報とを対応付けて記憶する。プログラムファイルを特定する情報には、例えば仮想計算機の識別子とデバイス番号とｉノード番号とを用いる。プログラムＩＤリストは、プログラムＩＤ生成手段４４のキャッシュ機構として機能する。
【００６３】
プログラムＩＤ検索手段４５は、プログラム属性取得手段Ａ２１２又はプログラム属性取得手段Ｂ３１２から、プログラムファイル特定情報を受け取り、受け取ったプログラムファイル特定情報を検索キーとして、プログラムＩＤ記憶部５４に記憶されているプログラムＩＤリストを検索する。該当するエントリが存在しない場合、プログラムＩＤ生成手段４４は、プログラム属性取得手段Ａ２１２又はプログラム属性取得手段Ｂ３１２から取得した属性情報を元にプログラムファイルのプログラムＩＤを生成する。プログラムＩＤ書込み手段４６は、プログラムＩＤ生成手段４４にてプログラムＩＤが生成されると、生成されたプログラムＩＤと、プログラムファイル特定情報とを対応付けて、プログラムＩＤ記憶部５４に、エントリとして格納する。該当するエントリがあった場合は、プログラムＩＤ検索手段４５は、エントリに記載されているプログラムＩＤを取得し、これをプログラムＩＤ生成手段４４に渡す。
【００６４】
図９は、メモリ共有システム１００ｂの動作手順を示している。プログラム実行手段Ａ２１１は、プログラムの実行を行う（ステップＣ１）。プログラム実行手段Ａ２１１は、プログラムファイルＡ２２１をメモリにロードする必要が生じると、要求元メモリアドレスと、要求メモリサイズとを求めた上で、メモリ確保要求を出す（ステップＣ２）。プログラム属性取得手段Ａ２１２は、メモリ要求発生元プログラムのプログラムファイルＡ２２１のプログラムファイル特定情報（デバイス番号、ｉノード番号）を取得した上で、プログラムファイルＡ２２１の属性情報を取得する（ステップＣ３）。ここまでの動作は、図２に示すステップＡ１〜Ａ３までの動作と同様である。
【００６５】
プログラムＩＤ検索手段４５は、プログラム属性取得手段Ａ２１２からプログラムファイル特定情報を受け取り、これを検索キーとして、プログラムＩＤ記憶部５４に記憶されているプログラムＩＤリストを検索する（ステップＣ４）。該当するエントリがあった場合、プログラムＩＤ生成手段４４は、プログラムＩＤ検索手段４５を介して、プログラムＩＤ記憶部５４から該当するエントリのプログラムＩＤを取得する（ステップＣ５）。該当するエントリがなかった場合は、プログラムＩＤ生成手段４４は、プログラム属性取得手段Ａ２１２が取得したプログラムファイルの属性情報を元にプログラムＩＤを生成する（ステップＣ６）。
【００６６】
プログラムＩＤ書込み手段４６は、プログラムＩＤ生成手段４４がプログラムＩＤを生成すると、生成されたプログラムＩＤと、プログラムファイル特定情報とを対応付け、新規エントリとして、メモリ５０内のプログラムＩＤ記憶部５４に書き込む（ステップＣ７）。これにより、次回からは、既にプログラムＩＤが生成されたプログラムファイルに対しては、プログラムＩＤ記憶部５４からプログラムＩＤが取り出されることになる。以降の動作（ステップＣ８〜Ｃ１１）は、図２のステップＡ５〜Ａ８の動作と同様である。
【００６７】
本実施形態では、プログラムＩＤ生成手段４４が生成したプログラムＩＤを、プログラムＩＤ記憶部５４に記憶し、プログラムＩＤ生成手段４４が生成すべきプログラムＩＤがプログラムＩＤ記憶部５４に既に記憶されているときには、それを利用する。このようにすることで、プログラムＩＤ生成手段４４にて、メモリ確保要求が発生するたびにプログラムＩＤを生成する必要がなくなり、プログラムＩＤ生成処理を省略することができる。その他の効果は、第２実施形態と同様である。
【００６８】
以下、実施例を用いて説明する。図１０は、第３実施例のメモリ共有システムの構成を示している。第３実施例では、実計算機１０は、パーソナルコンピュータであり、メモリ５０には、ＳＤＲＡＭを用いる。実計算機１０は、Ｌｉｎｕｘが実行される仮想マシンＡ（仮想計算機Ａ２０）と、Ｌｉｎｕｘが実行される仮想マシンＢ（仮想計算機Ｂ３０）とを備えている。仮想マシンＡ２０は及び仮想マシンＢ３０の構成は、第２実施例と同様である。実計算機１０は、メモリ利用情報検索手段４１、メモリ確保手段４２、メモリ利用情報書込み手段４３、プログラムＩＤ生成手段４４、プログラムＩＤ検索手段４５、及び、プログラムＩＤ書込み手段４６として機能する中央演算装置（データ処理装置４０）を有している。
【００６９】
ＳＤＲＡＭ（メモリ５０）には、メモリ利用情報（メモリ利用情報記憶部５１）、仮想マシンＡ用メモリ領域（仮想計算機Ａ用記憶部５２）、仮想マシンＢ用メモリ領域（仮想計算機Ｂ用記憶部５３）、及び、プログラムＩＤリスト（プログラムＩＤ記憶部５４）が確保されている。プログラムＩＤリスト５４に記憶される情報の一例を図１１に示す。プログラムＩＤリスト５４は、仮想計算機の識別子、デバイス番号、及び、ｉノード番号と、プログラムＩＤとを対応付けて記憶する。
【００７０】
仮想マシンＡ２０でＷｅｂサーバプログラムファイル２２２を実行するときにページフォルトが発生し、Ｗｅｂサーバプログラムの仮想アドレス空間０ｘＡ０００に、０ｘ１０００のサイズのメモリを割り当てる必要がある場合を考える。この場合、プログラム実行手段Ａ２１１は、Ｗｅｂサーバプログラム２２２の仮想アドレス空間でメモリ（ページ）を割り当てる必要がある仮想メモリアドレス「０ｘＡ０００」と、必要なメモリサイズ「０ｘ１０００」とを求めた上で、メモリ確保要求を出す。プログラム属性取得手段Ａ２１２は、プログラムファイル特定情報としてデバイス番号「２」とｉノード番号「１００」と取得した上で、そのプログラムファイルの属性情報を取得する。
【００７１】
プログラムＩＤ検索手段４５は、プログラム属性取得手段Ａ２１２からプログラムファイル特定情報（仮想計算機「Ａ」、デバイス番号「２」、ｉノード番号「１００」）を受け取り、これを検索キーとして、プログラムＩＤリスト５４を検索する。仮想計算機「Ａ」、デバイス番号「２」、ｉノード番号「１００」の検索キーは、図１１に示すプログラムＩＤリスト５４の第１エントリにヒットし、プログラムＩＤ検索手段４５は、第１エントリのプログラムＩＤ「１００００」を取得して、これをプログラムＩＤ生成手段４４に渡す。この場合、プログラムＩＤ生成手段４４は、プログラムＩＤを生成することなく、受け取ったプログラムＩＤを、メモリ利用情報検索手段４１に渡す。
【００７２】
メモリ利用情報検索手段４１は、プログラムＩＤ生成手段４４にて作成されたプログラムＩＤ「１００００」、要求元メモリアドレス「０ｘＡ０００」、及び、要求メモリサイズ「０ｘ１０００」を検索キーとしてメモリ利用情報５１を検索し、メモリ利用情報内に該当するエントリがあるか否かを調べる。検索では、図４の第１エントリが検索キーにヒットし、メモリ確保手段４２は、ヒットしたエントリに記載されている物理メモリアドレス「０ｘ１００００」から要求メモリサイズ分「０ｘ１０００」のメモリ領域を、仮想マシンＡ２０からも利用できるよう共有化処理を行う。
【００７３】
図１２は、本発明の第４実施形態のメモリ共有システムの構成を示している。本実施形態のメモリ共有システム１００ｃは、実計算機１０のデータ処理装置４０が、プログラム実行手段Ｃ４７及びプログラム属性取得手段Ｃ４８を有し、実計算機１０と仮想計算機Ａ２０とで、メモリ５０のロードされたプログラムを共有する点で、図８に示す第３実施形態のメモリ共有システム１００ｂと相違する。プログラム実行手段Ｃ４７及びプログラム属性取得手段Ｃ４８の動作は、それぞれ仮想計算機Ａ２０内のプログラム実行手段Ａ２１１及びプログラム属性取得手段Ａ２１２の動作と同様である。
【００７４】
記憶装置６０は、実計算機１０が使用する外部記憶装置であり、内部には、実計算機１０が使用するファイル類が格納されている。図１２では、プログラムファイルＣ６１のみを図示しているが、この他にも、システム設定ファイルやドキュメントファイルなどの実計算機１０上で使用される様々なファイルが格納されている。メモリ５０は、実計算機用記憶部５５を有する。実計算機用記憶部５５は、実計算機１０が使用するメモリ領域であり、実計算機１０がメモリ確保要求を発生したときに使用される領域である。
【００７５】
図１３は、メモリ共有システム１００ｃの動作手順を示している。本実施形態のメモリ共有システム１００ｃの動作（ステップＤ１〜Ｄ１１）は、第３実施形態のメモリ共有システム１００ｂにおけるプログラム実行手段Ｂ３１１及びプログラム属性取得手段Ｂ３１２を、それぞれプログラム実行手段Ｃ４７及びプログラム属性取得手段Ｃ４８に置き換えて動作させる点、及び、仮想記憶装置Ｂ３２を記憶装置６０に置き換えた点を除いて、第３実施形態における動作（図９のステップＣ１〜Ｃ１１）と同様である。このような動作により、仮想計算機Ａ用記憶部５２と実計算機用記憶部５５との間で、メモリにロードされたプログラムファイルを共有できる。
【００７６】
本実施形態では、メモリ利用情報検索手段４１が、プログラムＩＤ、要求元メモリアドレス、及び、要求メモリサイズを検索キーとしてメモリ利用情報記憶部５１を検索し、該当するエントリがあった場合には、メモリ確保手段４２が、既に確保されているメモリ領域の共有処理を行う。このようにすることで、仮想計算機Ａ２０と実計算機１０間で同じプログラムファイルを実行したときに、メモリにロードされるプログラムファイルを共有することができる。特に、仮想計算機Ａ２０と実計算機１０とで同種のＯＳが実行されている場合、仮想計算機Ａ２０と実計算機１０上で同じプログラムを実行すると、プログラムＩＤ、要求元メモリアドレス、及び、要求メモリサイズが同じであることが多く、プログラムファイルの共有が促されることになる。その他の効果は、第３実施形態と同様である。
【００７７】
以下、実施例を用いて説明する。図１４は、第４実施例のメモリ共有システムの構成を示している。第４実施例では、実計算機１０は、パーソナルコンピュータであり、メモリ５０には、ＳＤＲＡＭを用いる。実計算機１０は、Ｌｉｎｕｘが実行される仮想マシンＡ（仮想計算機Ａ２０）を備えている。仮想マシンＡ２０の構成は、第２実施例と同様である。実計算機１０は、メモリ利用情報検索手段４１、メモリ確保手段４２、メモリ利用情報書込み手段４３、プログラムＩＤ生成手段４４、プログラムＩＤ検索手段４５、プログラムＩＤ書込み手段４６、プログラム実行手段Ｃ４７、プログラム属性取得手段Ｃ４８として機能する中央演算装置（データ処理装置４０）を有している。
【００７８】
ＳＤＲＡＭ（メモリ５０）には、メモリ利用情報（メモリ利用情報記憶部５１）、仮想マシンＡ用メモリ領域（仮想計算機Ａ用記憶部５２）、実計算機用メモリ領域（実計算機用記憶部５５）、及び、プログラムＩＤリスト（プログラムＩＤ記憶部５４）が確保されている。また、記憶装置６０には、実計算機１０で使用されるファイル類が格納されている。記憶装置６０に格納されるＷｅｂサーバプログラムファイル６２と、仮想記憶装置Ａ２２に格納されるＷｅｂサーバプログラムファイル２２２とは、同じＷｅｂサーバのプログラムファイルである。このプログラムファイルは、仮想記憶装置Ａ２２及び記憶装置６０において、同じディレクトリに置かれており、デバイス番号「２」、ｉノード番号「１００」が割り当てられている。
【００７９】
プログラムＩＤリスト５４は、図１１に示すように、プログラムファイルのデバイス番号及びｉノード番号と、生成されたプログラムＩＤとを対応付けて記憶している。また、メモリ利用情報５１には、図４に示すように、プログラムＩＤ、要求元仮想メモリアドレス、要求メモリサイズ、確保した物理メモリアドレスが記憶されている。図４では、メモリ利用情報として２つのエントリが登録されているが、これらは、実計算機１０上で実行されるＷｅｂサーバに割り当てたメモリ領域を示しているものとする。
【００８０】
仮想マシンＡ２０でＷｅｂサーバプログラムファイル２２２を実行するときにページフォルトが発生し、Ｗｅｂサーバプログラムの仮想アドレス空間０ｘＡ０００に、０ｘ１０００のサイズのメモリを割り当てる必要がある場合を考える。この場合、プログラム実行手段Ａ２１１は、Ｗｅｂサーバプログラムの仮想アドレス空間でメモリ（ページ）を割り当てる必要がある仮想メモリアドレス「０ｘＡ０００」と、必要なメモリサイズ「０ｘ１０００」とを求めた上で、メモリ確保要求を出す。プログラム属性取得手段Ａ２１２は、メモリ確保要求を出したプログラムのプログラムファイル特定情報として、デバイス番号「２」とｉノード番号「１００」とを取得し、プログラムファイルの属性情報を取得する。
【００８１】
プログラムＩＤ検索手段４５は、プログラム属性取得手段Ａ２１２からプログラムファイル特定情報（仮想計算機「Ａ」、デバイス番号「２」、ｉノード番号「１００」）を受け取り、これを検索キーとして、プログラムＩＤリスト５４を検索する。この検索キーは、図１１に示すプログラムＩＤリスト５４の第１エントリにヒットし、プログラムＩＤ検索手段４５は、第１エントリのプログラムＩＤ「１００００」を取得して、これをプログラムＩＤ生成手段４４に渡す。この場合、プログラムＩＤ生成手段４４は、自身でプログラムＩＤを生成することなく、受け取ったプログラムＩＤを、メモリ利用情報検索手段４１に渡す。
【００８２】
メモリ利用情報検索手段４１は、プログラムＩＤ生成手段４４にて作成されたプログラムＩＤ「１００００」、要求元メモリアドレス「０ｘＡ０００」、及び、要求メモリサイズ「０ｘ１０００」を検索キーとしてメモリ利用情報５１を検索し、メモリ利用情報内に該当するエントリがあるか否かを調べる。検索では、図４の第１エントリが検索キーにヒットする。メモリ確保手段４２は、ヒットしたエントリに記載されている物理メモリアドレス「０ｘ１００００」から要求メモリサイズ分「０ｘ１０００」のメモリ領域を、仮想マシンＡ２０からも利用できるよう共有化処理を行う。
【００８３】
図１５に、本発明の第５実施形態のメモリ共有システムの構成を示す。本実施形態のメモリ共有システム１００ｄは、第１〜第３実施形態と同様に、仮想データ処理装置Ａ２１、仮想記憶装置Ａ２２、仮想データ処理装置Ｂ３１、仮想記憶装置Ｂ３２、データ処理装置４０、及び、メモリ５０を備える。メモリ共有プログラムＡ７０は、仮想データ処理装置Ａ２１上で実行され、メモリ共有プログラムＢ８０は、仮想データ処理装置Ｂ３１上で実行される。仮想データ処理装置Ａ２１及び仮想データ処理装置Ｂ３１は、それぞれプログラム制御により、第１〜第３実施形態における仮想データ処理装置Ａ２１及び仮想データ処理装置Ｂ３１による処理と同一の処理を実行する。
【００８４】
メモリ共有プログラムＣ９０は、データ処理装置４０上で実行される。データ処理装置４０は、メモリ共有プログラムＣ９０に基づいて動作し、第１〜第３実施形態におけるデータ処理装置４０と同一の処理を行う。メモリ５０に、メモリ利用情報記憶部５１、仮想計算機Ａ用記憶部５２、仮想計算機Ｂ用記憶部５３、及び、プログラムＩＤ記憶部５４を生成する。なお、仮想データ処理装置Ａ２１及び仮想データ処理装置Ｂ３１は、何れも実体は実計算機１０上のデータ処理装置４０の一部である。従って、メモリ共有プログラムＡ７０及びメモリ共有プログラムＢ８０は、データ処理装置４０上に仮想的に実現されたデータ処理装置にて実行されるプログラムである。また、仮想記憶装置Ａ２２及び仮想記憶装置Ｂ３２は、何れも実体は実計算機１０上の記憶装置に含まれるデータである。
【００８５】
図１６は、本発明の第６実施形態のメモリ共有システムの構成を示す。本実施形態のメモリ共有システム１００ｅは、第４実施形態と同様に、仮想データ処理装置Ａ２１、仮想記憶装置Ａ２２、データ処理装置４０、メモリ５０、及び、記憶装置６０とを備える。メモリ共有プログラムＡ７０は、仮想データ処理装置Ａ２１上で実行される。仮想データ処理装置Ａ２１は、プログラム制御により、第４実施形態の仮想データ処理装置Ａ２１による処理と同一の処理を実行する。メモリ共有プログラムＣ９０は、データ処理装置４０上で実行される。データ処理装置４０は、プログラム制御により、第４実施形態のデータ処理装置４０による処理と同一の処理を実行する。また、メモリ５０に、メモリ利用情報記憶部５１、仮想計算機Ａ用記憶部５２、プログラムＩＤ記憶部５４、及び、実計算機用記憶部５５を生成する。
【００８６】
以上、本発明をその好適な実施形態に基づいて説明したが、本発明のメモリ共有システム、方法、及び、プログラムは、上記実施形態にのみ限定されるものではなく、上記実施形態の構成から種々の修正及び変更を施したものも、本発明の範囲に含まれる。
【産業上の利用可能性】
【００８７】
本発明は、１台の実計算機上で複数のＯＳが動作する仮想計算機環境において、異なるＯＳ間でメモリ領域を共有するためのメモリ共有システムや、メモリ共有システムをコンピュータに実現するためのプログラムといった用途に適用できる。
【図面の簡単な説明】
【００８８】
【図１】本発明の第１実施形態のメモリ共有システムの構成を示すブロック図。
【図２】第１実施形態のメモリ共有システムの動作手順を示すフローチャート。
【図３】第１実施例のメモリ共有システムの構成を示すブロック図。
【図４】メモリ利用情報の具体例を示すテーブル。
【図５】本発明の第２実施形態のメモリ共有システムの構成を示すブロック図。
【図６】第２実施形態のメモリ共有システムの動作手順を示すフローチャート。
【図７】第２実施例のメモリ共有システムの構成を示すブロック図。
【図８】本発明の第３実施形態のメモリ共有システムの構成を示すブロック図。
【図９】第３実施形態のメモリ共有システムの動作手順を示すフローチャート。
【図１０】第３実施例のメモリ共有システムの構成を示すブロック図。
【図１１】プログラムＩＤリストの具体例を示すテーブル。
【図１２】本発明の第４実施形態のメモリ共有システムの構成を示すブロック図。
【図１３】第４実施形態のメモリ共有システムの動作手順を示すフローチャート。
【図１４】第４実施例のメモリ共有システムの構成を示すブロック図。
【図１５】本発明の第５実施形態のメモリ共有システムの構成を示すブロック図。
【図１６】本発明の第６実施形態のメモリ共有システムの構成を示すブロック図。
【符号の説明】
【００８９】
１０：実計算機（パーソナルコンピュータ）
２０、３０：仮想計算機（仮想マシン）
２１、３１：仮想データ処理装置（仮想中央演算装置）
２２、３２：仮想記憶装置
４０：データ処理装置（中央演算装置）
４１：メモリ利用情報検索手段
４２：メモリ確保手段
４３：メモリ利用情報書込み手段
４４：プログラムＩＤ生成手段
４５：プログラムＩＤ検索手段
４６：プログラムＩＤ書込み手段
５０：メモリ（ＳＤＲＡＭ）
５１：メモリ利用情報記憶部（メモリ利用情報）
５２、５３：仮想計算機用記憶部（仮想マシン用メモリ領域）
５４：プログラムＩＤ記憶部（プログラムＩＤリスト）
５５：実計算機用記憶部（実計算機用メモリ領域）
６０：記憶装置
７０、８０、９０：メモリ共有プログラム
１００：メモリ共有システム
４７、２１１、３１１：プログラム実行手段
４８、２１２、３１２：プログラム属性取得手段
２１３、３１３：プログラムＩＤ生成手段
６１、２２１、３２１：プログラムファイル
６２、２２２、３２２：Ｗｅｂサーバプログラムファイル
【図１】
2008225620.tif 000003
【図２】
2008225620.tif 000004
【図３】
2008225620.tif 000005
【図４】
2008225620.tif 000006
【図５】
2008225620.tif 000007
【図６】
2008225620.tif 000008
【図７】
2008225620.tif 000009
【図８】
2008225620.tif 000010
【図９】
2008225620.tif 000011
【図１０】
2008225620.tif 000012
【図１１】
2008225620.tif 000013
【図１２】
2008225620.tif 000014
【図１３】
2008225620.tif 000015
【図１４】
2008225620.tif 000016
【図１５】
2008225620.tif 000017
【図１６】
2008225620.tif 000018