JP2016122485A - 情報記録プログラム、情報記録方法、および情報記録装置 - Google Patents
情報記録プログラム、情報記録方法、および情報記録装置 Download PDFInfo
- Publication number
- JP2016122485A JP2016122485A JP2014260962A JP2014260962A JP2016122485A JP 2016122485 A JP2016122485 A JP 2016122485A JP 2014260962 A JP2014260962 A JP 2014260962A JP 2014260962 A JP2014260962 A JP 2014260962A JP 2016122485 A JP2016122485 A JP 2016122485A
- Authority
- JP
- Japan
- Prior art keywords
- information
- block
- data
- write
- information recording
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0611—Improving I/O performance in relation to response time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Signal Processing For Digital Recording And Reproducing (AREA)
Abstract
【課題】記憶媒体に対する書込回数を低減すること。
【解決手段】情報記録装置100は、記憶媒体に書き込む対象データ120を受け付ける。情報記録装置100は、第1情報131と、第2情報132と、対象データ120とを書き込み可能なブロックの数である第1ブロック数を特定する。情報記録装置100は、第1情報131として、記憶媒体上の書込開始位置111から第1ブロック数分の書込先領域112の終端ブロック113の値を示す情報を生成する。情報記録装置100は、第2情報132として、書込先領域112の終端ブロック113から第2ブロック数先のブロック114の値を示す情報を生成する。情報記録装置100は、第1情報131と、第2情報132と、対象データ120とを含む、第1ブロック数分の書込データ140を生成する。情報記録装置100は、記憶媒体上の書込開始位置111から、生成した書込データ140の書き込みを行う。
【選択図】図1
【解決手段】情報記録装置100は、記憶媒体に書き込む対象データ120を受け付ける。情報記録装置100は、第1情報131と、第2情報132と、対象データ120とを書き込み可能なブロックの数である第1ブロック数を特定する。情報記録装置100は、第1情報131として、記憶媒体上の書込開始位置111から第1ブロック数分の書込先領域112の終端ブロック113の値を示す情報を生成する。情報記録装置100は、第2情報132として、書込先領域112の終端ブロック113から第2ブロック数先のブロック114の値を示す情報を生成する。情報記録装置100は、第1情報131と、第2情報132と、対象データ120とを含む、第1ブロック数分の書込データ140を生成する。情報記録装置100は、記憶媒体上の書込開始位置111から、生成した書込データ140の書き込みを行う。
【選択図】図1
Description
本発明は、情報記録プログラム、情報記録方法、および情報記録装置に関する。
従来、HDD(Hard Disk Drive)やSSD(Solid State Drive)などの記憶領域の管理方式の一つとしてログ構造化方式がある。ログ構造化方式では、HDDやSSDなどの連続する記憶領域がリングバッファとして扱われ、リングバッファの先頭から順次データの書き込みが行われる。データの書込処理では、リングバッファの書込開始位置からブロック単位でデータが書き込まれるとともに、データの書込終端の位置を示す管理情報がリングバッファとは異なる記憶領域に書き込まれる。
関連する技術としては、例えば、記憶部の第1の記憶領域に書き込まれたデータのデータ量が設定データ量を超えると、第1の記憶領域に書き込まれたデータを最適化した最適化データを生成して第2の記憶領域に書き込むものがある。また、例えば、第1のセクタ領域に対応する冗長領域と、第2のセクタ領域に対応する冗長領域を並行して参照する技術がある。また、例えば、メモリの第1のブロック内の最初のフリー・バイトを決定する第1のポインタを主メモリ内に保持する技術がある。
しかしながら、上述した従来技術では、ログ構造化方式などの管理方式を適用した記憶領域へのデータの書込時に、データの書込コマンドとは別に、データの書込終端の位置を示す管理情報の書込コマンドが発生して、データの書込処理にかかる時間が増加する。
1つの側面では、本発明は、データの書込処理にかかる時間を低減することができる情報記録プログラム、情報記録方法、および情報記録装置を提供することを目的とする。
本発明の一側面によれば、記憶領域に複数のブロック単位で構成される書込データを前記ブロック単位で記憶媒体に書き込む際に、前記書込データの終端ブロック内の第3情報に対応する値を示す第1情報と、前記書込データの次に書き込まれる書込データ内の第4情報に対応する値を示す第2情報を含む前記書込データを生成し、生成した前記書込データを記憶媒体に書き込む情報記録プログラム、情報記録方法、および情報記録装置が提案される。
本発明の一態様によれば、データの書込処理にかかる時間を低減することができるという効果を奏する。
以下に、図面を参照して、本発明にかかる情報記録プログラム、情報記録方法、および情報記録装置の実施の形態を詳細に説明する。
(情報記録方法の一実施例)
まず、図1を用いて、実施の形態にかかる情報記録方法の一実施例について説明する。
まず、図1を用いて、実施の形態にかかる情報記録方法の一実施例について説明する。
図1は、実施の形態にかかる情報記録方法の一実施例を示す説明図である。図1において、情報記録装置100は、HDDやSSDなどの記憶装置を有するコンピュータである。HDDやSSDなどの記憶装置は、ブロック単位で記憶領域が分割された記憶媒体を有し、記憶媒体へのブロック単位でのデータの書き込みを制御する装置である。ブロックとは、一定のサイズの記憶領域である。ブロックとは、例えば、512[バイト]や4096[バイト]などの記憶領域である。図1の例では、1ブロックは、512[バイト]の記憶領域であるとする。また、記憶装置は、複数の書込コマンドを受信した場合には、受信した複数の書込コマンドを受信した順番に処理する。また、記憶装置は、記憶領域上のいずれのブロックからもデータを読み出すことができる。
情報記録装置100は、HDDやSSDなどの記憶装置を用いて、ファイルシステムやリレーショナルデータベースマネジメントシステムなどのシステムを実現し、1または複数のブロックへのログやファイルやディレクトリなどのデータの書込処理を行う。データのデータ長は書込処理を行う前に確定する。
情報記録装置100は、複数のブロックへのデータの書込処理を行う際には、複数のブロックのうちの前半のブロックに対してデータの一部分を書き込んだものの、後半のブロックに対してデータの残余部分を書き込むことができないことがある。このように、データの一部分の書き込みだけが成功することは、パーシャルライトと呼ばれることがある。情報記録装置100は、例えば、複数のブロックのうちの先頭のブロックに対する書き込みに成功した直後に、情報記録装置100に対する電源供給が停止されたために、2番目以降のブロックに対する書き込みに失敗することがある。
このため、情報記録装置100は、HDDやSSDなどの記憶装置が有する記憶媒体上の記憶領域の管理方式としてログ構造化方式を採用することがある。情報記録装置100は、例えば、HDDやSSDなどの記憶装置が有する記憶媒体上の連続する記憶領域をバッファとして扱い、連続する記憶領域のうちの先頭ブロックから順次1または複数のブロックを用いてデータの書き込みを行う。連続する記憶領域は、少なくとも論理的に連続する記憶領域である。連続する記憶領域は、物理的に連続する記憶領域でなくてもよい。バッファは、例えば、リングバッファ110である。リングバッファとは、先頭と終端とが論理的に接続された記憶領域である。バッファは、リングバッファでなくてもよい。
ここで、情報記録装置100が、データの書き込みが完了する都度、当該データの次データの書込処理を行う際の書込開始位置を特定可能なように、データの書込終端の位置を示す管理情報をリングバッファ110とは異なる記憶領域に書き込む場合が考えられる。データの書込終端とは、リングバッファ110上のデータの書き込みが完了した記憶領域の終端である。
しかしながら、この場合には、情報記録装置100は、書込処理として、リングバッファ110にデータの書き込みを行う書込コマンド以外に、リングバッファ110とは異なる記憶領域に管理情報の書き込みを行う書込コマンドを発行することになる。結果として、書込処理にかかる時間が増加してしまう。さらに、システムにおいて、データの書き込みを行う頻度が多いほど、管理情報の書き込みを行うことも多くなり、システムの性能劣化を招く。そこで、本実施の形態では、データの書込処理にかかる時間を低減することができる情報記録方法について説明する。
情報記録装置100は、実施の形態にかかる情報記録プログラムを実行して、実施の形態にかかる情報記録方法を実現する。情報記録装置100は、記憶媒体に書き込むデータ120を受け付けると、下記の(1)および(2)の書込処理を行って、記憶媒体にデータ120を書き込む。以下の説明では、受け付けたデータ120を「対象データ120」と表記する場合がある。対象データのデータ長は可変長である。対象データのデータ長は固定長であってもよい。
(1)情報記録装置100は、例えば、対象データ120を受け付けると、第1情報131と、第2情報132と、対象データ120とを含む、第1ブロック数分の書込データ140を、情報記録装置100のメモリ150上で生成する。書込データは、例えば、セグメントと呼ばれることがある。
第1ブロック数とは、正の数であって、少なくとも、第1情報131と、第2情報132と、対象データ120とを書き込み可能なブロックの数である。第1ブロック数とは、例えば、第1情報131が1[ビット]、第2情報132が1[ビット]、対象データ120が1500[バイト]である場合には、3ブロック分の1536[バイト]の記憶領域を用いれば書き込み可能であるため、「3」以上の数になる。第1ブロック数とは、対象データが固定長であれば、固定値であってもよい。
第1情報131とは、記憶媒体のリングバッファ110上の書込開始位置111から第1ブロック数分のブロックの終端ブロックの値を示す情報である。第1情報131とは、例えば、記憶媒体のリングバッファ110上の書込開始位置111から第1ブロック数分のブロックの終端ブロック上の第1位置の値を示す情報である。第1位置とは、例えば、ブロック上の終端位置である。書込開始位置111とは、いずれかの未書込のブロックの先頭位置である。書込開始位置111とは、例えば、書込データ140の先頭部分が書き込まれる位置である。第1ブロック数分のブロックとは、今回の書込処理において今回の書込データ140の書込先となる記憶領域である。以下の説明では、第1ブロック数分のブロックを「書込先領域」と表記する場合がある。図1の例では、第1情報131は、1[ビット]の値であるとする。
第2情報132とは、書込先領域の終端ブロックから第2ブロック数先のブロックの値を示す情報である。第2ブロック数とは、予め決定された正の数であって、第1ブロック数の下限以下の数である。第2ブロック数とは、例えば、第1ブロック数の下限が「1」である場合には、「1」になる。第2情報132とは、例えば、書込先領域の終端ブロックから第2ブロック数先のブロック上の第2位置の値である。第2位置とは、例えば、ブロック上の先頭位置である。書込先領域の終端ブロックから第2ブロック数先のブロックとは、次回の書込処理において次回の書込データの書込先になる予定の記憶領域のブロックである。以下の説明では、書込先領域の終端ブロックから第2ブロック数先のブロックを「書込予定ブロック」と表記する場合がある。図1の例では、第2情報132は、1[ビット]の値であるとする。
情報記録装置100は、具体的には、1500[バイト]の対象データ120を受け付けると、第1情報131と、第2情報132と、対象データ120とを書き込み可能なブロックの数「3」を特定する。次に、情報記録装置100は、第1情報131として、記憶媒体のリングバッファ110上の書込開始位置111から3ブロック分の記憶領域である書込先領域112の終端ブロック113上の終端位置の1[ビット]の値「1」を読み出す。また、情報記録装置100は、第2情報132として、書込先領域112の終端ブロック113から1ブロック先のブロックである書込予定ブロック114上の先頭位置の1[ビット]の値「1」を読み出す。
そして、情報記録装置100は、第1情報131と、第2情報132と、対象データ120とを含む、書込先領域112に書き込む書込データ140を生成する。ここで、情報記録装置100は、第1情報131と、第2情報132と、対象データ120とを合わせたデータ長が3ブロック分にならない場合には、さらにパディングデータを含む書込データ140を生成してもよい。パディングデータとは、書込データ140のデータ長を調整し、書込データ140のデータ長をブロックの倍数分にするためのデータである。図1の例では、第1情報131と、第2情報132とは、書込先領域112の先頭ブロックに書き込む書込データ140の先頭から512[バイト]目までのデータに含まれる。
これにより、情報記録装置100は、今回の書込データ140を書き込む前の状態における、今回の書込データ140の書込先領域112の終端ブロック113の値を、書込データ140内に第1情報131として保持しておくことができる。第1情報131は、今回の書込データ140を書き込んで書込先領域112の終端ブロック113の値が書き換えられると、書込先領域112の終端ブロック113の値と一致しなくなる。換言すれば、第1情報131は、書込先領域112の終端ブロック113の値と一致しない場合には、今回の書込データ140の書き込みが完了したことを担保することができる。
同様に、情報記録装置100は、次回の書込データを書き込む前の状態における、次回の書込データの書込予定ブロック114の値を、書込データ140内に第2情報132として保持しておくことができる。第2情報132は、次回の書込データを書き込んで書込予定ブロック114の値が書き換えられると、書込予定ブロック114の値と一致しなくなる。換言すれば、第2情報132は、書込予定ブロック114の値と一致しない場合には、次回の書込データの書き込みが開始され、次回の書込データの先頭から第2ブロック数分のデータの書き込みが完了したことを担保することができる。一方で、第2情報132は、次回の書込データ全体の書き込みが完了したことを担保しない。
(2)情報記録装置100は、記憶媒体のリングバッファ110上の書込開始位置111から、生成した書込データ140の書き込みを行う。ここで、情報記録装置100は、ブロック単位で書込データ140を分割し、分割した各データの書込コマンドを記憶装置に順次送信することにより、記憶装置にブロック単位で記憶媒体のリングバッファ110への書込データ140の書き込みを行わせる。情報記録装置100は、書込データ140の書込コマンドを記憶装置に送信することにより、記憶装置にブロック単位で記憶媒体のリングバッファ110上への書込データ140の書き込みを行わせてもよい。
情報記録装置100は、例えば、書込データ140の先頭から512[バイト]目までのデータの書込コマンドを記憶装置に送信し、記憶装置に書込先領域112の先頭ブロックへの書き込みを行わせる。情報記録装置100は、書込データ140の513[バイト]目から1024[バイト]目までのデータの書込コマンドを記憶装置に送信し、記憶装置に書込先領域112の2番目のブロックへの書き込みを行わせる。情報記録装置100は、書込データ140の1025[バイト]目から1536[バイト]目までのデータの書込コマンドを記憶装置に送信し、記憶装置に書込先領域112の終端ブロック113への書き込みを行わせる。
これにより、情報記録装置100は、今回の書込データ140の書き込みの成否によって書込先領域112の終端ブロック113の値と一致するか否かの状態が変化する第1情報131を、対象データ120とともに書き込むことができる。同様に、情報記録装置100は、次回の書込データの書き込みが開始されたか否かによって次回の書込データの書込予定ブロック114の値と一致するか否かの状態が変化する第2情報132を、対象データ120とともに書き込むことができる。
このため、情報記録装置100は、管理情報を更新しなくても、第1情報131と第2情報132とに基づいて、今回の書込データ140の書き込みが完了したか否か、次回の書込データの書き込みが開始されたか否かを判定可能な状態にすることができる。したがって、情報記録装置100は、リングバッファ110とは異なる記憶領域への管理情報の書き込みを行わなくても、データの書込終端の位置を特定することができるようになり、管理情報の書込コマンドを発行しなくてよくなる。
結果として、情報記録装置100は、書込処理にかかる時間を低減することができる。具体的には、情報記録装置100は、書込処理において、第1情報131や第2情報132の読み出しを行ってでも、管理情報の書き込みを行わないようにし、管理情報の書き込みにかかる時間を削減する。ここで、記憶媒体からの読み出しにかかる時間は記憶媒体への書き込みにかかる時間に比べて少ないという性質があるため、情報記録装置100は、書込処理にかかる時間を低減することができる。また、情報記録装置100は、1度読み出したデータをキャッシュメモリに保持しておき、第1情報131や第2情報132の読み出しにかかる時間を低減して、書込処理にかかる時間をさらに低減することができる。
ここでは、第1情報131と第2情報132とが、第1ブロック数分のブロックの先頭ブロックに書き込むデータとして、書込データ140に含まれる場合について説明したが、これに限らない。例えば、第1情報131と第2情報132とは、第1ブロック数分のブロックのi番目のブロックに書き込むデータとして、書込データ140に含まれてもよい。iは、2以上の自然数である。この場合には、書込データ140にパディングデータを追加することにより、書込データ140のデータ長がiブロック数分より大きくなるように調整する。この場合には、対象データ120は、書込データ140のうちの第1情報131と第2情報132とより前に含まれるデータと、第1情報131と第2情報132とより後ろに含まれるデータとに分割されてもよい。また、この場合には、第2情報132は、第1ブロック数分のブロックの終端ブロックからiブロック先のブロックの値を示す情報であってもよい。これにより、第2情報132は、書込予定ブロック114の値と一致しない場合には、次回の書込データの第1情報と第2情報とが書き込まれていることを担保することができる。
また、第1情報131と第2情報132とは、対象データ120のデータ長が必ずi−1ブロック数分より大きくなる場合に限って、第1ブロック数分のブロックのi番目のブロックに書き込むデータとして書込データ140に含まれるようにしてもよい。
また、情報記録装置100は、前回の書込データがあれば、前回の書込データに含まれる第2情報に基づいて、今回の書込データ140の先頭から第2ブロック数分のデータの書き込みが完了したことを担保することができる。このため、第1情報131と第2情報132とは、今回の書込データ140の先頭から第2ブロック数分のデータに含まれるようにしてもよい。これにより、情報記録装置100は、前回の書込データに含まれる第2情報に基づいて、今回の書込データ140の第1情報131と第2情報132との書き込みが完了していることを担保することができる。
また、ここでは、第1情報131が1[ビット]の値である場合について説明したが、これに限らない。例えば、第1情報131は、2[ビット]以上の値であってもよい。また、第1情報131は、位置が連続する値でなくてもよく、ブロック上の先頭位置の値と終端位置の値との組み合わせであってもよい。また、第2情報132が1[ビット]の値である場合について説明したが、これに限らない。例えば、第2情報132は、2[ビット]以上の値であってもよい。また、第2情報132は、連続する位置の値でなくてもよく、ブロック上の先頭位置の値と終端位置の値との組み合わせであってもよい。
また、ここでは、第1情報131が、書込先領域112の終端ブロック113の1[ビット]の値そのものである場合について説明したが、これに限らない。例えば、第1情報131は、書込先領域112の終端ブロック113の1[ビット]の値を反転した値であってもよいし、書込先領域112の終端ブロック113の複数[ビット]の値の和であってもよい。また、第2情報132が、次回の書込データの書込予定ブロック114の1[ビット]の値そのものである場合について説明したが、これに限らない。例えば、第2情報132は、次回の書込データの書込予定ブロック114の1[ビット]の値を反転した値であってもよいし、次回の書込データの書込予定ブロック114の複数[ビット]の値の和であってもよい。
また、ここでは、情報記録装置100が第1情報131を生成する場合について説明したが、これに限らない。例えば、情報記録装置100は、書込データ140が1ブロック分のデータである場合には、書込データ140の一部分だけ書き込みに失敗することはなく、書込データ140全体の書き込みが成功するか否かであるため、第1情報131の生成を省略してもよい。
また、ここでは、記憶装置が、複数の書込コマンドを受信した場合に、受信した複数の書込コマンドを、受信した順番に処理する場合について説明したが、これに限らない。例えば、記憶装置は、受信した複数の書込コマンドを、受信した順番とは異なる順番で処理してもよい。この場合には、情報記録装置100は、記憶装置における複数の書込コマンドの処理順番を制御する。まず、情報記録装置100は、例えば、書込先領域の先頭ブロックに書き込む、第1情報131と第2情報132とを含むデータの書込コマンドを記憶装置に送信し、記憶装置からの書き込みの完了を示す通知を待つ。次に、情報記録装置100は、書込先領域112の先頭ブロックの次ブロックから、終端ブロックの直前ブロックまでに書き込むデータの書込コマンドを記憶装置に送信し、書き込みの完了を示す通知を待つ。最後に、情報記録装置100は、書込先領域112の終端ブロックに書き込むデータの書込コマンドを記憶装置に送信する。
(コンピュータシステム200の一例)
次に、図2を用いて、図1に示した情報記録方法を適用した、コンピュータシステム200の一例について説明する。
次に、図2を用いて、図1に示した情報記録方法を適用した、コンピュータシステム200の一例について説明する。
図2は、コンピュータシステム200の一例を示す説明図である。図2において、コンピュータシステム200は、図1に示した情報記録装置100によって実現される。コンピュータシステム200は、ユーザランドで動作するリレーショナルデータベースマネジメントシステム210に、実施の形態にかかる情報記録プログラム201を適用したシステムである。例えば、リレーショナルデータベースマネジメントシステム210のうちの、データベースへのデータの追加や更新、削除などの操作内容を、トランザクションログとして書き込む書込ルーチン211に、情報記録プログラム201が適用される。書込ルーチン211は、カーネルで動作するOS(Operating System)220のデバイスコントローラ221を介して、記憶装置にトランザクションログの書き込みを行う。リレーショナルデータベースマネジメントシステム210は、例えば、トランザクションログとして、MySQL(登録商標)のbinlogやPostgreSQL(登録商標)のWAL(Write Ahead Logging)などを採用する。また、情報記録装置100は、ストレージアダプタによって接続された外部の記憶装置にリレーショナルデータベースマネジメントシステム210を作成してもよい。
(コンピュータシステム200の他の例)
次に、図3を用いて、図1に示した情報記録方法を適用した、コンピュータシステム200の他の例について説明する。
次に、図3を用いて、図1に示した情報記録方法を適用した、コンピュータシステム200の他の例について説明する。
図3は、コンピュータシステム200の他の例を示す説明図である。図3において、コンピュータシステム200は、図1に示した情報記録装置100によって実現される。コンピュータシステム200は、カーネルで動作するOS上のログ構造化ファイルシステム311に、実施の形態にかかる情報記録プログラム302を適用したシステムである。例えば、ログ構造化ファイルシステム311は、カーネルで動作するOS310上のデバイスコントローラ312を介して、ユーザプログラム301からのファイルの操作要求を受け付けて、記憶装置にファイルの書き込みを行う。ログ構造化ファイルシステム311は、例えば、LogFS(Log−structured File System)やNILFS2(New Implementation of a Log−structured File System 2)などである。また、情報記録装置100は、ストレージアダプタによって接続された外部の記憶装置にログ構造化ファイルシステムを作成してもよい。
ここでは、コンピュータシステム200において、情報記録装置100のユーザランドまたはカーネルに情報記録プログラムを適用して、図1に示した情報記録方法を実現する場合について説明したが、これに限らない。例えば、コンピュータシステム200において、HDDやSSDなどの記憶装置に、情報記録プログラムを適用して、図1に示した情報記録方法を実現してもよい。
(情報記録装置100のハードウェア)
次に、図4を用いて、図2および図3に示したコンピュータシステム200を実現する、情報記録装置100のハードウェアの一例について説明する。
次に、図4を用いて、図2および図3に示したコンピュータシステム200を実現する、情報記録装置100のハードウェアの一例について説明する。
図4は、情報記録装置100のハードウェアの一例を示すブロック図である。図4において、情報記録装置100は、CPU(Central Processing Unit)401と、ROM(Read Only Memory)402と、RAM(Random Access Memory)403と、を有する。また、情報記録装置100は、さらに、ディスクドライブ404と、ディスク405と、SSD406と、半導体メモリ407と、インターフェース(I/F:Interface)408と、を有する。
また、CPU401と、ROM402と、RAM403と、ディスクドライブ404と、SSD406と、I/F408とは、バス400によってそれぞれ接続されている。情報記録装置100は、例えば、サーバ、PC(Personal Computer)、ノートPC、タブレット型PC、スマートフォンなどである。
ここで、CPU401は、情報記録装置100の全体の制御を司る。ROM402は、ブートプログラム、本実施の形態にかかる情報記録プログラムなどの各種プログラムを記憶する。RAM403は、CPU401のワークエリアとして使用される。また、RAM403は、各種プログラムの実行により得られたデータなどの各種データを記憶する。
ディスクドライブ404は、CPU401の制御により、ディスク405に対するデータのリード/ライトを制御する。ディスク405は、ディスクドライブ404の制御により書き込まれたデータを記憶する。SSD406は、CPU401の制御により、半導体メモリ407に対するデータのリード/ライトを制御する。半導体メモリ407は、SSD406の制御により書き込まれたデータを記憶する。
I/F408は、通信回線を通じてネットワーク410に接続され、このネットワーク410を介して他の装置に接続される。ネットワーク410は、例えば、LAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどである。そして、I/F408は、ネットワーク410と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F408は、例えば、モデムやLANアダプタなどである。
情報記録装置100は、ディスク405、および半導体メモリ407のいずれか1つを有していなくてもよい。また、情報記録装置100は、光ディスク、ディスプレイ、キーボード、マウス、スキャナ、およびプリンタの少なくともいずれか1つを有してもよい。
(情報記録装置100の機能的構成例)
次に、図5を用いて、情報記録装置100の機能的構成例について説明する。
次に、図5を用いて、情報記録装置100の機能的構成例について説明する。
図5は、情報記録装置100の機能的構成例を示すブロック図である。情報記録装置100は、制御部となる機能として、受付部501と、生成部502と、書込部503と、読出部504と、判定部505と、決定部506とを有する。
情報処理装置100は、例えば、制御部によって、記憶領域に複数のブロック単位で構成される書込データをブロック単位で記憶媒体に書き込む際に、第1情報と、第2情報とを含む書込データを生成し、生成した書込データを記憶媒体に書き込む処理を行う。記憶領域は、例えば、RAM403である。
ここで、第1情報は、例えば、第3情報に対応する値を示す情報である。第3情報は、例えば、書込データの終端ブロック内の値である。第3情報は、第1情報を反転した値を示す情報であってもよい。これにより、情報処理装置100は、書込データを記憶媒体に書き込んだ後の記憶媒体の状態を、記憶媒体上の書込データ内の異なる位置に、第1情報と、第1情報が示す値と一致または反転した第3情報とが記憶された状態にすることができる。
第2情報は、第4情報に対応する値を示す情報である。第4情報は、書込データの次に書き込まれる書込データ内の値である。これにより、情報処理装置100は、書込データを記憶媒体に書き込んだ後の記憶媒体の状態を、記憶媒体上の書込データ内に第2情報が記憶され、記憶媒体上の次に書き込んだ書込データ内に第4情報が記憶された状態にすることができる。第1情報と第2情報とは、例えば、書込データの先頭ブロック内に記憶される。
情報処理装置100は、さらに、第5情報を含む書込データを生成してもよい。第5情報は、例えば、第1情報に格納した値と第3情報に格納した値が、変更したか否かを示す情報である。これにより、情報処理装置100は、書込データを記憶媒体に書き込んだ後の状態を、記憶媒体上の書込データ内の第1情報と第3情報との組み合わせが、元々の組み合わせから変更されたものであるか否かを判定可能な状態にすることができる。
情報記録装置100は、具体的には、制御部によって、第1動作と第2動作と第3動作とを行う。第1動作は、書込処理を行う動作である。第2動作は、データの書込終端の位置を特定する動作である。第3動作は、書込処理によって書き込まれた書込データを読み出す動作である。
〈第1動作〉
まず、第1動作について説明する。第1動作は、書込処理を行う動作である。第1動作は、受付部501と、生成部502と、書込部503とによって実現される。
まず、第1動作について説明する。第1動作は、書込処理を行う動作である。第1動作は、受付部501と、生成部502と、書込部503とによって実現される。
受付部501は、記憶媒体に書き込む対象データを受け付ける。記憶媒体とは、ブロック単位で記憶領域が分割され、ブロック単位でデータの書き込みが行われる媒体である。記憶媒体とは、連続する記憶領域がバッファとして扱われ、連続する記憶領域にブロック単位で順次データが書き込まれる媒体である。記憶媒体とは、例えば、図4に示したディスク405や半導体メモリ407である。バッファのデータ構造の一例については、図6を用いて後述する。対象データのデータ長は可変長である。対象データのデータ長は固定長であってもよい。受付部501は、例えば、1500[バイト]の対象データを受け付ける。
これにより、受付部501は、生成部502に対象データを出力し、対象データを含む書込データを生成させることができる。受付部501は、例えば、図4に示したROM402、RAM403、ディスク405、半導体メモリ407などの記憶装置に記憶されたプログラムをCPU401に実行させることにより、または、I/F408により、その機能を実現する。受け付けた対象データは、例えば、RAM403、ディスク405、半導体メモリ407などの記憶領域に記憶される。
生成部502は、記憶媒体に受付部501が受け付けた対象データを書き込む際に、第1情報と、第2情報と、対象データとを含む、第1ブロック数分の書込データを生成する。第1ブロック数とは、正の数であって、少なくとも、第1情報と、第2情報と、対象データとを書き込み可能なブロックの数である。
第1情報とは、記憶媒体上の書込開始位置から第1ブロック数分のブロックの終端ブロックの少なくともいずれかの値を示す情報である。第1情報とは、例えば、書込開始位置から第1ブロック数分のブロックの終端ブロック上の第1位置の値を示す情報である。第1位置とは、例えば、ブロック上の終端位置である。書込開始位置とは、いずれかの未書込のブロックの先頭位置である。書込開始位置とは、例えば、書込データの先頭部分が書き込まれる位置である。第1ブロック数分のブロックとは、今回の書込処理において今回の書込データの書込先となる記憶領域である。以下の説明では、第1ブロック数分のブロックを「書込先領域」と表記する場合がある。
第2情報とは、書込先領域の終端ブロックから第2ブロック数先のブロックの少なくともいずれかの値である。第2ブロック数とは、予め決定された正の数であって、第1ブロック数の下限以下の数である。第2情報とは、例えば、書込先領域の終端ブロックから第2ブロック数先のブロック上の第2位置の値である。第2位置とは、例えば、ブロック上の先頭位置である。書込先領域の終端ブロックから第2ブロック数先のブロックとは、次回の書込処理において次回の書込データの書込先になる予定の記憶領域のブロックである。以下の説明では、書込先領域の終端ブロックから第2ブロック数先のブロックを「書込予定ブロック」と表記する場合がある。
生成部502は、例えば、第1情報と第2情報とを含む1[バイト]のヘッダ情報と、1500[バイト]の対象データと、を書き込み可能なブロックの数「3」を特定する。次に、生成部502は、第1情報として、書込開始位置から3つ分のブロックの書込先領域の終端ブロック上の終端位置の1[ビット]の値を読み出す。また、生成部502は、第2情報として、書込先領域の終端ブロックから1ブロック先の書込予定ブロック上の先頭位置の1[ビット]の値を読み出す。そして、生成部502は、第1情報と第2情報とを含む1[バイト]のヘッダ情報と、1500[バイト]の対象データとを含む、3つ分のブロックに書き込む書込データを生成する。書込データのデータ構造の一例については、図7を用いて後述する。
これにより、生成部502は、今回の書込データを書き込む前の状態における、今回の書込データの書込先領域の終端ブロックの値を、第1情報として書込データ内に保持しておくことができる。そして、第1情報は、書込先領域の終端ブロックの値と一致しない場合には、今回の書込データの書き込みが完了したことを担保することができる。同様に、生成部502は、次回の書込データを書き込む前の状態における、次回の書込データの書込予定ブロックの値を、第2情報として書込データ内に保持しておくことができる。そして、第2情報は、書込予定ブロックの値と一致しない場合には、次回の書込データの書き込みが開始され、次回の書込データの先頭から第2ブロック数分のデータの書き込みが完了したことを担保することができる。
また、生成部502は、さらに、第3情報を含む書込データを生成してもよい。第3情報とは、書込先領域の終端ブロック上の第1位置に書き込む値として書込データに含まれる、第1情報が示す値とは異なる値を示す情報である。生成部502は、例えば、第3情報として、第1情報が示す値を反転した値を生成する。そして、生成部502は、第1情報と第2情報とを含むヘッダ情報と、対象データとを含み、書込先領域の終端ブロック上の終端位置に書き込む値として第3の情報を含む書込データを生成する。これにより、生成部502は、今回の書込データの書き込みが成功した場合には、書込先領域112の終端ブロック113の値が必ず変化するようにして、第1情報と終端ブロック113の値とが一致するか否かの状態が変化するのを確定させることができる。
また、生成部502は、さらに、第4情報を含む書込データを生成してもよい。第4情報とは、書込開始位置の直前ブロックから第2ブロック数先のブロック上の第2位置に書き込む値として書込データに含まれる、書込開始位置の直前ブロックから第2ブロック数先のブロック上の第2位置の値とは異なる値を示す情報である。以下の説明では、書込開始位置の直前ブロックを「直前ブロック」と表記する場合がある。生成部502は、例えば、第4情報として、直前ブロックから1ブロック先のブロックの先頭位置の値を反転した値を生成する。そして、生成部502は、第1情報と第2情報と第4情報とを含むヘッダ情報と、対象データとを含む書込データを生成する。これにより、生成部502は、次回の書込データの書き込みが開始された場合には、次回の書込データの書込予定ブロック114の値が必ず変化するようにすることができる。このため、生成部502は、次回の書込データの書き込みが開始された場合には、第2情報と書込予定ブロック114の値とが一致するか否かの状態が変化するのを確定させることができる。
また、生成部502は、対象データの値を第3情報として用いて、さらに、第5情報を含む書込データを生成してもよい。第5情報は、第3情報として用いるために対象データの値を変更したか否かを示す情報である。第5情報は、変更後の対象データの値を、変更前の値に復元するための情報である。第5情報は、例えば、対象データのいずれかの値を反転して第3情報として用いた場合には、反転したことを示す1[ビット]の情報である。第5情報は、例えば、変更前の値そのものであってもよい。生成部502は、例えば、書込先領域の終端ブロック上の第1位置の値と、対象データのうちの書込先領域の終端ブロック上の第1位置に書き込む値とが一致しているか否かを判定する。生成部502は、一致していない場合には、対象データのうちの書込先領域の終端ブロック上の第1位置に書き込む値をそのまま第3情報として用いることができるため、対象データを変更せず、対象データの値を変更していないことを示す第5情報を生成する。そして、生成部502は、第1情報と第2情報と第5情報とを含むヘッダ情報と、変更していない対象データとを含む書込データを生成する。
一方で、生成部502は、一致している場合には、対象データのうちの書込先領域の終端ブロック上の第1位置に書き込む値をそのままでは第3情報として用いることができないため、当該値を異なる値に変更する。さらに、生成部502は、対象データの値を変更したことを示す第5情報を生成する。そして、生成部502は、第1情報と第2情報と第5情報とを含むヘッダ情報と、書込先領域の終端ブロック上の第1位置に書き込む値を異なる値に変更した対象データとを含む書込データを生成する。これにより、生成部502は、対象データの値を第3情報として用いることができ、対象データの値を変更した場合には対象データを読み出した際に復元可能なように、対象データを変更したことを示す第5情報を書込データ内に保持することができる。
また、生成部502は、直前ブロックから第2ブロック数先のブロックに書き込む情報として、第1情報と第2情報とを含む書込データを生成してもよい。生成部502は、例えば、第1情報と第2情報とを含むヘッダ情報を生成し、直前ブロックから第2ブロック数先のブロックに書き込む情報としてヘッダ情報を含む書込データを生成する。これにより、生成部502は、前回の書込データがあれば、前回の書込データの第2情報に基づいて、今回の書込データのうちで書き込みの成功を担保することができる範囲のデータに第1情報と第2情報とを含むことができる。結果として、生成部502は、第1情報と第2情報とが書き込まれておらず、データの書込終端の位置を特定することができなくなることを防止することができる。
また、生成部502は、第2ブロック数として「1」を設定してもよい。換言すれば、生成部502は、直前ブロックから1ブロック先のブロックに書き込む情報として、第1情報と第2情報とを含む書込データを生成する。生成部502は、例えば、第1情報と第2情報とを含むヘッダ情報を生成し、書込開始位置から第1ブロック数分のブロックの先頭ブロックに書き込む情報としてヘッダ情報を含む書込データを生成する。これにより、生成部502は、前回の書込データがあれば、前回の書込データの第2情報に基づいて、今回の書込データのうちで書き込みの成功を担保することができる範囲のデータに第1情報と第2情報とを含むことができる。
生成部502は、例えば、図4に示したROM402、RAM403、ディスク405、半導体メモリ407などの記憶装置に記憶されたプログラムをCPU401に実行させることにより、その機能を実現する。生成された書込データは、例えば、RAM403、ディスク405、半導体メモリ407などの記憶領域に記憶される。
書込部503は、生成部502が生成した書込データを書込開始位置から書き込む。書込部503は、例えば、書込データを、直前ブロックから第2ブロック数先のブロックに書き込むデータを含む第1データと、書込先領域の終端ブロックに書き込むデータを含む第2データとに分割する。書込部503は、第1データの書き込みが完了してから、第2データを書き込む。これにより、書込部503は、記憶装置が記憶媒体に対して書込データの先頭から順に書き込まない場合があっても、第1情報と第2情報とに基づいて、今回の書込データの書き込みが完了したか否かを判定可能な状態にすることができる。また、書込部503は、記憶装置が記憶媒体に対して書込データの先頭から順に書き込まない場合があっても、次回の書込データの書き込みが開始されたか否かを判定可能な状態にすることができる。
書込部503は、書込データの書き込みが完了した場合に、連続する記憶領域のうちの書き込みが完了した記憶領域の終端位置を示す情報を、記憶媒体とは異なる揮発性の記憶媒体に記録する。連続する記憶領域のうちの書き込みが完了した記憶領域の終端位置とは、データの書込終端の位置である。これにより、書込部503は、第1情報や第2情報を用いてデータの書込終端の位置を特定しなくてもよくなるようにして、処理負荷を低減することができる。
書込部503は、電源供給の停止要求を受け付けた場合に、直前に書き込みが完了した記憶領域の終端位置を示す情報を、連続する記憶領域とは異なる他の記憶領域に記録する。直前に書き込みが完了した記憶領域の終端位置とは、データの書込終端の位置である。これにより、書込部503は、次に電源を投入した際に、第1情報や第2情報を用いてデータの書込終端の位置を特定しなくてもよくなるようにして、処理負荷を低減することができる。
書込部503は、例えば、図4に示したROM402、RAM403、ディスク405、半導体メモリ407などの記憶装置に記憶されたプログラムをCPU401に実行させることにより、その機能を実現する。
〈第2動作〉
次に、第2動作について説明する。第2動作は、データの書込終端の位置を特定する動作である。第2動作は、受付部501と、読出部504と、判定部505と、決定部506とによって実現される。
次に、第2動作について説明する。第2動作は、データの書込終端の位置を特定する動作である。第2動作は、受付部501と、読出部504と、判定部505と、決定部506とによって実現される。
読出部504は、第1情報と第2情報とを読み出す。読出部504は、例えば、いずれかの書込データの書込開始位置の直前ブロックから第2ブロック数先のブロックが書込済のブロックであれば、いずれかの書込データとして書き込まれた第1情報と第2情報とを読み出す。
読出部504は、具体的には、電源供給の停止状態から復帰した際に、他の記憶領域に記録された情報を読み出す。読出部504は、読み出した情報が、いずれかの書込データの書込開始位置の直前ブロックから第2ブロック数先のブロックが書込済のブロックであることを示していれば、いずれかの書込データとして書き込まれた第1情報と第2情報とを読み出す。これにより、読出部504は、データの書込終端の位置を特定するための情報を読み出すことができる。
また、読出部504は、判定部505が、後述するように、いずれかの書込データの次の書込データの書き込みが開始されたと判定した場合には、次の書込データとして書き込まれた第1情報と第2情報とを読み出すことになる。これにより、読出部504は、データの書込終端の位置を特定するための情報を読み出すことができる。以下の説明では、第1情報と第2情報とが読み出された書込データを「読出元の書込データ」と表記する場合がある。
読出部504は、例えば、図4に示したROM402、RAM403、ディスク405、半導体メモリ407などの記憶装置に記憶されたプログラムをCPU401に実行させることにより、その機能を実現する。読み出されたデータは、例えば、RAM403、ディスク405、半導体メモリ407などの記憶領域に記憶される。
判定部505は、第1情報が示す値に基づいて、書込先領域の終端ブロックが書込済のブロックであるか否かを判定する。判定部505は、例えば、読出元の書込データの書込先領域の終端ブロックの値が、第3情報を書き込まれる前の状態であるために、第1情報が示す値と一致する状態であるのかを判定する。また、判定部505は、読出元の書込データの書込先領域の終端ブロックの値が、第3情報を書き込まれた後の状態であるために、第1情報が示す値と一致しない状態であるのかを判定する。ここで、判定部505は、一致すると判定した場合には、読出元の書込データの書込先領域の終端ブロックが書込済のブロックではないと判定する。一方で、判定部505は、一致しないと判定した場合には、読出元の書込データの書込先領域の終端ブロックが書込済のブロックであると判定する。これにより、判定部505は、読出元の書込データの書き込みが完了したか否かを判定することができる。
判定部505は、第2情報が示す値に基づいて、読出元の書込データの次の書込データの書込予定ブロックが書込済のブロックであるか否かを判定する。判定部505は、例えば、書込予定ブロックの値が、第4情報が書き込まれる前の状態であるため第2情報が示す値と一致する状態であるのか、第4情報が書き込まれた後の状態であるため第2情報が示す値と一致しない状態であるのか、を判定する。ここで、判定部505は、一致すると判定した場合には、書込予定ブロックが書込済のブロックではないと判定する。一方で、判定部505は、一致しないと判定した場合には、書込予定ブロックが書込済のブロックであると判定する。これにより、判定部505は、読出元の書込データの次の書込データの書き込みが開始されたか否かを判定することができる。
判定部505は、例えば、図4に示したROM402、RAM403、ディスク405、半導体メモリ407などの記憶装置に記憶されたプログラムをCPU401に実行させることにより、その機能を実現する。判定結果は、例えば、RAM403、ディスク405、半導体メモリ407などの記憶領域に記憶される。
決定部506は、読み出した第1情報と第2情報とに基づいて、連続する記憶領域のうちのデータの書込終端の位置を決定する。データの書込終端とは、例えば、書込データの書き込みが完了した記憶領域の終端ブロックである。例えば、判定部505が、書込予定ブロックが書込済のブロックではないと判定し、かつ、書込先領域の終端ブロックが書込済のブロックであると判定した場合がある。この場合には、決定部506は、書込先領域の終端ブロックを、データの書込終端の位置に決定する。これにより、決定部506は、読出元の書込データの次の書込データの書き込みが完了しており、当該書込データの次の書込データの書き込みが開始されていないか失敗した場合であることを特定して、データの書込終端の位置を決定することができる。そして、決定部506は、データの書込終端の位置に基づいて、書込データが書込済の記憶領域の範囲を特定して、書込データを読み出すことができる。
一方で、例えば、判定部505が、書込予定ブロックが書込済のブロックではないと判定し、かつ、書込先領域の終端ブロックが書込済のブロックではないと判定した場合がある。この場合には、決定部506は、書込先領域の直前ブロックを、データの書込終端の位置に決定する。これにより、決定部506は、読出元の書込データの次の書込データの書き込みが失敗した場合であることを特定して、データの書込終端の位置を決定することができる。そして、決定部506は、データの書込終端の位置に基づいて、書込データが書込済の記憶領域の範囲を特定して、書込データを読み出すことができる。
また、決定部506は、読み出した第1情報と第2情報とに基づいて、記憶媒体上の新たなデータを含む書込データの書込開始位置を決定してもよい。例えば、判定部505が、書込予定ブロックが書込済のブロックではないと判定し、かつ、書込先領域の終端ブロックが書込済のブロックであると判定した場合がある。この場合には、決定部506は、書込先領域の終端ブロックの次ブロックの先頭位置を、新たな書込データの書込開始位置に決定する。これにより、決定部506は、読出元の書込データの次の書込データの書き込みが完了しており、当該書込データの次の書込データの書き込みが開始されていないか失敗した場合であることを特定して、最新の書込開始位置を決定することができる。
一方で、例えば、判定部505が、書込予定ブロックが書込済のブロックではないと判定し、かつ、書込先領域の終端ブロックが書込済のブロックではないと判定した場合がある。この場合には、決定部506は、読出元の書込データの次の書込データの書込開始位置を、新たなデータを含む書込データの書込開始位置に決定する。これにより、決定部506は、読出元の書込データの次の書込データの書き込みが失敗した場合であることを特定して、最新の書込開始位置を決定することができる。
決定部506は、例えば、図4に示したROM402、RAM403、ディスク405、半導体メモリ407などの記憶装置に記憶されたプログラムをCPU401に実行させることにより、その機能を実現する。
〈第3動作〉
次に、第3動作について説明する。第3動作は、書込処理によって書き込まれた書込データを読み出す動作である。第3動作は、受付部501と、読出部504によって実現される。
次に、第3動作について説明する。第3動作は、書込処理によって書き込まれた書込データを読み出す動作である。第3動作は、受付部501と、読出部504によって実現される。
受付部501は、対象データの読出要求を受け付ける。受付部501は、例えば、書込データに含まれる対象データの読出要求を受け付ける。これにより、受付部501は、読出部504に、対象データの読み出しを行わせることができる。
読出部504は、受付部501が読出要求を受け付けると、記憶媒体に書き込まれた書込データを読み出す。読出部504は、例えば、リングバッファのうち、決定部506が決定したデータの書込終端の位置までに書き込まれた書込データを読み出す。
次に、読出部504は、書込データに含まれる第5情報を抽出し、書込データに含まれる対象データを抽出する。ここで、読出部504は、第5情報が、対象データのうちの書込先領域の終端ブロック上の第1位置に書き込む値を変更したことを示す場合には、対象データのうちの書込先領域の終端ブロック上の第1位置から読み出した値を反転し、変更前の値を復元する。一方で、読出部504は、第5情報が、対象データのうちの書込先領域の終端ブロック上の第1位置に書き込む値を変更していないことを示す場合には、対象データを変更しない。これにより、読出部504は、いずれかの書込データを読み出し、書込データに含まれる対象データを取得することができる。また、読出部504は、対象データの値が変更されていても、対象データを復元することができる。
(記憶媒体上の記憶領域600のデータ構造の一例)
次に、図6を用いて、図4に示したディスク405、または半導体メモリ407などの記憶媒体の記憶領域600のデータ構造の一例について説明する。
次に、図6を用いて、図4に示したディスク405、または半導体メモリ407などの記憶媒体の記憶領域600のデータ構造の一例について説明する。
図6は、記憶媒体上の記憶領域600のデータ構造の一例を示す説明図である。記憶媒体上の記憶領域600は、バッファ601として扱われる連続する記憶領域と、スーパーブロック602とを含む。記憶領域600は、Nブロックを有する。以下の説明では、記憶領域600の先頭のブロックから順に、ブロック#0、ブロック#1、・・・、ブロック#N−1と表記する場合がある。
バッファ601は、論理的に連続する記憶領域である。バッファ601は、例えば、ブロック#1からブロック#N−1までの記憶領域である。バッファ601は、例えば、ラップアラウンド方式を適用し、終端ブロックの次ブロックが先頭ブロックになるように設定された記憶領域であってもよい。ラップアラウンド方式を適用したバッファ601は、例えば、リングバッファと呼ばれることがある。
スーパーブロック602は、バッファ601に関する情報であって、バッファ601上のデータの書込終端の位置情報を含み、新たな書込データの書込処理を行う際の書込開始位置を特定可能にする情報が記憶される記憶領域である。スーパーブロック602は、例えば、ブロック#0である。スーパーブロック602は、例えば、管理情報が記憶される記憶領域である。
管理情報は、ブロック数情報と、先頭ブロック情報と、最終ブロック情報と、初回書込ブロック情報と、最終書込ブロック情報とを含む。ブロック数情報は、バッファ601が有するブロックの数を示す情報である。ブロック数情報は、例えば、ブロックの数「N」である。
先頭ブロック情報は、バッファ601の先頭ブロックの識別情報である。先頭ブロック情報は、バッファ601の先頭ブロックに割り振られたブロック番号である。先頭ブロック情報は、例えば、ブロック#1の識別情報「1」である。最終ブロック情報は、バッファ601の書込済のブロックのうち、位置が最後である最終ブロックの識別情報である。最終ブロック情報は、バッファ601の書込済ブロックのうち、最終ブロックに割り振られたブロック番号である。最終ブロック情報は、例えば、バッファ601への書込が行われる前には、初期値「0」である。
初回書込ブロック情報は、バッファ601の書込済ブロックのうち、書込順序が最初である書込データの先頭部分を書き込んだ初回書込ブロックの識別情報である。初回書込ブロック情報は、バッファ601の初回書込ブロックに割り振られたブロック番号である。初回書込ブロック情報は、例えば、バッファ601への書込が行われる前には、初期値「0」である。最終書込ブロック情報は、バッファ601の書込済ブロックのうち、書込順序が最後である書込データの先頭部分を書き込んだ最終書込ブロックの識別情報である。最終書込ブロック情報は、バッファ601の最終書込ブロックに割り振られたブロック番号である。最終書込ブロック情報は、例えば、バッファ601への書込が行われる前には、初期値「0」である。
ここで、ラップアラウンド方式を適用しない場合の記憶媒体の記憶領域600のデータ構造の具体例について説明する。この場合には、先頭ブロック情報が示す先頭ブロックから順次データが書き込まれてもよいし、いずれかのブロックから順次データが書き込まれてもよい。情報記録装置100は、例えば、初めていずれかのブロックにデータを書き込むと、初回書込ブロック情報として、いずれかのブロックの識別情報を設定する。情報記録装置100は、書込データを書き込む都度、最終ブロック情報として位置が最後である書込データの終端部分を書き込んだ最終ブロックの識別情報を設定する。また、情報記録装置100は、書込データを書き込む都度、最終書込ブロック情報として書込順序が最後である書込データの先頭部分を書き込んだ最終書込ブロックの識別情報を設定する。図6の例では、先頭ブロック情報として、ブロック611の識別情報が設定される。また、最終ブロック情報として、ブロック612の識別情報が設定される。また、初回書込ブロック情報として、ブロック611の識別情報が設定される。また、最終書込ブロック情報として、ブロック613の識別情報が設定される。
これにより、情報記録装置100は、バッファ601のうち、書込済の記憶領域の範囲を特定し、データ終端の位置を特定することができるようになる。情報記録装置100は、例えば、初回書込ブロック情報によって識別されるブロックが書込済のブロックの先頭ブロックであると特定することができる。また、情報記録装置100は、最終ブロック情報によって識別されるブロックが書込済の記憶領域の終端ブロックであると特定することができる。換言すれば、情報記録装置100は、初回書込ブロック情報によって識別されるブロックから、最終ブロック情報によって識別されるブロックまでを、書込済の記憶領域の範囲として特定することができる。情報記録装置100は、特定した書込済の記憶領域の範囲に書き込まれた書込データを読み出すことができる。
また、ラップアラウンド方式を適用した場合の記憶媒体の記憶領域600のデータ構造の具体例について説明する。この場合には、先頭ブロック情報が示す先頭ブロックから順次データが書き込まれてもよいし、いずれかのブロックから順次データが書き込まれてもよい。情報記録装置100は、いずれかのブロックにデータを書き込むと、初回書込ブロック情報として、いずれかのブロックの識別情報を設定する。情報記録装置100は、書込データを書き込む都度、最終ブロック情報として位置が最後である書込データの終端部分を書き込んだ最終ブロックの識別情報を設定する。また、情報記録装置100は、書込データを書き込む都度、最終書込ブロック情報として書込順序が最後である書込データの先頭部分を書き込んだ最終書込ブロックの識別情報を設定する。図6の例では、先頭ブロック情報として、ブロック621の識別情報が設定される。また、最終ブロック情報として、ブロック622の識別情報が設定される。また、初回書込ブロック情報として、ブロック624の識別情報が設定される。また、最終書込ブロック情報として、ブロック623の識別情報が設定される。
これにより、情報記録装置100は、バッファ601のうち、書込済の記憶領域の範囲を特定し、データ終端の位置を特定することができるようになる。情報記録装置100は、例えば、初回書込ブロック情報によって識別されるブロックが書込済のブロックの先頭ブロックであると特定することができる。また、情報記録装置100は、最終書込ブロック情報によって識別されるブロックが先頭ブロックになる書込先領域の終端ブロックが、書込済の記憶領域の終端ブロックであると特定することができる。換言すれば、情報記録装置100は、初回書込ブロック情報によって識別されるブロックから、最終書込ブロック情報によって識別されるブロックが先頭ブロックになる書込先領域の終端ブロックまでを、書込済の記憶領域の範囲として特定することができる。また、初回書込ブロック情報によって識別されるブロックが、最終書込ブロック情報によって識別されるブロックよりも後ろにある場合がある。この場合には、情報記録装置100は、書込済の記憶領域の範囲が、最終ブロック情報によって識別されるブロックから先頭ブロック情報によって識別されるブロックに戻るように論理的に連続する記憶領域の範囲であると特定することができる。情報記録装置100は、特定した書込済の記憶領域の範囲に書き込まれた書込データを読み出すことができる。以下の説明では、バッファ601は、ラップアラウンド方式を適用したリングバッファであるとする。
(書込データ700のデータ構造の一例)
次に、図7を用いて、書込データ700のデータ構造の一例について説明する。
次に、図7を用いて、書込データ700のデータ構造の一例について説明する。
図7は、書込データ700のデータ構造の一例を示す説明図である。書込データ700は、1[バイト]のヘッダ情報と、対象データとを含む、所定ブロック数分のデータである。換言すれば、書込データ700は、1ブロックが512[バイト]の記憶領域であれば、512[バイト]の倍数長のデータである。
ヘッダ情報は、第1ビット701と、第2ビット702と、第3ビット703と、第4ビット704とを含む。第1ビット701は、書込データ700を書き込む1または複数のブロック分の記憶領域上の第1ビット701を書き込む位置の値を反転した値である。以下の説明では、書込データ700を書き込む記憶領域を「書込先領域」と表記する場合がある。
第2ビット702は、書込データ700を書き込む書込先領域の次ブロック上の先頭位置の値である。第3ビット703は、書込データ700を書き込む書込先領域上の終端位置の値である。第4ビット704は、対象データの終端の値を反転したか否かを示すビットである。以下の説明では、対象データの終端の値を「終端ビット706」と表記する場合がある。対象データは、対象データのデータ長を示すサイズ情報705を含む。
書込データ700は、例えば、図7の(a)のように、ヘッダ情報と、対象データとを結合したデータである。しかしながら、実際には、ヘッダ情報のデータ長と、対象データのデータ長との和が、所定ブロック数分にならない場合がある。このため、書込データ700は、例えば、図7の(b)のように、ヘッダ情報と、対象データと、書込データ700のデータ長を調整するためのパディングデータと、を結合したデータであってもよい。パディングデータは、書込データ700のデータ長を調整し、書込データ700のデータ長をブロックの倍数分にするためのデータである。パディングデータは、例えば、対象データのデータ長を示すサイズ情報705に基づいて、書込データ700から除去可能である。パディングデータは、例えば、書込データ700を読み出した際にパディングデータを除去可能なように、パディングデータのデータ長を示す情報を含んでもよい。
(書込データ700を作成する一例)
次に、図8を用いて、情報記録装置100が書込データ700を作成する一例について説明する。
次に、図8を用いて、情報記録装置100が書込データ700を作成する一例について説明する。
図8は、書込データ700を作成する一例を示す説明図である。図8では、情報記録装置100が、書込データ700の終端ビット706を反転しない場合を例に挙げて、先頭にヘッダ情報を含み、終端に対象データを含む書込データ700を作成する一例について説明する。
情報記録装置100は、リングバッファ601のうち、書込データ700を書き込む書込先領域810を特定する。図8の例では、情報記録装置100は、書込データ700を書き込む書込先領域810として、ブロック#1〜#3の3ブロック分の記憶領域を特定する。
次に、情報記録装置100は、書込先領域810上の先頭位置の値「1」を読み出す。そして、情報記録装置100は、第1ビット701として、読み出した値「1」を反転した値「0」を生成する。第1ビット701は、書込データ700の書き込みが開始されたか否かを判定するための情報である。また、情報記録装置100は、第2ビット702として、書込先領域810の次ブロック#4上の先頭位置の値「1」を読み出す。第2ビット702は、図1の第2情報132に対応する。第2ビット702は、次の書込データ700の書き込みが開始されたか否かを判定するための情報である。
また、情報記録装置100は、第3ビット703として、書込先領域810上の終端位置の値「0」を読み出す。第3ビット703は、図1に示した第1情報131に対応する。第3ビット703は、書込データ700の書き込みが完了したか否かを判定するための情報である。また、情報記録装置100は、第3ビット703「0」と、書込データ700の終端ビット706になる対象データの終端の値「1」とが一致しないため、対象データを変更せず、第4ビット704として値「0」を生成する。第4ビット704は、対象データの終端の値を変更した場合に、読み出した変更後の対象データから変更前の対象データを復元するための情報である。
次に、情報記録装置100は、第1ビット701と、第2ビット702と、第3ビット703と、第4ビット704とを、先頭から順に含む1[バイト]のヘッダ情報を生成する。ヘッダ情報の後ろ4[ビット]はダミーデータである。そして、情報記録装置100は、先頭にヘッダ情報を含み、終端に対象データを含む書込データ700を生成する。第4ビット704は、第3情報に対応する。
また、情報記録装置100は、先頭からヘッダ情報と、対象データとを含み、終端にパディングデータを含む書込データ700を生成してもよい。この場合には、情報記録装置100は、パディングデータの終端の値を変更する場合があるが、書込データ700を読み出す際にはパディングデータは除去されるため、変更前のパディングデータを復元するために第4ビット704を生成しなくてもよい。
(書込データ700を作成する他の例)
次に、図9を用いて、情報記録装置100が書込データ700を作成する他の例について説明する。
次に、図9を用いて、情報記録装置100が書込データ700を作成する他の例について説明する。
図9は、書込データ700を作成する他の例を示す説明図である。図9では、情報記録装置100が、書込データ700の終端ビット706を反転する場合を例に挙げて、先頭にヘッダ情報を含み、終端に対象データを含む書込データ700を作成する一例について説明する。
情報記録装置100は、リングバッファ601のうち、書込データ700を書き込む書込先領域910を特定する。図9の例では、情報記録装置100は、書込データ700を書き込む書込先領域910として、ブロック#1〜#3の3ブロック分の記憶領域を特定する。
次に、情報記録装置100は、書込先領域910上の先頭位置の値「1」を読み出す。そして、情報記録装置100は、第1ビット701として、読み出した値「1」を反転した値「0」を生成する。また、情報記録装置100は、第2ビット702として、書込先領域910の次ブロック#4上の先頭位置の値「1」を読み出す。
また、情報記録装置100は、第3ビット703として、書込先領域910上の終端位置の値「1」を読み出す。また、情報記録装置100は、第3ビット703「1」と、対象データの終端ビット706「1」とが一致するため、対象データの終端ビット706「1」を反転した値「0」に変更し、第4ビット704として値「1」を生成する。
次に、情報記録装置100は、第1ビット701と、第2ビット702と、第3ビット703と、第4ビット704とを、先頭から順に含む1[バイト]のヘッダ情報を生成する。ヘッダ情報の後ろ4[ビット]はダミーデータである。そして、情報記録装置100は、先頭にヘッダ情報を含み、終端に対象データを含む書込データ700を生成する。
また、情報記録装置100は、先頭からヘッダ情報と、対象データとを含み、終端にパディングデータを含む書込データ700を生成してもよい。この場合には、情報記録装置100は、パディングデータの終端の値を変更する場合があるが、書込データ700を読み出す際にはパディングデータは除去されるため、変更前のパディングデータを復元するために第4ビット704を生成しなくてもよい。
(書込データ1010,1210を書き込む一例)
次に、図10〜図13を用いて、情報記録装置100が書込データ1010,1210を書き込む一例について説明する。
次に、図10〜図13を用いて、情報記録装置100が書込データ1010,1210を書き込む一例について説明する。
図10〜図13は、書込データ1010,1210を書き込む一例を示す説明図である。図10において、情報記録装置100は、記憶媒体に書き込む第1対象データを受け付けると、管理情報を参照して、書込開始位置を、図6に示したリングバッファ601の先頭ブロック#1の先頭位置と特定する。
次に、情報記録装置100は、第1対象データのデータ長に基づいて、第1対象データを含む第1書込データ1010のデータ長として、3ブロック分のデータ長を特定する。情報記録装置100は、第1書込データ1010を書き込む第1書込先領域1001として、書込開始位置から3ブロック分の記憶領域#1〜#3を特定する。そして、情報記録装置100は、第1対象データを含む、3ブロック分の第1書込データ1010を生成して、ブロック単位で第1書込データ1010を第1書込先領域1001に書き込む。図10の(A)〜(C)の状態は、ブロック単位で第1書込データ1010を第1書込先領域1001に書き込んだときのリングバッファ601の状態である。
図10の(A)の状態は、情報記録装置100が、3ブロック分の第1書込データ1010のうちの、第1書込先領域1001の先頭ブロック#1に書き込むデータを、第1書込先領域1001の先頭ブロック#1に書き込んだときの状態である。図10の(A)の状態は、第1書込データ1010の書き込みが完了する前の状態であって、第3ビットと第1書込先領域1001の終端位置の値とが一致する状態である。
図10の(B)の状態は、情報記録装置100が、第1書込データ1010のうちの、第1書込先領域1001の先頭から2番目のブロック#2に書き込むデータを、第1書込先領域1001の先頭から2番目のブロック#2に書き込んだときの状態である。図10の(B)の状態は、第1書込データ1010の書き込みが完了する前の状態である。
図10の(C)の状態は、情報記録装置100が、第1書込データ1010のうちの、第1書込先領域1001の終端ブロック#3に書き込むデータを、第1書込先領域1001の終端ブロック#3に書き込んだときの状態である。図10の(C)の状態は、第1書込データ1010の書き込みが完了した後の状態である。また、図10の(C)の状態は、第1書込データ1010の終端の値を第1書込先領域1001の終端位置の値に上書きした結果として、第3ビットと第1書込先領域1001の終端位置の値とが一致しなくなった状態である。
ここで、情報記録装置100は、第1書込データ1010の書き込みが完了すると、新たな書込データの書込開始位置を特定するための情報を、RAM403に書き込む。情報記録装置100は、例えば、第1書込データ1010を書き込んだ第1書込先領域1001の先頭ブロック#0、または終端ブロック#3の情報をRAM403に書き込む。また、情報記録装置100は、第1書込データ1010を書き込んだ第1書込先領域1001の次ブロックであるリングバッファ601の先頭から4番目のブロック#4の先頭位置の情報をRAM403に書き込んでもよい。
これにより、情報記録装置100は、第1書込データ1010の書き込みが完了する前の状態と、書き込みが完了した後の状態とにおいて、第3ビットと第1書込先領域1001の終端位置の値とが一致するか否かの状態を変化させることができる。換言すれば、情報記録装置100は、管理情報を更新しなくても、第3ビットと第1書込先領域1001の終端位置の値とを比較することにより、第1書込データ1010の書き込みが完了したか否かを判定可能な状態にすることができる。
また、情報記録装置100は、リングバッファ601に初めてデータを書き込んだ場合には、管理情報を更新するようにしてもよい。これにより、情報記録装置100は、管理情報が初期値から更新されていない場合には、リングバッファ601にデータが書き込まれていないと確定することができる。次に、図11の説明に移行する。
図11において、情報記録装置100は、リングバッファ601に初めてデータを書き込んだため、管理情報を更新する。情報記録装置100は、例えば、管理情報のうち、初回書込ブロック情報を、第1書込先領域1001の先頭ブロック#1の識別情報に更新する。また、情報記録装置100は、最終書込ブロック情報を、第1書込先領域1001の先頭ブロック#1の識別情報に更新する。次に、図12の説明に移行する。
図12において、情報記録装置100は、新たに第2対象データを受け付けると、RAM403に書き込んだ新たな書込データの書込開始位置を特定するための情報を読み出す。情報記録装置100は、読み出した新たな書込データの書込開始位置を特定するための情報に基づいて、書込開始位置をリングバッファ601の先頭から4番目のブロック#4の先頭位置と特定する。
次に、情報記録装置100は、第2対象データのデータ長に基づいて、第2書込データ1210のデータ長として、2ブロック分のデータ長を特定する。情報記録装置100は、第2書込データ1210を書き込む第2書込先領域1201として、書込開始位置から2ブロック分の記憶領域#4,#5を特定する。そして、情報記録装置100は、第2対象データを含む、2ブロック分の第2書込データ1210を生成して、ブロック単位で第2書込データ1210を第2書込先領域1201に書き込む。図12の(D)および(E)の状態は、ブロック単位で第2書込データ1210を第2書込先領域1201に書き込んだときのリングバッファ601の状態である。
図12の(D)の状態は、情報記録装置100が、2ブロック分の第2書込データ1210のうちの、第2書込先領域1201の先頭ブロック#4に書き込むデータを、第2書込先領域1201の先頭ブロックに書き込んだときの状態である。図12の(D)の状態は、第2書込データ1210の書き込みが完了する前の状態であって、第3ビットと第2書込先領域1201の終端位置の値とが一致する状態である。また、図12の(D)の状態は、第1ビットを第2書込先領域1201の先頭位置の値に上書きした結果として、第1書込データ1010の第2ビットと第2書込先領域1201の先頭位置の値とが一致しなくなった状態である。
図12の(E)の状態は、情報記録装置100が、2ブロック分の第2書込データ1210のうちの、第2書込先領域1201の終端ブロック#5に書き込むデータを、第2書込先領域1201の終端ブロック#5に書き込んだときの状態である。図12の(E)の状態は、第2書込データ1210の書き込みが完了した後の状態である。また、図12の(E)の状態は、第2書込データ1210の終端の値を第2書込先領域1201の終端位置の値に上書きした結果として、第3ビットと第2書込先領域1201の終端位置の値とが一致しなくなった状態である。
ここで、情報記録装置100は、第2書込データ1210の書き込みが完了すると、新たな書込データの書込開始位置を特定するための情報を、RAM403に書き込む。情報記録装置100は、例えば、第2書込データ1210を書き込んだ第2書込先領域1201の先頭ブロック#4、または終端ブロック#5の情報をRAM403に書き込む。また、情報記録装置100は、第2書込データ1210を書き込んだ第2書込先領域1201の次ブロックであるリングバッファ601の先頭から6番目のブロック#6の先頭位置の情報をRAM403に書き込んでもよい。
これにより、情報記録装置100は、第2書込データ1210の書き込みが完了する前の状態と、書き込みが完了した後の状態とにおいて、第3ビットと第2書込先領域1201の終端位置の値とが一致するか否かの状態を変化させることができる。換言すれば、情報記録装置100は、管理情報を更新しなくても、第3ビットと第2書込先領域1201の終端位置の値とを比較することにより、第2書込データ1210の書き込みが完了したか否かを判定可能な状態にすることができる。
また、情報記録装置100は、第2書込データ1210の書き込みが開始される前と、書き込みが開始された後とにおいて、第1書込データ1010の第2ビットと第2書込先領域1201の先頭位置の値とが一致するか否かの状態を変化させることができる。換言すれば、情報記録装置100は、第1書込データ1010の第2ビットと第2書込先領域1201の先頭位置の値とを比較することにより、第2書込データ1210の書き込みが開始されたか否かを判定可能な状態にすることができる。
以降、情報記録装置100は、同様にして、リングバッファ601に順次書込データを書き込む。ここで、情報記録装置100は、リングバッファ601のブロック#N−2まで書込データを書き込んだとする。次に、図13の説明に移行する。
図13において、情報記録装置100は、リングバッファ601の最終ブロック#N−1付近のブロック#N−2まで書込データを書き込み、次の書込データがリングバッファ601の残りの未書込の記憶領域では書き込み切れない場合には、管理情報を更新する。そして、情報記録装置100は、書込済の記憶領域600のいくつかを未書込の記憶領域として設定して、未書込の記憶領域を増加させる。また、情報記録装置100は、ガーベジコレクションを行って、未書込の記憶領域を増加させてもよい。図13の(F)〜(H)の状態は、最終ブロック#N−1付近まで書き込みが行われ、未書込の記憶領域を設定して未書込の記憶領域を増加させるときの管理情報の状態である。
図13の(F)の状態では、情報記録装置100は、管理情報のうち、最終ブロック情報を、リングバッファ601のブロック#N−2の識別情報に更新する。また、情報記録装置100は、管理情報のうち、最終書込ブロック情報を、リングバッファ601のブロック#N−2を含む書込先領域の先頭ブロック#N−3の識別情報に更新する。
図13の(G)の状態では、情報記録装置100は、新たな書込データがリングバッファ601の残りの未書込の記憶領域では書き込み切れないため、未書込の記憶領域を設定する。情報記録装置100は、例えば、書込済のブロックのうち、リングバッファ601の前半部分にあるブロック#1〜#M−1を、未書込の記憶領域として設定する。Mは、1〜N−1の数である。そして、情報記録装置100は、管理情報のうち、初回書込ブロック情報を、リングバッファ601の前半部分の次ブロック#Mの識別情報に更新する。
図13の(H)の状態では、情報記録装置100は、新たな書込データを書き込む際には、未書込の記憶領域に設定したリングバッファ601の先頭ブロック#1の先頭位置から書き込む。情報記録装置100は、例えば、2ブロック分の書込データを書き込む。そして、情報記録装置100は、管理情報のうち、最終書込ブロック情報を、リングバッファ601の先頭ブロック#1の識別情報に更新する。これにより、情報記録装置100は、書込順序が早いブロックのいくつかを未書込の記憶領域にして、リングバッファ601の記憶領域を効率よく使用することができる。
(電源供給の停止時に行う動作例)
次に、図14を用いて、情報記録装置100が電源供給の停止時に行う動作例について説明する。
次に、図14を用いて、情報記録装置100が電源供給の停止時に行う動作例について説明する。
図14は、電源供給の停止時に行う動作例を示す説明図である。図14において、情報記録装置100は、図12の(E)の状態で、シャットダウンして電源供給を停止する要求を受け付けたとする。このとき、情報記録装置100は、シャットダウンする前に、管理情報を更新する。情報記録装置100は、例えば、管理情報のうち、最終書込ブロック情報を、第2書込先領域1201の先頭ブロックの識別情報に更新する。これにより、情報記録装置100は、電源供給の停止状態から復旧したときに、管理情報に基づいて、データの書込終端の位置を、効率よく特定することができる。
一方で、情報記録装置100は、シャットダウンする前に管理情報を更新しない場合があってもよいし、事故・過失により管理情報を更新する前に電源供給が停止されてしまう場合があってもよい。事故・過失とは、例えば、停電、および、プログラムの不具合やユーザの操作入力による強制終了などである。これらの場合であっても、情報記録装置100は、電源供給の停止状態から復旧したときに、リングバッファ601の各書込データの第1情報や第2情報に基づいて、データの書込終端の位置を特定することができる。
(書込終端の位置を特定する一例)
次に、図15〜図18を用いて、情報記録装置100が書込終端の位置を特定する一例について説明する。
次に、図15〜図18を用いて、情報記録装置100が書込終端の位置を特定する一例について説明する。
図15〜図18は、情報記録装置100が書込終端の位置を特定する一例を示す説明図である。図15の例は、図10の(A)の状態で、管理情報が更新されずに、電源供給が停止されたとした場合の例である。
図15において、情報記録装置100は、電源供給の停止状態から復旧すると、管理情報を読み出す。情報記録装置100は、管理情報のうち、初回書込ブロック情報が初期値であるため、リングバッファ601には書込データが書き込まれていないか、初回の書込データの書き込みに失敗したと判定する。このため、情報記録装置100は、リングバッファ601に書込データの書き込みが完了した記憶領域は存在せず、データの書込終端は存在しないと判定する。図15のように、情報記録装置100は、初回の書込データの一部分の書き込みが成功し、残余部分の書き込みが失敗している場合に、誤って、初回の書込データの書き込みが完了していると判定することはない。これにより、情報記録装置100は、新しい書込データを書き込む際には、リングバッファ601の先頭ブロック#1の値にかかわらず、リングバッファ601の先頭ブロック#1の先頭位置を書込開始位置に特定することができるようになる。そして、情報記録装置100は、書込データが書き込まれていないか、初回の書込データの書き込みに失敗した記憶領域に、新しい書込データを書き込むことができる。次に、図16の説明に移行する。
図16の例は、図10の(C)の状態で、管理情報が更新されずに、電源供給が停止されたとした場合の例である。図16において、情報記録装置100は、電源供給の停止状態から復旧すると、管理情報を読み出す。情報記録装置100は、管理情報のうち、初回書込ブロック情報がリングバッファ601の先頭ブロック#1を示す情報であるため、リングバッファ601の先頭ブロック#1から少なくとも一つの書込データが書き込まれていると判定する。
次に、情報記録装置100は、リングバッファ601の先頭ブロック#1から第2ビットと、対象データのデータ長を示すサイズ情報とを抽出する。情報記録装置100は、サイズ情報に基づいて、書込データが書き込まれた書込先領域として、リングバッファ601の先頭ブロックから3ブロック分の第1書込先領域1001を特定する。そして、情報記録装置100は、第2ビットと、第1書込先領域1001の次ブロックである、リングバッファ601の先頭から4番目のブロック#4の先頭位置の値とが一致するか否かを判定する。ここで、情報記録装置100は、一致するため、第1書込先領域1001の次ブロック#4から先には書込データが書き込まれていないと判定する。
このため、情報記録装置100は、第1書込先領域1001を書込データの書き込みに成功した最後の記憶領域であると判定し、第1書込先領域1001の終端をデータの書込終端として特定する。次に、図17の説明に移行する。
図17の例は、図12の(D)の状態で、管理情報が更新されずに、電源供給が停止されたとした場合の例である。図17において、情報記録装置100は、電源供給の停止状態から復旧すると、管理情報を読み出す。情報記録装置100は、管理情報のうち、初回書込ブロック情報がリングバッファ601の先頭ブロック#1を示す情報であるため、リングバッファ601の先頭ブロック#1から少なくとも一つの書込データが書き込まれていると判定する。
次に、情報記録装置100は、リングバッファ601の先頭ブロック#1から第2ビットと、対象データのデータ長を示すサイズ情報とを抽出する。情報記録装置100は、サイズ情報に基づいて、書込データが書き込まれた書込先領域として、リングバッファ601の先頭ブロックから3ブロック分の第1書込先領域1001を特定する。そして、情報記録装置100は、第2ビットと、第1書込先領域1001の次ブロックである、リングバッファ601の先頭から4番目のブロック#4の先頭位置の値とが一致するか否かを判定する。ここで、情報記録装置100は、一致しないため、第1書込先領域1001の次ブロックである、リングバッファ601の先頭から4番目のブロック#4から先にも書込データが書き込まれていると判定する。
次に、情報記録装置100は、リングバッファ601の先頭から4番目のブロック#4から第2ビットと、第3ビットと、対象データのデータ長を示すサイズ情報とを抽出する。情報記録装置100は、サイズ情報に基づいて、書込データが書き込まれた書込先領域として、リングバッファ601の先頭から4番目のブロック#4から2ブロック分の第2書込先領域1201を特定する。そして、情報記録装置100は、第2ビットと、第2書込先領域1201の次ブロックである、リングバッファ601の先頭から6番目のブロック#6の先頭位置の値とが一致するか否かを判定する。ここで、情報記録装置100は、一致するため、第2書込先領域1201の次ブロックである、リングバッファ601の先頭から6番目のブロック#6から先には書込データが書き込まれていないと判定する。
次に、情報記録装置100は、第3ビットと、第2書込先領域1201の終端位置の値とが一致するか否かを判定する。ここで、情報記録装置100は、一致するため、第2書込先領域1201に対する書込データの書き込みは失敗しており、完了していないと判定する。このため、情報記録装置100は、第1書込先領域1001を書込データの書き込みに成功した最後の記憶領域であると判定し、第1書込先領域1001の終端をデータの書込終端として特定する。次に、図18の説明に移行する。
図18の例は、図12の(E)の状態で、管理情報が更新されずに、電源供給が停止されたとした場合の例である。図18において、情報記録装置100は、電源供給の停止状態から復旧すると、管理情報を読み出す。情報記録装置100は、管理情報のうち、初回書込ブロック情報がリングバッファ601の先頭ブロック#1を示す情報であるため、リングバッファ601の先頭ブロック#1から先には少なくとも一つの書込データが書き込まれていると判定する。
次に、情報記録装置100は、リングバッファ601の先頭ブロック#1から第2ビットと、対象データのデータ長を示すサイズ情報とを抽出する。情報記録装置100は、サイズ情報に基づいて、書込データが書き込まれた書込先領域として、リングバッファ601の先頭ブロックから3ブロック分の第1書込先領域1001を特定する。そして、情報記録装置100は、第2ビットと、第1書込先領域1001の次ブロックである、リングバッファ601の先頭から4番目のブロック#4の先頭位置の値とが一致するか否かを判定する。ここで、情報記録装置100は、一致しないため、第1書込先領域1001の次ブロックである、リングバッファ601の先頭から4番目のブロック#4から先にも書込データが書き込まれていると判定する。
次に、情報記録装置100は、リングバッファ601の先頭から4番目のブロック#4から第2ビットと、第3ビットと、対象データのデータ長を示すサイズ情報とを抽出する。情報記録装置100は、サイズ情報に基づいて、書込データが書き込まれた書込先領域として、リングバッファ601の先頭から4番目のブロック#4から2ブロック分の第2書込先領域1201を特定する。そして、情報記録装置100は、第2ビットと、第2書込先領域1201の次ブロックである、リングバッファ601の先頭から6番目のブロック#6の先頭位置の値とが一致するか否かを判定する。ここで、情報記録装置100は、一致するため、第2書込先領域1201の次ブロックである、リングバッファ601の先頭から6番目のブロック#6から先には書込データが書き込まれていないと判定する。
次に、情報記録装置100は、第3ビットと、第2書込先領域1201の終端位置の値とが一致するか否かを判定する。ここで、情報記録装置100は、一致しないため、第2書込先領域1201に対する書込データの書き込みは失敗しておらず、完了していると判定する。このため、情報記録装置100は、第2書込先領域1201を書込データの書き込みに成功した最後の記憶領域であると判定し、第2書込先領域1201の終端をデータの書込終端として特定する。図16〜図18のように、情報記録装置100は、管理情報を更新しなくても、データの書込終端の位置を特定することができる。
これにより、情報記録装置100は、データの書込終端の次ブロックの先頭位置を、最新の書込開始位置として特定することができ、最新の書込開始位置から新しい書込データを書き込むことができる。また、情報記録装置100は、誤って、書込データの書き込みが失敗した記憶領域を書込済の記憶領域と判定することはない。また、情報記録装置100は、管理情報を更新しなくても、初回書込ブロック情報によって識別されるブロックから、リングバッファ601上のデータの書込終端の位置までを、書込済の記憶領域の範囲として特定することができる。そして、情報記録装置100は、書込済の記憶領域の範囲に書き込まれた書込データを読み出すことができる。
(書込処理手順の一例)
次に、図19および図20を用いて、書込処理手順の一例について説明する。
次に、図19および図20を用いて、書込処理手順の一例について説明する。
図19および図20は、書込処理手順の一例を示すフローチャートである。図19において、情報記録装置100は、対象データのデータ長に基づいて、ヘッダ情報と対象データとを含む書込データのデータ長を特定して、書込データの雛形をRAM403上に生成する(ステップS1901)。例えば、書込データの雛形は、ヘッダ情報として、それぞれ、初期値が設定された第1ビットと、第2ビットと、第3ビットと、第4ビットとを含む。
次に、情報記録装置100は、書込データを書き込むリングバッファ上の書込先領域を特定する(ステップS1902)。そして、情報記録装置100は、書込先領域の先頭ブロックのデータを読み出し、書込先領域の先頭ブロックの先頭位置の値を抽出する(ステップS1903)。次に、情報記録装置100は、書込データの雛形の第1ビットを、初期値から、抽出した書込先領域の先頭位置の値を反転した値へと更新する(ステップS1904)。そして、情報記録装置100は、書込先領域の終端ブロックのデータを読み出し、書込先領域の終端ブロックの終端位置の値を抽出する(ステップS1905)。
次に、情報記録装置100は、書込データの雛形の第3ビットを、初期値から、抽出した書込先領域の終端ブロックの終端位置の値へと更新する(ステップS1906)。そして、情報記録装置100は、第3ビットと、書込データの雛形の終端の値とが一致するか否かを判定する(ステップS1907)。ここで、一致しない場合(ステップS1907:No)、情報記録装置100は、書込データの雛形の第4ビットを、初期値から、書込データの雛形の終端の値を反転していないことを示す「0」へと更新して(ステップS1908)、ステップS1910の処理に移行する。
一方で、一致する場合(ステップS1907:Yes)、情報記録装置100は、書込データの雛形の終端の値を反転し、書込データの雛形の第4ビットを、初期値から、書込データの雛形の終端の値を反転したことを示す値「1」へと更新して(ステップS1909)、ステップS1910の処理に移行する。
次に、情報記録装置100は、書込先領域の次ブロックのデータを読み出し、書込先領域の次ブロックの先頭位置の値を抽出する(ステップS1910)。そして、情報記録装置100は、書込データの雛形の第2ビットを、初期値から、抽出した書込先領域の次ブロックの先頭位置の値へと更新する(ステップS1911)。
情報記録装置100は、ステップS1901〜S1911の処理を終了すると、RAM403上の書込データの雛形を、書込データとして確定する。これにより、情報記録装置100は、ヘッダ情報と対象データとを含む書込データを生成することができる。次に、情報記録装置100は、図20のステップS2001の処理に移行する。
図20において、情報記録装置100は、ブロック単位で書込先領域に書込データを書き込む(ステップS2001)。情報記録装置100は、書込データを、書込先領域の先頭ブロックに書き込むデータと、書込先領域の2番目のブロックから終端ブロックの直前ブロックまでの中間ブロックに書き込むデータと、書込先領域の終端ブロックに書き込むデータとに分割してもよい。
このとき、情報記録装置100は、書込先領域の先頭ブロックに書き込むデータの書込先領域の先頭ブロックへの書き込みが完了してから、書込先領域の中間ブロックに書き込むデータの書込先領域の中間ブロックへの書き込みを開始するようにする。また、情報記録装置100は、書込先領域の中間ブロックに書き込むデータの書込先領域の中間ブロックへの書き込みが完了してから、書込先領域の終端ブロックに書き込むデータの書込先領域の終端ブロックへの書き込みを開始するようにする。
そして、情報記録装置100は、リングバッファに初めて書込データを書き込んだ状態であるか否かを判定する(ステップS2002)。ここで、初めて書込データを書き込んだ状態ではない場合(ステップS2002:No)、情報記録装置100は、リングバッファの先頭に戻って初めて書込データを書き込んだ状態であるか否かを判定する(ステップS2003)。ここで、リングバッファの先頭に戻って初めて書込データを書き込んだ状態ではない場合(ステップS2003:No)、情報記録装置100は、書込処理を終了する。
一方で、初めて書込データを書き込んだ状態である場合(ステップS2002:Yes)、またはリングバッファの先頭に戻って初めて書込データを書き込んだ状態である場合(ステップS2003:Yes)、情報記録装置100は、管理情報を更新する(ステップS2004)。そして、情報記録装置100は、書込処理を終了する。これにより、情報記録装置100は、ヘッダ情報を対象データとともに書込データとして書き込むことができる。
(決定処理手順の一例)
次に、図21および図22を用いて、決定処理手順の一例について説明する。
次に、図21および図22を用いて、決定処理手順の一例について説明する。
図21および図22は、決定処理手順の一例を示すフローチャートである。図21において、情報記録装置100は、電源供給を受けると、スーパーブロックから管理情報を読み出す(ステップS2101)。次に、情報記録装置100は、読み出した管理情報に含まれる初回書込ブロック情報が初期値のままであるか否かを判定する(ステップS2102)。初期値とは、リングバッファに書込データが書き込まれていないことを示す値である。ここで、初期値である場合(ステップS2102:Yes)、情報記録装置100は、データの書込終端は存在しないと決定する(ステップS2103)。そして、情報記録装置100は、決定処理を終了する。
一方で、初期値ではない場合(ステップS2102:No)、情報記録装置100は、読み出した管理情報に含まれる最終書込ブロック情報が示すx番目のブロックのデータを読み出す(ステップS2104)。次に、情報記録装置100は、読み出したx番目のブロックのデータに基づいて、先頭ブロックとしてx番目のブロックを含む書込先領域を第p書込先領域として設定する(ステップS2105)。
図22において、情報記録装置100は、第p書込先領域の先頭ブロックの第2ビットを抽出する(ステップS2201)。次に、情報記録装置100は、第p書込先領域の次ブロックのデータを読み出し、第p書込先領域の次ブロックの先頭位置の値を抽出する(ステップS2202)。そして、情報記録装置100は、抽出した第2ビットと、抽出した第p書込先領域の次ブロックの先頭位置の値とが一致するか否かを判定する(ステップS2203)。ここで、一致する場合(ステップS2203:Yes)、情報記録装置100は、ステップS2208の処理に移行する。
一方で、一致しない場合(ステップS2203:No)、情報記録装置100は、第p書込先領域の次ブロックのデータに基づいて、先頭ブロックとして第p書込先領域の次ブロックを含む書込先領域を、第p+1書込先領域として設定する(ステップS2204)。
次に、情報記録装置100は、第p+1書込先領域の先頭ブロックの第3ビットを抽出する(ステップS2205)。そして、情報記録装置100は、第p+1書込先領域の終端ブロックのデータを読み出して、第p+1書込先領域の終端ブロックの終端位置の値を抽出する(ステップS2206)。
次に、情報記録装置100は、抽出した第3ビットと、抽出した第p+1書込先領域の終端ブロックの終端位置の値とが一致するか否かを判定する(ステップS2207)。ここで、一致する場合(ステップS2207:Yes)、情報記録装置100は、第p書込先領域の終端ブロックを、データの書込終端の位置に決定し(ステップS2208)、決定処理を終了する。
一方で、一致しない場合(ステップS2207:No)、情報記録装置100は、第p+1書込先領域を、第p書込先領域として設定して(ステップS2209)、ステップS2201の処理に戻る。これにより、情報記録装置100は、データの書込終端の位置を決定することができる。結果として、情報記録装置100は、新しい書込データの書き込みを行う際には、最新の書込開始位置としてデータの書込終端の位置の次ブロックの先頭位置を特定して、新しい書込データを書き込むことができる。また、情報記録装置100は、リングバッファのうちの書込済の記憶領域の範囲を特定することができ、リングバッファのうちの書込済のブロックからデータを読み出すことができる。
以上説明したように、情報記録装置100によれば、記憶媒体に対象データを書き込む際に、第1情報と、第2情報と、対象データと、を含む第1ブロック数分の書込データを生成し、書込開始位置から書き込むことができる。これにより、情報記録装置100は、今回の書込データの書き込みの成否によって書込先領域112の終端ブロック113の少なくともいずれかの値と一致するか否かの状態が変化する第1情報を、対象データ120とともに書き込むことができる。同様に、情報記録装置100は、次回の書込データの書き込みが開始されたか否かによって次回の書込データの書込予定ブロック114の少なくともいずれかの値と一致するか否かの状態が変化する第2情報を、対象データ120とともに書き込むことができる。
このため、情報記録装置100は、管理情報を更新しなくても、第1情報と第2情報とに基づいて、今回の書込データの書き込みが完了したか否か、次回の書込データの書き込みが開始されたか否かを判定可能な状態にすることができる。したがって、情報記録装置100は、リングバッファとは異なる記憶領域への管理情報の書き込みを行わなくても、データの書込終端の位置を特定することができるようになる。結果として、情報記録装置100は、書込処理にかかる時間を低減することができる。
また、情報記録装置100によれば、第1情報として、終端ブロック上の第1位置の値を示す情報を用いることができる。そして、情報記録装置100によれば、さらに、終端ブロック上の第1位置に書き込む値として、第1情報が示す値とは異なる値を示す第3情報を含む書込データを生成することができる。これにより、情報記録装置100は、今回の書込データの書き込みが成功した場合には、書込先領域112の終端ブロック113の値が必ず変化するようにして、第1情報と終端ブロック113の値とが一致するか否かの状態が変化するのを確定させることができる。
また、情報記録装置100によれば、第2情報として、終端ブロックから第2ブロック数先のブロック上の第2位置の値を示す情報を用いることができる。そして、情報記録装置100によれば、さらに、書込開始位置の直前ブロックから第2ブロック数先のブロック上の第2位置に書き込む値として、当該値とは異なる値を示す第4情報を含む書込データを生成することができる。これにより、情報記録装置100は、次回の書込データの書き込みが開始された場合には、次回の書込データの書込予定ブロック114の値が必ず変化するようにすることができる。そして、情報記録装置100は、第2情報と書込予定ブロック114の値とが一致するか否かの状態が変化するのを確定させることができる。
また、情報記録装置100によれば、終端ブロック上の第1位置の値と、対象データのうちの終端ブロック上の第1位置に書き込む値とが一致している場合には、対象データのうちの終端ブロック上の第1位置に書き込む値を異なる値に変更することができる。そして、情報記録装置100によれば、さらに、対象データのうちの終端ブロック上の第1位置に書き込む値を変更したか否かを示す第5情報を含む書込データを生成することができる。これにより、情報記録装置100は、対象データの値を第3情報として用いることができ、対象データの値を変更した場合には対象データを読み出した際に復元可能なように、対象データを変更したことを示す第5情報を書込データ内に保持することができる。
また、情報記録装置100によれば、書込開始位置の直前ブロックから第2ブロック数先のブロックに書き込む情報として、書込データに第1情報と第2情報とを含めることができる。これにより、情報記録装置100は、前回の書込データがあれば、前回の書込データの第2情報に基づいて、今回の書込データのうちで書き込みの成功を担保することができる範囲のデータに第1情報と第2情報とを含むことができる。結果として、情報記録装置100は、第1情報と第2情報とが書き込まれておらず、データの書込終端の位置を特定することができなくなることを防止することができる。
また、情報記録装置100によれば、第1ブロック数として対象データのデータ長に基づく数を設定することができる。これにより、情報記録装置100は、対象データのデータ長より大きいデータ長で書込データを生成することができる。このため、対象データのデータ長は、可変長であってもよい。
また、情報記録装置100によれば、第2ブロック数として1を設定することができる。これにより、情報記録装置100は、次回の書込処理において必ず書込データの書込先になる書込予定ブロックの値を、第2情報として用いることができる。
また、情報記録装置100によれば、書込データの書き込みが完了した場合に、書き込みが完了した記憶領域の終端位置として書込データの書込先領域の終端ブロックを示す情報を、記憶媒体とは異なる揮発性の記憶媒体に記録することができる。これにより、情報記録装置100は、新たなデータの書込処理を行う都度、第1情報や第2情報を用いてデータの書込終端の位置を特定しなくてもよくなり、処理負荷を低減することができる。
また、情報記録装置100によれば、いずれかの書込データの書込開始位置の直前ブロックから第2ブロック数先のブロックが書込済のブロックであれば、いずれかの書込データの第1情報と第2情報とを読み出すことができる。そして、情報記録装置100によれば、読み出した第1情報と第2情報とに基づいて、データの書込終端の位置を特定することができる。さらに、情報記録装置100は、記憶媒体上の新たなデータを含む書込データの書込開始位置を決定することができる。これにより、情報記録装置100は、管理情報が最新の状態に更新されていなくても、データの書込終端の位置を特定することができ、最新の書込開始位置を決定することができる。
また、情報記録装置100によれば、第1情報が示す値と、終端ブロックの値とに基づいて、終端ブロックが書込済のブロックであるか否かを判定することができる。また、情報記録装置100によれば、第2情報が示す値と、終端ブロックから第2ブロック数先のブロックの値とに基づいて、終端ブロックから第2ブロック数先のブロックが書込済のブロックであるか否かを判定することができる。そして、情報記録装置100によれば、終端ブロックから第2ブロック数先のブロックが書込済のブロックではないと判定し、終端ブロックが書込済のブロックであると判定する場合がある。この場合では、情報記録装置100によれば、終端ブロックを、データの書込終端の位置に決定することができる。これにより、情報記録装置100は、読出元の書込データの書き込みが完了しており、当該書込データの次の書込データの書き込みが開始されていないか失敗した場合であることを特定して、データの書込終端の位置を特定することができる。さらに、情報記録装置100は、読出元の書込データの書込先領域の次ブロックの先頭位置を、新たなデータを含む書込データの書込開始位置に決定することができる。
また、情報記録装置100によれば、終端ブロックから第2ブロック数先のブロックが書込済のブロックではないと判定し、終端ブロックが書込済のブロックではないと判定する場合がある。この場合では、情報記録装置100によれば、読出元の書込データの書込先領域の直前ブロックを、データの書込終端の位置に決定することができる。これにより、情報記録装置100は、読出元の書込データの書き込みが失敗した場合であることを特定して、データの書込終端の位置を特定することができる。さらに、情報記録装置100は、読出元の書込データの書込開始位置を、新たなデータを含む書込データの書込開始位置に決定することができる。
また、情報記録装置100によれば、電源供給の停止要求を受け付けた場合に、直前に書き込みが完了した書込データの書込先領域の終端ブロックを示す情報を、連続する記憶領域とは異なる他の記憶領域に記録することができる。これにより、情報記録装置100は、次に電源を投入した際に、データの書込終端の位置を特定する処理負荷を低減することができる。
また、情報記録装置100によれば、電源供給の停止状態から復帰した際に、他の記憶領域に記録された情報が、書込開始位置の直前ブロックから第2ブロック数先のブロックが書込済のブロックであることを示しているか否かを判定することができる。そして、情報記録装置100によれば、書込開始位置の直前ブロックから第2ブロック数先のブロックが書込済のブロックであることを示していれば、直前ブロックから第2ブロック数先のブロックまでに書き込まれた第1情報と第2情報とを読み出すことができる。これにより、情報記録装置100は、いずれかの書込データであって、少なくとも第1情報と第2情報とが書き込まれたことが担保された書込データを読み出して、いずれかの書込データの第1情報と第2情報とを読み出すことができる。そして、情報記録装置100は、いずれかの書込データの書き込みが完了しているか否か、いずれかの書込データの次の書込データの書き込みが開始されているか否かを判定して、データの書込終端の位置を特定することができる。さらに、情報記録装置100は、新たな書込データの書込開始位置を特定することができる。
また、情報記録装置100によれば、記憶媒体に書き込まれた書込データを読み出すことができる。そして、情報記録装置100によれば、書込データに含まれる第5情報がデータのうちの終端ブロック上の第1位置に書き込む値を変更したことを示す場合には、データのうちの終端ブロック上の第1位置から読み出した値を変更前の値に変更することができる。これにより、情報記録装置100は、いずれかの書込データを読み出し、書込データに含まれる対象データを取得することができる。また、情報記録装置100は、対象データの値が変更されている場合には、対象データを復元することができる。
また、情報記録装置100によれば、記憶媒体として、磁気ディスクを採用することができる。この場合には、情報記録装置100は、リングバッファとは異なる記憶領域に管理情報を書き込まなくてもよく、連続する記憶領域であるリングバッファについて書き込みを行えばよくなるため、シークタイムを低減することができる。
また、情報記録装置100によれば、記憶媒体として、半導体メモリを採用することができる。この場合には、情報記録装置100は、リングバッファとは異なる記憶領域に管理情報を書き込む回数を低減することができるため、半導体メモリの劣化を抑制することができる。
また、情報記録装置100によれば、書込データを、直前ブロックから第2ブロック数先のブロックに書き込むデータを含む第1データと、終端ブロックに書き込むデータを含む第2データとに分割することができる。そして、情報記録装置100によれば、第1データの書き込みが完了してから、第2データを書き込むことができる。これにより、情報記録装置100は、記憶装置が記憶媒体に対して書込データの先頭から順に書き込まない場合があっても、第1情報と第2情報とに基づいて、今回の書込データの書き込みが完了したか否かを判定可能な状態にすることができる。また。情報記録装置100は、次回の書込データの書き込みが開始されたか否かを判定可能な状態にすることができる。
なお、本実施の形態で説明した情報記録方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本情報記録プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本情報記録プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)コンピュータに、
記憶領域に複数のブロック単位で構成される書込データを前記ブロック単位で記憶媒体に書き込む際に、前記書込データの終端ブロック内の第3情報に対応する値を示す第1情報と、前記書込データの次に書き込まれる書込データ内の第4情報に対応する値を示す第2情報を含む前記書込データを生成し、
生成した前記書込データを記憶媒体に書き込む処理を実行させることを特徴とする情報記録プログラム。
記憶領域に複数のブロック単位で構成される書込データを前記ブロック単位で記憶媒体に書き込む際に、前記書込データの終端ブロック内の第3情報に対応する値を示す第1情報と、前記書込データの次に書き込まれる書込データ内の第4情報に対応する値を示す第2情報を含む前記書込データを生成し、
生成した前記書込データを記憶媒体に書き込む処理を実行させることを特徴とする情報記録プログラム。
(付記2)前記第1情報と前記第2情報は、前記書込データの先頭ブロック内に記憶することを特徴とする付記1に記載の情報記録プログラム。
(付記3)前記第1情報は前記第3情報を反転した値を示し、前記第2情報は前記第4情報を反転した値を示すことを特徴とする付記1または2に記載の情報記録プログラム。
(付記4)前記第1情報に格納した値と前記第3情報に格納した値が、変更したか否かを示す第5情報を含む前記書込データを生成する付記1に記載の情報記録プログラム。
(付記5)コンピュータが、
記憶領域に複数のブロック単位で構成される書込データを前記ブロック単位で記憶媒体に書き込む際に、前記書込データの終端ブロック内の第3情報に対応する値を示す第1情報と、前記書込データの次に書き込まれる書込データ内の第4情報に対応する値を示す第2情報を含む前記書込データを生成し、
生成した前記書込データを記憶媒体に書き込む処理を実行することを特徴とする情報記録方法。
記憶領域に複数のブロック単位で構成される書込データを前記ブロック単位で記憶媒体に書き込む際に、前記書込データの終端ブロック内の第3情報に対応する値を示す第1情報と、前記書込データの次に書き込まれる書込データ内の第4情報に対応する値を示す第2情報を含む前記書込データを生成し、
生成した前記書込データを記憶媒体に書き込む処理を実行することを特徴とする情報記録方法。
(付記6)記憶領域に複数のブロック単位で構成される書込データを前記ブロック単位で記憶媒体に書き込む際に、前記書込データの終端ブロック内の第3情報に対応する値を示す第1情報と、前記書込データの次に書き込まれる書込データ内の第4情報に対応する値を示す第2情報を含む前記書込データを生成し、
生成した前記書込データを記憶媒体に書き込む処理を実行する制御部を有することを特徴とする情報記録装置。
生成した前記書込データを記憶媒体に書き込む処理を実行する制御部を有することを特徴とする情報記録装置。
100 情報記録装置
501 受付部
502 生成部
503 書込部
504 読出部
505 判定部
506 決定部
501 受付部
502 生成部
503 書込部
504 読出部
505 判定部
506 決定部
Claims (6)
- コンピュータに、
記憶領域に複数のブロック単位で構成される書込データを前記ブロック単位で記憶媒体に書き込む際に、前記書込データの終端ブロック内の第3情報に対応する値を示す第1情報と、前記書込データの次に書き込まれる書込データ内の第4情報に対応する値を示す第2情報を含む前記書込データを生成し、
生成した前記書込データを記憶媒体に書き込む処理を実行させることを特徴とする情報記録プログラム。 - 前記第1情報と前記第2情報は、前記書込データの先頭ブロック内に記憶することを特徴とする請求項1に記載の情報記録プログラム。
- 前記第1情報は前記第3情報を反転した値を示し、前記第2情報は前記第4情報を反転した値を示すことを特徴とする請求項1または2に記載の情報記録プログラム。
- 前記第1情報に格納した値と前記第3情報に格納した値が、変更したか否かを示す第5情報を含む前記書込データを生成する請求項1に記載の情報記録プログラム。
- コンピュータが、
記憶領域に複数のブロック単位で構成される書込データを前記ブロック単位で記憶媒体に書き込む際に、前記書込データの終端ブロック内の第3情報に対応する値を示す第1情報と、前記書込データの次に書き込まれる書込データ内の第4情報に対応する値を示す第2情報を含む前記書込データを生成し、
生成した前記書込データを記憶媒体に書き込む処理を実行することを特徴とする情報記録方法。 - 記憶領域に複数のブロック単位で構成される書込データを前記ブロック単位で記憶媒体に書き込む際に、前記書込データの終端ブロック内の第3情報に対応する値を示す第1情報と、前記書込データの次に書き込まれる書込データ内の第4情報に対応する値を示す第2情報を含む前記書込データを生成し、
生成した前記書込データを記憶媒体に書き込む処理を実行する制御部を有することを特徴とする情報記録装置。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2014260962A JP2016122485A (ja) | 2014-12-24 | 2014-12-24 | 情報記録プログラム、情報記録方法、および情報記録装置 |
US14/972,940 US9690514B2 (en) | 2014-12-24 | 2015-12-17 | Apparatus, method and medium |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2014260962A JP2016122485A (ja) | 2014-12-24 | 2014-12-24 | 情報記録プログラム、情報記録方法、および情報記録装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2016122485A true JP2016122485A (ja) | 2016-07-07 |
Family
ID=56164195
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2014260962A Withdrawn JP2016122485A (ja) | 2014-12-24 | 2014-12-24 | 情報記録プログラム、情報記録方法、および情報記録装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US9690514B2 (ja) |
JP (1) | JP2016122485A (ja) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107870727B (zh) * | 2016-09-23 | 2021-01-01 | 伊姆西Ip控股有限责任公司 | 用于存储数据的方法和设备 |
KR20200122176A (ko) * | 2019-04-17 | 2020-10-27 | 에스케이하이닉스 주식회사 | 테스트 패턴 발생기 및 테스트 패턴 발생 방법 |
CN111259023B (zh) * | 2020-01-13 | 2023-04-07 | 泰康保险集团股份有限公司 | 一种数据调度方法、装置、电子设备及存储介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6643754B1 (en) | 2000-02-15 | 2003-11-04 | International Business Machines Corporation | System and method for dynamically allocating computer memory |
JP2008003932A (ja) | 2006-06-23 | 2008-01-10 | Sony Corp | データ記憶装置、データ記憶方法およびコンピュータプログラム |
JP4539621B2 (ja) | 2006-08-11 | 2010-09-08 | Tdk株式会社 | メモリコントローラ、フラッシュメモリシステム及びフラッシュメモリの制御方法 |
-
2014
- 2014-12-24 JP JP2014260962A patent/JP2016122485A/ja not_active Withdrawn
-
2015
- 2015-12-17 US US14/972,940 patent/US9690514B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US20160188214A1 (en) | 2016-06-30 |
US9690514B2 (en) | 2017-06-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10417186B2 (en) | File migration method and apparatus, and storage device | |
CN107003935B (zh) | 用于优化数据库去重的装置、方法和计算机介质 | |
US9996421B2 (en) | Data storage method, data storage apparatus, and storage device | |
US10073649B2 (en) | Storing metadata | |
US11093387B1 (en) | Garbage collection based on transmission object models | |
US8166261B1 (en) | Systems and methods for seeding a fingerprint cache for data deduplication | |
JP2013516679A (ja) | 重複排除データシステムから非参照データセグメントを除去するためのシステムおよび方法 | |
US10120595B2 (en) | Optimizing backup of whitelisted files | |
CN105474200A (zh) | 具有占位符的水合和脱水 | |
US8850148B2 (en) | Data copy management for faster reads | |
US8966207B1 (en) | Virtual defragmentation of a storage | |
JP5721056B2 (ja) | トランザクション処理装置、トランザクション処理方法およびトランザクション処理プログラム | |
US10114579B2 (en) | Data migration tool with intermediate incremental copies | |
US8745350B2 (en) | Temporary VTOC locking during defragmentation | |
EP2998903B1 (en) | System and method for robust full-drive encryption | |
JP2016122485A (ja) | 情報記録プログラム、情報記録方法、および情報記録装置 | |
JP2008033527A (ja) | ストレージ装置、ディスク装置及びデータ復元方法 | |
CN112764662B (zh) | 用于存储管理的方法、设备和计算机程序产品 | |
CN106611364B (zh) | 存储碎片整理方法及装置 | |
US9128823B1 (en) | Synthetic data generation for backups of block-based storage | |
US11513951B2 (en) | System and method for improving write performance for log structured storage systems | |
JP5718974B2 (ja) | 情報処理装置、情報処理方法、および、情報処理プログラム | |
CN113703671B (zh) | 一种数据块擦除方法及相关装置 | |
CN113568567B (zh) | 利用索引物件来进行简易存储服务无缝迁移的方法、主装置以及存储服务器 | |
JP6157158B2 (ja) | 情報処理装置、その制御方法及びプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20171113 |
|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20171225 |