メモリシステム
【課題】データ記憶の信頼性を容易に高めることができるメモリシステムを提供する。
【解決手段】実施形態のメモリシステムは、揮発性の第1の記憶部を介してホスト装置と不揮発性の第2の記憶部との間のデータ転送を行うコントローラを備えている。前記コントローラは、前記第2の記憶部に記憶されたデータの格納位置を含む管理情報を前記第1および第2の記憶部で更新しながら前記管理情報に基づいてデータ管理を行う。前記コントローラは、最新状態の管理情報と、当該管理情報の前記第2の記憶部での保存位置を示すポインタと、前記ポインタの書込みが成功したか否かを示すログとを、前記ポインタを多重化して前記第2の記憶部に記憶させる。前記コントローラは、起動時に前記ポインタが所望数だけ多重化されていなければ、前記ポインタおよび/または前記ログに基づいて、前記ポインタの多重化をリカバリ処理する。
【解決手段】実施形態のメモリシステムは、揮発性の第1の記憶部を介してホスト装置と不揮発性の第2の記憶部との間のデータ転送を行うコントローラを備えている。前記コントローラは、前記第2の記憶部に記憶されたデータの格納位置を含む管理情報を前記第1および第2の記憶部で更新しながら前記管理情報に基づいてデータ管理を行う。前記コントローラは、最新状態の管理情報と、当該管理情報の前記第2の記憶部での保存位置を示すポインタと、前記ポインタの書込みが成功したか否かを示すログとを、前記ポインタを多重化して前記第2の記憶部に記憶させる。前記コントローラは、起動時に前記ポインタが所望数だけ多重化されていなければ、前記ポインタおよび/または前記ログに基づいて、前記ポインタの多重化をリカバリ処理する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、メモリシステムに関する。
【背景技術】
【0002】
近年、不揮発性半導体記憶装置であるNAND型フラッシュメモリの大容量化が進行し、このNAND型フラッシュメモリを搭載したメモリシステムとしてのSSD(Solid State Drive)が注目されている。このような、メモリシステムでは、データ記憶の信頼性を高めることが望まれている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開平5−282888号公報
【特許文献2】特開2009−211202号公報
【特許文献3】特開2010−157139号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
データ記憶の信頼性を容易に高めることができるメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【0005】
本発明の一つの実施形態によれば、メモリシステムが提供される。メモリシステムは、揮発性の第1の記憶部と、不揮発性の第2の記憶部と、前記第1の記憶部を介してホスト装置と前記第2の記憶部との間のデータ転送を行うコントローラと、を備えている。前記コントローラは、起動時に前記第2の記憶部に記憶されたデータの格納位置を含む管理情報を前記第1の記憶部に取込み、前記データ転送の際には前記管理情報を前記第1および第2の記憶部で更新しながら前記管理情報に基づいて前記第1および第2の記憶部でのデータ管理を行う。また、前記コントローラは、前記第1の記憶部に取り込まれた最新状態の管理情報と、前記最新状態の管理情報の保存位置を示すポインタと、前記ポインタの書込みが成功したか否かを示すログと、を前記第2の記憶部に記憶させる。また、前記コントローラは、前記ポインタを多重化して前記第2の記憶部に記憶させておく。そして、前記コントローラは、起動時に前記ポインタが所望の数だけ多重化されていないことを検出した場合、前記ポインタおよび/または前記ログに基づいて、前記ポインタの多重化をリカバリ処理する。
【図面の簡単な説明】
【0006】
【図1】図1は、SSDの構成例を示すブロック図である。
【図2】図2は、第1の実施形態に係る管理情報とポインタ&ログ情報の格納位置を模式的に示す図である。
【図3】図3は、第1の実施形態に係るポインタ&ログ情報の構成例を示す図である。
【図4】図4は、第1の実施形態に係るポインタの内容およびログの内容を示す図である。
【図5】図5は、第1の実施形態に係るポインタおよびログの読み出し手順を説明するための図である。
【図6】図6は、何れの位置にリカバリ処理を行うかの判定処理手順を示すフローチャートである。
【図7】図7は、何れの位置にリカバリ処理を行うかの判定処理結果を示す図である。
【図8】図8は、第2の実施形態に係るポインタ情報およびログ情報の格納位置を模式的に示す図である。
【図9】図9は、第2の実施形態に係るポインタ情報とログ情報の構成例を示す図である。
【図10】図10は、第2の実施形態に係るポインタの内容およびログの内容を示す図である。
【図11】図11は、第2の実施形態に係るポインタおよびログの読み出し手順を説明するための図である。
【図12】図12は、第3の実施形態に係るポインタ情報およびログ情報の格納位置を模式的に示す図である。
【図13】図13は、第3の実施形態に係るポインタ情報とログ情報の構成例を示す図である。
【図14】図14は、SSDを搭載したパーソナルコンピュータの一例を示す斜視図である。
【図15】図15は、SSDを搭載したパーソナルコンピュータのシステム構成例を示す図である。
【発明を実施するための形態】
【0007】
以下に添付図面を参照して、実施形態に係るメモリシステムを詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【0008】
(第1の実施形態)
図1は、SSDの構成例を示すブロック図である。NAND型フラッシュメモリ(以下、NANDメモリと略す)10を用いた半導体記憶装置の一例であるSSD(Solid State Drive)100は、メモリシステムなどに適用される。本実施形態のSSD100は、不揮発に保存したい重要なデータ(管理情報)と、管理情報の格納位置を示すポインタに関する情報(後述のポインタ&ログ情報4など)とを、信頼性を確保するために多重化(例えば4重化)してNANDメモリ10内に記憶しておく。
【0009】
NANDメモリ10内で保存される管理情報は、ある時点における不揮発性テーブルの内容であるスナップショットと、不揮発性テーブルの内容に変化があった場合に内容を変更した後の不揮発性テーブルとスナップショット(後述のスナップショット210)との差分情報であるログ(後述のスナップショット用ログ220)と、を有している。
【0010】
また、NANDメモリ10内で保存されるポインタ&ログ情報4は、管理情報のNANDメモリ10内における格納位置を示すポインタと、このポインタが正しく書込まれたか否かを示すログと、を有している。ポインタは、管理情報の保存場所にアクセスするための情報である。また、ログは、ポインタの書き込み(更新)が成功したか否かを示す処理記録(ポインタのログ)である。本実施形態では、ポインタと、ログと、を多重化してNANDメモリ10に保存しておく。
【0011】
メモリシステムでは、システム起動時に、多重化されていたポインタの何れかがブロックの故障などによって読み出せなかった場合、読み出せなかったポインタを書き直すことによって、ポインタの多重化を維持する。本実施形態では、読み出せなかったポインタの書き直し処理を、リカバリ処理という。本実施形態では、ポインタとともにログを記憶しておくことにより、ログを用いてリカバリ処理を行う。これにより、リカバリ処理を効率良く行う。なお、リカバリ処理の際には、ポインタの書き直し処理後に、ログの書き直し処理も行われる。
【0012】
SSD100は、ATAインタフェース(ATA I/F)などのメモリ接続インタフェースであるホストI/F(図示せず)を介してパーソナルコンピュータあるいはCPUコアなどのホスト装置(以下、ホストと略す)1と接続され、ホスト1の外部メモリとして機能する。
【0013】
SSD100は、ホスト1の2次記憶装置として使用され、ホスト1から書込要求が出されたデータを記憶するとともに、ホスト1から読出要求のあったデータを読出してホスト1に出力する機能を有している。
【0014】
SSD100は、揮発性半導体メモリとしてのDRAM20と、データ管理などを行うコントローラ30と、不揮発性半導体メモリとしてのNANDメモリ10と、を備えている。
【0015】
NANDメモリ10は、複数のNANDメモリチップを有する。個々のNANDメモリチップは、後述する複数のブロックを有する。また、各NANDメモリチップは、チャネルを介してそれぞれ並列にコントローラ30に接続されている。1つのチャネルに接続されるNANDメモリの数は1個に限らず、複数のNANDメモリが入出力線を共有した状態で接続されていてもよい。
【0016】
NANDメモリ10の各NANDメモリチップは、例えば、複数のチャネルによる並列動作、複数のLaneによるインターリーブ動作が可能である。本実施形態では、並列動作できる2つのチャネル(1つのLane)にそれぞれ接続されたNANDメモリに含まれるブロック対して、データの並列書き込みを行う場合について説明する。各ブロックは、多重化の効果を高めるため、異なるNANDメモリチップに配置されているものとする。なお、本実施形態では複数(例えば2個)のチャネルでLaneを構成してデータの並列書き込みを行い、Lane間でインターリーブ動作を行う場合を想定するが、全てのチャネルが並列動作する構成であってもよい。
【0017】
NANDメモリ10は、データを書き込むためにはその前に消去を必要とする。また、NANDメモリ10では、消去単位と書き込み単位が異なる。NANDメモリ10は、例えば、消去単位がブロック単位であり、かつ書き込み単位がページ単位である。また、NANDメモリ10は、書き込み順序が連続するよう規定されている。換言すると、書き込みについてはページに上書きは出来ず、1ページずつページ昇順に追記するよう規定されている。
【0018】
DRAM20は、ホスト1とNANDメモリ10との間でのデータ転送用キャッシュおよび作業領域用メモリなどとして機能する。DRAM20の作業領域用メモリに記憶されるものとしては、管理テーブル、DRAM上ログ、ポインタ&ログ情報4、ユーザデータなどがある。
【0019】
管理テーブルは、NANDメモリ10に記憶されている管理情報が起動時などに展開されたマスターテーブル(スナップショット用ログ220を反映したスナップショット210)である。管理テーブルは、ホスト1から指定された論理アドレスと物理的なデータの記憶位置とを対応付ける管理情報を管理するための情報テーブルである。
【0020】
DRAM上ログは、NANDメモリ10に格納されるスナップショット用ログ220と同様のデータであり、管理テーブルの変更差分である。ユーザデータの書き込みや、管理テーブルへのデータの読み書きを行う際には、DRAM20上に管理テーブルが展開される。
【0021】
管理テーブルの差分であるDRAM上ログは、ユーザデータの書き込みや保存先ブロックの変更などがあった場合にDRAM20上にいったん保存されるが、一定量たまったところで、スナップショット用ログ220としてNANDメモリ10に書き込まれる。換言すると、SSD100は、SSD100が動作している間、所定のタイミングで、スナップショット用ログ220を管理テーブルに反映するとともに、スナップショット用ログ220としてNANDメモリ10に保存する。また、SSD100は、SSD100が動作している間、所定のタイミングで管理テーブルを、スナップショット210としてNANDメモリ10に保存する。
【0022】
具体的には、DRAM20上では、DRAM上ログとなる各ログデータが順番に時系列で並ぶよう記憶される。そして、データの更新が安定したら、DRAM上ログがスナップショット用ログ220としてNANDメモリ10に書き込まれる。NANDメモリ10では、スナップショット用ログ220が順番に時系列で並ぶよう記憶される。そして、スナップショットのNANDメモリ10への保存が終了すると、管理テーブルを保存する前にNANDメモリ10に書き込まれたスナップショット用ログ220は不要になる。
【0023】
なお、DRAM20の代わりに、FeRAM(Ferroelectric Random Access Memory)、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase change Random Access Memory)などを使用してもよい。
【0024】
データ管理部であるコントローラ30は、ホスト1とNANDメモリ10との間でDRAM20を介してデータ転送制御を行う。また、コントローラ30は、NANDメモリ10内でのデータの消去、書き込み、読み出し、多重化が成功しているかの判定などを行う。本実施形態のコントローラ30は、NANDメモリ10のデータの並列書き込みを行なう機能を有している。
【0025】
コントローラ30は、ブロック管理部31、システム管理部32、ATAコマンド処理部33、データ転送部34を有している。ブロック管理部31は、NANDメモリ10内の各ブロックを管理する。本実施形態のブロック管理部31は、管理情報の格納位置が更新されると、ポインタの更新要求をシステム管理部32に行う。また、ブロック管理部31は、システム管理部32からポインタの更新処理結果を受けると、ログの更新(NANDメモリ10上への追記)を行うとともに、次回のシステム起動時にシステム管理部32へのリカバリ要求を行う。
【0026】
システム管理部32は、ポインタの更新とリカバリ処理を行う。システム管理部32は、ブロック管理部31による管理情報の再構築完了後に、ブロック管理部31からポインタの更新要求を受けると、ポインタの更新処理を行い、更新処理結果をシステム管理部32に送る。システム管理部32は、次回のシステム起動時にログをブロック管理部31から得るとともに、ログを用いてポインタのリカバリ処理を実行する。
【0027】
ATAコマンド処理部33は、ホスト1とのコマンドインターフェースを行なう。データ転送部34は、DRAM20を介してNANDメモリ10とホスト1との間のデータインターフェース(データ転送)を行なう。
【0028】
また、コントローラ30は、NANDメモリ10に記憶された管理情報を、管理テーブルとしてシステム起動時にDRAM20に転送する。また、コントローラ30は、管理情報を更新すべき事象が発生した際、DRAM20に記憶されている管理テーブルの更新前後の差分情報をDRAM上ログとしてDRAM20に記憶させる。また、コントローラ30は、所定の条件が成立したときにDRAM上ログをNANDメモリ10に順次追記記憶させるとともに、DRAM上ログの内容をDRAM20に記憶されている管理情報に反映する。
【0029】
また、本実施形態のコントローラ30は、管理情報のNANDメモリ10内での格納位置を示すポインタと、ポインタのログと、をポインタ&ログ情報4としてNANDメモリ10に記憶させる。ポインタは、管理情報が更新されることによってその保存場所が変わる場合に更新する必要がある。更新の際は、NANDメモリ10の特性から、別のページに新しいポインタを書き込むことになる。また、更新途中のシステム電源遮断やNANDメモリ10のページ書き込み失敗によって更新処理が正常に完了しない場合が有りうるので、更新の際にはポインタのログも同時にNANDメモリ10内に保存しておく。これにより、次回のシステム起動時に、ポインタおよびログに基づいて、更新処理が正常に行なわれたか否かを判断できるようにしておく。
【0030】
ところで、メモリなどは、データのWrite/Erase回数の増大による劣化、Readの繰り返しによる劣化、経年劣化などによって不良率が増加する傾向にある。このため、書き込み時にデータの書き込みが成功していてもデータ破壊が発生する場合がある。また、データの書き込み中に不正な電源断が発生する場合がある。この場合であっても、システムの信頼性を向上させるためには、ポインタやログの多重化を維持しておくことが望まれる。そこで、本実施形態では、多重化されていたポインタの何れかをシステム起動時に読み出せなかった場合(更新処理が正しく行なわれていなかった場合)にリカバリ処理を行う。これにより、SSD100の信頼性を高める。
【0031】
そのため、NANDメモリ10へは、ある時点でのポインタ全体と、ポインタを保存した時点でのログという形式でポインタ&ログ情報4を保存しておく。そして、ポインタを更新する条件が成立した場合に、ポインタをNANDメモリ10に記憶させ、その後、ポインタの記憶が成功した否かを示すログをNANDメモリ10に記憶させる。
【0032】
図2は、第1の実施形態に係る管理情報とポインタ&ログ情報の格納位置を模式的に示す図である。NANDメモリ10のうち、管理情報45およびポインタ&ログ情報4が保存される管理情報保存領域400には、固定領域40Aと、可変領域41Aと、がある。
【0033】
固定領域40Aは、静的に確保されたブロックで構成される領域であり、可変領域41Aは、動的に確保されたブロックで構成される領域である。固定領域40Aには、ポインタ&ログ情報4が格納されている。ポインタ&ログ情報4は、メモリシステムの起動時に固定的に参照できる情報である必要があるので、静的に割り当てられたブロックで構成される固定領域40Aに格納される。また、可変領域41Aには、管理情報45が格納される。管理情報45は、スナップショット210と、スナップショット用ログ220と、を有している。
【0034】
固定領域40Aは、NANDメモリ10において、論理ブロックと物理ブロックとの関係が固定化している領域であり、書換えや書込みがほとんど発生しない更新頻度の低い領域である。このため、固定領域40Aは、メモリシステムを稼働させるのに必要な情報が格納される領域として用いられる。たとえば、固定領域40Aでは、現在書込み中のブロックがすべて満たされた場合には、固定領域40A内の他のブロックにデータを書込むのではなく、ブロック内のデータを消去した後に消去したブロックの先頭ページから書込むように設定されている。
【0035】
一方の可変領域41Aは、固定領域40Aを除くNANDメモリ10の領域において、論理ブロックと物理ブロックとの関係が変化する領域である。たとえば、可変領域41Aでは、現在書込み中のブロックがすべて満たされた場合には、可変領域41A内で書込可能なフリーブロックとなっている他のブロックに次の情報を書込むように設定された領域である。なお、この可変領域41Aは、上記したようにNANDメモリ10中の固定領域40Aを除いた領域であり、管理情報45が格納される領域のほかに、ホスト1から書込要求のあったデータが格納されるデータ格納領域も含まれる。つまり、固定領域40Aを除いたNANDメモリ10中の物理的な領域を可変領域41Aとし、この中で、データ格納領域と、管理情報が格納される領域とが機能的に分離されている。
【0036】
ブロック管理部31には、システム起動時にアクセスする位置として固定領域40A内の所定位置(ポインタ&ログ情報4の格納位置)を保存しておく。そして、システム起動時には、ブロック管理部31がポインタ&ログ情報4にアクセスして、ポインタ&ログ情報4を取得する。
【0037】
なお、NANDメモリ10が多値メモリで構成される場合であっても、固定領域40Aは、ポインタ&ログ情報4のデータの信頼性を高めるために、2値モードで使用することが望ましい。
【0038】
つぎに、ポインタ&ログ情報4の保存方法について説明する。図3は、第1の実施形態に係るポインタ&ログ情報の構成例を示す図である。図3では、ポインタ&ログ情報4が、ブロック0,1からなるLane0とブロック2,3からなるLane1とを用いて、固定領域40A内に保存される場合について説明する。
【0039】
ポインタ&ログ情報4は、NANDメモリ10の故障が原因で読み出しに失敗した場合、システムが起動できなくなるので、図3に示すように複数のブロック(ブロック0〜3)に同一のポインタA1をコピーして保存しておく。これにより、1ブロックが故障した場合であっても他ブロックからポインタA1を読めるようにしておく。具体的には、ブロック0〜3の同一ページにポインタA1を保存することによって、ポインタA1の多重化を行う。
【0040】
同様に、複数のブロック(ブロック0〜3)に同一のログB1をコピーして保存しておく。これにより、1ブロックが故障した場合であっても他ブロックからログB1を読めるようにしておく。具体的には、ブロック0〜3の同一ページにログB1を保存することによって、ログB1の多重化を行う。
【0041】
本実施形態では、ポインタA1とログB1とを、同一のブロックに保存する。例えば、ブロック0のページ0には、ポインタA1が保存され、ブロック0のページ1には、ログB1が保存される。同様に、ブロック1〜3の各ページ0には、それぞれポインタA1が保存され、ブロック1〜3の各ページ1には、それぞれログB1が保存される。換言すると、NANDメモリ10内では、ポインタを格納する領域にログも含めて記憶しておく。これにより、各ページには、ポインタとログの何れかが保存されることになる。
【0042】
ポインタ&ログ情報4では、ブロック0〜3の第1のページ(例えばページ0)にポインタA1が保存された後、次のページである第2のページ(例えばページ1)にログB1が保存される。そして、第2のページの次のページである第3のページ(例えばページ2)にポインタA2(図示せず)が保存された後、次のページである第4のページ(例えばページ3)にログB2(図示せず)が保存される。このように、ポインタ&ログ情報4では、若いブロック番号から順番に各ブロックの同じページ番号のページに、同一のポインタまたはログが書き込まれる。これにより、ポインタ&ログ情報4では、ポインタとログとが交互に保存される。
【0043】
リカバリ処理を行う場合には、ポインタおよびログに基づいて、多重化が正しく行なわれていないブロックを含むLaneにポインタを書き直す。例えば、ブロック0またはブロック1に書込んだはずのポインタA1を、ブロック0またはブロック1から読出せない場合、Lane0(ブロック0および1)に対してリカバリ処理が行なわれる。
【0044】
つぎに、ポインタ内に格納される情報の内容例およびログ内に格納される情報の内容例について説明する。図4は、第1の実施形態に係るポインタの内容およびログの内容を示す図である。図4の(a)では、ポインタA1の構成例を示し、図4の(b)では、ログB1の構成例を示している。
【0045】
図4の(a)に示すように、ポインタA1は、ポインタA1の情報先頭からの位置(オフセット位置)を示す情報と、情報内容と、が対応付けされて構成されている。情報先頭からの位置が「0」の位置(先頭)には、ポインタA1とログB1の何れを格納しているか判定するための情報として、ポインタ/ログ判別フラグが格納されている。ここでは、ポインタを示す情報が格納されている。
【0046】
また、情報先頭からの位置が「1」の位置には、ポインタA1が何回目の更新であるかを示すシーケンス番号が格納されている。例えば、ポインタA1が、N回目(Nは自然数)の更新処理で格納されるポインタである場合、N回目の更新であることを示すシーケンス番号が格納される。また、情報先頭からの位置が「2」の位置には、管理情報45へのポインタ(NANDメモリ10内での格納位置を示す情報)が格納される。
【0047】
また、図4の(b)に示すように、ログB1は、ログB1の情報先頭からの位置(オフセット位置)を示す情報と、情報内容と、が対応付けされて構成されている。情報先頭からの位置が「0」の位置(先頭)には、ポインタ/ログ判別フラグが格納されている。ここでは、ログを示す情報が格納されている。
【0048】
また、情報先頭からの位置が「1」の位置には、ログB1(ポインタA1)が何回目の更新であるかを示すシーケンス番号が格納されている。例えば、スナップショット210を保存した後、N回目(Nは自然数)の更新処理で格納されるログの場合、N回目の更新であることを示すシーケンス番号が格納される。
【0049】
また、情報先頭からの位置が「2」以降の位置には、各ブロックへのページ書込みが成功したか、失敗したかを示す情報(書込み成否情報)が格納される。例えば、情報先頭からの位置が「2」の位置には、ブロック0へのページ書込みが成功したか、失敗したかを示す情報が格納される。また、情報先頭からの位置が「3」の位置には、ブロック1へのページ書込みが成功したか、失敗したかを示す情報が格納される。
【0050】
つぎに、ポインタA1およびログB1の読み出し手順について説明する。図5は、第1の実施形態に係るポインタおよびログの読み出し手順を説明するための図である。ポインタ&ログ情報4内からポインタA1またはログB1を読み出す際には、ブロック管理部31が、NANDメモリ10内からポインタ&ログ情報4を抽出して、システム管理部32に送る。
【0051】
システム管理部32は、ポインタ&ログ情報4内の各ブロック0〜3の中から一番後に更新されたページ(最新ページ)を検索する。換言すると、システム管理部32は、各ブロック内の書き込み済みページのうち、ページ番号が一番大きなページからデータを読み出す。このページには、ログまたは最新のポインタの何れかが保存されていることになる。
【0052】
システム管理部32は、読み出しに成功するまで、ブロック番号が若いブロックから順番に、最新ページのポインタまたはログを読み出す。ここでは、ブロック0、ブロック1、ブロック2、ブロック3の順番で、最新ページであるページ1内のデータが読み出される。
【0053】
システム管理部32は、ブロック0からのデータ読み出しに失敗して読み出しができなかった場合、ブロック1の同じページ番号のページからデータを読み出す。以降、読み出しができるまでブロックを移動して同じページ番号のページを読み出す処理を繰り返す。このように、多重化により複数ブロックの同じページ番号のページに同じポインタが書き込まれているので、1つのブロックのあるページからデータを読み出せない場合であっても他ブロックの同じページ番号のページから読み出せばよい。これにより、システムが起動できなくなるリスクを軽減している。
【0054】
読み出された情報は、ポインタ/ログ判別フラグにより、ポインタなのか、ログなのかの判断が可能である。読み出された情報がログである場合、1つページ番号が若いページにポインタが記録されていると判断できる。
【0055】
正常にポインタ&ログ情報4が更新されている場合、最後に書き込まれたページはログ情報である。図5に示すポインタ&ログ情報4の場合、ブロック0の最新ページであるページ1からログB1が読み出される(1)。この読み出しに失敗すると、ブロック1のページ1からログB1が読み出される(2)。さらに、この読み出しに失敗すると、ブロック2のページ1からログB1が読み出され(3)、この読み出しにも失敗すると、ブロック3のページ1からログB1が読み出される(4)。
【0056】
ブロック0〜3の何れかからログB1を読み出すことができた場合、ポインタA1の読み出し処理が行われる。このとき、システム管理部32は、ログB1内に格納されている、ブロック毎の書込み成否情報を読み出す。そして、システム管理部32は、読み出した書込み成否情報を参照して適切なブロック(ポインタの書き込みに成功しているブロック)からポインタの読み出しを行なう。このとき、システム管理部32は、読み出しに成功したブロックの中から最新ページの次に新しいページ(ここではページ0)からデータ(ポインタA1)を読み出す(5)。
【0057】
システム管理部32は、書込み成否情報に基づいて、複数のブロックに対してポインタA1の書込みが成功していると判断できた場合、書込みが成功しているブロックの中からブロック番号が最も若いブロックの2番目に新しいページ(ページ0)からデータを読み出す。そして、読み出しに失敗すると、ブロック番号が若い順番で次のブロックのページ0からポインタA1を読み出す処理が、読み出しに成功するまで繰り返される。システム管理部32は、読み出したログB1と、読み出したポインタA1と、に基づいて、リカバリ処理の必要性を判断する。
【0058】
なお、ポインタを書き込む途中でシステム電源遮断などにより、ログの書き込みに至る前に書き込みが終了している可能性がある。このため、最新ページから必ずしもログが読み出されるとは限らない。
【0059】
最新ページにポインタA1が格納されている場合、システム管理部32は、ブロック番号が若いブロックから順番に最新ページ内のポインタAyを読み出す。さらに、ブロック番号が若いブロックから最新ページの次のページ内のログB(y−1)を読み出す。システム管理部32は、読み出したログB(y−1)と、読み出した各ポインタAyと、に基づいて、リカバリ処理の必要性を判断する。
【0060】
図6は、何れの位置にリカバリ処理を行うかの判定処理手順を示すフローチャートである。システム管理部32は、読み出したポインタA1のシーケンス番号と、読み出したログB1のシーケンス番号と、が同じ番号であるか否かを判定する(ステップS10)。
【0061】
ポインタA1のシーケンス番号とログB1のシーケンス番号が同じ番号である場合(ステップS10、Yes)、システム管理部32は、読み出しに成功たポインタA1のLane位置(ブロック番号)がLane0であるか否かを判定する(ステップS20)。
【0062】
読み出したポインタA1のLane位置がLane0である場合(ステップS20、Yes)、システム管理部32は、ポインタ&ログ情報4へのリカバリ処理は不要であると判定する(ステップS30)。
【0063】
読み出したポインタA1のLane位置がLane1である場合(ステップS20、No)、Lane0が劣化している。このため、システム管理部32は、Lane0に対してリカバリ処理を行う(ステップS40)。具体的には、Lane1(ブロック2またはブロック3)で記憶されているポインタA1をコピーして、Lane0(ブロック0およびブロック1)の新しいページに記憶させる。このとき、システム管理部32は、Lane1(ブロック2およびブロック3)へのリカバリ処理を行わなくてもよい。この場合、ブロック0およびブロック1の新しいページにポインタA1が保存され、ブロック2およびブロック3の新しいページは、未書込み状態(消去済みページ)のままである。
【0064】
Lane0にポインタA1を書込んだ後、システム管理部32は、ブロック0およびブロック1へのポインタA1の書き込み完了に対応する新たなログB1をポインタ&ログ情報4に書込む。このとき、新たなログB1は、全てのブロック0〜3に書込まれることにより多重化される。
【0065】
例えば、最新のページがページX(Xは自然数)であってログB1が書込まれている場合、次に新しいページ(X−1)には、ポインタA1が書込まれている。この場合、ページ(X+1)にポインタA1の書込み(リカバリ処理)が行われる。また、新たなログB1は、ページ(X+2)に書込まれる。このとき、リカバリ処理としてページ(X+1)に書込むポインタA1のシーケンス番号は、ページ(X−1)に書込まれたポインタA1のシーケンス番号と同じ番号としておく。また、ページ(X+2)に書込む新たなログB1のシーケンス番号は、ページXに書込まれたログB1のシーケンス番号と同じ番号としておく。
【0066】
ポインタA1のシーケンス番号とログB1のシーケンス番号が異なる番号である場合(ログB1の方が古い場合)(ステップS10、No)、システム管理部32は、読み出しに成功したポインタA1のLane位置がLane0であるか否かを判定する(ステップS50)。読み出したポインタA1のLane位置がLane1である場合(ステップS50、No)、ログB1を書込む直前に電源断し、且つLane0が劣化している。このため、システム管理部32は、Lane0に対してリカバリ処理を行う(ステップS40)。
【0067】
また、ポインタA1のシーケンス番号とログB1のシーケンス番号が異なる番号であり、且つ読み出したポインタA1のLane位置がLane0である場合(ステップS50、Yes)、Lane1にポインタA1を書込む途中で電源断している。このため、システム管理部32は、Lane1に対してリカバリ処理を行う(ステップS60)。
【0068】
ステップS30,S40,S60の後、メモリシステムが起動され、メモリシステムが管理テーブル、DRAM上ログ、ポインタ&ログ情報4、管理情報、ユーザデータなどを更新しながら動作する。
【0069】
図7は、何れの位置にリカバリ処理を行うかの判定処理結果を示す図である。読み出したポインタA1のシーケンス番号と、読み出したログB1のシーケンス番号と、が同じ番号であり(YES)、且つ読み出したポインタA1のLane位置がLane0である場合、リカバリ処理は不要であると判定される(D1)。
【0070】
読み出したポインタA1のシーケンス番号と、読み出したログB1のシーケンス番号と、が同じ番号であり(YES)、且つ読み出したポインタA1のLane位置がLane1である場合、Lane0を対象としてリカバリ処理を行うと判定される(D2)。
【0071】
読み出したポインタA1のシーケンス番号と、読み出したログB1のシーケンス番号と、が異なる番号であり(NO)、且つ読み出したポインタA1のLane位置がLane0である場合、Lane1を対象としてリカバリ処理を行うと判定される(D3)。
【0072】
読み出したポインタA1のシーケンス番号と、読み出したログB1のシーケンス番号と、が異なる番号であり(NO)、且つ読み出したポインタA1のLane位置がLane1である場合、Lane0を対象としてリカバリ処理を行うと判定される(D4)。
【0073】
なお、システム管理部32は、最新ページから読み出したデータがログB1である場合、ログB1内の書込み成否情報に基づいて、リカバリ処理の必要性を判断してもよい。この場合、書込み成否情報内で書込みが失敗したことが示されているブロックを含むLaneに対してリカバリ処理が行われる。
【0074】
また、システム管理部32は、最新ページから読み出したデータがポインタA1である場合、ポインタA1を読み出すことができたLane位置に基づいて、リカバリ処理の必要性を判断してもよい。
【0075】
この場合、システム管理部32は、最新ページから読み出したデータ内のポインタ/ログ判別フラグに基づいて、最新ページから読み出したデータがポインタA1であるか否かを判断する。また、この場合、システム管理部32は、全てのブロックからポインタA1を読み出す。システム管理部32が、最新ページから読み出したデータはポインタA1であると判断した場合、ポインタA1を読み出すことができたLane位置を確認する。読み出したポインタA1のLane位置がLane0のみである場合、システム管理部32は、Lane1を対象としてリカバリ処理を行うと判定する。一方、読み出したポインタA1のLane位置がLane1のみである場合、システム管理部32は、Lane0を対象としてリカバリ処理を行うと判定する。
【0076】
なお、本実施の形態では、ポインタ/ログ判別フラグに基づいて、ポインタ&ログ情報4から読み出したデータがポインタA1であるかログB1であるかのデータ判別を行ったが、シーケンス番号に基づいてデータ判別を行ってもよい。この場合、最新ページから読み出したデータのシーケンス番号と、次に新しいページから読み出したデータのシーケンス番号と、が異なる番号であれば、最新ページのデータはポインタであり、次に新しいページのデータはログであると判断される。
【0077】
また、本実施形態では、管理情報の格納位置を示すポインタを複数段階のポインタとしてもよい。例えば、ポインタを2段階にする場合、固定領域40Aに格納されるポインタA1を第1のルートポインタとする。第1のルートポインタは、第2のルートポインタが格納される位置(ブロック)を示すポインタであり、第2のルートポインタは、管理情報が格納される位置(ブロック)を示すポインタである。第1のルートポインタは、第2のルートポインタが格納されるブロックが変わった場合に更新される。また、第1のルートポインタおよび第2のルートポインタは、それぞれ異なるブロックに格納される。このため、第2のルートポインタは、固定領域40Aに保存してもよいし、可変領域41Aに保存してもよい。
【0078】
また、本実施形態では、多重化していたポインタA1の何れかが読み出せなかった場合に、Lane0とLane1の何れか一方に対して、リカバリ処理を行う場合について説明したが、Lane0とLane1の両方に対してリカバリ処理を行ってもよい。また、多重化していたポインタA1の何れかが読み出せなかった場合に、読み出せなかったブロックに対してのみリカバリ処理を行ってもよい。
【0079】
また、本実施形態では、ログを多重化してNANDメモリ10に記憶しておく場合について説明したが、ログを多重化することなくNANDメモリ10に記憶しておいてもよい。
【0080】
このように、第1の実施形態によれば、ポインタのログを保存しておくので、多重化して記憶しておくポインタの多重化数が不十分であった場合に、ポインタの多重化をリカバリ処理する際に、何れの位置にリカバリ処理を行うべきかの判定処理を容易に行うことが可能となる。これにより、ポインタの多重化を容易に維持することが可能となり、その結果、データ記憶の信頼性を容易に高めることが可能となる。また、ポインタおよびログを多重化して記憶しておくので、システム起動ができなくなることを防止できる。
【0081】
(第2の実施形態)
つぎに、図8〜図11を用いてこの発明の第2の実施形態について説明する。第2の実施形態では、ポインタとポインタのログとを固定領域内で別々に保存しておく。
【0082】
図8は、第2の実施形態に係るポインタ情報およびログ情報の格納位置を模式的に示す図である。図8の各構成要素のうち図2に示す第1の実施形態の管理情報保存領域400と同一機能を達成する構成要素については同一番号を付しており、重複する説明は省略する。
【0083】
NANDメモリ10のうち、管理情報45、ポインタ情報5Aおよびログ情報5Bが保存される管理情報保存領域400には、固定領域40Bと、可変領域41Bと、がある。固定領域40Bは、第1の実施形態で説明した固定領域40Aと同様の領域であり、ポインタ情報5Aとログ情報5Bが格納される。可変領域41Bは、第1の実施形態で説明した可変領域41Aと同様の領域であり、管理情報45が格納される。本実施形態では、固定領域40B内で、ポインタ情報5Aと、ログ情報5Bと、を別々に記憶する。ポインタ情報5Aは、ポインタA1などのポインタが時系列で格納された情報であり、ログ情報5Bは、ログB1などのログが時系列で格納された情報である。
【0084】
つぎに、ポインタ情報5Aとログ情報5Bの保存方法について説明する。図9は、第2の実施形態に係るポインタ情報とログ情報の構成例を示す図である。ポインタ情報5Aは、例えば、ブロック0,1からなるLane0とブロック2,3からなるLane1とを用いて、固定領域40B内に保存される。また、ログ情報5Bは、例えば、ブロック4,5からなるLane2とブロック6,7からなるLane3とを用いて、固定領域40B内に保存される。
【0085】
ポインタ情報5Aの各ブロック0〜3へは、同一のポインタをコピーして保存しておく。例えば、1回目に記憶するポインタがポインタC1である場合、各ブロック0〜3のページ0にポインタC1がそれぞれ保存される。そして、次に記憶するポインタがポインタC2である場合、各ブロック0〜3のページ1にポインタC2がそれぞれ保存される。
【0086】
また、ログ情報5Bの各ブロック4〜7へは、同一のログをコピーして保存しておく。例えば、1回目に記憶するログがログD1である場合、各ブロック4〜7のページ0にログD1がそれぞれ保存される。そして、次に記憶するログがログD2である場合、各ブロック4〜7のページ1にログD2がそれぞれ保存される。
【0087】
つぎに、ポインタ内に格納される情報の内容例およびログ内に格納される情報の内容例について説明する。図10は、第2の実施形態に係るポインタの内容およびログの内容を示す図である。図10の(a)では、ポインタC1の構成例を示し、図10の(b)では、ログD1の構成例を示している。図10の各構成要素のうち図4に示す第1の実施形態のポインタやログと同様の構成要素については、重複する説明を省略する。
【0088】
図10の(a)に示すように、ポインタC1は、ポインタC1の情報先頭からの位置(オフセット位置)を示す情報と、情報内容と、が対応付けされて構成されている。情報先頭からの位置が「0」の位置(先頭)には、ポインタC1が何回目の更新であるかを示すシーケンス番号が格納されている。また、情報先頭からの位置が「1」の位置には、管理情報45へのポインタ(NANDメモリ10内での格納位置を示す情報)が格納される。
【0089】
また、図10の(b)に示すように、ログD1は、ログD1の情報先頭からの位置(オフセット位置)を示す情報と、情報内容と、が対応付けされて構成されている。情報先頭からの位置が「0」の位置(先頭)には、ログD1(ポインタC1)が何回目の更新であるかを示すシーケンス番号が格納されている。また、情報先頭からの位置が「1」以降の位置には、各ブロックへのページ書込みが成功したか、失敗したかを示す情報(書込み成否情報)が格納される。
【0090】
つぎに、最新のポインタであるポインタC2および最新のログであるログD2の読み出し手順について説明する。図11は、第2の実施形態に係るポインタおよびログの読み出し手順を説明するための図である。なお、図5で説明した第1の実施形態のポインタA1およびログB1の読み出し処理と同様の処理については、重複する説明を省略する。
【0091】
ポインタC2およびログD2の読み出す際には、ログ情報5B内からログD2が読み出され、その後、ポインタ情報5A内からポインタC2が読み出される。ログ情報5BからログD2を読み出す際には、ブロック管理部31が、NANDメモリ10内からログ情報5Bを抽出してシステム管理部32に送る。
【0092】
システム管理部32は、ログ情報5B内の各ブロック4〜7の中から一番後に更新されたページ(最新ページ)を検索する。システム管理部32は、読み出しに成功するまでブロック番号が若いブロックから順番にそのページのログを読み出す。ここでは、ブロック4、ブロック5、ブロック6、ブロック7の順番で最新ページであるページ1内のログD2が読み出される。
【0093】
システム管理部32は、ブロック4からのデータ読み出しに失敗して読み出しができなかった場合、ブロック4の同じページ番号のページからデータを読み出す。以降、読み出しができるまでブロックを移動して同じページ番号のページを読み出す処理を繰り返す。
【0094】
ブロック4〜7の何れかからログD2を読み出すことができた場合、ポインタC2の読み出し処理が行われる。ポインタ情報5AからポインタC2を読み出す際には、ブロック管理部31が、NANDメモリ10内からポインタ情報5Aを抽出してシステム管理部32に送る。
【0095】
システム管理部32は、ログD2内に格納されている、ブロック毎の書込み成否情報を読み出す。そして、システム管理部32は、読み出した書込み成否情報を参照して適切なブロック(書き込みに成功しているブロック)からポインタの読み出しを行なう。このとき、システム管理部32は、読み出しに成功したブロックの最新ページ(ここではページ1)からデータ(ポインタC2)を読み出す(15)。
【0096】
システム管理部32は、書込み成否情報に基づいて、複数のブロックに対してポインタA1の書込みが成功していると判断できた場合、書込みが成功しているブロックの中からブロック番号が最も若いブロックの最新ページ(ページ1)からデータを読み出す。読み出しに失敗すると、ブロック番号が若い順番で次のブロックのページ1からポインタC2を読み出す処理が、読み出しに成功するまで繰り返される。システム管理部32は、読み出したログD2、読み出したポインタC2と、に基づいて、リカバリ処理の必要性を判断する。本実施形態では、図6で説明した第1の実施形態と同様の方法によって、何れの位置にリカバリ処理を行うかの判定処理を行う。
【0097】
なお、NANDメモリ10が多値メモリで構成される場合であっても、固定領域40Bは、ポインタ情報5Aのデータの信頼性を高めるために、2値モードで使用することが望ましい。
【0098】
このように、第2の実施形態によれば、ポインタ情報とログ情報を別々に保存しておくので、最新のログの読み出し処理と、最新のポインタの読み出し処理を、容易に行うことが可能となる。
【0099】
(第3の実施形態)
つぎに、図12〜図15を用いてこの発明の第3の実施形態について説明する。第3の実施形態では、ポインタ情報を固定領域に保存するとともに、ログ情報を可変領域に保存しておく。
【0100】
図12は、第3の実施形態に係るポインタ情報およびログ情報の格納位置を模式的に示す図である。図12の各構成要素のうち図2または図8に示す第1または第2の実施形態の管理情報保存領域400と同一機能を達成する構成要素については同一番号を付しており、重複する説明は省略する。
【0101】
NANDメモリ10のうち、管理情報45、ポインタ情報6Aおよびログ情報6Bが保存される管理情報保存領域400には、固定領域40Cと、可変領域41Cと、がある。固定領域40Cは、第1または第2の実施形態で説明した固定領域40A,40Bと同様の領域であり、ポインタ情報6Aが格納される。可変領域41Bは、第1または第2の実施形態で説明した可変領域41A,41Bと同様の領域であり、管理情報45およびログ情報6Bが格納される。
【0102】
本実施形態では、固定領域40C内でポインタ情報6Aを記憶し、可変領域41C内でログ情報6Bを記憶することにより、ポインタ情報6Aとログ情報6Bと、を別々に記憶する。ポインタ情報6Aは、ポインタ情報5Aと同様の情報であり、ログ情報6Bは、ログ情報5Bと同様の情報である。
【0103】
つぎに、ポインタ情報6Aとログ情報6Bの保存方法について説明する。図13は、第3の実施形態に係るポインタ情報とログ情報の構成例を示す図である。ポインタ情報6Aは、例えば、ブロック0,1からなるLane0とブロック2,3からなるLane1とを用いて、固定領域40C内に保存される。また、ログ情報6Bは、例えば、ブロック4,5からなるLane2とブロック6,7からなるLane3とを用いて、可変領域41C内に保存される。ポインタ情報6Aの各ブロック0〜3へは、同一のポインタをコピーして保存しておく。また、ログ情報6Bの各ブロック4〜7へは、同一のログをコピーして保存しておく。
【0104】
例えば、ポインタ情報6Aの更新は、管理情報45が読み出されてブロック管理部31が初期化され動作可能となった後に行なわれる。なぜなら、ポインタ情報6Aの更新は、メモリシステムが起動して利用可能となり、ユーザデータの書き込みが発生することによって管理情報45が更新されない限り発生しないからである。ブロック管理部31が動作可能になった後は、ブロック管理部31が有しているウエアレベリング(ブロックの均一化による書き込み回数平準化)機構を用いて動的にブロックを割り当てる。換言すると、ログ情報6Bは、ウエアレベリングを考慮して動的にブロックを割り当てられたブロックに記録される。
【0105】
ポインタ内に格納される情報およびログ内に格納される情報は、第2の実施形態で説明した情報と同じ情報であるので、その説明を省略する。また、最新のポインタであるポインタC2および最新のログであるログD2の読み出し手順は、第2の実施形態で説明した手順と同じであるので、その説明を省略する。また、何れの位置にリカバリ処理を行うかの判定処理は、第1の実施形態と同様の方法によって行われるので、その説明を省略する。
【0106】
本実施形態では、ブロック管理部31がログ情報6Bの格納位置に関する情報を持っている。そして、システム起動時には、ブロック管理部31がログ情報6Bの格納位置に関する情報に基づいて、ログ情報6Bを抽出し、システム管理部32に送る。
【0107】
このように、本実施形態では、ポインタ情報6Aを固定領域40Cに保存し、ログ情報6Bを可変領域41Cに保存している。このため、固定領域40Cに書込むデータ量を少なくすることが可能となり、静的に割り当てるブロックの使用を必要最小限とすることが可能になる。換言すると、ログ情報6Bを動的に割り当てられたブロックに記録することにより、ログ情報6Bのためにブロックを別途静的に割り当てるは必要がなくなる。このように、ログ情報6Bのために静的にブロックを確保する必要がないので、ウエアレベリング機構を用いて動的に確保できるブロックが多くなる。したがって、メモリシステムとして自由に使えるメモリ容量を多く確保できる。
【0108】
また、ログ情報6Bを可変領域41Cに記憶させているので、ログ情報6Bの記録のために固定領域40C内のブロックの疲弊が早く進むことはない。このため、固定領域40Cを構成するブロックの劣化を防ぐことが可能となる。
【0109】
また、固定領域40Cにログ情報6Bを記憶させないことにより、重要な情報が読み出せなくなるリスクを低減できる。静的に確保したブロックはウエアレベリングの対象ではなく、固定領域40Cに多くの情報を記憶させると、同じブロックを何度も使うことになるからである。
【0110】
なお、NANDメモリ10が多値メモリで構成される場合であっても、固定領域40Cは、ポインタ情報5Aのデータの信頼性を高めるために、2値モードで使用することが望ましい。
【0111】
このように、第3の実施形態によれば、ログ情報6Bを可変領域41Cに記憶させているので、メモリシステムの低寿命化を抑制することが可能になるとともに、NANDメモリ10を効率良く使用することが可能となる。
【0112】
図14は、SSD100を搭載したパーソナルコンピュータの一例を示す斜視図である。パーソナルコンピュータ1200は、本体1201、及び表示ユニット1202を備えている。表示ユニット1202は、ディスプレイハウジング1203と、このディスプレイハウジング1203に収容された表示装置1204と、を備えている。
【0113】
本体1201は、筐体1205と、キーボード1206と、ポインティングデバイスであるタッチパッド1207とを備えている。筐体1205内部には、メイン回路基板、ODD(optical disk device)ユニット、カードスロット、及びSSD100等が収容されている。
【0114】
カードスロットは、筐体1205の周壁に隣接して設けられている。周壁には、カードスロットに対向する開口部1208が設けられている。ユーザは、この開口部1208を通じて筐体1205の外部から追加デバイスをカードスロットに挿抜することが可能である。
【0115】
SSD100は、従来のHDDの置き換えとして、パーソナルコンピュータ1200内部に実装された状態として使用してもよいし、パーソナルコンピュータ1200が備えるカードスロットに挿入した状態で、追加デバイスとして使用してもよい。
【0116】
図15は、SSDを搭載したパーソナルコンピュータのシステム構成例を示している。パーソナルコンピュータ1200は、CPU1301、ノースブリッジ1302、主メモリ1303、ビデオコントローラ1304、オーディオコントローラ1305、サウスブリッジ1309、BIOS−ROM1310、SSD100、ODDユニット1311、エンベデッドコントローラ/キーボードコントローラIC(EC/KBC)1312、及びネットワークコントローラ1313等を備えている。
【0117】
CPU1301は、パーソナルコンピュータ1200の動作を制御するために設けられたプロセッサであり、SSD100から主メモリ1303にロードされるオペレーティングシステム(OS)を実行する。更に、ODDユニット1311が、装填された光ディスクに対して読出し処理及び書込み処理の少なくとも1つの処理の実行を可能にした場合に、CPU1301は、それらの処理の実行をする。
【0118】
また、CPU1301は、BIOS−ROM1310に格納されたシステムBIOS(Basic Input Output System)も実行する。尚、システムBIOSは、パーソナルコンピュータ1200内のハードウェア制御のためのプログラムである。
【0119】
ノースブリッジ1302は、CPU1301のローカルバスとサウスブリッジ1309との間を接続するブリッジデバイスである。ノースブリッジ1302には、主メモリ1303をアクセス制御するメモリコントローラも内蔵されている。
【0120】
また、ノースブリッジ1302は、AGP(Accelerated Graphics Port)バス等を介してビデオコントローラ1304との通信、及びオーディオコントローラ1305との通信を実行する機能も有している。
【0121】
主メモリ1303は、プログラムやデータを一時的に記憶し、CPU1301のワークエリアとして機能する。主メモリ1303は、例えばDRAMから構成される。
【0122】
ビデオコントローラ1304は、パーソナルコンピュータ1200のディスプレイモニタとして使用される表示ユニット1202を制御するビデオ再生コントローラである。
【0123】
オーディオコントローラ1305は、パーソナルコンピュータ1200のスピーカ1306を制御するオーディオ再生コントローラである。
【0124】
サウスブリッジ1309は、LPC(Low Pin Count)バス1314上の各デバイス、及びPCI(Peripheral Component Interconnect)バス1315上の各デバイスを制御する。また、サウスブリッジ1309は、各種ソフトウェア及びデータを格納する記憶装置であるSSD100を、ATAインタフェースを介して制御する。
【0125】
パーソナルコンピュータ1200は、セクタ単位でSSD100へのアクセスを行う。ATAインタフェース(I/F)を介して、書き込みコマンド、読出しコマンド、フラッシュコマンド等がSSD100に入力される。
【0126】
また、サウスブリッジ1309は、BIOS−ROM1310、及びODDユニット1311をアクセス制御するための機能も有している。
【0127】
EC/KBC1312は、電力管理のためのエンベデッドコントローラと、キーボード(KB)1206及びタッチパッド1207を制御するためのキーボードコントローラとが集積された1チップマイクロコンピュータである。
【0128】
このEC/KBC1312は、ユーザによるパワーボタンの操作に応じてパーソナルコンピュータ1200の電源をON/OFFする機能を有している。ネットワークコントローラ1313は、例えばインターネット等の外部ネットワークとの通信を実行する通信装置である。
【0129】
パーソナルコンピュータ1200は、SSD100に電源供給を行い、また、SSD100に停止要求(Standby要求)を発行する。仮にパーソナルコンピュータ1200からSSD100への電源供給が不正に断たれた場合であっても、書き込みエラーの発生を未然に防ぐことができる。
【0130】
このように第1〜第3の実施形態によれば、データ記憶の信頼性を容易に高めることが可能となる。
【0131】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0132】
1…ホスト、5A,6A…ポインタ情報、5B,6B…ログ情報、10…NANDメモリ、20…DRAM、30…コントローラ、31…ブロック管理部、32…システム管理部、33…コマンド処理部、34…データ転送部、40A〜40C…固定領域、41A〜41C…可変領域、45…管理情報、100…SSD。
【技術分野】
【0001】
本発明の実施形態は、メモリシステムに関する。
【背景技術】
【0002】
近年、不揮発性半導体記憶装置であるNAND型フラッシュメモリの大容量化が進行し、このNAND型フラッシュメモリを搭載したメモリシステムとしてのSSD(Solid State Drive)が注目されている。このような、メモリシステムでは、データ記憶の信頼性を高めることが望まれている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開平5−282888号公報
【特許文献2】特開2009−211202号公報
【特許文献3】特開2010−157139号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
データ記憶の信頼性を容易に高めることができるメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【0005】
本発明の一つの実施形態によれば、メモリシステムが提供される。メモリシステムは、揮発性の第1の記憶部と、不揮発性の第2の記憶部と、前記第1の記憶部を介してホスト装置と前記第2の記憶部との間のデータ転送を行うコントローラと、を備えている。前記コントローラは、起動時に前記第2の記憶部に記憶されたデータの格納位置を含む管理情報を前記第1の記憶部に取込み、前記データ転送の際には前記管理情報を前記第1および第2の記憶部で更新しながら前記管理情報に基づいて前記第1および第2の記憶部でのデータ管理を行う。また、前記コントローラは、前記第1の記憶部に取り込まれた最新状態の管理情報と、前記最新状態の管理情報の保存位置を示すポインタと、前記ポインタの書込みが成功したか否かを示すログと、を前記第2の記憶部に記憶させる。また、前記コントローラは、前記ポインタを多重化して前記第2の記憶部に記憶させておく。そして、前記コントローラは、起動時に前記ポインタが所望の数だけ多重化されていないことを検出した場合、前記ポインタおよび/または前記ログに基づいて、前記ポインタの多重化をリカバリ処理する。
【図面の簡単な説明】
【0006】
【図1】図1は、SSDの構成例を示すブロック図である。
【図2】図2は、第1の実施形態に係る管理情報とポインタ&ログ情報の格納位置を模式的に示す図である。
【図3】図3は、第1の実施形態に係るポインタ&ログ情報の構成例を示す図である。
【図4】図4は、第1の実施形態に係るポインタの内容およびログの内容を示す図である。
【図5】図5は、第1の実施形態に係るポインタおよびログの読み出し手順を説明するための図である。
【図6】図6は、何れの位置にリカバリ処理を行うかの判定処理手順を示すフローチャートである。
【図7】図7は、何れの位置にリカバリ処理を行うかの判定処理結果を示す図である。
【図8】図8は、第2の実施形態に係るポインタ情報およびログ情報の格納位置を模式的に示す図である。
【図9】図9は、第2の実施形態に係るポインタ情報とログ情報の構成例を示す図である。
【図10】図10は、第2の実施形態に係るポインタの内容およびログの内容を示す図である。
【図11】図11は、第2の実施形態に係るポインタおよびログの読み出し手順を説明するための図である。
【図12】図12は、第3の実施形態に係るポインタ情報およびログ情報の格納位置を模式的に示す図である。
【図13】図13は、第3の実施形態に係るポインタ情報とログ情報の構成例を示す図である。
【図14】図14は、SSDを搭載したパーソナルコンピュータの一例を示す斜視図である。
【図15】図15は、SSDを搭載したパーソナルコンピュータのシステム構成例を示す図である。
【発明を実施するための形態】
【0007】
以下に添付図面を参照して、実施形態に係るメモリシステムを詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【0008】
(第1の実施形態)
図1は、SSDの構成例を示すブロック図である。NAND型フラッシュメモリ(以下、NANDメモリと略す)10を用いた半導体記憶装置の一例であるSSD(Solid State Drive)100は、メモリシステムなどに適用される。本実施形態のSSD100は、不揮発に保存したい重要なデータ(管理情報)と、管理情報の格納位置を示すポインタに関する情報(後述のポインタ&ログ情報4など)とを、信頼性を確保するために多重化(例えば4重化)してNANDメモリ10内に記憶しておく。
【0009】
NANDメモリ10内で保存される管理情報は、ある時点における不揮発性テーブルの内容であるスナップショットと、不揮発性テーブルの内容に変化があった場合に内容を変更した後の不揮発性テーブルとスナップショット(後述のスナップショット210)との差分情報であるログ(後述のスナップショット用ログ220)と、を有している。
【0010】
また、NANDメモリ10内で保存されるポインタ&ログ情報4は、管理情報のNANDメモリ10内における格納位置を示すポインタと、このポインタが正しく書込まれたか否かを示すログと、を有している。ポインタは、管理情報の保存場所にアクセスするための情報である。また、ログは、ポインタの書き込み(更新)が成功したか否かを示す処理記録(ポインタのログ)である。本実施形態では、ポインタと、ログと、を多重化してNANDメモリ10に保存しておく。
【0011】
メモリシステムでは、システム起動時に、多重化されていたポインタの何れかがブロックの故障などによって読み出せなかった場合、読み出せなかったポインタを書き直すことによって、ポインタの多重化を維持する。本実施形態では、読み出せなかったポインタの書き直し処理を、リカバリ処理という。本実施形態では、ポインタとともにログを記憶しておくことにより、ログを用いてリカバリ処理を行う。これにより、リカバリ処理を効率良く行う。なお、リカバリ処理の際には、ポインタの書き直し処理後に、ログの書き直し処理も行われる。
【0012】
SSD100は、ATAインタフェース(ATA I/F)などのメモリ接続インタフェースであるホストI/F(図示せず)を介してパーソナルコンピュータあるいはCPUコアなどのホスト装置(以下、ホストと略す)1と接続され、ホスト1の外部メモリとして機能する。
【0013】
SSD100は、ホスト1の2次記憶装置として使用され、ホスト1から書込要求が出されたデータを記憶するとともに、ホスト1から読出要求のあったデータを読出してホスト1に出力する機能を有している。
【0014】
SSD100は、揮発性半導体メモリとしてのDRAM20と、データ管理などを行うコントローラ30と、不揮発性半導体メモリとしてのNANDメモリ10と、を備えている。
【0015】
NANDメモリ10は、複数のNANDメモリチップを有する。個々のNANDメモリチップは、後述する複数のブロックを有する。また、各NANDメモリチップは、チャネルを介してそれぞれ並列にコントローラ30に接続されている。1つのチャネルに接続されるNANDメモリの数は1個に限らず、複数のNANDメモリが入出力線を共有した状態で接続されていてもよい。
【0016】
NANDメモリ10の各NANDメモリチップは、例えば、複数のチャネルによる並列動作、複数のLaneによるインターリーブ動作が可能である。本実施形態では、並列動作できる2つのチャネル(1つのLane)にそれぞれ接続されたNANDメモリに含まれるブロック対して、データの並列書き込みを行う場合について説明する。各ブロックは、多重化の効果を高めるため、異なるNANDメモリチップに配置されているものとする。なお、本実施形態では複数(例えば2個)のチャネルでLaneを構成してデータの並列書き込みを行い、Lane間でインターリーブ動作を行う場合を想定するが、全てのチャネルが並列動作する構成であってもよい。
【0017】
NANDメモリ10は、データを書き込むためにはその前に消去を必要とする。また、NANDメモリ10では、消去単位と書き込み単位が異なる。NANDメモリ10は、例えば、消去単位がブロック単位であり、かつ書き込み単位がページ単位である。また、NANDメモリ10は、書き込み順序が連続するよう規定されている。換言すると、書き込みについてはページに上書きは出来ず、1ページずつページ昇順に追記するよう規定されている。
【0018】
DRAM20は、ホスト1とNANDメモリ10との間でのデータ転送用キャッシュおよび作業領域用メモリなどとして機能する。DRAM20の作業領域用メモリに記憶されるものとしては、管理テーブル、DRAM上ログ、ポインタ&ログ情報4、ユーザデータなどがある。
【0019】
管理テーブルは、NANDメモリ10に記憶されている管理情報が起動時などに展開されたマスターテーブル(スナップショット用ログ220を反映したスナップショット210)である。管理テーブルは、ホスト1から指定された論理アドレスと物理的なデータの記憶位置とを対応付ける管理情報を管理するための情報テーブルである。
【0020】
DRAM上ログは、NANDメモリ10に格納されるスナップショット用ログ220と同様のデータであり、管理テーブルの変更差分である。ユーザデータの書き込みや、管理テーブルへのデータの読み書きを行う際には、DRAM20上に管理テーブルが展開される。
【0021】
管理テーブルの差分であるDRAM上ログは、ユーザデータの書き込みや保存先ブロックの変更などがあった場合にDRAM20上にいったん保存されるが、一定量たまったところで、スナップショット用ログ220としてNANDメモリ10に書き込まれる。換言すると、SSD100は、SSD100が動作している間、所定のタイミングで、スナップショット用ログ220を管理テーブルに反映するとともに、スナップショット用ログ220としてNANDメモリ10に保存する。また、SSD100は、SSD100が動作している間、所定のタイミングで管理テーブルを、スナップショット210としてNANDメモリ10に保存する。
【0022】
具体的には、DRAM20上では、DRAM上ログとなる各ログデータが順番に時系列で並ぶよう記憶される。そして、データの更新が安定したら、DRAM上ログがスナップショット用ログ220としてNANDメモリ10に書き込まれる。NANDメモリ10では、スナップショット用ログ220が順番に時系列で並ぶよう記憶される。そして、スナップショットのNANDメモリ10への保存が終了すると、管理テーブルを保存する前にNANDメモリ10に書き込まれたスナップショット用ログ220は不要になる。
【0023】
なお、DRAM20の代わりに、FeRAM(Ferroelectric Random Access Memory)、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase change Random Access Memory)などを使用してもよい。
【0024】
データ管理部であるコントローラ30は、ホスト1とNANDメモリ10との間でDRAM20を介してデータ転送制御を行う。また、コントローラ30は、NANDメモリ10内でのデータの消去、書き込み、読み出し、多重化が成功しているかの判定などを行う。本実施形態のコントローラ30は、NANDメモリ10のデータの並列書き込みを行なう機能を有している。
【0025】
コントローラ30は、ブロック管理部31、システム管理部32、ATAコマンド処理部33、データ転送部34を有している。ブロック管理部31は、NANDメモリ10内の各ブロックを管理する。本実施形態のブロック管理部31は、管理情報の格納位置が更新されると、ポインタの更新要求をシステム管理部32に行う。また、ブロック管理部31は、システム管理部32からポインタの更新処理結果を受けると、ログの更新(NANDメモリ10上への追記)を行うとともに、次回のシステム起動時にシステム管理部32へのリカバリ要求を行う。
【0026】
システム管理部32は、ポインタの更新とリカバリ処理を行う。システム管理部32は、ブロック管理部31による管理情報の再構築完了後に、ブロック管理部31からポインタの更新要求を受けると、ポインタの更新処理を行い、更新処理結果をシステム管理部32に送る。システム管理部32は、次回のシステム起動時にログをブロック管理部31から得るとともに、ログを用いてポインタのリカバリ処理を実行する。
【0027】
ATAコマンド処理部33は、ホスト1とのコマンドインターフェースを行なう。データ転送部34は、DRAM20を介してNANDメモリ10とホスト1との間のデータインターフェース(データ転送)を行なう。
【0028】
また、コントローラ30は、NANDメモリ10に記憶された管理情報を、管理テーブルとしてシステム起動時にDRAM20に転送する。また、コントローラ30は、管理情報を更新すべき事象が発生した際、DRAM20に記憶されている管理テーブルの更新前後の差分情報をDRAM上ログとしてDRAM20に記憶させる。また、コントローラ30は、所定の条件が成立したときにDRAM上ログをNANDメモリ10に順次追記記憶させるとともに、DRAM上ログの内容をDRAM20に記憶されている管理情報に反映する。
【0029】
また、本実施形態のコントローラ30は、管理情報のNANDメモリ10内での格納位置を示すポインタと、ポインタのログと、をポインタ&ログ情報4としてNANDメモリ10に記憶させる。ポインタは、管理情報が更新されることによってその保存場所が変わる場合に更新する必要がある。更新の際は、NANDメモリ10の特性から、別のページに新しいポインタを書き込むことになる。また、更新途中のシステム電源遮断やNANDメモリ10のページ書き込み失敗によって更新処理が正常に完了しない場合が有りうるので、更新の際にはポインタのログも同時にNANDメモリ10内に保存しておく。これにより、次回のシステム起動時に、ポインタおよびログに基づいて、更新処理が正常に行なわれたか否かを判断できるようにしておく。
【0030】
ところで、メモリなどは、データのWrite/Erase回数の増大による劣化、Readの繰り返しによる劣化、経年劣化などによって不良率が増加する傾向にある。このため、書き込み時にデータの書き込みが成功していてもデータ破壊が発生する場合がある。また、データの書き込み中に不正な電源断が発生する場合がある。この場合であっても、システムの信頼性を向上させるためには、ポインタやログの多重化を維持しておくことが望まれる。そこで、本実施形態では、多重化されていたポインタの何れかをシステム起動時に読み出せなかった場合(更新処理が正しく行なわれていなかった場合)にリカバリ処理を行う。これにより、SSD100の信頼性を高める。
【0031】
そのため、NANDメモリ10へは、ある時点でのポインタ全体と、ポインタを保存した時点でのログという形式でポインタ&ログ情報4を保存しておく。そして、ポインタを更新する条件が成立した場合に、ポインタをNANDメモリ10に記憶させ、その後、ポインタの記憶が成功した否かを示すログをNANDメモリ10に記憶させる。
【0032】
図2は、第1の実施形態に係る管理情報とポインタ&ログ情報の格納位置を模式的に示す図である。NANDメモリ10のうち、管理情報45およびポインタ&ログ情報4が保存される管理情報保存領域400には、固定領域40Aと、可変領域41Aと、がある。
【0033】
固定領域40Aは、静的に確保されたブロックで構成される領域であり、可変領域41Aは、動的に確保されたブロックで構成される領域である。固定領域40Aには、ポインタ&ログ情報4が格納されている。ポインタ&ログ情報4は、メモリシステムの起動時に固定的に参照できる情報である必要があるので、静的に割り当てられたブロックで構成される固定領域40Aに格納される。また、可変領域41Aには、管理情報45が格納される。管理情報45は、スナップショット210と、スナップショット用ログ220と、を有している。
【0034】
固定領域40Aは、NANDメモリ10において、論理ブロックと物理ブロックとの関係が固定化している領域であり、書換えや書込みがほとんど発生しない更新頻度の低い領域である。このため、固定領域40Aは、メモリシステムを稼働させるのに必要な情報が格納される領域として用いられる。たとえば、固定領域40Aでは、現在書込み中のブロックがすべて満たされた場合には、固定領域40A内の他のブロックにデータを書込むのではなく、ブロック内のデータを消去した後に消去したブロックの先頭ページから書込むように設定されている。
【0035】
一方の可変領域41Aは、固定領域40Aを除くNANDメモリ10の領域において、論理ブロックと物理ブロックとの関係が変化する領域である。たとえば、可変領域41Aでは、現在書込み中のブロックがすべて満たされた場合には、可変領域41A内で書込可能なフリーブロックとなっている他のブロックに次の情報を書込むように設定された領域である。なお、この可変領域41Aは、上記したようにNANDメモリ10中の固定領域40Aを除いた領域であり、管理情報45が格納される領域のほかに、ホスト1から書込要求のあったデータが格納されるデータ格納領域も含まれる。つまり、固定領域40Aを除いたNANDメモリ10中の物理的な領域を可変領域41Aとし、この中で、データ格納領域と、管理情報が格納される領域とが機能的に分離されている。
【0036】
ブロック管理部31には、システム起動時にアクセスする位置として固定領域40A内の所定位置(ポインタ&ログ情報4の格納位置)を保存しておく。そして、システム起動時には、ブロック管理部31がポインタ&ログ情報4にアクセスして、ポインタ&ログ情報4を取得する。
【0037】
なお、NANDメモリ10が多値メモリで構成される場合であっても、固定領域40Aは、ポインタ&ログ情報4のデータの信頼性を高めるために、2値モードで使用することが望ましい。
【0038】
つぎに、ポインタ&ログ情報4の保存方法について説明する。図3は、第1の実施形態に係るポインタ&ログ情報の構成例を示す図である。図3では、ポインタ&ログ情報4が、ブロック0,1からなるLane0とブロック2,3からなるLane1とを用いて、固定領域40A内に保存される場合について説明する。
【0039】
ポインタ&ログ情報4は、NANDメモリ10の故障が原因で読み出しに失敗した場合、システムが起動できなくなるので、図3に示すように複数のブロック(ブロック0〜3)に同一のポインタA1をコピーして保存しておく。これにより、1ブロックが故障した場合であっても他ブロックからポインタA1を読めるようにしておく。具体的には、ブロック0〜3の同一ページにポインタA1を保存することによって、ポインタA1の多重化を行う。
【0040】
同様に、複数のブロック(ブロック0〜3)に同一のログB1をコピーして保存しておく。これにより、1ブロックが故障した場合であっても他ブロックからログB1を読めるようにしておく。具体的には、ブロック0〜3の同一ページにログB1を保存することによって、ログB1の多重化を行う。
【0041】
本実施形態では、ポインタA1とログB1とを、同一のブロックに保存する。例えば、ブロック0のページ0には、ポインタA1が保存され、ブロック0のページ1には、ログB1が保存される。同様に、ブロック1〜3の各ページ0には、それぞれポインタA1が保存され、ブロック1〜3の各ページ1には、それぞれログB1が保存される。換言すると、NANDメモリ10内では、ポインタを格納する領域にログも含めて記憶しておく。これにより、各ページには、ポインタとログの何れかが保存されることになる。
【0042】
ポインタ&ログ情報4では、ブロック0〜3の第1のページ(例えばページ0)にポインタA1が保存された後、次のページである第2のページ(例えばページ1)にログB1が保存される。そして、第2のページの次のページである第3のページ(例えばページ2)にポインタA2(図示せず)が保存された後、次のページである第4のページ(例えばページ3)にログB2(図示せず)が保存される。このように、ポインタ&ログ情報4では、若いブロック番号から順番に各ブロックの同じページ番号のページに、同一のポインタまたはログが書き込まれる。これにより、ポインタ&ログ情報4では、ポインタとログとが交互に保存される。
【0043】
リカバリ処理を行う場合には、ポインタおよびログに基づいて、多重化が正しく行なわれていないブロックを含むLaneにポインタを書き直す。例えば、ブロック0またはブロック1に書込んだはずのポインタA1を、ブロック0またはブロック1から読出せない場合、Lane0(ブロック0および1)に対してリカバリ処理が行なわれる。
【0044】
つぎに、ポインタ内に格納される情報の内容例およびログ内に格納される情報の内容例について説明する。図4は、第1の実施形態に係るポインタの内容およびログの内容を示す図である。図4の(a)では、ポインタA1の構成例を示し、図4の(b)では、ログB1の構成例を示している。
【0045】
図4の(a)に示すように、ポインタA1は、ポインタA1の情報先頭からの位置(オフセット位置)を示す情報と、情報内容と、が対応付けされて構成されている。情報先頭からの位置が「0」の位置(先頭)には、ポインタA1とログB1の何れを格納しているか判定するための情報として、ポインタ/ログ判別フラグが格納されている。ここでは、ポインタを示す情報が格納されている。
【0046】
また、情報先頭からの位置が「1」の位置には、ポインタA1が何回目の更新であるかを示すシーケンス番号が格納されている。例えば、ポインタA1が、N回目(Nは自然数)の更新処理で格納されるポインタである場合、N回目の更新であることを示すシーケンス番号が格納される。また、情報先頭からの位置が「2」の位置には、管理情報45へのポインタ(NANDメモリ10内での格納位置を示す情報)が格納される。
【0047】
また、図4の(b)に示すように、ログB1は、ログB1の情報先頭からの位置(オフセット位置)を示す情報と、情報内容と、が対応付けされて構成されている。情報先頭からの位置が「0」の位置(先頭)には、ポインタ/ログ判別フラグが格納されている。ここでは、ログを示す情報が格納されている。
【0048】
また、情報先頭からの位置が「1」の位置には、ログB1(ポインタA1)が何回目の更新であるかを示すシーケンス番号が格納されている。例えば、スナップショット210を保存した後、N回目(Nは自然数)の更新処理で格納されるログの場合、N回目の更新であることを示すシーケンス番号が格納される。
【0049】
また、情報先頭からの位置が「2」以降の位置には、各ブロックへのページ書込みが成功したか、失敗したかを示す情報(書込み成否情報)が格納される。例えば、情報先頭からの位置が「2」の位置には、ブロック0へのページ書込みが成功したか、失敗したかを示す情報が格納される。また、情報先頭からの位置が「3」の位置には、ブロック1へのページ書込みが成功したか、失敗したかを示す情報が格納される。
【0050】
つぎに、ポインタA1およびログB1の読み出し手順について説明する。図5は、第1の実施形態に係るポインタおよびログの読み出し手順を説明するための図である。ポインタ&ログ情報4内からポインタA1またはログB1を読み出す際には、ブロック管理部31が、NANDメモリ10内からポインタ&ログ情報4を抽出して、システム管理部32に送る。
【0051】
システム管理部32は、ポインタ&ログ情報4内の各ブロック0〜3の中から一番後に更新されたページ(最新ページ)を検索する。換言すると、システム管理部32は、各ブロック内の書き込み済みページのうち、ページ番号が一番大きなページからデータを読み出す。このページには、ログまたは最新のポインタの何れかが保存されていることになる。
【0052】
システム管理部32は、読み出しに成功するまで、ブロック番号が若いブロックから順番に、最新ページのポインタまたはログを読み出す。ここでは、ブロック0、ブロック1、ブロック2、ブロック3の順番で、最新ページであるページ1内のデータが読み出される。
【0053】
システム管理部32は、ブロック0からのデータ読み出しに失敗して読み出しができなかった場合、ブロック1の同じページ番号のページからデータを読み出す。以降、読み出しができるまでブロックを移動して同じページ番号のページを読み出す処理を繰り返す。このように、多重化により複数ブロックの同じページ番号のページに同じポインタが書き込まれているので、1つのブロックのあるページからデータを読み出せない場合であっても他ブロックの同じページ番号のページから読み出せばよい。これにより、システムが起動できなくなるリスクを軽減している。
【0054】
読み出された情報は、ポインタ/ログ判別フラグにより、ポインタなのか、ログなのかの判断が可能である。読み出された情報がログである場合、1つページ番号が若いページにポインタが記録されていると判断できる。
【0055】
正常にポインタ&ログ情報4が更新されている場合、最後に書き込まれたページはログ情報である。図5に示すポインタ&ログ情報4の場合、ブロック0の最新ページであるページ1からログB1が読み出される(1)。この読み出しに失敗すると、ブロック1のページ1からログB1が読み出される(2)。さらに、この読み出しに失敗すると、ブロック2のページ1からログB1が読み出され(3)、この読み出しにも失敗すると、ブロック3のページ1からログB1が読み出される(4)。
【0056】
ブロック0〜3の何れかからログB1を読み出すことができた場合、ポインタA1の読み出し処理が行われる。このとき、システム管理部32は、ログB1内に格納されている、ブロック毎の書込み成否情報を読み出す。そして、システム管理部32は、読み出した書込み成否情報を参照して適切なブロック(ポインタの書き込みに成功しているブロック)からポインタの読み出しを行なう。このとき、システム管理部32は、読み出しに成功したブロックの中から最新ページの次に新しいページ(ここではページ0)からデータ(ポインタA1)を読み出す(5)。
【0057】
システム管理部32は、書込み成否情報に基づいて、複数のブロックに対してポインタA1の書込みが成功していると判断できた場合、書込みが成功しているブロックの中からブロック番号が最も若いブロックの2番目に新しいページ(ページ0)からデータを読み出す。そして、読み出しに失敗すると、ブロック番号が若い順番で次のブロックのページ0からポインタA1を読み出す処理が、読み出しに成功するまで繰り返される。システム管理部32は、読み出したログB1と、読み出したポインタA1と、に基づいて、リカバリ処理の必要性を判断する。
【0058】
なお、ポインタを書き込む途中でシステム電源遮断などにより、ログの書き込みに至る前に書き込みが終了している可能性がある。このため、最新ページから必ずしもログが読み出されるとは限らない。
【0059】
最新ページにポインタA1が格納されている場合、システム管理部32は、ブロック番号が若いブロックから順番に最新ページ内のポインタAyを読み出す。さらに、ブロック番号が若いブロックから最新ページの次のページ内のログB(y−1)を読み出す。システム管理部32は、読み出したログB(y−1)と、読み出した各ポインタAyと、に基づいて、リカバリ処理の必要性を判断する。
【0060】
図6は、何れの位置にリカバリ処理を行うかの判定処理手順を示すフローチャートである。システム管理部32は、読み出したポインタA1のシーケンス番号と、読み出したログB1のシーケンス番号と、が同じ番号であるか否かを判定する(ステップS10)。
【0061】
ポインタA1のシーケンス番号とログB1のシーケンス番号が同じ番号である場合(ステップS10、Yes)、システム管理部32は、読み出しに成功たポインタA1のLane位置(ブロック番号)がLane0であるか否かを判定する(ステップS20)。
【0062】
読み出したポインタA1のLane位置がLane0である場合(ステップS20、Yes)、システム管理部32は、ポインタ&ログ情報4へのリカバリ処理は不要であると判定する(ステップS30)。
【0063】
読み出したポインタA1のLane位置がLane1である場合(ステップS20、No)、Lane0が劣化している。このため、システム管理部32は、Lane0に対してリカバリ処理を行う(ステップS40)。具体的には、Lane1(ブロック2またはブロック3)で記憶されているポインタA1をコピーして、Lane0(ブロック0およびブロック1)の新しいページに記憶させる。このとき、システム管理部32は、Lane1(ブロック2およびブロック3)へのリカバリ処理を行わなくてもよい。この場合、ブロック0およびブロック1の新しいページにポインタA1が保存され、ブロック2およびブロック3の新しいページは、未書込み状態(消去済みページ)のままである。
【0064】
Lane0にポインタA1を書込んだ後、システム管理部32は、ブロック0およびブロック1へのポインタA1の書き込み完了に対応する新たなログB1をポインタ&ログ情報4に書込む。このとき、新たなログB1は、全てのブロック0〜3に書込まれることにより多重化される。
【0065】
例えば、最新のページがページX(Xは自然数)であってログB1が書込まれている場合、次に新しいページ(X−1)には、ポインタA1が書込まれている。この場合、ページ(X+1)にポインタA1の書込み(リカバリ処理)が行われる。また、新たなログB1は、ページ(X+2)に書込まれる。このとき、リカバリ処理としてページ(X+1)に書込むポインタA1のシーケンス番号は、ページ(X−1)に書込まれたポインタA1のシーケンス番号と同じ番号としておく。また、ページ(X+2)に書込む新たなログB1のシーケンス番号は、ページXに書込まれたログB1のシーケンス番号と同じ番号としておく。
【0066】
ポインタA1のシーケンス番号とログB1のシーケンス番号が異なる番号である場合(ログB1の方が古い場合)(ステップS10、No)、システム管理部32は、読み出しに成功したポインタA1のLane位置がLane0であるか否かを判定する(ステップS50)。読み出したポインタA1のLane位置がLane1である場合(ステップS50、No)、ログB1を書込む直前に電源断し、且つLane0が劣化している。このため、システム管理部32は、Lane0に対してリカバリ処理を行う(ステップS40)。
【0067】
また、ポインタA1のシーケンス番号とログB1のシーケンス番号が異なる番号であり、且つ読み出したポインタA1のLane位置がLane0である場合(ステップS50、Yes)、Lane1にポインタA1を書込む途中で電源断している。このため、システム管理部32は、Lane1に対してリカバリ処理を行う(ステップS60)。
【0068】
ステップS30,S40,S60の後、メモリシステムが起動され、メモリシステムが管理テーブル、DRAM上ログ、ポインタ&ログ情報4、管理情報、ユーザデータなどを更新しながら動作する。
【0069】
図7は、何れの位置にリカバリ処理を行うかの判定処理結果を示す図である。読み出したポインタA1のシーケンス番号と、読み出したログB1のシーケンス番号と、が同じ番号であり(YES)、且つ読み出したポインタA1のLane位置がLane0である場合、リカバリ処理は不要であると判定される(D1)。
【0070】
読み出したポインタA1のシーケンス番号と、読み出したログB1のシーケンス番号と、が同じ番号であり(YES)、且つ読み出したポインタA1のLane位置がLane1である場合、Lane0を対象としてリカバリ処理を行うと判定される(D2)。
【0071】
読み出したポインタA1のシーケンス番号と、読み出したログB1のシーケンス番号と、が異なる番号であり(NO)、且つ読み出したポインタA1のLane位置がLane0である場合、Lane1を対象としてリカバリ処理を行うと判定される(D3)。
【0072】
読み出したポインタA1のシーケンス番号と、読み出したログB1のシーケンス番号と、が異なる番号であり(NO)、且つ読み出したポインタA1のLane位置がLane1である場合、Lane0を対象としてリカバリ処理を行うと判定される(D4)。
【0073】
なお、システム管理部32は、最新ページから読み出したデータがログB1である場合、ログB1内の書込み成否情報に基づいて、リカバリ処理の必要性を判断してもよい。この場合、書込み成否情報内で書込みが失敗したことが示されているブロックを含むLaneに対してリカバリ処理が行われる。
【0074】
また、システム管理部32は、最新ページから読み出したデータがポインタA1である場合、ポインタA1を読み出すことができたLane位置に基づいて、リカバリ処理の必要性を判断してもよい。
【0075】
この場合、システム管理部32は、最新ページから読み出したデータ内のポインタ/ログ判別フラグに基づいて、最新ページから読み出したデータがポインタA1であるか否かを判断する。また、この場合、システム管理部32は、全てのブロックからポインタA1を読み出す。システム管理部32が、最新ページから読み出したデータはポインタA1であると判断した場合、ポインタA1を読み出すことができたLane位置を確認する。読み出したポインタA1のLane位置がLane0のみである場合、システム管理部32は、Lane1を対象としてリカバリ処理を行うと判定する。一方、読み出したポインタA1のLane位置がLane1のみである場合、システム管理部32は、Lane0を対象としてリカバリ処理を行うと判定する。
【0076】
なお、本実施の形態では、ポインタ/ログ判別フラグに基づいて、ポインタ&ログ情報4から読み出したデータがポインタA1であるかログB1であるかのデータ判別を行ったが、シーケンス番号に基づいてデータ判別を行ってもよい。この場合、最新ページから読み出したデータのシーケンス番号と、次に新しいページから読み出したデータのシーケンス番号と、が異なる番号であれば、最新ページのデータはポインタであり、次に新しいページのデータはログであると判断される。
【0077】
また、本実施形態では、管理情報の格納位置を示すポインタを複数段階のポインタとしてもよい。例えば、ポインタを2段階にする場合、固定領域40Aに格納されるポインタA1を第1のルートポインタとする。第1のルートポインタは、第2のルートポインタが格納される位置(ブロック)を示すポインタであり、第2のルートポインタは、管理情報が格納される位置(ブロック)を示すポインタである。第1のルートポインタは、第2のルートポインタが格納されるブロックが変わった場合に更新される。また、第1のルートポインタおよび第2のルートポインタは、それぞれ異なるブロックに格納される。このため、第2のルートポインタは、固定領域40Aに保存してもよいし、可変領域41Aに保存してもよい。
【0078】
また、本実施形態では、多重化していたポインタA1の何れかが読み出せなかった場合に、Lane0とLane1の何れか一方に対して、リカバリ処理を行う場合について説明したが、Lane0とLane1の両方に対してリカバリ処理を行ってもよい。また、多重化していたポインタA1の何れかが読み出せなかった場合に、読み出せなかったブロックに対してのみリカバリ処理を行ってもよい。
【0079】
また、本実施形態では、ログを多重化してNANDメモリ10に記憶しておく場合について説明したが、ログを多重化することなくNANDメモリ10に記憶しておいてもよい。
【0080】
このように、第1の実施形態によれば、ポインタのログを保存しておくので、多重化して記憶しておくポインタの多重化数が不十分であった場合に、ポインタの多重化をリカバリ処理する際に、何れの位置にリカバリ処理を行うべきかの判定処理を容易に行うことが可能となる。これにより、ポインタの多重化を容易に維持することが可能となり、その結果、データ記憶の信頼性を容易に高めることが可能となる。また、ポインタおよびログを多重化して記憶しておくので、システム起動ができなくなることを防止できる。
【0081】
(第2の実施形態)
つぎに、図8〜図11を用いてこの発明の第2の実施形態について説明する。第2の実施形態では、ポインタとポインタのログとを固定領域内で別々に保存しておく。
【0082】
図8は、第2の実施形態に係るポインタ情報およびログ情報の格納位置を模式的に示す図である。図8の各構成要素のうち図2に示す第1の実施形態の管理情報保存領域400と同一機能を達成する構成要素については同一番号を付しており、重複する説明は省略する。
【0083】
NANDメモリ10のうち、管理情報45、ポインタ情報5Aおよびログ情報5Bが保存される管理情報保存領域400には、固定領域40Bと、可変領域41Bと、がある。固定領域40Bは、第1の実施形態で説明した固定領域40Aと同様の領域であり、ポインタ情報5Aとログ情報5Bが格納される。可変領域41Bは、第1の実施形態で説明した可変領域41Aと同様の領域であり、管理情報45が格納される。本実施形態では、固定領域40B内で、ポインタ情報5Aと、ログ情報5Bと、を別々に記憶する。ポインタ情報5Aは、ポインタA1などのポインタが時系列で格納された情報であり、ログ情報5Bは、ログB1などのログが時系列で格納された情報である。
【0084】
つぎに、ポインタ情報5Aとログ情報5Bの保存方法について説明する。図9は、第2の実施形態に係るポインタ情報とログ情報の構成例を示す図である。ポインタ情報5Aは、例えば、ブロック0,1からなるLane0とブロック2,3からなるLane1とを用いて、固定領域40B内に保存される。また、ログ情報5Bは、例えば、ブロック4,5からなるLane2とブロック6,7からなるLane3とを用いて、固定領域40B内に保存される。
【0085】
ポインタ情報5Aの各ブロック0〜3へは、同一のポインタをコピーして保存しておく。例えば、1回目に記憶するポインタがポインタC1である場合、各ブロック0〜3のページ0にポインタC1がそれぞれ保存される。そして、次に記憶するポインタがポインタC2である場合、各ブロック0〜3のページ1にポインタC2がそれぞれ保存される。
【0086】
また、ログ情報5Bの各ブロック4〜7へは、同一のログをコピーして保存しておく。例えば、1回目に記憶するログがログD1である場合、各ブロック4〜7のページ0にログD1がそれぞれ保存される。そして、次に記憶するログがログD2である場合、各ブロック4〜7のページ1にログD2がそれぞれ保存される。
【0087】
つぎに、ポインタ内に格納される情報の内容例およびログ内に格納される情報の内容例について説明する。図10は、第2の実施形態に係るポインタの内容およびログの内容を示す図である。図10の(a)では、ポインタC1の構成例を示し、図10の(b)では、ログD1の構成例を示している。図10の各構成要素のうち図4に示す第1の実施形態のポインタやログと同様の構成要素については、重複する説明を省略する。
【0088】
図10の(a)に示すように、ポインタC1は、ポインタC1の情報先頭からの位置(オフセット位置)を示す情報と、情報内容と、が対応付けされて構成されている。情報先頭からの位置が「0」の位置(先頭)には、ポインタC1が何回目の更新であるかを示すシーケンス番号が格納されている。また、情報先頭からの位置が「1」の位置には、管理情報45へのポインタ(NANDメモリ10内での格納位置を示す情報)が格納される。
【0089】
また、図10の(b)に示すように、ログD1は、ログD1の情報先頭からの位置(オフセット位置)を示す情報と、情報内容と、が対応付けされて構成されている。情報先頭からの位置が「0」の位置(先頭)には、ログD1(ポインタC1)が何回目の更新であるかを示すシーケンス番号が格納されている。また、情報先頭からの位置が「1」以降の位置には、各ブロックへのページ書込みが成功したか、失敗したかを示す情報(書込み成否情報)が格納される。
【0090】
つぎに、最新のポインタであるポインタC2および最新のログであるログD2の読み出し手順について説明する。図11は、第2の実施形態に係るポインタおよびログの読み出し手順を説明するための図である。なお、図5で説明した第1の実施形態のポインタA1およびログB1の読み出し処理と同様の処理については、重複する説明を省略する。
【0091】
ポインタC2およびログD2の読み出す際には、ログ情報5B内からログD2が読み出され、その後、ポインタ情報5A内からポインタC2が読み出される。ログ情報5BからログD2を読み出す際には、ブロック管理部31が、NANDメモリ10内からログ情報5Bを抽出してシステム管理部32に送る。
【0092】
システム管理部32は、ログ情報5B内の各ブロック4〜7の中から一番後に更新されたページ(最新ページ)を検索する。システム管理部32は、読み出しに成功するまでブロック番号が若いブロックから順番にそのページのログを読み出す。ここでは、ブロック4、ブロック5、ブロック6、ブロック7の順番で最新ページであるページ1内のログD2が読み出される。
【0093】
システム管理部32は、ブロック4からのデータ読み出しに失敗して読み出しができなかった場合、ブロック4の同じページ番号のページからデータを読み出す。以降、読み出しができるまでブロックを移動して同じページ番号のページを読み出す処理を繰り返す。
【0094】
ブロック4〜7の何れかからログD2を読み出すことができた場合、ポインタC2の読み出し処理が行われる。ポインタ情報5AからポインタC2を読み出す際には、ブロック管理部31が、NANDメモリ10内からポインタ情報5Aを抽出してシステム管理部32に送る。
【0095】
システム管理部32は、ログD2内に格納されている、ブロック毎の書込み成否情報を読み出す。そして、システム管理部32は、読み出した書込み成否情報を参照して適切なブロック(書き込みに成功しているブロック)からポインタの読み出しを行なう。このとき、システム管理部32は、読み出しに成功したブロックの最新ページ(ここではページ1)からデータ(ポインタC2)を読み出す(15)。
【0096】
システム管理部32は、書込み成否情報に基づいて、複数のブロックに対してポインタA1の書込みが成功していると判断できた場合、書込みが成功しているブロックの中からブロック番号が最も若いブロックの最新ページ(ページ1)からデータを読み出す。読み出しに失敗すると、ブロック番号が若い順番で次のブロックのページ1からポインタC2を読み出す処理が、読み出しに成功するまで繰り返される。システム管理部32は、読み出したログD2、読み出したポインタC2と、に基づいて、リカバリ処理の必要性を判断する。本実施形態では、図6で説明した第1の実施形態と同様の方法によって、何れの位置にリカバリ処理を行うかの判定処理を行う。
【0097】
なお、NANDメモリ10が多値メモリで構成される場合であっても、固定領域40Bは、ポインタ情報5Aのデータの信頼性を高めるために、2値モードで使用することが望ましい。
【0098】
このように、第2の実施形態によれば、ポインタ情報とログ情報を別々に保存しておくので、最新のログの読み出し処理と、最新のポインタの読み出し処理を、容易に行うことが可能となる。
【0099】
(第3の実施形態)
つぎに、図12〜図15を用いてこの発明の第3の実施形態について説明する。第3の実施形態では、ポインタ情報を固定領域に保存するとともに、ログ情報を可変領域に保存しておく。
【0100】
図12は、第3の実施形態に係るポインタ情報およびログ情報の格納位置を模式的に示す図である。図12の各構成要素のうち図2または図8に示す第1または第2の実施形態の管理情報保存領域400と同一機能を達成する構成要素については同一番号を付しており、重複する説明は省略する。
【0101】
NANDメモリ10のうち、管理情報45、ポインタ情報6Aおよびログ情報6Bが保存される管理情報保存領域400には、固定領域40Cと、可変領域41Cと、がある。固定領域40Cは、第1または第2の実施形態で説明した固定領域40A,40Bと同様の領域であり、ポインタ情報6Aが格納される。可変領域41Bは、第1または第2の実施形態で説明した可変領域41A,41Bと同様の領域であり、管理情報45およびログ情報6Bが格納される。
【0102】
本実施形態では、固定領域40C内でポインタ情報6Aを記憶し、可変領域41C内でログ情報6Bを記憶することにより、ポインタ情報6Aとログ情報6Bと、を別々に記憶する。ポインタ情報6Aは、ポインタ情報5Aと同様の情報であり、ログ情報6Bは、ログ情報5Bと同様の情報である。
【0103】
つぎに、ポインタ情報6Aとログ情報6Bの保存方法について説明する。図13は、第3の実施形態に係るポインタ情報とログ情報の構成例を示す図である。ポインタ情報6Aは、例えば、ブロック0,1からなるLane0とブロック2,3からなるLane1とを用いて、固定領域40C内に保存される。また、ログ情報6Bは、例えば、ブロック4,5からなるLane2とブロック6,7からなるLane3とを用いて、可変領域41C内に保存される。ポインタ情報6Aの各ブロック0〜3へは、同一のポインタをコピーして保存しておく。また、ログ情報6Bの各ブロック4〜7へは、同一のログをコピーして保存しておく。
【0104】
例えば、ポインタ情報6Aの更新は、管理情報45が読み出されてブロック管理部31が初期化され動作可能となった後に行なわれる。なぜなら、ポインタ情報6Aの更新は、メモリシステムが起動して利用可能となり、ユーザデータの書き込みが発生することによって管理情報45が更新されない限り発生しないからである。ブロック管理部31が動作可能になった後は、ブロック管理部31が有しているウエアレベリング(ブロックの均一化による書き込み回数平準化)機構を用いて動的にブロックを割り当てる。換言すると、ログ情報6Bは、ウエアレベリングを考慮して動的にブロックを割り当てられたブロックに記録される。
【0105】
ポインタ内に格納される情報およびログ内に格納される情報は、第2の実施形態で説明した情報と同じ情報であるので、その説明を省略する。また、最新のポインタであるポインタC2および最新のログであるログD2の読み出し手順は、第2の実施形態で説明した手順と同じであるので、その説明を省略する。また、何れの位置にリカバリ処理を行うかの判定処理は、第1の実施形態と同様の方法によって行われるので、その説明を省略する。
【0106】
本実施形態では、ブロック管理部31がログ情報6Bの格納位置に関する情報を持っている。そして、システム起動時には、ブロック管理部31がログ情報6Bの格納位置に関する情報に基づいて、ログ情報6Bを抽出し、システム管理部32に送る。
【0107】
このように、本実施形態では、ポインタ情報6Aを固定領域40Cに保存し、ログ情報6Bを可変領域41Cに保存している。このため、固定領域40Cに書込むデータ量を少なくすることが可能となり、静的に割り当てるブロックの使用を必要最小限とすることが可能になる。換言すると、ログ情報6Bを動的に割り当てられたブロックに記録することにより、ログ情報6Bのためにブロックを別途静的に割り当てるは必要がなくなる。このように、ログ情報6Bのために静的にブロックを確保する必要がないので、ウエアレベリング機構を用いて動的に確保できるブロックが多くなる。したがって、メモリシステムとして自由に使えるメモリ容量を多く確保できる。
【0108】
また、ログ情報6Bを可変領域41Cに記憶させているので、ログ情報6Bの記録のために固定領域40C内のブロックの疲弊が早く進むことはない。このため、固定領域40Cを構成するブロックの劣化を防ぐことが可能となる。
【0109】
また、固定領域40Cにログ情報6Bを記憶させないことにより、重要な情報が読み出せなくなるリスクを低減できる。静的に確保したブロックはウエアレベリングの対象ではなく、固定領域40Cに多くの情報を記憶させると、同じブロックを何度も使うことになるからである。
【0110】
なお、NANDメモリ10が多値メモリで構成される場合であっても、固定領域40Cは、ポインタ情報5Aのデータの信頼性を高めるために、2値モードで使用することが望ましい。
【0111】
このように、第3の実施形態によれば、ログ情報6Bを可変領域41Cに記憶させているので、メモリシステムの低寿命化を抑制することが可能になるとともに、NANDメモリ10を効率良く使用することが可能となる。
【0112】
図14は、SSD100を搭載したパーソナルコンピュータの一例を示す斜視図である。パーソナルコンピュータ1200は、本体1201、及び表示ユニット1202を備えている。表示ユニット1202は、ディスプレイハウジング1203と、このディスプレイハウジング1203に収容された表示装置1204と、を備えている。
【0113】
本体1201は、筐体1205と、キーボード1206と、ポインティングデバイスであるタッチパッド1207とを備えている。筐体1205内部には、メイン回路基板、ODD(optical disk device)ユニット、カードスロット、及びSSD100等が収容されている。
【0114】
カードスロットは、筐体1205の周壁に隣接して設けられている。周壁には、カードスロットに対向する開口部1208が設けられている。ユーザは、この開口部1208を通じて筐体1205の外部から追加デバイスをカードスロットに挿抜することが可能である。
【0115】
SSD100は、従来のHDDの置き換えとして、パーソナルコンピュータ1200内部に実装された状態として使用してもよいし、パーソナルコンピュータ1200が備えるカードスロットに挿入した状態で、追加デバイスとして使用してもよい。
【0116】
図15は、SSDを搭載したパーソナルコンピュータのシステム構成例を示している。パーソナルコンピュータ1200は、CPU1301、ノースブリッジ1302、主メモリ1303、ビデオコントローラ1304、オーディオコントローラ1305、サウスブリッジ1309、BIOS−ROM1310、SSD100、ODDユニット1311、エンベデッドコントローラ/キーボードコントローラIC(EC/KBC)1312、及びネットワークコントローラ1313等を備えている。
【0117】
CPU1301は、パーソナルコンピュータ1200の動作を制御するために設けられたプロセッサであり、SSD100から主メモリ1303にロードされるオペレーティングシステム(OS)を実行する。更に、ODDユニット1311が、装填された光ディスクに対して読出し処理及び書込み処理の少なくとも1つの処理の実行を可能にした場合に、CPU1301は、それらの処理の実行をする。
【0118】
また、CPU1301は、BIOS−ROM1310に格納されたシステムBIOS(Basic Input Output System)も実行する。尚、システムBIOSは、パーソナルコンピュータ1200内のハードウェア制御のためのプログラムである。
【0119】
ノースブリッジ1302は、CPU1301のローカルバスとサウスブリッジ1309との間を接続するブリッジデバイスである。ノースブリッジ1302には、主メモリ1303をアクセス制御するメモリコントローラも内蔵されている。
【0120】
また、ノースブリッジ1302は、AGP(Accelerated Graphics Port)バス等を介してビデオコントローラ1304との通信、及びオーディオコントローラ1305との通信を実行する機能も有している。
【0121】
主メモリ1303は、プログラムやデータを一時的に記憶し、CPU1301のワークエリアとして機能する。主メモリ1303は、例えばDRAMから構成される。
【0122】
ビデオコントローラ1304は、パーソナルコンピュータ1200のディスプレイモニタとして使用される表示ユニット1202を制御するビデオ再生コントローラである。
【0123】
オーディオコントローラ1305は、パーソナルコンピュータ1200のスピーカ1306を制御するオーディオ再生コントローラである。
【0124】
サウスブリッジ1309は、LPC(Low Pin Count)バス1314上の各デバイス、及びPCI(Peripheral Component Interconnect)バス1315上の各デバイスを制御する。また、サウスブリッジ1309は、各種ソフトウェア及びデータを格納する記憶装置であるSSD100を、ATAインタフェースを介して制御する。
【0125】
パーソナルコンピュータ1200は、セクタ単位でSSD100へのアクセスを行う。ATAインタフェース(I/F)を介して、書き込みコマンド、読出しコマンド、フラッシュコマンド等がSSD100に入力される。
【0126】
また、サウスブリッジ1309は、BIOS−ROM1310、及びODDユニット1311をアクセス制御するための機能も有している。
【0127】
EC/KBC1312は、電力管理のためのエンベデッドコントローラと、キーボード(KB)1206及びタッチパッド1207を制御するためのキーボードコントローラとが集積された1チップマイクロコンピュータである。
【0128】
このEC/KBC1312は、ユーザによるパワーボタンの操作に応じてパーソナルコンピュータ1200の電源をON/OFFする機能を有している。ネットワークコントローラ1313は、例えばインターネット等の外部ネットワークとの通信を実行する通信装置である。
【0129】
パーソナルコンピュータ1200は、SSD100に電源供給を行い、また、SSD100に停止要求(Standby要求)を発行する。仮にパーソナルコンピュータ1200からSSD100への電源供給が不正に断たれた場合であっても、書き込みエラーの発生を未然に防ぐことができる。
【0130】
このように第1〜第3の実施形態によれば、データ記憶の信頼性を容易に高めることが可能となる。
【0131】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0132】
1…ホスト、5A,6A…ポインタ情報、5B,6B…ログ情報、10…NANDメモリ、20…DRAM、30…コントローラ、31…ブロック管理部、32…システム管理部、33…コマンド処理部、34…データ転送部、40A〜40C…固定領域、41A〜41C…可変領域、45…管理情報、100…SSD。
【特許請求の範囲】
【請求項1】
揮発性の第1の記憶部と、
不揮発性の第2の記憶部と、
前記第1の記憶部を介してホスト装置と前記第2の記憶部との間のデータ転送を行うとともに、起動時に前記第2の記憶部に記憶されたデータの格納位置を含む管理情報を前記第1の記憶部に取込み、前記データ転送の際には前記管理情報を前記第1および第2の記憶部で更新しながら前記管理情報に基づいて前記第1および第2の記憶部でのデータ管理を行うコントローラと、
を備え、
前記コントローラは、前記第1の記憶部に取り込まれた最新状態の管理情報と、前記最新状態の管理情報の保存位置を示すポインタと、前記ポインタの書込みが成功したか否かを示すログと、を前記第2の記憶部に記憶させるとともに、前記ポインタを多重化して前記第2の記憶部に記憶させておき、起動時に前記ポインタが所望の数だけ多重化されていないことを検出した場合、前記ポインタおよび/または前記ログに基づいて、前記ポインタの多重化をリカバリ処理することを特徴とするメモリシステム。
【請求項2】
前記コントローラは、前記ログを多重化して前記第2の記憶部に記憶させることを特徴とする請求項1に記載のメモリシステム。
【請求項3】
前記ポインタは、前記第2の記憶部内のうちデータの格納領域が静的に割り当てられる固定領域に格納されることを特徴とする請求項1または2に記載のメモリシステム。
【請求項4】
前記ログは、前記固定領域に格納されることを特徴とする請求項3に記載のメモリシステム。
【請求項5】
前記ログは、前記第2の記憶部内のうち前記固定領域を除いた領域であってデータの格納領域が動的に割り当てられる可変領域に格納されることを特徴とする請求項3に記載のメモリシステム。
【請求項6】
前記コントローラは、ウエアレベリングを考慮して、前記可変領域に前記ログの格納領域を動的に割り当てることを特徴とする請求項5に記載のメモリシステム。
【請求項1】
揮発性の第1の記憶部と、
不揮発性の第2の記憶部と、
前記第1の記憶部を介してホスト装置と前記第2の記憶部との間のデータ転送を行うとともに、起動時に前記第2の記憶部に記憶されたデータの格納位置を含む管理情報を前記第1の記憶部に取込み、前記データ転送の際には前記管理情報を前記第1および第2の記憶部で更新しながら前記管理情報に基づいて前記第1および第2の記憶部でのデータ管理を行うコントローラと、
を備え、
前記コントローラは、前記第1の記憶部に取り込まれた最新状態の管理情報と、前記最新状態の管理情報の保存位置を示すポインタと、前記ポインタの書込みが成功したか否かを示すログと、を前記第2の記憶部に記憶させるとともに、前記ポインタを多重化して前記第2の記憶部に記憶させておき、起動時に前記ポインタが所望の数だけ多重化されていないことを検出した場合、前記ポインタおよび/または前記ログに基づいて、前記ポインタの多重化をリカバリ処理することを特徴とするメモリシステム。
【請求項2】
前記コントローラは、前記ログを多重化して前記第2の記憶部に記憶させることを特徴とする請求項1に記載のメモリシステム。
【請求項3】
前記ポインタは、前記第2の記憶部内のうちデータの格納領域が静的に割り当てられる固定領域に格納されることを特徴とする請求項1または2に記載のメモリシステム。
【請求項4】
前記ログは、前記固定領域に格納されることを特徴とする請求項3に記載のメモリシステム。
【請求項5】
前記ログは、前記第2の記憶部内のうち前記固定領域を除いた領域であってデータの格納領域が動的に割り当てられる可変領域に格納されることを特徴とする請求項3に記載のメモリシステム。
【請求項6】
前記コントローラは、ウエアレベリングを考慮して、前記可変領域に前記ログの格納領域を動的に割り当てることを特徴とする請求項5に記載のメモリシステム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【公開番号】特開2012−128645(P2012−128645A)
【公開日】平成24年7月5日(2012.7.5)
【国際特許分類】
【出願番号】特願2010−279362(P2010−279362)
【出願日】平成22年12月15日(2010.12.15)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】
【公開日】平成24年7月5日(2012.7.5)
【国際特許分類】
【出願日】平成22年12月15日(2010.12.15)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】
[ Back to top ]