実施の形態1.
まず、NANDフラッシュメモリの基本的な構造や制御方法について説明する。
図1は、NANDフラッシュメモリのデバイスチップ11の基本的な構成と接続形態を示すブロック図である。デバイスチップ11は、メモリバス12を介してデータ記録装置13と接続している。データ記録装置13は、デバイスチップ11にデータを記録する。また、データ記録装置13は、デバイスチップ11からデータを読出し、データが不要な場合は消去する。
デバイスチップ11は、メモリインタフェース部14、コマンド処理部15、ページバッファ16、NANDフラッシュメモリ17から構成されている。メモリインタフェース部14は、メモリバス12を介してデータ記録装置13と接続し、入出力のインタフェースとなっている。コマンド処理部15は、コマンドを処理する。ページバッファ16は、データを一時的に保持する。NANDフラッシュメモリ17は、実際にデータを保持するメモリ素子が配列されている。
メモリインタフェース部14は、データ記録装置13からコマンドが入力されるとコマンドをコマンド処理部15に出力する。コマンドは、書込み、消去又は読込みである。コマンド処理部15は、入力されたコマンドの内容に応じてページバッファ16を制御する。これにより、ページバッファ16とNANDフラッシュメモリ17との間のデータ転送が制御される。
コマンドが書込みの場合、メモリインタフェース部14はコマンドをコマンド処理部15に出力し、コマンドに付加されているデータをページバッファ16に出力する。ページバッファ16は、データを一時保存した後、コマンド処理部15からの指示により、NANDフラッシュメモリ17にデータを書込む。コマンドが消去の場合、ページバッファ16は、コマンド処理部15からの指示により、NANDフラッシュメモリ17からデータを消去する。
コマンドが読込みの場合、ページバッファ16はコマンド処理部15からの指示により、NANDフラッシュメモリ17からデータを読出す。ページバッファ16は、データを一時保存した後、メモリインタフェース部14に出力する。メモリインタフェース部14は、ページバッファ16から入力されたデータをメモリバス12へ出力する。
図2は、NANDフラッシュメモリ17の基本的な構成を示すブロック図である。NANDフラッシュメモリ17は、複数のブロック21a〜jで構成されている。ブロック21a〜jは、それぞれ複数のページから構成されている。例えば、ブロック21aはk個のページ22a1〜akから構成されている。
現在、ブロックの一般的な記録容量は64〜256キロバイト程度である。また、ページの一般的な記録容量は1〜4キロバイト程度である。データの書込み及び読出しはページ単位で行われる。データの消去は、ブロック単位で行われる。NANDフラッシュメモリ17では、新しいデータを記録する場合、すでに書込まれているデータを消去する必要がある。
図3は、データ記録装置13からデバイスチップ11へのデータの書込み処理の順序を示す図である。図3において、左から右へ時間が進み、31〜34はそれぞれ処理を示す。31〜34の処理の長さは時間を表す。ただし、処理にかかる時間は一例である。処理は、第1コマンド送信31、書込みデータ転送32、第2コマンド送信33、チップ内書込み処理34の順に行われる。
最初に、データ記録装置13はデバイスチップ11に第1コマンド31を送信する。通常、第1コマンド31には書込み先であるデバイスチップ11のNANDフラッシュメモリ17のブロック番号が含まれている。次にデータ記録装置13はデバイスチップ11に1ページ分のデータを転送する。デバイスチップ11は、転送されたデータをページバッファ16に一時保存する。
次に、データ記録装置13はデバイスチップ11に第2コマンド33を送信する。デバイスチップ11は、第2コマンド33を受信したことを契機としてチップ内書込み処理34を行う。デバイスチップ11は、ページバッファ16に保存されたデータをNANDフラッシュメモリ17に転送し、書込む。データは、第1コマンドで指定されたブロックに書込まれる。データ記録装置13は、デバイスチップ11におけるチップ内書込み処理34の完了を待って、別の処理を開始する必要がある。
図4は、データ記録装置13に複数のデバイスチップを接続した形態を示すブロック図である。データ記録装置13は、メモリバス41を介して複数のデバイスチップ11a〜nと接続している。
図5は、データ記録装置13から複数のデバイスチップ11a〜bへのデータの書込み処理の順序を示す図である。図5において、左から右へ時間が進む。31a〜34aはデバイスチップ11aに対する処理を示す。31b〜34bはデバイスチップ11bに対する処理を示す。
デバイスチップ11aに対するチップ内書込み処理34aが行われている間、メモリバス41は空き状態となる。データ記録装置13は、この間に同一のメモリバス41に接続されたデバイスチップ11bに対する処理31b〜33bを実施する。このようにデバイスチップ11aに対する処理とデバイスチップ11bに対する処理を並列に行うことにより、全体として書込み性能を向上させることができる。
例えば、デバイスチップ11aへの第1コマンド送信31aから第2コマンド送信33aにかかる時間、デバイスチップ11aに対するチップ内書込み処理34aにかかる時間、デバイスチップ11bへの第1コマンド送信31bから第2コマンド送信33bにかかる時間、及び、デバイスチップ11bに対するチップ内書込み処理34bにかかる時間が等しい場合、データ記録装置13は、並列処理を行わない場合の3/4の時間でデータを書込むことができる。なお、通常は、第1コマンド送信31a〜bから第2コマンド送信33a〜bまでにかかる時間よりも、チップ内書込み処理34a〜bにかかる時間のほうが長い。
以下に、本実施の形態について説明する。
図6は、実施の形態1に係るデータ記録装置60の構成を示すブロック図である。データ記録装置60はメモリバス61を介して複数のNANDフラッシュメモリのデバイスチップ11a〜nに接続している。データ記録装置60は、コマンドインタフェース部62、書込み機能部63、消去機能部64、読出し機能部65、空きブロック管理部66、並列書込み用空きブロック管理部67、アドレス変換部68、及びメモリインタフェース部69から構成されている。
コマンドインタフェース部62は、データ記録装置60内の図示しない上位システムからのコマンドを書込み機能部63、消去機能部64又は読出し機能部65に振り分ける。また、コマンドインタフェース部62は、書込み機能部63、消去機能部64、又は読出し機能部65の処理結果を上位システムへ出力する。
書込み機能部63は、デバイスチップ11a〜nにデータの書込みを行う。消去機能部64は、デバイスチップ11a〜nに保持されているデータの消去を行う。読出し機能部65は、デバイスチップ11a〜nに保持されているデータの読出しを行う。
空きブロック管理部66は、デバイスチップ11a〜nのNANDフラッシュメモリの全てのブロックの状態を管理している。ブロックの状態とは、データ書込み済みで使用中又はデータ消去済みで空きのどちらかである。並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブルを保持し、並列書き込み数分のブロックを1つの組にして空きブロックを管理する。アドレス変換部68は、上位システムが認識する論理アドレスと、デバイスチップ11a〜nのNANDフラッシュメモリのブロック番号との対応付けを保存している。
メモリインタフェース部69は、書込み機能部63、消去機能部64又は読出し機能部65からのコマンドをデバイスチップ11a〜nに出力する。また、メモリインタフェース部69は、NANDフラッシュメモリのデバイスチップ11a〜nから入力される処理結果を書込み機能部63、消去機能部64又は読出し機能部65に出力する。
次に、データ書込みの動作について説明する。
書込み機能部63は、コマンドインタフェース部62から書込みコマンドを受信すると、並列書込み用空きブロック管理部67に並列書込み数分の空きブロックを要求する。並列書込み用空きブロック管理部67は並列書込み用空きブロック管理テーブルから並列書込み数分の空きブロックの番号を取得し、書込み機能部63に通知する。
書込み機能部63は、書込みデータを並列書込み数分に分割し、それぞれ空きブロック番号とともにメモリインタフェース部69に書込みコマンドを通知する。メモリインタフェース部69は、並列書込み数分のデバイスチップそれぞれに書込みコマンドを送信する。インタフェース部69は、デバイスチップへの書込み処理中でメモリバスの空いているときは他のデバイスチップへ書き込みコマンドを送信するように制御し、複数のデバイスチップへの書込みを並列に行う。デバイスチップは、指定されたNANDフラッシュメモリのブロックに書込み処理を行い、処理が完了するとメモリインタフェース部69に通知する。
なお、1つのデバイスチップへ書込みする場合、書込み機能部63は、空きブロック管理部66に空きブロックを要求し、取得する。書込み機能部63は、空きブロック番号とともにメモリインタフェース部69に書込みコマンドを通知する。メモリインタフェース部69は、デバイスチップに書込みコマンドを送信する。複数のデバイスチップに並列書込みするのか、あるいは1つのデバイスチップに書込みするのかは、上位システムからの指示に従って処理を行ってもよいし、書込み機能部63がどちらの処理を行うか判断してもよい。
メモリインタフェース部69は、デバイスチップへの書込み処理が完了したことを書込み機能部63に通知する。書込み機能部63は、書込みが行われたデバイスチップのブロック番号と上位システムが認識している論理アドレスをアドレス変換部68へ通知する。アドレス変換部68は、通知されたデバイスチップのブロック番号と論理アドレスを対応付けて保存する。書込み機能部63は、書込み処理が完了したことをコマンドインタフェース部62に通知する。コマンドインタフェース部62は、書込み処理が完了したことを上位システムに通知し、書込み処理が完了する。
次に、データ消去の動作について説明する。
消去機能部64は、コマンドインタフェース部62から消去コマンドを受信すると、指定された論理アドレスをアドレス変換部68に通知する。アドレス変換部68は指定された論理アドレスに対応するデバイスチップのブロック番号を消去機能部64に通知する。消去機能部64は、デバイスチップのブロック番号を指定して消去コマンドをメモリインタフェース部69に送信する。
メモリインタフェース部69は消去コマンドをデバイスチップに送信する。消去コマンドを受信したデバイスチップは、指定されたブロックのデータを消去し、処理が完了するとメモリインタフェース部69へ通知する。メモリインタフェース部69は、デバイスチップの消去処理が完了したことを消去機能部64に通知する。
消去機能部64は、当該ブロックと論理アドレスとの対応付けを削除するようにアドレス変換部68に通知する。また、消去機能部64は、空きブロック管理部66に当該ブロックが空きであることを通知する。空きブロック管理部66は消去処理が完了した空きブロックを並列書込み用空きブロック管理部67に通知する。消去機能部64は、消去処理が完了したことをコマンドインタフェース部62に通知する。コマンドインタフェース部62は、消去処理が完了したことを上位システムに通知する。
次に、データ読出しの動作について説明する。
読出し機能部65は、コマンドインタフェース部62から読出しコマンドを受信すると、指定された論理アドレスをアドレス変換部68に通知する。アドレス変換部68は指定された論理アドレスをデバイスチップのブロック番号に変換し、読出し機能部65に通知する。読出し機能部65は、デバイスチップのブロック番号を指定して読出しコマンドをメモリインタフェース部69に送信する。
メモリインタフェース部69は読出しコマンドをデバイスチップに送信する。読出しコマンドを受信したデバイスチップは、指定されたブロックのデータを読出し、メモリインタフェース部69へ通知する。メモリインタフェース部69は、デバイスチップの読出し処理が完了したことを読出し機能部65に通知する。読出し機能部65は、読出し処理が完了したことをコマンドインタフェース部62に通知する。コマンドインタフェース部62は、読出したデータを上位システムに通知する。
次に、空きブロック管理部66及び並列書込み用空きブロック管理部67における動作について説明する。
図7は、実施の形態1に係る並列書込み用空きブロック管理テーブル71を示す図である。並列書込み用空きブロック管理テーブル71は、並列書込み数分のデバイスチップとそのブロック番号を1つの組として1以上の組を保存するテーブルである。並列書込み用空きブロック管理テーブル71の左端の番号72は、組の番号を示すインデックスである。各インデックスには、並列書込み数分のエントリが保存される。本実施の形態においては、並列書込み数が3のため、3個のエントリ73a〜cが保存されている。各エントリには、デバイスチップ番号74a〜cとブロック番号75a〜cが保存されている。デバイスチップ番号74a〜cは、デバイスチップを識別する識別子、ブロック番号75a〜cはブロックを識別する識別子である。
並列書込み用空きブロック管理テーブル71において、デバイスチップ番号74b〜c及びブロック番号75b〜cが「−」となっているのは、未登録であることを示す。例えば、インデックス7のエントリ1のデバイスチップ番号は1、ブロック番号は50が登録され、エントリ2及びエントリ3のデバイスチップ番号及びブロック番号は未登録である。なお、同じインデックスのエントリに同じデバイスチップの異なるブロック番号を登録することはできない。
図8は、実施の形態1に係る空きブロック管理部66及び並列書込み用空きブロック管理部67における処理の流れを示すフローチャートである。
空きブロック管理部66は、消去機能部64から消去を完了したブロックが通知されるとステップS81より処理を開始する。ステップS81において、空きブロック管理部66は、当該ブロックを並列書込み用空きブロック管理部67に通知し、ステップS82へ進む。
ステップS82において、並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル71に当該ブロックを登録することができる空きエントリがあるか探索する。ステップS82の詳細は、後述する。処理は、ステップS83へ進む。ステップS83において、並列書込み用空きブロック管理部67は、当該ブロックを並列書込み用空きブロック管理テーブル71に登録することができる場合、ステップS84へ進む。
ステップS84において、並列書込み用空きブロック管理部67は、当該ブロックを並列書込み用空きブロック管理テーブル71に登録し、ステップS85へ進む。ステップS85において、並列書込み用空きブロック管理部67は、当該ブロックを並列書込み用として使用するため、「使用」を空きブロック管理部66に通知する。ステップS87において、空きブロック管理部66は、ブロック管理テーブルにおいて当該ブロックを使用中として登録し、処理を終了する。
ステップS83において、並列書込み用空きブロック管理部67は、当該ブロックを並列書込み用空きブロック管理テーブル71に登録することができない場合、ステップS86へ進む。ステップS86において、並列書込み用空きブロック管理部67は、当該ブロックを並列書込み用として使用しないため、「不使用」を空きブロック管理部66に通知する。ステップS88において、空きブロック管理部66は、空きブロック管理テーブルにおいて当該ブロックを空きとして登録し、処理を終了する。
図9は、実施の形態1に係る並列書込み用空きブロック管理部67における並列書込み用空きブロック管理テーブル71の探索処理の流れを示すフローチャートである。図9のフローチャートは、図8のステップS82の処理の詳細を示す。並列書込み用空きブロック管理部67は、空きブロック管理部66から空きブロックを通知されると、ステップS91より処理を開始する。
通知された空きブロックがデバイスチップ#2のブロック番号80の場合の処理を説明する。ステップS91において、並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル71のインデックス1を参照する。並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル71のインデックス1には空きエントリがないため、処理はステップS93へ進む。ステップS93において、並列書込み用空きブロック管理部67は、全てのインデックスを探索済みではないため、ステップS94へ進む。
ステップS94において、並列書込み用空きブロック管理部67は、参照するインデックスをインクリメントし、ステップS91へ進む。ステップS91において、並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル71のインデックス2を参照する。インデックス2からインデックス5まで空きエントリがないため、並列書込み用空きブロック管理部67は、インデックス1の場合と同様にステップS91、ステップS93及びステップS94の処理を繰り返す。
ステップS91において、並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル71のインデックス6を参照する。インデックス6は空きエントリがあるため、処理はステップS92へ進む。ステップS92において、デバイスチップ#2はインデックス6のエントリ2に登録されているため、処理はステップS93へ進む。ステップS93において、並列書込み用空きブロック管理部67は、全てのインデックスを探索済みではないため、ステップS94へ進む。ステップS94において、並列書込み用空きブロック管理部67は、参照するインデックスをインクリメントし、ステップS91へ進む。
ステップS91において、並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル71のインデックス7を参照する。インデックス7には空きエントリがあるため、処理はステップS92へ進む。ステップS92において、デバイスチップ#2はインデックス7には登録されていないため、並列書込み用空きブロック管理部67は、インデックス7のエントリ2に空きブロックを登録可能である。並列書込み用空きブロック管理部67は、処理を終了する。
図10は、実施の形態1に係る並列書込み用空きブロック管理テーブル101を示す図である。登録並列書込み用空きブロック管理テーブル101は、並列書込み用空きブロック管理テーブル71のインデックス7のエントリ2にデバイスチップ#2のブロック番号80を登録したテーブルである。図10において、網掛けで示した箇所がインデックス7のエントリ2である。デバイスチップ#2のブロック番号80は、並列書込み用の空きブロックとして利用されることとなる。
次に、図9のフローチャートについて、通知された空きブロックがデバイスチップ#1のブロック番号30の場合の処理を説明する。
ステップS91において、並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル71のインデックス1を参照する。並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル71のインデックス1には空きエントリがないため、処理はステップS93へ進む。ステップS93において、並列書込み用空きブロック管理部67は、全てのインデックスを探索済みではないため、ステップS94へ進む。
ステップS94において、並列書込み用空きブロック管理部67は、参照するインデックスをインクリメントし、ステップS91へ進む。ステップS91において、並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル71のインデックス2を参照する。インデックス2からインデックス5まで空きエントリがないため、並列書込み用空きブロック管理部67は、インデックス1の場合と同様にステップS91、ステップS93及びステップS94の処理を繰り返す。
ステップS91において、並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル71のインデックス6を参照する。インデックス6は空きエントリがあるため、処理はステップS92へ進む。ステップS92において、デバイスチップ#1はインデックス6のエントリ1に登録されているため、処理はステップS93へ進む。ステップS93において、並列書込み用空きブロック管理部67は、全てのインデックスを探索済みではないため、ステップS94へ進む。ステップS94において、並列書込み用空きブロック管理部67は、参照するインデックスをインクリメントし、ステップS91へ進む。
ステップS91において、並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル71のインデックス7を参照する。インデックス7には空きエントリがあるため、処理はステップS92へ進む。ステップS92において、デバイスチップ#1はインデックス7のエントリ1に登録されているため、処理はステップS93へ進む。ステップS93において、並列書込み用空きブロック管理部67は、全てのインデックスを探索済みのため、処理を終了する。
デバイスチップ#1のブロック番号30は、並列書込み用空きブロック管理テーブル71には登録されない。デバイスチップ#1のブロック番号30は、空きブロック管理部66においてブロック毎に割当てられる空きブロックとして利用されることとなる。
本実施の形態においては、並列書込み数が3の場合を示したが、並列書込み数は他の値でもよい。デバイスチップ数をNとした場合、並列書込み数はN以下の自然数である。並列書込み用空きブロック管理テーブルのエントリ数は並列書込み数と同じ値とすればよい。
また、本実施の形態においては、並列書込み用空きブロック管理テーブル71のインデックス数を7としたが、他の値でもよい。並列書込みを要する入力データの通信頻度、及び1ブロック毎の割当てに必要なブロック数との比率を考慮し、データ記録装置60が予め決めておいてもよい。また、データ記録装置60がインデックス数の上限値及び下限値を決め、並列書込みを要する入力データの通信頻度、及び1ブロック毎の割当てに必要なブロック数との比率の変化に応じて変化させてもよい。
さらに、データ記録装置60は、並列書込み数が異なる複数の並列書込み用空きブロック管理部を保持し、デバイスチップに対して異なる並列書込み数でデータの書込みをするようにしてもよい。
したがって、本実施の形態では、同一バス上に接続された複数の記録媒体にデータを並列に書込む書込み機能部63と、複数の記録媒体をそれぞれ分割した複数のブロックについてデータ書込み可能な空きブロックかどうかを空きブロック管理テーブルに登録する空きブロック管理部66と、空きブロック管理部66から通知された空きブロックについて並列書込み数分を1つの組として並列書込み用空きブロック管理テーブル71に登録し、書込み機能部63からの要求に応じて並列書込み用空きブロック管理テーブル71から並列書込み数分の空きブロックを取得して、通知する並列書込み用空きブロック管理部67と、を備え、並列書込み用空きブロック管理部67は、記録媒体の識別子とブロックを識別するブロック番号とを対応付け、並列書込み数分の異なる記録媒体の空きブロックを1つの組として並列書込み用空きブロック管理テーブル71に登録し、空きブロック管理部66より空きブロックが通知されると、並列書込み用空きブロック管理テーブル71の並列書込み数分の空きブロックが登録されていない組に当該空きブロックと同じ記録媒体のブロックが登録されていない場合、当該空きブロックを登録するので、複数個のNANDフラッシュメモリに対し並列にデータを書込む場合に処理時間を短縮し、データの欠損を生じさせないようにすることができる。
並列書込み用空きブロック管理テーブル71を1度探索すれば並列書込みに適した空きブロックの組を取出すことができるため、従来の空きブロック管理部66から1つの空きブロックを取出すのと同じ処理量で並列書込み処理を行うことができる。よって、連続する入力データを欠損なく記録することができる。
実施の形態2.
以上の実施の形態1では、並列書込み用空きブロック管理部67が並列書込み用空きブロック管理テーブルに空きエントリがあるか各インデックスの各エントリを探索するようにしたものであるが、本実施の形態においては、並列書込み用空きブロック管理テーブルに割当て済みブロック数を付与し、空きエントリがあるか探索する実施の形態を示す。
なお、本実施の形態において、並列書込み用空きブロック管理部67以外は実施の形態1と同じであるため、説明を割愛する。
本実施の形態において、メモリバス61に接続された全てのNANDフラッシュメモリのデバイスチップは5個、並列書込み数は3とする。
図11は、実施の形態2に係る並列書込み用空きブロック管理テーブル111を示す図である。112はインデックスを示す。113は、各インデックス内での割当て済みブロック数を示す。114a〜eは各デバイスチップに対応したエントリである。エントリの数は、メモリバス61に接続されたデバイスチップの個数に対応し、5個である。114aはデバイスチップ#1用のエントリを示す。114bはデバイスチップ#2用のエントリを示す。114cはデバイスチップ#3用のエントリを示す。114dはデバイスチップ#4用のエントリを示す。114eはデバイスチップ#5用のエントリを示す。
割当て済みブロック数は、各インデックスにおいてブロック番号が登録されたエントリ数を示す。割当て済みブロック数は、並列書込み数以下の自然数である。各エントリには、空きブロックの番号が登録される。ブロック番号が「−」の場合、未登録であることを示す。
図12は、実施の形態2に係る並列書込み用空きブロック管理部67における並列書込み用空きブロック管理テーブル111の探索処理の流れを示すフローチャートである。図12のフローチャートは、図8のステップS82の処理の詳細を示す。並列書込み用空きブロック管理部67は、空きブロック管理部66から空きブロックを通知されると、ステップS121より処理を開始する。
通知された空きブロックがデバイスチップ#2のブロック番号80の場合の処理を説明する。ステップS121において、並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル111のインデックス1を参照する。インデックス1の割当て済みブロック数は3である。並列書込み用空きブロック管理部67は、インデックス1の割当て済みブロック数が並列書込み数より小さくないため、処理はステップS123へ進む。ステップS123において、並列書込み用空きブロック管理部67は、全てのインデックスを探索済みではないため、ステップS124へ進む。
ステップS124において、並列書込み用空きブロック管理部67は、参照するインデックスをインクリメントし、ステップS121へ進む。ステップS121において、並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル111のインデックス2を参照する。インデックス2からインデックス5まで、割当て済みブロック数が並列書込み数より小さくないため、並列書込み用空きブロック管理部67は、インデックス1の場合と同様にステップS121、ステップS123及びステップS124の処理を繰り返す。
ステップS121において、並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル71のインデックス6を参照する。インデックス6の割当て済みブロック数は並列書込み数より小さいため、処理はステップS122へ進む。ステップS122において、デバイスチップ#2用のエントリ2にはすでに他のブロック番号が登録されているため、処理はステップS123へ進む。ステップS123において、並列書込み用空きブロック管理部67は、全てのインデックスを探索済みではないため、ステップS124へ進む。ステップS124において、並列書込み用空きブロック管理部67は、参照するインデックスをインクリメントし、ステップS121へ進む。
ステップS121において、並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル71のインデックス7を参照する。インデックス7の割当て済みブロック数は並列書込み数より小さいため、処理はステップS122へ進む。ステップS122において、デバイスチップ#2用のエントリ2は空いているため、並列書込み用空きブロック管理部67は、インデックス7のエントリ2に空きブロックを登録可能である。並列書込み用空きブロック管理部67は、処理を終了する。
図13は、実施の形態2に係る並列書込み用空きブロック管理テーブル131を示す図である。並列書込み用空きブロック管理テーブル131は、並列書込み用空きブロック管理テーブル111のインデックス7のエントリ2にデバイスチップ#2のブロック番号80が登録されたテーブルである。図13において、網掛けした箇所がインデックス7のエントリ2である。デバイスチップ#2のブロック番号80は、並列書込み用の空きブロックとして利用されることとなる。
次に、図12のフローチャートについて、通知された空きブロックがデバイスチップ#1のブロック番号30の場合の処理を説明する。
ステップS121において、並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル111のインデックス1を参照する。インデックス1の割当て済みブロック数は3である。並列書込み用空きブロック管理部67は、インデックス1の割当て済みブロック数が並列書込み数より小さくないため、処理はステップS123へ進む。ステップS123において、並列書込み用空きブロック管理部67は、全てのインデックスを探索済みではないため、ステップS124へ進む。
ステップS124において、並列書込み用空きブロック管理部67は、参照するインデックスをインクリメントし、ステップS121へ進む。ステップS121において、並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル111のインデックス2を参照する。インデックス2からインデックス5まで、割当て済みブロック数が並列書込み数より小さくないため、並列書込み用空きブロック管理部67は、インデックス1の場合と同様にステップS121、ステップS123及びステップS124の処理を繰り返す。
ステップS121において、並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル111のインデックス6を参照する。インデックス6の割当て済みブロック数は並列書込み数より小さいため、処理はステップS122へ進む。ステップS122において、デバイスチップ#1用のエントリ1にはすでに他のブロック番号が登録されているため、処理はステップS123へ進む。ステップS123において、並列書込み用空きブロック管理部67は、全てのインデックスを探索済みではないため、ステップS124へ進む。ステップS124において、並列書込み用空きブロック管理部67は、参照するインデックスをインクリメントし、ステップS121へ進む。
ステップS121において、並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル111のインデックス7を参照する。インデックス7の割当て済みブロック数は並列書込み数より小さいため、処理はステップS122へ進む。ステップS122において、デバイスチップ#1用のエントリ1にはすでに他のブロック番号が登録されているため、処理はステップS123へ進む。ステップS123において、並列書込み用空きブロック管理部67は、全てのインデックスを探索済みのため、処理を終了する。
デバイスチップ#1のブロック番号30は、並列書込み用空きブロック管理テーブル111には登録されない。デバイスチップ#1のブロック番号30は、空きブロック管理部66においてブロック毎に割当てられる空きブロックとして利用されることとなる。
したがって、本実施の形態では、同一バス上に接続された複数の記録媒体にデータを並列に書込む書込み機能部63と、複数の記録媒体をそれぞれ分割した複数のブロックについてデータ書込み可能な空きブロックかどうかを空きブロック管理テーブルに登録する空きブロック管理部66と、空きブロック管理部66から通知された空きブロックについて並列書込み数分を1つの組として並列書込み用空きブロック管理テーブル111に登録し、書込み機能部63からの要求に応じて並列書込み用空きブロック管理テーブル111から並列書込み数分の空きブロックを取得して、通知する並列書込み用空きブロック管理部67と、を備え、並列書込み用空きブロック管理部67は、記録媒体の識別子及びブロック番号と、1つの組に割当てられた割当て済みブロック数とを対応付け、並列書込み数分の異なる記録媒体の空きブロックを1つの組として並列書込み用空きブロック管理テーブル111に登録し、空きブロック管理部66より空きブロックが通知されると、割当て済みブロック数が並列書込み数より小さい組に、当該空きブロックと同じ記録媒体のブロックが登録されていない場合、当該空きブロックを登録するので、並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル111の各インデックスの割当て済みブロック数とデバイスチップ番号に対応したエントリのみ参照すれば、空きブロックを登録することができるか判断することができる。よって、並列書込み用空きブロック管理部67の処理量を抑制することができる。
実施の形態3.
以上の実施の形態2では、並列書込み用空きブロック管理テーブルに割当て済みブロック数を付与し、空きエントリがあるか探索するようにしたものであるが、本実施の形態においては、ウェアレベリングを行う実施の形態を示す。ウェアレベリングとは、消去回数を均等化することである。メモリ素子は、データの書込み及び消去を繰り返すと劣化し、データを書込むことができなくなる。特定のブロックにデータの書込み及び消去が集中して書込みができなくなってしまうことを防ぐため、消去回数を均等化することが行われている。
本実施の形態において、メモリバス61に接続された全てのNANDフラッシュメモリのデバイスチップは5個、並列書込み数は3とする。
図14は、実施の形態3に係る並列書込み用空きブロック管理テーブル141を示す図である。142は、並列書込み用空きブロック管理テーブル141のインデックスを示す。143は、各インデックス内における割当て済みブロック数を示す。割当て済みブロック数は、並列書込み数以下の自然数である。144は、各インデックス内に登録されている空きブロックの消去回数の平均値である。割当て済みブロック数が並列書込み数と等しい場合のみ、消去回数の平均値に値が登録される。
145a〜eは各デバイスチップに対応したエントリである。エントリの数は、メモリバス61に接続されたデバイスチップの個数に対応し、5個である。145aはデバイスチップ#1用のエントリを示す。145bはデバイスチップ#2用のエントリを示す。145cはデバイスチップ#3用のエントリを示す。145dはデバイスチップ#4用のエントリを示す。145eはデバイスチップ#5用のエントリを示す。
各エントリには、それぞれ対応したデバイスチップの空きブロック番号及び当該ブロックの消去回数が登録される。146a〜eは、各エントリの空きブロック番号を示す。147a〜eは、各エントリの当該ブロックの消去回数を示す。「−」は値が登録されていないことを示す。
図15は、実施の形態3に係る空きブロック管理部66及び並列書込み用空きブロック管理部67における処理の流れを示すフローチャートである。
空きブロック管理部66は、消去機能部64から消去を完了したブロックが通知されるとステップS150より処理を開始する。通知されたブロックをブロックXとする。ステップS150において、空きブロック管理部66は、ブロックXを並列書込み用空きブロック管理部67に通知し、ステップS151へ進む。
ステップS151において、並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル141にブロックXを登録することができるエントリがあるか探索し、登録可能であれば登録する。ステップS151の処理の詳細は、後述する。ステップS151の処理の結果、並列書込み用空きブロック管理テーブル141に登録できない空きブロックが残る場合がある。処理は、ステップS152へ進む。ステップS152において、並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル141に登録できない空きブロックがある場合、ステップS153へ進む。
ステップS153において、並列書込み用空きブロック管理部67は、空きブロックがブロックXの場合、ステップS154へ進む。ステップS154において、並列書込み用空きブロック管理部67は、ブロックXを並列書込み用として使用しないため、「不使用」を空きブロック管理部66に通知し、ステップS155へ進む。ステップS155において、空きブロック管理部66は、空きブロック管理テーブルにおいてブロックXを空きとして登録し、処理を終了する。
ステップS153において、並列書込み用空きブロック管理部67は、空きブロックが空きブロックXでない場合、ステップS156へ進む。空きブロックをブロックYとする。ステップS156において、並列書込み用空きブロック管理部67は、ブロックYを並列書込み用として使用しないため、「不使用」を空きブロック管理部66に通知する。また、並列書込み用空きブロック管理部67は、ブロックXを並列書込み用として使用するため、「使用」を空きブロック管理部66に通知し、ステップS157へ進む。
ステップS157において、空きブロック管理部66は、ブロック管理テーブルにおいてブロックYを空きとして登録し、ステップS158へ進む。ステップS158において、空きブロック管理部66は、空きブロック管理テーブルにおいてブロックXを使用中として登録し、処理を終了する。
ステップS152において、並列書込み用空きブロック管理部67は、空きブロックがない場合、ステップS159へ進む。ステップS159において、並列書込み用空きブロック管理部67は、ブロックXを並列書込み用として使用するため、「使用」を空きブロック管理部66に通知し、ステップS158へ進む。ステップS158において、空きブロック管理部66は、空きブロック管理テーブルにおいてブロックXを使用中として登録し、処理を終了する。
図16は、実施の形態3に係る並列書込み用空きブロック管理部67における並列書込み用空きブロック管理テーブル141の探索処理の流れを示すフローチャートである。図16のフローチャートは、図15のステップS151の処理の詳細を示す。並列書込み用空きブロック管理部67は、空きブロック管理部66から空きブロックを通知されると、ステップS161より処理を開始する。
ステップS161において、並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル141のインデックス1を参照する。並列書込み用空きブロック管理部67は、インデックス1の割当て済みブロック数と並列書込み数が等しい場合、ステップS162へ進む。並列書込み用空きブロック管理部67は、インデックス1の割当て済みブロック数と並列書込み数が等しくない場合、ステップS163へ進む。
ステップS162において、並列書込み用空きブロック管理部67は、消去回数の平均値を参照する。消去回数の平均値が空きブロックの消去回数より大きい場合、ステップS163へ進む。消去回数の平均値が空きブロックの消去回数より大きくない場合、ステップS166へ進む。ステップS163において、並列書込み用空きブロック管理部67は、空きブロックのデバイスチップ用のエントリにすでに登録されている場合、ステップS164へ進む。
ステップS164において、並列書込み用空きブロック管理部67は、登録済みのブロックの消去回数が空きブロックの消去回数より大きい場合、ステップS165へ進む。登録済みのブロックの消去回数が空きブロックの消去回数より大きくない場合、ステップS166へ進む。ステップS165において、並列書込み用空きブロック管理部67は、登録済みのブロックと空きブロックを入れ替え、ステップS166へ進む。ステップS166において、並列書込み用空きブロック管理部67は、全てのインデックスを探索済みの場合、処理を終了する。
ステップS166において、並列書込み用空きブロック管理部67は、全てのインデックスを探索済みでない場合、ステップS167へ進む。ステップS167において、並列書込み用空きブロック管理部67は、参照するインデックスをインクリメントし、ステップS161へ進む。
ステップS163において、並列書込み用空きブロック管理部67は、空きブロックのデバイスチップ用のエントリにすでに登録されていない場合、空きブロックを登録し、処理を終了する。
通知された空きブロックがデバイスチップ#1のブロック番号30の場合の処理を説明する。消去回数は45回とする。ステップS161において、並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル141のインデックス1を参照する。インデックス1の割当て済みブロック数は3である。並列書込み用空きブロック管理部67は、インデックス1の割当て済みブロック数が並列書込み数と等しいため、処理はステップS162へ進む。
ステップS162において、並列書込み用空きブロック管理部67は、消去回数の平均値を参照する。消去回数の平均値41は、空きブロックの消去回数45より大きくないため、処理はステップS166へ進む。ステップS166において、並列書込み用空きブロック管理部67は、全てのインデックスを探索済みではないため、ステップS167へ進む。ステップS167において、並列書込み用空きブロック管理部67は、参照するインデックスをインクリメントし、ステップS161へ進む。
ステップS161において、並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル141のインデックス2を参照する。インデックス2の割当て済みブロック数は3である。並列書込み用空きブロック管理部67は、インデックス2の割当て済みブロック数が並列書込み数と等しいため、処理はステップS162へ進む。ステップS162において、並列書込み用空きブロック管理部67は、消去回数の平均値を参照する。消去回数の平均値59は、空きブロックの消去回数45より大きいため、処理はステップS163へ進む。
ステップS163において、並列書込み用空きブロック管理部67は、インデックス2のエントリ1に登録があるため、ステップS164へ進む。ステップS164において、並列書込み用空きブロック管理部67は、デバイスチップ#1用のエントリ1の消去回数を参照する。エントリ1の消去回数45は、空きブロックの消去回数45より大きくないため、処理はステップS166へ進む。ステップS166において、並列書込み用空きブロック管理部67は、全てのインデックスを探索済みではないため、ステップS167へ進む。ステップS167において、並列書込み用空きブロック管理部67は、参照するインデックスをインクリメントし、ステップS161へ進む。
ステップS161において、並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル131のインデックス3を参照する。インデックス3の割当て済みブロック数は3である。並列書込み用空きブロック管理部67は、インデックス3の割当て済みブロック数が並列書込み数と等しいため、処理はステップS162へ進む。
ステップS162において、並列書込み用空きブロック管理部67は、消去回数の平均値を参照する。消去回数の平均値50は、空きブロックの消去回数45より大きいため、処理はステップS163へ進む。ステップS163において、並列書込み用空きブロック管理部67は、インデックス3のエントリ1に登録があるため、ステップS164へ進む。ステップS164において、並列書込み用空きブロック管理部67は、デバイスチップ#1用のエントリ1の消去回数を参照する。エントリ1の消去回数60は、空きブロックの消去回数45より大きいため、ステップS165へ進む。
ステップS165において、並列書込み用空きブロック管理部67は、インデックス3のエントリ1に登録されているブロック番号35と通知された空きブロックを入れ替える。また、並列書込み用空きブロック管理部67は、エントリ3とエントリ5とブロック番号30の消去回数の平均値を算出する。並列書込み用空きブロック管理部67は、算出した消去回数の平均値45を登録し、ステップS166へ進む。ステップS166において、並列書込み用空きブロック管理部67は、全てのインデックスを探索済みではないため、ステップS167へ進む。ステップS167において、並列書込み用空きブロック管理部67は、参照するインデックスをインクリメントし、ステップS161へ進む。
並列書込み用空きブロック管理部67は、空きブロックをデバイスチップ#1のブロック番号35、消去回数60として、処理を続ける。ステップS161において、並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル131のインデックス4を参照する。インデックス4の割当て済みブロック数は3である。並列書込み用空きブロック管理部67は、インデックス4の割当て済みブロック数が並列書込み数と等しいため、処理はステップS162へ進む。
ステップS162において、並列書込み用空きブロック管理部67は、消去回数の平均値を参照する。消去回数の平均値33は、空きブロックの消去回数60より大きくないため、処理はステップS166へ進む。ステップS166において、並列書込み用空きブロック管理部67は、全てのインデックスを探索済みではないため、ステップS167へ進む。ステップS167において、並列書込み用空きブロック管理部67は、参照するインデックスをインクリメントし、ステップS161へ進む。
ステップS161において、並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル141のインデックス5を参照する。インデックス5の割当て済みブロック数は3である。並列書込み用空きブロック管理部67は、インデックス5の割当て済みブロック数が並列書込み数と等しいため、処理はステップS162へ進む。
ステップS162において、並列書込み用空きブロック管理部67は、消去回数の平均値を参照する。消去回数の平均値42は、空きブロックの消去回数60より大きくないため、処理はステップS166へ進む。ステップS166において、並列書込み用空きブロック管理部67は、全てのインデックスを探索済みではないため、ステップS167へ進む。ステップS167において、並列書込み用空きブロック管理部67は、参照するインデックスをインクリメントし、ステップS161へ進む。
ステップS161において、並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル141のインデックス6を参照する。インデックス6の割当て済みブロック数は2である。並列書込み用空きブロック管理部67は、インデックス6の割当て済みブロック数が並列書込み数と等しくないため、処理はステップS163へ進む。
ステップS163において、並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル141のインデックス6のエントリ1に登録があるため、ステップS164へ進む。ステップS164において、並列書込み用空きブロック管理部67は、デバイスチップ#1用のエントリ1の消去回数を参照する。エントリ1の消去回数70は、空きブロックの消去回数60より大きいため、ステップS165へ進む。
ステップS165において、並列書込み用空きブロック管理部67は、インデックス6のエントリ1に登録されているブロック番号22と空きブロックを入れ替え、ステップS166へ進む。ステップS166において、並列書込み用空きブロック管理部67は、全てのインデックスを探索済みではないため、ステップS167へ進む。ステップS167において、並列書込み用空きブロック管理部67は、参照するインデックスをインクリメントし、ステップS161へ進む。
並列書込み用空きブロック管理部67は、空きブロックをデバイスチップ#1のブロック番号22、消去回数70として、処理を続ける。ステップS161において、並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル141のインデックス7を参照する。インデックス7の割当て済みブロック数は1である。並列書込み用空きブロック管理部67は、インデックス7の割当て済みブロック数が並列書込み数と等しくないため、処理はステップS163へ進む。
ステップS163において、並列書込み用空きブロック管理部67は、並列書込み用空きブロック管理テーブル141のインデックス7のエントリ1に登録があるため、ステップS164へ進む。ステップS164において、並列書込み用空きブロック管理部67は、デバイスチップ#1用のエントリ1の消去回数を参照する。エントリ1の消去回数50は、空きブロックの消去回数70より大きくないため、ステップS166へ進む。ステップS166において、並列書込み用空きブロック管理部67は、全てのインデックスを探索済みのため、処理を終了する。
図17は、実施の形態3に係る並列書込み用空きブロック管理テーブル171を示す図である。登録並列書込み用空きブロック管理テーブル171は、並列書込み用空きブロック管理テーブル141のインデックス3の消去回数の平均値、並びにエントリ1、及びインデックス6のエントリ1に新たな値が登録されたテーブルである。図17において、網掛けした箇所がインデックス3の消去回数の平均値、並びにエントリ1、及びインデックス6のエントリ1である。
デバイスチップ#1のブロック番号30は、並列書込み用の空きブロックとして利用されることとなる。また、デバイスチップ#1のブロック番号22は、空きブロック管理部66においてブロック毎に割当てられる空きブロックとして利用されることとなる。
したがって、本実施の形態では、同一バス上に接続された複数の記録媒体にデータを並列に書込む書込み機能部63と、複数の記録媒体をそれぞれ分割した複数のブロックについてデータ書込み可能な空きブロックかどうかを空きブロック管理テーブルに登録する空きブロック管理部66と、空きブロック管理部66から通知された空きブロックについて並列書込み数分を1つの組として並列書込み用空きブロック管理テーブル141に登録し、書込み機能部63からの要求に応じて並列書込み用空きブロック管理テーブル141から並列書込み数分の空きブロックを取得して、通知する並列書込み用空きブロック管理部67と、を備え、並列書込み用空きブロック管理部67は、記録媒体の識別子、ブロック番号、及び1つの組に割当てられた割当て済みブロック数に、さらに当該ブロックの消去回数と1つの組に割当てられたブロックの消去回数の平均値とを対応付け、並列書込み数分の異なる記録媒体の空きブロックを1つの組として並列書込み用空きブロック管理テーブル141に登録し、空きブロック管理部66より空きブロックが通知されると、割当て済みブロック数が並列書込み数と等しい組に、消去回数の平均値が当該空きブロックの消去回数より小さく、当該空きブロックと同じ記録媒体のブロックが登録されており、その消去回数が当該空きブロックの消去回数より大きい場合、登録されているブロックを当該空きブロックと入れ替えるので、消去回数の少ないブロックが並列書込み用空きブロックとして使用されやすくなる。よって、各ブロックの消去回数を均等化することができる。