(57)【要約】【課題】共有メモリなどメモリ空間の特性を前提としたプログラミングが可能なプラットフォームで設計されたアプリケーションプログラムを他のプラットフォームにプログラム設計を見直すことなく容易に移植することができる、共有メモリ仮想化装置を提供する。【解決手段】特定のアドレス位置を共有メモリと想定して設計されたアプリケーションプログラム１１を、プラットフォーム（実行環境２１）に移植するために、アプリケーションプログラム１１が、所望のメモリリージョンの特性を共有メモリとすることを指定するためのコンフィグレーションレジスタ３１と、コンフィグレーションレジスタ３１により指定される共有メモリのメモリリージョンの論理アドレスを、プラットフォームに固有の共有メモリ５１のメモリリージョンの論理アドレスに変換するアドレス変換ライブラリ４１と、を備える。【選択図】図１
2010262356.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションプログラムが、所望のメモリリージョンの特性を共有メモリとすることを指定するためのコンフィグレーションレジスタと、
前記コンフィグレーションレジスタにより指定される共有メモリのメモリリージョンの論理アドレスを、プラットフォームに固有の共有メモリのメモリリージョンの論理アドレスに変換するアドレス変換ライブラリと、
備え、
前記アプリケーションプログラムが指定する共有メモリのメモリリージョンの特性を、前記プラットフォームおいてエミレートする、
ことを特徴とする共有メモリ仮想化装置。
【請求項２】
前記アプリケーションプログラムにおいて共有メモリとして使用するメモリリージョンの論理アドレス範囲を、前記コンフィグレーションレジスタにより指定する、
ことを特徴とする請求項１に記載の共有メモリ仮想化装置。 
【請求項３】
前記アドレス変換ライブラリは、前記アプリケーションプログラムにより指定される前記論理アドレスと、プラットフォームに固有な共有メモリの割り当て論理アドレスとの差をオフセットとして前記コンフィグレーションレジスタに対して設定する、
ことを特徴とする請求項２に記載の共有メモリ仮想化装置。
【請求項４】
前記アプリケーションプログラムからメモリアクセスが行われた場合に、当該メモリの論理アドレスが、前記コンフィグレーションレジスタに指定された論理アドレス範囲内のアドレス位置である時は、該コンフィグレーションレジスタにおける論理アドレスを、前記オフセットを基にして新たな論理アドレスへの変換を行う論理−論理アドレス変換機能を、
備えることを特徴とする請求項３に記載の共有メモリ仮想化装置。
【請求項５】
アプリケーションプログラムが、コンフィグレーションレジスタに対して、所望のメモリリージョンの特性を共有メモリとすることを指定する手順と、
プラットフォーム内のアドレス変換ライブラリにより、前記コンフィグレーションレジスタにより指定される共有メモリのメモリリージョンの論理アドレスを、プラットフォームに固有の共有メモリのメモリリージョンの論理アドレスに変換する手順と、
を含み、
前記アプリケーションプログラムが指定するメモリリージョンの特性を、前記プラットフォームおいてエミレートする、
ことを特徴とする共有メモリ仮想化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、共有メモリなどメモリ空間の特性を前提としたプログラミングが可能なプラットフォーム上のアプリケーションプログラムを、他のプラットフォームにプログラム設計を見直すことなく移植することができる、共有メモリ仮想化装置、および共有メモリ仮想化方法に関する。
【背景技術】
【０００２】
プログラムを実行するメモリ空間の特性はプラットフォーム（例えば、ＯＳ（Operating System）の種類）毎に異なり、プラットフォームによっては特定のメモリリージョン（メモリ領域）が共有メモリ空間（複数のプログラムが同時に利用できるメモリ空間）に予め割り当てられている場合がある。
【０００３】
このような特定のプラットフォームで動作することを前提におくと、特定のメモリリージョンの特性を利用したアプリケーションプログラムを設計することが可能である。しかしながら、これらプラットフォーム毎のメモリリージョンの特性を前提としたアプリケーションプログラムを他のプラットフォームに移植しようとする場合、プログラムの中核的な設計まで見直す必要が生じるため、異なるプラットフォームへのプログラムの移植は困難となる。
【０００４】
特定のメモリリージョンが共有メモリ空間に割り当てられるプラットフォームで動作するアプリケーションプログラムを、一般的な共有メモリを提供するシステムに移植しようとした場合、従来の方法による共有メモリの取得方法では、ユーザアプリケーションが共有メモリのアドレスマップ位置を指定しても、指定したアドレスにＯＳにより既に別のメモリマップセグメントが割り当てられている場合などに、指定したアドレスに共有メモリが割り当てられないといった問題がある。 
【０００５】
移植しようとするアプリケーションプログラムが共有メモリのアドレスマップ位置として指定したいアドレス位置に対して、ＯＳから別のメモリマップセグメントが割り当てられるのを防ぐ方法は一般的には存在しない。このため、従来は、任意のアドレス域に確実に共有メモリを割り当てられないという問題を回避することは困難であった。
【０００６】
仮想化ＯＳ（1つのＯＳ上で仮想的なＯＳ領域を作り出す方法）などの技術を利用することにより、この問題に対処する場合には、ＯＳインスタンス（仮想ＯＳ）の追加などを検討する必要があり、１つのアプリケーションプログラムの移植や設計の見直し以上の影響を与える。また、ソフトウェアエミュレーションによる本問題の回避は、その構造から実効性能上極めて不利になる事が予測され、事実上、本問題の対策として用いることはできないことが想定される。
【０００７】
これに加えて、移植するアプリケーションの利用する共有メモリと、移植先のプラットフォームで動作している既存のアプリケーションが利用する共有メモリを、同一の共有メモリにする必要がある場合には、従来の仮想化ＯＳや、ソフトウェアエミュレーションでは対処できないといった問題があった。
【０００８】
なお、従来技術の共有メモリ装置インターフェースがある（特許文献１を参照）。この特許文献１の共有メモリ装置インターフェースでは、共有メモリ装置を共有する複数の中央処理装置毎に接続されたインターフェース（共有メモリ装置インターフェース）において、共有メモリのアドレス補正を行うように構成されている。
【０００９】
これに対して、本願発明は、アプリケーションプログラムが特定のアドレス位置を共有メモリと想定して設計されているとき、プラットフォーム側の提供する共有メモリアドレス位置をアプリケーションが期待する特定のアドレス位置として見せられる機能を提供するものであり、共有メモリに固定的なアドレス位置を期待するアプリケーションプログラムの移植性を向上させることを目的とするものである。すなわち、特許文献１の従来技術が提供する機能（共有メモリ装置インターフェース）では、アプリケーションの発生する任意のアドレスへのアクセスを特定のアドレスにオフセットさせるが、共有メモリに固定的なアドレス割り当てを期待するアプリケーションに、それを保障する機能は持たない。本願発明は共有メモリを固定アドレスとして利用したい利用用途を可能とするものであり、本願発明と特許文献１の発明とは、本質的に発明の構成および効果が異なるものである。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開昭５７−１６２０４８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
以上説明したように、プラットフォーム毎のメモリリージョンの特性を前提としたアプリケーションプログラムを他のプラットフォームに移植しようとする場合、プログラムの中核的な設計まで見直す必要が生じるため、異なるプラットフォームへの移植は困難であった。
【００１２】
本発明は上記実情に鑑みなされたものであり、本発明の目的は、共有メモリなどメモリ空間の特性を前提としたプログラミングが可能なプラットフォーム上のアプリケーションプログラムを、他のプラットフォームにプログラム設計を見直すことなく容易に移植することができる、共有メモリ仮想化装置、および共有メモリ仮想化方法を提供することにある。
【課題を解決するための手段】
【００１３】
本発明は上記課題を解決するためになされたものであり、本発明の共有メモリ仮想化装置は、アプリケーションプログラムが、所望のメモリリージョンの特性を共有メモリとすることを指定するためのコンフィグレーションレジスタと、前記コンフィグレーションレジスタにより指定される共有メモリのメモリリージョンの論理アドレスを、プラットフォームに固有の共有メモリのメモリリージョンの論理アドレスに変換するアドレス変換ライブラリと、を備え、前記アプリケーションプログラムが指定する共有メモリのメモリリージョンの特性を、前記プラットフォームおいてエミレートする、ことを特徴とする。
【００１４】
また、本発明の共有メモリ仮想化方法は、アプリケーションプログラムが、コンフィグレーションレジスタに対して、所望のメモリリージョンの特性を共有メモリとすることを指定する手順と、プラットフォーム内のアドレス変換ライブラリにより、前記コンフィグレーションレジスタにより指定される共有メモリのメモリリージョンの論理アドレスを、プラットフォームに固有の共有メモリのメモリリージョンの論理アドレスに変換する手順と、を含み、前記アプリケーションプログラムが指定するメモリリージョンの特性を、前記プラットフォームおいてエミレートする、ことを特徴とする。
【発明の効果】
【００１５】
本発明の共有メモリ仮想化装置および共有メモリ仮想化方法によれば、共有メモリなどメモリ空間の特性を前提としたプログラミングが可能なプラットフォーム上のアプリケーションプログラムを、他のプラットフォームにプログラム設計を見直すことなく移植できる。このため、プラットフォーム間におけるアプリケーションプログラムの移植が容易に行える。
【図面の簡単な説明】
【００１６】
【図１】本発明の共有メモリ仮想化装置の全体構成を示す図である。
【図２】論理−論理アドレス変換の手順を示す図である。
【図３】論理−論理アドレス変換の演算の例を示す図である。
【発明を実施するための形態】
【００１７】
（概要）
例えば、論理アドレス「０ｘ８０００００００」番地から論理アドレス「０ｘ８ＦＦＦＦＦＦＦ」番地の間に、固定的に共有メモリが割り当てられるプラットフォームにおいて動作させるアプリケーションプログラムは、共有メモリの取得リクエストを発行すると、共有メモリの割り当てが論理メモリ空間上のどこに割り当てられたかの参照を行うことなく、論理アドレス「０ｘ８０００００００番地〜論理アドレス０ｘ８ＦＦＦＦＦＦＦ番地」のメモリアクセスはすべて、共有メモリへのアクセスであるとして、設計することができる。
【００１８】
このように固定的に共有メモリが割り当てられるプラットフォームにおけてプログラムを構成するモジュール間では、一般的なプラットフォームでは必要となる共有メモリが割り当てられたアドレスを都度参照するようなプログラム構造は不要であり、論理アドレス「０ｘ８０００００００番地」へのメモリアクセスを、自由に設計したデータ構造体に型変換するだけで、ローカルなヒープ領域に割り当てた特定のデータ構造のように、共有メモリを利用することができる。
【００１９】
本発明の共有メモリ仮想化装置では、固定的に共有メモリが割り当てられるプラットフォームで設計されたアプリケーションプログラムを、他のプラットフォームへ容易に移植することができる共有メモリ仮想化装置を提供するものである。
【００２０】
（本発明の共有メモリ仮想化装置の全体構成の説明）
図１は、本発明の共有メモリ仮想化装置の全体構成を示す図である。
図１に示すように、移植しようとするアプリケーションプログラム１１は、共有メモリが、論理アドレス「０ｘ８０００００００番地〜論理アドレス０ｘ８ＦＦＦＦＦＦＦ番地」の間に、固定的に割り当てられる他のプラットフォームで動作することを前提として設計されたアプリケーションプログラムである。
【００２１】
このアプリケーションプログラム１１を、本発明の共有メモリ仮想化装置の実行環境（プラットフォーム）２１上に読み込むと、このアプリケーションプログラム１１に対応するメモリ空間は、アドレス変換ライブラリ４１によりアドレスマップされ、アプリケーションプログラムのメモリ空間１２に示すような配置となる。
【００２２】
このアプリケーションプログラム１１を、本発明の共有メモリ仮想化装置で動作させるには、実行環境（プラットフォーム）２１上で、どのような共有メモリの環境をエミュレート（擬似的に実現）するかを指定するコンフィグレーションレジスタ３１に次の設定を行う。
【００２３】
コンフィグレーションレジスタ３１内のリージョンタイプ３２には「共有メモリ」であることを指定し、論理アドレス位置３３にはエミュレートするプラットフォームの共有メモリアドレス域の位置「０ｘ８０００００００〜０ｘ８ＦＦＦＦＦＦＦ」を指定する。 
【００２４】
すなわち、コンフィグレーションレジスタ３１の設定は、
「リージョンタイプ３２＞＞共有メモリ」、「論理アドレス位置３３＞＞０ｘ８０００００００−０ｘ８ＦＦＦＦＦＦＦ」、となる。
【００２５】
そして、コンフィグレーションレジスタ３１が設定された実行環境２１上で、アプリケーションプログラム１１を動作させる。なお、このコンフィグレーションレジスタ３１おける設定を、有効／無効に切り替える手段（図示せず）を設けるようにすることもできる。
【００２６】
アプリケーションプログラム１１における共有メモリの取得リクエストは、アドレス変換ライブラリ４１の共有メモリ取得機能４２を呼び出す。アプリケーションプログラム１１からの共有メモリ取得リクエストをうけたアドレス変換ライブラリ４１は、一般的なシステムの共有メモリ５１の取得を実施し、不特定のアドレス上の共有メモリ５１の割り当てを受ける。
【００２７】
一般的な共有メモリ５１の割り当てが「０ｘ1０００００００番地〜０ｘ1ＦＦＦＦＦＦＦ番地」に行われた場合、コンフィグレーションレジスタ３１に設定された共有メモリの論理アドレス位置３３に設定された値から、アプリケーションプログラム１１が行う論理アドレス「０ｘ８０００００００〜０ｘ８ＦＦＦＦＦＦＦ間」のメモリアクセスを、「−０ｘ7００００００分」だけオフセットさせることで、一般的な共有メモリ５１の割り当てによる共有メモリアクセスに置き換えられる。従ってアドレス変換ライブラリ４１は、本オフセット量「−０ｘ7０００００００」をコンフィグレーションレジスタ３１のオフセット３４に設定する。
【００２８】
このため、コンフィグレーションレジスタ３１の設定は、
「リージョンタイプ３２＞＞共有メモリ」、「論理アドレス位置３３＞＞０ｘ８０００００００−０ｘ８ＦＦＦＦＦＦＦ」、「オフセット＞＞−０ｘ7０００００００」、となる。 
【００２９】
アプリケーションプログラム１１のメモリアクセスはコンフィグレーションレジスタ３１の設定が行われていれば、論理アドレスの変換を行う論理−論理アドレス変換機能６１を介在して、アドレス変換を行うことができる。すなわち、論理−論理アドレス変換機能６１は、アプリケーションプログラム１１がメモリアクスを行う場合に、コンフィグレーションレジスタ３１の設定を参照し、メモリアクセス位置が論理アドレス位置３３に該当すれば、オフセット３４をメモリアクセス位置に加算する。 
【００３０】
図２は、本発明の共有メモリ仮想化装置における「論理−論理アドレス変換」の手順を示す図であり、コンフィグレーションレジスタ３１の設定が有効な場合の、アプリケーションプログラム１１からのメモリアクセスの手順を示す図である。
【００３１】
図２に示すように、アプリケーションプログラム１１からのメモリアクセスが行われた場合に、コンフィグレーションレジスタ３１が参照され、論理アドレスの開始位置が「０ｘ８０００００００番地」以上かどうかが判定される（ステップＳ１１）。そして、論理アドレスの開始位置が「０ｘ８０００００００番地」以上でないと判定された場合は（ステップＳ１１：Ｎｏ）、アドレス変換は行われない（ステップＳ１４）。
【００３２】
一方、ステップＳ１１において、論理アドレスの開始位置が「０ｘ８０００００００番地」以上であると判定された場合は（ステップＳ１１：Ｙｅｓ）、ステップＳ１２に移行し、論理アドレスの終了位置が「０ｘ８ＦＦＦＦＦＦＦ番地」以下であるかどうかが判定される。
【００３３】
ステップＳ１２において、論理アドレスの終了位置が「０ｘ８ＦＦＦＦＦＦＦ番地」以下であると判定された場合は（ステップＳ１２：Ｙｅｓ）、コンフィグレーションレジスタ３１のオフセット３４を基に、論理−論理アドレス変換機能６1によりアドレス変換が行われる（ステップＳ１３）。また、ステップＳ１２において、論理アドレスの終了位置が「０ｘ８ＦＦＦＦＦＦＦ番地」以下でないと判定された場合は（ステップＳ１２：Ｎｏ）、アドレス変換は行われない（ステップＳ１４）。
【００３４】
また、図３は、論理−論理アドレス変換機能６1における論理−論理アドレス変換の演算の例を示す図である。図３に示すように、論理−論理アドレス変換機能６１により、論理−論理アドレス変換の演算が行われる場合は、アプリケーションプログラム１１のメモリアクセス番地に対しオフセット「−０ｘ７０００００００」が加算されて、変換後のメモリアクセス番地が算出される。
【００３５】
このように、アプリケーションプログラム１１のメモリアクセスにおいて、アクセスするメモリアドレスが「０ｘ８０００００００番地〜０ｘ８ＦＦＦＦＦＦＦ番地」の間である場合には、アプリケーションプログラム１１のアクセスする論理メモリ番地から、実際のプラットフォーム上の論理メモリ番地に変換（論理−論理アドレス変換機能６１により変換）を行うことで、アプリケーションプログラム１１の設計の変更を行うことなく、プラットフォーム間の移植を行うことが可能となる。 
【００３６】
また、共有メモリを割り付けるアドレス位置を予め予約する使い方が可能であるため、アプリケーションプログラム１１からは確実に共有メモリを任意の固定アドレス位置に設定することができる。このため、従来のプラットフォーム固有の特性を前提とした、特定の固定アドレス位置を共有メモリの割り当てアドレスとしているプログラムのプラットフォーム間移植性を格段に向上することができる。なお、上述の論理−論理アドレス変換機能６１をハードウェア上に実装することで、論理−論理アドレス変換を実行する際の負荷を低減させることが可能になる。 
【００３７】
以上説明したように、本発明の共有メモリ仮想化装置においては、論理アドレスを別の論理アドレスに変換する機能により、アプリケーションプログラムのメモリリージョン毎に、プラットフォームのメモリリージョンの特性をエミュレート可能とし、プラットフォーム間の移植が容易なプログラム実行環境を提供する。 
【００３８】
また、プロセス単位でのプラットフォーム特性のエミュレーションを行うことができるため、仮想化ＯＳの導入などに比較し、高いポータビリティ（異なる環境への移植のし易さ）を提供する事ができ、実行効率上の負荷を小さくおさえることができる。
【００３９】
また、本発明の共有メモリ仮想化装置では、論理アドレスを別の論理アドレスに変換するための手段を有することにより、ＯＳインスタンスの追加を行う必要がある仮想化ＯＳ環境や、ソフトウェアエミュレーション環境と異なり、移植するアプリケーションプログラムが既存のアプリケーションと同じ共有メモリをアクセスできる点で、移植するプログラムと移植先のプラットフォームで動作するアプリケーションの間に、親和性の高い実行環境を提供できる。
【００４０】
このように、本発明の共有メモリ仮想化装置では、共有メモリなどメモリ空間の特性を前提としたプログラミングが可能なプラットフォーム上のプラグラムを、他のプラットフォームにプログラム設計を見直すことなく移植できる。このため、プラットフォーム間のプログラムの移植が容易にできる。
【００４１】
以上、本発明の実施の形態について説明したが、本発明の共有メモリ仮想化装置は、上述の図示例にのみ限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変更を加え得ることは勿論である。
【符号の説明】
【００４２】
１１・・・アプリケーションプログラム、１２・・・アプリケーションプログラムのメモリ空間、２１・・・実行環境（プラットフォーム）、３１・・・コンフィグレーションレジスタ、３２・・・リージョンタイプ、３３・・・論理アドレス位置、３４・・・オフセット、４１・・・アドレス変換ライブラリ、４２・・・共有メモリ取得機能、５１・・・シシテムの共有メモリ、６１・・・論理−論理アドレス変換機能
【図１】
2010262356.tif 000003
【図２】
2010262356.tif 000004
【図３】
2010262356.tif 000005