(57)【特許請求の範囲】
【請求項１】
書き込み回数に上限がある複数の書き換え可能な不揮発性メモリと、
ホスト計算機からのアクセス要求に基づいて、論理ディスクを構成する前記不揮発性メモリへのアクセスを制御するストレージコントローラとを具備し、
前記ストレージコントローラは、
メモリプール生成手段と、
論理ディスク生成手段とを具備し、
前記メモリプール生成手段は、
前記複数の不揮発性メモリのうちの第１の数の不揮発性メモリをグループ化して、前記第１の数の不揮発性メモリが順序付けて配置されたメモリプールを生成するグループ化手段と、
前記第１の数の不揮発性メモリの記憶領域を一定サイズのブロックに分割するブロック分割手段と、
前記第１の数の不揮発性メモリの配置順に従い、前記第１の数の不揮発性メモリのうち、前記第１の数未満である第２の数の不揮発性メモリのそれぞれから順に１つのブロックを選択して組み合わせた第２の数のブロックから構成される複数のチャンクを生成するチャンク生成手段とを具備し、
前記論理ディスク生成手段は、前記複数のチャンクを組み合わせて割り当てることにより前記論理ディスクを生成する
ストレージ装置。
【請求項２】
前記第２の数が前記第１の数と互いに素である請求項１記載のストレージ装置。
【請求項３】
前記論理ディスク生成手段は、前記チャンクを構成する先頭のブロックが前記第２の数の不揮発性メモリのうちの第１の不揮発性メモリに存在するブロックで構成されているチャンクを割り当てて前記論理ディスクを生成する請求項１記載のストレージ装置。
【請求項４】
前記論理ディスク生成手段は、初めに第１のチャンクを前記論理ディスクに割り当てた場合、次に前記第１のチャンクを構成するブロックのうち、最後のブロックが存在する不揮発性メモリの次の不揮発性メモリから選択したブロックが先頭のブロックを構成する第２のチャンクを前記論理ディスクに割り当てる請求項１記載のストレージ装置。
【請求項５】
書き込み回数に上限がある複数の書き換え可能な不揮発性メモリと接続され、ホスト計算機からのアクセス要求に基づいて、論理ディスクを構成する前記不揮発性メモリへのアクセスを制御するストレージコントローラにおいて、
メモリプール生成手段と、
論理ディスク生成手段とを具備し、
前記メモリプール生成手段は、
前記複数の不揮発性メモリのうちの第１の数の不揮発性メモリをグループ化して、前記第１の数の不揮発性メモリが順序付けて配置されたメモリプールを生成するグループ化手段と、
前記第１の数の不揮発性メモリの記憶領域を一定サイズのブロックに分割するブロック分割手段と、
前記第１の数の不揮発性メモリの配置順に従い、前記第１の数の不揮発性メモリのうち、前記第１の数未満である第２の数の不揮発性メモリのそれぞれから順に１つのブロックを選択して組み合わせた第２の数のブロックから構成される複数のチャンクを生成するチャンク生成手段とを具備し、
前記論理ディスク生成手段は、前記複数のチャンクを組み合わせて割り当てることにより前記論理ディスクを生成する
ストレージコントローラ。
【請求項６】
グループ化手段、ブロック分割手段及びチャンク生成手段を含むメモリプール生成手段と、論理ディスク生成手段とを備え、ホスト計算機からのアクセス要求に基づいて、論理ディスクを構成する書き込み回数に上限がある複数の書き換え可能な不揮発性メモリへのアクセスを制御するストレージコントローラに適用される論理ディスク生成方法であって、
前記グループ化手段が、前記複数の不揮発性メモリのうちの第１の数の不揮発性メモリをグループ化して、前記第１の数の不揮発性メモリが順序付けて配置されたメモリプールを生成するステップと、
前記ブロック分割手段が、前記第１の数の不揮発性メモリの記憶領域を一定サイズのブロックに分割するステップと、
前記チャンク生成手段が、前記第１の数の不揮発性メモリの配置順に従い、前記第１の数の不揮発性メモリのうち、前記第１の数未満である第２の数の不揮発性メモリのそれぞれから順に１つのブロックを選択して組み合わせた第２の数のブロックから構成される複数のチャンクを生成するステップと、
前記論理ディスク生成手段が、前記複数のチャンクを組み合わせて割り当てることにより前記論理ディスクを生成するステップと
を具備する論理ディスク生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、複数の不揮発性メモリを備えたストレージ装置、ストレージコントローラ及び論理ディスク生成方法に関する。
【背景技術】
【０００２】
従来から、データの読み出し／書き込みの性能を向上させるため、或いは耐障害性を向上させるために、ＲＡＩＤ（Redundant Arrays of Independent Disks）構成のストレージ装置が開発されている。ＲＡＩＤは複数のＨＤＤ（Hard Disk Drive）を用いて構成されるのが一般的である。つまりＲＡＩＤは、ＨＤＤに最適化した技術である。このため、ＨＤＤに代えて、ＳＳＤ（Solid State Drive）やフラッシュメモリモジュールのような、書き換え可能な不揮発性記憶素子から構成される記憶媒体（以下、不揮発性メモリと称する）をＲＡＩＤに適用する場合には工夫が必要となる。
【０００３】
例えば、上述の記憶素子のデータ保持力は書き込み回数の増加に伴って低下する。このため、上述の記憶素子の書き込み可能回数は決まっているのが一般的である。もし、書き込み可能回数を超える書き込みが行われるならば、データ保持力の低下のために、記憶素子はデータを正常に保持できなくなる。このような状態に陥ると、データの読み出し／書き込み不良が発生するおそれがある。
【０００４】
一方、複数のＨＤＤを用いて構成されるＲＡＩＤでは、当該複数のＨＤＤへの書き込みの回数は均一化される傾向にあることが知られている。このため、複数のＨＤＤに代えて複数の不揮発性メモリを用いてＲＡＩＤを構成する場合、当該複数の不揮発性メモリへの書き込みの回数もほぼ均一化される。つまり、ＲＡＩＤを構成する全ての不揮発性メモリへの書き込みの回数がほぼ同一となる。このようなＲＡＩＤでは、上記全ての不揮発性メモリの書き込み回数が同時に上限を越える可能性が高くなり、当該全ての不揮発性メモリの同時故障の確率が高くなる。
【０００５】
そこで従来技術では、ＲＡＩＤを構成する全ての不揮発性メモリのストライプブロック毎に書き込み回数をカウントし、ストライプブロック毎の書き込み回数に基づいて、ストライプグループ内でストライプブロックが入れ替えられる。この入れ替えにより、全ての不揮発性メモリの同時故障の確率を低減できる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１０−０１５５１６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上述したように、従来技術では、ＲＡＩＤを構成する複数の不揮発性メモリの同時故障の確率を低減するために、ストライプブロック毎の書き込み回数に基づいて、ストライプグループ内でストライプブロックが入れ替えられる。つまり、不揮発性メモリ間でデータが移動される。このデータの移動は、ストレージ装置の処理性能の低下を招く。
【０００８】
本発明が解決しようとする課題は、処理性能を低下させることなく、複数の不揮発性メモリの同時不良の発生を抑制することができる、複数の不揮発性メモリを備えたストレージ装置、ストレージコントローラ及び論理ディスク生成方法を提供することにある。
【課題を解決するための手段】
【０００９】
実施形態によれば、ストレージ装置は、書き込み回数に上限がある複数の書き換え可能な不揮発性メモリと、ホスト計算機からのアクセス要求に基づいて、論理ディスクを構成する前記不揮発性メモリへのアクセスを制御するストレージコントローラとを具備する。前記ストレージコントローラは、メモリプール生成手段と、論理ディスク生成手段とを具備する。前記メモリプール生成手段は、グループ化手段と、ブロック分割手段と、チャンク生成手段とを具備する。前記グループ化手段は、前記複数の不揮発性メモリのうちの第１の数の不揮発性メモリをグループ化して、前記第１の数の不揮発性メモリが順序付けて配置されたメモリプールを生成する。前記ブロック分割手段は、前記第１の数の不揮発性メモリの記憶領域を一定サイズのブロックに分割する。前記チャンク生成手段は、前記第１の数の不揮発性メモリの配置順に従い、前記第１の数の不揮発性メモリのうち、前記第１の数未満である第２の数の不揮発性メモリのそれぞれから順に１つのブロックを選択して組み合わせた第２の数のブロックから構成される複数のチャンクを生成する。前記論理ディスク生成手段は、前記複数のチャンクを組み合わせて割り当てることにより前記論理ディスクを生成する。
【図面の簡単な説明】
【００１０】
【図１】実施形態に係るストレージシステムの構成を示すブロック図。
【図２】同実施形態で適用されるフラッシュメモリプールの構成の一例を示す図。
【図３】同実施形態で適用されるタイプ１の論理ディスクの例を２つの論理ディスクについて示す図。
【図４】同実施形態で適用されるタイプ２の論理ディスクの例を２つの論理ディスクについて示す図。
【図５】図１に示されるストレージ装置の主としてコントローラの構成を示すブロック図。
【図６】図５に示されるディスク管理部の構成を示すブロック図。
【図７】図５に示される初期化処理部の構成を示すブロック図。
【図８】同実施形態で適用されるフラッシュメモリプールテーブルの例を示す図。
【図９】同実施形態で適用されるブロック割り当てテーブルの例を示す図。
【図１０】同実施形態で適用される、タイプ１の論理ディスクに対応するマッピングテーブルの例を示す図。
【図１１】同実施形態で適用される、タイプ２の論理ディスクに対応するマッピングテーブルの例を示す図。
【図１２】同実施形態で適用される、フラッシュメモリプールの生成を含む初期化処理の手順を示すフローチャート。
【図１３】同実施形態で適用される、論理ディスク生成処理の手順を示すフローチャート。
【図１４】同実施形態で適用される、論理ディスク（タイプ１）マッピングテーブル生成処理の手順を示すフローチャート。
【図１５】同実施形態で適用される、論理ディスク（タイプ２）マッピングテーブル生成処理の手順を示すフローチャート。
【発明を実施するための形態】
【００１１】
以下、実施の形態につき図面を参照して説明する。  
図１は実施形態に係るストレージシステムの構成を示すブロック図である。
【００１２】
図１に示すストレージシステムは、ホスト計算機１００及びストレージ装置２００から構成される。ホスト計算機１００及びストレージ装置２００は、例えば、ＦＣ（Fibre Channel）等によりＳＣＳＩ（Small Computer System Interface）規格に準拠して接続されている。
【００１３】
ホスト計算機１００は、設定ツール１０１及びホストＩ／Ｆ（インターフェイス）１０２を備えている。設定ツール１０１は、論理ディスク（つまり論理的なボリューム）の生成等のためにユーザが入力した情報を、ホストＩ／Ｆ１０２を介してストレージ装置２００に伝える。そのため設定ツール１０１は、例えば論理ディスクのサイズやタイプなどのパラメータをユーザがホスト計算機１００の入力装置（図示せず）を用いて入力するためのインターフェイスを備える。ホストＩ／Ｆ１０２は、ストレージ装置２００に実装されたコントローラ（ストレージコントローラ）２１０と通信する。ホストＩ／Ｆ１０２は、例えば設定ツール１０１を用いてユーザによって入力された情報をストレージ装置２００のコントローラ２１０に伝える。コントローラ２１０は、このユーザによって入力された情報が、論理ディスクのサイズやタイプなどのパラメータである場合、当該パラメータに基づいて論理ディスクを生成する。
【００１４】
ホスト計算機１００は、ストレージ装置２００に構築された論理ディスクに対して読み出し／書き込みが可能である。これはストレージ装置２００が生成する論理ディスクをホスト計算機１００のオペレーティングシステム（ＯＳ）がＳＣＳＩ規格に準拠したディスクとして検出し、ホスト計算機１００で動作するプログラムが当該ディスクに対して読み出し／書き込みできることを指す。
【００１５】
ストレージ装置２００は、コントローラ２１０と、複数のフラッシュメモリ、例えば５つのフラッシュメモリ２２０-0〜２２０-4とを備えている。コントローラ２１０はホスト計算機１００からの読み出し／書き込み要求に基づいて、対応する論理ディスクを構成するフラッシュメモリ２２０-i（ｉ＝０〜４）に対してデータの読み出し／書き込みを行う。コントローラ２１０はまた、ホスト計算機１００（設定ツール１０１）からの要求に応じて論理ディスクを生成し、且つ生成された論理ディスクを管理する。
【００１６】
フラッシュメモリ２２０-iは、ＳＳＤやフラッシュメモリモジュール（例えばＮＡＮＤ型フラッシュメモリモジュール）のような、書き換え可能な不揮発性記憶素子から構成される記憶媒体（不揮発性記憶媒体）、つまり書き換え可能な不揮発性メモリである。フラッシュメモリ２２０-iは、書き換え可能な不揮発性半導体記憶素子と当該半導体記憶素子を制御するＦＷ（Firmware）とを含む。このＦＷは、半導体記憶素子への書き込みの回数を平準化する周知のウェアレベリング処理を行う。また、フラッシュメモリ２２０-iは、外部インターフェイスを含む。フラッシュメモリ２２０-iが例えばＳＳＤである場合、外部インターフェイスとしてＳＡＳ（Serial Attached SCSI）を適用するのが一般的である。なお、ＳＳＤは一例であり、フラッシュメモリ２２０-iがＳＳＤである必要はない。また、ストレージ装置２００が備える記憶媒体（不揮発性メモリ）がフラッシュメモリである必要もなく、書き換えが可能な不揮発性記憶素子から構成される記憶媒体（不揮発性メモリ）であればよい。
【００１７】
ストレージ装置２００が備える全てのフラッシュメモリ２２０-iには、例えば０番からの通し番号（以下、メディア番号と称する）が付与されているものとする。このメディア番号は、フラッシュメモリ２２０-iがストレージ装置２００に初めて実装されたときに、コントローラ２１０によって付与される。メディア番号は、管理情報の一部として管理情報記憶部２３０に記憶され、一度番号が付与されると変更できないものとする。また、以降の説明を簡単にするために全てのフラッシュメモリ２２０-iのサイズ（メモリ容量）は同一であるものとする。
【００１８】
次に、ストレージ装置２００のコントローラ２１０によって生成・管理される、フラッシュメモリプールについて説明する。フラッシュメモリプールは、複数のフラッシュメモリ２２０-iをグループ化することにより構成される。つまり、フラッシュメモリプールをフラッシュメモリ２２０-iの集合と見なすこともできる。
【００１９】
図２は、フラッシュメモリプールの構成の一例を示す。  
図２の例では、フラッシュメモリプールは、５つのフラッシュメモリ２２０-0〜２２０-4の集合を１グループとして備えている。つまり、図２に示すフラッシュメモリプールは、ストレージ装置２００が有する全てのフラッシュメモリ２２０-0〜２２０-4から構成されている。しかし、フラッシュメモリプールが、フラッシュメモリ２２０-0〜２２０-4のうちの３つ以上のフラッシュメモリから構成されていてもよい。フラッシュメモリ２２０-0〜２２０-4には、それぞれメディア番号０〜５が付与されている。フラッシュメモリプールには、メディア番号０〜５の順番でフラッシュメモリ２２０-0〜２２０-4が配置（論理的に配置）されている。
【００２０】
フラッシュメモリプール内の各フラッシュメモリ２２０-iの記憶領域は一定サイズのブロック（物理ブロック）０，１，２，…に分割して管理される。ブロック０，１，２，…には、それぞれ、ブロック番号０，１，２，…が付与される。
【００２１】
ここで、フラッシュメモリプール内で隣接するフラッシュメモリ２２０-iのブロックをある一定の個数でグループ化した集合をチャンク（chunk）と定義する。フラッシュメモリ２２０-4及び２２０-0も互いに隣接しているものとする。図２の例では、チャンクを構成するブロックの数（以下、チャンク数と称する）は４であり、Ａ０，Ｂ０，Ｃ０，Ｄ０，Ｅ０，Ａ１…のようにチャンク（チャンク領域）が構成されている。
【００２２】
本実施形態において、チャンク数は、フラッシュメモリプールを構成するフラッシュメモリの数より小さく且つフラッシュメモリの数と互いに素な数であるとする。本実施形態のように、フラッシュメモリプールを構成するフラッシュメモリの数が５の場合、適用可能なチャンク数は、２、３または４のいずれかである。図２に示すフラッシュメモリプールにおいて、チャンクをメディア番号が０のフラッシュメモリ２２０-0から順に割り当てるものとする。この場合、全フラッシュメモリ２２０-0〜２２０-4がチャンク数に一致する数のブロックを消費すると、次のチャンクが再びメディア番号が０のフラッシュメモリ２２０-0から割り当てられることになる。
【００２３】
図２の例ではフラッシュメモリの数がフラッシュメモリ２２０-0〜２２０-4の５で、チャンク数が４である。この場合、先頭ブロック０から４ブロック単位でチャンクＡ０〜Ｅ０が割り当てられ、後続の４ブロック単位でチャンクＡ１〜Ｅ１が割り当てられるというように、先頭のフラッシュメモリ２２０-0の先頭ブロック０から順に４ブロック単位でチャンクが割り当てられる。
【００２４】
つまり、フラッシュメモリ２２０-0，２２０-1，２２０-2，２２０-3のそれぞれブロック０にチャンクＡ０が割り当てられ、フラッシュメモリ２２０-4のブロック０及びフラッシュメモリ２２０-0，２２０-1，２２０-2のそれぞれブロック１にチャンクＢ０が割り当てられる。次に、フラッシュメモリ２２０-3，２２０-4のそれぞれブロック１及びフラッシュメモリ２２０-0，２２０-1のそれぞれブロック２にチャンクＣ０が割り当てられ、フラッシュメモリ２２０-2，２２０-3，２２０-4のそれぞれブロック２及びフラッシュメモリ２２０-0のブロック３にチャンクＤ０が割り当てられる。次に、フラッシュメモリ２２０-1，２２０-2，２２０-3，２２０-4のそれぞれブロック３にチャンクＥ０が割り当てられる。以下、同様に、フラッシュメモリ２２０-0〜２２０-4のそれぞれブロック４〜７の合計２０ブロックに、４ブロック単位で、チャンクＡ１〜Ｅ１が割り当てられる。
【００２５】
ここで、フラッシュメモリ２２０-0〜２２０-4の各々に注目すると、当該フラッシュメモリ２２０-0〜２２０-4にそれぞれ割り当てられるチャンクの集合におけるチャンクの組み合わせは、フラッシュメモリ毎に全て異なるという特徴があることが分かる。例えば、フラッシュメモリ２２０-0に割り当てられるチャンクの集合は（Ａ０，Ｂ０，Ｃ０，Ｄ０，Ａ１…）の組み合わせ、フラッシュメモリ２２０-1に割り当てられるチャンクの集合は（Ａ０，Ｂ０，Ｃ０，Ｅ０，Ａ１…）の組み合わせ、フラッシュメモリ２２０-2に割り当てられるチャンクの集合は（Ａ０，Ｂ０，Ｄ０，Ｅ０，Ａ１…）の組み合わせ、というように全てのフラッシュメモリでチャンクの組み合わせが異なる。
【００２６】
この特徴は、それぞれのチャンクへの書き込み回数が異なれば、全てのフラッシュメモリ２２０-0〜２２０-4への書き込み回数が異なる可能性が高いということを表す。本実施形態では、この特徴を利用して論理ディスクが生成（構成）される。本実施形態で適用される論理ディスクは、タイプ１の論理ディスクとタイプ２の論理ディスクとに分類される。
【００２７】
図３は、タイプ１の論理ディスクの例を２つの論理ディスクについて示す。図３（ａ）は論理ディスク２２１ａの例を示し、図３（ｂ）は論理ディスク２２１ｂの例を示す。  
図３（ａ）に示す論理ディスク２２１ａは、フラッシュメモリプール内のフラッシュメモリ２２０-0〜２２０-4のうち、フラッシュメモリ２２０-0〜２２０-3のチャンク、つまりチャンクＡ０，Ａ１，Ａ２…（のブロック）を論理ブロック（論理ディスク２２１ａの論理ブロック）に割り当てることにより構成される。図３（ｂ）に示す論理ディスク２２１ｂは、フラッシュメモリプール内のフラッシュメモリ２２０-0〜２２０-4のうち、フラッシュメモリ２２０-4，２２０-0〜２２０-2のチャンク、つまりチャンクＢ０，Ｂ１，Ｂ２…（のブロック）を論理ブロックに割り当てることにより構成される。
図３（ａ）に示す論理ディスク２２１ａは、フラッシュメモリプール内のフラッシュメモリ２２０-0〜２２０-4のうち、チャンクを構成する先頭のブロックがフラッシュメモリ２２０-0に存在するブロックであるチャンクだけを割り当てることにより、構成されている。
フラッシュメモリ２２０-0のブロック番号０に該当するブロックＡ０と、フラッシュメモリ２２０-1のブロック番号０に該当するブロックＡ０と、フラッシュメモリ２２０-2のブロック番号０に該当するブロックＡ０と、フラッシュメモリ２２０-3のブロック番号０に該当するブロックＡ０との４つのブロックで構成されるチャンクの先頭ブロックは、フラッシュメモリ２２０-0に存在する。
フラッシュメモリ２２０-0のブロック番号４に該当するブロックＡ１と、フラッシュメモリ２２０-1のブロック番号４に該当するブロックＡ１と、フラッシュメモリ２２０-2のブロック番号４に該当するブロックＡ１と、フラッシュメモリ２２０-3のブロック番号４に該当するブロックＡ１との４つのブロックで構成されるチャンクの先頭ブロックは、フラッシュメモリ２２０-0に存在する。
同様に、詳細な説明は省略するが、図３（ｂ）に示す論理ディスク２２１ｂは、フラッシュメモリ２２０-４に存在するブロックが先頭ブロックとなっているチャンクだけを割り当てることにより、構成されている。
【００２８】
このように、タイプ１の論理ディスクは、フラッシュメモリプール内のフラッシュメモリ２２０-0〜２２０-4のうち、チャンク数に一致する数の予め定められたフラッシュメモリのチャンクを割り当てることによって構成される。このタイプ１の論理ディスクは、同一論理ディスクの記憶領域内で書き込み回数の偏りが少ないが、論理ディスク毎に書き込み回数が異なる場合に、各フラッシュメモリに書き込みを分散させることができる、つまり各フラッシュメモリの書き込み回数が均一化するのを抑制できるという特徴がある。このタイプ１の論理ディスクは、論理ディスク毎に用途が異なるようなシステムへの適用が想定される。例えば、データベース用、バックアップ用、或いはファイルサーバ用等の論理ディスクを混在させる場合のように、各論理ディスクの書き込み回数が異なることが想定される場合に効果が高い。
【００２９】
図４は、タイプ２の論理ディスクの例を２つの論理ディスクについて示す。図４（ａ）は論理ディスク２２２ａの例を示し、図４（ｂ）は論理ディスク２２２ｂの例を示す。  
図４（ａ）に示す論理ディスク２２２ａは、フラッシュメモリプール内の全てのフラッシュメモリ２２０-0〜２２０-4に均等にまたがるように、チャンクＡ０，Ｂ１，Ｃ２…（のブロック）を論理ブロック（論理ディスク２２２ａの論理ブロック）に割り当てることにより構成される。図４（ｂ）に示す論理ディスク２２２ｂは、フラッシュメモリプール内の全てのフラッシュメモリ２２０-0〜２２０-4に均等にまたがるように、つまりチャンクＢ０，Ｃ１，Ｄ２…（のブロック）を論理ブロックに割り当てることにより構成される。
図４（ａ）に示す論理ディスク２２２ａに対して初めに割り当てられているチャンクは、次のように構成されている。この初めに割り当てられているチャンクは、先頭ブロックとしてのフラッシュメモリ２２０-0のブロック番号０に該当するブロックＡ０と、フラッシュメモリ２２０-1のブロック番号０に該当するブロックＡ０と、フラッシュメモリ２２０-2のブロック番号０に該当するブロックＡ０と、最後のブロックとしてのフラッシュメモリ２２０-3のブロック番号０に該当するブロックＡ０とから構成されている。
２番目に割り当てられているチャンクは、次のように構成されている。２番目に割り当てられているチャンクは、初めに割り当てられたチャンクの最後のブロックＡ０が存在するフラッシュメモリ２２０-3の次のフラッシュメモリ２２０-４に存在するブロックが先頭ブロックとして構成されているチャンクが割り当てられている。
この２番目に割り当てられているチャンクの先頭ブロックとしては、フラッシュメモリ２２０-４のブロック番号４に該当するブロックＢ１と、フラッシュメモリ２２０-0のブロック番号５に該当するブロックＢ１と、フラッシュメモリ２２０-1のブロック番号５に該当するブロックＢ１と、最後のブロックとしてのフラッシュメモリ２２０-2のブロック番号５に該当するブロックＢ１とから構成されている。
同様に、３番目に割り当てられているチャンクは、２番目に割り当てられたチャンクの最後のブロックＢ１が存在するフラッシュメモリ２２０-2の次のフラッシュメモリ２２０-3に存在するブロックが先頭ブロックとして構成されているチャンクが割り当てられている。つまり、３番目に割り当てられているチャンクの先頭ブロックＣ２は、図２において図示が省略されているがフラッシュメモリ２２０-3のブロック番号９に存在する
図４（ｂ）に示す論理ディスク２２２ｂでは、フラッシュメモリ２２０-4のブロック番号０に該当するブロックＢ０が先頭ブロックとして構成されているチャンクが初めに割り当てられている。
２番目に割り当てられているチャンクは、初めに割り当てられたチャンクの最後のブロックＢ０が存在するフラッシュメモリ２２０-2の次のフラッシュメモリ２２０-3に存在するブロック番号５に該当するブロックＣ１が先頭ブロックとして構成されている。
同様に、図２において図示が省略されているが、３番目に割り当てられているチャンクは、２番目に割り当てられたチャンクの最後のブロックＣ１が存在するフラッシュメモリ２２０-1の次のフラッシュメモリ２２０-2に存在するブロック番号１０に該当するブロックＤ２が先頭ブロックとして構成されている。
【００３０】
このように、タイプ２の論理ディスクは、フラッシュメモリプール内の全フラッシュメモリ２２０-0〜２２０-4にまたがってチャンクを割り当てることによって構成される。このタイプ２の論理ディスクは、各論理ディスクの書き込み回数は殆ど同じであるが、同一論理ディスクの記憶領域内で書き込み回数の偏りがある場合に、各フラッシュメモリに書き込みを分散させることができる、つまり各フラッシュメモリの書き込み回数が均一化するのを抑制できるという特徴がある。このタイプ２の論理ディスクは、例えば、ランダムアクセスが多くデータ書き込みが局所化しているようなデータベースに適用される論理ディスクを複数生成する場合に効果が高い。
【００３１】
以上、各フラッシュメモリの書き込み回数が均一化するのを抑制するための論理ディスクの構成について説明した。
【００３２】
次に、図１に示されるストレージ装置２００のコントローラ２１０の構成について説明する。  
図５は、ストレージ装置２００の主としてコントローラ２１０の構成を示すブロック図である。コントローラ２１０は、ホストＩ／Ｆ処理部２１１、コマンド処理部２１２、Ｉ／Ｏ処理部２１３、アドレス処理部２１４、フラッシュメモリＩ／Ｆ処理部２１５、ディスク管理部２１６、初期化処理部２１７及び管理情報記憶部２３０を備えている。
【００３３】
ホストＩ／Ｆ処理部２１１は、ホスト計算機１００のホストＩ／Ｆ１０２と通信するためのインターフェイスである。本実施形態では、このインターフェイスとしてＳＣＳＩインターフェイスを想定している。
【００３４】
コマンド処理部２１２は、ホスト計算機１００のホストＩ／Ｆ１０２によって転送されるコマンをホストＩ／Ｆ処理部２１１を介して受信する。本実施形態において、このコマンドはＳＣＳＩコマンドである。ＳＣＳＩ規格では、ＳＣＳＩコマンドを用いてホスト計算機とストレージ装置間でデータ転送が行われる。ＳＣＳＩコマンドはＩ／Ｏ系のＳＣＳＩコマンド（Ｉ／Ｏ系コマンド）と制御系のＳＣＳＩコマンド（制御系コマンド）に分類される。
【００３５】
Ｉ／Ｏ系コマンドは、ホスト計算機上で動作するプログラムがストレージ装置の論理ディスクに対して読み出し／書き込みを要求した場合に、ホスト計算機のオペレーティングシステムによって当該読み出し／書き込み要求から変換されてストレージ装置に発行されるＳＣＳＩコマンドである。制御系コマンドは、ストレージ装置に関する情報を取得し、或いはストレージ装置に当該ストレージ装置に関する情報を設定するためのＳＣＳＩコマンドである。ストレージ装置ベンダーは当該ストレージ装置ベンダー固有のＳＣＳＩ拡張コマンドを定義することができる。そこでホスト計算機１００上で動作する設定ツール１０１は、ユーザが入力した情報（パラメータ）に応じてＳＣＳＩ拡張コマンドを生成し、当該生成したＳＣＳＩ拡張コマンドをコントローラ２１０に発行することで、ストレージ装置２００に対する情報の参照或いは情報の設定を行う。
【００３６】
コマンド処理部２１２は受信したＳＣＳＩコマンドがＩ／Ｏ系コマンドであるか、或いは制御系コマンドであるかを判別する。Ｉ／Ｏ系コマンドの場合、コマンド処理部２１２は受信したＳＣＳＩコマンドをＩ／Ｏ処理部２１３に渡す。Ｉ／Ｏ処理部２１３は、アドレス処理部２１４を用いて論理ディスクに対する読み出し／書き込み処理を行う。一方、制御系コマンドの場合、コマンド処理部２１２は受信したＳＣＳＩコマンドをディスク管理部２１６または初期化処理部２１７に渡してユーザの要求に応じた処理を行わせる。
【００３７】
管理情報記憶部２３０は不揮発記憶領域を備えており、当該不揮発性記憶領域に各種の管理情報を格納する。本実施形態において管理情報記憶部２３０は、フラッシュメモリプールテーブル２３１（図８参照）とブロック割り当てテーブル２３２（図９参照）を含むブロック割り当てテーブル群とを、管理情報として格納する。管理情報記憶部２３０はまた、生成された論理ディスクの数に対応するマッピングテーブル群、例えばマッピングテーブル２３３（図１０参照）を含むマッピングテーブル群を管理情報として格納する。
【００３８】
ディスク管理部２１６は、論理ディスクの生成、生成された論理ディスクの管理など、ユーザの要求に応じた処理を、管理情報記憶部２３０を用いて行う。そのためディスク管理部２１６は、管理情報記憶部２３０に対する情報の参照及び情報の書き換えが可能なように構成されている。より詳細に述べるならば、ディスク管理部２１６は、論理ディスクの生成のために、フラッシュメモリプールテーブルの参照、ブロック割り当てテーブルの更新、マッピングテーブルの生成等を行う。初期化処理部２１７は、フラッシュメモリプールテーブルの生成、及びブロック割り当てテーブルの生成等の初期化処理を行う。
【００３９】
図６はディスク管理部２１６の構成を示すブロック図である。  
ディスク管理部２１６は、論理ディスク生成部２１６０を含む。論理ディスク生成部２１６０は、論理ディスクの生成のために、フラッシュメモリプールからチャンク（チャンク領域）の群を選択する。論理ディスク生成部２１６０は、選択されたチャンク領域の群を結合することにより、選択されたチャンク領域の群から構成される論理ディスクを生成する。この論理ディスクの生成は、後述するように、当該論理ディスクに対応するマッピングテーブルを生成することにより実現される。
【００４０】
図７は初期化処理部２１７の構成を示すブロック図である。  
初期化処理部２１７は、フラッシュメモリプールを生成するためのフラッシュメモリプール生成部２１７０を含む。フラッシュメモリプール生成部２１７０は、グループ化部２１７１、ブロック分割部２１７２、チャンク生成部２１７３及び論理ディスクタイプ設定部２１７４から構成される。初期化処理部２１７は更に、ブロック割り当てテーブルを生成するためのブロック割り当てテーブル生成部２１７５を含む。
【００４１】
グループ化部２１７１は、複数のフラッシュメモリをグループ化することにより。当該グループ化されたフラッシュメモリの集合からなるフラッシュメモリプールを生成する。ブロック分割部２１７２は、グループ化されたフラッシュメモリの各々の記憶領域を一定サイズのブロックに分割する。
【００４２】
チャンク生成部２１７３は、グループ化されたフラッシュメモリの集合に基づき、グループ化されたフラッシュメモリの個数未満のブロックであって且つ異なるフラッシュメモリのブロックを結合することによってチャンク（チャンク領域）を生成する。論理ディスクタイプ設定部２１７４は、フラッシュメモリプールを用いて生成することが可能な論理ディスクのタイプを設定する。
【００４３】
次に、本実施形態で適用される論理ディスクを生成するための処理について説明する。本実施形態において論理ディスクを生成するためには、論理ディスク生成処理３００（図１３参照）に加えて、論理ディスクの生成に用いられるフラッシュメモリの集合から構成されるフラッシュメモリプールを生成するための初期化処理１２０（図１２参照）が必要となる。
【００４４】
まず、初期化処理１２０について説明する。  
ユーザは、ホスト計算機１００の設定ツール１０１を用いて、フラッシュメモリプールを生成するための入力操作を行う。フラッシュメモリプールの生成のためにユーザが最低限入力する必要があるパラメータは、フラッシュメモリプールのサイズとフラッシュメモリ群から生成される論理ディスクのタイプである。論理ディスクのタイプは、２つのタイプ（タイプ１またはタイプ２）の中からユーザによって選択される。設定ツール１０１は、ユーザによる上記サイズ及びタイプの入力操作に従い、フラッシュメモリプールの生成を要求するための第１のＳＣＳＩ拡張コマンド（制御系コマンド）を生成する。第１のＳＣＳＩ拡張コマンドは、ユーザが入力したパラメータ、つまりサイズ（フラッシュメモリプールサイズ）及びタイプ（論理ディスクタイプ）を含む。設定ツール１０１は、第１のＳＣＳＩ拡張コマンドを、ホストＩ／Ｆ１０２を介してストレージ装置２００のコントローラ２１０に転送することで、当該コントローラ２１０に対してフラッシュメモリプールの生成を要求する。
【００４５】
コントローラ２１０に転送された第１のＳＣＳＩ拡張コマンドは、ホストＩ／Ｆ処理部２１１を介してコマンド処理部２１２で受信される。コマンド処理部２１２は、第１のＳＣＳＩ拡張コマンド（つまりフラッシュメモリプールの生成を要求するＳＣＳＩ拡張コマンド）を受信した場合、当該第１のＳＣＳＩ拡張コマンドを初期化処理部２１７に渡す。すると初期化処理部２１７は、図１２のフローチャートに従って、フラッシュメモリプールの生成を含む初期化処理１２０を実行する。
【００４６】
以下、初期化処理１２０の手順について、図１２のフローチャートを参照して説明する。  
初期化処理１２０において、初期化処理部２１７のフラッシュメモリプール生成部２１７０は、第１のＳＣＳＩ拡張コマンドに含まれているパラメータ（フラッシュメモリプールサイズ及び論理ディスクタイプ）とコントローラ２１０に接続されているフラッシュメモリ（ここではフラッシュメモリ２２０-0〜２２０-4）に関する情報とに基づき、図８に示すフラッシュメモリプールテーブル２３１を生成する。
【００４７】
フラッシュメモリプールテーブル２３１は、フラッシュメモリプールを管理するためのフラッシュメモリプール管理情報を保持する。このフラッシュメモリプール管理情報は、図８に示すように、開始メディア番号、メディア数、ブロックサイズ、チャンク数及び論理ディスクタイプから構成される。
【００４８】
フラッシュメモリプール生成部２１７０は、フラッシュメモリプールテーブル２３１を次のように生成する。まずフラッシュメモリプール生成部２１７０のグループ化部２１７１は、コントローラ２１０に接続されているフラッシュメモリを検索する（ステップ１２１）。ここでは、５つのフラッシュメモリ２２０-0〜２２０-4が検索される。
【００４９】
グループ化部２１７１はまた、管理情報記憶部２３０からブロック割り当てテーブル（検索されたフラッシュメモリ２２０-0〜２２０-4にそれぞれ対応するブロック割り当てテーブル）を検索する（ステップ１２２）。本実施形態において、図９に示すブロック割り当てテーブル２３２のようなブロック割り当てテーブルは、フラッシュメモリプールに所属する全てのフラッシュメモリにそれぞれ対応付けて生成されて、管理情報記憶部２３０に格納される。フラッシュメモリプールに所属しないフラッシュメモリ対応するブロック割り当てテーブルは存在しない。
【００５０】
図９に示すブロック割り当てテーブル２３２は、対応するフラッシュメモリのブロック（物理ブロック）毎に、当該ブロックが論理ディスクのブロック（論理ブロック）に割り当てられているか、つまり使用されているか、或いは割り当てられていないか、つまり使用されていないかを示す情報を保持する。本実施形態において、この情報はフラグであり、“０”で対応するブロックが使用されていないことを、“１”で対応するブロックが使用されていることを示す。
【００５１】
本実施形態では、グループ化部２１７１がブロック割り当てテーブルを検索した時点では、管理情報記憶部２３０にブロック割り当てテーブルはひとつも格納されていないものとする。グループ化部２１７１は、ブロック割り当てテーブル検索の結果に基づき、対応するブロック割り当てテーブルが存在しないフラッシュメモリのメディア番号のうち、最も小さいメディア番号を、図８に示すフラッシュメモリプールテーブル２３１に開始メディア番号として登録する（ステップ１２３）。ここでは、フラッシュメモリ２２０-0〜２２０-4のメディア番号０〜４のうちのメディア番号０が、図８に示すように開始メディア番号として登録される。
【００５２】
次にグループ化部２１７１は、フラッシュメモリサイズと第１のＳＣＳＩ拡張コマンドに含まれているフラッシュメモリプールサイズとに基づき、フラッシュメモリプールを構成するのに必要なフラッシュメモリの数を求め、この数をフラッシュメモリプールテーブル２３１にメディア数として登録する（ステップ１２４）。このメディア数は、フラッシュメモリプールサイズをフラッシュメモリサイズで除することにより求められる。ここでは図８に示すように、メディア数として５が登録されたものとする。この場合、コントローラ２１０に接続されている全てのフラッシュメモリ２２０-0〜２２０-4がフラッシュメモリプールを構成することになる。つまりグループ化部２１７１は、フラッシュメモリ２２０-0〜２２０-4をグループ化し、当該グループ化されたフラッシュメモリ２２０-0〜２２０-4によりフラッシュメモリプールを構成する。
【００５３】
すると、フラッシュメモリプール生成部２１７０のブロック分割部２１７２が起動される。ブロック分割部２１７２は、フラッシュメモリプールテーブル２３１に、ブロックサイズとして、デフォルトの値、例えば１ＭＢ（メガバイト）を登録する（ステップ１２５）。このブロックサイズの登録により、ブロック分割部２１７２は等価的に、グループ化部２１７１によってグループ化されたフラッシュメモリの各々の記憶領域を当該ブロックサイズのブロックに分割したことになる。なお、ブロックサイズの登録のために、設定ツール１０１のオプションとしてユーザが別の値を指定することも可能とする。
【００５４】
次にフラッシュメモリプール生成部２１７０のチャンク生成部２１７３が起動される。チャンク生成部２１７３は、グループ化部２１７１によってステップ１２４で求められたメディア数より小さな数で且つ当該メディア数と互いに素な数を求め、この数をフラッシュメモリプールテーブル２３１にチャンク数として登録する（ステップ１２６）。このような条件を満たす数（チャンク数）を取得するためには、メディア数が３以上であればよい。つまりフラッシュメモリプールを構成するフラッシュメモリの数が３以上であればよい。
【００５５】
チャンク数の登録により、チャンク生成部２１７３は等価的に、チャンク数に一致するブロックであって且つ異なるフラッシュメモリのブロックを結合することによってチャンク（チャンク領域）を生成したことになる。チャンク数は、上述の説明から明らかなように、メディア数（グループ化されたフラッシュメモリの個数）未満の数であり、より詳細には、メディア数より小さな数で且つ当該メディア数と互いに素な数である。
【００５６】
チャンク数として複数の候補がある場合、初期化処理部２１７は、例えば最大の数を選択する。本実施形態のようにメディア数が５の場合、２、３または４が候補となるので、最大値４が選択される。なお、複数の候補のうちの最大の数以外（例えば中間の数）が選択される構成であっても構わない。また、設定ツール１０１のオプションとして複数の候補からユーザにチャンク数を選択させることも可能である。
【００５７】
次にグループ化部２１７１の論理ディスクタイプ設定部２１７４が起動される。論理ディスクタイプ設定部２１７４は、第１のＳＣＳＩ拡張コマンドに含まれている論理ディスクタイプを、フラッシュメモリプールテーブル２３１に登録する（ステップ１２７）。次に初期化処理部２１７のブロック割り当てテーブル生成部２１７５が起動される。ブロック割り当てテーブル生成部２１７５は、フラッシュメモリプールテーブル２３１によって示されるフラッシュメモリプールに所属するフラッシュメモリ（ここではフラッシュメモリ２２０-0〜２２０-4）にそれぞれ対応付けられるブロック割り当てテーブル（初期ブロック割り当てテーブル）を生成する（ステップ１２８）。このブロック割り当てテーブルのエントリ数は、対応するフラッシュメモリのブロック数に一致し、各エントリには、対応するブロックが未使用であることを示すフラグ（０）が登録される。
【００５８】
フラッシュメモリプール生成部２１７０及びブロック割り当てテーブル生成部２１７５は、それぞれ、生成されたフラッシュメモリプールテーブル２３１及びブロック割り当てテーブルの群を管理情報記憶部２３０に格納する（ステップ１２９）。これにより、論理ディスク生成のための初期化処理１２０は終了し、フラッシュメモリプールテーブル２３１によって示されるフラッシュメモリプールが生成されたことになる。なお、コントローラ２１０に接続されるフラッシュメモリの数が本実施形態と異なって５を超えている場合、例えば８の場合、フラッシュメモリ２２０-0〜２２０-4から構成されるフラッシュメモリプール以外に、残りの３つのフラッシュメモリから構成されるフラッシュメモリプールを生成することも可能である。
【００５９】
フラッシュメモリテーブルが生成されると、ユーザは当該フラッシュメモリテーブルによって示されるフラッシュメモリプールから領域を切り出して論理ディスクを生成することを、設定ツール１０１を操作することによってコントローラ２１０に要求することができる。具体的には、ユーザは設定ツール１０１を操作することによって、生成されるべき論理ディスクのサイズと、論理ディスクの生成の要求とを入力する。また、フラッシュメモリプールが複数存在する場合、ユーザは、例えば生成されるべき論理ディスクのサイズを入力する前に、論理ディスク生成の対象となるフラッシュメモリプールを選択する。
【００６０】
設定ツール１０１は、上述したユーザの入力操作に従い、論理ディスクの生成を要求するための第２のＳＣＳＩ拡張コマンド（制御系コマンド）を生成する。第２のＳＣＳＩ拡張コマンドは、ユーザが入力した論理ディスクのサイズ、更にはユーザが選択したフラッシュメモリプールを示すパラメータを含む。設定ツール１０１は、第２のＳＣＳＩ拡張コマンドを、ホストＩ／Ｆ１０２を介してストレージ装置２００のコントローラ２１０に転送することで、当該コントローラ２１０に対して論理ディスクの生成を要求する。
【００６１】
コントローラ２１０に転送された第２のＳＣＳＩ拡張コマンドは、ホストＩ／Ｆ処理部２１１を介してコマンド処理部２１２で受信される。コマンド処理部２１２は、第２のＳＣＳＩ拡張コマンド（つまり論理ディスクの生成を要求するＳＣＳＩ拡張コマンド）を受信した場合、当該第２のＳＣＳＩ拡張コマンドをディスク管理部２１６に渡す。するとディスク管理部２１６の論理ディスク生成部２１６０は、図１３のフローチャートに従って、第２のＳＣＳＩ拡張コマンドによって要求された論理ディスクを生成するための論理ディスク生成処理３００を実行する。
【００６２】
以下、論理ディスク生成処理３００の手順について、図１３のフローチャートを参照して説明する。  
まず論理ディスク生成部２１６０は、第２のＳＣＳＩ拡張コマンドに基づき、生成すべき論理ディスク及び対象となるフラッシュメモリプール（対象フラッシュメモリプール）に関する情報を取得する（ステップ３１０）。ステップ３１０において論理ディスク生成部２１６０は、取得した情報に基づいて、変数ＳＩＺＥ、ＣＨＵＮＫ、ＢＬＫ＿ＳＩＺＥ及びＮ＿ＭＥＤＩＡの値を設定する。
【００６３】
具体的には、論理ディスク生成部２１６０は、生成すべき論理ディスクに関する情報として、当該論理ディスクのサイズを、第２のＳＣＳＩ拡張コマンドから取得する。論理ディスク生成部２１６０は、取得した論理ディスクのサイズを変数ＳＩＺＥとして設定する。また論理ディスク生成部２１６０は、対象フラッシュメモリプールに関する情報（管理情報）を、第２のＳＣＳＩ拡張コマンドに含まれているフラッシュメモリプールを示すパラメータに基づいて、管理情報記憶部２３０に格納されている対応するフラッシュメモリプールテーブルを参照することにより取得する。ここでは、フラッシュメモリプールテーブル２３１が参照されたものとする。この場合、論理ディスク生成部２１６０は、フラッシュメモリプールテーブル２３１から、対象フラッシュメモリプールに関する情報として、当該フラッシュメモリプールのチャンク数、ブロックサイズ及びメディア数（図８参照）を取得する。論理ディスク生成部２１６０は、取得したチャンク数、ブロックサイズ及びメディア数を、それぞれ変数ＣＨＵＮＫ、ＢＬＫ＿ＳＩＺＥ及びＮ＿ＭＥＤＩＡとして設定する。
【００６４】
次に論理ディスク生成部２１６０は、対象フラッシュメモリプールに所属する全てのフラッシュメモリ（メディア）にそれぞれ対応するブロック割り当てテーブルを参照することにより、未使用ブロックのブロック番号のうちの最小のブロック番号（最小未使用ブロック番号）と、当該最小のブロック番号のブロックを含むフラッシュメモリのメディア番号とを取得する（ステップ３２０）。具体的には、論理ディスク生成部２１６０は上記対応するブロック割り当てテーブル毎に、未使用ブロックのブロック番号のうちの最小のブロック番号を取得し、それらの最小のブロック番号の中で最も小さなブロック番号を目的のブロック番号とする。もし、該当する未使用ブロックが複数ある場合、論理ディスク生成部２１６０は、該当する未使用ブロックを含む同数のフラッシュメモリのうち、最もメディア番号の小さなフラッシュメモリの当該メディア番号を目的のメディア番号とする。
【００６５】
ステップ３２０において論理ディスク生成部２１６０は、取得したメディア番号及びブロック番号を、それぞれ最初のメディア番号を表す変数ＮＭ＿ＦＩＲＳＴ及び最初のブロック番号を表す変数ＮＢ＿ＦＩＲＳＴとして設定する。論理ディスク生成部２１６０はまた、変数ＮＭ＿ＦＩＲＳＴ及びＮＢ＿ＦＩＲＳＴを、それぞれメディア番号を表す変数ＮＭ及びブロック番号を表す変数ＮＢとして設定する。
【００６６】
次に論理ディスク生成部２１６０は、フラッシュメモリプールテーブル２３１に保持されている論理ディスクタイプを判別する（ステップ３３０）。もし、論理ディスクタイプがタイプ１であるならば、論理ディスク生成部２１６０は、当該タイプ１の論理ディスクに対応するマッピングテーブルを生成するための論理ディスク（タイプ１）マッピングテーブル生成処理を行う（ステップ３４０）。これに対し、論理ディスクタイプがタイプ２であるならば、論理ディスク生成部２１６０は、当該タイプ２の論理ディスクに対応するマッピングテーブルを生成するための論理ディスク（タイプ２）マッピングテーブル生成処理を行う（ステップ３４０）。
【００６７】
マッピングテーブルは、対応する論理ディスクの構成を管理（定義）するためのテーブルである。そのためマッピングテーブルは、対応する論理ディスクのそれぞれの論理アドレスのデータ領域（論理ブロック）に、いずれのフラッシュメモリ（メディア）のいずれのブロックがマッピングされているかを登録したエントリ群を有する。図１０は、図３（ａ）に示されるタイプ１の論理ディスク２２１ａに対応するマッピングテーブル２３３の例を示し、図１１は、図４（ａ）に示されるタイプ２の論理ディスク２２２ａに対応するマッピングテーブル２３４の例を示す。マッピングテーブル２３３及び２３４の各エントリは、論理アドレス、メディア番号及びブロック番号がそれぞれ登録されるフィールドを有する。
【００６８】
次に、論理ディスク生成部２１６０によって実行される論理ディスク（タイプ１）マッピングテーブル生成処理（ステップ３４０）の詳細な手順について、図１４のフローチャートを参照して説明する。
【００６９】
まず論理ディスク生成部２１６０は、論理アドレスを示す変数ＡＤＤＲを０（より詳細には００００００００Ｈ）に、ブロック数（より詳細にはブロック数のカウント値）を示す変数ＣＯＵＮＴを０に、それぞれ初期設定する（ステップ３４０１）。末尾のＨは、周知のように１６進表現であることを示す。このステップ３４０１において、ＡＤＤＲ＝０（００００００００Ｈ）は、マッピングテーブルの先頭エントリの論理アドレスフィールドに登録される。次に論理ディスク生成部２１６０は、所定のループＡ（ステップ３４０２）を、終了条件が成立するまで繰り返す。この終了条件は、ＡＤＤＲ≧ＳＩＺＥを満足することである。
【００７０】
論理ディスク生成部２１６０はループＡにおいて、まず、ＡＤＤＲ（＝０）が登録されたマッピングテーブルのエントリ（ＡＤＤＲエントリ）のメディア番号フィールド及びブロック番号フィールドに、それぞれＮＭ及びＮＢを登録する（ステップ３４０３）。ステップ３４０３において論理ディスク生成部２１６０は更に、メディア番号がＮＭのフラッシュメモリに対応するブロック割り当てテーブル２３２のブロック番号がＮＢのエントリに“１”（“１”のフラグ）を登録する。
【００７１】
次に論理ディスク生成部２１６０は、ＣＯＵＮＴがＣＨＵＮＫ未満であるかを判定する（ステップ３４０４）。もし、ＣＯＵＮＴがＣＨＵＮＫ未満であるならば（ステップ３４０４のＹｅｓ）、つまりカウントしたブロック数がチャンク数未満であるならば、論理ディスク生成部２１６０は、１つのチャンク（チャンク領域）についての処理（論理ディスクの対応する領域への割り当て）が終了していないものと判断する。この場合、論理ディスク生成部２１６０は、現在処理中のチャンクにおける次のブロックについての処理（対応する論理ブロックへの割り当て）のためにＣＯＵＮＴを１インクリメントする（ステップ３４０５）。
【００７２】
これに対し、ＣＯＵＮＴがＣＨＵＮＫ未満でないならば（ステップ３４０４のＮｏ）、つまりカウントしたブロック数がチャンク数未満でないならば、論理ディスク生成部２１６０は、１つのチャンクについての処理が終了したものと判断する。この場合、論理ディスク生成部２１６０は、次のチャンク（チャンク領域）の先頭のブロックについての処理のために、ＮＭをＮＭ＿ＦＩＲＳＴに、ＮＢをＮＢ＋ＣＨＵＮＫに、そしてＣＯＵＮＴを０に、それぞれ更新する（ステップ３４０６）。
【００７３】
ここで、ＮＭ＿ＦＩＲＳＴが０、ＣＨＵＮＫが４、対象フラッシュメモリプールがフラッシュメモリ２２０-0〜２２０-4から構成される図２に示すフラッシュメモリプールであるものとする。この場合、上述のように１つのチャンクについての処理が終了する毎に、ＮＭをＮＭ＿ＦＩＲＳＴに戻すことにより（ステップ３４０６）、論理ディスク生成部２１６０は、フラッシュメモリ２２０-0〜２２０-4のうちのＣＨＵＮＫに一致する数のフラッシュメモリ２２０-0〜２２０-3のチャンクを割り当てることになる。
【００７４】
論理ディスク生成部２１６０はステップ３４０５または３４０６のいずれかを実行すると、ＮＭ＋１がＮ＿ＭＥＤＩＡ＋ＮＭ＿ＦＩＲＳＴに一致するかを判定する（ステップ３４０７）。Ｎ＿ＭＥＤＩＡ＋ＮＭ＿ＦＩＲＳＴは、対応するフラッシュメモリプールを構成するフラッシュメモリ群のメモリ番号のうちの最大メモリ番号＋１を示す。最大メモリ番号＋１のフラッシュメモリは、対応するフラッシュメモリプールに存在しない。したがって、ＮＭ＋１がＮ＿ＭＥＤＩＡ＋ＮＭ＿ＦＩＲＳＴに一致する場合、ＮＭの次のメディア番号をＮＭ＿ＦＩＲＳＴ（最小メディア番号）とする必要がある。一方、ＮＭ＋１がＮ＿ＭＥＤＩＡ＋ＮＭ＿ＦＩＲＳＴに一致しない場合、ＮＭの次のメディア番号はＮＭ＋１となる。
【００７５】
そこで、ＮＭ＋１がＮ＿ＭＥＤＩＡに一致しないならば（ステップ３４０７のＮｏ）、論理ディスク生成部２１６０はＮＭを１インクリメントする（ステップ３４０８）。このインクリメント後のＮＭは、次に処理されるべきブロック（ブロック番号がＮＢのブロック）が存在するフラッシュメモリのメディア番号を示す。これに対し、ＮＭ＋１がＮ＿ＭＥＤＩＡに一致するならば（ステップ３４０７のＹｅｓ）、論理ディスク生成部２１６０はＮＭをＮＭ＿ＦＩＲＳＴに戻す（ステップ３４０９）。このＮＭ＿ＦＩＲＳＴに戻された後のＮＭは、次に処理されるべきブロック（ブロック番号がＮＢのブロック）が存在するフラッシュメモリのメディア番号を示す。
【００７６】
論理ディスク生成部２１６０はステップ３４０８または３４０９のいずれかを実行すると、ＡＤＤＲをＢＬＫ＿ＳＩＺＥだけインクリメントする（ステップ３４１０）。このとき、ＡＤＤＲ＝００００００００Ｈ、ＢＬＫ＿ＳＩＺＥ＝１ＭＢ（＝００１０００００Ｈ）であるとするならば、ＡＤＤＲは００００００００Ｈから００１０００００Ｈに更新される。このステップ３４１０において、ＡＤＤＲ＝００１０００００Ｈは、マッピングテーブルの次のエントリ（ここでは２番目のエントリ）の論理アドレスフィールドに登録される。これにより、１回のループＡが完了し、１つのチャンク（チャンク領域）を構成する、チャンク数（＝ＣＨＵＮＫ）に一致する数のブロックのうち、ＣＯＵＮＴ番目のブロックの対応する論理ブロックへの割り当てが完了する。このとき、ＣＯＵＮＴ＜ＣＨＵＮＫでなければ（ステップ３４０４のＮｏ）、１つのチャンクを構成する全ブロックの割り当てが完了したことになり、次のチャンクの処理のために、上述のようにステップ３４０６が行われる。
【００７７】
ＡＤＤＲ＝００１０００００Ｈは、ＳＩＺＥ（つまり、生成されるべき論理ディスクのサイズ）未満であり、ループＡ（ステップ３４０２）の終了条件を満たさない。この場合、当該ループＡが再び実行される。明らかなように、ループＡがＣＨＵＮＫ（チャンク数）で示される回数繰り返されることにより、１つのチャンク（チャンク領域）を構成する、チャンク数に一致する数のブロックの対応する論理ブロックへの割り当てが完了する。
【００７８】
やがて、ＡＤＤＲがＢＬＫ＿ＳＩＺＥ以上となったならば、論理ディスク生成部２１６０はループＡから抜けて、論理ディスク（タイプ１）マッピングテーブル生成処理を終了する。これにより、例えば図１０に示すタイプ１の論理ディスクのマッピングテーブル２３３が生成される。
【００７９】
本実施形態において、マッピングテーブルの生成は、論理ディスク生成部２１６０の作業領域（図示せず）用いて行われる。この作業領域上で生成されたマッピングテーブル、つまりタイプ１の論理ディスクに対応するマッピングテーブルは、マッピングテーブル生成処理の終了時に、管理情報記憶部２３０に格納される。マッピングテーブルの生成が、管理情報記憶部２３０内で行われても構わない。
【００８０】
次に、論理ディスク生成部２１６０によって実行される論理ディスク（タイプ２）マッピングテーブル生成処理（ステップ３５０）の詳細な手順について、図１５のフローチャートを参照して説明する。
【００８１】
まず論理ディスク生成部２１６０は、論理ディスク（タイプ１）マッピングテーブル生成処理におけるステップ３４０１と同様のステップ３５０１を実行する。次に論理ディスク生成部２１６０は、所定のループＢ（ステップ３５０２）を、終了条件が成立するまで繰り返す。この終了条件は、ＡＤＤＲ≧ＳＩＺＥを満足することである。
【００８２】
論理ディスク生成部２１６０はループＢにおいて、まず上記ステップ３４０３と同様のステップ３５０３を実行し、しかる後に上記ステップ３４０４と同様に、ＣＯＵＮＴがＣＨＵＮＫ未満であるかを判定する（ステップ３５０４）。もし、ＣＯＵＮＴがＣＨＵＮＫ未満であるならば（ステップ３５０４のＹｅｓ）、論理ディスク生成部２１６０は、現在処理中のチャンクにおける次のブロックについての処理（対応する論理ブロックへの割り当て）のためにＣＯＵＮＴを１インクリメントする（ステップ３５０５）。これに対し、ＣＯＵＮＴがＣＨＵＮＫ未満でないならば（ステップ３５０４のＮｏ）、論理ディスク生成部２１６０は、次のチャンク（チャンク領域）の先頭のブロックについての処理のために、ＮＢをＮＢ＋ＣＨＵＮＫに、そしてＣＯＵＮＴを０に、それぞれ更新する（ステップ３５０６）。このステップ３５０６では、前述したタイプ１の論理ディスクを作成する場合のステップ３４０６と異なり、ＮＭがＮＭ＿ＦＩＲＳＴに戻されることはない。
【００８３】
ここで、ＮＭ＿ＦＩＲＳＴが０、ＣＨＵＮＫが４、対象フラッシュメモリプールがフラッシュメモリ２２０-0〜２２０-4から構成される図２に示すフラッシュメモリプールであるものとする。この場合、上述のように１つのチャンクについての処理が終了しても、ＮＭをＮＭ＿ＦＩＲＳＴに戻さないことにより（ステップ３５０６）、論理ディスク生成部２１６０は、フラッシュメモリ２２０-0〜２２０-4に均等にまたがるように、ＣＨＵＮＫに一致する数の異なる組み合わせのフラッシュメモリ（つまりフラッシュメモリ２２０-0，２２０-1，２２０-2，２２０-3、フラッシュメモリ２２０-4，２２０-0，２２０-1，２２０-2、フラッシュメモリ２２０-3，２２０-4，２２０-0，２２０-1、フラッシュメモリ２２０-2，２２０-3，２２０-4，２２０-0、フラッシュメモリ２２０-1，２２０-2，２２０-3，２２０-4）のチャンクを割り当てることになる。
【００８４】
論理ディスク生成部２１６０はステップ３５０５または３５０６のいずれかを実行すると、上記ステップ３４０７と同様に、ＮＭ＋１がＮ＿ＭＥＤＩＡ＋ＮＭ＿ＦＩＲＳＴに一致するかを判定する（ステップ３５０７）。もし、ＮＭ＋１がＮ＿ＭＥＤＩＡ＋ＮＭ＿ＦＩＲＳＴに一致しないならば（ステップ３５０７のＮｏ）、論理ディスク生成部２１６０はＮＭを１インクリメントする（ステップ３５０８）。これに対し、ＮＭ＋１がＮ＿ＭＥＤＩＡ＋ＮＭ＿ＦＩＲＳＴに一致するならば（ステップ３５０７のＹｅｓ）、論理ディスク生成部２１６０はＮＭをＮＭ＿ＦＩＲＳＴに戻す（ステップ３５０９）。
【００８５】
論理ディスク生成部２１６０はステップ３５０８または３５０９のいずれかを実行すると、ステップ３４１０と同様に、ＡＤＤＲをＢＬＫ＿ＳＩＺＥだけインクリメントする（ステップ３５１０）。このステップ３５１０において論理ディスク生成部２１６０は、インクリメント後のＡＤＤＲをマッピングテーブルの次のエントリの論理アドレスフィールドに登録する。これにより、１回のループＢが完了する。論理ディスク生成部２１６０は、終了条件（ＡＤＤＲ≧ＢＬＫ＿ＳＩＺＥ）が成立するまでループＢを繰り返す。やがて、終了条件が成立したならば、論理ディスク生成部２１６０はループＢから抜けて、論理ディスク（タイプ２）マッピングテーブル生成処理を終了する。これにより、例えば図１１に示すタイプ２の論理ディスクのマッピングテーブル２３４が生成される。生成されたタイプ２の論理ディスクに対応するマッピングテーブルは、タイプ１の論理ディスクに対応するマッピングテーブルと同様に、管理情報記憶部２３０に格納される。
【００８６】
マッピングテーブルが生成されたことは、当該マッピングテーブルによって管理（定義）される論理ディスクが生成されたことと等価である。コントローラ２１０が論理ディスクを生成した後、ユーザがホスト計算機１００を再起動する。するとホスト計算機１００のオペレーティングシステムは、ストレージ装置２００に構築されている論理ディスクに関する情報等、ストレージ装置２００に関する情報を検出（取得）するために、例えば、ＳＣＳＩ規格に準拠した問い合わせ（ＩＮＱＵＩＲＹ）コマンドをホストＩ／Ｆ１０２を介してコントローラ２１０に発行する。
【００８７】
コントローラ２１０は、ホスト計算機１００からのＩＮＱＵＩＲＹコマンドに応答することで、論理ディスクがストレージ装置２００内に生成されたことを当該ホスト計算機１００通知する。ホスト計算機１００のオペレーティングシステムは、この通知に基づき、生成された論理ディスクを読み出し／書き込みが可能なディスクとして検出する。これによりホスト計算機１００上のプログラムは、検出された論理ディスクに対して読み出し／書き込みできるようになる。
【００８８】
次に、ストレージ装置２００のコントローラ２１０におけるアドレス処理部２１４の動作について説明する。前述したようにコントローラ２１０のコマンド処理部２１２がホスト計算機１００によって発行されるＩ／Ｏ系のＳＣＳＩコマンドを受信した場合、Ｉ／Ｏ処理部２１３は、アドレス処理部２１４を用いて論理ディスクに対する読み出し／書き込み処理を行う。
【００８９】
ホスト計算機１００によって発行されるＩ／Ｏ系のＳＣＳＩコマンド、例えばホスト計算機１００のオペレーティングシステムによって発行される読み出し／書き込み要求は、読み出し／書き込みデータの位置を示すセクタアドレスを含む。本実施形態において、セクタアドレスで指定されるセクタは、５１２バイトで構成されるものとする。この場合、アドレス処理部２１４は、セクタアドレスに５１２を乗ずることにより、セクタアドレスをバイトアドレスに変換する。
【００９０】
アドレス処理部２１４は、変換されたバイトアドレスからブロックサイズ−１に対応するビット部分を切り捨てる（補数の論理積）ことで、読み出し／書き込みされるべき論理ディスク（目的論理ディスク）内のブロックの論理アドレスを取得する。アドレス処理部２１４は、取得した論理アドレスが登録された、目的論理ディスクに対応するマッピングテーブルのエントリを検索する。アドレス処理部２１４は、検索されたマッピングテーブルのエントリに登録されているメディア番号及びブロック番号に基づき、読み出し／書き込みされるべき論理ディスク内のブロックを特定する。アドレス処理部２１４は更に、切り捨て前のバイトアドレスにブロックサイズ−１でマスク（論理積）することにより、読み出し／書き込みが開始されるべきブロック内の位置（オフセット）を取得する。
【００９１】
アドレス処理部２１４は、読み出し／書き込みが開始されるべきブロック内の位置を特定したならば、フラッシュメモリＩ／Ｆ処理部２１５に対して、該当するフラッシュメモリを対象にデータを読み出し／書き込みするための読み出し／書き込み要求を発行することにより、データの読み出し／書き込みを行う。
【００９２】
アドレス処理部２１４によるデータの読み出し／書き込みが完了すると、ホストＩ／Ｆ処理部２１１は、その旨を、ホスト計算機１００に対して例えば割り込みにより通知する。ホスト計算機１００のオペレーティングシステムはコントローラ２１０からの割り込みを検出すると、その旨を対応するプログラムに返して終了する。
【００９３】
以上に述べた論理ディスクの構成（図３及び図４参照）はＲＡＩＤ０（ＲＡＩＤレベル０のＲＡＩＤ）に相当する。このような構成の論理ディスクでは、フラッシュメモリへの並列な読み書きが行われるので、ＲＡＩＤ０と同様の高速化が見込める。
【００９４】
次に、本実施形態で適用されるＲＡＩＤ１相当の冗長化について説明する。  
ＲＡＩＤ１と同様のミラーは、フラッシュメモリプールの複製を生成することで構成できる。例えば論理ディスク生成部２１６０は、全く同一サイズの２つのフラッシュメモリプールの一方をマスター、他方をスレーブとして、マスターのフラッシュメモリプールを用いて前述したような論理ディスクを生成する。アドレス処理部２１４は、論理ディスクへの書き込み時に、マスター側のフラッシュメモリにデータを書き込んだ後、スレーブ側のフラッシュメモリプールの同一位置にもデータを書き込む。またアドレス処理部２１４は、データの読み込みはマスター側のみから行う。マスター側に対する読み出し／書き込みでエラーが発生した場合、アドレス処理部２１４は、エラーが発生したフラッシュメモリのブロック割り当てテーブルの該当ブロックにエラーを示すフラグ（例えば値が２のフラグ）を書き込む。この場合、アドレス処理部２１４は、スレーブ側のフラッシュメモリを対象に読み出し／書き込みを行う。
【００９５】
次に、本実施形態で適用されるＲＡＩＤ５相当の冗長化について説明する。  
論理ディスク生成部２１６０は、チャンクの中の１つのブロックをパリティ専用のブロック、つまり当該チャンクの他のブロックに格納されるデータの冗長データとしてのパリティデータを保持するパリティブロック（冗長ブロック）に割り当てる。これにより、ＲＡＩＤ５と同等の冗長化を実現することができる。例えば、チャンクを構成する複数のブロックのうち最後の１個のブロックをパリティブロックとすることで、ＲＡＩＤ５と同様の冗長化を実現できる。但し、パリティブロックを導入する場合、マッピングテーブルの生成アルゴリズム及び読み出し／書き込み処理は次のように変更される必要がある。
【００９６】
チャンクの最後のブロックの場合、論理ディスク生成部２１６０は、当該ブロックをマッピングテーブルに登録せず、論理アドレスの加算（ステップ３４１０または３５１０）も抑止する。一方、アドレス処理部２１４は、書き込み処理においてチャンクの最後のブロックにパリティを書き込み、読み出し処理においてパリティチェックする。読み出し／書き込みでエラーが発生した場合、アドレス処理部２１４は、エラーが発生したフラッシュメモリのブロック割り当てテーブルの該当ブロックにエラーを示すフラグ（例えば値が２のフラグ）を書き込む。また、エラーが発生したブロックからデータを読むことができない場合、アドレス処理部２１４はパリティを利用してデータを復元する。
【００９７】
また、論理ディスクを構成するフラッシュメモリに不良が発生した場合、論理ディスク生成部２１６０は当該不良が発生したフラッシュメモリのブロック割り当てテーブルを参照して、ホスト計算機１００の設定ツール１０１を通して、フラッシュメモリが故障したことをユーザに通知する。
【００９８】
以上、フラッシュメモリプールの生成、論理ディスクの生成及び論理ディスクに対する読み出し／書き込みについて説明した。  
本実施形態によれば、論理ディスクを構成するフラッシュメモリ群に書き込みを分散させることが、ブロックの入れ替えを行うことなくできる。つまりフラッシュメモリ群への書き込みの回数が均一になるのを、ブロックの入れ替えを行うことなく抑制できる。このため、フラッシュメモリ群への書き込みの回数の上限値を同時に越えることが、簡単に回避できる。つまり、フラッシュメモリが同時に故障することによる障害を、処理性能を低下させることなく減らすことができる。特に本実施形態においては、チャンクを構成するブロック数を、フラッシュメモリプールを構成するフラッシュメモリの数と「互いに素」にすることにより、フラッシュメモリ群への書き込みの回数が均一になることを、より効果的に抑制できる。
【００９９】
また、本実施形態によれば、上述のフラッシュメモリプールを利用してタイプ１の論理ディスクを生成することにより、論理ディスク毎に書き込み回数（頻度）が異なる場合に、各フラッシュメモリの書き込み回数が均一化するのを効果的に抑制できる。また、本実施形態によれば、上述のフラッシュメモリプールを利用してタイプ２の論理ディスクを生成することにより、各論理ディスクの書き込み回数（頻度）は同程度だが、同一論理ディスクの記憶領域内で書き込み回数の偏りがある場合に、各フラッシュメモリの書き込み回数が均一化するのを効果的に抑制できる。
【０１００】
以上説明した少なくとも１つの実施形態によれば、処理性能を低下させることなく、複数の不揮発性メモリの同時不良の発生を抑制することができる、複数の不揮発性メモリを備えたストレージ装置、ストレージコントローラ及び論理ディスク生成方法を提供することができる。
【０１０１】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１０２】
１００…ホスト計算機、１０１…設定ツール、１０２…ホストＩ／Ｆ、２００…ストレージ装置、２１０…コントローラ（ストレージコントローラ）、２１１…ホストＩ／Ｆ処理部、２１２…コマンド処理部、２１３…Ｉ／Ｏ処理部、２１４…アドレス処理部、２１５…フラッシュメモリＩ／Ｆ処理部、２１６…ディスク管理部、２１７…初期化処理部、２２０-0〜２２０-4…フラッシュメモリ（不揮発性メモリ）、２２１ａ，２２１ｂ…論理ディスク（タイプ１の論理ディスク）、２２２ａ，２２２ｂ…論理ディスク（タイプ２の論理ディスク）、２３０…管理情報記憶部、２３１…フラッシュメモリプールテーブル、２３２…ブロック割り当てテーブル、２３３，２３４…マッピングテーブル、２１６０…論理ディスク生成部、２１７０…フラッシュメモリプール生成部、２１７１…グループ化部、２１７２…ブロック分割部、２１７３…チャンク生成部、２１７４…論理ディスクタイプ設定部、２１７５…ブロック割り当てテーブル生成部。
【図１】
0005215434.tif 000002
【図２】
0005215434.tif 000003
【図３】
0005215434.tif 000004
【図４】
0005215434.tif 000005
【図５】
0005215434.tif 000006
【図６】
0005215434.tif 000007
【図７】
0005215434.tif 000008
【図８】
0005215434.tif 000009
【図９】
0005215434.tif 000010
【図１０】
0005215434.tif 000011
【図１１】
0005215434.tif 000012
【図１２】
0005215434.tif 000013
【図１３】
0005215434.tif 000014
【図１４】
0005215434.tif 000015
【図１５】
0005215434.tif 000016