(57)【要約】【課題】不揮発性メモリからのデータ読み出し時にエラーが発生した場合でも、記憶装置の稼働時間を延長させる【解決手段】記憶装置は、不揮発性メモリとＲＡＭとメモリコントローラを有する。ＲＡＭは空きブロック管理テーブルと消耗ブロック管理テーブルを有する。メモリコントローラは、空きブロックの数が閾値１以上であり、不揮発性メモリからの読み出しデータに閾値２以上閾値３未満のエラーが含まれていた場合、該当ブロックを消耗ブロックとして消耗ブロック管理テーブルに登録する。メモリコントローラは、空きブロックの数が閾値１未満になったとき、消耗ブロック管理テーブルに登録されている消耗ブロックを空きブロックとして空きブロック管理テーブルに登録する。【選択図】図１
2013222236.tif 000002
【特許請求の範囲】
【請求項１】
メモリを消去単位である複数のブロックにより構成し、該メモリの複数のブロックを、複数のデータブロックと、複数の空きブロックと、消耗ブロックに分けて使用するメモリの管理方法であって、
前記メモリからのデータ読み出し時にデータチェックを行い、読み出したデータのエラー数が閾値２未満であるときに当該データを保持しているデータブロックをデータブロックとして使用継続し、読み出したデータのエラー数が閾値３以上であるときに当該データを保持しているデータブロックを破棄し、
前記空きブロックの数が閾値１以上であり、読み出したデータに閾値２以上閾値３未満のエラーが含まれる場合に、当該データを保持しているデータブロックを消耗ブロックとし、
前記空きブロックの数が前記閾値１未満であり、読み出したデータに閾値３以上のエラーが含まれる場合に、前記消耗ブロックを前記空きブロックとして使用することを特徴とするメモリの管理方法。
【請求項２】
請求項１に記載のメモリの管理方法であって、
前記消耗ブロックを前記空きブロックとして使用する際、前記発生エラー数が小さい消耗ブロックを優先的に使用することを特徴とするメモリの管理方法。
【請求項３】
請求項１に記載のメモリの管理方法であって、
前記空きブロックの数が閾値１以上であり、読み出したデータに閾値２以上閾値３未満のエラーが含まれる場合に、当該データのエラー回数をカウントし、エラーカウント値が閾値４以上となった場合に消耗ブロックとして使用することを特徴とするメモリの管理方法。
【請求項４】
請求項１に記載のメモリの管理方法であって、
前記空きブロックの数が閾値１以上であり、読み出したデータに閾値２以上閾値３未満のエラーが含まれる場合に、エラーが発生したデータブロック内のデータを前記空きブロックに移動させると共に、当該データブロックを前記消耗ブロックとし、
前記空きブロックの数が前記閾値１未満であり、読み出したデータに閾値３以上のエラーが含まれる場合に、エラーが発生したデータブロック内のデータを前記消耗ブロックに移動させ、前記当該消耗ブロックを前記空きブロックとして使用することを特徴とするメモリの管理方法。
【請求項５】
ある所定の書き込み単位であるページと前記書き込み単位よりも大きい消去単位であるブロックを持つ不揮発性メモリとデータの読み出し及び書き込みができるＲＡＭと前記不揮発性メモリおよび前記ＲＡＭへの読み出し及び書き込み処理を行うメモリコントローラを有する記憶装置であって、
前記ＲＡＭは、空きブロックを管理する空きブロック管理テーブルと、消耗ブロックを管理する消耗ブロック管理テーブルを有し、
前記メモリコントローラは、前記空きブロック管理テーブルに登録されている空きブロックの数が閾値１以上であり、前記不揮発性メモリから読み出したデータに閾値２以上閾値３未満のエラーが含まれていた場合、該データを保持しているデータブロックを前記消耗ブロック管理テーブルに消耗ブロックとして登録し、前記空きブロック管理テーブルに登録されている空きブロックの数が前記閾値１未満である場合、前記消耗ブロック管理テーブルに登録されている消耗ブロックを前記空きブロック管理テーブルに空きブロックとして登録することを特徴とする記憶装置。
【請求項６】
請求項５に記載の記憶装置であって、
読み出したデータのエラー数が閾値２未満であるときに当該データを保持しているデータブロックをデータブロックとして使用継続し、読み出したデータのエラー数が閾値３以上であるときに当該データを保持しているデータブロックを破棄することを特徴とする記憶装置。
【請求項７】
請求項５または請求項６に記載の記憶装置であって、
前記メモリコントローラは、閾値設定レジスタを有し、
前記閾値設定レジスタの値によって、前記閾値１、前記閾値２、前記閾値３の値を変更することを特徴とする記憶装置。
【請求項８】
請求項５から請求項７のいずれか１項に記載の記憶装置であって、
前記消耗ブロック管理テーブルは、発生エラー数を有し、
前記メモリコントローラは、前記消耗ブロック管理テーブルに登録されている消耗ブロックを前記空きブロック管理テーブルに空きブロックとして登録する際、前記発生エラー数が小さい消耗ブロックを優先的に登録することを特徴とする記憶装置。
【請求項９】
請求項５から請求項８のいずれか１項に記載の記憶装置であって、
前記メモリコントローラは、前記空きブロック管理テーブルに登録されている空きブロックの数が閾値１未満であり、前記不揮発性メモリから読み出したデータに閾値３以上のエラーが含まれていた場合、エラーが発生したデータブロック内のデータを前記空きブロック管理テーブルに登録されている複数の空きブロックに移動させることを特徴とする記憶装置。
【請求項１０】
ある所定の書き込み単位であるページと前記書き込み単位よりも大きい消去単位であるブロックを持つ不揮発性メモリとデータの読み出し及び書き込みができるＲＡＭと前記不揮発性メモリおよび前記ＲＡＭへの読み出し及び書き込み処理を行うメモリコントローラを有する記憶装置であって、
前記ＲＡＭは、空きブロックを管理する空きブロック管理テーブルと、消耗ブロックを管理する消耗ブロック管理テーブルを有し、
前記メモリコントローラは、前記空きブロック管理テーブルに登録されている空きブロックの数が閾値１以上であり、前記不揮発性メモリから読み出したデータに閾値２以上閾値３未満のエラーが含まれていた場合、該データを保持しているデータブロックのエラーカウント値を１つ加算し、前記エラーカウント値が閾値４以上となった場合には、前記データブロックを前記消耗ブロック管理テーブルに消耗ブロックとして登録し、前記空きブロック管理テーブルに登録されている空きブロックの数が前記閾値１未満である場合、前記消耗ブロック管理テーブルに登録されている消耗ブロックを前記空きブロック管理テーブルに空きブロックとして登録することを特徴とする記憶装置。
【請求項１１】
請求項１０に記載の記憶装置であって、
前記メモリコントローラは、閾値設定レジスタを有し、
前記閾値設定レジスタの値によって、前記閾値１、前記閾値２、前記閾値３、前記閾値４の値を変更することを特徴とする記憶装置。
【請求項１２】
請求項１０または請求項１１に記載の記憶装置であって、
前記消耗ブロック管理テーブルは、発生エラー数を有し、
前記メモリコントローラは、前記消耗ブロック管理テーブルに登録されている消耗ブロックを前記空きブロック管理テーブルに空きブロックとして登録する際、前記発生エラー数が小さい消耗ブロックを優先的に登録することを特徴とする記憶装置。
【請求項１３】
請求項１０から請求項１２のいずれかに記載の記憶装置であって、
前記メモリコントローラは、前記空きブロック管理テーブルに登録されている空きブロックの数が閾値１未満であり、前記不揮発性メモリから読み出したデータに閾値３以上のエラーが含まれていた場合、エラーが発生したデータブロック内のデータを前記空きブロック管理テーブルに登録されている複数の空きブロックに移動させることを特徴とする記憶装置。
【請求項１４】
ある所定の書き込み単位であるページと前記書き込み単位よりも大きいデータ消去単位であるブロックを持つ不揮発性メモリとデータの読み出し及び書き込みができるＲＡＭと前記不揮発性メモリおよび前記ＲＡＭへの読み出し及び書き込み処理を行うメモリコントローラを有する記憶装置であって、
前記ＲＡＭは、空きブロックを管理する空きブロック管理テーブルと、消耗ブロックを管理する消耗ブロック管理テーブルを有し、
前記メモリコントローラは、前記空きブロック管理テーブルに空きブロックが登録されており、前記不揮発性メモリから読み出したデータに閾値２以上閾値３未満のエラーが含まれていた場合、エラーが発生したデータブロック内のデータを前記空きブロック管理テーブルに登録されている空きブロックに移動させると共に、前記データブロックを前記消耗ブロック管理テーブルに消耗ブロックとして登録し、前記空きブロック管理テーブルに空きブロックが登録されておらず、前記不揮発性メモリから読み出したデータに閾値３以上のエラーが含まれていた場合、エラーが発生したデータブロック内のデータを前記消耗ブロック管理テーブルに登録されている消耗ブロックに移動させることを特徴とする記憶装置。
【請求項１５】
請求項１４に記載の記憶装置であって、
前記メモリコントローラは、閾値設定レジスタを有し、
前記閾値設定レジスタの値によって、前記閾値１、前記閾値２、前記閾値３の値を変更することを特徴とする記憶装置。
【請求項１６】
請求項１４または請求項１５に記載の記憶装置であって、
前記消耗ブロック管理テーブルは、発生エラー数を有し、
前記メモリコントローラは、エラーが発生したデータブロック内のデータを前記消耗ブロック管理テーブルに登録されている消耗ブロックに移動させる際、前記発生エラー数が小さい消耗ブロックを優先的に選択することを特徴とする記憶装置。
【請求項１７】
請求項１４から請求項１６のいずれか１項に記載の記憶装置であって、
前記メモリコントローラは、前記データブロック内のデータを前記消耗ブロックに対して移動させる際、複数の消耗ブロックに対して前記データを移動させることを特徴とする記憶装置
【請求項１８】
命令処理装置と記憶装置を有する計算機において、
前記記憶装置として、請求項５から請求項１７のいずれか１項に記載の記憶装置を有することを特徴とする計算機。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリの管理方法、記憶装置およびそれを搭載した計算機に関する。
【背景技術】
【０００２】
情報機器の補助記憶装置として、一般的には磁気ディスク記憶装置が広く使用されている。しかし、近年ではこの磁気ディスク記憶装置に代わり、半導体メモリを記憶媒体とする記憶装置が増えてきている。その中でも、電気的に消去可能かつ再書き込み可能な不揮発性メモリ（ＥＥＰＲＯＭ：Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）の一種であるフラッシュメモリを用いた記憶装置が主流となってきている。
【０００３】
このフラッシュメモリは、磁気ディスクと比べて読み出し及び書き込み速度に優れる。一方で、書き込み回数や読み出し回数が増加すると内部に保存しているデータが変化し、エラーが発生するなどの問題もある。
【０００４】
そのため、フラッシュメモリを用いた記憶装置では、制御コントローラ内部にエラー訂正回路を設け、一定数までのエラーは許容できるようにすることが多い。また、信頼性を確保するため、データ保持領域とは別に予備領域を設け、エラーが一定数以上の場合には該当のデータ保持領域を破棄し、予備領域を代わりに使用する場合もある。しかし、この方法を用いた場合、エラーが多発すると予備領域が急速に失われ、記憶装置の稼働時間が短くなる虞がある。
【０００５】
このフラッシュメモリを用いた記憶装置の背景技術として、特許文献１がある。特許文献１では、エラーによって予備領域が急激に減少することを防止するために、「フラッシュメモリデバイスにエラー訂正回路とブロック管理手段とを設け、予備ブロックの残数がブロック管理手段に設定された閾値に至った後は、ｂｉｔエラーのあったデータをエラー訂正してホストに送出するとともに、該エラーを生起したブロックをリフレッシュする。リフレッシュは当該ブロックのエラー訂正されたデータを含む全データを空きブロック若しくは予備ブロックに書き写し、元のブロックのデータを消去することにより実行する。又は、空きブロック若しくは予備ブロックに書き写してから元のブロックに書き戻すことにより実行する。」と記載されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１０−８６４０４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１では、予備ブロックが一定数未満になった場合に、エラー数が閾値２（６ビット）未満のブロックをリフレッシュし、空きブロックもしくは予備ブロックと入れ替えている。しかしこの方法では、予備ブロックが一定数以上の場合はブロックのリフレッシュを行わず、エラー数が閾値１（４ビット）以上閾値２未満のブロックを不良ブロックとして破棄している。そのため、リフレッシュできるブロック数が少なく、稼働時間の延長効果が小さい。
【０００８】
稼働時間の延長効果を図るには、不良ブロックとして破棄している領域の取り扱いを見直す必要がある。具体的には、予備ブロックが一定数以上、エラー数が閾値１（４ビット）以上閾値２未満のときの取り扱いを見直す必要がある。
【０００９】
そこで、本発明は、稼働時間をより延長することができるメモリの管理方法、記憶装置およびそれを搭載した計算機を提供する。
【課題を解決するための手段】
【００１０】
上記課題を解決するために、例えば特許請求の範囲に記載の構成を採用する。
【００１１】
本願は上記課題を解決する手段を複数含んでいるが、その一例を挙げるならば、「ある所定の書き込み単位であるページ４０ｂと前記書き込み単位よりも大きい消去単位であるブロック４０ａを持つ不揮発性メモリ４０とデータの読み出し及び書き込みができるＲＡＭ５０と前記不揮発性メモリ４０および前記ＲＡＭ５０への読み出し及び書き込み処理を行うメモリコントローラ３０を有する記憶装置１０であって、前記ＲＡＭ５０は、空きブロック６１を管理する空きブロック管理テーブル５２と、消耗ブロック６２を管理する消耗ブロック管理テーブル５３を有し、前記メモリコントローラ３０は、前記空きブロック管理テーブル５２に登録されている空きブロック６１の数が閾値１以上であり、前記不揮発性メモリ４０から読み出したデータに閾値２以上閾値３未満のエラーが含まれていた場合、該データを保持しているデータブロック６０を前記消耗ブロック管理テーブル５３に消耗ブロック６２として登録し、前記空きブロック管理テーブル５２に登録されている空きブロック６１の数が前記閾値１未満である場合、前記消耗ブロック管理テーブル５３に登録されている消耗ブロック６２を前記空きブロック管理テーブル５２に空きブロック６１として登録すること」を特徴とする。
【発明の効果】
【００１２】
本発明によれば、空きブロックが一定数以上の状態でも消耗ブロックを確保し、空きブロックが一定数未満となった際に、確保した消耗ブロックを空きブロックとして補充することで、記憶装置の稼働時間をより延長することができる。
【００１３】
上記した以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【００１４】
【図１】本発明の実施例１を説明するためのハードウェア構成図。
【図２】不揮発性メモリの内部構成図。
【図３】不揮発性メモリの各ブロック４０ａの使用状態を表した図。
【図４】実施例１における論理／物理アドレス変換テーブルの内容を表した図。
【図５】実施例１における空きブロック管理テーブルの内容を表した図。
【図６】実施例１における消耗ブロック管理テーブルの内容を表した図。
【図７】実施例１におけるデータ読み出し処理のフローチャート。
【図８】実施例１におけるブロック交替処理のフローチャート。
【図９】実施例１における空きブロックへのデータ移動処理のフローチャート。
【図１０】実施例１における空きブロック補充処理のフローチャート。
【図１１】実施例１におけるブロック管理方法をマップとして表した図。
【図１２】実施例２におけるハードウェア構成図。
【図１３】実施例３におけるハードウェア構成図。
【図１４】実施例３における消耗ブロック管理テーブルの内容を表した図。
【図１５】実施例３におけるブロック交替処理のフローチャート。
【図１６】実施例３における空きブロック補充処理のフローチャート。
【図１７】実施例４におけるハードウェア構成図。
【図１８】実施例４におけるエラーカウント情報の内容を表した図。
【図１９】実施例４におけるブロック交替処理のフローチャート。
【図２０】実施例５におけるハードウェア構成図。
【図２１】実施例５における論理／物理アドレス変換テーブルの内容を表した図。
【図２２】実施例５におけるデータ読み出し処理のフローチャート。
【図２３】実施例５における物理アドレスＢからのデータ読み出し処理のフローチャート。
【図２４】実施例５におけるブロック交替処理Ａのフローチャート。
【図２５】実施例５におけるブロック交替処理Ｂのフローチャート。
【図２６】実施例５における空きブロックＡへのデータ移動処理のフローチャート。
【図２７】実施例５における空きブロックＢへのデータ移動処理のフローチャート。
【図２８】実施例６におけるハードウェア構成図である。
【図２９】実施例６におけるブロック交替処理Ａのフローチャート。
【図３０】実施例６におけるブロック交替処理Ｂのフローチャート。
【図３１】実施例６における消耗ブロックＡへのデータ移動処理のフローチャート。
【図３２】実施例６における消耗ブロックＢへのデータ移動処理のフローチャート。
【発明を実施するための形態】
【００１５】
以下、図面を用いて実施例を説明する。
【実施例１】
【００１６】
実施例１では、稼働時間をより延長できる記憶装置の例を説明する。
【００１７】
図１は、実施例１におけるハードウェア構成図の例である。
【００１８】
計算機１は、記憶装置１０と、命令処理装置３と、主記憶メモリ４と、入出力制御装置５と、ネットワーク制御装置６と、表示装置７と、データバス２とを備えている。記憶装置１０と、命令処理装置３と、主記憶メモリ４と、入出力制御装置５と、ネットワーク制御装置６と、表示装置７の間は、相互にデータバス２を介して接続されている。
【００１９】
このうち命令処理装置３は、記憶装置１０または主記憶メモリ４に格納されている命令に基いてデータを処理し、入出力制御装置５と、ネットワーク制御装置６と、表示装置７とを制御する。
【００２０】
記憶装置１０と主記憶メモリ４は、命令処理装置３からの処理に従い、データの書き込みと、書き込んだデータの読み出しとを行う。
【００２１】
入出力制御装置５は、命令処理装置３がデータバス２を介して外部機器（不図示）とのデータの入出力を制御する装置である。入出力制御装置５を介してデータを入出力する外部機器は、例えば、キーボード、マウス、外付けの記憶装置１０などである。
【００２２】
ネットワーク制御装置６は、命令処理装置３がデータバス２を介してネットワーク（不図示）とのデータの入出力を制御する装置である。
【００２３】
表示装置７は、命令処理装置３の制御によってデータの表示を行う装置である。
【００２４】
記憶装置１０は、Ｉ／Ｆ（インターフェース）制御部２０と、メモリコントローラ３０と、ＲＡＭ５０と、１つ以上の不揮発性メモリ４０とを有している。
【００２５】
Ｉ／Ｆ制御部２０は、命令処理装置３とメモリコントローラ３０との間におけるデータの入出力制御を行う。
【００２６】
メモリコントローラ３０は、ＲＡＭ５０と、不揮発性メモリ４０とを制御するものである。メモリコントローラ３０は、ブロック管理部３１とエラー訂正回路３２と不揮発性メモリ制御部３３とを有している。
【００２７】
ブロック管理部３１は、命令処理装置３からの命令に従い、不揮発性メモリ４０に対するデータ入出力を制御する。また、図３を用いて後述するデータブロック６０、空きブロック６１、消耗ブロック６２を管理し、ＲＡＭ５０内の論理／物理アドレス変換テーブル５１、空きブロック管理テーブル５２、消耗ブロック管理テーブル５３の更新を行う。
【００２８】
エラー訂正回路３２は、不揮発性メモリ４０から読み出されたデータにエラーが含まれているか判断し、エラーが含まれている場合にはエラー訂正を実施する。また、ブロック管理部３１に対して、エラー数の通知も行う。
【００２９】
不揮発性メモリ制御部３３は、ブロック管理部３１からの指示に従い、不揮発性メモリ４０に対するデータの書き込みおよび読み出しを行う。
【００３０】
不揮発性メモリ４０は、不揮発性メモリ制御部３３によって書き込み指示されたデータを格納する。本実施例で記載の不揮発性メモリ４０は、所定の書き込み単位と書き込み単位より大きい消去単位を持ち、データを書き換える場合には、書き込みの前に消去動作を必要とする。不揮発性メモリ４０の構成は、後記の図２において詳細に説明する。
【００３１】
ＲＡＭ５０は、論理／物理アドレス変換テーブル５１、空きブロック管理テーブル５２、消耗ブロック管理テーブル５３を格納する。論理／物理アドレス変換テーブル５１は、不揮発性メモリ４０内に格納しているデータの格納場所を示すものであり、後記の図４にて詳細に説明する。空きブロック管理テーブルは、空きブロック情報の管理を行うものであり、後記の図５にて詳細に説明する。消耗ブロック管理テーブル５３は、消耗ブロック情報の管理を行うものであり、後記の図６にて詳細に説明する。
【００３２】
このＲＡＭ５０は、ＳＲＡＭ（Ｓｔａｔｉｃ  ＲＡＭ）やＤＲＡＭ（Ｄｙｎａｍｉｃ  ＲＡＭ）のような揮発性メモリであっても、ＭＲＡＭ（Ｍａｇｎｅｔｉｃ  ＲＡＭ）やＲｅＲＡＭ（Ｒｅｓｉｓｔａｎｃｅ  ＲＡＭ）、ＰＲＡＭ（Ｐｈａｓｅ  ｃｈａｎｇｅ  ＲＡＭ）のような不揮発性メモリであってもよい。ただし、不揮発性メモリを用いる場合には、データ書き換えの際に消去動作を必要としない不揮発性メモリである必要がある。また、ＲＡＭ５０はメモリコントローラ３０の内部にあってもよい。
【００３３】
図２は、不揮発性メモリ４０の構成を示した図である。不揮発性メモリ４０は１つ以上の消去単位から構成され、この消去単位をブロック４０ａと呼ぶ。また、このブロック４０ａは１つ以上の書き込み単位から構成されており、この書き込み単位をページ４０ｂと呼ぶ。本実施例では、不揮発性メモリ４０のブロック数をＭブロック、１ブロック当たりのページ数をＮページとする。
【００３４】
図３は、不揮発性メモリ４０における各ブロック４０ａの使用状態を表した図である。本実施例では、ブロック４０ａをデータブロック６０、空きブロック６１、消耗ブロック６２の３つの役割に分けて使用する。データブロック６０は、命令処理装置３から書き込み命令を受けたデータを保持するブロックである。空きブロック６１は、各ページ４０ｂともデータを保持していないブロックである。
【００３５】
消耗ブロック６２も、空きブロック６１と同様に各ページ４０ｂともデータを保持していないブロックである。空きブロック６１と消耗ブロック６２の違いはエラー発生の有無であり、これは図９のブロック交替処理フローチャートにて詳しく説明する。
【００３６】
図４は、実施例１における論理／物理アドレス変換テーブル５１の構成図である。論理／物理アドレス変換テーブル５１は、論理ページアドレス５１ａに対応する物理アドレス５１ｂを管理するテーブルである。論理／物理アドレス変換テーブル５１は、論理ページアドレス５１ａ、物理アドレス５１ｂを有しており、物理アドレス５１ｂは物理ブロック番号５１ｃと物理ページ番号５１ｄの組み合わせによって表わされる。論理ページアドレス５１ａは、命令処理装置３が指定する論理アドレスをページ４０ｂ単位にまとめたものである。
【００３７】
図５は、実施例１における空きブロック管理テーブル５２の構成図である。空きブロック管理テーブル５２は、空きブロック６１の管理情報を格納するテーブルであり、空きブロックエントリ番号５２ａ、有効フラグ５２ｂ、物理ブロック番号５２ｃを有する。
【００３８】
空きブロックエントリ番号５２ａは、空きブロック６１の登録番号であり、本実施例では最大Ｃ個の空きブロック６１が登録可能である。
【００３９】
有効フラグ５２ｂは、対象の空きブロックエントリ番号５２ａに登録されている物理ブロック番号５２ｃのブロックが、空きブロック６１として使用可能かを表す情報である。有効フラグ５２ｂには、該当のブロックが空きブロック６１として使用可能ならば「１」、使用不可能ならば「０」が格納される。
【００４０】
図６は、実施例１における消耗ブロック管理テーブル５３の構成図である。消耗ブロック管理テーブル５３は、消耗ブロック６２の管理情報を格納するテーブルであり、消耗ブロックエントリ番号５３ａ、有効フラグ５３ｂ、物理ブロック番号５３ｃを有する。
【００４１】
消耗ブロックエントリ番号５３ａは、消耗ブロック６２の登録番号であり、本実施例では最大Ｗ個の消耗ブロック６２が登録可能である。
【００４２】
有効フラグ５３ｂは、対象の消耗ブロックエントリ番号５３ａに登録されている物理ブロック番号５３ｃのブロックが、消耗ブロック６２として使用可能かを表す情報である。有効フラグ５３ｂには、該当のブロックが消耗ブロック６２として使用可能ならば「１」、使用不可能ならば「０」が格納される。
【００４３】
図７は、実施例１におけるデータ読み出し処理のフローチャートである。なお、フローチャートに登場する処理において、ステップ番号が同じものはすべて同じ処理を行う。そのため、以前に説明済みの処理については、再度の説明はせずに省略する。
【００４４】
図１において、命令処理装置４から記憶装置１０に対してデータ読み出しが要求されると、記憶装置１０はデータ読み出し処理を開始する。
【００４５】
なお、図７を含めて以後に説明するフローチャートでの処理は、基本的には記憶装置１０内のメモリコントローラ３０において実行される。具体的にメモリコントローラ３０のどの機能（ブロック管理部３１、エラー訂正回路３２、不揮発性メモリ制御部３３）が実行するかについては、各フローチャートブロックの左側に、これらの記号で表示している。
【００４６】
まず、ステップＳ１０において、メモリコントローラ３０内のブロック管理部３１は、Ｉ／Ｆ制御部２０を介して命令処理装置３から読み出し対象の論理アドレスとデータサイズを受け取る。
【００４７】
次にステップＳ１１において、ブロック管理部３１は、受け付けた論理アドレスを論理ページアドレス５１ａに変換する。その後、ブロック管理部３１は、図４の論理／物理アドレス変換テーブル５１を用いて、論理ページアドレス５１ａに対応する物理アドレス５１ｂを読み出す。
【００４８】
ステップＳ１２において、ブロック管理部３１は、ステップＳ１１で読み出した物理アドレス５１ｂからデータを読み出すように、不揮発性メモリ制御部３３に指示する。不揮発性メモリ制御部３３は、ブロック管理部３１からの指示に従い、図１の不揮発性メモリ４０からデータを読み出す。
【００４９】
ステップＳ１３において、不揮発性メモリ制御部３３は、ステップＳ１２で不揮発性メモリ４０から読み出したデータをエラー訂正回路３２に受け渡す。エラー訂正回路３２は、不揮発性メモリ制御部３３から受け取ったデータにエラーが含まれているかを判断する。
【００５０】
このとき、データにエラーが含まれていればステップＳ１４の処理に移る。データにエラーが含まれていなければ、データをブロック管理部３１に転送した後、ステップＳ１９の処理に移る。
【００５１】
ステップＳ１４において、エラー訂正回路３２は、データに含まれているエラーが訂正可能か判断する。訂正可能な場合にはステップＳ１５の処理に移り、訂正不可能な場合にはステップＳ１８の処理に移る。
【００５２】
ステップＳ１５において、エラー訂正回路３２は、データ内のエラー訂正を行う。このとき、エラー訂正回路３２は、訂正後のデータをブロック管理部３１に転送すると共に、訂正したエラー数をブロック管理部３１に通知する。
【００５３】
ステップＳ１６において、ブロック管理部３１は、Ｉ／Ｆ制御部２０を介して訂正後のデータを命令処理装置３に転送する。
【００５４】
ステップＳ１７において、ブロック管理部３１は、ブロック交替処理を実施する。このブロック交替処理については、後記の図８において詳しく説明する。
【００５５】
ステップＳ１８において、エラー訂正回路３２は、エラー訂正が不可能であることをブロック管理部３１に通知する。ブロック管理部３１は、エラー訂正回路３２からの通知を受けて、Ｉ／Ｆ制御部２０を介して命令処理装置３にデータ読み出しエラーを通知する。
【００５６】
ステップＳ１９において、ブロック管理部３１は、エラー訂正回路３２から受け取ったデータをＩ／Ｆ制御部２０を介して、命令処理装置３に転送する。
【００５７】
記憶装置１０は、ステップＳ１７、ステップＳ１８、ステップＳ１９のいずれかの処理が完了すると、図７のデータ読み出し処理を終了する。
【００５８】
図７の処理により、記憶装置１０Ｅがデータバス２に送出するデータの取り扱いを整理すると以下のようである。まず不揮発性メモリ４０から取り出したデータにエラーがないときにはそのまま転送する。エラーがありかつ訂正可能であるときには、訂正データを転送するとともに訂正エラー数の情報を与える。エラーがありかつ訂正不可能であるときには、データ読み出しエラーを与える。
【００５９】
図８は、実施例１におけるブロック交替処理のフローチャートである。
【００６０】
ステップＳ２０において、ブロック管理部３１は、空きブロック管理テーブル５２に登録されている空きブロック数が閾値１以上であるか判断する。空きブロック数が閾値１以上であればステップＳ２１の処理に移り、空きブロック数が閾値１未満であればステップＳ２５の処理に移る。
【００６１】
なお図５に示したように、空きブロック管理テーブル５２の空きブロックエントリ番号５２ａに登録されている空きブロック６１は最大Ｃ個である。ここでは、このうち有効フラグ５２ｂの情報を参照して使用可能（データ「１」）な個数を抽出して、これを閾値１と比較している。
【００６２】
ステップＳ２１において、ブロック管理部３１は、エラー訂正回路３２から通知されたエラー数が閾値２以上であるか判断する。エラー数が閾値２以上であればステップＳ２２の処理に移り、閾値２未満であればブロック交替処理を終了する。
【００６３】
ステップＳ２２において、ブロック管理部３１および不揮発性メモリ制御部３３は、空きブロックへのデータ移動を実施する。この空きブロックへのデータ移動は、後記の図９にて詳細に説明する。
【００６４】
空きブロックへのデータ移動後のステップＳ２３において、ブロック管理部３１は、エラー訂正回路３２から通知されたエラー数が閾値３以上であるか判断する。エラー数が閾値３以上であればブロック交替処理を終了し、閾値３未満であればステップＳ２４の処理に移る。なお、閾値３は閾値２よりも大きい値である。
【００６５】
ステップＳ２４において、ブロック管理部３１は、ＲＡＭ５０から消耗ブロック管理テーブル５３（図６）を読み出し、有効フラグ５３ｂが「０：消耗フラグとして使用不可」となっている消耗ブロックエントリ番号５３ａを検索する。そして、該当する消耗ブロックエントリ番号５３ａの物理ブロック番号５３ｃにエラーが発生したブロック番号を登録し、有効フラグ５３ｂを「１：消耗フラグとして使用可」に変更する。ステップＳ２４の処理完了後、ブロック管理部３１はブロック交替処理を終了する。
【００６６】
ステップＳ２５において、ブロック管理部３１は、エラー訂正回路３２から通知されたエラー数が閾値３以上であるか判断する。エラー数が閾値３以上であればステップＳ２２の処理（空きブロックへのデータ移動処理）に移り、閾値３未満であればブロック交替処理を終了する。
【００６７】
ステップＳ２６において、ブロック管理部３１は、空きブロック補充処理を実施する。この空きブロック補充処理は、後記の図１０で詳しく説明する。ステップＳ２６の処理完了後、ブロック管理部３１はブロック交替処理を終了する。
【００６８】
以上の図８の処理により、エラー数の個数に応じて以下のように処理されたことになる。まず、エラー個数が少ない（閾値２未満）ときにはデータ移動処理は行わない。エラー個数が多い（閾値３以上）ときには、空きブロックへのデータ移動処理を行い、かつこの処理により空きブロックの個数が減少したので、空きブロックの個数を補充する。エラー個数が中間（閾値２以上、閾値３未満）であるときには、消耗ブロック管理テーブル５３に登録することで、以降は消耗ブロックとして管理する。
【００６９】
図９は、実施例１における空きブロックへのデータ移動処理（図８のステップＳ２２）のフローチャートである。
【００７０】
ステップＳ３０において、ブロック管理部３１は、ＲＡＭ５０から空きブロック管理テーブル５２（図５）を読み出し、有効フラグ５２ｂが「１：空きブロックとして使用可能」となっている空きブロックエントリ番号５２ａを１つ選択し、その物理ブロック番号５２ｃを取得する。ここで、空きブロックエントリ番号５２ａの選択方式は特に限定せず、例えばＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）のように登録が古いエントリから順に選択してもよい。
【００７１】
ステップＳ３１において、ブロック管理部３１は、エラーが発生したデータブロック６０が保持するデータを、ステップＳ３０で選択した物理ブロック番号５２ｃにコピーするように、不揮発性メモリ制御部３３に指示する。不揮発性メモリ制御部３３は、ブロック管理部３１の指示に従い、選択したブロックへのデータコピーを実施する。また、データコピー完了後、ブロック管理部３１はエラーが発生したデータブロック６０のデータを消去するように、不揮発性メモリ制御部３３に指示を出す。不揮発性メモリ制御部３３は、ブロック管理部３１からの指示に従って該当ブロック内のデータを消去する。
【００７２】
ステップＳ３２において、ブロック管理部３１は、論理／物理アドレス変換テーブル５１（図４）において、コピーしたデータの論理ページアドレス５１ａに対応する物理アドレス５１ｂを、コピー先である空きブロック６１に更新する。
【００７３】
ステップＳ３３において、ブロック管理部３１は、空きブロック管理テーブル５２（図５）において、ステップＳ３０で選択した空きブロックエントリ番号５２ａの有効フラグ５２ｂを「０：空きブロックとして使用不可能」に変更する。
【００７４】
このように、空きブロックへのデータ移動処理（図８のステップＳ２２）によれば、エラーが発生したデータブロック６０が保持するデータを、新たな空きブロックにコピーし、以後このコピーされた空きブロックをデータブロックとして取り扱う。
【００７５】
なお、空きブロックへのデータ移動処理（図８のステップＳ２２）は、その後のステップＳ２４と組み合わせて実施される（閾値２以上閾値３未満のエラーのとき）ことで、元のエラー発生したデータブロック６０を消耗ブロック６２として以後管理することになる。
【００７６】
図１０は、実施例１における空きブロック補充処理のフローチャートである。
【００７７】
ステップＳ４０において、ブロック管理部３１は、ＲＡＭ５０から消耗ブロック管理テーブル５３（図６）を読み出し、有効フラグ５３ｂが「１：消耗ブロックとして使用可能」となっている消耗ブロックエントリ番号５３ａを１つ選択し、その物理ブロック番号５３ｃを取得する。ここで、消耗ブロックエントリ番号５３ａの選択方式は特に限定せず、例えばＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）のように登録が古いエントリから順に選択してもよい。
【００７８】
ステップＳ４１において、ブロック管理部３１は、ＲＡＭ５０から空きブロック管理テーブル５２（図５）を読み出し、有効フラグ５２ｂが「０：空きブロックとして使用不可能」となっている空きブロックエントリ番号５２ａを検索する。そして、該当する空きブロックエントリ番号５２ａの物理ブロック番号５２ｃにステップＳ２６で取得した物理ブロック番号５３ｃを登録し、有効フラグ５２ｂを「１：空きブロックとして使用可能」に変更する。その後、消耗ブロック管理テーブル５３において、ステップＳ２６で選択した消耗ブロックエントリ番号５３ａの有効フラグ５３ｂを「０：消耗ブロックとして使用不可能」に変更する。ステップＳ４１の処理完了後、ブロック管理部３１は空きブロック補充処理を終了する。
【００７９】
図１０の一連の処理により、消耗ブロック内の選択したブロックを以後空きブロックとして使用することになる。つまり、空きブロックの個数を補充したことになる。なお、閾値３以上のエラーのとき、元のエラー発生したデータブロック６０の取り扱いであるが、このブロックは図９によるデータの移動が完了した後、消耗ブロック６２として登録されないため、事実上は不良ブロックとして以後使用しないように取り扱うことになる。
【００８０】
図１１は、実施例１におけるブロック管理方法をマップ状に表した図である。
【００８１】
本図では、縦軸に空きブロック管理テーブル５２に登録されている空きブロック数を記述し、横軸にデータ読み出し時のエラー発生数を記述している。ここでは、縦横の条件に応じてＡ１からＡ６の６領域に分けて処理対応を定めている。
【００８２】
実施例１の処理事例では、データ読み出し時のエラー発生数が少ない（エラー数が閾値２未満）ときは、領域Ａ１，Ａ２に示すように空きブロック管理テーブルに登録されている空きブロック数に関わりなくエラー訂正処理のみを行う。
【００８３】
また、実施例１の処理事例では、データ読み出し時のエラー発生数が多い（エラー数が閾値３以上）ときは、領域Ａ５，Ａ６に示すように空きブロック管理テーブルに登録されている空きブロック数に関わりなくブロック破棄処理を行う。
【００８４】
また、データ読み出し時のエラー発生数が中間（エラー数が閾値２以上で閾値３未満）で、かつ空きブロック管理テーブルに登録されている空きブロック数が少ない（空きブロック数が閾値１未満）ときも、領域Ａ３に示すようにエラー訂正処理のみを行う。
【００８５】
これに対し、本発明では領域Ａ４の取り扱いを工夫している。つまり予備ブロック（空きブロック）が一定数以上、エラー数が閾値２以上閾値３未満のときの取り扱いを見直した点に特徴を有する。
【００８６】
空きブロック数が閾値１（縦軸）以上であり、データ読み出し時のエラー数が閾値２以上閾値３未満（横軸）である場合には、領域Ａ４に該当する。このときには、エラー訂正を実施後、エラーが発生したブロックのデータを空きブロック６１へコピーする。そして、エラーが発生したブロックを消耗ブロック管理テーブル５３に登録し、データコピー先の空きブロック６１をデータブロック６０とする。空きブロック６１からデータブロック６０への変更は、論理／物理アドレス変換テーブル５１の更新によって実施している。
【００８７】
空きブロック数が閾値１以上（縦軸）であり、データ読み出し時のエラー数が閾値３以上（横軸）である場合には、領域Ａ６に該当する。このときには、エラー訂正を実施後、エラーが発生したブロックのデータを空きブロック６１へコピーする。そして、エラーが発生したブロックを破棄すると共に、データコピー先の空きブロック６１をデータブロック６０とする。ブロックの破棄は、論理／物理アドレス変換テーブル５１を更新し、物理アドレス５１ｂからエラーが発生したブロックを消すことで実施している。
【００８８】
空きブロック数が閾値１未満（縦軸）であり、データ読み出し時のエラー数が閾値３以上（横軸）である場合には、領域Ａ５に該当する。このときには、エラー訂正を実施後、エラーが発生したブロックのデータを空きブロック６１へコピーする。そして、エラーが発生したブロックを破棄すると共に、データコピー先の空きブロック６１をデータブロック６０に変更し、消耗ブロック６２の１つを空きブロック６１に変更する処理を行う。
【００８９】
以上の考え方を整理すると、実施例１は、メモリを消去単位である複数のブロックにより構成し、メモリの複数のブロックを、複数のデータブロックと、複数の空きブロックと、消耗ブロックに分けて使用するメモリの管理方法であって、メモリからのデータ読み出し時にデータチェックを行い、読み出したデータのエラー数が閾値２未満であるときに当該データを保持しているデータブロックをデータブロックとして使用継続し、読み出したデータのエラー数が閾値３未満であるときに当該データを保持しているデータブロックを破棄し、空きブロックの数が閾値１以上であり、読み出したデータに閾値２以上閾値３未満のエラーが含まれる場合に、当該データを保持しているデータブロックを消耗ブロックとし、空きブロックの数が閾値１未満であり、読み出したデータに閾値３以上のエラーが含まれる場合に、消耗ブロックを空きブロックとして使用するものである。
【００９０】
以上で説明した実施例１では、次のような効果がある。
【００９１】
ブロック管理部３１は、空きブロック管理テーブル５２に登録されている空きブロック数が閾値１以上の場合にも、エラーが発生したデータブロック６０を消耗ブロック管理テーブル５３に消耗ブロック６２として登録している。これにより、空きブロック管理テーブル５２に登録されている空きブロック数が閾値１未満になった場合に、補充できる消耗ブロック６２を多数確保でき、記憶装置１０の稼働時間をより延長させることができる。
【００９２】
本発明の以下の実施例においても、領域Ａ４の使用に工夫がされている。
【実施例２】
【００９３】
本実施例では、稼働時間をより延長できると共に、閾値を任意に変更できる記憶装置の例を説明する。
【００９４】
図１２は、実施例２におけるハードウェア構成図の例を示している。なお、実施例１におけるハードウェア構成図と同一の要素には、同一の符号を付与している。また、実施例１の図面と比較して変更、追加部分があるときには、二重枠表示により主たる変更箇所を明示している。この表示の約束は、以下の図面に踏襲する。図１２の場合には、図１と比較して追加された閾値設定レジスタ３４が二重枠表示されている。
【００９５】
実施例２における記憶装置１０Ａは、実施例１における記憶装置１０のメモリコントローラ３０とは異なるメモリコントローラ３０Ａを有している。それ以外は、実施例１の記憶装置１０と同様の構成となっている。
【００９６】
実施例２のメモリコントローラ３０Ａは、実施例１のメモリコントローラ３０に加えて、閾値設定レジスタ３４を有している。この閾値設定レジスタ３４は、ブロック管理に使用している閾値１、閾値２、閾値３を任意に変更できるものである。
【００９７】
閾値設定レジスタ３４の値は、製造時にのみ設定が可能なようにしてもよく、任意に外部から変更できるようにしてもよい。外部からの変更方法としては、例えば命令処理装置３から変更指示を与えてもよく、記憶装置１０に搭載しているスイッチによって切り替えるようにしてもよい。
【００９８】
図１２において、閾値設定レジスタ３４は、メモリコントローラ３０の内部に設けられている。しかし、これに限られず、閾値設定レジスタ３４は、メモリコントローラ３０の外部であってもよく、更に、スイッチやピンなどであってもよい。
【００９９】
実施例２における記憶装置１０Ａの動作は、実施例１における記憶装置１０と同様である。つまり、実施例２におけるデータ読み出し処理、ブロック交替処理、空きブロックへのデータ移動処理、空きブロック補充処理はすべて実施例１と同様である。
【０１００】
以上で説明した実施例２では、次のような効果がある。
【０１０１】
記憶装置１０Ａにおけるメモリコントローラ３０Ａは、閾値設定レジスタ３４を有することで、ブロック管理に使用する閾値１、閾値２、閾値３を任意に変更することができる。
【実施例３】
【０１０２】
本実施例では、稼働時間をより延長できると共に、信頼性を向上できる記憶装置の例を説明する。
【０１０３】
図１３は、実施例３におけるハードウェア構成図の例を示している。なお、実施例１におけるハードウェア構成図と同一の要素には、同一の符号を付与している。
【０１０４】
実施例３における記憶装置１０Ｂは、実施例１における記憶装置１０のメモリコントローラ３０とは異なるメモリコントローラ３０Ｂを有している。また、実施例３における記憶装置１０Ｂは、実施例１における記憶装置１０のＲＡＭ５０とは異なるＲＡＭ５０Ｂを有している。それ以外は、実施例３の記憶装置１０Ｂと実施例１の記憶装置１０は同様の構成となっている。
【０１０５】
実施例３のメモリコントローラ３０Ｂは、実施例１のメモリコントローラ３０におけるブロック管理部３１とは異なるブロック管理部３１Ｂを有している。それ以外は、実施例３のメモリコントローラ３０Ｂと実施例１のメモリコントローラ３０は同様の構成となっている。
【０１０６】
実施例３のＲＡＭ５０Ｂは、実施例１のＲＡＭ５０における消耗ブロック管理テーブル５３とは異なる消耗ブロック管理テーブル５３Ｂを有している。それ以外は、実施例３のＲＡＭ５０Ｂと実施例１のＲＡＭ５０は同様の構成となっている。
【０１０７】
図１４は、実施例３における消耗ブロック管理テーブル５３Ｂの構成図である。実施例３の消耗ブロック管理テーブル５３Ｂは、実施例１の消耗ブロック管理テーブル５３に加えて、発生エラー数５３ｄを有している。この発生エラー数５３ｄは、消耗ブロック管理テーブル５３Ｂに消耗ブロック６２を登録する際、データ読み出しで発生したエラー数を格納するものである。
【０１０８】
実施例３における記憶装置１０Ｂのデータ読み出し動作は、実施例１における記憶装置１０と同様である。
【０１０９】
図１５は、実施例３におけるブロック交替処理のフローチャートである。従って、実施例１における図８のブロック交替処理のフローチャートが図１５に置き換えられて処理されている。なお実施例１と同一の要素には、同一の符号を記している。
【０１１０】
実施例３におけるステップＳ２０からステップＳ２３の処理は、実施例１と同様である。
【０１１１】
ステップＳ２４Ｂにおいて、メモリコントローラ３０Ｂ内のブロック管理部３１Ｂは、ＲＡＭ５０Ｂから消耗ブロック管理テーブル５３Ｂを読み出し、有効フラグ５３ｂが「０：消耗ブロックとして使用不可能」となっている消耗ブロックエントリ番号５３ａを検索する。そして、該当する消耗ブロックエントリ番号５３ａの物理ブロック番号５３ｃにエラーが発生したブロック番号を登録し、有効フラグ５３ｂを「１：消耗ブロックとして使用可能」に変更する。また、ブロック管理部３１Ｂは、エラー訂正回路３２から通知されたエラー数を該当する消耗ブロックエントリ番号５３ａのエラー発生数５３ｄに格納する。
【０１１２】
実施例３におけるステップＳ２５の処理は、実施例１と同様である。
【０１１３】
ステップＳ２６Ｂにおいて、ブロック管理部３１Ｂは空きブロック補充処理を実施する。この空きブロック補充処理は、後記の図１６で詳しく説明する。
【０１１４】
実施例３における記憶装置１０Ｂの空きブロックへのデータ移動処理は、実施例１と同様に図９のフローチャートで実行される。
【０１１５】
図１６は、実施例３における空きブロック補充処理のフローチャートである。従って、実施例１における図１０のブロック交替処理のフローチャートが図１６に置き換えられて処理されている。
【０１１６】
ステップＳ４０Ｂにおいて、ブロック管理部３１Ｂは、ＲＡＭ５０Ｂから消耗ブロック管理テーブル５３Ｂを読み出し、有効フラグ５３ｂが「１：消耗ブロックとして使用可能」となっている消耗ブロックエントリ番号５３ａを１つ選択し、その物理ブロック番号５３ｃを取得する。ここで、消耗ブロックエントリ番号５３ａを選択する際に、エラー発生数５３ｄが少ないものを優先的に選択する。エラー発生数５３ｄが同一である消耗ブロックエントリ番号５３ａが複数ある場合には、その中で登録が古い消耗ブロックエントリ番号５３ａを選択する。
【０１１７】
実施例３におけるステップＳ４１の処理は、実施例１と同様である。
【０１１８】
以上で説明した実施例３では、要するに実施例１において消耗ブロックを空きブロックとして使用する際、発生エラー数が小さい消耗ブロックを優先的に使用するものであり、次のような効果がある。
【０１１９】
記憶装置１０Ｂにおけるメモリコントローラ３０Ｂ内のブロック管理部３１Ｂは、消耗ブロック管理テーブル５３Ｂから空きブロック管理テーブル５２へ移動させる消耗ブロック６２を選択する際に、エラー発生数５３ｄが少ない消耗ブロック６２を優先的に選択する。これにより、エラー数の少ない消耗ブロック６２を空きブロック６１として使用でき、記憶装置１０Ｂの信頼性を向上できる。
【実施例４】
【０１２０】
本実施例では、稼働時間をより延長できると共に、信頼性を向上できる記憶装置の例を説明する。この実施例ではエラーカウント数を新たな管理項目とする。
【０１２１】
図１７は、実施例４におけるハードウェア構成図の例を示している。なお、実施例１におけるハードウェア構成図と同一の要素には、同一の符号を付与している。
【０１２２】
実施例４における記憶装置１０Ｃは、実施例１における記憶装置１０のメモリコントローラ３０とは異なるメモリコントローラ３０Ｃを有している。また、実施例４における記憶装置１０Ｃは、実施例１における記憶装置１０のＲＡＭ５０とは異なるＲＡＭ５０Ｃを有している。それ以外は、実施例４の記憶装置１０Ｃと実施例１の記憶装置１０は同様の構成となっている。
【０１２３】
実施例４のメモリコントローラ３０Ｃは、実施例１のメモリコントローラ３０におけるブロック管理部３１とは異なるブロック管理部３１Ｃを有している。それ以外は、実施例４のメモリコントローラ３０Ｃと実施例１のメモリコントローラ３０は同様の構成となっている。
【０１２４】
実施例４のＲＡＭ５０Ｃは、実施例１のＲＡＭ５０に加えてエラーカウント情報５４を有している。このエラーカウント情報５４は、後記の図１８で詳しく説明する。
【０１２５】
図１８は、実施例４におけるエラーカウント情報５４の構成図である。エラーカウント情報５４は、物理ブロック番号５４ａに対応するエラーカウント値５４ｂを格納している。このエラーカウント値５４ｂは、データ読み出し時にエラーが発生した場合、ブロック管理部３１Ｃによって加算される。
【０１２６】
実施例４における記憶装置１０Ｃのデータ読み出し動作は、実施例１における記憶装置１０と同様である。
【０１２７】
図１９は、実施例４におけるブロック交替処理のフローチャートである。従って、実施例１における図１０のブロック交替処理のフローチャート、あるいは実施例３における図１５のブロック交替処理のフローチャートが図１６に置き換えられて処理されている。なお、実施例１におけるブロック交替処理のフローチャートと同一の要素には、同一の符号を記している。
【０１２８】
図１９において、ステップＳ２０からステップＳ２６の処理は、実施例１と同様である。図１９を実施例１の図８と比較した場合に、判断ステップＳ２１とＳ２３の判断順序が相違しているが、要するにエラー数が閾値２以上閾値３未満であるときの処理として、ステップＳ５０、Ｓ５１が追加された点でのみ相違する。
【０１２９】
これにより、エラー数が閾値２以上閾値３未満であるときの処理としてステップＳ５０において、メモリコントローラ３０Ｃ内のブロック管理部３１Ｃは、ＲＡＭ５０Ｃからエラーカウント情報５４を読み出し、エラーが発生したブロックと一致する物理ブロック番号５４ａのエラーカウント値５４ｂを１つ加算する。
【０１３０】
ステップＳ５１において、ブロック管理部３１ＣはステップＳ５０で加算したエラーカウント値５４ｂが閾値４以上であるか判断する。エラーカウント値５４ｂが閾値４以上であればステップＳ２２の処理に移り、閾値４未満であればブロック交替処理を終了する。
【０１３１】
実施例４における記憶装置１０Ｃの空きブロックへのデータ移動処理は、実施例１における記憶装置１０と同様である。
【０１３２】
以上で説明した実施例４では、要するに実施例１において空きブロックの数が閾値１以上であり、読み出したデータに閾値２以上閾値３未満のエラーが含まれる場合に、当該データのエラー回数をカウントし、エラーカウント値が閾値４以上となった場合に消耗ブロック６２として使用するものであり、これにより次のような効果がある。
【０１３３】
記憶装置１０Ｃにおけるメモリコントローラ３０Ｃ内のブロック管理部３１Ｃは、データ読み出し時に閾値２以上閾値３未満のエラーが発生した場合には、該当ブロックのエラーカウント値５４ｂを加算する。そして、エラーカウント値５４ｂが閾値４以上のブロックを消耗ブロック管理テーブル５３に登録する。これにより、突発的なエラーのみが発生するデータブロック６０は継続して使用され、慢性的にエラーが発生するデータブロック６０は消耗ブロック６２となる。このため、１回のエラー発生数で判定する場合よりも判定精度が良くなり、記憶装置１０Ｃの稼働時間と信頼性の向上を両立できる。
【実施例５】
【０１３４】
本実施例では、稼働時間をより延長できると共に、信頼性を向上できる記憶装置の例を説明する。
【０１３５】
図２０は、実施例５におけるハードウェア構成図の例を示している。なお、実施例１におけるハードウェア構成図と同一の要素には、同一の符号を付与している。
【０１３６】
実施例５における記憶装置１０Ｄは、実施例１における記憶装置１０のメモリコントローラ３０とは異なるメモリコントローラ３０Ｄを有している。また、実施例５における記憶装置１０Ｄは、実施例１における記憶装置１０のＲＡＭ５０とは異なるＲＡＭ５０Ｄを有している。それ以外は、実施例５の記憶装置１０Ｄと実施例１の記憶装置１０は同様の構成となっている。
【０１３７】
実施例５のメモリコントローラ３０Ｄは、実施例１のメモリコントローラ３０におけるブロック管理部３１とは異なるブロック管理部３１Ｄを有している。それ以外は、実施例５のメモリコントローラ３０Ｄと実施例１のメモリコントローラ３０は同様の構成となっている。
【０１３８】
実施例５のＲＡＭ５０Ｄは、実施例１のＲＡＭ５０における論理／物理アドレス変換テーブル５１とは異なる論理／物理アドレス変換テーブル５１Ｄを有している。それ以外は、実施例５のＲＡＭ５０Ｄと実施例１のＲＡＭ５０は同様の構成となっている。
【０１３９】
図２１は、実施例５における論理／物理アドレス変換テーブル５１Ｄの構成図である。実施例５の論理／物理アドレス変換テーブル５１Ｄは、２つの物理アドレスと、有効フラグで構成される。物理アドレスＡ（５１ｅ）は、実施例１の論理／物理アドレス変換テーブル５１における物理アドレス５１ｂの代わりとなるものであり、他に物理アドレスＢ（５１ｉ）を有している。
【０１４０】
有効フラグＢ（５１ｈ）は、論理ページアドレス５１ａに対応する物理アドレスＢ（５１ｉ）が有効であるか表すものであり、有効である場合は「１」、無効である場合は「０」となる。
【０１４１】
物理アドレスＢ（５１ｉ）は、論理ページアドレス５１ａに対応する不揮発性メモリ４０の物理アドレスであり、物理アドレスＡ（５１ｅ）とは異なる物理アドレスを格納する。また、この物理アドレスＢ（５１ｉ）は、物理ブロック番号Ｂ（５１ｊ）と物理ページ番号Ｂ（５１ｋ）の組み合わせで構成される。
【０１４２】
図２２は、実施例５におけるデータ読み出し処理のフローチャートである。従って、実施例１における図７のデータ読み出し処理のフローチャートが図２２に置き換えられて処理されている。なお、実施例１におけるデータ読み出し処理のフローチャートと同一の要素には、同一の符号を記している。
【０１４３】
ステップＳ１０、ステップＳ１３からステップＳ１６、ステップＳ１８からステップＳ１９は、実施例１と同様の処理を行う。以下、図２２の処理に流れについて、順を追って説明する。
【０１４４】
まず、ステップＳ１０において、メモリコントローラ３０内のブロック管理部３１Ｄは、Ｉ／Ｆ制御部２０を介して命令処理装置３から読み出し対象の論理アドレスとデータサイズを受け取る。
【０１４５】
ステップＳ１１Ｄにおいて、メモリコントローラ３０Ｄ内のブロック管理部３１Ｄは、ステップＳ１０で命令処理装置３から受け付けた論理アドレスを論理ページアドレス５１ａに変換する。その後、ブロック管理部３１Ｄは、論理／物理アドレス変換テーブル５１Ｄを用いて、論理ページアドレス５１ａに対応する物理アドレスＡ（５１ｅ）を読み出す。
【０１４６】
ステップＳ１２Ｄにおいて、ブロック管理部３１Ｄは、ステップＳ１１Ｄで読み出した物理アドレスＡ（５１ｅ）からデータを読み出すように、不揮発性メモリ制御部３３に指示する。不揮発性メモリ制御部３３は、ブロック管理部３１Ｄからの指示に従い、不揮発性メモリ４０からデータを読み出す。
【０１４７】
ステップＳ１３において、不揮発性メモリ制御部３３は、ステップＳ１２Ｄで不揮発性メモリ４０から読み出したデータをエラー訂正回路３２に受け渡す。エラー訂正回路３２は、不揮発性メモリ制御部３３から受け取ったデータにエラーが含まれているかを判断する。
【０１４８】
このとき、データにエラーが含まれていればステップＳ１４の処理に移る。データにエラーが含まれていなければ、データをブロック管理部３１Ｄに転送した後、ステップＳ１９の処理に移る。
【０１４９】
ステップＳ１４において、エラー訂正回路３２は、データに含まれているエラーが訂正可能か判断する。訂正可能な場合にはステップＳ１５の処理に移り、訂正不可能な場合にはステップＳ６０の処理に移る。
【０１５０】
ステップＳ１５において、エラー訂正回路３２は、データ内のエラー訂正を行う。このとき、エラー訂正回路３２は、訂正後のデータをブロック管理部３１Ｄに転送すると共に、訂正したエラー数をブロック管理部３１Ｄに通知する。
【０１５１】
ステップＳ１６において、ブロック管理部３１Ｄは、Ｉ／Ｆ制御部２０を介して訂正後のデータを命令処理装置３に転送する。
【０１５２】
ステップＳ１７Ｄにおいて、ブロック管理部３１Ｄは、ブロック交替処理Ａを実施する。このブロック交替処理Ａについては、後記の図２４で詳しく説明する。
【０１５３】
他方ステップＳ１４において、訂正不可能とされたステップＳ６０の処理においては、ブロック管理部３１Ｄは、論理／物理アドレス変換テーブル５１Ｄの論理ページアドレス５１ａに対応する有効フラグＢ（５１ｈ）が「１：物理アドレスＢが有効」であるか判定する。有効フラグＢ（５１ｈ）が「１：物理アドレスＢが有効」であればステップＳ６１の処理を行い、「０：物理アドレスＢが無効」であればステップＳ１８の処理を行う。
【０１５４】
ステップＳ１８では、エラー訂正回路３２は、エラー訂正が不可能であることをブロック管理部３１Ｄに通知する。ブロック管理部３１Ｄは、エラー訂正回路３２からの通知を受けて、Ｉ／Ｆ制御部２０を介して命令処理装置３にデータ読み出しエラーを通知する。
【０１５５】
ステップＳ６１において、ブロック管理部３１Ｄは、物理アドレスＢからのデータ読み出しを実施する。この物理アドレスＢからのデータ読み出しは、後記の図２３で詳しく説明する。
【０１５６】
図２３は、実施例５における物理アドレスＢからのデータ読み出し処理のフローチャートである。なお、図２３における物理アドレスＢからのデータ読み出し処理は、実施例１における図７のデータ読み出し処理のフローチャートと基本的には同じ処理を実行することになる。実施例１におけるデータ読み出し処理のフローチャートと同一の要素には、同一の符号を記している。
【０１５７】
図２３の最初の処理であるステップＳ１１Ｅにおいて、メモリコントローラ３０Ｄ内のブロック管理部３１Ｄは、論理／物理アドレス変換テーブル５１Ｄを用いて、論理ページアドレス５１ａに対応する物理アドレスＢ（５１ｉ）を読み出す。
【０１５８】
ステップＳ１２Ｅにおいて、ブロック管理部３１Ｄは、ステップＳ１１Ｅで読み出した物理アドレスＢ（５１ｉ）からデータを読み出すように、不揮発性メモリ制御部３３に指示する。不揮発性メモリ制御部３３は、ブロック管理部３１Ｄの指示に従い、不揮発性メモリ４０からデータを読み出す。
【０１５９】
ステップＳ１３からステップＳ１６、ステップＳ１８からステップＳ１９は実施例１と同様の処理を行う。図２３のデータ読み出し処理のフローチャートが図７と相違する本質の点は、ブロック交替処理Ｂを採用した点である。
【０１６０】
ステップＳ１７Ｅにおいて、ブロック管理部３１Ｄは、ブロック交替処理Ｂを実施する。このブロック交替処理Ｂについては、後記の図２５で詳しく説明する。このように、実施例５では、２つのブロック交替処理を実行する。まず、図２４のブロック交替処理Ａを説明し、その後図２５のブロック交替処理Ｂを説明する。
【０１６１】
図２４は、実施例５、ステップＳ１７Ｄにおけるブロック交替処理Ａのフローチャートを示している。なお、実施例１、図８におけるブロック交替処理のフローチャートと同一の要素には、同一の符号を記している。
【０１６２】
ステップＳ２０からステップＳ２６の処理は、実施例１と同様である。
【０１６３】
まずステップＳ２０において、ブロック管理部３１Ｄは、空きブロック管理テーブル５２に登録されている空きブロック数が閾値１以上であるか判断する。空きブロック数が閾値１以上であればステップＳ２１の処理に移り、空きブロック数が閾値１未満であればステップＳ２５の処理に移る。
【０１６４】
なお図５に示したように、空きブロック管理テーブル５２の空きブロックエントリ番号５２ａに登録されている空きブロック６１は最大Ｃ個である。ここでは、このうち有効フラグ５２ｂの情報を参照して使用可能（データ「１」）な個数を抽出して、これを閾値１と比較している。
【０１６５】
ステップＳ２１において、ブロック管理部３１Ｄは、エラー訂正回路３２から通知されたエラー数が閾値２以上であるか判断する。エラー数が閾値２以上であればステップＳ７０の処理に移り、閾値２未満であればブロック交替処理Ａを終了する。
【０１６６】
ステップＳ７０では、ブロック管理部３１Ｄは、空きブロックＡへのデータ移動処理を実施する。この空きブロックＡへのデータ移動処理は、後記の図２６で詳しく説明する。
【０１６７】
空きブロックへのデータ移動後のステップＳ２３において、ブロック管理部３１Ｄは、エラー訂正回路３２から通知されたエラー数が閾値３以上であるか判断する。エラー数が閾値３以上であればブロック交替処理Ａを終了し、閾値３未満であればステップＳ２４の処理に移る。なお、閾値３は閾値２よりも大きい値である。
【０１６８】
ステップＳ２４において、ブロック管理部３１Ｄは、ＲＡＭ５０から消耗ブロック管理テーブル５３（図６）を読み出し、有効フラグ５３ｂが「０：消耗フラグとして使用不可」となっている消耗ブロックエントリ番号５３ａを検索する。そして、該当する消耗ブロックエントリ番号５３ａの物理ブロック番号５３ｃにエラーが発生したブロック番号を登録し、有効フラグ５３ｂを「１：消耗フラグとして使用可」に変更する。ステップＳ２４の処理完了後、ブロック管理部３１Ｄはブロック交替処理Ａを終了する。
【０１６９】
他方、ステップＳ２５において、ブロック管理部３１Ｄは、エラー訂正回路３２から通知されたエラー数が閾値３以上であるか判断する。エラー数が閾値３以上であればステップＳ７０の処理（空きブロックＡへのデータ移動処理）に移り、閾値３未満であればブロック交替処理を終了する。
【０１７０】
ステップＳ７０の空きブロックＡへのデータ移動処理は、前述したと同じ処理の実行であり、ここでの説明を省略する。
【０１７１】
続くステップＳ７１において、ブロック管理部３１Ｄは、論理／物理アドレス変換テーブル５１Ｄの論理ページアドレス５１ａに対応する有効フラグＢ（５１ｈ）が「０：物理アドレスＢが無効」か判定する。有効フラグＢ（５１ｈ）が「０：物理アドレスＢが無効」であればステップＳ７２の処理に移り、有効フラグＢ（５１ｈ）が「１：物理アドレスＢが有効」であればブロック交替処理Ａを終了する。
【０１７２】
ステップＳ７２において、ブロック管理部３１Ｄは、空きブロックＢへのデータ移動処理を実施する。この空きブロックＢへのデータ移動処理は、後記の図２７で詳しく説明する。
【０１７３】
ステップＳ２６では、ブロック管理部３１Ｄは、空きブロック補充処理を実施する。この空きブロック補充処理は、図１０で詳しく説明したとおりであり、ここでの説明を省略する。ステップＳ２６の処理完了後、ブロック管理部３１Ｄはブロック交替処理Ａを終了する。
【０１７４】
図２５は、実施例５におけるブロック交替処理Ｂのフローチャートである。なお、ブロック交替処理Ａと同一の要素には、同一の符号を記している。
【０１７５】
ステップＳ２５において、ブロック管理部３１Ｄは、エラー訂正回路３２から通知されたエラー数が閾値３以上であるか判断する。エラー数が閾値３以上であればステップＳ７２の処理に移り、閾値３未満であればステップＳ７０の処理に移る。
【０１７６】
ここでステップＳ７０およびステップＳ７２の処理は、実施例５のブロック交替処理Ａと同様である。要するに、エラー数が閾値３以上であれば空きブロックＢへのデータ移動処理、空きブロックＡへのデータ移動処理、空きブロックの補充を実行し、エラー数が閾値３未満であれば空きブロックＡへのデータ移動処理と空きブロックの補充を実行することになる。
【０１７７】
なおステップＳ２６の処理では、ブロック管理部３１Ｄは、空きブロック補充処理を実施する。この空きブロック補充処理は、図１０で詳しく説明したとおりである。
【０１７８】
図２６は、実施例５における空きブロックＡへのデータ移動処理のフローチャートである。なお、実施例１、図９における空きブロックへのデータ移動処理と同一の要素には、同一の符号を記している。
【０１７９】
まずステップＳ３０において、ブロック管理部３１Ｄは、ＲＡＭ５０から空きブロック管理テーブル５２（図５）を読み出し、有効フラグ５２ｂが「１：空きブロックとして使用可能」となっている空きブロックエントリ番号５２ａを１つ選択し、その物理ブロック番号５２ｃを取得する。ここで、空きブロックエントリ番号５２ａの選択方式は特に限定せず、例えばＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）のように登録が古いエントリから順に選択してもよい。
【０１８０】
ステップＳ３１において、ブロック管理部３１Ｄは、エラーが発生したデータブロック６０が保持するデータを、ステップＳ３０で選択した物理ブロック番号５２ｃにコピーするように、不揮発性メモリ制御部３３に指示する。不揮発性メモリ制御部３３は、ブロック管理部３１Ｄの指示に従い、選択したブロックへのデータコピーを実施する。また、データコピー完了後、ブロック管理部３１Ｄはエラーが発生したデータブロック６０のデータを消去するように、不揮発性メモリ制御部３３に指示を出す。不揮発性メモリ制御部３３は、ブロック管理部３１Ｄからの指示に従って該当ブロック内のデータを消去する。
【０１８１】
続いてステップＳ３２Ｄにおいて、ブロック管理部３１Ｄは、論理／物理アドレス変換テーブル５１Ｄにおいて、コピーしたデータの論理ページアドレス５１ａに対応する物理アドレスＡ（５１ｅ）を、コピー先である空きブロック６１の番号に更新する。
【０１８２】
最後にステップＳ３３において、ブロック管理部３１Ｄは、空きブロック管理テーブル５２（図５）において、ステップＳ３０で選択した空きブロックエントリ番号５２ａの有効フラグ５２ｂを「０：空きブロックとして使用不可能」に変更する。
【０１８３】
図２７は、実施例５における空きブロックＢへのデータ移動処理のフローチャートである。なお、実施例１における空きブロックへのデータ移動処理と同一の要素には、同一の符号を記している。
【０１８４】
この図でステップＳ３０からステップＳ３１、ステップＳ３３の処理は、図２５と同様であるので、ここではステップＳ３２Ｅのみ説明する。
【０１８５】
ステップＳ３２Ｅでは、ブロック管理部３１Ｄは、論理／物理アドレス変換テーブル５１Ｄにおいて、コピーしたデータの論理ページアドレス５１ａに対応する物理アドレスＢ（５１ｉ）を、コピー先である空きブロック６１の番号に更新する。また、論理ページアドレス５１ａに対応する有効フラグＢ（５１ｈ）を「１：物理アドレスＢが有効」に変更する。
【０１８６】
以上で説明した実施例５では、次のような効果がある。
【０１８７】
空きブロック管理テーブル５２内の空きブロック数が閾値１未満になった場合、消耗ブロック６２が空きブロック６１として補充される。そのため、空きブロック管理テーブル５２内には、元から空きブロック６１であった信頼性の高いブロックと元々が消耗ブロック６２である信頼性が低いブロックが混ざった状態となる。
【０１８８】
実施例５では、この状態になった場合、エラーが発生したデータブロック６０から空きブロック６１へデータを移動させる際に、２つの空きブロック６１に対して同じデータを保存している。このようにデータを二重化することで、信頼性の低いブロックをデータ移動先の空きブロック６１として選択した場合にも、移動したデータが失われる可能性を低減でき、記憶装置１０Ｄの信頼性を向上できる。
【実施例６】
【０１８９】
本実施例は、実施例５の変形例である。
【０１９０】
図２８は、実施例６におけるハードウェア構成図の例を示している。なお、実施例５におけるハードウェア構成図と同一の要素には、同一の符号を付与している。
【０１９１】
実施例６における記憶装置１０Ｅは、実施例５における記憶装置１０Ｄのメモリコントローラ３０Ｄとは異なるメモリコントローラ３０Ｅを有している。それ以外は、実施例６の記憶装置１０Ｅと実施例５の記憶装置１０Ｄは同様の構成となっている。
【０１９２】
実施例６のメモリコントローラ３０Ｅは、実施例５のメモリコントローラ３０Ｄにおけるブロック管理部３１Ｄとは異なるブロック管理部３１Ｅを有している。それ以外は、実施例６のメモリコントローラ３０Ｅと実施例５のメモリコントローラ３０Ｄは同様の構成となっている。
【０１９３】
実施例６におけるデータ読み出し動作は、実施例５と同様である。
【０１９４】
実施例６における物理アドレスＢからのデータ読み出し動作は、実施例５と同様である。
【０１９５】
図２９は、実施例６におけるブロック交替処理Ａのフローチャートを示している。なお、実施例５におけるブロック交替処理Ａのフローチャートと同一の要素には、同一の符号を記している。
【０１９６】
ステップＳ２０Ｄにおいて、ブロック管理部３１Ｅは、空きブロック管理テーブル５２に空きブロック６１が１つ以上登録されているか判定する。空きブロック６１が１つ以上登録されている場合にはステップＳ２１の処理を行い、登録されている空きブロック６１が無ければステップＳ２５の処理に移る。
【０１９７】
ステップＳ２１、ステップＳ２３からステップＳ２５、ステップＳ７０からステップＳ７１の処理は、実施例５と同様である。
【０１９８】
ステップＳ２１において、ブロック管理部３１Ｅは、エラー訂正回路３２から通知されたエラー数が閾値２以上であるか判断する。エラー数が閾値２以上であればステップＳ７０の処理に移り、閾値２未満であればブロック交替処理Ａを終了する。
【０１９９】
ステップＳ７０では、ブロック管理部３１Ｅは、空きブロックＡへのデータ移動処理を実施する。この空きブロックＡへのデータ移動処理は、図２６で説明したとおりである。
【０２００】
空きブロックへのデータ移動後のステップＳ２３において、ブロック管理部３１Ｅは、エラー訂正回路３２から通知されたエラー数が閾値３以上であるか判断する。エラー数が閾値３以上であればブロック交替処理Ａを終了し、閾値３未満であればステップＳ２４の処理に移る。なお、閾値３は閾値２よりも大きい値である。
【０２０１】
ステップＳ２４において、ブロック管理部３１Ｅは、ＲＡＭ５０から消耗ブロック管理テーブル５３（図６）を読み出し、有効フラグ５３ｂが「０：消耗フラグとして使用不可」となっている消耗ブロックエントリ番号５３ａを検索する。そして、該当する消耗ブロックエントリ番号５３ａの物理ブロック番号５３ｃにエラーが発生したブロック番号を登録し、有効フラグ５３ｂを「１：消耗フラグとして使用可」に変更する。ステップＳ２４の処理完了後、ブロック管理部３１Ｅはブロック交替処理Ａを終了する。
【０２０２】
他方、ステップＳ２５において、ブロック管理部３１Ｅは、エラー訂正回路３２から通知されたエラー数が閾値３以上であるか判断する。エラー数が閾値３以上であればステップＳ８０の処理（空きブロックへのデータ移動処理）に移り、閾値３未満であればブロック交替処理Ａを終了する。
【０２０３】
ステップＳ８０において、ブロック管理部３１Ｅは、消耗ブロックＡへのデータ移動処理を実施する。この消耗ブロックＡへのデータ移動処理は、後記の図３１で詳しく説明する。
【０２０４】
続くステップＳ７１において、ブロック管理部３１Ｅは、論理／物理アドレス変換テーブル５１Ｄの論理ページアドレス５１ａに対応する有効フラグＢ（５１ｈ）が「０：物理アドレスＢが無効」か判定する。有効フラグＢ（５１ｈ）が「０：物理アドレスＢが無効」であればステップＳ８１の処理に移り、有効フラグＢ（５１ｈ）が「１：物理アドレスＢが有効」であればブロック交替処理Ａを終了する。
【０２０５】
ステップＳ８１において、ブロック管理部３１Ｅは、消耗ブロックＢへのデータ移動処理を実施する。この消耗ブロックＢへのデータ移動処理は、後記の図３２で詳しく説明する。ステップＳ８１処理の完了後、ブロック管理部３１Ｅはブロック交替処理Ａを終了する。
【０２０６】
図３０は、実施例６におけるブロック交替処理Ｂのフローチャートである。なお、実施例６におけるブロック交替処理Ａと同一の要素には、同一の符号を記している。
【０２０７】
まずステップＳ２５において、ブロック管理部３１Ｅは、エラー訂正回路３２から通知されたエラー数が閾値３以上であるか判断する。エラー数が閾値３以上であればステップＳ８１の処理に移り、閾値３未満であればステップＳ８０の処理に移る。要するに、エラー数が閾値３以上であれば消耗ブロックＢと消耗ブロックＡにデータ移動し、エラー数が閾値３未満であれば消耗ブロックＡのみにデータ移動している。
【０２０８】
ステップＳ８０およびステップＳ８１の処理は、実施例６におけるブロック交替処理Ａと同様である。
【０２０９】
図３１は、実施例６における消耗ブロックＡへのデータ移動処理のフローチャートである。
【０２１０】
ステップＳ９０において、ブロック管理部３１Ｅは、ＲＡＭ５０Ｄから消耗ブロック管理テーブル５３を読み出し、有効フラグ５３Ｂが「１：物理アドレスＢが有効」となっている消耗ブロックエントリ番号５３ａを１つ選択し、その物理ブロック番号５３ｃを取得する。
【０２１１】
ステップＳ９１において、ブロック管理部３１Ｅは、エラーが発生したデータブロック６０が保持するデータを、ステップＳ９０で選択した物理ブロック番号５３ｃにコピーするように、不揮発性メモリ制御部３３に指示する。不揮発性メモリ制御部３３は、ブロック管理部３１Ｅの指示に従い、選択したブロックへのデータコピーを実施する。また、データコピー完了後、ブロック管理部３１Ｅはエラーが発生したデータブロック６０のデータを消去するように、不揮発性メモリ制御部３３に指示を出す。不揮発性メモリ制御部３３は、ブロック管理部３１Ｅからの指示に従って該当ブロック内のデータを消去する。
【０２１２】
ステップＳ９２において、ブロック管理部３１Ｅは、論理／物理アドレス変換テーブル５１Ｄにおいて、コピーしたデータの論理ページアドレス５１ａに対応する物理アドレスＡ（５１ｅ）を、コピー先である消耗ブロック６２の番号に更新する。
【０２１３】
ステップＳ９３において、ブロック管理部３１Ｅは、消耗ブロック管理テーブル５３において、ステップＳ８０で選択した消耗ブロックエントリ番号５３ａの有効フラグ５３Ｂを「０：物理アドレスＢが無効」に変更する。ステップＳ９３の処理が完了後、ブロック管理部３１Ｅは消耗ブロックＡへのデータ移動処理を完了する。
【０２１４】
図３２は、実施例６における消耗ブロックＢへのデータ移動処理のフローチャートである。なお、実施例６における消耗ブロックＡへのデータ移動処理のフローチャートと同一の要素には、同一の符号を付与している。
【０２１５】
ステップＳ９０、ステップＳ９１、ステップＳ９３の処理は、実施例６における消耗ブロックＡへのデータ移動処理と同様である。
【０２１６】
ステップＳ９４において、ブロック管理部３１Ｅは、論理／物理アドレス変換テーブル５１Ｄにおいて、コピーしたデータの論理ページアドレス５１ａに対応する物理アドレスＢ（５１ｉ）を、コピー先である消耗ブロック６２の番号に更新する。また、論理ページアドレス５１ａに対応する有効フラグＢ（５１ｈ）を「１：物理アドレスＢが有効」に変更する。
【０２１７】
以上で説明した実施例６では、次のような効果がある。
【０２１８】
ブロック管理に使用する閾値１の値を１に設定することで、ブロック管理部３１Ｅは、空きブロック６１が無くなるまでは消耗ブロック６２を使用しなくなる。消耗ブロック６２は、すでに閾値２以上のエラーが発生したブロックであるため、空きブロック６１よりも信頼性が低い。信頼性が低い消耗ブロック６２よりも空きブロック６１を先に使用することで、記憶装置１０Ｅの信頼性を高めることができる。
【０２１９】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明しているものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、またある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の一部について、他の構成の追加、削除、置換をすることが可能である。
【０２２０】
また、上記の各構成、機能、処理部、処理手段などは、それらの一部または全部を、例えば集積回路で設計するなどによりハードウェアで実現してもよい。また、上記の各構成、機能などは、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイルなどの情報は、メモリやハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）などの記録装置、またはＩＣカード、ＳＤカード、ＤＶＤなどの記録媒体に置くことができる。
【０２２１】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際にはほとんどすべての構成が相互に接続されていると考えてもよい。
【符号の説明】
【０２２２】
１：計算機
３：命令処理装置
１０、１０Ａ、１０Ｂ、１０Ｃ、１０Ｄ、１０Ｅ：記憶装置
３０、３０Ａ、３０Ｂ、３０Ｃ、３０Ｄ、３０Ｅ：メモリコントローラ
３４：閾値設定レジスタ
４０：不揮発性メモリ
５０、５０Ｂ、５０Ｃ、５０Ｄ：ＲＡＭ
５１、５１Ｄ：論理／物理アドレス変換テーブル
５２：空きブロック管理テーブル
５３、５３Ｂ：消耗ブロック管理テーブル
５４：エラーカウント情報
５４ｂ：エラーカウント値
６０：データブロック
６１：空きブロック
６２：消耗ブロック
【図１】
2013222236.tif 000003
【図２】
2013222236.tif 000004
【図３】
2013222236.tif 000005
【図４】
2013222236.tif 000006
【図５】
2013222236.tif 000007
【図６】
2013222236.tif 000008
【図７】
2013222236.tif 000009
【図８】
2013222236.tif 000010
【図９】
2013222236.tif 000011
【図１０】
2013222236.tif 000012
【図１１】
2013222236.tif 000013
【図１２】
2013222236.tif 000014
【図１３】
2013222236.tif 000015
【図１４】
2013222236.tif 000016
【図１５】
2013222236.tif 000017
【図１６】
2013222236.tif 000018
【図１７】
2013222236.tif 000019
【図１８】
2013222236.tif 000020
【図１９】
2013222236.tif 000021
【図２０】
2013222236.tif 000022
【図２１】
2013222236.tif 000023
【図２２】
2013222236.tif 000024
【図２３】
2013222236.tif 000025
【図２４】
2013222236.tif 000026
【図２５】
2013222236.tif 000027
【図２６】
2013222236.tif 000028
【図２７】
2013222236.tif 000029
【図２８】
2013222236.tif 000030
【図２９】
2013222236.tif 000031
【図３０】
2013222236.tif 000032
【図３１】
2013222236.tif 000033
【図３２】
2013222236.tif 000034