JP2016136393A - メモリシステム - Google Patents

メモリシステム Download PDF

Info

Publication number
JP2016136393A
JP2016136393A JP2016011078A JP2016011078A JP2016136393A JP 2016136393 A JP2016136393 A JP 2016136393A JP 2016011078 A JP2016011078 A JP 2016011078A JP 2016011078 A JP2016011078 A JP 2016011078A JP 2016136393 A JP2016136393 A JP 2016136393A
Authority
JP
Japan
Prior art keywords
memory system
record
logical address
processing unit
state
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2016011078A
Other languages
English (en)
Other versions
JP6388345B2 (ja
Inventor
隆裕 南郷
Takahiro Nango
隆裕 南郷
小島 慶久
Yoshihisa Kojima
慶久 小島
福田 徹
Toru Fukuda
徹 福田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toshiba Corp filed Critical Toshiba Corp
Publication of JP2016136393A publication Critical patent/JP2016136393A/ja
Application granted granted Critical
Publication of JP6388345B2 publication Critical patent/JP6388345B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0284Multiple user address space allocation, e.g. using different base addresses
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0292User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • G06F12/1036Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/109Address translation for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0644Management of space entities, e.g. partitions, extents, pools

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Memory System (AREA)

Abstract

【課題】利便性の高いメモリシステムを提供すること。
【解決手段】一つの実施形態によれば、メモリシステムは外部のホストに接続可能である。前記メモリシステムは、第1記憶領域を備える不揮発性の第1記憶装置と、コントローラとを備える。前記第1記憶領域は、前記ホストから受信したデータが格納される。前記コントローラは、前記第1記憶装置に対し、データの書き込みおよびデータの読み出しの制御を行う。前記第1記憶領域は、前記メモリシステムの論理アドレス空間のサイズである第1サイズより大きい第2サイズを有している。前記コントローラは、前記第1サイズを変更する要求を前記ホストから受信し、前記要求に応じて、前記論理アドレス空間のうちの少なくとも一部のデータを有効な状態に保ちながら前記第1サイズを変更する。
【選択図】図28

Description

本実施形態は、メモリシステムに関する。
従来、ホストは、メモリシステムの表記容量のサイズを上限として、当該メモリシステムにユーザデータを書き込むことができる。メモリシステムの実装容量は、表記容量よりも大きい。メモリシステムは、実装容量のサイズの記憶領域のうちから表記容量のサイズの記憶領域を確保する。
特開2012−174086号公報 特開2012−128545号公報 特開2013−200741号公報
一つの実施形態は、利便性の高いメモリシステムを提供することを目的とする。
一つの実施形態によれば、メモリシステムは外部のホストに接続可能である。前記メモリシステムは、第1記憶領域を備える不揮発性の第1記憶装置と、コントローラとを備える。前記第1記憶領域は、前記ホストから受信したデータが格納される。前記コントローラは、前記第1記憶装置に対し、データの書き込みおよびデータの読み出しの制御を行う。前記第1記憶領域は、前記メモリシステムの論理アドレス空間のサイズである第1サイズより大きい第2サイズを有している。前記コントローラは、前記第1サイズを変更する要求を前記ホストから受信し、前記要求に応じて、前記論理アドレス空間のうちの少なくとも一部のデータを有効な状態に保ちながら前記第1サイズを変更する。
図1は、第1の実施形態のメモリシステムの構成例を示す図である。 図2は、各メモリチップの構成例を示す図である。 図3は、各物理ブロックの構成例を示す図である。 図4は、各論理ブロックの構成例を示す図である。 図5は、メモリシステムに格納される各情報を説明する図である。 図6は、表記容量の制御を説明する図である。 図7は、アドレスの種類を説明するための図である。 図8は、1stNVおよび2ndTableのデータ構造例を示す図である。 図9は、1stVおよび2ndTableCacheのデータ構造例を示す図である。 図10は、LUTログのデータ構造例を示す図である。 図11は、物理ブロック情報のデータ構造例を示す図である。 図12は、LUTブロック情報のデータ構造例を示す図である。 図13は、LUTアクティブブロックリストのデータ構造例を示す図である。 図14は、第1クラスタカウンタのデータ構造例を示す図である。 図15は、UNMAP予約テーブルのデータ構造例を示す図である。 図16は、逆引きテーブルのデータ構造例を示す図である。 図17は、ギア比情報を説明するための図である。 図18は、ギア比情報を説明するための図である。 図19は、1stNVの復元の動作を説明するフローチャートである。 図20は、第1応答処理を説明するフローチャートである。 図21は、第2応答処理を説明するフローチャートである。 図22は、リージョンUNMAP処理を説明するフローチャートである。 図23は、アドレス解決処理を説明するフローチャートである。 図24は、アドレス更新処理を説明するフローチャートである。 図25は、レコードの不揮発化の動作を説明するフローチャートである。 図26は、LUTガベージコレクションを説明するフローチャートである。 図27は、ユーザガベージコレクションを説明するフローチャートである。 図28は、第1の実施形態の削減処理を説明するフローチャートである。 図29は、増加処理を説明するフローチャートである。 図30は、第2の実施形態の削減処理を説明するフローチャートである。 図31は、第2の実施形態の削減処理を説明するフローチャートである。 図32は、第2クラスタカウンタのデータ構造例を示す図である。 図33は、メモリシステムの実装例を示す図である。
以下に添付図面を参照して、実施形態にかかるメモリシステムを詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
(第1の実施形態)
図1は、第1の実施形態のメモリシステムの構成例を示す図である。メモリシステム1は、通信路3を介してホスト2に接続される。ホスト2はコンピュータである。コンピュータは、例えば、パーソナルコンピュータ、ポータブルコンピュータ、または、携帯通信機器を含む。メモリシステム1は、ホスト2の外部記憶装置として機能する。通信路3のインタフェース規格としては任意の規格が採用可能である。ホスト2は、メモリシステム1に対してアクセス要求(書き込み要求、読み出し要求)、およびUNMAP要求を発行することができる。アクセス要求およびUNMAP要求は、論理的なアドレス情報(以降、第1アドレスという)を含んで構成される。UNMAP要求については後述する。ホスト2がメモリシステム1に対して用いる論理アドレス空間(即ち第1アドレスによってメモリシステム1内の位置の指定が可能な範囲)のサイズは、メモリシステム1の表記容量と等しい。言い換えると、メモリシステム1は、表記容量と等しいサイズの論理アドレス空間をホスト2に提供する。
メモリシステム1は、メモリコントローラ10と、NAND型のフラッシュメモリ(NANDメモリ)20と、RAM(Random Access Memory)30とを備えている。NANDメモリ20は、ストレージとして用いられる。なお、ストレージとして用いられるメモリの種類はNAND型のフラッシュメモリだけに限定されない。例えば、NOR型のフラッシュメモリ、ReRAM(Resistance Random Access Memory)、またはMRAM(Magnetoresistive Random Access Memory)などがストレージとして採用可能である。
NANDメモリ20は、1以上のメモリチップ(CHIP)21によって構成される。ここでは、NANDメモリ20は、4つのメモリチップ21を備える。
図2は、各メモリチップ21の構成例を示す図である。各メモリチップ21は、夫々メモリセルアレイ23を備える。メモリセルアレイ23は、複数のメモリセルがマトリクス状に配列されて構成される。メモリセルアレイ23は、2つの領域(District)24に分割されている。各District24は、夫々、複数の物理ブロック25を含む。各District24は互いに独立した周辺回路(例えば、ロウデコーダ、カラムデコーダ、ページバッファ、データキャッシュ等)を備えていることにより、複数のDistrict24が同時にアクセス(イレース、プログラムおよびリード)を実行することが可能である。プログラムとは、プログラム先の物理ブロック25内のメモリセルにデータに応じた量の電荷を注入する動作をいう。各メモリチップ21内の2つのDistrict24の夫々は、プレーン番号(Plane#0、Plane#1)を用いて特定される。なお、各メモリチップ21が備えるDistrict24の数は「2」以外であってもよい。
物理ブロック25は、各District24におけるイレースの単位である。図3は、各物理ブロック25の構成例を示す図である。各物理ブロック25は、複数の物理ページ26を備えて構成される。物理ページ26は、各District24におけるプログラムおよびリードの単位である。各物理ページ26は、夫々ページ番号で識別される。
NANDメモリ20を構成する4つのメモリチップ21は、夫々、2つのチャネル(ch.0、ch.1)の何れかを介してメモリコントローラ10に接続されている。ここでは、各チャネルに2つのメモリチップ21が接続されている。各メモリチップ21は、2つのチャネルのうちの何れか1つのみに接続されている。各チャネルは、I/O信号線および制御信号線を含む、配線群によって構成される。I/O信号線は、データ、アドレス、およびコマンドを送受信するための信号線である。なお、I/O信号線のビット幅は1ビットに限定されない。制御信号線は、WE(ライトイネーブル)信号、RE(リードイネーブル)信号、CLE(コマンドラッチイネーブル)信号、ALE(アドレスラッチイネーブル)信号、WP(ライトプロテクト)信号等を送受信するための信号線である。メモリコントローラ10は、各チャネルを個別に制御することができる。メモリコントローラ10は、2つのチャネルを同時にかつ個別に制御することによって、異なるチャネルに接続される2つのメモリチップ21を同時に動作させることができる。
また、4つのメモリチップ21は、複数のバンク22を構成する。複数のバンク22が構成されていることにより、メモリコントローラ10は、バンクインターリーブを実行することができる。バンクインターリーブとは、並列動作の手法の一つである。具体的には、バンクインターリーブとは、1つのバンク22に属する1以上のメモリチップ21がデータにアクセスしている最中にメモリコントローラ10が別のバンク22へアクセスコマンドを発行することによって、NANDメモリ20とメモリコントローラ10との間のトータルの処理時間を短縮する手法である。図1の例においては、2つのバンク22に対して異なるバンク番号(BANK#0、BANK#1)を付与することによって2つのバンク22を夫々区別する。より詳しくは、各チャネルに接続される2つのメモリチップ21のうちの一は、BANK#0を構成し、前記2つのメモリチップ21のうちの他は、BANK#1を構成する。なお、アクセスコマンドは、プログラムコマンド、リードコマンド、およびイレースコマンドを含む。
このように、メモリコントローラ10は、2つのチャネルを同時に動作させ、かつ、2つのバンク22を用いたバンクインターリーブを実行することにより、合計4つのメモリチップ21を並列動作させることができる。また、メモリコントローラ10は、各メモリチップ21に対しては、2つのDistrict24に同時にアクセスする。メモリコントローラ10は、並列にアクセスできる複数の物理ブロック25をひとまとめにして、ひとつの論理ブロックとして管理する。例えば、論理ブロックを構成する複数の物理ブロック25は、一括して消去される。
図4は、各論理ブロックの構成例を示す図である。ここでは、1つの論理ブロックは、夫々、チャネル番号、バンク番号、およびプレーン番号のうちの少なくとも1つが異なる8個の物理ブロック25によって構成される。例えば、図4に示すハッチングが施された複数の物理ブロック25は、1つの論理ブロックを構成する。1つの論理ブロックを構成する各物理ブロック25の各District24における物理的な位置は、同一でなくてもよい。各論理ブロックは、固有の論理ブロック番号が割り振られている。
RAM30は、メモリコントローラ10がNANDメモリ20を制御するための各情報を記憶する。RAM30に格納される各情報の詳細は後述する。また、RAM30は、ホスト2とNANDメモリ20との間のデータ転送のためのバッファとしてメモリコントローラ10によって使用される。また、RAM30は、ファームウェアプログラム(ファームウェアプログラム201)がロードされるバッファとしても使用される。なお、RAM30としては任意の種類のメモリが適用可能である。例えば、DRAM(Dynamic Random Access Memory)、SRAM(Static Random Access Memory)、またはこれらの組み合わせがRAM30として適用可能である。また、RAM30の代わりに、ストレージよりも高速な任意のメモリが適用可能である。また、RAM30はメモリコントローラ10とともに1つのチップとして構成されてもよい。
メモリコントローラ10は、CPU(Central Processing Unit)11、ホストインタフェース(Host I/F)12、RAMコントローラ(RAMC)13、および、NANDコントローラ(NANDC)14を備える。CPU11、Host I/F12、RAMC13、およびNANDC14は、バスで互いに接続されている。
Host I/F12は、通信路3の制御を実行する。また、Host I/F12は、ホスト2からの各種要求を受け付ける。また、Host I/F12は、ホスト2とRAM30との間のデータ転送を実行する。RAMC13は、RAM30を制御する。NANDC14は、RAM30とNANDメモリ20との間のデータ転送を実行する。CPU11は、RAM30にロードされたファームウェアプログラム201に基づいて、メモリコントローラ10全体の制御を実行する処理部として機能する。
図5は、メモリシステム1に格納される各情報を説明する図である。NANDメモリ20は、システム領域27と、available領域28とを備える。システム領域27は、ファームウェアプログラム201を予め記憶する。また、システム領域27は、LUTログ202が格納される。また、システム領域27は、LUTブロック領域29が確保されている。LUTブロック領域29は2ndTable204が格納される。
RAM30は、物理ブロック情報301、LUTブロック情報302、LUTアクティブブロックリスト303、第1クラスタカウンタ304、表記容量設定値305、テーブル長設定値306、UNMAP予約テーブル307、1stV308、1stNV309、2ndTableCache310、逆引きテーブル311、ダーティリスト312、ギア比情報313、およびLUTブロック数設定値314が格納される。
システム領域27は、システムデータを格納するための記憶領域である。システムデータとは、メモリシステム1を運用するために要するデータであり、ホスト2によって書き込みが要求されホスト2から送られてきたデータ(ユーザデータ205)、を除くデータである。available領域28は、ユーザデータ205を格納するための記憶領域である。表記容量のサイズは、available領域28のサイズよりも小さい。処理部は、available領域28に、有効なユーザデータ205を最大で表記容量のサイズまで格納する。
available領域28に記憶されているユーザデータ205の状態は、有効な状態と無効な状態とのうちの何れかである。NANDメモリ20に第1のユーザデータ205が格納されている状態でホスト2から第1のユーザデータ205と同一の第1アドレスを指定して第2のユーザデータ205が送られてきた場合、メモリコントローラ10は、空のページを有する論理ブロックに第2のユーザデータ205を書き込み、第1のユーザデータ205を無効なユーザデータ205としてみなす。「空の」状態とは、ここでは、無効なデータおよび有効なデータの何れも記憶されていない状態をいう。空のページは、データが書き込み可能な空き領域である。このような手法でNANDメモリ20に対する書き込みが行われるため、各論理ブロックには、無効なユーザデータ205と有効なユーザデータ205とが記憶される。データが有効とは、そのデータが最新の状態であることをいう。同一の第1アドレスが指定された複数のデータがNANDメモリ20に格納される場合において、最新の状態とは、その複数のデータのうちのホスト2が最後に書き込んだデータの状態をいう。無効なデータとは、前記複数のデータのうちの、ホスト2が最後に書き込んだデータ以外のデータをいう。
なお、NANDメモリ20に対して上記のように書き込みが行われるため、書き込みが続くに応じて空の論理ブロックの数が減少する。メモリコントローラ10は、空の論理ブロックを生成するために、ガベージコレクションを実行する。ガベージコレクションとは、一つの論理ブロックから有効なデータを他の論理ブロックの空き領域に移動(コピー)し、その後、移動元の論理ブロックに格納されている全データを無効なデータとしてみなす、処理をいう。移動元の論理ブロックは、ガベージコレクションの後、フリーブロックとしてみなされる。なお、フリーブロックの集合を、フリーブロックプールと表記する。各フリーブロックは、イレースが実行されることによって、何もデータを記憶していない状態になる。なお、ガベージコレクションに関し、移動元の論理ブロックを単にソースブロックと表記する。移動先の論理ブロックを単にデスティネーションブロックと表記する。available領域28を構成する論理ブロックを対象とするガベージコレクションを、ユーザガベージコレクションと表記する。LUTブロック領域29を構成する論理ブロックを対象とするガベージコレクションを、LUTガベージコレクションと表記する。
available領域28のサイズから表記容量を減算して得られるサイズを、余裕容量(over-provisioning capacity)と表記する。
本実施形態においては、メモリシステム1は、ホスト2から、表記容量を変更する要求(表記容量削減要求、表記容量増加要求)を受け付けることができる。表記容量増加要求をメモリシステム1が受信した場合、処理部は、図6のS1001に示すように、表記容量を増加させる。表記容量の増加に応じて余裕容量が削減される。また、表記容量削減要求をメモリシステム1が受信した場合、処理部は、S1002に示すように、表記容量を削減する。表記容量の削減に応じて余裕容量が増加する。表記容量削減要求および表記容量増加要求は、例えば、表記容量の変更量を示すサイズを含んで構成される。
前述した手法でNANDメモリ20に対して書き込みが行われるため、ホスト2から指定される第1アドレスが示す物理的な位置が、書き込み毎に変更される。そこで、メモリシステム1は、ホスト2から指定される第1アドレスと物理的な位置との対応関係を記憶し、更新する。
図7は、メモリシステム1にて使用されるアドレスの種類を説明するための図である。ホスト2は、データの位置の指定のために第1アドレスを使用する。第1アドレスは、例えばセクタ毎にデータを指定することができる。ホスト2から指定される第1アドレスは、処理部によって、第2アドレスに変換される。第2アドレスは、データの位置をクラスタ単位で示す論理アドレス情報である。クラスタは、各セクタの位置を示す第1アドレスが連続する、複数のセクタ、によって構成される。第1アドレスと第2アドレスとの対応関係は、例えば固定されている。即ち、第2アドレスは、第1アドレスと同様に、論理アドレスの概念の範疇に含まれる。第1アドレスから第2アドレスへの変換は、例えば、クラスタのサイズに応じた量だけ第1アドレスを右方向にシフトするなどの所定の変換アルゴリズムを用いて実行される。以降、クラスタ単位のデータを単にクラスタと表記する。
第2アドレスは、リージョン番号と第1オフセットとを含む。リージョンは、各クラスタの位置を示す第2アドレスが連続する、複数のクラスタ、によって構成される。即ち、リージョンは、複数のクラスタのサイズに相当するサイズの、第2アドレス(および第1アドレス)の空間上における範囲をいう。リージョン番号は、各リージョンを特定するための番号である。例えば、第2アドレスの上位ビットがリージョン番号を示し、第2アドレスの下位ビットが第1オフセットを示す。第1オフセットは、リージョン番号で示されるリージョン内におけるクラスタ単位の位置を示す。
第2アドレスは、処理部によって、第3アドレスに翻訳される。第3アドレスは、論理ブロック番号および第2オフセットを含む。第2オフセットは、論理ブロック番号で示される論理ブロック内におけるクラスタ単位の位置を示す。また、第2オフセットは、チャネル番号、バンク番号、およびプレーン番号を含む。
第3アドレスは、処理部によって、第4アドレスに変換される。第4アドレスは、物理ブロック番号と第3オフセットとを含む。第3オフセットは、物理ブロック番号で示される物理ブロック25内におけるクラスタ単位の物理的な位置を示す。第3オフセットは、ページ番号を含む。第3アドレスと第4アドレスとの対応関係は、例えば固定されている。即ち、第3アドレスは、第4アドレスと同様に、物理アドレスの概念の範疇に入る。
メモリシステム1は、データの書き込みに応じて第2アドレスと第3アドレスとの対応関係を変化させる。第2アドレスと第3アドレスとの対応関係は、階層構造のテーブルに記録される。ここでは、第2アドレスと第3アドレスとの対応関係は2つの階層を有するテーブルに記録されるものとする。第2階層目のテーブルには第3アドレスが記録される。第1階層目のテーブルは、第2アドレスと、当該第2アドレスに対応する第3アドレスが記憶されたレコードの格納位置を示すポインタと、の対応関係が記録される。第1階層目のテーブルは、リージョン単位でレコードが記録される。第2階層目のテーブルは、リージョン単位でレコードが記録される。第2階層目のテーブルの各レコードには、複数の第3アドレスが記録される。第2階層目のテーブルの各レコードに記録される複数の第3アドレスの夫々は、対応するリージョンに含まれる複数のクラスタの夫々に対応する。
2ndTable204は第2階層目のテーブルに該当する。2ndTableCache310は、2ndTable204がRAM30にキャッシュされたものである。1stV308および1stNV309は、第1階層目のテーブルに該当する。LUTログ202は、1stNV309の変更によって生じた差分を記録したログ情報である。
図8は、1stNV309および2ndTable204のデータ構造例を示す図である。図示するように、1stNV309に記録される各レコードは、リージョン番号をインデックスとして含み、ポインタおよび第1フラグをデータ項目として含む。ポインタは、LUTブロック領域29内の物理的な位置をポイントする。ポインタは、例えば第3アドレスまたは第4アドレスを用いて記述されている。ポインタが示す位置には、2ndTable204の対応するレコードが格納されている。2ndTable204の各レコードには、1stNV309のインデックスが示すリージョン、に含まれる複数のクラスタの夫々について、第3アドレスか、または、「UNMAP」が記録される。「UNMAP」は、UNMAP状態を示すマジックナンバーである。UNMAP状態とは、論理アドレスに対して物理アドレスが対応付けられていない状態をいう。実施形態では、第2アドレスが第3アドレスに対応付けられていない状態を以てUNMAP状態が実現する。なお、論理アドレスに対して物理アドレスが対応付けられている状態を非UNMAP状態(NOT-UNMAPPED state)と表記する。
第1フラグは、第2階層目のレコードが存在するか否かを示す。ここでは、例えば、第1フラグの値が「1」であることは、第2階層目のレコードが存在しないことを示し、第1フラグの値が「0」であることは、第2階層目のレコードが存在することを示す。第1フラグとして「1」が記録されているレコードにはポインタが記録されない。
図9は、1stV308および2ndTableCache310のデータ構造例を示す図である。図示するように、1stV308に記録される各レコードは、リージョン番号をインデックスとして含み、ポインタをデータ項目として含む。ポインタは、RAM30内の物理的な位置をポイントする。ポインタが示す位置には、2ndTable204の対応するレコードが2ndTableCache310のレコードとして格納されている。2ndTableCache310にレコードが記録されていない場合には、1stV308の該当のレコードには、「Not cached」が記録される。なお、2ndTableCache310にレコードが記録されていることを、単に、リージョンがキャッシュされている、と表記する。
なお、1stV308および1stNV309のテーブル長は、定常状態においては、メモリシステム1に対して使用される論理アドレス空間が有するリージョンの数に等しい。定常状態とは、後述のS2020の処理またはS2103の処理によって表記容量の変更が1stV308および1stNV309に反映済みである状態をいう。ここではテーブル長はレコード数を示すこととする。なお、テーブル長は、テーブルのサイズを示すものであれば任意の種類の単位で示される。1stV308および1stNV309のテーブル長は、定常状態においては表記容量に対応する。1stV308および1stNV309のテーブル長は、テーブル長設定値306としてRAM30に記憶される。ホスト2に対して提供する表記容量は、表記容量設定値305としてRAM30に記憶される。メモリコントローラ10は、所定番地を先頭とし表記容量設定値305が示すサイズの第1アドレスの範囲、に含まれない第1アドレスを指定するアクセス要求をホスト2から受信した場合、ホスト2に対してエラーを通知する。
図10は、LUTログ202のデータ構造例を示す図である。図示するように、LUTログ202には、ポインタとリージョン番号との対からなる内容変更ログ202aと、1stV308および1stNV309のテーブル長の変更内容を記録したサイズ変更ログ202bと、が記録される。サイズ変更ログ202bは、変更前のテーブル長(旧テーブル長)と変更後のテーブル長(新テーブル長)とが記録される。ここでは、テーブル長が大きくなるようにテーブル長が変更された場合のみサイズ変更ログ202bが記録される、として説明する。LUTログ202の各レコードは、時系列順に記録される。LUTログ202は、1stNV309をRAM30に復元するために使用される。
2ndTableCache310に対する書き換えが行われた場合、2ndTableCache310にキャッシュされているレコードと2ndTable204に記録されているレコードとで内容が相違する事態が発生する。2ndTableCache310と2ndTable204とで内容が相違するレコードの状態を、ダーティと表記する。2ndTableCache310と2ndTable204とで内容が一致するレコードの状態を、クリーンと表記する。ダーティリスト312は、2ndTableCache310を構成する複数のレコードのうちのダーティレコードを記憶しておくためのリストである。ダーティリスト312は、例えば、クリーンな状態からダーティな状態に遷移したリージョンのリージョン番号が、時系列順に記録される。
図11は、物理ブロック情報301のデータ構造例を示す図である。物理ブロック情報301は、第3アドレスを第4アドレスに変換する際に、物理ブロック番号を特定するためのテーブルである。図11の例では、論理ブロック番号、チャネル番号、バンク番号、およびプレーン番号の組み合わせ毎に物理ブロック番号が記録されている。物理ブロック情報301は、例えば出荷前に生成され、システム領域27に記録される。物理ブロック情報301は、起動後にシステム領域27からRAM30に読み出される。
図12は、LUTブロック情報302のデータ構造例を示す図である。LUTブロック情報302は、LUTブロック領域29を構成する複数の論理ブロックを管理する情報である。LUTブロック情報302に記録されている論理ブロックは、LUTブロック領域29を構成する論理ブロックとして扱われ、LUTブロック情報302に記録されていない論理ブロックは、LUTブロック領域29を構成する論理ブロックとして扱われない。図示するように、LUTブロック情報302に記録されている各レコードは、LUTブロックIDをインデックスとして含み、LUTブロック領域29を構成する論理ブロックを示す論理ブロック番号をデータ項目として含む。LUTブロックIDは、LUTブロック領域29を構成する各論理ブロックに対して付与される識別番号である。
LUTブロック数設定値314は、LUTブロック領域29を構成する論理ブロックの数の設定値を記録した情報である。処理部は、テーブル長設定値306の変更に応じてLUTブロック数設定値314を更新する。そして、処理部は、LUTブロック領域29を構成する論理ブロックの数がLUTブロック数設定値314に記録されている値に定常状態においては一致するように、LUTブロック領域29を管理する。
図13は、LUTアクティブブロックリスト303のデータ構造例を示す図である。LUTアクティブブロックリスト303は、LUTブロック情報302に記録されている複数の論理ブロックのうちの1以上のアクティブブロックについて、2ndTable204のレコードの記録が開始されたタイミングが最も古いアクティブブロックから順番に論理ブロック番号(またはLUTブロックID)が記録された情報である。なお、ここでは、一つの論理ブロックがいっぱいになるまで当該一つの論理ブロックに対して2ndTable204のレコードが記録された後、次の空の論理ブロックに対して2ndTable204のレコードの記録が開始されるものとする。アクティブブロックとは、いっぱいまで書き込みが行われ、書き込み可能な記憶領域がない論理ブロックをいう。以降、LUTアクティブブロックリスト303に記録されているアクティブブロックを、LUTアクティブブロックと表記する。
図14は、第1クラスタカウンタ304のデータ構造例を示す図である。第1クラスタカウンタ304は、論理ブロックに記憶される有効なクラスタの数を論理ブロック毎に記録した情報である。ここでは、第1クラスタカウンタ304は、available領域28を構成する論理ブロック毎にレコードが記録されているものとする。図示するように、第1クラスタカウンタ304に記録される各レコードは、論理ブロック番号をインデックスとして含み、有効クラスタ数をデータ項目として含む。
ユーザログ203は、available領域28に書き込まれた各クラスタについて、書き込み要求またはガベージコレクションによって書き込みが要求された時に指定された第1アドレスから変換された第2アドレスを記録した情報である。ユーザログ203を構成する各レコードは、ユーザデータ205とクラスタ単位で対応付けられている。例えば、available領域28を構成する各論理ブロックの一部にシステム領域27が確保され、available領域28を構成する各論理ブロックの一部に確保されたシステム領域27にユーザログ203のレコードが記録される。これにより、論理ブロックのイレースによって、ユーザデータ205とそのユーザデータ205に対応するユーザログ203のレコードとは同じタイミングでイレースされる。
図15は、UNMAP予約テーブル307のデータ構造例を示す図である。図示するように、UNMAP予約テーブル307の各レコードは、リージョン番号をインデックスとして含み、第2フラグをデータ項目として含む。第2フラグは、UNMAP処理の実行が予約されているか否かを示す。なお、UNMAP処理とは、第1アドレスの空間上の指定された範囲の状態を、非UNMAP状態からUNMAP状態に遷移させる処理をいう。ここでは、処理部は、第2アドレスの空間上の指定された範囲の状態を、第3アドレスが対応付けられている状態から第3アドレスが対応付けられていない状態に遷移させることによってUNMAP処理を実現する。UNMAP要求は、メモリシステム1にUNMAP処理を実行せしめるための要求である。
図16は、逆引きテーブル311のデータ構造例を示す図である。前述のように、1stNV309は、リージョン番号から2ndTable204における当該リージョン番号に対応するレコードの格納位置を示すポインタを検索するためのテーブルである。これに対し、逆引きテーブル311は、2ndTable204におけるレコードの格納位置を示すポインタから当該レコードに対応するリージョン番号を検索するためのテーブルである。図16の例によれば、逆引きテーブル311の各レコードは、LUTブロックIDをインデックスとして含み、複数のリージョン番号をデータ項目として含む。各レコードのデータ項目に記録されている複数のリージョン番号の順番は、論理ブロックにおける2ndTable204におけるレコードの格納位置の順番と対応する。従って、処理部は、図16に示す逆引きテーブル311を参照することによって、検索対象のポインタからそのポインタが示す位置に格納されているレコードに対応するリージョン番号を取得することが可能である。
ギア比情報313は、available領域28へ書き込まれる2種類のデータの量の比(以降、単にギア比)の設定値を求めるための情報である。前記2種類のデータのうちの一のデータは、ホスト2から書き込みが要求されたデータである。前記2種類のデータのうちの他のデータは、ユーザガベージコレクションによってavailable領域28へ書き込まれるデータ(即ち、ソースブロックからデスティネーションブロックへコピーされるデータ)である。ここでは、ギア比は、前記一のデータの量に対する前記他のデータの量の比であることとする。ソースブロックからデスティネーションブロックへコピーされるデータ量(コピー量)が多い場合、コピー量が少ない場合に比べて、ギア比が大きい。処理部は、ギア比がギア比情報313から求まる設定値と等しくなるように、ガベージコレクションの実行を制御する。ギア比情報313は、フリーブロック数または余裕率またはその両方と、ギア比の設定値と、の関係を規定する。余裕率とは、余裕容量を表記容量で除算して得られる値である。ギア比情報313は、ルックアップテーブルのデータ構造を有していてもよい。また、ギア比情報313は、関数であってもよい。
図17および図18は、ギア比情報313によって規定される関係を説明するための図である。
図17に示すように、ギア比情報313は、フリーブロック数が大きくなるほどギア比が小さくなるようにフリーブロック数とギア比との関係を規定する。フリーブロック数とギア比との関係は、ステップ状に変化するように規定されてもよいし、なめらかに変化するように規定されてもよい。ギア比情報313は、フリーブロック数が第3値である場合に、フリーブロック数が第3値よりも大きい第4値である場合に比べてギア比が大きくなるように、フリーブロック数とギア比との関係を規定する。
図18に示すように、ギア比情報313は、余裕率が小さくなるほどギア比が大きくなるように余裕率とギア比との関係を規定する。余裕率とギア比との関係は、ステップ状に変化するように規定されてもよいし、なめらかに変化するように規定されてもよい。ギア比情報313は、余裕率が第1値である場合に、余裕率が第1値よりも大きい第2値である場合に比べてギア比が大きくなるように、余裕率とギア比との関係を規定する。
なお、ギア比情報313は、余裕率の代わりに余裕容量とギア比との関係を規定してもよい。余裕容量の増減に対するギア比の増減の傾向は、上記に説明した余裕率の増減に対するギア比の増減の傾向と等しい。また、ギア比情報313は、available領域28のサイズは固定されていることを利用して、表記容量と余裕率との関係を規定してもよい。例えば、ギア比情報313は、表記容量が第5値である場合に、表記容量が第5値よりも小さい第6値である場合に比べてギア比が大きくなるように、表記容量とギア比との関係を規定する。
さらに、処理部は、LUTガベージコレクションについてもギア比の制御を実行する。LUTガベージコレクションに関するギア比を、ユーザガベージコレクションに関するギア比を区別するために、LUTギア比、と表記する。LUTギア比は、LUTブロック領域29へ書き込まれる2種類のデータの量の比である。前記LUTブロック領域29へ書き込まれる2種類のデータのうちの一のデータは、S1702の処理(後述する)によってLUTブロック領域29に書き込まれるデータである。前記LUTブロック領域29へ書き込まれる2種類のデータのうちの他のデータは、LUTガベージコレクションによってLUTブロック領域29に書き込まれるデータである。処理部は、フリーブロック数に応じてLUTギア比の設定値を演算する。ここで、LUTガベージコレクションにおけるフリーブロック数とは、LUTアクティブブロックの数をLUTブロック数設定値314から減算して得られる値である。LUTギア比とフリーブロック数との関係は、図17に示す関係と同様の関係が予め設定されている。処理部は、LUTギア比がLUTギア比の設定値に一致するように、LUTガベージコレクションの実行を制御する。
次に、第1の実施形態のメモリシステム1の動作を説明する。
メモリシステム1は、パワーオフの前に、ホスト2からパワーオフの予告を受信する。処理部は、パワーオフの予告を受信すると、パワーオフシーケンスを実行する。パワーオフシーケンスは、RAM30内の各種情報をシステム領域27に退避させる処理を含む。少なくともダーティリスト312に記載のダーティレコードは退避対象に設定される。例えば、退避のための専用領域がシステム領域27に確保され、ダーティレコードは、RAM30内の退避対象の他の情報とともに当該専用領域に退避せしめられる。また、ダーティレコードは、前記専用領域ではなく2ndTable204の末尾に記録されてもよい。
なお、ダーティレコードの他に何れの情報を退避対象とするかは任意に設計される。処理部は、パワーオンの直後に、パワーオンシーケンスを実行する。パワーオンシーケンスは、各種情報をRAM30内にロードしたり、パワーオフシーケンスによってRAM30から失われた情報を復元したりする処理を含む。例えば、パワーオンシーケンスの実行時に、NANDメモリ20内に記憶される他の情報(2ndTable204、LUTログ202など)に基づいてRAM30内に復元できない情報は、パワーオフシーケンスにおける退避対象に設定される。また、復元を行う場合と、パワーオフシーケンスにおいてシステム領域27に退避し、かつ、パワーオンシーケンスにおいてRAM30にロードする場合と、の何れの場合がパワーオンシーケンスの実行時間が短いかに応じて、パワーオフシーケンスにおける退避対象が設定されてもよい。ここでは一例として、LUTブロック情報302、LUTアクティブブロックリスト303、第1クラスタカウンタ304、表記容量設定値305、テーブル長設定値306、UNMAP予約テーブル307、ダーティリスト312に記載のダーティレコード、およびLUTブロック数設定値314が退避対象に含まれるものとする。ここでは、1stNV309は、LUTログ202に基づいて復元される。逆引きテーブル311は、1stNV309に基づいて復元される。また、物理ブロック情報301およびギア比情報313は、システム領域27に予め記憶され(図示せず)、パワーオンシーケンスにおいてシステム領域27からRAM30にロードされる。物理ブロック情報301およびギア比情報313は、パワーオフシーケンスにおいてはRAM30から失われる。
パワーオフの予告なく電力の供給が途絶える事象を、電源断と表記する。メモリシステム1は、電源断時においてもパワーオフシーケンスを実行するために、バッテリ(図示せず)を備える。メモリシステム1は、電源断の直後には、バッテリの電力を用いてパワーオフシーケンスを実行する。なお、予告に基づくパワーオフシーケンスと電源断時のパワーオフシーケンスとは、異なっていてもよいし、同じであってもよい。ここでは一例として、電源断時のパワーオフシーケンスにおいても、予告に基づくパワーオフシーケンスと同じ情報が退避対象として扱われるものとする。
実施形態においては、処理部はLUTログ202に基づいて1stNV309を復元する。図19は、1stNV309の復元の動作を説明するフローチャートである。
まず、処理部は、テーブル長設定値306およびLUTアクティブブロックリスト303をシステム領域27からRAM30にロードする(S1101)。なお、テーブル長設定値306に記述されたテーブル長を「L」と表記する。そして、処理部は、「L」個のレコードを有し、全レコードのデータ項目が空欄の1stNV309を、RAM30に生成する(S1102)。S1102の処理によって、リージョン番号が「0」から「L−1」までのレコードが生成される。
続いて、処理部は、全レコードに第1フラグを立てる(S1103)。第1フラグを立てるとは、ここでは、第1フラグに「1」を記録することである。そして、処理部は、LUTログ202から最も古いレコードを読み出す(S1104)。そして、処理部は、読み出したレコードは内容変更ログ202aであるか否かを判定する(S1105)。読み出したレコードが内容変更ログ202aである場合には(S1105、Yes)、処理部は、読み出した内容変更ログ202aに含まれるリージョン番号が「L」未満であるか否かを判定する(S1106)。
読み出した内容変更ログ202aに含まれるリージョン番号が「L」未満ではない場合(S1106、No)、処理部は、未だ読み出されていないレコードがあるか否かを判定する(S1107)。未だ読み出されていないレコードがある場合には(S1107、Yes)、処理部は、未だ読み出されていない1以上のレコードについてS1104の処理を再び実行する。読み出した内容変更ログ202aに含まれるリージョン番号が「L」未満である場合(S1106、Yes)、処理部は、読み出した内容変更ログ202aに基づいて1stNV309を更新する(S1108)。具体的には、処理部は、読み出した内容変更ログ202aに含まれるリージョン番号をインデックスとして含む1stNV309のレコードを特定する。そして、処理部は、特定したレコードのデータ項目に、読み出した内容変更ログ202aに含まれるポインタを記録する。処理部は、S1108の処理の後、S1107の処理を実行する。
読み出したレコードが内容変更ログ202aではない場合(S1105、No)、即ち読み出したレコードがサイズ変更ログ202bである場合、処理部は、「Lold」が「L」未満であるか否かを判定する(S1109)。ここで、「Lold」はサイズ変更ログ202bに含まれる旧テーブル長の値である。「Lold」が「L」未満ではない場合(S1109、No)、処理部は、S1107の処理を実行する。「Lold」が「L」未満である場合(S1109、Yes)、処理部は、「Lold」から、「L」および新テーブル長「Lnew」のうちの小さいほうから1を減算して得られる値、までのリージョン番号、を含む全てのレコードに、第1フラグを立てる(S1110)。S1110の処理の後、処理部は、S1107の処理を実行する。
未だ読み出されていないレコードがない場合には(S1107、No)、1stNV309の復元が完了する。処理部は、1stNV309の復元の動作を終了する。
処理部は、復元された1stNV309に基づいて逆引きテーブル311を生成することが可能である。
図20および図21は、UNMAP要求に応じた応答処理を説明するフローチャートである。UNMAP要求は、UNMAP処理の対象の範囲の指定を含む。UNMAP処理の対象の範囲は、例えば、当該範囲の先頭位置を示す第1アドレスと、当該範囲のサイズと、の組み合わせによって指定される。処理部は、UNMAP処理の対象の範囲に応じて、第1応答処理または第2応答処理を実行する。UNMAP処理の対象の範囲がリージョンよりも小さい場合、処理部は、第1応答処理を実行する。UNMAP処理の対象の範囲が1以上のリージョンである場合、処理部は、第2応答処理を実行する。図20は、第1応答処理を説明するフローチャートであり、図21は、第2応答処理を説明するフローチャートである。
まず、第1応答処理を説明する。図20の説明において、UNMAP処理の対象として指定されたクラスタを、対象クラスタと表記し、対象クラスタを含むリージョンを、対象リージョンと表記する。
処理部は、ホスト2からUNMAP要求を受信すると(S1201)、処理部は、1stNV309を参照することによって、対象リージョンについて第1フラグが立っているか否かを判定する(S1202)。対象リージョンについて第1フラグが立っていない場合(S1202、No)、処理部は、UNMAP予約テーブル307を参照することによって、対象リージョンについて第2フラグが立っているか否かを判定する(S1203)。対象リージョンについて第1フラグが立っている場合(S1202、Yes)、または、対象リージョンについて第2フラグが立っている場合(S1203、Yes)、処理部は、UNMAP処理の実行完了をホスト2に送信し(S1204)、第1応答処理を終了する。
対象リージョンについて第2フラグが立っていない場合(S1203、No)、1stV308を参照することによって、対象リージョンがキャッシュされているか否かを判定する(S1205)。対象リージョンがキャッシュされていない場合(S1205、No)、処理部は、1stNV309を参照することによって、対象リージョンのレコードのNANDメモリ20上における格納位置を示すポインタを取得する(S1206)。そして、処理部は、対象リージョンのレコードを、取得したポインタが示す位置から2ndTableCache310に読み出す(S1207)。処理部は、S1207の処理による2ndTableCache310の更新に応じて、対象リージョンのレコードがキャッシュされている位置を示すポインタを1stV308に記録する(S1208)。
対象リージョンがキャッシュされている場合(S1205、Yes)、または、S1208の処理の後、処理部は、2ndTableCache310を参照することによって、対象クラスタがUNMAP状態であるか否かを判定する(S1209)。対象クラスタがUNMAP状態でない場合(S1209、No)、処理部は、2ndTableCache310を参照することによって、対象クラスタに設定されている第3アドレスを取得する(S1210)。第1応答処理において、S1210の処理によって取得される第3アドレスを、古い第3アドレス、と表記する。処理部は、古い第3アドレスが含まれる論理ブロックについて、第1クラスタカウンタ304に記録されている値をデクリメントする(S1211)。処理部は、2ndTableCache310において、対象クラスタに、「UNMAP」を設定する(S1212)。処理部は、対象リージョンをダーティリスト312に追加する(S1213)。そして、処理部は、S1204の処理を実行する。対象クラスタがUNMAP状態である場合(S1209、Yes)、処理部は、S1210〜S1213の処理をスキップする。
なお、UNMAP処理の対象として指定された範囲が複数のクラスタを含む場合には、処理部は、UNMAP処理の対象として指定された範囲内の全クラスタについて図20に示した一連の処理を実行する。または、処理部は、UNMAP処理の対象として指定された範囲内の全クラスタについてS1204の処理を行う準備がととのった後に、UNMAP処理の実行完了を1回だけホスト2に送信する。
次に、第2応答処理を説明する。図21において、UNMAP要求によってUNMAP処理の対象として指定されたリージョンを、対象リージョンと表記する。
処理部は、ホスト2からUNMAP要求を受信すると(S1301)、1stNV309を参照することによって、対象リージョンについて第1フラグが立っているか否かを判定する(S1302)。対象リージョンについて第1フラグが立っていない場合(S1302、No)、処理部は、UNMAP予約テーブル307を参照することによって、対象リージョンについて第2フラグが立っているか否かを判定する(S1303)。対象リージョンについて第2フラグが立っていない場合(S1303、No)、処理部は、対象リージョンについて第2フラグを立てる(S1304)。対象リージョンについて第1フラグが立っている場合(S1302、Yes)、または、対象リージョンについて第2フラグが立っている場合(S1303、Yes)、または、S1304の処理の後、処理部は、UNMAP処理の実行完了をホスト2に送信し(S1305)、第2応答処理を終了する。
このように、リージョン単位のUNMAP処理が要求された場合には、第1フラグが立っていない場合、処理部は、第2フラグを立てたのちにUNMAP処理の実行完了を送信する。処理部は、第2フラグが立てられているリージョンに対する実際のUNMAP処理を、後述する動作によって、UNMAP処理の実行完了の送信のタイミングの後に遅延して実行することができる。
なお、UNMAP処理の対象として指定された範囲が複数のリージョンを含む場合には、処理部は、UNMAP処理の対象として指定された範囲内の全リージョンについて図21に示した一連の処理を実行する。または、処理部は、UNMAP処理の対象として指定された範囲内の全リージョンについてS1305の処理を行う準備がととのった後に、UNMAP処理の実行完了を1回だけホスト2に送信する。
図22は、リージョン単位のUNMAP処理(以降、単にリージョンUNMAP処理)を説明するフローチャートである。処理部は、図22に示す動作を、第2応答処理の後の任意のタイミングで実行することができる。また、リージョンUNMAP処理は、後述のアドレス解決処理、アドレス更新処理、ユーザガベージコレクション、および削減処理、のそれぞれの実行中に適宜、呼び出される。また、処理部は、第2フラグが立っているリージョンが存在する間、当該第2フラグが立っているリージョンを対象としてバックグラウンドにてリージョンUNMAP処理を実施することができる。処理部は、UNMAP予約テーブル307において第2フラグが立てられた状態のリージョンを対象としてリージョンUNMAP処理を実行する。図22の説明において、UNMAP予約テーブル307において第2フラグが立てられた状態のリージョンであってリージョンUNMAP処理の対象であるリージョンを、対象リージョンと表記する。また、図22の説明は、予め対象リージョンがキャッシュされていることを前提に説明する。即ち、処理部は、対象リージョンがキャッシュされていない場合には、対象リージョンのレコードをNANDメモリ20から2ndTableCache310に読み出した後に、リージョンUNMAP処理を実行する。
処理部は、まず、2ndTableCache310を参照することによって、対象リージョン内に1以上の非UNMAP状態のクラスタが存在するか否かを判定する(S1401)。対象リージョン内に1以上の非UNMAP状態のクラスタが存在する場合(S1401、Yes)、処理部は、対象リージョン内に存在する1以上の非UNMAP状態のクラスタのうちの1つを着目クラスタとして設定する(S1402)。処理部は、2ndTableCache310を参照することによって、着目クラスタに設定されている第3アドレスを取得する(S1403)。処理部は、取得した第3アドレスが含まれる論理ブロックについて、第1クラスタカウンタ304に記録されている値をデクリメントする(S1404)。処理部は、2ndTableCache310において、着目クラスタに「UNMAP」を設定し(S1405)、対象リージョン内に1以上の非UNMAP状態のクラスタが存在するか否かを再び判定する(S1406)。対象リージョン内に1以上の非UNMAP状態のクラスタが存在する場合(S1406、Yes)、処理部は、S1402の処理を実行する。対象リージョン内に存在するクラスタの全てがUNMAP状態である場合(S1406、No)、処理部は、対象リージョンをダーティリスト312に追加し(S1407)、対象リージョンについての第2フラグを下ろす(S1408)。
対象リージョン内に存在するクラスタの全てがUNMAP状態である場合(S1401、No)、処理部は、S1402〜S1407の処理をスキップする。
なお、リージョンUNMAP処理の呼び出し元の1つに、後述の削減処理がある。削減処理によって呼び出されたリージョンUNMAP処理においては、S1407の処理は実行されてもよいしスキップされてもよい。
図23は、第2アドレスを第3アドレスに翻訳する処理(以降、アドレス解決処理)を説明するフローチャートである。アドレス解決処理の対象の第2アドレスを、対象の第2アドレス、と表記する。対象の第2アドレスが含むリージョン番号、が示すリージョンを、対象リージョンと表記する。
まず、処理部は、対象リージョンのリージョン番号が「L」未満であるか否かを判定する(S1501)。対象リージョンのリージョン番号が「L」未満である場合(S1501、Yes)、処理部は、1stV308を参照することによって、対象リージョンがキャッシュされているか否かを判定する(S1502)。対象リージョンがキャッシュされていない場合(S1502、No)、処理部は、1stNV309を参照することによって、対象リージョンについて第1フラグが立っているか否かを判定する(S1503)。
対象リージョンについて第1フラグが立っていない場合(S1503、No)、処理部は、1stNV309を参照することによって、対象リージョンのレコードのNANDメモリ20上における格納位置を示すポインタを取得する(S1504)。そして、処理部は、対象リージョンのレコードを、取得したポインタが示す位置から2ndTableCache310に読み出す(S1505)。処理部は、S1505の処理による2ndTableCache310の更新に応じて、対象リージョンのレコードがキャッシュされている位置を示すポインタを1stV308に記録する(S1506)。
対象リージョンがキャッシュされている場合(S1502、Yes)、または、S1506の処理の後、処理部は、UNMAP予約テーブル307を参照することによって、対象リージョンについて第2フラグが立っているか否かを判定する(S1507)。対象リージョンについて第2フラグが立っている場合(S1507、Yes)、処理部は、対象リージョンに対して、リージョンUNMAP処理を実行する(S1508)。
対象リージョンについて第2フラグが立っていない場合(S1507、No)、またはS1508の処理の後、処理部は、2ndTableCache310を参照することによって、対象の第2アドレスを第3アドレスに翻訳し(S1509)、動作を終了する。なお、処理部は、翻訳結果として、第3アドレスの代わりに「UNMAP」を取得することがある。
対象リージョンのリージョン番号が「L」未満ではない場合(S1501、No)、処理部は、翻訳結果として「無効」を取得し(S1510)、動作を終了する。また、対象リージョンについて第1フラグが立っている場合(S1503、Yes)、処理部は、翻訳結果として「UNMAP」を取得し(S1511)、アドレス解決処理を終了する。
なお、以上の説明においては、処理部は、対象リージョンについて第2フラグが立っているか否かの判定(S1507)の結果に基づいてリージョンUNMAP処理を実行する(S1508)。処理部は、対象リージョンについて第2フラグが立っている場合において(S1508)、リージョンUNMAP処理を実行することなく翻訳結果として「UNMAP」を取得するように構成されてもよい。
図24は、新しい第3アドレスを記録する処理(以降、アドレス更新処理)を説明するフローチャートである。アドレス更新処理の対象の第2アドレスが示すクラスタを、対象クラスタと表記する。対象クラスタを含むリージョンを、対象リージョンと表記する。
まず、処理部は、1stV308を参照することによって、対象リージョンがキャッシュされているか否かを判定する(S1601)。対象リージョンがキャッシュされていない場合(S1601、No)、処理部は、1stNV309を参照することによって、対象リージョンについて第1フラグが立っているか否かを判定する(S1602)。
対象リージョンについて第1フラグが立っている場合(S1602、Yes)、処理部は、対象リージョンのレコードを2ndTableCache310に生成する(S1603)。なお、S1603の処理において、処理部は、対象リージョンのレコードに関しては、全クラスタに「UNMAP」を設定する。処理部は、S1603の処理による2ndTableCache310の更新に応じて、対象リージョンのレコードがキャッシュされている位置を示すポインタを1stV308に記録する(S1604)。そして、処理部は、対象リージョンについて第1フラグを下ろす(S1605)。
対象リージョンについて第1フラグが立っていない場合(S1602、No)、処理部は、1stNV309を参照することによって、対象リージョンのレコードのNANDメモリ20上における格納位置を示すポインタを取得する(S1606)。そして、処理部は、対象リージョンのレコードを、取得したポインタが示す位置から2ndTableCache310に読み出す(S1607)。処理部は、対象リージョンのレコードがキャッシュされている位置を示すポインタを1stV308に記録する(S1608)。
対象リージョンがキャッシュされている場合(S1601、Yes)、または、S1608の処理の後、処理部は、UNMAP予約テーブル307を参照することによって、対象リージョンについて第2フラグが立っているか否かを判定する(S1609)。対象リージョンについて第2フラグが立っている場合(S1609、Yes)、処理部は、対象リージョンに対して、リージョンUNMAP処理を実行する(S1610)。
S1605の処理の後、または、対象リージョンについて第2フラグが立っていない場合(S1609、No)、または、S1610の処理の後、処理部は、2ndTableCache310を参照することによって、対象クラスタがUNMAP状態であるか否かを判定する(S1611)。対象クラスタがUNMAP状態ではない場合(S1611、No)、処理部は、2ndTableCache310を参照することによって、対象クラスタに設定されている第3アドレスを取得する(S1612)。図24の説明において、S1612の処理によって取得される第3アドレスを、古い第3アドレス、と表記する。処理部は、古い第3アドレスが含まれる論理ブロックについて、第1クラスタカウンタ304に記録されている値をデクリメントする(S1613)。対象クラスタがUNMAP状態である場合(S1611、Yes)、処理部は、S1612およびS1613の処理をスキップする。
続いて、処理部は、2ndTableCache310において、対象クラスタに新しい第3アドレスを設定する(S1614)。処理部は、新しい第3アドレスが含まれる論理ブロックについて、第1クラスタカウンタ304に記録されている値をインクリメントする(S1615)。そして、処理部は、対象リージョンをダーティリスト312に追加し(S1616)、アドレス更新処理を終了する。
図25は、ダーティリスト312に記載のレコードの不揮発化の動作を説明するフローチャートである。まず、処理部は、ダーティリスト312を参照することによって、不揮発化の対象のリージョンを特定する(S1701)。処理部は、S1701の処理においては、ダーティリスト312に記載されている1以上のリージョンのうちから最も古くにダーティリスト312に追加されたリージョンを、不揮発化の対象のリージョンとして特定する。図25の説明において、不揮発化の対象のリージョンを、対象リージョンと表記する。
続いて、処理部は、2ndTableCache310に記録されている対象リージョンのレコードを2ndTable204の末尾に記録(追加)する(S1702)。処理部は、2ndTableCache310へのレコードの追加に応じて、1stNV309に記録されているポインタの更新(S1703)、逆引きテーブル311の更新(S1704)、およびLUTログ202への内容変更ログ202aの追加(S1705)を実行する。具体的には、S1703の処理においては、処理部は、対象リージョンについて1stNV309に記録されているポインタを、S1702の処理によって対象リージョンのレコードが記録された位置を示すポインタで上書きする。S1704の処理においては、処理部は、S1702の処理によって対象リージョンのレコードが記録された論理ブロック、のLUTブロックIDを求める。そして、処理部は、求めたLUTブロックIDをインデックスとするレコードに、対象リージョンのリージョン番号を追加する。また、S1705の処理においては、処理部は、S1702の処理によって対象リージョンのレコードが記録された位置をポイントするポインタと、対象リージョンのリージョン番号と、の対からなる内容変更ログ202aをLUTログ202の末尾に記録(追加)する。
そして、処理部は、対象リージョンをダーティリスト312から削除する(S1706)。さらに、対象リージョンのレコードを2ndTableCache310から削除するように設定されている場合には(S1707、Yes)、対象リージョンのレコードを2ndTableCache310から削除し(S1708)、1stV308のポインタのデータ項目に"Not cached"を設定する(S1709)。そして、処理部は、動作を終了する。対象リージョンのレコードを2ndTableCache310から削除しないように設定されている場合には(S1707、No)、処理部は、S1708およびS1709の処理をスキップする。
図26は、LUTガベージコレクションを説明するフローチャートである。まず、処理部は、LUTアクティブブロックリスト303を参照することによって、LUTアクティブブロックリスト303に記述されているアクティブブロックのうち最も古いアクティブブロックを特定し、特定したアクティブブロックをソースブロックとして設定する(S1801)。最も古いとは、LUTアクティブブロックリスト303に追加されたタイミングが最も古いことをいう。処理部は、ソースブロックの先頭の第3アドレスを着目位置として設定する(S1802)。処理部は、逆引きテーブル311を参照することによって、着目位置に記録されているレコードのリージョン番号を取得する(S1803)。処理部は、S1803の処理によって取得されたリージョン番号はテーブル長設定値306に記述されたテーブル長「L」未満であるか否かを判定する(S1804)。
リージョン番号が「L」未満である場合(S1804、Yes)、処理部は、1stNV309を参照することによって、S1803の処理によって取得されたリージョン番号に対応するポインタを取得する(S1805)。処理部は、S1805の処理によって取得されたポインタが、着目位置を示しているか否かを判定する(S1806)。S1805の処理によって取得されたポインタが、着目位置を示している場合には(S1806、Yes)、処理部は、着目位置に記録されたレコードを有効レコードとして判定する(S1807)。S1803の処理によって取得されたリージョン番号が「L」未満ではない場合(S1804、No)、または、S1805の処理によって取得されたポインタが、着目位置を示していない場合(S1806、No)、処理部は、着目位置に記録されたレコードを無効レコードとして判定する(S1808)。
S1807またはS1808の処理の後、処理部は、ソースブロックに記録されている全レコードについて有効レコードであるか無効レコードであるかの判定処理が実行されたか否かを判定する(S1809)。ソースブロックに記録されている何れかのレコードについて有効レコードであるか無効レコードであるかの判定処理が実行されていない場合(S1809、No)、処理部は、次のレコードが格納されている位置を新たな着目位置として設定し(S1810)、S1803の処理を再び実行する。ソースブロックに記録されている全レコードについて有効レコードであるか無効レコードであるかの判定処理が実行された場合(S1809、Yes)、処理部は、全ての有効レコードをソースブロックからデスティネーションブロックにコピーする(S1811)。そして、処理部は、2ndTable204における有効レコードのコピーに応じて、1stNV309に記録されているポインタの更新(S1812)、逆引きテーブル311の更新(S1813)、およびLUTログ202への内容変更ログ202aの追加(S1814)を実行する。
続いて、処理部は、ソースブロックをフリーブロックプールに追加し(S1815)、ソースブロックをLUTブロック領域29から削除する(S1816)。S1816の処理においては、具体的には、処理部は、LUTブロック情報302およびLUTアクティブブロックリスト303からソースブロックにかかるレコードを削除する。
続いて、処理部は、LUTアクティブブロックの数またはLUTブロック数設定値314が、前回のS1817の処理の実行後から変化したか否かを判定する(S1817)。LUTアクティブブロックの数およびLUTブロック数設定値314の何れかが変化した場合(S1817、Yes)、処理部は、LUTアクティブブロックの数をLUTブロック数設定値314から減算して得られる値に基づいてLUTギア比の設定値を調整し(S1818)、S1801の処理を再び実行する。処理部は、LUTギア比がLUTギア比の設定値に一致するように、LUTガベージコレクションの実行を制御する。LUTアクティブブロックの数およびLUTブロック数設定値314の何れも変化していない場合(S1817、No)、処理部は、S1818の処理をスキップする。
なお、ここでは、処理部はソースブロックに含まれる全ての有効レコードをデスティネーションブロックにコピーする、として説明した。処理部は、有効レコードと判定されたレコードのリージョンがキャッシュされている場合には、2ndTableCache310にキャッシュされているレコードをデスティネーションブロックにコピーしてもよい。
図27は、ユーザガベージコレクションを説明するフローチャートである。処理部は、メモリシステム1の制御中に、ユーザガベージコレクションを断続的に実行する。処理部は、ギア比がギア比情報313から求まる設定値と等しくなるように、ユーザガベージコレクションの実行を制御する。また、処理部は、フリーブロック数および表記容量に基づいてギア比の設定値を動的に制御する。
まず、処理部は、第1クラスタカウンタ304を参照することによって、1以上のアクティブブロックのうち有効クラスタ数が第1クラスタカウンタ304を参照した時点で最小である論理ブロックを特定し、特定した論理ブロックをソースブロックとして設定する(S1901)。処理部は、ソースブロックの先頭に位置するクラスタを着目クラスタとして設定する(S1902)。
続いて、処理部は、ユーザログ203を参照することによって、着目クラスタに対応する第2アドレスを取得する(S1903)。処理部は、S1903の処理によって取得した第2アドレスについて、アドレス解決処理を実行する(S1904)。アドレス解決処理によって「無効」または「UNMAP」が得られた場合には、処理部は、後述のS1907の処理を実行する。
アドレス解決処理によって第3アドレスが得られた場合には、その第3アドレスが着目クラスタの位置を示しているか否かを判定する(S1905)。アドレス解決処理によって得られた第3アドレスが着目クラスタの位置を示している場合(S1905、Yes)、処理部は、着目クラスタを有効クラスタとして判定する(S1906)。S1904の処理によって得られた第3アドレスが着目クラスタの位置を示していない場合(S1905、No)、処理部は、着目クラスタを無効クラスタとして判定する(S1907)。S1906またはS1907の処理の後、処理部は、未だ着目クラスタとして設定されていないクラスタがソースブロックに存在するか否かを判定する(S1908)。未だ着目クラスタとして設定されていないクラスタがソースブロックに存在する場合(S1908、Yes)、処理部は、ソースブロックから未だ着目クラスタとして設定されていないクラスタを選択し、選択されたクラスタを新たな着目クラスタとして設定する(S1909)。S1909の処理の後、処理部は、S1903の処理を実行する。
未だ着目クラスタとして設定されていないクラスタがソースブロックに存在しない場合(S1908、No)、処理部は、全ての有効クラスタをソースブロックからデスティネーションブロックにコピーする(S1910)。処理部は、コピーされた全ての有効クラスタについてアドレス更新処理を実行する(S1911)。処理部は、ソースブロックをフリーブロックプールに追加する(S1912)。
続いて、処理部は、フリーブロック数および表記容量のうちの何れかの変更が行われたか否かを判定する(S1913)。フリーブロック数および表記容量のうちの何れかが変更された場合(S1913、Yes)、処理部は、フリーブロック数および表記容量と、ギア比情報313と、に基づいてギア比の設定値を調整し(S1914)、S1901の処理を再び実行する。フリーブロック数および表記容量のうちの何れも変更されていない場合(S1913、No)、処理部は、S1914の処理をスキップする。
図28は、表記容量を削減する処理(以降、単に削減処理)を説明するフローチャートである。なお、ここでは、表記容量の削減の際には、第1アドレスの空間の末尾からリージョン単位で記憶領域が順番に削除され、表記容量の増加の際には、第1アドレスの空間の末尾にリージョン単位で記憶領域が追加されることとする。また、説明を簡単にするために、ここでは、1つのリージョンのサイズだけ表記容量を削減する処理を説明する。
処理部は、ホスト2から表記容量削減要求を受信すると(S2001)、削除対象のリージョンを特定する(S2002)。図28の説明において、S2002の処理によって特定された削除対象のリージョンを、対象リージョンと表記する。
続いて、処理部は、1stNV309を参照することによって、対象リージョンについて第1フラグが立っているか否かを判定する(S2003)。対象リージョンについて第1フラグが立っていない場合(S2003、No)、処理部は、1stV308を参照することによって、対象リージョンがキャッシュされているか否かを判定する(S2004)。対象リージョンがキャッシュされていない場合(S2004、No)、処理部は、1stNV309を参照することによって、対象リージョンのレコードのNANDメモリ20上における格納位置を示すポインタを取得する(S2005)。そして、処理部は、対象リージョンのレコードを、取得したポインタが示す位置から2ndTableCache310に読み出す(S2006)。処理部は、S2006の処理による2ndTableCache310の更新に応じて、対象リージョンのレコードがキャッシュされている位置を示すポインタを1stV308に記録する(S2007)。
対象リージョンがキャッシュされている場合(S2004、Yes)、または、S2007の処理の後、処理部は、UNMAP予約テーブル307を参照することによって、対象リージョンについて第2フラグが立っているか否かを判定する(S2008)。対象リージョンについて第2フラグが立っている場合(S2008、Yes)、処理部は、対象リージョンに対してリージョンUNMAP処理を実行する(S2009)。
対象リージョンについて第2フラグが立っていない場合(S2008、No)、2ndTableCache310を参照することによって、対象リージョン内に1以上の非UNMAP状態のクラスタが存在するか否かを判定する(S2010)。対象リージョン内に1以上の非UNMAP状態のクラスタが存在する場合(S2010、Yes)、処理部は、非UNMAP状態のクラスタの存在をホスト2に通知する(S2011)。
S2011の処理の後、処理部は、ホスト2から破棄許可の受信を待ち受ける。処理部は、破棄許可を受信した場合(S2012、Yes)、処理部は、S2013〜S2017においてS1401〜S1405の処理と同様の処理を実行することによって、対象リージョン内の全てのクラスタの状態をUNMAP状態に設定する。
対象リージョンについて第1フラグが立っている場合(S2003、Yes)、または、S2009の処理の後、または、対象リージョン内に存在するクラスタの全てがUNMAP状態である場合(S2010、No)、または、対象リージョン内に存在するクラスタの全てがUNMAP状態である場合(S2013、No)、処理部は、対象リージョンのサイズだけ表記容量を小さくするように表記容量設定値305を更新し(S2018)、ホスト2に削減完了を通知する(S2019)。
また、処理部は、テーブル長設定値306を更新する(S2020)。S2020の処理においては、1つのレコード分だけ値が小さくなるようにテーブル長設定値306を更新する。この処理によって、1stV308および1stNV309に記録されている対象リージョンのレコード(即ち各テーブルの末尾に記録されているレコード)が管理対象から削除される。なお、ここでは、1stV308または1stNV309に関し、管理対象の「管理」は、1stV308または1stNV309に対し、更新すること、または参照したりすること、を少なくとも含む。
続いて、処理部は、LUTブロック数設定値314を更新する(S2021)。S2021の処理においては、処理部は、LUTブロック数設定値314の値を、更新前の値よりも1つのリージョンのサイズだけ小さくする。S2021の処理の後、処理部は、動作を終了する。
ホスト2から破棄許可の受信がない場合には(S2012、No)、処理部は、動作を終了する。
なお、ここでは1つのリージョンのサイズだけ表記容量を削減する処理を説明したが、複数のリージョンのサイズだけ表記容量の削減が要求された場合には、例えば、S2002〜S2021の処理をリージョン単位で繰り返す。
図29は、表記容量を増加させる処理(以降、増加処理)を説明するフローチャートである。説明を簡単にするために、ここでは、1つのリージョンのサイズだけ表記容量を増加させる処理を説明する。
処理部は、ホスト2から表記容量増加要求を受信すると(S2101)、追加対象のリージョンを特定する(S2102)。図29の説明において、S2102の処理によって特定された追加対象のリージョンを、対象リージョンと表記する。
処理部は、テーブル長設定値306を更新する(S2103)。S2103の処理においては、1つのレコード分だけ値が大きくなるようにテーブル長設定値306を更新する。この処理によって、1stV308の末尾および1stNV309の末尾に対象リージョンためのレコードが管理対象として追加される。追加された各レコードのデータ項目は空である。例えば、追加された各レコードには、初期値が記録されている。初期値は、無効な値であることを示すマジックナンバーである。処理部は、1stNV309に追加された対象リージョンのレコードに第1フラグを立てる(S2104)。処理部は、LUTログ202にサイズ変更ログ202bを追加する(S2105)。
続いて、処理部は、LUTブロック数設定値314を更新する(S2106)。S2106の処理においては、処理部は、LUTブロック数設定値314の値を、更新前の値よりも1つのリージョンのサイズだけ大きくする。処理部は、ホスト2に増加完了を通知する(S2107)。S2107の処理の後、処理部は、動作を終了する。
なお、ここでは1つのリージョンのサイズだけ表記容量を増加する処理を説明したが、複数のリージョンのサイズだけ表記容量の増加が要求された場合には、例えば、処理部は、追加対象の全てのリージョンについて一括してS2102〜S2106の各処理を実行する。その後、処理部は、一度だけS2107の処理を実行する。
以上述べたように、第1の実施形態によれば、メモリシステム1は、ユーザデータ205を記憶するavailable領域28を備えている。available領域28のサイズ(第2サイズ)は、表記容量(第1サイズ)よりも大きい。処理部は、ホスト2からの要求(表記容量削減要求、表記容量増加要求)に応じて表記容量を、論理アドレス空間のうちの少なくとも一部によって示されるユーザデータ205をavailable領域28に保持したまま、変更することができる。メモリシステム1の表記容量を動的に変更できるので、メモリシステム1の利便性を高めることができる。
より詳しくは、図28に示す削減処理によれば、論理アドレス空間のうちの削除対象ではないリージョンについては、第2アドレスと第3アドレスとの対応関係に対する変更は行われない。従って、処理部は、論理アドレス空間のうちの削除対象ではないリージョンが指定されて格納されたユーザデータ205を、有効な状態に維持したまま削減処理を実行する。これに対し、削除対象のリージョンが指定されて格納されたユーザデータ205が存在する場合、処理部は、破棄許可の受信の後(S2012、Yes)、削除対象のリージョンが指定されて格納されたユーザデータ205を、S2013〜S2017の処理によってUNMAP状態に設定する。さらに、処理部は、テーブル長設定値306の更新(S2020)によって、削除対象のリージョンを1stV308および1stNV309による管理対象から削除する。処理部は、管理対象から削除されたリージョンについてアドレス解決処理を実行した場合、「無効」という結果を取得する(S1510)。ここでは、論理アドレス空間に関し、管理対象の「管理」とは、論理アドレス空間に対し、ユーザデータ205を読み出すこと、ユーザデータ205を書き込むこと、またはUNMAP処理を実行すること、を少なくとも含む。データに関し、管理対象の「管理」とは、データが格納されている位置に対し、読み出すこと、書き込むこと、またはUNMAP処理を実行すること、を少なくとも含む。処理部は、ユーザガベージコレクション(図27)においては、アドレス解決処理(S1904)によって「無効」を取得するため、管理対象から削除されたリージョンが指定されて格納されたユーザデータ205の状態を、無効な状態であると判定する(S1907)。処理部は、無効な状態のユーザデータ205をソースブロックからデスティネーションブロックにコピーすることなくソースブロックのイレースを行う。このように、処理部は、論理アドレス空間のうちの削除対象ではないリージョンと削除対象のリージョンとの夫々に有効なユーザデータ205が存在する場合には、削除対象ではないリージョンが指定されて格納されたユーザデータ205の削除は行わず、削除対象のリージョンが指定されて格納されたユーザデータ205を破棄許可の受信後に削除する。即ち、処理部は、論理アドレス空間のうちの少なくとも一部によって示されるユーザデータ205を有効なデータとしてavailable領域28に保持したまま、表記容量を削減することができる。言い換えると、処理部は、論理アドレス空間のうちの少なくとも一部のデータ(有効なデータ)の管理を継続しながら、表記容量を削減することができる。さらに言い換えると、処理部は、論理アドレス空間内の少なくとも一部のデータを有効な状態に保ったまま、表記容量を削減することができる。
また、図29に示す増加処理によれば、論理アドレス空間のうちの既存のリージョンについても、第2アドレスと第3アドレスとの対応関係に対する変更は行われない。したがって、処理部は、論理アドレス空間のうちの既存のリージョンが指定されて格納されたユーザデータ205を有効な状態に維持したまま増加処理を実行する。即ち、処理部は、論理アドレス空間のうちの既存のリージョンが指定されて格納されたユーザデータ205をavailable領域28に保持したまま、表記容量を増加させることができる。
処理部は、削除対象のリージョンが指定されて格納されたユーザデータ205が存在する場合、レコードの削除を行う前にホスト2に警告する。これにより、有効なユーザデータ205が削減処理の実行によってホスト2に無断で削除される事象の発生を防止することが可能となる。
なお、処理部は、削除対象のリージョンが指定されて格納されたユーザデータ205が存在する場合、ホスト2に警告を行わないで処理を中断する、ように構成されてもよい。また、処理部は、削除対象のリージョンが指定されて格納されたユーザデータ205が存在する場合、ホスト2に警告を行い、破棄許可を受信するか否かに関わらず削減処理を進める、ように構成されてもよい。また、処理部は、削減処理の後にホスト2への警告を行ってもよい。
メモリシステム1は、1階層目のテーブル(1stV308および1stNV309)と2階層目のテーブル(2ndTableCache310および2ndTable204)とを、第2アドレスと第3アドレスとを対応付ける対応情報として記憶する。処理部は、ホスト2からの要求(表記容量削減要求、表記容量増加要求)に応じて、対応情報に具備される第2アドレスと第3アドレスとを対応付けるレコードの数を変更する。
より詳しくは、処理部は、メモリシステム1が表記容量削減要求を受信した場合には、削除対象のリージョンについて、2階層目のテーブルのレコードに全クラスタについて「UNMAP」を設定する(S2003〜S2017)。そして、処理部は、削除対象のリージョンについて、1階層目のテーブルからレコードを削除する(S2020)。処理部は、2階層目のテーブルにおける削除対象のリージョンのレコードは、1階層目のテーブルからポイントされないため、処理部は、LUTガベージコレクションにおいて、2ndTable204における削除対象のリージョンのレコードを無効レコードと判定する(S1808)。処理部は、無効レコードをソースブロックからデスティネーションブロックにコピーすることなくソースブロックのイレースを行う。なお、2ndTableCache310における削除対象のリージョンのレコードは、不揮発化の対象に設定されてもよいし不揮発化の対象に設定されなくてもよい。2ndTableCache310における削除対象のリージョンのレコードが不揮発化される場合においても、不揮発化後、LUTガベージコレクションによって当該レコードは削除される。このように、2階層目のテーブルにおける削除対象のレコードも、1階層目のテーブルからのレコードの削除に伴って、削除される。
また、処理部は、メモリシステム1が表記容量増加要求を受信した場合には、1stV308および1stNV309にレコードを追加する(S2103)。そして、処理部は、1stNV309に追加したレコードに第1フラグを立てる(S2104)。なお、処理部は、第2階層目のテーブルに関し、追加対象のリージョン、のレコードを、アドレス更新処理の際に2ndTableCache310に生成し(S1603)、生成したレコードを不揮発化の対象に設定する(S1616)。したがって、処理部は、表記容量増加要求を受信した場合には、第1階層目のテーブルおよび第2階層目のテーブルの夫々にレコードを追加する。
なお、追加対象のリージョン、のレコードを、第2階層目のテーブルに追加する処理は、任意のタイミングで実行可能である。以上の説明においては、処理部は、第1フラグが立てられた状態のリージョンについてアドレス解決処理を行うときに、対応するレコードを2ndTableCache310に生成しないで「UNMAP」の結果を取得する(S1511)として説明した。処理部は、アドレス解決処理においても、アドレス更新処理におけるS1603の処理と同様の処理を行うことで、対応するレコードを2ndTableCache310に生成してもよい。
また、以上の説明においては、第1階層目のテーブルのレコード数と第2階層目のテーブルのレコード数との両方を変更するものとして説明したが、どちらか一方のテーブルのレコード数のみ変更してもよい。即ち、メモリシステム1が対応情報として記憶する情報のうち、論理アドレスおよび物理アドレスのうちの少なくとも一つを含む情報が、本実施形態において数の変更の対象であるレコードの概念の範疇に含まれる。
また、処理部は、アドレス更新処理を実行する場合、当該アドレス更新処理内の処理として、第2階層目のテーブルのレコードを生成し、第1フラグを下ろす(S1605)。なお、処理部は、アドレス解決処理を実行する場合に、第2階層目のテーブルのレコードを生成してもよい。
また、処理部は、各クラスタについて、UNMAP状態であるか非UNMAP状態であるかを管理する。ここでは、処理部は、各クラスタがUNMAP状態であるか非UNMAP状態であるかの管理を、2ndTable204の各データ項目に「UNMAP」または第3アドレスの何れかを設定することによって実現する。処理部は、各クラスタがUNMAP状態であるか非UNMAP状態であるかを、2ndTable204とは異なる情報に記録してもよい。
また、処理部は、メモリシステム1の制御中に、ユーザガベージコレクションを断続的に実行する。処理部は、ギア比がギア比情報313から求まる設定値と等しくなるように、ユーザガベージコレクションの実行を制御する。また、処理部は、フリーブロック数および表記容量のうちの少なくとも一つに基づいてギア比の設定値を、動的に制御する。具体的には、処理部は、表記容量設定値305およびフリーブロック数を監視する(S1913)。処理部は、表記容量設定値305およびフリーブロック数を、図17および図18によって説明されるギア比情報313に適用することによって、ギア比の設定値を演算し、適用する(S1914)。そして、処理部は、ギア比が設定値に等しくなるように、ユーザガベージコレクションの実行を調整する。
フリーブロック数とギア比の設定値との関係は、任意に規定される。例えば、フリーブロック数が第1値である場合には、フリーブロック数が第1値よりも大きい第2値である場合に比べて、ギア比の設定値が大きくなるように、フリーブロック数とギア比の設定値との関係が予め規定される。
また、表記容量とギア比の設定値との関係は、任意に規定される。例えば、表記容量が第3値である場合には、表記容量が第3値よりも大きい第4値である場合に比べ、ギア比の設定値が大きくなるように、表記容量とギア比の設定値との関係が予め規定される。または、余裕率が第5値である場合には、余裕率が第5値よりも大きい第6値である場合に比べ、ギア比の設定値が大きくなるように、余裕率とギア比の設定値との関係が予め規定される。なお、余裕率とは、余裕容量を表記容量で除算して得られる値である。
なお、処理部は、LUTガベージコレクションに関してもギア比の制御を行ってもよい。
また、処理部は、ホスト2からのUNMAP要求に応じたリージョン単位のUNMAP処理を、UNMAP要求を受信した後に直ちに開始せずに、アドレス解決処理、アドレス更新処理、削減処理、または、ユーザガベージコレクション、の何れかの処理の一環として実行する、として説明した。処理部は、ホスト2からのUNMAP要求に応じたリージョン単位のUNMAP処理を、UNMAP要求を受信した後に直ちに実行してもよい。
また、1stNV309はパワーオンシーケンスにおいて復元される、として説明した。1stNV309は、パワーオフシーケンスにおいてRAM30からシステム領域27に退避され、パワーオンシーケンスにおいてシステム領域27からRAM30にロードされてもよい。その場合には、LUTログ202の管理は不要である。
また、処理部は増加処理時にサイズ変更ログ202bを記録し、削減処理時にサイズ変更ログ202bを記録しない、として説明したが、処理部は増加処理時および削減処理時の何れの場合においてもサイズ変更ログ202bを記録してもよい。処理部が増加処理時および削減処理時の何れの場合においてもサイズ変更ログ202bを記録する場合には、LUTログ202のみに基づいて1stNV309の復元が可能となるので、パワーオフシーケンスにおけるテーブル長設定値306の退避は不要である。
(第2の実施形態)
図30及び図31は、第2の実施形態の削減処理を説明するフローチャートである。第2の実施形態においては、削減処理は、ホスト2に対する応答処理(フォアグラウンド処理)と、応答処理の後の内部処理(バックグラウンド処理)とに分割される。図30はフォアグラウンド処理を説明するフローチャートであり、図31はバックグラウンド処理を説明するフローチャートである。ここでは、説明を簡単にするために、1つのリージョンのサイズだけ表記容量を削減する処理を説明する。
処理部は、ホスト2から表記容量削減要求を受信すると(S2201)、削除対象のリージョンを特定する(S2202)。図30および図31の説明においては、S2202の処理によって特定された削除対象のリージョンを、対象リージョンと表記する。
続いて、処理部は、1stNV309およびUNMAP予約テーブル307を参照することによって、対象リージョンについて第1フラグおよび第2フラグの何れかが立っているか否かを判定する(S2203)。対象リージョンについて第1フラグおよび第2フラグの何れも立っていない場合(S2203、No)、処理部は、対象リージョンについて第2フラグを立て(S2204)、表記容量設定値305を更新する(S2205)。そして、処理部は、削減完了をホスト2に通知する(S2206)。S2206の処理の後、処理部は、フォアグラウンド処理を終了する。対象リージョンについて第1フラグおよび第2フラグの何れかが立っている場合(S2203、Yes)、処理部は、S2204の処理をスキップする。
バックグラウンド処理においては、処理部は、UNMAP予約テーブル307を参照することによって、対象リージョンについて第2フラグが立っているか否かを判定する(S2301)。対象リージョンについて第2フラグが立っている場合(S2301、Yes)、処理部は、1stV308を参照することによって、対象リージョンがキャッシュされているか否かを判定する(S2302)。対象リージョンがキャッシュされていない場合(S2302、No)、処理部は、1stNV309を参照することによって、対象リージョンのレコードのNANDメモリ20上における格納位置を示すポインタを取得する(S2303)。そして、処理部は、対象リージョンのレコードを、取得したポインタが示す位置から2ndTableCache310に読み出す(S2304)。処理部は、S2304の処理による2ndTableCache310の更新に応じて、1stV308に対象リージョンのレコードがキャッシュされている位置を示すポインタを記録する(S2305)。
対象リージョンがキャッシュされている場合(S2302、Yes)、または、S2305の処理の後、処理部は、対象リージョンに対してリージョンUNMAP処理を実行する(S2306)。
対象リージョンについて第2フラグが立っていない場合(S2301、No)、または、S2306の処理の後、処理部は、テーブル長設定値306を更新する(S2307)。そして、処理部は、LUTブロック数設定値314を更新し(S2308)、バックグラウンド処理を終了する。
このように、第2の実施形態においては、メモリシステム1が表記容量削減要求を受信した場合、処理部は、削除対象のリージョンに非UNMAP状態のクラスタが存在するか否かを判定する前に、削除対象のリージョンに関して第2フラグを立て、削除完了をホスト2に通知する。処理部は、削除完了の通知後、第2フラグが立てられた状態の削除対象のリージョンについて、UNMAP処理を実行し、その後、削除対象のリージョンのレコードの削除を実行する。第2の実施形態によれば、メモリシステム1は、削除完了の通知を、第1の実施形態に比べて早く送信することができる。
(第3の実施形態)
第3の実施形態においては、処理部は、第1アドレスの空間における所定サイズの記憶領域毎に、非UNMAP状態のクラスタ数を管理する。非UNMAP状態のクラスタ数の管理単位は、リージョン単位であってもよいしリージョン単位でなくてもよい。ここでは一例として、処理部は、非UNMAP状態のクラスタ数を1024個のリージョンからなる領域(リージョングループ)毎に管理する。
処理部は、第2クラスタカウンタを管理する。図32は、第2クラスタカウンタのデータ構造例を示す図である。図示するように、第2クラスタカウンタ315は、リージョングループ毎に、非UNMAP状態のクラスタ数が記録されている。処理部は、第2クラスタカウンタ315を、RAM30に格納し、RAM30に格納された第2クラスタカウンタ315を参照したり更新したりする。処理部は、第2クラスタカウンタ315を、パワーオフシーケンスにおいてRAM30からシステム領域27に退避し、パワーオンシーケンスにおいてシステム領域27からRAM30にロードする。
処理部は、第2クラスタカウンタ315を次に説明するように更新する。処理部は、2ndTableCache310において、UNMAP状態のクラスタに第3アドレスを設定する場合に、当該クラスタが属するリージョングループについて第2クラスタカウンタ315に記録されている値をインクリメントする。また、処理部は、2ndTableCache310において、第3アドレスが設定されたクラスタに「UNMAP」を設定する場合に、当該クラスタが属するリージョングループについて第2クラスタカウンタ315に記録されている値をデクリメントする。また、処理部は、2ndTableCache310において、第3アドレスが設定されたクラスタに別の第3アドレスを設定する場合に、第2クラスタカウンタ315の更新は行わない。また、処理部は、2ndTableCache310において、「UNMAP」が設定されたクラスタに「UNMAP」を設定した際に、第2クラスタカウンタ315の更新は行わない。
処理部は、削減処理の際に第2クラスタカウンタ315を参照する。表記容量削減要求によってリージョングループ単位の削除が要求された場合、処理部は、第1フラグの確認(S2003)を行う前に、第2クラスタカウンタ315を参照することによって、削除対象のリージョングループに非UNMAP状態のクラスタが存在するか否かを判定する。削除対象のリージョングループに非UNMAP状態のクラスタが存在しない場合には、第1フラグが立てられていない場合のクラスタ単位の確認(S2010)を行うことなく削除対象のリージョングループに非UNMAP状態のクラスタが存在しないことの確認が完了するので、第1の実施形態よりも削除対象のリージョングループに非UNMAP状態のクラスタが存在しないことの確認が高速に実行される。
なお、処理部は、リージョン単位またはクラスタ単位の削除が要求された場合であっても、第2クラスタカウンタ315を参照することによって削除対象のリージョングループに非UNMAP状態のクラスタが存在しないことの確認を行ってもよい。
(第4の実施形態)
図33は、メモリシステム1の実装例を示す図である。メモリシステム1は、例えばサーバシステム1000に実装される。サーバシステム1000は、ディスクアレイ2000とラックマウントサーバ3000とが通信インタフェース4000によって接続されて構成される。通信インタフェース4000の規格としては任意の規格が採用可能である。ラックマウントサーバ3000は、サーバラックに1以上のホスト2がマウントされて構成される。複数のホスト2は、通信インタフェース4000を介してディスクアレイ2000にアクセスすることができる。
また、ディスクアレイ2000は、サーバラックに1以上のメモリシステム1と1以上のハードディスクユニット4とがマウントされて構成される。各メモリシステム1は、各ホスト2からのリードコマンドを実行することができる。また、各メモリシステム1は、第1〜第3の実施形態が採用された構成を有している。これにより、各メモリシステム1は、複数のホスト2の何れかから表記容量を変更する要求が発行された場合、動的に表記容量を変更することが可能である。
なお、ディスクアレイ2000においては、例えば、各メモリシステム1は、1以上のハードディスクユニット4のキャッシュとして使用されてもよい。ディスクアレイ2000は、1以上のハードディスクユニット4にRAIDを構築するストレージコントローラユニットがマウントされてもよい。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
1 メモリシステム、2 ホスト、3 通信路、10 メモリコントローラ、20 NANDメモリ、27 システム領域、28 available領域、29 LUTブロック領域、202 LUTログ、202a 内容変更ログ、202b サイズ変更ログ、203 ユーザログ、204 2ndTable、205 ユーザデータ、301 物理ブロック情報、302 LUTブロック情報、303 LUTアクティブブロックリスト、304 第1クラスタカウンタ、305 表記容量設定値、306 テーブル長設定値、307 UNMAP予約テーブル、308 1stV、309 1stNV、310 2ndTableCache、311 逆引きテーブル、312 ダーティリスト、313 ギア比情報、314 LUTブロック数設定値、315 第2クラスタカウンタ、1000 サーバシステム、2000 ディスクアレイ、3000 ラックマウントサーバ。

Claims (21)

  1. 外部のホストに接続可能なメモリシステムであって、
    前記ホストから受信したデータが格納される第1記憶領域を備える不揮発性の第1記憶装置と、
    当該第1記憶装置に対し、データの書き込みおよびデータの読み出しの制御を行うコントローラと、
    を備え、
    前記第1記憶領域は、前記メモリシステムの論理アドレス空間のサイズである第1サイズより大きい第2サイズを有し、
    前記コントローラは、前記第1サイズを変更する要求を前記ホストから受信し、前記要求に応じて、前記論理アドレス空間のうちの少なくとも一部のデータを有効な状態に保ちながら前記第1サイズを変更する、
    ことを特徴とするメモリシステム。
  2. 前記論理アドレス空間内の論理アドレスと前記第1記憶領域内の物理アドレスとを対応付ける1以上のレコード、を備える第1対応情報が格納される第2記憶領域を備える第2記憶装置をさらに備え、
    前記コントローラは、前記要求に応じて前記第1対応情報が備えるレコードの数を変更する、
    ことを特徴とする請求項1に記載のメモリシステム。
  3. 前記第1対応情報は、1以上の第2レコードを備える第2対応情報と、物理アドレスが記録される1以上の第3対応情報とを含み、前記第2レコードは論理アドレスと前記1以上の第3対応情報のうちの対応する一つをポイントするポインタとを対応付ける情報であり、
    前記コントローラは、前記要求に応じて前記第2対応情報が備える第2レコードの数を変更する、
    ことを特徴とする請求項2に記載のメモリシステム。
  4. 前記第2対応情報は、前記論理アドレス空間に含まれる第1単位領域毎に前記第2レコードを含み、
    前記第3対応情報は、夫々前記第1単位領域よりも小さい第2単位領域毎の物理アドレスである複数の物理アドレスが記録される、
    ことを特徴とする請求項3に記載のメモリシステム。
  5. 前記コントローラは、前記第1サイズを増加する要求である第1要求に応じて前記第2対応情報に、前記第1サイズの増加に応じて追加される第1論理アドレス空間に対応する第2レコードである第3レコードを追加し、
    前記第1サイズを削減する要求である第2要求に応じて前記第2対応情報から、前記第1サイズの削減に応じて削減される第2論理アドレス空間に対応する第2レコードである第4レコードを削除する、
    ことを特徴とする請求項4に記載のメモリシステム。
  6. 前記コントローラは、
    前記論理アドレス空間内の前記第2単位領域の状態が、前記第1状態は論理アドレスが何れかの物理アドレスに対応付けられている状態である第1状態であるか、前記第2状態は論理アドレスが何れの物理アドレスにも対応付けられていない状態である第2状態であるか、を参照し、
    前記第2要求を受信した場合、状態が前記第1状態である第2単位領域である第3単位領域が前記第2論理アドレス空間に存在するか否かを判定し、前記第2論理アドレス空間に前記第3単位領域が存在する場合、前記ホストに警告する、
    ことを特徴とする請求項5に記載のメモリシステム。
  7. 前記コントローラは、前記ホストに警告した後に許可を受信した場合、前記第4レコードを削除する、ことを特徴とする請求項6に記載のメモリシステム。
  8. 前記コントローラは、前記ホストに警告した後に前記許可を受信しない場合、前記第4レコードを削除しない、ことを特徴とする請求項7に記載のメモリシステム。
  9. 前記コントローラは、
    前記論理アドレス空間内の前記第2単位領域の状態が、論理アドレスが何れかの物理アドレスに対応付けられている状態である第1状態であるか、論理アドレスが何れの物理アドレスにも対応付けられていない状態である第2状態であるか、を参照し、
    前記第2要求を受信した場合、状態が前記第1状態である第2単位領域である第3単位領域が前記第2論理アドレス空間に存在するか否かを判定し、前記第2論理アドレス空間に前記第3単位領域が存在する場合、前記第4レコードを削除しない、
    ことを特徴とする請求項5に記載のメモリシステム。
  10. 前記コントローラは、
    前記論理アドレス空間内の前記第2単位領域の状態が、論理アドレスが何れかの物理アドレスに対応付けられている状態である第1状態であるか、論理アドレスが何れの物理アドレスにも対応付けられていない状態である第2状態であるか、を参照し、
    前記第2要求を受信した場合、状態が前記第1状態である第2単位領域である第3単位領域が前記第2論理アドレス空間に存在するか否かを判定し、
    前記第2論理アドレス空間に前記第3単位領域が存在する場合、前記第3単位領域に関する第3対応情報に状態が前記第2状態であることを示す情報を記述し、前記第4レコードを削除し、
    前記第2論理アドレス空間に前記第3単位領域が存在しない場合、前記第3単位領域に関する第3対応情報を更新しないで前記第4レコードを削除する、
    ことを特徴とする請求項5に記載のメモリシステム。
  11. 前記コントローラは、
    第1単位領域毎に第2フラグを更新し、
    前記第2要求を受信した場合、前記第2論理アドレス空間に前記第3単位領域が存在するか否かの判定を実行する前に、前記第2論理アドレス空間に含まれる第1単位領域の第2フラグを立て、前記第2フラグを立てた後、前記受信した第2要求に対する完了応答を前記ホストに通知し、
    前記完了応答の通知後、前記判定を、前記第2フラグが立てられた第1単位領域に対して開始する、
    ことを特徴とする請求項7に記載のメモリシステム。
  12. 前記第1記憶領域は、複数のブロックを備え、
    前記コントローラは、
    前記ホストからのデータを順次、前記複数のブロックのうちの空き領域を有するブロックである第1ブロックの前記空き領域に書き込み、
    夫々同一の第1論理アドレスの指定を伴う2つのデータが前記第1記憶領域に記憶され、かつ、前記2つのデータは夫々異なる物理アドレスが示す位置に記憶される場合、前記2つのデータのうちの前記第1対応情報によって前記第1論理アドレスに対応付けられている物理アドレスが示す位置に記憶されるデータを有効なデータとして扱い、前記2つのデータのうちの前記対応情報によって前記第1論理アドレスに対応付けられていない物理アドレスが示す位置に記憶されるデータを無効なデータとして扱い、
    前記複数のブロックから第2ブロックを選択し、前記第2ブロックに記憶されるデータのうちの有効なデータを前記複数のブロックのうちの空き領域を有するブロックである第3ブロックの前記空き領域にコピーし、前記第2ブロックをフリーブロックとして設定する、ガベージコレクションを実行し、
    前記ガベージコレクションの後、前記フリーブロックに記憶される全データを消去し、
    前記フリーブロックの数と前記第1サイズと前記第2サイズとに応じて、前記ホストからのデータの前記第1ブロックへの書き込み量に対する前記ガベージコレクションによるデータの前記第3ブロックへの書き込み量の比率を制御する、
    ことを特徴とする請求項5に記載のメモリシステム。
  13. 前記コントローラは、
    前記フリーブロックの数が第1値である場合には、前記フリーブロックの数が前記第1値よりも大きい第2値である場合に比べ、前記比率を増加させる、
    ことを特徴とする請求項12に記載のメモリシステム。
  14. 前記コントローラは、前記第1サイズが第3値である場合には、前記第1サイズが前記第3値よりも小さい第4値である場合に比べ、前記比率を増加させる、
    ことを特徴とする請求項13に記載のメモリシステム。
  15. 前記コントローラは、
    前記第2サイズから前記第1サイズを減算して得られる値の前記第1サイズに対するパーセンテージが第3値である場合には、前記パーセンテージが前記第3値よりも大きい第4値である場合に比べ、前記比率を増加させる、
    ことを特徴とする請求項13に記載のメモリシステム。
  16. 前記コントローラは、ブロック毎に有効なデータのカウント値を管理し、前記複数のブロックのうちから前記有効なデータの数が最小のブロックを前記第2ブロックとして選択する、
    ことを特徴とする請求項12から請求項15の何れか1項に記載のメモリシステム。
  17. 前記コントローラは、
    前記論理アドレス空間内の前記第2単位領域の状態が、論理アドレスが何れかの物理アドレスに対応付けられている状態である第1状態であるか、論理アドレスが何れの物理アドレスにも対応付けられていない状態である第2状態であるか、を参照し、
    前記第2要求を受信した場合、状態が前記第1状態である第2単位領域である第3単位領域が前記第2論理アドレス空間に存在するか否かを判定し、
    前記第2論理アドレス空間に第3単位領域が存在する場合、前記第1対応情報を参照することによって前記第3単位領域を示す論理アドレス、に対応する物理アドレスを取得し、前記複数のブロックのうちの前記取得された物理アドレスを含むブロックについて前記カウント値をデクリメントし、前記第4レコードを削除する、
    ことを特徴とする請求項16に記載のメモリシステム。
  18. 前記第1対応情報は、前記レコードを前記論理アドレス空間に含まれる単位領域毎に備え、
    前記コントローラは、前記第1サイズを増加する要求である第1要求に応じて前記第1対応情報が備えるレコードの数を増やし、前記第1サイズを削減する要求である第2要求に応じて前記第1対応情報が備えるレコードの数を削減する、
    ことを特徴とする請求項2から請求項4の何れか1項に記載のメモリシステム。
  19. 前記第2対応情報は、第2レコード毎に第1フラグを備え、
    前記コントローラは、
    前記第3レコードを前記第2対応情報に追加し、
    前記追加した第3レコードの第1フラグを立て、
    前記第1論理アドレス空間に対するアクセスを行う場合、前記アクセスの宛先の物理アドレスを記録した新規の第3対応情報を生成し、前記第3レコードに前記新規の第3対応情報をポイントするポインタを記録し、前記第3レコードの第1フラグを下ろす、
    ことを特徴とする請求項5に記載のメモリシステム。
  20. 前記コントローラは、前記ホストに警告した後、前記第4レコードを削除する、
    ことを特徴とする請求項8に記載のメモリシステム。
  21. ホストからのデータを記憶する第1記憶領域と、コントローラとを備え、
    前記第1記憶領域のサイズは、第1サイズより大きい第2サイズであり、
    前記第1サイズは、前記ホストがメモリシステムに割り当てる論理アドレス空間、のサイズであり、
    前記コントローラは、前記論理アドレス空間のうちの少なくとも一部のデータの管理を有効な状態に保ちながら、前記ホストからの要求に応じて前記第1サイズを変更する、ことを特徴とするメモリシステム。
JP2016011078A 2015-01-23 2016-01-22 メモリシステム Active JP6388345B2 (ja)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201562106989P 2015-01-23 2015-01-23
US62/106,989 2015-01-23
US14/852,182 US9891825B2 (en) 2015-01-23 2015-09-11 Memory system of increasing and decreasing first user capacity that is smaller than a second physical capacity
US14/852,182 2015-09-11

Publications (2)

Publication Number Publication Date
JP2016136393A true JP2016136393A (ja) 2016-07-28
JP6388345B2 JP6388345B2 (ja) 2018-09-12

Family

ID=56432577

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016011078A Active JP6388345B2 (ja) 2015-01-23 2016-01-22 メモリシステム

Country Status (2)

Country Link
US (1) US9891825B2 (ja)
JP (1) JP6388345B2 (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018156600A (ja) * 2017-03-21 2018-10-04 東芝メモリ株式会社 メモリシステムおよび制御方法
KR20190067921A (ko) * 2016-11-08 2019-06-17 마이크론 테크놀로지, 인크 데이터에 대한 메모리 동작
CN110647475A (zh) * 2018-06-26 2020-01-03 三星电子株式会社 存储装置和包括存储装置的存储***
JP2021064333A (ja) * 2019-10-17 2021-04-22 キオクシア株式会社 メモリシステムおよびガベッジコレクション制御方法
JP2021121901A (ja) * 2020-01-31 2021-08-26 キオクシア株式会社 メモリシステムおよび制御方法

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10754587B2 (en) * 2015-03-20 2020-08-25 Burlywood, Inc. Memory partitioning storage controller
TWI615710B (zh) * 2016-12-14 2018-02-21 群聯電子股份有限公司 記憶體管理方法、記憶體儲存裝置及記憶體控制電路單元
KR102200247B1 (ko) * 2017-03-27 2021-01-08 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작방법
JP7030463B2 (ja) * 2017-09-22 2022-03-07 キオクシア株式会社 メモリシステム
KR20190092941A (ko) * 2018-01-31 2019-08-08 에스케이하이닉스 주식회사 메모리 장치, 이를 포함하는 메모리 시스템 및 메모리 시스템의 동작 방법
US10719387B2 (en) * 2018-04-25 2020-07-21 Oracle International Corporation Memory interface with tamper-evident features to enhance software security
CN111857547B (zh) * 2019-04-29 2024-05-24 伊姆西Ip控股有限责任公司 用于管理数据存储的方法、设备和计算机可读介质
US11372767B2 (en) * 2020-10-29 2022-06-28 EMC IP Holding Company LLC Selectively processing storage commands at different granularities based on command types

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08263231A (ja) * 1995-03-22 1996-10-11 Fujitsu Ltd 半導体ディスク制御装置及びその制御方法
JP2008102900A (ja) * 2006-10-19 2008-05-01 Samsung Electronics Co Ltd メモリ装置内のアドレッシング可能な空間を再配置させる方法及び装置
JP2011192260A (ja) * 2010-02-16 2011-09-29 Toshiba Corp 半導体記憶装置
WO2014101086A1 (zh) * 2012-12-28 2014-07-03 华为技术有限公司 存储空间的处理方法、装置及非易失性计算机可读存储介质

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5570406B2 (ja) 2010-12-14 2014-08-13 株式会社日立製作所 メモリコントローラ、及びデータ記録装置
JP5295286B2 (ja) 2011-02-23 2013-09-18 株式会社日立製作所 記憶装置およびそれを搭載した計算機
JP2013149112A (ja) 2012-01-20 2013-08-01 Hitachi Ltd 記憶媒体の管理方法
JP2013200741A (ja) 2012-03-26 2013-10-03 Toshiba Corp 半導体記憶装置、その制御方法及び情報処理装置
US8924636B2 (en) 2012-02-23 2014-12-30 Kabushiki Kaisha Toshiba Management information generating method, logical block constructing method, and semiconductor memory device
JP2013206307A (ja) 2012-03-29 2013-10-07 Toshiba Corp メモリ制御装置、データ記憶装置及びメモリ制御方法
US9804960B2 (en) * 2013-03-14 2017-10-31 Western Digital Technologies, Inc. Overprovision capacity in a data storage device
US9563362B2 (en) * 2014-09-02 2017-02-07 Sandisk Technologies Llc Host system and process to reduce declared capacity of a storage device by trimming

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08263231A (ja) * 1995-03-22 1996-10-11 Fujitsu Ltd 半導体ディスク制御装置及びその制御方法
JP2008102900A (ja) * 2006-10-19 2008-05-01 Samsung Electronics Co Ltd メモリ装置内のアドレッシング可能な空間を再配置させる方法及び装置
JP2011192260A (ja) * 2010-02-16 2011-09-29 Toshiba Corp 半導体記憶装置
WO2014101086A1 (zh) * 2012-12-28 2014-07-03 华为技术有限公司 存储空间的处理方法、装置及非易失性计算机可读存储介质

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190067921A (ko) * 2016-11-08 2019-06-17 마이크론 테크놀로지, 인크 데이터에 대한 메모리 동작
KR102271117B1 (ko) 2016-11-08 2021-07-01 마이크론 테크놀로지, 인크 데이터에 대한 메모리 동작
JP2018156600A (ja) * 2017-03-21 2018-10-04 東芝メモリ株式会社 メモリシステムおよび制御方法
CN110647475A (zh) * 2018-06-26 2020-01-03 三星电子株式会社 存储装置和包括存储装置的存储***
CN110647475B (zh) * 2018-06-26 2023-07-21 三星电子株式会社 存储装置和包括存储装置的存储***
JP2021064333A (ja) * 2019-10-17 2021-04-22 キオクシア株式会社 メモリシステムおよびガベッジコレクション制御方法
US11853204B2 (en) 2019-10-17 2023-12-26 Kioxia Corporation Memory system and garbage collection control method
JP7467064B2 (ja) 2019-10-17 2024-04-15 キオクシア株式会社 メモリシステムおよびガベッジコレクション制御方法
JP2021121901A (ja) * 2020-01-31 2021-08-26 キオクシア株式会社 メモリシステムおよび制御方法

Also Published As

Publication number Publication date
JP6388345B2 (ja) 2018-09-12
US9891825B2 (en) 2018-02-13
US20160216894A1 (en) 2016-07-28

Similar Documents

Publication Publication Date Title
JP6388345B2 (ja) メモリシステム
US11977481B2 (en) Controller for controlling non-volatile semiconductor memory and method of controlling non-volatile semiconductor memory
CN107391391B (zh) 在固态硬盘的ftl实现数据拷贝的方法、***及固态硬盘
JP5320678B2 (ja) データ分散格納システム及びデータ分散方法、それに用いる装置並びにそのプログラム
KR102042643B1 (ko) 비휘발성 메모리(nvm)에서 다중 네임스페이스 관리
KR101257691B1 (ko) 메모리 컨트롤러 및 이의 데이터 관리방법
US8615640B2 (en) System and method to efficiently schedule and/or commit write data to flash based SSDs attached to an array controller
JP5543026B2 (ja) ストレージシステムおよびそのデータ制御方法
US20130124794A1 (en) Logical to physical address mapping in storage systems comprising solid state memory devices
KR20180017148A (ko) 스토리지 시스템, 스토리지 관리 디바이스, 스토리지 디바이스, 하이브리드 스토리지 디바이스, 및 스토리지 관리 방법
JP6398102B2 (ja) メモリシステム
WO2010086900A1 (en) Storage system and storage control method that compress and store data elements
WO2016135955A1 (ja) 不揮発性メモリデバイス
JP2019079463A (ja) メモリシステムおよび制御方法
KR101297442B1 (ko) 공간 지역성을 고려한 요구 기반 플래시 메모리 변환 계층을 포함하는 낸드 플래시 메모리 시스템
US8862819B2 (en) Log structure array
KR20100089229A (ko) 플래시 메모리의 주소 매핑에 의한 데이터 관리 방법 및 장치
WO2014106871A1 (en) Storage system which realizes asynchronous remote copy using cache memory composed of flash memory, and control method thereof
KR20100115090A (ko) 버퍼를 고려한 가비지 컬렉션 기법
US11237979B2 (en) Method for management of multi-core solid state drive
KR101017067B1 (ko) 낸드 플래시 메모리를 위한 지역성 기반의 가비지 컬렉션기법
JP2011022933A (ja) メモリ管理装置を含む情報処理装置及びメモリ管理方法
CN113360082B (zh) 存储***及其控制方法
CN102117262B (zh) 用于多核处理器的Cache的主动复制方法及***
KR101153688B1 (ko) 데이터 페이지들에 대해 무효화 기회를 부여하는 방법 및 이를 위한 낸드 플래시 메모리 시스템

Legal Events

Date Code Title Description
A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20170605

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170804

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180620

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180626

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180704

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20180717

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180809

R150 Certificate of patent or registration of utility model

Ref document number: 6388345

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350