(57)【要約】【課題】共有メモリに対しプロセッサの通常の読み書き命令と同等の粒度でのアクセスを可能にし、かつ、適切なアクセス制御も可能にする。【解決手段】利用請求処理部は、プログラムの識別子と認証情報を含む利用請求を受信すると、ＩＤ管理情報とアクセス権限管理情報に基づいて利用請求の妥当性を判断し、利用請求が妥当な場合にアクセスキーを生成して、そのアクセスキーを利用可能なアドレス範囲と対応付けてアクセスキー管理情報に登録するとともに、利用請求の送信元に返信する。読み書き要求処理部は、データの読み出しもしくは書き込みを行うアドレスとアクセスキーを含む読み書き要求を受信すると、アクセスキー管理情報に基づいて読み書き要求の妥当性を判断し、読み書き要求が妥当な場合に読み書き要求に応じて共有メモリに対するデータの読み出しもしくは書き込みを実行する。【選択図】図６
2018156289.tif 000002
【特許請求の範囲】
【請求項１】
共有メモリに対するアクセスを制御する共有メモリコントローラであって、
前記共有メモリを利用するプログラムの識別子と認証情報とを対応付けたＩＤ管理情報と、アドレス範囲と該アドレス範囲へのアクセスが許可されたプログラムの識別子とを対応付けたアクセス権限管理情報と、アドレス範囲と該アドレス範囲内のアドレスにアクセスするためのアクセスキーとを対応付けたアクセスキー管理情報と、を記憶する記憶部と、
プログラムの識別子と認証情報とを含む利用請求を受信すると、前記ＩＤ管理情報および前記アクセス権限管理情報に基づいて前記利用請求の妥当性を判断し、前記利用請求が妥当な場合にアクセスキーを生成して、生成したアクセスキーを利用可能なアドレス範囲と対応付けて前記アクセスキー管理情報に登録するとともに、生成したアクセスキーと利用可能なアドレス範囲を前記利用請求の送信元に返信する利用請求処理部と、
データの読み出しもしくは書き込みを行うアドレスとアクセスキーとを含む読み書き要求を受信すると、前記アクセスキー管理情報に基づいて前記読み書き要求の妥当性を判断し、前記読み書き要求が妥当な場合に前記読み書き要求に応じて前記共有メモリに対するデータの読み出しもしくは書き込みを実行する読み書き要求処理部と、
を備える共有メモリコントローラ。
【請求項２】
前記利用請求は、利用したいアドレスの指定または利用したいメモリ量の指定をさらに含み、
前記利用請求処理部は、
利用したいアドレスの指定を含む前記利用請求を受信した場合は、前記利用請求に含まれるプログラムの識別子と認証情報との組み合わせが前記ＩＤ管理情報に登録されており、かつ、前記利用請求で指定されたアドレスが、前記利用請求に含まれるプログラムの識別子と対応付けて前記アクセス権限管理情報に登録されたアドレス範囲に含まれる場合に前記利用請求が妥当であると判断し、該アドレス範囲を利用可能なアドレス範囲として前記アクセスキーとともに前記利用請求の送信元に返信し、
利用したいメモリ量の指定を含む前記利用請求を受信した場合は、前記利用請求に含まれるプログラムの識別子と認証情報との組み合わせが前記ＩＤ管理情報に登録されている場合に前記利用請求が妥当であると判断し、新規に設定したアドレス範囲と前記利用請求に含まれるプログラムの識別子とを対応付けて前記アクセス権限管理情報に登録するとともに、新規に設定したアドレス範囲を利用可能なアドレス範囲として前記アクセスキーとともに前記利用請求の送信元に返信する
請求項１に記載の共有メモリコントローラ。
【請求項３】
前記利用請求は、予定しているアクセスのタイプを示す追加情報をさらに含み、
前記利用請求処理部は、前記利用請求に含まれる前記追加情報に基づいて、新規に設定するアドレス範囲を決定する
請求項２に記載の共有メモリコントローラ。
【請求項４】
前記読み書き要求は、データを読み書きするアドレスとしてアドレス範囲を含む
請求項１乃至３のいずれか一項に記載の共有メモリコントローラ。
【請求項５】
前記共有メモリは、不揮発性メモリである
請求項１乃至４のいずれか一項に記載の共有メモリコントローラ。
【請求項６】
共有メモリと、前記共有メモリに対するアクセスを制御する共有メモリコントローラと、を備える共有メモリモジュールであって、
前記共有メモリコントローラは、
前記共有メモリを利用するプログラムの識別子と認証情報とを対応付けたＩＤ管理情報と、アドレス範囲と該アドレス範囲へのアクセスが許可されたプログラムの識別子とを対応付けたアクセス権限管理情報と、アドレス範囲と該アドレス範囲内のアドレスにアクセスするためのアクセスキーとを対応付けたアクセスキー管理情報と、を記憶する記憶部と、
プログラムの識別子と認証情報とを含む利用請求を受信すると、前記ＩＤ管理情報および前記アクセス権限管理情報に基づいて前記利用請求の妥当性を判断し、前記利用請求が妥当な場合にアクセスキーを生成して、生成したアクセスキーを利用可能なアドレス範囲と対応付けて前記アクセスキー管理情報に登録するとともに、生成したアクセスキーと利用可能なアドレス範囲を前記利用請求の送信元に返信する利用請求処理部と、
データの読み出しもしくは書き込みを行うアドレスとアクセスキーとを含む読み書き要求を受信すると、前記アクセスキー管理情報に基づいて前記読み書き要求の妥当性を判断し、前記読み書き要求が妥当な場合に該読み書き要求に応じて前記共有メモリに対するデータの読み出しもしくは書き込みを実行する読み書き要求処理部と、を備える
共有メモリモジュール。
【請求項７】
複数のサーバと、前記複数のサーバにより共有される共有メモリモジュールとを備えるメモリ共有システムであって、
前記複数のサーバの各々は、プログラムを実行するプロセッサと、プログラムによる前記共有メモリの利用を制御するサーバコントローラと、を備え、
前記共有メモリモジュールは、共有メモリと、前記共有メモリに対するアクセスを制御する共有メモリコントローラと、を備え、
前記サーバコントローラは、
キー管理情報を記憶するサーバ側記憶部と、
前記プロセッサが実行するプログラムの要求に応じて、プログラムの識別子と認証情報とを含む利用請求を前記共有メモリモジュールに送信し、前記共有メモリモジュールからアクセスキーと利用可能なアドレス範囲とを受信すると、受信したアクセスキーと利用可能なアドレス範囲とを対応付けて前記キー管理情報に登録するサーバ側利用請求処理部と、
前記プロセッサが実行するプログラムの要求に応じて、データの読み出しもしくは書き込みを行うアドレスと、該アドレスを含むアドレス範囲に対応付けて前記キー管理情報に登録されたアクセスキーとを含む読み書き要求を前記共有メモリモジュールに送信するサーバ側読み書き要求処理部と、を備え、
前記共有メモリコントローラは、
前記共有メモリを利用するプログラムの識別子と認証情報とを対応付けたＩＤ管理情報と、アドレス範囲と該アドレス範囲へのアクセスが許可されたプログラムの識別子とを対応付けたアクセス権限管理情報と、アドレス範囲と該アドレス範囲内のアドレスにアクセスするためのアクセスキーとを対応付けたアクセスキー管理情報と、を記憶する共有メモリ側記憶部と、
前記複数のサーバのいずれかから、前記利用請求を受信すると、前記ＩＤ管理情報および前記アクセス権限管理情報に基づいて前記利用請求の妥当性を判断し、前記利用請求が妥当な場合にアクセスキーを生成して、生成したアクセスキーを利用可能なアドレス範囲と対応付けて前記アクセスキー管理情報に登録するとともに、生成したアクセスキーと利用可能なアドレス範囲を前記利用請求の送信元であるサーバに返信する共有メモリ側利用請求処理部と、
前記複数のサーバのいずれかから、前記読み書き要求を受信すると、前記アクセスキー管理情報に基づいて前記読み書き要求の妥当性を判断し、前記読み書き要求が妥当な場合に該読み書き要求に応じて前記共有メモリに対するデータの読み出しもしくは書き込みを実行する共有メモリ側読み書き要求処理部と、を備える
メモリ共有システム。
【請求項８】
前記共有メモリ側利用請求処理部は、第１サーバがデータを読み出した前記共有メモリのアドレス範囲と同じアドレス範囲を指定した前記利用請求を第２サーバから受信し、該利用請求が妥当であると判断した場合に、生成したアクセスキーと前記アドレス範囲と前記第１サーバのアドレスを前記第２サーバに返信するとともに、生成したアクセスキーと前記アドレス範囲と前記第２サーバからのアクセスを受け付ける指示を前記第１サーバに送信し、
前記第２サーバの前記サーバ側利用請求処理部は、前記共有メモリモジュールからアクセスキーと前記アドレス範囲と前記第１サーバのアドレスを受信した場合に、受信したアクセスキーと前記アドレス範囲と前記第１サーバのアドレスとを対応付けて前記キー管理情報に登録し、
前記第２サーバの前記サーバ側読み書き要求処理部は、データの読み出しもしくは書き込みを行うアドレスが含まれるアドレス範囲に対応付けて前記第１サーバのアドレスが前記キー管理情報に登録されている場合は、前記読み書き要求を前記第１サーバに送信する
請求項７に記載のメモリ共有システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、共有メモリコントローラ、共有メモリモジュールおよびメモリ共有システムに関する。
【背景技術】
【０００２】
近年、ＳＣＭ（Storage  Class  Memory）と呼ばれる技術の研究開発が進められ、この技術を適用したＳＣＭデバイスが登場しつつある。ＳＣＭデバイスは、コンピュータのメインメモリとして用いられるＤＲＡＭ（Dynamic  Random  Access  Memory）などのメモリと、ＳＳＤ（Solid  State  Drive）やＨＤＤ（Hard  Disk  Drive）などのストレージとの中間的な性質を持つ高速大容量の不揮発性メモリである。ＳＣＭデバイスを複数のサーバで共有できれば、サーバ単体のＤＲＡＭより巨大なメモリとして活用できる可能性がある。
【０００３】
ストレージをネットワークで接続してデータを保存し、複数のサーバで共有することは既に行われている運用である。その場合、ストレージ上で共有されるデータへのアクセス権限の管理を適切に行わないと、予期しないデータの損失や、秘密情報の漏洩などが簡単に起こり得る。そこで、従来は、ファイルシステム上のパーミッション機能などを用いて、アクセス権限管理などが行われている。
【０００４】
共有メモリとしてＳＣＭデバイスを用いる場合、ＳＣＭデバイスの特徴、すなわち高速性とアクセス粒度の細かさ（バイト単位）を利用しないと、その真価を発揮できない。具体的には、ストレージのようにオーバーヘッドの大きいファイルＩＯで読み書きを行うのではなく、プロセッサの通常の読み書き命令、例えばＣＰＵ（Central  Processing  Unit）で言えばＬｏａｄ／Ｓｔｏｒｅ命令と同等の粒度でアクセスする手段を提供しなければ、アクセスオーバーヘッドが回避できない。したがって、ネットワーク接続でファイルシステムを提供するような従来の仕組みではその期待に答えることができず、新たな仕組みの構築が望まれている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−４１２０号公報
【特許文献２】特開２００８−１２３０３１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明が解決しようとする課題は、共有メモリに対しプロセッサの通常の読み書き命令と同等の粒度でのアクセスを可能にし、かつ、適切なアクセス制御も可能にする共有メモリコントローラ、共有メモリモジュールおよびメモリ共有システムを提供することである。
【課題を解決するための手段】
【０００７】
実施形態のメモリコントローラは、共有メモリに対するアクセスを制御する共有メモリコントローラであって、記憶部と、利用請求処理部と、読み書き要求処理部と、を備える。記憶部は、前記共有メモリを利用するプログラムの識別子と認証情報とを対応付けたＩＤ管理情報と、アドレス範囲と該アドレス範囲へのアクセスが許可されたプログラムの識別子とを対応付けたアクセス権限管理情報と、アドレス範囲と該アドレス範囲内のアドレスにアクセスするためのアクセスキーとを対応付けたアクセスキー管理情報と、を記憶する。利用請求処理部は、プログラムの識別子と認証情報とを含む利用請求を受信すると、前記ＩＤ管理情報および前記アクセス権限管理情報に基づいて前記利用請求の妥当性を判断し、前記利用請求が妥当な場合にアクセスキーを生成して、生成したアクセスキーを利用可能なアドレス範囲と対応付けて前記アクセスキー管理情報に登録するとともに、生成したアクセスキーと利用可能なアドレス範囲を前記利用請求の送信元に返信する。読み書き要求処理部は、データの読み出しもしくは書き込みを行うアドレスとアクセスキーとを含む読み書き要求を受信すると、前記アクセスキー管理情報に基づいて前記読み書き要求の妥当性を判断し、前記読み書き要求が妥当な場合に前記読み書き要求に応じて前記共有メモリに対するデータの読み出しもしくは書き込みを実行する。
【図面の簡単な説明】
【０００８】
【図１】実施形態に係るメモリ共有システムの概略構成を示すブロック図。
【図２】サーバコントローラの構成例を示すブロック図。
【図３】キー管理テーブルの一例を示す図。
【図４】利用請求のデータ構造の一例を示す図。
【図５】読み書き要求のデータ構造の一例を示す図。
【図６】共有メモリコントローラの構成例を示すブロック図。
【図７】ＩＤ管理テーブルの一例を示す図。
【図８】アクセス権限管理テーブルの一例を示す図。
【図９】アクセスキー管理テーブルの一例を示す図。
【図１０】サーバコントローラの利用請求処理部による処理手順の一例を示すフローチャート。
【図１１】サーバコントローラの読み書き要求処理部による処理手順の一例を示すフローチャート。
【図１２】共有メモリコントローラの利用請求処理部による処理手順の一例を示すフローチャート。
【図１３】共有メモリコントローラの読み書き要求処理部による処理手順の一例を示すフローチャート。
【図１４】利用請求のデータ構造の一例を示す図。
【図１５】読み書き要求のデータ構造の一例を示す図。
【図１６】貸出テーブルの一例を示す図。
【図１７】拡張キー管理テーブルの一例を示す図。
【図１８】受付用キー管理テーブルの一例を示す図。
【図１９】第２実施形態の動作例を示すシーケンス図。
【図２０】サーバコントローラの利用請求処理部による処理手順の一例を示すフローチャート。
【図２１】サーバコントローラの読み書き要求処理部による処理手順の一例を示すフローチャート。
【図２２】サーバコントローラの読み書き要求処理部による処理手順の一例を示すフローチャート。
【図２３】共有メモリコントローラの利用請求処理部による処理手順の一例を示すフローチャート。
【発明を実施するための形態】
【０００９】
以下、添付図面を参照して、実施形態の共有メモリコントローラ、共有メモリモジュールおよびメモリ共有システムについて詳しく説明する。なお、以下の説明において、同様の機能を持つ構成要素については同一の符号を付して、重複した説明を適宜省略する。
【００１０】
＜実施形態の概要＞
本実施形態では、複数のサーバにより共有される共有メモリモジュールと、共有メモリモジュールを利用する各サーバに対して、それぞれコントローラを配置する。以下、各サーバに配置するコントローラを「サーバコントローラ」と呼び、共有メモリモジュールに配置するコントローラを「共有メモリコントローラ」と呼ぶ。これらサーバコントローラと共有メモリコントローラは、サーバのプロセッサ（例えばＣＰＵ）と共有メモリモジュールとの間の通信の仲介を行う。
【００１１】
サーバのプロセッサによりＯＳ（Operating  System）上で実行されるアプリケーションプログラム（以下、単に「プログラム」と呼ぶ）が共有メモリモジュール内の共有メモリにアクセスする場合、サーバコントローラは、まず、共有メモリモジュールに対して利用請求を送信する。共有メモリコントローラは、この利用請求に含まれる情報に基づいてプログラムの認証やアクセス権限の確認などを行い、利用請求が妥当であれば一時的なアクセスキーを生成してサーバに返す。その後、サーバコントローラは、プロセッサが発行する通常の読み書き命令（例えばＣＰＵからのＬｏａｄ／Ｓｔｏｒｅ命令）にアクセスキーを付与した読み書き要求を共有メモリモジュールに送信する。そして、共有メモリコントローラは、アクセスキーに基づいてアクセス権限を確認し、サーバからの読み書き要求が妥当であれば、読み書き要求に応じて共有メモリモジュールに期待される動作を実施する。これによって、サーバはプログラムの実行時にプロセッサの通常の読み書き命令という非常に細かな粒度で共有メモリにアクセスすることができ、なおかつ共有メモリモジュール側では、適切なアクセス制御を行うことができる。
【００１２】
＜第１実施形態＞
図１は、本実施形態に係るメモリ共有システムの概略構成を示すブロック図である。メモリ共有システムは、図１に示すように、共有メモリモジュール１０に対し、この共有メモリモジュール１０を共有する複数のサーバ２０が通信可能に接続された構成である。なお、図１では、第１サーバ２０Ａと第２サーバ２０Ｂの２つのサーバ２０を図示しているが、共有メモリモジュール１０を共有するサーバ２０の数は２つに限らない。
【００１３】
複数のサーバ２０（図１では第１サーバ２０Ａおよび第２サーバ２０Ｂ）の各々は、プロセッサ２３０と、ローカルメモリ２４０と、サーバコントローラ２００とを備える。一方、共有メモリモジュール１０は、共有メモリ１３０と、共有メモリコントローラ１００とを備える。
【００１４】
サーバ２０から共有メモリモジュール１０にアクセスする場合は、プロセッサ２３０がサーバコントローラ２００を経由して共有メモリモジュール１０と通信を行ない、共有メモリモジュール１０内の共有メモリ１３０にアクセスする。
【００１５】
共有メモリモジュール１０内の共有メモリ１３０は単一のデバイスである必要はなく、複数のメモリデバイスからなっていてもよい。特に、現在メインメモリとして広く利用されているＤＲＡＭの他に、一般にＳＣＭデバイスと呼ばれるメモリデバイスを用いてもよい。ＳＣＭは、高速に読み書きが可能な大容量の不揮発性メモリであり、例えば、ＭＲＡＭ（Magnetoresistive  Random  Access  Memory）、ＰＣＭ（Phase  Change  Memory、ＰＲＡＭやＰＣＲＡＭと呼ばれることもある）、ＲｅＲＡＭ（Resistance  Random  Access  Memory）、ＦｅＲＡＭ（Ferroelectric  Random  Access  Memory）などの不揮発性メモリを含む。ＳＣＭは、ＤＲＡＭなどの揮発性メモリよりも容量が大きく、かつ、ＳＳＤやＨＤＤなどのストレージよりも高速に読み書きできるという特徴を持つ。
【００１６】
プロセッサ２３０は、ＯＳ上でプログラムを実行し、プログラムが要求するメモリの確保やデータの読み書き（読み出しもしくは書き込み）の命令を発行する。サーバコントローラ２００は、プロセッサ２３０の命令に後述するアクセス権限の判断に必要な情報を付与し、共有メモリモジュール１０に対してメモリの確保やデータの読み書きを要求する。
【００１７】
共有メモリモジュール１０は、サーバコントローラ２００からの要求を共有メモリコントローラ１００で受け、付与された情報と自らが持つアクセス権限に関わる情報を照合して、正当な権限があれば、要求されたメモリの確保やデータの読み書きの処理を共有メモリ１３０に対して行い、処理に応じた情報をサーバ２０に返信する。
【００１８】
具体的には、まず、プロセッサ２３０が実行するプログラムが、共有メモリ１３０の利用を要求する。このとき、共有メモリ１３０上の利用したいアドレスを指定するか、あるいは、利用したいメモリ量のみを指定できる。前者はすでに他のプログラムが書き込んだデータを利用したい場合に、後者は全く新しい領域を確保したい場合に用いる。
【００１９】
サーバコントローラ２００は、このプログラムの要求に応じて、プログラムの認証に必要な情報を含む利用請求を生成し、共有メモリモジュール１０に送信する。共有メモリコントローラ１００は、サーバ２０からの利用請求を受けて、プログラムの認証を行い、さらにアドレスが指定された場合はそのアドレスを利用する権限があるかどうかを照合することにより、利用請求の妥当性を判断する。そして、利用請求が妥当な場合は、プログラムが利用できるアドレス範囲とそのアドレス範囲内のアドレスにアクセスするためのアクセスキーをサーバ２０に返信する。
【００２０】
サーバコントローラ２００は、共有メモリモジュール１０からプログラムが利用できるアドレス範囲とアクセスキーを受け取り、それを保存する。以降、プロセッサ２３０が実行するプログラムから共有メモリ１３０にアクセスがある場合、サーバコントローラ２００は、プロセッサ２３０が発行する読み書き命令にアクセスキーを付与して読み書き要求を生成し、共有メモリモジュール１０に送信する。共有メモリコントローラ１００は、サーバ２０からの読み書き要求を受けて、アドレスとアクセスキーの照合によりアクセス権限を確認することで読み書き要求の妥当性を判断し、読み書き要求が妥当な場合に読み書き要求に応じた処理を行い、結果をサーバ２０に返すことで、アクセス権限を保ったままデータの読み書きを許す。
【００２１】
以上のように、本実施形態のメモリ共有システムでは、プログラムの認証を通じて共有メモリ１３０に対するアクセス権限を管理しながら、共有メモリ１３０に対して実際にアクセスする場合は一時的なアクセスキーを生成してアクセス権限の有無を判定するために使用している。したがって、グローバルなアクセス権限管理を行いながら、同じプログラムを分散実行したような場合でも、個々の共有メモリ空間を安全に分離することができる。
【００２２】
以下では、サーバコントローラ２００と共有メモリコントローラ１００の詳細について説明する。なお、以下の説明では、２つ以上のデータの対応付けた情報のデータ構造として、値を対応させるテーブル形式のデータ構造を例示するが、これに限らない。例えば、二分木を用いてデータを格納する構造であってもよいし、レンジラベリングと呼ばれる方法でデータを格納する構造であってもよい。
【００２３】
まず、サーバコントローラ２００の構成について説明する。図２は、サーバコントローラ２００の構成例を示すブロック図である。サーバコントローラ２００は、図２に示すように、サーバ側記憶部２１０と、サーバ側処理回路２２０とを備える。サーバ側記憶部２１０は、キー管理テーブル２１１（キー管理情報）を記憶する。サーバ側処理回路２２０は、利用請求処理部２２１（サーバ側利用請求処理部）と、読み書き要求処理部２２２（サーバ側読み書き要求処理部）とを含む。
【００２４】
キー管理テーブル２１１は、上述の利用請求に応じて生成されたアクセスキーと利用可能なアドレス範囲とを対応付けたテーブルである。キー管理テーブル２１１の一例を図３に示す。アクセスキーは上述のように一時的なキーであるため、プロセッサ２３０によるプログラムの実行が終了した場合、キー管理テーブル２１１に登録されているアクセスキーとアドレス範囲が消去されてもよい。
【００２５】
サーバ側処理回路２２０の利用請求処理部２２１は、上述の利用請求に関わるサーバ２０側の処理を行う処理部である。プロセッサ２３０が実行するプログラムが利用したいアドレスまたはメモリ量を指定したメモリの確保を要求し、プロセッサ２３０からメモリ確保の命令が発行されると、利用請求処理部２２１は、メモリの確保を要求したプログラムに固有の識別子であるプログラムＩＤと、そのプログラムを認証するための認証情報とをプログラムから取得する。そして、利用請求処理部２２１は、プログラムから取得したプログラムＩＤと認証情報とを含む利用請求を生成して、生成した利用請求を共有メモリモジュール１０に送信する。
【００２６】
なお、利用請求の生成に用いるプログラムＩＤや認証情報などの情報は必ずしもプログラムから取得する必要はない。例えば、ＯＳのメモリ管理サブシステムなどが、プログラムでのメモリ確保時にこれらの情報を自動的に付与する構成であってもよい。
【００２７】
また、利用請求処理部２２１は、共有メモリモジュール１０に送信した利用請求に対する応答として、共有メモリモジュール１０からアクセスキーと利用可能なアドレス範囲とを受信すると、受信したアクセスキーと利用可能なアドレス範囲とを対応付けてキー管理テーブル２１１に登録する。また、利用請求処理部２２１は、共有メモリモジュール１０に送信した利用請求に対する応答として、共有メモリモジュール１０からエラー通知を受信すると、プロセッサ２３０にエラーを通知する。
【００２８】
利用請求のデータ構造の一例を図４に示す。図４（ａ）は、利用したいアドレスの指定を含む利用請求のデータ構造を示し、図４（ｂ）は、利用したいメモリ量の指定を含む利用請求のデータ構造を示している。利用請求処理部２２１が生成して共有メモリモジュール１０に送信する利用請求は、例えば図４に示すように、利用したいアドレスまたはメモリ量の指定と、プログラムＩＤと、認証情報とを含む。この図４に例示する利用請求のデータ構造は、プログラムからの要求に応じてプロセッサ２３０が発行するメモリ確保の命令に対し、プログラムＩＤと認証情報を付加した構造となっている。
【００２９】
サーバ側処理回路２２０の読み書き要求処理部２２２は、上述の読み書き要求に関わるサーバ２０側の処理を行う処理部である。プロセッサ２３０が実行するプログラムがデータの読み書きを要求し、プロセッサ２３０から読み書き命令が発行されると、読み書き要求処理部２２２は、キー管理テーブル２１１を参照し、読み書き命令に含まれるデータを読み書きするアドレス（対象アドレス）を包含するアドレス範囲と対応付けられたアクセスキーをキー管理テーブル２１１から取得する。そして、読み書き要求処理部２２２は、読み書き命令に含まれる対象アドレスと、キー管理テーブル２１１から取得したアクセスキーとを含む読み書き要求を生成して、生成した読み書き要求を共有メモリモジュール１０に送信する。
【００３０】
また、読み書き要求処理部２２２は、共有メモリモジュール１０に送信した読み書き要求（データ読み出しの要求）に対する応答として、共有メモリ１３０から読み出されたデータを共有メモリモジュール１０から受信すると、受信したデータをプロセッサ２３０に返す。また、読み書き要求処理部２２２は、共有メモリモジュール１０に送信した読み書き要求（データ書き込みの要求）に対する応答として、データの書き込みが正常に終了したことを示す正常終了通知を共有メモリモジュール１０から受信すると、プロセッサ２３０に正常終了を通知する。また、読み書き要求処理部２２２は、共有メモリモジュール１０に送信した読み書き要求に対する応答として、共有メモリモジュール１０からエラー通知を受信すると、プロセッサ２３０にエラーを通知する。
【００３１】
読み書き要求のデータ構造の一例を図５に示す。読み書き要求処理部２２２が生成した共有メモリモジュール１０に送信する読み書き要求は、例えば図５に示すように、読み出しか書き込みかの種別と、対象アドレスと、アクセスキーとを含む。読み書き要求がデータ書き込みの要求の場合は、さらに書き込みデータを含む。この図５に例示する読み書き要求のデータ構造は、プログラムからの要求に応じてプロセッサ２３０が発行する読み書き命令に、アクセスキーを付加した構造となっている。
【００３２】
なお、プロセッサ２３０が発行する読み書き命令に含まれる対象アドレスがローカルメモリ２４０のアドレスである場合、読み書き要求処理部２２２は、プロセッサ２３０が発行する読み書き命令に応じて、ローカルメモリ２４０に対するデータの読み出しや書き込みを実行してもよい。ＯＳのメモリ管理部などで予めアクセス先がローカルメモリ２４０か共有メモリ１３０かを判定し、共有メモリ１３０への要求のみをサーバコントローラ２００に渡す場合は、サーバコントローラ２００とは別のメモリコントローラによりローカルメモリ２４０に対するデータの読み出しや書き込みが行われるため、読み書き要求処理部２２２によるローカルメモリ２４０への読み書きの処理は不要となる。
【００３３】
次に、共有メモリコントローラ１００の構成について説明する。図６は、共有メモリコントローラ１００の構成例を示すブロック図である。共有メモリコントローラ１００は、図６に示すように、共有メモリ側記憶部１１０と、共有メモリ側処理回路１２０とを備える。共有メモリ側記憶部１１０は、ＩＤ管理テーブル１１１（ＩＤ管理情報）と、アクセス権限管理テーブル１１２（アクセス権限管理情報）と、アクセスキー管理テーブル１１３（アクセスキー管理情報）を記憶する。共有メモリ側処理回路１２０は、利用請求処理部１２１（共有メモリ側利用請求処理部）と、読み書き要求処理部１２２（共有メモリ側読み書き要求処理部）とを含む。
【００３４】
共有メモリ側処理回路１２０の利用請求処理部１２１と読み書き要求処理部１２２は、例えば、１または複数のプロセッサにより実現される。例えば、利用請求処理部１２１と読み書き要求処理部１２２は、ＣＰＵなどのプロセッサにプログラムを実行させること、すなわちソフトウェアにより実現してもよいし、専用のＩＣ（Integrated  Circuit）などのプロセッサ、すなわちハードウェアにより実現してもよいし、ソフトウェアとハードウェアを併用して実現してもよい。
【００３５】
ＩＤ管理テーブル１１１は、共有メモリ１３０を利用するプログラムとして登録されたプログラムのプログラムＩＤと、そのプログラムを認証するための認証情報（秘密情報）とを対応付けたテーブルである。ＩＤ管理テーブル１１１の一例を図７に示す。プログラムＩＤはプログラム固有の情報であればよく、プログラム名でもよいし、本実施形態のメモリ共有システムにおいて有効なＩＤを生成して使用してもよい。また、認証情報は何らかのパスワードでもよいし、公開鍵認証で用いるような公開鍵でもよい。
【００３６】
アクセス権限管理テーブル１１２は、ＩＤ管理テーブル１１１に登録されたプログラムがアクセス可能なアドレス範囲を定めるためのものであり、アドレス範囲とそのアドレス範囲へのアクセスが許可されたプログラムのプログラムＩＤとを対応付けたテーブルである。アクセス権限管理テーブル１１２の一例を図８に示す。ここでアドレス範囲は、共有メモリ１３０が持つメモリのある一定範囲を指定するものであり、共有メモリ１３０のメモリ空間の表現方法によって変わりうる。例えば、リニアなメモリ空間であれば、図８に例示するように通常のメモリアドレスを示すような整数値の範囲、あるいは、整数値とメモリ長（メモリ量）のペアで表現できる。また、メモリ空間をファイルシステムのようなディレクトリ構造にマッピングしている場合は、ファイルパスのような階層構造のある場所を示す表現でもよい。アクセス権限管理テーブル１１２は、そのように示されたメモリ領域上のパーミッションの定義とも言える。
【００３７】
なお、本実施形態では、ＩＤ管理テーブル１１１に対する操作（登録の追加や削除）は別途行われるものとする。ＩＤ管理テーブル１１１に対する操作には特別な工夫は必要でなく、既存サービスのユーザ登録と同様な処理でプログラムＩＤと認証情報を編集可能であればよい。アクセス権限管理テーブル１１２についても同様であり、通常のアクセス管理（ファイルシステム上のパーミッションの変更やオンラインストレージの編集権限管理など）の手段で、アドレス範囲とそのアドレス範囲へのアクセスが許可されたプログラムのプログラムＩＤ（共有情報）の編集が行われればよい。以降では、ＩＤ管理テーブル１１１は与えられているものとして説明する。アクセス権限管理テーブル１１２については、後述するように利用請求に応じた処理で共有情報が追加されることもあるが、基本的にはある程度の共有情報が設定されたものが与えられているものとして説明する。
【００３８】
アクセスキー管理テーブル１１３は、アクセス権限管理テーブル１１２と同様のアドレス範囲と、そのアドレス範囲内のアドレスにアクセスするためのアクセスキーとを対応付けたテーブルである。アクセスキー管理テーブル１１３の一例を図９に示す。アクセスキーは他者から推測が難しく、ある程度ユニークであることが保証されているデータ構造であればよい。例えば、共有メモリコントローラ１００に固有の情報と日時を示すデータをハッシュ関数にかけて生成した文字列などをアクセスキーとして利用することができる。アクセスキーは上述のように一時的なキーであるため、サーバ２０からの明示的なプログラムの実行終了の通知を受けた場合、あるいはサーバ２０との間の通信が一定時間継続して途絶えた場合などに、アクセスキー管理テーブル１１３に登録されているアクセスキーとアドレス範囲が消去されてもよい。
【００３９】
共有メモリ側処理回路１２０の利用請求処理部１２１は、上述の利用請求に関わる共有メモリモジュール１０側の処理を行う処理部である。共有メモリモジュール１０がサーバ２０から送信された利用請求を受信すると、利用請求処理部１２１は、ＩＤ管理テーブル１１１およびアクセス権限管理テーブル１１２を参照して、受信した利用請求の妥当性を判断する。そして、利用請求が妥当な場合、利用請求処理部１２１はアクセスキーを生成し、生成したアクセスキーを利用可能なアドレス範囲と対応付けてアクセスキー管理テーブル１１３に登録するとともに、生成したアクセスキーと利用可能なアドレス範囲を利用請求への応答として、利用請求の送信元のサーバ２０に返信する。また、利用請求が妥当でない場合、利用請求処理部１２１は、利用請求への応答としてエラー通知を利用請求の送信元のサーバ２０に返信する。
【００４０】
上述したように利用請求は、利用したいアドレスの指定を含むものと、利用したいメモリ量の指定を含むものとの２種類がある。共有メモリ側処理回路１２０の利用請求処理部１２１による処理は、この利用請求の種類によって異なったものとなる。
【００４１】
利用したいアドレスの指定を含む利用請求を受信した場合、利用請求処理部１２１は、受信した利用請求に含まれるプログラムＩＤと認証情報との組み合わせがＩＤ管理テーブル１１１に登録されており、かつ、受信した利用請求で指定されたアドレスが、利用請求に含まれるプログラムＩＤと対応付けてアクセス権限管理テーブル１１２に登録されたアドレス範囲に含まれる場合に、受信した利用請求が妥当であると判断する。そして、利用請求処理部１２１は、利用請求に含まれるプログラムＩＤと対応付けてアクセス権限管理テーブル１１２に登録されたアドレス範囲を利用可能なアドレス範囲とし、生成したアクセスキーとともに、利用請求の送信元のサーバ２０に返信する。
【００４２】
一方、利用したいメモリ量の指定を含む前記利用請求を受信した場合、利用請求処理部１２１は、受信した利用請求に含まれるプログラムＩＤと認証情報との組み合わせがＩＤ管理テーブル１１１に登録されている場合に、受信した利用請求が妥当であると判断する。そして、利用請求処理部１２１は、受信した利用請求で指定されたメモリ量分のアドレス範囲を新規に設定し、新規に設定したアドレス範囲と受信した利用請求に含まれるプログラムＩＤとを対応付けて、新たな共有情報としてアクセス権限管理テーブル１１２に登録するとともに、新規に設定したアドレス範囲を利用可能なアドレス範囲とし、生成したアクセスキーとともに、利用請求の送信元のサーバ２０に返信する。
【００４３】
共有メモリ側処理回路１２０の読み書き要求処理部１２２は、上述の読み書き要求に関わる共有メモリモジュール１０側の処理を行う処理部である。共有メモリモジュール１０がサーバ２０から送信された読み書き要求を受信すると、アクセスキー管理テーブル１１３を参照して、受信した読み書き要求の妥当性を判断する。具体的には、受信した読み書き要求に含まれるアクセスキーと、受信した読み書き要求に含まれる対象アドレスを含むアドレス範囲との組み合わせがアクセスキー管理テーブル１１３に登録されている場合、受信した読み書き要求が妥当であると判断する。そして、読み書き要求が妥当な場合、読み書き要求処理部１２２は、共有メモリ１３０の対象アドレスに対するデータの読み書きを実行する。そして、読み書き要求がデータの読み出しを要求するものであれば、読み書き要求に対する応答として、読み出したデータを読み書き要求の送信元のサーバ２０に返信する。また、読み書き要求がデータの書き込みを要求するものであれば、データの書き込みが終了したときに、データの書き込みが正常に終了したことを示す正常終了通知を読み書き要求の送信元のサーバ２０に返信する。また、読み書き要求が妥当でない場合、あるいはデータの読み書きが正常に行われなかった場合、読み書き要求処理部１２２は、読み書き要求の送信元のサーバ２０にエラー通知を返信する。
【００４４】
次に、サーバコントローラ２００と共有メモリコントローラ１００の動作について、図１０乃至図１３のフローチャートに沿って説明する。
【００４５】
まず、サーバコントローラ２００の動作を説明する。図１０は、サーバコントローラ２００の利用請求処理部２２１による処理手順の一例を示すフローチャートである。この図１０のフローチャートで示す一連の処理は、プロセッサ２３０が実行するプログラムがメモリの確保を要求し、プロセッサ２３０からメモリ確保の命令が発行されると開始される。
【００４６】
プロセッサ２３０からメモリ確保の命令が発行されると、利用請求処理部２２１は、プログラムからプログラムＩＤと認証情報を取得する（ステップＳ１０１）。そして、利用請求処理部２２１は、プロセッサ２３０からのメモリ確保の命令に含まれるアドレスの指定またはメモリ量の指定と、ステップＳ１０１で取得したプログラムＩＤおよび認証情報とを含む利用請求を生成し、生成した利用請求を共有メモリモジュール１０に送信する（ステップＳ１０２）。
【００４７】
ここで、共有メモリモジュール１０に送信した利用請求が妥当であると判断された場合は、共有メモリモジュール１０からアクセスキーとアドレス範囲が返信され、妥当でないと判断された場合は、共有メモリモジュール１０からエラー通知が返信される。利用請求処理部２２１は、共有メモリモジュール１０からアクセスキーとアドレス範囲を受信した場合（ステップＳ１０３：Ｙｅｓ）、受信したアクセスキーとアドレス範囲を対応付けてキー管理テーブルに登録し（ステップＳ１０４）、処理を終了する。一方、共有メモリモジュール１０からエラー通知を受信した場合は（ステップＳ１０３：Ｎｏ）、利用請求処理部２２１はプロセッサ２３０にエラーを通知し（ステップＳ１０５）、処理を終了する。
【００４８】
図１１は、サーバコントローラ２００の読み書き要求処理部２２２による処理手順の一例を示すフローチャートである。この図１１のフローチャートで示す一連の処理は、プロセッサ２３０が実行するプログラムがデータの読み書きを要求し、プロセッサ２３０から読み書き命令が発行されると開始される。
【００４９】
プロセッサ２３０から読み書き命令が発行されると、読み書き要求処理部２２２は、読み書き命令に含まれる対象アドレスを元に、キー管理テーブル２１１からアクセスキーを取得する（ステップＳ２０１）。そして、読み書き要求処理部２２２は、プロセッサ２３０からの書き込み命令にステップＳ２０１で取得したアクセスキーを付加して読み書き要求を生成し、生成した読み書き要求を共有メモリモジュール１０に送信する（ステップＳ２０２）。
【００５０】
ここで、共有メモリモジュール１０に送信した読み書き要求が妥当であると判断された場合、読み書き要求がデータの読み出しを要求するものであれば、共有メモリ１３０から読み出されたデータが共有メモリモジュール１０から返信され、読み書き要求がデータの書き込みを要求するものであれば、共有メモリ１３０から正常終了通知が返信される。また、共有メモリモジュール１０に送信した読み書き要求が妥当でないと判断された場合、あるいはデータの読み書きが正常に行われなかった場合は、共有メモリモジュール１０からエラー通知が返信される。
【００５１】
読み書き要求がデータの読み出しを要求するものである場合（ステップＳ２０３：Ｙｅｓ）、読み書き要求処理部２２２は、共有メモリ１３０から読み出したデータを共有メモリモジュール１０から受信すると（ステップＳ２０４：Ｙｅｓ）、受信したデータをプロセッサ２３０に返して（ステップＳ２０５）、処理を終了する。一方、共有メモリモジュール１０からエラー通知を受信すると（ステップＳ２０４：Ｎｏ）、プロセッサ２３０にエラーを通知し（ステップＳ２０６）、処理を終了する。
【００５２】
また、読み書き要求がデータの書き込みを要求するものである場合（ステップＳ２０３：Ｎｏ）、読み書き要求処理部２２２は、共有メモリモジュール１０から正常終了通知を受信すると（ステップＳ２０７：Ｙｅｓ）、正常終了をプロセッサ２３０に通知し（ステップＳ２０８）、処理を終了する。一方、共有メモリモジュール１０からエラー通知を受信すると（ステップＳ２０７：Ｎｏ）、プロセッサ２３０にエラーを通知し（ステップＳ２０６）、処理を終了する。
【００５３】
次に、共有メモリコントローラ１００の動作を説明する。図１２は、共有メモリコントローラ１００の利用請求処理部１２１による処理手順の一例を示すフローチャートである。この図１２のフローチャートで示す一連の処理は、サーバ２０から送信された利用請求を共有メモリモジュール１０が受信すると開始される。
【００５４】
共有メモリモジュール１０が利用請求を受信すると、利用請求処理部１２１は、まず、受信した利用請求に含まれるプログラムＩＤと認証情報との組み合わせがＩＤ管理テーブル１１１に登録されているか否かを判定する（ステップＳ３０１）。ここで、利用請求に含まれるプログラムＩＤと認証情報との組み合わせがＩＤ管理テーブル１１１に登録されていなければ（ステップＳ３０１：Ｎｏ）、利用請求処理部１２１は、利用請求が妥当でないと判断してサーバ２０にエラー通知を返信し（ステップＳ３０２）、処理を終了する。
【００５５】
一方、利用請求に含まれるプログラムＩＤと認証情報との組み合わせがＩＤ管理テーブル１１１に登録されていれば（ステップＳ３０１：Ｙｅｓ）、利用請求処理部１２１は、次に、利用請求に利用したいアドレスの指定があるか否かを判定する（ステップＳ３０３）。そして、利用したいアドレスの指定がない、つまり、利用したいメモリ量のみが指定されている場合（ステップＳ３０３：Ｎｏ）、利用請求処理部１２１は、指定されたメモリ量に相当するアドレス範囲を新規に設定して、このアドレス範囲を利用請求に含まれるプログラムＩＤと対応付けてアクセス権限管理テーブル１１２に登録し（ステップＳ３０４）、ステップＳ３０６に進む。
【００５６】
一方、利用請求に利用したいアドレスの指定がある場合（ステップＳ３０３：Ｙｅｓ）、利用請求処理部１２１は、次に、利用請求で指定されたアドレスが、利用請求に含まれるプログラムＩＤと対応付けてアクセス権限管理テーブル１１２に登録されたアドレス範囲に含まれるか否かを確認することにより、そのアドレスにアクセスする権限があるか否かを判定する（ステップＳ３０５）。ここで、利用請求で指定されたアドレスにアクセスする権限がないと判定した場合（ステップＳ３０５：Ｎｏ）、利用請求処理部１２１は、利用請求が妥当でないと判断してサーバ２０にエラー通知を返信し（ステップＳ３０２）、処理を終了する。一方、利用請求で指定されたアドレスにアクセスする権限があると判定した場合は（ステップＳ３０５：Ｙｅｓ）、次のステップＳ３０６に進む。
【００５７】
次に、利用請求処理部１２１は、利用請求に含まれるプログラムＩＤと対応付けてアクセス権限管理テーブル１１２に登録されたアドレス範囲内のアドレスにアクセスするためのアクセスキーを生成する（ステップＳ３０６）。そして、利用請求処理部１２１は、ステップＳ３０６で生成したアクセスキーと、このアクセスキーでアクセス可能なアドレス範囲とを対応付けてアクセスキー管理テーブル１１３に登録し（ステップＳ３０７）、アクセスキーとアドレス範囲をサーバ２０に返信して（ステップＳ３０８）、処理を終了する。
【００５８】
図１３は、共有メモリコントローラ１００の読み書き要求処理部１２２による処理手順の一例を示すフローチャートである。この図１３のフローチャートで示す一連の処理は、サーバ２０から送信された読み書き要求を共有メモリモジュール１０が受信すると開始される。
【００５９】
共有メモリモジュール１０が読み書き要求を受信すると、読み書き要求処理部１２２は、まず、受信した読み書き要求に含まれるアクセスキーと対象アドレスを包含するアドレス範囲との組み合わせがアクセスキー管理テーブル１１３に登録されているか否かを判定する（ステップＳ４０１）。ここで、読み書き要求に含まれるアクセスキーと対象アドレスを包含するアドレス範囲との組み合わせがアクセスキー管理テーブル１１３に登録されていなければ（ステップＳ４０１：Ｎｏ）、読み書き要求処理部１２２は、読み書き要求が妥当でないと判断してサーバ２０にエラー通知を返信し（ステップＳ４０２）、処理を終了する。
【００６０】
一方、読み書き要求に含まれるアクセスキーと対象アドレスを包含するアドレス範囲との組み合わせがアクセスキー管理テーブル１１３に登録されている場合（ステップＳ４０１：Ｙｅｓ）、読み書き要求処理部１２２は、受信した読み書き要求に応じて共有メモリ１３０に対するデータの読み書きを実行する。すなわち、読み書き要求がデータの読み出しを要求するものである場合（ステップＳ４０３：Ｙｅｓ）、読み書き要求処理部１２２は、共有メモリ１３０の対象アドレスからデータを読み出して（ステップＳ４０４）、読み出したデータをサーバ２０に返信し（ステップＳ４０５）、処理を終了する。一方、読み書き要求がデータの書き込みを要求するものである場合（ステップＳ４０３：Ｎｏ）、読み書き要求処理部１２２は、共有メモリ１３０の対象アドレスにデータを書き込み（ステップＳ４０６）、正常終了通知をサーバ２０に返信して（ステップＳ４０７）、処理を終了する。
【００６１】
以上、具体的な例を挙げながら詳細に説明したように、本実施形態では、共有メモリコントローラ１００が、サーバ２０から受信した利用請求に応じてアクセスキーを生成し、アクセスキーと利用可能なアドレス範囲をサーバ２０に返信する。そして、サーバ２０が共有メモリ１３０に対して実際にデータの読み書きを行う場合は、サーバコントローラ２００がプロセッサ２３０の読み書き命令にアクセスキーを付加した読み書き要求を共有メモリモジュール１０に送信する。そして、共有メモリコントローラ１００が、この読み書き要求に含まれるアクセスキーを用いてアクセス権限を確認し、アクセス権限がある場合に共有メモリ１３０に対するデータの読み書きを実行する。したがって、本実施形態によれば、プロセッサ２３０の通常の読み書き命令と同等の粒度で共有メモリ１３０に対してアクセスすることができ、かつ、共有メモリ１３０に対するアクセス制御も適切に行うことができる。
【００６２】
また、本実施形態によれば、共有メモリ１３０に対するアクセス権限の管理にプログラムＩＤを用いるため、グローバルなアクセス権限管理を行いながら、同じプログラムを分散実行したような場合でも、個々の共有メモリ空間を安全に分離することができる。
【００６３】
（変形例１）
上述の実施形態では、サーバコントローラ２００を独立した個別のハードウェアとして実現することを想定していた。サーバコントローラ２００は、一般的なサーバに対して追加される機能であるが、その実現方法としては独立した個別のハードウェアとして実現する以外にも、いくつかのバリエーションが考えられる。以下では、サーバコントローラ２００の実現方法のバリエーションについて説明する。
【００６４】
まず、一般的なサーバが備えるＯＳのメモリ管理の概要を説明する。一般に、ＯＳは各プロセスのメモリ空間を個別に管理し、あるプロセスのメモリ空間を他のプロセスのメモリ空間と独立に扱えるよう管理している。プロセス上では仮想メモリアドレス（物理的なアドレスとは異なる仮想的なアドレス）を通じてメモリデバイスにアクセスする。実際にメモリデバイスにアクセスする場合には、仮想メモリアドレスを実際の物理的なメモリアドレス（物理メモリアドレス）に変換する必要があり、この機能を担うのがＯＳのメモリ管理システム上にあるページテーブルである。ページテーブルは、簡単には仮想メモリアドレスと物理メモリアドレスとの対応表になっている。ページテーブルは、効率を上げるためにプロセッサ内のメモリ管理ユニット（ＭＭＵ：Memory  Management  Unit）内に実装されることが多く、さらに高速にアクセスするために、そのキャッシュがＴＬＢ（Translation  Lookaside  Buffer）として用意されることがほとんどである。ＯＳのメモリ管理システムは、それらの機能と連携して仮想的なメモリ空間を物理メモリアドレスに紐付けてアクセスを行う。さらに、プロセッサとメモリデバイスとの間にはメモリコントローラと呼ばれるハードウェアが存在し、メモリコントローラが物理メモリアドレスをより低位の信号に変換することで具体的なメモリデバイスとの操作を仲介し、データをやり取りしている。
【００６５】
サーバコントローラ２００は、一般的なサーバのメモリアクセス部分の機能を拡張して、リモートメモリ（本実施形態では共有メモリ１３０）へのアクセスを可能にする機能である。このため、サーバコントローラ２００は、ＯＳのメモリ管理システムと何らかの形で協調して動作する必要がある。ただし、サーバコントローラ２００の機能自体は必ずしもＯＳ内にある必要はなく、ＯＳからメモリアクセス時のアドレスや利用請求の情報など動作に必要な情報を受け取ることができ、共有メモリモジュール１０と通信する機能が可能であればよい。
【００６６】
サーバコントローラ２００をＯＳを拡張して実現する方法としては、ページテーブルやＴＬＢを拡張して、各仮想メモリアドレスがローカルメモリ２４０と対応しているのか、リモートの共有メモリ１３０と対応しているのかの種別と、アクセスキーとを登録できるようにし、キー管理テーブル２１１の機能を持たせるといった方法が考えられる。この場合、ＯＳのメモリ管理機能を拡張して、共有メモリモジュール１０に対して利用請求ができる機能と、共有メモリモジュール１０と通信できる機能を追加し、サーバコントローラ２００として機能させる。サーバコントローラ２００をこのように実現する場合、プロセッサ２３０は、共有メモリ１３０に対する利用請求（メモリ確保）の命令と、通常のメモリアクセスと同じ読み書き命令とを発行し、サーバコントローラ２００としての機能を持つ、ＯＳの拡張されたメモリ管理機能が、上述の利用請求処理部２２１および読み書き要求処理部２２２としての処理を実行する。
【００６７】
サーバコントローラ２００の他の実現方法としては、ＯＳの一部ではないが、ＯＳから情報を受け取ることができるソフトウェアとして実現する方法が考えられる。この場合には、キー管理テーブル２１１や共有メモリモジュール１０との通信機能を担うソフトウェアモジュールを独立して実装し機能させる。その際にはＯＳのメモリ管理部分にメモリアクセスが発生した場合にはそれをフックして、このソフトウェアモジュールに通知するような拡張が必要になる。サーバコントローラ２００をこのように実現する場合、プロセッサ２３０は、共有メモリ１３０に対する利用請求（メモリ確保）の命令の場合は直接このソフトウェアモジュールに発行し、読み書き命令の場合は、拡張されたＯＳのメモリ管理部分を通してアドレスやデータなどをこのソフトウェアモジュールに通知する。そして、以降はそのソフトウェアモジュールが、上述の利用請求処理部２２１および読み書き要求処理部２２２としての処理を実行する。
【００６８】
サーバコントローラ２００のさらに他の実現方法としては、一般的なサーバが備えるハードウェアであるメモリコントローラの拡張として実現する方法も考えられる。通常、メモリコントローラはＯＳからの物理メモリアドレスへの読み書き要求を受けてそれを実行するデバイスであるが、これにキー管理テーブル２１１のデータ領域を持たせ、サーバコントローラ２００の主要機能を実装する。さらにＯＳのメモリ管理機能のメモリを割り当てる部分を拡張し、プロセッサ２３０からアドレスを指定して共有メモリ１３０に対する利用請求（メモリ確保）の命令を発行できるインターフェイスを作っておく。また、共有メモリ１３０を示すメモリアドレスの領域をあらかじめ決めておく。こうすることによって、メモリコントローラは、対象アドレスがローカルメモリ２４０に対応するものなのか共有メモリ１３０に対応するものなのかを判別することで、通常のメモリアクセス通知を使って、ローカルメモリ２４０に対する処理なのか共有メモリ１３０に対する処理なのかを判断できる。サーバコントローラ２００をこのように実現する場合、プロセッサ２３０は、共有メモリ１３０に対する利用請求（メモリ確保）の命令を、メモリ割り当て機構を通じてメモリコントローラに発行でき、その後は、通常の読み書き命令を、ＯＳを通じてメモリコントローラに発行すればよい。メモリコントローラは、プロセッサ２３０の命令がローカルメモリ２４０に対する処理を示していればそのまま処理すればよいし、共有メモリ１３０に対する処理を示していれば、上述の利用請求処理部２２１および読み書き要求処理部２２２としての処理を実行する。
【００６９】
（変形例２）
共有メモリモジュール１０内の共有メモリ１３０は、上述のように、複数のメモリデバイスを組み合わせて構成される場合があり、性能が異なるメモリデバイスを組み合わせて構成されることも想定される。ここで、共有メモリコントローラ１００の利用請求処理部１２１は、サーバ２０から受信した利用請求がメモリ量の指定のみを含む場合、利用請求が妥当であれば、利用請求で指定されたメモリ量に対応するアドレス範囲を共有メモリ１３０内に新規に設定する。このとき、利用請求の後に行われる実際のメモリアクセスがどのようなタイプであるかを知ることができれば、新規に設定するアドレス範囲を、その後のメモリアクセスに適したメモリデバイスに配置することができる。
【００７０】
そこで、サーバ２０から共有メモリモジュール１０に送信する利用請求に、予定しているアクセスのタイプを示す追加情報を含ませるようにしてもよい。この場合の利用請求のデータ構造の一例を図１４に示す。図１４に示す利用請求は、図４（ｂ）に示した利用請求に対し、追加情報がさらに付加されたデータ構造となっている。追加情報は、例えば、データの読み出しのみを行う予定である、データの読み書きの両方を行う予定である、シーケンシャル（連続的）なアクセスが多い、ランダムアクセスが多い、などといったように、予定されるアクセスのタイプを示す情報である。
【００７１】
このような追加情報を利用請求に付加することにより、共有メモリコントローラ１００の利用請求処理部１２１は、利用請求に応じてアドレス範囲を新規に設定する際に、予定されるメモリアクセスに適した共有メモリ１３０内のメモリデバイスに、新規に設定するアドレス範囲を配置することができ、メモリ配置を最適化することができる。
【００７２】
（変形例３）
上述の実施形態では、共有メモリ１３０に対して１バイト単位でアクセスすることを想定していたが、一度のアクセスで複数のデータを一度に読み書きすることも考えられる。この場合は、読み書き要求によりデータを読み書きするアドレス範囲が指定される構成とすればよい。この場合の読み書き要求のデータ構造の一例を図１５に示す。図１５に示す読み書き要求は、図５に示した読み書き要求に含まれる対象アドレスの代わりに、データを読み書きするアドレス範囲を示す対象アドレス範囲が含まれるデータ構造となっている。読み書き要求をこのような構成とすることで、共有メモリ１３０に対して一度のアクセスで複数のデータを一度に読み書きすることができる。
【００７３】
＜第２実施形態＞
次に、第２実施形態について説明する。第２実施形態は、共有メモリモジュール１０内の共有メモリ１３０だけではなく、サーバ２０内のローカルメモリ２４０までを管理の対象にすることにより、メモリ管理の効率を高めるようにした例である。
【００７４】
例えば、共有メモリ１３０のあるアドレス範囲のデータが第１サーバ２０Ａにより読み出され、第１サーバ２０Ａのローカルメモリ２４０上でアクセス、更新されている場合を考える。この場合、そのアドレス範囲の最新のデータは第１サーバ２０Ａのローカルメモリ２４０にある。このとき、第２サーバ２０Ｂが同じアドレス範囲に対するデータの読み書きを共有メモリモジュール１０に要求すると、共有メモリ１３０上には古いデータしかないので、一般的な仕組みでは、共有メモリモジュール１０は第１サーバ２０Ａが最新のデータを共有メモリ１３０に書き戻すのを待ってから、第２サーバ２０Ｂからの要求に応えることになる。
【００７５】
一方で、共有メモリモジュール１０は、最新のデータが第１サーバ２０Ａにあることを把握していれば、第２サーバ２０Ｂに対して第１サーバ２０Ａにある最新のデータに直接アクセスするように指示することができる。これに従って第２サーバ２０Ｂが第１サーバ２０Ａにデータの読み書きを要求すれば、待ち時間を減らすことができ、データ転送量も最低限に抑えることができる。そこで、本実施形態では、共有メモリモジュール１０の共有メモリコントローラ１００と、サーバ２０のサーバコントローラ２００とに、このような処理を実現する機能を持たせるようにしている。
【００７６】
本実施形態における共有メモリコントローラ１００では、共有メモリ側記憶部１１０が、上述のＩＤ管理テーブル１１１、アクセス権限管理テーブル１１２およびアクセスキー管理テーブル１１３に加えて、図１６に示すような貸出テーブル１１４をさらに記憶する。
【００７７】
貸出テーブル１１４は、図１６に示すように、サーバ２０の要求に応じてデータを読み出した共有メモリ１３０のアドレス範囲と、読み出したデータの送信先のサーバ２０のアドレス（例えばＩＰアドレス）とを対応付けたテーブルであり、共有メモリ１３０のどのアドレス範囲のデータがどのサーバ２０に送信されたか（どのサーバ２０により読み出されたか）を示している。この貸出テーブル１１４を参照することで、共有メモリ１３０上にあったデータの最新の状態がどのサーバ２０のローカルメモリ２４０上にあるか（あり得るか）を把握することができる。なお、サーバ２０のアドレスの表現方法はサーバ２０の所在を特定できるものであればよく、ＩＰアドレスに限らず、例えば、ホスト名やネットワーク内のパス表現などであってもよい。
【００７８】
共有メモリコントローラ１００の読み書き要求処理部１２２は、例えば、第１サーバ２０Ａからの読み書き要求に応じて、共有メモリ１３０のあるアドレス範囲からデータを読み出して第１サーバ２０Ａに送信した場合、データを読み出したアドレス範囲と第１サーバ２０Ａ（データ送信したサーバ２０）のアドレスとを対応付けて貸出テーブル１１４に記録する。その後、同じアドレス範囲を指定した利用要求が第２サーバ２０Ｂから送信されると、共有メモリコントローラ１００の利用請求処理部１２１は、貸出テーブル１１４を参照することで、指定されたアドレス範囲のデータが第１サーバ２０Ａにあることを把握する。そして、利用請求処理部１２１は、第２サーバ２０Ｂからの利用請求が妥当であることを確認した上でアクセスキーを生成し、生成したアクセスキーとアドレス範囲と第１サーバ２０Ａ（アクセス先のサーバ２０）のアドレスを第２サーバ２０Ｂに返信するとともに、生成したアクセスキーとアドレス範囲と第２サーバ２０Ｂからのアクセスを受け付ける指示を第１サーバ２０Ａに送信する。
【００７９】
本実施形態におけるサーバコントローラ２００では、サーバ側記憶部２１０が、上述のキー管理テーブル２１１に代えて、図１７に示すような拡張キー管理テーブル２１２を記憶する。また、サーバ側記憶部２１０は、図１８に示すような受付用キー管理テーブル２１３をさらに記憶する。
【００８０】
拡張キー管理テーブル２１２は、図１７に示すように、利用請求に応じて生成されたアクセスキーとアドレス範囲とアクセス先のサーバ２０のアドレス（例えばＩＰアドレス）とを対応付けたテーブルであり、アクセス先のサーバ２０のアドレスを登録できるように、第１実施形態で説明したキー管理テーブル２１１を拡張したものである。アクセス先のサーバ２０のアドレスは、上述のようにＩＰアドレスに限らず、ホスト名やネットワーク内のパス表現などで表現されてもよい。なお、利用請求に対する応答として共有メモリモジュール１０からアクセス先のサーバ２０のアドレスが送信されず、アクセスキーとアドレス範囲のみが送信された場合は、アクセス先のサーバ２０のアドレスには、共有メモリモジュール１０のアドレスが登録される。
【００８１】
受付用キー管理テーブル２１３は、図１８に示すように、他のサーバ２０からのアクセスを受け付ける指示とともに共有メモリモジュール１０から送信されたアドレス範囲とアクセスキーとを対応付けたテーブルである。この受付用キー管理テーブル２１３は、共有メモリコントローラ１００のアクセスキー管理テーブル１１３と本質的に同じものであり、他のサーバ２０からの読み書き要求の妥当性を判断するために用いられる。
【００８２】
サーバコントローラ２００の利用請求処理部２２１は、利用請求に対する応答として共有メモリモジュール１０からアクセスキーとアドレス範囲とアクセス先のサーバ２０のアドレスを受信した場合、受信したアクセスキーとアドレス範囲とアクセス先のサーバ２０のアドレスとを対応付けて拡張キー管理テーブル２１２に登録する。また、利用請求処理部２２１は、利用請求に対する応答として共有メモリモジュール１０からアクセスキーとアドレス範囲のみを受信した場合は、受信したアクセスキーおよびアドレス範囲と共有メモリモジュール１０のアドレスとを対応付けて拡張キー管理テーブル２１２に登録する。
【００８３】
また、サーバコントローラ２００の読み書き要求処理部２２２は、プロセッサ２３０の読み書き命令に応じて読み書き要求を送信する際に、拡張キー管理テーブル２１２を参照する。そして、読み書き要求の対象アドレスを包含するアドレス範囲と対応付けて拡張キー管理テーブル２１２に登録されているアクセス先のサーバ２０（共有メモリモジュール１０の場合もある）に対して、読み書き要求を送信する。また、読み書き要求処理部２２２は、共有メモリモジュール１０から他のサーバ２０からのアクセスを受け付ける指示を受信した場合、他のサーバ２０から読み書き要求を受信すると、受付用キー管理テーブル２１３に基づいて読み書き要求の妥当性を判断し、読み書き要求が妥当であれば、読み書き要求に応じてローカルメモリ２４０の対象アドレスに対するデータの読み書きを実行する。
【００８４】
図１９は、本実施形態の動作例を示すシーケンス図である。まず、第１サーバ２０Ａが共有メモリモジュール１０に対して利用請求を送信し（ステップＳ５０１）、アクセスキーの送信を経て（ステップＳ５０２）、あるアドレス範囲のデータ（以下、このアドレス範囲のデータを「データＡ」とする）の読み出しを要求する（ステップＳ５０３）。
【００８５】
共有メモリモジュール１０は、この第１サーバ２０Ａの読み出し要求に応じて共有メモリ１３０からデータＡを読み出して第１サーバ２０Ａに送信するとともに（ステップＳ５０４）、データＡのアドレス範囲と第１サーバ２０Ａのアドレスとを対応付けて貸出テーブル１１４に記録する（ステップＳ５０５）。
【００８６】
次に、第２サーバ２０Ｂが、共有メモリモジュール１０に対して、データＡのアドレス範囲を指定した利用請求を送信する（ステップＳ５０６）。このとき、共有メモリモジュール１０が第１実施形態と同様の処理を行うと、第１サーバ２０Ａがローカルメモリ２４０上で行うデータＡに対する更新と、第２サーバ２０Ｂが共有メモリ１３０上で行うデータＡに対する更新が同時に発生する可能性があり、データＡに一貫性や整合性が保たれなくなる虞がある。これを避けるためにデータベースなどではロックなどの機構を使ってデータの一貫性を壊すような変更を防いでいる。一方、本実施形態では、共有メモリモジュール１０が貸出テーブル１１４を用いてどのアドレス範囲のデータがどのサーバ２０に送信されているかを把握し、その情報を使って各サーバ２０がお互いにデータ通信を行えるようにして常に新しいデータにアクセスできるようにしている。
【００８７】
第２サーバ２０Ｂから利用請求を受信した共有メモリモジュール１０は、その利用請求が妥当なものであることを確認した上で、貸出テーブル１１４を参照し、データＡが第１サーバ２０Ａに貸し出されている（第１サーバ２０Ａに送信されている）ことを認識する。そして、共有メモリモジュール１０は、第１サーバ２０Ａに対して、他のサーバ２０からのアクセスを受け付ける指示とともに、第２サーバ２０Ｂが第１サーバ２０Ａのローカルメモリ２４０上のデータＡにアクセスするためのアクセスキーを送信する（ステップＳ５０７）。また、共有メモリモジュール１０は、第２サーバ２０Ｂに対して、第１サーバ２０Ａにアクセスする指示とともに、第２サーバ２０Ｂが第１サーバ２０Ａのローカルメモリ２４０上のデータＡにアクセスするためのアクセスキーと第１サーバ２０Ａのアドレスとを送信する（ステップＳ５０８）。第１サーバ２０Ａに送信したアクセスキーと第２サーバ２０Ｂに送信したアクセスキーは同じものである。
【００８８】
共有メモリモジュール１０からアクセス受付指示とアクセスキーを受信した第１サーバ２０Ａは、受信したアクセスキーをデータＡのアドレス範囲と対応付けて受付用キー管理テーブル２１３に登録する（ステップＳ５０９）。また、共有メモリモジュール１０から第１サーバ２０Ａへのアクセス指示とアクセスキーと第１サーバ２０Ａのアドレスとを受信した第２サーバ２０Ｂは、受信したアクセスキーと第１サーバ２０ＡのアドレスとをデータＡのアドレス範囲と対応付けて拡張キー管理テーブル２１２に登録する（ステップＳ５１０）。
【００８９】
以上で、第２サーバ２０Ｂが第１サーバ２０Ａのローカルメモリ２４０にあるデータＡにアクセスする準備が整ったので、第２サーバ２０Ｂは、共有メモリモジュール１０を介さずに、第１サーバ２０Ａに対して直接読み書きを要求することができる。データの読み書きは、受け手が共有メモリコントローラ１００ではなくサーバコントローラ２００であるという点のみ第１実施形態と異なるが、その他は第１実施形態と同様の処理が行われる。具体的には、第２サーバ２０Ｂのサーバコントローラ２００が拡張キー管理テーブル２１２を参照することでアクセスキーとアクセス先のアドレスを取得し、アクセス先である第１サーバ１０Ａに読み書き要求を送信する（ステップＳ５１１）。そして、第１サーバ２０Ａは、第２サーバ２０Ｂからの読み書き要求を受信すると、受付用キー管理テーブル２１３を参照して読み書き要求の妥当性を判断し、読み書き要求が妥当であればデータＡのアドレス範囲に対する読み書き処理を行って、第２サーバ２０Ｂに結果を返す（ステップＳ５１２）。
【００９０】
次に、本実施形態におけるサーバコントローラ２００と共有メモリコントローラ１００の動作について、図２０乃至図２３のフローチャートに沿って説明する。
【００９１】
まず、サーバコントローラ２００の動作を説明する。図２０は、サーバコントローラ２００の利用請求処理部２２１による処理手順の一例を示すフローチャートである。この図２０のフローチャートで示す一連の処理は、プロセッサ２３０が実行するプログラムがメモリの確保を要求し、プロセッサ２３０からメモリ確保の命令が発行されると開始される。
【００９２】
プロセッサ２３０からメモリ確保の命令が発行されると、利用請求処理部２２１は、プログラムからプログラムＩＤと認証情報を取得する（ステップＳ６０１）。そして、利用請求処理部２２１は、プロセッサ２３０からのメモリ確保の命令に含まれるアドレスの指定またはメモリ量の指定と、ステップＳ６０１で取得したプログラムＩＤおよび認証情報とを含む利用請求を生成し、生成した利用請求を共有メモリモジュール１０に送信する（ステップＳ６０２）。
【００９３】
ここで、共有メモリモジュール１０に送信した利用請求が妥当であると判断された場合は、共有メモリモジュール１０からアクセスキーとアドレス範囲が返信され、妥当でないと判断された場合は、共有メモリモジュール１０からエラー通知が返信される。また、利用請求がアドレスの指定を含むものであり、そのアドレスを包含するアドレス範囲のデータが他のサーバ２０のローカルメモリ２４０上にある場合、利用請求が妥当であれば、アクセスキーとアドレス範囲に加えて、他のサーバ２０へのアクセス指示とそのサーバ２０のアドレスとが共有メモリモジュール１０から送信される。
【００９４】
利用請求処理部２２１は、共有メモリモジュール１０からアクセスキーとアドレス範囲を受信した場合（ステップＳ６０３：Ｙｅｓ）、他のサーバ２０へのアクセス指示があれば（ステップＳ６０４：Ｙｅｓ）、受信したアクセスキーとアドレス範囲を他のサーバ２０のアドレスとともに拡張キー管理テーブル２１２に登録し（ステップＳ６０５）、他のサーバ２０へのアクセス指示がなければ（ステップＳ６０４：Ｎｏ）、受信したアクセスキーとアドレス範囲を共有メモリモジュール１０のアドレスとともに拡張キー管理テーブル２１２に登録する（ステップＳ６０６）。一方、共有メモリモジュール１０からエラー通知を受信した場合は（ステップＳ６０３：Ｎｏ）、利用請求処理部２２１はプロセッサ２３０にエラーを通知し（ステップＳ６０７）、処理を終了する。
【００９５】
図２１は、サーバコントローラ２００の読み書き要求処理部２２２による処理手順の一例を示すフローチャートであり、特に他のサーバ２０に対してデータの読み書きを要求する場合の処理手順を示している。この図２１のフローチャートで示す一連の処理は、共有メモリモジュール１０から他のサーバ２０へのアクセス指示を受信して他のサーバ２０のアドレスを拡張キー管理テーブル２１２に登録した後、プロセッサ２３０が実行するプログラムがデータの読み書きを要求して、プロセッサ２３０から読み書き命令が発行されると開始される。
【００９６】
プロセッサ２３０から読み書き命令が発行されると、読み書き要求処理部２２２は、読み書き命令に含まれる対象アドレスを元に、拡張キー管理テーブル２１２からアクセスキーとアクセス先となる他のサーバ２０のアドレスとを取得する（ステップＳ７０１）。そして、読み書き要求処理部２２２は、プロセッサ２３０からの書き込み命令にステップＳ７０１で取得したアクセスキーを付加して読み書き要求を生成し、ステップＳ７０１で取得したアドレスを宛先として、生成した読み書き要求を他のサーバ２０に送信する（ステップＳ７０２）。
【００９７】
ここで、他のサーバ２０に送信した読み書き要求が妥当であると判断された場合、読み書き要求がデータの読み出しを要求するものであれば、他のサーバ２０のローカルメモリ２４０から読み出されたデータが他のサーバ２０から返信され、読み書き要求がデータの書き込みを要求するものであれば、他のサーバ２０のローカルメモリ２４０から正常終了通知が返信される。また、他のサーバ２０に送信した読み書き要求が妥当でないと判断された場合、あるいはデータの読み書きが正常に行われなかった場合は、他のサーバ２０からエラー通知が返信される。
【００９８】
読み書き要求がデータの読み出しを要求するものである場合（ステップＳ７０３：Ｙｅｓ）、読み書き要求処理部２２２は、他のサーバ２０のローカルメモリ２４０から読み出したデータを他のサーバ２０から受信すると（ステップＳ７０４：Ｙｅｓ）、受信したデータをプロセッサ２３０に返して（ステップＳ７０５）、処理を終了する。一方、他のサーバ２０からエラー通知を受信すると（ステップＳ７０４：Ｎｏ）、プロセッサ２３０にエラーを通知し（ステップＳ７０６）、処理を終了する。
【００９９】
また、読み書き要求がデータの書き込みを要求するものである場合（ステップＳ７０３：Ｎｏ）、読み書き要求処理部２２２は、他のサーバ２０から正常終了通知を受信すると（ステップＳ７０７：Ｙｅｓ）、正常終了をプロセッサ２３０に通知し（ステップＳ７０８）、処理を終了する。一方、他のサーバ２０からエラー通知を受信すると（ステップＳ７０７：Ｎｏ）、プロセッサ２３０にエラーを通知し（ステップＳ７０６）、処理を終了する。
【０１００】
図２２は、サーバコントローラ２００の読み書き要求処理部２２２による処理手順の一例を示すフローチャートであり、特に、サーバ２０内のプロセッサ２３０からの入力ではなく外部からの入力を受けた場合の読み書き要求処理部２２２による処理手順を示している。ここで外部からの入力とは、他のサーバ２０からの読み書き要求、あるいは、共有メモリモジュール１０からのアクセス受付指示を想定している。
【０１０１】
外部からの入力を受けた場合、読み書き要求処理部２２２は、その入力が他のサーバ２０からの読み書き要求か、あるいは共有メモリモジュール１０からのアクセス受付指示かを判定する（ステップＳ８０１）。そして、外部からの入力が共有メモリモジュール１０からのアクセス受付指示であれば（ステップＳ８０１：Ｎｏ）、読み書き要求処理部２２２は、アクセス受付指示とともに共有メモリモジュール１０から送信されたアクセスキーとアドレス範囲を、受付用キー管理テーブル２１３に登録し（ステップＳ８０２）、処理を終了する。
【０１０２】
一方、外部からの入力が他のサーバ２０からの読み書き要求であれば（ステップＳ８０１：Ｙｅｓ）、読み書き要求処理部２２２は、まず、読み書き要求に含まれるアクセスキーと対象アドレスを包含するアドレス範囲との組み合わせが受付用キー管理テーブル２１３に登録されているか否かを判定する（ステップＳ８０３）。ここで、読み書き要求に含まれるアクセスキーと対象アドレスを包含するアドレス範囲との組み合わせが受付用キー管理テーブル２１３に登録されていなければ（ステップＳ８０３：Ｎｏ）、読み書き要求処理部２２２は、他のサーバ２０からの読み書き要求が妥当でないと判断して他のサーバ２０にエラー通知を返信し（ステップＳ８０４）、処理を終了する。
【０１０３】
一方、読み書き要求に含まれるアクセスキーと対象アドレスを包含するアドレス範囲との組み合わせが受付用キー管理テーブル２１３に登録されている場合（ステップＳ８０３：Ｙｅｓ）、読み書き要求処理部２２２は、読み書き要求に応じてローカルメモリ２４０に対するデータの読み書きを実行する。すなわち、読み書き要求がデータの読み出しを要求するものである場合（ステップＳ８０５：Ｙｅｓ）、読み書き要求処理部２２２は、ローカルメモリ２４０の対象アドレスからデータを読み出して（ステップＳ８０６）、読み出したデータを他のサーバ２０に返信し（ステップＳ８０７）、処理を終了する。一方、読み書き要求がデータの書き込みを要求するものである場合（ステップＳ８０５：Ｎｏ）、読み書き要求処理部２２２は、ローカルメモリ２４０の対象アドレスにデータを書き込み（ステップＳ８０８）、正常終了通知を他のサーバ２０に返信して（ステップＳ８０９）、処理を終了する。
【０１０４】
次に、共有メモリコントローラ１００の動作を説明する。図２３は、共有メモリコントローラ１００の利用請求処理部１２１による処理手順の一例を示すフローチャートである。この図２３のフローチャートで示す一連の処理は、サーバ２０から送信された利用請求を共有メモリモジュール１０が受信すると開始される。
【０１０５】
共有メモリモジュール１０が利用請求を受信すると、利用請求処理部１２１は、まず、受信した利用請求に含まれるプログラムＩＤと認証情報との組み合わせがＩＤ管理テーブル１１１に登録されているか否かを判定する（ステップＳ９０１）。ここで、利用請求に含まれるプログラムＩＤと認証情報との組み合わせがＩＤ管理テーブル１１１に登録されていなければ（ステップＳ９０１：Ｎｏ）、利用請求処理部１２１は、利用請求が妥当でないと判断してサーバ２０にエラー通知を返信し（ステップＳ９０２）、処理を終了する。
【０１０６】
一方、利用請求に含まれるプログラムＩＤと認証情報との組み合わせがＩＤ管理テーブル１１１に登録されていれば（ステップＳ９０１：Ｙｅｓ）、利用請求処理部１２１は、次に、利用請求に利用したいアドレスの指定があるか否かを判定する（ステップＳ９０３）。そして、利用したいアドレスの指定がない、つまり、利用したいメモリ量のみが指定されている場合（ステップＳ９０３：Ｎｏ）、利用請求処理部１２１は、指定されたメモリ量に相当するアドレス範囲を新規に設定して、このアドレス範囲を利用請求に含まれるプログラムＩＤと対応付けてアクセス権限管理テーブル１１２に登録し（ステップＳ９０４）、ステップＳ９０７に進む。
【０１０７】
一方、利用請求に利用したいアドレスの指定がある場合（ステップＳ９０３：Ｙｅｓ）、利用請求処理部１２１は、次に、利用請求で指定されたアドレスが、利用請求に含まれるプログラムＩＤと対応付けてアクセス権限管理テーブル１１２に登録されたアドレス範囲に含まれるか否かを確認することにより、そのアドレスにアクセスする権限があるか否かを判定する（ステップＳ９０５）。ここで、利用請求で指定されたアドレスにアクセスする権限がないと判定した場合（ステップＳ９０５：Ｎｏ）、利用請求処理部１２１は、利用請求が妥当でないと判断してサーバ２０にエラー通知を返信し（ステップＳ９０２）、処理を終了する。
【０１０８】
一方、利用請求で指定されたアドレスにアクセスする権限があると判定した場合は（ステップＳ９０５：Ｙｅｓ）、利用請求処理部１２１は、次に、利用請求で指定されたアドレスを包含するアドレス範囲が貸出テーブル１１４に記録されているか否かを確認する（ステップＳ９０６）。ここで、利用請求で指定されたアドレスを包含するアドレス範囲が貸出テーブル１１４に記録されていなければ（ステップＳ９０６：Ｎｏ）、次のステップＳ９０７に進む。そして、利用請求処理部１２１は、アクセス権限管理テーブル１１２に登録されたアドレス範囲内のアドレスにアクセスするためのアクセスキーを生成し（ステップＳ９０７）、このアクセスキーとアドレス範囲とを対応付けてアクセスキー管理テーブル１１３に登録するとともに（ステップＳ９０８）、アクセスキーとアドレス範囲をサーバ２０に返信して（ステップＳ９０９）、処理を終了する。
【０１０９】
一方、利用請求で指定されたアドレスを包含するアドレス範囲が貸出テーブル１１４に記録されていれば（ステップＳ９０６：Ｙｅｓ）、利用請求処理部１２１は、アクセス権限管理テーブル１１２に登録されたアドレス範囲内のアドレスにアクセスするためのアクセスキーを生成し（ステップＳ９１０）、このアクセスキーとアドレス範囲と貸出テーブル１１４に記録されているアクセス先のサーバ２０のアドレスとを利用請求の送信元のサーバ２０に返信するとともに（ステップＳ９１１）、アクセスキーとアドレス範囲と他のサーバ２０のアクセスを受け付ける指示をアクセス先のサーバ２０に送信し（ステップＳ９１２）、処理を終了する。
【０１１０】
なお、共有メモリコントローラ１００の読み書き要求処理部１２２による処理手順は基本的に第１実施形態と同様（図１３参照）であり、共有メモリ１３０からデータを読み出してサーバ２０に送信した場合に、データを読み出したアドレス範囲とデータ送信したサーバ２０のアドレスとを対応付けて貸出テーブル１１４に記録する処理が追加されるだけであるため、説明を省略する。
【０１１１】
以上、具体的な例を挙げながら詳細に説明したように、本実施形態では、共有メモリ１３０から読み出されたデータがどのサーバ２０にあるかを共有メモリコントローラ１００が把握し、そのデータのアドレス範囲を対象とする他のサーバ２０からの利用請求があった場合に、最新のデータを持つサーバ２０に対して他のサーバ２０が直接アクセスできるようにしている。したがって、本実施形態によれば、データの一貫性や整合性を保つために、サーバ２０が読み出したデータを共有メモリ１３０に書き戻した後に他のサーバ２０の読み書き要求に応じるといった対策を講じる必要がなく、データの読み書きの待ち時間やデータ転送量を削減して、効率のよいメモリ管理を実現することができる。
【０１１２】
以上、本発明の実施形態を説明したが、ここで説明した実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。ここで説明した新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。ここで説明した実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１１３】
１０  共有メモリモジュール
２０  サーバ
２０Ａ  第１サーバ
２０Ｂ  第２サーバ
１００  共有メモリコントローラ
１１０  共有メモリ側記憶部
１１１  ＩＤ管理テーブル
１１２  アクセス権限管理テーブル
１１３  アクセスキー管理テーブル
１１４  貸出テーブル
１２０  共有メモリ側処理回路
１２１  利用請求処理部
１２２  読み書き要求処理部
１３０  共有メモリ
２００  サーバコントローラ
２１０  サーバ側記憶部
２１１  キー管理テーブル
２１２  拡張キー管理テーブル
２１３  受付用キー管理テーブル
２２０  サーバ側処理回路
２２１  利用請求処理部
２２２  読み書き要求処理部
２３０  プロセッサ
２４０  ローカルメモリ
【図１】
2018156289.tif 000003
【図２】
2018156289.tif 000004
【図３】
2018156289.tif 000005
【図４】
2018156289.tif 000006
【図５】
2018156289.tif 000007
【図６】
2018156289.tif 000008
【図７】
2018156289.tif 000009
【図８】
2018156289.tif 000010
【図９】
2018156289.tif 000011
【図１０】
2018156289.tif 000012
【図１１】
2018156289.tif 000013
【図１２】
2018156289.tif 000014
【図１３】
2018156289.tif 000015
【図１４】
2018156289.tif 000016
【図１５】
2018156289.tif 000017
【図１６】
2018156289.tif 000018
【図１７】
2018156289.tif 000019
【図１８】
2018156289.tif 000020
【図１９】
2018156289.tif 000021
【図２０】
2018156289.tif 000022
【図２１】
2018156289.tif 000023
【図２２】
2018156289.tif 000024
【図２３】
2018156289.tif 000025