(57)【要約】【課題】共有システムメモリを効率的に割当てるシステム、方法およびプログラムを提供する。【解決手段】まず、データ処理システムのメモリ一次割当てシステムからメモリ領域を取得する。このメモリ領域は複数の一定のサイズのメモリ・ブロックからなる。次にＡＰＩを介して、各プロセスから要求メモリ割当てサイズを表すデータを含むメモリ要求を受け取る。次いで、取得したメモリ・ブロックから各プロセスから受け取ったメモリ要求に応じたサイズのメモリを各プロセスに割り当てる。割り当てられたメモリのアドレスを各プロセスのアドレス空間で認識可能とする情報が発行される。また、割り当てた状態データは適切に保存される。【選択図】図２
2007141226.tif 000002
【特許請求の範囲】
【請求項１】
データ処理システムのメモリ一次割当てシステムから、複数の、一定のサイズのメモリ・ブロックからなるメモリ領域を取得する手段と、
各プロセスに必要なメモリと関連して複数のプロセスとインターフェイスをとる１つのアプリケーション・プログラム・インターフェイスと、
このアプリケーション・プログラム・インターフェイスを介して、前記複数のプロセスのそれぞれから、要求メモリ割当てサイズを表すデータをそれぞれ含む１つのメモリ要求を受け取る手段と、
前記複数のプロセスのそれぞれに、前記複数の取得したメモリ・ブロックから、受け取ったそれぞれの前記メモリ要求に応じたサイズのメモリの割り当てを行うメモリ割当て手段と、
このメモリ割当て手段によって前記プロセスに割り当てられたメモリの、前記プロセスのアドレス空間におけるアドレス情報を伝達する手段と
を有することを特徴とする共有メモリの割当てシステム。
【請求項２】
記憶装置と、
この記憶装置に、前記メモリ割当て手段によって実行されたメモリ割当てを表す状態データを伝達する手段と、
前記メモリ割当て手段が実行したメモリ割当て処理操作を選択的に復旧する再スタート手段と、
この再スタート手段にしたがって前記記憶装置から前記メモリ割当て手段に状態データを受け取る手段と
を、さらに、有することを特徴とする請求項１に記載の共有メモリの割当てシステム。
【請求項３】
前記記憶装置に保存されている状態データを、メモリの割当て解除に応じて更新する手段を、さらに、有することを特徴とする請求項２に記載の共有メモリの割当てシステム。
【請求項４】
複数のプロセスのそれぞれにメモリ管理システムをロードする手段を有する共有メモリの割当てシステムであって、
前記メモリ管理システムは、
データ処理システムのメモリ一次割当てシステムから、複数の、一定のサイズのメモリ・ブロックからなるメモリ領域を取得する手段と、
必要なメモリと関連して１つのプロセスとインターフェイスをとる１つのアプリケーション・プログラム・インターフェイスと、
このアプリケーション・プログラム・インターフェイスを介して、前記プロセスから、要求メモリ割当てサイズを表すデータをそれぞれ含む少なくとも１つのメモリ要求を受け取る手段と、
前記プロセスに、前記複数の取得したメモリ・ブロックから、受け取ったそれぞれの前記メモリ要求に応じたサイズのメモリの割当てを行うメモリ割当て手段と
を有することを特徴とする共有メモリの割当てシステム。
【請求項５】
前記メモリ割当て手段によって実行されたメモリ割当てを表す状態データを、前記メモリ一次割当てシステムと関連付けられた共有メモリ領域に保存する手段を、さらに、有することを特徴とする請求項４に記載の共有メモリの割当てシステム。
【請求項６】
前記メモリ一次割当てシステムと関連付けられた前記共有メモリ領域に保存されている前記メモリ割当てを表す状態データを、メモリの割当て解除に応じて更新する手段を、さらに、有することを特徴とする請求項５に記載の共有メモリの割当てシステム。
【請求項７】
データ処理システムのメモリ一次割当てシステムから、複数の、一定のサイズのメモリ・ブロックからなるメモリ領域を取得するステップと、
アプリケーション・プログラム・インターフェイスを介して、各プロセスに必要なメモリと関連して複数のプロセスとインターフェイスをとるステップと、
前記アプリケーション・プログラム・インターフェイスを介して、前記複数のプロセスのそれぞれから、要求メモリ割当てサイズを表すデータをそれぞれ含む１つのメモリ要求を受け取るステップと、
前記複数のプロセスのそれぞれに、前記複数の取得したメモリ・ブロックから、受け取ったそれぞれの前記メモリ要求に応じたサイズのメモリの割り当てを行うステップと、
前記プロセスに割り当てられたメモリの、前記プロセスのアドレス空間におけるアドレス情報を伝達するステップと
を含むことを特徴とする共有メモリの割当て方法。
【請求項８】
前記メモリ割当てステップによって実行されたメモリ割当てを表す状態データを記憶装置に伝達するステップと、
前記メモリ割当てステップで実行されたメモリ割当て処理操作を選択的に復旧する再スタートステップと、
この再スタートステップにしたがって前記記憶装置から割当て状態データを受け取るステップと
を、さらに、含むことを特徴とする請求項７に記載の共有メモリの割当て方法。
【請求項９】
前記記憶装置に保存されている状態データを、メモリの割当て解除に応じて更新するステップを、さらに、含むことを特徴とする請求項８に記載の共有メモリの割当て方法。
【請求項１０】
複数のプロセスのそれぞれにメモリ管理システムをロードするステップと、
データ処理システムのメモリ一次割当てシステムから、複数の、一定のサイズのメモリ・ブロックからなるメモリ領域を取得するステップと、
アプリケーション・プログラム・インターフェイスを介して、必要なメモリと関連して１つのプロセスとインターフェイスをとるステップと、
前記アプリケーション・プログラム・インターフェイスを介して、前記プロセスから、要求メモリ割当てサイズを表すデータをそれぞれ含む少なくとも１つのメモリ要求を受け取るステップと、
前記プロセスに、前記複数の取得したメモリ・ブロックから、受け取ったそれぞれの前記メモリ要求に応じたサイズのメモリの割当てを行うメモリ割当てステップと
を含むことを特徴とする共有メモリの割当て方法。
【請求項１１】
前記メモリ割当てステップによって実行されたメモリ割当てを表す状態データを、前記メモリ一次割当てシステムと関連付けられた共有メモリ領域に保存するステップを、さらに、含むことを特徴とする請求項１０に記載の共有メモリの割当て方法。
【請求項１２】
前記メモリ一次割当てシステムと関連付けられた前記共有メモリ領域に保存されている前記メモリ割当てを表す状態データを、メモリの割当て解除に応じて更新するステップを、さらに、含むことを特徴とする請求項１１に記載の共有メモリの割当て方法。
【請求項１３】
プロセッサに、
データ処理システムのメモリ一次割当てシステムから、複数の、一定のサイズのメモリ・ブロックからなるメモリ領域を取得する手順と、
アプリケーション・プログラム・インターフェイスを介して、各プロセスに必要なメモリと関連して複数のプロセスとインターフェイスをとる手順と、
前記アプリケーション・プログラム・インターフェイスを介して、前記複数のプロセスのそれぞれから、要求メモリ割当てサイズを表すデータをそれぞれ含む１つのメモリ要求を受け取る手順と、
前記複数のプロセスのそれぞれに、前記複数の取得したメモリ・ブロックから、受け取ったそれぞれの前記メモリ要求に応じたサイズのメモリの割り当てを行う手順と、
前記プロセスに割り当てられたメモリの、前記プロセスのアドレス空間におけるアドレス情報を伝達する手順と
を実行させることを特徴とする共有メモリの割当てプログラム。
【請求項１４】
プロセッサに、
前記メモリ割当て手順によって実行されたメモリ割当てを表す状態データを記憶装置に伝達する手順と、
前記メモリ割当て手順で実行されたメモリ割当て処理操作を選択的に復旧する再スタート手順と、
この再スタート手順にしたがって前記記憶装置から割当て状態データを受け取る手順と
を、さらに、実行させることを特徴とする請求項１３に記載の共有メモリの割当てプログラム。
【請求項１５】
プロセッサに、
前記記憶装置に保存されている状態データを、メモリの割当て解除に応じて更新する手順を、さらに、実行させることを特徴とする請求項１４に記載の共有メモリの割当てプログラム。
【請求項１６】
プロセッサに、
複数のプロセスのそれぞれにメモリ管理システムをロードする手順と、
データ処理システムのメモリ一次割当てシステムから、複数の、一定のサイズのメモリ・ブロックからなるメモリ領域を取得する手順と、
アプリケーション・プログラム・インターフェイスを介して、必要なメモリと関連して１つのプロセスとインターフェイスをとる手順と、
前記アプリケーション・プログラム・インターフェイスを介して、前記プロセスから、要求メモリ割当てサイズを表すデータをそれぞれ含む少なくとも１つのメモリ要求を受け取る手順と、
前記プロセスに、前記複数の取得したメモリ・ブロックから、受け取ったそれぞれの前記メモリ要求に応じたサイズのメモリの割当てを行うメモリ割当て手順と
を実行させることを特徴とする共有メモリの割当てプログラム。
【請求項１７】
プロセッサに、
前記メモリ割当て手順によって実行されたメモリ割当てを表す状態データを、前記メモリ一次割当てシステムと関連付けられた共有メモリ領域に保存する手順を、さらに、実行させることを特徴とする請求項１６に記載の共有メモリの割当てプログラム。
【請求項１８】
プロセッサに、
前記メモリ一次割当てシステムと関連付けられた前記共有メモリ領域に保存されている前記メモリ割当てを表す状態データを、メモリの割当て解除に応じて更新する手順を、さらに、実行させることを特徴とする請求項１７に記載の共有メモリの割当てプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、共有メモリを割り当てるシステム、方法およびプログラムに関し、特に、共有システムＲＡＭのブロックを割当てるシステム、方法およびプログラムに関する。
【背景技術】
【０００２】
多くのデータ処理環境においては、通常、プロセス間通信に共有メモリ（shared memory）が使用されている。共有メモリは、１つまたは複数のプロセスが、すべての仮想アドレス空間に現れる記憶領域（memory）を介して通信することを可能にする。Linuxなどの特定のオペレーティングシステムにおいては、共有メモリの使用を要求するプロセスは、システムコールによって要求される正確なサイズの共有メモリを得るとは限らない。共有メモリの割当て量は、一般に、要求量をページサイズの倍数に切り上げたものである。したがって、例えば、100バイトの共有メモリが要求されたときは、システムは4,096バイトの共有メモリを割り当てる。システムはページサイズの倍数に切り上げた量の共有メモリの割当てを行うため、ページサイズ4,096バイトよりも大きな要求量、例えば5,000バイトの共有メモリが要求されたときは、2×4,096 = 8,192バイトの共有メモリが割り当てられる。このような共有メモリの割当ての結果、システムメモリのかなりの部分が無駄になる。
【０００３】
したがって、共有システムメモリを効率的に割当てるシステム、方法およびプログラムが必要とされている。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
本発明は、上記の従来の問題点に鑑みてなされたもので、共有メモリを効率的に割当てるシステム、方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００５】
本発明による共有メモリの割当てシステムは、データ処理システムのメモリ一次割当てシステムから、複数の、一定のサイズのメモリ・ブロックからなるメモリ領域を取得する手段と、各プロセスに必要なメモリと関連して複数のプロセスとインターフェイスをとる１つのアプリケーション・プログラム・インターフェイス（以下、ＡＰＩという）と、このＡＰＩを介して、前記複数のプロセスのそれぞれから、要求メモリ割当てサイズを表すデータをそれぞれ含む１つのメモリ要求を受け取る手段と、前記複数のプロセスのそれぞれに、前記複数の取得したメモリ・ブロックから、受け取ったそれぞれの前記メモリ要求に応じたサイズのメモリの割り当てを行うメモリ割当て手段と、このメモリ割当て手段によって前記プロセスに割り当てられたメモリの、前記プロセスのアドレス空間におけるアドレス情報を伝達する手段とを有する。本発明による共有メモリの割当てシステムは、記憶装置と、この記憶装置に、前記メモリ割当て手段によって実行されたメモリ割当てを表す状態データを伝達する手段と、前記メモリ割当て手段が実行したメモリ割当て処理操作を選択的に復旧する再スタート手段と、この再スタート手段にしたがって前記記憶装置から前記メモリ割当て手段に状態データを受け取る手段とを、さらに、有する。本発明による共有メモリの割当てシステムは、さらに、前記記憶装置に保存されている状態データを、メモリの割当て解除に応じて更新する手段を有する。
【０００６】
また、本発明による共有メモリの割当てシステムは、複数のプロセスのそれぞれにメモリ管理システムをロードする手段を有する共有メモリの割当てシステムであって、前記メモリ管理システムは、データ処理システムのメモリ一次割当てシステムから、複数の、一定のサイズのメモリ・ブロックからなるメモリ領域を取得する手段と、必要なメモリと関連して１つのプロセスとインターフェイスをとる１つのＡＰＩと、このＡＰＩを介して、前記プロセスから、要求メモリ割当てサイズを表すデータをそれぞれ含む少なくとも１つのメモリ要求を受け取る手段と、
前記プロセスに、前記複数の取得したメモリ・ブロックから、受け取ったそれぞれの前記メモリ要求に応じたサイズのメモリの割当てを行うメモリ割当て手段とを有する。本発明による共有メモリの割当てシステムは、前記メモリ割当て手段によって実行されたメモリ割当てを表す状態データを、前記メモリ一次割当てシステムと関連付けられた共有メモリ領域に保存する手段を、さらに、有する。本発明による共有メモリの割当てシステムは、さらに、前記メモリ一次割当てシステムと関連付けられた前記共有メモリ領域に保存されている前記メモリ割当てを表す状態データを、メモリの割当て解除に応じて更新する手段を有する。
【発明の効果】
【０００７】
本発明によれば、共有メモリを効率的に割当てるシステム、方法およびプログラムが提供される。その結果、従来、共有メモリの割当てにおいて、かなりの部分が無駄になっていた共有メモリを有効に利用することが可能となる。また、無駄のない共有メモリの割当てを行うことによって、必要とする共有システムメモリのリソースを低減することが可能となる。さらに、本発明によれば、給電停止等の原因で状態が変化した
メモリ割当ての復旧を速やかに行うことができる。
【発明を実施するための最良の形態】
【０００８】
本発明は、共有メモリを割り当てるシステム、方法およびプログラムに関し、特に、共有システムＲＡＭのブロックを割当てるシステム、方法およびプログラムに関する。
【０００９】
以下、適宜、図面を参照しながら本発明による実施形態の説明を行う。図１は本発明による実施形態であるシステムの構成例を示すブロック図である。図１に示すシステム１００は、本明細書において以後、副割当て（sub-allocation）サーバ１０２とも呼ぶ、共有メモリ副割当てサーバプロセス１０２を有する。一実施形態においては、副割当てサーバ１０２は、共有システムメモリを管理するスタンドアローンのプロセスとして具体化することができる。また、副割当てサーバ１０２は、図４を参照して後に詳しく説明するように、要求するクライアント・サービスのコンポーネントとして一体化される実施形態もある。副割当てサーバ１０２は、図１に共有メモリセグメント１０４として示した、共有システムメモリからメモリを取得する機能を実行する。共有システムメモリは、メモリ一次割当てシステム、例えばオペレーティングシステムから取得する。共有システムメモリは、複数のクライアント・プロセスによって使用することができる、本技術分野で知られている任意の共有メモリでよい。一実施形態において、副割当てサーバ１０２は、サーバ１０２がクライアント・プロセスによって要求されたメモリ量に対応するサイズのブロックにスライス、すなわち分割する、まとまった量の共有メモリセグメント１０４を、取得する。共有メモリは、例えば、複数のプロセスの間で共有することができる仮想または現実のＲＡＭである。
【００１０】
共有メモリセグメント１０４は、副割当てサーバ１０２のアドレス空間にマップされると都合がよい。副割当てサーバ１０２は、メモリの動的な割当てに使用されるメモリ領域を管理するマネジャー・ユニット１１２を含み、メモリのブロックは任意の順序で割り当てられ解放され、ブロックの割り当てパターンとサイズは実行するまで知ることができない。ここで、本明細書においては、セグメントという用語を、一定のサイズ、例えば4,096バイトの共有メモリの一部分を指すために用いる。また、ブロックという用語は、本明細書においては、クライアント・プロセスによって要求されるメモリ量によって指示されるサイズを有する共有メモリの部分を指すために用い、ブロックのサイズは、１つのセグメントのサイズより大きくてもよく、小さくてもよい。マネジャー・ユニット１１２は、共有メモリセグメント１０４内のフリーブロック、すなわち使われていないブロックを見つけ、そのブロックをクライアント・プロセスに割り当てる。
【００１１】
図１にクライアント・プロセス１０８とクライアント・プロセス１１０として例示したクライアント・プロセス間のやり取りを容易にするために、システム１００は、ヘルパ・ライブラリ１０６を使用する。ヘルパ・ライブラリ１０６は、クライアント・プロセス１０８、１１０に対するインターフェイスを提供する。クライアント・プロセスに提供されるインターフェイスは、例えば、本技術分野で知られている１つまたは複数のＡＰＩ（application program interface；以後、ＡＰＩということがある。）からなる。ＡＰＩは、後述する動作にしたがった、共有メモリ・ブロックの割当てと解放に適応している。一実施形態においては、副割当てサーバ１０２とクライアント・プロセス１０８、１１０との間の通信は、メッセージキューやソケットなどを介して達成される。
【００１２】
本発明による実施形態であるシステムの動作に関しては、後ほど図２ないし図４を参照しながら詳細な説明を行うが、ここでは概要の説明を行っておく。まず、副割当てサーバ１０２がクライアント・プロセス１０８、１１０から独立している実施形態における動作概要を説明する。クライアント・プロセス１０８、１１０は、ヘルパ・ライブラリ１０６をロードし、メモリの共有ブロックを割り当て、または解放するためにＡＰＩを呼び出す。次に、ヘルパ・ライブラリ１０６は、副割当てサーバ１０２によって割り当てられるメモリの共有ブロックを割り当て、または解放するために、副割当てサーバ１０２と通信する。クライアント・プロセス１０８、１１０は、クライアント・プロセスからは見ることができない共有メモリの具体的な実装を知ることなく、ヘルパ・ライブラリ１０６とだけやり取りする。クライアント・プロセス１０８、１１０は、要求した結果として割り当てられる共有メモリ・ブロックの開始アドレスだけを必要とする。副割当てサーバ１０２がクライアント・プロセス１０８、１１０から独立している実施形態においては、副割当てサーバ１０２によって共有メモリ・ブロックに提供される開始アドレスは、クライアント・プロセス１０８、１１０によって使われるアドレス空間によっては認識できない。ヘルパ・ライブラリ１０６は、したがって、副割当てサーバ１０２のアドレス空間から要求クライアント１０８、１１０のアドレス空間への変換を容易にするために使用される。
【００１３】
このアドレス空間の変換を可能にするため、副割当てサーバ１０２は、新しいブロックが割り当てられる共有セグメントの識別情報と、この共有セグメント内で前記の新しいブロックが始まるオフセット情報とを含むペアを発行する。このような方法で、副割当てサーバ１０２は、共有メモリセグメント１０４を、複数のクライアント・プロセスが共有メモリの同じセグメントを使用することができるように、複数のブロックに薄切りする（slice）ことができ、このことによって共有システムメモリ全体の利用効率が向上する。共有メモリの割り当てが成功したときには、ヘルパ・ライブラリ１０６は副割当てサーバ１０２からペアを受け取り、このペアを要求クライアント装置１０８、１１０が理解できるメモリアドレスに変換する。当業者であれば、ヘルパ・ライブラリ１０６が、アドレス空間の変換を有効にする、実装形態に依存しないインターフェイスをクライアントに有効に提供できることを理解するであろう。
【００１４】
副割当てサーバ１０２から受け取ったペアを変換するために、ヘルパ・ライブラリ１０６は、発行されたセグメント識別情報によって特定される共有メモリセグメント１０４を、クライアント・プロセス１０８、１１０のアドレス空間におけるアドレスＸにマップ、すなわち写像する。次に、ヘルパ・ライブラリ１０６は、アドレスＸにオフセットの値を加えることによって、新しいブロックの開始アドレスＹを計算する。計算された開始アドレスＹは、共有メモリを要求したクライアント・プロセス１０８、１１０にとっての新しいブロックの開始アドレスを表す。メモリ・ブロックを割り当て、解放する間、それぞれの割当てブロックと解放ブロックの一方、または両方を表す状態データが持続性のある記憶装置１１４に保持されることが好ましい。記憶装置１１４は、給電が止まったとしても、データを保持することができる不揮発性記憶装置であることが好ましい。記憶装置１１４は、例えば、共有メモリ領域やメモリ・マップ・ファイルのセグメントなどである。記憶装置１１４は、副割当てサーバ１０２に通信可能に接続されている。サーバ１０２がメモリ・ブロックを割り当てるかまたは解放する際に割当てか解放を表すデータが、記憶装置１１４に保存される。副割当てサーバ１０２は、例えばメモリ・ブロックの割当てまたは可用性を表す状態データなどの副割当てサーバ１０２の動的データ構造や、マネジャー・ユニット１１２のデータ構造などを、記憶装置１１４に割り当てる。給電停止や他の終了事象が起きた場合に副割当てサーバ１０２の再スタートを可能にするために、副割当てサーバ１０２は、記憶装置にある状態データを含むデータ構造の割当てを制御する。
【００１５】
一実施形態によれば、副割当てサーバ１０２は、使用するそれぞれの動的なデータ構造ごとに割当てアドレスを指定し、各データ構造は指定されたアドレスに割り当てられる。副割当てサーバ１０２が異常終了したときは、副割当てサーバ１０２を元の状態に復帰させるために、指定されたアドレス情報が使用される。したがって、再スタートする場合には、副割当てサーバ１０２は記憶装置から状態データや他のデータ構造を取り出し、取り出したデータによって共有メモリ・ブロックを要求クライアント・プロセスに割り当てる処理を継続することができる。
【００１６】
他の実施形態においては、副割当てサーバ１０２は、共有メモリ１０４を用いるそれぞれのクライアント・プロセス１０８、１１０によって動的にロードされるイン・プロセスの（in-process）コンポーネントとして使用される。すなわち、副割当てサーバ１０２がクライアント・プロセス１０８、１１０と一体化している。この実施形態においては、共有メモリ・ブロックに対するそれぞれの割当てまたは解放操作がローカルに実行されるため、ヘルパ・ライブラリ１０６を使用する必要がなく、副割当てサーバ１０２のアドレス空間からクライアント・プロセス１０８、１１０のアドレス空間１０８への変換が必要なくなる。さらに、各クライアント・プロセス１０８、１１０のそれぞれのアドレス空間で動作する副割当てサーバ１０２は、ブロック情報、すなわち状態データを保持するために必要なデータ構造にアクセス可能である。この場合、各クライアント・プロセスが前記の情報にアクセス可能である必要があるため、割当て情報は、共有メモリ１０４を使用し、記憶装置１１４を必要としない、各クライアント・プロセス１０８、１１０からアクセス可能な共有メモリ領域やメモリ・マップ・ファイルなどに保存される。この実施形態においては、割当て操作と解放操作はクライアント・プロセス１０８、１１０全体にわたって共有される。
【００１７】
ここで、システム１００は、以上説明を行った処理等を行うため、プロセッサ、ＲＯＭ、ＲＡＭ、オペレーティングシステム等からなるプラットフォームを備えている。
【００１８】
次に、図２ないし図４を参照しながら、本発明による実施形態における動作を説明する。図２に、本発明による実施形態において、ＲＡＭを割り当てるサーバ側の動作を説明するためのフローチャートを示す。最初にＳ２０２で、副割当てサーバ１０２は、共有メモリ１０４のセグメントを取得する。共有メモリ１０４のセグメントは、メモリ一次割当てシステム、例えばオペレーティングシステムから取得する。共有メモリ１０４の副割当てサーバ１０２によって取得された部分は、サーバ１０２によって所持される。副割当てサーバ１０２は、Ｓ２０４で、クライアント・プロセス１０８からメモリを求める要求を受け取る。クライアント・プロセスからの共有メモリの使用に関する要求には、例えば１バイトから数百万バイトの、必要メモリサイズが含まれている。ここで、一実施形態においては、副割当てサーバ１０２が受け取る共有メモリの使用に関する要求は、ヘルパ・ライブラリ１０６を介してクライアント・プロセス１０８から受け取られる。他の実施形態においては、イン・プロセスのコンポーネントとして機能する副割当てサーバ１０２は、クライアント・プロセス１０８から共有メモリの使用に関する要求を、直接、受け取る。
【００１９】
Ｓ２０６で、副割当てサーバ１０２は、取得した共有メモリ１０４の一部分をクライアント・プロセスから要求されたサイズと等しいサイズのブロックに割り当てる。したがって、例えば、複数のブロックを１つのセグメントからスライスして、複数のプロセスが共有メモリの同一セグメントを使用できるようにすることができる。受け取った共有システムメモリの要求に対応するメモリのブロックを割り当てた後で、処理はＳ２０８に進む。Ｓ２０８では、副割当てサーバ１０２は、割り当てたメモリを特定するペアを要求クライアント・プロセスに発行する。このペアは、例えば、ブロックの割当て元の共有セグメントを識別する情報と、この共有セグメント内で新しいブロックが始まるオフセット値を表す。ペアは、例えば、図３を参照しながら詳しく説明する、ヘルパ・ライブラリに発行され送られる。ペアの発行に続いて、処理はＳ２１０に進む。Ｓ２１０においては、副割当てサーバ１０２が異常終了した場合に各メモリ・ブロックの割当て記録を保持するために、メモリ・ブロックの割当てに対応する割当て状態データが、記憶装置１１４に保存される。他の実施形態においては、割当て状態データは、図４に示され、後に詳しく述べるように、他のクライアント・プロセスによってアクセス可能な共有メモリの部分に保存される。
【００２０】
次に図３を参照しながらメモリの割当て動作を説明する。図３は、本発明による実施形態において、副割当てサーバ１０２が、共有メモリ１０４の割当てを要求するクライアント・プロセス１０８、１１０から独立している場合の、副割当てサーバ１０２によるメモリの割当て動作を説明するためのフローチャートである。先ずＳ３０２で、クライアント・プロセス１０８、１１０は、本技術分野で知られている任意の手段によってヘルパ・ライブラリ１０６をロードする。前述したように、ヘルパ・ライブラリ１０６は、要求クライアント・プロセスと副割当てサーバ１０２の間のインターフェイスを提供する。次にＳ３０４で、クライアント・プロセス１０８、１１０は、共有メモリの割り当てを求めて、ヘルパ・ライブラリ１０６を介して副割当てサーバ１０２に共有メモリの要求を出す。割当て要求には、要求するプロセスによって必要とされる共有メモリのサイズを表すデータが含まれる。Ｓ３０６で、共有メモリ要求は、本技術分野で知られている任意の手段によって副割当てサーバ１０２に伝達される。適切な伝達手段としては、メッセージキューやソケットなどがあるが、これらの手段に限定されるわけではない。
【００２１】
Ｓ３０８で、副割当てサーバ１０２に組み込まれたマネジャー・ユニット１１２が、要求クライアント・プロセスに、メモリ要求に含まれるサイズに対応するサイズのブロックを割り当てる。割当て処理は、共有メモリ１０４の１または複数のセグメントを薄切りする処理（slicing）を含み、この処理によって要求クライアント・プロセス１０８、１１０が必要とするサイズのブロックが作り出される。次に、副割当てサーバ１０２は、Ｓ３１０で、ブロックの割当て元の共有メモリセグメントを特定する情報と、そのセグメント内で新しい割当てブロックが始まる場所を示す共有セグメント内のオフセット値とを含むペアを生成する。次にＳ３１２で、生成されたペアは、本技術分野で知られている任意の適切な手段によってヘルパ・ライブラリ１０６に送られる。ヘルパ・ライブラリ１０６は、要求クライアント・プロセス１０８、１１０との通信およびやり取りを可能にするＡＰＩを含み、受け取ったペアを、Ｓ３１４で、副割当てサーバ１０２によって使用されるアドレス空間から要求クライアント・プロセスにより認識できるアドレス空間に変換する。変換を容易にするために、ヘルパ・ライブラリ１０６は、まず、発行されたセグメント特定情報によって識別される共有セグメントを、要求クライアント・プロセスのアドレス空間のアドレスＸにマップする。ヘルパ・ライブラリ１０６は、次に、受け取ったペアに含まれるオフセット値をアドレスＸに加えることによって新しく割り当てられたブロックの開始アドレスＹを計算する。この結果、要求クライアント・プロセスによって認識できるメモリアドレスに変換される。ヘルパ・ライブラリ１０６によって、要求クライアント・プロセスによって認識できるように変換されたメモリアドレスは、Ｓ３１６で、要求クライアント・プロセスに送られる。
【００２２】
次に、Ｓ３１８で、メモリが割当てられている状態を表す情報、すなわち副割当てサーバ１０２によって使用される動的なデータ構造が、記憶装置１１４に保存される。前記のデータ構造は、例えば、使われていない自由なメモリ・ブロックと割り当てられたメモリ・ブロックを表す状態データや、マネジャー・ユニット１１２のデータ構造などを含む。次に、処理はＳ３２０に進み、副割当てサーバ１０２の処理操作が中断されたかどうか判断される。副割当てサーバ１０２の処理操作が中断されたと判断されると、処理はＳ３２２に進み、メモリ割当て状態情報が記憶装置１１４から取り出され、副割当てサーバ１０２は、保存されていた状態情報を用いて再初期化される。次に、処理はＳ３２４に進み、副割当てサーバ１０２は、クライアント・プロセス１０８、１１０が、割り当てられていた共有メモリ・ブロックを解放したか否かを判断する。クライアント・プロセスがもはやメモリを使用しておらず、メモリを解放しているときは、Ｓ３２６で、記憶装置１１４のメモリ割当て状態情報が割当て解除を反映するように更新され、解放されたメモリは他の要求クライアント・プロセスに割当て可能な状態に戻る。
【００２３】
Ｓ３２０に戻り、処理操作が中断されなかったとき、処理はＳ３２４に進み、メモリが要求クライアント・プロセスによって解放されたか否かが判断される。メモリが解放されていないときには、処理はＳ３２０に戻る。メモリが解放されているときには、処理はＳ３２６に進み、メモリ割当て状態情報が更新され処理が終了する。
【００２４】
次に図４を参照しながらメモリを割り当てる他の動作を説明する。図４は、本発明による他の実施形態におけるメモリの割当て動作、すなわち副割当てサーバ１０２が、共有メモリ１０４の割当てを要求するクライアント・プロセス１０８、１１０と一体化されている場合、換言すれば副割当てサーバ１０２のイン・プロセス（in-process）の、メモリの割当て動作を説明するためのフローチャートである。先ずＳ４０２で、共有メモリセグメントを、メモリ一次割当てシステム、例えばオペレーティングシステムから取得する。次いでＳ４０４で、クライアント・プロセス、例えばクライアント・プロセス１０８は、共有副割当てライブラリをロードする。本実施形態においては、この共有副割当てライブラリは、クライアント・プロセス１０８によってそのアドレス空間に動的にロードされるイン・プロセスのコンポーネントである。メモリ・ブロック割当て情報を保持する役割のデータ構造には、それぞれのクライアント・プロセス１０８、１１０がアクセスできる。割当て情報は、副割当てライブラリを動的にロードする各クライアント・プロセス１０８、１１０がアクセスできるように、例えば、共有メモリ領域の一部に保存される。
【００２５】
次にＳ４０６で、副割当てライブラリは、Ｓ４０２で取得した共有メモリについてブロックを割り当てる。続いてＳ４０８で、副割当てライブラリによって、クライアント・プロセス１０８から要求されたサイズに対応するサイズのブロックを、要求したクライアント・プロセス１０８に割り当てる。Ｓ４１０で、前述したように、割当て状態情報が、共有メモリ、または写像されたメモリ・ファイル（a mapped memory file）に保存される。次に、処理はＳ４１２に進み、要求クライアント・プロセス１０８に割り当てられたメモリ・ブロックが解放されたか否かが判断される。ブロックが未だ解放されていないときには、メモリ・ブロックが要求クライアント・プロセス１０８によって使用されなくなり解放されたと判断されるまでＳ４１２に戻る処理が繰り返される。割り当てられたメモリ・ブロックが、クライアント・プロセス１０８によって解放されたときには、処理はＳ４１４に進む。Ｓ４１４で、解放されたブロックは副割当てライブラリによって割当てが解除され、これに対応して共有メモリ内に保存されている割当て状態情報が更新され、処理は終了する。
【００２６】
本発明は、ソースコード、オブジェクトコード、部分的にコンパイルされた形のようなコード中間ソースおよびオブジェクトコードの形、あるいは本発明の実施形態で使用するために適した任意の他の形のコンピュータプログラムに適用される。コンピュータプログラムは、独立アプリケーション、ソフトウエアコンポーネント、スクリプト、または他のアプリケーションへのプラグインとすることができる。本発明を組み込むコンピュータプログラムは、例えば、ＲＯＭやＲＡＭなどの記憶媒体、ＣＤ−ＲＯＭなどの光記録媒体、フロッピー（登録商標）ディスクなどの磁気記録媒体などの、コンピュータプログラムを伝達することができる任意の実体または装置である担体で実施することができる。担体は、電気ケーブルまたは光ケーブルによって、または無線や他の手段によって伝えられる電気信号や光信号などの任意の伝達可能な担体である。コンピュータプログラムは、サーバからインターネットを介して適切にダウンロードされる。コンピュータプログラムの機能は集積回路に組み込むこともできる。示した本発明の原理を実質的にコンピュータまたはプロセッサに実行させるコードを含む任意およびすべての実施形態は、本発明の範囲内にある。
【００２７】
本発明の好ましい実施形態の以上の説明は、例示と説明のために行った。説明は網羅的でもなく本発明を開示した形態に限定しようとするものでもない。すなわち、説明を行った実施形態においては本発明をソフトウェアで実現しているが、以上の教示を鑑みて明らかな修正または変形が可能である。例えば、本発明は、ハードウェアあるいはソフトウェアとハードウェアの組み合わせによって具体化することもできる。説明を行った実施形態は、本発明の原理とその実際的な応用例を最もよく示し、それにより当業者が、本発明を、意図された特定の使用に適した様々な実施形態において様々な修正で使用できるように選択され説明された。そのようなすべての修正と変形は、特許請求の範囲の記載に明示されるとおりの本発明の原理および範囲内において、当業者によって行われ得ることは明らかであり、特許請求の範囲の記載によって定められる発明の範囲内にある。
【図面の簡単な説明】
【００２８】
【図１】本発明による実施形態であるシステムの構成例を示すブロック図である。
【図２】本発明による実施形態においてメモリを割り当てるサーバ側の動作例を示すフローチャートである。
【図３】本発明による実施形態においてメモリを割り当てる動作例を示すフローチャートである。
【図４】本発明による他の実施形態においてメモリを割り当てる動作例を示すフローチャートである。
【符号の説明】
【００２９】
１００  システム
１０２  副割当てサーバ、共有メモリ副割当てサーバプロセス
１０４  共有メモリセグメント、共有メモリ
１０６  ヘルパ・ライブラリ
１０８、１１０  クライアント・プロセス
１１２  マネジャー・ユニット
１１４  記憶装置
【図１】
2007141226.tif 000003
【図２】
2007141226.tif 000004
【図３】
2007141226.tif 000005
【図４】
2007141226.tif 000006