(57)【要約】【課題】記憶媒体に対する書込回数を低減すること。【解決手段】情報記録装置１００は、記憶媒体に書き込む対象データ１２０を受け付ける。情報記録装置１００は、第１情報１３１と、第２情報１３２と、対象データ１２０とを書き込み可能なブロックの数である第１ブロック数を特定する。情報記録装置１００は、第１情報１３１として、記憶媒体上の書込開始位置１１１から第１ブロック数分の書込先領域１１２の終端ブロック１１３の値を示す情報を生成する。情報記録装置１００は、第２情報１３２として、書込先領域１１２の終端ブロック１１３から第２ブロック数先のブロック１１４の値を示す情報を生成する。情報記録装置１００は、第１情報１３１と、第２情報１３２と、対象データ１２０とを含む、第１ブロック数分の書込データ１４０を生成する。情報記録装置１００は、記憶媒体上の書込開始位置１１１から、生成した書込データ１４０の書き込みを行う。【選択図】図１
2016122485.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
記憶領域に複数のブロック単位で構成される書込データを前記ブロック単位で記憶媒体に書き込む際に、前記書込データの終端ブロック内の第３情報に対応する値を示す第１情報と、前記書込データの次に書き込まれる書込データ内の第４情報に対応する値を示す第２情報を含む前記書込データを生成し、
生成した前記書込データを記憶媒体に書き込む処理を実行させることを特徴とする情報記録プログラム。
【請求項２】
前記第１情報と前記第２情報は、前記書込データの先頭ブロック内に記憶することを特徴とする請求項１に記載の情報記録プログラム。
【請求項３】
前記第１情報は前記第３情報を反転した値を示し、前記第２情報は前記第４情報を反転した値を示すことを特徴とする請求項１または２に記載の情報記録プログラム。
【請求項４】
前記第１情報に格納した値と前記第３情報に格納した値が、変更したか否かを示す第５情報を含む前記書込データを生成する請求項１に記載の情報記録プログラム。
【請求項５】
コンピュータが、
記憶領域に複数のブロック単位で構成される書込データを前記ブロック単位で記憶媒体に書き込む際に、前記書込データの終端ブロック内の第３情報に対応する値を示す第１情報と、前記書込データの次に書き込まれる書込データ内の第４情報に対応する値を示す第２情報を含む前記書込データを生成し、
生成した前記書込データを記憶媒体に書き込む処理を実行することを特徴とする情報記録方法。
【請求項６】
記憶領域に複数のブロック単位で構成される書込データを前記ブロック単位で記憶媒体に書き込む際に、前記書込データの終端ブロック内の第３情報に対応する値を示す第１情報と、前記書込データの次に書き込まれる書込データ内の第４情報に対応する値を示す第２情報を含む前記書込データを生成し、
生成した前記書込データを記憶媒体に書き込む処理を実行する制御部を有することを特徴とする情報記録装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報記録プログラム、情報記録方法、および情報記録装置に関する。
【背景技術】
【０００２】
従来、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）やＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）などの記憶領域の管理方式の一つとしてログ構造化方式がある。ログ構造化方式では、ＨＤＤやＳＳＤなどの連続する記憶領域がリングバッファとして扱われ、リングバッファの先頭から順次データの書き込みが行われる。データの書込処理では、リングバッファの書込開始位置からブロック単位でデータが書き込まれるとともに、データの書込終端の位置を示す管理情報がリングバッファとは異なる記憶領域に書き込まれる。
【０００３】
関連する技術としては、例えば、記憶部の第１の記憶領域に書き込まれたデータのデータ量が設定データ量を超えると、第１の記憶領域に書き込まれたデータを最適化した最適化データを生成して第２の記憶領域に書き込むものがある。また、例えば、第１のセクタ領域に対応する冗長領域と、第２のセクタ領域に対応する冗長領域を並行して参照する技術がある。また、例えば、メモリの第１のブロック内の最初のフリー・バイトを決定する第１のポインタを主メモリ内に保持する技術がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００８−３９３２号公報
【特許文献２】特開２００８−４６７２７号公報
【特許文献３】特開２００４−２０６７３３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述した従来技術では、ログ構造化方式などの管理方式を適用した記憶領域へのデータの書込時に、データの書込コマンドとは別に、データの書込終端の位置を示す管理情報の書込コマンドが発生して、データの書込処理にかかる時間が増加する。
【０００６】
１つの側面では、本発明は、データの書込処理にかかる時間を低減することができる情報記録プログラム、情報記録方法、および情報記録装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一側面によれば、記憶領域に複数のブロック単位で構成される書込データを前記ブロック単位で記憶媒体に書き込む際に、前記書込データの終端ブロック内の第３情報に対応する値を示す第１情報と、前記書込データの次に書き込まれる書込データ内の第４情報に対応する値を示す第２情報を含む前記書込データを生成し、生成した前記書込データを記憶媒体に書き込む情報記録プログラム、情報記録方法、および情報記録装置が提案される。
【発明の効果】
【０００８】
本発明の一態様によれば、データの書込処理にかかる時間を低減することができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施の形態にかかる情報記録方法の一実施例を示す説明図である。
【図２】図２は、コンピュータシステム２００の一例を示す説明図である。
【図３】図３は、コンピュータシステム２００の他の例を示す説明図である。
【図４】図４は、情報記録装置１００のハードウェアの一例を示すブロック図である。
【図５】図５は、情報記録装置１００の機能的構成例を示すブロック図である。
【図６】図６は、記憶媒体上の記憶領域６００のデータ構造の一例を示す説明図である。
【図７】図７は、書込データ７００のデータ構造の一例を示す説明図である。
【図８】図８は、書込データ７００を作成する一例を示す説明図である。
【図９】図９は、書込データ７００を作成する他の例を示す説明図である。
【図１０】図１０は、書込データ１０１０，１２１０を書き込む一例を示す説明図（その１）である。
【図１１】図１１は、書込データ１０１０，１２１０を書き込む一例を示す説明図（その２）である。
【図１２】図１２は、書込データ１０１０，１２１０を書き込む一例を示す説明図（その３）である。
【図１３】図１３は、書込データ１０１０，１２１０を書き込む一例を示す説明図（その４）である。
【図１４】図１４は、電源供給の停止時に行う動作例を示す説明図である。
【図１５】図１５は、情報記録装置１００が書込終端の位置を特定する一例を示す説明図（その１）である。
【図１６】図１６は、情報記録装置１００が書込終端の位置を特定する一例を示す説明図（その２）である。
【図１７】図１７は、情報記録装置１００が書込終端の位置を特定する一例を示す説明図（その３）である。
【図１８】図１８は、情報記録装置１００が書込終端の位置を特定する一例を示す説明図（その４）である。
【図１９】図１９は、書込処理手順の一例を示すフローチャート（その１）である。
【図２０】図２０は、書込処理手順の一例を示すフローチャート（その２）である。
【図２１】図２１は、決定処理手順の一例を示すフローチャート（その１）である。
【図２２】図２２は、決定処理手順の一例を示すフローチャート（その２）である。
【発明を実施するための形態】
【００１０】
以下に、図面を参照して、本発明にかかる情報記録プログラム、情報記録方法、および情報記録装置の実施の形態を詳細に説明する。
【００１１】
（情報記録方法の一実施例）
まず、図１を用いて、実施の形態にかかる情報記録方法の一実施例について説明する。
【００１２】
図１は、実施の形態にかかる情報記録方法の一実施例を示す説明図である。図１において、情報記録装置１００は、ＨＤＤやＳＳＤなどの記憶装置を有するコンピュータである。ＨＤＤやＳＳＤなどの記憶装置は、ブロック単位で記憶領域が分割された記憶媒体を有し、記憶媒体へのブロック単位でのデータの書き込みを制御する装置である。ブロックとは、一定のサイズの記憶領域である。ブロックとは、例えば、５１２［バイト］や４０９６［バイト］などの記憶領域である。図１の例では、１ブロックは、５１２［バイト］の記憶領域であるとする。また、記憶装置は、複数の書込コマンドを受信した場合には、受信した複数の書込コマンドを受信した順番に処理する。また、記憶装置は、記憶領域上のいずれのブロックからもデータを読み出すことができる。
【００１３】
情報記録装置１００は、ＨＤＤやＳＳＤなどの記憶装置を用いて、ファイルシステムやリレーショナルデータベースマネジメントシステムなどのシステムを実現し、１または複数のブロックへのログやファイルやディレクトリなどのデータの書込処理を行う。データのデータ長は書込処理を行う前に確定する。
【００１４】
情報記録装置１００は、複数のブロックへのデータの書込処理を行う際には、複数のブロックのうちの前半のブロックに対してデータの一部分を書き込んだものの、後半のブロックに対してデータの残余部分を書き込むことができないことがある。このように、データの一部分の書き込みだけが成功することは、パーシャルライトと呼ばれることがある。情報記録装置１００は、例えば、複数のブロックのうちの先頭のブロックに対する書き込みに成功した直後に、情報記録装置１００に対する電源供給が停止されたために、２番目以降のブロックに対する書き込みに失敗することがある。
【００１５】
このため、情報記録装置１００は、ＨＤＤやＳＳＤなどの記憶装置が有する記憶媒体上の記憶領域の管理方式としてログ構造化方式を採用することがある。情報記録装置１００は、例えば、ＨＤＤやＳＳＤなどの記憶装置が有する記憶媒体上の連続する記憶領域をバッファとして扱い、連続する記憶領域のうちの先頭ブロックから順次１または複数のブロックを用いてデータの書き込みを行う。連続する記憶領域は、少なくとも論理的に連続する記憶領域である。連続する記憶領域は、物理的に連続する記憶領域でなくてもよい。バッファは、例えば、リングバッファ１１０である。リングバッファとは、先頭と終端とが論理的に接続された記憶領域である。バッファは、リングバッファでなくてもよい。
【００１６】
ここで、情報記録装置１００が、データの書き込みが完了する都度、当該データの次データの書込処理を行う際の書込開始位置を特定可能なように、データの書込終端の位置を示す管理情報をリングバッファ１１０とは異なる記憶領域に書き込む場合が考えられる。データの書込終端とは、リングバッファ１１０上のデータの書き込みが完了した記憶領域の終端である。
【００１７】
しかしながら、この場合には、情報記録装置１００は、書込処理として、リングバッファ１１０にデータの書き込みを行う書込コマンド以外に、リングバッファ１１０とは異なる記憶領域に管理情報の書き込みを行う書込コマンドを発行することになる。結果として、書込処理にかかる時間が増加してしまう。さらに、システムにおいて、データの書き込みを行う頻度が多いほど、管理情報の書き込みを行うことも多くなり、システムの性能劣化を招く。そこで、本実施の形態では、データの書込処理にかかる時間を低減することができる情報記録方法について説明する。
【００１８】
情報記録装置１００は、実施の形態にかかる情報記録プログラムを実行して、実施の形態にかかる情報記録方法を実現する。情報記録装置１００は、記憶媒体に書き込むデータ１２０を受け付けると、下記の（１）および（２）の書込処理を行って、記憶媒体にデータ１２０を書き込む。以下の説明では、受け付けたデータ１２０を「対象データ１２０」と表記する場合がある。対象データのデータ長は可変長である。対象データのデータ長は固定長であってもよい。
【００１９】
（１）情報記録装置１００は、例えば、対象データ１２０を受け付けると、第１情報１３１と、第２情報１３２と、対象データ１２０とを含む、第１ブロック数分の書込データ１４０を、情報記録装置１００のメモリ１５０上で生成する。書込データは、例えば、セグメントと呼ばれることがある。
【００２０】
第１ブロック数とは、正の数であって、少なくとも、第１情報１３１と、第２情報１３２と、対象データ１２０とを書き込み可能なブロックの数である。第１ブロック数とは、例えば、第１情報１３１が１［ビット］、第２情報１３２が１［ビット］、対象データ１２０が１５００［バイト］である場合には、３ブロック分の１５３６［バイト］の記憶領域を用いれば書き込み可能であるため、「３」以上の数になる。第１ブロック数とは、対象データが固定長であれば、固定値であってもよい。
【００２１】
第１情報１３１とは、記憶媒体のリングバッファ１１０上の書込開始位置１１１から第１ブロック数分のブロックの終端ブロックの値を示す情報である。第１情報１３１とは、例えば、記憶媒体のリングバッファ１１０上の書込開始位置１１１から第１ブロック数分のブロックの終端ブロック上の第１位置の値を示す情報である。第１位置とは、例えば、ブロック上の終端位置である。書込開始位置１１１とは、いずれかの未書込のブロックの先頭位置である。書込開始位置１１１とは、例えば、書込データ１４０の先頭部分が書き込まれる位置である。第１ブロック数分のブロックとは、今回の書込処理において今回の書込データ１４０の書込先となる記憶領域である。以下の説明では、第１ブロック数分のブロックを「書込先領域」と表記する場合がある。図１の例では、第１情報１３１は、１［ビット］の値であるとする。
【００２２】
第２情報１３２とは、書込先領域の終端ブロックから第２ブロック数先のブロックの値を示す情報である。第２ブロック数とは、予め決定された正の数であって、第１ブロック数の下限以下の数である。第２ブロック数とは、例えば、第１ブロック数の下限が「１」である場合には、「１」になる。第２情報１３２とは、例えば、書込先領域の終端ブロックから第２ブロック数先のブロック上の第２位置の値である。第２位置とは、例えば、ブロック上の先頭位置である。書込先領域の終端ブロックから第２ブロック数先のブロックとは、次回の書込処理において次回の書込データの書込先になる予定の記憶領域のブロックである。以下の説明では、書込先領域の終端ブロックから第２ブロック数先のブロックを「書込予定ブロック」と表記する場合がある。図１の例では、第２情報１３２は、１［ビット］の値であるとする。
【００２３】
情報記録装置１００は、具体的には、１５００［バイト］の対象データ１２０を受け付けると、第１情報１３１と、第２情報１３２と、対象データ１２０とを書き込み可能なブロックの数「３」を特定する。次に、情報記録装置１００は、第１情報１３１として、記憶媒体のリングバッファ１１０上の書込開始位置１１１から３ブロック分の記憶領域である書込先領域１１２の終端ブロック１１３上の終端位置の１［ビット］の値「１」を読み出す。また、情報記録装置１００は、第２情報１３２として、書込先領域１１２の終端ブロック１１３から１ブロック先のブロックである書込予定ブロック１１４上の先頭位置の１［ビット］の値「１」を読み出す。
【００２４】
そして、情報記録装置１００は、第１情報１３１と、第２情報１３２と、対象データ１２０とを含む、書込先領域１１２に書き込む書込データ１４０を生成する。ここで、情報記録装置１００は、第１情報１３１と、第２情報１３２と、対象データ１２０とを合わせたデータ長が３ブロック分にならない場合には、さらにパディングデータを含む書込データ１４０を生成してもよい。パディングデータとは、書込データ１４０のデータ長を調整し、書込データ１４０のデータ長をブロックの倍数分にするためのデータである。図１の例では、第１情報１３１と、第２情報１３２とは、書込先領域１１２の先頭ブロックに書き込む書込データ１４０の先頭から５１２［バイト］目までのデータに含まれる。
【００２５】
これにより、情報記録装置１００は、今回の書込データ１４０を書き込む前の状態における、今回の書込データ１４０の書込先領域１１２の終端ブロック１１３の値を、書込データ１４０内に第１情報１３１として保持しておくことができる。第１情報１３１は、今回の書込データ１４０を書き込んで書込先領域１１２の終端ブロック１１３の値が書き換えられると、書込先領域１１２の終端ブロック１１３の値と一致しなくなる。換言すれば、第１情報１３１は、書込先領域１１２の終端ブロック１１３の値と一致しない場合には、今回の書込データ１４０の書き込みが完了したことを担保することができる。
【００２６】
同様に、情報記録装置１００は、次回の書込データを書き込む前の状態における、次回の書込データの書込予定ブロック１１４の値を、書込データ１４０内に第２情報１３２として保持しておくことができる。第２情報１３２は、次回の書込データを書き込んで書込予定ブロック１１４の値が書き換えられると、書込予定ブロック１１４の値と一致しなくなる。換言すれば、第２情報１３２は、書込予定ブロック１１４の値と一致しない場合には、次回の書込データの書き込みが開始され、次回の書込データの先頭から第２ブロック数分のデータの書き込みが完了したことを担保することができる。一方で、第２情報１３２は、次回の書込データ全体の書き込みが完了したことを担保しない。
【００２７】
（２）情報記録装置１００は、記憶媒体のリングバッファ１１０上の書込開始位置１１１から、生成した書込データ１４０の書き込みを行う。ここで、情報記録装置１００は、ブロック単位で書込データ１４０を分割し、分割した各データの書込コマンドを記憶装置に順次送信することにより、記憶装置にブロック単位で記憶媒体のリングバッファ１１０への書込データ１４０の書き込みを行わせる。情報記録装置１００は、書込データ１４０の書込コマンドを記憶装置に送信することにより、記憶装置にブロック単位で記憶媒体のリングバッファ１１０上への書込データ１４０の書き込みを行わせてもよい。
【００２８】
情報記録装置１００は、例えば、書込データ１４０の先頭から５１２［バイト］目までのデータの書込コマンドを記憶装置に送信し、記憶装置に書込先領域１１２の先頭ブロックへの書き込みを行わせる。情報記録装置１００は、書込データ１４０の５１３［バイト］目から１０２４［バイト］目までのデータの書込コマンドを記憶装置に送信し、記憶装置に書込先領域１１２の２番目のブロックへの書き込みを行わせる。情報記録装置１００は、書込データ１４０の１０２５［バイト］目から１５３６［バイト］目までのデータの書込コマンドを記憶装置に送信し、記憶装置に書込先領域１１２の終端ブロック１１３への書き込みを行わせる。
【００２９】
これにより、情報記録装置１００は、今回の書込データ１４０の書き込みの成否によって書込先領域１１２の終端ブロック１１３の値と一致するか否かの状態が変化する第１情報１３１を、対象データ１２０とともに書き込むことができる。同様に、情報記録装置１００は、次回の書込データの書き込みが開始されたか否かによって次回の書込データの書込予定ブロック１１４の値と一致するか否かの状態が変化する第２情報１３２を、対象データ１２０とともに書き込むことができる。
【００３０】
このため、情報記録装置１００は、管理情報を更新しなくても、第１情報１３１と第２情報１３２とに基づいて、今回の書込データ１４０の書き込みが完了したか否か、次回の書込データの書き込みが開始されたか否かを判定可能な状態にすることができる。したがって、情報記録装置１００は、リングバッファ１１０とは異なる記憶領域への管理情報の書き込みを行わなくても、データの書込終端の位置を特定することができるようになり、管理情報の書込コマンドを発行しなくてよくなる。
【００３１】
結果として、情報記録装置１００は、書込処理にかかる時間を低減することができる。具体的には、情報記録装置１００は、書込処理において、第１情報１３１や第２情報１３２の読み出しを行ってでも、管理情報の書き込みを行わないようにし、管理情報の書き込みにかかる時間を削減する。ここで、記憶媒体からの読み出しにかかる時間は記憶媒体への書き込みにかかる時間に比べて少ないという性質があるため、情報記録装置１００は、書込処理にかかる時間を低減することができる。また、情報記録装置１００は、１度読み出したデータをキャッシュメモリに保持しておき、第１情報１３１や第２情報１３２の読み出しにかかる時間を低減して、書込処理にかかる時間をさらに低減することができる。
【００３２】
ここでは、第１情報１３１と第２情報１３２とが、第１ブロック数分のブロックの先頭ブロックに書き込むデータとして、書込データ１４０に含まれる場合について説明したが、これに限らない。例えば、第１情報１３１と第２情報１３２とは、第１ブロック数分のブロックのｉ番目のブロックに書き込むデータとして、書込データ１４０に含まれてもよい。ｉは、２以上の自然数である。この場合には、書込データ１４０にパディングデータを追加することにより、書込データ１４０のデータ長がｉブロック数分より大きくなるように調整する。この場合には、対象データ１２０は、書込データ１４０のうちの第１情報１３１と第２情報１３２とより前に含まれるデータと、第１情報１３１と第２情報１３２とより後ろに含まれるデータとに分割されてもよい。また、この場合には、第２情報１３２は、第１ブロック数分のブロックの終端ブロックからｉブロック先のブロックの値を示す情報であってもよい。これにより、第２情報１３２は、書込予定ブロック１１４の値と一致しない場合には、次回の書込データの第１情報と第２情報とが書き込まれていることを担保することができる。
【００３３】
また、第１情報１３１と第２情報１３２とは、対象データ１２０のデータ長が必ずｉ−１ブロック数分より大きくなる場合に限って、第１ブロック数分のブロックのｉ番目のブロックに書き込むデータとして書込データ１４０に含まれるようにしてもよい。
【００３４】
また、情報記録装置１００は、前回の書込データがあれば、前回の書込データに含まれる第２情報に基づいて、今回の書込データ１４０の先頭から第２ブロック数分のデータの書き込みが完了したことを担保することができる。このため、第１情報１３１と第２情報１３２とは、今回の書込データ１４０の先頭から第２ブロック数分のデータに含まれるようにしてもよい。これにより、情報記録装置１００は、前回の書込データに含まれる第２情報に基づいて、今回の書込データ１４０の第１情報１３１と第２情報１３２との書き込みが完了していることを担保することができる。
【００３５】
また、ここでは、第１情報１３１が１［ビット］の値である場合について説明したが、これに限らない。例えば、第１情報１３１は、２［ビット］以上の値であってもよい。また、第１情報１３１は、位置が連続する値でなくてもよく、ブロック上の先頭位置の値と終端位置の値との組み合わせであってもよい。また、第２情報１３２が１［ビット］の値である場合について説明したが、これに限らない。例えば、第２情報１３２は、２［ビット］以上の値であってもよい。また、第２情報１３２は、連続する位置の値でなくてもよく、ブロック上の先頭位置の値と終端位置の値との組み合わせであってもよい。
【００３６】
また、ここでは、第１情報１３１が、書込先領域１１２の終端ブロック１１３の１［ビット］の値そのものである場合について説明したが、これに限らない。例えば、第１情報１３１は、書込先領域１１２の終端ブロック１１３の１［ビット］の値を反転した値であってもよいし、書込先領域１１２の終端ブロック１１３の複数［ビット］の値の和であってもよい。また、第２情報１３２が、次回の書込データの書込予定ブロック１１４の１［ビット］の値そのものである場合について説明したが、これに限らない。例えば、第２情報１３２は、次回の書込データの書込予定ブロック１１４の１［ビット］の値を反転した値であってもよいし、次回の書込データの書込予定ブロック１１４の複数［ビット］の値の和であってもよい。
【００３７】
また、ここでは、情報記録装置１００が第１情報１３１を生成する場合について説明したが、これに限らない。例えば、情報記録装置１００は、書込データ１４０が１ブロック分のデータである場合には、書込データ１４０の一部分だけ書き込みに失敗することはなく、書込データ１４０全体の書き込みが成功するか否かであるため、第１情報１３１の生成を省略してもよい。
【００３８】
また、ここでは、記憶装置が、複数の書込コマンドを受信した場合に、受信した複数の書込コマンドを、受信した順番に処理する場合について説明したが、これに限らない。例えば、記憶装置は、受信した複数の書込コマンドを、受信した順番とは異なる順番で処理してもよい。この場合には、情報記録装置１００は、記憶装置における複数の書込コマンドの処理順番を制御する。まず、情報記録装置１００は、例えば、書込先領域の先頭ブロックに書き込む、第１情報１３１と第２情報１３２とを含むデータの書込コマンドを記憶装置に送信し、記憶装置からの書き込みの完了を示す通知を待つ。次に、情報記録装置１００は、書込先領域１１２の先頭ブロックの次ブロックから、終端ブロックの直前ブロックまでに書き込むデータの書込コマンドを記憶装置に送信し、書き込みの完了を示す通知を待つ。最後に、情報記録装置１００は、書込先領域１１２の終端ブロックに書き込むデータの書込コマンドを記憶装置に送信する。
【００３９】
（コンピュータシステム２００の一例）
次に、図２を用いて、図１に示した情報記録方法を適用した、コンピュータシステム２００の一例について説明する。
【００４０】
図２は、コンピュータシステム２００の一例を示す説明図である。図２において、コンピュータシステム２００は、図１に示した情報記録装置１００によって実現される。コンピュータシステム２００は、ユーザランドで動作するリレーショナルデータベースマネジメントシステム２１０に、実施の形態にかかる情報記録プログラム２０１を適用したシステムである。例えば、リレーショナルデータベースマネジメントシステム２１０のうちの、データベースへのデータの追加や更新、削除などの操作内容を、トランザクションログとして書き込む書込ルーチン２１１に、情報記録プログラム２０１が適用される。書込ルーチン２１１は、カーネルで動作するＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）２２０のデバイスコントローラ２２１を介して、記憶装置にトランザクションログの書き込みを行う。リレーショナルデータベースマネジメントシステム２１０は、例えば、トランザクションログとして、ＭｙＳＱＬ（登録商標）のｂｉｎｌｏｇやＰｏｓｔｇｒｅＳＱＬ（登録商標）のＷＡＬ（Ｗｒｉｔｅ  Ａｈｅａｄ  Ｌｏｇｇｉｎｇ）などを採用する。また、情報記録装置１００は、ストレージアダプタによって接続された外部の記憶装置にリレーショナルデータベースマネジメントシステム２１０を作成してもよい。
【００４１】
（コンピュータシステム２００の他の例）
次に、図３を用いて、図１に示した情報記録方法を適用した、コンピュータシステム２００の他の例について説明する。
【００４２】
図３は、コンピュータシステム２００の他の例を示す説明図である。図３において、コンピュータシステム２００は、図１に示した情報記録装置１００によって実現される。コンピュータシステム２００は、カーネルで動作するＯＳ上のログ構造化ファイルシステム３１１に、実施の形態にかかる情報記録プログラム３０２を適用したシステムである。例えば、ログ構造化ファイルシステム３１１は、カーネルで動作するＯＳ３１０上のデバイスコントローラ３１２を介して、ユーザプログラム３０１からのファイルの操作要求を受け付けて、記憶装置にファイルの書き込みを行う。ログ構造化ファイルシステム３１１は、例えば、ＬｏｇＦＳ（Ｌｏｇ−ｓｔｒｕｃｔｕｒｅｄ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）やＮＩＬＦＳ２（Ｎｅｗ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ  ｏｆ  ａ  Ｌｏｇ−ｓｔｒｕｃｔｕｒｅｄ  Ｆｉｌｅ  Ｓｙｓｔｅｍ  ２）などである。また、情報記録装置１００は、ストレージアダプタによって接続された外部の記憶装置にログ構造化ファイルシステムを作成してもよい。
【００４３】
ここでは、コンピュータシステム２００において、情報記録装置１００のユーザランドまたはカーネルに情報記録プログラムを適用して、図１に示した情報記録方法を実現する場合について説明したが、これに限らない。例えば、コンピュータシステム２００において、ＨＤＤやＳＳＤなどの記憶装置に、情報記録プログラムを適用して、図１に示した情報記録方法を実現してもよい。
【００４４】
（情報記録装置１００のハードウェア）
次に、図４を用いて、図２および図３に示したコンピュータシステム２００を実現する、情報記録装置１００のハードウェアの一例について説明する。
【００４５】
図４は、情報記録装置１００のハードウェアの一例を示すブロック図である。図４において、情報記録装置１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）４０１と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）４０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）４０３と、を有する。また、情報記録装置１００は、さらに、ディスクドライブ４０４と、ディスク４０５と、ＳＳＤ４０６と、半導体メモリ４０７と、インターフェース（Ｉ／Ｆ：Ｉｎｔｅｒｆａｃｅ）４０８と、を有する。
【００４６】
また、ＣＰＵ４０１と、ＲＯＭ４０２と、ＲＡＭ４０３と、ディスクドライブ４０４と、ＳＳＤ４０６と、Ｉ／Ｆ４０８とは、バス４００によってそれぞれ接続されている。情報記録装置１００は、例えば、サーバ、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）、ノートＰＣ、タブレット型ＰＣ、スマートフォンなどである。
【００４７】
ここで、ＣＰＵ４０１は、情報記録装置１００の全体の制御を司る。ＲＯＭ４０２は、ブートプログラム、本実施の形態にかかる情報記録プログラムなどの各種プログラムを記憶する。ＲＡＭ４０３は、ＣＰＵ４０１のワークエリアとして使用される。また、ＲＡＭ４０３は、各種プログラムの実行により得られたデータなどの各種データを記憶する。
【００４８】
ディスクドライブ４０４は、ＣＰＵ４０１の制御により、ディスク４０５に対するデータのリード／ライトを制御する。ディスク４０５は、ディスクドライブ４０４の制御により書き込まれたデータを記憶する。ＳＳＤ４０６は、ＣＰＵ４０１の制御により、半導体メモリ４０７に対するデータのリード／ライトを制御する。半導体メモリ４０７は、ＳＳＤ４０６の制御により書き込まれたデータを記憶する。
【００４９】
Ｉ／Ｆ４０８は、通信回線を通じてネットワーク４１０に接続され、このネットワーク４１０を介して他の装置に接続される。ネットワーク４１０は、例えば、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどである。そして、Ｉ／Ｆ４０８は、ネットワーク４１０と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ４０８は、例えば、モデムやＬＡＮアダプタなどである。
【００５０】
情報記録装置１００は、ディスク４０５、および半導体メモリ４０７のいずれか１つを有していなくてもよい。また、情報記録装置１００は、光ディスク、ディスプレイ、キーボード、マウス、スキャナ、およびプリンタの少なくともいずれか１つを有してもよい。
【００５１】
（情報記録装置１００の機能的構成例）
次に、図５を用いて、情報記録装置１００の機能的構成例について説明する。
【００５２】
図５は、情報記録装置１００の機能的構成例を示すブロック図である。情報記録装置１００は、制御部となる機能として、受付部５０１と、生成部５０２と、書込部５０３と、読出部５０４と、判定部５０５と、決定部５０６とを有する。
【００５３】
情報処理装置１００は、例えば、制御部によって、記憶領域に複数のブロック単位で構成される書込データをブロック単位で記憶媒体に書き込む際に、第１情報と、第２情報とを含む書込データを生成し、生成した書込データを記憶媒体に書き込む処理を行う。記憶領域は、例えば、ＲＡＭ４０３である。
【００５４】
ここで、第１情報は、例えば、第３情報に対応する値を示す情報である。第３情報は、例えば、書込データの終端ブロック内の値である。第３情報は、第１情報を反転した値を示す情報であってもよい。これにより、情報処理装置１００は、書込データを記憶媒体に書き込んだ後の記憶媒体の状態を、記憶媒体上の書込データ内の異なる位置に、第１情報と、第１情報が示す値と一致または反転した第３情報とが記憶された状態にすることができる。
【００５５】
第２情報は、第４情報に対応する値を示す情報である。第４情報は、書込データの次に書き込まれる書込データ内の値である。これにより、情報処理装置１００は、書込データを記憶媒体に書き込んだ後の記憶媒体の状態を、記憶媒体上の書込データ内に第２情報が記憶され、記憶媒体上の次に書き込んだ書込データ内に第４情報が記憶された状態にすることができる。第１情報と第２情報とは、例えば、書込データの先頭ブロック内に記憶される。
【００５６】
情報処理装置１００は、さらに、第５情報を含む書込データを生成してもよい。第５情報は、例えば、第１情報に格納した値と第３情報に格納した値が、変更したか否かを示す情報である。これにより、情報処理装置１００は、書込データを記憶媒体に書き込んだ後の状態を、記憶媒体上の書込データ内の第１情報と第３情報との組み合わせが、元々の組み合わせから変更されたものであるか否かを判定可能な状態にすることができる。
【００５７】
情報記録装置１００は、具体的には、制御部によって、第１動作と第２動作と第３動作とを行う。第１動作は、書込処理を行う動作である。第２動作は、データの書込終端の位置を特定する動作である。第３動作は、書込処理によって書き込まれた書込データを読み出す動作である。
【００５８】
〈第１動作〉
まず、第１動作について説明する。第１動作は、書込処理を行う動作である。第１動作は、受付部５０１と、生成部５０２と、書込部５０３とによって実現される。
【００５９】
受付部５０１は、記憶媒体に書き込む対象データを受け付ける。記憶媒体とは、ブロック単位で記憶領域が分割され、ブロック単位でデータの書き込みが行われる媒体である。記憶媒体とは、連続する記憶領域がバッファとして扱われ、連続する記憶領域にブロック単位で順次データが書き込まれる媒体である。記憶媒体とは、例えば、図４に示したディスク４０５や半導体メモリ４０７である。バッファのデータ構造の一例については、図６を用いて後述する。対象データのデータ長は可変長である。対象データのデータ長は固定長であってもよい。受付部５０１は、例えば、１５００［バイト］の対象データを受け付ける。
【００６０】
これにより、受付部５０１は、生成部５０２に対象データを出力し、対象データを含む書込データを生成させることができる。受付部５０１は、例えば、図４に示したＲＯＭ４０２、ＲＡＭ４０３、ディスク４０５、半導体メモリ４０７などの記憶装置に記憶されたプログラムをＣＰＵ４０１に実行させることにより、または、Ｉ／Ｆ４０８により、その機能を実現する。受け付けた対象データは、例えば、ＲＡＭ４０３、ディスク４０５、半導体メモリ４０７などの記憶領域に記憶される。
【００６１】
生成部５０２は、記憶媒体に受付部５０１が受け付けた対象データを書き込む際に、第１情報と、第２情報と、対象データとを含む、第１ブロック数分の書込データを生成する。第１ブロック数とは、正の数であって、少なくとも、第１情報と、第２情報と、対象データとを書き込み可能なブロックの数である。
【００６２】
第１情報とは、記憶媒体上の書込開始位置から第１ブロック数分のブロックの終端ブロックの少なくともいずれかの値を示す情報である。第１情報とは、例えば、書込開始位置から第１ブロック数分のブロックの終端ブロック上の第１位置の値を示す情報である。第１位置とは、例えば、ブロック上の終端位置である。書込開始位置とは、いずれかの未書込のブロックの先頭位置である。書込開始位置とは、例えば、書込データの先頭部分が書き込まれる位置である。第１ブロック数分のブロックとは、今回の書込処理において今回の書込データの書込先となる記憶領域である。以下の説明では、第１ブロック数分のブロックを「書込先領域」と表記する場合がある。
【００６３】
第２情報とは、書込先領域の終端ブロックから第２ブロック数先のブロックの少なくともいずれかの値である。第２ブロック数とは、予め決定された正の数であって、第１ブロック数の下限以下の数である。第２情報とは、例えば、書込先領域の終端ブロックから第２ブロック数先のブロック上の第２位置の値である。第２位置とは、例えば、ブロック上の先頭位置である。書込先領域の終端ブロックから第２ブロック数先のブロックとは、次回の書込処理において次回の書込データの書込先になる予定の記憶領域のブロックである。以下の説明では、書込先領域の終端ブロックから第２ブロック数先のブロックを「書込予定ブロック」と表記する場合がある。
【００６４】
生成部５０２は、例えば、第１情報と第２情報とを含む１［バイト］のヘッダ情報と、１５００［バイト］の対象データと、を書き込み可能なブロックの数「３」を特定する。次に、生成部５０２は、第１情報として、書込開始位置から３つ分のブロックの書込先領域の終端ブロック上の終端位置の１［ビット］の値を読み出す。また、生成部５０２は、第２情報として、書込先領域の終端ブロックから１ブロック先の書込予定ブロック上の先頭位置の１［ビット］の値を読み出す。そして、生成部５０２は、第１情報と第２情報とを含む１［バイト］のヘッダ情報と、１５００［バイト］の対象データとを含む、３つ分のブロックに書き込む書込データを生成する。書込データのデータ構造の一例については、図７を用いて後述する。
【００６５】
これにより、生成部５０２は、今回の書込データを書き込む前の状態における、今回の書込データの書込先領域の終端ブロックの値を、第１情報として書込データ内に保持しておくことができる。そして、第１情報は、書込先領域の終端ブロックの値と一致しない場合には、今回の書込データの書き込みが完了したことを担保することができる。同様に、生成部５０２は、次回の書込データを書き込む前の状態における、次回の書込データの書込予定ブロックの値を、第２情報として書込データ内に保持しておくことができる。そして、第２情報は、書込予定ブロックの値と一致しない場合には、次回の書込データの書き込みが開始され、次回の書込データの先頭から第２ブロック数分のデータの書き込みが完了したことを担保することができる。
【００６６】
また、生成部５０２は、さらに、第３情報を含む書込データを生成してもよい。第３情報とは、書込先領域の終端ブロック上の第１位置に書き込む値として書込データに含まれる、第１情報が示す値とは異なる値を示す情報である。生成部５０２は、例えば、第３情報として、第１情報が示す値を反転した値を生成する。そして、生成部５０２は、第１情報と第２情報とを含むヘッダ情報と、対象データとを含み、書込先領域の終端ブロック上の終端位置に書き込む値として第３の情報を含む書込データを生成する。これにより、生成部５０２は、今回の書込データの書き込みが成功した場合には、書込先領域１１２の終端ブロック１１３の値が必ず変化するようにして、第１情報と終端ブロック１１３の値とが一致するか否かの状態が変化するのを確定させることができる。
【００６７】
また、生成部５０２は、さらに、第４情報を含む書込データを生成してもよい。第４情報とは、書込開始位置の直前ブロックから第２ブロック数先のブロック上の第２位置に書き込む値として書込データに含まれる、書込開始位置の直前ブロックから第２ブロック数先のブロック上の第２位置の値とは異なる値を示す情報である。以下の説明では、書込開始位置の直前ブロックを「直前ブロック」と表記する場合がある。生成部５０２は、例えば、第４情報として、直前ブロックから１ブロック先のブロックの先頭位置の値を反転した値を生成する。そして、生成部５０２は、第１情報と第２情報と第４情報とを含むヘッダ情報と、対象データとを含む書込データを生成する。これにより、生成部５０２は、次回の書込データの書き込みが開始された場合には、次回の書込データの書込予定ブロック１１４の値が必ず変化するようにすることができる。このため、生成部５０２は、次回の書込データの書き込みが開始された場合には、第２情報と書込予定ブロック１１４の値とが一致するか否かの状態が変化するのを確定させることができる。
【００６８】
また、生成部５０２は、対象データの値を第３情報として用いて、さらに、第５情報を含む書込データを生成してもよい。第５情報は、第３情報として用いるために対象データの値を変更したか否かを示す情報である。第５情報は、変更後の対象データの値を、変更前の値に復元するための情報である。第５情報は、例えば、対象データのいずれかの値を反転して第３情報として用いた場合には、反転したことを示す１［ビット］の情報である。第５情報は、例えば、変更前の値そのものであってもよい。生成部５０２は、例えば、書込先領域の終端ブロック上の第１位置の値と、対象データのうちの書込先領域の終端ブロック上の第１位置に書き込む値とが一致しているか否かを判定する。生成部５０２は、一致していない場合には、対象データのうちの書込先領域の終端ブロック上の第１位置に書き込む値をそのまま第３情報として用いることができるため、対象データを変更せず、対象データの値を変更していないことを示す第５情報を生成する。そして、生成部５０２は、第１情報と第２情報と第５情報とを含むヘッダ情報と、変更していない対象データとを含む書込データを生成する。
【００６９】
一方で、生成部５０２は、一致している場合には、対象データのうちの書込先領域の終端ブロック上の第１位置に書き込む値をそのままでは第３情報として用いることができないため、当該値を異なる値に変更する。さらに、生成部５０２は、対象データの値を変更したことを示す第５情報を生成する。そして、生成部５０２は、第１情報と第２情報と第５情報とを含むヘッダ情報と、書込先領域の終端ブロック上の第１位置に書き込む値を異なる値に変更した対象データとを含む書込データを生成する。これにより、生成部５０２は、対象データの値を第３情報として用いることができ、対象データの値を変更した場合には対象データを読み出した際に復元可能なように、対象データを変更したことを示す第５情報を書込データ内に保持することができる。
【００７０】
また、生成部５０２は、直前ブロックから第２ブロック数先のブロックに書き込む情報として、第１情報と第２情報とを含む書込データを生成してもよい。生成部５０２は、例えば、第１情報と第２情報とを含むヘッダ情報を生成し、直前ブロックから第２ブロック数先のブロックに書き込む情報としてヘッダ情報を含む書込データを生成する。これにより、生成部５０２は、前回の書込データがあれば、前回の書込データの第２情報に基づいて、今回の書込データのうちで書き込みの成功を担保することができる範囲のデータに第１情報と第２情報とを含むことができる。結果として、生成部５０２は、第１情報と第２情報とが書き込まれておらず、データの書込終端の位置を特定することができなくなることを防止することができる。
【００７１】
また、生成部５０２は、第２ブロック数として「１」を設定してもよい。換言すれば、生成部５０２は、直前ブロックから１ブロック先のブロックに書き込む情報として、第１情報と第２情報とを含む書込データを生成する。生成部５０２は、例えば、第１情報と第２情報とを含むヘッダ情報を生成し、書込開始位置から第１ブロック数分のブロックの先頭ブロックに書き込む情報としてヘッダ情報を含む書込データを生成する。これにより、生成部５０２は、前回の書込データがあれば、前回の書込データの第２情報に基づいて、今回の書込データのうちで書き込みの成功を担保することができる範囲のデータに第１情報と第２情報とを含むことができる。
【００７２】
生成部５０２は、例えば、図４に示したＲＯＭ４０２、ＲＡＭ４０３、ディスク４０５、半導体メモリ４０７などの記憶装置に記憶されたプログラムをＣＰＵ４０１に実行させることにより、その機能を実現する。生成された書込データは、例えば、ＲＡＭ４０３、ディスク４０５、半導体メモリ４０７などの記憶領域に記憶される。
【００７３】
書込部５０３は、生成部５０２が生成した書込データを書込開始位置から書き込む。書込部５０３は、例えば、書込データを、直前ブロックから第２ブロック数先のブロックに書き込むデータを含む第１データと、書込先領域の終端ブロックに書き込むデータを含む第２データとに分割する。書込部５０３は、第１データの書き込みが完了してから、第２データを書き込む。これにより、書込部５０３は、記憶装置が記憶媒体に対して書込データの先頭から順に書き込まない場合があっても、第１情報と第２情報とに基づいて、今回の書込データの書き込みが完了したか否かを判定可能な状態にすることができる。また、書込部５０３は、記憶装置が記憶媒体に対して書込データの先頭から順に書き込まない場合があっても、次回の書込データの書き込みが開始されたか否かを判定可能な状態にすることができる。
【００７４】
書込部５０３は、書込データの書き込みが完了した場合に、連続する記憶領域のうちの書き込みが完了した記憶領域の終端位置を示す情報を、記憶媒体とは異なる揮発性の記憶媒体に記録する。連続する記憶領域のうちの書き込みが完了した記憶領域の終端位置とは、データの書込終端の位置である。これにより、書込部５０３は、第１情報や第２情報を用いてデータの書込終端の位置を特定しなくてもよくなるようにして、処理負荷を低減することができる。
【００７５】
書込部５０３は、電源供給の停止要求を受け付けた場合に、直前に書き込みが完了した記憶領域の終端位置を示す情報を、連続する記憶領域とは異なる他の記憶領域に記録する。直前に書き込みが完了した記憶領域の終端位置とは、データの書込終端の位置である。これにより、書込部５０３は、次に電源を投入した際に、第１情報や第２情報を用いてデータの書込終端の位置を特定しなくてもよくなるようにして、処理負荷を低減することができる。
【００７６】
書込部５０３は、例えば、図４に示したＲＯＭ４０２、ＲＡＭ４０３、ディスク４０５、半導体メモリ４０７などの記憶装置に記憶されたプログラムをＣＰＵ４０１に実行させることにより、その機能を実現する。
【００７７】
〈第２動作〉
次に、第２動作について説明する。第２動作は、データの書込終端の位置を特定する動作である。第２動作は、受付部５０１と、読出部５０４と、判定部５０５と、決定部５０６とによって実現される。
【００７８】
読出部５０４は、第１情報と第２情報とを読み出す。読出部５０４は、例えば、いずれかの書込データの書込開始位置の直前ブロックから第２ブロック数先のブロックが書込済のブロックであれば、いずれかの書込データとして書き込まれた第１情報と第２情報とを読み出す。
【００７９】
読出部５０４は、具体的には、電源供給の停止状態から復帰した際に、他の記憶領域に記録された情報を読み出す。読出部５０４は、読み出した情報が、いずれかの書込データの書込開始位置の直前ブロックから第２ブロック数先のブロックが書込済のブロックであることを示していれば、いずれかの書込データとして書き込まれた第１情報と第２情報とを読み出す。これにより、読出部５０４は、データの書込終端の位置を特定するための情報を読み出すことができる。
【００８０】
また、読出部５０４は、判定部５０５が、後述するように、いずれかの書込データの次の書込データの書き込みが開始されたと判定した場合には、次の書込データとして書き込まれた第１情報と第２情報とを読み出すことになる。これにより、読出部５０４は、データの書込終端の位置を特定するための情報を読み出すことができる。以下の説明では、第１情報と第２情報とが読み出された書込データを「読出元の書込データ」と表記する場合がある。
【００８１】
読出部５０４は、例えば、図４に示したＲＯＭ４０２、ＲＡＭ４０３、ディスク４０５、半導体メモリ４０７などの記憶装置に記憶されたプログラムをＣＰＵ４０１に実行させることにより、その機能を実現する。読み出されたデータは、例えば、ＲＡＭ４０３、ディスク４０５、半導体メモリ４０７などの記憶領域に記憶される。
【００８２】
判定部５０５は、第１情報が示す値に基づいて、書込先領域の終端ブロックが書込済のブロックであるか否かを判定する。判定部５０５は、例えば、読出元の書込データの書込先領域の終端ブロックの値が、第３情報を書き込まれる前の状態であるために、第１情報が示す値と一致する状態であるのかを判定する。また、判定部５０５は、読出元の書込データの書込先領域の終端ブロックの値が、第３情報を書き込まれた後の状態であるために、第１情報が示す値と一致しない状態であるのかを判定する。ここで、判定部５０５は、一致すると判定した場合には、読出元の書込データの書込先領域の終端ブロックが書込済のブロックではないと判定する。一方で、判定部５０５は、一致しないと判定した場合には、読出元の書込データの書込先領域の終端ブロックが書込済のブロックであると判定する。これにより、判定部５０５は、読出元の書込データの書き込みが完了したか否かを判定することができる。
【００８３】
判定部５０５は、第２情報が示す値に基づいて、読出元の書込データの次の書込データの書込予定ブロックが書込済のブロックであるか否かを判定する。判定部５０５は、例えば、書込予定ブロックの値が、第４情報が書き込まれる前の状態であるため第２情報が示す値と一致する状態であるのか、第４情報が書き込まれた後の状態であるため第２情報が示す値と一致しない状態であるのか、を判定する。ここで、判定部５０５は、一致すると判定した場合には、書込予定ブロックが書込済のブロックではないと判定する。一方で、判定部５０５は、一致しないと判定した場合には、書込予定ブロックが書込済のブロックであると判定する。これにより、判定部５０５は、読出元の書込データの次の書込データの書き込みが開始されたか否かを判定することができる。
【００８４】
判定部５０５は、例えば、図４に示したＲＯＭ４０２、ＲＡＭ４０３、ディスク４０５、半導体メモリ４０７などの記憶装置に記憶されたプログラムをＣＰＵ４０１に実行させることにより、その機能を実現する。判定結果は、例えば、ＲＡＭ４０３、ディスク４０５、半導体メモリ４０７などの記憶領域に記憶される。
【００８５】
決定部５０６は、読み出した第１情報と第２情報とに基づいて、連続する記憶領域のうちのデータの書込終端の位置を決定する。データの書込終端とは、例えば、書込データの書き込みが完了した記憶領域の終端ブロックである。例えば、判定部５０５が、書込予定ブロックが書込済のブロックではないと判定し、かつ、書込先領域の終端ブロックが書込済のブロックであると判定した場合がある。この場合には、決定部５０６は、書込先領域の終端ブロックを、データの書込終端の位置に決定する。これにより、決定部５０６は、読出元の書込データの次の書込データの書き込みが完了しており、当該書込データの次の書込データの書き込みが開始されていないか失敗した場合であることを特定して、データの書込終端の位置を決定することができる。そして、決定部５０６は、データの書込終端の位置に基づいて、書込データが書込済の記憶領域の範囲を特定して、書込データを読み出すことができる。
【００８６】
一方で、例えば、判定部５０５が、書込予定ブロックが書込済のブロックではないと判定し、かつ、書込先領域の終端ブロックが書込済のブロックではないと判定した場合がある。この場合には、決定部５０６は、書込先領域の直前ブロックを、データの書込終端の位置に決定する。これにより、決定部５０６は、読出元の書込データの次の書込データの書き込みが失敗した場合であることを特定して、データの書込終端の位置を決定することができる。そして、決定部５０６は、データの書込終端の位置に基づいて、書込データが書込済の記憶領域の範囲を特定して、書込データを読み出すことができる。
【００８７】
また、決定部５０６は、読み出した第１情報と第２情報とに基づいて、記憶媒体上の新たなデータを含む書込データの書込開始位置を決定してもよい。例えば、判定部５０５が、書込予定ブロックが書込済のブロックではないと判定し、かつ、書込先領域の終端ブロックが書込済のブロックであると判定した場合がある。この場合には、決定部５０６は、書込先領域の終端ブロックの次ブロックの先頭位置を、新たな書込データの書込開始位置に決定する。これにより、決定部５０６は、読出元の書込データの次の書込データの書き込みが完了しており、当該書込データの次の書込データの書き込みが開始されていないか失敗した場合であることを特定して、最新の書込開始位置を決定することができる。
【００８８】
一方で、例えば、判定部５０５が、書込予定ブロックが書込済のブロックではないと判定し、かつ、書込先領域の終端ブロックが書込済のブロックではないと判定した場合がある。この場合には、決定部５０６は、読出元の書込データの次の書込データの書込開始位置を、新たなデータを含む書込データの書込開始位置に決定する。これにより、決定部５０６は、読出元の書込データの次の書込データの書き込みが失敗した場合であることを特定して、最新の書込開始位置を決定することができる。
【００８９】
決定部５０６は、例えば、図４に示したＲＯＭ４０２、ＲＡＭ４０３、ディスク４０５、半導体メモリ４０７などの記憶装置に記憶されたプログラムをＣＰＵ４０１に実行させることにより、その機能を実現する。
【００９０】
〈第３動作〉
次に、第３動作について説明する。第３動作は、書込処理によって書き込まれた書込データを読み出す動作である。第３動作は、受付部５０１と、読出部５０４によって実現される。
【００９１】
受付部５０１は、対象データの読出要求を受け付ける。受付部５０１は、例えば、書込データに含まれる対象データの読出要求を受け付ける。これにより、受付部５０１は、読出部５０４に、対象データの読み出しを行わせることができる。
【００９２】
読出部５０４は、受付部５０１が読出要求を受け付けると、記憶媒体に書き込まれた書込データを読み出す。読出部５０４は、例えば、リングバッファのうち、決定部５０６が決定したデータの書込終端の位置までに書き込まれた書込データを読み出す。
【００９３】
次に、読出部５０４は、書込データに含まれる第５情報を抽出し、書込データに含まれる対象データを抽出する。ここで、読出部５０４は、第５情報が、対象データのうちの書込先領域の終端ブロック上の第１位置に書き込む値を変更したことを示す場合には、対象データのうちの書込先領域の終端ブロック上の第１位置から読み出した値を反転し、変更前の値を復元する。一方で、読出部５０４は、第５情報が、対象データのうちの書込先領域の終端ブロック上の第１位置に書き込む値を変更していないことを示す場合には、対象データを変更しない。これにより、読出部５０４は、いずれかの書込データを読み出し、書込データに含まれる対象データを取得することができる。また、読出部５０４は、対象データの値が変更されていても、対象データを復元することができる。
【００９４】
（記憶媒体上の記憶領域６００のデータ構造の一例）
次に、図６を用いて、図４に示したディスク４０５、または半導体メモリ４０７などの記憶媒体の記憶領域６００のデータ構造の一例について説明する。
【００９５】
図６は、記憶媒体上の記憶領域６００のデータ構造の一例を示す説明図である。記憶媒体上の記憶領域６００は、バッファ６０１として扱われる連続する記憶領域と、スーパーブロック６０２とを含む。記憶領域６００は、Ｎブロックを有する。以下の説明では、記憶領域６００の先頭のブロックから順に、ブロック＃０、ブロック＃１、・・・、ブロック＃Ｎ−１と表記する場合がある。
【００９６】
バッファ６０１は、論理的に連続する記憶領域である。バッファ６０１は、例えば、ブロック＃１からブロック＃Ｎ−１までの記憶領域である。バッファ６０１は、例えば、ラップアラウンド方式を適用し、終端ブロックの次ブロックが先頭ブロックになるように設定された記憶領域であってもよい。ラップアラウンド方式を適用したバッファ６０１は、例えば、リングバッファと呼ばれることがある。
【００９７】
スーパーブロック６０２は、バッファ６０１に関する情報であって、バッファ６０１上のデータの書込終端の位置情報を含み、新たな書込データの書込処理を行う際の書込開始位置を特定可能にする情報が記憶される記憶領域である。スーパーブロック６０２は、例えば、ブロック＃０である。スーパーブロック６０２は、例えば、管理情報が記憶される記憶領域である。
【００９８】
管理情報は、ブロック数情報と、先頭ブロック情報と、最終ブロック情報と、初回書込ブロック情報と、最終書込ブロック情報とを含む。ブロック数情報は、バッファ６０１が有するブロックの数を示す情報である。ブロック数情報は、例えば、ブロックの数「Ｎ」である。
【００９９】
先頭ブロック情報は、バッファ６０１の先頭ブロックの識別情報である。先頭ブロック情報は、バッファ６０１の先頭ブロックに割り振られたブロック番号である。先頭ブロック情報は、例えば、ブロック＃１の識別情報「１」である。最終ブロック情報は、バッファ６０１の書込済のブロックのうち、位置が最後である最終ブロックの識別情報である。最終ブロック情報は、バッファ６０１の書込済ブロックのうち、最終ブロックに割り振られたブロック番号である。最終ブロック情報は、例えば、バッファ６０１への書込が行われる前には、初期値「０」である。
【０１００】
初回書込ブロック情報は、バッファ６０１の書込済ブロックのうち、書込順序が最初である書込データの先頭部分を書き込んだ初回書込ブロックの識別情報である。初回書込ブロック情報は、バッファ６０１の初回書込ブロックに割り振られたブロック番号である。初回書込ブロック情報は、例えば、バッファ６０１への書込が行われる前には、初期値「０」である。最終書込ブロック情報は、バッファ６０１の書込済ブロックのうち、書込順序が最後である書込データの先頭部分を書き込んだ最終書込ブロックの識別情報である。最終書込ブロック情報は、バッファ６０１の最終書込ブロックに割り振られたブロック番号である。最終書込ブロック情報は、例えば、バッファ６０１への書込が行われる前には、初期値「０」である。
【０１０１】
ここで、ラップアラウンド方式を適用しない場合の記憶媒体の記憶領域６００のデータ構造の具体例について説明する。この場合には、先頭ブロック情報が示す先頭ブロックから順次データが書き込まれてもよいし、いずれかのブロックから順次データが書き込まれてもよい。情報記録装置１００は、例えば、初めていずれかのブロックにデータを書き込むと、初回書込ブロック情報として、いずれかのブロックの識別情報を設定する。情報記録装置１００は、書込データを書き込む都度、最終ブロック情報として位置が最後である書込データの終端部分を書き込んだ最終ブロックの識別情報を設定する。また、情報記録装置１００は、書込データを書き込む都度、最終書込ブロック情報として書込順序が最後である書込データの先頭部分を書き込んだ最終書込ブロックの識別情報を設定する。図６の例では、先頭ブロック情報として、ブロック６１１の識別情報が設定される。また、最終ブロック情報として、ブロック６１２の識別情報が設定される。また、初回書込ブロック情報として、ブロック６１１の識別情報が設定される。また、最終書込ブロック情報として、ブロック６１３の識別情報が設定される。
【０１０２】
これにより、情報記録装置１００は、バッファ６０１のうち、書込済の記憶領域の範囲を特定し、データ終端の位置を特定することができるようになる。情報記録装置１００は、例えば、初回書込ブロック情報によって識別されるブロックが書込済のブロックの先頭ブロックであると特定することができる。また、情報記録装置１００は、最終ブロック情報によって識別されるブロックが書込済の記憶領域の終端ブロックであると特定することができる。換言すれば、情報記録装置１００は、初回書込ブロック情報によって識別されるブロックから、最終ブロック情報によって識別されるブロックまでを、書込済の記憶領域の範囲として特定することができる。情報記録装置１００は、特定した書込済の記憶領域の範囲に書き込まれた書込データを読み出すことができる。
【０１０３】
また、ラップアラウンド方式を適用した場合の記憶媒体の記憶領域６００のデータ構造の具体例について説明する。この場合には、先頭ブロック情報が示す先頭ブロックから順次データが書き込まれてもよいし、いずれかのブロックから順次データが書き込まれてもよい。情報記録装置１００は、いずれかのブロックにデータを書き込むと、初回書込ブロック情報として、いずれかのブロックの識別情報を設定する。情報記録装置１００は、書込データを書き込む都度、最終ブロック情報として位置が最後である書込データの終端部分を書き込んだ最終ブロックの識別情報を設定する。また、情報記録装置１００は、書込データを書き込む都度、最終書込ブロック情報として書込順序が最後である書込データの先頭部分を書き込んだ最終書込ブロックの識別情報を設定する。図６の例では、先頭ブロック情報として、ブロック６２１の識別情報が設定される。また、最終ブロック情報として、ブロック６２２の識別情報が設定される。また、初回書込ブロック情報として、ブロック６２４の識別情報が設定される。また、最終書込ブロック情報として、ブロック６２３の識別情報が設定される。
【０１０４】
これにより、情報記録装置１００は、バッファ６０１のうち、書込済の記憶領域の範囲を特定し、データ終端の位置を特定することができるようになる。情報記録装置１００は、例えば、初回書込ブロック情報によって識別されるブロックが書込済のブロックの先頭ブロックであると特定することができる。また、情報記録装置１００は、最終書込ブロック情報によって識別されるブロックが先頭ブロックになる書込先領域の終端ブロックが、書込済の記憶領域の終端ブロックであると特定することができる。換言すれば、情報記録装置１００は、初回書込ブロック情報によって識別されるブロックから、最終書込ブロック情報によって識別されるブロックが先頭ブロックになる書込先領域の終端ブロックまでを、書込済の記憶領域の範囲として特定することができる。また、初回書込ブロック情報によって識別されるブロックが、最終書込ブロック情報によって識別されるブロックよりも後ろにある場合がある。この場合には、情報記録装置１００は、書込済の記憶領域の範囲が、最終ブロック情報によって識別されるブロックから先頭ブロック情報によって識別されるブロックに戻るように論理的に連続する記憶領域の範囲であると特定することができる。情報記録装置１００は、特定した書込済の記憶領域の範囲に書き込まれた書込データを読み出すことができる。以下の説明では、バッファ６０１は、ラップアラウンド方式を適用したリングバッファであるとする。
【０１０５】
（書込データ７００のデータ構造の一例）
次に、図７を用いて、書込データ７００のデータ構造の一例について説明する。
【０１０６】
図７は、書込データ７００のデータ構造の一例を示す説明図である。書込データ７００は、１［バイト］のヘッダ情報と、対象データとを含む、所定ブロック数分のデータである。換言すれば、書込データ７００は、１ブロックが５１２［バイト］の記憶領域であれば、５１２［バイト］の倍数長のデータである。
【０１０７】
ヘッダ情報は、第１ビット７０１と、第２ビット７０２と、第３ビット７０３と、第４ビット７０４とを含む。第１ビット７０１は、書込データ７００を書き込む１または複数のブロック分の記憶領域上の第１ビット７０１を書き込む位置の値を反転した値である。以下の説明では、書込データ７００を書き込む記憶領域を「書込先領域」と表記する場合がある。
【０１０８】
第２ビット７０２は、書込データ７００を書き込む書込先領域の次ブロック上の先頭位置の値である。第３ビット７０３は、書込データ７００を書き込む書込先領域上の終端位置の値である。第４ビット７０４は、対象データの終端の値を反転したか否かを示すビットである。以下の説明では、対象データの終端の値を「終端ビット７０６」と表記する場合がある。対象データは、対象データのデータ長を示すサイズ情報７０５を含む。
【０１０９】
書込データ７００は、例えば、図７の（ａ）のように、ヘッダ情報と、対象データとを結合したデータである。しかしながら、実際には、ヘッダ情報のデータ長と、対象データのデータ長との和が、所定ブロック数分にならない場合がある。このため、書込データ７００は、例えば、図７の（ｂ）のように、ヘッダ情報と、対象データと、書込データ７００のデータ長を調整するためのパディングデータと、を結合したデータであってもよい。パディングデータは、書込データ７００のデータ長を調整し、書込データ７００のデータ長をブロックの倍数分にするためのデータである。パディングデータは、例えば、対象データのデータ長を示すサイズ情報７０５に基づいて、書込データ７００から除去可能である。パディングデータは、例えば、書込データ７００を読み出した際にパディングデータを除去可能なように、パディングデータのデータ長を示す情報を含んでもよい。
【０１１０】
（書込データ７００を作成する一例）
次に、図８を用いて、情報記録装置１００が書込データ７００を作成する一例について説明する。
【０１１１】
図８は、書込データ７００を作成する一例を示す説明図である。図８では、情報記録装置１００が、書込データ７００の終端ビット７０６を反転しない場合を例に挙げて、先頭にヘッダ情報を含み、終端に対象データを含む書込データ７００を作成する一例について説明する。
【０１１２】
情報記録装置１００は、リングバッファ６０１のうち、書込データ７００を書き込む書込先領域８１０を特定する。図８の例では、情報記録装置１００は、書込データ７００を書き込む書込先領域８１０として、ブロック＃１〜＃３の３ブロック分の記憶領域を特定する。
【０１１３】
次に、情報記録装置１００は、書込先領域８１０上の先頭位置の値「１」を読み出す。そして、情報記録装置１００は、第１ビット７０１として、読み出した値「１」を反転した値「０」を生成する。第１ビット７０１は、書込データ７００の書き込みが開始されたか否かを判定するための情報である。また、情報記録装置１００は、第２ビット７０２として、書込先領域８１０の次ブロック＃４上の先頭位置の値「１」を読み出す。第２ビット７０２は、図１の第２情報１３２に対応する。第２ビット７０２は、次の書込データ７００の書き込みが開始されたか否かを判定するための情報である。
【０１１４】
また、情報記録装置１００は、第３ビット７０３として、書込先領域８１０上の終端位置の値「０」を読み出す。第３ビット７０３は、図１に示した第１情報１３１に対応する。第３ビット７０３は、書込データ７００の書き込みが完了したか否かを判定するための情報である。また、情報記録装置１００は、第３ビット７０３「０」と、書込データ７００の終端ビット７０６になる対象データの終端の値「１」とが一致しないため、対象データを変更せず、第４ビット７０４として値「０」を生成する。第４ビット７０４は、対象データの終端の値を変更した場合に、読み出した変更後の対象データから変更前の対象データを復元するための情報である。
【０１１５】
次に、情報記録装置１００は、第１ビット７０１と、第２ビット７０２と、第３ビット７０３と、第４ビット７０４とを、先頭から順に含む１［バイト］のヘッダ情報を生成する。ヘッダ情報の後ろ４［ビット］はダミーデータである。そして、情報記録装置１００は、先頭にヘッダ情報を含み、終端に対象データを含む書込データ７００を生成する。第４ビット７０４は、第３情報に対応する。
【０１１６】
また、情報記録装置１００は、先頭からヘッダ情報と、対象データとを含み、終端にパディングデータを含む書込データ７００を生成してもよい。この場合には、情報記録装置１００は、パディングデータの終端の値を変更する場合があるが、書込データ７００を読み出す際にはパディングデータは除去されるため、変更前のパディングデータを復元するために第４ビット７０４を生成しなくてもよい。
【０１１７】
（書込データ７００を作成する他の例）
次に、図９を用いて、情報記録装置１００が書込データ７００を作成する他の例について説明する。
【０１１８】
図９は、書込データ７００を作成する他の例を示す説明図である。図９では、情報記録装置１００が、書込データ７００の終端ビット７０６を反転する場合を例に挙げて、先頭にヘッダ情報を含み、終端に対象データを含む書込データ７００を作成する一例について説明する。
【０１１９】
情報記録装置１００は、リングバッファ６０１のうち、書込データ７００を書き込む書込先領域９１０を特定する。図９の例では、情報記録装置１００は、書込データ７００を書き込む書込先領域９１０として、ブロック＃１〜＃３の３ブロック分の記憶領域を特定する。
【０１２０】
次に、情報記録装置１００は、書込先領域９１０上の先頭位置の値「１」を読み出す。そして、情報記録装置１００は、第１ビット７０１として、読み出した値「１」を反転した値「０」を生成する。また、情報記録装置１００は、第２ビット７０２として、書込先領域９１０の次ブロック＃４上の先頭位置の値「１」を読み出す。
【０１２１】
また、情報記録装置１００は、第３ビット７０３として、書込先領域９１０上の終端位置の値「１」を読み出す。また、情報記録装置１００は、第３ビット７０３「１」と、対象データの終端ビット７０６「１」とが一致するため、対象データの終端ビット７０６「１」を反転した値「０」に変更し、第４ビット７０４として値「１」を生成する。
【０１２２】
次に、情報記録装置１００は、第１ビット７０１と、第２ビット７０２と、第３ビット７０３と、第４ビット７０４とを、先頭から順に含む１［バイト］のヘッダ情報を生成する。ヘッダ情報の後ろ４［ビット］はダミーデータである。そして、情報記録装置１００は、先頭にヘッダ情報を含み、終端に対象データを含む書込データ７００を生成する。
【０１２３】
また、情報記録装置１００は、先頭からヘッダ情報と、対象データとを含み、終端にパディングデータを含む書込データ７００を生成してもよい。この場合には、情報記録装置１００は、パディングデータの終端の値を変更する場合があるが、書込データ７００を読み出す際にはパディングデータは除去されるため、変更前のパディングデータを復元するために第４ビット７０４を生成しなくてもよい。
【０１２４】
（書込データ１０１０，１２１０を書き込む一例）
次に、図１０〜図１３を用いて、情報記録装置１００が書込データ１０１０，１２１０を書き込む一例について説明する。
【０１２５】
図１０〜図１３は、書込データ１０１０，１２１０を書き込む一例を示す説明図である。図１０において、情報記録装置１００は、記憶媒体に書き込む第１対象データを受け付けると、管理情報を参照して、書込開始位置を、図６に示したリングバッファ６０１の先頭ブロック＃１の先頭位置と特定する。
【０１２６】
次に、情報記録装置１００は、第１対象データのデータ長に基づいて、第１対象データを含む第１書込データ１０１０のデータ長として、３ブロック分のデータ長を特定する。情報記録装置１００は、第１書込データ１０１０を書き込む第１書込先領域１００１として、書込開始位置から３ブロック分の記憶領域＃１〜＃３を特定する。そして、情報記録装置１００は、第１対象データを含む、３ブロック分の第１書込データ１０１０を生成して、ブロック単位で第１書込データ１０１０を第１書込先領域１００１に書き込む。図１０の（Ａ）〜（Ｃ）の状態は、ブロック単位で第１書込データ１０１０を第１書込先領域１００１に書き込んだときのリングバッファ６０１の状態である。
【０１２７】
図１０の（Ａ）の状態は、情報記録装置１００が、３ブロック分の第１書込データ１０１０のうちの、第１書込先領域１００１の先頭ブロック＃１に書き込むデータを、第１書込先領域１００１の先頭ブロック＃１に書き込んだときの状態である。図１０の（Ａ）の状態は、第１書込データ１０１０の書き込みが完了する前の状態であって、第３ビットと第１書込先領域１００１の終端位置の値とが一致する状態である。
【０１２８】
図１０の（Ｂ）の状態は、情報記録装置１００が、第１書込データ１０１０のうちの、第１書込先領域１００１の先頭から２番目のブロック＃２に書き込むデータを、第１書込先領域１００１の先頭から２番目のブロック＃２に書き込んだときの状態である。図１０の（Ｂ）の状態は、第１書込データ１０１０の書き込みが完了する前の状態である。
【０１２９】
図１０の（Ｃ）の状態は、情報記録装置１００が、第１書込データ１０１０のうちの、第１書込先領域１００１の終端ブロック＃３に書き込むデータを、第１書込先領域１００１の終端ブロック＃３に書き込んだときの状態である。図１０の（Ｃ）の状態は、第１書込データ１０１０の書き込みが完了した後の状態である。また、図１０の（Ｃ）の状態は、第１書込データ１０１０の終端の値を第１書込先領域１００１の終端位置の値に上書きした結果として、第３ビットと第１書込先領域１００１の終端位置の値とが一致しなくなった状態である。
【０１３０】
ここで、情報記録装置１００は、第１書込データ１０１０の書き込みが完了すると、新たな書込データの書込開始位置を特定するための情報を、ＲＡＭ４０３に書き込む。情報記録装置１００は、例えば、第１書込データ１０１０を書き込んだ第１書込先領域１００１の先頭ブロック＃０、または終端ブロック＃３の情報をＲＡＭ４０３に書き込む。また、情報記録装置１００は、第１書込データ１０１０を書き込んだ第１書込先領域１００１の次ブロックであるリングバッファ６０１の先頭から４番目のブロック＃４の先頭位置の情報をＲＡＭ４０３に書き込んでもよい。
【０１３１】
これにより、情報記録装置１００は、第１書込データ１０１０の書き込みが完了する前の状態と、書き込みが完了した後の状態とにおいて、第３ビットと第１書込先領域１００１の終端位置の値とが一致するか否かの状態を変化させることができる。換言すれば、情報記録装置１００は、管理情報を更新しなくても、第３ビットと第１書込先領域１００１の終端位置の値とを比較することにより、第１書込データ１０１０の書き込みが完了したか否かを判定可能な状態にすることができる。
【０１３２】
また、情報記録装置１００は、リングバッファ６０１に初めてデータを書き込んだ場合には、管理情報を更新するようにしてもよい。これにより、情報記録装置１００は、管理情報が初期値から更新されていない場合には、リングバッファ６０１にデータが書き込まれていないと確定することができる。次に、図１１の説明に移行する。
【０１３３】
図１１において、情報記録装置１００は、リングバッファ６０１に初めてデータを書き込んだため、管理情報を更新する。情報記録装置１００は、例えば、管理情報のうち、初回書込ブロック情報を、第１書込先領域１００１の先頭ブロック＃１の識別情報に更新する。また、情報記録装置１００は、最終書込ブロック情報を、第１書込先領域１００１の先頭ブロック＃１の識別情報に更新する。次に、図１２の説明に移行する。
【０１３４】
図１２において、情報記録装置１００は、新たに第２対象データを受け付けると、ＲＡＭ４０３に書き込んだ新たな書込データの書込開始位置を特定するための情報を読み出す。情報記録装置１００は、読み出した新たな書込データの書込開始位置を特定するための情報に基づいて、書込開始位置をリングバッファ６０１の先頭から４番目のブロック＃４の先頭位置と特定する。
【０１３５】
次に、情報記録装置１００は、第２対象データのデータ長に基づいて、第２書込データ１２１０のデータ長として、２ブロック分のデータ長を特定する。情報記録装置１００は、第２書込データ１２１０を書き込む第２書込先領域１２０１として、書込開始位置から２ブロック分の記憶領域＃４，＃５を特定する。そして、情報記録装置１００は、第２対象データを含む、２ブロック分の第２書込データ１２１０を生成して、ブロック単位で第２書込データ１２１０を第２書込先領域１２０１に書き込む。図１２の（Ｄ）および（Ｅ）の状態は、ブロック単位で第２書込データ１２１０を第２書込先領域１２０１に書き込んだときのリングバッファ６０１の状態である。
【０１３６】
図１２の（Ｄ）の状態は、情報記録装置１００が、２ブロック分の第２書込データ１２１０のうちの、第２書込先領域１２０１の先頭ブロック＃４に書き込むデータを、第２書込先領域１２０１の先頭ブロックに書き込んだときの状態である。図１２の（Ｄ）の状態は、第２書込データ１２１０の書き込みが完了する前の状態であって、第３ビットと第２書込先領域１２０１の終端位置の値とが一致する状態である。また、図１２の（Ｄ）の状態は、第１ビットを第２書込先領域１２０１の先頭位置の値に上書きした結果として、第１書込データ１０１０の第２ビットと第２書込先領域１２０１の先頭位置の値とが一致しなくなった状態である。
【０１３７】
図１２の（Ｅ）の状態は、情報記録装置１００が、２ブロック分の第２書込データ１２１０のうちの、第２書込先領域１２０１の終端ブロック＃５に書き込むデータを、第２書込先領域１２０１の終端ブロック＃５に書き込んだときの状態である。図１２の（Ｅ）の状態は、第２書込データ１２１０の書き込みが完了した後の状態である。また、図１２の（Ｅ）の状態は、第２書込データ１２１０の終端の値を第２書込先領域１２０１の終端位置の値に上書きした結果として、第３ビットと第２書込先領域１２０１の終端位置の値とが一致しなくなった状態である。
【０１３８】
ここで、情報記録装置１００は、第２書込データ１２１０の書き込みが完了すると、新たな書込データの書込開始位置を特定するための情報を、ＲＡＭ４０３に書き込む。情報記録装置１００は、例えば、第２書込データ１２１０を書き込んだ第２書込先領域１２０１の先頭ブロック＃４、または終端ブロック＃５の情報をＲＡＭ４０３に書き込む。また、情報記録装置１００は、第２書込データ１２１０を書き込んだ第２書込先領域１２０１の次ブロックであるリングバッファ６０１の先頭から６番目のブロック＃６の先頭位置の情報をＲＡＭ４０３に書き込んでもよい。
【０１３９】
これにより、情報記録装置１００は、第２書込データ１２１０の書き込みが完了する前の状態と、書き込みが完了した後の状態とにおいて、第３ビットと第２書込先領域１２０１の終端位置の値とが一致するか否かの状態を変化させることができる。換言すれば、情報記録装置１００は、管理情報を更新しなくても、第３ビットと第２書込先領域１２０１の終端位置の値とを比較することにより、第２書込データ１２１０の書き込みが完了したか否かを判定可能な状態にすることができる。
【０１４０】
また、情報記録装置１００は、第２書込データ１２１０の書き込みが開始される前と、書き込みが開始された後とにおいて、第１書込データ１０１０の第２ビットと第２書込先領域１２０１の先頭位置の値とが一致するか否かの状態を変化させることができる。換言すれば、情報記録装置１００は、第１書込データ１０１０の第２ビットと第２書込先領域１２０１の先頭位置の値とを比較することにより、第２書込データ１２１０の書き込みが開始されたか否かを判定可能な状態にすることができる。
【０１４１】
以降、情報記録装置１００は、同様にして、リングバッファ６０１に順次書込データを書き込む。ここで、情報記録装置１００は、リングバッファ６０１のブロック＃Ｎ−２まで書込データを書き込んだとする。次に、図１３の説明に移行する。
【０１４２】
図１３において、情報記録装置１００は、リングバッファ６０１の最終ブロック＃Ｎ−１付近のブロック＃Ｎ−２まで書込データを書き込み、次の書込データがリングバッファ６０１の残りの未書込の記憶領域では書き込み切れない場合には、管理情報を更新する。そして、情報記録装置１００は、書込済の記憶領域６００のいくつかを未書込の記憶領域として設定して、未書込の記憶領域を増加させる。また、情報記録装置１００は、ガーベジコレクションを行って、未書込の記憶領域を増加させてもよい。図１３の（Ｆ）〜（Ｈ）の状態は、最終ブロック＃Ｎ−１付近まで書き込みが行われ、未書込の記憶領域を設定して未書込の記憶領域を増加させるときの管理情報の状態である。
【０１４３】
図１３の（Ｆ）の状態では、情報記録装置１００は、管理情報のうち、最終ブロック情報を、リングバッファ６０１のブロック＃Ｎ−２の識別情報に更新する。また、情報記録装置１００は、管理情報のうち、最終書込ブロック情報を、リングバッファ６０１のブロック＃Ｎ−２を含む書込先領域の先頭ブロック＃Ｎ−３の識別情報に更新する。
【０１４４】
図１３の（Ｇ）の状態では、情報記録装置１００は、新たな書込データがリングバッファ６０１の残りの未書込の記憶領域では書き込み切れないため、未書込の記憶領域を設定する。情報記録装置１００は、例えば、書込済のブロックのうち、リングバッファ６０１の前半部分にあるブロック＃１〜＃Ｍ−１を、未書込の記憶領域として設定する。Ｍは、１〜Ｎ−１の数である。そして、情報記録装置１００は、管理情報のうち、初回書込ブロック情報を、リングバッファ６０１の前半部分の次ブロック＃Ｍの識別情報に更新する。
【０１４５】
図１３の（Ｈ）の状態では、情報記録装置１００は、新たな書込データを書き込む際には、未書込の記憶領域に設定したリングバッファ６０１の先頭ブロック＃１の先頭位置から書き込む。情報記録装置１００は、例えば、２ブロック分の書込データを書き込む。そして、情報記録装置１００は、管理情報のうち、最終書込ブロック情報を、リングバッファ６０１の先頭ブロック＃１の識別情報に更新する。これにより、情報記録装置１００は、書込順序が早いブロックのいくつかを未書込の記憶領域にして、リングバッファ６０１の記憶領域を効率よく使用することができる。
【０１４６】
（電源供給の停止時に行う動作例）
次に、図１４を用いて、情報記録装置１００が電源供給の停止時に行う動作例について説明する。
【０１４７】
図１４は、電源供給の停止時に行う動作例を示す説明図である。図１４において、情報記録装置１００は、図１２の（Ｅ）の状態で、シャットダウンして電源供給を停止する要求を受け付けたとする。このとき、情報記録装置１００は、シャットダウンする前に、管理情報を更新する。情報記録装置１００は、例えば、管理情報のうち、最終書込ブロック情報を、第２書込先領域１２０１の先頭ブロックの識別情報に更新する。これにより、情報記録装置１００は、電源供給の停止状態から復旧したときに、管理情報に基づいて、データの書込終端の位置を、効率よく特定することができる。
【０１４８】
一方で、情報記録装置１００は、シャットダウンする前に管理情報を更新しない場合があってもよいし、事故・過失により管理情報を更新する前に電源供給が停止されてしまう場合があってもよい。事故・過失とは、例えば、停電、および、プログラムの不具合やユーザの操作入力による強制終了などである。これらの場合であっても、情報記録装置１００は、電源供給の停止状態から復旧したときに、リングバッファ６０１の各書込データの第１情報や第２情報に基づいて、データの書込終端の位置を特定することができる。
【０１４９】
（書込終端の位置を特定する一例）
次に、図１５〜図１８を用いて、情報記録装置１００が書込終端の位置を特定する一例について説明する。
【０１５０】
図１５〜図１８は、情報記録装置１００が書込終端の位置を特定する一例を示す説明図である。図１５の例は、図１０の（Ａ）の状態で、管理情報が更新されずに、電源供給が停止されたとした場合の例である。
【０１５１】
図１５において、情報記録装置１００は、電源供給の停止状態から復旧すると、管理情報を読み出す。情報記録装置１００は、管理情報のうち、初回書込ブロック情報が初期値であるため、リングバッファ６０１には書込データが書き込まれていないか、初回の書込データの書き込みに失敗したと判定する。このため、情報記録装置１００は、リングバッファ６０１に書込データの書き込みが完了した記憶領域は存在せず、データの書込終端は存在しないと判定する。図１５のように、情報記録装置１００は、初回の書込データの一部分の書き込みが成功し、残余部分の書き込みが失敗している場合に、誤って、初回の書込データの書き込みが完了していると判定することはない。これにより、情報記録装置１００は、新しい書込データを書き込む際には、リングバッファ６０１の先頭ブロック＃１の値にかかわらず、リングバッファ６０１の先頭ブロック＃１の先頭位置を書込開始位置に特定することができるようになる。そして、情報記録装置１００は、書込データが書き込まれていないか、初回の書込データの書き込みに失敗した記憶領域に、新しい書込データを書き込むことができる。次に、図１６の説明に移行する。
【０１５２】
図１６の例は、図１０の（Ｃ）の状態で、管理情報が更新されずに、電源供給が停止されたとした場合の例である。図１６において、情報記録装置１００は、電源供給の停止状態から復旧すると、管理情報を読み出す。情報記録装置１００は、管理情報のうち、初回書込ブロック情報がリングバッファ６０１の先頭ブロック＃１を示す情報であるため、リングバッファ６０１の先頭ブロック＃１から少なくとも一つの書込データが書き込まれていると判定する。
【０１５３】
次に、情報記録装置１００は、リングバッファ６０１の先頭ブロック＃１から第２ビットと、対象データのデータ長を示すサイズ情報とを抽出する。情報記録装置１００は、サイズ情報に基づいて、書込データが書き込まれた書込先領域として、リングバッファ６０１の先頭ブロックから３ブロック分の第１書込先領域１００１を特定する。そして、情報記録装置１００は、第２ビットと、第１書込先領域１００１の次ブロックである、リングバッファ６０１の先頭から４番目のブロック＃４の先頭位置の値とが一致するか否かを判定する。ここで、情報記録装置１００は、一致するため、第１書込先領域１００１の次ブロック＃４から先には書込データが書き込まれていないと判定する。
【０１５４】
このため、情報記録装置１００は、第１書込先領域１００１を書込データの書き込みに成功した最後の記憶領域であると判定し、第１書込先領域１００１の終端をデータの書込終端として特定する。次に、図１７の説明に移行する。
【０１５５】
図１７の例は、図１２の（Ｄ）の状態で、管理情報が更新されずに、電源供給が停止されたとした場合の例である。図１７において、情報記録装置１００は、電源供給の停止状態から復旧すると、管理情報を読み出す。情報記録装置１００は、管理情報のうち、初回書込ブロック情報がリングバッファ６０１の先頭ブロック＃１を示す情報であるため、リングバッファ６０１の先頭ブロック＃１から少なくとも一つの書込データが書き込まれていると判定する。
【０１５６】
次に、情報記録装置１００は、リングバッファ６０１の先頭ブロック＃１から第２ビットと、対象データのデータ長を示すサイズ情報とを抽出する。情報記録装置１００は、サイズ情報に基づいて、書込データが書き込まれた書込先領域として、リングバッファ６０１の先頭ブロックから３ブロック分の第１書込先領域１００１を特定する。そして、情報記録装置１００は、第２ビットと、第１書込先領域１００１の次ブロックである、リングバッファ６０１の先頭から４番目のブロック＃４の先頭位置の値とが一致するか否かを判定する。ここで、情報記録装置１００は、一致しないため、第１書込先領域１００１の次ブロックである、リングバッファ６０１の先頭から４番目のブロック＃４から先にも書込データが書き込まれていると判定する。
【０１５７】
次に、情報記録装置１００は、リングバッファ６０１の先頭から４番目のブロック＃４から第２ビットと、第３ビットと、対象データのデータ長を示すサイズ情報とを抽出する。情報記録装置１００は、サイズ情報に基づいて、書込データが書き込まれた書込先領域として、リングバッファ６０１の先頭から４番目のブロック＃４から２ブロック分の第２書込先領域１２０１を特定する。そして、情報記録装置１００は、第２ビットと、第２書込先領域１２０１の次ブロックである、リングバッファ６０１の先頭から６番目のブロック＃６の先頭位置の値とが一致するか否かを判定する。ここで、情報記録装置１００は、一致するため、第２書込先領域１２０１の次ブロックである、リングバッファ６０１の先頭から６番目のブロック＃６から先には書込データが書き込まれていないと判定する。
【０１５８】
次に、情報記録装置１００は、第３ビットと、第２書込先領域１２０１の終端位置の値とが一致するか否かを判定する。ここで、情報記録装置１００は、一致するため、第２書込先領域１２０１に対する書込データの書き込みは失敗しており、完了していないと判定する。このため、情報記録装置１００は、第１書込先領域１００１を書込データの書き込みに成功した最後の記憶領域であると判定し、第１書込先領域１００１の終端をデータの書込終端として特定する。次に、図１８の説明に移行する。
【０１５９】
図１８の例は、図１２の（Ｅ）の状態で、管理情報が更新されずに、電源供給が停止されたとした場合の例である。図１８において、情報記録装置１００は、電源供給の停止状態から復旧すると、管理情報を読み出す。情報記録装置１００は、管理情報のうち、初回書込ブロック情報がリングバッファ６０１の先頭ブロック＃１を示す情報であるため、リングバッファ６０１の先頭ブロック＃１から先には少なくとも一つの書込データが書き込まれていると判定する。
【０１６０】
次に、情報記録装置１００は、リングバッファ６０１の先頭ブロック＃１から第２ビットと、対象データのデータ長を示すサイズ情報とを抽出する。情報記録装置１００は、サイズ情報に基づいて、書込データが書き込まれた書込先領域として、リングバッファ６０１の先頭ブロックから３ブロック分の第１書込先領域１００１を特定する。そして、情報記録装置１００は、第２ビットと、第１書込先領域１００１の次ブロックである、リングバッファ６０１の先頭から４番目のブロック＃４の先頭位置の値とが一致するか否かを判定する。ここで、情報記録装置１００は、一致しないため、第１書込先領域１００１の次ブロックである、リングバッファ６０１の先頭から４番目のブロック＃４から先にも書込データが書き込まれていると判定する。
【０１６１】
次に、情報記録装置１００は、リングバッファ６０１の先頭から４番目のブロック＃４から第２ビットと、第３ビットと、対象データのデータ長を示すサイズ情報とを抽出する。情報記録装置１００は、サイズ情報に基づいて、書込データが書き込まれた書込先領域として、リングバッファ６０１の先頭から４番目のブロック＃４から２ブロック分の第２書込先領域１２０１を特定する。そして、情報記録装置１００は、第２ビットと、第２書込先領域１２０１の次ブロックである、リングバッファ６０１の先頭から６番目のブロック＃６の先頭位置の値とが一致するか否かを判定する。ここで、情報記録装置１００は、一致するため、第２書込先領域１２０１の次ブロックである、リングバッファ６０１の先頭から６番目のブロック＃６から先には書込データが書き込まれていないと判定する。
【０１６２】
次に、情報記録装置１００は、第３ビットと、第２書込先領域１２０１の終端位置の値とが一致するか否かを判定する。ここで、情報記録装置１００は、一致しないため、第２書込先領域１２０１に対する書込データの書き込みは失敗しておらず、完了していると判定する。このため、情報記録装置１００は、第２書込先領域１２０１を書込データの書き込みに成功した最後の記憶領域であると判定し、第２書込先領域１２０１の終端をデータの書込終端として特定する。図１６〜図１８のように、情報記録装置１００は、管理情報を更新しなくても、データの書込終端の位置を特定することができる。
【０１６３】
これにより、情報記録装置１００は、データの書込終端の次ブロックの先頭位置を、最新の書込開始位置として特定することができ、最新の書込開始位置から新しい書込データを書き込むことができる。また、情報記録装置１００は、誤って、書込データの書き込みが失敗した記憶領域を書込済の記憶領域と判定することはない。また、情報記録装置１００は、管理情報を更新しなくても、初回書込ブロック情報によって識別されるブロックから、リングバッファ６０１上のデータの書込終端の位置までを、書込済の記憶領域の範囲として特定することができる。そして、情報記録装置１００は、書込済の記憶領域の範囲に書き込まれた書込データを読み出すことができる。
【０１６４】
（書込処理手順の一例）
次に、図１９および図２０を用いて、書込処理手順の一例について説明する。
【０１６５】
図１９および図２０は、書込処理手順の一例を示すフローチャートである。図１９において、情報記録装置１００は、対象データのデータ長に基づいて、ヘッダ情報と対象データとを含む書込データのデータ長を特定して、書込データの雛形をＲＡＭ４０３上に生成する（ステップＳ１９０１）。例えば、書込データの雛形は、ヘッダ情報として、それぞれ、初期値が設定された第１ビットと、第２ビットと、第３ビットと、第４ビットとを含む。
【０１６６】
次に、情報記録装置１００は、書込データを書き込むリングバッファ上の書込先領域を特定する（ステップＳ１９０２）。そして、情報記録装置１００は、書込先領域の先頭ブロックのデータを読み出し、書込先領域の先頭ブロックの先頭位置の値を抽出する（ステップＳ１９０３）。次に、情報記録装置１００は、書込データの雛形の第１ビットを、初期値から、抽出した書込先領域の先頭位置の値を反転した値へと更新する（ステップＳ１９０４）。そして、情報記録装置１００は、書込先領域の終端ブロックのデータを読み出し、書込先領域の終端ブロックの終端位置の値を抽出する（ステップＳ１９０５）。
【０１６７】
次に、情報記録装置１００は、書込データの雛形の第３ビットを、初期値から、抽出した書込先領域の終端ブロックの終端位置の値へと更新する（ステップＳ１９０６）。そして、情報記録装置１００は、第３ビットと、書込データの雛形の終端の値とが一致するか否かを判定する（ステップＳ１９０７）。ここで、一致しない場合（ステップＳ１９０７：Ｎｏ）、情報記録装置１００は、書込データの雛形の第４ビットを、初期値から、書込データの雛形の終端の値を反転していないことを示す「０」へと更新して（ステップＳ１９０８）、ステップＳ１９１０の処理に移行する。
【０１６８】
一方で、一致する場合（ステップＳ１９０７：Ｙｅｓ）、情報記録装置１００は、書込データの雛形の終端の値を反転し、書込データの雛形の第４ビットを、初期値から、書込データの雛形の終端の値を反転したことを示す値「１」へと更新して（ステップＳ１９０９）、ステップＳ１９１０の処理に移行する。
【０１６９】
次に、情報記録装置１００は、書込先領域の次ブロックのデータを読み出し、書込先領域の次ブロックの先頭位置の値を抽出する（ステップＳ１９１０）。そして、情報記録装置１００は、書込データの雛形の第２ビットを、初期値から、抽出した書込先領域の次ブロックの先頭位置の値へと更新する（ステップＳ１９１１）。
【０１７０】
情報記録装置１００は、ステップＳ１９０１〜Ｓ１９１１の処理を終了すると、ＲＡＭ４０３上の書込データの雛形を、書込データとして確定する。これにより、情報記録装置１００は、ヘッダ情報と対象データとを含む書込データを生成することができる。次に、情報記録装置１００は、図２０のステップＳ２００１の処理に移行する。
【０１７１】
図２０において、情報記録装置１００は、ブロック単位で書込先領域に書込データを書き込む（ステップＳ２００１）。情報記録装置１００は、書込データを、書込先領域の先頭ブロックに書き込むデータと、書込先領域の２番目のブロックから終端ブロックの直前ブロックまでの中間ブロックに書き込むデータと、書込先領域の終端ブロックに書き込むデータとに分割してもよい。
【０１７２】
このとき、情報記録装置１００は、書込先領域の先頭ブロックに書き込むデータの書込先領域の先頭ブロックへの書き込みが完了してから、書込先領域の中間ブロックに書き込むデータの書込先領域の中間ブロックへの書き込みを開始するようにする。また、情報記録装置１００は、書込先領域の中間ブロックに書き込むデータの書込先領域の中間ブロックへの書き込みが完了してから、書込先領域の終端ブロックに書き込むデータの書込先領域の終端ブロックへの書き込みを開始するようにする。
【０１７３】
そして、情報記録装置１００は、リングバッファに初めて書込データを書き込んだ状態であるか否かを判定する（ステップＳ２００２）。ここで、初めて書込データを書き込んだ状態ではない場合（ステップＳ２００２：Ｎｏ）、情報記録装置１００は、リングバッファの先頭に戻って初めて書込データを書き込んだ状態であるか否かを判定する（ステップＳ２００３）。ここで、リングバッファの先頭に戻って初めて書込データを書き込んだ状態ではない場合（ステップＳ２００３：Ｎｏ）、情報記録装置１００は、書込処理を終了する。
【０１７４】
一方で、初めて書込データを書き込んだ状態である場合（ステップＳ２００２：Ｙｅｓ）、またはリングバッファの先頭に戻って初めて書込データを書き込んだ状態である場合（ステップＳ２００３：Ｙｅｓ）、情報記録装置１００は、管理情報を更新する（ステップＳ２００４）。そして、情報記録装置１００は、書込処理を終了する。これにより、情報記録装置１００は、ヘッダ情報を対象データとともに書込データとして書き込むことができる。
【０１７５】
（決定処理手順の一例）
次に、図２１および図２２を用いて、決定処理手順の一例について説明する。
【０１７６】
図２１および図２２は、決定処理手順の一例を示すフローチャートである。図２１において、情報記録装置１００は、電源供給を受けると、スーパーブロックから管理情報を読み出す（ステップＳ２１０１）。次に、情報記録装置１００は、読み出した管理情報に含まれる初回書込ブロック情報が初期値のままであるか否かを判定する（ステップＳ２１０２）。初期値とは、リングバッファに書込データが書き込まれていないことを示す値である。ここで、初期値である場合（ステップＳ２１０２：Ｙｅｓ）、情報記録装置１００は、データの書込終端は存在しないと決定する（ステップＳ２１０３）。そして、情報記録装置１００は、決定処理を終了する。
【０１７７】
一方で、初期値ではない場合（ステップＳ２１０２：Ｎｏ）、情報記録装置１００は、読み出した管理情報に含まれる最終書込ブロック情報が示すｘ番目のブロックのデータを読み出す（ステップＳ２１０４）。次に、情報記録装置１００は、読み出したｘ番目のブロックのデータに基づいて、先頭ブロックとしてｘ番目のブロックを含む書込先領域を第ｐ書込先領域として設定する（ステップＳ２１０５）。
【０１７８】
図２２において、情報記録装置１００は、第ｐ書込先領域の先頭ブロックの第２ビットを抽出する（ステップＳ２２０１）。次に、情報記録装置１００は、第ｐ書込先領域の次ブロックのデータを読み出し、第ｐ書込先領域の次ブロックの先頭位置の値を抽出する（ステップＳ２２０２）。そして、情報記録装置１００は、抽出した第２ビットと、抽出した第ｐ書込先領域の次ブロックの先頭位置の値とが一致するか否かを判定する（ステップＳ２２０３）。ここで、一致する場合（ステップＳ２２０３：Ｙｅｓ）、情報記録装置１００は、ステップＳ２２０８の処理に移行する。
【０１７９】
一方で、一致しない場合（ステップＳ２２０３：Ｎｏ）、情報記録装置１００は、第ｐ書込先領域の次ブロックのデータに基づいて、先頭ブロックとして第ｐ書込先領域の次ブロックを含む書込先領域を、第ｐ＋１書込先領域として設定する（ステップＳ２２０４）。
【０１８０】
次に、情報記録装置１００は、第ｐ＋１書込先領域の先頭ブロックの第３ビットを抽出する（ステップＳ２２０５）。そして、情報記録装置１００は、第ｐ＋１書込先領域の終端ブロックのデータを読み出して、第ｐ＋１書込先領域の終端ブロックの終端位置の値を抽出する（ステップＳ２２０６）。
【０１８１】
次に、情報記録装置１００は、抽出した第３ビットと、抽出した第ｐ＋１書込先領域の終端ブロックの終端位置の値とが一致するか否かを判定する（ステップＳ２２０７）。ここで、一致する場合（ステップＳ２２０７：Ｙｅｓ）、情報記録装置１００は、第ｐ書込先領域の終端ブロックを、データの書込終端の位置に決定し（ステップＳ２２０８）、決定処理を終了する。
【０１８２】
一方で、一致しない場合（ステップＳ２２０７：Ｎｏ）、情報記録装置１００は、第ｐ＋１書込先領域を、第ｐ書込先領域として設定して（ステップＳ２２０９）、ステップＳ２２０１の処理に戻る。これにより、情報記録装置１００は、データの書込終端の位置を決定することができる。結果として、情報記録装置１００は、新しい書込データの書き込みを行う際には、最新の書込開始位置としてデータの書込終端の位置の次ブロックの先頭位置を特定して、新しい書込データを書き込むことができる。また、情報記録装置１００は、リングバッファのうちの書込済の記憶領域の範囲を特定することができ、リングバッファのうちの書込済のブロックからデータを読み出すことができる。
【０１８３】
以上説明したように、情報記録装置１００によれば、記憶媒体に対象データを書き込む際に、第１情報と、第２情報と、対象データと、を含む第１ブロック数分の書込データを生成し、書込開始位置から書き込むことができる。これにより、情報記録装置１００は、今回の書込データの書き込みの成否によって書込先領域１１２の終端ブロック１１３の少なくともいずれかの値と一致するか否かの状態が変化する第１情報を、対象データ１２０とともに書き込むことができる。同様に、情報記録装置１００は、次回の書込データの書き込みが開始されたか否かによって次回の書込データの書込予定ブロック１１４の少なくともいずれかの値と一致するか否かの状態が変化する第２情報を、対象データ１２０とともに書き込むことができる。
【０１８４】
このため、情報記録装置１００は、管理情報を更新しなくても、第１情報と第２情報とに基づいて、今回の書込データの書き込みが完了したか否か、次回の書込データの書き込みが開始されたか否かを判定可能な状態にすることができる。したがって、情報記録装置１００は、リングバッファとは異なる記憶領域への管理情報の書き込みを行わなくても、データの書込終端の位置を特定することができるようになる。結果として、情報記録装置１００は、書込処理にかかる時間を低減することができる。
【０１８５】
また、情報記録装置１００によれば、第１情報として、終端ブロック上の第１位置の値を示す情報を用いることができる。そして、情報記録装置１００によれば、さらに、終端ブロック上の第１位置に書き込む値として、第１情報が示す値とは異なる値を示す第３情報を含む書込データを生成することができる。これにより、情報記録装置１００は、今回の書込データの書き込みが成功した場合には、書込先領域１１２の終端ブロック１１３の値が必ず変化するようにして、第１情報と終端ブロック１１３の値とが一致するか否かの状態が変化するのを確定させることができる。
【０１８６】
また、情報記録装置１００によれば、第２情報として、終端ブロックから第２ブロック数先のブロック上の第２位置の値を示す情報を用いることができる。そして、情報記録装置１００によれば、さらに、書込開始位置の直前ブロックから第２ブロック数先のブロック上の第２位置に書き込む値として、当該値とは異なる値を示す第４情報を含む書込データを生成することができる。これにより、情報記録装置１００は、次回の書込データの書き込みが開始された場合には、次回の書込データの書込予定ブロック１１４の値が必ず変化するようにすることができる。そして、情報記録装置１００は、第２情報と書込予定ブロック１１４の値とが一致するか否かの状態が変化するのを確定させることができる。
【０１８７】
また、情報記録装置１００によれば、終端ブロック上の第１位置の値と、対象データのうちの終端ブロック上の第１位置に書き込む値とが一致している場合には、対象データのうちの終端ブロック上の第１位置に書き込む値を異なる値に変更することができる。そして、情報記録装置１００によれば、さらに、対象データのうちの終端ブロック上の第１位置に書き込む値を変更したか否かを示す第５情報を含む書込データを生成することができる。これにより、情報記録装置１００は、対象データの値を第３情報として用いることができ、対象データの値を変更した場合には対象データを読み出した際に復元可能なように、対象データを変更したことを示す第５情報を書込データ内に保持することができる。
【０１８８】
また、情報記録装置１００によれば、書込開始位置の直前ブロックから第２ブロック数先のブロックに書き込む情報として、書込データに第１情報と第２情報とを含めることができる。これにより、情報記録装置１００は、前回の書込データがあれば、前回の書込データの第２情報に基づいて、今回の書込データのうちで書き込みの成功を担保することができる範囲のデータに第１情報と第２情報とを含むことができる。結果として、情報記録装置１００は、第１情報と第２情報とが書き込まれておらず、データの書込終端の位置を特定することができなくなることを防止することができる。
【０１８９】
また、情報記録装置１００によれば、第１ブロック数として対象データのデータ長に基づく数を設定することができる。これにより、情報記録装置１００は、対象データのデータ長より大きいデータ長で書込データを生成することができる。このため、対象データのデータ長は、可変長であってもよい。
【０１９０】
また、情報記録装置１００によれば、第２ブロック数として１を設定することができる。これにより、情報記録装置１００は、次回の書込処理において必ず書込データの書込先になる書込予定ブロックの値を、第２情報として用いることができる。
【０１９１】
また、情報記録装置１００によれば、書込データの書き込みが完了した場合に、書き込みが完了した記憶領域の終端位置として書込データの書込先領域の終端ブロックを示す情報を、記憶媒体とは異なる揮発性の記憶媒体に記録することができる。これにより、情報記録装置１００は、新たなデータの書込処理を行う都度、第１情報や第２情報を用いてデータの書込終端の位置を特定しなくてもよくなり、処理負荷を低減することができる。
【０１９２】
また、情報記録装置１００によれば、いずれかの書込データの書込開始位置の直前ブロックから第２ブロック数先のブロックが書込済のブロックであれば、いずれかの書込データの第１情報と第２情報とを読み出すことができる。そして、情報記録装置１００によれば、読み出した第１情報と第２情報とに基づいて、データの書込終端の位置を特定することができる。さらに、情報記録装置１００は、記憶媒体上の新たなデータを含む書込データの書込開始位置を決定することができる。これにより、情報記録装置１００は、管理情報が最新の状態に更新されていなくても、データの書込終端の位置を特定することができ、最新の書込開始位置を決定することができる。
【０１９３】
また、情報記録装置１００によれば、第１情報が示す値と、終端ブロックの値とに基づいて、終端ブロックが書込済のブロックであるか否かを判定することができる。また、情報記録装置１００によれば、第２情報が示す値と、終端ブロックから第２ブロック数先のブロックの値とに基づいて、終端ブロックから第２ブロック数先のブロックが書込済のブロックであるか否かを判定することができる。そして、情報記録装置１００によれば、終端ブロックから第２ブロック数先のブロックが書込済のブロックではないと判定し、終端ブロックが書込済のブロックであると判定する場合がある。この場合では、情報記録装置１００によれば、終端ブロックを、データの書込終端の位置に決定することができる。これにより、情報記録装置１００は、読出元の書込データの書き込みが完了しており、当該書込データの次の書込データの書き込みが開始されていないか失敗した場合であることを特定して、データの書込終端の位置を特定することができる。さらに、情報記録装置１００は、読出元の書込データの書込先領域の次ブロックの先頭位置を、新たなデータを含む書込データの書込開始位置に決定することができる。
【０１９４】
また、情報記録装置１００によれば、終端ブロックから第２ブロック数先のブロックが書込済のブロックではないと判定し、終端ブロックが書込済のブロックではないと判定する場合がある。この場合では、情報記録装置１００によれば、読出元の書込データの書込先領域の直前ブロックを、データの書込終端の位置に決定することができる。これにより、情報記録装置１００は、読出元の書込データの書き込みが失敗した場合であることを特定して、データの書込終端の位置を特定することができる。さらに、情報記録装置１００は、読出元の書込データの書込開始位置を、新たなデータを含む書込データの書込開始位置に決定することができる。
【０１９５】
また、情報記録装置１００によれば、電源供給の停止要求を受け付けた場合に、直前に書き込みが完了した書込データの書込先領域の終端ブロックを示す情報を、連続する記憶領域とは異なる他の記憶領域に記録することができる。これにより、情報記録装置１００は、次に電源を投入した際に、データの書込終端の位置を特定する処理負荷を低減することができる。
【０１９６】
また、情報記録装置１００によれば、電源供給の停止状態から復帰した際に、他の記憶領域に記録された情報が、書込開始位置の直前ブロックから第２ブロック数先のブロックが書込済のブロックであることを示しているか否かを判定することができる。そして、情報記録装置１００によれば、書込開始位置の直前ブロックから第２ブロック数先のブロックが書込済のブロックであることを示していれば、直前ブロックから第２ブロック数先のブロックまでに書き込まれた第１情報と第２情報とを読み出すことができる。これにより、情報記録装置１００は、いずれかの書込データであって、少なくとも第１情報と第２情報とが書き込まれたことが担保された書込データを読み出して、いずれかの書込データの第１情報と第２情報とを読み出すことができる。そして、情報記録装置１００は、いずれかの書込データの書き込みが完了しているか否か、いずれかの書込データの次の書込データの書き込みが開始されているか否かを判定して、データの書込終端の位置を特定することができる。さらに、情報記録装置１００は、新たな書込データの書込開始位置を特定することができる。
【０１９７】
また、情報記録装置１００によれば、記憶媒体に書き込まれた書込データを読み出すことができる。そして、情報記録装置１００によれば、書込データに含まれる第５情報がデータのうちの終端ブロック上の第１位置に書き込む値を変更したことを示す場合には、データのうちの終端ブロック上の第１位置から読み出した値を変更前の値に変更することができる。これにより、情報記録装置１００は、いずれかの書込データを読み出し、書込データに含まれる対象データを取得することができる。また、情報記録装置１００は、対象データの値が変更されている場合には、対象データを復元することができる。
【０１９８】
また、情報記録装置１００によれば、記憶媒体として、磁気ディスクを採用することができる。この場合には、情報記録装置１００は、リングバッファとは異なる記憶領域に管理情報を書き込まなくてもよく、連続する記憶領域であるリングバッファについて書き込みを行えばよくなるため、シークタイムを低減することができる。
【０１９９】
また、情報記録装置１００によれば、記憶媒体として、半導体メモリを採用することができる。この場合には、情報記録装置１００は、リングバッファとは異なる記憶領域に管理情報を書き込む回数を低減することができるため、半導体メモリの劣化を抑制することができる。
【０２００】
また、情報記録装置１００によれば、書込データを、直前ブロックから第２ブロック数先のブロックに書き込むデータを含む第１データと、終端ブロックに書き込むデータを含む第２データとに分割することができる。そして、情報記録装置１００によれば、第１データの書き込みが完了してから、第２データを書き込むことができる。これにより、情報記録装置１００は、記憶装置が記憶媒体に対して書込データの先頭から順に書き込まない場合があっても、第１情報と第２情報とに基づいて、今回の書込データの書き込みが完了したか否かを判定可能な状態にすることができる。また。情報記録装置１００は、次回の書込データの書き込みが開始されたか否かを判定可能な状態にすることができる。
【０２０１】
なお、本実施の形態で説明した情報記録方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本情報記録プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本情報記録プログラムは、インターネット等のネットワークを介して配布してもよい。
【０２０２】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０２０３】
（付記１）コンピュータに、
記憶領域に複数のブロック単位で構成される書込データを前記ブロック単位で記憶媒体に書き込む際に、前記書込データの終端ブロック内の第３情報に対応する値を示す第１情報と、前記書込データの次に書き込まれる書込データ内の第４情報に対応する値を示す第２情報を含む前記書込データを生成し、
生成した前記書込データを記憶媒体に書き込む処理を実行させることを特徴とする情報記録プログラム。
【０２０４】
（付記２）前記第１情報と前記第２情報は、前記書込データの先頭ブロック内に記憶することを特徴とする付記１に記載の情報記録プログラム。
【０２０５】
（付記３）前記第１情報は前記第３情報を反転した値を示し、前記第２情報は前記第４情報を反転した値を示すことを特徴とする付記１または２に記載の情報記録プログラム。
【０２０６】
（付記４）前記第１情報に格納した値と前記第３情報に格納した値が、変更したか否かを示す第５情報を含む前記書込データを生成する付記１に記載の情報記録プログラム。
【０２０７】
（付記５）コンピュータが、
記憶領域に複数のブロック単位で構成される書込データを前記ブロック単位で記憶媒体に書き込む際に、前記書込データの終端ブロック内の第３情報に対応する値を示す第１情報と、前記書込データの次に書き込まれる書込データ内の第４情報に対応する値を示す第２情報を含む前記書込データを生成し、
生成した前記書込データを記憶媒体に書き込む処理を実行することを特徴とする情報記録方法。
【０２０８】
（付記６）記憶領域に複数のブロック単位で構成される書込データを前記ブロック単位で記憶媒体に書き込む際に、前記書込データの終端ブロック内の第３情報に対応する値を示す第１情報と、前記書込データの次に書き込まれる書込データ内の第４情報に対応する値を示す第２情報を含む前記書込データを生成し、
生成した前記書込データを記憶媒体に書き込む処理を実行する制御部を有することを特徴とする情報記録装置。
【符号の説明】
【０２０９】
１００  情報記録装置
５０１  受付部
５０２  生成部
５０３  書込部
５０４  読出部
５０５  判定部
５０６  決定部
【図１】
2016122485.tif 000003
【図２】
2016122485.tif 000004
【図３】
2016122485.tif 000005
【図４】
2016122485.tif 000006
【図５】
2016122485.tif 000007
【図６】
2016122485.tif 000008
【図７】
2016122485.tif 000009
【図８】
2016122485.tif 000010
【図９】
2016122485.tif 000011
【図１０】
2016122485.tif 000012
【図１１】
2016122485.tif 000013
【図１２】
2016122485.tif 000014
【図１３】
2016122485.tif 000015
【図１４】
2016122485.tif 000016
【図１５】
2016122485.tif 000017
【図１６】
2016122485.tif 000018
【図１７】
2016122485.tif 000019
【図１８】
2016122485.tif 000020
【図１９】
2016122485.tif 000021
【図２０】
2016122485.tif 000022
【図２１】
2016122485.tif 000023
【図２２】
2016122485.tif 000024