(57)【特許請求の範囲】
【請求項１】
第１のデータが記憶された記憶媒体上の第１メモリ番号を持つ位置に関する第１の位置情報を記憶する第１の記憶手段と、
前記第１メモリ番号を世代情報として管理する手段と、
前記第１の記憶手段に記憶された前記第１の位置情報に基づき、前記第１のデータを参照して第１のトランザクションを処理する第１の処理手段と、
前記第１のデータを更新した第２のデータを、前記第１のデータとは異なる前記記憶媒体上の第２メモリ番号を持つ位置に記録すると共に、前記世代情報に前記第２メモリ番号を登録する更新手段と、
前記世代情報を参照することにより、前記第２のデータが記録された前記記憶媒体上の前記第２メモリ番号を持つ位置に関する第２の位置情報を記憶する第２の記憶手段と、
前記第１の記憶手段に記憶された前記第１の位置情報が、前記第２の記憶手段に記憶された前記第２の位置情報と異なる場合に、前記第１の記憶手段に前記第２の位置情報を記録する位置情報更新手段と
を備える情報処理装置。
【請求項２】
前記位置情報更新手段は、前記第１のトランザクションの次に実行される第２のトランザクションの開始に伴い、前記第１の記憶手段に前記第２の位置情報を記録する、
請求項１に記載の情報処理装置。
【請求項３】
前記位置情報更新手段は、前記第１のトランザクションの終了に伴い、前記第１の記憶手段に前記第２の位置情報を記録する、
請求項１又は請求項２に記載の情報処理装置。
【請求項４】
前記位置情報更新手段が前記第１の記憶手段に前記第２の記憶情報を記録する際に、前記第１の記憶手段に記憶されていた前記第１の位置情報が記録される第３の記憶手段
を更に備える、請求項１乃至請求項３記載の情報処理装置。
【請求項５】
前記第３の記憶手段に記憶された前記第１の位置情報と、前記第１の位置情報に対応する前記第１のデータとを削除する削除手段
を更に備える、請求項４記載の情報処理装置。
【請求項６】
第１のデータが記憶された記憶媒体上の第１メモリ番号を持つ位置に関する第１の位置情報を第１の記憶手段に記録するステップと、
前記第１メモリ番号を世代情報として管理する手段と、
前記第１の記憶手段に記憶された前記第１の位置情報に基づき、前記第１のデータを参照して第１のトランザクションを処理するステップと、
前記第１のデータを更新した第２のデータを、前記第１のデータとは異なる前記記憶媒体上の第２メモリ番号を持つ位置に記録すると共に、前記世代情報に前記第２メモリ番号を登録するステップと、
前記世代情報を参照することにより、前記第２のデータが記録された前記記憶媒体上の前記第２メモリ番号を持つ位置に関する第２の位置情報を前記第２の記憶手段に記録するステップと、
前記第１の記憶手段に記憶された前記第１の位置情報が、前記第２の記憶手段に記憶された前記第２の位置情報と異なる場合に、前記第１の記憶手段に前記第２の位置情報を位置情報更新手段に記録するステップと
を備える情報処理方法。
【請求項７】
情報処理装置に、
第１のデータが記憶された記憶媒体上の第１メモリ番号を持つ位置に関する第１の位置情報を第１の記憶手段に記録するステップと、
前記第１メモリ番号を世代情報として管理するステップと、
前記第１の記憶手段に記憶された前記第１の位置情報に基づき、前記第１のデータを参照して第１のトランザクションを処理するステップと、
前記第１のデータを更新した第２のデータを、前記第１のデータとは異なる前記記憶媒体上の第２メモリ番号を持つ位置に記録すると共に、前記世代情報に前記第２メモリ番号を登録するステップと、
前記世代情報を参照することにより、前記第２のデータが記録された前記記憶媒体上の前記第２メモリ番号を持つ位置に関する第２の位置情報を前記第２の記憶手段に記録するステップと、
前記第１の記憶手段に記憶された前記第１の位置情報が、前記第２の記憶手段に記憶された前記第２の位置情報と異なる場合に、前記第１の記憶手段に前記第２の位置情報を位置情報更新手段に記録するステップと
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明に係るいくつかの態様は、情報処理装置、情報処理方法、及びプログラムに関する。
【背景技術】
【０００２】
近年、トランザクション処理の際に参照されるデータの使用方法が種々検討されている（例えば、特許文献１参照）。
【０００３】
特許文献１には、発生したトランザクションから共有エリアを動的に割り当て、必要がなくなれば共有エリアを開放することにより、共有エリアとプロセスとの関係を意識せずにプログラムを設計することのできる情報処理装置の方式が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１０−０４９４３０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、トランザクションが参照する共有メモリ領域のデータを更新する際には、当該データの整合性を確保するため、トランザクションの処理終了後、この処理とは排他的に、当該データの更新処理を実行することが多い。
【０００６】
しかしながら、共有メモリ領域の参照処理と更新処理とを排他制御すると、更新処理が終了するまで次のトランザクションを実行できないため、処理速度の遅延が発生することがあった。
【０００７】
また、特許文献１記載の手法は、あくまでトランザクション同士の処理についてのみ考慮したものであり、参照処理と更新処理との関係に関しては、何ら考慮されていない。
【０００８】
本発明のいくつかの態様は前述の課題に鑑みてなされたものであり、共有メモリ領域のデータの参照と更新とを平行して処理することのできる情報処理装置、情報処理方法、及びプログラムを提供することを目的の１つとする。
【課題を解決するための手段】
【０００９】
本発明に係る情報処理装置は、第１のデータが記憶された記憶媒体上の位置に関する第１の位置情報を記憶する第１の記憶手段と、前記第１の記憶手段に記憶された前記第１の位置情報に基づき、第１のデータを参照して第１のトランザクションを処理する第１の処理手段と、前記第１のデータを更新した第２のデータを、前記第１のデータとは異なる前記記憶媒体上の位置に記録する更新手段と、前記第２のデータが記録された前記記憶媒体上の位置に関する第２の位置情報を記憶する第２の記憶手段と、前記第１の記憶手段に記憶された前記第１の位置情報が、前記第２の記憶手段に記憶された前記第２の位置情報と異なる場合に、前記第１の記憶手段に前記第２の位置情報を記録する位置情報更新手段とを備える。
【００１０】
本発明に係る情報処理方法は、第１のデータが記憶された記憶媒体上の位置に関する第１の位置情報を第１の記憶手段に記録するステップと、前記第１の記憶手段に記憶された前記第１の位置情報に基づき、第１のデータを参照して第１のトランザクションを処理するステップと、前記第１のデータを更新した第２のデータを、前記第１のデータとは異なる前記記憶媒体上の位置に記録するステップと、前記第２のデータが記録された前記記憶媒体上の位置に関する第２の位置情報を前記第２の記憶手段に記録するステップと、前記第１の記憶手段に記憶された前記第１の位置情報が、前記第２の記憶手段に記憶された前記第２の位置情報と異なる場合に、前記第１の記憶手段に前記第２の位置情報を位置情報更新手段に記録するステップとを備える。
【００１１】
本発明に係るプログラムは、情報処理装置に、第１のデータが記憶された記憶媒体上の位置に関する第１の位置情報を第１の記憶手段に記録するステップと、前記第１の記憶手段に記憶された前記第１の位置情報に基づき、第１のデータを参照して第１のトランザクションを処理するステップと、前記第１のデータを更新した第２のデータを、前記第１のデータとは異なる前記記憶媒体上の位置に記録するステップと、前記第２のデータが記録された前記記憶媒体上の位置に関する第２の位置情報を前記第２の記憶手段に記録するステップと、前記第１の記憶手段に記憶された前記第１の位置情報が、前記第２の記憶手段に記憶された前記第２の位置情報と異なる場合に、前記第１の記憶手段に前記第２の位置情報を位置情報更新手段に記録するステップとを実行させる。
【００１２】
尚、本発明において、「部」や「手段」とは、単に物理的手段を意味するものではなく、その「部」や「手段」が有する機能をソフトウェアによって実現する場合も含む。また、１つの「部」や「手段」が有する機能が２つ以上の物理的手段や装置により実現されても、２つ以上の「部」や「手段」の機能が１つの物理的手段や装置により実現されても良い。
【発明の効果】
【００１３】
本発明によれば、共有メモリ領域のデータの参照と更新とを平行して処理することのできる情報処理装置、情報処理方法、及びプログラムを提供することができる。
【図面の簡単な説明】
【００１４】
【図１】本発明の実施形態１における情報処理装置の構成を説明するための図である。
【図２】図１に示した情報処理装置の処理の流れを示すフローチャートである。
【図３】図１に示した情報処理装置の処理の流れを示すフローチャートである。
【図４】図１に示した情報処理装置の処理の流れを示すフローチャートである。
【図５】図１に示した情報処理装置の処理の具体例を説明するための図である。
【発明を実施するための形態】
【００１５】
以下に本発明の実施形態を説明する。以下の説明及び参照する図面の記載において、同一又は類似の構成には、それぞれ同一又は類似の符号が付されている。
（実施形態）
【００１６】
図１乃至図５は、本発明の実施形態を説明するための図である。以下、これらの図を参照しながら、以下の流れに沿って本実施形態を説明する。まず、「１」で実施形態全体の概要を示す。その上で、「２」でシステム構成を、「３」で処理の流れを説明する。「４」では、本実施形態の処理の流れを、具体例を挙げて説明する。最後に、「５」以降で、本実施形態に係る効果等を説明する。
【００１７】
（１  概要）
複数のプログラムから平行して同一のデータにアクセス可能な共有メモリと呼ばれる技術がある。本実施形態では、トランザクションで共有メモリ上のデータを参照すると共に、同じデータを、当該トランザクションとは別プロセスに係る更新コマンドで更新する場合を考える。
このようなシステムの処理は、以下のような処理に分解することができる。
【００１８】
（ａ）データの更新に伴い、トランザクションが参照すべき共有メモリ上の領域（データが記憶される位置であり、以下「共有メモリ領域」ともいう。）は随時変更され、トランザクションから参照されなくなった共有メモリ領域のデータ（更新前のデータ）は削除される。
（ｂ）共有メモリ上のデータの更新及び削除は、トランザクションのプロセスとは別のプロセスで実行される。
（ｃ）トランザクションの処理中は、共有メモリ上のデータが更新されても、当該トランザクションが参照する共有メモリ領域は変更しない。
（ｄ）トランザクションが実行されるプロセスは、共有メモリ上のデータが更新されると、トランザクションが参照すべき共有メモリ領域を変更する。
【００１９】
このようなシステムでは、トランザクション処理とは別に、データが更新されたらトランザクションが参照する共有メモリ領域を変更する処理が必要となるため、例えば、以下の２つのスレッドを用意し、この２つのスレッドを排他制御することとなる。
（１）トランザクションを実行するスレッド
（２）データの更新を受信し、トランザクションで参照すべき共有メモリ領域を変更すると共に、参照されなくなった共有メモリ領域を開放するスレッド
【００２０】
ここで、上記２つのスレッドを排他制御すると、データの変更に伴う共有メモリ領域の誤参照やメモリリークを防いでデータの整合性を保つことができるようになる。
【００２１】
しかしながら、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）数が多いシステムでこのような手法を行うと、この処理がクリティカルセクションとなるので待ち合わせが発生し、ＣＰＵ性能を十分に発揮できずに性能が頭打ちとなってしまう。
【００２２】
そこで、本実施形態の情報処理装置１は、図１のような構成を有する。情報処理装置１のシステムは、共有メモリ１００と、共有メモリ１００を参照及び更新するプロセス２００と、共有メモリ１００を更新する共有メモリ更新コマンド３００と、プロセス２００に含まれる各スレッドが参照及び更新する共有メモリ参照テーブル４００とを含む。
【００２３】
図１の例において、プロセス２００及び共有メモリ更新コマンド３００は、それぞれＣＰＵ上で実行されるプログラム、又はプログラムの一部であり、プロセス２００及び共有メモリ更新コマンド３００は、共有メモリ１００上のデータに、平行してアクセス可能である。つまり、プロセス２００が共有メモリ１００上のデータを参照しながら、共有メモリ更新コマンド３００が同じデータを更新することが有りうる。
【００２４】
プロセス２００は、トランザクションスレッド２１０、変更スレッド２２０、及び共有メモリ領域開放スレッド２３０の各スレッドを含む。トランザクションスレッド２１０、変更スレッド２２０、及び共有メモリ領域開放スレッド２３０、それぞれ共有メモリ参照テーブル４００を参照し、データ（情報）を更新する。
【００２５】
共有メモリ参照テーブル４００は、図示しない記憶媒体上で管理される情報管理テーブルであり、トランザクション参照メモリ領域情報４１０、次回トランザクション参照メモリ領域情報４２０、及び参照済みメモリ領域情報４３０を管理する。
【００２６】
トランザクション参照メモリ領域情報４１０には、トランザクションスレッド２１０により処理されるトランザクションで参照する、共有メモリ１００上の共有メモリ領域１２０のアドレスが格納される。
【００２７】
次回トランザクション参照メモリ領域情報４２０には、現在または直前にトランザクションスレッド２１０により実行されていたトランザクションの次に実行されるトランザクションが参照すべき共有メモリ領域１２０のアドレスが格納される。
【００２８】
参照済みメモリ領域情報４３０には、トランザクションスレッド２１０が以前処理していたトランザクションが参照していた（すなわち、現在参照されていない）共有メモリ領域１２０のアドレスが格納される。
【００２９】
このような共有メモリ参照テーブル４００の管理により、情報処理装置１は、トランザクションを実行するトランザクションスレッド２１０と、共有メモリ更新コマンド３００による共有メモリ１００更新に係るスレッドとの間の排他を回避している。
【００３０】
トランザクションスレッド２１０によるトランザクション中に共有メモリ１００の更新が発生した場合（トランザクションスレッド２１０が参照するデータの更新が発生した場合）、まず、更新後のデータは、更新前のデータが格納される共有メモリ領域１２０とは異なる共有メモリ領域１２０に格納される。
【００３１】
そして、トランザクション参照メモリ領域情報４１０には、更新前のデータが格納される共有メモリ領域１２０のアドレスを格納し続けると共に（すなわち、少なくともトランザクション終了までは更新しない）、次回トランザクション参照メモリ領域情報４２０には、更新後のデータ（最新のデータ）が格納される共有メモリ領域１２０のアドレスを格納する。これにより、たとえトランザクション中に共有メモリ１００が更新されたとしても、今回のトランザクションでは更新前のデータを参照しつつ、次回のトランザクションでは、最新のデータが格納された共有メモリ領域１２０を参照することができるようになる。
【００３２】
また、次回のトランザクションの実行開始時、もしくはそれよりも前に（例えば、前回のトランザクションの終了処理時）、次回トランザクション参照メモリ領域情報４２０に格納された最新のデータの共有メモリ領域１２０のアドレスをトランザクション参照メモリ領域情報４１０に格納すると共に、それまでにトランザクション参照メモリ領域情報４１０に格納されていた、更新前のデータに係る共有メモリ領域１２０のアドレスは、参照済みメモリ領域情報４３０に格納する。共有メモリ領域開放スレッド２３０は、参照済みメモリ領域情報４３０にアドレスが格納されている、参照されなくなった共有メモリ領域１２０を定期的に開放（削除）することで、メモリリークを防ぐ。
【００３３】
このような処理により、排他制御を行わずに、トランザクションによる共有メモリ１００の参照と、共有メモリ更新コマンド３００による共有メモリ１００の更新とを処理することができるので、ＣＰＵ性能が頭打ちとなることを防ぐことが可能となる。
【００３４】
（２  システム構成）
以下、情報処理装置１の構成を、図１を参照しながら説明する。上述した通り、情報処理装置１のシステムは、共有メモリ１００と、共有メモリを参照及び更新するプロセス２００と、共有メモリ１００を更新する共有メモリ更新コマンド３００と、プロセス２００に含まれる各スレッドが参照及び更新する共有メモリ参照テーブル４００とを含む。
【００３５】
共有メモリ１００は、プロセス２００や共有メモリ更新コマンド３００を含むプロセス、及びその他のプロセスが同時並行的にアクセス可能な記憶媒体（もしくは、記憶媒体の一部）である。共有メモリ１００には、世代番号１１０が管理されると共に、共有メモリ領域１２０が確保される。
世代番号１１０は、共有メモリ更新コマンド３００により新たな共有メモリ領域１２０が確保される毎に加算（又は減算）される番号である。この世代番号１１０の値は、最新のデータが格納された共有メモリ領域１２０のメモリ番号１２１と一致する。
【００３６】
共有メモリ領域１２０は、共有メモリ更新コマンド３００によりデータが記録若しくは更新される際に、当該データを格納するために共有メモリ１００上に確保される記憶領域である。ここで、共有メモリ領域１２０の領域内には、メモリ番号１２１が管理される。メモリ番号１２１は、各共有メモリ領域１２０を識別するための識別子としての役割を果たす番号である。
【００３７】
尚、本実施形態の説明において、共有メモリ領域１２０Ａ、１２０Ｂ等の個別の領域に言及しない場合には、「共有メモリ領域１２０」として総称する。この点、メモリ番号１２１についても同様である。
【００３８】
プロセス２００は、トランザクションスレッド２１０、変更スレッド２２０、及び共有メモリ領域開放スレッド２３０の各スレッドを含む。トランザクションスレッド２１０、変更スレッド２２０、及び共有メモリ領域開放スレッド２３０は、それぞれ共有メモリ参照テーブル４００中の情報を参照すると共に更新する。
【００３９】
トランザクションスレッド２１０は、共有メモリ１００（に記憶されるデータ）を参照しながら実行するトランザクションのスレッドである。トランザクションスレッド２１０は、トランザクション開始手段２１１及びトランザクション終了手段２１３を含む。
【００４０】
ここで、トランザクション開始手段２１１は、トランザクションスレッド２１０を開始する。この開始処理の中でトランザクション開始手段２１１は、共有メモリ参照テーブル４００中の、トランザクション参照メモリ領域情報４１０と、次回トランザクション参照メモリ領域情報４２０とを確認する。双方に設定された共有メモリ領域１２０のアドレスが異なる場合には、トランザクション開始手段２１１は、次回トランザクション参照メモリ領域情報４２０に設定されていた共有メモリ領域１２０のアドレスをトランザクション参照メモリ領域情報４１０に格納すると共に、それまでトランザクション参照メモリ領域情報４１０に格納されていた共有メモリ領域１２０のアドレスを参照済みメモリ領域情報４３０に格納する（追加する）。
【００４１】
トランザクション終了手段２１３は、トランザクションスレッド２１０を終了する。この終了処理の中で、トランザクション終了手段２１３は、トランザクション開始手段２１１と同様に、共有メモリ参照テーブル４００中の、トランザクション参照メモリ領域情報４１０と、次回トランザクション参照メモリ領域情報４２０とを確認する。双方に設定された共有メモリ領域１２０のアドレスが異なる場合には、トランザクション終了手段２１３は、次回トランザクション参照メモリ領域情報４２０に設定されていた共有メモリ領域１２０のアドレスをトランザクション参照メモリ領域情報４１０に格納すると共に、それまでトランザクション参照メモリ領域情報４１０に格納されていた共有メモリ領域１２０のアドレスを参照済みメモリ領域情報４３０に格納する（追加する）。
【００４２】
尚、本実施形態では、トランザクション開始手段２１１及びトランザクション終了手段２１３の双方が、共有メモリ参照テーブル４００中の、トランザクション参照メモリ領域情報４１０と、次回トランザクション参照メモリ領域情報４２０とを確認し、相違がある場合には情報を更新しているが、これに限られるものではない。具体的には、たとえばトランザクション開始手段２１１のみを備え、トランザクション開始時に実行するようにしても良い。
【００４３】
変更スレッド２２０は、最新データが記憶された共有メモリ領域１２０のアドレスを設定するためのスレッドであり、共有メモリ設定手段２２１を含む。ここで、共有メモリ設定手段２２１は、共有メモリ更新手段３１０から共有メモリ領域１２０の新たな作成を通知されると、共有メモリ１００から世代番号１１０を読込み、この世代番号１１０と同一の番号を持つ共有メモリ領域１２０のアドレスを、共有メモリ参照テーブル４００中の次回トランザクション参照メモリ領域情報４２０に設定する。
【００４４】
共有メモリ領域開放スレッド２３０は、参照されなくなったデータが格納されている共有メモリ１００上に確保された共有メモリ領域１２０を確保するためのスレッドであり、共有メモリ開放手段２３１を含む。
【００４５】
共有メモリ開放手段２３１は、定期間隔で、参照済みメモリ領域情報４３０にアドレスが設定されている共有メモリ領域１２０を開放することで、参照されなくなった、古いデータを削除する。また、共有メモリ開放手段２３１は、この開放処理後、参照済みメモリ領域情報４３０を未設定に変更する（書き換える）。
【００４６】
共有メモリ更新コマンド３００は、共有メモリ１００のデータを更新するための命令であり、共有メモリ更新手段３１０を含む。共有メモリ更新手段３１０は、新たに共有メモリ領域１２０を作成すると共に、世代番号１１０に１加算する。また、共有メモリ更新コマンド３００は、作成した新たな共有メモリ領域１２０中に、当該加算後の世代番号１１０をメモリ番号１２１として格納する。
【００４７】
共有メモリ参照テーブル４００は、トランザクション参照メモリ領域情報４１０、次回トランザクション参照メモリ領域情報４２０、及び参照済みメモリ領域情報４３０を管理する。各共有メモリ領域１２０のアドレスが、トランザクション参照メモリ領域情報４１０、次回トランザクション参照メモリ領域情報４２０、及び参照済みメモリ領域情報４３０の少なくともいずれかに格納される。
【００４８】
トランザクション参照メモリ領域情報４１０には、トランザクションスレッド２１０が参照する、共有メモリ１００上の共有メモリ領域１２０のアドレスが格納される。
【００４９】
次回トランザクション参照メモリ領域情報４２０には、最新のデータが格納される共有メモリ領域１２０（次に実行されるトランザクションが参照すべき共有メモリ領域１２０）のアドレスが格納される。
【００５０】
参照済みメモリ領域情報４３０には、トランザクションスレッド２１０が以前処理していたトランザクションが参照していた（すなわち、現在参照されていない）共有メモリ領域１２０のアドレスが格納される。参照済みメモリ領域情報４３０には、複数の共有メモリ領域１２０のアドレスを格納することができる。
【００５１】
（３  処理の流れ）
次に、情報処理装置１による処理の流れを、図２乃至図４をそれぞれ参照しながら説明する。以下、「３．１」で共有メモリ１００へのデータ更新時の処理の流れを、「３．２」でトランザクション開始時又は終了時の処理の流れを説明する。
【００５２】
（３．１  データ更新時の処理の流れ）
図２及び図３を参照しながら、共有メモリ１００へのデータ更新時（作成時）の処理の流れを説明する。図２及び図３は、それぞれ、共有メモリ１００へのデータ更新時（作成時）の、共有メモリ更新手段３１０及び共有メモリ設定手段２２１の処理の流れを説明するためのフローチャートである。
【００５３】
共有メモリ更新手段３１０は、共有メモリ１００のデータを更新するために、まず共有メモリ１００の空き領域に、新たな共有メモリ領域１２０を確保すると共に、データを格納する（Ｓ２０１）。次に、共有メモリ更新手段３１０は、世代番号１１０を更新（１加算）すると共に（Ｓ２０３）、更新後の世代番号１１０を、新たに確保した共有メモリ領域１２０のメモリ番号１２１として設定する（Ｓ２０５）。
【００５４】
これらの処理が終了すると、共有メモリ更新手段３１０は、共有メモリ領域１２０を新たに作成した旨のイベントを、共有メモリ設定手段２２１に通知する（Ｓ２０７）。
【００５５】
共有メモリ設定手段２２１は、共有メモリ更新手段３１０から共有メモリ領域１２０を作成した旨のイベントを受信すると（Ｓ３０１）、共有メモリ１００にアクセスして、現在の世代番号１１０を取得する（Ｓ３０３）。その上で、共有メモリ設定手段２２１は、当該世代番号１１０と同一の番号を持つメモリ番号１２１をもつ共有メモリ領域１２０を探索し、当該共有メモリ領域１２０のアドレスを、次回トランザクション参照メモリ領域情報４２０に設定する（Ｓ３０５）。
以上により、共有メモリ１００の更新処理が完了する。
【００５６】
（３．２  トランザクションの開始時又は終了時の処理の流れ）
続いて、トランザクション開始時又は終了時の処理の流れを、図４を参照しながら説明する。尚、本実施形態では、トランザクション開始時及び終了時に、それぞれトランザクション開始手段２１１及びトランザクション終了手段２１３が、図４に示す同一の処理を行うが、ここでは、トランザクション開始手段２１１の処理として説明する。
【００５７】
トランザクション開始手段２１１は、トランザクションスレッド２１０によるトランザクション処理の開始時に、トランザクション参照メモリ領域情報４１０に設定された共有メモリ領域１２０のアドレスと、次回トランザクション参照メモリ領域情報４２０に設定された共有メモリ領域１２０のアドレスとが、同一であるか異なるかを確認する（Ｓ４０１）。設定されたアドレスが相違する場合（参照先の共有メモリ領域１２０が異なる場合。Ｓ４０１のＹｅｓ）、トランザクション開始手段２１１は、トランザクション参照メモリ領域情報４１０に設定されていた共有メモリ領域１２０のアドレスを、参照済みメモリ領域情報４３０に設定（追加）する（Ｓ４０３）。そして、トランザクション開始手段２１１は、次回トランザクション参照メモリ領域情報４２０に設定されていた共有メモリ領域１２０のアドレスを、トランザクション参照メモリ領域情報４１０に設定する（Ｓ４０５）。
【００５８】
これにより、トランザクション実行前（前回のトランザクション実行時も含む）までに、最新のデータが格納された共有メモリ領域１２０の位置が変更されていた場合であっても、トランザクションスレッド２１０が、最新のデータが格納された共有メモリ領域１２０を参照できるようになる。
【００５９】
（４  具体例の説明）
以下、図５を参照しながら、本実施形態に係る情報処理装置１の処理の具体例を説明する。図５は、共有メモリ１００のデータ更新及び開放に関する処理の流れの具体例を説明するための図である。以下、共有メモリ１００及び共有メモリ参照テーブル４００の状態遷移に着目しながら説明する。
【００６０】
トランザクションスレッド２１０によるトランザクションが開始される前、共有メモリ参照テーブル４００には、トランザクション参照メモリ領域情報４１０に「共有メモリ領域Ａ」（共有メモリ領域１２０Ａのアドレス）が、次回トランザクション参照メモリ領域情報４２０に「共有メモリ領域Ｂ」（同じく、共有メモリ領域１２０Ｂのアドレス）が、それぞれ設定されている。参照済みメモリ領域情報４３０には、何も設定されていない（未設定）。
【００６１】
また、共有メモリ１００には、共有メモリ領域１２０Ａ及び１２０Ｂが確保されてデータが格納されると共に、それぞれのメモリ番号１２１Ａ及び１２１Ｂには「１」、「２」が設定されている。世代番号１１０には、現在のメモリ番号１２１の中で最も大きい値（最新のデータが格納されている共有メモリ領域１２０Ｂ）と一致する「２」が設定されている。
【００６２】
トランザクションスレッド２１０のトランザクション開始手段２１１がトランザクションを開始すると、図４を参照して説明した通り、まず、トランザクション開始手段２１１は、トランザクション参照メモリ領域情報４１０と次回トランザクション参照メモリ領域情報４２０とを確認し、両者に設定された共有メモリ領域１２０のアドレスが一致しているか否かを確認する。
【００６３】
図５の例では、トランザクション参照メモリ領域情報４１０には「共有メモリ領域Ａ」が、次回トランザクション参照メモリ領域情報４２０には「共有メモリ領域Ｂ」が、それぞれ設定されている。つまり両者が異なるため、トランザクション開始手段２１１は、トランザクション参照メモリ領域情報４１０に設定されていた「共有メモリ領域Ａ」（共有メモリ領域１２０Ａのアドレス）を参照済みメモリ領域情報４３０に設定すると共に、次回トランザクション参照メモリ領域情報４２０に設定されていた「共有メモリ領域Ｂ」（共有メモリ領域１２０Ｂのアドレス）を、トランザクション参照メモリ領域情報４１０に格納する。
次に、トランザクションスレッド２１０によるトランザクション中に、共有メモリ更新コマンド３００が共有メモリ１００を更新する場合を考える。
【００６４】
共有メモリ更新コマンド３００の共有メモリ更新手段３１０は、共有メモリ１００に、新たな共有メモリ領域１２０Ｃ（「共有メモリ領域Ｃ」）を確保すると共に、世代番号１１０を１加算して「３」を世代番号１１０に設定し、当該世代番号１１０と同一の値である「３」を、共有メモリ領域１２０Ｃのメモリ番号１２１Ｃに設定する。
共有メモリ更新手段３１０は、これらの処理が完了した後、その旨を変更スレッド２２０の共有メモリ設定手段２２１に通知する。
【００６５】
共有メモリ設定手段２２１は、新たな共有メモリ領域１２０Ｃを作成した旨のイベントを受信すると、共有メモリ１００の世代番号１１０を参照して、最新のメモリ番号１２１が「３」である旨を知ると、「３」をメモリ番号１２１Ｃに持つ共有メモリ領域１２０Ｃのアドレス（「共有メモリ領域Ｃ」）を、次回トランザクション参照メモリ領域情報４２０に格納する。
【００６６】
図５の例では、共有メモリ設定手段２２１が次回トランザクション参照メモリ領域情報４２０を変更後、トランザクションスレッド２１０のトランザクション終了手段２１３が、トランザクションを終了する。この時、まずトランザクション終了手段２１３は、トランザクション参照メモリ領域情報４１０と次回トランザクション参照メモリ領域情報４２０とを確認し、両者に設定された共有メモリ領域１２０のアドレスが一致しているか否かを確認する。
【００６７】
今回の例では、トランザクション参照メモリ領域情報４１０には「共有メモリ領域Ｂ」が、次回トランザクション参照メモリ領域情報４２０には「共有メモリ領域Ｃ」が、それぞれ設定されている。つまり両者が異なるため、トランザクション終了手段２１３は、トランザクション参照メモリ領域情報４１０に設定されていた「共有メモリ領域Ｂ」（共有メモリ領域１２０Ｂのアドレス）を参照済みメモリ領域情報４３０に格納（追加）すると共に、次回トランザクション参照メモリ領域情報４２０に設定されていた「共有メモリ領域Ｃ」（共有メモリ領域１２０Ｃのアドレス）を、トランザクション参照メモリ領域情報４１０に格納する。
【００６８】
図５の例では、トランザクションスレッド２１０のトランザクション終了後、定期間隔で動作している共有メモリ開放手段２３１が、使用されていない共有メモリ領域１２０の開放処理を行う。具体的には、共有メモリ開放手段２３１は、まず、共有メモリ参照テーブル４００の参照済みメモリ領域情報４３０を参照し、現在参照されていない共有メモリ領域１２０Ａ（「共有メモリ領域Ａ」）及び共有メモリ領域１２０Ｂ（「共有メモリ領域Ｂ」）のアドレスを取得する。そして、共有メモリ開放手段２３１は、共有メモリ領域１２０Ａ及び１２０Ｂを開放し、これらの領域に記憶されていたデータを削除する。削除完了後、共有メモリ開放手段２３１は、共有メモリ参照テーブル４００の参照済みメモリ領域情報４３０を、「未設定」に変更する。
【００６９】
（５  本実施形態の効果）
上述したように、本実施形態に係る情報処理装置１は、次回トランザクション参照メモリ領域情報４２０に、共有メモリ更新コマンド３００で作成した共有メモリ領域１２０の情報を格納し、トランザクションの開始時又は終了時の少なくとも一方に、次回トランザクション参照メモリ領域情報４２０の情報を、トランザクション参照メモリ領域情報４１０に設定する。これにより、トランザクション中でも、当該トランザクションによる参照処理との排他制御を行わずに、また誤参照することなく、共有メモリ１００に対する更新を行うことができる。
【００７０】
また、参照済みメモリ領域情報４３０に、参照済みの共有メモリ領域１２０の情報を退避することで、共有メモリ開放手段２３１が、参照されなくなった共有メモリ領域１２０を定期間隔で開放すると共に、メモリリークを防ぐことができる。
【００７１】
（５  付記事項）
尚、前述の各実施形態の構成は、組み合わせたり或いは一部の構成部分を入れ替えたりしてもよい。また、本発明の構成は前述の実施形態のみに限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変更を加えてもよい。
また、前述の各実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【００７２】
（付記１）
第１のデータが記憶された記憶媒体上の位置に関する第１の位置情報を記憶する第１の記憶手段と、前記第１の記憶手段に記憶された前記第１の位置情報に基づき、第１のデータを参照して第１のトランザクションを処理する第１の処理手段と、前記第１のデータを更新した第２のデータを、前記第１のデータとは異なる前記記憶媒体上の位置に記録する更新手段と、前記第２のデータが記録された前記記憶媒体上の位置に関する第２の位置情報を記憶する第２の記憶手段と、前記第１の記憶手段に記憶された前記第１の位置情報が、前記第２の記憶手段に記憶された前記第２の位置情報と異なる場合に、前記第１の記憶手段に前記第２の位置情報を記録する位置情報更新手段とを備える情報処理装置。
【００７３】
（付記２）
前記位置情報更新手段は、前記第１のトランザクションの次に実行される第２のトランザクションの開始に伴い、前記第１の記憶手段に前記第２の位置情報を記録する、付記１に記載の情報処理装置。
【００７４】
（付記３）
前記位置情報更新手段は、前記第１のトランザクションの終了に伴い、前記第１の記憶手段に前記第２の位置情報を記録する、付記１又は付記２記載の情報処理装置。
【００７５】
（付記４）
前記位置情報更新手段が前記第１の記憶手段に前記第２の記憶情報を記録する際に、前記第１の記憶手段に記憶されていた前記第１の位置情報が記録される第３の記憶手段を更に備える、付記１乃至付記３記載の情報処理装置。
【００７６】
（付記５）
前記第３の記憶手段に記憶された前記第１の位置情報と、前記第１の位置情報に対応する前記第１のデータとを削除する削除手段を更に備える、付記４記載の情報処理装置。
【００７７】
（付記６）
第１のデータが記憶された記憶媒体上の位置に関する第１の位置情報を第１の記憶手段に記録するステップと、前記第１の記憶手段に記憶された前記第１の位置情報に基づき、第１のデータを参照して第１のトランザクションを処理するステップと、前記第１のデータを更新した第２のデータを、前記第１のデータとは異なる前記記憶媒体上の位置に記録するステップと、前記第２のデータが記録された前記記憶媒体上の位置に関する第２の位置情報を前記第２の記憶手段に記録するステップと、前記第１の記憶手段に記憶された前記第１の位置情報が、前記第２の記憶手段に記憶された前記第２の位置情報と異なる場合に、前記第１の記憶手段に前記第２の位置情報を位置情報更新手段に記録するステップとを備える情報処理方法。
【００７８】
（付記７）
情報処理装置に、第１のデータが記憶された記憶媒体上の位置に関する第１の位置情報を第１の記憶手段に記録するステップと、前記第１の記憶手段に記憶された前記第１の位置情報に基づき、第１のデータを参照して第１のトランザクションを処理するステップと、前記第１のデータを更新した第２のデータを、前記第１のデータとは異なる前記記憶媒体上の位置に記録するステップと、前記第２のデータが記録された前記記憶媒体上の位置に関する第２の位置情報を前記第２の記憶手段に記録するステップと、前記第１の記憶手段に記憶された前記第１の位置情報が、前記第２の記憶手段に記憶された前記第２の位置情報と異なる場合に、前記第１の記憶手段に前記第２の位置情報を位置情報更新手段に記録するステップとを実行させるためのプログラム。
【符号の説明】
【００７９】
１・・・情報処理装置、１００・・・共有メモリ、１１０・・・世代番号、１２０・・・共有メモリ領域、１２１・・・メモリ番号、２００・・・プロセス、２１０・・・トランザクションスレッド、２１１・・・トランザクション開始手段、２１３・・・トランザクション終了手段、２２０・・・変更スレッド、２２１・・・共有メモリ設定手段、２３０・・・共有メモリ領域開放スレッド、２３１・・・共有メモリ開放手段、３００・・・共有メモリ更新コマンド、３１０・・・共有メモリ更新手段、４００・・・共有メモリ参照テーブル、４１０・・・トランザクション参照メモリ領域情報、４２０・・・次回トランザクション参照メモリ領域情報、４３０・・・参照済みメモリ領域情報
【図１】
0005975419.tif 000002
【図２】
0005975419.tif 000003
【図３】
0005975419.tif 000004
【図４】
0005975419.tif 000005
【図５】
0005975419.tif 000006