説明

記憶装置、記憶装置の制御方法およびコントローラ

【課題】容量の小さなバックアップ電源を使用して電源断時の不揮発化処理を可能とする。
【解決手段】電源断が発生する前の通常時に、少なくとも1つの消去済みフリーブロックが予備のブロックとして常に確保されているように不揮発性メモリに消去済みフリーブロックを作成し、電源断が発生した場合、予備のブロックを使用して不揮発化が完了していないデータおよび該データに関する論物変換情報を不揮発性メモリに書き込む不揮発化処理を実行する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、不揮発性半導体メモリを備えた記憶装置、記憶装置の制御方法およびコントローラに関する。
【背景技術】
【0002】
SSD(Solid State Drive)は、不揮発性半導体メモリとしての複数のフラッシュメモリチップ、ホスト装置からの要求に応じて各フラッシュメモリチップのリード/ライト制御を行うコントローラ、各フラッシュメモリチップとホスト装置との間でデータ転送を行うためのバッファメモリ、電源回路、ホスト装置に対する接続インタフェースなどを備えている。
【0003】
SSDを使用する際に、外部電源からの電力供給を予告なく断たれることがある。電力を断たれた時点で、不揮発性半導体メモリで不揮発化していないデータは、不揮発化する必要がある。このため、SSDでは、電池やキャパシタなどのバックアップ電源を搭載し、不正な電源断が発生した場合、このバックアップ電源を用いて、所要データの不揮発化処理を行っている。
【0004】
このキャパシタ電源としては、10ミリ秒〜0.1秒程度の極めて短い時間の電源供給が可能なものが採用されることが多い。このため、不正な電源断時の不揮発化処理は、出来るだけ短い時間で処理すべきである。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】米国特許公報7634688号
【発明の概要】
【発明が解決しようとする課題】
【0006】
例えば、不正な電源断時の不揮発化処理の際に、ブロックの消去処理を行った後に、この消去済みブロックに所要データを書き込む不揮発化処理を行った場合、消去処理に時間がかかり、所要データを書き込むための時間が不足する可能性がある。
【0007】
また、不正な電源断の発生前に、フラッシュメモリからのデータ読み出しおよび読み出したデータの誤り訂正処理を行っている場合、その後の不正な電源断時の不揮発化処理の際に、データの読み出しおよび誤り訂正処理を続行する場合は、バックアップ電源が切れる前に、所要データの不揮発化処理を終了しない可能性がある。
【0008】
本発明は、上記に鑑みてなされたものであって、容量の小さなバックアップ電源を使用して電源断時の不揮発化処理を可能とする記憶装置、記憶装置の制御方法およびコントローラを提供することを目的とする。
【課題を解決するための手段】
【0009】
実施形態の記憶装置は、揮発性の第1のメモリと、データ消去の単位であるブロックが複数個形成された不揮発性の第2のメモリとを備える。記憶装置は、第2のメモリに保存される管理情報であって、ホスト装置で指定される論理アドレスと第2のメモリでの物理的なデータの記憶位置とを対応付ける論物変換情報を含む管理情報を第1のメモリに転送し、該転送された管理情報を用いて、ホスト装置からのデータを前記第1のメモリを介して前記第2のメモリに書き込むとともに、前記第2のメモリから読み出したデータを前記第1のメモリを経由してホスト装置に送信する読み書き制御部を有するコントローラと、バックアップ電源を有し、外部から供給された電力を記憶装置内の各部に供給する電源回路とをさらに備える。前記電源回路は、前記外部からの電力の供給が断たれたことを検出すると、前記バックアップ電源からの電力を記憶装置内の各部に供給する。前記コントローラは、前記外部からの電力の供給が断たれる前の通常時に、第2のメモリに少なくとも1つの消去済みフリーブロックが予備のブロックとして常に確保されているように消去済みフリーブロックを作成する消去済みブロック管理部と、前記外部からの電力の供給が断たれた場合、前記予備のブロックを使用して不揮発化が完了していないデータおよび該データに関する前記論物変換情報を書き込む不揮発化処理を実行する電源断時制御部とを備える。
【図面の簡単な説明】
【0010】
【図1】図1は、SSDの機能構成例を示すブロック図である。
【図2】図2は、SSDの他の視点からの機能構成例を示すブロック図である。
【図3】図3は、ブロックの状態遷移を示す概念図である。
【図4】図4は、消去済みフリーブロックを確保するための手順を示すフローチャートである。
【図5】図5は、不正電源断処理の手順を示すフローチャートである。
【図6】図6は、不正電源断処理後の電源投入時処理の手順を示すフローチャートである。
【図7】図7は、不正電源断処理時と、不正電源断処理後の電源投入時処理時のリードモディファイライト処理を概念的に示す図である。
【図8】図8は、不正電源断処理後の電源投入時処理時のリードモディファイライト処理の手順を示すフローチャートである。
【発明を実施するための形態】
【0011】
以下に添付図面を参照して、本発明の実施の形態にかかる記憶装置、記憶装置の制御方法およびコントローラを詳細に説明する。なお、この実施の形態により本発明が限定されるものではない。
【0012】
先ず、本明細書で用いる用語について定義しておく。
・ページ:NAND型フラッシュメモリ内部において一括して書き込み/読み出しが可能な単位のこと。
・ブロック:NAND型フラッシュメモリ内部において設定される消去単位であり、ブロックは、複数のページから構成される。
・セクタ:ホストからの最小アクセス単位のこと。セクタサイズは、例えば512B。
・フリーブロック(FB):内部に有効データを含まない、用途未割り当てのブロックのこと。
・アクティブブロック(AB):内部に有効データを含むブロックのこと。
・NANDの整理:有効な最新のデータを集めて、違うブロックに書き直す処理のこと。
【0013】
図1は、SSD100の実施形態の構成例を示す機能ブロック図である。SSD100は、SAS(Serial Attached SCSI)インタフェースあるいはSATA(Serial Advanced Technology Attachment)インタフェースなどのホストインタフェース5を介してパーソナルコンピュータなどのホスト装置(以下、ホストと略す)1と接続され、ホスト1の外部メモリとして機能する。ホスト1としては、パーソナルコンピュータのCPU、スチルカメラ、ビデオカメラなどの撮像装置のCPUなどがあげられる。SASコマンドあるいはSATAコマンドなどを総称してホストインタフェースコマンド(ホストIFコマンド)と呼称する。
【0014】
SSD100は、不揮発性半導体メモリとしてのNAND型フラッシュメモリ(以下、NANDと略す)10と、ホストIFコマンドを送受信処理し、ホストインタフェース5を介してホスト1との間でデータを送受信するフロントエンド部40と、ホストIFコマンドをNAND10に対するコマンドに変換して各種処理を実行するバックエンド部30と、NAND10の駆動制御を行うNANDコントローラ20と、NAND10に書き込むデータおよびNANDから読み出したデータに対する誤り訂正符号のエンコードおよびデコードを行う誤り訂正回路25と、SSD100内の各回路に電源を供給する電源回路50と、バックアップ電源としての充電可能な電池55を備える。
【0015】
ホスト1はSSD100に対し、ホストIFコマンドとしてのリード要求またはライト要求を発行する際には、論理アドレスとしてのLBA(Logical Block Addressing)を含むコマンドを発行する。LBAは、セクタ(サイズ:例えば512B)に対して0からの通し番号をつけた論理アドレスである。SSD100は、ホスト1からLBAを指定したユーザデータのリード要求およびライト要求などを受け付ける。SSD100は、リード要求の場合、NAND10に保存してあるユーザデータをリードバッファ35を介してホストに送信し、ライト要求の場合は、ホスト1から受信したユーザデータをライトバッファ34を介してNAND10に保存する。
【0016】
NAND10は、複数のメモリセルがマトリクス状に配列されたメモリセルアレイを有し、個々のメモリセルは上位ページ及び下位ページを使用して多値記憶が可能である。NAND10は、複数のメモリチップによって構成され、各メモリチップは、データ消去の単位であるブロックを複数配列して構成される。また、NAND10では、ページごとにデータの書き込み及びデータの読み出しが行われる。ブロックは、複数のページによって構成されている。1ページは、複数のセクタデータで構成されている。
【0017】
この実施形態のSSD100では、NAND10のユーザデータを管理する単位としてサイズの小さな1つの管理単位を採用し、1つの管理単位でNAND10全体を管理する管理方式を採用している。小さな管理単位としては、セクタ以上のサイズで、ブロックより小さな管理単位であれば任意の管理単位を採用可能であるが、この実施の形態では、管理単位をページと同サイズとする。各ページ内においては、セクタデータがLBA順にかつLBAに対応する位置に記憶されている。ブロック内では、ページ毎にデータが追記されるが、ページ間はLBA順に並んでいるとは限らない。
【0018】
フロントエンド部40は、CPU41およびコマンドキュー43を有し、主にホストIFコマンドを処理する機能を有する。フロントエンド部40は、その機能をCPU41上で実行するソフトウェア(ファームウエア)によって実現する。コマンドキュー43は複数のコマンドを蓄積可能なキュー構造を有し、ホスト1からホストIFコマンドを受け取り、コマンドの種類がLBAを指定したユーザデータのリード要求またはライト要求であれば、コマンドをバックエンド部30に転送する。また、フロントエンド部40のCPU41は、バックエンド部30のCPU31と協動して、ライトバッファ34−ホスト1間およびリードバッファ35−ホスト1間のデータ転送処理を行う。
【0019】
バックエンド部30は、CPU31、DRAM32、コマンドキュー33、ライトバッファ34、リードバッファ35を有する。バックエンド部30は、ホストIFコマンドをNAND10に対するコマンドに変換して各種処理を実行するものであり、その機能をCPU31上で実行するソフトウェア(ファームウエア)によって実現する。バックエンド部30で行われる処理としては、ホスト1からのライト要求、リード要求等の各種コマンドへの応答と、ホスト1から与えられる論理アドレスとNAND10の物理アドレス(記憶位置)との対応関係を示す論物変換テーブルなどの管理情報の更新、不揮発化制御と、NAND10の整理などがある。DRAM32には、論理アドレスとしてのLBAと、NAND10上でのデータの記憶位置(ブロックアドレス+ブロック内ページアドレス)との対応を示す論物変換テーブル37を含む管理テーブル(マスターテーブル)36が記憶されている。CPU31によって、管理テーブル36の登録、更新が行われる。この管理テーブル36は、NAND10に保存されており、起動時に、NAND10に保存されていた管理テーブルがDRAM32上に展開されたものである。DRAM32上の管理テーブル36は、定期的にあるいは電源断時に、NAND10に退避保存される。
【0020】
コマンドキュー33は、複数のコマンドを蓄積可能なキュー構造を有し、フロントエンド部40から受け取ったコマンドに関して、DRAM32上の論物変換テーブル37を用いてLBAをNAND10上の記憶位置である物理アドレスに変換し、変換した物理アドレスを含むリードコマンドまたはライトコマンドを順次NANDコントローラ20に出力する。ホスト1から送られたユーザデータの書き込みについては、NAND10の書き込み単位であるページ単位で、コマンドの出力を行う。ライトバッファ34は、NAND10に書き込むユーザデータを一時的に保存する揮発性メモリである。リードバッファ35は、NAND10から読み出したユーザデータをホスト1に渡すまで一時的に保存する揮発性メモリである。ライトバッファ34、リードバッファ35は、ランダムアクセス可能な揮発性メモリ上に配置する。
【0021】
DRAM32に、ライトバッファ34およびリードバッファ35を配置してもよい。バックエンド部30が使用するメモリとしては、NAND10よりも高速記憶動作が可能でランダムアクセスが可能で消去動作が不要な揮発性半導体メモリであれば、DRAM32の他に、SRAM、FeRAMなどの任意のRAMを採用してもよい。
【0022】
NANDコントローラは20は、バックエンド部30から発行されたコマンドに基づき、NAND10へのユーザデータの書き込みおよびNAND10からのユーザデータの読み出しを行う。NANDコントローラは20は、誤り訂正回路25を用いてNAND10に書き込むユーザデータにECC処理(誤り訂正処理)におけるエンコード処理を行い、エンコード結果をデータに付加して出力する。また、NANDコントローラは20は、誤り訂正回路25を用いてNAND10から読み出されたデータに対して、ECC処理におけるデコード処理(誤り訂正符号を用いた誤り訂正処理)を行い、誤り訂正されたデータをバックエンド部30に出力する。バックエンド部30のCPU31は、誤り訂正回路25に対して誤り訂正処理の中止を指示することができる。
【0023】
電源回路50は、ホスト1側の電源回路(外部電源)2から供給された直流電力を複数の異なる内部直流電源電圧に変換し、これら内部直流電源電圧をSSD100内の各回路に供給する。電源回路50は、外部電源2からの電力供給が不正に断たれたことを検知すると、電池55からの電力供給に切り替え、外部電源2からの電力供給が不正に断たれたことを示す不正電源断通知FEIをフロントエンド部40のCPU41に通知する。これによりフロントエンド部40のCPU41は不正電源断を検知し、バックエンド部30のCPU31に対して不正電源断処理を指示する。
【0024】
図2は、SSD100の要部構成要素の機能ブロック図を示すものである。NAND10は、ユーザデータを記憶するユーザデータ記憶部201を有する。また、NAND10には、NAND管理テーブル202(論物変換テーブル37、フリーブロック管理リスト38など)が記憶されている。
【0025】
DRAM32には、ライトバッファ34と、リードバッファ35が形成されている。また、DRAM32には、起動時などに、DRAM32上に展開されたNAND管理テーブル202であるマスターテーブル36が記憶される。
【0026】
フロントエンド部40、バックエンド部30およびNANDコントローラ20を纏めた機能要素としてのコントローラ60は、コマンド処理部61,読み書き制御部62、NAND整理部63、フリーブロック管理部64、消去済みブロック管理部65および不正電源断処理部66を有する。
【0027】
コマンド処理部61は、ホスト1からのコマンドを解析し、解析結果を読み書き制御部62,NAND整理部63、フリーブロック管理部64、消去済みブロック管理部65および不正電源断処理部66に通知する。また、コマンド処理部61は、SSD100からのコマンド応答をホスト1に送信する。
【0028】
読み書き制御部62は、ホスト1から入力されたデータをライトバッファ34に書き込むライトバッファ書き込み制御、ライトバッファ34からNAND10にデータを追い出す追い出し制御、ライトバッファ書き込み制御及び追い出し制御に対応する各種管理テーブルの更新など書き込みに関する制御を実行する。また、読み書き制御部62は、ホスト1から指定された読み出しデータをNAND10から読み出して、リードバッファ35を経由してホスト1へ転送する読み出し制御、読み出し制御に対応する各種管理テーブルの更新など読み出しに関する制御を実行する。読み書き制御部62は、NAND10に対する書き込み、読み出しの際に、誤り訂正回路25を使用して誤り訂正処理を実行する。
【0029】
NAND整理部63は、NAND10でのデータの整理を実行する。SSDにおいて、データの消去単位(ブロック)と、データの管理単位が異なる場合、NAND10の書き換えが進むと、無効な(最新ではない)データによって、ブロックは穴あき状態になる。このような穴あき状態のブロックが増えると、実質的に使用可能なブロックが少なくなり、NAND10の記憶領域を有効利用できなくなる。そこで、例えば、NAND10のフリーブロックが所定の閾値より少なくなった場合、有効な最新のデータを集めて、違うブロックに書き直すコンパクション、ガベージコレクションなどのNAND10の整理を実行し、用途未割り当てのフリーブロックを確保する。
【0030】
フリーブロック管理部64は、マスターテーブル36のフリーブロック管理リスト(FB管理リスト)38を用いてフリーブロックを管理する。ブロックは、フリーブロックFB、アクティブブロックABとして区別して管理される。フリーブロックFBとは、内部に有効データを含まない、用途未割り当ての論理ブロックのことである。アクティブブロックABとは、内部に有効データを含み、用途が割り当てられたブロックのことである。SSD100では、論理アドレス(LBA)と物理アドレス(NAND10の記憶位置)との関係は予め静的に決定されておらず、データの書込み時に動的に関係付けられる論物動的割当方式が採用されている。
【0031】
例えば、同じLBAのデータを上書きする場合は、つぎのような処理が行われる。論理アドレスA1にブロックサイズの有効なデータが保存されており、記憶領域としてはブロックB1が使用されていたとする。ホスト1から論理アドレスA1のブロックサイズの更新データを上書きするコマンドを受信した場合、フリーブロック(ブロックB2とする)を1個確保し、そのフリーブロックにホスト1から受信したデータを書き込む。その後、論理アドレスA1とブロックB2を関係付ける。その結果、ブロックB2はアクティブブロックABになり、ブロックB1に保存されたデータは無効になるためブロックB1はフリーブロックFBとなる。
【0032】
このように、SSD100では、同じ論理アドレスA1のデータであっても、実際の記録領域として使用されるブロックは書込みの度に変化する。なお、ブロックサイズの更新データ書き込みでは、必ず書き込み先ブロックが変化するが、ブロックサイズ未満の更新データ書き込みでは、同じブロックに更新データが書き込まれることもある。例えばブロックサイズ未満のページデータが更新される場合、当該ブロック内において同じ論理アドレスの旧ページデータが無効化され、新たに書き込まれた最新のページデータが有効ページとして管理される。ブロック内の全データが無効化されると、当該ブロックはフリーブロックFBとして解放される。
【0033】
フリーブロックFBは、FB管理リスト38によって管理されている。FB管理リスト38は、書き込み先ブロックとして選択するフリーブロックの順番を管理するためのリストである。FB管理リスト38は、例えば、フリーブロックFBとなった時間順やブロックの消去回数順にソートされたFIFO形式のリストであり、各エントリには、ブロック識別子が保持される。アクティブブロックABからフリーブロックFBとなったフリーブロックFBは、FB管理リストに追加され、フリーブロックFBが使用される際には、FB管理リストから取り出される。FB管理リストでは、全てのブロックの消去回数、消去間隔を概ね等しくするウェアレベリング処理が実行されている。フリーブロック管理部64は、書き込み用のブロックが必要な場合、FB管理リスト38で管理されている順にフリーブロックFBを選択し、選択したブロックを消去した後、読み書き制御部62に対し書き込み用のブロックとして供給する。
【0034】
消去済みブロック管理部65は、不正電源断が発生する前の通常処理において、常に、少なくとも1つの消去済みフリーブロックが予備ブロックとして確保されるようフリーブロックの消去処理を行う。例えば、通常の電源投入時に、フリーブロックを消去することにより少なくとも1つの消去済みフリーブロックFB−Aを作成しておく。この消去済みフリーブロックFB−Aは、新たに別の消去済みフリーブロックを作成するまでは、書き込み先ブロックとして使用しないようにする。その後、書き込み先ブロックとしてフリーブロックが要求された場合、別のフリーブロックを消去することにより消去済みフリーブロックFB−Bをもう1つ作成する。そして、以前に作成しておいた消去済みフリーブロックFB−Aを今回の書き込み先ブロックとして使用する。以下、同様に、その後書き込み先ブロックとしてフリーブロックが要求された場合、別のフリーブロックを消去することにより消去済みフリーブロックFB−Cをもう1つ作成する。そして、以前に作成しておいた消去済みフリーブロックFB−Bを今回の書き込み先ブロックとして使用する。なお、消去済みブロック管理部65は、FB管理リスト38で管理される順番にしたがって消去済みフリーブロックを作成する。
【0035】
不正電源断処理部66は、外部電源2からの電力供給が不正に断たれたことを示す不正電源断通知FEIが発生された場合、電池55からの電力供給時間中に不正電源断処理を行うものである。SSD100では、ホスト1からユーザデータの書き込みを要求された際に、該ユーザデータをライトバッファ34に一時記憶させた時点で、ホスト1に対して書き込み完了を返す。このようにすることで、SSD100では、ホスト1からのユーザデータの書き込み性能を向上させている。したがって、ホスト1に書き込み完了を返したデータに関しては、電池55が電力供給が可能な時間内でライトバッファ34から読み出してNAND10に書き込む不揮発化処理を行う必要がある。しかし、前述したように、電池55としては、10ミリ秒〜0.1秒程度の極めて短い電源供給が可能なものが採用されることが多いため、不正電源断通知FEIが発生した際の不揮発化処理は、出来るだけ短い時間で処理しなくてはいけない。
【0036】
そこで、不正電源断処理部66は、以下の処理を行う。
・不正電源断通知FEIが発生する前の通常処理で消去済みブロック管理部65が予め確保しておいた消去済みフリーブロックを使用して、DRAM32の記憶データ(管理情報、ライトバッファ34に一時記憶されているユーザデータなど)を不揮発化する。つまり、ホスト1に書き込み完了を応答したが、まだ不揮発化していないユーザデータを、消去済みフリーブロックを使用して、不揮発化する。また、不揮発化していない管理情報、すなわちマスターテーブル36における不揮発化されていない管理情報を消去済みフリーブロックを使用して、不揮発化する。
・NAND10のブロックを消去中であれば消去を中止させる。
・NAND10が整理中であれば、整理を中止させる。
・NAND10からの読み出しを中止する。読み出しに伴う誤り訂正処理も中止する。
・リードモディファイライトを行っている場合は、リードモディファイライト処理を中止する。
【0037】
(リードモディファイライト:RMW)
リードモディファイライトについて説明する。ページ内の一部セクタの更新を行うときなどには、NAND10の記憶データを読み取って、変更を加えて、書き戻すリード・モディファイ・ライト(RMW)を実行する。RMW処理においては、まず、更新セクタを含むページまたはブロックをNAND10からリードし、リードしたデータを、例えばDRAM32の作業領域でホスト1から受信した更新データと統合する。そして、この統合データをNAND10の新たなページまたは新たなブロックに書き込む。
【0038】
(消去処理)
つぎに、図3および図4を用いて、消去済みブロック管理部65によって行われるブロックの消去処理について説明する。図3は、ブロックの状態遷移を示すものである。図4は、不正電源断通知FEIが発生する前の通常処理での消去済みブロック作成処理手順を示すものである。ブロックは、図3に示すように、初期状態では、有効データを保持していないフリーブロックFBの状態にある。このフリーブロックFBを消去することで、このフリーブロックFBは書き込み可能な状態となる。消去が完了する前に消去を中止した場合は、このブロックは消去候補のフリーブロックFBに戻す。消去済みフリーブロックFBは、その後、ユーザデータや管理情報の書き込み先としてのアクティブブロックABとして使用され、使用後に再びフリーブロックFBとして登録される。
【0039】
本実施形態においては、例えば、通常の電源投入時に、FB管理リスト38によって最先に使用すべきであると管理されているフリーブロックを選択し(ステップS301)、選択したフリーブロックを消去することにより少なくとも1つの消去済みフリーブロックFB−Aを予め作成しておく(ステップS302)。この消去済みフリーブロックFB−Aは、図3に示すように、先に使用する消去済みフリーブロックである先使用消去済みフリーブロックEFB1として登録される(ステップS303)。この先使用消去済みフリーブロックEFB1は、前述したように、新たに別の消去済みフリーブロックを作成するまでは、書き込み先ブロックとして使用されないようにする。
【0040】
その後書き込み先ブロックとしてフリーブロックが要求された場合(ステップS304)、別のフリーブロックを消去することにより消去済みフリーブロックFB−Bがもう1つ作成される(ステップS305)。そして、この消去済みフリーブロックFB−Bは、図3に示すように、次回に使用する消去済みフリーブロックである次使用消去済みフリーブロックEFB2として登録される(ステップS306)。そして、以前に作成しておいた、先使用消去済みフリーブロックEFB1に登録されている消去済みフリーブロックFB−Aが今回の書き込み先ブロックとして使用される。また、今回作成した、次使用消去済みフリーブロックEFB2に登録されている消去済みフリーブロックFB−Bが、先使用消去済みフリーブロックEFB1に登録される(ステップS307)。
【0041】
以下、同様に、その後書き込み先ブロックとしてフリーブロックが要求された場合(ステップS308)、別のフリーブロックを消去することにより消去済みフリーブロックFB−Cがもう1つ作成され、この消去済みフリーブロックFB−Cが、次回に使用する消去済みフリーブロックである次使用消去済みフリーブロックEFB2として登録される。そして、先使用消去済みフリーブロックEFB1に登録されている消去済みフリーブロックFB−Bは今回の書き込み先ブロックとして使用される。また、今回作成した、次使用消去済みフリーブロックEFB2に登録されている消去済みフリーブロックFB−Cが、先使用消去済みフリーブロックEFB1として登録される。
【0042】
先使用消去済みフリーブロックEFB1として登録されている消去済みフリーブロックは、図3に示すように、通常時は、ユーザデータや管理情報の書き込み先として使用されるが、不正電源断通知FEIが発生した場合は、不正電源断処理でのユーザデータや管理情報の書き込み先として使用される。
【0043】
このように消去済みブロック管理部65は、常に少なくとも1つの消去済みフリーブロックを確保するようにしており、この消去済みのフリーブロックを不正電源断時の不揮発化処理のための書き込み先としても使用する。このため、不正電源断時に、ブロックを消去することなく即座にこの消去済みのフリーブロックを使用した不揮発化処理を行うことが可能となる。ブロックの消去には10ミリ秒程度の時間が掛かり、不正電源断処理に掛けられる時間を上回る可能性があるため、不正電源断時の不揮発化処理の際には、消去処理を行わないようにする。先に消去処理を行ったフリーブロックを書き込み先ブロックとして先に使用することで、書き込み特性の低下を防止している。
【0044】
(不正電源断処理)
図5は、電源回路50から不正電源断通知FEIが発生された時の不正電源断処理部66での不正電源断処理の動作手順を示すフローチャートである。電源回路50は、外部電源2からの電力供給が断たれたことを検知するまでは(ステップS401:No)、通常通り、外部電源2からの電力をSSD100の各部に供給する。電源回路50は、外部電源2からの電力供給が断たれたことを検知すると(ステップS401:Yes)、電力を電池55から供給するように切り替える。さらに、電源回路50は、フロントエンド部40のCPU41に対して、外部電源2からの電力供給が不正に断たれたことを示す不正電源断通知FEIを通知する(ステップS402)。フロントエンド部40は、これ以降、バックエンド部30に対するコマンドの発行を中止する。さらに、フロントエンド部40のCPU41は、バックエンド部30のCPU31に対して、不正電源断処理を実行することを指示する(ステップS403)。
【0045】
これ以降は、主にバックエンド部30のCPU31における不正電源断処理を行う機能要素としての不正電源断処理部66が行う処理である。不正電源断処理部66は、NANDコントローラ20に対して、NAND10の消去を中止するよう指示する(ステップS404)。これにより、NAND10が消去中であれば消去が中止される。
【0046】
不正電源断処理部66は、NAND10の整理中であれば、NAND整理部63によるNAND整理を中止させる(ステップS405)。具体的には、NAND10からのデータの読み込み、NAND10へのデータの書き込み、マスターテーブル36での論物変換テーブル37の更新について、仕掛中の処理単位が完了した以後の処理を中止する。NAND整理によって更新されたがこの時点でNAND10に書き込まれていない論物変換テーブル37などの管理情報については、この後の手順で、前述の退避先ブロックである先使用消去済みフリーブロックEFB1に書き込み、さらにその後の電源投入時に管理情報を整合する。
【0047】
不正電源断処理部66は、誤り訂正回路25に対して、NAND10からの読み込みについて、誤り訂正を行わないよう指示する(ステップS406)。すなわち、NAND10からの読み込みについて、仕掛り中の誤り訂正処理を中止させる。以後、読み込みで誤りが発生した場合は、誤り訂正を行わず、読み込み中断として扱う。
【0048】
不正電源断処理部66は、NANDコントローラ20からの読み込みを中止する(ステップS407)。仕掛り中のNAND10からの読み込み処理があれば継続し、それ以降の読み込み処理を一切中止する。また、ホスト1に対して読み込み応答は返さない。さらに、不正電源断処理部66は、RMWを行っている場合は、RMWも中止する。
【0049】
不正電源断処理部66は、消去済みブロック管理部65によって確保されている先使用消去済みフリーブロックEFB1を、不正電源断処理の退避先ブロックとして割り当てる(ステップS408)
【0050】
不正電源断処理部66は、ホスト1に書き込み完了を応答したが、まだライトバッファ34に記憶されて不揮発化されていないユーザデータを、ステップS408で割り当てた不正電源断処理の退避先ブロックEFB1に書き込む(ステップS409)。
【0051】
不正電源断処理部66は、不揮発化していない論物変換テーブル37を含む管理情報を、ステップS408で割り当てた不正電源断処理の退避先ブロックEFB1に書き込む(ステップS410)。この管理情報は、退避先ブロックに追記するようにする。また、管理情報の書き込みは、論物変換テーブルなどのテーブル全体を書き込むのではなく、不揮発化していない管理情報のみを例えば更新前後の差分情報として書き込むようにしたほうがよい。
【0052】
不正電源断処理部66は、RMW処理を中断した場合は、少なくとも、このRMW処理で更新する更新データ(例えば、ホスト1から受信したデータ)と、この更新データの論理アドレス(LBA)を含む管理情報を、退避先ブロックEFB1に追記するようにする(ステップS411)。なお、RMW処理に関しては、後で詳述する。
【0053】
これ以降、不正電源断処理部66は、NAND10に対する動作を一切行わず、その後、電池55が切れる。
【0054】
(不正電源断後の電源投入時動作)
つぎに、図6を用いて不正電源断が発生した後の電源投入時の動作について説明する。この電源投入時の動作は、不正電源断処理部66によって実行される。不正電源断後の電源投入時動作時に、新たな不正電源断が繰り返し発生する可能性がある。そこで、退避先ブロックEFB1に退避したデータや管理情報のための新たな退避先としてのフリーブロックをFB管理リスト38の先頭から選択することにより、FB管理リスト38で最先に使用すべきであると管理されているフリーブロックを選択し、選択したフリーブロックを消去処理して消去済みフリーブロックとしておく。また、退避先ブロックEFB1に退避したデータを読み出して最終的に書き込むためのフリーブロックをFB管理リスト38の先頭から選択し、選択したフリーブロックも消去処理して消去済みフリーブロックとしておく。また、退避先ブロックEFB1に退避した論物変換情報を整合して最終的に書き込むためのフリーブロックをFB管理リスト38の先頭から選択し、選択したフリーブロックも消去処理して消去済みフリーブロックとしておく。さらに、不正電源断後に電源投入処理が完了したことを示す管理情報などを書き込むためのフリーブロックをFB管理リスト38の先頭から選択し、選択したフリーブロックも消去処理して消去済みフリーブロックとしておく。
【0055】
このように、不正電源断後の電源投入時に、FB管理リスト38を用いて
・退避先ブロックに退避したデータ、管理情報のための新たな退避先消去済みブロックB1
・退避したデータを最終的に書き込むための新たな消去済みブロックB2
・退避した論物変換情報を最終的に書き込むための新たな消去済みブロックB3
・不正電源断後に電源投入時処理が完了したことを示す管理情報などを書き込む新たな消去済みブロックB4
を最初に確保しておく(ステップS501)。これらのブロックB1〜B4の選択は、FB管理リスト38を用いて行われる。したがって、不正電源断と、電源投入が繰り返し発生した場合でも、上記ブロックB1〜B4としては、同じ(ID番号を持つ)ブロックが選択されて、消去済みブロックとして再利用される。このため、不正電源断と、電源投入が繰り返し発生した場合でも、NAND10の書き込み先が枯渇することを防止することが可能となる。なお、FB管理リスト38にフリーブロックが不足している場合は、NAND10の整理を行ってフリーブロックを確保する。
【0056】
なお、不正電源断後の電源投入時処理の際に、不正電源断が再度発生した場合、不正電源断処理中に、上記ブロックB1〜B4のブロック識別子を退避先ブロックに記憶しておき、その後の電源投入時処理の際に、退避先ブロックに記憶しておいたブロック識別子を読み出すことで、同じブロックを再利用するようにしてもよい。
【0057】
つぎに、不正電源断処理部66は、退避先ブロックEFB1から、RMWの退避情報である、RMWの管理情報(例えば、更新データのLBA)を読み出し、例えば、DRAM32に一時記憶する(ステップS502)。
【0058】
不正電源断処理部66は、退避先ブロックEFB1から論物変換情報を読み出し、例えば、DRAM32に一時記憶する(ステップS503)。
【0059】
電源投入時の通常処理として、NAND10からNAND管理テーブル202が読み出され、DRAM32にマスターテーブル36として書き込まれる。不正電源断処理部66は、退避先ブロックEFB1から読み出した論物変換情報で、マスターテーブル36の論物変換テーブル37を更新して統合し、マスターテーブル36の論物変換テーブル37の整合性を回復する。その後、この論物変換テーブル37は、ステップS501で用意した消去済みブロックB3に書き込む(ステップS504)。
【0060】
不正電源断処理部66は、退避先ブロックEFB1からユーザデータを読み出し、例えば、DRAM32に一時記憶する(ステップS505)。
【0061】
不正電源断処理部66は、ステップS505で読み出したデータがRMWに関するデータであればRMWを行い、単なるライト処理であればライト処理を行う。RMWまたはライトでは、ステップS501で用意した消去済みブロックB2に対してデータを書き込む(ステップS506)。RMWについては、後で詳述する。RMWにおいて、NAND10から読み込んだユーザデータに読み込みエラーがあれば、誤り訂正回路25で誤り訂正する。
【0062】
不正電源断処理部66は、不正電源断後の電源投入処理が完了したことを、管理情報として、ステップS501で用意した消去済みブロックB4に書き込む(ステップS507)。
【0063】
不正電源断処理部66は、不正電源断処理で退避情報を格納していた退避先ブロックEFB1をフリーブロックとし、FB管理リスト38に登録する(ステップS508)。
【0064】
なお、この不正電源断後の電源投入時処理の途中に不正電源断が発生した場合は、不揮発化されていないユーザデータ、および不揮発化されていない論物変換情報を含む管理情報を、ステップS501で用意した新たな退避先消去済みブロックB1に退避する。
【0065】
つぎに、図7、図8を用いてRMWについて説明する。図7は、不正電源断を挟むRMW処理を概念的に示す図である。不正電源断が発生すると、不正電源断処理部66(バックエンド部30)は、NANDコントローラ20からの読み込みおよび誤り訂正を中止する。そのため不正電源断が発生した時点で実行中であったRMWを中止し、電源投入後に再実行する。NAND10への書き込みはページ単位で行う必要がある。そのため不正電源断処理においては、不正電源断時に、不揮発化されずにDRAM32に記憶されていたデータ(図7(a)参照;LBA1のセクタデータ、LBA3のセクタデータ、LBA4のセクタデータ)の他のLBAのセクタ部分にダミーデータを埋め込み、このダミーデータを含むページデータ(図7(b)参照)を、図5のステップS411で、退避先ブロックに対し、書き込む。
【0066】
図8は、不正電源断後の電源投入時のRMWの動作手順を示すものである。まず、不正電源断処理部66は、退避先ブロックEFB1から、RMWの退避情報である、RMWの管理情報(例えば、更新データのLBA)を読み出し、例えば、DRAM32に一時記憶する(ステップS701)。
【0067】
RMWの退避情報としては、前述したように、RMW処理で更新する更新データと、この更新データの論理アドレス(LBA)を採用すれば、その後の電源投入時処理で、更新データのLBAを用いて新たに論物変換テーブル37を検索することで、RMW処理を再開することが可能である。
【0068】
論物変換テーブル37を検索することなくRMW処理の再開を可能とするために、RMWの退避情報として、つぎのような冗長情報を採用するようにしてもよい。
・更新データ
・RMW対象データ位置情報:RMW対象の更新データのLBA(セクタ)が属するNAND10上の位置(ページ)
・RMW−LBAマップ情報:RMW対象のページ内に所属する各LBAが更新データであるかあるいは元々NAND10上に保存されていたデータであるかを識別する情報
【0069】
RMWで退避する管理情報として、冗長情報を採用した場合は、図5のステップS411において、RMW対象データ位置情報と、RMW−LBAマップ情報を管理情報として退避先ブロックEFB1に退避する。また、図6のステップS502、図7のステップS701において、RMW対象データ位置情報と、RMW−LBAマップ情報を管理情報として退避先ブロックEFB1から読み出す。なお、RMW−LBAマップ情報のみを退避する管理情報としてもよい。その場合は、RMW−LBAマップ情報と、論物変換テーブル37を用いて、RMW対象データ位置情報を取得する。
【0070】
つぎに、不正電源断処理部66は、退避先ブロックEFB1から、RMWの退避情報である、ダミーデータ付き更新データを読み出し、例えば、DRAM32に一時記憶する(ステップS702)。
【0071】
つぎに、不正電源断処理部66は、RMW対象データ位置情報に基づきあるいは論物変換テーブル37に基づきRMW対象の更新データのLBA(セクタ)が属するNAND10上のページデータ(図7(d)参照)を読み出し、例えば、DRAM32に一時記憶する(ステップS703)。
【0072】
つぎに、不正電源断処理部66は、図7(c)に示すように、退避先ブロックEFB1から読み込んだダミーデータ付き更新データと、NAND10の通常領域から読み込んだページデータとを統合し、統合したページデータをNAND10に書き込む(ステップS704)。この書き込みに伴って、マスターテーブル36の論物変換テーブル37を更新し、更新された論物変換テーブル37をNAND10で不揮発化する。
【0073】
このようにこの実施形態では、常に少なくとも1つの消去済みフリーブロックを確保するようにしており、この消去済みのフリーブロックを不正電源断時の不揮発化処理のための書き込み先としても使用する。このため、不正電源断処理中には、NANDの消去処理は発生せず、また消去を失敗したときの再試行も発生せず、その分の処理時間も不正電源断処理中に発生しない。このため、この実施形態では、不正電源断処理に要する時間が短縮され、容量の少ないバックアップ電源を用いた場合でも、所要の不正電源断処理を完結させることが可能となる。
【0074】
また、この実施形態では、不正電源断処理においては、ブロックの消去、NAND10からの読み出しを中止し、不揮発化が完了していないデータおよび該データに関する論物変換情報を、不正電源断通知前に予め用意している消去済みフリーブロックに書き込む不揮発化処理を行うようにしているので、不正電源断処理に要する時間が短縮され、容量の少ないバックアップ電源を用いた場合でも、所要の不正電源断処理を完結させることが可能となる。
【0075】
また、この実施形態では、不正電源断処理中に仕掛り中の読み出しについて、誤り訂正処理を中止することとしているので、誤り訂正によってデータを復元するのに時間がかかることがなくなり、不正電源断処理に要する時間が短縮され、容量の少ないバックアップ電源を用いた場合でも、所要の不正電源断処理を完結させることが可能となる。因みに、従来技術では、不正電源断発生後に読み込みを停止しないため、不揮発性メモリから読み込んだユーザデータを誤り訂正すると、電池が切れるまでに不正電源断処理が完了しない可能性がある。
【0076】
また、この実施形態では、不正電源断時にNANDの整理を行っている場合は、不正電源断処理時にNANDの整理を中止させるようにしているので、不正電源断処理に要する時間が短縮され、容量の少ないバックアップ電源を用いた場合でも、所要の不正電源断処理を完結させることが可能となる。
【0077】
また、この実施形態では、不正電源断時にRMWを行っている場合は、不正電源断処理時にRMWを中止させるようにしているので、不正電源断処理に要する時間が短縮され、容量の少ないバックアップ電源を用いた場合でも、所要の不正電源断処理を完結させることが可能となる。
【0078】
また、この実施形態では、不正電源断後の電源復帰時処理の際に、退避データの新たな退避先としての消去済みブロックと、退避データおよび退避データに関する論物変換情報の最終的な書き込み先としての消去済みブロックと、不正電源断後に電源投入時処理が完了したことなどを示す管理情報の書き込み先としての消去済みブロックとを、フリーブロック管理リストに基づき選択して予め用意することとしたので、不正電源断と、電源投入が繰り返し発生した場合でも、上記消去済みブロックとしては同じブロックが使用されることとなり、不正電源断と、電源投入が繰り返し発生した場合でも、NANDの書き込み先が枯渇することを防止することが可能となる。
【0079】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0080】
1 ホスト装置、5 ホストインタフェース、10 NAND型フラッシュメモリ(NAND)、20 NANDコントローラ、25 誤り訂正回路、30 バックエンド部、34 ライトバッファ、35 リードバッファ、36 マスターテーブル、37 論物変換テーブル、38 フリーブロック管理リスト、40 フロントエンド部、50 電源回路、55 電池、60 コントローラ、61 コマンド処理部、62 読み書き制御部、63 NAND整理部、64 フリーブロック管理部、65 消去済みブロック管理部、66 不正電源断処理部。

【特許請求の範囲】
【請求項1】
揮発性の第1のメモリと、
データ消去の単位であるブロックが複数個形成された不揮発性の第2のメモリと、
前記第2のメモリに保存される管理情報であって、ホスト装置で指定される論理アドレスと前記第2のメモリでの物理的なデータの記憶位置とを対応付ける論物変換情報を含む管理情報を前記第1のメモリに転送し、該転送された管理情報を用いて、前記ホスト装置からのデータを前記第1のメモリを介して前記第2のメモリに書き込むとともに、前記第2のメモリから読み出したデータを前記第1のメモリを経由して前記ホスト装置に送信する読み書き制御部を有するコントローラと、
バックアップ電源を有し、外部から供給された電力を記憶装置内の各部に供給する電源回路と、
を備え、
前記電源回路は、前記外部からの電力の供給が断たれたことを検出すると、前記バックアップ電源からの電力を記憶装置内の各部に供給し、
前記コントローラは、
前記外部からの電力の供給が断たれる前の通常時に、前記第2のメモリに少なくとも1つの消去済みフリーブロックが予備のブロックとして常に確保されているように消去済みフリーブロックを作成する消去済みブロック管理部と、
前記外部からの電力の供給が断たれた場合、前記予備のブロックを使用して不揮発化が完了していないデータおよび該データに関する前記論物変換情報を書き込む不揮発化処理を実行する電源断時制御部と、
を備える記憶装置。
【請求項2】
前記消去済みブロック管理部は、電源投入後、予め少なくとも一つの消去済みフリーブロックを予備ブロックとして確保しておき、前記第2のメモリに書き込みを行う際には、前記予備ブロックとは異なる消去済みフリーブロックを作成した後、前記予備ブロックに対し書き込みを行い、今回作成した消去済みフリーブロックを次の書き込みを行う際に使用する予備ブロックとする請求項1に記載の記憶装置。
【請求項3】
揮発性の第1のメモリと、
データ消去の単位であるブロックが複数個形成された不揮発性の第2のメモリと、
前記第2のメモリに保存される管理情報であって、ホスト装置で指定される論理アドレスと前記第2のメモリでの物理的なデータの記憶位置とを対応付ける論物変換情報を含む管理情報を前記第1のメモリに転送し、該転送された管理情報を用いて、前記ホスト装置からのデータを前記第1のメモリを介して前記第2のメモリに書き込むとともに、前記第2のメモリから読み出したデータを前記第1のメモリを経由して前記ホスト装置に送信する読み書き制御部を有するコントローラと、
バックアップ電源を有し、外部から供給された電力を記憶装置内の各部に供給する電源回路と、
を備え、
前記電源回路は、前記外部からの電力の供給が断たれたことを検出すると、前記バックアップ電源からの電力を記憶装置内の各部に供給し、
前記コントローラは、
前記外部からの電力の供給が断たれた場合、前記ブロックの消去、前記第2のメモリからの読み出しを中止し、不揮発化が完了していないデータおよび該データに関する前記論物変換情報を、不正電源断通知前に予め用意している前記第2のメモリの消去済みフリーブロックに書き込む不揮発化処理を行う電源断時制御部
を備える記憶装置。
【請求項4】
前記第2のメモリに対して書き込むデータおよび前記第2のメモリから読み出すデータに対する誤り訂正処理を実行する誤り訂正部をさらに備え、
前記電源断時処理部は、
前記外部からの電力の供給が断たれた場合、前記誤り訂正部での誤り訂正処理を中止させる請求項3に記載の記憶装置。
【請求項5】
前記コントローラは、
前記第2のメモリに記憶された有効データを複数選択して新たなブロックに書き直すデータ整理を行う整理部を更に備え、
前記電源断処理部は、
前記外部からの電力の供給が断たれた場合、前記整理部でのデータ整理を中止させる請求項3または請求項4に記載の記憶装置。
【請求項6】
前記電源断処理部は、前記外部からの電力の供給が断たれた場合、前記第2のメモリからデータを読み出し、読み出したデータに変更を加えて、再び前記第2のメモリに書き戻すリードモディファイライト処理を行っている場合は、このリードモディファイライト処理を中止し、このリードモディファイライト処理で前記変更すべきデータおよび該変更すべきデータに関する論理アドレスを含む管理情報を前記第2のメモリの消去済みフリーブロックに退避する不揮発化処理を行う請求項3乃至請求項5の何れか一つに記載の記憶装置。
【請求項7】
書き込み先ブロックとして選択するフリーブロックの順番を管理するフリーブロック管理部を更に備え、
前記電源断処理部は、前記外部からの電力の供給が断たれた後の電源投入時、前記フリーブロック管理部で管理されている順番にしたがってフリーブロックを選択し、選択したフリーブロックを消去した消去済みフリーブロックを、前記不揮発化した情報に関連する情報の書き込み先ブロックとして使用する請求項3乃至請求項6の何れか一つに記載の記憶装置。
【請求項8】
揮発性の第1のメモリと、データ消去の単位であるブロックが複数個形成された不揮発性の第2のメモリと、バックアップ電源を有し、外部から供給された電力を記憶装置内の各部に供給するとともに、前記外部からの電力の供給が断たれたことを検出すると、前記バックアップ電源からの電力を記憶装置内の各部に供給する電源回路とを備え、前記第2のメモリに保存される管理情報であって、ホスト装置で指定される論理アドレスと前記第2のメモリでの物理的なデータの記憶位置とを対応付ける論物変換情報を含む管理情報を前記第1のメモリに転送し、該転送された管理情報を用いて、前記ホスト装置からのデータを前記第1のメモリを介して前記第2のメモリに書き込むとともに、前記第2のメモリから読み出したデータを前記第1のメモリを経由して前記ホスト装置に送信する記憶装置の制御方法であって、
前記外部からの電力の供給が断たれる前の通常時に、前記第2のメモリに少なくとも1つの消去済みフリーブロックが予備のブロックとして常に確保されているように消去済みフリーブロックを作成し、
前記外部からの電力の供給が断たれた場合、前記予備のブロックを使用して不揮発化が完了していないデータおよび該データに関する前記論物変換情報を書き込む不揮発化処理を実行する
記憶装置の制御方法。
【請求項9】
揮発性の第1のメモリと、データ消去の単位であるブロックが複数個形成された不揮発性の第2のメモリと、バックアップ電源を有し、外部から供給された電力を記憶装置内の各部に供給するとともに、前記外部からの電力の供給が断たれたことを検出すると、前記バックアップ電源からの電力を記憶装置内の各部に供給する電源回路とを備える記憶装置を制御するコントローラであって、
前記第2のメモリに保存される管理情報であって、ホスト装置で指定される論理アドレスと前記第2のメモリでの物理的なデータの記憶位置とを対応付ける論物変換情報を含む管理情報を前記第1のメモリに転送し、該転送された管理情報を用いて、前記ホスト装置からのデータを前記第1のメモリを介して前記第2のメモリに書き込むとともに、前記第2のメモリから読み出したデータを前記第1のメモリを経由して前記ホスト装置に送信する読み書き制御部と、
前記外部からの電力の供給が断たれる前の通常時に、前記第2のメモリに少なくとも1つの消去済みフリーブロックが予備のブロックとして常に確保されているように消去済みフリーブロックを作成する消去済みブロック管理部と、
前記外部からの電力の供給が断たれた場合、前記予備のブロックを使用して不揮発化が完了していないデータおよび該データに関する前記論物変換情報を書き込む不揮発化処理を実行する電源断時制御部と、
を備えるコントローラ。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate


【公開番号】特開2013−61799(P2013−61799A)
【公開日】平成25年4月4日(2013.4.4)
【国際特許分類】
【出願番号】特願2011−199855(P2011−199855)
【出願日】平成23年9月13日(2011.9.13)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】