(57)【特許請求の範囲】
【請求項１】
第１の記憶装置と第２の記憶装置にアクセス可能な制御装置に、
所定のデータ長で第１データが分割された分割データであって、前記第１データにおける配列順序を特定する番号情報がそれぞれに付与された複数の分割データを生成し、
生成した前記複数の分割データを記憶可能な空き領域が、前記第１の記憶装置と前記第２の記憶装置のいずれかのみでは確保できない場合、前記複数の分割データのうちの一部の分割データを前記第１の記憶装置に記憶させるとともに、前記一部のデータ以外の他の分割データを前記第２の記憶装置に記憶させ、
前記第１の記憶装置と前記第２の記憶装置のいずれかに、前記複数の分割データを連続して記憶可能な空き領域ができた場合に、記憶された前記一部の分割データと前記他の分割データとを前記番号情報で示される順に前記連続して記憶可能な空き領域に記憶させる、
ことを実行させるためのプログラム。
【請求項２】
前記プログラムはさらに、
前記制御装置に、
前記複数の分割データを記憶可能な空き領域が前記第１の記憶装置、又は前記第２の記憶装置にあるかを判定し、
判定により前記第１の記憶装置と前記第２の記憶装置の少なくともいずれかに空き領域があると判定された場合、前記複数の分割データを前記第１の記憶装置と前記第２の記憶装置の内の、空き領域があると判定された記憶装置に記憶させる、
ことを実行させるための請求項１記載のプログラム。
【請求項３】
前記番号情報は、前記複数の分割データのそれぞれにおける冗長記憶領域に記録されている、
ことを特徴とする請求項１又は２に記載のプログラム。
【請求項４】
前記複数の分割データのそれぞれは、前記第１データを識別する識別情報が付与され、
前記記憶部から前記識別情報が同一の前記複数の分割データが前記記憶部から読み出される、
ことを特徴とする請求項１乃至３のいずれか１項に記載のプログラム。
【請求項５】
第１の記憶装置と第２の記憶装置にアクセス可能な制御装置が、
第１データを所定のデータ長で複数の分割データに分割し、
前記複数の分割データそれぞれに、前記第１データにおける配列順序を特定する番号情報を付与し、
前記番号情報が付与された前記複数の分割データを記憶可能な空き領域が、前記第１の記憶装置と前記第２の記憶装置のいずれかのみでは確保できない場合、前記複数の分割データのうちの一部の分割データを前記第１の記憶装置に記憶させるとともに、前記一部のデータ以外の他の分割データを前記第２の記憶装置に記憶させ、
前記第１の記憶装置と前記第２の記憶装置のいずれかに、前記複数の分割データを連続して記憶可能な空き領域ができた場合に、記憶された前記一部の前記分割データと前記他の分割データとを前記番号情報で示される順に前記連続して記憶可能な空き領域に記憶させる、
ことを特徴とする制御方法。
【請求項６】
第１の記憶装置と第２の記憶装置にアクセス可能な制御装置であって、
受信したデータを所定のデータ長で複数の分割データに分割する分割部と、
前記複数の分割データそれぞれに、前記受信したデータを識別する識別情報と、前記複数の分割データの、前記受信したデータにおける前記複数の分割データの配列順序を特定する番号情報とを付与する付与部と、
前記識別情報および前記番号情報が付与された前記複数の分割データを記憶可能な空き領域が、前記第１の記憶装置と前記第２の記憶装置のいずれかのみでは確保できない場合、前記複数の分割データのうちの一部の分割データを前記第１の記憶装置に記憶させるとともに、前記一部のデータ以外の他の分割データを前記第２の記憶装置に記憶させる制御部と、
を備えたことを特徴とする制御装置。
【請求項７】
第１の記憶装置と、第２の記憶装置と、前記第１の記憶装置と前記第２の記憶装置とを制御する制御装置とを備えたシステムにおいて、
前記制御装置は、
受信したデータを所定のデータ長で複数の分割データに分割する分割部と、
前記複数の分割データそれぞれに、前記受信したデータを識別する識別情報と、前記複数の分割データの、前記受信したデータにおける前記複数の分割データの配列順序を特定する番号情報とを付与する付与部と、
前記識別情報および前記番号情報が付与された前記複数の分割データを記憶可能な空き領域が、前記第１の記憶装置と前記第２の記憶装置のいずれかのみでは確保できない場合、前記複数の分割データのうちの一部の分割データを前記第１の記憶装置に送信するとともに、前記一部のデータ以外の他の分割データを前記第２の記憶装置に送信する送信部と、を備え、
前記第１の記憶装置と前記第２の記憶装置のそれぞれは、
記憶部と、
前記送信部により送信された分割データを、前記記憶部におけるデータを記憶可能な空き領域に記憶する第１の記憶制御部と、
自装置に前記複数の分割データを連続して記憶可能な空き領域ができた場合に、前記第１の記憶装置に記憶された前記一部の分割データと前記第２の記憶装置に記憶された前記他の分割データを取得して、前記識別情報が同一の前記複数の分割データを前記番号情報で示される順に前記連続して記憶可能な空き領域に記憶する第２の記憶制御部と、
を備えたことを特徴とするシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム、制御方法、記憶装置およびシステムに関する。
【背景技術】
【０００２】
サーバ装置などのホストが、記憶装置にデータを書き込むとき、ホストは複数のコマンドを記憶装置（あるいは記憶装置を制御する制御装置）に送信する。
【０００３】
それぞれのコマンドは、コマンドに基づいたデータが記憶される、記憶装置が有する記憶領域における位置を、先頭アドレスと、先頭アドレスからのデータ長で指定する。
【０００４】
１つのコマンドに基づいて記憶領域に書き込まれるデータは、データ長が指定されており、指定されたデータ長のデータは、記憶装置の連続した記憶領域に書き込まれる必要がある。これは、データの読み出しの際に、そのデータが先頭アドレスと、先頭アドレスからのデータ長で指定されるため、１つのコマンドで指定されたデータが連続して記憶されていないと、データの読み出しができなくなってしまうためである。
【０００５】
図１７は、従来例を示す。図１７は、例として、記憶装置の記憶領域における１ブロックを２５６キロバイト（ＫＢ）と設定している。また、図１７は、８０キロバイト（ＫＢ）のデータＢが１つのブロック上にすでに記録されていることを示している。
【０００６】
図１７に示す状態において、１４４キロバイト（ＫＢ）のデータ長をもつデータＡをこのブロックに書き込むコマンドが発行されたとする。この図１７の状態においてはデータを、このブロックに記憶することはできない。これは、このブロック上において連続した空き領域は最大８０キロバイトであり、このブロックは、１４４キロバイトのデータＡを記憶可能な連続した記憶領域を備えていないためである。
【０００７】
記憶装置の一種としてＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）装置が知られている。
【０００８】
ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）装置は、上記のような状態の場合、ガベージコレクションを行って、データＡを連続して記憶可能な空き領域をブロックに確保する。
【０００９】
ガベージコレクションにおいて、例えば図１７のような場合、ＳＳＤ装置は、まず、既に記憶されているデータＢを、他のブロックの空き領域に複製する。データＢを他の空きブロックへ複製した後、ＳＳＤ装置はブロックに記憶されていたデータＢを消去する。尚、ＳＳＤ装置の仕様により、データの消去はブロック単位で消去することが決められている。そのため、ＳＳＤ装置は、データＢを含めブロック全体のデータを消去する。このようにして、ＳＳＤ装置は、データＡを記憶可能な連続した記憶領域を確保する。ガベージコレクションは、ＳＳＤ装置が自装置の稼働中にバックグラウンドで実行する処理である。ガベージコレクションの具体的手法については、いくつかの従来技術が存在する。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開平１１−１２６４８８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
例えば、ＳＳＤ装置は、前述データ記憶領域である不揮発性メモリ（例えばフラッシュメモリ）と、揮発性メモリであるキャッシュメモリを備える。ガベージコレクションによる空き領域の確保が追いつかない場合、ＳＳＤ装置は、コマンドで指定されたデータをキャッシュメモリに一時的に保持しておく。そして、ガベージコレクションによって連続して記憶可能な空き領域が確保できたところで、ＳＳＤ装置はキャッシュメモリに保持したデータを、確保した空き領域に記憶する処理を実行する。
【００１２】
しかしながら、このような場合、受信したデータがデータ記憶領域に記憶される前にキャッシュメモリに保持されるため、データを受信してからＳＳＤ装置のデータ記憶領域にデータの書き込みが完了するまでの所要時間が増加するという課題が発生する。
【００１３】
また、保持するデータの容量が増加し、キャッシュメモリの空き領域が少なくなると、ＳＳＤ装置は、新たに受信したデータをキャッシュメモリに保持できないためにデータの書き込みができなくなってしまう恐れもある。このような場合は、例えば、データを送信したホストに対して、データの書き込みが不可能である旨のエラーが出力され、そのホストはデータをＳＳＤ装置に書き込むことはできない。
【００１４】
本発明の一側面としては、上記の課題を解決し、データを連続して記憶可能な空き領域が確保できていない場合に、データが記憶装置に記憶されるまでに要する時間を削減することを目的とする。
【課題を解決するための手段】
【００１５】
１つの案では、第１の記憶装置と第２の記憶装置にアクセス可能な制御装置に、所定のデータ長で第１データが分割された分割データであって、第１データにおける配列順序を特定する番号情報がそれぞれに付与された複数の分割データを生成し、生成した複数の分割データを記憶可能な空き領域が、第１の記憶装置と第２の記憶装置のいずれかのみでは確保できない場合、複数の分割データのうちの一部の分割データを第１の記憶装置に記憶させるとともに、一部のデータ以外の他の分割データを第２の記憶装置に記憶させ、第１の記憶装置と第２の記憶装置のいずれかに、複数の分割データを連続して記憶可能な空き領域ができた場合に、記憶された一部の分割データとを番号情報で示される順に連続して記憶可能な空き領域に記憶させることを実行させる。
【発明の効果】
【００１６】
本発明の一側面としては、データを連続して記憶可能な空き領域が確保できていない場合に、データが記憶装置に記憶されるまでに要する時間を削減することが可能である。
【図面の簡単な説明】
【００１７】
【図１】本実施例のシステムを示す。
【図２】制御装置１０１の機能ブロック図を示す。
【図３】ＳＳＤ装置１１０の機能ブロック図を示す。
【図４】ホスト１２０からデータを受信した制御装置１０１が実行する処理の手順を示すフローチャートを示す。
【図５】ホスト側送受信部２０１が受信するデータのデータ構造の一例を示す
【図６】データ記憶部３０５が有するブロックの態様を説明する図を示す。
【図７】ＳＳＤ装置１１０が、制御装置１０１からの命令に基づいてデータを記憶する手順を示すフローチャートを示す。
【図８】ブロック８００の態様を示す。
【図９】図７に示す処理の具体例を説明する図である
【図１０】ブロック９００に、データ９１０、９１２が記憶された態様を示す。
【図１１】ブロック９００に、データ９１０〜９１２が記憶された態様を示す。
【図１２】ビットマップの一例を示す。
【図１３】マイグレーション処理の手順を示すフローチャートを示す。
【図１４】ステップＳ１３０５のマイグレーション処理の詳細な手順を示すフローチャートを示す。
【図１５】ブロック９００に記憶されていたデータ９１０〜９１２に対してマイグレーションが実行された後の態様を示す。
【図１６】第１の変形例を示す。
【図１７】従来例を説明する図を示す。
【発明を実施するための形態】
【００１８】
本発明の実施の態様（実施例）を説明する。図１は、本実施例のシステム１００を示す図である。システム１００は、例えば、図１に示すようにＳＳＤ装置１１０と、ＳＳＤ装置１１０を制御する制御装置１０１とを備える。
【００１９】
図１に示すように、制御装置１０１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０２、メモリ１０３、記憶装置側アダプタ１０４、ホスト側アダプタ１０５を有し、それぞれがバスを介して相互に通信可能に接続されている。
【００２０】
ＣＰＵ１０２は、システム１００のＳＳＤ装置１１０の制御に必要な演算処理を実行する。メモリ１０３は、システム１００の制御に必要な情報を記憶する。またメモリ１０３は、ＣＰＵ１０２が実行するプログラムを記憶することも可能である。
【００２１】
制御装置１０１は、記憶装置側アダプタ１０４を介してＳＳＤ装置１１０と接続される。制御装置１０１とＳＳＤ装置１１０とは、例えばＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）や、ファイバチャネル（Ｆｉｂｒｅ  Ｃｈａｎｎｎｅｌ）を介して接続されて良い。また、例えば、ＳＣＳＩ（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）を用いて、制御装置１０１とＳＳＤ装置１１０とを接続することも可能である。また、制御装置１０１には複数のＳＳＤ装置１１０が接続されていても良い。
【００２２】
制御装置１０１は、ホスト側アダプタ１０５を介してホスト１２０と接続される。制御装置１０１とホスト１２０との接続には、例えばｉＳＣＳＩ（Ｉｎｔｅｒｎｅｔ  ＳＣＳＩ）を用いることが可能である。ホスト１２０は、例えば、サーバ装置や、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）などＳＳＤ装置１１０に対して、データの書込み、読出しを要求する情報処理装置である。
【００２３】
ＳＳＤ装置１１０は、例えば、ホスト１２０からの要求に応じてデータを記憶する。ＳＳＤ装置１１０は、例えば、図１に示すように、ＣＰＵ１１１、キャッシュメモリ１１２、ＮＡＮＤフラッシュ記憶部１１３、アダプタ１１４を有する記憶装置であり、それぞれはバスを介して相互に通信可能に接続されている。
【００２４】
ＣＰＵ１１１は、ＳＳＤ装置１１０の制御に必要な演算処理を実行する。キャッシュメモリ１１２は、例えば、ＮＡＮＤフラッシュ記憶部１１３に記憶されているデータの複製を記憶することに用いても良い。また、キャッシュメモリ１１２は、記憶装置１１０の制御に必要な情報を記憶しても良い。ＮＡＮＤフラッシュ記憶部１１３は、制御装置１０１がアクセスの対象とするデータ記憶領域を有する。ＳＳＤ装置１１０は、ホスト１２０からの要求に応じて、データをＮＡＮＤフラッシュ記憶部１１３に記憶する。ＳＳＤ装置１１０はアダプタ１１４を介して、制御装置１０１と接続される。本実施例では、データの記憶装置としてＳＳＤ装置１１０を例示するが、ＳＳＤ装置に替えて、例えばＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）を用いても良い。
〔機能ブロック説明〕
図２は、制御装置１０１の機能ブロック図である。制御装置１０１は、機能部として、ホスト側送受信部２０１、空き領域判定部２０２、データＩＤ取得部２０３、データ分割部２０４、番号付与部２０５、空き領域情報記憶部２０６、記憶装置側送受信部２０７を備える。
【００２５】
ホスト側送受信部２０１は、ホスト１２０からの命令や、ＳＳＤ装置１１０に書き込まれるデータを受信する。また、ホスト側送受信部２０１は命令に基づく応答をホスト１２０に対して送信する。空き領域判断部２０２は、ホスト側送受信部２０１が受信したデータを記憶する空き領域が、ＳＳＤ装置１１０にあるかを判定する。データＩＤ取得部２０３は、ホスト側送受信部２０１が受信したデータから、データＩＤとしても用いる識別子を取得する。データ分割部２０４は、ホスト側送受信部２０１が受信したデータを所定のデータ長ごとに分割し、分割データを生成する。番号付与部２０５は、データ分割部２０４が生成した分割データそれぞれに対して、データＩＤと、データ内番号とを付与する。空き領域情報記憶部２０６は、ＳＳＤ装置１１０の空き領域のデータ長の合計を特定する情報を記憶する。記憶装置側送受信部２０７は、番号付与部２０５によりデータＩＤと、データの順序を特定するための識別番号（データ内番号）とが付与された分割データをＳＳＤ装置１１０に送信する。
【００２６】
前述した空き領域判定部２０２、データＩＤ取得部２０３、データ分割部２０４および番号付与部２０５は、例えば、メモリ１０２に記憶されたプログラムをＣＰＵ１０１が実行することにより実現されても良い。また、ホスト側送受信部２０１および記憶装置側送受信部２０７は、例えば図１に示すホスト側アダプタ１０５および記憶装置側アダプタ１０４を用いて実現されても良い。また、空き領域情報記憶部２０６は、例えば図１に示すメモリ１０３を用いて実現されても良い。
【００２７】
図３は、ＳＳＤ装置１１０の機能ブロック図である。ＳＳＤ装置１１０は、機能部として、送受信部３０１、連続領域判定部３０２、データ制御部３０３、マイグレーション実行部３０４、データ記憶部３０５、ビットマップ記憶部３０６、ビットマップ更新部３０７、カウンタ値記憶部３０８を備える。
【００２８】
送受信部３０１は、制御装置１０１が送信した分割データを受信する。また、送受信部３０１は、データの読み書きに応じた応答を制御装置１０１に送信する。連続領域判断部３０２は、送受信部３０１が受信した分割データを記憶可能な、連続した空き記憶領域（連続空き領域）がデータ記憶部３０５にあるかを判定する。データ制御部３０３は、分割データをデータ記憶部３０５に書き込む。また、ホストからの要求に応じて、データ記憶部３０５に記憶されたデータの読み出しを行う。データ制御部３０３は、第１の記憶制御部および読み出し部の一例である。マイグレーション実行部３０４は、データ記憶部３０５に書き込まれたデータの並べ替え（マイグレーション）を実行する。マイグレーション実行部３０４は、第２の記憶制御部の一例である。データ記憶部３０５は、ホストからの命令に基づいてデータが記憶される記憶領域（ブロック）を有する。ビットマップ記憶部３０６は、データ記憶部３０５の各ブロックに記憶されたデータを特定する情報（ビットマップ）を記憶する。ビットマップ更新部３０７は、ＳＳＤ装置１１０の動作に応じて、ビットマップ記憶部３０６に記憶された情報を更新する。
カウンタ値記憶部３０８は、マイグレーションを必要とするデータの数を記憶する。
送受信部３０１、前述した３０２〜３０７は、例えば、キャッシュメモリ１１２に記憶されたプログラムをＣＰＵ１１１が実行することにより実現されても良い。データ記憶部３０５は、例えば、キャッシュメモリ１１２や、データ記憶部３０５を用いて実現されても良い。ビットマップ記憶部３０６、カウンタ記憶部３０８は、例えば、キャッシュメモリ１１２を用いて実現されても良い。各機能部の動作の詳細については後述する。
〔識別情報の付与〕
制御装置１０１が、ホスト１２０から受信するデータを処理する手順について説明する。図４は、ホスト１２０からデータを受信した制御装置１０１が実行する処理の手順を示すフローチャートである。
【００２９】
まず、ホスト側送受信部２０１がホスト１２０からのコマンドおよびＳＳＤ装置１１０に書き込まれるデータを受信する（Ｓ４０１）。
【００３０】
図５に、ホスト側送受信部２０１が受信するデータのデータ構造の一例を示す。図５に示すデータ構造５００には、データＩＤ（Ｉｄｅｎｔｉｆｉｅｒ）５０１、データサイズ５０２、データ５０３が含まれる。データＩＤ５０１は、データを識別するための識別子である。識別子は識別情報の一例である。データサイズ５０２は、データ５０３のデータ長を示す情報である。データ５０３は、ホスト１２０が送信するデータ本体であり、例えば、ホスト１２０を利用するユーザによって作成されたデータファイルである。
【００３１】
図４に示す処理の説明に戻ると、空き領域判定部２０２は、ＳＳＤ装置１１０のデータ記憶部３０５に、ホスト側送受信部２０１が受信したデータを記憶可能な空き領域があるか判定する（Ｓ４０２）。この判定は、例えば、受信したデータのデータサイズ５０２の情報を空き領域判定部２０２が参照し、データ記憶部３０５が有する空き領域の合計とデータサイズ５０２の情報とを比較することで判定しても良い。データ記憶部３０５が有する空き領域の合計は、例えば、制御装置１０１の空き領域情報記憶部２０６にデータ記憶部３０５が有する空き領域のデータ長の合計を特定する情報を記憶し、空き領域判定部２０２は、空き領域情報記憶部２０６から空き領域のデータサイズの合計を取得しても良い。
空き領域がないと判定した場合は、ＳＳＤ装置１１０に空き領域がない旨の応答（図４においてはエラー応答と記載する）を、ホスト側送受信部２０１がホスト１２０に送信し（Ｓ４０４）、処理を終了する。
【００３２】
一方、データ記憶部３０５に空き領域があると判定した場合、データＩＤ取得部２０３は、受信したデータのデータＩＤを取得する。データＩＤは、例えば、図５に示すデータＩＤ５０１を取得し、データＩＤとして用いることが可能である。ここで例えば、ホストから受信したデータに、データＩＤ５０１や、データＩＤとして利用可能な情報が含まれていない場合には、データ受信時に制御装置１０１が受信した各データに対して固有のデータＩＤを生成することとしても良い。
【００３３】
データＩＤが取得された後、データ分割部２０４は、受信したデータ５０３を、所定のデータ長ごとに分割する（Ｓ４０５）。ここで所定のデータ長とは、例えば、ＳＳＤ装置１１０における、データの書き込み単位である。本実施例では、ＳＳＤ装置１１０のデータの書き込み単位が４キロバイトであるとして、データ分割部２０４は、受信したデータ５０３を、４キロバイトごとに分割する。以後、この書き込み単位をページと記載する。尚、本実施例における、１ページ＝４キロバイトという設定は、ＳＳＤ装置の制御の一態様であり、例えば、ＳＳＤ装置１１０の仕様などに基づいて適宜変更しても良い。この処理で分割されて生成されたデータを以後、分割データと記載する。
【００３４】
データ分割部２０４によるデータの分割後、番号付与部２０５は、分割データのそれぞれに、ステップＳ４０３でデータＩＤ取得部２０３が取得したデータＩＤと、データ内番号とを付与する（Ｓ４０６）。データ内番号は、例えば、分割されたデータそれぞれについて、データの先頭のものから順に割り当てられる通し番号である。データＩＤおよびデータ内番号は、例えば分割データそれぞれが有する冗長バイト（冗長な記憶領域）に記憶することで付与しても良い。
【００３５】
分割データそれぞれに、番号付与部２０５が、データＩＤとデータ内番号とを分割データそれぞれに付与した後、記憶装置側送受信部２０７が、分割データそれぞれを、ＳＳＤ装置１１０のデータ記憶部３０５に送信し（Ｓ４０７）、制御部１０１での処理を終了する。
【００３６】
以上で説明した図４の処理について、データの一例を用いて説明する。
【００３７】
例えば図５に示すデータ構造のデータ５１０を、ホスト側送受信部２０１が受信（Ｓ４０１）すると、空き領域判定部２０２は、ＳＳＤ装置１１０のデータ記憶部３０５に、データ５１０を記憶可能な空き領域があるかを判定する（Ｓ４０２）。図５に示すように、データ５１０のデータ長は１４２キロバイト（ＫＢ）である。この例では、データ記憶部３０５に、データ５１０を記憶可能な空き領域がある、つまり、１４２キロバイト以上の空き領域があるものとする。
【００３８】
空き領域判定部２０２によってデータ記憶部３０５に空き領域があると判定されると、データＩＤ取得部２０３は、データ５１０に含まれるデータＩＤを取得する（Ｓ４０３）。データ５１０には、図５に示すように、データＩＤ＝＃Ａが含まれているので、データＩＤ取得部２０３は、データＩＤ＝＃Ａを取得する。
【００３９】
データＩＤが取得された後、データ分割部２０４は、データ５１０を、ページ単位、本実施例では４キロバイトごとに分割する（Ｓ４０５）。図６に示すように、データ長＝１４２キロバイトのデータ５１０は、３６個のデータ５１０（１）〜５１０（３６）に分割される。また、番号付与部２０５は、分割データそれぞれに、データＩＤ＝＃Ａと、データ内番号＝００１〜０３６を付与する（Ｓ４０６）。データＩＤおよびデータ内番号は、例えばページそれぞれに設けられた冗長ビットの記憶領域に記憶されることとしても良い。尚、例えば、この例のように、データサイズが４キロバイトの倍数ではない場合は、例えば、図６に示すように、最後尾の分割データ５１０（３６）を４キロバイトに満たないデータとすればよい。ここで、番号付与部２０５は、最後尾の分割データ（この例では、分割データ５１０（３６））に、最後尾のデータであることを特定する情報（最後尾フラグ）を付与することとしても良い。最後尾フラグは、データＩＤ、データ内番号と同様に、ページそれぞれに設けられた冗長ビットの記憶領域に記憶されることとしても良い。
【００４０】
ステップＳ４０６の処理終了後、記憶装置側送受信部２０７が、データ５１０（１）〜５１０（３６）を、ＳＳＤ装置１１０に送信する（Ｓ４０７）。これにて、制御装置１０１での処理が終了する。
【００４１】
以上説明したステップＳ４０１〜Ｓ４０７の処理により、制御装置１０１は、ホスト１２０から受信したデータをページ単位に分割した分割データを生成し、さらに、分割データそれぞれに、データＩＤとデータ内番号を付与して、ＳＳＤ装置１１０に送信する。尚、図４に示す処理は、処理の一態様であり、処理の手順は図４に示す態様に限定されるものではない。また、図６に示す態様は、データＩＤ、データ内番号の一例であり、データＩＤ、データ内番号の形式は図６の形式以外であっても構わない。
〔ＳＳＤ装置の動作〕
制御装置１０１が生成した分割データをＳＳＤ装置１１０が記憶する手順について説明をする。図７は、ＳＳＤ装置１１０が、制御装置１０１からのデータの受信に応じて、受信したデータを記憶する手順を示すフローチャートである。
【００４２】
まず、送受信部３０１は、制御装置１０１が送信した分割データを制御装置１０１から受信する（Ｓ７０１）。
【００４３】
次に、連続領域判定部３０２は、分割データを記憶可能な連続した空き領域（連続空き領域）が、データ記憶部３０５に存在するかを判定する（Ｓ７０２）。判定の具体的な手法としては、ビットマップ記憶部３０６に記憶されたビットマップに基づいて、連続空き領域があるかを判定しても良い。判定の具体的な手法については後述する。
【００４４】
ステップＳ７０２の処理を説明する前に、ここで、ＳＳＤ装置１１０のデータ記憶部３０５の記憶領域の態様について説明する。図８は、本実施例のＳＳＤ装置１１０が備えるデータ記憶部３０５の態様を説明する図である。
【００４５】
本実施例では、データ記憶部３０５の記憶領域が、２５６キロバイトごとに分割される。以後、この分割されたデータ領域をブロックと記載する。図８は、データ記憶部３０５の記憶領域が有するブロックの一例としてブロック８００を示す。ここで、記憶領域をブロックに分割する理由について説明すると、ＳＳＤ装置は、データを消去する際に、ビット単位あるいはページ単位での消去を行うことができず、ある程度のデータ長をまとめて消去しなければならない仕様となる場合がある。このような場合、ＳＳＤ装置は、記憶したデータを管理する上で、一斉に消去されるページ群で管理を行い、本実施例におけるブロックは、この一斉に消去されるページ群に該当する。さらに、ブロックは、４キロバイトごとに分割されている。この分割単位は前述したページに相当する。
【００４６】
さて、図７の説明に戻ると、ステップＳ７０２にて、連続領域判定部３０２は、ステップＳ７０１で受信したデータを連続空き領域がブロック８００にあるかを判定する。空き領域があると連続領域判定部３０２が判定した場合、ステップＳ７０３の処理を実行する。一方、空き領域がない場合は、ステップＳ７０５の処理を実行する。
【００４７】
はじめに、ステップＳ７０２で、連続領域判定部３０２が、データ記憶部３０５に連続空き領域があると判定した場合について説明する。この場合、データ制御部３０３は、データ記憶部３０５の連続空き領域に、分割データを、データ内番号順に連続して記憶する（Ｓ７０３）。そして、ビットマップ更新部３０７は、記憶されたデータに対応するビットマップに、マイグレーションが「不要」である旨のフラグ（マイグレーションフラグ）を設定する（Ｓ７０４）。ステップＳ７０３の処理終了後、送受信部３０１は、分割データの受信に応じた処理が終了した旨の応答を制御装置１０１に対して送信し（Ｓ７０８）、処理を終了する。
【００４８】
次に、ステップＳ７０２で、連続領域判定部３０２が、データ記憶部３０５に連続空き領域がないと判定した場合について説明する。この場合、データ記憶部３０５は、データ記憶部３０５の空き領域に、空き領域のデータ長に応じて、分割データを分けて記憶する（Ｓ７０５）。
【００４９】
そして、ビットマップ更新部３０７は、記憶された分割データに対応するビットマップに、マイグレーションが「必要」である旨のマイグレーションフラグを設定する（Ｓ７０６）。そして、ビットマップ更新部３０７は、カウンタ値記憶部３０８に記憶されたカウンタ値を更新する（Ｓ７０７）。ここで、カウンタ値について説明すると、本実施例のカウンタ値は、データ記憶部３０５に記憶されたデータのうち、マイグレーションが必要であるデータ（分割前のデータ）の数を記憶した情報である。例えば、ビットマップ更新部３０７は、記憶されたデータに対応するビットマップに、マイグレーションが「必要」である旨のマイグレーションフラグを設定する場合に、カウンタ値記憶部３０８に記憶されたカウンタ値をインクリメントすることで、マイグレーションが必要なデータの有無、およびマイグレーションが必要なデータの数を管理することができる。例えば、カウンタ値記憶部３０８に記憶されたカウンタ値が「０」であれば、データ記憶部３０５に記憶されたデータに、マイグレーションが必要なデータは記憶されていないことが示される。また例えば、カウンタ値記憶部３０８に記憶されたカウンタ値が「３」であれば、データ記憶部３０５に記憶されたデータの中に、マイグレーションが必要なデータ（分割前）が３つあることが示される。
【００５０】
ステップＳ７０７の処理終了後、送受信部３０１は、分割データをデータ記憶部３０５に記憶する処理が終了した旨の応答を制御装置１０１に対して送信し（Ｓ７０８）、処理を終了する。
【００５１】
さて、図７に示す処理についてデータの一例を用いて説明する。図９は、図７に示す処理の具体例を示した図である。図９の例では、ブロック９００に、データ９１０、データ９１１が記憶されるときに、ＳＳＤ装置１１０が実行する処理を説明するものである。
【００５２】
図９において、データ９１０はデータ長が１２キロバイトのデータである。尚、本実施例においては、前述したように、ＳＳＤ装置１１０がデータを受信した時点で制御装置１０１が実行した処理により、データが４キロバイトごとに分割され、各分割データにデータＩＤとデータ内番号が付与される。したがって、図９に示すように、データ９１０は分割データ９１０（１）〜９１０（３）にそれぞれ分割され、各分割データにデータＩＤと、データ内番号が付与された状態となっている。
【００５３】
ブロック９００は、全体として計２５６キロバイトのデータを記録可能な記憶領域であり、ブロック９００は、それぞれが４キロバイトのページ９０１（１）〜９０１（６４）を有する。図９に示す例では、データ長が８０キロバイトのデータ９１２がページ９０１（２１）〜９０１（４０）に記憶されている。ページ９０１（１）〜９０１（２０）および、ページ９０１（４１）〜９０１（６４）は、この時点でデータは記憶されていない、いわゆる空き領域である。また、図９において図示しないが、ブロック９００に隣接するブロックのページにはすでにデータが記憶されているものとする。
【００５４】
はじめに、データ９１０をブロック９００に記憶する処理について説明する。
【００５５】
まず、連続領域判定部３０２が、データ９１０を連続的に記憶可能な領域がブロック９００内にあるか判定する（Ｓ７０１）。この場合、ブロック９００内には、データ長が１２キロバイトのデータ９１０を記憶する領域がある（例えばページ９０１（１）〜９０１（３）など）。したがって、データ記憶部３０５が、ブロック９００の空き領域に、データ９０１をデータ内番号順に連続して記憶する（Ｓ７０３）。そして、ビットマップ更新部３０７は、記憶されたデータ９１０の分割データが記憶されたページに対応するビットマップに、マイグレーションが「不要」である旨のマイグレーションフラグを設定する（Ｓ７０４）。尚、ステップＳ７０３の処理終了後、送受信部３０１は、データ９１０を記憶する処理が終了した旨の応答を制御装置１０１に対して送信し（Ｓ７０８）、処理を終了する。結果として、例えば図１０に示すように、ブロック９００に、データ９１０が記憶される。以上の処理を、ＳＳＤ装置１１０が実行した後のブロック９００の態様を図１０に示す。図１０に示すように、ブロック９００において空き領域であったページ９０１（１）〜９０１（３）に、データ９１０の分割データ９１１（１）〜９１１（３）が記憶される。
【００５６】
次に、ブロック９００が図１０の態様である場合に、データ９１１をブロック９００に記憶する処理について説明する。データ９１１は、データ長が１４４キロバイトのデータである。データ９１１は、データ９１０と同様に、制御装置１０１が実行した処理により、分割データ９１１（１）〜９１１（３６）に分割されている。まず、連続領域判定部３０２が、データ９１０を連続的に記憶可能な領域がブロック９００にあるかを判定する（Ｓ７０１）。この場合、ブロック９００には、データ長が１４４キロバイトのデータ９１１を記憶する領域がない。すなわち、図１０に示す状態で、ブロック９０１の最大の連続データ長は、６８キロバイトであるが、これはデータ９１１のデータ長である１４４キロバイトよりも短い。したがって、連続領域判定部３０２は、データ９１０を連続的に記憶可能な領域がブロック９０１にないと判定し、データ記憶部３０５がステップＳ７０５の処理を実行する。
【００５７】
ステップＳ７０５では、データ記憶部３０５は、データ９１１を、複数に分割してブロック９０１に記憶する。
【００５８】
ステップＳ７０５の処理方法の一例をあげると、例えば、ページ９０１（１）〜９０１（２０）は、８０キロバイトのデータ長を有するが、ここに、データ９１１の先頭から８０キロバイト分の分割データ９１１（１）〜９１１（２０）を記憶する。さらに、ページ９０１（４１）〜９０１（５６）は、６４キロバイトのデータ長を有するので、ここに、データ９１１の６４キロバイト分の分割データ９１１（２１）〜９１１（３６）を記憶する。
【００５９】
データ９１１が記憶された後、ビットマップ更新部３０７は、記憶されたデータ９１１の分割データが記憶されたページに対応するビットマップに、マイグレーションが「必要」である旨のマイグレーションフラグを設定する（Ｓ７０６）。そして、ビットマップ更新部３０７は、カウンタ値記憶部３０８に記憶されたカウンタ値をインクリメントする（Ｓ７０７）。例えば、カウンタ値記憶部３０８に記憶されたカウンタ値が「０」である場合、ビットマップ更新部３０７はカウンタ値を「１」にインクリメントする。これにより、カウンタ値は、データ記憶部３０５にはマイグレーションが「必要」であるデータが１つ記憶されていることを示す情報となる。
【００６０】
以上の手順により、ブロック９００にデータ９１０、９１１および９１２が記憶された状態を図１１に示す。例えば、図１１のようにブロックにデータを記憶することで、ブロック９００には、データ９１０、９１１、９１２が記憶される。尚、図１１において、ページ９０１（６０）〜９０１（６４）はデータが記憶されていない空き領域である。ここで、図１１では、ページ９０１（１）から、データ９１０、データ９１２、データ９１１の順に、ブロック９００に記憶されているが、本実施例によれば、分割データをデータＩＤとデータ内番号とで特定できるため、例えば、データ９１１、データ９１２、データ９１０の順のように、図１１に示す態様以外の順番で記憶することも可能である。図１２は、データ記憶部３０５が図１１に示す態様であるときのビットマップを示す図である。ビットマップは、例えば図１２に示すように、ブロック９００に記憶されたデータのブロックＩＤ１２０１、データＩＤ１２０２、合計ページ数１２０３、合計データ長１２０４、マイグレーションフラグ１２０５を含む。
【００６１】
ブロックＩＤは、データ記憶部３０５の各ブロックを識別する識別子である。図１２においては、ブロック９００を識別するブロックＩＤとして「９００」と記載しているが、データＩＤは、例えば１６進数形式の番号などの態様であって良い。データＩＤ１２０２は、例えば、前述のデータＩＤと同様であって良い。
【００６２】
合計ページ数１２０３は、各ブロックおけるデータそれぞれの合計ページ数を特定する情報である。合計データ長１２０４は、例えば、ホストから受信したデータに含まれるデータサイズ５０２を用いて良い。マイグレーションフラグ１２０５は、前述したステップＳ７０６で、ビットマップ更新部３０７により付与された、マイグレーションが必要か不要かを特定する情報である。説明のため、図１２では、マイグレーションが必要な場合のマイグレーションフラグを「必要」、マイグレーションが不要な場合のマイグレーションフラグを「不要」と示す。尚、例えば、別の態様として、例えば、マイグレーションが必要な場合のマイグレーションフラグを「１」や「ｔｒｕｅ」、マイグレーションが不要な場合のマイグレーションフラグを「０」や「ｆａｌｓｅ」としても良い。また、マイグレーションが必要な場合のマイグレーションフラグを「０」や「ｆａｌｓｅ」、マイグレーションが不要な場合のマイグレーションフラグを「１」や「ｔｒｕｅ」としても良い。
【００６３】
データ記憶部３０５に記憶されたデータを読み出す際には、データ制御部３０３は、データＩＤとデータ内番号に基づいて、分割データおよび、分割データの順序を特定することができる。したがって、分割データが、例えば図１１に示すデータ９１１（１）〜９１１（３６）のように、ブロック内の連続したページに記憶されない場合であっても、データ制御部３０３は、データＩＤとデータ内番号に基づいて、分割データおよび、分割データの順序を特定するデータの読み出しをすることが可能となる。また、ブロック内で、分割データがデータ内番号の順序で記憶されない場合であっても、データ制御部３０３は、データＩＤとデータ内番号に基づいて、分割データおよび、分割データの順序を特定するデータの読み出しをすることが可能となる。このときデータ制御部３０３は、例えば、分割データの対応はデータＩＤ基づいて特定し、分割データの順序はデータ内番号に基づいて特定し、最後尾の分割データは、前述した末尾フラグの有無で特定することとしても良い。また、最後尾の分割データは、ビットマップに含まれる合計データサイズ１２０４に基づいて特定することとしても良い。
【００６４】
さて、ステップＳ７０１〜Ｓ７０８の手順により、図１１に示すように、ブロック９０１には、データ９１０と、データ９１１とが記憶される。ここで、データ９１１は複数に分断して（連続した記憶領域に記憶されずに）記憶されているが、前述したように、データ制御部３０３は、データＩＤとデータ内番号に基づいて、分割データおよび、分割データの順序を特定することができる。したがって、ブロック内の連続したページに記憶されない場合であっても、データ制御部３０３はデータを読み出すことができる。したがって、ＳＳＤ装置１１０は、データを受信した際に、連続した記憶領域を確保するためのガベージコレクションを不要とし、ホスト１２０からデータを受信してから、受信したデータがＮＡＮＤフラッシュ記憶部１１３に記憶されるまでの時間を削減できる。
〔マイグレーション処理〕
ここで、複数に分断して記憶されたデータを並べ替えて記憶し直すことで、分断して記憶されたデータを連続して記憶することができ、いわゆるシーケンシャルリードでデータの読み出しが可能となる。これにより、データ制御部３０３がデータを読み出す際の、読み出し速度を向上させることが可能である。
【００６５】
したがって、ＳＳＤ装置１１０は、分断されたデータを、データ内番号に基づいて、連続して記憶領域に記憶し直す処理を実行する。本実施例ではこのような処理をマイグレーションと記載する。
【００６６】
本実施例におけるマイグレーションの手順を説明する。図１３は、本実施例のＳＳＤ装置１１０が実行するマイグレーション処理の手順を示すフローチャートである。
【００６７】
まず、マイグレーション実行部３０４は、ビットマップポインタをビットマップの先頭に配置（初期化）する（Ｓ１３０１）。ビットマップポインタとは、マイグレーション実行部３０４が参照するためのビットマップの位置（例えば、図１２のようなデータテーブル形式であれば、参照する行）を示す情報である。
【００６８】
次に、マイグレーション実行部３０４は、カウンタ値記憶部３０８に記憶されたカウンタ値が０であるかを判定する（Ｓ１３０２）。カウンタ値が「０」の場合、マイグレーションを必要とするデータが無いことを示す。したがって、マイグレーション実行部３０４は、図１３に示すマイグレーションの処理を終了する。
【００６９】
一方、ステップＳ１３０２の判定でカウンタ値が０でない（例えば、０以上の整数値）場合は、データ記憶部３０５にマイグレーションを必要とするデータが存在することを示す。したがって、マイグレーション実行部３０４は、ステップＳ１３０３の処理を実行する。
【００７０】
ステップＳ１３０３において、マイグレーション実行部３０４は、現在参照しているビットマップポインタに対応するデータＩＤと、マイグレーションフラグとを参照する。そして、マイグレーション実行部３０４は、現在のビットマップポインタの、マイグレーションのフラグを参照し、フラグが「必要」であるか「不要」であるかを判定する（Ｓ１３０４）。フラグが「不要」である場合は、マイグレーション実行部３０４はステップＳ１３０６の処理を実行する。
【００７１】
一方、フラグが「必要」である場合には、マイグレーション実行部３０４は、ステップＳ１３０５のマイグレーション処理を実行する。
【００７２】
ステップＳ１３０５のマイグレーション処理について詳細を説明する。図１４は、ステップＳ１３０５のマイグレーション処理の詳細な処理手順を示すフローチャートである。
【００７３】
まず、連続領域判定部３０２が、現在参照しているビットマップに含まれるデータＩＤと一致するデータＩＤの付与された分割データが記憶されたブロックを、ビットマップに基づいて特定する。そして、特定したブロック分の連続空き領域がデータ記憶部３０５にあるかを判定する（Ｓ１４０１）。
【００７４】
連続空き領域がないと連続空き領域判定部３０２が判定した場合は、データをマイグレーション可能な領域がないため、そのデータに対してのマイグレーション処理は実行せずに、ステップＳ１３０５の処理を終了する。
【００７５】
一方、連続した空き領域があると連続領域確認部３０２が判定した場合は、連続した該空き領域にデータを移動する処理を実行する（Ｓ１４０２）。この処理をより詳細に説明すると、はじめに、マイグレーション実行部３０４が特定したブロックに含まれる分割データを、キャッシュメモリ１１２に複製する。そして、マイグレーション実行部３０４は、キャッッシュメモリ１１２に複製した分割データを並び替える。この並び替えにおいて、マイグレーション実行部３０４は、例えば、分割データの対応はデータＩＤに基づいて特定し、分割データの順序はデータ内番号に基づいて特定し、最後尾の分割データは、前述した末尾フラグの有無で特定することとしても良い。また、最後尾の分割データは、ビットマップに含まれる合計データサイズ１２０３に基づいて特定することとしても良い。
【００７６】
キャッシュメモリ１１２に複製したデータを並べ替えた後、マイグレーション実行部３０４は、連続空き領域に、並べ替えた後の分割データを記憶する。以上のように、マイグレーション実行部３０４は、分割データを移動し、移動後のデータは、データ内番号の順序で連続して、連続空き領域に記憶される。
【００７７】
ステップＳ１４０２でデータの移動を実行した後、マイグレーション実行部３０４は、ステップＳ１４０２で特定したブロックのデータを消去し、ブロックの記憶領域を空き領域として開放する（Ｓ１４０３）。
【００７８】
ここで、マイグレーション実行部３０４は、Ｓ１４０２で分割データをキャッシュメモリ１１２に複製し、分割データを並べ替えた後、特定したブロックのデータを消去し、消去後のブロックに分割データを記憶することとしても良い。
【００７９】
ステップＳ１４０３の処理を実行後、ビットマップ更新部３０７は、データの移動に伴ってビットマップを更新する（Ｓ１４０４）。具体的には、連続空き領域には、分割データが記憶されるので、連続空き領域に対応するビットマップは、データが記憶されている状態に更新する。ここで、連続空き領域に記憶されたデータは、データ内番号に基づいた順序に並び替えられているので、マイグレーションフラグは「不要」とする。一方で、もともと分割データが記憶されていたブロックは、空き領域として開放するので、ビットマップは空き領域を示す情報に更新する。
【００８０】
ビットマップを更新後、マイグレーション実行部３０４は、カウンタ値記憶部３０８に記憶されたカウンタ値を更新する。より詳細には、マイグレーションが必要であった分割データに対して、マイグレーションの処理が実行されたので、マイグレーションが実行され、記憶し直された、マイグレーションフラグが「必要」であったデータの数だけ、カウンタ値をデクリメントする。
【００８１】
以上で、マイグレーション実行部３０４は、ステップＳ１３０５のマイグレーション処理を終了する。
【００８２】
図１３の説明に戻る。ステップＳ１３０５のマイグレーション処理を実行後、マイグレーション実行部３０４は、現在のビットマップポインタの値が最終ビットマップを示しているかを判定する（Ｓ１３０６）。ここで、最終ビットマップとは、ビットマップにおいて、データ記憶部３０５における最後のブロックを示すビットマップ（例えば、図１２のようなデータテーブル形式であれば、データテーブルの最終行）のことである。現在のビットマップポインタが最終ビットマップを示していないとマイグレーション実行部３０４が判定した場合、マイグレーション実行部３０４は、ビットマップポインタを現在の値からインクリメントし（Ｓ１３０７）、ステップＳ１３０２の処理を再実行する。一方、ステップＳ１３０６において、マイグレーション実行部３０４が、現在のビットマップポインタが最終ビットマップを示すと判定した場合、マイグレーション実行部３０４は、図１３に示すマイグレーションの処理を終了する。
【００８３】
以上の手順により、ＳＳＤ装置１１０のデータ記憶部３０５に、一旦分断されて記憶されたデータをマイグレーションし、ホスト１２０からの命令に応じて、より高速にデータを読み出し可能となるようにデータ位置を変更する。
【００８４】
図１５に、図１３に示す処理をマイグレーション実行部３０４によって、図１１のようにブロック９００に記憶されていたデータ９１０〜９１２に対してマイグレーションが実行された後の様子を示す。マイグレーション実行部３０４によって、データ９１０〜９１２は、図１４に示すように、ブロック９００とは異なるブロック１５００にマイグレーションされる。特に、ブロック９００では分断して記憶されていたデータ９１１（１）〜９１１（３６）は、ブロック１５００には、データ内番号順に連続して記憶されるので、例えば、ホスト１２０からの命令によって読み出しを行う際に、シーケンシャルリードで読出すことが可能となる。尚、ブロック１５００は、データ９１０およびデータ９１１を受信した時点で空き領域ではなく、データ９１０およびデータ９１１がブロック９００に記憶された後にＳＳＤ装置１１０が実行したガベージコレクションにより空き領域が確保されたブロックである。
【００８５】
尚、従来技術としてのガベージコレクションの処理自体は、本実施例で説明した処理と並行してＳＳＤ装置１１０が実行し、随時データを移動して空き領域を確保することとして良い。
【００８６】
また、説明においては、記憶部に記憶されるデータのデータ長が、１つのブロックに収まるデータ長の場合を例に挙げて説明した。この他に、データが複数のブロックにまたがって記憶される場合（例えば、受信したデータのデータ長が２５６キロバイト以上である場合など）も、同様の手順で本実施例の処理を実現することが可能である。この場合、ビットマップ記憶部３０６に記憶された、対象のデータが記憶される複数のブロックに対応するビットマップ基づいて処理を実行すれば良い。
〔第１の変形例〕
ところで、本実施例の態様によれば、ホスト１２０から受信したデータは、制御装置１０１により分割され、分割データのそれぞれには、データＩＤとデータ内番号が割り当てられる。このとき、例えば、制御装置１０１が、マイグレーション実行部３０４を備え、また、ＳＳＤ装置１１０に記憶されたデータから、データＩＤとデータ内番号を参照することができれば、データＩＤとデータ内番号とに基づいて、制御装置１０１がマイグレーションを実行することもできる。
【００８７】
図１６は、第１の変形例を示す図である。図１６に示す態様では、本実施例の変形例として１台の制御装置１６０１に対して、複数台（図１６の場合は２台）のＳＳＤ装置１１０ａ、１１０ｂが接続されている。尚、図１６に示す制御装置１６０１は、図１および図２に示す制御装置がマイグレーション実行部３０４の機能を備えた態様とする。また、図１５に示すＳＳＤ装置１１０ａ、１１０ｂは、前述した実施例のＳＳＤ装置１１０と同様であってよい。以後、この態様の変形例を第１の変形例と記載する。
第１の変形例では、図１の態様と同様に、制御装置１６０１にはホスト１２０が接続されている。ここで、例えば、ホスト１２０から制御装置１６０１に対して送信されたデータを記憶可能な連続空き領域が、ＳＳＤ装置１１０ａ、あるいは１１０ｂの１台のみでは確保できない場合でも、ＳＳＤ装置１１０ａ、１１０ｂの２台によって必要な空き領域が確保される場合は、データをＳＳＤ装置１１０ａ、１１０ｂの２台に分断して記憶しても良い。そして、記憶後に、ＳＳＤ装置１１０ａ、あるいは１１０ｂに、連続空き領域が確保された時点で、その連続空き領域にマイグレーションを行うこととしても良い。このような処理によれば、制御装置１６０１は、データが複数台のＳＳＤ装置に分断して記憶される場合にも、データＩＤとデータ内番号に基づいて、分割されたデータおよびデータの順序を特定できる。したがって、本実施例で説明した、データの記憶とマイグレーションの処理において、データが複数台のＳＳＤ装置に分断して記憶されたとしても、データのマイグレーションを実行することが可能である。これにより、例えば、ＳＳＤ装置の機能拡張や性能向上を図ることも可能である。
【００８８】
本実施例で説明した態様は、本発明を実施する態様の１つであり、本発明を実施する態様は、本明細書で説明した態様に限定されるものではない。例えば、本実施例においては、システム１００が、制御装置１０１とＳＳＤ装置１１０とを備えていたが、システム１００が、制御装置１０１およびＳＳＤ装置１１０の機能を有する１つのハードウェアであっても良い。
【００８９】
また、実施態様において、例えば、具体的な処理の手順の変更を行ったとしても、本発明を実現することが可能であり、また態様についても、明細書で説明した内容以外に種々の変形例が考えられる。例えば、図１４に示すマイグレーションの処理においては、ビットマップにおける順番に従って、データをマイグレーションしたが、マイグレーションが必要なデータについてキューを用いて管理および処理を行い、データを受信した時刻や、データの優先度などの情報を付与し、その情報に基づいて、マイグレーションされるデータの順序を制御することとしても良い。
【符号の説明】
【００９０】
１００  システム
１０１、１６０１  制御装置
１１０、１１０ａ、１１０ｂ  ＳＳＤ装置
１２０  ホスト
１０２、１１１  ＣＰＵ
１０３  メモリ
１０４  記憶装置側アダプタ
１０５  ホスト側アダプタ
１０６  ＨＤＤ
１１２  キャッシュメモリ
１１３  ＮＡＮＤフラッシュ記憶部
２０１  ホスト側送受信部
２０２  空き領域判定部
２０３  データＩＤ取得部
２０４  データ分割部
２０５  番号付与部
２０６  記憶装置側送受信部
２０７  空き領域情報記憶部
３０１  送受信部
３０２  連続領域判定部
３０３  データ制御部
３０４  マイグレーション実行部
３０５  データ記憶部
３０６  ビットマップ記憶部
３０７  ビットマップ更新部
３０８  カウンタ値記憶部
【図１】
0005962140.tif 000002
【図２】
0005962140.tif 000003
【図３】
0005962140.tif 000004
【図４】
0005962140.tif 000005
【図５】
0005962140.tif 000006
【図６】
0005962140.tif 000007
【図７】
0005962140.tif 000008
【図８】
0005962140.tif 000009
【図９】
0005962140.tif 000010
【図１０】
0005962140.tif 000011
【図１１】
0005962140.tif 000012
【図１２】
0005962140.tif 000013
【図１３】
0005962140.tif 000014
【図１４】
0005962140.tif 000015
【図１５】
0005962140.tif 000016
【図１６】
0005962140.tif 000017
【図１７】
0005962140.tif 000018