(57)【要約】【課題】アドレス変換に関する性能を改善することができるメモリシステムを実現する。【解決手段】実施形態によれば、メモリシステムは、論理物理アドレス変換のための多段マッピングテーブルの一部をキャッシュするように構成されたキャッシュと、コントローラとを具備する。前記多段マッピングテーブルは階層化された複数のテーブルを含み、前記複数のテーブルは複数の階層レベルに対応する複数のテーブルを含み、各階層レベルのテーブルは複数のアドレス変換データ部分を含む。前記コントローラは、キャッシュに格納されているアドレス変換データ部分に対する、階層レベルごとの参照の偏り度合いに基づいて、階層レベルごとに優先度を設定し、高い優先度を有する階層レベルのアドレス変換データ部分それぞれを低い優先度を有する階層レベルのアドレス変換データ部分それぞれよりも優先して前記キャッシュにキャッシュする。【選択図】図１
2020046917.tif 000002
【特許請求の範囲】
【請求項１】
ホストに接続可能なメモリシステムであって、
論理物理アドレス変換のための多段マッピングテーブルを格納する不揮発性メモリと、
前記多段マッピングテーブルの一部をキャッシュするように構成されたキャッシュと、
前記不揮発性メモリおよび前記キャッシュを制御するように構成されたコントローラとを具備し、
前記多段マッピングテーブルは複数の階層レベルに対応する複数のテーブルを含み、各階層レベルのテーブルは複数のアドレス変換データ部分を含み、各階層レベルのテーブルに含まれる前記複数のアドレス変換データ部分の各々は各階層レベルに応じた論理アドレス範囲をカバーし、
前記コントローラは、
前記キャッシュに格納されている階層レベルそれぞれに対応するアドレス変換データ部分を参照することによって、論理物理アドレス変換のためのアドレス解決処理と、論理アドレスに対応する物理アドレスを更新するアドレス更新処理とを実行し、
前記キャッシュに格納されているアドレス変換データ部分に対する、階層レベルごとの参照の偏り度合いに基づいて、階層レベルごとに優先度を設定し、高い優先度を有する階層レベルのアドレス変換データ部分それぞれを低い優先度を有する階層レベルのアドレス変換データ部分それぞれよりも優先して前記キャッシュにキャッシュする動作を実行するように構成されている、メモリシステム。
【請求項２】
前記コントローラは、前記低い優先度を有する階層レベルのアドレス変換データ部分それぞれを前記高い優先度を有する階層レベルのアドレス変換データ部分それぞれよりも優先して置換対象に選択することによって、前記高い優先度を有する階層レベルのアドレス変換データ部分それぞれを前記低い優先度を有する階層レベルのアドレス変換データ部分それぞれよりも優先して前記キャッシュにキャッシュするように構成されている請求項１記載のメモリシステム。
【請求項３】
前記コントローラは、前記キャッシュに格納されているアドレス変換データ部分に対する参照の偏り度合いを階層レベルごとに求め、求められた階層レベルごとの参照の偏り度合いに基づいて階層レベルごとに優先度を設定するように構成されている請求項１記載のメモリシステム。
【請求項４】
前記ホストによるライトアクセスに起因する前記キャッシュの参照傾向を無視する場合、前記コントローラは、前記アドレス更新処理において起きたキャッシュヒットを、階層レベルごとの参照の偏り度合いを示す値に反映しないように構成されている請求項１記載のメモリシステム。
【請求項５】
前記ホストによるリードアクセスに起因する前記キャッシュの参照傾向を無視する場合、前記コントローラは、前記アドレス解決処理において起きたキャッシュヒットを、階層レベルごとの参照の偏り度合いを示す値に反映しないように構成されている請求項１記載のメモリシステム。
【請求項６】
前記コントローラは、
複数のネームスペースに対応する複数の多段マッピングテーブルそれぞれの一部をキャッシュするように構成された複数のキャッシュを制御し、
前記複数のキャッシュのそれぞれについて、各キャッシュに格納されているアドレス変換データ部分に対する参照の偏り度合いを階層レベルごとに求め、
求められた階層レベルごとの参照の偏り度合いに基づいて、階層レベルごとに優先度を設定する動作と、高い優先度を有する階層レベルのアドレス変換データ部分それぞれを低い優先度を有する階層レベルのアドレス変換データ部分それぞれよりも優先して対応するキャッシュにキャッシュする動作とをキャッシュ毎に実行するように構成されている請求項１記載のメモリシステム。
【請求項７】
前記コントローラは、（ｉ）前記ホストによる前記複数のネームスペースそれぞれに対するアクセスの頻度、および（ｉｉ）各キャッシュに対応する前記階層レベルごとの参照の偏り度合い、の少なくとも一方に基づいて、前記複数のキャッシュそれぞれのサイズを調整するように構成されている請求項６記載のメモリシステム。
【請求項８】
ホストに接続可能なストレージシステムであって、
複数のストレージデバイスと、
前記ホストによって指定される第１タイプの論理アドレスそれぞれと前記複数のストレージデバイスをアクセスするための第２タイプの論理アドレスそれぞれとの間のマッピングを管理する多段マッピングテーブルの一部をキャッシュするように構成されたキャッシュと、
前記複数のストレージデバイスおよび前記キャッシュを制御するように構成されたコントローラとを具備し、
前記多段マッピングテーブルは複数の階層レベルに対応する複数のテーブルを含み、各階層レベルのテーブルは複数のアドレス変換データ部分を含み、各階層レベルのテーブルに含まれる前記複数のアドレス変換データ部分の各々は各階層レベルに応じた論理アドレス範囲をカバーし、
前記コントローラは、
前記キャッシュに格納されている階層レベルそれぞれに対応するアドレス変換データ部分を参照することによって、第１タイプの論理アドレスを第２タイプの論理アドレスに変換するためのアドレス解決処理と、第２タイプの論理アドレスを更新するアドレス更新処理とを実行し、
前記キャッシュに格納されているアドレス変換データ部分に対する、階層レベルごとの参照の偏り度合いに基づいて、階層レベルごとに優先度を設定し、高い優先度を有する階層レベルのアドレス変換データ部分それぞれを低い優先度を有する階層レベルのアドレス変換データ部分それぞれよりも優先して前記キャッシュにキャッシュする動作を実行するように構成されている、ストレージシステム。
【請求項９】
前記コントローラは、前記低い優先度を有する階層レベルのアドレス変換データ部分それぞれを前記高い優先度を有する階層レベルのアドレス変換データ部分それぞれよりも優先して置換対象に選択することによって、前記高い優先度を有する階層レベルのアドレス変換データ部分それぞれを前記低い優先度を有する階層レベルのアドレス変換データ部分それぞれよりも優先して前記キャッシュにキャッシュするように構成されている請求項８記載のストレージシステム。
【請求項１０】
前記コントローラは、
複数のネームスペースに対応する複数の多段マッピングテーブルそれぞれの一部をキャッシュするように構成された複数のキャッシュを制御し、
前記複数のキャッシュのそれぞれについて、各キャッシュに格納されているアドレス変換データ部分に対する参照の偏り度合いを階層レベルごとに求め、
求められた前記階層レベルごとの参照の偏り度合いに基づいて、階層レベルごとに優先度を設定する動作と、高い優先度を有する階層レベルのアドレス変換データ部分それぞれを低い優先度を有する階層レベルのアドレス変換データ部分それぞれよりも優先して対応するキャッシュにキャッシュする動作とキャッシュ毎に実行するように構成されている請求項８記載のストレージシステム。
【請求項１１】
前記コントローラは、（ｉ）前記ホストによる前記複数のネームスペースそれぞれに対するアクセスの頻度、および（ｉｉ）各キャッシュに対応する前記階層レベルごとの参照の偏り度合い、の少なくとも一方に基づいて、前記複数のキャッシュそれぞれのサイズを調整するように構成されている請求項１０記載のストレージシステム。
【請求項１２】
論理物理アドレス変換のための多段マッピングテーブルを格納する不揮発性メモリと、前記多段マッピングテーブルの一部をキャッシュするように構成されたキャッシュとを含むメモリシステムを制御する制御方法であって、
前記多段マッピングテーブルは複数の階層レベルに対応する複数のテーブルを含み、各階層レベルのテーブルは複数のアドレス変換データ部分を含み、各階層レベルのテーブルに含まれる前記複数のアドレス変換データ部分の各々は各階層レベルに応じた論理アドレス範囲をカバーし、
前記キャッシュに格納されている階層レベルそれぞれに対応するアドレス変換データ部分を参照することによって、論理物理アドレス変換のためのアドレス解決処理と、論理アドレスに対応する物理アドレスを更新するアドレス更新処理とを実行することと、
前記キャッシュに格納されているアドレス変換データ部分に対する、階層レベルごとの参照の偏り度合いに基づいて、階層レベルごとに優先度を設定することと、
高い優先度を有する階層レベルのアドレス変換データ部分それぞれを低い優先度を有する階層レベルのアドレス変換データ部分それぞれよりも優先して前記キャッシュにキャッシュする動作を実行することとを具備する制御方法。
【請求項１３】
前記高い優先度を有する階層レベルのアドレス変換データ部分それぞれを前記低い優先度を有する階層レベルのアドレス変換データ部分それぞれよりも優先して前記キャッシュにキャッシュする動作を実行することは、前記低い優先度を有する階層レベルのアドレス変換データ部分それぞれを前記高い優先度を有する階層レベルのアドレス変換データ部分それぞれよりも優先して置換対象に選択することを含む請求項１２記載の制御方法。
【請求項１４】
複数のネームスペースに対応する複数の多段マッピングテーブルそれぞれの一部をキャッシュするように構成された複数のキャッシュを制御することと、
前記複数のキャッシュのそれぞれについて、各キャッシュに格納されているアドレス変換データ部分に対する参照の偏り度合いを階層レベルごとに求めることと、
求められた前記階層レベルごとの参照の偏り度合いに基づいて、階層レベルごとに優先度を設定する動作と、高い優先度を有する階層レベルのアドレス変換データ部分それぞれを低い優先度を有する階層レベルのアドレス変換データ部分それぞれよりも優先して対応するキャッシュにキャッシュする動作とをキャッシュ毎に実行することとをさらに具備する請求項１２記載の制御方法。
【請求項１５】
（ｉ）ホストによる前記複数のネームスペースそれぞれに対するアクセスの頻度および（ｉｉ）各キャッシュに対応する前記階層レベルごとの参照の偏り度合い、の少なくとも一方に基づいて、前記複数のキャッシュそれぞれのサイズを調整することをさらに具備する請求項１４記載の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、論理物理アドレス変換のようなアドレス変換を制御する技術に関する。
【背景技術】
【０００２】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。
このようなメモリシステムとしては、ＮＡＮＤ型フラッシュメモリを備えるソリッドステートドライブ（ＳＳＤ）が知られている。このようなメモリシステムにおいては、アドレス変換テーブルを使用してアドレス変換が実行される。
【０００３】
また、サーバのような計算機システムにおいては、複数のストレージデバイスを備えるストレージシステムも利用されている。ストレージシステムはストレージアレイと称されることもある。
このようなストレージシステムにおいても、アドレス変換テーブルを使用してアドレス変換が実行される場合がある。
【０００４】
このアドレス変換に要する時間が長くなると、メモリシステムやストレージシステムの性能の低下が引き起こされる場合がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第６２４００７１号公報
【特許文献２】特許第５７８９６６０号公報
【特許文献３】米国特許出願公開第２０１４／０１９５５５１号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明が解決しようとする課題は、アドレス変換に関する性能を改善することができるメモリシステム、ストレージシステム、および制御方法を提供することである。
【課題を解決するための手段】
【０００７】
実施形態によれば、ホストに接続可能なメモリシステムは、論理物理アドレス変換のための多段マッピングテーブルを格納する不揮発性メモリと、前記多段マッピングテーブルの一部をキャッシュするように構成されたキャッシュと、前記不揮発性メモリおよび前記キャッシュを制御するように構成されたコントローラとを具備する。前記多段マッピングテーブルは複数の階層レベルに対応する複数のテーブルを含む。各階層レベルのテーブルは複数のアドレス変換データ部分を含む。各階層レベルのテーブルに含まれる前記複数のアドレス変換データ部分の各々は各階層レベルに応じた論理アドレス範囲をカバーする。前記コントローラは、前記キャッシュに格納されている階層レベルそれぞれに対応するアドレス変換データ部分を参照することによって、論理物理アドレス変換のためのアドレス解決処理と、論理アドレスに対応する物理アドレスを更新するアドレス更新処理とを実行する。前記コントローラは、前記キャッシュに格納されているアドレス変換データ部分に対する、階層レベルごとの参照の偏り度合いに基づいて、階層レベルごとに優先度を設定する。前記コントローラは、高い優先度を有する階層レベルのアドレス変換データ部分それぞれを低い優先度を有する階層レベルのアドレス変換データ部分それぞれよりも優先して前記キャッシュにキャッシュする動作を実行する。
【図面の簡単な説明】
【０００８】
【図１】第１実施形態に係るメモリシステムを含む情報処理システムの構成例を示すブロック図。
【図２】第１実施形態のメモリシステム内の不揮発性メモリの構成例を示す図。
【図３】第１実施形態のメモリシステムにおいて実行される書き込み動作を示す図。
【図４】マッピングテーブルの構成例を示す図。
【図５】第１実施形態のメモリシステムにおいて使用される多段マッピングテーブル（多段論理物理アドレス変換テーブル）を示す図。
【図６】図５の多段マッピングテーブルの構成例を示す図。
【図７】第１実施形態のメモリシステムにおいて多段マッピングテーブルの一部を格納するテーブルキャッシュの構成例を示す図。
【図８】図７のテーブルキャッシュ内の下位テーブルを参照するために使用されるタグフィールドと、図７のテーブルキャッシュ内の上位テーブルを参照するために使用されるタグフィールドとを示す図。
【図９】第１実施形態のメモリシステムにおいて多段マッピングテーブルの一部を格納するテーブルキャッシュの別の構成例を示す図。
【図１０】図１０のテーブルキャッシュ内の下位テーブルのマッピング情報を検索するために使用されるタグフィールドと、図７のテーブルキャッシュ内の上位テーブルのマッピング情報を検索するために使用されるタグフィールドとを示す図。
【図１１】テーブルキャッシュに適用される置き換え動作の例を示す図。
【図１２】多段マッピングテーブルの各階層レベルによってカバーされる論理アドレスの範囲と、各階層レベルのキャッシュヒットが起きた場合に記憶メディア（不揮発性メモリ）がアクセスされる回数とを示す図。
【図１３】上位テーブル、下位テーブルという順序で、マッピング情報を不揮発性メモリからテーブルキャッシュにリフィルする動作を示す図。
【図１４】一つの上位テーブルセグメントによってカバーされる狭い論理アドレス範囲のみがホストによってアクセスされるケース（狭域アクセス）を示す図。
【図１５】一つの上位テーブルセグメントによってカバーされる狭い論理アドレス範囲と別の一つの上位テーブルセグメントによってカバーされる狭い論理アドレス範囲とがホストによってアクセスされるケース（狭域アクセス）を示す図。
【図１６】複数の上位テーブルセグメントそれぞれによってカバーされる複数の論理アドレス範囲を含む広い論理アドレス範囲がホストによってランダムにアクセスされるケース（広域アクセス）を示す図。
【図１７】テーブルキャッシュを占める、上位テーブルセグメントと下位テーブルセグメントとの割合を示す図。
【図１８】テーブルキャッシュに格納されている上位テーブルセグメントに対する参照の偏り度合いが弱い場合（広域アクセスの場合）に、第１実施形態のメモリシステムにおいて設定される上位テーブル優先度（高優先度）および下位テーブル優先度（低優先度）を示す図。
【図１９】高優先度を有する上位テーブルセグメントそれぞれを下位テーブルセグメントよりも優先的にテーブルキャッシュにキャッシュする動作を示す図。
【図２０】テーブルキャッシュに格納されている上位テーブルセグメントに対する参照の偏り度合いに応じて、多段マッピングテーブルの各階層レベルの優先度を動的に調整する動作を示す図。
【図２１】更新済みセグメントをテーブルキャッシュ内で管理する動作を示す図。
【図２２】更新済みセグメントをテーブルキャッシュとは異なるデータ構造によって管理する動作を示す図。
【図２３】第１実施形態のメモリシステムに含まれるキャッシュコントローラ、アクセス履歴情報管理部、および優先度調整部を示すブロック図。
【図２４】アクセス履歴情報管理部によって実行されるアクセス履歴情報更新動作を示す図。
【図２５】優先度調整部によって実行される上位テーブル優先フラグ設定動作を示す図。
【図２６】多段マッピングテーブルがより多くの階層レベルに対応するテーブルを含む場合に、テーブルキャッシュに格納されるべき複数の階層レベルのテーブルにそれぞれ設定される優先度の例を示す図。
【図２７】上位テーブル優先フラグの値によって置き換え対象の選択方法がどのように変わるかを示す図。
【図２８】第１実施形態のメモリシステムにおいて実行されるアドレス解決処理の手順を示すフローチャート。
【図２９】第１実施形態のメモリシステムにおいて実行されるリフィル処理の手順を示すフローチャート。
【図３０】第１実施形態のメモリシステムにおいて実行されるアドレス更新処理の手順を示すフローチャート。
【図３１】第１実施形態のメモリシステムにおいて実行されるフラッシュ処理の手順を示すフローチャート。
【図３２】第１実施形態のメモリシステムにおいて実行される優先度情報更新処理の手順を示すフローチャート。
【図３３】アクセス履歴情報として利用可能な様々なパラメータ（アクセスされた論理アドレス、アクセス時刻、多段マッピングテーブルの各階層のヒット回数、多段マッピングテーブルの各階層のアクセス回数、等）を示す図。
【図３４】ライトアクセスに関するアクセス傾向またはリードアクセスに関するアクセス傾向のいずれか一方を無視する処理の手順を示すフローチャート。
【図３５】第１実施形態のメモリシステムによってサポートされる複数のネームスペースそれぞれに対応する複数の領域を示す図。
【図３６】複数のネームスペースそれぞれに対応する論理アドレス空間の例を示す図。
【図３７】複数のネームスペースそれぞれに対応するテーブルキャッシュ毎に優先度情報を個別に調整するための構成例を示すブロック図。
【図３８】複数のネームスペースによって共有される多段マッピングテーブルの構成例を示す図。
【図３９】第１実施形態のメモリシステム内のキャッシュコントローラによってネームスペース毎に個別に管理されるアクセス履歴情報と優先度情報とを示す図。
【図４０】複数のネームスペース内の第１のネームスペースに対して第１実施形態のメモリシステムにおいて実行される優先度情報更新処理の手順を示すフローチャート。
【図４１】複数のネームスペース内の第２のネームスペースに対して第１実施形態のメモリシステムにおいて実行される優先度情報更新処理の手順を示すフローチャート。
【図４２】個々のネームスペースに対するアクセスの頻度に基づいて、複数のネームスペースそれぞれに対応する複数のテーブルキャッシュに割り当てるべきメモリ容量を変更する動作を示す図。
【図４３】個々のネームスペースに対するアクセスの頻度に基づいて、複数のネームスペースそれぞれに対応する複数のテーブルキャッシュに割り当てるべきメモリ容量を変更する別の動作を示す図。
【図４４】キャッシュコントローラとアクセス履歴情報管理部と優先度調整部とを含む第２実施形態のストレージシステムの構成例を示すブロック図。
【図４５】第２実施形態のストレージシステムにおいて使用されるマッピングテーブルの構成例を示す図。
【図４６】第２実施形態のストレージシステムにおいて使用される多段マッピングテーブルを示す図。
【発明を実施するための形態】
【０００９】
以下、図面を参照して、実施形態を説明する。  
（第１実施形態）
まず、図１を参照して、第１実施形態に係るメモリシステムを含む情報処理システム１の構成を説明する。
このメモリシステムは、不揮発性メモリにデータをライトし、不揮発性メモリからデータをリードするように構成された半導体ストレージデバイスである。このメモリシステムは、例えば、ソリッドステートドライブ（ＳＳＤ）として実現されてもよいし、メモリカードとして実現されてもよい。以下では、このメモリシステムが、ソリッドステートドライブ（ＳＳＤ）３として実現されている場合を想定する。
【００１０】
情報処理システム１は、ホスト（ホストデバイス）２と、ＳＳＤ３とを含む。ホスト２は、パーソナルコンピュータやサーバ、携帯電話、撮像装置であってもよいし、タブレット、スマートフォンなどの携帯端末であってもよいし、ゲーム機器であってもよいし、カーナビゲーションシステムなどの車載端末であってもよい。
【００１１】
ＳＳＤ３は、ホスト２として機能する情報処理装置の外部記憶装置として使用され得る。ＳＳＤ３は、情報処理装置に内蔵されてもよいし、情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
ホスト２とＳＳＤ３との間の通信には、ＮＶＭ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）（登録商標）プロトコル、またはＳｅｒｉａｌ  ＡＴＡ（ＳＡＴＡ）プロトコルなどが使用される。
【００１２】
ＳＳＤ３は、コントローラ４、および不揮発性メモリ（不揮発性半導体メモリ）として動作するＮＡＮＤ型フラッシュメモリ５を備える。ＮＡＮＤ型フラッシュメモリ５は、限定されないが、複数のＮＡＮＤ型フラッシュメモリチップを含んでいてもよい。ＮＡＮＤ型フラッシュメモリ５は、２次元構造のフラッシュメモリであってもよいし、３次元構造のフラッシュメモリであってもよい。
【００１３】
ＮＡＮＤ型フラッシュメモリ５は、ユーザデータ７と、多段マッピングテーブル（ｍｕｌｔｉ−ｌｅｖｅｌ  ｍａｐｐｉｎｇ  ｔａｂｌｅ）８とを格納するために使用される。
多段マッピングテーブル８は、ホスト２によって指定される論理アドレスそれぞれとＮＡＮＤ型フラッシュメモリ５の物理アドレスそれぞれとの間のマッピングを管理するための多段論理物理アドレス変換テーブルである（ｍｕｌｔｉ−ｌｅｖｅｌ  ｌｏｇｉｃａｌ−ｔｏ−ｐｈｙｓｉｃａｌ  ａｄｄｒｅｓｓ  ｔｒａｎｓｌａｔｉｏｎ  ｔａｂｌｅ）である。
【００１４】
多段マッピングテーブル８は階層構造を有するマッピングテーブルであり、階層化された複数のテーブルを含む。多段マッピングテーブル８の階層レベルの数、つまり多段マッピングテーブル８に含まれるテーブルの数は、限定されないが、２つであってもよいし、３つであってもよいし、４つ以上であってもよい。つまり、多段マッピングテーブル８は複数の階層レベルに対応する複数のテーブルを含む。各階層レベルのテーブルは複数のアドレス変換データ部分を含む。各階層レベルのテーブルに含まれる複数のアドレス変換データ部分の各々は、その階層レベルに応じた論理アドレス範囲をカバーする。
【００１５】
図１では、多段マッピングテーブル８に含まれるテーブルの数が３つである場合が例示されている。この場合、多段マッピングテーブル８は、下位テーブル８１、上位テーブル８２、および最上位テーブル８３を含む。
コントローラ４は、多段マッピングテーブル８を使用して、論理アドレスそれぞれとこれら論理アドレスそれぞれに対応するユーザデータが格納されているＮＡＮＤ型フラッシュメモリ５の物理アドレスそれぞれとの間の対応関係を所定管理サイズ単位で管理する。下位テーブル８１は、ユーザデータが書き込まれているＮＡＮＤ型フラッシュメモリ５内の物理アドレスを管理するために使用される。上位テーブル８２は、下位テーブル８１に含まれるアドレス変換データ部分それぞれが書き込まれているＮＡＮＤ型フラッシュメモリ５内の物理アドレスを管理するために使用される。最上位テーブル８３は、上位テーブル８２に含まれるアドレス変換データ部分それぞれが書き込まれているＮＡＮＤ型フラッシュメモリ５内の物理アドレスを管理するために使用される。
【００１６】
論理アドレスとしては、通常、論理ブロックアドレス（ＬＢＡ）が使用される。本実施形態では、ホスト２から受信した書込み要求（ライトコマンド）に応じてＮＡＮＤ型フラッシュメモリ５へ書き込まれるデータをユーザデータという。
ＮＡＮＤ型フラッシュメモリ５は、メモリセルアレイを有する１以上のＮＡＮＤ型フラッシュメモリチップを有する。メモリセルアレイは、マトリクス状に配列された複数のメモリセルを有する。ＮＡＮＤ型フラッシュメモリ５のメモリセルアレイは、図２に示されているように、複数のブロックＢ０〜Ｂｊ−１を含む。ブロックＢ０〜Ｂｊ−１は、消去動作の単位として機能する。つまり、ブロックＢ０〜Ｂｊ−１の各々は、データを消去する単位である。
【００１７】
ブロックＢ０〜Ｂｊ−１の各々は、ページＰ０、Ｐ１、…Ｐｋ−１を含む。各ページは、同一ワード線に接続された複数のメモリセルを含む。ＮＡＮＤ型フラッシュメモリ５においては、データのリードおよびデータのライトはページ単位で実行される。つまり、ページＰ０、Ｐ１、…Ｐｋ−１の各々は、データをリードおよびライトする単位である。
【００１８】
図１において、コントローラ４は、ＮＡＮＤ型フラッシュメモリ５に電気的に接続されており、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたメモリコントローラとして動作する。このコントローラ４は、Ｓｙｓｔｅｍ−ｏｎ−ａ−ｃｈｉｐ（ＳｏＣ）のような回路によって実現されてもよい。
【００１９】
ＳＳＤ３は、さらに、ランダムアクセスメモリ（ＲＡＭ）６を含んでいてもよい。このＲＡＭ６はダイナミックＲＡＭ（ＤＲＡＭ）であってもよいし、スタティックＲＡＭ（ＳＲＡＭ）であってもよい。ＲＡＭ６がＳＲＡＭである場合には、ＲＡＭ６はコントローラ４に内蔵されていてもよい。
【００２０】
コントローラ４は、ホスト２からライト要求（ライトコマンド）およびリード要求（リードコマンド）のような様々な要求を受信し、受信したライト要求またはリード要求に応じて、ホスト２とＲＡＭ６との間のデータ転送、およびＲＡＭ６とＮＡＮＤ型フラッシュメモリ５との間のデータ転送を行う。
【００２１】
ＲＡＭ６は、ホスト２から受信したデータ、およびＮＡＮＤ型フラッシュメモリ５から読み出したデータを一時的に格納する領域（バッファ）として使用される。さらに、ＲＡＭ６はＳＳＤ３の内部処理用の作業領域としても使用される。
なお、ＳＳＤ３は、ホスト２によって提供されるホストメモリ上の領域（デバイス使用領域）を使用してもよいし、このデバイス使用領域とＲＡＭ６の両方を使用してもよい。デバイス使用領域は、ＨＭＢ（Ｈｏｓｔ  Ｍａｎａｇｅｄ  Ｂｕｆｆｅｒ）であってもよい。
【００２２】
ホスト２から受信されるライト要求およびリード要求の各々には、論理アドレス、データ長、およびデータ属性などが含まれる。ライト要求に含まれる論理アドレスはデータが書き込まれるべき論理アドレス空間内の位置を指定し、リード要求に含まれる論理アドレスはデータが読み出されるべき論理アドレス空間内の位置を指定する。データ長は、書き込むべきデータ（または読み出すべきデータ）の長さを示す。
【００２３】
コントローラ４がライト要求をホスト２から受信した場合、コントローラ４は、ホスト２から転送されるデータをＲＡＭ６に一時的に格納する。そして、コントローラ４は、このデータをＮＡＮＤ型フラッシュメモリ５内の利用可能な物理記憶位置に書き込む。コントローラ４がリード要求をホスト２から受信した場合、コントローラ４は、受信したリード要求によって指定された論理アドレスに対応するデータをＮＡＮＤ型フラッシュメモリ５から読み出す。そして、コントローラ４は、この読み出したデータをＲＡＭ６に一時的に格納し、そしてこの読み出したデータをホスト２に転送する。
【００２４】
コントローラ４は、ＮＡＮＤ型フラッシュメモリ５のデータ管理とＮＡＮＤ型フラッシュメモリ５のブロック管理とを実行するように構成されたフラッシュトランスレーション層（ＦＴＬ）として機能し得る。
データ管理には、（１）論理アドレスそれぞれと物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、（２）ＮＡＮＤ型フラッシュメモリ５の制約（例えば、ページ単位のリード／ライト動作とブロック単位の消去動作）とを隠蔽するための処理、等が含まれる。本実施形態では、論理アドレスと物理アドレスとの間のマッピングの管理は、論理物理アドレス変換のための多段マッピングテーブル８を用いて実行される。
【００２５】
ある論理アドレスに対応する物理アドレスは、この論理アドレスに対応するデータが実際に書き込まれたＮＡＮＤ型フラッシュメモリ５内の物理記憶位置を示す。
ページへのデータの書き込みは、１消去サイクル当たり１回のみ可能である。このため、コントローラ４は、ある論理アドレスに対応する更新データを、この論理アドレスに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ４は、多段マッピングテーブル８を更新して、この論理アドレスに、この別の物理記憶位置を示す物理アドレスを関連付ける。
【００２６】
いま、図３に示すように、以下の３つの書き込み動作を行った場合を想定する。
（１）論理アドレス０ｘ１００に１２ＫｉＢのデータを書き込み
（２）論理アドレス０ｘ１０３に４ＫｉＢのデータを書き込み
（３）論理アドレス０ｘ１０１に４ＫｉＢのデータを書き込み（上書き）
（１）の書き込み動作においては、コントローラ４は、例えば、物理アドレス０ｘ０００〜０ｘ００２に対応するＮＡＮＤ型フラッシュメモリ５の物理記憶位置に１２ＫｉＢのデータを書き込む。
【００２７】
（２）の書き込み動作においては、コントローラ４は、例えば、物理アドレス０ｘ００３に対応するＮＡＮＤ型フラッシュメモリ５の物理記憶位置に４ＫｉＢのデータを書き込む。
（３）の書き込み動作においては、コントローラ４は、物理アドレス０ｘ００１ではなく、例えば、物理アドレス０ｘ００４に対応するＮＡＮＤ型フラッシュメモリ５の物理記憶位置に４ＫｉＢのデータを書き込む。
【００２８】
したがって、ホスト２によって指定された論理アドレスと、ホスト２から受け取ったデータが実際に書き込まれたＮＡＮＤ型フラッシュメモリ５の物理アドレスとを対応付けるマッピングテーブルが必要となる。このマッピングテーブルは、図４に示すように、論理アドレスそれぞれと物理アドレスそれぞれとの間の対応関係（マッピング情報）を管理する。論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングは、例えば、５１２バイト単位または４ＫｉＢ単位で管理される。
【００２９】
このマッピング情報をＳＳＤ３のパワーサイクルを跨いで維持できるようにするために、マッピングテーブル自体もＮＡＮＤ型フラッシュメモリ５に書き込むことが必要である。
しかし、マッピングテーブルの一部が更新される度にこのマッピングテーブル全体をＮＡＮＤ型フラッシュメモリ５に書き込むのはＳＳＤ３の性能および寿命の面で効率的ではない。
【００３０】
また、マッピングテーブルは巨大であり、ＲＡＭ６にマッピングテーブル全体を配置するためには大容量のＲＡＭを用意することが必要になってしまう。
このため、本実施形態では、階層構造を有するマッピングテーブルを使用し、マッピングテーブルの更新部分だけをＮＡＮＤ型フラッシュメモリ５に書き込むことを可能にしている。上述の多段マッピングテーブル８がこの階層構造を有するマッピングテーブルである。
【００３１】
図５に示されているように、多段マッピングテーブル８の下位テーブル８１は、セグメントと称される複数のデータ部分（アドレス変換データ部分）＃０、＃１、＃２、…＃１２７、…、を含む。下位テーブル８１の一つのセグメント（一つのアドレス変換データ部分）は、例えば、連続する１２８個のマッピング情報の集合である。換言すれば、下位テーブル８１の各セグメント、つまり下位テーブル８１の各アドレス変換データ部分は、例えば４ＫｉＢの刻みで連続する１２８個の論理アドレスにそれぞれ対応する１２８個の物理アドレスをマッピング情報として含む。以下では、下位テーブル８１に属するセグメントは下位テーブルセグメントとしても参照される。
【００３２】
多段マッピングテーブル８の上位テーブル８２も、セグメントと称される複数のデータ部分（アドレス変換データ部分）＃０、＃１、＃２、…を含む。上位テーブル８２の一つのセグメント（一つのアドレス変換データ部分）は、例えば、連続する１２８個の下位テーブルセグメントそれぞれが格納されているＮＡＮＤ型フラッシュメモリ５内の１２８個の位置（物理記憶位置）を示す。上位テーブル８２の各セグメントが１２８個の下位テーブルセグメントの位置を示すので、上位テーブル８２に含まれるセグメントの数は下位テーブルセグメントの数の１／１２８である。以下では、上位テーブル８２のセグメントは上位テーブルセグメントとしても参照される。
【００３３】
多段マッピングテーブル８の最上位テーブル８３は、複数のポインタを含む。これらポインタは、全ての上位テーブルセグメントそれぞれが格納されているＮＡＮＤ型フラッシュメモリ５内の位置（物理記憶位置）を示す。最上位テーブル８３に含まれるポインタの総数は、上位テーブルセグメントの数と同じである。
【００３４】
図６は、多段マッピングテーブル８に含まれる階層化された複数のテーブルの構成例を示す。
下位テーブル８１は、ホスト２から受信されたデータが書き込まれたＮＡＮＤ型フラッシュメモリ５内の物理アドレスを管理するためのテーブルである。この下位テーブル８１は、上述したように複数のセグメント（アドレス変換データ部分＃０、アドレス変換データ部分＃１、…、アドレス変換データ部分＃１２８、…）を含んでいる。換言すれば、下位テーブル８１は、これら複数のセグメント（アドレス変換データ部分＃０、アドレス変換データ部分＃１、…、アドレス変換データ部分＃１２８、…）に分割されている。これら各アドレス変換データ部分のサイズは、例えば、テーブルキャッシュ６１の一つのキャッシュライン（キャッシュエントリ）のサイズに一致する。
【００３５】
下位テーブル８１の各セグメントに含まれる物理アドレスの数は、上述したように、例えば１２８個である。ホスト２によって指定される論理アドレス（ＬＢＡ）によってアドレス指定される最小単位が５１２バイトで、且つ論理アドレス（ＬＢＡ）それぞれと物理アドレスそれぞれとの対応が４ＫｉＢ単位で管理されるケースにおいては、下位テーブル８１の一つのセグメントによってカバーされる論理アドレスの範囲は、１２８×８個のＬＢＡに相当する。
【００３６】
上位テーブル８２は、下位テーブル８１のセグメントそれぞれが書き込まれたＮＡＮＤ型フラッシュメモリ５内の物理アドレスを管理するためのテーブルである。上位テーブル８２も、各々が１キャッシュライン分のサイズを有する複数のセグメント（アドレス変換データ部分＃０、アドレス変換データ部分＃１、…、アドレス変換データ部分＃１２８、…）を含む。上位テーブル８２の各セグメントに含まれる物理アドレスの数は、上述したように、例えば１２８個である。この場合、上位テーブル８２の一つのセグメントによってカバーされる論理アドレスの範囲は、１２８×８×１２８個のＬＢＡに相当する。
【００３７】
上位テーブル８２の複数のセグメント（アドレス変換データ部分＃０、アドレス変換データ部分＃１、…、アドレス変換データ部分＃１２８、…）それぞれが格納されているＮＡＮＤ型フラッシュメモリ５内の物理アドレスは、最上位テーブル８３内の複数のポインタによってそれぞれ管理される。
【００３８】
最上位テーブル８３全体は、例えば、ＳＳＤ３が電源供給を受けたときにＮＡＮＤ型フラッシュメモリ５からＲＡＭ６にロードされてもよく、以降、ＲＡＭ６上に常時維持されてもよい。
次に、図６の多段マッピングテーブル８を使用して実行されるアドレス解決処理（論理物理アドレス変換）の概要を説明する。ここでは、理解しやすいように、まず、テーブルキャッシュ６１を使用しない場合のアドレス解決処理を説明する。
【００３９】
最初に、ホスト２によって指定された特定の論理アドレス内の上位ビットフィールド（例えば、ビット４７〜ビット１７）を使用して最上位テーブル８３内のポインタの一つが特定され、これによって上位テーブル８２内の特定のセグメントの物理アドレス（ＮＡＮＤ型フラッシュメモリ５上の位置）が得られる。この物理アドレスに基づいて、上位テーブル８２内のこの特定のセグメント（特定の上位テーブルセグメント）がＮＡＮＤ型フラッシュメモリ５からリードされる。この特定の上位テーブルセグメントには、この特定の上位テーブルセグメントによってカバーされる論理アドレス範囲内に属する１２８個の下位テーブルセグメントそれぞれの物理アドレス（ＮＡＮＤ型フラッシュメモリ５上の位置）が格納されている。
【００４０】
そして、この特定の論理アドレス内の中位ビットフィールド（例えば、ビット１６〜ビット１０）を使用してこの特定の上位テーブルセグメントが参照され、これによってこの特定の上位テーブルセグメントから一つのエントリが選択される。この選択されたエントリには、特定の下位テーブルセグメントの物理アドレス（ＮＡＮＤ型フラッシュメモリ５上の位置）が格納されている。この物理アドレスに基づいて、この特定の下位テーブルセグメントがＮＡＮＤ型フラッシュメモリ５からリードされる。
【００４１】
次いで、この特定の論理アドレス内の下位ビット部（例えば、ビット９〜ビット３）を使用してこの特定の下位テーブルセグメントが参照され、これによってこの特定の下位テーブルセグメントから一つのエントリが選択される。この選択されたエントリには、この特定の論理アドレスに対応するユーザデータが書き込まれている物理アドレス（ＮＡＮＤ型フラッシュメモリ５上の位置）が格納されている。
【００４２】
なお、テーブルキャッシュ６１を使用してアドレス解決を行う場合においては、例えば、下位テーブル、上位テーブル、という順序でテーブルキャッシュ６１が検索される。
すなわち、まず、ホスト２によって指定された特定の論理アドレスに基づいて、この特定の論理アドレスに対応する目的の下位テーブルセグメントがテーブルキャッシュ６１に存在するか否かが判定される。目的の下位テーブルセグメントとは、この特定の論理アドレスによって指定される論理アドレス空間内の特定の位置をカバーしている下位テーブルセグメントを意味する。
【００４３】
目的の下位テーブルセグメントがテーブルキャッシュ６１に存在するならば、この特定の論理アドレス内の下位ビット部（例えば、ビット９〜ビット３）を使用してこの目的の下位テーブルセグメントが参照され、これによってこの特定の論理アドレスに対応するユーザデータが格納されている物理アドレス（ＮＡＮＤ型フラッシュメモリ５上の位置）が取得される。
【００４４】
目的の下位テーブルセグメントがテーブルキャッシュ６１に存在しないならば、この特定の論理アドレスに基づいて、この特定の論理アドレスに対応する目的の上位テーブルセグメントがテーブルキャッシュ６１に存在するか否かが判定される。目的の上位テーブルセグメントとは、そのカバー範囲が目的の下位テーブルセグメントによってカバーされる論理アドレス範囲を含む上位テーブルセグメントである。目的の上位テーブルセグメントは、目的の下位テーブルセグメントの物理アドレスを含むマッピング情報を含んでいる。
【００４５】
目的の上位テーブルセグメントがテーブルキャッシュ６１に存在するならば、この上位テーブルセグメントから、目的の下位テーブルセグメントが格納されている物理アドレス（ＮＡＮＤ型フラッシュメモリ５上の位置）を取得することができる。そして、この目的の下位テーブルセグメントがＮＡＮＤ型フラッシュメモリ５からリードされ、テーブルキャッシュ６１に格納される。
【００４６】
目的の上位テーブルセグメントがテーブルキャッシュ６１に存在しないならば、この特定の論理アドレスに基づいて最上位テーブル８３が参照され、これによってこの目的の上位テーブルセグメントの物理アドレス（ＮＡＮＤ型フラッシュメモリ５上の位置）が取得される。そして、この目的の上位テーブルセグメントがＮＡＮＤ型フラッシュメモリ５からリードされ、テーブルキャッシュ６１に格納される。
【００４７】
テーブルキャッシュ６１に格納されたこの目的の上位テーブルセグメントから、目的の下位テーブルセグメントが格納されている物理アドレス（ＮＡＮＤ型フラッシュメモリ５上の位置）が取得される。そして、この目的の下位テーブルセグメントがＮＡＮＤ型フラッシュメモリ５からリードされ、テーブルキャッシュ６１に格納される。
【００４８】
テーブルキャッシュ６１に格納されたこの目的の下位テーブルセグメントから、ユーザデータが格納されている物理アドレス（ＮＡＮＤ型フラッシュメモリ５上の位置）が取得され、そしてこのユーザデータがＮＡＮＤ型フラッシュメモリ５からリードされる。
【００４９】
このように、論理物理アドレス変換のためのアドレス解決処理においては、下位テーブル、上位テーブルという順序で、テーブルキャッシュ６１が検索される。
次に、図１に示されているコントローラ４のハードウェア構成について説明する。
コントローラ４は、ＲＡＭ６のメモリ領域の一部を、多段マッピングテーブル８の内容の一部をキャッシュするテーブルキャッシュ６１として使用する。全ての階層レベル、つまり下位テーブル８１、上位テーブル８２、および最上位テーブル８３それぞれをテーブルキャッシュ６１に部分的にキャッシュしてもよいが、以下では、下位テーブル８１および上位テーブル８２を部分的にテーブルキャッシュ６１にキャッシュする場合を想定する。この場合、最上位テーブル８３はＲＡＭ６上にロードされ、テーブルキャッシュ６１にはキャッシュされない。
【００５０】
コントローラ４は、ＮＡＮＤ型フラッシュメモリ５およびテーブルキャッシュ６１を制御し、ＮＡＮＤ型フラッシュメモリ５から読み出されたセグメント（アドレス変換データ部分）をテーブルキャッシュ６１にロードする動作、テーブルキャッシュ６１に格納されているセグメントを別のセグメントに置き換える動作、等を実行する。さらに、コントローラ４は、テーブルキャッシュ６１に格納されている階層レベルそれぞれに対応するセグメント（ここでは、下位テーブルセグメント、上位テーブルセグメント）を参照することによって、論理物理アドレス変換のためのアドレス解決処理と、論理アドレスに対応する物理アドレスを更新するアドレス更新処理とを実行する。なお、テーブルキャッシュ６１を制御するための全ての動作は、専用ハードウェア（ＨＷ）１５内のキャッシュコントローラ１５１によって実行されてもよい。この場合、キャッシュコントローラ１５１は、上述のアドレス解決処理においては、目的の下位テーブルセグメントまたは目的の上位テーブルセグメントを求めてテーブルキャッシュ６１を検索する処理、および目的の下位テーブルセグメントまたは目的の上位テーブルセグメントをＮＡＮＤ型フラッシュメモリ５からテーブルキャッシュ６１に転送してマッピング情報を取得する処理、等を実行してもよい。さらに、アドレス更新処理においては、キャッシュコントローラ１５１は、更新対象セグメントを求めてテーブルキャッシュ６１を検索する処理、更新対象セグメントのマッピング情報をテーブルキャッシュ６１上で更新する処理、更新済みセグメントをＮＡＮＤ型フラッシュメモリ５に書き込むフラッシュ処理、等を実行してもよい。
【００５１】
コントローラ４は、図１に示されているように、ホストインタフェース１１、ＣＰＵ１２、ＲＡＭインタフェース１３、バックエンド部１４、および専用ハードウェア（ＨＷ）１５等を含む。これらホストインタフェース１１、ＣＰＵ１２、ＲＡＭインタフェース１３、バックエンド部１４、および専用ハードウェア（ＨＷ）１５は、バス１０を介して相互接続される。
【００５２】
ホストインタフェース１１は、ホスト２からライト要求、リード要求、等の様々な要求を受信する回路として機能する。
ＣＰＵ１２は、ホストインタフェース１１、ＲＡＭインタフェース１３、バックエンド部１４、および専用ハードウェア（ＨＷ）１５等の動作を制御するように構成されたプロセッサである。ＣＰＵ１２は、図示しないＲＯＭ等に格納されている制御プログラム（ファームウェア：ＦＷ）を実行することによって様々な処理を行う。このＣＰＵ１２は、上述のＦＴＬの処理と、ホスト２からの様々なコマンドを処理するためのコマンド処理等を実行してもよい。ＣＰＵ１２の動作は、ＣＰＵ１２によって実行されるファームウェアによって制御される。なお、上述のコマンド処理の一部または全部は、専用ハードウェア１５によって実行してもよい。
【００５３】
ＲＡＭインタフェース１３は、ＲＡＭ６を制御する制御回路として機能する。バックエンド部１４は、符号化／復号化部１４１と、ＮＡＮＤインタフェース１４２とを含む。符号化／復号化部１４１は、例えば、エラー訂正コード（ＥＣＣ）エンコーダおよびＥＣＣデコーダとして機能し得る。ＮＡＮＤ型フラッシュメモリ５にデータを書き込むべき時、符号化／復号化部１４１は、書き込むべきデータをエンコード（ＥＣＣエンコード）することによってこのデータにエラー訂正コード（ＥＣＣ）を冗長コードとして付加する。ＮＡＮＤ型フラッシュメモリ５からデータがリードされた時、符号化／復号化部１４１は、リードされたデータに付加されたＥＣＣを使用して、このデータのエラー訂正を行う（ＥＣＣデコード）。
【００５４】
ＮＡＮＤインタフェース１４２は、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたＮＡＮＤ制御回路として機能する。ＮＡＮＤインタフェース１４２は、複数のチャンネルを介してＮＡＮＤ型フラッシュメモリ５内の複数のチップに接続されてもよい。
【００５５】
専用ハードウェア１５は、キャッシュコントローラ１５１、アクセス履歴情報管理部１５２、および優先度調整部１５３を含む。なお、これらキャッシュコントローラ１５１、アクセス履歴情報管理部１５２、および優先度調整部１５３は必ずしもハードウェアによって実現されていなくてもよく、これらキャッシュコントローラ１５１、アクセス履歴情報管理部１５２、および優先度調整部１５３のいずれか一つまたは全てはＣＰＵ１２によって実行されるファームウェアによって実現されてもよい。
【００５６】
キャッシュコントローラ１５１は、参照または更新されるべきアクセス対象のマッピング情報を含むセグメント（アドレス変換データ部分）を求めてテーブルキャッシュ６１を検索し、アクセス対象のマッピング情報を含むセグメントがテーブルキャッシュ６１に存在するか否かを判定する。さらに、キャッシュコントローラ１５１は、テーブルキャッシュ６１とＮＡＮＤ型フラッシュメモリ５との間でのセグメントの転送を行う。
【００５７】
キャッシュコントローラ１５１は、テーブルキャッシュ６１内の上位テーブルセグメントに対する参照の偏り度合いが弱い場合、上位テーブルセグメントそれぞれを下位テーブルセグメントそれぞれよりも優先してテーブルキャッシュ６１にキャッシュする動作を実行するように構成されている。
【００５８】
例えば、ホスト２が、多数の上位テーブルセグメントに跨がるような広い論理アドレス範囲をランダムにアクセスするようなケース（広域アクセス）においては、テーブルキャッシュ６１上の多数の上位テーブルセグメントが参照される。この場合、テーブルキャッシュ６１上の各下位テーブルセグメントはほとんどヒットしない。各下位テーブルセグメントによってカバーされる論理アドレス範囲は狭いからである。一方、ホスト２が、特定の一つの上位テーブルセグメントによってカバーされる論理アドレス範囲のみをアクセスするようなケース（狭域アクセス）や、特定の幾つかの上位テーブルセグメントによってカバーされる論理アドレス範囲を交互にアクセスするケース（狭域アクセス）においては、テーブルキャッシュ６１上のある限られた数の上位テーブルセグメントの各々は比較的高い頻度で参照される。
【００５９】
つまり、ホスト２が狭域アクセスを行う場合には、テーブルキャッシュ６１上の上位テーブルセグメントに対する参照の偏り度合いが強くなる。
一方、ホスト２が広域アクセスを行う場合には、アクセス先は多数の上位テーブルセグメントに分散される。このため、テーブルキャッシュ６１上の上位テーブルセグメントに対する参照の偏り度合いは弱くなる。
【００６０】
したがって、本実施形態では、テーブルキャッシュ６１に複数の階層レベルに対応するセグメントそれぞれをキャッシュするケースにおいては、テーブルキャッシュ６１に格納されているセグメントに対する、階層レベルごとの参照の偏り度合いに基づいて、階層レベルごとに優先度が設定される。そして、高い優先度を有する階層レベルのセグメントそれぞれは低い優先度を有する階層レベルのセグメントそれぞれよりも優先してテーブルキャッシュ６１にキャッシュされる。この場合、例えば、キャッシュされているセグメントに対する参照の偏り度合いが階層レベル毎に求められる。そして、求められた階層レベルごとの参照の偏り度合いに基づいて、階層レベルごとに優先度が設定される。
【００６１】
上述のように、テーブルキャッシュ６１に上位テーブルセグメントと下位テーブルセグメントをキャッシュするケースにおいては、テーブルキャッシュ６１に格納されている上位テーブルセグメントに対する参照の偏り度合いに基づいて、上位テーブル８２に対応する階層レベルの優先度が設定される。広域アクセス時には、キャッシュされている上位テーブルセグメントに対する参照の偏り度合いは弱くなる。狭域アクセス時には、キャッシュされている上位テーブルセグメントに対する参照の偏り度合いは強くなる。
【００６２】
すなわち、テーブルキャッシュ６１に格納されている上位テーブルセグメントに対する参照の偏り度合いが弱い場合には、ホスト２の現在のアクセス傾向が広域アクセスであると推定される。そして、上位テーブル８２に対応する階層レベルの優先度が上げられ、上位テーブルセグメントを下位テーブルセグメントよりも優先してテーブルキャッシュ６１にキャッシュするための上位テーブル優先モードがイネーブルとなる。これにより、広域アクセス時のアドレス解決処理およびアドレス更新処理のために必要なより多くの上位テーブルセグメントをテーブルキャッシュ６１に載せることが可能となり、テーブルキャッシュ６１のヒット率を向上させることができる。
【００６３】
一方、テーブルキャッシュ６１に格納されている上位テーブルセグメントに対する参照の偏り度合いが強い場合には、ホスト２の現在のアクセス傾向が狭域アクセスであると推定される。そして、上位テーブル８２に対応する階層レベルの優先度が下げられ、上位テーブル優先モードはディセーブルとなる。これにより、狭域アクセス時のアドレス解決処理およびアドレス更新処理のために必要なより多くの下位テーブルセグメントをテーブルキャッシュ６１に載せることが可能となり、テーブルキャッシュ６１のヒット率を向上させることができる。
【００６４】
アクセス履歴情報管理部１５２は、ホスト２のアクセス傾向を類推するために必要なアクセス履歴情報を蓄積する。本実施形態では、キャッシュされている上位テーブルセグメントに対する参照の偏り度合いを示す値がアクセス履歴情報として蓄積される。
優先度調整部１５３は、アクセス履歴情報に基づいて、下位テーブル８１および上位テーブル８２それぞれに対応する優先度を決定する。例えば、キャッシュされている上位テーブルセグメントに対する参照の偏り度合いが閾値を下回る場合には（参照の偏り度合いが弱い）、優先度調整部１５３は、上位テーブル８２の優先度を高く設定し、これによって上位テーブル優先モードをイネーブルにする。もし上位テーブル優先モードがイネーブルである状態において、キャッシュされている上位テーブルセグメントに対する参照の偏り度合いが閾値以上になったならば（参照の偏り度合いが強い）、優先度調整部１５３は、上位テーブル８２の優先度を下げ、これによって上位テーブル優先モードをディセーブルに変更する。
【００６５】
次に、テーブルキャッシュ６１の構成について説明する。
テーブルキャッシュ６１はフルアソシアティブ・キャッシュによって実現されてもよいし、セットアソシアティブ・キャッシュによって実現されてもよい。
図７は、フルアソシアティブ・キャッシュとして実現された場合のテーブルキャッシュ６１の構成例を示す。
【００６６】
テーブルキャッシュ６１は、キャッシュ本体と、キャッシュ管理テーブルとを含む。キャッシュ本体は多段マッピングテーブル８の下位テーブル８１および上位テーブル８２の双方を部分的にキャッシュするために使用される。キャッシュ管理テーブルは、キャッシュ本体を管理するために使用される。キャッシュ管理テーブルとキャッシュ本体は一体化されていてもよいし、それぞれ別個に実現されていてもよい。
【００６７】
キャッシュ本体は複数のキャッシュラインＬ０〜Ｌｍ−１を含む。キャッシュラインＬ０〜Ｌｍ−１の各々は、下位テーブル８１または上位テーブル８２のセグメント（１２８個のマッピング情報）を格納するために使用される。各キャッシュラインのサイズは、一つのセグメントのサイズと同じである。このため、ＮＡＮＤ型フラッシュメモリ５からテーブルキャッシュ６１へのマッピング情報の転送はセグメントの単位で実行される。同様に、テーブルキャッシュ６１から置換対象のデータを追い出して新たなマッピング情報に置き換える置換処理も、セグメントの単位で実行される。
【００６８】
キャッシュ管理テーブルはキャッシュラインＬ０〜Ｌｍ−１それぞれに対応するエントリを含む。各エントリは、対応するキャッシュラインの管理情報として、Ｔａｇ、Ｔｙｐｅ、Ｈｉｓｔｏｒｙ、Ｆｌａｇｓを保持する。
Ｔａｇは対応するキャッシュラインにどのセグメントが格納されているかを示し、テーブルキャッシュ６１のヒット／ミス判定に使用される。Ｔｙｐｅは、対応するキャッシュラインに格納されているセグメントが属する階層レベル（ここでは、下位テーブル／上位テーブル）を示す。Ｈｉｓｔｏｒｙは、最も長い間使用されなかったキャッシュラインを追い出すＬＲＵ（ｌｅａｓｔ  ｒｅｃｅｎｔｌｙ  ｕｓｅｄ）ポリシー用の優先順位情報（ＬＲＵ順位）を示す。なお、本実施形態に適用可能な置換アルゴリズムはＬＲＵ置換アルゴリズムのみに限定されず、他の様々な置換アルゴリズムが適用可能である。Ｆｌａｇｓは、対応するキャッシュラインを管理するための様々なフラグを含む。
【００６９】
例えば、Ｆｌａｇｓは、バリッドフラグ、ロックフラグ、リフィル中フラグ、ダーティーフラグ、等を含んでいてもよい。
バリッドフラグは、対応するキャッシュラインが有効な（参照してよい）セグメントを格納しているか否かを示す。ロックフラグは、対応するキャッシュラインがテーブルキャッシュ６１から追い出し可能か否かを示す。リフィル中フラグは、対応するキャッシュラインがリフィル中であるか否かを示す。ダーティーフラグは、対応するキャッシュラインが更新済みであるか否かを示す。
【００７０】
テーブルキャッシュ６１からセグメント（アドレス変換データ部分）を追い出す際には、基本的には、全てのキャッシュラインの内、ＬＲＵ置換アルゴリズムなどによって最も優先度が低いと判断されたキャッシュラインに置かれているセグメント（アドレス変換データ部分）が置き換え対象として選択される。
【００７１】
図８は、図７のテーブルキャッシュ６１内の下位テーブルセグメント（アドレス変換データ部分）を参照するために使用されるタグフィールドと、図７のテーブルキャッシュ６１内の上位テーブルセグメントを参照するために使用されるタグフィールドとを示す。
【００７２】
以下では、ホスト２によって指定される論理アドレス（ＬＢＡ）によってアドレス指定される最小単位が５１２バイトであり、且つ論理アドレスそれぞれと物理アドレスそれぞれとの対応が４ＫｉＢ単位で管理されるケースを想定する。
ホスト２によって指定される論理アドレス（ＬＢＡ）の下位３ビット（ビット２〜ビット０）は４ＫｉＢ内のオフセットとして使用される。
【００７３】
論理アドレス（ＬＢＡ）のビット９〜ビット３は、各下位テーブルセグメント内の１２８個のマッピング情報の一つを特定するために使用される。
論理アドレス（ＬＢＡ）のビット４７〜ビット１０は下位テーブル用のセグメント番号を表す。下位テーブル用のセグメント番号は、論理アドレス（ＬＢＡ）のビット４７〜ビット３によって表される論理アドレス空間を「下位テーブルセグメントによってカバーされる論理アドレス範囲」ごとに区切り、これらアドレス範囲に対して先頭から振った通し番号である。つまり、論理アドレス空間は、複数の下位テーブルセグメントで管理される。これら下位テーブルセグメントに付与されたシーケンシャル番号が下位テーブル用のセグメント番号である。論理アドレス（ＬＢＡ）のビット４７〜ビット１０は、ある下位テーブルセグメントのセグメント番号を表す。この論理アドレス（ＬＢＡ）のビット４７〜ビット１０は、図７のテーブルキャッシュ６１から目的の下位テーブルセグメントを検索するためのタグフィールドとして使用される。
【００７４】
論理アドレス（ＬＢＡ）のビット１６〜ビット１０は、各上位テーブルセグメント内の１２８個のマッピング情報の一つを特定するために使用される。
論理アドレス（ＬＢＡ）のビット４７〜ビット１１は上位テーブル用のセグメント番号を表す。上位テーブル用のセグメント番号は、論理アドレス（ＬＢＡ）のビット４７〜ビット３によって表される論理アドレス空間を「上位テーブルセグメントのカバーするアドレス範囲」ごとに区切り、これらアドレス範囲に対して先頭から振った通し番号である。論理アドレス（ＬＢＡ）のビット４７〜ビット１７は、ある上位テーブルセグメントのセグメント番号を表す。この論理アドレス（ＬＢＡ）のビット４７〜ビット１７は、図７のテーブルキャッシュ６１から目的の上位テーブルセグメントを検索するためのタグフィールドとして使用される。
【００７５】
図９は、セットアソシアティブ・キャッシュとして実現された場合のテーブルキャッシュ６１の構成例を示す。
図９では、テーブルキャッシュ６１が８つのインデックス（Ｉｎｄｅｘ＃０〜Ｉｎｄｅｘ＃７）を有する４ウェイ・セットアソシアティブ・キャッシュである場合が例示されている。各インデックスにおいて、４つのウェイの各々は、上述のＴａｇ、Ｔｙｐｅ、Ｈｉｓｔｏｒｙ、Ｆｌａｇｓを保持する。４つのウェイの各々は、さらに、実際のセグメント（１２８個のマッピング情報）も格納する。一つのインデックスが４つのキャッシュラインに相当する。なお、図９のテーブルキャッシュ６１の構成においても、キャッシュ管理テーブルとキャッシュ本体とを別々に管理してもよい。
【００７６】
テーブルキャッシュ６１からセグメントを追い出す際には、置き換え候補として選択される一つのインデックスに対応する４つのウェイの内、ＬＲＵ置換アルゴリズムなどによって最も優先度が低いと判断されたウェイに置かれているセグメントが、置き換え対象データとして選択される。
【００７７】
図１０は、図９のテーブルキャッシュ６１内の下位テーブルセグメントを参照するために使用されるタグフィールドと、図９のテーブルキャッシュ６１内の上位テーブルセグメントを参照するために使用されるタグフィールドとを示す。
論理アドレス（ＬＢＡ）のビット４７〜ビット１０は下位テーブル用のセグメント番号を表す。ビット４７〜ビット１０の内の下位３ビット（ビット１２〜ビット１０）は８つのインデックスの一つを選択するために使用され、論理アドレス（ＬＢＡ）のビット４７〜ビット１３は、図９のテーブルキャッシュ６１から目的の下位テーブルセグメントを検索するためのタグフィールドとして使用される。
【００７８】
論理アドレス（ＬＢＡ）のビット４７〜ビット１７は上位テーブル用のセグメント番号を表す。ビット４７〜ビット１７の内の下位３ビット（ビット１９〜ビット１７）は８つのインデックスの一つを選択するために使用され、論理アドレス（ＬＢＡ）のビット４７〜ビット２０は、図９のテーブルキャッシュ６１から目的の上位テーブルセグメントを検索するためのタグフィールドとして使用される。
【００７９】
次に、テーブルキャッシュ６１の利用方法について説明する。
以下では、テーブルキャッシュ６１が４ウェイ・セットアソシアティブ・キャッシュである場合を想定する。
キャッシュコントローラ１５１は、例えば、アドレス解決、アドレス更新、またはフラグ操作を行う場合に、テーブルキャッシュ６１を検索する。
【００８０】
例えば、ホスト２からリード要求を受信した場合、キャッシュコントローラ１５１は、ホスト２から受信されるリード要求によって指定される論理アドレスに対応する物理アドレスを取得するためのアドレス解決処理を行う。この場合、キャッシュコントローラ１５１は、ホスト２から受信されるリード要求によって指定される論理アドレスに対応するマッピング情報を含むセグメント（アドレス変換データ部分）を求めてテーブルキャッシュ６１を検索する。
【００８１】
ホスト２からライト要求を受信した場合、コントローラ４は、ホスト２から受信されたライトデータをＮＡＮＤ型フラッシュメモリ５に書き込む。そして、キャッシュコントローラ１５１は、このライトデータが実際に書き込まれた物理アドレスがライト要求によって指定された論理アドレスにマッピングされるよう対象のマッピング情報を更新するためのアドレス更新処理を行う。この場合も、コントローラ４は、マッピング情報を更新するために、対象のマッピング情報を含むアドレス変換データ部分を求めてテーブルキャッシュ６１を検索する。
【００８２】
アドレス解決処理においては、例えば、下位テーブルセグメント、上位テーブルセグメントという順序で、テーブルキャッシュ６１が検索される。
下位テーブルのセグメントを検索する場合、キャッシュコントローラ１５１は以下の動作を実行する。
まず、キャッシュコントローラ１５１は、ホスト２によって指定された論理アドレスからＩｎｄｅｘとＴａｇフィールドとを算出する。
【００８３】
この場合、Ｉｎｄｅｘは、以下の式で求められる。
Ｉｎｄｅｘ＝［下位テーブルのセグメント番号］ ｍｏｄ ［Ｉｎｄｅｘの数］
Ｔａｇフィールドは、以下の式で求められる。
Ｔａｇフィールド＝［下位テーブルのセグメント番号］ ／ ［Ｉｎｄｅｘの数］
キャッシュコントローラ１５１は、求めたＩｎｄｅｘに属する４つのウェイの内、求めたＴａｇフィールドの値に一致するタグを格納しているウェイを検索する。この検索されたウェイのバリッドフラグがセットされており、且つこの検索されたウェイのＴｙｐｅが求めるセグメントのテーブルタイプ（ここでは、下位テーブル）と一致するならば、キャッシュヒットと判定される。
【００８４】
上位テーブルのセグメントを検索する場合、キャッシュコントローラ１５１は以下の動作を実行する。
まず、キャッシュコントローラ１５１は、ホスト２によって指定された論理アドレスからＩｎｄｅｘとＴａｇフィールドとを算出する。
こ場合、Ｉｎｄｅｘは、以下の式で求められる。
Ｉｎｄｅｘ＝［上位テーブルのセグメント番号］ ｍｏｄ ［Ｉｎｄｅｘの数］
Ｔａｇフィールドは、以下の式で求められる。
Ｔａｇフィールド＝［上位テーブルのセグメント番号］ ／ ［Ｉｎｄｅｘの数］
キャッシュコントローラ１５１は、求めたＩｎｄｅｘに属する４つのウェイの内、求めたＴａｇフィールドの値に一致するタグを格納しているウェイを検索する。この検索されたウェイのバリッドフラグがセットされており、且つこの検索されたウェイのＴｙｐｅが求めるセグメントのテーブルタイプ（ここでは、上位テーブル）と一致するならば、キャッシュヒットと判定される。
【００８５】
図１１は、テーブルキャッシュ６１に適用される置き換え動作の例を示す。
ここでは、テーブルキャッシュ６１が４ウェイ・セットアソシアティブ・キャッシュである場合を想定する。上述したように、通常、置き換え対象データはＬＲＵ置換アルゴリズムなどによって選択される。この場合、最も優先度が低いと判断されたウェイに置かれたセグメントが置き換え対象データとして選択される。図１１では、インデックス＃０の４つのウェイに格納されている４つのセグメントの一つをテーブルキャッシュ６１から追い出す場合が想定されている。ＬＲＵ置換アルゴリズムを使用した場合には、これら４つのウェイに格納されている４つのセグメントの内、最近参照されていないウェイに格納されているセグメントが追い出される。つまり、最終アクセスから最も時間が経過しているウェイが、ＮＡＮＤ型フラッシュメモリ５から読み出された新たなセグメントと置き換えられる。
【００８６】
図１２は、多段マッピングテーブル８の各階層レベル（下位テーブルセグメント、上位テーブルセグメント、最上位テーブルセグメント）によってカバーされる論理アドレスの範囲と、各階層レベルのキャッシュヒットが起きた場合に記憶メディア（ＮＡＮＤ型フラッシュメモリ５）がアクセスされる回数とを示す。ここで、図１２に示されるアクセスの回数は、理想的なアクセスの回数を表している。
【００８７】
例えば、マッピング情報が論理アドレスと物理アドレスとの対応を４ＫｉＢ刻みで管理していて、各下位テーブルセグメントがマッピング情報を１２８個含む場合は、下位テーブルセグメント、つまり下位テーブル８１の一つのアドレス変換データ部分によってカバーされる論理アドレスの範囲は、５１２ＫｉＢ（＝４ＫｉＢ×１２８）である。目的の下位テーブルセグメントがテーブルキャッシュ６１に存在するならば（下位テーブルヒット）、キャッシュコントローラ１５１は、テーブルキャッシュ６１からこの目的の下位テーブルセグメント内のマッピング情報を取得することができるので、この目的の下位テーブルセグメントをＮＡＮＤ型フラッシュメモリ５からリードする必要は無い。したがって、コントローラ４は、キャッシュコントローラ１５１によってテーブルキャッシュ６１内のこの目的の下位テーブルセグメントから取得されたマッピング情報（物理アドレス）を使用して、ユーザデータをＮＡＮＤ型フラッシュメモリ５から即座にリードすることができる。ＮＡＮＤ型フラッシュメモリ５がアクセスされる回数は１回のみである。この１回のアクセスは、ユーザデータをＮＡＮＤ型フラッシュメモリ５からリードするためのアクセスである。
【００８８】
例えば、各下位テーブルセグメントによってカバーされる論理アドレスの範囲が５１２ＫｉＢで、各上位テーブルセグメントが１２８個のマッピング情報を含む場合、上位テーブルセグメント、つまり上位テーブル８２の一つのアドレス変換データ部分によってカバーされる論理アドレスの範囲は、６４ＭｉＢ（＝５１２ＫｉＢ×１２８）である。目的の下位テーブルセグメントがテーブルキャッシュ６１に存在せず（下位テーブルミス）、且つ目的の上位テーブルセグメントがテーブルキャッシュ６１に存在するならば（上位テーブルヒット）、キャッシュコントローラ１５１は、テーブルキャッシュ６１からこの目的の上位テーブルセグメント内のマッピング情報を取得することができるので、この目的の上位テーブルセグメントをＮＡＮＤ型フラッシュメモリ５からリードする必要は無い。したがって、キャッシュコントローラ１５１は、テーブルキャッシュ６１内のこの目的の上位テーブルセグメントから取得したマッピング情報（物理アドレス）を使用して、目的の下位テーブルセグメントをＮＡＮＤ型フラッシュメモリ５からテーブルキャッシュ６１に転送し、テーブルキャッシュ６１に転送された目的の下位テーブルセグメントからマッピング情報を取得する。そして、コントローラ４は、キャッシュコントローラ１５１によって目的の下位テーブルセグメントから取得されたマッピング情報（物理アドレス）を使用して、ユーザデータをＮＡＮＤ型フラッシュメモリ５からリードすることができる。したがって、ＮＡＮＤ型フラッシュメモリ５がアクセスされる回数は２回である。この２回のアクセスは、マッピングテーブル（ここで、下位テーブルセグメント）をＮＡＮＤ型フラッシュメモリ５からリードするための１回のアクセスと、ユーザデータをＮＡＮＤ型フラッシュメモリ５からリードするための１回のアクセスとを含む。
【００８９】
最上位テーブル８３の全てのポインタがＲＡＭ６上に存在する。したがって、最上位テーブル８３は論理アドレス空間全体をカバーする。目的の下位テーブルセグメントがテーブルキャッシュ６１に存在せず（下位テーブルミス）、且つ目的の上位テーブルセグメントもテーブルキャッシュ６１に存在しないならば（上位テーブルミス）、キャッシュコントローラ１５１は、この目的の上位テーブルセグメントの物理アドレスを最上位テーブル８３から取得し、この取得した物理アドレスを使用して、目的の上位テーブルセグメントをＮＡＮＤ型フラッシュメモリ５からテーブルキャッシュ６１に転送する。次いで、キャッシュコントローラ１５１は、この目的の上位テーブルセグメントから取得した物理アドレスを使用して、目的の下位テーブルセグメントをＮＡＮＤ型フラッシュメモリ５からテーブルキャッシュ６１に転送し、テーブルキャッシュ６１に転送された目的の下位テーブルセグメントからマッピング情報を取得する。そして、コントローラ４は、キャッシュコントローラ１５１によって目的の下位テーブルセグメントから取得されたマッピング情報（物理アドレス）を使用してユーザデータをＮＡＮＤ型フラッシュメモリ５からリードする。したがって、ＮＡＮＤ型フラッシュメモリ５がアクセスされる回数は３回である。この３回のアクセスは、マッピングテーブル（ここで、上位テーブルセグメントと下位テーブルセグメント）をＮＡＮＤ型フラッシュメモリ５からリードするための２回のアクセスと、ユーザデータをＮＡＮＤ型フラッシュメモリ５からリードするための１回のアクセスとを含む。
【００９０】
ホスト２のアクセス傾向によって、テーブルキャッシュ６１にキャッシュしておきたい階層レベルは異なる。
したがって、本実施形態では、以下のキャッシュ制御を実行する。
狭域アクセス時においては、キャッシュコントローラ１５１は、多くの下位テーブルセグメントをキャッシュするように動作し、これによってＮＡＮＤ型フラッシュメモリ５がアクセスされる平均回数をほぼ１回にする。
【００９１】
広域アクセス時においては、キャッシュコントローラ１５１は、多くの上位テーブルセグメントをキャッシュするように動作し、これによってＮＡＮＤ型フラッシュメモリ５がアクセスされる平均回数をほぼ２回にする。なお、あまりにアクセス範囲が広い場合（超広域アクセス）においては、ＮＡＮＤ型フラッシュメモリ５がアクセスされる平均回数は３回となる。各下位テーブルセグメントによってカバーされる論理アドレス範囲は狭いため、広域アクセス時においては、たとえ多くの下位テーブルセグメントがキャッシュされていても、下位テーブルヒットはほぼ起こらない。したがって、広域アクセス時においては、カバーできる論理アドレス範囲の広い上位テーブルセグメントをより多くキャッシュすることが好ましい。
【００９２】
しかし、目的の下位テーブルセグメントがテーブルキャッシュ６１に存在せず、且つこの目的の上位テーブルセグメントに対応する特定の上位テーブルセグメントがテーブルキャッシュ６１に存在しない場合には、特定の上位テーブルセグメント、目的の下位テーブルセグメントという順序で、これらセグメントをテーブルキャッシュ６１にキャッシュすることが必要となる。したがって、広域アクセス時においては、図１３に示すように、上位テーブルセグメントと下位テーブルセグメントとが交互にテーブルキャッシュ６１にキャッシュされていく。このため、上位テーブルセグメントと下位テーブルセグメントの双方がほぼ均等の割合でテーブルキャッシュ６１に載ってしまい、テーブルキャッシュ６１にキャッシュされる上位テーブルセグメントの割合は、５０％程度までに制限される。
【００９３】
図１４は、典型的な狭域アクセスの例を示す。
図１４においては、上位テーブル８２のセグメント＃０によってカバーされる論理アドレス範囲のみがホスト２によってアクセスされているケースが想定されている。この場合、この論理アドレス範囲に属する１２８個の下位テーブルセグメントの内のどの下位テーブルセグメントが参照または更新される必要がある場合であっても、この下位テーブルセグメントをキャッシュするために必要な上位テーブルセグメントは上位テーブル８２のセグメント＃０のみである。このため、上位テープルセグメントの参照に偏りが生じる。
【００９４】
したがって、上位テーブル８２のセグメント＃０がテーブルキャッシュ６１にキャッシュされた後は、テーブルキャッシュ６１に格納されているこの上位テーブル８２のセグメント＃０のみが頻繁に参照され、テーブルキャッシュ６１に格納されている他の上位テーブルセグメントは滅多に参照されない。つまり、狭域アクセス時には、キャッシュされている上位テープルセグメントの参照に偏りが生じることとなる（参照の偏り度合いが強くなる）。
【００９５】
図１５は、典型的な狭域アクセスの別の例を示す。
図１５においては、上位テーブル８２のセグメント＃０によってカバーされる論理アドレス範囲と上位テーブル８２のセグメント＃Ｎによってカバーされる論理アドレス範囲とがホスト２によって交互にアクセスされているケースが想定されている。この場合、上位テーブル８２のセグメント＃０および上位テーブル８２のセグメント＃Ｎがテーブルキャッシュ６１にキャッシュされた後は、これら上位テーブル８２のセグメント＃０および上位テーブル８２のセグメント＃Ｎのみが頻繁に参照され、テーブルキャッシュ６１に格納されている他の上位テーブルセグメントは滅多に参照されない。この場合も、キャッシュされている上位テープルセグメントの参照に偏りが生じることとなる（参照の偏り度合いが強くなる）。
【００９６】
図１６は、典型的な広域アクセスの例を示す。
図１６では、上位テーブル８２のセグメント＃０、セグメント＃１、セグメント＃２、…、セグメント＃Ｎそれぞれによってカバーされる多数の論理アドレス範囲を含む広い論理アドレス範囲がホスト２によってランダムにアクセスされるケースが想定されている。この場合、ホスト２によってアクセスされるアクセス先論理アドレスは多数の論理アドレス範囲間で頻繁に切り替えられる。したがって、目的の上位テーブルセグメントは異なる複数の上位テーブルセグメント間で頻繁に切り替えられ、この結果、キャッシュされている上位テーブルセグメントに対する参照の偏り度合いは弱くなる。
【００９７】
図１７は、テーブルキャッシュ６１を占める、上位テーブルセグメントと下位テーブルセグメントとの割合を示す。
ホスト２によってアクセスされる論理アドレス範囲が狭い場合には、（１）下位テーブルセグメントの方が上位テーブルセグメントより頻繁に参照され、また、（２）上位テーブルセグメントの参照に偏りが生じる。狭域アクセスでは、（１）、（２）が起こるため、テーブルキャッシュ６１を占める上位テーブルセグメントの割合は低くなり、テーブルキャッシュ６１を占める下位テーブルセグメントの割合が高くなる。
【００９８】
ホスト２によってアクセスされる論理アドレス範囲が広がるにつれて、上位テーブルセグメントの参照の偏りが弱くなり、更に下位テーブルのヒット率も下がるため、テーブルキャッシュ６１を占める上位テーブルセグメントの割合が増えていく。
しかし、目的の下位テーブルセグメントがテーブルキャッシュ６１に存在せず、且つこの目的の上位テーブルセグメントに対応する特定の上位テーブルセグメントがテーブルキャッシュ６１に存在しない場合には、特定の上位テーブルセグメント、目的の下位テーブルセグメントという順序で、これらセグメントがテーブルキャッシュ６１にキャッシュされる。したがって、テーブルキャッシュ６１を占める上位テーブルセグメントの割合は５０％程度までに制限されてしまう。この結果、広域アクセス時には、テーブルキャッシュ６１の約半分の容量は、ほとんどヒットしない下位テーブルセグメントで占められてしまう。
【００９９】
そこで、本実施形態では、コントローラ４内の優先度調整部１５３は、テーブルキャッシュ６１にキャッシュされている上位テーブルセグメントに対する参照の偏り度合いを評価することによってホスト２による現在のアクセス傾向（狭域アクセス／広域アクセス）を推定する。そして、参照の偏り度合いが閾値を下回るという条件が満たされた場合、キャッシュコントローラ１５１は、上位テーブルセグメントを下位テーブルセグメントよりも優先的にテーブルキャッシュ６１にキャッシュするための動作を実行する。この場合、キャッシュコントローラ１５１は、テーブルキャッシュ６１内の下位テーブルセグメントそれぞれをテーブルキャッシュ６１内の上位テーブルセグメントそれぞれよりも優先して置換対象に選択してもよい。
【０１００】
この結果、広域アクセス時においては、テーブルキャッシュ６１を占める上位テーブルセグメントの割合を５０％よりも増やすことができ、より多くの上位テーブルセグメントをテーブルキャッシュ６１に置くことが可能となる。
図１８は、テーブルキャッシュ６１にキャッシュされている上位テーブルセグメントに対する参照の偏り度合いが閾値を下回る場合（広域アクセスの場合）に、優先度調整部１５３によって設定される上位テーブル優先度（高優先度）および下位テーブル優先度（低優先度）を示す。
【０１０１】
優先度調整部１５３は、テーブルキャッシュ６１にキャッシュされている上位テーブルセグメントに対する参照の偏り度合いに基づき、下位テーブル８１および上位テーブル８２それぞれに対応する優先度を決定する。
例えば、テーブルキャッシュ６１にキャッシュされている上位テーブルセグメントに対する参照の偏り度合いが閾値を下回る場合には、ホスト２の現在のアクセス傾向が広域アクセスであると推定される。この場合、図１８に示すように、優先度調整部１５３は、下位テーブル８１および上位テーブル８２それぞれに対応する優先度を低優先度および高優先度に決定する。
【０１０２】
ここで、図１９と図２７を参照して、より多くの上位テーブルセグメントをテーブルキャッシュ６１にキャッシュするための動作について説明する。図１９は、高優先度を有する上位テーブルセグメントそれぞれを、低優先度を有する下位テーブルセグメントよりも優先的にテーブルキャッシュ６１に残すことによって、より多くの上位テーブルセグメントをテーブルキャッシュ６１に格納する動作を示す。また、図２７は、下位テーブル８１と上位テーブル８２との間の優先度の関係を示す上位テーブル優先フラグの値によって置き換え対象の選択方法がどのように変わるかを示している。
【０１０３】
下位テーブル８１および上位テーブル８２が図１８に示すように低優先度および高優先度に設定されると、上位テーブルセグメントを下位テーブルセグメントよりも優先してテーブルキャッシュ６１に残すための上位テーブル優先モードがイネーブルになる。
【０１０４】
キャッシュ置き換え方法は以下のようになる。
上位テーブル８２の優先度が低く、これによって上位テーブル優先モードがディセーブルの場合には、Ｉｎｄｅｘごとに、ＬＲＵ置換アルゴリズムなどに基づいて置き換え対象となるＷａｙが選択される。ＬＲＵ置換アルゴリズムの場合は、最終アクセスから最も時間が経過しているＷａｙが置き換えられる。
【０１０５】
上位テーブル８２の優先度が上がり、上位テーブル優先モードがイネーブルになった場合には、置き換え対象データは、低い優先度を有する階層レベル（ここでは、下位テーブル）から優先的に選択される。
図２０は、テーブルキャッシュ６１にキャッシュされている上位テーブルセグメントに対する参照の偏り度合いに応じて、多段マッピングテーブル８の各階層レベルの優先度を動的に調整する動作を示す。
【０１０６】
テーブルキャッシュ６１にキャッシュされるテーブルが下位テーブル８１および上位テーブル８２の２種類のみであるケースにおいては、下位テーブル８１および上位テーブル８２それぞれに対応する優先度の設定は、１ビットのフラグ（「上位テーブル優先フラグ」）によって表すことができる。上位テーブル優先フラグ＝Ｔｒｕｅは、上位テーブル８２の優先度が高優先度に設定されていることを示す。上位テーブル優先フラグ＝Ｔｒｕｅの場合、上位テーブル優先モードがイネーブルとなる。上位テーブル優先フラグ＝Ｆａｌｓｅの場合には、上位テーブル優先モードはディセーブルされる。
【０１０７】
上位テーブル優先フラグのデフォルト値はＦａｌｓｅであってもよい。この場合、上位テーブル優先モードはディセーブルされているので、下位テーブル８１と上位テーブル８２は平等に扱われる。この場合、置き換え対象データはＬＲＵ順位に基づいて決定されればよい。
【０１０８】
上位テーブル優先フラグ＝Ｆａｌｓｅの状態において、ホスト２によってアクセスされる論理アドレス範囲が狭い場合（狭域アクセス）には、上位テーブルセグメントのみに着目した場合、特定の一つ又は特定の数個あるいは数十個の上位テーブルセグメントのみが頻繁に参照され、上位テーブルセグメントの参照に偏りが生じる。なお、場合によっては、参照の偏りが数百個の上位テーブルセグメントに点在する事もあり得る。したがって、狭域アクセス時には、上位テーブルセグメントの参照に偏りが生じる。さらに、下位テーブルセグメントの方が上位テーブルセグメントより頻繁に参照される。この結果、テーブルキャッシュ６１を占める上位テーブルセグメントの割合は低くなり、テーブルキャッシュ６１を占める下位テーブルセグメントの割合が高くなる。
【０１０９】
ホスト２によってアクセスされる論理アドレス範囲が広がるにつれて、テーブルキャッシュ６１を占める上位テーブルセグメントの割合は徐々に増えていく。
そして、ホスト２のアクセス傾向が広域アクセスであると推定されると、上位テーブル優先フラグがＴｒｕｅに設定される（上位テーブルの優先度が上がる）。これにより、上位テーブル優先モードがイネーブルとなる。この場合、上位テーブルセグメントを下位テーブルセグメントよりも優先してテーブルキャッシュ６１にキャッシュする動作、換言すれば、下位テーブルセグメントを上位テーブルセグメントよりも優先して置換対象として選択する動作が実行される。これにより、多くの上位テーブルセグメントでテーブルキャッシュ６１を埋めることが可能になる。
【０１１０】
その後、ホスト２によってアクセスされる論理アドレス範囲が狭くなると、上位テーブル優先フラグがＦａｌｓｅに変更される（上位テーブルの優先度が下がる）。これにより、上位テーブル優先モードがディセーブルとなる。この結果、テーブルキャッシュ６１を占める下位テーブルセグメントの割合を高くすることができる。
【０１１１】
このように、本実施形態では、キャッシュコントローラ１５１は、テーブルキャッシュ６１にキャッシュされている上位テーブルセグメントの参照の偏り度合いに基づいて、（ｉ）上位テーブルセグメントそれぞれを下位テーブルセグメントそれぞれよりも優先してテーブルキャッシュ６１にキャッシュする動作と、（ｉｉ）上位テーブルセグメントそれぞれを下位テーブルセグメントそれぞれよりも優先せずに、下位テーブルセグメントそれぞれと上位テーブルセグメントそれぞれをテーブルキャッシュ６１にキャッシュする動作とを選択的に実行する。
【０１１２】
なお、ここでは、キャッシュされている上位テーブルセグメントの参照の偏り度合いに基づいて上位テーブルと下位テーブルの優先度の関係を決める場合を説明したが、キャッシュされている上位テーブルセグメントの参照の偏り度合いとキャッシュされている下位テーブルセグメントの参照の偏り度合いをそれぞれ評価して上位テーブルと下位テーブルの優先度の関係を決定してもよい。
【０１１３】
次に、更新済みセグメントを管理する方法について説明する。
更新済みでかつＮＡＮＤ型フラッシュメモリ５へ不揮発化していないセグメントを管理する方法としては、これらに限定されないが、例えば、以下の２つの方法が考えられる。
１つ目は、図２１に示すように、更新済みセグメントを未更新のセグメントと一緒にテーブルキャッシュ６１で管理する方法である。２つ目は、図２２に示すように更新済みセグメントを、テーブルキャッシュ６１ではなく、別のデータ構造で管理する方法である。
【０１１４】
図２３は、コントローラ４内に含まれているキャッシュコントローラ１５１、アクセス履歴情報管理部１５２、および優先度調整部１５３を示す。
キャッシュコントローラ１５１は、所定のタイミングで、アクセス履歴情報管理部１５２へアクセス履歴を渡す。また、キャッシュコントローラ１５１は、所定のタイミングで、優先度調整部１５３へ優先度調整要求を発行する。
【０１１５】
アクセス履歴情報管理部１５２は、キャッシュされている上位テーブルセグメントに対する参照の偏り度合いに着目してホスト２のアクセス傾向を推定する。具体的には、アクセス履歴情報管理部１５２は、上位テーブルの検索でヒットしたセグメントそれぞれの優先順位（例えばＬＲＵ順位）に対応する値（スコア）を累積加算することによって得られる累積スコアをアクセス履歴情報として覚えておく。高い優先順位の上位テーブルセグメント（追い出されにくい優先順位の上位テーブルセグメント）に対して大きなスコアが与えられ、低い優先順位の上位テーブルセグメント（追い出されやすい優先順位の上位テーブルセグメント）に対して小さいスコアが与えられてもよい。例えば、ＬＲＵ置換アルゴリズムが適用されるケースにおいては、最近参照された上位テーブルセグメントのＬＲＵ順位（追い出されにくい順位）に対して大きなスコアが与えられ、最終アクセスから長い時間が経過している上位テーブルセグメントＬＲＵ順位（追い出されやすい順位）に対して小さいスコアが与えられてもよい。
【０１１６】
キャッシュされている上位テーブルセグメントに対する参照に偏りが生じており、例えば、キャッシュされている特定の一つの上位テーブルセグメントが頻繁に参照されるケースにおいては、この上位テーブルセグメントは追い出されにくい優先順位に維持されやすい。したがって、累積スコアは大きな値となる。また、キャッシュされている上位テーブルセグメントに対する参照に偏りが生じており、例えば、キャッシュされている２つまたは３つの上位テーブルセグメントが交互に参照されるケースにおいても、これら上位テーブルセグメントは比較的追い出されにくい優先順位に維持されやすい。したがって、この場合も、累積スコアは比較的大きな値となる。
【０１１７】
したがって、この累積スコアは、テーブルキャッシュ６１にキャッシュされている上位テーブルセグメントに対する参照の偏り度合いを表すことができる。
なお、高い優先順位の上位テーブルセグメント（追い出されにくい優先順位の上位テーブルセグメント）に対して小さいスコアが与え、低い優先順位の上位テーブルセグメント（追い出されやすい優先順位の上位テーブルセグメント）に対して大きいスコアを与えてもよい。この場合には、キャッシュされている上位テーブルセグメントに対する参照の偏り度合いが強いと、累積スコアは比較的小さな値となる。
【０１１８】
以下では、これに限定されないが、高い優先順位の上位テーブルセグメント（追い出されにくい優先順位の上位テーブルセグメント）に対して大きなスコアが与えられ、低い優先順位の上位テーブルセグメント（追い出されやすい優先順位の上位テーブルセグメント）に対して小さいスコアが与えせれるケースを想定する。また以下では、これに限定されないが、置換対象を選択するための優先順位としてＬＲＵ順位を使用するケースを想定する。
【０１１９】
上位テーブルセグメントのヒット回数が所定回数に達した場合、優先度調整部１５３は、累積スコアを、事前に設定された閾値と比較し、累積スコアが閾値未満であるか否かに応じて、下位テーブルおよび上位テーブルそれぞれの優先度を決定する。なお、優先度調整部１５３は、ある時間が経過する度に、累積スコアを事前に設定された閾値と比較することによって累積スコアを評価してもよい。
【０１２０】
累積スコアが閾値未満である場合、優先度調整部１５３は、下位テーブルおよび上位テーブルそれぞれの優先度が低優先度および高優先度に設定されるように、上位テーブル優先フラグをＴｒｕｅにセットする。
図２４は、キャッシュコントローラ１５１およびアクセス履歴情報管理部１５２によって実行されるアクセス履歴情報更新動作を示す。
【０１２１】
キャッシュコントローラ１５１は、アドレス解決またはアドレス更新のためにテーブルキャッシュ６１を検索する。このテーブルキャッシュ６１の検索において上位テーブルヒットが起きる度、キャッシュコントローラ１５１は、上位テーブルヒット回数を＋１だけインクリメントする。そして、キャッシュコントローラ１５１は、ヒットした上位テーブルセグメントの現在のＬＲＵ順位に対応するスコアをスコア加算値テーブルから取得し、このスコアをアクセス履歴情報管理部１５２にアクセス履歴として渡す。アクセス履歴情報管理部１５２は、キャッシュコントローラ１５１から渡されたスコアを現在の累積スコアに加算する。なお、上位テーブルヒット回数をインクリメントする処理、およびＬＲＵ順位に対応するスコアをスコア加算値テーブルから取得する処理は、アクセス履歴情報管理部１５２によって実行されてもよい。
【０１２２】
スコア加算値テーブルは、ＬＲＵ順位それぞれに対応するスコアを保持している。例えば、ＬＲＵ順位１は、最も追い出しされやすいＬＲＵ順位であり、ＬＲＵ順位８は、最も追い出しされにくいＬＲＵ順位である。例えば、ヒットした上位テーブルセグメントの現在のＬＲＵ順位がＬＲＵ順位７である場合、ＬＲＵ順位７に対応するスコア（ここでは、７）がスコア加算値テーブルから取得される。なお、スコア加算値テーブルは、上位テーブル優先フラグがＦａｌｓｅの場合に対応するスコアリストと、上位テーブル優先フラグがＴｒｕｅの場合に対応するスコアリストとを保持していてもよい。
【０１２３】
現在の上位テーブル優先フラグがＦａｌｓｅである場合、キャッシュコントローラ１５１またはアクセス履歴情報管理部１５２は、ヒットした上位テーブルセグメントの現在のＬＲＵ順位に対応するスコアを、上位テーブル優先フラグがＦａｌｓｅの場合に対応するスコアリストから取得する。一方、現在の上位テーブル優先フラグがＴｒｕｅである場合、キャッシュコントローラ１５１またはアクセス履歴情報管理部１５２は、ヒットした上位テーブルセグメントの現在のＬＲＵ順位に対応するスコアを、上位テーブル優先フラグがＴｒｕｅの場合に対応するスコアリストから取得する。
【０１２４】
図２５は、優先度調整部１５３によって実行される上位テーブル優先フラグ設定動作を示す。
優先度調整部１５３は、例えば上位テーブルヒット回数が所定の回数を超えた時に、優先度変更処理を実行する。優先度変更処理では、優先度調整部１５３は、累積スコアと閾値とを比較する。累積スコアが閾値を下回っていたら、優先度調整部１５３は、上位テーブルの優先度を上げ、上位テーブル優先フラグをＴｒｕｅにセットする。累積スコアが閾値以上であるならば、優先度調整部１５３は、上位テーブルの優先度を下げ、上位テーブル優先フラグをＦａｌｓｅにする。
【０１２５】
優先度変更処理が行われる度、アクセス履歴情報管理部１５２は、上位テーブルヒット回数と累積スコアとを初期値にリセットする。
図２６は、多段マッピングテーブル８がより多くの階層レベルのテーブルを含む場合に、これら階層レベルにそれぞれ設定される優先度の例を示す。
【０１２６】
本実施形態では、多段マッピングテーブル８に含まれるテーブル数は４以上であってもよく、例えば、多段マッピングテーブル８に含まれるテーブル数は１０段のアドレス変換を実行する１０個の階層レベルに対応する１０個のテーブルを含んでいてもよい。図２６では、階層レベル１、階層レベル２、階層レベル３に対応する３種類のテーブルセグメントがキャッシュされる場合が例示されている。この場合、多段マッピングテーブル８は、階層レベル１のテーブルと、階層レベル２のテーブルと、階層レベル３のテーブルに加え、最上位テーブルをさらに含んでいてもよい。
【０１２７】
階層レベル３のテーブルは、ホスト２から受信されたデータが書き込まれたＮＡＮＤ型フラッシュメモリ５内の物理アドレスを管理するためのテーブルである。階層レベル２のテーブルは、階層レベル３のテーブルセグメントそれぞれが書き込まれたＮＡＮＤ型フラッシュメモリ５内の物理アドレスを管理するためのテーブルである。階層レベル１のテーブルは、階層レベル２のテーブルセグメントそれぞれが書き込まれたＮＡＮＤ型フラッシュメモリ５内の物理アドレスを管理するためのテーブルである。最上位テーブルは、階層レベル２のテーブルセグメントそれぞれが書き込まれたＮＡＮＤ型フラッシュメモリ５内の物理アドレスを管理するためのテーブルである。以下では、階層レベル１のテーブルと、階層レベル２のテーブルと、階層レベル３のテーブルがテーブルキャッシュ６１にキャッシュされる場合を想定する。
【０１２８】
優先度３が最も高い優先度を示し、優先度２が中間の優先度を示し、優先度１が最も低い優先度を示してもよい。この場合、キャッシュコントローラ１５１は、階層レベル１のテーブルセグメントを、階層レベル２のテーブルセグメントおよび階層レベル３のテーブルセグメントよりも優先的にテーブルキャッシュ６１にキャッシュする動作を実行する。さらに、キャッシュコントローラ１５１は、階層レベル２のテーブルセグメントを、階層レベル３のテーブルセグメントよりも優先的にテーブルキャッシュ６１にキャッシュする動作を実行する。
【０１２９】
階層レベル１、２、３それぞれの優先度を設定する処理においては、コントローラ４は、例えば、キャッシュされている階層レベル１のテーブルセグメントに対する参照の偏り度合い、キャッシュされている階層レベル２のテーブルセグメントに対する参照の偏り度合い、およびキャッシュされている階層レベル３のテーブルセグメントに対する参照の偏り度合いを求め、階層レベルごとに優先度を設定してもよい。この場合、コントローラ４のアクセス履歴情報管理部１５２は、例えば、キャッシュされている階層レベル１のテーブルセグメントに対する参照の偏り度合いを示す累積スコアと、キャッシュされている階層レベル２のテーブルセグメントに対する参照の偏り度合いを示す累積スコアと、キャッシュされている階層レベル１のテーブルセグメントに対する参照の偏り度合いを示す累積スコアとを算出する。そして、コントローラ４の優先度調整部１５３は、これら累積スコアに基づいて、階層レベル１のテーブル、階層レベル２のテーブル、および階層レベル３のテーブルそれぞれの優先度を決定する。
【０１３０】
あるいは、アクセス履歴情報管理部１５２が、例えば、キャッシュされている階層レベル１のテーブルセグメントに対する参照の偏り度合いを示す累積スコアと、キャッシュされている階層レベル２のテーブルセグメントに対する参照の偏り度合いを示す累積スコアとを算出し、優先度調整部１５３が、これら階層レベル１、２の累積スコアに基づいて、階層レベル１のテーブル、階層レベル２のテーブル、および階層レベル３のテーブルそれぞれの優先度を決定してもよい。
【０１３１】
図２７は、上位テーブル優先フラグによって置き換え対象の選択方法がどのように変わるかを示した図である。ここでは、セットアソシアティブキャッシュのあるインデックスに対応する４つのウェイから置き換え対象を選択する場合が例示されている。
図２７の上部に示すように、上位テーブル優先フラグがＦａｌｓｅである場合には、キャッシュコントローラ１５１は、下位テーブルセグメントおよび上位テーブルセグメントをＬＲＵ置換アルゴリズムなどに基づいて平等に置換対象候補として選択する。
【０１３２】
一方、図２７の下部に示すように、上位テーブル優先フラグがＴｒｕｅである場合には、キャッシュコントローラ１５１は、上位テーブルセグメントを置換対象候補から除外し、下位テーブルセグメントから置換対象セグメントを選択する。なお、置換対象として選択可能な下位テーブルセグメントが存在しない場合には、ＬＲＵ置換アルゴリズムなどによって最も優先度が低いと判断された上位テーブルセグメントが置換対象候補として選択される。
【０１３３】
次に、以下の4つの処理の手順を説明する。
（１）アドレス解決処理
アドレス解決処理は、ホスト２によって指定された論理アドレスに対応する物理アドレスを取得する処理である。
（２）リフィル処理
リフィル処理は、アドレス解決に必要なマッピング情報、または更新対象のマッピング情報をテーブルキャッシュ６１に載せる処理である。
（３）アドレス更新処理
アドレス更新処理は、下位テーブルセグメントのマッピング情報、上位テーブルセグメントのマッピング情報、または最上位テーブルセグメントのマッピング情報を更新する処理である。ホスト２からのライト要求によって指定された論理アドレスに対応するデータがＮＡＮＤ型フラッシュメモリ５に書き込まれた場合には、この論理アドレスに対応する下位テーブルセグメントのマッピング情報が更新対象となる。
【０１３４】
テーブルキャッシュ６１上で更新された下位テーブルセグメントがＮＡＮＤ型フラッシュメモリ５に書き込まれた場合には、この下位テーブルセグメントの物理アドレスを管理している特定の上位テーブルセグメントのマッピング情報が更新対象となる。
テーブルキャッシュ６１上で更新された上位テーブルセグメントがＮＡＮＤ型フラッシュメモリ５に書き込まれた場合には、この上位テーブルセグメントの物理アドレスを管理している最上位テーブルのマッピング情報が更新対象となる。
（４）フラッシュ処理
フラッシュ処理は、テーブルキャッシュ６１上で更新したマッピング情報を記憶メディア（ＮＡＮＤ型フラッシュメモリ５）に書き込む処理である。
【０１３５】
図２８のフローチャートは、アドレス解決処理の手順を示す。アドレス解決処理では、キャッシュコントローラ１５１は、例えば、下位テーブルセグメント、上位テーブルセグメントという順序で、テーブルキャッシュ６１を検索する。
キャッシュコントローラ１５１は、ホスト２によって指定された論理アドレスに対応する物理アドレスを含む特定の下位テーブルセグメントを求めてテーブルキャッシュ６１を検索する（ステップＳ１１）。
【０１３６】
この特定の下位テーブルセグメントがテーブルキャッシュ６１に存在する場合（ヒット）（ステップＳ１２のＹＥＳ）、キャッシュコントローラ１５１は、この特定の下位テーブルセグメント（アドレス変換データ部分）からマッピング情報を取得する（ステップＳ１３）。このマッピング情報は、ホスト２によって指定された論理アドレスに対応する物理アドレスを含んでいる。
【０１３７】
この特定の下位テーブルセグメントがテーブルキャッシュ６１に存在しない場合（ステップＳ１２のＮＯ）、キャッシュコントローラ１５１は、この特定の下位テーブルセグメントを格納するためのキャッシュエントリ（キャッシュライン）を割り当てる（ステップＳ１４）。ステップＳ１４では、利用可能なキャッシュエントリ（キャッシュライン）が存在しない場合には、置き換え対象キャッシュエントリ（置き換え対象キャッシュライン）を選択する処理が行われる。
【０１３８】
この処理において、この特定の下位テーブルセグメントを格納するための特定のインデックス内の全ウェイが更新済みセグメントで埋まっていた場合は、フラッシュ処理によって更新済みセグメントをＮＡＮＤ型フラッシュメモリ５へ書き込む処理が実行される。これによってこの特定のインデックス内のウェイそれぞれを置き換え対象として選択可能とすることができる。
【０１３９】
また、この特定のインデックス内の全ウェイが以前のアドレス解決処理または以前のアドレス更新処理のために使用中である場合には、以前のアドレス解決処理または以前のアドレス更新処理前の処理が完了してから置き換え対象を選択するか、またはＮＡＮＤ型フラッシュメモリ５から読み出したセグメントをテーブルキャッシュ６１にキャッシュせずに、処理を進めることが必要となる。
【０１４０】
置き換え対象キャッシュエントリを選択する処理では、上位テーブル優先フラグがＦａｌｓｅならば、ＬＲＵ置換アルゴリズム等に基づいて置き換え対象キャッシュエントリが選択される。上位テーブル優先フラグがＴｒｕｅならば、上位テーブルセグメントが優先的にテーブルキャッシュ６１に残されるように下位テーブルセグメントを格納しているキャッシュエントリの中から置き換え対象キャッシュエントリが選択される。
【０１４１】
次いで、キャッシュコントローラ１５１は、この特定の下位テーブルセグメントをＮＡＮＤ型フラッシュメモリ５からテーブルキャッシュ６１に転送するリフィル処理を行う（ステップＳ１５）。リフィル処理では、この特定の下位テーブルセグメントは上述の割り当てられたキャッシュエントリに格納される。このリフィル処理の詳細は図２９で後述する。
【０１４２】
そして、キャッシュコントローラ１５１は、この特定の下位テーブルセグメントからマッピング情報を取得する（ステップＳ１３）。
このように、特定の下位テーブルセグメントをテーブルキャッシュ６１に転送してマッピング情報を取得するまでの処理はキャッシュコントローラ１５１によって実行される。ＮＡＮＤ型フラッシュメモリ５に対してユーザデータをリード／ライトする処理はコントローラ４（例えばＣＰＵ１２）によって実行される。なお、キャッシュコントローラ１５１とコントローラ４（例えばＣＰＵ１２）の役割分担はこの例に限定されるものではない。
【０１４３】
図２９のフローチャートは、リフィル処理の手順を示す。
キャッシュコントローラ１５１は、リフィルすべき特定の下位テーブルセグメントの論理アドレス範囲をカバーしている論理アドレス範囲を有する特定の上位テーブルセグメントを求めてテーブルキャッシュ６１を検索する（ステップＳ２１）。
【０１４４】
この特定の上位テーブルセグメントがテーブルキャッシュ６１に存在する場合（ヒット）（ステップＳ２２のＹＥＳ）、アクセス履歴情報管理部１５２は、アクセス履歴情報を更新する（ステップＳ２３）。
ステップＳ２３では、アクセス履歴情報管理部１５２は、上位テーブルヒット回数を＋１だけインクリメントする処理と、ヒットした上位テーブルセグメントの現在のＬＲＵ順位に対応するスコアを現在の累積スコアに加算する処理とを実行する。
【０１４５】
前回の優先度情報更新処理から所定回数以上ヒットした場合（ステップＳ２４のＹＥＳ）、つまりインクリメントされた上位テーブルヒット回数が所定回数に達した場合、優先度調整部１５３は、優先度情報更新処理を行う（ステップＳ２５）。
前回の優先度情報更新処理から所定回数以上ヒットしたことを条件に優先度情報更新処理を行う理由は、ある長さ以上の期間に渡ってホスト２のアクセス傾向（つまりテーブルキャッシュ６１の参照傾向）を評価できるようにするためである。ステップＳ２５の優先度情報更新処理では、優先度調整部１５３は、累積スコアに基づいて上位テーブル優先フラグをＴｒｕｅまたはＦａｌｓｅに設定する処理と、上位テーブルヒット回数および累積スコアを初期値にリセットする処理とを実行する。
【０１４６】
次いで、キャッシュコントローラ１５１は、この特定の上位テーブルセグメントからマッピング情報を取得する（ステップＳ２６）。このマッピング情報は、リフィル対象の下位テーブルセグメントが書き込まれているＮＡＮＤ型フラッシュメモリ５上の位置を示す物理アドレスを含む。キャッシュコントローラ１５１は、この物理アドレスを使用して、特定の下位テーブルセグメントをＮＡＮＤ型フラッシュメモリ５から読み出し、読み出した下位テーブルセグメントを、割り当てられたキャッシュエントリに格納する（ステップＳ２７）。
【０１４７】
この特定の上位テーブルセグメントがテーブルキャッシュ６１に存在しない場合（ステップＳ２２のＮＯ）、キャッシュコントローラ１５１は、この特定の上位テーブルセグメントを格納するためのキャッシュエントリ（キャッシュライン）を割り当てる（ステップＳ２８）。ステップＳ２８では、利用可能なキャッシュエントリ（キャッシュライン）が存在しない場合には、置き換え対象キャッシュエントリ（置き換え対象キャッシュライン）を選択する処理が行われる。
【０１４８】
置き換え対象キャッシュエントリを選択する処理では、上位テーブル優先フラグがＦａｌｓｅならば、ＬＲＵ置換アルゴリズム等に基づいて置き換え対象キャッシュエントリ候補の中から置き換え対象キャッシュエントリが選択される。上位テーブル優先フラグがＴｒｕｅならば、上位テーブルセグメントが優先的にテーブルキャッシュ６１に残されるように下位テーブルセグメントを格納している置き換え対象キャッシュエントリ候補の中から置き換え対象キャッシュエントリが選択される。なお、置き換え対象キャッシュエントリ候補それぞれに含まれる下位テーブルセグメントの全てが使用中である場合には、上位テーブルセグメントを格納している置き換え対象キャッシュエントリ候補の中から置き換え対象キャッシュエントリが選択される。
【０１４９】
次いで、キャッシュコントローラ１５１は、最上位テーブル８３からこの特定の上位テーブルセグメントに対応するマッピング情報（この特定の上位テーブルセグメントが書き込まれているＮＡＮＤ型フラッシュメモリ５内の位置を示す物理アドレス）を取得する（ステップＳ２９）。キャッシュコントローラ１５１は、この取得した物理アドレスを使用して、この特定の上位テーブルセグメントをＮＡＮＤ型フラッシュメモリ５から読み出し、この特定の上位テーブルセグメントを、割り当てられたキャッシュエントリに格納する（ステップＳ３０）。
【０１５０】
次いで、キャッシュコントローラ１５１は、この特定の上位テーブルセグメントからマッピング情報を取得する（ステップＳ２６）。このマッピング情報は、リフィル対象の下位テーブルセグメントが書き込まれているＮＡＮＤ型フラッシュメモリ５上の位置を示す物理アドレスを含む。キャッシュコントローラ１５１は、この物理アドレスを使用して、特定の下位テーブルセグメントをＮＡＮＤ型フラッシュメモリ５から読み出し、読み出した下位テーブルセグメントを、割り当てられたキャッシュエントリに格納する（ステップＳ２７）。
【０１５１】
図３０のフローチャートは、アドレス更新処理の手順を示す。
マッピング情報が更新されるべき更新対象セグメントは、下位テーブルセグメント、上位テーブルセグメント、または最上位テーブルセグメントのいずれかである。ホスト２からのライト要求によって指定された論理アドレスに対応するデータがＮＡＮＤ型フラッシュメモリ５に書き込まれた場合には、この論理アドレスに対応する下位テーブルセグメントのマッピング情報が更新対象となる。テーブルキャッシュ６１上で更新された下位テーブルセグメントがＮＡＮＤ型フラッシュメモリ５に書き込まれた場合には、この下位テーブルセグメントの物理アドレスを管理している特定の上位テーブルセグメントのマッピング情報が更新対象となる。テーブルキャッシュ６１上で更新された上位テーブルセグメントがＮＡＮＤ型フラッシュメモリ５に書き込まれた場合には、最上位テーブルが更新対象となる。
【０１５２】
最上位テーブルの全体はＲＡＭ６上に存在するので、以下では、更新対象セグメントが、下位テーブルセグメントまたは上位テーブルセグメントである場合について説明する。
キャッシュコントローラ１５１は、更新対象セグメント（下位テーブルセグメントまたは上位テーブルセグメント）を求めてテーブルキャッシュ６１を検索する（ステップＳ４１）。
【０１５３】
この更新対象セグメントがテーブルキャッシュ６１に存在する場合（ヒット）（ステップＳ４２のＹＥＳ）、キャッシュコントローラ１５１は、この更新対象セグメントのマッピング情報をテーブルキャッシュ６１上で更新する（ステップＳ４３）。なお、この更新対象セグメントが上位テーブルセグメントであり、且つこの上位テーブルセグメントが
テーブルキャッシュ６１に存在する場合（ヒット）（ステップＳ４２のＹＥＳ）には、キャッシュコントローラ１５１は、さらに、図２９のステップＳ２３〜Ｓ２５で説明した処理を実行してもよい。
【０１５４】
更新済みセグメントが一定数溜まった場合（ステップＳ４４のＹＥＳ）、キャッシュコントローラ１５１は、これら更新済みセグメントをＮＡＮＤ型フラッシュメモリ５に書き込むフラッシュ処理を行う（ステップＳ４５）。
一方、更新済みセグメントが一定数溜まっていない場合（ステップＳ４４のＮＯ）、キャッシュコントローラ１５１は、フラッシュ処理を行わずに、アドレス更新処理を終了する。
【０１５５】
この更新対象セグメントがテーブルキャッシュ６１に存在しない場合（ステップＳ４２のＮＯ）、キャッシュコントローラ１５１は、この更新対象セグメントを格納するためのキャッシュエントリ（キャッシュライン）を割り当てる（ステップＳ４６）。ステップＳ４６では、利用可能なキャッシュエントリ（キャッシュライン）が存在しない場合には、置き換え対象キャッシュエントリ（置き換え対象キャッシュライン）を選択する処理が行われる。
【０１５６】
置き換え対象キャッシュエントリを選択する処理では、上位テーブル優先フラグがＦａｌｓｅならば、ＬＲＵ置換アルゴリズム等に基づいて置き換え対象キャッシュエントリが選択される。上位テーブル優先フラグがＴｒｕｅならば、上位テーブルセグメントが優先的にテーブルキャッシュ６１に残されるように下位テーブルセグメントを格納しているキャッシュエントリの中から置き換え対象キャッシュエントリが選択される。
【０１５７】
次いで、キャッシュコントローラ１５１は、図２８で説明したリフィル処理を実行して、この更新対象セグメントをテーブルキャッシュ６１に格納する（ステップＳ４７）。そして、キャッシュコントローラ１５１は、上述のステップＳ４３〜Ｓ４５の処理を行う。
【０１５８】
図３１のフローチャートは、フラッシュ処理の手順を示す。
キャッシュコントローラ１５１は、テーブルキャッシュ６１上の更新済みセグメントをバッファ（ＲＡＭ６上のバッファ）へコピーする（ステップＳ５１）。ステップＳ５１の処理は一定数のセグメントがバッファにコピーされるまで繰り返えされる。一定数のセグメントがコピーされると（ステップＳ５２のＹＥＳ）、キャッシュコントローラ１５１は、バッファに溜まった更新済みセグメントをＮＡＮＤ型フラッシュメモリ５に書き込む（ステップＳ５３）。キャッシュコントローラ１５１は、ステップＳ５３でＮＡＮＤ型フラッシュメモリ５に書きまれた各更新済みセグメントに対応する上位階層レベルのテーブルセグメントをテーブルキャッシュ６１上で更新する処理を実行する。例えば、ＮＡＮＤ型フラッシュメモリ５に書きまれた更新済みセグメントが下位テーブルセグメントならば、この下位テーブルセグメントに対応する特定の上位テーブルセグメントをテーブルキャッシュ６１上で更新する処理が実行される。これにより、この下位テーブルセグメントが書き込まれているＮＡＮＤ型フラッシュメモリ５内の最新の記憶位置を示す物理アドレスがこの特定の上位テーブルセグメントのマッピング情報に反映される。また、ＮＡＮＤ型フラッシュメモリ５に書きまれた更新済みセグメントが上位テーブルセグメントならば、この上位テーブルセグメントに対応する特定の最上位テーブルセグメントを更新する処理が実行される。
【０１５９】
この後、キャッシュコントローラ１５１は、ステップＳ５３でＮＡＮＤ型フラッシュメモリ５に書きまれた各更新済みセグメントの状態を更新済みから未更新へ変更する（ステップＳ５４）。状態が未更新へ変更されたセグメントは、後に、置き換え対象に選択され、テーブルキャッシュ６１から追い出される場合がある。この追い出されたセグメントに対応する特定の上位テーブルセグメントは既に最新の状態に更新されている。この追い出されたセグメントを参照する必要がある場合には、この特定の上位テーブルセグメントを参照することにより、この追い出されたセグメントが格納されているＮＡＮＤ型フラッシュメモリ５内の最新の記憶位置を取得することができる。
【０１６０】
図３２のフローチャートは、図２９のステップＳ２５で実行される優先度情報更新処理の手順を示す。
上位テーブルヒット回数が所定回数に達した場合、優先度調整部１５３は、現在の累積スコアを閾値と比較する（ステップＳ６１）。この累積スコアが閾値を下回った場合（ステップＳ６２のＹＥＳ）、優先度調整部１５３は、上位テーブル優先フラグをＴｒｕｅにセットする（ステップＳ６３）。
【０１６１】
この累積スコアが閾値以上である場合（ステップＳ６２のＮＯ）、優先度調整部１５３は、上位テーブル優先フラグをＦａｌｓｅにセットする（ステップＳ６４）。
ステップＳ６３またはステップＳ６４の処理の後、アクセス履歴情報管理部１５２は、上位テーブルヒット回数および累積スコアの各々を初期値にリセットする（ステップＳ６５）。上位テーブルヒット回数および累積スコアがリセットされた後、次の期間のアクセス傾向を評価するために、上位テーブルヒットが起きる度にアクセス履歴情報更新処理が実行される。
【０１６２】
なお、上位テーブル優先モードのイネーブル／ディセーブルの切り替え動作がヒステリシス特性を有するように、上位テーブル優先フラグの現在の状態に応じて、累積スコアと比較される閾値を変更してもよい。
現在の上位テーブル優先フラグがＦａｌｓｅであるならば、優先度調整部１５３は、累積スコアを第１の閾値と比較する。累積スコアが第１の閾値を下回った場合、優先度調整部１５３は、上位テーブル優先フラグをＴｒｕｅにセットする。累積スコアが第１の閾値を下回らなかった場合、優先度調整部１５３は、上位テーブル優先フラグをＦａｌｓｅに維持する。
【０１６３】
現在の上位テーブル優先フラグがＴｒｕｅであるならば、優先度調整部１５３は、累積スコアを第１の閾値よりも高いまたは低い第２の閾値と比較する。累積スコアが第２の閾値以上である場合、優先度調整部１５３は、上位テーブル優先フラグをＦａｌｓｅに変更する。累積スコアが第２の閾値未満である場合、優先度調整部１５３は、上位テーブル優先フラグをＴｒｕｅに維持する。なお、例えば、上位テーブル優先モードがイネーブルからディセーブルになりづらくしたい場合は、第２の閾値を第１の閾値より高くしてもよい。上位テーブル優先モードがイネーブルからディセーブルになりやすくしたいのであれば、第２の閾値を第１の閾値より低くしてもよい。
【０１６４】
図３３は、アクセス履歴情報として利用可能な他の様々なパラメータ（アクセスされた論理アドレス、アクセス時刻、多段マッピングテーブルの各階層レベルのヒット回数、多段マッピングテーブルの各階層のアクセス回数、等）を示す。
本実施形態では使用していないが、アクセスした論理アドレス、アクセス時刻、各階層レベルのヒット回数、各階層レベルのアクセス回数、等をアクセス履歴情報として収集してもよい。
【０１６５】
また、複数の階層レベルの各々について、累積スコアを個別に算出してもよい。例えば、階層レベル１、階層レベル２、階層レベル３に対応する３種類のテーブルセグメントをテーブルキャッシュ６１にキャッシュする場合を想定する。上述したように、階層レベル３のテーブルは、ホスト２から受信されたデータが書き込まれたＮＡＮＤ型フラッシュメモリ５内の物理アドレスを管理するためのテーブルである。階層レベル２のテーブルは、階層レベル３のテーブルセグメントそれぞれが書き込まれたＮＡＮＤ型フラッシュメモリ５内の物理アドレスを管理するためのテーブルである。階層レベル１のテーブルは、階層レベル２のテーブルセグメントそれぞれが書き込まれたＮＡＮＤ型フラッシュメモリ５内の物理アドレスを管理するためのテーブルである。例えば、階層レベル１の各セグメントによってカバーされる論理アドレス範囲が最も広く、次に、階層レベル２の各セグメントによってカバーされる論理アドレス範囲が広く、階層レベル３の各セグメントによってカバーされる論理アドレス範囲が最も狭い。
【０１６６】
階層レベル１のテーブルセグメントがヒットした場合には、アクセス履歴情報管理部１５２は、このヒットしたテーブルセグメントの現在のＬＲＵ順位に対応するスコアを、この階層レベル１に対応するスコア加算値テーブルから取得し、このスコアを階層レベル１に対応する累積スコアに加算する。階層レベル２のテーブルセグメントがヒットした場合には、アクセス履歴情報管理部１５２は、このヒットしたテーブルセグメントの現在のＬＲＵ順位に対応するスコアを、この階層レベル２に対応するスコア加算値テーブルから取得し、このスコアを階層レベル２に対応する累積スコアに加算する。階層レベル３のテーブルセグメントがヒットした場合には、アクセス履歴情報管理部１５２は、このヒットしたテーブルセグメントの現在のＬＲＵ順位に対応するスコアを、この階層レベル３に対応するスコア加算値テーブルから取得し、このスコアを階層レベル３に対応する累積スコアに加算する。
【０１６７】
このようにして、階層レベル毎に累積スコアを算出することにより、キャッシュされているテーブルセグメントに対する参照の偏り度合いを階層レベル毎に評価できるので、この評価結果に基づいて、階層レベルそれぞれに対応する優先度を設定してもよい。
【０１６８】
図３４のフローチャートは、ホスト２によるライトアクセスに関するアクセス傾向またはホスト２によるリードアクセスに関するアクセス傾向のいずれか一方を無視する処理の手順を示す。
本実施形態では、ホスト２のアクセス傾向に基づいて上位テーブルおよび下位テーブルそれぞれに対応する優先度が決定される。
【０１６９】
この場合、リードアクセスに関するアクセス傾向のみに着目するケースにおいては、ホスト２よるライトアクセスに関するアクセス傾向は無視し、リードアクセスに関するアクセス傾向のみに基づいて上位テーブルおよび下位テーブルそれぞれに対応する優先度を決定してもよい。これにより、たとえライトアクセスが狭域アクセスで、且つリードアクセスが広域アクセスであるような場合であっても、注目すべきリードアクセスに関するアクセス傾向（広域アクセス）に適したモード、つまり上位テーブル優先モード、をイネーブルにすることができる。
【０１７０】
あるいは、ライトアクセスに関するアクセス傾向に着目するケースにおいては、ホスト２よるリードアクセスに関するアクセス傾向は無視し、ライトアクセスに関するアクセス傾向のみに基づいて上位テーブルおよび下位テーブルそれぞれに対応する優先度を決定してもよい。
【０１７１】
ホスト２よるライトアクセスに関するアクセス傾向を無視するケース、つまりホスト２によるライトアクセスに起因するテーブルキャッシュ６１の参照傾向を無視するケースにおいては、アクセス履歴情報管理部１５２は、アドレス更新処理において起きた上位テーブルセグメントのキャッシュヒットを、累積スコアに、つまりキャッシュされている上位テーブルセグメントに対する参照の偏り度合いを示す値に反映しない。
【０１７２】
一方、ホスト２よるリードアクセスに関するアクセス傾向を無視するケース、つまりホスト２によるリードアクセスに起因するテーブルキャッシュ６１の参照傾向を無視するケースにおいては、アクセス履歴情報管理部１５２は、アドレス解決処理において起きた上位テーブルセグメントのキャッシュヒットを、累積スコアに、つまりキャッシュされている上位テーブルセグメントに対する参照の偏り度合いを示す値に反映しない。
【０１７３】
コントローラ４（例えばＣＰＵ１２）は、ライトアクセスに関するアクセス傾向を無視すべきことを、あるいはリードアクセスに関するアクセス傾向を無視すべきことを、キャッシュコントローラ１５１に指示してもよい。
ホスト２からライト要求が受信された場合（ステップＳ７１のＹＥＳ）、キャッシュコントローラ１５１は、このライト要求に対応するライトデータが書き込まれたＮＡＮＤ型フラッシュメモリ５内の物理位置を示す物理アドレスがこのライト要求によって指定された論理アドレスにマッピングされるように、テーブルキャッシュ６１をアクセスしてマッピング情報を更新する。
【０１７４】
キャッシュコントローラ１５１は、ライトアクセスに関するアクセス傾向を無視すべきことが指示されているか否かを判定する（ステップＳ７２）。
ライトアクセスに関するアクセス傾向を無視すべきことが指示されている場合（ステップＳ７２のＹＥＳ）、たとえ目的の上位テーブルセグメントがヒットした場合であっても、キャッシュコントローラ１５１は、上位テーブルセグメントのヒットが起きたことを示す情報（アクセス履歴）を、アクセス履歴情報管理部１５２に渡さない。これにより、アクセス履歴情報管理部１５２は、アクセス履歴情報（上位テーブルヒット回数、累積スコア）を更新しない（ステップＳ７３）。上述したように、累積スコアは、テーブルキャッシュ６１に格納されている上位テーブルセグメントに対する参照の偏り度合いを表す値である。一方、ライトアクセスに関するアクセス傾向を無視すべきことが指示されていない場合（ステップＳ７２のＮＯ）、目的の上位テーブルセグメントがヒットした場合には、キャッシュコントローラ１５１は上位テーブルセグメントのヒットが起きたことを示す情報（アクセス履歴）をアクセス履歴情報管理部１５２に渡し、アクセス履歴情報管理部１５２はアクセス履歴情報（上位テーブルヒット回数、累積スコア）を更新する（ステップＳ７３）。
【０１７５】
ホスト２からリード要求が受信された場合（ステップＳ７１のＮＯ）、キャッシュコントローラ１５１は、リード要求によって指定された論理アドレスに対応する物理アドレスを含むマッピング情報を参照するためにテーブルキャッシュ６１を検索する。
キャッシュコントローラ１５１は、リードアクセスに関するアクセス傾向を無視すべきことが指示されているか否かを判定する（ステップＳ７５）。
【０１７６】
リードアクセスに関するアクセス傾向を無視すべきことが指示されている場合（ステップＳ７５のＹＥＳ）、たとえ目的の上位テーブルセグメントがヒットした場合であっても、キャッシュコントローラ１５１は、上位テーブルセグメントのヒットが起きたことを示す情報（アクセス履歴）を、アクセス履歴情報管理部１５２に渡さない。これにより、アクセス履歴情報管理部１５２は、アクセス履歴情報（上位テーブルヒット回数、累積スコア）を更新しない（ステップＳ７６）。一方、リードアクセスに関するアクセス傾向を無視すべきことが指示されていない場合（ステップＳ７５のＮＯ）、目的の上位テーブルセグメントがヒットした場合には、キャッシュコントローラ１５１は上位テーブルセグメントのヒットが起きたことを示す情報（アクセス履歴）をアクセス履歴情報管理部１５２に渡し、アクセス履歴情報管理部１５２はアクセス履歴情報（上位テーブルヒット回数、累積スコア）を更新する（ステップＳ７７）。
【０１７７】
なお、図３４で説明した処理は、キャッシュされる複数の階層レベルそれぞれの累積スコアを算出する構成にも適用することができる。この場合、ホスト２によるライトアクセスに起因するテーブルキャッシュ６１の参照傾向を無視するケースにおいては、アクセス履歴情報管理部１５２は、アドレス更新処理において起きた各階層レベルのテーブルセグメントのキャッシュヒットを、各階層レベルの累積スコアに、つまり階層レベルごとの参照の偏り度合いを示す値に反映しない。一方、ホスト２によるリードアクセスに起因するテーブルキャッシュ６１の参照傾向を無視するケースにおいては、アクセス履歴情報管理部１５２は、アドレス解決処理において起きた各階層レベルのテーブルセグメントのキャッシュヒットを、各階層レベルの累積スコアに、つまり階層レベルごとの参照の偏り度合いを示す値に反映しない。
【０１７８】
図３５は、ＳＳＤ３によって管理される複数のネームスペースそれぞれに対応する複数の領域を示す。
図３５においては、コントローラ４が、ホスト２から受信されるネームスペース作成要求それぞれ応じて、ネームスペースＮＳ＃１、ネームスペースＮＳ＃２、…、ネームスペースＮＳ＃ｎを作成したケースが想定されている。この場合、ホスト２から見えるＳＳＤ容量（ＳＳＤ３のユーザ容量）は、ネームスペースＮＳ＃１に対応する領域＃１、ネームスペースＮＳ＃２に対応する領域＃２、…、ネームスペースＮＳ＃ｎに対応する領域＃ｎに論理的に分割される。
【０１７９】
図３６に示すように、各ネームスペースには、論理アドレス空間（ＬＢＡ範囲）が割り当てられる。ＬＢＡ範囲のサイズ（つまりＬＢＡの数）は、領域（ネームスペース）毎に可変である。ホスト２は、ネームスペース作成要求によって、作成すべきネームスペースのＬＢＡ範囲のサイズを指定することがとできる。一般に、各ネームスペースに割り当てられるべきＬＢＡ範囲は、ＬＢＡ０から始まる。
【０１８０】
図３７は、複数のネームスペースそれぞれに対応するテーブルキャッシュ毎に優先度情報を個別に調整するためのＳＳＤ３の構成例を示す。
ホスト２から受信される各リード／ライト要求は、論理アドレス、データ長に加え、アクセス対象のネームスペースの識別子（ＮＳＩＤ）を指定するパラメータも含む。ネームスペースＮＳ＃１のＮＳＩＤを指定するライト要求をホスト２から受信した場合、コントローラ４は、このライト要求に対応するライトデータをネームスペースＮＳ＃１に対応するＮＡＮＤ型フラッシュメモリ５の領域＃１に書き込む。また、ネームスペースＮＳ＃２のＮＳＩＤを指定するライト要求をホスト２から受信した場合、コントローラ４は、このライト要求に対応するライトデータをネームスペースＮＳ＃２に対応するＮＡＮＤ型フラッシュメモリ５の領域＃２に書き込む。なお、ＮＡＮＤ型フラッシュメモリ５の領域＃１、＃２は別々に管理されていなくてもよい。
【０１８１】
以下では、図示の簡単化のために、ネームスペースＮＳ＃１およびネームスペースＮＳ＃２の２つのネームスペースが作成されている場合を想定する。
ネームスペースＮＳ＃１に対応する論理アドレスそれぞれと物理アドレスそれぞれと間のマッピングは、このネームスペースＮＳ＃１用の多段マッピングテーブル８Ａによって管理される。同様に、ネームスペースＮＳ＃２に対応する論理アドレスそれぞれと物理アドレスそれぞれと間のマッピングは、このネームスペースＮＳ＃２用の多段マッピングテーブル８Ｂによって管理される。
【０１８２】
多段マッピングテーブル８Ａおよび多段マッピングテーブル８Ｂの各々は、図５、図６で説明した多段マッピングテーブル８と同様の構造を有している。多段マッピングテーブル８Ａの下位テーブルおよび上位テーブルの各々の一部はＲＡＭ５上に存在するネームスペースＮＳ＃１用のテーブルキャッシュ６１Ａにキャッシュされる。多段マッピングテーブル８Ａの最上位テーブル全体はテーブルキャッシュ６１Ａとは異なるＲＡＭ５内の記憶領域に格納される。
【０１８３】
同様に、多段マッピングテーブル８Ｂの下位テーブルおよび上位テーブルの各々の一部はＲＡＭ５上に存在するネームスペースＮＳ＃２用のテーブルキャッシュ６１Ｂにキャッシュされる。多段マッピングテーブル８Ｂの最上位テーブル全体はテーブルキャッシュ６１Ａ、６１Ｂとは異なるＲＡＭ５内の記憶領域に格納される。
【０１８４】
コントローラ４は、テーブルキャッシュ６１Ａ、６１Ｂのそれぞれについて、キャッシュされている上位テーブルセグメントに対する参照の偏り度合いを個別に評価する。
すなわち、コントローラ４は、テーブルキャッシュ６１Ａ、６１Ｂにそれぞれ対応するアクセス履歴情報管理部１５２Ａ、１５２Ｂと、テーブルキャッシュ６１Ａ、６１Ｂにそれぞれ対応する優先度調整部１５３Ａ、１５３Ｂとを含む。
【０１８５】
アクセス履歴情報管理部１５２Ａは、テーブルキャッシュ６１Ａに対応する上位テーブルヒット回数および累積スコアをネームスペースＮＳ＃１のアクセス履歴情報として管理する。アクセス履歴情報管理部１５２Ｂは、テーブルキャッシュ６１Ｂに対応する上位テーブルヒット回数および累積スコアをネームスペースＮＳ＃２のアクセス履歴情報として管理する。
【０１８６】
優先度調整部１５３Ａは、テーブルキャッシュ６１Ａに対応する累積スコアを閾値と比較し、その比較結果に基づいて、ネームスペースＮＳ＃１に対応する上位テーブル優先フラグをＴｒｕｅまたはＦａｌｓｅに設定する。
優先度調整部１５３Ｂは、テーブルキャッシュ６１Ｂに対応する累積スコアを閾値と比較し、その比較結果に基づいて、ネームスペースＮＳ＃２に対応する上位テーブル優先フラグをＴｒｕｅまたはＦａｌｓｅに設定する。
【０１８７】
ネームスペースＮＳ＃１に対応する多段マッピングテーブル８ＡとネームスペースＮＳ＃２に対応する多段マッピングテーブル８Ｂは互いに別個の多段マッピングテーブルであってもよいが、図３８に示すように、多段マッピングテーブルの論理アドレス空間内の第１の論理アドレス範囲＃１および第２の論理アドレス範囲＃２に、ネームスペースＮＳ＃１用の論理アドレス範囲およびネームスペースＮＳ＃２用の論理アドレス範囲をそれぞれ割り当て、第１の論理アドレス範囲＃１に対応する多段マッピングテーブル内の一部分をネームスペースＮＳ＃１用の多段マッピングテーブル８Ａとして使用し、第２の論理アドレス範囲＃２に対応する多段マッピングテーブル内の別の部分をネームスペースＮＳ＃２用の多段マッピングテーブル８Ｂとして使用してもよい。
【０１８８】
図３９は、ネームスペース毎に個別に管理されるアクセス履歴情報と優先度情報とを示す。
ネームスペースＮＳ＃１に関しては、ネームスペースＮＳ＃１用のテーブルキャッシュ６１Ａの参照傾向に基づいて上位テープルヒット回数および累積スコアがネームスペースＮＳ＃１用のアクセス履歴情報として管理される。さらに、ネームスペースＮＳ＃１に対応する上位テーブル優先フラグが、ネームスペースＮＳ＃１用の優先度情報として管理される。
【０１８９】
同様に、ネームスペースＮＳ＃２に関しては、ネームスペースＮＳ＃２用のテーブルキャッシュ６１Ｂの参照傾向に基づいて上位テープルヒット回数および累積スコアがネームスペースＮＳ＃２用のアクセス履歴情報として管理される。さらに、ネームスペースＮＳ＃２に対応する上位テーブル優先フラグが、ネームスペースＮＳ＃２用の優先度情報として管理される。
【０１９０】
テーブルキャッシュ６１Ａ，６１Ｂの各々がより多くの階層レベルに対応するセグメントそれぞれをキャッシュするケースにおいては、これら階層レベルそれぞれに対応するヒット回数とこれら階層レベルそれぞれに対応する累積スコアとがアクセス履歴情報として管理されてもよい。また、これら階層レベルそれぞれに対応する優先度が優先度情報として管理されてもよい。
【０１９１】
例えば、テーブルキャッシュ６１Ａにおいて、階層レベル１のテーブルセグメントがヒットした場合には、アクセス履歴情報管理部１５２Ａは、このヒットしたテーブルセグメントの現在のＬＲＵ順位に対応するスコアを、この階層レベル１に対応するスコア加算値テーブルから取得し、このスコアを階層レベル１に対応する累積スコアに加算する。テーブルキャッシュ６１Ａにおいて、階層レベル２のテーブルセグメントがヒットした場合には、アクセス履歴情報管理部１５２Ａは、このヒットしたテーブルセグメントの現在のＬＲＵ順位に対応するスコアを、この階層レベル２に対応するスコア加算値テーブルから取得し、このスコアを階層レベル２に対応する累積スコアに加算する。テーブルキャッシュ６１Ａにおいて、階層レベル３のテーブルセグメントがヒットした場合には、アクセス履歴情報管理部１５２Ａは、このヒットしたテーブルセグメントの現在のＬＲＵ順位に対応するスコアを、この階層レベル３に対応するスコア加算値テーブルから取得し、このスコアを階層レベル３に対応する累積スコアに加算する。このようにして、階層レベル毎に累積スコアを算出することにより、テーブルキャッシュ６１Ａにキャッシュされているテーブルセグメントに対する参照の偏り度合いを階層レベル毎に評価できるので、この評価結果に基づいて、階層レベルそれぞれに対応する優先度を設定することができる。この結果、テーブルキャッシュ６１Ａに３階層レベル以上のテーブルセグメントをキャッシュする場合においても、階層レベルごとの累積スコアに基づいて階層レベルごとに優先度を設定でき、そして高い優先度を有する階層レベルのセグメントそれぞれを低い優先度を有する階層レベルのセグメントそれぞれよりも優先してテーブルキャッシュ６１Ａにキャッシュすることができる。
【０１９２】
テーブルキャッシュ６１Ｂにおいても、階層レベル毎に累積スコアを算出する処理と、階層レベルごとの累積スコアに基づいて階層レベルごとに優先度を設定する処理とが実行される。この結果、テーブルキャッシュ６１Ｂに３階層レベル以上のテーブルセグメントをキャッシュする場合においても、階層レベルごとの累積スコアに基づいて階層レベルごとに優先度を設定でき、そして高い優先度を有する階層レベルのセグメントそれぞれを低い優先度を有する階層レベルのセグメントそれぞれよりも優先してテーブルキャッシュ６１Ａにキャッシュすることができる。
【０１９３】
図４０のフローチャートは、複数のネームスペース内のネームスペースＮＳ＃１に対して実行される優先度情報更新処理の手順を示す。
優先度調整部１５３Ａは、ＮＳ＃１に対する累積スコアを閾値と比較する（ステップＳ８１）。ＮＳ＃１に対する累積スコアが閾値を下回った場合（ステップＳ８２のＹＥＳ）、優先度調整部１５３Ａは対応するＮＳ＃１に対応する上位テーブル優先フラグをＴｒｕｅにセットする（ステップＳ８３）。
【０１９４】
一方、ＮＳ＃１に対する累積スコアが閾値を下回っていない場合（ステップＳ８２のＮＯ）、優先度調整部１５３Ａは対応するＮＳ＃１に対応する上位テーブル優先フラグをＦａｌｓｅにセットする（ステップＳ８４）。
そして、優先度調整部１５３Ａは、ＮＳ＃１に対応する上位テーブルヒット回数およびＮＳ＃１に対応する累積スコアの各々を初期値にリセットし（ステップＳ８５）、優先度情報更新処理を終了する。
【０１９５】
図４１のフローチャートは、複数のネームスペース内のネームスペースＮＳ＃２に対して実行される優先度情報更新処理の手順を示す。
優先度調整部１５３Ｂは、ＮＳ＃２に対する累積スコアを閾値と比較する（ステップＳ９１）。ＮＳ＃２に対する累積スコアが閾値を下回った場合（ステップＳ９２のＹＥＳ）、優先度調整部１５３Ｂは対応するＮＳ＃２に対応する上位テーブル優先フラグをＴｒｕｅにセットする（ステップＳ９３）。
【０１９６】
一方、ＮＳ＃２に対する累積スコアが閾値を下回っていない場合（ステップＳ９２のＮＯ）、優先度調整部１５３Ｂは対応するＮＳ＃２に対応する上位テーブル優先フラグをＦａｌｓｅにセットする（ステップＳ９４）。
そして、優先度調整部１５３Ｂは、ＮＳ＃２に対応する上位テーブルヒット回数およびＮＳ＃２に対応する累積スコアの各々を初期値にリセットし（ステップＳ９５）、優先度情報更新処理を終了する。
【０１９７】
図４０、図４１では、上位テーブルの累積スコアに基づいて上位テーブルの優先度を設定する処理について説明したが、テーブルキャッシュ６１Ａ，６１Ｂの各々がより多くの階層レベルに対応するセグメントそれぞれをキャッシュするケースにおいては、上述したように、複数の階層レベルそれぞれに対応する複数の累積スコアに基づいてこれら複数の階層レベルそれぞれに対する優先度が設定されてもよい。つまり、テーブルキャッシュ６１Ａ，６１Ｂの各々について、階層レベルごとの累積スコアに基づいて階層レベルごとに優先度が設定される。そしてテーブルキャッシュ６１Ａ，６１Ｂの各々において、高い優先度を有する階層レベルのセグメントそれぞれを低い優先度を有する階層レベルのセグメントそれぞれよりも優先してキャッシュする動作が実行される。
【０１９８】
図４２、図４３は、ホスト２による個々のネームスペースに対するアクセスの頻度に基づいて、複数のネームスペースそれぞれに対応する複数のテーブルキャッシュに割り当てるべきメモリ容量を調整する動作を示す。なお、アクセスの頻度のみならず、これら複数のネームスペースそれぞれに対応する複数のテーブルキャッシュに対応する累積スコアに基づいて、複数のネームスペースそれぞれに対応する複数のテーブルキャッシュに割り当てるべきメモリ容量を調整する動作が実行されてもよい。
【０１９９】
またキャッシュサイズ（キャッシュ容量）を調整する際には、使用されるべき閾値を調整されたキャッシュ容量に応じて調整する処理も実行されてもよい。
例えば、ＮＳ＃１へのアクセス頻度が高く、ＮＳ＃２へのアクセス頻度が低い場合、キャッシュコントローラ１５１は、図４２に示すように、テーブルキャッシュ６１Ａに割り当てるＲＡＭ６上の容量を増加させ、代わりにテーブルキャッシュ６１Ｂに割り当てるＲＡＭ６上の容量を減少させる。これにより、ホスト２によってアクセスされる頻度が高いネームスペースに対応するテーブルキャッシュのサイズを増やすことができるので、高い頻度でアクセスされるこのテーブルキャッシュのヒット率を向上させることができる。
【０２００】
一方、ＮＳ＃１へのアクセス頻度が低く、ＮＳ＃２へのアクセス頻度が高い場合、キャッシュコントローラ１５１は、図４３に示すように、テーブルキャッシュ６１Ａのキャッシュ容量を減少させ、テーブルキャッシュ６１Ｂのキャッシュ容量を増加させる。
【０２０１】
あるいは、テーブルキャッシュ６１Ａの累積スコアとテーブルキャッシュ６１Ｂの累積スコアとの関係に基づいて、例えば、アクセス傾向が広域アクセスであると判断されるキャッシュのサイズが増加されるように、テーブルキャッシュ６１Ａおよびテーブルキャッシュ６１Ｂに割り当てるべきメモリ容量が調整されてもよい。
【０２０２】
このように、本実施形態では、（ｉ）ホスト２による複数のネームスペースそれぞれに対するアクセスの頻度、および（ｉｉ）各テーブルキャッシュに対応する階層レベルごとの累積スコア、の少なくとも一方に基づいて、これらテーブルキャッシュそれぞれのサイズが調整される。尚、これらテーブルキャッシュそれぞれのサイズを調整する処理は、コントローラ４（例えばＣＰＵ１２）によって実行されてもよい。
【０２０３】
（第２実施形態）
図４４を参照して、第２実施形態に係るストレージシステムを含む情報処理システム１の構成を説明する。
このストレージシステムは、複数のストレージデバイスを含むストレージアレイ１００として実現されている。ストレージアレイ１００に含まれる複数のストレージデバイスはＳＳＤであってもよいし、ハードディスクドライブ（ＨＤＤ）であってもよい。以下では、ストレージアレイ１００に含まれる複数のストレージデバイスがＳＳＤである場合を想定する。
【０２０４】
ストレージアレイ１００は、コントローラ１０１、ＲＡＭ１０２、複数のＳＳＤ２００−１〜２００−ｎを備える。コントローラ１０１は、これらＳＳＤ２００−１〜２００−ｎそれぞれを論理ボリュームとして管理する。この論理ボリュームの容量は、ＳＳＤ２００−１〜２００−ｎそれぞれの容量の合計に相当する。ホスト２は、ストレージアレイ１００を一つのストレージデバイスとして認識する。あるいは、コントローラ１０１は、複数のネームスペースをサポートする機能を有していてもよい。この場合には、ホスト２から見えるストレージアレイ１００の容量（ユーザ容量）は複数のネームスペースに対応する複数の領域に論理的に分割される。したがって、ホスト２は、ストレージアレイ１００を複数の領域（複数のストレージデバイス）として扱うことができる。
【０２０５】
ＳＳＤ２００−１〜２００−ｎの各々は、論理物理アドレス変換テーブルとして機能するルックアップテーブル（ＬＵＴ）を管理している。
多段マッピングテーブル３００は、ホスト２によって指定される第１タイプの論理アドレスそれぞれとＳＳＤ２００−１〜２００−ｎをアクセスするための第２タイプの論理アドレスそれぞれとの間のマッピングを管理するために使用される。多段マッピングテーブル３００は、図５、図６で説明した多段マッピングテーブル８と同様に、階層化された複数のテーブルを含む。多段マッピングテーブル３００は、ＳＳＤ２００−１〜２００−ｎのいずれか一つに格納されてもよいし、ＳＳＤ２００−１〜２００−ｎの幾つかのＳＳＤに分散されていてもよい。
【０２０６】
多段マッピングテーブル３００の一部はテーブルキャッシュ３１１にキャッシュされる。テーブルキャッシュ３１１はＲＡＭ１０２の記憶領域に配置されてもよいし、あるいは高速なＳＳＤなどのストレージデバイスの記憶領域に配置されてもよい。
コントローラ１０１は、ＳＳＤ２００−１〜２００−ｎとテーブルキャッシュ３１１とを制御する。コントローラ１０１は、テーブルキャッシュ３１１に格納されている階層レベルそれぞれに対応するセグメント（アドレス変換データ部分）を参照することによって、第１タイプの論理アドレスを第２タイプの論理アドレスに変換するためのアドレス解決処理と、第２タイプの論理アドレスを更新するアドレス更新処理とを実行する。
【０２０７】
コントローラ１０１は、キャッシュコントローラ４０１、アクセス履歴情報管理部４０２、および優先度調整部４０３を含む。キャッシュコントローラ４０１、アクセス履歴情報管理部４０２、および優先度調整部４０３は、図２３で説明したキャッシュコントローラ１５１、アクセス履歴情報管理部１５２、および優先度調整部１５３と同様に構成されている。
【０２０８】
図４５は、マッピングテーブルの例を示す。
図４５では、第１タイプの論理アドレスはグローバル論理アドレスとして示されている。グローバル論理アドレス０に対応するデータがＳＳＤ（＃１）２００−１のＬＢＡ１００に書き込まれた場合、ＳＳＤ（＃１）２００−１の識別子（ＩＤ＃１）と、ＬＢＡ１００とが、グローバル論理アドレス０に対応する第２タイプの論理アドレスとしてマッピングテーブルに登録される。グローバル論理アドレス１に対応するデータがＳＳＤ（＃１）２００−１のＬＢＡ１１０に書き込まれた場合、ＳＳＤ（＃１）２００−１の識別子（ＩＤ＃１）と、ＬＢＡ１１０とが、グローバル論理アドレス１に対応する第２タイプの論理アドレスとしてマッピングテーブルに登録される。同様に、グローバル論理アドレス２に対応するデータがＳＳＤ（＃２）２００−２のＬＢＡ５０に書き込まれた場合、ＳＳＤ（＃２）２００−２の識別子（ＩＤ＃２）と、ＬＢＡ５０とが、グローバル論理アドレス２に対応する第２タイプの論理アドレスとしてマッピングテーブルに登録される。
【０２０９】
本実施形態では、このマッピングテーブルは、階層構造を有する上述の多段マッピングテーブル３００として実現されている。
図４６に示されているように、多段マッピングテーブル３００の下位テーブル３０１は、セグメントと称される複数のデータ部分（アドレス変換データ部分）＃０、＃１、＃２、…＃１２７、…、を含む。下位テーブル３０１の一つのセグメント（一つのアドレス変換データ部分）は、例えば、連続する１２８個のマッピング情報の集合である。換言すれば、下位テーブル３０１の各セグメント、つまり下位テーブル３０１の各アドレス変換データ部分は、例えば４ＫｉＢの刻みで連続する１２８個の第１タイプの論理アドレスにそれぞれ対応する１２８個の第２タイプの論理アドレスをマッピング情報として含む。各第２タイプの論理アドレスは、ある第１タイプの論理アドレスに対応するデータが書き込まれたＳＳＤの識別子（デバイスＩＤ）とこのデータが書き込まれたこのＳＳＤの論理アドレス（ローカル論理アドレス）とを示す。このように、下位テーブル３０１は、第２タイプの論理アドレスそれぞれを管理する複数のセグメント（アドレス変換データ部分）を含む。以下では、下位テーブル３０１に属するセグメントは下位テーブルセグメントとしても参照される。
【０２１０】
多段マッピングテーブル３００の上位テーブル３０２も、セグメントと称される複数のデータ部分（アドレス変換データ部分）＃０、＃１、＃２、…を含む。上位テーブル３０２の一つのセグメント（一つのアドレス変換データ部分）は、例えば、連続する１２８個の下位テーブルセグメントそれぞれが格納されているＳＳＤ内の位置を示す第２タイプの論理アドレスを管理する。各下位テーブルセグメントはＳＳＤ２００−１〜２００−ｎ内のどのＳＳＤに格納されていてもよい。上位テーブル３０２の各セグメントが１２８個の下位テーブルセグメントの位置を示すので、上位テーブル３０２に含まれるセグメントの数は下位テーブルセグメントの数の１／１２８である。以下では、上位テーブル３０２のセグメントは上位テーブルセグメントとしても参照される。
【０２１１】
多段マッピングテーブル３００の最上位テーブル３０３は、複数のポインタを含む。これらポインタは、全ての上位テーブルセグメントそれぞれが格納されているＳＳＤ内の位置を示す第２タイプの論理アドレスを管理する。各上位テーブルセグメントもＳＳＤ２００−１〜２００−ｎ内のどのＳＳＤに格納されていてもよい。
【０２１２】
第２実施形態においても、第１実施形態と同様に、テーブルキャッシュ３１１に格納されているセグメントに対する、階層レベルごとの参照の偏り度合いに基づいて、階層レベルごとに優先度が設定される。そして、高い優先度を有する階層レベルのセグメントそれぞれを低い優先度を有する階層レベルのセグメントそれぞれよりも優先してテーブルキャッシュ３１１にキャッシュする動作が実行される
以下では、テーブルキャッシュ３１１に２つの階層レベルに対応する２種類のセグメント（上位テーブルセグメント、下位テーブルセグメント）のみがキャッシュされるケースを例示して、第２実施形態の動作を説明する。
【０２１３】
テーブルキャッシュ３１１にキャッシュされる上位テーブルセグメントに対する参照の偏り度合いを示す累積スコアが閾値を下回る場合には、ホスト２の現在のアクセス傾向が広域アクセスであると推定される。そして、上位テーブルの優先度が上げられ、上位テーブルセグメントを下位テーブルセグメントよりも優先してテーブルキャッシュ３１１にキャッシュするための上位テーブル優先モードがイネーブルとなる。これにより、広域アクセス時のアドレス解決処理およびアドレス更新処理のために必要なより多くの上位テーブルセグメントをテーブルキャッシュ３１１に載せることが可能となり、テーブルキャッシュ３１１のヒット率を向上させることができる。
【０２１４】
一方、キャッシュされる上位テーブルセグメントに対する参照の偏り度合いを示す累積スコアが閾値以上である場合には、ホスト２の現在のアクセス傾向が狭域アクセスであると推定される。そして、上位テーブルの優先度が下げられ、上位テーブル優先モードはディセーブルとなる。これにより、参照される頻度が高い特定の一つ又は幾つかの上位テーブルセグメントと多くの下位テーブルセグメントとをテーブルキャッシュ３１１に載せることが可能となり、テーブルキャッシュ３１１のヒット率を向上させることができる。
【０２１５】
このように、テーブルキャッシュ３１１にキャッシュされている上位テーブルセグメントに対する参照の偏り度合いに基づいて、（ｉ）上位テーブルセグメントそれぞれを下位テーブルセグメントそれぞれよりも優先してテーブルキャッシュ３１１にキャッシュする動作（上位テーブル優先モードがイネーブル）と、（ｉｉ）上位テーブルセグメントそれぞれを下位テーブルセグメントそれぞれよりも優先せずに、下位テーブルセグメントそれぞれと上位テーブルセグメントそれぞれをテーブルキャッシュ３１１にキャッシュする動作（上位テーブル優先モードがディセーブル）とが選択的に実行される。
【０２１６】
上位テーブルセグメントを下位テーブルセグメントよりも優先してテーブルキャッシュ３１１にキャッシュする処理においては、下位テーブルセグメントそれぞれを上位テーブルセグメントよりも優先して置換対象として選択する動作が行われる。
上位テーブルセグメントを下位テーブルセグメントよりも優先せずに、上位テーブルセグメントと下位テーブルセグメントとをテーブルキャッシュ３１１にキャッシュする処理においては、置換対象候補が上位テーブルセグメントであるか下位テーブルセグメントであるかは考慮されず、ＬＲＵ置換アルゴリズム等に基づいて置換対象候補から置換対象セグメントが選択される。
【０２１７】
なお、第２実施形態においても、上位テーブル優先モードのイネーブル／ディセーブルの切り替え動作がヒステリシス特性を有するように、上位テーブル優先フラグの現在の状態に応じて、累積スコアと比較される閾値を変更してもよい。
この場合、現在の上位テーブル優先フラグがＦａｌｓｅであるならば、累積スコアは第１の閾値と比較される。累積スコアが第１の閾値を下回った場合、上位テーブル優先フラグがＴｒｕｅにセットされる。累積スコアが第１の閾値を下回らなかった場合、上位テーブル優先フラグがＦａｌｓｅに維持される。
【０２１８】
現在の上位テーブル優先フラグがＴｒｕｅであるならば、つまり、上位テーブルセグメントそれぞれを下位テーブルセグメントそれぞれよりも優先してテーブルキャッシュ３１１にキャッシュする動作が実行されている期間においては、累積スコアは第１の閾値よりも高いまたは低い第２の閾値と比較される。累積スコアが第２の閾値以上になった場合、上位テーブル優先フラグがＦａｌｓｅに変更される。そして、上位テーブルセグメントそれぞれを下位テーブルセグメントそれぞれよりも優先せずに、下位テーブルセグメントそれぞれと上位テーブルセグメントそれぞれをテーブルキャッシュ３１１にキャッシュする動作が実行される。
【０２１９】
なお、第２実施形態においても、第１実施形態と同様に、テーブルキャッシュ３１１により多くの階層レベルのセグメントをキャッシュするケースにおいては、キャッシュされている複数の階層レベルそれぞれに対応する累積スコアが算出されてもよい。そして、算出された階層ごとの累積スコアに基づいて、階層ごとに優先度が設定されてもよい。
【０２２０】
また、第２実施形態においても、第１実施形態と同様に、ホスト２によるライトアクセスまたはリードアクセスの一方を無視して、ホスト２によるアクセス傾向を評価してもよい。
また、第２実施形態においても、第１実施形態と同様に、複数のネームスペースに対応する複数のテーブルキャッシュが管理されてもよい。この場合、コントローラ１０１内のキャッシュコントローラ４０１は、複数のネームスペースに対応する複数の多段マッピングテーブルそれぞれの一部をキャッシュするように構成された複数のテーブルキャッシュを制御する。例えば、ネームスペースＮＳ＃１のＮＳＩＤを指定するライトまたはリード要求をホスト２から受信した場合、キャッシュコントローラ４０１は、ネームスペースＮＳ＃１用のテーブルキャッシュを参照する。また、ネームスペースＮＳ＃２のＮＳＩＤを指定するライトまたはリード要求をホスト２から受信した場合、キャッシュコントローラ４０１は、ネームスペースＮＳ＃２用のテーブルキャッシュを参照する。そして、優先度調整部４０３は、複数のテーブルキャッシュのそれぞれに対応する累積スコアを評価し、この評価結果に基づいて、下位テーブルおよび上位テーブルそれぞれに対応する優先度をテーブルキャッシュ毎に個別に設定する。
【０２２１】
また、第２実施形態においても、第１実施形態と同様に、コントローラ１０１は、（ｉ）ホスト２による複数のネームスペースそれぞれに対するアクセスの頻度、および（ｉｉ）各テーブルキャッシュに対応する階層レベルごとの累積スコア、の少なくとも一方に基づいて、これらテーブルキャッシュそれぞれのサイズを調整してもよい。
【０２２２】
以上説明したように、第１実施形態および第２実施形態によれば、キャッシュされている階層レベルごとの参照の偏り度合いに基づいて、階層ごとに優先度が設定され、そして高い優先度を有する階層レベルのセグメントそれぞれを低い優先度を有する階層レベルのセグメントそれぞれよりも優先してキャッシュする動作が実行される。よって、ホスト２によるアクセス傾向に応じて、優先してキャッシュされる階層レベルの順番を調整することができる。
【０２２３】
例えば、テーブルキャッシュ内の上位テーブルセグメントに着目した場合には、テーブルキャッシュ内の上位テーブルセグメントに対する参照の偏り度合いが閾値を下回る場合、上位テーブルの階層レベルに対応する優先度が上げられる、上位テーブル優先フラグがＴｒｕｅに設定される。これにより、上位テーブルセグメントそれぞれを下位テーブルセグメントそれぞれよりも優先してテーブルキャッシュにキャッシュする動作が実行される。
【０２２４】
多数の上位テーブルセグメントが参照される広域アクセス時には、テーブルキャッシュ内の上位テーブルセグメントに対する参照の偏り度合いは弱くなる。したがって、テーブルキャッシュ内の上位テーブルセグメントに対する参照の偏り度合いが閾値を下回ることを条件に上位テーブル優先フラグをＴｒｕｅに設定することにより、適切なタイミングで、上位テーブルセグメントそれぞれを下位テーブルセグメントよりも優先してテーブルキャッシュにキャッシュする動作を開始することが可能となる。この結果、アドレス変換に関する性能を改善することができる。
【０２２５】
また、テーブルキャッシュ内の上位テーブルセグメントに対する参照の偏り度合いが閾値を下回るという条件が満たされない場合には（狭域アクセス）、上位テーブルセグメントそれぞれを下位テーブルセグメントよりも優先せずに、上位テーブルセグメントそれぞれと下位テーブルセグメントそれぞれとをテーブルキャッシュにキャッシュする動作が実行される。
【０２２６】
よって、図１２で説明したように、狭域アクセス時においては、ＳＳＤがアクセスされる平均回数をほぼ１回にすることができ、広域アクセス時においては、ＳＳＤがアクセスされる平均回数をほぼ２回にすることができる。
なお、第１実施形態では、不揮発性メモリとしてＮＡＮＤ型フラッシュメモリを例示した。しかし、本実施形態の機能は、例えば、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＲＡＭ（Ｐｈａｓｅ  ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又は、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような他の様々な不揮発性メモリにも適用できる。
【０２２７】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２２８】
２…ホスト、３…ＳＳＤ、４…コントローラ、５…ＮＡＮＤ型フラッシュメモリ、７…ユーザデータ、８…多段マッピングテーブル、６１…テーブルキャッシュ、１５１…キャッシュコントローラ、１５２…アクセス履歴情報管理部、１５３…優先度調整部。
【図１】
2020046917.tif 000003
【図２】
2020046917.tif 000004
【図３】
2020046917.tif 000005
【図４】
2020046917.tif 000006
【図５】
2020046917.tif 000007
【図６】
2020046917.tif 000008
【図７】
2020046917.tif 000009
【図８】
2020046917.tif 000010
【図９】
2020046917.tif 000011
【図１０】
2020046917.tif 000012
【図１１】
2020046917.tif 000013
【図１２】
2020046917.tif 000014
【図１３】
2020046917.tif 000015
【図１４】
2020046917.tif 000016
【図１５】
2020046917.tif 000017
【図１６】
2020046917.tif 000018
【図１７】
2020046917.tif 000019
【図１８】
2020046917.tif 000020
【図１９】
2020046917.tif 000021
【図２０】
2020046917.tif 000022
【図２１】
2020046917.tif 000023
【図２２】
2020046917.tif 000024
【図２３】
2020046917.tif 000025
【図２４】
2020046917.tif 000026
【図２５】
2020046917.tif 000027
【図２６】
2020046917.tif 000028
【図２７】
2020046917.tif 000029
【図２８】
2020046917.tif 000030
【図２９】
2020046917.tif 000031
【図３０】
2020046917.tif 000032
【図３１】
2020046917.tif 000033
【図３２】
2020046917.tif 000034
【図３３】
2020046917.tif 000035
【図３４】
2020046917.tif 000036
【図３５】
2020046917.tif 000037
【図３６】
2020046917.tif 000038
【図３７】
2020046917.tif 000039
【図３８】
2020046917.tif 000040
【図３９】
2020046917.tif 000041
【図４０】
2020046917.tif 000042
【図４１】
2020046917.tif 000043
【図４２】
2020046917.tif 000044
【図４３】
2020046917.tif 000045
【図４４】
2020046917.tif 000046
【図４５】
2020046917.tif 000047
【図４６】
2020046917.tif 000048