以下に添付図面を参照して、コントローラ、データ記憶装置及びプログラムの実施の形態を詳細に説明する。なお、以下の各実施の形態では、データ記憶装置としてSSDを例に説明するが、これに限定されるものではない。
(第1の実施の形態)
第1の実施の形態にかかるデータ記憶装置は、記憶媒体にデータを書き込む場合に、書き込むデータを圧縮してデータ量を削減する機能を具備するコントローラを有する。
第1の実施の形態にかかるデータ記憶装置のコントローラは、外部に対する入出力単位となる記憶領域であるページを複数含み、予め定められたデータの単位であるクラスタのデータを、ページに複数記憶する記憶媒体と、クラスタを識別する情報である論理アドレスと記憶媒体の物理的なアドレスである物理アドレスとの対応を記憶する記憶部と、に対するデータの読み書きを制御するコントローラであって、外部から書き込みが要求されたデータを、クラスタのサイズとなる複数のクラスタデータに変換し、変換したクラスタデータを外部の圧縮部により圧縮させ、記憶媒体への書込先の物理アドレスを予め定められた規則に従って決定し、圧縮されたクラスタデータを書込先の物理アドレスに応じて記憶媒体に書き込むよう制御するとともに、論理アドレスと書込先の物理アドレスとの対応を記憶部に書き込むよう制御する書込制御部と、外部から読み込みが要求されたデータに対して、記憶部から物理アドレスを取得し、取得した物理アドレスに応じて記憶媒体からクラスタデータを読み込み、読み込んだクラスタデータを外部の展開部により展開させ、展開されたクラスタデータを出力するよう制御する読込制御部と、記憶媒体に書き込まれたクラスタデータの中から転記するクラスタデータを予め定められた規則に従って決定し、決定したクラスタデータを記憶媒体から読込み、読み込んだクラスタデータを外部の展開部により展開させ、展開されたクラスタデータを外部の圧縮部により圧縮させ、記憶媒体への転記先の物理アドレスを予め定められた規則に従って決定し、圧縮されたクラスタデータを転記先の物理アドレスに応じて記憶媒体に書き込むよう制御するとともに、論理アドレスと転記先の物理アドレスとの対応を記憶部に書き込むよう制御する転記制御部と、を有することを特徴とする。
また、第1の実施の形態にかかるデータ記憶装置のコントローラは、さらに、書込制御部が、クラスタデータを圧縮部により圧縮させるか否かを、予め定められた規則に従って制御し、読込制御部が、クラスタデータを展開部に展開させるか否かを、予め定められた規則に従って制御し、転記制御部が、クラスタデータを展開部に展開させるか否かを、予め定められた規則に従って制御し、クラスタデータを圧縮部により圧縮させるか否かを、予め定められた規則に従って制御することを特徴とする。
また、第1の実施の形態にかかるデータ記憶装置のコントローラは、さらに、記憶媒体が、複数のページからなるブロックを含み、書込制御部が、ブロックを管理する管理単位内で物理アドレスが連続する複数のページにまたがってクラスタデータを記憶媒体に書き込むよう制御し、読込制御部が、ブロックを管理する管理単位内で物理アドレスが連続する複数のページにまたがってクラスタデータが書き込まれている場合、連続する複数のページを合わせて読込んでクラスタデータを抽出するよう制御し、転記制御部が、ブロックを管理する管理単位内で物理アドレスが連続する複数のページにまたがってクラスタデータが書き込まれている場合、連続する複数のページを合わせて読込んでクラスタデータを抽出するよう制御し、ブロックを管理する管理単位内で物理アドレスが連続する複数のページにまたがってクラスタデータを記憶媒体に書き込むよう制御することを特徴とする。
以降、より詳細な一例を説明する。図1は、第1の実施の形態にかかるデータ記憶装置100の構成の一例を示すブロック図である。図1に示すように、データ記憶装置100は、コントローラ110と、記憶媒体アクセス部101と、第1アクセス部102と、第2アクセス部103と、圧縮部104と、展開部105と、インタフェース部106と、記憶媒体151と、第1メモリ152と、第2メモリ153と、を有する。
(記憶媒体151)
記憶媒体151は、例えばNAND型フラッシュメモリのような半導体記憶媒体である。記憶媒体151は、図2に示すように複数のブロック400を有する。ブロック400は、例えば半導体記憶媒体におけるデータの読み書き処理を行う単位の1つである。例えば、記憶媒体151は、ブロック400ごとに消去処理を行う。
また、図2に示すように、ブロック400は、複数のページ402を有する。ページ402は、記憶媒体151と記憶媒体151の外部(例えば記憶媒体アクセス部101)とのデータの入出力単位である。ブロック400における各ページ402には、連続するページ番号(通し番号)が付与されている。また、記憶媒体151へのデータの書き込み順番として、例えば、ページ番号の昇順に書き込むように定められている。つまり、記憶媒体151へのデータの書き込み手順としては、例えば、ブロック400の単位であらかじめ記録されているデータの消去処理を行った後に、ページ番号の昇順にデータを書き込むといったように定められている。
ページ402には、図3(a)に示すように、複数のクラスタセットが記憶される。クラスタセットには、クラスタデータと、誤り訂正データが含まれる。誤り訂正データを生成する基となるデータには、クラスタデータが含まれる。ここで、クラスタとは、データ記憶装置100の内部でのデータの単位である。また、クラスタを識別するアドレス情報を例えば論理アドレスとする。
クラスタのサイズは、例えば、1024バイトのように定められているが、これに限られるものではない。なお、クラスタセットの一部としてページ402に記憶されるクラスタデータは、圧縮されていてもよいし、圧縮されていなくてもよい。クラスタセットには、当該クラスタを示す情報であるメタデータがさらに含まれてもよい。メタデータは、例えば、当該クラスタの論理アドレスなどである。クラスタセットにメタデータが含まれる場合、誤り訂正データを生成する基となるデータにメタデータがさらに含まれる。また、クラスタセットにメタデータが含まれる場合、クラスタセットの一部としてページ402に記憶されるメタデータは、圧縮されていてもよいし、圧縮されていなくてもよい。第1の実施の形態では、クラスタセットにメタデータが含まれる場合を例に説明するが、これに限定されることなく、クラスタセットにはメタデータが含まれない構成であってもよい。
また、クラスタセットには、当該クラスタセットのサイズを示す情報であるクラスタセットサイズデータがさらに含まれていてもよい。なお、クラスタセットにクラスタセットサイズデータが含まれる場合、クラスタセットの一部としてページ402に記憶されるクラスタセットサイズデータは、圧縮されない。第1の実施の形態では、クラスタセットにクラスタセットサイズデータが含まれない場合を例に説明するが、これに限定されることなく、クラスタセットにクラスタセットサイズデータが含まれる構成であってもよい。
なお、ページ402に記憶されるクラスタセットの記憶フォーマットは、図3(a)に示す例に限られない。ページ402に記憶されるクラスタセットの記憶フォーマットは、クラスタセットに含まれる各データを適切に取り出すことができる予め定められた規則に従って記憶されるものであればよい。例えば、図3(a)に示すように、ページ402は、必ずしもメタデータ、クラスタデータ、誤り訂正データの順番で記憶される必要はない。
また、後述する物理的なアドレス情報が連続する2つのページ402は、ブロック400を管理する管理単位内であれば、図3(b)に示すように、1つのクラスタセットを記憶してもよい。すなわち、クラスタセットは、2つのページ402にまたがるように記憶されてもよい。なお、ページ402は、当該ページ402だけでクラスタセットを記憶する場合、クラスタセットを記憶していない領域にダミーデータを記憶するように構成されてもよい。ダミーデータは、予め定められた値(例えば全て0)でもよいし、ランダムな値でもよい。ここで、ページ402は、ダミーデータの代わりに誤り訂正データを記憶するように構成されてもよい。ページ402が誤り訂正データを記憶する場合、記憶媒体151が記憶するデータの信頼性を高めることが可能となる。また、ページ402は、クラスタセットの順番を適宜入れ替えて記憶することにより、ダミーデータを記憶する量を削減するように構成されてもよい。ページ402がダミーデータを記憶する量を削減する場合、記憶媒体151の利用効率を高めることが可能となる。
(記憶媒体アクセス部101)
記憶媒体アクセス部101(図1)は、記憶媒体151へデータを書き込むように指示を受けると、書き込み指示されたデータを記憶媒体151に対して入力し、書き込み処理を実行する。また、記憶媒体アクセス部101は、記憶媒体151が記憶するデータを読み込むように指示を受けると、指示されたデータを記憶媒体151から読み込み、読み込みを要求した要求元に対して読み込んだデータを返却する。
(第1メモリ152)
第1メモリ152は、管理情報を記憶する。管理情報には、アドレス正引きテーブル160が含まれる。アドレス正引きテーブル160は、クラスタの論理アドレスと、この論理アドレスが指し示すデータが格納されている記憶媒体151の物理的なアドレス情報(以下、単に物理アドレスと記すことがある)とを対応付けたテーブルである。また、第1メモリ152は、データ記憶装置100が行う様々な処理を簡単にするために、アドレス正引きテーブル160が含む情報から導出される情報を予め記憶するように構成されてもよい。
図3(a)を用いて説明したように、ページ402が複数のクラスタセットを記憶する場合、アドレス正引きテーブル160は、図4に示した論理アドレスを昇順に並べたものをテーブルのインデックスとする。そして、アドレス正引きテーブル160は、記憶媒体151の物理アドレスであるブロック番号情報、ページ番号情報及びページ上オフセット情報の組をテーブルの要素として記憶する。
また、アドレス正引きテーブル160は、記憶媒体151に記憶されているクラスタセットのサイズの情報を合わせて記憶する。なお、クラスタセットのサイズの情報は、必ずしもアドレス正引きテーブル160に記憶されている必要はない。例えば、前記メタデータがさらに、クラスタセットのクラスタセットサイズを示す情報を含むように構成されてもよい。
第1の実施の形態では、アドレス正引きテーブル160がクラスタセットのサイズの情報を含む場合を例に説明する。ただし、これに限定されることなく、アドレス正引きテーブル160は、クラスタセットのサイズの情報を含まない構成であってもよい。ここで、同一ブロック400の連続するページ番号のページ402が、図3(b)を用いて上述したブロック400を管理する管理単位内で物理アドレスが連続する2つのページ402に相当する。
例えば、ブロック番号66のページ番号34番のページが図3(b)の左側のページになり、同一ブロック(ブロック番号66)のページ番号35番のページが図3(b)の右側のページになる。この場合、ページをまたいで記憶された当該クラスタセットに関する物理アドレスは、ブロック番号情報が66、ページ番号情報が34、ページ上オフセット情報が当該クラスタセットの記憶開始位置となる。また、ページをまたいで記憶されたクラスタセットのデータが必要になった場合には、ブロック番号66のページ番号35においてページ上オフセットが0としてデータを読み込めばよいことになる。このように、物理アドレスが連続する2つのページ402は、ブロック400を管理する管理単位内であれば、1つのクラスタセットを記憶してもよい。
なお、アドレス正引きテーブル160の構成は、図4に示される構成に限られない。例えば、データ記憶装置100が複数の記憶媒体151を備え、記憶媒体151に並列アクセスして速度向上を図る場合、アドレス正引きテーブル160は、各記憶媒体151から選出したブロック群を束ねた論理ブロックを単位として種々の情報を対応付けるように構成されてもよい。また、アドレス正引きテーブル160は、論理ブロックを構成する複数のブロック400の同一ページ番号のページを束ねた論理ページを単位として種々の情報を対応付けるように構成されてもよい。
管理情報は、論理ブロック情報から論理ブロックを構成するブロック400の情報を導出するための論物変換表(図示せず)をさらに含むように構成されてもよい。また、管理情報は、記憶媒体151の物理アドレスとして、論理ブロック番号情報と、論理ページ番号情報と、論理ページ上オフセット情報とを含むように構成されてもよい。この場合、同一論理ページを構成する連続するページ、または、同一論理ブロックの連続する論理ページ番号のページが、図3(b)を用いて上述したブロック400を管理する管理単位内で物理アドレスが連続する2つのページ402に相当する。
前者については、例えば、ブロック番号5のブロック、ブロック番号97のブロック、ブロック番号36のブロック、ブロック番号104のブロックが論理ブロック番号49の論理ブロックを構成し、論理ページへのクラスタ書き込みの順番がこの順番であったとする。この時、例えば、論理ページ番号40番の論理ページにおいて、ブロック番号5のブロックのページ番号40のページが図3(b)の左側のページになり、ブロック番号97のブロックのページ番号40のページが図3(b)の右側のページになる。同一論理ページの連続するページをまたいで記憶された該クラスタセットに関する物理アドレスは、論理ブロック番号情報として49、論理ページ番号情報として40、論理ページ上オフセット情報として当該クラスタセットの記憶開始位置となる。また、同一論理ページの連続するページをまたいで記憶されたクラスタセットのデータが必要になった場合には、ブロック番号97のブロックのページ番号40においてページのオフセット0から読み込めばよいことになる。
また、後者については、例えば、論理ブロック番号66の論理ページ番号34番のページが図3(b)の左側のページになり、同一論理ブロック(論理ブロック番号66)の論理ページ番号35番のページが図3(b)の右側のページになる。この場合、論理ページをまたいで記憶された当該クラスタセットに関する物理アドレスは、論理ブロック番号情報として66、論理ページ番号情報として34、論理ページ上オフセット情報として当該クラスタセットの記憶開始位置となる。また、同一論理ページの連続するページをまたいで記憶されたクラスタセットのデータが必要になった場合には、論理ブロック番号66の論理ページ番号35において論理ページ上オフセット0から読み込めばよいことになる。したがって、物理アドレスが連続する2つのページ402は、ブロック400を管理する管理単位内であれば、1つのクラスタセットを記憶してもよい。
このように、アドレス正引きテーブル160の構成は種々変形可能である。第1の実施の形態では、アドレス正引きテーブル160が、記憶媒体151の物理アドレスとして、ブロック番号情報と、ページ番号情報と、ページ上オフセット情報とを含む場合を例に説明する。ただし、アドレス正引きテーブル160は、これに限定されることなく、他の構成であってもよい。
(第1アクセス部102)
第1アクセス部102(図1)は、第1メモリ152へデータを書き込むように指示を受けると、書き込みを指示されたデータを第1メモリ152に書き込む。また、第1アクセス部102は、第1メモリ152が記憶するデータを読み込むように指示を受けると、指示されたデータを第1メモリ152から読み込み、読み込みを要求した要求元に対して読み込んだデータを返却する。
(第2メモリ153)
第2メモリ153は、書き込み対象の複数のクラスタセットを一時記憶する。
(第2アクセス部103)
第2アクセス部103は、第2メモリ153へデータを書き込むように指示を受けると、書き込みを指示されたデータを第2メモリ153に書き込む。また、第2アクセス部103は、第2メモリ153が記憶するデータを読み込むように指示を受けると、指示されたデータを第2メモリ153から読み込み、読み込みを要求した要求元に対して読み込んだデータを返却する。
(圧縮部104)
圧縮部104は、データを圧縮する指示を受けると、指示されたデータを予め定められた方法で例えば可逆圧縮し、圧縮を要求した要求元に対して圧縮したデータを返却する。
(展開部105)
展開部105は、圧縮部104によって圧縮されたデータを展開する指示を受けると、指示されたデータを予め定められた方法で展開し、展開を要求した要求元に対して展開したデータを返却する。
(コントローラ110)
コントローラ110は、書込部111と、読込部112と、書込制御部113と、読込制御部114と、転記制御部115と、を有する。
(書込部111)
書込部111は、書込制御部113(又は転記制御部115)からクラスタの書き込み要求を受け付ける。クラスタの書き込み要求には、書き込み先情報と、書き込み対象のクラスタデータと、書き込み対象のクラスタの論理アドレスを示すデータが含まれる。書き込み先情報には、クラスタの書き込み先のブロック番号と、ページ番号と、ページ上オフセットの情報が含まれる。
書込部111は、受け付けたクラスタの書き込み要求から書き込み対象のクラスタデータを抽出する。書込部111は、抽出した書き込み対象のクラスタデータを圧縮部104に送信し、クラスタデータを圧縮することを圧縮部104に対して指示する。そして、書込部111は、圧縮部104が圧縮した書き込み対象のクラスタデータを取得する。なお、書込部111は、クラスタデータを圧縮する必要がない場合には、抽出した書き込み対象のクラスタデータを、圧縮部104に送信することなく、圧縮された書き込み対象のクラスタデータと同様に処理する(圧縮された書き込み対象のクラスタデータとみなす)ように構成されてもよい。例えば、書込部111は、抽出した書き込み対象のクラスタデータを圧縮した結果のサイズが圧縮前のサイズとあまり変わらない場合などには、圧縮による効果があまりないため、クラスタデータを圧縮する必要がなく、圧縮部104にクラスタデータを送信しないように構成されてもよい。
また、書込部111は、受け付けたクラスタの書き込み要求から書き込み対象のクラスタの論理アドレスを示すデータを抽出し、抽出した書き込み対象のクラスタの論理アドレスを示すデータを含むメタデータを生成する。なお、クラスタセットに含まれるメタデータを圧縮する場合は、書込部111は、生成したメタデータを圧縮部104に圧縮させ、圧縮されたメタデータを圧縮部104から取得し、以降、取得した圧縮されたメタデータを前記生成したメタデータに読み替えることができる。書込部111は、圧縮された書き込み対象のクラスタデータと、生成したメタデータを含むデータとを基にして、誤り訂正データを生成する。そして、書込部111は、圧縮された書き込み対象のクラスタデータと、生成したメタデータと、生成した誤り訂正データとを含むクラスタセットを生成する。
次に、書込部111は、生成したクラスタセットのサイズを算出する。そして、書込部111は、書き込み先のページに生成したクラスタセットが収まるか否かを判定する。より詳細には、書込部111は、書き込み先情報に含まれるページ上オフセットの情報と、算出したクラスタセットのサイズとを加算した結果が、ページサイズに収まっているか否かを判定する。
書込部111は、判定結果がYES(書き込み先のページに収まる)の場合、生成したクラスタセットを第2メモリ153が一時記憶するように、第2アクセス部103に対して書き込み指示を行う。また、書込部111は、書き込み要求を行った要求元(書込要求元)に対してクラスタセットのサイズの情報を返却する。
書込部111は、判定結果がNo(書き込み先のページに収まらない)の場合、書き込み要求を行った要求元に対して書き込み先のページあふれを示す応答を行う。また、書込部111は、書込要求元から次の書き込み先情報を受け付けると、生成したクラスタセットを第2メモリ153が一時記憶するように、第2アクセス部103に対して書き込み指示を行う。また、書込部111は、書込要求元に対してクラスタセットのサイズの情報を返却する。
また、書込部111は、書込要求元からダミーデータを記憶させる指示を受け付けると、書き込み先のページのクラスタセットを記憶していない領域のサイズ分のダミーデータを生成する。なお、ダミーデータは予め定められた値(例えば全て0)でもよいし、ランダムな値でもよい。そして、書込部111は、生成したダミーデータを第2メモリ153が一時記憶するように、第2アクセス部103に対して書き込み指示を行う。
ここで、書込部111は、ダミーデータの代わりに、第2メモリ153が一時記憶しているクラスタセットの誤り訂正データを生成するように構成されてもよい。第2メモリ153が一時記憶しているクラスタセットの誤り訂正データを生成する場合、記憶媒体151が記憶するデータの信頼性を高めることが可能となる。また、第2メモリ153は、クラスタセットの順番を適宜入れ替えて記憶することにより、ダミーデータを記憶する量を削減するように構成されてもよい。第2メモリ153がダミーデータを記憶する量を削減する場合、記憶媒体151の利用効率を高めることが可能となる。
書込部111は、第2メモリ153が一時記憶しているデータの合計サイズがページ402のサイズ以上になると、第2メモリ153からページサイズ分のデータを読み込むように、第2アクセス部103に対して読み込み指示を行う。そして、書込部111は、ページサイズ分のデータを取得する。より詳細には、書込部111は、第2メモリ153が一時記憶しているデータのうち、図3(b)の左側のページに記憶されるデータを読み込むように、第2アクセス部103に対して読み込み指示を行う。
データ記憶装置100が複数の記憶媒体151を備え、記憶媒体151に並列アクセスして速度向上を図る場合、第2メモリ153が一時記憶しているデータの合計サイズが並列書き込みするページ数のページ402のサイズ以上になると、第2メモリ153から並列書き込みするページ数分のサイズのデータを読み込むように、第2アクセス部103に対して読み込み指示を行う。
そして、書込部111は、第2アクセス部103を介して取得したページサイズ分(又は並列書き込みするページ数分のサイズ)のデータを、書き込み先のページ(又は並列書き込みする各ページ)に書き込むように、記憶媒体アクセス部101に対して書き込み指示を行う。
ここで、書き込み先のページは、図3(b)の左側のページである。書込部111は、書込要求元から受信した書き込み先情報に含まれるクラスタの書き込み先のブロック番号と、ページ番号を、記憶媒体アクセス部101に指示する。書込部111は、書き込み先のページの書き込み完了通知を書込要求元に通知する。また、書込部111は、書込要求元から受信した書き込み先情報に含まれる、クラスタの書き込み先のブロック番号と、ページ番号を、書込要求元に通知する。
第1の実施の形態では、ホスト装置から書き込み要求されたデータを書き込むブロック400と、転記先のブロック400とは異なるように構成されている。よって、書込部111は、書込要求元が転記制御部115である場合、書込要求元が書込制御部113である場合の処理と同様の処理を別の書き込み先のページに対して行う。
なお、書込部111は、ホスト装置から書き込み要求されたデータを書き込むブロック400と、転記先のブロック400とを同じにする構成であってもよい。例えば、書込部111は、書込制御部113から書き込み要求されても、転記制御部115から書き込み要求されても、同一の書き込み先のページに対して上述した処理を行う。
(読込部112)
読込部112は、読み込み要求元からクラスタの読み込み要求を受け付ける。クラスタの読み込み要求には、読み込み先情報と、読み込み対象のクラスタの論理アドレスを示すデータが含まれる。読み込み先情報には、ブロック番号と、ページ番号と、ページ上オフセットの情報と、クラスタセットサイズの情報と、が含まれる。なお、当該読み込み対象のクラスタセットがページをまたがって記憶されている場合は、読込部112は、連続する読み込み先ページの情報をあわせて受け付ける。連続する読み込み先ページの情報には、ブロック番号と、ページ番号と、が含まれる。
読込部112は、取得した読み込み先情報から、ブロック番号と、ページ番号を抽出し、抽出したブロック番号のブロック400において、抽出したページ番号のページ402のデータを読み込むように、記憶媒体アクセス部101に対して読み込み指示を行う。そして、読込部112は、記憶媒体アクセス部101から当該ページのデータを取得する。読み込み対象のクラスタセットがページをまたがって記憶されている場合は、読込部112は、取得した連続する読み込み先ページの情報から、ブロック番号と、ページ番号を抽出し、抽出したブロック番号のブロック400において、抽出したページ番号のページ402のデータを読み込むように、記憶媒体アクセス部101に指示に対して読み込み指示を行う。そして、読込部112は、記憶媒体アクセス部101から当該ページのデータをさらに取得する。
また、読込部112は、取得した読み込み先情報から、ページ上オフセットの情報と、クラスタセットサイズの情報を抽出する。読込部112は、取得したページにおいて、抽出したページ上オフセットの情報が示す位置を読込み開始位置として、抽出したクラスタセットサイズの情報が示すサイズのデータを抽出する。読み込み対象のクラスタセットがページをまたがって記憶されている場合は、当該クラスタセットの残りのサイズ分のデータを、連続する読み込み先ページの先頭の位置から抽出し、先に抽出したデータと合わせてクラスタセットのデータとする。
読込部112は、クラスタセットのデータを誤り訂正し、誤り訂正後のクラスタセットのデータを取得する。より詳細には、読込部112は、クラスタセットのデータ内で、メタデータとクラスタデータとを含むデータを、誤り訂正データを生成するための基のデータであるとする。また、読込部112は、クラスタセットのデータを誤り訂正して、誤り訂正後のクラスタセットのデータを取得する。ここで、読込部112は、誤り訂正を失敗した(誤り訂正不能だった)場合は、読み込みエラーを読み込み要求元に通知する。
読込部112は、誤り訂正が成功した(誤り訂正可能だった)場合には、誤り訂正後のクラスタセットのデータからクラスタデータを抽出する。読込部112は、抽出したクラスタデータを展開部105に送信し、展開部105に対して抽出したクラスタデータを展開するように指示する。そして、読込部112は、展開部105が展開したクラスタデータを取得する。
なお、読込部112は、クラスタデータを展開する必要がない場合には、抽出したクラスタデータを展開部105に送信することなく、抽出したクラスタデータを展開されたクラスタデータと同様に処理するように構成されてもよい。例えば、クラスタデータが圧縮されずに記憶媒体151に記憶されていた場合、読込部112は、抽出したクラスタデータを展開部105に送信することなく、抽出したクラスタデータを展開されたクラスタデータと同様に処理する。そして、読込部112は、展開されたクラスタデータ(又は展開する必要がない抽出したクラスタデータ)を読み込み要求元に送信する。
(インタフェース部106)
インタフェース部106は、例えばPC(Personal Computer)などの図示しないホスト装置から、書き込み命令及び読み込み命令などの命令を受け付ける。書き込み命令には、データ記憶装置アドレス情報及び書き込みデータが含まれる。読み込み命令には、データ記憶装置アドレス情報が含まれる。データ記憶装置アドレス情報は、データ記憶装置100が図示しないホスト装置に対して提供するアドレス情報である。例えば、HDD(Hard Disk Drive)又はSSDのデータ記憶装置アドレス情報の例として、LBA(Logical Block Address)がある。LBAで特定されるデータのサイズは、例えば、512バイトのように定められている。データ記憶装置アドレスで特定されるデータのサイズと、論理アドレスで特定されるデータ(クラスタ)のサイズとは、前述したように一般に異なっている。しかし、データ記憶装置アドレスと論理アドレスは相互に変換可能である。例えば、データ記憶装置アドレス情報が512バイトごとに割り当てられ、論理アドレスが1024バイトごとに割り当てられている場合、データ記憶装置アドレス情報を2で除算して商を求めることにより、データ記憶装置アドレス情報を論理アドレスに変換することができる。第1の実施の形態では、説明の簡単化のために、データ記憶装置アドレスで特定されるデータのサイズと、クラスタのサイズとが同じである場合を例に説明する。ただし、これに限定されることなく、データ記憶装置100は、データ記憶装置アドレスで特定されるデータのサイズと、クラスタのサイズとが異なるものであってもよい。
インタフェース部106は、受け付けた命令が書き込み命令である場合、書込制御部113に対して受け付けた書き込み命令を転送する。また、インタフェース部106は、受け付けた命令が読み込み命令である場合、読込制御部114に対して受け付けた読み込み命令を転送する。インタフェース部106は、読込制御部114からデータを受信すると、受信したデータを図示しないホスト装置に転送する。
(書込制御部113)
書込制御部113は、インタフェース部106から書き込み命令を受け取ると、受け取った書き込み命令から、データ記憶装置アドレス情報及び書き込みデータを抽出する。そして、書込制御部113は、抽出したデータ記憶装置アドレス情報を、対応する論理アドレスに変換する。また、書込制御部113は、書込部111に対する前回のクラスタ書き込み要求において送信した書き込み先情報を、書込部111に対する前回のクラスタ書き込み要求において書込部111から返信されたクラスタセットのサイズ分だけずらして書き込み先情報を生成する。
書込部111に対する前回のクラスタ書き込み要求において送信した書き込み先情報には、図4に示すように、クラスタの書き込み先のブロック番号と、ページ番号と、ページ上オフセットの情報が含まれる。書込制御部113は、ページ上オフセットの情報に対し、書込部111に対する前回のクラスタ書き込み要求において書込部111から返信されたクラスタセットのサイズの情報が示すクラスタセットのサイズを加算することにより、書き込み先情報を生成する。
書込部111に対する前回のクラスタ書き込み要求において、書込部111に次の書き込み先情報を与えた(クラスタがページをまたがって記憶された)場合には、書込制御部113は、次の書き込み先情報にクラスタセットの残りのサイズ分だけずらした書き込み先情報を生成する。次の書き込み先情報には、クラスタの書き込み先のブロック番号と、ページ番号と、ページの先頭の位置を示すページ上オフセットの情報が含まれる。書込制御部113は、ページ上オフセットの情報に対し、クラスタセットの残りのサイズを加算することにより、書き込み先情報を生成する。
なお、図示しないホスト装置から書き込み要求されたデータを書き込むブロック400と、転記先のブロック400とが同じになる構成である場合、書込制御部113及び転記制御部115は、生成する書き込み先情報が重複しないように連携して処理を行う。書込制御部113は、生成した書き込み先情報と、書き込み対象のクラスタデータとする抽出した書き込みデータと、書き込み対象のクラスタを変換した論理アドレスとを、書込部111に送信し、書込部111に対して書き込みを指示する。
書込制御部113は、書込部111から書き込み先のページあふれを示す応答を受け取ると、ブロック400を管理する同一の管理単位内で物理アドレスが連続する場合には、次の書き込み先情報を書込部111に与える。書込制御部113は、ダミーデータを書き込む指示を書込部111に対して行うことがある。例えば、書込制御部113は、ブロック400を管理する同一の管理単位内で物理アドレスが連続しない場合以外にも、適宜、ダミーデータを書き込む指示を書込部111に対して行ってもよい。なお、書込制御部113は、ダミーデータを書き込む指示を書込部111に行った場合、当該書き込み対象のクラスタデータを書き込むために、新たな書き込み先ページを確保して、書込み処理をやり直す。そして、書込制御部113は、書込部111からクラスタセットのサイズを受信する。
書込制御部113は、書込部111から、書き込み完了通知を受信すると、当該ページに書き込まれたクラスタについて、アドレス正引きテーブル160を更新する。より詳細には、書込制御部113は、当該ページに書き込まれたクラスタについて、アドレス正引きテーブル160における変換した論理アドレスが示す記憶媒体151の物理アドレスを、書き込み先の記憶媒体151の物理アドレスに更新するように、第1アクセス部102に対して書き込み指示を行う。
また、書込制御部113は、当該ページに書き込まれたクラスタについて、書込部111から取得したクラスタセットのサイズの情報を、アドレス正引きテーブル160に書き込むように、第1アクセス部102に対して書き込み指示を行う(図4参照)。
(読込制御部114)
読込制御部114は、インタフェース部106から読み込み命令を受け取ると、受け取った読み込み命令からデータ記憶装置アドレス情報を抽出する。読込制御部114は、抽出したデータ記憶装置アドレス情報を、対応する論理アドレスに変換する。読込制御部114は、変換した論理アドレスに対応付けられている情報を取得する。より詳細には、読込制御部114は、アドレス正引きテーブル160における変換された論理アドレスが示す記憶媒体151の物理アドレスと、クラスタセットのサイズの情報とを読み込むように、第1アクセス部102に対して読み込みの指示を行う。そして、読込制御部114は、物理アドレス及びクラスタセットのサイズの情報を取得する。
読込制御部114は、取得した物理アドレスに含まれるページ上オフセットの情報、及び取得したクラスタセットのサイズの情報を用いて、当該クラスタセットがページをまたがって記憶されているか否かを判断する。読込制御部114は、判断結果がYES(ページをまたがって記憶されている)の場合は、連続する読み込み先ページの情報を生成する。連続する読み込み先ページの情報には、ブロック番号と、ページ番号と、が含まれる。ここで、ブロック番号とページ番号とには、取得した物理アドレスに含まれるブロック番号と、ページ番号に連続する番号が新たに設定される。
例えば、同一ブロック400内の連続するページ番号のページが、図3(b)で説明したブロック400を管理する同一の管理単位内で物理アドレスが連続する場合に該当すると、ブロック番号及びページ番号に連続する番号が新たに設定される。例えば、図3(b)の左側に示したページが、取得した物理アドレスがブロック番号66のページ番号34番のページであった場合、図3(b)の右側に示したページは、連続する読み込み先ページの情報が同一ブロック(ブロック番号66)のページ番号35番のページになる。
また、同一論理ページの連続するページ、又は同一論理ブロックの連続する論理ページ番号のページが、図3(b)で説明したブロック400を管理する同一の管理単位内で物理アドレスが連続する場合には次のようになる。例えば、ブロック番号5のブロック、ブロック番号97のブロック、ブロック番号36のブロック、ブロック番号104のブロックが論理ブロック番号49の論理ブロックを構成しており、論理ページへのクラスタ書き込み順番がこの順番であったとする。
前者については、例えば、図3(b)の左側に示したページが、取得した物理アドレスがブロック番号5のブロックのページ番号40のページを示している場合、図3(b)の右側に示したページは、連続する読み込み先ページの情報がブロック番号97のブロックのページ番号40のページになる。また、後者については、例えば、図3(b)の左側に示したページが、論理ブロック番号66の論理ページ番号34番のページであった場合、図3(b)の右側に示したページは、連続する読み込み先ページの情報が同一論理ブロック(論理ブロック番号66)の論理ページ番号35番のページになる。
読込制御部114は、取得した物理アドレス及び取得したクラスタセットのサイズの情報を読み込み先情報とし、変換した論理アドレスを読み込み対象のクラスタの論理アドレスとして、読込部112に対して読み込み指示を行う。なお、読み込み対象クラスタセットがページをまたがって記憶されている場合は、読込制御部114は、読込部112に対し、生成した連続する読み込み先ページの情報を合わせて送信する。
読込制御部114は、読込部112から読み込みエラーを通知されると、読み込みエラーを示すデータをインタフェース部106に送信する。なお、第1メモリ152は、当該論理アドレスを読み込むと読み込みエラーとなる旨の情報を管理情報のひとつとしてさらに記憶してもよい。このようにすることで、再度同じ論理アドレスに対して読み込み要求されたときに、すばやく読み込みエラーを返却することができる。読込制御部114は、読込部112から読み込んだデータを受信すると、受信したデータをインタフェース部106に送信する。
(転記制御部115)
データ記憶装置100は、データ記憶装置100が記憶しているデータを内部的に整理するために、適宜転記処理を実行する。転記制御部115は、予め定められた規則に従って、以下に述べる転記処理の制御をおこなう。まず、転記制御部115は、転記するクラスタを決定する。より詳細には、転記制御部115は、第1メモリ152が記憶する管理情報を読み込むように第1アクセス部102に対して読み込み指示を行って管理情報を取得する。転記制御部115は、任意の予め定められた方法を用いて、取得した管理情報から転記するクラスタを決定する。第1の実施の形態においては、転記するクラスタを決定する方法は公知のいずれの方法であってもよい。転記制御部115は、決定したクラスタの論理アドレスを取得した管理情報から抽出する。
次に、転記制御部115は、転記するクラスタを読み込む。より詳細には、転記制御部115は、抽出した論理アドレスに対応付けられている情報を取得する。例えば、転記制御部115は、アドレス正引きテーブル160において抽出した論理アドレスが示す記憶媒体151の物理アドレスと、クラスタセットのサイズの情報とを読み込むように、第1アクセス部102に対して読み込み指示を行う。そして、転記制御部115は、物理アドレス及びクラスタセットのサイズの情報を取得する。
転記制御部115は、取得した物理アドレスに含まれるページ上オフセットの情報と、取得したクラスタセットのサイズの情報とを用いて、当該クラスタセットがページをまたがって記憶されているか否かを判断する。転記制御部115は、判断結果がYES(ページをまたがって記憶されている)の場合は、連続する読み込み先ページの情報を生成する。連続する読み込み先ページの情報には、ブロック番号と、ページ番号と、が含まれる。ここで、ブロック番号とページ番号とには、取得した物理アドレスに含まれるブロック番号と、ページ番号に連続する番号とが新たに設定される。
例えば、同一ブロック400内の連続するページ番号のページが、図3(b)で説明したブロック400を管理する同一の管理単位内で物理アドレスが連続する場合に該当すると、ブロック番号及びページ番号に連続する番号が新たに設定される。例えば、図3(b)の左側に示したページが、取得した物理アドレスがブロック番号66のページ番号34番のページであった場合、図3(b)の右側に示したページは、連続する読み込み先ページの情報が同一ブロック(ブロック番号66)のページ番号35番のページになる。
また、同一論理ページの連続するページ、又は同一論理ブロックの連続する論理ページ番号のページが、図3(b)で説明したブロック400を管理する管理単位内で物理アドレスが連続する場合には次のようになる。例えば、ブロック番号5のブロック、ブロック番号97のブロック、ブロック番号36のブロック、ブロック番号104のブロックが論理ブロック番号49の論理ブロックを構成しており、論理ページへのクラスタ書き込み順番がこの順番であったとする。
前者については、例えば、図3(b)の左側に示したページが、取得した物理アドレスがブロック番号5のブロックのページ番号40のページを示している場合、図3(b)の右側に示したページは、連続する読み込み先ページの情報がブロック番号97のブロックのページ番号40のページになる。また、後者については、例えば、図3(b)の左側に示したページが、論理ブロック番号66の論理ページ番号34番のページであった場合、図3(b)の右側に示したページは、連続する読み込み先ページの情報が同一論理ブロック(論理ブロック番号66)の論理ページ番号35番のページになる。
転記制御部115は、取得した物理アドレス及び取得したクラスタセットのサイズの情報を読み込み先情報とし、変換した論理アドレスを読み込み対象のクラスタの論理アドレスとして、読込部112に対して読み込み指示を行う。なお、読み込み対象クラスタセットがページをまたがって記憶されている場合は、転記制御部115は、読込部112に対し、生成した連続する読み込み先ページの情報を合わせて送信する。
転記制御部115は、読込部112から読み込みエラーを通知されると、転記処理後も当該クラスタを読み込むとエラーとなるように整合性を担保する処理を行う。例えば、転記制御部115は、読み込みエラーとなったクラスタデータを読み込みエラーとなる状態のまま転記してもよい。また、転記制御部115は、第1メモリ152が有する管理情報に対し、当該論理アドレスを読み込むと読み込みエラーとなる旨の情報を含ませ、読み込みエラーとなったクラスタデータは転記しないように構成されてもよい。
次に、転記制御部115は、読込部112が読み込んだデータを受信する。そして、転記制御部115は、転記するクラスタの書き込みを行う。より詳細には、転記制御部115は、書込部111に対する前回のクラスタ書き込み要求において送信した書き込み先情報を、書込部111に対する前回のクラスタ書き込み要求において書込部111から返信されたクラスタセットのサイズの情報が示すクラスタセットのサイズ分だけずらした書き込み先情報を生成する。書込部111に対する前回のクラスタ書き込み要求において送信した書き込み先情報には、クラスタの書き込み先のブロック番号と、ページ番号と、ページ上オフセットの情報が含まれる。転記制御部115は、ページ上オフセットの情報に対し、書込部111に対する前回のクラスタ書き込み要求において書込部111から返信されたクラスタセットのサイズの情報が示すクラスタセットのサイズを加算することで、当該書き込み先情報を生成する。
なお、書込部111に対する前回のクラスタ書き込み要求において、書込部111に次の書き込み先情報を与えた(クラスタがページをまたがって記憶された)場合は、次の書き込み先情報にクラスタセットの残りのサイズ分だけずらした書き込み先情報を生成する。次の書き込み先情報には、クラスタの書き込み先のブロック番号と、ページ番号と、ページの先頭の位置を示すページ上オフセットの情報が含まれる。転記制御部115は、ページ上オフセットの情報に対し、クラスタセットの残りのサイズを加算することで、当該書き込み先情報を生成する。
なお、ホスト装置から書き込み要求されたデータを書き込むブロック400と、転記先のブロック400とが同じ構成である場合、書込制御部113及び転記制御部115は、生成する書き込み先情報が重複しないように連携して処理を行う。転記制御部115は、生成した書き込み先情報と、転記対象のクラスタデータとして読込部112から受信したデータと、抽出した論理アドレスとを、書込部111に対して送信する。そして、書込制御部113は、書込部111に対して書き込み指示を行う。
転記制御部115は、書込部111から書き込み先のページあふれを示す応答を受け取ると、ブロック400を管理する同一の管理単位内で物理アドレスが連続する場合には、次の書き込み先情報を書込部111に対して出力する。転記制御部115は、ダミーデータを書き込む指示を書込部111に対して行うことがある。
例えば、転記制御部115は、ブロック400を管理する同一の管理単位内で物理アドレスが連続しない場合以外にも、適宜、ダミーデータを書き込む指示を書込部111に対して行ってもよい。なお、転記制御部115は、ダミーデータを書き込む指示を書込部111に行った場合、該書き込み対象のクラスタデータを書き込むために、新たな書き込み先ページを確保して書き込み処理をやり直す。
次に、転記制御部115は、書込部111からクラスタセットのサイズを受信する。転記制御部115は、書込部111への書き込み要求が少なくとも1ページ分になるまで上記処理を繰り返す。記憶媒体151の入出力単位がページ402であるので、転記制御部115は、少なくとも1ページ分の書き込みを行わなければ後述する管理情報の更新処理を行うことができない。つまり、転記処理が完了しないからである。
転記制御部115は、転記したクラスタの管理情報を更新する。より詳細には、転記制御部115は、書込部111から書き込み完了通知を受信すると、当該ページに書き込まれたクラスタについて、アドレス正引きテーブル160を更新する。転記制御部115は、当該ページに書き込まれたクラスタについて、アドレス正引きテーブル160において抽出した論理アドレスが示す記憶媒体151の物理アドレスを、書き込み先の記憶媒体151の物理アドレスに更新するように、第1アクセス部102に書き込みの指示を行う。
また、転記制御部115は、当該ページに書き込まれたクラスタについて、書込部111から取得したクラスタセットのサイズの情報をアドレス正引きテーブル160に記憶させるように、第1アクセス部102に対して書き込みの指示を行う。
転記制御部115は、任意の予め定められた方法に従って上記処理を繰り返す。
なお、データ記憶装置100は、インタフェース部106がデータを受入れる速度などに応じて、圧縮部104が圧縮を行うか否かを切替えるように構成されてもよい。例えば、データ記憶装置100は、圧縮部104が圧縮を行うとインタフェース部106が受入れ可能なデータの速度が低下する場合には、圧縮部104が圧縮を行わないよう制御する。また、データ記憶装置100は、圧縮部104が圧縮を行っていないデータを読込制御部114が記憶媒体151などから読み込む場合には、展開部105が展開を行わないように構成されてもよい。
次に、第1の実施の形態のデータ記憶装置100の動作について説明する。まず、図示しないホスト装置からの書き込み命令に応じて、データ記憶装置100が行う書き込み処理の手順について、図5を参照して説明する。図5は、データ記憶装置100が行う書き込み処理の手順の一例を示すフローチャートである。
(書き込み処理)
ステップ100(S100)において、データ記憶装置100は、外部のホスト装置(図示せず)などから書き込み命令及び読み込み命令を含む命令を受け付ける。より詳細には、インタフェース部106は、図示しないホスト装置から、書き込み命令を受け付ける。書き込み命令には、データ記憶装置アドレス情報及び書き込みデータが含まれる。読み込み命令には、データ記憶装置アドレス情報が含まれる。データ記憶装置アドレス情報は、データ記憶装置100が図示しないホスト装置に対して提供するアドレス情報である。
例えば、HDD(Hard Disk Drive)又はSSDのデータ記憶装置アドレス情報の例として、LBA(Logical Block Address)がある。LBAで特定されるデータのサイズは、例えば、512バイトのように定められている。データ記憶装置アドレスで特定されるデータのサイズと、論理アドレスで特定されるデータ(クラスタ)のサイズとは、前述したように一般に異なっている。しかし、データ記憶装置アドレスと論理アドレスは相互に変換可能である。例えば、データ記憶装置アドレス情報が512バイトごとに割り当てられ、論理アドレスが1024バイトごとに割り当てられている場合、データ記憶装置アドレス情報を2で除算して商を求めることにより、データ記憶装置アドレス情報を論理アドレスに変換することができる。
第1の実施の形態では、説明の簡単化のために、データ記憶装置アドレスで特定されるデータのサイズと、クラスタのサイズとが同じである場合を例に説明する。ただし、これに限定されることなく、データ記憶装置100は、データ記憶装置アドレスで特定されるデータのサイズと、クラスタのサイズとが異なるものであってもよい。インタフェース部106は、受け付けた命令が書き込み命令であった場合、書込制御部113に受け付けた書き込み命令を転送する。
ステップ102(S102)において、書込制御部113は、書き込み先情報を生成する。より詳細には、書込制御部113は、インタフェース部106から書き込み命令を受け取ると、受け取った書き込み命令から、データ記憶装置アドレス情報及び書き込みデータを抽出する。そして、書込制御部113は、抽出したデータ記憶装置アドレス情報を、対応する論理アドレスに変換する。また、書込制御部113は、書込部111に対する前回のクラスタ書き込み要求において送信した書き込み先情報を、書込部111に対する前回のクラスタ書き込み要求において書込部111から返信されたクラスタセットのサイズ分だけずらして書き込み先情報を生成する。
より詳細には、書込部111に対する前回のクラスタ書き込み要求において送信した書き込み先情報には、図4に示すように、クラスタの書き込み先のブロック番号と、ページ番号と、ページ上オフセットの情報が含まれる。書込制御部113は、ページ上オフセットの情報に対し、書込部111に対する前回のクラスタ書き込み要求において書込部111から返信されたクラスタセットのサイズの情報が示すクラスタセットのサイズを加算することにより、書き込み先情報を生成する。書込部111に対する前回のクラスタ書き込み要求において、書込部111に次の書き込み先情報を与えた(クラスタがページをまたがって記憶された)場合には、書込制御部113は、次の書き込み先情報にクラスタセットの残りのサイズ分だけずらした書き込み先情報を生成する。
より詳細には、次の書き込み先情報には、クラスタの書き込み先のブロック番号と、ページ番号と、ページの先頭の位置を示すページ上オフセットの情報が含まれる。書込制御部113は、ページ上オフセットの情報に対し、クラスタセットの残りのサイズを加算することにより、書き込み先情報を生成する。なお、図示しないホスト装置から書き込み要求されたデータを書き込むブロック400と、転記先のブロック400とが同じになる構成である場合、書込制御部113及び転記制御部115は、生成する書き込み先情報が重複しないように連携して処理を行う。書込制御部113は、生成した書き込み先情報と、書き込み対象のクラスタデータとする抽出した書き込みデータと、書き込み対象のクラスタを変換した論理アドレスとを、書込部111に送信し、書込部111に対して書き込みを指示する。書込部111は、書込制御部113からクラスタの書き込み要求を受け付ける。クラスタの書き込み要求には、書き込み先情報と、書き込み対象のクラスタデータと、書き込み対象のクラスタの論理アドレスを示すデータが含まれる。書き込み先情報には、クラスタの書き込み先のブロック番号と、ページ番号と、ページ上オフセットの情報が含まれる。
ステップ104(S104)において、書込部111は、(必要に応じて)圧縮部104に対して圧縮する指示を送信する。より詳細には、書込部111は、受け付けたクラスタの書き込み要求から書き込み対象のクラスタデータを抽出する。書込部111は、抽出した書き込み対象のクラスタデータを、圧縮部104に送信して圧縮することを指示する。圧縮部104は、データを圧縮する指示を受けると、指示されたデータを予め定められた方法で例えば可逆圧縮し、圧縮を要求した要求元に対して圧縮したデータを返却する。そして、書込部111は、圧縮された書き込み対象のクラスタデータを圧縮部104から取得する。なお、書込部111は、クラスタデータを圧縮する必要がない場合には、抽出した書き込み対象のクラスタデータを、圧縮部104に送信することなく、圧縮された書き込み対象のクラスタデータと同様に処理する(圧縮された書き込み対象のクラスタデータとみなす)ように構成されてもよい。例えば、書込部111は、抽出した書き込み対象のクラスタデータを圧縮した結果のサイズが圧縮前のサイズとあまり変わらない場合などには、圧縮による効果があまりないため、クラスタデータを圧縮する必要がなく、圧縮部104にクラスタデータを送信しないように構成されてもよい。
ステップ106(S106)において、書込部111は、クラスタセットを生成する。より詳細には、書込部111は、受け付けたクラスタの書き込み要求から書き込み対象のクラスタの論理アドレスを示すデータを抽出し、抽出した書き込み対象のクラスタの論理アドレスを示すデータを含むメタデータを生成する。なお、クラスタセットに含まれるメタデータを圧縮する場合は、書込部111は、生成したメタデータを圧縮部104に圧縮させ、圧縮されたメタデータを圧縮部104から取得し、以降、取得した圧縮されたメタデータを前記生成したメタデータに読み替えることができる。書込部111は、圧縮された書き込み対象のクラスタデータと、生成したメタデータを含むデータとを基にして、誤り訂正データを生成する。そして、書込部111は、圧縮された書き込み対象のクラスタデータと、生成したメタデータと、生成した誤り訂正データとを含むクラスタセットを生成する。
ステップ108(S108)において、書込部111は、書き込み先のページに生成したクラスタセットが収まっているかを判定する。より詳細には、書込部111は、生成したクラスタセットのサイズを算出する。そして、書込部111は、書き込み先のページに生成したクラスタセットが収まるか否かを判定する。より詳細には、書込部111は、書き込み先情報に含まれるページ上オフセットの情報と、算出したクラスタセットのサイズとを加算した結果が、ページサイズに収まっているか否かを判定する。
ステップ110(S110)において、第2メモリ153は、書き込み対象の複数のクラスタセットを一時記憶する。より詳細には、書込部111は、S108の処理において判定結果がYES(書き込み先のページに収まる)の場合、生成したクラスタセットを第2メモリ153が一時記憶するように、第2アクセス部103に書き込み指示する。また、書込部111は、書込要求元にクラスタセットのサイズの情報を返却する。書込制御部113は、書込部111からクラスタセットのサイズを受信する。
ステップ112(S112)において、書込部111及び書込制御部113は、末端処理をする。より詳細には、書込部111は、S108の処理において判定結果がNO(書き込み先のページに収まらない)の場合、書き込み先のページあふれを示す応答を書込要求元に応答する。書込制御部113は、書込部111から書き込み先のページあふれを示す応答を受け取ると、ブロック400を管理する同一の管理単位内で物理アドレスが連続する場合には、次の書き込み先情報を書込部111に与える。書込部111は、書込要求元から次の書き込み先情報を受け付けると、生成したクラスタセットを第2メモリ153が一時記憶するように、第2アクセス部103に書き込み指示する。また、書込部111は、書込要求元にクラスタセットのサイズの情報を返却する。書込制御部113は、書込部111からクラスタセットのサイズを受信する。そして、S114の処理に進む。なお、書込制御部113は、ブロック400を管理する同一の管理単位内で物理アドレスが連続しない場合以外にも、適宜、ダミーデータを書き込む指示を書込部111に対して行ってもよい。また、書込部111は、書込要求元からダミーデータを記憶させる指示を受け付けると、書き込み先のページのクラスタセットを記憶していない領域のサイズ分のダミーデータを生成する。なお、ダミーデータは予め定められた値(例えば全て0)でもよいし、ランダムな値でもよい。そして、書込部111は、生成したダミーデータを第2メモリ153が一時記憶するように、第2アクセス部103に対して書き込み指示を行う。
ここで、書込部111は、ダミーデータの代わりに、第2メモリ153が一時記憶しているクラスタセットの誤り訂正データを生成するように構成されてもよい。第2メモリ153が一時記憶しているクラスタセットの誤り訂正データを生成する場合、記憶媒体151が記憶するデータの信頼性を高めることが可能となる。また、第2メモリ153は、クラスタセットの順番を適宜入れ替えて記憶することにより、ダミーデータを記憶する量を削減するように構成されてもよい。第2メモリ153がダミーデータを記憶する量を削減する場合、記憶媒体151の利用効率を高めることが可能となる。なお、書込制御部113は、ダミーデータを書き込む指示を書込部111に与えた場合、書き込み対象のクラスタデータを書き込むために、新たな書き込み先ページを確保し、上記処理をS102からやり直す。
ステップ114(S114)において、書込部111は、第2メモリ153が一時記憶しているデータの合計サイズが1ページ分以上になったか否かを判定する。書込部111は、第2メモリ153が一時記憶しているデータの合計サイズがページ402のサイズ以上になっていない場合(S114:No)は、S100の処理に進む。また、書込部111は、第2メモリ153が一時記憶しているデータの合計サイズがページ402のサイズ以上になった場合(S114:Yes)は、S116の処理に進む。
ステップ116(S116)において、書込部111は、記憶媒体アクセス部101を介して1ページ分のデータを記憶媒体151に書き込む。より詳細には、書込部111は、第2メモリ153が一時記憶しているデータの合計サイズがページ402のサイズ以上になると、第2メモリ153からページサイズ分のデータを読み込むように、第2アクセス部103に対して読み込み指示を行う。そして、書込部111は、ページサイズ分のデータを取得する。より詳細には、書込部111は、第2メモリ153が一時記憶しているデータのうち、図3(b)の左側のページに記憶されるデータを読み込むように、第2アクセス部103に対して読み込み指示を行う。
データ記憶装置100が複数の記憶媒体151を備え、記憶媒体151に並列アクセスして速度向上を図る場合、第2メモリ153が一時記憶しているデータの合計サイズが並列書き込みするページ数のページ402のサイズ以上になると、第2メモリ153から並列書き込みするページ数分のサイズのデータを読み込むように、第2アクセス部103に対して読み込み指示を行う。
そして、書込部111は、第2アクセス部103を介して取得したページサイズ分(又は並列書き込みするページ数分のサイズ)のデータを、書き込み先のページ(又は並列書き込みする各ページ)に書き込むように、記憶媒体アクセス部101に対して書き込み指示を行う。
ここで、書き込み先のページは、図3(b)の左側のページである。書込部111は、書込要求元から受信した書き込み先情報に含まれるクラスタの書き込み先のブロック番号と、ページ番号を、記憶媒体アクセス部101に指示する。記憶媒体アクセス部101は、記憶媒体151へデータを書き込むように指示を受けると、書き込み指示されたデータを記憶媒体151に対して入力し、書き込み処理を実行する。
ステップ118(S118)において、書込制御部113は、管理情報を更新する。より詳細には、書込部111は、書き込み先のページの書き込み完了通知を書込要求元に通知する。ここで、書き込み先のページは、図3(b)の左側のページであり、書込要求元から受信した書き込み先情報に含まれるクラスタの書き込み先のブロック番号と、ページ番号を、書込要求元に通知する。書込制御部113は、書込部111から、書き込み完了通知を受信すると、当該ページに書き込まれたクラスタについて、アドレス正引きテーブル160を更新する。より詳細には、書込制御部113は、当該ページに書き込まれたクラスタについて、アドレス正引きテーブル160における変換した論理アドレスが示す記憶媒体151の物理アドレスを、書き込み先の記憶媒体151の物理アドレスに更新するように、第1アクセス部102に対して書き込み指示を行う。また、書込制御部113は、当該ページに書き込まれたクラスタについて、書込部111から取得したクラスタセットのサイズの情報を、アドレス正引きテーブル160に書き込むように、第1アクセス部102に対して書き込み指示を行う(図4参照)。
次に、図示しないホスト装置からの読み込み命令に応じて、データ記憶装置100が行う読み込み処理の手順について、図6を参照して説明する。図6は、データ記憶装置100が行う読み込み処理の手順の一例を示すフローチャートである。
(読み込み処理)
ステップ200(S200)において、データ記憶装置100は、外部のホスト装置(図示せず)などから、読み込み命令を受け付ける。より詳細には、インタフェース部106は、図示しないホスト装置から、書き込み命令及び読み込み命令を含む命令を受け付ける。書き込み命令には、データ記憶装置アドレス情報及び書き込みデータが含まれる。読み込み命令には、データ記憶装置アドレス情報が含まれる。データ記憶装置アドレス情報は、データ記憶装置100が図示しないホスト装置に提供するアドレス情報である。
例えば、HDD(Hard Disk Drive)又はSSDのデータ記憶装置アドレス情報の例として、LBA(Logical Block Address)がある。LBAで特定されるデータのサイズは、例えば、512バイトのように定められている。データ記憶装置アドレスで特定されるデータのサイズと、論理アドレスで特定されるデータ(クラスタ)のサイズとは、前述したように一般に異なっている。しかし、データ記憶装置アドレスと論理アドレスは相互に変換可能である。例えば、データ記憶装置アドレス情報が512バイトごとに割り当てられ、論理アドレスが1024バイトごとに割り当てられている場合、データ記憶装置アドレス情報を2で除算して商を求めることにより、データ記憶装置アドレス情報を論理アドレスに変換することができる。
第1の実施の形態では、説明の簡単化のために、データ記憶装置アドレスで特定されるデータのサイズと、クラスタのサイズとが同じである場合を例に説明する。ただし、これに限定されることなく、データ記憶装置100は、データ記憶装置アドレスで特定されるデータのサイズと、クラスタのサイズとが異なるものであってもよい。インタフェース部106は、受け付けた命令が読み込み命令であった場合、読込制御部114に受け付けた読み込み命令を転送する。
ステップ202(S202)において、読込制御部114は、読み込み先情報を生成する。より詳細には、読込制御部114は、インタフェース部106から読み込み命令を受け取ると、受け取った読み込み命令からデータ記憶装置アドレス情報を抽出する。読込制御部114は、抽出したデータ記憶装置アドレス情報を、対応する論理アドレスに変換する。読込制御部114は、変換した論理アドレスに対応付けられている情報を取得する。より詳細には、読込制御部114は、アドレス正引きテーブル160における変換された論理アドレスが示す記憶媒体151の物理アドレスと、クラスタセットのサイズの情報とを読み込むように、第1アクセス部102に対して読み込みの指示を行う。そして、読込制御部114は、物理アドレス及びクラスタセットのサイズの情報を取得する。読込制御部114は、取得した物理アドレスに含まれるページ上オフセットの情報、及び取得したクラスタセットのサイズの情報を用いて、当該クラスタセットがページをまたがって記憶されているか否かを判断する。読込制御部114は、判断結果がYES(ページをまたがって記憶されている)の場合は、連続する読み込み先ページの情報を生成する。より詳細には、連続する読み込み先ページの情報には、ブロック番号と、ページ番号と、が含まれる。ここで、ブロック番号とページ番号とには、取得した物理アドレスに含まれるブロック番号と、ページ番号に連続する番号が新たに設定される。
例えば、同一ブロック400内の連続するページ番号のページが、図3(b)で説明したブロック400を管理する同一の管理単位内で物理アドレスが連続する場合に該当すると、ブロック番号及びページ番号に連続する番号が新たに設定される。例えば、図3(b)の左側に示したページが、取得した物理アドレスがブロック番号66のページ番号34番のページであった場合、図3(b)の右側に示したページは、連続する読み込み先ページの情報が同一ブロック(ブロック番号66)のページ番号35番のページになる。また、同一論理ページの連続するページ、又は同一論理ブロックの連続する論理ページ番号のページが、図3(b)で説明したブロック400を管理する同一の管理単位内で物理アドレスが連続する場合には次のようになる。例えば、ブロック番号5のブロック、ブロック番号97のブロック、ブロック番号36のブロック、ブロック番号104のブロックが論理ブロック番号49の論理ブロックを構成しており、論理ページへのクラスタ書き込み順番がこの順番であったとする。
前者については、例えば、図3(b)の左側に示したページが、取得した物理アドレスがブロック番号5のブロックのページ番号40のページを示している場合、図3(b)の右側に示したページは、連続する読み込み先ページの情報がブロック番号97のブロックのページ番号40のページになる。また、後者については、例えば、図3(b)の左側に示したページが、論理ブロック番号66の論理ページ番号34番のページであった場合、図3(b)の右側に示したページは、連続する読み込み先ページの情報が同一論理ブロック(論理ブロック番号66)の論理ページ番号35番のページになる。
ステップ204(S204)において、読込制御部114は、読込部112を介して読み込み対象データを読み込む。より詳細には、読込制御部114は、取得した物理アドレス及び取得したクラスタセットのサイズの情報を読み込み先情報とし、変換した論理アドレスを読み込み対象のクラスタの論理アドレスとして、読込部112に対して読み込み指示を行う。なお、読み込み対象クラスタセットがページをまたがって記憶されている場合は、読込制御部114は、読込部112に対し、生成した連続する読み込み先ページの情報を合わせて送信する。
読込部112は、読み込み要求元からクラスタの読み込み要求を受け付ける。クラスタの読み込み要求には、読み込み先情報と、読み込み対象のクラスタの論理アドレスを示すデータが含まれる。読み込み先情報には、ブロック番号と、ページ番号と、ページ上オフセットの情報と、クラスタセットサイズの情報と、が含まれる。なお、当該読み込み対象のクラスタセットがページをまたがって記憶されている場合は、読込部112は、連続する読み込み先ページの情報をあわせて受け付ける。連続する読み込み先ページの情報には、ブロック番号と、ページ番号と、が含まれる。
読込部112は、取得した読み込み先情報から、ブロック番号と、ページ番号を抽出し、抽出したブロック番号のブロック400において、抽出したページ番号のページ402のデータを読み込むように、記憶媒体アクセス部101に対して読み込み指示を行う。そして、読込部112は、記憶媒体アクセス部101から当該ページのデータを取得する。
読み込み対象のクラスタセットがページをまたがって記憶されている場合は、読込部112は、取得した連続する読み込み先ページの情報から、ブロック番号と、ページ番号を抽出し、抽出したブロック番号のブロック400において、抽出したページ番号のページ402のデータを読み込むように、記憶媒体アクセス部101に指示に対して読み込み指示を行う。そして、読込部112は、記憶媒体アクセス部101から当該ページのデータをさらに取得する。読込部112は、取得した読み込み先情報から、ページ上オフセットの情報と、クラスタセットサイズの情報を抽出する。読込部112は、取得したページにおいて、抽出したページ上オフセットの情報が示す位置を読込み開始位置として、抽出したクラスタセットサイズの情報が示すサイズのデータを抽出する。読み込み対象のクラスタセットがページをまたがって記憶されている場合は、当該クラスタセットの残りのサイズ分のデータを、連続する読み込み先ページの先頭の位置から抽出し、先に抽出したデータと合わせてクラスタセットのデータとする。
ステップ206(S206)において、読込制御部114は、読み込み対象データを展開部105により展開してホスト装置に返却する。より詳細には、読込部112は、クラスタセットのデータを誤り訂正し、誤り訂正後のクラスタセットのデータを取得する。より詳細には、読込部112は、クラスタセットのデータ内で、メタデータとクラスタデータとを含むデータを、誤り訂正データを生成するための基のデータであるとする。また、読込部112は、クラスタセットのデータを誤り訂正して、誤り訂正後のクラスタセットのデータを取得する。
ここで、読込部112は、誤り訂正を失敗した(誤り訂正不能だった)場合は、読み込みエラーを読み込み要求元に通知する。読込制御部114は、読込部112から読み込みエラーを通知されると、読み込みエラーを示すデータをインタフェース部106に送信する。なお、第1メモリ152は、当該論理アドレスを読み込むと読み込みエラーとなる旨の情報を管理情報のひとつとしてさらに記憶してもよい。インタフェース部106は、読込制御部114からデータ(読み込みエラーを示すデータ)を受信すると、受信したデータ(読み込みエラーを示すデータ)を図示しないホスト装置に転送する。読込部112は、誤り訂正が成功した(誤り訂正可能だった)場合には、誤り訂正後のクラスタセットのデータからクラスタデータを抽出する。読込部112は、抽出したクラスタデータを展開部105に送信し、展開部105に対して抽出したクラスタデータを展開するように指示する。展開部105は、圧縮部104によって圧縮されたデータを展開する指示を受けると、指示されたデータを予め定められた方法で展開し、展開を要求した要求元に対して展開したデータを返却する。そして、読込部112は、展開部105が展開したクラスタデータを取得する。
なお、読込部112は、クラスタデータを展開する必要がない場合には、抽出したクラスタデータを展開部105に送信することなく、抽出したクラスタデータを展開されたクラスタデータと同様に処理するように構成されてもよい。例えば、クラスタデータが圧縮されずに記憶媒体151に記憶されていた場合、読込部112は、抽出したクラスタデータを展開部105に送信することなく、抽出したクラスタデータを展開されたクラスタデータと同様に処理する。そして、読込部112は、展開されたクラスタデータ(又は展開する必要がない抽出したクラスタデータ)を読み込み要求元に送信する。
読込制御部114は、読込部112から読み込んだデータを受信すると、受信したデータをインタフェース部106に送信する。インタフェース部106は、読込制御部114からデータを受信すると、受信したデータを図示しないホスト装置に転送する。
次に、データ記憶装置100が行う転記処理の手順について、図7を参照して説明する。図7は、データ記憶装置100が行う転記処理の手順の一例を示すフローチャートである。転記制御部115は、予め定められた規則に従って、図7に示す転記処理の制御をおこなう。
(転記処理)
ステップ300(S300)において、転記制御部115は、転記するクラスタを決定する。より詳細には、転記制御部115は、第1メモリ152が記憶する管理情報を読み込むように第1アクセス部102に対して読み込み指示を行って管理情報を取得する。転記制御部115は、任意の予め定められた方法を用いて、取得した管理情報から転記するクラスタを決定する。第1の実施の形態においては、転記するクラスタを決定する方法は公知のいずれの方法であってもよい。転記制御部115は、決定したクラスタの論理アドレスを取得した管理情報から抽出する。
ステップ302(S302)において、転記制御部115は、読み込み先情報を生成する。より詳細には、転記制御部115は、抽出した論理アドレスに対応付けられている情報を取得する。例えば、転記制御部115は、アドレス正引きテーブル160において抽出した論理アドレスが示す記憶媒体151の物理アドレスと、クラスタセットのサイズの情報とを読み込むように、第1アクセス部102に対して読み込み指示を行う。そして、転記制御部115は、物理アドレス及びクラスタセットのサイズの情報を取得する。転記制御部115は、取得した物理アドレスに含まれるページ上オフセットの情報と、取得したクラスタセットのサイズの情報とを用いて、当該クラスタセットがページをまたがって記憶されているか否かを判断する。転記制御部115は、判断結果がYES(ページをまたがって記憶されている)の場合は、連続する読み込み先ページの情報を生成する。連続する読み込み先ページの情報には、ブロック番号と、ページ番号と、が含まれる。
ここで、ブロック番号とページ番号とには、取得した物理アドレスに含まれるブロック番号と、ページ番号に連続する番号とが新たに設定される。例えば、同一ブロック400内の連続するページ番号のページが、図3(b)で説明したブロック400を管理する同一の管理単位内で物理アドレスが連続する場合に該当すると、ブロック番号及びページ番号に連続する番号が新たに設定される。例えば、図3(b)の左側に示したページが、取得した物理アドレスがブロック番号66のページ番号34番のページであった場合、図3(b)の右側に示したページは、連続する読み込み先ページの情報が同一ブロック(ブロック番号66)のページ番号35番のページになる。
また、同一論理ページの連続するページ、又は同一論理ブロックの連続する論理ページ番号のページが、図3(b)で説明したブロック400を管理する同一の管理単位内で物理アドレスが連続する場合には次のようになる。例えば、ブロック番号5のブロック、ブロック番号97のブロック、ブロック番号36のブロック、ブロック番号104のブロックが論理ブロック番号49の論理ブロックを構成しており、論理ページへのクラスタ書き込み順番がこの順番であったとする。
前者については、例えば、図3(b)の左側に示したページが、取得した物理アドレスがブロック番号5のブロックのページ番号40のページを示している場合、図3(b)の右側に示したページは、連続する読み込み先ページの情報がブロック番号97のブロックのページ番号40のページになる。また、後者については、例えば、図3(b)の左側に示したページが、論理ブロック番号66の論理ページ番号34番のページであった場合、図3(b)の右側に示したページは、連続する読み込み先ページの情報が同一論理ブロック(論理ブロック番号66)の論理ページ番号35番のページになる。
ステップ304(S304)において、転記制御部115は、読込部112を介して読み込み対象データを読み込む。転記制御部115は、取得した物理アドレスと、取得したクラスタセットのサイズの情報とを、読み込み先情報として、変換した論理アドレスを読み込み対象のクラスタの論理アドレスとして、読込部112に読み込み指示する。なお、読み込み対象クラスタセットがページをまたがって記憶されている場合は、転記制御部115は、読込部112に対し、生成した連続する読み込み先ページの情報を合わせて送信する。
読込部112は、読み込み要求元からクラスタの読み込み要求を受け付ける。クラスタの読み込み要求には、読み込み先情報と、読み込み対象のクラスタの論理アドレスを示すデータが含まれる。読み込み先情報には、ブロック番号と、ページ番号と、ページ上オフセットの情報と、クラスタセットサイズの情報と、が含まれる。なお、当該読み込み対象のクラスタセットがページをまたがって記憶されている場合は、読込部112は、連続する読み込み先ページの情報をあわせて受け付ける。連続する読み込み先ページの情報には、ブロック番号と、ページ番号と、が含まれる。
読込部112は、取得した読み込み先情報から、ブロック番号と、ページ番号を抽出し、抽出したブロック番号のブロック400において、抽出したページ番号のページ402のデータを読み込むように、記憶媒体アクセス部101に対して読み込み指示を行う。そして、読込部112は、記憶媒体アクセス部101から当該ページのデータを取得する。読み込み対象のクラスタセットがページをまたがって記憶されている場合は、読込部112は、取得した連続する読み込み先ページの情報から、ブロック番号と、ページ番号を抽出し、抽出したブロック番号のブロック400において、抽出したページ番号のページ402のデータを読み込むように、記憶媒体アクセス部101に指示に対して読み込み指示を行う。そして、読込部112は、記憶媒体アクセス部101から当該ページのデータをさらに取得する。
また、読込部112は、取得した読み込み先情報から、ページ上オフセットの情報と、クラスタセットサイズの情報を抽出する。読込部112は、取得したページにおいて、抽出したページ上オフセットの情報が示す位置を読込み開始位置として、抽出したクラスタセットサイズの情報が示すサイズのデータを抽出する。読み込み対象のクラスタセットがページをまたがって記憶されている場合は、当該クラスタセットの残りのサイズ分のデータを、連続する読み込み先ページの先頭の位置から抽出し、先に抽出したデータと合わせてクラスタセットのデータとする。
ステップ306(S306)において、転記制御部115は、読み込み対象データを展開部105により展開して取得する。より詳細には、読込部112は、クラスタセットのデータを誤り訂正し、誤り訂正後のクラスタセットのデータを取得する。より詳細には、読込部112は、クラスタセットのデータ内で、メタデータとクラスタデータとを含むデータを、誤り訂正データを生成するための基のデータであるとする。また、読込部112は、クラスタセットのデータを誤り訂正して、誤り訂正後のクラスタセットのデータを取得する。ここで、読込部112は、誤り訂正を失敗した(誤り訂正不能だった)場合は、読み込みエラーを読み込み要求元に通知する。
より詳細には、転記制御部115は、読込部112から読み込みエラーを通知されると、転記処理後も当該クラスタを読み込むとエラーとなるように整合性を担保する処理を行う。例えば、転記制御部115は、読み込みエラーとなったクラスタデータを読み込みエラーとなる状態のまま転記してもよい。また、転記制御部115は、第1メモリ152が有する管理情報に対し、当該論理アドレスを読み込むと読み込みエラーとなる旨の情報を含ませ、読み込みエラーとなったクラスタデータは転記しないように構成されてもよい。
読込部112は、誤り訂正が成功した(誤り訂正可能だった)場合には、誤り訂正後のクラスタセットのデータからクラスタデータを抽出する。読込部112は、抽出したクラスタデータを展開部105に送信し、展開部105に対して抽出したクラスタデータを展開するように指示する。そして、読込部112は、展開部105が展開したクラスタデータを取得する。
なお、読込部112は、クラスタデータを展開する必要がない場合には、抽出したクラスタデータを展開部105に送信することなく、抽出したクラスタデータを展開されたクラスタデータと同様に処理するように構成されてもよい。例えば、クラスタデータが圧縮されずに記憶媒体151に記憶されていた場合、読込部112は、抽出したクラスタデータを展開部105に送信することなく、抽出したクラスタデータを展開されたクラスタデータと同様に処理する。そして、読込部112は、展開されたクラスタデータ(又は展開する必要がない抽出したクラスタデータ)を読み込み要求元に送信する。転記制御部115は、読み込み対象データを読込部112から受信する。
ステップ308(S308)において、転記制御部115は、書き込み先情報を生成する。より詳細には、転記制御部115は、書込部111に対する前回のクラスタ書き込み要求において送信した書き込み先情報を、書込部111に対する前回のクラスタ書き込み要求において書込部111から返信されたクラスタセットのサイズの情報が示すクラスタセットのサイズ分だけずらした書き込み先情報を生成する。より詳細には、書込部111に対する前回のクラスタ書き込み要求において送信した書き込み先情報には、クラスタの書き込み先のブロック番号と、ページ番号と、ページ上オフセットの情報が含まれる。書込制御部113は、ページ上オフセットの情報に対し、書込部111に対する前回のクラスタ書き込み要求において書込部111から返信されたクラスタセットのサイズの情報が示すクラスタセットのサイズを加算することにより、書き込み先情報を生成する。
なお、書込部111に対する前回のクラスタ書き込み要求において、書込部111に次の書き込み先情報を与えた(クラスタがページをまたがって記憶された)場合には、転記制御部115は、次の書き込み先情報にクラスタセットの残りのサイズ分だけずらした書き込み先情報を生成する。次の書き込み先情報には、クラスタの書き込み先のブロック番号と、ページ番号と、ページの先頭の位置を示すページ上オフセットの情報が含まれる。転記制御部115は、ページ上オフセットの情報に対し、クラスタセットの残りのサイズを加算することにより、書き込み先情報を生成する。なお、図示しないホスト装置から書き込み要求されたデータを書き込むブロック400と、転記先のブロック400とが同じになる構成である場合、書込制御部113及び転記制御部115は、生成する書き込み先情報が重複しないように連携して処理を行う。
転記制御部115は、生成した書き込み先情報と、転記対象のクラスタデータとして読込部112から受信したデータと、抽出した論理アドレスとを、書込部111に対して送信する。そして、書込制御部113は、書込部111に対して書き込み指示を行う。書込部111は、転記制御部115からクラスタの書き込み要求を受け付ける。クラスタの書き込み要求には、書き込み先情報と、書き込み対象のクラスタデータと、書き込み対象のクラスタの論理アドレスを示すデータが含まれる。書き込み先情報には、クラスタの書き込み先のブロック番号と、ページ番号と、ページ上オフセットの情報が含まれる。
ステップ310(S310)において、書込部111は、圧縮部104によってクラスタデータを(必要に応じて)圧縮する。より詳細には、書込部111は、受け付けたクラスタの書き込み要求から書き込み対象のクラスタデータを抽出する。書込部111は、抽出した書き込み対象のクラスタデータを圧縮部104に送信し、クラスタデータを圧縮することを圧縮部104に対して指示する。そして、書込部111は、圧縮部104が圧縮した書き込み対象のクラスタデータを取得する。
なお、書込部111は、クラスタデータを圧縮する必要がない場合には、抽出した書き込み対象のクラスタデータを、圧縮部104に送信することなく、圧縮された書き込み対象のクラスタデータと同様に処理する(圧縮された書き込み対象のクラスタデータとみなす)ように構成されてもよい。
ステップ312(S312)において、書込部111は、クラスタセットを生成する。より詳細には、書込部111は、受け付けたクラスタの書き込み要求から書き込み対象のクラスタの論理アドレスを示すデータを抽出し、抽出した書き込み対象のクラスタの論理アドレスを示すデータを含むメタデータを生成する。なお、クラスタセットに含まれるメタデータを圧縮する場合は、書込部111は、生成したメタデータを圧縮部104に圧縮させ、圧縮されたメタデータを圧縮部104から取得し、以降、取得した圧縮されたメタデータを前記生成したメタデータに読み替えることができる。
書込部111は、圧縮された書き込み対象のクラスタデータと、生成したメタデータを含むデータとを基にして、誤り訂正データを生成する。そして、書込部111は、圧縮された書き込み対象のクラスタデータと、生成したメタデータと、生成した誤り訂正データとを含むクラスタセットを生成する。
ステップ314(S314)において、書込部111は、生成したクラスタセットがページに収まっているかを判定する。より詳細には、書込部111は、生成したクラスタセットのサイズを算出する。そして、書込部111は、書き込み先のページに生成したクラスタセットが収まるか否かを判定する。より詳細には、書込部111は、書き込み先情報に含まれるページ上オフセットの情報と、算出したクラスタセットのサイズとを加算した結果が、ページサイズに収まっているか否かを判定する。
ステップ316(S316)において、第2メモリ153は、書き込み対象の複数のクラスタセットを一時記憶する。より詳細には、書込部111は、S314の処理において判定結果がYES(書き込み先のページに収まる)の場合、生成したクラスタセットを第2メモリ153が一時記憶するように、第2アクセス部103に書き込み指示する。また、書込部111は、書込要求元にクラスタセットのサイズの情報を返却する。転記制御部115は、書込部111からクラスタセットのサイズを受信する。
ステップ318(S318)において、書込部111及び転記制御部115は、末端処理をする。より詳細には、書込部111は、S318の処理において判定結果がNO(書き込み先のページに収まらない)の場合、書き込み先のページあふれを示す応答を書込要求元に応答する。転記制御部115は、書込部111から書き込み先のページあふれを示す応答を受け取ると、ブロック400を管理する同一の管理単位内で物理アドレスが連続する場合には、次の書き込み先情報を書込部111に与える。書込部111は、書込要求元から次の書き込み先情報を受け付けると、生成したクラスタセットを第2メモリ153が一時記憶するように、第2アクセス部103に書き込み指示する。また、書込部111は、書込要求元にクラスタセットのサイズの情報を返却する。転記制御部115は、書込部111からクラスタセットのサイズを受信する。そして、S320の処理に進む。
なお、転記制御部115は、ダミーデータを書き込む指示を書込部111に対して行うことがある。例えば、転記制御部115は、ブロック400を管理する同一の管理単位内で物理アドレスが連続しない場合以外にも、適宜、ダミーデータを書き込む指示を書込部111に対して行ってもよい。また、書込部111は、書込要求元からダミーデータを記憶させる指示を受け付けると、書き込み先のページのクラスタセットを記憶していない領域のサイズ分のダミーデータを生成する。そして、書込部111は、生成したダミーデータを第2メモリ153が一時記憶するように、第2アクセス部103に対して書き込み指示を行う。
ここで、書込部111は、ダミーデータの代わりに、第2メモリ153が一時記憶しているクラスタセットの誤り訂正データを生成するように構成されてもよい。第2メモリ153が一時記憶しているクラスタセットの誤り訂正データを生成する場合、記憶媒体151が記憶するデータの信頼性を高めることが可能となる。また、第2メモリ153は、クラスタセットの順番を適宜入れ替えて記憶することにより、ダミーデータを記憶する量を削減するように構成されてもよい。第2メモリ153がダミーデータを記憶する量を削減する場合、記憶媒体151の利用効率を高めることが可能となる。なお、転記制御部115は、ダミーデータを書き込む指示を書込部111に与えた場合、書き込み対象のクラスタデータを書き込むために、新たな書き込み先ページを確保し、上記処理をS308からやり直す。
ステップ320(S320)において、書込部111は、第2メモリ153が一時記憶しているデータの合計サイズが1ページ分以上になったか否かを判定する。書込部111は、第2メモリ153が一時記憶しているデータの合計サイズがページ402のサイズ以上になっていない場合(S320:No)は、S300の処理に進む。また、書込部111は、第2メモリ153が一時記憶しているデータの合計サイズがページ402のサイズ以上になった場合(S320:Yes)は、S322の処理に進む。これは、記憶媒体151の入出力単位がページ402であるので、少なくとも1ページ分の書き込みが行われなければ、後述する管理情報の更新処理ができず、転記処理が完了しないからである。
ステップ322(S322)において、書込部111は、記憶媒体アクセス部101を介して1ページ分のデータを記憶媒体151に書き込む。より詳細には、書込部111は、第2メモリ153が一時記憶しているデータの合計サイズがページ402のサイズ以上になると、第2メモリ153からページサイズ分のデータを読み込むように、第2アクセス部103に対して読み込み指示を行う。そして、書込部111は、ページサイズ分のデータを取得する。より詳細には、書込部111は、第2メモリ153が一時記憶しているデータのうち、図3(b)の左側のページに記憶されるデータを読み込むように、第2アクセス部103に対して読み込み指示を行い、ページサイズ分のデータを取得する。
なお、データ記憶装置100が複数の記憶媒体151を備え、記憶媒体151に並列アクセスして速度向上を図る場合、第2メモリ153が一時記憶しているデータの合計サイズが並列書き込みするページ数のページ402のサイズ以上になると、第2メモリ153から並列書き込みするページ数分のサイズのデータを読み込むように、第2アクセス部103に対して読み込み指示を行う。
そして、書込部111は、第2アクセス部103を介して取得したページサイズ分(又は並列書き込みするページ数分のサイズ)のデータを、書き込み先のページ(又は並列書き込みする各ページ)に書き込むように、記憶媒体アクセス部101に対して書き込み指示を行う。
ここで、書き込み先のページは、図3(b)の左側のページである。書込部111は、書込要求元から受信した書き込み先情報に含まれるクラスタの書き込み先のブロック番号と、ページ番号を、記憶媒体アクセス部101に指示する。
ステップ324(S324)において、転記制御部115は、管理情報を更新する。より詳細には、書込部111は、書き込み先のページの書き込み完了通知を書込要求元に通知する。ここで、書き込み先のページは、図3(b)の左側のページであり、書込要求元から受信した書き込み先情報に含まれるクラスタの書き込み先のブロック番号と、ページ番号を、書込要求元に通知する。転記制御部115は、書込部111から、書き込み完了通知を受信すると、当該ページに書き込まれたクラスタについて、アドレス正引きテーブル160を更新する。より詳細には、転記制御部115は、当該ページに書き込まれたクラスタについて、アドレス正引きテーブル160における変換した論理アドレスが示す記憶媒体151の物理アドレスを、書き込み先の記憶媒体151の物理アドレスに更新するように、第1アクセス部102に対して書き込み指示を行う。また、転記制御部115は、当該ページに書き込まれたクラスタについて、書込部111から取得したクラスタセットのサイズの情報を、アドレス正引きテーブル160に書き込むように、第1アクセス部102に対して書き込み指示を行う(図4参照)。
このように、第1の実施の形態にかかるデータ記憶装置100によれば、圧縮部104が圧縮処理を行うので、外部から書き込み要求されるデータサイズの総量に対して、実際に記憶媒体151に書き込むデータ量を少なくすることができる。したがって、データ記憶装置100は、データ圧縮機能を有しないデータ記憶装置よりも寿命を長くすることができる。
(第2の実施の形態)
ところで、第1の実施の形態のように、ページ402に(圧縮した)クラスタセットを詰めて記憶すると、記憶媒体151の記憶効率は良いものの、データ管理の処理量が増加してしまうことがある。第2の実施の形態では、ページ402が記憶するクラスタセットのサイズを予め定められた単位に揃える。
第2の実施の形態にかかるデータ記憶装置のコントローラは、ページが、クラスタのサイズの整数倍のサイズを備えた1つ以上の設定領域を含み、設定領域が、予め定められた複数の分割サイズに分割されており、書込制御部が、圧縮されたクラスタデータのサイズが分割サイズの整数倍になるように、圧縮されたクラスタデータにダミーデータを加え、転記制御部が、圧縮されたクラスタデータのサイズが分割サイズの整数倍になるように、圧縮されたクラスタデータにダミーデータを加えることを特徴とする。
また、第2の実施の形態にかかるデータ記憶装置のコントローラは、さらに、ページが、クラスタのサイズの整数倍のサイズを備えた1つ以上の設定領域を含み、設定領域が、予め定められた複数の分割サイズに分割されており、書込制御部が、圧縮されたクラスタデータのサイズが分割サイズの整数倍になるように、圧縮されたクラスタデータにダミーデータを加え、転記制御部が、圧縮されたクラスタデータのサイズが分割サイズの整数倍になるように、圧縮されたクラスタデータにダミーデータを加え、書込制御部が、さらに、分割サイズの整数倍にされたクラスタデータのサイズが設定領域のサイズと同じになった場合、クラスタデータの圧縮を取りやめ、圧縮をとりやめたクラスタデータを書込先の物理アドレスに応じて記憶媒体に書き込むよう制御するとともに、論理アドレスと書込先の物理アドレスとの対応を記憶部に書き込むよう制御し、読込制御部が、さらに、読み込んだクラスタデータが圧縮されていない場合には、読み込んだクラスタデータを展開部に展開させずにそのまま出力するよう制御し、転記制御部が、さらに、読み込んだクラスタデータが圧縮されていない場合には、読み込んだクラスタデータを展開部に展開させないよう制御し、分割サイズの整数倍にされたクラスタデータのサイズが設定領域のサイズと同じになった場合、クラスタデータの圧縮を取りやめ、圧縮をとりやめたクラスタデータを転記先の物理アドレスに応じて記憶媒体に書き込むよう制御するとともに、論理アドレスと転記先の物理アドレスとの対応を記憶部に書き込むよう制御することを特徴とする。
また、第2の実施の形態にかかるデータ記憶装置のコントローラは、さらに、記憶媒体が、複数のページからなるブロックを含み、書込制御部が、ブロックを管理する管理単位内で物理アドレスが連続する複数の設定領域にまたがってクラスタデータを記憶媒体に書き込むよう制御し、読込制御部が、ブロックを管理する管理単位内で物理アドレスが連続する複数の設定領域にまたがってクラスタデータが書き込まれている場合、連続する複数の設定領域を合わせて読込んでクラスタデータを抽出するよう制御し、転記制御部が、ブロックを管理する管理単位内で物理アドレスが連続する複数の設定領域にまたがってクラスタデータが書き込まれている場合、連続する複数の設定領域を合わせて読込んでクラスタデータを抽出するよう制御し、ブロックを管理する管理単位内で物理アドレスが連続する複数の設定領域にまたがってクラスタデータを記憶媒体に書き込むよう制御することを特徴とする。
以降、より詳細な一例を説明する。まず、第2の実施の形態のデータ記憶装置の構成について説明する。なお、第1の実施の形態と同様の機能を有する構成要素については、第1の実施の形態と同様の符号が付してある。例えば、読み書き対象が第1メモリ152ではなく第1メモリ252であるだけで、そのほかの機能は第1の実施の形態と同様である構成要素についても、第1の実施の形態と同様の符号が付してある。
図8は、第2の実施の形態のデータ記憶装置200の機能構成の概要の一例を示すブロック図である。図8に示すように、データ記憶装置200は、記憶媒体アクセス部101と、第1アクセス部102と、第2アクセス部103と、圧縮部104と、展開部105と、インタフェース部106と、コントローラ210と、記憶媒体251と、第1メモリ252と、第2メモリ153と、を有する。
(記憶媒体251)
記憶媒体251は、記憶媒体151(図1)に対して、データの記憶フォーマットにさらに制約が加えられている。より詳細には、図9に示すように、ページ402には複数の記録スロットが含まれる。記録スロットのサイズは、例えば、記憶媒体151における圧縮されていないクラスタセット(又はクラスタデータ)のサイズと同じである。ただし、記録スロットは、他のサイズに設定されてもよい設定領域である。例えば、記録スロットのサイズは、圧縮されていないクラスタセット(又はクラスタデータ)のサイズの整数倍であってもよい。
記録スロットのデータ記憶可能な領域は、予め定められた数に分割されている。記録スロットの分割数は任意である。例えば、論理アドレスで識別できるデータ(クラスタ)のサイズを1024バイトとし、データ記憶装置アドレスで識別できるデータ(セクタ)のサイズを512バイトと定める。この場合、クラスタは、記録スロットのデータ記憶可能な領域をセクタデータのサイズの512バイトで分割すれば2分割されることになる。
例えば、記録スロットのデータ記憶可能な領域が4分割されている場合、図9に示すように、記録スロットの記憶フォーマットは、メタデータ、第1のデータ、第1の誤り訂正データ、第2のデータ、第2の誤り訂正データ、第3のデータ、第3の誤り訂正データ、第4のデータ及び第4の誤り訂正データを含む。ここで、第1の誤り訂正データを生成する基となるデータには、メタデータと、第1のデータが含まれる。第2の誤り訂正データを生成する基となるデータには、メタデータと、第2のデータが含まれる。第3の誤り訂正データを生成する基となるデータには、メタデータと、第3のデータが含まれる。第4の誤り訂正データを生成する基となるデータには、メタデータと、第4のデータが含まれる。以下、記録スロットを4分割する場合を例に説明するが、記録スロットの分割数はいくつであってもよい。
一方、クラスタを圧縮して記憶する場合は、圧縮後のデータのサイズを分割したサイズの整数倍のサイズに揃える。ここで、分割したサイズとは、図9における第1〜第4のデータの記憶領域に相当する。つまり、メタデータや第1〜第4の誤り訂正データの記憶領域は含まれない。より詳細には、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータと、を合わせたデータを分割したサイズの整数倍のサイズに揃える。なお、圧縮対象のクラスタのメタデータは、圧縮されていても圧縮されていなくてもよい。
圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータと、を合わせたデータが、分割したサイズ(の1倍)以下となった場合、図10(a)に示すように、分割したサイズ(の1倍)の領域から、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータと、を合わせたデータの領域を除いた残りの領域には、ダミーデータを記憶することにより、データのサイズを分割したサイズの整数倍に揃える。なお、ダミーデータは、予め定められた値(例えば全て0)でもよいし、ランダムな値でもよい。また、ダミーデータは、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータと、を合わせたデータを生成の基とした誤り訂正データでもよい。ダミーデータを誤り訂正データとした場合には、記憶データの信頼性が向上するという効果を奏する。
第2の実施の形態では、前述したようにクラスタデータ(記録スロット)を4分割した場合を例に説明している。そして、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータとを合わせたデータが、分割したサイズの2倍以下となった場合は、図10(b)に示すように、分割したサイズの整数倍にデータのサイズを揃える。また、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータとを合わせたデータが、分割したサイズの3倍以下となった場合は、図10(c)に示すように、分割したサイズの整数倍にデータのサイズを揃える。なお、データのサイズは、分割したサイズの整数倍に限られず、2の倍数のサイズなど、他のサイズに揃えられてもよい。
ここで、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータとを合わせたデータが、分割したサイズの4倍以下、すなわち、圧縮しないクラスタデータのサイズ以下となった場合は、次のいずれかのようにデータのサイズを揃えてもよい。例えば、図10(d)に示すように、データのサイズを図10(a)〜(c)と同様に分割したサイズの整数倍のサイズに揃えてもよい。また、クラスタデータを圧縮せずに、図9に示されるページ402に複数含まれる記録スロットに対し、データをそのまま記憶してもよい。
クラスタデータを圧縮して記憶し、分割したサイズの整数倍のサイズに揃えることの利点は、例えば、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータと、を合わせたデータを生成の基とした誤り訂正データをダミーデータとし、記憶データの信頼性を向上させることがあげられる。また、後述するように、同一ページ内の隣接する記録スロットにまたがってクラスタを記憶したり、ブロック400を管理する管理単位をまたがない範囲(例えば同一のブロック400内)で、物理アドレスが連続する場合に限り、ページをまたいでデータを記憶できる。したがって、第2の実施の形態によれば、記憶媒体251の記憶効率が向上させることができ、データ記憶装置200の寿命を延ばすことができるという効果を奏する。
一方、クラスタデータを圧縮せずに記憶することの利点としては、例えば、書き込み時の圧縮処理にかかる処理時間や、読み込み時の展開処理にかかる処理時間を削減することが可能となることがあげられる。また、圧縮したクラスタは、図3(b)に示したページにまたがって記憶されることと同様に、図11(a)に示した同一ページ内の隣接する記録スロットにまたがって記憶されてもよい。また、圧縮したクラスタは、図11(b)に示すように、ブロック400を管理する管理単位をまたがない範囲で、物理アドレスが連続する場合に限り、ページ402をまたいで記憶されてもよい。なお、図11では、説明を簡単にするために、記録スロットのメタデータや誤り訂正データの記憶領域は記載していない。
また、ページ402は、クラスタデータを圧縮して記憶する場合、記録スロットの記憶フォーマットのうちのメタデータの領域に、圧縮して記憶されたクラスタの配置パターンを示す特殊な値(マジックナンバー)を示すデータを記憶する。
第2の実施の形態では、前述したようにクラスタデータを4分割した場合を例に説明している。この場合、ページ402は、記録スロットにおいて例えば図12に示した8個のパターンを示すマジックナンバーを記憶する。これにより、記録スロットにクラスタデータを圧縮せずに記憶した場合と、記録スロットにクラスタデータを圧縮して記憶した場合との区別が可能になる。
なお、図12(a)〜(h)の各パターンは、記録スロットの先頭または末尾に記憶されているクラスタにおいては、図11(a)、(b)に示すように、同一ページ内の隣接する記録スロットにまたがって記憶されたものの一部である場合、又はページ402をまたいで記憶されたものの一部である場合がある。したがって、記録スロットは、マジックナンバーにこれらの状況を示すパターンをさらに追加することにより、処理を簡単にする構成にされてもよい。
(第1メモリ252)
第1メモリ252(図8)は、管理情報には、アドレス正引きテーブル162が含まれる。アドレス正引きテーブル162は、クラスタの論理アドレスと、この論理アドレスが指し示すデータが格納されている記憶媒体151の物理アドレスとを対応付けたテーブルである。また、第1メモリ252は、データ記憶装置200が行う様々な処理を簡単にするために、アドレス正引きテーブル162含む情報から導出される情報を予め記憶するように構成されてもよい。
アドレス正引きテーブル162は、クラスタの論理アドレスと、論理アドレスのデータが格納されている記憶媒体251の物理アドレスの対応付けを管理する。ここで、論理アドレスを昇順に並べたものを表のインデックスとするのは、第1メモリ152が有するアドレス正引きテーブル160と同様である。図13に示すように、アドレス正引きテーブル162は、表の要素として、記憶媒体251の物理アドレスであるブロック番号情報と、ページ番号情報と、ページ上記録スロットフセット情報と、記録スロット上オフセット情報の組を含む。また、アドレス正引きテーブル162は、アドレス正引きテーブル160が記憶するクラスタセットのサイズの情報に代えて、分割したサイズの何倍であるかを示す情報を含む。
なお、図11(a)に示した同一ページ内の隣接する記録スロットの場合や、図11(b)に示したブロック400を管理する管理単位をまたがない範囲で物理アドレスが連続する場合は、第1の実施の形態の第1メモリ152と同様に処理される。また、記憶媒体251が複数設けられて並列アクセスされる場合のアドレス正引きテーブル162の構成も、第1の実施の形態の第1メモリ152で説明した考え方と同様である。
コントローラ210(図8)は、書込部211と、読込部212と、書込制御部213と、読込制御部214と、転記制御部215と、を有する。
(書込部211)
書込部211は、書込制御部213(又は転記制御部215)からクラスタの書き込み要求を受け付ける。クラスタの書き込み要求には、書き込み先情報と、書き込み対象のクラスタデータと、書き込み対象のクラスタの論理アドレスを示すデータが含まれる。書き込み先情報には、クラスタの書き込み先のブロック番号と、ページ番号と、ページ上記録スロットフセット情報と、記録スロット上オフセット情報が含まれる。
書込部211が、クラスタデータを圧縮する手順は書込部111と同様である。具体的には、書込部211は、受け付けたクラスタの書き込み要求から書き込み対象のクラスタデータを抽出する。書込部211は、抽出した書き込み対象のクラスタデータを圧縮部104に送信し、クラスタデータを圧縮することを圧縮部104に対して指示する。そして、書込部211は、圧縮部104が圧縮した書き込み対象のクラスタデータを取得する。
書込部211は、受け付けたクラスタの書き込み要求から書き込み対象のクラスタの論理アドレスを示すデータを抽出し、抽出した書き込み対象のクラスタの論理アドレスを示すデータを含むメタデータを生成する。なお、クラスタセットに含まれるメタデータを圧縮する場合は、書込部211は、圧縮されたメタデータをメタデータと同様に扱う。
書込部211は、生成したメタデータと、圧縮されたクラスタデータとを合わせたデータを、分割したサイズの整数倍のサイズに揃える。より詳細には、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータとを合わせたデータが、分割したサイズの整数倍以下となった場合、分割したサイズの整数倍の領域から、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータと、を合わせたデータの領域を除いた残りの領域分のダミーデータを生成する。なお、ダミーデータとしては、予め定められた値(例えば全て0)でもよいし、ランダムな値でもよい。また、ダミーデータは、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータとを合わせたデータを生成の基にした誤り訂正データでもよい。ダミーデータを誤り訂正データとした場合には、記憶データの信頼性が向上するという効果を奏する。揃え方の具体例は、前述の記憶媒体251で説明したとおりである。
書込部211は、書き込み先の記録スロットに、分割したサイズの整数倍のサイズに揃えたデータが収まるか判定する。より詳細には、書き込み先情報に含まれる記録スロット上オフセットの情報に、分割したサイズの整数倍のサイズを加算した結果が、当該記録スロットに収まっているかを判定すればよい。
書込部211は、判定結果がYES(書き込み先の記録スロットに収まる)の場合、分割したサイズの整数倍のサイズに揃えたデータを第2メモリ153が一時記憶するように、第2アクセス部103に書き込み指示を行う。また、書込部211は、書込要求元に分割したサイズの整数倍のサイズに揃えたデータが分割したサイズの何倍であるかを示す情報を返却する。
書込部211は、判定結果がNO(書き込み先の記録スロットに収まらない)の場合、書き込み先の記録スロットあふれを示す応答を、書込要求元に応答する。書込部211は、書込要求元から次の書き込み先情報を受け付けると、第2メモリ153が分割したサイズの整数倍のサイズに揃えたデータを一時記憶するように、第2アクセス部103に書き込み指示を行う。また、書込部211は、書込要求元に分割したサイズの整数倍のサイズに揃えたデータが分割したサイズの何倍であるかを示す情報を返却する。
書込部211は、書込要求元からダミーデータを記憶させる指示を受け付けると、書き込み先の記録スロットの残りの領域のサイズ分のダミーデータを生成する。書込部211は、生成したダミーデータを第2メモリ153が一時記憶するように、第2アクセス部103に書き込み指示を行う。ここで、書込部211は、ダミーデータの代わりに第2メモリ153が一時記憶している分割したサイズの整数倍のサイズに揃えたデータの誤り訂正データを生成してもよい。書込部211は、第2メモリ153が一時記憶している分割したサイズの整数倍のサイズに揃えたデータの誤り訂正データを利用することで、データの信頼性を高めてもよい。また、書込部211は、分割したサイズの整数倍のサイズに揃えたデータの順番を適宜入れ替えてダミーデータを記憶する量を削減し、記憶媒体251の利用効率を高めてもよい。書込部211は、記録スロット分のデータがそろうまで、上述した処理を繰り返す。
書込部211は、1記録スロット分のデータが揃うと、記録スロットの記憶フォーマットのうちのメタデータとして、圧縮して記憶されるクラスタの配置パターンを示す特殊な値(マジックナンバー)を示すデータを生成する。また、記録スロットの記憶フォーマットのうち誤り訂正データを生成する。より詳細には、例えば、クラスタデータが4分割されている場合、図9に示すように、第1の誤り訂正データを生成する基になっているデータには、生成したマジックナンバーを示すデータであるメタデータと、第1のデータが含まれる。第2の誤り訂正データを生成する基になっているデータには、生成したマジックナンバーを示すデータであるメタデータと、第2のデータが含まれる。第3の誤り訂正データを生成する基になっているデータには、生成したマジックナンバーを示すデータであるメタデータと、第3のデータが含まれる。第4の誤り訂正データを生成する基になっているデータには、生成したマジックナンバーを示すデータであるメタデータと、第4のデータが含まれる。
書込部211は、生成したマジックナンバーを示すデータであるメタデータと、第2メモリ153が一時記憶している分割したサイズの整数倍のサイズに揃えたデータと、生成した誤り訂正データとを記録スロットのデータとして一時記憶するように、第2アクセス部103に書き込みする指示を行う。なお、書込部211は、圧縮してもデータサイズが小さくならないなどの圧縮の必要性がない場合などには、抽出した書き込み対象のクラスタデータを圧縮部104に送信せずに、ページ402に複数含まれる記録スロットにそのまま当該クラスタのデータを記憶してもよい。書込部211は、書き込むデータが1ページ分になるまで、上記の処理を繰り返す。
書込部211は、第2メモリ153が一時記憶しているデータの合計サイズがページ402のサイズ以上になったら、第2メモリ153が一時記憶しているデータのうち、ページサイズ分のデータを読み込むように第2アクセス部103に読み込みの指示を行ってページサイズ分のデータを取得する。ここで、書込部211は、書き込み先のページとして、書込要求元から受信した書き込み先情報に含まれるクラスタの書き込み先のブロック番号と、ページ番号とを記憶媒体アクセス部101に指示する。そして、書込部211は、書き込み先のページの書き込み完了通知を書込要求元に通知する。
第2の実施の形態では、ホスト装置から書き込み要求されたデータを書き込むブロック400と、転記先のブロック400とを、異ならせた構成となっている。このため、書込要求元が転記制御部215であった場合も、上述した書込要求元が書込制御部213の場合の処理と同様の処理を、別の書き込み先のページに対して実施する。なお、データ記憶装置200は、ホスト装置から書き込み要求されたデータを書き込むブロック400と、転記先のブロック400とを、同じにする構成であってもよい。この場合、書込制御部213から書き込み要求されても、転記制御部215から書き込み要求されても、同一の書き込み先のページに対して上述した処理を実施する。
(読込部212)
読込部212は、読み込み要求元からクラスタの読み込み要求を受け付ける。クラスタの読み込み要求には、読み込み先情報と、読み込み対象のクラスタの論理アドレスを示すデータが含まれる。読み込み先情報には、ブロック番号と、ページ番号と、ページ上記録スロットフセット情報と、記録スロット上オフセット情報と、分割したサイズの何倍であるかを示す情報とが含まれる。なお、当該読み込み対象のクラスタが記録スロットをまたがって記憶されている場合や、ページをまたがって記憶されている場合は、読込部212は、連続する読み込み先記録スロットの情報をあわせて受け付ける。連続する読み込み先記録スロットの情報には、ブロック番号と、ページ番号と、ページ上記録スロットフセット情報が含まれる。
読込部212は、取得した読み込み先情報から、ブロック番号と、ページ番号を抽出し、抽出したブロック番号のブロック400の、ページ番号のページ402のデータを読み込むように、記憶媒体アクセス部101に指示して当該ページのデータを取得する。当該読み込み対象のクラスタが記録スロットやページをまたがって記憶されている場合は、読込部212は、取得した連続する読み込み先ページの情報から、ブロック番号と、ページ番号を抽出し、抽出したブロック番号のブロック400に含まれるページ番号のページ402のデータを読み込むように、記憶媒体アクセス部101に指示して当該ページのデータをさらに取得する。なお、同一ページの隣接する記録スロットの場合には、記憶媒体251からの読み込みがページ402単位であるので、読込部212は、1回の読み込み処理で記憶媒体251から読み込むことができる。したがって、同一ページの隣接する記録スロットにまたがってクラスタが記憶されている場合には、読込部212は、1つの読み込み処理でまとめて読込んでもよい。
また、読込部212は、取得した読み込み先情報から、ページ上記録スロットフセット情報と、記録スロットフセット情報と、分割したサイズの何倍であるかを示す情報を抽出する。読込部212は、取得したページのデータのうち、抽出したページ上記録スロットフセット情報と、記録スロットフセットの情報と、分割したサイズの何倍であるかを示す情報が示す位置から、当該記録スロットのメタデータと、分割したサイズの整数倍のサイズに揃えたデータと、当該データの誤り訂正データを抽出する。当該読み込み対象のクラスタが記録スロットやページをまたがって記憶されている場合は、当該クラスタに対する残りのデータを、連続する記録スロットの先頭の位置から抽出し、あわせて、当該クラスタに対するデータとする。
読込部212は、抽出した誤り訂正データを用いて、抽出した誤り訂正対象データを誤り訂正し、誤り訂正後のデータを取得する。より詳細には、読込部212は、抽出したデータのうち、当該記録スロットのメタデータと、分割したサイズの整数倍のサイズに揃えたデータを含むデータを、誤り訂正データを生成する基のデータであるとする。そして、読込部212は、抽出したデータのうち、誤り訂正データによって誤り訂正し、誤り訂正後のデータを取得する。
読込部212は、誤り訂正が失敗した(誤り訂正不能だった)場合は、読み込みエラーを読み込み要求元に通知する。また、読込部212は、誤り訂正が成功した(誤り訂正可能だった)場合は、誤り訂正後のデータからクラスタデータを抽出する。読込部212は、抽出したクラスタデータを展開部105に送信し、展開部105に対して展開指示を行う。そして、読込部212は、展開されたクラスタデータを取得する。
なお、読込部212は、誤り訂正後のデータから抽出したクラスタデータが圧縮されていない場合などには、クラスタデータを展開部105に送信しない。読込部212は、取得した展開されたクラスタデータを、読み込み要求元に送信する。
(書込制御部213)
書込制御部213は、インタフェース部106から書き込み命令を受け取ると、受け取った書き込み命令から、データ記憶装置アドレス情報及び書き込みデータを抽出する。そして、書込制御部213は、抽出したデータ記憶装置アドレス情報を、対応する論理アドレスに変換する。また、書込制御部213は、書込部211に対する前回のクラスタ書き込み要求において送信した書き込み先情報を、書込部211に対する前回のクラスタ書き込み要求において書込部211から返信された分割したサイズの何倍であるかを示す情報に応じて、記録スロット上オフセット分だけずらした書き込み先情報を生成する。
書込部211に対する前回のクラスタ書き込み要求において送信した書き込み先情報には、クラスタの書き込み先のブロック番号と、ページ番号と、ページ上記録スロットフセット情報と、記録スロット上オフセット情報が含まれる。このうち、記録スロット上オフセットの情報に、書込部211に対する前回のクラスタ書き込み要求において書込部211から返信された分割したサイズの何倍であるかを示す情報が示す分のオフセットを加算することで、当該書き込み先情報を生成する。
なお、書込部211に対する前回のクラスタ書き込み要求において、書込部211に次の書き込み先情報を与えた(クラスタが記録スロットまたはページをまたがって記憶された)場合は、次の書き込み先情報に分割したサイズの何倍であるかの残りの分だけずらした書き込み先情報を生成する。より詳細には、次の書き込み先情報には、クラスタの書き込み先のブロック番号と、ページ番号と、ページ上記録スロットフセット情報と、記録スロットの先頭の位置を示す記録スロット上オフセット情報が含まれる。書込部211は、記録スロット上オフセット情報に、分割したサイズの何倍であるかの残りの分のオフセットを加算することで、当該書き込み先情報を生成する。
なお、データ記憶装置200は、ホスト装置から書き込み要求されたデータを書き込むブロック400と、転記先のブロック400とが同じである構成の場合、書込制御部213と転記制御部215とが、生成する書き込み先情報が重複しないように連携して処理を行う。
書込制御部213は、生成した書き込み先情報と、書き込み対象のクラスタデータとして抽出した書き込みデータと、書き込み対象のクラスタの論理アドレスとして変換した論理アドレスとを、書込部211に対して送信し、書込部211に書き込みを指示する。
書込制御部213は、書込部211から書き込み先の記録スロットのあふれを示す応答を受け取ると、同一ページ内の隣接する記録スロットであるか、ブロック400を管理する管理単位をまたがない範囲で、物理アドレスが連続する場合、次の書き込み先情報を書込部111に与える。
なお、書込制御部213は、ダミーデータの記憶の指示を書込部211に与えることがある。同一ページ内の隣接する記録スロットであるか、ブロック400を管理する管理単位をまたがない範囲で、物理アドレスが連続する場合以外の場合は、書込制御部213は、ダミーデータ記憶指示を書込部211に与える。書込制御部213は、ダミーデータ記憶指示を書込部211に与えた場合、当該書き込み対象のクラスタデータを書き込むために、新たな書き込み先記録スロットを確保し、上記処理を始めからやり直す。
書込制御部213は、書込部211から分割したサイズの何倍であるかを示す情報を受信する。書込制御部213は、書込部211から、書き込み完了通知を受信すると、当該ページに書き込まれたクラスタに対して、アドレス正引きテーブル162を更新する。より詳細には、書込制御部213は、当該ページに書き込まれたクラスタに対して、アドレス正引きテーブル162における、変換した論理アドレスが示す記憶媒体251の物理アドレスを、書き込み先の記憶媒体251の物理アドレスに更新するように、第1アクセス部102に書き込み指示する。
また、書込制御部213は、当該ページに書き込まれたクラスタに対して、書込部211から取得した分割したサイズの何倍であるかを示す情報を、アドレス正引きテーブル162に書き込むように、第1アクセス部102に対して書き込み指示する。
(読込制御部214)
読込制御部214は、インタフェース部106から読み込み命令を受け取ると、受け取った読み込み命令からデータ記憶装置アドレス情報を抽出する。読込制御部214は、抽出したデータ記憶装置アドレス情報を、対応する論理アドレスに変換する。読込制御部214は、変換した論理アドレスに対応付けられている情報を取得する。より詳細には、読込制御部214は、アドレス正引きテーブル162における変換した論理アドレスが示す記憶媒体251の物理アドレスと、分割したサイズの何倍であるかを示す情報を読み込むように、第1アクセス部102に対して読み込みする指示を行う。そして、読込制御部214は、物理アドレスと、分割したサイズの何倍であるかを示す情報を取得する。
読込制御部214は、取得した物理アドレスに含まれるページ上記録スロットフセット情報と、記録スロット上オフセット情報と、取得した分割したサイズの何倍であるかを示す情報から、当該クラスタが同一ページ内の隣接する記録スロット、又は、ページをまたがって記憶されているかを判断する。読込制御部214は、判断結果がYES(クラスタが同一ページ内の隣接する記録スロット、又はページをまたがって記憶されている)の場合は、読込制御部214は、連続する読み込み先記録スロットの情報を生成する。より詳細には、連続する読み込み先記録スロットの情報には、ブロック番号と、ページ番号と、ページ上記録スロットフセット情報が含まれるが、ページ内の隣接する記録スロットにまたがって記憶されている場合は、このうち、ブロック番号と、ページ番号には、取得した物理アドレスに含まれるブロック番号と、ページ番号が設定され、ページ上記録スロットフセット情報には、連続する情報が設定される。また、クラスタがページをまたがって記憶されている場合は、ブロック番号には取得した物理アドレスに含まれるブロック番号が設定され、ページ番号には、連続する番号が設定され、ページ上記録スロットフセット情報には、先頭の位置を示す情報が設定される。
読込制御部214は、取得した物理アドレスと、取得した分割したサイズの何倍かであるかを示す情報とを、読み込み先情報として、変換した論理アドレスを読み込み対象のクラスタの論理アドレスとして、読込部212に読み込み指示する。なお、読み込み対象クラスタが同一ページ内の隣接する記録スロット、または、ページをまたがって記憶されている場合は、読込制御部214は、読込部212に対して、生成した連続する読み込み先記録スロットの情報を合わせて送信する。なお、同一ページの隣接する記録スロットの場合は、記憶媒体251からの読み込みはページ402単位であるので、1回の読み込み処理で記憶媒体251から読み込める。したがって、読込制御部214は、連続する読み込み先の記録スロットの情報の読み込みを一つの読み込み処理にまとめてもよい。
読込制御部214は、読込部212から読み込みエラーを通知されると、読み込みエラーを示すデータをインタフェース部106に送信する。なお、第1メモリ252は、当該論理アドレスを読み込むと読み込みエラーとなる旨の情報を管理情報としてさらに記憶してもよい。このようにすることで、再度同じ論理アドレスに対して読み込み要求されたときに、すばやく読み込みエラーを返却することができる。読込制御部214は、読込部212が読み込んだデータを受信すると、受信したデータをインタフェース部106に送信する。
(転記制御部215)
転記制御部215は、予め定められた規則に従って、以下に述べる転記処理の制御をおこなう。まず、転記制御部215は、転記するクラスタを決定する。より詳細には、転記制御部215は、第1メモリ252から管理情報を読み込むように第1アクセス部102に対して読み込みの指示を行い、管理情報を取得する。転記制御部215は、予め定められた規則に従って、取得した管理情報から転記するクラスタを決定する。転記するクラスタの決定は、任意の公知の規則に従って行われてもよい。
転記制御部215は、決定したクラスタの論理アドレスを取得した管理情報から抽出する。そして、転記制御部215は、転記するクラスタのデータを読み込む。より詳細には、転記制御部215は、抽出した論理アドレスに対応付けられている情報を取得する。転記制御部215は、アドレス正引きテーブル162における変換した論理アドレスが示す記憶媒体151の物理アドレスと、分割したサイズの何倍であるかを示す情報を読み込むように、第1アクセス部102に読み込みを指示する。そして、転記制御部215は、物理アドレスと、分割したサイズの何倍であるかを示す情報を取得する。
転記制御部215は、取得した物理アドレスに含まれるページ上記録スロットフセット情報と、記録スロット上オフセット情報と、取得した分割したサイズの何倍であるかを示す情報から、当該クラスタが同一ページ内の隣接する記録スロット、又はページをまたがって記憶されているか否かを判断する。転記制御部215は、判断結果がYES(同一ページ内の隣接する記録スロット、又はページをまたがって記憶されている)の場合は、連続する読み込み先の記録スロットの情報を生成する。より詳細には、連続する読み込み先記録スロットの情報には、ブロック番号と、ページ番号と、ページ上記録スロットフセット情報が含まれる。クラスタがページ内の隣接する記録スロットにまたがって記憶されている場合は、ブロック番号には、前記取得した物理アドレスに含まれるブロック番号が設定される。ページ番号には、取得した物理アドレスに含まれるページ番号が設定される。
ページ上記録スロットフセット情報には、連続する情報が設定される。また、クラスタがページをまたがって記憶されている場合は、ブロック番号に対して、取得した物理アドレスに含まれるブロック番号が設定される。ページ番号には、連続する番号が設定され、ページ上記録スロットフセット情報には、先頭の位置を示す情報が設定される。
転記制御部215は、取得した物理アドレスと、取得した分割したサイズの何倍かであるかを示す情報とを、読み込み先情報として、変換した論理アドレスを読み込み対象のクラスタの論理アドレスとして、読込部212に対して読み込みを指示する。なお、読み込み対象クラスタが同一ページ内の隣接する記録スロット、又はページをまたがって記憶されている場合、転記制御部215は、読込部212に対して、生成した連続する読み込み先記録スロットの情報を合わせて送信する。なお、クラスタが同一ページの隣接する記録スロットに書き込まれている場合は、記憶媒体251からの読み込みがページ402単位であるため、1回の読み込み処理で記憶媒体251からクラスタを読み込める。したがって、読み込み対象クラスタが同一ページ内の隣接する記録スロットをまたがって記憶されている場合は、クラスタの読込処理を1つの読み込み処理にまとめてもよい。
転記制御部215は、読込部212から読み込みエラーを通知されると、転記処理後も当該クラスタを読み込むとエラーとなるように整合性を担保する処理をする。例えば、読み込みエラーとなったクラスタデータを読み込みエラーとなる状態のまま転記してもよいし、第1メモリ252が有する管理情報において、該論理アドレスを読み込むと読み込みエラーとなる旨の情報を記憶しておき、読み込みエラーとなったクラスタデータは転記しないようにしてもよい。
転記制御部215は、読込部212から読み込んだデータを受信する。転記制御部215は、転記するクラスタを書き込む。より詳細には、転記制御部215は、書込部211に対する前回のクラスタ書き込み要求において送信した書き込み先情報を、書込部211に対する前回のクラスタ書き込み要求において書込部211から返信された分割したサイズの何倍であるかを示す情報が示す記録スロット上オフセット分だけずらした書き込み先情報を生成する。書込部211に対する前回のクラスタ書き込み要求において送信した書き込み先情報には、クラスタの書き込み先のブロック番号と、ページ番号と、ページ上記録スロットフセット情報と、記録スロット上オフセット情報が含まれる。また、転記制御部215は、記録スロット上オフセットの情報に対し、書込部211に対する前回のクラスタ書き込み要求において書込部211から返信された分割したサイズの何倍であるかを示す情報が示す分のオフセットを加算することにより、当該書き込み先情報を生成する。
なお、書込部211に対する前回のクラスタ書き込み要求において、書込部211に次の書き込み先情報を与えた(クラスタが記録スロットまたはページをまたがって記憶された)場合は、次の書き込み先情報に分割したサイズの何倍であるかの残りの分だけずらした書き込み先情報を生成する。より詳細には、次の書き込み先情報には、クラスタの書き込み先のブロック番号と、ページ番号と、ページ上記録スロットフセット情報と、記録スロットの先頭の位置を示す記録スロット上オフセット情報が含まれる。書込部211は、記録スロット上オフセット情報に対し、分割したサイズの何倍であるかの残りの分のオフセットを加算することにより、当該書き込み先情報を生成する。
なお、図示しないホスト装置から書き込み要求されたデータを書き込むブロック400と、転記先のブロック400とが同じである場合、書込制御部213及び転記制御部215は、生成する書き込み先情報が重複しないように、連携して処理を行う。
転記制御部215は、生成した書き込み先情報と、書き込み対象のクラスタデータとして抽出した書き込みデータと、書き込み対象のクラスタの論理アドレスとして変換した論理アドレスとを書込部211に送信し、書込部211に書き込みを指示する。
転記制御部215は、書込部211から書き込み先の記録スロットのあふれを示す応答を受け取ると、同一ページ内の隣接する記録スロットであるか、ブロック400を管理する同一の管理単位内で物理アドレスが連続する場合、次の書き込み先情報を書込部211に与える。なお、転記制御部215は、データサイズを揃えるために、ダミーデータを記憶する指示を書込部211に与える構成であってもよい。例えば、クラスタが同一ページ内の隣接する記録スロットに書き込まれている場合、又はブロック400を管理する同一の管理単位内で物理アドレスが連続する場合以外には、転記制御部215は、ダミーデータを記憶する指示を書込部211に与える。なお、転記制御部215は、ダミーデータを記憶する指示を書込部211に与えた場合、当該書き込み対象のクラスタデータを書き込むために、新たな書き込み先記録スロットを確保し、上記書き込み処理を始めからやり直す。そして、転記制御部215は、書込部211から分割したサイズの何倍であるかを示す情報を受信する。
転記制御部215は、書込部211への書き込み要求が、書き込みデータを圧縮した結果、少なくとも1ページ分になるまで上記処理を繰り返す。これは、記憶媒体251の入出力単位がページ402であるので、少なくとも1ページ分の書き込みが行われなければ、後述する管理情報の更新処理ができず、転記処理が完了しないからである。
そして、転記制御部215は、転記したクラスタの管理情報を更新する。より詳細には、転記制御部215は、書込部211から書き込み完了通知を受信すると、当該ページに書き込まれたクラスタに対して、アドレス正引きテーブル162を更新する。転記制御部215は、当該ページに書き込まれたクラスタに対して、アドレス正引きテーブル162における変換した論理アドレスが示す記憶媒体251の物理アドレスを、書き込み先の記憶媒体251の物理アドレスに更新するように、第1アクセス部102に対して書き込みを指示する。
また、転記制御部215は、当該ページに書き込まれたクラスタに対して、書込部211から取得した分割したサイズの何倍であるかを示す情報を、アドレス正引きテーブル162に書き込むように、第1アクセス部102に書き込みを指示する。転記制御部215は、予め定められた規則に従って上記処理を繰り返す。
次に、第2の実施の形態のデータ記憶装置200の動作について説明する。まず、図示しないホスト装置からの書き込み命令に応じて、データ記憶装置200が行う書き込み処理の手順について、図14を参照して説明する。図14は、データ記憶装置200が行う書き込み処理の手順の一例を示すフローチャートである。
(書き込み処理)
ステップ400(S400)において、データ記憶装置200は、外部のホスト装置(図示せず)などから書き込み命令を受け付ける。より詳細には、インタフェース部106は、図示しないホスト装置から、書き込み命令及び読み込み命令を含む命令を受け付ける。書き込み命令には、データ記憶装置アドレス情報及び書き込みデータが含まれる。読み込み命令には、データ記憶装置アドレス情報が含まれる。データ記憶装置アドレス情報は、データ記憶装置100が図示しないホスト装置に対して提供するアドレス情報である。
例えば、HDD(Hard Disk Drive)又はSSDのデータ記憶装置アドレス情報の例として、LBA(Logical Block Address)がある。LBAで特定されるデータのサイズは、例えば、512バイトのように定められている。データ記憶装置アドレスで特定されるデータのサイズと、論理アドレスで特定されるデータ(クラスタ)のサイズとは、前述したように一般に異なっている。しかし、データ記憶装置アドレスと論理アドレスは相互に変換可能である。例えば、データ記憶装置アドレス情報が512バイトごとに割り当てられ、論理アドレスが1024バイトごとに割り当てられている場合、データ記憶装置アドレス情報を2で除算して商を求めることにより、データ記憶装置アドレス情報を論理アドレスに変換することができる。第2の実施の形態では、説明の簡単化のために、データ記憶装置アドレスで特定されるデータのサイズと、クラスタのサイズとが同じである場合を例に説明する。ただし、これに限定されることなく、データ記憶装置200は、データ記憶装置アドレスで特定されるデータのサイズと、クラスタのサイズとが異なるものであってもよい。
インタフェース部106は、受け付けた命令が書き込み命令であった場合、書込制御部213に受け付けた書き込み命令を転送する。
ステップ402(S402)において、書込制御部113は、書き込み先情報を生成する。より詳細には、書込制御部213は、インタフェース部106から書き込み命令を受け取ると、受け取った書き込み命令から、データ記憶装置アドレス情報及び書き込みデータを抽出する。そして、書込制御部213は、抽出したデータ記憶装置アドレス情報を、対応する論理アドレスに変換する。また、書込制御部213は、書込部211に対する前回のクラスタ書き込み要求において送信した書き込み先情報を、書込部211に対する前回のクラスタ書き込み要求において書込部211から返信された分割したサイズの何倍であるかを示す情報が示す記録スロット上オフセット分だけずらした書き込み先情報を生成する。
より詳細には、書込部211に対する前回のクラスタ書き込み要求において送信した書き込み先情報には、クラスタの書き込み先のブロック番号と、ページ番号と、ページ上記録スロットフセット情報と、記録スロット上オフセット情報が含まれる。このうち、記録スロット上オフセットの情報に、書込部211に対する前回のクラスタ書き込み要求において書込部211から返信された分割したサイズの何倍であるかを示す情報が示す分のオフセットを加算することで、当該書き込み先情報を生成する。
なお、書込部211に対する前回のクラスタ書き込み要求において、書込部211に次の書き込み先情報を与えた(クラスタが記録スロットまたはページをまたがって記憶された)場合は、次の書き込み先情報に分割したサイズの何倍であるかの残りの分だけずらした書き込み先情報を生成する。より詳細には、次の書き込み先情報には、クラスタの書き込み先のブロック番号と、ページ番号と、ページ上記録スロットフセット情報と、記録スロットの先頭の位置を示す記録スロット上オフセット情報が含まれる。書込部211は、記録スロット上オフセット情報に、分割したサイズの何倍であるかの残りの分のオフセットを加算することで、当該書き込み先情報を生成する。なお、データ記憶装置200は、ホスト装置から書き込み要求されたデータを書き込むブロック400と、転記先のブロック400とが同じである構成の場合、書込制御部213と転記制御部215とが、生成する書き込み先情報が重複しないように連携して処理を行う。書込制御部213は、生成した書き込み先情報と、書き込み対象のクラスタデータとして抽出した書き込みデータと、書き込み対象のクラスタの論理アドレスとして変換した論理アドレスとを、書込部211に対して送信し、書込部211に書き込みを指示する。
書込部211は、書込制御部213からクラスタの書き込み要求を受け付ける。
クラスタの書き込み要求には、書き込み先情報と、書き込み対象のクラスタデータと、書き込み対象のクラスタの論理アドレスを示すデータが含まれる。書き込み先情報には、クラスタの書き込み先のブロック番号と、ページ番号と、ページ上記録スロットフセット情報と、記録スロット上オフセット情報が含まれる。
ステップ404(S404)において、書込部211は、(必要に応じて)圧縮部104に対して圧縮する指示を送信する。書込部211がクラスタデータを圧縮する手順は書込部111と同様である。具体的には、書込部211は、受け付けたクラスタの書き込み要求から書き込み対象のクラスタデータを抽出する。書込部211は、抽出した書き込み対象のクラスタデータを圧縮部104に送信し、クラスタデータを圧縮することを圧縮部104に対して指示する。そして、書込部211は、圧縮部104が圧縮した書き込み対象のクラスタデータを取得する。
書込部211は、受け付けたクラスタの書き込み要求から書き込み対象のクラスタの論理アドレスを示すデータを抽出し、抽出した書き込み対象のクラスタの論理アドレスを示すデータを含むメタデータを生成する。なお、クラスタセットに含まれるメタデータを圧縮する場合は、書込部211は、圧縮されたメタデータをメタデータと同様に扱う。
ステップ406(S406)において、書込部211は、クラスタデータのサイズを分割したサイズの整数倍に揃える。より詳細には、書込部211は、生成したメタデータと、圧縮されたクラスタデータとを合わせたデータを分割したサイズの整数倍のサイズに揃える。
より詳細には、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータとを合わせたデータが、分割したサイズの整数倍以下となった場合、分割したサイズの整数倍の領域から、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータと、を合わせたデータの領域を除いた残りの領域分のダミーデータを生成する。なお、ダミーデータとしては、予め定められた値(例えば全て0)でもよいし、ランダムな値でもよい。また、ダミーデータは、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータとを合わせたデータを生成の基にした誤り訂正データでもよい。ダミーデータを誤り訂正データとした場合には、記憶データの信頼性が向上するという効果を奏する。
具体的には、第2の実施形態では、前述したようにクラスタデータが4分割されている場合について記載している。書込部211は、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータと、を合わせたデータが、分割したサイズ(の1倍)以下となった場合、図10(a)に示すように、分割したサイズ(の1倍)の領域から、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータと、を合わせたデータの領域を除いた残りの領域には、ダミーデータを記憶することにより、データのサイズを分割したサイズの整数倍に揃える。
同様に、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータとを合わせたデータが、分割したサイズの2倍以下となった場合は、図10(b)に示すように、分割したサイズの整数倍にデータのサイズを揃える。また、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータとを合わせたデータが、分割したサイズの3倍以下となった場合は、図10(c)に示すように、分割したサイズの整数倍にデータのサイズを揃える。なお、データのサイズは、分割したサイズの整数倍に限られず、2の倍数のサイズなど、他のサイズに揃えられてもよい。
ここで、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータとを合わせたデータが、分割したサイズの4倍以下、すなわち、圧縮しないクラスタデータのサイズ以下となった場合は、次のいずれかのようにデータのサイズを揃えてもよい。例えば、図10(d)に示すように、データのサイズを図10(a)〜(c)と同様に分割したサイズの整数倍のサイズに揃えてもよい。また、クラスタデータを圧縮せずに、図9に示されるページ402に複数含まれる記録スロットに対し、データをそのまま記憶してもよい。
クラスタデータを圧縮して記憶し、分割したサイズの整数倍のサイズに揃えることの利点は、例えば、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータと、を合わせたデータを生成の基とした誤り訂正データをダミーデータとし、記憶データの信頼性を向上させることがあげられる。また、後述するように、同一ページ内の隣接する記録スロットにまたがってクラスタを記憶したり、ブロック400を管理する管理単位をまたがない範囲(例えば同一のブロック400内)で、物理アドレスが連続する場合に限り、ページをまたいでデータを記憶できる。したがって、第2の実施の形態によれば、記憶媒体251の記憶効率が向上させることができ、データ記憶装置200の寿命を延ばすことができるという効果を奏する。
一方、クラスタデータを圧縮せずに記憶することの利点としては、例えば、書き込み時の圧縮処理にかかる処理時間や、読み込み時の展開処理にかかる処理時間を削減することが可能となることがあげられる。また、圧縮したクラスタは、図3(b)に示したページにまたがって記憶されることと同様に、図11(a)に示した同一ページ内の隣接する記録スロットにまたがって記憶されてもよい。また、圧縮したクラスタは、図11(b)に示すように、ブロック400を管理する管理単位をまたがない範囲で、物理アドレスが連続する場合に限り、ページ402をまたいで記憶されてもよい。なお、図11では、説明を簡単にするために、記録スロットのメタデータや誤り訂正データの記憶領域は記載していない。
ステップ408(S408)において、書込部211は、記録スロットに生成したクラスタセットが収まっているかを判定する。より詳細には、書込部211は、書き込み先の記録スロットに対し、分割したサイズの整数倍のサイズに揃えたデータが収まるか否かを判定する。具体的には、書込部211は、書き込み先情報に含まれる記録スロット上オフセットの情報に対し、分割したサイズの整数倍のサイズを加算した結果が、当該記録スロットに収まっているかを判定する。
ステップ410(S410)において、第2メモリ153は、整数倍のサイズに揃えたデータを一時記憶する。より詳細には、書込部211は、S408の処理において判定結果がYES(書き込み先の記録スロットに収まる)の場合、分割したサイズの整数倍のサイズに揃えたデータを第2メモリ153が一時記憶するように、第2アクセス部103に書き込み指示する。また、書込部211は、書込要求元に分割したサイズの整数倍のサイズに揃えたデータが分割したサイズの何倍であるかを示す情報を返却する。書込制御部213は、書込部211から分割したサイズの何倍であるかを示す情報を受信する。
ステップ412(S412)において、書込部211及び書込制御部213は、末端処理をする。より詳細には、書込部211は、S408の処理において判定結果がNO(書き込み先の記録スロットに収まらない)の場合、書き込み先の記録スロットあふれを示す応答を書込要求元に応答する。書込制御部213は、書込部211から書き込み先の記録スロットあふれを示す応答を受け取ると、同一ページ内の隣接する記録スロットであるか、ブロック400を管理する同一の管理単位内で物理アドレスが連続する場合、次の書き込み先情報を書込部211に与える。書込部211は、書込要求元から次の書き込み先情報を受け付けると、分割したサイズの整数倍のサイズに揃えたデータを第2メモリ153が一時記憶するように、第2アクセス部103に書き込み指示する。また、書込部211は、書込要求元に分割したサイズの整数倍のサイズに揃えたデータが分割したサイズの何倍であるかを示す情報を返却する。書込制御部213は、書込部211から分割したサイズの何倍であるかを示す情報を受信する。そして、書込制御部213は、S414の処理に進む。
なお、書込制御部213は、書込部211から書き込み先の記録スロットあふれを示す応答を受け付けると、ダミーデータ記憶指示を書込部211に与えてもよい。なお、同一ページ内の隣接する記録スロットであるか、ブロック400を管理する管理単位をまたがない範囲で、物理アドレスが連続する場合以外の場合は、書込制御部213は、ダミーデータ記憶指示を書込部211に与える。書込部211は、書込要求元からダミーデータ記憶指示を受け付けると、書き込み先の記録スロットの残りの領域のサイズ分のダミーデータを生成する。そして、書込部211は、生成したダミーデータを第2メモリ153が一時記憶するように、第2アクセス部103に書き込み指示を行う。
ここで、書込部211は、ダミーデータの代わりに第2メモリ153が一時記憶している分割したサイズの整数倍のサイズに揃えたデータの誤り訂正データを生成してもよい。書込部211は、第2メモリ153が一時記憶している分割したサイズの整数倍のサイズに揃えたデータの誤り訂正データを利用することで、データの信頼性を高めてもよい。また、書込部211は、分割したサイズの整数倍のサイズに揃えたデータの順番を適宜入れ替えてダミーデータを記憶する量を削減し、記憶媒体251の利用効率を高めてもよい。
なお、書込制御部213は、ダミーデータを書き込む指示を書込部211に与えた場合、当該書き込み対象のクラスタデータを書き込むために、新たな書き込み先記録スロットを確保し、上記処理をS402からやり直す。
ステップ414(S414)において、書込部211は、第2メモリ153が一時記憶しているデータの合計サイズが1記録スロット分以上になったか否かを判定する。書込部211は、第2メモリ153が一時記憶しているデータの合計サイズが1記録スロットのサイズ以上になっていない場合(S414:No)は、S400の処理に進む。また、書込部211は、第2メモリ153が一時記憶しているデータの合計サイズが1記録スロットのサイズ以上になった場合(S414:Yes)は、S416の処理に進む。
ステップ416(S416)において、書込部211は、記録スロットデータを生成する。より詳細には、書込部211は、1記録スロット分のデータが揃うと、記録スロットの記憶フォーマットのうちのメタデータとして、圧縮して記憶されたクラスタの配置パターンを示す特殊な値(マジックナンバー)を示すデータを生成する。また、書込部211は、記録スロットの記憶フォーマットのうち誤り訂正データを生成する。
より詳細には、例えば、クラスタデータが4分割されている場合、図9に示すように、第1の誤り訂正データを生成する基になっているデータには、生成したマジックナンバーを示すデータであるメタデータと、第1のデータが含まれる。第2の誤り訂正データを生成する基になっているデータには、生成したマジックナンバーを示すデータであるメタデータと、第2のデータが含まれる。第3の誤り訂正データを生成する基になっているデータには、生成したマジックナンバーを示すデータであるメタデータと、第3のデータが含まれる。第4の誤り訂正データを生成する基になっているデータには、生成したマジックナンバーを示すデータであるメタデータと、第4のデータが含まれる。
書込部211は、生成したマジックナンバーを示すデータであるメタデータと、第2メモリ153が一時記憶している分割したサイズの整数倍のサイズに揃えたデータと、生成した誤り訂正データを、記録スロットのデータとして、一時記憶するように、第2アクセス部103に書き込み指示する。
なお、書込部211は、圧縮してもデータサイズが小さくならないなどの圧縮の必要性がない場合などには、抽出した書き込み対象のクラスタデータを圧縮部104に送信せずに、ページ402に複数含まれる記録スロットにそのまま当該クラスタのデータを記憶してもよい。
ステップ418(S418)において、書込部211は、書き込むデータが1ページ分以上になったか否かを判定する。書込部211は、書き込むデータが1ページ分以上になっていない場合(S418:No)は、S400の処理に進む。また、書込部211は、書き込むデータが1ページ分以上になった場合(S418:Yes)は、S420の処理に進む。
ステップ420(S420)において、書込部211は、1ページ分のデータを書き込む。より詳細には、書込部211は、第2メモリ153が一時記憶しているデータの合計サイズがページ402のサイズ以上になったら、第2メモリ153が一時記憶しているデータのうち、ページサイズ分のデータを読み込むように第2アクセス部103に読み込み指示し、ページサイズ分のデータを取得する。ここで、書込部211は、書き込み先のページとして、書込要求元から受信した書き込み先情報に含まれるクラスタの書き込み先のブロック番号とページ番号を記憶媒体アクセス部101に指示する。
ステップ422(S422)において、書込制御部213は、管理情報を更新する。より詳細には、書込部211は、書き込み先のページの書き込み完了通知を書込要求元に通知する。書込制御部213は、書込部211から、書き込み完了通知を受信すると、当該ページに書き込まれたクラスタに対して、アドレス正引きテーブル162を更新する。書込制御部213は、当該ページに書き込まれたクラスタに対して、アドレス正引きテーブル162における変換した論理アドレスが示す記憶媒体251の物理アドレスを、書き込み先の記憶媒体251の物理アドレスに更新するように、第1アクセス部102に書き込み指示する。また、書込制御部213は、当該ページに書き込まれたクラスタに対して、書込部211から取得した分割されたサイズの何倍であるかを示す情報を、アドレス正引きテーブル162に書き込むように、第1アクセス部102に書き込み指示する。
次に、図示しないホスト装置からの読み込み命令に応じて、データ記憶装置200が行う読み込み処理の手順について、図15を参照して説明する。図15は、データ記憶装置200が行う読み込み処理の手順の一例を示すフローチャートである。
(読み込み処理)
ステップ500(S500)において、データ記憶装置200は、外部のホスト装置(図示せず)などから、読み込み命令を受け付ける。より詳細には、インタフェース部106は、図示しないホスト装置から、書き込み命令及び読み込み命令を含む命令を受け付ける。書き込み命令には、データ記憶装置アドレス情報及び書き込みデータが含まれる。読み込み命令には、データ記憶装置アドレス情報が含まれる。データ記憶装置アドレス情報は、データ記憶装置200が図示しないホスト装置に提供するアドレス情報である。
例えば、HDD(Hard Disk Drive)又はSSDのデータ記憶装置アドレス情報の例として、LBA(Logical Block Address)がある。LBAで特定されるデータのサイズは、例えば、512バイトのように定められている。データ記憶装置アドレスで特定されるデータのサイズと、論理アドレスで特定されるデータ(クラスタ)のサイズとは、前述したように一般に異なっている。しかし、データ記憶装置アドレスと論理アドレスは相互に変換可能である。例えば、データ記憶装置アドレス情報が512バイトごとに割り当てられ、論理アドレスが1024バイトごとに割り当てられている場合、データ記憶装置アドレス情報を2で除算して商を求めることにより、データ記憶装置アドレス情報を論理アドレスに変換することができる。第2の実施の形態では、説明の簡単化のために、データ記憶装置アドレスで特定されるデータのサイズと、クラスタのサイズとが同じである場合を例に説明する。ただし、これに限定されることなく、データ記憶装置200は、データ記憶装置アドレスで特定されるデータのサイズと、クラスタのサイズとが異なるものであってもよい。
インタフェース部106は、受け付けた命令が読み込み命令であった場合、読込制御部214に受け付けた読み込み命令を転送する。
ステップ502(S502)において、読込制御部214は、読み込み先情報を生成する。より詳細には、読込制御部214は、インタフェース部106から読み込み命令を受け取ると、受け取った読み込み命令からデータ記憶装置アドレス情報を抽出する。読込制御部214は、抽出したデータ記憶装置アドレス情報を、対応する論理アドレスに変換する。読込制御部214は、変換した論理アドレスに対応付けられている情報を取得する。より詳細には、読込制御部214は、アドレス正引きテーブル162における変換された論理アドレスが示す記憶媒体251の物理アドレスと、分割したサイズの何倍であるかを示す情報とを読み込むように、第1アクセス部102に対して読み込みの指示を行う。そして、読込制御部214は、物理アドレスと、分割したサイズの何倍であるかを示す情報を取得する。読込制御部214は、取得した物理アドレスに含まれるページ上記録スロットフセット情報と、記録スロット上オフセット情報と、取得した分割したサイズの何倍であるかを示す情報から、当該クラスタが同一ページ内の隣接する記録スロット、又はページをまたがって記憶されているか否かを判断する。読込制御部214は、判断結果がYES(クラスタが同一ページ内の隣接する記録スロット、又はページをまたがって記憶されている)の場合は、連続する読み込み先記録スロットの情報を生成する。連続する読み込み先記録スロットの情報には、ブロック番号と、ページ番号と、ページ上記録スロットフセット情報が含まれる。
クラスタがページ内の隣接する記録スロットにまたがって記憶されている場合は、このうち、ブロック番号と、ページ番号には、取得した物理アドレスに含まれるブロック番号と、ページ番号が設定され、ページ上記録スロットフセット情報には、連続する情報が設定される。また、クラスタがページをまたがって記憶されている場合は、ブロック番号には取得した物理アドレスに含まれるブロック番号が設定され、ページ番号には、連続する番号が設定され、ページ上記録スロットフセット情報には、先頭の位置を示す情報が設定される。
ステップ504(S504)において、読込制御部214は、読み込み対象データを読み込む。より詳細には、読込制御部214は、取得した物理アドレスと、取得した分割したサイズの何倍かであるかを示す情報とを読み込み先情報とし、変換した論理アドレスを読み込み対象のクラスタの論理アドレスとして、読込部212に読み込み指示する。なお、読み込み対象クラスタが同一ページ内の隣接する記録スロット、又はページをまたがって記憶されている場合は、読込制御部214は、読込部212に対して、生成した連続する読み込み先記録スロットの情報を合わせて送信する。なお、読み込み対象クラスタセットが同一ページの隣接する記録スロットに書き込まれている場合は、記憶媒体251からの読み込みがページ402単位であるので、1回の読み込み処理で記憶媒体251から読み込み対象クラスタが読み込まれてもよい。
読込部212は、読み込み要求元からクラスタの読み込み要求を受け付ける。クラスタの読み込み要求には、読み込み先情報と、読み込み対象のクラスタの論理アドレスを示すデータが含まれる。読み込み先情報には、ブロック番号と、ページ番号と、ページ上記録スロットフセット情報と、記録スロット上オフセット情報と、分割したサイズの何倍であるかを示す情報とが含まれる。なお、当該読み込み対象のクラスタが記録スロットをまたがって記憶されている場合や、ページをまたがって記憶されている場合は、読込部212は、連続する読み込み先記録スロットの情報をあわせて受け付ける。連続する読み込み先記録スロットの情報には、ブロック番号と、ページ番号と、ページ上記録スロットフセット情報が含まれる。
読込部212は、取得した読み込み先情報から、ブロック番号と、ページ番号を抽出し、抽出したブロック番号のブロック400の、ページ番号のページ402のデータを読み込むように、記憶媒体アクセス部101に指示して当該ページのデータを取得する。当該読み込み対象のクラスタが記録スロットやページをまたがって記憶されている場合は、読込部212は、取得した連続する読み込み先ページの情報から、ブロック番号と、ページ番号を抽出し、抽出したブロック番号のブロック400に含まれるページ番号のページ402のデータを読み込むように、記憶媒体アクセス部101に指示して当該ページのデータをさらに取得する。なお、同一ページの隣接する記録スロットの場合には、記憶媒体251からの読み込みがページ402単位であるので、読込部212は、1回の読み込み処理で記憶媒体251から読み込むことができる。したがって、同一ページの隣接する記録スロットにまたがってクラスタが記憶されている場合には、読込部212は、1つの読み込み処理でまとめて読込んでもよい。
また、読込部212は、取得した読み込み先情報から、ページ上記録スロットフセット情報と、記録スロットフセット情報と、分割したサイズの何倍であるかを示す情報を抽出する。読込部212は、取得したページのデータのうち、抽出したページ上記録スロットフセット情報と、記録スロットフセットの情報と、分割したサイズの何倍であるかを示す情報が示す位置から、当該記録スロットのメタデータと、分割したサイズの整数倍のサイズに揃えたデータと、当該データの誤り訂正データを抽出する。当該読み込み対象のクラスタが記録スロットやページをまたがって記憶されている場合は、当該クラスタに対する残りのデータを、連続する記録スロットの先頭の位置から抽出し、あわせて、当該クラスタに対するデータとする。
ステップ506(S506)において、読込部212は、読み込み対象データを展開してホスト装置に返却する。より詳細には、読込部212は、抽出した誤り訂正データを用いて、抽出した誤り訂正対象データを誤り訂正し、誤り訂正後のデータを取得する。
より詳細には、読込部212は、抽出したデータのうち、当該記録スロットのメタデータと、分割したサイズの整数倍のサイズに揃えたデータを含むデータを、誤り訂正データを生成する基のデータであるとする。そして、読込部212は、抽出したデータのうち、誤り訂正データによって誤り訂正し、誤り訂正後のデータを取得する。
読込部212は、誤り訂正が失敗した(誤り訂正不能だった)場合は、読み込みエラーを読み込み要求元に通知する。読込制御部214は、読込部212から読み込みエラーを通知されると、読み込みエラーを示すデータをインタフェース部106に送信する。なお、第1メモリ252は、当該論理アドレスを読み込むと読み込みエラーとなる旨の情報を管理情報としてさらに記憶してもよい。このようにすることで、再度同じ論理アドレスに対して読み込み要求されたときに、すばやく読み込みエラーを返却することができる。
インタフェース部106は、読込制御部214からデータ(読み込みエラーを示すデータ)を受信すると、受信したデータ(読み込みエラーを示すデータ)を図示しないホスト装置に転送する。読込部212は、誤り訂正が成功した(誤り訂正可能だった)場合は、誤り訂正後のデータから、クラスタデータを抽出する。読込部212は、抽出したクラスタデータを、展開部105に送信し、展開部105に対して展開することを指示する。読込部212は、展開されたクラスタデータを取得する。
なお、読込部212は、誤り訂正後のデータから抽出したクラスタデータが圧縮されていない場合などには、クラスタデータを展開部105に送信しない。読込部212は、取得した展開されたクラスタデータを、読み込み要求元に送信する。読込制御部214は、読込部212から読み込んだデータを受信すると、受信したデータをインタフェース部106に送信する。インタフェース部106は、読込制御部114からデータを受信すると、受信したデータを図示しないホスト装置に転送する。
次に、データ記憶装置200が行う転記処理の手順について、図16を参照して説明する。図16は、データ記憶装置200が行う転記処理の手順の一例を示すフローチャートである。転記制御部215は、予め定められた規則に従って、図16に示す転記処理の制御をおこなう。
(転記処理)
ステップ600(S600)において、転記制御部115は、転記するクラスタを決定する。より詳細には、転記制御部215は、第1メモリ252から管理情報を読み込むように第1アクセス部102に読み込み指示し、管理情報を取得する。転記制御部215は、取得した管理情報から、任意の予め定められた方法を用いて、取得した管理情報から転記するクラスタを決定する。第2の実施の形態においては、転記するクラスタを決定する方法は公知のいずれの方法であってもよい。転記制御部215は、決定したクラスタの論理アドレスを、取得した管理情報から抽出する。
ステップ602(S602)において、転記制御部215は、読み込み先情報を生成する。より詳細には、転記制御部215は、抽出した論理アドレスに対応付けられている情報を取得する。転記制御部215は、アドレス正引きテーブル162における、変換した論理アドレスが示す記憶媒体251の物理アドレスと、分割した細部の何倍であるかを示す情報を読み込むように、第1アクセス部102に読み込み指示し、物理アドレスと、分割したサイズの何倍であるかを示す情報を取得する。
転記制御部215は、取得した物理アドレスに含まれるページ上記録スロットフセット情報と、記録スロット上オフセット情報と、取得した分割したサイズの何倍であるかを示す情報から、当該クラスタが同一ページ内の隣接する記録スロット、又はページをまたがって記憶されているか否かを判断する。転記制御部215は、判断結果がYES(同一ページ内の隣接する記録スロット、又はページをまたがって記憶されている)の場合は、連続する読み込み先の記録スロットの情報を生成する。より詳細には、連続する読み込み先記録スロットの情報には、ブロック番号と、ページ番号と、ページ上記録スロットフセット情報が含まれる。クラスタがページ内の隣接する記録スロットにまたがって記憶されている場合は、ブロック番号には、前記取得した物理アドレスに含まれるブロック番号が設定される。ページ番号には、取得した物理アドレスに含まれるページ番号が設定される。
ページ上記録スロットフセット情報には、連続する情報が設定される。また、クラスタがページをまたがって記憶されている場合は、ブロック番号に対して、取得した物理アドレスに含まれるブロック番号が設定される。ページ番号には、連続する番号が設定され、ページ上記録スロットフセット情報には、先頭の位置を示す情報が設定される。
ステップ604(S604)において、転記制御部215は、読み込み対象データを読み込む。より詳細には、転記制御部215は、取得した物理アドレスと、取得した分割したサイズの何倍かであるかを示す情報とを、読み込み先情報として、変換した論理アドレスを読み込み対象のクラスタの論理アドレスとして、読込部212に読み込み指示する。
なお、読み込み対象クラスタが同一ページ内の隣接する記録スロット、又はページをまたがって記憶されている場合、転記制御部215は、読込部212に対して、生成した連続する読み込み先記録スロットの情報を合わせて送信する。なお、クラスタが同一ページの隣接する記録スロットに書き込まれている場合は、記憶媒体251からの読み込みがページ402単位であるため、1回の読み込み処理で記憶媒体251からクラスタを読み込める。したがって、読み込み対象クラスタが同一ページ内の隣接する記録スロットをまたがって記憶されている場合は、クラスタの読込処理を1つの読み込み処理にまとめてもよい。
読込部212は、読み込み要求元からクラスタの読み込み要求を受け付ける。クラスタの読み込み要求には、読み込み先情報と、読み込み対象のクラスタの論理アドレスを示すデータが含まれる。読み込み先情報には、ブロック番号と、ページ番号と、ページ上記録スロットフセット情報と、記録スロット上オフセット情報と、分割したサイズの何倍であるかを示す情報とが含まれる。なお、当該読み込み対象のクラスタが記録スロットをまたがって記憶されている場合や、ページをまたがって記憶されている場合は、読込部212は、連続する読み込み先記録スロットの情報をあわせて受け付ける。連続する読み込み先記録スロットの情報には、ブロック番号と、ページ番号と、ページ上記録スロットフセット情報が含まれる。
読込部212は、取得した読み込み先情報から、ブロック番号と、ページ番号を抽出し、抽出したブロック番号のブロック400の、ページ番号のページ402のデータを読み込むように、記憶媒体アクセス部101に指示して当該ページのデータを取得する。当該読み込み対象のクラスタが記録スロットやページをまたがって記憶されている場合は、読込部212は、取得した連続する読み込み先ページの情報から、ブロック番号と、ページ番号を抽出し、抽出したブロック番号のブロック400に含まれるページ番号のページ402のデータを読み込むように、記憶媒体アクセス部101に指示して当該ページのデータをさらに取得する。なお、同一ページの隣接する記録スロットの場合には、記憶媒体251からの読み込みがページ402単位であるので、読込部212は、1回の読み込み処理で記憶媒体251から読み込むことができる。したがって、同一ページの隣接する記録スロットにまたがってクラスタが記憶されている場合には、読込部212は、1つの読み込み処理でまとめて読込んでもよい。
また、読込部212は、取得した読み込み先情報から、ページ上記録スロットフセット情報と、記録スロットフセット情報と、分割したサイズの何倍であるかを示す情報を抽出する。読込部212は、取得したページのデータのうち、抽出したページ上記録スロットフセット情報と、記録スロットフセットの情報と、分割したサイズの何倍であるかを示す情報が示す位置から、当該記録スロットのメタデータと、分割したサイズの整数倍のサイズに揃えたデータと、当該データの誤り訂正データを抽出する。当該読み込み対象のクラスタが記録スロットやページをまたがって記憶されている場合は、当該クラスタに対する残りのデータを、連続する記録スロットの先頭の位置から抽出し、あわせて、当該クラスタに対するデータとする。
ステップ606(S606)において、転記制御部215は、読み込んだ読み込み対象データを展開して取得する。より詳細には、読込部212は、抽出した誤り訂正データを用いて、抽出した誤り訂正対象データを誤り訂正し、誤り訂正後のデータを取得する。より詳細には、抽出したデータのうち、該記録スロットのメタデータと、分割したサイズの整数倍のサイズに揃えたデータを含むデータを誤り訂正データの生成の基のデータであるとして、抽出したデータのうち、誤り訂正データを誤り訂正データであるとして、誤り訂正し、誤り訂正後のデータを取得する。読込部212は、誤り訂正が失敗した(誤り訂正不能だった)場合は、読み込みエラーを読み込み要求元に通知する。転記制御部215は、読込部212から読み込みエラーを通知されると、転記処理後も当該クラスタを読み込むとエラーとなるように整合性を担保する処理をする。例えば、読み込みエラーとなったクラスタデータを読み込みエラーとなる状態のまま転記してもよいし、第1メモリ252が有する管理情報において、該論理アドレスを読み込むと読み込みエラーとなる旨の情報を記憶しておき、読み込みエラーとなったクラスタデータは転記しないようにしてもよい。読込部212は、誤り訂正が成功した(誤り訂正可能だった)場合は、誤り訂正後のデータから、クラスタデータを抽出する。読込部212は、抽出したクラスタデータを、展開部105に送信し、展開部105に展開指示し、展開されたクラスタデータを取得する。
なお、読込部212は、誤り訂正後のデータから抽出したクラスタデータが圧縮されていない場合などには、クラスタデータを展開部105に送信しない。読込部212は、取得した展開されたクラスタデータを、読み込み要求元に送信する。転記制御部215は、読込部212から読み込んだデータを受信する。
ステップ608(S608)において、転記制御部215は、書き込み先情報を生成する。より詳細には、転記制御部215は、書込部211に対する前回のクラスタ書き込み要求において送信した書き込み先情報を、書込部211に対する前回のクラスタ書き込み要求において書込部211から返信された分割したサイズの何倍であるかを示す情報が示す記録スロット上オフセット分だけずらした書き込み先情報を生成する。
より詳細には、書込部211に対する前回のクラスタ書き込み要求において送信した書き込み先情報には、クラスタの書き込み先のブロック番号と、ページ番号と、ページ上記録スロットフセット情報と、記録スロット上オフセット情報が含まれる。このうち、記録スロット上オフセットの情報に、書込部211に対する前回のクラスタ書き込み要求において書込部211から返信された分割したサイズの何倍であるかを示す情報が示す分のオフセットを加算することで、転記制御部215は、当該書き込み先情報を生成する。
なお、書込部211に対する前回のクラスタ書き込み要求において、書込部211に次の書き込み先情報を与えた(クラスタが記録スロットまたはページをまたがって記憶された)場合は、次の書き込み先情報に分割したサイズの何倍であるかの残りの分だけずらした書き込み先情報を生成する。
より詳細には、次の書き込み先情報には、クラスタの書き込み先のブロック番号と、ページ番号と、ページ上記録スロットフセット情報と、記録スロットの先頭の位置を示す記録スロット上オフセット情報が含まれる。書込部211は、記録スロット上オフセット情報に、分割したサイズの何倍であるかの残りの分のオフセットを加算することで、当該書き込み先情報を生成する。
なお、データ記憶装置200は、ホスト装置から書き込み要求されたデータを書き込むブロック400と、転記先のブロック400とが同じである構成の場合、書込制御部213と転記制御部215とが、生成する書き込み先情報が重複しないように連携して処理を行う。転記制御部215は、生成した書き込み先情報と、書き込み対象のクラスタデータとして抽出した書き込みデータと、書き込み対象のクラスタの論理アドレスとして変換した論理アドレスとを、書込部211に送信し、書込部211に書き込み指示する。
書込部211は、転記制御部215からクラスタの書き込み要求を受け付ける。クラスタの書き込み要求には、書き込み先情報と、書き込み対象のクラスタデータと、書き込み対象のクラスタの論理アドレスを示すデータが含まれる。書き込み先情報には、クラスタの書き込み先のブロック番号と、ページ番号と、ページ上記録スロットフセット情報と、記録スロット上オフセット情報が含まれる。
ステップ610(S610)において、書込部211は、圧縮部104によってクラスタデータを(必要に応じて)圧縮する。書込部211が、クラスタデータを圧縮する手順は書込部111と同様である。
具体的には、書込部211は、受け付けたクラスタの書き込み要求から書き込み対象のクラスタデータを抽出する。書込部211は、抽出した書き込み対象のクラスタデータを圧縮部104に送信し、クラスタデータを圧縮することを圧縮部104に対して指示する。そして、書込部211は、圧縮部104が圧縮した書き込み対象のクラスタデータを取得する。
書込部211は、受け付けたクラスタの書き込み要求から書き込み対象のクラスタの論理アドレスを示すデータを抽出し、抽出した書き込み対象のクラスタの論理アドレスを示すデータを含むメタデータを生成する。なお、クラスタセットに含まれるメタデータを圧縮する場合は、書込部211は、圧縮されたメタデータをメタデータと同様に扱う。
ステップ612(S612)において、書込部211は、分割したサイズの整数倍にデータのサイズを揃える。より詳細には、書込部211は、生成したメタデータと、取得した圧縮されたクラスタデータと、を合わせたデータを分割したサイズの整数倍のサイズに揃える。
より詳細には、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータとを合わせたデータが、分割したサイズの整数倍以下となった場合、分割したサイズの整数倍の領域から、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータと、を合わせたデータの領域を除いた残りの領域分のダミーデータを生成する。なお、ダミーデータとしては、予め定められた値(例えば全て0)でもよいし、ランダムな値でもよい。また、ダミーデータは、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータとを合わせたデータを生成の基にした誤り訂正データでもよい。ダミーデータを誤り訂正データとした場合には、記憶データの信頼性が向上するという効果を奏する。
具体的には、第2の実施形態では、前述したようにクラスタデータが4分割されている場合について記載しているため、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータと、を合わせたデータが、分割したサイズ(の1倍)以下となった場合、図10(a)に示すように、分割したサイズ(の1倍)の領域から、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータと、を合わせたデータの領域を除いた残りの領域には、ダミーデータを記憶することにより、データのサイズを分割したサイズの整数倍に揃える。
同様に、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータとを合わせたデータが、分割したサイズの2倍以下となった場合は、図10(b)に示すように、分割したサイズの整数倍にデータのサイズを揃える。また、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータとを合わせたデータが、分割したサイズの3倍以下となった場合は、図10(c)に示すように、分割したサイズの整数倍にデータのサイズを揃える。なお、データのサイズは、分割したサイズの整数倍に限られず、2の倍数のサイズなど、他のサイズに揃えられてもよい。
ここで、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータとを合わせたデータが、分割したサイズの4倍以下、すなわち、圧縮しないクラスタデータのサイズ以下となった場合は、次のいずれかのようにデータのサイズを揃えてもよい。例えば、図10(d)に示すように、データのサイズを図10(a)〜(c)と同様に分割したサイズの整数倍のサイズに揃えてもよい。また、クラスタデータを圧縮せずに、図9に示されるページ402に複数含まれる記録スロットに対し、データをそのまま記憶してもよい。
クラスタデータを圧縮して記憶し、分割したサイズの整数倍のサイズに揃えることの利点は、例えば、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータと、を合わせたデータを生成の基とした誤り訂正データをダミーデータとし、記憶データの信頼性を向上させることがあげられる。また、後述するように、同一ページ内の隣接する記録スロットにまたがってクラスタを記憶したり、ブロック400を管理する管理単位をまたがない範囲(例えば同一のブロック400内)で、物理アドレスが連続する場合に限り、ページをまたいでデータを記憶できる。したがって、第2の実施の形態によれば、記憶媒体251の記憶効率が向上させることができ、データ記憶装置200の寿命を延ばすことができるという効果を奏する。
一方、クラスタデータを圧縮せずに記憶することの利点としては、例えば、書き込み時の圧縮処理にかかる処理時間や、読み込み時の展開処理にかかる処理時間を削減することが可能となることがあげられる。また、圧縮したクラスタは、図3(b)に示したページにまたがって記憶されることと同様に、図11(a)に示した同一ページ内の隣接する記録スロットにまたがって記憶されてもよい。また、圧縮したクラスタは、図11(b)に示すように、ブロック400を管理する管理単位をまたがない範囲で、物理アドレスが連続する場合に限り、ページ402をまたいで記憶されてもよい。なお、図11では、説明を簡単にするために、記録スロットのメタデータや誤り訂正データの記憶領域は記載していない。
ステップ614(S614)において、書込部211は、書き込み先の記録スロットに、分割したサイズの整数倍のサイズに揃えたデータが収まるか判定する。書込部211は、書き込み先情報に含まれる記録スロット上オフセットの情報に対し、分割したサイズの整数倍のサイズを加算した結果が当該記録スロットに収まっているかを判定する。
ステップ616(S616)において、第2メモリ153は、整数倍のサイズに揃えたデータを一時記憶する。より詳細には、書込部211は、S614の処理において判定結果がYES(書き込み先の記録スロットに収まる)の場合、分割したサイズの整数倍のサイズに揃えたデータを第2メモリ153が一時記憶するように、第2アクセス部103に書き込み指示する。また、書込部211は、書込要求元に分割したサイズの整数倍のサイズに揃えたデータが分割したサイズの何倍であるかを示す情報を返却する。転記制御部215は、分割したサイズの何倍であるかを示す情報を書込部211から受信する。
ステップ618(S618)において、書込部211及び転記制御部215は、末端処理をする。より詳細には、書込部211は、判定結果がNO(書き込み先の記録スロットに収まらない)の場合、書き込み先の記録スロットあふれを示す応答を書込要求元に応答する。転記制御部215は、書込部211から書き込み先の記録スロットのあふれを示す応答を受け取ると、同一ページ内の隣接する記録スロットであるか、ブロック400を管理する同一の管理単位内で物理アドレスが連続する場合、次の書き込み先情報を書込部211に与える。書込部211は、書込要求元から次の書き込み先情報を受け付けると、第2メモリ153が分割したサイズの整数倍のサイズに揃えたデータを一時記憶するように、第2アクセス部103に書き込み指示する。また、書込部211は、書込要求元に分割したサイズの整数倍のサイズに揃えたデータが分割したサイズの何倍であるかを示す情報を返却する。転記制御部215は、書込部211から分割したサイズの何倍であるかを示す情報を受信する。そして、S620の処理に進む。
なお、転記制御部215は、書込部211から書き込み先の記録スロットあふれを示す応答を受け付けると、ダミーデータ記憶指示を書込部211に与えてもよい。同一ページ内の隣接する記録スロットであるか、ブロック400を管理する管理単位をまたがない範囲で、物理アドレスが連続する場合以外の場合は、転記制御部215は、ダミーデータ記憶指示を書込部211に与える。書込部211は、書込要求元からダミーデータ記憶指示を受け付けると、書き込み先の記録スロットの残りの領域のサイズ分のダミーデータを生成する。書込部211は、第2メモリ153が生成したダミーデータを一時記憶するように、第2アクセス部103に書き込み指示する。
ここで、書込部211は、ダミーデータの代わりに第2メモリ153が一時記憶している分割したサイズの整数倍のサイズに揃えたデータの誤り訂正データを生成してもよい。書込部211は、第2メモリ153が一時記憶している分割したサイズの整数倍のサイズに揃えたデータの誤り訂正データを利用することで、データの信頼性を高めてもよい。また、書込部211は、分割したサイズの整数倍のサイズに揃えたデータの順番を適宜入れ替えてダミーデータを記憶する量を削減し、記憶媒体251の利用効率を高めてもよい。
なお、転記制御部215は、ダミーデータ記憶指示を書込部211に与えた場合、当該書き込み対象のクラスタデータを書き込むために、新たな書き込み先記録スロットを確保し、上記書き込み処理をステップS608からやり直す。
ステップ620(S620)において、書込部211は、第2メモリ153が一時記憶しているデータの合計サイズが1記録スロット分以上になったか否かを判定する。書込部211は、第2メモリ153が一時記憶しているデータの合計サイズが1記録スロット分以上になっていない場合(S620:No)は、S600の処理に進む。また、書込部211は、第2メモリ153が一時記憶しているデータの合計サイズが1記録スロット分以上になった場合(S620:Yes)は、S622の処理に進む。
ステップ622(S622)において、書込部211は、記録スロットデータを生成する。より詳細には、書込部211は、1記録スロット分のデータが揃うと、記録スロットの記憶フォーマットのうちのメタデータとして、圧縮して記憶されたクラスタの配置パターンを示す特殊な値(マジックナンバー)を示すデータを生成する。また、書込部211は、記録スロットの記憶フォーマットのうち誤り訂正データを生成する。
より詳細には、例えば、クラスタデータが4分割されている場合、図9に示すように、第1の誤り訂正データを生成する基になっているデータには、生成したマジックナンバーを示すデータであるメタデータと、第1のデータが含まれる。第2の誤り訂正データを生成する基になっているデータには、生成したマジックナンバーを示すデータであるメタデータと、第2のデータが含まれる。第3の誤り訂正データを生成する基になっているデータには、生成したマジックナンバーを示すデータであるメタデータと、第3のデータが含まれる。第4の誤り訂正データを生成する基になっているデータには、生成したマジックナンバーを示すデータであるメタデータと、第4のデータが含まれる。
書込部211は、生成したマジックナンバーを示すデータであるメタデータと、第2メモリ153が一時記憶している分割したサイズの整数倍のサイズに揃えたデータと、生成した誤り訂正データとを記録スロットのデータとして一時記憶するように、第2アクセス部103に書き込みする指示を行う。なお、書込部211は、圧縮してもデータサイズが小さくならないなどの圧縮の必要性がない場合などには、抽出した書き込み対象のクラスタデータを圧縮部104に送信せずに、ページ402に複数含まれる記録スロットにそのまま当該クラスタのデータを記憶してもよい。
ステップ624(S624)において、転記制御部215は、第2メモリ153が一時記憶しているデータの合計サイズが1ページ分以上になったか否かを判定する。書込部211は、第2メモリ153が一時記憶しているデータの合計サイズがページ402のサイズ以上になっていない場合(S624:No)は、S600の処理に進む。また、書込部211は、第2メモリ153が一時記憶しているデータの合計サイズがページ402のサイズ以上になった場合(S624:Yes)は、S626の処理に進む。転記制御部215は、書込部211への書き込み要求が、書き込みデータを圧縮した結果として、少なくとも1ページ分になるまでS600から上記処理を繰り返す。これは、記憶媒体251の入出力単位がページ402であるので、少なくとも1ページ分書き込みが行われないと、後述する管理情報の更新処理ができず、転記処理が完了しないからである。
ステップ626(S626)において、書込部211は、記憶媒体アクセス部101を介して1ページ分のデータを記憶媒体251に書き込む。より詳細には、書込部211は、第2メモリ153が一時記憶しているデータの合計サイズがページ402のサイズ以上になったら、第2メモリ153が一時記憶しているデータのうち、ページサイズ分のデータを読み込むように第2アクセス部103に読み込みの指示を行ってページサイズ分のデータを取得する。ここで、書込部211は、書き込み先のページとして、書込要求元から受信した書き込み先情報に含まれるクラスタの書き込み先のブロック番号と、ページ番号とを記憶媒体アクセス部101に指示する。
ステップ628(S628)において、転記制御部215は、管理情報を更新する。より詳細には、書込部211は、書き込み先のページの書き込み完了通知を書込要求元に通知する。転記制御部215は、書込部211から、書き込み完了通知を受信すると、当該ページに書き込まれたクラスタに対して、アドレス正引きテーブル162を更新する。転記制御部215は、当該ページに書き込まれたクラスタに対して、アドレス正引きテーブル162における変換した論理アドレスが示す記憶媒体251の物理アドレスを、書き込み先の記憶媒体251の物理アドレスに更新するように、第1アクセス部102に書き込み指示する。また、転記制御部215は、当該ページに書き込まれたクラスタに対して、書込部211から取得した分割したサイズの何倍であるかを示す情報を、アドレス正引きテーブル162に書き込むように、第1アクセス部102に書き込み指示する。
このように、第2の実施の形態によれば、ページ402に書き込むクラスタセットのサイズを予め定められた単位に揃えることができるため、第1の実施の形態と比較すると記憶媒体251の記憶効率は多少低下するものの、データを管理するために必要な処理を少なくすることができる。
(第3の実施の形態)
次に、第3の実施の形態について説明する。第3の実施の形態では、第1及び第2の実施の形態におけるアドレス正引きテーブルのサイズを削減し、アドレス正引きテーブルのために確保すべきメモリ容量を削減する。なお、第3の実施の形態は、第2の実施の形態を変形させた実施の形態として説明するが、第1の実施の形態を変形させた実施の形態であってもよい。
第3の実施の形態にかかるデータ記憶装置のコントローラは、第2の実施の形態にかかるデータ記憶装置のコントローラに加えて、さらに、記憶媒体が、複数のページからなるブロックを含み、書込制御部が、クラスタデータを記憶媒体に書き込む場合に、論理アドレスを含むメタデータを合わせて書き込むとともに、書込先の物理アドレスとして少なくともブロックを特定する情報を記憶部に書き込むよう制御し、読込制御部が、記憶部から取得した物理アドレスに記録されている複数のクラスタデータを読み込み、読み込んだクラスタデータとともに書き込んだメタデータを抽出し、抽出したメタデータに含まれる論理アドレスと読み込み要求されたデータの論理アドレスとを比較し、それぞれの論理アドレスが一致するクラスタデータを読込むよう制御し、転記制御部が、記憶媒体に書き込まれたクラスタデータの中から転記するクラスタデータを予め定められた規則に従って決定し、決定したクラスタデータに対応する物理アドレスを記憶部から取得し、取得した物理アドレスに記録されている複数のクラスタデータを読み込み、読み込んだクラスタデータとともに書き込んだメタデータを抽出し、抽出したメタデータに含まれる論理アドレスと決定したクラスタデータの論理アドレスとを比較し、それぞれの論理アドレスが一致するクラスタデータを読込むよう制御し、クラスタデータを記憶媒体に書き込む場合に、論理アドレスを含むメタデータを合わせて書き込むとともに、転記先の物理アドレスとして少なくともブロックを特定する情報を記憶部に書き込むよう制御することを特徴とする。
また、第3の実施の形態にかかるデータ記憶装置のコントローラは、さらに、読込制御部が、クラスタデータの記憶順番が最後のものから順に論理アドレスを比較し、転記制御部が、クラスタデータの記憶順番が最後のものから順に論理アドレスを比較することを特徴とする。
以降、より詳細な一例を説明する。まず、第3の実施の形態のデータ記憶装置の構成について説明する。なお、第2の実施の形態と同様の機能を有する構成要素については、第2の実施の形態と同様符号が付してある。例えば、読み書き対象が第1メモリ252ではなく第1メモリ352であるだけで、そのほかの機能は第2の実施の形態と同様である構成要素についても、第2の実施の形態と同様の符号が付してある。
図17は、第3の実施の形態のデータ記憶装置300の機能構成の一例を示すブロック図である。図17に示すように、データ記憶装置300は、コントローラ310と、第1アクセス部102と、第1メモリ352と、第2アクセス部103と、第2メモリ153と、記憶媒体アクセス部101と、記憶媒体251と、インタフェース部106と、圧縮部104と、展開部105と、を有する。
(第1メモリ352)
第1メモリ352は、管理情報を記憶する。管理情報には、アドレス正引きテーブル164が含まれる。また、第1メモリ352は、データ記憶装置300が行う様々な処理を簡単にするために、アドレス正引きテーブル164が含む情報から導出される情報を予め記憶するように構成されてもよい。
アドレス正引きテーブル164は、クラスタの論理アドレスと、論理アドレスのデータが格納されている記憶媒体251の物理アドレスの対応付けを管理する。アドレス正引きテーブル164は、管理する物理アドレスの情報を最少にする場合、ブロック400を示す情報だけを管理対象とされてもよい。例えば、アドレス正引きテーブル162は、記憶媒体251の物理アドレスとして、ブロック番号情報と、ページ番号情報と、ページ上記録スロットフセット情報と、記録スロット上オフセット情報の組を管理していた。これに対し、アドレス正引きテーブル164は、図18(a)に示すように、管理する物理アドレスの情報を最少にする場合、ブロック番号情報を管理すればよいことになる。
ここで、アドレス正引きテーブル164が管理する情報の量が増えると、以下に説明するクラスタデータの読み書き処理量が減り、アドレス正引きテーブル164が管理する情報の量が減ると、以下に説明するクラスタデータの読み書き処理量が増えるという関係がある。以下、第3の実施の形態では、図18(b)に示すように、アドレス正引きテーブル164がブロック番号情報と、ページ番号情報の組を管理する構成で説明する。ただし、アドレス正引きテーブル164は、図18(b)に示した構成に限定されることなく、他の構成であってもよい。なお、第3の実施の形態では、アドレス正引きテーブル164は、情報量(サイズ)を削減するために、アドレス正引きテーブル162が記憶する分割したサイズの何倍であるかを示す情報を記憶しない。
(コントローラ310)
コントローラ310は、書込部211と、読込部312と、書込制御部313と、読込制御部314と、転記制御部315と、を有する。
(読込部312)
読込部312は、読み込み要求元からクラスタの読み込み要求を受け付ける。クラスタの読み込み要求には、読み込み先情報と、読み込み対象のクラスタの論理アドレスを示すデータが含まれる。読み込み先情報には、ブロック番号と、ページ番号と、が含まれる。読込部312は、取得した読み込み先情報から、ブロック番号と、ページ番号を抽出し、抽出したブロック番号のブロック400の、ページ番号のページ402のデータを読み込むように、記憶媒体アクセス部101に指示し、当該ページのデータを取得する。なお、ページ402には複数の記録スロットが格納されているが、ページ402に格納される記録スロットの数は変更可能である。また、記憶媒体251へのデータの入出力単位はページ402であるので、前述のように当該ページのデータをすべて読み込んでも読み込み処理において新たに生じる処理はない。
読込部312は、取得したページのデータに含まれる記録スロットのデータを誤り訂正し、誤り訂正後の記録スロットのデータを取得する。読込部312は、誤り訂正が失敗した(誤り訂正不能だった)場合は、読み込みエラーを読み込み要求元に通知する。読込部312は、誤り訂正が成功した(誤り訂正可能だった)場合は、誤り訂正後のデータから、各記録スロットのメタデータを抽出する。読込部312は、抽出した各記録スロットのメタデータに含まれるマジックナンバーから、各記録スロットに記憶されているクラスタの配置パターンを算出する。なお、抽出した各記録スロットのメタデータに、該記録スロットにクラスタが圧縮されて記憶されている旨のマジックナンバーが含まれていなかったときは、読込部312は、該記録スロットにはクラスタが圧縮されずに記憶されていると判断する。また、読込部312は、誤り訂正後のデータから、算出したクラスタの配置パターンに従って、各クラスタのメタデータを抽出する。なお、読込部312は、圧縮されて記憶されているクラスタのメタデータが圧縮されずに記憶されている場合は、誤り訂正後のデータからそのまま抽出する。一方、読込部312は、圧縮されて記憶されているクラスタのメタデータが圧縮されて記憶されている場合は、誤り訂正後のデータを展開部105に展開指示することにより、当該メタデータを取得する。
なお、図19に示すように、記録スロットの端に記憶されているクラスタは、記憶時点の状況によって、圧縮されたクラスタの一部であるのか全部であるのかのどちらかであるため、圧縮されたクラスタの一部であるのか全部であるのかのどちらかであるかを判断する必要がある。読込部312は、当該クラスタの展開を試みることで、この判断が可能である。より詳細には、読込部312は、記録スロットの端に記憶されているクラスタの展開を試みるように、展開部105に展開指示する。展開が成功し、展開した結果、クラスタのサイズ分のクラスタデータが得られた場合は、当該クラスタは圧縮されたクラスタの全部であったと判断できる。一方、展開に失敗した場合や、展開した結果、クラスタのサイズ分に満たないクラスタデータが得られた場合は、読込部312は、該クラスタは圧縮されたクラスタの一部であったと判断する。なお、図19では、説明の簡単のために、記録スロットのメタデータや誤り訂正データの記憶領域は記載していない。
ここで、当該ページ402におけるクラスタの記憶順番の一番最初のクラスタが全部であると判断された場合、読込部312は、当該クラスタのメタデータを抽出する。一方、該ページ402におけるクラスタの記憶順番の一番最初のクラスタが一部であると判断された場合(図19の右側のページが読み込み対象のページであった時の圧縮したクラスタデータその6に相当する)、読込部312は、当該クラスタのメタデータは抽出しない。これは、当該クラスタについて、アドレス正引きテーブル164には、ひとつ前の連続するページの物理アドレスが書き込まれているため、当該クラスタに対して読み込み要求があった場合は、読込部312に対して、ひとつ前の連続するページが読み込み要求されるからである。
また、図19に示した圧縮したクラスタデータその4のように、当該ページ内の隣接する記録スロットの隣り合う端に記憶されているクラスタがともに一部であると判断された場合、それらのクラスタを合わせると全部となるため、読込部312は、当該全部となるクラスタのメタデータを抽出する。一方、図19に示した圧縮したクラスタデータその1及びその2のように、当該ページ内の隣接する記録スロットの隣り合う端に記憶されているクラスタがともに全部であると判断された場合、読込部312は、それぞれのクラスタのメタデータを抽出する。
また、図19の左側のページが読み込み対象のページであった場合の圧縮したクラスタデータその6のように、当該ページ402におけるクラスタの記憶順番の一番最後のクラスタが一部であると判断された場合、当該一番最後のクラスタは、物理アドレスが連続する次のページ402のクラスタの記憶順番の一番最初のクラスタと合わせられることにより、全部のクラスタデータとなる。したがって、読込部312は、誤り訂正処理までと同様の手順で連続する次のページ402に記憶されているデータを取得し、物理アドレスが連続する次のページ402のクラスタの記憶順番の一番最初のクラスタと合わせることで、全部となるクラスタデータを抽出する。また、読込部312は、当該全部となるクラスデータのメタデータを抽出する。一方、当該ページ402におけるクラスタの記憶順番の一番最後のクラスタが全部であると判断された場合、読込部312は、当該クラスタのメタデータを抽出する。読込部312は、受け付けた読み込み要求に含まれる読み込み対象のクラスタの論理アドレスを抽出する。読込部312は、抽出した各クラスタのメタデータに含まれる論理アドレスを抽出する。読込部312は、抽出した読み込み対象のクラスタの論理アドレスと、抽出した各クラスタのメタデータに含まれる論理アドレスを比較して、一致するクラスタを読み込み対象のクラスタと判断する。
なお、同じ論理アドレスを持つクラスタが複数存在する場合は、その複数存在するクラスタのうち、当該ページ402におけるクラスタの記憶順番が一番最後のクラスタを読み込み対象のクラスタと判断する。したがって、当該ページ402におけるクラスタの記憶順番の一番最後のものから順番に論理アドレスを比較することにより、比較時間を短縮することができるという効果を奏する。
読込部312は、読み込み対象のクラスタと判断したクラスタデータを展開部105に送信して展開部105に展開指示し、展開されたクラスタデータを取得する。なお、読込部312は、必要に応じて、読み込み対象のクラスタと判断したクラスタデータを、展開部105に送信しない場合がある。この場合、読込部312は、以降の処理における展開されたクラスタデータを展開部105に送信しなかった読み込み対象のクラスタデータで読み替える。例えば、クラスタデータが圧縮されずに記憶媒体251に記憶されていた場合、読込部312は、クラスタデータを展開部105に送信しない。読込部312は、取得したクラスタデータを、読み込み要求元に送信する。
(書込制御部313)
書込制御部313は、次の処理以外の処理を書込制御部213と同様に行う。
書込制御部313は、書込部211から、書き込み完了通知を受信すると、当該ページに書き込まれたクラスタに対して、アドレス正引きテーブル164を更新する。より詳細には、書込制御部313は、当該ページに書き込まれたクラスタに対して、アドレス正引きテーブル164における変換した論理アドレスが示す記憶媒体251の物理アドレスを、書き込み先の記憶媒体251の物理アドレスに更新するように、第1アクセス部102に書き込み指示する。ただし、更新する書き込み先の記憶媒体251の物理アドレスは、生成した書き込み先情報に含まれるブロック番号情報と、ページ番号情報である。なお、当該ページ402におけるクラスタの記憶順番の一番最初のクラスタが一部である場合(図19の右側のページが書き込み完了したページであった場合の圧縮したクラスタその6に相当する)、書込制御部313は、当該クラスタについては、アドレス正引きテーブル164を更新しない。これは、当該クラスタに対しては、アドレス正引きテーブル164には、ひとつ前の連続するページの物理アドレスが書き込まれているためである。また、書込制御部313は、書込制御部213と異なり、当該ページに書き込まれたクラスタに対して、書込部221から取得した分割したサイズの何倍であるかを示す情報を、アドレス正引きテーブル164に書き込むように、第1アクセス部102には指示しない。
(読込制御部314)
読込制御部314は、インタフェース部106から読み込み命令を受け取ると、受け取った読み込み命令からデータ記憶装置アドレス情報を抽出する。読込制御部314は、抽出したデータ記憶装置アドレス情報を、対応する論理アドレスに変換する。読込制御部314は、変換した論理アドレスに対応付けられている情報を取得する。より詳細には、読込制御部314は、アドレス正引きテーブル164における、変換した論理アドレスが示す記憶媒体251の物理アドレスを読み込むように、第1アクセス部102に読み込み指示し、物理アドレスを示す情報を取得する。物理アドレスには、ブロック番号情報と、ページ番号情報が含まれる。
読込制御部314は、取得した物理アドレスを読み込み先情報とし、変換した論理アドレスを読み込み対象のクラスタの論理アドレスとして、読込部312に読み込み指示する。読込制御部314は、読込部312から読み込みエラーを通知されると、読み込みエラーを示すデータをインタフェース部106に送信する。なお、第1メモリ352は、当該論理アドレスを読み込むと読み込みエラーとなる旨の情報を管理情報としてさらに記憶してもよい。このようにすることで、再度同じ論理アドレスに対して読み込み要求されたときに、すばやく読み込みエラーを返却することができる。読込制御部314は、読込部312から読み込んだデータを受信すると、受信したデータをインタフェース部106に送信する。
(転記制御部315)
転記制御部315は、予め定められた規則に従って、以下に述べる転記処理の制御をおこなう。まず、転記制御部315は、転記するクラスタを決定する。より詳細には、転記制御部315は、第1メモリ352から管理情報を読み込むように第1アクセス部102に読み込み指示し、管理情報を取得する。転記制御部315は、取得した管理情報から、予め定められた規則に従って、転記するクラスタを決定する。転記するクラスタの決定は、任意の公知の規則に従って行われてもよい。転記制御部315は、決定したクラスタの論理アドレスを、取得した管理情報から抽出する。
転記制御部315は、転記するクラスタを読み込む。より詳細には、転記制御部315は、抽出した論理アドレスに対応付けられている情報を取得する。転記制御部315は、アドレス正引きテーブル164における変換した論理アドレスが示す記憶媒体251の物理アドレスを読み込むように、第1アクセス部102に読み込み指示し、物理アドレスを示す情報を取得する。物理アドレスには、ブロック番号情報と、ページ番号情報が含まれる。
転記制御部315は、取得した物理アドレスを、読み込み先情報として、変換した論理アドレスを読み込み対象のクラスタの論理アドレスとして、読込部312に読み込み指示する。転記制御部315は、読込部312から読み込みエラーを通知されると、転記処理後も当該クラスタを読み込むとエラーとなるように整合性を担保する処理をする。例えば、転記制御部315は、読み込みエラーとなったクラスタデータを読み込みエラーとなる状態のまま転記してもよいし、第1メモリ352が有する管理情報において、当該論理アドレスを読み込むと読み込みエラーとなる旨の情報を記憶しておき、読み込みエラーとなったクラスタデータは転記しないようにしてもよい。転記制御部315は、読込部312から読み込んだデータを受信する。
転記制御部315は、転記するクラスタを書き込む。転記制御部315の転記するクラスタを書き込む処理は、転記制御部215の転記するクラスタを書き込む処理と同様である。転記制御部315は、書込部211への書き込み要求が、書き込みデータを圧縮した結果、少なくとも1ページ分になるまで上記処理を繰り返す。これは、記憶媒体251の入出力単位がページ402であるので、少なくとも1ページ分書き込みを行わなければ、後述する管理情報の更新処理ができず、転記処理が完了しないからである。
転記制御部315は、転記したクラスタの管理情報を更新する。より詳細には、転記制御部315は、書込部211から、書き込み完了通知を受信すると、当該ページに書き込まれたクラスタに対して、アドレス正引きテーブル164を更新する。より詳細には、転記制御部315は、当該ページに書き込まれたクラスタに対して、アドレス正引きテーブル164における、変換した論理アドレスが示す記憶媒体251の物理アドレスを、書き込み先の記憶媒体251の物理アドレスに更新するように、第1アクセス部102に書き込み指示する。ただし、更新する書き込み先の記憶媒体251の物理アドレスは、生成した書き込み先情報に含まれるブロック番号情報と、ページ番号情報である。なお、当該ページ402におけるクラスタの記憶順番の一番最初のクラスタが一部である場合(図19の右側のページが書き込み完了したページであった時の圧縮したクラスタデータその6に相当する)、転記制御部315は、当該クラスタについては、アドレス正引きテーブル164を更新しない。これは、当該クラスタに対しては、アドレス正引きテーブル164には、ひとつ前の連続するページの物理アドレスが登録されているためである。転記制御部315は、予め定められた規則に従って、上記処理を必要に応じて繰り返す。
次に、第3の実施の形態のデータ記憶装置300の動作について説明する。まず、図示しないホスト装置からの書き込み命令に応じて、データ記憶装置300が行う書き込み処理の手順について、図20を参照して説明する。図20は、データ記憶装置300が行う書き込み処理の手順の一例を示すフローチャートである。なお、図20に示したフローチャートにおいては、図14に示したフローチャートに対して書込制御部213が書込制御部313に代えられている。ただし、図20に示したフローチャートにおいて、図14に示した処理と実質的に同一な処理には同一の符号が付してある。
(書き込み処理)
ステップ722(S722)において、書込制御部313は、管理情報を更新する。より詳細には、書込部211は、書き込み先のページの書き込み完了通知を書込要求元に通知する。書込制御部313は、書込部211から、書き込み完了通知を受信すると、当該ページに書き込まれたクラスタに対して、アドレス正引きテーブル164を更新する。書込制御部313は、当該ページに書き込まれたクラスタに対して、アドレス正引きテーブル164における変換した論理アドレスが示す記憶媒体251の物理アドレスを、書き込み先の記憶媒体251の物理アドレスに更新するように、第1アクセス部102に書き込み指示する。ただし、更新する書き込み先の記憶媒体251の物理アドレスは、生成した書き込み先情報に含まれるブロック番号情報とページ番号情報である。なお、当該ページ402におけるクラスタの記憶順番の一番最初のクラスタが一部である場合(図19の右側のページが書き込み完了したページであった時の圧縮したクラスタその6に相当する)、書込制御部313は、当該クラスタについては、アドレス正引きテーブル164を更新しない。これは、当該クラスタに対しては、アドレス正引きテーブル164には、ひとつ前の連続するページの物理アドレスが登録されているためである。
次に、図示しないホスト装置からの読み込み命令に応じて、データ記憶装置300が行う読み込み処理の手順について、図21を参照して説明する。図21は、データ記憶装置300が行う読み込み処理の手順の一例を示すフローチャートである。
(読み込み処理)
ステップ800(S800)において、データ記憶装置300は、読み込み命令を受け付ける。より詳細には、インタフェース部106は、図示しないホスト装置から、書き込み命令及び読み込み命令を含む命令を受け付ける。書き込み命令には、データ記憶装置アドレス情報及び書き込みデータが含まれる。読み込み命令には、データ記憶装置アドレス情報が含まれる。
データ記憶装置アドレス情報は、データ記憶装置300が図示しないホスト装置に対して提供するアドレス情報である。
例えば、HDD(Hard Disk Drive)又はSSDのデータ記憶装置アドレス情報の例として、LBA(Logical Block Address)がある。LBAで特定されるデータのサイズは、例えば、512バイトのように定められている。データ記憶装置アドレスで特定されるデータのサイズと、論理アドレスで特定されるデータ(クラスタ)のサイズとは、前述したように一般に異なっている。しかし、データ記憶装置アドレスと論理アドレスは相互に変換可能である。例えば、データ記憶装置アドレス情報が512バイトごとに割り当てられ、論理アドレスが1024バイトごとに割り当てられている場合、データ記憶装置アドレス情報を2で除算して商を求めることにより、データ記憶装置アドレス情報を論理アドレスに変換することができる。
第3の実施の形態では、説明の簡単化のために、データ記憶装置アドレスで特定されるデータのサイズと、クラスタのサイズとが同じである場合を例に説明する。ただし、これに限定されることなく、データ記憶装置300は、データ記憶装置アドレスで特定されるデータのサイズと、クラスタのサイズとが異なるものであってもよい。
インタフェース部106は、受け付けた命令が読み込み命令であったときは、読込制御部314に受け付けた読み込み命令を転送する。
ステップ802(S802)において、読込制御部314は、読み込み先情報を生成する。より詳細には、読込制御部314は、インタフェース部106から読み込み命令を受け取ると、受け取った読み込み命令から、データ記憶装置アドレス情報を抽出する。読込制御部314は、抽出したデータ記憶装置アドレス情報を、対応する論理アドレスに変換する。読込制御部314は、変換した論理アドレスに対応付けられている情報を取得する。読込制御部314は、アドレス正引きテーブル164における変換した論理アドレスが示す記憶媒体251の物理アドレスを読み込むように、第1アクセス部102に読み込み指示し、物理アドレスを示す情報を取得する。物理アドレスには、ブロック番号情報と、ページ番号情報が含まれる。
ステップ804(S804)において、読込制御部314は、読み込み先情報で指定される領域をすべて読み込む。より詳細には、読込制御部314は、取得した物理アドレスを読み込み先情報とし、変換した論理アドレスを読み込み対象のクラスタの論理アドレスとして、読込部312に読み込み指示する。読込部312は、読み込み要求元からクラスタの読み込み要求を受け付ける。クラスタの読み込み要求には、読み込み先情報と、読み込み対象のクラスタの論理アドレスを示すデータが含まれる。読み込み先情報には、ブロック番号と、ページ番号とが含まれる。読込部312は、取得した読み込み先情報から、ブロック番号と、ページ番号を抽出し、抽出したブロック番号のブロック400の、ページ番号のページ402のデータを読み込むように、記憶媒体アクセス部101に指示し、当該ページのデータを取得する。
なお、ページ402には複数の記録スロットが格納されているが、ページ402に格納される記録スロットの数は変更可能である。また、記憶媒体251へのデータの入出力単位はページ402であるので、当該ページ402のデータを全て読み込んでも、新たな処理は必要とならない。
ステップ806(S806)において、読込制御部314は、メタデータを抽出する。より詳細には、読込部312は、取得したページのデータに含まれる記録スロットのデータを誤り訂正し、誤り訂正後の記録スロットのデータを取得する。読込部312は、誤り訂正が失敗した(誤り訂正不能だった)場合は、読み込みエラーを読み込み要求元に通知する。読込制御部314は、読込部312から読み込みエラーを通知されると、読み込みエラーを示すデータをインタフェース部106に送信する。なお、第1メモリ352は、当該論理アドレスを読み込むと読み込みエラーとなる旨の情報を管理情報のひとつとしてさらに記憶してもよい。このようにすることで、再度同じ論理アドレスに対して読み込み要求されたときに、すばやく読み込みエラーを返却することができる。
インタフェース部106は、読込制御部114からデータ(読み込みエラーを示すデータ)を受信すると、受信したデータ(読み込みエラーを示すデータ)を図示しないホスト装置に転送する。読込部312は、誤り訂正が成功した(誤り訂正可能だった)場合は、誤り訂正後のデータから、各記録スロットのメタデータを抽出する。読込部312は、抽出した各記録スロットのメタデータに含まれるマジックナンバーから、各記録スロットに記憶されているクラスタの配置パターンを算出する。なお、抽出した各記録スロットのメタデータに、当該記録スロットにクラスタが圧縮されて記憶されている旨のマジックナンバーが含まれていなかったときは、読込部312は、当該記録スロットにはクラスタが圧縮されずに記憶されていると判断する。読込部312は、誤り訂正後のデータから、算出したクラスタの配置パターンに従って、各クラスタのメタデータを抽出する。なお、圧縮されて記憶されているクラスタのメタデータが圧縮されずに記憶されている場合は、誤り訂正後のデータからそのまま抽出すればよい。一方、圧縮されて記憶されているクラスタのメタデータが圧縮されて記憶されている場合は、誤り訂正後のデータを展開部105に展開指示することで、当該メタデータを取得できる。
なお、図19に示すように、記録スロットの端に記憶されているクラスタは、記憶時点の状況によって、圧縮されたクラスタの一部であるのか全部であるのかのどちらかであるため、圧縮されたクラスタの一部であるのか全部であるのかのどちらかであるかを判断する必要がある。当該クラスタの展開を試みることで、この判断が可能である。より詳細には、読込部312は、記録スロットの端に記憶されているクラスタの展開を試みるように、展開部105に展開指示する。読込制御部314は、展開が成功し、展開した結果、クラスタのサイズ分のクラスタデータが得られた場合は、当該クラスタは圧縮されたクラスタの全部であったと判断できる。一方、読込制御部314は、展開に失敗した場合や、展開した結果、クラスタのサイズ分に満たないクラスタデータが得られた場合は、当該クラスタは圧縮されたクラスタの一部であったと判断できる。なお、図19においては、説明の簡単化のために、記録スロットのメタデータや誤り訂正データの記憶領域は省略している。
ここで、当該ページ402におけるクラスタの記憶順番の一番最初のクラスタが全部であると判断された場合、読込部312は、当該クラスタのメタデータを抽出する。一方、当該ページ402におけるクラスタの記憶順番の一番最初のクラスタが一部であると判断された場合(図19の右側のページが読み込み対象のページであった時の圧縮したクラスタその6に相当する)、読込部312は、当該クラスタのメタデータは抽出しない。これは、当該クラスタに対しては、アドレス正引きテーブル164には、ひとつ前の連続するページの物理アドレスが登録されているため、当該クラスタに対して読み込み要求があった場合は、読込部312に対して、ひとつ前の連続するページが読み込み要求されるからである。
また、図19に示した圧縮したクラスタデータその4のように、当該ページ内の隣接する記録スロットの隣り合う端に記憶されているクラスタがともに一部であると判断された場合、それらのクラスタを合わせると全部となるため、読込部312は、当該全部となるクラスタのメタデータを抽出する。一方、図19に示した圧縮したクラスタデータその1及びその2のように、当該ページ内の隣接する記録スロットの隣り合う端に記憶されているクラスタがともに全部であると判断された場合、読込部312は、それぞれのクラスタのメタデータを抽出する。
また、図19の左側のページが読み込み対象のページであった時の圧縮したクラスタデータその6のように、当該ページ402におけるクラスタの記憶順番の一番最後のクラスタが一部であると判断された場合、当該一番最後のクラスタは、物理アドレスが連続する次のページ402のクラスタの記憶順番の一番最初のクラスタと合わせられることにより、全部のクラスタデータとなる。したがって、読込部312は、誤り訂正処理までと同様の手順で連続する次のページ402に記憶されているデータを取得し、物理アドレスが連続する次のページ402のクラスタの記憶順番の一番最初のクラスタと合わせることで、全部となるクラスタデータを抽出する。また、読込部312は、当該全部となるクラスデータのメタデータを抽出する。一方、当該ページ402におけるクラスタの記憶順番の一番最後のクラスタが全部であると判断された場合、読込部312は、当該クラスタのメタデータを抽出する。
ステップ808(S808)において、読込部312は、読み込み対象データを抽出する。より詳細には、読込部312は、受け付けた読み込み要求に含まれる読み込み対象のクラスタの論理アドレスを抽出する。読込部312は、抽出した各クラスタのメタデータに含まれる論理アドレスを抽出する。そして、読込部312は、抽出した読み込み対象のクラスタの論理アドレスと、抽出した各クラスタのメタデータに含まれる論理アドレスを比較して、一致するクラスタを読み込み対象のクラスタと判断する。
なお、同じ論理アドレスを持つクラスタが複数存在する場合は、読込部312は、その複数存在するクラスタのうち、当該ページ402におけるクラスタの記憶順番が一番最後のクラスタを読み込み対象のクラスタと判断する。したがって、読込部312が当該ページ402におけるクラスタの記憶順番の一番最後のものから順番に論理アドレスを比較することにより、比較時間を短縮することができるという効果を奏する。
ステップ810(S810)において、コントローラ310は、読み込み対象データを展開してホスト装置に返却する。より詳細には、読込部312は、読み込み対象のクラスタと判断したクラスタデータを展開部105に送信し、展開部105に対して展開を指示し、展開されたクラスタデータを取得する。なお、読込部312は、必要に応じて、読み込み対象のクラスタと判断したクラスタデータを展開部105に送信しない場合がある。この場合、読込部312は、以降の処理における展開されたクラスタデータを展開部105に送信しなかった読み込み対象のクラスタデータで読み替える。例えば、クラスタデータが圧縮されずに記憶媒体251に記憶されていた場合、読込部312は、クラスタデータを展開部105に送信しない。読込部312は、取得した展開されたクラスタデータを、読み込み要求元に送信する。読込制御部314は、読込部312から読み込んだデータを受信すると、受信したデータをインタフェース部106に送信する。インタフェース部106は、読込制御部314からデータを受信すると、受信したデータを図示しないホスト装置に転送する。
次に、データ記憶装置300が行う転記処理の手順について、図22を参照して説明する。図22は、データ記憶装置300が行う転記処理の手順の一例を示すフローチャートである。転記制御部315は、予め定められた規則に従って、図22に示す転記処理の制御をおこなう。なお、図22に示したフローチャートにおいては、図16に示したフローチャートに対して転記制御部215が転記制御部315に代えられている。ただし、図22に示したフローチャートにおいて、図16に示した処理と実質的に同一な処理には同一の符号が付してある。
(転記処理)
ステップ900(S900)において、転記制御部315は、転記するクラスタを決定する。より詳細には、転記制御部315は、第1メモリ352から管理情報を読み込むように第1アクセス部102に読み込み指示し、管理情報を取得する。転記制御部315は、取得した管理情報から、任意の予め定められた方法を用いて、転記するクラスタを決定する。第3の実施の形態においては、転記するクラスタを決定する方法は公知のいずれの方法であってもよい。転記制御部315は、決定したクラスタの論理アドレスを、取得した管理情報から抽出する。
ステップ902(S902)において、転記制御部315は、読み込み先情報を生成する。より詳細には、転記制御部315は、抽出した論理アドレスに対応付けられている情報を取得する。転記制御部315は、アドレス正引きテーブル164における変換した論理アドレスが示す記憶媒体251の物理アドレスを読み込むように、第1アクセス部102に読み込み指示し、物理アドレスを示す情報を取得する。物理アドレスには、ブロック番号情報と、ページ番号情報が含まれる。
ステップ904(S904)において、転記制御部315は、読み込み先情報で指定される領域をすべて読み込む。より詳細には、転記制御部315は、取得した物理アドレスを、読み込み先情報とし、変換した論理アドレスを読み込み対象のクラスタの論理アドレスとして、読込部312に読み込み指示する。読込部312は、読み込み要求元からクラスタの読み込み要求を受け付ける。クラスタの読み込み要求には、読み込み先情報と、読み込み対象のクラスタの論理アドレスを示すデータが含まれる。読み込み先情報には、ブロック番号と、ページ番号と、が含まれる。読込部312は、取得した読み込み先情報から、ブロック番号と、ページ番号を抽出し、抽出したブロック番号のブロック400の、ページ番号のページ402のデータを読み込むように、記憶媒体アクセス部101に指示し、当該ページのデータを取得する。
なお、ページ402には複数の記録スロットが格納されているが、ページ402に格納される記録スロットの数は変更可能である。また、記憶媒体251へのデータの入出力単位はページ402であるので、当該ページ402のデータを全て読み込んでも、新たな処理は必要とならない。
ステップ906(S906)において、転記制御部315は、メタデータを抽出する。より詳細には、読込部312は、取得したページのデータに含まれる記録スロットのデータを誤り訂正し、誤り訂正後の記録スロットのデータを取得する。読込部312は、誤り訂正が失敗した(誤り訂正不能だった)場合は、読み込みエラーを読み込み要求元に通知する。転記制御部315は、読込部312から読み込みエラーを通知されると、転記処理後も当該クラスタを読み込むとエラーとなるように整合性を担保する処理をする。例えば、読み込みエラーとなったクラスタデータを読み込みエラーとなる状態のまま転記してもよいし、第1メモリ352が有する管理情報において、当該論理アドレスを読み込むと読み込みエラーとなる旨の情報を記憶しておき、読み込みエラーとなったクラスタデータは転記しないようにしてもよい。読込部312は、誤り訂正が成功した(誤り訂正可能だった)場合は、誤り訂正後のデータから、各記録スロットのメタデータを抽出する。読込部312は、抽出した各記録スロットのメタデータに含まれるマジックナンバーから、各記録スロットに記憶されているクラスタの配置パターンを算出する。なお、抽出した各記録スロットのメタデータに、当該記録スロットにクラスタが圧縮されて記憶されている旨のマジックナンバーが含まれていなかったときは、読込部312は、当該記録スロットにはクラスタが圧縮されずに記憶されていると判断する。
読込部312は、誤り訂正後のデータから、算出したクラスタの配置パターンに従って、各クラスタのメタデータを抽出する。なお、読込部312は、圧縮されて記憶されているクラスタのメタデータが圧縮されずに記憶されている場合は、誤り訂正後のデータからそのまま抽出する。一方、圧縮されて記憶されているクラスタのメタデータが圧縮されて記憶されている場合は、読込部312は、誤り訂正後のデータを展開部105に展開指示することにより、当該メタデータを取得する。
なお、図19に示すように、記録スロットの端に記憶されているクラスタは、記憶時点の状況によって、圧縮されたクラスタの一部であるのか全部であるのかのどちらかである。したがって、読込部312は、記録スロットの端に記憶されているクラスタが、圧縮されたクラスタの一部であるのか全部であるのかのどちらかであるかを判断する必要がある。読込部312は、当該クラスタの展開を試みることにより、圧縮されたクラスタの一部であるのか全部であるかを判断する。より詳細には、読込部312は、記録スロットの端に記憶されているクラスタの展開を試みるように、展開部105に展開指示する。展開が成功し、展開した結果、クラスタのサイズ分のクラスタデータが得られた場合は、読込部312は、当該クラスタは圧縮されたクラスタの全部であったと判断する。一方、展開に失敗した場合や、展開した結果、クラスタのサイズ分に満たないクラスタデータが得られた場合は、読込部312は、当該クラスタは圧縮されたクラスタの一部であったと判断する。なお、図19においては、説明の簡単化のために、記録スロットのメタデータや誤り訂正データの記憶領域は省略している。
ここで、当該ページ402におけるクラスタの記憶順番の一番最初のクラスタが全部であると判断された場合、読込部312は、当該クラスタのメタデータを抽出する。一方、当該ページ402におけるクラスタの記憶順番の一番最初のクラスタが一部であると判断された場合(図19の右側のページが読み込み対象のページであった時の圧縮したクラスタその6に相当する)、読込部312は、当該クラスタのメタデータは抽出しない。これは、当該クラスタに対しては、アドレス正引きテーブル164には、ひとつ前の連続するページの物理アドレスが登録されているため、当該クラスタに対して読み込み要求があった場合は、読込部312に対して、ひとつ前の連続するページが読み込み要求されるからである。
また、図19に示した圧縮したクラスタデータその4のように、当該ページ内の隣接する記録スロットの隣り合う端に記憶されているクラスタがともに一部であると判断された場合、それらのクラスタを合わせると全部となるため、読込部312は、当該全部となるクラスタのメタデータを抽出する。一方、図19に示した圧縮したクラスタデータその1及びその2のように、当該ページ内の隣接する記録スロットの隣り合う端に記憶されているクラスタがともに全部であると判断された場合、読込部312は、それぞれのクラスタのメタデータを抽出する。
また、図19の左側のページが読み込み対象のページであった時の圧縮したクラスタデータその6のように、当該ページ402におけるクラスタの記憶順番の一番最後のクラスタが一部であると判断された場合、当該一番最後のクラスタは、物理アドレスが連続する次のページ402のクラスタの記憶順番の一番最初のクラスタと合わせられることにより、全部のクラスタデータとなる。したがって、読込部312は、誤り訂正処理までと同様の手順で連続する次のページ402に記憶されているデータを取得し、物理アドレスが連続する次のページ402のクラスタの記憶順番の一番最初のクラスタと合わせることで、全部となるクラスタデータを抽出する。また、読込部312は、当該全部となるクラスデータのメタデータを抽出する。一方、当該ページ402におけるクラスタの記憶順番の一番最後のクラスタが全部であると判断された場合、読込部312は、当該クラスタのメタデータを抽出する。
ステップ908(S908)において、読込部312は、読み込み対象データを抽出する。より詳細には、読込部312は、受け付けた読み込み要求に含まれる読み込み対象のクラスタの論理アドレスを抽出する。読込部312は、抽出した各クラスタのメタデータに含まれる論理アドレスを抽出する。読込部312は、抽出した読み込み対象のクラスタの論理アドレスと、抽出した各クラスタのメタデータに含まれる論理アドレスを比較して、一致するクラスタを読み込み対象のクラスタと判断する。
なお、同じ論理アドレスを持つクラスタが複数存在する場合は、読込部312は、その複数存在するクラスタのうち、当該ページ402におけるクラスタの記憶順番が一番最後のクラスタを読み込み対象のクラスタと判断する。したがって、読込部312は、当該ページ402におけるクラスタの記憶順番の一番最後のものから順番に論理アドレスを比較することにより、比較時間を短縮することができるという効果を奏する。
ステップ910(S910)において、読込部312は、読み込んだ読み込み対象データを展開して取得する。より詳細には、読込部312は、読み込み対象のクラスタと判断したクラスタデータを展開部105に送信し、展開部105に展開指示し、展開されたクラスタデータを取得する。なお、読込部312は、必要に応じて、読み込み対象のクラスタと判断したクラスタデータを、展開部105に送信しない場合がある。この場合、読込部312は、以降の処理における展開されたクラスタデータを展開部105に送信しなかった読み込み対象のクラスタデータで読み替える。例えば、クラスタデータが圧縮されずに記憶媒体251に記憶されていた場合、読込部312は、クラスタデータを展開部105に送信しない。読込部312は、取得した展開されたクラスタデータを、読み込み要求元に送信する。転記制御部315は、読込部312から読み込んだデータを受信する。
ステップ932(S932)において、転記制御部315は、管理情報を更新する。より詳細には、書込部211は、書き込み先のページの書き込み完了通知を書込要求元に通知する。転記制御部315は、書込部211から、書き込み完了通知を受信すると、当該ページに書き込まれたクラスタに対して、アドレス正引きテーブル164を更新する。転記制御部315は、当該ページに書き込まれたクラスタに対して、アドレス正引きテーブル164における変換した論理アドレスが示す記憶媒体251の物理アドレスを、書き込み先の記憶媒体251の物理アドレスに更新するように、第1アクセス部102に書き込み指示する。ただし、更新する書き込み先の記憶媒体251の物理アドレスは、生成した書き込み先情報に含まれるブロック番号情報と、ページ番号情報である。なお、当該ページ402におけるクラスタの記憶順番の一番最初のクラスタが一部である場合(図19の右側のページが書き込み完了したページであった時の圧縮したクラスタその6に相当する)、転記制御部315は、当該クラスタについては、アドレス正引きテーブル164を更新しない。これは、当該クラスタに対しては、アドレス正引きテーブル164には、ひとつ前の連続するページの物理アドレスが登録されているためである。
このように、第3の実施の形態によれば、第2の実施の形態におけるアドレス正引きテーブル162のサイズに比べて、アドレス正引きテーブル164のサイズを削減することができる。つまり、第3の実施の形態によれば、第2の実施の形態における第1メモリ252として確保すべきメモリ容量に比べて、第1メモリ352として確保すべきメモリ容量を削減することができる。
(第4の実施の形態)
ところで、第1〜第3の実施の形態では、書込部111又は書込部211がデータの圧縮処理を行わないように指示する場合がある。また、読込部112、読込部212又は読込部312がデータの展開処理を行わないように指示する場合がある。第4の実施の形態は、圧縮処理及び展開処理を行わない構成の組合せの例である。なお、第4の実施の形態で説明する圧縮処理及び展開処理を行わない構成の組合わせは、例であり、他のさまざまな組合わせであってもよい。ここでは、データ記憶装置300の変形例として構成される第4の実施の形態を説明する。ただし、第4の実施の形態は、データ記憶装置100又はデータ記憶装置200の変形例として構成されてもよい。
(第1の組合わせ)
まず、第1の組合せを説明する。第1の組合せでは、データ記憶装置300(データ記憶装置100又はデータ記憶装置200)は、ホスト装置から書き込み要求されるデータは圧縮して記憶せず、転記されるデータは圧縮して記憶する。つまり、データ記憶装置300は、ホスト装置から書き込み要求されたクラスタデータを記憶媒体に記憶する場合にはクラスタデータを圧縮せず、転記するクラスタデータを記憶媒体に記憶する場合にクラスタデータを圧縮する。そして、データ記憶装置300は、ホスト装置から書き込み要求されて記憶媒体が記憶しているクラスタデータを読み込む場合には読み込んだクラスタデータを展開せず、転記されて記憶媒体に記憶されたクラスタデータを記憶媒体から読み込む場合には読み込んだクラスタデータを展開する。
より詳細には、書込部211は、書込制御部313から書き込み要求を受け付けた場合、書き込み対象のクラスタデータを圧縮部104に送信せずに、書き込み対象のクラスタデータを記憶媒体251に書き込むように、記憶媒体アクセス部101に書き込み指示する。したがって、ホスト装置から書き込み要求されて記憶されたデータを読み込む場合には、当該データは圧縮されずに記憶されているので、読込部312は、記憶媒体251から読み込んだデータを、展開部105に送信せずに、読み込み要求元に返却する。
一方、書込部211は、転記制御部315から書き込み要求を受け付けたときは、書き込み対象のクラスタデータを圧縮部104に送信し、圧縮されたデータを記憶媒体251に書き込むように、記憶媒体アクセス部101に書き込み指示する。したがって、転記されたデータを読み込む場合には、当該データは圧縮されて記憶されているので、読込部312は、記憶媒体251から読み込んだデータを展開部105に送信し、展開されたデータを読み込み要求元に返却する。
(第2の組合せ)
次に、第1の組合せを基にした第2の組合せを説明する。第1の組合せでは、データ記憶装置300は、転記されたデータは圧縮されて記憶されている。従って、第2の組合せでは、過去に転記されたデータを転記元にする場合、転記元のデータを圧縮されたまま読み込み、圧縮されたままの状態で転記先に書き込むことにより、転記処理の読み込み時におけるデータの展開処理と、転記処理の書き込み時におけるデータの圧縮処理とを削減する。
第2の組合せにかかるデータ記憶装置のコントローラは、第1の組合せにかかるデータ記憶装置のコントローラに加えて、さらに、転記制御部が、予め定められた規則に従って決定する転記するクラスタデータのうち、当該転記制御部の制御により記憶媒体に書き込まれたクラスタデータの中から再転記するクラスタデータに関して、読み込んだクラスタデータを外部の展開部により展開させないよう制御し、クラスタデータを圧縮部により圧縮させないように制御することを特徴とする。
より詳細には、書込部211は、書込制御部313から書き込み要求を受け付けた場合は、書き込み対象のクラスタデータを圧縮部104に送信せずに、記憶媒体251に書き込むように、記憶媒体アクセス部101に書き込み指示する。ホスト装置から書き込み要求されて記憶されたデータを、ホスト装置からの読み込み要求により読み込む場合には、当該データは圧縮されずに記憶されているので、読込部312は、記憶媒体251から読み込んだデータを展開部105に送信せずに、読み込み要求元に返却する。
また、読み込み対象のデータが過去に転記されたデータであり、且つ、ホスト装置読み込み制御部から読み込み要求された場合には、当該データは圧縮されて記憶されているので、読込部312は、記憶媒体251から読み込んだデータを展開部105に送信し、展開されたデータを読み込み要求元に返却する。
一方、読み込み対象のデータが過去に転記されたデータであり、且つ、転記制御部から読み込み要求された場合は、当該データは圧縮されて記憶されているが、転記処理の読み込み時におけるデータの展開処理を削減するために、読込部312は、記憶媒体251から読み込んだデータを展開部105に送信せずに、読み込み要求元に返却する。
書込部211は、転記制御部315から書き込み要求を受け付けた場合、転記対象のデータが過去に転記されたデータでなければ(ホスト装置から書き込み要求され、転記されていないデータである場合)、書き込み対象のクラスタデータを圧縮部104に送信して、圧縮されたデータを記憶媒体251に書き込むように、記憶媒体アクセス部101に書き込み指示する。
一方、書込部211は、転記制御部315から書き込み要求を受け付けた場合、転記対象のデータが過去に転記されたデータであれば、転記処理の書き込み時におけるデータの圧縮処理を削減するために、書き込み対象のクラスタデータを圧縮部104に送信せずに、記憶媒体251に書き込むように、記憶媒体アクセス部101に書き込み指示する。
(第3の組合せ)
次に、第3の組合せを説明する。第3の組合せでは、データ記憶装置300は、ホスト装置から書き込み要求されたデータを圧縮して記憶し、転記処理において常に転記元のデータを圧縮されたまま読み込み、圧縮されたままの状態で転記先に書き込むことにより、転記処理の読み込み時におけるデータの展開処理と、転記処理の書き込み時におけるデータの圧縮処理とを常に削減する。
第3の組合せでは、データ記憶装置300(データ記憶装置100又はデータ記憶装置200)のコントローラは、さらに、書込制御部が、クラスタデータを圧縮部により圧縮させるように制御し、読込制御部が、クラスタデータを展開部に展開させるように制御し、転記制御部が、クラスタデータを展開部に展開させないように制御し、クラスタデータを圧縮部により圧縮させないように制御することを特徴とする。
より詳細には、書込部211は、書込制御部313から書き込み要求を受け付けた場合は、書き込み対象のクラスタデータを圧縮部104に送信し、圧縮したデータを記憶媒体251に書き込むように、記憶媒体アクセス部101に書き込み指示する。
転記制御部315から読み込み要求された場合は、当該データは圧縮されて記憶されているが、転記処理の読み込み時におけるデータの展開処理を削減するために、読込部312は、記憶媒体251から読み込んだデータを展開部105に送信せずに、読み込み要求元に返却する。
書込部211は、転記制御部315から書き込み要求を受け付けた場合は、転記処理の書き込み時におけるデータの圧縮処理を削減するために、書き込み対象のクラスタデータを圧縮部104に送信せずに、記憶媒体251に書き込むように、記憶媒体アクセス部101に書き込み指示する。
一方、読込制御部314から読み込み要求された場合は、当該データは圧縮されて記憶されているので、読込部312は、記憶媒体251から読み込んだデータを展開部105に送信し、展開したデータを読み込み要求元に返却する。
(第4の組合せ)
次に、第4の組合せを説明する。第4の組合せでは、データ記憶装置300は、圧縮処理に予め定められた閾値以上の時間がかかる場合、クラスタを圧縮して記憶することを取りやめ、クラスタを圧縮せずに記憶する。
第4の組合せでは、データ記憶装置300(データ記憶装置100又はデータ記憶装置200)のコントローラは、さらに、書込制御部が、圧縮部による圧縮に要する時間が予め定められた時間以上である場合には、圧縮部による圧縮を取りやめ、圧縮を取りやめられたクラスタデータを書込先の物理アドレスに応じて記憶媒体に書き込むよう制御するとともに、論理アドレスと書込先の物理アドレスとの対応を記憶部に書き込むよう制御し、読込制御部が、読み込んだクラスタデータが圧縮されていない場合には、読み込んだクラスタデータを展開部に展開させずにそのまま出力するよう制御し、転記制御部が、読み込んだクラスタデータが圧縮されていない場合には、読み込んだクラスタデータを展開部に展開させないよう制御し、圧縮部による圧縮に要する時間が予め定められた時間以上である場合には、圧縮部による圧縮を取りやめ、圧縮を取りやめられたクラスタデータを転記先の物理アドレスに応じて記憶媒体に書き込むよう制御するとともに、論理アドレスと転記先の物理アドレスとの対応を記憶部に書き込むよう制御することを特徴とする。
より詳細には、書込部211は、書き込み対象のクラスタデータを圧縮部104に送信し、予め定められた閾値未満の時間で圧縮部104から圧縮したデータを受け取ると、取得した圧縮したクラスタデータを記憶媒体251に書き込むように、記憶媒体アクセス部101に書き込み指示する。したがって、圧縮されて記憶されているデータを読み込む場合には、読込部312は、記憶媒体251から読み込んだデータを展開部105に送信し、展開されたデータを読み込み要求元に返却する。
書込部211は、書き込み対象のクラスタデータを圧縮部104に送信し、予め定められた閾値以上の時間がたっても圧縮部104から圧縮したデータを受け取れなかった場合は、(圧縮されていない)書き込み対象のクラスタデータを記憶媒体251に書き込むように、記憶媒体アクセス部101に書き込み指示する。したがって、圧縮されずに記憶されているデータを読み込む場合には、読込部312は、記憶媒体251から読み込んだデータを、展開部105に送信せずに、読み込み要求元に返却する。
ところで、一般に、データの圧縮処理は、データの転送処理等と比べると、比較的処理時間がかかる。ここで、データ記憶装置300のピーク書き込み性能は、転記処理を実行する必要がない状態で、ホスト装置からの書き込み処理のみを実行している場合の性能を指す。したがって、第1の組合せ又は第2の組合せで挙げた、ホスト装置書き込み処理においてデータの圧縮処理を行わない構成では、データ記憶装置のピーク書き込み性能を向上させることができるという効果を奏する。
一方、NANDフラッシュメモリのような半導体記憶媒体は、データの転送処理やデータの読み込み処理等に比べて、データの書き込み処理には処理時間がかかる。ここで、書き込み要求されたデータの圧縮効率が非常に良い場合は、半導体記憶媒体への書き込み量が相当量減り、結果として、半導体記憶媒体への書き込み処理時間が相当量減ることになる。このため、前述したデータの圧縮処理時間を勘案しても総合的な処理時間が短縮する場合がある。したがって、データの圧縮効率が非常に良い場合、第4の実施の形態の第3の組合せで挙げたデータ記憶装置300は、ホスト装置書き込み処理においてデータの圧縮処理を行う構成とすることにより、データ記憶装置の書き込み性能を向上することができるという効果を奏する。また、第4の実施の形態の第3の組合せで挙げたデータ記憶装置300は、ホスト装置書き込み処理においてデータの圧縮処理を行う構成とすることにより、記憶媒体への書き込み量を最小にすることができるため、データ記憶装置の寿命を最大化できるという効果を奏する。
また、第4実施の形態の第4の組合せで挙げたデータ記憶装置300は、圧縮処理に予め定められた閾値以上の時間がかかる場合は、クラスタデータを圧縮して記憶することを取りやめ、クラスタデータを圧縮せずに記憶することにより、データ記憶装置の書き込み性能と、データ記憶装置の寿命の長期化とのバランスを適切に設定することができるという効果を奏する。
(第5の実施の形態)
第4の実施の形態の効果の一例として、データ記憶装置300のピーク書き込み性能が向上するという効果を述べたが、ホスト装置から書き込み要求されたデータを圧縮せずに記憶媒体に記憶すると、転記処理においてデータを圧縮して記憶媒体に記憶しても、記憶媒体に書き込むデータの容量が、データを全く圧縮せずに記憶する場合に比べて少ないものの比較的多くなってしまう。
ところで、一般的な傾向として、データの圧縮率を高めるとデータの圧縮処理時間が長くなり、データの圧縮率を低くするとデータの圧縮処理時間は短くなる。したがって、ホスト装置から書き込み要求されたデータは低い圧縮率で圧縮して記憶媒体に記憶し、転記処理で書き込むデータは高い圧縮率で圧縮して記憶媒体に記憶することにより、データ記憶装置のピーク書き込み性能をあまり犠牲にすることなく、記憶媒体に書き込むデータの容量を抑えることができる。
以下、第5の実施形態の具体例について説明する。ここでは、データ記憶装置300の変形例として構成される第5の実施の形態を説明する。ただし、第5の実施の形態は、データ記憶装置100又はデータ記憶装置200の変形例として構成されてもよい。なお、第5実施の形態におけるデータ記憶装置300の構成の組合せは一例であり、データ記憶装置300は、他のさまざまな構成の組合せであってもよい。
(第1の組合わせ)
まず、第1の組合せを説明する。第1の組合せでは、データ記憶装置300(データ記憶装置100又はデータ記憶装置200)のコントローラは、さらに、書込制御部が、外部から書き込みが要求されたデータを、クラスタのサイズとなる複数のクラスタデータに変換し、変換したクラスタデータを外部の圧縮部により第1の圧縮率で圧縮させ、圧縮されたクラスタデータを書込先の物理アドレスに応じて記憶媒体に書き込むよう制御するとともに、論理アドレスと書込先の物理アドレスとの対応を記憶部に書き込むよう制御し、読込制御部が、外部から読み込みが要求されたデータに対して、記憶部から物理アドレスを取得し、取得した物理アドレスに応じて記憶媒体からクラスタデータを読み込み、読み込んだクラスタデータを外部の展開部により第1の圧縮率又は第1の圧縮率よりも高い第2の圧縮率に応じて展開させ、展開されたクラスタデータを出力するよう制御し、転記制御部が、記憶媒体に書き込まれたクラスタデータの中から転記するクラスタデータを予め定められた規則に従って決定し、決定したクラスタデータを記憶媒体から読込み、読み込んだクラスタデータを第1の圧縮率又は第2の圧縮率に応じて外部の展開部により展開させ、展開させたクラスタデータを外部の圧縮部により第2の圧縮率で圧縮させ、圧縮されたクラスタデータを転記先の物理アドレスに応じて記憶媒体に書き込むよう制御するとともに、論理アドレスと転記先の物理アドレスとの対応を記憶部に書き込むよう制御することを特徴とする。
より詳細には、第1の組合せであるデータ記憶装置300において、圧縮部104は、さらに複数の圧縮率を設定可能にされている。また、展開部105は、さらに複数の圧縮率で圧縮されたデータをそれぞれ展開できるように設定可能にされている。書込部211は、書込制御部313から書き込み要求を受け付けた場合、書き込み対象のクラスタデータを低い圧縮率で圧縮するように圧縮部104に送信し、圧縮したデータを記憶媒体251に書き込むように、記憶媒体アクセス部101に書き込み指示する。したがって、読込部312は、ホスト装置から書き込み要求されて記憶されたデータを読み込む場合には、当該データは低い圧縮率で圧縮されて記憶されているので、記憶媒体251から読み込んだデータを低い圧縮率で圧縮されているとして展開処理するように展開部105に送信し、展開したデータを読み込み要求元に返却する。
一方、書込部211は、転記制御部315から書き込み要求を受け付けた場合、書き込み対象のクラスタデータを高い圧縮率で圧縮するように圧縮部104に送信し、圧縮したデータを記憶媒体251に書き込むように、記憶媒体アクセス部101に書き込み指示する。したがって、読込部312は、転記されたデータを読み込む場合には、当該データは高い圧縮率で圧縮されて記憶されているので、記憶媒体251から読み込んだデータを高い圧縮率で圧縮されているとして展開するように展開部105に送信し、展開したデータを読み込み要求元に返却する。
(第2の組合わせ)
次に、第2の組合せを説明する。第2の組合せでは、データ記憶装置300は、過去に転記されたデータを転記元にする場合、過去に転記した場合の圧縮率と今回転記する場合の圧縮率が同じである場合は、第4の実施の形態の第2の組合せと同様に、転記元のデータを圧縮されたまま読み込み、圧縮されたままの状態で転記先に書き込むことにより、転記処理の読み込み時におけるデータの展開処理と、転記処理の書き込み時におけるデータの圧縮処理とを削減する。
より詳細には、圧縮部104は、複数の圧縮率を設定できるようになっており、展開部105は、複数の圧縮率を設定できるようになっている。書込部211は、書込制御部313から書き込み要求を受け付けた場合、書き込み対象のクラスタデータを低い圧縮率で圧縮するように圧縮部104に送信し、圧縮したデータを記憶媒体251に書き込むように、記憶媒体アクセス部101に書き込み指示する。したがって、ホスト装置から書き込み要求されて記憶されたデータを読み込む場合には、当該データは低い圧縮率で圧縮されて記憶されているので、読込部312は、記憶媒体251から読み込んだデータを低い圧縮率で圧縮されているとして展開処理するように展開部105に送信し、展開したデータを読み込み要求元に返却する。
また、読み込み対象のデータが過去に転記されたデータであり、且つ、読込制御部314から読み込み要求された場合、当該データは高い圧縮率で圧縮されて記憶されているので、読込部312は、記憶媒体251から読み込んだデータを高い圧縮率で圧縮されているとして展開するように展開部105に送信し、展開したデータを読み込み要求元に返却する。
一方、読み込み対象のデータが過去に転記されたデータであり、且つ、転記制御部から読み込み要求された場合、当該データは高い圧縮率で圧縮されて記憶されているが、過去に転記した場合の圧縮率と今回転記する場合の圧縮率が同じである場合は、転記処理の読み込み時におけるデータの展開処理を削減するために、読込部312は、記憶媒体251から読み込んだデータを展開部105に送信せずに、読み込み要求元に返却する。
書込部211は、転記制御部315から書き込み要求を受け付けた場合は、転記対象のデータが過去に転記されたデータでない場合(ホスト装置から書き込み要求され、転記されていないデータである場合)は、書き込み対象のクラスタデータを高い圧縮率で圧縮するように圧縮部104に送信し、圧縮したデータを記憶媒体251に書き込むように、記憶媒体アクセス部101に書き込み指示する。
一方、書込部211は、転記制御部315から書き込み要求を受け付けると、転記対象のデータが過去に転記されたデータである場合、過去に転記した場合の圧縮率と今回転記する場合の圧縮率が同じであれば、転記処理の読み込み時におけるデータの圧縮処理を削減するために、書き込み対象のクラスタデータを圧縮部104に送信せずに、記憶媒体251に書き込むように、記憶媒体アクセス部101に書き込み指示する。
(第6の実施の形態)
データ圧縮機能を有しないデータ記憶装置は、記憶媒体におけるデータ記憶可能な容量から、転記処理の動作等に必要な予め定められた容量を差し引いた容量を、ホスト装置に対して使用を許可する容量(以下、表記容量と記す)としてホスト装置に提供している。第6の実施の形態では、第1〜第5の実施の形態で説明したデータ圧縮機能を有するデータ記憶装置における、表記容量の構成のバリエーションを説明する。なお、第6の実施の形態では、データ圧縮機能を有しないデータ記憶装置、及び第1〜第5の実施の形態で説明したデータ圧縮機能を有するデータ記憶装置において、記憶媒体におけるデータ記憶可能な容量は同一であり、また、転記処理の動作等に必要な予め定められた容量も同一であるとして説明するが、この限りではない。第6の実施の形態は、データ記憶装置100、データ記憶装置200又はデータ記憶装置300の変形例として構成されてもよい。
(第1の構成)
表記容量の第1の構成は、データ圧縮機能を有しないデータ記憶装置の表記容量と同様の表記容量をホスト装置に提供する。本構成では、データの圧縮結果の実績に応じて、記憶媒体に書き込むデータの量が減少し、データ記憶装置の寿命が長期化するという効果を奏する。
(第2の構成)
データ圧縮機能を有するデータ記憶装置では、データの圧縮結果の実績に応じて、データを圧縮しない場合と比べると、記憶媒体に実際に記憶されている記憶媒体上のデータの量は同じでも、より多くのデータを記憶していることになる。したがって、第2の構成は、データ圧縮機能を有しないデータ記憶装置の表記容量よりも多い容量をホスト装置に提供する。
なお、データの圧縮結果の実績によっては、ホスト装置に提供した表記容量よりも少ない容量のデータしか記憶媒体に実際に記憶できない場合がある。このような場合、ホスト装置からのさらなる書き込み要求を処理できなくなる。したがって、このような場合は、ホスト装置からのさらなる書き込み要求に対して、データ記憶装置は、書き込みエラーを返す。なお、データ記憶装置は、データの圧縮結果の実績に従って、記憶可能な残り容量をホスト装置に対して通知する機能を有してもよい。
また、第2の実施の形態で説明したように、第6の実施の形態にかかるデータ記憶装置200は、圧縮後のデータのサイズを予め定められた単位に合わせる場合、表記容量の最大値を、最大圧縮時に記憶可能な容量としてもよい。この場合、データ記憶装置には、例えばホスト装置からの書き込み要求を処理できなくなると、書き込みエラーを返すという制約が付される。
具体的には、例えば、クラスタの圧縮後のデータのサイズを、クラスタが圧縮されない場合に記憶される領域を4分割した単位に合わせる場合には、表記容量の最大値を、データ圧縮機能を有しないデータ記憶装置の表記容量の4倍の表記容量としてもよい。ただし、この場合は、上記の制約などが付される。
本構成では、データの圧縮結果の実績に応じて、記憶媒体に書き込むデータの容量が減少し、データ記憶装置の寿命が長期化するという効果に合わせて、データ圧縮機能を有しないデータ記憶装置の表記容量よりも多い表記容量をホスト装置に提供できるという効果を奏する。
(第7の実施の形態)
ところで、第1〜第6の実施の形態では、圧縮及び展開処理として、可逆圧縮を前提とする構成をしていた。一方、圧縮されたデータを展開すると、圧縮前のデータには戻らない非可逆圧縮がある。ここで、圧縮前のデータと、非可逆圧縮されたデータを展開して得られたデータとの間で、一致しない箇所を、非可逆圧縮されたデータを展開して得られたデータにおける、圧縮前のデータに対する誤りであると考えることができる。したがって、圧縮前のデータを誤り訂正データの生成の基になるデータとして誤り訂正符号を生成すると、一致しない箇所の数が生成した誤り訂正符号で訂正できる範囲に収まっている限り、非可逆圧縮されたデータを展開して得られたデータを誤り訂正符号で訂正することにより、圧縮前のデータを得ることができる。なお、第7の実施の形態では、一致しない箇所の数が生成した誤り訂正符号で訂正できる範囲に収まっているとして、説明する。第7の実施の形態は、データ記憶装置100、データ記憶装置200又はデータ記憶装置300の変形例として構成されてもよい。
データ記憶装置200は、クラスタデータを記憶媒体に記憶する場合に、圧縮前のデータを誤り訂正データの生成の元となるデータとして、非可逆圧縮データ訂正用誤り訂正データを生成し、クラスタデータを非可逆圧縮する。そして、データ記憶装置200は、非可逆圧縮したクラスタデータと、生成した非可逆圧縮データ訂正用誤り訂正データを、合わせて記憶する。
また、データ記憶装置200は、記憶媒体からクラスタデータを読み込む場合に、読み込んだクラスタデータを非可逆圧縮されたデータとして展開し、展開されたクラスタデータを、読み込んだクラスタデータと合わせて記憶されている非可逆圧縮データ訂正用誤り訂正データを用いて訂正する。
以下、第7の実施の形態は、第2の実施の形態の変形例として説明する。第2の実施の形態の書込部211は、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータとを合わせたデータが、分割したサイズの整数倍以下となった場合、分割したサイズの整数倍の領域から圧縮対象のクラスタのメタデータと圧縮後のクラスタデータとを合わせたデータの領域を除いた残りの領域に対し、ダミーデータを書き込むことにより、分割したサイズの整数倍のサイズにクラスタデータのサイズを揃える。
一方、第7の実施の形態の書込部211は、図23に示すように、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータと、圧縮前のデータを誤り訂正データの生成の元となるデータとして生成した誤り訂正データである非可逆圧縮データ訂正用誤り訂正データと、を合わせたデータが、分割したサイズの整数倍以下となった場合、分割したサイズの整数倍の領域から、圧縮対象のクラスタのメタデータと、圧縮後のクラスタデータと、非可逆圧縮訂正用誤り訂正データとを合わせたデータの領域を除いた残りの領域に対し、ダミーデータを書き込むことにより、分割したサイズの整数倍のサイズにクラスタデータのサイズを揃える。
また、第2の実施の形態の読込部212は、抽出したクラスタデータを、展開部105に送信し、展開部105に展開指示し、展開されたクラスタデータを取得する。一方、第7の実施の形態の読込部212は、抽出したクラスタデータを、展開部105に送信し、展開部105に展開指示し、展開されたクラスタデータを取得し、展開されたクラスタデータを誤り訂正データの生成の基のデータであるとして、また、当該クラスタに対する非可逆圧縮訂正用誤り訂正データを抽出し、抽出した非可逆圧縮訂正用誤り訂正データを誤り訂正データであるとして誤り訂正し、誤り訂正されたクラスタデータを取得する。
このように、第7の実施形態にかかるデータ記憶装置200は、非可逆圧縮処理と、非可逆圧縮されたデータの展開処理を行うように構成されてもよい。
また、本発明の実施形態を複数の組合わせによって説明したが、これらの実施形態は例として提示したものであり、発明の範囲を限定することは意図していない。これら新規の実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。