(57)【要約】【課題】不揮発性メモリに対するリフレッシュ処理を適切に制御する。【解決手段】エラー情報管理部は、メモリ上の複数のアドレスにおけるエラー情報を管理する。リフレッシュ対象決定部は、エラー情報管理部によって管理されたエラー情報に従って、メモリにおけるリフレッシュ処理の対象となるアドレスを決定する。エラー情報管理部およびリフレッシュ対象決定部は、メモリを制御する記憶制御装置に設けられてもよく、または、メモリに対してアクセスを指示するホストコンピュータに設けられてもよい。【選択図】図１
2014157391.tif 000002
【特許請求の範囲】
【請求項１】
メモリ上の複数のアドレスにおけるエラー情報を管理するエラー情報管理部と、
前記エラー情報に基づいて前記メモリにおけるリフレッシュ対象となるアドレスを決定するリフレッシュ対象決定部と
を具備する記憶制御装置。
【請求項２】
前記エラー情報管理部は、前記エラー情報としてエラー検出されたアドレスと検出されたエラー数とを関連付けて管理し、
前記リフレッシュ対象決定部は、前記エラー数に基づいてそのエラー数に関連付けられたアドレスを前記リフレッシュ対象のアドレスとして決定する
請求項１記載の記憶制御装置。
【請求項３】
前記エラー情報管理部は、前記エラー数に基づいて管理の対象外とするか否かを判断する請求項２記載の記憶制御装置。
【請求項４】
前記エラー情報管理部は、前記エラー情報としてさらにリード回数を前記アドレスと関連付けて管理し、
前記リフレッシュ対象決定部は、前記リード回数に基づいてそのリード回数に関連付けられたアドレスを前記リフレッシュ対象のアドレスとして決定する
請求項２記載の記憶制御装置。
【請求項５】
前記エラー情報管理部は、前記メモリ上でエラーが発生した際に予め指定された条件に従って管理の対象外とするか否かを判断する請求項１記載の記憶制御装置。
【請求項６】
前記エラー情報管理部は、前記エラー情報としてエラー検出された前記メモリの物理アドレスと検出されたエラー数とを関連付けて管理し、
前記リフレッシュ対象決定部は、前記エラー数に基づいてそのエラー数に関連付けられた前記物理アドレスを前記リフレッシュ対象のアドレスとして決定する
請求項１記載の記憶制御装置。
【請求項７】
ホストコンピュータから前記メモリに対するアクセスコマンドに用いられる論理アドレスから前記メモリの物理アドレスへの変換を行うアドレス変換部をさらに具備し、
前記エラー情報管理部は、前記エラー情報としてエラー検出された前記メモリの論理アドレスと検出されたエラー数とを関連付けて管理し、
前記リフレッシュ対象決定部は、前記エラー数に基づいてそのエラー数に関連付けられた前記論理アドレスを選択し、当該論理アドレスを前記アドレス変換部によって前記物理アドレスに変換して前記リフレッシュ対象のアドレスとして決定する
請求項１記載の記憶制御装置。
【請求項８】
前記エラー情報管理部は、前記エラー情報と関連付けて前記メモリの前記アドレスに記憶されるデータを保持し、前記メモリの前記アドレスへのアクセスに際してそのデータを利用する請求項１記載の記憶制御装置。
【請求項９】
前記エラー情報管理部は、前記データに加えてそのエラー訂正コードを保持する請求項８記載の記憶制御装置。
【請求項１０】
前記エラー情報管理部は、前記エラー情報に含まれる前記エラー数が所定の条件を満たす場合のみ前記データを保持する請求項８記載の記憶制御装置。
【請求項１１】
前記エラー情報管理部は、ホストコンピュータから前記エラー情報の取得コマンドを受けた際には当該エラー情報を前記ホストコンピュータに通知する請求項１記載の記憶制御装置。
【請求項１２】
メモリと、
前記メモリ上の複数のアドレスにおけるエラー情報を管理するエラー情報管理部と、
前記エラー情報に基づいて前記メモリにおけるリフレッシュ対象となるアドレスを決定するリフレッシュ対象決定部と
を具備する記憶装置。
【請求項１３】
メモリと、
前記メモリに対するアクセスコマンドを発行するホストコンピュータと、
前記メモリ上の複数のアドレスにおけるエラー情報を管理するエラー情報管理部と、
前記エラー情報に基づいて前記メモリにおけるリフレッシュ対象となるアドレスを決定するリフレッシュ対象決定部と
を具備する情報処理システム。
【請求項１４】
前記ホストコンピュータは、前記エラー情報管理部および前記リフレッシュ対象決定部を備えて構成される請求項１３記載の情報処理システム。
【請求項１５】
メモリ上の複数のアドレスにおけるエラー情報を管理するエラー情報管理手順と、
前記エラー情報に基づいて前記メモリにおけるリフレッシュ対象となるアドレスを決定するリフレッシュ対象決定手順と
を具備する記憶制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、記憶制御装置に関する。詳しくは、不揮発性メモリのための記憶制御装置、記憶装置、情報処理システム、および、これらにおける処理方法ならびに当該方法をコンピュータに実行させるプログラムに関する。
【背景技術】
【０００２】
情報処理システムにおいては、ワークメモリとしてＤＲＡＭ（Dynamic Random Access Memory）等が用いられる。このＤＲＡＭは、通常、揮発性メモリであり、電源の供給が停止するとその記憶内容は消失する。一方、近年、不揮発性メモリ（ＮＶＭ：Non-Volatile Memory）が用いられるようになっている。この不揮発性メモリとしては、大きなサイズを単位としたデータアクセスに対応したフラッシュメモリと、小さな単位での高速なランダムアクセスが可能な不揮発性ランダムアクセスメモリ（ＮＶＲＡＭ：Non-Volatile RAM）とに大別される。ここで、フラッシュメモリの代表例としては、ＮＡＮＤ型フラッシュメモリが挙げられる。一方、不揮発性ランダムアクセスメモリの例としては、ＲｅＲＡＭ（Resistance RAM）、ＰＣＲＡＭ（Phase-Change RAM）、ＭＲＡＭ（Magnetoresistive RAM）などが挙げられる。
【０００３】
不揮発性メモリにおいては、時間経過に伴って記憶状態が変化してしまう事象を回避するために、記憶状態が変化する前に正しい記憶状態に書き直すというリフレッシュ処理が行われる。従来のメモリシステムとしては、不揮発性メモリからデータをリードした際にエラーが検出された場合、メモリコントローラがホストコンピュータからの指示を受けることなく自発的にリフレッシュ処理を実行するものが知られている（例えば、特許文献１参照。）。また、データリードの際にエラーが検出したことをホストコンピュータに通知し、ホストコンピュータが適切なタイミングでリフレッシュコマンドを実行するものが提案されている（例えば、特許文献１参照。）。リフレッシュ処理においては、エラーが検出されたデータに対してエラー訂正を行い、訂正したデータが不揮発性メモリに書き込まれる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００８−１９２２６７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述の従来技術では、リードコマンド実行中にメモリコントローラが自発的にリフレッシュ処理を行う場合、リードコマンドの実行に伴って発生する不揮発性メモリからのデータリード処理に加えて、ライト処理が発生する。そのため、リフレッシュ処理が行われなかった場合と比較してリードコマンド終了までの時間が長くなり、結果としてリードコマンドのパフォーマンス低下の要因となる。
【０００６】
また、リードコマンド終了後、次のリードコマンドやライトコマンドを実行する前に、メモリコントローラが自発的にリフレッシュ処理を行う場合を想定する。その場合、リフレッシュ処理中に、ホストコンピュータが次のコマンドを実行すると、リフレッシュ処理による不揮発性メモリへのアクセスが終了するまでは、次のコマンド処理のための不揮発性メモリへのアクセスが待たされることになる。すなわち、結果として、リードコマンドやライトコマンドのパフォーマンス低下の要因となる。
【０００７】
一方、ホストコンピュータからの指示によりリフレッシュ処理を実行することを想定する。この場合、リードコマンド実行時にエラーが検出された際、エラーが発生した旨が、リードコマンドの処理終了後にホストコンピュータに通知される。ホストコンピュータは、リフレッシュコマンドを発行するタイミングを選択して、通知された情報に基づいてリフレッシュコマンドを発行する。ライトコマンドおよびリードコマンドのパフォーマンス低下を抑えるために、ホストコンピュータは、ライトコマンドまたはリードコマンドが実行されないタイミングでフレッシュコマンドを実行しなければならない。しかしながら、ライトコマンドやリードコマンドが連続的に実行されて、フレッシュコマンドを直ちに実行できない状態で、複数のコマンドに起因してそれぞれエラーが検出された場合、エラーの情報を正確に保持できなくなってしまう。
【０００８】
本技術はこのような状況に鑑みて生み出されたものであり、不揮発性メモリに対するリフレッシュ処理を適切に制御することを目的とする。
【課題を解決するための手段】
【０００９】
本技術は、上述の問題点を解消するためになされたものであり、その第１の側面は、メモリ上の複数のアドレスにおけるエラー情報を管理するエラー情報管理部と、上記エラー情報に基づいて上記メモリにおけるリフレッシュ対象となるアドレスを決定するリフレッシュ対象決定部とを具備する記憶制御装置およびその方法である。これにより、複数のアドレスにおけるエラー情報に基づいてリフレッシュ対象となるアドレスを決定するという作用をもたらす。
【００１０】
また、この第１の側面において、上記エラー情報管理部は、上記エラー情報としてエラー検出されたアドレスと検出されたエラー数とを関連付けて管理し、上記リフレッシュ対象決定部は、上記エラー数に基づいてそのエラー数に関連付けられたアドレスを上記リフレッシュ対象のアドレスとして決定するようにしてもよい。これにより、エラー数に基づいてリフレッシュ対象アドレスを決定するという作用をもたらす。
【００１１】
また、この第１の側面において、上記エラー情報管理部は、上記エラー数に基づいて管理の対象外とするか否かを判断するようにしてもよい。これにより、エラー数に基づいて管理対象から外すという作用をもたらす。
【００１２】
また、この第１の側面において、上記エラー情報管理部は、上記エラー情報としてさらにリード回数を上記アドレスと関連付けて管理し、上記リフレッシュ対象決定部は、上記リード回数に基づいてそのリード回数に関連付けられたアドレスを上記リフレッシュ対象のアドレスとして決定するようにしてもよい。これにより、リード回数に基づいてリフレッシュ対象アドレスを決定するという作用をもたらす。
【００１３】
また、この第１の側面において、上記エラー情報管理部は、上記メモリ上でエラーが発生した際に予め指定された条件に従って管理の対象外とするか否かを判断するようにしてもよい。これにより、指定条件により管理対象から外すという作用をもたらす。
【００１４】
また、この第１の側面において、上記エラー情報管理部は、上記エラー情報としてエラー検出された上記メモリの物理アドレスと検出されたエラー数とを関連付けて管理し、上記リフレッシュ対象決定部は、上記エラー数に基づいてそのエラー数に関連付けられた上記物理アドレスを上記リフレッシュ対象のアドレスとして決定するようにしてもよい。これにより、エラー数に関連付けられた物理アドレスからリフレッシュ対象アドレスを決定するという作用をもたらす。
【００１５】
また、この第１の側面において、ホストコンピュータから上記メモリに対するアクセスコマンドに用いられる論理アドレスから上記メモリの物理アドレスへの変換を行うアドレス変換部をさらに具備し、上記エラー情報管理部は、上記エラー情報としてエラー検出された上記メモリの論理アドレスと検出されたエラー数とを関連付けて管理し、上記リフレッシュ対象決定部は、上記エラー数に基づいてそのエラー数に関連付けられた上記論理アドレスを選択し、当該論理アドレスを上記アドレス変換部によって上記物理アドレスに変換して上記リフレッシュ対象のアドレスとして決定するようにしてもよい。これにより、エラー数に関連付けられた論理アドレスからリフレッシュ対象アドレスを決定するという作用をもたらす。
【００１６】
また、この第１の側面において、上記エラー情報管理部は、上記エラー情報と関連付けて上記メモリの上記アドレスに記憶されるデータを保持し、上記メモリの上記アドレスへのアクセスに際してそのデータを利用するようにしてもよい。これにより、エラー情報に関連付けられたデータについてはメモリにアクセスすることなくそのデータを利用するという作用をもたらす。
【００１７】
また、この第１の側面において、上記エラー情報管理部は、上記データに加えてそのエラー訂正コードを保持するようにしてもよい。これにより、エラー情報に関連付けられたデータについてはメモリにアクセスすることなくそのデータおよびエラー訂正コードを利用するという作用をもたらす。
【００１８】
また、この第１の側面において、上記エラー情報管理部は、上記エラー情報に含まれる上記エラー数が所定の条件を満たす場合のみ上記データを保持するようにしてもよい。これにより、所定の条件を満たす場合のみメモリにアクセスすることなくそのデータを利用するという作用をもたらす。
【００１９】
また、この第１の側面において、上記エラー情報管理部は、ホストコンピュータから上記エラー情報の取得コマンドを受けた際には当該エラー情報を上記ホストコンピュータに通知するようにしてもよい。これにより、ホストコンピュータからのコマンドに従ってエラー情報を取得させるという作用をもたらす。
【００２０】
また、本技術の第２の側面は、メモリと、上記メモリ上の複数のアドレスにおけるエラー情報を管理するエラー情報管理部と、上記エラー情報に基づいて上記メモリにおけるリフレッシュ対象となるアドレスを決定するリフレッシュ対象決定部とを具備する記憶装置である。これにより、メモリ上の複数のアドレスにおけるエラー情報に基づいてリフレッシュ対象となるアドレスを決定するという作用をもたらす。
【００２１】
また、本技術の第３の側面は、メモリと、上記メモリに対するアクセスコマンドを発行するホストコンピュータと、上記メモリ上の複数のアドレスにおけるエラー情報を管理するエラー情報管理部と、上記エラー情報に基づいて上記メモリにおけるリフレッシュ対象となるアドレスを決定するリフレッシュ対象決定部とを具備する情報処理システムである。これにより、ホストコンピュータからのコマンドに従ってアクセスされるメモリの、複数のアドレスにおけるエラー情報に基づいて、リフレッシュ対象となるアドレスを決定するという作用をもたらす。
【００２２】
また、この第３の側面において、上記ホストコンピュータは、上記エラー情報管理部および上記リフレッシュ対象決定部を備えて構成されてもよい。これにより、ホストコンピュータが、メモリ上の複数のアドレスにおけるエラー情報に基づいてリフレッシュ対象となるアドレスを決定するという作用をもたらす。
【発明の効果】
【００２３】
本技術によれば、不揮発性メモリに対するリフレッシュ処理を適切に制御することができるという優れた効果を奏し得る。
【図面の簡単な説明】
【００２４】
【図１】本技術の実施の形態における情報処理システムの構成例を示す図である。
【図２】本技術の実施の形態におけるメモリ３００の記憶構成例を示す図である。
【図３】本技術の実施の形態におけるテーブル管理部２２０の構成例を示す図である。
【図４】本技術の実施の形態におけるエラー情報管理テーブル２２１の構成例を示す図である。
【図５】本技術の実施の形態におけるアドレス変換テーブル２２２の構成例を示す図である。
【図６】本技術の実施の形態におけるリードコマンド処理の処理手順例を示す流れ図である。
【図７】本技術の実施の形態におけるエラー情報管理テーブル更新の処理手順例を示す流れ図である。
【図８】本技術の実施の形態におけるエラー情報管理テーブル更新の第１の例を示す図である。
【図９】本技術の実施の形態におけるエラー情報管理テーブル更新の第２の例を示す図である。
【図１０】本技術の実施の形態におけるエラー情報管理テーブル更新の第３の例を示す図である。
【図１１】本技術の実施の形態におけるリフレッシュコマンド処理の処理手順例を示す流れ図である。
【図１２】本技術の実施の形態におけるリフレッシュコマンド処理の例を示す図である。
【図１３】本技術の実施の形態におけるライトコマンド処理の処理手順例を示す流れ図である。
【図１４】本技術の第１の実施の形態の変形例におけるテーブル管理部２２０の構成例を示す図である。
【図１５】本技術の第１の実施の形態の変形例における管理対象アドレステーブル２２３の構成例を示す図である。
【図１６】本技術の第１の実施の形態の変形例におけるエラー情報管理テーブル更新の処理手順例を示す流れ図である。
【図１７】本技術の第１の実施の形態の変形例におけるエラー情報管理テーブル２２１の構成例を示す図である。
【図１８】本技術の第１の実施の形態の変形例におけるリフレッシュコマンド処理の処理手順例を示す流れ図である。
【図１９】本技術の第２の実施の形態におけるエラー情報管理テーブル２２１の構成例を示す図である。
【図２０】本技術の第２の実施の形態におけるエラー情報管理テーブル更新の処理手順例を示す流れ図である。
【図２１】本技術の第３の実施の形態におけるエラー情報管理テーブル２２１の構成例を示す図である。
【図２２】本技術の第４の実施の形態におけるエラー情報管理テーブル２２１の構成例を示す図である。
【図２３】本技術の第４の実施の形態におけるリフレッシュコマンド処理の処理手順例を示す流れ図である。
【図２４】本技術の第５の実施の形態におけるエラー情報管理テーブル２２１の構成例を示す図である。
【図２５】本技術の第５の実施の形態におけるエラー情報管理テーブル更新の処理手順例を示す流れ図である。
【図２６】本技術の第５の実施の形態におけるリフレッシュコマンド処理の処理手順例を示す流れ図である。
【図２７】本技術の第６の実施の形態におけるテーブル情報取得コマンド処理の処理手順例を示す流れ図である。
【図２８】本技術の第６の実施の形態におけるリフレッシュコマンド処理の処理手順例を示す流れ図である。
【図２９】本技術の第７の実施の形態における情報処理システムの構成例を示す図である。
【図３０】本技術の第７の実施の形態におけるリードコマンド処理の処理手順例を示す流れ図である。
【図３１】本技術の第７の実施の形態におけるエラー情報管理テーブル更新の処理手順例を示す流れ図である。
【図３２】本技術の第７の実施の形態におけるリフレッシュコマンド処理の処理手順例を示す流れ図である。
【図３３】本技術の第７の実施の形態におけるライトコマンド処理の処理手順例を示す流れ図である。
【発明を実施するための形態】
【００２５】
以下、本技術を実施するための形態（以下、実施の形態と称する）について説明する。説明は以下の順序により行う。
１．第１の実施の形態（メモリコントローラにおいてエラー情報を管理する例）
２．第２の実施の形態（論理アドレスを利用してエラー情報を管理する例）
３．第３の実施の形態（エラー情報とともにデータおよびＥＣＣを保持する例）
４．第４の実施の形態（エラー情報とともにデータを保持する例）
５．第５の実施の形態（エラー数に従ってデータの保持を抑止する例）
６．第６の実施の形態（エラー情報をホストコンピュータに通知する例）
７．第７の実施の形態（ホストコンピュータにおいてエラー情報を管理する例）
【００２６】
＜１．第１の実施の形態＞
［情報処理システムの構成］
図１は、本技術の実施の形態における情報処理システムの構成例を示す図である。この情報処理システムは、ホストコンピュータ１００と、メモリコントローラ２００と、メモリ３００とから構成される。メモリコントローラ２００およびメモリ３００はストレージシステムを構成する。
【００２７】
ホストコンピュータ１００は、メモリ３００に対してデータのリード、ライトまたはリフレッシュ等を要求するコマンドを発行するものである。
【００２８】
メモリコントローラ２００は、ホストコンピュータ１００からコマンドを受信し、メモリ３００へのデータライトおよびメモリ３００からのデータリードを実行するものである。メモリコントローラ２００は、ライトコマンドを受信した場合、ホストコンピュータ１００から受信したデータを、メモリ３００に書き込むよう指示する。また、メモリコントローラ２００は、リードコマンドを受信した場合、メモリ３００からデータを読み出してホストコンピュータ１００に転送する。また、メモリコントローラ２００は、リフレッシュコマンドを受信した場合、メモリ３００からデータを読み出して、その読み出したデータを再びメモリ３００に書き直すよう指示する。
【００２９】
ライトコマンドとリードコマンドでは、メモリ３００の格納場所の先頭を示す論理アドレスおよびデータサイズが使用される。この実施の形態では、論理アドレスは、５１２バイト単位に分割された領域に割り振られた位置情報である。ライトコマンドとリードコマンドにおいてホストシステムから指定されるデータサイズの値は、５１２×ｎバイトで表される値ｎである。論理アドレスは、メモリコントローラ２００において物理アドレスに変換される。この物理アドレスは、メモリ３００においてメモリセルに割り当てられたアドレスである。
【００３０】
メモリコントローラ２００は、ＥＣＣ生成部２１０と、テーブル管理部２２０と、エラー検出訂正部２３０と、プロセッサ２４０と、ホストインターフェース２０１と、メモリインターフェース２０３とを備える。これらはバス２８０によって相互に接続されている。
【００３１】
ＥＣＣ生成部２１０は、メモリ３００に記録されるデータのエラー訂正コード（ＥＣＣ：Error Correcting Code）の生成を実行するものである。エラー検出訂正部２３０は、メモリ３００から読み出したデータのエラー検出および訂正処理を実行するものである。
【００３２】
プロセッサ２４０は、メモリコントローラ２００全体の制御を行うものである。このプロセッサ２４０は、（図示しない）ＲＯＭに格納されたソフトウェアを実行する。このプロセッサ２４０は、ホストコンピュータ１００から発行されたコマンドを解釈して、メモリ３００に対して必要なリクエストを供給する。なお、プロセッサ２４０は、特許請求の範囲に記載のリフレッシュ対象決定部の一例である。
【００３３】
テーブル管理部２２０は、後述するエラー情報管理テーブルやアドレス変換テーブル等を管理するものである。
【００３４】
ホストインターフェース２０１は、ホストコンピュータ１００と接続され、ホストコンピュータ１００からのコマンドの受信、および、ホストコンピュータ１００とのデータの受送信を実行するものである。
【００３５】
メモリインターフェース２０３は、メモリ３００と接続され、メモリ３００に対するリクエストの送信、ライトデータの送信、および、リードデータの受信を実行するものである。
【００３６】
メモリ３００は、メモリコントローラ２００の制御対象であり、ここでは、主として不揮発性メモリを想定する。
【００３７】
［メモリの構成］
図２は、本技術の実施の形態におけるメモリ３００の記憶構成例を示す図である。メモリ３００は、５２８バイトの物理ページによって構成される。メモリコントローラ２００からメモリ３００に対するライトリクエストおよびリードリクエストは物理ページ単位で実行される。物理ページ毎に、ユニークなアドレスとして物理アドレスが割り当てられる。
【００３８】
１つの物理ページには、５１２バイトのデータに対して１６バイトのＥＣＣが付加されて、書き込まれる。５１２バイトのデータは、ホストコンピュータ１００からライトコマンドおよびリードコマンドによってアクセスされるデータである。この５１２バイトのデータは、テーブル管理部２２０における管理対象でもある。５１２バイトのデータに対して付加される１６バイトのＥＣＣには、８ビットの訂正能力があるものと想定する。
【００３９】
［テーブル管理部の構成］
図３は、本技術の実施の形態におけるテーブル管理部２２０の構成例を示す図である。このテーブル管理部２２０は、エラー情報管理テーブル２２１と、アドレス変換テーブル２２２とを備える。
【００４０】
エラー情報管理テーブル２２１は、メモリ３００において発生したエラーに関する情報を管理するためのテーブルである。なお、エラー情報管理テーブル２２１は、特許請求の範囲に記載のエラー情報管理部の一例である。
【００４１】
アドレス変換テーブル２２２は、メモリ３００に関して論理アドレスから物理アドレスへの変換を行うためのテーブルである。なお、アドレス変換テーブル２２２は、特許請求の範囲に記載のアドレス変換部の一例である。
【００４２】
図４は、本技術の実施の形態におけるエラー情報管理テーブル２２１の構成例を示す図である。このエラー情報管理テーブル２２１は、エラーを発生したメモリ３００の物理アドレスと、検出されたエラー数とを対にしたエントリを複数保持する。エラー数は、エラーが検出されたビット数を示すものである。
【００４３】
エラー数が「０」を示すエントリは、空きエントリとして扱われる。空きエントリの物理アドレスは無効な値として無視される。この例では、全４エントリのうち、有効なエントリは３つとなっている。
【００４４】
なお、この例ではエントリがエラー数によって降順に記述されているが、エラー情報管理テーブル２２１の操作において、降順にソートする必要は必ずしもない。また、エラー数「０」のエントリを空きエントリとして扱う代わりに、エラー数と物理アドレスに加え、エントリの有効または無効を区別するためのフラグを備えてもよい。
【００４５】
図５は、本技術の実施の形態におけるアドレス変換テーブル２２２の構成例を示す図である。アドレス変換テーブル２２２は、メモリ３００の物理アドレスと論理アドレスとの対を保持する。この実施の形態では、論理アドレスは５１２バイトを単位としてアドレッシングされる。１つの論理アドレスに書き込まれる５１２バイトのデータは、メモリ３００の１つの物理ページに書き込まれる。したがって、１論理アドレスは、１つの物理アドレスに変換される。
【００４６】
［リードコマンド処理の動作］
図６は、本技術の実施の形態におけるリードコマンド処理の処理手順例を示す流れ図である。すなわち、この処理手順は、メモリコントローラ２００がホストコンピュータ１００からリードコマンドを受信した際に実行する処理手順である。
【００４７】
まず、プロセッサ２４０は、ホストインターフェース２０１において受信したリード対象の先頭論理アドレスとデータサイズとに基づいて、論理アドレス単位に処理を分割する（ステップＳ９１１）。１回の処理で実行されるのは１論理アドレスである。例えば、リード対象の先頭アドレスとして「０」、データサイズとして「１」が指定された場合は、１回の処理が行われる。また、リード対象の先頭論理アドレスとして「０」、データサイズとして「２」が指定された場合には、２回の処理に分割される。
【００４８】
プロセッサ２４０は、リード対象となる論理アドレスを決定する（ステップＳ９１２）。対象となる論理アドレスは、リード対象の先頭論理アドレスから順番に決定される。例えば、リード対象の先頭論理アドレスとして「０」、データサイズとして「２」が指定された場合、最初に処理を実行する論理アドレスは「０」に決定される。そして、次に対象となる論理アドレスは「１」に決定される。
【００４９】
プロセッサ２４０は、リード対象として決定した論理アドレスを、テーブル管理部２２０で保持しているアドレス変換テーブル２２２を使用して物理アドレスに変換する（ステップＳ９１３）。
【００５０】
プロセッサ２４０は、ステップＳ９１３で変換した物理アドレスを指定して、メモリ３００に対してリード要求（リクエスト）を行う（ステップＳ９１４）。メモリ３００から読み出されるデータは、ＥＣＣを含めた５２８バイトである。
【００５１】
メモリ３００から読み出されたデータとＥＣＣは、エラー検出訂正部２３０へ転送される。エラー検出訂正部２３０では、データとＥＣＣを合わせた５２８バイトからエラー検出を行う。エラーが検出された場合は、エラーとなったビット数（エラー数）を取得する（ステップＳ９１５）。エラーが検出されなかった場合は、エラーとなったビット数を０とする。
【００５２】
プロセッサ２４０は、ステップＳ９１５において取得されたエラー数が０であるかを判定する（ステップＳ９１６）。エラー数が０である、すなわちエラーが検出されなかった場合には（ステップＳ９１６：Ｙｅｓ）、以下のステップＳ９１７乃至Ｓ９２０の処理をスキップする。
【００５３】
エラーが検出された場合、プロセッサ２４０は、検出されたエラー数が、訂正可能なエラー数（ここでは「８」）を超えているか否かを判定する（ステップＳ９１７）。訂正可能なエラー数を超えている場合には（ステップＳ９１７：Ｎｏ）、リードコマンドの処理でエラーが発生した旨をホストコンピュータ１００に通知して、リードコマンド処理を終了させる（ステップＳ９３４）。
【００５４】
一方、訂正可能なエラー数である場合には、エラー検出訂正部２３０がメモリ３００から転送された５２８バイトについてエラー訂正を行う（ステップＳ９１８）。エラー訂正後、プロセッサ２４０は、テーブル管理部２２０で保持しているエラー情報管理テーブル２２１の更新を実行する（ステップＳ９２０）。
【００５５】
エラーが検出されてエラー訂正が完了した後、または、エラーが検出されなかった場合、ホストインターフェース２０１を介して、ＥＣＣを除いた５１２バイトのデータがホストコンピュータ１００へ転送される（ステップＳ９３１）。
【００５６】
そして、プロセッサ２４０は、リードコマンド処理で、ホストコンピュータ１００へ転送されたデータサイズの合計と、リードコマンドで指定されたデータサイズとを比較する（ステップＳ９３２）。転送されたデータサイズの合計が指定されたデータサイズに満たない場合には（ステップＳ９３２：Ｎｏ）、ステップＳ９１２以降の処理を繰り返す。一方、転送されたデータサイズの合計が指定されたデータサイズに達した場合には（ステップＳ９３２：Ｙｅｓ）、リードコマンドの処理が正常に終了した旨をホストコンピュータ１００に通知して、リードコマンド処理を終了させる（ステップＳ９３３）。
【００５７】
［エラー情報管理テーブル更新処理の動作］
図７は、本技術の実施の形態におけるエラー情報管理テーブル更新の処理手順例を示す流れ図である。
【００５８】
まず、Ｓ９１５において検出されたエラーの物理アドレスが、エラー情報管理テーブル２２１に登録済みの物理アドレスであるか否かが判定される（ステップＳ９２３）。登録済みの物理アドレスである場合には（ステップＳ９２３：Ｙｅｓ）、検出されたエラーのエラー数が登録済みのエラー数よりも大きいか否かが判定される（ステップＳ９２８）。検出されたエラーのエラー数が登録済みのエラー数よりも大きい場合には（ステップＳ９２８：Ｙｅｓ）、検出されたエラー数によってエラー情報管理テーブル２２１の該当エントリのエラー数を更新する（ステップＳ９２９）。
【００５９】
エラー情報管理テーブル２２１にその物理アドレスが登録されていない場合（ステップＳ９２３：Ｎｏ）、エラー情報管理テーブル２２１に空きエントリが有るか否かが判定される（ステップＳ９２４）。空きエントリが有る場合には（ステップＳ９２４：Ｙｅｓ）、検出されたエラーの物理アドレスとエラー数を空きエントリに登録する（ステップＳ９２７）。
【００６０】
一方、空きエントリが無い場合には（ステップＳ９２４：Ｎｏ）、検出されたエラー数と各エントリに登録されているエラー数のうち最も小さい数とを比較する（ステップＳ９２５）。検出されたエラー数の方が大きい場合には（ステップＳ９２５：Ｙｅｓ）、検出されたエラー数と物理アドレスをそのエントリにおいて更新する（ステップＳ９２６）。
【００６１】
なお、ステップＳ９２５において、検出されたエラー数と各エントリに登録されているエラー数のうち最も小さい数とを比較する際、検出されたエラー数の方が大きいまたは等しい場合にステップＳ９２６を実行するようにしてもよい。
【００６２】
図８は、本技術の実施の形態におけるエラー情報管理テーブル更新の第１の例を示す図である。この例はステップＳ９２７において空きエントリに、検出されたエラーの物理アドレスとエラー数を登録する場合の例である。４番目のエントリにおいて新たな内容が追加されていることがわかる。
【００６３】
図９は、本技術の実施の形態におけるエラー情報管理テーブル更新の第２の例を示す図である。この例はステップＳ９２９において、検出されたエラー数によってエラー情報管理テーブル２２１の該当エントリのエラー数を更新する場合の例である。４番目のエントリにおいてエラー数が「３」から「４」に更新されていることがわかる。
【００６４】
図１０は、本技術の実施の形態におけるエラー情報管理テーブル更新の第３の例を示す図である。この例はステップＳ９２６において、検出されたエラー数と物理アドレスをそのエントリにおいて更新する場合の例である。４番目のエントリにおいてエラー数が「３」の物理アドレス「０ｘ００００１２３４」から、エラー数が「４」の物理アドレス「０ｘ０００００００１」に更新されていることがわかる。すなわち、物理アドレス「０ｘ００００１２３４」のエントリは追い出され、よりエラー数の大きい物理アドレス「０ｘ０００００００１」のエントリに置換されたことになる。
【００６５】
［リフレッシュコマンド処理の動作］
図１１は、本技術の実施の形態におけるリフレッシュコマンド処理の処理手順例を示す流れ図である。すなわち、この処理手順は、メモリコントローラ２００がホストコンピュータ１００からリフレッシュコマンドを受信した際に実行する処理手順である。
【００６６】
まず、プロセッサ２４０は、エラー情報管理テーブル２２１に有効なエントリが存在するか否かを判定する（ステップＳ９４１）。有効なエントリとは、エラー数が０でないエントリのことである。有効なエントリが無い場合には（ステップＳ９４１：Ｎｏ）、プロセッサ２４０は、リフレッシュコマンドの処理が正常に終了した旨をホストコンピュータ１００へ通知して、リフレッシュコマンド処理を終了させる（ステップＳ９４９）。一方、有効なエントリが有る場合には（ステップＳ９４１：Ｙｅｓ）、以下の処理を行う。
【００６７】
プロセッサ２４０は、有効なエントリのうち、リフレッシュを実行する物理アドレスを選択する（ステップＳ９４２）。この実施の形態では、エラー数の多い物理アドレスから順に処理を行い、エラー数が等しい場合には物理アドレスの小さい順に物理アドレスを選択することを想定する。
【００６８】
プロセッサ２４０は、ステップＳ９４２で選択した物理アドレスを指定して、メモリ３００からデータを読み出して、エラー検出訂正部２３０に転送する（ステップＳ９４３）。このとき、転送されるデータサイズは５２８バイトである。
【００６９】
エラー検出訂正部２３０は、ステップＳ９４３で転送された５２８バイトのデータのエラー検出を行い、エラーが検出された場合にはさらにエラー訂正を行う（ステップＳ９４４）。
【００７０】
ステップＳ９４４で訂正されたデータ５１２バイトと１６バイトのＥＣＣを含む５２８バイトのデータを、エラー検出訂正部２３０から転送し、ステップＳ９４２で選択した物理アドレスを指定して、メモリ３００へ書き込む（ステップＳ９４６）。
【００７１】
そして、エラー情報管理テーブル２２１内の、リフレッシュを行ったエントリのエラー数を「０」に更新して、空きエントリとする（ステップＳ９４８）。その後、ステップＳ９４１以降の処理を繰り返す。
【００７２】
なお、ここではエラー情報管理テーブル２２１の全ての有効なエントリについてリフレッシュを実行することを想定していたが、ホストコンピュータ１００がリフレッシュコマンド実行時に最大エントリ数を指定するようにしてもよい。その場合、ステップＳ９４１において、ステップＳ９４３乃至Ｓ９４８の処理が行われたエントリ数が最大エントリ数に達しておらず、かつ、ステップＳ９４３乃至Ｓ９４８の処理を行っていないエントリが存在している旨が判定されることになる。
【００７３】
図１２は、本技術の実施の形態におけるリフレッシュコマンド処理の例を示す図である。この例では１番目のエントリにおいてリフレッシュが実行され、空きエントリに更新されていることがわかる。
【００７４】
［リフレッシュコマンドの実行タイミング］
リフレッシュコマンドを実行するタイミングは、ホストコンピュータ１００が決定する。実行するタイミングとして、定期的、電源遮断前、ホストコンピュータ１００でリードコマンドやライトコマンドが実行されていない状態のとき、ホストコンピュータ１００がスリープ状態等の低消費電力モードに状態遷移する前などが挙げられる。
【００７５】
ホストコンピュータ１００がリフレッシュコマンドを実行するタイミングを決定するための情報として、リードコマンドの終了の際に、エラー情報管理テーブル２２１の状態をホストコンピュータ１００に通知するようにしてもよい。例えば、エラー情報管理テーブル２２１で有効なエントリ数、すなわちエラー数が０ではないエントリ数などを通知することが考えられる。
【００７６】
有効なエントリ数が通知されることにより、ホストコンピュータ１００は、エラー情報管理テーブル２２１で管理可能なエントリ数（上述の例では４エントリ）を超える前に、リフレッシュコマンドを発行することができる。また、有効なエントリ数が通知されることにより、エラー情報管理テーブル２２１に有効なエントリが存在するときのみに、ホストコンピュータ１００がリフレッシュコマンドを発行することが可能となる。したがって、コマンド処理に伴うコントローラのオーバーヘッドを抑制することができる。
【００７７】
また、ホストコンピュータ１００への通知回数を減らすために、予めホストコンピュータ１００が通知条件をメモリコントローラ２００に設定しておいて、条件を満たすときのみ通知するようにしてもよい。通知条件を設定する方法としては、例えば、ホストコンピュータ１００がコマンド等により設定する手法や、メモリシステムをホストコンピュータ１００が使用する前、例えば工場出荷時に、設定する手法が想定される。例えば、ホストコンピュータ１００への通知条件として「有効なエントリ数が３以上」と設定した場合、エラー情報管理テーブル２２１の有効なエントリ数が「３」または「４」となった際にリードコマンドの終了時に通知される。
【００７８】
なお、ここではリフレッシュを行うための専用コマンドを想定して説明したが、他のコマンドをホストコンピュータ１００から受信した場合に、そのコマンドの実行に加えて、図１１により説明したリフレッシュ処理を実行するようにしてもよい。例えば、ＡＴＡ／ＡＴＡＰＩ  Ｃｏｍｍａｎｄ  Ｓｅｔ（ＡＴＡ８−ＡＣＳ）で規定されるＦＬＵＳＨ  ＣＡＣＨＥコマンドやＦＬＵＳＨ  ＣＡＣＨＥ  Ｅｘｔコマンドを受信した場合に、そのコマンドの実行に加えて、リフレッシュ処理を実行することが考えられる。このＡＴＡ８−ＡＣＳの例では、ＳＴＡＮＤＢＹ  ＩＭＭＥＤＩＡＴＥコマンドやＳＬＥＥＰコマンド等を利用することもできる。また、ＳＣＳＩ  Ｂｌｏｃｋ  Ｃｏｍｍａｎｄｓ−３（ＳＢＣ−３）で規定されるＳＹＮＣＨＲＯＮＩＺＥ  ＣＡＣＨＥコマンド、ＳＴＡＲＴ／ＳＴＯＰ  ＵＮＩＴコマンド等を利用することもできる。なお、これらの場合、ホストコンピュータ１００に対する処理終了通知は、リフレッシュ処理を完了した後である。
【００７９】
［ライトコマンド処理の動作］
図１３は、本技術の実施の形態におけるライトコマンド処理の処理手順例を示す流れ図である。すなわち、この処理手順は、メモリコントローラ２００がホストコンピュータ１００からライトコマンドを受信した際に実行する処理手順である。
【００８０】
プロセッサ２４０は、ホストインターフェース２０１において受信したライト対象の先頭論理アドレスとデータサイズに基づいて、論理アドレス単位に処理を分割する（ステップＳ９５１）。１回の処理で実行されるのは１論理アドレスである。例えば、ライト対象の先頭アドレスとして「０」、データサイズとして「１」が指定された場合は、１回の処理が行われる。また、ライト対象の先頭論理アドレスとして「０」、データサイズとして「２」が指定された場合には、２回の処理に分割される。
【００８１】
プロセッサ２４０は、ライト処理を実行する論理アドレスを選択して決定する（ステップＳ９５２）。この実施の形態では、ライト処理を実行する論理アドレスは、先頭論理アドレスから順番に決定する。ライトコマンドで指定された先頭論理アドレスとして「０」、データサイズとして「２」が指定された場合、最初に処理を実行する論理アドレスは「０」に決定される。次に対象となる論理アドレスは「１」に決定される。
【００８２】
プロセッサ２４０は、ステップＳ９５２で選択した論理アドレスを、テーブル管理部２２０で保持しているアドレス変換テーブル２２２を使用して物理アドレスに変換する（ステップＳ９５３）。
【００８３】
プロセッサ２４０は、ホストインターフェース２０１において受信した１論理アドレス５１２バイトのデータを、ＥＣＣ生成部２１０に転送する（ステップＳ９５４）。ＥＣＣ生成部２１０では、受信した５１２バイトのデータに対して１６バイトのＥＣＣが生成される。
【００８４】
プロセッサ２４０は、ステップＳ９５３で取得した物理アドレスを指定して、ＥＣＣ生成部２１０から転送した５２８バイトのデータをメモリ３００へ書き込む（ステップＳ９５５）。
【００８５】
プロセッサ２４０は、ステップＳ９５３で取得した物理アドレスが、エラー情報管理テーブル２２１のエントリに登録されているか否かを判定する（ステップＳ９５６）。登録されている場合（ステップＳ９５６：Ｙｅｓ）、プロセッサ２４０は、ステップＳ９５５で書き込みを行った物理アドレスが登録されているエントリのエラー数を「０」に更新して、空きエントリとする（ステップＳ９５７）。
【００８６】
プロセッサ２４０は、ライトコマンド処理で、メモリ３００へ書き込んだデータサイズの合計と、ライトコマンドで指定されたデータサイズとを比較する（ステップＳ９５８）。書き込んだデータサイズの合計が指定されたデータサイズに満たない場合には（ステップＳ９５８：Ｎｏ）、ステップＳ９５２以降の処理を繰り返す。一方、書き込んだデータサイズの合計が指定されたデータサイズに達した場合には（ステップＳ９５８：Ｙｅｓ）、ライトコマンドの処理が正常に終了した旨をホストコンピュータ１００に通知して、ライトコマンド処理を終了させる（ステップＳ９５９）。
【００８７】
このように、本技術の第１の実施の形態によれば、エラー情報管理テーブル２２１において管理されたエラー情報に基づいて、メモリ３００におけるリフレッシュ対象アドレスを適切に決定することができる。
【００８８】
［テーブル管理部の変形例］
図１４は、本技術の第１の実施の形態の変形例におけるテーブル管理部２２０の構成例を示す図である。このテーブル管理部２２０は、エラー情報管理テーブル２２１およびアドレス変換テーブル２２２に加えて、管理対象アドレステーブル２２３と、管理対象エラー数設定部２２４とを備える。
【００８９】
管理対象アドレステーブル２２３は、エラー検出された論理アドレスが、エラー情報管理テーブル２２１において管理対象であるか否かを判定するための情報を保持するテーブルである。これは、例えば、ある論理アドレスについては近い将来に書き換える予定があるなどの理由により、敢えてリフレッシュのための管理対象から除外するような場合に利用される。
【００９０】
管理対象エラー数設定部２２４は、エラー数が、エラー情報管理テーブル２２１において管理対象とするエラー数の最小値を保持するものである。これは、エラー数が少ないものについては管理対象から除外するような場合に利用される。例えば、管理対象エラー数設定部２２４に「３」が保持されている場合は、検出されたエラー数が「１」または「２」である論理アドレスは、エラー情報管理テーブル２２１で管理されないように制御する。
【００９１】
なお、ここでは管理対象とするエラー数の最小値の例を記述したが、管理対象外とするエラー数の最大値を保持するようにしてもよい。
【００９２】
図１５は、本技術の第１の実施の形態の変形例における管理対象アドレステーブル２２３の構成例を示す図である。この管理対象アドレステーブル２２３は、エラーが検出された際にエラー情報管理テーブル２２１で管理対象とする論理アドレスが保持されている。すなわち、この管理対象アドレステーブル２２３に開始論理アドレスとして保持されているアドレスを起点として、サイズにより示される範囲に含まれる論理アドレスについては、エラー情報管理テーブル２２１で管理対象とすることを想定している。この管理対象アドレステーブル２２３において、開始論理アドレスは、論理セクターを単位としてアドレシングされるものである。論理セクターとしては、例えば５１２バイトを想定することができる。
【００９３】
なお、ここでは、エラー情報管理テーブル２２１で管理対象とする論理アドレスが保持されることを想定したが、これとは逆に、エラー情報管理テーブル２２１で管理対象としない論理アドレスを保持するようにしてもよい。
【００９４】
図１６は、本技術の第１の実施の形態の変形例におけるエラー情報管理テーブル更新の処理手順例を示す流れ図である。この変形例における処理手順例は、図７により説明した処理手順例と比較して、ステップＳ９２１およびＳ９２２による処理が最初に追加されている点で異なる。
【００９５】
まず、エラーが検出された物理アドレスに対応する論理アドレスが、エラー情報管理テーブル２２１で管理対象とされている論理アドレスであるかが判定される（ステップＳ９２１）。管理対象とされている論理アドレスでなければ（ステップＳ９２１：Ｎｏ）、エラー情報管理テーブル２２１の更新をすることなく処理を終了する。
【００９６】
次に、検出されたエラー数が、エラー情報管理テーブル２２１で管理対象とされているエラー数であるかが判定される（ステップＳ９２２）。管理対象とされているエラー数でなければ（ステップＳ９２２：Ｎｏ）、エラー情報管理テーブル２２１の更新をすることなく処理を終了する。以降の処理は、図７により説明した処理手順例と同様である。
【００９７】
特定の論理アドレスをエラー情報管理テーブルにおける管理対象外とする場合に指定する論理アドレスの例としては、ライトコマンドでデータの書き込みを頻繁に行い、リフレッシュが不要とされるような論理アドレスが挙げられる。
【００９８】
論理アドレスを管理対象とするか否かの設定方法として、第１に、ホストコンピュータ１００がコマンド等によって、ある論理アドレスを、エラー情報管理テーブル２２１における管理対象とするか否かを指定する方法が考えられる。また、第２に、リードコマンドのパラメータとして、リードコマンド処理が行われる論理アドレスを、管理対象とするか否かを区別するためのフラグを定義しておいて、ホストコンピュータ１００がリードコマンド実行時にフラグで指定する方法が考えられる。また、第３に、メモリシステムをホストコンピュータ１００が使用する前、例えば工場出荷時に、論理アドレスを管理対象とするか否かを指定する方法が考えられる。
【００９９】
検出されたエラー数が少ない物理ページをエラー情報管理テーブル２２１における管理対象外とする場合の例として、検出されたエラー数が、１ビットまたは２ビット以下の場合には管理対象外とすることが考えられる。リード時のノイズ等の影響により、頻繁に１乃至２ビットのエラーが発生し得る場合に有効であると考えられる。
【０１００】
検出されたエラー数を管理対象とするか否かの設定方法として、第１に、ホストコンピュータ１００がコマンド等により、管理対象とするエラー数を指定する方法が考えられる。また、第２に、リードコマンドで指定可能なパラメータとして「管理対象とするエラー数」を定義しておいて、ホストコンピュータ１００が指定してリードコマンドを実行する方法が考えられる。また、第３に、メモリシステムをホストコンピュータ１００が使用する前、例えば工場出荷時に、管理対象とするエラー数を指定する方法が考えられる。
【０１０１】
このように、この変形例によれば、エラー情報管理テーブル２２１で管理対象とするエラー情報の条件を予め指定することができる。
【０１０２】
［エラー情報管理テーブルの変形例］
図１７は、本技術の第１の実施の形態の変形例におけるエラー情報管理テーブル２２１の構成例を示す図である。このエラー情報管理テーブル２２１は、図４により説明したものと比べて、さらにリード回数を各エントリに保持している。これにより、リード回数の多い順に、リフレッシュを行う優先順位を決定してもよい。
【０１０３】
リード回数は、エラー情報管理テーブル２２１に物理アドレスが登録された際に「１」が設定され、リードコマンドのリード対象となる物理アドレスが登録済の物理アドレスである場合にインクリメントされる。
【０１０４】
このように、この変形例によれば、エラー情報管理テーブル２２１において管理されたリード回数に基づいて、メモリ３００におけるリフレッシュ対象アドレスを決定することができる。
【０１０５】
［リフレッシュコマンド処理の変形例］
エラーが発生した物理アドレスに上書きができない不揮発性メモリの場合には、リフレッシュの際に書き込み先の物理アドレスを変更する必要がある。また、上書き可能な不揮発性メモリにおいてもリフレッシュの際に書き込み先の物理アドレスを変更したい場合がある。この場合、リフレッシュコマンドにフラグを設け、ホストコンピュータ１００が、書き込み先の物理アドレスの変更をメモリコントローラ２００に指示する等の方策が考えられる。また、メモリコントローラ２００が自発的にリフレッシュにおける書き込み先の物理アドレスを変更してもよい。このようにリフレッシュの際に書き込み先の物理アドレスを変更する場合、以下のようにリフレッシュコマンド処理の内容が異なるものとなる。
【０１０６】
図１８は、本技術の第１の実施の形態の変形例におけるリフレッシュコマンド処理の処理手順例を示す流れ図である。この変形例における処理手順例は、図１１により説明した処理手順例と比較して、ステップＳ９４５乃至Ｓ９４７による処理が異なる。
【０１０７】
エラー訂正が行われた後で（ステップＳ９４４）、メモリ３００においてデータの書き込みが可能な物理アドレスが検索され、その物理アドレスが選択される（ステップＳ９４５）。そして、ステップＳ９４４で訂正されたデータ５１２バイトとＥＣＣ１６バイトの５２８バイトのデータがエラー検出訂正部２３０から転送されると、ステップＳ９４５で選択した物理アドレスを指定してメモリ３００への書込みが行われる（ステップＳ９４６）。そして、この場合、物理アドレスが変更されているため、アドレス変換テーブル２２２を更新する（ステップＳ９４７）。すなわち、ステップＳ９４２で選択された物理アドレスの値を、ステップＳ９４５で選択された物理アドレスに更新する。他の処理は、図１１により説明した処理手順例と同様である。
【０１０８】
このように、この変形例によれば、リフレッシュの際に書き込み先の物理アドレスを変更することができる。
【０１０９】
＜２．第２の実施の形態＞
上述の第１の実施の形態では、エラーを発生したメモリ３００の物理アドレスと、検出されたエラー数とを対にしたエントリを複数保持していたが、メモリ３００の論理アドレスを利用してもよい。この第２の実施の形態では、メモリ３００の論理アドレスを利用してエラー情報を管理する。
【０１１０】
［エラー情報管理テーブルの構成］
図１９は、本技術の第２の実施の形態におけるエラー情報管理テーブル２２１の構成例を示す図である。この第２の実施の形態におけるエラー情報管理テーブル２２１は、エラーを発生したメモリ３００の論理アドレスと、検出されたエラー数とを対にしたエントリを複数保持する。
【０１１１】
［リードコマンド処理の動作］
本技術の第２の実施の形態では、メモリ３００の論理アドレスを利用してエラー情報を管理するが、リードコマンド処理の動作は基本的には図６および図７により説明したものと同様である。但し、エラー情報管理テーブル２２１の更新（ステップＳ９２０）において、以下のように論理ページを登録する点が異なっている。
【０１１２】
図２０は、本技術の第２の実施の形態におけるエラー情報管理テーブル更新の処理手順例を示す流れ図である。
【０１１３】
まず、Ｓ９１５において検出されたエラーの論理アドレスが、エラー情報管理テーブル２２１に登録済みの論理アドレスであるか否かが判定される（ステップＳ９６３）。登録済みの論理アドレスである場合には（ステップＳ９６３：Ｙｅｓ）、検出されたエラーのエラー数が登録済みのエラー数よりも大きいか否かが判定される（ステップＳ９６８）。検出されたエラーのエラー数が登録済みのエラー数よりも大きい場合には（ステップＳ９６８：Ｙｅｓ）、検出されたエラー数によってエラー情報管理テーブル２２１の該当エントリのエラー数を更新する（ステップＳ９６９）。
【０１１４】
エラー情報管理テーブル２２１にその論理アドレスが登録されていない場合（ステップＳ９６３：Ｎｏ）、エラー情報管理テーブル２２１に空きエントリが有るか否かが判定される（ステップＳ９６４）。空きエントリが有る場合には（ステップＳ９６４：Ｙｅｓ）、検出されたエラーの論理アドレスとエラー数を空きエントリに登録する（ステップＳ９６７）。
【０１１５】
一方、空きエントリが無い場合には（ステップＳ９６４：Ｎｏ）、検出されたエラー数と各エントリに登録されているエラー数のうち最も小さい数とを比較する（ステップＳ９６５）。検出されたエラー数の方が大きい場合には（ステップＳ９６５：Ｙｅｓ）、検出されたエラー数と論理アドレスをそのエントリにおいて更新する（ステップＳ９６６）。
【０１１６】
［リフレッシュコマンド処理の動作］
本技術の第２の実施の形態では、メモリ３００の論理アドレスを利用してエラー情報を管理するが、リフレッシュコマンド処理の動作は基本的には図１１により説明したものと同様である。但し、ステップＳ９４２において、有効なエントリのうち、リフレッシュを実行する論理アドレスを選択し、アドレス変換テーブル２２２によって、対応する物理アドレスに変換する点が異なる。この実施の形態では、エラー数の多い論理アドレスが選択される。また、エラー数が等しい場合には論理アドレスの小さい順に論理アドレスを選択することを想定する。
【０１１７】
［ライトコマンド処理の動作］
本技術の第２の実施の形態では、メモリ３００の論理アドレスを利用してエラー情報を管理するが、ライトコマンド処理の動作は基本的には図１３により説明したものと同様である。但し、ステップＳ９５７において、プロセッサ２４０は、ステップＳ９５５で書き込みを行った論理アドレスが登録されているエントリのエラー数を「０」に更新して、空きエントリとする点が異なる。
【０１１８】
このように、本技術の第２の実施の形態によれば、エラー情報管理テーブル２２１において論理アドレスにより管理されたエラー情報に基づいて、メモリ３００におけるリフレッシュ対象アドレスを適切に決定することができる。
【０１１９】
＜３．第３の実施の形態＞
上述の第１の実施の形態では、エラー情報管理テーブル２２１においてエラーを発生したメモリ３００の物理アドレスと、検出されたエラー数とを対にしたエントリを保持していたが、この第３の実施の形態ではリードデータをさらに保持して管理する。エラー情報管理テーブル２２１においてメモリ３００から読み出したリードデータを管理した場合、リフレッシュコマンド処理の際にメモリ３００からデータの読み出しが発生しないため、リフレッシュコマンドの処理時間は短くなる。
【０１２０】
［エラー情報管理テーブルの構成］
図２１は、本技術の第３の実施の形態におけるエラー情報管理テーブル２２１の構成例を示す図である。この第３の実施の形態におけるエラー情報管理テーブル２２１は、エラーを発生したメモリ３００の論理アドレスと、検出されたエラー数と、メモリ３００から読み出したリードデータを関連付けたエントリを複数保持する。ここで、リードデータとしては、５１２バイトのデータに１６バイトのＥＣＣを加えた５２８バイトを想定する。
【０１２１】
［リードコマンド処理の動作］
本技術の第３の実施の形態では、エラー情報管理テーブル２２１に５２８バイトのデータを保持するが、リードコマンド処理の動作は基本的には図６および図７により説明したものと同様である。但し、ステップＳ９２６およびＳ９２７における処理が以下のように異なる。
【０１２２】
すなわち、ステップＳ９２６において、検出されたエラー数と物理アドレスをそのエントリにおいて更新するとともに、訂正された５２８バイトのデータをエラー情報管理テーブル２２１に保持する。
【０１２３】
また、ステップＳ９２７において、検出されたエラーの物理アドレスとエラー数を空きエントリに登録するとともに、訂正された５２８バイトのデータをエラー情報管理テーブル２２１に保持する。
【０１２４】
［リフレッシュコマンド処理の動作］
本技術の第３の実施の形態では、エラー情報管理テーブル２２１に５２８バイトのデータを保持するが、リフレッシュコマンド処理の動作は基本的には図１１により説明したものと同様である。但し、ステップＳ９４３乃至Ｓ９４６における処理が以下のように異なる。
【０１２５】
すなわち、エラー情報管理テーブル２２１に訂正済みのデータを保持しているため、メモリ３００からリードしてエラー訂正をするステップＳ９４３およびＳ９４４の処理は不要となる。
【０１２６】
また、ステップＳ９４６において、エラー情報管理テーブル２２１に保持されているデータを転送し、ステップＳ９４２で選択した物理アドレスを指定して、メモリ３００へ書き込む。
【０１２７】
［ライトコマンド処理の動作］
本技術の第３の実施の形態では、エラー情報管理テーブル２２１に５２８バイトのデータを保持するが、ライトコマンド処理の動作は基本的には図１３により説明したものと同様である。
【０１２８】
このように、本技術の第３の実施の形態によれば、エラー情報管理テーブル２２１において訂正済みの５２８バイトデータを保持することにより、メモリ３００からのリードを省き、結果としてリフレッシュコマンド処理の処理時間を短縮することができる。
【０１２９】
＜４．第４の実施の形態＞
上述の第３の実施の形態では、５１２バイトのデータに１６バイトのＥＣＣを加えた５２８バイトをエラー情報管理テーブル２２１に保持していたが、この第４の実施の形態では、ＥＣＣを除いたデータのみをエラー情報管理テーブル２２１に保持して管理する。エラー情報管理テーブル２２１においてメモリ３００から読み出したリードデータを管理した場合、リフレッシュコマンド処理の際にメモリ３００からデータの読み出しが発生しないため、第３の実施の形態と同様にリフレッシュコマンドの処理時間は短くなる。
【０１３０】
［エラー情報管理テーブルの構成］
図２２は、本技術の第４の実施の形態におけるエラー情報管理テーブル２２１の構成例を示す図である。この第４の実施の形態におけるエラー情報管理テーブル２２１は、エラーを発生したメモリ３００の論理アドレスと、検出されたエラー数と、メモリ３００から読み出したリードデータを関連付けたエントリを複数保持する。ここで、リードデータとしては、ＥＣＣを除いた５１２バイトのデータを想定する。
【０１３１】
［リードコマンド処理の動作］
本技術の第４の実施の形態では、エラー情報管理テーブル２２１に５１２バイトのデータを保持するが、リードコマンド処理の動作は基本的には図６および図７により説明したものと同様である。但し、ステップＳ９２６およびＳ９２７における処理が以下のように異なる。
【０１３２】
すなわち、ステップＳ９２６において、検出されたエラー数と物理アドレスをそのエントリにおいて更新するとともに、訂正された５１２バイトのデータをエラー情報管理テーブル２２１に保持する。
【０１３３】
また、ステップＳ９２７において、検出されたエラーの物理アドレスとエラー数を空きエントリに登録するとともに、訂正された５１２バイトのデータをエラー情報管理テーブル２２１に保持する。
【０１３４】
［リフレッシュコマンド処理の動作］
本技術の第４の実施の形態では、エラー情報管理テーブル２２１に５１２バイトのデータを保持するが、リフレッシュコマンド処理の動作は基本的には図１１により説明したものと同様である。但し、ＥＣＣ生成手順およびデータライト手順における処理が以下のように異なる。
【０１３５】
図２３は、本技術の第４の実施の形態におけるリフレッシュコマンド処理の処理手順例を示す流れ図である。
【０１３６】
まず、プロセッサ２４０は、エラー情報管理テーブル２２１に有効なエントリが存在するか否かを判定する（ステップＳ９７１）。有効なエントリとは、エラー数が０でないエントリのことである。有効なエントリが無い場合には（ステップＳ９７１：Ｎｏ）、プロセッサ２４０は、リフレッシュコマンドの処理が正常に終了した旨をホストコンピュータ１００へ通知して、リフレッシュコマンド処理を終了させる（ステップＳ９７９）。一方、有効なエントリが有る場合には（ステップＳ９７１：Ｙｅｓ）、以下の処理を行う。
【０１３７】
プロセッサ２４０は、有効なエントリのうち、リフレッシュを実行する物理アドレスを選択する（ステップＳ９７２）。この実施の形態では、エラー数の多い物理アドレスから順に処理を行い、エラー数が等しい場合には物理アドレスの小さい順に物理アドレスを選択することを想定する。
【０１３８】
プロセッサ２４０がテーブル管理部２２０から５１２バイトのデータをＥＣＣ生成部２１０に転送すると、ＥＣＣ生成部２１０は受信した５１２バイトのデータに対して１６バイトのＥＣＣを生成する（ステップＳ９７４）。
【０１３９】
プロセッサ２４０は、ステップＳ９７２で選択した物理アドレスを指定して、ＥＣＣ生成部２１０から転送された５２８バイトのデータをメモリ３００に書き込む（ステップＳ９７６）。
【０１４０】
そして、エラー情報管理テーブル２２１内の、リフレッシュを行ったエントリのエラー数を「０」に更新して、空きエントリとする（ステップＳ９７８）。その後、ステップＳ９７１以降の処理を繰り返す。
【０１４１】
［ライトコマンド処理の動作］
本技術の第４の実施の形態では、エラー情報管理テーブル２２１に５１２バイトのデータを保持するが、ライトコマンド処理の動作は基本的には図１３により説明したものと同様である。
【０１４２】
このように、本技術の第４の実施の形態によれば、エラー情報管理テーブル２２１において訂正済みの５１２バイトデータを保持することにより、メモリ３００からのリードを省き、結果としてリフレッシュコマンド処理の処理時間を短縮することができる。
【０１４３】
＜５．第５の実施の形態＞
上述の第３または第４の実施の形態では、エラー情報管理テーブル２２１の全てのエントリにデータを保持していたが、この第５の実施の形態では、検出されたエラー数が多い物理ページについてのみデータを保持する。エラー数が多く発生した物理ページの場合、近い将来の読出し時に訂正不能エラーとなるおそれがあるため、そのような物理ページについてはデータそのものを保持しておいて、次回のリード動作の際に利用する。いわゆるキャッシュメモリのような効果を意図するものである。これにより、エラー情報管理テーブル２２１のサイズを小さくしつつ、訂正不能エラーを防ぎ、高い信頼性を確保することができる。
【０１４４】
［エラー情報管理テーブルの構成］
図２４は、本技術の第５の実施の形態におけるエラー情報管理テーブル２２１の構成例を示す図である。この第５の実施の形態におけるエラー情報管理テーブル２２１では、６ビット以上のエラー数を発生した物理アドレスのデータのみを、対応するエントリにおいて保持している。すなわち、エラー数６ビット未満のエントリについてはデータを保持しないように制御する。
【０１４５】
［リードコマンド処理の動作］
本技術の第５の実施の形態では、検出されたエラー数が多い物理ページについてのみエラー情報管理テーブル２２１にデータを保持するが、リードコマンド処理の動作は基本的には図６および図７により説明したものと同様である。但し、エラー情報更新処理が以下のように異なる。
【０１４６】
図２５は、本技術の第５の実施の形態におけるエラー情報管理テーブル更新の処理手順例を示す流れ図である。
【０１４７】
まず、Ｓ９１５において検出されたエラーの物理アドレスが、エラー情報管理テーブル２２１に登録済みの物理アドレスであるか否かが判定される（ステップＳ９８３）。登録済みの物理アドレスである場合には（ステップＳ９８３：Ｙｅｓ）、検出されたエラーのエラー数が登録済みのエラー数よりも大きいか否かが判定される（ステップＳ９８８）。検出されたエラーのエラー数が登録済みのエラー数よりも大きい場合には（ステップＳ９８８：Ｙｅｓ）、検出されたエラー数によってエラー情報管理テーブル２２１の該当エントリのエラー数を更新する（ステップＳ９８９）。
【０１４８】
エラー情報管理テーブル２２１にその物理アドレスが登録されていない場合（ステップＳ９８３：Ｎｏ）、エラー情報管理テーブル２２１に空きエントリが有るか否かが判定される（ステップＳ９８４）。空きエントリが有る場合には（ステップＳ９８４：Ｙｅｓ）、検出されたエラーの物理アドレスとエラー数を空きエントリに登録する（ステップＳ９８７）。
【０１４９】
一方、空きエントリが無い場合には（ステップＳ９８４：Ｎｏ）、検出されたエラー数と各エントリに登録されているエラー数のうち最も小さい数とを比較する（ステップＳ９８５）。検出されたエラー数の方が大きい場合には（ステップＳ９８５：Ｙｅｓ）、検出されたエラー数と物理アドレスをそのエントリにおいて更新する（ステップＳ９８６）。
【０１５０】
ステップＳ９８６、Ｓ９８７またはＳ９８９においてエラー情報管理テーブル２２１に登録または更新を行った後で、検出されたエラー数が「５」を超えるか否から判定される（ステップＳ９８１）。その結果、検出されたエラー数が「５」を超える場合には（ステップＳ９８１：Ｙｅｓ）、エラー検出訂正部２３０によって訂正されたデータをエラー情報管理テーブル２２１に保持する（ステップＳ９８２）。
【０１５１】
［リフレッシュコマンド処理の動作］
本技術の第５の実施の形態では、検出されたエラー数が多い物理ページについてのみエラー情報管理テーブル２２１にデータを保持するが、リフレッシュコマンド処理の動作は基本的には図１１により説明したものと同様である。但し、データリード手順における処理が以下のように異なる。
【０１５２】
図２６は、本技術の第５の実施の形態におけるリフレッシュコマンド処理の処理手順例を示す流れ図である。
【０１５３】
まず、プロセッサ２４０は、エラー情報管理テーブル２２１に有効なエントリが存在するか否かを判定する（ステップＳ９９１）。有効なエントリとは、エラー数が０でないエントリのことである。有効なエントリが無い場合には（ステップＳ９９１：Ｎｏ）、プロセッサ２４０は、リフレッシュコマンドの処理が正常に終了した旨をホストコンピュータ１００へ通知して、リフレッシュコマンド処理を終了させる（ステップＳ９９９）。一方、有効なエントリが有る場合には（ステップＳ９９１：Ｙｅｓ）、以下の処理を行う。
【０１５４】
プロセッサ２４０は、有効なエントリのうち、リフレッシュを実行する物理アドレスを選択する（ステップＳ９９２）。この実施の形態では、エラー数の多い物理アドレスから順に処理を行い、エラー数が等しい場合には物理アドレスの小さい順に物理アドレスを選択することを想定する。
【０１５５】
ステップＳ９９２で選択した物理アドレスに対応するエラー数が「５」を超えない場合には（ステップＳ９９３：Ｎｏ）、その物理アドレスを指定して、メモリ３００からデータを読み出して、エラー検出訂正部２３０に転送する（ステップＳ９９４）。このとき、転送されるデータサイズは５２８バイトである。一方、ステップＳ９９２で選択した物理アドレスに対応するエラー数が「５」を超える場合には（ステップＳ９９３：Ｙｅｓ）、メモリ３００にアクセスすることなく、エラー情報管理テーブル２２１に保持されているデータを読み出す（ステップＳ９９５）。
【０１５６】
エラー検出訂正部２３０は、読み出された５２８バイトのデータのエラー検出を行い、エラーが検出された場合にはさらにエラー訂正を行う（ステップＳ９９６）。
【０１５７】
ステップＳ９９６で訂正されたデータ５１２バイトと１６バイトのＥＣＣを含む５２８バイトのデータを、エラー検出訂正部２３０から転送し、ステップＳ９４２で選択した物理アドレスを指定して、メモリ３００へ書き込む（ステップＳ９９７）。
【０１５８】
そして、エラー情報管理テーブル２２１内の、リフレッシュを行ったエントリのエラー数を「０」に更新して、空きエントリとする（ステップＳ９９８）。その後、ステップＳ９９１以降の処理を繰り返す。
【０１５９】
［ライトコマンド処理の動作］
本技術の第５の実施の形態では、検出されたエラー数が多い物理ページについてのみエラー情報管理テーブル２２１にデータを保持するが、ライトコマンド処理の動作は基本的には図１３により説明したものと同様である。
【０１６０】
このように、本技術の第５の実施の形態によれば、エラー情報管理テーブル２２１のサイズを小さくしつつ、訂正不能エラーを防ぎ、高い信頼性を確保することができる。
省き、結果としてリフレッシュコマンド処理の処理時間を短縮することができる。
【０１６１】
＜６．第６の実施の形態＞
上述の第１の実施の形態では、エラー情報をメモリコントローラ２００において管理し、ホストコンピュータ１００にはその内容を知らせていなかったが、このエラー情報をホストコンピュータ１００が取得する機能を有するようにしてもよい。これにより、実際にリフレッシュの処理を実行するエントリの数を指定することができ、ホストコンピュータ１００は、リフレッシュコマンド終了までにかかる時間を事前に予測することが可能になる。そして、ホストコンピュータ１００は、メモリシステムで実行するコマンドを効果的にスケジューリングできることが期待される。さらに、ホストコンピュータ１００に複数のメモリコントローラとメモリが接続されるシステムにおいては、メモリコントローラ毎の状況を把握することができる。すなわち、ホストコンピュータ１００は個々のメモリコントローラから通知される情報を吟味し、メモリコントローラ毎に管理するメモリの健康状態を考慮した上で、記憶するデータのアロケーションを行うことが可能である。
【０１６２】
この第６の実施の形態では、ホストコンピュータ１００が、エラー情報管理テーブル２２１の情報を取得するためのテーブル情報取得コマンドを備える。このテーブル情報取得コマンドでは、エラー情報管理テーブル２２１の全エントリ数、エラー情報管理テーブル２２１のデータが登録されているエントリ数、エラー数と論理アドレスの一覧などを取得できることが想定される。この場合、リフレッシュコマンドでは、リフレッシュを実行するエントリ数、リフレッシュを実行するエラー数の最小値、リフレッシュを実行する論理アドレス等の情報をパラメータとして指定できるようにしてもよい。
【０１６３】
なお、上述の第１の実施の形態では、メモリコントローラ２００が、発生したエラー数で物理アドレスに優先順位を付けてリフレッシュを行ったが、ホストコンピュータ１００が論理アドレスを指定してリフレッシュを実行してもよい。論理アドレスを指定することにより、ホストコンピュータ１００は、発生したエラー数にかかわらず必要なデータを優先してリフレッシュすることが可能となる。エラー数にかかわらずリフレッシュを行うデータとして、例えば、メモリシステム内のファイルシステムの管理情報などが想定される。
【０１６４】
この第６の実施の形態は、テーブル情報取得コマンドが追加となる点、および、リフレッシュコマンドの処理が異なる点で、第１の実施の形態と相違する。以下では、これらについて説明する。
【０１６５】
［テーブル情報取得コマンド処理の動作］
図２７は、本技術の第６の実施の形態におけるテーブル情報取得コマンド処理の処理手順例を示す流れ図である。
【０１６６】
プロセッサ２４０は、エラー情報管理テーブル２２１の全エントリ数をカウントする（ステップＳ８１１）。図４のエラー情報管理テーブル２２１の例では、「４」となる。
【０１６７】
プロセッサ２４０は、エラー情報管理テーブル２２１の、有効なエントリ数をカウントする（ステップＳ８１２）。図４のエラー情報管理テーブル２２１の例では、「３」となる。
【０１６８】
プロセッサ２４０は、アドレス変換テーブル２２２を使って、有効なエントリの物理アドレスを論理アドレスに変換する（ステップＳ８１３）。
【０１６９】
そして、プロセッサ２４０は、エラー情報をホストコンピュータ１００に送信する（ステップＳ８１４）。ここで、エラー情報は、ステップＳ８１１で得られた全エントリ数、ステップＳ８１２で得られた有効なエントリ数、ステップＳ８１３で得られた論理アドレス、および、エラー情報管理テーブル２２１から得られるエラー数である。
【０１７０】
その後、プロセッサ２４０は、テーブル情報取得コマンドの処理が正常に終了した旨をホストコンピュータ１００に通知する（ステップＳ８１５）。
【０１７１】
［リフレッシュコマンド処理の動作］
図２８は、本技術の第６の実施の形態におけるリフレッシュコマンド処理の処理手順例を示す流れ図である。
【０１７２】
プロセッサ２４０は、エラー情報管理テーブル２２１に、ホストコンピュータ１００から指定された条件に合うエントリが存在するか否かを判定する（ステップＳ８２１）。条件に合うエントリが存在する場合には（ステップＳ８２１：Ｙｅｓ）ステップＳ８２２以降の処理を行い、条件に合うエントリが存在しない場合には（ステップＳ８２１：Ｎｏ）ステップＳ８２７以降の処理を行う。
【０１７３】
このステップＳ８２１で、ホストコンピュータ１００が、リフレッシュを実行するエントリ数を指定した場合には、ステップＳ８２３乃至Ｓ８２６の処理が終了したエントリ数をカウントし、指定されたエントリ数と一致するか否かを判定する。両者が一致しない場合、すなわち、ステップＳ８２３乃至Ｓ８２６の処理が終了したエントリ数が、指定されたエントリ数に満たない場合は、ホストが指定した条件に合うエントリが有るものとして、ステップＳ８２２以降の処理を行う。また、このステップＳ８２１で、ホストコンピュータ１００が、リフレッシュを実行するエラー数の最小値を指定した場合には、エントリのエラー数が、指定されたエラー数以上であるエントリのリフレッシュ処理を実行する。また、このステップＳ８２１で、ホストコンピュータ１００が、リフレッシュを実行する論理アドレスを指定した場合には、プロセッサ２４０はエラー情報管理テーブル２２１の物理アドレスを論理アドレスに変換する。そして、その論理アドレスに一致する論理アドレスが存在するか否かを判定する。
【０１７４】
ステップＳ８２１で、条件に合うエントリが存在する場合には（ステップＳ８２１：Ｙｅｓ）、以下の処理を行う。プロセッサ２４０は、有効なエントリのうち、リフレッシュを実行する物理アドレスを選択する（ステップＳ８２２）。この実施の形態では、エラー数の多い物理アドレスから順に処理を行い、エラー数が等しい場合には物理アドレスの小さい順に物理アドレスを選択することを想定する。
【０１７５】
プロセッサ２４０は、ステップＳ８２２で選択した物理アドレスを指定して、メモリ３００からデータを読み出して、エラー検出訂正部２３０に転送する（ステップＳ８２３）。このとき、転送されるデータサイズは５２８バイトである。
【０１７６】
エラー検出訂正部２３０は、ステップＳ８２３で転送された５２８バイトのデータのエラー検出を行い、エラーが検出された場合にはさらにエラー訂正を行う（ステップＳ８２４）。
【０１７７】
ステップＳ８２４で訂正されたデータ５１２バイトと１６バイトのＥＣＣを含む５２８バイトのデータを、エラー検出訂正部２３０から転送し、ステップＳ８２２で選択した物理アドレスを指定して、メモリ３００へ書き込む（ステップＳ８２５）。
【０１７８】
そして、エラー情報管理テーブル２２１内の、リフレッシュを行ったエントリのエラー数を「０」に更新して、空きエントリとする（ステップＳ８２６）。その後、ステップＳ８２１以降の処理を繰り返す。
【０１７９】
ステップＳ８２１で、条件に合うエントリが存在しない場合には（ステップＳ８２１：Ｎｏ）、以下の処理を行う。プロセッサ２４０は、ホストコンピュータ１００が指定した条件とエラー情報管理テーブル２２１とに不整合があるか否かを判定する（ステップＳ８２７）。不整合がない場合には（ステップＳ８２７：Ｎｏ）、リフレッシュコマンドの処理が正常に終了した旨をホストコンピュータ１００に通知して、リフレッシュコマンド処理を終了させる（ステップＳ８２８）。不整合がある場合には（ステップＳ８２７：Ｙｅｓ）、指定条件に不整合があった旨をホストコンピュータ１００に通知して、リフレッシュコマンド処理を終了させる（ステップＳ８２９）。このステップＳ８２９において、ホストコンピュータ１００に通知する内容として、ステップＳ８２３乃至Ｓ８２６の処理を行ったエントリが有る場合、不整合があった情報と併せて、実行条件に一致したエントリに対して処理を実行したことを通知してもよい。実行条件に一致したエントリに対して処理を実行したことを示す情報として、処理を実行したエントリ数を通知してもよい。
【０１８０】
このステップＳ８２７で、ホストコンピュータ１００がエントリ数を指定したとき、エラー情報管理テーブル２２１の有効なエントリ数がホストコンピュータ１００が指定したエントリ数に満たない場合には、不整合があると判定する。また、このステップＳ８２７で、ホストコンピュータ１００がリフレッシュを実行するエラー数の最小値を指定したとき、エラー情報管理テーブル２２１で管理するエラー数全てが、ホストコンピュータ１００が指定したエラー数の最小値に満たない場合には、不整合があると判定する。また、このステップＳ８２７で、ホストコンピュータ１００が、リフレッシュを実行する論理アドレスを指定したとき、ホストコンピュータ１００が指定した論理アドレスに、エラー情報管理テーブル２２１で管理していない論理アドレスが含まれる場合には、不整合があると判定する。
【０１８１】
この第６の実施の形態では、ホストコンピュータ１００が指定した条件とエラー情報管理テーブル２２１とに不整合がある場合でも、ホストコンピュータ１００が指定した条件に合うエントリの論理アドレスのリフレッシュを実行した例について説明した。ホストコンピュータ１００が指定した条件とエラー情報管理テーブル２２１とに不整合がある場合には、リフレッシュ処理を実行しなくてもよい。その場合、ステップＳ８２１の処理の実行前に、ステップＳ８２７の処理を実行し、不整合が存在した場合には、ホストコンピュータ１００にエラー終了したことを通知して、リフレッシュコマンド処理を終了する。
【０１８２】
このように、本技術の第６の実施の形態によれば、ホストコンピュータ１００がエラー情報管理テーブル２２１の情報を取得することができ、メモリシステムで実行するコマンドを効果的にスケジューリングすることができる。
【０１８３】
＜７．第７の実施の形態＞
上述の第１乃至６の実施の形態では、エラー情報をメモリコントローラ２００において管理していたが、このエラー情報はホストコンピュータ１００において管理してもよい。この第７の実施の形態では、ホストコンピュータ１００がエラー情報を管理することを想定する。これにより、第６の実施の形態のようにテーブル情報取得コマンドを設けるまでもなく、ホストコンピュータ１００においてエラー情報を把握することができ、メモリシステムで実行するコマンドを効果的にスケジューリングすることができる。
【０１８４】
［情報処理システムの構成］
図２９は、本技術の第７の実施の形態における情報処理システムの構成例を示す図である。この情報処理システムは、第１乃至６の実施の形態と同様に、ホストコンピュータ１００と、メモリコントローラ２００と、メモリ３００とから構成される。メモリコントローラ２００およびメモリ３００はストレージシステムを構成する。但し、エラー情報管理テーブル１２１がホストコンピュータ１００において管理され、メモリコントローラ２００がエラー情報保持部２５０を備える点が異なる。
【０１８５】
エラー情報管理テーブル１２１は、第１乃至６の実施の形態において説明したエラー情報管理テーブル２２１と同様の構成を備え、各エントリにおいてアドレスおよび検出されたエラー数を管理する。なお、エラー情報管理テーブル１２１は、特許請求の範囲に記載のエラー情報管理部の一例である。
【０１８６】
エラー情報保持部２５０は、エラー検出訂正部２３０において検出されたエラー数とそのエラーを発生した論理アドレスを一時的に保持するものである。エラー情報保持部２５０が保持するデータサイズは、ホストコンピュータ１００が、１回のリードコマンドで読み出す最大のデータサイズに応じたサイズとなる。例えば、１論理アドレスで示される領域のサイズが５１２バイトであるとき、ホストコンピュータ１００が１回のリードコマンドで最大１２８ＫＢのデータを読み出す場合、２５６個のエラー数を保持することが可能である。
【０１８７】
［リードコマンド処理の動作］
図３０は、本技術の第７の実施の形態におけるリードコマンド処理の処理手順例を示す流れ図である。
【０１８８】
この第７の実施の形態におけるリードコマンド処理は、図６により説明した第１の実施の形態とほぼ同様であるが、エラー情報管理テーブル２２１の更新処理（ステップＳ９２０）に代えて、エラー情報保持部２５０にエラー情報を保持する点において異なる。すなわち、ステップＳ８３５で検出されたエラー数と、ステップＳ８３２で決定した論理アドレスとが、エラー情報保持部２５０に保持される（ステップＳ８３９）。
【０１８９】
処理終了時にプロセッサ２４０は、エラー情報保持部２５０で保持しているエラーを検出した論理アドレスとそのエラー数およびリードコマンドが正常終了したことをホストコンピュータ１００に通知し、リードコマンド処理を終了させる（ステップＳ８４３）。一方、訂正可能なエラー数を越えた場合には（ステップＳ８３７：Ｎｏ）、リードコマンドがエラー終了したことをホストコンピュータ１００に通知し、リードコマンド処理を終了させる（ステップＳ８４４）。その際、エラー情報保持部２５０で保持しているエラーが検出された論理アドレスとそのエラー数、および、ステップＳ８３７で訂正不可能と判定された論理アドレスと訂正可能なエラー数を超えた旨がホストコンピュータ１００に通知される。
【０１９０】
なお、ここではステップＳ８４３およびＳ８４４において、リードコマンド実行中に検出された論理アドレスとエラー数を、コマンド終了通知を行うタイミングでホストコンピュータ１００に通知したが、通知方法はこの方法に限らない。コマンド終了通知時には、エラーが検出されたことのみを通知しておいて、検出された論理アドレスとエラー数の情報は他のコマンドによって別途取得するようにしてもよい。
【０１９１】
［エラー情報管理テーブル更新処理の動作］
図３１は、本技術の第７の実施の形態におけるエラー情報管理テーブル更新の処理手順例を示す流れ図である。この第７の実施の形態では、エラー情報管理テーブル更新処理は、ホストコンピュータ１００において行われる。すなわち、ホストコンピュータ１００は、リードコマンド処理終了後、メモリコントローラ２００からエラー情報（エラーを検出した論理アドレスとエラー数）を取得した場合、エラー情報管理テーブル１２１の情報を更新する。
【０１９２】
まず、ホストコンピュータ１００がメモリコントローラ２００から受信した、エラーを検出した論理アドレスが、エラー情報管理テーブル１２１に登録済みの論理アドレスであるか否かが判定される（ステップＳ８５３）。登録済みの論理アドレスである場合には（ステップＳ８５３：Ｙｅｓ）、受信されたエラーのエラー数が登録済みのエラー数よりも大きいか否かが判定される（ステップＳ８５８）。受信されたエラーのエラー数が登録済みのエラー数よりも大きい場合には（ステップＳ８５８：Ｙｅｓ）、受信されたエラー数によってエラー情報管理テーブル１２１の該当エントリのエラー数を更新する（ステップＳ８５９）。
【０１９３】
エラー情報管理テーブル１２１にその論理アドレスが登録されていない場合（ステップＳ８５３：Ｎｏ）、エラー情報管理テーブル１２１に空きエントリが有るか否かが判定される（ステップＳ８５４）。空きエントリが有る場合には（ステップＳ８５４：Ｙｅｓ）、受信されたエラーの論理アドレスとエラー数を空きエントリに登録する（ステップＳ８５７）。
【０１９４】
一方、空きエントリが無い場合には（ステップＳ８５４：Ｎｏ）、受信されたエラー数と各エントリに登録されているエラー数のうち最も小さい数とを比較する（ステップＳ８５５）。受信されたエラー数の方が大きい場合には（ステップＳ８５５：Ｙｅｓ）、受信されたエラー数と論理アドレスをそのエントリにおいて更新する（ステップＳ８５６）。
【０１９５】
［リフレッシュコマンド処理の動作］
本技術の第７の実施の形態では、ホストコンピュータ１００においてエラー情報を管理するが、リフレッシュコマンド処理の動作は基本的には図１１により説明したものと同様である。但し、以下に説明するように、リフレッシュコマンド処理を実行していない論理アドレスが存在するかを判定する点、および、論理アドレスから物理アドレスへのアドレス変換を行う点などが異なる。リフレッシュコマンドでは、パラメータとして、リフレッシュを実行する論理アドレスが送信される。ホストコンピュータ１００は、１回のリフレッシュコマンドで、複数の論理アドレスを指定することが可能である。
【０１９６】
図３２は、本技術の第７の実施の形態におけるリフレッシュコマンド処理の処理手順例を示す流れ図である。
【０１９７】
プロセッサ２４０は、ホストコンピュータ１００から指定された論理アドレスのうち、ステップＳ８６３乃至Ｓ８６６の処理が行われていない論理アドレスが存在するか否かを判定する（ステップＳ８６１）。未処理の論理アドレスが存在しない場合には（ステップＳ８６１：Ｎｏ）、プロセッサ２４０は、リフレッシュコマンドの処理が正常に終了した旨をホストコンピュータ１００へ通知して、リフレッシュコマンド処理を終了させる（ステップＳ８６９）。未処理の論理アドレスが存在する場合には（ステップＳ８６１：Ｙｅｓ）、以下の処理を行う。
【０１９８】
プロセッサ２４０は、未処理の論理アドレスから、リフレッシュを実行する論理アドレスを選択する（ステップＳ８６２）。この実施の形態では、小さい順に論理アドレスを選択することを想定する。
【０１９９】
プロセッサ２４０は、ステップＳ８６２で決定した論理アドレスを、アドレス変換テーブル２２２を使用して、物理アドレスに変換する（ステップＳ８６３）。
【０２００】
プロセッサ２４０は、ステップＳ８６３で変換した物理アドレスを指定して、メモリ３００からデータを読み出して、エラー検出訂正部２３０に転送する（ステップＳ８６４）。転送されるデータサイズは、５２８バイトである。
【０２０１】
エラー検出訂正部２３０は、ステップＳ８６４で転送された５２８バイトのデータのエラー検出を行い、エラーが検出された場合にはさらにエラー訂正を行う（ステップＳ８６５）。
【０２０２】
ステップＳ８６５で訂正されたデータ５１２バイトと１６バイトのＥＣＣを含む５２８バイトのデータを、エラー検出訂正部２３０から転送し、ステップＳ８６３で変換した物理アドレスを指定して、メモリ３００へ書き込む（ステップＳ８６６）。その後、ステップＳ８６１以降の処理を繰り返す。
【０２０３】
ホストコンピュータ１００は、リフレッシュコマンドの処理終了の通知を、メモリコントローラ２００から受信した後に、エラー情報管理テーブル１２１の更新を行う。ホストコンピュータ１００は、エラー情報管理テーブル１２１のエントリのうち、リフレッシュコマンドで指定した論理アドレスに対応するエントリのエラー数を「０」に更新する。
【０２０４】
［ライトコマンド処理の動作］
本技術の第７の実施の形態では、ホストコンピュータ１００においてエラー情報を管理するが、ライトコマンド処理の動作は基本的には図１３により説明したものと同様である。但し、第１の実施の形態ではエラー情報管理テーブル２２１を空エントリに更新する処理を行っていたが（ステップＳ９５６およびＳ９５７）、この第７の実施の形態では不要となる。
【０２０５】
図３３は、本技術の第７の実施の形態におけるライトコマンド処理の処理手順例を示す流れ図である。
【０２０６】
プロセッサ２４０は、ホストインターフェース２０１において受信したライト対象の先頭論理アドレスとデータサイズに基づいて、論理アドレス単位に処理を分割する（ステップＳ８７１）。１回の処理で実行されるのは１論理アドレスである。
【０２０７】
プロセッサ２４０は、ライト処理を実行する論理アドレスを選択して決定する（ステップＳ８７２）。この実施の形態では、ライト処理を実行する論理アドレスは、先頭論理アドレスから順番に決定する。
【０２０８】
プロセッサ２４０は、ステップＳ８７２で選択した論理アドレスを、テーブル管理部２２０で保持しているアドレス変換テーブル２２２を使用して物理アドレスに変換する（ステップＳ８７３）。
【０２０９】
プロセッサ２４０は、ホストインターフェース２０１において受信した１論理アドレス５１２バイトのデータを、ＥＣＣ生成部２１０に転送する（ステップＳ８７４）。ＥＣＣ生成部２１０では、受信した５１２バイトのデータに対して１６バイトのＥＣＣが生成される。
【０２１０】
プロセッサ２４０は、ステップＳ９５３で取得した物理アドレスを指定して、ＥＣＣ生成部２１０から転送した５２８バイトのデータをメモリ３００へ書き込む（ステップＳ８７５）。
【０２１１】
プロセッサ２４０は、ライトコマンド処理で、メモリ３００へ書き込んだデータサイズの合計と、ライトコマンドで指定されたデータサイズとを比較する（ステップＳ８７８）。書き込んだデータサイズの合計が指定されたデータサイズに満たない場合には（ステップＳ８７８：Ｎｏ）、ステップＳ８７２以降の処理を繰り返す。一方、書き込んだデータサイズの合計が指定されたデータサイズに達した場合には（ステップＳ８７８：Ｙｅｓ）、ライトコマンドの処理が正常に終了した旨をホストコンピュータ１００に通知して、ライトコマンド処理を終了させる（ステップＳ８７９）。
【０２１２】
ホストコンピュータ１００は、ライトコマンドの処理終了の通知を、メモリコントローラ２００から受信した後、エラー情報管理テーブル１２１の更新を行う。ホストコンピュータ１００は、エラー情報管理テーブル１２１のエントリのうち、ライトコマンドで書込みを指定した論理アドレスに対応するエントリのエラー数を「０」に更新する。
【０２１３】
このように、本技術の第７の実施の形態によれば、ホストコンピュータ１００においてエラー情報を把握することができ、メモリシステムで実行するコマンドを効果的にスケジューリングすることができる。
【０２１４】
なお、上述の実施の形態は本技術を具現化するための一例を示したものであり、実施の形態における事項と、特許請求の範囲における発明特定事項とはそれぞれ対応関係を有する。同様に、特許請求の範囲における発明特定事項と、これと同一名称を付した本技術の実施の形態における事項とはそれぞれ対応関係を有する。ただし、本技術は実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において実施の形態に種々の変形を施すことにより具現化することができる。
【０２１５】
また、上述の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよく、また、これら一連の手順をコンピュータに実行させるためのプログラム乃至そのプログラムを記憶する記録媒体として捉えてもよい。この記録媒体として、例えば、ＣＤ（Compact Disc）、ＭＤ（MiniDisc）、ＤＶＤ（Digital Versatile Disc）、メモリカード、ブルーレイディスク（Blu-ray Disc（登録商標））等を用いることができる。
【０２１６】
なお、本技術は以下のような構成もとることができる。
（１）メモリ上の複数のアドレスにおけるエラー情報を管理するエラー情報管理部と、
前記エラー情報に基づいて前記メモリにおけるリフレッシュ対象となるアドレスを決定するリフレッシュ対象決定部と
を具備する記憶制御装置。
（２）前記エラー情報管理部は、前記エラー情報としてエラー検出されたアドレスと検出されたエラー数とを関連付けて管理し、
前記リフレッシュ対象決定部は、前記エラー数に基づいてそのエラー数に関連付けられたアドレスを前記リフレッシュ対象のアドレスとして決定する
前記（１）に記載の記憶制御装置。
（３）前記エラー情報管理部は、前記エラー数に基づいて管理の対象外とするか否かを判断する前記（２）に記載の記憶制御装置。
（４）前記エラー情報管理部は、前記エラー情報としてさらにリード回数を前記アドレスと関連付けて管理し、
前記リフレッシュ対象決定部は、前記リード回数に基づいてそのリード回数に関連付けられたアドレスを前記リフレッシュ対象のアドレスとして決定する
前記（２）または（３）に記載の記憶制御装置。
（５）前記エラー情報管理部は、前記メモリ上でエラーが発生した際に予め指定された条件に従って管理の対象外とするか否かを判断する前記（１）から（４）のいずれかに記載の記憶制御装置。
（６）前記エラー情報管理部は、前記エラー情報としてエラー検出された前記メモリの物理アドレスと検出されたエラー数とを関連付けて管理し、
前記リフレッシュ対象決定部は、前記エラー数に基づいてそのエラー数に関連付けられた前記物理アドレスを前記リフレッシュ対象のアドレスとして決定する
前記（１）から（５）のいずれかに記載の記憶制御装置。
（７）ホストコンピュータから前記メモリに対するアクセスコマンドに用いられる論理アドレスから前記メモリの物理アドレスへの変換を行うアドレス変換部をさらに具備し、
前記エラー情報管理部は、前記エラー情報としてエラー検出された前記メモリの論理アドレスと検出されたエラー数とを関連付けて管理し、
前記リフレッシュ対象決定部は、前記エラー数に基づいてそのエラー数に関連付けられた前記論理アドレスを選択し、当該論理アドレスを前記アドレス変換部によって前記物理アドレスに変換して前記リフレッシュ対象のアドレスとして決定する
前記（１）から（６）のいずれかに記載の記憶制御装置。
（８）前記エラー情報管理部は、前記エラー情報と関連付けて前記メモリの前記アドレスに記憶されるデータを保持し、前記メモリの前記アドレスへのアクセスに際してそのデータを利用する前記（１）から（７）のいずれかに記載の記憶制御装置。
（９）前記エラー情報管理部は、前記データに加えてそのエラー訂正コードを保持する前記（８）に記載の記憶制御装置。
（１０）前記エラー情報管理部は、前記エラー情報に含まれる前記エラー数が所定の条件を満たす場合のみ前記データを保持する前記（８）または（９）に記載の記憶制御装置。
（１１）前記エラー情報管理部は、ホストコンピュータから前記エラー情報の取得コマンドを受けた際には当該エラー情報を前記ホストコンピュータに通知する前記（１）から（１０）のいずれかに記載の記憶制御装置。
（１２）メモリと、
前記メモリ上の複数のアドレスにおけるエラー情報を管理するエラー情報管理部と、
前記エラー情報に基づいて前記メモリにおけるリフレッシュ対象となるアドレスを決定するリフレッシュ対象決定部と
を具備する記憶装置。
（１３）メモリと、
前記メモリに対するアクセスコマンドを発行するホストコンピュータと、
前記メモリ上の複数のアドレスにおけるエラー情報を管理するエラー情報管理部と、
前記エラー情報に基づいて前記メモリにおけるリフレッシュ対象となるアドレスを決定するリフレッシュ対象決定部と
を具備する情報処理システム。
（１４）前記ホストコンピュータは、前記エラー情報管理部および前記リフレッシュ対象決定部を備えて構成される前記（１３）に記載の情報処理システム。
（１５）メモリ上の複数のアドレスにおけるエラー情報を管理するエラー情報管理手順と、
前記エラー情報に基づいて前記メモリにおけるリフレッシュ対象となるアドレスを決定するリフレッシュ対象決定手順と
を具備する記憶制御方法。
【符号の説明】
【０２１７】
１００  ホストコンピュータ
１２１  エラー情報管理テーブル
２００  メモリコントローラ
２０１  ホストインターフェース
２０３  メモリインターフェース
２１０  ＥＣＣ生成部
２２０  テーブル管理部
２２１  エラー情報管理テーブル
２２２  アドレス変換テーブル
２２３  管理対象アドレステーブル
２２４  管理対象エラー数設定部
２３０  エラー検出訂正部
２４０  プロセッサ
２５０  エラー情報保持部
２８０  バス
３００  メモリ
【図１】
2014157391.tif 000003
【図２】
2014157391.tif 000004
【図３】
2014157391.tif 000005
【図４】
2014157391.tif 000006
【図５】
2014157391.tif 000007
【図６】
2014157391.tif 000008
【図７】
2014157391.tif 000009
【図８】
2014157391.tif 000010
【図９】
2014157391.tif 000011
【図１０】
2014157391.tif 000012
【図１１】
2014157391.tif 000013
【図１２】
2014157391.tif 000014
【図１３】
2014157391.tif 000015
【図１４】
2014157391.tif 000016
【図１５】
2014157391.tif 000017
【図１６】
2014157391.tif 000018
【図１７】
2014157391.tif 000019
【図１８】
2014157391.tif 000020
【図１９】
2014157391.tif 000021
【図２０】
2014157391.tif 000022
【図２１】
2014157391.tif 000023
【図２２】
2014157391.tif 000024
【図２３】
2014157391.tif 000025
【図２４】
2014157391.tif 000026
【図２５】
2014157391.tif 000027
【図２６】
2014157391.tif 000028
【図２７】
2014157391.tif 000029
【図２８】
2014157391.tif 000030
【図２９】
2014157391.tif 000031
【図３０】
2014157391.tif 000032
【図３１】
2014157391.tif 000033
【図３２】
2014157391.tif 000034
【図３３】
2014157391.tif 000035