(57)【要約】【課題】  ホストメモリバッファ（ＨＭＢ）が用いられる際のセキュリティを強化できるメモリシステムを実現する。【解決手段】  実施形態によれば、メモリシステムは、第１揮発性メモリを備えるホストと接続可能であって、不揮発性メモリと、コントローラとを具備する。前記コントローラは、前記第１揮発性メモリの第１領域を前記不揮発性メモリに格納されるデータの一時記憶用メモリとして使用でき、前記不揮発性メモリを制御する。前記コントローラは、前記不揮発性メモリに格納された第１データとキー値とを使用して第１パリティを生成し、前記第１データと前記生成された第１パリティとを前記第１領域へ格納する。前記コントローラは、前記第１領域に格納された前記第１データを読み出す場合に、前記第１データと前記第１パリティとを読み出して、前記読み出された第１パリティと前記キー値とを使用して前記読み出した第１データを検証する。【選択図】  図１
2020149222.tif 000002
【特許請求の範囲】
【請求項１】
第１揮発性メモリを備えるホストと接続可能であって、
不揮発性メモリと、
前記第１揮発性メモリの第１領域を前記不揮発性メモリに格納されるデータの一時記憶用メモリとして使用でき、前記不揮発性メモリを制御するコントローラと、
を具備し、
前記コントローラは、
前記不揮発性メモリに格納された第１データとキー値とを使用して第１パリティを生成し、前記第１データと前記生成された第１パリティとを前記第１領域へ格納し、
前記第１領域に格納された前記第１データを読み出す場合に、前記第１データと前記第１パリティとを読み出して、前記読み出された第１パリティと前記キー値とを使用して前記読み出した第１データを検証するように構成されるメモリシステム。
【請求項２】
前記コントローラは、前記ホストから受信した前記第１領域を前記コントローラが使用することを有効化する指令に対して前記キー値として第１キー値を生成するように構成される請求項１に記載のメモリシステム。
【請求項３】
前記コントローラは、前記第１領域を前記コントローラが使用することを無効化した後に、前記ホストから受信した前記第１揮発性メモリに含まれる第２領域を前記コントローラが使用することを有効化する指令に対して前記キー値として前記第１キー値と異なる第２キー値を生成する請求項２に記載のメモリシステム。
【請求項４】
前記コントローラは、第２データと前記第２キー値を使用して第２パリティを生成し、前記第２データと前記生成された第２パリティとを前記第２領域へ格納し、前記第２領域に格納された前記第２データを読み出す場合に、前記第２データと前記第２パリティとを読み出して、前記読み出された第２パリティと前記第２キー値とを使用して前記読み出した第２データを検証する請求項３に記載のメモリシステム。
【請求項５】
前記コントローラは、前記第１領域を前記コントローラが使用することを無効化した後に、前記ホストから受信した前記第１領域と前記第１領域に格納されているデータとを継続して使用することとを指定して前記第１領域を前記コントローラが使用することを有効化する指令に対して前記キー値として前記第１キー値を使用する請求項２に記載のメモリシステム。
【請求項６】
前記コントローラは、第３データと前記第１キー値を使用して第３パリティを生成し、前記第３データと前記生成された第３パリティとを前記第１領域へ格納し、前記第１領域に格納された前記第３データを読み出す場合に、前記第３データと前記第３パリティとを読み出して、前記読み出された第３パリティと前記第１キー値とを使用して前記読み出した第３データを検証する請求項５に記載のメモリシステム。
【請求項７】
前記コントローラは、前記読み出された第１データにエラーが発生している場合、前記第１データを破棄するように構成される請求項２に記載のメモリシステム。
【請求項８】
前記第１キー値と前記第２キー値の各々は乱数を含む請求項３または請求項４に記載のメモリシステム。
【請求項９】
前記第１キー値は乱数を含む請求項２、請求項５、および請求項６のいずれか１つに記載のメモリシステム。
【請求項１０】
第２揮発性メモリをさらに備え、
前記コントローラは、
前記不揮発性メモリから読み出した第４データを前記第１揮発性メモリに格納可能でないと判定する場合、前記第４データを前記第２揮発性メモリに格納する請求項１に記載のメモリシステム。
【請求項１１】
前記第４データは、暗号化されていないユーザデータ、前記メモリシステムで用いられるセキュリティキーのデータ、または前記メモリシステムで用いられるファームウェアのデータの少なくとも１つを含む請求項１０に記載のメモリシステム。
【請求項１２】
前記第１領域を前記コントローラが使用することを有効化する指令は、ＮＶＭ  Ｅｘｐｒｅｓｓ規格に準拠する指令である請求項２乃至請求項８のいずれか１つに記載のメモリシステム。
【請求項１３】
前記第１領域を前記コントローラが使用することを有効化する指令は、ＵＦＳ規格に準拠する指令である請求項２乃至請求項８のいずれか１つに記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを備えるメモリシステムに関する。
【背景技術】
【０００２】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。  
このようなメモリシステムの１つとして、ＮＡＮＤ型フラッシュメモリを備えるソリッドステートドライブ（ＳＳＤ）が知られている。ＳＳＤは、様々なコンピューティングデバイスのメインストレージとして使用されている。
【０００３】
ＳＳＤは、ホストに設けられたランダムアクセスメモリ（ＲＡＭ）の一部を一時記憶領域として用いるためのホストメモリバッファ（ＨＭＢ）機能をサポートしていることがある。一時記憶領域として用いられる、ホスト内のＲＡＭの領域は、ＨＭＢとも称される。ＳＳＤの内部に設けられるＲＡＭだけでなくＨＭＢも一時記憶領域として用いられることにより、ＳＳＤの処理を高速化できる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許出願公開第２０１６／０２３１８０３号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明が解決しようとする課題は、ＨＭＢが用いられる際のセキュリティを強化できるメモリシステムを提供することである。
【課題を解決するための手段】
【０００６】
実施形態によれば、メモリシステムは、第１揮発性メモリを備えるホストと接続可能であって、不揮発性メモリと、コントローラとを具備する。前記コントローラは、前記第１揮発性メモリの第１領域を前記不揮発性メモリに格納されるデータの一時記憶用メモリとして使用でき、前記不揮発性メモリを制御する。前記コントローラは、前記不揮発性メモリに格納された第１データとキー値とを使用して第１パリティを生成し、前記第１データと前記生成された第１パリティとを前記第１領域へ格納する。前記コントローラは、前記第１領域に格納された前記第１データを読み出す場合に、前記第１データと前記第１パリティとを読み出して、前記読み出された第１パリティと前記キー値とを使用して前記読み出した第１データを検証する。
【図面の簡単な説明】
【０００７】
【図１】実施形態に係るメモリシステムを含む情報処理システムの構成例を示すブロック図。
【図２】同実施形態のメモリシステムによって、メモリシステム内のＲＡＭ（内部ＲＡＭ）と、ホスト内のＲＡＭ（ホストＲＡＭ）に設けられるホストメモリバッファ（ＨＭＢ）とが、キャッシュ領域として用いられる例を示す図。
【図３】同実施形態のメモリシステムによって内部ＲＡＭだけがキャッシュ領域として用いられる例を示す図。
【図４】同実施形態のメモリシステムによって用いられるＨＭＢが不正にアクセスされる例を示す図。
【図５】同実施形態のメモリシステムによって、内部ＲＡＭにキャッシュされるデータとＨＭＢにキャッシュされるデータとが判別される例を示す図。
【図６】図５の判別に用いられる条件の一例を示す図。
【図７】同実施形態のメモリシステムによって用いられるＨＭＢと、別のメモリシステムによって用いられるＨＭＢとが、ホストＲＡＭ内の重複した領域に設けられる例を示す図。
【図８】同実施形態のメモリシステムによって、ＨＭＢにキャッシュされるデータにキー値を用いてパリティが付加される例を示す図。
【図９】同実施形態のメモリシステムによって生成されるパリティの例を示す図。
【図１０】同実施形態のメモリシステムによってＨＭＢにキャッシュされるデータの例を示す図。
【図１１】同実施形態のメモリシステムによって、ＨＭＢから読み出されたデータがパリティとキー値とを用いて検証される例を示す図。
【図１２】同実施形態のメモリシステムによって実行される、メモリリターン（ＭＲ）機能の無効が指定される場合のＨＭＢ有効化処理のシーケンスを示す図。
【図１３】同実施形態のメモリシステムによって実行される、ＭＲ機能の有効が指定される場合のＨＭＢ有効化処理のシーケンスを示す図。
【図１４】同実施形態のメモリシステムによって実行されるＨＭＢ有効化処理の手順の例を示すフローチャート。
【図１５】同実施形態のメモリシステムによって実行されるキャッシュ制御処理の手順の例を示すフローチャート。
【図１６】同実施形態のメモリシステムによって実行されるキャッシュ制御処理の手順の別の例を示すフローチャート。
【図１７】同実施形態のメモリシステムによって実行されるＨＭＢキャッシュ可否判定処理の手順の例を示すフローチャート。
【図１８】同実施形態のメモリシステムによって実行されるパリティ検証処理の手順の例を示すフローチャート。
【発明を実施するための形態】
【０００８】
以下、実施の形態について図面を参照して説明する。
【０００９】
まず、図１を参照して、一実施形態に係るメモリシステムを含む情報処理システム１の構成を説明する。
【００１０】
このメモリシステムは、ＮＡＮＤ型フラッシュメモリ５のような不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスであり、単にストレージデバイスとも称される。このメモリシステムは、例えば、ＮＡＮＤ型フラッシュメモリ５を備えるソリッドステートドライブ（ＳＳＤ）３として実現されている。以下では、メモリシステム（すなわちストレージデバイス）がＳＳＤ３として実現される場合について例示するが、ハードディスクドライブ（ＨＤＤ）として実現されてもよい。あるいはメモリシステムは、コントローラとＮＡＮＤ型フラッシュメモリ５とが１つのパッケージとして構成されるストレージデバイスであってもよい。
【００１１】
情報処理システム１は、ホストデバイス２（以下、ホストとも称する）とＳＳＤ３とを含む。ホスト２は、大量且つ多様なデータをＳＳＤ３に保存するストレージサーバであってもよいし、パーソナルコンピュータであってもよい。
【００１２】
ＳＳＤ３は、ホスト２として機能する情報処理装置のストレージとして使用され得る。ＳＳＤ３は、この情報処理装置に内蔵されてもよいし、この情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
【００１３】
ホスト２とＳＳＤ３とを相互接続するためのインタフェースとしては、ＮＶＭ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）（登録商標）、Ｕｎｉｖｅｒｓａｌ  Ｆｌａｓｈ  Ｓｔｏｒａｇｅ（ＵＦＳ）等が使用され得る。
【００１４】
ホスト２は、ＣＰＵ２１、ランダムアクセスメモリ（ＲＡＭ）２２、ストレージインタフェース２３等を備える。これらＣＰＵ２１、ＲＡＭ２２、およびストレージインタフェース２３は、バス２０を介して相互接続されていてもよい。ホスト２は、上述したホスト２とＳＳＤ３とを相互接続するためのインタフェース規格に対応するストレージインタフェース２３を介して、ＳＳＤ３に接続されている。
【００１５】
ＣＰＵ２１は、ホスト２内の各部を制御するように構成されたプロセッサである。ＣＰＵ１２は、図示しないＲＯＭ等に格納されている基本入出力システム（ＢＩＯＳ）、オペレーティングシステム（ＯＳ）等を実行することによって様々な処理を行う。
【００１６】
ＲＡＭ２２は、ＣＰＵ１２によって用いられる各種のデータを一時的に記憶するための一時記憶領域（作業用領域とも称する）である。ＲＡＭ２２は、ダイナミックＲＡＭ（ＤＲＡＭ）であってもよいし、スタティックＲＡＭ（ＳＲＡＭ）であってもよい。以下では、このホスト２内のＲＡＭ２２をホストＲＡＭ２２とも称する。
【００１７】
ＳＳＤ３は、コントローラ４およびＮＡＮＤ型フラッシュメモリ５を備える。コントローラ４は、Ｓｙｓｔｅｍ−ｏｎ−ａ−ｃｈｉｐ（ＳｏＣ）のような回路によって実現され得る。
【００１８】
コントローラ４はＲＡＭ１４を備える。ＲＡＭ１４は、コントローラ４によって用いられるデータを一時的に記憶するための一時記憶領域である。ＲＡＭ１４は、ＤＲＡＭであってもよいし、ＳＲＡＭであってもよい。なお、ＲＡＭ１４はコントローラ４の外部に設けられてもよい。その場合、コントローラ４は、コントローラ４内に設けられるインタフェースを介してＲＡＭ１４にアクセスする。
【００１９】
ＲＡＭ１４は、ＮＡＮＤ型フラッシュメモリ５に書き込まれるデータや、ＮＡＮＤ型フラッシュメモリ５から読み出されたデータを一時的に格納するためのバッファ領域や、論理物理アドレス変換テーブルとして機能するルックアップテーブル（ＬＵＴ）のキャッシュ領域を備え得る。ＬＵＴは、論理アドレス（例えば論理ブロックアドレス（ＬＢＡ））それぞれとＮＡＮＤ型フラッシュメモリ５の物理アドレスそれぞれとの間のマッピングを管理する。さらに、ＲＡＭ１４は、セキュリティキー（例えばユーザデータを暗号化および復号するための暗号化／復号キー）、ＣＰＵ１２によって実行される制御プログラムであるファームウェア（ＦＷ）、ＳＳＤ３の動作ログ等の、ＳＳＤ３による処理に用いられる各種のデータの格納領域を備えていてもよい。以下では、このＳＳＤ３内のＲＡＭ１４を内部ＲＡＭ１４とも称する。なお、ユーザデータは、ホスト２からＳＳＤ３へ書き込みが指示されたデータであり、ホスト２からの書き込み要求（例えばライトコマンド）で指定されたデータである。ＳＳＤ３は、ホスト２からの書き込み要求を受け付けたことに伴って、当該ホスト２から、その書き込み要求に関連付けられたユーザデータを受信する。
【００２０】
コントローラ４はさらに、ホストメモリバッファ（ＨＭＢ）機能をサポートしていることがある。例えば、ＮＶＭｅ規格に準拠したＳＳＤ３はＨＭＢ機能をサポートし得る。ＨＭＢ機能は、コントローラ４が、ホストＲＡＭ２２内の割り当てられた少なくとも一部の領域を、一時記憶領域として排他的に使用するための機能である。コントローラ４は、ＨＭＢ機能により、ホストＲＡＭ２２内の一部の領域を排他的に使用することができる。
【００２１】
なお、ＨＭＢ機能として、メモリアーキテクチャであるＵｎｉｆｉｅｄ  Ｍｅｍｏｒｙ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＵＭＡ）が適用されてもよい。この場合、ＳＳＤ３は、ホスト２とＵＦＳ規格に準拠して通信し、ＵＦＳ規格の周辺規格であるＵｎｉｆｉｅｄ  Ｍｅｍｏｒｙ  Ｅｘｔｅｎｓｉｏｎ（ＵＭＥ）に基づいてホストＲＡＭ２２内の一部領域に対してＨＭＢ機能を実行することができる。
【００２２】
このように、コントローラ４がＨＭＢ機能をサポートする場合、ホスト２とＳＳＤ３とを相互接続するためのインタフェースとして、ＨＭＢ機能を備えるＮＶＭｅ、またはＵＭＥによりＨＭＢ機能を備えるＵＦＳが使用され得る。しかしながら、ＨＭＢ機能を備えるように規格化されたならば、ホスト２とＳＳＤ３とを相互接続するためのインタフェースとして、ＳＣＳＩ、Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ（ＳＡＳ）、ＡＴＡ、Ｓｅｒｉａｌ  ＡＴＡ（ＳＡＴＡ）、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）（登録商標）、Ｅｔｈｅｒｎｅｔ（登録商標）、Ｆｉｂｒｅ  ｃｈａｎｎｅｌ等が用いられてもよい。
【００２３】
ホストＲＡＭ２２内の、コントローラ４に対して割り当てられた領域は、ホストメモリバッファ（ＨＭＢ）２２１とも称される。コントローラ４は、ＨＭＢ機能が有効化（イネーブル）されてから無効化（ディセーブル）されるまでの間、ホストＲＡＭ２２内のＨＭＢ２２１を、上述した内部ＲＡＭ１４と同様に、バッファ領域、キャッシュ領域、各種のデータの格納領域等が設けられた一時記憶領域として利用できる。なお、例えば、ＳＳＤ３が起動された時点では、ＨＭＢ機能は無効化されており、ホスト２からの要求に応じて有効化される。
【００２４】
コントローラ４は、ホスト２から、ＨＭＢ機能の有効化を要求するコマンドと共に、ホストＲＡＭ２２内の１つ以上のアドレス範囲を示すリストのアドレス情報を受信し得る。コントローラ４は、コマンドに応じてＨＭＢ機能が有効化されてから無効化されるまでの間、その１つ以上のアドレス範囲にそれぞれ対応する１つ以上の領域をＨＭＢ２２１として利用し得る。
【００２５】
なお以下では、説明を分かりやすくするために、内部ＲＡＭ１４またはＨＭＢ２２１へのデータの格納（すなわち一時記憶）を、キャッシュ、バッファ等のその用途に関わらず、「キャッシュする」と称することがある。また、内部ＲＡＭ１４およびＨＭＢ２２１内の領域を、その用途に関わらず、「キャッシュ領域」として説明することがある。
【００２６】
ＮＡＮＤ型フラッシュメモリ５は複数のブロックを含む。各ブロックは複数のページを含む。１つのブロックは最小の消去単位として機能する。ブロックは、「消去ブロック」、または「物理ブロック」と称されることもある。各ページは、同一ワード線に接続された複数のメモリセルを含む。１つのページは、データ書き込み動作およびデータ読み出し動作の単位である。なお、ワード線をデータ書き込み動作およびデータ読み出し動作の単位としてもよい。
【００２７】
各ブロックに対するプログラム／イレーズサイクル数（Ｐ／Ｅサイクル数）には上限があり、最大Ｐ／Ｅサイクル数と称される。あるブロックの１回のＰ／Ｅサイクルは、このブロック内のすべてのメモリセルを消去状態にするための消去動作と、このブロックのページそれぞれにデータを書き込む書き込み動作とを含む。
【００２８】
また、コントローラ４は、Ｔｏｇｇｌｅ  ＤＤＲ、Ｏｐｅｎ  ＮＡＮＤ  Ｆｌａｓｈ  Ｉｎｔｅｒｆａｃｅ（ＯＮＦＩ）等のインタフェース規格に対応するＮＡＮＤインタフェース１３を介して、ＮＡＮＤ型フラッシュメモリ５に電気的に接続されている。ＮＡＮＤインタフェース１３は、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたＮＡＮＤ制御回路として機能する。ＮＡＮＤインタフェース１３は、例えばＮＡＮＤ信号の制御やコマンドの発行を行う。
【００２９】
ＮＡＮＤインタフェース１３は、複数のチャネル（Ｃｈ）を介して、ＮＡＮＤ型フラッシュメモリ５内の複数のＮＡＮＤ型フラッシュメモリチップにそれぞれ接続されていてもよい。複数のＮＡＮＤ型フラッシュメモリチップが並列に駆動されることにより、ＮＡＮＤ型フラッシュメモリ５に対するアクセスを広帯域化することができる。
【００３０】
コントローラ４は、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたメモリコントローラとして機能する。
【００３１】
コントローラ４は、ＮＡＮＤ型フラッシュメモリ５のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層（ＦＴＬ）として機能してもよい。このＦＴＬによって実行されるデータ管理は、（１）論理アドレスそれぞれとＮＡＮＤ型フラッシュメモリ５の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、（２）ページ単位のリード／ライトとブロック単位の消去（イレーズ）動作とを隠蔽するための処理、等を含む。論理アドレスは、ＳＳＤ３をアドレス指定するためにホスト２によって使用されるアドレスである。以下では、この論理アドレスとして、論理ブロックアドレス（ＬＢＡ）が使用されることを想定する。
【００３２】
コントローラ４は、ＬＢＡそれぞれと物理アドレスそれぞれとの間のマッピングの管理を、論理物理アドレス変換テーブルを用いて実行する。コントローラ４は、論理物理アドレス変換テーブルを使用して、ＬＢＡそれぞれと物理アドレスそれぞれとの間のマッピングを特定の管理サイズ単位で管理する。あるＬＢＡに対応する物理アドレスは、このＬＢＡのデータが書き込まれたＮＡＮＤ型フラッシュメモリ５内の物理記憶位置を示す。コントローラ４は、論理物理アドレス変換テーブルを、ＳＳＤ３の電源オン時にＮＡＮＤ型フラッシュメモリ５から、内部ＲＡＭ１４に、あるいはホストＲＡＭ２２内のＨＭＢ２２１に、ロードしてもよい。
【００３３】
１つのページへのデータ書き込みは、１回のＰ／Ｅサイクル当たり１回のみ可能である。コントローラ４は、あるＬＢＡに対応するデータを更新する場合、このＬＢＡに対応するデータが現在格納されている第１物理記憶位置ではなく、第１物理記憶位置とは別の第２物理記憶位置に更新データを書き込む。そして、コントローラ４は、このＬＢＡをこの第２物理記憶位置に関連付けるように論理物理アドレス変換テーブルを更新することにより、第１物理記憶位置に格納されている更新前のデータを無効化する。
【００３４】
ブロック管理は、バッドブロックの管理、ウェアレベリング、ガベージコレクション（ＧＣ）、等を含む。
【００３５】
ＦＴＬとして機能するコントローラ４は、上述したようなアドレス変換、ウェアレベリング、ＧＣ等の機能を実現するための処理を実行するために、論理物理アドレス変換テーブル、コントローラ４の内部情報を含むシステムデータ、断片化したユーザデータ等の大量のデータを、ＮＡＮＤ型フラッシュメモリ５に対してリードおよびライトする処理を行う必要がある。これらのデータを効率的に扱うための方法として、データをＮＡＮＤ型フラッシュメモリ５からより高速な一次メモリ（ＳＲＡＭ、ＤＲＡＭ等）に読み出す方法がある。しかし、大容量の一次メモリを内部ＲＡＭ１４として搭載することは、コントローラ４のコストやサイズを増大させる要因となる。
【００３６】
内部ＲＡＭ１４の容量の増大を抑制するための方法として、上述のＨＭＢ機能が用いられ得る。ＨＭＢ機能により、コントローラ４はホストＲＡＭ２２の一部を一時記憶領域として利用し、内部ＲＡＭ１４の容量を増大させることなく、ＦＴＬ等の処理を高速化できる。
【００３７】
コントローラ４は、ホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、内部ＲＡＭ１４、エンコーダ／デコーダ１５、周辺回路群１６等を含んでもよい。これらホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、内部ＲＡＭ１４、エンコーダ／デコーダ１５、および周辺回路群１６は、バス１０を介して相互接続されていてもよい。
【００３８】
ホストインタフェース１１は、ホスト２との間の信号制御やコマンドの発行を行う回路として機能する。ホストインタフェース１１は、インタフェース処理部１１１、パリティジェネレータ１１２、パリティチェッカ１１３等を備える。インタフェース処理部１１１は、ＳＳＤ３とホスト２とを接続するためのインタフェースで規定されたプロトコル（例えばＮＶＭｅのプロトコル）に従った処理を行う。インタフェース処理部１１１は、ホスト２から様々なコマンド、例えば、各種制御コマンド、Ｉ／Ｏコマンド等を受信する。制御コマンドは、ＨＭＢ機能の有効化／無効化を要求するためのコマンド（例えばＳｅｔ  Ｆｅａｔｕｒｅｓコマンド）を含み得る。Ｉ／Ｏコマンドは、ライトコマンド、リードコマンド等を含み得る。なお、各コマンドは指令とも称される。
【００３９】
ホスト２は、例えばホスト２を使用するユーザが切り替えられたことに応じて、ホスト２が電源オンされたことに応じて、あるいはＳＳＤ３が省電力モードから通常モードに移行したことに応じて、ＨＭＢ機能の有効化を要求するコマンドをＳＳＤ３に送信する。このコマンドは、例えばＨＭＢ機能の有効化を示すＳｅｔ  Ｆｅａｔｕｒｅｓコマンドである。ホスト２は、ＨＭＢ２２１として使用されるべき領域を指定するために、このコマンドと共に、例えばホストＲＡＭ２２内の１つ以上のアドレス範囲を示すリストのアドレス情報をＳＳＤ３に送信し得る。
【００４０】
またホスト２は、例えばホスト２を使用するユーザが切り替えられる前に、ホスト２が電源オフされる前に、あるいはＳＳＤ３が通常モードから省電力モードに移行する前に、ＨＭＢ機能の無効化を要求するコマンドをＳＳＤ３に送信する。このコマンドは、例えばＨＭＢ機能の無効化を示すＳｅｔ  Ｆｅａｔｕｒｅｓコマンドである。ＳＳＤ３は、消費電力を低減するために通常モードから省電力モードに移行する。ＳＳＤ３は、例えば、省電力モードに移行する前に、内部ＲＡＭ１４等の揮発性メモリに格納されたデータをＮＡＮＤ型フラッシュメモリ５に書き込んだ後、揮発性メモリおよびＮＡＮＤ型フラッシュメモリ５への電力供給を停止する。省電力モードに移行したＳＳＤ３は、一部の素子を除く各部に電力を供給しないので、消費電力を低減できる。
【００４１】
インタフェース処理部１１１は、ＨＭＢ機能の有効化を要求するコマンドに応じて、ＨＭＢ機能の有効化を示すリクエストをＣＰＵ１２に送出する。また、インタフェース処理部１１１は、ＨＭＢ２２１として使用されるべきホストＲＡＭ２２内の領域を指定したアドレス情報をＣＰＵ１２に送出する。これにより、ＣＰＵ１２によってＨＭＢ機能が有効化され、指定された領域がＨＭＢ２２１として用いられる。
【００４２】
また、インタフェース処理部１１１は、ＨＭＢ機能の無効化を要求するコマンドに応じて、ＨＭＢ機能の無効化を示すリクエストをＣＰＵ１２に送出する。これにより、ＣＰＵ１２によってＨＭＢ機能が無効化される。
【００４３】
インタフェース処理部１１１はさらに、ＨＭＢ機能が有効化されてから無効化されるまでの間、ＨＭＢ２２１にキャッシュされるべきデータをホスト２に送信し、またＨＭＢ２２１にキャッシュされているデータをホスト２から受信し得る。換言すると、インタフェース処理部１１１は、ＨＭＢ機能が有効化されてから無効化されるまでの間、データをＨＭＢ２２１にキャッシュするための処理と、ＨＭＢ２２１からデータを読み出すための処理とを行い得る。なお、キャッシュされるべきデータとは、コントローラ４がＨＭＢ２２１（あるいは内部ＲＡＭ１４）にキャッシュしようとしているデータであって、実際にはまだキャッシュされていないデータである。
【００４４】
パリティジェネレータ１１２は、キー値を用いて、ＨＭＢ２２１にキャッシュされるべきデータに付加されるパリティを生成する。インタフェース処理部１１１は、生成されたパリティとデータとをＨＭＢ２２１にキャッシュする。キー値は、ＣＰＵ１２によって、例えばＨＭＢ機能が有効化される毎に生成（更新）されるランダムな値である。キー値は、ＨＭＢ機能が有効化されてから無効化されるまでの期間毎にユニークな値である。例えば、ＨＭＢ機能が有効化されてから無効化されるまでの第１期間に用いられるキー値は、その第１期間の後にＨＭＢ機能が有効化されてから無効化されるまでの期間に用いられるキー値とは異なる。なお、以下では、ＨＭＢ機能が有効化されてから無効化されるまでの期間を、有効化期間とも称する。
【００４５】
パリティチェッカ１１３は、ＨＭＢ２２１からデータおよびパリティが読み出された場合、キー値と読み出されたパリティとを用いて、読み出されたデータにエラーが発生しているか否かを検証する。パリティジェネレータ１１２およびパリティチェッカ１１３は、ＣＰＵ１２によって生成されたキー値を保存している。キー値を用いたパリティの生成と、キー値およびパリティを用いたデータの検証とについては、図８から図１１を参照して後述する。
【００４６】
エンコーダ／デコーダ１５はユーザデータの暗号化および復号を行う。エンコーダ／デコーダ１５は、例えば、ＮＡＮＤインタフェース１３を介してＮＡＮＤ型フラッシュメモリ５に書き込まれるユーザデータを暗号化し、ＮＡＮＤインタフェース１３を介してＮＡＮＤ型フラッシュメモリ５から読み出されるユーザデータを復号し得る。エンコーダ／デコーダ１５は、例えばセキュリティキー（暗号化／復号キー）を用いて、ユーザデータの暗号化および復号を行う。セキュリティキーは、内部ＲＡＭ１４等のＲＡＭに保存されていてもよい。
【００４７】
周辺回路群１６はＣＰＵ１２による処理を補佐するための回路を含む。周辺回路群１６は、例えばダイレクトメモリアクセスコントローラ（ＤＭＡＣ）を含む。ホストインタフェース１１内のインタフェース処理部１１１は、ＤＭＡＣからの指示に従い、ＨＭＢ２２１にデータをキャッシュするための処理や、ＨＭＢ２２１にキャッシュされているデータを読み出すための処理を行い得る。
【００４８】
ＣＰＵ１２は、ホストインタフェース１１およびＮＡＮＤインタフェース１３を制御するように構成されたプロセッサである。ＣＰＵ１２は、図示しないＲＯＭ等に格納されているＦＷを実行することによって様々な処理を行う。ＣＰＵ１２は、上述のＦＴＬの処理に加え、ホスト２からの様々なコマンドを処理するためのコマンド処理等を実行することができる。ＣＰＵ１２によって実行される上述のＦＷは、ＣＰＵ１２の動作を制御する。なお、コントローラ４内の専用ハードウェアが、ＦＴＬ処理およびコマンド処理の一部または全部を実行してもよい。
【００４９】
ＣＰＵ１２は、例えば、リード制御部１２１、ライト制御部１２２、ＧＣ制御部１２３、ＨＭＢ機能制御部１２４、キー生成部１２５、およびキャッシュ先判定部１２６として機能し得る。
【００５０】
リード制御部１２１は、ＮＡＮＤ型フラッシュメモリ５からリードコマンドに応じたユーザデータを読み出す。リード制御部１２１は、読み出したユーザデータが内部ＲＡＭ１４またはＨＭＢ２２１にキャッシュされるように、コントローラ４内の各部を制御し得る。つまり、リード制御部１２１は、内部ＲＡＭ１４およびＨＭＢ２２１を、読み出したユーザデータを蓄積するリードバッファとして使用し得る。
【００５１】
ライト制御部１２２は、ライトコマンドを受け付けたことに伴ってホスト２から受信されたユーザデータを、ＮＡＮＤ型フラッシュメモリ５に書き込む。ライト制御部１２２は、ＮＡＮＤ型フラッシュメモリ５に書き込むべきユーザデータが内部ＲＡＭ１４またはＨＭＢ２２１にキャッシュされるように、コントローラ４内の各部を制御し得る。つまり、ライト制御部１２２は、内部ＲＡＭ１４およびＨＭＢ２２１を、書き込むべきユーザデータを蓄積するライトバッファとして使用し得る。
【００５２】
ＧＣ制御部１２３も、ライト制御部１２２と同様にして、ＮＡＮＤ型フラッシュメモリ５への書き込みを行い得る。上述したように、ＮＡＮＤ型フラッシュメモリ５は複数のブロックを含んでいる。ブロックは、有効データを格納しているブロック（アクティブブロック）と、有効データを格納しておらず、イレーズ処理を経ることで新たなデータの書き込みに利用可能なブロック（フリーブロック）とに大別される。ＧＣ制御部１２３は、１つ以上のフリーブロックから１つのブロックを選択し、その１つのブロックに対してイレーズ処理を行う。そして、ＧＣ制御部１２３は当該ブロックを書き込み先ブロックとして割り当てる。書き込み先ブロックは有効データを格納し得る。
【００５３】
ＧＣ制御部１２３は、有効データを格納しているアクティブブロック群からガベージコレクションソースブロック（ＧＣソースブロック）を選択する。そして、ＧＣ制御部１２３は、このＧＣソースブロック内の有効データを、フリーブロック群から書き込み先ブロックとして確保されたガベージコレクションデスティネーションブロック（ＧＣデスティネーションブロック）に書き込む。その際、ＧＣ制御部１２３は、ＧＣソースブロック内の有効データが内部ＲＡＭ１４またはＨＭＢ２２１にキャッシュされるように、コントローラ４内の各部を制御し得る。つまり、ＧＣ制御部１２３は内部ＲＡＭ１４およびＨＭＢ２２１を、有効データを蓄積するＧＣバッファとして使用し得る。
【００５４】
ＨＭＢ機能制御部１２４はＨＭＢ機能の有効化／無効化を制御する。上述したように、インタフェース処理部１１１は、ＨＭＢ機能の有効化を示すリクエストと、ＨＭＢ２２１として使用されるべき領域を指定したアドレス情報とを、ＣＰＵ１２に送出する。このアドレス情報は、ホストＲＡＭ２２内の１つ以上のアドレス範囲を示すリストを含む。
【００５５】
ＨＭＢ機能制御部１２４は、ＨＭＢ機能の有効化を示すリクエストに応じてＨＭＢ機能を有効化する。そして、ＨＭＢ機能制御部１２４は、ホストＲＡＭ２２内の１つ以上のアドレス範囲を示すリストのアドレス情報を用いて、ＨＭＢ機能が有効化されてから無効化されるまでの間、その１つ以上のアドレス範囲にそれぞれ対応する１つ以上の領域をＨＭＢ２２１として管理する。
【００５６】
ＨＭＢ機能制御部１２４はＨＭＢ２２１を管理するために、例えばＨＭＢ領域管理情報を用いる。ＨＭＢ領域管理情報は、例えば内部ＲＡＭ１４にキャッシュされる。また、ＨＭＢ領域管理情報は、ＨＭＢ２２１内にキャッシュされているデータを識別するための情報（例えば論理アドレス）と、当該データがキャッシュされているＨＭＢ２２１内の位置（領域）を示す情報とを含み得る。
【００５７】
また上述したように、インタフェース処理部１１１はＨＭＢ機能の無効化を示すリクエストをＣＰＵ１２に送出する。ＨＭＢ機能制御部１２４は、ＨＭＢ機能の無効化を示すリクエストに応じてＨＭＢ機能を無効化する。
【００５８】
キー生成部１２５は、ＨＭＢ２２１にキャッシュされるべきデータにパリティを付加し、ＨＭＢ２２１から読み出されたデータを付加されたパリティで検証するためのキー値を生成する。キー生成部１２５は、例えばＨＭＢ機能が有効化される毎にキー値を生成し、これまで使用されていたキー値を新たに生成されたキー値で更新する。更新前のキー値と更新後のキー値とは異なる値であり、各々が例えば乱数を含む。キー生成部１２５は、生成されたキー値を、ホストインタフェース１１内のパリティジェネレータ１１２とパリティチェッカ１１３とに通知することにより、パリティの付加と、パリティによるデータの検証とに用いられるキー値を更新する。
【００５９】
キャッシュ先判定部１２６は、あるデータがキャッシュされるべきＲＡＭを決定する。より具体的には、キャッシュ先判定部１２６は、あるデータがホストＲＡＭ２２（すなわちＳＳＤ３の外部）にキャッシュ可能であるか否かを判定する。キャッシュ先判定部１２６は、例えば、ＧＣやシステムデータ更新処理等のＳＳＤ３の内部処理のためにＮＡＮＤ型フラッシュメモリ５からデータが読み出されたときに、読み出されたデータがホストＲＡＭ２２にキャッシュ可能であるか否かを判定し、キャッシュ先（ここではＨＭＢ２２１と内部ＲＡＭ１４のいずれか）を選択する。なお、キャッシュ可能なデータとは、あるＲＡＭにキャッシュすることが許可されたデータである。
【００６０】
キャッシュ先判定部１２６は、あるデータがホストＲＡＭ２２にキャッシュ可能なデータであるならば、当該データのキャッシュ先をホストＲＡＭ２２内のＨＭＢ２２１に決定する。一方、キャッシュ先判定部１２６は、あるデータがホストＲＡＭ２２にキャッシュ可能なデータでないならば、当該データのキャッシュ先を内部ＲＡＭ１４に決定する。キャッシュ先判定部１２６は、あるデータがホストＲＡＭ２２にキャッシュ可能なデータであるか否かを、データの種別や内容等に基づく特定の条件に従って判定し得る。この特定の条件については図６を参照して後述する。
【００６１】
キャッシュ先判定部１２６は、キャッシュ先が内部ＲＡＭ１４に決定されたデータ（すなわちホストＲＡＭ２２にキャッシュ可能でないデータ）が内部ＲＡＭ１４にキャッシュされるように、コントローラ４内の各部を制御する。キャッシュ先判定部１２６は、キャッシュ先がＨＭＢ２２１に決定されたデータ（すなわちホストＲＡＭ２２にキャッシュ可能であるデータ）が、ホストインタフェース１１を介してＨＭＢ２２１にキャッシュされるように、コントローラ４内の各部を制御する。
【００６２】
図２は、ＨＭＢ機能を有するＳＳＤ３によって、内部ＲＡＭ１４とホストＲＡＭ２２に設けられるＨＭＢ２２１とがキャッシュ領域として用いられる例を示す。図２に示す例では、ＳＳＤ３は、ＮＡＮＤ型フラッシュメモリ５から読み出したデータを、内部ＲＡＭ１４と、ホストＲＡＭ２２に設けられるＨＭＢ２２１とにキャッシュしている。内部ＲＡＭ１４だけでなく、ホストＲＡＭ２２内のＨＭＢ２２１もキャッシュ領域（すなわち作業用ＲＡＭ）として利用できるので、ＳＳＤ３は、内部ＲＡＭ１４の容量を大きくすることなく処理を高速化できる。
【００６３】
図３は、ＳＳＤ３内のＮＡＮＤ型フラッシュメモリ５に、ＳＳＤ３のシステムデータと、ホスト２を使用する複数のユーザそれぞれのユーザデータとが書き込まれる例を示す。システムデータは、管理データ、暗号化／復号等に用いられるセキュリティキー、ＦＷ、論理物理アドレス変換テーブル、動作ログ等のデータを含む。ユーザデータは、例えば、ホスト２を使用する２人のユーザＡおよびＢのそれぞれのユーザデータである。
【００６４】
図３に示す例のように、ＮＡＮＤ型フラッシュメモリ５から読み出されたデータが内部ＲＡＭ１４だけにキャッシュされるケースでは、ホスト２は内部ＲＡＭ１４に直接アクセスできない。したがって、内部ＲＡＭ１４にキャッシュされたデータに対して、ホスト２が不正にアクセスすることは困難であり、データが漏洩する可能性は低い。
【００６５】
これに対して、図４は、ＮＡＮＤ型フラッシュメモリ５から読み出されたデータが内部ＲＡＭ１４だけでなく、ホストＲＡＭ２２内のＨＭＢ２２１にもキャッシュされるケースを示す。このケースでは、ＨＭＢ２２１がコントローラ４の外部のＲＡＭ領域であるので、ホスト２は内部ＲＡＭ１４にアクセスするより容易に、ＨＭＢ２２１にアクセスできる。そのため、ＨＭＢ２２１にキャッシュされたデータが不正にアクセスされ、外部へ漏洩する可能性がＨＭＢ２２１を使用しない場合と比べて高くなる。
【００６６】
また、例えばＧＣソースブロック内の有効データがＨＭＢ２２１にキャッシュされるならば、あるユーザがホスト２を使用している間に、ＧＣソースブロック内の有効データとして別のユーザのユーザデータがＨＭＢ２２１にキャッシュされる可能性がある。つまり、ＨＭＢ２２１の利用が、その別のユーザのユーザデータの漏洩を招く脆弱性となり得る。
【００６７】
例えば、ユーザＡはＨＭＢ２２１にキャッシュされたデータにアクセスするための操作を行うことにより、ユーザＡのユーザデータだけでなく、ＳＳＤ３のシステムデータやユーザＢのユーザデータも取得できる可能性がある。この場合、ユーザＡは、アクセス権限のないＳＳＤ３のシステムデータやユーザＢのユーザデータに不正にアクセスできることになる。同様に、ユーザＢも、アクセス権限のないＳＳＤ３のシステムデータやユーザＡのユーザデータに不正にアクセスできる可能性がある。
【００６８】
図５は、コントローラ４が、ＮＡＮＤ型フラッシュメモリ５から読み出されたデータを外部にキャッシュ可能であるかどうかを判定する外部キャッシュ可否判定を行う例を示す。
【００６９】
本実施形態では、コントローラ４は、図５に示すように、ＮＡＮＤ型フラッシュメモリ５から読み出されたデータがＳＳＤ３の外部（例えばＨＭＢ２２１）にキャッシュ可能なデータであるかどうかを判定する。そして、コントローラ４は、外部にキャッシュ可能であると判定したデータをＨＭＢ２２１にキャッシュする一方、外部にキャッシュ可能でないと判定したデータを内部ＲＡＭ１４にキャッシュする。これによりコントローラ４は、例えばセキュリティの観点から優先順位（あるいは優先度）が低いと判断したデータをＨＭＢ２２１にキャッシュし、優先順位が高いと判断したデータを内部ＲＡＭ１４にキャッシュする。したがって、コントローラ４は、ＨＭＢ２２１を利用する場合に、セキュリティの観点から判断した優先順位に応じてデータのキャッシュ先を切り替えることができる。
【００７０】
図６は、ＮＡＮＤ型フラッシュメモリ５から読み出されたデータがＳＳＤ３の外部にキャッシュ可能なデータであるかどうかを判定するための条件の一例を示す。条件は、データの種別や、暗号化の有無、セキュリティ上の優先順位等のようなデータの内容に基づいて規定される。図６に示す条件の一例では、読み出されたデータの種別と内容とに基づいて以下のように規定されている。
【００７１】
（１）種別がユーザデータであって、内容が暗号化されているデータは、外部キャッシュ可である。  
（２）種別がユーザデータであって、内容が暗号化されていないデータは、外部キャッシュ不可である。  
（３）種別がシステムデータであって、内容がセキュリティキーであるデータは、外部キャッシュ不可である。  
（４）種別がシステムデータであって、内容がＦＷであるデータは、外部キャッシュ不可である。  
（５）種別がシステムデータであって、内容が論理物理アドレス変換テーブルであるデータは、外部キャッシュ可である。  
（６）種別がシステムデータであって、内容がＳＳＤ３の動作ログであるデータは、外部キャッシュ可である。
【００７２】
上記の条件は、ＮＡＮＤ型フラッシュメモリ５から読み出されたデータの内、暗号化されていないユーザデータ、セキュリティキーを含むデータ、およびＣＰＵ１２による動作を制御するＦＷのデータを、セキュリティ上の優先順位が高いデータであるとするポリシーに基づき、これらデータが外部キャッシュ不可と判定されることを規定している。上記の条件はさらに、暗号化されたユーザデータ、およびＳＳＤ３の内部ログのデータを、セキュリティ上の優先順位が低いデータであるとするポリシーに基づき、これらデータが外部キャッシュ可と判定されることを規定している。
【００７３】
キャッシュ先判定部１２６は、例えばＮＡＮＤ型フラッシュメモリ５からデータが読み出されたとき、上記のような条件に従って、そのデータの外部キャッシュの可否を判定する。これにより、セキュリティ上の優先順位が高いデータがＳＳＤ３の外部（ここではＨＭＢ２２１）にキャッシュされないので、そのようなデータの漏洩を防止できると共に、ＨＭＢ２２１が利用されることによる処理の高速化も実現できる。
【００７４】
上記の条件は一例であって、情報処理システム１の用途や管理者およびユーザの指示等に応じて種々の条件が設定され得る。例えば、種別がユーザデータであるデータは、暗号化されているか否かに関わらず、外部キャッシュ不可としてもよい。
【００７５】
また、ＨＭＢ２２１にキャッシュされたデータは内部ＲＡＭ１４にキャッシュされたデータよりも破損や改竄の可能性が大きい。ＨＭＢ２２１にキャッシュされたデータが破損または改竄された場合、そのデータを利用するＳＳＤ３では、誤動作、データの消失、起動不良等の不具合が発生し得る。
【００７６】
このようなデータの破損や改竄に対処するために、ＳＳＤ３は、例えばデータにパリティを付加する方法を用いる。データとパリティとをＨＭＢ２２１にキャッシュしておくことにより、ＳＳＤ３は、パリティを用いてデータにエラーが発生しているかどうかを判別できる。
【００７７】
しかし、固定の計算方法で生成されたパリティが用いられるならば、（１）あるＳＳＤが、当該ＳＳＤと同様の構成を備える別のＳＳＤによってＨＭＢ２２１にキャッシュされたデータを読み出した場合に、あるいは（２）あるＳＳＤが、当該ＳＳＤによってＨＭＢ２２１に過去にキャッシュされ、既に無効であるデータを読み出した場合に、そのデータを、エラーが発生しているデータとして判別できない。別のＳＳＤによってキャッシュされたデータや既に無効であるデータは、当該データを読み出したＳＳＤに不具合を発生させ得るので、エラーが発生しているデータとして判別される。
【００７８】
図７を参照して、エラーが発生しているデータを、固定の計算方法で生成されたパリティで判別できない具体的なケースを例示する。図７は、情報処理システム１が第１ＳＳＤ３Ａと第２ＳＳＤ３Ｂとを使用してＲＡＩＤを構築するケースを示している。
【００７９】
このケースでは、同様の構成を有する第１ＳＳＤ３Ａと第２ＳＳＤ３Ｂとを用いてＲＡＩＤが構築された場合に、図示しないＲＡＩＤコントローラの不具合によって、第１ＳＳＤ３Ａが使用するＨＭＢ２２１Ａと第２ＳＳＤ３Ｂが使用するＨＭＢ２２１Ｂとが、ホストＲＡＭ２２内の重複した領域に設けられている。
【００８０】
本来、ＨＭＢ２２１Ａ，２２１Ｂは、各ＳＳＤ３Ａ，３Ｂが排他的に使用する領域であるため、第１ＳＳＤ３Ａが使用するＨＭＢ２２１Ａと第２ＳＳＤ３Ｂが使用するＨＭＢ２２１Ｂとは、それぞれ独立した領域として割り当てられなければならない。図７に示すように、誤って、第１ＳＳＤ３Ａが使用するＨＭＢ２２１Ａと第２ＳＳＤ３Ｂが使用するＨＭＢ２２１Ｂとが重なって配置された場合、例えば第１ＳＳＤ３ＡがＨＭＢ２２１Ａにキャッシュしたデータ８１を、第２ＳＳＤ３Ｂが別のデータ８２で上書きしてしまう可能性がある。したがって、第１ＳＳＤ３Ａによってキャッシュされたデータが破損し得る。
【００８１】
そして、第１ＳＳＤ３Ａが、第２ＳＳＤ３Ｂによって上書きされたデータ８２を読み出した場合、第１ＳＳＤ３Ａは、読み出されたデータ８２が第１ＳＳＤ３Ａによってキャッシュされたデータ８１とは異なっているとしても、データ８２に付加されたパリティを用いたデータ８２の検証では、このデータ８２をエラーが発生しているデータとして判別することはできない。これは、２つのＳＳＤ３Ａ，３Ｂが同一の計算方法でパリティを生成していて、データ８２に正当なパリティが付加されているためである。
【００８２】
図８は、本実施形態において、ＳＳＤ３内のコントローラ４がキー値６４を利用したパリティの付加と検証とを行う例を示す。コントローラ４は、パリティジェネレータ１１２を用いて、ＨＭＢ２２１にキャッシュするべきデータに対して、キー値６４を用いてパリティを付加する。そして、コントローラ４は、パリティが付加されたデータをＨＭＢ２２１にキャッシュする。キー値６４は、例えば、乱数を含むユニークな値である。コントローラ４は、ＳＳＤ３のＨＭＢ機能が有効化される毎にキー値６４を更新する。
【００８３】
なお、パリティが付加される対象のデータは、ＮＡＮＤ型フラッシュメモリ５から読み出され、ＨＭＢ２２１にキャッシュ可能と判断されたリードデータに限らず、ホストインタフェース１１を介してＨＭＢ２２１にキャッシュされるデータであれば、いずれのデータであってもよい。コントローラ４は、例えば、ホスト２からのライトコマンドを受け付けたことに伴って受信されたユーザデータ（すなわちＮＡＮＤ型フラッシュメモリ５に書き込むべきユーザデータ）に対して、キー値６４を用いてパリティを付加し、パリティが付加されたユーザデータをＨＭＢ２２１にキャッシュしてもよい。
【００８４】
また、ＨＭＢ２２１にキャッシュされたデータを読み出した場合、コントローラ４は、パリティチェッカ１１３で、キー値６４と読み出したデータに付加されたパリティとを用いて、読み出したデータにエラーが発生しているか否かを検証する。検証の結果、読み出したデータにエラーが発生していなければ、コントローラ４はそのデータを用いた処理を続行する。一方、読み出されたデータにエラーが発生していたならば、コントローラ４は当該データを破棄する。
【００８５】
図９は、データに付加されるパリティの生成方法の一例を示す。データは、ＨＭＢ２２１にキャッシュされるべきデータであり、パリティで保護されるべきデータである。以下では、このデータを保護データとも称する。
【００８６】
図９では、４バイトのキー値６４を用いて、１２８バイトの保護データ６０に対して４バイトのパリティ６５が生成される場合について例示する。キー値６４、保護データ６０、およびパリティ６５のデータサイズは一例であって、ＳＳＤ３の構成、用途等に応じて適宜変更可能である。
【００８７】
パリティジェネレータ１１２は、保護データ６０を４バイト単位で分割することにより得られた３２個の保護データ部６０１〜６３２と、キー値６４とを用いてパリティ６５を生成する。キー値６４は、例えばＣＰＵ１２（より詳しくはキー生成部１２５）によって生成され、パリティジェネレータ１１２およびパリティチェッカ１１３に保存されている。パリティジェネレータ１１２は、３２個の保護データ部６０１〜６３２とキー値６４の排他的論理和（ＸＯＲ）演算結果をパリティ６５として生成する。
【００８８】
図１０は、ＨＭＢ２２１にキャッシュされる保護データ６０とパリティ６５との例を示す。コントローラ４は、ストレージインタフェース２３を介して、保護データ６０と生成されたパリティ６５とをＨＭＢ２２１にキャッシュする。
【００８９】
また図１１は、ＨＭＢ２２１から１２８バイトの保護データ７０と４バイトのパリティ７５とが読み出された場合に、保護データ７０にエラーが発生しているか否かの検証が行われる例を示す。パリティチェッカ１１３は、読み出された保護データ７０を４バイト単位で分割することにより得られた３２個の保護データ部７０１〜７３２と、読み出されたパリティ７５と、キー値６４とを用いて、保護データ７０にエラーが発生しているか否かを検証する。
【００９０】
パリティチェッカ１１３は、３２個の保護データ部７０１〜７３２とパリティ７５とキー値６４のＸＯＲ演算結果を検証値とする。検証値が０であるならば、パリティチェッカ１１３は保護データにエラーが発生していないと判断する。一方、検証値が０でないならば、パリティチェッカ１１３は保護データにエラーが発生していると判断する。
【００９１】
以上により、本実施形態に係るＳＳＤ３は、キー値６４とパリティ７５とを用いて、ＨＭＢ２２１から読み出された保護データ７０に破損や改竄のようなエラーが発生しているか否かを検証できる。読み出された保護データ７０にエラーが発生している場合、例えば、その保護データ７０がＮＡＮＤ型フラッシュメモリ５から読み出され、ＨＭＢ２２１にキャッシュされたデータであるならば、ＳＳＤ３は、対応するオリジナルのデータをＮＡＮＤ型フラッシュメモリ５から再度読み出す。これにより、エラーが発生している保護データ７０を用いた処理が行われることによるＳＳＤ３の誤動作等を回避できる。
【００９２】
なお、ＳＳＤ３は、保護データにパリティを付加し、パリティを用いて保護データを検証するための方法として、上述したＸＯＲ演算を用いる方法に限らず、ＨＭＢ機能が有効化される毎に更新される値（例えばキー値６４）が反映されたパリティを用いる方法であれば、いずれの方法を用いてもよい。
【００９３】
上述したように、ＣＰＵ１２は、キー値６４を、例えばＨＭＢ機能が有効化される毎に更新し、パリティジェネレータ１１２およびパリティチェッカ１１３に通知する。
【００９４】
より具体的には、ホストＲＡＭ２２内の第１ＨＭＢ（すなわち第１ＨＭＢを示すホストＲＡＭ２２内のアドレス範囲）を指定してＨＭＢ機能が有効化されるとき、ＣＰＵ１２は第１キー値を生成する。そして、ＨＭＢ機能が有効化されてから無効化されるまでの第１有効化期間において、パリティジェネレータ１１２は、第１キー値を用いて第１ＨＭＢにキャッシュされるべき第１データに第１パリティを付加する。また、この第１有効化期間において第１ＨＭＢから第１データと第１パリティとが読み出された場合、パリティチェッカ１１３は、第１キー値と読み出された第１パリティとを用いて、読み出された第１データを検証する。
【００９５】
第１有効化期間が終了した後、ホストＲＡＭ２２内の第２ＨＭＢを指定してＨＭＢ機能が有効化されるとき、ＣＰＵ１２は第１キー値とは異なる第２キー値を生成する。つまり、ＣＰＵ１２はＳＳＤ３で用いられるキー値を第１キー値から第２キー値に更新する。そして、第１有効化期間が終了した後にＨＭＢ機能が有効化されてから無効化されるまでの第２有効化期間において、パリティジェネレータ１１２は、第２キー値を用いて第２ＨＭＢにキャッシュされるべき第２データに第２パリティを付加する。また、この第２有効化期間において第２ＨＭＢから第２データと第２パリティとが読み出された場合、パリティチェッカ１１３は、第２キー値と読み出された第２パリティとを用いて、読み出された第２データを検証する。
【００９６】
なお、第２ＨＭＢとして用いられるホストＲＡＭ２２内の領域は、第１ＨＭＢと同一の領域であってもよいし、異なる領域であってもよい。また、第２ＨＭＢとして用いられるホストＲＡＭ２２内の領域が、第１ＨＭＢと同一の領域であっても、ＳＳＤ３が当該領域にキャッシュされていたデータを継続して利用することはない。
【００９７】
同様に、第２有効化期間が終了した後、ホストＲＡＭ２２内の第３ＨＭＢを指定してＨＭＢ機能が有効化されるとき、ＣＰＵ１２は第１キー値および第２キー値とは異なる第３キー値を生成する。つまり、ＣＰＵ１２はＳＳＤ３で用いられるキー値を第２キー値から第３キー値に更新する。そして、第２有効化期間が終了した後にＨＭＢ機能が有効化されてから無効化されるまでの第３有効化期間において、パリティジェネレータ１１２は、第３キー値を用いて第３ＨＭＢにキャッシュされるべき第３データに第３パリティを付加する。また、この第３有効化期間において第３ＨＭＢから第３データと第３パリティとが読み出された場合、パリティチェッカ１１３は、第３キー値と読み出された第３パリティとを用いて、読み出された第３データを検証する。
【００９８】
なお、第３ＨＭＢとして用いられるホストＲＡＭ２２内の領域は、第２ＨＭＢと同一の領域であってもよいし、異なる領域であってもよい。また、第３ＨＭＢとして用いられるホストＲＡＭ２２内の領域が、第２ＨＭＢと同一の領域であっても、ＳＳＤ３が当該領域にキャッシュされていたデータを継続して利用することはない。
【００９９】
このように、ＳＳＤ３は、キー値６４として、ＨＭＢ機能が有効化されてから無効化されるまでの有効化期間毎にユニークな値を用いる。これにより、パリティ付加のための同様の構成を有する別のＳＳＤによってキャッシュされたデータや、このＳＳＤ３が過去にキャッシュし、既に無効であるデータ（すなわち現在の有効化期間よりも前の有効化期間にキャッシュしたデータ）をＨＭＢ２２１から読み出した場合に、ＳＳＤ３はそのデータをエラーが発生しているデータとして判別できる。これは、読み出されたデータに、現在のキー値とは異なるキー値を用いてパリティが付加されているためである。したがって、上記構成を有するＳＳＤ３は、ＨＭＢ２２１が用いられる際のセキュリティを強化できる。
【０１００】
ＨＭＢ機能の有効化が、すなわちキー値の更新が、ホスト２を使用するユーザの切り替え、電源オン、省電力モードから通常モードへの移行等のタイミングで行われることにより、古い無効なデータのような誤ったデータが読み込まれることによるＳＳＤ３の不具合を防止できる。さらに、キー値がランダムに生成されることにより、複数のＳＳＤにＨＭＢとしてそれぞれ割り当てられた複数の領域がホストＲＡＭ２２内で重複していたとしても、それぞれのＳＳＤで異なるキー値が使用されているので、別のＳＳＤによってキャッシュされたデータのような誤ったデータが読み込まれることも防止できる。
【０１０１】
なお、ＳＳＤ３はメモリリターン（ＭＲ）機能を有していてもよい。ＭＲ機能は、例えばＮＶＭｅ規格で定められたＨＭＢ機能の１つであり、ＨＭＢ機能が無効化された後にＨＭＢ機能が有効化された場合、その無効化された時のＨＭＢ２２１を継続して使用するための機能である。つまり、ＭＲ機能により、ＳＳＤ３は、その無効化された時にＨＭＢ２２１にキャッシュされていたデータを継続して使用できる。例えばホスト２が電源オン状態である間に、電源オン状態であったＳＳＤ３が省電力等のために電源オフされた場合に、再び電源オンされたＳＳＤ３は、ＭＲ機能を利用して、電源オフされる前に使用していたＨＭＢ２２１を継続して使用できる。ＳＳＤ３がＭＲ機能を有している場合、ＨＭＢ機能が有効化されるときに、ＭＲ機能の有効または無効がさらに指定され得る。
【０１０２】
ＭＲ機能の有効は、有効化期間（すなわちＨＭＢ機能が有効化されてから無効化されるまでの期間）のうち直近の有効化期間が終了した時のＨＭＢ２２１の内容が継続して使用されることを示す。ＭＲ機能の有効が指定された場合には、直近の有効化期間が終了した時点のＨＭＢ２２１にキャッシュされていたデータが継続して使用できるように、ＣＰＵ１２は、直近の有効化期間に用いられていたキー値６４を更新せず、そのまま使用する。またこの場合、直近の有効化期間に使用されていたＨＭＢ２２１と、後続する新たな有効化期間に使用されるＨＭＢ２２１とは、例えばホストＲＡＭ２２内の同一の領域（すなわちホストＲＡＭ２２内の同一のアドレス範囲の領域）である。
【０１０３】
一方、ＭＲ機能の無効は、直近の有効化期間が終了した時のＨＭＢ２２１が使用されないことを示す。ＭＲ機能の無効が指定された場合には、ＣＰＵ１２はキー値６４を更新する。これにより、例えば直近の有効化期間のＨＭＢ２２１にキャッシュされていたデータが誤って読み出されたとしても、パリティチェッカ１１３は、そのデータを、エラーが発生しているデータとして判別できる。またこの場合、直近の有効化期間に使用されていたＨＭＢ２２１と、後続する新たな有効化期間に使用されるＨＭＢ２２１とは、例えばホストＲＡＭ２２内の同一の領域であってもよいし、異なる領域であってもよい。
【０１０４】
より具体的には、ＣＰＵ１２は、ホストＲＡＭ２２内の第１ＨＭＢとＭＲ機能の無効とを指定してＨＭＢ機能が有効化されるとき、第１キー値を生成し、パリティジェネレータ１１２およびパリティチェッカ１１３に保存する。そして、ＨＭＢ機能が有効化されてから無効化されるまでの第１有効化期間において、パリティジェネレータ１１２は、第１キー値を用いて、第１ＨＭＢにキャッシュされるべき第１データに第１パリティを付加する。また、この第１有効化期間において、第１ＨＭＢから第１データと第１パリティとが読み出された場合、パリティチェッカ１１３は、第１キー値と読み出された第１パリティとを用いて、読み出された第１データを検証する。
【０１０５】
第１有効化期間が終了した後、ホストＲＡＭ２２内の第１ＨＭＢとＭＲ機能の有効とを指定してＨＭＢ機能が有効化されるとき、ＣＰＵ１２は第１キー値を更新せず、コントローラ４内の各部は第１有効化期間が終了した時の第１ＨＭＢを継続して使用する。そして、第１有効化期間が終了した後にＨＭＢ機能が有効化されてから無効化されるまでの第２有効化期間において、パリティジェネレータ１１２は、第１キー値を用いて、第１ＨＭＢに新たにキャッシュされるべき第２データに第２パリティを付加する。また、第２有効化期間において第１ＨＭＢから第２データと第２パリティとが読み出された場合、パリティチェッカ１１３は、第１キー値と読み出された第２パリティとを用いて、読み出された第２データを検証する。さらに、第２有効化期間において第１ＨＭＢから第１データと第１パリティとが読み出された場合（すなわち第１有効化期間に第１ＨＭＢにキャッシュされた第１データと第１パリティとが読み出された場合）、パリティチェッカ１１３は、第１キー値と読み出された第１パリティとを用いて、読み出された第１データを検証する。第１キー値が用いられるので、第１有効化期間内に第１ＨＭＢにキャッシュされていた第１データは、エラーが発生しているデータとして判別されることなく、継続して利用される。
【０１０６】
次いで、第２有効化期間が終了した後、ホストＲＡＭ２２内の第２ＨＭＢとＭＲ機能の無効とを指定してＨＭＢ機能が有効化されるとき、ＣＰＵ１２は第１キー値とは異なる第２キー値を生成する。つまり、ＣＰＵ１２はＳＳＤ３で用いられるキー値を第１キー値から第２キー値に更新する。そして、第２有効化期間が終了した後にＨＭＢ機能が有効化されてから無効化されるまでの第３有効化期間において、パリティジェネレータ１１２は、第２キー値を用いて第２ＨＭＢにキャッシュされるべき第３データに第３パリティを付加する。また、第３有効化期間において第２ＨＭＢから第３データと第３パリティとが読み出された場合、パリティチェッカ１１３は、第２キー値と読み出された第３パリティとを用いて、読み出された第３データを検証する。
【０１０７】
なお、第２ＨＭＢとして用いられるホストＲＡＭ２２内の領域は、第１ＨＭＢと同一の領域であってもよいし、異なる領域であってもよい。また、第２ＨＭＢとして用いられるホストＲＡＭ２２内の領域が、第１ＨＭＢと同一の領域であっても、ＳＳＤ３が当該領域にキャッシュされていたデータを継続して利用することはない。
【０１０８】
このように、ＭＲ機能の有効を指定してＨＭＢ機能が有効化される場合には、ＳＳＤ３は、キー値６４を更新せずに、直近の有効化期間の終了時におけるＨＭＢ２２１を継続して利用することもできる。ＭＲ機能が有効である場合には、直近の有効化期間の終了時においてＨＭＢ２２１にキャッシュされていたデータを、新たなＨＭＢ２２１に再度キャッシュするための動作が不要になる。
【０１０９】
図１２および図１３を参照して、ＨＭＢ機能を有効化する処理シーケンスの例について説明する。ホスト２がＳＳＤ３に対してＨＭＢ機能の有効化を要求する際に用いられるＳｅｔ  Ｆｅａｔｕｒｅｓコマンドは、ＨＭＢ機能の有効化を示す値（Ｅｎａｂｌｅ  Ｈｏｓｔ  Ｍｅｍｏｒｙ（ＥＨＭ）＝１）と、ＭＲ機能の無効を示す値（ＭＲ＝０）または有効を示す値（ＭＲ＝１）とを含む。ホスト２は、Ｓｅｔ  Ｆｅａｔｕｒｅｓコマンドと共に、ホストＲＡＭ２２内の、ＨＭＢ２２１として用いられる１つ以上の領域を示すリストのアドレス情報も、ＳＳＤ３に提供し得る。
【０１１０】
まず、図１２はＳｅｔ  ＦｅａｔｕｒｅｓコマンドにＭＲ機能の無効を示す値が含まれる場合の例を示す。
【０１１１】
ホスト２は、ＨＭＢ機能の有効化を示す値とＭＲ機能の無効を示す値とを含むＳｅｔ  ＦｅａｔｕｒｅｓコマンドをＳＳＤ３に送信する（Ａ１）。
【０１１２】
ＳＳＤ３のホストインタフェース１１は、Ｓｅｔ  Ｆｅａｔｕｒｅｓコマンドに応じてＨＭＢ機能を有効化するリクエストをＣＰＵ１２に送出する（Ａ２）。リクエストにはＭＲ機能の無効が示されている。
【０１１３】
ＣＰＵ１２は、ＭＲ機能の無効が示されたリクエストに応じてキー値を生成し（Ａ３）、生成されたキー値をホストインタフェース１１に通知する（Ａ４）。ホストインタフェース１１では、パリティジェネレータ１１２およびパリティチェッカ１１３が通知されたキー値を保存する（Ａ５）。なお、パリティジェネレータ１１２およびパリティチェッカ１１３に既にキー値が保存されている場合、パリティジェネレータ１１２およびパリティチェッカ１１３は、そのキー値を、通知されたキー値で更新する。
【０１１４】
次いで、ＣＰＵ１２はＨＭＢ機能を有効化する（Ａ６）。そして、ＣＰＵ１２はＨＭＢ機能の有効化が完了したことをホストインタフェース１１に通知する（Ａ７）。ホストインタフェース１１は、この通知に応じて、ホスト２にＳｅｔ  Ｆｅａｔｕｒｅｓコマンドに基づく処理の完了を通知してもよい（Ａ８）。
【０１１５】
以上のように、ＨＭＢ機能の有効化とＭＲ機能の無効とが指定されたＳｅｔ  Ｆｅａｔｕｒｅｓコマンドに応じて、ＳＳＤ３はキー値を生成し、ＨＭＢ機能を有効化する。なお、ＳＳＤ３がＭＲ機能を有していない場合には、ＭＲ機能に関するパラメータを含まないＳｅｔ  Ｆｅａｔｕｒｅｓコマンドに応じて、ＳＳＤ３は、キー値を生成し、ＨＭＢ機能を有効化する上述の処理シーケンスを行ってもよい。
【０１１６】
一方、図１３はＳｅｔ  ＦｅａｔｕｒｅｓコマンドにＭＲ機能の有効を示す値が含まれる場合の例を示す。
【０１１７】
ホスト２は、ＨＭＢ機能の有効化を示す値とＭＲ機能の有効を示す値とを含むＳｅｔ  ＦｅａｔｕｒｅｓコマンドをＳＳＤ３に送信する（Ｂ１）。
【０１１８】
ＳＳＤ３のホストインタフェース１１は、Ｓｅｔ  Ｆｅａｔｕｒｅｓコマンドに応じてＨＭＢ機能を有効化するリクエストをＣＰＵ１２に送出する（Ｂ２）。リクエストにはＭＲ機能の有効が示されている。
【０１１９】
ＣＰＵ１２は、ＭＲ機能の有効が示されたリクエストに応じてＨＭＢ機能を有効化する（Ｂ３）。ＣＰＵ１２は、ＭＲ機能の有効が示されたリクエストを受けた場合にはキー値を生成せず、したがって、ホストインタフェース１１内のパリティジェネレータ１１２およびパリティチェッカ１１３は保存されているキー値を更新しない。ＣＰＵ１２はＨＭＢ機能の有効化が完了したことをホストインタフェース１１に通知する（Ｂ４）。
【０１２０】
ホストインタフェース１１は、この通知に応じて、ホスト２にＳｅｔ  Ｆｅａｔｕｒｅｓコマンドに基づく処理の完了を通知してもよい（Ｂ５）。
【０１２１】
以上のように、ＳＳＤ３は、ＨＭＢ機能の有効化とＭＲ機能の有効とが指定されたＳｅｔ  Ｆｅａｔｕｒｅｓコマンドに応じて、キー値を生成することなくＨＭＢ機能を有効化する。
【０１２２】
図１４のフローチャートを参照して、コントローラ４によって実行されるＨＭＢ有効化処理の手順の例を説明する。ここでは、ＨＭＢ有効化処理が開始される時点において、ＳＳＤ３のＨＭＢ機能が無効化されていることを前提とする。
【０１２３】
まず、コントローラ４は、ホスト２からＨＭＢ機能の有効化が要求されたか否かを判定する（ステップＳ１１）。ＨＭＢ機能の有効化が要求されていない場合（ステップＳ１１のＮＯ）、ステップＳ１１に戻り、ＨＭＢ機能の有効化が要求されたか否かが再度判定される。
【０１２４】
ＨＭＢ機能の有効化が要求された場合（ステップＳ１１のＹＥＳ）、コントローラ４は、当該要求においてＭＲ機能の有効と無効のいずれが指定されているかを判定する（ステップＳ１２）。ＭＲ機能の有効が指定されている場合（ステップＳ１２の有効）、コントローラ４はＨＭＢ機能を有効化し（ステップＳ１６）、処理を終了する。
【０１２５】
一方、ＭＲ機能の無効が指定されている場合（ステップＳ１２の無効）、コントローラ４は、ＨＭＢ２２１を管理するためのＨＭＢ領域管理情報を初期化し（ステップＳ１３）、キー値を生成する（ステップＳ１４）。キー値は、ＨＭＢ２２１にキャッシュされるデータにパリティを付加するために用いられる。そして、コントローラ４は、パリティジェネレータ１１２に保存されているキー値を、生成されたキー値で更新し（ステップＳ１５）、パリティチェッカ１１３に保存されているキー値を、生成されたキー値で更新する（ステップＳ１６）。そして、コントローラ４はＨＭＢ機能を有効化し（ステップＳ１７）、処理を終了する。
【０１２６】
以上の処理により、コントローラ４は、ホスト２による要求に応じてＨＭＢ機能を有効化できる。その際、ＭＲ機能の無効が指定されている場合には、コントローラ４はＨＭＢ機能が有効化される毎に、ＨＭＢ領域管理情報を初期化し、且つ新たなキー値を生成する。したがって、コントローラ４は、初期化された状態のＨＭＢ２２１にキャッシュすべきデータに対して、新たなキー値を用いてパリティを付加できる。
【０１２７】
また、ＭＲ機能の有効が指定される場合には、コントローラ４は、ＨＭＢ領域管理情報を初期化することなく、且つ新たなキー値を生成することなく、ＨＭＢ機能を有効化できる。パリティジェネレータ１１２およびパリティチェッカ１１３に保存されているキー値が更新されないので、コントローラ４は、このＨＭＢ有効化処理が開始される前に使用されていたＨＭＢ２２１内のデータを継続して使用できる。
【０１２８】
なお、ＭＲ機能の有効／無効が指定されない場合には、ステップＳ１２が省略され、コントローラ４は、ステップＳ１３、ステップＳ１４、ステップＳ１５、ステップＳ１６、ステップＳ１７を順に実行し、処理を終了する。
【０１２９】
図１５のフローチャートを参照して、コントローラ４によって実行されるキャッシュ制御処理の手順の例を説明する。ここでは、図１４を参照して上述したＨＭＢ有効化処理によってＨＭＢ機能が既に有効化されていることを前提とする。
【０１３０】
まず、コントローラ４はＨＭＢ２２１にキャッシュすべきデータがあるか否かを判定する（ステップＳ２１）。キャッシュすべきデータは、パリティによって保護されるべき保護データである。コントローラ４は、ＨＭＢ２２１にキャッシュすべきデータが無い場合（ステップＳ２１のＮＯ）、ステップＳ２１に戻り、ＨＭＢ２２１にキャッシュすべきデータがあるか否かを再度判定する。つまり、ステップＳ２１に戻ることにより、コントローラ４は、キャッシュすべきデータが無い状態となった後に、新たに、キャッシュすべきデータが発生したか否かを判定する。
【０１３１】
ＨＭＢ２２１にキャッシュすべきデータがある場合（ステップＳ２１のＹＥＳ）、コントローラ４は、ＨＭＢ２２１内に、データをキャッシュするための空き領域があるか否かを判定する（ステップＳ２２）。コントローラ４は、空き領域の有無の判定に、例えばＨＭＢ領域管理情報を用いる。空き領域がない場合（ステップＳ２２のＮＯ）、コントローラ４は、特定の規則に従って、ＨＭＢ２２１内に空き領域を作成する（ステップＳ２３）。この特定の規則は、例えばｌｅａｓｔ  ｒｅｃｅｎｔｌｙ  ｕｓｅｄ（ＬＲＵ）方式である。コントローラ４はＬＲＵ方式に従う場合、最後にアクセスされてからの経過時間が最も長いデータを追い出し対象として選択する。空き領域がある場合には（ステップＳ２２のＹＥＳ）、コントローラ４はステップＳ２３をスキップする。
【０１３２】
次いで、コントローラ４は、キー値６４を用いて、キャッシュすべきデータに付加されるパリティを生成する（ステップＳ２４）。そして、コントローラ４は、パリティが付加されたデータをＨＭＢ２２１内の空き領域にキャッシュし（ステップＳ２５）、ＨＭＢ領域管理情報を更新し、処理を終了する。
【０１３３】
以上により、コントローラ４は、パリティが付加されたデータをＨＭＢ２２１にキャッシュできる。
【０１３４】
また図１６および図１７のフローチャートを参照して、キャッシュ制御処理の手順の別の例を示す。このキャッシュ制御処理は、ＮＡＮＤ型フラッシュメモリ５から読み出されたデータを、内部ＲＡＭ１４とホストＲＡＭ２２内のＨＭＢ２２１のいずれにキャッシュするかを選択するためのＨＭＢキャッシュ可否判定の手順をさらに含んでいる。
【０１３５】
図１６に示すように、コントローラ４は、ＮＡＮＤ型フラッシュメモリ５からデータが読み出されたか否かを判定する（ステップＳ３０１）。読み出されるデータは、ホスト２からのリードコマンドで指定されたＬＢＡに対応するユーザデータ、ＧＣソースブロック内の有効データ（すなわちユーザデータ）、各種のシステムデータ等である。ＮＡＮＤ型フラッシュメモリ５からデータが読み出されていない場合（ステップＳ３０１のＮＯ）、ステップＳ３０１に戻り、ＮＡＮＤ型フラッシュメモリ５からデータが読み出されたか否かが再度判定される。
【０１３６】
ＮＡＮＤ型フラッシュメモリ５からデータが読み出された場合（ステップＳ３０１のＹＥＳ）、コントローラ４はＨＭＢ機能が有効化されている状態であるか否かを判定する（ステップＳ３０２）。ＨＭＢ機能が有効化されている状態である場合（ステップＳ３０２のＹＥＳ）、コントローラ４は、読み出されたデータ（以下、リードデータとも称する）がＨＭＢ２２１にキャッシュ可能なデータであるか否かを判定するＨＭＢキャッシュ可否判定処理を行う（ステップＳ３０３）。ＨＭＢキャッシュ可否判定処理の具体的な手順については、図１７のフローチャートを参照して後述する。
【０１３７】
ＨＭＢキャッシュ可否判定処理の結果に基づいて、リードデータがＨＭＢ２２１にキャッシュ可能である場合（ステップＳ３０４のＹＥＳ）に行われるステップＳ３０５からステップＳ３０８までの手順は、図１５のフローチャートを参照して上述したステップＳ２２からステップＳ２５までの手順と同様である。
【０１３８】
一方、ＨＭＢ機能が有効化されていない場合（ステップＳ３０２のＮＯ）、またはリードデータがＨＭＢ２２１にキャッシュ可能なデータではない場合（ステップＳ３０４のＮＯ）、コントローラ４は、内部ＲＡＭ１４内にリードデータをキャッシュするための空き領域があるか否かを判定する（ステップＳ３０９）。空き領域がない場合（ステップＳ３０９のＮＯ）、コントローラ４は、特定の規則（例えばＬＲＵ方式）に従って、内部ＲＡＭ１４内に空き領域を作成する（ステップＳ３１０）。そして、コントローラ４はリードデータを内部ＲＡＭ１４内の空き領域にキャッシュし（ステップＳ３１１）、処理を終了する。
【０１３９】
以上により、コントローラ４は、ＨＭＢ２２１にキャッシュ可能なリードデータがＨＭＢ２２１にキャッシュされ、ＨＭＢ２２１にキャッシュ不可能なリードデータが内部ＲＡＭ１４にキャッシュされるように制御できる。
【０１４０】
図１７のフローチャートは、コントローラ４によって実行されるＨＭＢキャッシュ可否判定処理の手順の一例を示す。ＨＭＢキャッシュ可否判定処理は、図１６のフローチャートを参照して上述したステップＳ３０３に相当する。ここでは、図６に示したＨＭＢキャッシュ可否の判定条件に基づくＨＭＢキャッシュ可否判定処理を例示する。
【０１４１】
まず、コントローラ４は、ＮＡＮＤ型フラッシュメモリ５から読み出されたデータ（リードデータ）の種別が、ユーザデータとＳＳＤ３のシステムデータのいずれであるかを判別する（ステップＳ４１）。リードデータがユーザデータである場合（ステップＳ４１のユーザデータ）、コントローラ４は、リードデータが暗号化されているか否かを判定する（ステップＳ４２）。
【０１４２】
リードデータが暗号化されている場合（ステップＳ４２のＹＥＳ）、コントローラ４は、リードデータをＨＭＢ２２１にキャッシュ可能なデータであると判断し（ステップＳ４３）、処理を終了する。一方、リードデータが暗号化されていない場合（ステップＳ４２のＮＯ）、コントローラ４は、リードデータをＨＭＢ２２１にキャッシュ不可能なデータであると判断し（ステップＳ４５）、処理を終了する。
【０１４３】
また、リードデータがＳＳＤ３のシステムデータである場合（ステップＳ４１のＳＳＤのシステムデータ）、コントローラ４は、リードデータがセキュリティ上の優先順位が高いデータであるか否かを判定する（ステップＳ４４）。セキュリティ上の優先順位が高いデータは、例えばセキュリティキーやＦＷである。また、セキュリティ上の優先順位が低いデータは、例えば論理物理アドレス変換テーブルや内部ログである。
【０１４４】
リードデータがセキュリティ上の優先順位が低いデータである場合（ステップＳ４４のＮＯ）、コントローラ４は、リードデータをＨＭＢ２２１にキャッシュ可能なデータであると判断し（ステップＳ４３）、処理を終了する。一方、リードデータがセキュリティ上の優先順位が高いデータである場合（ステップＳ４４のＹＥＳ）、コントローラ４は、リードデータをＨＭＢ２２１にキャッシュ不可能なデータであると判断し（ステップＳ４５）、処理を終了する。
【０１４５】
以上により、コントローラ４は、リードデータがＨＭＢ２２１にキャッシュ可能なデータであるか否かを判別できる。
【０１４６】
図１８のフローチャートは、コントローラ４によって実行されるパリティ検証処理の手順の例を示す。
【０１４７】
まず、コントローラ４は、ＨＭＢ２２１から保護データおよびパリティが読み出されたか否かを判定する（ステップＳ５１）。コントローラ４は、例えばＨＭＢ２２１からストレージインタフェース２３を介してホストインタフェース１１に保護データおよびパリティが転送された場合に、ＨＭＢ２２１から保護データおよびパリティが読み出されたと判断する。ＨＭＢ２２１から保護データおよびパリティが読み出されていない場合（ステップＳ５１のＮＯ）、ステップＳ５１に戻り、ＨＭＢ２２１から保護データおよびパリティが読み出されたか否かが再度判定される。
【０１４８】
ＨＭＢ２２１から保護データおよびパリティが読み出された場合（ステップＳ５１のＹＥＳ）、コントローラ４は、パリティチェッカ１１３に保存されているキー値と、読み出されたパリティとを用いて、読み出された保護データにエラーが発生しているか否かを検証する（ステップＳ５２）。保護データにエラーが発生しているか否かの検証方法については、図１１を参照して上述した通りである。
【０１４９】
この検証結果に基づいて、保護データにエラーが発生していない場合（ステップＳ５３のＮＯ）、コントローラ４は、保護データを、ホストインタフェース１１を介してコントローラ４内の各部（例えばＣＰＵ１２）に送出する（ステップＳ５４）。コントローラ４内の各部は、送出された保護データを用いた各種の処理を実行する。
【０１５０】
一方、保護データにエラーが発生している場合（ステップＳ５３のＹＥＳ）、コントローラ４は、コントローラ４内の各部にエラーを通知する（ステップＳ５５）。コントローラ４はこの保護データを破棄する。また、コントローラ４は、この通知に応じて、例えばエラーが発生している保護データに対応するデータをＮＡＮＤ型フラッシュメモリ５から再度読み出し、ＨＭＢ２２１または内部ＲＡＭ１４内にキャッシュしてもよい。
【０１５１】
以上により、コントローラ４は、ＨＭＢ２２１に格納されている保護データを、キー値と、保護データに付加されたパリティとを用いて検証できる。
【０１５２】
以上説明したように、本実施形態によれば、ＨＭＢが用いられる際のセキュリティを強化できる。ＳＳＤ３のコントローラ４は、ホスト２に設けられたホストＲＡＭ２２の第１領域をＮＡＮＤ型フラッシュメモリ５に格納されるデータの一時記憶用メモリとして使用でき、ＮＡＮＤ型フラッシュメモリ５を制御する。コントローラ４は、ＮＡＮＤ型フラッシュメモリ５に格納された第１データとキー値とを使用して第１パリティを生成し、第１データと生成された第１パリティとを第１領域へ格納する。コントローラ４は、第１領域に格納された第１データを読み出す場合に、第１データと第１パリティとを読み出して、読み出した第１パリティとキー値とを使用して読み出した第１データを検証する。
【０１５３】
以上により、コントローラ４は、ホストＲＡＭ２２内の第１領域に格納する第１データに、キー値を用いてパリティを付加する。そのため、第１領域（すなわちＨＭＢ）に格納した第１データに破損や改竄等が生じた場合に、コントローラ４は、第１データにエラーが発生したことを、キー値および第１パリティを用いて検出できる。したがって、このような構成を有するコントローラ４は、ＨＭＢが用いられる際のＳＳＤ３のセキュリティを強化できる。
【０１５４】
本実施形態に記載された様々な機能の各々は、回路（処理回路）によって実現されてもよい。処理回路の例には、中央処理装置（ＣＰＵ）のような、プログラムされたプロセッサが含まれる。このプロセッサは、メモリに格納されたコンピュータプログラム（命令群）を実行することによって、記載された機能それぞれを実行する。このプロセッサは、電気回路を含むマイクロプロセッサであってもよい。処理回路の例には、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、マイクロコントローラ、コントローラ、他の電気回路部品も含まれる。本実施形態に記載されたＣＰＵ以外の他のコンポーネントの各々もまた処理回路によって実現されてもよい。
【０１５５】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１５６】
１…情報処理システム、２…ホスト、３…ＳＳＤ、４…コントローラ、５…ＮＡＮＤ型フラッシュメモリ、１１…ホストインタフェース、１２…ＣＰＵ、１３…ＮＡＮＤインタフェース、１４…内部ＲＡＭ、１５…エンコーダ／デコーダ、１６…周辺回路群、１１１…インタフェース処理部、１１２…パリティジェネレータ、１１３…パリティチェッカ、１２１…リード制御部、１２２…ライト制御部、１２３…ＧＣ制御部、１２４…ＨＭＢ機能制御部、１２５…キー生成部、１２６…キャッシュ先判定部、２１…ＣＰＵ、２２…ホストＲＡＭ、２３…ストレージインタフェース、２２１…ホストメモリバッファ。
【図１】
2020149222.tif 000003
【図２】
2020149222.tif 000004
【図３】
2020149222.tif 000005
【図４】
2020149222.tif 000006
【図５】
2020149222.tif 000007
【図６】
2020149222.tif 000008
【図７】
2020149222.tif 000009
【図８】
2020149222.tif 000010
【図９】
2020149222.tif 000011
【図１０】
2020149222.tif 000012
【図１１】
2020149222.tif 000013
【図１２】
2020149222.tif 000014
【図１３】
2020149222.tif 000015
【図１４】
2020149222.tif 000016
【図１５】
2020149222.tif 000017
【図１６】
2020149222.tif 000018
【図１７】
2020149222.tif 000019
【図１８】
2020149222.tif 000020