(57)【特許請求の範囲】
【請求項１】
複数のフラッシュメモリモジュールと、前記複数のフラッシュメモリモジュールに接続されるストレージコントローラと、を備え、
前記複数のフラッシュメモリモジュールのそれぞれは、
データの書き込み及び読み出しの単位である複数の物理ページを有する少なくとも１つのフラッシュメモリチップと、前記少なくとも１つのフラッシュメモリチップに接続されるメモリコントローラと、
を備え、
前記ストレージコントローラは、
複数のユーザデータと、前記複数のユーザデータのそれぞれに付与され、それぞれ異なる複数の保証コードと、を前記フラッシュメモリモジュールに送信し、
前記フラッシュメモリモジュールの前記メモリコントローラは、
前記複数のユーザデータが共通のパタンを有する場合、前記複数のユーザデータを圧縮して圧縮ユーザデータとし、前記圧縮ユーザデータと、前記複数のユーザデータに付与されている前記複数の保証コードと、を前記複数の物理ページのうちの１つの物理ページに格納する
ことを特徴とする、ストレージ装置。
【請求項２】
前記メモリコントローラは、
前記フラッシュメモリモジュールの論理的な領域を前記ストレージコントローラに提供し、
前記論理的な領域を複数の論理ページに分割して管理し、
前記複数の物理ページを管理し、
前記複数の論理ページに関連付けられた前記複数のユーザデータのうち、共通のパタンを有するユーザデータをそれぞれ分割し、
前記複数のユーザデータの１つを１つの前記物理ページに格納し、
前記複数のユーザデータの１つに対応する前記保証コードのそれぞれを連結して１つの前記物理ページに格納する
ことを特徴とする、請求項１に記載のストレージ装置。
【請求項３】
前記フラッシュメモリモジュールは、
前記論理ページと前記物理ページとを対応付けて管理する管理テーブルを格納するメモリを備え、
前記管理テーブルには、前記データが格納されている前記論理ページのアドレスと、前記データに対応する前記ユーザデータが格納されている前記物理ページのアドレスと、前記データに対応する前記保証コードが格納されている前記物理ページのアドレスとが関連付けて格納されていることを特徴とする、請求項２に記載のストレージ装置。
【請求項４】
前記メモリコントローラは、
前記論理ページに格納されている複数の前記ユーザデータのうち、３つ以上の前記ユーザデータが共通している場合に、前記ユーザデータと前記保証コードを分けてそれぞれ異なる前記物理ページに格納することを特徴とする、請求項２に記載のストレージ装置。
【請求項５】
前記メモリコントローラは、
前記論理ページに対応付けられた複数の前記ユーザデータのうち、共通のパタンを有するユーザデータをそれぞれ分割し、前記ユーザデータの１つと複数の保証コードが連結された保証コードのグループとを格納することを特徴とする、請求項２に記載のストレージ装置。
【請求項６】
前記ストレージコントローラは、
前記共通のパタンを有する前記ユーザデータの圧縮後のデータサイズが所定のサイズまたは所定以下のサイズとなる場合に、前記圧縮ユーザデータと前記保証コードとを前記物理ページに格納することを特徴とする、請求項５に記載のストレージ装置。
【請求項７】
前記フラッシュメモリモジュールにフォーマット情報を発行するインタフェースを備え、
前記フラッシュメモリモジュールのメモリコントローラは、
前記フォーマット情報に基づいて、フォーマットパタンを有する前記ユーザデータと、前記ユーザデータに対応付けられた前記保証コードとを生成することを特徴とする、請求項１に記載のストレージ装置。
【請求項８】
前記メモリコントローラは、
１回の読み出し処理で、前記複数の物理ページのうちの１つの物理ページに格納された、前記複数の保証コードとともに前記圧縮ユーザデータ読み出す
ことを特徴とする、請求項１に記載のストレージ装置。
【請求項９】
前記複数の保証コードは、対応する前記ユーザデータのビットエラー訂正符号及び論理アドレスを含む
ことを特徴とする、請求項１に記載のストレージ装置。
【請求項１０】
前記保証コードは、対応する前記ユーザデータの値に依存しない値を含む
ことを特徴とする、請求項１に記載のストレージ装置。
【請求項１１】
前記データの共通のパタンは、０である
ことを特徴とする、請求項１に記載のストレージ装置。
【請求項１２】
複数のフラッシュメモリモジュールと、前記複数のフラッシュメモリモジュールに接続されるストレージコントローラと、を備えるストレージ装置を用いたデータ制御方法であって、
前記複数のフラッシュメモリモジュールのそれぞれは、
データの書込み及び読み出しの単位である複数の物理ページを有する少なくとも１つのフラッシュメモリチップと、前記少なくとも１つのフラッシュメモリチップに接続されるメモリコントローラと、
を備え、
前記ストレージコントローラが、複数のユーザデータと、前記複数のユーザデータのそれぞれに付与され、それぞれ異なる複数の保証コードと、を前記フラッシュメモリモジュールに送信するステップと、
前記フラッシュメモリモジュールの前記メモリコントローラが、前記複数のユーザデータが共通のパタンを有する場合、前記複数のユーザデータを圧縮して圧縮ユーザデータとし、前記圧縮ユーザデータと、前記複数のユーザデータに付与されている前記複数の保証コードと、を前記複数の物理ページのうちの１つの物理ページに格納するステップと
を含むことを特徴とする、データ制御方法。
【請求項１３】
データの書き込み及び読み出しの単位である複数の物理ページを有する少なくとも１つのフラッシュメモリチップと、前記少なくとも１つのフラッシュメモリチップに接続されるメモリコントローラと、
を備え、
前記メモリコントローラは、
複数のユーザデータを、前記複数のユーザデータのそれぞれに付与され、それぞれ異なる複数の保証コードと、を受信し、
前記複数のユーザデータが共通のパタンを有する場合、前記複数のユーザデータを圧縮して圧縮ユーザデータとし、前記圧縮ユーザデータと、前記複数のユーザデータに付与されている前記複数の保証コードと、を前記複数の物理ページのうちの１つの物理ページに格納する
ことを特徴とする、フラッシュメモリモジュール。
【請求項１４】
前記メモリコントローラは、
１回の読み出し処理で、前記複数の物理ページのうちの１つの物理ページに格納された、前記複数の保証コードとともに前記圧縮ユーザデータ読み出す
ことを特徴とする、請求項１３に記載のフラッシュメモリモジュール。
【請求項１５】
前記複数の保証コードは、対応する前記ユーザデータのビットエラー訂正符号及び論理アドレスを含む
ことを特徴とする、請求項１３に記載のフラッシュメモリモジュール。
【請求項１６】
前記保証コードは、対応する前記ユーザデータの値に依存しない値を含む
ことを特徴とする、請求項１３に記載のフラッシュメモリモジュール。
【請求項１７】
前記データの共通のパタンは、０である
ことを特徴とする、請求項１３に記載のフラッシュメモリモジュール。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置及びデータ制御方法に関し、特に、書き換えが制限されているデバイスを記憶媒体とするストレージ装置およびデータ制御方法に適用して好適なるものである。
【背景技術】
【０００２】
従来、ストレージ装置では、例えば、磁気ディスクや光ディスク等のランダムアクセスが可能な不揮発性記憶媒体がデータ記憶媒体として用いられている。特に最近では、小型ディスクドライブを多数備えるストレージ装置が主流となっている。
【０００３】
また、近年の半導体技術の進歩に伴って、一括消去可能な不揮発性半導体メモリが開発されている。このような不揮発性半導体メモリとしては、例えば、フラッシュメモリを例示できる。フラッシュメモリを記憶媒体とするストレージ装置は、小型ディスクドライブを多数備えるストレージ装置に比べて、省電力であったり、アクセス時間等が高速であったりすると考えられている。
【０００４】
上記したフラッシュメモリは、既に記録されたデータ領域に対して、直接データの書き換えを行うことができないという特徴を有している。このため、記録データを書き換える際には、記録データを読み取った後、記録領域に対して消去を実行し、消去された未書込み領域に対して更新データを書き込む処理を行う必要がある。しかし、フラッシュメモリの消去時間は書込み時間に比べて長いため、一般的に、データを書き込む際には、旧データを一旦読みだした後、ライトデータと統合して更新データを生成し、生成した更新データを別の未書込み領域に書き込み、元の記録領域を無効化（上位装置からの参照を不可とする処理）する方法が採用されている。そして、未書込み領域が枯渇した場合には、無効化した領域を消去して、新たに未書込み領域を生成する。
【０００５】
しかし、フラッシュメモリでは、データの消去回数に制限があり、データの書き換えが集中して消去回数が増大したデータ領域は、データの消去ができなくなり使用不能となってしまう。このため、特定のデータ領域にデータ消去処理が集中しないようにする必要があった。また、フラッシュメモリは、一度書き込んだページでも、時間とともに読み出しエラー率が増加してしまうため、書き込んでから一定時間経過したページを別ページに書き込むリフレッシュと呼ばれる動作が必要となる。
【０００６】
このような特性を持つフラッシュメモリにおいては、データの消去時間を短縮させたり、消去回数を低減させたりするために、重複排除技術が用いられている（例えば、特許文献１）。重複排除技術は、上位装置に提供する論理アドレスと実際の記憶領域の物理アドレスとが対応付けて管理されている場合に、同一のデータが格納された複数の論理アドレス空間を、当該データが格納された１つの物理アドレス空間に対応付ける技術である。重複排除技術を利用することにより、データの書き込み量を低減することができ、フラッシュメモリを記憶媒体とするストレージ装置において、フラッシュメモリの長寿命化と、性能安定性の向上を図ることができる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００９−８７０２１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ところで、ストレージ装置においては、データ領域に格納するデータのハードウェア障害などによるビット化けや、内部制御エラーなどによる不正なアドレスへの書き込みや読込みを防ぐために、書き込みデータに対して保証コードが付与される。一般的に、この保証コードは、データに対して冗長性を持たせることを目的にデータ内容から算出される部と、ベンダ毎に値を自由に設定できる部を組み合わせた内容となっている。このような保証コードが付与されたデータに対して重複排除を行う場合、保証コード部分がデータ毎に異なるため、データの内容が同じであっても保証コードに差異があるため重複排除を行うことができないという問題があった。
本発明は以上の点を考慮してなされたもので、データ毎に異なる保証コードが付与されたデータを重複排除して、データ容量効率を向上させることが可能なストレージ装置およびデータ制御方法を提案しようとするものである。
【課題を解決するための手段】
【０００９】
かかる課題を解決するために本発明においては、１または複数のフラッシュメモリモジュールが搭載されたフラッシュメモリ制御装置を備えるストレージ装置であって、前記フラッシュメモリモジュールは、記憶領域を提供する少なくとも１つのフラッシュメモリチップと、前記フラッシュメモリチップにユーザデータおよび前記ユーザデータに付随する保証コードを含むデータの前記記憶領域への書き込み／読み込みを制御するコントローラと、を備え、前記コントローラは、前記ユーザデータが共通する複数の前記データを、それぞれ、前記ユーザデータと前記保証コードに分けて、１つの前記ユーザデータを前記記憶領域の所定単位の領域に格納し、複数の前記ユーザデータに付随する各保証コードを連結して前記記憶領域の所定単位の領域に格納することを特徴とする、ストレージ装置が提供される。
【００１０】
かかる構成によればフラッシュメモリチップに書き込まれる複数のデータのうち、ユーザデータが共通する複数のデータについて、ユーザデータと保証コードとを分けて、１つのユーザデータを物理ページに格納し、複数のユーザデータに対応する保証コードを連結して物理ページに格納する。これにより、保証コードが付与されたデータに対しても重複排除を行って、記憶媒体への書き込み量を縮減することによりフラッシュメモリの長寿命化を図ることができる。さらに、追記型の書き込み方法を採用するフラッシュメモリなどの記憶媒体において、ユーザが使用していない未使用領域を増加させて、未使用領域をデータの追記用の領域とすることにより、性能安定性の向上を図ることが可能となる。
【発明の効果】
【００１１】
本発明によれば、データ毎に異なる保証コードが付与されたデータを重複排除して、データ容量効率を向上させることができる。
【図面の簡単な説明】
【００１２】
【図１】本発明の第１の実施の形態に係る計算機システムのハードウェア構成を示すブロック図である。
【図２】同実施形態にかかるフラッシュメモリモジュールの構成を示すブロック図である。
【図３】同実施形態にかかるフラッシュメモリチップの構成を示すブロック図である。
【図４Ａ】同実施形態にかかるデータの内容を説明する概念図である。
【図４Ｂ】同実施形態にかかるページの内容を説明する概念図である。
【図５】同実施形態にかかる重複排除処理の概要を説明する概念図である。
【図６Ａ】同実施形態にかかる論理／物理ページアドレスを説明する概念図である。
【図６Ｂ】同実施形態にかかる論理／物理アドレス変換テーブルの一例を示す図表である。
【図６Ｃ】同実施形態にかかる逆参照テーブルの一例を示す図表である。
【図７】同実施形態にかかる重複排除処理の流れを示すフローチャートである。
【図８】同実施形態にかかるリクラメーション処理およびリフレッシュ処理の流れを示すフローチャートである。
【図９Ａ】同実施形態にかかるマージ処理の概要を説明する概念図である。
【図９Ｂ】同実施形態にかかるマージ処理の概要を説明する概念図である。
【図１０】同実施形態にかかるマージ処理の流れを示すフローチャートである。
【図１１】同実施形態にかかるリード処理の流れを示すフローチャートである。
【図１２】本発明の第２の実施の形態に係る重複排除処理の概要を説明する概念図である。
【図１３Ａ】同実施形態にかかる論理／物理ページアドレスを説明する概念図である。
【図１３Ｂ】同実施形態にかかる論理／物理アドレス変換テーブルの一例を示す図表である。
【図１３Ｃ】同実施形態にかかる逆参照テーブルの一例を示す図表である。
【図１４】同実施形態にかかる重複排除処理の流れを示すフローチャートである。
【図１５】同実施形態にかかるリクラメーション処理およびリフレッシュ処理の流れを示すフローチャートである。
【図１６】同実施形態にかかるリード処理の流れを示すフローチャートである。
【図１７】本発明の第３の実施の形態に係る重複排除処理の流れを示すタイミングチャートである。
【発明を実施するための形態】
【００１３】
以下図面について、本発明の一実施の形態を詳述する。
【００１４】
（１）第１の実施の形態
（１−１）計算機システムのハードウェア構成
まず、本実施の形態にかかる計算機システム１のハードウェア構成について説明する。図１に示すように、本実施の形態にかかる計算機システム１は、ストレージ装置１１と、第１および第２のホスト１２Ａ、１２Ｂ（以降、第１および第２のホストを単にホスト１２と称する場合もある。）と、管理端末１３と、ＳＡＮ（Storage Area Network）１４と、を備えている。
【００１５】
ストレージ装置１１は、ホスト１２から送信されたコマンドを解釈して、ストレージ装置１１の記憶領域内へのリード／ライトを実行する。ストレージ装置１１は、図１に示すように、第１および第２のホストインタフェース１１２Ａ、１１２Ｂ（第１および第２のホストインタフェースを単にホストインタフェース１１２と称する場合もある。）、第１および第２のストレージインタフェース１１３Ａ、１１３Ｂ（以降、第１および第２のストレージインタフェースを単にストレージインタフェース１１３と称する場合もある。）保守インタフェース（Ｉ／Ｆ）１１４、ＣＰＵ１１５、メモリ１１６、コネクタ１６Ａ、１６Ｂ、１６Ｃ、１６Ｄ（以降、単にコネクタ１６と称する。）およびフラッシュメモリストレージ１７などから構成される。
【００１６】
ホストインタフェース１１２は、ホスト１２からのデータや制御コマンドなどを受け付けるインタフェースである。また、ストレージインタフェース１１３は、フラッシュメモリストレージ１７にデータや制御コマンドを送信するインタフェースである。また、保守インタフェース（Ｉ／Ｆ）１１４は、管理端末１３と接続して、管理端末１３からの管理や保守に関する制御コマンド等を受け付けるインタフェースである。
【００１７】
ＣＰＵ１１５は、演算処理装置として機能し、メモリ１６に記憶されている各種プログラムや演算パラメータ等にしたがって、ストレージ装置１１全体の動作を制御する機能を有する。具体的に、ＣＰＵ１１５は、ホスト１２からのデータ入出力（データＩ／Ｏ）を処理し、フラッシュメモリストレージ１７にデータ入出力に関するＩ／Ｏコマンドを発行する。また、ホスト１２から受け付けたユーザデータに対して保証コードを生成して、ユーザデータに付与する。メモリ１１６は、各種プログラムや演算パラメータ等の他、制御情報や管理情報、また、ユーザからのデータを一時的に格納する。
【００１８】
フラッシュメモリストレージ１７は、フラッシュメモリモジュール２１Ａ〜２１Ｆ（以降、フラッシュメモリモジュール２１と称する場合もある。）から構成されている。本実施形態では、フラッシュメモリストレージ１７に、６つのフラッシュメモリモジュール２１〜２１Ｆが備えられている構成としたが、フラッシュメモリモジュールの数はかかる例に限定されない。フラッシュメモリモジュール２１は、ストレージインタフェース１１３とコネクタ１６を介して接続され、コネクタ１６を介してホスト１２から受け付けられたデータおよび各制御コマンドがフラッシュメモリモジュール２１に書き込まれる。フラッシュメモリモジュール２１の内部構成については後で詳細に説明する。なお、本実施形態では、フラッシュメモリストレージ１７をストレージ装置１１と一体とした構成としているが、かかる例に限定されず、フラッシュメモリストレージ１７をストレージ装置１１とは別体の装置としてもよい。
【００１９】
ホスト１２は、ＳＡＮを介してストレージ装置１１と接続され、ストレージ装置１１にデータのリード／ライト要求を送信する。また、ホスト１００は、ＣＰＵ（Central
Processing Unit）およびメモリ等の情報処理資源を備えたコンピュータ装置であって、例えば、パーソナルコンピュータや、ワークステーション、メインフレームなどから構成される。ホスト１２とストレージ装置１１との通信は、例えば、ＳＣＳＩ（Small Computer System Interface）などのブロックプロトコルが用いられる。また、ホスト２０は、キーボード、スイッチやポインティングデバイス、マイクロフォン等の情報入力装置と、モニタディスプレイやスピーカ等の情報出力装置とを備えている。
【００２０】
管理端末１３は、ＣＰＵおよびメモリ等の情報処理資源を備えたコンピュータ装置であって、例えば、パーソナルコンピュータや、ワークステーション、メインフレームなどから構成される。ＣＰＵは、演算処理装置として機能し、メモリに記憶されているプログラムや演算パラメータ等にしたがって、管理端末１３の動作を制御する。また、管理端末１３は、キーボード、スイッチやポインティングデバイス、マイクロフォン等の情報入力装置と、モニタディスプレイやスピーカ等の情報出力装置とを備えており、オペレータ等の入力に応じてストレージ装置１１等を管理する装置である。
【００２１】
なお、ホスト１２およびフラッシュメモリモジュール２１の数、およびそれらを接続するコネクタ１６は、図１に示す数に限定されず、１またはそれ以上の数であればよい。同様に、各コネクタおよびインタフェースの規格は特定のものに限定されない。例えば、ＳＡＮ１４に適用される代表的な規格として、ＦＣ（Fibre Channel）、ＳＣＳＩ、ｉＳＣＳＩ（internet Small Computer System Interface）、ＳＡＳ(Serial Attached SCSI)などを例示できる。
【００２２】
ここで、フラッシュメモリ（フラッシュメモリモジュール２１）について説明する。フラッシュメモリは、最小消去単位が、最小書き込み単位に比べて大きいという特徴を有する。具体的に、フラッシュメモリにおいては、１つのブロック内に複数のページが設けられており、ブロック単位でデータが消去され、ページ単位でデータの読み書きが実行される。
【００２３】
上記したように、フラッシュメモリは、その特性上、データを直接書き換えることができない。すなわち、フラッシュメモリでは、記憶しているデータを書き換える場合、記憶している有効なデータを他のブロックに退避させて、記憶しているデータをブロック単位で消去する。そして、データを消去したブロックにデータを書き込むことによりデータの書き換えを行っている。
【００２４】
このように、フラッシュメモリにおけるデータの書き換え処理では、ブロック単位のデータの消去が伴う。しかしながら、フラッシュメモリの１ブロック分のデータの消去にかかる時間は、１ページ分のデータを書き込むのに要する時間と比べて約１桁分長い時間がかかる。したがって、１ページ分のデータを書き換えるために毎回１ブロック分のデータ消去を実行すると、フラッシュメモリのデータ書き換え性能が劣化してしまう。すなわち、記憶媒体としてフラッシュメモリを用いる場合には、フラッシュメモリからデータを消去する時間を隠ぺいできるアルゴリズムでデータを書き込むことが必要となる。
【００２５】
通常、フラッシュメモリに対してデータの書き換えを行う場合には、データを書き換えるごとにデータを消去することは行わず、データが記録されていない未使用領域にデータを追記する方式によってデータの書き換えを行う。しかし、データの書き換え処理が度重なって実行されると、フラッシュメモリ内の未使用領域が枯渇してしまうため、フラッシュメモリに書き込まれている不要なデータを消去して、記憶領域を再利用可能な状態にする必要が生じる。
【００２６】
そこで、旧データを含むブロック内の有効なデータのみを未使用領域にコピーし、コピー元のブロックを消去して再利用可能な状態にするブロック再生処理（以下、当該処理をリクラメーション処理と称する。）を実行することが、フラッシュメモリのデータ高速書き換えには必須の処理となる。このリクラメーション処理は、無効データが多くなったブロックを対象に実行される。
【００２７】
一方、フラッシュメモリは、データを消去する回数に制限があるという特徴を有する。例えば、１ブロック当たり１０万回までの消去回数が保証されている。この場合、データの書き換えが１のブロックに集中して、当該ブロックの消去回数が増大すると、データの消去ができなくなり、ブロックが使用不能となってしまうという問題があった。そのため、フラッシュメモリを記憶媒体として用いる場合、特定のブロックに対するデータ消去処理が集中しないように、消去回数の平準化処理を行う必要がある。
【００２８】
また、フラッシュメモリは、一度書き込みしたページについては、時間とともに読み出しエラー率が増加するという特徴を有する。このように、データを保持しておくだけでも発生するエラーをリテンションエラーといい、これを回避するために、書き込み後一定時間を経過したページを、別ページに書き込む処理（リフレッシュ処理）が実行される。リフレッシュ処理を実行する場合においても、上記した消去回数を平準化したり、性能に対する影響を考慮したりする必要がある。
【００２９】
上記したように、フラッシュメモリを記憶媒体として用いる場合には、データ消去時間を隠ぺいしたり、データ消去回数を平準化したりするために、上位装置に提供する論理アドレスと実際の記憶領域の物理アドレスとを対応づけて、データの書き込みの際に、論理アドレスから物理アドレスへの変更処理が行われる。すなわち、上位装置に提供する論理アドレスと記憶領域上の物理アドレスとの対応を逐次変更することにより、上位装置は、論理アドレス空間にデータを書き込めばよく、データ書き込み時における未使用領域への追記に伴う物理アドレスの変更などを意識する必要がなくなる。
【００３０】
フラッシュメモリを有するストレージ装置において、上記のように論理アドレスと物理アドレスとを対応付けて管理している場合に、重複排除技術を適用することが考えられている。重複排除技術は、同一のデータが格納された複数の論理アドレス空間を、当該データが格納された１つの物理アドレス空間に対応付ける技術である。当該重複排除技術により、データ量を短縮し、ストレージのデータ容量を節約することが可能となる。
【００３１】
特に、重複排除技術の適用が有効と考えられる対象のデータとして、フォーマットデータが挙げられる。ストレージ装置１１は、記憶デバイスを使用する際に、記憶デバイスの異常個所を検知したり保証コードを事前に書き込みしたりすることを目的として、記憶デバイスの全領域に特定パタンのデータを書き込むフォーマット処理を実行する。このフォーマット処理は、フラッシュメモリをはじめとする書き換えが制限されている記憶デバイスにおいては、不必要に書き換え回数を増加させるという問題があった。
【００３２】
また、フラッシュメモリは、データの書き換えに対して、未使用領域への追記方式を採用しているため、未使用領域が少なくなると頻繁にデータの消去処理を実行しなければならない。このため、フォーマット処理により実体を伴わないデータが書き込まれることにより、未使用領域が減少して性能安定性が損なわれるという問題があった。そこで、上記した重複排除技術を適用することにより、データの書き込み量を低減させて、フラッシュメモリを記憶媒体とするストレージ装置１１におけるフラッシュメモリの長寿命化と性能安定性の向上を図ることができる。
【００３３】
さらに、ストレージ装置１１では、データ領域に格納するデータのハードウェア障害などによるビット化けや、内部制御エラーなどによる不正なアドレスへの書き込みや読込みを防ぐために、書き込みデータに対して保証コードが付与される。一般的に、この保証コードは、データに対して冗長性を持たせることを目的にデータ内容から算出される部と、ベンダ毎に値を自由に設定できる部を組み合わせた内容となっている。このような保証コードが付与されたデータに対して重複排除を行う場合、保証コード部分がデータ毎に異なるため、データの内容が同じであっても保証コードに差異があるため重複排除を行うことができないという問題があった。
【００３４】
そこで、本実施形態では、保証コードを含むデータに対して重複排除処理を行う場合に、対象となるデータの保証コード部分とデータ部分を分離して、データ部分のみを重複排除の処理対象とし、保証コード部分はデータとは別に管理してそれぞれのデータ毎にフラッシュメモリに格納して管理している。また、フラッシュメモリにおいては、上記したように、最小の書き込み単位はページ単位であるため、単純に保証コード部分を分離してフラッシュメモリに格納するだけでなく、書き込み単位を意識して効率的に保証コードを格納したり、論理アドレスから物理アドレスへの変更を実行したりしている。
【００３５】
さらに、上記したフォーマットデータに代表される同一値やインクリメント値など、単純なパタンのデータについては、データ部をさらに圧縮することにより、データの書き込み量を削減することができる。そして、本実施形態では、上記したフラッシュメモリにおける書き込み制限に適合するように、圧縮したデータ部とそのデータに関連する保証コードを効率よく管理している。
【００３６】
以上のように、本実施形態によれば、保証コードが付与されたデータに対しても重複排除を行って、記憶媒体への書き込み量を縮減することによりフラッシュメモリの長寿命化を図ることができる。さらに、追記型の書き込み方法を採用するフラッシュメモリなどの記憶媒体において、ユーザが使用していない未使用領域を増加させて、未使用領域をデータの追記用の領域とすることにより、性能安定性の向上を図ることが可能となる。
【００３７】
（１−２）ストレージ装置の内部構成について
次に、ストレージ装置１１の内部構成について説明する。まず、フラッシュメモリモジュール２１の内部構成の詳細について説明する。フラッシュメモリモジュール２１は、フラッシュ制御装置２１０とフラッシュメモリチップ３１Ａ〜３１Ｈ（以降、フラッシュメモリ３１と称する場合もある。）とから構成される。なお、本実施形態では、フラッシュメモリチップ３１は、図２に示すように６つのフラッシュメモリから構成されるが、かかる例に限定されず１以上の個数であればよい。
【００３８】
図２に示すように、フラッシュ制御装置２１０は、ストレージインタフェース２２１と、ＣＰＵ２１２と、コントローラ２１３と、メモリ２１４と、バッファ２１５と、フラッシュメモリインタフェース２１６などを備える。
【００３９】
ストレージインタフェース２２１は、ストレージ装置１１本体のＣＰＵ１１５からのデータおよび制御コマンドを受け付けるインタフェースである。ＣＰＵ２１２は、フラッシュ制御装置２１０全体の動作を制御する機能を有し、メモリ２１４に格納されている各種プログラムに基づいて動作する。ＣＰＵ２１２は、例えば、ストレージインタフェース２１１を介して受領したホスト１２からのデータＩ／Ｏに対して、メモリ２１４に格納されている各種テーブルを参照して、フラッシュメモリチップ３１にデータをリード／ライトする。また、フラッシュメモリチップ３１の使用状況に応じて、使用済み領域を再生させるリクラメーションの実行やデータの書き換えによる記憶媒体の摩耗を記憶媒体の各素子に均等に分散させるウェアレベリングなどを実施する。
【００４０】
コントローラ２１３は、ＣＰＵ２１２の制御のもと、フラッシュメモリチップ３１Ａ〜３１Ｈに対してデータのリード／ライトを実行する。また、当該データに対してエラー訂正符号の生成や、重複排除のためのデータの比較や、ハッシュ値の生成などを実行する。なお、本実施形態では、エラー訂正符号の生成等の処理をコントローラ２１３が実行する構成としたが、かかる例に限定されず、コントローラ２１３の処理をＣＰＵ２１２が実行する構成としてもよい。
【００４１】
メモリ２１４は、ＣＰＵ２１２およびコントローラ２１３により実行される各種プログラム、各種テーブルおよび制御情報を記憶する。なお、フラッシュ制御装置２１０の内部構成は、図２に示す構成に限定されず、各機能を１または複数のデバイスによって実行するようにしてもよい。
【００４２】
次に、フラッシュメモリチップ３１の内部構成について説明する。図３に示すように、フラッシュメモリチップ３１は、フラッシュ制御装置２１から発行されたデータＩ／Ｏコマンドの対象データを一時的に格納するページバッファ３１２Ａ、３１２Ｂ（以降、ページバッファ３１２とも称する。）および、実際の記憶領域である物理ブロック３１３Ａ〜３１３Ｆ（以降、物理ブロック３１３とも称する。）から構成される。
【００４３】
物理ブロック３１３は、さらに、ページ３２Ａ〜３２Ｃ（以降、ページ３２とも称する。）から構成される。上記したように、物理ブロック３１３は、フラッシュメモリにおける消去単位であり、ページ３２は、フラッシュメモリにおける書き込み／読み込み単位である。また、ページ３２は、２Ｋバイト、３Ｋバイト、８Ｋバイトなどのサイズに分割された領域であり、ブロック３１３は、１２８個のページ、２５６個のページのサイズに分割された領域であり、１Ｍバイト、２Ｍバイトなどの大きさを有する。
【００４４】
次に、ユーザデータに対する保証コードについて説明する。図４Ａに示すように、データ（ユーザデータ）４１に付与されるコード（保証コード）４２は、データ４１に対して一定のアドレスの区切りごとに付与される。一般的に、１セクタ、５１２バイトのユーザデータごとに、８バイトの保証コードが生成され、付与される。以降、このデータの区切りをセクタと称して説明する場合もある。
【００４５】
コード４２は、データ３１から生成されるビットエラー訂正符号部４２１と、ベンダが自由に設定可能なＵＤＴ部４２２とから構成される。ＵＤＴ部４２２は、例えば、対象データのアドレスの整合性を確認することを目的として、当該データのアドレスが格納される。この場合、ＵＤＴ部４２２には、ユーザデータ４１の値に関わらず、固有の値が格納される。
【００４６】
なお、フラッシュメモリのページサイズは、通常、５１２バイトより大きいため、１つのページの中に複数のセクタが格納されることとなる。このとき、ページ３２は、図４Ｂに示す構成となる。すなわち、フラッシュメモリのページ３２内には、ｎセクタを格納することができ、各セクタのデータ部４１Ａ〜４１Ｃをまとめてページ３２のデータ部４１１とする。また、各セクタのコード４２Ａ〜４２Ｃをまとめて、ページのコード部４２１としている。なお、ページ内のデータおよび保証コードの配置は、図４Ｂに示す構成に限定されず、各セクタのデータおよび保証コードの位置が確定できる構成であればよい。また、説明上、セクタのうち、コード４２をデータ４１以外としているが、かかる例に限定されず、ユーザデータから生成されるビットエラー訂正符号４２１をデータの一部として、データ部４１に格納するようにしてもよい。
【００４７】
次に、本実施形態にかかる重複排除処理の概要について説明する。図５に示すように、データ部４１１Ａとコード部４２１Ａを含むページと、データ部４１１Ｂとコード部４２１Ｂを含むページと、データ部４１１Ｃとコード部４２１Ｃを含むページの３つのページを含むページ群４３は、重複排除処理によって、データ部４４１を含むページ４４とコード部４５１を含むページ４５の２つのページに格納することができる。すなわち、データ部４１１Ａ、４１１Ｂ、４１１Ｃに格納されているデータは同一の内容のデータであるため、データ部をページ４４のデータ部４４１に格納する。そして、コード部４２１Ａ、４２１Ｂ、４２１Ｃに格納されている保証コードは異なる内容の保証コードであるため、ページ４５のコード部４５１にコード部４２１Ａ、４２１Ｂ、４２１Ｃのすべての保証コードを格納する。
【００４８】
そして、ページ群４３の各論理アドレスと、ページ４４およびページ４５の物理アドレスとが対応付けられる。すなわち、データ部については、データ部４１１Ａ、４１１Ｂ、４１１Ｃの論理アドレスの先頭と、ページ４４の物理アドレスとが対応付けられ、さらに、コード部については、ページ４５の各物理アドレスと、当該物理アドレスの先頭からのオフセット情報とが対応付けられる。このように、データ部とコード部を含むページが３ページ以上あり、データ部が同一の内容である場合には、重複排除により３ページを２ページにして、ページ数削減の効果を得ることができる。なお、重複排除によりページ内に空きスペース４２２、４５２を得ることができるが、当該空きスペースは未使用のままにしてもよいし、後述する管理情報の格納用に使用してもよい。
【００４９】
次に、重複排除の具体例について説明する。図６Ａに、論理ページアドレスと物理ページアドレスとの対応関係を示す。図６Ａに示すように、ＡＤＤｒ５１は、論理ページアドレスを示し、Ｄａｔａ５２は、論理ページアドレス空間に格納されているデータを示す。また、Ｃｏｄｅ５３は、論理ページアドレス空間に格納されている保証コードを示す。そして、Ａｄｄｒ５４は、論理ページに対応付けられている物理ページアドレスを示し、Ｄａｔａ５５は、物理ページアドレス空間に格納されているデータの内容を示す。
【００５０】
論理ページアドレス０〜３で示される論理ページ５１１〜５１４に格納されているデータ５２には、同一の内容のデータ「ＡＡＡＡ」が格納されている。この場合、論理ページ５１１〜５１４の各論理ページアドレス０〜３は、「ＡＡＡＡ」のデータを格納している物理ページ５４１の物理ページアドレス０に対応付けられる。しかし物理ページ５４１は、保証コードを含まないユーザデータのみであるため、各論理ページ５１１〜５１４には、保証コードを格納している物理ページ５４２の物理ページアドレス１が対応付けられる。さらに、各論理ページ５１１〜５１４に対応する保証コードが物理ページアドレス１の先頭コードからどの位置にあるかがオフセット情報として対応付けられる。
【００５１】
次に、上記した論理ページと物理ページとの対応付けを実現するための管理テーブルについて説明する。当該管理テーブルは、フラッシュメモリモジュール２１のメモリ２１４に格納される。また、フラッシュメモリモジュール２１のコントローラ２１３が重複排除処理を実行して、各種管理テーブルを作成する。そして、フラッシュメモリモジュール２１のＣＰＵ２１２の制御のもと、コントローラ２１が管理テーブルを参照して、フラッシュメモリチップ３１にデータのリード／ライトを実行する。
【００５２】
論理／物理アドレス変換テーブル５６は、論理アドレスと物理アドレスとの対応付けを管理し、具体的に論理ページアドレスに格納されたデータおよび保証コードがいずれの物理ページに存在するかを管理するテーブルである。論理／物理アドレス変換テーブル５６は、図６Ｂに示すように、論理ページアドレス欄５６１、物理ページデータアドレス欄５６２、物理ページコードアドレス欄５６３および物理ページコードオフセットアドレス欄５６４から構成される。
【００５３】
論理ページアドレス欄５６１には、論理ページの先頭アドレスが格納される。物理ページデータアドレス欄５６２には、論理ページアドレス欄５６１に格納されているアドレスに対応するデータ部が格納されている物理ページの先頭アドレスが格納される。物理ページコードアドレス欄５６３には、論理ページアドレス欄５６１に格納されているアドレスに対応するコード部が格納されている物理ページの先頭アドレスが格納される。
【００５４】
物理ページコードオフセットアドレス５６４には、物理ページコードアドレス欄５６３に格納されているアドレスによって示されるページ内コードのうち、各論理ページの保証コードに対応する保証コードの格納位置を示すアドレスが格納される。このように、論理／物理アドレス変換テーブル５６により、論理ページに含まれるデータと保証コードに対応する、物理ページのデータおよび保証コードが格納されている位置を得ることができる。
【００５５】
なお、図６Ｂでは、物理ページコードオフセットアドレス欄５６４に保証コードのオフセットアドレスを格納しているが、物理ページコードオフセットアドレス欄５６４を設けずに保証コードの物理位置を認識するようにしてもよい。すなわち、重複排除の対象となるページ群のアドレスの並びが連続であるという制約を設けることにより、物理ページコードオフセットアドレスがなくとも保証コードの物理位置を認識することができる。また、重複排除の対象となっていないページについては、当該ページに対してフラグを設けたり、物理ページデータアドレスと物理ページコードアドレスとを同一の値にしたりすることにより、重複排除の対象となっているか否かを判別するようにしてもよい。
【００５６】
次に、逆参照テーブル５７について説明する。逆参照テーブル５７は、物理ページがいずれの論理ページに参照されているかを管理するテーブルであって、図６Ｃに示すように、物理ページアドレス欄５７１、参照カウント欄５７２および論理ページアドレス欄５７３から構成される。
【００５７】
物理ページアドレス欄５７１には、データおよび保証コードが格納されている物理ページの先頭アドレスが格納される。参照カウント欄５７２には、物理ページに格納されているデータを参照している論理ページの数が格納される。したがって、当該物理ページを参照していた論理ページが更新されて、参照されなくなった場合には、参照カウントをデクリメントする。論理ページアドレス欄５７３には、参照元となる論理ページアドレスが格納される。１つの物理ページが複数の論理ページに参照されている場合には、複数の論理ページアドレス欄５７３に、参照元となる複数の論理ページアドレスが格納される。
【００５８】
当該逆参照テーブル５７により、例えばリクラメーション処理が実行された場合に、物理ページが参照されているか否かを判定することができ、参照元となる論理ページアドレス５７３から、再配置対象となる論理ページアドレスを取得することができる。
【００５９】
上記したように、上記した管理テーブルはフラッシュ制御装置２１０のメモリ２１４に格納することにより、データの書き込み／読み取り等の処理を高速化することができるが、かかる例に限定されず、管理テーブルサイズがメモリ２４１の容量に対して大きい場合には、フラッシュメモリ３１に格納してもよい。この場合、例えば、物理ページ内の空きスペース４４２および４５２などを利用してもよい。
【００６０】
また、上記したように、管理テーブルの作成および管理等は、フラッシュ制御装置２１０により実行されるが、かかる例に限定されず、フラッシュメモリのページ構造を認識し、書き込みデータの重複排除処理および管理情報を保持することができる装置が行ってもよい。例えば、ストレージ装置のＣＰＵ１１５が管理テーブルの作成および管理等をおこなってもよい。ただし、フラッシュ制御装置２１においては、論理アドレスと物理アドレスとの対応付けが必須となるため、管理テーブルを新設する必要がないが、ストレージ装置のＣＰＵ１１５により論理アドレスと物理アドレスの対応付けを管理する場合には、上記の管理テーブルを新設することとなる。
【００６１】
（１−３）ストレージ装置の動作の詳細
（１−３−１）重複排除処理
次に、ストレージ装置１１における重複排除処理について説明する。上記したように、フラッシュメモリモジュール２１のコントローラ２１３が重複排除処理を実行する。図７に示すように、まず、コントローラ２１３は、重複排除の対象となる論理ページリストを取得する（Ｓ１１）。論理ページリストは、ページ内のユーザデータが格納されているデータ部の内容が同一で、保証コードが格納されているコード部の内容が異なる２つ以上のページから構成される。
【００６２】
当該論理ページの探索方法としては、例えば、大サイズのデータをライトする場合や、リクラメーション処理やリフレッシュ処理などのデータ再配置時に、大サイズのデータの中から重複排除の対象となる論理ページの組み合わせを検索する。また、各ページのデータ部のハッシュ値を算出して管理し、ハッシュ値に基づいて、動的にデータ部の一致するページの組み合わせを検索するようにしてもよい。
【００６３】
続いて、コントローラ２３１は、ステップＳ１１において取得した論理ページのデータ部を格納する物理ページを取得する（Ｓ１２）。例えば、コントローラ２３１は、フラッシュメモリの長寿命化の観点から、摩耗度の少ない物理ページを優先して取得してもよいが、物理ページの取得ポリシーはかかる例に限定されず、管理者により設定されたポリシーをもとに物理ページを取得してもよい。
【００６４】
そして、コントローラ２３１は、ステップＳ１２において取得した物理ページに、ステップＳ１１において取得した論理ページのデータ部に格納されたユーザデータを書き込む（Ｓ１３）。ただし、コントローラ２３１は、必ずしもステップＳ１３においてデータの書き込みをしなくてもよい。例えば、データの書き込みをスケジューラなどに登録してもよい。
【００６５】
次に、コントローラ２３１は、ステップＳ１１において取得した論理ページのコード部を格納する物理ページを１ページ取得する（Ｓ１４）。ここで、コード部を格納する物理ページのブロックは、ステップＳ１２において取得したデータ部の書き込み先となる物理ページのブロックと異なるブロックとする。これにより、データをリード／ライトする際に、データ部とコード部とを別々に読み出してデータ部に対する処理とコード部に対する処理とを並行することが可能となる。
【００６６】
次に、コントローラ２３１は、ステップＳ１４において取得した物理ページが必要数あるかを判定する（Ｓ１５）。具体的に、コントローラ２３１は、重複排除対象となる論理ページの数分の保証コードの容量が取得した物理ページの容量以内であるかを判定する。保証コードを格納するための必要な容量は、保証コードサイズ×重複排除対象となる論理ページ数となる。また、１つの物理ページに格納可能な最大の保証コード数（最大対象ページ数）は、物理ページサイズを保証コードサイズで除算することにより算出することができる。したがって、コントローラ２３１は、対象論理ページ数が取得物理ページ数に最大対象ページ数を乗算した数より小さいか否かを判定することにより、物理ページが必要数あるかを判定する。
【００６７】
ステップＳ１５において、物理ページが必要数あると判定された場合には、コントローラ２３１は、ステップＳ１６の処理を実行する。一方、ステップＳ１５において、物理ページが必要数ないと判定された場合には、コントローラ２３１は、ステップＳ１４〜Ｓ１５の処理を繰り返す。
【００６８】
続いて、コントローラ２３１は、重複排除対象となる各論理ページのコード部を抽出して連結する（Ｓ１６）。具体的に、コントローラ２３１は、各論理ページから抽出したコード部を、物理ページサイズに収まるように連結する。
【００６９】
そして、コントローラ２３１は、ステップＳ１６において連結した保証コードを物理ページに書き込む（Ｓ１７）。コントローラ２３１は、保証コードを書き込むための複数の物理ページを取得している場合には、各物理ページに連結された保証コードを書き込む。
【００７０】
続いて、コントローラ２３１は、管理テーブルである論理／物理アドレス変換テーブル５６と逆参照テーブル５７を更新する（Ｓ１８）。具体的に、コントローラ２３１は、論理／物理アドレス変換テーブル５６については、重複排除の対象となった論理ページに該当するエントリについて、物理ページデータアドレス欄５６２の値をデータ格納先の物理ページアドレスの値に更新し、物理ページコードアドレス欄５６３の値を保証コード格納先の物理ページアドレスの値に更新する。また、コントローラ２３１は、保証コードの格納先となる物理ページ内の各保証コードの位置を物理ページコードオフセットアドレス欄５６４に格納する。
【００７１】
また、逆参照テーブル５７については、コントローラ２３１は、重複排除対象となった論理ページに対応付けられていた物理ページに該当するエントリについて更新を行う。すなわち、重複排除対象となった論理ページのアドレスの更新により、参照されなくなった物理ページに対して、参照カウンタ欄５７２の値をデクリメントする。そして、論理ページアドレス欄５７３から参照されなくなった論理ページのアドレスを削除する。
【００７２】
なお、論理／物理アドレス変換テーブル５６の更新は、重複排除処理を行わない通常の書き込み（ライト）処理においても行う必要がある。すなわち、論理ページのアドレスと、新しい書き込み先となる物理ページのアドレスとを対応付けたり、元の格納先の物理ページのエントリから参照していた論理ページのアドレスを削除したりする。
【００７３】
（１−３−２）リクラメーション処理、リフレッシュ処理
次に、リクラメーション処理およびリフレッシュ処理の詳細について説明する。図８に示すように、まず、コントローラ２３１は、リクラメーションまたはリフレッシュの対象となる物理ブロックリストを取得する（Ｓ２１）。例えば、コントローラ２３１は、無効ページの多い物理ブロックをリクラメーション処理の対象とし、長時間アクセスされていない物理ブロックをリフレッシュ処理の対象とする。
【００７４】
続いて、コントローラ２３１は、ステップＳ２１において取得した物理ブロックリストに含まれるすべての物理ブロックに対して処理を実行したか否かを判定する（Ｓ２２０）。ステップＳ２２０において、すべての物理ブロックに対して処理を実行したと判定された場合には、コントローラ２３１は、ステップＳ２２１以降の処理を実行する。一方、ステップＳ２２０において、すべての物理ブロックに対して処理を実行していないと判定された場合には、コントローラ２３１は、ステップＳ２２以降の処理を実行する。
【００７５】
続いて、コントローラ２３１は、物理ブロック内のすべての物理ページを対象として、逆参照テーブル５７の参照カウント欄５７２の値が０より大きい物理ページが存在するか否かを判定する（Ｓ２２）。ステップＳ２２において、参照カウント欄５７２の値が０より大きい物理ページが存在すると判定された場合には、ステップＳ２３以降の処理を実行し、参照カウント欄５７２の値が０より大きい物理ページが存在しないと判定された場合には、ステップＳ２２１以降の処理を実行する。
【００７６】
続いて、コントローラ２３１は、対象となる物理ページのうち、参照カウント欄５７２の値が０以上の物理ページＸを１つ取得する（Ｓ２３）。以降、ステップＳ２３において取得した物理ページを物理ページＸとして以下説明する。そして、コントローラ２３１は、逆参照テーブル５７の物理ページＸに対応するエントリを取得する（Ｓ２４）。さらに、コントローラ２３１は、参照元論理ページアドレス欄５７３から、物理ページＸを参照している論理ページのアドレスを取得する（Ｓ２５）。以降、コントローラ２３１は、参照元論理ページアドレス欄５７３に登録されている参照元論理ページを調査する。
【００７７】
そして、コントローラ２３１は、ステップＳ２５において取得した論理ページが、対象としている物理ページＸを未だ参照しているか否かを調査する（Ｓ２６）。なお、重複排除処理時や、通常のライト処理時に実行される管理テーブルの更新処理（ステップＳ１８）において、逆参照テーブル５７の参照元論理ページアドレス欄５７３から物理ページを参照しなくなった論理ページのアドレスを削除している場合には、ステップＳ２６の処理は不要である。一方、逆参照テーブル５７がフラッシュメモリに格納されており、容易に更新出来ない場合に、ステップＳ２６において物理ページＸの参照の有無を確認する必要がある。
【００７８】
次に、コントローラ２３１は、物理ページＸを参照している論理ページを、コピー対象のリストに追加する（Ｓ２７）。コントローラ２３１は、物理ページＸを参照している論理ページを最終的に０にして、物理ブロックの消去を可能な状態とする。コントローラ２３１は、ステップＳ２７においては、コピー対象の論理ページをリストに追加するのみで、論理ページの実際のコピー処理は任意の契機に基づいて後で行ってもよい。
【００７９】
続いて、コントローラ２３１は、物理ページＸを参照している可能性のあるすべての論理ページについて、参照の有無を確認する（Ｓ２８）。ステップＳ２８において、物理ページＸの参照の有無を確認していない論理ページがある場合には、コントローラ２３１は、ステップＳ２６以降の処理を繰り返す。一方、ステップＳ２８において、すべての論理ページについて物理ページＸの参照の有無を確認したと判定された場合には、ステップＳ２２０の処理に戻る。
【００８０】
そして、コントローラ２３１は、ステップＳ２７において作成されたコピー対象リストに含まれる論理ページについて、重複排除処理を試行する（Ｓ２２１）。具体的に、コントローラ２３１は、コピー対象リストに含まれる論理ページのうち、データ部が同一の論理ページについて重複排除処理を実行する。
【００８１】
続いて、コントローラ２３１は、ステップＳ２２１において重複排除処理を実行した後、コピー対象リストに残っている論理ページをコピー先となる物理ページにコピーする（Ｓ２２２）。そして、コントローラ２３１は、ステップＳ２１においてリクラメーション処理またはリフレッシュ処理の対象となった物理ブロックを消去する（Ｓ２２３）。
【００８２】
（１−３−３）マージ処理
次に、マージ処理について説明する。ここで、マージ処理とは、既に重複排除処理が行われている論理ページについて、さらに、同一のデータを有する論理ページまたは物理ページについてそれらを統合する処理を意味する。上記した重複排除処理は、上記したように大サイズのデータをライトする場合や、リクラメーション処理やリフレッシュ処理時などに実行される。したがって、同一のフラッシュメモリモジュール２１内で重複排除処理がまだ実行されていない論理ページが存在する場合がある。また、ストレージ装置１１に複数のフラッシュメモリモジュール２１が存在する場合には、各フラッシュメモリモジュール２１内で重複排除処理が実行されるため、複数のフラッシュメモリモジュールにおいて同一のデータを含む論理ページが存在する場合がある。この場合、マージ処理を実行することにより、同一のデータを統合して、さらなるデータ容量の縮減を実現することが可能となる。
【００８３】
例えば、図９Ａに示すように、重複排除された論理ページが格納されている物理ページの組が２つあるとする。データ部を格納している２つの物理ページ６１Ａおよび６１Ｂには、同一のデータが格納されているとする。また、保証コードを格納している２つの物理ページ６２Ａおよび６２Ｂには、それぞれ、論理ページリストの保証コードが格納されている。これらの物理ページの２つの組について、データ部をさらに共通化して、４つの物理ページ６１Ａ、６１Ｂ、６２Ａ、６２Ｂを、３つの物理ページ６１Ｃ、６２Ｃ、６２Ｄにまとめることができる。
【００８４】
図９Ａに示すように、４つの物理ページを３つの物理ページにまとめる場合、保証コードが格納されている物理ページ６２Ａおよび６２Ｂはそのまま利用し物理ページ６２Ｃ、６２Ｄとし、データが格納されている物理ページ６１Ａおよび６１Ｂのうちいずれか一方を利用して６１Ｃとして、他方を無効ページとする。ただし、物理ページの空き領域４４２に論理／物理アドレス変換テーブル５６などの管理情報を格納している場合には、データ格納用として物理ページを新たに割り当てる必要がある。データ格納用として新たに物理ページを割り当てた場合には、データを格納している物理ページ６１Ａおよび６１Ｂはいずれも無効ページとする。
【００８５】
また、重複排除された論理ページが格納されている物理ページの組のうち、保証コード部が格納されている物理ページに空き領域がある場合には、保証コードもマージすることができる。例えば、図９Ｂに示すように、物理ページ６４Ａおよび物理ページ６４Ｂに格納されている保証コードがそれぞれ抽出されて、物理ページ６４Ｃにまとめてコピーされる。そして、物理ページ６４Ａおよび物理ページ６４Ｂは無効ページとなり廃棄される。また、データが格納されている物理ページ６３Ａおよび６３Ｂについては、同一のデータが格納されているため、図９Ａと同様に、物理ページ６３Ａおよび６３Ｂのうちいずれか一方を物理ページ６３Ｃとし、他方を無効ページとする。このように、データ部だけでなく、コード部も統合することにより、４つの物理ページを２つの物理ページにまとめることができる。
【００８６】
次に、マージ処理の処理手順について説明する。図１０に示すように、コントローラ２３１は、まず、マージの対象となる物理ページリストを取得する（Ｓ３１）。具体的に、コントローラ２３１は、物理ページリストのうち、有効なページであり、重複排除処理されたページであり、かつ、データ部の等しい物理ページの集合である物理ページリストを取得する。当該物理ページリストは、例えば、大サイズのデータをライトしたり、リクラメーション処理やリフレッシュ処理などを契機とした大サイズのデータを処理したりする場合に、物理ページのデータを検索して作成される。また、各物理ページのデータ部のハッシュ値を算出して管理し、ハッシュ値に基づいて、動的にデータ部の一致するページの組み合わせを検索して物理ページリストを作成してもよい。
【００８７】
そして、コントローラ２３１は、ステップＳ３１において取得したすべての物理ページリストに対して処理を実行したか否かを判定する（Ｓ３２０）。ステップＳ３２０において、すべての物理ページに対して処理を実行したと判定された場合には、コントローラ２３１は、ステップＳ３２１以降の処理を実行する。一方、ステップＳ３２０において、すべての物理ブロックに対して処理を実行していないと判定された場合には、コントローラ２３１は、ステップＳ３２以降の処理を実行する。
【００８８】
続いて、コントローラ２３１は、ステップＳ３１において取得した物理ページのうち、逆参照テーブル５７の参照カウント欄５７２の値が０より大きい物理ページが存在するか否かを判定する（Ｓ３２）。ステップＳ３２において、参照カウント欄５７２の値が０より大きい物理ページが存在すると判定された場合には、ステップＳ３３以降の処理を実行し、参照カウント欄５７２の値が０より大きい物理ページが存在しないと判定された場合には、ステップＳ３２１以降の処理を実行する。
【００８９】
続いて、コントローラ２３１は、対象となる物理ページのうち、参照カウント欄５７２の値が０以上の物理ページＸを１つ取得する（Ｓ３３）。以降、ステップＳ３３において取得した物理ページを物理ページＸとして以下説明する。そして、コントローラ２３１は、逆参照テーブル５７の物理ページＸに対応するエントリを取得する（Ｓ３４）。さらに、コントローラ２３１は、参照元論理ページアドレス欄５７３から、物理ページＸを参照している論理ページのアドレスを取得する（Ｓ３５）。以降、コントローラ２３１は、参照元論理ページアドレス欄５７３に登録されている参照元論理ページを調査する。
【００９０】
そして、コントローラ２３１は、ステップＳ３５において取得した論理ページが、対象としている物理ページＸを未だ参照しているか否かを調査する（Ｓ３６）。なお、重複排除処理時や、通常のライト処理時に実行される管理テーブルの更新処理（ステップＳ１８）において、逆参照テーブル５７の参照元論理ページアドレス欄５７３から物理ページを参照しなくなった論理ページのアドレスを削除している場合には、ステップＳ３６の処理は不要である。一方、逆参照テーブル５７がフラッシュメモリに格納されており、容易に更新出来ない場合に、ステップＳ３６において物理ページＸの参照の有無を確認する必要がある。
【００９１】
次に、コントローラ２３１は、物理ページＸを参照している論理ページを、マージ対象のリストに追加する（Ｓ３７）。そして、コントローラ２３１は、物理ページＸを参照している可能性のあるすべての論理ページについて、参照の有無を確認する（Ｓ３８）。ステップＳ３８において、物理ページＸの参照の有無を確認していない論理ページがある場合には、コントローラ２３１は、ステップＳ３６以降の処理を繰り返す。一方、ステップＳ３８において、すべての論理ページについて物理ページＸの参照の有無を確認したと判定された場合には、ステップＳ３２０の処理に戻る。
【００９２】
そして、コントローラ２３１は、ステップＳ３７において作成されたマージ対象リストに含まれる論理ページに格納されている保証コードを格納するための物理ページを取得する（Ｓ３２１）。具体的に、コントローラ２３１は、対象となる論理ページ数に応じた個数の物理ページを取得する。
【００９３】
そして、コントローラ２３１は、マージ対象となる論理ページの保証コードをマージして、ステップＳ３２１において取得した物理ページに当該保証コードを書き込む。
【００９４】
そして、コントローラ２３１は、管理テーブルである論理／物理アドレス変換テーブル５６と逆参照テーブル５７を更新する（Ｓ３２３）。具体的に、コントローラ２３１は、論理／物理アドレス変換テーブル５６については、マージ対象となった論理ページに該当するエントリについて、物理ページデータアドレス欄５６２に格納されている値を、データ格納先の物理ページアドレスの値に更新し、物理ページコードアドレス欄５６３の値を保証コード格納先の物理ページアドレスの値に更新する。また、コントローラ２３１は、保証コードの格納先となる物理ページ内の各保証コードの位置を物理ページコードオフセットアドレス欄５６４に格納する。
【００９５】
また、逆参照テーブル５７については、コントローラ２３１は、重複対象となった論理ページ対応付けられていた物理ページに該当するエントリについて更新を行う。すなわち、論理ページの対応先となるアドレスの更新により、参照されなくなった物理ページに対して、参照カウンタ欄５７２の値をデクリメントして、論理ページアドレスリスト欄５７３から参照されなくなった論理ページのアドレスを削除する。
【００９６】
なお、論理／物理アドレス変換テーブル５６の更新は、重複排除処理を行わない通常の書き込み（ライト）処理においても行う必要がある。すなわち、論理ページのアドレスと、新しい書き込み先となる物理ページのアドレスとを対応付けたり、元の格納先の物理ページのエントリから参照していた論理ページのアドレスを削除したりする。
【００９７】
（１−３−４）リード処理
次に、リード処理の処理手順について説明する。図１１に示すように、コントローラ２３１は、リード対象となる論理ページアドレスを取得する（Ｓ４１）。具体的に、コントローラ２３１は、ホスト１２からのリードコマンドや、リクラメーション処理やリフレッシュ処理などの内部制御のコピー時にリード対象となる論理ページアドレスを取得する。
【００９８】
次に、コントローラ２３１は、論理／物理アドレス変換テーブル５６から、対象となる論理／物理アドレス情報を取得する（Ｓ４２）。続いて、コントローラ２３１は、ステップＳ４１において取得した論理ページが重複排除処理されたページかを判定する（Ｓ４３）。具体的に、コントローラ２３１は、論理／物理アドレス変換テーブル５６の物理ページデータアドレス欄５６２に格納されているアドレスと、物理ページコードアドレス欄５６３に格納されているアドレスとが同一のアドレスである場合に、重複排除されていない論理ページであると判定してもよい。
【００９９】
ステップＳ４３において、論理ページが重複排除されたページであると判定された場合には、コントローラ２３１は、ステップＳ４４以降の処理を実行する。一方、ステップＳ４３において、論理ページが重複排除されていないページであると判定された場合には、コントローラ２３１は、ステップＳ４７の処理を実行する。
【０１００】
そして、コントローラ２３１は、論理ページが重複排除されたページであると判定された場合には、論理ページのデータ部を格納している物理ページデータアドレスを取得する（Ｓ４４）。続いて、コントローラ２３１は、論理ページの保証コードを格納している物理ページコードアドレスを取得する（Ｓ４５）。さらに、コントローラ２３１は、論理ページの保証コードの物理位置を示す物理ページコードオフセットアドレスを取得する（Ｓ４６）。
【０１０１】
また、ステップＳ４３において、論理ページが重複排除されていない通常のページであると判定された場合には、コントローラ２３１は、論理ページに対応する物理ページのアドレスを取得する（Ｓ４７）。具体的に、コントローラ２３１は、論理／物理アドレス変換テーブル５６の物理ページデータアドレス欄５６２に格納されている物理ページデータアドレスを取得する。
【０１０２】
そして、コントローラ２３１は、リード対象となる論理ページに対応付けられた物理ページアドレスをもとに、物理ページに格納されているデータをリードする（Ｓ４８）。
【０１０３】
（１−４）本実施の形態の効果
以上のように、本実施の形態による計算機システム１では、フラッシュメモリチップに書き込まれる複数のデータのうち、ユーザデータを含むデータ部が共通する複数のデータについて、データと保証コードとを分けて、１つのデータを物理ページに格納し、複数のデータに対応する保証コードを連結して物理ページに格納する。これにより、保証コードが付与されたデータに対しても重複排除を行って、記憶媒体への書き込み量を縮減することによりフラッシュメモリの長寿命化を図ることができる。さらに、追記型の書き込み方法を採用するフラッシュメモリなどの記憶媒体において、ユーザが使用していない未使用領域を増加させて、未使用領域をデータの追記用の領域とすることにより、性能安定性の向上を図ることが可能となる。
【０１０４】
（２）第２の実施の形態
（２−１）計算機システムのハードウェア構成
本実施の形態にかかる計算機システム２のハードウェア構成は、第１の実施の形態にかかる計算機システム１のハードウェア構成と同様であるため、詳細な説明は省略する。本実施の形態は、複数の論理ページの重複排除を実行する点で第１の実施の形態と共通するが、さらに、重複排除対象のデータ部を圧縮する点で第１の実施形態と異なっている。なお、本実施の形態においても、重複排除対象の論理ページの探索方法は、例えば、大サイズのデータをライトする場合や、リクラメーション処理やリフレッシュ処理などのデータ再配置時に、大サイズのデータの中から重複排除の対象となる論理ページの組み合わせを検索する。また、各ページのデータ部のハッシュ値を算出して管理し、ハッシュ値に基づいて、動的にデータ部の一致するページの組み合わせを検索するようにしてもよい。なお、本実施形態では、説明を容易にするために、一定間隔で区切られており、アドレスの連続している論理ページを対象として以下説明する。
【０１０５】
（２−２）ストレージ装置の内部構成について
本実施の形態にかかるストレージ装置１１の内部構成については、第１の実施の形態と同様の構成についての詳細な説明は省略し、第１の実施の形態と異なる構成について特に詳細に説明する。まず、本実施の形態における重複排除の概要について、第１の実施の形態と異なる点について説明する。
【０１０６】
図１２に示すように、第１の実施形態では同一の内容のデータが格納されているデータ部４１１Ａ、４１１Ｂ、４１１Ｃを含むページ群４３を、データ部４４１を含むページ４４とコード部４５１を含むページ４５の２つのページに格納している。本実施形態では、さらに、ページ４４のデータ「Ｄａｔａ
０〜Ｄａｔａ ｎ−１」を圧縮して、圧縮データ（Ｃｏｍｐ Ｄａｔａ）７２に変換する。
【０１０７】
ここで、圧縮データは、例えば、フォーマットデータから構成される。上記したように、フォーマットデータは、記憶デバイスを使用する際に、記憶デバイスの異常個所を検知したり保証コードを事前に書き込みしたりすることを目的として、記憶デバイスの全領域に特定パタンのデータが書き込まれる。しかし、フラッシュメモリをはじめとする書き換えが制限されている記憶デバイスにおいては、このフォーマットデータの書き込みにより不必要に書き換え回数を増加させてしまうという問題があった。
【０１０８】
そこで、本実施形態では、フォーマットデータについては、通常、「０」などの実体を伴わないデータが書き込まれるため、データ部４１１Ａ、４１１Ｂおよび４１１Ｃに「０」が書き込まれているページ群４３をページ４４および４５とする重複排除を実行する。さらに、「０」などのフォーマットデータが書き込まれるデータ部を圧縮して、ページ７１に集約する。
【０１０９】
また、図１２に示すように、圧縮データ７２が格納されたページ７１の空き領域に保証コード「Ｃ
０〜Ｃ ｎ−１」を格納する。これにより、ページ４４およびページ４５の２つのページがページ７１の１つのページに集約される。なお、ページ７１のすべてを圧縮データ７２と保証コード７３を格納するために使用してもよいし、空き領域（ｒｅｓｅｒｖｅ）に管理テーブル等の管理情報を格納してもよい。
【０１１０】
次に、本実施形態における重複排除の具体例について説明する。図１２Ａに、論理ページアドレスと物理ページアドレスとの対応関係を示す。図１２Ａに示すように、ＡＤＤｒ８１は、論理ページアドレスを示し、Ｄａｔａ８２は、論理ページアドレス空間に格納されているデータを示す。また、Ｃｏｄｅ８３は、論理ページアドレス空間に格納されている保証コードを示す。そして、Ａｄｄｒ８４は、論理ページに対応付けられている物理ページアドレスを示し、Ｄａｔａ８５は、物理ページアドレス空間に格納されているデータの内容を示す。
【０１１１】
論理ページアドレス０〜２で示される論理ページ８１１〜８１３に格納されているデータ８２には、同一の内容のデータ「ＡＡＡＡ」が格納されている。この場合、論理ページ８１１〜８１３の各論理ページアドレス０〜２は、物理ページ８４１の物理ページアドレス０に対応付けられる。物理ページ８４１には、データ「ＡＡＡＡ」が圧縮されたデータ「Ａ」と、参照元となる論理ページ８１１〜８１３に対応する保証コードＣ０〜Ｃ２が格納されている。一方、重複排除されていない論理ページ８１４は、物理ページ８４２が対応付けられ、物理ページ８４２には、通常通り、データと保証コードが格納される。
【０１１２】
次に、上記した論理ページと物理ページとの対応付けを実現するための管理テーブルについて説明する。論理／物理アドレス変換テーブル８６は、論理アドレスと物理アドレスとの対応付けを管理するテーブルであって、図１３Ｂに示すように、論理ページアドレス欄８６１、物理ページアドレス欄８６２およびフラグ欄８６３から構成される。
【０１１３】
論理ページアドレス欄８６１には、論理ページの先頭アドレスが格納される。物理ページアドレス欄８６２には、論理ページアドレス欄８６１に対応付けられた物理ページの先頭アドレスが格納される。フラグ欄８６３には、対応する論理ページが重複排除されているかを判定するためのフラグが格納される。
【０１１４】
例えば、フラグ欄８６３に「１」が格納されている場合、対応する論理ページは重複排除されたページであると判定され、圧縮されたデータが解凍されたり、物理ページ内の保証コードの位置が計算されたりする。物理ページ内の保証コードの位置は、例えば、参照元となる論理ページアドレスからのオフセット位置から算出される。フラグ欄８６３に対応する論理ページアドレスが圧縮されたか否かを判定するフラグを設定することにより、保証コードが格納されている物理ページの実際の位置を保持する必要がなくなる。
【０１１５】
さらに、物理ページに格納するデータ量を減らすために、論理ページ単位ではなく、任意の複数の論理ページ単位で重複排除されたか否かを判定するフラグを設定するようにしてもよい。例えば、重複対象となる論理ページ群のアドレスの並びが連続であり、データを圧縮後には、データが一定のサイズに収まることが保証されているデータであって、例えば、フォーマットデータである場合に、重複排除された物理ページ内の論理ページ数は事前に固定的に決定されるとする。この場合、複数の論理ページ単位に重複排除されたか否かを判定するフラグを設定することにより、論理／物理アドレス変換テーブル８６のテーブルサイズを軽減することができる。ただし、この場合、任意の範囲の論理ページごとに重複排除のためのフラグが設定されるため、特定の範囲内の論理ページのうち、１つの論理ページ以外の論理ページが重複排除されている場合には、重複排除されていない論理ページ用に別途の情報が必要となる。
【０１１６】
また、逆参照テーブル８７は、物理ページがいずれの論理ページに参照されているかを管理するテーブルであって、図１３Ｃに示すように、物理ページアドレス欄８７１、参照カウント欄８７２および論理ページ代表アドレス欄８７３から構成される。
【０１１７】
物理ページアドレス欄８７１には、データおよび保証コードが格納されている物理ページの先頭アドレスが格納される。参照カウント欄８７２には、物理ページに格納されているデータを参照している論理ページの数が格納される。論理ページ代表アドレス欄８７２には、参照元の論理ページの代表アドレスが格納される。論理ページの代表アドレスは、重複排除された複数の論理ページの先頭の論理ページのアドレスである。すなわち、当該物理ページをポイントしている任意の論理ページの保証コードの位置を、論理ページの代表アドレスからのオフセットから求めることができる。
【０１１８】
また、逆参照テーブル８７において、各物理ページに対応する情報を格納するのではなく、任意の数の物理ページ単位に対応する情報を格納することにより、逆参照テーブル８７に格納する情報量を減らすようにしてもよい。例えば、消去単位となる物理ブロックの単位で、参照カウント数をまとめて管理してもよい。この場合、消去単位の参照カウント数と、参照元の論理ページの代表アドレスをもとに論理アドレスと物理アドレスの変換を行って、参照元の論理ページを確認することにより、物理ページ単位毎の参照カウント数を復元することができる。
【０１１９】
（２−３）ストレージ装置の動作の詳細
（２−３−１）重複排除処理
次に、本実施形態にかかるストレージ装置１１における重複排除処理について説明する。以下では、第１実施の形態と異なる処理について特に説明し、第１の実施の形態と同様の構成については説明を省略する。図１４に示すように、まず、コントローラ２１３は、重複排除の対象となる論理ページリストを取得する（Ｓ５１）。論理ページリストは、ページ内のユーザデータが格納されているデータ部の内容が同一で、保証コードが格納されているコード部の内容が異なる少なくとも３つ以上のページから構成される。
【０１２０】
次に、コントローラ２１３は、ステップＳ５１において取得した論理ページリストに含まれる複数の論理ページのデータ部の圧縮後のデータサイズが所定の閾値ＴＨより小さいか否かを判定する（Ｓ５２）。ステップＳ５２において、圧縮後のデータサイズが所定の閾値ＴＨ以上の場合には、コントローラ２１３は、重複排除処理を行わず、通常のライト処理を実行する（Ｓ５８）。ステップＳ５２において圧縮後のデータサイズが所定の閾値ＴＨより小さいと判定された場合には、ステップＳ５３以降の重複排除処理を実行する。
【０１２１】
ここで、閾値ＴＨは、予め管理プログラム等に設定されており、データサイズが閾値ＴＨより小さい場合に、重複排除の対象となる論理ページの圧縮後のデータ部のサイズとコード部のサイズとを合計した値が１つの物理ページのサイズに収まるように設定された値である。
【０１２２】
そして、ステップＳ５２において、圧縮後のデータサイズがＴＨより小さいと判定された場合には、コントローラ２３１は、ステップＳ５１において取得した論理ページのデータ部を格納する物理ページを取得する（Ｓ５３）。
【０１２３】
そして、コントローラ２３１は、重複排除対象となる論理ページのデータ部を圧縮する（Ｓ５４）。そして、コントローラ２３１は、重複排除対象となる各論理ページのコード部を抽出して連結する（Ｓ５５）。そして、ステップＳ５４において圧縮したデータ部と、ステップＳ５５において連結したコード部とを連結して、ステップＳ５３において取得した物理ページに書き込む（Ｓ５６）。
【０１２４】
続いて、コントローラ２３１は、管理テーブルである論理／物理アドレス変換テーブル５６と逆参照テーブル５７を更新する（Ｓ５７）。具体的に、コントローラ２３１は、論理／物理アドレス変換テーブル８６については、重複排除の対象となった論理ページに該当するエントリについて、物理ページアドレス欄８６２の値をデータ格納先の物理ページアドレスの値に更新し、重複排除フラグ欄８６３に「１」を格納する。
【０１２５】
また、逆参照テーブル８７については、コントローラ２３１は、重複対象となった論理ページに対応付けられている物理ページに該当するエントリについて更新を行う。すなわち、逆参照テーブル８７の参照カウント欄８７２に「１」を格納し、さらに、論理ページ代表アドレス８７３に対象となる論理ページの代表アドレスを格納する。
【０１２６】
（２−３−２）リクラメーション処理、リフレッシュ処理
本実施の形態にかかるリクラメーション処理およびリフレッシュ処理は、第１の実施の形態にかかるリクラメーション処理およびリフレッシュ処理とほぼ同様のため、異なる点について詳細に説明する。本実施の形態では、図１５に示すように、コントローラ２３１は、ステップＳ６３において処理の対象となる物理ページＸを取得した後、物理ページＸを参照している論理ページの代表アドレスを取得する（Ｓ６４）点で第１の実施の形態と異なっている。
【０１２７】
そして、ステップＳ６４において取得した論理ページの代表アドレスを開始点として、物理ページＸを参照している可能性のある論理ページの現在の参照先を調べるために、論理ページの代表アドレスの次の論理ページの論理／物理アドレス変換テーブル８６のエントリを取得する（Ｓ６５）。そして、ステップＳ６５において取得した論理ページが、物理ページＸを未だ参照しているか否かを調査して（Ｓ６６）、物理ページＸを参照している場合には当該論理ページをコピー対象リストに追加する（Ｓ６７）。
【０１２８】
（２−３−３）リード処理
本実施の形態にかかるリード処理についても、第１の実施の形態にかかるリード処理と異なる点について特に詳細に説明する。図１６に示すように、コントローラ２３１は、リード対象となる論理ページアドレスを取得する（Ｓ７１）。
【０１２９】
次に、コントローラ２３１は、論理／物理アドレス変換テーブル８６から、対象となる論理／物理アドレス情報を取得する（Ｓ７２）。続いて、コントローラ２３１は、ステップＳ４１において取得した論理ページが重複排除処理されたページかを判定する（Ｓ７３）。
【０１３０】
そして、ステップＳ７３において、論理ページが重複排除されたページであると判定された場合には、コントローラ２３１は、ステップＳ７４以降の処理を実行する。一方。ステップＳ７３において、論理ページが重複排除されていないページであると判定された場合には、コントローラ２３１は、ステップＳ７３１の処理を実行する。
【０１３１】
そして、コントローラ２３１は、論理ページが重複排除されたページであると判定された場合には、論理ページのデータ部を格納している物理ページデータアドレスを取得する（Ｓ７４）。続いて、コントローラ２３１は、参照元の論理ページ代表アドレスから、物理ページ内の保証コードのオフセット位置を計算する（Ｓ７５）。そして、コントローラ２３１は、リード対象となる論理ページに対応付けられた物理ページアドレスに格納されたデータをリードする（Ｓ７６）。さらに、コントローラ２３１は、ステップＳ７６において取得したデータを解凍する（Ｓ７７）。
【０１３２】
一方、ステップＳ７３において、論理ページが重複排除されていないページであると判定された場合には、コントローラ２３１は、論理ページに対応するデータ部及び保証コード部を格納している物理ページアドレスを取得する（Ｓ７３１）。そして、コントローラ２３１は、ステップＳ７３１で取得した物理ページアドレスに格納されている物理ページをリードする（Ｓ７３２）。
【０１３３】
また、ステップＳ７３において、論理ページが重複排除されていない通常のページであると判定された場合には、コントローラ２３１は、論理ページに対応する物理ページのアドレスを取得する（Ｓ７３１）。具体的に、コントローラ２３１は、論理／物理アドレス変換テーブル５６の物理ページデータアドレス欄５６２に格納されている物理ページデータアドレスを取得する。
【０１３４】
そして、コントローラ２３１は、リード対象となる論理ページに対応付けられた物理ページアドレスをもとに、物理ページに格納されているデータをリードする（Ｓ７３２）。
【０１３５】
（２−４）本実施の形態の効果
以上のように、本実施の形態による計算機システム２では、重複排除処理に加え、さらに、重複排除対象となるデータ部を圧縮する。これにより、保証コードが付与されたデータに対しても重複排除を行って、さらに、データ部を圧縮して、記憶媒体への書き込み量を縮減することによりフラッシュメモリの長寿命化を図ることができる。さらに、追記型の書き込み方法を採用するフラッシュメモリなどの記憶媒体において、ユーザが使用していない未使用領域を増加させて、未使用領域をデータの追記用の領域とすることにより、性能安定性の向上を図ることが可能となる。
【０１３６】
（３）第３の実施の形態
（３−１）計算機システムのハードウェア構成
本実施の形態にかかる計算機システム３のハードウェア構成は、第１の実施の形態にかかる計算機システム１のフラッシュメモリストレージ１７が、ストレージ装置１１とは別体の装置として構成されている点で異なっている。本実施の形態は、複数の論理ページの重複排除を実行する点で第１の実施の形態と共通するが、ストレージ装置１１とフラッシュメモリストレージ１７とが連携して重複排除を実行する点で異なっている。具体的に、ストレージ装置１１が、ホスト１２からの要求に応じて記憶領域に書き込むフォーマットデータ等について、フラッシュメモリストレージ１７に実際にデータを送信するのではなく、特定のパタンを送信することによりデータ転送量を削減している。
【０１３７】
（３−２）計算機システムの動作の詳細
次に、ストレージ装置１１とフラッシュメモリストレージ１７との間で実行される重複排除処理について説明する。
【０１３８】
図１７に示すように、まず、ストレージ装置１１は、ホスト１２からの要求に応じて、記憶領域のフォーマットを開始する（Ｓ８１）。ストレージ装置１１は、対象となる全記憶領域に対して、それぞれのセクタ毎に特定パタンを書き込むことにより記憶領域のフォーマットを行う。また、ストレージ装置１１は、特定パタンを書き込む際に、保証コードも付与する。
【０１３９】
そして、ストレージ装置１１は、ホスト１２からの要求に応じて生成したフォーマットパタンと、フォーマットデータに付与する保証コードの生成ルールをパタン情報としてコントローラ２１３に通知する（Ｓ８２）。ここで、パタン情報は、例えば、オール０などの固定的なパタンであり、保証コードは、例えば、データ部から生成されるエラー訂正符号に加えて、論理アドレス情報が付与された形式のコードなどである。すなわち、ストレージ装置１１は、実際にフォーマット情報を記憶領域に書き込むのではなく、フォーマットパタンや保証コードの生成ルールを含むパタン情報を通知する。これにより、データ転送量を削減することができる。
【０１４０】
そして、フラッシュメモリストレージ１７は、ステップＳ８２においてストレージ装置１１から送信されたパタン情報を受領する（Ｓ８３）。そして、フラッシュメモリストレージ１７は、ストレージ装置１１から送信されたパタン情報を元に、フォーマットの対象とされている記憶領域に対応する各論理ページの保証コードを生成する（Ｓ８４）。続いて、フラッシュメモリストレージ１７は、パタン情報を元に、フォーマットパタンを生成する（８５Ｓ）。
【０１４１】
そして、フラッシュメモリストレージ１７は、ステップＳ８５において生成された論理ページに対して、重複排除処理を実行する（Ｓ８６）。ステップＳ８６における重複排除処理は、第１の実施の形態と同様の処理であるため、詳細な説明は省略する。
【０１４２】
そして、フラッシュメモリストレージ１７は、重複排除された論理テーブルについて、論理／物理アドレス変換管理テーブル５６の対象となるエントリを更新する（Ｓ８７）。ステップＳ８７における論理／物理アドレス変換管理テーブル５６の更新処理は、第１の実施の形態と同様の処理であるため、詳細な説明は省略する。
【０１４３】
そして、フラッシュメモリストレージ１７は、ストレージ装置１１にフォーマット処理が終了した旨を通知する（Ｓ８８）。そして、ストレージ装置１１は、フラッシュメモリストレージ１７からフォーマット処理が終了した旨の通知を受領して、フォーマット処理が終了したことをホスト１２に通知する。
【０１４４】
（３−３）本実施の形態の効果
本実施形態にかかる計算機システム３によれば、特定のパタン情報に基づいて、記憶領域にデータおよび保証コードを書き込む。これにより、データ書き込みにおけるデータ転送量を削減することができる。さらに、保証コードが付与されたデータに対しても重複排除を行って、記憶媒体への書き込み量を縮減することによりフラッシュメモリの長寿命化を図ることができる。さらに、追記型の書き込み方法を採用するフラッシュメモリなどの記憶媒体において、ユーザが使用していない未使用領域を増加させて、未使用領域をデータの追記用の領域とすることにより、性能安定性の向上を図ることが可能となる。
【０１４５】
（４）他の実施の形態
なお、上述の実施の形態においては、フラッシュ制御装置２１０に格納されている各種プログラムに基づいて、重複排除処理等を実行しているが、かかる例に限定されず、例えば、フラッシュ制御装置２１０をストレージ装置１１とは別体の装置に設けて、当該フラッシュ制御装置２１０と協同して各種機能を実現するようにしてもよい。また、フラッシュ制御装置２１０に格納されている各種プログラムをストレージ装置１１とは別体の他の装置に設けて、当該プログラムがフラッシュ制御装置２１０に呼び出されることにより各種機能を実現するようにしてもよい。
【産業上の利用可能性】
【０１４６】
本発明は、データ毎に異なるコードが付与されたデータを重複排除して、データ容量効率を向上させることが可能なストレージ装置に適用することができる。
【符号の説明】
【０１４７】
１１    ストレージ装置
１１２  ホストインタフェース
１１３  ストレージインタフェース
１１４  保守インタフェース
１１５  ＣＰＵ
１１６  メモリ
１２    ホスト
１３    管理端末
１４    ＳＡＮ
１６    コネクタ
１７    フラッシュメモリストレージ装置
２１    フラッシュメモリモジュール
２１０  フラッシュ制御装置
２１１  ストレージインタフェース
２１２  ＣＰＵ
２１３  コントローラ
２１３  メモリ
２１５  バッファ
２１６  フラッシュメモリインタフェース
３１    フラッシュメモリチップ
【図１】
0005603997.tif 000002
【図２】
0005603997.tif 000003
【図３】
0005603997.tif 000004
【図４Ａ】
0005603997.tif 000005
【図４Ｂ】
0005603997.tif 000006
【図５】
0005603997.tif 000007
【図６Ａ】
0005603997.tif 000008
【図６Ｂ】
0005603997.tif 000009
【図６Ｃ】
0005603997.tif 000010
【図７】
0005603997.tif 000011
【図８】
0005603997.tif 000012
【図９Ａ】
0005603997.tif 000013
【図９Ｂ】
0005603997.tif 000014
【図１０】
0005603997.tif 000015
【図１１】
0005603997.tif 000016
【図１２】
0005603997.tif 000017
【図１３Ａ】
0005603997.tif 000018
【図１３Ｂ】
0005603997.tif 000019
【図１３Ｃ】
0005603997.tif 000020
【図１４】
0005603997.tif 000021
【図１５】
0005603997.tif 000022
【図１６】
0005603997.tif 000023
【図１７】
0005603997.tif 000024