以下に添付図面を参照して本願に係る制御装置、制御プログラムおよび制御方法の実施例を図面に基づいて詳細に説明する。なお、この実施例により開示技術が限定されるものではない。また、各実施例は、矛盾しない範囲で適宜組みあわせてもよい。
以下の実施例1では、図1を用いて、本願に係る制御装置を含む情報処理装置の一例を説明する。図1は、実施例1に係る情報処理装置を説明する図である。図1に示す例では、情報処理装置1は、複数のメモリ2a、2b、複数のCPU(Central Processing Unit)3a、3b、I/O(Input Output)ハブ4、複数のSSD(Solid State Drive)5a、5bを有する。また、SSD5aは、NANDコントローラ6a、および複数の記憶デバイス7a〜10aを有する。
また、SSD5bは、NANDコントローラ6b、および複数の記憶デバイス7b〜10bを有する。なお、以下の説明では、NANDコントローラ6b、および複数の記憶デバイス7b〜10bは、NANDコントローラ6a、および複数の記憶デバイス7a〜10aと同様の機能を発揮するものとして、説明を省略する。
各メモリ2a、2bは、各CPU3a、3bが演算処理に用いるデータを記憶する記憶装置である。また、各CPU3a、3bは、メモリ2a、2bが記憶するデータを用いて、各種演算処理を行う演算処理装置である。例えば、CPU3a、3bは、NUMA(Non-Uniform Memory Access)の技術を用いて、メモリ2a、2bが記憶するデータを取得し、取得したデータを用いて演算処理を実行する。
また、CPU3a、3bは、I/Oハブ4を介して、各SSD5a、5bが記憶するデータを取得し、取得したデータを用いて演算処理を実行する。詳細には、CPU3aは、SSD5aに対し、データの読み出し要求や書き込み要求を発行し、各記憶デバイス7a〜10aからデータの読み出しや書き込みを行う。例えば、CPU3aは、SSD5aに対し、データを指定する論理アドレスが格納された読み出し要求を発行する。また、CPU3aは、データの書き込み先を指定する論理アドレスと、書き込み対象となるデータとが格納された書き込み要求を発行する。
記憶デバイス7aは、各種データを記憶する不揮発性メモリである。詳細には、記憶デバイス7aは、データの記憶領域であるページを複数有し、ページ単位でデータの書き込みを行う。また、記憶デバイス7aは、複数のページを有するブロックを複数有し、ブロック単位でデータの消去を行う。
NANDコントローラ6aは、各記憶デバイス7a〜10aに対してアクセスし、データの読み出しや書き込みを行う。例えば、NANDコントローラ6aは、各CPU3a、3bがデータが記憶された記憶領域を指定する際に用いる論理アドレスと、データが格納された記憶デバイス7a〜10aの記憶領域を示す物理アドレスとを対応付けたアドレス変換テーブルを有する。
そして、NANDコントローラ6aは、読み出し要求とともに論理アドレスを受信すると、アドレス変換テーブルを用いて、論理アドレスと対応付けられた物理アドレスを識別し、識別した物理アドレスが示す記憶領域からデータの読み出しを行う。その後、NANDコントローラ6aは、I/Oハブ4を介して、読み出したデータをCPU3aに送信する。
なお、以下の説明では、理解を容易にするため、各ページの先頭アドレスとなる論理アドレスを単に論理アドレスと記載し、各ページの先頭アドレスとなる物理アドレスを単に物理アドレスと記載する。また、情報処理装置1が実行するシステムは、各ページの先頭アドレスとなる論理アドレスに対する読み出し要求や書き込み要求を発行するものとする。
また、NANDコントローラ6aは、記憶デバイス7a〜10aが、複数のブロックを有し、各ブロックに2q個のページが含まれている場合は、以下の処理を行う。まず、NANDコントローラ6aは、論理アドレスの下位qビットを論理的な1つのブロック内において、ページを識別するための論理ページ番号とし、残りの論理アドレスの上位pビットを論理的な1つのブロックを示す論理ブロックアドレスとする。
また、NANDコントローラ6aは、物理アドレスの上位pビットを物理的な1つのブロックを示す物理ブロックアドレスとし、物理アドレスの下位qビットを物理的な1つのブロック内において、各ページを識別するための物理ページ番号とする。つまり、NANDコントローラ6aは、論理アドレスを、論理ブロックを示す論理ブロックアドレスと、論理ページを論理ブロックごとに示す論理ページ番号とに分割する。また、NANDコントローラ6aは、物理アドレスを、物理ブロックを示す物理ブロックアドレスと、物理ページを物理ブロックごとに示す物理ブロック番号とに分割する。
ここで、アドレス変換テーブルを用いて論理アドレスを物理アドレスに変換する技術では、記憶デバイスの容量が増大すると、アドレス変換テーブルのエントリ数も増大してしまい、NANDコントローラの回路規模が増大してしまう。例えば、図2は、従来の書き込み処理を説明するための第1の図である。なお、図2に示す例では、理解を容易にするため、ブロック数を「8」とし、各ブロック内のページ数が「4」の記憶デバイスについて記載した。また、図2に示す例では、論理ブロックアドレスと物理ブロックアドレスとを対応付けたアドレス変換テーブルを有するNANDコントローラが実行する処理について記載した。
例えば、ファイルシステムは、図2中(A)に示すように、論理ブロックアドレス「L4」に含まれる論理ページのうち、論理ページ番号「1」が示す論理ページに対する書き込み要求を発行する。すなわち、ファイルシステムは、論理アドレス「L4−1」に対する書き込み要求を発行する。すると、NANDコントローラは、図2中(B)に示すように、論理ブロックアドレス「L4」に対応付けられた物理ブロックアドレス「P7」を取得し、図2中(C)に示すように、書き込み対象となるページを含むブロックを識別する。
続いて、NANDコントローラは、図2中(D)に示すように、物理ブロックアドレス「P7」が示す物理ブロックの全データを予備ブロックにコピーする。この際、NANDコントローラは、書き込み要求の対象となる論理ページ番号「1」と同じ物理ページ番号「1」のデータを書き込み対象となるデータで更新する。その後、NANDコントローラは、図2中(E)に示すように、論理ブロックアドレス「L4」と対応付けられていた物理ブロックアドレス「P7」を予備ブロックの物理ブロックアドレス「P8」に更新する。そして、NANDコントローラは、物理ブロックアドレス「P7」が示すブロックのデータを消去する。
また、別の従来例として、アドレス変換テーブルをページごとに管理する場合がある。例えば、図3は、従来の書き込み処理を説明するための第2の図である。なお、図3に示す例では、理解を容易にするため、図2と同様に、ブロック数を「8」とし、各ブロック内のページ数を「4」の記憶デバイスについて記載した。また、図3に示す例では、論理アドレスと物理アドレスとを対応付けたアドレス変換テーブルを有するNANDコントローラが実行する処理について記載した。
例えば、図3中(F)に示すように、ファイルシステムは、論理ブロックアドレス「L0」の論理ページ番号「3」、すなわち論理アドレス「L0−3」に書き込み要求を発行する。すると、NANDコントローラは、図3中(G)に示すように、論理アドレス「L0−3」に対応付けられた物理アドレス「P4−3」を取得し、図3中(H)に示すように、更新前のデータが格納されているページを識別する。続いて、NANDコントローラは、図3中(I)に示すように、物理アドレス「P4−3」が示すページのデータを更新して予備ブロックにコピーする。その後、NANDコントローラは、図3中(J)に示すように、論理アドレス「L0−3」と対応付けられていた物理アドレス「P4−3」を「P8−0」に更新し、処理を終了する。
しかしながら、従来のNANDシステムでは、アドレス変換テーブルをブロックごとに記憶する場合であっても、ページ単位で記憶する場合であっても、アドレス変換テーブルの大きさは、NANDデバイスの総容量に比例して増大してしまう。
そこで、NANDコントローラ6aは、アドレス変換テーブルを記憶デバイス7a〜10aに格納しており、アドレス変換テーブルの一部を保持する。例えば、アドレス変換テーブルには、各論理アドレスと対応付けられたエントリに、論理アドレスが示す記憶領域を物理的に示す物理アドレスが格納されている。また、NANDコントローラ6aは、論理アドレスの上位iビットが共通する論理アドレスを物理アドレスに変換するアドレス変換テーブルが格納された物理アドレスと、論理アドレスの上位iビットとを対応付けた変換テーブルタグを保持する。
そして、NANDコントローラ6aは、読み出し対象、または書き込み対象となる論理アドレスの上位iビットと対応付けられた物理アドレスを変換テーブルタグから取得し、取得した物理アドレスが示す記憶領域から、アドレス変換テーブルの一部を読み出す。ここで、1つの物理アドレスが示す記憶領域には、論理アドレスの下位jビットと対応付けられた複数のエントリに変換先の物理アドレスが格納されたアドレス変換テーブルが格納されている。このため、NANDコントローラ6aは、読み出したアドレス変換テーブルのうち、読み出し対象、または書き込み対象となる論理アドレスの下位jビットと対応付けられたエントリの物理アドレスを読み出すことができる。なお、以下の説明では、論理アドレスの上位iビットを単に上位アドレスと記載し、下位jビットを下位アドレスと記載する。
ここで、アドレス変換テーブルの一部をNANDコントローラが保持する技術では、処理対象の論理アドレスが保持するアドレス変換テーブルに含まれていない場合は、処理対象の論理アドレスを含むアドレス変換テーブルをNANDコントローラから取得する。そして、NANDコントローラから取得したアドレス変換テーブルを用いて論理アドレスを物理アドレスに変換し、変換後の物理アドレスを用いてメモリアクセスを行う。この結果、アドレス変換テーブルの一部をNANDコントローラが保持する技術では、アドレス変換に時間がかかり、メモリアクセスのレイテンシが増大してしまう。
そこで、NANDコントローラ6aは、所定の条件がそろうと、以下の整列処理を実行する。すなわち、NANDコントローラ6aは、論理ブロックアドレスが共通する複数の論理アドレスを選択し、アドレス変換テーブルを用いて、選択した論理アドレスと対応付けられた物理アドレスを識別する。
そして、NANDコントローラ6aは、識別した物理アドレスに格納されているデータを、論理ページ番号の順で、予備のブロックに含まれる先頭のページから各ページへと移動させる。すなわち、NANDコントローラ6aは、各データの論理ページ番号と、移動先の物理ページ番号が同じ値になるように、各データを整列移動させる。そして、NANDコントローラ6aは、整列移動させたデータの論理ブロックアドレスと、データを移動させたブロックの物理ブロックアドレスとを対応付けて記憶する。
また、NANDコントローラ6aは、読み出し要求とともに論理アドレスを受信すると、受信した論理アドレスの上位ビット、すなわち読み出し対象となるデータの論理ブロックアドレスと対応付けて記憶する物理ブロックアドレスを取得する。ここで、整列移動させたブロック内では、各データの論理ページ番号と物理ページ番号とが同一の値となっている。そこで、NANDコントローラ6aは、取得した物理ブロックアドレスに受信した論理アドレスの論理ページ番号を付加することで、読み出し対象となるデータが格納された物理アドレスを取得する。その後、NANDコントローラ6は、取得した物理アドレスを用いて、読み出し対象となるデータを取得する。
このように、NANDコントローラ6aは、論理ブロックアドレスが共通する論理アドレスによって指定されるページの各データを、1つの物理ブロックに移動させる。この際、NANDコントローラ6aは、各データの論理ページ番号と同一の物理ページ番号が示すページに各データを移動させる。そして、NANDコントローラ6aは、各データの移動先となる物理ブロックを示す物理ブロックアドレスと、移動させたデータの論理ブロックアドレスとを対応付けた早引きテーブル13を記憶する。
その後、NANDコントローラ6aは、読み出し対象の論理アドレスを受信すると、論理アドレスに含まれる論理ブロックアドレスと対応付けられた物理ブロックアドレスを早引きテーブル13から取得する。そして、NANDコントローラ6aは、取得した物理ブロックアドレスに、受信した論理アドレスの論理ページ番号を付加することで、読み出し対象となるデータが格納された記憶領域を示す物理アドレスを取得する。
この結果、NANDコントローラ6aは、アドレス変換テーブルキャッシュ12に、読み出し対象となる論理アドレスと対応する物理アドレスが格納されていない場合にも、アドレス変換テーブル20の読み出し処理を行わなずともアドレス変換を実現できる。このため、NANDコントローラ6aは、アドレス変換処理のレイテンシを短縮することができる。
ここで、図4、図5を用いてNANDコントローラ6aが実行する処理の一例について説明する。まず、図4を用いて、NANDコントローラ6aが実行する整列処理について説明する。図4は、整列処理の流れを説明する図である。なお、図4に示す例では、理解を容易にするため、図2と同様に、ブロック数を「8」とし、各ブロック内のページ数を「4」の記憶デバイス7a〜10aについて記載した。
例えば、NANDコントローラ6aは、早引きテーブルを確認し、図4中(K)に示すように、論理ブロックアドレス「L0」に物理ブロックアドレスが対応付けられておらず、未登録、もしくは有効な物理ブロックアドレスが対応付けられていないと判定する。このような場合には、NANDコントローラ6aは、図4中(L)に示すように、論理ブロックアドレス「L0」を含む論理アドレス「L0−0」〜「L0−3」を選択する。また、NANDコントローラ6aは、アドレス変換テーブルを用いて、論理アドレス「L0−0」〜「L0−3」を物理アドレス「P0−0」、「P7−0」、「P2−2」、「P4−3」に変換する。そして、図4中(M)に示すように、各物理アドレスが示すページを識別する。
次に、NANDコントローラ6aは、識別した各ページのデータを予備ブロックに移動させる。この際、NANDコントローラ6aは、図4中(N)に示すように、各データを指定する際に用いる論理アドレスの論理ページ番号と、データの移動先となるページの物理ページ番号とが同一となるように、各データを移動させる。
詳細には、NANDコントローラ6aは、物理アドレス「P4−0」に格納されていた論理アドレス「L0−0」のデータを物理アドレス「P8−0」に移動させる。また、NANDコントローラ6aは、物理アドレス「P7−0」に格納されていた論理アドレス「L0−1」のデータを物理アドレス「P8−1」に移動させる。また、NANDコントローラ6aは、物理アドレス「P2−2」に格納されていた論理アドレス「L0−2」のデータを物理アドレス「P8−2」に移動させる。また、NANDコントローラ6aは、物理アドレス「P4−3」に格納されていた論理アドレス「L0−3」のデータを物理アドレス「P8−3」に移動させる。
そして、NANDコントローラ6aは、図4中(O)に示すように、アドレス変換テーブルを更新するとともに、図4中(P)に示すように、早引きテーブルに、論理ブロックアドレス「L0」と物理ブロックアドレス「P8」とを対応付けて記憶する。
次に、図5を用いてNANDコントローラ6aがデータの読み出し時に早引きテーブルを用いて実行する処理の一例について説明する。図5は、読み出し処理の流れを説明する図である。なお、図5に示す例では、理解を容易にするため、図2と同様に、ブロック数を「8」とし、各ブロック内のページ数を「4」の記憶デバイス7a〜10aについて記載した。
例えば、図5に示す例では、図5中(Q)に示すように、ファイルシステムが論理アドレス「L0−3」への読み出し要求を発行する。このような場合には、NANDコントローラ6aは、図5中(R)に示すように、論理アドレス「L0−3」の論理ブロックアドレス「L0」と対応付けられた物理ブロックアドレス「P8」を早引きテーブルから取得する。ここで、物理ブロックアドレス「P8」が示すブロック中では、各データが、各データの論理ページ番号と同一の物理ページ番号に格納されている。
このため、NANDコントローラ6aは、図5中(S)に示すように、物理ブロックアドレス「P8」のブロックに含まれるページのうち、論理アドレス「L0−3」の論理ページ番号「3」と同じ物理ページ番号「3」が示すページからデータの読み出しを行う。この結果、NANDコントローラ6aは、保持するアドレス変換テーブルに、論理アドレス「L0−3」が含まれていない場合にも、記憶デバイス7a〜10aからアドレス変換テーブルを読み出すことなく、アドレス変換を行うことができる。
次に、図6を用いて、NANDコントローラ6aの機能構成について説明する。図6は、実施例1に係るNANDコントローラの機能構成を説明する図である。図6に示す例では、NANDコントローラ6aは、変換テーブルタグ11、アドレス変換テーブルキャッシュ12、早引きテーブル13、リクエスタインタフェース部14、リクエスト調停部15を有する。また、NANDコントローラ6aは、アドレス変換制御部16、デバイスアクセス制御部17、データ整列制御部18、ガベージコレクション制御部19を有する。また、記憶デバイス7a〜10aは、アドレス変換テーブル20とユーザデータ21とを記憶する。
変換テーブルタグ11は、上位アドレスと、上位アドレスを含む論理アドレスを物理アドレスに変換するためのアドレス変換テーブルが格納された物理アドレスとを対応付けたテーブルである。例えば、図7は、変換テーブルタグを説明する図である。図7に示す例では、変換テーブルタグ11は、論理アドレスの上位アドレス「0」〜「2i−1」とそれぞれ対応付けられた複数のエントリを有する。
また、変換テーブルタグ11の各エントリには、対応付けられた上位アドレスを含む論理アドレスを物理アドレスに変換するためのアドレス変換テーブルが格納された物理アドレス(テーブルPA:Physical Address)「a」〜「m」が格納されている。なお、物理アドレス「a」〜「m」の値は、NANDコントローラ6aが保持するアドレス変換テーブルの一部を変更する度に、異なる値に変化することとなる。
図6に戻って、アドレス変換テーブルキャッシュ12は、記憶デバイス7a〜10a上に格納されたアドレス変換テーブル20の一部である。例えば、図8は、NANDコントローラが保持するアドレス変換テーブルの一例を説明する図である。図8に示す例では、アドレス変換テーブルキャッシュ12は、下位アドレス「0」〜「2j−1」と対応付けられたエントリを有する。また、アドレス変換テーブルキャッシュ12は、各エントリにバリッドビット(Valid)とデータが格納された物理アドレスであるデータPA「BA」〜「BN」を対応付けて格納している。
ここで、バリッドビットは、対応付けられた物理アドレスが有効な物理アドレスであるか否かを示すビットである。例えば、図8に示す例では、下位アドレス「2」と対応付けられたエントリの物理アドレス「BC」は、有効な物理アドレスであるが、下位アドレス「1」と対応付けられたエントリの物理アドレス「BB」は、有効な物理アドレスではない。
なお、NANDコントローラ6aは、アドレス変換テーブル20のうち、変換テーブルタグによって示された物理アドレスで指定される範囲をアドレス変換テーブルキャッシュ12として保持する。例えば、図8、10に示す例では、NANDコントローラ6aは、物理アドレスが「b」となる物理ページに格納されたアドレス変換テーブルキャッシュ12を保持する。
図6に戻って、早引きテーブル13は、論理ブロックアドレスと物理ブロックアドレスとを対応付けて記憶する。例えば、図9は、早引きテーブルの一例を説明する図である。例えば、図9に示す例では、早引きテーブルは、論理ブロックアドレス「0」〜「2p−1」と対応付けたエントリを有する。また、早引きテーブル13は、各エントリに登録フラグと、物理ブロックアドレスとを対応付けて格納している。ここで、登録フラグとは、対応付けられた物理ブロックアドレスが示すブロックにデータを整列移動させたか否かを示すフラグであり、データを整列移動させた場合は、「1」となり、データを整列移動させていない場合は、「0」となる。
図6に戻って、アドレス変換テーブル20は、物理アドレスを論理アドレスに変換する際に用いるアドレス変換テーブルである。例えば、図10は、アドレス変換テーブルの全体を説明する図である。例えば、図10に示すように、アドレス変換テーブル20は、記憶デバイス7a〜10aが有する記憶領域のうち、物理アドレス「a」〜「m」の範囲に格納されたテーブルである。また、アドレス変換テーブル20は、1つのページ内に、論理ページ番号「0」〜「2j−1」と対応付けられたエントリを有し、各エントリ内に、バリッドビットと各論理ページ番号が示すデータが格納された物理アドレスが格納されている。
例えば、物理アドレス「a」が示すページに格納されたアドレス変換テーブルには、上位アドレスが「0」で下位アドレスが「0」〜「2j−1」である論理アドレスに対応する物理アドレス「AA」〜「AN」が格納されている。また、物理アドレス「b」が示すページに格納されたアドレス変換テーブルには、上位アドレスが「1」で下位アドレスが「0」〜「2j−1」である論理アドレスに対応する物理アドレス「BA」〜「BN」が格納されている。また、物理アドレス「m」が示すページに格納されたアドレス変換テーブルには、上位アドレスが「2i−1」で下位アドレスが「0」〜「2j−1」である論理アドレスに対応する物理アドレス「MA」〜「MN」が格納されている。ここで、アドレス変換テーブルに格納された物理アドレス「a」〜「m」と論理アドレスの上位アドレス「0」〜「2i−1」との対応は、変換テーブルタグ11によって管理されている。
図6に戻り、リクエスタインタフェース部14は、I/Oハブを介して、読み出し要求、または書き込み要求を受信する。リクエスタインタフェース部14は、読み出し要求を受信すると、受信した読み出し要求をリクエスト調停部15に出力する。また、リクエスタインタフェース部14は、デバイスアクセス制御部17から読み出し要求の対象となるデータを受信すると、受信したデータを読み出し要求の発行元となるCPU3a、3bに出力する。
また、リクエスタインタフェース部14は、書き込み要求を受信すると、以下の書き込み処理を実行する。例えば、リクエスタインタフェース部14は、受信した書き込み要求に格納された論理アドレスを含む読み出し要求をリクエスト調停部15に出力する。そして、リクエスタインタフェース部14は、読み出し対象のデータを受信すると、受信したデータを書き込み対象のデータで更新する。そして、リクエスタインタフェース部14は、受信した書き込み要求に格納された論理アドレスと、更新後のデータとを含む書き込み要求をリクエスト調停部15に出力する。
リクエスト調停部15は、リクエスタインタフェース部14、データ整列制御部18、およびガベージコレクション制御部19からの読み出し要求および書き込み要求を調停し、調停結果に応じた順序で実行する。例えば、リクエスト調停部15は、読み出し要求を受信すると、読み出し対象となる論理アドレスをアドレス変換制御部16に出力する。そして、リクエスト調停部15は、アドレス変換制御部16から、読み出し対象となる物理アドレスを受信すると、受信した物理アドレスに対する読み出し要求をデバイスアクセス制御部17に発行する。
また、リクエスト調停部15は、書き込み要求を受信すると、アドレス変換制御部16に問い合わせる等して、各ページにデータが格納されていない予備ブロックの物理アドレスを取得する。その後、リクエスト調停部15は、取得した物理アドレスに対して、更新したデータの書き込みを要求する書き込み要求をデバイスアクセス制御部17に出力する。また、リクエスト調停部15は、書き込み要求に格納されていた論理アドレスとデータを格納した物理アドレスとをアドレス変換制御部16に出力する。
アドレス変換制御部16は、論理アドレスを物理アドレスに変換する。例えば、アドレス変換制御部16は、論理アドレスを受信すると、早引きテーブル13を参照し、受信した論理アドレスの論理ブロックアドレスと対応付けられたエントリを識別する。また、アドレス変換制御部16は、識別したエントリの登録フラグが「1」であるか否かを判定する。
そして、アドレス変換制御部16は、識別したエントリの登録フラグが「1」である場合は、識別したエントリに格納された物理ブロックアドレスを取得する。また、アドレス変換制御部16は、取得した物理ブロックアドレスに対し、受信した論理アドレスの下位qビット、すなわち論理ページ番号を付加することで、物理アドレスを生成する。
一方、アドレス変換制御部16は、識別したエントリの登録フラグが「0」である場合、すなわち、受信した論理アドレスが整列移動されていない場合は、アドレス変換テーブルを用いたアドレス変換処理を実行する。例えば、アドレス変換制御部16は、変換テーブルタグ11の各エントリのうち、受信した論理アドレスの上位アドレスと対応付けられたエントリに格納されている物理アドレスを取得する。
そして、アドレス変換制御部16は、取得した物理アドレスをデバイスアクセス制御部17に出力することで、アドレス変換テーブル20の一部を取得する。すると、アドレス変換制御部16は、受信したアドレス変換テーブル20の一部をアドレス変換テーブルキャッシュ12とする。そして、アドレス変換制御部16は、アドレス変換テーブルキャッシュ12の各エントリのうち、受信した論理アドレスの下位アドレスと対応付けられたエントリに格納されている物理アドレスを取得する。その後、アドレス変換制御部16は、取得した物理アドレスをリクエスト調停部15に出力する。
また、アドレス変換制御部16は、リクエスト調停部15から、書き込み要求に格納されていた論理アドレスとデータを格納した物理アドレスとを受信する。すると、アドレス変換制御部16は、受信した論理アドレスの上位アドレスを用いてアドレス変換テーブル20の一部をアドレス変換テーブルキャッシュ12として取得する。そして、アドレス変換制御部16は、取得したアドレス変換テーブルキャッシュ12のうち、論理アドレスの下位アドレスと対応付けられたエントリの物理アドレスを、リクエスト調停部15から受信した物理アドレスで書き換える。
その後、アドレス変換制御部16は、アドレス変換テーブルキャッシュ12をデバイスアクセス制御部17に出力し、記憶デバイス7a〜10aが記憶するアドレス変換テーブル20の書き換えを指示する。ここで、アドレス変換テーブルキャッシュ12を記憶デバイス7a〜10aに書き戻す際は、キャッシュ元のページに書き戻されるわけではない。このため、アドレス変換制御部16は、アドレス変換テーブルキャッシュ12を書き戻した物理アドレスと、書き戻したアドレス変換テーブルキャッシュ12に対応する論理アドレスの上位ビットとを対応付けるよう変換テーブルタグ11を更新する。
また、アドレス変換制御部16は、早引きテーブル13の各エントリのうち、受信した論理アドレスの論理ブロックアドレスと対応付けられたエントリの登録フラグを「0」にする。つまり、アドレス変換制御部16は、データの書き込みにより、整列されたデータが他の物理ブロックに移動した場合には、早引きテーブル13の各エントリのうち、対応するエントリを無効にする。
次に、図11、12を用いて、アドレス変換制御部16が実行するアドレス変換の一例を説明する。まず、図11を用いて、アドレス変換制御部16がアドレス変換テーブルを用いて実行するアドレス変換の流れについて説明する。図11は、アドレス変換テーブルを用いたアドレス変換の流れを説明する図である。
まず、アドレス変換制御部16は、論理アドレスを受信すると、図11中(S)に示すように、変換テーブルタグ11の各エントリのうち、受信した論理アドレスの上位アドレスと対応付けられたエントリの物理アドレスを取得する。すると、アドレス変換制御部16は、物理アドレス「b」を取得するので、図11中(T)に示すように、物理アドレス「b」に格納されたアドレス変換テーブルをアドレス変換テーブルキャッシュ12として取得する。
次に、アドレス変換制御部16は、図11中(U)に示すように、アドレス変換テーブルキャッシュ12の各エントリのうち、受信した論理アドレスの下位アドレスと対応付けられたエントリに格納された物理アドレス「BC」を取得する。そして、アドレス変換制御部16は、図11中(V)に示すように、取得した物理アドレス「BC」を変換結果としてリクエスト調停部15に出力する。
次に、図12を用いて、アドレス変換制御部16が早引きテーブル13を用いて実行するアドレス変換について説明する。図12は、早引きテーブルを用いたアドレス変換の流れを説明する図である。例えば、アドレス変換制御部16は、図12中(W)に示すように、早引きテーブル13の各エントリのうち、受信した論理アドレスの上位pビットである論理ブロックアドレスと対応付けられたエントリを識別する。ここで、識別したエントリの登録フラグが「1」であるので、アドレス変換制御部16は、識別したエントリに格納されている物理ブロックアドレス「B」を取得する。
また、アドレス変換制御部16は、図12中(X)に示すように、受信した論理アドレスの下位qビットである論理ページ番号を物理ページ番号として、早引きテーブル13から取得した物理ブロックアドレス「B」の下位に付加する。この結果、アドレス変換制御部16は、受信した論理アドレスを物理アドレスに変換するアドレス変換テーブルを保持していない場合にも、記憶デバイス7a〜10aからアドレス変換テーブルを読み出すことなく、アドレス変換を行うことができる。
図6に戻って、デバイスアクセス制御部17は、記憶デバイス7a〜10aに対するデータの書き込み、読み出し処理を実行する。例えば、デバイスアクセス制御部17は、リクエスト調停部15、またはアドレス変換制御部16からデータの書き込み要求を受信する。このような場合には、デバイスアクセス制御部17は、受信した書き込み要求に格納されている物理アドレスが示すページに対して、書き込み要求に格納されているデータの書き込みを行う。そして、デバイスアクセス制御部17は、書き込み要求の発行元に対して、書き込み完了通知を送信する。
また、デバイスアクセス制御部17は、リクエスト調停部15、またはアドレス変換制御部16からデータの読み出し要求を受信すると、受信した読み出し要求に格納されている物理アドレスが示すページからデータの読み出しを行う。そして、デバイスアクセス制御部17は、読み出したデータを読み出し要求の発行元に送信する。
データ整列制御部18は、所定のタイミングでデータの整列処理を実行する。例えば、データ整列制御部18は、各論理ブロックアドレス「0」〜「2p−1」について、以下の処理を実行する。まず、データ整列制御部18は、直接、もしくはリクエスト調停部15、およびアドレス変換制御部16を介して、早引きテーブル13の各エントリのうち、整列処理の対象となる論理ブロックアドレスと対応付けられたエントリの登録フラグを確認する。そして、データ整列制御部18は、登録フラグが「1」である場合は、次の論理ブロックアドレスと対応付けられたエントリの登録フラグを確認する。
そして、データ整列制御部18は、整列処理の対象となる論理ブロックアドレスと対応付けられたエントリの登録フラグが「0」である場合は、以下の処理を実行する。まず、データ整列制御部18は、データの整列先となる予備物理ブロックを確保する。例えば、データ整列制御部18は、ガベージコレクション制御部19にガベージコレクションを実行させ、予備物理ブロックを確保する。そして、データ整列制御部18は、各論理ページ番号「0」〜「2q−1」が示すページのデータを、予備物理ブロックの各物理ページ番号「0」〜「2q−1」が示すページに移動させる。
詳細な例を説明する。例えば、データ整列制御部18は、ある論理ブロックアドレス「x」について整列処理を行うため、物理ブロックアドレス「X」の予備物理ブロックを確保する。すると、データ整列制御部18は、論理ブロックアドレス「x」、論理ページ番号「0」が示すページのデータを読み出すよう読み出し要求を発行する。そして、データ整列制御部18は、読み出したデータを物理ブロックアドレス「X」、論理ページ番号「0」が示すページに書き込むよう書き込み要求を発行する。
次に、データ整列制御部18は、論理ブロックアドレス「x」、論理ページ番号「1」が示すページのデータを読み出すよう読み出し要求を発行する。そして、データ整列制御部18は、読み出したデータを物理ブロックアドレス「X」、論理ページ番号「1」が示すページに書き込むよう書き込み要求を発行する。このような処理を論理ページ番号「2q−1」まで繰り返し実行することで、データ整列制御部18は、論理ブロックアドレスが「x」となるデータについての整列を行う。
また、データ整列制御部18は、1つの論理ブロックアドレスについて整列処理が終了すると、早引きテーブル13の更新を行うよう、リクエスト調停部15を介して、デバイスアクセス制御部17に指示する。詳細には、データ整列制御部18は、整列処理を行った論理ブロックアドレスと対応付けられたエントリに、データの移動先となる物理ブロックを示す物理ブロックを格納するよう指示する。この結果、デバイスアクセス制御部17は、整列処理を行った論理ブロックアドレスと対応付けられたエントリに、データの移動先となる物理ブロックアドレスを格納し、登録フラグを「1」に変更する。
また、データ整列制御部18は、1つの論理ブロックアドレスについて整列処理が終了すると、次の論理ブロックアドレスと対応付けられた早引きテーブル13のエントリの登録フラグが「0」であるか否かを判別する。このような処理を全ての論理ブロックアドレスについて実行することで、データ整列制御部18は、全てのデータを整列させることができる。
ガベージコレクション制御部19は、一部のページに有効なデータが格納されている物理ブロックを予備ブロックとするガベージコレクションを実行する。例えば、ガベージコレクション制御部19は、アドレス変換テーブル20の読み出し等を行い、一部のページに有効なデータが格納されている物理ブロックを消去対象ブロックとして識別する。そして、ガベージコレクション制御部19は、消去対象ブロック内の有効なデータが格納されているページを指定して読み出し要求を発行し、データの読み出しを行う。
次に、ガベージコレクション制御部19は、消去対象ブロック以外の物理ブロックのうち、有効なデータが格納されていないページを指定して、読み出したデータの書き込みを行う。そして、ガベージコレクション制御部19は、消去対象ブロックのデータの消去を指示する消去要求をリクエスト調停部15に出力する。このような場合にはリクエスト調停部15はデバイスアクセス制御部17に消去要求を転送する。すると、デバイスアクセス制御部17は、消去対象となるブロックのデータを消去する。
例えば、リクエスタインタフェース部14、リクエスト調停部15、アドレス変換制御部16、デバイスアクセス制御部17、データ整列制御部18、ガベージコレクション制御部19とは、電子回路である。ここで、電子回路の例として、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路、またはCPU(Central Processing Unit)やMPU(Micro Processing Unit)などを適用する。
また、変換テーブルタグ11、アドレス変換テーブルキャッシュ12、早引きテーブル13とは、RAM(Random Access Memory)、フラッシュメモリ(flash memory)などの半導体メモリ素子などの記憶装置に格納された情報である。
次に、図13を用いて、NANDコントローラ6aがデータの読み出しを行う際に実行する処理の流れについて説明する。図13は、データの読み出し処理の流れを説明するためのフローチャートである。例えば、NANDコントローラ6aは、各CPU3a、3bが実行するプログラム等により実現されるシステムから論理アドレスを含む読み出し要求を受信する(ステップS101)。すると、NANDコントローラ6aは、早引きテーブル13の各エントリのうち、受信した論理アドレスの上位ビットである論理ブロックアドレスと対応付けられたエントリを検索する(ステップS102)。そして、NANDコントローラ6aは、検索したエントリの登録フラグが「1」であるか否かを判定する(ステップS103)。
ここで、NANDコントローラ6aは、検索したエントリの登録フラグが「1」ではない場合は(ステップS103否定)、変換テーブルタグ11の各エントリのうち受信した論理アドレスの上位アドレスと対応付けられたエントリを検索する(ステップS104)。また、NANDコントローラ6aは、検索したエントリに格納されている物理アドレスを用いて、アドレス変換テーブル20の一部をアドレス変換テーブルキャッシュ12として取得する。そして、NANDコントローラ6aは、取得したアドレス変換テーブルキャッシュ12の各エントリのうち、受信した論理アドレスの下位アドレスと対応付けられたエントリを検索する(ステップS105)。
ここで、NANDコントローラ6aは、検索したエントリのバリッドビットが「1」であるか否かを判定する(ステップS106)。そして、NANDコントローラ6aは、検索したエントリのバリッドビットが「1」ではない場合は(ステップS106否定)、アドレス例外エラー通知をシステムに通知し(ステップS107)、処理を異常終了する。一方、NANDコントローラ6aは、検索したエントリのバリッドビットが「1」である場合は(ステップS106肯定)、受信した論理アドレスを検索したエントリに格納された物理アドレスにアドレス変換する(ステップS108)。
そして、NANDコントローラ6aは、取得した物理アドレスを含む読み出し要求(Read)を発行し(ステップS109)。読み出したデータをシステムに返送し(ステップS110)、処理を終了する。一方、NANDコントローラ6aは、検索したエントリの登録フラグが「1」である場合は(ステップS103肯定)、ステップS104〜S106の処理をスキップする。そして、NANDコントローラ6aは、検索したエントリに格納されている物理ブロックアドレスと受信した論理アドレスの論理ページ番号とを組み合わせた物理アドレスに論理アドレスを変換する(ステップS108)。
次に、図14を用いて、NANDコントローラ6aがデータの書き込みを行う際に実行する処理の流れについて説明する。図14は、データの書き込み処理の流れを説明するためのフローチャートである。例えば、NANDコントローラ6aは、システムから論理アドレスを含む書き込み要求を受信する(ステップS200)。すると、NANDコントローラ6aは、早引きテーブル13の各エントリのうち、受信した論理アドレスの上位ビットである論理ブロックアドレスと対応付けられたエントリを検索する(ステップS201)。そして、NANDコントローラ6aは、検索したエントリの登録フラグが「1」であるか否かを判定する(ステップS202)。
ここで、NANDコントローラ6aは、検索したエントリの登録フラグが「1」ではない場合は(ステップS202否定)、変換テーブルタグ11の各エントリのうち受信した論理アドレスの上位アドレスと対応付けられたエントリを検索する(ステップS203)。また、NANDコントローラ6aは、検索したエントリに格納されている物理アドレスを用いて、アドレス変換テーブル20の一部をアドレス変換テーブルキャッシュ12として取得する。そして、NANDコントローラ6aは、取得したアドレス変換テーブルキャッシュ12の各エントリのうち、受信した論理アドレスの下位アドレスと対応付けられたエントリを検索する(ステップS204)。
ここで、NANDコントローラ6aは、検索したエントリのバリッドビットが「1」であるか否かを判定する(ステップS205)。そして、NANDコントローラ6aは、バリッドビットが「1」である場合は(ステップS205肯定)、受信した論理アドレスを検索したエントリに格納された物理アドレスにアドレス変換する(ステップS206)。一方、NANDコントローラ6aは、検索したエントリの登録フラグが「1」である場合は(ステップS202肯定)、ステップS203〜S205の処理をスキップする。そして、NANDコントローラ6aは、検索したエントリに格納されている物理ブロックアドレスと受信した論理アドレスの論理ページ番号とを組み合わせた物理アドレスに論理アドレスを変換する(ステップS206)。
続いて、NANDコントローラ6aは、取得した物理アドレスが示す物理ページに読み出し要求を発行し(ステップS207)、読み出したデータを書き込みデータで更新する(ステップS208)。そして、NANDコントローラ6aは、新たな物理ページに対して、更新したデータの書き込み要求(Write)を発行する(ステップS209)。
また、NANDコントローラ6aは、アドレス変換テーブルキャッシュ12のうち、システムから受信した書き込み要求の論理アドレスに対応付けられた物理アドレスを、新たにデータを書き込んだ物理ページを示す物理アドレスに更新する。そして、NANDコントローラ6aは、アドレス変換テーブルキャッシュ12を記憶デバイス7a〜10aに書き戻し、アドレス変換テーブル20を更新する(ステップS210)。
また、NANDコントローラ6aは、変換テーブルタグ11を更新する(ステップS211)。詳細には、NANDコントローラ6aは、アドレスシステムから受信した論理アドレスの上位ビットと対応付けられたエントリの物理アドレスを、アドレス変換テーブルキャッシュ12を書き戻した物理アドレスに更新する。次に、NANDコントローラ6aは、早引きテーブル13の各エントリのうち、受信した論理アドレスの論理ブロックアドレスと対応付けられたエントリの登録フラグを「0」にすることで無効化する(ステップS212)。その後、NANDコントローラ6aは、完了通知をシステムに返送し(ステップS213)、処理を終了する。
なお、NANDコントローラ6aは、検索したエントリのバリッドビットが「0」である場合は、検索したエントリに格納されている物理アドレスが示す物理ページにデータが格納されていないので、ステップS206〜S208の処理をスキップする。
次に、図15を用いて、NANDコントローラ6aが実行する整列処理の流れについて説明する。図15は、整列処理の流れを説明するためのフローチャートである。例えば、NANDコントローラ6aは、所定の時間間隔、もしくはシステムからの実行指示を契機として、図15に示す整列処理を実行する。
まず、NANDコントローラ6aは、早引きテーブル13の各エントリのうち、論理ブロックアドレス「0」と対応付けられたエントリを検索する(ステップS301)。そして、NANDコントローラ6aは、検索したエントリの登録フラグが「0」であるか否かを判定する(ステップS302)。
ここで、NANDコントローラ6aは、登録フラグが「0」である場合は(ステップS302肯定)、続くステップS303〜S307の整列処理を実行する。まず、NANDコントローラ6aは、整列用の予備物理ブロックを確保する(ステップS303)。次に、NANDコントローラ6aは、論理ブロックアドレスが「0」で論理ページ番号が「0」のページに対して、読み出し要求を発行する(ステップS304)。続いてNANDコントローラ6aは、読み出したデータを、予備物理ブロックの物理ページのうち、論理ページ番号「0」と同じ物理ページ番号が示す物理ページに書き込む(ステップS305)。
また、NANDコントローラ6aは、論理ブロックアドレスが「0」の全ての論理ページ番号について、データを整列させたか否かを判定する(ステップS306)。そして、NANDコントローラ6aは、論理ブロックアドレスが「0」の全ての論理ページ番号についてデータを整列させていない場合は(ステップS306否定)、他の論理ページ番号(例えば論理ページ番号「1」)について、ステップS304の処理を行う。
また、NANDコントローラ6aは、論理ブロックアドレスが「0」の全ての論理ページ番号について、データを整列させた場合は(ステップS306肯定)、早引きテーブル13を更新する(ステップS307)。詳細には、NANDコントローラ6aは、早引きテーブル13の各エントリのうち、論理ブロックアドレス「0」と対応付けられたエントリに予備物理ブロックの物理ブロックアドレスを格納し、登録フラグを「1」にする。
その後、NANDコントローラ6aは、整列処理を全ての論理ブロックアドレスについて実行したか否かを判定する(ステップS308)。そして、NANDコントローラ6aは、整列処理を全ての論理ブロックアドレスについて実行していない場合は(ステップS308否定)、次の論理ブロックアドレス(例えば論理ブロックアドレス「1」)について、ステップS301の処理を実行する。また、NANDコントローラ6aは、検索したエントリの登録フラグが「0」ではない場合は(ステップS302否定)、すでに整列処理が行われているので、整列処理をスキップし、ステップS308の処理を実行する。
[NANDコントローラ6aの効果]
上述したように、NANDコントローラ6aは、論理ブロックアドレスと論理ページ番号とを含む論理アドレスに、物理ブロックアドレスと物理ページ番号とを対応付けたアドレス変換テーブルキャッシュ12を記憶する。また、NANDコントローラ6aは、1つの論理ブロック番号を選択し、選択した論理ブロック番号を含む論理アドレスと対応付けられた物理アドレスをアドレス変換テーブルキャッシュ12から取得する。そして、NANDコントローラ6aは、取得した物理アドレスが示す物理ページのデータを、1つの物理ブロックに含まれる物理ページであって、各データの論理アドレスに含まれる論理ページ番号と同一の物理ページ番号が示す物理ページに移動させる。その後、NANDコントローラ6aは、データを移動させた物理ブロックの物理ブロックアドレスと、選択した論理ブロック番号とを対応付けて早引きテーブル13に格納する。
また、NANDコントローラ6aは、読み出し対象のデータが格納された論理ページを示す論理アドレスを受信すると、論理アドレスに含まれる論理ブロックアドレスと対応付けられた物理ブロックアドレスを早引きテーブル13から取得する。そして、NANDコントローラ6aは、早引きテーブル13から取得した物理ブロックアドレスが示す物理ブロックに含まれた各物理ページのうち、受信した論理アドレスに含まれる論理ページ番号と同一の物理ページ番号が示す物理ページからデータを読み出す。
このため、NANDコントローラ6aは、読み出し対象のデータが格納された論理ページを示す論理アドレスを物理アドレスに変換するアドレス変換テーブル20を保持していない場合にも、アドレス変換に要する時間を短縮することができる。この結果、NANDコントローラ6aは、記憶デバイス7a〜10aに対するアクセスのレイテンシを改善することができる。
また、例えば、アドレス変換テーブルの一部を保持する技術では、アドレス変換テーブルのサイズが大きくなると、保持する割合が相対的に小さくなるので、論理アドレスがキャッシュヒットする確率が悪化し、アドレス変換に要する時間が増大してしまう。また、アドレス変換テーブルのサイズが増大すると、変換テーブルタグの大きさも増大するので、変換テーブルタグの一部をキャッシュすることで、回路規模の増大を防ぐ手法が考えられる。しかしながら、このような手法では、記憶デバイスからデータの読み出しや書き込みを行う際に、複数回のアクセスが行われることとなる。この結果、記憶デバイスにアクセスする際のレイテンシが増大してしまう。
しかし、NANDコントローラ6aは、アドレス変換テーブル20の大きさによらず、整列処理を行った論理アドレスについては、必ずアドレス変換を行うことができる。この結果、NANDコントローラ6aは、記憶デバイス7a〜10aに対する読み出し性能、および書き込み性能を向上させることができる。
また、早引きテーブル13は、記憶デバイス7a〜10aが有する物理ブロックの数と同数のエントリで実現可能である。この結果、早引きテーブル13のサイズは、アドレス変換テーブル20に記憶デバイス7a〜10aが有する物理ページの数と同数のエントリを設定する場合よりも、非常に小さくなる。このため、NANDコントローラ6aは、回路規模を増大させることなく、記憶デバイス7a〜10aに対する読み出し性能、および書き込み性能を向上させることができる。
また、NANDコントローラ6aは、論理アドレスの上位ビットを論理ブロックアドレスとし、論理アドレスの下位ビットを論理ページ番号とする。また、NANDコントローラ6aは、物理アドレスの上位ビットを物理ブロックアドレスとし、物理アドレスの下位ビットを物理ページ番号とする。このため、NANDコントローラ6aは、任意の数の論理ページを早引きテーブルの構成単位とすることができる。また、NANDコントローラ6aは、複雑な処理を行うことなく、容易にアドレス変換を行うことができる。
また、NANDコントローラ6aは、使用されていない物理ページを含む物理ブロックに格納されたデータを他のブロックに複製し、使用されていない物理ページを含む物理ブロック内のデータを消去するガベージコレクション制御部19を有する。そして、NANDコントローラ6aは、ガベージコレクション制御部19がデータを消去した物理ブロックを予備ブロックとして利用するので、記憶デバイス7a〜10aの空き容量が少ない場合にも、効率的にデータの整列処理を行うことができる。
上述したNANDコントローラ6aは、データ整列処理を実行する際に、早引きテーブル13の全エントリを対象としていた。しかし、実施例はこれに限定されるものではない。例えば、NANDコントローラ6aは、1回の整列処理で、全論理ブロックアドレスのうち、一部の論理ブロックアドレスのみについて整列制御を行っても良い。
例えば、NANDコントローラ6aは、早引きテーブル13の各エントリについて整列処理を実行し、所定の時間が経過した場合には、整列処理を行った最後の論理ブロックアドレスを記憶する。そして、NANDコントローラ6aは、次回の整列処理を行う際に、記憶した論理ブロックアドレスの次の論理ブロックアドレスから整列処理を再開してもよい。
以下、図16を用いて、NANDコントローラ6aが実行する処理の流れについて説明する。図16は、整列処理の第1のバリエーションを説明するためのフローチャートである。なお、図16に示す処理のうち、ステップS403〜ステップS409は、図15に示すステップS301〜S307と同様の処理を実行するものとして、説明を省略する。
例えば、NANDコントローラ6aは、前回の整列処理において最後に整列処理を行った論理ブロックアドレスである終了アドレスをロードする(ステップS401)。次に、NANDコントローラ6aは、ロードした終了アドレスに1を加算した値を整列処理の開始アドレスとする(ステップS402)。そして、NANDコントローラ6aは、開始アドレスからステップS403の処理を実行する。
また、NANDコントローラ6aは、ステップS409の処理を実行すると、整列処理を開始してから一定時間が経過したか否かを判定する(ステップS410)。そして、NANDコントローラ6aは、一定時間が経過している場合は(ステップS410肯定)、整列処理を実行した最後の論理ブロックアドレスを終了アドレスとして保存し(ステップS411)、処理を終了する。一方、NANDコントローラ6aは、整列処理を開始してから一定時間が経過していない場合は(ステップS410否定)、次の論理ブロックアドレスについて、ステップS403の処理を実行する。
また、NANDコントローラ6aは、早引きテーブル13の各エントリを複数のグループに分割し、各グループにグループ番号(グループNo)を付与する。そして、NANDコントローラ6aは、1回の整列処理で1つのグループについてのみ整列処理を行っても良い。
例えば、図17は、整列処理の第2のバリエーションを説明するためのフローチャートである。なお、図17に示す処理のうち、ステップS503〜ステップS509は、図15に示すステップS301〜S307と同様の処理を実行するものとして、説明を省略する。
例えば、NANDコントローラ6aは、前回の整列処理において最後に整列処理を行ったグループ番号をロードする(ステップS501)。次に、NANDコントローラ6aは、ロードしたグループ番号の次のグループ番号を整列処理の対象とする(ステップS502)。そして、NANDコントローラ6aは、整列処理の対象とするグループ番号が付与された最初のエントリについて、ステップS503の処理を実行する。
また、NANDコントローラ6aは、ステップS509の処理を実行すると、早引きテーブル13の各エントリのうち、整列処理の対象となるグループ番号が付与された全てのエントリについて整列処理を行ったか否か判定する(ステップS510)。そして、NANDコントローラ6aは、整列処理の対象となるグループ番号が付与された全てのエントリについて整列処理を行った場合は(ステップS510肯定)、整列処理を実行したグループ番号を保存し(ステップS511)、処理を終了する。一方、NANDコントローラ6aは、整列処理の対象となるグループ番号が付与された全てのエントリについて整列処理を行っていない場合は(ステップS510否定)、次の論理ブロックアドレスについて、ステップS503の処理を実行する。
NANDコントローラ6aは、論理ブロックアドレスの一部ずつについて整列処理を実行した場合は、1回の整列処理に要する処理時間を短縮することができる。この結果、NANDコントローラ6aは、整列処理のスケジューリングを柔軟にすることができる。
また、NANDコントローラ6aは、読み出し要求、または書き込み要求の発生頻度を論理ブロックアドレスごとに計数し、読み出し要求の発生頻度が多く、書き込み要求の発生頻度が少ない論理ブロックアドレスについて、整列処理を実行しても良い。以下、読み出し要求の発生頻度が多く、書き込み要求の発生頻度が少ない論理ブロックアドレスのグループについて、整列処理を実行するNANDコントローラ6cについて説明する。
図18は、読み出し要求と書き込み要求との発生頻度に応じて整列処理を実行するNANDコントローラの機能構成を説明する図である。なお、図18に示すNANDコントローラ6cの機能構成のうち、図6に示すNANDコントローラ6aと同様の機能構成については、同一の符号を付し、説明を省略する。
例えば、NANDコントローラ6cは、データ整列制御部18a、リクエストカウンタ22を有する。リクエストカウンタ22は、リクエスタインタフェース部14がI/Oハブ4を介して受信した読み出し要求、および書き込み要求の内容を取得する。そして、リクエストカウンタ22は、複数の論理ブロックアドレスを含むグループごとに、リクエスタインタフェース部14が受信した読み出し要求の数、および書き込み要求の数を計数する。
また、リクエストカウンタ22は、データ整列制御部18aから整列処理の実行通知を受信すると、グループごとに、計数した読み出し要求の数から書き込み要求の数を減算した値を算出する。そして、リクエストカウンタ22は、算出した値が最も大きいグループに含まれる論理ブロックアドレスをデータ整列制御部18aに通知する。すなわち、リクエストカウンタ22は、読み出し要求の数が大きく、書き込み要求の数が少ないグループに含まれる論理ブロックアドレスをデータ整列制御部18aに通知する。
データ整列制御部18aは、所定の時間間隔、もしくはシステムからの整列処理実行要求に応じて、整列処理を実行する場合は、整列処理の実行通知をリクエストカウンタ22に通知する。そして、データ整列制御部18aは、リクエストカウンタ22から論理ブロックアドレスを受信すると、データ整列制御部18と同様に、受信した論理ブロックアドレスについて整列処理を実行する。
例えば、データ整列制御部18a、リクエストカウンタ22とは、電子回路である。ここで、電子回路の例として、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路、またはCPU(Central Processing Unit)やMPU(Micro Processing Unit)などを適用する。
次に、図19を用いて、NANDコントローラ6cが実行する整列処理の流れを説明する。図19は、整列処理の第3のバリエーションを説明するためのフローチャートである。なお、図19に示す処理のうち、ステップS603〜ステップS609は、図15に示すステップS301〜S307と同様の処理を実行するものとして、説明を省略する。
例えば、NANDコントローラ6cは、各グループの読み出し要求の数から書き込み要求の数を減算する(ステップS601)。次に、NANDコントローラ6cは、減算結果の値が最も大きいグループを今回の整列処理の対象に設定する(ステップS602)。そして、NANDコントローラ6cは、整列処理の対象となったグループに含まれる論理アドレスについて、ステップS603の処理を実行する。また、NANDコントローラ6cは、ステップS609の処理を実行すると、グループ内の全ての論理ブロックアドレスについて整列処理を実行したか否かを判定する(ステップS610)。
そして、NANDコントローラ6cは、グループ内の全ての論理ブロックアドレスについて整列処理を行った場合は(ステップS610肯定)、処理を終了する。一方、NANDコントローラ6cは、グループ内全ての論理ブロックアドレスについて整列処理を行っていない場合は(ステップS610否定)、グループ内の次の論理ブロックアドレスについて、ステップS603の処理を実行する。
[NANDコントローラ6cの効果]
上述したように、NANDコントローラ6cは、論理ブロックアドレスごとに、読み出し要求の数と書き込み要求の数とを計数する。そして、NANDコントローラ6cは、読み出し要求の数から書き込み要求の数を減算した数が最も多い論理ブロックアドレスについて、整列処理を実行する。このため、NANDコントローラ6cは、効果的な整列処理を実行することができる。
すなわち、読み出し要求の数が多く、書き込み要求の数が少ない論理ブロックアドレスの各論理ページを物理ブロック上で整列させた場合は、無効になる確率が少なく、早引きテーブル13を用いたアドレス変換が多く実行されると考えられる。このため、NANDコントローラ6cは、読み出し要求の数が多く、書き込み要求の数が少ない論理ブロックアドレスを優先的に整列させるので、効率的な整列処理を実行することができる。