(57)【特許請求の範囲】
【請求項１】
メモリ部と、
論理アドレスと、この論理アドレスに対応され、前記メモリ部の物理アドレスを推定するための中間アドレスを記憶する第１の記憶部と、
前記中間アドレスと、この中間アドレスに対応する前記物理アドレスを記憶する第２の記憶部と、
前記メモリ部内に書き込まれたデータを移動処理するデータ移動処理部と、
前記データ移動処理部により、前記メモリ部に書き込まれた前記データが読み出された時、前記データに対応した論理アドレスと、前記第１の記憶部の前記論理アドレスと対応する中間アドレス、及び前記データの読み出しが成功したかどうかを示すフラグが記憶される第３の記憶部と、
を具備し、
前記データ移動処理部によるデータの移動処理において、前記第３の記憶部に記憶された前記フラグが前記データの読み出し成功を示す場合、前記第３の記憶部に記憶された前記中間アドレスと前記データに対応した論理アドレスに従って求められた前記第１の記憶部に記憶された中間アドレスとを比較し、前記データの移動処理中に前記メモリ部の同一論理アドレスに対して、書き込みが行われたかどうかを判定し、これら中間アドレスが不一致である場合、書き込みが行われているとして、前記データの移動処理を無効化させる制御手段と
を具備することを特徴とするメモリ装置。
【請求項２】
前記第１、第２、第３の記憶部に接続され、前記第１、第２、第３の記憶部の内容を更新する更新部をさらに具備する請求項１記載のメモリ装置。
【請求項３】
前記更新部は、前記データ移動処理部によるデータの移動処理において、前記メモリ部から前記データの読み出しに成功した場合、前記第３の記憶部に成功したことを示すフラグを設定することを特徴とする請求項２記載のメモリ装置。
【請求項４】
前記更新部は、前記データ移動処理部によるデータの移動処理において、前記メモリ部から前記データの読み出しに失敗した場合、前記第３の記憶部に失敗したことを示すフラグを設定することを特徴とする請求項２記載のメモリ装置。
【請求項５】
メモリ部内のデータを移動する移動処理において、読み出しコマンドに従って前記メモリ部の第１の物理アドレスにより、前記メモリ部から書き込まれたデータを読み出し、
前記移動処理により、前記メモリ部に書き込まれた前記データが読み出された時、前記データに対応した論理アドレスと、前記第１の記憶部の前記論理アドレスと対応する中間アドレス、及び前記データの読み出しが成功したかどうかを示すフラグを第３の記憶部に設定し、
書き込みコマンドに従って前記読み出された前記データを第２の物理アドレスにより前記メモリ部に書き込み、
前記第３の記憶部に記憶された前記フラグが前記データの読み出し成功を示す場合、前記第３の記憶部に記憶された前記中間アドレスと前記データに対応した論理アドレスに従って求められた前記第１の記憶部に記憶された中間アドレスとを比較し、前記データの移動処理中に前記メモリ部の同一論理アドレスに対して、書き込みが行われたかどうかを判定し、これら中間アドレスが不一致である場合、書き込みが行われているとして、前記データの移動処理を無効化させる
ことを特徴とするメモリ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本実施形態は、例えばＳＳＤ（Solid State Drive）に適用されるメモリ装置及びメモリ制御方法に関する。
【背景技術】
【０００２】
近時、ハードディスクの代替としてＳＳＤが開発されている。このメモリ装置は、記憶媒体としてＮＡＮＤフラッシュメモリが用いられ、論理アドレスを物理アドレスへと変換するアドレス変換方式、及び追記書き込み方式が採用されている。さらに、このメモリ装置は、空きスペースを削減し、容量を節約するため、書き込みデータの移動処理が行われる。データの移動処理と、論理アドレスが同一であるユーザデータの書き込みとが並列して行われる場合、アドレス変換テーブルに記録された最新データの位置が失われてしまう。これを回避するため、このような場合、ユーザデータの書き込みが待たされる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００１−１８４２５４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本実施形態は、ユーザデータの書き込み処理速度を向上することが可能なメモリ装置及びメモリ制御方法を提供しようとするものである。
【課題を解決するための手段】
【０００５】
本実施形態のメモリ装置は、メモリ部と、論理アドレスと、この論理アドレスに対応され、前記メモリ部の物理アドレスを推定するための中間アドレスを記憶する第１の記憶部と、前記中間アドレスと、この中間アドレスに対応する前記物理アドレスを記憶する第２の記憶部と、前記メモリ部内に書き込まれたデータを移動処理するデータ移動処理部と、前記データ移動処理部により、前記メモリ部に書き込まれた前記データが読み出された時、前記データに対応した論理アドレスと、前記第１の記憶部の前記論理アドレスと対応する中間アドレス、及び前記データの読み出しが成功したかどうかを示すフラグが記憶される第３の記憶部と、を具備し、前記データ移動処理部によるデータの移動処理において、前記第３の記憶部に記憶された前記フラグが前記データの読み出し成功を示す場合、前記第３の記憶部に記憶された前記中間アドレスと前記データに対応した論理アドレスに従って求められた前記第１の記憶部に記憶された中間アドレスとを比較し、前記データの移動処理中に前記メモリ部の同一論理アドレスに対して、書き込みが行われたかどうかを判定し、これら中間アドレスが不一致である場合、書き込みが行われているとして、前記データの移動処理を無効化させる制御手段とを具備することを特徴とする。
【図面の簡単な説明】
【０００６】
【図１】本実施形態に係るメモリ装置を概略的に示す構成図。
【図２】図１に示す一部の構成を示す概略的に示す構成図。
【図３】図２に示すアドレス解決部の動作を示すフローチャート。
【図４】図２に示すテーブル更新部の動作を示すフローチャート。
【図５】本実施形態に係るデータ移動処理の動作を概略的に示す図。
【図６Ａ】本実施形態の動作を比較するために示すものであり、図２に示す一部の構成を示す図。
【図６Ｂ】図６Ａと異なる動作状態を示す図。
【図６Ｃ】図６Ｂと異なる動作状態を示す図。
【図６Ｄ】図６Ｃと異なる動作状態を示す図。
【図７Ａ】本実施形態の動作を示すものであり、図２に示す一部の構成を示す図。
【図７Ｂ】図７Ａと異なる動作状態を示す図。
【図７Ｃ】図７Ｂと異なる動作状態を示す図。
【図８Ａ】本実施形態の図７Ａ乃至図７Ｃと異なる動作を示すものであり、図２に示す一部の構成を示す図。
【図８Ｂ】図８Ａと異なる動作状態を示す図。
【図８Ｃ】図８Ｂと異なる動作状態を示す図。
【図８Ｄ】図８Ｃと異なる動作状態を示す図。
【図９Ａ】本実施形態の図７Ａ乃至図７Ｃ、図８Ａ乃至図８Ｄと異なる動作を示すものであり、図２に示す一部の構成を示す図。
【図９Ｂ】図９Ａと異なる動作状態を示す図。
【図９Ｃ】図９Ｂと異なる動作状態を示す図。
【図９Ｄ】図９Ｃと異なる動作状態を示す図。
【発明を実施するための形態】
【０００７】
以下、実施の形態について、図面を参照して説明する。
【０００８】
図１は、本実施形態に係るメモリシステムの概略構成を示している。このメモリシステム１１は、フロントエンド１２、バックエンド１３、ＣＰＵ１４、ＣＰＵ１５、コマンド系バス（以下、コマンドバスと称す）１６、データ系バス（以下、データバスと称す）１７、データバッファ１８、ＮＡＮＤチャネル１９、ＮＡＮＤフラッシュメモリ２０、ＳＡＳ（Serial Attached SCSI）２１により構成されている。
【０００９】
フロントエンド１２は、ＣＰＵ１４により制御され、データの書き込み時、ＳＡＳ２１を介してホスト機器２２からコマンド、データ、アドレスを受け、データバス１７を介してデータをデータバッファ１８に供給し、コマンドバス１６を介してコマンド及びアドレスをＣＰＵ１４に供給する。また、データの読み出し時、ＮＡＮＤフラッシュメモリ２０から読み出され、ＮＡＮＤチャネル１９、バックエンド１３、データバス１７を介してデータバッファ１８に保持されたデータを、ＳＡＳ２１を介してホスト機器２２に転送する。
【００１０】
バックエンド１３は、ＣＰＵ１５により制御される。このバックエンド１３は、例えばコマンドキューを有し、ＣＰＵ１５からコマンドバス１６を介してコマンドキューにコマンドを受ける。データの書き込み時、データバス１７を介してデータバッファ１８からデータを受け、ＮＡＮＤチャネル１９を介してＮＡＮＤフラッシュメモリ２０にデータを転送する。また、データの読み出し時、ＮＡＮＤフラッシュメモリ２０から読み出されたデータを、ＮＡＮＤチャネル１９を介して受け、データバス１７を介してデータバッファ１８に転送する。このバックエンド１３は、後述するように、アドレス解決部、データ書き込み部、テーブル更新部、及びスコアボード等を有し、ＮＡＮＤフラッシュメモリ２０のアドレス、データ、及び各種プロトコルを管理する。
【００１１】
データバッファ１８は、例えばＲＡＭ（Random Access Memory）により構成され、データバス１７を介してフロントエンド１２、及びバックエンド１３から供給されたデータを記憶するとともに、後述するアドレスの変換テーブルを記憶する。
【００１２】
ＮＡＮＤフラッシュメモリ２０は、複数のメモリセルがマトリクス状に配置されたメモリ部としてのメモリセルアレイを有し、論理アドレスを物理アドレスに変換するアドレス変換方式と、ページ単位にデータを空き領域に順次書き込む追記書き込み方式が用いられている。さらに、ＮＡＮＤフラッシュメモリ２０は、書き込まれたデータを空き領域に移動し、無駄な空き領域を削減するデータ移動処理を備えている。
【００１３】
図２は、上記データバッファ１８、バックエンド１３、ＣＰＵ１５、ＮＡＮＤフラッシュメモリ２０（８００）の概略的な機能を示している。
【００１４】
データバッファ１８は、第１、第２の記憶部としての変換テーブル６００、７００を有している。ＮＡＮＤフラッシュメモリ２０の物理メモリ全体は、所定数のページ（例えば数千ページ）毎に論理アドレスが設定されている。これら論理アドレスの一部が中間アドレスとともに変換テーブル６００に記憶される。この中間アドレスは、物理アドレスを推定するためのアドレスである。この変換テーブル６００は全てのエントリを使い切った場合、ＣＰＵ１５に要求が出され、空白のエントリにより構成された新たな変換テーブル６００がＣＰＵ１５によりデータバッファ１８内に用意される。
【００１５】
また、変換テーブル７００は、ＮＡＮＤフラッシュメモリ２０の物理メモリに対応して割り付けられた中間アドレスを物理アドレスとともに記憶する。この変換テーブル７００も、変換テーブル６００と同様に、中間アドレスを使い切った場合、ＣＰＵ１５に要求が出され、新たな変換テーブル７００がＣＰＵ１５によりデータバッファ１８内に用意される。
【００１６】
バックエンド１３は、例えばアドレス解決部３００、データ書き込み部４００、テーブル更新部５００、及びスコアボード１００を含んでいる。
【００１７】
アドレス解決部３００は、ＣＰＵ１５から書き込みコマンドが供給された場合、変換テーブル６００、７００を用いて、書き込みコマンドとともに供給された論理アドレスを中間アドレスから物理アドレスに変換する。
【００１８】
データ書込み読出し部４００は、アドレス解決部３００及びテーブル更新部５００に接続され、物理メモリ８００（ＮＡＮＤフラッシュメモリ２０）に対してデータの書込み、及び読出しを制御する。すなわち、データ書込み読出し部４００は、書き込みコマンドに従って、アドレス解決部３００により割り当てられた物理アドレスに従って、データバッファ１８に保持されたデータを物理メモリ８００に書き込む。また、読出しコマンドに従って、物理メモリ８００からデータを読み出す。データ書込み読出し部４００は、物理メモリ８００に対するデータの書き込みが成功したか否かを示す信号、及びデータの読出しが成功したか否かを示す信号を出力する。
【００１９】
テーブル更新部５００は、データ書込み読出し部４００、変換テーブル６００、７００、スコアボード１００に接続され、データの書き込み、読み出し時、変換テーブル６００、７００を検索し、データの書き込み時、必要なアドレスを更新する。また、データの読み出し時、スコアボード１００の内容を更新する。
【００２０】
スコアボード１００は、論理アドレス１１０に対応して中間アドレス１２０を記憶するとともに、最新データの読出しが成功したかどうかを示す最新データ読出し成功フラグ１３０を記憶する。
【００２１】
データ移動処理部２００は、既に書き込まれたデータを読み出し、この読み出されたデータを新たに割り付けられた領域に書き込む処理を行う。例えば記憶領域（ブロック）に記憶されたデータの一部のみを書き換える場合、書き換える新データを消去済みの新ブロックに書き込み、書き換えられない残りのデータを旧ブロックから読み出し、新ブロックに書き込む必要がある。データ移動処理部２００は、このようなデータの移動処理を実行する。
【００２２】
図３は、上記アドレス解決部３００の動作を具体的に示している。アドレス解決部３００は、例えばユーザデータの書き込み時において、ＣＰＵ１５から発行されたコマンドを受け、データの移動処理において、テーブル更新部５００から発行されたコマンドを受ける。
【００２３】
アドレス解決部３００は、コマンドが供給されると、コマンドの種別を判別する（Ｓ１１）。この判別の結果、供給されたコマンドが書き込みコマンドである場合、変換テーブル７００が参照され、コマンドの投入順序に従って、変換テーブル７００に予め設定された中間アドレス、及び物理アドレスがコマンドに割り当てられる（Ｓ１２）。
【００２４】
また、判別の結果、供給されたコマンドが読み出しコマンドである場合、コマンドに付されたアドレスの種別が論理アドレスであるか、物理アドレスであるかが判別される（Ｓ１３）。この結果、物理アドレスであると判別された場合、アドレス解決をせずに終了される。
【００２５】
一方、論理アドレスであると判別された場合、コマンドに付加された論理アドレスと一致する論理アドレスが、変換テーブル６００から検索され、この論理アドレスに対応する中間アドレスが読み出される（Ｓ１４）。次いで、読み出された中間アドレスと一致する中間アドレスが、変換テーブル７００から検索され、この検索された中間アドレスに対応する物理アドレスが読み出される。この物理アドレスは、入力されたコマンドに割り当てられる（Ｓ１５）。
【００２６】
図４は、テーブル更新部５００の動作を具体的に示している。後述するように、データ書込み読出し部４００により、データの書き込み、又は読み出し処理が終了した場合、データ書込み読出し部４００から書き込みが成功したか否かを示す信号、又は読み出しが成功したか否かを示す信号が出力される。テーブル更新部５００は、これらの信号に従って動作する。
【００２７】
テーブル更新部５００は、先ず、現在供給されているコマンドの種別を判別する。すなわち、コマンドがデータの移動処理であるか否かを判別する（Ｓ２１）。この判別の結果、データ移動処理ではない場合、供給されたコマンドが読み出しコマンドであるか書き込みコマンドであるかを判別する（Ｓ２２）。この結果、コマンドが読み出しコマンドである場合、ＣＰＵ１５に処理の終了が通知される（Ｓ２５）。
【００２８】
また、判別の結果、供給されたコマンドが書き込みコマンドである場合、データ書込み読出し部４００から供給される書き込みが成功したか否かを示す信号が判別される（Ｓ２３）。この結果、書き込みが失敗したものである場合、ＣＰＵ１５に処理の終了が通知される（Ｓ２５）。また、書き込みが成功している場合、書き込み変換テーブル６００の対応する論理アドレスのエントリに書き込みに使用した中間アドレスを登録する（Ｓ２４）。この後、ＣＰＵ１５に処理の終了が通知される（Ｓ２５）。
【００２９】
一方、前記ステップＳ２１において、供給されたコマンドがデータ移動処理のコマンドであると判別された場合、コマンドが書き込みコマンドであるか読み出しコマンドであるかが判別される（Ｓ２６）。
【００３０】
この結果、供給されたコマンドが読み出しコマンドであると判別された場合、変換テーブル６００より物理メモリ８００から読み出した論理アドレスに従って最新の中間アドレスが求められる（Ｓ２７）。この後、変換テーブル７００より、変換テーブル６００より求めた最新の中間アドレスに従って、最新の物理アドレスが求められる（Ｓ２８）。次いで、変換テーブル７００から求めた最新の物理アドレスとコマンドに付加された物理アドレスとが比較され、両物理アドレスが一致している場合、最新データの読み出しに成功したと判定され、両物理アドレスが不一致である場合、最新データの読み出しに失敗したと判定される（Ｓ２９）。この後、論理アドレス、最新の中間アドレス、及び最新の読み出し成功フラグがスコアボード１００に登録される（Ｓ３０）。最新データの読み出しに成功したと判定された場合、スコアボード１００の最新データ読み出し成功フラグ１３０が“１”に設定され、失敗したと判定された場合、最新データ読み出し成功フラグ１３０が“０”に設定される。この後、アドレス解決部３００へ書き込みコマンドが供給される（Ｓ３１）。
【００３１】
一方、ステップＳ２６において、書き込みコマンドであると判別された場合、データ書込み読出し部４００において、書き込みコマンドに応じた書き込み動作が行われた後、書込み読出し部４００から供給される書き込みが成功したか否かを示す信号が判別される（Ｓ３２）。この結果、書き込みが失敗している場合、ＣＰＵ１５へ処理の終了が通知される（Ｓ２５）。
【００３２】
また、書き込みが成功している場合、変換テーブル６００より、書き込みコマンドに付加された論理アドレスに従って、最新の中間アドレスが求められる（Ｓ３３）。この後、スコアボード１００より、書き込みコマンドに付加された論理アドレスに従って、読み出し時の中間アドレス及び最新の読み出し成功フラグが検索される（Ｓ３４）。次に、この検索された最新の読出し成功フラグが“０”であるか“１”であるかが判定される。この結果、フラグが“０”である場合、ＣＰＵ１５へ処理の終了が通知される（Ｓ３５）。
【００３３】
また、フラグが“１”である場合、変換テーブル６００より検索された最新の中間アドレスとスコアボード１００の中間アドレスが比較される（Ｓ３６）。この比較の結果、これらが一致している場合、ステップＳ２４において、変換テーブル６００の対応する論理アドレスのエントリに書き込みに使用した中間アドレスが登録される（Ｓ２４）。一方、比較の結果、両中間アドレスが不一致である場合、ＣＰＵ１５へ処理の終了が通知される（Ｓ２５）。
【００３４】
図５は、図２に示すＣＰＵ１５、アドレス変換部３００、データ書込み読出し部４００、テーブル更新部５００の概略的な動作シーケンスを示すものであり、図３において図１、図２と同一部分には同一符号を付している。図３を参照して、図２の動作について概略的に説明する。
【００３５】
例えばユーザデータの書き込み処理において、先ず、ＣＰＵ１５からアドレス解決部３００に、書き込みコマンドが投入される（Ｓ４１）。この書き込みコマンドには、論理アドレスが付加されている。アドレス解決部３００は、予め与えられた変換テーブル７００から物理アドレスを得る。この物理アドレスを書き込みコマンドに割り付ける（Ｓ４２）。この物理アドレスが付与された書き込みコマンドは、アドレス解決部３００から書き込み部４００に供給される（Ｓ４３）。
【００３６】
データ書込み読出し部４００により、物理メモリ８００（ＮＡＮＤフラッシュメモリ２０）の該当する物理アドレスにデータが書き込まれる（Ｓ４４）。このとき、書き込みコマンドに付加された論理アドレスが付随情報としてデータと共に物理メモリ８００に書き込まれる。
【００３７】
この後、データ書込み読出し部４００から書き込みが成功したか否かがテーブル更新部５００に通知される（Ｓ４５）。このテーブル更新部５００は、データ書込み読出し部４００から書き込みが成功した旨の通知が有った場合、変換テーブル６００を更新する（Ｓ４６）。すなわち、変換テーブル６００の論理アドレスに対応して中間アドレスが記録される。変換テーブル６００の更新が完了した場合、テーブル更新部５００からＵＰＵ１５に終了通知が送られる（Ｓ４７）。
【００３８】
一方、データ移動処理は、データの読み出し、及びデータの書き込み処理を含んでいる。データの読み出し処理は、ユーザによるデータ読み出し処理と類似する。しかし、ユーザによるデータ読み出し処理は、論理アドレスが使用されるが、データ移動処理におけるデータ読み出し処理は、物理アドレスが用いられる。
【００３９】
データ移動処理において、ＣＰＵ１５から物理読み出しコマンドが出力される場合、物理読み出しコマンドは、論理アドレスを用いる場合のようにアドレス解決部３００において、アドレス解決を行わず、データ書込み読出し部４００に供給される（Ｓ５１、Ｓ５２）。データ書込み読出し部４００は、物理アドレスにより直接、物理メモリ８００からデータを読み出す（Ｓ５３）。この読み出し動作の後、データ書込み読出し部４００から読み出しが、成功したか否かを示す信号が出力される（Ｓ５４）。テーブル更新部５００は、データ書込み読出し部４００から読み出しが成功したか否かを示す信号が供給されると、この信号に従って、スコアボード１００の最新データ読み出し成功フラグ１３０を設定する（Ｓ５５）。
【００４０】
この後、テーブル更新部５００は、読み出したデータを書き込むべく、書き込みコマンドを発生し、アドレス解決部３００に供給する（Ｓ５６）。すなわち、テーブル更新部５００は、アドレス解決部３００に書き込みコマンドを供給する。アドレス解決部３００は、変換テーブル７００を参照し、供給された書き込みコマンドに、空きブロックに対応する物理アドレスを割り当て（Ｓ５７）、この物理アドレスと書き込みコマンドをデータ書込み読出し部４００に供給する（Ｓ５８）。
【００４１】
データ書込み読出し部４００は、アドレス解決部３００から供給された書き込みコマンドに従って、物理メモリ８００に、上記読み出されたデータを書き込む（Ｓ５９）。この後、データ書込み読出し部４００は、書き込みが成功したか否かを示す信号を出力する（Ｓ６０）。テーブル更新部５００は、データ書込み読出し部４００から書き込みが成功したことを示す信号を受けると、スコアボード１００を確認するとともに、変換テーブル６００を更新する（Ｓ６１）。すなわち、スコアボード１００の最新データ読み出し成功フラグが成功を示す場合、及び変換テーブル６００が更新される。この後、データ更新部５００は、終了通知をＣＰＵ１５に供給する（Ｓ６２）。
【００４２】
図６Ａ乃至図６Ｄは、本実施形態を使用しない場合を示す比較例である。この比較例は、データ移動処理中にユーザ書き込みが行われて最新データ位置が矛盾する場合における変換テーブル６００、７００、及び物理メモリ８００の状態を示している。
【００４３】
このメモリ装置において、データ移動処理は、物理読み出しコマンドで最新のデータを物理メモリ８００から読み出し、その後、論理書き込みコマンドにより新たな中間アドレス・物理アドレスにデータが移動される。
【００４４】
図６Ａ（ステップ１）は、データ移動対象となる論理アドレス＝２０１のデータが書き込まれた直後の状態を示している。データは物理メモリ８００の物理アドレス＝２１３に書き込まれ、それに対応する中間アドレス＝２０２が変換テーブル６００の論理アドレス＝２０１のエントリに登録される。また、物理メモリ８００の物理アドレス＝２１３に対応して、論理アドレス＝２０１が書き込まれる。
【００４５】
図６Ｂ（ステップ２）は、データ移動処理の一部として、直前に書き込まれた物理アドレス＝２１３のデータを、物理読み出しコマンド２１０により読み出す場合を示している。このデータは論理アドレス＝２０１のデータとしては、この時点において最新のものである。
【００４６】
図６Ｃ（ステップ３）は、ステップ２で使用した論理アドレス＝２０１への新たなユーザ書き込みコマンドが実行された場合を示している。この場合、新たなデータは物理メモリ８００の物理アドレス＝２３３に書き込まれたものとする。このため、変換テーブル６００の論理アドレス＝２０１のエントリに新たな中間アドレス＝２３２が登録される。この時点において、物理アドレス＝２１３のデータは旧いデータとなる。したがって、ステップ２で読み出したデータも旧いデータとなる。
【００４７】
図６Ｄ（ステップ４）は、データ移動処理の一部として、ステップ２で読み出した旧いデータを論理書き込みコマンドにより物理アドレス＝２２３に書き込む場合を示している。本実施形態を使用しない場合、前述した手順に基づき、変換テーブル６００が物理アドレス＝２２３に対応する中間アドレス＝２２２に更新される。この結果、変換テーブル６００の論理アドレス＝２０１のエントリは、最新データではなく旧いデータを指すことになる。このため、最新データ位置の情報が失われる。
【００４８】
したがって、本実施形態を適用しない場合、上記現象を避けるため、データ移動処理を行っている最中は、同一論理アドレスへのユーザ書き込みコマンドを禁止する必要がある。このため、ユーザ書き込みコマンドの処理速度が低下することとなる。
【００４９】
これに対して、図７Ａ乃至図７Ｄは、本実施形態におけるデータ移動処理を具体的に示すものであり、データ移動処理に伴う変換テーブル６００、７００、物理メモリ８００、及びスコアボード１００の状態を示している。
【００５０】
図７Ａ（ステップ１）は、移動対象のデータが、ユーザの書き込みコマンドにより書き込まれた状態を示している。すなわち、データ移動対象となる論理アドレス＝２０１のデータが書き込まれた直後の状態を示している。データは物理メモリ８００の物理アドレス＝２１３に書き込まれ、それに対応する中間アドレス＝２０２が変換テーブル６００の論理アドレス＝２０１のエントリに登録される。また、物理メモリ８００の物理アドレス＝２１３に対応して、論理アドレス＝２０１が書き込まれる。
【００５１】
次に、図７Ｂ（ステップ２）は、データ移動処理の一部としての物理読み出しコマンド２１０が実行された後の状態を示している。物理読み出しコマンド２１０に従って、物理メモリ８００の物理アドレス＝２１３からデータが読み出された後、物理メモリ８００上の論理アドレス＝２０１に基づき、変換テーブル６００が検索され、中間アドレス＝２０２が求められる（図４、Ｓ２７）。次いで、中間アドレス＝２０２に基づき、変換テーブル７００が検索され、物理アドレス＝２１３が求められる（図４、Ｓ２８）。変換テーブル６００、７００を経由して求めた物理アドレス＝２１３と、読み出しコマンド２１０実行時の物理アドレス＝２１３が等しいため、最新データの読み出しが成功したと判定される（図４、Ｓ２９）。最後にスコアボード１００に、論理アドレス１１０＝２０１、中間アドレス１２０＝２０２、最新読み出し成功フラグ１３０＝１が登録される（図４、Ｓ３０）。
【００５２】
図７Ｃ（ステップ３）は、データ移動処理の一部である論理書き込みコマンド２２０の実行後の状態を示している。すなわち、テーブル更新部５００から供給された論理書き込みコマンド２２０に従って、物理メモリ８００の物理アドレス２２３に書き込みが実行された後、変換テーブル６００を更新する前に次の判断が行われる。
【００５３】
先ず、変換テーブル６００が論理アドレス＝２０１で検索され、直前に登録された中間アドレス＝２０２が求められる（図４、Ｓ３３）。次に、スコアボード１００が論理アドレス＝２０１で検索され、そこに登録された中間アドレス＝２０２と最新読み出し成功フラグが求められる（図４、Ｓ３４）。この後、最新読み出し成功フラグ１３０が判断される（図４、Ｓ３５）。この場合、最新読み出し成功フラグ１３０は、“１”であるため、スコアボード１００から読み出された中間アドレス１２０＝２０２と変換テーブル６００から求めた中間アドレス＝２０２が比較される（図４、Ｓ３６）。これらの値は等しいため、物理読み出しコマンド２１０が実行された後、論理書き込みコマンド２２０が実行されるまでに、ユーザによる書き込みコマンドが実行されていないことが分かる。また、最新読み出し成功フラグが“１”であるため、物理読み出しコマンド２１０の実行前にも、ユーザによる書き込みコマンドの割り込みが無いことを確認出来る。
【００５４】
これらが確認された後、変換テーブル６００の論理アドレス＝２０１のエントリが中間アドレス＝２０２から２２２に更新される。したがって、論理アドレス＝２０１に対応する最新データの位置が物理アドレス２２３により示される（図４、Ｓ２４）。
【００５５】
図８Ａ乃至図８Ｄは、本実施形態を使用した場合において、データ移動処理の論理書き込みコマンドの前に、ユーザ書き込みが行われたことを、スコアボード１００を用いて検出する場合を示している。
【００５６】
すなわち、図８Ｂ（ステップ２）に示すデータ移動処理の物理読み出しコマンド２１０の実行と、図８Ｄ（ステップ４）に示す論理書き込みコマンド２２０との間の、図８Ｃ（ステップ３）において、ユーザ書き込みコマンドが実行される。
【００５７】
図８Ａ（ステップ１）、図８Ｂ（ステップ２）は、図７Ａ、図７Ｂと同様である。図８Ｃ（ステップ３）は、論理アドレス２０１に対してユーザ書き込みコマンドが実行され、変換テーブル６００の論理アドレス＝２０１のエントリが、中間アドレス＝２３２に更新され、図８Ｂ（ステップ２）で、物理メモリ８００から読み出した物理アドレス＝２１３のデータが旧くなった状態を示している。
【００５８】
図８Ｄ（ステップ４）は、データ移動処理の一部である論理書き込みコマンド２２０の実行後の状態である。この場合、論理書き込みコマンド２２０に従って、変換テーブル６００から論理アドレス＝２０１に対応する最新の中間アドレス＝２３２が求められる（図４、Ｓ３３）。次いで、スコアボード１００より、論理アドレス１１０＝２０１に従って中間アドレス１２０＝２０２、及び最新読み出し成功フラグ１３０＝１が求められる（図４、Ｓ３４）。
【００５９】
次に、最新読み出し成功フラグが判定される（図４、Ｓ３５）。この場合、最新読み出し成功フラグ１３０は“１”であるため、変換テーブル６００から求めた中間アドレス＝２３２とスコアボード１００から求めた中間アドレス＝２０２とが比較される（図４、Ｓ３６）。この比較の結果、これらは不一致であるため、物理読み出しコマンド２１０実行後、論理書き込みコマンド２２０の実行までにユーザ書き込みコマンドが行われたことが検出される。この不一致が検出された場合、論理書き込みコマンド２２０で書き込んだデータは図８Ｂ（ステップ２）の旧いものであるため、論理書き込みコマンド２２０に従った処理は、変換テーブル６００を更新せず、ＣＰＵ１５に終了を通知する（図４、Ｓ２５）。したがって、論理書き込みコマンド２２０が無効化される。すなわち、データ移動処理が無効化される。
【００６０】
論理アドレス＝２０１に対応する最新データは、図８Ｃ（ステップ３）で書き込んだ中間アドレス＝２３２、物理アドレス＝２３３のものであることが、変換テーブル６００、変換テーブル７００から求められる。したがって、最新データの位置を正しく管理することができる。
【００６１】
図９Ａ乃至図９Ｄは、本実施形態を使用した場合において、データ移動処理の物理読み出しコマンドの前に、ユーザ書き込みが行われたことを、スコアボードを用いて検出する場合を示している。
【００６２】
図９Ａ（ステップ１）は、図８Ａと同様である。
【００６３】
図９Ｂ（ステップ２）は、図９Ｃ（ステップ３）で使用する物理アドレスをソフトウェアが計算した後、ユーザ書き込みコマンドが実行された状態を示している。最新データが物理メモリ８００の物理アドレス＝２３３に書き込まれ、変換テーブル６００の論理アドレス＝２０１のエントリには、変換テーブル７００から求められた中間アドレス＝２３２が登録される。
【００６４】
図９Ｃ（ステップ３）は、データ移動処理の一部である物理読み出しコマンド２１０が実行された後の状態を示している。物理読み出しコマンド２１０のデータ位置算出は、ス図９Ｂ（ステップ２）よりも前にソフトウェアによって行われたものであり、現時点において最新ではない物理アドレス＝２１３のデータが読み出される。図８Ｂ（ステップ２）と同様に、物理メモリ８００上の論理アドレス＝２０１に従って、変換テーブル６００が検索され、中間アドレス＝２３２が求められる（図４、Ｓ２７）。この求められた中間アドレス＝２３２に従って変換テーブル７００が検索され、物理アドレス＝２３３が求められる（図４、Ｓ２８）。変換テーブル６００、７００を経由して求めた物理アドレス＝２３３と、物理読み出しコマンドに付加された物理アドレス＝２１３とが比較される。しかし、これら中間アドレスは一致しないため、最新のデータの読み出しに失敗したことが分かる。このため、最新読み出し成功フラグは“０”と判定される（図４、Ｓ２９）。この後、スコアボード１００に、論理アドレス１１０＝２０１、中間アドレス１２０＝２３２、最新読み出し成功フラグ１３０＝０が登録される（図４、Ｓ３０）。
【００６５】
図９Ｄ（ステップ４）は、データ移動処理の一部である論理書き込みコマンド２２０の実行後の状態を示している。テーブル更新部５００からの論理書き込みコマンド２２０に従って、変換テーブル６００から求めた直前の登録中間アドレス＝２３２（図４、Ｓ３３）と、スコアボード１００に記録された中間アドレス１２０＝２３２と、最新読み出し成功フラグが読み出される（図４、Ｓ３４）。この後、最新読み出し成功フラグが“０”であることが判別される（図４、Ｓ３５）。これにより、物理読み出しコマンド２１０の実行前にユーザ書き込みコマンドの割り込みがあったことが検出される。これが検出された場合、論理書き込みコマンド２２０で書き込んだデータは、図９Ｃ（ステップ３）において書き込まれた旧いデータである。このため、論理書き込みコマンド２２０に従った処理は、変換テーブル６００を更新せず、ＣＰＵ１５に終了を通知する（図４、Ｓ２５）。したがって、論理書き込みコマンド２２０が無効化される。すなわち、データ移動処理が無効化される。
【００６６】
論理アドレス＝２０１に対応する最新データは、図９Ｂ（ステップ２）で書き込んだ中間アドレス＝２３２、物理アドレス＝２３３のものであることが、変換テーブル６００、変換テーブル７００から求められる。したがって、最新データ位置を正しく管理することができる。
【００６７】
上記実施形態によれば、スコアボード１００を設け、このスコアボード１００に論理アドレス１１０に対応して中間アドレス１２０、及び最新データ読み出し成功フラグ１３０を登録している。このため、データ移動処理において、物理読み出しコマンド実行後の論理書き込みコマンドにおいて、スコアボード１００に登録された中間アドレス及び最新読み出し成功フラグ１３０を確認することにより、物理読み出しコマンドが実行された後、論理書き込みコマンドが実行されるまでにユーザによる書き込みコマンドが実行されたかどうかを確認できる。このため、データ移動処理を行っている最中においても同一論理アドレスへのユーザ書き込みコマンドを禁止する必要がない。したがって、ユーザ書き込みコマンドの処理速度が低下することを防止できる。
【００６８】
さらに、最新読み出し成功フラグが“０”である場合、物理読み出しコマンド２１０の実行前に、ユーザによる書き込みコマンドの割り込みがあったことを確認できる。この場合、データ移動処理を行った場合、変換テーブル６００を更新しないため、最新のデータ位置を正しく管理することが可能である。
【００６９】
尚、スコアボード１００の最新読み出し成功フラグ１３０は、物理読み出しコマンド２１０に従って設定したが、これに限定されるものではなく、例えばユーザ書き込みコマンドに従って設定してもよい。
【００７０】
その他、本発明は上記各実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記各実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【符号の説明】
【００７１】
１２…フロントエンド、１３…バックエンド、１４、１５…ＣＰＵ、１８…データバッファ、２０…ＮＡＮＤフラッシュメモリ、１００…スコアボード、２００…データ移動処理部、３００…アドレス解決部、４００…データ書込み読出し部、５００…テーブル更新部、６００、７００…変換テーブル、８００…物理メモリ（ＮＡＮＤフラッシュメモリ）。
【図１】
0005323030.tif 000002
【図２】
0005323030.tif 000003
【図３】
0005323030.tif 000004
【図４】
0005323030.tif 000005
【図５】
0005323030.tif 000006
【図６Ａ】
0005323030.tif 000007
【図６Ｂ】
0005323030.tif 000008
【図６Ｃ】
0005323030.tif 000009
【図６Ｄ】
0005323030.tif 000010
【図７Ａ】
0005323030.tif 000011
【図７Ｂ】
0005323030.tif 000012
【図７Ｃ】
0005323030.tif 000013
【図８Ａ】
0005323030.tif 000014
【図８Ｂ】
0005323030.tif 000015
【図８Ｃ】
0005323030.tif 000016
【図８Ｄ】
0005323030.tif 000017
【図９Ａ】
0005323030.tif 000018
【図９Ｂ】
0005323030.tif 000019
【図９Ｃ】
0005323030.tif 000020
【図９Ｄ】
0005323030.tif 000021