(57)【特許請求の範囲】
【請求項１】
プロセッサと、
第１のメモリおよび第２のメモリと、
前記プロセッサおよび前記第１のメモリに接続された第１の転送制御回路と、
前記第１の転送制御回路および前記第２のメモリに接続された第２の転送制御回路と、
を有し、
前記第１の転送制御回路は、前記第１のメモリを転送先とするデータの転送要求を前記プロセッサから受けると、前記データを前記第２の転送制御回路に送信し、
前記第２の転送制御回路は、前記第１の転送制御回路から前記データを受信すると、受信した前記データを前記第２のメモリに格納するとともに、受信した前記データを前記第１の転送制御回路を通じて前記第１のメモリに格納する、
ことを特徴とする情報処理システム。
【請求項２】
前記第１の転送制御回路は、前記第１のメモリを転送先とする前記データの転送要求を前記プロセッサから受けると、前記データが格納され、かつ前記第１のメモリを書き込み先とする書き込み要求パケットを前記第２の転送制御回路に送信し、
前記第２の転送制御回路は、前記第１の転送制御回路からの前記書き込み要求パケットを受信すると、前記書き込み要求パケットに格納された前記データを前記第２のメモリに書き込むとともに、前記書き込み要求パケットを前記第１の転送制御回路に転送し、
前記第１の転送制御回路は、前記第２の転送制御回路から転送された前記書き込み要求パケットを受信すると、前記書き込み要求パケットに格納された前記データを前記第１のメモリに書き込む、
ことを特徴とする請求項１記載の情報処理システム。
【請求項３】
前記情報処理システムには記憶装置が接続され、
前記プロセッサは、ホスト装置からのアクセス要求に応じて前記記憶装置に対するアクセスを制御するとともに、前記第１のメモリを、前記記憶装置と前記ホスト装置との間で送受信するデータをキャッシュするキャッシュメモリとして使用し、
前記第２の転送制御回路には、前記プロセッサに代わって、前記ホスト装置からのアクセス要求に応じて前記記憶装置に対するアクセスを制御するバックアップ装置が接続され、
前記プロセッサの動作が停止したとき、前記バックアップ装置は、前記第２のメモリに格納されたデータを前記第２の転送制御回路を通じて読み出して前記記憶装置に書き込む、
ことを特徴とする請求項１または２記載の情報処理システム。
【請求項４】
ネットワークに接続された第１の通信インタフェースと、
前記ネットワークを通じて前記第１のインタフェースが受信したデータを一時的に記憶するとともに、前記第１の転送制御回路に接続された第１の受信バッファと、
前記ネットワークに接続された第２の通信インタフェースと、
前記ネットワークを通じて前記第２の通信インタフェースが受信したデータを一時的に記憶する第２の受信バッファと、
前記第２の受信バッファおよび前記第２の転送制御回路に接続された第３の転送制御回路と、
をさらに有し、
前記プロセッサが、前記第１の受信バッファに記憶された第１のデータを前記第１のメモリに転送するように前記第１の転送制御回路に要求した場合、
前記第１の転送制御回路は、前記第１の受信バッファから読み出した前記第１のデータを格納した、前記第１のメモリを書き込み先とする書き込み要求パケットを前記第２の転送制御回路に送信し、
前記第２の転送制御回路は、前記第１の転送制御回路からの前記書き込み要求パケットを受信すると、前記書き込み要求パケットに格納された前記第１のデータを前記第２のメモリに書き込むとともに、前記書き込み要求パケットを前記第１の転送制御回路に転送し、
前記第１の転送制御回路は、前記第２の転送制御回路から転送された前記書き込み要求パケットに格納された前記第１のデータを前記第１のメモリに書き込み、
前記プロセッサが、前記第２の受信バッファに記憶された第２のデータを前記第１のメモリに転送するように前記第１の転送制御回路に要求した場合、
前記第１の転送制御回路は、前記第２の受信バッファを読み出し元とする読み出し要求パケットを前記第２の転送制御回路を通じて前記第３の転送制御回路に送信し、
前記第３の転送制御回路は、前記読み出し要求パケットを受信すると、前記第２の受信バッファから読み出した前記第２のデータを格納した応答パケットを前記第２の転送制御回路に送信し、
前記第２の転送制御回路は、前記応答パケットを受信すると、前記応答パケットに格納された前記第２のデータを前記第２のメモリに書き込むとともに、前記応答パケットを前記第１の転送制御回路に転送し、
前記第１の転送制御回路は、前記第２の転送制御回路から転送された前記応答パケットに格納された前記第２のデータを前記第１のメモリに書き込む、
ことを特徴とする請求項１記載の情報処理システム。
【請求項５】
前記第２のメモリはＮＡＮＤフラッシュであり、
前記第２の転送制御回路は、前記データのサイズがページのサイズ以下である場合には、前記ＮＡＮＤフラッシュの記憶領域をページ単位で分割した複数の第１種別の分割領域のうちの１つに前記データを書き込み、前記データのサイズがページのサイズより大きくブロックのサイズ以下である場合には、前記ＮＡＮＤフラッシュの記憶領域をブロック単位で分割した複数の第２種別の分割領域のうちの１つに前記データを書き込む、
ことを特徴とする請求項１記載の情報処理システム。
【請求項６】
前記プロセッサは、
前記第１の転送制御回路に対してデータの転送を要求したことに伴って前記第２のメモリに格納されたデータが、どの分割領域に格納されたかを示す識別情報を前記第２の転送制御回路から取得し、
前記第２のメモリに格納されたデータの無効化を要求する際に、無効化するデータが格納された分割領域を示す識別情報を、前記第１の転送制御回路を通じて前記第２の転送制御回路に通知する、
ことを特徴とする請求項５記載の情報処理システム。
【請求項７】
前記情報処理システムには記憶装置が接続され、
前記プロセッサは、
ホスト装置からのアクセス要求に応じて前記記憶装置に対するアクセスを制御するとともに、前記第１のメモリを、前記記憶装置と前記ホスト装置との間で送受信するデータをキャッシュするキャッシュメモリとして使用し、
前記第１のメモリに格納されたデータを前記記憶装置にライトバックしたとき、ライトバックしたデータに対応する識別情報を前記第１の転送制御回路を通じて前記第２の転送制御回路に通知して、通知した識別情報に対応する分割領域のデータを無効化するように要求し、
前記第２の転送制御回路は、前記プロセッサから通知された識別情報が前記第２種別の分割領域を示す場合、前記通知された識別情報が示す分割領域に対してデータ消去処理を実行する、
ことを特徴とする請求項６記載の情報処理システム。
【請求項８】
前記プロセッサは、前記第２のメモリに格納されたデータを新たなデータで上書きするように要求する際に、上書き対象のデータに対応する識別情報を前記第１の転送制御回路を通じて前記第２の転送制御回路に通知し、
前記第２の転送制御回路は、通知された識別番号が示す第１の分割領域のデータを無効化するとともに、前記第１の分割領域と同じ種別の第２の分割領域を前記通知された識別番号に割り当て直し、前記第２の分割領域に前記新たなデータを書き込む、
ことを特徴とする請求項６または７記載の情報処理システム。
【請求項９】
前記プロセッサは、前記第２のメモリに格納された第１のデータの一部を第２のデータで上書きするように要求する際に、前記第１のデータのうち前記第２のデータで上書きされる領域を無効化するとともに、前記第２のデータのサイズに応じた種別の分割領域を示す新たな識別情報を通知するように、前記第２の転送制御回路に要求し、
前記第２の転送制御回路は、前記第１のデータが格納された分割領域のうち前記第２のデータで上書きされる領域を無効化するとともに、前記新たな識別情報を前記プロセッサに通知し、前記第２のデータを前記新たな識別情報が示す分割領域に書き込む、
ことを特徴とする請求項７記載の情報処理システム。
【請求項１０】
前記プロセッサは、前記第１のメモリに格納された、前記第２のデータによってその一部が上書きされた前記第１のデータを前記記憶装置にライトバックしたとき、前記第１のデータに対応する識別情報と前記第２のデータに対応する識別情報を前記第１の転送制御回路を通じて前記第２の転送制御回路に通知して、通知した各識別情報に対応する分割領域のデータを無効化するように要求することを特徴とする請求項９記載の情報処理システム。
【請求項１１】
プロセッサと、第１のメモリおよび第２のメモリとを備える情報処理システムにおけるデータ記録制御方法であって、
前記プロセッサが、前記第１のメモリを転送先とするデータの転送要求を、前記第１のメモリに接続された第１の転送制御回路に要求し、
前記第１の転送制御回路が、前記第２のメモリに接続された第２の転送制御回路に対して、前記データを送信し、
前記第２の転送制御回路が、前記第１の転送制御回路から受信した前記データを前記第２のメモリに格納するとともに、受信した前記データを前記第１の転送制御回路を通じて前記第１のメモリに格納する、
ことを特徴とするデータ記録制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システムおよびデータ記録制御方法に関する。
【背景技術】
【０００２】
ディスクアレイなどをストレージ装置として用いたストレージシステムは、ホスト装置からのアクセス要求を受け付け、アクセス要求に応じてストレージ装置にアクセスするストレージ制御装置を備える。ストレージ制御装置は、ホスト装置からストレージ装置への書き込みを要求されたデータや、ストレージ装置内のデータのうちホスト装置から頻繁にアクセスされるデータを、ストレージ制御装置内のキャッシュメモリに一時的に記録する。
【０００３】
また、ストレージシステムでは、ストレージ制御装置を複数設けることで、ストレージ装置へのアクセス処理の信頼性が向上する。このように複数のストレージ制御装置を備えるストレージシステムの例として、一方のストレージ制御装置がホスト装置から受信したデータを、一方のストレージ制御装置内のキャッシュメモリに記録するとともに、他方のストレージ制御装置内のキャッシュメモリにも記録して、キャッシュメモリのデータを二重化したものがある。
【０００４】
また、キャッシュメモリのデータをバックアップすることが可能なシステムの他の例として、キャッシュメモリのデータを不揮発メモリにバックアップするものがある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００５−７０９９５号公報
【特許文献２】特開２００９−４８５４４号公報
【特許文献３】特開平６−２２２９８８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記のようにキャッシュメモリのデータが二重化されるストレージシステムにおいては、一方のストレージ制御装置は、ホスト装置からデータの書き込み要求を受けたとき、書き込みデータを自装置内のキャッシュメモリに転送する処理と、同じ書き込みデータを他方のストレージ制御装置内のキャッシュメモリに転送する処理という２回のデータ転送処理を実行する。この場合、一方のストレージ制御装置のＣＰＵは、ＤＭＡ（Direct Memory Access）転送要求などのデータ転送要求を２回出力する。このため、データ転送要求時のオーバヘッドによって、両方のキャッシュメモリへのデータ記録が完了するまでの時間が長くなるという問題がある。
【０００７】
また、上記のストレージシステムに限らず、データを異なる記憶装置に二重化して記録する際には、データの転送が２回要求されることから、記録完了までの時間が長くなるという問題がある。
【０００８】
１つの側面では、本発明は、短時間でデータを二重に記録することが可能な情報処理システムおよびデータ記録制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するために、プロセッサと、第１のメモリおよび第２のメモリと、プロセッサおよび第１のメモリに接続された第１の転送制御回路と、第１の転送制御回路および第２のメモリに接続された第２の転送制御回路と、を有する情報処理システムが提供される。この情報処理システムにおいて、第１の転送制御回路は、第１のメモリを転送先とするデータの転送要求をプロセッサから受けると、データを第２の転送制御回路に送信する。第２の転送制御回路は、第１の転送制御回路からデータを受信すると、受信したデータを第２のメモリに格納するとともに、受信したデータを第１の転送制御回路を通じて第１のメモリに格納する。
【発明の効果】
【００１０】
１態様によれば、短時間でデータを二重に記録することが可能になる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施の形態に係る制御システムの構成例とその動作例を示す図である。
【図２】第２の実施の形態に係るストレージシステムの構成例を示す図である。
【図３】ＣＭおよびＣＢＵのハードウェア構成例を示す図である。
【図４】キャッシュ領域のデータの二重化処理を説明するための図である。
【図５】ＣＭが、他方のＣＭが担当する論理ボリュームに対するアクセス要求を受けた場合のデータ二重化処理手順を説明するための図である。
【図６】ＮＡＮＤフラッシュに対するブロック単位での書き込み処理手順の参考例を示す図である。
【図７】ＣＢＵにおけるＮＡＮＤフラッシュの領域管理方法を説明するための図である。
【図８】各ユーザ領域に対するデータの書き込み処理例を示す図である。
【図９】分割領域内の一部のデータのみ上書きされる場合の処理例を示す図である。
【図１０】ＮＡＮＤフラッシュの記憶領域の管理に関連するデータテーブルの例を示す図である。
【図１１】ＰＣＩｅ（Peripheral Components Interconnect−express）バスを通じて送受信されるパケットの構成例を示す図である。
【図１２】ＣＭのＲＡＭに確保される制御用領域の例を示す図である。
【図１３】自装置が担当する論理ボリュームに対する書き込み要求をＣＭが受けたときの処理例を示す第１のシーケンス図である。
【図１４】自装置が担当する論理ボリュームに対する書き込み要求をＣＭが受けたときの処理例を示す第２のシーケンス図である。
【図１５】全面上書きの実行時におけるテーブルの状態の例を示す図である。
【図１６】自装置が担当する論理ボリュームに対する書き込み要求をＣＭが受けたときの処理例を示す第３のシーケンス図である。
【図１７】自装置が担当する論理ボリュームに対する書き込み要求をＣＭが受けたときの処理例を示す第３のシーケンス図である。
【図１８】一部上書きの実行時におけるテーブルの状態の例を示す図である。
【図１９】一方のＣＭが、他方のＣＭが担当する論理ボリュームに対する書き込み要求を受けたときの処理例を示す第１のシーケンス図である。
【図２０】一方のＣＭが、他方のＣＭが担当する論理ボリュームに対する書き込み要求を受けたときの処理例を示す第１のシーケンス図である。
【図２１】一方のＣＭが、他方のＣＭが担当する論理ボリュームに対する書き込み要求を受けたときの処理例を示す第２のシーケンス図である。
【図２２】一方のＣＭが、他方のＣＭが担当する論理ボリュームに対する書き込み要求を受けたときの処理例を示す第２のシーケンス図である。
【図２３】一方のＣＭが、他方のＣＭが担当する論理ボリュームに対する書き込み要求を受けたときの処理例を示す第３のシーケンス図である。
【図２４】一方のＣＭが、他方のＣＭが担当する論理ボリュームに対する書き込み要求を受けたときの処理例を示す第３のシーケンス図である。
【図２５】ライトバック実行時の処理例を示すシーケンス図である。
【図２６】アクセス制御を引き継ぐＣＭがＲＡＭ上に生成する制御領域、および、制御領域内の情報とＣＢＵのＮＡＮＤ管理テーブルの情報との対応関係の例を示す図である。
【図２７】ＮＡＮＤフラッシュに格納されたデータの書き戻し処理の例を示すシーケンス図である。
【図２８】データの書き戻し処理中にホスト装置から読み出し要求を受けたときの処理例を示すフローチャートである。
【図２９】ＣＢＵのＩＯ制御部における判定パターンの例を示す図である。
【発明を実施するための形態】
【００１２】
以下、実施の形態について図面を参照して詳細に説明する。
〔第１の実施の形態〕
図１は、第１の実施の形態に係る制御システムの構成例とその動作例を示す図である。図１に示す情報処理システム１は、プロセッサ１１、第１のメモリ２１、第２のメモリ２２、第１の転送制御回路３１および第２の転送制御回路３２を備える。
【００１３】
この情報処理システム１は、データＤＴを、第１のメモリ２１と第２のメモリ２２とに二重化して記録して、データＤＴの安全性を向上させるようにしたものである。第２のメモリ２２は、第１のメモリ２１に格納されるデータをバックアップするために設けられている。
【００１４】
なお、図１では例として、二重化の対象となるデータＤＴは、バッファメモリ２３に一時的に格納されているものとする。また、バッファメモリ２３の記憶領域と第１のメモリ２１の記憶領域は、例えば、同一の半導体メモリによって実現されてもよい。
【００１５】
第１の転送制御回路３１は、プロセッサ１１、第１のメモリ２１および第２の転送制御回路３２に接続されている。第１の転送制御回路３１は、例えば、第１のメモリ２１に対するデータの書き込みや、第２の転送制御回路３２との間のデータの送受信を、プロセッサ１１とは独立して実行可能になっている。
【００１６】
第２の転送制御回路３２は、第２のメモリ２２および第１の転送制御回路３１と接続されている。第２の転送制御回路３２は、例えば、第２のメモリ２２に対するデータの書き込みや、第１の転送制御回路３１との間のデータの送受信を、プロセッサ１１とは独立して実行可能になっている。
【００１７】
以下、上記構成の情報処理システム１において、バッファメモリ２３に一時的に記憶されたデータＤＴを第１のメモリ２１と第２のメモリ２２とに二重化する処理について、順を追って説明する。
【００１８】
プロセッサ１１は、第１のメモリ２１を転送先とするデータＤＴの転送を、第１の転送制御回路３１に要求する（ステップＳ１）。転送要求を受けた第１の転送制御回路３１は、バッファメモリ２３からデータＤＴを読み出し、第１のメモリ２１ではなく第２の転送制御回路３２に送信する（ステップＳ２）。このステップＳ２の処理は、例えば、第１のメモリ２１を書き込み先とする書き込み要求パケットが送信されることで行われる。
【００１９】
第２の転送制御回路３２は、第１の転送制御回路３１から送信されたデータＤＴを受信すると、受信したデータＤＴを第２のメモリ２２に格納する（ステップＳ３）とともに、受信したデータＤＴを第１の転送制御回路３１を介して第１のメモリ２１に格納する（ステップＳ４）。例えば、第２の転送制御回路３２は、受信したデータＤＴを図示しないバッファメモリに一時的に格納した後、このバッファメモリから読み出したデータＤＴを第２のメモリ２２と第１のメモリ２１とに転送する。なお、ステップＳ４の処理は、例えば、第２の転送制御回路３２が第１の転送制御回路３１からの書き込み要求パケットを第１の転送制御回路３１に転送することで行われる。
【００２０】
以上の処理によれば、プロセッサ１１が第１の転送制御回路３１にデータ転送を１回だけ要求することで、データＤＴが第１のメモリ２１と第２のメモリ２２とに二重化されて記録される。このため、例えば、プロセッサ１１が、データＤＴをバッファメモリ２３から第１のメモリ２１へ転送するように要求した後、データＤＴをバッファメモリ２３から第２のメモリ２２へ転送するように要求した場合と比較して、データの二重化に要する時間を短縮することができる。
【００２１】
例えば、プロセッサ１１が第１の転送制御回路３１にデータ転送を要求した際には、データ転送に要する実時間に対して無視できない長さのオーバヘッドが発生する。情報処理システム１では、プロセッサ１１がデータ転送を１回だけ要求するようにし、この要求に応じて、プロセッサ１１から独立した第２の転送制御回路３２というハードウェアが、データＤＴを２方向に転送するようにしたことで、発生するオーバヘッドの長さが短縮される。これにより、データの二重化に要する時間を短縮することができる。
【００２２】
また、第１の転送制御回路３１は、例えば、プロセッサとメモリとの間に配置されて、メモリとプロセッサ以外の周辺機器との間でデータを送受信する、一般的なメモリコントローラあるいはバスコントローラとして実現することができる。このような第１の転送制御回路３１に、周辺機器として第２の転送制御回路３２を接続した構成としたことで、情報処理システム１の基本的な内部構成を変えずに、データの二重化を高速化することができる。
【００２３】
〔第２の実施の形態〕
図２は、第２の実施の形態に係るストレージシステムの構成例を示す図である。
ストレージシステム１００は、ＣＭ（Controller Module）２００ａ，２００ｂ、ＣＢＵ（Cache Backup Unit）３００ａ，３００ｂおよびＤＥ（Drive Enclosure）４００を備える。また、ＣＭ２００ａ，２００ｂには、ホスト装置５００ａ，５００ｂが接続されている。
【００２４】
ＣＭ２００ａ，２００ｂのそれぞれは、ホスト装置からのＩＯ（In Out）要求に応じて、ＤＥ４００内の記憶装置に対するデータの読み書きを行う。例えば、ＣＭ２００ａ，２００ｂはそれぞれ、ホスト装置５００ａ，５００ｂのどちらからもＩＯ要求を受け付けることができる。なお、ＣＭ２００ａ，２００ｂに接続されるホスト装置の数は、図２のように２つに限らない。
【００２５】
また、ＣＭ２００ａは、自装置内のＲＡＭ（Random Access Memory）の記憶領域の一部をキャッシュ領域として使用し、ホスト装置からＤＥ４００への書き込みを要求された書き込みデータや、ＤＥ４００から読み出された読み出しデータを、キャッシュ領域に一時的に記録する。ＣＭ２００ｂも同様に、自装置内のＲＡＭの記憶領域の一部をキャッシュ領域として使用し、ホスト装置からＤＥ４００への書き込みを要求された書き込みデータや、ＤＥ４００から読み出された読み出しデータを、キャッシュ領域に一時的に記録する。
【００２６】
ＤＥ４００は、ＣＭ２００ａ，２００ｂからのアクセス制御対象となる複数の記憶装置を備える。本実施の形態のＤＥ４００は、記憶装置としてＨＤＤ（Hard Disk Drive）を備えるディスクアレイ装置である。なお、ＤＥ４００が備える記憶装置としては、ＳＳＤ（Solid State Drive）などの他の種類の不揮発性記憶装置を使用することもできる。また、ＣＭ２００ａ，２００ｂには、複数のＤＥ４００が接続されていてもよい。
【００２７】
ホスト装置５００ａは、ユーザの操作に応じて、ＣＭ２００ａ，２００ｂのいずれかに対してＤＥ４００内のＨＤＤへのアクセスを要求する。ホスト装置５００ａは、例えば、ユーザの操作に応じて、ＣＭ２００ａ，２００ｂのいずれかを通じて、ＤＥ４００内のＨＤＤからのデータの読み出しや、ＤＥ４００内のＨＤＤに対するデータの書き込みを行うことができる。ホスト装置５００ｂも、ホスト装置５００ａと同様の処理を実行可能である。
【００２８】
ＣＭ２００ａとＣＢＵ３００ａ、ＣＢＵ３００ａとＣＢＵ３００ｂ、ＣＢＵ３００ｂとＣＭ２００ｂは、それぞれＰＣＩｅバスによって接続されている。また、ＣＢＵ３００ａ，３００ｂはそれぞれ、不揮発性メモリとしてＮＡＮＤフラッシュを備えている。
【００２９】
ＣＢＵ３００ａは、ＣＭ２００ａのキャッシュ領域にデータが書き込まれるのに同期して、同じデータを自装置内のＮＡＮＤフラッシュにバックアップする。ＣＢＵ３００ｂは、ＣＭ２００ｂのキャッシュ領域にデータが書き込まれるのに同期して、同じデータを自装置内のＮＡＮＤフラッシュにバックアップする。
【００３０】
このように、ＣＭのキャッシュ領域のデータが不揮発性メモリであるＮＡＮＤフラッシュにバックアップされることで、ＣＭの動作が異常停止した場合でも、キャッシュ領域のデータが失われないようにすることができる。例えば、停電によってＣＭの動作が停止した際に、バックアップ領域を実現するメモリデバイスに電源を供給し続ける必要がなくなる。
【００３１】
また、キャッシュ領域のデータがＣＢＵのＮＡＮＤフラッシュにバックアップされることで、例えば、異常停止したＣＭが復旧したときに、復旧したＣＭは、ＣＢＵのＮＡＮＤフラッシュに記憶されたデータを自装置のキャッシュ領域に書き戻すことで、アクセス制御動作を即座に再開することができる。さらに、ＣＭのキャッシュ領域のデータのうち、ＤＥ４００のＨＤＤに書き込まれていないダーティデータが失われる事態を回避でき、ストレージシステム１００の信頼性が向上する。
【００３２】
また、図２のように、ＣＭ２００ａと、ＣＭ２００ａのキャッシュ領域のデータをバックアップするＣＢＵ３００ａとが分離されることで、例えば、ＣＭ２００ａが異常停止した場合に、他方のＣＭ２００ｂがＣＢＵ３００ａのＮＡＮＤフラッシュからデータを読み出すことができる。この場合、ＣＭ２００ｂは、読み出したデータを自装置のキャッシュ領域に格納して、ＣＭ２００ａが実行していたアクセス制御を即座に引き継ぐことができる。
【００３３】
また、例えば、特許文献１に記載の技術のように、一方のＣＭのキャッシュ領域のデータを他方のＣＭのＲＡＭにバックアップする場合には、各ＣＭのＲＡＭに他方のＣＭ用のバックアップ領域を確保する必要がある。これに対して、キャッシュ領域のデータをＣＢＵ内のＮＡＮＤフラッシュにバックアップすることにより、各ＣＭのＲＡＭの使用量を減らすことができる。
【００３４】
ところで、例えば、ホスト装置からの書き込み要求に応じて、ホスト装置から送信されたデータをＣＭ内のキャッシュ領域に書き込む場合には、キャッシュ領域へのデータの書き込みとＮＡＮＤフラッシュへのデータの書き込みという２回の書き込み動作が必要になる。このため、ホスト装置に応答するまでの時間が長くなる可能性がある。
【００３５】
これに対して、本実施の形態では、ＣＭのＣＰＵ（Central Processing Unit）が自装置内のキャッシュ領域を書き込み先としたＤＭＡ転送を１回要求すると、ＣＭ内のメモリコントローラが、書き込みデータをＣＢＵにＤＭＡ方式で転送する。ＣＢＵは、受信した書き込みデータをＣＭのキャッシュ領域と自装置内のＮＡＮＤフラッシュとに並列に書き込む。このように、ＤＭＡ転送が１回要求されるだけでデータがキャッシュ領域とＮＡＮＤフラッシュとに二重に書き込まれる構成としたことで、ホスト装置５００に対する応答時間が短縮される。
【００３６】
また、一般的にＮＡＮＤフラッシュは、データを上書きする際には、書き込まれているデータを一旦消去する必要があり、なおかつ、データを消去することが可能な最小領域は、データを読み書きすることが可能な最小領域より大きい、という性質がある。このことから、ランダムなデータをＮＡＮＤフラッシュに書き込む際の書き込み速度は、キャッシュ領域として使用されるＤＲＡＭ（Dynamic RAM）などの揮発性メモリと比較して遅い。
【００３７】
これに対して、本実施の形態のＣＢＵは、ＮＡＮＤフラッシュの記憶領域を、ページ単位の分割領域および複数ページ単位の分割領域といった大きさの異なる領域に分割して管理する。そして、ＣＢＵは、キャッシュ領域のデータをＮＡＮＤフラッシュに書き込む際に、書き込むデータの大きさに合致した分割領域に対してデータを書き込む。このような書き込み制御を行うことで、ＮＡＮＤフラッシュにおいて、内部の一部領域にのみ無効データを含むページがランダムに発生しにくくなり、その結果、上書きを伴う書き込みに要する時間が短くなる。
【００３８】
図３は、ＣＭおよびＣＢＵのハードウェア構成例を示す図である。
なお、この図３では例としてＣＭ２００ａおよびＣＢＵ３００ａについて説明するが、ＣＭ２００ｂはＣＭ２００ａと同様のハードウェア構成によって実現され、ＣＢＵ３００ｂはＣＢＵ３００ｂと同様のハードウェア構成によって実現される。また、ＣＭ２００ｂはＣＭ２００ａと同様の処理を実行可能であり、ＣＢＵ３００ｂはＣＢＵ３００ａと同様の処理を実行可能である。そこで、これ以後、主としてＣＭ２００ａおよびＣＢＵ３００ａの構成および処理について説明し、ＣＭ２００ｂおよびＣＢＵ３００ｂについての説明を適宜省略する。
【００３９】
ＣＭ２００ａは、ＣＰＵ２０１によって装置全体が制御されている。ＣＰＵ２０１には、ＲＡＭ２０２および周辺機器が、メモリコントローラ（ＭＣ）２０３を介して接続されている。ＲＡＭ２０２は、ＣＭ２００ａの主記憶装置として使用され、ＣＰＵ２０１に実行させるプログラムの少なくとも一部や、このプログラムによる処理に必要な各種データを一時的に記憶する。
【００４０】
ＣＰＵ２０１には、周辺機器の例として、ＳＳＤ２０４、ホストインタフェース（Ｉ／Ｆ）２０５およびディスクインタフェース（Ｉ／Ｆ）２０６が接続されている。
ＳＳＤ２０４は、ＣＭ２００ａの二次記憶装置として使用され、ＣＰＵ２０１によって実行されるプログラムやその実行に必要な各種のデータなどを記憶する。なお、二次記憶装置としては、例えば、ＨＤＤなどの他の種類の不揮発性記憶装置が使用されてもよい。
【００４１】
ホストインタフェース２０５は、ホスト装置５００との間でデータを送受信するインタフェース処理を実行する。ディスクインタフェース２０６は、ＤＥ４００内のＨＤＤとの間でデータを送受信するインタフェース処理を実行する。
【００４２】
メモリコントローラ２０３は、ＣＢＵ３００ａとＰＣＩｅバスを介して接続されている。メモリコントローラ２０３は、ＣＭ２００ａ内の周辺機器とＣＰＵ２０１との間のデータ転送や、ＣＰＵ２０１とＣＢＵ３００ａとの間のデータ転送を制御する。
【００４３】
また、メモリコントローラ２０３は、ＤＭＡコントローラ（ＤＭＡＣ）２０３ａを備えている。ＤＭＡコントローラ２０３ａは、ＣＰＵ２０１からのＤＭＡ転送要求に応じて、ＲＡＭ２０２内のデータをＲＡＭ２０２内の他の領域に書き込む処理や、ＲＡＭ２０２内のデータをＣＢＵ３００ａに転送する処理を、ＣＰＵ２０１とは独立して実行する。また、ＤＭＡコントローラ２０３ａは、他方のＣＭ２００ｂからＣＢＵ３００ｂ、ＣＢＵ３００ａを介して受信した情報に応じて、データ転送処理をＣＰＵ２０１とは独立して実行することもできる。
【００４４】
ＣＢＵ３００ａは、ＩＯ制御部３１０、ＮＡＮＤ制御部３２１、テーブル制御部３２２、ＤＭＡコントローラ（ＤＭＡＣ）３２３、ＮＡＮＤフラッシュ３３１およびＲＡＭ３３２を備えている。
【００４５】
ＩＯ制御部３１０は、ＰＣＩｅバスを通じたデータの送受信を制御する制御回路である。ＩＯ制御部３１０は、ＰＣＩｅバスを通じて受信した情報の宛先を判別して、受信した情報をＣＭ２００ａのメモリコントローラ２０３もしくはＣＢＵ３００ｂ、またはＮＡＮＤ制御部３２１に転送する。また、ＩＯ制御部３１０は、ＣＭ２００ａからの指示に応じてＤＭＡコントローラ３２３にＤＭＡ転送を要求し、ＮＡＮＤフラッシュ３３１に記録されたデータをＤＭＡコントローラ３２３の制御の下でＣＭ２００ａに転送することもできる。
【００４６】
また、ＩＯ制御部３１０の内部にはバッファメモリ３１１が設けられている。ＩＯ制御部３１０は、ＰＣＩｅバスを通じて送受信するデータをバッファメモリ３１１に一時的に格納する。なお、バッファメモリ３１１のメモリ領域は、ＲＡＭ３３２と共通化されていてもよい。
【００４７】
ＮＡＮＤ制御部３２１およびテーブル制御部３２２は、ＮＡＮＤフラッシュ３３１に対するアクセス制御を実現するための制御回路である。なお、ＮＡＮＤ制御部３２１とテーブル制御部３２２とは、個別の半導体装置として実現されてもよいし、あるいは１つの半導体装置として実現されてもよい。また、ＮＡＮＤ制御部３２１およびテーブル制御部３２２の少なくとも一方の機能が、ＩＯ制御部３１０と同じ半導体装置によって実現されてもよい。
【００４８】
テーブル制御部３２２は、ＮＡＮＤフラッシュ３３１の記憶領域を管理するためのテーブルをＲＡＭ３３２に登録する。後述するように、テーブル制御部３２２は、テーブルを用いて、ＮＡＮＤフラッシュ３３１の記憶領域を、少なくとも、ページ単位の領域と１つまたは複数のブロック単位の領域とに分けて管理する。ここで、ページはデータを読み書きする際の最小単位の領域であり、例えば４キロバイトの容量を有する。また、ブロックはデータを消去する際の最小単位の領域であり、例えば５１２キロバイトの容量を有する。
【００４９】
ＮＡＮＤ制御部３２１は、テーブル制御部３２２から書き込み先または読み出し元のアドレスの指定を受けて、ＮＡＮＤフラッシュ３３１に対するデータの書き込みや、ＮＡＮＤフラッシュ３３１からのデータの読み出しを行う。
【００５０】
ＤＭＡコントローラ３２３は、ＣＭ２００ａが異常停止したときに、ＣＭ２００ａのキャッシュ領域のデータを他方のＣＭ２００ｂに転送して、ＣＭ２００ａで行われていたＩＯ処理を復旧させるために設けられている。ＤＭＡコントローラ３２３は、他方のＣＭ２００ｂからの指示に応じて、ＮＡＮＤフラッシュ３３１にバックアップされた、キャッシュ領域のデータを、ＣＭ２００ｂに対して転送する。このデータ転送の際、ＤＭＡコントローラ３２３は、ＲＡＭ３３２に記憶されたテーブル情報を、テーブル制御部３２２を通じて取得することができる。
【００５１】
次に、ストレージシステム１００で実行の処理の詳細について説明する。以下の説明では、最初に、ＣＭのキャッシュ領域のデータを二重化する処理について説明し、その次に、ＣＢＵのＮＡＮＤフラッシュに対するアクセス制御処理について説明する。そして、その後に、これらの処理を実現するためのストレージシステム１００全体における処理について説明する。
【００５２】
（１）キャッシュ領域のデータの二重化処理
図４は、キャッシュ領域のデータの二重化処理を説明するための図である。
ＣＭ２００ａのＲＡＭ２０２には、バッファ領域２０２ａとキャッシュ領域２０２ｂとが確保される。ホスト装置は、ＣＭ２００ａに対してデータの書き込みを要求するとともに、書き込みデータを送信する。送信された書き込みデータは、ＣＭ２００ａのバッファ領域２０２ａに一時的に格納される。この後、ＣＭ２００ａは、バッファ領域２０２ａに格納された書き込みデータをキャッシュ領域２０２ｂに書き込むが、このときＣＭ２００ａは、同じ書き込みデータをＣＢＵ３００ａのＮＡＮＤフラッシュ３３１にも書き込み、書き込みデータを二重化する。
【００５３】
バッファ領域２０２ａからキャッシュ領域２０２ｂおよびＮＡＮＤフラッシュ３３１に書き込みデータを転送する処理は、ＤＭＡ方式で実行されることで、ＣＰＵ２０１の動作とは独立して高速に実行することができる。バッファ領域２０２ａからキャッシュ領域２０２ｂおよびＮＡＮＤフラッシュ３３１にデータがＤＭＡ転送される場合は、通常、ＣＰＵ２０１は、キャッシュ領域２０２ｂにデータを書き込むためのＤＭＡ転送要求と、ＮＡＮＤフラッシュ３３１にデータを書き込むためのＤＭＡ転送要求とを、個別に行う。このように、ＣＰＵ２０１がＤＭＡ転送を２回要求することで、ＣＰＵ２０１がホスト装置に対して書き込み完了を応答するまでの時間が長くなってしまうという問題がある。
【００５４】
これに対して、本実施の形態のストレージシステム１００では、ＣＰＵ２０１がＤＭＡ転送を１回要求することで、キャッシュ領域２０２ｂへのデータのＤＭＡ転送とＮＡＮＤフラッシュ３３１へのデータのＤＭＡ転送とが実行される。これにより、データの二重化に要する時間が短縮され、ホスト装置からの書き込み要求に対するＣＭ２００ａの応答速度が向上する。
【００５５】
以下、ホスト装置からＣＭ２００ａに対してデータの書き込み要求が送信された場合の処理について、順を追って説明する。
ホスト装置がＣＭ２００ａに対してデータの書き込みを要求すると、ホスト装置から送信された書き込みデータＷＤ１は、ＣＭ２００ａのバッファ領域２０２ａに一旦書き込まれる（ステップＳ１１）。ＣＭ２００ａのＣＰＵ２０１は、ＤＭＡコントローラ２０３ａに対して、読み出し元をバッファ領域２０２ａに指定し、書き込み先をキャッシュ領域２０２ｂに指定した書き込み動作を要求する（ステップＳ１２）。
【００５６】
ＤＭＡコントローラ２０３ａは、ＣＰＵ２０１からの要求に応じて、書き込みデータＷＤ１をバッファ領域２０２ａから読み出し、読み出した書き込みデータＷＤ１をキャッシュ領域２０２ｂではなくＣＢＵ３００ａに転送する（ステップＳ１３）。具体的には、ＤＭＡコントローラ２０３ａは、書き込みコマンドと、書き込み先としてキャッシュ領域２０２ｂの所定アドレスとを設定した書き込み要求パケットに、バッファ領域２０２ａから読み出した書き込みデータＷＤ１を格納し、その書き込み要求パケットをＣＢＵ３００ａに送信する。
【００５７】
ＣＢＵ３００ａのＩＯ制御部３１０は、ＣＭ２００ａから受信した書き込み要求パケットを、バッファメモリ３１１に一旦格納する。ＩＯ制御部３１０は、書き込み要求パケットに格納された書き込みデータＷＤ１を、ＣＢＵ３００ａ内のＮＡＮＤフラッシュ３３１に書き込む（ステップＳ１４）。これとともに、ＩＯ制御部３１０は、バッファメモリ３１１内の書き込み要求パケットを、ＣＭ２００ａのメモリコントローラ２０３に転送する（ステップＳ１５）。ＮＡＮＤフラッシュ３３１へのデータの書き込みとＣＭ２００ａへの書き込み要求パケットの転送は、例えば並列に実行される。ＣＭ２００ａのメモリコントローラ２０３は、ＣＢＵ３００ａから転送された書き込み要求パケットから書き込みデータＷＤ１を取り出し、キャッシュ領域２０２ｂに書き込む。
【００５８】
以上の処理によれば、ＣＭ２００ａのＣＰＵ２０１がＤＭＡ転送を１回要求すると、書き込みデータＷＤ１は自動的にＣＢＵ３００ａに転送される。そして、ＣＢＵ３００ａのＩＯ制御部３１０の処理によって、書き込みデータＷＤ１はＮＡＮＤフラッシュ３３１とキャッシュ領域２０２ｂとに転送される。このような処理により、ＣＰＵ２０１がＤＭＡ転送を要求する際のオーバヘッドが１回分しか生じなくなり、書き込みデータＷＤ１の二重化が完了して、ＣＰＵ２０１がホスト装置に対して書き込み完了の応答をできるようになるまでの時間が短縮される。
【００５９】
なお、バッファ領域２０２ａの書き込みデータＷＤ１をＣＭ２００ａの外部に転送するという上記のＤＭＡコントローラ２０３ａの機能は、本来、書き込みデータＷＤ１を外部のバックアップ領域に転送するための機能と言うことができる。例えば、この機能は、特許文献１の技術のように、ＣＭ２００ａに対応する一方のコントローラが、自装置内のキャッシュ領域のデータを、ＣＭ２００ｂに対応する他方のコントローラのキャッシュ領域に格納する際に使用されるものである。
【００６０】
本実施の形態では、この機能を応用し、後述するように、二重化要求であることを示す情報をヘッダ領域に設定しておくことで、書き込み要求パケットを受信したＣＢＵ３００ａが上記のステップＳ１４，Ｓ１５のような二重化処理を実行できるようにしている。さらに、書き込み要求パケットにおいて、書き込み先としてバックアップ領域ではなくキャッシュ領域２０２ｂのアドレスを設定しておくことで、ＣＢＵ３００ａから転送された書き込み要求パケットを受信したＣＭ２００ａのメモリコントローラ２０３が、書き込みデータＷＤ１をキャッシュ領域２０２ｂに格納できるようにしている。
【００６１】
ところで、ＣＭ２００ａ，２００ｂがともに正常に動作している環境では、ユーザに提供される複数の論理ボリュームのうち、どの論理ボリュームに対するアクセス制御をＣＭ２００ａが担当し、どの論理ボリュームに対するアクセス制御をＣＭ２００ｂが担当するかが、あらかじめ決められている。ここで、論理ボリュームとは、ＤＥ４００内のＨＤＤの物理記憶領域によって実現される論理的な記憶領域である。
【００６２】
このような環境では、例えば、ＣＭ２００ａは、ホスト装置から自装置が担当する論理ボリュームに対する書き込み要求を受け付けると、ホスト装置から受信した書き込みデータを、自装置のキャッシュ領域２０２ｂとＣＢＵ３００ａのＮＡＮＤフラッシュ３３１とに書き込む。また、ＣＭ２００ｂは、ホスト装置から自装置が担当する論理ボリュームに対する書き込み要求を受け付けると、ホスト装置から受信した書き込みデータを、自装置のキャッシュ領域２０２ｂとＣＢＵ３００ｂのＮＡＮＤフラッシュ３３１とに書き込む。
【００６３】
このように、ＣＢＵ３００ａのＮＡＮＤフラッシュ３３１には、ＣＭ２００ａが担当する論理ボリュームに書き込まれるデータがバックアップされる。一方、ＣＢＵ３００ｂのＮＡＮＤフラッシュ３３１には、ＣＭ２００ｂが担当する論理ボリュームに書き込まれるデータがバックアップされる。
【００６４】
しかしながら、一方のＣＭが、ホスト装置から、他方のＣＭが担当する論理ボリュームに対するアクセス要求を受け付ける場合もある。例えば、ホスト装置と他方のＣＭとの間の伝送路の負荷が高い場合や、その伝送路上で異常が発生している場合などである。この場合、一方のＣＭがホスト装置から受信した書き込みデータが、他方のＣＭ内のキャッシュ領域２０２ｂと、他方のＣＭに属するＣＢＵ内のＮＡＮＤフラッシュ３３１とに書き込まれる。
【００６５】
本実施の形態のストレージシステム１００では、このようなケースでも、キャッシュ領域２０２ｂおよびＮＡＮＤフラッシュ３３１への書き込みデータの二重化処理が１回のＤＭＡ転送要求に応じて行われるようにして、二重化処理の速度を向上させる。
【００６６】
図５は、ＣＭが、他方のＣＭが担当する論理ボリュームに対するアクセス要求を受けた場合のデータ二重化処理手順を説明するための図である。
ホスト装置がＣＭ２００ａに対してデータの書き込みを要求すると、ホスト装置から送信された書き込みデータＷＤ２は、ＣＭ２００ａのバッファ領域２０２ａに一旦書き込まれる（ステップＳ２１）。ＣＭ２００ａのＣＰＵ２０１は、ホスト装置からの書き込み要求が、他方のＣＭ２００ｂが担当する論理ボリュームに対するものである場合、ＣＭ２００ｂに対してＰＣＩｅパケットを送信して、書き込み要求先の論理ボリュームおよびアドレスを識別する情報を通知する（ステップＳ２２）。
【００６７】
ＣＭ２００ａからのＰＣＩｅパケットは、ＣＢＵ３００ａのＩＯ制御部（図示せず）およびＣＢＵ３００ｂのＩＯ制御部３１０を介して、ＣＭ２００ｂに転送される。ＣＭ２００ｂのＣＰＵ２０１は、ＣＭ２００ａからのＰＣＩｅパケットを受信すると、ＣＭ２００ｂのＤＭＡコントローラ２０３ａに対して、読み出し元をＣＭ２００ａに指定し、転送先をＣＭ２００ｂのキャッシュ領域２０２ｂに指定した読み出し動作を要求する（ステップＳ２３）。
【００６８】
ＣＭ２００ｂのＤＭＡコントローラ２０３ａは、ＣＰＵ２０１からの要求に応じて、ＣＭ２００ａに対して書き込みデータＷＤ２の読み出しを要求する（ステップＳ２４）。具体的には、ＣＭ２００ｂのＤＭＡコントローラ２０３ａは、読み出しコマンドと、転送先としてＣＭ２００ｂのキャッシュ領域２０２ｂの所定アドレスとを設定した読み出し要求パケットを、ＣＭ２００ａに送信する。
【００６９】
ＣＭ２００ｂのＤＭＡコントローラ２０３ａから送信された読み出し要求パケットは、ＣＢＵ３００ｂのＩＯ制御部３１０およびＣＢＵ３００ａのＩＯ制御部（図示せず）を介して、ＣＭ２００ａに転送される。ＣＭ２００ａのメモリコントローラ２０３は、ＣＭ２００ｂから読み出し要求パケットを受信すると、ＣＭ２００ａのバッファ領域２０２ａから書き込みデータＷＤ２を読み出し、読み出した書き込みデータＷＤ２を格納した応答パケットを返信する（ステップＳ２５）。返信された応答パケットは、ＣＢＵ３００ａのＩＯ制御部（図示せず）を介してＣＢＵ３００ｂに転送される。
【００７０】
ＣＢＵ３００ｂのＩＯ制御部３１０は、ＣＭ２００ａから受信した応答パケットを、バッファメモリ３１１に一旦格納する。ＣＢＵ３００ｂのＩＯ制御部３１０は、応答パケットに格納された書き込みデータＷＤ２を、ＣＢＵ３００ｂ内のＮＡＮＤフラッシュ３３１に書き込む（ステップＳ２６）。これとともに、ＣＢＵ３００ｂのＩＯ制御部３１０は、バッファメモリ３１１内の応答パケットを、ＣＭ２００ｂのＤＭＡコントローラ２０３ａに転送する（ステップＳ２７）。ＮＡＮＤフラッシュ３３１へのデータの書き込みとＣＭ２００ｂへの応答パケットの転送は、例えば並列に実行される。ＣＭ２００ｂのＤＭＡコントローラ２０３ａは、ＣＢＵ３００ｂから転送された応答パケットから書き込みデータＷＤ２を取り出し、キャッシュ領域２０２ｂに書き込む。
【００７１】
以上の処理によれば、ＣＭ２００ｂのＣＰＵ２０１が、ＣＭ２００ａのバッファ領域２０２ａからＣＭ２００ｂのキャッシュ領域２０２ｂへの書き込みデータＷＤ２のＤＭＡ転送と、ＣＭ２００ａのバッファ領域２０２ａからＣＢＵ３００ｂのＮＡＮＤフラッシュ３３１への書き込みデータＷＤ２のＤＭＡ転送とを個別に要求する場合と比較して、書き込みデータＷＤ２の二重化が完了するまでの処理時間が短縮される。従って、ホスト装置から書き込み要求を受け付けたＣＭ２００ａは、ホスト装置に対して短時間で書き込み完了の応答を行うことができる。
【００７２】
なお、図５に示した処理は、書き込みデータＷＤ２を他方のＣＭ２００ａから取得するためにＤＭＡコントローラ２０３ａが送信した読み出し要求パケットに対する応答パケットを、伝送路上のＣＢＵ３００ｂがキャプチャすることで、書き込みデータＷＤ２をＣＭ２００ｂだけでなくＣＢＵ３００ｂも取得できるようにしたものと言うことができる。本実施の形態では、二重化要求であることを示す情報を読み出し要求パケットのヘッダ領域に設定しておくことで、ＣＢＵ３００ｂが応答パケットから書き込みデータＷＤ２を取り込んでＮＡＮＤフラッシュ３３１に書き込むことができるようにしている。
【００７３】
（２）ＮＡＮＤフラッシュに対するアクセス制御処理
次に、ＣＢＵのＮＡＮＤフラッシュに対するアクセス制御処理について説明する。まず、図６を用いてＮＡＮＤフラッシュに対するアクセス制御処理の参考例を挙げ、この図６を用いてＮＡＮＤフラッシュにおける問題点を説明し、その後に本実施の形態のアクセス制御処理について説明する。
【００７４】
図６は、ＮＡＮＤフラッシュに対するブロック単位での書き込み処理手順の参考例を示す図である。
ＮＡＮＤフラッシュには一般的に、データを上書きする際には、書き込まれているデータを一旦消去する必要があり、なおかつ、データを消去することが可能な最小領域は、データを読み書きすることが可能な最小領域より大きい、という性質がある。データを読み書きすることが可能な最小領域は「ページ」と呼ばれ、以下、例として１ページは４キロバイトとする。また、データを消去することが可能な最小領域は「ブロック」と呼ばれ、以下、例として１ブロックは５１２キロバイトとする。上記のような性質から、ＮＡＮＤフラッシュについては、初期状態からある程度時間が経過するとデータのアクセス速度が低くなるという問題がある。
【００７５】
図６に示すＮＡＮＤフラッシュの参考例では、ＮＡＮＤフラッシュには、ユーザ領域Ａ１とスペア領域Ａ２とが設けられている。ＮＡＮＤフラッシュのコントローラ（図示せず）は、図６の状態１のようにＮＡＮＤフラッシュにデータが書き込まれていない初期状態から、データの書き込みが要求されると、図６の状態２のように、ＮＡＮＤフラッシュのユーザ領域Ａ１に対して順次データを書き込んでいく。コントローラは、データを書き込んだブロックのステータスを「有効」に変更する。
【００７６】
また、ＮＡＮＤフラッシュのコントローラは、ＮＡＮＤフラッシュにすでに記録されたデータの上書きが要求されると、上書きデータをＮＡＮＤフラッシュの別の空きブロックに書き込む。ここで、本実施の形態のＣＭは、ホスト装置から、５１２バイトごとに付与されたＬＢＡ（Logical Block Address）を単位として読み書きの要求を受ける。このため、ＮＡＮＤフラッシュの１ブロックに記録されたデータの一部のみ、すなわち、１ブロック内のページのうちの一部のみが、上書きの対象になることがある。ＮＡＮＤフラッシュのコントローラは、ＮＡＮＤフラッシュの１ブロック内の一部のページに対応するデータの上書きが要求された場合、上書きデータを別の空きブロックに書き込むとともに、上書き対象の元データが記録されているブロックのステータスを、その内部の一部のページが無効であることを示す「ダーティ」に変更する。
【００７７】
図６の状態３では、ＮＡＮＤフラッシュのコントローラは、ブロックＢ１内の一部のページに対応するデータの一部の上書きが要求されると、上書きデータを空きブロックであるブロックＢ１１に書き込むとともに、ブロックＢ１のステータスをダーティにする。同様に、コントローラは、ブロックＢ２内の一部のページに対応するデータの上書きが要求されると、上書きデータを空きブロックであるブロックＢ１２に書き込むとともに、ブロックＢ２のステータスをダーティにする。また、コントローラは、ブロックＢ３内の一部のページに対応するデータの上書きが要求されると、上書きデータを空きブロックであるブロックＢ１３に書き込むとともに、ブロックＢ３のステータスをダーティにする。以下、ステータスがダーティであるブロックを「ダーティブロック」と呼ぶ。
【００７８】
このようにして、ＮＡＮＤフラッシュではダーティブロックが増加していく。ダーティブロックが増加するほど、ＮＡＮＤフラッシュ全体の記憶容量と比較して、ＮＡＮＤフラッシュに実際に記録できるデータの容量が小さくなってしまう。そこで、ＮＡＮＤフラッシュのコントローラは、図６の状態４のようにＮＡＮＤフラッシュの空きブロック数が一定数以下になると、空きブロックを増やすための処理を実行する。
【００７９】
例えば、ＮＡＮＤフラッシュのコントローラは、図６の状態５に示すように、ステータスがダーティであるブロックＢ１，Ｂ４における有効ページのデータを、空きブロックであるブロックＢ１４にコピーする。また、コントローラは、ステータスがダーティであるブロックＢ５における有効ページのデータを、空きブロックであるブロックＢ１５にコピーする。これらのコピーが終了すると、ブロックＢ１，Ｂ４，Ｂ５の中のすべてのページが無効になる。コントローラは、図６の状態６のように、ブロックＢ１，Ｂ４，Ｂ５のデータを消去し、これらのブロックＢ１，Ｂ４，Ｂ５を空きブロックにする。
【００８０】
以上の図６の例のように、ＮＡＮＤフラッシュでは、空きブロックを確保する際に、有効ページのデータのコピー、およびコピーが済んだブロックのデータ消去が行われる。このようなデータのコピーおよび消去にＮＡＮＤフラッシュの内部バスの帯域を使用されることで、ＮＡＮＤフラッシュに対する外部からのアクセス速度が低下してしまうという問題があった。また、このような問題を解決するために、ＮＡＮＤフラッシュのフロントエンドにキャッシュメモリを搭載する方法があるが、この方法では回路規模や製造コストが大きくなってしまう。
【００８１】
そこで、本実施の形態では、ＣＢＵが次に説明するようなＮＡＮＤフラッシュのアクセス制御を行うことで、キャッシュメモリを用いることなく、ＮＡＮＤフラッシュに対するランダムなデータの書き込み速度を向上させる。以下、例としてＣＢＵ３００ａでの処理について説明するが、ＣＢＵ３００ｂも同様の処理を実行可能である。
【００８２】
図７は、ＣＢＵにおけるＮＡＮＤフラッシュの領域管理方法を説明するための図である。
ＣＢＵ３００ａは、ＮＡＮＤフラッシュ３３１の内部を、ユーザ領域Ｌ，Ｍ，Ｓという３つの領域に分けて管理する。ＣＢＵ３００ａは、ユーザ領域Ｓを、図６に示した参考例と同様に、ページ単位でデータが書き込まれるように管理する。また、ＣＢＵ３００ａは、ユーザ領域Ｌを、ブロック単位でデータが書き込まれるように管理する。また、ＣＢＵ３００ａは、ユーザ領域Ｍを、複数ページでかつブロックより小さい領域を単位としてデータが書き込まれるように管理する。
【００８３】
以下、ユーザ領域Ｌにおける書き込み単位の領域を「Ｌ−分割領域」、ユーザ領域Ｍにおける書き込み単位の領域を「Ｍ−分割領域」、ユーザ領域Ｓにおける書き込み単位の領域を「Ｓ−分割領域」と呼ぶ。なお、図７では、Ｌ−分割領域、Ｍ−分割領域およびＳ−分割領域のそれぞれの正確な大きさを示してはいない。
【００８４】
ＣＢＵ３００ａは、ＣＭ２００ａからＮＡＮＤフラッシュ３３１に対するデータの書き込み要求を受けたとき、書き込みデータの大きさに応じて、データの書き込み先をユーザ領域Ｌ，Ｍ，Ｓのいずれかに振り分ける。ＣＢＵ３００ａは、書き込みデータがＳ−分割領域の大きさ以下である場合には、書き込みデータをユーザ領域Ｓ内のいずれかのＳ−分割領域に書き込む。また、ＣＢＵ３００ａは、書き込みデータがＳ−分割領域の大きさより大きく、Ｍ−分割領域の大きさ以下である場合には、書き込みデータをユーザ領域Ｍ内のいずれかのＭ−分割領域に書き込む。また、ＣＢＵ３００ａは、書き込みデータがＭ−分割領域の大きさより大きく、Ｌ−分割領域の大きさ以下である場合には、書き込みデータをユーザ領域Ｌ内のいずれかのＬ−分割領域に書き込む。
【００８５】
なお、元の書き込みデータがＬ−分割領域の大きさより大きい場合には、例えば、元の書き込みデータが先頭からＬ−分割領域の大きさごとに分割される。そして、分割された書き込みデータが、１つまたは複数のＬ−分割領域と１つのＳ−分割領域または１つのＭ−分割領域に振り分けて書き込まれる。
【００８６】
図８は、各ユーザ領域に対するデータの書き込み処理例を示す図である。
ＣＢＵ３００ａは、ユーザ領域Ｌ，Ｍ，Ｓの全体が空き領域とされた初期状態から、データの書き込み要求を受けると、図８の状態１１に示すように、書き込みデータの大きさに応じたユーザ領域内の分割領域に、書き込みデータを書き込んでいく。また、ＣＢＵ３００ａは、ＮＡＮＤフラッシュ３３１内のある分割領域にすでに書き込まれたデータ全体を上書きするような書き込み要求を受けた場合、状態１２に示すような制御を行う。
【００８７】
例えば、ＣＢＵ３００ａは、Ｌ−分割領域Ａｌ１に書き込まれたデータ全体を上書きするような書き込み要求を受けたとき、新たな書き込みデータを新たなＬ−分割領域Ａｌ２に書き込む。これとともに、ＣＢＵ３００ａは、元のＬ−分割領域Ａｌ１のステータスを、有効なデータが記録されていない「無効」とする。その後、ＣＢＵ３００ａは、ユーザ領域Ｌに空きブロックを確保しようとする際に、図８の状態１３に示すように、ステータスが無効とされたＬ−分割領域Ａｌ１のデータを、他の分割領域にコピーすることなく、消去することができる。
【００８８】
一方、ＣＢＵ３００ａは例えば、Ｓ−分割領域Ａｓ１に書き込まれたデータを上書きするような書き込み要求を受けたとき、図８の状態１２に示すように、新たな書き込みデータを新たなＳ−分割領域Ａｓ２に書き込む。これとともに、ＣＢＵ３００ａは、元のＳ−分割領域Ａｓ１のステータスを無効にする。その後、ＣＢＵ３００ａは、Ｓ−分割領域Ａｓ１を含むブロックを空きブロックにしようとする際には、図８の状態１３に示すように、そのブロックにおける他のＳ−分割領域に記録されているデータを他の空きブロックにコピーする必要が生じる。
【００８９】
ここで、ホスト装置からＣＭ２００ａに対してあるデータの書き込みが要求された後、ホスト装置から同じデータの更新が要求されるケースでは、元のデータの全体が書き替えられることが多い。このため、Ｌ−分割領域に記録されたデータの上書きが要求された場合、元のデータが記録されたＬ−分割領域内のすべてのページのステータスが無効になる可能性が高い。従って、ユーザ領域Ｌでは、ユーザ領域Ｓと比較して、無効なページがランダムに発生する可能性が低くなり、空き領域を確保する際にデータのコピーが実行される可能性も低くなる。その結果、ランダムなデータの書き込み速度を向上させることができる。
【００９０】
次に、ユーザ領域Ｍにおけるデータの上書き処理の例について説明する。ここでは例として、Ｍ−分割領域の大きさはＬ−分割領域の１／２（すなわち、ブロックの１／２）であるものとする。
【００９１】
ＣＢＵ３００ａは例えば、Ｍ−分割領域Ａｍ１に書き込まれたデータの全体を上書きするような書き込み要求を受けたとき、図８の状態１２に示すように、新たな書き込みデータを新たなＭ−分割領域Ａｍ２に書き込む。これとともに、ＣＢＵ３００ａは、元のＭ−分割領域Ａｍ１のステータスを無効にする。また、ＣＢＵ３００ａは例えば、Ｍ−分割領域Ａｍ３に書き込まれたデータの全体を上書きするような書き込み要求を受けたとき、図８の状態１２に示すように、新たな書き込みデータを新たなＭ−分割領域Ａｍ４に書き込む。これとともに、ＣＢＵ３００ａは、元のＭ−分割領域Ａｍ３のステータスを無効にする。
【００９２】
ここで、Ｍ−分割領域Ａｍ１，Ａｍ３が１つのブロックを構成する領域であった場合、ＣＢＵ３００ａは、ユーザ領域Ｍに空きブロックを確保しようとする際に、図８の状態１３に示すように、ステータスが無効とされたＭ−分割領域Ａｍ１，Ａｍ３の各データを、他の分割領域にコピーすることなく消去することができる。
【００９３】
ユーザ領域Ｍでは、ユーザ領域Ｌと比較して、ブロックより小さい無効な領域がランダムに発生する可能性は高い。しかしながら、ユーザ領域Ｌでは複数ページを単位として書き込みが行われることから、図８のケースのように、１つのブロックを構成するすべてのＭ−分割領域のステータスが無効になる可能性が、ユーザ領域Ｓよりも高くなる。従って、ブロックより小さい複数ページの領域を単位として書き込みが行われるユーザ領域Ｍを用意しておくことで、空き領域を確保する際にデータのコピーが実行される可能性が低くなり、その結果、ランダムなデータの書き込み速度を向上させることができる。
【００９４】
ところで、以上の説明では、データを上書きする際の処理について説明したが、ＣＭ２００ａがライトバックを実行した際にも、無効ページがランダムに発生しにくくなるという効果が生じる。ライトバックとは、ＣＭ２００ａが、自装置のキャッシュ領域のデータをバックエンドの記憶領域（本実施の形態ではＤＥ４００）に書き戻す処理である。ＣＭ２００ａは、例えば、自装置のキャッシュ領域の使用率が一定以上になったとき、キャッシュ領域の空き領域を増やすためにライトバックを行う。これとともに、ＣＭ２００ａは、ライトバックを行ったデータに対応するＮＡＮＤフラッシュ３３１のデータを無効化するように、ＣＢＵ３００ａに要求する。このとき、ＮＡＮＤフラッシュ３３１でも、無効化が要求されたデータができるだけ早く消去されて、新規データを書き込み可能な空き領域が増やされることが望ましい。
【００９５】
上記のように、ＣＢＵ３００ａは、書き込みデータの書き込み先を、その大きさに応じてユーザ領域Ｌ，Ｍ，Ｓのいずれかに振り分ける。このため、ライトバックが済んだとき、ＮＡＮＤフラッシュ３３１における無効化すべき領域は、ユーザ領域Ｌ，Ｍ，Ｓのそれぞれにおける分割領域ごとに発生する。一方、分割領域のうちの一部のみが無効化すべき領域となって、その残りの領域に有効なデータが残る、という事態は起こらない。
【００９６】
例えば、ＣＭ２００ａのキャッシュ領域のデータのうち、図８の状態１１におけるＬ−分割領域Ａｌ１に対応するデータがライトバックされたとき、Ｌ−分割領域Ａｌ１内の全ページのデータが不要になり、無効化される。このため、ＣＢＵ３００ａは、Ｌ−分割領域Ａｌ１に記録されたデータを、他の分割領域にコピーすることなく、即座に消去することができる。従って、ＣＢＵ３００ａは、空きブロックを短時間で確保することができ、その際にＮＡＮＤフラッシュ３３１のデータバスの負荷が高くならないため、ＮＡＮＤフラッシュ３３１に対するランダムなデータの書き込み速度を向上させることができる。
【００９７】
また、例えば、ＣＭ２００ａのキャッシュ領域のデータのうち、図８の状態１１におけるＭ−分割領域Ａｍ１，Ａｍ３に対応するデータがライトバックされたとき、Ｍ−分割領域Ａｍ１，Ａｍ３の両方に含まれる全ページのデータが不要になり、これらの全ページが無効化される。この場合、ＣＢＵ３００ａは、Ｍ−分割領域Ａｍ１，Ａｍ３から構成されるブロック内のデータを、他の分割領域にコピーすることなく、即座に消去することができる。
【００９８】
このＭ−分割領域Ａｍ１，Ａｍ３の例のように、ライトバックが実行されたとき、ユーザ領域Ｍでは、ユーザ領域Ｓと比較して、ブロック単位で無効な領域が発生する確率が高くなる。このため、空き領域を確保する際にデータのコピーが実行される可能性が低くなり、その結果、ランダムなデータの書き込み速度を向上させることができる。
【００９９】
さらに、ライトバックの際に無効ページがランダムに発生しにくくなるという効果は、次の図９で説明するように、ＮＡＮＤフラッシュ３３１内の分割領域に記録されたデータの一部のみが上書きされた場合でも得られる。
【０１００】
図９は、分割領域内の一部のデータのみ上書きされる場合の処理例を示す図である。
図９の状態２１に示すようにユーザ領域Ｌ，Ｍ，Ｓにデータが書き込まれた状態から、ＣＢＵ３００ａはＣＭ２００ａから、例えば、Ｌ−分割領域Ａｌ３に記録されたデータの一部のみを上書きするような書き込み要求を受けたものとする。この場合ＣＢＵ３００ａは、図９の状態２２に示すように、上書きデータのサイズに応じた分割領域を選択する。上書きデータがページのサイズより大きく、Ｍ−分割領域のサイズ以下であった場合、ＣＢＵ３００ａは、上書きデータをユーザ領域ＭのＭ−分割領域Ａｍ５に書き込む。これとともに、ＣＢＵ３００ａは、Ｌ−分割領域Ａｌ３内のページのうち、上書きの対象とされたデータが記録されたページのみを無効化する。これにより、Ｌ−分割領域Ａｌ３のステータスは、一部のデータのみが有効な「ダーティ」となる。
【０１０１】
このような状態２２から、ＣＭ２００ａが、Ｌ−分割領域Ａｌ３およびＭ−分割領域Ａｍ５に対応するデータのライトバックを実行したとする。この場合、Ｌ−分割領域Ａｌ３およびＭ−分割領域Ａｍ５に記録されたすべてのデータが不要になる。このとき、Ｍ−分割領域Ａｍ５のステータスは、無効ページを含む「ダーティ」となるものの、Ｌ−分割領域Ａｌ３は、即座にデータを消去可能な状態になる。ＣＢＵ３００ａは、図９の状態２３に示すように、Ｌ−分割領域Ａｌ３に記録されたデータを、他の分割領域にコピーすることなく、即座に消去することができる。
【０１０２】
以上で説明したように、ＣＭ２００ａがライトバックを実行したことに伴って、ＮＡＮＤフラッシュ３３１内の対応するデータが無効化される際に、ＮＡＮＤフラッシュ３３１では、無効ページがランダムに発生しにくくなる。このため、空きブロックを確保する際にデータのコピーが実行される可能性が低くなり、その結果、ランダムなデータの書き込み速度を向上させることができる。
【０１０３】
ここで、前述のように、ＣＢＵ３００ａは、ＮＡＮＤフラッシュ３３１にデータを書き込む際、データの大きさに応じた分割領域にデータを書き込む。このため、ＣＭ２００ａがライトバックを行ったとき、ＮＡＮＤフラッシュ３３１における無効化すべきデータは、分割領域ごとに発生する。
【０１０４】
例えば図８において、ホスト装置からＣＭ２００ａに対してデータＤ１の書き込みが要求され、このデータＤ１がＮＡＮＤフラッシュ３３１のＬ−分割領域Ａｌ１に書き込まれたものとする。この後、ＣＭ２００ａがキャッシュ領域内のデータＤ１をライトバックした場合、ＣＢＵ３００ａは、ＮＡＮＤフラッシュ３３１のＬ−分割領域Ａｌ１を無効化すればよい。
【０１０５】
また、例えば図９において、ホスト装置からＣＭ２００ａに対してデータＤ２の書き込みが要求され、このデータＤ２がＮＡＮＤフラッシュ３３１のＬ−分割領域Ａｌ３に書き込まれたものとする。さらに、ホスト装置からＣＭ２００ａに対して、データＤ２の一部の上書きが要求され、その上書きデータ（データＤ２の一部を構成する新規データ）が図９の状態２２のようにＭ−分割領域Ａｍ５に書き込まれたとする。この後、ＣＭ２００ａがキャッシュ領域内のデータＤ２をライトバックした場合、ＣＢＵ３００ａは、ＮＡＮＤフラッシュ３３１のＬ−分割領域Ａｌ３およびＭ−分割領域Ａｍ５を無効化すればよい。
【０１０６】
このように、ＣＭ２００ａがライトバックを行ったとき、ＮＡＮＤフラッシュ３３１における無効化すべきデータは分割領域ごとに発生する。そこで、本実施の形態では、ＣＭ２００ａは、キャッシュ領域に格納されたデータがＮＡＮＤフラッシュ３３１におけるどの分割領域に格納されているかを、分割領域を識別するＩＤを用いて管理する。そして、ＣＭ２００ａは、ライトバックを行ったとき、ライトバックしたデータに対応するＩＤをＣＢＵ３００ａに通知することで、ライトバックしたデータに対応するＮＡＮＤフラッシュ３３１のデータの無効化を要求する。
【０１０７】
ＣＢＵ３００ａは、ＣＭ２００ａから受信したＩＤがＬ−分割領域を示すものであった場合、そのＬ−分割領域のデータを即座に消去することができる。また、ＣＢＵ３００ａは、ＣＭ２００ａから受信したＩＤがＭ−分割領域を示すものであった場合でも、受信したＩＤがＳ−分割領域を示す場合と比較して、ＩＤが示すＭ−分割領域を含むブロックのデータを即座に消去できる可能性が高くなる。
【０１０８】
従って、ＣＭ２００ａがライトバックを行ったときに、ＣＢＵ３００ａがＮＡＮＤフラッシュ３３１に空き領域を確保するのに要する平均時間が短縮される。また、ＮＡＮＤフラッシュ３３１に空き領域を確保する処理が実行されている間、ＮＡＮＤフラッシュ３３１のデータバスの負荷が軽減されるため、ＮＡＮＤフラッシュ３３１に対するランダムなデータの書き込み性能が劣化することも抑制される。従って、ＣＭ２００ａがライトバックを行ったときでも、ＣＭ２００ａは、ホスト装置から受信した書き込みデータをＮＡＮＤフラッシュ３３１に高速に書き込むことができ、ホスト装置に対して短時間で応答できるようになる。
【０１０９】
次に、図１０は、ＮＡＮＤフラッシュの記憶領域の管理に関連するデータテーブルの例を示す図である。ストレージシステム１００では、図７〜図９で説明したような書き込み制御を容易にするために、図１０に示すキャッシュ管理テーブル２２１、ＮＡＮＤ管理テーブル３５１およびＩＤ管理テーブル３５２が使用される。
【０１１０】
ＣＭ２００ａのＣＰＵ２０１は、ホスト装置からの要求に応じたＩＯ処理を実現するためのファームウェアの実行を開始すると、ＣＭ２００ａのＲＡＭ２０２にキャッシュ管理テーブル２２１を生成する。キャッシュ管理テーブル２２１は、ＲＡＭ２０２内のキャッシュ領域に格納されたデータを管理するために使用される。
【０１１１】
ここで、ＬＢＡとは、ＣＭ２００ａから提供される論理ボリュームに対してホスト装置がアクセスを要求する際の最小単位を示す論理アドレスであり、例として５１２バイトごとに付与されているものとする。以下の説明では、「ＬＢＡ＃（ｐ）」は、ＬＢＡの値が「ｐ」であることを示すものとする。
【０１１２】
キャッシュ管理テーブル２２１には、キャッシュ領域に格納されたデータの全ＬＢＡのそれぞれに対応するレコードが登録される。例えば、ホスト装置からＣＭ２００ａに対して複数のＬＢＡに跨る書き込みデータの書き込みが要求された場合、キャッシュ管理テーブル２２１には、それら複数のＬＢＡのそれぞれに対応するレコードが登録される。
【０１１３】
キャッシュ管理テーブル２２１のレコードには、ＬＢＡに対して「キャッシュアドレス」および「ＩＤ」が対応付けて登録される。キャッシュアドレスは、対応するデータが格納されたキャッシュ領域上の（すなわちＲＡＭ２０２上の）アドレスを示す。ＩＤは、対応するデータがＣＢＵ３００ａのＮＡＮＤフラッシュ３３１におけるどの分割領域にバックアップされているかを識別するための識別情報であり、後述するように、ＣＢＵ３００ａのテーブル制御部３２２からＣＭ２００ａに対して通知される。
【０１１４】
一方、ＣＢＵ３００ａが電源投入などに応じて起動すると、ＣＢＵ３００ａのテーブル制御部３２２は、ＣＢＵ３００ａのＲＡＭ２０２にＮＡＮＤ管理テーブル３５１およびＩＤ管理テーブル３５２を生成する。
【０１１５】
ＮＡＮＤ管理テーブル３５１には、ＮＡＮＤフラッシュ３３１内の全ページのそれぞれに対応するレコードが登録される。ＮＡＮＤ管理テーブル３５１の各レコードには、対応するページのアドレスを示す「ＮＡＮＤアドレス」に対して「ＬＢＡ」および「ステータス」が対応付けて記録される。なお、以下の説明では、「Ａｄｒ＃（ｘ）」は、ＮＡＮＤフラッシュ３３１におけるアドレスの値が「ｘ」であることを示すものとする。
【０１１６】
ＮＡＮＤ管理テーブル３５１のレコードにおけるＬＢＡは、対応するページに記録されているデータが、ＣＭ２００ａのキャッシュ領域に格納されたどのデータに対応するかを示す。ステータスは、対応するページにおけるデータの記録状態を識別するための情報である。ステータスは、データが記録されていない「未使用」、有効なデータが記録されている「有効」、無効なデータが記録されている「無効」のいずれかを示す。
【０１１７】
なお、ステータスが「無効」であるページは、そのページに記録されているデータを上書きする新たなデータが他のページに記録されていることを示す。また、ステータスが「無効」であるページに対してデータ消去処理が行われると、そのページのステータスは「未使用」に変更される。
【０１１８】
また、ＮＡＮＤ管理テーブル３５１のレコードにおけるＬＢＡは、ステータスが「有効」である場合のみ登録される。ＮＡＮＤ管理テーブル３５１のレコードにおけるＬＢＡは、例えば、ＣＭ２００ａが異常停止して、ＮＡＮＤフラッシュ３３１にバックアップされたデータが他方のＣＭ２００ｂのキャッシュ領域に読み込まれる際に、バックアップされたデータとともに読み込まれる。この場合、他方のＣＭ２００ｂは、読み込んだＬＢＡを用いることで、読み込んだデータを用いたＩＯ制御を引き継ぐことができる。さらに、ＮＡＮＤ管理テーブル２５１のレコードにおけるＬＢＡは、ＮＡＮＤフラッシュ３３１内の分割領域に記録されたデータの一部を上書きする際に、テーブル制御部３２２によって参照される。
【０１１９】
なお、本実施の形態では、１つのＬＢＡに対応付けられるデータのサイズは、ページサイズの１／８である。このため、隣接する複数ページにわたってデータが書き込まれた場合、ＮＡＮＤ管理テーブル３５１においてこれら複数ページに対応付けて登録されるＬＢＡは、８ずつ増加することになる。
【０１２０】
ＩＤ管理テーブル３５２は、テーブル制御部３２２が、ＮＡＮＤフラッシュ３３１内の分割領域のうちデータが書き込まれた分割領域を管理するために使用される。ＩＤ管理テーブル３５２には、有効なデータまたは無効なデータが記録された分割領域ごとにレコードが登録される。ＩＤ管理テーブル３５２の各レコードには、「ＩＤ」および「ＮＡＮＤアドレス」が登録される。
【０１２１】
ＩＤ管理テーブル３５２におけるＩＤは、対応する分割領域に対してテーブル制御部３２２がユニークに割り当てた識別情報である。ＩＤは、対応する分割領域の種別がユーザ領域Ｌ，Ｍ，Ｓのうちのどれであるかを識別可能な情報になっている。以下の説明では、ＩＤ＿Ｌ＃（ａ）は、Ｌ−分割領域に割り当てられたＩＤの値が「ａ」であることを示し、ＩＤ＿Ｍ＃（ｂ）は、Ｍ−分割領域に割り当てられたＩＤの値が「ｂ」であることを示し、ＩＤ＿Ｓ＃（ｃ）は、Ｓ−分割領域に割り当てられたＩＤの値が「ｃ」であることを示す。
【０１２２】
ＩＤ管理テーブル３５２におけるＮＡＮＤアドレスは、対応する分割領域のＮＡＮＤフラッシュ３３１における先頭アドレスを示す。例えば図１０において、ＩＤ＿Ｌ＃（ａ）が割り当てられたＬ−分割領域は、ＮＡＮＤフラッシュ３３１におけるＡｄｒ＃（ｘ）からＡｄｒ＃（ｘ＋Ｘ）までのページに対応する。
【０１２３】
ここで、ＣＢＵ３００ａのテーブル制御部３２２は、ＣＭ２００ａからデータの書き込み要求を受ける前に、書き込みデータのサイズに応じた分割領域を示すＩＤを生成して、ＣＭ２００ａに通知する。ＣＢＵ３００ａのテーブル制御部３２２は、ＣＭ２００ａから転送された書き込みデータを分割領域に書き込む際に、書き込み先の分割領域の先頭アドレスと、ＣＭ２００ａに通知したＩＤとを含むレコードを、ＩＤ管理テーブル３５２に登録する。
【０１２４】
一方、ＣＭ２００ａは、ＣＢＵ３００ａから通知されたＩＤを、キャッシュ領域における書き込みデータのＬＢＡに対応付けて、キャッシュ管理テーブル２２１に登録する。ＣＭ２００ａはその後、キャッシュ領域に登録されたデータをバックエンドの記憶領域にライトバックする際に、ライトバックするデータを無効化するようにＣＢＵ３００ａに要求する。この無効化の要求時に、ＣＭ２００ａは、データのＬＢＡの代わりに、キャッシュ管理テーブル２２１に登録された、ライトバックしたデータに対応するＩＤを、ＣＢＵ３００ａに通知する。
【０１２５】
このように、ＣＭ２００ａは、キャッシュ領域内のデータがバックアップされている、ＮＡＮＤフラッシュ３３１における分割領域を示すＩＤを認識しておくことで、データをライトバックする際に、そのデータに対応するバックアップデータが記録されたＮＡＮＤフラッシュ３３１における領域を、ＩＤを通知することでＣＢＵ３００ａに簡単に指定することができる。
【０１２６】
（３）ストレージシステム全体の処理例
次に、上記の（１）（２）に示した処理を実現するためにストレージシステム１００全体で実行される処理の例について説明する。
【０１２７】
まず、図１１は、ＰＣＩｅバスを通じて送受信されるパケットの構成例を示す図である。
ＰＣＩ  Ｅｘｐｒｅｓｓ規格では、トランザクションレイヤにおけるＰＣＩｅパケット（ＴＬＰ：Transaction Layer Packet）は、「ＴＬＰヘッダ」と、データが格納される「ペイロード」と、「オプション」とを含む。
【０１２８】
「ＴＬＰヘッダ」は、「Ｆｍｔ」、「Ｔｙｐｅ」、「Ｌｅｎｇｔｈ」および「Ａｄｄｒｅｓｓ」の各領域を含む。「Ｆｍｔ」および「Ｔｙｐｅ」に設定される情報によって、ＰＣＩｅパケットの種別が規定される。本実施の形態では、「Ｆｍｔ」および「Ｔｙｐｅ」に設定される情報により、ＰＣＩｅパケットは、書き込み要求パケット、読み出し要求パケット、および、その他の種別であるコントロールパケットのいずれかの種別とされる。
【０１２９】
「Ａｄｄｒｅｓｓ」には、基本的に、書き込み要求パケットの場合は書き込み先アドレスが、読み出し要求パケットの場合は読み出し元アドレスが設定される。一般的に、この「Ａｄｄｒｅｓｓ」における上位側は使用されないことが多い。そこで、本実施の形態のＣＭおよびＣＢＵは、「Ａｄｄｒｅｓｓ」における上位側のｍビット分の領域を、キャッシュバックアップ用制御領域として利用する。なお、以下の説明では、キャッシュバックアップ用制御領域を、その最上位ビットをｎとして「Ａｄｄｒ．［ｎ：ｎ−ｍ］」と表記する場合もある。
【０１３０】
キャッシュバックアップ用制御領域の上位側３ビット（Ａｄｄｒ．［ｎ：ｎ−２］）には、宛先判別用番号が設定される。後述するように、ＣＢＵのＩＯ制御部３１０は、ＰＣＩｅパケットを受信したポートの位置（ＣＭ側か、あるいはＣＢＵ側か）と、「Ｆｍｔ」および「Ｔｙｐｅ」で指定されるパケットの種別と、宛先判別用番号との組み合わせから、ＰＣＩｅバスを通じて受信したＰＣＩｅパケットの転送先を判定することができる。
【０１３１】
ＣＭおよびＣＢＵは、キャッシュバックアップ用制御領域の下位側（ｍ−３）ビット（Ａｄｄｒ．［ｎ−３：ｎ−ｍ］）に、ＮＡＮＤフラッシュにおける分割領域を識別するためのＩＤを設定することができる。すなわち、ＣＭおよびＣＢＵは、キャッシュバックアップ用制御領域の下位側（ｍ−３）ビットを用いて、他のＣＭまたはＣＢＵにＩＤを通知することができる。
【０１３２】
キャッシュバックアップ用制御領域の下位側（ｍ−３）ビットにＩＤが設定されている場合には、宛先判別用番号における下位側２ビット（Ａｄｄｒ．［ｎ−１：ｎ−２］）に、ＩＤがＬ−分割領域、Ｍ−分割領域、Ｓ−分割領域のどれを示すかによって異なる値が設定される。図１１に示すように、「００」はＬ−分割領域、「０１」はＭ−分割領域、「１１」はＳ−分割領域を示すものとする。
【０１３３】
なお、「Ａｄｄｒｅｓｓ」におけるキャッシュバックアップ用制御領域より下位側の領域（以下、単に「下位側領域」と言う）に設定される値は、場合によっては、パケット受信者が何の処理を要求されたかを識別するためにも使用される。
【０１３４】
図１２は、ＣＭのＲＡＭに確保される制御用領域の例を示す図である。
ＣＭ２００ａのＣＰＵ２０１は、ファームウェアを実行することにより、ＲＡＭ２０２に制御用領域を確保し、制御用領域に図１２に示すような値を格納する。なお、ＩＤ取得用アドレス２５１ａ〜２５１ｃ、ＣＭ−ＤＭＡ起動用アドレス２５２およびＣＢＵ−ＤＭＡ起動用アドレス２５４ａ，２５４ｂとしては、ファームウェアを実行したＣＰＵ２０１によって、あらかじめ決められた値がＲＡＭ２０２に書き込まれる。
【０１３５】
ＩＤ取得用アドレス２５１ａ〜２５１ｃは、ＣＭ２００ａのＣＰＵ２０１がホスト装置から新規のデータの書き込み要求を受けたときに、ＣＢＵ３００ａからＩＤを取得するためにＣＰＵ２０１によって読み出される。ＩＤ取得用アドレス２５１ａ，２５１ｂ，２５１ｃは、それぞれＬ−分割領域のＩＤ、Ｍ−分割領域のＩＤ、Ｓ−分割領域のＩＤを取得するために使用される。
【０１３６】
ＣＰＵ２０１は、「Ａｄｄｒｅｓｓ」の下位側領域にＩＤ取得用アドレス２５１ａ〜２５１ｃのいずれかを設定した読み出し要求パケットをＰＣＩｅバスに送信することで、設定したアドレスに対応する分割領域のＩＤの送信をＣＢＵ３００ａに要求する。また、ＣＰＵ２０１は、ＩＤを取得した後、「Ａｄｄｒｅｓｓ」の下位側領域に同じＩＤ取得用アドレスを設定した書き込み要求パケットをＰＣＩｅバスに送信することで、取得したＩＤに対応付けるＬＢＡをＣＢＵ３００ａに通知する。
【０１３７】
ＣＭ−ＤＭＡ起動用アドレス２５２およびＤＭＡディスクリプタ２５３は、ＣＰＵ２０１がＤＭＡコントローラ２０３ａに対してＤＭＡ転送を要求する際に使用される。
ＣＭ−ＤＭＡ起動用アドレス２５２は、ＤＭＡコントローラ２０３ａを起動するためにＣＰＵ２０１によって読み出される。
【０１３８】
ＤＭＡディスクリプタ２５３には、ＤＭＡコントローラ２０３ａに参照される情報が、ＣＰＵ２０１によって書き込まれる。ＤＭＡディスクリプタ２５３には、コマンド２５３ａ、転送サイズ２５３ｂ、第１アドレス２５３ｃおよび第２アドレス２５３ｄが設定される。
【０１３９】
コマンド２５３ａは、ＤＭＡ転送の方向を示すものであり、ＲＡＭ２０２からＣＭ２００ａの外部への転送か、あるいは、ＣＭ２００ａの外部からＲＡＭ２０２への転送かを示す。転送サイズ２５３ｂは、ＤＭＡ転送されるデータのサイズを示す。
【０１４０】
ＲＡＭ２０２からＣＭ２００ａの外部への転送が要求される場合、第１アドレス２５３ｃには、ＲＡＭ２０２における転送元アドレスが設定され、第２アドレス２５３ｄには、外部における転送先アドレスが設定される。この場合、ＤＭＡコントローラ２０３ａは、ＲＡＭ２０２から読み出したデータを第２アドレス２５３ｄに設定された外部のメモリ領域のアドレスに書き込むことを要求する書き込み要求パケットを、ＰＣＩｅバスに送信する。
【０１４１】
一方、ＣＭ２００ａの外部からＲＡＭ２０２への転送が要求される場合、第１アドレス２５３ｃには、ＲＡＭ２０２における転送先アドレスが設定され、第２アドレス２５３ｄには、外部における転送元アドレスが設定される。この場合、ＤＭＡコントローラ２０３ａは、第２アドレス２５３ｄに設定された外部のメモリ領域のアドレスからデータを読み出すことを要求する読み出し要求パケットを、ＰＣＩｅバスに送信する。
【０１４２】
なお、これらのいずれの場合でも、書き込み要求パケットおよび読み出し要求パケットの「Ｌｅｎｇｔｈ」には、転送サイズ２５３ｂに設定された値が格納される。
ＣＢＵ−ＤＭＡ起動用アドレス２５４ａ，２５４ｂは、ＣＢＵ３００ｂのＤＭＡコントローラ３２３を起動させる際に、ＣＭ２００ａのＣＰＵ２０１によって読み出される。ＣＭ２００ａのＣＰＵ２０１がＣＢＵ３００ｂのＤＭＡコントローラ３２３を起動させる場合とは、他方のＣＭ２００ｂが異常停止したときに、ＣＢＵ３００ｂのＮＡＮＤフラッシュ３３１に記録されたデータをＣＭ２００ａがＤＥ４００に書き戻すことで、ＣＭ２００ｂで行われていたＩＯ処理を復旧させる場合である。
【０１４３】
ＣＢＵ−ＤＭＡ起動用アドレス２５４ａ，２５４ｂは、ＣＭ２００ａのＣＰＵ２０１がデータの書き戻しのためにＣＭ２００ａのＲＡＭ２０２に確保するバッファ領域の先頭アドレスを示す。ＣＢＵ−ＤＭＡ起動用アドレスが複数用意されているのは、バッファ領域を複数用意できるようにするためである。ＣＭ２００ａのＣＰＵ２０１は、ＲＡＭ２０２から読み出したＣＢＵ−ＤＭＡ起動用アドレスを「Ａｄｄｒｅｓｓ」に設定した読み出し要求パケットをＣＢＵ３００ｂに送信することで、ＣＢＵ３００ｂのＤＭＡコントローラ３２３にＮＡＮＤフラッシュ３３１のデータを送信させる。
【０１４４】
次に、書き込みデータを二重化するための処理手順について、主にシーケンス図を用いて説明する。まず、図１３〜図１８を用いて、例として、ＣＭ２００ａが、自装置が担当する論理ボリュームに対する書き込み要求を受けた場合の処理について説明する。
【０１４５】
図１３は、自装置が担当する論理ボリュームに対する書き込み要求をＣＭが受けたときの処理例を示す第１のシーケンス図である。
［ステップＳ１０１］ホスト装置は、ＣＭ２００ａに対して書き込みを要求するとともに、書き込みデータを送信する。ＣＭ２００ａが受信した書き込みデータは、ホストインタフェース２０５およびメモリコントローラ２０３を介して、ＲＡＭ２０２のバッファ領域２０２ａに書き込まれる。
【０１４６】
［ステップＳ１０２］ＣＭ２００ａのＣＰＵ２０１は、書き込みが要求されたデータが属する論理ボリュームの番号（ＬＵＮ：Logical Unit Number）と、書き込みデータのＬＢＡとをチェックし、書き込みデータが、ＣＭ２００ａが担当する論理ボリュームに属するものかを判定する。この図１３の例では、書き込みデータは、ＣＭ２００ａが担当する論理ボリュームに属するデータであったものとする。
【０１４７】
［ステップＳ１０３］ＣＰＵ２０１は、受信した書き込みデータのＬＢＡが、キャッシュ管理テーブル２２１に登録されているかを判定する。この図１３の例では、受信した書き込みデータのＬＢＡがキャッシュ管理テーブル２２１に登録されていないものとする。この場合、ＣＰＵ２０１は、受信した書き込みデータがキャッシュ領域２０２ｂに新規に書き込まれるデータであると判定する。ＣＰＵ２０１は、キャッシュ管理テーブル２２１に、受信した書き込みデータのＬＢＡにそれぞれ対応するレコードを生成し、各レコードにＬＢＡを登録する。
【０１４８】
ここでは例として、キャッシュ管理テーブル２２１には、図１０に示すようにＬＢＡ＃（ｐ）〜ＬＢＡ＃（ｐ＋Ｐ）が登録されたものとする。
［ステップＳ１０４］ＣＰＵ２０１は、ＣＢＵ３００ａ宛てのＰＣＩｅパケットを送信して、ＣＢＵ３００ａに対してＩＤの通知を要求する。
【０１４９】
具体的には、ＣＰＵ２０１はまず、受信した書き込みデータのサイズに基づき、ＣＢＵ３００ａのＮＡＮＤフラッシュ３３１において書き込みデータを格納すべき分割領域が、Ｌ−分割領域、Ｍ−分割領域、Ｓ−分割領域のどれであるかを判定する。ＣＰＵ２０１は、書き込みデータのサイズがＳ−分割領域のサイズ以下である場合には、書き込み先をＳ−分割領域と判定する。また、ＣＰＵ２０１は、書き込みデータのサイズがＳ−分割領域のサイズより大きくＭ−分割領域のサイズ以下である場合には、書き込み先をＭ−分割領域と判定する。また、ＣＰＵ２０１は、書き込みデータのサイズがＭ−分割領域のサイズより大きくＬ−分割領域以下である場合には、書き込み先をＬ−分割領域と判定する。
【０１５０】
ＣＰＵ２０１は、ＣＢＵ３００ａに対して、判定した種別の分割領域を示すＩＤを通知するように要求する。ここでは例として、書き込み先がＬ−分割領域であると判定されたものとする。ＣＰＵ２０１は、読み出し要求パケットを生成し、読み出し要求パケットにおけるキャッシュバックアップ用制御領域に、宛先判別用番号として、宛先がＣＢＵ３００ａであることを指定し、かつ、Ｌ−分割領域を指定するための値を設定する。また、ＣＰＵ２０１は、ＲＡＭ２０２の制御用領域からＬ−分割領域用のＩＤ取得用アドレス２５１ａを読み出し、読み出し要求パケットの「Ａｄｄｒｅｓｓ」の下位側領域に設定する。ＣＰＵ２０１は、このように設定した読み出し要求パケットを、メモリコントローラ２０３およびＰＣＩｅバスを通じてＣＢＵ３００ａに送信する。
【０１５１】
［ステップＳ１０５］ＣＢＵ３００ａのＩＯ制御部３１０は、読み出し要求パケットを受信する。ＣＢＵ３００ａのテーブル制御部３２２は、受信したパケットの種別が読み出し要求パケットであることと、「Ａｄｄｒｅｓｓ」の下位側領域に設定された値とから、ＩＤの通知が要求されたことを認識する。
【０１５２】
テーブル制御部３２２は、宛先判別用番号の下位２ビットの値から、Ｌ−分割領域のＩＤの通知が要求されたと判断し、Ｌ−分割領域に割り当てるユニークなＩＤを生成する。ここでは例として、図１０に示したＩＤ＿Ｌ＃（ａ）が生成されたものとする。テーブル制御部３２２は、生成したＩＤをキャッシュバックアップ用制御領域の下位側領域（Ａｄｄｒ．［ｎ−３：ｎ−ｍ］）に設定した応答パケットを、ＩＯ制御部３１０を通じてＣＭ２００ａに送信する。
【０１５３】
なお、本実施の形態では、ステップＳ１０４において、ＣＭ２００ａのＣＰＵ２０１が書き込みデータのサイズに対応する分割領域の種別を判定しているが、他の例として、分割領域の種別判定がＣＢＵ３００ａ側で行われてもよい。この場合例えば、ステップＳ１０４において、ＣＭ２００ａのＣＰＵ２０１は書き込みデータのサイズをＣＢＵ３００ａに通知する。そして、ステップＳ１０５において、ＣＢＵ３００ａのテーブル制御部３２２は、通知されたサイズに対応する分割領域の種別を判定するとともに、判定した種別に対応するＩＤを生成して、ＣＭ２００ａに通知する。
【０１５４】
［ステップＳ１０６］ＣＭ２００ａのＣＰＵ２０１は、ＣＢＵ３００ａから送信された応答パケットからＩＤを抽出し、ステップＳ１０３でキャッシュ管理テーブル２２１に生成したレコードに登録する。この例は、図１０に示すように、キャッシュ管理テーブル２２１において、ＬＢＡ＃（ｐ）〜ＬＢＡ＃（ｐ＋Ｐ）のすべてに対応付けてＩＤ＿Ｌ＃（ａ）が登録される。これにより、書き込みデータにＩＤが対応付けられる。
【０１５５】
［ステップＳ１０７］ＣＰＵ２０１は、ＣＢＵ３００ａ宛てのＰＣＩｅパケットを送信して、ＣＢＵ３００ａから通知されたＩＤに対応付けたＬＢＡを、ＣＢＵ３００ａに通知する。
【０１５６】
具体的には、ＣＰＵ２０１は、読み出し要求パケットを生成する。ＣＰＵ２０１は、読み出し要求パケットにおけるキャッシュバックアップ用制御領域に、宛先がＣＢＵ３００ａであることを示すように設定し、読み出し要求パケットの「Ａｄｄｒｅｓｓ」の下位側領域に、Ｌ−分割領域用のＩＤ取得用アドレス２５１ａを設定する。さらに、ＣＰＵ２０１は、書き込みデータの先頭ＬＢＡと、書き込みデータのサイズを、それぞれ書き込み要求パケットにおけるペイロード、「Ｌｅｎｇｔｈ」に設定する。ＣＰＵ２０１は、このように設定した書き込み要求パケットを、メモリコントローラ２０３およびＰＣＩｅバスを通じてＣＢＵ３００ａに送信する。
【０１５７】
［ステップＳ１０８］ＣＢＵ３００ａのＩＯ制御部３１０は、書き込み要求パケットを受信する。ＣＢＵ３００ａのテーブル制御部３２２は、受信したパケットの種別が書き込み要求パケットであることと、「Ａｄｄｒｅｓｓ」の下位側領域に設定された値とから、ＬＢＡが通知されたことを認識する。
【０１５８】
テーブル制御部３２２は、書き込み要求パケットから、書き込みデータの先頭ＬＢＡおよびサイズを抽出し、抽出した情報を、ステップＳ１０５で割り当てたＩＤに対応付けて、ＲＡＭ３３２に一時的に格納する。テーブル制御部３２２は、ＩＯ制御部３１０を通じて、ＣＭ２００ａに応答パケットを送信する。
【０１５９】
［ステップＳ１０９］ＣＭ２００ａのＣＰＵ２０１は、応答パケットを受信すると、ＤＭＡコントローラ２０３ａを起動させて、書き込みデータを二重化するためのＤＭＡ転送を要求する。
【０１６０】
具体的には、ＣＰＵ２０１は、ＲＡＭ２０２からＣＭ−ＤＭＡ起動用アドレス２５２（図１２参照）を読み出し、読み出したアドレスをメモリコントローラ２０３に通知することで、ＤＭＡコントローラ２０３ａを起動させる。さらに、ＣＰＵ２０１は、ＤＭＡディスクリプタ２５３（図１２参照）に対して次のような設定を行うことで、ＤＭＡコントローラ２０３ａに、ＲＡＭ２０２のキャッシュ領域２０２ｂを書き込み先としたＤＭＡ書き込み処理を実行させる。
【０１６１】
ＣＰＵ２０１は、コマンド２５３ａに、ＲＡＭ２０２から外部への転送を示す値を設定する。これによりＤＭＡコントローラ２０３ａは、書き込み要求パケットを生成する。また、ＣＰＵ２０１は、転送サイズ２５３ｂに、二重化する書き込みデータのサイズを設定する。ＤＭＡコントローラ２０３ａは、書き込み要求パケットの「Ｌｅｎｇｔｈ」に、転送サイズ２５３ｂに設定された値を格納する。
【０１６２】
また、ＣＰＵ２０１は、第１アドレス２５３ｃに、ＲＡＭ２０２のバッファ領域２０２ａにおける書き込みデータのアドレスを設定する。一方、第２アドレス２５３ｄに設定される情報は、ＤＭＡコントローラ２０３ａから送信される書き込み要求パケットの「Ａｄｄｒｅｓｓ」に格納されるものである。ＣＰＵ２０１は、書き込みデータを格納するためのＲＡＭ２０２におけるキャッシュ領域２０２ｂのアドレスを決定し、決定したキャッシュ領域２０２ｂにおける先頭アドレスを、「Ａｄｄｒｅｓｓ」の下位側領域に対応する第２アドレス２５３ｄの領域に設定する。これとともに、ＣＰＵ２０１は、キャッシュバックアップ用制御領域に対応する第２アドレス２５３ｄの領域に、宛先がＣＢＵ３００ａであることを示すような宛先判別用番号と、ＣＢＵ３００ａに通知するＩＤとを設定する。
【０１６３】
さらに、ＣＰＵ２０１は、決定したキャッシュ領域２０２ｂのアドレスを、ステップＳ１０３でキャッシュ管理テーブル２２１に生成したレコードに登録する。
［ステップＳ１１０］ＤＭＡコントローラ２０３ａは、ＲＡＭ２０２のバッファ領域２０２ａから、ステップＳ１０１で書き込まれた書き込みデータを読み出す。
【０１６４】
［ステップＳ１１１］ＤＭＡコントローラ２０３ａは、ＤＭＡディスクリプタ２５３に設定された情報に基づき、読み出した書き込みデータを格納した書き込み要求パケットを、ＣＢＵ３００ａに送信する。
【０１６５】
このとき送信される書き込み要求パケットにおいては、ステップＳ１０５でＣＢＵ３００ａから通知されたＩＤ（この例ではＩＤ＿Ｌ＃（ａ））、キャッシュ領域２０２ｂにおける書き込み先アドレス、書き込みデータのサイズなどが設定されている。
【０１６６】
［ステップＳ１１２］ＣＢＵ３００ａのＩＯ制御部３１０は、受信した書き込み要求パケットをバッファメモリ３１１に格納し、書き込み要求パケット内の書き込みデータを二重化するための処理を実行する。
【０１６７】
ＩＯ制御部３１０は、ＮＡＮＤ制御部３２１およびテーブル制御部３２２に対して、書き込みデータをＮＡＮＤフラッシュ３３１に書き込むための処理を実行するように指示する。例えば、ＩＯ制御部３１０は、テーブル制御部３２２に、書き込み要求パケットに設定されたＩＤの読み取りを指示するとともに、ＮＡＮＤ制御部３２１に、テーブル制御部３２２から通知されるＮＡＮＤフラッシュ３３１のアドレスに書き込みデータを書き込むように指示する。
【０１６８】
これとともに、ＩＯ制御部３１０は、受信した書き込み要求パケットをＣＭ２００ａに転送して、キャッシュ領域２０２ｂに対する書き込みを要求する。
［ステップＳ１１３］テーブル制御部３２２は、書き込み要求パケットに設定されたＩＤが、ＩＤ管理テーブル３５２に登録されているかをチェックする。図１３の処理では、ＩＤはステップＳ１０５で新規に割り当てられたものであるので、ＩＤはＩＤ管理テーブル３５２に登録されていない。
【０１６９】
［ステップＳ１１４］ステップＳ１１３で、ＩＤがＩＤ管理テーブル３５２に登録されていないと判定した場合、テーブル制御部３２２は、ＩＤをＩＤ管理テーブル３５２に登録する。このとき、ＩＤは、Ｌ−分割領域、Ｍ−分割領域、Ｓ−分割領域のどれに対応するかが識別可能な状態で、ＩＤ管理テーブル３５２に登録される。
【０１７０】
また、テーブル制御部３２２は、ＩＤに対して分割領域のアドレスを割り当てる。具体的には、テーブル制御部３２２は、ＮＡＮＤ管理テーブル３５１を参照して、ＩＤに対応する種別の分割領域のうち、分割領域全体のページのステータスが「未使用」である分割領域を選択する。この例では、ＩＤはＬ−分割領域を示すＩＤ＿Ｌ＃（ａ）であるので、テーブル制御部３２２は、内部の全ページのステータスが「未使用」であるＬ−分割領域を選択する。
【０１７１】
テーブル制御部３２２は、ＩＤ管理テーブル３５２にレコードを生成し、生成したレコードに、選択した分割領域のＮＡＮＤフラッシュ３３１における先頭アドレスとＩＤとを登録する。この例では、ＩＤ管理テーブル３５２には、図１０のようにＩＤ＿Ｌ（ａ）とＡｄｒ＃（ｘ）とが対応付けられたレコードが登録される。
【０１７２】
さらに、テーブル制御部３２２は、ＮＡＮＤ管理テーブル３５１において、選択した分割領域に対応するアドレスのそれぞれに対して、書き込みデータのＬＢＡを登録する。具体的には、テーブル制御部３２２は、ステップＳ１０８でＲＡＭ３３２に一時的に格納しておいた先頭ＬＢＡおよびサイズを読み出す。テーブル制御部３２２は、読み出した先頭ＬＢＡを、ＮＡＮＤ管理テーブル３５１のレコードのうち、選択した分割領域における先頭アドレスのレコードに登録する。また、テーブル制御部３２２は、ＮＡＮＤ管理テーブル３５１における次のアドレスに対応するレコードに、前のレコードに登録されたＬＢＡに８を加算したＬＢＡを登録する。
【０１７３】
以後、テーブル制御部３２２は、ＲＡＭ３３２から読み出したサイズに対応する数のレコードに、８ずつ加算したＬＢＡを順次登録していく。このようにして、ＮＡＮＤ管理テーブル３５１において、書き込みデータに対応するＬＢＡと、各ＬＢＡに対応する部分データのＮＡＮＤフラッシュ３３１におけるアドレスとが対応付けられる。なお、選択された分割領域がＳ−分割領域である場合、ＬＢＡはＮＡＮＤ管理テーブル３５１における１つのレコードにのみ登録される。
【０１７４】
ここでは例として、テーブル制御部３２２は、図１０に示すように、ＮＡＮＤフラッシュ３３１におけるＡｄｒ＃（ｘ）からＡｄｒ＃（ｘ＋Ｘ）までのＬ−分割領域を、ＩＤ＿Ｌ＃（ａ）に割り当てたものとする。また、例えば、書き込みデータのサイズがＬ−分割領域と同じであったとすると、ＮＡＮＤ管理テーブル３５１では、Ａｄｒ＃（ｘ）からＡｄｒ＃（ｘ＋Ｘ）までの全レコードにＬＢＡが登録される。なお、書き込みデータのサイズがＬ−分割領域より小さい場合には、Ａｄｒ＃（ｘ）からＡｄｒ＃（ｘ＋Ｘ）までのアドレスのうち、書き込みデータが記録されるアドレスにのみ、ＬＢＡが対応付けて登録される。
【０１７５】
［ステップＳ１１５］テーブル制御部３２２は、ステップＳ１１４でＮＡＮＤ管理テーブル３５１に登録したＮＡＮＤフラッシュ３３１におけるアドレスを、ＮＡＮＤ制御部３２１に通知する。ＮＡＮＤ制御部３２１は、ステップＳ１１２でバッファメモリ３１１に書き込まれた書き込み要求パケットのペイロードから書き込みデータを順次読み出し、ＮＡＮＤフラッシュ３３１におけるテーブル制御部３２２から通知されたアドレスに書き込む。また、テーブル制御部３２２は、ＮＡＮＤ管理テーブル３５１のレコードのうち、ＮＡＮＤ制御部３２１によってデータが書き込まれたアドレスに対応するレコードのステータスを「有効」に更新する。
【０１７６】
ここでは例として、ＮＡＮＤフラッシュ３３１におけるＡｄｒ＃（ｘ）からＡｄｒ＃（ｘ＋Ｘ）までの全領域に書き込みデータが書き込まれる。このため、図１０に示すように、ＮＡＮＤ管理テーブル３５１のレコードのうち、Ａｄｒ＃（ｘ）からＡｄｒ＃（ｘ＋Ｘ）までのすべてのレコードのステータスが「有効」になる。
【０１７７】
［ステップＳ１１６］ＣＭ２００ａのメモリコントローラ２０３は、ステップＳ１１２でＣＢＵ３００ａから送信された書き込み要求パケットを受信すると、書き込み要求パケットに設定されたキャッシュ領域２０２ｂのアドレスに、書き込み要求パケットに格納された書き込みデータを書き込む。
【０１７８】
以上の処理により、書き込みデータは、ＣＭ２００ａのキャッシュ領域２０２ｂと、ＣＢＵ３００ａのＮＡＮＤフラッシュ３３１とに二重化される。なお、ステップＳ１１２での、ＣＢＵ３００ａのＩＯ制御部３１０からＣＭ２００ａへの書き込み要求パケットの送信処理と、ステップＳ１１５でのバッファメモリ３１１からＮＡＮＤフラッシュ３３１への書き込みデータの転送処理とは、並列に実行されてもよい。
【０１７９】
［ステップＳ１１７］ＣＢＵ３００ａのＩＯ制御部３１０は、ＰＣＩｅバスを通じて、ＣＭ２００ａに対して二重化処理の完了を割り込みによって通知する。
［ステップＳ１１８］ＣＭ２００ａのＣＰＵ２０１は、ＣＢＵ３００ａからの二重化処理の完了通知を受信すると、ホスト装置に対して書き込みの完了の応答を返す。
【０１８０】
次に、図１４は、自装置が担当する論理ボリュームに対する書き込み要求をＣＭが受けたときの処理例を示す第２のシーケンス図である。この図１４の処理は、図１３の処理によってホスト装置から書き込みが要求された書き込みデータの全体を上書きするような書き込み要求が、ホスト装置からＣＭ２００ａに送信された場合のものである。
【０１８１】
［ステップＳ１３１］ホスト装置は、ＣＭ２００ａに対して、図１３のステップＳ１０１で書き込みを要求した書き込みデータと同じＬＢＡに対応する書き込みデータを送信して、書き込みを要求する。ＣＭ２００ａが受信した書き込みデータは、ホストインタフェース２０５およびメモリコントローラ２０３を介して、ＲＡＭ２０２のバッファ領域２０２ａに書き込まれる。
【０１８２】
［ステップＳ１３２］ＣＭ２００ａのＣＰＵ２０１は、書き込みを要求されたデータが属する論理ボリュームの番号（ＬＵＮ）と、書き込みデータのＬＢＡとをチェックし、書き込みデータが、ＣＭ２００ａが担当する論理ボリュームに属するものかを判定する。この図１４の例では、書き込みデータは、ＣＭ２００ａが担当する論理ボリュームに属するデータである。
【０１８３】
［ステップＳ１３３］ＣＰＵ２０１は、受信した書き込みデータのＬＢＡが、キャッシュ管理テーブル２２１に登録されているかを判定する。この例では、受信した書き込みデータのＬＢＡはＬＢＡ＃（ｐ）〜ＬＢＡ＃（ｐ＋Ｐ）であり、これらのＬＢＡはキャッシュ管理テーブル２２１に登録されている。この場合、ＣＰＵ２０１は、受信した書き込みデータがキャッシュ領域２０２ｂにすでに格納されているデータであると判定する。
【０１８４】
［ステップＳ１３４］ＣＰＵ２０１は、ホスト装置から要求された上書きの種別が「全面上書き」か、あるいは「一部上書き」かを判定する。
例えば、ＣＰＵ２０１は、受信した書き込みデータが、キャッシュ領域２０２ｂに格納されている上書き対象のデータに内包されており、かつ、受信した書き込みデータのサイズが、上書き対象のデータより小さい、という条件を満たす場合に、一部上書きが要求されたと判定する。より具体的には、ＣＰＵ２０１は、受信した書き込みデータのＬＢＡ範囲が、キャッシュ管理テーブル２２１に登録されているシーケンシャルなＬＢＡ範囲に内包されており、かつ互いのＬＢＡ範囲が完全一致していない場合に、一部上書きが要求されたと判定する。
【０１８５】
一方、ＣＰＵ２０１は、例えば、受信した書き込みデータのＬＢＡ範囲が、キャッシュ領域２０２ｂに格納されている上書き対象のデータのＬＢＡ範囲と完全一致する場合に、全面上書きが要求されたと判定する。さらに、ＣＰＵ２０１は、例えば、キャッシュ領域２０２ｂに格納されている上書き対象のデータのＬＢＡ範囲が、受信した書き込みデータのＬＢＡ範囲を内包し、かつ、受信した書き込みデータのＬＢＡ範囲より大きい場合にも、全面上書きが要求されたと判定してもよい。
【０１８６】
この例では、受信した書き込みデータのＬＢＡ範囲と、キャッシュ領域２０２ｂに格納されている上書き対象のデータのＬＢＡ範囲は、ともにＬＢＡ＃（ｐ）〜ＬＢＡ＃（ｐ＋Ｐ）であることから、ＣＰＵ２０１は全面上書きが要求されたと判定する。この場合、次のステップＳ１３５に示すように、新たなＩＤをＣＢＵ３００ａから取得することなく、受信した書き込みデータを二重化するための処理が開始される。
【０１８７】
［ステップＳ１３５］ＣＰＵ２０１は、ＤＭＡコントローラ２０３ａを起動させて、書き込みデータを二重化するためのＤＭＡ転送を要求する。
このステップＳ１３５での処理は、次の点を除けば、図１３のステップＳ１０９の処理と同様である。ステップＳ１３５では、ＣＰＵ２０１は、キャッシュ管理テーブル２２１から、受信した書き込みデータのＬＢＡに対応付けられたＩＤを読み出し、ＤＭＡディスクリプタ２５３の第２アドレス２５３ｄにおけるキャッシュバックアップ用制御領域に対応する領域に設定する。これにより、ＣＰＵ２０１は、上書きするデータを書き込むべき、ＮＡＮＤフラッシュ３３１における分割領域のＩＤを、自ら決定してＣＢＵ３００ａに指定することができる。この例では、ＤＭＡディスクリプタ２５３を設定されるＩＤは、ＩＤ＿Ｌ＃（ａ）となる。
【０１８８】
［ステップＳ１３６］ＤＭＡコントローラ２０３ａは、ＲＡＭ２０２のバッファ領域２０２ａから、ステップＳ１３１で書き込まれた書き込みデータを読み出す。
［ステップＳ１３７］ＤＭＡコントローラ２０３ａは、読み出した書き込みデータを格納した書き込み要求パケットを、ＣＢＵ３００ａに送信する。
【０１８９】
このとき送信される書き込み要求パケットにおいては、ステップＳ１３５でＣＰＵ２０１がＤＭＡディスクリプタ２５３に設定したＩＤ（この例ではＩＤ＿Ｌ＃（ａ））、キャッシュ領域２０２ｂにおける書き込み先アドレス、書き込みデータのサイズなどが設定されている。
【０１９０】
［ステップＳ１３８］ＣＢＵ３００ａのＩＯ制御部３１０は、受信した書き込み要求パケットをバッファメモリ３１１に格納し、書き込み要求パケット内の書き込みデータを二重化するための処理を実行する。ＩＯ制御部３１０は、ＮＡＮＤ制御部３２１およびテーブル制御部３２２に対して、書き込みデータをＮＡＮＤフラッシュ３３１に書き込むための処理を実行するように指示する。これとともに、ＩＯ制御部３１０は、受信した書き込み要求パケットをＣＭ２００ａに転送して、キャッシュ領域２０２ｂに対する書き込みを要求する。
【０１９１】
［ステップＳ１３９］テーブル制御部３２２は、書き込み要求パケットに設定されたＩＤが、ＩＤ管理テーブル３５２に登録されているかをチェックする。この例では、書き込み要求パケットにはＩＤ＿Ｌ＃（ａ）が設定され、このＩＤ＿Ｌ＃（ａ）はＩＤ管理テーブル３５２にすでに登録されている。この場合、次のステップＳ１４０の処理が実行される。
【０１９２】
［ステップＳ１４０］テーブル制御部３２２は、ＩＤ管理テーブル３５２から、書き込み要求パケットに設定されたＩＤが登録されたレコードを選択し、選択したレコードに登録されたＮＡＮＤフラッシュ３３１のアドレスを抽出する。テーブル制御部３２２は、ＩＤ管理テーブル３５２から抽出したアドレスに基づき、ＮＡＮＤ管理テーブル３５１から、書き込み要求パケットに設定されたＩＤが示す分割領域に対応するレコードを選択し、選択したレコードのステータスを「無効」に変更する。
【０１９３】
［ステップＳ１４１］テーブル制御部３２２は、書き込み要求パケットに設定されたＩＤに対して、新たな分割領域のアドレスを割り当てる。具体的には、テーブル制御部３２２は、ＮＡＮＤ管理テーブル３５１を参照して、ＩＤに対応する種別の分割領域のうち、分割領域全体のページのステータスが「未使用」である分割領域を選択する。
【０１９４】
テーブル制御部３２２は、ＩＤ管理テーブル３５２のレコードのうち、書き込み要求パケットに設定されたＩＤが登録されたレコードに、新たに選択した分割領域の先頭アドレスを上書きして登録する。さらに、テーブル制御部３２２は、ＮＡＮＤ管理テーブル３５１において、新たに選択した分割領域に対応するアドレスのそれぞれに対して、書き込みデータのＬＢＡを登録する。このとき、テーブル制御部３２２は、ステップＳ１４０でステータスを「無効」に更新したレコードに登録されていたＬＢＡを、新たに選択した分割領域に対応するアドレスを含むレコードにコピーする。
【０１９５】
［ステップＳ１４２］テーブル制御部３２２は、ステップＳ１４１でＮＡＮＤ管理テーブル３５１に登録したＮＡＮＤフラッシュ３３１におけるアドレスをＮＡＮＤ制御部３２１に通知する。ＮＡＮＤ制御部３２１は、ステップＳ１３８でバッファメモリ３１１に書き込まれた書き込み要求パケットのペイロードから書き込みデータを順次読み出し、ＮＡＮＤフラッシュ３３１におけるテーブル制御部３２２から通知されたアドレスに書き込む。また、テーブル制御部３２２は、ＮＡＮＤ管理テーブル３５１のレコードのうち、ＮＡＮＤ制御部３２１によってデータが書き込まれたアドレスに対応するレコードのステータスを「有効」に更新する。
【０１９６】
ここで、図１５は、全面上書きの実行時におけるテーブルの状態の例を示す図である。
図１４のステップＳ１３８でＩＯ制御部３１０が受信した書き込み要求パケットには、ＩＤ＿Ｌ＃（ａ）が設定されている。図１４のステップＳ１４０において、テーブル制御部３２２は、ＩＤ管理テーブル３５２から、ＩＤ＿Ｌ＃（ａ）に対応付けられているＡｄｒ＃（ｘ）を抽出して（図１０参照）、ＩＤ＿Ｌ＃（ａ）に割り当てられているＮＡＮＤフラッシュ３３１の領域を特定する。テーブル制御部３２２は、図１５に示すように、ＮＡＮＤ管理テーブル３５１のレコードのうち、ＩＤ＿Ｌ＃（ａ）に割り当てられていたＬ−分割領域のアドレスであるＡｄｒ＃（ｘ）〜Ａｄｒ＃（ｘ＋Ｘ）に対応するレコードのステータスを、「無効」に更新する。
【０１９７】
また、図１４のステップＳ１４１において、テーブル制御部３２２は、内部の全ページのステータスが「未使用」であるＬ−分割領域を選択する。図１５の例では、新たなＬ−分割領域のアドレスはＡｄｒ＃（ｘ’）〜Ａｄｒ＃（ｘ’＋Ｘ）となる。テーブル制御部３２２は、ＩＤ管理テーブル３５２のレコードのうち、ＩＤ＿Ｌ＃（ａ）を含むレコードのアドレスを、新たに選択したＬ−分割領域の先頭アドレスであるＡｄｒ＃（ｘ’）に更新する。
【０１９８】
さらに、図１４のステップＳ１４２において、テーブル制御部３２２は、ＮＡＮＤ管理テーブル３５１において元のＬ−分割領域のＡｄｒ＃（ｘ）〜Ａｄｒ＃（ｘ＋Ｘ）に対応付けられていたＬＢＡ＃（ｐ）〜ＬＢＡ＃（ｐ＋Ｐ−７）を、新たなＬ−分割領域のＡｄｒ＃（ｘ’）〜Ａｄｒ＃（ｘ’＋Ｘ）のレコードにコピーする。テーブル制御部３２２は、ＬＢＡのコピーが完了した後、ＮＡＮＤ管理テーブル３５１において、元のＬ−分割領域のＡｄｒ＃（ｘ）〜Ａｄｒ＃（ｘ＋Ｘ）に対応付けられていたＬＢＡ＃（ｐ）〜ＬＢＡ＃（ｐ＋Ｐ−７）を消去する。
【０１９９】
このように、全面上書きの場合には、分割領域を識別するＩＤは変更されずに、分割領域に対応する物理領域のみが変更される。また、変更前の分割領域は、その内部の全ページのステータスが「無効」または「未使用」となる。このため、例えば、Ｌ−分割領域のデータの全面上書きが実行される場合には、ＣＢＵ３００ａは、変更前のＬ−分割領域、すなわちブロックのデータを、その内部のデータを他のブロックにコピーすることなく、消去することができる。図１５の例では、Ａｄｒ＃（ｘ）〜Ａｄｒ＃（ｘ＋Ｘ）は１ブロックを構成するため、このブロックに記録されたデータを、他のブロックにコピーすることなく消去することができる。
【０２００】
以下、図１４に戻って説明する。
［ステップＳ１４３］ＣＭ２００ａのメモリコントローラ２０３は、ステップＳ１３８でＣＢＵ３００ａから送信された書き込み要求パケットを受信すると、書き込み要求パケットに設定されたキャッシュ領域２０２ｂのアドレスに、書き込み要求パケットに格納された書き込みデータを書き込む。これにより、キャッシュ領域２０２ｂに格納されていた元の書き込みデータの全面が、新たな書き込みデータによって更新される。
【０２０１】
以上の処理により、書き込みデータは、ＣＭ２００ａのキャッシュ領域２０２ｂと、ＣＢＵ３００ａのＮＡＮＤフラッシュ３３１とに二重化される。
［ステップＳ１４４］ＣＢＵ３００ａのＩＯ制御部３１０は、ＰＣＩｅバスを通じて、ＣＭ２００ａに対して二重化処理の完了を割り込みによって通知する。
【０２０２】
［ステップＳ１４５］ＣＭ２００ａのＣＰＵ２０１は、ＣＢＵ３００ａからの二重化処理の完了通知を受信すると、ホスト装置に対して書き込みの完了の応答を返す。
次に、図１６，図１７は、自装置が担当する論理ボリュームに対する書き込み要求をＣＭが受けたときの処理例を示す第３のシーケンス図である。この図１６の処理は、図１４の処理によってホスト装置から書き込みが要求された書き込みデータの一部を上書きするような書き込み要求が、ホスト装置からＣＭ２００ａに送信された場合のものである。
【０２０３】
［ステップＳ１６１］ホスト装置は、ＣＭ２００ａに対して、図１３のステップＳ１０１および図１４のステップＳ１３１で書き込みを要求したデータの一部に上書きするためのデータを送信して、書き込みを要求する。ＣＭ２００ａが受信したデータは、ホストインタフェース２０５およびメモリコントローラ２０３を介して、ＲＡＭ２０２のバッファ領域２０２ａに書き込まれる。
【０２０４】
ここでは例として、キャッシュ領域２０２ｂに格納された、ＬＢＡ＃（ｐ）〜ＬＢＡ＃（ｐ＋Ｐ）に対応する一連のデータのうち、ＬＢＡ＃（ｐ’）〜ＬＢＡ＃（ｐ’＋Ｐ’）に対応するデータがホスト装置から送信されたものとする（ただし、例としてｐ＜ｐ’＜ｐ＋Ｐ，ｐ’＋Ｐ’＜ｐ＋Ｐとする）。以下、ＬＢＡ＃（ｐ’）〜ＬＢＡ＃（ｐ’＋Ｐ’）に対応するデータを「上書きデータ」と呼ぶ。
【０２０５】
［ステップＳ１６２］ＣＭ２００ａのＣＰＵ２０１は、ホスト装置から受信した上書きデータが属する論理ボリュームの番号（ＬＵＮ）と、上書きデータのＬＢＡとをチェックし、上書きデータが、ＣＭ２００ａが担当する論理ボリュームに属するものかを判定する。この図１６では、書き込みデータは、ＣＭ２００ａが担当する論理ボリュームに属するデータである。
【０２０６】
［ステップＳ１６３］ＣＰＵ２０１は、受信した上書きデータのＬＢＡが、キャッシュ管理テーブル２２１に登録されているかを判定する。この例では、受信した上書きデータのＬＢＡはＬＢＡ＃（ｐ’）〜ＬＢＡ＃（ｐ’＋Ｐ’）であり、これらのＬＢＡはキャッシュ管理テーブル２２１に登録されている。この場合、ＣＰＵ２０１は、受信した書き込みデータがキャッシュ領域２０２ｂにすでに格納されているデータであると判定する。
【０２０７】
［ステップＳ１６４］ＣＰＵ２０１は、ホスト装置から要求された上書きの種別が全面上書きか、一部上書きかを判定する。
この例では、受信した上書きデータのＬＢＡ範囲はＬＢＡ＃（ｐ’）〜ＬＢＡ＃（ｐ’＋Ｐ’）である。このＬＢＡ範囲は、キャッシュ管理テーブル２２１に登録された一連のデータのＬＢＡ範囲であるＬＢＡ＃（ｐ）〜ＬＢＡ＃（ｐ＋Ｐ）に内包され、かつ、各ＬＢＡ範囲は完全一致しない。このことから、ＣＰＵ２０１は一部上書きが要求されたと判定する。
【０２０８】
［ステップＳ１６５］ステップＳ１６４で一部上書きが要求されたと判定した場合、ＣＰＵ２０１は、上書き対象範囲データのＬＢＡをＣＢＵ３００ａに通知して、ＮＡＮＤフラッシュ３３１に格納された上書き対象範囲のデータを無効化するように要求する。
【０２０９】
ＣＰＵ２０１は、指定したＬＢＡを無効化するためのＣＢＵ３００ａ宛ての書き込み要求パケットを生成する。ＣＰＵ２０１は、キャッシュ管理テーブル２２１から、上書きデータのＬＢＡに対応付けられたＩＤを読み出し、読み出したＩＤを、書き込み要求パケットのキャッシュバックアップ用制御領域に設定する。また、ＣＰＵ２０１は、書き込み要求パケットのペイロードに上書きデータの先頭ＬＢＡを設定するとともに、書き込み要求パケットの「Ｌｅｎｇｔｈ」に上書きデータのサイズを設定する。ＣＰＵ２０１は、このように設定した書き込み要求パケットを、メモリコントローラ２０３およびＰＣＩｅバスを通じてＣＢＵ３００ａに送信する。
【０２１０】
［ステップＳ１６６］ＣＢＵ３００ａのＩＯ制御部３１０は、ＣＭ２００ａからの書き込み要求パケットを受信する。ＣＢＵ３００ａのテーブル制御部３２２は、書き込み要求パケットに設定されていた、上書きデータの先頭ＬＢＡおよびサイズに基づき、上書きデータに対応するＬＢＡを判定する。テーブル制御部３２２は、ＮＡＮＤ管理テーブル３５１のレコードのうち、上書きデータに対応するＬＢＡを含むレコードのステータスを「無効」に更新する。
【０２１１】
テーブル制御部３２２は、ステータスを更新した後、ＩＯ制御部３１０を通じて、書き込み要求パケットに対する応答パケットをＣＭ２００ａに送信する。
なお、テーブル制御部３２２は、上書きデータに対応するＬＢＡを認識する際に、書き込み要求パケットに設定されたＩＤを読み出し、ＩＤ管理テーブル３５２において読み出したＩＤに対応付けられたアドレスを基に、ＮＡＮＤ管理テーブル３５１における上書きデータに対応するＬＢＡの検索範囲を絞ってもよい。
【０２１２】
［ステップＳ１６７］ＣＰＵ２０１は、ＣＢＵ３００ａ宛ての読み出し要求パケットを送信して、ＣＢＵ３００ａに対して、上書きデータを書き込む分割領域に対応する新たなＩＤの通知を要求する。
【０２１３】
具体的には、ＣＰＵ２０１は、図１３のステップＳ１０４と同様の判定基準を用いて、受信した上書きデータのサイズに基づき、上書きデータを格納すべき分割領域が、Ｌ−分割領域、Ｍ−分割領域、Ｓ−分割領域のどれであるかを判定する。ここでは例として、上書きデータの書き込み先がＭ−分割領域であると判定されたものとする。
【０２１４】
ＣＰＵ２０１は、読み出し要求パケットを生成し、読み出し要求パケットにおけるキャッシュバックアップ用制御領域に、宛先判別用番号として、宛先がＣＢＵ３００ａであることを指定し、かつ、Ｍ−分割領域を指定するための値を設定する。また、ＣＰＵ２０１は、ＲＡＭ２０２の制御用領域からＭ−分割領域用のＩＤ取得用アドレス２５１ｂを読み出し、読み出し要求パケットの「Ａｄｄｒｅｓｓ」の下位側領域に設定する。ＣＰＵ２０１は、このように設定した読み出し要求パケットを、メモリコントローラ２０３およびＰＣＩｅバスを通じてＣＢＵ３００ａに送信する。
【０２１５】
［ステップＳ１６８］ＣＢＵ３００ａのＩＯ制御部３１０は、読み出し要求パケットを受信する。テーブル制御部３２２は、読み出し要求パケットにおける宛先判別用番号の下位２ビットの値から、Ｍ−分割領域のＩＤの通知が要求されたと判断し、Ｍ−分割領域に割り当てるユニークなＩＤを生成する。テーブル制御部３２２は、生成したＩＤをキャッシュバックアップ用制御領域の下位側領域（Ａｄｄｒ．［ｎ−３：ｎ−ｍ］）に設定した応答パケットを、ＩＯ制御部３１０を通じてＣＭ２００ａに送信する。
【０２１６】
なお、他の例として、上書きデータのサイズに対応する分割領域の種別の判定は、ステップＳ１６７ではなくステップＳ１６８でＣＢＵ３００ａのテーブル制御部３２２によって実行されてもよい。
【０２１７】
［ステップＳ１６９］ＣＭ２００ａのＣＰＵ２０１は、ＣＢＵ３００ａから送信された応答パケットからＩＤを抽出し、キャッシュ管理テーブル２２１のレコードのうち、上書きデータのＬＢＡを含むレコードに、抽出したＩＤを上書きして登録する。
【０２１８】
［ステップＳ１７０］ＣＰＵ２０１は、ＣＢＵ３００ａ宛てのＰＣＩｅパケットを送信して、ＣＢＵ３００ａから通知されたＩＤに対応付けたＬＢＡを、ＣＢＵ３００ａに通知する。
【０２１９】
具体的には、ＣＰＵ２０１は、読み出し要求パケットを生成する。ＣＰＵ２０１は、読み出し要求パケットにおけるキャッシュバックアップ用制御領域に、宛先がＣＢＵ３００ａであることを示すように設定し、読み出し要求パケットの「Ａｄｄｒｅｓｓ」の下位側領域に、Ｍ−分割領域用のＩＤ取得用アドレス２５１ｂを設定する。さらに、ＣＰＵ２０１は、上書きデータの先頭ＬＢＡと、上書きデータのサイズを、それぞれ書き込み要求パケットにおけるペイロード、「Ｌｅｎｇｔｈ」に設定する。ＣＰＵ２０１は、このように設定した書き込み要求パケットを、メモリコントローラ２０３およびＰＣＩｅバスを通じてＣＢＵ３００ａに送信する。
【０２２０】
［ステップＳ１７１］ＣＢＵ３００ａのＩＯ制御部３１０は、書き込み要求パケットを受信する。ＣＢＵ３００ａのテーブル制御部３２２は、書き込み要求パケットから、上書きデータの先頭ＬＢＡおよびサイズを抽出し、抽出した情報を、ステップＳ１６８で割り当てたＩＤに対応付けて、ＲＡＭ３３２に一時的に格納する。テーブル制御部３２２は、ＩＯ制御部３１０を通じて、ＣＭ２００ａに応答パケットを送信する。
【０２２１】
［ステップＳ１７２］ＣＭ２００ａのＣＰＵ２０１は、応答パケットを受信すると、ＤＭＡコントローラ２０３ａを起動させて、上書きデータを二重化するためのＤＭＡ転送を要求する。
【０２２２】
ＣＰＵ２０１は、ＲＡＭ２０２からＣＭ−ＤＭＡ起動用アドレス２５２を読み出し、読み出したアドレスをメモリコントローラ２０３に通知することで、ＤＭＡコントローラ２０３ａを起動させる。さらに、ＣＰＵ２０１は、ＤＭＡディスクリプタ２５３に対して情報を設定することで、ＤＭＡコントローラ２０３ａに、ＲＡＭ２０２のキャッシュ領域２０２ｂを書き込み先としたＤＭＡ書き込み処理を実行させる。なお、キャッシュ領域２０２ｂにおける書き込み先アドレスは、キャッシュ管理テーブル２２１において上書きデータの先頭ＬＢＡに対応付けられたキャッシュアドレスとなる。
【０２２３】
［ステップＳ１７３］ＤＭＡコントローラ２０３ａは、ＲＡＭ２０２のバッファ領域２０２ａから、ステップＳ１６１で書き込まれた上書きデータを読み出す。
［ステップＳ１７４］ＤＭＡコントローラ２０３ａは、読み出した上書きデータを格納した書き込み要求パケットを、ＣＢＵ３００ａに送信する。
【０２２４】
このとき送信される書き込み要求パケットにおいては、ステップＳ１６８でＣＢＵ３００ａから通知されたＩＤ、キャッシュ領域２０２ｂにおける書き込み先アドレス、上書きデータのサイズなどが設定されている。
【０２２５】
［ステップＳ１７５］ＣＢＵ３００ａのＩＯ制御部３１０は、受信した書き込み要求パケットをバッファメモリ３１１に格納し、書き込み要求パケット内の上書きデータを二重化するための処理を実行する。ＩＯ制御部３１０は、ＮＡＮＤ制御部３２１およびテーブル制御部３２２に対して、上書きデータをＮＡＮＤフラッシュ３３１に書き込むための処理を実行するように指示する。これとともに、ＩＯ制御部３１０は、受信した書き込み要求パケットをＣＭ２００ａに転送して、キャッシュ領域２０２ｂに対する書き込みを要求する。
【０２２６】
［ステップＳ１７６］テーブル制御部３２２は、書き込み要求パケットに設定されたＩＤが、ＩＤ管理テーブル３５２に登録されているかをチェックする。図１６，図１７の処理では、ＩＤはステップＳ１６８で新規に割り当てられたものであるので、ＩＤはＩＤ管理テーブル３５２に登録されていない。
【０２２７】
［ステップＳ１７７］ステップＳ１７６で、ＩＤがＩＤ管理テーブル３５２に登録されていないと判定した場合、テーブル制御部３２２は、ＩＤをＩＤ管理テーブル３５２に登録する。また、テーブル制御部３２２は、ＩＤに対して分割領域のアドレスを割り当てる。
【０２２８】
テーブル制御部３２２は、ＮＡＮＤ管理テーブル３５１を参照して、ＩＤに対応する種別の分割領域のうち、分割領域全体のページのステータスが「未使用」である分割領域を選択する。この例では、ＩＤはＭ−分割領域を示すので、テーブル制御部３２２は、内部の全ページのステータスが「未使用」であるＭ−分割領域を選択する。テーブル制御部３２２は、ＩＤ管理テーブル３５２にレコードを生成し、生成したレコードに、選択した分割領域のＮＡＮＤフラッシュ３３１における先頭アドレスとＩＤとを登録する。
【０２２９】
さらに、テーブル制御部３２２は、ＮＡＮＤ管理テーブル３５１において、選択した分割領域に対応するアドレスのそれぞれに対して、書き込みデータのＬＢＡを登録する。このとき、テーブル制御部３２２は、ステップＳ１６６でステータスを「無効」に更新したレコードに登録されていたＬＢＡを、新たに選択した分割領域に対応するアドレスを含むレコードにコピーする。
【０２３０】
［ステップＳ１７８］テーブル制御部３２２は、ステップＳ１７７でＮＡＮＤ管理テーブル３５１に登録したＮＡＮＤフラッシュ３３１におけるアドレスをＮＡＮＤ制御部３２１に通知する。ＮＡＮＤ制御部３２１は、ステップＳ１７５でバッファメモリ３１１に書き込まれた書き込み要求パケットのペイロードから上書きデータを順次読み出し、ＮＡＮＤフラッシュ３３１におけるテーブル制御部３２２から通知されたアドレスに書き込む。また、テーブル制御部３２２は、ＮＡＮＤ管理テーブル３５１のレコードのうち、ＮＡＮＤ制御部３２１によってデータが書き込まれたアドレスに対応するレコードのステータスを「有効」に更新する。
【０２３１】
ここで、図１８は、一部上書きの実行時におけるテーブルの状態の例を示す図である。
図１６のステップＳ１６６において、ＣＢＵ３００ａのテーブル制御部３２２は、ＣＭ２００ａから通知されたＬＢＡおよび上書きデータのサイズに基づき、ＮＡＮＤ管理テーブル３５１のレコードのうち、上書きデータに対応するＬＢＡ＃（ｐ’）〜ＬＢＡ＃（ｐ’＋Ｐ’）を含むレコードのステータスを「無効」に更新する。
【０２３２】
その後、図１６のステップＳ１６８では、テーブル制御部３２２は、新たなＩＤ＿Ｍ＃（ｄ）を生成してＣＭ２００ａに通知したとする。この場合、ステップＳ１６９において、ＣＭ２００ａのＣＰＵ２０１は、図１８に示すように、キャッシュ管理テーブル２２１のレコードのうち、ＬＢＡ＃（ｐ’）〜ＬＢＡ＃（ｐ’＋Ｐ’）を含むレコードのＩＤを、ＩＤ＿Ｌ＃（ａ）からＩＤ＿Ｍ＃（ｄ）に更新する。これにより、ＬＢＡ＃（ｐ）〜ＬＢＡ＃（ｐ＋Ｐ）における一連の書き込みデータには、ＩＤ＿Ｌ＃（ａ）とＩＤ＿Ｍ＃（ｄ）という２つのＩＤが対応付けられることになる。
【０２３３】
その後、図１７のステップＳ１７７では、ＣＢＵ３００ａのテーブル制御部３２２は、図１８に示すように、ＩＤ管理テーブル３５２にレコードを生成し、生成したレコードに、ＣＭ２００ａから通知されたＩＤ＿Ｍ＃（ｄ）と、選択した分割領域のＮＡＮＤフラッシュ３３１における先頭アドレスであるＡｄｒ＃（ｙ’）とを登録する。さらに、テーブル制御部３２２は、ＮＡＮＤ管理テーブル３５１において、上書き対象データが記録されていたＡｄｒ＃（ｘ”）〜Ａｄｒ＃（ｘ”＋Ｙ）に対応付けられていたＬＢＡ＃（ｐ’）〜ＬＢＡ＃（ｐ’＋Ｐ’−７）を、Ｍ−分割領域のＡｄｒ＃（ｙ’）〜Ａｄｒ＃（ｙ’＋Ｙ）のレコードにコピーする。テーブル制御部３２２は、ＬＢＡのコピーが完了した後、ＮＡＮＤ管理テーブル３５１において、上書き対象データが記録されていたＬ−分割領域のＡｄｒ＃（ｘ”）〜Ａｄｒ＃（ｘ”＋Ｙ）に対応付けられていたＬＢＡ＃（ｐ’）〜ＬＢＡ＃（ｐ’＋Ｐ’−７）を消去する。
【０２３４】
以下、図１７に戻って説明する。
［ステップＳ１７９］ＣＭ２００ａのメモリコントローラ２０３は、ステップＳ１７５でＣＢＵ３００ａから送信された書き込み要求パケットを受信すると、書き込み要求パケットに設定されたキャッシュ領域２０２ｂのアドレスに、書き込み要求パケットに格納された上書きデータを書き込む。これにより、キャッシュ領域２０２ｂに格納されていた元の書き込みデータのうち、ＬＢＡ＃（ｐ’）〜ＬＢＡ＃（ｐ’＋Ｐ’）に対応する領域のみが、上書きデータによって更新される。
【０２３５】
以上の処理により、上書きデータは、ＣＭ２００ａのキャッシュ領域２０２ｂと、ＣＢＵ３００ａのＮＡＮＤフラッシュ３３１とに二重化される。
［ステップＳ１８０］ＣＢＵ３００ａのＩＯ制御部３１０は、ＰＣＩｅバスを通じて、ＣＭ２００ａに対して二重化処理の完了を割り込みによって通知する。
【０２３６】
［ステップＳ１８１］ＣＭ２００ａのＣＰＵ２０１は、ＣＢＵ３００ａからの二重化処理の完了通知を受信すると、ホスト装置に対して書き込みの完了の応答を返す。
以上の図１３，図１４，図１６および図１７に示したように、ストレージシステム１００では、ホスト装置から書き込み要求を受け付けたＣＭ２００ａのＣＰＵ２０１が、ＤＭＡコントローラ２０３ａに対してＤＭＡ転送を１回要求するだけで、書き込みが要求されたデータがキャッシュ領域２０２ｂとＣＢＵ３００ａのＮＡＮＤフラッシュ３３１とに二重化される。このため、ＣＰＵ２０１がＤＭＡ転送を要求する際のオーバヘッドが短縮され、その結果、書き込みデータの二重化処理全体に要する時間が短縮される。従って、ＣＭ２００ａは、ホスト装置に対して書き込みの完了を短時間で応答することができる。
【０２３７】
さらに、ＣＢＵ３００ａは、ＣＭ２００ａから転送された書き込みデータを、そのサイズに応じたＮＡＮＤフラッシュ３３１上の分割領域に書き込む。これにより、ＮＡＮＤフラッシュ３３１上に無効ページがランダムに発生しにくくなり、その結果、ＮＡＮＤフラッシュ３３１上に空きブロックを確保する際に、ブロック間でデータがコピーされる確率が低くなる。これにより、ＮＡＮＤフラッシュ３３１のデータバスの負荷が軽減され、ＮＡＮＤフラッシュ３３１への書き込みデータの書き込み速度が向上する。従って、書き込みデータの二重化処理全体に要する時間が短縮される。
【０２３８】
なお、上記の説明では、ＣＢＵ３００ａは、１つの分割領域に対して１つのＩＤを割り当てたが、他の方法として、例えば、ＣＢＵ３００ａは、１つの分割領域内の各ページに対して連続的なＩＤを割り当ててもよい。この場合、例えば、ステップＳ１０７，Ｓ１６５，Ｓ１７０において、ＣＭ２００ａのＣＰＵ２０１は、ＩＤを通知することでＬＢＡを指定することもできる。
【０２３９】
次に、一方のＣＭが、他方のＣＭが担当する論理ボリュームに対する書き込み要求を受けた場合の処理について説明する。以下の図１９〜図２４では、例として、ＣＭ２００ａが、ＣＭ２００ｂが担当する論理ボリュームに対する書き込み要求を受けた場合の処理を示す。
【０２４０】
図１９，図２０は、一方のＣＭが、他方のＣＭが担当する論理ボリュームに対する書き込み要求を受けたときの処理例を示す第１のシーケンス図である。
［ステップＳ２０１］ホスト装置は、ＣＭ２００ａに対して書き込みを要求するとともに、書き込みデータを送信する。ＣＭ２００ａが受信した書き込みデータは、ＲＡＭ２０２のバッファ領域２０２ａに書き込まれる。
【０２４１】
［ステップＳ２０２］ＣＭ２００ａのＣＰＵ２０１は、書き込みが要求されたデータが属する論理ボリュームの番号（ＬＵＮ）と、書き込みデータのＬＢＡとをチェックし、書き込みデータが、ＣＭ２００ａが担当する論理ボリュームに属するものかを判定する。この図１９では、書き込みデータは、ＣＭ２００ａが担当する論理ボリュームに属するデータでなかったものとする。
【０２４２】
［ステップＳ２０３］ＣＭ２００ａのＣＰＵ２０１は、ペイロードに書き込みデータのＬＵＮおよび先頭ＬＢＡを、「Ｌｅｎｇｔｈ」に書き込みデータのサイズをそれぞれ格納した、他方のＣＭ２００ｂ宛ての書き込み要求パケットを送信して、ＬＵＮおよびＬＢＡをＣＭ２００ｂに通知する。
【０２４３】
［ステップＳ２０４〜Ｓ２０９］ＣＭ２００ａから送信された書き込み要求パケットは、ＣＢＵ３００ａのＩＯ制御部３１０およびＣＢＵ３００ｂのＩＯ制御部３１０を介して、ＣＭ２００ｂに転送される。この後、ステップＳ２０４〜Ｓ２０９では、ＣＭ２００ｂおよびＣＢＵ３００ｂは、図１３のステップＳ１０３〜Ｓ１０８でのＣＭ２００ａおよびＣＢＵ３００ｂと同様の処理を実行する。
【０２４４】
すなわち、ＣＭ２００ｂのＣＰＵ２０１は、書き込みデータがＣＭ２００ｂのキャッシュ領域２０２ｂにないと判定し（ステップＳ２０４）、書き込みデータに応じた種別の分割領域のＩＤを通知するようにＣＢＵ３００ｂに要求する（ステップＳ２０５）。ＣＢＵ３００ｂのテーブル制御部３２２は、ＩＤを生成してＣＭ２００ｂに返信し（ステップＳ２０６）、ＣＭ２００ｂのＣＰＵ２０１は、返信されたＩＤをキャッシュ管理テーブル２２１に登録する（ステップＳ２０７）。
【０２４５】
ＣＭ２００ｂのＣＰＵ２０１は、書き込みデータのＬＢＡをＣＢＵ３００ｂに通知する（ステップＳ２０８）。ＣＢＵ３００ｂのテーブル制御部３２２は、通知されたＬＢＡを割り当てたＩＤとともにＲＡＭ３３２に一時的に記録して、ＣＭ２００ｂに応答パケットを送信する（ステップＳ２０９）。
【０２４６】
［ステップＳ２１０］ＣＭ２００ｂのＣＰＵ２０１は、応答パケットを受信すると、ＣＭ２００ｂのＤＭＡコントローラ２０３ａを起動させて、上書きデータを二重化するためのＤＭＡ転送を要求する。
【０２４７】
ＣＰＵ２０１は、ＣＭ２００ｂのＲＡＭ２０２からＣＭ−ＤＭＡ起動用アドレス２５２を読み出し、読み出したアドレスをＣＭ２００ｂのメモリコントローラ２０３に通知することで、ＣＭ２００ｂのＤＭＡコントローラ２０３ａを起動させる。さらに、ＣＰＵ２０１は、ＣＭ２００ｂのＤＭＡディスクリプタ２５３に次のような設定を行うことで、ＤＭＡコントローラ２０３ａに、ＲＡＭ２０２のキャッシュ領域２０２ｂを転送先としたＤＭＡ読み出し処理を実行させる。
【０２４８】
ＣＰＵ２０１は、ＤＭＡディスクリプタ２５３のコマンド２５３ａに、外部からＲＡＭ２０２への転送を示す値を設定し、ＤＭＡディスクリプタ２５３の転送サイズ２５３ｂに、書き込みデータのサイズを設定する。また、ＣＰＵ２０１は、ＤＭＡディスクリプタ２５３の第１アドレス２５３ｃに、ＣＭ２００ｂのキャッシュ領域２０２ｂのアドレスを設定する。このとき、ＣＰＵ２０１は、キャッシュ領域２０２ｂのアドレスを、ステップＳ２０４でキャッシュ管理テーブル２２１に生成したレコードに登録する。
【０２４９】
また、ＤＭＡディスクリプタ２５３の第２アドレス２５３ｄに設定される情報は、ＤＭＡコントローラ２０３ａから送信される読み出し要求パケットの「Ａｄｄｒｅｓｓ」に格納されるものである。ＣＰＵ２０１は、第２アドレス２５３ｄにおけるキャッシュバックアップ用制御領域に対応する領域に、宛先がＣＢＵ３００ｂであることを示すような宛先判別用番号と、ＣＢＵ３００ｂに通知するＩＤとを設定する。また、ＣＭ２００ａのバッファ領域２０２ａは、ＣＭ２００ａのＲＡＭ２０２上に固定的に割り当てられている。このことから、ＣＭ２００ｂのＣＰＵ２０１は、「Ａｄｄｒｅｓｓ」の下位側領域に対応する第２アドレス２５３ｄの領域に、読み出し元のアドレスとして、ＣＭ２００ａのバッファ領域２０２ａを示すあらかじめ決められたアドレスを設定する。
【０２５０】
［ステップＳ２１１］ＣＭ２００ｂのＤＭＡコントローラ２０３ａは、ＤＭＡディスクリプタ２５３に設定された情報に基づき、ＣＭ２００ａのバッファ領域２０２ａを読み出し元とする読み出し要求パケットを、ＰＣＩｅバスを通じてＣＢＵ３００ｂに送信する。
【０２５１】
［ステップＳ２１２］ＣＢＵ３００ｂのＩＯ制御部３１０は、ＣＭ２００ｂからの読み出し要求パケットを受信すると、読み出し要求パケットからＩＤを抽出して、ＣＢＵ３００ｂのテーブル制御部３２２に通知する。これとともに、ＩＯ制御部３１０は、受信した読み出し要求パケットをＣＭ２００ａに転送する。
【０２５２】
［ステップＳ２１３］ＣＢＵ３００ｂのテーブル制御部３２２は、読み出し要求パケットから抽出されたＩＤが、ＣＢＵ３００ｂのＲＡＭ３３２に記録されたＩＤ管理テーブル３５２に登録されているかをチェックする。図１９，図２０の例では、ＩＤはステップＳ２０６で新規に割り当てられたものであるので、ＩＤはＩＤ管理テーブル３５２に登録されていない。
【０２５３】
［ステップＳ２１４］ステップＳ２１３で、ＩＤがＩＤ管理テーブル３５２に登録されていないと判定した場合、ＣＢＵ３００ｂのテーブル制御部３２２は、ＩＤをＩＤ管理テーブル３５２に登録する。このとき、ＩＤは、Ｌ−分割領域、Ｍ−分割領域、Ｓ−分割領域のどれに対応するかが識別可能な状態で、ＩＤ管理テーブル３５２に登録される。
【０２５４】
また、テーブル制御部３２２は、ＩＤに対して分割領域のアドレスを割り当てる。具体的には、テーブル制御部３２２は、ＮＡＮＤ管理テーブル３５１を参照して、ＩＤに対応する種別の分割領域のうち、分割領域全体のページのステータスが「未使用」である分割領域を選択する。この例では、ＩＤはＬ−分割領域を示すＩＤ＿Ｌ＃（ａ）であるので、テーブル制御部３２２は、内部の全ページのステータスが「未使用」であるＬ−分割領域を選択する。
【０２５５】
テーブル制御部３２２は、ＩＤ管理テーブル３５２にレコードを生成し、生成したレコードに、選択した分割領域のＮＡＮＤフラッシュ３３１における先頭アドレスとＩＤとを登録する。さらに、テーブル制御部３２２は、ステップＳ２０９でＲＡＭ３３２に一時的に格納しておいた先頭ＬＢＡおよびサイズに基づき、ＮＡＮＤ管理テーブル３５１において、選択した分割領域に対応するアドレスのそれぞれに対して、書き込みデータのＬＢＡを登録する。
【０２５６】
［ステップＳ２１５］ＣＭ２００ａのメモリコントローラ２０３は、ステップＳ２１２でＣＢＵ３００ｂのＩＯ制御部３１０から転送された読み出し要求パケットを受信すると、ＣＭ２００ａのバッファ領域２０２ａから、ステップＳ２０１で書き込まれた書き込みデータを読み出す。
【０２５７】
［ステップＳ２１６］ＣＭ２００ａのメモリコントローラ２０３は、読み出し要求パケットに対する応答パケットに、バッファ領域２０２ａから読み出した書き込みデータを格納して、この応答パケットをＣＢＵ３００ｂに送信する。
【０２５８】
［ステップＳ２１７］ＣＢＵ３００ｂのＩＯ制御部３１０は、ＣＭ２００ａからの応答パケットを自身のバッファメモリ３１１に格納し、応答パケット内の書き込みデータを二重化するための処理を実行する。
【０２５９】
ＩＯ制御部３１０は、ＣＢＵ３００ｂのＮＡＮＤ制御部３２１に、書き込みデータをＣＢＵ３００ｂのＮＡＮＤフラッシュ３３１に書き込むように指示する。これとともに、ＩＯ制御部３１０は、受信した応答パケットをＣＭ２００ｂに転送して、キャッシュ領域２０２ｂに対する書き込みを要求する。
【０２６０】
［ステップＳ２１８］ＣＢＵ３００ｂのＮＡＮＤ制御部３２１は、ステップＳ２１４でテーブル制御部３２２がＮＡＮＤ管理テーブル３５１にＬＢＡを登録したレコードに登録されたアドレスを書き込み先として、応答パケットから抽出した書き込みデータをＮＡＮＤフラッシュ３３１に書き込む。このとき、ＣＢＵ３００ｂのテーブル制御部３２２は、ＮＡＮＤ管理テーブル３５１のレコードのうち、ＮＡＮＤ制御部３２１によってデータが書き込まれたアドレスに対応するレコードのステータスを「有効」に更新する。
【０２６１】
［ステップＳ２１９］ＣＭ２００ｂのＤＭＡコントローラ２０３ａは、ステップＳ２１７でＣＢＵ３００ｂから送信された応答パケットを受信すると、ＤＭＡディスクリプタ２５３の第１アドレス２５３ｃに設定されたキャッシュ領域２０２ｂのアドレスに、応答パケットに格納された書き込みデータを書き込む。
【０２６２】
以上の処理により、書き込みデータは、ＣＭ２００ｂのキャッシュ領域２０２ｂと、ＣＢＵ３００ｂのＮＡＮＤフラッシュ３３１とに二重化される。なお、ステップＳ２１７での、ＣＢＵ３００ｂのＩＯ制御部３１０からＣＭ２００ｂへの応答パケットの送信処理と、ステップＳ２１８でのバッファメモリ３１１からＮＡＮＤフラッシュ３３１への書き込みデータの転送処理とは、並列に実行されてもよい。
【０２６３】
［ステップＳ２２０］ＣＢＵ３００ｂのＩＯ制御部３１０は、ＰＣＩｅバスを通じて、ＣＭ２００ａに対して二重化処理の完了を割り込みによって通知する。
［ステップＳ２２１］ＣＭ２００ａのＣＰＵ２０１は、ＣＢＵ３００ｂからの二重化処理の完了通知を受信すると、ホスト装置に対して書き込みの完了の応答を返す。
【０２６４】
図２１，図２２は、一方のＣＭが、他方のＣＭが担当する論理ボリュームに対する書き込み要求を受けたときの処理例を示す第２のシーケンス図である。図２１，図２２の処理は、図１９，図２０の処理によってホスト装置から書き込みが要求された書き込みデータの全体を上書きするような書き込み要求が、ホスト装置からＣＭ２００ａに送信された場合のものである。
【０２６５】
［ステップＳ２４１］ホスト装置は、ＣＭ２００ａに対して、図１９のステップＳ２０１で書き込みを要求した書き込みデータと同じＬＢＡに対応する書き込みデータを送信して、書き込みを要求する。ＣＭ２００ａが受信した書き込みデータは、ＣＭ２００ａのＲＡＭ２０２のバッファ領域２０２ａに書き込まれる。
【０２６６】
［ステップＳ２４２］ＣＭ２００ａのＣＰＵ２０１は、書き込みを要求されたデータが属する論理ボリュームの番号（ＬＵＮ）と、書き込みデータのＬＢＡとをチェックし、書き込みデータが、ＣＭ２００ａが担当する論理ボリュームに属するものかを判定する。この図２１では、書き込みデータは、ＣＭ２００ａが担当する論理ボリュームに属するデータではない。
【０２６７】
［ステップＳ２４３］ＣＭ２００ａのＣＰＵ２０１は、他方のＣＭ２００ｂ宛てに書き込み要求パケットを送信して、書き込みデータのＬＵＮ、先頭ＬＢＡおよびサイズをＣＭ２００ｂに通知する。
【０２６８】
［ステップＳ２４４］ＣＭ２００ｂのＣＰＵ２０１は、ＣＭ２００ａから受信した書き込み要求パケットに設定された情報から、ＣＭ２００ａが受け付けた書き込みデータのＬＢＡを認識する。ＣＭ２００ｂのＣＰＵ２０１は、書き込みデータのＬＢＡが、ＣＭ２００ｂ内のキャッシュ管理テーブル２２１に登録されているかを判定する。この例では、ＣＰＵ２０１は、受信した書き込みデータのＬＢＡはキャッシュ管理テーブル２２１に登録されていると判定する。
【０２６９】
［ステップＳ２４５］ＣＭ２００ｂのＣＰＵ２０１は、キャッシュ管理テーブル２２１を参照して、ホスト装置から要求された上書きの種別が「全面上書き」か、あるいは「一部上書き」かを判定する。この例では、ＣＰＵ２０１は全面上書きが要求されたと判定する。この場合、次のステップＳ２４６に示すように、新たなＩＤをＣＢＵ３００ｂから取得することなく、書き込みデータを二重化するための処理が開始される。
【０２７０】
［ステップＳ２４６］ＣＭ２００ｂのＣＰＵ２０１は、ＣＭ２００ｂのＤＭＡコントローラ２０３ａを起動させて、書き込みデータを二重化するためのＤＭＡ転送を要求する。
このステップＳ２４６での処理は、次の点を除けば、図１９のステップＳ２１０の処理と同様である。ステップＳ２４６では、ＣＰＵ２０１は、キャッシュ管理テーブル２２１から、書き込みデータのＬＢＡに対応付けられたＩＤを読み出し、ＤＭＡディスクリプタ２５３の第２アドレス２５３ｄにおけるキャッシュバックアップ用制御領域に対応する領域に設定する。これにより、ＣＰＵ２０１は、上書きするデータを書き込むべき、ＣＢＵ３００ｂのＮＡＮＤフラッシュ３３１における分割領域のＩＤを、自ら決定してＣＢＵ３００ｂに指定することができる。
【０２７１】
［ステップＳ２４７］ＣＭ２００ｂのＤＭＡコントローラ２０３ａは、ＤＭＡディスクリプタ２５３に設定された情報に基づき、ＣＭ２００ａのバッファ領域２０２ａを読み出し元とする読み出し要求パケットを、ＰＣＩｅバスを通じてＣＢＵ３００ｂに送信する。
【０２７２】
［ステップＳ２４８］ＣＢＵ３００ｂのＩＯ制御部３１０は、ＣＭ２００ｂからの読み出し要求パケットを受信すると、読み出し要求パケットからＩＤを抽出して、ＣＢＵ３００ｂのテーブル制御部３２２に通知する。これとともに、ＩＯ制御部３１０は、受信した読み出し要求パケットをＣＭ２００ａに転送する。
【０２７３】
［ステップＳ２４９］ＣＢＵ３００ｂのテーブル制御部３２２は、読み出し要求パケットから抽出されたＩＤが、ＣＢＵ３００ｂのＲＡＭ３３２に記録されたＩＤ管理テーブル３５２に登録されているかをチェックする。図２１，図２２の例では、テーブル制御部３２２は、ＩＤはＩＤ管理テーブル３５２に登録されていると判定する。この場合、次のステップＳ２５０の処理が実行される。
【０２７４】
［ステップＳ２５０］ＣＢＵ３００ｂのテーブル制御部３２２は、ＣＢＵ３００ｂのＩＤ管理テーブル３５２から、読み出し要求パケットに設定されたＩＤが登録されたレコードを選択し、選択したレコードに登録されたＮＡＮＤフラッシュ３３１のアドレスを抽出する。テーブル制御部３２２は、ＩＤ管理テーブル３５２から抽出したアドレスに基づき、ＮＡＮＤ管理テーブル３５１から、読み出し要求パケットに設定されたＩＤが示す分割領域に対応するレコードを選択し、選択したレコードのステータスを「無効」に変更する。
【０２７５】
［ステップＳ２５１］ＣＢＵ３００ｂのテーブル制御部３２２は、読み出し要求パケットに設定されたＩＤに対して、同じ種別の新たな分割領域のアドレスを割り当てる。テーブル制御部３２２は、ＩＤ管理テーブル３５２のレコードのうち、読み出し要求パケットに設定されたＩＤが登録されたレコードに、新たに選択した分割領域の先頭アドレスを上書きして登録する。さらに、テーブル制御部３２２は、ＮＡＮＤ管理テーブル３５１において、新たに選択した分割領域に対応するアドレスのそれぞれに対して、書き込みデータのＬＢＡを登録する。このとき、テーブル制御部３２２は、ステップＳ２５０でステータスを「無効」に更新したレコードに登録されていたＬＢＡを、新たに選択した分割領域に対応するアドレスを含むレコードにコピーする。
【０２７６】
［ステップＳ２５２］ＣＭ２００ａのメモリコントローラ２０３は、ステップＳ２４８でＣＢＵ３００ｂのＩＯ制御部３１０から転送された読み出し要求パケットを受信すると、ＣＭ２００ａのバッファ領域２０２ａから、ステップＳ２４１で書き込まれた書き込みデータを読み出す。
【０２７７】
［ステップＳ２５３］ＣＭ２００ａのメモリコントローラ２０３は、読み出し要求パケットに対する応答パケットに、バッファ領域２０２ａから読み出した書き込みデータを格納して、この応答パケットをＣＢＵ３００ｂに送信する。
【０２７８】
［ステップＳ２５４］ＣＢＵ３００ｂのＩＯ制御部３１０は、ＣＭ２００ａからの応答パケットを自身のバッファメモリ３１１に格納し、応答パケット内の書き込みデータを二重化するための処理を実行する。
【０２７９】
ＩＯ制御部３１０は、ＣＢＵ３００ｂのＮＡＮＤ制御部３２１に、書き込みデータをＣＢＵ３００ｂのＮＡＮＤフラッシュ３３１に書き込むように指示する。これとともに、ＩＯ制御部３１０は、受信した応答パケットをＣＭ２００ｂに転送して、キャッシュ領域２０２ｂに対する書き込みを要求する。
【０２８０】
［ステップＳ２５５］ＣＢＵ３００ｂのＮＡＮＤ制御部３２１は、ステップＳ２５１でテーブル制御部３２２がＮＡＮＤ管理テーブル３５１にＬＢＡを登録したレコードに登録されたアドレスを書き込み先として、応答パケットから抽出した書き込みデータをＮＡＮＤフラッシュ３３１に書き込む。このとき、ＣＢＵ３００ｂのテーブル制御部３２２は、ＮＡＮＤ管理テーブル３５１のレコードのうち、ＮＡＮＤ制御部３２１によってデータが書き込まれたアドレスに対応するレコードのステータスを「有効」に更新する。
【０２８１】
［ステップＳ２５６］ＣＭ２００ｂのＤＭＡコントローラ２０３ａは、ステップＳ２５４でＣＢＵ３００ｂから送信された応答パケットを受信すると、ＤＭＡディスクリプタ２５３の第１アドレス２５３ｃに設定されたキャッシュ領域２０２ｂのアドレスに、応答パケットに格納された書き込みデータを書き込む。これにより、ＣＭ２００ｂのキャッシュ領域２０２ｂに格納されていた元の書き込みデータの全面が、新たな書き込みデータによって更新される。
【０２８２】
［ステップＳ２５７］ＣＢＵ３００ｂのＩＯ制御部３１０は、ＰＣＩｅバスを通じて、ＣＭ２００ａに対して二重化処理の完了を割り込みによって通知する。
［ステップＳ２５８］ＣＭ２００ａのＣＰＵ２０１は、ＣＢＵ３００ｂからの二重化処理の完了通知を受信すると、ホスト装置に対して書き込みの完了の応答を返す。
【０２８３】
図２３，図２４は、一方のＣＭが、他方のＣＭが担当する論理ボリュームに対する書き込み要求を受けたときの処理例を示す第３のシーケンス図である。図２３，図２４の処理は、図２０，図２１の処理によってホスト装置から書き込みが要求された書き込みデータの一部を上書きするような書き込み要求が、ホスト装置からＣＭ２００ａに送信された場合のものである。
【０２８４】
［ステップＳ２７１］ホスト装置は、ＣＭ２００ａに対して、図２１のステップＳ２４１で書き込みを要求した書き込みデータの一部に上書きするためのデータを送信して、書き込みを要求する。ＣＭ２００ａが受信した書き込みデータは、ＣＭ２００ａのＲＡＭ２０２のバッファ領域２０２ａに書き込まれる。以下、このステップＳ２７１でホスト装置から送信されたデータを「上書きデータ」と呼ぶ。
【０２８５】
［ステップＳ２７２］ＣＭ２００ａのＣＰＵ２０１は、書き込みを要求されたデータが属する論理ボリュームの番号（ＬＵＮ）と、書き込みデータのＬＢＡとをチェックし、上書きデータが、ＣＭ２００ａが担当する論理ボリュームに属するものかを判定する。この図２３では、上書きデータは、ＣＭ２００ａが担当する論理ボリュームに属するデータではない。
【０２８６】
［ステップＳ２７３］ＣＭ２００ａのＣＰＵ２０１は、他方のＣＭ２００ｂ宛てに書き込み要求パケットを送信して、上書きデータのＬＵＮ、先頭ＬＢＡおよびサイズをＣＭ２００ｂに通知する。
【０２８７】
［ステップＳ２７４〜Ｓ２８２］ＣＭ２００ｂのＣＰＵ２０１は、ＣＭ２００ａから受信した書き込み要求パケットに設定された情報から、ＣＭ２００ａが受け付けた上書きデータのＬＢＡを認識する。この後、ステップＳ２７４〜Ｓ２８２では、ＣＭ２００ｂおよびＣＢＵ３００ｂは、図１６のステップＳ１６３〜Ｓ１７１でのＣＭ２００ａおよびＣＢＵ３００ａと同様の処理を実行する。
【０２８８】
すなわち、ＣＭ２００ｂのＣＰＵ２０１は、上書きデータのＬＢＡがＣＭ２００ｂのキャッシュ管理テーブル２２１に登録されていないと判定し（ステップＳ２７４）、上書きの種別が「一部上書き」であると判定する（ステップＳ２７５）。ＣＭ２００ｂのＣＰＵ２０１は、上書き対象範囲のデータのＬＢＡをＣＢＵ３００ｂに通知して、ＣＢＵ３００ｂのＮＡＮＤフラッシュ３３１に格納された上書き対象範囲のデータを無効化するように要求する（ステップＳ２７６）。ＣＢＵ３００ｂのテーブル制御部３２２は、ＣＢＵ３００ｂのＮＡＮＤ管理テーブル３５１のレコードのうち、上書きデータに対応するＬＢＡを含むレコードのステータスを「無効」に更新する（ステップＳ２７７）。
【０２８９】
ＣＭ２００ｂのＣＰＵ２０１は、ＣＢＵ３００ｂ宛ての読み出し要求パケットを送信して、ＣＢＵ３００ｂに対して、上書きデータを書き込む分割領域に対応する新たなＩＤの通知を要求する（ステップＳ２７８）。ここでは例として、Ｍ−分割領域に対応するＩＤの通知が要求されたものとする。ＣＢＵ３００ｂのテーブル制御部３２２は、Ｍ−分割領域のＩＤを生成してＣＭ２００ｂに返信し（ステップＳ２７９）、ＣＭ２００ｂのＣＰＵ２０１は、返信されたＩＤをキャッシュ管理テーブル２２１に登録する（ステップＳ２８０）。
【０２９０】
ＣＭ２００ｂのＣＰＵ２０１は、上書きデータのＬＢＡをＣＢＵ３００ｂに通知する（ステップＳ２８１）。ＣＢＵ３００ｂのテーブル制御部３２２は、通知されたＬＢＡを割り当てたＩＤとともにＲＡＭ３３２に一時的に記録して、ＣＭ２００ｂに応答パケットを送信する（ステップＳ２８２）。
【０２９１】
［ステップＳ２８３］ＣＭ２００ｂのＣＰＵ２０１は、応答パケットを受信すると、ＣＭ２００ｂのＤＭＡコントローラ２０３ａを起動させて、上書きデータを二重化するためのＤＭＡ転送を要求する。
【０２９２】
［ステップＳ２８４］ＣＭ２００ｂのＤＭＡコントローラ２０３ａは、ＣＭ２００ａのバッファ領域２０２ａを読み出し元とする読み出し要求パケットを、ＰＣＩｅバスを通じてＣＢＵ３００ｂに送信する。送信される読み出し要求パケットには、ステップＳ２７９でＣＢＵ３００ｂから割り当てられたＩＤが格納されている。
【０２９３】
［ステップＳ２８５］ＣＢＵ３００ｂのＩＯ制御部３１０は、ＣＭ２００ｂからの読み出し要求パケットを受信すると、読み出し要求パケットからＩＤを抽出して、ＣＢＵ３００ｂのテーブル制御部３２２に通知する。これとともに、ＩＯ制御部３１０は、受信した読み出し要求パケットをＣＭ２００ａに転送する。
【０２９４】
［ステップＳ２８６］ＣＢＵ３００ｂのテーブル制御部３２２は、読み出し要求パケットから抽出されたＩＤが、ＣＢＵ３００ｂのＲＡＭ３３２に記録されたＩＤ管理テーブル３５２に登録されているかをチェックする。図２３，図２４の例では、テーブル制御部３２２は、ＩＤはＩＤ管理テーブル３５２に登録されていないと判定する。この場合、次のステップＳ２８７の処理が実行される。
【０２９５】
［ステップＳ２８７］ＣＢＵ３００ｂのテーブル制御部３２２は、ＩＤをＩＤ管理テーブル３５２に登録する。また、テーブル制御部３２２は、ＩＤに対して分割領域のアドレスを割り当てる。
【０２９６】
テーブル制御部３２２は、ＮＡＮＤ管理テーブル３５１を参照して、ＩＤに対応する種別の分割領域のうち、分割領域全体のページのステータスが「未使用」である分割領域を選択する。図２３，図２４の例では、ＩＤはＭ−分割領域を示すので、テーブル制御部３２２は、内部の全ページのステータスが「未使用」であるＭ−分割領域を選択する。テーブル制御部３２２は、ＩＤ管理テーブル３５２にレコードを生成し、生成したレコードに、選択した分割領域のＮＡＮＤフラッシュ３３１における先頭アドレスとＩＤとを登録する。
【０２９７】
さらに、テーブル制御部３２２は、ＮＡＮＤ管理テーブル３５１において、選択した分割領域に対応するアドレスのそれぞれに対して、上書きデータのＬＢＡを登録する。このとき、テーブル制御部３２２は、ステップＳ２７７でステータスを「無効」に更新したレコードに登録されていたＬＢＡを、新たに選択した分割領域に対応するアドレスを含むレコードにコピーする。
【０２９８】
［ステップＳ２８８］ＣＭ２００ａのメモリコントローラ２０３は、ステップＳ２８５でＣＢＵ３００ｂのＩＯ制御部３１０から転送された読み出し要求パケットを受信すると、ＣＭ２００ａのバッファ領域２０２ａから、ステップＳ２７１で書き込まれた書き込みデータを読み出す。
【０２９９】
［ステップＳ２８９］ＣＭ２００ａのメモリコントローラ２０３は、読み出し要求パケットに対する応答パケットに、バッファ領域２０２ａから読み出した上書きデータを格納して、この応答パケットをＣＢＵ３００ｂに送信する。
【０３００】
［ステップＳ２９０］ＣＢＵ３００ｂのＩＯ制御部３１０は、ＣＭ２００ａからの応答パケットを自身のバッファメモリ３１１に格納し、応答パケット内の上書きデータを二重化するための処理を実行する。
【０３０１】
ＩＯ制御部３１０は、ＣＢＵ３００ｂのＮＡＮＤ制御部３２１に、上書きデータをＣＢＵ３００ｂのＮＡＮＤフラッシュ３３１に書き込むように指示する。これとともに、ＩＯ制御部３１０は、受信した応答パケットをＣＭ２００ｂに転送して、キャッシュ領域２０２ｂに対する書き込みを要求する。
【０３０２】
［ステップＳ２９１］ＣＢＵ３００ｂのＮＡＮＤ制御部３２１は、ステップＳ２８７でテーブル制御部３２２がＮＡＮＤ管理テーブル３５１にＬＢＡを登録したレコードに登録されたアドレスを書き込み先として、応答パケットから抽出した上書きデータをＮＡＮＤフラッシュ３３１に書き込む。これにより、上書き対象のデータのみが、元の書き込みデータとは別の分割領域に書き込まれる。このとき、ＣＢＵ３００ｂのテーブル制御部３２２は、ＮＡＮＤ管理テーブル３５１のレコードのうち、ＮＡＮＤ制御部３２１によってデータが書き込まれたアドレスに対応するレコードのステータスを「有効」に更新する。
【０３０３】
［ステップＳ２９２］ＣＭ２００ｂのＤＭＡコントローラ２０３ａは、ステップＳ２９０でＣＢＵ３００ｂから送信された応答パケットを受信すると、応答パケットに格納された上書きデータをＣＭ２００ｂのキャッシュ領域２０２ｂに書き込む。これにより、ＣＭ２００ｂのキャッシュ領域２０２ｂに格納されていた元の書き込みデータの一部が、上書きデータによって更新される。
【０３０４】
［ステップＳ２９３］ＣＢＵ３００ｂのＩＯ制御部３１０は、ＰＣＩｅバスを通じて、ＣＭ２００ａに対して二重化処理の完了を割り込みによって通知する。
［ステップＳ２９４］ＣＭ２００ａのＣＰＵ２０１は、ＣＢＵ３００ｂからの二重化処理の完了通知を受信すると、ホスト装置に対して書き込みの完了の応答を返す。
【０３０５】
以上のように、一方のＣＭがホスト装置から、他方のＣＭが担当する論理ボリュームに対する書き込み要求を受けた場合でも、他方のＣＭのＣＰＵは、ＤＭＡコントローラに対してＤＭＡ転送を１回要求するだけで、書き込みが要求されたデータを二重化することができる。このため、書き込みデータの二重化処理全体に要する時間が短縮される。さらに、一方のＣＭが自装置が担当する論理ボリュームに対する書き込み要求を受けた場合と同様に、ＣＢＵにおけるＮＡＮＤフラッシュへの書き込み速度の向上効果も得られることから、書き込みデータの二重化処理全体に要する時間が短縮される。
【０３０６】
次に、図２５は、ライトバック実行時の処理例を示すシーケンス図である。図２５では例として、ＣＭ２００ａがライトバックを実行した場合の処理を示すが、ＣＭ２００ｂがライトバックを実行した場合には、ＣＭ２００ｂおよびＣＢＵ３００ｂが、図２５におけるＣＭ２００ａおよびＣＢＵ３００ａの処理を実行することができる。
【０３０７】
［ステップＳ３３１］ＣＭ２００ａのＣＰＵ２０１は、キャッシュ領域２０２ｂの使用率をチェックする。キャッシュ領域２０２ｂの使用率が所定値以下の場合、ＣＰＵ２０１は、所定時間後にステップＳ３３１の処理を再度実行する。一方、キャッシュ領域２０２ｂの使用率が所定値より大きい場合、ＣＰＵ２０１は、次のステップＳ３３２の処理を実行する。
【０３０８】
［ステップＳ３３２］ＣＰＵ２０１は、キャッシュ領域２０２ｂに格納されているデータのうち、ホスト装置から最後にアクセスされてからの時間が最も長いデータを選択する。ＣＰＵ２０１は、選択したデータをキャッシュ領域２０２ｂから読み出して、バックエンドの記憶領域（ＤＥ４００のＨＤＤ）に書き戻す。
【０３０９】
［ステップＳ３３３］ＣＰＵ２０１は、キャッシュ管理テーブル２２１から、ライトバックを行ったデータに対応付けられているＩＤを読み出す。ＣＰＵ２０１は、書き込み要求パケットを生成し、書き込み要求パケットのキャッシュバックアップ用制御領域に、キャッシュ管理テーブル２２１から読み出したＩＤを設定する。ＣＰＵ２０１は、ＩＤを設定した書き込み要求パケットをＣＢＵ３００ａに対して送信して、ＩＤに対応する分割領域の無効化を要求する。
【０３１０】
例えば、図１５に示した状態から、ＣＰＵ２０１がＬＢＡ＃（ｐ）〜ＬＢＡ＃（ｐ＋Ｐ）に対応する一連の書き込みデータのライトバックを行ったとする。この場合、ＣＰＵ２０１は、キャッシュ管理テーブル２２１において、ＬＢＡ＃（ｐ）〜ＬＢＡ＃（ｐ＋Ｐ）に対応付けられたＩＤ＿Ｌ＃（ａ）を、ＣＢＵ３００ａに通知する。
【０３１１】
また、例えば、図１８に示した状態から、ＣＰＵ２０１がＬＢＡ＃（ｐ）〜ＬＢＡ＃（ｐ＋Ｐ）に対応する一連の書き込みデータのライトバックを行ったとする。この場合、ＣＰＵ２０１は、キャッシュ管理テーブル２２１において、ＬＢＡ＃（ｐ）〜ＬＢＡ＃（ｐ＋Ｐ）に対応付けられたＩＤ＿Ｌ＃（ａ）およびＩＤ＿Ｍ＃（ｄ）の両方を、ＣＰＵ３００ａに通知する。例えば、ＣＰＵ２０１は、ＩＤ＿Ｌ＃（ａ）とＩＤ＿Ｍ＃（ｄ）とを、それぞれ個別の書き込み要求パケットを用いてＣＢＵ３００ａに通知する。
【０３１２】
［ステップＳ３３４］ＣＰＵ２０１は、キャッシュ管理テーブル２２１のレコードのうち、ライトバックを行ったデータに対応するレコードを消去する。なお、このステップＳ３３４の処理は、ＣＢＵ３００ａでの分割領域の無効化、またはＣＢＵ３００ａでの分割領域のデータ消去が完了した後に、実行されてもよい。
【０３１３】
［ステップＳ３３５］ＣＢＵ３００ａのＩＯ制御部３１０は、ＣＭ２００ａからの書き込み要求パケットを受信する。ＣＢＵ３００ａのテーブル制御部３２２は、書き込み要求パケットからＩＤを読み出し、ＩＤ管理テーブル３５２から、読み出したＩＤに対応付けられているＮＡＮＤフラッシュ３３１のアドレスを読み出す。テーブル制御部３２２は、ＮＡＮＤ管理テーブル３５１のレコードのうち、ＩＤ管理テーブル３５２から読み出したアドレスを含むレコードのステータスを「無効」に更新するとともに、これらのレコードのＬＢＡを消去する。さらに、テーブル制御部３２２は、書き込み要求パケットから読み出したＩＤが登録されたＩＤ管理テーブル３５２のレコードを消去する。
【０３１４】
［ステップＳ３３６］テーブル制御部３２２は、ＮＡＮＤ管理テーブル３５１を参照して、内部の全ページのステータスが「無効」または「未使用」のブロック、すなわち、データを即座に消去可能なブロックが存在するかを判定する。データを即座に消去可能なブロックが存在した場合、テーブル制御部３２２は、そのブロックのアドレスをＮＡＮＤ制御部３２１に通知して、データ消去を要求する。
【０３１５】
［ステップＳ３３７］ＮＡＮＤ制御部３２１は、テーブル制御部３２２から通知されたアドレスに対応するブロックのデータを消去する。
なお、ステップＳ３３６において、データを即座に消去可能なブロックが存在しない場合には、テーブル制御部３２２は、例えば、ＮＡＮＤ制御部３２１に次のような処理を実行させる。ＮＡＮＤ制御部３２１は、内部のページの一部が有効ページである複数のブロックを選択し、選択した複数のブロック内の有効ページのデータを、データ消去済みの他のブロックにコピーする。コピーが完了すると、ＮＡＮＤ制御部３２１は、選択した複数のブロックに記録されているデータを消去し、空きブロックに遷移させる。
【０３１６】
ここで、例えば、ステップＳ３３３において、ＣＭ２００ａのＣＰＵ２０１がＬ−分割領域のＩＤをＣＢＵ３００ａに通知した場合、ステップＳ３３６では、テーブル制御部３２２は、通知されたＩＤに対応するブロックのデータ消去をＮＡＮＤ制御部３２１に実行させる。この場合、ＮＡＮＤ制御部３２１は、データ消去が要求されたブロックに記録されたデータを、他のブロックにコピーすることなく即座に消去することができる。
【０３１７】
また、例えば、ステップＳ３３３において、ＣＭ２００ａのＣＰＵ２０１がＭ−分割領域のＩＤをＣＢＵ３００ａに通知した場合、ステップＳ３３６では、Ｓ−分割領域のＩＤを通知した場合と比較して、内部の全ページのステータスが「無効」または「未使用」のブロックが存在している可能性が高くなる。もし、内部の全ページのステータスが「無効」または「未使用」のブロックが存在していれば、ステップＳ３３７において、ＮＡＮＤ制御部３２１は、そのブロックに記録されたデータを、他のブロックにコピーすることなく即座に消去することができる。
【０３１８】
このように、ストレージシステム１００によれば、ライトバックを実行したときに、ＮＡＮＤフラッシュ３３１におけるデータ消去を短時間で実行できる確率が高まる。このため、ＮＡＮＤフラッシュ３３１に空きブロックを生成するまでの平均時間を短縮することができる。従って、例えば、ＣＭ２００ａがホスト装置からの書き込み要求を受けてから、キャッシュ領域２０２ｂおよびＮＡＮＤフラッシュ３３１上のバックアップ領域が足りないために、ホスト装置に対する応答が遅れる、といった事態の発生確率が低くなり、ホスト装置に対する平均応答時間を短縮することができる。
【０３１９】
次に、一方のＣＭが異常停止した場合の処理について説明する。以下、例として、ＣＭ２００ａが異常停止したものとして説明する。この場合、他方のＣＭ２００ｂは、ＣＢＵ３００ａのＮＡＮＤフラッシュ３３１に格納されている、ＣＭ２００ａのキャッシュ領域のバックアップデータを読み出し、バックエンドの記憶装置（ＤＥ４００）に書き戻す。これにより、ＣＢＵ３００ａのＮＡＮＤフラッシュ３３１に格納されていた、ＣＭ２００ａが担当していた論理ボリュームの最新データを失わずに、ＣＭ２００ｂが、その論理ボリュームに対するホスト装置からの要求に応じたアクセス制御を引き継ぐことができる。
【０３２０】
図２６は、アクセス制御を引き継ぐＣＭがＲＡＭ上に生成する制御領域、および、制御領域内の情報とＣＢＵのＮＡＮＤ管理テーブルの情報との対応関係の例を示す図である。
ＣＢＵ３００ａのＮＡＮＤフラッシュ３３１に格納されたデータをＤＥ４００に書き戻す際、ＣＭ２００ｂのＣＰＵ２０１、ＣＭ２００ｂのＲＡＭ２０２に、書き戻し用のバッファ領域２６０を確保する。バッファ領域２６０は、付与されたＬＢＡが連続している一連のデータごとに生成される。各バッファ領域２６０は、一連のデータの先頭のＬＢＡを示す「先頭ＬＢＡ」、一連のデータのサイズを示す「サイズ」、「書き戻しフラグ」、および、一連のデータが格納される「データ」を含む。「書き戻しフラグ」は、ＤＥ４００への書き戻しが完了したか、あるいは書き戻しを実行中かを示すフラグ情報である。
【０３２１】
なお、ＣＰＵ２０１は、例えば、ＲＡＭ２０２における各バッファ領域２６０の先頭アドレスを、例えば、図１２に示したＣＢＵ−ＤＭＡ起動用アドレス２５４ａ，２５４ｂ，・・・で指定する。あるいは、ＣＢＵ−ＤＭＡ起動用アドレス２５４ａが１つだけ用意されていて、ＣＰＵ２０１は、複数のバッファ領域２６０のうちの１つ目の領域の先頭アドレスのみをＣＢＵ−ＤＭＡ起動用アドレスで指定し、２つ目以降のバッファ領域２６０の先頭アドレスを動的に指定してもよい。
【０３２２】
図２７は、ＮＡＮＤフラッシュに格納されたデータの書き戻し処理の例を示すシーケンス図である。
［ステップＳ３５１］ＣＢＵ３００ａのＩＯ制御部３１０は、ＣＭ２００ａがエラー発生により停止したことを検出すると、エラー発生をＣＭ２００ｂに通知する。ＩＯ制御部３１０は、例えば、ＣＭ２００ａと通信できなくなったときに、ＣＭ２００ａが停止したと判定する。
【０３２３】
この後、ＣＢＵ３００ａのＮＡＮＤフラッシュ３３１に格納されたデータがすべてＣＭ２００ｂによって読み出されるまで、ステップＳ３５２〜Ｓ３６３の処理が繰り返される。
【０３２４】
［ステップＳ３５２］ＣＭ２００ｂのＣＰＵ２０１は、ＣＢＵ３００ａに読み出し要求パケットを送信して、ＮＡＮＤフラッシュ３３１に格納されたデータをＤＭＡ転送するように要求する。このとき、読み出し要求パケットには、データの転送先としてＣＭ２００ｂのバッファ領域２６０の先頭アドレスが設定される。
【０３２５】
［ステップＳ３５３］ＣＢＵ３００ａのＩＯ制御部３１０は、読み出し要求パケットを受信すると、ＤＭＡコントローラ３２３を起動する。このとき、ＩＯ制御部３１０は、ＤＭＡコントローラ３２３に対して、データの転送先として、読み出し要求パケットに設定されていたバッファ領域２６０の先頭アドレスを指定する。
【０３２６】
［ステップＳ３５４］ＣＢＵ３００ａのＤＭＡコントローラ３２３は、ＣＢＵ３００ａのテーブル制御部３２２を通じて、ＲＡＭ３３２内のＮＡＮＤ管理テーブル３５１を参照する。ＤＭＡコントローラ３２３は、ＮＡＮＤ管理テーブル３５１に登録されたＬＢＡを検索して、一連のデータの先頭ＬＢＡを判別する。例えば、ＤＭＡコントローラ３２３は、ＮＡＮＤ管理テーブル３５１に登録されたＬＢＡのうち、最小のＬＢＡを先頭ＬＢＡと判別する。
【０３２７】
［ステップＳ３５５］ＤＭＡコントローラ３２３は、ＣＭ２００ｂに対して応答パケットを送信して、判別した先頭ＬＢＡをＣＭ２００ｂのバッファ領域２６０に転送する。
［ステップＳ３５６］ＤＭＡコントローラ３２３は、ＮＡＮＤ管理テーブル３５１において、転送したＬＢＡに対応付けられたアドレスを抽出する。ＤＭＡコントローラ３２３は、ＮＡＮＤフラッシュ３３１における抽出したアドレスからデータを読み出し、ＣＭ２００ｂのバッファ領域２６０に転送する。ＤＭＡコントローラ３２３は、データの転送が完了すると、ＮＡＮＤ管理テーブル３５１から、転送したデータに対応するＬＢＡを消去する。
【０３２８】
［ステップＳ３５７］ＤＭＡコントローラ３２３は、ＮＡＮＤ管理テーブル３５１に、転送したデータのＬＢＡから連続するＬＢＡ（前のＬＢＡに８ビットが加算されたＬＢＡ）があるかを判定する。連続するＬＢＡがある場合、次のステップＳ３５８の処理が行われる。
【０３２９】
［ステップＳ３５８］ＤＭＡコントローラ３２３は、ＮＡＮＤ管理テーブル３５１から、連続するＬＢＡに対応付けられたアドレスを抽出する。ＤＭＡコントローラ３２３は、ＮＡＮＤフラッシュ３３１における抽出したアドレスからデータを読み出し、ＣＭ２００ｂのバッファ領域２６０に転送する。ＤＭＡコントローラ３２３は、データの転送が完了すると、ＮＡＮＤ管理テーブル３５１から、転送したデータに対応するＬＢＡを消去する。
【０３３０】
これ以後、ＤＭＡコントローラ３２３は、ＮＡＮＤ管理テーブル３５１に連続するＬＢＡが存在している間、ステップＳ３５７，Ｓ３５８の処理を繰り返す。これにより、一連のデータがＣＭ２００ｂのバッファ領域２６０に書き込まれる。
【０３３１】
［ステップＳ３５７ａ］ここで、上記のステップＳ３５７の判定処理が実行されたときに、前のＬＢＡから連続するＬＢＡがなかったとする。
［ステップＳ３５９］ＤＭＡコントローラ３２３は、ステップＳ３５６の実行から現在までに転送した一連のデータのデータサイズを、ＣＭ２００ｂのバッファ領域２６０に転送する。
【０３３２】
［ステップＳ３６０］ＤＭＡコントローラ３２３は、ＣＭ２００ｂのＣＰＵ２０１に対して、割り込みによって、データ転送が完了したことを通知する。
［ステップＳ３６１］ＣＭ２００ｂのＣＰＵ２０１は、バッファ領域２６０の「書き戻しフラグ」をオフにする。
【０３３３】
［ステップＳ３６２］ＣＰＵ２０１は、バッファ領域２６０に格納された一連のデータを、ＤＥ４００に書き戻す。
［ステップＳ３６３］一連のデータの書き戻しが完了すると、ＣＰＵ２０１は、バッファ領域２６０の「書き戻しフラグ」をオンにする。
【０３３４】
上記処理においては、ＣＭ２００ｂのＣＰＵ２０１は、ＣＢＵ３００ａのＮＡＮＤフラッシュ３３１からデータを読み出す際に、データに対応付けられていたＬＢＡも読み出す。これにより、ＣＭ２００ｂのＣＰＵ２０１は、読み出したデータが論理ボリューム上のどのデータかを特定できるようになる。従って、ＣＭ２００ｂのＣＰＵ２０１は、読み出したデータをＤＥ４００に書き戻した後、それらのデータに対するホスト装置からのアクセス要求を受け付けて、ＣＭ２００ａが実行していたアクセス制御を引き継ぐことができるようになる。
【０３３５】
図２８は、データの書き戻し処理中にホスト装置から読み出し要求を受けたときの処理例を示すフローチャートである。
［ステップＳ３８１］ＣＭ２００ｂのＣＰＵ２０１は、ホスト装置から、ＣＭ２００ａが担当していた論理ボリュームのデータに対する読み出し要求を受け付ける。
【０３３６】
［ステップＳ３８２］ＣＰＵ２０１は、バッファ領域２６０の「先頭ＬＢＡ」および「サイズ」に基づき、読み出しを要求されたデータがバッファ領域２６０にあるかを判定する。ＣＰＵ２０１は、データがバッファ領域２６０にある場合、ステップＳ３８３の処理を実行し、データがバッファ領域２６０にない場合、ステップＳ３８４の処理を実行する。
【０３３７】
［ステップＳ３８３］ＣＰＵ２０１は、バッファ領域２６０における、読み出しが要求されたデータに対応付けられた「書き戻しフラグ」を参照する。ＣＰＵ２０１は、「書き戻しフラグ」がオフである場合には、オンになるまでステップＳ３８４の処理の実行を待ち合わせる。そして、ＣＰＵ２０１は、「書き戻しフラグ」がオンになった場合、ステップＳ３８４の処理を実行する。
【０３３８】
［ステップＳ３８４］ＣＰＵ２０１は、読み出しを要求されたデータを、ＤＥ４００から読み出し、ホスト装置に送信する。ここで、ステップＳ３８４の処理がステップＳ３８３の次に実行された場合には、他方のＣＭ２００ａのキャッシュ領域に格納されていた最新のデータがホスト装置に送信される。
【０３３９】
上記の処理によれば、ＣＭ２００ｂは、ステップＳ３８３で「書き戻しフラグ」がオフである場合に、ＤＥ４００からのデータの読み出しの実行を抑止することで、ＤＥ４００に格納されていない最新のデータがあるにもかかわらず、古いデータがホスト装置に送信されてしまうという事態を防止することができる。
【０３４０】
次に、図２９は、ＣＢＵのＩＯ制御部における判定パターンの例を示す図である。
ＣＭ間で通信が行われる際や、ＣＭとＣＢＵとの間で通信が行われる際、ＰＣＩｅパケットは少なくとも１つのＣＢＵのＩＯ制御部３１０を経由する。ＣＢＵのＩＯ制御部３１０は、ＰＣＩｅパケットを受信したとき、受信したポートと、パケットの種別（すなわち、ＴＬＰヘッダの「Ｆｍｔ」，「Ｔｙｐｅ」の値）と、ＴＬＰヘッダの宛先判別用番号（Ａｄｄｒ．［ｎ：ｎ−２］）との組み合わせに応じて、ＰＣＩｅパケットが自装置（すなわち、ＩＯ制御部３１０が属するＣＢＵ）宛てか、あるいは他の装置宛てかを判定する。ＩＯ制御部３１０は、ＰＣＩｅパケットが他の装置宛てであると判定した場合には、ＰＣＩｅパケットを他方のポートから転送する。一方、ＩＯ制御部３１０は、受信したＰＣＩｅパケットが自装置宛てと判定した場合には、上記の情報の組み合わせから自装置がどのような処理をするべきかを判定することもできる。
【０３４１】
上記情報の組み合わせに基づくＩＯ制御部３１０による判定パターンには、例えば、図２９のような１３種類のパターンがある。なお、以下の説明において、自系ＣＭとは、自装置のＮＡＮＤフラッシュ３３１にキャッシュ領域２０２ｂのデータをバックアップしているＣＭを指す。例えば、ＣＢＵ３００ａにとっての自系ＣＭはＣＭ２００ａであり、他系ＣＭはＣＭ２００ｂである。また、ＩＯ制御部３１０が備える２つのポートのうち、一方のポートは自系ＣＭに接続し、他方のポートは他方のＣＢＵに接続する。
【０３４２】
パターン１の場合、ＩＯ制御部３１０は、自装置に対する、自系ＣＭからのデータの二重化要求と判定する。この処理は、例えば、上記シーケンス図におけるステップＳ１１２，Ｓ１３８，Ｓ１７５に対応する。この場合、宛先判別用番号の下位２ビットは分割領域の種別を指す。
【０３４３】
パターン２の場合、ＩＯ制御部３１０は、自系ＣＭから自装置へのＬＢＡの通知と判定する。この処理は、例えば、ステップＳ１０８，Ｓ１７１，Ｓ２０９，Ｓ２８２に対応する。
【０３４４】
パターン３の場合、ＩＯ制御部３１０は、自装置に対する、自系ＣＭからのページの無効化要求と判定する。この場合、宛先判別用番号の下位２ビットは分割領域の種別を指す。ＩＯ制御部３１０は、ペイロードにＬＢＡが設定されていた場合、ＩＤが示す分割領域のページのうちＬＢＡに対応するページの無効化が要求されたと判定する。これは、例えば、ステップＳ１６６，Ｓ２７７に対応する。
【０３４５】
一方、ＩＯ制御部３１０は、ペイロードにＬＢＡが設定されていなかった場合、ＩＤが示す分割領域内の全有効ページの無効化が要求されたと判定する。これは、例えば、ステップＳ３３３でＣＭ２００ａが送信した、ライトバックしたデータに対応するＩＤを通知するための書き込み要求パケットを、ＣＢＵ３００ａのＩＯ制御部３１０が受信した場合に対応する。
【０３４６】
パターン４の場合、ＩＯ制御部３１０は、受信した書き込み要求パケットを他方のＣＢＵに転送する。この処理は、例えば、ステップＳ２０３，Ｓ２４３，Ｓ２７３でＣＭ２００ａが送信した書き込み要求パケットを、ＣＢＵ３００ａのＩＯ制御部３１０が受信した場合に対応する。
【０３４７】
パターン５の場合、ＩＯ制御部３１０は、受信した読み出し要求パケットからＩＤを抽出するとともに、受信した読み出し要求パケットを他方のＣＢＵに転送する。この処理は、例えば、ステップＳ２１２，Ｓ２４８，Ｓ２８５に対応する。
【０３４８】
パターン６の場合、ＩＯ制御部３１０は、自系ＣＭからのＩＤの割り当て要求と判定する。この処理は、例えば、Ｓ１０４，Ｓ１６７でＣＭ２００ａが送信した読み出し要求パケットを、ＣＢＵ３００ａのＩＯ制御部３１０が受信した場合や、ステップＳ２０５，Ｓ２７８でＣＭ２００ｂが送信した読み出し要求パケットを、ＣＢＵ３００ｂのＩＯ制御部３１０が受信した場合に対応する。この場合、宛先判別用番号の下位２ビットは分割領域の種別を指す。
【０３４９】
パターン７の場合、ＩＯ制御部３１０は、受信した読み出し要求パケットを他方のＣＢＵに転送する。この処理は、例えば、ステップＳ３５２でＣＭ２００ｂが送信した書き戻し要求のための読み出し要求パケットを、ＣＢＵ３００ｂのＩＯ制御部３１０が受信した場合に対応する。
【０３５０】
パターン８の場合、ＩＯ制御部３１０は、受信したコントロールパケットを他方のＣＢＵに転送する。この処理は、例えば、ステップＳ２１６，Ｓ２５３，Ｓ２８９でＣＭ２００ａから送信された応答パケットを、ＣＢＵ３００ａのＩＯ制御部３１０が受信した場合に対応する。
【０３５１】
パターン９の場合、ＩＯ制御部３１０は、受信した書き込み要求パケットを自系ＣＭに転送する。この処理は、例えば、ステップＳ２０３，Ｓ２４３，Ｓ２７３でＣＭ２００ａが送信した書き込み要求パケットを、ＣＢＵ３００ａのＩＯ制御部３１０が受信した場合に対応する。
【０３５２】
パターン１０の場合、ＩＯ制御部３１０は、受信した読み出し要求パケットを自系ＣＭに転送する。この処理は、例えば、ステップＳ２１２，Ｓ２４８，Ｓ２８５でＣＢＵ３００ｂから転送された読み出し要求パケットを、ＣＢＵ３００ａのＩＯ制御部３１０が受信した場合に対応する。この場合、宛先判別用番号の下位２ビットは分割領域の種別を指す。
【０３５３】
パターン１１の場合、ＩＯ制御部３１０は、自装置のＮＡＮＤフラッシュ３３１のデータをＤＭＡ転送するように要求されたと判定する。この処理は、例えば、ステップＳ３５３の処理に対応する。
【０３５４】
パターン１２の場合、ＩＯ制御部３１０は、他系ＣＭから送信されたデータの二重化要求と判定する。この処理は、例えば、ステップＳ２１７，Ｓ２５４，Ｓ２９０の処理に対応する。この場合、宛先判別用番号の下位２ビットは分割領域の種別を指す。
【０３５５】
パターン１３の場合、ＩＯ制御部３１０は、受信したコントロールパケットを自系ＣＭに転送する。この処理は、例えば、ステップＳ３５５，Ｓ３５６，Ｓ３５８，Ｓ３５９でＣＢＵ３００ａから送信された応答パケットを、ＣＢＵ３００ｂのＩＯ制御部３１０が受信した場合に対応する。
【０３５６】
以上のようにＩＯ制御部３１０がパケットの宛先および要求された処理を判定することで、ＣＭ間の通信、およびＣＭとＣＢＵとの間の通信を、ＰＣＩ  Ｅｘｐｒｅｓｓ規格に準拠したパケットを用いて実行できるようになる。これにより、ストレージシステム１００の開発コストを低減できる。また、ＣＭによるＰＣＩｅバスを通じた通信処理に関する設計変更を少なくすることができる。
【０３５７】
以上の各実施の形態に関し、さらに以下の付記を開示する。
（付記１）  プロセッサと、
第１のメモリおよび第２のメモリと、
前記プロセッサおよび前記第１のメモリに接続された第１の転送制御回路と、
前記第１の転送制御回路および前記第２のメモリに接続された第２の転送制御回路と、
を有し、
前記第１の転送制御回路は、前記第１のメモリを転送先とするデータの転送要求を前記プロセッサから受けると、前記データを前記第２の転送制御回路に送信し、
前記第２の転送制御回路は、前記第１の転送制御回路から前記データを受信すると、受信した前記データを前記第２のメモリに格納するとともに、受信した前記データを前記第１の転送制御回路を通じて前記第１のメモリに格納する、
ことを特徴とする情報処理システム。
【０３５８】
（付記２）  前記第１の転送制御回路は、前記第１のメモリを転送先とする前記データの転送要求を前記プロセッサから受けると、前記データが格納され、かつ前記第１のメモリを書き込み先とする書き込み要求パケットを前記第２の転送制御回路に送信し、
前記第２の転送制御回路は、前記第１の転送制御回路からの前記書き込み要求パケットを受信すると、前記書き込み要求パケットに格納された前記データを前記第２のメモリに書き込むとともに、前記書き込み要求パケットを前記第１の転送制御回路に転送し、
前記第１の転送制御回路は、前記第２の転送制御回路から転送された前記書き込み要求パケットを受信すると、前記書き込み要求パケットに格納された前記データを前記第１のメモリに書き込む、
ことを特徴とする付記１記載の情報処理システム。
【０３５９】
（付記３）  前記情報処理システムには記憶装置が接続され、
前記プロセッサは、ホスト装置からのアクセス要求に応じて前記記憶装置に対するアクセスを制御するとともに、前記第１のメモリを、前記記憶装置と前記ホスト装置との間で送受信するデータをキャッシュするキャッシュメモリとして使用し、
前記第２の転送制御回路には、前記プロセッサに代わって、前記ホスト装置からのアクセス要求に応じて前記記憶装置に対するアクセスを制御するバックアップ装置が接続され、
前記プロセッサの動作が停止したとき、前記バックアップ装置は、前記第２のメモリに格納されたデータを前記第２の転送制御回路を通じて読み出して前記記憶装置に書き込む、
ことを特徴とする付記１または２記載の情報処理システム。
【０３６０】
（付記４）  前記第２の転送制御回路には転送バッファが接続され、
前記第２の転送制御回路は、前記第１の転送制御回路から送信された前記データを前記転送バッファに一時的に格納し、前記データを前記転送バッファから前記第２のメモリへ転送するとともに、前記データを前記転送バッファから前記第１の転送制御回路を通じて前記第１のメモリへ転送する、
ことを特徴とする付記１〜３のいずれか１項に記載の情報処理システム。
【０３６１】
（付記５）  ネットワークに接続された第１の通信インタフェースと、
前記ネットワークを通じて前記第１のインタフェースが受信したデータを一時的に記憶するとともに、前記第１の転送制御回路に接続された第１の受信バッファと、
前記ネットワークに接続された第２の通信インタフェースと、
前記ネットワークを通じて前記第２の通信インタフェースが受信したデータを一時的に記憶する第２の受信バッファと、
前記第２の受信バッファおよび前記第２の転送制御回路に接続された第３の転送制御回路と、
をさらに有し、
前記プロセッサが、前記第１の受信バッファに記憶された第１のデータを前記第１のメモリに転送するように前記第１の転送制御回路に要求した場合、
前記第１の転送制御回路は、前記第１の受信バッファから読み出した前記第１のデータを格納した、前記第１のメモリを書き込み先とする書き込み要求パケットを前記第２の転送制御回路に送信し、
前記第２の転送制御回路は、前記第１の転送制御回路からの前記書き込み要求パケットを受信すると、前記書き込み要求パケットに格納された前記第１のデータを前記第２のメモリに書き込むとともに、前記書き込み要求パケットを前記第１の転送制御回路に転送し、
前記第１の転送制御回路は、前記第２の転送制御回路から転送された前記書き込み要求パケットに格納された前記第１のデータを前記第１のメモリに書き込み、
前記プロセッサが、前記第２の受信バッファに記憶された第２のデータを前記第１のメモリに転送するように前記第１の転送制御回路に要求した場合、
前記第１の転送制御回路は、前記第２の受信バッファを読み出し元とする読み出し要求パケットを前記第２の転送制御回路を通じて前記第３の転送制御回路に送信し、
前記第３の転送制御回路は、前記読み出し要求パケットを受信すると、前記第２の受信バッファから読み出した前記第２のデータを格納した応答パケットを前記第２の転送制御回路に送信し、
前記第２の転送制御回路は、前記応答パケットを受信すると、前記応答パケットに格納された前記第２のデータを前記第２のメモリに書き込むとともに、前記応答パケットを前記第１の転送制御回路に転送し、
前記第１の転送制御回路は、前記第２の転送制御回路から転送された前記応答パケットに格納された前記第２のデータを前記第１のメモリに書き込む、
ことを特徴とする付記１記載の情報処理システム。
【０３６２】
（付記６）  前記第２のメモリはＮＡＮＤフラッシュであり、
前記第２の転送制御回路は、前記データのサイズがページのサイズ以下である場合には、前記ＮＡＮＤフラッシュの記憶領域をページ単位で分割した複数の第１種別の分割領域のうちの１つに前記データを書き込み、前記データのサイズがページのサイズより大きくブロックのサイズ以下である場合には、前記ＮＡＮＤフラッシュの記憶領域をブロック単位で分割した複数の第２種別の分割領域のうちの１つに前記データを書き込む、
ことを特徴とする付記１記載の情報処理システム。
【０３６３】
（付記７）  前記プロセッサは、
前記第１の転送制御回路に対してデータの転送を要求したことに伴って前記第２のメモリに格納されたデータが、どの分割領域に格納されたかを示す識別情報を前記第２の転送制御回路から取得し、
前記第２のメモリに格納されたデータの無効化を要求する際に、無効化するデータが格納された分割領域を示す識別情報を、前記第１の転送制御回路を通じて前記第２の転送制御回路に通知する、
ことを特徴とする付記６記載の情報処理システム。
【０３６４】
（付記８）  前記情報処理システムには記憶装置が接続され、
前記プロセッサは、
ホスト装置からのアクセス要求に応じて前記記憶装置に対するアクセスを制御するとともに、前記第１のメモリを、前記記憶装置と前記ホスト装置との間で送受信するデータをキャッシュするキャッシュメモリとして使用し、
前記第１のメモリに格納されたデータを前記記憶装置にライトバックしたとき、ライトバックしたデータに対応する識別情報を前記第１の転送制御回路を通じて前記第２の転送制御回路に通知して、通知した識別情報に対応する分割領域のデータを無効化するように要求し、
前記第２の転送制御回路は、前記プロセッサから通知された識別情報が前記第２種別の分割領域を示す場合、前記通知された識別情報が示す分割領域に対するデータ消去処理を実行する、
ことを特徴とする付記７記載の情報処理システム。
【０３６５】
（付記９）  前記プロセッサは、前記第２のメモリに格納されたデータを新たなデータで上書きするように要求する際に、上書き対象のデータに対応する識別情報を前記第１の転送制御回路を通じて前記第２の転送制御回路に通知し、
前記第２の転送制御回路は、通知された識別番号が示す第１の分割領域のデータを無効化するとともに、前記第１の分割領域と同じ種別の第２の分割領域を前記通知された識別番号に割り当て直し、前記第２の分割領域に前記新たなデータを書き込む、
ことを特徴とする付記７または８記載の情報処理システム。
【０３６６】
（付記１０）  前記プロセッサは、前記第２のメモリに格納された第１のデータの一部を第２のデータで上書きするように要求する際に、前記第１のデータのうち前記第２のデータで上書きされる領域を無効化するとともに、前記第２のデータのサイズに応じた種別の分割領域を示す新たな識別情報を通知するように、前記第２の転送制御回路に要求し、
前記第２の転送制御回路は、前記第１のデータが格納された分割領域のうち前記第２のデータで上書きされる領域を無効化するとともに、前記新たな識別情報を前記プロセッサに通知し、前記第２のデータを前記新たな識別情報が示す分割領域に書き込む、
ことを特徴とする付記８記載の情報処理システム。
【０３６７】
（付記１１）  前記プロセッサは、前記第１のメモリに格納された、前記第２のデータによってその一部が上書きされた前記第１のデータを前記記憶装置にライトバックしたとき、前記第１のデータに対応する識別情報と前記第２のデータに対応する識別情報を前記第１の転送制御回路を通じて前記第２の転送制御回路に通知して、通知した各識別情報に対応する分割領域のデータを無効化するように要求することを特徴とする付記１０記載の情報処理システム。
【０３６８】
（付記１２）  前記第２の転送制御回路には、前記プロセッサに代わって、前記ホスト装置からのアクセス要求に応じて前記記憶装置に対するアクセスを制御するバックアップ装置が接続され、
前記プロセッサは、前記第１の転送制御回路に対してデータの転送を要求したことに伴って前記第２のメモリに新たなデータが格納されるたびに、格納された新たなデータの論理アドレスを前記第１の転送制御回路を通じて前記第２の転送制御回路に通知し、
前記第２の転送制御回路は、前記第２のメモリに格納したデータと前記プロセッサから通知された論理アドレスとを、前記第１種別の分割領域ごとに管理テーブルに対応付けて登録し、
前記プロセッサの動作が停止したとき、前記バックアップ装置は、前記第２のメモリに格納されたデータと、データに対応付けられた論理アドレスとを、前記第２の転送制御回路を通じて読み出し、連続する論理アドレスが付与されたデータを一連のデータと判定して、前記一連のデータを前記記憶装置に書き込む、
ことを特徴とする付記８記載の情報処理システム。
【０３６９】
（付記１３）  プロセッサと、第１のメモリおよび第２のメモリとを備える情報処理システムにおけるデータ記録制御方法であって、
前記プロセッサが、前記第１のメモリを転送先とするデータの転送要求を、前記第１のメモリに接続された第１の転送制御回路に要求し、
前記第１の転送制御回路が、前記第２のメモリに接続された第２の転送制御回路に対して、前記データを送信し、
前記第２の転送制御回路が、前記第１の転送制御回路から受信した前記データを前記第２のメモリに格納するとともに、受信した前記データを前記第１の転送制御回路を通じて前記第１のメモリに格納する、
ことを特徴とするデータ記録制御方法。
【０３７０】
（付記１４）  前記第２の転送制御回路に前記データを送信する処理では、前記第１の転送制御回路は、前記データが格納され、かつ前記第１のメモリを書き込み先とする書き込み要求パケットを前記第２の転送制御回路に送信し、
前記データを前記第１のメモリおよび前記第２のメモリに格納する処理は、
前記第２の転送制御回路が、前記第１の転送制御回路からの前記書き込み要求パケットを受信すると、前記書き込み要求パケットに格納された前記データを前記第２のメモリに書き込むとともに、前記書き込み要求パケットを前記第１の転送制御回路に転送し、
前記第１の転送制御回路が、前記第２の転送制御回路から転送された前記書き込み要求パケットを受信すると、前記書き込み要求パケットに格納された前記データを前記第１のメモリに書き込む、
処理を含む、
ことを特徴とする付記１３記載のデータ記録制御方法。
【０３７１】
（付記１５）  前記第２のメモリはＮＡＮＤフラッシュであり、
前記第２の転送制御回路が、前記データのサイズがページのサイズ以下である場合には、前記ＮＡＮＤフラッシュの記憶領域をページ単位で分割した複数の第１種別の分割領域のうちの１つに前記データを書き込み、前記データのサイズがページのサイズより大きくブロックのサイズ以下である場合には、前記ＮＡＮＤフラッシュの記憶領域をブロック単位で分割した複数の第２種別の分割領域のうちの１つに前記データを書き込む、
処理をさらに含むことを特徴とする付記１３記載のデータ記録制御方法。
【０３７２】
（付記１６）  前記プロセッサが、
前記第１の転送制御回路に対してデータの転送を要求したことに伴って前記第２のメモリに格納されたデータが、どの分割領域に格納されたかを示す識別情報を前記第２の転送制御回路から取得し、
前記第２のメモリに格納されたデータの無効化を要求する際に、無効化するデータが格納された分割領域を示す識別情報を、前記第１の転送制御回路を通じて前記第２の転送制御回路に通知する、
処理をさらに含むことを特徴とする付記１５記載のデータ記録制御方法。
【符号の説明】
【０３７３】
１  情報処理システム
１１  プロセッサ
２１  第１のメモリ
２２  第２のメモリ
２３  バッファメモリ
３１  第１の転送制御回路
３２  第２の転送制御回路
【図１】
0005835040.tif 000002
【図２】
0005835040.tif 000003
【図３】
0005835040.tif 000004
【図４】
0005835040.tif 000005
【図５】
0005835040.tif 000006
【図６】
0005835040.tif 000007
【図７】
0005835040.tif 000008
【図８】
0005835040.tif 000009
【図９】
0005835040.tif 000010
【図１０】
0005835040.tif 000011
【図１１】
0005835040.tif 000012
【図１２】
0005835040.tif 000013
【図１３】
0005835040.tif 000014
【図１４】
0005835040.tif 000015
【図１５】
0005835040.tif 000016
【図１６】
0005835040.tif 000017
【図１７】
0005835040.tif 000018
【図１８】
0005835040.tif 000019
【図１９】
0005835040.tif 000020
【図２０】
0005835040.tif 000021
【図２１】
0005835040.tif 000022
【図２２】
0005835040.tif 000023
【図２３】
0005835040.tif 000024
【図２４】
0005835040.tif 000025
【図２５】
0005835040.tif 000026
【図２６】
0005835040.tif 000027
【図２７】
0005835040.tif 000028
【図２８】
0005835040.tif 000029
【図２９】
0005835040.tif 000030