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