(57)【要約】【課題】ガベージコレクションの回数を低減して、ホストの処理待ち時間を少なくする記憶装置、その制御方法、及びプログラムを提供する。【解決手段】フラッシュメモリとコントローラとを備えた記憶装置であって、コントローラが、データの書き込み指示を受け入れると、指示に含まれるアドレス情報に基づく所定の演算により、当該指示によるデータの書き込み先となったページを含むブロックを内包したブロックグループを識別するブロックグループ識別情報を求め、当該求められたブロックグループ識別情報で識別されるブロックグループに内包されるブロック内のページに、受け入れたデータの書き込み指示に基づいてデータの書き込みを行う。【選択図】図１
2020170477.tif 000002
【特許請求の範囲】
【請求項１】
フラッシュメモリとコントローラとを備えたディスク装置であって、
前記コントローラが、前記フラッシュメモリの記憶領域を、データの書き込み単位であるページに区分して管理するとともに、消去の指示があったときには、複数の前記ページを含むブロックを単位として消去処理を行うコントローラであって、
データの書き込み指示として、当該データの書き込み先を特定するアドレス情報を含む指示を受け入れる受入手段と、
複数の前記ブロックを含むブロックグループごとに、各ブロックグループを識別するブロックグループ識別情報と、当該ブロックグループに含まれる前記ブロックを特定する情報とを関連付けて保持するブロックグループ管理手段と、
前記受入手段が受け入れたデータの書き込み指示に含まれるアドレス情報に基づく所定の演算により、当該書き込み指示によるデータの書き込み先となったページを含むブロックを内包したブロックグループを識別するブロックグループ識別情報を求める演算手段と、
当該演算手段により求められたブロックグループ識別情報で識別されるブロックグループに内包されるブロック内のページに、前記受け入れたデータの書き込み指示に基づいてデータの書き込みを行う書込処理手段と、
を含むディスク装置。
【請求項２】
請求項１に記載のディスク装置であって、
前記演算手段が行う所定の演算として、互いに隣接するアドレスを表すアドレス情報を、同一のブロックグループ識別情報、または互いに隣接する一対のブロックグループ識別情報に変換する演算を行うディスク装置。
【請求項３】
請求項１または２に記載のディスク装置であって、
ブロックグループをガベージコレクション処理の対象として、当該ブロックグループに含まれる各ブロックの移動先となるブロックを、いずれのブロックグループ識別情報にも関連付けられていないブロックのうちから選択し、当該選択したブロックに、前記ガベージコレクション処理の対象となったブロックグループに含まれるブロック内の有効なページの内容を複写するとともに、当該対象となったブロックグループ識別情報に関連付けられている、移動元となったブロックを特定する情報に置き換えて、前記選択したブロックを特定する情報を関連付けて、前記ブロックグループ管理手段に保持させるガベージコレクション手段をさらに含むディスク装置。
【請求項４】
フラッシュメモリを備えたディスク装置の制御方法であって、
前記フラッシュメモリの記憶領域を、データの書き込み単位であるページに区分して管理するとともに、消去の指示があったときには、複数の前記ページを含むブロックを単位として消去処理を行うコントローラを用い、
データの書き込み指示として、当該データの書き込み先を特定するアドレス情報を含む指示を受け入れる工程と、
複数の前記ブロックを含むブロックグループごとに、各ブロックグループを識別するブロックグループ識別情報と、当該ブロックグループに含まれる前記ブロックを特定する情報とを関連付けて保持する工程と、
前記受け入れたデータの書き込み指示に含まれるアドレス情報に基づく所定の演算により、当該書き込み指示によるデータの書き込み先となったページを含むブロックを内包したブロックグループを識別するブロックグループ識別情報を求める工程と、
当該演算により求められたブロックグループ識別情報で識別されるブロックグループに内包されるブロック内のページに、前記受け入れたデータの書き込み指示に基づいてデータの書き込みを行う工程と、
を含むディスク装置の制御方法。
【請求項５】
フラッシュメモリを備えたディスク装置のコントローラを、
前記フラッシュメモリの記憶領域を、データの書き込み単位であるページに区分して管理するとともに、消去の指示があったときには、複数の前記ページを含むブロックを単位として消去処理を行う手段と、
データの書き込み指示として、当該データの書き込み先を特定するアドレス情報を含む指示を受け入れる受入手段と、
複数の前記ブロックを含むブロックグループごとに、各ブロックグループを識別するブロックグループ識別情報と、当該ブロックグループに含まれる前記ブロックを特定する情報とを関連付けて保持するブロックグループ管理手段と、
前記受入手段が受け入れたデータの書き込み指示に含まれるアドレス情報に基づく所定の演算により、当該書き込み指示によるデータの書き込み先となったページを含むブロックを内包したブロックグループを識別するブロックグループ識別情報を求める演算手段と、
当該演算手段により求められたブロックグループ識別情報で識別されるブロックグループに内包されるブロック内のページに、前記受け入れたデータの書き込み指示に基づいてデータの書き込みを行う書込処理手段と、
として機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ディスク装置、その制御方法、及びプログラムに関する。
【背景技術】
【０００２】
使用されないこととなったブロックを，ホスト側のＯＳからドライブに知らせる技術（トリムコマンド）がある。このトリムコマンドが発行されるとＳＳＤはガベージコレクションを実行する（非特許文献１）。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】inet：Trim_(computing)、 [平成31年3月25日検索]、インターネット<URL: https://en.wikipedia.org/wiki/Trim_(computing)>
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、ガベージコレクションの実行がされている間、ホストはデータの読み出しや書き込みを行うことができないので、その処理の終了を待機する必要がある。
【０００５】
本発明は上記実情に鑑みて為されたもので、ＮＡＮＤフラッシュメモリを利用したディスク装置において、ガベージコレクションの回数を低減して、ホストの処理待ち時間を少なくするディスク装置、その制御方法、及びプログラムを提供することを、その目的の一つとする。
【課題を解決するための手段】
【０００６】
上記従来例の問題点を解決する本発明の一態様は、フラッシュメモリとコントローラとを備えたディスク装置であって、前記コントローラが、前記フラッシュメモリの記憶領域を、データの書き込み単位であるページに区分して管理するとともに、消去の指示があったときには、複数の前記ページを含むブロックを単位として消去処理を行うコントローラであって、データの書き込み指示として、当該データの書き込み先を特定するアドレス情報を含む指示を受け入れる受入手段と、複数の前記ブロックを含むブロックグループごとに、各ブロックグループを識別するブロックグループ識別情報と、当該ブロックグループに含まれる前記ブロックを特定する情報とを関連付けて保持するブロックグループ管理手段と、前記受入手段が受け入れたデータの書き込み指示に含まれるアドレス情報に基づく所定の演算により、当該書き込み指示によるデータの書き込み先となったページを含むブロックを内包したブロックグループを識別するブロックグループ識別情報を求める演算手段と、当該演算手段により求められたブロックグループ識別情報で識別されるブロックグループに内包されるブロック内のページに、前記受け入れたデータの書き込み指示に基づいてデータの書き込みを行う書込処理手段と、を含むこととしたものである。
【０００７】
これにより、近接するアドレスに書き込まれたデータが近接したブロックに集合して記録されやすいこととなり、ガベージコレクションの回数を低減して、ホストの処理待ち時間を少なくできる。
【０００８】
またここで前記演算手段が行う所定の演算として、互いに隣接するアドレスを表すアドレス情報を、同一のブロックグループ識別情報、または互いに隣接する一対のブロックグループ識別情報に変換する演算を行うこととしてもよい。
【０００９】
このように隣接するアドレスへ書き込まれるべきデータが一つの、あるいは互いに隣接するブロックグループ内のブロックに含まれるページに書き込まれるよう制御することで、隣接するアドレスに書き込まれるべきデータが近接したブロックに集合して記録されやすくなる。また、従って、有効でないデータも、近接したブロックに集中しやすくなり、ブロックグループを用いて管理せずにデータがフラッシュメモリの全体に分散して記録される場合に比べ、ガベージコレクションの回数を低減して、ホストの処理待ち時間を少なくできる。
【００１０】
また、ブロックグループをガベージコレクション処理の対象として、当該ブロックグループに含まれる各ブロックの移動先となるブロックを、いずれのブロックグループ識別情報にも関連付けられていないブロックのうちから選択し、当該選択したブロックに、前記ガベージコレクション処理の対象となったブロックグループに含まれるブロック内の有効なページの内容を複写するとともに、当該対象となったブロックグループ識別情報に関連付けられている、移動元となったブロックを特定する情報に置き換えて、前記選択したブロックを特定する情報を関連付けて、前記ブロックグループ管理手段に保持させるガベージコレクション手段をさらに含んでもよい。
【００１１】
このようなガベージコレクションの処理を行うので、処理負荷が軽減され、ホストの処理待ち時間を少なくできる。
【００１２】
また本発明のもう一つの態様は、フラッシュメモリを備えたディスク装置の制御方法であって、前記フラッシュメモリの記憶領域を、データの書き込み単位であるページに区分して管理するとともに、消去の指示があったときには、複数の前記ページを含むブロックを単位として消去処理を行うコントローラを用い、データの書き込み指示として、当該データの書き込み先を特定するアドレス情報を含む指示を受け入れる工程と、複数の前記ブロックを含むブロックグループごとに、各ブロックグループを識別するブロックグループ識別情報と、当該ブロックグループに含まれる前記ブロックを特定する情報とを関連付けて保持する工程と、前記受け入れたデータの書き込み指示に含まれるアドレス情報に基づく所定の演算により、当該書き込み指示によるデータの書き込み先となったページを含むブロックを内包したブロックグループを識別するブロックグループ識別情報を求める工程と、当該演算により求められたブロックグループ識別情報で識別されるブロックグループに内包されるブロック内のページに、前記受け入れたデータの書き込み指示に基づいてデータの書き込みを行う工程と、を含むこととしたものである。
【００１３】
さらに本発明の別の態様は、プログラムであって、フラッシュメモリを備えたディスク装置のコントローラを、前記フラッシュメモリの記憶領域を、データの書き込み単位であるページに区分して管理するとともに、消去の指示があったときには、複数の前記ページを含むブロックを単位として消去処理を行う手段と、データの書き込み指示として、当該データの書き込み先を特定するアドレス情報を含む指示を受け入れる受入手段と、複数の前記ブロックを含むブロックグループごとに、各ブロックグループを識別するブロックグループ識別情報と、当該ブロックグループに含まれる前記ブロックを特定する情報とを関連付けて保持するブロックグループ管理手段と、前記受入手段が受け入れたデータの書き込み指示に含まれるアドレス情報に基づく所定の演算により、当該書き込み指示によるデータの書き込み先となったページを含むブロックを内包したブロックグループを識別するブロックグループ識別情報を求める演算手段と、当該演算手段により求められたブロックグループ識別情報で識別されるブロックグループに内包されるブロック内のページに、前記受け入れたデータの書き込み指示に基づいてデータの書き込みを行う書込処理手段と、として機能させることとしたものである。
【発明の効果】
【００１４】
本発明によると、ホストの処理待ち時間を少なくできる。
【図面の簡単な説明】
【００１５】
【図１】本発明の実施の形態に係るディスク装置の構成例を表すブロック図である。
【図２】本発明の実施の形態に係るディスク装置のコントローラ部の例を表す機能ブロック図である。
【図３】本発明の実施の形態に係るディスク装置が保持するブロックグループテーブルの例を表す説明図である。
【図４】本発明の実施の形態に係るディスク装置のデータ書き込み時の動作例を表すフローチャート図である。
【図５】本発明の実施の形態のディスク装置に対比される、従来例のブロックの状態を表す説明図である。
【図６】本発明の実施の形態のディスク装置でのブロックの状態を表す説明図である。
【発明を実施するための形態】
【００１６】
本発明の実施の形態について図面を参照しながら説明する。本発明の実施の形態に係るディスク装置１は、ＮＡＮＤフラッシュメモリを用いたＳＳＤ（Solid State Drive）等のディスクデバイスであり、図１に例示するように、コントローラ部１１と、キャッシュメモリ１２と、フラッシュメモリ１３とを含んで構成され、パーソナルコンピュータ（ＰＣ）等のホストに接続されている。
【００１７】
ここでコントローラ部１１は、ＣＰＵ等のプログラム制御デバイスや、このＣＰＵが実行するプログラムを格納した記憶部等を含んで構成され、ＰＣ等のホストから入力される指示を受けて、フラッシュメモリ１３へのデータの書き込みや、フラッシュメモリ１３からのデータの読み出しを行っている。なお、このデータの読み出しや書き込みの際、コントローラ部１１はキャッシュメモリ１２を利用する。
【００１８】
またこのコントローラ部１１は、ホストからの指示があったときなど、所定の条件が満足されると、フラッシュメモリ１３に対してガベージコレクション処理を実行する。これらのコントローラ部１１の処理の具体的な内容については後に述べる。
【００１９】
キャッシュメモリ１２は、ランダムアクセスメモリ等で構成され、コントローラ部１１からの指示によりデータを記憶する。
【００２０】
フラッシュメモリ１３は、例えばＮＡＮＤフラッシュを用いて構成される。このフラッシュメモリ１３は、コントローラ部１１から入力される指示に従い、データを保持する。またこのフラッシュメモリ１３は、コントローラ部１１から入力される指示に従って、保持しているデータを読み出してコントローラ部１１に出力する。
【００２１】
ここでコントローラ部１１の動作について説明する。本実施の形態の例では、コントローラ部１１は、記憶部に格納したプログラムを実行することにより、図２に例示する機能ブロックを実現する。すなわちこのコントローラ部１１は、機能的には、受入部２１と、ブロックグループ管理部２２と、演算部２３と、書込処理部２４と、ガベージコレクション部２５とを含んで構成される。本実施の形態では、一般的なＮＡＮＤフラッシュへの書き込みの処理と同様、このコントローラ部１１は、記憶領域を複数のブロックに分割し、さらにブロック内を複数のページに分割して管理している。そしてコントローラ部１１は、データの書き込みの際には、ページ単位での書き込みを行い、データの消去を行う際には、ブロック単位での消去を行っている。
【００２２】
コントローラ部１１の受入部２１は、ホストからデータの書き込み指示として、データと、当該データの書き込み先を特定するアドレス情報（データを書き込む先頭のアドレス：ＬＢＡ（Logical Block Address））を含む指示とを受け入れる。
【００２３】
ブロックグループ管理部２２は、ブロックをＮ個（ＮはＮ≧２なる整数であり、Ｎの数は予め定めておく）だけまとめたブロックグループを設定し、当該ブロックグループごとに各ブロックグループを識別するブロックグループ識別情報と、当該ブロックグループに含まれるブロックを特定する情報（記憶領域の先頭からブロックサイズの領域ごとに、１，２…と連番で割り当てたブロック番号でよい）とを関連付けて、ブロックグループテーブルとして記憶部に保持する（図３）。
【００２４】
演算部２３は、受入部２１が受け入れたデータの書き込み指示に含まれるアドレス情報に基づく所定の演算により、当該書き込み指示によるデータの書き込み先となるページを含むブロックを内包したブロックグループを識別するブロックグループ識別情報を求める。
【００２５】
具体的にこの演算部２３は、受入部２１が受け入れたデータの書き込み指示に含まれる先頭アドレス情報（ＬＢＡ）にセクタサイズを乗じ、ブロックサイズで除してその商ｄと余りｒとを求める。そしてブロックのブロックグループ識別情報Ｇを、Ｇ＝ｄ＋Ceil（ｒ）として求める。ここでCeil（ｒ）は、ｒが０であればCeil（ｒ）＝０、ｒが０でないときにはCeil（ｒ）＝１となる値である。この演算により、互いに隣接するアドレスを表すアドレス情報は、同一のブロックグループ識別情報、または互いに隣接する一対のブロックグループ識別情報に変換される。
【００２６】
また演算部２３は、ブロックグループテーブルを参照して、ここで求めたブロックグループ識別情報Ｇに関連付けられたブロック番号Ｂ1，…ＢNが保持されているか否かを調べる。演算部２３は、ここで求めたブロックグループ識別情報Ｇに関連付けられたＮ個のブロック番号Ｂ1，…ＢN（以下、これらＮ個のブロック番号をまとめてブロック番号Ｂと表す）が保持されていれば、当該ブロック番号Ｂを取得する。そして演算部２３は、ここで取得したブロック番号Ｂで特定されるＮ個のブロックを選択する。
【００２７】
またここで、求めたブロックグループ識別情報Ｇに関連付けられたブロック番号Ｂがブロックグループテーブルに保持されていなければ、演算部２３は、いずれのブロックグループにも関連付けられていないブロック番号のブロックを、Ｎ個選択する。そして演算部２３は、選択したブロックのブロック番号Ｂ′を、ここで求めたブロックグループ識別情報Ｇに関連付けて、ブロックグループテーブルに保持させる。
【００２８】
なお、ブロックグループ識別情報Ｇを上述の式により求めることとしたので、ＬＢＡ＝０の場合に限って、ブロックグループ識別情報Ｇ＝０となり、隣接するＬＢＡ＝１からＬＢＡ＝［ｂ／ｓ］（ｂはブロックサイズ、ｓはセクタサイズ、［Ｘ］は、Ｘを超えない最大の整数）までは、（先の式において余りｒが１以上となるので）Ｇ＝１となる。従ってＬＢＡ＝０のデータの記録が可能な領域は、ブロックグループ１つ分となるのに対し、他のＬＢＡについては１つのブロックグループに［ｂ／ｓ］−１個分のＬＢＡが対応付けられることとなっている。
【００２９】
つまり、換言すれば、ＬＢＡ＝０についてのみ、データの記録可能な領域が他のＬＢＡに比べ広くなっている。このことは、ＬＢＡ＝０に対応する領域では不良ブロックの許容率が他の領域に比べて高くなることを意味し、書き換え耐性が確保された状態となる。
【００３０】
一般的なオペレーティングシステムでは、ＬＢＡ＝０の領域にはマスターブートレコードやスーパーブロック等のシステムデータが記録されることが多いため、この書き換え耐性の確保は、好ましい結果となっている。
【００３１】
演算部２３は、データの書き込み指示に含まれるデータを先頭からページサイズごとに分割し、分割されたデータの先頭アドレス（先頭からｉ番目の分割されたデータの先頭アドレスは、データの書き込み指示に含まれるアドレスＬＢＡに、（ｉ−１）×ページサイズを加えたものとなる）のそれぞれについて、対応するブロックグループ識別情報Ｇを求め、対応するブロックを選択する。
【００３２】
書込処理部２４は、データの書き込み指示に含まれるデータのページサイズごとの部分ごとに演算部２３が選択したＮ個のブロックに含まれる空きページに、それぞれ対応するデータの部分（ページサイズの部分）を書き込む。本実施の形態では、この書込処理部２４は、当初は直接フラッシュメモリ１３に書き込むのではなく、キャッシュメモリ１２にデータを書き込んでおくこととしてもよい。このときには、書込処理部２４は、上記の処理を行ってブロックグループ識別情報Ｇを得ておき、キャッシュ識別情報と、書き込まれるべきデータのサイズと、ページサイズの部分ごとに求めたブロックグループ識別情報Ｇとを関連付けてキャッシュメモリ１２に保持する。
【００３３】
そしてこの例では、キャッシュメモリ１２からフラッシュメモリ１３へ書き出す所定のタイミング（このタイミングは従来、キャッシュメモリからフラッシュメモリへ書き出すタイミングと同じでよい）で、書込処理部２４は、書き出す対象となるキャッシュ識別情報に関連付けられたページサイズのデータ部分と、ブロックグループ識別情報Ｇとを読み出す。また書込処理部２４は、読み出したブロックグループ識別情報Ｇに関連付けられたブロック番号を、ブロックグループテーブルを参照して取得する。そして書込処理部２４は、キャッシュメモリ１２に上記キャッシュ識別情報に関連づけて保持されているデータ部分を、取得したブロック番号で特定される、フラッシュメモリ１３のブロック内の空きページに書き込む。
【００３４】
ガベージコレクション部２５は、ガベージコレクションを行うタイミングが到来したときに、いずれかのブロックグループをガベージコレクション処理の対象として、当該ブロックグループに含まれる各ブロックの移動先となるブロックを、いずれのブロックグループ識別情報にも関連付けられていないブロックのうちから選択する。
【００３５】
そしてこのガベージコレクション部２５は、ここで選択したブロックに、ガベージコレクション処理の対象となったブロックグループに含まれるグループ内の有効なページの内容を複写する。ガベージコレクション部２５は、さらに当該ガベージコレクション処理の対象となったブロックグループのブロックグループ識別情報を取得し、当該取得したブロックグループ識別情報に関連付けられている、ブロックを特定するブロック番号に置き換えて、移動先の、選択したブロックのブロック番号を関連付けて、ブロックグループテーブルに保持させる。
【００３６】
そしてガベージコレクション部２５は、ガベージコレクション処理の対象となったブロックグループに含まれていた（移動元となった）グループ（この時点ではどのブロックグループ識別情報にも関連付けられていないグループ）内のデータを削除する。
【００３７】
［動作］
本実施の形態のディスク装置１は以上の構成を備えており、次のように動作する。以下の説明ではデータの書き込みとガベージコレクションの動作について述べる。他の動作については従来一般的なＮＡＮＤフラッシュメモリを用いたＳＳＤ等のディスク装置と同様の動作であるので、ここでの詳しい説明は省略する。
【００３８】
また、以下の説明ではコントローラ部１１の記憶部には、ブロックグループテーブルとして、ブロックグループ識別情報と、当該ブロックグループに含まれるブロックを特定する情報（記憶領域の先頭からブロックサイズの領域ごとに、１，２…と連番で割り当てたブロック番号でよい）とを関連付けた情報を保持しているものとする。
【００３９】
本実施の形態のディスク装置１は、ホストからデータの書き込み指示として、データと、当該データの書き込み先を特定するアドレス情報（データを書き込む先頭のアドレス：ＬＢＡ（Logical Block Address））を含む指示とを受けて、次のように動作する。
【００４０】
ディスク装置１のコントローラ部１１は、図４に例示するように、受け入れたＬＢＡの値やセクタの番号等のアドレス情報の値が予め定めた範囲にあるか否かを調べる（Ｓ１）。ここでこれらアドレス情報の値が予め定めた範囲になければ（Ｓ１：Ｎｏ）、ホストに対してエラーを報知して（Ｓ２）、処理を終了する。
【００４１】
一方処理Ｓ１においてアドレス情報の値が予め定めた範囲にあれば（Ｓ１：Ｙｅｓ）、コントローラ部１１は、データの書き込み指示に含まれるデータを予め定められたページサイズのデータ部分ごとに分割し、ページサイズのデータ部分ごとに次の処理を繰り返す（Ｓ３）。
【００４２】
すなわちコントローラ部１１は、ページサイズのデータ部分ごとに、当該データ部分の格納先のアドレスＬＢＡ′を求める（Ｓ４）。この演算は、先頭からｉ番目のデータ部分について、データの書き込み指示として受け入れたＬＢＡを用いて、
ＬＢＡ′＝ＬＢＡ＋（ｉ−１）×ページサイズ
として求めることができる。
【００４３】
コントローラ部１１は、処理Ｓ４で求めたアドレスＬＢＡ′にセクタサイズを乗じ、ブロックサイズで除してその商ｄと余りｒとを求める。そしてブロックのブロックグループ識別情報Ｇを、Ｇ＝ｄ＋Ceil（ｒ）として求める（Ｓ５）。ここでCeil（ｒ）は、ｒが０であればCeil（ｒ）＝０、ｒが０でないときにはCeil（ｒ）＝１となる値である。
【００４４】
さらにコントローラ部１１は、ブロックグループテーブルを参照して、処理Ｓ５で求めたブロックグループ識別情報Ｇに関連付けられたブロック番号Ｂが保持されているか否かを調べる（Ｓ６）。
【００４５】
そしてコントローラ部１１は、処理Ｓ５で求めたブロックグループ識別情報Ｇに関連付けられたブロック番号Ｂが保持されていたならば（Ｓ６：Ｙｅｓ）、コントローラ部１１は、当該ブロック番号Ｂのブロック（Ｎ個のブロック）を選択する（Ｓ７）。
【００４６】
コントローラ部１１は、データ部分を、処理Ｓ７で選択したＮ個のブロックに含まれる空きページに、書き込む処理を行う（Ｓ８）。なお、キャッシュメモリ１２を利用する場合は、コントローラ部１１は、ここではキャッシュメモリ１２に当該データ部分とブロックグループ識別情報Ｇとを関連付けて保持しておき、後にフラッシュメモリ１３にデータ部分を書き込む際に、当該データ部分に関連付けられたブロックグループ識別情報Ｇに関連付けられているブロック内の空きページに書き込む処理を実行する。
【００４７】
そしてコントローラ部１１は、処理していないデータ部分があれば、処理Ｓ４に戻って処理を続ける。また処理していないデータ部分がなくなると、コントローラ部１１は、処理を終了する。
【００４８】
一方、処理Ｓ６において、処理Ｓ５で求めたブロックグループ識別情報Ｇに関連付けられたブロック番号Ｂが保持されていなければ（Ｓ６：Ｎｏ）、コントローラ部１１は、いずれのブロックグループにも関連付けられていないブロック番号のブロックを、Ｎ個選択し、選択したブロックのブロック番号Ｂを、処理Ｓ５で求めたブロックグループ識別情報Ｇに関連付けて、ブロックグループテーブルに保持させる（Ｓ９）。
【００４９】
そしてコントローラ部１１は、処理Ｓ８に移行して、処理Ｓ９で選択したＮ個のブロックに含まれる空きページに、データ部分を書き込む処理を行う。ここでもキャッシュメモリ１２を利用する場合は、既に述べた処理を行う。
【００５０】
本実施の形態では、以上のような動作を行うため、従来のディスク装置と比べ、次のように書き込みが行われる。すなわち、従来のディスク装置では、書き込み先がページ単位（ブロックより小さい単位）で管理されており、データの書き込み時には十分な空きページのあるブロック内のページから順に書き込みを行ってしまう。このためホスト側が連続するＬＢＡを指定しつつデータを次々書き込む場合であっても、あるデータの書き込みの際に、それまでに書き込んでいたブロックに十分な空きページがなければ他のブロックのページに書き込んでしまうこととなる。従って各ブロックに無効なページが分散しやすいこととなる（図５（ａ））。なお、図５，図６ではブロック数が１０，ページがブロックごとに１０ある場合を例示しているが、これは説明のためであり、実際にはより多くのブロック数、及びページが存在する。
【００５１】
一方、本実施の形態のディスク装置１では、ホスト側が連続するＬＢＡに対して次々とデータを書き込む場合、連続するＬＢＡについては連続するブロックグループ内のブロックのページに書き込まれるので、図６（ａ）に例示するように、各ブロックには無効データが含まれにくいこととなる。なお、図６の例ではＮ＝２としており、ブロック０，１がブロックグループ１、ブロック２，３がブロックグループ２…というように当初関連付けられているものとしている。
【００５２】
またここでガベージコレクションを行う場合、図５に示した従来のガベージコレクションの処理では、各ブロックの有効ページを空きブロックに移していくので、
（１）ブロック０の有効ページをブロック９へ書き込む（ブロック０を空きブロックとするため）
（２）ブロック０を消去し、ブロック１から７の有効ページをブロック０の各ページから順に書き込んでいく。この際、全てのページが既に複写済みとなったブロックについては、当該ブロック内のデータを消去する。
という処理を行って、８ブロック分の書き込みと、９ブロック分の消去の処理を行うこととなっていた。
【００５３】
一方、本実施の形態のディスク装置１では、書き込み先のアドレスＬＢＡが近接しているデータについては一つの、あるいは互いに隣接するブロックグループに含まれることとなるので、無効データもブロックグループ内にまとまりやすい（図６（ａ））。
【００５４】
そこでこれについてガベージコレクションを行う場合、コントローラ部１１が無効なページを含むいずれかのブロックグループ（図６の例ではブロック０，ブロック１を含むブロックグループ）をガベージコレクション処理の対象として、当該ブロックグループに含まれる各ブロックの移動先となるブロックを、いずれのブロックグループ識別情報にも関連付けられていないブロック（ブロック９）のうちから選択する。
【００５５】
そしてコントローラ部１１は、ここで選択したブロックに、ガベージコレクション処理の対象となったブロックに含まれる有効なページの内容を複写する。図６の例では、まずブロック０内の有効ページをブロック９内のページに複写する。
【００５６】
そしてコントローラ部１１は、全てのページの複写が完了したブロック０を消去し、移動先のブロック９のブロック番号「９」を、ブロックグループ「１」に関連付けてブロックグループテーブルに保持されているブロック番号のうち、ブロック番号「０」に置き換える。従って、ブロックグループ「１」には、ブロック番号「１」、「９」が関連付けられた状態となる。そしてブロック番号「０」のブロック０は、どのブロックグループ識別情報にも関連付けられていないブロックとなる。
【００５７】
次にコントローラ部１１は、ブロック１内の有効ページをブロック９の空きページに複写する。そして全てのページの複写が完了したブロック１（移動元のブロック）を消去する（図６（ｂ））。このときコントローラ部１１は、ブロックグループ「１」に関連付けてブロックグループテーブルに保持されているブロック番号のうちから、ブロック番号「１」をブロック「９」に置き換えるか否かを判断する。しかしながらこの時点ではブロック「９」は既にブロックグループ「１」に関連付けられているので、この場合は、コントローラ部１１は、ブロック番号「１」のブロック１については、このままブロックグループ「１」に関連付けた状態としておいてよい。あるいは、コントローラ部１１は、ブロック「９」に隣接するブロック「８」（この時点ではいずれのブロックグループ識別情報にも関連付けられていないブロック）をブロック１に代えて、ブロックグループ「１」に関連付けることとしてもよい。後者の場合はブロック番号「１」のブロック１は、どのブロックグループにも関連付けられていないブロックとなる。
【００５８】
なお、このようなディスク装置１からデータを読み出す際の処理については、従来のものと同様に、読み出すべきデータが保持されているアドレス情報（ＬＢＡ）を受け入れて、当該受け入れたＬＢＡに対応するページを特定し、当該特定したページからデータを読み出して、ホスト側へ出力することにより実現できる。ＬＢＡに対応するページの特定は、例えばデータの書き込み時、並びにガベージコレクションの際に、ＬＢＡと、ＬＢＡに対応するページを特定する情報とを関連付けた変換テーブルを更新しておき、この変換テーブルを参照することで行うことができる。
【００５９】
［ブロックグループのサイズ］
本実施の形態の例では、ブロックグループのサイズは、ディスク装置１に記録するデータの特性に応じて、フォーマットの時点で決定することとしてもよい。例えば、比較的データサイズが大きい動画像データを記録することを主目的としたディスク装置１であれば、データサイズが小さいデータを記録することを主目的とする場合に比べ、ブロックグループのサイズを比較的大きな値に設定しておく。なお、ディスク装置１の使用中は（既にユーザデータが記録されている状態では）ブロックグループのサイズは変更しないこととする。
【００６０】
［ディスク装置の例］
本実施の形態のディスク装置１は、ＳＳＤメモリだけではなく、フラッシュメモリを含むデバイスであれば、どのようなものであってもよい。本実施の形態のディスク装置１は、ＵＳＢドングルや、外付けのＳＳＤディスクドライブ等種々のものに適用できる。
【符号の説明】
【００６１】
１  ディスク装置、１１  コントローラ部、１２  キャッシュメモリ、１３  フラッシュメモリ、２１  受入部、２２  ブロックグループ管理部、２３  演算部、２４  書込処理部、２５  ガベージコレクション部。
【図１】
2020170477.tif 000003
【図２】
2020170477.tif 000004
【図３】
2020170477.tif 000005
【図４】
2020170477.tif 000006
【図５】
2020170477.tif 000007
【図６】
2020170477.tif 000008
【手続補正書】
【提出日】令和2年1月15日(2020.1.15)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
フラッシュメモリとコントローラとを備えた記憶装置であって、
前記コントローラが、前記フラッシュメモリの記憶領域を、データの書き込み単位であるページに区分して管理するとともに、消去の指示があったときには、複数の前記ページを含むブロックを単位として消去処理を行うコントローラであって、
データの書き込み指示として、当該データの書き込み先を特定するアドレス情報を含む指示を受け入れる受入手段と、
１又は複数の前記ブロックを含むブロックグループごとに、各ブロックグループを識別するブロックグループ識別情報と、当該ブロックグループに含まれる前記ブロックを特定する情報とを関連付けて保持するブロックグループ管理手段と、
前記受入手段が受け入れたデータの書き込み指示に含まれるアドレス情報に基づく所定の演算により、当該書き込み指示によるデータの書き込み先となったページを含むブロックを内包したブロックグループを識別するブロックグループ識別情報を求める演算手段と、
当該演算手段により求められたブロックグループ識別情報で識別されるブロックグループに内包されるブロック内のページに、前記受け入れたデータの書き込み指示に基づいてデータの書き込みを行う書込処理手段と、
を含む記憶装置。
【請求項２】
請求項１に記載の記憶装置であって、
前記演算手段が行う所定の演算として、互いに隣接するアドレスを表すアドレス情報を、同一のまたは連続するブロックを内包したブロックグループを識別するブロックグループ識別情報に変換する演算を行う記憶装置。
【請求項３】
請求項１または２に記載の記憶装置であって、
ブロックグループをガベージコレクション処理の対象として、当該ブロックグループに含まれる各ブロックの移動先となるブロックを、いずれのブロックグループ識別情報にも関連付けられていないブロックのうちから選択し、当該選択したブロックに、前記ガベージコレクション処理の対象となったブロックグループに含まれるブロック内の有効なページの内容を複写するとともに、当該対象となったブロックグループ識別情報に関連付けられている、移動元となったブロックを特定する情報に置き換えて、前記選択したブロックを特定する情報を関連付けて、前記ブロックグループ管理手段に保持させるガベージコレクション手段をさらに含む記憶装置。
【請求項４】
フラッシュメモリを備えた記憶装置の制御方法であって、
前記フラッシュメモリの記憶領域を、データの書き込み単位であるページに区分して管理するとともに、消去の指示があったときには、複数の前記ページを含むブロックを単位として消去処理を行うコントローラを用い、
データの書き込み指示として、当該データの書き込み先を特定するアドレス情報を含む指示を受け入れる工程と、
１又は複数の前記ブロックを含むブロックグループごとに、各ブロックグループを識別するブロックグループ識別情報と、当該ブロックグループに含まれる前記ブロックを特定する情報とを関連付けて保持する工程と、
前記受け入れたデータの書き込み指示に含まれるアドレス情報に基づく所定の演算により、当該書き込み指示によるデータの書き込み先となったページを含むブロックを内包したブロックグループを識別するブロックグループ識別情報を求める工程と、
当該演算により求められたブロックグループ識別情報で識別されるブロックグループに内包されるブロック内のページに、前記受け入れたデータの書き込み指示に基づいてデータの書き込みを行う工程と、
を含む記憶装置の制御方法。
【請求項５】
フラッシュメモリを備えた記憶装置のコントローラを、
前記フラッシュメモリの記憶領域を、データの書き込み単位であるページに区分して管理するとともに、消去の指示があったときには、複数の前記ページを含むブロックを単位として消去処理を行う手段と、
データの書き込み指示として、当該データの書き込み先を特定するアドレス情報を含む指示を受け入れる受入手段と、
１又は複数の前記ブロックを含むブロックグループごとに、各ブロックグループを識別するブロックグループ識別情報と、当該ブロックグループに含まれる前記ブロックを特定する情報とを関連付けて保持するブロックグループ管理手段と、
前記受入手段が受け入れたデータの書き込み指示に含まれるアドレス情報に基づく所定の演算により、当該書き込み指示によるデータの書き込み先となったページを含むブロックを内包したブロックグループを識別するブロックグループ識別情報を求める演算手段と、
当該演算手段により求められたブロックグループ識別情報で識別されるブロックグループに内包されるブロック内のページに、前記受け入れたデータの書き込み指示に基づいてデータの書き込みを行う書込処理手段と、
として機能させるプログラム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶装置、その制御方法、及びプログラムに関する。
【背景技術】
【０００２】
使用されないこととなったブロックを，ホスト側のＯＳからドライブに知らせる技術（トリムコマンド）がある。このトリムコマンドが発行されるとＳＳＤはガベージコレクションを実行する（非特許文献１）。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】inet：Trim_(computing)、 [平成31年3月25日検索]、インターネット<URL: https://en.wikipedia.org/wiki/Trim_(computing)>
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、ガベージコレクションの実行がされている間、ホストはデータの読み出しや書き込みを行うことができないので、その処理の終了を待機する必要がある。
【０００５】
本発明は上記実情に鑑みて為されたもので、ＮＡＮＤフラッシュメモリを利用した記憶装置において、ガベージコレクションの回数を低減して、ホストの処理待ち時間を少なくする記憶装置、その制御方法、及びプログラムを提供することを、その目的の一つとする。
【課題を解決するための手段】
【０００６】
上記従来例の問題点を解決する本発明の一態様は、フラッシュメモリとコントローラとを備えた記憶装置であって、前記コントローラが、前記フラッシュメモリの記憶領域を、データの書き込み単位であるページに区分して管理するとともに、消去の指示があったときには、複数の前記ページを含むブロックを単位として消去処理を行うコントローラであって、データの書き込み指示として、当該データの書き込み先を特定するアドレス情報を含む指示を受け入れる受入手段と、１又は複数の前記ブロックを含むブロックグループごとに、各ブロックグループを識別するブロックグループ識別情報と、当該ブロックグループに含まれる前記ブロックを特定する情報とを関連付けて保持するブロックグループ管理手段と、前記受入手段が受け入れたデータの書き込み指示に含まれるアドレス情報に基づく所定の演算により、当該書き込み指示によるデータの書き込み先となったページを含むブロックを内包したブロックグループを識別するブロックグループ識別情報を求める演算手段と、当該演算手段により求められたブロックグループ識別情報で識別されるブロックグループに内包されるブロック内のページに、前記受け入れたデータの書き込み指示に基づいてデータの書き込みを行う書込処理手段と、を含むこととしたものである。
【０００７】
これにより、近接するアドレスに書き込まれたデータが近接したブロックに集合して記録されやすいこととなり、ガベージコレクションの回数を低減して、ホストの処理待ち時間を少なくできる。
【０００８】
またここで前記演算手段が行う所定の演算として、互いに隣接するアドレスを表すアドレス情報を、同一のまたは連続するブロックを内包したブロックグループを識別するブロックグループ識別情報に変換する演算を行うこととしてもよい。
【０００９】
このように隣接するアドレスへ書き込まれるべきデータが一つの、あるいは互いに隣接するブロックグループ内のブロックに含まれるページに書き込まれるよう制御することで、隣接するアドレスに書き込まれるべきデータが近接したブロックに集合して記録されやすくなる。また、従って、有効でないデータも、近接したブロックに集中しやすくなり、ブロックグループを用いて管理せずにデータがフラッシュメモリの全体に分散して記録される場合に比べ、ガベージコレクションの回数を低減して、ホストの処理待ち時間を少なくできる。
【００１０】
また、ブロックグループをガベージコレクション処理の対象として、当該ブロックグループに含まれる各ブロックの移動先となるブロックを、いずれのブロックグループ識別情報にも関連付けられていないブロックのうちから選択し、当該選択したブロックに、前記ガベージコレクション処理の対象となったブロックグループに含まれるブロック内の有効なページの内容を複写するとともに、当該対象となったブロックグループ識別情報に関連付けられている、移動元となったブロックを特定する情報に置き換えて、前記選択したブロックを特定する情報を関連付けて、前記ブロックグループ管理手段に保持させるガベージコレクション手段をさらに含んでもよい。
【００１１】
このようなガベージコレクションの処理を行うので、処理負荷が軽減され、ホストの処理待ち時間を少なくできる。
【００１２】
また本発明のもう一つの態様は、フラッシュメモリを備えた記憶装置の制御方法であって、前記フラッシュメモリの記憶領域を、データの書き込み単位であるページに区分して管理するとともに、消去の指示があったときには、複数の前記ページを含むブロックを単位として消去処理を行うコントローラを用い、データの書き込み指示として、当該データの書き込み先を特定するアドレス情報を含む指示を受け入れる工程と、１又は複数の前記ブロックを含むブロックグループごとに、各ブロックグループを識別するブロックグループ識別情報と、当該ブロックグループに含まれる前記ブロックを特定する情報とを関連付けて保持する工程と、前記受け入れたデータの書き込み指示に含まれるアドレス情報に基づく所定の演算により、当該書き込み指示によるデータの書き込み先となったページを含むブロックを内包したブロックグループを識別するブロックグループ識別情報を求める工程と、当該演算により求められたブロックグループ識別情報で識別されるブロックグループに内包されるブロック内のページに、前記受け入れたデータの書き込み指示に基づいてデータの書き込みを行う工程と、を含むこととしたものである。
【００１３】
さらに本発明の別の態様は、プログラムであって、フラッシュメモリを備えた記憶装置のコントローラを、前記フラッシュメモリの記憶領域を、データの書き込み単位であるページに区分して管理するとともに、消去の指示があったときには、複数の前記ページを含むブロックを単位として消去処理を行う手段と、データの書き込み指示として、当該データの書き込み先を特定するアドレス情報を含む指示を受け入れる受入手段と、１又は複数の前記ブロックを含むブロックグループごとに、各ブロックグループを識別するブロックグループ識別情報と、当該ブロックグループに含まれる前記ブロックを特定する情報とを関連付けて保持するブロックグループ管理手段と、前記受入手段が受け入れたデータの書き込み指示に含まれるアドレス情報に基づく所定の演算により、当該書き込み指示によるデータの書き込み先となったページを含むブロックを内包したブロックグループを識別するブロックグループ識別情報を求める演算手段と、当該演算手段により求められたブロックグループ識別情報で識別されるブロックグループに内包されるブロック内のページに、前記受け入れたデータの書き込み指示に基づいてデータの書き込みを行う書込処理手段と、として機能させることとしたものである。
【発明の効果】
【００１４】
本発明によると、ホストの処理待ち時間を少なくできる。
【図面の簡単な説明】
【００１５】
【図１】本発明の実施の形態に係る記憶装置の構成例を表すブロック図である。
【図２】本発明の実施の形態に係る記憶装置のコントローラ部の例を表す機能ブロック図である。
【図３】本発明の実施の形態に係る記憶装置が保持するブロックグループテーブルの例を表す説明図である。
【図４】本発明の実施の形態に係る記憶装置のデータ書き込み時の動作例を表すフローチャート図である。
【図５】本発明の実施の形態の記憶装置に対比される、従来例のブロックの状態を表す説明図である。
【図６】本発明の実施の形態の記憶装置でのブロックの状態を表す説明図である。
【発明を実施するための形態】
【００１６】
本発明の実施の形態について図面を参照しながら説明する。本発明の実施の形態に係る記憶装置１は、ＮＡＮＤフラッシュメモリを用いたＳＳＤ（Solid State Drive）等のストレージであり、図１に例示するように、コントローラ部１１と、キャッシュメモリ１２と、フラッシュメモリ１３とを含んで構成され、パーソナルコンピュータ（ＰＣ）等のホストに接続されている。
【００１７】
ここでコントローラ部１１は、ＣＰＵ等のプログラム制御デバイスや、このＣＰＵが実行するプログラムを格納した記憶部等を含んで構成され、ＰＣ等のホストから入力される指示を受けて、フラッシュメモリ１３へのデータの書き込みや、フラッシュメモリ１３からのデータの読み出しを行っている。なお、このデータの読み出しや書き込みの際、コントローラ部１１はキャッシュメモリ１２を利用する。
【００１８】
またこのコントローラ部１１は、ホストからの指示があったときなど、所定の条件が満足されると、フラッシュメモリ１３に対してガベージコレクション処理を実行する。これらのコントローラ部１１の処理の具体的な内容については後に述べる。
【００１９】
キャッシュメモリ１２は、ランダムアクセスメモリ等で構成され、コントローラ部１１からの指示によりデータを記憶する。
【００２０】
フラッシュメモリ１３は、例えばＮＡＮＤフラッシュを用いて構成される。このフラッシュメモリ１３は、コントローラ部１１から入力される指示に従い、データを保持する。またこのフラッシュメモリ１３は、コントローラ部１１から入力される指示に従って、保持しているデータを読み出してコントローラ部１１に出力する。
【００２１】
ここでコントローラ部１１の動作について説明する。本実施の形態の例では、コントローラ部１１は、記憶部に格納したプログラムを実行することにより、図２に例示する機能ブロックを実現する。すなわちこのコントローラ部１１は、機能的には、受入部２１と、ブロックグループ管理部２２と、演算部２３と、書込処理部２４と、ガベージコレクション部２５とを含んで構成される。本実施の形態では、一般的なＮＡＮＤフラッシュへの書き込みの処理と同様、このコントローラ部１１は、記憶領域を複数のブロックに分割し、さらにブロック内を複数のページに分割して管理している。そしてコントローラ部１１は、データの書き込みの際には、ページ単位での書き込みを行い、データの消去を行う際には、ブロック単位での消去を行っている。
【００２２】
コントローラ部１１の受入部２１は、ホストからデータの書き込み指示として、データと、当該データの書き込み先を特定するアドレス情報（データを書き込む先頭のアドレス：ＬＢＡ（Logical Block Address））を含む指示とを受け入れる。
【００２３】
ブロックグループ管理部２２は、ブロックをＮ個（ＮはＮ≧１なる整数であり、Ｎの数は予め定めておく）だけまとめたブロックグループを設定し、当該ブロックグループごとに各ブロックグループを識別するブロックグループ識別情報と、当該ブロックグループに含まれるブロックを特定する情報（記憶領域の先頭からブロックサイズの領域ごとに、１，２…と連番で割り当てたブロック番号でよい）とを関連付けて、ブロックグループテーブルとして記憶部に保持する（図３）。
【００２４】
演算部２３は、受入部２１が受け入れたデータの書き込み指示に含まれるアドレス情報に基づく所定の演算により、当該書き込み指示によるデータの書き込み先となるページを含むブロックを内包したブロックグループを識別するブロックグループ識別情報を求める。
【００２５】
具体的にこの演算部２３は、受入部２１が受け入れたデータの書き込み指示に含まれる先頭アドレス情報（ＬＢＡ）にセクタサイズを乗じ、ブロックサイズで除してその商ｄと余りｒとを求める。そしてブロックのブロックグループ識別情報Ｇを、Ｇ＝ｄ＋Ceil（ｒ）として求める。ここでCeil（ｒ）は、ｒが０であればCeil（ｒ）＝０、ｒが０でないときにはCeil（ｒ）＝１となる値である。この演算により、互いに隣接するアドレスを表すアドレス情報は、同一のブロックグループ識別情報、または互いに隣接する一対のブロックグループ識別情報に変換される。
【００２６】
また演算部２３は、ブロックグループテーブルを参照して、ここで求めたブロックグループ識別情報Ｇに関連付けられたブロック番号Ｂ1，…ＢNが保持されているか否かを調べる。演算部２３は、ここで求めたブロックグループ識別情報Ｇに関連付けられたＮ個のブロック番号Ｂ1，…ＢN（以下、これらＮ個のブロック番号をまとめてブロック番号Ｂと表す）が保持されていれば、当該ブロック番号Ｂを取得する。そして演算部２３は、ここで取得したブロック番号Ｂで特定されるＮ個のブロックを選択する。
【００２７】
またここで、求めたブロックグループ識別情報Ｇに関連付けられたブロック番号Ｂがブロックグループテーブルに保持されていなければ、演算部２３は、いずれのブロックグループにも関連付けられていないブロック番号のブロックを、Ｎ個選択する。そして演算部２３は、選択したブロックのブロック番号Ｂ′を、ここで求めたブロックグループ識別情報Ｇに関連付けて、ブロックグループテーブルに保持させる。
【００２８】
なお、ブロックグループ識別情報Ｇを上述の式により求めることとしたので、ＬＢＡ＝０の場合に限って、ブロックグループ識別情報Ｇ＝０となり、隣接するＬＢＡ＞0からＬＢＡ≦ｂ／ｓ（ｂはブロックサイズ、ｓはセクタサイズであるものとする）までは、先の式において余りｒが１以上となるので、Ｇ＝１となる。従ってＬＢＡ＝０のデータの記録が可能な領域は、ブロックグループ１つ分となるのに対し、他のＬＢＡについては１つのブロックグループに［ｂ／ｓ］−１個分のＬＢＡが対応付けられることとなっている。
【００２９】
つまり、換言すれば、ＬＢＡ＝０についてのみ、データの記録可能な領域が他のＬＢＡに比べ広くなっている。このことは、ＬＢＡ＝０に対応する領域では不良ブロックの許容率が他の領域に比べて高くなることを意味し、書き換え耐性が確保された状態となる。
【００３０】
一般的なオペレーティングシステムでは、ＬＢＡ＝０の領域にはマスターブートレコードやスーパーブロック等のシステムデータが記録されることが多いため、この書き換え耐性の確保は、好ましい結果となっている。
【００３１】
演算部２３は、データの書き込み指示に含まれるデータを先頭からページサイズごとに分割し、分割されたデータの先頭アドレス（先頭からｉ番目の分割されたデータの先頭アドレスは、データの書き込み指示に含まれるアドレスＬＢＡに、（ｉ−１）×ページサイズを加えたものとなる）のそれぞれについて、対応するブロックグループ識別情報Ｇを求め、対応するブロックを選択する。
【００３２】
書込処理部２４は、データの書き込み指示に含まれるデータのページサイズごとの部分ごとに演算部２３が選択したＮ個のブロックに含まれる空きページに、それぞれ対応するデータの部分（ページサイズの部分）を書き込む。本実施の形態では、この書込処理部２４は、当初は直接フラッシュメモリ１３に書き込むのではなく、キャッシュメモリ１２にデータを書き込んでおくこととしてもよい。このときには、書込処理部２４は、上記の処理を行ってブロックグループ識別情報Ｇを得ておき、キャッシュ識別情報と、書き込まれるべきデータのサイズと、ページサイズの部分ごとに求めたブロックグループ識別情報Ｇとを関連付けてキャッシュメモリ１２に保持する。
【００３３】
そしてこの例では、キャッシュメモリ１２からフラッシュメモリ１３へ書き出す所定のタイミング（このタイミングは従来、キャッシュメモリからフラッシュメモリへ書き出すタイミングと同じでよい）で、書込処理部２４は、書き出す対象となるキャッシュ識別情報に関連付けられたページサイズのデータ部分と、ブロックグループ識別情報Ｇとを読み出す。また書込処理部２４は、読み出したブロックグループ識別情報Ｇに関連付けられたブロック番号を、ブロックグループテーブルを参照して取得する。そして書込処理部２４は、キャッシュメモリ１２に上記キャッシュ識別情報に関連づけて保持されているデータ部分を、取得したブロック番号で特定される、フラッシュメモリ１３のブロック内の空きページに書き込む。
【００３４】
ガベージコレクション部２５は、ガベージコレクションを行うタイミングが到来したときに、いずれかのブロックグループをガベージコレクション処理の対象として、当該ブロックグループに含まれる各ブロックの移動先となるブロックを、いずれのブロックグループ識別情報にも関連付けられていないブロックのうちから選択する。
【００３５】
そしてこのガベージコレクション部２５は、ここで選択したブロックに、ガベージコレクション処理の対象となったブロックグループに含まれるグループ内の有効なページの内容を複写する。ガベージコレクション部２５は、さらに当該ガベージコレクション処理の対象となったブロックグループのブロックグループ識別情報を取得し、当該取得したブロックグループ識別情報に関連付けられている、ブロックを特定するブロック番号に置き換えて、移動先の、選択したブロックのブロック番号を関連付けて、ブロックグループテーブルに保持させる。
【００３６】
そしてガベージコレクション部２５は、ガベージコレクション処理の対象となったブロックグループに含まれていた（移動元となった）グループ（この時点ではどのブロックグループ識別情報にも関連付けられていないグループ）内のデータを削除する。
【００３７】
［動作］
本実施の形態の記憶装置１は以上の構成を備えており、次のように動作する。以下の説明ではデータの書き込みとガベージコレクションの動作について述べる。他の動作については従来一般的なＮＡＮＤフラッシュメモリを用いたＳＳＤ等の記憶装置と同様の動作であるので、ここでの詳しい説明は省略する。
【００３８】
また、以下の説明ではコントローラ部１１の記憶部には、ブロックグループテーブルとして、ブロックグループ識別情報と、当該ブロックグループに含まれるブロックを特定する情報（記憶領域の先頭からブロックサイズの領域ごとに、１，２…と連番で割り当てたブロック番号でよい）とを関連付けた情報を保持しているものとする。
【００３９】
本実施の形態の記憶装置１は、ホストからデータの書き込み指示として、データと、当該データの書き込み先を特定するアドレス情報（データを書き込む先頭のアドレス：ＬＢＡ（Logical Block Address））を含む指示とを受けて、次のように動作する。
【００４０】
記憶装置１のコントローラ部１１は、図４に例示するように、受け入れたＬＢＡの値やセクタの番号等のアドレス情報の値が予め定めた範囲にあるか否かを調べる（Ｓ１）。ここでこれらアドレス情報の値が予め定めた範囲になければ（Ｓ１：Ｎｏ）、ホストに対してエラーを報知して（Ｓ２）、処理を終了する。
【００４１】
一方処理Ｓ１においてアドレス情報の値が予め定めた範囲にあれば（Ｓ１：Ｙｅｓ）、コントローラ部１１は、データの書き込み指示に含まれるデータを予め定められたページサイズのデータ部分ごとに分割し、ページサイズのデータ部分ごとに次の処理を繰り返す（Ｓ３）。
【００４２】
すなわちコントローラ部１１は、ページサイズのデータ部分ごとに、当該データ部分の格納先のアドレスＬＢＡ′を求める（Ｓ４）。この演算は、先頭からｉ番目のデータ部分について、データの書き込み指示として受け入れたＬＢＡを用いて、
ＬＢＡ′＝ＬＢＡ＋（ｉ−１）×ページサイズ
として求めることができる。
【００４３】
コントローラ部１１は、処理Ｓ４で求めたアドレスＬＢＡ′にセクタサイズを乗じ、ブロックサイズで除してその商ｄと余りｒとを求める。そしてブロックのブロックグループ識別情報Ｇを、Ｇ＝ｄ＋Ceil（ｒ）として求める（Ｓ５）。ここでCeil（ｒ）は、ｒが０であればCeil（ｒ）＝０、ｒが０でないときにはCeil（ｒ）＝１となる値である。
【００４４】
さらにコントローラ部１１は、ブロックグループテーブルを参照して、処理Ｓ５で求めたブロックグループ識別情報Ｇに関連付けられたブロック番号Ｂが保持されているか否かを調べる（Ｓ６）。
【００４５】
そしてコントローラ部１１は、処理Ｓ５で求めたブロックグループ識別情報Ｇに関連付けられたブロック番号Ｂが保持されていたならば（Ｓ６：Ｙｅｓ）、コントローラ部１１は、当該ブロック番号Ｂのブロック（Ｎ個のブロック）を選択する（Ｓ７）。
【００４６】
コントローラ部１１は、データ部分を、処理Ｓ７で選択したＮ個のブロックに含まれる空きページに、書き込む処理を行う（Ｓ８）。なお、キャッシュメモリ１２を利用する場合は、コントローラ部１１は、ここではキャッシュメモリ１２に当該データ部分とブロックグループ識別情報Ｇとを関連付けて保持しておき、後にフラッシュメモリ１３にデータ部分を書き込む際に、当該データ部分に関連付けられたブロックグループ識別情報Ｇに関連付けられているブロック内の空きページに書き込む処理を実行する。
【００４７】
そしてコントローラ部１１は、処理していないデータ部分があれば、処理Ｓ４に戻って処理を続ける。また処理していないデータ部分がなくなると、コントローラ部１１は、処理を終了する。
【００４８】
一方、処理Ｓ６において、処理Ｓ５で求めたブロックグループ識別情報Ｇに関連付けられたブロック番号Ｂが保持されていなければ（Ｓ６：Ｎｏ）、コントローラ部１１は、いずれのブロックグループにも関連付けられていないブロック番号のブロックを、Ｎ個選択し、選択したブロックのブロック番号Ｂを、処理Ｓ５で求めたブロックグループ識別情報Ｇに関連付けて、ブロックグループテーブルに保持させる（Ｓ９）。
【００４９】
そしてコントローラ部１１は、処理Ｓ８に移行して、処理Ｓ９で選択したＮ個のブロックに含まれる空きページに、データ部分を書き込む処理を行う。ここでもキャッシュメモリ１２を利用する場合は、既に述べた処理を行う。
【００５０】
本実施の形態では、以上のような動作を行うため、従来の記憶装置と比べ、次のように書き込みが行われる。すなわち、従来の記憶装置では、書き込み先がページ単位（ブロックより小さい単位）で管理されており、データの書き込み時には十分な空きページのあるブロック内のページから順に書き込みを行ってしまう。このためホスト側が連続するＬＢＡを指定しつつデータを次々書き込む場合であっても、あるデータの書き込みの際に、それまでに書き込んでいたブロックに十分な空きページがなければ他のブロックのページに書き込んでしまうこととなる。従って各ブロックに無効なページが分散しやすいこととなる（図５（ａ））。なお、図５，図６ではブロック数が１０，ページがブロックごとに１０ある場合を例示しているが、これは説明のためであり、実際にはより多くのブロック数、及びページが存在する。
【００５１】
一方、本実施の形態の記憶装置１では、ホスト側が連続するＬＢＡに対して次々とデータを書き込む場合、連続するＬＢＡについては連続するブロックグループ内のブロックのページに書き込まれるので、図６（ａ）に例示するように、各ブロックには無効データが含まれにくいこととなる。なお、図６の例ではＮ＝２としており、ブロック０，１がブロックグループ１、ブロック２，３がブロックグループ２…というように当初関連付けられているものとしている。
【００５２】
またここでガベージコレクションを行う場合、図５に示した従来のガベージコレクションの処理では、各ブロックの有効ページを空きブロックに移していくので、
（１）ブロック０の有効ページをブロック９へ書き込む（ブロック０を空きブロックとするため）
（２）ブロック０を消去し、ブロック１から７の有効ページをブロック０の各ページから順に書き込んでいく。この際、全てのページが既に複写済みとなったブロックについては、当該ブロック内のデータを消去する。
という処理を行って、８ブロック分の書き込みと、９ブロック分の消去の処理を行うこととなっていた。
【００５３】
一方、本実施の形態の記憶装置１では、書き込み先のアドレスＬＢＡが近接しているデータについては一つの、あるいは互いに連続するブロックに含まれることとなるので、無効データもブロックグループ内にまとまりやすい（図６（ａ））。
【００５４】
そこでこれについてガベージコレクションを行う場合、コントローラ部１１が無効なページを含むいずれかのブロックグループ（図６の例ではブロック０，ブロック１を含むブロックグループ）をガベージコレクション処理の対象として、当該ブロックグループに含まれる各ブロックの移動先となるブロックを、いずれのブロックグループ識別情報にも関連付けられていないブロック（ブロック９）のうちから選択する。
【００５５】
そしてコントローラ部１１は、ここで選択したブロックに、ガベージコレクション処理の対象となったブロックに含まれる有効なページの内容を複写する。図６の例では、まずブロック０内の有効ページをブロック９内のページに複写する。
【００５６】
そしてコントローラ部１１は、全てのページの複写が完了したブロック０を消去し、移動先のブロック９のブロック番号「９」を、ブロックグループ「１」に関連付けてブロックグループテーブルに保持されているブロック番号のうち、ブロック番号「０」に置き換える。従って、ブロックグループ「１」には、ブロック番号「１」、「９」が関連付けられた状態となる。そしてブロック番号「０」のブロック０は、どのブロックグループ識別情報にも関連付けられていないブロックとなる。
【００５７】
次にコントローラ部１１は、ブロック１内の有効ページをブロック９の空きページに複写する。そして全てのページの複写が完了したブロック１（移動元のブロック）を消去する（図６（ｂ））。このときコントローラ部１１は、ブロックグループ「１」に関連付けてブロックグループテーブルに保持されているブロック番号のうちから、ブロック番号「１」をブロック「９」に置き換えるか否かを判断する。しかしながらこの時点ではブロック「９」は既にブロックグループ「１」に関連付けられているので、この場合は、コントローラ部１１は、ブロック番号「１」のブロック１については、このままブロックグループ「１」に関連付けた状態としておいてよい。あるいは、コントローラ部１１は、ブロック「９」に隣接するブロック「８」（この時点ではいずれのブロックグループ識別情報にも関連付けられていないブロック）をブロック１に代えて、ブロックグループ「１」に関連付けることとしてもよい。後者の場合はブロック番号「１」のブロック１は、どのブロックグループにも関連付けられていないブロックとなる。
【００５８】
なお、このような記憶装置１からデータを読み出す際の処理については、従来のものと同様に、読み出すべきデータが保持されているアドレス情報（ＬＢＡ）を受け入れて、当該受け入れたＬＢＡに対応するページを特定し、当該特定したページからデータを読み出して、ホスト側へ出力することにより実現できる。ＬＢＡに対応するページの特定は、例えばデータの書き込み時、並びにガベージコレクションの際に、ＬＢＡと、ＬＢＡに対応するページを特定する情報とを関連付けた変換テーブルを更新しておき、この変換テーブルを参照することで行うことができる。
【００５９】
［ブロックグループのサイズ］
本実施の形態の例では、ブロックグループのサイズは、記憶装置１に記録するデータの特性に応じて、フォーマットの時点で決定することとしてもよい。例えば、比較的データサイズが大きい動画像データを記録することを主目的とした記憶装置１であれば、データサイズが小さいデータを記録することを主目的とする場合に比べ、ブロックグループのサイズを比較的大きな値に設定しておく。なお、記憶装置１の使用中は（既にユーザデータが記録されている状態では）ブロックグループのサイズは変更しないこととする。
【００６０】
［記憶装置の例］
本実施の形態の記憶装置１は、ＳＳＤメモリだけではなく、フラッシュメモリを含むデバイスであれば、どのようなものであってもよい。本実施の形態の記憶装置１は、ＵＳＢドングルや、外付けのＳＳＤディスクドライブ等種々のものに適用できる。
【符号の説明】
【００６１】
１  記憶装置、１１  コントローラ部、１２  キャッシュメモリ、１３  フラッシュメモリ、２１  受入部、２２  ブロックグループ管理部、２３  演算部、２４  書込処理部、２５  ガベージコレクション部。