(57)【要約】半導体メモリデバイスが、記憶素子群（１以上の半導体記憶素子）と、メモリコントローラとを有する。メモリコントローラが、上位装置からのＩ／Ｏコマンドの少なくとも一部が所定の条件を満たしている場合にそのＩ／Ｏコマンドの少なくとも一部を処理するプロセッサと、そのＩ／Ｏコマンドが所定の条件を満たしてない場合にＩ／Ｏコマンドの全てを処理する１以上のハードウェアロジック回路とを有する。
2016071954.tif 000002
【特許請求の範囲】
【請求項１】
上位装置からのＩ／Ｏ（Input/Output）コマンドの少なくとも一部が所定の条件を満たしている場合に前記Ｉ／Ｏコマンドの少なくとも一部を処理するプロセッサと、前記Ｉ／Ｏコマンドが前記所定の条件を満たしてない場合に前記Ｉ／Ｏコマンドの全てを処理する１以上のハードウェアロジック回路とを有するメモリコントローラと、
前記Ｉ／Ｏコマンドに従うＩ／Ｏ対象データの少なくとも一部であり前記メモリコントローラにより入出力されるデータを記憶する１以上の半導体記憶素子である記憶素子群と
を有する半導体メモリデバイス。
【請求項２】
前記メモリコントローラが、一時記憶領域を有し、
前記Ｉ／Ｏコマンドの少なくとも一部が所定の条件を満たしている場合とは、前記Ｉ／Ｏ対象データの少なくとも一部が前記一時記憶領域に記憶されている場合である、
請求項１記載の半導体メモリデバイス。
【請求項３】
複数のハードウェアロジック回路が、
前記Ｉ／Ｏコマンドを複数のサブＩ／Ｏコマンドに分割するハードウェアロジック回路であるコマンド分割ユニットと、
前記複数のサブＩ／Ｏコマンドの各々についてサブＩ／Ｏコマンドに従うサブＩ／Ｏ対象データが前記一時記憶領域に記憶されているか否かを判定するハードウェアロジック回路である判定ユニットと
を含み、
前記一時記憶領域にサブＩ／Ｏ対象データが記憶されていると判定されたサブＩ／Ｏコマンドが、前記プロセッサにより処理される、
請求項２記載の半導体メモリデバイス。
【請求項４】
前記メモリコントローラが、上位蔵置に提供する論理空間が所定サイズで区分された単位論理領域毎に単位論理領域の論理アドレスと前記記憶素子群の物理アドレスとの対応関係を管理し、
前記コマンド分割ユニットは、前記所定サイズと同サイズのサブＩ／Ｏ対象データのＩ／ＯのためのサブＩ／Ｏコマンドに前記Ｉ／Ｏコマンドを分割する、
請求項３記載の半導体メモリデバイス。
【請求項５】
前記記憶素子群は、複数の物理領域で構成されており、物理領域単位でデータが入出力されるようになっており、
前記コマンド分割ユニットは、物理領域サイズと同サイズのサブＩ／Ｏ対象データのＩ／ＯのためのサブＩ／Ｏコマンドに前記Ｉ／Ｏコマンドを分割する、
請求項３記載の半導体メモリデバイス。
【請求項６】
前記メモリコントローラは、複数の記憶素子インターフェースを有し、
前記複数の記憶素子インターフェースの各々に、１以上の記憶素子が接続されており、
前記Ｉ／Ｏコマンドは、リードコマンドであり、
前記複数のサブＩ／Ｏコマンドは、それぞれ、複数のサブリードコマンドであり、
前記複数のハードウェアロジック回路が、２以上のサブリードコマンドにそれぞれ対応した２以上の物理領域にそれぞれ接続されている２以上の記憶素子インターフェースを、前記２以上の物理領域からそれぞれ並列に２以上のサブリードデータを読み出すよう、並列に起動するハードウェアロジック回路であるコマンド内部処理ユニットを含む、
請求項３記載の半導体メモリデバイス。
【請求項７】
前記Ｉ／Ｏコマンドは、リードコマンドであり、
前記複数のサブＩ／Ｏコマンドは、それぞれ、複数のサブリードコマンドであり、
前記複数のハードウェアロジック回路が、登録されたサブリードコマンドに対応した物理領域からサブリードデータを読み出すハードウェアロジック回路であるコマンド内部処理ユニットを含み、
前記プロセッサは、サブリードコマンドの処理と並列に、前記一時記憶領域内のデータを削除又は変更し論理アドレスと物理アドレスの対応関係を更新することを含んだ処理である別処理を行うようになっており、
前記プロセッサは、サブリードデータが前記一時記憶領域に記憶されていると判定された後にそのサブリードデータが前記一時記憶領域に無いと判定された場合、そのサブリードデータに対応したサブリードコマンドを前記コマンド内部処理ユニットに登録する、
請求項３記載の半導体メモリデバイス。
【請求項８】
前記Ｉ／Ｏコマンドは、ライトコマンドであり、
前記複数のサブＩ／Ｏコマンドは、それぞれ、複数のサブライトコマンドであり、
前記プロセッサは、サブライトコマンドの処理と並列に、前記一時記憶領域内のデータを削除又は変更し論理アドレスと物理アドレスの対応関係を更新することを含んだ処理である別処理を行うようになっており、
前記プロセッサは、前記サブライトコマンドに従うサブライトデータである新サブライトデータの格納先領域が前記一時記憶領域から確保されており且つ前記新サブライトデータにより更新されるサブライトデータである旧サブライトデータが前記一時記憶領域に記憶されている場合、前記旧サブライトデータが格納されている領域を前記一時記憶領域から解放する、
請求項３記載の半導体メモリデバイス。
【請求項９】
前記複数のサブライトコマンドにそれぞれ対応した複数のサブリードコマンドが前記一時記憶領域に格納された場合に、前記１以上のハードウェアロジック回路のうちの所定のハードウェアロジック回路が、前記ライトコマンドの完了を前記上位装置に通知する、
請求項８記載の半導体メモリデバイス。
【請求項１０】
前記一時記憶領域は、バッファである、
請求項２記載の半導体メモリデバイス。
【請求項１１】
前記１以上のハードウェアロジック回路の各々が、処理の結果を示す情報をログ領域に出力し、
前記プロセッサが、障害が発生した場合に、前記ログ領域に記憶されている情報から、障害部位及び障害内容のうちの少なくとも一方を特定する、
請求項１記載の半導体メモリデバイス。
【請求項１２】
前記記憶素子群が、複数の高速物理領域と複数の低速物理領域とを含み、
前記メモリコントローラにより前記上位装置に提供される論理空間が、高速物理領域が割り当てられる論理領域である高速論理領域と、低速物理領域が割り当てられる論理領域である低速論理領域とに区分されており、
前記高速論理領域に属する論理アドレスが指定されたＩ／Ｏコマンドの処理を、前記１以上のハードウェアロジック回路の少なくとも１つが担当し前記プロセッサは担当せず、
前記低速論理領域に属する論理アドレスが指定されたＩ／Ｏコマンドの処理を、前記１以上のハードウェアロジック回路のうちの少なくとも１つに加え前記プロセッサが担当する、
請求項１記載の半導体メモリデバイス。
【請求項１３】
前記メモリコントローラは、上位装置からPCI-Expressに従いＩ／Ｏコマンドを受信する、
請求項１記載の半導体メモリデバイス。
【請求項１４】
複数の半導体メモリデバイスと、
ホスト計算機からのＩ／Ｏ要求に基づき前記複数の半導体メモリデバイスの少なくとも１つの各々にＩ／Ｏコマンドを送信するストレージコントローラと
を有し、
前記複数の半導体メモリデバイスの少なくとも１つの各々が、
前記ストレージコントローラからのＩ／Ｏコマンドの少なくとも一部が所定の条件を満たしている場合に前記Ｉ／Ｏコマンドの少なくとも一部を処理するプロセッサと、前記Ｉ／Ｏコマンドが前記所定の条件を満たしてない場合に前記Ｉ／Ｏコマンドの全てを処理する１以上のハードウェアロジック回路とを有するメモリコントローラと、
前記Ｉ／Ｏコマンドに従うＩ／Ｏ対象データの少なくとも一部であり前記メモリコントローラにより入出力されるデータを記憶する１以上の半導体記憶素子である記憶素子群と
を有する、
ストレージ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、半導体記憶素子に対するデータのＩ／Ｏ（Input/Output）の制御に関する。
【背景技術】
【０００２】
半導体記憶素子（例えばNAND  Flash  Memory）の製造プロセス微細化により、半導体記憶素子の適用先が広がっている。特に、サーバ等のエンタープライズ分野では、ＨＤＤ（Hard  Disk  Drive）に代えて、半導体記憶素子を有する半導体メモリデバイス（例えば、ＳＳＤ（Solid  State  Drive）を採用する例が増加している。【０００３】
ＳＳＤは、内部に複数の半導体記憶素子を搭載し、これら半導体記憶素子を並列に制御することで、短期間に大量のデータについての書き込みと読み出し（Ｉ／Ｏ処理）を実現する（例えば特許文献１）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】US2013/0238836
【発明の概要】
【発明が解決しようとする課題】
【０００５】
近年、ＳＡＴＡ（Serial  ATA）等の低速なＨＤＤ互換インターフェースに代えて、PCI-Express等のより高速なインターフェースを採用したＳＳＤが発表されている。高速なインターフェースを採用したＳＳＤについては、より高いＩ／Ｏ処理性能が望まれる。なぜなら、インターフェースが高速でも内部のＩ／Ｏ処理性能が低いと、内部のＩ／Ｏ処理性能がボトルネックとなるからである。ＳＳＤが採用するインターフェースが高速であるか否かに関わらず、Ｉ／Ｏ処理性能の向上は望まれる。【０００６】
Ｉ／Ｏ処理性能の向上のためには、例えば、より多くの半導体記憶素子を並列に制御する必要がある。ＳＳＤ内部の複数の半導体記憶素子の並列制御は、一般的に、ＳＳＤ内部の組み込みプロセッサが行う。このため、ＳＳＤ内の組み込みプロセッサの処理性能の限界によって並列制御可能な半導体記憶素子の数が制限され、ＳＳＤのＩ／Ｏ処理性能を制限してしまう事が考えられる。以下、ＳＳＤ内の組み込みプロセッサの処理性能の限界によってＳＳＤのＩ／Ｏ処理性能が制限されることを、「組み込みプロセッサ処理性能ネック」と記す。【０００７】
組み込みプロセッサ処理性能ネックの解消の方法として、例えばＩ／Ｏ処理を専用のハードウェアにて実行することが考えられる。しかし、専用ハードウェアは、動的にリソースを確保したり複雑な処理を実行したりすることが困難であり、さらには、ソフトウェア（コンピュータプログラム）のように改変が容易でなく、採用されるメモリ（例えば主記憶又は半導体記憶素子）の仕様の変更やメモリ構成の変化に対応できない場合が生じる。また、バグ発見時の修正がソフトウェアと比べて困難なことから開発リスクの増加というデメリットがある。【０００８】
ＳＳＤでは、搭載した半導体記憶素子の最小消去単位と最小書き込み単位が異なっていた場合（例えばNAND  Flash  Memory）、消去単位に含まれてしまうが消せないデータを退避させる（所謂リクラメーション）処理が必須となる。こうした制御では、退避するデータがなるべく少ない領域を消去処理対象の領域として選択する複雑な制御が必要となる。また、搭載した半導体記憶素子が書換え回数に制限を有する場合、ＳＳＤに搭載する複数の半導体記憶素子の領域ごとの書換え回数を平準化する（所謂ウェアレベリング）処理が必須となる。こうした制御では、領域毎の書換え回数を管理し、利用する領域を適切に選択する複雑な処理が必要となる。【０００９】
上記のリクラメーション、ウェアレベリング等の複雑な処理を行う、ハードウェアの設計は困難である。また、こうした制御は、半導体メモリデバイスに搭載する半導体記憶素子の種別により、大きく変化する。例えば、必要となるウェアレベリング制御の精度は、半導体記憶素子の劣化耐性により大きく異なる。このため、仮にウェアレベリングをハードウェアにて実装した場合、採用可能な半導体記憶素子の種別に制限が生じる可能性がある。【００１０】
一方、Ｉ／Ｏ処理をプロセッサにて実行する場合、コマンドの検知や各種制御をシリアルに行う必要があり、Ｉ／Ｏ処理に時間を要するという問題もある。
【課題を解決するための手段】
【００１１】
半導体メモリデバイスが、記憶素子群（１以上の半導体記憶素子）と、メモリコントローラとを有する。メモリコントローラが、上位装置からのＩ／Ｏコマンドの少なくとも一部が所定の条件を満たしている場合にそのＩ／Ｏコマンドの少なくとも一部を処理するプロセッサと、そのＩ／Ｏコマンドが所定の条件を満たしてない場合にＩ／Ｏコマンドの全てを処理する１以上のハードウェアロジック回路とを有する。
【発明の効果】
【００１２】
Ｉ／Ｏ処理を行う組み込みプロセッサの処理性能ネックが回避され、半導体メモリデバイスの高性能化と応答時間の短縮が期待できる。
【図面の簡単な説明】
【００１３】
【図１】実施形態に係るフラッシュメモリ（ＦＭ）モジュールの内部構成を示す図である。
【図２】ライトコマンド処理の一部でありライトコマンド受信処理を示す。
【図３】ライトコマンド処理の残りでありライトコマンド応答処理を示す。
【図４】リードコマンド処理の一部でありリードコマンド受信処理を示す。
【図５】リードコマンド処理の残りでありリードコマンド応答処理を示す。
【図６】論物変換テーブルを示す。
【図７】ブロック管理テーブルを示す。
【図８】サブライトヒットコマンド処理のフロー図である。
【図９】サブリードヒットコマンド処理のフロー図である。
【図１０】デステージ処理のフロー図である。
【図１１】リクラメーション処理のフロー図である。
【図１２】上位装置の一例を示す。
【図１３】上位装置の別の例を示す。
【発明を実行するための形態】
【００１４】
以下、一実施形態を説明する。なお、本発明は、以下に説明する実施形態に限定されるものではない。
【００１５】
なお、以下の説明では、「ａｂｃテーブル」の表現にて情報を説明することがあるが、情報は、テーブル以外のデータ構成で表現されていてもよい。データ構成に依存しないことを示すために「ａｂｃテーブル」のうちの少なくとも１つを「ａｂｃ情報」と呼ぶことができる。
【００１６】
また、以下の説明では、半導体メモリデバイスが有する半導体記憶素子は、不揮発性半導体記憶素子であり、具体的には、NAND  Flash  Memoryのようなフラッシュメモリ（ＦＭ）であるとする。従って、半導体メモリデバイスは、不揮発性半導体メモリデバイスであり、具体的には、ＦＭモジュールであるとする。ＦＭモジュールは、ＳＳＤのようなＦＭデバイスの一例である。不揮発性半導体記憶素子は、ＦＭに限らず、例えば、磁気抵抗メモリであるＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、抵抗変化型メモリであるＲｅＲＡＭ（ｒｅｓｉｓｔａｎｃｅ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、強誘電体メモリであるＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）等でもよい。また、不揮発性半導体記憶素子に代えて揮発性半導体記憶素子が採用されてもよい。
【００１７】
また、以下の説明では、ＦＭは、複数の「物理ブロック」で構成され、各物理ブロックは、複数の「物理ページ」で構成されているとする。また、アクセス単位領域よりも消去単位領域の方が大きい。具体的には、物理ページ単位でデータがアクセス（リード及びライト）され、物理ブロック単位でデータが消去される。また、ＦＭモジュールが提供する論理空間（論理アドレス空間）には、物理領域が所定の単位（例えばページ単位又はブロック単位）で割り当てられるが、論理空間のうち、物理ブロックが割り当てられている範囲を「論理ブロック」と言い、物理ページが割り当てられている範囲を「論理ページ」と言うことができる。ＦＭは、追記型、具体的には、物理ページが割り当てられている論理ページがライト先の場合、ライト先論理ページに、割当て済の物理ページに代えて新たに空き物理ページが割り当てられ、新たに割り当てられた物理ページにデータが書き込まれる。各論理ページについて、新たに割り当てられた物理ページに書き込まれたデータ（最新のデータ）は「有効データ」であり、有効データが書き込まれている物理ページは「有効ページ」であり、過去に割り当てられていた物理ページに格納されているデータ（過去のデータ）は「無効データ」であり、無効データが書き込まれている物理ページは「無効ページ」である。
【００１８】
（１−１）ＦＭモジュールの構成
【００１９】
まず、図１を用いて、本実施形態に係るＦＭモジュール１００の内部構成を説明する。
【００２０】
図１は、ＦＭモジュール１００の内部構成を示す図である。
【００２１】
ＦＭモジュール１００は、複数（例えば３２）のＦＭ１４０であるＦＭ群と、複数のＦＭ１４０に接続されたＦＭコントローラ１１０とを有する。ＦＭコントローラ１１０は、複数のデバイス、例えば、プロセッサ１２３、ＲＡＭ（Random  Access  Memory）１２２、データコンプレッサ（データ圧縮/解凍ユニット）１１６、パリティジェネレータ（パリティ生成ユニット）１１５、データキャッシュ１１４、Ｉ／Ｏインターフェース１１８、ＦＭインターフェース１２４、コマンド外部処理ユニット１１９、コマンド内部処理ユニット１２０、コピーＤＭＡ（Direct  Memory  Access）ユニット１２１、キャッシュヒット判定ユニット１１１、キャッシュ登録ユニット１１２、コマンド分割ユニット１１３、及び、スイッチ１１７を備えている。キャッシュヒット判定ユニット１１１、キャッシュ登録ユニット１１２、コマンド分割ユニット１１３、コマンド外部処理ユニット１１９及びコマンド内部処理ユニット１２０が、それぞれ、Ｉ／Ｏ処理の一部を実行するハードウェア（ハードウェアロジック回路）である。以下、Ｉ／Ｏ処理の一部を実行するハードウェア（ハードウェアロジック回路）を、特に、「Ｉ／Ｏハードウェア」と呼んでよい。本実施形態で言う「Ｉ／Ｏ処理」とは、上位装置からのＩ／Ｏコマンドの処理であり、具体的には、ライトコマンド処理（図２に示す処理と図３に示す処理から成る処理）と、リードコマンド処理（図４に示す処理と図５に示す処理から成る処理）である。また、「上位装置」は、ＦＭモジュール１００にＩ／Ｏコマンドを送信する装置である。例えば、図１２によれば、ホスト計算機１３００が、上位装置である。また、例えば、図１３によれば、ストレージコントローラ１２０１が、上位装置である。具体的には、ストレージ装置１２００において、複数のＦＭモジュール１００がそれぞれストレージコントローラ１２０１に接続されており、ストレージコントローラ１２０１が、ホスト計算機１２５０からＩ／Ｏ要求を受信し、そのＩ／Ｏ要求を基に、ＦＭモジュール１００にＩ／Ｏコマンドを送信する。図１２において、ホスト計算機１３００とＦＭモジュール１００間は、ＰＣＩｅ（PCI  Express）のような高速のインターフェース経由で通信してよい。図１３において、ストレージコントローラ１２０１とＦＭモジュール１００間も、ＰＣＩｅのような高速のインターフェース経由で通信してよい。
【００２２】
再び図１を参照する。スイッチ１１７には、プロセッサ１２３、ＲＡＭ１２２、データコンプレッサ１１６、パリティジェネレータ１１５、データキャッシュ１１４、Ｉ／Ｏインターフェース１１８、ＦＭインターフェース１２４、キャッシュヒット判定ユニット１１１、キャッシュ登録ユニット１１２、コマンド分割ユニット１１３、コマンド外部処理ユニット１１９、コマンド内部処理ユニット１２０及びコピーＤＭＡユニット１２１が接続されている。スイッチ１１７は、デバイス（要素）間のデータをアドレス（又はＩＤ）によってルーティングし転送する。なお、本実施形態では、図１に示すように、単一のスイッチ１１７に各デバイスがスター状に接続された例について記すが、本発明は、この例に限定されるものではない。デバイス間が通信可能に接続されていればよい。
【００２３】
Ｉ／Ｏインターフェース１１８は、上位装置と接続するデバイスである。Ｉ／Ｏインターフェース１１８は、スイッチ１１７を介してＦＭコントローラ１１０における別のデバイスと通信可能である。Ｉ／Ｏインターフェース１１８は、上位装置からＩ／Ｏコマンド（ライトコマンド／リードコマンド）を受信する。Ｉ／Ｏコマンドでは、Ｉ／Ｏ先（ライト先又はリード元）を表す論理アドレス（典型的にＬＢＡ（Logical  Block  Address））が指定されている。Ｉ／Ｏコマンドがライトコマンドの場合、Ｉ／Ｏインターフェース１１８は、ライトコマンドに従うライト対象のデータ（以下、「ライトデータ」と言うことがある）を受信する。Ｉ／Ｏインターフェース１１８は、受信したライトデータを、ＲＡＭ１２２に記録する。また、Ｉ／Ｏインターフェース１１８は、上位装置からコマンドを受信した際に、プロセッサ１２３に割り込みを行うか、またはプロセッサ１２３がポーリングしているＲＡＭ１２２上の記憶領域にコマンドを受信したことを通知するデータを書き込む。
【００２４】
プロセッサ１２３は、スイッチ１１７を介してＦＭコントローラ１１０の他のデバイスと通信する。プロセッサ１２３は、ＲＡＭ１２２に記憶されているプログラム及び管理テーブルを基にＦＭコントローラ１１０全体を制御する。また、プロセッサ１２３は、定期的な情報取得（例えばＲＡＭ１２２に対するポーリング）、及び割り込み受信機能によって、ＦＭコントローラ１１０全体を監視する。
【００２５】
データキャッシュ１１４は、一時記憶領域の一例であり、ＦＭコントローラ１１０における転送対象のデータを一時的に記憶する。本実施形態では、データキャッシュ１１４は、読み出されたデータが残らないバッファであるが、読み出されたデータが残るキャッシュメモリのような記憶領域でもよい。
【００２６】
複数のＦＭインターフェース１２４がＦＭコントローラ１１０に設けられており、複数のＦＭインターフェース１２４を介して、並列に複数のＦＭ１４０に対してＩ／Ｏを行うことができる。１のＦＭインターフェース１２４に、１のバスが接続されており、１のバスに、２のＦＭ１４０が接続されている。本実施形態では、１６のＦＭインターフェース１２４が、存在し、故に、１６のバスが存在し、結果として、３２のＦＭが存在する。ＦＭインターフェース１２４は、Ｉ／Ｏ先のＦＭ１４０にＣＥ（Chip  Enable）信号を出すことで、同一バスに接続された２のＦＭをそれぞれ独立して制御することができる。
【００２７】
ＦＭインターフェース１２４は、プロセッサ１２３（又はＩ／Ｏハードウェア（例えばコマンド内部処理ユニット１２０））より指示されるＩ／Ｏ指示（ライト指示／リード指示）に応じて動作する。Ｉ／Ｏ指示では、Ｉ／Ｏ先を表す情報として、例えば、チップ番号（ＦＭ１４０の識別番号）、ブロック番号（ＦＭ１４０における物理ブロックの識別番号）、（ＦＭ１４０における物理ブロック内の物理ページの識別番号）が指定されている。Ｉ／Ｏ指示がリード指示の場合、ＦＭインターフェース１２４は、リード指示に従うリード元領域（ＦＭ１４０内の物理ページ）から読み出されたデータをデータキャッシュ１１４に転送する（書き込む）。Ｉ／Ｏ指示がライト指示の場合、ＦＭインターフェース１２４は、ライト対象のデータをデータキャッシュ１１４から読み出し、そのデータを、ライト先に従うライト先領域（ＦＭ１４０内の物理ページ）に転送する（書き込む）。なお、ＦＭインターフェース１２４が、データキャッシュ１１４を経由せずにデータを上位装置に転送可能である場合、リード指示に従い読み出されたデータは、データキャッシュ１１４に格納されることなく上位装置に転送されてよい。
【００２８】
また、ＦＭインターフェース１２４は、ＥＣＣ（Error  Correction  Code  /  Error  Checking  and  Correction）生成回路、ＥＣＣによるデータ損失検出回路、ＥＣＣ訂正回路を有してよい。ＦＭインターフェース１２４は、データ書き込みの際、データに対してＥＣＣを付加してＦＭ１４０にデータを書き込んでよい。また、データ読み出しの際、ＦＭインターフェース１２４は、ＥＣＣによるデータ損失検出回路によって、ＦＭ１４０から読み出されたデータを検査し、データ損失が検出された際には、ＥＣＣ訂正回路によってデータ訂正を行ってよい。
【００２９】
データコンプレッサ１１６は、可逆圧縮のアルゴリズムを処理する機能を有し、複数種のアルゴリズムや、圧縮レベルの変更機能を備える。データコンプレッサ（データ圧縮/解凍ユニット）１１６は、プロセッサ１２３（又はＩ／Ｏハードウェア（例えばコマンド内部処理ユニット１２０））からの指示に従って、データキャッシュ１１４からデータをリードし、可逆圧縮のアルゴリズムによりデータ圧縮演算もしくはデータ圧縮の逆変換であるデータ解凍（伸長）演算を行い、その結果を再度データキャッシュに書き込む。なお、データコンプレッサ１１６は、ハードウェア（ロジック回路）として実装されてもよいし、圧縮／解凍のプログラムをプロセッサ１２３で処理することで、同様の機能が実現されてもよい。
【００３０】
パリティジェネレータ１１５は、ＸＯＲ演算、Even  Odd演算、リードソロモン演算等のパリティ生成機能を有している。パリティジェネレータ１１５は、プロセッサ１２３（又はＩ／Ｏハードウェア（例えばコマンド内部処理ユニット１２０））からの指示に従って、データキャッシュ１１４からパリティ生成対象となるデータをリードし、前述のパリティ生成機能により、ＲＡＩＤ５又はＲＡＩＤ６のパリティを生成する。
【００３１】
キャッシュヒット判定ユニット１１１は、上位装置からのＩ／Ｏコマンドで指定されたＩ／Ｏ先論理アドレス範囲（例えばＬＢＡ範囲）のデータがデータキャッシュ１１４内のキャッシュ領域に記録されているかを、キャッシュヒット判定テーブルを参照して判定するハードウェアである。
【００３２】
キャッシュ登録ユニット１１２は、上位装置からライトコマンドがあった場合に動作し、ライトデータをデータキャッシュ１１４内のキャッシュに格納したことを管理するため、キャッシュヒット判定テーブルを更新する。
【００３３】
コマンド分割ユニット１１３は、上位装置からのＩ／Ｏコマンドを複数のサブＩ／Ｏコマンドに分割するハードウェアである。コマンド分割ユニット１１３は、Ｉ／Ｏコマンドを、ＦＭモジュール１００内部のＬＢＡ管理単位に分割する。本実施形態では、上位装置から受信したＩ／Ｏコマンドを分割する例を説明するが、分割されるコマンドは、上位装置からのＩ／Ｏコマンドに限られない。
【００３４】
コマンド外部処理ユニット１１９は、上位装置とやり取りするコマンドの制御を行うハードウェアである。上位装置は、コマンド外部処理ユニット１１９のレジスタにアクセスすることで、ＦＭモジュール１００に対するコマンドを作成したことを通知する。通知を受けたコマンド外部処理ユニット１１９は、上位装置よりコマンドを取得する。
【００３５】
また、コマンド外部処理ユニット１１９は、上位装置からのコマンドが完了した際、そのコマンドの完了通知を上位装置に通知する。上位装置は、コマンド外部処理ユニット１１９のレジスタにアクセスすることで（例えば完了通知の受信を意味する情報をレジスタに書き込むことで）、ＦＭモジュール１００から完了通知を受信したことを通知する。
【００３６】
コマンド内部処理ユニット１２０は、ＦＭモジュール１００の内部のコマンド処理を行うハードウェアである。コマンド内部処理ユニット１２０は、実施形態において、キャッシュヒット判定ユニット１１１にて、リードコマンドを内部のＬＢＡ管理単位に分割したサブリードコマンドのリクエスト対象領域が、キャッシュに登録されていない場合、サブリードコマンドをＦＭインターフェース１２４用のコマンドに変換し、ＦＭインターフェース１２４にコマンドを作成したことを通知する。
【００３７】
コピーＤＭＡユニット１２１は、主にデータキャッシュ１１４のデータをコピーする際に動作するハードウェアである。コピーＤＭＡユニット１２１は、プロセッサ１２３からの指示に従って、データキャッシュ１１４内の記憶領域に記録されているデータを他の領域にコピーする。
【００３８】
以上説明した、スイッチ１１７、Ｉ／Ｏインターフェース１１８、プロセッサ１２３、データキャッシュ１１４、ＦＭインターフェース１２４、データコンプレッサ１１６、パリティジェネレータ１１５、キャッシュヒット判定ユニット１１１、キャッシュ登録ユニット１１２、コマンド分割ユニット１１３、コマンド外部処理ユニット１１９、コマンド内部処理ユニット１２０、コピーＤＭＡユニット１２１は、それぞれ、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＢＡ(Field  Programmable  Gate  Array)として、一つの半導体素子内で構成してもよいし、複数の個別専用ＩＣ（Integrated  Circuit）を相互に接続した構成であってもよい。
【００３９】
ＲＡＭ１２２は、典型的にはＤＲＡＭ（Dynamic  Random  Access  Memory）などの揮発性メモリが挙げられる。ＲＡＭ１２２は、ＦＭモジュール１００内で用いられるＦＭ１４０の管理テーブル、コマンド分割ユニットが作成するサブコマンド、ＤＭＡが用いる転送制御情報を含んだ転送リスト等を格納する。なお、ＲＡＭ１２２は、データを格納するデータキャッシュ１１４の機能の一部または全てを含みデータ格納に用いる構成としてもよい。
【００４０】
ここまで、図１を用いて、本実施形態に係るＦＭモジュール１００の構成を説明した。なお、本実施形態では、図１に示すように、ＦＭ１４０を搭載したＦＭモジュール１００について記述するが、搭載する不揮発性メモリは、ＦＭに限定されるものではない。Phase  Change  RAMやResistance  RAM等でもよい。
【００４１】
（１−２）第１の管理テーブル：論物変換テーブル
【００４２】
続いて、ＦＭモジュール１００が制御に用いる管理テーブルについて説明する。
【００４３】
ＦＭモジュール１００は、複数のＦＭ１４０（チップ）を搭載し、複数のブロック（物理ブロック）、複数のページ（物理ページ９により構成される記憶領域を管理し、上位装置に対しては、記憶領域として論理空間（論理領域）を提供する。ＦＭ１４０により構成される物理領域は、ＦＭモジュール１００内部のみで用いるアドレス空間に一意に対応づけて管理する。以下、このＦＭモジュール１００内部のみで用いる物理領域指定用アドレス空間を、ＰＢＡ（Physical  Block  Address）と記す。ＦＭコントローラ１１０は、複数のＰＢＡを、上位装置に提供する論理空間（アドレス空間）に対応した複数のＬＢＡ（Logical  Block  Address）に対応付けて管理する。
【００４４】
ＦＭモジュール１００の対応付け管理用の管理テーブルである論物変換テーブル６００について図６を用いて説明する。
【００４５】
図６は、論物変換テーブル６００を示す。
【００４６】
論物変換テーブル６００は、ＦＭモジュール１００内の記憶領域、例えばＲＡＭ１２２に格納されえちる。論物変換テーブル６００は、ＬＢＡ／ＰＢＡの組（対応付け）毎に、ＬＢＡ６０１、ＰＢＡ６０２及びＰＢＡ長６０３を有する。ＬＢＡ６０１は、ＬＢＡを示し、ＰＢＡ６０２は、ＰＢＡを示し、ＰＢＡ長６０３は、ＰＢＡの長さを示す。ＰＢＡの長さは、データコンプレッサ１１６によりデータが圧縮されたか否か等により異なる。Ｉ／Ｏコマンドがリードコマンドの場合、プロセッサ１２３又はＩ／Ｏハードウェア（例えばコマンド内部処理ユニット１２０）は、上位装置からのリードコマンドで指定されるＬＢＡに対応するＰＢＡ及びＰＢＡ長を論物変換テーブル６００から特定し、特定したＰＢＡ及びＰＢＡ長に対応した物理領域（ＦＭ群における領域）から読み出す。Ｉ／Ｏコマンドがライトコマンドの場合、プロセッサ１２３又はＩ／Ｏハードウェア（例えばコマンド内部処理ユニット１２０）は、上位装置からのライトコマンドで指定されるＬＢＡに対応するＰＢＡ（つまり更新前データが格納されている物理領域を示すＰＢＡ）を論物変換テーブル６００から特定し、特定したＰＢＡとは異なるＰＢＡ（ライトデータのライト先となる１以上の空きページに対応したＰＢＡ）とＰＢＡ長を決定する。プロセッサ１２３又はＩ／Ｏハードウェア（例えばコマンド内部処理ユニット１２０）は、決定したＰＢＡ及びＰＢＡ長を、論物変換テーブル６００の該当箇所（上位装置からのライトコマンドで指定されるＬＢＡに対応したフィールド）に記録する。この動作にて、論理領域上のデータの上書き可能とする。
【００４７】
ＬＢＡ６０１のカラムには、ＦＭモジュール１００が提供する論理空間に属するＬＢＡが所定サイズ（本実施形態では４ＫＢ）ごとに順に並んでいる。具体的には、論理空間が所定サイズに区分されており、単位論理領域毎に、エントリ（レコード）がテーブル６００に存在する。例えば、ＬＢＡ６０１内の数値１は、５１２バイトの１セクタを意味する。これは、本実施形態では、ＬＢＡとＰＢＡの対応付けが、４ＫＢ単位で管理されていることを意味する。このため、論理空間を分割する単位を管理単位と呼ぶこともできる。但し、本発明では、ＦＭモジュール１００のような半導体メモリデバイスについて、ＬＢＡのような論理アドレスとＰＢＡのような物理アドレスとの組（対応付け）が４ＫＢ単位にて管理することに限定されるものではない。ＬＢＡは如何なる単位で管理されてもよい。
【００４８】
ＰＢＡ６０２は、ＬＢＡに対応付けられた先頭ＰＢＡを示す。本実施形態では、ＰＢＡは、５１２バイト毎に管理される。図６の例では、ＬＢＡ「0x000_0000_0000」に対応付けられたＰＢＡとして、[XXX」というあるＰＢＡ値が対応付けられている。このＰＢＡ値は、ＦＭの記憶領域を一意に示すアドレスである。これにより、リードコマンドにＬＢＡ「0x000_0000_0000」が指定されていた場合、ＰＢＡ「XXX」が特定される。ＬＢＡに対応付けられたＰＢＡが無い場合（つまり、論理空間における空きの範囲については）、ＰＢＡ「未割当」が対応付けられる。
【００４９】
ＰＢＡ長６０３は、データの実際のサイズをセクタ数（１セクタ＝５１２バイト）で表現している。図６に示す例では、ＬＢＡ「0x000_0000_0000」を開始アドレスとする４ＫＢ（論理空間としては８セクタ）のデータの長さは、ＰＢＡ長「２」、５１２バイト×２セクタ＝１ＫＢの長さであることがわかる。従って、ＰＢＡ長「２」とＰＢＡ「XXX」とから、ＬＢＡ「0x000_0000_0000」を開始アドレスとする４ＫＢのデータは、ＰＢＡ「XXX」から「XXX+2」の１ＫＢの領域に圧縮して格納されていることがわかる。
【００５０】
なお、実施形態に示すＦＭモジュールは、データを圧縮して格納した例について示すが、本発明は、この例に限定されるものではない。データは圧縮して格納されていなくともよい。圧縮してデータを格納しない場合、論物変換テーブル６００にＰＢＡ長６０３のカラムは不要である。
【００５１】
（１−３）第２の管理テーブル：ブロック管理テーブル
【００５２】
続いて、ブロック管理テーブルについて図７を用いて説明する。
【００５３】
図７は、ブロック管理テーブル７００を示す。
【００５４】
ブロック管理テーブル７００は、ＦＭモジュール１００内の記憶領域、例えばＲＡＭ１２２に格納されており、例えば所定サイズのＰＢＡ毎に、ＰＢＡ７０１、チップ番号７０２、ブロック番号７０３及び無効ＰＢＡ量７０４を有する。
【００５５】
ＰＢＡ７０１は、ＦＭ群における物理領域を示す。なお、本実施形態では、ＰＢＡは、ブロック単位で区分して管理される。図７では、ＰＢＡ７０１は、先頭アドレスを示す。例えば、ＰＢＡ「0x000_0000_0000」は、「0x000_0000_0000」〜「0x000_000F_FFFF」のＰＢＡ範囲を示す。なお、図６と図７では、ＰＢＡの表現形式が異なっているが、ＰＢＡという点で同一である。
【００５６】
チップ番号７０２は、ＦＭ１４０（チップ）の識別番号を示す。ブロック番号７０３は、ブロック（物理ブロック）の識別番号を示す。
【００５７】
無効ＰＢＡ量７０４は、無効ＰＢＡ量を示す。無効ＰＢＡ量とは、論理空間への対応付けを解除されたＰＢＡ領域の量、つまり、無効領域（無効ページ）の総量（総サイズ）である。逆に、論理空間への対応付けがなされているＰＢＡ領域は、有効領域（有効ページ）である。無効ＰＢＡ領域は、データの上書きが不可能な不揮発性メモリにおいて、疑似的に上書きを実現しようとする際に必然的に生じるものである。具体的には、データ更新の際、他の未書き込みＰＢＡ領域に更新データを書き込み、論物変換テーブル６００のＰＢＡ６０２とＰＢＡ長６０３が、更新データのライト先のＰＢＡ領域の先頭アドレスと、更新データのＰＢＡ長に更新される。従って、更新前データが格納されているＰＢＡ領域の論理空間への対応付けは解除される。本実施形態では、ＦＭの最小消去単位であるブロック毎にこの無効ＰＢＡ量（例えば無効ページ数）がカウントされ、無効ＰＢＡ量が多いブロックが、優先的に、リクラメーション対象領域（リクラメーションの際のデータの移動元物理ブロック）として選択される。図７の例によれば、チップ番号「０」及びブロック番号「０」のブロックの無効ＰＢＡ量は、１６０ＫＢである。
【００５８】
本実施形態では、無効ＰＢＡ量がリクラメーション開始閾値以上となったブロックについて、リクラメーションが行われる。リクラメーションでは、移動元ブロック（無効ＰＢＡ量がリクラメーション開始閾値以上となったブロック）内の有効ＰＢＡ領域（有効ページ）から有効データが別のブロックに移動され、その結果、その有効ＰＢＡ領域が無効ＰＢＡ領域となり（つまり、移動元ブロックの全領域が無効ＰＢＡ領域となり）、その後、移動元ブロックに対し消去処理が行われる。その結果として、移動元ブロックが空きブロックとなる。リクラメーションでのデータ移動（データコピー）によりＦＭ１４０への書き込みが発生する。これにより、ＦＭ１４０の劣化が進展するとともに、データ移動動作としてＦＭモジュール１００のプロセッサ１２３やバス帯域などのリソースが消費され性能低下の要因ともなる。このため、有効ＰＢＡ領域内のデータの移動は可能な限り少ないことが望ましい。ＦＭコントローラ１１０は、ブロック管理テーブル７００を参照し、無効ＰＢＡ量７０４の値が大きい（無効ＰＢＡ領域を多く含む）ブロックを優先的に消去処理対象（移動元ブロック）として選択することで、移動されるデータの量を少なくすることができる。
【００５９】
なお、本実施形態では、無効ＰＢＡ量の管理が、論理空間への対応付けが解除された領域の量の管理であるが、本発明はこの管理単位に限定されるものではない。例えば、ページ数を単位として無効データの量が管理されてもよい。
【００６０】
以上で、ブロック管理テーブル７００について説明した。
【００６１】
（１−４）ライトコマンド処理及びリードコマンド処理
【００６２】
続いて、図２〜図５を用いて、ライトコマンド処理とリードコマンド処理を説明する。なお、コマンド外部処理ユニット１１９、コマンド分割ユニット１１３、キャッシュヒット判定ユニット１１１、キャッシュ登録ユニット１１２、コマンド内部処理ユニット１２０、及び、コピーＤＭＡユニット１２１の少なくとも１つの各々は、図２〜図５に模式的に示すように、処理を行う度にコマンド処理ログ１３２に処理状況を記録する。この機能により、複数段階にわたるライトコマンド処理及びリードコマンド処理の各々において、障害が生じたときプロセッサがコマンド処理ログ１３２を算出することで、障害箇所を特定する事が可能となる。コマンド処理ログ１３２は、図１に示したように例えばＲＡＭ１２２に記憶される。
【００６３】
また、コマンド外部処理ユニット１１９、コマンド分割ユニット１１３、キャッシュヒット判定ユニット１１１、キャッシュ登録ユニット１１２、コマンド内部処理ユニット１２０、及び、コピーＤＭＡユニット１２１の少なくとも１つの各々は、障害を検知（例えばタイムアウト）した際に、プロセッサ１２３に割り込む機能を有している。割り込みを受けたプロセッサ１２３は、前述のコマンド処理ログを解析することで障害箇所を特定する。
【００６４】
（１−４−１）ライトコマンド処理
【００６５】
図２及び図３は、ライトコマンド処理を示す。具体的には、図２は、ライトコマンド処理の一部でありライトコマンド受信処理を示す。図３は、ライトコマンド処理の残りでありライトコマンド応答処理を示す。
【００６６】
図２に示すように、上位装置からライトコマンドを受信したコマンド外部処理ユニット１１９が、受信したライトコマンドを、ユニット１１９の内部領域（例えばレジスタ）に登録する。コマンド外部処理ユニット１１９は、登録したライトコマンドの状態を、完了通知の受信待ちの状態とする。コマンド外部処理ユニット１１９は、コマンド分割ユニット１１３に、登録したライトコマンドを転送する。なお、コマンド外部処理ユニット１１９がライトコマンドを内部領域に登録する理由は、ハードウェアであるコマンド外部処理ユニット１１９が完了応答を上位装置に送信するためである（この理由は、リードコマンドの登録（図４参照）についても同様である）。すなわち、コマンド外部処理ユニット１１９にて、コマンド外部処理ユニット１１９が受信した各ライトコマンドについて、完了通知を送信済みか未送信かが管理される。完了通知が送信されたライトコマンドは、コマンド外部処理ユニット１１９から削除されてよい。
【００６７】
コマンド外部処理ユニット１１９からライトコマンドを受信したコマンド分割ユニット１１３は、ライトコマンドをサブライトコマンドに分割し、サブライトコマンドを、例えば内部領域（例えばユニット１１３のレジスタ）に登録する。ここで、ライトコマンドから得られるサブライトコマンドの数は、ライトデータのサイズを、内部管理単位（論理空間の単位論理領域）、言い換えれば、ページサイズで除算することにより得られる商（商が０の場合は１）でよい。例えば、ライトコマンドに従うライトデータのサイズが１６ＫＢであり、内部管理単位（ページサイズ）が４ＫＢの場合、得られるサブライトコマンドの数は、１６／４＝４でよい。コマンド分割ユニット１１３は、ライトコマンドとサブライトコマンドの対応関係を例えばユニット１１３の内部領域（例えばレジスタ）に登録する。対応関係は、例えば、ライトコマンドのＩＤ（例えば「Ａ」）と、そのライトコマンドから分割された複数のサブライトコマンドにそれぞれ対応した複数のＩＤ（例えば「Ａ−１」、「Ａ−２」、「Ａ−３」、「Ａ−４」）との組でよい。ライトコマンドのＩＤは、上位装置からのライトコマンドに含まれているＩＤでもよいし、ＦＭコントローラ１１０（例えばコマンド外部処理ユニット１１９又はコマンド分割ユニット１１３）により付与されたＩＤでもよい。サブライトコマンドのＩＤは、例えば、ライトコマンドのＩＤを基に付与されたＩＤでよく、また、例えば、ＦＭコントローラ１１０（例えばコマンド分割ユニット１１３）により付与されたＩＤでよい。コマンド分割ユニット１１３は、複数のサブライトコマンドの各々について、状態を、完了通知（応答）の受信待ちの状態とする。コマンド分割ユニット１１３は、分割した複数のサブライトコマンドをそれぞれキャッシュ登録ユニット１１２に転送する。１つのサブライトコマンドは、１つのサブライトデータの書き込みに対応し、例えば、１つのサブライトデータのライト先のＬＢＡを指定する。サブライトデータは、ライトデータの一部分であり、例えば、内部管理単位（ページサイズ）と同じサイズである。１つのサブライトデータは、２以上のページに跨らず、１つのページに書き込まれる。
【００６８】
コマンド分割ユニット１１３にてライトコマンドをサブライトコマンドに分割する理由は、ライトデータの格納状態が内部管理単位毎（サブライトデータ毎）に格納状態が異なり得ることにある。言い換えれば、同一ページに格納されるデータについてキャッシュヒット（ライト先ＬＢＡに対応するデータがキャッシュ１１４に存在する）とキャッシュミス（ライト先ＬＢＡに対応するデータがキャッシュ１１４に存在しない）が混在することを避けることにある。ライト対象のデータの全てがキャッシュミスであれば、プロセッサ１２３による処理が不要であるが、ライト対象のデータが少なくとも一部でもキャッシュヒットであれば、プロセッサ１２３による処理が必要になってしまう。従って、同一ページに格納されるデータについてキャッシュヒットとキャッシュミスが混在することを避けることが望ましい。
【００６９】
具体的には、例えば、１６ＫＢのライトデータのうち、１のサブライトデータ（４ＫＢのデータ）はデータキャッシュ１１４上にあり、残りの３のサブライトデータ（合計１２ＫＢのデータ）は１以上のＦＭ１４０に格納されていることがあり得る。この場合、データキャッシュ１１４に格納されているサブライトデータについては、キャッシュ管理テーブル（図示せず）の更新が必要となる。キャッシュ管理テーブルは、キャッシュ判定テーブルと同様の情報でもよい。一方、ＦＭ１４０に格納されているサブライトデータについては、サブライトデータがキャッシュ１１４に登録されればよく、サブライトデータが格納されているキャッシュ領域（キャッシュ１１４における一領域）のアドレスがプロセッサ１２３に通知される必要がない。このように、ＦＭモジュール１００内部では、管理単位（例では４ＫＢ）毎に、論理領域（サブライトデータに対応した領域）の状態が異なり得る。このため、本実施形態では、ライトコマンドから、管理単位と同サイズのデータであるサブライトデータについてのサブライトコマンドが生成される。サブライトコマンドを受信したＩ／Ｏハードウェア又はプロセッサ１２３は、単一のサブライトコマンドの状態のみを制御すればよく、そのサブライトコマンドを含んだライトコマンド内の別のサブライトコマンドの処理の完了を待つ必要がない。結果として、高性能化が期待される。また、プロセッサ１２３の処理が不要な状況のサブライトコマンドについて、プロセッサ１２３による処理が不要となり、結果として、プロセッサ処理性能ネックによる性能制限を軽減できる。
【００７０】
なお、ライトデータのサイズが管理単位（ページサイズ）以下の場合、サブライトコマンドの数は１でよく、また、そのサブライトコマンドはライトコマンドでもよい。言い換えれば、ライトデータのサイズが管理単位（ページサイズ）以下の場合、コマンド分割ユニット１１３は、コマンド外部処理ユニット１１９からのライトコマンドをキャッシュヒット判定ユニット１１１に転送してよい。
【００７１】
コマンド分割ユニット１１３から複数（又は１）のサブライトコマンドを受信したキャッシュヒット判定ユニット１１１は、受信したサブライトコマンド毎に、キャッシュヒット判定を行う（サブライトコマンドで指定されているＬＢＡに対応したサブライトデータがキャッシュ１１４に登録されている否かを判定する）。具体的には、例えば、本実施形態では、キャッシュ登録ユニット１１２がデータのキャッシュ１１４への登録を行い、キャッシュヒット判定ユニット１１１が、キャッシュヒット判定テーブル（図示せず）を持っており、キャッシュヒット判定ユニット１１１は、このキャッシュヒット判定テーブルを参照することで、サブライトコマンドが対象とするサブライトデータがキャッシュ１１４上にあるかどうか判定する。キャッシュヒット判定テーブルは、例えば、サブキャッシュ領域のアドレスとそのサブキャッシュ領域内のデータに対応したＬＢＡ（論理空間に属するＬＢＡ）との組を有してよい。そのようなキャッシュヒット判定テーブルに、サブライトコマンドで指定されているＬＢＡが登録されていれば、キャッシュヒットであり、サブライトコマンドで指定されているＬＢＡが登録されていなければ、キャッシュミスである。サブライトコマンドについて、キャッシュヒットとは、そのサブライトコマンドが対象とするＬＢＡ領域（論理領域）に対応付けられたデータが、ＦＭ１４０ではなくデータキャッシュ１１４に格納されている状態である。サブライトコマンドについて、キャッシュミスとは、そのサブライトコマンドが対象とするＬＢＡ領域（論理領域）に対応付けられたデータが、データキャッシュ１１４ではなくＦＭ１４０に格納されている状態である。キャッシュヒット判定ユニット１１１にて、キャッシュヒットと判定されたサブライトコマンドは、以降、サブライトヒットコマンドとして管理される。このサブライトヒットコマンドには、キャッシュヒット判定ユニットにより、新サブライトデータ（新たにサブキャッシュ領域に格納されることになるサブライトデータ）の格納先のサブキャッシュ領域のアドレスと、キャッシュヒットしたサブキャッシュ領域（旧サブライトデータ（新サブライトデータにより更新されるサブライトデータ）が格納されているサブキャッシュ領域）のアドレスとが指定される。一方、キャッシュヒット判定ユニット１１１にて、キャッシュミスと判定されたサブライトコマンドは、以降、サブライトミスコマンドとして管理される。サブライトヒットコマンドもサブライトコマンドも、キャッシュヒット判定ユニット１１１からキャッシュ登録ユニット１１２に転送される。
【００７２】
キャッシュヒット判定ユニット１１１からサブライトコマンド（サブライトヒットコマンド及びサブライトミスコマンド）を受信したキャッシュ登録ユニット１１２は、サブライトコマンド毎に、サブライトコマンドで指定されているＬＢＡ（論理空間に属するＬＢＡ）をキャッシュヒット判定テーブルに登録する。キャッシュ登録ユニット１１２は、受信したサブライトコマンドのうち、サブライトヒットコマンドのみプロセッサ１２３に通知し、サブライトミスコマンドについては、プロセッサ１２３に通知しない。
【００７３】
サブライトヒットコマンドを受信したプロセッサ１２３は、そのサブライトヒットコマンドに応じた制御を行う。サブライトヒットコマンドには、旧サブライトデータが記憶されているサブキャッシュ領域（旧サブキャッシュ領域）のアドレスと、新サブライトデータの格納先のサブキャッシュ領域（新サブキャッシュ領域）のアドレスとが指定されている。プロセッサ１２３は、サブライトヒットコマンドを基に旧サブキャッシュ領域を特定し、特定したキャッシュ領域を解放する。具体的には、例えば、プロセッサ１２３は、キャッシュヒット判定テーブルから、サブライトヒットコマンドで指定されているＬＢＡと、旧サブキャッシュ領域のアドレスとの対応付けを削除する。
【００７４】
サブライトヒットコマンドの処理の後、プロセッサ１２３は、図３に示すように、そのサブライトヒットコマンドの完了をコマンド分割ユニット１１３に通知する。また、キャッシュ登録ユニット１１２は、サブライトミスコマンドに対応したサブライトデータをデータキャッシュ１１４へ登録した後、サブライトミスコマンドの完了をコマンド分割ユニット１１３に通知する。なお、本実施形態では、サブライトデータをＦＭ１４０ではなくデータキャッシュ１１４に格納した段階で完了が通知されるが、本発明は、この例に限定されるものではない。例えば、サブライトコマンドのデータがＦＭ１４０に書き込まれた後に、完了がコマンド分割ユニット１１３に通知されてもよい。
【００７５】
前述したように、コマンド分割ユニット１１３は、ライトコマンドと分割したサブライトコマンドの対応関係を保持している。コマンド分割ユニット１１３は、ライトコマンドを構成する全てのサブライトコマンドが完了することを監視している。コマンド分割ユニット１１３は、完了を受信する毎に、その完了に対応したサブライトコマンドの状態を、完了受信済みとする。ライトコマンドを構成する全てのサブライトコマンドについて、プロセッサから完了の報告が有った場合、コマンド分割ユニット１１３は、ライトコマンドが完了したことをコマンド外部処理ユニット１１９に通知する。
【００７６】
コマンド分割ユニット１１３よりコマンド完了を受信したコマンド外部処理ユニット１１９は、上位装置に対して、ライトコマンドの完了通知を転送する。上位装置に転送される完了通知（ライトコマンドの応答）は、コマンド分割ユニット１１３からの通知でもよいし、コマンド外部処理ユニット１１９により生成された通知でもよい。
【００７７】
なお、コマンド外部処理ユニット１１９は、上位装置からライトコマンドを受信した場合にそのライトコマンドについてタイマーをセットし（時間計測を開始し）、ライトコマンドを受信してから一定時間以内にコマンド分割ユニット１１３から完了通知が来なかった場合、タイムアウトエラーを上位装置に通知してよい。コマンド外部処理ユニット１１９は、複数のＩ／Ｏコマンドを上位装置から受信且つ保持しており、Ｉ／Ｏコマンド毎に前述のタイマーにて時間監視を行ってよい。
【００７８】
以上が、本実施形態におけるライトコマンド処理である。ライトコマンド処理によれば、複数のサブライトコマンドにそれぞれ対応した複数のサブリードコマンドがキャッシュ１１４に格納された場合に、ライトコマンドの完了が上位装置に通知される。これにより、ライトコマンド処理の高速化が期待できる。
【００７９】
（１−４−２）リードコマンド処理
【００８０】
図４及び図５は、リードコマンド処理を示す。具体的には、図４は、リードコマンド処理の一部でありリードコマンド受信処理を示す。図５は、リードコマンド処理の残りでありリードコマンド応答処理を示す。
【００８１】
図４に示すように、上位装置からリードコマンドを受信したコマンド外部処理ユニット１１９が、受信したリードコマンドを、ユニット１１９の内部領域（例えばレジスタ）に登録する。コマンド外部処理ユニット１１９は、登録したリードコマンドの状態を、完了通知の受信待ちの状態とする。コマンド外部処理ユニット１１９は、コマンド分割ユニット１１３に、登録したリードコマンドを転送する。
【００８２】
コマンド外部処理ユニット１１９からリードコマンドを受信したコマンド分割ユニット１１３は、リードコマンドをサブリードコマンドに分割し、サブリードコマンドを内部領域（例えばユニット１１３のレジスタ）に登録する。ここで、リードコマンドから得られるサブリードコマンドの数は、リードデータ（リードコマンドに従い読み出されるデータ）のサイズを、内部管理単位（ページサイズ）で除算することにより得られる商（商が０の場合は１）でよい。例えば、リードコマンドに従うリードデータのサイズが１６ＫＢであり、内部管理単位（ページサイズ）が４ＫＢの場合、得られるサブリードコマンドの数は、１６／４＝４でよい。コマンド分割ユニット１１３は、リードコマンドとサブリードコマンドの対応関係を例えばユニット１１３の内部領域（例えばレジスタ）に登録する。コマンド分割ユニット１１３は、複数のサブリードコマンドの各々について、状態を、完了通知（応答）の受信待ちの状態とする。コマンド分割ユニット１１３は、分割した複数のサブリードコマンドをそれぞれキャッシュ登録ユニット１１２に転送する。１つのサブリードコマンドは、１つのサブリードデータの読み出しに対応し、例えば、１つのサブリードデータのリード元のＬＢＡを指定する。サブリードデータは、リードデータの一部分であり、例えば、内部管理単位（ページサイズ）と同じサイズである。１つのサブリードデータは、２以上のページに跨らず、１つのページから読み出される。
【００８３】
コマンド分割ユニット１１３にてリードコマンドをサブリードコマンドに分割する理由は、前述のライトコマンドのときと同様に管理単位毎に格納状態（キャッシュヒット／キャッシュミス）が異なっていることに加え、リードコマンドで指定されるＬＢＡ領域に対応付けられている複数のページ（複数のリード元ページ）が、異なるＦＭインターフェースに接続された異なるＦＭ１４０に離散している可能性にある。ＦＭコントローラ１１０は、L内部管理単位毎に、ＬＢＡとＰＢＡの対応関係を管理しており、連続するＬＢＡ領域であっても、実際のデータは異なる複数のＦＭ１４０（及びデータキャッシュ１１４）に分散している可能性がある。このため、１つのリードコマンドを完了するためには、複数のＦＭインターフェース１２４（又はコピーＤＭＡユニット１２１）を並列に制御する必要があり得る。このため、内部管理単位に基づきリードコマンドがサブリードコマンドに分割される。
【００８４】
コマンド分割ユニット１１３から複数（又は１）からのサブリードコマンドを受信したキャッシュヒット判定ユニット１１１は、サブリードコマンド毎に、キャッシュヒット判定を行う。具体的には、キャッシュヒット判定ユニット１１１は、キャッシュヒット判定テーブルを参照し、サブリードコマンドが対象とするサブリードデータがキャッシュ１１４上にあるかどうか判定する。サブリードコマンドについて、キャッシュヒットとは、そのサブリードコマンドが対象とするＬＢＡ領域（論理領域）に対応付けられたデータが、ＦＭ１４０ではなくデータキャッシュ１１４に格納されている状態である。サブリードコマンドについて、キャッシュミスとは、そのサブリードコマンドが対象とするＬＢＡ領域（論理領域）に対応付けられたデータが、データキャッシュ１１４ではなくＦＭ１４０に格納されている状態である。キャッシュヒット判定ユニット１１１にて、キャッシュヒットと判定されたサブリードコマンドは、以降、サブリードヒットコマンドとして管理される。サブリードヒットコマンドには、キャッシュヒット判定ユニット１１１が、キャッシュヒットしたサブキャッシュ領域のアドレスを指定する。一方で、キャッシュヒット判定ユニット１１１にて、キャッシュミスと判定されたサブリードコマンドは、以降、サブリードミスコマンドとして管理される。
【００８５】
キャッシュヒット判定ユニット１１１は、サブリードコマンドがサブリードヒットコマンドであるかサブリードミスコマンドであるかに応じて、サブリードコマンドの転送先のＩ／Ｏコマンドを選択する。図４に示す例では、サブリードミスコマンドは、コマンド内部処理ユニット１２０に転送され、サブリードヒットコマンドは、プロセッサ１２３に転送される。
【００８６】
本実施形態において、サブリードミスコマンドとサブリードヒットコマンドの通知先Ｉ／Ｏハードウェアを分ける理由は、サブリードミスとサブリードヒットの発生頻度の差と、サブリードヒット処理の複雑さにある。
【００８７】
サブリードミスとサブリードヒットの発生頻度の差は、ＦＭ群（複数のＦＭ１４０の集合）の容量に対するデータキャッシュ１１４の容量の割合、及び、上位装置がＦＭモジュール１００に指定するＬＢＡの局所性に依存する。例えば、本実施形態では、データキャッシュ１１４の容量とＦＭ群の容量の差はきわめて大きい。より具体的には、例えば、データキャッシュ１１４の容量は数百ＭＢ（メガバイト）、ＦＭ群の容量は数ＴＢ（テラバイト）である。こうした構成において、ＬＢＡの局所性の低いリードリクエストが上位装置から受信された場合、リードコマンドから得られるサブリードコマンドの大半が、サブリードミスコマンドとなる。つまり、サブリードヒットコマンドはサブリードミスコマンドに比べてわずかしか生じないと予測される。このため、ＦＭモジュール１００のリード性能を高速化したいのであれば、サブリードミスコマンドを高速な専用ハードウェアにて処理する事が必要となる。言い換えれば、本実施形態では、キャッシュミスした方がリード性能の高速化が期待でき、この観点から、データキャッシュ１１４は、読み出されたデータが残らないバッファのような一時記憶領域であることが望ましい。
【００８８】
なお、サブリードミスコマンドのみならずサブリードヒットコマンドについてもＩ／Ｏハードウェアにて処理する事がＦＭモジュール１００の性能を向上させる観点からは望ましいとも考えられるが、サブリードヒットコマンドは、別処理と競合する可能性がある。例えば、サブリードヒットコマンドの対象領域であるサブキャッシュ領域は、ＦＭ１４０にデータを書き込む為に、データキャッシュ１１４からＦＭ１４０にデータを転送（以降この動作をデステージと記す）中の領域である可能性がある。そして、仮に、デステージ処理がサブリードヒットコマンドの処理との競合を考慮しない場合、ＦＭ１４０へのデータ転送が終了した時点で、サブキャッシュ領域が解放される。このため、サブリードコマンドについてキャッシュヒットと判定された後、競合を考慮せずに処理が続行されると、サブキャッシュ領域からデータが削除された後、リードされる可能性が生じる。言い換えれば、サブリードヒットコマンドに対応したサブキャッシュ領域からのデータの読み出しの時点では、そのサブリードヒットコマンドに対応したデータが、サブキャッシュ領域には存在しない可能性が生じる。
【００８９】
上記のような可能性を排除するため、本実施形態では、ＦＭコントローラ１１０が行う各種動作の複雑な競合管理をプロセッサ１２３にて行う。例えば、サブリードヒットコマンドの処理とデステージの処理の競合を回避する為に、プロセッサ１２３が、「サブリードヒットコマンドに対応したサブキャッシュ領域はデステージ処理の対象になっていることを検知する。」、又は、「サブリードヒットコマンドに対応したサブキャッシュ領域のロックを取得し、並列で実行されているデステージ処理においてそのサブキャッシュ領域が解放されること（そのサブキャッシュ領域からデータが削除されること）を不可とする」等の排他制御を行う。
【００９０】
上述の通り、競合の可能性があり複雑な排他制御が必要なサブリードヒットコマンドは、プロセッサ１２３に転送される。これにより、複雑な競合を管理するためのハードウェアを開発する必要が無く、バグの修正が困難なハードウェアの開発リスクを軽減し、開発期間を短縮する事が期待できる。
【００９１】
サブリードヒットコマンドの処理をプロセッサ１２３に担わせることで、プロセッサ１２３の処理性能がネックとなりＦＭモジュール１００のリード性能が低下する事が考えられるが、前述のとおり、上位装置がＬＢＡの局所性の少ないＩ／Ｏパターンを実行し得る環境において、サブリードヒットコマンドの発生頻度は、サブリードミスコマンドの発生頻度と比較して少ないので、ＦＭモジュールの性能低下を軽減できる。
【００９２】
コマンド内部処理ユニット１２０は、キャッシュヒット判定ユニット１１１からサブリードミスコマンドを受信する。コマンド内部処理ユニット１２０は、サブリードミスコマンド毎に、サブリードミスコマンドが指定するＬＢＡに対応したＰＢＡを論物変換テーブル６００から特定し、特定したＰＢＡが該当する物理領域に接続されたＦＭインターフェース１２４に対して、ＦＭ１４０からデータをリードするコマンドを生成し転送する。２以上のサブリードミスコマンドにそれぞれ対応した２以上のリード元物理領域（ページ）にそれぞれ接続された２以上のＦＭインターフェース１２４をそれぞれ並列に起動できる。
【００９３】
一方、プロセッサ１２３は、キャッシュヒット判定ユニット１１１からサブリードヒットコマンドを受信する。プロセッサ１２３は、サブリードヒットコマンドにて指定されるサブキャッシュ領域について排他制御を行った後、コピーＤＭＡユニット１２１に対してコマンドを発行する。そのサブキャッシュ領域内のデータをリードバッファ領域（上位装置にリードデータを転送する前に、一旦リードデータを格納する領域）にコピーするためである。なお、本実施形態では、サブキャッシュ領域とリードバッファ領域が別々の領域であるが、データキャッシュ１１４とリードバッファ領域が一体であってもよく、その場合、コピーＤＭＡユニット１２１は無くてもよい。
【００９４】
また、本実施形態では、リードコマンドにてＦＭ群から読み出されたデータがデータキャッシュ１１４に登録されないが、本発明はこの例に限定されるものではない。例えば、ＦＭ１４０から読み出されたサブリードデータがデータキャッシュ１１４に転送され、リードサブコマンドで指定されたＬＢＡがキャッシュヒット判定テーブルに登録されてもよい。これにおり、頻繁にリード元となるＬＢＡ領域については、ＦＭ１４０からではなくサブキャッシュ領域からデータが読み出されてもよい。
【００９５】
図４に示した動作にて、サブリードコマンド（サブリードヒットコマンド及びサブリードミスコマンド）の処理の結果、データ転送用のコマンドが通知されたＦＭインターフェース１２４とコピーＤＭＡユニット１２１から完了通知が転送される。
【００９６】
具体的には、図５に示すように、ＦＭ１４０からデータを読み出すコマンドの処理が完了したＦＭインターフェース１２４は、サブリードミスコマンドにて指定されＦＭ１４０から読み出されたサブリードデータを含んだ完了通知を、コマンド分割ユニット１１３に通知する。
【００９７】
また、サブキャッシュ領域からリードバッファへのデータ転送が完了したコピーＤＭＡユニット１２１は、転送完了を、コピーＤＭＡユニット１２１にコマンドを発行したプロセッサ１２３に通知する。そして、コピーＤＭＡユニット１２１からの完了通知を受信したプロセッサ１２３は、サブリードヒットコマンドに対応したサブキャッシュ領域について排他制御を行った後、サブリードヒットコマンドの完了をコマンド分割ユニット１１３に通知する。なお、実施形態では、コピーＤＭＡユニット１２１が完了を一旦プロセッサ１２３に通知し、その通知を受けたプロセッサ１２３が、コマンド分割ユニット１１３に完了を通知するが、本発明はこの例に限定されるものではない。例えば、コピーＤＭＡユニット１２１がコマンド分割ユニット１１３とプロセッサ１２３にサブリードヒットコマンドを通知してもよい。
【００９８】
コマンド分割ユニット１１３は、単一のリードコマンドより作成した複数のサブリードコマンドの全てについて完了通知を待っている。コマンド分割ユニット１１３は、タイムアウトの閾値を超過しても完了通知がない場合には（サブリードコマンドを発行してから一定時間以内に完了通知を受信しない場合には）、エラー情報をコマンド処理ログ１３２に書き込み、プロセッサ１２３に割り込みを行ってよい。
【００９９】
ＦＭインターフェース１２４及びプロセッサ１２３からの完了通知を受信したコマンド分割ユニット１１３は、リードコマンドを構成する全てのサブリードコマンドについて完了通知を受信した後、コマンド外部処理ユニット１１９に、リードコマンドの完了通知を転送する。
【０１００】
コマンド分割ユニット１１３からリードコマンドの完了通知を受信したコマンド外部処理ユニット１１９は、上位装置に対してリードコマンド処理が完了したことを通知する完了通知を転送する。上位装置に転送される完了通知（リードコマンドの応答）は、コマンド分割ユニット１１３からの通知でもよいし、コマンド外部処理ユニット１１９により生成された通知でもよい。また、上位装置に転送される完了通知は、リードコマンドを構成する全てのサブリードコマンドにそれぞれ対応したサブリードデータにより構成されたリードデータを含んでもよい。
【０１０１】
（１−５）プロセッサ１２３の処理
【０１０２】
続いて、プロセッサ１２３の処理を説明する。本実施形態のプロセッサ１２３の主な処理としては、サブライトヒットコマンド処理及びサブリードヒットコマンド処理のように上位装置からのＩ／Ｏコマンドが基で実行される処理と、デステージ処理及びリクラメーション処理のように上位装置からのコマンドとは非同期に（独立して）実行される処理とがある。このうち、デステージ処理及びリクラメーション処理のように上位装置からのコマンドと非同期に実行される処理（内部処理）については、上位装置に完了が通知されず、故に、内部処理は、上位装置からは把握できない処理である。
【０１０３】
（１−５−１）プロセッサ１２３の処理：サブライトヒットコマンド処理
【０１０４】
プロセッサ１２３の処理として、まず、サブライトヒットコマンド処理について図８を用いて説明する。
【０１０５】
図８は、サブライトヒットコマンド処理のフロー図である。
【０１０６】
Ｓ８０１では、プロセッサ１２３が、キャッシュヒット判定ユニット１１１からサブライトヒットコマンドを受信する。ここで、プロセッサ１２３は、受信したサブライトヒットコマンドから旧サブキャッシュ領域及び新サブキャッシュ領域を特定する。
【０１０７】
Ｓ８０２では、プロセッサ１２３は、Ｓ８０１にて特定したサブキャッシュ領域のロック取得を試みる。このステップで、プロセッサ１２３は、ＦＭコントローラ１１０が保持する管理テーブルを基に、ロック取得を試みる。
【０１０８】
Ｓ８０３では、プロセッサ１２３は、ロックが取得できたかを判定する。このステップにてロックが取得できない場合、プロセッサ１２３は、Ｓ８０１で特定されたサブキャッシュ領域が別処理にて利用中であると判断でき、Ｓ８０２に遷移することで、別処理の利用が終了するまで、ロック取得を試みる。一方で、ロックが取得できた場合、Ｓ８０４に遷移する。
【０１０９】
Ｓ８０４では、プロセッサ１２３が、ヒットサブ領域（キャッシュヒットしたサブキャッシュ領域）の管理データを取得する。
【０１１０】
Ｓ８０５では、プロセッサ１２３が、Ｓ８０４で取得した管理データ（ヒットサブ領域に格納されているデータに対応したＬＢＡを含む）を参照し、ヒットサブ領域が旧サブキャッシュ領域か否かを判定する。ＦＭモジュール１００では、ヒットサブ領域内のデータが別処理にて変化する可能性があり、Ｓ８０５では、プロセッサ１２３は、この領域が旧サブキャッシュ領域であるか否かを判定する。
【０１１１】
Ｓ８０５の判定結果が肯定の場合（具体的には、ロックが取得されたヒットサブ領域に対応しているＬＢＡが、サブライトヒットコマンドで指定されているＬＢＡと同一の場合）、Ｓ８０６に遷移する。一方、Ｓ８０５の判定結果が否定の場合（具体的には、ロックが取得されたヒットサブ領域に対応しているＬＢＡが、サブライトヒットコマンドで指定されているＬＢＡと異なっている場合）、ヒットサブ領域が別処理によって旧サブキャッシュ領域ではなくなった場合であり、Ｓ８０７に遷移する。
【０１１２】
Ｓ８０６では、プロセッサ１２３が、旧サブキャッシュ領域を解放する。これにより、旧サブキャッシュ領域を、別処理においてサブキャッシュ領域として扱う事ができる。
【０１１３】
Ｓ８０７では、プロセッサ１２３が、新サブキャッシュ領域のアドレスを、キャッシュ管理テーブルに登録する。
【０１１４】
Ｓ８０８では、プロセッサ１２３が、ヒットサブ領域のロックを解放する。この解放処理により、解放された領域を、別処理（例えばデステージ処理又はサブリードヒットコマンド処理）においてサブキャッシュ領域として扱う事ができる。
【０１１５】
Ｓ８０９では、プロセッサ１２３が、Ｓ８０１にて受信したサブライトヒットコマンドが完了したことをコマンド分割ユニット１１３に通知する。
【０１１６】
以上が、サブライトヒットコマンド処理である。
【０１１７】
（１−５−２）プロセッサの処理：サブリードヒットコマンド処理
【０１１８】
続いて、サブリードヒットコマンド処理について図９を用いて説明する。
【０１１９】
図９は、サブリードヒットコマンド処理のフロー図である。
【０１２０】
Ｓ９０１では、プロセッサ１２３が、キャッシュヒット判定ユニット１１１からサブリードヒットコマンドを受信する。ここで、プロセッサ１２３は、受信したサブリードヒットコマンドからサブキャッシュ領域を特定する。Ｓ９０２では、プロセッサ１２３は、Ｓ９０１にて特定したサブキャッシュ領域のロック取得を試みる。Ｓ９０３では、プロセッサ１２３は、ロックが取得できたかを判定する。Ｓ９０４では、プロセッサ１２３が、ヒットサブ領域（キャッシュヒットしたサブキャッシュ領域）の管理データを取得する。Ｓ９０５では、プロセッサ１２３が、Ｓ９０４で取得した管理データ（ヒットサブ領域に格納されているデータに対応したＬＢＡを含む）を参照し、ヒットサブ領域が、サブリードヒットコマンドに対応したサブリードデータを記憶しているサブキャッシュ領域か否かを判定する。Ｓ９０５の判定結果が肯定の場合、Ｓ９０６に遷移し、Ｓ９０５の判定結果が否定の場合、Ｓ９１０に遷移する。
【０１２１】
Ｓ９０６では、プロセッサ１２３が、Ｓ９０５にてヒットサブ領域にサブリードヒットコマンドに対応したサブリードデータが格納されていると判断された為、ヒットサブ領域内のデータをリードバッファ領域にコピーするコピーＤＭＡユニット１２１用にコマンドを生成し、そのコマンドをコピーＤＭＡユニット１２１に送信することでコピーＤＭＡユニット１２１を起動する。
【０１２２】
Ｓ９０７では、プロセッサ１２３が、Ｓ９０６にて起動したコピーＤＭＡユニット１２１から完了通知を受信する。この完了通知の受信により、サブリードヒットコマンドに対応したサブリードデータがリードバッファ領域に格納されたことが確定する。本実施形態のＦＭモジュール１００では、リードコマンドから分割された複数のサブリードコマンドにそれぞれ対応した複数のサブリードデータがリードバッファ領域に格納され、全てのサブリードコマンドの完了を確認したコマンド分割ユニット１１３が、上位装置に対して、データ転送を起動する。このため、サブリードデータがリードバッファ領域に格納されたことをもって、サブリードヒットコマンドとしてのデータ転送処理は完了となる。
【０１２３】
Ｓ９０８では、プロセッサ１２３が、ヒットサブ領域のロックを解放する。Ｓ９０９では、プロセッサ１２３が、Ｓ９０１にて受信したサブリードヒットコマンドが完了したことをコマンド分割ユニット１１３に通知する。
【０１２４】
Ｓ９１０では、プロセッサ１２３が、ヒットサブ領域にサブリードヒットコマンドに対応したサブリードデータが格納されていないと判定されるため、ヒットサブ領域のロックを解放する。
【０１２５】
Ｓ９１１では、プロセッサ１２３が、サブリードヒットコマンドを、コマンド内部処理ユニット１２０にリードミスコマンドとして登録する。Ｓ９０１にて受信したサブリードヒットコマンドについて既にキャッシュミスが発生しており、ヒットサブ領域にサブリードデータが無くそのサブリードデータがＦＭ１４０に格納されていると判定されたためである。この場合、コマンド内部処理ユニット１２０が、ＦＭインターフェース１２４にコマンドを発行する。そして、ＦＭインターフェース１２４によりＦＭ１４０からリードバッファ領域へデータが転送されたことが完了した事をもって、ＦＭインターフェース１２４がコマンド分割ユニット１１３に完了を通知する。このため、プロセッサ１２３からコマンド分割ユニット１１３への完了通知は不要となる。
【０１２６】
以上が、サブリードヒットコマンド処理である。
【０１２７】
（１−５−３）プロセッサ１２３の処理：デステージ処理
【０１２８】
続いて、デステージ処理について図１０を用いて説明する。
【０１２９】
図１０は、デステージ処理のフロー図である。
【０１３０】
デステージ処理は、定期的に起動される。なお、デステージ契機は定期的に限定されない。例えば、プロセッサ１２３が、データキャッシュ１１４の使用状況を監視し、データキャッシュ１１４の使用可能領域の量が閾値以下となった場合に、サブキャッシュ領域を解放するためにデステージ処理を起動してもよい。
【０１３１】
Ｓ１００１では、プロセッサ１２３が、デステージ対象とするサブキャッシュ領域を選択する。プロセッサ１２３は、キャッシュ管理テーブルを参照し、複数（又は１）のサブキャッシュ領域をデステージ対象として選択する。ここでは、キャッシュ管理テーブルより、デステージ対象データに対応したＬＢＡ（論理空間に属するＬＢＡ）が取得される。
【０１３２】
Ｓ１００２では、プロセッサ１２３は、Ｓ１００１にてデステージ対象として選択した複数のサブキャッシュ領域の各々のロック取得を試みる。
【０１３３】
Ｓ１００３では、プロセッサ１２３は、ロックの取得が可能かを判定する。プロセッサ１２３は、サブキャッシュ領域とロックの有無との関係を示すロック管理テーブル（図示せず）を参照し、Ｓ１００１にて選択したデステージ対象領域が占有可能となった（ロックが取れた）かを判定する。ロックが取れたサブキャッシュ領域の量が一定量未満の場合、他のサブキャッシュ領域をデステージ対象領域とするため、Ｓ１００１に遷移する。一方、ロックが取れたサブキャッシュ領域の量が一定量以上の場合、Ｓ１００４に遷移する。
【０１３４】
Ｓ１００４は、プロセッサ１２３が、Ｓ１００１にて選択した複数のデステージ対象領域の管理データを取得する。
【０１３５】
Ｓ１００５では、プロセッサ１２３が、Ｓ１００１にて選択した複数のデステージ対象領域が有効であることを確認する。本実施形態では、Ｓ１００１にてデステージ対象とした領域についてＳ１００３にてロックを取得するまでの間に、別処理（例えばプロセッサ１２３がマルチコアの場合、他のコアが実施しているデステージ処理）によって解放されている可能性がある。プロセッサ１２３が、ロックを取得したサブキャッシュ領域の管理データを参照することで、デステージ対象領域が有効であることを判断する。有効となった場合、Ｓ１００６に遷移する。一方、有効でなかった場合、デステージ対象の領域を確保する為に、Ｓ１００１に遷移する。
【０１３６】
Ｓ１００６では、プロセッサ１２３が、デステージ先ＦＭ領域（ＦＭ内の物理領域）の選択を行う。プロセッサ１２３が、内部の管理テーブル（例えば図７に示したブロック管理テーブル７００）を参照し、サブキャッシュ領域のデータのデステージ先（転送先）となる複数のＦＭ領域を決定する。
【０１３７】
Ｓ１００７では、プロセッサ１２３が、Ｓ１００６にて選択したＦＭ領域に接続したＦＭインターフェース１２４に対してライト用のコマンドを生成し起動する。
【０１３８】
Ｓ１００８では、プロセッサ１２３が、Ｓ１００６にて起動した複数のＦＭインターフェース１２４の各々から完了の通知を受ける。
【０１３９】
Ｓ１００９では、プロセッサ１２３が、論物変換テーブル６００を更新する。プロセッサ１２３が、デステージ先のＰＢＡ領域（ＦＭ領域）に対して、Ｓ１００１にて取得したＬＢＡを対応付ける。
【０１４０】
Ｓ１０１０では、プロセッサ１２３が、Ｓ１００１にて選択したサブキャッシュ領域のロックを解放する。このロック解放後、サブライトヒットコマンド処理及びリードヒットコマンド処理のような別処理において、その解放されたサブキャッシュ領域を利用可能である。
【０１４１】
以上が、デステージ処理である。
【０１４２】
（１−５−４）プロセッサの処理：リクラメーション処理
【０１４３】
続いて、図１１を用いリクラメーション処理について説明する。
【０１４４】
図１１は、リクラメーション処理のフロー図である。
【０１４５】
Ｓ１１０１では、プロセッサ１２３が、リクラメーション対象のＰＢＡ領域（移動元ブロック）を選択する。プロセッサ１２３は、ブロック管理テーブル７００を参照し、相対的に無効ＰＢＡ量の多いブロックを移動元ブロックとして選択する。リクラメーション処理において移動されるデータの量が少なくて済むようにするためである。
【０１４６】
Ｓ１１０２では、プロセッサ１２３が、Ｓ１１０１にて選択したＰＢＡ領域（ブロック）に対応付けられているＬＢＡを、論物変換テーブル６００から特定する。なお、論物変換テーブル６００以外の管理テーブルにおいてＬＢＡとＰＢＡの対応関係が登録されていてそのテーブルからＬＢＡが特定されてもよい。
【０１４７】
Ｓ１１０３では、プロセッサ１２３が、キャッシュ登録ユニット１１２に対し、Ｓ１１０２にて特定したＬＢＡをキャッシュ登録テーブルに登録することとそのＬＢＡに対応付けられたデータを格納するためのサブキャッシュ領域を確保することとを依頼する。
【０１４８】
Ｓ１１０４では、プロセッサ１２３が、Ｓ１１０３にてキャッシュ登録ユニット１１２に依頼したことが実行されたかを判定する。Ｓ１１０４の判定結果が肯定の場合、Ｓ１１０５に遷移し、Ｓ１１０４の判定結果が否定の場合（例えば、空きサブキャッシュ領域の枯渇のため確保が実施されなかった場合）、Ｓ１１０３に遷移する。
【０１４９】
Ｓ１１０５では、プロセッサ１２３が、Ｓ１１０３にて確保されたサブキャッシュ領域のロックを取得する。
【０１５０】
Ｓ１１０６では、プロセッサ１２３が、移動元ブロック内の有効データをＳ１１０３にて確保したサブキャッシュ領域に転送するために、該当するＦＭインターフェース１２４用のコマンドを生成し、起動する。これにより、移動元ブロックから有効データがサブキャッシュ領域に転送される。
【０１５１】
Ｓ１１０７では、プロセッサ１２３が、Ｓ１１０６にて起動したデータ転送の完了を特定する。この完了をもって、移動元ブロック内の有効データはサブキャッシュ領域に格納されたこととなる。このため、移動元ブロックに対応付けられたＬＢＡを指定したＩ／Ｏコマンドの処理は、サブキャッシュ領域に格納されたデータにて対応可能となる。
【０１５２】
Ｓ１１０８では、プロセッサ１２３が、移動元ブロックのＰＢＡとそれに対応付けられたＬＢＡとの組を削除する。Ｓ１１０７にて移動元ブロック内の有効データがサブキャッシュ領域に格納されたためである。
【０１５３】
Ｓ１１０９では、プロセッサ１２３が、ブロック管理テーブル７００を更新する。プロセッサ１２３が、Ｓ１１０８にてＬＢＡ／ＰＢＡの組（対応付け）を削除したことで、移動元ブロックの全ＰＢＡが無効ＰＢＡである。このため、プロセッサ１２３が、ブロック管理テーブル７００を更新し、移動元ブロックが消去可能であることを別処理に通知する。詳細な説明は省略するが、本実施形態では、リクラメーション処理とは別に消去用のジョブも並行して動作しており、そのジョブが、ブロック管理テーブル７００を参照し、全ＰＢＡが無効ＰＢＡとなっているブロックを選択しその選択したブロックについて消去処理を実行する。
【０１５４】
Ｓ１１１０では、プロセッサ１２３が、サブキャッシュ領域のロックを解放する。
【０１５５】
以上が、リクラメーション処理である。ＦＭコントローラ１１０は、リクラメーション用のデータと上位装置からのライトデータを、ともにデステージ処理によりＦＭ１４０に格納する。このため、移動元ブロック内の有効データがサブキャッシュ領域に格納された段階でリクラメーション処理の終了となる。
【０１５６】
以上が、ＦＭモジュール１００が実行する処理である。以上のとおり、デステージ処理、リクラメーション処理、サブライトヒットコマンド処理及びサブリードヒットコマンド処理の各処理にて処理領域の競合が想定される場合、その調停処理を組み込みプロセッサ１２３にて処理することで、複雑な処理をソフトウェア（コンピュータプログラム）にて記述可能となる。また、サブリードヒットコマンド処理及びサブライトヒットコマンド処理に比べて発生頻度の高いサブリードミスコマンド処理及びサブライトミスコマンド処理については、ハードウェアのみで処理することで高性能化が可能となる。結果、競合処理を行う複雑なハードウェアが無くとも、サブリードミスコマンド処理を高速に処理可能となり、ＦＭモジュール１００のリードコマンド処理性能が向上する。同様に、競合処理を行う複雑なハードウェアが無くともサブライトミスコマンドを高速に処理可能となり、上位装置へのライト応答時間（ライトコマンド処理の応答時間）を短縮できる。また、サブＩ／Ｏコマンド（サブライトコマンド／サブリードコマンド）をハードウェアにて処理する場合であっても、そのハードウェアによる処理において障害が発生した場合にはそのハードウェアによりログ（例えば障害情報）がコマンド処理ログ１３２に記録されるので、障害発生時に組み込みプロセッサ１２３から障害部位（例えば、障害が発生したハードウェア）及び障害内容の少なくとも一方の取得が可能となる。
【０１５７】
以上、一実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実行することが可能である。例えば、実施形態では、キャッシュヒット／ミスに応じてプロセッサがコマンド（サブコマンド）を処理するか否かが決まるが、プロセッサがコマンド（サブコマンド）を処理するか否かの基準は、それに限らないでよい。例えば、ＦＭ群が、複数の高速物理領域（例えばＳＬＣ（Single  Level  Cell）のページ）と、複数の低速物理領域（例えばＭＬＣ（Multi  Level  Cell）のページ）とを含む。論理空間（ＬＢＡ範囲）が、高速物理領域が割り当てられる論理領域である高速論理領域と、低速物理領域が割り当てられる論理領域である低速論理領域とに区分されている。この場合、高速論理領域に属するＬＢＡが指定されたＩ／Ｏコマンドの処理は、Ｉ／Ｏハードウェアが担当しプロセッサ１２３は担当せず、低速論理領域に属するＬＢＡが指定されたＩ／Ｏコマンドの処理は、Ｉ／Ｏハードウェアに加えてプロセッサ１２３も担当してもよい。
【符号の説明】
【０１５８】
１００：ＦＭモジュール  １１０：ＦＭコントローラ  １４０：ＦＭ
【図１】
2016071954.tif 000003
【図２】
2016071954.tif 000004
【図３】
2016071954.tif 000005
【図４】
2016071954.tif 000006
【図５】
2016071954.tif 000007
【図６】
2016071954.tif 000008
【図７】
2016071954.tif 000009
【図８】
2016071954.tif 000010
【図９】
2016071954.tif 000011
【図１０】
2016071954.tif 000012
【図１１】
2016071954.tif 000013
【図１２】
2016071954.tif 000014
【図１３】
2016071954.tif 000015
【手続補正書】
【提出日】平成29年4月6日(2017.4.6)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
上位装置からのＩ／Ｏ（Input/Output）コマンドの少なくとも一部が所定の条件を満たしている場合に前記Ｉ／Ｏコマンドの少なくとも一部を処理するプロセッサと、前記Ｉ／Ｏコマンドが前記所定の条件を満たしてない場合に前記Ｉ／Ｏコマンドの全てを処理する１以上のハードウェアロジック回路とを有するメモリコントローラと、
前記Ｉ／Ｏコマンドに従うＩ／Ｏ対象データの少なくとも一部であり前記メモリコントローラにより入出力されるデータを記憶する１以上の半導体記憶素子である記憶素子群と
を有する半導体メモリデバイス。
【請求項２】
前記メモリコントローラが、一時記憶領域を有し、
前記Ｉ／Ｏコマンドの少なくとも一部が所定の条件を満たしている場合とは、前記Ｉ／Ｏ対象データの少なくとも一部が前記一時記憶領域に記憶されている場合である、
請求項１記載の半導体メモリデバイス。
【請求項３】
複数のハードウェアロジック回路が、
前記Ｉ／Ｏコマンドを複数のサブＩ／Ｏコマンドに分割するハードウェアロジック回路であるコマンド分割ユニットと、
前記複数のサブＩ／Ｏコマンドの各々についてサブＩ／Ｏコマンドに従うサブＩ／Ｏ対象データが前記一時記憶領域に記憶されているか否かを判定するハードウェアロジック回路である判定ユニットと
を含み、
前記一時記憶領域にサブＩ／Ｏ対象データが記憶されていると判定されたサブＩ／Ｏコマンドが、前記プロセッサにより処理される、
請求項２記載の半導体メモリデバイス。
【請求項４】
前記メモリコントローラが、上位装置に提供する論理空間が所定サイズで区分された単位論理領域毎に単位論理領域の論理アドレスと前記記憶素子群の物理アドレスとの対応関係を管理し、
前記コマンド分割ユニットは、前記所定サイズと同サイズのサブＩ／Ｏ対象データのＩ／ＯのためのサブＩ／Ｏコマンドに前記Ｉ／Ｏコマンドを分割する、
請求項３記載の半導体メモリデバイス。
【請求項５】
前記記憶素子群は、複数の物理領域で構成されており、物理領域単位でデータが入出力されるようになっており、
前記コマンド分割ユニットは、物理領域サイズと同サイズのサブＩ／Ｏ対象データのＩ／ＯのためのサブＩ／Ｏコマンドに前記Ｉ／Ｏコマンドを分割する、
請求項３記載の半導体メモリデバイス。
【請求項６】
前記メモリコントローラは、複数の記憶素子インターフェースを有し、
前記複数の記憶素子インターフェースに、それぞれ、複数のサブ記憶素子群が接続されており、
前記複数のサブ記憶素子群の各々は、１以上の記憶素子であり、
前記Ｉ／Ｏコマンドは、リードコマンドであり、
前記複数のサブＩ／Ｏコマンドは、それぞれ、複数のサブリードコマンドであり、
前記複数のハードウェアロジック回路が、２以上のサブリードコマンドにそれぞれ対応した２以上の物理領域にそれぞれ接続されている２以上の記憶素子インターフェースを、前記２以上の物理領域からそれぞれ並列に２以上のサブリードデータを読み出すよう、並列に起動するハードウェアロジック回路であるコマンド内部処理ユニットを含む、
請求項３記載の半導体メモリデバイス。
【請求項７】
前記Ｉ／Ｏコマンドは、リードコマンドであり、
前記複数のサブＩ／Ｏコマンドは、それぞれ、複数のサブリードコマンドであり、
前記複数のハードウェアロジック回路が、登録されたサブリードコマンドに対応した物理領域からサブリードデータを読み出すハードウェアロジック回路であるコマンド内部処理ユニットを含み、
前記プロセッサは、サブリードコマンドの処理と並列に、前記一時記憶領域内のデータを削除又は変更し論理アドレスと物理アドレスの対応関係を更新することを含んだ処理である別処理を行うようになっており、
前記プロセッサは、サブリードデータが前記一時記憶領域に記憶されていると判定された後にそのサブリードデータが前記一時記憶領域に無いと判定された場合、そのサブリードデータに対応したサブリードコマンドを前記コマンド内部処理ユニットに登録する、
請求項３記載の半導体メモリデバイス。
【請求項８】
前記Ｉ／Ｏコマンドは、ライトコマンドであり、
前記複数のサブＩ／Ｏコマンドは、それぞれ、複数のサブライトコマンドであり、
前記プロセッサは、サブライトコマンドの処理と並列に、前記一時記憶領域内のデータを削除又は変更し論理アドレスと物理アドレスの対応関係を更新することを含んだ処理である別処理を行うようになっており、
前記プロセッサは、前記サブライトコマンドに従うサブライトデータである新サブライトデータの格納先領域が前記一時記憶領域から確保されており且つ前記新サブライトデータにより更新されるサブライトデータである旧サブライトデータが前記一時記憶領域に記憶されている場合、前記旧サブライトデータが格納されている領域を前記一時記憶領域から解放する、
請求項３記載の半導体メモリデバイス。
【請求項９】
前記複数のサブライトコマンドにそれぞれ対応した複数のサブリードコマンドが前記一時記憶領域に格納された場合に、前記１以上のハードウェアロジック回路のうちの所定のハードウェアロジック回路が、前記ライトコマンドの完了を前記上位装置に通知する、
請求項８記載の半導体メモリデバイス。
【請求項１０】
前記一時記憶領域は、バッファである、
請求項２記載の半導体メモリデバイス。
【請求項１１】
前記１以上のハードウェアロジック回路の各々が、処理の結果を示す情報をログ領域に出力し、
前記プロセッサが、障害が発生した場合に、前記ログ領域に記憶されている情報から、障害部位及び障害内容のうちの少なくとも一方を特定する、
請求項１記載の半導体メモリデバイス。
【請求項１２】
前記記憶素子群が、複数の高速物理領域と複数の低速物理領域とを含み、
前記メモリコントローラにより前記上位装置に提供される論理空間が、高速物理領域が割り当てられる論理領域である高速論理領域と、低速物理領域が割り当てられる論理領域である低速論理領域とに区分されており、
前記高速論理領域に属する論理アドレスが指定されたＩ／Ｏコマンドの処理を、前記１以上のハードウェアロジック回路の少なくとも１つが担当し前記プロセッサは担当せず、
前記低速論理領域に属する論理アドレスが指定されたＩ／Ｏコマンドの処理を、前記１以上のハードウェアロジック回路のうちの少なくとも１つに加え前記プロセッサが担当する、
請求項１記載の半導体メモリデバイス。
【請求項１３】
前記メモリコントローラは、上位装置からPCI-Expressに従いＩ／Ｏコマンドを受信する、
請求項１記載の半導体メモリデバイス。
【請求項１４】
複数の半導体メモリデバイスと、
ホスト計算機からのＩ／Ｏ要求に基づき前記複数の半導体メモリデバイスの少なくとも１つの各々にＩ／Ｏコマンドを送信するストレージコントローラと
を有し、
前記複数の半導体メモリデバイスの少なくとも１つの各々が、
前記ストレージコントローラからのＩ／Ｏコマンドの少なくとも一部が所定の条件を満たしている場合に前記Ｉ／Ｏコマンドの少なくとも一部を処理するプロセッサと、前記Ｉ／Ｏコマンドが前記所定の条件を満たしてない場合に前記Ｉ／Ｏコマンドの全てを処理する１以上のハードウェアロジック回路とを有するメモリコントローラと、
前記Ｉ／Ｏコマンドに従うＩ／Ｏ対象データの少なくとも一部であり前記メモリコントローラにより入出力されるデータを記憶する１以上の半導体記憶素子である記憶素子群と
を有する、
ストレージ装置。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、半導体記憶素子に対するデータのＩ／Ｏ（Input/Output）の制御に関する。
【背景技術】
【０００２】
半導体記憶素子（例えばNAND  Flash  Memory）の製造プロセス微細化により、半導体記憶素子の適用先が広がっている。特に、サーバ等のエンタープライズ分野では、ＨＤＤ（Hard  Disk  Drive）に代えて、半導体記憶素子を有する半導体メモリデバイス（例えば、ＳＳＤ（Solid  State  Drive）を採用する例が増加している。
【０００３】
ＳＳＤは、内部に複数の半導体記憶素子を搭載し、これら半導体記憶素子を並列に制御することで、短期間に大量のデータについての書き込みと読み出し（Ｉ／Ｏ処理）を実現する（例えば特許文献１）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】US2013/0238836
【発明の概要】
【発明が解決しようとする課題】
【０００５】
近年、ＳＡＴＡ（Serial  ATA）等の低速なＨＤＤ互換インターフェースに代えて、PCI-Express等のより高速なインターフェースを採用したＳＳＤが発表されている。高速なインターフェースを採用したＳＳＤについては、より高いＩ／Ｏ処理性能が望まれる。なぜなら、インターフェースが高速でも内部のＩ／Ｏ処理性能が低いと、内部のＩ／Ｏ処理性能がボトルネックとなるからである。ＳＳＤが採用するインターフェースが高速であるか否かに関わらず、Ｉ／Ｏ処理性能の向上は望まれる。
【０００６】
Ｉ／Ｏ処理性能の向上のためには、例えば、より多くの半導体記憶素子を並列に制御する必要がある。ＳＳＤ内部の複数の半導体記憶素子の並列制御は、一般的に、ＳＳＤ内部の組み込みプロセッサが行う。このため、ＳＳＤ内の組み込みプロセッサの処理性能の限界によって並列制御可能な半導体記憶素子の数が制限され、ＳＳＤのＩ／Ｏ処理性能を制限してしまう事が考えられる。以下、ＳＳＤ内の組み込みプロセッサの処理性能の限界によってＳＳＤのＩ／Ｏ処理性能が制限されることを、「組み込みプロセッサ処理性能ネック」と記す。
【０００７】
組み込みプロセッサ処理性能ネックの解消の方法として、例えばＩ／Ｏ処理を専用のハードウェアにて実行することが考えられる。しかし、専用ハードウェアは、動的にリソースを確保したり複雑な処理を実行したりすることが困難であり、さらには、ソフトウェア（コンピュータプログラム）のように改変が容易でなく、採用されるメモリ（例えば主記憶又は半導体記憶素子）の仕様の変更やメモリ構成の変化に対応できない場合が生じる。また、バグ発見時の修正がソフトウェアと比べて困難なことから開発リスクの増加というデメリットがある。
【０００８】
ＳＳＤでは、搭載した半導体記憶素子の最小消去単位と最小書き込み単位が異なっていた場合（例えばNAND  Flash  Memory）、消去単位に含まれてしまうが消せないデータを退避させる（所謂リクラメーション）処理が必須となる。こうした制御では、退避するデータがなるべく少ない領域を消去処理対象の領域として選択する複雑な制御が必要となる。また、搭載した半導体記憶素子が書換え回数に制限を有する場合、ＳＳＤに搭載する複数の半導体記憶素子の領域ごとの書換え回数を平準化する（所謂ウェアレベリング）処理が必須となる。こうした制御では、領域毎の書換え回数を管理し、利用する領域を適切に選択する複雑な処理が必要となる。
【０００９】
上記のリクラメーション、ウェアレベリング等の複雑な処理を行う、ハードウェアの設計は困難である。また、こうした制御は、半導体メモリデバイスに搭載する半導体記憶素子の種別により、大きく変化する。例えば、必要となるウェアレベリング制御の精度は、半導体記憶素子の劣化耐性により大きく異なる。このため、仮にウェアレベリングをハードウェアにて実装した場合、採用可能な半導体記憶素子の種別に制限が生じる可能性がある。
【００１０】
一方、Ｉ／Ｏ処理をプロセッサにて実行する場合、コマンドの検知や各種制御をシリアルに行う必要があり、Ｉ／Ｏ処理に時間を要するという問題もある。
【課題を解決するための手段】
【００１１】
半導体メモリデバイスが、記憶素子群（１以上の半導体記憶素子）と、メモリコントローラとを有する。メモリコントローラが、上位装置からのＩ／Ｏコマンドの少なくとも一部が所定の条件を満たしている場合にそのＩ／Ｏコマンドの少なくとも一部を処理するプロセッサと、そのＩ／Ｏコマンドが所定の条件を満たしてない場合にＩ／Ｏコマンドの全てを処理する１以上のハードウェアロジック回路とを有する。
【発明の効果】
【００１２】
Ｉ／Ｏ処理を行う組み込みプロセッサの処理性能ネックが回避され、半導体メモリデバイスの高性能化と応答時間の短縮が期待できる。
【図面の簡単な説明】
【００１３】
【図１】実施形態に係るフラッシュメモリ（ＦＭ）モジュールの内部構成を示す図である。
【図２】ライトコマンド処理の一部でありライトコマンド受信処理を示す。
【図３】ライトコマンド処理の残りでありライトコマンド応答処理を示す。
【図４】リードコマンド処理の一部でありリードコマンド受信処理を示す。
【図５】リードコマンド処理の残りでありリードコマンド応答処理を示す。
【図６】論物変換テーブルを示す。
【図７】ブロック管理テーブルを示す。
【図８】サブライトヒットコマンド処理のフロー図である。
【図９】サブリードヒットコマンド処理のフロー図である。
【図１０】デステージ処理のフロー図である。
【図１１】リクラメーション処理のフロー図である。
【図１２】上位装置の一例を示す。
【図１３】上位装置の別の例を示す。
【発明を実施するための形態】
【００１４】
以下、一実施形態を説明する。なお、本発明は、以下に説明する実施形態に限定されるものではない。
【００１５】
なお、以下の説明では、「ａｂｃテーブル」の表現にて情報を説明することがあるが、情報は、テーブル以外のデータ構成で表現されていてもよい。データ構成に依存しないことを示すために「ａｂｃテーブル」のうちの少なくとも１つを「ａｂｃ情報」と呼ぶことができる。
【００１６】
また、以下の説明では、半導体メモリデバイスが有する半導体記憶素子は、不揮発性半導体記憶素子であり、具体的には、NAND  Flash  Memoryのようなフラッシュメモリ（ＦＭ）であるとする。従って、半導体メモリデバイスは、不揮発性半導体メモリデバイスであり、具体的には、ＦＭモジュールであるとする。ＦＭモジュールは、ＳＳＤのようなＦＭデバイスの一例である。不揮発性半導体記憶素子は、ＦＭに限らず、例えば、磁気抵抗メモリであるＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、抵抗変化型メモリであるＲｅＲＡＭ（ｒｅｓｉｓｔａｎｃｅ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、強誘電体メモリであるＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）等でもよい。また、不揮発性半導体記憶素子に代えて揮発性半導体記憶素子が採用されてもよい。
【００１７】
また、以下の説明では、ＦＭは、複数の「物理ブロック」で構成され、各物理ブロックは、複数の「物理ページ」で構成されているとする。また、アクセス単位領域よりも消去単位領域の方が大きい。具体的には、物理ページ単位でデータがアクセス（リード及びライト）され、物理ブロック単位でデータが消去される。また、ＦＭモジュールが提供する論理空間（論理アドレス空間）には、物理領域が所定の単位（例えばページ単位又はブロック単位）で割り当てられるが、論理空間のうち、物理ブロックが割り当てられている範囲を「論理ブロック」と言い、物理ページが割り当てられている範囲を「論理ページ」と言うことができる。ＦＭは、追記型、具体的には、物理ページが割り当てられている論理ページがライト先の場合、ライト先論理ページに、割当て済の物理ページに代えて新たに空き物理ページが割り当てられ、新たに割り当てられた物理ページにデータが書き込まれる。各論理ページについて、新たに割り当てられた物理ページに書き込まれたデータ（最新のデータ）は「有効データ」であり、有効データが書き込まれている物理ページは「有効ページ」であり、過去に割り当てられていた物理ページに格納されているデータ（過去のデータ）は「無効データ」であり、無効データが書き込まれている物理ページは「無効ページ」である。
【００１８】
（１−１）ＦＭモジュールの構成
【００１９】
まず、図１を用いて、本実施形態に係るＦＭモジュール１００の内部構成を説明する。
【００２０】
図１は、ＦＭモジュール１００の内部構成を示す図である。
【００２１】
ＦＭモジュール１００は、複数（例えば３２）のＦＭ１４０であるＦＭ群と、複数のＦＭ１４０に接続されたＦＭコントローラ１１０とを有する。ＦＭコントローラ１１０は、複数のデバイス、例えば、プロセッサ１２３、ＲＡＭ（Random  Access  Memory）１２２、データコンプレッサ（データ圧縮/解凍ユニット）１１６、パリティジェネレータ（パリティ生成ユニット）１１５、データキャッシュ１１４、Ｉ／Ｏインターフェース１１８、ＦＭインターフェース１２４、コマンド外部処理ユニット１１９、コマンド内部処理ユニット１２０、コピーＤＭＡ（Direct  Memory  Access）ユニット１２１、キャッシュヒット判定ユニット１１１、キャッシュ登録ユニット１１２、コマンド分割ユニット１１３、及び、スイッチ１１７を備えている。キャッシュヒット判定ユニット１１１、キャッシュ登録ユニット１１２、コマンド分割ユニット１１３、コマンド外部処理ユニット１１９及びコマンド内部処理ユニット１２０の各々が、Ｉ／Ｏ処理の一部を実行するハードウェア（ハードウェアロジック回路）である。以下、Ｉ／Ｏ処理の一部を実行するハードウェア（ハードウェアロジック回路）を、特に、「Ｉ／Ｏハードウェア」と呼んでよい。本実施形態で言う「Ｉ／Ｏ処理」とは、上位装置からのＩ／Ｏコマンドの処理であり、具体的には、ライトコマンド処理（図２に示す処理と図３に示す処理から成る処理）と、リードコマンド処理（図４に示す処理と図５に示す処理から成る処理）である。また、「上位装置」は、ＦＭモジュール１００にＩ／Ｏコマンドを送信する装置である。例えば、図１２によれば、ホスト計算機１３００が、上位装置である。また、例えば、図１３によれば、ストレージコントローラ１２０１が、上位装置である。具体的には、ストレージ装置１２００において、複数のＦＭモジュール１００がそれぞれストレージコントローラ１２０１に接続されており、ストレージコントローラ１２０１が、ホスト計算機１２５０からＩ／Ｏ要求を受信し、そのＩ／Ｏ要求を基に、ＦＭモジュール１００にＩ／Ｏコマンドを送信する。図１２において、ホスト計算機１３００とＦＭモジュール１００間は、ＰＣＩｅ（PCI  Express）のような高速のインターフェース経由で通信してよい。図１３において、ストレージコントローラ１２０１とＦＭモジュール１００間も、ＰＣＩｅのような高速のインターフェース経由で通信してよい。
【００２２】
再び図１を参照する。スイッチ１１７には、プロセッサ１２３、ＲＡＭ１２２、データコンプレッサ１１６、パリティジェネレータ１１５、データキャッシュ１１４、Ｉ／Ｏインターフェース１１８、ＦＭインターフェース１２４、キャッシュヒット判定ユニット１１１、キャッシュ登録ユニット１１２、コマンド分割ユニット１１３、コマンド外部処理ユニット１１９、コマンド内部処理ユニット１２０及びコピーＤＭＡユニット１２１が接続されている。スイッチ１１７は、デバイス（要素）間のデータをアドレス（又はＩＤ）によってルーティングし転送する。なお、本実施形態では、図１に示すように、単一のスイッチ１１７に各デバイスがスター状に接続された例について記すが、本発明は、この例に限定されるものではない。デバイス間が通信可能に接続されていればよい。
【００２３】
Ｉ／Ｏインターフェース１１８は、上位装置と接続するデバイスである。Ｉ／Ｏインターフェース１１８は、スイッチ１１７を介してＦＭコントローラ１１０における別のデバイスと通信可能である。Ｉ／Ｏインターフェース１１８は、上位装置からＩ／Ｏコマンド（ライトコマンド／リードコマンド）を受信する。Ｉ／Ｏコマンドでは、Ｉ／Ｏ先（ライト先又はリード元）を表す論理アドレス（典型的にＬＢＡ（Logical  Block  Address））が指定されている。Ｉ／Ｏコマンドがライトコマンドの場合、Ｉ／Ｏインターフェース１１８は、ライトコマンドに従うライト対象のデータ（以下、「ライトデータ」と言うことがある）を受信する。Ｉ／Ｏインターフェース１１８は、受信したライトデータを、ＲＡＭ１２２に記録する。また、Ｉ／Ｏインターフェース１１８は、上位装置からコマンドを受信した際に、プロセッサ１２３に割り込みを行うか、またはプロセッサ１２３がポーリングしているＲＡＭ１２２上の記憶領域にコマンドを受信したことを通知するデータを書き込む。
【００２４】
プロセッサ１２３は、スイッチ１１７を介してＦＭコントローラ１１０の他のデバイスと通信する。プロセッサ１２３は、ＲＡＭ１２２に記憶されているプログラム及び管理テーブルを基にＦＭコントローラ１１０全体を制御する。また、プロセッサ１２３は、定期的な情報取得（例えばＲＡＭ１２２に対するポーリング）、及び割り込み受信機能によって、ＦＭコントローラ１１０全体を監視する。
【００２５】
データキャッシュ１１４は、一時記憶領域の一例であり、ＦＭコントローラ１１０における転送対象のデータを一時的に記憶する。本実施形態では、データキャッシュ１１４は、読み出されたデータが残らないバッファであるが、読み出されたデータが残るキャッシュメモリのような記憶領域でもよい。
【００２６】
複数のＦＭインターフェース１２４がＦＭコントローラ１１０に設けられており、複数のＦＭインターフェース１２４を介して、並列に複数のＦＭ１４０に対してＩ／Ｏを行うことができる。１のＦＭインターフェース１２４に、１のバスが接続されており、１のバスに、２のＦＭ１４０が接続されている。本実施形態では、１６のＦＭインターフェース１２４が、存在し、故に、１６のバスが存在し、結果として、３２のＦＭが存在する。ＦＭインターフェース１２４は、Ｉ／Ｏ先のＦＭ１４０にＣＥ（Chip  Enable）信号を出すことで、同一バスに接続された２のＦＭをそれぞれ独立して制御することができる。
【００２７】
ＦＭインターフェース１２４は、プロセッサ１２３（又はＩ／Ｏハードウェア（例えばコマンド内部処理ユニット１２０））より指示されるＩ／Ｏ指示（ライト指示／リード指示）に応じて動作する。Ｉ／Ｏ指示では、Ｉ／Ｏ先を表す情報として、例えば、チップ番号（ＦＭ１４０の識別番号）、ブロック番号（ＦＭ１４０における物理ブロックの識別番号）、（ＦＭ１４０における物理ブロック内の物理ページの識別番号）が指定されている。Ｉ／Ｏ指示がリード指示の場合、ＦＭインターフェース１２４は、リード指示に従うリード元領域（ＦＭ１４０内の物理ページ）から読み出されたデータをデータキャッシュ１１４に転送する（書き込む）。Ｉ／Ｏ指示がライト指示の場合、ＦＭインターフェース１２４は、ライト対象のデータをデータキャッシュ１１４から読み出し、そのデータを、ライト先に従うライト先領域（ＦＭ１４０内の物理ページ）に転送する（書き込む）。なお、ＦＭインターフェース１２４が、データキャッシュ１１４を経由せずにデータを上位装置に転送可能である場合、リード指示に従い読み出されたデータは、データキャッシュ１１４に格納されることなく上位装置に転送されてよい。
【００２８】
また、ＦＭインターフェース１２４は、ＥＣＣ（Error  Correction  Code  /  Error  Checking  and  Correction）生成回路、ＥＣＣによるデータ損失検出回路、ＥＣＣ訂正回路を有してよい。ＦＭインターフェース１２４は、データ書き込みの際、データに対してＥＣＣを付加してＦＭ１４０にデータを書き込んでよい。また、データ読み出しの際、ＦＭインターフェース１２４は、ＥＣＣによるデータ損失検出回路によって、ＦＭ１４０から読み出されたデータを検査し、データ損失が検出された際には、ＥＣＣ訂正回路によってデータ訂正を行ってよい。
【００２９】
データコンプレッサ１１６は、可逆圧縮のアルゴリズムを処理する機能を有し、複数種のアルゴリズムや、圧縮レベルの変更機能を備える。データコンプレッサ（データ圧縮/解凍ユニット）１１６は、プロセッサ１２３（又はＩ／Ｏハードウェア（例えばコマンド内部処理ユニット１２０））からの指示に従って、データキャッシュ１１４からデータをリードし、可逆圧縮のアルゴリズムによりデータ圧縮演算もしくはデータ圧縮の逆変換であるデータ解凍（伸長）演算を行い、その結果を再度データキャッシュに書き込む。なお、データコンプレッサ１１６は、ハードウェア（ロジック回路）として実装されてもよいし、圧縮／解凍のプログラムをプロセッサ１２３で処理することで、同様の機能が実現されてもよい。
【００３０】
パリティジェネレータ１１５は、ＸＯＲ演算、Even  Odd演算、リードソロモン演算等のパリティ生成機能を有している。パリティジェネレータ１１５は、プロセッサ１２３（又はＩ／Ｏハードウェア（例えばコマンド内部処理ユニット１２０））からの指示に従って、データキャッシュ１１４からパリティ生成対象となるデータをリードし、前述のパリティ生成機能により、ＲＡＩＤ５又はＲＡＩＤ６のパリティを生成する。
【００３１】
キャッシュヒット判定ユニット１１１は、上位装置からのＩ／Ｏコマンドで指定されたＩ／Ｏ先論理アドレス範囲（例えばＬＢＡ範囲）のデータがデータキャッシュ１１４内のキャッシュ領域に記録されているかを、キャッシュヒット判定テーブルを参照して判定するハードウェアである。
【００３２】
キャッシュ登録ユニット１１２は、上位装置からライトコマンドがあった場合に動作し、ライトデータをデータキャッシュ１１４内のキャッシュに格納したことを管理するため、キャッシュヒット判定テーブルを更新する。
【００３３】
コマンド分割ユニット１１３は、上位装置からのＩ／Ｏコマンドを複数のサブＩ／Ｏコマンドに分割するハードウェアである。コマンド分割ユニット１１３は、Ｉ／Ｏコマンドを、ＦＭモジュール１００内部のＬＢＡ管理単位に分割する。本実施形態では、上位装置から受信したＩ／Ｏコマンドを分割する例を説明するが、分割されるコマンドは、上位装置からのＩ／Ｏコマンドに限られない。
【００３４】
コマンド外部処理ユニット１１９は、上位装置とやり取りするコマンドの制御を行うハードウェアである。上位装置は、コマンド外部処理ユニット１１９のレジスタにアクセスすることで、ＦＭモジュール１００に対するコマンドを作成したことを通知する。通知を受けたコマンド外部処理ユニット１１９は、上位装置よりコマンドを取得する。
【００３５】
また、コマンド外部処理ユニット１１９は、上位装置からのコマンドが完了した際、そのコマンドの完了通知を上位装置に通知する。上位装置は、コマンド外部処理ユニット１１９のレジスタにアクセスすることで（例えば完了通知の受信を意味する情報をレジスタに書き込むことで）、ＦＭモジュール１００から完了通知を受信したことを通知する。
【００３６】
コマンド内部処理ユニット１２０は、ＦＭモジュール１００の内部のコマンド処理を行うハードウェアである。コマンド内部処理ユニット１２０は、実施形態において、キャッシュヒット判定ユニット１１１にて、リードコマンドを内部のＬＢＡ管理単位に分割したサブリードコマンドのリクエスト対象領域が、キャッシュに登録されていない場合、サブリードコマンドをＦＭインターフェース１２４用のコマンドに変換し、ＦＭインターフェース１２４にコマンドを作成したことを通知する。
【００３７】
コピーＤＭＡユニット１２１は、主にデータキャッシュ１１４のデータをコピーする際に動作するハードウェアである。コピーＤＭＡユニット１２１は、プロセッサ１２３からの指示に従って、データキャッシュ１１４内の記憶領域に記録されているデータを他の領域にコピーする。
【００３８】
以上説明した、スイッチ１１７、Ｉ／Ｏインターフェース１１８、プロセッサ１２３、データキャッシュ１１４、ＦＭインターフェース１２４、データコンプレッサ１１６、パリティジェネレータ１１５、キャッシュヒット判定ユニット１１１、キャッシュ登録ユニット１１２、コマンド分割ユニット１１３、コマンド外部処理ユニット１１９、コマンド内部処理ユニット１２０及びコピーＤＭＡユニット１２１の各々は、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＢＡ(Field  Programmable  Gate  Array)として、一つの半導体素子内で構成してもよいし、複数の個別専用ＩＣ（Integrated  Circuit）を相互に接続した構成であってもよい。
【００３９】
ＲＡＭ１２２は、典型的にはＤＲＡＭ（Dynamic  Random  Access  Memory）などの揮発性メモリが挙げられる。ＲＡＭ１２２は、ＦＭモジュール１００内で用いられるＦＭ１４０の管理テーブル、コマンド分割ユニットが作成するサブコマンド、ＤＭＡが用いる転送制御情報を含んだ転送リスト等を格納する。なお、ＲＡＭ１２２は、データを格納するデータキャッシュ１１４の機能の一部または全てを含みデータ格納に用いる構成としてもよい。
【００４０】
ここまで、図１を用いて、本実施形態に係るＦＭモジュール１００の構成を説明した。なお、本実施形態では、図１に示すように、ＦＭ１４０を搭載したＦＭモジュール１００について記述するが、搭載する不揮発性メモリは、ＦＭに限定されるものではない。Phase  Change  RAMやResistance  RAM等でもよい。
【００４１】
（１−２）第１の管理テーブル：論物変換テーブル
【００４２】
続いて、ＦＭモジュール１００が制御に用いる管理テーブルについて説明する。
【００４３】
ＦＭモジュール１００は、複数のＦＭ１４０（チップ）を搭載し、複数のブロック（物理ブロック）、複数のページ（物理ページ）により構成される記憶領域を管理し、上位装置に対しては、記憶領域として論理空間（論理領域）を提供する。ＦＭ１４０により構成される物理領域は、ＦＭモジュール１００内部のみで用いるアドレス空間に一意に対応づけて管理する。以下、このＦＭモジュール１００内部のみで用いる物理領域指定用アドレス空間を、ＰＢＡ（Physical  Block  Address）と記す。ＦＭコントローラ１１０は、複数のＰＢＡを、上位装置に提供する論理空間（アドレス空間）に対応した複数のＬＢＡ（Logical  Block  Address）に対応付けて管理する。
【００４４】
ＦＭモジュール１００の対応付け管理用の管理テーブルである論物変換テーブル６００について図６を用いて説明する。
【００４５】
図６は、論物変換テーブル６００を示す。
【００４６】
論物変換テーブル６００は、ＦＭモジュール１００内の記憶領域、例えばＲＡＭ１２２に格納されている。論物変換テーブル６００は、ＬＢＡ／ＰＢＡの組（対応付け）毎に、ＬＢＡ６０１、ＰＢＡ６０２及びＰＢＡ長６０３を有する。ＬＢＡ６０１は、ＬＢＡを示し、ＰＢＡ６０２は、ＰＢＡを示し、ＰＢＡ長６０３は、ＰＢＡの長さを示す。ＰＢＡの長さは、データコンプレッサ１１６によりデータが圧縮されたか否か等により異なる。Ｉ／Ｏコマンドがリードコマンドの場合、プロセッサ１２３又はＩ／Ｏハードウェア（例えばコマンド内部処理ユニット１２０）は、上位装置からのリードコマンドで指定されるＬＢＡに対応するＰＢＡ及びＰＢＡ長を論物変換テーブル６００から特定し、特定したＰＢＡ及びＰＢＡ長に対応した物理領域（ＦＭ群における領域）からデータを読み出す。Ｉ／Ｏコマンドがライトコマンドの場合、プロセッサ１２３又はＩ／Ｏハードウェア（例えばコマンド内部処理ユニット１２０）は、上位装置からのライトコマンドで指定されるＬＢＡに対応するＰＢＡ（つまり更新前データが格納されている物理領域を示すＰＢＡ）を論物変換テーブル６００から特定し、特定したＰＢＡとは異なるＰＢＡ（ライトデータのライト先となる１以上の空きページに対応したＰＢＡ）とＰＢＡ長を決定する。プロセッサ１２３又はＩ／Ｏハードウェア（例えばコマンド内部処理ユニット１２０）は、決定したＰＢＡ及びＰＢＡ長を、論物変換テーブル６００の該当箇所（上位装置からのライトコマンドで指定されるＬＢＡに対応したフィールド）に記録する。この動作にて、論理領域上のデータの上書き可能とする。
【００４７】
ＬＢＡ６０１のカラムには、ＦＭモジュール１００が提供する論理空間に属するＬＢＡが所定サイズ（本実施形態では４ＫＢ）ごとに順に並んでいる。具体的には、論理空間が所定サイズに区分されており、単位論理領域毎に、エントリ（レコード）がテーブル６００に存在する。例えば、ＬＢＡ６０１内の数値１は、５１２バイトの１セクタを意味する。これは、本実施形態では、ＬＢＡとＰＢＡの対応付けが、４ＫＢ単位で管理されていることを意味する。このため、論理空間を分割する単位を管理単位と呼ぶこともできる。但し、本発明では、ＦＭモジュール１００のような半導体メモリデバイスについて、ＬＢＡのような論理アドレスとＰＢＡのような物理アドレスとの組（対応付け）が４ＫＢ単位にて管理することに限定されるものではない。ＬＢＡは如何なる単位で管理されてもよい。
【００４８】
ＰＢＡ６０２は、ＬＢＡに対応付けられた先頭ＰＢＡを示す。本実施形態では、ＰＢＡは、５１２バイト毎に管理される。図６の例では、ＬＢＡ「0x000_0000_0000」に対応付けられたＰＢＡとして、[XXX」というあるＰＢＡ値が対応付けられている。このＰＢＡ値は、ＦＭの記憶領域を一意に示すアドレスである。これにより、リードコマンドにＬＢＡ「0x000_0000_0000」が指定されていた場合、ＰＢＡ「XXX」が特定される。ＬＢＡに対応付けられたＰＢＡが無い場合（つまり、論理空間における空きの範囲については）、ＰＢＡ「未割当」が対応付けられる。
【００４９】
ＰＢＡ長６０３は、データの実際のサイズをセクタ数（１セクタ＝５１２バイト）で表現している。図６に示す例では、ＬＢＡ「0x000_0000_0000」を開始アドレスとする４ＫＢ（論理空間としては８セクタ）のデータの長さは、ＰＢＡ長「２」、５１２バイト×２セクタ＝１ＫＢの長さであることがわかる。従って、ＰＢＡ長「２」とＰＢＡ「XXX」とから、ＬＢＡ「0x000_0000_0000」を開始アドレスとする４ＫＢのデータは、ＰＢＡ「XXX」から「XXX+2」の１ＫＢの領域に圧縮して格納されていることがわかる。
【００５０】
なお、実施形態に示すＦＭモジュールは、データを圧縮して格納した例について示すが、本発明は、この例に限定されるものではない。データは圧縮して格納されていなくともよい。圧縮してデータを格納しない場合、論物変換テーブル６００にＰＢＡ長６０３のカラムは不要である。
【００５１】
（１−３）第２の管理テーブル：ブロック管理テーブル
【００５２】
続いて、ブロック管理テーブルについて図７を用いて説明する。
【００５３】
図７は、ブロック管理テーブル７００を示す。
【００５４】
ブロック管理テーブル７００は、ＦＭモジュール１００内の記憶領域、例えばＲＡＭ１２２に格納されており、例えば所定サイズのＰＢＡ毎に、ＰＢＡ７０１、チップ番号７０２、ブロック番号７０３及び無効ＰＢＡ量７０４を有する。
【００５５】
ＰＢＡ７０１は、ＦＭ群における物理領域を示す。なお、本実施形態では、ＰＢＡは、ブロック単位で区分して管理される。図７では、ＰＢＡ７０１は、先頭アドレスを示す。例えば、ＰＢＡ「0x000_0000_0000」は、「0x000_0000_0000」〜「0x000_000F_FFFF」のＰＢＡ範囲を示す。なお、図６と図７では、ＰＢＡの表現形式が異なっているが、ＰＢＡという点で同一である。
【００５６】
チップ番号７０２は、ＦＭ１４０（チップ）の識別番号を示す。ブロック番号７０３は、ブロック（物理ブロック）の識別番号を示す。
【００５７】
無効ＰＢＡ量７０４は、無効ＰＢＡ量を示す。無効ＰＢＡ量とは、論理空間への対応付けを解除されたＰＢＡ領域の量、つまり、無効領域（無効ページ）の総量（総サイズ）である。逆に、論理空間への対応付けがなされているＰＢＡ領域は、有効領域（有効ページ）である。無効ＰＢＡ領域は、データの上書きが不可能な不揮発性メモリにおいて、疑似的に上書きを実現しようとする際に必然的に生じるものである。具体的には、データ更新の際、他の未書き込みＰＢＡ領域に更新データを書き込み、論物変換テーブル６００のＰＢＡ６０２とＰＢＡ長６０３が、更新データのライト先のＰＢＡ領域の先頭アドレスと、更新データのＰＢＡ長に更新される。従って、更新前データが格納されているＰＢＡ領域の論理空間への対応付けは解除される。本実施形態では、ＦＭの最小消去単位であるブロック毎にこの無効ＰＢＡ量（例えば無効ページ数）がカウントされ、無効ＰＢＡ量が多いブロックが、優先的に、リクラメーション対象領域（リクラメーションの際のデータの移動元物理ブロック）として選択される。図７の例によれば、チップ番号「０」及びブロック番号「０」のブロックの無効ＰＢＡ量は、１６０ＫＢである。
【００５８】
本実施形態では、無効ＰＢＡ量がリクラメーション開始閾値以上となったブロックについて、リクラメーションが行われる。リクラメーションでは、移動元ブロック（無効ＰＢＡ量がリクラメーション開始閾値以上となったブロック）内の有効ＰＢＡ領域（有効ページ）から有効データが別のブロックに移動され、その結果、その有効ＰＢＡ領域が無効ＰＢＡ領域となり（つまり、移動元ブロックの全領域が無効ＰＢＡ領域となり）、その後、移動元ブロックに対し消去処理が行われる。その結果として、移動元ブロックが空きブロックとなる。リクラメーションでのデータ移動（データコピー）によりＦＭ１４０への書き込みが発生する。これにより、ＦＭ１４０の劣化が進展するとともに、データ移動動作としてＦＭモジュール１００のプロセッサ１２３やバス帯域などのリソースが消費され性能低下の要因ともなる。このため、有効ＰＢＡ領域内のデータの移動は可能な限り少ないことが望ましい。ＦＭコントローラ１１０は、ブロック管理テーブル７００を参照し、無効ＰＢＡ量７０４の値が大きい（無効ＰＢＡ領域を多く含む）ブロックを優先的に消去処理対象（移動元ブロック）として選択することで、移動されるデータの量を少なくすることができる。
【００５９】
なお、本実施形態では、無効ＰＢＡ量の管理が、論理空間への対応付けが解除された領域の量の管理であるが、本発明はこの管理単位に限定されるものではない。例えば、ページ数を単位として無効データの量が管理されてもよい。
【００６０】
以上で、ブロック管理テーブル７００について説明した。
【００６１】
（１−４）ライトコマンド処理及びリードコマンド処理
【００６２】
続いて、図２〜図５を用いて、ライトコマンド処理とリードコマンド処理を説明する。なお、コマンド外部処理ユニット１１９、コマンド分割ユニット１１３、キャッシュヒット判定ユニット１１１、キャッシュ登録ユニット１１２、コマンド内部処理ユニット１２０、及び、コピーＤＭＡユニット１２１の少なくとも１つの各々は、図２〜図５に模式的に示すように、処理を行う度にコマンド処理ログ１３２に処理状況を記録する。この機能により、複数段階にわたるライトコマンド処理及びリードコマンド処理の各々において、障害が生じたときプロセッサがコマンド処理ログ１３２を算出することで、障害箇所を特定する事が可能となる。コマンド処理ログ１３２は、図１に示したように例えばＲＡＭ１２２に記憶される。
【００６３】
また、コマンド外部処理ユニット１１９、コマンド分割ユニット１１３、キャッシュヒット判定ユニット１１１、キャッシュ登録ユニット１１２、コマンド内部処理ユニット１２０、及び、コピーＤＭＡユニット１２１の少なくとも１つの各々は、障害を検知（例えばタイムアウト）した際に、プロセッサ１２３に割り込む機能を有している。割り込みを受けたプロセッサ１２３は、前述のコマンド処理ログを解析することで障害箇所を特定する。
【００６４】
（１−４−１）ライトコマンド処理
【００６５】
図２及び図３は、ライトコマンド処理を示す。具体的には、図２は、ライトコマンド処理の一部でありライトコマンド受信処理を示す。図３は、ライトコマンド処理の残りでありライトコマンド応答処理を示す。
【００６６】
図２に示すように、上位装置からライトコマンドを受信したコマンド外部処理ユニット１１９が、受信したライトコマンドを、ユニット１１９の内部領域（例えばレジスタ）に登録する。コマンド外部処理ユニット１１９は、登録したライトコマンドの状態を、完了通知の受信待ちの状態とする。コマンド外部処理ユニット１１９は、コマンド分割ユニット１１３に、登録したライトコマンドを転送する。なお、コマンド外部処理ユニット１１９がライトコマンドを内部領域に登録する理由は、ハードウェアであるコマンド外部処理ユニット１１９が完了応答を上位装置に送信するためである（この理由は、リードコマンドの登録（図４参照）についても同様である）。すなわち、コマンド外部処理ユニット１１９にて、コマンド外部処理ユニット１１９が受信した各ライトコマンドについて、完了通知を送信済みか未送信かが管理される。完了通知が送信されたライトコマンドは、コマンド外部処理ユニット１１９から削除されてよい。
【００６７】
コマンド外部処理ユニット１１９からライトコマンドを受信したコマンド分割ユニット１１３は、ライトコマンドをサブライトコマンドに分割し、サブライトコマンドを、例えば内部領域（例えばユニット１１３のレジスタ）に登録する。ここで、ライトコマンドから得られるサブライトコマンドの数は、ライトデータのサイズを、内部管理単位（論理空間の単位論理領域）、言い換えれば、ページサイズで除算することにより得られる商（商が０の場合は１）でよい。例えば、ライトコマンドに従うライトデータのサイズが１６ＫＢであり、内部管理単位（ページサイズ）が４ＫＢの場合、得られるサブライトコマンドの数は、１６／４＝４でよい。コマンド分割ユニット１１３は、ライトコマンドとサブライトコマンドの対応関係を例えばユニット１１３の内部領域（例えばレジスタ）に登録する。対応関係は、例えば、ライトコマンドのＩＤ（例えば「Ａ」）と、そのライトコマンドから分割された複数のサブライトコマンドにそれぞれ対応した複数のＩＤ（例えば「Ａ−１」、「Ａ−２」、「Ａ−３」、「Ａ−４」）との組でよい。ライトコマンドのＩＤは、上位装置からのライトコマンドに含まれているＩＤでもよいし、ＦＭコントローラ１１０（例えばコマンド外部処理ユニット１１９又はコマンド分割ユニット１１３）により付与されたＩＤでもよい。サブライトコマンドのＩＤは、例えば、ライトコマンドのＩＤを基に付与されたＩＤでよく、また、例えば、ＦＭコントローラ１１０（例えばコマンド分割ユニット１１３）により付与されたＩＤでよい。コマンド分割ユニット１１３は、複数のサブライトコマンドの各々について、状態を、完了通知（応答）の受信待ちの状態とする。コマンド分割ユニット１１３は、分割した複数のサブライトコマンドをそれぞれキャッシュ登録ユニット１１２に転送する。１つのサブライトコマンドは、１つのサブライトデータの書き込みに対応し、例えば、１つのサブライトデータのライト先のＬＢＡを指定する。サブライトデータは、ライトデータの一部分であり、例えば、内部管理単位（ページサイズ）と同じサイズである。１つのサブライトデータは、２以上のページに跨らず、１つのページに書き込まれる。
【００６８】
コマンド分割ユニット１１３にてライトコマンドをサブライトコマンドに分割する理由は、ライトデータの格納状態が内部管理単位毎（サブライトデータ毎）に格納状態が異なり得ることにある。言い換えれば、同一ページに格納されるデータについてキャッシュヒット（ライト先ＬＢＡに対応するデータがキャッシュ１１４に存在する）とキャッシュミス（ライト先ＬＢＡに対応するデータがキャッシュ１１４に存在しない）が混在することを避けることにある。ライト対象のデータの全てがキャッシュミスであれば、プロセッサ１２３による処理が不要であるが、ライト対象のデータが少なくとも一部でもキャッシュヒットであれば、プロセッサ１２３による処理が必要になってしまう。従って、同一ページに格納されるデータについてキャッシュヒットとキャッシュミスが混在することを避けることが望ましい。
【００６９】
具体的には、例えば、１６ＫＢのライトデータのうち、１のサブライトデータ（４ＫＢのデータ）はデータキャッシュ１１４上にあり、残りの３のサブライトデータ（合計１２ＫＢのデータ）は１以上のＦＭ１４０に格納されていることがあり得る。この場合、データキャッシュ１１４に格納されているサブライトデータについては、キャッシュ管理テーブル（図示せず）の更新が必要となる。キャッシュ管理テーブルは、キャッシュ判定テーブルと同様の情報でもよい。一方、ＦＭ１４０に格納されているサブライトデータについては、サブライトデータがキャッシュ１１４に登録されればよく、サブライトデータが格納されているキャッシュ領域（キャッシュ１１４における一領域）のアドレスがプロセッサ１２３に通知される必要がない。このように、ＦＭモジュール１００内部では、管理単位（例では４ＫＢ）毎に、論理領域（サブライトデータに対応した領域）の状態が異なり得る。このため、本実施形態では、ライトコマンドから、管理単位と同サイズのデータであるサブライトデータについてのサブライトコマンドが生成される。サブライトコマンドを受信したＩ／Ｏハードウェア又はプロセッサ１２３は、単一のサブライトコマンドの状態のみを制御すればよく、そのサブライトコマンドを含んだライトコマンド内の別のサブライトコマンドの処理の完了を待つ必要がない。結果として、高性能化が期待される。また、プロセッサ１２３の処理が不要な状況のサブライトコマンドについて、プロセッサ１２３による処理が不要となり、結果として、プロセッサ処理性能ネックによる性能制限を軽減できる。
【００７０】
なお、ライトデータのサイズが管理単位（ページサイズ）以下の場合、サブライトコマンドの数は１でよく、また、そのサブライトコマンドはライトコマンドでもよい。言い換えれば、ライトデータのサイズが管理単位（ページサイズ）以下の場合、コマンド分割ユニット１１３は、コマンド外部処理ユニット１１９からのライトコマンドをキャッシュヒット判定ユニット１１１に転送してよい。
【００７１】
コマンド分割ユニット１１３から複数（又は１）のサブライトコマンドを受信したキャッシュヒット判定ユニット１１１は、受信したサブライトコマンド毎に、キャッシュヒット判定を行う（サブライトコマンドで指定されているＬＢＡに対応したサブライトデータがキャッシュ１１４に登録されている否かを判定する）。具体的には、例えば、本実施形態では、キャッシュ登録ユニット１１２がデータのキャッシュ１１４への登録を行い、キャッシュヒット判定ユニット１１１が、キャッシュヒット判定テーブル（図示せず）を持っており、キャッシュヒット判定ユニット１１１は、このキャッシュヒット判定テーブルを参照することで、サブライトコマンドが対象とするサブライトデータがキャッシュ１１４上にあるかどうか判定する。キャッシュヒット判定テーブルは、例えば、サブキャッシュ領域のアドレスとそのサブキャッシュ領域内のデータに対応したＬＢＡ（論理空間に属するＬＢＡ）との組を有してよい。そのようなキャッシュヒット判定テーブルに、サブライトコマンドで指定されているＬＢＡが登録されていれば、キャッシュヒットであり、サブライトコマンドで指定されているＬＢＡが登録されていなければ、キャッシュミスである。サブライトコマンドについて、キャッシュヒットとは、そのサブライトコマンドが対象とするＬＢＡ領域（論理領域）に対応付けられたデータが、ＦＭ１４０ではなくデータキャッシュ１１４に格納されている状態である。サブライトコマンドについて、キャッシュミスとは、そのサブライトコマンドが対象とするＬＢＡ領域（論理領域）に対応付けられたデータが、データキャッシュ１１４ではなくＦＭ１４０に格納されている状態である。キャッシュヒット判定ユニット１１１にて、キャッシュヒットと判定されたサブライトコマンドは、以降、サブライトヒットコマンドとして管理される。このサブライトヒットコマンドには、キャッシュヒット判定ユニットにより、新サブライトデータ（新たにサブキャッシュ領域に格納されることになるサブライトデータ）の格納先のサブキャッシュ領域のアドレスと、キャッシュヒットしたサブキャッシュ領域（旧サブライトデータ（新サブライトデータにより更新されるサブライトデータ）が格納されているサブキャッシュ領域）のアドレスとが指定される。一方、キャッシュヒット判定ユニット１１１にて、キャッシュミスと判定されたサブライトコマンドは、以降、サブライトミスコマンドとして管理される。サブライトヒットコマンドもサブライトミスコマンドも、キャッシュヒット判定ユニット１１１からキャッシュ登録ユニット１１２に転送される。
【００７２】
キャッシュヒット判定ユニット１１１からサブライトコマンド（サブライトヒットコマンド及びサブライトミスコマンド）を受信したキャッシュ登録ユニット１１２は、サブライトコマンド毎に、サブライトコマンドで指定されているＬＢＡ（論理空間に属するＬＢＡ）をキャッシュヒット判定テーブルに登録する。キャッシュ登録ユニット１１２は、受信したサブライトコマンドのうち、サブライトヒットコマンドのみプロセッサ１２３に通知し、サブライトミスコマンドについては、プロセッサ１２３に通知しない。
【００７３】
サブライトヒットコマンドを受信したプロセッサ１２３は、そのサブライトヒットコマンドに応じた制御を行う。サブライトヒットコマンドには、旧サブライトデータが記憶されているサブキャッシュ領域（旧サブキャッシュ領域）のアドレスと、新サブライトデータの格納先のサブキャッシュ領域（新サブキャッシュ領域）のアドレスとが指定されている。プロセッサ１２３は、サブライトヒットコマンドを基に旧サブキャッシュ領域を特定し、特定したキャッシュ領域を解放する。具体的には、例えば、プロセッサ１２３は、キャッシュヒット判定テーブルから、サブライトヒットコマンドで指定されているＬＢＡと、旧サブキャッシュ領域のアドレスとの対応付けを削除する。
【００７４】
サブライトヒットコマンドの処理の後、プロセッサ１２３は、図３に示すように、そのサブライトヒットコマンドの完了をコマンド分割ユニット１１３に通知する。また、キャッシュ登録ユニット１１２は、サブライトミスコマンドに対応したサブライトデータをデータキャッシュ１１４へ登録した後、サブライトミスコマンドの完了をコマンド分割ユニット１１３に通知する。なお、本実施形態では、サブライトデータをＦＭ１４０ではなくデータキャッシュ１１４に格納した段階で完了が通知されるが、本発明は、この例に限定されるものではない。例えば、サブライトコマンドのデータがＦＭ１４０に書き込まれた後に、完了がコマンド分割ユニット１１３に通知されてもよい。
【００７５】
前述したように、コマンド分割ユニット１１３は、ライトコマンドと分割したサブライトコマンドの対応関係を保持している。コマンド分割ユニット１１３は、ライトコマンドを構成する全てのサブライトコマンドが完了することを監視している。コマンド分割ユニット１１３は、完了を受信する毎に、その完了に対応したサブライトコマンドの状態を、完了受信済みとする。ライトコマンドを構成する全てのサブライトコマンドについて、プロセッサから完了の報告が有った場合、コマンド分割ユニット１１３は、ライトコマンドが完了したことをコマンド外部処理ユニット１１９に通知する。
【００７６】
コマンド分割ユニット１１３よりコマンド完了を受信したコマンド外部処理ユニット１１９は、上位装置に対して、ライトコマンドの完了通知を転送する。上位装置に転送される完了通知（ライトコマンドの応答）は、コマンド分割ユニット１１３からの通知でもよいし、コマンド外部処理ユニット１１９により生成された通知でもよい。
【００７７】
なお、コマンド外部処理ユニット１１９は、上位装置からライトコマンドを受信した場合にそのライトコマンドについてタイマーをセットし（時間計測を開始し）、ライトコマンドを受信してから一定時間以内にコマンド分割ユニット１１３から完了通知が来なかった場合、タイムアウトエラーを上位装置に通知してよい。コマンド外部処理ユニット１１９は、複数のＩ／Ｏコマンドを上位装置から受信且つ保持しており、Ｉ／Ｏコマンド毎に前述のタイマーにて時間監視を行ってよい。
【００７８】
以上が、本実施形態におけるライトコマンド処理である。ライトコマンド処理によれば、複数のサブライトコマンドにそれぞれ対応した複数のサブリードコマンドがキャッシュ１１４に格納された場合に、ライトコマンドの完了が上位装置に通知される。これにより、ライトコマンド処理の高速化が期待できる。
【００７９】
（１−４−２）リードコマンド処理
【００８０】
図４及び図５は、リードコマンド処理を示す。具体的には、図４は、リードコマンド処理の一部でありリードコマンド受信処理を示す。図５は、リードコマンド処理の残りでありリードコマンド応答処理を示す。
【００８１】
図４に示すように、上位装置からリードコマンドを受信したコマンド外部処理ユニット１１９が、受信したリードコマンドを、ユニット１１９の内部領域（例えばレジスタ）に登録する。コマンド外部処理ユニット１１９は、登録したリードコマンドの状態を、完了通知の受信待ちの状態とする。コマンド外部処理ユニット１１９は、コマンド分割ユニット１１３に、登録したリードコマンドを転送する。
【００８２】
コマンド外部処理ユニット１１９からリードコマンドを受信したコマンド分割ユニット１１３は、リードコマンドをサブリードコマンドに分割し、サブリードコマンドを内部領域（例えばユニット１１３のレジスタ）に登録する。ここで、リードコマンドから得られるサブリードコマンドの数は、リードデータ（リードコマンドに従い読み出されるデータ）のサイズを、内部管理単位（ページサイズ）で除算することにより得られる商（商が０の場合は１）でよい。例えば、リードコマンドに従うリードデータのサイズが１６ＫＢであり、内部管理単位（ページサイズ）が４ＫＢの場合、得られるサブリードコマンドの数は、１６／４＝４でよい。コマンド分割ユニット１１３は、リードコマンドとサブリードコマンドの対応関係を例えばユニット１１３の内部領域（例えばレジスタ）に登録する。コマンド分割ユニット１１３は、複数のサブリードコマンドの各々について、状態を、完了通知（応答）の受信待ちの状態とする。コマンド分割ユニット１１３は、分割した複数のサブリードコマンドをそれぞれキャッシュ登録ユニット１１２に転送する。１つのサブリードコマンドは、１つのサブリードデータの読み出しに対応し、例えば、１つのサブリードデータのリード元のＬＢＡを指定する。サブリードデータは、リードデータの一部分であり、例えば、内部管理単位（ページサイズ）と同じサイズである。１つのサブリードデータは、２以上のページに跨らず、１つのページから読み出される。
【００８３】
コマンド分割ユニット１１３にてリードコマンドをサブリードコマンドに分割する理由は、前述のライトコマンドのときと同様に管理単位毎に格納状態（キャッシュヒット／キャッシュミス）が異なっていることに加え、リードコマンドで指定されるＬＢＡ領域に対応付けられている複数のページ（複数のリード元ページ）が、異なるＦＭインターフェースに接続された異なるＦＭ１４０に離散している可能性にある。ＦＭコントローラ１１０は、内部管理単位毎に、ＬＢＡとＰＢＡの対応関係を管理しており、連続するＬＢＡ領域であっても、実際のデータは異なる複数のＦＭ１４０（及びデータキャッシュ１１４）に分散している可能性がある。このため、１つのリードコマンドを完了するためには、複数のＦＭインターフェース１２４（又はコピーＤＭＡユニット１２１）を並列に制御する必要があり得る。このため、内部管理単位に基づきリードコマンドがサブリードコマンドに分割される。
【００８４】
コマンド分割ユニット１１３から複数（又は１）からのサブリードコマンドを受信したキャッシュヒット判定ユニット１１１は、サブリードコマンド毎に、キャッシュヒット判定を行う。具体的には、キャッシュヒット判定ユニット１１１は、キャッシュヒット判定テーブルを参照し、サブリードコマンドが対象とするサブリードデータがキャッシュ１１４上にあるかどうか判定する。サブリードコマンドについて、キャッシュヒットとは、そのサブリードコマンドが対象とするＬＢＡ領域（論理領域）に対応付けられたデータが、ＦＭ１４０ではなくデータキャッシュ１１４に格納されている状態である。サブリードコマンドについて、キャッシュミスとは、そのサブリードコマンドが対象とするＬＢＡ領域（論理領域）に対応付けられたデータが、データキャッシュ１１４ではなくＦＭ１４０に格納されている状態である。キャッシュヒット判定ユニット１１１にて、キャッシュヒットと判定されたサブリードコマンドは、以降、サブリードヒットコマンドとして管理される。サブリードヒットコマンドには、キャッシュヒット判定ユニット１１１が、キャッシュヒットしたサブキャッシュ領域のアドレスを指定する。一方で、キャッシュヒット判定ユニット１１１にて、キャッシュミスと判定されたサブリードコマンドは、以降、サブリードミスコマンドとして管理される。
【００８５】
キャッシュヒット判定ユニット１１１は、サブリードコマンドがサブリードヒットコマンドであるかサブリードミスコマンドであるかに応じて、サブリードコマンドの転送先のＩ／Ｏコマンドを選択する。図４に示す例では、サブリードミスコマンドは、コマンド内部処理ユニット１２０に転送され、サブリードヒットコマンドは、プロセッサ１２３に転送される。
【００８６】
本実施形態において、サブリードミスコマンドとサブリードヒットコマンドの通知先Ｉ／Ｏハードウェアを分ける理由は、サブリードミスとサブリードヒットの発生頻度の差と、サブリードヒット処理の複雑さにある。
【００８７】
サブリードミスとサブリードヒットの発生頻度の差は、ＦＭ群（複数のＦＭ１４０の集合）の容量に対するデータキャッシュ１１４の容量の割合、及び、上位装置がＦＭモジュール１００に指定するＬＢＡの局所性に依存する。例えば、本実施形態では、データキャッシュ１１４の容量とＦＭ群の容量の差はきわめて大きい。より具体的には、例えば、データキャッシュ１１４の容量は数百ＭＢ（メガバイト）、ＦＭ群の容量は数ＴＢ（テラバイト）である。こうした構成において、ＬＢＡの局所性の低いリードリクエストが上位装置から受信された場合、リードコマンドから得られるサブリードコマンドの大半が、サブリードミスコマンドとなる。つまり、サブリードヒットコマンドはサブリードミスコマンドに比べてわずかしか生じないと予測される。このため、ＦＭモジュール１００のリード性能を高速化したいのであれば、サブリードミスコマンドを高速な専用ハードウェアにて処理する事が必要となる。言い換えれば、本実施形態では、キャッシュミスした方がリード性能の高速化が期待でき、この観点から、データキャッシュ１１４は、読み出されたデータが残らないバッファのような一時記憶領域であることが望ましい。
【００８８】
なお、サブリードミスコマンドのみならずサブリードヒットコマンドについてもＩ／Ｏハードウェアにて処理する事がＦＭモジュール１００の性能を向上させる観点からは望ましいとも考えられるが、サブリードヒットコマンドは、別処理と競合する可能性がある。例えば、サブリードヒットコマンドの対象領域であるサブキャッシュ領域は、ＦＭ１４０にデータを書き込む為に、データキャッシュ１１４からＦＭ１４０にデータを転送（以降この動作をデステージと記す）中の領域である可能性がある。そして、仮に、デステージ処理がサブリードヒットコマンドの処理との競合を考慮しない場合、ＦＭ１４０へのデータ転送が終了した時点で、サブキャッシュ領域が解放される。このため、サブリードコマンドについてキャッシュヒットと判定された後、競合を考慮せずに処理が続行されると、サブキャッシュ領域からデータが削除された後、リードされる可能性が生じる。言い換えれば、サブリードヒットコマンドに対応したサブキャッシュ領域からのデータの読み出しの時点では、そのサブリードヒットコマンドに対応したデータが、サブキャッシュ領域には存在しない可能性が生じる。
【００８９】
上記のような可能性を排除するため、本実施形態では、ＦＭコントローラ１１０が行う各種動作の複雑な競合管理をプロセッサ１２３にて行う。例えば、サブリードヒットコマンドの処理とデステージの処理の競合を回避する為に、プロセッサ１２３が、「サブリードヒットコマンドに対応したサブキャッシュ領域はデステージ処理の対象になっていることを検知する。」、又は、「サブリードヒットコマンドに対応したサブキャッシュ領域のロックを取得し、並列で実行されているデステージ処理においてそのサブキャッシュ領域が解放されること（そのサブキャッシュ領域からデータが削除されること）を不可とする」等の排他制御を行う。
【００９０】
上述の通り、競合の可能性があり複雑な排他制御が必要なサブリードヒットコマンドは、プロセッサ１２３に転送される。これにより、複雑な競合を管理するためのハードウェアを開発する必要が無く、バグの修正が困難なハードウェアの開発リスクを軽減し、開発期間を短縮する事が期待できる。
【００９１】
サブリードヒットコマンドの処理をプロセッサ１２３に担わせることで、プロセッサ１２３の処理性能がネックとなりＦＭモジュール１００のリード性能が低下する事が考えられるが、前述のとおり、上位装置がＬＢＡの局所性の少ないＩ／Ｏパターンを実行し得る環境において、サブリードヒットコマンドの発生頻度は、サブリードミスコマンドの発生頻度と比較して少ないので、ＦＭモジュールの性能低下を軽減できる。
【００９２】
コマンド内部処理ユニット１２０は、キャッシュヒット判定ユニット１１１からサブリードミスコマンドを受信する。コマンド内部処理ユニット１２０は、サブリードミスコマンド毎に、サブリードミスコマンドが指定するＬＢＡに対応したＰＢＡを論物変換テーブル６００から特定し、特定したＰＢＡが該当する物理領域に接続されたＦＭインターフェース１２４に対して、ＦＭ１４０からデータをリードするコマンドを生成し転送する。２以上のサブリードミスコマンドにそれぞれ対応した２以上のリード元物理領域（ページ）にそれぞれ接続された２以上のＦＭインターフェース１２４をそれぞれ並列に起動できる。
【００９３】
一方、プロセッサ１２３は、キャッシュヒット判定ユニット１１１からサブリードヒットコマンドを受信する。プロセッサ１２３は、サブリードヒットコマンドにて指定されるサブキャッシュ領域について排他制御を行った後、コピーＤＭＡユニット１２１に対してコマンドを発行する。そのサブキャッシュ領域内のデータをリードバッファ領域（上位装置にリードデータを転送する前に、一旦リードデータを格納する領域）にコピーするためである。なお、本実施形態では、サブキャッシュ領域とリードバッファ領域が別々の領域であるが、データキャッシュ１１４とリードバッファ領域が一体であってもよく、その場合、コピーＤＭＡユニット１２１は無くてもよい。
【００９４】
また、本実施形態では、リードコマンドにてＦＭ群から読み出されたデータがデータキャッシュ１１４に登録されないが、本発明はこの例に限定されるものではない。例えば、ＦＭ１４０から読み出されたサブリードデータがデータキャッシュ１１４に転送され、サブリードコマンドで指定されたＬＢＡがキャッシュヒット判定テーブルに登録されてもよい。これにより、頻繁にリード元となるＬＢＡ領域については、ＦＭ１４０からではなくサブキャッシュ領域からデータが読み出されてもよい。
【００９５】
図４に示した動作にて、サブリードコマンド（サブリードヒットコマンド及びサブリードミスコマンド）の処理の結果、データ転送用のコマンドが通知されたＦＭインターフェース１２４とコピーＤＭＡユニット１２１から完了通知が転送される。
【００９６】
具体的には、図５に示すように、ＦＭ１４０からデータを読み出すコマンドの処理が完了したＦＭインターフェース１２４は、サブリードミスコマンドにて指定されＦＭ１４０から読み出されたサブリードデータを含んだ完了通知を、コマンド分割ユニット１１３に通知する。
【００９７】
また、サブキャッシュ領域からリードバッファへのデータ転送が完了したコピーＤＭＡユニット１２１は、転送完了を、コピーＤＭＡユニット１２１にコマンドを発行したプロセッサ１２３に通知する。そして、コピーＤＭＡユニット１２１からの完了通知を受信したプロセッサ１２３は、サブリードヒットコマンドに対応したサブキャッシュ領域について排他制御を行った後、サブリードヒットコマンドの完了をコマンド分割ユニット１１３に通知する。なお、実施形態では、コピーＤＭＡユニット１２１が完了を一旦プロセッサ１２３に通知し、その通知を受けたプロセッサ１２３が、コマンド分割ユニット１１３に完了を通知するが、本発明はこの例に限定されるものではない。例えば、コピーＤＭＡユニット１２１がコマンド分割ユニット１１３とプロセッサ１２３にサブリードヒットコマンドを通知してもよい。
【００９８】
コマンド分割ユニット１１３は、単一のリードコマンドより作成した複数のサブリードコマンドの全てについて完了通知を待っている。コマンド分割ユニット１１３は、タイムアウトの閾値を超過しても完了通知がない場合には（サブリードコマンドを発行してから一定時間以内に完了通知を受信しない場合には）、エラー情報をコマンド処理ログ１３２に書き込み、プロセッサ１２３に割り込みを行ってよい。
【００９９】
ＦＭインターフェース１２４及びプロセッサ１２３からの完了通知を受信したコマンド分割ユニット１１３は、リードコマンドを構成する全てのサブリードコマンドについて完了通知を受信した後、コマンド外部処理ユニット１１９に、リードコマンドの完了通知を転送する。
【０１００】
コマンド分割ユニット１１３からリードコマンドの完了通知を受信したコマンド外部処理ユニット１１９は、上位装置に対してリードコマンド処理が完了したことを通知する完了通知を転送する。上位装置に転送される完了通知（リードコマンドの応答）は、コマンド分割ユニット１１３からの通知でもよいし、コマンド外部処理ユニット１１９により生成された通知でもよい。また、上位装置に転送される完了通知は、リードコマンドを構成する全てのサブリードコマンドにそれぞれ対応したサブリードデータにより構成されたリードデータを含んでもよい。
【０１０１】
（１−５）プロセッサ１２３の処理
【０１０２】
続いて、プロセッサ１２３の処理を説明する。本実施形態のプロセッサ１２３の主な処理としては、サブライトヒットコマンド処理及びサブリードヒットコマンド処理のように上位装置からのＩ／Ｏコマンドが基で実行される処理と、デステージ処理及びリクラメーション処理のように上位装置からのコマンドとは非同期に（独立して）実行される処理とがある。このうち、デステージ処理及びリクラメーション処理のように上位装置からのコマンドと非同期に実行される処理（内部処理）については、上位装置に完了が通知されず、故に、内部処理は、上位装置からは把握できない処理である。
【０１０３】
（１−５−１）プロセッサ１２３の処理：サブライトヒットコマンド処理
【０１０４】
プロセッサ１２３の処理として、まず、サブライトヒットコマンド処理について図８を用いて説明する。
【０１０５】
図８は、サブライトヒットコマンド処理のフロー図である。
【０１０６】
Ｓ８０１では、プロセッサ１２３が、キャッシュヒット判定ユニット１１１からサブライトヒットコマンドを受信する。ここで、プロセッサ１２３は、受信したサブライトヒットコマンドから旧サブキャッシュ領域及び新サブキャッシュ領域を特定する。
【０１０７】
Ｓ８０２では、プロセッサ１２３は、Ｓ８０１にて特定したサブキャッシュ領域のロック取得を試みる。このステップで、プロセッサ１２３は、ＦＭコントローラ１１０が保持する管理テーブルを基に、ロック取得を試みる。
【０１０８】
Ｓ８０３では、プロセッサ１２３は、ロックが取得できたかを判定する。このステップにてロックが取得できない場合、プロセッサ１２３は、Ｓ８０１で特定されたサブキャッシュ領域が別処理にて利用中であると判断でき、Ｓ８０２に遷移することで、別処理の利用が終了するまで、ロック取得を試みる。一方で、ロックが取得できた場合、Ｓ８０４に遷移する。
【０１０９】
Ｓ８０４では、プロセッサ１２３が、ヒットサブ領域（キャッシュヒットしたサブキャッシュ領域）の管理データを取得する。
【０１１０】
Ｓ８０５では、プロセッサ１２３が、Ｓ８０４で取得した管理データ（ヒットサブ領域に格納されているデータに対応したＬＢＡを含む）を参照し、ヒットサブ領域が旧サブキャッシュ領域か否かを判定する。ＦＭモジュール１００では、ヒットサブ領域内のデータが別処理にて変化する可能性があり、Ｓ８０５では、プロセッサ１２３は、この領域が旧サブキャッシュ領域であるか否かを判定する。
【０１１１】
Ｓ８０５の判定結果が肯定の場合（具体的には、ロックが取得されたヒットサブ領域に対応しているＬＢＡが、サブライトヒットコマンドで指定されているＬＢＡと同一の場合）、Ｓ８０６に遷移する。一方、Ｓ８０５の判定結果が否定の場合（具体的には、ロックが取得されたヒットサブ領域に対応しているＬＢＡが、サブライトヒットコマンドで指定されているＬＢＡと異なっている場合）、ヒットサブ領域が別処理によって旧サブキャッシュ領域ではなくなった場合であり、Ｓ８０７に遷移する。
【０１１２】
Ｓ８０６では、プロセッサ１２３が、旧サブキャッシュ領域を解放する。これにより、旧サブキャッシュ領域を、別処理においてサブキャッシュ領域として扱う事ができる。
【０１１３】
Ｓ８０７では、プロセッサ１２３が、新サブキャッシュ領域のアドレスを、キャッシュ管理テーブルに登録する。
【０１１４】
Ｓ８０８では、プロセッサ１２３が、ヒットサブ領域のロックを解放する。この解放処理により、解放された領域を、別処理（例えばデステージ処理又はサブリードヒットコマンド処理）においてサブキャッシュ領域として扱う事ができる。
【０１１５】
Ｓ８０９では、プロセッサ１２３が、Ｓ８０１にて受信したサブライトヒットコマンドが完了したことをコマンド分割ユニット１１３に通知する。
【０１１６】
以上が、サブライトヒットコマンド処理である。
【０１１７】
（１−５−２）プロセッサの処理：サブリードヒットコマンド処理
【０１１８】
続いて、サブリードヒットコマンド処理について図９を用いて説明する。
【０１１９】
図９は、サブリードヒットコマンド処理のフロー図である。
【０１２０】
Ｓ９０１では、プロセッサ１２３が、キャッシュヒット判定ユニット１１１からサブリードヒットコマンドを受信する。ここで、プロセッサ１２３は、受信したサブリードヒットコマンドからサブキャッシュ領域を特定する。Ｓ９０２では、プロセッサ１２３は、Ｓ９０１にて特定したサブキャッシュ領域のロック取得を試みる。Ｓ９０３では、プロセッサ１２３は、ロックが取得できたかを判定する。Ｓ９０４では、プロセッサ１２３が、ヒットサブ領域（キャッシュヒットしたサブキャッシュ領域）の管理データを取得する。Ｓ９０５では、プロセッサ１２３が、Ｓ９０４で取得した管理データ（ヒットサブ領域に格納されているデータに対応したＬＢＡを含む）を参照し、ヒットサブ領域が、サブリードヒットコマンドに対応したサブリードデータを記憶しているサブキャッシュ領域か否かを判定する。Ｓ９０５の判定結果が肯定の場合、Ｓ９０６に遷移し、Ｓ９０５の判定結果が否定の場合、Ｓ９１０に遷移する。
【０１２１】
Ｓ９０６では、プロセッサ１２３が、Ｓ９０５にてヒットサブ領域にサブリードヒットコマンドに対応したサブリードデータが格納されていると判断された為、ヒットサブ領域内のデータをリードバッファ領域にコピーするコピーＤＭＡユニット１２１用にコマンドを生成し、そのコマンドをコピーＤＭＡユニット１２１に送信することでコピーＤＭＡユニット１２１を起動する。
【０１２２】
Ｓ９０７では、プロセッサ１２３が、Ｓ９０６にて起動したコピーＤＭＡユニット１２１から完了通知を受信する。この完了通知の受信により、サブリードヒットコマンドに対応したサブリードデータがリードバッファ領域に格納されたことが確定する。本実施形態のＦＭモジュール１００では、リードコマンドから分割された複数のサブリードコマンドにそれぞれ対応した複数のサブリードデータがリードバッファ領域に格納され、全てのサブリードコマンドの完了を確認したコマンド分割ユニット１１３が、上位装置に対して、データ転送を起動する。このため、サブリードデータがリードバッファ領域に格納されたことをもって、サブリードヒットコマンドとしてのデータ転送処理は完了となる。
【０１２３】
Ｓ９０８では、プロセッサ１２３が、ヒットサブ領域のロックを解放する。Ｓ９０９では、プロセッサ１２３が、Ｓ９０１にて受信したサブリードヒットコマンドが完了したことをコマンド分割ユニット１１３に通知する。
【０１２４】
Ｓ９１０では、プロセッサ１２３が、ヒットサブ領域にサブリードヒットコマンドに対応したサブリードデータが格納されていないと判定されるため、ヒットサブ領域のロックを解放する。
【０１２５】
Ｓ９１１では、プロセッサ１２３が、サブリードヒットコマンドを、コマンド内部処理ユニット１２０にサブリードミスコマンドとして登録する。Ｓ９０１にて受信したサブリードヒットコマンドについて既にキャッシュミスが発生しており、ヒットサブ領域にサブリードデータが無くそのサブリードデータがＦＭ１４０に格納されていると判定されたためである。この場合、コマンド内部処理ユニット１２０が、ＦＭインターフェース１２４にコマンドを発行する。そして、ＦＭインターフェース１２４によりＦＭ１４０からリードバッファ領域へデータが転送されたことが完了した事をもって、ＦＭインターフェース１２４がコマンド分割ユニット１１３に完了を通知する。このため、プロセッサ１２３からコマンド分割ユニット１１３への完了通知は不要となる。
【０１２６】
以上が、サブリードヒットコマンド処理である。
【０１２７】
（１−５−３）プロセッサ１２３の処理：デステージ処理
【０１２８】
続いて、デステージ処理について図１０を用いて説明する。
【０１２９】
図１０は、デステージ処理のフロー図である。
【０１３０】
デステージ処理は、定期的に起動される。なお、デステージ契機は定期的に限定されない。例えば、プロセッサ１２３が、データキャッシュ１１４の使用状況を監視し、データキャッシュ１１４の使用可能領域の量が閾値以下となった場合に、サブキャッシュ領域を解放するためにデステージ処理を起動してもよい。
【０１３１】
Ｓ１００１では、プロセッサ１２３が、デステージ対象とするサブキャッシュ領域を選択する。プロセッサ１２３は、キャッシュ管理テーブルを参照し、複数（又は１）のサブキャッシュ領域をデステージ対象として選択する。ここでは、キャッシュ管理テーブルより、デステージ対象データに対応したＬＢＡ（論理空間に属するＬＢＡ）が取得される。
【０１３２】
Ｓ１００２では、プロセッサ１２３は、Ｓ１００１にてデステージ対象として選択した複数のサブキャッシュ領域の各々のロック取得を試みる。
【０１３３】
Ｓ１００３では、プロセッサ１２３は、ロックの取得が可能かを判定する。プロセッサ１２３は、サブキャッシュ領域とロックの有無との関係を示すロック管理テーブル（図示せず）を参照し、Ｓ１００１にて選択したデステージ対象領域が占有可能となった（ロックが取れた）かを判定する。ロックが取れたサブキャッシュ領域の量が一定量未満の場合、他のサブキャッシュ領域をデステージ対象領域とするため、Ｓ１００１に遷移する。一方、ロックが取れたサブキャッシュ領域の量が一定量以上の場合、Ｓ１００４に遷移する。
【０１３４】
Ｓ１００４は、プロセッサ１２３が、Ｓ１００１にて選択した複数のデステージ対象領域の管理データを取得する。
【０１３５】
Ｓ１００５では、プロセッサ１２３が、Ｓ１００１にて選択した複数のデステージ対象領域が有効であることを確認する。本実施形態では、Ｓ１００１にてデステージ対象とした領域についてＳ１００３にてロックを取得するまでの間に、別処理（例えばプロセッサ１２３がマルチコアの場合、他のコアが実施しているデステージ処理）によって解放されている可能性がある。プロセッサ１２３が、ロックを取得したサブキャッシュ領域の管理データを参照することで、デステージ対象領域が有効であることを判断する。有効となった場合、Ｓ１００６に遷移する。一方、有効でなかった場合、デステージ対象の領域を確保する為に、Ｓ１００１に遷移する。
【０１３６】
Ｓ１００６では、プロセッサ１２３が、デステージ先ＦＭ領域（ＦＭ内の物理領域）の選択を行う。プロセッサ１２３が、内部の管理テーブル（例えば図７に示したブロック管理テーブル７００）を参照し、サブキャッシュ領域のデータのデステージ先（転送先）となる複数のＦＭ領域を決定する。
【０１３７】
Ｓ１００７では、プロセッサ１２３が、Ｓ１００６にて選択したＦＭ領域に接続したＦＭインターフェース１２４に対してライト用のコマンドを生成し起動する。
【０１３８】
Ｓ１００８では、プロセッサ１２３が、Ｓ１００６にて起動した複数のＦＭインターフェース１２４の各々から完了の通知を受ける。
【０１３９】
Ｓ１００９では、プロセッサ１２３が、論物変換テーブル６００を更新する。プロセッサ１２３が、デステージ先のＰＢＡ領域（ＦＭ領域）に対して、Ｓ１００１にて取得したＬＢＡを対応付ける。
【０１４０】
Ｓ１０１０では、プロセッサ１２３が、Ｓ１００１にて選択したサブキャッシュ領域のロックを解放する。このロック解放後、サブライトヒットコマンド処理及びリードヒットコマンド処理のような別処理において、その解放されたサブキャッシュ領域を利用可能である。
【０１４１】
以上が、デステージ処理である。
【０１４２】
（１−５−４）プロセッサの処理：リクラメーション処理
【０１４３】
続いて、図１１を用いリクラメーション処理について説明する。
【０１４４】
図１１は、リクラメーション処理のフロー図である。
【０１４５】
Ｓ１１０１では、プロセッサ１２３が、リクラメーション対象のＰＢＡ領域（移動元ブロック）を選択する。プロセッサ１２３は、ブロック管理テーブル７００を参照し、相対的に無効ＰＢＡ量の多いブロックを移動元ブロックとして選択する。リクラメーション処理において移動されるデータの量が少なくて済むようにするためである。
【０１４６】
Ｓ１１０２では、プロセッサ１２３が、Ｓ１１０１にて選択したＰＢＡ領域（ブロック）に対応付けられているＬＢＡを、論物変換テーブル６００から特定する。なお、論物変換テーブル６００以外の管理テーブルにおいてＬＢＡとＰＢＡの対応関係が登録されていてそのテーブルからＬＢＡが特定されてもよい。
【０１４７】
Ｓ１１０３では、プロセッサ１２３が、キャッシュ登録ユニット１１２に対し、Ｓ１１０２にて特定したＬＢＡをキャッシュ登録テーブルに登録することとそのＬＢＡに対応付けられたデータを格納するためのサブキャッシュ領域を確保することとを依頼する。
【０１４８】
Ｓ１１０４では、プロセッサ１２３が、Ｓ１１０３にてキャッシュ登録ユニット１１２に依頼したことが実行されたかを判定する。Ｓ１１０４の判定結果が肯定の場合、Ｓ１１０５に遷移し、Ｓ１１０４の判定結果が否定の場合（例えば、空きサブキャッシュ領域の枯渇のため確保が実施されなかった場合）、Ｓ１１０３に遷移する。
【０１４９】
Ｓ１１０５では、プロセッサ１２３が、Ｓ１１０３にて確保されたサブキャッシュ領域のロックを取得する。
【０１５０】
Ｓ１１０６では、プロセッサ１２３が、移動元ブロック内の有効データをＳ１１０３にて確保したサブキャッシュ領域に転送するために、該当するＦＭインターフェース１２４用のコマンドを生成し、起動する。これにより、移動元ブロックから有効データがサブキャッシュ領域に転送される。
【０１５１】
Ｓ１１０７では、プロセッサ１２３が、Ｓ１１０６にて起動したデータ転送の完了を特定する。この完了をもって、移動元ブロック内の有効データはサブキャッシュ領域に格納されたこととなる。このため、移動元ブロックに対応付けられたＬＢＡを指定したＩ／Ｏコマンドの処理は、サブキャッシュ領域に格納されたデータにて対応可能となる。
【０１５２】
Ｓ１１０８では、プロセッサ１２３が、移動元ブロックのＰＢＡとそれに対応付けられたＬＢＡとの組を削除する。Ｓ１１０７にて移動元ブロック内の有効データがサブキャッシュ領域に格納されたためである。
【０１５３】
Ｓ１１０９では、プロセッサ１２３が、ブロック管理テーブル７００を更新する。プロセッサ１２３が、Ｓ１１０８にてＬＢＡ／ＰＢＡの組（対応付け）を削除したことで、移動元ブロックの全ＰＢＡが無効ＰＢＡである。このため、プロセッサ１２３が、ブロック管理テーブル７００を更新し、移動元ブロックが消去可能であることを別処理に通知する。詳細な説明は省略するが、本実施形態では、リクラメーション処理とは別に消去用のジョブも並行して動作しており、そのジョブが、ブロック管理テーブル７００を参照し、全ＰＢＡが無効ＰＢＡとなっているブロックを選択しその選択したブロックについて消去処理を実行する。
【０１５４】
Ｓ１１１０では、プロセッサ１２３が、サブキャッシュ領域のロックを解放する。
【０１５５】
以上が、リクラメーション処理である。ＦＭコントローラ１１０は、リクラメーション用のデータと上位装置からのライトデータを、ともにデステージ処理によりＦＭ１４０に格納する。このため、移動元ブロック内の有効データがサブキャッシュ領域に格納された段階でリクラメーション処理の終了となる。
【０１５６】
以上が、ＦＭモジュール１００が実行する処理である。以上のとおり、デステージ処理、リクラメーション処理、サブライトヒットコマンド処理及びサブリードヒットコマンド処理の各処理にて処理領域の競合が想定される場合、その調停処理を組み込みプロセッサ１２３にて処理することで、複雑な処理をソフトウェア（コンピュータプログラム）にて記述可能となる。また、サブリードヒットコマンド処理及びサブライトヒットコマンド処理に比べて発生頻度の高いサブリードミスコマンド処理及びサブライトミスコマンド処理については、ハードウェアのみで処理することで高性能化が可能となる。結果、競合処理を行う複雑なハードウェアが無くとも、サブリードミスコマンド処理を高速に処理可能となり、ＦＭモジュール１００のリードコマンド処理性能が向上する。同様に、競合処理を行う複雑なハードウェアが無くともサブライトミスコマンドを高速に処理可能となり、上位装置へのライト応答時間（ライトコマンド処理の応答時間）を短縮できる。また、サブＩ／Ｏコマンド（サブライトコマンド／サブリードコマンド）をハードウェアにて処理する場合であっても、そのハードウェアによる処理において障害が発生した場合にはそのハードウェアによりログ（例えば障害情報）がコマンド処理ログ１３２に記録されるので、障害発生時に組み込みプロセッサ１２３から障害部位（例えば、障害が発生したハードウェア）及び障害内容の少なくとも一方の取得が可能となる。
【０１５７】
以上、一実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実行することが可能である。例えば、実施形態では、キャッシュヒット／ミスに応じてプロセッサがコマンド（サブコマンド）を処理するか否かが決まるが、プロセッサがコマンド（サブコマンド）を処理するか否かの基準は、それに限らないでよい。例えば、ＦＭ群が、複数の高速物理領域（例えばＳＬＣ（Single  Level  Cell）のページ）と、複数の低速物理領域（例えばＭＬＣ（Multi  Level  Cell）のページ）とを含む。論理空間（ＬＢＡ範囲）が、高速物理領域が割り当てられる論理領域である高速論理領域と、低速物理領域が割り当てられる論理領域である低速論理領域とに区分されている。この場合、高速論理領域に属するＬＢＡが指定されたＩ／Ｏコマンドの処理は、Ｉ／Ｏハードウェアが担当しプロセッサ１２３は担当せず、低速論理領域に属するＬＢＡが指定されたＩ／Ｏコマンドの処理は、Ｉ／Ｏハードウェアに加えてプロセッサ１２３も担当してもよい。
【符号の説明】
【０１５８】
１００：ＦＭモジュール  １１０：ＦＭコントローラ  １４０：ＦＭ
【国際調査報告】
2016071954.tif 000016
2016071954.tif 000017
2016071954.tif 000018
2016071954.tif 000019
2016071954.tif 000020
2016071954.tif 000021