IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 東芝メモリ株式会社の特許一覧

<>
  • 特開-メモリシステムおよび制御方法 図1
  • 特開-メモリシステムおよび制御方法 図2
  • 特開-メモリシステムおよび制御方法 図3
  • 特開-メモリシステムおよび制御方法 図4
  • 特開-メモリシステムおよび制御方法 図5
  • 特開-メモリシステムおよび制御方法 図6
  • 特開-メモリシステムおよび制御方法 図7
  • 特開-メモリシステムおよび制御方法 図8
  • 特開-メモリシステムおよび制御方法 図9
  • 特開-メモリシステムおよび制御方法 図10
  • 特開-メモリシステムおよび制御方法 図11
  • 特開-メモリシステムおよび制御方法 図12
  • 特開-メモリシステムおよび制御方法 図13
  • 特開-メモリシステムおよび制御方法 図14
  • 特開-メモリシステムおよび制御方法 図15
  • 特開-メモリシステムおよび制御方法 図16
  • 特開-メモリシステムおよび制御方法 図17
  • 特開-メモリシステムおよび制御方法 図18
  • 特開-メモリシステムおよび制御方法 図19
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024043007
(43)【公開日】2024-03-29
(54)【発明の名称】メモリシステムおよび制御方法
(51)【国際特許分類】
   G06F 12/02 20060101AFI20240322BHJP
   G06F 12/00 20060101ALI20240322BHJP
【FI】
G06F12/02 570A
G06F12/00 597U
G06F12/02 510A
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2022147974
(22)【出願日】2022-09-16
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】田所 三徳
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160AA08
5B160AA12
5B160AB26
(57)【要約】
【課題】マッピング情報を効率的に管理できるメモリシステムを実現する。
【解決手段】メモリシステムのコントローラは、複数のネームスペースの各々に、論理アドレス空間を分割することによって得られる複数のエリアのうちの一つまたは複数のエリアを割り当てる。コントローラは、ネームスペースに割り当てられた一つまたは複数のエリアを、ネームスペースの末尾の論理アドレスを少なくとも含む第1のエリアと、第1のエリアを除く第2のエリアとに分類する。コントローラは、論理物理アドレス変換テーブルが記憶されたランダムアクセスメモリの記憶領域を複数のバッファ領域に区分する。コントローラは、複数のネームスペースの各々の第1のエリア毎に、第1のエリアに対応する複数のマップセグメントが記憶された、バッファ領域における複数の記憶位置をそれぞれが示す複数の第2のポインタを管理する。
【選択図】図8
【特許請求の範囲】
【請求項1】
ホストに接続可能なメモリシステムであって、
不揮発性メモリと、
ランダムアクセスメモリと、
前記不揮発性メモリおよび前記ランダムアクセスメモリに電気的に接続されたコントローラと、を具備し、
前記コントローラは、
前記コントローラによって管理される論理アドレス空間に含まれる複数の論理アドレスのうちの連続するN個の論理アドレスに1対1の関係でそれぞれ対応付けられた前記不揮発性メモリのN個の物理アドレスを各々が示す複数のマップセグメントを有するマッピング情報を含む論理物理アドレス変換テーブルを前記ランダムアクセスメモリに記憶させ、前記Nは、2以上の整数であり、
前記論理アドレスの集合をそれぞれが含む複数のネームスペースを管理し、
前記論理アドレス空間を同じサイズを有する複数のエリアに分割し、
前記論理物理アドレス変換テーブルが記憶された前記ランダムアクセスメモリの記憶領域を複数のバッファ領域に区分し、
前記複数のネームスペースの各々のサイズに基づいて、前記複数のネームスペースの各々に、前記複数のエリアのうちの一つまたは複数のエリアを割り当て、
前記ネームスペース毎に、前記ネームスペースに割り当てられた前記一つまたは複数のエリアを、前記ネームスペースの末尾の論理アドレスを少なくとも含む第1のエリアと、前記第1のエリアを除く第2のエリアとに分類し、
前記複数のネームスペースの各々の前記第2のエリアの各々に、前記複数のバッファ領域のうちの一つのバッファ領域を、前記第2のエリアの各々に対応する複数の前記マップセグメントが記憶されるバッファ領域として、割り当て、
前記複数のネームスペースの各々の前記第2のエリア毎に、前記第2のエリアに割り当てられた前記バッファ領域の先頭の記憶位置を示す第1のポインタを管理し、
前記複数のバッファ領域のうちの1つのバッファ領域が前記複数のネームスペースのうちの2つ以上のネームスペースそれぞれの前記第1のエリアによって共有されるように、前記複数のネームスペースの各々の前記第1のエリアに、前記1つのバッファ領域を割り当て、
前記複数のネームスペースの各々の前記第1のエリア毎に、前記第1のエリアに対応する前記複数のマップセグメントが記憶された、前記1つのバッファ領域における複数の記憶位置をそれぞれが示す複数の第2のポインタを管理する、
メモリシステム。
【請求項2】
前記複数のネームスペースの各々のサイズが前記複数のエリアの各々の前記サイズの整数倍ではない場合、前記第1のエリアは、前記複数のネームスペースの各々によって使用される論理アドレスの集合と、前記複数のネームスペースの各々によって使用されない論理アドレスの集合とを含むエリアである、
請求項1に記載のメモリシステム。
【請求項3】
前記コントローラは、
前記複数のネームスペースの各々と、前記複数のネームスペースの各々に割り当てられた前記一つまたは複数のエリアとの間の対応関係を、第1のテーブルと、第2のテーブルとを使用して管理するようにさらに構成され、
前記第1のテーブルは、前記ネームスペース毎に、前記ネームスペースのサイズと、前記第2のテーブルにおける開始エントリとを示す情報を保持するテーブルであり、
前記第2のテーブルは、前記ネームスペース毎に、前記開始エントリから始まる一つまたは連続する複数のエントリに、前記一つまたは複数のエリアを示す情報を保持するテーブルである、
請求項1に記載のメモリシステム。
【請求項4】
前記コントローラは、
前記複数のネームスペースの各々の前記第2のエリア毎に、前記第1のポインタを第3のテーブルを使用して管理するようにさらに構成され、
前記第3のテーブルは、前記複数のエリアの数と同数のエントリを有し、且つ、前記第3のテーブルのエントリの少なくとも一つのエントリは、前記第1のポインタを保持するテーブルである、
請求項3に記載のメモリシステム。
【請求項5】
前記コントローラは、
前記複数のネームスペースの各々の前記第1のエリア毎に、前記複数の第2のポインタを第4のテーブルを使用して管理するようにさらに構成され、
前記第3のテーブルの前記エントリの少なくとも一つのエントリは、前記第4のテーブルのエントリのうちの一つのエントリを示すポインタを保持し、
前記第4のテーブルは、前記複数のネームスペースの数と同数のエントリを有し、且つ、前記第4のテーブルの前記エントリの各々に、前記複数の第2のポインタを保持するテーブルである、
請求項4に記載のメモリシステム。
【請求項6】
前記コントローラは、
前記複数のネームスペースのうちの第1のネームスペースのサイズを拡張する場合、
前記第1のネームスペースの前記第1のエリアに対応する前記複数のマップセグメントを、前記複数のバッファ領域のうちの空きのバッファ領域にコピーし、
前記第1のネームスペースの前記第1のエリアに対応する前記第3のテーブルのエントリに保持されているポインタを、前記第4のテーブルのエントリのうちの一つのエントリを示す値から、前記空きバッファ領域の先頭の記憶位置を示すメモリアドレスに更新し、
前記第1のネームスペースに対応する前記第4のテーブルのエントリを初期化し、
前記第1のネームスペースに割り当てられるべき追加のエリアに対応する前記第3のテーブルのエントリに、前記第4のテーブルの前記初期化されたエントリを示すポインタを格納し、
前記第1のネームスペースに前記追加のエリアが割り当てられるように、前記第1のテーブルと前記第2のテーブルとを更新するようにさらに構成されている、
請求項5に記載のメモリシステム。
【請求項7】
前記コントローラは、
前記第1のネームスペースの前記第1のエリアに対応する前記複数のマップセグメントのうちの一つのマップセグメントを前記空きのバッファ領域にコピーする度、
前記第1のネームスペースに対応する前記第4のテーブルのエントリに保持されている前記複数の第2のポインタのうち、前記空きのバッファ領域にコピーされたマップセグメントに対応するポインタを、このマップセグメントがコピーされた前記空きバッファ領域におけるコピー先記憶位置を示す値に更新するようにさらに構成されている、
請求項6に記載のメモリシステム。
【請求項8】
前記コントローラは、
前記複数のネームスペースのうちの第1のネームスペースのサイズを縮小する場合、
前記第1のネームスペースのサイズの縮小によって不要となった全ての前記マップセグメントを無効化し、
前記第1のテーブルと前記第2のテーブルとを更新して、前記第1のネームスペースから、前記第1のネームスペースのサイズの縮小によって不要になったエリアの割り当てを解除し、
前記第1のネームスペースに対応する前記第4のテーブルのエントリに保持されている前記複数の第2のポインタを、前記第1のネームスペースのサイズの縮小によって前記第1のネームスペースの末尾の論理アドレスを含むことになったエリアに対応する複数のマップセグメントが記憶されているバッファ領域における複数の記憶位置をそれぞれ示す値に更新し、
前記第1のネームスペースの前記末尾の論理アドレスを含むことになった前記エリアに対応する前記第3のテーブルのエントリに保持されているポインタを、前記第1のネームスペースに対応する前記第4のテーブルのエントリを示す値に更新するようにさらに構成されている、
請求項5に記載のメモリシステム。
【請求項9】
前記コントローラは、
第1のネームスペース識別子と第1の論理アドレスとを指定する入出力コマンドを前記ホストから受信した場合、
前記第1の論理アドレスと、一つのエリアのサイズと、前記第1のテーブルと、前記第2のテーブルとを使用して、前記ネームスペース識別子を有するネームスペースに割り当てられている前記一つまたは複数のエリアから、一つのエリアを選択し、
前記第1の論理アドレスの上位ビットを前記選択したエリアを示すビット列で置換することによって、前記第1の論理アドレスを、前記選択したエリアに属するアクセス対象の論理アドレスに変換し、
前記第3のテーブルと前記第4のテーブルとを使用して、前記アクセス対象の論理アドレスに対応するマップセグメントが記憶されている前記ランダムアクセスメモリにおける記憶位置を示すメモリアドレスを特定し、
前記特定したメモリアドレスに基づいて、前記アクセス対象の論理アドレスに対応する前記マップセグメントを参照または更新するように構成されている、
請求項5に記載のメモリシステム。
【請求項10】
不揮発性メモリを制御する制御方法であって、
論理アドレス空間に含まれる複数の論理アドレスのうちの連続するN個の論理アドレスに1対1の関係でそれぞれ対応付けられた前記不揮発性メモリのN個の物理アドレスを各々が示す複数のマップセグメントを有するマッピング情報を含む論理物理アドレス変換テーブルをランダムアクセスメモリに記憶させることと、前記Nは、2以上の整数であり、
前記論理アドレスの集合をそれぞれが含む複数のネームスペースを管理することと、
前記論理アドレス空間を同じサイズを有する複数のエリアに分割することと、
前記論理物理アドレス変換テーブルが記憶された前記ランダムアクセスメモリの記憶領域を複数のバッファ領域に区分することと、
前記複数のネームスペースの各々のサイズに基づいて、前記複数のネームスペースの各々に、前記複数のエリアのうちの一つまたは複数のエリアを割り当てることと、
前記ネームスペース毎に、前記ネームスペースに割り当てられた前記一つまたは複数のエリアを、前記ネームスペースの末尾の論理アドレスを少なくとも含む第1のエリアと、前記第1のエリアを除く第2のエリアとに分類することと、
前記複数のネームスペースの各々の前記第2のエリアの各々に、前記複数のバッファ領域のうちの一つのバッファ領域を、前記第2のエリアの各々に対応する複数の前記マップセグメントが記憶されるバッファ領域として、割り当てることと、
前記複数のネームスペースの各々の前記第2のエリア毎に、前記第2のエリアに割り当てられた前記バッファ領域の先頭の記憶位置を示す第1のポインタを管理することと、
前記複数のバッファ領域のうちの1つのバッファ領域が前記複数のネームスペースのうちの2つ以上のネームスペースそれぞれの前記第1のエリアによって共有されるように、前記複数のネームスペースの各々の前記第1のエリアに、前記1つのバッファ領域を割り当てることと、
前記複数のネームスペースの各々の前記第1のエリア毎に、前記第1のエリアに対応する前記複数のマップセグメントが記憶された、前記1つのバッファ領域における複数の記憶位置をそれぞれが示す複数の第2のポインタを管理することと、を具備する
制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【0002】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの1つとして、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。
【0003】
SSDのようなメモリシステムにおいては、論理アドレスと物理アドレスとの間の対応関係を示す情報であるマッピング情報を効率的に管理することができる技術が必要とされている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2009-252004号公報
【特許文献2】米国特許出願公開第2021/0406177号明細書
【特許文献3】特開2002-236616号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
本発明の一実施形態が解決しようとする課題は、マッピング情報を効率的に管理できるメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【0006】
実施形態によれば、メモリシステムは、ホストに接続可能である。前記メモリシステムは、不揮発性メモリと、ランダムアクセスメモリと、前記不揮発性メモリおよび前記ランダムアクセスメモリに電気的に接続されたコントローラとを具備する。前記コントローラは、前記コントローラによって管理される論理アドレス空間に含まれる複数の論理アドレスのうちの連続するN個の論理アドレスに1対1の関係でそれぞれ対応付けられた前記不揮発性メモリのN個の物理アドレスを各々が示す複数のマップセグメントを有するマッピング情報を含む論理物理アドレス変換テーブルを前記ランダムアクセスメモリに記憶させる。前記Nは、2以上の整数である。前記コントローラは、前記論理アドレスの集合をそれぞれが含む複数のネームスペースを管理し、前記論理アドレス空間を同じサイズを有する複数のエリアに分割する。前記コントローラは、前記論理物理アドレス変換テーブルが記憶された前記ランダムアクセスメモリの記憶領域を複数のバッファ領域に区分する。前記コントローラは、前記複数のネームスペースの各々のサイズに基づいて、前記複数のネームスペースの各々に、前記複数のエリアのうちの一つまたは複数のエリアを割り当てる。前記コントローラは、前記ネームスペース毎に、前記ネームスペースに割り当てられた前記一つまたは複数のエリアを、前記ネームスペースの末尾の論理アドレスを少なくとも含む第1のエリアと、前記第1のエリアを除く第2のエリアとに分類する。前記コントローラは、前記複数のネームスペースの各々の前記第2のエリアの各々に、前記複数のバッファ領域のうちの一つのバッファ領域を、前記他のエリアの各々に対応する複数の前記マップセグメントが記憶されるバッファ領域として、割り当てる。前記コントローラは、前記複数のネームスペースの各々の前記第2のエリア毎に、前記第2のエリアに割り当てられた前記バッファ領域の先頭の記憶位置を示す第1のポインタを管理する。前記コントローラは、前記複数のバッファ領域のうちの1つのバッファ領域が前記複数のネームスペースのうちの2つ以上のネームスペースそれぞれの前記第1のエリアによって共有されるように、前記複数のネームスペースの各々の前記第1のエリアに、前記1つのバッファ領域を割り当てる。前記コントローラは、前記複数のネームスペースの各々の前記第1のエリア毎に、前記第1のエリアに対応する前記複数のマップセグメントが記憶された、前記1つのバッファ領域における複数の記憶位置をそれぞれが示す複数の第2のポインタを管理する。
【図面の簡単な説明】
【0007】
図1】実施形態に係るメモリシステムを含む情報処理システムの構成例を示すブロック図。
図2】実施形態に係る不揮発性メモリダイの内部構成の例を示すブロック図。
図3】実施形態に係るDRAMに記憶されるテーブルの例を示すブロック図。
図4】実施形態に係るCPUの機能構成の例を示すブロック図。
図5】実施形態に係るメモリシステムにおける論理物理アドレス変換(L2P)テーブルと物理アドレス空間との関係の例を示す図。
図6】実施形態に係るメモリシステムにおいて管理されるネームスペースの例を示す図。
図7】実施形態に係るメモリシステムにおけるネームスペースとネームスペースアロケーションユニットとの関係の例を示す図。
図8】実施形態に係るメモリシステムにおける複数のルックアップテーブル(LUT)とL2Pテーブルとの関係の例を示す図。
図9】実施形態に係るメモリシステムにおいて実行されるネームスペース拡張処理における、複数のLUTとL2Pテーブルとの関係の第1の例を示す図。
図10】実施形態に係るメモリシステムにおいて実行されるネームスペース拡張処理における、複数のLUTとL2Pテーブルとの関係の第2の例を示す図。
図11】実施形態に係るメモリシステムにおいて実行されるネームスペース拡張処理における、複数のLUTとL2Pテーブルとの関係の第3の例を示す図。
図12】実施形態に係るメモリシステムにおいて実行されるネームスペース縮小処理における、複数のLUTとL2Pテーブルとの関係の第1の例を示す図。
図13】実施形態に係るメモリシステムにおいて実行されるネームスペース縮小処理における、複数のLUTとL2Pテーブルとの関係の第2の例を示す図。
図14】実施形態に係るメモリシステムにおいて実行されるネームスペース縮小処理における、複数のLUTとL2Pテーブルとの関係の第3の例を示す図。
図15】実施形態に係るメモリシステムにおいて実行されるマッピング情報管理処理の手順を示すフローチャート。
図16】実施形態に係るメモリシステムにおいて実行されるネームスペース拡張処理の手順を示すフローチャート。
図17】実施形態に係るメモリシステムにおいて実行されるネームスペース縮小処理の手順を示すフローチャート。
図18】第1の比較例に係るメモリシステムにおける複数のLUTとL2Pテーブルとの関係の例を示す図。
図19】第2の比較例に係るメモリシステムにおける複数のLUTとL2Pテーブルとの関係の例を示す図。
【発明を実施するための形態】
【0008】
以下、図面を参照して、実施形態を説明する。
図1は、実施形態に係るメモリシステム3を含む情報処理システム1の構成例を示すブロック図である。情報処理システム1は、ホスト(ホストデバイス)2と、メモリシステム3とを含む。
【0009】
ホスト2は、情報処理装置である。ホスト2は、例えば、パーソナルコンピュータ、サーバコンピュータ、または携帯端末である。ホスト2は、メモリシステム3にアクセスする。具体的には、ホスト2は、データを書き込むためのコマンドであるライトコマンドをメモリシステム3に送信する。また、ホスト2は、データを読み出すためのコマンドであるリードコマンドをメモリシステム3に送信する。
【0010】
メモリシステム3は、ストレージデバイスである。メモリシステム3は、例えば、NAND型フラッシュメモリを含むSSDである。メモリシステム3は、不揮発性メモリにデータを書き込む。また、メモリシステム3は、不揮発性メモリからデータを読み出す。
【0011】
ホスト2と、メモリシステム3とは、バス7を介して接続可能である。バス7を介したホスト2とメモリシステム3との間の通信は、例えば、NVM ExpressTM(NVMeTM)規格、またはSerial Attached SCSI(SAS)規格に準拠して実行される。バス7は、例えば、PCI ExpressTM規格に準拠するバス(PCIeTMバス)である。バス7は、主として、ホスト2からメモリシステム3への入出力(I/O)コマンドの送信、およびメモリシステム3からホスト2への応答の送信のために使用される。I/Oコマンドは、不揮発性メモリに対するデータの書き込みまたは読み出しを行うためのコマンドである。I/Oコマンドは、例えば、ライトコマンド、リードコマンドである。
【0012】
次に、ホスト2の内部構成について説明する。ホスト2は、プロセッサ21と、メモリ22とを含む。プロセッサ21とメモリ22とは、内部バス20に接続される。
【0013】
プロセッサ21は、CPU(Central Processing Unit)である。プロセッサ21は、バス7を介してメモリシステム3との通信を行う。プロセッサ21は、メモリ22にロードされたソフトウェア(ホストソフトウェア)を実行する。ホストソフトウェアは、例えば、メモリシステム3、または、ホスト2に接続された他のストレージデバイスからメモリ22にロードされる。ホストソフトウェアは、例えば、オペレーティングシステム、ファイルシステム、アプリケーションプログラム、を含む。
【0014】
メモリ22は、揮発性のメモリである。メモリ22は、メインメモリ、システムメモリ、またはホストメモリとも称される。メモリ22は、例えばダイナミックランダムアクセスメモリ(DRAM)である。メモリ22の記憶領域の一部は、データバッファとして使用される。データバッファには、メモリシステム3に書き込まれるべきライトデータまたはメモリシステム3から転送されたリードデータが格納される。
【0015】
次に、メモリシステム3の内部構成について説明する。メモリシステム3は、コントローラ4と、不揮発性メモリ5と、ダイナミックランダムアクセスメモリ(DRAM)6とを含む。
【0016】
コントローラ4は、メモリコントローラである。コントローラ4は、例えば、system-on-a-chip(SoC)のような半導体回路である。コントローラ4は、不揮発性メモリ5に電気的に接続されている。コントローラ4は、ホスト2から受信されたライトコマンドに基づいて、不揮発性メモリ5にデータを書き込む処理を実行する。また、コントローラ4は、ホスト2から受信されたリードコマンドに基づいて、不揮発性メモリ5からデータを読み出す処理を実行する。コントローラ4と不揮発性メモリ5とを接続する物理インタフェースとしては、例えば、Toggle NANDフラッシュインタフェース、またはオープンNANDフラッシュインタフェース(ONFI)が使用される。また、コントローラ4は、DRAM6に電気的に接続されている。コントローラ4は、DRAM6へのデータの書き込みと、DRAM6からのデータの読み出しとを実行する。コントローラ4の各部の機能は、専用ハードウェア、プログラムを実行するプロセッサ、またはこれらの組み合わせにより実現され得る。
【0017】
不揮発性メモリ5は、不揮発性のメモリである。不揮発性メモリ5は、例えば、NAND型フラッシュメモリである。不揮発性メモリ5は、例えば、2次元構造のフラッシュメモリ、あるいは3次元構造のフラッシュメモリである。不揮発性メモリ5は、複数の不揮発性メモリダイを含む。不揮発性メモリダイは、不揮発性メモリチップとも称される。複数の不揮発性メモリダイの各々は、例えば、NAND型フラッシュメモリダイとして実現される。図1においては、不揮発性メモリ5が、32個の不揮発性メモリダイ#0~#31を含む場合が示されている。
【0018】
DRAM6は、揮発性のメモリである。DRAM6は、例えば、リード/ライトバッファとして用いられる記憶領域と、論理物理アドレス変換テーブル(logical-to-physical address translation table:L2Pテーブル)を記憶する記憶領域とを含む。DRAM6のリード/ライトバッファとして用いられる記憶領域は、ホスト2から受信されたライトデータ、または不揮発性メモリ5から読み出されたリードデータを一時的に保持する。
【0019】
次に、コントローラ4の内部構成を説明する。コントローラ4は、ホストインタフェース回路41と、SRAM42と、CPU43と、誤り訂正回路44と、不揮発性メモリインタフェース回路45と、DRAMインタフェース回路46とを含む。これらホストインタフェース回路41と、SRAM42と、CPU43と、誤り訂正回路44と、不揮発性メモリインタフェース回路45と、DRAMインタフェース回路46とは、内部バス40に接続される。
【0020】
ホストインタフェース回路41は、ホスト2との通信を実行する。ホストインタフェース回路41は、ホスト2から様々なコマンドを受信する。様々なコマンドは、例えば、I/Oコマンドである。
【0021】
SRAM42は、揮発性のメモリである。SRAM42の記憶領域は、例えば、CPU43の作業領域として使用される。また、SRAM42の記憶領域の一部は、リード/ライトバッファとして使用されてもよい。
【0022】
CPU43は、プロセッサである。CPU43は、ホストインタフェース回路41と、SRAM42と、誤り訂正回路44と、不揮発性メモリインタフェース回路45と、DRAMインタフェース回路46とを制御する。CPU43は、不揮発性メモリ5または図示しないROMに格納されている制御プログラム(ファームウェア)をSRAM42にロードする。CPU43は、このファームウェアに基づいて、様々な処理を行う。なお、このファームウェアは、SRAM42にロードされる代わりに、DRAM6にロードされてもよい。
【0023】
CPU43は、例えば、フラッシュトランスレーション層(FTL)として、不揮発性メモリ5に記憶されたデータの管理と、不揮発性メモリ5に含まれるブロックの管理とを行う。
【0024】
不揮発性メモリ5に記憶されたデータの管理は、例えば、マッピング情報の管理を含む。マッピング情報は、メモリシステム3(より詳しくはコントローラ4)によって管理される論理アドレス空間における論理アドレスそれぞれと不揮発性メモリ5の物理アドレスそれぞれとの間の対応関係を示す情報である。論理アドレスは、論理ブロックアドレス(LBA)または論理クラスタアドレス(LCA)のいずれであってもよい。以下では、メモリシステム3の論理アドレス空間を管理するためにメモリシステム3によって使用される論理アドレスとして、LCAが使用される場合を想定する。LCAは、クラスタと称される4KiBのデータに対応する論理アドレスである。一方、メモリシステム3をアクセスするためにホスト2によって使用される論理アドレスとしては、LBAが使用される場合が多い。LBAは、論理ブロック(またはセクタ)と称されるデータに対応する論理アドレスである。LBAによって指定可能な論理ブロックのサイズは、例えば、512バイトまたは4KiBである。LBAによって指定可能な論理ブロックのサイズが4KiBである場合には、CPU43は、ホスト2によって使用されるLBAを、LCAとして使用する。一方、LBAによって指定可能な論理ブロックのサイズが512バイトである場合には、CPU43は、ホスト2によって指定されたLBAを、LCAに変換する。物理アドレスは、不揮発性メモリ5内の物理的な記憶位置を示すアドレスである。
【0025】
不揮発性メモリ5に含まれるブロックの管理は、不揮発性メモリ5に含まれる不良ブロック(バッドブロック)の管理と、ウェアレベリングと、ガベージコレクションとを含む。
【0026】
誤り訂正回路44は、エンコード処理、またはデコード処理を実行する。誤り訂正回路44は、不揮発性メモリ5にデータが書き込まれる際に、エンコード処理を実行する。エンコード処理において、誤り訂正回路44は、不揮発性メモリ5に書き込まれるデータに冗長コードを付加する。冗長コードは、例えば、エラー訂正コード(ECC)である。また、不揮発性メモリ5からデータがリードされた際に、誤り訂正回路44は、デコード処理を実行する。デコード処理において、誤り訂正回路44は、不揮発性メモリ5から読み出されたデータの誤り訂正を実行する。誤り訂正回路44は、誤り訂正を実行する際に、このデータに付加されたECCを使用する。
【0027】
不揮発性メモリインタフェース回路45は、不揮発性メモリ5を制御する回路である。不揮発性メモリインタフェース回路45は、例えば、不揮発性メモリ制御回路451-0、451-1、…、451-15を含む。不揮発性メモリ制御回路451-0、451-1、…、451-15は、チャンネルch0、ch1、…、ch15にそれぞれ接続される。不揮発性メモリ制御回路451-0、451-1、…、451-15は、チャンネルch0、ch1、…、ch15それぞれを介して、1つまたは複数の不揮発性メモリダイに電気的に接続される。図1においては、チャンネルch0、ch1、…、ch15の各々に2つの不揮発性メモリダイが接続されている。この場合、不揮発性メモリ制御回路451-0は、チャンネルch0を介して、不揮発性メモリダイ#0および不揮発性メモリダイ#16に接続される。不揮発性メモリ制御回路451-1は、チャンネルch1を介して、不揮発性メモリダイ#1および不揮発性メモリダイ#17に接続される。また、不揮発性メモリ制御回路451-15は、チャンネルch15を介して、不揮発性メモリダイ#15および不揮発性メモリダイ#31に接続される。
【0028】
個々の不揮発性メモリダイは、独立して動作可能である。このため、不揮発性メモリダイは、並列動作可能な単位として機能する。不揮発性メモリダイ#0、#1、…、#15は、不揮発性メモリインタフェース回路45によってバンクBNK0として扱われる。同様に、不揮発性メモリダイ#16、#17、…、#31は、不揮発性メモリインタフェース回路45によってバンクBNK1として扱われる。バンクは、インタリーブ動作によって、複数の不揮発性メモリダイを並列動作させる単位である。
【0029】
図1に示される不揮発性メモリ5の構成においては、不揮発性メモリインタフェース回路45は、16チャンネルと、インタリーブ動作とによって、不揮発性メモリダイ#0~#31を並列にアクセスすることができる。このため、不揮発性メモリインタフェース回路45は、最大で32個の不揮発性メモリダイにデータを並列に書き込むことができる。すなわち、並列書き込み数は32である。なお、不揮発性メモリダイ#0~#31の各々は、複数のプレーンを有するマルチプレーン構成を有していてもよい。例えば、不揮発性メモリダイ#0~#31の各々が2プレーンを含む場合、不揮発性メモリインタフェース回路45は、最大で64個のプレーンにデータを並列に書き込むことができる。すなわち、この場合の並列書き込み数は64である。
【0030】
DRAMインタフェース回路46は、DRAM6を制御する回路である。DRAMインタフェース回路46は、DRAM6にデータを格納する。また、DRAMインタフェース回路46は、DRAM6に格納されているデータを読み出す。
【0031】
次に、不揮発性メモリダイの構成を説明する。図2は、不揮発性メモリ5に含まれる複数の不揮発性メモリダイの一つの構成例を示すブロック図である。
【0032】
不揮発性メモリダイ#nは、不揮発性メモリダイ#0~#31のうちの任意の不揮発性メモリダイである。不揮発性メモリダイ#nは、複数のブロック(ここではブロックBLK0~BLKx-1)を含む。ブロックBLK0~BLKx-1の各々は、複数のページ(ここではページP0~Py-1)を含む。各ページは、複数のメモリセルを含む。ブロックBLK0~BLKx-1の各々は、データを消去するデータ消去動作の単位である。ページP0~Py-1の各々は、データ書き込み動作およびデータ読み出し動作の単位である。データ書き込み動作は、ページの単位で不揮発性メモリダイ#nにデータを書き込む動作である。データ読み出し動作は、ページの単位で不揮発性メモリダイ#nからデータを読み出す動作である。
【0033】
次に、DRAM6に記憶されるテーブルについて説明する。図3は、DRAM6に記憶されているテーブルの例を示すブロック図である。
【0034】
DRAM6の記憶領域は、L2Pテーブル61、ルックアップテーブル(LUT0)62、ルックアップテーブル(LUT1)63、ルックアップテーブル(LUT2)64、およびルックアップテーブル(LUT3)65を記憶するために使用される。以下では、ルックアップテーブル(LUT0)62、ルックアップテーブル(LUT1)63、ルックアップテーブル(LUT2)64、およびルックアップテーブル(LUT3)65は、それぞれLUT0_62、LUT1_63、LUT2_64、およびLUT3_65と称される。
【0035】
L2Pテーブル61は、マッピング情報を保持するテーブルである。
【0036】
LUT0_62、LUT1_63、LUT2_64、およびLUT3_65は、DRAM6に記憶されているL2Pテーブル61のマッピング情報を管理するために使用される階層化されたテーブル群である。
【0037】
LUT0_62、LUT1_63、LUT2_64、およびLUT3_65の全てあるいは一部は、DRAM6に記憶される代わりに、SRAM42の記憶領域に記憶されていてもよい。
【0038】
次に、CPU43の機能構成について説明する。図4は、CPU43の機能構成の例を示すブロック図である。
【0039】
CPU43は、ネームスペース管理部431と、L2Pテーブル管理部432と、ライト制御部433と、リード制御部434とを含む。ネームスペース管理部431、L2Pテーブル管理部432、ライト制御部433、およびリード制御部434の一部または全ては、コントローラ4の専用ハードウェアによって実現されてもよい。
【0040】
ネームスペース管理部431は、複数のネームスペースを管理する。複数のネームスペースの各々は、論理アドレスの集合である。複数のネームスペースの各々は、メモリシステム3にアクセスするためにホスト2によって使用される。ネームスペースの管理は、ネームスペースに対するネームスペースアロケーションユニット(NSAU)の割り当て、およびネームスペースに対するNSAUの割り当ての解除を含む。一つのNSAUは、メモリシステム3の論理アドレス空間を等分割することによって得られる複数のエリアのうちの一つのエリアである。メモリシステム3の論理アドレス空間は、2のべき乗(=2(i+j))個のクラスタに対応するサイズを有している。2(i+j)個のクラスタに対応するサイズを有する論理アドレス空間は、2のべき乗(2)個のエリア(NSAU)に分割される。そのため、一つのNSAUは、2のべき乗(2)個のクラスタに対応するサイズを有している。ネームスペース管理部431は、ネームスペースのサイズに基づいて、ネームスペースに一つ以上のNSAUを割り当てる。例えば、あるネームスペースが作成された場合、この作成されたネームスペースのサイズに基づいて、ネームスペース管理部431は、いずれのネームスペースにも割り当てられていない一つまたは複数のNSAUを、この作成されたネームスペースに割り当てる。ネームスペースのサイズは、このネームスペースに含まれる論理アドレス(LBA)の数によって表される。作成すべきネームスペースのサイズは、ホスト2によって指定される。一方、個々のNSAUのサイズは、メモリシステム3によって決定される。このため、ネームスペースのサイズは、NSAUの整数倍のサイズではないことが多い。
【0041】
例えば、作成するように指示されたネームスペースのサイズがNSAUの1.5倍のサイズである場合、ネームスペース管理部431は、いずれのネームスペースにも割り当てられていない2つのNSAUを、このネームスペースに割り当てる。
【0042】
また、例えば、あるネームスペースのサイズを拡張する場合、拡張されたネームスペースのサイズに基づいて、ネームスペース管理部431は、いずれのネームスペースにも割り当てられていないNSAUを、サイズが拡張されたネームスペースの末尾に追加的に割り当てる。また、あるネームスペースのサイズを縮小する場合、縮小されたネームスペースのサイズに基づいて、ネームスペース管理部431は、そのネームスペースに割り当てられている複数のNSAUのうちの末尾の一つのNSAUの割り当てを解除する。
【0043】
このように、個々のネームスペースに論理アドレス空間内の任意のNSAUを割り当てるという構成を採用することにより、個々のネームスペースに論理アドレス空間内の連続する論理アドレスの範囲を割り当てる構成に比し、個々のネームスペースを容易にリサイズすることが可能となる。なぜなら、個々のネームスペースに論理アドレス空間内の連続する論理アドレスの範囲を割り当てる構成を使用するケースにおいては、あるネームスペースのサイズを拡張するためには、このネームスペースに現在割り当てられている論理アドレスの範囲の直後に、空きの論理アドレスの範囲を確保しなければならないためである。この場合、このネームスペースに現在割り当てられている論理アドレスの範囲の直後の論理アドレスの範囲が別のネームスペースに既に割り当てられていたならば、この別のネームスペースを別の論理アドレスの範囲に移動することが必要となる。この別のネームスペースを別の論理アドレスの範囲に移動する処理においては、この別のネームスペースのデータが記憶されている物理アドレスそれぞれがこの別の論理アドレスの範囲に関連付けられるように、L2Pテーブル61を更新する処理が必要となる。このため、この別のネームスペースを別の論理アドレスの範囲に移動するためには、比較的長い時間が要される。
【0044】
L2Pテーブル管理部432は、L2Pテーブル61が記憶されたDRAM6の記憶領域を複数のバッファ領域に区分する。ここで、L2Pテーブル61が記憶されたDRAM6の記憶領域は、L2Pテーブル61用に確保されたDRAM6内の記憶領域である。L2Pテーブル61用に確保されたDRAM6内の記憶領域は、単にバッファとも称される。複数のバッファ領域の各々のサイズは、NSAUと同じサイズ、つまり、2個のクラスタに対応するサイズ、に設定され得る。なお、L2Pテーブル61用に確保されるバッファのサイズはメモリシステム3の表記容量に基づいて決定されるので、バッファのサイズは、NSAUのサイズの整数倍であるとは限らない。このため、これら複数のバッファ領域のうちの一つのバッファ領域だけが、NSAUのサイズ未満のサイズ、つまり2個のクラスタよりも少ない個数のクラスタに対応するサイズ、に設定される場合がある。以降の説明では、2個のクラスタに対応するサイズは、NSAUのサイズとも称する。また、L2Pテーブル管理部432は、各ネームスペースに割り当てられた一つまたは複数のNSAUを、各ネームスペースの末尾の論理アドレスを少なくとも含む第1のNSAUと、第1のNSAUを除く第2のNSAUとに分類する。ネームスペースのサイズがNSAUのサイズの整数倍ではない場合、第1のNSAUは、このネームスペースによって使用される論理アドレスの集合と、このネームスペースによって使用されない論理アドレスの集合とを含むNSAUである。例えば、NSAUのサイズの1.5倍のサイズを有するネームスペースにおいては、このネームスペースに割り当てられた2つのネームスペースのうち、このネームスペースの第1のNSAUに含まれる論理アドレスの集合のうちの半分の論理アドレスのみがこのネームスペースによって使用され、残りの半分の論理アドレスがこのネームスペースによって使用されない。
【0045】
L2Pテーブル管理部432は、複数のネームスペースの各々の第2のNSAUの各々に、複数のバッファ領域のうちの一つのバッファ領域を割り当てる。割り当てられたバッファ領域には、第2のNSAUの各々に対応する複数のマップセグメントが記憶される。マップセグメントは、L2Pテーブル61のマッピング情報全体の一部分である。一つのマップセグメントは、連続するN個の論理アドレスに1対1の関係でそれぞれ対応付けられた不揮発メモリ5のN個の物理アドレスを示す情報である。Nは、2以上の整数である。マップセグメントの詳細は、図5を参照して後述する。
【0046】
そして、L2Pテーブル管理部432は、第2のNSAU毎に、割り当てられたバッファ領域の先頭の記憶位置を示す第1のポインタを管理する。第1のポインタとしては、例えば、このバッファ領域の先頭の記憶位置を示すメモリアドレスが使用される。
【0047】
さらに、L2Pテーブル管理部432は、1つのバッファ領域が2つ以上のネームスペースそれぞれの第1のNSAUによって共有されるように、各ネームスペースの第1のNSAUに、第2のNSAUに割り当てられていない任意のバッファ領域を、割り当てる。なお、L2Pテーブル61用に確保されたバッファに十分な空き記憶領域がある場合、つまり、NSAUと同じサイズを有する複数のバッファ領域を確保できる場合には、ネームスペースそれぞれの第1のNSAU間で一つのバッファ領域を共有する必要は無い。この場合、各ネームスペースの第2のNSAUと同様に、各ネームスペースの第1のNSAUに、一つのバッファ領域を割り当ててもよい。
【0048】
1つのバッファ領域が2つ以上のネームスペースそれぞれの第1のNSAUによって共有される場合には、L2Pテーブル管理部432は、複数のネームスペースの各々の第1のNSAU毎に、複数の第2のポインタを管理する。複数の第2のポインタの各々は、第1のNSAUに対応する複数のマップセグメントのうちの1つのマップセグメントに対応する。複数の第2のポインタの各々は、対応する1つのマップセグメントが格納された、バッファ領域における1つの記憶位置を示す。第2のポインタとしては、例えば、複数のバッファ領域のうちの任意のバッファ領域の先頭の記憶位置を示すメモリアドレスと、この任意のバッファ領域におけるマップセグメント単位の任意の記憶位置を示すオフセットアドレスとの双方を指定可能なメモリアドレスが使用される。
【0049】
このように、各ネームスペースに割り当てられる一つまたは複数のNSAUのうち、第2のNSAUについては、NSAU毎に、一つのバッファ領域が割り当てられる。第2のNSAUに含まれる全ての論理アドレスは、対応するネームスペースによって使用される。したがって、第2のNSAUに割り当てられたバッファ領域の全てを、第2のNSAUに対応する複数のマップセグメントの記憶に有効利用することができる。また、第2のNSAUについては、NSAU毎に、NSAUに割り当てられたバッファ領域の先頭の記憶位置を示す一つのポインタ(第1のポインタ)のみが管理される。したがって、ネームスペース毎に第2のNSAUの数と同数のポインタを管理するだけで済むので、ポインタの管理のために消費されるDRAM6の容量を削減することができる。
【0050】
一方、第1のNSAUについては、各ネームスペースの第1のNSAUに、各ネームスペースの第2のNSAUに割り当てられていない任意のバッファ領域が割り当てられる。また、第1のNSAUについては、複数のマップセグメントがそれぞれ記憶されたDRAM6上の記憶位置は、一つのポインタではなく、複数の第2のポインタを使用して個別に管理される。
【0051】
このため、個々のマップセグメントを、任意のバッファ領域内の任意の記憶位置に配置できる。よって、同じバッファ領域を2つ以上のネームスペースそれぞれの第1のNSAUによって共有可能となる。
【0052】
各ネームスペースのサイズがNSAUのサイズの整数倍ではない場合、第1のNSAUに含まれる論理アドレスの集合のうちの一部の論理アドレスは、このネームスペースによって使用されない。したがって、もし第1のNSAU毎に専用のバッファ領域を割り当てるという構成が使用されたならば、その専用のバッファ領域の一部は、有効なマップセグメントの記憶に使用されない無駄な記憶領域となる。本実施形態では、同じバッファ領域が2つ以上のネームスペースそれぞれの第1のNSAUによって共有されるので、無駄な記憶領域を生じさせることなく、複数のネームスペースの各々の第1のNSAUに対応する複数のマップセグメントを、DRAM6に記憶することができる。以下では、第1のNSAUは、ネームスペースの末尾のNSAUとも称される。
【0053】
また、複数の第2のポインタを管理することが必要なNSAUの総数は、一つのネームスペース当たりに一つのみである。したがって、全てのNSAUの各々について複数の第2のポインタを管理するという構成を使用する場合に比し、第2のポインタの管理のために消費されるDRAM6の容量を削減することができる。
【0054】
ライト制御部433は、ホスト2から受信されたライトコマンドを処理することによって、ライト処理を実行する。ホスト2から受信されたライトコマンドは、例えば、ネームスペース識別子(NSID)、開始論理アドレス、データサイズ、およびデータポインタを指定する。NSIDは、ライトデータが書き込まれるべきネームスペースの識別子である。開始論理アドレスは、ライトデータが書き込まれるべきネームスペース内の論理アドレスである。データサイズは、ライトデータのサイズである。データポインタは、ライトデータが格納されているホスト2のメモリ22における記憶位置を示すメモリアドレスである。ライト処理は、例えば、受信されたライトコマンドに関連付けられたライトデータをホスト2のメモリ22から取得する処理と、不揮発性メモリ5にライトデータを書き込む処理と、ライトコマンドによって指定された開始論理アドレスにライトデータが書き込まれた不揮発性メモリ5の記憶位置を示す物理アドレスがマッピングされるように、開始論理アドレスを含む論理アドレスの範囲に対応するマップセグメントを更新する処理とを含む。
【0055】
リード制御部434は、ホスト2から受信されたリードコマンドを処理することによって、リード処理を実行する。ホスト2から受信されたリードコマンドは、例えば、ネームスペース識別子(NSID)、開始論理アドレス、データサイズ、およびデータポインタを指定する。NSIDは、リード対象データが記憶されているネームスペースの識別子である。開始論理アドレスは、リード対象データに対応するネームスペース内の論理アドレスである。データサイズは、リード対象データのサイズである。データポインタは、リード対象データが転送されるべきホスト2のメモリ22における記憶位置を示すメモリアドレスである。リード処理は、例えば、開始論理アドレスを含む論理アドレスの範囲に対応するマップセグメントを参照することによって、開始論理アドレスを物理アドレスに変換する処理と、物理アドレスによって示される不揮発性メモリ5内の記憶位置からデータを読み出す処理と、読み出されたデータをホスト2のメモリ22に転送する処理とを含む。
【0056】
次に、L2Pテーブル61と、物理アドレス空間との関係について説明する。図5は、実施形態に係るメモリシステム3におけるL2Pテーブル61と物理アドレス空間との関係の例を示す図である。
【0057】
物理アドレス空間は、物理アドレスの集合である。物理アドレスは、不揮発性メモリ5の記憶位置を示すアドレスである。
【0058】
DRAM6に記憶されているL2Pテーブル61のマッピング情報は、複数のマップセグメントの集合である。L2Pテーブル61のマッピング情報は、例えば、マップセグメント#0、#1、…、#zのz+1個のマップセグメントを含む。マップセグメント#0、#1、…、#zの各々は、連続するN個の論理アドレスに1対1の関係でそれぞれ対応付けられたN個の物理アドレスを示す情報である。ここで、Nは、2以上の整数である。図5においては、各マップセグメントが、連続する64個の論理アドレスに1対1の関係でそれぞれ対応付けられた64個の物理アドレスを示す情報である場合が例として示されている。
【0059】
例えば、マップセグメント#0の最初の物理アドレス(ここでは物理アドレス2)は、マップセグメント#0に対応する64個の論理アドレスのうちの最初の論理アドレスに対応する物理アドレスである。マップセグメント#0の2番目の物理アドレス(ここでは物理アドレス3)は、マップセグメント#0に対応する64個の論理アドレスのうちの2番目の論理アドレスに対応する物理アドレスである。そして、マップセグメント#0の最後の物理アドレス(ここでは物理アドレス1)は、マップセグメント#0に対応する64個の論理アドレスのうちの最後の論理アドレスに対応する物理アドレスである。
【0060】
次に、ネームスペースについて説明する。図6は、実施形態に係るメモリシステム3において管理されるネームスペースの例を示す図である。図6では、メモリシステム3において、3つのネームスペース(ネームスペースNS#1、ネームスペースNS#2、およびネームスペース#3)が管理されている場合が示されている。
【0061】
ネームスペースNS#1、ネームスペースNS#2、およびネームスペースNS#3の各々は、任意のサイズに設定され得る。ネームスペースNS#1、ネームスペースNS#2、およびネームスペースNS#3のそれぞれのサイズは、例えば、LBAの個数に対応する。そして、ネームスペースNS#1、ネームスペースNS#2、およびネームスペースNS#3それぞれは、LBA0から始まる連続する論理アドレスを含む。
【0062】
ネームスペースNS#1は、LBA0からLBAiまでのi+1個の連続する論理アドレスの集合である。LBAiは、ネームスペースNS#1の末尾の論理アドレスである。ネームスペースNS#1は、1を示すネームスペース識別子(NSID1)によって識別される。
【0063】
ネームスペースNS#2は、LBA0からLBAjまでのj+1個の連続する論理アドレスの集合である。LBAjは、ネームスペースNS#2の末尾の論理アドレスである。ネームスペースNS#2は、2を示すネームスペース識別子(NSID2)によって識別される。
【0064】
ネームスペースNS#3は、LBA0からLBAkまでのk+1個の連続する論理アドレスの集合である。LBAkは、ネームスペースNS#3の末尾の論理アドレスである。ネームスペースNS#3は、3を示すネームスペース識別子(NSID3)によって識別される。
【0065】
次に、ネームスペースとNSAUとの関係について説明する。図7は、実施形態に係るメモリシステム3におけるネームスペースとNSAUとの関係の例を示す図である。
【0066】
メモリシステム3の論理アドレス空間は、複数のエリア(つまり複数のNSAU)に分割される。複数のNSAUは、同じサイズを有する。つまり、複数のNSAUは、同じ数の論理アドレスを含む。NSAUは、メモリシステム3によって管理される論理アドレス空間における論理アドレスの集合をネームスペースに割り当てる単位として使用される。
【0067】
ネームスペースそれぞれには、ネームスペースのサイズに基づいて、一つ以上のNSAUが割り当てられる。このとき、割り当てられる一つ以上のNSAUの総サイズは、ネームスペースのサイズ以上である。
【0068】
図7において、メモリシステム3の論理アドレス空間は、n+1個のNSAUに等分割されている。つまり、メモリシステム3の論理アドレス空間は、NSAU#0、NSAU#1、…、NSAU#nを含む。
【0069】
ネームスペースNS#1には、2つのNSAU(NSAU#1およびNSAU#4)が割り当てられている。このとき、ネームスペースNS#1のサイズは、1つのNSAUのサイズより大きく、2つのNSAUの総サイズ以下である。
【0070】
ネームスペースNS#2には、3つのNSAU(NSAU#0、NSAU#2、およびNSAU#3)が割り当てられている。このとき、ネームスペースNS#2のサイズは、2つのNSAUの総サイズより大きく、3つのNSAUの総サイズ以下である。
【0071】
ネームスペースNS#3には、1つのNSAU(NSAU#5)が割り当てられている。このとき、ネームスペースNS#3のサイズは、1つのNSAUのサイズ以下である。
【0072】
次に、各ネームスペースと各ネームスペースに割り当てられる一つ以上のNSAUとの間の対応関係と、各NSAUと各NSAUに対応する複数のマップセグメントの各々が記憶される記憶位置との間の対応関係について説明する。図8は、実施形態に係るメモリシステムにおけるLUT0と、LUT1と、LUT2と、LUT3と、L2Pテーブルとの関係の例を示す図である。
【0073】
ここでは、メモリシステム3の表記容量が1TB(=1012バイト)であり、メモリシステム3の論理アドレス空間を等分割することで32個のNSAUが作成されており、1LCA(すなわち1クラスタ)当たりのデータのサイズが4KiB(=212バイト)であり、且つ、メモリシステム3が3つのネームスペースを管理している場合を想定する。
【0074】
一般には、ストレージデバイスの表記容量は、2進数によって管理される論理アドレス空間のサイズの約91%である。例えば、メモリシステム3の表記容量が1TB(=1012バイト)である場合、メモリシステム3の論理アドレス空間のサイズは、240バイトである。この場合、1TB(=1012バイト)の表記容量に含まれるクラスタの数は、例えば、244,190,646である。このクラスタの数は、IDEMA(The International Disk Drive Equipment and Materials Association)で定義されている以下の式を使って算出される。
セクタの数=(表記容量-50)×1,953,504+97,696,368
ここで、1セクタは、512バイトである。また、表記容量は、GB単位で表される。そのため、表記容量が1TB(=1000GB)の場合、セクタの数は、1,953,525,168である。1セクタは、512バイトである。このセクタの数をクラスタの数に換算すると、クラスタの数は、244,190,646(=1,953,525,168/8)である。
【0075】
L2Pテーブル61用に確保されたバッファ、つまり、L2Pテーブル61が記憶されたDRAM6の記憶領域は、例えば、30個のバッファ領域(バッファ領域0~29)を有する。30個のバッファ領域は、L2Pテーブル61が記憶されたDRAM6の記憶領域を区分することによって得られる。30個のバッファ領域は、同じサイズを有していてもよい。なお、末尾(29番目)のバッファ領域は、必ずしもNSAUのサイズと同じサイズを必要としない。そのため、29番目のバッファ領域のサイズは、他のバッファ領域のサイズよりも小さいサイズに設定され得る。L2Pテーブル61のバッファ領域それぞれは、一つのNSAUに割り当てられ得る。また、L2Pテーブル61の一つ以上のバッファ領域は、一つのNSAUのみに割り当てられる代わりに、幾つかのNSAUに共通に割り当てられ得る。
【0076】
L2Pテーブル61の一つのバッファ領域は、一つのNSAUに対応するサイズを有している。図8の例では、メモリシステム3の論理アドレス空間(240バイト)が32個のNSAUに等分割されているので、1つのNSAUのサイズは240[バイト]/32=235[バイト]である。また、1クラスタ当たりのデータのサイズが4KiB(=212バイト)であるので、一つのNSAUは、223個のクラスタ(=235[バイト]/212[バイト/クラスタ]=8,388,608クラスタ)を有する。一つのバッファ領域は、クラスタ当たり例えば4バイトのサイズを有する。そのため、1つのバッファ領域は、32MiB(=4[バイト]×223=225[バイト])のサイズを有する。また、244,190,646(1TBの表記容量に対応するクラスタの数)/8,388,608(1つのバッファ領域のサイズに対応するクラスタの数)=29.10979342460632<30であるので、30個のバッファ領域によって、1TBの表記容量に対応する244,190,646個のクラスタをカバーすることができる。
【0077】
また、L2Pテーブル61の各バッファ領域は、複数の記憶位置を含む。一つの記憶位置は、一つのマップセグメントを格納する。例えば、一つのマップセグメントが64個のクラスタそれぞれに対応する64個の物理アドレスを示す情報を含み、且つ、L2Pテーブル61の一つのバッファ領域が223個のクラスタに対応するサイズを有する場合、L2Pテーブル61の一つのバッファ領域に格納可能なマップセグメントの個数は、217(=223/64)個である。
【0078】
LUT0_62は、ネームスペース毎に、ネームスペースのサイズと、LUT1_63における開始エントリとを示す情報を保持するテーブルである。LUT0_62は、第1のテーブルとも称される。
【0079】
LUT0_62は、ネームスペースNS#1に対応するエントリと、ネームスペースNS#2に対応するエントリと、ネームスペースNS#3に対応するエントリとを有する。ネームスペースNS#1に対応するエントリは、ネームスペースNS#1のサイズ(ここでは、1つのNSAUの1.5倍)と、LUT1_63の開始エントリ(ここでは、0)とを示す情報を保持する。ネームスペースNS#2に対応するエントリは、ネームスペースNS#2のサイズ(ここでは、1つのNSAUの2.5倍)と、LUT1_63の開始エントリ(ここでは、2)とを示す情報を保持する。ネームスペースNS#3に対応するエントリは、ネームスペースNS#3のサイズ(ここでは、1つのNSAUの0.8倍)と、LUT1_63の開始エントリ(ここでは、5)とを示す情報を保持する。
【0080】
LUT1_63は、ネームスペース毎に、LUT0_62に保持される開始エントリから始まる一つまたは連続する複数のエントリに、ネームスペースに割り当てられた一つまたは複数のNSAUを示す情報を保持するテーブルである。LUT1_63は、第2のテーブルとも称される。複数のネームスペースそれぞれと、複数のネームスペースそれぞれに割り当てられた一つまたは複数のNSAUとの間の対応関係は、LUT0_62と、LUT1_63とを使用して管理される。
【0081】
LUT0_62が保持するネームスペース#1に対応する開始エントリから始まるLUT1_63の二つのエントリ(エントリ0およびエントリ1)それぞれは、ネームスペースNS#1に割り当てられているNSAUを示す情報を保持する。エントリ0は、NSAU1を示す情報を保持する。また、エントリ1は、NSAU4を示す情報を保持する。
【0082】
LUT0_62が保持するネームスペース#2に対応する開始エントリから始まるLUT1_63の三つのエントリ(エントリ2、エントリ3およびエントリ4)それぞれは、ネームスペースNS#2に割り当てられているNSAUを示す情報を保持する。エントリ2は、NSAU0を示す情報を保持する。エントリ3は、NSAU2を示す情報を保持する。また、エントリ4は、NSAU3を示す情報を保持する。
【0083】
LUT0_62が保持するネームスペース#3に対応する開始エントリから始まるLUT1_63の一つのエントリ(エントリ5)は、ネームスペースNS#3に割り当てられているNSAUを示す情報を保持する。エントリ5は、NSAU5を示す情報を保持する。
【0084】
LUT2_64は、メモリシステム3が管理するNSAUと同数のエントリを有する。そして、LUT2_64は、NSAU毎に、一つのポインタを保持するテーブルである。一つのポインタは、バッファ領域の先頭の記憶位置を示すポインタ、あるいはLUT3_65のエントリを示すポインタである。対応するNSAUがネームスペースの末尾のNSAU以外のNSAUである場合(すなわち、対応するNSAUが第2のNSAUである場合)、ポインタは、L2Pテーブル61における、対応するバッファ領域の先頭の記憶位置を示すメモリアドレスである。対応するNSAUがネームスペースの末尾のNSAUである場合(すなわち、対応するNSAUが第1のNSAUである場合)、ポインタは、そのネームスペースに対応するLUT3_65の一つのエントリを示す。LUT2_64は、第3のテーブルとも称される。
【0085】
LUT2_64において、NSAU#0に対応するエントリは、0番のバッファ領域の先頭の記憶位置を示すポインタ(Buff 0)を保持する。
【0086】
LUT2_64において、NSAU#1に対応するエントリは、1番のバッファ領域の先頭の記憶位置を示すポインタ(Buff 1)を保持する。
【0087】
LUT2_64において、NSAU#2に対応するエントリは、2番のバッファ領域の先頭の記憶位置を示すポインタ(Buff 2)を保持する。
【0088】
LUT2_64において、NSAU#3に対応するエントリは、ネームスペースNS#2に対応するLUT3_65のエントリを示すポインタ(LUT3)を保持する。
【0089】
LUT2_64において、NSAU#4に対応するエントリは、ネームスペースNS#1に対応するLUT3_65のエントリを示すポインタ(LUT3)を保持する。
【0090】
LUT2_64において、NSAU#5に対応するエントリは、ネームスペースNS#3に対応するLUT3_65のエントリを示すポインタ(LUT3)を保持する。
【0091】
LUT3_65は、メモリシステム3が管理するネームスペースの数と同数のエントリを有する。LUT3_65は、エントリ毎に、複数のポインタを保持するテーブルである。各エントリに保持される複数のポインタは、ネームスペースの末尾のNSAUに対応する複数のマップセグメントが記憶された、バッファ領域における複数の記憶位置をそれぞれ示す。LUT3_65の一つのエントリは、64個のクラスタ(一つのマップセグメント)毎に、一つのポインタを保持する。つまり、LUT3_65の一つのエントリは、217個のポインタを保持する。LUT3_65は、第4のテーブルとも称される。
【0092】
LUT3_65において、ネームスペースNS#1に対応するエントリは、NSAU#4に対応するマップセグメントが格納されている28番または29番のバッファ領域内の記憶位置をそれぞれが示す、217個のポインタを保持する。一つのポインタは、NSAU#4に対応するマップセグメントの一つが記憶されている記憶位置を示す。
【0093】
LUT3_65において、ネームスペースNS#2に対応するエントリは、NSAU#3に対応するマップセグメントが格納されている28番または29番のバッファ領域内の記憶位置をそれぞれが示す、217個のポインタを保持する。一つのポインタは、NSAU#3に対応するマップセグメントの一つが記憶されている記憶位置を示す。
【0094】
LUT3_65において、ネームスペースNS#3に対応するエントリは、NSAU#5に対応するマップセグメントが格納されている28番または29番のバッファ領域内の記憶位置をそれぞれが示す、217個のポインタを保持する。一つのポインタは、NSAU#5に対応するマップセグメントの一つが記憶されている記憶位置を示す。
【0095】
ここで、ホスト2から受信されるI/Oコマンドが指定する論理アドレス(開始論理アドレス)に対応するマッピング情報を取得する手順について説明する。
【0096】
まず、コントローラ4は、ネームスペース識別子と、論理アドレス(開始論理アドレス)とを少なくとも指定するI/Oコマンドをホスト2から受信した場合、以下の処理を実行する。
【0097】
コントローラ4は、指定されたネームスペース識別子と、指定された論理アドレスと、NSAUのサイズと、LUT0_62と、LUT1_63とを使用して、指定されたネームスペース識別子を有するネームスペースに割り当てられている一つ以上のNSAUから一つのNSAUを選択する。
【0098】
この場合、コントローラ4は、指定されたネームスペース識別子に対応するLUT0_62のエントリから、開始エントリを示す情報(つまり開始エントリ番号)取得する。例えば、指定されたネームスペース識別子がNSID2である場合、コントローラ4は、LUT0_62の2番目のエントリに格納されている開始エントリ番号(ここでは2)を取得する。コントローラ4は、指定された論理アドレスをNSAUのサイズで除算した商を算出する。そして、コントローラ4は、開始エントリ番号に商を加えることによって得られた値をインデックス値として使用して、LUT1_63を参照する。例えば、NSID2を有するネームスペースNS#2のサイズが250で、NSAUのサイズが100である場合、ネームスペースNS#2には3つのNSAU(ここでは、NSAU#0、NSAU#2、NSAU#3)が割り当てられている。ここで、指定された論理アドレスが150である場合を想定する。開始エントリ番号は2であり、150を100で除算した商は1であるので、コントローラ4は、LUT1_63のエントリ番号3のエントリを参照して、このエントリに格納されている値(ここでは2)を取得する。これにより、コントローラ4は、3つのNSAU(ここでは、NSAU#0、NSAU#2、NSAU#3)から、NSAU#2を選択する。
【0099】
コントローラ4は、指定された論理アドレスの上位ビット部を、選択したNSAUを示すビット列で置換することによって、指定されたネームスペース内の論理アドレスを、選択したNSAUに属するアクセス対象の論理アドレスに変換する。NSAUの総数が32である場合、指定されたネームスペース内の論理アドレスの上位5ビットが、選択したNSAUを示す5ビットで置換される。
【0100】
ここで、I/Oコマンドで指定された論理アドレス(LBA)によって指定される論理ブロックのサイズが4KiBである場合を想定する。この場合、LBAは、LCAに一致する。メモリシステム3の表記容量が1TBである場合、このLCAは、28ビットのビット列(LCA[27:0])で表現される。LCA[27:0]の上位ビット部(LCA[27:23])は、選択したNSAUを示すビット列(NSAU[4:0])で置換される。この結果、LCA[27:0]は、アクセス対象の論理アドレス(NSAU[4:0],LCA[22:0])に変換される。
【0101】
コントローラ4は、LUT2_64と、LUT3_65とを使用して、アクセス対象の論理アドレスに対応するマップセグメントが記憶されているDRAM6における記憶位置を示すメモリアドレスを特定する。このメモリアドレスは、バッファインデックスとも称される。
【0102】
アクセス対象の論理アドレス(NSAU[4:0],LCA[22:0])は、{NSAU[4:0],LCA[22:6],LCA[5:0]}によって表現される。LCA[22:6]は、選択したNSAUに対応する複数のマップセグメントのうちの一つのマップセグメントを特定するために使用される。LCA[5:0]は、特定されたマップセグメントに含まれる64個のクラスタのうちの一つのクラスタを特定するために使用される。
【0103】
図8では、NSID1を有するネームスペースNS#1には、NSAU1およびNSAU4の2つのNSAUが割り当てられている。また、NSID2を有するネームスペースNS#2には、NSAU0、NSAU2、およびNSAU3の3つのNSAUが割り当てられている。また、NSID3を有するネームスペースNS#3には、NSAU5だけが割り当てられている。このため、NSAU#3、NSAU#4、およびNSAU#5は、ネームスペースNS#2、NS#1、およびNS#3にそれぞれ対応する末尾のNSAU(すなわち、第1のNSAU)である。一方、NSAU#0、NSAU#1、およびNSAU#2は、末尾のNSAU以外のNSAU(すなわち、第2のNSAU)である。
【0104】
選択されたNSAUが、NSAU#0、NSAU#1、あるいはNSAU#2である場合、コントローラ4は、LUT2_64から、L2Pテーブル61が記憶されているDRAM6における特定のバッファ領域の先頭の記憶位置を示すポインタを取得する。そして、コントローラ4は、取得したポインタと、アクセス対象の論理アドレス{NSAU[4:0],LCA[22:6],LCA[5:0]}のうちのLCA[22:6]とを使用して、アクセス対象の論理アドレスに対応するマップセグメントが記憶されているバッファインデックスを算出する。NSAU#0、NSAU#1、あるいはNSAU#2に対応するバッファ領域においては、複数のマップセグメント(217個のマップセグメント)が、論理アドレスの昇順で、例えばLCA[22:6]の昇順で、配置されている。したがって、コントローラ4は、取得したポインタによって示される開始アドレスにLCA[22:6]の値をオフセットとして加えることによって、バッファインデックスを算出する。
【0105】
そして、コントローラ4は、バッファインデックスで示されるDRAM6における記憶位置に格納されているマップセグメントを参照または更新する。この場合、コントローラ4は、{バッファインデックス,LCA[5:0]}で示されるメモリアドレスを使用してDRAM6に対するリードアクセスまたはライトアクセスを実行し、マップセグメントに含まれる64個の物理アドレスのうちの一つを参照または更新する。
【0106】
また、選択されたNSAUが、NSAU#3、NSAU#4、またはNSAU#5である場合、コントローラ4は、LUT2_64から、LUT3_65のエントリを示すポインタを取得する。
【0107】
コントローラ4は、取得したポインタによって示されるLUT3_65のエントリを参照する。LUT3_65のエントリの各々には、NSAUに対応する217個のマップセグメントの記憶位置をそれぞれが示す217個のポインタが格納されている。なお、あるネームスペースのサイズがNSAUのサイズの整数倍では無い場合には、217個のポインタのうちの一部のポインタは未使用である。
【0108】
コントローラ4は、17ビットのLCA[22:6]の値に基づいて、LUT3_65のエントリに格納されている217個のポインタの一つを選択する。そして、コントローラ4は、選択したポインタによって示されるメモリアドレスをバッファインデックスに決定し、このバッファインデックスで示されるDRAM6における記憶位置に格納されているマップセグメントを参照または更新する。この場合、コントローラ4は、{バッファインデックス,LCA[5:0]}で示されるメモリアドレスを使用してDRAM6に対するリードアクセスまたはライトアクセスを実行し、マップセグメントに含まれる64個の物理アドレスのうちの一つを参照または更新する。
【0109】
次に、ネームスペース拡張処理について説明する。図9は、実施形態に係るメモリシステムにおいて実行されるネームスペース拡張処理における、LUT0と、LUT1と、LUT2と、LUT3と、L2Pテーブルとの関係の第1の例を示す図である。図9から図11にかけて、図8で説明したメモリシステム3において、ネームスペースNS#2のサイズが、NSAUのサイズの2.5倍に相当するサイズから、NSAUのサイズの3.5倍に相当するサイズに拡張される、ネームスペース拡張処理が実行される場合を想定する。
【0110】
コントローラ4は、いずれのNSAUにも割り当てられていない空きのバッファ領域である3番のバッファ領域を選択する。
【0111】
コントローラ4は、28番および29番のバッファ領域に記憶されているL2Pテーブル61のマップセグメントのうち、NSAU#3に対応するマップセグメントを選択する。NSAU#3は、ネームスペースNS#2の末尾に割り当てられたNSAUである。LUT3_65のネームスペースNS#2に対応するエントリに格納されている各ポインタは、NSAU#3に対応するマップセグメントが記憶されているDRAM6上の記憶位置を示す。このため、コントローラ4は、LUT3_65のネームスペースNS#2に対応するエントリに格納されている各ポインタを参照することにより、NSAU#3に対応するマップセグメントの各々が記憶されているDARM6における記憶位置を特定することができる。
【0112】
コントローラ4は、選択したマップセグメントを、選択した3番のバッファ領域にコピーする。ここで、選択したマップセグメントがコピーされる、3番のバッファ領域内のコピー先の記憶位置は、選択したマップセグメントに対応するLCA[22:6]によって決定される。
【0113】
コントローラ4は、コピーされたマップセグメントに対応するLUT3_65のポインタの値を、3番のバッファ領域におけるコピー先の記憶位置を示す値に更新する。
【0114】
これにより、LUT3_65のネームスペースNS#2に対応するエントリに保持されているポインタのうち、コピーされたマップセグメントに対応するポインタは、3番のバッファ領域におけるコピー先の記憶位置を示す。
【0115】
このように、NSAU#3に対応する複数のマップセグメントのうちの一つのマップセグメントを3番のバッファ領域にコピーする度、コントローラ4は、LUT3_65のネームスペースNS#2に対応するエントリに保持されているポインタのうち、コピーされたマップセグメントに対応するポインタを更新する。これにより、ホスト2からのI/Oコマンドの処理を中断することなく、NSAU#3に対応する各マップセグメントを3番のバッファ領域にコピーする処理を実行することができる。
【0116】
図10は、実施形態に係るメモリシステムにおいて実行されるネームスペース拡張処理における、LUT0と、LUT1と、LUT2と、LUT3と、L2Pテーブルとの関係の第2の例を示す図である。
【0117】
28番および29番のバッファ領域に記憶されているマップセグメントのうち、NSAU#3に対応する全てのマップセグメントに対するコピーが完了すると、コントローラ4は、LUT2_64におけるNSAU#3に対応するエントリが保持するポインタを、LUT3_65のネームスペースNS#2に対応するエントリを示す値から、3番のバッファ領域の先頭の記憶位置を示すメモリアドレス(Buff 3)に更新する。
【0118】
そして、コントローラ4は、LUT3_65のネームスペースNS#2に対応するエントリを初期化する。
【0119】
図11は、実施形態に係るメモリシステムにおいて実行されるネームスペース拡張処理における、LUT0と、LUT1と、LUT2と、LUT3と、L2Pテーブルとの関係の第3の例を示す図である。
【0120】
コントローラ4は、いずれのネームスペースにも割り当てられていないNSAU#6を、ネームスペースNS#2に割り当てられるべき追加のNSAUとして選択する。
【0121】
コントローラ4は、LUT2_64における、選択したNSAU#6に対応するエントリに、ネームスペースNS#2に対応するLUT3_65のエントリを示すポインタを格納する。
【0122】
そして、コントローラ4は、ネームスペースNS#2に追加のエリアが追加的に割り当てられるように、LUT0_62と、LUT1_63とを更新する。
【0123】
この場合、コントローラ4は、まず、LUT1_63を更新して、LUT1_63のエントリ5にNSAU#6を示す情報を格納し、LUT1_63のエントリ6にNSAU#5を示す情報を格納する。また、コントローラ4は、LUT0_62を更新して、ネームスペースNS#2に対応するエントリに保持されているネームスペースNS#2のサイズを、一つのNSAUの3.5倍を示す情報に更新する。そして、コントローラ4は、ネームスペースNS#3に対応するエントリに保持されている開始エントリを示す情報を、エントリ6を示す情報に更新する。
【0124】
これにより、コントローラ4は、NSAU#6をネームスペースNS#2に追加的に割り当てる。
【0125】
次に、ネームスペース縮小処理について説明する。図12は、実施形態に係るメモリシステムにおいて実行されるネームスペース縮小処理における、LUT0と、LUT1と、LUT2と、LUT3と、L2Pテーブルとの関係の第1の例を示す図である。図12から図14にかけて、図11で説明したメモリシステム3において、ネームスペースNS#1のサイズが、NSAUの1.5倍に相当するサイズから、NSAUの0.5倍に相当するサイズに縮小されるネームスペース拡張処理が実行される場合を想定する。
【0126】
コントローラ4は、LUT0_62における、ネームスペースNS#1に対応するエントリに格納されているサイズを示す情報を、一つのNSAUの0.5倍を示す情報に更新する。
【0127】
そして、コントローラ4は、ネームスペースNS#1のサイズが縮小されることによって不要になった全てのマップセグメントを無効化する。ネームスペースNS#1のサイズの縮小により、ネームスペースNS#1に含まれていた論理アドレスのうちの223個のクラスタに対応する上位の論理アドレス群が不要になる。このため、これら不要になった上位の論理アドレス群に対応するマップセグメントが無効化される。
【0128】
つまり、コントローラ4は、1番、28番、および29番のバッファ領域に記憶されているマップセグメントのうち、ネームスペースNS#1の不要になった上位の論理アドレス群に対応するマップセグメントを無効化する。これにより、NSAU#4に対応する全ての論理アドレスとこれら論理アドレスに対応する全てのマップセグメントとが使用されなくなるので、NSAU#4は、不要となる。
【0129】
図13は、実施形態に係るメモリシステムにおいて実行されるネームスペース縮小処理における、LUT0と、LUT1と、LUT2と、LUT3と、L2Pテーブルとの関係の第2の例を示す図である。
【0130】
コントローラ4は、LUT0_62と、LUT1_63とを更新して、ネームスペースNS#1から、ネームスペースNS#1サイズの縮小によって不要になったNSAU#4の割り当てを解除する。この場合、コントローラ4は、まず、LUT1_63を更新して、LUT1_63のエントリ1にNSAU#0を示す情報を格納し、LUT1_63のエントリ2にNSAU#2を示す情報を格納し、LUT1_63のエントリ3にNSAU#3を示す情報を格納し、LUT1_63のエントリ4にNSAU#6を示す情報を格納し、LUT1_63のエントリ5にNSAU#5を示す情報を格納し、そして、LUT1_63のエントリ6に保持されている情報を初期化する。また、コントローラ4は、LUT0_62を更新して、ネームスペースNS#2に対応するエントリに保持されている開始エントリを示す情報を、エントリ1を示す情報に更新し、ネームスペースNS#3に対応するエントリに保持されている開始エントリを示す情報を、エントリ5を示す情報に更新する。これにより、コントローラ4は、ネームスペースNS#1から、不要になったNSAU#4の割り当てを解除する。
【0131】
図14は、実施形態に係るメモリシステムにおいて実行されるネームスペース縮小処理における、LUT0と、LUT1と、LUT2と、LUT3と、L2Pテーブルとの関係の第3の例を示す図である。
【0132】
コントローラ4は、ネームスペースNS#1に対応するLUT3_65のエントリに保持されている複数のポインタを、NSAU#1に対応する複数のマップセグメントが記憶されているバッファ領域における複数の記憶位置をそれぞれ示す値に更新する。NSAU#1は、ネームスペースNS#1のサイズの縮小(NSAU#4の割り当て解除)によってネームスペースNS#1の末尾に割り当てられることになったNSAUである。つまり、LUT3_65における、ネームスペースNS#1に対応するエントリが保持する複数のポインタは、1番のバッファ領域の記憶位置をそれぞれ示すメモリアドレスになる。
【0133】
コントローラ4は、ネームスペースNS#1の末尾に割り当てられることになったNSAU#1に対応するLUT2_64のエントリに保持されているポインタを、LUT3_65のネームスペースNS#1に対応するエントリを示す値に更新する。
【0134】
次に、マッピング情報管理処理の手順について説明する。図15は、実施形態に係るメモリシステムにおいて実行されるマッピング情報管理処理の手順を示すフローチャートである。ここでは、図8などで説明したように、メモリシステム3の論理アドレス空間が32個のNSAUに等分割され、L2Pテーブル61が記憶されたDRAM6の記憶領域が30個のバッファ領域に区分される場合を想定する。
【0135】
メモリシステム3に初めて電源が投入されると、コントローラ4は、メモリシステム3の論理アドレス空間を32個のNSAUに等分割する(S101)。
【0136】
コントローラ4は、L2Pテーブル61を記憶するために使用される、DRAM6の記憶領域を30個のバッファ領域に区分する(S102)。
【0137】
コントローラ4は、各ネームスペースのサイズに基づいて、ネームスペースそれぞれに一つまたは複数のNSAUを割り当てる(S103)。
【0138】
コントローラ4は、ステップS103で各ネームスペースに割り当てられたNSAUそれぞれを、末尾のNSAU(第1のNSAU)と、他のNSAU(第2のNSAU)とに分類する(S104)。
【0139】
コントローラ4は、ステップS104で分類された第2のNSAUそれぞれに、一つのバッファ領域を割り当てる(S105)。
【0140】
コントローラ4は、第2のNSAU毎に、ステップS105で割り当てられたバッファ領域の先頭の記憶位置を示す第1のポインタを管理する(S106)。
【0141】
コントローラ4は、1つのバッファ領域が2つ以上のネームスペースの第1のNSAUによって共有されるように、どのNSAUにも割り当てられていないバッファ領域のうちの任意のバッファ領域を、各ネームスペースの第1のNSAUに割り当てる(S107)。
【0142】
コントローラ4は、第1のNSAU毎に、第1のNSAUに対応する複数のマップセグメントがそれぞれ記憶された、バッファ領域における複数の記憶位置をそれぞれが示す複数の第2のポインタを管理する(S108)。
【0143】
次に、ネームスペース拡張処理の手順について説明する。図16は、実施形態に係るメモリシステムにおいて実行されるネームスペース拡張処理の手順を示すフローチャートである。ここでは、ネームスペースNS#2を拡張する要求が、ホスト2から受信される場合を想定する。
【0144】
ホスト2からネームスペースNS#2を拡張する要求を受信すると、コントローラ4は、ネームスペースNS#2に割り当てられているNSAUのうちの末尾のNSAU(第1のNSAU)に対応する複数のマップセグメントを、L2Pテーブル61の空きバッファ領域にコピーする(S201)。
【0145】
コントローラ4は、LUT3_65のネームスペースNS#2に対応するエントリが保持するポインタの各々を、ステップS201におけるマップセグメントのコピー先の記憶位置を示すメモリアドレスに更新する(S202)。
【0146】
コントローラ4は、LUT2_64のネームスペースNS#2に割り当てられているエントリのうち、ネームスペースNS#2の第1のNSAUに対応するエントリが保持するポインタを、ステップS201においてマップセグメントがコピーされたコピー先のバッファ領域の先頭の記憶位置を示すメモリアドレスに更新する(S203)。
【0147】
コントローラ4は、LUT3_65のネームスペースNS#2に対応するエントリを初期化する(S204)。
【0148】
コントローラ4は、LUT2_64を更新することによって、ネームスペースNS#2に割り当てられる追加のNSAUに、ステップS204で初期化されたLUT3_65のエントリを割り当てる(S205)。
【0149】
コントローラ4は、LUT0_62、およびLUT1_63を更新する(S206)。
【0150】
次に、ネームスペース縮小処理の手順について説明する。図17は、実施形態に係るメモリシステムにおいて実行されるネームスペース縮小処理の手順を示すフローチャートである。ここでは、ネームスペースNS#1を縮小する要求が、ホスト2から受信される場合を想定する。
【0151】
ホスト2からネームスペースNS#1を縮小する要求を受信すると、コントローラ4は、LUT0_62における、ネームスペースNS#1に対応するエントリが保持するネームスペースNS#1のサイズを示す情報を更新することによって、ネームスペースNS#1のサイズを縮小する(S301)。
【0152】
コントローラ4は、ステップS301によってネームスペースNS#1のサイズが縮小されたことに応じて、L2Pテーブル61の不要になった全てのマップセグメントを無効化する(S302)。
【0153】
コントローラ4は、ネームスペース#1のサイズの縮小によって未使用になったNSAUの割り当てがネームスペース#1から解除されるように、LUT0_62およびLUT1_63を更新する(S303)。
【0154】
コントローラ4は、LUT3_65を更新することによって、ネームスペースNS#1に対応するエントリが保持するポインタを、ネームスペースNS#1の末尾のNSAU(第1のNSAU)に対応するマップセグメントが記憶されている記憶位置を示すメモリアドレスに更新する(S304)。
【0155】
コントローラ4は、LUT2_64を更新することによって、ネームスペースNS#1の第1のNSAUに対応するエントリが保持するポインタを、LUT3_65のネームスペースNS#1に対応するエントリを示す値に更新する(S305)。
【0156】
以上説明したように、実施形態に係るメモリシステム3においては、各ネームスペースに割り当てられている複数のNSAUのうちの、各ネームスペースの末尾に割り当てられた第1のNSAU以外の第2のNSAUそれぞれには、一つのバッファ領域が割り当てられる。一つのバッファ領域は、一つのNSAUのサイズに対応する全てのマップセグメントを記憶することができる。そして、第2のNSAUに含まれる全ての論理アドレスは、ネームスペースがNSAUのサイズの整数倍でない場合であっても、1つのネームスペースのみによって使用される。そのため、第2のNSAUに割り当てられたバッファ領域の全ての記憶位置が、無駄なく利用される。
【0157】
また、1つのバッファ領域が複数のネームスペースの各々の第1のNSAUによって共有されるように、第2のNSAUに割り当てられていない任意のバッファ領域が、複数のネームスペースの各々の第1のNSAUに割り当てられる。また、第1のNSAUについては、複数のマップセグメントがそれぞれ記憶されたDRAM6上の複数の記憶位置は、一つのポインタではなく、複数の第2のポインタを使用して個別に管理される。そのため、複数の第1のNSAUそれぞれに含まれる論理アドレスの全てが利用されない場合であっても、第1のNSAUそれぞれに専用のバッファ領域が割り当てられないため、バッファ領域に無駄な記憶位置を生じさせることを防ぐことができる。
【0158】
これにより、メモリシステム3におけるマッピング情報を効率的に管理することができる。
【0159】
次に、第1の比較例に係るメモリシステムについて説明する。図18は、第1の比較例に係るメモリシステムにおけるLUT0と、LUT1と、LUT2と、LUT3と、L2Pテーブルとの関係の例を示す図である。
【0160】
第1の比較例に係るメモリシステムXについて、実施形態に係るメモリシステム3と異なる点に注目して説明する。
【0161】
第1の比較例に係るメモリシステムXは、全NSAUがそれぞれ専用のバッファを占有する方式を使用して、マッピング情報を管理する。
【0162】
第1の比較例に係るメモリシステムXは、全てのNSAUに専用のバッファ領域を割り当てることが可能なように、L2Pテーブル61が格納されるDRAMの記憶領域を区分する。例えば、メモリシステムXの論理アドレス空間が32個のNSAUに等分割されている場合には、メモリシステムXは、0番目のバッファ領域から31番目のバッファ領域までを準備する。
【0163】
これにより、第1の比較例に係るメモリシステムXにおいて、NSAU#0から#31までの32個のNSAUそれぞれに、1対1の関係で、0番目から31番目までの32個のバッファ領域それぞれが割り当てられる。なお、例えば、一つのネームスペースが320個のバッファ領域(つまり、30個のNSAU)を使用し、残りの2つネームスペースの各々が1個のバッファ領域(つまり、1個のNSAU)を使用してもよい。
【0164】
図18では、NSAU#0には、0番目のバッファ領域が割り当てられている。NSAU#1には、1番目のバッファ領域が割り当てられている。NSAU#2には、2番目のバッファ領域が割り当てられている。NSAU#3には、3番目のバッファ領域が割り当てられている。NSAU#4には、4番目のバッファ領域が割り当てられている。NSAU#5には、5番目のバッファ領域が割り当てられている。
【0165】
しかし、ネームスペースNS#2のサイズが一つのNSAUの2.5倍であるため、ネームスペースNS#2の末尾のNSAUであるNSAU#3は、半分の容量だけが利用される。そのため、NSAU#3に割り当てられた3番目のバッファ領域の半分の記憶領域は、利用されない。
【0166】
同様に、ネームスペースNS#1およびネームスペースNS#3の末尾のNSAUであるNSAU#4および#5に割り当てられたバッファ領域それぞれも、利用されない記憶領域を有する。
【0167】
つまり、これらの利用されない記憶領域は、既にNSAUに割り当てられているために消費されているが、いずれの情報の記憶にも利用されない無駄な領域である。このように、ネームスペースがNSAUのサイズの整数倍でない場合には、L2Pテーブル61の記憶領域には、利用されない無駄な領域が生じることになる。
【0168】
またさらに、第1の比較例において、L2Pテーブル61の記憶領域の総サイズは、メモリシステムXの論理アドレス空間の総サイズに対応する。そのため、L2Pテーブル61の記憶領域に無駄な領域が生じることは、メモリシステムX本来の容量が少なくなることを引き起こす。
【0169】
次に、第2の比較例について説明する。図19は、第2の比較例に係るメモリシステムにおけるLUT0と、LUT1と、LUT3と、L2Pテーブルとの関係の例を示す図である。
【0170】
第2の比較例に係るメモリシステムYについて、実施形態に係るメモリシステム3と異なる点に注目して説明する。
【0171】
第2の比較例に係るメモリシステムYは、全NSAUでバッファを共有する方式を使用してマッピング情報を管理する。
【0172】
第2の比較例に係るメモリシステムYは、全てのNSAUの数と同数のエントリを有する大きな容量のLUT3_65を準備する。また、L2Pテーブル61の全体の記憶領域を、全てのNSAUで共有する。
【0173】
第2の比較例に係るメモリシステムYにおいて、LUT3_65は、NSAU毎に、217個のポインタを保持するエントリを有する。各エントリが保持するポインタそれぞれは、L2Pテーブル全体のうちの一つの記憶位置を示すメモリアドレスである。
【0174】
このように、第2の比較例に係るメモリシステムYでは、L2Pテーブル61において利用されない記憶位置が生じることを避けることができる。
【0175】
しかし、第2の比較例に係るメモリシステムYでは、すべてのNSAUそれぞれを割り当てることができる大きなLUT3_65をDRAM6に準備することが必要とされる。そのため、DRAM6の記憶領域の多くが、LUT3_65のために消費されてしまい、L2Pテーブル61全体をDRAM6に記憶することが困難となる場合がある。
【0176】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0177】
1…情報処理システム、2…ホスト、3…メモリシステム、4…コントローラ、5…不揮発性メモリ、6…DRAM、7…バス、20…内部バス、21…プロセッサ、22…メモリ、40…内部バス、41…ホストインタフェース回路、42…SRAM、43…CPU、44…誤り訂正回路、45…不揮発性メモリインタフェース回路、46…DRAMインタフェース回路、61…L2Pテーブル、62…ルックアップテーブル(LUT0)、63…ルックアップテーブル(LUT1)、64…ルックアップテーブル(LUT2)、65…ルックアップテーブル(LUT3)、431…ネームスペース管理部、432…L2Pテーブル管理部、433…ライト制御部、434…リード制御部、451-0、451-1、…、451-15…不揮発性メモリ制御回路。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19