(57)【要約】【課題】共有データを効率よく管理する。【解決手段】データを管理する管理装置であって、データを記憶するデータ記憶部と、それぞれがデータへのポインタを登録するためのエントリを記憶する複数のエントリ記憶部と、データの登録指示を受けた場合に、複数のエントリ記憶部の中から空エントリを有するエントリ記憶部を検索して、検索したエントリ記憶部に登録対象のデータへのポインタを登録すると共に、登録対象のデータに対応付けて、検索したエントリ記憶部の識別情報をデータ記憶部に格納する複数の登録部と、を備える管理装置を提供する。【選択図】図１
2010102654.tif 000002
【特許請求の範囲】
【請求項１】
データを管理する管理装置であって、
データを記憶するデータ記憶部と、
それぞれがデータへのポインタを登録するためのエントリを記憶する複数のエントリ記憶部と、
データの登録指示を受けた場合に、前記複数のエントリ記憶部の中から空エントリを有するエントリ記憶部を検索して、検索した前記エントリ記憶部に登録対象のデータへのポインタを登録すると共に、登録対象のデータに対応付けて、検索した前記エントリ記憶部の識別情報を前記データ記憶部に格納する複数の登録部と、
を備える管理装置。
【請求項２】
登録されたデータの削除指示を受けた場合に、削除対象のデータに対応付けられた識別情報を前記データ記憶部から取得して、前記識別情報により特定される前記エントリ記憶部から削除対象のデータへのポインタを削除する複数の削除部を備える請求項１に記載の管理装置。
【請求項３】
２以上の前記登録部のそれぞれは、データの登録指示を受けた場合に、前記複数のエントリ記憶部を互いに異なる順序で検索する請求項２に記載の管理装置。
【請求項４】
２以上の前記登録部のそれぞれは、データの登録指示を受けた場合に、前記複数のエントリ記憶部を、それぞれの前記登録部に固有の固有情報から算出した順序で検索する請求項２から３のいずれかに記載の管理装置。
【請求項５】
２以上の前記登録部のそれぞれは、参照毎に変化し、または参照時刻に応じて変化する値を取得して、取得した値から前記固有情報を生成する請求項４に記載の管理装置。
【請求項６】
２以上の前記登録部のそれぞれは、データの登録指示を受けた場合に、前記複数のエントリ記憶部のうち、少なくとも２以上のエントリ記憶部を含む互いに異なる組の中から空エントリを有するエントリ記憶部を検索する請求項２から５のいずれかに記載の管理装置。
【請求項７】
２以上の前記登録部のそれぞれは、データの登録指示を受けた場合に、それぞれの前記登録部に固有の固有情報から決定した少なくとも２以上のエントリ記憶部を含む組の中から空エントリを有するエントリ記憶部を検索する請求項２から６のいずれかに記載の管理装置。
【請求項８】
２以上の前記登録部のそれぞれは、データの登録指示を受けた場合に、前記エントリ記憶部の識別情報の値を前記エントリ記憶部の数で割った商または余りが、それぞれの前記登録部に固有の固有情報を前記エントリ記憶部の数で割った商または余りと一致する少なくとも２以上のエントリ記憶部を含む組の中から空エントリを有するエントリ記憶部を検索する請求項２から７のいずれかに記載の管理装置。
【請求項９】
前記複数のエントリ記憶部のそれぞれは、複数の前記エントリの配列、および未登録の先頭エントリを識別する識別情報を記憶し、
それぞれの前記登録部は、データの登録指示を受けた場合に、前記未登録の先頭エントリの識別情報をアトミックに更新する
請求項２から８のいずれかに記載の管理装置。
【請求項１０】
前記複数のエントリ記憶部のそれぞれは、不使用エントリのリストを更に記憶し、
それぞれの前記削除部は、登録されたデータの削除指示を受けた場合に、当該データを前記配列から削除すると共に、当該データを登録していた前記配列のエントリを、前記不使用エントリのリストにアトミックに追加する
請求項９に記載の管理装置。
【請求項１１】
前記複数のエントリ記憶部および予備のエントリ記憶部を管理する管理情報を記憶する管理情報記憶部を更に備え、
前記複数の登録部のそれぞれは、空エントリを有するエントリ記憶部を検出できなかった場合に、前記予備のエントリ記憶部を前記複数のエントリ記憶部に追加して、追加した前記エントリ記憶部に登録対象のデータへのポインタを登録する
請求項１から１０のいずれかに記載の管理装置。
【請求項１２】
前記複数の登録部のそれぞれは、空エントリを有するエントリ記憶部を検出できなかった場合に、前記エントリ記憶部の数がより多い新たな複数のエントリ記憶部を生成して、元の前記複数のエントリ記憶部の内容をコピーする
請求項１から１１のいずれかに記載の管理装置。
【請求項１３】
前記複数のエントリ記憶部を探索して各データのポインタを列挙し、列挙中にデータの登録または削除があった場合には例外を発生する列挙部を更に備える請求項１から１２のいずれかに記載の管理装置。
【請求項１４】
データを管理する管理装置であって、
それぞれがデータを登録するためのエントリを有する複数のエントリ記憶部と、
データの登録指示を受けた場合に、前記複数のエントリ記憶部を互いに異なる順序で検索して、空エントリを有する前記エントリ記憶部に新たなデータを登録する複数の登録部と、
を備える管理装置。
【請求項１５】
前記複数の登録部のそれぞれは、データの登録指示を受けた場合に、前記複数のエントリ記憶部のうち、少なくとも２以上のエントリ記憶部を含む互いに異なる組の中から空エントリを有するエントリ記憶部を検索する請求項１４に記載の管理装置。
【請求項１６】
データを管理する管理装置であって、
データを記憶するデータ記憶部と、
データへのポインタを登録するための複数のエントリの配列、未登録の先頭エントリを識別する識別情報、および不使用エントリのリストを記憶する複数のエントリ記憶部と、
データの登録指示を受けた場合に、前記複数のエントリ記憶部の中から空エントリを有するエントリ記憶部を検索して、検索した前記エントリ記憶部の前記配列に登録対象のデータへのポインタを登録し、前記未登録の先頭エントリの識別情報をアトミックに更新すると共に、登録対象のデータに対応付けて、検索した前記エントリ記憶部の識別情報を前記データ記憶部に格納する複数の登録部と、
登録されたデータの削除指示を受けた場合に、削除対象のデータに対応付けられた識別情報を前記データ記憶部から取得して、前記識別情報により特定される前記エントリ記憶部の前記配列から削除対象のデータへのポインタを削除すると共に、当該データを登録していた前記配列のエントリを、前記不使用エントリのリストにアトミックに追加する複数の削除部と、
を備え、
２以上の前記登録部のそれぞれは、データの登録指示を受けた場合に、前記複数のエントリ記憶部を、それぞれの前記登録部に固有の固有情報から算出した互いに異なる順序で検索する
管理装置。
【請求項１７】
コンピュータを、データを管理する管理装置として機能させるための管理プログラムであって、
前記コンピュータを、
データを記憶するデータ記憶部と、
それぞれがデータへのポインタを登録するためのエントリを記憶する複数のエントリ記憶部と、
データの登録指示を受けた場合に、前記複数のエントリ記憶部の中から空エントリを有するエントリ記憶部を検索して、検索した前記エントリ記憶部に登録対象のデータへのポインタを登録すると共に、登録対象のデータに対応付けて、検索した前記エントリ記憶部の識別情報を前記データ記憶部に格納する複数の登録部と、
として機能させる管理プログラム。
【請求項１８】
コンピュータを、データを管理する管理装置として機能させるための管理プログラムであって、
前記コンピュータを、
それぞれがデータを登録するためのエントリを有する複数のエントリ記憶部と、
データの登録指示を受けた場合に、前記複数のエントリ記憶部を互いに異なる順序で検索して、空エントリを有する前記エントリ記憶部に新たなデータを登録する複数の登録部と、
して機能させる管理プログラム。
【請求項１９】
コンピュータによりデータを管理する管理方法であって、
前記コンピュータのデータ記憶部に、データを記憶させるデータ記憶段階と、
前記コンピュータの複数のエントリ記憶部に、それぞれがデータへのポインタを登録するためのエントリを記憶させるエントリ記憶段階と、
前記コンピュータにより、データの登録指示を受けた場合に、前記複数のエントリ記憶部の中から空エントリを有するエントリ記憶部を検索して、検索した前記エントリ記憶部に登録対象のデータへのポインタを登録すると共に、登録対象のデータに対応付けて、検索した前記エントリ記憶部の識別情報を前記データ記憶部に格納する複数の登録段階と、
を備える管理方法。
【請求項２０】
コンピュータによりデータを管理する管理方法であって、
前記コンピュータの複数のエントリ記憶部に、それぞれがデータを登録するためのエントリを有するエントリ記憶段階と、
前記コンピュータにより、データの登録指示を受けた場合に、前記複数のエントリ記憶部を互いに異なる順序で検索して、空エントリを有する前記エントリ記憶部に新たなデータを登録する複数の登録段階と、
を備える管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを管理する管理装置、管理プログラム、および管理方法に関する。
【背景技術】
【０００２】
近年、ＣＰＵのマルチスレッド化、マルチコア化、およびサーバに搭載されるＣＰＵ数の増加に伴って、サーバ上で並行して実行可能なハードウェアスレッド数が増加している。一例として、エントリサーバでも、６４ハードウェアスレッドを実現しうる。サーバ上でデータを一元管理するために、複数のハードウェアスレッドのそれぞれからアクセス可能な共有データが用いられる。
【０００３】
排他制御により同時に単一のスレッドが共有データをアクセス可能とすることにより、共有データの整合性が保たれる。ハードウェアスレッドの数が増加すると、共有データの排他制御が競合しやすくなり、ボトルネックとなる。すなわち、あるスレッドが排他制御をしている間、共有データをアクセスする他のスレッドが待たされる。また、競合を処理するためのオーバヘッドも増加する。
【０００４】
このようなオーバヘッドの一例としては、コンペア・アンド・スワップ（compare and swap）が成功するまでスピン・ウェイト（spin wait）することにより消費されるＣＰＵ時間、および、ライブラリまたはＯＳがスレッドの待ち行列を生成するための処理時間が挙げられる。共有データを効率良く実装できるデータ構造の一例として、"Non blocking hash map"が提案されている（非特許文献１−３）。
【非特許文献１】Cliff Click、"A Lock-Free Hash Table"、[online]、２００７年５月８日、AZUL SYSTEMS、［平成２０年１０月３日検索］、インターネット＜URL: http://www.azulsystems.com/events/javaone_2007/2007_LockFreeHash.pdf＞
【非特許文献２】Cliff Click、"A Lock-Free Wait-Free Hash Table"、[online]、２００７年２月２１日、Stanford University Computer Systems Laboratory EE380 Colloquium、［平成２０年１０月３日検索］、インターネット＜URL: http://www.stanford.edu/class/ee380/Abstracts/070221.html＞
【非特許文献３】Cliff Click、"A Fast Lock-Free Hash Table"、[online]、２００７年２月２１日、JavaOne Online Technical Sessions、［平成２０年１０月３日検索］、インターネット＜URL: http://developers.sun.com/learning/javaoneonline/2007/pdf/TS-2862.pdf＞
【発明の開示】
【発明が解決しようとする課題】
【０００５】
共有データの使い方の例として、複数のスレッドのそれぞれが、新規データの登録、登録したデータの削除、および登録したデータの列挙をすることが挙げられる。例えば、サーバは、外部の機器から接続要求を受信した場合に接続要求に関する情報を共有データに登録して、接続が終了した場合に当該情報を削除して、登録された全ての接続を処理するために各接続を列挙する。非常に多くのハードウェアスレッドを用いて、データの登録及び／又は削除が頻発するアプリケーションを実行する場合、データの登録及び／又は削除についても高いスループットおよびスケーラビリティを実現することが望まれる。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、本発明の第１の態様においては、データを管理する管理装置であって、データを記憶するデータ記憶部と、それぞれがデータへのポインタを登録するためのエントリを記憶する複数のエントリ記憶部と、データの登録指示を受けた場合に、前記複数のエントリ記憶部の中から空エントリを有するエントリ記憶部を検索して、検索した前記エントリ記憶部に登録対象のデータへのポインタを登録すると共に、登録対象のデータに対応付けて、検索した前記エントリ記憶部の識別情報を前記データ記憶部に格納する複数の登録部と、を備える管理装置、並びに、管理プログラムおよび管理方法を提供する。
【０００７】
本発明の第２の態様においては、データを管理する管理装置であって、それぞれがデータを登録するためのエントリを有する複数のエントリ記憶部と、データの登録指示を受けた場合に、前記複数のエントリ記憶部を互いに異なる順序で検索して、空エントリを有する前記エントリ記憶部に新たなデータを登録する複数の登録部と、を備える管理装置、並びに、管理プログラムおよび管理方法を提供する。
【０００８】
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではない。また、これらの特徴群のサブコンビネーションもまた、発明となりうる。
【発明を実施するための最良の形態】
【０００９】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではない。また、実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１０】
図１は、本実施形態に係る情報処理装置１００の機能構成を示す。情報処理装置１００は、例えばサーバ、パーソナルコンピュータ、またはプロセッサ等であり、情報処理装置１００上で実行されるソフトウェアとハードウェア資源とが協働して各部の機能が実現される。これに代えて、情報処理装置１００は、複数のコンピュータおよびこれらのコンピュータにより共有される記憶装置を備える分散システムであってもよく、各部の機能がハードウェアにより実現された装置であってもよい。
【００１１】
情報処理装置１００は、データを記憶する共有記憶部１１０と、共有記憶部１１０に記憶されたデータを共有して情報処理を行う複数の処理部１４０ａ〜ｃ（以下、処理部１４０と総称する。）とを備える。共有記憶部１１０は、データを記憶するデータ記憶部１２０と、それぞれがデータへのポインタを登録するためのエントリを記憶する複数のエントリ記憶部１３０と、複数のエントリ記憶部１３０を管理するための管理情報を記憶する管理情報記憶部１３５とを有する。
【００１２】
複数の処理部１４０は、データを共有記憶部１１０に登録して共有して、共有記憶部１１０に登録したデータをアクセスしてそれぞれの処理部１４０に割り当てられた処理をする。それぞれの処理部１４０は、情報処理装置１００が備えるマルチコアプロセッサにおける１または複数のプロセッサコア、マルチスレッドプロセッサにおける１または複数のハードウェアスレッド、およびパラレルプロセッサにおける１または複数のプロセッサ上で、割り当てられたプログラム、プロセス、またはスレッド等を実行することにより実現されてよい。
【００１３】
複数の処理部１４０のうちの少なくとも一部である複数の処理部１４０ａは、登録部１４５を有しており、データを共有記憶部１１０に登録する。複数の処理部１４０のうちの少なくとも一部である複数の処理部１４０ｂは、列挙部１５５を有しており、共有記憶部１１０に格納されたデータを列挙して、これらのデータに応じた処理をする。複数の処理部１４０のうちの少なくとも一部である複数の処理部１４０ｃは、削除部１６５を有しており、共有記憶部１１０に格納されたデータが、例えば処理済または不要となったことに応じて削除する。
【００１４】
以上に示した登録部１４５、列挙部１５５、および削除部１６５は、一例としてプログラムライブラリとして提供され、処理部１４０上におけるプログラム実行中において共有データをアクセスする場合に呼び出されて起動されてよい。登録部１４５、列挙部１５５、削除部１６５、および共有記憶部１１０は、処理部１４０に対して共有データの登録、列挙、および削除等の機能を提供する、データを管理するための管理装置として動作する。なお、それぞれの処理部１４０は、当該処理部１４０に割り当てられた処理に応じて、登録部１４５、列挙部１５５、および削除部１６５の任意の組み合わせを有してよく、これらを用いてデータの登録、列挙、および削除の任意の組み合わせを処理してよい。
【００１５】
以上に示した情報処理装置１００によれば、複数の処理部１４０ａが有する複数の登録部１４５が、複数のエントリ記憶部１３０を分散してアクセスしてデータを登録することができるので、データの登録についてもより高いスループット及びスケーラビリティを実現することができる。また、複数の処理部１４０ｃが有する複数の削除部１６５が、複数のエントリ記憶部１３０を分散してアクセスしてデータを削除することができるので、データの削除についてもより高いスループット及びスケーラビリティを実現することができる。
【００１６】
図２は、本実施形態に係る共有記憶部１１０の構成を示す。管理情報記憶部１３５は、複数のエントリ記憶部１３０および予備のエントリ記憶部１３０を管理する管理情報等を記憶する。本実施形態において、管理情報記憶部１３５は、変数Ｄ、変数Ｉ、変数Ｃ、および配列Ｈを記憶する。
【００１７】
変数Ｄは、ドメイン数カウンタであり、ドメイン番号（０、１、…）の最大値を記憶する。ここで、ドメインは、共有データを分散して登録する各エントリ記憶部１３０に対応する。本実施形態においては、３２個の登録部１４５に対して、同数のドメインを用意した例を示す。ドメイン数カウンタは、ドメイン番号の最大値に代えて、ドメイン数（例えば３２）等の他の形式により表されてもよい。
【００１８】
変数Ｉは、アトミシティ保証カウンタであり、いずれかの登録部１４５がドメインの総数を拡張する場合に用いられる。変数Ｃは、変更カウンタであり、いずれかのエントリ記憶部１３０においてデータの登録または削除が行われる度にアトミックに更新される。変数Ｉおよび変数Ｃの使い方については、図６および図７に関連して詳述する。
【００１９】
配列Ｈは、複数のエントリ記憶部１３０のそれぞれへのポインタを記憶する。本実施形態において、配列Ｈは、ドメイン番号をインデクスとして、対応するドメイン番号により指定されるエントリ記憶部１３０へのポインタまたは識別情報を記憶する。また、配列Ｈは、現在使用していない予備のエントリ記憶部１３０を後に使用する場合に備え、少なくとも１つの予備のポインタを有してよい。本実施形態においては、配列Ｈは、ドメイン番号０から２５５までの２５６ドメイン分のインデクスを有するが、そのうちドメイン番号０から３１までの３２ドメインが使用されており、ドメイン番号３２から２５５までの２２４ドメイン分が予備となっている。
【００２０】
複数のエントリ記憶部１３０のそれぞれは、変数Ａ、配列Ｆ、変数Ｇ、および配列Ｅを記憶する。配列Ｆは、登録管理スロット群であり、データへのポインタを登録するためのエントリ（スロットとも示す。）を１または複数含む。配列Ｆの各エントリには、データへのポインタ、または、未登録の場合には無効な値であることを示すＮＵＬＬ値（例えば−１。図中"−"と示す。）が格納される。本実施形態において、配列Ｆは一例としてエントリ番号０から１０２３までの１０２４スロットを含む。
【００２１】
配列Ａは、登録管理スロット群の未使用先頭インデクスであり、配列Ｆに含まれる複数のエントリに先頭から順にデータを登録していく場合において、未登録の先頭エントリを識別する識別情報を記憶する。一例として配列Ａは、配列Ｆに含まれる複数のエントリに先頭から順にデータを登録していく場合において、データが未登録である先頭（即ちインデクス値が最小）のエントリ番号を記憶する。ここで、１または複数の登録部１４５が、ドメインが空の状態から始めて配列Ｆに順にデータを登録していき、配列Ｆを全て消費して変数Ａの値が最大スロット番号をオーバーフローするまでの間におけるエントリの使用形態を線形使用と呼ぶ。
【００２２】
配列Ｅは、登録管理スロット群の解除済管理構造であり、不使用エントリのリストを記憶する。具体的には、配列Ｅは、配列Ｆを線形使用している間、またはその後においてデータが削除されることにより空きとなった配列Ｆのスロットをキュー管理する。配列Ｅは、エントリ番号をインデクスとして、配列Ｆにおける当該エントリの次の空エントリの番号を記憶する。配列Ｅにおける、使用中のエントリに対応する要素、および、次の空エントリが存在しないエントリに対応する要素の値は、無効な値であることを示すＮＵＬＬ値に設定される。
【００２３】
変数Ｇは、登録管理スロット群の登録解除済の先頭インデクスであり、配列Ｅに記憶された不使用エントリのリストにおける先頭エントリのインデクス（すなわちエントリ番号）を記憶する。例えば、本図のエントリ記憶部１３０ｂにおいて、変数Ｇは、不使用エントリのリストにおける先頭エントリがエントリ番号３であることを示す。また、変数Ｇにより指定された、配列Ｅのインデクス３には、次の不使用エントリのエントリ番号１が記憶されている。更に、配列Ｅのインデクス１には、次の不使用エントリのエントリ番号５１が記憶されている。このように、本図のエントリ記憶部１３０ｂにおいては、不使用エントリのリストとして、配列Ｆのエントリ番号｛３、１、５１、…｝が記憶されている。
【００２４】
データ記憶部１２０は、配列Ｆに登録されたデータの実体を記憶する。本実施形態において、データ記憶部１２０は、配列Ｆに登録されたポインタにより指定される記憶位置に、登録対象のデータ（図中ＤＡＴＡ）と、当該データが登録されているエントリ記憶部１３０の識別情報（図中Ｈ）と、エントリ記憶部１３０内において当該データが登録されているエントリの識別情報（図中Ｆ）とを対応付けた対象データ１２５ａ〜ｂを記憶する。例えば、対象データ１２５ａは、ドメイン０（すなわち配列Ｈのインデクス番号が０）の、エントリ１（すなわち配列Ｆのインデクス番号が１）に登録されたデータを記憶する。また、対象データ１２５ｂは、ドメイン１（すなわち配列Ｈのインデクス番号が１）の、エントリ２（すなわち配列Ｆのインデクス番号が２）に登録されたデータを記憶する。ここで、対象データ１２５ａ〜ｂに記憶されるデータは、処理部１４０の処理に応じて、数値、文字列、配列、構造体、オブジェクト、ポインタ、またはこれらへのポインタ等任意の形式であってよい。
【００２５】
なお、本実施形態に係る共有記憶部１１０は、配列Ｆを線形使用により順次使用していき、不使用となったエントリを配列Ｅにより管理している。これに代えて、共有記憶部１１０は、データへのポインタの追加および削除が可能な他のデータ構造を採ってもよい。
【００２６】
図３は、本実施形態に係る情報処理装置１００の初期化処理フローを示す。共有記憶部１１０の初期化処理をする登録部１４５は、並列度Ｓを取得する（Ｓ３００）。ここで、登録部１４５は、並列度Ｓとして、情報処理装置１００上で並列に実行可能はハードウェアスレッドの数を取得してよい。一例として登録部１４５は、並列度Ｓとして、情報処理装置１００における、プロセッサ個数×プロセッサ１個当たりのプロセッサコア数×プロセッサコア当たりのハードウェアスレッド数を算出してもよい。これに代えて、処理部１４０は、並列度Ｓとして、登録部１４５及び／又は削除部１６５を有する処理部１４０の数を用いてもよい。
【００２７】
次に、登録部１４５は、共有データを分散して登録するドメイン数を管理情報記憶部１３５内の変数Ｄおよび変数Ｉに設定する（Ｓ３１０）。本実施形態において登録部１４５は、管理情報記憶部１３５内の変数Ｄに並列度Ｓ−１を格納して、変数Ｉに変数Ｄを格納する。これにより登録部１４５は、初期状態において並列度Ｓと同数のドメインを使用可能とする。これに代えて登録部１４５は、並列度Ｓとは異なる数のドメインを使用可能に設定してもよく、並列度Ｓを取得しない場合においては予め定められた数または情報処理装置１００上で実行するアプリケーション等によって指定された数のドメインを使用可能に設定してもよい。
【００２８】
次に、登録部１４５は、初期状態において使用可能とするドメイン数に、予備として用意するドメイン数を加えたドメイン数分のポインタを有する配列Ｈをアロケートする（Ｓ３２０）。本実施形態において、登録部１４５は、並列度Ｓに予め設定された正の整数ｆ（ｆ＝１、２、…）を乗じたドメイン数分の大きさの配列Ｈを用意する。図２においては、一例としてｆ＝８とする。これに代えて登録部１４５は、予備のドメインを用意しなくてもよい。
【００２９】
次に、登録部１４５は、初期状態において使用可能とするドメインを用意するループ処理に用いるループ変数ｉを０に初期化し（Ｓ３３０）、用意するドメイン数分のループ処理をする（Ｓ３４０）。本実施形態において、登録部１４５は、並列度Ｓに予め設定された正の整数ｇ（ｇ＝１、２、…）を乗じたドメイン数分を初期状態において使用可能とする。図２においては、一例としてｇ=１とする。
【００３０】
登録部１４５は、初期状態において使用可能とする各ドメインについて共有記憶部１１０内にエントリ記憶部１３０をアロケートして、変数Ａを０、変数Ｇを無効な値、配列ＥおよびＦの各要素を無効な値に設定する（Ｓ３５０）。そして、登録部１４５は、配列Ｈのｉ番目の要素Ｈ［ｉ］に、アロケートしたドメインｄのポインタ（すなわち、エントリ記憶部１３０へのポインタ）を登録する（Ｓ３６０）。登録部１４５は、ループ変数ｉをインクリメントしながらＳ３４０からＳ３７０のループ処理を繰り返し（Ｓ３７０）、初期状態において使用可能とすべきドメインを用意し終えると初期化処理を終了する（Ｓ３４０：ＮＯ）。
【００３１】
図４は、本実施形態に係る情報処理装置１００のデータ登録処理のコード例を示す。処理部１４０上で動作しているプログラムからデータの登録指示を受けた場合に、登録部１４５は、複数のエントリ記憶部１３０の中から空エントリを有するエントリ記憶部１３０を検索して、検索したエントリ記憶部１３０に登録対象のデータへのポインタを登録する。そして、処理部１４０は、データ記憶部１２０内における、登録したポインタにより指定される記憶位置に、図２の対象データ１２５に示したように、登録対象のデータに対応付けて、検索した登録先のエントリ記憶部１３０の識別情報および登録したエントリの識別情報を格納する。
【００３２】
本実施形態において、登録部１４５は、ループ変数ｉを変数ｓｔａｒｔにより指定される値から変数ｓｔｅｐにより指定される値ずつ増加させて、ループ変数ｉの値が使用可能なドメイン数ｄ（＝Ｄ）を超えない間（３行目）、ループ変数ｉにより指定されるエントリ記憶部１３０を検索して空エントリが有ればデータを登録するループ処理（４−２３行目）をする。ループ処理の中において、登録部１４５は、ループ変数ｉにより指定されるドメインｄｏｍ（＝Ｈ［ｉ］）の変数Ａの値を読み出して登録先のエントリ候補を示す変数ｐｏｓに格納する（５−６行目）。変数ｐｏｓ（＝変数Ａ）がＮＵＬＬ（＝−１）である場合、登録部１４５は、配列Ｆの線形使用を終えていると判断する（７行目）。そして、登録部１４５は、変数Ｇの値を読み出して変数ｐｏｓに格納することにより、配列Ｅに記憶された不使用エントリのリストの先頭インデクスを取得する（８行目）。
【００３３】
変数ｐｏｓ（＝変数Ｇ）がＮＵＬＬである場合、登録部１４５は、不使用エントリがないとして当該ドメインの検査を終える（１０行目）。一方、変数ｐｏｓがＮＵＬＬでない場合、登録部１４５は、配列Ｅにおける変数ｐｏｓにより指定されるインデクスに格納された次の空エントリのインデクスを、変数Ｇにアトミックに書き込む（１２行目）。具体的には、登録部１４５は、変数Ｇが８行目で取得した値と同一であることを条件として、変数Ｇの値を次の空エントリのインデクスに書き換えるコンペア・アンド・セット命令を実行する。
【００３４】
一方、７行目において変数ｐｏｓ（＝変数Ａ）がＮＵＬＬでない場合、登録部１４５は、変数Ａをアトミックにインクリメントすることにより、未登録の先頭エントリの識別情報をアトミックに更新する（１５行目）。ただし、変数Ａをインクリメントするとドメイン番号の最大値を超える場合には、登録部１４５は、変数ＡにアトミックにＮＵＬＬを設定し（１４,１６、および１７行目）、配列Ｆの線形使用を終了させる。
【００３５】
登録部１４５は、１２行目、１５行目、または１７行目に示した変数Ｇまたは変数Ａのアトミックな変更が成功するまで５−１９行目の処理を繰り返し試行する（１９行目）。変数Ｇまたは変数Ａのアトミックな変更が成功すると、登録部１４５は、２５行目以降の処理において変数ｐｏｓに記憶された空エントリにデータを登録する。具体的には、登録部１４５は、配列Ｆの当該空エントリに対象データ１２５へのポインタを書き込むと共に、対象データ１２５をデータ記憶部１２０に書き込む。
【００３６】
一方、当該ドメインに空エントリがない場合、登録部１４５は、上記のループ処理を繰り返す（３行目、２４行目）。空エントリを有するエントリ記憶部１３０を検出できなかった場合、登録部１４５は、図６に示すドメイン追加処理を呼び出してよい。これに代えて登録部１４５は、変数ｓｔａｒｔ及び／又は変数ｓｔｅｐを異なる値に設定して異なるエントリ記憶部１３０の組を検索対象として再度登録処理をしてもよい。例えば登録部１４５は、変数ｓｔａｒｔを０とし変数ｓｔｅｐを１として全てのエントリ記憶部１３０を検査対象として再度登録処理をしてもよい。
【００３７】
以上に示したデータ登録処理によれば、２以上の登録部１４５のそれぞれは、データの登録指示を受けた場合に、複数のエントリ記憶部１３０のうち、少なくとも２以上のエントリ記憶部１３０を含む互いに異なる組の中から空エントリを有するエントリ記憶部１３０を検索することができる。例えば、登録部１４５が３２個存在する場合に、８個の登録部１４５に（ｓｔａｒｔ＝０、ｓｔｅｐ＝４）、次の８個の登録部１４５に（ｓｔａｒｔ＝１、ｓｔｅｐ＝４）、次の８個の登録部１４５に（ｓｔａｒｔ＝２、ｓｔｅｐ＝４）、残り８個の登録部１４５に（ｓｔａｒｔ＝３、ｓｔｅｐ＝４）を設定して上記データ登録処理を実行すれば、異なるｓｔａｒｔの値を設定した登録部１４５同士は、少なくとも２以上のエントリ記憶部１３０を含む互いに異なる組の中から空エントリを有するエントリ記憶部１３０を検索することができる。また、各登録部１４５は、変数Ａまたは変数Ｇに対して非常に少ない回数（図４においては１回）のアトミック処理を用いて、空エントリを確保することができる。このように、情報処理装置１００は、複数の登録部１４５からの登録処理を複数のエントリ記憶部１３０に分散させることができ、かつ、各エントリ記憶部１３０に対するアトミック処理を最小限とすることにより、競合の発生を減らすことができる。
【００３８】
２以上の登録部１４５のそれぞれが、互いに異なるエントリ記憶部１３０の組の中から空エントリを有するエントリ記憶部１３０を検索する方法の例として、様々な方法を実現しうる。すなわち例えば、上記の例のように、異なる登録部１４５または複数の登録部１４５を分割した異なる登録部１４５のグループのそれぞれに対して、異なる２以上のエントリ記憶部１３０を検索対象として割り当ててもよい。これに代えて、異なる登録部１４５または異なる登録部１４５のグループのそれぞれに対して、少なくとも１つのエントリ記憶部１３０を共通に割り当てられてるものの、互いに異なるエントリ記憶部１３０を割り当てるようにしてもよい。具体例としては、登録部１４５のグループ０に対してドメイン０−２３を割り当て、登録部１４５のグループ１に対してドメイン１６−３１を割り当ててもよい。
【００３９】
また、２以上の登録部１４５のそれぞれは、データの登録指示を受けた場合に、複数のエントリ記憶部１３０を互いに異なる順序で検索するようにしてもよい。２以上の登録部１４５のそれぞれに互いに異なるエントリ記憶部１３０の組を割り当てれば、これらの登録部１４５は複数のエントリ記憶部１３０を互いに異なる順序で検索することになる。しかしながら、２以上の登録部１４５が同じエントリ記憶部１３０の組を検索する場合においても、検索する順序を異ならせることにより、登録先のエントリ記憶部１３０を分散させることができる。例えば、登録部１４５のグループ０はドメイン０から順に｛０、…、３１｝と検索して、登録部１４５のグループ１はドメイン１６から順に｛１６、…、３１、０、…１５｝と検索してもよい。また、グループ１はドメイン３１から逆順に｛３１、…、０｝と検索してもよい。
【００４０】
なお、以上において、複数の登録部１４５のそれぞれは、当該登録部１４５に固有の固有情報から、当該登録部１４５に割り当てるエントリ記憶部１３０の組、複数のエントリ記憶部１３０を検索する順序、または最初にアクセスするエントリ記憶部１３０を算出または決定してよい。各登録部１４５の固有情報として、登録部１４５は、登録部１４５自身または当該登録部１４５を呼び出す処理部１４０として動作するプログラムの情報処理装置１００におけるプロセス番号及び／又はスレッド番号、ハッシュコード、予め設定した値、若しくは、これらを組み合わせて算出した値等を用いてよい。
【００４１】
これに代えて、登録部１４５は、登録部１４５自身または処理部１４０の初期化処理中またはデータ登録処理の度に、乱数値等の参照毎に変化する値、または、タイマ値等の参照時刻に応じて変化する値を情報処理装置１００の内部または外部に設けられた乱数発生部またはタイマ部等から取得して、これらの値またはこれらを組み合わせて算出した値等から固有情報を生成してもよい。ここで、登録部１４５は、取得した値を固有情報として用いてもよく、取得した値等に対し、（固有情報の最大値＋１）等で剰余を取る等といったような公知の変換を施すことにより、取得した値に対応する固有情報を生成してよい。
【００４２】
また、それぞれの登録部１４５は、データの登録指示を受けた場合に、エントリ記憶部１３０の識別情報の値をエントリ記憶部１３０の数（すなわち並列度Ｓ）で割った商（あるいは商をエントリ記憶部１３０の数で割った余り）または余りが、それぞれの登録部１４５に固有の固有情報をエントリ記憶部１３０の数で割った商（あるいは商をエントリ記憶部１３０の数で割った余り）または余りと一致する少なくとも２以上のエントリ記憶部１３０を含む組の中から空エントリを有するエントリ記憶部１３０を検索してもよい。一例として、登録部１４５は、当該登録部１４５を有する処理部１４０または当該登録部１４５自身として動作するスレッドに対して一意に決まる識別子の一例としてハッシュコードを用い、このハッシュコードを並列度Ｓで割った余りを変数ｓｔａｒｔとしてもよい。具体的には、登録部１４５は、変数ｓｔａｒｔを初期化するためのメソッドｉｎｉｔｉａｌＶａｌｕｅ（）として、Ｊａｖａ（登録商標）のＴｈｒｅａｄＬｏｃａｌクラスを拡張する、"return new Integer(Thread.currentThread().hashCode()%S)"を含むメソッドを用いてもよい。
【００４３】
図５は、本実施形態に係る情報処理装置１００のデータ削除処理のコード例を示す。処理部１４０上で動作しているプログラムから登録されたデータの削除指示を受けた場合に、削除部１６５は、データ削除処理をする。
【００４４】
削除部１６５は、メソッドｒｅｍｏｖｅが呼び出されたことを通じて、削除する対象データ１２５へのポインタを受け取りデータ削除処理をする（１行目）。削除部１６５は、受け取ったポインタを用いて、削除対象のデータに対応付けられた、当該データを登録しているエントリ記憶部１３０の識別情報ｃｏｎｎ．ｇｅｔＳｅｇｍｅｎｔＯｆｆｓｅｔ（）およびエントリ記憶部１３０内におけるエントリの識別情報ｐｏｓをデータ記憶部１２０から取得する（３行目および２行目）。更に、削除部１６５は、配列Ｈにおけるエントリ記憶部１３０の識別情報に応じたインデクスの内容を取得することにより、エントリ記憶部１３０へのポインタを取得する（３行目）。
【００４５】
次に、削除部１６５は、配列Ｅに格納された不使用エントリのリストの先頭に、削除するデータのエントリをアトミックに追加する。まず、削除部１６５は、現時点における先頭の不使用エントリのインデクスを変数Ｇから読み出して、削除するデータのエントリに書き込む（８行目）。更に、削除部１６５は、配列Ｆにおける削除するデータに対応するエントリを無効な値に設定することにより、当該データを配列Ｆから削除する（９行目）。そして、削除部１６５は、先頭の不使用エントリのインデクスとして、削除するデータのエントリを変数Ｇにアトミックに書き込む（１０行目）。これらの処理により、削除部１６５は、対象データ１２５から取得した識別情報により特定されるエントリ記憶部１３０から削除対象のデータへのポインタを削除すると共に、当該データを登録していた配列のエントリを、不使用エントリのリストにアトミックに追加する。
【００４６】
削除部１６５は、６行目から１０行目におけるアトミック処理に成功するまでスピンループをする。削除部１６５は、アトミック処理に成功すると、データ削除処理を完了する（１１行目）。
【００４７】
以上に示したデータ削除処理によれば、それぞれのデータに対してエントリ記憶部１３０の識別情報が対応付けられているので、削除部１６５は、他のエントリ記憶部１３０等を検索することなく削除するデータが登録されたエントリ記憶部１３０を特定することができる。また、情報処理装置１００は、複数の削除部１６５からのデータ削除処理を複数のエントリ記憶部１３０に分散させることができるので、競合が発生する可能性を低減することができる。
【００４８】
図６は、本実施形態に係る情報処理装置１００のドメイン追加処理のコード例を示す。図４のデータ登録処理において空エントリを有するエントリ記憶部１３０を検出できなかった場合、登録部１４５は、ドメイン追加処理をする。これに代えてまたはこれに加えて、登録部１４５は、空エントリの数が予め定められた基準値以下となったと判断した場合に、データ登録処理の受け付けに先立ってドメイン追加処理をしてもよい。
【００４９】
登録部１４５は、管理情報記憶部１３５内の変数Ｄに変数ｓｔｅｐを加え、新たな最大ドメイン番号ｎｅｗ＿ｄを算出する（２行目）。この変数ｓｔｅｐは、図４の変数ｓｔｅｐと同じでもよく、異なっていてもよい。また、変数ｓｔｅｐは、並列度Ｓと同じ値とすることもできる。
【００５０】
登録部１４５は、変数Ｉの値を新たな最大ドメイン番号ｎｅｗ＿ｄの値にアトミックに更新する（３行目）。これにより登録部１４５は、他の登録部１４５等によるドメイン追加処理との間で競合が発生するのを防ぐことができる。
【００５１】
新たな最大ドメイン番号が、既に使用または用意されている配列Ｈの要素数を超える場合（４行目において条件成立）、予備のエントリ記憶部１３０が不足しているので、登録部１４５は、現在の配列Ｈより要素数が大きい新たな配列Ｈをアロケートすることによりエントリ記憶部１３０の数がより多い新たな複数のエントリ記憶部１３０を生成する（６行目）。そして登録部１４５は、生成した新たな複数のエントリ記憶部１３０に、元の複数のエントリ記憶部１３０の内容をコピーする（７−８行目）。本実施形態において登録部１４５は、一例として、配列Ｈの要素数を２倍に増やしている（６、９行目）。一方、新たな最大ドメイン番号が、既に使用または用意されている配列Ｈの要素数未満の場合、登録部１４５は、配列Ｈを拡張しなくてよい（４行目において条件不成立）。
【００５２】
登録部１４５は、新たなエントリ記憶部１３０を生成して、当該エントリ記憶部１３０へのポインタを配列Ｈにおける予備の要素に登録していき（１２行目）、エントリ記憶部１３０の数を新たな最大ドメイン番号ｎｅｗ＿ｄまで増やす（１１行目）。その後、登録部１４５は、変数Ｄを新たな最大ドメイン番号ｎｅｗ＿ｄに更新する。これにより、登録部１４５は、予備の１または複数のエントリ記憶部１３０を使用中の複数のエントリ記憶部１３０に追加することができ、追加したエントリ記憶部１３０に登録対象のデータへのポインタを登録することができるようになる。
【００５３】
以上に示したドメイン追加処理によれば、情報処理装置１００は、エントリ記憶部１３０が不足している場合に新たなエントリ記憶部１３０を追加することができるので、共有データが最初から大きな記憶領域を占めてしまうのを防ぐことができる。また、情報処理装置１００は、配列Ｈに予備の要素がある場合には、予備の要素に新たなエントリ記憶部１３０を追加することができ、配列Ｈを拡張するオーバーヘッドを回避することができる。
【００５４】
図７は、本実施形態に係る情報処理装置１００のデータ列挙処理フローを示す。列挙部１５５は、管理情報記憶部１３５内の変数Ｃを読み出して、列挙処理前における変更カウンタの値を取得する（Ｓ７００）。なお、図４のデータ登録処理および図５のデータ削除処理においては変更カウンタの値の更新を省略して記載しているが、登録部１４５および削除部１６５は、データを登録または削除した場合に変更カウンタの値を更新（例えばインクリメント）してよい。
【００５５】
列挙部１５５は、配列Ｈにおける、０から変数Ｄの値までのインデクスに対応する要素から使用中である各エントリ記憶部１３０へのポインタを取得して、全てのエントリ記憶部１３０を探索する（Ｓ７１０、Ｓ７３０）。各ドメインの処理において、列挙部１５５は、配列Ｆを参照して、全データのポインタを列挙する（Ｓ７２０）。
【００５６】
全データの列挙を終えると、列挙部１５５は、変更カウンタを再度読み出す（Ｓ７４０）。変更カウンタの値がＳ７００で読み出した値と同じである場合、列挙部１５５は、列挙中にデータの登録または削除がなかったと判断して、列挙したポインタを処理部１４０のプログラムへと返信する（Ｓ７６０）。一方、変更カウンタの値がＳ７００で読み出した値と異なる場合、列挙部１５５は、列挙中にデータの登録または削除があったと判断して例外を発生する（Ｓ７７０）。例外を受けた処理部１４０は、データの列挙に失敗した場合の処理をしてもよく、データの列挙を再試行してもよい。
【００５７】
以上に示したデータ列挙処理により、情報処理装置１００は、データの登録または削除が無い機関において列挙した各データのポインタを返すことができる。これにより情報処理装置１００は、処理に不整合が発生するのを回避することができる。
【００５８】
図８は、本発明の実施形態に係るコンピュータ１９００のハードウェア構成の一例を示す。本実施形態に係るコンピュータ１９００は、ホスト・コントローラ２０８２により相互に接続される１または複数のＣＰＵ２０００、ＲＡＭ２０２０、グラフィック・コントローラ２０７５、及び表示装置２０８０を有するＣＰＵ周辺部と、入出力コントローラ２０８４によりホスト・コントローラ２０８２に接続される通信インターフェイス２０３０、ハードディスクドライブ２０４０、及びＤＶＤドライブ２０６０を有する入出力部と、入出力コントローラ２０８４に接続されるＲＯＭ２０１０、フレキシブルディスク・ドライブ２０５０、及び入出力チップ２０７０を有するレガシー入出力部とを備える。
【００５９】
ホスト・コントローラ２０８２は、ＲＡＭ２０２０と、高い転送レートでＲＡＭ２０２０をアクセスするＣＰＵ２０００及びグラフィック・コントローラ２０７５とを接続する。ＣＰＵ２０００は、ＲＯＭ２０１０及びＲＡＭ２０２０に格納されたプログラムに基づいて動作し、各部の制御を行う。グラフィック・コントローラ２０７５は、ＣＰＵ２０００等がＲＡＭ２０２０内に設けたフレーム・バッファ上に生成する画像データを取得し、表示装置２０８０上に表示させる。これに代えて、グラフィック・コントローラ２０７５は、ＣＰＵ２０００等が生成する画像データを格納するフレーム・バッファを、内部に含んでもよい。
【００６０】
入出力コントローラ２０８４は、ホスト・コントローラ２０８２と、比較的高速な入出力装置である通信インターフェイス２０３０、ハードディスクドライブ２０４０、ＤＶＤドライブ２０６０を接続する。通信インターフェイス２０３０は、ネットワークを介して他の装置と通信する。ハードディスクドライブ２０４０は、コンピュータ１９００内のＣＰＵ２０００が使用するプログラム及びデータを格納する。ＤＶＤドライブ２０６０は、ＤＶＤ２０９５からプログラム又はデータを読み取り、ＲＡＭ２０２０を介してハードディスクドライブ２０４０に提供する。
【００６１】
また、入出力コントローラ２０８４には、ＲＯＭ２０１０と、フレキシブルディスク・ドライブ２０５０、及び入出力チップ２０７０の比較的低速な入出力装置とが接続される。ＲＯＭ２０１０は、コンピュータ１９００が起動時に実行するブート・プログラム、及び／又は、コンピュータ１９００のハードウェアに依存するプログラム等を格納する。フレキシブルディスク・ドライブ２０５０は、フレキシブルディスク２０９０からプログラム又はデータを読み取り、ＲＡＭ２０２０を介してハードディスクドライブ２０４０に提供する。入出力チップ２０７０は、フレキシブルディスク・ドライブ２０５０を入出力コントローラ２０８４へと接続すると共に、例えばパラレル・ポート、シリアル・ポート、キーボード・ポート、マウス・ポート等を介して各種の入出力装置を入出力コントローラ２０８４へと接続する。
【００６２】
ＲＡＭ２０２０を介してハードディスクドライブ２０４０に提供されるプログラムは、フレキシブルディスク２０９０、ＤＶＤ２０９５、又はＩＣカード等の記録媒体に格納されて利用者によって提供される。プログラムは、記録媒体から読み出され、ＲＡＭ２０２０を介してコンピュータ１９００内のハードディスクドライブ２０４０にインストールされ、ＣＰＵ２０００において実行される。
【００６３】
コンピュータ１９００にインストールされ、コンピュータ１９００を情報処理装置１００として機能させるプログラムは、データ記憶部１２０を管理するデータ記憶管理モジュールと、エントリ記憶部１３０を管理するエントリ記憶管理モジュールと、管理情報記憶部１３５を管理する管理情報記憶モジュールと、登録モジュール、列挙モジュール、及び／又は削除モジュールを含む処理モジュールとを備える。これらのプログラム又はモジュールは、ＣＰＵ２０００等に働きかけて、コンピュータ１９００を、データ記憶部１２０と、エントリ記憶部１３０と、管理情報記憶部１３５と、登録部１４５、列挙部１５５、及び／又は削除部１６５を含む処理部１４０としてそれぞれ機能させる。
【００６４】
これらのプログラムに記述された情報処理は、コンピュータ１９００に読込まれることにより、ソフトウェアと上述した各種のハードウェア資源とが協働した具体的手段であるデータ記憶部１２０と、エントリ記憶部１３０と、管理情報記憶部１３５と、登録部１４５、列挙部１５５、及び／又は削除部１６５を含む処理部１４０として機能する。そして、これらの具体的手段によって、本実施形態におけるコンピュータ１９００の使用目的に応じた情報の演算又は加工を実現することにより、使用目的に応じた特有の情報処理装置１００が構築される。
【００６５】
一例として、コンピュータ１９００と外部の装置等との間で通信を行う場合には、ＣＰＵ２０００は、ＲＡＭ２０２０上にロードされた通信プログラムを実行し、通信プログラムに記述された処理内容に基づいて、通信インターフェイス２０３０に対して通信処理を指示する。通信インターフェイス２０３０は、ＣＰＵ２０００の制御を受けて、ＲＡＭ２０２０、ハードディスクドライブ２０４０、フレキシブルディスク２０９０、又はＤＶＤ２０９５等の記憶装置上に設けた送信バッファ領域等に記憶された送信データを読み出してネットワークへと送信し、もしくは、ネットワークから受信した受信データを記憶装置上に設けた受信バッファ領域等へと書き込む。このように、通信インターフェイス２０３０は、ＤＭＡ（ダイレクト・メモリ・アクセス）方式により記憶装置との間で送受信データを転送してもよく、これに代えて、ＣＰＵ２０００が転送元の記憶装置又は通信インターフェイス２０３０からデータを読み出し、転送先の通信インターフェイス２０３０又は記憶装置へとデータを書き込むことにより送受信データを転送してもよい。
【００６６】
また、ＣＰＵ２０００は、ハードディスクドライブ２０４０、ＤＶＤドライブ２０６０（ＤＶＤ２０９５）、フレキシブルディスク・ドライブ２０５０（フレキシブルディスク２０９０）等の外部記憶装置に格納されたファイルまたはデータベース等の中から、全部または必要な部分をＤＭＡ転送等によりＲＡＭ２０２０へと読み込ませ、ＲＡＭ２０２０上のデータに対して各種の処理を行う。そして、ＣＰＵ２０００は、処理を終えたデータを、ＤＭＡ転送等により外部記憶装置へと書き戻す。このような処理において、ＲＡＭ２０２０は、外部記憶装置の内容を一時的に保持するものとみなせるから、本実施形態においてはＲＡＭ２０２０および外部記憶装置等をメモリ、記憶部、または記憶装置等と総称する。本実施形態における各種のプログラム、データ、テーブル、データベース等の各種の情報は、このような記憶装置上に格納されて、情報処理の対象となる。なお、ＣＰＵ２０００は、ＲＡＭ２０２０の一部をキャッシュメモリに保持し、キャッシュメモリ上で読み書きを行うこともできる。このような形態においても、キャッシュメモリはＲＡＭ２０２０の機能の一部を担うから、本実施形態においては、区別して示す場合を除き、キャッシュメモリもＲＡＭ２０２０、メモリ、及び／又は記憶装置に含まれるものとする。
【００６７】
また、ＣＰＵ２０００は、ＲＡＭ２０２０から読み出したデータに対して、プログラムの命令列により指定された、本実施形態中に記載した各種の演算、情報の加工、条件判断、情報の検索・置換等を含む各種の処理を行い、ＲＡＭ２０２０へと書き戻す。例えば、ＣＰＵ２０００は、条件判断を行う場合においては、本実施形態において示した各種の変数が、他の変数または定数と比較して、大きい、小さい、以上、以下、等しい等の条件を満たすかどうかを判断し、条件が成立した場合（又は不成立であった場合）に、異なる命令列へと分岐し、またはサブルーチンを呼び出す。
【００６８】
また、ＣＰＵ２０００は、記憶装置内のファイルまたはデータベース等に格納された情報を検索することができる。例えば、第１属性の属性値に対し第２属性の属性値がそれぞれ対応付けられた複数のエントリが記憶装置に格納されている場合において、ＣＰＵ２０００は、記憶装置に格納されている複数のエントリの中から第１属性の属性値が指定された条件と一致するエントリを検索し、そのエントリに格納されている第２属性の属性値を読み出すことにより、所定の条件を満たす第１属性に対応付けられた第２属性の属性値を得ることができる。
【００６９】
以上に示したプログラム又はモジュールは、外部の記録媒体に格納されてもよい。記録媒体としては、フレキシブルディスク２０９０、ＤＶＤ２０９５の他に、ＤＶＤ又はＣＤ等の光学記録媒体、ＭＯ等の光磁気記録媒体、テープ媒体、ＩＣカード等の半導体メモリ等を用いることができる。また、専用通信ネットワーク又はインターネットに接続されたサーバシステムに設けたハードディスク又はＲＡＭ等の記憶装置を記録媒体として使用し、ネットワークを介してプログラムをコンピュータ１９００に提供してもよい。
【００７０】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【００７１】
特許請求の範囲、明細書、および図面中において示した装置、システム、プログラム、および方法における動作、手順、ステップ、および段階等の各処理の実行順序は、特段「より前に」、「先立って」等と明示しておらず、また、前の処理の出力を後の処理で用いるのでない限り、任意の順序で実現しうることに留意すべきである。特許請求の範囲、明細書、および図面中の動作フローに関して、便宜上「まず、」、「次に、」等を用いて説明したとしても、この順で実施することが必須であることを意味するものではない。
【図面の簡単な説明】
【００７２】
【図１】本実施形態に係る情報処理装置１００の構成を示す。
【図２】本実施形態に係る共有記憶部１１０の構成を示す。
【図３】本実施形態に係る情報処理装置１００の初期化処理フローを示す。
【図４】本実施形態に係る情報処理装置１００のデータ登録処理フローを示す。
【図５】本実施形態に係る情報処理装置１００のデータ削除処理フローを示す。
【図６】本実施形態に係る情報処理装置１００のドメイン追加処理フローを示す。
【図７】本実施形態に係る情報処理装置１００のデータ列挙処理フローを示す。
【図８】本発明の実施形態に係るコンピュータ１９００のハードウェア構成の一例を示す。
【符号の説明】
【００７３】
１００  情報処理装置
１１０  共有記憶部
１２０  データ記憶部
１２５ａ〜ｂ  対象データ
１３０ａ〜ｂ  エントリ記憶部
１３５  管理情報記憶部
１４０ａ〜ｃ  処理部
１４５  登録部
１５５  列挙部
１６５  削除部
１９００  コンピュータ
２０００  ＣＰＵ
２０１０  ＲＯＭ
２０２０  ＲＡＭ
２０３０  通信インターフェイス
２０４０  ハードディスクドライブ
２０５０  フレキシブルディスク・ドライブ
２０６０  ＤＶＤドライブ
２０７０  入出力チップ
２０７５  グラフィック・コントローラ
２０８０  表示装置
２０８２  ホスト・コントローラ
２０８４  入出力コントローラ
２０９０  フレキシブルディスク
２０９５  ＤＶＤ
【図１】
2010102654.tif 000003
【図２】
2010102654.tif 000004
【図３】
2010102654.tif 000005
【図４】
2010102654.tif 000006
【図５】
2010102654.tif 000007
【図６】
2010102654.tif 000008
【図７】
2010102654.tif 000009
【図８】
2010102654.tif 000010