(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0015】
以下に本発明の実施形態を説明する。以下の説明及び参照する図面の記載において、同一又は類似の構成には、それぞれ同一又は類似の符号が付されている。
(実施形態)
【0016】
図1乃至
図5は、本発明の実施形態を説明するための図である。以下、これらの図を参照しながら、以下の流れに沿って本実施形態を説明する。まず、「1」で実施形態全体の概要を示す。その上で、「2」でシステム構成を、「3」で処理の流れを説明する。「4」では、本実施形態の処理の流れを、具体例を挙げて説明する。最後に、「5」以降で、本実施形態に係る効果等を説明する。
【0017】
(1 概要)
複数のプログラムから平行して同一のデータにアクセス可能な共有メモリと呼ばれる技術がある。本実施形態では、トランザクションで共有メモリ上のデータを参照すると共に、同じデータを、当該トランザクションとは別プロセスに係る更新コマンドで更新する場合を考える。
このようなシステムの処理は、以下のような処理に分解することができる。
【0018】
(a)データの更新に伴い、トランザクションが参照すべき共有メモリ上の領域(データが記憶される位置であり、以下「共有メモリ領域」ともいう。)は随時変更され、トランザクションから参照されなくなった共有メモリ領域のデータ(更新前のデータ)は削除される。
(b)共有メモリ上のデータの更新及び削除は、トランザクションのプロセスとは別のプロセスで実行される。
(c)トランザクションの処理中は、共有メモリ上のデータが更新されても、当該トランザクションが参照する共有メモリ領域は変更しない。
(d)トランザクションが実行されるプロセスは、共有メモリ上のデータが更新されると、トランザクションが参照すべき共有メモリ領域を変更する。
【0019】
このようなシステムでは、トランザクション処理とは別に、データが更新されたらトランザクションが参照する共有メモリ領域を変更する処理が必要となるため、例えば、以下の2つのスレッドを用意し、この2つのスレッドを排他制御することとなる。
(1)トランザクションを実行するスレッド
(2)データの更新を受信し、トランザクションで参照すべき共有メモリ領域を変更すると共に、参照されなくなった共有メモリ領域を開放するスレッド
【0020】
ここで、上記2つのスレッドを排他制御すると、データの変更に伴う共有メモリ領域の誤参照やメモリリークを防いでデータの整合性を保つことができるようになる。
【0021】
しかしながら、CPU(Central Processing Unit)数が多いシステムでこのような手法を行うと、この処理がクリティカルセクションとなるので待ち合わせが発生し、CPU性能を十分に発揮できずに性能が頭打ちとなってしまう。
【0022】
そこで、本実施形態の情報処理装置1は、
図1のような構成を有する。情報処理装置1のシステムは、共有メモリ100と、共有メモリ100を参照及び更新するプロセス200と、共有メモリ100を更新する共有メモリ更新コマンド300と、プロセス200に含まれる各スレッドが参照及び更新する共有メモリ参照テーブル400とを含む。
【0023】
図1の例において、プロセス200及び共有メモリ更新コマンド300は、それぞれCPU上で実行されるプログラム、又はプログラムの一部であり、プロセス200及び共有メモリ更新コマンド300は、共有メモリ100上のデータに、平行してアクセス可能である。つまり、プロセス200が共有メモリ100上のデータを参照しながら、共有メモリ更新コマンド300が同じデータを更新することが有りうる。
【0024】
プロセス200は、トランザクションスレッド210、変更スレッド220、及び共有メモリ領域開放スレッド230の各スレッドを含む。トランザクションスレッド210、変更スレッド220、及び共有メモリ領域開放スレッド230、それぞれ共有メモリ参照テーブル400を参照し、データ(情報)を更新する。
【0025】
共有メモリ参照テーブル400は、図示しない記憶媒体上で管理される情報管理テーブルであり、トランザクション参照メモリ領域情報410、次回トランザクション参照メモリ領域情報420、及び参照済みメモリ領域情報430を管理する。
【0026】
トランザクション参照メモリ領域情報410には、トランザクションスレッド210により処理されるトランザクションで参照する、共有メモリ100上の共有メモリ領域120のアドレスが格納される。
【0027】
次回トランザクション参照メモリ領域情報420には、現在または直前にトランザクションスレッド210により実行されていたトランザクションの次に実行されるトランザクションが参照すべき共有メモリ領域120のアドレスが格納される。
【0028】
参照済みメモリ領域情報430には、トランザクションスレッド210が以前処理していたトランザクションが参照していた(すなわち、現在参照されていない)共有メモリ領域120のアドレスが格納される。
【0029】
このような共有メモリ参照テーブル400の管理により、情報処理装置1は、トランザクションを実行するトランザクションスレッド210と、共有メモリ更新コマンド300による共有メモリ100更新に係るスレッドとの間の排他を回避している。
【0030】
トランザクションスレッド210によるトランザクション中に共有メモリ100の更新が発生した場合(トランザクションスレッド210が参照するデータの更新が発生した場合)、まず、更新後のデータは、更新前のデータが格納される共有メモリ領域120とは異なる共有メモリ領域120に格納される。
【0031】
そして、トランザクション参照メモリ領域情報410には、更新前のデータが格納される共有メモリ領域120のアドレスを格納し続けると共に(すなわち、少なくともトランザクション終了までは更新しない)、次回トランザクション参照メモリ領域情報420には、更新後のデータ(最新のデータ)が格納される共有メモリ領域120のアドレスを格納する。これにより、たとえトランザクション中に共有メモリ100が更新されたとしても、今回のトランザクションでは更新前のデータを参照しつつ、次回のトランザクションでは、最新のデータが格納された共有メモリ領域120を参照することができるようになる。
【0032】
また、次回のトランザクションの実行開始時、もしくはそれよりも前に(例えば、前回のトランザクションの終了処理時)、次回トランザクション参照メモリ領域情報420に格納された最新のデータの共有メモリ領域120のアドレスをトランザクション参照メモリ領域情報410に格納すると共に、それまでにトランザクション参照メモリ領域情報410に格納されていた、更新前のデータに係る共有メモリ領域120のアドレスは、参照済みメモリ領域情報430に格納する。共有メモリ領域開放スレッド230は、参照済みメモリ領域情報430にアドレスが格納されている、参照されなくなった共有メモリ領域120を定期的に開放(削除)することで、メモリリークを防ぐ。
【0033】
このような処理により、排他制御を行わずに、トランザクションによる共有メモリ100の参照と、共有メモリ更新コマンド300による共有メモリ100の更新とを処理することができるので、CPU性能が頭打ちとなることを防ぐことが可能となる。
【0034】
(2 システム構成)
以下、情報処理装置1の構成を、
図1を参照しながら説明する。上述した通り、情報処理装置1のシステムは、共有メモリ100と、共有メモリを参照及び更新するプロセス200と、共有メモリ100を更新する共有メモリ更新コマンド300と、プロセス200に含まれる各スレッドが参照及び更新する共有メモリ参照テーブル400とを含む。
【0035】
共有メモリ100は、プロセス200や共有メモリ更新コマンド300を含むプロセス、及びその他のプロセスが同時並行的にアクセス可能な記憶媒体(もしくは、記憶媒体の一部)である。共有メモリ100には、世代番号110が管理されると共に、共有メモリ領域120が確保される。
世代番号110は、共有メモリ更新コマンド300により新たな共有メモリ領域120が確保される毎に加算(又は減算)される番号である。この世代番号110の値は、最新のデータが格納された共有メモリ領域120のメモリ番号121と一致する。
【0036】
共有メモリ領域120は、共有メモリ更新コマンド300によりデータが記録若しくは更新される際に、当該データを格納するために共有メモリ100上に確保される記憶領域である。ここで、共有メモリ領域120の領域内には、メモリ番号121が管理される。メモリ番号121は、各共有メモリ領域120を識別するための識別子としての役割を果たす番号である。
【0037】
尚、本実施形態の説明において、共有メモリ領域120A、120B等の個別の領域に言及しない場合には、「共有メモリ領域120」として総称する。この点、メモリ番号121についても同様である。
【0038】
プロセス200は、トランザクションスレッド210、変更スレッド220、及び共有メモリ領域開放スレッド230の各スレッドを含む。トランザクションスレッド210、変更スレッド220、及び共有メモリ領域開放スレッド230は、それぞれ共有メモリ参照テーブル400中の情報を参照すると共に更新する。
【0039】
トランザクションスレッド210は、共有メモリ100(に記憶されるデータ)を参照しながら実行するトランザクションのスレッドである。トランザクションスレッド210は、トランザクション開始手段211及びトランザクション終了手段213を含む。
【0040】
ここで、トランザクション開始手段211は、トランザクションスレッド210を開始する。この開始処理の中でトランザクション開始手段211は、共有メモリ参照テーブル400中の、トランザクション参照メモリ領域情報410と、次回トランザクション参照メモリ領域情報420とを確認する。双方に設定された共有メモリ領域120のアドレスが異なる場合には、トランザクション開始手段211は、次回トランザクション参照メモリ領域情報420に設定されていた共有メモリ領域120のアドレスをトランザクション参照メモリ領域情報410に格納すると共に、それまでトランザクション参照メモリ領域情報410に格納されていた共有メモリ領域120のアドレスを参照済みメモリ領域情報430に格納する(追加する)。
【0041】
トランザクション終了手段213は、トランザクションスレッド210を終了する。この終了処理の中で、トランザクション終了手段213は、トランザクション開始手段211と同様に、共有メモリ参照テーブル400中の、トランザクション参照メモリ領域情報410と、次回トランザクション参照メモリ領域情報420とを確認する。双方に設定された共有メモリ領域120のアドレスが異なる場合には、トランザクション終了手段213は、次回トランザクション参照メモリ領域情報420に設定されていた共有メモリ領域120のアドレスをトランザクション参照メモリ領域情報410に格納すると共に、それまでトランザクション参照メモリ領域情報410に格納されていた共有メモリ領域120のアドレスを参照済みメモリ領域情報430に格納する(追加する)。
【0042】
尚、本実施形態では、トランザクション開始手段211及びトランザクション終了手段213の双方が、共有メモリ参照テーブル400中の、トランザクション参照メモリ領域情報410と、次回トランザクション参照メモリ領域情報420とを確認し、相違がある場合には情報を更新しているが、これに限られるものではない。具体的には、たとえばトランザクション開始手段211のみを備え、トランザクション開始時に実行するようにしても良い。
【0043】
変更スレッド220は、最新データが記憶された共有メモリ領域120のアドレスを設定するためのスレッドであり、共有メモリ設定手段221を含む。ここで、共有メモリ設定手段221は、共有メモリ更新手段310から共有メモリ領域120の新たな作成を通知されると、共有メモリ100から世代番号110を読込み、この世代番号110と同一の番号を持つ共有メモリ領域120のアドレスを、共有メモリ参照テーブル400中の次回トランザクション参照メモリ領域情報420に設定する。
【0044】
共有メモリ領域開放スレッド230は、参照されなくなったデータが格納されている共有メモリ100上に確保された共有メモリ領域120を確保するためのスレッドであり、共有メモリ開放手段231を含む。
【0045】
共有メモリ開放手段231は、定期間隔で、参照済みメモリ領域情報430にアドレスが設定されている共有メモリ領域120を開放することで、参照されなくなった、古いデータを削除する。また、共有メモリ開放手段231は、この開放処理後、参照済みメモリ領域情報430を未設定に変更する(書き換える)。
【0046】
共有メモリ更新コマンド300は、共有メモリ100のデータを更新するための命令であり、共有メモリ更新手段310を含む。共有メモリ更新手段310は、新たに共有メモリ領域120を作成すると共に、世代番号110に1加算する。また、共有メモリ更新コマンド300は、作成した新たな共有メモリ領域120中に、当該加算後の世代番号110をメモリ番号121として格納する。
【0047】
共有メモリ参照テーブル400は、トランザクション参照メモリ領域情報410、次回トランザクション参照メモリ領域情報420、及び参照済みメモリ領域情報430を管理する。各共有メモリ領域120のアドレスが、トランザクション参照メモリ領域情報410、次回トランザクション参照メモリ領域情報420、及び参照済みメモリ領域情報430の少なくともいずれかに格納される。
【0048】
トランザクション参照メモリ領域情報410には、トランザクションスレッド210が参照する、共有メモリ100上の共有メモリ領域120のアドレスが格納される。
【0049】
次回トランザクション参照メモリ領域情報420には、最新のデータが格納される共有メモリ領域120(次に実行されるトランザクションが参照すべき共有メモリ領域120)のアドレスが格納される。
【0050】
参照済みメモリ領域情報430には、トランザクションスレッド210が以前処理していたトランザクションが参照していた(すなわち、現在参照されていない)共有メモリ領域120のアドレスが格納される。参照済みメモリ領域情報430には、複数の共有メモリ領域120のアドレスを格納することができる。
【0051】
(3 処理の流れ)
次に、情報処理装置1による処理の流れを、
図2乃至
図4をそれぞれ参照しながら説明する。以下、「3.1」で共有メモリ100へのデータ更新時の処理の流れを、「3.2」でトランザクション開始時又は終了時の処理の流れを説明する。
【0052】
(3.1 データ更新時の処理の流れ)
図2及び
図3を参照しながら、共有メモリ100へのデータ更新時(作成時)の処理の流れを説明する。
図2及び
図3は、それぞれ、共有メモリ100へのデータ更新時(作成時)の、共有メモリ更新手段310及び共有メモリ設定手段221の処理の流れを説明するためのフローチャートである。
【0053】
共有メモリ更新手段310は、共有メモリ100のデータを更新するために、まず共有メモリ100の空き領域に、新たな共有メモリ領域120を確保すると共に、データを格納する(S201)。次に、共有メモリ更新手段310は、世代番号110を更新(1加算)すると共に(S203)、更新後の世代番号110を、新たに確保した共有メモリ領域120のメモリ番号121として設定する(S205)。
【0054】
これらの処理が終了すると、共有メモリ更新手段310は、共有メモリ領域120を新たに作成した旨のイベントを、共有メモリ設定手段221に通知する(S207)。
【0055】
共有メモリ設定手段221は、共有メモリ更新手段310から共有メモリ領域120を作成した旨のイベントを受信すると(S301)、共有メモリ100にアクセスして、現在の世代番号110を取得する(S303)。その上で、共有メモリ設定手段221は、当該世代番号110と同一の番号を持つメモリ番号121をもつ共有メモリ領域120を探索し、当該共有メモリ領域120のアドレスを、次回トランザクション参照メモリ領域情報420に設定する(S305)。
以上により、共有メモリ100の更新処理が完了する。
【0056】
(3.2 トランザクションの開始時又は終了時の処理の流れ)
続いて、トランザクション開始時又は終了時の処理の流れを、
図4を参照しながら説明する。尚、本実施形態では、トランザクション開始時及び終了時に、それぞれトランザクション開始手段211及びトランザクション終了手段213が、
図4に示す同一の処理を行うが、ここでは、トランザクション開始手段211の処理として説明する。
【0057】
トランザクション開始手段211は、トランザクションスレッド210によるトランザクション処理の開始時に、トランザクション参照メモリ領域情報410に設定された共有メモリ領域120のアドレスと、次回トランザクション参照メモリ領域情報420に設定された共有メモリ領域120のアドレスとが、同一であるか異なるかを確認する(S401)。設定されたアドレスが相違する場合(参照先の共有メモリ領域120が異なる場合。S401のYes)、トランザクション開始手段211は、トランザクション参照メモリ領域情報410に設定されていた共有メモリ領域120のアドレスを、参照済みメモリ領域情報430に設定(追加)する(S403)。そして、トランザクション開始手段211は、次回トランザクション参照メモリ領域情報420に設定されていた共有メモリ領域120のアドレスを、トランザクション参照メモリ領域情報410に設定する(S405)。
【0058】
これにより、トランザクション実行前(前回のトランザクション実行時も含む)までに、最新のデータが格納された共有メモリ領域120の位置が変更されていた場合であっても、トランザクションスレッド210が、最新のデータが格納された共有メモリ領域120を参照できるようになる。
【0059】
(4 具体例の説明)
以下、
図5を参照しながら、本実施形態に係る情報処理装置1の処理の具体例を説明する。
図5は、共有メモリ100のデータ更新及び開放に関する処理の流れの具体例を説明するための図である。以下、共有メモリ100及び共有メモリ参照テーブル400の状態遷移に着目しながら説明する。
【0060】
トランザクションスレッド210によるトランザクションが開始される前、共有メモリ参照テーブル400には、トランザクション参照メモリ領域情報410に「共有メモリ領域A」(共有メモリ領域120Aのアドレス)が、次回トランザクション参照メモリ領域情報420に「共有メモリ領域B」(同じく、共有メモリ領域120Bのアドレス)が、それぞれ設定されている。参照済みメモリ領域情報430には、何も設定されていない(未設定)。
【0061】
また、共有メモリ100には、共有メモリ領域120A及び120Bが確保されてデータが格納されると共に、それぞれのメモリ番号121A及び121Bには「1」、「2」が設定されている。世代番号110には、現在のメモリ番号121の中で最も大きい値(最新のデータが格納されている共有メモリ領域120B)と一致する「2」が設定されている。
【0062】
トランザクションスレッド210のトランザクション開始手段211がトランザクションを開始すると、
図4を参照して説明した通り、まず、トランザクション開始手段211は、トランザクション参照メモリ領域情報410と次回トランザクション参照メモリ領域情報420とを確認し、両者に設定された共有メモリ領域120のアドレスが一致しているか否かを確認する。
【0063】
図5の例では、トランザクション参照メモリ領域情報410には「共有メモリ領域A」が、次回トランザクション参照メモリ領域情報420には「共有メモリ領域B」が、それぞれ設定されている。つまり両者が異なるため、トランザクション開始手段211は、トランザクション参照メモリ領域情報410に設定されていた「共有メモリ領域A」(共有メモリ領域120Aのアドレス)を参照済みメモリ領域情報430に設定すると共に、次回トランザクション参照メモリ領域情報420に設定されていた「共有メモリ領域B」(共有メモリ領域120Bのアドレス)を、トランザクション参照メモリ領域情報410に格納する。
次に、トランザクションスレッド210によるトランザクション中に、共有メモリ更新コマンド300が共有メモリ100を更新する場合を考える。
【0064】
共有メモリ更新コマンド300の共有メモリ更新手段310は、共有メモリ100に、新たな共有メモリ領域120C(「共有メモリ領域C」)を確保すると共に、世代番号110を1加算して「3」を世代番号110に設定し、当該世代番号110と同一の値である「3」を、共有メモリ領域120Cのメモリ番号121Cに設定する。
共有メモリ更新手段310は、これらの処理が完了した後、その旨を変更スレッド220の共有メモリ設定手段221に通知する。
【0065】
共有メモリ設定手段221は、新たな共有メモリ領域120Cを作成した旨のイベントを受信すると、共有メモリ100の世代番号110を参照して、最新のメモリ番号121が「3」である旨を知ると、「3」をメモリ番号121Cに持つ共有メモリ領域120Cのアドレス(「共有メモリ領域C」)を、次回トランザクション参照メモリ領域情報420に格納する。
【0066】
図5の例では、共有メモリ設定手段221が次回トランザクション参照メモリ領域情報420を変更後、トランザクションスレッド210のトランザクション終了手段213が、トランザクションを終了する。この時、まずトランザクション終了手段213は、トランザクション参照メモリ領域情報410と次回トランザクション参照メモリ領域情報420とを確認し、両者に設定された共有メモリ領域120のアドレスが一致しているか否かを確認する。
【0067】
今回の例では、トランザクション参照メモリ領域情報410には「共有メモリ領域B」が、次回トランザクション参照メモリ領域情報420には「共有メモリ領域C」が、それぞれ設定されている。つまり両者が異なるため、トランザクション終了手段213は、トランザクション参照メモリ領域情報410に設定されていた「共有メモリ領域B」(共有メモリ領域120Bのアドレス)を参照済みメモリ領域情報430に格納(追加)すると共に、次回トランザクション参照メモリ領域情報420に設定されていた「共有メモリ領域C」(共有メモリ領域120Cのアドレス)を、トランザクション参照メモリ領域情報410に格納する。
【0068】
図5の例では、トランザクションスレッド210のトランザクション終了後、定期間隔で動作している共有メモリ開放手段231が、使用されていない共有メモリ領域120の開放処理を行う。具体的には、共有メモリ開放手段231は、まず、共有メモリ参照テーブル400の参照済みメモリ領域情報430を参照し、現在参照されていない共有メモリ領域120A(「共有メモリ領域A」)及び共有メモリ領域120B(「共有メモリ領域B」)のアドレスを取得する。そして、共有メモリ開放手段231は、共有メモリ領域120A及び120Bを開放し、これらの領域に記憶されていたデータを削除する。削除完了後、共有メモリ開放手段231は、共有メモリ参照テーブル400の参照済みメモリ領域情報430を、「未設定」に変更する。
【0069】
(5 本実施形態の効果)
上述したように、本実施形態に係る情報処理装置1は、次回トランザクション参照メモリ領域情報420に、共有メモリ更新コマンド300で作成した共有メモリ領域120の情報を格納し、トランザクションの開始時又は終了時の少なくとも一方に、次回トランザクション参照メモリ領域情報420の情報を、トランザクション参照メモリ領域情報410に設定する。これにより、トランザクション中でも、当該トランザクションによる参照処理との排他制御を行わずに、また誤参照することなく、共有メモリ100に対する更新を行うことができる。
【0070】
また、参照済みメモリ領域情報430に、参照済みの共有メモリ領域120の情報を退避することで、共有メモリ開放手段231が、参照されなくなった共有メモリ領域120を定期間隔で開放すると共に、メモリリークを防ぐことができる。
【0071】
(5 付記事項)
尚、前述の各実施形態の構成は、組み合わせたり或いは一部の構成部分を入れ替えたりしてもよい。また、本発明の構成は前述の実施形態のみに限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変更を加えてもよい。
また、前述の各実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【0072】
(付記1)
第1のデータが記憶された記憶媒体上の位置に関する第1の位置情報を記憶する第1の記憶手段と、前記第1の記憶手段に記憶された前記第1の位置情報に基づき、第1のデータを参照して第1のトランザクションを処理する第1の処理手段と、前記第1のデータを更新した第2のデータを、前記第1のデータとは異なる前記記憶媒体上の位置に記録する更新手段と、前記第2のデータが記録された前記記憶媒体上の位置に関する第2の位置情報を記憶する第2の記憶手段と、前記第1の記憶手段に記憶された前記第1の位置情報が、前記第2の記憶手段に記憶された前記第2の位置情報と異なる場合に、前記第1の記憶手段に前記第2の位置情報を記録する位置情報更新手段とを備える情報処理装置。
【0073】
(付記2)
前記位置情報更新手段は、前記第1のトランザクションの次に実行される第2のトランザクションの開始に伴い、前記第1の記憶手段に前記第2の位置情報を記録する、付記1に記載の情報処理装置。
【0074】
(付記3)
前記位置情報更新手段は、前記第1のトランザクションの終了に伴い、前記第1の記憶手段に前記第2の位置情報を記録する、付記1又は付記2記載の情報処理装置。
【0075】
(付記4)
前記位置情報更新手段が前記第1の記憶手段に前記第2の記憶情報を記録する際に、前記第1の記憶手段に記憶されていた前記第1の位置情報が記録される第3の記憶手段を更に備える、付記1乃至付記3記載の情報処理装置。
【0076】
(付記5)
前記第3の記憶手段に記憶された前記第1の位置情報と、前記第1の位置情報に対応する前記第1のデータとを削除する削除手段を更に備える、付記4記載の情報処理装置。
【0077】
(付記6)
第1のデータが記憶された記憶媒体上の位置に関する第1の位置情報を第1の記憶手段に記録するステップと、前記第1の記憶手段に記憶された前記第1の位置情報に基づき、第1のデータを参照して第1のトランザクションを処理するステップと、前記第1のデータを更新した第2のデータを、前記第1のデータとは異なる前記記憶媒体上の位置に記録するステップと、前記第2のデータが記録された前記記憶媒体上の位置に関する第2の位置情報を前記第2の記憶手段に記録するステップと、前記第1の記憶手段に記憶された前記第1の位置情報が、前記第2の記憶手段に記憶された前記第2の位置情報と異なる場合に、前記第1の記憶手段に前記第2の位置情報を位置情報更新手段に記録するステップとを備える情報処理方法。
【0078】
(付記7)
情報処理装置に、第1のデータが記憶された記憶媒体上の位置に関する第1の位置情報を第1の記憶手段に記録するステップと、前記第1の記憶手段に記憶された前記第1の位置情報に基づき、第1のデータを参照して第1のトランザクションを処理するステップと、前記第1のデータを更新した第2のデータを、前記第1のデータとは異なる前記記憶媒体上の位置に記録するステップと、前記第2のデータが記録された前記記憶媒体上の位置に関する第2の位置情報を前記第2の記憶手段に記録するステップと、前記第1の記憶手段に記憶された前記第1の位置情報が、前記第2の記憶手段に記憶された前記第2の位置情報と異なる場合に、前記第1の記憶手段に前記第2の位置情報を位置情報更新手段に記録するステップとを実行させるためのプログラム。