(57)【要約】      （修正有）【課題】データに対する誤り検出を実行する場合において、データをメモリに書き込み終えるまでに要する時間を短縮する。【解決手段】書き込み制御方法は、第１のメモリ領域１２０７内のデータの複製が格納される第２のメモリ領域１２０８に対して第１のメモリ領域内のデータの複製を書き込む処理を停止し、第１のメモリ領域に書き込まれる書き込みデータに対する誤り検出と、書き込みデータを第１のメモリ領域に書き込む処理とを並行して実行し、書き込みデータについて誤りが検出された場合に、第２のメモリ領域に格納されているデータを用いて、書き込みデータが格納される前の第１のメモリ領域に格納されていたデータを復旧する処理を含む。【選択図】図２
2015022450.tif 000002
【特許請求の範囲】
【請求項１】
第１のメモリ領域内のデータの複製が格納される第２のメモリ領域に対して前記第１のメモリ領域内のデータの複製を書き込む処理を停止し、
前記第１のメモリ領域に書き込まれる書き込みデータに対する誤り検出と、前記書き込みデータを前記第１のメモリ領域に書き込む処理とを並行して実行し、
前記書き込みデータについて誤りが検出された場合に、前記第２のメモリ領域に格納されているデータを用いて、前記書き込みデータが格納される前の前記第１のメモリ領域に格納されていたデータを復旧する
処理をコンピュータに実行させるための書き込み制御プログラム。
【請求項２】
前記書き込みデータの量が、前記第１のメモリ領域の容量と同じであるか判断する
処理をさらに実行させ、
前記第１のメモリ領域に格納されていたデータを復旧する処理において、
前記書き込みデータの量が前記第１のメモリ領域の容量と同じである場合に、前記第１のメモリ領域と前記第２のメモリ領域とを切り替える
処理を実行する請求項１記載の書き込み制御プログラム。
【請求項３】
前記第１のメモリ領域に格納されていたデータを復旧する処理において、
前記書き込みデータの量が前記第１のメモリ領域の容量と同じではない場合に、前記第１のメモリ領域において前記書き込みデータが書き込まれた範囲と同じ範囲のデータを前記第２のメモリ領域から読み出し、前記第１のメモリ領域において前記書き込みデータが書き込まれた範囲に書き込む
処理を実行する請求項２記載の書き込み制御プログラム。
【請求項４】
第１のメモリ領域内のデータの複製が格納される第２のメモリ領域に対して前記第１のメモリ領域内のデータの複製を書き込む処理を停止し、
前記第２のメモリ領域に書き込まれる書き込みデータに対する誤り検出と、前記書き込みデータを前記第２のメモリ領域に書き込む処理とを並行して実行し、
前記書き込みデータについて誤りが検出されなかった場合に、主記憶として利用される領域を前記第１のメモリ領域から前記第２のメモリ領域に切り替える、又は、前記第２のメモリ領域内のデータを前記第１のメモリ領域に反映する
処理をコンピュータに実行させるための書き込み制御プログラム。
【請求項５】
前記書き込みデータの量が、前記第１のメモリ領域の容量の半分以上であるか判断する処理
をさらに実行させ、
前記第１のメモリ領域から前記第２のメモリ領域に切り替える処理において、
前記書き込みデータの量が前記第１のメモリ領域の容量の半分以上である場合に、前記第１のメモリ領域と前記第２のメモリ領域とを切り替える
処理を実行する請求項４記載の書き込み制御プログラム。
【請求項６】
前記書き込みデータの量が前記第１のメモリ領域の容量の半分以上である場合に、前記書き込みデータの量が前記第１のメモリ領域の容量未満であるか判断する処理
をさらに実行させ、
前記第２のメモリ領域内のデータを前記第１のメモリ領域に反映する処理において、
前記書き込みデータの量が前記第１のメモリ領域の容量未満且つ半分以上である場合に、前記第１のメモリ領域において前記書き込みデータが書き込まれた範囲以外の範囲と同じ範囲のデータを前記第２のメモリ領域から読み出し、前記第１のメモリ領域において前記書き込みデータが書き込まれた範囲以外の範囲に書き込む
処理を実行する請求項５記載の書き込み制御プログラム。
【請求項７】
第１のメモリ領域内のデータの複製が格納される第２のメモリ領域に対して前記第１のメモリ領域内のデータの複製を書き込む処理を停止し、前記第１のメモリ領域に書き込みデータを書き込む第１処理部と、
前記第１処理部が前記第１のメモリ領域に前記書き込みデータを書き込む処理と並行して、前記書き込みデータに対する誤り検出を実行する第２処理部と、
前記書き込みデータについて誤りが検出された場合に、前記第２のメモリ領域に格納されているデータを用いて、前記書き込みデータが格納される前の前記第１のメモリ領域に格納されていたデータを復旧する第３処理部と、
を有するコンピュータ。
【請求項８】
第１のメモリ領域内のデータの複製が格納される第２のメモリ領域に対して前記第１のメモリ領域内のデータの複製を書き込む処理を停止し、
前記第１のメモリ領域に書き込まれる書き込みデータに対する誤り検出と、前記書き込みデータを前記第１のメモリ領域に書き込む処理とを並行して実行し、
前記書き込みデータについて誤りが検出された場合に、前記第２のメモリ領域に格納されているデータを用いて、前記書き込みデータが格納される前の前記第１のメモリ領域に格納されていたデータを復旧する
処理をコンピュータが実行する書き込み制御方法。
【請求項９】
第１のメモリ領域内のデータの複製が格納される第２のメモリ領域に対して前記第１のメモリ領域内のデータの複製を書き込む処理を停止し、前記第２のメモリ領域に書き込みデータを書き込む第１処理部と、
前記第１処理部が前記第２のメモリ領域に前記書き込みデータを書き込む処理と並行して、前記書き込みデータに対する誤り検出を実行する第２処理部と、
前記書き込みデータについて誤りが検出されなかった場合に、主記憶として利用される領域を前記第１のメモリ領域から前記第２のメモリ領域に切り替える第３処理部と、
を有するコンピュータ。
【請求項１０】
第１のメモリ領域内のデータの複製が格納される第２のメモリ領域に対して前記第１のメモリ領域内のデータの複製を書き込む処理を停止し、
前記第２のメモリ領域に書き込まれる書き込みデータに対する誤り検出と、前記書き込みデータを前記第２のメモリ領域に書き込む処理とを並行して実行し、
前記書き込みデータについて誤りが検出されなかった場合に、主記憶として利用される領域を前記第１のメモリ領域から前記第２のメモリ領域に切り替える、又は、前記第２のメモリ領域内のデータを前記第１のメモリ領域に反映する
処理をコンピュータが実行する書き込み制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリに対するデータの書き込みを制御する技術に関する。
【背景技術】
【０００２】
ネットワークを介したデータ伝送が行われた場合等には、データを受信した装置においてＣＲＣ（Cyclic Redundancy Check）等による誤り検出が行われ、データに誤りが無いことが確認された場合にはデータがメモリに書き込まれる。
【０００３】
図１に、ＦＣ（Fibre Channel）におけるＣＲＣの一例を示す。ＦＣにおいては、受信側の装置は、受信した複数のフレーム（図１においては、フレーム１乃至３）におけるデータフィールドを合成することによってシーケンスを生成する。各フレームにはＣＲＣの領域が設けられており、シーケンスにもＣＲＣの領域が設けられている。
【０００４】
ＦＣにおいては、ＦＣカードが、フレーム毎にＣＲＣを実行することができる。これに対し、ＦＣカードは、フレームの合成によって生成されるシーケンスについてＣＲＣを実行できないことがある。その場合、シーケンスについてのＣＲＣは、ＣＰＵ（Central Processing Unit）（すなわちソフトウェア）によって実行される。
【０００５】
図１の例においては、本来フレーム１、フレーム２、フレーム３という順序でフレームを受信すべきなのに、例えばフレーム１、フレーム３、フレーム２という順序でフレームを受信してシーケンスを生成した場合には、誤りが検出されることになる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００４−１９９２７７号公報
【非特許文献】
【０００７】
【非特許文献１】American National Standards for Information Technology, "FIBRE CHANNEL SINGLE-BYTE COMMAND CODE SETS-2 MAPPING PROTOCOL (FC-SB-2)", 2001年
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ＣＰＵがＣＲＣを実行する場合には、ＣＲＣを実行して誤りが無いことを確認した後にデータをメモリに書き込むことになる。そのため、メモリへの書き込み開始が遅くなるため、書き込みの完了までの時間が長くなるという問題がある。
【０００９】
従って、本発明の目的は、１つの側面では、データに対する誤り検出を実行する場合において、データをメモリに書き込み終えるまでに要する時間を短縮するための技術を提供することである。
【課題を解決するための手段】
【００１０】
本発明の第１の態様に係る書き込み制御方法は、第１のメモリ領域内のデータの複製が格納される第２のメモリ領域に対して第１のメモリ領域内のデータの複製を書き込む処理を停止し、第１のメモリ領域に書き込まれる書き込みデータに対する誤り検出と、書き込みデータを第１のメモリ領域に書き込む処理とを並行して実行し、書き込みデータについて誤りが検出された場合に、第２のメモリ領域に格納されているデータを用いて、書き込みデータが格納される前の第１のメモリ領域に格納されていたデータを復旧する処理を含む。
【００１１】
本発明の第２の態様に係る書き込み制御方法は、第１のメモリ領域内のデータの複製が格納される第２のメモリ領域に対して第１のメモリ領域内のデータの複製を書き込む処理を停止し、第２のメモリ領域に書き込まれる書き込みデータに対する誤り検出と、書き込みデータを第２のメモリ領域に書き込む処理とを並行して実行し、書き込みデータについて誤りが検出されなかった場合に、主記憶として利用される領域を第１のメモリ領域から第２のメモリ領域に切り替える、又は、第２のメモリ領域内のデータを第１のメモリ領域に反映する処理を含む。
【発明の効果】
【００１２】
１つの側面では、データに対する誤り検出を実行する場合において、データをメモリに書き込み終えるまでに要する時間を短縮できるようになる。
【図面の簡単な説明】
【００１３】
【図１】図１は、ＦＣにおけるＣＲＣの一例を示す図である。
【図２】図２は、情報処理装置のハードウェア構成を示す図である。
【図３】図３は、情報処理装置の機能ブロック図である。
【図４】図４は、管理テーブル格納部に格納されるデータの一例を示す図である。
【図５】図５は、メモリの管理方法について説明するための図である。
【図６】図６は、リード命令の受信時に実行する処理の処理フローを示す図である。
【図７】図７は、メインの処理フローを示す図である。
【図８】図８は、書き込み処理の処理フローを示す図である。
【図９】図９は、ＣＲＣ実行部が実行する処理の処理フローを示す図である。
【図１０】図１０は、レプリカ管理部が実行する処理の処理フローを示す図である。
【図１１】図１１は、並行書き込み処理の処理フローを示す図である。
【図１２】図１２は、レプリカ管理部が実行する処理の処理フローを示す図である。
【図１３】図１３は、正常時における対応処理の処理フローを示す図である。
【図１４】図１４は、主記憶管理部が実行する処理の処理フローを示す図である。
【図１５】図１５は、主記憶領域及びレプリカ領域の管理について説明するための図である。
【図１６】図１６は、主記憶領域及びレプリカ領域の管理について説明するための図である。
【図１７】図１７は、異常時における対応処理の処理フローを示す図である。
【図１８】図１８は、主記憶領域及びレプリカ領域の管理について説明するための図である。
【図１９】図１９は、主記憶領域及びレプリカ領域の管理について説明するための図である。
【図２０】図２０は、主記憶領域及びレプリカ領域の管理について説明するための図である。
【図２１】図２１は、主記憶領域及びレプリカ領域の管理について説明するための図である。
【図２２】図２２は、主記憶管理部が実行する処理の処理フローを示す図である。
【図２３】図２３は、レプリカ管理部が実行する処理の処理フローを示す図である。
【図２４】図２４は、本実施の形態の処理の概要を表すシーケンス図である。
【図２５】図２５は、一般命令によって主記憶領域にデータが書き込まれた場合に実行する処理の処理フローを示す図である。
【図２６】図２６は、レプリカ管理部がレプリカ領域を更新する処理の処理フローを示す図である。
【図２７】図２７は、即時更新リストの一例を示す図である。
【図２８】図２８は、通常更新リストの一例を示す図である。
【図２９】図２９は、追加更新リストの一例を示す図である。
【図３０】図３０は、レプリカ管理部がレプリカ領域を更新する処理の処理フローを示す図である。
【図３１】図３１は、更新される順番を示す図である。
【発明を実施するための形態】
【００１４】
図２に、本実施の形態における情報処理装置１のハードウェア構成を示す。情報処理装置１は、データ転送ＣＰＵ１０１、ＣＲＣ実行ＣＰＵ１０２、レプリカ管理ＣＰＵ１０３及び主記憶管理ＣＰＵ１０４を含むＣＰＵ１００と、メモリブリッジ１１０と、メモリ１２０と、Ｉ／Ｏ（Input/Output）ブリッジ１３０と、ＦＣカード１４０及び１４１と、ハードディスク１５０とを有する。ＦＣカード１４０及び１４１は、外部の記憶装置（図示せず）に接続されており、外部の記憶装置との間でデータ伝送を行う。
【００１５】
ハードディスク１５０には、データ転送プログラム１５０２、ＣＲＣ実行プログラム１５０３、レプリカ管理プログラム１５０４及び主記憶管理プログラム１５０５を含むプログラム１５０１が格納される。
【００１６】
ハードディスク１５０に格納されているプログラム１５０１は、メモリ１２０にロードされる。メモリ１２０には、ハードディスク１５０からロードされたプログラムのための領域１２０１と、管理データのための領域１２０６と、主記憶領域１２０７と、レプリカ領域１２０８と、データ転送バッファ１２０９とが含まれる。プログラムには、データ転送プログラム１２０２と、ＣＲＣ実行プログラム１２０３と、レプリカ管理プログラム１２０４と、主記憶管理プログラム１２０５とが含まれる。
【００１７】
図３に、本実施の形態における情報処理装置１の機能ブロック図を示す。図３の例では、情報処理装置１は、データ転送部１００１と、ＣＲＣ実行部１００２と、レプリカ管理部１００３と、主記憶管理部１００４と、管理テーブル格納部１００５と、更新リスト格納部１００６とを含む。データ転送部１００１、ＣＲＣ実行部１００２、レプリカ管理部１００３及び主記憶管理部１００４は、データ転送ＣＰＵ１０１、ＣＲＣ実行ＣＰＵ１０２、レプリカ管理ＣＰＵ１０３及び主記憶管理ＣＰＵ１０４並びにメモリ１２０などのハードウエアと、データ転送プログラム１２０２、ＣＲＣ実行プログラム１２０３、レプリカ管理プログラム１２０４及び主記憶管理プログラム１２０５とが有機的に協働することにより実現される。管理テーブル格納部１００５及び更新リスト格納部１００６は、管理データのための領域１２０６によって実現される。
【００１８】
データ転送部１００１は、データ転送バッファ１２０９に格納されているデータを主記憶領域１２０７及びレプリカ領域１２０８に書き込む処理等を実行する。ＣＲＣ実行部１００２は、データ転送バッファ１２０９に格納されているデータに対してＣＲＣを実行し、結果をデータ転送部１００１に通知する。レプリカ管理部１００３は、更新リスト格納部１００６に格納されている即時更新リスト、通常更新リスト及び追加更新リストに基づき、データ転送部１００１によるデータの書き込みとは非同期に且つ自律的に、主記憶領域１２０７に格納されているデータをレプリカ領域１２０８にコピーする処理等を実行する。主記憶管理部１００４は、管理テーブル格納部１００５に格納されているデータを更新する処理等を実行する。
【００１９】
図４に、管理テーブル格納部１０５に格納されるデータの一例を示す。図４の例では、ページの識別情報と、主記憶領域１２０７のアドレスと、主記憶領域１２０７の世代を表す情報と、レプリカ１２０８領域のアドレスと、レプリカ領域１２０８の世代を表す情報と、データ転送回数と、即時更新フラグと、更新停止フラグとが格納される。
【００２０】
ＯＳ（Operating System）のリード（Read）命令によって主記憶領域１２０７が書き換えられた場合には、主記憶管理部１００４によって、主記憶領域１２０７の世代が１インクリメントされ、またデータ転送回数が１インクリメントされる。ＯＳの一般命令によって直接主記憶領域１２０７が書き換えられた場合には、主記憶管理部１００４によって主記憶領域１２０７の世代が１インクリメントされるが、データ転送回数はインクリメントされない。レプリカ管理部１００３によって主記憶領域１２０７内のデータがレプリカ領域１２０８にコピーされた場合には、主記憶管理部１００４によって、レプリカ領域１２０８の世代は主記憶領域１２０７の世代に合わせられる。即時更新フラグ及び更新停止フラグについては、後で詳細に説明する。なお、本実施の形態においては、ＯＳからのＩＯ命令に関連する処理のうち、リード命令に関連する処理について説明する。
【００２１】
図５を用いて、本実施の形態におけるメモリ１２０の管理方法について説明する。本実施の形態においては、メモリ１２０の一部が、所定のサイズを有するページという単位に分割されて管理される。各ページには、主記憶領域１２０７とレプリカ領域１２０８とが用意される。主記憶領域１２０７は、主記憶として利用されるメモリ領域である。レプリカ領域１２０８は、主記憶領域１２０７に格納されているデータの複製が格納されるメモリ領域である。主記憶領域１２０７とレプリカ領域１２０８とは、適宜切り替えられので、主記憶領域１２０７として利用されていた領域がレプリカ領域１２０８になり、レプリカ領域１２０８として利用されていた領域が主記憶領域１２０７になる。切り替えは、主記憶管理部１００４が管理テーブル格納部１００５において主記憶領域１２０７のアドレスとレプリカ領域１２０８のアドレスとを交換することによって行われる。
【００２２】
次に、図６乃至図３０を用いて、情報処理装置１の動作について説明する。
【００２３】
まず、図６を用いて、データ転送部１００１がＯＳからのリード命令を受信した場合に実行する処理について説明する。データ転送部１００１は、ＯＳからのリード命令を受信する（図６：ステップＳ１）。これに応じ、データ転送部１００１は、ＦＣカード（ここでは、ＦＣカード１４０とする）に、リード命令を送信する（ステップＳ３）。そして処理を終了する。
【００２４】
このような処理を実行すれば、ＯＳからのＩＯ命令のうちリード命令に対処できるようになる。
【００２５】
なお、リード命令を受信したＦＣカード１４０には、外部の記憶装置からのデータが到着する。ＦＣカード１４０は、受信したデータをＤＭＡ（Direct Memory Access）転送によってデータ転送バッファ１２０９に書き込む。ＤＭＡ転送はよく知られた技術であるので、ここでは説明を省略する。
【００２６】
そして、データ転送部１００１は、以下の処理を実行する。この処理については、図７乃至図２３を用いて説明する。
【００２７】
まず、ＦＣカード１４０は、外部の記憶装置からのデータが到達したことをデータ転送部１００１に通知する。データ転送部１００１は、データの到着を示すデータをＦＣカード１４０から受信する（図７：ステップＳ１１）。
【００２８】
そして、データ転送部１００１は、データ転送バッファ１２０９に格納されているデータについて書き込み処理を実行する（ステップＳ１３）。書き込み処理については、図８乃至図２３を用いて説明する。
【００２９】
まず、データ転送部１００１は、データ転送バッファ１２０９に格納されているデータについてＣＲＣを実行することをＣＲＣ実行部１００２に要求する（図８：ステップＳ２１）。
【００３０】
ここで、ＣＲＣ実行部１００２が実行する処理について図９を用いて説明する。ＣＲＣ実行部１００２は、データ転送部１００１からＣＲＣの実行を要求されると、ＣＲＣを実行する（図９：ステップＳ４１）。具体的には、データに含まれるＣＲＣ領域内の値と、データから算出された値とを比較する。
【００３１】
ＣＲＣ実行部１００２は、ステップＳ４１においてＣＲＣの結果（すなわち、誤りが検出されたか否か）をデータ転送部１００１に通知する（ステップＳ４３）。そして処理を終了する。
【００３２】
このような処理を実行すれば、誤りの有無をチェックできるようになる。
【００３３】
図８の説明に戻り、データ転送部１００１は、データが書き込まれるページのレプリカ領域１２０８の更新を停止することをレプリカ管理部１００３に要求する（ステップＳ２３）。なお、データが書き込まれるページの数は複数である場合もある。
【００３４】
ここで、レプリカ管理部１００３が実行する処理について図１０を用いて説明する。レプリカ管理部１００３は、データが書き込まれるページに対応する更新停止フラグを、管理テーブル格納部１００５において特定する（図１０：ステップＳ５１）。更新停止フラグが「ＯＮ」である場合、レプリカ管理部１００３によるレプリカ領域１２０８の更新は行われない。更新停止フラグが「ＯＦＦ」である場合、レプリカ管理部１００３によるレプリカ領域１２０８の更新は行われる。
【００３５】
レプリカ管理部１００３は、特定された更新停止フラグを「ＯＮ」に設定する（ステップＳ５３）。そして処理を終了する。
【００３６】
以上のような処理を実行すれば、データを主記憶領域１２０７に書き込んでいる間にレプリカ領域１２０８が更新されてしまうことを防止できるようになる。
【００３７】
図８の説明に戻り、データ転送部１００１は、並行書き込み処理を実行する（ステップＳ２５）。並行書き込み処理については、図１１乃至図１２を用いて説明する。
【００３８】
まず、データ転送部１００１は、データが書き込まれるページのうち未処理のページを１つ特定する（図１１：ステップＳ６１）。
【００３９】
データ転送部１００１は、ステップＳ６１において特定されたページの主記憶領域１２０７及びレプリカ領域１２０８の世代を管理テーブル格納部１００５において特定する（ステップＳ６３）。
【００４０】
データ転送部１００１は、ステップＳ６３において特定された世代が一致するか判断する（ステップＳ６５）。世代が一致する場合（ステップＳ６５：Ｙｅｓルート）、データ転送部１００１は、ステップＳ６１において特定されたページについてのデータを主記憶領域１２０７に書き込む（ステップＳ６７）。
【００４１】
一方、世代が一致しない場合（ステップＳ６５：Ｎｏルート）、データ転送部１００１は、書き込みの量が１ページの容量の半分以上であるか判断する（ステップＳ６９）。書き込みの量が１ページの容量の半分以上である場合（ステップＳ６９：Ｙｅｓルート）、データ転送部１００１は、ステップＳ６１において特定されたページについてのデータをレプリカ領域１２０８に書き込む（ステップＳ７１）。書き込みの量が１ページの容量の半分未満である場合（ステップＳ６９：Ｎｏルート）、データ転送部１００１は、ＣＲＣの実行と並行した書き込みを行わない。よって、ステップＳ７３の処理に移行する。
【００４２】
データ転送部１００１は、管理テーブル格納部１００５におけるデータ転送回数の更新を、レプリカ管理部１００３に要求する（ステップＳ７３）。
【００４３】
ここで、レプリカ管理部１００３が実行する処理について図１２を用いて説明する。レプリカ管理部１００３は、ステップＳ６１において特定されたページに対応する即時更新フラグを管理テーブル格納部１００５から特定し、特定された即時更新フラグを「ＯＮ」に設定する（図１２：ステップＳ８１）。即時更新フラグが「ＯＮ」である場合、レプリカ管理部１００３によってレプリカ領域１２０８の更新が優先的に行われるようになる。但し、即時更新フラグが「ＯＮ」であっても更新停止フラグが「ＯＮ」である場合には、レプリカ領域１２０８の更新は行われない。即時更新フラグが「ＯＦＦ」である場合、レプリカ管理部１００３によるレプリカ領域１２０８の更新は優先的には行われない。
【００４４】
レプリカ管理部１００３は、ステップＳ６１において特定されたページに対応するデータ転送回数を管理テーブル格納部１００５から特定し、特定されたデータ転送回数を１インクリメントする（ステップＳ８３）。データ転送回数を管理する理由は、データ転送される頻度が高い主記憶領域１２０７についてはレプリカ領域１２０８の更新頻度を高くするためである。そして処理を終了する。
【００４５】
このような処理を実行すれば、データの書き込みが問題なく完了した後にはレプリカ領域１２０８の更新を行えるようになる。
【００４６】
図１１の説明に戻り、データ転送部１００１は、未処理のページが有るか判断する（ステップＳ７５）。未処理のページが有る場合（ステップＳ７５：Ｙｅｓルート）、次のページについて処理するため、ステップＳ６１の処理に戻る。一方、未処理のページが無い場合（ステップＳ７５：Ｎｏルート）、元の処理に戻る。
【００４７】
以上のような処理を実行すれば、ＣＲＣ実行部１００２がＣＲＣを実行中にデータ転送部１００１がデータの書き込みを行えるようになる。但し、例えばＣＲＣによって誤りが検出されたデータをメモリに書き込むような事態が生じ得るため、以下の処理を実行することによってそのような事態を回避する。
【００４８】
図８の説明に戻り、データ転送部１００１は、ＣＲＣ実行部１００２からＣＲＣの結果を受け取るまで待機する（ステップＳ２７）。既にＣＲＣの結果を受け取った場合には、本ステップは省略される。
【００４９】
そして、データ転送部１００１は、ＣＲＣ実行部１００２から受け取ったＣＲＣの結果が「誤り有り」を示しているか判断する（ステップＳ２９）。ＣＲＣの結果が「誤り有り」を示していない（すなわち、「誤り無し」を示している）場合（ステップＳ２９：Ｎｏルート）、データ転送部１００１は、正常時における対応処理を実行する（ステップＳ３１）。一方、ＣＲＣの結果が「誤り有り」を示している場合（ステップＳ２９：Ｙｅｓルート）、データ転送部１００１は、異常時における対応処理を実行する（ステップＳ３３）。
【００５０】
まず、正常時における対応処理について、図１３乃至図１６を用いて説明する。データ転送部１００１は、データが書き込まれるページのうち未処理のページを１つ特定する（図１３：ステップＳ９１）。
【００５１】
データ転送部１００１は、ステップＳ９１において特定されたページの主記憶領域１２０７及びレプリカ領域１２０８の世代を管理テーブル格納部１００５において特定する（ステップＳ９３）。
【００５２】
データ転送部１００１は、ステップＳ９３において特定された世代が一致するか判断する（ステップＳ９５）。世代が一致する場合（ステップＳ９５：Ｙｅｓルート）、データは主記憶領域１２０７に書き込まれており且つデータに誤りが無いので、ステップＳ１０７の処理に移行する。一方、世代が一致しない場合（ステップＳ９５：Ｎｏルート）、データ転送部１００１は、書き込みの量が１ページの容量の半分以上であるか判断する（ステップＳ９７）。
【００５３】
書き込みの量が１ページの容量の半分以上である場合（ステップＳ９７：Ｙｅｓルート）、データ転送部１００１は、切替処理を主記憶管理部１００４に要求する（ステップＳ１０１）。
【００５４】
ここで、主記憶管理部１００４が実行する切替処理について図１４を用いて説明する。まず、主記憶管理部１００４は、ステップＳ９１において特定されたページに対応するレプリカ領域１２０８のアドレス及び主記憶領域１２０７のアドレスを管理テーブル格納部１００５から特定する（図１４：ステップＳ１１１）。
【００５５】
主記憶管理部１００４は、レプリカ領域１２０８のアドレスと主記憶領域１２０７のアドレスとを管理テーブル格納部１００５において交換する（ステップＳ１１３）。そして処理を終了する。
【００５６】
ステップＳ１１３の処理によって、図１５に示すように、レプリカ領域１２０８であったメモリ領域が主記憶領域１２０７として利用されるように切り替えが行われる。図１５においては、斜線部分はデータが書き込まれた領域を表しており、レプリカ領域１２０８にデータが書き込まれている。これは、世代が一致しない場合であって且つ書き込みの量が１ページの容量の半分以上である場合には、ステップＳ７１においてレプリカ領域１２０８にデータが書き込まれるからである。なお、レプリカ領域１２０８に書き込まれたデータに誤りが無いことはステップＳ２９において確認されている。
【００５７】
図１３の説明に戻り、データ転送部１００１は、書き込みの量が１ページの容量未満であるか判断する（ステップＳ１０３）。すなわち、書き込みの量が１ページの容量の半分以上であり且つ１ページの容量未満であるか判断する。
【００５８】
書き込みの量が１ページの容量未満でない場合（ステップＳ１０３：Ｎｏルート）、書き込みの量は１ページの容量と同じである。その場合には、ステップＳ１０７の処理に移行する。一方、書き込みの量が１ページの容量未満である場合（ステップＳ１０３：Ｙｅｓルート）、データ転送部１００１は、データが書き込まれた領域以外の領域に格納されているデータをレプリカ領域１２０８から主記憶領域１２０７にコピーする（ステップＳ１０５）。
【００５９】
ステップＳ１０５の処理について、図１６を用いて説明する。ステップＳ１０５の処理を実行する場合には、既にステップＳ１０１の処理を実行済みである。従って、ステップＳ１０１の処理によって、元々レプリカ領域１２０８であったメモリ領域が主記憶領域１２０７に切り替えられている。但し、元々主記憶領域１２０７であったメモリ領域のうちデータの書き込み範囲以外の範囲（図１６における斜線部分以外の部分）は、主記憶領域１２０７として利用されていた間に別の処理によって更新された可能性がある。そこで、切り替えが行われた後、当該範囲に格納されているデータについては、主記憶領域１２０７に書き戻す処理を実行する。
【００６０】
図１３の説明に戻り、ステップＳ９７において書き込みの量が１ページの容量の半分以上ではない（すなわち、半分未満である）と判断された場合（ステップＳ９７：Ｎｏルート）、データ転送部１００１は、データを主記憶領域１２０７に書き込む（ステップＳ９９）。書き込みの量が１ページの容量の半分未満である場合には、並行書き込み処理は実行されないので、ステップＳ９９の段階で書き込みが行われる。書き込みが行われるのは、ＣＲＣの実行後であるから、従来の技術と同じタイミングである。また、データに誤りが無い場合に主記憶領域１２０７に書き込むという処理は、従来技術と同じである。このようにしたのは、書き込み量が１ページの容量の半分未満であるため、書き込み範囲以外について書き込みを行うよりも書き込み量が少ないからである。
【００６１】
そして、データ転送部１００１は、未処理のページが有るか判断する（ステップＳ１０７）。未処理のページが有る場合（ステップＳ１０７：Ｙｅｓルート）、次のページについて処理するため、ステップＳ９１の処理に戻る。一方、未処理のページが無い場合（ステップＳ１０７：Ｎｏルート）、元の処理に戻る。
【００６２】
以上のような処理を実行すれば、データに誤りが無いことが確認された場合には、そのデータを主記憶領域１２０７に適切に反映することができるようになる。
【００６３】
次に、異常時における対応処理について、図１７乃至図２１を用いて説明する。
【００６４】
まず、データ転送部１００１は、データが書き込まれるページのうち未処理のページを１つ特定する（図１７：ステップＳ１２１）。
【００６５】
データ転送部１００１は、ステップＳ１２１において特定されたページの主記憶領域１２０７及びレプリカ領域１２０８の世代を管理テーブル格納部１００５において特定する（ステップＳ１２３）。
【００６６】
データ転送部１００１は、ステップＳ１２３において特定された世代が一致するか判断する（ステップＳ１２５）。世代が一致しない場合（ステップＳ１２５：Ｎｏルート）、ステップＳ２５の処理により、データが書き込まれている場合にはレプリカ領域１２０８に書き込まれている。よって、レプリカ領域１２０８のデータを破棄すればよく、主記憶領域１２０７に対しては処理を行わなくてもよいので、ステップＳ１３３の処理に移行する。
【００６７】
ステップＳ１２５のＮｏルートに該当するケースは、例えば図１８に示すように、レプリカ領域１２０８に書き込まれたデータの量が１ページの容量と等しいケースがある。図１８においては、バツ印の部分が、書き込まれたデータの範囲を表す。また、図１９に示すように、書き込まれたデータの量が１ページの容量の半分以上且つ１ページの容量未満であるケースも該当する。図１９においても、バツ印の部分が、書き込まれたデータの範囲を表す。書き込まれたデータには誤りが有るため、レプリカ領域１２０８内のデータは破棄される。
【００６８】
一方、世代が一致する場合（ステップＳ１２５：Ｙｅｓルート）、データ転送部１００１は、書き込み量が１ページの容量と同じであるか判断する（ステップＳ１２７）。書き込み量が１ページの容量と同じである場合（ステップＳ１２７：Ｙｅｓルート）、データ転送部１００１は、切替処理の実行を主記憶管理部１００４に要求する（ステップＳ１３１）。主記憶管理部１００４が実行する切替処理については、図１４を用いて説明したとおりである。
【００６９】
世代が一致する場合には、図２０に示すように、データは主記憶領域１２０７に書き込まれている。図２０においては、バツ印の部分が、書き込まれたデータの範囲を表す。このような場合には、管理テーブル格納部１００５においてアドレスを交換することによって、主記憶領域１２０７とレプリカ領域１２０８とを迅速に切り替えることができるようになる。
【００７０】
一方、書き込み量が１ページの容量と同じではない場合（ステップＳ１２７：Ｎｏルート）、データ転送部１００１は、書き込み範囲に格納されているデータをレプリカ領域１２０８から主記憶領域１２０７にコピーする（ステップＳ１２９）。
【００７１】
例えば書き込み量が１ページの容量の半分以上且つ１ページの容量未満である場合には、主記憶領域１２０７における書き込み範囲以外の範囲におけるデータが、別の処理によって更新されている可能性がある。そこで、図２１に示すように、１ページ全体を入れ替えるのではなく、書き込み範囲についてはレプリカ領域１２０８のデータを用いて復旧し、書き込み範囲以外の範囲についてはそのままの状態にする。
【００７２】
データ転送部１００１は、未処理のページが有るか判断する（ステップＳ１３３）。未処理のページが有る場合（ステップＳ１３３：Ｙｅｓルート）、次のページについて処理するため、ステップＳ１２１の処理に戻る。一方、未処理のページが無い場合（ステップＳ１２１：Ｎｏルート）、元の処理に戻る。
【００７３】
以上のような処理を実行すれば、データにおける誤りが検出された場合においても、誤りが無いデータを復旧することができるようになる。
【００７４】
図８の説明に戻り、データ転送部１００１は、主記憶領域１２０７の世代の更新を主記憶管理部１００４に要求する（ステップＳ３５）。
【００７５】
ここで、主記憶管理部１００４が実行する処理について図２２を用いて説明する。主記憶管理部１００４は、データが書き込まれたページに対応する世代を、管理テーブル格納部１００５において特定する（図２２：ステップＳ１４１）。
【００７６】
主記憶管理部１００４は、特定された世代を１インクリメントする（ステップＳ１４３）。そして処理を終了する。
【００７７】
このような処理を実行すれば、主記憶領域１２０７の世代管理を適切に行えるようになる。
【００７８】
図８の説明に戻り、データ転送部１００１は、レプリカ領域１２０８の更新の再開をレプリカ管理部１００３に要求する（ステップＳ３７）。そして元の処理に戻る。
【００７９】
ここで、レプリカ管理部１００３が実行する処理について図２３を用いて説明する。レプリカ管理部１００３は、データが書き込まれたページに対応する更新停止フラグを、管理テーブル格納部１００５において特定する（図２３：ステップＳ１５１）。レプリカ管理部１００３は、特定された更新停止フラグを「ＯＦＦ」に設定する（ステップＳ１５３）。そして処理を終了する。
【００８０】
このような処理を実行すれば、レプリカ領域１２０８の更新が停止したままになってしまう事態を回避できるようになる。
【００８１】
また、上で説明したように書き込み処理を実行すれば、メモリへのデータの書き込みとＣＲＣとが並行して行われるので、ＣＲＣの実行後にメモリへのデータの書き込みを実行する場合と比較して、書き込みの完了までに要する時間が短くなる。
【００８２】
図７の説明に戻り、データ転送部１００１は、リード命令において指定された処理が完了したことをＯＳに通知する（ステップＳ１５）。そして処理を終了する。
【００８３】
以上のような処理を実行すれば、ＣＲＣを実行中においても書き込みを行えるので、メモリ領域に書き込まれるデータに誤りが無いことを保証しつつ、書き込み性能を向上させることができるようになる。
【００８４】
図２４に、本実施の形態における処理の概要を表すシーケンス図を示す。本シーケンス図は、主記憶領域１２０７及びレプリカ領域１２０８の世代が一致するためデータを主記憶領域１２０７に書き込む場合の処理のシーケンス図である。
【００８５】
まず、データ転送部１００１は、ＯＳからリード命令を受信する（ステップＳ１００１）。データ転送部１００１は、ＦＣカードにリード命令を送信する（ステップＳ１００２）。データ転送部１００１は、データがデータ転送バッファ１２０９に到着したことを示すデータをＦＣカードからを受信する（ステップＳ１００３）。
【００８６】
ステップＳ１００１乃至ステップＳ１００３が実行されている間、レプリカ管理部１００３は、自律的にレプリカ領域１２０８を更新する（ステップＳ３００１）。但し、上で述べたように、レプリカ領域１２０８の更新はデータの転送と非同期で行われているのであり、データの転送があった場合に更新が行われるわけではない。
【００８７】
データ転送部１００１は、データを主記憶領域１２０７に書き込む（ステップＳ１００４）。ステップＳ１００４の処理と並行して、ＣＲＣ実行部１００２は、ＣＲＣを実行する（ステップＳ２００１）。また、レプリカ管理部１００３は、更新停止フラグを「ＯＮ」に設定することによって、レプリカ領域１２０８の更新を停止する（ステップＳ３００２）。
【００８８】
データ転送部１００１は、ＣＲＣ実行部１００２からＣＲＣの結果を受け取る。そして、データ転送部１００１は、データに誤りが有る場合には主記憶領域１２０７とレプリカ領域１２０８とを切り替える（ステップＳ１００５）。
【００８９】
データ転送部１００１は、リード命令において指定された処理が完了した旨をＯＳに通知する（ステップＳ１００６）。一方、レプリカ管理部１００３は、更新停止フラグを「ＯＦＦ」に設定することによって、レプリカ領域１２０８の更新を再開する（ステップＳ３００３）。
【００９０】
このように、データの書き込みと誤り検出とを並行して行うことによって、早期にデータの書き込みを開始できるので、データの書き込みが完了するまでの時間を短縮することができるようになる。
【００９１】
また、主記憶領域１２０７に書き込まれたデータに誤りが検出された場合には、レプリカ領域１２０８内のデータによってデータを復旧でき、主記憶領域１２０７に書き込まれたデータに誤りが無い場合には、特に何も対処を行わなくても問題は無い。よって、メモリに書き込まれるデータに誤りが無いことを保証できるようになる。
【００９２】
なお、上では、ＯＳからのリード命令に関連する処理を説明したが、ＯＳからの一般命令に関連する処理についても一応説明する。ここでは、図２５を用いて、一般命令の受信時に主記憶管理部１００４が世代の更新を行う処理について説明する。
【００９３】
まず、主記憶管理部１００４は、データが書き込まれたページに対応する主記憶領域１２０７の世代を、管理テーブル格納部１００５において特定する（図２５：ステップＳ１６１）。
【００９４】
主記憶管理部１００４は、特定された世代を１インクリメントする（ステップＳ１４３）。そして処理を終了する。
【００９５】
このような処理を実行すれば、一般命令によって主記憶領域１２０７への書き込みが行われた場合においても、適切に対処できるようになる。
【００９６】
次に、図２５乃至図３１を用いて、レプリカ管理部１００３がレプリカ領域１２０８を更新する処理について説明する。
【００９７】
まず、レプリカ管理部１００３は管理データ格納部１００５において管理されているページのうち未処理のページを１つ特定する（図２５：ステップＳ１７１）。以下では、ステップＳ１７１において特定されたページを「処理対象のページ」と呼ぶ。
【００９８】
レプリカ管理部１００３は、処理対象のページに対応する即時更新フラグを、管理テーブル格納部１００５から特定する（ステップＳ１７３）。
【００９９】
レプリカ管理部１００３は、ステップＳ１７３において特定された即時更新フラグが「ＯＮ」であるか判断する（ステップＳ１７５）。即時更新フラグが「ＯＮ」である場合（ステップＳ１７５：Ｙｅｓルート）、ステップＳ１７１において特定されたページの識別情報を即時更新リストに追加する（ステップＳ１７７）。
【０１００】
図２７に、更新リスト格納部１００６に格納される即時更新リストの一例を示す。図２７の例では、更新される順番を示す情報と、ページの識別情報とが格納される。即時更新リストに識別情報が格納されているページは、即時更新リストに識別情報が格納されていないページよりも優先して更新される。
【０１０１】
一方、即時更新フラグが「ＯＮ」ではない場合（ステップＳ１７５：Ｎｏルート）、レプリカ管理部１００３は、処理対象のページの識別情報を通常更新リストに追加する（ステップＳ１７９）。
【０１０２】
図２８に、更新リスト格納部１００６に格納される通常更新リストの一例を示す。図２８の例では、更新される順番を示す情報と、ページの識別情報とが格納される。
【０１０３】
レプリカ管理部１００３は、処理対象のページに対応するデータ転送回数を、管理テーブル格納部１００５から特定する（ステップＳ１８１）。そして、レプリカ管理部１００３は、特定されたデータ転送回数を所定の値（例えば１００）で割る（ステップＳ１８３）。
【０１０４】
レプリカ管理部１００３は、ステップＳ１８３の処理によって得られた商が０であるか判断する（ステップＳ１８５）。商が０ではない場合（ステップＳ１８７：Ｎｏルート）、レプリカ管理部１００３は、処理対象のページの識別情報を追加更新リストに追加する（ステップＳ１８７）。そしてステップＳ１８９の処理に移行する。なお、ステップＳ１８７においては、商の値と同じ数のエントリを追加更新リストに追加する。例えば、処理対象のページがページ１であり、商の値が３である場合には、ページ１について３つのエントリを追加更新リストに追加する。これにより、データ転送が頻繁に行われるページほど頻繁に更新が行われるようになる。
【０１０５】
図２９に、更新リスト格納部１００６に格納される追加更新リストの一例を示す。図２９の例では、更新される順番を示す情報と、ページの識別情報とが格納される。追加更新リストに識別情報が登録されているページは、通常の更新だけでなく追加的な更新も行われる。
【０１０６】
一方、商が０である場合（ステップＳ１８５：Ｙｅｓルート）、レプリカ管理部１００３は、未処理のページが有るか判断する（ステップＳ１８９）。未処理のページが有る場合（ステップＳ１８９：Ｙｅｓルート）、ステップＳ１７１の処理に戻る。未処理のページが無い場合（ステップＳ１８９：Ｎｏルート）、処理は端子Ａを介して図３０のステップＳ１９１に移行する。
【０１０７】
図３０の説明に移行し、レプリカ管理部１００３は、即時更新リストから未処理のページのうち先頭のページを１つ特定する（ステップＳ１９１）。そして、レプリカ管理部１００３は、特定されたページのレプリカ領域１２０８を、主記憶領域１２０７に格納されているデータによって更新する（ステップＳ１９３）。
【０１０８】
レプリカ管理部１００３は、即時更新リストに未処理のページが有るか判断する（ステップＳ１９５）。未処理のページが有る場合（ステップＳ１９５：Ｙｅｓルート）、ステップＳ１９１の処理に戻る。
【０１０９】
一方、未処理のページが無い場合（ステップＳ１９５：Ｎｏルート）、レプリカ管理部１００３は、通常更新リストに含まれるページの数と追加更新リストに含まれるページの数との合計Ｐを算出する（ステップＳ１９７）。
【０１１０】
レプリカ管理部１００３は、追加更新リストに含まれるページの数でＰを割ることによって得られた商によって、ループ回数を割る（ステップＳ１９９）。ループ回数とは、ステップＳ１９９の処理を既に実行した回数に１を加えた数と同義である。例えばステップＳ１９９の処理を初めて実行する場合には、ループ回数は１である。
【０１１１】
レプリカ管理部１００３は、ステップＳ１９９の計算によって得られた余りが０であるか判断する（ステップＳ２０１）。余りが０である場合（ステップＳ２０１：Ｙｅｓルート）、レプリカ管理部１００３は、追加更新リストから先頭のページを特定し、特定されたページのレプリカ領域１２０８を、主記憶領域１２０７に格納されているデータによって更新する（ステップＳ２０３）。一方、余りが０ではない場合（ステップＳ２０１：Ｎｏルート）、レプリカ管理部１００３は、通常更新リストから先頭のページを特定し、特定されたページのレプリカ領域１２０８を、主記憶領域１２０７に格納されているデータによって更新する（ステップＳ２０５）。
【０１１２】
レプリカ管理領域１２０３は、更新回数がＰ回に達したか判断する（ステップＳ２０７）。更新回数がＰ回に達していない場合（ステップＳ２０７：Ｎｏルート）、次の更新を行うため、ステップＳ１９９の処理に戻る。
【０１１３】
一方、更新回数がＰ回に達した場合（ステップＳ２０７：Ｙｅｓルート）、レプリカ管理部１００３は、処理を終了するか判断する（ステップＳ２０９）。処理を終了する場合とは、例えば、情報処理装置１の管理者から処理の終了を指示された場合である。処理を終了しない場合（ステップＳ２０９：Ｎｏルート）、処理は端子Ｂを介して図２６のステップＳ１７１に戻る。一方、処理を終了する場合（ステップＳ２０９：Ｙｅｓルート）、処理を終了する。
【０１１４】
なお、図２７乃至図２９に示したデータが即時更新リスト、通常更新リスト及び追加更新リストに格納されている場合、実際にページが更新される順番は、図３１に示すようになる。図３１に示すように、即時更新リストに登録されているページ（ここでは、ページ１及びページ４）は優先的に更新され、その後に通常更新リスト及び追加更新リストに登録されているページ（ここでは、ページ２、ページ３、ページ５及びページ６）が更新される。
【０１１５】
以上のような処理を実行すれば、データの転送とは非同期にレプリカ領域１２０８を更新できるようになる。
【０１１６】
以上本発明の一実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上で説明した情報処理装置１の機能ブロック構成は実際のプログラムモジュール構成に一致しない場合もある。
【０１１７】
また、上で説明した各テーブルの構成は一例であって、上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
【０１１８】
なお、レプリカ管理部１００３によるレプリカ領域１２０８の更新は、データ転送とは非同期且つ自律的に行われるのであれば、上で述べたような方法以外の方法で更新してもよい。
【０１１９】
以上述べた本発明の実施の形態をまとめると、以下のようになる。
【０１２０】
本実施の形態の第１の態様に係る書き込み制御方法は、（Ａ）第１のメモリ領域内のデータの複製が格納される第２のメモリ領域に対して第１のメモリ領域内のデータの複製を書き込む処理を停止し、（Ｂ）第１のメモリ領域に書き込まれる書き込みデータに対する誤り検出と、書き込みデータを第１のメモリ領域に書き込む処理とを並行して実行し、（Ｃ）書き込みデータについて誤りが検出された場合に、第２のメモリ領域に格納されているデータを用いて、書き込みデータが格納される前の第１のメモリ領域に格納されていたデータを復旧する処理を含む。
【０１２１】
このようにすれば、誤り検出を実行中においても書き込みを行えるので、メモリ領域に書き込まれるデータに誤りが無いことを保証しつつ、書き込み性能を向上させることができるようになる。なお、単に処理を並列化しただけだと、第１のメモリ領域内のデータを復旧できなくなる場合がある。しかし、上で述べたように第２のメモリ領域へのデータの書き込みを停止しておけば、書き込み前の第１のメモリ領域内のデータを保存できるので、復旧を問題なく行える。
【０１２２】
また、本書き込み制御方法が、（Ｄ）書き込みデータの量が、第１のメモリ領域の容量と同じであるか判断する処理をさらに含むようにしてもよい。そして、第１のメモリ領域に格納されていたデータを復旧する処理において、（ｃ１）書き込みデータの量が第１のメモリ領域の容量と同じである場合に、第１のメモリ領域と第２のメモリ領域とを切り替えてもよい。このようにすれば、メモリ領域全体を簡便にデータを復旧できるようになる。
【０１２３】
また、第１のメモリ領域に格納されていたデータを復旧する処理において、（ｃ２）書き込みデータの量が第１のメモリ領域の容量と同じではない場合に、第１のメモリ領域において書き込みデータが書き込まれた範囲と同じ範囲のデータを第２のメモリ領域から読み出し、第１のメモリ領域において書き込みデータが書き込まれた範囲に書き込んでもよい。書き込みデータの量が第１のメモリ領域の容量と同じではない場合には、全体を切り替えると、書き込みデータが書き込まれた範囲以外の範囲において更新されたデータが消えてしまうことがある。そこで、上で述べたような処理を実行すれば、書き込みデータが書き込まれた範囲以外については更新後のデータを残すことができるようになる。
【０１２４】
また、複製を書き込む処理を停止する処理は、（ａ１）第１のメモリ領域の世代と第２のメモリ領域の世代とが同じである場合に実行されてもよい。世代が同じである場合には、通常どおり第１のメモリ領域に書き込めば、誤りが検出されたとしても適切にデータを復旧できるようになる。
【０１２５】
また、第１のメモリ領域内のデータの複製を第２のメモリ領域に格納する処理は、書き込みデータを第１のメモリ領域に書き込む処理とは非同期で行われてもよい。書き込みデータを第２のメモリ領域に書き込む処理と同じタイミングで行われる場合には、書き込み前のデータを保存しておくことができなくなる。そこで、上で述べたようにすれば、書き込み前のデータを保存しておくことができるようになる。
【０１２６】
本実施の形態の第２の態様にかかる書き込み制御方法は、（Ｅ）第１のメモリ領域内のデータの複製が格納される第２のメモリ領域に対して第１のメモリ領域内のデータの複製を書き込む処理を停止し、（Ｆ）第２のメモリ領域に書き込まれる書き込みデータに対する誤り検出と、書き込みデータを第２のメモリ領域に書き込む処理とを並行して実行し、（Ｇ）書き込みデータについて誤りが検出されなかった場合に、主記憶として利用される領域を第１のメモリ領域から第２のメモリ領域に切り替える、又は、第２のメモリ領域内のデータを第１のメモリ領域に反映する処理を含む。
【０１２７】
また、本書き込み制御方法が、（Ｈ）書き込みデータの量が、第１のメモリ領域の容量の半分以上であるか判断する処理をさらに含むようにしてもよい。そして、第１のメモリ領域から第２のメモリ領域に切り替える処理において、（ｇ１）書き込みデータの量が第１のメモリ領域の容量の半分以上である場合に、第１のメモリ領域と第２のメモリ領域とを切り替えてもよい。このようにすれば、メモリ領域全体を簡便に切り替えることができるようになる。
【０１２８】
また、（Ｉ）書き込みデータの量が第１のメモリ領域の容量の半分以上である場合に、書き込みデータの量が第１のメモリ領域の容量未満であるか判断する処理をさらに含むようにしてもよい。そして、第１のメモリ領域に反映する処理において、（ｇ２）書き込みデータの量が第１のメモリ領域の容量未満且つ半分以上である場合に、第１のメモリ領域において書き込みデータが書き込まれた範囲以外の範囲と同じ範囲のデータを第２のメモリ領域から読み出し、第１のメモリ領域において書き込みデータが書き込まれた範囲以外の範囲に書き込んでもよい。第２のメモリ領域においては、書き込みデータが書き込まれた範囲以外の範囲においてもデータが更新されている場合があるので、領域全体を切り替えると、更新後のデータが消えることになる。そこで、上で述べたようにすれば、このような事態を回避できるようになる。
【０１２９】
また、第１のメモリ領域内のデータの複製を書き込む処理を停止する処理は、（ｅ１）第１のメモリ領域の世代と第２のメモリ領域の世代とが同じではない場合に実行されてもよい。世代が同じではない場合、複製が格納される第２のメモリ領域内のデータは主記憶として利用される第１のメモリ領域内のデータよりも古いことになる。よって、第１のメモリ領域に書き込みデータを書き込むと、現時点における第１の領域内のデータよりも古いデータでしか復旧を行えなくなる。そこで、上で述べたようにすることで、このような事態を回避できるようになる。
【０１３０】
また、第１のメモリ領域内のデータの複製を第２のメモリ領域に格納する処理は、書き込みデータを第１のメモリ領域に書き込む処理とは非同期で行われてもよい。書き込みデータを第１のメモリ領域に書き込む処理と同じタイミングで行われる場合には、書き込み前のデータを保存しておくことができなくなる。そこで、上で述べたようにすれば、書き込み前のデータを保存しておくことができるようになる。
【０１３１】
また、第１のメモリ領域のアドレスと第２のメモリ領域とのアドレスとを交換することにより、第１のメモリ領域と第２のメモリ領域とを切り替えてもよい。このようにすれば、切り替えを迅速に行えるようになる。
【０１３２】
なお、上記方法による処理をコンピュータに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【０１３３】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１３４】
（付記１）
第１のメモリ領域内のデータの複製が格納される第２のメモリ領域に対して前記第１のメモリ領域内のデータの複製を書き込む処理を停止し、
前記第１のメモリ領域に書き込まれる書き込みデータに対する誤り検出と、前記書き込みデータを前記第１のメモリ領域に書き込む処理とを並行して実行し、
前記書き込みデータについて誤りが検出された場合に、前記第２のメモリ領域に格納されているデータを用いて、前記書き込みデータが格納される前の前記第１のメモリ領域に格納されていたデータを復旧する
処理をコンピュータに実行させるための書き込み制御プログラム。
【０１３５】
（付記２）
前記書き込みデータの量が、前記第１のメモリ領域の容量と同じであるか判断する
処理をさらに実行させ、
前記第１のメモリ領域に格納されていたデータを復旧する処理において、
前記書き込みデータの量が前記第１のメモリ領域の容量と同じである場合に、前記第１のメモリ領域と前記第２のメモリ領域とを切り替える
処理を実行する付記１記載の書き込み制御プログラム。
【０１３６】
（付記３）
前記第１のメモリ領域に格納されていたデータを復旧する処理において、
前記書き込みデータの量が前記第１のメモリ領域の容量と同じではない場合に、前記第１のメモリ領域において前記書き込みデータが書き込まれた範囲と同じ範囲のデータを前記第２のメモリ領域から読み出し、前記第１のメモリ領域において前記書き込みデータが書き込まれた範囲に書き込む
処理を実行する付記２記載の書き込み制御プログラム。
【０１３７】
（付記４）
前記複製を書き込む処理を停止する処理は、前記第１のメモリ領域の世代と前記第２のメモリ領域の世代とが同じである場合に実行される
ことを特徴とする付記１記載の書き込み制御プログラム。
【０１３８】
（付記５）
前記１のメモリ領域内のデータの複製を前記第２のメモリ領域に格納する処理は、前記書き込みデータを前記第１のメモリ領域に書き込む処理とは非同期で行われる
ことを特徴とする付記５記載の書き込み制御プログラム。
【０１３９】
（付記６）
第１のメモリ領域内のデータの複製が格納される第２のメモリ領域に対して前記第１のメモリ領域内のデータの複製を書き込む処理を停止し、
前記第２のメモリ領域に書き込まれる書き込みデータに対する誤り検出と、前記書き込みデータを前記第２のメモリ領域に書き込む処理とを並行して実行し、
前記書き込みデータについて誤りが検出されなかった場合に、主記憶として利用される領域を前記第１のメモリ領域から前記第２のメモリ領域に切り替える、又は、前記第２のメモリ領域内のデータを前記第１のメモリ領域に反映する
処理をコンピュータに実行させるための書き込み制御プログラム。
【０１４０】
（付記７）
前記書き込みデータの量が、前記第１のメモリ領域の容量の半分以上であるか判断する処理
をさらに実行させ、
前記第１のメモリ領域から前記第２のメモリ領域に切り替える処理において、
前記書き込みデータの量が前記第１のメモリ領域の容量の半分以上である場合に、前記第１のメモリ領域と前記第２のメモリ領域とを切り替える
処理を実行する付記６記載の書き込み制御プログラム。
【０１４１】
（付記８）
前記書き込みデータの量が前記第１のメモリ領域の容量の半分以上である場合に、前記書き込みデータの量が前記第１のメモリ領域の容量未満であるか判断する処理
をさらに実行させ、
前記第２のメモリ領域内のデータを前記第１のメモリ領域に反映する処理において、
前記書き込みデータの量が前記第１のメモリ領域の容量未満且つ半分以上である場合に、前記第１のメモリ領域において前記書き込みデータが書き込まれた範囲以外の範囲と同じ範囲のデータを前記第２のメモリ領域から読み出し、前記第１のメモリ領域において前記書き込みデータが書き込まれた範囲以外の範囲に書き込む
処理を実行する付記７記載の書き込み制御プログラム。
【０１４２】
（付記９）
前記複製を書き込む処理を停止する処理は、前記第１のメモリ領域の世代と前記第２のメモリ領域の世代とが同じではない場合に実行される
ことを特徴とする付記６記載の書き込み制御プログラム。
【０１４３】
（付記１０）
前記１のメモリ領域内のデータの複製を前記第２のメモリ領域に格納する処理は、前記書き込みデータを前記第１のメモリ領域に書き込む処理とは非同期で行われる
ことを特徴とする付記６記載の書き込み制御プログラム。
【０１４４】
（付記１１）
前記第１のメモリ領域のアドレスと前記第２のメモリ領域とのアドレスとを交換することにより、前記第１のメモリ領域と前記第２のメモリ領域とを切り替える
ことを特徴とする付記６記載の書き込み制御プログラム。
【０１４５】
（付記１２）
第１のメモリ領域内のデータの複製が格納される第２のメモリ領域に対して前記第１のメモリ領域内のデータの複製を書き込む処理を停止し、前記第１のメモリ領域に書き込みデータを書き込む第１処理部と、
前記第１処理部が前記第１のメモリ領域に前記書き込みデータを書き込む処理と並行して、前記書き込みデータに対する誤り検出を実行する第２処理部と、
前記書き込みデータについて誤りが検出された場合に、前記第２のメモリ領域に格納されているデータを用いて、前記書き込みデータが格納される前の前記第１のメモリ領域に格納されていたデータを復旧する第３処理部と、
を有するコンピュータ。
【０１４６】
（付記１３）
第１のメモリ領域内のデータの複製が格納される第２のメモリ領域に対して前記第１のメモリ領域内のデータの複製を書き込む処理を停止し、
前記第１のメモリ領域に書き込まれる書き込みデータに対する誤り検出と、前記書き込みデータを前記第１のメモリ領域に書き込む処理とを並行して実行し、
前記書き込みデータについて誤りが検出された場合に、前記第２のメモリ領域に格納されているデータを用いて、前記書き込みデータが格納される前の前記第１のメモリ領域に格納されていたデータを復旧する
処理をコンピュータが実行する書き込み制御方法。
【０１４７】
（付記１４）
第１のメモリ領域内のデータの複製が格納される第２のメモリ領域に対して前記第１のメモリ領域内のデータの複製を書き込む処理を停止し、前記第２のメモリ領域に書き込みデータを書き込む第１処理部と、
前記第１処理部が前記第２のメモリ領域に前記書き込みデータを書き込む処理と並行して、前記書き込みデータに対する誤り検出を実行する第２処理部と、
前記書き込みデータについて誤りが検出されなかった場合に、主記憶として利用される領域を前記第１のメモリ領域から前記第２のメモリ領域に切り替える第３処理部と、
を有するコンピュータ。
【０１４８】
（付記１５）
第１のメモリ領域内のデータの複製が格納される第２のメモリ領域に対して前記第１のメモリ領域内のデータの複製を書き込む処理を停止し、
前記第２のメモリ領域に書き込まれる書き込みデータに対する誤り検出と、前記書き込みデータを前記第２のメモリ領域に書き込む処理とを並行して実行し、
前記書き込みデータについて誤りが検出されなかった場合に、主記憶として利用される領域を前記第１のメモリ領域から前記第２のメモリ領域に切り替える、又は、前記第２のメモリ領域内のデータを前記第１のメモリ領域に反映する
処理をコンピュータが実行する書き込み制御方法。
【符号の説明】
【０１４９】
１  情報処理装置    １００  ＣＰＵ
１０１  データ転送ＣＰＵ    １０２  ＣＲＣ実行ＣＰＵ
１０３  レプリカ管理ＣＰＵ    １０４  主記憶管理ＣＰＵ
１１０  メモリブリッジ    １２０  メモリ
１２０１  プログラム    １２０２  データ転送プログラム
１２０３  ＣＲＣ実行プログラム    １２０４  レプリカ管理プログラム
１２０５  主記憶管理プログラム    １２０６  管理データ
１２０７  主記憶領域    １２０８  レプリカ領域
１２０９  データ転送バッファ    １３０  Ｉ／Ｏブリッジ
１４０，１４１  ＦＣカード    １５０  ハードディスク
１５０１  プログラム    １５０２  データ転送プログラム
１５０３  ＣＲＣ実行プログラム    １５０４  レプリカ管理プログラム
１５０５  主記憶管理プログラム
１００１  データ転送部    １００２  ＣＲＣ実行部
１００３  レプリカ管理部    １００４  主記憶管理部
１００５  管理テーブル格納部    １００６  更新リスト格納部
【図１】
2015022450.tif 000003
【図２】
2015022450.tif 000004
【図３】
2015022450.tif 000005
【図４】
2015022450.tif 000006
【図５】
2015022450.tif 000007
【図６】
2015022450.tif 000008
【図７】
2015022450.tif 000009
【図８】
2015022450.tif 000010
【図９】
2015022450.tif 000011
【図１０】
2015022450.tif 000012
【図１１】
2015022450.tif 000013
【図１２】
2015022450.tif 000014
【図１３】
2015022450.tif 000015
【図１４】
2015022450.tif 000016
【図１５】
2015022450.tif 000017
【図１６】
2015022450.tif 000018
【図１７】
2015022450.tif 000019
【図１８】
2015022450.tif 000020
【図１９】
2015022450.tif 000021
【図２０】
2015022450.tif 000022
【図２１】
2015022450.tif 000023
【図２２】
2015022450.tif 000024
【図２３】
2015022450.tif 000025
【図２４】
2015022450.tif 000026
【図２５】
2015022450.tif 000027
【図２６】
2015022450.tif 000028
【図２７】
2015022450.tif 000029
【図２８】
2015022450.tif 000030
【図２９】
2015022450.tif 000031
【図３０】
2015022450.tif 000032
【図３１】
2015022450.tif 000033