(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-10-18
(45)【発行日】2024-10-28
(54)【発明の名称】コンピュータ装置
(51)【国際特許分類】
G06F 11/14 20060101AFI20241021BHJP
G06F 12/00 20060101ALI20241021BHJP
G06F 12/06 20060101ALI20241021BHJP
【FI】
G06F11/14 610
G06F12/00 597U
G06F12/06 515Q
(21)【出願番号】P 2021046099
(22)【出願日】2021-03-19
【審査請求日】2023-12-15
(73)【特許権者】
【識別番号】000136136
【氏名又は名称】株式会社PFU
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】新井 明人
【審査官】坂庭 剛史
(56)【参考文献】
【文献】特表2007-520804(JP,A)
【文献】特開2011-243193(JP,A)
【文献】米国特許出願公開第2017/0315741(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/14
G06F 12/00
G06F 12/06
(57)【特許請求の範囲】
【請求項1】
バッファを有し、前記バッファに順に蓄えられる第一データをシーケンシャルに出力するシーケンサと、
フラッシュメモリにおけるデータ書き込み済みのブロックのうちの不良ブロックを示す情報が登録されるリストと、
前記フラッシュメモリに前記不良ブロックが発生したときに前記リストを更新し、前記リストに基づいて、前記不良ブロックに位置する第二データを前記フラッシュメモリの正常ブロックにコピーする命令を出力するコントローラと、
前記バッファに前記第一データが存在するときに前記第一データを選択する一方で、前記バッファに前記第一データが存在しないときに前記命令を選択するセレクタと、
前記セレクタで前記第一データが選択されたときは、前記第一データを前記フラッシュメモリに書き込む一方で、前記セレクタで前記命令が選択されたときは、前記命令に従って前記第二データを前記正常ブロックにコピーするインタフェースと、
を具備するコンピュータ装置。
【請求項2】
前記コントローラは、前記フラッシュメモリに前記不良ブロックが発生する度に、前記リストの末尾に新たな前記情報を順に登録することにより前記リストを更新し、前記リストにおける前記情報の登録順に前記命令を出力する、
請求項1に記載のコンピュータ装置。
【請求項3】
前記コントローラは、前記インタフェースによって前記第二データがコピーされている最中の前記正常ブロックが前記不良ブロックに遷移したときに、前記情報に含まれる、前記フラッシュメモリにおけるページ番号を昇順にして前記リストを更新する、
請求項1に記載のコンピュータ装置。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、コンピュータ装置に関する。
【背景技術】
【0002】
コンピュータ装置が有する不揮発性メモリとして、フラッシュメモリが用いられることがある。
【先行技術文献】
【特許文献】
【0003】
【文献】特開2005-216293号公報
【文献】特開2006-048893号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかし、フラッシュメモリは、化学的な変化により劣化が蓄積されていくという特性を持つため、フラッシュメモリでは、アクセス不可能な領域(以下では「アクセス不可能領域」と呼ぶことがある)を有するブロック(以下では「不良ブロック」と呼ぶことがある)が一定の確率で発生する。
【0005】
そこで、本開示では、フラッシュメモリで発生した不良ブロックによるコンピュータ装置の性能低下を防止できる技術を提案する。
【課題を解決するための手段】
【0006】
本開示のコンピュータ装置は、シーケンサと、リストと、コントローラと、セレクタと、インタフェースとを有する。前記シーケンサは、バッファを有し、前記バッファに順に蓄えられる第一データをシーケンシャルに出力する。前記リストには、フラッシュメモリにおけるデータ書き込み済みのブロックのうちの不良ブロックを示す情報が登録される。前記コントローラは、前記フラッシュメモリに前記不良ブロックが発生したときに前記リストを更新し、前記リストに基づいて、前記不良ブロックに位置する第二データを前記フラッシュメモリの正常ブロックにコピーする命令を出力する。前記セレクタは、前記バッファに前記第一データが存在するときに前記第一データを選択する一方で、前記バッファに前記第一データが存在しないときに前記命令を選択する。前記インタフェースは、前記セレクタで前記第一データが選択されたときは、前記第一データを前記フラッシュメモリに書き込む一方で、前記セレクタで前記命令が選択されたときは、前記命令に従って前記第二データを前記正常ブロックにコピーする。
【発明の効果】
【0007】
開示の技術によれば、フラッシュメモリで発生した不良ブロックによるコンピュータ装置の性能低下を防止できる。
【図面の簡単な説明】
【0008】
【
図1】
図1は、本開示の実施例のコンピュータ装置の構成例を示す図である。
【
図2】
図2は、本開示の実施例のセレクタの動作例を示す図である。
【
図3】
図3は、本開示の実施例のコンピュータ装置の動作例1を示す図である。
【
図4】
図4は、本開示の実施例のコンピュータ装置の動作例1を示す図である。
【
図5】
図5は、本開示の実施例のコンピュータ装置の動作例1を示す図である。
【
図6】
図6は、本開示の実施例のコンピュータ装置の動作例1を示す図である。
【
図7】
図7は、本開示の実施例のコンピュータ装置の動作例1を示す図である。
【
図8】
図8は、本開示の実施例のコンピュータ装置の動作例1を示す図である。
【
図9】
図9は、本開示の実施例のコンピュータ装置の動作例1を示す図である。
【
図10】
図10は、本開示の実施例のコンピュータ装置の動作例1を示す図である。
【
図11】
図11は、本開示の実施例のコンピュータ装置の動作例1を示す図である。
【
図12】
図12は、本開示の実施例のコンピュータ装置の動作例1を示す図である。
【
図13】
図13は、本開示の実施例のコンピュータ装置の動作例1を示す図である。
【
図14】
図14は、本開示の実施例のコンピュータ装置の動作例1を示す図である。
【
図15】
図15は、本開示の実施例のコンピュータ装置の動作例2を示す図である。
【
図16】
図16は、本開示の実施例のコンピュータ装置の動作例2を示す図である。
【
図17】
図17は、本開示の実施例のコンピュータ装置の動作例2を示す図である。
【
図18】
図18は、本開示の実施例のコンピュータ装置の動作例2を示す図である。
【
図19】
図19は、本開示の実施例のコンピュータ装置の動作例2を示す図である。
【
図20】
図20は、本開示の実施例のコンピュータ装置の動作例2を示す図である。
【
図21】
図21は、本開示の実施例のコンピュータ装置の動作例2を示す図である。
【
図22】
図22は、本開示の実施例のコンピュータ装置の動作例2を示す図である。
【
図23】
図23は、本開示の実施例のコンピュータ装置の動作例2を示す図である。
【
図24】
図24は、本開示の実施例のコンピュータ装置の動作例2を示す図である。
【
図25】
図25は、本開示の実施例のコンピュータ装置の動作例2を示す図である。
【
図26】
図26は、本開示の実施例のコンピュータ装置の動作例2を示す図である。
【
図27】
図27は、本開示の実施例のコンピュータ装置の動作例3を示す図である。
【
図28】
図28は、本開示の実施例のコンピュータ装置の動作例3を示す図である。
【
図29】
図29は、本開示の実施例のコンピュータ装置の動作例3を示す図である。
【
図30】
図30は、本開示の実施例のコンピュータ装置の動作例3を示す図である。
【
図31】
図31は、本開示の実施例のコンピュータ装置の動作例3を示す図である。
【
図32】
図32は、本開示の実施例のコンピュータ装置の動作例3を示す図である。
【
図33】
図33は、本開示の実施例のコンピュータ装置の動作例3を示す図である。
【
図34】
図34は、本開示の実施例のコンピュータ装置の動作例3を示す図である。
【
図35】
図35は、本開示の実施例のコンピュータ装置の動作例3を示す図である。
【
図36】
図36は、本開示の実施例のコンピュータ装置の動作例3を示す図である。
【
図37】
図37は、本開示の実施例のコンピュータ装置の動作例3を示す図である。
【
図38】
図38は、本開示の実施例のコンピュータ装置の動作例3を示す図である。
【
図39】
図39は、本開示の実施例のコンピュータ装置の動作例3を示す図である。
【
図40】
図40は、本開示の実施例のコンピュータ装置における処理手順の一例を示すフローチャートである。
【
図41】
図41は、本開示の実施例のコンピュータ装置における処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【0009】
以下、本開示の実施例を図面に基づいて説明する。図面において同一の構成には同一の符号を付す。
【0010】
[実施例]
<コンピュータ装置の構成>
図1は、本開示の実施例のコンピュータ装置の構成例を示す図である。
図1において、コンピュータ装置1は、CPU(Central Processing Unit)11と、シーケンサ12と、不良ブロックリスト14と、コントローラ15と、セレクタ16と、コンバータ17と、メモリインタフェース18と、フラッシュメモリ19とを有する。シーケンサ12は、バッファ13を有する。シーケンサ12、不良ブロックリスト14、コントローラ15、セレクタ16、及び、コンバータ17は、例えば、FPGA(Field Programmable Gate Array)、ASIC(Application Specific Integrated Circuit)等の集積回路により実現される。
【0011】
フラッシュメモリ19は複数のブロックを有し、複数のブロックの各々は複数のページを有する。例えば、フラッシュメモリ19の記憶容量が64MBである場合、フラッシュメモリ19には、各々が128KBである512個のブロック0~511が含まれ、各ブロックには、各々が2KBである64個のページ0~63が含まれる。
【0012】
CPU11は、データを生成し、生成したデータをシーケンサ12へ出力する。CPU11からシーケンサ12に入力されたデータは、入力順にバッファ13に蓄えられる。
【0013】
シーケンサ12は、バッファ13に蓄えられているデータをバッファ13への入力順にシーケンシャルにセレクタ16へ出力する。以下では、シーケンサ12から出力されたデータを「書込対象データ」と呼ぶことがある。シーケンサ12は、書込対象データとともに、データをフラッシュメモリ19に書き込む命令(以下では「書込命令」と呼ぶことがある)と、フラッシュメモリ19における書き込み先の論理ブロックを示す番号(以下では「書込先論理ブロック番号」と呼ぶことがある)と、フラッシュメモリ19における書き込み先のページを示す番号(以下では「書込先ページ番号」と呼ぶことがある)とをセレクタ16へ出力する。また、シーケンサ12は、書込先論理ブロック番号と書込先ページ番号とをコントローラ15へ出力する。
【0014】
不良ブロックリスト14には、フラッシュメモリ19におけるデータ書き込み済みのブロックのうちの不良ブロックを示す情報が登録される。
【0015】
コントローラ15は、フラッシュメモリ19に不良ブロックが発生したときに不良ブロックリスト14を更新する。また、コントローラ15は、不良ブロックリスト14に基づいて、フラッシュメモリ19において不良ブロックに位置するデータ(以下では「退避対象データ」と呼ぶことがある)を、アクセス不可能領域を有しないブロック(以下では「正常ブロック」と呼ぶことがある)にコピーする命令(以下では「コピー命令」と呼ぶことがある)をセレクタ16へ出力する。コントローラ15は、不良ブロックリスト14に基づいて、コピー命令とともに、コピー先の論理ブロックを示す番号(以下では「コピー先論理ブロック番号」と呼ぶことがある)と、退避対象データが存在するページを示す番号(以下では「退避対象データページ番号」と呼ぶことがある)とをセレクタ16へ出力する。コントローラ15は、不良ブロックのブロック番号をコピー先論理ブロック番号としてセレクタ16へ出力する。
【0016】
セレクタ16は、バッファ13にデータが存在するか否かを常に監視する。セレクタ16は、バッファ13にデータが存在するときは、書込対象データ及びコピー命令のうち書込対象データを選択し、選択した書込対象データを、書込命令、書込先論理ブロック番号及び書込先ページ番号とともにコンバータ17へ出力する。一方で、バッファ13にデータが存在しないときは、セレクタ16は、書込対象データ及びコピー命令のうちコピー命令を選択し、選択したコピー命令を、コピー先論理ブロック番号及び退避対象データページ番号とともにコンバータ17へ出力する。
【0017】
コンバータ17は、論理ブロック番号と物理ブロック番号との対応付け(以下では「ブロック番号対応付け」と呼ぶことがある)を示すテーブル(以下では「変換テーブル」と呼ぶことがある)を有し、変換テーブルに従って論理ブロック番号を物理ブロック番号に変換する。コンバータ17は、セレクタ16で書込対象データが選択されたときは、書込対象データ、書込命令、フラッシュメモリ19における書き込み先の物理ブロックを示す番号(以下では「書込先物理ブロック番号」と呼ぶことがある)及び書込先ページ番号をメモリインタフェース18へ出力するとともに、書込先物理ブロック番号及び書込先ページ番号をコントローラ15へ出力する。一方で、セレクタ16でコピー命令が選択されたときは、コンバータ17は、コピー命令、フラッシュメモリ19におけるコピー先の物理ブロックを示す番号(以下では「コピー先物理ブロック番号」と呼ぶことがある)及び退避対象データページ番号をメモリインタフェース18へ出力するとともに、コピー先物理ブロック番号及び退避対象データページ番号をコントローラ15へ出力する。
【0018】
メモリインタフェース18は、セレクタ16で書込対象データが選択されたときは、書込命令に従って、書込対象データをフラッシュメモリ19に書き込む。メモリインタフェース18は、書込対象データをフラッシュメモリ19に書き込むときは、書込先物理ブロック番号及び書込先ページ番号によって示される領域に書込対象データを書き込む。一方で、セレクタ16でコピー命令が選択されたときは、メモリインタフェース18は、コピー命令に従って、フラッシュメモリ19において退避対象データを正常ブロックにコピーする。メモリインタフェース18は、退避対象データを正常ブロックにコピーするときは、コピー先物理ブロック番号及び退避対象データページ番号によって示される領域に退避対象データをコピーする。メモリインタフェース18は、書込対象データの書き込み、及び、退避対象データのコピーをページ単位で行う。
【0019】
また、メモリインタフェース18は、書込対象データの書き込み、及び、退避対象データのコピーが成功したか否かを示すフラグ(以下では「成否フラグ」と呼ぶことがある)を、書込対象データの書き込み及び退避対象データのコピーを行う度に、コントローラ15へ出力する。書込対象データの書き込み及び退避対象データのコピーが成功したときは(つまり、書込対象データの書き込み及び退避対象データのコピーにエラーが発生していないときは)、成否フラグが“0”にセットされ、書込対象データの書き込み及び退避対象データのコピーが失敗したときは(つまり、書込対象データの書き込み及び退避対象データのコピーにエラーが発生したときは)、成否フラグが“1”にセットされる。
【0020】
コントローラ15は、メモリインタフェース18から入力された成否フラグが“1”にセットされているときに、フラッシュメモリ19に不良ブロックが発生したと判定し、不良ブロックリスト14を更新する。また、コントローラ15は、メモリインタフェース18から入力された成否フラグが“1”にセットされているときに、フラッシュメモリ19におけるコピー元の物理ブロックを示す番号(以下では「コピー元物理ブロック番号」と呼ぶことがある)と、フラッシュメモリ19における正常ブロックの物理ブロック番号(以下では「正常ブロック番号」と呼ぶことがある)とをメモリインタフェース18へ出力するとともに、コンバータ17が有する変換テーブルにおけるブロック番号対応付けを更新する。
【0021】
フラッシュメモリ19は常にシーケンシャルアクセスされ、ランダムアクセスされることはない。
【0022】
<セレクタの動作>
図2は、本開示の実施例のセレクタの動作例を示す図である。
図2における“Bn-pm”において“n”は書込先論理ブロック番号を示し、“m”は書込先ページ番号を示す。よって例えば、
図2における“B0-p60”は、書込先論理ブロック番号“0”,書込先ページ番号“60”のデータを表す。
【0023】
図2において、バッファ13に蓄えられているデータB0-p60,B0-p61,B0-p62,B0-p63,B1-p0,B1-p1,B1-p2,B1-p3の各々が、時刻ta,tb,tc,td,te,tf,tg,thの各々でシーケンサ12からセレクタ16へ書込対象データとして出力される。
【0024】
セレクタ16は、コンバータ17への書込対象データB0-p60の出力が完了した時刻t1でバッファ13にデータB0-p61が存在するため、時刻tbでは書込対象データB0-p61を選択する。
【0025】
また、セレクタ16は、コンバータ17への書込対象データB0-p61の出力が完了した時刻t2でバッファ13にデータB0-p62が存在するため、時刻tcでは書込対象データB0-p62を選択する。
【0026】
また、セレクタ16は、コンバータ17への書込対象データB0-p62の出力が完了した時刻t3でバッファ13にデータB0-p63が存在するため、時刻tdでは書込対象データB0-p63を選択する。
【0027】
また、セレクタ16は、コンバータ17への書込対象データB0-p63の出力が完了した時刻t4でバッファ13にデータが存在しないため、時刻t4ではコピー命令を選択する。
【0028】
また、セレクタ16は、コンバータ17へのコピー命令の出力が完了した時刻t5でバッファ13にデータが存在しないため、時刻t5ではコピー命令を選択する。
【0029】
また、セレクタ16は、コンバータ17へのコピー命令の出力が完了した時刻t6でバッファ13にデータB1-p0が存在するため、時刻teでは書込対象データB1-p0を選択する。
【0030】
また、セレクタ16は、コンバータ17への書込対象データB1-p0の出力が完了した時刻t7でバッファ13にデータB1-p1が存在するため、時刻tfでは書込対象データB1-p1を選択する。
【0031】
また、セレクタ16は、コンバータ17への書込対象データB1-p1の出力が完了した時刻t8でバッファ13にデータが存在しないため、時刻t8ではコピー命令を選択する。
【0032】
また、セレクタ16は、コンバータ17へのコピー命令の出力が完了した時刻t9でバッファ13にデータB1-p2が存在するため、時刻tgでは書込対象データB1-p2を選択する。
【0033】
また、セレクタ16は、コンバータ17への書込対象データB1-p2の出力が完了した時刻t10でバッファ13にデータB1-p3が存在するため、時刻thでは書込対象データB1-p3を選択する。
【0034】
このように、セレクタ16は、バッファ13にデータが存在するときは、書込対象データ及びコピー命令のうち書込対象データを選択する一方で、バッファ13にデータが存在しないときは、書込対象データ及びコピー命令のうちコピー命令を選択する。つまり、セレクタ16は、シーケンサ12からの書込対象データの出力が途切れる隙間時間を利用してコピー命令をコンバータ17へ出力する。
【0035】
<コンピュータ装置の動作>
図3~14は、本開示の実施例のコンピュータ装置の動作例1を示す図であり、
図15~26は、本開示の実施例のコンピュータ装置の動作例2を示す図であり、
図27~39は、本開示の実施例のコンピュータ装置の動作例3を示す図である。以下、コンピュータ装置1の動作例について、動作例1~3に分けて説明する。
【0036】
以下の説明では、コンバータ17が有する変換テーブルにおけるブロック番号対応付けを“論理ブロック番号:物理ブロック番号”として示すことがある。例えば、“1:1”であるブロック番号対応付けは、論理ブロック番号“1”に物理ブロック番号“1”が対応することを示し、“1:128”であるブロック番号対応付けは、論理ブロック番号“1”に物理ブロック番号“128”が対応することを示す。よって、コンバータ17は、例えば、ブロック番号対応付けが“1:1”であるときは論理ブロック番号“1”を物理ブロック番号“1”に変換し、ブロック番号対応付けが“1:128”であるときは論理ブロック番号“1”を物理ブロック番号“128”に変換する。
【0037】
また、以下の説明では、各データを“Bx-py”の形式で示し、“Bx-py”において“x”が論理ブロック番号を表し、“y”がページ番号を表すものとする。
【0038】
また、以下の説明では、不良ブロックリスト14において連続する各行を行lz(z=1,2,3,…)と表し、行l1を先頭の行(1行目の行)とする。また、不良ブロックリスト14は、FIFO(First In First Out)に従って制御され、新たなデータが不良ブロックリスト14に追加されるときは不良ブロックリスト14の末尾に追加され、不良ブロックリスト14からのデータの削除は不良ブロックリスト14の先頭のデータから順に行われる。不良ブロックリスト14は、データの追加、削除またはソートにより更新される。以下では、不良ブロックリスト14における各行のデータを「リストデータ」と呼ぶことがある。
【0039】
また、以下では、1ブロックが64個のページで形成される場合を一例に挙げて説明する。
【0040】
<動作例1(
図3~14)>
図3において、変換テーブルにおけるブロック番号対応付けが“1:1”である状態で、メモリインタフェース18は、番号“1”の物理ブロックへの書込対象データB1-p0~B1-p52の書き込みに成功した後、番号“1”の物理ブロックへの書込対象データB1-p53の書き込みに失敗した時点で、“1”にセットした成否フラグをコントローラ15へ出力する。番号“1”の物理ブロックへの書込対象データB1-p53の書き込みが失敗した時点で、番号“1”の物理ブロックは正常ブロックから不良ブロックに遷移し、書き込みが成功した書込対象データB1-p0~B1-p52は退避対象データになる。
【0041】
図4に示すように、不良ブロックリスト14には、不良ブロックの論理ブロックを示す「論理ブロック番号」と、不良ブロックの物理ブロックを示す「物理ブロック番号」と、不良ブロックに書き込み済みのデータの開始ページを示す「開始ページ番号」と、不良ブロックに書き込み済みのデータの終了ページを示す「終了ページ番号」とから形成されるリストデータLDが登録される。
【0042】
コントローラ15は、メモリインタフェース18から入力された成否フラグが“1”であるため、
図4に示すように、不良ブロックリスト14の行l1にリストデータLD11を追加する。リストデータLD11は、書き込みが成功した書込対象データB1-p0~B1-p52の書込先論理ブロック番号の“1”を論理ブロック番号として有し、書き込みが成功した書込対象データB1-p0~B1-p52の書込先物理ブロック番号の“1”を物理ブロック番号として有し、書き込みが成功した書込対象データB1-p0~B1-p52の最初の書込先ページ番号の“0”を開始ページ番号として有し、書き込みが成功した書込対象データB1-p0~B1-p52の最後の書込先ページ番号の“52”を終了ページ番号として有する。また、コントローラ15は、正常ブロック番号“128”をメモリインタフェース18へ出力する。メモリインタフェース18は、コントローラ15から入力された正常ブロック番号“128”に従って、番号“1”の物理ブロックへの書き込みに失敗した書込対象データB1-p53を番号“128”の物理ブロックに書き込む。また、コントローラ15は、変換テーブルにおけるブロック番号対応付けを“1:1”から“1:128”に更新する。
【0043】
次いで、
図5において、変換テーブルにおけるブロック番号対応付けが“1:128”である状態で、メモリインタフェース18は、番号“128”の物理ブロックへの書込対象データB1-p53~B1-p56の書き込みに成功した後、番号“128”の物理ブロックへの書込対象データB1-p57の書き込みに失敗した時点で、“1”にセットした成否フラグをコントローラ15へ出力する。番号“128”の物理ブロックへの書込対象データB1-p57の書き込みが失敗した時点で、番号“128”の物理ブロックは正常ブロックから不良ブロックに遷移し、書き込みが成功した書込対象データB1-p0~B1-p52に加えて、書き込みが成功した書込対象データB1-p53~B1-p56も退避対象データになる。
【0044】
コントローラ15は、メモリインタフェース18から入力された成否フラグが“1”であるため、
図6に示すように、不良ブロックリスト14の行l2にリストデータLD12を追加する。リストデータLD12は、書き込みが成功した書込対象データB1-p53~B1-p56の書込先論理ブロック番号の“1”を論理ブロック番号として有し、書き込みが成功した書込対象データB1-p53~B1-p56の書込先物理ブロック番号の“128”を物理ブロック番号として有し、書き込みが成功した書込対象データB1-p53~B1-p56の最初の書込先ページ番号の“53”を開始ページ番号として有し、書き込みが成功した書込対象データB1-p53~B1-p56の最後の書込先ページ番号の“56”を終了ページ番号として有する。また、コントローラ15は、正常ブロック番号“130”をメモリインタフェース18へ出力する。メモリインタフェース18は、コントローラ15から入力された正常ブロック番号“130”に従って、番号“128”の物理ブロックへの書き込みに失敗した書込対象データB1-p57を番号“130”の物理ブロックに書き込む。また、コントローラ15は、変換テーブルにおけるブロック番号対応付けを“1:128”から“1:130”に更新する。
【0045】
次いで、
図7において、変換テーブルにおけるブロック番号対応付けが“1:130”である状態で、メモリインタフェース18は、番号“130”の物理ブロックへの書込対象データB1-p57~B1-p63の書き込みに成功する。ページ番号“63”は各ブロックの最終ページを示すため、コントローラ15は、番号“130”の物理ブロックへの書込対象データB1-p63の書き込みが成功したことを示す成否フラグ“0”がメモリインタフェース18から入力された時点で、
図8に示すように、不良ブロックリスト14の行l3にリストデータLD13を追加する。リストデータLD13は、書き込みが成功した書込対象データB1-p57~B1-p63の書込先論理ブロック番号の“1”を論理ブロック番号として有し、書き込みが成功した書込対象データB1-p57~B1-p63の書込先物理ブロック番号の“130”を物理ブロック番号として有し、書き込みが成功した書込対象データB1-p57~B1-p63の最初の書込先ページ番号の“57”を開始ページ番号として有し、書き込みが成功した書込対象データB1-p57~B1-p63の最後の書込先ページ番号の“63”を終了ページ番号として有する。
【0046】
また、ページ番号“63”は各ブロックの最終ページを示すため、コントローラ15は、不良ブロックリスト14へのリストデータLD13の追加後に、コピー命令C11と、リストデータLD11の論理ブロック番号と同一であるコピー先論理ブロック番号“1”と、リストデータLD11の開始ページ番号及び終了ページ番号に対応する退避対象データページ番号“0~52”とを対応付けてセレクタ16へ出力するとともに、リストデータLD11の物理ブロック番号と同一であるコピー元物理ブロック番号“1” をコピー命令C11と対応付けてメモリインタフェース18へ出力する。また、コントローラ15は、コピー命令C11の出力後に、コピー命令C12と、リストデータLD12の論理ブロック番号と同一であるコピー先論理ブロック番号“1”と、リストデータLD11の開始ページ番号及び終了ページ番号に対応する退避対象データページ番号“53~56”とを対応付けてセレクタ16へ出力するとともに、リストデータLD12の物理ブロック番号と同一であるコピー元物理ブロック番号“128” をコピー命令C12と対応付けてメモリインタフェース18へ出力する。
【0047】
セレクタ16が
図2に示すような動作によってコピー命令C11,C12を選択する時点では、変換テーブルにおけるブロック番号対応付けが既に“1:130”に更新済みである。このため、コントローラ15からコピー命令C11,C12とともに出力されたコピー先論理ブロック番号“1”はコンバータ17によってコピー先物理ブロック番号“130”に変換される。よって、コピー命令C11は、コピー先物理ブロック番号“130”及び退避対象データページ番号“0~52”とともにメモリインタフェース18に入力され、コピー命令C12は、コピー先物理ブロック番号“130”及び退避対象データページ番号“53~56”とともにメモリインタフェース18に入力される。
【0048】
不良ブロックリスト14が
図9に示す状態である場合に、メモリインタフェース18は、コンバータ17からコピー命令C11を入力された時点で、コピー命令C11に従って、
図10に示すように、コピー命令C11にそれぞれ対応するコピー元物理ブロック番号“1”と退避対象データページ番号“0~52”とによって特定されるコピー元領域に存在する退避対象データB1-p0~B1-p52を、コピー命令C11にそれぞれ対応するコピー先物理ブロック番号“130”と退避対象データページ番号“0~52”とによって特定されるコピー先領域にコピーする。コントローラ15は、番号“130”の物理ブロックへの退避対象データB1-p0~B1-p52のコピーに成功したことを示す成否フラグ“0”がメモリインタフェース18から入力された時点で、
図9に示す不良ブロックリスト14の行l1に存在するリストデータLD11を削除する。リストデータLD11が削除されたことにより、
図11に示すように、不良ブロックリスト14において、行l1にはリストデータLD12が存在し、行l2にはリストデータLD13が存在することになる。
【0049】
また、不良ブロックリスト14が
図11に示す状態である場合に、メモリインタフェース18は、コンバータ17からコピー命令C12を入力された時点で、コピー命令C12に従って、
図12に示すように、コピー命令C12にそれぞれ対応するコピー元物理ブロック番号“128”と退避対象データページ番号“53~56”とによって特定されるコピー元領域に存在する退避対象データB1-p53~B1-p56を、コピー命令C12にそれぞれ対応するコピー先物理ブロック番号“130”と退避対象データページ番号“53~56”とによって特定されるコピー先領域にコピーする。コントローラ15は、番号“130”の物理ブロックへの退避対象データB1-p53~B1-p56のコピーに成功したことを示す成否フラグ“0”がメモリインタフェース18から入力された時点で、
図11に示す不良ブロックリスト14の行l1に存在するリストデータLD12を削除する。リストデータLD12が削除されたことにより、
図13に示すように、不良ブロックリスト14の行l1にリストデータLD13が存在することになる。
【0050】
番号“130”の物理ブロックへの退避対象データB1-p0~B1-p56のコピーが成功すると、
図14に示すように、退避対象データB1-p0~B1-p56と書込対象データB1-p57~B1-p63とが番号“130”の同一の物理ブロックに記憶される。
【0051】
そして、コントローラ15は、
図13に示す不良ブロックリスト14の行l1に存在するリストデータLD13における物理ブロック番号“130”と、コピー命令C12に対応するコピー先物理ブロック番号“130”とが同一である、つまり、コピー元物理ブロック番号とコピー先物理ブロック番号とが同一であるため、番号“130”の物理ブロックに記憶された書込対象データB1-p57~B1-p63のコピーは行わずに、不良ブロックリスト14の行l1に存在するリストデータLD13を削除する。
【0052】
以上、動作例1について説明した。
【0053】
<動作例2(
図15~26)>
図15に示すように、フラッシュメモリ19において、物理ブロック番号“1”の不良ブロックには退避対象データB1-p0~B1-p32が存在し、物理ブロック番号“128”の不良ブロックには退避対象データB1-p33~B1-p52が存在し、物理ブロック番号“129”の不良ブロックには退避対象データB1-p53~B1-p56が存在し、物理ブロック番号“130”の正常ブロックには書込対象データB1-p57~B1-p63が存在する。
【0054】
不良ブロックリスト14が
図16に示す状態である場合に、メモリインタフェース18は、コンバータ17からリストデータLD21に基づくコピー命令C21を入力された時点で、コピー命令C21に従って、
図15に示すように、コピー命令C21にそれぞれ対応するコピー元物理ブロック番号“1”と退避対象データページ番号“0~32”とによって特定されるコピー元領域に存在する退避対象データB1-p0~B1-p32を、コピー命令C21にそれぞれ対応するコピー先物理ブロック番号“130”と退避対象データページ番号“0~32”とによって特定されるコピー先領域にコピーする。コントローラ15は、番号“130”の物理ブロックへの退避対象データB1-p0~B1-p32のコピーに成功したことを示す成否フラグ“0”がメモリインタフェース18から入力された時点で、
図16に示す不良ブロックリスト14の行l1に存在するリストデータLD21を削除する。リストデータLD21が削除されたことにより、
図17に示すように、不良ブロックリスト14において、行l1にはリストデータLD22が存在し、行l2にはリストデータLD23が存在し、行l3にはリストデータLD24が存在することになる。
【0055】
また、不良ブロックリスト14が
図17に示す状態である場合に、メモリインタフェース18は、コンバータ17からリストデータLD22に基づくコピー命令C22を入力された時点で、コピー命令C22に従って、
図18に示すように、コピー命令C22にそれぞれ対応するコピー元物理ブロック番号“128”と退避対象データページ番号“33~52”とによって特定されるコピー元領域に存在する退避対象データB1-p33~B1-p52を、コピー命令C22にそれぞれ対応するコピー先物理ブロック番号“130”と退避対象データページ番号“33~52”とによって特定されるコピー先領域にコピーする。コントローラ15は、番号“130”の物理ブロックへの退避対象データB1-p33~B1-p52のコピーに成功したことを示す成否フラグ“0”がメモリインタフェース18から入力された時点で、
図17に示す不良ブロックリスト14の行l1に存在するリストデータLD22を削除する。リストデータLD22が削除されたことにより、不良ブロックリスト14には、行l1のリストデータLD23と、行l2のリストデータLD24とが存在することになる。
【0056】
不良ブロックリスト14において、行l1にリストデータLD23が存在し、行l2にリストデータLD24が存在する状態で、メモリインタフェース18は、コンバータ17からリストデータLD23に基づくコピー命令C23を入力された時点で、コピー命令C23に従って、
図19に示すように、コピー命令C23にそれぞれ対応するコピー元物理ブロック番号“129”と退避対象データページ番号“53~56”とによって特定されるコピー元領域に存在する退避対象データB1-p53~B1-p56を、コピー命令C23にそれぞれ対応するコピー先物理ブロック番号“130”と退避対象データページ番号“53~56”とによって特定されるコピー先領域にコピーする。しかし、メモリインタフェース18は、番号“130”の物理ブロックへの退避対象データB1-p53~B1-p56のコピーに失敗する。
【0057】
そこで、メモリインタフェース18は、番号“130”の物理ブロックへの退避対象データB1-p53~B1-p56のコピーに失敗に失敗した時点で、“1”にセットした成否フラグをコントローラ15へ出力する。番号“130”の物理ブロックへの退避対象データB1-p53~B1-p56のコピーが失敗した時点で、番号“130”の物理ブロックは正常ブロックから不良ブロックに遷移し、番号“130”の物理ブロックへのコピーが成功した退避対象データB1-p0~B1-p52と、番号“130”の物理ブロックへの書き込みが成功した書込対象データB1-p57~B1-p63とが新たな退避対象データになる。また、コントローラ15は、変換テーブルにおけるブロック番号対応付けを“1:130”から“1:131”に更新する。
【0058】
コントローラ15は、メモリインタフェース18から入力された成否フラグが“1”であるため、
図20に示すように、不良ブロックリスト14の行l3にリストデータLD25を追加する。リストデータLD25は、コピーが成功した退避対象データB1-p0~B1-p52のコピー先論理ブロック番号の“1”を論理ブロック番号として有し、コピーが成功した退避対象データB1-p0~B1-p52のコピー先物理ブロック番号の“130”を物理ブロック番号として有し、コピーが成功した退避対象データB1-p0~B1-p52の最初の退避対象データページ番号の“0”を開始ページ番号として有し、コピーが成功した退避対象データB1-p0~B1-p52の最後の退避対象データページ番号の“52”を終了ページ番号として有する。また、コントローラ15は、行l3へのリストデータLD25の追加後、
図20に示すように、行l1のリストデータLD23を一旦削除した後に再び不良ブロックリスト14の末尾に追加する。また、コントローラ15は、不良ブロックリスト14の末尾へのリストデータLD23の追加後、行l2のリストデータLD24を一旦削除した後に再び不良ブロックリスト14の末尾に追加する。これにより、不良ブロックリスト14において、リストデータLD25の位置が行l1に、リストデータLD23の位置が行l2に、リストデータLD24の位置が行l3になるため、リストデータLD25,LD23,LD24が、第一優先順位の論理ブロック番号と、第二優先順位の開始ページ番号との昇順にソートされ、不良ブロックリスト14は
図21に示す状態となる。
【0059】
不良ブロックリスト14が
図21に示す状態である場合に、メモリインタフェース18は、コンバータ17からリストデータLD25に基づくコピー命令C24を入力された時点で、コピー命令C24に従って、
図22に示すように、コピー命令C24にそれぞれ対応するコピー元物理ブロック番号“130”と退避対象データページ番号“0~52”とによって特定されるコピー元領域に存在する退避対象データB1-p0~B1-p52を、コピー命令C24にそれぞれ対応するコピー先物理ブロック番号“131”と退避対象データページ番号“0~52”とによって特定されるコピー先領域にコピーする。コントローラ15は、番号“131”の物理ブロックへの退避対象データB1-p0~B1-p52のコピーに成功したことを示す成否フラグ“0”がメモリインタフェース18から入力された時点で、
図21に示す不良ブロックリスト14の行l1に存在するリストデータLD25を削除する。リストデータLD25が削除されたことにより、
図23に示すように、不良ブロックリスト14において、行l1にはリストデータLD23が存在し、行l2にはリストデータLD24が存在することになる。
【0060】
また、不良ブロックリスト14が
図23に示す状態である場合に、メモリインタフェース18は、コンバータ17からリストデータLD23に基づくコピー命令C25を入力された時点で、コピー命令C25に従って、
図24に示すように、コピー命令C25にそれぞれ対応するコピー元物理ブロック番号“129”と退避対象データページ番号“53~56”とによって特定されるコピー元領域に存在する退避対象データB1-p53~B1-p56を、コピー命令C25にそれぞれ対応するコピー先物理ブロック番号“131”と退避対象データページ番号“53~56”とによって特定されるコピー先領域にコピーする。コントローラ15は、番号“131”の物理ブロックへの退避対象データB1-p53~B1-p56のコピーに成功したことを示す成否フラグ“0”がメモリインタフェース18から入力された時点で、
図23に示す不良ブロックリスト14の行l1に存在するリストデータLD23を削除する。リストデータLD23が削除されたことにより、
図25に示すように、不良ブロックリスト14の行l1にリストデータLD24が存在することになる。
【0061】
不良ブロックリスト14が
図25に示す状態である場合に、メモリインタフェース18は、コンバータ17からリストデータLD24に基づくコピー命令C26を入力された時点で、コピー命令C26に従って、
図26に示すように、コピー命令C26にそれぞれ対応するコピー元物理ブロック番号“130”と退避対象データページ番号“57~63”とによって特定されるコピー元領域に存在する退避対象データB1-p57~B1-p63を、コピー命令C26にそれぞれ対応するコピー先物理ブロック番号“131”と退避対象データページ番号“57~63”とによって特定されるコピー先領域にコピーする。
【0062】
これにより、
図26に示すように、すべての退避対象データB1-p0~B1-p63が番号“131”の同一の物理ブロックに記憶される。
【0063】
そして、コントローラ15は、
図25に示す不良ブロックリスト14の行l1に存在するリストデータLD24における終了ページ番号が各ブロックの最終ページを示すページ番号“63”であるため、不良ブロックリスト14の行l1に存在するリストデータLD24を削除する。
【0064】
<動作例3(
図27~39)>
図27に示すように、フラッシュメモリ19において、物理ブロック番号“1”の不良ブロックには退避対象データB1-p0~B1-p32が存在し、物理ブロック番号“128”の正常ブロックには書込対象データB1-p33~B1-p63が存在する。また、
図28に示すように、フラッシュメモリ19において、物理ブロック番号“2”の不良ブロックには退避対象データB2-p0~B2-p54が存在し、物理ブロック番号“130”の正常ブロックには書込対象データB1-p55~B1-p63が存在する。
【0065】
不良ブロックリスト14が
図29に示す状態である場合に、メモリインタフェース18は、コンバータ17からリストデータLD31に基づくコピー命令C31を入力された時点で、コピー命令C31に従って、
図27に示すように、コピー命令C31にそれぞれ対応するコピー元物理ブロック番号“1”と退避対象データページ番号“0~32”とによって特定されるコピー元領域に存在する退避対象データB1-p0~B1-p32を、コピー命令C31にそれぞれ対応するコピー先物理ブロック番号“129”と退避対象データページ番号“0~32”とによって特定されるコピー先領域にコピーする。退避対象データB1-p0~B1-p32のコピーが成功すると、フラッシュメモリ19は
図30に示す状態になる。コントローラ15は、番号“129”の物理ブロックへの退避対象データB1-p0~B1-p32のコピーに成功したことを示す成否フラグ“0”がメモリインタフェース18から入力された時点で、
図29に示す不良ブロックリスト14の行l1に存在するリストデータLD31を削除する。リストデータLD31が削除されたことにより、不良ブロックリスト14において、行l1にはリストデータLD32が存在し、行l2にはリストデータLD33が存在し、行l3にはリストデータLD34が存在することになる。
【0066】
ここで、コントローラ15は、
図31に示すように、不良ブロックリスト14において、行l1のリストデータLD32を一旦削除した後に再び不良ブロックリスト14の末尾に追加する。これにより、不良ブロックリスト14において、リストデータLD33の位置が行l1に、リストデータLD34の位置が行l2に、リストデータLD32の位置が行l3になるため、リストデータLD33,LD34,LD32が、第一優先順位の論理ブロック番号と、第二優先順位の開始ページ番号との昇順にソートされ、不良ブロックリスト14は
図32に示す状態となる。
【0067】
不良ブロックリスト14が
図32に示す状態である場合に、メモリインタフェース18は、コンバータ17からリストデータLD33に基づくコピー命令C32を入力された時点で、コピー命令C32に従って、
図33に示すように、コピー命令C32にそれぞれ対応するコピー元物理ブロック番号“128”と書込先ページ番号“33~63”とによって特定されるコピー元領域に存在する書込対象データB1-p33~B1-p63を、コピー命令C32にそれぞれ対応するコピー先物理ブロック番号“129”と書込先ページ番号“33~63”とによって特定されるコピー先領域にコピーする。書込対象データB1-p33~B1-p63のコピーが成功すると、フラッシュメモリ19は
図34に示す状態になり、退避対象データB1-p0~B1-p32と書込対象データB1-p33~B1-p63とが番号“129”の同一の物理ブロックに記憶される。コントローラ15は、番号“129”の物理ブロックへの書込対象データB1-p33~B1-p63のコピーに成功したことを示す成否フラグ“0”がメモリインタフェース18から入力された時点で、
図32に示す不良ブロックリスト14の行l1に存在するリストデータLD33を削除する。リストデータLD33が削除されたことにより、不良ブロックリスト14において、行l1にはリストデータLD34が存在し、行l2にはリストデータLD32が存在することになる。
【0068】
ここで、コントローラ15は、
図35に示すように、不良ブロックリスト14において、行l1のリストデータLD34を一旦削除した後に再び不良ブロックリスト14の末尾に追加する。これにより、不良ブロックリスト14において、リストデータLD32の位置が行l1に、リストデータLD34の位置が行l2になるため、リストデータLD32,LD34が、第一優先順位の論理ブロック番号と、第二優先順位の開始ページ番号との昇順にソートされ、不良ブロックリスト14は
図36に示す状態となる。
【0069】
不良ブロックリスト14が
図36に示す状態である場合に、メモリインタフェース18は、コンバータ17からリストデータLD32に基づくコピー命令C33を入力された時点で、コピー命令C33に従って、
図37に示すように、コピー命令C33にそれぞれ対応するコピー元物理ブロック番号“2”と退避対象データページ番号“0~54”とによって特定されるコピー元領域に存在する退避対象データB2-p0~B2-p54を、コピー命令C33にそれぞれ対応するコピー先物理ブロック番号“131”と退避対象データページ番号“0~54”とによって特定されるコピー先領域にコピーする。コントローラ15は、番号“131”の物理ブロックへの退避対象データB2-p0~B2-p54のコピーに成功したことを示す成否フラグ“0”がメモリインタフェース18から入力された時点で、
図36に示す不良ブロックリスト14の行l1に存在するリストデータLD32を削除する。リストデータLD32が削除されたことにより、
図38に示すように、不良ブロックリスト14の行l1にリストデータLD34が存在することになる。
【0070】
不良ブロックリスト14が
図38に示す状態である場合に、メモリインタフェース18は、コンバータ17からリストデータLD34に基づくコピー命令C34を入力された時点で、コピー命令C34に従って、
図39に示すように、コピー命令C34にそれぞれ対応するコピー元物理ブロック番号“130”と書込先ページ番号“55~63”とによって特定されるコピー元領域に存在する退避対象データB2-p55~B2-p63を、コピー命令C34にそれぞれ対応するコピー先物理ブロック番号“131”と書込先ページ番号“55~63”とによって特定されるコピー先領域にコピーする。
【0071】
これにより、
図39に示すように、退避対象データB2-p0~B2-p54と書込対象データB2-p55~B2-p63とが番号“131”の同一の物理ブロックに記憶される。
【0072】
そして、コントローラ15は、
図38に示す不良ブロックリスト14の行l1に存在するリストデータLD34における終了ページ番号が各ブロックの最終ページを示すページ番号“63”であるため、不良ブロックリスト14の行l1に存在するリストデータLD34を削除する。
【0073】
<コンピュータ装置における処理手順>
図40及び
図41は、本開示の実施例のコンピュータ装置における処理手順の一例を示すフローチャートである。
【0074】
図40に示すフローチャートは、書込対象データがシーケンサ12から出力される度に開始される。また、
図40における「現在ページ番号」は、書込対象データの現在のページ番号を示す。また、
図40に示す現在ページ番号及びエラーページ番号の初期値は“0”である。
【0075】
図40において、ステップS100では、書込対象データがフラッシュメモリ19に書き込まれる。
【0076】
ステップS105では、書込対象データの書き込みにエラーが発生したか否かが判定される。書込対象データの書き込みにエラーが発生したときは(ステップS105:Yes)、処理はステップS125へ進み、書込対象データの書き込みにエラーが発生していないときは(ステップS105:No)、処理はステップS110へ進む。
【0077】
ステップS110では、エラーフラグが“0”であるか否かが判定される。エラーフラグが“0”であるときは(ステップS110:Yes)、処理はステップS115へ進み、エラーフラグが“1”であるときは(ステップS110:No)、処理はステップS135へ進む。
【0078】
ステップS115では、現在ページ番号が最終ページ番号の“63”に達しているか否かが判定される。現在ページ番号が最終ページ番号に達しているときは(ステップS115:Yes)、処理はステップS145へ進み、現在ページ番号が最終ページ番号に達していないときは(ステップS115:No)、処理はステップS120へ進む。
【0079】
ステップS120では、現在ページ番号がインクリメントされる。ステップS120の処理により、
図40に示す処理手順は終了する。なお、ステップS120の処理が完了した時点で現在ページ番号が“64”に達しているときは、現在ページ番号は“0”にリセットされる。
【0080】
一方で、ステップS125では、コンバータ17が有する変換テーブルが更新され、ステップS130では、エラーフラグが“1”にセットされる。ステップS130の処理後、処理はステップS100に戻る。
【0081】
また、ステップS135では、不良ブロックリスト14にリストデータが追加される。ステップS135で追加されるリストデータは、開始ページ番号としてエラーページ番号を有し、を終了ページ番号として現在ページ番号-1を有する。
【0082】
次いで、ステップS140では、現在ページ番号がエラーページ番号としてセットされる。ステップS140の処理後、処理はステップS115へ進む。
【0083】
また、ステップS145では、エラーページ番号が“0”であるか否かが判定される。エラーページ番号が“0”であるときは(ステップS145:Yes)、処理はステップS120へ進み、エラーページ番号が“0”でないときは(ステップS145:No)、処理はステップS150へ進む。
【0084】
ステップS150では、不良ブロックリスト14にリストデータが追加される。ステップS150で追加されるリストデータは、開始ページ番号としてエラーページ番号を有し、を終了ページ番号として最終ページ番号である“63”を有する。
【0085】
次いで、ステップS155では、エラーページ番号が“0”にリセットされる。ステップS155の処理後、処理はステップS120へ進む。
【0086】
また、
図41に示すフローチャートは、常時実行される。
図40において、「現在ページ番号」は、コピー対象のデータの現在のページ番号を示し、「リスト開始ページ番号」は、不良ブロックリスト14の行l1に存在するリストデータが有する開始ページ番号を示し、「リスト終了ページ番号」は、不良ブロックリスト14の行l1に存在するリストデータが有する終了ページ番号を示す。また、
図40に示す現在ページ番号の初期値は“0”である。
【0087】
図41において、ステップS200では、バッファ13に書込対象データが存在するか否かが判定される。バッファ13に書込対象データが存在するときは(ステップS200:Yes)、処理はステップS205へ進み、バッファ13に書込対象データが存在しないときは(ステップS200:No)、処理はステップS210へ進む。
【0088】
ステップS205では、書込対象データがシーケンサ12から出力される。ステップS205の処理後、処理はステップS200に戻る。
【0089】
一方で、ステップS210では、不良ブロックリスト14にリストデータが登録されているか否か(つまり、リストデータ数が“0”であるか否か)が判定される。不良ブロックリスト14にリストデータが登録されているときは(ステップS210:No)、処理はステップS215へ進み、不良ブロックリスト14にリストデータが登録されていないときは(ステップS210:Yes)、処理はステップS200に戻る。
【0090】
ステップS215では、現在の書込対象データの論理ブロック番号(以下では「現在論理ブロック番号」と呼ぶことがある)が、不良ブロックリスト14に登録されている論理ブロック番号(以下では「リスト論理ブロック番号」と呼ぶことがある)より大きいか否かが判定される。現在論理ブロック番号がリスト論理ブロック番号より大きいときは(ステップS215:Yes)、処理はステップS220へ進み、現在論理ブロック番号がリスト論理ブロック番号以下のときは(ステップS215:No)、処理はステップS200に戻る。ステップS215の処理により、書込対象データの書き込みの最中にあるブロックに退避対象データのコピーが行われてしまうことを防止することができる。
【0091】
ステップS220では、正常ブロックへのデータのコピーが行われる。
【0092】
次いで、ステップS225では、ステップS220で行われたコピーにエラーが発生したか否かが判定される。コピーにエラーが発生したときは(ステップS225:Yes)、処理はステップS260へ進み、コピーにエラーが発生していないときは(ステップS225:No)、処理はステップS230へ進む。
【0093】
ステップS230では、現在ページ番号がリスト終了ページ番号に等しいか否かが判定される。現在ページ番号がリスト終了ページ番号に等しいときは(ステップS230:Yes)、処理はステップS240へ進み、現在ページ番号がリスト終了ページ番号と相違するときは(ステップS230:No)、処理はステップS235へ進む。
【0094】
ステップS235では、現在ページ番号がインクリメントされる。ステップS235の処理後、処理はステップS200に戻る。
【0095】
一方で、ステップS240では、不良ブロックリスト14からリストデータが削除される。
【0096】
次いで、ステップS245では、現在ページ番号が最終ページ番号の“63”に達しているか否かが判定される。現在ページ番号が最終ページ番号に達しているときは(ステップS245:Yes)、処理はステップS275へ進み、現在ページ番号が最終ページ番号に達していないときは(ステップS245:No)、処理はステップS250へ進む。
【0097】
ステップS250では、リスト開始ページ番号が現在ページ番号+1に等しいか否かが判定される。リスト開始ページ番号が現在ページ番号+1に等しいときは(ステップS250:Yes)、処理はステップS235へ進み、リスト開始ページ番号が現在ページ番号+1と相違するときは(ステップS250:No)、処理はステップS255へ進む。
【0098】
ステップS255では、リストデータが、第一優先順位の論理ブロック番号と、第二優先順位の開始ページ番号との昇順にソートされる。ステップS255の処理後、処理はステップS250に戻る。
【0099】
一方で、ステップS260では、コンバータ17が有する変換テーブルが更新される。
【0100】
次いで、ステップS265では、リスト開始ページ番号が“0”であるか否かが判定される。リスト開始ページ番号が“0”であるときは(ステップS265:Yes)、処理はステップS275へ進み、リスト開始ページ番号が“0”でないときは(ステップS265:No)、処理はステップS270へ進む。
【0101】
ステップS270では、不良ブロックリスト14にリストデータが追加される。ステップS270で追加されるリストデータは、開始ページ番号として“0”を有し、を終了ページ番号としてリスト開始ページ番号-1を有する。ステップS270の処理後、処理はステップS275へ進む。
【0102】
ステップS275では、リスト開始ページ番号が“0”であるか否かが判定される。リスト開始ページ番号が“0”であるときは(ステップS275:Yes)、処理はステップS285へ進み、リスト開始ページ番号が“0”でないときは(ステップS275:No)、処理はステップS280へ進む。
【0103】
ステップS280では、リストデータが、第一優先順位の論理ブロック番号と、第二優先順位の開始ページ番号との昇順にソートされる。ステップS280の処理後、処理はステップS275に戻る。
【0104】
一方で、ステップS285では、現在ページ番号が“0”にリセットされる。ステップS285の処理後、処理はステップS200に戻る。
【0105】
以上、実施例について説明した。
【0106】
以上のように、本開示のコンピュータ装置(実施例のコンピュータ装置1)は、シーケンサ(実施例のシーケンサ12)と、リスト(実施例の不良ブロックリスト14)と、コントローラ(実施例のコントローラ15)と、セレクタ(実施例のセレクタ16)と、インタフェース(実施例のメモリインタフェース18)とを有する。シーケンサは、バッファ(実施例のバッファ13)を有し、バッファに順に蓄えられる第一データ(実施例の書込対象データ)をシーケンシャルに出力する。リストには、フラッシュメモリ(実施例のフラッシュメモリ19)におけるデータ書き込み済みのブロックのうちの不良ブロックを示す情報(実施例のリストデータ)が登録される。コントローラは、フラッシュメモリに不良ブロックが発生したときにリストを更新し、リストに基づいて、不良ブロックに位置する第二データ(実施例の退避対象データ)をフラッシュメモリの正常ブロックにコピーする命令(実施例のコピー命令)を出力する。セレクタは、バッファに第一データが存在するときに第一データを選択する一方で、バッファに第一データが存在しないときに命令を選択する。インタフェースは、セレクタで第一データが選択されたときは、第一データをフラッシュメモリに書き込む一方で、セレクタで命令が選択されたときは、命令に従って第二データを正常ブロックにコピーする。
【0107】
こうすることで、フラッシュメモリで発生した不良ブロックによるコンピュータ装置の性能低下を防止することができる。さらに、シーケンサからの第一データの出力が途切れる隙間時間を利用して正常ブロックへの第二データのコピーを行うことができるため、コンピュータ装置の通常の処理に影響を与えることなく第二データのコピーを行うことができる。よって、第二データのコピーによるコンピュータ装置の性能低下を防止することができる。
【0108】
また、コントローラは、フラッシュメモリに不良ブロックが発生する度に、リストの末尾に新たな情報を順に登録することによりリストを更新し、リストにおける情報の登録順に命令を出力する。
【0109】
こうすることで、第二データのコピーの制御を簡潔に行うことができる。
【0110】
また、コントローラは、インタフェースによって第二データがコピーされている最中の正常ブロックが不良ブロックに遷移したときに、情報に含まれる、フラッシュメモリにおけるページ番号を昇順にしてリストを更新する。
【0111】
こうすることで、第二データのコピー先の正常ブロックが不良ブロックに遷移した場合でも、第二データの消失を防止することができる。
【符号の説明】
【0112】
1 コンピュータ装置
11 CPU
12 シーケンサ
13 バッファ
14 不良ブロックリスト
15 コントローラ
16 セレクタ
17 コンバータ
18 メモリインタフェース
19 フラッシュメモリ