(57)【要約】【課題】ホストコンピュータのメモリ上に確保された、メモリコントローラが使用するメモリ拡張領域の安全性を確保する。【解決手段】メモリコントローラは、記憶装置においてメモリを制御する。メモリコントローラにおいて、コントローラメモリはメモリに割り当てられた領域に対応するデータを記憶する。コントローラ処理部は、コントローラメモリの一部の領域をホストコンピュータにおけるホストメモリに割り当ててメモリ拡張領域として使用する。インテグリティ処理部は、メモリ拡張領域にデータを記憶する際に誤り検出符号を生成し、メモリ拡張領域からデータを読み出す際に誤り検出符号に基づいて誤りを検出する。【選択図】図１
2016118945.tif 000002
【特許請求の範囲】
【請求項１】
メモリに割り当てられた領域に対応するデータを、前記メモリを制御するメモリコントローラにおいて記憶するコントローラメモリと、
前記コントローラメモリの一部の領域をホストコンピュータにおけるホストメモリに割り当ててメモリ拡張領域として使用するコントローラ処理部と、
前記メモリ拡張領域にデータを記憶するために誤り検出符号を生成し、前記メモリ拡張領域から読み出したデータについて前記誤り検出符号に基づいて誤りを検出するインテグリティ処理部と
を具備するメモリコントローラ。
【請求項２】
前記インテグリティ処理部は、前記誤りを検出した場合には前記メモリに記憶されるデータから前記コントローラメモリ上において対応するデータを再構築する請求項１記載のメモリコントローラ。
【請求項３】
前記コントローラ処理部は、前記メモリに割り当てられた領域に対応するデータとして最も新しいデータが記憶されている位置情報を管理して、前記コントローラメモリ上のデータを削除して空き領域を確保する際に、その削除対象データに対応するデータが前記メモリ拡張領域に存在して、前記コントローラメモリ上のデータが最も新しいデータである旨を前記位置情報が示す場合には、前記コントローラメモリから前記メモリ拡張領域にデータを転送する請求項１記載のメモリコントローラ。
【請求項４】
前記コントローラ処理部は、前記メモリに割り当てられた領域に対応するデータとして最も新しいデータが記憶されている位置情報を管理して、前記コントローラメモリ上のデータを削除して空き領域を確保する際に、その削除対象データに対応するデータが前記メモリ拡張領域に存在せず、前記コントローラメモリ上のデータが最も新しいデータである旨を前記位置情報が示す場合には、前記コントローラメモリから前記メモリにデータを転送する請求項１記載のメモリコントローラ。
【請求項５】
前記コントローラ処理部は、前記メモリに割り当てられた領域に対応するデータとして最も新しいデータが記憶されている位置情報を管理するとともに、前記メモリに割り当てられた領域に対応するデータについて部分領域毎の使用頻度を管理して、前記コントローラメモリ上のデータを削除して空き領域を確保する際に、その削除対象データに対応するデータを記憶する前記メモリ拡張領域が前記コントローラメモリよりも使用頻度の低い部分領域である旨を前記使用頻度が示し、かつ、前記メモリ拡張領域上のデータが最も新しいデータである旨を前記位置情報が示す場合には、前記メモリ拡張領域から前記メモリにデータを転送する請求項１記載のメモリコントローラ。
【請求項６】
メモリと、
前記メモリに割り当てられた領域に対応するデータを、前記メモリを制御するメモリコントローラにおいて記憶するコントローラメモリと、
前記コントローラメモリの一部の領域をホストコンピュータにおけるホストメモリに割り当ててメモリ拡張領域として使用するコントローラ処理部と、
前記メモリ拡張領域にデータを記憶するために誤り検出符号を生成し、前記メモリ拡張領域から読み出したデータについて前記誤り検出符号に基づいて誤りを検出するインテグリティ処理部と
を具備する記憶装置。
【請求項７】
メモリと、
前記メモリに割り当てられた領域に対応するデータを、前記メモリを制御するメモリコントローラにおいて記憶するコントローラメモリと、
前記メモリに対するコマンドを発行するホストコンピュータと、
前記コントローラメモリの一部の領域を前記ホストコンピュータにおけるホストメモリに割り当ててメモリ拡張領域として使用するコントローラ処理部と、
前記メモリ拡張領域にデータを記憶するために誤り検出符号を生成し、前記メモリ拡張領域から読み出したデータについて前記誤り検出符号に基づいて誤りを検出するインテグリティ処理部と
を具備する情報処理システム。
【請求項８】
前記ホストコンピュータは、前記メモリコントローラから前記メモリ拡張領域の容量に関する情報を取得するコマンドを前記メモリコントローラに発行する請求項７記載の情報処理システム。
【請求項９】
前記ホストコンピュータは、前記メモリ拡張領域に記憶されるデータを前記メモリに記憶させるコマンドを前記メモリコントローラに発行する請求項７記載の情報処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、記憶装置を制御するメモリコントローラに関する。詳しくは、ホストコンピュータのメモリ上にデータを記憶するメモリコントローラ、記憶装置、および、情報処理システム、および、これらにおける処理方法ならびに当該方法をコンピュータに実行させるプログラムに関する。
【背景技術】
【０００２】
ホストコンピュータと記憶装置からなる情報処理システムにおいて、記憶装置のメモリコントローラが使用する領域をホストコンピュータのメモリ上に確保して、その領域にデータを記憶する技術が知られている。例えば、ホストのメインメモリにアドレス変換テーブルのコピーを格納するための領域を確保して使用することにより、コントローラ側のバッファの容量を低減する半導体記憶装置が提案されている（例えば、特許文献１参照。）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１３−０３３３３７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上述の従来技術では、メモリコントローラが使用する領域をホストコンピュータのメモリ上に確保してデータを記憶することができる（以下、この領域を「メモリ拡張領域」と称する。）。しかし、このメモリ拡張領域に対して、ホストコンピュータのエラーによる誤動作や不正な書換え等の要因によって、メモリコントローラが意図しない変更が加えられるおそれがある。特に、記憶装置のメモリに記憶したデータの管理情報について、メモリコントローラが意図しない変更が加えられていると、正しい書込みおよび読出しが行われず、データの破壊につながるおそれがある。
【０００５】
本技術はこのような状況に鑑みて生み出されたものであり、ホストコンピュータのメモリ上に確保された、メモリコントローラが使用するメモリ拡張領域の安全性を確保することを目的とする。
【課題を解決するための手段】
【０００６】
本技術は、上述の問題点を解消するためになされたものであり、その第１の側面は、メモリに割り当てられた領域に対応するデータを、上記メモリを制御するメモリコントローラにおいて記憶するコントローラメモリと、上記コントローラメモリの一部の領域をホストコンピュータにおけるホストメモリに割り当ててメモリ拡張領域として使用するコントローラ処理部と、上記メモリ拡張領域にデータを記憶するために誤り検出符号を生成し、上記メモリ拡張領域から読み出したデータについて上記誤り検出符号に基づいて誤りを検出するインテグリティ処理部とを具備するメモリコントローラである。これにより、ホストメモリ上に確保された、メモリコントローラが使用するメモリ拡張領域について、誤り検出符号を利用してその安全性を確保するという作用をもたらす。
【０００７】
また、この第１の側面において、上記インテグリティ処理部は、上記誤りを検出した場合には上記メモリに記憶されるデータから上記コントローラメモリ上において対応するデータを再構築するようにしてもよい。これにより、再構築処理によってメモリ拡張領域の安全性を確保するという作用をもたらす。
【０００８】
また、この第１の側面において、上記コントローラ処理部は、上記メモリに割り当てられた領域に対応するデータとして最も新しいデータが記憶されている位置情報を管理して、上記コントローラメモリ上のデータを削除して空き領域を確保する際に、その削除対象データに対応するデータが上記メモリ拡張領域に存在して、上記コントローラメモリ上のデータが最も新しいデータである旨を上記位置情報が示す場合には、上記コントローラメモリから上記メモリ拡張領域にデータを転送するようにしてもよい。これにより、コントローラメモリ上のデータを削除して空き領域を確保する際に、最新データをメモリ拡張領域に反映するという作用をもたらす。
【０００９】
また、この第１の側面において、上記コントローラ処理部は、上記メモリに割り当てられた領域に対応するデータとして最も新しいデータが記憶されている位置情報を管理して、上記コントローラメモリ上のデータを削除して空き領域を確保する際に、その削除対象データに対応するデータが上記メモリ拡張領域に存在せず、上記コントローラメモリ上のデータが最も新しいデータである旨を上記位置情報が示す場合には、上記コントローラメモリから上記メモリにデータを転送するようにしてもよい。これにより、コントローラメモリ上のデータを削除して空き領域を確保する際に、最新データをメモリに反映するという作用をもたらす。
【００１０】
また、この第１の側面において、上記コントローラ処理部は、上記メモリに割り当てられた領域に対応するデータとして最も新しいデータが記憶されている位置情報を管理するとともに、上記メモリに割り当てられた領域に対応するデータについて部分領域毎の使用頻度を管理して、上記コントローラメモリ上のデータを削除して空き領域を確保する際に、その削除対象データに対応するデータを記憶する上記メモリ拡張領域が上記コントローラメモリよりも使用頻度の低い部分領域である旨を上記使用頻度が示し、かつ、上記メモリ拡張領域上のデータが最も新しいデータである旨を上記位置情報が示す場合には、上記メモリ拡張領域から上記メモリにデータを転送するようにしてもよい。これにより、コントローラメモリよりも使用頻度の低いメモリ拡張領域に記憶される最新データをメモリに反映させるという作用をもたらす。
【００１１】
また、本技術の第２の側面は、メモリと、上記メモリに割り当てられた領域に対応するデータを、上記メモリを制御するメモリコントローラにおいて記憶するコントローラメモリと、上記コントローラメモリの一部の領域をホストコンピュータにおけるホストメモリに割り当ててメモリ拡張領域として使用するコントローラ処理部と、上記メモリ拡張領域にデータを記憶するために誤り検出符号を生成し、上記メモリ拡張領域から読み出したデータについて上記誤り検出符号に基づいて誤りを検出するインテグリティ処理部とを具備する記憶装置である。これにより、ホストメモリ上に確保された、メモリコントローラが使用するメモリ拡張領域について、記憶装置において誤り検出符号を利用してその安全性を確保するという作用をもたらす。
【００１２】
また、本技術の第３の側面は、メモリと、上記メモリに割り当てられた領域に対応するデータを、上記メモリを制御するメモリコントローラにおいて記憶するコントローラメモリと、上記メモリに対するコマンドを発行するホストコンピュータと、上記コントローラメモリの一部の領域を上記ホストコンピュータにおけるホストメモリに割り当ててメモリ拡張領域として使用するコントローラ処理部と、上記メモリ拡張領域にデータを記憶するために誤り検出符号を生成し、上記メモリ拡張領域から読み出したデータについて上記誤り検出符号に基づいて誤りを検出するインテグリティ処理部とを具備する情報処理システムである。これにより、ホストメモリ上に確保された、メモリコントローラが使用するメモリ拡張領域について、情報処理システムにおいて誤り検出符号を利用してその安全性を確保するという作用をもたらす。
【００１３】
また、この第３の側面において、上記ホストコンピュータは、上記メモリコントローラから上記メモリ拡張領域の容量に関する情報を取得するコマンドを上記メモリコントローラに発行するようにしてもよい。
【００１４】
また、この第３の側面において、上記ホストコンピュータは、上記メモリ拡張領域に記憶されるデータを上記メモリに記憶させるコマンドを上記メモリコントローラに発行するようにしてもよい。
【発明の効果】
【００１５】
本技術によれば、ホストコンピュータのメモリ上に確保された、メモリコントローラが使用するメモリ拡張領域の安全性を確保することができるという優れた効果を奏し得る。なお、ここに記載された効果は必ずしも限定されるものではなく、本開示中に記載されたいずれかの効果であってもよい。
【図面の簡単な説明】
【００１６】
【図１】本技術の実施の形態における情報処理システムの全体構成例を示す図である。
【図２】本技術の実施の形態におけるホストコンピュータ１００の構成例を示す図である。
【図３】本技術の実施の形態におけるホストコンピュータ１００上で動作するソフトウェアの階層構造の一例を示す図である。
【図４】本技術の第１の実施の形態におけるメモリコントローラ２００の構成例を示す図である。
【図５】本技術の実施の形態におけるメモリ３００の構成例を示す図である。
【図６】本技術の実施の形態におけるメモリ階層の概要を示す図である。
【図７】本技術の実施の形態におけるメモリセルアレイ３１０の記憶領域の一例を示す図である。
【図８】本技術の実施の形態におけるメモリセルアレイ３１０のページ構成の一例を示す図である。
【図９】本技術の実施の形態におけるアドレス変換テーブル３１１の構成の一例を示す図である。
【図１０】本技術の実施の形態におけるコントローラメモリ２２０に保持されるテーブル群の一例を示す図である。
【図１１】本技術の実施の形態におけるメモリ拡張領域管理テーブル２２１のフィールド構成例を示す図である。
【図１２】本技術の実施の形態におけるアドレス変換テーブルブロック位置情報２２２のフィールド構成例を示す図である。
【図１３】本技術の実施の形態におけるアクセス頻度情報テーブル２２３のフィールド構成例を示す図である。
【図１４】本技術の実施の形態における未割当メモリ拡張領域管理テーブル２２７のフィールド構成例を示す図である。
【図１５】本技術の実施の形態における情報処理システムの初期化処理の一例を示すシーケンス図である。
【図１６】本技術の実施の形態におけるホストコンピュータ１００のデバイスドライバ１０３による初期化処理の手順例を示す流れ図である。
【図１７】本技術の実施の形態におけるメモリコントローラ２００のメモリ拡張領域管理タスクによるパラメータ設定処理の手順例を示す流れ図である。
【図１８】本技術の実施の形態におけるメモリコントローラ２００のメモリ拡張領域管理タスクによる領域取得通知受信処理の手順例を示す流れ図である。
【図１９】本技術の実施の形態におけるメモリコントローラ２００のメモリ拡張領域管理タスクによるメモリ３００からメモリ拡張領域１２１へのデータ転送処理の手順例を示す流れ図である。
【図２０】本技術の実施の形態におけるメモリコントローラ２００のコマンド実行タスクによるリードコマンド処理の手順例を示す流れ図である。
【図２１】本技術の第１の実施の形態におけるメモリコントローラ２００のメモリ拡張領域管理タスクによるアドレス変換テーブルブロック入替え処理（ステップＳ９６０、Ｓ８２０）の手順例を示す流れ図である。
【図２２】本技術の実施の形態におけるメモリコントローラ２００のメモリ拡張領域管理タスクによるアドレス変換テーブルブロックのデータの再構築処理（ステップＳ９６８、Ｓ９７５）の手順例を示す流れ図である。
【図２３】本技術の実施の形態におけるメモリコントローラ２００のコマンド実行タスクによるライトコマンド処理の手順例を示す流れ図である。
【図２４】本技術の第１の実施の形態におけるメモリコントローラ２００のメモリ拡張領域管理タスクによるフラッシュコマンド処理の手順例を示す流れ図である。
【図２５】本技術の第２の実施の形態におけるメモリコントローラ２００の構成例を示す図である。
【図２６】本技術の第２の実施の形態におけるメモリコントローラ２００のメモリ拡張領域管理タスクによるアドレス変換テーブルブロック入替え処理の手順例を示す流れ図である。
【図２７】本技術の第２の実施の形態におけるメモリコントローラ２００のメモリ拡張領域管理タスクによる誤り訂正または再構築処理（ステップＳ８６８、Ｓ８７５）の手順例を示す流れ図である。
【図２８】本技術の第２の実施の形態におけるメモリコントローラ２００のメモリ拡張領域管理タスクによるフラッシュコマンド処理の手順例を示す流れ図である。
【図２９】本技術の第３の実施の形態におけるアドレス変換テーブル３１１の構成の一例を示す図である。
【図３０】本技術の第３の実施の形態におけるメモリ拡張領域管理テーブル２２１のフィールド構成例を示す図である。
【図３１】本技術の第３の実施の形態におけるアドレス変換テーブルブロック位置情報２２２のフィールド構成例を示す図である。
【図３２】本技術の第４の実施の形態におけるメモリ拡張領域インデックス番号管理テーブル２２８のフィールド構成例を示す図である。
【図３３】本技術の第４の実施の形態におけるメモリ拡張領域管理テーブル１２２のフィールド構成例を示す図である。
【図３４】本技術の第４の実施の形態におけるホストコンピュータ１００のデバイスドライバ１０３による初期化処理の手順例を示す流れ図である。
【図３５】本技術の第４の実施の形態におけるメモリコントローラ２００のメモリ拡張領域管理タスクによる領域取得通知受信処理の手順例を示す流れ図である。
【図３６】本技術の第４の実施の形態におけるメモリコントローラ２００のメモリ拡張領域管理タスクによるメモリ３００からメモリ拡張領域１２１へのデータ転送処理の手順例を示す流れ図である。
【図３７】本技術の第４の実施の形態におけるメモリコントローラ２００のメモリ拡張領域管理タスクによるメモリ３００からホストメモリ１２０へのデータ転送処理（ステップＳ７５０）の手順例を示す流れ図である。
【図３８】本技術の第４の実施の形態におけるメモリコントローラ２００のメモリ拡張領域管理タスクによるリードコマンド処理のアドレス変換テーブルブロック入替え処理（ステップＳ９６０）の手順例を示す流れ図である。
【図３９】本技術の第４の実施の形態におけるメモリコントローラ２００のメモリ拡張領域管理タスクによるコントローラメモリ２２０からホストメモリ１２０へのデータ転送処理（ステップＳ７６３、Ｓ７７８）の手順例を示す流れ図である。
【発明を実施するための形態】
【００１７】
以下、本技術を実施するための形態（以下、実施の形態と称する）について説明する。説明は以下の順序により行う。
１．第１の実施の形態（誤り検出符号としてＣＲＣを使用する例）
２．第２の実施の形態（誤り検出符号としてＥＣＣを使用する例）
３．第３の実施の形態（誤り検出符号をホストメモリに記憶する例）
４．第４の実施の形態（ホストコンピュータがインテグリティをチェックする例）
【００１８】
＜１．第１の実施の形態＞
［情報処理システムの構成］
図１は、本技術の実施の形態における情報処理システムの全体構成例を示す図である。この情報処理システムは、ホストコンピュータ１００と、メモリコントローラ２００と、メモリ３００とから構成される。メモリコントローラ２００およびメモリ３００は記憶装置４００を構成する。
【００１９】
ホストコンピュータ１００は、メモリ３００に対してデータのリード処理、ライト処理またはリフレッシュ処理等を要求するコマンドを発行するものである。
【００２０】
メモリコントローラ２００は、ホストコンピュータ１００と通信してコマンドを受信し、メモリ３００へのデータ書込みおよびメモリ３００からのデータ読出しを実行するものである。メモリコントローラ２００は、ライトコマンドを受信した場合、ホストコンピュータ１００から受信したデータを、メモリ３００に書き込むよう指示する。また、メモリコントローラ２００は、リードコマンドを受信した場合、メモリ３００からデータを読み出してホストコンピュータ１００に転送する。また、メモリコントローラ２００は、リフレッシュコマンドを受信した場合、メモリ３００からデータを読み出して、その読み出したデータを再びメモリ３００に書き直すよう指示する。
【００２１】
図２は、本技術の実施の形態におけるホストコンピュータ１００の構成例を示す図である。このホストコンピュータ１００は、ホスト処理部１１０と、ホストメモリ１２０と、コントローラインターフェース１７０とを備える。これらはホストバス１９０によって相互に接続される。
【００２２】
ホスト処理部１１０は、ホストコンピュータ１００全体の制御を行うものである。このホスト処理部１１０は、ホストメモリ１２０に格納されたソフトウェアを実行する。このホスト処理部１１０は、ホストメモリ１２０をコード領域およびデータ領域として使用して動作する。
【００２３】
ホストメモリ１２０は、ホスト処理部１１０が実行するソフトウェアのコード領域およびデータ領域を記憶するメモリである。また、このホストメモリ１２０には、メモリコントローラ２００の起動時に、メモリコントローラ２００が使用可能な領域として、メモリ拡張領域１２１が確保される。
【００２４】
コントローラインターフェース１７０は、メモリコントローラ２００との間のやりとりを行うインターフェースである。コントローラインターフェース１７０は、メモリコントローラ２００と接続され、メモリコントローラ２００に対するコマンドの送信、および、メモリコントローラ２００とのデータの受送信を実行するものである。
【００２５】
図３は、本技術の実施の形態におけるホストコンピュータ１００上で動作するソフトウェアの階層構造の一例を示す図である。ここでは、ソフトウェアの上位階層からアプリケーションプログラム１０１、ホストＯＳ１０２、および、デバイスドライバ１０３を想定する。
【００２６】
アプリケーションプログラム１０１は、最上位階層のソフトウェアである。このアプリケーションプログラム１０１は、ホストＯＳ１０２に対して、メモリ３００からのデータ読出し、または、メモリ３００からのデータ書込みを指示し、ホストＯＳ１０２からの応答を受け取る。
【００２７】
ホストＯＳ１０２は、アプリケーションプログラム１０１とデバイスドライバ１０３との間の橋渡しを行うＯＳ（Operating System）である。このホストＯＳ１０２は、デバイスドライバ１０３に対して、メモリ３００からのデータ読出し、または、メモリ３００からのデータ書込みを指示し、デバイスドライバ１０３からの応答を受け取る。さらに、ホストＯＳ１０２は、デバイスドライバ１０３からメモリ拡張領域１２１の取得要求を受け取り、メモリ拡張領域１２１として使用可能なメモリ領域を、デバイスドライバ１０３にその応答として返す。
【００２８】
デバイスドライバ１０３は、ハードウェアを制御するソフトウェアである。このデバイスドライバ１０３は、メモリコントローラ２００に対して、メモリ３００からのデータ読出し、または、メモリ３００からのデータ書込みを指示し、メモリコントローラ２００からの応答を受け取る。さらに、このデバイスドライバ１０３は、ホストＯＳ１０２に、メモリ拡張領域１２１の取得要求を行い、メモリ拡張領域１２１として使用可能なメモリ領域をホストＯＳ１０２からその応答として受け取る。
【００２９】
図４は、本技術の第１の実施の形態におけるメモリコントローラ２００の構成例を示す図である。このメモリコントローラ２００は、コントローラ処理部２１０と、コントローラメモリ２２０と、ＲＯＭ２３０と、ＥＣＣ処理部２４０と、インテグリティ処理部２５０と、ホストインターフェース２７０と、メモリインターフェース２８０とを備える。これらはコントローラバス２９０によって相互に接続される。
【００３０】
コントローラ処理部２１０は、メモリコントローラ２００全体の制御を行うものである。このコントローラ処理部２１０は、コントローラメモリ２２０に格納されたソフトウェアを実行する。このコントローラ処理部２１０は、コントローラメモリ２２０をコード領域およびデータ領域として使用して動作する。
【００３１】
コントローラメモリ２２０は、コントローラ処理部２１０が実行するソフトウェアのコード領域およびデータ領域を記憶するメモリである。また、コントローラメモリ２２０は、ユーザデータを管理するためのテーブルを展開するための領域としても使用される。これらテーブルの詳細については後述する。
【００３２】
ＲＯＭ２３０は、メモリコントローラ２００におけるメモリ拡張機能のパラメータを記憶する読出し専用メモリである。
【００３３】
ＥＣＣ処理部２４０は、メモリ３００に記憶するデータの誤り訂正符号（ＥＣＣ：Error Correcting Code）を生成し、また、メモリ３００から読み出したデータの誤り訂正処理を行うものである。
【００３４】
インテグリティ処理部２５０は、メモリ拡張領域１２１に記憶するデータのインテグリティ確認のための誤り検出符号としてチェックサムを生成するものである。また、このインテグリティ処理部２５０は、メモリ拡張領域１２１から読み出したデータの誤り検出符号としてのチェックサムを使って誤り検出を行う。すなわち、このインテグリティ処理部２５０は、メモリ拡張領域１２１に記憶するデータのインテグリティ確認を行うものである。この実施の形態では、チェックサム生成アルゴリズムとして、ＣＲＣ（Cyclic Redundancy Check）を使用することを想定する。ただし、ＣＲＣに限定せず、セキュアハッシュ等のアルゴリズムを用いるようにしてもよい。
【００３５】
ホストインターフェース２７０は、ホストコンピュータ１００との間のやりとりを行うインターフェースである。メモリインターフェース２８０は、メモリ３００との間のやりとりを行うインターフェースである。
【００３６】
コントローラ処理部２１０上では、制御タスク、コマンド実行タスク、メモリ拡張領域管理タスクが動作する。制御タスクにおいて、ホストコンピュータ１００からコマンドを受信すると、そのコマンドをデコードする。そして、メモリ３００からデータを読み出すリードコマンドや、メモリ３００に対してデータを書き込むライトコマンドの場合には、コマンド実行タスクを呼び出して、対応する処理を行う。メモリ拡張領域１２１に関連するコマンドである場合には、メモリ拡張領域管理タスクを呼び出して、対応する処理を行う。
【００３７】
図５は、本技術の実施の形態におけるメモリ３００の構成例を示す図である。このメモリ３００は、メモリセルアレイ３１０と、メモリセルアレイ制御部３２０と、アドレスデコーダ３３０と、データバッファ３４０と、コントローラインターフェース３７０とを備える。メモリセルアレイ制御部３２０、アドレスデコーダ３３０およびデータバッファ３４０は、メモリセルアレイ３１０と接続し、また、メモリバス３９０を介してコントローラインターフェース３７０と接続する。
【００３８】
メモリセルアレイ３１０は、データを記憶するメモリセルをアレイ状に集積した記憶素子である。メモリセルアレイ制御部３２０は、メモリセルアレイ３１０に対する制御を実行するものである。アドレスデコーダ３３０は、メモリセルアレイ３１０に対するアドレスをデコードするデコーダである。データバッファ３４０は、メモリセルアレイ３１０にアクセスするためのバッファである。コントローラインターフェース３７０は、メモリコントローラ２００との間のやりとりを行うインターフェースである。
【００３９】
図６は、本技術の実施の形態におけるメモリ階層の概要を示す図である。メモリコントローラ２００は、メモリ３００のメモリセルアレイ３１０に割り当てられた領域に対応するデータを読み出して、コントローラメモリ２２０に記憶する。メモリコントローラ２００は、コントローラメモリ２２０に記憶したデータの一部を、ホストコンピュータ１００のホストメモリ１２０に割り当てて、メモリ拡張領域１２１として使用する。
【００４０】
メモリ拡張領域１２１にデータを記憶するために、インテグリティ処理部２５０によってチェックサムが生成される。また、メモリ拡張領域１２１から読み出したデータについて、チェックサムがインテグリティ処理部２５０によってチェックされ、誤りが検出され、インテグリティ確認が行われる。チェックサムは、メモリ拡張領域１２１にデータを記憶する直前に生成されてもよく、また、コントローラメモリ２２０等を利用して更新のたびに生成されてもよい。
【００４１】
［メモリの記憶領域］
図７は、本技術の実施の形態におけるメモリセルアレイ３１０の記憶領域の一例を示す図である。
【００４２】
物理アドレス０ｘ００００００（「０ｘ」に続く数字は１６進数を意味する。以下同様。）から０ｘ８０ＦＦＦＦまでの領域はデータ領域であり、ホストコンピュータ１００からのライトコマンドによって転送されるデータが記録される。物理アドレス０ｘ８１００００から０ｘ８３ＦＦＦＦまでの領域は管理データ領域であり、メモリコントローラ２００が使用するユーザ領域のデータを管理するためのテーブルが記録される。
【００４３】
ユーザデータを管理するためのテーブルには、アドレス変換テーブル３１１と、アドレス変換テーブルブロックアクセス頻度情報３１２と、不良ページ管理テーブル３１３と、代替ページ管理テーブル３１４とが含まれる。アドレス変換テーブル３１１は、論理アドレスから物理アドレスに変換するためのテーブルである。アドレス変換テーブルブロックアクセス頻度情報３１２は、アドレス変換テーブル３１１のアクセス頻度をブロック毎に保持するものである。不良ページ管理テーブル３１３は、故障や不良等により、データの書込みまたは読出しができなくなったメモリ３００の物理アドレスを記録するためのテーブルである。代替ページ管理テーブル３１４は、代替ページを管理するためのテーブルである。
【００４４】
図８は、本技術の実施の形態におけるメモリセルアレイ３１０のページ構成の一例を示す図である。
【００４５】
物理アドレスは、５２０バイトの物理ページを単位としてメモリセルアレイ３１０に割り振られる。メモリ３００に対する書込みおよびメモリ３００からの読出しは、物理ページ単位に実行される。
【００４６】
１つの物理ページに書き込まれるデータは、５１２バイトのデータと、データに付属する８バイトの冗長部とから構成される。さらに、冗長部は、１バイトの識別子と、３バイトの論理アドレスと、４バイトのＥＣＣとから構成される。
【００４７】
識別子は、５１２バイトのデータを識別するために使用される。識別子が００ｈ（「ｈ」の直前の数字は１６進数を意味する。以下同様。）の場合、ホストコンピュータ１００からのライトコマンドを受けて受信したユーザデータであることを意味する。識別子が０１ｈの場合、アドレス変換テーブル３１１であることを意味する。識別子が０２ｈの場合、アドレス変換テーブルブロックアクセス頻度情報３１２であることを意味する。識別子が０３ｈの場合、不良ページ管理テーブル３１３であることを意味する。識別子が０４ｈの場合、代替ページ管理テーブル３１４であることを意味する。識別子がＦＦｈの場合、そのページは未使用であることを意味する。
【００４８】
図９は、本技術の実施の形態におけるアドレス変換テーブル３１１の構成の一例を示す図である。
【００４９】
ホストコンピュータ１００のホスト処理部１１０で動作するアプリケーションプログラム１０１またはホストＯＳ１０２は、メモリ３００に対してデータの読出しまたはデータの書込みの指示をする際、データの位置情報を示すために、論理アドレスを用いる。一方、メモリコントローラ２００は、メモリ３００に対してデータの読出しまたはデータの書込みを要求する際、データの位置情報を示すために、物理アドレスを用いる。
【００５０】
メモリコントローラ２００は、論理アドレスを物理アドレスに変換するためにアドレス変換テーブル３１１を備え、このアドレス変換テーブル３１１を使用してホストコンピュータ１００から受信した論理アドレスを物理アドレスに変換する。そして、メモリコントローラ２００は、この物理アドレスを用いてメモリ３００に対するデータの読出しまたは書込みを指示する。メモリコントローラ２００は、アドレス変換テーブル３１１を使用することにより、書込み不良が発生した物理ページを排除するための処理や、データの書換え回数を平準化するための処理を行う。
【００５１】
論理ページのデータサイズは５１２Ｂ（バイト）であり、１つの論理ページに対して１つの物理ページが割り当てられる。アドレス変換テーブル３１１には、論理ページ毎に、物理ページが割り当てられているか否かを示す１バイトの「割当状況」と、割り当てられた「物理ページアドレス」を示す３バイトの情報とが保持される。「割当状況」が「割当済」を示す場合には割り当てられた物理ページアドレスの値は有効であり、「割当状況」が「未割当」を示す場合には割り当てられた物理ページアドレスの値は無効である。
【００５２】
メモリコントローラ２００が、メモリ３００からアドレス変換テーブル３１１の読出しおよびメモリ３００へのアドレス変換テーブル３１１の書込みを行う単位を「アドレス変換テーブルブロック」と称する。１つのアドレス変換テーブルブロックは６４ＫＢであり、１６３４８ページの「割当状況」と「物理ページアドレス」とが格納される。
【００５３】
アプリケーションプログラム１０１またはホストＯＳ１０２が、メモリ３００に記録可能な総データサイズは４ＧＢであるため、アドレス変換テーブルブロックの総数は５１２ブロックであり、総サイズは３２ＭＢである。
【００５４】
［コントローラメモリに保持されるテーブル群］
図１０は、本技術の実施の形態におけるコントローラメモリ２２０に保持されるテーブル群の一例を示す図である。ここでは、コントローラメモリ２２０に保持されるテーブル群として、メモリ拡張領域管理テーブル２２１、アドレス変換テーブルブロック位置情報２２２、および、アクセス頻度情報テーブル２２３が示されている。さらに、アドレス変換テーブル保持領域２２４、代替ページ管理テーブル２２５、アドレス変換テーブル再構築領域２２６、および、未割当メモリ拡張領域管理テーブル２２７が示されている。
【００５５】
メモリ拡張領域管理テーブル２２１は、メモリ拡張領域１２１の使用状況を管理するためのテーブルである。アドレス変換テーブルブロック位置情報２２２は、アドレス変換テーブル３１１のアドレス変換テーブルブロック毎の格納位置を示すテーブルである。アクセス頻度情報テーブル２２３は、アドレス変換テーブル３１１のアドレス変換テーブルブロック毎のアクセス頻度を示すテーブルである。アドレス変換テーブル保持領域２２４は、メモリ３００上のアドレス変換テーブル３１１のコピーをコントローラメモリ２２０に保持するための領域である。
【００５６】
代替ページ管理テーブル２２５は、論理アドレスに割り当てられていない物理ページのアドレスのリストを保持するためのテーブルである。この代替ページ管理テーブル２２５から未使用のページアドレスを取得する際には、アドレスの値が最も小さい値から順に取得する。
【００５７】
アドレス変換テーブル再構築領域２２６は、インテグリティ確認に失敗したアドレス変換テーブル３１１のコピーをコントローラメモリ２２０上に再構築するための領域である。未割当メモリ拡張領域管理テーブル２２７は、メモリ拡張領域１２１として使用可能なメモリ領域としてデバイスドライバ１０３から通知されながら、メモリコントローラ２００が使用しないメモリ領域のアドレスを保持するためのテーブルである。
【００５８】
図１１は、本技術の実施の形態におけるメモリ拡張領域管理テーブル２２１のフィールド構成例を示す図である。このメモリ拡張領域管理テーブル２２１は、「インデックス番号」、「使用状況」、「分割数」、「開始アドレス」、「サイズ」、「チェックサム」の各フィールドを備える。
【００５９】
「インデックス番号」は、メモリ拡張領域１２１を１６分割したインデックスに付与された番号である。メモリコントローラ２００は、このインデックスを管理単位として、メモリ拡張領域１２１にアクセスする。この実施の形態では、管理単位を３２ＫＢとする。
【００６０】
「使用状況」は、ホストメモリ１２０に確保したメモリ拡張領域１２１に、管理単位ごとに有効なデータが置かれているか否かを示すフィールドである。「使用状況」が「使用中」を示す場合にはメモリ拡張領域１２１に有効なデータが置かれており、「未使用」を示す場合にはメモリ拡張領域１２１に有効なデータが置かれていないことを意味する。
【００６１】
「分割数」は、メモリ拡張領域１２１の管理単位において、ホストメモリ１２０の物理アドレス空間内でさらに分割されている数を示すフィールドである。連続した物理アドレスが確保されている場合には、「分割数」は「１」を示す。
【００６２】
「開始アドレス」は、該当するインデックスに対応するメモリ拡張領域１２１として使用可能な領域の開始アドレスを物理アドレスにより示すフィールドである。「サイズ」は、該当するインデックスに対応するメモリ拡張領域１２１として使用可能な領域のサイズを示すフィールドである。１つのインデックスに対して、「分割数」により示される値と同一の数の「開始アドレス」および「サイズ」が保持される。
【００６３】
「チェックサム」は、該当するインデックス毎に生成されたチェックサムを示すフィールドである。この「チェックサム」は、メモリ拡張領域１２１にデータを転送する際に生成して保持し、メモリ拡張領域１２１からデータを転送する際に確認するために使用される。
【００６４】
図１２は、本技術の実施の形態におけるアドレス変換テーブルブロック位置情報２２２のフィールド構成例を示す図である。このアドレス変換テーブルブロック位置情報２２２は、「アドレス変換テーブルブロック番号」、「最新データ」、「コントローラメモリインデックス番号」、「メモリ拡張領域インデックス番号」の各フィールドを備える。
【００６５】
「アドレス変換テーブルブロック番号」は、アドレス変換テーブル３１１のアドレス変換テーブルブロックの番号を示すフィールドである。
【００６６】
「最新データ」は、最新のアドレス変換テーブルブロックのデータが保持されているメモリを示すフィールドである。対象となるメモリとして、「ホストメモリ」、「コントローラメモリ」、「メモリ」の何れかが示される。
【００６７】
「コントローラメモリインデックス番号」は、アドレス変換テーブルブロックのデータがコントローラメモリ２２０に保持されている場合に、コントローラメモリ２２０に保持されているインデックスの番号を示すフィールドである。この実施の形態では、コントローラメモリ２２０に保持されるアドレス変換テーブルブロックのデータは１つを想定しているため、「０ｘ００」を示すことになる。一方、「０ｘＦＦ」であれば、無効な値を示す。
【００６８】
「メモリ拡張領域インデックス番号」は、アドレス変換テーブルブロックのデータがメモリ拡張領域１２１に保持されている場合に、メモリ拡張領域１２１に保持されているインデックスの番号を示すフィールドである。
【００６９】
図１３は、本技術の実施の形態におけるアクセス頻度情報テーブル２２３のフィールド構成例を示す図である。このアクセス頻度情報テーブル２２３は、「アドレス変換テーブルブロック番号」および「アクセス頻度」の各フィールドを備える。
【００７０】
「アドレス変換テーブルブロック番号」は、アドレス変換テーブル３１１のアドレス変換テーブルブロックの番号を示すフィールドである。
【００７１】
「アクセス頻度」は、そのブロックにアクセスされた回数を示すフィールドである。この「アクセス頻度」は、該当するアドレス変換テーブルブロックに含まれる論理アドレスに対してライトまたはリードが実行された際に、インクリメントされる。
【００７２】
図１４は、本技術の実施の形態における未割当メモリ拡張領域管理テーブル２２７のフィールド構成例を示す図である。この未割当メモリ拡張領域管理テーブル２２７は、「分割数」、「開始アドレス」、「サイズ」の各フィールドを備える。
【００７３】
「分割数」は、メモリ拡張領域１２１の管理単位において、ホストメモリ１２０の物理アドレス空間内でさらに分割されている数を示すフィールドである。「開始アドレス」は、該当するインデックスに対応するメモリ拡張領域１２１として使用可能な領域の開始アドレスを物理アドレスにより示すフィールドである。「サイズ」は、該当するインデックスに対応するメモリ拡張領域１２１として使用可能な領域のサイズを示すフィールドである。
【００７４】
［情報処理システムの動作］
図１５は、本技術の実施の形態における情報処理システムの初期化処理の一例を示すシーケンス図である。
【００７５】
メモリコントローラ２００は、電源断の状態から起動すると、ホストインターフェース２７０を介して、ホストコンピュータ１００に対して起動を通知する（ステップＳ９０１）。
【００７６】
メモリコントローラ２００の起動通知を受けたホストコンピュータ１００は、メモリコントローラ２００が対応しているメモリ拡張機能のパラメータを取得するために、パラメータ問合せ（Query Request）を発行する（ステップＳ９０２）。
【００７７】
パラメータ問合せを受けたメモリコントローラ２００は、問合せの応答（Query Response）として、メモリ拡張機能のパラメータをホストコンピュータ１００に転送する（ステップＳ９０３）。
【００７８】
メモリ拡張機能のパラメータを受けたホストコンピュータ１００は、メモリ拡張機能に対応していることを確認すると、メモリ拡張領域１２１を取得する。そして、そのメモリ拡張領域１２１のアドレスおよびサイズを、メモリコントローラ２００に対して通知（Acquisition Notification）する（ステップＳ９０４）。
【００７９】
領域取得通知を受けたメモリコントローラ２００は、取得されたメモリ拡張領域１２１のサイズを確認すると、通知応答をホストコンピュータ１００に返信する（ステップＳ９０５）。この通知応答において、メモリ拡張領域１２１のサイズが条件を満たしていれば「ＡＣＫ」を、条件を満たしていなければ「ＮＡＫ」を、それぞれ示す。
【００８０】
そして、メモリコントローラ２００は、取得されたメモリ拡張領域１２１にデータを転送するために、メモリ３００に対してリードリクエストを要求する（ステップＳ９０６）。これにより、メモリ３００からデータが読み出され、メモリ拡張領域１２１にデータが転送される（ステップＳ９０７）。
【００８１】
図１６は、本技術の実施の形態におけるホストコンピュータ１００のデバイスドライバ１０３による初期化処理の手順例を示す流れ図である。
【００８２】
ホスト処理部１１０は、メモリコントローラ２００が対応しているメモリ拡張機能のパラメータを取得するために、メモリコントローラ２００に対してパラメータ問合せを発行する（ステップＳ９１１）。メモリ拡張機能のパラメータは、メモリコントローラ２００のメモリ拡張機能への対応または非対応を示す情報と、メモリコントローラ２００で扱うメモリ拡張領域１２１の最大サイズＭｍａｘおよび最小サイズＭｍｉｎである。この実施の形態では、最大サイズＭｍａｘを３２ＭＢ、最小サイズＭｍｉｎを６４ＫＢとそれぞれ想定する。その後、ホスト処理部１１０は、メモリコントローラ２００からの問合せ応答を待つ（ステップＳ９１２）。
【００８３】
ホスト処理部１１０は、メモリコントローラ２００から問合せ応答を受信すると、その応答に含まれるメモリ拡張機能のパラメータをホストメモリ１２０に保持する（ステップＳ９１３）。ホスト処理部１１０は、ホストメモリ１２０に保持したパラメータの内、メモリ拡張機能への対応または非対応を示す情報から、そのメモリコントローラ２００がメモリ拡張機能に対応しているか否かを判別する（ステップＳ９１４）。メモリ拡張機能に対応していない場合には（ステップＳ９１４：Ｎｏ）、メモリ拡張機能非対応であるとして、初期化処理を正常終了する。この場合、ホスト処理部１１０は、メモリ拡張機能に関連する動作を行わない。一方、メモリ拡張機能に対応している場合には（ステップＳ９１４：Ｙｅｓ）、ステップＳ９１５以降の処理を行う。
【００８４】
ホスト処理部１１０は、ホストＯＳ１０２にメモリ拡張領域１２１として取得可能なサイズを問い合わせる。必要なサイズが取得可能な場合、ホスト処理部１１０は、サイズＭｇｅｔを指定して、ホストＯＳ１０２からメモリ拡張領域１２１を取得する（ステップＳ９１５）。このとき、指定するサイズＭｇｅｔは、次式を満たす必要がある。
Ｍｍｉｎ ≦ Ｍｇｅｔ ≦ Ｍｍａｘ
【００８５】
ホスト処理部１１０は、メモリ拡張領域１２１の取得に成功したか否かを判断する（ステップＳ９１６）。メモリ拡張領域１２１を取得できなかった場合には（ステップＳ９１６：Ｎｏ）、そのまま初期化処理を正常終了する。一方、メモリ拡張領域１２１を取得できた場合には（ステップＳ９１６：Ｙｅｓ）、ステップＳ９１７以降の処理を行う。
【００８６】
ホスト処理部１１０は、取得したメモリ拡張領域１２１のアドレスおよびサイズをメモリコントローラ２００に通知する（ステップＳ９１７）。そして、ホスト処理部１１０は、メモリコントローラ２００からの通知応答（ＡＣＫまたはＮＡＫ）を待つ（ステップＳ９１８）。ホスト処理部１１０は、通知応答がＡＣＫでない場合（ステップＳ９１９：Ｎｏ）、通知された領域を使用しない旨をホストＯＳ１０２に通知する。この場合、ホスト処理部１１０は、メモリ拡張機能に関する機能に何らかの異常が発生したと判断し、メモリ拡張機能に関連する動作を行わない。一方、通知応答がＡＣＫである場合（ステップＳ９１９：Ｙｅｓ）、ホスト処理部１１０は、メモリ拡張機能に関連する動作を行う。
【００８７】
なお、上述の実施の形態では、メモリ拡張領域を取得する際のパラメータとして、最大サイズＭｍａｘおよび最小サイズＭｍｉｎを取得したが、これに加えて管理単位Ｍｕｎｉｔを取得するようにしてもよい。ホスト処理部１１０において、デバイスドライバ１０３が管理単位Ｍｕｎｉｔを取得した場合、ホストＯＳ１０２からメモリ拡張領域１２１として使用可能なメモリ領域を取得する際には、以下の条件を満たすサイズＭｇｅｔを取得する。
Ｍｇｅｔ ＝ Ｍｍｉｎ ＋ ｎ×Ｍｕｎｉｔ
この場合、ホスト処理部１１０は、領域取得通知の実行結果として、メモリコントローラ２００から、ＡＣＫ受信時にメモリ拡張領域１２１として使用しない領域を受信することがなくなる。そのため、メモリ拡張領域１２１として使用しない領域をホストＯＳ１０２に通知する処理が不要となる。
【００８８】
図１７は、本技術の実施の形態におけるメモリコントローラ２００のメモリ拡張領域管理タスクによるパラメータ設定処理の手順例を示す流れ図である。
【００８９】
コントローラ処理部２１０は、ＲＯＭ２３０に記録されているメモリ拡張機能のパラメータの値を、コントローラメモリ２２０に設定する（ステップＳ９２１）。そして、コントローラ処理部２１０は、コントローラメモリ２２０に設定したメモリ拡張機能のパラメータの値を、問合せ応答としてホストコンピュータ１００に転送する（ステップＳ９２２）。
【００９０】
図１８は、本技術の実施の形態におけるメモリコントローラ２００のメモリ拡張領域管理タスクによる領域取得通知受信処理の手順例を示す流れ図である。
【００９１】
コントローラ処理部２１０は、領域取得通知を受けると、それに含まれるメモリ拡張領域のアドレスおよびサイズを取得して、コントローラメモリ２２０に保持する（ステップＳ９３１）。
【００９２】
コントローラ処理部２１０は、メモリ拡張領域１２１のサイズを最大サイズＭｍａｘおよび最小サイズＭｍｉｎと比較する（ステップＳ９３２およびＳ９３３）。メモリ拡張領域１２１のサイズが最大サイズＭｍａｘより大きい（ステップＳ９３２：Ｎｏ）、または、最小サイズＭｍｉｎより小さい（ステップＳ９３３：Ｎｏ）場合には、コントローラ処理部２１０はＮＡＫを送信する（ステップＳ９３７）。
【００９３】
一方、メモリ拡張領域１２１のサイズが最大サイズＭｍａｘ以下（ステップＳ９３２：Ｙｅｓ）、かつ、最小サイズＭｍｉｎ以上（ステップＳ９３３：Ｙｅｓ）の場合には、コントローラ処理部２１０はテーブル群を初期化する（ステップＳ９３４）。ここで、テーブル群は、メモリ拡張領域管理テーブル２２１、および、アドレス変換テーブルブロック位置情報２２２、および、アクセス頻度情報テーブル２２３等である。
メモリ拡張領域管理テーブル２２１の初期化においては、取得したメモリ拡張領域１２１のサイズに合わせて、メモリ拡張領域管理テーブル２２１をコントローラメモリ２２０上に作成し、作成した全てのエントリの「使用状況」を「未使用」、分割数を「０」、チェックサムを「０ｘＦＦＦＦＦＦＦＦ」に設定する。ここで、メモリ拡張領域１２１のサイズが、メモリ拡張領域管理テーブル２２１の倍数でない場合には、未割当メモリ拡張領域管理テーブル２２７に保持する。
【００９４】
アドレス変換テーブルブロック位置情報２２２の初期化においては、全てのエントリの「最新データ」を「メモリ」に設定する。また、「コントローラメモリインデックス番号」を「無効な値（０ｘＦＦ）」に設定する。また、「メモリ拡張領域インデックス番号」を「無効な値（０ｘＦＦＦＦ）」に設定する。
【００９５】
アクセス頻度情報テーブル２２３の初期化においては、メモリ３００からアドレス変換テーブルブロックアクセス頻度情報３１２を読み出して、コントローラメモリ２２０にアクセス頻度情報テーブル２２３として保持する。
【００９６】
コントローラ処理部２１０は、メモリ拡張領域管理テーブル２２１から、「使用状況」が「解放済」となっているエントリを検索する。そして、その「使用状況」を「未使用」に更新する。そして、領域取得通知において通知されたメモリ拡張領域１２１から「開始アドレス」、「サイズ」、「分割数」を算出してメモリ拡張領域管理テーブル２２１を更新する（ステップＳ９３５）。その後、コントローラ処理部２１０は、ホストコンピュータ１００にＡＣＫと、メモリ拡張領域１２１として使用しない領域とを送信する（ステップＳ９３６）。メモリ拡張領域１２１として使用しない領域は、未割当メモリ拡張領域管理テーブル２２７に保持されている開始アドレスおよびサイズによって示される。
【００９７】
図１９は、本技術の実施の形態におけるメモリコントローラ２００のメモリ拡張領域管理タスクによるメモリ３００からメモリ拡張領域１２１へのデータ転送処理の手順例を示す流れ図である。
【００９８】
コントローラ処理部２１０は、メモリ３００からホストメモリ１２０のメモリ拡張領域１２１に転送するアドレス変換テーブルを決定する（ステップＳ９４１）。コントローラ処理部２１０は、メモリ拡張領域管理テーブル２２１の「使用状況」が「未使用」となっているインデックス番号を選択し、「開始アドレス」および「サイズ」に基づいて、転送先のメモリ拡張領域１２１を選択する。また、コントローラ処理部２１０は、アクセス頻度の値が大きく、ホストメモリ１２０に転送されていないアドレス変換テーブルブロックを転送するデータとして選択する（ステップＳ９４１）。
【００９９】
コントローラ処理部２１０は、ステップＳ９４１で選択したインデックス番号のアドレス変換テーブルブロックをメモリ３００から読み出して、インテグリティ処理部２５０においてチェックサムを算出する。そして、ステップＳ９４１で選択したホストメモリ１２０のメモリ拡張領域１２１に転送する（ステップＳ９４２）。インテグリティ処理部２５０において算出したチェックサムは、メモリ拡張領域管理テーブル２２１の「チェックサム」において管理する。
【０１００】
コントローラ処理部２１０は、メモリ拡張領域管理テーブル２２１およびアドレス変換テーブルブロック位置情報２２２を更新する（ステップＳ９４３）。すなわち、転送先として指定したメモリ拡張領域管理テーブル２２１のインデックス番号の「使用状況」を「使用中」に設定する。また、アドレス変換テーブルブロック位置情報２２２のメモリ拡張領域インデックス番号に、ステップＳ９４１で選択したメモリ拡張領域インデックス番号を設定する。
【０１０１】
コントローラ処理部２１０は、メモリ拡張領域管理テーブル２２１の「使用状況」が「未使用」となっているエントリの有無を判別する（ステップＳ９４４）。メモリ拡張領域管理テーブル２２１の「使用状況」に「未使用」が存在する場合は（ステップＳ９４４：Ｙｅｓ）、ステップＳ９４１以降の処理を繰り返す。
【０１０２】
図２０は、本技術の実施の形態におけるメモリコントローラ２００のコマンド実行タスクによるリードコマンド処理の手順例を示す流れ図である。ホストコンピュータ１００において、デバイスドライバ１０３は、ホストＯＳ１０２からリードコマンドの実行を指示されると、リードコマンドを発行する。ホストＯＳ１０２からは、読出し開始論理アドレスおよびサイズがパラメータとして指定される。デバイスドライバ１０３を介して発行されるリードコマンドには、その読出し開始論理アドレスおよびサイズが含まれる。
【０１０３】
コントローラ処理部２１０は、受信した開始論理アドレスとサイズに基づいて、論理アドレス単位に処理を分割する（ステップＳ９５１）。１回の処理で実行されるのは１論理アドレスである。例えば、リード対象の開始アドレスとして「０」、サイズとして「１」が指定された場合は、１回の処理が行われる。また、リード対象の開始論理アドレスとして「０」、サイズとして「２」が指定された場合には、２回の処理に分割される。
【０１０４】
コントローラ処理部２１０は、リード対象とする論理アドレスを決定する（ステップＳ９５２）。対象となる論理アドレスは、リード対象の開始論理アドレスから順番に決定される。リード対象の開始論理アドレスとして「０」、データサイズとして「２」が指定された場合、最初に処理を実行する論理アドレスは「０」に決定される。次に対象となる論理アドレスは「１」に決定される。
【０１０５】
コントローラ処理部２１０は、リード対象として決定した論理アドレスが含まれるアドレス変換テーブルブロックが、コントローラメモリ２２０のアドレス変換テーブル保持領域２２４に存在するかを判別する（ステップＳ９５３）。アドレス変換テーブルブロックがアドレス変換テーブル保持領域２２４に存在しない場合には（ステップＳ９５３：Ｎｏ）、メモリ拡張領域管理タスクにおいて、アドレス変換テーブルブロックの入替え処理を実行する（ステップＳ９６０）。これにより、リード対象として決定した論理アドレスが含まれるアドレス変換テーブルブロックが、アドレス変換テーブル保持領域２２４に保持される。このアドレス変換テーブルの入替え処理の詳細については後述する。
【０１０６】
コントローラ処理部２１０は、アドレス変換テーブルを参照して、リード対象として決定した論理アドレスを物理アドレスに変換する（ステップＳ９５４）。物理アドレスが未割当の場合は、代替ページ管理テーブル２２５から、未使用のページアドレスを取得する。その際、アドレス変換テーブルの「使用状況」を「割当済」に更新する。
【０１０７】
コントローラ処理部２１０は、アクセス頻度情報テーブル２２３のうち、ステップＳ９５４において参照したアドレス変換テーブルのブロック番号のエントリに対応する「アクセス頻度」の値をインクリメントして更新する（ステップＳ９５５）。
【０１０８】
コントローラ処理部２１０は、ステップＳ９５４において変換した物理アドレスを指定して、メモリ３００に対してリード要求を行う（ステップＳ９５６）。コントローラ処理部２１０は、メモリ３００から読み出したデータについて誤り訂正を行い、その誤り訂正したデータをホストコンピュータ１００に転送する（ステップＳ９５７）。その際、転送されるデータは、５１２バイトである。
【０１０９】
コントローラ処理部２１０は、ステップＳ９５４において未使用のページを取得した場合、アドレス変換テーブルの「物理アドレス」を、取得したページの物理アドレスに更新する（ステップＳ９８７）。「物理アドレス」を更新した際には、アドレス変換テーブルブロック位置情報２２２の「最新データ」は「コントローラメモリ」に更新される。
【０１１０】
コントローラ処理部２１０は、リードコマンド処理においてホストコンピュータ１００に転送されたデータサイズの合計と、リードコマンドにおいて指定されたデータサイズとが一致するか否かを判別する（ステップＳ９５８）。両データサイズが一致する場合には（ステップＳ９５８：Ｙｅｓ）、ホストコンピュータ１００にリードコマンド処理の終了を通知する（ステップＳ９５９）。両データサイズが一致しない場合には（ステップＳ９５８：Ｎｏ）、ステップＳ９５２以降の処理を繰り返す。
【０１１１】
図２１は、本技術の第１の実施の形態におけるメモリコントローラ２００のメモリ拡張領域管理タスクによるアドレス変換テーブルブロック入替え処理（ステップＳ９６０）の手順例を示す流れ図である。このアドレス変換テーブルブロック入替え処理では、コントローラメモリ２２０上のデータを追い出して空き領域が確保され、その確保された空き領域に対してメモリ拡張領域１２１またはメモリ３００から新たにデータが転送される。なお、以下ではメモリ拡張領域１２１を単にホストメモリ１２０として表す場合がある。
【０１１２】
コントローラ処理部２１０は、アドレス変換テーブルブロック位置情報２２２を参照して、コントローラメモリ２２０に保持されている番号のアドレス変換テーブルブロックが、ホストメモリ１２０上に存在するか否かを判別する（ステップＳ９６１）。このコントローラメモリ２２０に保持されているアドレス変換テーブルブロックが追出し対象ブロックとなる。追出し対象ブロックがホストメモリ１２０上に存在する場合には（ステップＳ９６１：Ｙｅｓ）、ステップＳ９６２以降の処理を行う。追出し対象ブロックがホストメモリ１２０上に存在しない場合には（ステップＳ９６１：Ｎｏ）、ステップＳ９７１以降の処理を行う。
【０１１３】
コントローラ処理部２１０は、アドレス変換テーブルブロック位置情報２２２を参照して、コントローラメモリ２２０に保持されている番号のアドレス変換テーブルブロックのデータが、最新のデータであるか否かを判別する（ステップＳ９６２）。最新のデータである場合には（ステップＳ９６２：Ｙｅｓ）、コントローラ処理部２１０は、メモリ拡張領域管理テーブル２２１およびアドレス変換テーブルブロック位置情報２２２を参照して転送データを特定する。すなわち、コントローラメモリ２２０に保持されているアドレス変換テーブルブロックのデータを、ホストメモリ１２０上の同一の番号のアドレス変換テーブルブロックのデータが保持されている領域に対して転送する（ステップＳ９６３）。これにより、最新データがホストメモリ１２０のメモリ拡張領域１２１に反映される。ホストメモリ１２０にデータを転送する際、インテグリティ処理部２５０がチェックサムを生成する。その生成されたチェックサムは、メモリ拡張領域管理テーブル２２１の「チェックサム」に保持する。
【０１１４】
コントローラ処理部２１０は、アドレス変換テーブルブロック位置情報２２２のうち、コントローラメモリ２２０に保持されているアドレス変換テーブルブロック番号に該当する「最新データ」と「コントローラメモリインデックス番号」を更新する（ステップＳ９６４）。このとき、「コントローラメモリインデックス番号」は、無効な値（０ｘＦＦ）に更新される。また、「最新データ」が、「コントローラメモリ」である場合は「ホストメモリ」に更新される。なお、「最新データ」が、「ホストメモリ」または「メモリ」の場合には更新を行わない。
【０１１５】
コントローラ処理部２１０は、コントローラメモリ２２０に保持されている番号のアドレス変換テーブルブロックよりも低いアクセス頻度を有するアドレス変換テーブルブロックのデータが、ホストメモリ１２０上に存在するか否かを判別する（ステップＳ９７１）。その際、アドレス変換テーブルブロックのアクセス頻度情報テーブル２２３が参照される。アクセス頻度の低いアドレス変換テーブルブロックが存在する場合には（ステップＳ９７１：Ｙｅｓ）、ステップＳ９７２以降の処理を行う。アクセス頻度の低いアドレス変換テーブルブロックが存在しない場合には（ステップＳ９７１：Ｎｏ）、ステップＳ９８２以降の処理を行う。
【０１１６】
コントローラ処理部２１０は、ホストメモリ１２０上に存在するアドレス変換テーブルブロックの内で最もアクセス頻度の低いアドレス変換テーブルブロックの番号を選択して、ホストメモリ１２０のデータが最新であるか否かを判別する（ステップＳ９７２）。すなわち、アドレス変換テーブルブロック位置情報２２２を参照して、該当する「最新データ」が「ホストメモリ」であるか否かを判別する。
【０１１７】
ホストメモリ１２０のデータが最新である場合（ステップＳ９７２：Ｙｅｓ）、コントローラ処理部２１０は、メモリ拡張領域管理テーブル２２１およびアドレス変換テーブルブロック位置情報２２２を参照する。そして、ホストメモリ１２０に保持されているアドレス変換テーブルブロックのデータから、インテグリティ処理部２５０を使用してチェックサムを算出する。このようにして算出したチェックサムとアドレス変換テーブルブロック位置情報２２２に保持されているチェックサムとを比較して、一致するかを判別する（ステップＳ９７３）。チェックサムが一致する場合には（ステップＳ９７３：Ｙｅｓ）、コントローラ処理部２１０は、ホストメモリ１２０に保持されているアドレス変換テーブルブロックのデータをメモリ３００に転送して書込みを行う（ステップＳ９７４）。その際、メモリ拡張領域管理テーブル２２１およびアドレス変換テーブルブロック位置情報２２２が参照される。一方、チェックサムが一致しない場合には（ステップＳ９７３：Ｎｏ）、コントローラ処理部２１０は、ホストメモリ１２０に保持されているアドレス変換テーブルブロックのデータの再構築処理を行う（ステップＳ９７５）。再構築を行う際には、アドレス変換テーブルブロック番号が指定され、転送先としてメモリ３００が指定される。この再構築処理の詳細については後述する。
【０１１８】
コントローラ処理部２１０は、アドレス変換テーブルブロック位置情報２２２のうち、ステップＳ９７２において選択したアドレス変換テーブルブロックの「最新データ」および「ホストメモリインデックス番号」を更新する（ステップＳ９７７）。このとき、「ホストメモリインデックス番号」は、無効な値（０ｘＦＦＦＦＦ）に更新される。また、「最新データ」が、「ホストメモリ」である場合は「メモリ」に更新される。なお、「最新データ」が、「メモリ」の場合には、更新は行われない。
【０１１９】
コントローラ処理部２１０は、メモリ拡張領域管理テーブル２２１およびアドレス変換テーブルブロック位置情報２２２を参照する。そして、ステップＳ９７２において選択した番号のアドレス変換テーブルブロックのデータが保持されているホストメモリ１２０の領域に対して、コントローラメモリ２２０に保持されているアドレス変換テーブルブロックのデータを転送する（ステップＳ９７８）。ホストメモリ１２０にデータを転送する際、インテグリティ処理部２５０がチェックサムを生成する。この生成したチェックサムは、メモリ拡張領域管理テーブル２２１の「チェックサム」に保持される。
【０１２０】
コントローラ処理部２１０は、アドレス変換テーブルブロック位置情報２２２のうち、コントローラメモリ２２０に保持されているアドレス変換テーブルブロック番号に該当する内容を更新する（ステップＳ９７９）。ここでは、「最新データ」、「コントローラメモリインデックス番号」および「ホストメモリインデックス番号」が更新対象となる。「コントローラメモリインデックス番号」は、無効な値（０ｘＦＦ）に更新される。「ホストメモリインデックス番号」は、転送したメモリ拡張領域１２１のインデックス番号に更新される。「最新データ」が「コントローラメモリ」である場合には、「ホストメモリ」に更新される。なお、「最新データ」が、「ホストメモリ」または「メモリ」の場合には、更新は行われない。
【０１２１】
コントローラ処理部２１０は、アドレス変換テーブルブロック位置情報２２２を参照して、コントローラメモリ２２０に保持されている番号のアドレス変換テーブルブロックのデータが、最新のデータであるか否かを判別する（ステップＳ９８２）。最新のデータである場合には（ステップＳ９８２：Ｙｅｓ）、コントローラ処理部２１０は、コントローラメモリ２２０に保持されているアドレス変換テーブルブロックのデータを、メモリ３００に転送して書込みを行う（ステップＳ９８３）。
【０１２２】
コントローラ処理部２１０は、アドレス変換テーブルブロック位置情報２２２のうち、コントローラメモリ２２０に保持されているアドレス変換テーブルブロック番号に該当する内容を更新する（ステップＳ９８４）。ここでは、「最新データ」および「コントローラメモリインデックス番号」が更新対象である。「コントローラメモリインデックス番号」は、無効な値（０ｘＦＦ）に更新される。「最新データ」が「コントローラメモリ」である場合には「メモリ」に更新される。なお、「最新データ」が「メモリ」の場合には、更新は行われない。
【０１２３】
コントローラ処理部２１０は、コントローラメモリ２２０に対する書込み対象として指定された番号のアドレス変換テーブルブロック（目的ブロック）が、ホストメモリ１２０のメモリ拡張領域１２１に保持されているかを判別する（ステップＳ９６５）。目的ブロックがメモリ拡張領域１２１に存在する場合には（ステップＳ９６５：Ｙｅｓ）、ステップＳ９６６以降の処理を行う。目的ブロックがメモリ拡張領域１２１に存在しない場合には（ステップＳ９６５：Ｎｏ）、ステップＳ９８５以降の処理を行う。
【０１２４】
コントローラ処理部２１０は、メモリ拡張領域管理テーブル２２１およびアドレス変換テーブルブロック位置情報２２２を参照する。そして、ホストメモリ１２０に保持されているアドレス変換テーブルブロックのデータから、インテグリティ処理部２５０を使用してチェックサムを算出する。このようにして算出したチェックサムとアドレス変換テーブルブロック位置情報２２２に保持されているチェックサムとを比較して、一致するか否かを判別する（ステップＳ９６６）。チェックサムが一致する場合には（ステップＳ９６６：Ｙｅｓ）、コントローラ処理部２１０は、メモリ拡張領域管理テーブル２２１およびアドレス変換テーブルブロック位置情報２２２を参照する。そして、指定された番号のアドレス変換テーブルブロックのデータを、ホストメモリ１２０のメモリ拡張領域１２１から、コントローラメモリ２２０のアドレス変換テーブル保持領域２２４に対して転送する（ステップＳ９６７）。一方、チェックサムが一致しない場合には（ステップＳ９６６：Ｎｏ）、コントローラ処理部２１０は、ホストメモリ１２０に保持されているアドレス変換テーブルブロックのデータの再構築処理を行う（ステップＳ９６８）。再構築を行う際には、アドレス変換テーブルブロック番号が指定され、転送先としてコントローラメモリ２２０が指定される。この再構築処理の詳細については後述する。
【０１２５】
コントローラ処理部２１０は、アドレス変換テーブルブロック位置情報２２２のうち、コントローラメモリ２２０に保持されているアドレス変換テーブルブロック番号に該当する内容を更新する（ステップＳ９６９）。ここでは、「最新データ」および「コントローラメモリインデックス番号」が更新対象となる。「コントローラメモリインデックス番号」は、「０ｘ００」に更新される。
【０１２６】
コントローラ処理部２１０は、指定された番号のアドレス変換テーブルブロックのデータを、メモリ３００からコントローラメモリ２２０のアドレス変換テーブル保持領域２２４に転送する（ステップＳ９８５）。
コントローラ処理部２１０は、アドレス変換テーブルブロック位置情報２２２のうち、コントローラメモリ２２０に保持されているアドレス変換テーブルブロック番号に該当する「コントローラメモリインデックス番号」を更新する（ステップＳ９８６）。ここで、「コントローラメモリインデックス番号」は、「０ｘ００」に更新される。
【０１２７】
なお、ホストメモリ１２０から読み出したデータのインテグリティ処理において不一致となった場合に実行する再構築処理を省くために、以下の処理を行ってもよい。すなわち、アドレス変換テーブルを変更して、コントローラメモリ２２０からホストメモリ１２０に転送する際（ステップＳ９６３、Ｓ９７８）、同時にメモリ３００にデータを記録するようにしてもよい。その場合、インテグリティ処理において不一致となったとき、アドレス変換テーブルブロックの再構築処理に代えて、メモリ３００から該当するアドレス変換テーブルの読出し処理を行う。
【０１２８】
図２２は、本技術の実施の形態におけるメモリコントローラ２００のメモリ拡張領域管理タスクによるアドレス変換テーブルブロックのデータの再構築処理（ステップＳ９６８、Ｓ９７５）の手順例を示す流れ図である。アドレス変換テーブルブロックの再構築処理は、再構築対象となったアドレス変換テーブルブロック番号と、再構築したアドレス変換テーブルブロックの転送先とが指定されて実行される。
【０１２９】
コントローラ処理部２１０は、コントローラメモリ２２０上のアドレス変換テーブル再構築領域２２６を使用して、アドレス変換テーブルブロックを作成して、初期化する（ステップＳ９９１）。再構築対象となったアドレス変換テーブルブロックに属する論理ページアドレスにおいて、割当状況は「未割当」、物理ページアドレスは「０ｘＦＦＦＦＦＦ」に設定される。
【０１３０】
コントローラ処理部２１０は、メモリ３００の物理アドレスを「０ｘ００００００」から順に増加させて、物理アドレスを選択する（ステップＳ９９２）。選択する際、不良ページ管理テーブルに登録された物理アドレスは除外する。
【０１３１】
コントローラ処理部２１０は、ステップＳ９９２において選択された物理アドレスのページのデータ（５２０バイト）を読み出して、ＥＣＣによる誤り訂正を行った後、識別子および論理アドレスを取得する（ステップＳ９９３）。
【０１３２】
コントローラ処理部２１０は、ステップＳ９９３において取得された識別子および論理アドレスが再構築対象のものであるか否かを判別する（ステップＳ９９４）。すなわち、識別子が「０１ｈ」を示し、かつ、指定されたアドレス変換テーブルブロック番号に属する論理アドレスであれば再構築対象となる。再構築対象とならない場合には（ステップＳ９９４：Ｎｏ）、ステップＳ９９２以降の処理を繰り返す。再構築対象となる場合には（ステップＳ９９４：Ｙｅｓ）、ステップＳ９９５以降の処理を行う。
【０１３３】
コントローラ処理部２１０は、コントローラメモリ２２０上で、指定されたアドレス変換テーブルブロック番号のデータの再構築を行って更新する（ステップＳ９９５）。冗長部に記録された「論理アドレス」に対応する「物理アドレス」になるように「物理ページアドレス」を更新し、「割当状況」を「割当済」に更新する。
【０１３４】
コントローラ処理部２１０は、再構築対象となったアドレス変換テーブルブロックに属する全ての論理アドレスに対応する「割当状況」が全て「割当済」となったか否かを判別する（ステップＳ９９６）。「割当状況」に「未割当」が残っている場合は（ステップＳ９９６：Ｎｏ）、コントローラ処理部２１０は、ユーザデータを記録するページ（０ｘ００００００ - ０ｘ８０ＦＦＦＦ）を全て読み出したか否かを判別する（ステップＳ９９７）。全ての読み出しが終わっていない場合は（ステップＳ９９７：）、ステップＳ９９２以降の処理を繰り返す。
【０１３５】
コントローラ処理部２１０は、再構築を行ったアドレス変換テーブルのデータを、指定された転送先に転送する（ステップＳ９９８）。
【０１３６】
図２３は、本技術の実施の形態におけるメモリコントローラ２００のコマンド実行タスクによるライトコマンド処理の手順例を示す流れ図である。ホストコンピュータ１００において、デバイスドライバ１０３は、ホストＯＳ１０２からライトコマンドの実行を指示されると、ライトコマンドを発行する。ホストＯＳ１０２からは、書込み開始論理アドレスおよびサイズがパラメータとして指定される。デバイスドライバ１０３を介して発行されるライトコマンドには、その書込み開始論理アドレスおよびサイズが含まれる。
【０１３７】
コントローラ処理部２１０は、リードコマンドの場合と同様に、受信した開始論理アドレスとサイズに基づいて、論理アドレス単位に処理を分割する（ステップＳ８１１）。
【０１３８】
コントローラ処理部２１０は、リードコマンドの場合と同様に、ライト対象とする論理アドレスを決定する（ステップＳ８１２）。対象となる論理アドレスは、ライト対象の開始論理アドレスから順番に決定される。
【０１３９】
コントローラ処理部２１０は、リードコマンドの場合と同様に、ライト対象として決定した論理アドレスが含まれるアドレス変換テーブルブロックが、アドレス変換テーブル保持領域２２４に存在するかを判別する（ステップＳ８１３）。アドレス変換テーブルブロックがアドレス変換テーブル保持領域２２４に存在しない場合には（ステップＳ８１３：Ｎｏ）、メモリ拡張領域管理タスクにおいて、アドレス変換テーブルブロックの入替え処理を実行する（ステップＳ８２０）。これにより、ライト対象として決定した論理アドレスが含まれるアドレス変換テーブルブロックが、アドレス変換テーブル保持領域２２４に保持される。このアドレス変換テーブルの入替え処理は、図２１において説明したものと同様である。
【０１４０】
コントローラ処理部２１０は、アドレス変換テーブルを参照して、ライト対象として決定した論理アドレスを物理アドレスに変換する（ステップＳ８１４）。物理アドレスが未割当の場合は、代替ページ管理テーブル２２５から、未使用のページアドレスを取得する。その際、アドレス変換テーブルの「使用状況」を「割当済」に更新する。
【０１４１】
コントローラ処理部２１０は、アクセス頻度情報テーブル２２３のうち、ステップＳ８１４において参照したアドレス変換テーブルのブロック番号のエントリに対応する「アクセス頻度」の値をインクリメントして更新する（ステップＳ８１５）。
【０１４２】
コントローラ処理部２１０は、ホストコンピュータ１００から、書込み対象となるデータを受け取る（ステップＳ８１６）。このデータは５１２バイトである。コントローラ処理部２１０は、この５１２バイトのデータに対して、冗長部を追加する。すなわち、ユーザデータを表す「００ｈ」を「識別子」に設定し、ステップＳ８１２において決定した論理アドレスを「論理アドレス」に設定し、ＥＣＣ処理部２４０により生成したＥＣＣを「ＥＣＣ」に設定する。これにより、５２０バイトのライトデータが構成される。
【０１４３】
コントローラ処理部２１０は、ステップＳ８１４において変換した物理アドレスを指定して、メモリ３００に対してライトデータのライト要求を行う（ステップＳ８１７）。ライトデータの書込みに失敗した場合には（ステップＳ８１８：Ｎｏ）、代替ページを取得して（ステップＳ８１９）、再びライト要求を行う（ステップＳ８１７）。ライトデータの書込みに成功した場合には（ステップＳ８１８：Ｙｅｓ）、アドレス変換テーブルを更新する（ステップＳ８２７）。すなわち、ステップＳ８１４において未使用のページを取得した場合、アドレス変換テーブルの「物理アドレス」を、取得したページの物理アドレスに更新する。「物理アドレス」を更新した際には、アドレス変換テーブルブロック位置情報２２２の「最新データ」は「コントローラメモリ」に更新される。
【０１４４】
コントローラ処理部２１０は、ライトコマンド処理においてメモリ３００に転送されたデータサイズの合計と、ライトコマンドにおいて指定されたデータサイズとが一致するか否かを判別する（ステップＳ８２８）。両データサイズが一致する場合には（ステップＳ８２８：Ｙｅｓ）、ホストコンピュータ１００にライトコマンド処理の終了を通知する（ステップＳ８２９）。両データサイズが一致しない場合には（ステップＳ８２８：Ｎｏ）、ステップＳ８１２以降の処理を繰り返す。
【０１４５】
図２４は、本技術の第１の実施の形態におけるメモリコントローラ２００のメモリ拡張領域管理タスクによるフラッシュコマンド処理の手順例を示す流れ図である。デバイスドライバ１０３は、ホストＯＳ１０２から電源断等の通知を受けるとフラッシュコマンドを発行する。このフラッシュコマンドは、メモリコントローラ２００がメモリ拡張領域１２１とアドレス変換テーブル保持領域２２４に保持しているデータを、メモリ３００に保存するためのコマンドである。デバイスドライバ１０３は、メモリコントローラ２００に対してフラッシュコマンドを発行した後、メモリコントローラ２００からＡＣＫを受信すると、メモリ３００へのデータ保存が終了した旨をホストＯＳ１０２に伝える。
【０１４６】
コントローラ処理部２１０は、アドレス変換テーブルブロック位置情報２２２の「最新データ」が「メモリ」になっているか否かを判別する（ステップＳ８３１）。全ての「最新データ」が「メモリ」になっていれば（ステップＳ８３１：Ｙｅｓ）、メモリ３００へのデータ保存が終了したものとして、デバイスドライバ１０３にＡＣＫを通知する（ステップＳ８３９）。「最新データ」が「メモリ」になっていないものが残っていれば（ステップＳ８３１：Ｎｏ）、ステップＳ８３２以降の処理を行う。
【０１４７】
コントローラ処理部２１０は、アドレス変換テーブルブロック位置情報２２２の「アドレス変換テーブルブロック番号」を「０」から順に検索する。そして、「最新データ」が「メモリ」となっていないものをメモリ３００にデータを保存する領域として選択する（ステップＳ８３２）。
【０１４８】
コントローラ処理部２１０は、ステップＳ８３２において選択されたアドレス変換テーブルブロック位置情報２２２の「最新データ」が「コントローラメモリ２２０」であるか否かを判別する（ステップＳ８３３）。「最新データ」が「コントローラメモリ２２０」であれば（ステップＳ８３３：Ｙｅｓ）、コントローラ処理部２１０は、コントローラメモリ２２０に保持されているアドレス変換テーブルブロックのデータを、メモリ３００に転送して書込みを行う（ステップＳ８３４）。一方、「最新データ」が「コントローラメモリ２２０」でなければ（ステップＳ８３３：Ｎｏ）、コントローラ処理部２１０は、メモリ拡張領域管理テーブル２２１とアドレス変換テーブルブロック位置情報２２２を参照する。そして、ホストメモリ１２０に保持されているアドレス変換テーブルブロックのデータから、インテグリティ処理部２５０を使用してチェックサムを算出する。このようにして算出したチェックサムとアドレス変換テーブルブロック位置情報２２２に保持されているチェックサムとを比較して、一致するか否かを判別する（ステップＳ８３５）。
【０１４９】
コントローラ処理部２１０は、チェックサムが一致する場合には（ステップＳ８３５：Ｙｅｓ）、メモリ拡張領域管理テーブル２２１とアドレス変換テーブルブロック位置情報２２２を参照する。そして、ホストメモリ１２０に保持されているアドレス変換テーブルブロックのデータをメモリ３００に転送して書込みを行う（ステップＳ８３７）。一方、チェックサムが一致しない場合には（ステップＳ８３５：Ｎｏ）、コントローラ処理部２１０は、ホストメモリ１２０に保持されているアドレス変換テーブルブロックのデータの再構築処理を行う（ステップＳ８３６）。再構築処理を行う際は、アドレス変換テーブルブロック番号が指定され、また、転送先はメモリ３００が指定される。この再構築処理は、図２２において説明したものと同様である。
【０１５０】
コントローラ処理部２１０は、アドレス変換テーブルブロック位置情報２２２の更新を行う（ステップＳ８３８）。その際、コントローラ処理部２１０は、ステップＳ８３２において選択したアドレス変換テーブルブロック位置情報２２２の「アドレス変換テーブルブロック番号」の対応する「最新データ」を「メモリ」に更新する。
【０１５１】
このように、本技術の第１の実施の形態によれば、メモリ拡張領域１２１にデータを保持する場合においてインテグリティ処理部２５０によるインテグリティ処理を行うことより、メモリ拡張領域１２１の安全性を確保することができる。
【０１５２】
＜２．第２の実施の形態＞
上述の第１の実施の形態では、チェックサムとしてＣＲＣを用いることを想定したが、誤り訂正符号を用いてもよい。第１の実施の形態のメモリ拡張領域管理テーブル２２１では「チェックサム」を管理していたが、誤り訂正符号を用いた場合、「チェックサム」に代えて「誤り訂正符号」をメモリ拡張領域管理テーブル２２１で管理する。第１の実施の形態では、「チェックサム」を生成するためにインテグリティ処理部２５０を用いていたが、この第１の実施の形態では、インテグリティ処理部２５０に代えて、第２ＥＣＣ処理部２５２を使用する。なお、情報処理システムの全体構成は第１の実施の形態と同様である。
【０１５３】
［情報処理システムの構成］
図２５は、本技術の第２の実施の形態におけるメモリコントローラ２００の構成例を示す図である。この第２の実施の形態のメモリコントローラ２００では、第１の実施の形態のインテグリティ処理部２５０に代えて、第２ＥＣＣ処理部２５２を備える。この第２ＥＣＣ処理部２５２は、メモリ拡張領域１２１にデータを保持する際にチェックサムとして誤り訂正符号（ＥＣＣ）を生成し、読み出す際には誤り訂正符号を用いた誤り訂正を行う。
【０１５４】
一方、第１ＥＣＣ処理部２４１は、第１の実施の形態のＥＣＣ処理部２４０と同様のものであり、メモリ３００に記憶するデータの誤り訂正符号を生成し、また、メモリ３００から読み出したデータの誤り訂正処理を行うものである。
【０１５５】
なお、その他の構成については上述の第１の実施の形態と同様である。
【０１５６】
［情報処理システムの動作］
図２６は、本技術の第２の実施の形態におけるメモリコントローラ２００のメモリ拡張領域管理タスクによるアドレス変換テーブルブロック入替え処理の手順例を示す流れ図である。この処理手順は、第１の実施の形態におけるステップＳ９７３、Ｓ９７５、Ｓ９６６およびＳ９６８を、以下に説明するステップＳ８７３、Ｓ８７５、Ｓ８６６およびＳ８６８にそれぞれ置き換えたものになる。
【０１５７】
ホストメモリ１２０のデータが最新である場合（ステップＳ９７２：Ｙｅｓ）、コントローラ処理部２１０は、メモリ拡張領域管理テーブル２２１およびアドレス変換テーブルブロック位置情報２２２を参照する。そして、ホストメモリ１２０に保持されているアドレス変換テーブルブロックのデータと「誤り訂正符号」とから、第２ＥＣＣ処理部２５２を使用して誤り検出を行う（ステップＳ８７３）。誤りが検出されない場合には（ステップＳ８７３：Ｎｏ）、コントローラ処理部２１０は、ホストメモリ１２０に保持されているアドレス変換テーブルブロックのデータをメモリ３００に転送して書込みを行う（ステップＳ９７４）。その際、メモリ拡張領域管理テーブル２２１およびアドレス変換テーブルブロック位置情報２２２が参照される。一方、誤りが検出された場合には（ステップＳ９７３：Ｙｅｓ）、コントローラ処理部２１０は、誤り訂正、または、ホストメモリ１２０に保持されているアドレス変換テーブルブロックのデータの再構築処理を行う（ステップＳ８７５）。再構築を行う際には、アドレス変換テーブルブロック番号が指定され、転送先としてメモリ３００が指定される。この誤り訂正または再構築処理の詳細については後述する。
【０１５８】
目的ブロックがメモリ拡張領域１２１に存在する場合（ステップＳ９６５：Ｙｅｓ）、コントローラ処理部２１０は、メモリ拡張領域管理テーブル２２１およびアドレス変換テーブルブロック位置情報２２２を参照する。そして、ホストメモリ１２０に保持されているアドレス変換テーブルブロックのデータと「誤り訂正符号」とから、第２ＥＣＣ処理部２５２を使用して誤り検出を行う（ステップＳ８６６）。誤りが検出されない場合には（ステップＳ８６６：Ｎｏ）、コントローラ処理部２１０は、ホストメモリ１２０に保持されているアドレス変換テーブルブロックのデータを、メモリ拡張領域１２１からコントローラメモリ２２０のアドレス変換テーブル保持領域２２４に対して転送する（ステップＳ９６７）。その際、メモリ拡張領域管理テーブル２２１およびアドレス変換テーブルブロック位置情報２２２が参照される。一方、誤りが検出された場合には（ステップＳ８６６：Ｙｅｓ）、コントローラ処理部２１０は、誤り訂正、または、ホストメモリ１２０に保持されているアドレス変換テーブルブロックのデータの再構築処理を行う（ステップＳ８６８）。再構築を行う際には、アドレス変換テーブルブロック番号が指定され、転送先としてコントローラメモリ２２０が指定される。この誤り訂正または再構築処理の詳細については後述する。
【０１５９】
図２７は、本技術の第２の実施の形態におけるメモリコントローラ２００のメモリ拡張領域管理タスクによる誤り訂正または再構築処理（ステップＳ８６８、Ｓ８７５）の手順例を示す流れ図である。
【０１６０】
コントローラ処理部２１０は、指定されたアドレス変換テーブルブロック番号のデータと「誤り訂正符号」とから、第２ＥＣＣ処理部２５２を使用して誤り訂正可能であるか否かを判別する（ステップＳ８４１）。誤り訂正が可能であれば（ステップＳ８４１：Ｙｅｓ）、コントローラ処理部２１０は、指定されたアドレス変換テーブルブロック番号のデータと「誤り訂正符号」とから、第２ＥＣＣ処理部２５２を使用して誤り訂正を行う（ステップＳ８４２）。そして、コントローラ処理部２１０は、誤り訂正を行ったアドレス変換テーブルのデータを、指定された転送先に転送する（ステップＳ８４３）。
【０１６１】
一方、誤り訂正が不可能な場合には（ステップＳ８４１：Ｎｏ）、コントローラ処理部２１０は、ホストメモリ１２０に保持されているアドレス変換テーブルブロックのデータの再構築処理を行う（ステップＳ８４４）。この再構築処理を行う際は、アドレス変換テーブルブロック番号が指定され、転送先としてメモリ３００が指定される。この再構築処理の内容は、図２２において説明したものと同様である。
【０１６２】
図２８は、本技術の第２の実施の形態におけるメモリコントローラ２００のメモリ拡張領域管理タスクによるフラッシュコマンド処理の手順例を示す流れ図である。この処理手順は、第１の実施の形態におけるステップＳ８３５およびＳ８３６を、以下に説明するステップＳ８５５およびＳ８５６にそれぞれ置き換えたものになる。
【０１６３】
「最新データ」が「コントローラメモリ２２０」でない場合（ステップＳ８３３：Ｎｏ）、コントローラ処理部２１０は、メモリ拡張領域管理テーブル２２１とアドレス変換テーブルブロック位置情報２２２を参照する。そして、ホストメモリ１２０に保持されているアドレス変換テーブルブロックのデータと「誤り訂正符号」とから、第２ＥＣＣ処理部２５２を使用して誤り検出を行う（ステップＳ８５５）。そして、コントローラ処理部２１０は、誤り訂正、または、ホストメモリ１２０に保持されているアドレス変換テーブルブロックのデータの再構築処理を行う（ステップＳ８５６）。再構築を行う際には、アドレス変換テーブルブロック番号が指定され、転送先としてメモリ３００が指定される。この誤り訂正または再構築処理は、図２７において説明したものと同様である。
【０１６４】
このように、本技術の第２の実施の形態によれば、メモリ拡張領域１２１にデータを保持する場合において第２ＥＣＣ処理部２５２を使用して誤り訂正を行うことより、メモリ拡張領域１２１の安全性を確保することができる。
【０１６５】
＜３．第３の実施の形態＞
上述の第１の実施の形態では、チェックサムをメモリコントローラ２００に保持したが、ホストコンピュータ１００のメモリ拡張領域１２１に保持するようにしてもよい。インテグリティ処理を行うためのチェックサムをメモリ拡張領域１２１に保持させた場合、メモリ拡張領域管理テーブル２２１においてチェックサムを管理する必要はない。この第３の実施の形態では、チェックサムをメモリ拡張領域１２１に保持する例について説明する。なお、情報処理システムの全体構成は第１の実施の形態と同様である。
【０１６６】
図２９は、本技術の第３の実施の形態におけるアドレス変換テーブル３１１の構成の一例を示す図である。この第３の実施の形態におけるアドレス変換テーブル３１１は、第１の実施の形態より１つ多い５１３個のアドレス変換テーブルブロックからなる。６４ＫＢのアドレス変換テーブルブロックの各々には、８バイトのチェックサム領域を備える。したがって、１つのアドレス変換テーブルブロックに含まれる「割当状況」および「物理ページ」のエントリの数は２エントリ分、少なくなっている。第５１３番目のアドレス変換テーブルブロック＃５１２には、１０２４エントリの「割当状況」および「物理ページ」が含まれ、８バイトのチェックサム領域のあとは未使用領域となる。
【０１６７】
図３０は、本技術の第３の実施の形態におけるメモリ拡張領域管理テーブル２２１のフィールド構成例を示す図である。この第３の実施の形態におけるメモリ拡張領域管理テーブル２２１は、第１の実施の形態において設けられていた「チェックサム」のフィールドが省かれている。すなわち、この第３の実施の形態では、「チェックサム」はメモリ拡張領域管理テーブル２２１において管理されず、上述のようにアドレス変換テーブル３１１において管理される。
【０１６８】
図３１は、本技術の第３の実施の形態におけるアドレス変換テーブルブロック位置情報２２２のフィールド構成例を示す図である。この第３の実施の形態におけるアドレス変換テーブルブロック位置情報２２２は、「アドレス変換テーブルブロック番号」を「０」から「５１２」までの５１３個分を保持する。これは、上述のアドレス変換テーブル３１１の構成の相違によるものである。
【０１６９】
このように、本技術の第３の実施の形態によれば、メモリ拡張領域１２１にデータを保持する場合において、メモリ拡張領域１２１に保持したチェックサムを利用してインテグリティ処理を行うことより、メモリ拡張領域１２１の安全性を確保することができる。
【０１７０】
＜４．第４の実施の形態＞
上述の第１の実施の形態では、メモリコントローラ２００のインテグリティ処理部２５０においてインテグリティ処理を行っていたが、これをホストコンピュータ１００において行うようにしてもよい。この場合、インテグリティ処理部はホストコンピュータ１００に設けられる。この第４の実施の形態では、ホストコンピュータ１００のデバイスドライバ１０３においてインテグリティ処理を行う。
【０１７１】
上述の第１の実施の形態では、メモリコントローラ２００が、メモリ拡張領域管理テーブル２２１の保持と更新を行ったが、デバイスドライバ１０３によってインテグリティ処理を実行する場合には以下のように分担が異なる。すなわち、デバイスドライバ１０３がメモリ拡張領域管理テーブル１２２の保持および更新を行い、メモリコントローラ２００がメモリ拡張領域インデックス番号管理テーブル２２８の保持および更新を行う。
【０１７２】
図３２は、本技術の第４の実施の形態におけるメモリ拡張領域インデックス番号管理テーブル２２８のフィールド構成例を示す図である。このメモリ拡張領域インデックス番号管理テーブル２２８は、メモリコントローラ２００のコントローラメモリ２２０に設けられる。このメモリ拡張領域インデックス番号管理テーブル２２８は、「インデックス番号」および「使用状況」の各フィールドを備える。「インデックス番号」は、メモリ拡張領域１２１を１６分割したインデックスに付与された番号である。「使用状況」は、ホストメモリ１２０に確保したメモリ拡張領域１２１に、管理単位ごとに有効なデータが置かれているか否かを示すフィールドである。これらは、第１の実施の形態におけるメモリ拡張領域管理テーブル２２１の同名のものと同様である。
【０１７３】
図３３は、本技術の第４の実施の形態におけるメモリ拡張領域管理テーブル１２２のフィールド構成例を示す図である。このメモリ拡張領域管理テーブル１２２は、ホストコンピュータ１００のホストメモリ１２０に設けられる。このメモリ拡張領域管理テーブル１２２は、「インデックス番号」、「分割数」、「開始アドレス」、「サイズ」、「チェックサム」の各フィールドを備える。すなわち、第４の実施の形態におけるメモリ拡張領域管理テーブル２２１から「使用状況」のフィールドを削除したものとなる。「使用状況」は、メモリコントローラ２００におけるメモリ拡張領域インデックス番号管理テーブル２２８によって管理される。
【０１７４】
［情報処理システムの動作］
図３４は、本技術の第４の実施の形態におけるホストコンピュータ１００のデバイスドライバ１０３による初期化処理の手順例を示す流れ図である。この第４の実施の形態における処理手順は、第１の実施の形態とは以下の点で異なり、これ以外については第１の実施の形態と同様である。
【０１７５】
ホスト処理部１１０は、メモリ拡張領域１２１の取得に成功した場合に（ステップＳ９１６：Ｙｅｓ）、ステップＳ７１７以降の処理を行う。ホスト処理部１１０は、取得したメモリ拡張領域１２１のサイズに合わせてメモリ拡張領域管理テーブル１２２をホストメモリ１２０上に作成する（ステップＳ７１７）。そして、取得したメモリ拡張領域１２１に合わせて、ホストメモリ１２０のアドレスの値の小さい順にインデックス番号を「０」から割り当て、分割数、開始アドレス、サイズの値を設定し、チェックサムを「０ｘＦＦＦＦＦＦＦＦ」とする。
【０１７６】
ホスト処理部１１０は、取得したメモリ拡張領域１２１のアドレスおよびサイズをメモリコントローラ２００に通知する（ステップＳ９１７）。このとき、ホスト処理部１１０は、メモリコントローラ２００に、取得したメモリ拡張領域１２１を割り当てたインデックス番号を通知する。そして、ホスト処理部１１０は、メモリコントローラ２００からの通知応答（ＡＣＫ）を待つ（ステップＳ７１９）。
【０１７７】
図３５は、本技術の第４の実施の形態におけるメモリコントローラ２００のメモリ拡張領域管理タスクによる領域取得通知受信処理の手順例を示す流れ図である。
【０１７８】
コントローラ処理部２１０は、領域取得通知により通知されたメモリ拡張領域１２１のインデックス番号を取得する（ステップＳ７３１）。
【０１７９】
コントローラ処理部２１０は、コントローラメモリ２２０上に、メモリ拡張領域インデックス番号管理テーブル２２８とアドレス変換テーブルブロック位置情報２２２を作成して、初期化を行う（ステップＳ７３４）。メモリ拡張領域インデックス番号管理テーブル２２８の初期化において、取得したメモリ拡張領域のインデックス番号の数に合わせてメモリ拡張領域インデックス番号管理テーブル２２８をコントローラメモリ２２０上に作成する。そして、作成した全てのエントリの「使用状況」を「未使用」とする。
【０１８０】
その後、コントローラ処理部２１０は、ホストコンピュータ１００にＡＣＫを送信する（ステップＳ７３６）。
【０１８１】
図３６は、本技術の第４の実施の形態におけるメモリコントローラ２００のメモリ拡張領域管理タスクによるメモリ３００からメモリ拡張領域１２１へのデータ転送処理の手順例を示す流れ図である。
【０１８２】
コントローラ処理部２１０は、メモリ３００からホストメモリ１２０のメモリ拡張領域１２１に転送するアドレス変換テーブルを決定する（ステップＳ７４１）。コントローラ処理部２１０は、メモリ拡張領域インデックス番号管理テーブル２２８の「使用状況」が「未使用」となっているインデックス番号のうち、最も値の小さいインデックス番号を選択する。コントローラ処理部２１０は、転送を行うデータとして、アクセス頻度の値が大きく、ホストメモリ１２０に転送されていないアドレス変換テーブルブロックを選択する。
【０１８３】
コントローラ処理部２１０は、ステップＳ７４１で決定した、データの転送先となるメモリ拡張領域１２１のインデックス番号と、転送されるデータとなるアドレス変換テーブルブロックの番号を指定して、データ転送処理を実行する（ステップＳ７５０）。このメモリ３００からホストメモリ１２０へのデータ転送処理の手順については後述する。
【０１８４】
コントローラ処理部２１０は、メモリ拡張領域インデックス番号管理テーブル２２８と、アドレス変換テーブルブロック位置情報２２２の更新を行う（ステップＳ７４３）。コントローラ処理部２１０は、転送先として指定したメモリ拡張領域管理テーブル２２１のインデックス番号の「使用状況」を「使用中」に設定。コントローラ処理部２１０は、アドレス変換テーブルブロック位置情報２２２の「メモリ拡張領域インデックス番号」に、ステップＳ７４１において選択したメモリ拡張領域インデックス番号を設定する。
【０１８５】
コントローラ処理部２１０は、メモリ拡張領域インデックス番号管理テーブル２２８の「使用状況」が「未使用」となっているエントリの有無を判別する（ステップＳ７４４）。「未使用」となっているエントリが存在する場合には（ステップＳ７４４：Ｙｅｓ）、ステップＳ７４１以降の処理を繰り返す。「未使用」となっているエントリが存在しなくなると（ステップＳ７４４：Ｎｏ）、このデータ転送処理を終了する。
【０１８６】
図３７は、本技術の第４の実施の形態におけるメモリコントローラ２００のメモリ拡張領域管理タスクによるメモリ３００からホストメモリ１２０へのデータ転送処理（ステップＳ７５０）の手順例を示す流れ図である。
【０１８７】
コントローラ処理部２１０は、デバイスドライバ１０３に対して、データ転送処理の指示の際に指定されたメモリ拡張領域のインデックス番号を指定し、ホストメモリ１２０のアドレスの通知指示を行う。これにより、コントローラ処理部２１０は、デバイスドライバ１０３からアドレス変換テーブルの転送先のアドレスを取得する（ステップＳ７５１）。
【０１８８】
コントローラ処理部２１０は、データ転送処理の指示の際に指定された番号のアドレス変換テーブルブロックをメモリ３００から読み出して、取得したホストメモリ１２０のメモリ拡張領域１２１のアドレスに対してデータ転送を行う（ステップＳ７５２）。
【０１８９】
コントローラ処理部２１０は、ステップＳ７４１において選択したメモリ拡張領域１２１のインデックス番号を指定して、チェックサムの算出指示をする（ステップＳ７５３）。デバイスドライバ１０３は、指定されたメモリ拡張領域１２１のインデックス番号に保持されているデータからチェックサムを算出して、メモリ拡張領域管理テーブル１２２に保持する。
【０１９０】
図３８は、本技術の第４の実施の形態におけるメモリコントローラ２００のメモリ拡張領域管理タスクによるリードコマンド処理のアドレス変換テーブルブロック入替え処理（ステップＳ９６０）の手順例を示す流れ図である。この第４の実施の形態におけるアドレス変換テーブルブロック入替え処理手順は、第１の実施の形態とは以下の点で異なり、これ以外については第１の実施の形態と同様である。
【０１９１】
コントローラ処理部２１０は、コントローラメモリ２２０からホストメモリ１２０へのデータ転送処理を実行する（ステップＳ７６３）。このとき、アドレス変換テーブルブロック入れ替え処理の実行の際に指定されたアドレス変換テーブルブロック番号のデータが存在するメモリ拡張領域１２１のインデックス番号と、転送元となるコントローラメモリ２２０のインデックス番号とが指定される。このデータ転送処理の詳細については後述する。
【０１９２】
コントローラ処理部２１０は、チェックサムの算出と比較の指示をする（ステップＳ７７３）。このとき、コントローラメモリ２２０に保持されているアドレス変換テーブルブロックよりも低いアクセス頻度であって、最もアクセス頻度の低いブロック番号が存在する、ホストメモリ１２０のメモリ拡張領域１２１のインデックス番号が指定される。デバイスドライバ１０３は、指定されたメモリ拡張領域１２１のインデックス番号に保持されているデータからチェックサムを算出して、メモリ拡張領域管理テーブル１２２で保持しているチェックサムと比較して、その結果をメモリコントローラ２００に返す。
【０１９３】
コントローラ処理部２１０は、コントローラメモリ２２０からホストメモリ１２０へのデータ転送処理を実行する（ステップＳ７７８）。このとき、アドレス変換テーブルブロック入れ替え処理の実行の際に指定されたアドレス変換テーブルブロック番号のデータが存在するメモリ拡張領域１２１のインデックス番号と、転送元となるコントローラメモリ２２０のインデックス番号とが指定される。このデータ転送処理の詳細については後述する。
【０１９４】
コントローラ処理部２１０は、チェックサムの算出と比較の指示をする（ステップＳ７６６）。このとき、アドレス変換テーブルブロック入れ替え処理の実行の際に指定されたアドレス変換テーブルブロック番号のデータが存在する、メモリ拡張領域１２１のインデックス番号が指定される。デバイスドライバ１０３は、指定されたメモリ拡張領域１２１のインデックス番号に保持されているデータからチェックサムを算出して、メモリ拡張領域管理テーブル１２２で保持しているチェックサムと比較して、その結果をメモリコントローラ２００に返す。
【０１９５】
図３９は、本技術の第４の実施の形態におけるメモリコントローラ２００のメモリ拡張領域管理タスクによるコントローラメモリ２２０からホストメモリ１２０へのデータ転送処理（ステップＳ７６３、Ｓ７７８）の手順例を示す流れ図である。このデータ転送処理を実行する際には、データの転送先となるメモリ拡張領域１２１のインデックス番号と、転送元となるアドレス変換テーブルブロックが存在するコントローラメモリ２２０のインデックス番号とが指定されていることを想定する。
【０１９６】
コントローラ処理部２１０は、デバイスドライバ１０３に対して、このデータ転送処理の実行の際に指定されたメモリ拡張領域１２１のインデックス番号を指定して、ホストメモリ１２０のアドレスの通知指示を行う。これにより、コントローラ処理部２１０は、デバイスドライバ１０３から、アドレス変換テーブルの転送先のアドレスを取得する（ステップＳ７８１）。
【０１９７】
コントローラ処理部２１０は、ステップＳ７８１で取得したホストメモリ１２０のメモリ拡張領域１２１のアドレスに対してデータ転送を行う（ステップＳ７８２）。このとき、転送対象データとなるのは、このデータ転送処理の実行の際に指定されたアドレス変換テーブルブロックが存在するコントローラメモリ２２０のインデックス番号のアドレス変換テーブルブロックのデータである。
【０１９８】
コントローラ処理部２１０は、ステップＳ７８１で選択したメモリ拡張領域のインデックス番号を指定し、チェックサムの算出指示をする（ステップＳ７８３）。デバイスドライバ１０３は、指定されたメモリ拡張領域１２１のインデックス番号に保持されているデータからチェックサムを算出して、メモリ拡張領域管理テーブル１２２に保持する。
【０１９９】
このように、本技術の第４の実施の形態では、メモリ拡張領域１２１にデータを保持する場合において、メモリ拡張領域管理テーブル１２２に保持したチェックサムを用いてデバイスドライバ１０３がインテグリティ処理を行う。これにより、ホストコンピュータ１００においてメモリ拡張領域１２１の安全性を確保することができる。
【０２００】
なお、上述の実施の形態は本技術を具現化するための一例を示したものであり、実施の形態における事項と、特許請求の範囲における発明特定事項とはそれぞれ対応関係を有する。同様に、特許請求の範囲における発明特定事項と、これと同一名称を付した本技術の実施の形態における事項とはそれぞれ対応関係を有する。ただし、本技術は実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において実施の形態に種々の変形を施すことにより具現化することができる。
【０２０１】
また、上述の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよく、また、これら一連の手順をコンピュータに実行させるためのプログラム乃至そのプログラムを記憶する記録媒体として捉えてもよい。この記録媒体として、例えば、ＣＤ（Compact Disc）、ＭＤ（MiniDisc）、ＤＶＤ（Digital Versatile Disc）、メモリカード、ブルーレイディスク（Blu-ray（登録商標）Disc）等を用いることができる。
【０２０２】
なお、本明細書に記載された効果はあくまで例示であって、限定されるものではなく、また、他の効果があってもよい。
【０２０３】
なお、本技術は以下のような構成もとることができる。
（１）メモリに割り当てられた領域に対応するデータを、前記メモリを制御するメモリコントローラにおいて記憶するコントローラメモリと、
前記コントローラメモリの一部の領域をホストコンピュータにおけるホストメモリに割り当ててメモリ拡張領域として使用するコントローラ処理部と、
前記メモリ拡張領域にデータを記憶するために誤り検出符号を生成し、前記メモリ拡張領域から読み出したデータについて前記誤り検出符号に基づいて誤りを検出するインテグリティ処理部と
を具備するメモリコントローラ。
（２）前記インテグリティ処理部は、前記誤りを検出した場合には前記メモリに記憶されるデータから前記コントローラメモリ上において対応するデータを再構築する前記（１）に記載のメモリコントローラ。
（３）前記コントローラ処理部は、前記メモリに割り当てられた領域に対応するデータとして最も新しいデータが記憶されている位置情報を管理して、前記コントローラメモリ上のデータを削除して空き領域を確保する際に、その削除対象データに対応するデータが前記メモリ拡張領域に存在して、前記コントローラメモリ上のデータが最も新しいデータである旨を前記位置情報が示す場合には、前記コントローラメモリから前記メモリ拡張領域にデータを転送する前記（１）または（２）に記載のメモリコントローラ。
（４）前記コントローラ処理部は、前記メモリに割り当てられた領域に対応するデータとして最も新しいデータが記憶されている位置情報を管理して、前記コントローラメモリ上のデータを削除して空き領域を確保する際に、その削除対象データに対応するデータが前記メモリ拡張領域に存在せず、前記コントローラメモリ上のデータが最も新しいデータである旨を前記位置情報が示す場合には、前記コントローラメモリから前記メモリにデータを転送する前記（１）または（２）に記載のメモリコントローラ。
（５）前記コントローラ処理部は、前記メモリに割り当てられた領域に対応するデータとして最も新しいデータが記憶されている位置情報を管理するとともに、前記メモリに割り当てられた領域に対応するデータについて部分領域毎の使用頻度を管理して、前記コントローラメモリ上のデータを削除して空き領域を確保する際に、その削除対象データに対応するデータを記憶する前記メモリ拡張領域が前記コントローラメモリよりも使用頻度の低い部分領域である旨を前記使用頻度が示し、かつ、前記メモリ拡張領域上のデータが最も新しいデータである旨を前記位置情報が示す場合には、前記メモリ拡張領域から前記メモリにデータを転送する前記（１）または（２）に記載のメモリコントローラ。
（６）メモリと、
前記メモリに割り当てられた領域に対応するデータを、前記メモリを制御するメモリコントローラにおいて記憶するコントローラメモリと、
前記コントローラメモリの一部の領域をホストコンピュータにおけるホストメモリに割り当ててメモリ拡張領域として使用するコントローラ処理部と、
前記メモリ拡張領域にデータを記憶するために誤り検出符号を生成し、前記メモリ拡張領域から読み出したデータについて前記誤り検出符号に基づいて誤りを検出するインテグリティ処理部と
を具備する記憶装置。
（７）メモリと、
前記メモリに割り当てられた領域に対応するデータを、前記メモリを制御するメモリコントローラにおいて記憶するコントローラメモリと、
前記メモリに対するコマンドを発行するホストコンピュータと、
前記コントローラメモリの一部の領域を前記ホストコンピュータにおけるホストメモリに割り当ててメモリ拡張領域として使用するコントローラ処理部と、
前記メモリ拡張領域にデータを記憶するために誤り検出符号を生成し、前記メモリ拡張領域から読み出したデータについて前記誤り検出符号に基づいて誤りを検出するインテグリティ処理部と
を具備する情報処理システム。
（８）前記ホストコンピュータは、前記メモリコントローラから前記メモリ拡張領域の容量に関する情報を取得するコマンドを前記メモリコントローラに発行する前記（７）に記載の情報処理システム。
（９）前記ホストコンピュータは、前記メモリ拡張領域に記憶されるデータを前記メモリに記憶させるコマンドを前記メモリコントローラに発行する前記（７）または（８）に記載の情報処理システム。
【符号の説明】
【０２０４】
１００  ホストコンピュータ
１０１  アプリケーションプログラム
１０２  ホストＯＳ
１０３  デバイスドライバ
１１０  ホスト処理部
１２０  ホストメモリ
１２１  メモリ拡張領域
１２２  メモリ拡張領域管理テーブル
１７０  コントローラインターフェース
１９０  ホストバス
２００  メモリコントローラ
２１０  コントローラ処理部
２２０  コントローラメモリ
２２１  メモリ拡張領域管理テーブル
２２２  アドレス変換テーブルブロック位置情報
２２３  アクセス頻度情報テーブル
２２４  アドレス変換テーブル保持領域
２２５  代替ページ管理テーブル
２２６  アドレス変換テーブル再構築領域
２２７  未割当メモリ拡張領域管理テーブル
２２８  メモリ拡張領域インデックス番号管理テーブル
２４０  ＥＣＣ処理部
２４１  第１ＥＣＣ処理部
２５０  インテグリティ処理部
２５２  第２ＥＣＣ処理部
２７０  ホストインターフェース
２８０  メモリインターフェース
２９０  コントローラバス
３００  メモリ
３１０  メモリセルアレイ
３１１  アドレス変換テーブル
３１２  アドレス変換テーブルブロックアクセス頻度情報
３１３  不良ページ管理テーブル
３１４  代替ページ管理テーブル
３２０  メモリセルアレイ制御部
３３０  アドレスデコーダ
３４０  データバッファ
３７０  コントローラインターフェース
３９０  メモリバス
４００  記憶装置
【図１】
2016118945.tif 000003
【図２】
2016118945.tif 000004
【図３】
2016118945.tif 000005
【図４】
2016118945.tif 000006
【図５】
2016118945.tif 000007
【図６】
2016118945.tif 000008
【図７】
2016118945.tif 000009
【図８】
2016118945.tif 000010
【図９】
2016118945.tif 000011
【図１０】
2016118945.tif 000012
【図１１】
2016118945.tif 000013
【図１２】
2016118945.tif 000014
【図１３】
2016118945.tif 000015
【図１４】
2016118945.tif 000016
【図１５】
2016118945.tif 000017
【図１６】
2016118945.tif 000018
【図１７】
2016118945.tif 000019
【図１８】
2016118945.tif 000020
【図１９】
2016118945.tif 000021
【図２０】
2016118945.tif 000022
【図２１】
2016118945.tif 000023
【図２２】
2016118945.tif 000024
【図２３】
2016118945.tif 000025
【図２４】
2016118945.tif 000026
【図２５】
2016118945.tif 000027
【図２６】
2016118945.tif 000028
【図２７】
2016118945.tif 000029
【図２８】
2016118945.tif 000030
【図２９】
2016118945.tif 000031
【図３０】
2016118945.tif 000032
【図３１】
2016118945.tif 000033
【図３２】
2016118945.tif 000034
【図３３】
2016118945.tif 000035
【図３４】
2016118945.tif 000036
【図３５】
2016118945.tif 000037
【図３６】
2016118945.tif 000038
【図３７】
2016118945.tif 000039
【図３８】
2016118945.tif 000040
【図３９】
2016118945.tif 000041