(57)【特許請求の範囲】
【請求項１】
１個以上の、ページ単位で読み書きを行う不揮発性メモリのページへのアクセスを制御するページ管理方法であって、
アクセス元が指定する論理ページアドレスをもとに、前記論理ページアドレスに対応するデータが不揮発性メモリ上で物理的に配置されている物理ページアドレスを求めるために使用する、論理ページアドレス順に整列された論理−物理ページアドレス変換テーブルを揮発性メモリ上に配置し、
アクセス元からデータの書き込みを要求される度に前記データの書き込み先物理ページアドレスを特定するステップと、前記論理−物理ページアドレス変換テーブルの中から前記データの書き込み先論理ページアドレスに対応する物理ページアドレスの記録位置を特定するステップと、前記論理−物理ページアドレス変換テーブルの中の前記特定された物理ページアドレスの記録位置に前記書き込み先物理ページアドレスを記録することで前記論理−物理ページアドレス変換テーブルを更新するステップと、前記書き込み先論理ページアドレスと前記書き込み先物理ページアドレスとを組み合わせて前記揮発性メモリ上に追記するステップと、書き込み先物理ページに前記データと前記書き込み先論理ページアドレスとを書き込むステップとを実行し、
一定周期ごとに、前記揮発性メモリ上の前記書き込み先論理ページアドレスと前記書き込み先物理ページアドレスとの組み合わせの全てから構成される論理ページアドレス割り当て履歴を前記不揮発性メモリに保存するステップと、その後前記揮発性メモリ上の前記論理ページアドレス割り当て履歴を消去するステップと、前記論理−物理ページアドレス変換テーブル内の１つの領域を前記不揮発性メモリに保存するステップと、次の周期内にデータを書き込む前記不揮発性メモリ内の領域を確保するステップと、前記確保された不揮発性メモリ領域へのポインタ情報を前記不揮発性メモリに保存するステップとを繰り返し、
前記周期は、前記論理ページアドレス割り当て履歴が消去されてから前記書き込み先論理ページアドレスと前記書き込み先物理ページアドレスとの組み合わせで埋まるまでを１周期とし、
前記書き込み先物理ページアドレスは、１つ前の周期で前記不揮発性メモリに保存されたポインタ情報が指す領域の範囲内から特定されることを特徴とするページ管理方法。
【請求項２】
請求項１に記載のページ管理方法において、
初期化時に、前記不揮発性メモリに保存されている前記論理−物理ページアドレス変換テーブル内の各領域のそれぞれ最新バージョンを、前記揮発性メモリ上の保存元領域に読み出すステップを実行し、前記論理−物理ページアドレス変換テーブル内の各領域を読み出す順番は、前記不揮発性メモリ上への保存のタイミングが古いほど先であり、
前記論理−物理ページアドレス変換テーブル内の１領域を読み出し完了する度に、前記読み出し完了した前記論理−物理ページアドレス変換テーブル内の１領域より１周期後に前記不揮発性メモリに保存された前記論理ページアドレス割り当て履歴を読み出すステップと、前記揮発性メモリ上の前記論理−物理ページアドレス変換テーブル用領域の中から、読み出した前記論理ページアドレス割り当て履歴中に含まれる前記書き込み先論理ページアドレスに対応する物理ページアドレスの記録位置全てを、読み出した前記論理ページアドレス割り当て履歴中に含まれる前記書き込み先物理ページアドレスで上書きするステップとを実行することで、前記揮発性メモリ上に読み出し済の前記論理−物理ページアドレス変換テーブル内の各領域を前記周期の１周期分新しい状態に戻し、
読み出し対象の前記論理−物理ページアドレス変換テーブル内の全ての領域の読み出しを完了すると、前回の電源断前の最後のタイミングで前記不揮発性メモリに保存された前記不揮発性メモリ領域へのポインタ情報が指す１つ以上の物理ページから前記書き込み先論理ページアドレスを読み出すステップと、前記揮発性メモリ上の前記論理−物理ページアドレス変換テーブル用領域の中から、前記物理ページから読み出した前記書き込み先論理ページアドレスに対応する物理ページアドレスの記録位置全てを、前記ポインタ情報が指す物理ページアドレスで上書きするステップとを実行することで、前回の電源断直前の前記論理−物理ページアドレス変換テーブルの復元を完了することを特徴とするページ管理方法。
【請求項３】
請求項１又は２のページ管理方法が、ソフトウェアで制御される形態で実装された集積回路。
【請求項４】
請求項３に記載の集積回路を制御するソフトウェア。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性メモリのページ管理方法に関し、特に不揮発性メモリへのアクセスに用いる論理ページアドレス−物理ページアドレス変換テーブルの保存及び初期化の方法に関するものである。
【背景技術】
【０００２】
現在広く普及している不揮発性メモリの１つにＮＡＮＤフラッシュメモリがあり、ＳＳＤ（Solid State Drive）、ＳＤ（Secure Digital）メモリカード等多様な形態の記憶装置に適用されている。
【０００３】
ＮＡＮＤフラッシュメモリへの読み書きの単位は数百バイトから数ｋバイトのメモリセルから構成されるページと呼ばれる単位であり、バイト単位での読み書きはできない。一度データを書き込んだページに再びデータを書き込むには、複数ページから構成されるブロックと呼ばれる単位で、再書き込みの前に以前の記憶内容を消去する必要がある。このため、同じページアドレスのデータを上書きしようとすると、該当ページが属するブロックを消去する時間に加え、同ブロック内の上書き対象以外の全てのページのデータを他のメモリ領域に退避する時間、同ブロックを消去する時間、消去したブロックに新しいデータを書き込むとともに退避した全てのページのデータを書き戻す時間がかかり多大な負荷が生じる。また、ブロックを消去できる回数は有限なので、前述の上書き方式ではＮＡＮＤフラッシュメモリの信頼性に影響する可能性が高くなる。
【０００４】
前述のような負荷や信頼性の問題を回避するために、アドレス変換テーブルが有効とされている。ＮＡＮＤフラッシュメモリへのデータの上書きの際は、元のデータが記憶されたページ以外の空きページに新しいデータを書き込む。そこで、新しいデータが書き込まれたページが元のデータと異なっていても、アクセス元が上書きした最新のデータを一貫したアドレスで読み出せるように、アクセス元が認識するアドレス（以下、論理アドレスと表記）と、そのアドレスに対応する最新のデータがＮＡＮＤフラッシュメモリ上で物理的に格納されたページのアドレス（以下、物理アドレスと表記）とを対応付けるのがアドレス変換テーブルである。アドレス変換テーブルに関する先行技術文献には、特許文献１がある。
【０００５】
特許文献１のメモリシステムは、ＳＡＴ（セクタ割り当てテーブル）と呼ばれる、論理アドレス順に並んだ論理−物理ページアドレス変換テーブルを不揮発性メモリ上に備え、直近にアクセスしたＳＡＴエントリを含む連続領域がキャッシュメモリに一時記憶される。また、一時記憶領域内に、ＷＳＬ（ライトセクタリスト）と呼ばれるデータを書き込んだ論理アドレスのリストを設け、ＷＳＬが一杯になるとＳＡＴを更新し、その後ＷＳＬを消去する。そして、ＳＡＴの更新内容をＡＳＢ（追加ＳＡＴブロック）と呼ばれるブロックに書き込み、ＡＳＢが一杯になるとＳＡＴを再構築してＳＡＴブロックに書き戻す。更に、最後のＡＳＢ書き込み後、初めてデータを書き込む先の情報を制御ブロックに備える。初期化時、制御ブロックが指す物理アドレスから電源断直前にデータを書いた物理アドレスまでの範囲でヘッダに書かれた論理アドレスを取得し、ＷＳＬを再構築する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特表２００２−５３７５９６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、前述した従来技術では、ＷＳＬが空から一杯になるまでにデータが書き込まれた論理アドレスの範囲が広くなるほど、不揮発性メモリ上でＡＳＢへの書き込み、又はＡＳＢのＳＡＴへの再構築の範囲が広くなり、最悪の場合ＳＡＴの更新範囲が全範囲に亘る恐れがある。
【０００８】
したがって、ＷＳＬが一杯になったときのデータ書き込み性能は、それまでにデータが書き込まれた論理アドレスの範囲に大きく影響される。
【課題を解決するための手段】
【０００９】
前記課題を解決するための手段の概要は以下の通りである。すなわち、本発明に係るページ管理方法は、論理ページアドレス順に整列された、不揮発性メモリ全領域分の論理−物理ページアドレス変換テーブルを揮発性メモリ上に備え、後述の論理ページアドレス割り当て履歴が消去されてから埋まるまでの一定周期ごとに、それまでにデータが書き込まれた論理アドレスの範囲に関係なく、前記論理−物理ページアドレス変換テーブル内の１つの領域を前記不揮発性メモリに保存する。
【００１０】
初期化時は、前記論理−物理ページアドレス変換テーブル内の各領域を、保存のタイミングが古い順から、前記不揮発性メモリから前記揮発性メモリ上の保存元領域に順次読み出して論理−物理ページアドレス変換テーブルを復元する。前記各領域は、それぞれ最新のバージョンを読み出し対象とする。ここで、前述の通り前記論理−物理ページアドレス変換テーブルの全領域を電源断の瞬間に一度に保存するのではなく、部分的に周期的なタイミングで保存しているので、前記揮発性メモリ上に読み出された前記論理−物理ページアドレス変換テーブルを前回の電源断の時点の状態にまで戻すための手段が必要になる。
【００１１】
そのための手段は２つである。第１に、前記論理−物理ページアドレス変換テーブル内の１つの領域を保存するのと同じタイミングで、前回の保存完了以降にデータを書き込んだ書き込み先論理ページアドレスと書き込み先物理ページアドレスとの組み合わせの全てから構成される論理ページアドレス割り当て履歴を前記不揮発性メモリに保存する。
【００１２】
前記論理−物理ページアドレス変換テーブル内の各領域を前記揮発性メモリ上に読み出す度に、それが前記不揮発性メモリに保存されたタイミングより１周期後に前記不揮発性メモリに保存された前記論理ページアドレス割り当て履歴を参照し、そこに記録された前記書き込み先論理ページアドレスに対応する前記書き込み先物理ページアドレスで、前記論理−物理ページアドレス変換テーブルの読み出し先領域を上書きする。このように、前記論理−物理ページアドレス変換テーブル内の各領域の読み出しサイクルと、前記論理ページアドレス割り当て履歴の反映のサイクルとを交互に繰り返すことで、前記揮発性メモリ上の前記論理−物理ページアドレス変換テーブルを、前回の電源断前に前記論理−物理ページアドレス変換テーブル内の領域が最後に不揮発性メモリに保存された時点の状態にまで戻すことができる。
【００１３】
前回の電源断前の最後のタイミングで前記不揮発性メモリに保存された、前記論理−物理ページアドレス変換テーブル内の領域を前記揮発性メモリに読み出した後は、前述のような論理ページアドレス割り当て履歴の反映ができないので、前記揮発性メモリ上の前記論理−物理ページアドレス変換テーブルを前回の電源断直前の状態にまで戻すための第２の手段が必要になる。具体的には、データ書き込み先の物理ページに対し、そのデータの書き込み先論理ページアドレスを書き込み内容に含める。前記物理ページへのポインタ情報は、前回の前記論理−物理ページアドレス変換テーブル内の領域を前記不揮発性メモリに保存するのと同じタイミングで不揮発性メモリに保存する。
【００１４】
前回の電源断前の最後のタイミングで前記不揮発性メモリに保存された、前記論理−物理ページアドレス変換テーブル内の領域を揮発性メモリに読み出した後は、前回の電源断前の最後のタイミングで前記不揮発性メモリに保存された前記ポインタ情報を参照し、前記ポインタ情報が指す物理ページアドレスで前記論理−物理ページアドレス変換テーブルの読み出し先領域を上書きする。上書き位置は、前記ポインタ情報が指す物理ページに記録された前記書き込み先論理ページアドレスを参照して特定する。
【００１５】
これまでに説明した手段により、初期化時に、前記論理−物理ページアドレス変換テーブルを前回の電源断直前の状態にまで復元することができる。
【発明の効果】
【００１６】
本発明によれば、論理−物理ページアドレス変換テーブルを、特定の周期で、複数の領域に分けて、かつ初期化時に前回の電源断直前の状態に復元できる方式で不揮発性メモリに保存するので、安定した性能でデータの書き込みができる。
【図面の簡単な説明】
【００１７】
【図１】本発明の実施形態の構成を示す図である。
【図２】本発明の実施形態における論理−物理ページアドレス変換テーブルの一例を示す図である。
【図３】本発明の実施形態における論理ページアドレス割り当て履歴の一例を示す図である。
【図４】本発明の実施形態におけるポインタ情報の一例を示す図である。
【図５】本発明の実施形態において、データの書き込み、並びに論理−物理ページアドレス変換テーブルと論理ページアドレス割り当て履歴とポインタ情報との更新及び保存の流れを説明するフローチャートである。
【図６】本発明の実施形態におけるデータの書き込み、並びに論理−物理ページアドレス変換テーブルと論理ページアドレス割り当て履歴とポインタ情報との更新及び保存を繰り返した結果を時系列で示す図である。
【図７】本発明の実施形態において、初期化時に論理−物理ページアドレス変換テーブルを前回の電源断直前の状態に復元する流れを説明するフローチャートである。
【図８】図７に続くフローチャートである。
【図９】（ａ）〜（ｉ）は、本発明の実施形態において、初期化時に論理−物理ページアドレス変換テーブルを前回の電源断直前の状態に復元する流れの途中経過、及び結果を時系列で示す図である。
【発明を実施するための形態】
【００１８】
以下に、本発明に係るページ管理方法の実施形態を図面に基づいて詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【００１９】
《第１の実施形態》
本発明の第１の実施形態の構成を図１に示す。本発明に係るページ管理方法は、集積回路１０１と、揮発性メモリ１０３上のソフトウェア１４１とにより実行される。
【００２０】
集積回路１０１は、ＣＰＵ（Central Processing Unit）１１１、バスコントローラ１１２、ホストＩ／Ｆ（interface）１１３、揮発性メモリＩ／Ｆ１１４、及び不揮発性メモリＩ／Ｆ１１５というブロックから構成され、ＣＰＵ１１１、ホストＩ／Ｆ１１３、揮発性メモリＩ／Ｆ１１４、及び不揮発性メモリＩ／Ｆ１１５は、バスコントローラ１１２を中継してアドレスバス１２１及びデータバス１２２を介して通信を行う。また、バスコントローラ１１２は、ホストＩ／Ｆ１１３、揮発性メモリＩ／Ｆ１１４、及び不揮発性メモリＩ／Ｆ１１５の中からアドレスバス１２１及びデータバス１２２を介した通信の受信側ブロックを選択するためにチップセレクト信号１２３を用いる。以下、ＣＰＵ１１１、バスコントローラ１１２、ホストＩ／Ｆ１１３、揮発性メモリＩ／Ｆ１１４、及び不揮発性メモリＩ／Ｆ１１５相互の通信は、バスコントローラ１１２を中継するものとして説明する。
【００２１】
ホストＩ／Ｆ１１３は、バス１３１を介してホスト機器１０２とデータの送受信を行うブロックであり、ＣＰＵ１１１からの制御により、ホスト機器１０２からの書き込みデータを揮発性メモリ１０３上のデータ一時格納領域１４２に転送するか、データ一時格納領域１４２上の読み出しデータをホスト機器１０２に転送する。ＣＰＵ１１１が前記制御を開始するには、ホストＩ／Ｆ１１３がホスト機器１０２から読み出し又は書き込みを要求された際にＣＰＵ１１１に割り込みを通知するのを条件にするのでもよいし、ＣＰＵ１１１がホストＩ／Ｆ１１３に対しポーリングを行い読み出し又は書き込みの要求を検出するのを条件にするのでもよい。揮発性メモリ１０３との間のデータ転送の仕組みは、揮発性メモリＩ／Ｆ１１４の説明の中で後述する。
【００２２】
揮発性メモリＩ／Ｆ１１４は、アドレスバス１５１及びデータバス１５２を介して揮発性メモリ１０３への読み書き、及び揮発性メモリ１０３上に格納されたソフトウェア１４１の実行の制御を行うブロックであり、前記制御は、ＣＰＵ１１１、ホストＩ／Ｆ１１３、及び不揮発性メモリＩ／Ｆ１１５からの読み書き又はソフトウェア実行の要求に応じて行う。以下、ＣＰＵ１１１、ホストＩ／Ｆ１１３、及び不揮発性メモリＩ／Ｆ１１５による揮発性メモリ１０３への読み書き、及びＣＰＵ１１１によるソフトウェア１４１の実行は、揮発性メモリＩ／Ｆ１１４を経由して行うものとして説明する。
【００２３】
不揮発性メモリＩ／Ｆ１１５は、バス１６１を介して１つ以上の不揮発性メモリ１０４への読み書きを行うブロックであり、ＣＰＵ１１１からの制御により読み書きを行う。不揮発性メモリ１０４から読み出された内容は、揮発性メモリ１０３上のデータ一時格納領域１４２、論理−物理ページアドレス変換テーブル１４３、論理ページアドレス割り当て履歴１４４のうちいずれかの領域に転送される。不揮発性メモリ１０４への書き込み対象は、データ一時格納領域１４２上のデータ、論理−物理ページアドレス変換テーブル１４３、論理ページアドレス割り当て履歴１４４のいずれかである。また、不揮発性メモリＩ／Ｆ１１５は、バス１６１を使用できる不揮発性メモリ１０４を選択するためにチップセレクト信号１６２を使用する。以下、ＣＰＵ１１１による不揮発性メモリ１０４への読み書きは、不揮発性メモリＩ／Ｆ１１５を経由して行うものとして説明する。
【００２４】
ＣＰＵ１１１は、ソフトウェア１４１を実行することで前述の読み出し又は書き込みに関連する制御を行うとともに、論理−物理ページアドレス変換テーブル１４３、論理ページアドレス割り当て履歴１４４、及びポインタ情報１４５の更新及び作成を行う。
【００２５】
図２は、論理−物理ページアドレス変換テーブル１４３の一例である。論理ページアドレスが列２０１に、それに対応するデータが格納された物理ページアドレスが列２０２にそれぞれ書き込まれている。論理−物理ページアドレス変換テーブル１４３の総行数は、不揮発性メモリＩ／Ｆ１１５に接続されている不揮発性メモリ１０４の個数に、不揮発性メモリ１０４の１個あたりのページ数を掛けた値に等しい。列２０１には、取り得る論理ページアドレスの値全てが昇順に書き込まれている。列２０２には、論理ページアドレスにデータが存在する場合のみ前記データが格納されている物理ページアドレスを書き込み、データが存在しない場合は空白である。
【００２６】
データを読み出す際は、上から数えて読み出し先の論理ページアドレスに等しい行で列２０２に書き込まれている物理ページアドレスを、読み出すデータの格納先と見なす。例えば、ホスト機器１０２から、論理ページアドレス０ｘ１３ＣＡからのデータの読み出しを要求されたとき、０ｘ１３ＣＡ行目に書き込まれている０ｘＤ８２が、データを読み出す物理ページアドレスになる。なお、「０ｘ」は後続する数値が１６進数表記であることを意味する（以下、同様）。
【００２７】
データを書き込む際は、上から数えて書き込み先の論理ページアドレスに等しい行で列２０２に、新しいデータの格納先となる物理ページアドレスを書き込む。例えば、ホスト機器１０２から、論理ページアドレス０ｘ１３Ｃ８へのデータの書き込みを要求されたとき、０ｘ１３Ｃ８行目に書き込まれている０ｘＢ０８７が、別の物理ページアドレスで上書きされる。一方、論理ページアドレス０ｘ１３Ｃ９へのデータの書き込みを要求されたとき、０ｘ１３Ｃ９行目の空白箇所に、データの格納先となる物理ページアドレスを書き込む。ここで、列２０２に書き込む物理ページアドレスはポインタ情報１４５の中に示されている物理ページアドレスの範囲内から選択するものとする。
【００２８】
なお、論理−物理ページアドレス変換テーブル１４３は論理ページアドレスと行とを一意に対応付けできるので、揮発性メモリ１０３の容量を削減するために列２０１を省略する構成も可能である。
【００２９】
図３は、論理ページアドレス割り当て履歴１４４の一例である。データが書き込まれている物理ページアドレスが列３０１に、それに対応する論理ページアドレスが列３０２にそれぞれ書き込まれている。データの書き込みを行う際は、一番上の空白行３１１で、列３０１にデータの格納先となる物理ページアドレスを、列３０２に論理ページアドレスをそれぞれ書き込む。ここで、検索結果に関係なく、列３０１に書き込む物理ページアドレスはポインタ情報１４５の中に示されている物理ページアドレスの範囲内から選択するものとする。
【００３０】
図４は、ポインタ情報１４５の一例である。前述の通り、データを書き込む際は、ここに示されている物理ページアドレス０ｘ１０２４〜０ｘ２０４７の範囲内で書き込み先の物理ページを上から順番に選択する。
【００３１】
図５は、ソフトウェア１４１がＣＰＵ１１１に行わせる論理−物理ページアドレス変換テーブル１４３、論理ページアドレス割り当て履歴１４４、及びポインタ情報１４５の更新手順である。本手順は、ホスト機器１０２からのデータ書き込み要求が発生したときに開始する。
【００３２】
最初に、ＣＰＵ１１１はポインタ情報１４５の特定行から、データ書き込み先の物理ページアドレスを取得する（ステップＳ５０１）。ここで、ポインタ情報１４５から物理ページアドレスを取得する行番号として、変数ｘを定義する。
【００３３】
次に、ＣＰＵ１１１はホストＩ／Ｆ１１３からデータ書き込み先の論理ページアドレスを取得し（ステップＳ５０２）、ステップＳ５０１で取得したアドレスが指す物理ページにデータを書き込む。ここで、同じ物理ページの余白に、ステップＳ５０２で取得した論理ページアドレスも同時に書き込む（ステップＳ５０３）。
【００３４】
物理ページへの書き込み後、ＣＰＵ１１１は論理−物理ページアドレス変換テーブル１４３を更新する。具体的には、上から数えてステップＳ５０２で取得した論理ページアドレスに相当する行に、ステップＳ５０１で取得した物理ページアドレスを書き込む（ステップＳ５０４）。
【００３５】
論理−物理ページアドレス変換テーブル１４３の更新後、ＣＰＵ１１１は論理ページアドレス割り当て履歴１４４のｘ行目に、ステップＳ５０１で取得した物理ページアドレスとステップＳ５０２で取得した論理ページアドレスとをそれぞれ追記する（ステップＳ５０５）。ここでｘの値が（論理ページアドレス割り当て履歴１４４の総行数−１）でない場合（ステップＳ５０６でＮｏに分岐）、ＣＰＵ１１１はｘの値を１加算して（ステップＳ５０８）、ホスト機器１０２からの次のデータ書き込み要求を待つ。一方、ｘの値が（論理ページアドレス割り当て履歴１４４の総行数−１）である場合（ステップＳ５０６でＹｅｓに分岐）、以下の処理に移行する。
【００３６】
ＣＰＵ１１１は、論理ページアドレス割り当て履歴１４４の全てを不揮発性メモリ１０４に保存し、保存完了後に揮発性メモリ１０３上から消去する（ステップＳ５０７）。なお、論理ページアドレス割り当て履歴１４４を不揮発性メモリ１０４上で保存する領域の指定方法は、初期化時に同領域のアドレス範囲と保存の順番とを一意に特定できる方法であれば任意の方法でよく、例えば不揮発性メモリ１０４の中から特定の１個を選び、その中の固定アドレスの物理ページに領域指定情報を書き込んで、前記領域指定情報が指す領域の範囲内で先頭の空白物理ページから順番に論理ページアドレス割り当て履歴１４４を書き込む方法が考えられる。
【００３７】
次に、ＣＰＵ１１１は、論理−物理ページアドレス変換テーブル１４３を等サイズに分割した中の１つを不揮発性メモリ１０４に保存する。具体的には、論理−物理ページアドレス変換テーブル１４３のｙ行目〜（ｙ＋Ｎ−１）行目を保存する（ステップＳ５０９）。ここでＮは定数で、論理−物理ページアドレス変換テーブル１４３の総行数はＮで割り切れるものとする。一方、ｙは変数で、Ｎの倍数のいずれかから１引いた値を取り得る。なお、分割した論理−物理ページアドレス変換テーブル１４３を不揮発性メモリ１０４上で保存する領域の指定方法は、初期化時に同領域のアドレス範囲と保存の順番とを一意に特定でき、かつ論理ページアドレス割り当て履歴１４４の保存領域と区別できれば任意の方法でよい。
【００３８】
その後、ＣＰＵ１１１は、空き物理ページ、すなわち空白の物理ページ又は論理ページの上書きにより使用されなくなった物理ページを任意の方法で検索し、そのうち空白でないページを消去し（ステップＳ５１０）、これらの物理ページアドレスでポインタ情報１４５を更新するとともに、更新したポインタ情報１４５を不揮発性メモリ１０４に保存する（ステップＳ５１１）。検索は、論理ページアドレス割り当て履歴１４４の総行数と同じ個数の空き物理ページが見つかるまで継続する。なお、ポインタ情報１４５を不揮発性メモリ１０４上で保存する領域の指定方法は、初期化時に同領域のアドレス範囲と保存の順番とを一意に特定でき、かつ論理ページアドレス割り当て履歴１４４の保存領域、及び分割した論理−物理ページアドレス変換テーブル１４３の保存領域と区別できれば任意の方法でよい。
【００３９】
ポインタ情報１４５の保存が完了すると、ＣＰＵ１１１は、ｘの値を０で初期化する（ステップＳ５１２）。これにより、次にホスト機器１０２から次のデータ書き込みが要求されたとき、ステップＳ５０１での物理ページアドレス取得元がポインタ情報１４５の先頭行に戻るとともに、ステップＳ５０５での物理ページアドレス及び論理ページアドレスの追記先が論理ページアドレス割り当て履歴１４４の先頭行に戻る。
【００４０】
次に、ＣＰＵ１１１は、（ｙ＋Ｎ）の値が最大値に達したか（すなわち、論理−物理ページアドレス変換テーブル１４３の最終行まで不揮発性メモリ１０４に保存完了したか）判定し（ステップＳ５１３）、達した場合は（ステップＳ５１３でＹｅｓに分岐）ｙの値を０で初期化する（ステップＳ５１４）。これにより、次にホスト機器１０２から次のデータ書き込みが要求されたとき、ステップＳ５０９で論理−物理ページアドレス変換テーブル１４３の保存対象領域が先頭に戻る。（ｙ＋Ｎ）の値が最大値に達していない場合（ステップＳ５１３でＮｏに分岐）、ＣＰＵ１１１はｙの値にＮ加算する（ステップＳ５１５）。これにより、次にホスト機器１０２から次のデータ書き込みが要求されたとき、ステップＳ５０９で論理−物理ページアドレス変換テーブル１４３の保存対象領域が、今回のデータ書き込みで保存した領域より１つ後方になる。
【００４１】
以上の処理を完了後、ＣＰＵ１１１はホスト機器１０２からの次のデータ書き込み要求を待つ。
【００４２】
図５の処理を繰り返した結果を時系列で表すと図６の通りになる。ホスト機器１０２からの要求に従ってポインタ情報１４５が指す物理ページにデータと論理ページアドレスとを書き込み、論理ページアドレス割り当て履歴１４４が一杯になると論理ページアドレス割り当て履歴１４４、分割した論理−物理ページアドレス変換テーブル１４３、ポインタ情報１４５を不揮発性メモリ１０４に保存するサイクルを繰り返している。
【００４３】
このように、論理−物理ページアドレス変換テーブル１４３を等サイズに分割して、分割された各領域を周期的に巡回して不揮発性メモリ１０４に保存する構成なので、各サイクルでデータ以外の情報を不揮発性メモリ１０４に保存する処理負荷が一定になり、したがって安定した性能でデータの書き込みができるようになる。また、あるサイクルで不揮発性メモリ１０４に保存した、分割された論理−物理ページアドレス変換テーブル１４３は、その後のデータの書き込みにより揮発性メモリ１０３上の最新の内容と差分が生じてくるが、論理ページアドレス割り当て履歴１４４とポインタ情報１４５とを一緒に保存することにより、初期化時に、揮発性メモリ１０３上の論理−物理ページアドレス変換テーブル１４３を、論理ページアドレス割り当て履歴１４４及びポインタ情報１４５、並びにポインタ情報１４５が指す物理ページに書き込まれた論理ページアドレスを用いて前回の電源断直前の状態にまで補正することが可能になる。
【００４４】
なお、図６は論理−物理ページアドレス変換テーブル１４３を４分割した場合の例であり、分割した先頭の領域を保存して論理ページアドレス割り当て履歴１４４が一杯になる前に電源断になった場合を表している。ここで、Ｔ６０１からＴ６０４までの各符号は時刻であり、第２の実施形態で参照する。
【００４５】
《第２の実施形態》
本発明の第２の実施形態の構成は、第１の実施形態に示した図１の構成をベースにしており、揮発性メモリ１０３上のソフトウェア１４１が図７及び図８に示す機能を追加で備えている。
【００４６】
図７及び図８は、ソフトウェア１４１がＣＰＵ１１１に行わせる、論理−物理ページアドレス変換テーブル１４３を前回の電源断直前の状態に復元する手順を示す図である。本手順は、電源投入後の初期化処理中に行われる。
【００４７】
図７に示すように、ＣＰＵ１１１は最初に、論理−物理ページアドレス変換テーブル１４３を不揮発性メモリ１０４に保存する際に分割した個数を変数ｚに代入する（ステップＳ７０１）。後述するように、変数ｚは、分割された論理−物理ページアドレス変換テーブル１４３と論理ページアドレス割り当て履歴１４４とを不揮発性メモリ１０４から読み出す順番を管理するための変数である。
【００４８】
以下のＳ７０２からＳ７１４までの各ステップは、変数ｚの値が１になる（ステップＳ７０５でＹｅｓに分岐）まで繰り返される。
【００４９】
前記繰り返しの中で、ＣＰＵ１１１は最初に、前回の電源断から遡ってｚ回目に不揮発性メモリ１０４に保存された、分割された論理−物理ページアドレス変換テーブル１４３の保存場所を特定する（ステップＳ７０２）。特定の方法は任意の方法でよい。例えば、保存時に不揮発性メモリ１０４の中から特定の１個を選び、その中の固定アドレスの物理ページに領域指定情報を書き込んで、前記領域指定情報が指す領域の範囲内で先頭の空白物理ページから順番に分割された論理−物理ページアドレス変換テーブル１４３を書き込む方法を用い、かつ分割サイズが物理ページサイズ以下の場合、ステップＳ７０２ではまず前記固定アドレスの物理ページから領域指定情報を読み出し、前記領域指定情報が指す領域内で先頭の空白ページを検索してそこからｚページ分遡った物理ページアドレスを、所望の分割された論理−物理ページアドレス変換テーブル１４３の保存場所として特定できる。
【００５０】
次に、ＣＰＵ１１１は、ステップＳ７０２で保存場所を特定した、分割された論理−物理ページアドレス変換テーブル１４３を揮発性メモリ１０３に読み出す際の読み出し先を特定する（ステップＳ７０３）。特定の方法は任意の方法でよい。例えば、ステップＳ７０２の保存場所特定に上記の方法を用いた場合、前記領域指定情報が指す領域の先頭物理ページからステップＳ７０２で特定された保存場所までのページ数を論理−物理ページアドレス変換テーブル１４３の分割数で割った余りから読み出し先を求めればよい。仮に、論理−物理ページアドレス変換テーブル１４３の総行数をＬ行、分割数をＭ、前記余りをＮとした場合、読み出し先は、揮発性メモリ１０３上の論理−物理ページアドレス変換テーブル１４３用の領域で（Ｎ×（Ｌ／Ｍ））行目から（（Ｎ＋１）×（Ｌ／Ｍ）−１）行目までの範囲となる。
【００５１】
更に、ＣＰＵ１１１は、分割された論理−物理ページアドレス変換テーブル１４３を、ステップＳ７０２で特定した不揮発性メモリ１０４上の保存場所から、ステップＳ７０３で特定した揮発性メモリ１０３上の読み出し先に読み出す（ステップＳ７０４）。
【００５２】
分割された論理−物理ページアドレス変換テーブル１４３の読み出しを完了すると、ＣＰＵ１１１は、変数ｚの値が１、すなわちステップＳ７０４で読み出した分割された論理−物理ページアドレス変換テーブル１４３が、前回の電源断前の最後のタイミングで保存されたものか判定し、そうでない場合（ステップＳ７０５でＮｏに分岐。Ｙｅｓに分岐した場合は後述）は以下の処理に移行する。
【００５３】
変数ｚの値が１でない場合、ＣＰＵ１１１はまず、前回の電源断から遡って（ｚ−１）回目に不揮発性メモリ１０４に保存された論理ページアドレス割り当て履歴１４４の保存場所を特定し（ステップＳ７０６）、特定された保存場所から論理ページアドレス割り当て履歴１４４を揮発性メモリ１０３に読み出す（ステップＳ７０７）。ステップＳ７０６での保存場所特定の方法は、分割された論理−物理ページアドレス変換テーブル１４３と同様、任意の方法でよい。
【００５４】
論理ページアドレス割り当て履歴１４４の読み出しを完了すると、ＣＰＵ１１１は、以下のステップＳ７０９からＳ７１４までを繰り返して、読み出された論理−物理ページアドレス変換テーブル１４３の復元を行う。最初にＣＰＵ１１１は、読み出した論理ページアドレス割り当て履歴１４４のｉ行目に書かれた論理ページアドレスを変数ｌに代入する（ステップＳ７０９）。ここでｉは変数で、ステップＳ７０８で０に初期化される。すなわち論理ページアドレス割り当て履歴１４４を読み出すと、最初に０行目を参照することになる。
【００５５】
次に、ＣＰＵ１１１は、読み出した論理ページアドレス割り当て履歴１４４のｉ行目に書かれた物理ページアドレスを変数ｐに代入する（ステップＳ７１０）。
【００５６】
変数ｌ、ｐへの代入後、ＣＰＵ１１１は、揮発性メモリ１０３上の論理−物理ページアドレス変換テーブル１４３用の領域のｌ行目に、変数ｐの値を書き込む（ステップＳ７１１）。このステップにより、揮発性メモリ１０３上に読み出し済の分割された論理−物理ページアドレス変換テーブル１４３の内容を、書き込み１回分だけ新しい状態に戻すことができる。
【００５７】
その後、ＣＰＵ１１１は、変数ｉが最大値、すなわち（論理ページアドレス割り当て履歴１４４の総行数−１）に達しているか判定し、達していなければ（ステップＳ７１２でＮｏに分岐）変数ｉの値に１加算し（ステップＳ７１４）前記ステップＳ７０９に戻り、達していれば（ステップＳ７１２でＹｅｓに分岐）変数ｚの値を１減算して（ステップＳ７１３）前記ステップＳ７０２に戻る。これらの処理は、前記ステップＳ７０７で読み出した論理ページアドレス割り当て履歴１４４の０行目から最終行までに書かれている物理ページアドレスの値を、揮発性メモリ１０３上の論理−物理ページアドレス変換テーブル１４３用の領域に順番に書き込むことで、揮発性メモリ１０３上に読み出し済の分割された論理−物理ページアドレス変換テーブル１４３の内容を、不揮発性メモリ１０４への保存周期の１周期分新しい状態に戻して、前回読み出した分割された論理−物理ページアドレス変換テーブル１４３よりも１周期分、前回の電源断に近いタイミングで不揮発性メモリ１０４に保存された、分割された論理−物理ページアドレス変換テーブル１４３の読み出し処理に移行することを意味している。
【００５８】
前回の電源断直前に不揮発性メモリ１０４に保存された、分割された論理−物理ページアドレス変換テーブル１４３の読み出し、すなわち変数ｚの値が１のときの読み出しが完了すると、読み出せる論理ページアドレス割り当て履歴１４４がこれ以上ないので、以下に説明するＳ７１５からＳ７２６までの処理に移行し、データ格納先の物理ページアドレスにデータと一緒に書き込まれた論理ページアドレスをもとに論理−物理ページアドレス変換テーブル１４３を前回の電源断直前の最新の状態にまで復元するとともに論理ページアドレス割り当て履歴１４４も前回の電源断直前の最新の状態にまで復元する（ステップＳ７０５でＹｅｓに分岐：図７から図８へ進む）。
【００５９】
そのために、図８に示すように、ＣＰＵ１１１は最初に、揮発性メモリ１０３に読み出された論理ページアドレス割り当て履歴１４４を消去する（ステップＳ７１５）。
【００６０】
また、ＣＰＵ１１１は、分割された論理−物理ページアドレス変換テーブル１４３をステップＳ７０４にて揮発性メモリ１０３上に最後に読み出したときの読み出し先の最終行番号に１加算し、更に論理−物理ページアドレス変換テーブル１４３全体の総行数で割った余りを変数ｙに代入する（ステップＳ７１６）。ここで、変数ｙは図５の手順で使用するものと同一であり、これにより、図５のステップＳ５０９を次に実行する際、分割された論理−物理ページアドレス変換テーブル１４３のうち、電源断前に最後に不揮発性メモリ１０４に保存された領域の１つ後方の領域を保存できるようになり、電源断が発生しても論理−物理ページアドレス変換テーブル１４３を保存する順番の巡回性が保たれる。
【００６１】
次に、ＣＰＵ１１１は、前回の電源断直前に不揮発性メモリ１０４に保存したポインタ情報１４５の保存場所を特定し（ステップＳ７１７）、特定された保存場所からポインタ情報１４５を揮発性メモリ１０３に読み出す（ステップＳ７１８）。ステップＳ７１７での保存場所特定の方法は、分割された論理−物理ページアドレス変換テーブル１４３及び論理ページアドレス割り当て履歴１４４と同様、任意の方法でよい。
【００６２】
ポインタ情報１４５の読み出しを完了すると、ＣＰＵ１１１は、以下のステップＳ７２０からＳ７２６までを繰り返す。まずＣＰＵ１１１は、読み出したポインタ情報１４５のｊ行目に書かれた物理ページアドレスを変数ｐに代入する（ステップＳ７２０）。ここでｊは変数で、ステップＳ７１９で０に初期化される。すなわちポインタ情報１４５を読み出すと、最初に０行目を参照することになる。
【００６３】
次に、ＣＰＵ１１１は、変数ｐが指す物理ページを読み出し（ステップＳ７２１）、その内容が空白でなければ（ステップＳ７２２でＮｏに分岐。Ｙｅｓに分岐した場合は後述）そこに書かれた論理ページアドレスを変数ｌに代入する（ステップＳ７２３）。
【００６４】
変数ｐ、ｌへの代入後、ＣＰＵ１１１は、揮発性メモリ１０３に読み出された論理−物理ページアドレス変換テーブル１４３用のｌ行目に、変数ｐの値を上書きする（ステップＳ７２４）とともに、揮発性メモリ１０３上の論理ページアドレス割り当て履歴１４４のｊ行目に変数ｐと変数ｌの値を追記する（ステップＳ７２５）。これらのステップにより、揮発性メモリ１０３上に読み出された論理−物理ページアドレス変換テーブル１４３の内容、及び揮発性メモリ１０３上の論理ページアドレス割り当て履歴１４４の内容を、書き込み１回分だけ新しい状態に戻すことができる。
【００６５】
その後、ＣＰＵ１１１は、変数ｊが最大値、すなわち（ポインタ情報１４５の総行数−１）に達しているか判定し、達していなければ（ステップＳ７２６でＮｏに分岐）変数ｊの値に１加算し（ステップＳ７２９）前記ステップＳ７２０に戻り、達していれば（ステップＳ７２６でＹｅｓに分岐）、論理ページアドレス割り当て履歴１４４が一杯になっており、論理−物理ページアドレス変換テーブル１４３、論理ページアドレス割り当て履歴１４４、及びポインタ情報１４５の一部又は全部を保存完了する前に電源断が発生したものと見なし、図５のＳ５０７〜Ｓ５１５と同様の手順でこれらの保存を開始、又は再開して（ステップＳ７２７）変数ｘに０を代入する（ステップＳ７２８）。ここで、変数ｘは図５の手順で使用するものと同一である。完了すると、ＣＰＵ１１１は処理を終了し、データの書き込み及び読み出しを受け付けできる状態になる。
【００６６】
ここで、前述のステップＳ７２２でＹｅｓに分岐、すなわちステップＳ７２１で読み出された物理ページが空白であった場合、ＣＰＵ１１１は、論理−物理ページアドレス変換テーブル１４３、及び論理ページアドレス割り当て履歴１４４を前回の電源断直前の状態にまで復元できたと見なし、変数ｘに変数ｊの値を代入して（ステップＳ７３０）処理を終了し、データの書き込み及び読み出しを受け付けできる状態になる。
【００６７】
図７及び図８の処理の途中経過及び結果の一例を時系列で表すと、図９（ａ）〜図９（ｉ）の通りになる。図９（ａ）〜図９（ｉ）は、図６に示した電源断の状況から電源を再投入、初期化する流れを表している。
【００６８】
図６に示した内容は、論理−物理ページアドレス変換テーブル１４３を４分割したうちの一番上の領域を不揮発性メモリ１０４に保存した後に電源断が発生した状況を表しているので、図７のステップＳ７０２及びＳ７０３の結果、４分割したうちの２番目の領域を最初に揮発性メモリ１０３に読み出す。これを含め、以下（ａ）から（ｉ）までの段階を経て、論理−物理ページアドレス変換テーブル１４３は前回の電源断直前の状態に復元される。
【００６９】
（ａ）論理−物理ページアドレス変換テーブル１４３を揮発性メモリ１０３に読み出す（４分割したうちの２番目。図７のステップＳ７０２〜Ｓ７０４）。
【００７０】
（ｂ）図６の時刻Ｔ６０１からＴ６０２までの間に不揮発性メモリ１０４に保存された、論理ページアドレス割り当て履歴１４４に書かれた物理ページアドレスで、論理−物理ページアドレス変換テーブル１４３を上書きし、（ａ）で読み出した領域を図６の時刻Ｔ６０２時点の状態にまで戻す（図７のステップＳ７０６〜Ｓ７１４）。
【００７１】
（ｃ）論理−物理ページアドレス変換テーブル１４３を揮発性メモリ１０３に読み出す（４分割したうちの３番目。図７のステップＳ７０２〜Ｓ７０４）。
【００７２】
（ｄ）図６の時刻Ｔ６０２からＴ６０３までの間に不揮発性メモリ１０４に保存された、論理ページアドレス割り当て履歴１４４に書かれた物理ページアドレスで、論理−物理ページアドレス変換テーブル１４３を上書きし、（ａ）及び（ｃ）で読み出した領域を図６の時刻Ｔ６０３時点の状態にまで戻す（図７のステップＳ７０６〜Ｓ７１４）。
【００７３】
（ｅ）論理−物理ページアドレス変換テーブル１４３を揮発性メモリ１０３に読み出す（４分割したうちの４番目。図７のステップＳ７０２〜Ｓ７０４）。
【００７４】
（ｆ）図６の時刻Ｔ６０３からＴ６０４までの間に不揮発性メモリ１０４に保存された、論理ページアドレス割り当て履歴１４４に書かれた物理ページアドレスで、論理−物理ページアドレス変換テーブル１４３を上書きし、（ａ）、（ｃ）及び（ｅ）で読み出した領域を図６の時刻Ｔ６０４時点の状態にまで戻す（図７のステップＳ７０６〜Ｓ７１４）。
【００７５】
（ｇ）論理−物理ページアドレス変換テーブル１４３を揮発性メモリ１０３に読み出す（４分割したうちの１番目。図７のステップＳ７０２〜Ｓ７０４）。
【００７６】
（ｈ）図６の時刻Ｔ６０４以降にデータを書き込んだ全ての物理ページアドレスと、これらの物理ページに書き込まれた論理ページアドレスとをもとに、論理−物理ページアドレス変換テーブル１４３を上書きする（図８のステップＳ７１７〜Ｓ７２９）。
【００７７】
（ｉ）復元完了（図８のステップＳ７３０）。
【産業上の利用可能性】
【００７８】
本発明はＳＳＤ、ＳＤメモリカード等、不揮発性メモリを内蔵する多様な形態の記憶装置に適用でき、大容量化による論理−物理ページアドレス変換テーブルのサイズ増大に影響されずに安定した性能でデータの書き込みができるようになり、したがって大容量化と高速化との両立が容易になる。
【符号の説明】
【００７９】
１０１  集積回路
１０２  ホスト機器
１０３  揮発性メモリ
１０４  不揮発性メモリ
１１１  ＣＰＵ
１１２  バスコントローラ
１１３  ホストＩ／Ｆ
１１４  揮発性メモリＩ／Ｆ
１１５  不揮発性メモリＩ／Ｆ
１２１  アドレスバス
１２２  データバス
１２３  チップセレクト信号
１３１  バス
１４１  ソフトウェア
１４２  データ一時格納領域
１４３  論理−物理ページアドレス変換テーブル
１４４  論理ページアドレス割り当て履歴
１４５  ポインタ情報
１５１  アドレスバス
１５２  データバス
１６１  バス
１６２  チップセレクト信号
【図１】
0005646402.tif 000002
【図２】
0005646402.tif 000003
【図３】
0005646402.tif 000004
【図４】
0005646402.tif 000005
【図５】
0005646402.tif 000006
【図６】
0005646402.tif 000007
【図７】
0005646402.tif 000008
【図８】
0005646402.tif 000009
【図９】
0005646402.tif 000010