以下、本技術を実施するための形態(以下、実施の形態と称する)について説明する。説明は以下の順序により行う。
1.第1の実施の形態(誤り検出符号としてCRCを使用する例)
2.第2の実施の形態(誤り検出符号としてECCを使用する例)
3.第3の実施の形態(誤り検出符号をホストメモリに記憶する例)
4.第4の実施の形態(ホストコンピュータがインテグリティをチェックする例)
<1.第1の実施の形態>
[情報処理システムの構成]
図1は、本技術の実施の形態における情報処理システムの全体構成例を示す図である。この情報処理システムは、ホストコンピュータ100と、メモリコントローラ200と、メモリ300とから構成される。メモリコントローラ200およびメモリ300は記憶装置400を構成する。
ホストコンピュータ100は、メモリ300に対してデータのリード処理、ライト処理またはリフレッシュ処理等を要求するコマンドを発行するものである。
メモリコントローラ200は、ホストコンピュータ100と通信してコマンドを受信し、メモリ300へのデータ書込みおよびメモリ300からのデータ読出しを実行するものである。メモリコントローラ200は、ライトコマンドを受信した場合、ホストコンピュータ100から受信したデータを、メモリ300に書き込むよう指示する。また、メモリコントローラ200は、リードコマンドを受信した場合、メモリ300からデータを読み出してホストコンピュータ100に転送する。また、メモリコントローラ200は、リフレッシュコマンドを受信した場合、メモリ300からデータを読み出して、その読み出したデータを再びメモリ300に書き直すよう指示する。
図2は、本技術の実施の形態におけるホストコンピュータ100の構成例を示す図である。このホストコンピュータ100は、ホスト処理部110と、ホストメモリ120と、コントローラインターフェース170とを備える。これらはホストバス190によって相互に接続される。
ホスト処理部110は、ホストコンピュータ100全体の制御を行うものである。このホスト処理部110は、ホストメモリ120に格納されたソフトウェアを実行する。このホスト処理部110は、ホストメモリ120をコード領域およびデータ領域として使用して動作する。
ホストメモリ120は、ホスト処理部110が実行するソフトウェアのコード領域およびデータ領域を記憶するメモリである。また、このホストメモリ120には、メモリコントローラ200の起動時に、メモリコントローラ200が使用可能な領域として、メモリ拡張領域121が確保される。
コントローラインターフェース170は、メモリコントローラ200との間のやりとりを行うインターフェースである。コントローラインターフェース170は、メモリコントローラ200と接続され、メモリコントローラ200に対するコマンドの送信、および、メモリコントローラ200とのデータの受送信を実行するものである。
図3は、本技術の実施の形態におけるホストコンピュータ100上で動作するソフトウェアの階層構造の一例を示す図である。ここでは、ソフトウェアの上位階層からアプリケーションプログラム101、ホストOS102、および、デバイスドライバ103を想定する。
アプリケーションプログラム101は、最上位階層のソフトウェアである。このアプリケーションプログラム101は、ホストOS102に対して、メモリ300からのデータ読出し、または、メモリ300からのデータ書込みを指示し、ホストOS102からの応答を受け取る。
ホストOS102は、アプリケーションプログラム101とデバイスドライバ103との間の橋渡しを行うOS(Operating System)である。このホストOS102は、デバイスドライバ103に対して、メモリ300からのデータ読出し、または、メモリ300からのデータ書込みを指示し、デバイスドライバ103からの応答を受け取る。さらに、ホストOS102は、デバイスドライバ103からメモリ拡張領域121の取得要求を受け取り、メモリ拡張領域121として使用可能なメモリ領域を、デバイスドライバ103にその応答として返す。
デバイスドライバ103は、ハードウェアを制御するソフトウェアである。このデバイスドライバ103は、メモリコントローラ200に対して、メモリ300からのデータ読出し、または、メモリ300からのデータ書込みを指示し、メモリコントローラ200からの応答を受け取る。さらに、このデバイスドライバ103は、ホストOS102に、メモリ拡張領域121の取得要求を行い、メモリ拡張領域121として使用可能なメモリ領域をホストOS102からその応答として受け取る。
図4は、本技術の第1の実施の形態におけるメモリコントローラ200の構成例を示す図である。このメモリコントローラ200は、コントローラ処理部210と、コントローラメモリ220と、ROM230と、ECC処理部240と、インテグリティ処理部250と、ホストインターフェース270と、メモリインターフェース280とを備える。これらはコントローラバス290によって相互に接続される。
コントローラ処理部210は、メモリコントローラ200全体の制御を行うものである。このコントローラ処理部210は、コントローラメモリ220に格納されたソフトウェアを実行する。このコントローラ処理部210は、コントローラメモリ220をコード領域およびデータ領域として使用して動作する。
コントローラメモリ220は、コントローラ処理部210が実行するソフトウェアのコード領域およびデータ領域を記憶するメモリである。また、コントローラメモリ220は、ユーザデータを管理するためのテーブルを展開するための領域としても使用される。これらテーブルの詳細については後述する。
ROM230は、メモリコントローラ200におけるメモリ拡張機能のパラメータを記憶する読出し専用メモリである。
ECC処理部240は、メモリ300に記憶するデータの誤り訂正符号(ECC:Error Correcting Code)を生成し、また、メモリ300から読み出したデータの誤り訂正処理を行うものである。
インテグリティ処理部250は、メモリ拡張領域121に記憶するデータのインテグリティ確認のための誤り検出符号としてチェックサムを生成するものである。また、このインテグリティ処理部250は、メモリ拡張領域121から読み出したデータの誤り検出符号としてのチェックサムを使って誤り検出を行う。すなわち、このインテグリティ処理部250は、メモリ拡張領域121に記憶するデータのインテグリティ確認を行うものである。この実施の形態では、チェックサム生成アルゴリズムとして、CRC(Cyclic Redundancy Check)を使用することを想定する。ただし、CRCに限定せず、セキュアハッシュ等のアルゴリズムを用いるようにしてもよい。
ホストインターフェース270は、ホストコンピュータ100との間のやりとりを行うインターフェースである。メモリインターフェース280は、メモリ300との間のやりとりを行うインターフェースである。
コントローラ処理部210上では、制御タスク、コマンド実行タスク、メモリ拡張領域管理タスクが動作する。制御タスクにおいて、ホストコンピュータ100からコマンドを受信すると、そのコマンドをデコードする。そして、メモリ300からデータを読み出すリードコマンドや、メモリ300に対してデータを書き込むライトコマンドの場合には、コマンド実行タスクを呼び出して、対応する処理を行う。メモリ拡張領域121に関連するコマンドである場合には、メモリ拡張領域管理タスクを呼び出して、対応する処理を行う。
図5は、本技術の実施の形態におけるメモリ300の構成例を示す図である。このメモリ300は、メモリセルアレイ310と、メモリセルアレイ制御部320と、アドレスデコーダ330と、データバッファ340と、コントローラインターフェース370とを備える。メモリセルアレイ制御部320、アドレスデコーダ330およびデータバッファ340は、メモリセルアレイ310と接続し、また、メモリバス390を介してコントローラインターフェース370と接続する。
メモリセルアレイ310は、データを記憶するメモリセルをアレイ状に集積した記憶素子である。メモリセルアレイ制御部320は、メモリセルアレイ310に対する制御を実行するものである。アドレスデコーダ330は、メモリセルアレイ310に対するアドレスをデコードするデコーダである。データバッファ340は、メモリセルアレイ310にアクセスするためのバッファである。コントローラインターフェース370は、メモリコントローラ200との間のやりとりを行うインターフェースである。
図6は、本技術の実施の形態におけるメモリ階層の概要を示す図である。メモリコントローラ200は、メモリ300のメモリセルアレイ310に割り当てられた領域に対応するデータを読み出して、コントローラメモリ220に記憶する。メモリコントローラ200は、コントローラメモリ220に記憶したデータの一部を、ホストコンピュータ100のホストメモリ120に割り当てて、メモリ拡張領域121として使用する。
メモリ拡張領域121にデータを記憶するために、インテグリティ処理部250によってチェックサムが生成される。また、メモリ拡張領域121から読み出したデータについて、チェックサムがインテグリティ処理部250によってチェックされ、誤りが検出され、インテグリティ確認が行われる。チェックサムは、メモリ拡張領域121にデータを記憶する直前に生成されてもよく、また、コントローラメモリ220等を利用して更新のたびに生成されてもよい。
[メモリの記憶領域]
図7は、本技術の実施の形態におけるメモリセルアレイ310の記憶領域の一例を示す図である。
物理アドレス0x000000(「0x」に続く数字は16進数を意味する。以下同様。)から0x80FFFFまでの領域はデータ領域であり、ホストコンピュータ100からのライトコマンドによって転送されるデータが記録される。物理アドレス0x810000から0x83FFFFまでの領域は管理データ領域であり、メモリコントローラ200が使用するユーザ領域のデータを管理するためのテーブルが記録される。
ユーザデータを管理するためのテーブルには、アドレス変換テーブル311と、アドレス変換テーブルブロックアクセス頻度情報312と、不良ページ管理テーブル313と、代替ページ管理テーブル314とが含まれる。アドレス変換テーブル311は、論理アドレスから物理アドレスに変換するためのテーブルである。アドレス変換テーブルブロックアクセス頻度情報312は、アドレス変換テーブル311のアクセス頻度をブロック毎に保持するものである。不良ページ管理テーブル313は、故障や不良等により、データの書込みまたは読出しができなくなったメモリ300の物理アドレスを記録するためのテーブルである。代替ページ管理テーブル314は、代替ページを管理するためのテーブルである。
図8は、本技術の実施の形態におけるメモリセルアレイ310のページ構成の一例を示す図である。
物理アドレスは、520バイトの物理ページを単位としてメモリセルアレイ310に割り振られる。メモリ300に対する書込みおよびメモリ300からの読出しは、物理ページ単位に実行される。
1つの物理ページに書き込まれるデータは、512バイトのデータと、データに付属する8バイトの冗長部とから構成される。さらに、冗長部は、1バイトの識別子と、3バイトの論理アドレスと、4バイトのECCとから構成される。
識別子は、512バイトのデータを識別するために使用される。識別子が00h(「h」の直前の数字は16進数を意味する。以下同様。)の場合、ホストコンピュータ100からのライトコマンドを受けて受信したユーザデータであることを意味する。識別子が01hの場合、アドレス変換テーブル311であることを意味する。識別子が02hの場合、アドレス変換テーブルブロックアクセス頻度情報312であることを意味する。識別子が03hの場合、不良ページ管理テーブル313であることを意味する。識別子が04hの場合、代替ページ管理テーブル314であることを意味する。識別子がFFhの場合、そのページは未使用であることを意味する。
図9は、本技術の実施の形態におけるアドレス変換テーブル311の構成の一例を示す図である。
ホストコンピュータ100のホスト処理部110で動作するアプリケーションプログラム101またはホストOS102は、メモリ300に対してデータの読出しまたはデータの書込みの指示をする際、データの位置情報を示すために、論理アドレスを用いる。一方、メモリコントローラ200は、メモリ300に対してデータの読出しまたはデータの書込みを要求する際、データの位置情報を示すために、物理アドレスを用いる。
メモリコントローラ200は、論理アドレスを物理アドレスに変換するためにアドレス変換テーブル311を備え、このアドレス変換テーブル311を使用してホストコンピュータ100から受信した論理アドレスを物理アドレスに変換する。そして、メモリコントローラ200は、この物理アドレスを用いてメモリ300に対するデータの読出しまたは書込みを指示する。メモリコントローラ200は、アドレス変換テーブル311を使用することにより、書込み不良が発生した物理ページを排除するための処理や、データの書換え回数を平準化するための処理を行う。
論理ページのデータサイズは512B(バイト)であり、1つの論理ページに対して1つの物理ページが割り当てられる。アドレス変換テーブル311には、論理ページ毎に、物理ページが割り当てられているか否かを示す1バイトの「割当状況」と、割り当てられた「物理ページアドレス」を示す3バイトの情報とが保持される。「割当状況」が「割当済」を示す場合には割り当てられた物理ページアドレスの値は有効であり、「割当状況」が「未割当」を示す場合には割り当てられた物理ページアドレスの値は無効である。
メモリコントローラ200が、メモリ300からアドレス変換テーブル311の読出しおよびメモリ300へのアドレス変換テーブル311の書込みを行う単位を「アドレス変換テーブルブロック」と称する。1つのアドレス変換テーブルブロックは64KBであり、16348ページの「割当状況」と「物理ページアドレス」とが格納される。
アプリケーションプログラム101またはホストOS102が、メモリ300に記録可能な総データサイズは4GBであるため、アドレス変換テーブルブロックの総数は512ブロックであり、総サイズは32MBである。
[コントローラメモリに保持されるテーブル群]
図10は、本技術の実施の形態におけるコントローラメモリ220に保持されるテーブル群の一例を示す図である。ここでは、コントローラメモリ220に保持されるテーブル群として、メモリ拡張領域管理テーブル221、アドレス変換テーブルブロック位置情報222、および、アクセス頻度情報テーブル223が示されている。さらに、アドレス変換テーブル保持領域224、代替ページ管理テーブル225、アドレス変換テーブル再構築領域226、および、未割当メモリ拡張領域管理テーブル227が示されている。
メモリ拡張領域管理テーブル221は、メモリ拡張領域121の使用状況を管理するためのテーブルである。アドレス変換テーブルブロック位置情報222は、アドレス変換テーブル311のアドレス変換テーブルブロック毎の格納位置を示すテーブルである。アクセス頻度情報テーブル223は、アドレス変換テーブル311のアドレス変換テーブルブロック毎のアクセス頻度を示すテーブルである。アドレス変換テーブル保持領域224は、メモリ300上のアドレス変換テーブル311のコピーをコントローラメモリ220に保持するための領域である。
代替ページ管理テーブル225は、論理アドレスに割り当てられていない物理ページのアドレスのリストを保持するためのテーブルである。この代替ページ管理テーブル225から未使用のページアドレスを取得する際には、アドレスの値が最も小さい値から順に取得する。
アドレス変換テーブル再構築領域226は、インテグリティ確認に失敗したアドレス変換テーブル311のコピーをコントローラメモリ220上に再構築するための領域である。未割当メモリ拡張領域管理テーブル227は、メモリ拡張領域121として使用可能なメモリ領域としてデバイスドライバ103から通知されながら、メモリコントローラ200が使用しないメモリ領域のアドレスを保持するためのテーブルである。
図11は、本技術の実施の形態におけるメモリ拡張領域管理テーブル221のフィールド構成例を示す図である。このメモリ拡張領域管理テーブル221は、「インデックス番号」、「使用状況」、「分割数」、「開始アドレス」、「サイズ」、「チェックサム」の各フィールドを備える。
「インデックス番号」は、メモリ拡張領域121を16分割したインデックスに付与された番号である。メモリコントローラ200は、このインデックスを管理単位として、メモリ拡張領域121にアクセスする。この実施の形態では、管理単位を32KBとする。
「使用状況」は、ホストメモリ120に確保したメモリ拡張領域121に、管理単位ごとに有効なデータが置かれているか否かを示すフィールドである。「使用状況」が「使用中」を示す場合にはメモリ拡張領域121に有効なデータが置かれており、「未使用」を示す場合にはメモリ拡張領域121に有効なデータが置かれていないことを意味する。
「分割数」は、メモリ拡張領域121の管理単位において、ホストメモリ120の物理アドレス空間内でさらに分割されている数を示すフィールドである。連続した物理アドレスが確保されている場合には、「分割数」は「1」を示す。
「開始アドレス」は、該当するインデックスに対応するメモリ拡張領域121として使用可能な領域の開始アドレスを物理アドレスにより示すフィールドである。「サイズ」は、該当するインデックスに対応するメモリ拡張領域121として使用可能な領域のサイズを示すフィールドである。1つのインデックスに対して、「分割数」により示される値と同一の数の「開始アドレス」および「サイズ」が保持される。
「チェックサム」は、該当するインデックス毎に生成されたチェックサムを示すフィールドである。この「チェックサム」は、メモリ拡張領域121にデータを転送する際に生成して保持し、メモリ拡張領域121からデータを転送する際に確認するために使用される。
図12は、本技術の実施の形態におけるアドレス変換テーブルブロック位置情報222のフィールド構成例を示す図である。このアドレス変換テーブルブロック位置情報222は、「アドレス変換テーブルブロック番号」、「最新データ」、「コントローラメモリインデックス番号」、「メモリ拡張領域インデックス番号」の各フィールドを備える。
「アドレス変換テーブルブロック番号」は、アドレス変換テーブル311のアドレス変換テーブルブロックの番号を示すフィールドである。
「最新データ」は、最新のアドレス変換テーブルブロックのデータが保持されているメモリを示すフィールドである。対象となるメモリとして、「ホストメモリ」、「コントローラメモリ」、「メモリ」の何れかが示される。
「コントローラメモリインデックス番号」は、アドレス変換テーブルブロックのデータがコントローラメモリ220に保持されている場合に、コントローラメモリ220に保持されているインデックスの番号を示すフィールドである。この実施の形態では、コントローラメモリ220に保持されるアドレス変換テーブルブロックのデータは1つを想定しているため、「0x00」を示すことになる。一方、「0xFF」であれば、無効な値を示す。
「メモリ拡張領域インデックス番号」は、アドレス変換テーブルブロックのデータがメモリ拡張領域121に保持されている場合に、メモリ拡張領域121に保持されているインデックスの番号を示すフィールドである。
図13は、本技術の実施の形態におけるアクセス頻度情報テーブル223のフィールド構成例を示す図である。このアクセス頻度情報テーブル223は、「アドレス変換テーブルブロック番号」および「アクセス頻度」の各フィールドを備える。
「アドレス変換テーブルブロック番号」は、アドレス変換テーブル311のアドレス変換テーブルブロックの番号を示すフィールドである。
「アクセス頻度」は、そのブロックにアクセスされた回数を示すフィールドである。この「アクセス頻度」は、該当するアドレス変換テーブルブロックに含まれる論理アドレスに対してライトまたはリードが実行された際に、インクリメントされる。
図14は、本技術の実施の形態における未割当メモリ拡張領域管理テーブル227のフィールド構成例を示す図である。この未割当メモリ拡張領域管理テーブル227は、「分割数」、「開始アドレス」、「サイズ」の各フィールドを備える。
「分割数」は、メモリ拡張領域121の管理単位において、ホストメモリ120の物理アドレス空間内でさらに分割されている数を示すフィールドである。「開始アドレス」は、該当するインデックスに対応するメモリ拡張領域121として使用可能な領域の開始アドレスを物理アドレスにより示すフィールドである。「サイズ」は、該当するインデックスに対応するメモリ拡張領域121として使用可能な領域のサイズを示すフィールドである。
[情報処理システムの動作]
図15は、本技術の実施の形態における情報処理システムの初期化処理の一例を示すシーケンス図である。
メモリコントローラ200は、電源断の状態から起動すると、ホストインターフェース270を介して、ホストコンピュータ100に対して起動を通知する(ステップS901)。
メモリコントローラ200の起動通知を受けたホストコンピュータ100は、メモリコントローラ200が対応しているメモリ拡張機能のパラメータを取得するために、パラメータ問合せ(Query Request)を発行する(ステップS902)。
パラメータ問合せを受けたメモリコントローラ200は、問合せの応答(Query Response)として、メモリ拡張機能のパラメータをホストコンピュータ100に転送する(ステップS903)。
メモリ拡張機能のパラメータを受けたホストコンピュータ100は、メモリ拡張機能に対応していることを確認すると、メモリ拡張領域121を取得する。そして、そのメモリ拡張領域121のアドレスおよびサイズを、メモリコントローラ200に対して通知(Acquisition Notification)する(ステップS904)。
領域取得通知を受けたメモリコントローラ200は、取得されたメモリ拡張領域121のサイズを確認すると、通知応答をホストコンピュータ100に返信する(ステップS905)。この通知応答において、メモリ拡張領域121のサイズが条件を満たしていれば「ACK」を、条件を満たしていなければ「NAK」を、それぞれ示す。
そして、メモリコントローラ200は、取得されたメモリ拡張領域121にデータを転送するために、メモリ300に対してリードリクエストを要求する(ステップS906)。これにより、メモリ300からデータが読み出され、メモリ拡張領域121にデータが転送される(ステップS907)。
図16は、本技術の実施の形態におけるホストコンピュータ100のデバイスドライバ103による初期化処理の手順例を示す流れ図である。
ホスト処理部110は、メモリコントローラ200が対応しているメモリ拡張機能のパラメータを取得するために、メモリコントローラ200に対してパラメータ問合せを発行する(ステップS911)。メモリ拡張機能のパラメータは、メモリコントローラ200のメモリ拡張機能への対応または非対応を示す情報と、メモリコントローラ200で扱うメモリ拡張領域121の最大サイズMmaxおよび最小サイズMminである。この実施の形態では、最大サイズMmaxを32MB、最小サイズMminを64KBとそれぞれ想定する。その後、ホスト処理部110は、メモリコントローラ200からの問合せ応答を待つ(ステップS912)。
ホスト処理部110は、メモリコントローラ200から問合せ応答を受信すると、その応答に含まれるメモリ拡張機能のパラメータをホストメモリ120に保持する(ステップS913)。ホスト処理部110は、ホストメモリ120に保持したパラメータの内、メモリ拡張機能への対応または非対応を示す情報から、そのメモリコントローラ200がメモリ拡張機能に対応しているか否かを判別する(ステップS914)。メモリ拡張機能に対応していない場合には(ステップS914:No)、メモリ拡張機能非対応であるとして、初期化処理を正常終了する。この場合、ホスト処理部110は、メモリ拡張機能に関連する動作を行わない。一方、メモリ拡張機能に対応している場合には(ステップS914:Yes)、ステップS915以降の処理を行う。
ホスト処理部110は、ホストOS102にメモリ拡張領域121として取得可能なサイズを問い合わせる。必要なサイズが取得可能な場合、ホスト処理部110は、サイズMgetを指定して、ホストOS102からメモリ拡張領域121を取得する(ステップS915)。このとき、指定するサイズMgetは、次式を満たす必要がある。
Mmin ≦ Mget ≦ Mmax
ホスト処理部110は、メモリ拡張領域121の取得に成功したか否かを判断する(ステップS916)。メモリ拡張領域121を取得できなかった場合には(ステップS916:No)、そのまま初期化処理を正常終了する。一方、メモリ拡張領域121を取得できた場合には(ステップS916:Yes)、ステップS917以降の処理を行う。
ホスト処理部110は、取得したメモリ拡張領域121のアドレスおよびサイズをメモリコントローラ200に通知する(ステップS917)。そして、ホスト処理部110は、メモリコントローラ200からの通知応答(ACKまたはNAK)を待つ(ステップS918)。ホスト処理部110は、通知応答がACKでない場合(ステップS919:No)、通知された領域を使用しない旨をホストOS102に通知する。この場合、ホスト処理部110は、メモリ拡張機能に関する機能に何らかの異常が発生したと判断し、メモリ拡張機能に関連する動作を行わない。一方、通知応答がACKである場合(ステップS919:Yes)、ホスト処理部110は、メモリ拡張機能に関連する動作を行う。
なお、上述の実施の形態では、メモリ拡張領域を取得する際のパラメータとして、最大サイズMmaxおよび最小サイズMminを取得したが、これに加えて管理単位Munitを取得するようにしてもよい。ホスト処理部110において、デバイスドライバ103が管理単位Munitを取得した場合、ホストOS102からメモリ拡張領域121として使用可能なメモリ領域を取得する際には、以下の条件を満たすサイズMgetを取得する。
Mget = Mmin + n×Munit
この場合、ホスト処理部110は、領域取得通知の実行結果として、メモリコントローラ200から、ACK受信時にメモリ拡張領域121として使用しない領域を受信することがなくなる。そのため、メモリ拡張領域121として使用しない領域をホストOS102に通知する処理が不要となる。
図17は、本技術の実施の形態におけるメモリコントローラ200のメモリ拡張領域管理タスクによるパラメータ設定処理の手順例を示す流れ図である。
コントローラ処理部210は、ROM230に記録されているメモリ拡張機能のパラメータの値を、コントローラメモリ220に設定する(ステップS921)。そして、コントローラ処理部210は、コントローラメモリ220に設定したメモリ拡張機能のパラメータの値を、問合せ応答としてホストコンピュータ100に転送する(ステップS922)。
図18は、本技術の実施の形態におけるメモリコントローラ200のメモリ拡張領域管理タスクによる領域取得通知受信処理の手順例を示す流れ図である。
コントローラ処理部210は、領域取得通知を受けると、それに含まれるメモリ拡張領域のアドレスおよびサイズを取得して、コントローラメモリ220に保持する(ステップS931)。
コントローラ処理部210は、メモリ拡張領域121のサイズを最大サイズMmaxおよび最小サイズMminと比較する(ステップS932およびS933)。メモリ拡張領域121のサイズが最大サイズMmaxより大きい(ステップS932:No)、または、最小サイズMminより小さい(ステップS933:No)場合には、コントローラ処理部210はNAKを送信する(ステップS937)。
一方、メモリ拡張領域121のサイズが最大サイズMmax以下(ステップS932:Yes)、かつ、最小サイズMmin以上(ステップS933:Yes)の場合には、コントローラ処理部210はテーブル群を初期化する(ステップS934)。ここで、テーブル群は、メモリ拡張領域管理テーブル221、および、アドレス変換テーブルブロック位置情報222、および、アクセス頻度情報テーブル223等である。
メモリ拡張領域管理テーブル221の初期化においては、取得したメモリ拡張領域121のサイズに合わせて、メモリ拡張領域管理テーブル221をコントローラメモリ220上に作成し、作成した全てのエントリの「使用状況」を「未使用」、分割数を「0」、チェックサムを「0xFFFFFFFF」に設定する。ここで、メモリ拡張領域121のサイズが、メモリ拡張領域管理テーブル221の倍数でない場合には、未割当メモリ拡張領域管理テーブル227に保持する。
アドレス変換テーブルブロック位置情報222の初期化においては、全てのエントリの「最新データ」を「メモリ」に設定する。また、「コントローラメモリインデックス番号」を「無効な値(0xFF)」に設定する。また、「メモリ拡張領域インデックス番号」を「無効な値(0xFFFF)」に設定する。
アクセス頻度情報テーブル223の初期化においては、メモリ300からアドレス変換テーブルブロックアクセス頻度情報312を読み出して、コントローラメモリ220にアクセス頻度情報テーブル223として保持する。
コントローラ処理部210は、メモリ拡張領域管理テーブル221から、「使用状況」が「解放済」となっているエントリを検索する。そして、その「使用状況」を「未使用」に更新する。そして、領域取得通知において通知されたメモリ拡張領域121から「開始アドレス」、「サイズ」、「分割数」を算出してメモリ拡張領域管理テーブル221を更新する(ステップS935)。その後、コントローラ処理部210は、ホストコンピュータ100にACKと、メモリ拡張領域121として使用しない領域とを送信する(ステップS936)。メモリ拡張領域121として使用しない領域は、未割当メモリ拡張領域管理テーブル227に保持されている開始アドレスおよびサイズによって示される。
図19は、本技術の実施の形態におけるメモリコントローラ200のメモリ拡張領域管理タスクによるメモリ300からメモリ拡張領域121へのデータ転送処理の手順例を示す流れ図である。
コントローラ処理部210は、メモリ300からホストメモリ120のメモリ拡張領域121に転送するアドレス変換テーブルを決定する(ステップS941)。コントローラ処理部210は、メモリ拡張領域管理テーブル221の「使用状況」が「未使用」となっているインデックス番号を選択し、「開始アドレス」および「サイズ」に基づいて、転送先のメモリ拡張領域121を選択する。また、コントローラ処理部210は、アクセス頻度の値が大きく、ホストメモリ120に転送されていないアドレス変換テーブルブロックを転送するデータとして選択する(ステップS941)。
コントローラ処理部210は、ステップS941で選択したインデックス番号のアドレス変換テーブルブロックをメモリ300から読み出して、インテグリティ処理部250においてチェックサムを算出する。そして、ステップS941で選択したホストメモリ120のメモリ拡張領域121に転送する(ステップS942)。インテグリティ処理部250において算出したチェックサムは、メモリ拡張領域管理テーブル221の「チェックサム」において管理する。
コントローラ処理部210は、メモリ拡張領域管理テーブル221およびアドレス変換テーブルブロック位置情報222を更新する(ステップS943)。すなわち、転送先として指定したメモリ拡張領域管理テーブル221のインデックス番号の「使用状況」を「使用中」に設定する。また、アドレス変換テーブルブロック位置情報222のメモリ拡張領域インデックス番号に、ステップS941で選択したメモリ拡張領域インデックス番号を設定する。
コントローラ処理部210は、メモリ拡張領域管理テーブル221の「使用状況」が「未使用」となっているエントリの有無を判別する(ステップS944)。メモリ拡張領域管理テーブル221の「使用状況」に「未使用」が存在する場合は(ステップS944:Yes)、ステップS941以降の処理を繰り返す。
図20は、本技術の実施の形態におけるメモリコントローラ200のコマンド実行タスクによるリードコマンド処理の手順例を示す流れ図である。ホストコンピュータ100において、デバイスドライバ103は、ホストOS102からリードコマンドの実行を指示されると、リードコマンドを発行する。ホストOS102からは、読出し開始論理アドレスおよびサイズがパラメータとして指定される。デバイスドライバ103を介して発行されるリードコマンドには、その読出し開始論理アドレスおよびサイズが含まれる。
コントローラ処理部210は、受信した開始論理アドレスとサイズに基づいて、論理アドレス単位に処理を分割する(ステップS951)。1回の処理で実行されるのは1論理アドレスである。例えば、リード対象の開始アドレスとして「0」、サイズとして「1」が指定された場合は、1回の処理が行われる。また、リード対象の開始論理アドレスとして「0」、サイズとして「2」が指定された場合には、2回の処理に分割される。
コントローラ処理部210は、リード対象とする論理アドレスを決定する(ステップS952)。対象となる論理アドレスは、リード対象の開始論理アドレスから順番に決定される。リード対象の開始論理アドレスとして「0」、データサイズとして「2」が指定された場合、最初に処理を実行する論理アドレスは「0」に決定される。次に対象となる論理アドレスは「1」に決定される。
コントローラ処理部210は、リード対象として決定した論理アドレスが含まれるアドレス変換テーブルブロックが、コントローラメモリ220のアドレス変換テーブル保持領域224に存在するかを判別する(ステップS953)。アドレス変換テーブルブロックがアドレス変換テーブル保持領域224に存在しない場合には(ステップS953:No)、メモリ拡張領域管理タスクにおいて、アドレス変換テーブルブロックの入替え処理を実行する(ステップS960)。これにより、リード対象として決定した論理アドレスが含まれるアドレス変換テーブルブロックが、アドレス変換テーブル保持領域224に保持される。このアドレス変換テーブルの入替え処理の詳細については後述する。
コントローラ処理部210は、アドレス変換テーブルを参照して、リード対象として決定した論理アドレスを物理アドレスに変換する(ステップS954)。物理アドレスが未割当の場合は、代替ページ管理テーブル225から、未使用のページアドレスを取得する。その際、アドレス変換テーブルの「使用状況」を「割当済」に更新する。
コントローラ処理部210は、アクセス頻度情報テーブル223のうち、ステップS954において参照したアドレス変換テーブルのブロック番号のエントリに対応する「アクセス頻度」の値をインクリメントして更新する(ステップS955)。
コントローラ処理部210は、ステップS954において変換した物理アドレスを指定して、メモリ300に対してリード要求を行う(ステップS956)。コントローラ処理部210は、メモリ300から読み出したデータについて誤り訂正を行い、その誤り訂正したデータをホストコンピュータ100に転送する(ステップS957)。その際、転送されるデータは、512バイトである。
コントローラ処理部210は、ステップS954において未使用のページを取得した場合、アドレス変換テーブルの「物理アドレス」を、取得したページの物理アドレスに更新する(ステップS987)。「物理アドレス」を更新した際には、アドレス変換テーブルブロック位置情報222の「最新データ」は「コントローラメモリ」に更新される。
コントローラ処理部210は、リードコマンド処理においてホストコンピュータ100に転送されたデータサイズの合計と、リードコマンドにおいて指定されたデータサイズとが一致するか否かを判別する(ステップS958)。両データサイズが一致する場合には(ステップS958:Yes)、ホストコンピュータ100にリードコマンド処理の終了を通知する(ステップS959)。両データサイズが一致しない場合には(ステップS958:No)、ステップS952以降の処理を繰り返す。
図21は、本技術の第1の実施の形態におけるメモリコントローラ200のメモリ拡張領域管理タスクによるアドレス変換テーブルブロック入替え処理(ステップS960)の手順例を示す流れ図である。このアドレス変換テーブルブロック入替え処理では、コントローラメモリ220上のデータを追い出して空き領域が確保され、その確保された空き領域に対してメモリ拡張領域121またはメモリ300から新たにデータが転送される。なお、以下ではメモリ拡張領域121を単にホストメモリ120として表す場合がある。
コントローラ処理部210は、アドレス変換テーブルブロック位置情報222を参照して、コントローラメモリ220に保持されている番号のアドレス変換テーブルブロックが、ホストメモリ120上に存在するか否かを判別する(ステップS961)。このコントローラメモリ220に保持されているアドレス変換テーブルブロックが追出し対象ブロックとなる。追出し対象ブロックがホストメモリ120上に存在する場合には(ステップS961:Yes)、ステップS962以降の処理を行う。追出し対象ブロックがホストメモリ120上に存在しない場合には(ステップS961:No)、ステップS971以降の処理を行う。
コントローラ処理部210は、アドレス変換テーブルブロック位置情報222を参照して、コントローラメモリ220に保持されている番号のアドレス変換テーブルブロックのデータが、最新のデータであるか否かを判別する(ステップS962)。最新のデータである場合には(ステップS962:Yes)、コントローラ処理部210は、メモリ拡張領域管理テーブル221およびアドレス変換テーブルブロック位置情報222を参照して転送データを特定する。すなわち、コントローラメモリ220に保持されているアドレス変換テーブルブロックのデータを、ホストメモリ120上の同一の番号のアドレス変換テーブルブロックのデータが保持されている領域に対して転送する(ステップS963)。これにより、最新データがホストメモリ120のメモリ拡張領域121に反映される。ホストメモリ120にデータを転送する際、インテグリティ処理部250がチェックサムを生成する。その生成されたチェックサムは、メモリ拡張領域管理テーブル221の「チェックサム」に保持する。
コントローラ処理部210は、アドレス変換テーブルブロック位置情報222のうち、コントローラメモリ220に保持されているアドレス変換テーブルブロック番号に該当する「最新データ」と「コントローラメモリインデックス番号」を更新する(ステップS964)。このとき、「コントローラメモリインデックス番号」は、無効な値(0xFF)に更新される。また、「最新データ」が、「コントローラメモリ」である場合は「ホストメモリ」に更新される。なお、「最新データ」が、「ホストメモリ」または「メモリ」の場合には更新を行わない。
コントローラ処理部210は、コントローラメモリ220に保持されている番号のアドレス変換テーブルブロックよりも低いアクセス頻度を有するアドレス変換テーブルブロックのデータが、ホストメモリ120上に存在するか否かを判別する(ステップS971)。その際、アドレス変換テーブルブロックのアクセス頻度情報テーブル223が参照される。アクセス頻度の低いアドレス変換テーブルブロックが存在する場合には(ステップS971:Yes)、ステップS972以降の処理を行う。アクセス頻度の低いアドレス変換テーブルブロックが存在しない場合には(ステップS971:No)、ステップS982以降の処理を行う。
コントローラ処理部210は、ホストメモリ120上に存在するアドレス変換テーブルブロックの内で最もアクセス頻度の低いアドレス変換テーブルブロックの番号を選択して、ホストメモリ120のデータが最新であるか否かを判別する(ステップS972)。すなわち、アドレス変換テーブルブロック位置情報222を参照して、該当する「最新データ」が「ホストメモリ」であるか否かを判別する。
ホストメモリ120のデータが最新である場合(ステップS972:Yes)、コントローラ処理部210は、メモリ拡張領域管理テーブル221およびアドレス変換テーブルブロック位置情報222を参照する。そして、ホストメモリ120に保持されているアドレス変換テーブルブロックのデータから、インテグリティ処理部250を使用してチェックサムを算出する。このようにして算出したチェックサムとアドレス変換テーブルブロック位置情報222に保持されているチェックサムとを比較して、一致するかを判別する(ステップS973)。チェックサムが一致する場合には(ステップS973:Yes)、コントローラ処理部210は、ホストメモリ120に保持されているアドレス変換テーブルブロックのデータをメモリ300に転送して書込みを行う(ステップS974)。その際、メモリ拡張領域管理テーブル221およびアドレス変換テーブルブロック位置情報222が参照される。一方、チェックサムが一致しない場合には(ステップS973:No)、コントローラ処理部210は、ホストメモリ120に保持されているアドレス変換テーブルブロックのデータの再構築処理を行う(ステップS975)。再構築を行う際には、アドレス変換テーブルブロック番号が指定され、転送先としてメモリ300が指定される。この再構築処理の詳細については後述する。
コントローラ処理部210は、アドレス変換テーブルブロック位置情報222のうち、ステップS972において選択したアドレス変換テーブルブロックの「最新データ」および「ホストメモリインデックス番号」を更新する(ステップS977)。このとき、「ホストメモリインデックス番号」は、無効な値(0xFFFFF)に更新される。また、「最新データ」が、「ホストメモリ」である場合は「メモリ」に更新される。なお、「最新データ」が、「メモリ」の場合には、更新は行われない。
コントローラ処理部210は、メモリ拡張領域管理テーブル221およびアドレス変換テーブルブロック位置情報222を参照する。そして、ステップS972において選択した番号のアドレス変換テーブルブロックのデータが保持されているホストメモリ120の領域に対して、コントローラメモリ220に保持されているアドレス変換テーブルブロックのデータを転送する(ステップS978)。ホストメモリ120にデータを転送する際、インテグリティ処理部250がチェックサムを生成する。この生成したチェックサムは、メモリ拡張領域管理テーブル221の「チェックサム」に保持される。
コントローラ処理部210は、アドレス変換テーブルブロック位置情報222のうち、コントローラメモリ220に保持されているアドレス変換テーブルブロック番号に該当する内容を更新する(ステップS979)。ここでは、「最新データ」、「コントローラメモリインデックス番号」および「ホストメモリインデックス番号」が更新対象となる。「コントローラメモリインデックス番号」は、無効な値(0xFF)に更新される。「ホストメモリインデックス番号」は、転送したメモリ拡張領域121のインデックス番号に更新される。「最新データ」が「コントローラメモリ」である場合には、「ホストメモリ」に更新される。なお、「最新データ」が、「ホストメモリ」または「メモリ」の場合には、更新は行われない。
コントローラ処理部210は、アドレス変換テーブルブロック位置情報222を参照して、コントローラメモリ220に保持されている番号のアドレス変換テーブルブロックのデータが、最新のデータであるか否かを判別する(ステップS982)。最新のデータである場合には(ステップS982:Yes)、コントローラ処理部210は、コントローラメモリ220に保持されているアドレス変換テーブルブロックのデータを、メモリ300に転送して書込みを行う(ステップS983)。
コントローラ処理部210は、アドレス変換テーブルブロック位置情報222のうち、コントローラメモリ220に保持されているアドレス変換テーブルブロック番号に該当する内容を更新する(ステップS984)。ここでは、「最新データ」および「コントローラメモリインデックス番号」が更新対象である。「コントローラメモリインデックス番号」は、無効な値(0xFF)に更新される。「最新データ」が「コントローラメモリ」である場合には「メモリ」に更新される。なお、「最新データ」が「メモリ」の場合には、更新は行われない。
コントローラ処理部210は、コントローラメモリ220に対する書込み対象として指定された番号のアドレス変換テーブルブロック(目的ブロック)が、ホストメモリ120のメモリ拡張領域121に保持されているかを判別する(ステップS965)。目的ブロックがメモリ拡張領域121に存在する場合には(ステップS965:Yes)、ステップS966以降の処理を行う。目的ブロックがメモリ拡張領域121に存在しない場合には(ステップS965:No)、ステップS985以降の処理を行う。
コントローラ処理部210は、メモリ拡張領域管理テーブル221およびアドレス変換テーブルブロック位置情報222を参照する。そして、ホストメモリ120に保持されているアドレス変換テーブルブロックのデータから、インテグリティ処理部250を使用してチェックサムを算出する。このようにして算出したチェックサムとアドレス変換テーブルブロック位置情報222に保持されているチェックサムとを比較して、一致するか否かを判別する(ステップS966)。チェックサムが一致する場合には(ステップS966:Yes)、コントローラ処理部210は、メモリ拡張領域管理テーブル221およびアドレス変換テーブルブロック位置情報222を参照する。そして、指定された番号のアドレス変換テーブルブロックのデータを、ホストメモリ120のメモリ拡張領域121から、コントローラメモリ220のアドレス変換テーブル保持領域224に対して転送する(ステップS967)。一方、チェックサムが一致しない場合には(ステップS966:No)、コントローラ処理部210は、ホストメモリ120に保持されているアドレス変換テーブルブロックのデータの再構築処理を行う(ステップS968)。再構築を行う際には、アドレス変換テーブルブロック番号が指定され、転送先としてコントローラメモリ220が指定される。この再構築処理の詳細については後述する。
コントローラ処理部210は、アドレス変換テーブルブロック位置情報222のうち、コントローラメモリ220に保持されているアドレス変換テーブルブロック番号に該当する内容を更新する(ステップS969)。ここでは、「最新データ」および「コントローラメモリインデックス番号」が更新対象となる。「コントローラメモリインデックス番号」は、「0x00」に更新される。
コントローラ処理部210は、指定された番号のアドレス変換テーブルブロックのデータを、メモリ300からコントローラメモリ220のアドレス変換テーブル保持領域224に転送する(ステップS985)。
コントローラ処理部210は、アドレス変換テーブルブロック位置情報222のうち、コントローラメモリ220に保持されているアドレス変換テーブルブロック番号に該当する「コントローラメモリインデックス番号」を更新する(ステップS986)。ここで、「コントローラメモリインデックス番号」は、「0x00」に更新される。
なお、ホストメモリ120から読み出したデータのインテグリティ処理において不一致となった場合に実行する再構築処理を省くために、以下の処理を行ってもよい。すなわち、アドレス変換テーブルを変更して、コントローラメモリ220からホストメモリ120に転送する際(ステップS963、S978)、同時にメモリ300にデータを記録するようにしてもよい。その場合、インテグリティ処理において不一致となったとき、アドレス変換テーブルブロックの再構築処理に代えて、メモリ300から該当するアドレス変換テーブルの読出し処理を行う。
図22は、本技術の実施の形態におけるメモリコントローラ200のメモリ拡張領域管理タスクによるアドレス変換テーブルブロックのデータの再構築処理(ステップS968、S975)の手順例を示す流れ図である。アドレス変換テーブルブロックの再構築処理は、再構築対象となったアドレス変換テーブルブロック番号と、再構築したアドレス変換テーブルブロックの転送先とが指定されて実行される。
コントローラ処理部210は、コントローラメモリ220上のアドレス変換テーブル再構築領域226を使用して、アドレス変換テーブルブロックを作成して、初期化する(ステップS991)。再構築対象となったアドレス変換テーブルブロックに属する論理ページアドレスにおいて、割当状況は「未割当」、物理ページアドレスは「0xFFFFFF」に設定される。
コントローラ処理部210は、メモリ300の物理アドレスを「0x000000」から順に増加させて、物理アドレスを選択する(ステップS992)。選択する際、不良ページ管理テーブルに登録された物理アドレスは除外する。
コントローラ処理部210は、ステップS992において選択された物理アドレスのページのデータ(520バイト)を読み出して、ECCによる誤り訂正を行った後、識別子および論理アドレスを取得する(ステップS993)。
コントローラ処理部210は、ステップS993において取得された識別子および論理アドレスが再構築対象のものであるか否かを判別する(ステップS994)。すなわち、識別子が「01h」を示し、かつ、指定されたアドレス変換テーブルブロック番号に属する論理アドレスであれば再構築対象となる。再構築対象とならない場合には(ステップS994:No)、ステップS992以降の処理を繰り返す。再構築対象となる場合には(ステップS994:Yes)、ステップS995以降の処理を行う。
コントローラ処理部210は、コントローラメモリ220上で、指定されたアドレス変換テーブルブロック番号のデータの再構築を行って更新する(ステップS995)。冗長部に記録された「論理アドレス」に対応する「物理アドレス」になるように「物理ページアドレス」を更新し、「割当状況」を「割当済」に更新する。
コントローラ処理部210は、再構築対象となったアドレス変換テーブルブロックに属する全ての論理アドレスに対応する「割当状況」が全て「割当済」となったか否かを判別する(ステップS996)。「割当状況」に「未割当」が残っている場合は(ステップS996:No)、コントローラ処理部210は、ユーザデータを記録するページ(0x000000 - 0x80FFFF)を全て読み出したか否かを判別する(ステップS997)。全ての読み出しが終わっていない場合は(ステップS997:)、ステップS992以降の処理を繰り返す。
コントローラ処理部210は、再構築を行ったアドレス変換テーブルのデータを、指定された転送先に転送する(ステップS998)。
図23は、本技術の実施の形態におけるメモリコントローラ200のコマンド実行タスクによるライトコマンド処理の手順例を示す流れ図である。ホストコンピュータ100において、デバイスドライバ103は、ホストOS102からライトコマンドの実行を指示されると、ライトコマンドを発行する。ホストOS102からは、書込み開始論理アドレスおよびサイズがパラメータとして指定される。デバイスドライバ103を介して発行されるライトコマンドには、その書込み開始論理アドレスおよびサイズが含まれる。
コントローラ処理部210は、リードコマンドの場合と同様に、受信した開始論理アドレスとサイズに基づいて、論理アドレス単位に処理を分割する(ステップS811)。
コントローラ処理部210は、リードコマンドの場合と同様に、ライト対象とする論理アドレスを決定する(ステップS812)。対象となる論理アドレスは、ライト対象の開始論理アドレスから順番に決定される。
コントローラ処理部210は、リードコマンドの場合と同様に、ライト対象として決定した論理アドレスが含まれるアドレス変換テーブルブロックが、アドレス変換テーブル保持領域224に存在するかを判別する(ステップS813)。アドレス変換テーブルブロックがアドレス変換テーブル保持領域224に存在しない場合には(ステップS813:No)、メモリ拡張領域管理タスクにおいて、アドレス変換テーブルブロックの入替え処理を実行する(ステップS820)。これにより、ライト対象として決定した論理アドレスが含まれるアドレス変換テーブルブロックが、アドレス変換テーブル保持領域224に保持される。このアドレス変換テーブルの入替え処理は、図21において説明したものと同様である。
コントローラ処理部210は、アドレス変換テーブルを参照して、ライト対象として決定した論理アドレスを物理アドレスに変換する(ステップS814)。物理アドレスが未割当の場合は、代替ページ管理テーブル225から、未使用のページアドレスを取得する。その際、アドレス変換テーブルの「使用状況」を「割当済」に更新する。
コントローラ処理部210は、アクセス頻度情報テーブル223のうち、ステップS814において参照したアドレス変換テーブルのブロック番号のエントリに対応する「アクセス頻度」の値をインクリメントして更新する(ステップS815)。
コントローラ処理部210は、ホストコンピュータ100から、書込み対象となるデータを受け取る(ステップS816)。このデータは512バイトである。コントローラ処理部210は、この512バイトのデータに対して、冗長部を追加する。すなわち、ユーザデータを表す「00h」を「識別子」に設定し、ステップS812において決定した論理アドレスを「論理アドレス」に設定し、ECC処理部240により生成したECCを「ECC」に設定する。これにより、520バイトのライトデータが構成される。
コントローラ処理部210は、ステップS814において変換した物理アドレスを指定して、メモリ300に対してライトデータのライト要求を行う(ステップS817)。ライトデータの書込みに失敗した場合には(ステップS818:No)、代替ページを取得して(ステップS819)、再びライト要求を行う(ステップS817)。ライトデータの書込みに成功した場合には(ステップS818:Yes)、アドレス変換テーブルを更新する(ステップS827)。すなわち、ステップS814において未使用のページを取得した場合、アドレス変換テーブルの「物理アドレス」を、取得したページの物理アドレスに更新する。「物理アドレス」を更新した際には、アドレス変換テーブルブロック位置情報222の「最新データ」は「コントローラメモリ」に更新される。
コントローラ処理部210は、ライトコマンド処理においてメモリ300に転送されたデータサイズの合計と、ライトコマンドにおいて指定されたデータサイズとが一致するか否かを判別する(ステップS828)。両データサイズが一致する場合には(ステップS828:Yes)、ホストコンピュータ100にライトコマンド処理の終了を通知する(ステップS829)。両データサイズが一致しない場合には(ステップS828:No)、ステップS812以降の処理を繰り返す。
図24は、本技術の第1の実施の形態におけるメモリコントローラ200のメモリ拡張領域管理タスクによるフラッシュコマンド処理の手順例を示す流れ図である。デバイスドライバ103は、ホストOS102から電源断等の通知を受けるとフラッシュコマンドを発行する。このフラッシュコマンドは、メモリコントローラ200がメモリ拡張領域121とアドレス変換テーブル保持領域224に保持しているデータを、メモリ300に保存するためのコマンドである。デバイスドライバ103は、メモリコントローラ200に対してフラッシュコマンドを発行した後、メモリコントローラ200からACKを受信すると、メモリ300へのデータ保存が終了した旨をホストOS102に伝える。
コントローラ処理部210は、アドレス変換テーブルブロック位置情報222の「最新データ」が「メモリ」になっているか否かを判別する(ステップS831)。全ての「最新データ」が「メモリ」になっていれば(ステップS831:Yes)、メモリ300へのデータ保存が終了したものとして、デバイスドライバ103にACKを通知する(ステップS839)。「最新データ」が「メモリ」になっていないものが残っていれば(ステップS831:No)、ステップS832以降の処理を行う。
コントローラ処理部210は、アドレス変換テーブルブロック位置情報222の「アドレス変換テーブルブロック番号」を「0」から順に検索する。そして、「最新データ」が「メモリ」となっていないものをメモリ300にデータを保存する領域として選択する(ステップS832)。
コントローラ処理部210は、ステップS832において選択されたアドレス変換テーブルブロック位置情報222の「最新データ」が「コントローラメモリ220」であるか否かを判別する(ステップS833)。「最新データ」が「コントローラメモリ220」であれば(ステップS833:Yes)、コントローラ処理部210は、コントローラメモリ220に保持されているアドレス変換テーブルブロックのデータを、メモリ300に転送して書込みを行う(ステップS834)。一方、「最新データ」が「コントローラメモリ220」でなければ(ステップS833:No)、コントローラ処理部210は、メモリ拡張領域管理テーブル221とアドレス変換テーブルブロック位置情報222を参照する。そして、ホストメモリ120に保持されているアドレス変換テーブルブロックのデータから、インテグリティ処理部250を使用してチェックサムを算出する。このようにして算出したチェックサムとアドレス変換テーブルブロック位置情報222に保持されているチェックサムとを比較して、一致するか否かを判別する(ステップS835)。
コントローラ処理部210は、チェックサムが一致する場合には(ステップS835:Yes)、メモリ拡張領域管理テーブル221とアドレス変換テーブルブロック位置情報222を参照する。そして、ホストメモリ120に保持されているアドレス変換テーブルブロックのデータをメモリ300に転送して書込みを行う(ステップS837)。一方、チェックサムが一致しない場合には(ステップS835:No)、コントローラ処理部210は、ホストメモリ120に保持されているアドレス変換テーブルブロックのデータの再構築処理を行う(ステップS836)。再構築処理を行う際は、アドレス変換テーブルブロック番号が指定され、また、転送先はメモリ300が指定される。この再構築処理は、図22において説明したものと同様である。
コントローラ処理部210は、アドレス変換テーブルブロック位置情報222の更新を行う(ステップS838)。その際、コントローラ処理部210は、ステップS832において選択したアドレス変換テーブルブロック位置情報222の「アドレス変換テーブルブロック番号」の対応する「最新データ」を「メモリ」に更新する。
このように、本技術の第1の実施の形態によれば、メモリ拡張領域121にデータを保持する場合においてインテグリティ処理部250によるインテグリティ処理を行うことより、メモリ拡張領域121の安全性を確保することができる。
<2.第2の実施の形態>
上述の第1の実施の形態では、チェックサムとしてCRCを用いることを想定したが、誤り訂正符号を用いてもよい。第1の実施の形態のメモリ拡張領域管理テーブル221では「チェックサム」を管理していたが、誤り訂正符号を用いた場合、「チェックサム」に代えて「誤り訂正符号」をメモリ拡張領域管理テーブル221で管理する。第1の実施の形態では、「チェックサム」を生成するためにインテグリティ処理部250を用いていたが、この第1の実施の形態では、インテグリティ処理部250に代えて、第2ECC処理部252を使用する。なお、情報処理システムの全体構成は第1の実施の形態と同様である。
[情報処理システムの構成]
図25は、本技術の第2の実施の形態におけるメモリコントローラ200の構成例を示す図である。この第2の実施の形態のメモリコントローラ200では、第1の実施の形態のインテグリティ処理部250に代えて、第2ECC処理部252を備える。この第2ECC処理部252は、メモリ拡張領域121にデータを保持する際にチェックサムとして誤り訂正符号(ECC)を生成し、読み出す際には誤り訂正符号を用いた誤り訂正を行う。
一方、第1ECC処理部241は、第1の実施の形態のECC処理部240と同様のものであり、メモリ300に記憶するデータの誤り訂正符号を生成し、また、メモリ300から読み出したデータの誤り訂正処理を行うものである。
なお、その他の構成については上述の第1の実施の形態と同様である。
[情報処理システムの動作]
図26は、本技術の第2の実施の形態におけるメモリコントローラ200のメモリ拡張領域管理タスクによるアドレス変換テーブルブロック入替え処理の手順例を示す流れ図である。この処理手順は、第1の実施の形態におけるステップS973、S975、S966およびS968を、以下に説明するステップS873、S875、S866およびS868にそれぞれ置き換えたものになる。
ホストメモリ120のデータが最新である場合(ステップS972:Yes)、コントローラ処理部210は、メモリ拡張領域管理テーブル221およびアドレス変換テーブルブロック位置情報222を参照する。そして、ホストメモリ120に保持されているアドレス変換テーブルブロックのデータと「誤り訂正符号」とから、第2ECC処理部252を使用して誤り検出を行う(ステップS873)。誤りが検出されない場合には(ステップS873:No)、コントローラ処理部210は、ホストメモリ120に保持されているアドレス変換テーブルブロックのデータをメモリ300に転送して書込みを行う(ステップS974)。その際、メモリ拡張領域管理テーブル221およびアドレス変換テーブルブロック位置情報222が参照される。一方、誤りが検出された場合には(ステップS973:Yes)、コントローラ処理部210は、誤り訂正、または、ホストメモリ120に保持されているアドレス変換テーブルブロックのデータの再構築処理を行う(ステップS875)。再構築を行う際には、アドレス変換テーブルブロック番号が指定され、転送先としてメモリ300が指定される。この誤り訂正または再構築処理の詳細については後述する。
目的ブロックがメモリ拡張領域121に存在する場合(ステップS965:Yes)、コントローラ処理部210は、メモリ拡張領域管理テーブル221およびアドレス変換テーブルブロック位置情報222を参照する。そして、ホストメモリ120に保持されているアドレス変換テーブルブロックのデータと「誤り訂正符号」とから、第2ECC処理部252を使用して誤り検出を行う(ステップS866)。誤りが検出されない場合には(ステップS866:No)、コントローラ処理部210は、ホストメモリ120に保持されているアドレス変換テーブルブロックのデータを、メモリ拡張領域121からコントローラメモリ220のアドレス変換テーブル保持領域224に対して転送する(ステップS967)。その際、メモリ拡張領域管理テーブル221およびアドレス変換テーブルブロック位置情報222が参照される。一方、誤りが検出された場合には(ステップS866:Yes)、コントローラ処理部210は、誤り訂正、または、ホストメモリ120に保持されているアドレス変換テーブルブロックのデータの再構築処理を行う(ステップS868)。再構築を行う際には、アドレス変換テーブルブロック番号が指定され、転送先としてコントローラメモリ220が指定される。この誤り訂正または再構築処理の詳細については後述する。
図27は、本技術の第2の実施の形態におけるメモリコントローラ200のメモリ拡張領域管理タスクによる誤り訂正または再構築処理(ステップS868、S875)の手順例を示す流れ図である。
コントローラ処理部210は、指定されたアドレス変換テーブルブロック番号のデータと「誤り訂正符号」とから、第2ECC処理部252を使用して誤り訂正可能であるか否かを判別する(ステップS841)。誤り訂正が可能であれば(ステップS841:Yes)、コントローラ処理部210は、指定されたアドレス変換テーブルブロック番号のデータと「誤り訂正符号」とから、第2ECC処理部252を使用して誤り訂正を行う(ステップS842)。そして、コントローラ処理部210は、誤り訂正を行ったアドレス変換テーブルのデータを、指定された転送先に転送する(ステップS843)。
一方、誤り訂正が不可能な場合には(ステップS841:No)、コントローラ処理部210は、ホストメモリ120に保持されているアドレス変換テーブルブロックのデータの再構築処理を行う(ステップS844)。この再構築処理を行う際は、アドレス変換テーブルブロック番号が指定され、転送先としてメモリ300が指定される。この再構築処理の内容は、図22において説明したものと同様である。
図28は、本技術の第2の実施の形態におけるメモリコントローラ200のメモリ拡張領域管理タスクによるフラッシュコマンド処理の手順例を示す流れ図である。この処理手順は、第1の実施の形態におけるステップS835およびS836を、以下に説明するステップS855およびS856にそれぞれ置き換えたものになる。
「最新データ」が「コントローラメモリ220」でない場合(ステップS833:No)、コントローラ処理部210は、メモリ拡張領域管理テーブル221とアドレス変換テーブルブロック位置情報222を参照する。そして、ホストメモリ120に保持されているアドレス変換テーブルブロックのデータと「誤り訂正符号」とから、第2ECC処理部252を使用して誤り検出を行う(ステップS855)。そして、コントローラ処理部210は、誤り訂正、または、ホストメモリ120に保持されているアドレス変換テーブルブロックのデータの再構築処理を行う(ステップS856)。再構築を行う際には、アドレス変換テーブルブロック番号が指定され、転送先としてメモリ300が指定される。この誤り訂正または再構築処理は、図27において説明したものと同様である。
このように、本技術の第2の実施の形態によれば、メモリ拡張領域121にデータを保持する場合において第2ECC処理部252を使用して誤り訂正を行うことより、メモリ拡張領域121の安全性を確保することができる。
<3.第3の実施の形態>
上述の第1の実施の形態では、チェックサムをメモリコントローラ200に保持したが、ホストコンピュータ100のメモリ拡張領域121に保持するようにしてもよい。インテグリティ処理を行うためのチェックサムをメモリ拡張領域121に保持させた場合、メモリ拡張領域管理テーブル221においてチェックサムを管理する必要はない。この第3の実施の形態では、チェックサムをメモリ拡張領域121に保持する例について説明する。なお、情報処理システムの全体構成は第1の実施の形態と同様である。
図29は、本技術の第3の実施の形態におけるアドレス変換テーブル311の構成の一例を示す図である。この第3の実施の形態におけるアドレス変換テーブル311は、第1の実施の形態より1つ多い513個のアドレス変換テーブルブロックからなる。64KBのアドレス変換テーブルブロックの各々には、8バイトのチェックサム領域を備える。したがって、1つのアドレス変換テーブルブロックに含まれる「割当状況」および「物理ページ」のエントリの数は2エントリ分、少なくなっている。第513番目のアドレス変換テーブルブロック#512には、1024エントリの「割当状況」および「物理ページ」が含まれ、8バイトのチェックサム領域のあとは未使用領域となる。
図30は、本技術の第3の実施の形態におけるメモリ拡張領域管理テーブル221のフィールド構成例を示す図である。この第3の実施の形態におけるメモリ拡張領域管理テーブル221は、第1の実施の形態において設けられていた「チェックサム」のフィールドが省かれている。すなわち、この第3の実施の形態では、「チェックサム」はメモリ拡張領域管理テーブル221において管理されず、上述のようにアドレス変換テーブル311において管理される。
図31は、本技術の第3の実施の形態におけるアドレス変換テーブルブロック位置情報222のフィールド構成例を示す図である。この第3の実施の形態におけるアドレス変換テーブルブロック位置情報222は、「アドレス変換テーブルブロック番号」を「0」から「512」までの513個分を保持する。これは、上述のアドレス変換テーブル311の構成の相違によるものである。
このように、本技術の第3の実施の形態によれば、メモリ拡張領域121にデータを保持する場合において、メモリ拡張領域121に保持したチェックサムを利用してインテグリティ処理を行うことより、メモリ拡張領域121の安全性を確保することができる。
<4.第4の実施の形態>
上述の第1の実施の形態では、メモリコントローラ200のインテグリティ処理部250においてインテグリティ処理を行っていたが、これをホストコンピュータ100において行うようにしてもよい。この場合、インテグリティ処理部はホストコンピュータ100に設けられる。この第4の実施の形態では、ホストコンピュータ100のデバイスドライバ103においてインテグリティ処理を行う。
上述の第1の実施の形態では、メモリコントローラ200が、メモリ拡張領域管理テーブル221の保持と更新を行ったが、デバイスドライバ103によってインテグリティ処理を実行する場合には以下のように分担が異なる。すなわち、デバイスドライバ103がメモリ拡張領域管理テーブル122の保持および更新を行い、メモリコントローラ200がメモリ拡張領域インデックス番号管理テーブル228の保持および更新を行う。
図32は、本技術の第4の実施の形態におけるメモリ拡張領域インデックス番号管理テーブル228のフィールド構成例を示す図である。このメモリ拡張領域インデックス番号管理テーブル228は、メモリコントローラ200のコントローラメモリ220に設けられる。このメモリ拡張領域インデックス番号管理テーブル228は、「インデックス番号」および「使用状況」の各フィールドを備える。「インデックス番号」は、メモリ拡張領域121を16分割したインデックスに付与された番号である。「使用状況」は、ホストメモリ120に確保したメモリ拡張領域121に、管理単位ごとに有効なデータが置かれているか否かを示すフィールドである。これらは、第1の実施の形態におけるメモリ拡張領域管理テーブル221の同名のものと同様である。
図33は、本技術の第4の実施の形態におけるメモリ拡張領域管理テーブル122のフィールド構成例を示す図である。このメモリ拡張領域管理テーブル122は、ホストコンピュータ100のホストメモリ120に設けられる。このメモリ拡張領域管理テーブル122は、「インデックス番号」、「分割数」、「開始アドレス」、「サイズ」、「チェックサム」の各フィールドを備える。すなわち、第4の実施の形態におけるメモリ拡張領域管理テーブル221から「使用状況」のフィールドを削除したものとなる。「使用状況」は、メモリコントローラ200におけるメモリ拡張領域インデックス番号管理テーブル228によって管理される。
[情報処理システムの動作]
図34は、本技術の第4の実施の形態におけるホストコンピュータ100のデバイスドライバ103による初期化処理の手順例を示す流れ図である。この第4の実施の形態における処理手順は、第1の実施の形態とは以下の点で異なり、これ以外については第1の実施の形態と同様である。
ホスト処理部110は、メモリ拡張領域121の取得に成功した場合に(ステップS916:Yes)、ステップS717以降の処理を行う。ホスト処理部110は、取得したメモリ拡張領域121のサイズに合わせてメモリ拡張領域管理テーブル122をホストメモリ120上に作成する(ステップS717)。そして、取得したメモリ拡張領域121に合わせて、ホストメモリ120のアドレスの値の小さい順にインデックス番号を「0」から割り当て、分割数、開始アドレス、サイズの値を設定し、チェックサムを「0xFFFFFFFF」とする。
ホスト処理部110は、取得したメモリ拡張領域121のアドレスおよびサイズをメモリコントローラ200に通知する(ステップS917)。このとき、ホスト処理部110は、メモリコントローラ200に、取得したメモリ拡張領域121を割り当てたインデックス番号を通知する。そして、ホスト処理部110は、メモリコントローラ200からの通知応答(ACK)を待つ(ステップS719)。
図35は、本技術の第4の実施の形態におけるメモリコントローラ200のメモリ拡張領域管理タスクによる領域取得通知受信処理の手順例を示す流れ図である。
コントローラ処理部210は、領域取得通知により通知されたメモリ拡張領域121のインデックス番号を取得する(ステップS731)。
コントローラ処理部210は、コントローラメモリ220上に、メモリ拡張領域インデックス番号管理テーブル228とアドレス変換テーブルブロック位置情報222を作成して、初期化を行う(ステップS734)。メモリ拡張領域インデックス番号管理テーブル228の初期化において、取得したメモリ拡張領域のインデックス番号の数に合わせてメモリ拡張領域インデックス番号管理テーブル228をコントローラメモリ220上に作成する。そして、作成した全てのエントリの「使用状況」を「未使用」とする。
その後、コントローラ処理部210は、ホストコンピュータ100にACKを送信する(ステップS736)。
図36は、本技術の第4の実施の形態におけるメモリコントローラ200のメモリ拡張領域管理タスクによるメモリ300からメモリ拡張領域121へのデータ転送処理の手順例を示す流れ図である。
コントローラ処理部210は、メモリ300からホストメモリ120のメモリ拡張領域121に転送するアドレス変換テーブルを決定する(ステップS741)。コントローラ処理部210は、メモリ拡張領域インデックス番号管理テーブル228の「使用状況」が「未使用」となっているインデックス番号のうち、最も値の小さいインデックス番号を選択する。コントローラ処理部210は、転送を行うデータとして、アクセス頻度の値が大きく、ホストメモリ120に転送されていないアドレス変換テーブルブロックを選択する。
コントローラ処理部210は、ステップS741で決定した、データの転送先となるメモリ拡張領域121のインデックス番号と、転送されるデータとなるアドレス変換テーブルブロックの番号を指定して、データ転送処理を実行する(ステップS750)。このメモリ300からホストメモリ120へのデータ転送処理の手順については後述する。
コントローラ処理部210は、メモリ拡張領域インデックス番号管理テーブル228と、アドレス変換テーブルブロック位置情報222の更新を行う(ステップS743)。コントローラ処理部210は、転送先として指定したメモリ拡張領域管理テーブル221のインデックス番号の「使用状況」を「使用中」に設定。コントローラ処理部210は、アドレス変換テーブルブロック位置情報222の「メモリ拡張領域インデックス番号」に、ステップS741において選択したメモリ拡張領域インデックス番号を設定する。
コントローラ処理部210は、メモリ拡張領域インデックス番号管理テーブル228の「使用状況」が「未使用」となっているエントリの有無を判別する(ステップS744)。「未使用」となっているエントリが存在する場合には(ステップS744:Yes)、ステップS741以降の処理を繰り返す。「未使用」となっているエントリが存在しなくなると(ステップS744:No)、このデータ転送処理を終了する。
図37は、本技術の第4の実施の形態におけるメモリコントローラ200のメモリ拡張領域管理タスクによるメモリ300からホストメモリ120へのデータ転送処理(ステップS750)の手順例を示す流れ図である。
コントローラ処理部210は、デバイスドライバ103に対して、データ転送処理の指示の際に指定されたメモリ拡張領域のインデックス番号を指定し、ホストメモリ120のアドレスの通知指示を行う。これにより、コントローラ処理部210は、デバイスドライバ103からアドレス変換テーブルの転送先のアドレスを取得する(ステップS751)。
コントローラ処理部210は、データ転送処理の指示の際に指定された番号のアドレス変換テーブルブロックをメモリ300から読み出して、取得したホストメモリ120のメモリ拡張領域121のアドレスに対してデータ転送を行う(ステップS752)。
コントローラ処理部210は、ステップS741において選択したメモリ拡張領域121のインデックス番号を指定して、チェックサムの算出指示をする(ステップS753)。デバイスドライバ103は、指定されたメモリ拡張領域121のインデックス番号に保持されているデータからチェックサムを算出して、メモリ拡張領域管理テーブル122に保持する。
図38は、本技術の第4の実施の形態におけるメモリコントローラ200のメモリ拡張領域管理タスクによるリードコマンド処理のアドレス変換テーブルブロック入替え処理(ステップS960)の手順例を示す流れ図である。この第4の実施の形態におけるアドレス変換テーブルブロック入替え処理手順は、第1の実施の形態とは以下の点で異なり、これ以外については第1の実施の形態と同様である。
コントローラ処理部210は、コントローラメモリ220からホストメモリ120へのデータ転送処理を実行する(ステップS763)。このとき、アドレス変換テーブルブロック入れ替え処理の実行の際に指定されたアドレス変換テーブルブロック番号のデータが存在するメモリ拡張領域121のインデックス番号と、転送元となるコントローラメモリ220のインデックス番号とが指定される。このデータ転送処理の詳細については後述する。
コントローラ処理部210は、チェックサムの算出と比較の指示をする(ステップS773)。このとき、コントローラメモリ220に保持されているアドレス変換テーブルブロックよりも低いアクセス頻度であって、最もアクセス頻度の低いブロック番号が存在する、ホストメモリ120のメモリ拡張領域121のインデックス番号が指定される。デバイスドライバ103は、指定されたメモリ拡張領域121のインデックス番号に保持されているデータからチェックサムを算出して、メモリ拡張領域管理テーブル122で保持しているチェックサムと比較して、その結果をメモリコントローラ200に返す。
コントローラ処理部210は、コントローラメモリ220からホストメモリ120へのデータ転送処理を実行する(ステップS778)。このとき、アドレス変換テーブルブロック入れ替え処理の実行の際に指定されたアドレス変換テーブルブロック番号のデータが存在するメモリ拡張領域121のインデックス番号と、転送元となるコントローラメモリ220のインデックス番号とが指定される。このデータ転送処理の詳細については後述する。
コントローラ処理部210は、チェックサムの算出と比較の指示をする(ステップS766)。このとき、アドレス変換テーブルブロック入れ替え処理の実行の際に指定されたアドレス変換テーブルブロック番号のデータが存在する、メモリ拡張領域121のインデックス番号が指定される。デバイスドライバ103は、指定されたメモリ拡張領域121のインデックス番号に保持されているデータからチェックサムを算出して、メモリ拡張領域管理テーブル122で保持しているチェックサムと比較して、その結果をメモリコントローラ200に返す。
図39は、本技術の第4の実施の形態におけるメモリコントローラ200のメモリ拡張領域管理タスクによるコントローラメモリ220からホストメモリ120へのデータ転送処理(ステップS763、S778)の手順例を示す流れ図である。このデータ転送処理を実行する際には、データの転送先となるメモリ拡張領域121のインデックス番号と、転送元となるアドレス変換テーブルブロックが存在するコントローラメモリ220のインデックス番号とが指定されていることを想定する。
コントローラ処理部210は、デバイスドライバ103に対して、このデータ転送処理の実行の際に指定されたメモリ拡張領域121のインデックス番号を指定して、ホストメモリ120のアドレスの通知指示を行う。これにより、コントローラ処理部210は、デバイスドライバ103から、アドレス変換テーブルの転送先のアドレスを取得する(ステップS781)。
コントローラ処理部210は、ステップS781で取得したホストメモリ120のメモリ拡張領域121のアドレスに対してデータ転送を行う(ステップS782)。このとき、転送対象データとなるのは、このデータ転送処理の実行の際に指定されたアドレス変換テーブルブロックが存在するコントローラメモリ220のインデックス番号のアドレス変換テーブルブロックのデータである。
コントローラ処理部210は、ステップS781で選択したメモリ拡張領域のインデックス番号を指定し、チェックサムの算出指示をする(ステップS783)。デバイスドライバ103は、指定されたメモリ拡張領域121のインデックス番号に保持されているデータからチェックサムを算出して、メモリ拡張領域管理テーブル122に保持する。
このように、本技術の第4の実施の形態では、メモリ拡張領域121にデータを保持する場合において、メモリ拡張領域管理テーブル122に保持したチェックサムを用いてデバイスドライバ103がインテグリティ処理を行う。これにより、ホストコンピュータ100においてメモリ拡張領域121の安全性を確保することができる。
なお、上述の実施の形態は本技術を具現化するための一例を示したものであり、実施の形態における事項と、特許請求の範囲における発明特定事項とはそれぞれ対応関係を有する。同様に、特許請求の範囲における発明特定事項と、これと同一名称を付した本技術の実施の形態における事項とはそれぞれ対応関係を有する。ただし、本技術は実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において実施の形態に種々の変形を施すことにより具現化することができる。
また、上述の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよく、また、これら一連の手順をコンピュータに実行させるためのプログラム乃至そのプログラムを記憶する記録媒体として捉えてもよい。この記録媒体として、例えば、CD(Compact Disc)、MD(MiniDisc)、DVD(Digital Versatile Disc)、メモリカード、ブルーレイディスク(Blu-ray(登録商標)Disc)等を用いることができる。
なお、本明細書に記載された効果はあくまで例示であって、限定されるものではなく、また、他の効果があってもよい。
なお、本技術は以下のような構成もとることができる。
(1)メモリに割り当てられた領域に対応するデータを、前記メモリを制御するメモリコントローラにおいて記憶するコントローラメモリと、
前記コントローラメモリの一部の領域をホストコンピュータにおけるホストメモリに割り当ててメモリ拡張領域として使用するコントローラ処理部と、
前記メモリ拡張領域にデータを記憶するために誤り検出符号を生成し、前記メモリ拡張領域から読み出したデータについて前記誤り検出符号に基づいて誤りを検出するインテグリティ処理部と
を具備するメモリコントローラ。
(2)前記インテグリティ処理部は、前記誤りを検出した場合には前記メモリに記憶されるデータから前記コントローラメモリ上において対応するデータを再構築する前記(1)に記載のメモリコントローラ。
(3)前記コントローラ処理部は、前記メモリに割り当てられた領域に対応するデータとして最も新しいデータが記憶されている位置情報を管理して、前記コントローラメモリ上のデータを削除して空き領域を確保する際に、その削除対象データに対応するデータが前記メモリ拡張領域に存在して、前記コントローラメモリ上のデータが最も新しいデータである旨を前記位置情報が示す場合には、前記コントローラメモリから前記メモリ拡張領域にデータを転送する前記(1)または(2)に記載のメモリコントローラ。
(4)前記コントローラ処理部は、前記メモリに割り当てられた領域に対応するデータとして最も新しいデータが記憶されている位置情報を管理して、前記コントローラメモリ上のデータを削除して空き領域を確保する際に、その削除対象データに対応するデータが前記メモリ拡張領域に存在せず、前記コントローラメモリ上のデータが最も新しいデータである旨を前記位置情報が示す場合には、前記コントローラメモリから前記メモリにデータを転送する前記(1)または(2)に記載のメモリコントローラ。
(5)前記コントローラ処理部は、前記メモリに割り当てられた領域に対応するデータとして最も新しいデータが記憶されている位置情報を管理するとともに、前記メモリに割り当てられた領域に対応するデータについて部分領域毎の使用頻度を管理して、前記コントローラメモリ上のデータを削除して空き領域を確保する際に、その削除対象データに対応するデータを記憶する前記メモリ拡張領域が前記コントローラメモリよりも使用頻度の低い部分領域である旨を前記使用頻度が示し、かつ、前記メモリ拡張領域上のデータが最も新しいデータである旨を前記位置情報が示す場合には、前記メモリ拡張領域から前記メモリにデータを転送する前記(1)または(2)に記載のメモリコントローラ。
(6)メモリと、
前記メモリに割り当てられた領域に対応するデータを、前記メモリを制御するメモリコントローラにおいて記憶するコントローラメモリと、
前記コントローラメモリの一部の領域をホストコンピュータにおけるホストメモリに割り当ててメモリ拡張領域として使用するコントローラ処理部と、
前記メモリ拡張領域にデータを記憶するために誤り検出符号を生成し、前記メモリ拡張領域から読み出したデータについて前記誤り検出符号に基づいて誤りを検出するインテグリティ処理部と
を具備する記憶装置。
(7)メモリと、
前記メモリに割り当てられた領域に対応するデータを、前記メモリを制御するメモリコントローラにおいて記憶するコントローラメモリと、
前記メモリに対するコマンドを発行するホストコンピュータと、
前記コントローラメモリの一部の領域を前記ホストコンピュータにおけるホストメモリに割り当ててメモリ拡張領域として使用するコントローラ処理部と、
前記メモリ拡張領域にデータを記憶するために誤り検出符号を生成し、前記メモリ拡張領域から読み出したデータについて前記誤り検出符号に基づいて誤りを検出するインテグリティ処理部と
を具備する情報処理システム。
(8)前記ホストコンピュータは、前記メモリコントローラから前記メモリ拡張領域の容量に関する情報を取得するコマンドを前記メモリコントローラに発行する前記(7)に記載の情報処理システム。
(9)前記ホストコンピュータは、前記メモリ拡張領域に記憶されるデータを前記メモリに記憶させるコマンドを前記メモリコントローラに発行する前記(7)または(8)に記載の情報処理システム。