(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024000843
(43)【公開日】2024-01-09
(54)【発明の名称】メモリシステム
(51)【国際特許分類】
G06F 12/00 20060101AFI20231226BHJP
【FI】
G06F12/00 560B
G06F12/00 550Z
G06F12/00 597U
【審査請求】未請求
【請求項の数】13
【出願形態】OL
(21)【出願番号】P 2022099789
(22)【出願日】2022-06-21
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110000408
【氏名又は名称】弁理士法人高橋・林アンドパートナーズ
(72)【発明者】
【氏名】福田 晃史
(72)【発明者】
【氏名】安福 健太
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160CB01
5B160NA03
(57)【要約】
【課題】コストの上昇を抑制しつつ、処理速度を向上させること。
【解決手段】メモリシステムは、不揮発性メモリと、前記不揮発性メモリへの書き込み動作及び読み出し動作を制御するメモリコントローラと、を備える。前記メモリコントローラは、前記不揮発性メモリに対してウェアレベリング処理が実行された履歴を示すウェアレベリング履歴が格納されたウェアレベリング履歴テーブルと、前記不揮発性メモリに書き込む情報又は前記不揮発性メモリから読み出した情報を一時的に格納するバッファと、を含む。前記メモリコントローラは、前記ウェアレベリング履歴テーブルに基づいて、前記バッファに格納されたデータを一時的に固定するピニング処理を実行するデータを決定する。
【選択図】
図2
【特許請求の範囲】
【請求項1】
不揮発性メモリと、
前記不揮発性メモリへの書き込み動作及び読み出し動作を制御するメモリコントローラと、を備え、
前記メモリコントローラは、
前記不揮発性メモリに対してウェアレベリング処理が実行された履歴を示すウェアレベリング履歴が格納されたウェアレベリング履歴テーブルと、
前記不揮発性メモリに書き込む情報又は前記不揮発性メモリから読み出した情報を一時的に格納するバッファと、を含み、
前記ウェアレベリング履歴テーブルに基づいて、前記バッファに格納されたデータを一時的に固定するピニング処理を実行するデータを決定するメモリシステム。
【請求項2】
前記バッファは、それぞれ個別に設けられた第1バッファ及び第2バッファを含み、
前記第2バッファには、前記ピニング処理が実行されるデータが格納され、
前記第1バッファには、前記ピニング処理の対象外のデータが格納される、請求項1に記載のメモリシステム。
【請求項3】
前記メモリコントローラは、
前記第1ウェアレベリング処理を実行し、
前記第1ウェアレベリング処理の実行に基づいて前記ウェアレベリング履歴テーブルに前記第1ウェアレベリング処理に係る第1ウェアレベリング履歴を追加する更新を行い、
前記第1ウェアレベリング履歴が、前記第1ウェアレベリング処理より前に実行されたN回の第2ウェアレベリング処理に係るN個の第2ウェアレベリング履歴のいずれかと同じ場合(Nは自然数)、前記第2バッファに、前記第1ウェアレベリング処理が実行された対象のデータを格納する、請求項2に記載のメモリシステム。
【請求項4】
前記メモリコントローラは、
前記第1ウェアレベリング履歴が、N個の前記第2ウェアレベリング履歴のいずれかと同じ場合、前記第2バッファに新たなデータを格納する容量があるか否かを判断し、
前記第2バッファに新たなデータを格納する容量がないと判断した場合、前記第2バッファに格納された既存のデータを前記第1ウェアレベリング処理が実行された対象のデータに置き換える、請求項3に記載のメモリシステム。
【請求項5】
前記メモリコントローラは、前記ピニング処理を実行するデータ数を変更可能である、請求項1に記載のメモリシステム。
【請求項6】
前記メモリコントローラは、
アドレスリストをさらに含み、
前記ウェアレベリング履歴テーブルに基づいて、前記ピニング処理を実行する対象のアドレスを前記アドレスリストに格納し、
前記アドレスリストに基づいて前記ピニング処理を実行する、請求項5に記載のメモリシステム。
【請求項7】
前記メモリコントローラは、
前記第1ウェアレベリング処理を実行し、
前記第1ウェアレベリング処理の実行に基づいて前記ウェアレベリング履歴テーブルに前記第1ウェアレベリング処理に係る第1ウェアレベリング履歴を追加する更新を行い、
前記第1ウェアレベリング履歴が、前記第1ウェアレベリング処理より前に実行されたN回の第2ウェアレベリング処理に係るN個の第2ウェアレベリング履歴のいずれかと同じ場合(Nは自然数)、前記ウェアレベリング履歴テーブルに基づいて、前記ピニング処理を実行する対象のアドレスを前記アドレスリストに格納する、請求項6に記載のメモリシステム。
【請求項8】
前記メモリコントローラは、
ホストからの要求に応じた前記バッファへ書き込み動作又は前記バッファからの読み出し動作に関する統計情報を取得する統計情報取得部を有し、
前記統計情報に基づいて、前記ピニング処理を解除する、請求項7に記載のメモリシステム。
【請求項9】
前記ウェアレベリング履歴テーブルは、前記第1ウェアレベリング処理と前記第2ウェアレベリング処理との時間を示す時間情報を含み、
前記メモリコントローラは、前記第1ウェアレベリング履歴に係るアドレスが、N個の前記第2ウェアレベリング履歴に係るアドレスのいずれかと同じ場合(Nは自然数)、前記時間情報に基づいて、前記ピニング処理を実行する対象のアドレスを前記アドレスリストに格納する、請求項7に記載のメモリシステム。
【請求項10】
前記ウェアレベリング履歴テーブルには、前記不揮発性メモリの物理アドレスが格納され、
前記メモリコントローラは、ウェアレベリング処理を実行した後に前記物理アドレスの更新を行う、請求項1に記載のメモリシステム。
【請求項11】
前記バッファは、読み出し動作用のリードバッファと、書き込み動作用のライトバッファと、をさらに含み、
メモリコントローラは、ホストから書き込み要求があった場合に、
書き込み対象のデータが、前記ライトバッファに格納されておらず、前記第2バッファに格納されている場合、前記第2バッファのエントリを更新し、
書き込み対象のデータが、前記ライトバッファ及び前記第2バッファの両方に格納されていない場合、前記リードバッファに書き込み対象のデータが格納されているか否かを確認する、請求項2に記載のメモリシステム。
【請求項12】
前記バッファは、読み出し動作用のリードバッファと、書き込み動作用のライトバッファと、をさらに含み、
メモリコントローラは、ホストから読み出し要求があった場合に、
読み出し対象のデータが、前記ライトバッファ及び前記リードバッファの両方に格納されておらず、前記第2バッファに格納されている場合、前記第2バッファのデータを読み出し対象のデータとして出力し、
読み出し対象のデータが、前記ライトバッファ及び前記リードバッファの両方に格納されておらず、前記第2バッファにも格納されていない場合、前記不揮発性メモリから読み出したデータを、前記バッファに書き込み、読み出し対象のデータとして出力する、請求項2に記載のメモリシステム。
【請求項13】
前記メモリコントローラは、
前記第1ウェアレベリング履歴が、N個の前記第2ウェアレベリング履歴のいずれかと同じ場合、前記第1ウェアレベリング履歴に係るデータが前記バッファに格納されているか否かを判断し、
前記第1ウェアレベリング履歴に係るデータが前記バッファに格納されている場合、前記第1ウェアレベリング履歴に係るデータに対して前記ピニング処理を実行し、
前記第1ウェアレベリング履歴に係るデータが前記バッファに格納されていない場合、前記ウェアレベリング履歴テーブルに基づいて、前記ピニング処理を実行する対象のアドレスを前記アドレスリストに格納する、請求項7に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示の一実施形態は不揮発性メモリを備えるメモリシステムに関する。
【背景技術】
【0002】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムとして、例えば、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】米国特許第10990537号明細書
【特許文献2】米国特許出願公開第2013/0138870号明細書
【特許文献3】米国特許出願公開第2020/0272538号明細書
【非特許文献】
【0004】
【非特許文献1】野村 隼人, 入江 英嗣, 坂井 修一:「適応型Stubbornキャッシュマネジメント手法の提案」, 情報処理学会論文誌コンピューティングシステム, Vol. 12, No. 3, pp. 76-86, Jul., 2019.
【非特許文献2】H. Nomura, H. Katchi, H. Irie , S. Sakai, ““Stubborn” strategy to mitigate remaining cache misses,” 2016.
【発明の概要】
【発明が解決しようとする課題】
【0005】
本開示は、コストの上昇を抑制しつつ、処理速度を向上させることを目的とする。
【課題を解決するための手段】
【0006】
一実施形態に係るメモリシステムは、不揮発性メモリと、前記不揮発性メモリへの書き込み動作及び読み出し動作を制御するメモリコントローラと、を備える。前記メモリコントローラは、前記不揮発性メモリに対してウェアレベリング処理が実行された履歴を示すウェアレベリング履歴が格納されたウェアレベリング履歴テーブルと、前記不揮発性メモリに書き込む情報又は前記不揮発性メモリから読み出した情報を一時的に格納するバッファと、を含む。前記メモリコントローラは、前記ウェアレベリング履歴テーブルに基づいて、前記バッファに格納されたデータを一時的に固定するピニング処理を実行するデータを決定する。
【図面の簡単な説明】
【0007】
【
図1】一実施形態に係るメモリシステムの全体構成を示すブロック図である。
【
図2】一実施形態に係る不揮発性メモリ及びメモリモジュールの構成を示すブロック図である。
【
図3】一実施形態に係るメモリシステムのピニング処理を示すフローチャートである。
【
図4】一実施形態に係るバッファのデータ構成の一例を示す図である。
【
図5】一実施形態に係るウェアレベリング履歴テーブルのデータ構成の一例を示す図である。
【
図6】一実施形態に係るメモリシステムの書き込み動作を示すフローチャートである。
【
図7】一実施形態に係るメモリシステムの読み出し動作を示すフローチャートである。
【
図8】一実施形態に係る不揮発性メモリ及びメモリモジュールの構成を示すブロック図である。
【
図9】一実施形態に係るメモリシステムのピニング処理を示すフローチャートである。
【
図10】一実施形態に係るメモリシステムのウェアレベリング履歴テーブルの更新処理を示すフローチャートである。
【
図11】一実施形態に係るバッファのデータ構成の一例を示す図である。
【
図12】一実施形態に係るバッファのデータ構成の一例を示す図である。
【
図13】一実施形態に係るバッファのデータ構成の一例を示す図である。
【
図14】一実施形態に係るメモリシステムの書き込み動作を示すフローチャートである。
【
図15】一実施形態の変形例に係るメモリシステムのウェアレベリング履歴テーブルの更新処理を示すフローチャートである。
【
図16】一実施形態に係る不揮発性メモリ及びメモリモジュールの構成を示すブロック図である。
【
図17】一実施形態に係るメモリシステムのウェアレベリング履歴テーブルの更新処理を示すフローチャートである。
【
図18】一実施形態に係る不揮発性メモリ及びメモリモジュールの構成を示すブロック図である。
【
図19】一実施形態に係るメモリシステムのピニング処理を示すフローチャートである。
【
図20】一実施形態に係る不揮発性メモリ及びメモリモジュールの構成を示すブロック図である。
【
図21】一実施形態に係るメモリシステムの書き込み動作を示すフローチャートである。
【
図22】一実施形態に係るメモリシステムの読み出し動作を示すフローチャートである。
【
図23】一実施形態に係るメモリシステムのピニング処理を示すフローチャートである。
【
図24】一実施形態に係るメモリシステムの読み出し動作を示すフローチャートである。
【発明を実施するための形態】
【0008】
以下、実施形態にかかるメモリシステムについて、図面を参照して具体的に説明する。以下の説明において、略同一の機能及び構成を有する構成要素について、同一符号が付されており、必要な場合にのみ重複する説明が行われる。以下に示す各実施形態は、この実施形態の技術的思想を具体化するための装置や方法を例示する。実施形態の技術思想は、後述する構成要素の材質、形状、構造、配置等に限定されない。実施形態の技術的思想は、特許請求の範囲に対して、種々の変更を加えたものであってもよい。
【0009】
以下の各実施形態は、技術的な矛盾が生じない限り、互いに組み合わせることができる。
【0010】
詳細は後述するが、不揮発性メモリ(不揮発性メモリ20)への書き込み動作又は読み出し動作を実行する際に、書き込み対象又は読み出し対象のデータを一時的に格納するバッファ(第1バッファ15)が設けられる。当該バッファは、不揮発性メモリより容量は小さいが、不揮発性メモリに対して高速にデータへのアクセスが可能なキャッシュメモリとして機能する。アクセス頻度が高いデータをバッファに格納し、可能な限りバッファに格納されたデータを出力させることで、処理速度を向上させることができる。
【0011】
バッファの容量は不揮発性メモリの容量より小さいため、不揮発性メモリに記憶される全てのデータを当該バッファによって保持することはできない。したがって、バッファの容量に空きがない状態で新たなデータが追加されると、所定の条件に基づいて、過去に追加されたデータをバッファから追い出す必要があり、追い出されたデータは不揮発性メモリに記憶される。この動作を「追い出し」という。本実施形態では、アクセス頻度が相対的に高いデータに対して追い出しが行われないように、そのようなデータをバッファに一時的に固定する処理(ピニング処理)が行われる。以下の説明において、あるデータについてピニング処理を実行する、という場合、当該データとともに、そのデータが格納されたエントリ番号に対応するその他の情報がバッファに固定される。換言すると、ピニング処理の対象のデータを含むエントリに対して、操作を無効にするフラグが設定される。
【0012】
不揮発性メモリの読み出し動作及び書き込み動作に対する耐性は有限である。したがって、ある特定のメモリセルに対して読み出し動作及び書き込み動作が実行されるにつれて当該メモリセルの電気特性が劣化する。メモリセルの電気特性が劣化すると、当該メモリセルに記憶された情報に誤りが発生する可能性が大きくなる。以下の実施形態において、不揮発性メモリに含まれるメモリセルの電気特性が劣化することを「疲弊」という。メモリセルの電気特性の劣化は、例えば当該メモリセルへの書き込み動作及び読み出し動作が実行された回数に依存する。したがって、この場合、これらの動作が実行された回数を「疲弊情報」という。以下の実施形態では、書き込み動作及び読み出し動作がページ単位で実行されるため、上記の疲弊及び疲弊情報の用語はページを対象として用いられる。
【0013】
「疲弊情報」の定義は、不揮発性メモリの種類によって異なる。例えば、主に書き込み動作で疲弊する不揮発性メモリの場合、対象のページについて書き込み動作が実行された回数が疲弊情報になり得る。一方、主に読み出し動作で疲弊する不揮発性メモリの場合、対象のページについて読み出し動作が実行された回数が疲弊情報になり得る。書き込み動作及び読み出し動作の両方で同程度に疲弊する不揮発性メモリの場合、対象のページについて書き込み動作及び読み出し動作の両方が実行された回数が疲弊情報になり得る。書き込み動作及び読み出し動作に加えて、消去動作によって疲弊する不揮発性メモリの場合、上記の書き込み動作及び読み出し動作に加えて、対象のページについて消去動作が実行された回数が疲弊情報になり得る。
【0014】
例えば、対象のページに設けられたメモリセルが、当該ページに隣接するページに対する読み出し動作及び書き込み動作によって疲弊する場合、対象のページに対する書き込み動作及び読み出し動作が実行された回数に加えて、隣接するページに対する書き込み動作及び読み出し動作が実行された回数が疲弊情報になり得る。
【0015】
不揮発性メモリでは、対象のページに設けられたメモリセルの疲弊によって、当該メモリセルがデータを記憶できなくなる、又は当該メモリセルに記憶されたデータが消失する可能性がある。したがって、書き込み動作及び読み出し動作に応じてメモリセルの疲弊状態について追跡及び管理が行われる。具体的には、ある特定のページへのアクセスが頻発する場合であって、当該ページへのアクセス回数が所定の回数を超えた場合に、メモリセル間の疲弊を平準化するために、それまで当該ページに関連付けられていたメモリセルとは異なるメモリセルに当該ページのデータを記憶させるように、ページとメモリセルとの関連付けを変更する処理が行われる。この処理をウェアレベリング処理という。
【0016】
主に書き込み動作で疲弊する不揮発性メモリの場合、ウェアレベリング処理の実行回数は概ね書き込み動作におけるメモリセル(又はページ)へのアクセス回数に比例する。さらに、ウェアレベリング処理の実行回数は当該アクセス回数に比べて非常に小さい。例えば、ウェアレベリング処理の実行回数は当該アクセス回数の1/1000程度である。したがって、ウェアレベリング処理の履歴情報を、メモリセル(又はページ)へのラフなアクセス履歴として利用することができる。詳細は後述するが、以下の実施形態では、ウェアレベリング処理の履歴情報は、ウェアレベリング処理が実行されたページのアドレスリストを含む。
【0017】
[1.第1実施形態]
[1-1.メモリシステム1の全体構成]
第1実施形態に係るメモリシステムについて説明する。第1実施形態に係るメモリシステム1は、例えば、メモリコントローラ10及び不揮発性メモリ20を含む。メモリコントローラ10は不揮発性メモリ20を制御する。本実施形態において、メモリコントローラ10は、不揮発性メモリ20の読み出し動作及び書き込み動作などの制御を行う機能を有する。不揮発性メモリ20は半導体記憶装置の一例である。
【0018】
図1は、一実施形態に係るメモリシステムの構成を説明するためのブロック図である。
図1に示すように、メモリシステム1は、メモリコントローラ10及び複数のメモリセルを含む不揮発性メモリ20を備える。メモリシステム1は、中央演算処理装置(CPU)90と接続可能であり、CPU90の主記憶装置として機能する。CPU90は、例えば、パーソナルコンピュータ、携帯端末(例えば、タブレットコンピュータ又はスマートフォン)、撮像装置などの電子機器に搭載される。電子機器を情報処理装置ということができる。情報処理装置が、メモリシステム1とCPU90とを含んでもよい。CPU90は、書き込み要求及び読み出し要求をメモリシステム1に送信する。
【0019】
図1では、CPU90が1つである構成が例示されているが、CPU90は複数設けられていてもよく、複数のCPU90が互いに接続されていてもよい。CPU90は、グラフィックスプロセッシングユニット(GPU)又はアクセラレータなどの他の演算処理装置に置き換えられてもよい。
【0020】
メモリシステム1は外部記憶装置であってもよい。この場合、
図1のCPU90はホストコンピュータに置き換えられてもよい。メモリシステム1は、メモリコントローラ10及び不揮発性メモリ20が1つのパッケージとして構成されるメモリカード等であってもよく、SSD(Solid State Drive)等であってもよい。
【0021】
メモリコントローラ10は、CPU90からの書き込み要求に従って不揮発性メモリ20への書き込み動作を制御し、CPU90からの読み出し要求に従って不揮発性メモリ20からの読み出し動作を制御する。
【0022】
メモリコントローラ10は、例えばSoC(System-On-a-Chip)として構成される半導体集積回路である。以下で説明するメモリコントローラ10の各構成要素の動作の一部又は全部はハードウエアによって実現されるが、CPUがファームウエアを実行することによって実現されてもよい。
【0023】
メモリコントローラ10は、ホストインタフェース(I/F)11、コマンド処理部12、NVM制御部13、疲弊管理部14、第1バッファ(BF)15、及びPin制御部16を備える。これらの機能ブロックは内部バス19で相互に接続されている。
【0024】
ホストインタフェース11は、ホストとして機能するCPU90から書き込み要求及び読み出し要求を受信する。書き込み要求は、ライトコマンド、ライトアドレス、及びライトデータを含む。読み出し要求は、リードコマンド及びリードアドレスを含む。ホストインタフェース11は、受信した書き込み要求又は読み出し要求をコマンド処理部12に転送する。ホストインタフェース11は、不揮発性メモリ20から読み出されたデータ、コマンド処理部12の応答などをCPU90へ送信する。
【0025】
コマンド処理部12は、ホストインタフェース11を介してCPU90から受信したコマンドに応じた制御を実行する。例えば、コマンド処理部12は、CPU90から書き込み要求を受信した場合、ライトコマンドに応じて論理アドレスに該当するライトアドレスを物理アドレスへ変換する。この変換によって、不揮発性メモリ20における物理アドレスが書き込み動作を実行するページとして決定される。コマンド処理部12は、当該物理アドレスに対するライトデータの書き込み動作を実行する。上記論理アドレスとして、例えばLBA(Logical Block Addressing)が用いられる。上記物理アドレスは、データが記憶されているページの、不揮発性メモリ20における物理的な位置を示す。コマンド処理部12は、CPU90から受信したライトデータ及び上記の変換によって決定された物理アドレスをNVM制御部13及び疲弊管理部14に出力する。
【0026】
コマンド処理部12は、CPU90から読み出し要求を受信した場合、論理アドレスに該当するリードアドレスを物理アドレスへ変換する。この変換によって、不揮発性メモリ20における物理アドレスが読み出し動作を実行するページとして決定される。コマンド処理部12は、当該物理アドレスに対するデータの読み出し動作を実行する。コマンド処理部12は、上記の変換によって決定された物理アドレスをNVM制御部13及び疲弊管理部14に出力する。詳細は後述するが、Pin制御部16が、物理アドレスを用いて制御を行う場合、コマンド処理部12は、当該物理アドレスをPin制御部16に出力してもよい。
【0027】
NVM制御部13は、コマンド処理部12から入力されたアクセスの種別(書き込み動作又は読み出し動作)及び上記の物理アドレスに基づいて不揮発性メモリ20にアクセスし、不揮発性メモリ20に対する読み出し動作又は書き込み動作の制御を実行する。NVM制御部13は、ECC(Error Check and Correct;ECC)回路を備えてもよい。ECC回路は、コマンド処理部12から転送されたデータに対して、誤り訂正の符号化処理を実施し、パリティを生成する。ECC回路は、データ及びパリティを含む符号語を不揮発性メモリ20へ出力する。ECC回路は、不揮発性メモリ20から読み出された符号語を用いて誤り訂正の復号化処理を実行し、復号されたデータをコマンド処理部12に転送する。
【0028】
疲弊管理部14は、不揮発性メモリ20の物理アドレス及び当該物理アドレスに配置されたページの疲弊情報を不揮発性メモリ20から取得し、管理する。例えば、本実施形態では、疲弊管理部14は、所定の物理アドレスに配置されたページに対する書き込み動作及び読み出し動作が実行された回数(以下「書き込み回数」及び「読み出し回数」という)を管理する。疲弊管理部14は、特定のページに対する書き込み回数及び読み出し回数をカウントし、不揮発性メモリ20へ書き戻す。この際、ユーザデータの書き込みと同様に、第1バッファ15を経由してもよい。
【0029】
第1バッファ15は、上記のようにデータバッファとして機能する。第1バッファ15は、キャッシュメモリとしても機能する。第1バッファ15は、メモリコントローラ10がCPU90から受信したデータを不揮発性メモリ20へ記憶させるまでに一時的に保持し、不揮発性メモリ20から読み出したデータをCPU90へ送信するまでの間に一時的に保持する。第1バッファ15として、例えば、SRAM(Static Random Access Memory)又はDRAM(Dynamic Random Access Memory)などの汎用メモリを用いることができる。本実施形態では、第1バッファ15がメモリコントローラ10に設けられた構成を例示したが、この構成に限定されない。第1バッファ15は、メモリコントローラ10の外部に設けられてもよい。
【0030】
Pin制御部16は、従来のバッファ制御部としての機能に加えて、ウェアレベリング処理の履歴情報に基づいて、第1バッファ15においてピニング処理の対象となるデータを管理する機能を備える。つまり、Pin制御部16は、ウェアレベリング処理の履歴情報に基づき、アクセス頻度が高いデータが第1バッファ15から排除されないように、ピニング処理を実行するデータを決定する。なお、Pin制御部16の詳細な構成及び機能については後述する。本実施形態におけるウェアレベリング処理は書き込み動作をトリガとして実行される。
【0031】
不揮発性メモリ20は、複数のメモリチップ21を含む。メモリコントローラ10は複数のメモリチップ21の各々を制御する。具体的には、メモリコントローラ10は、メモリチップ21の各々に対してデータの書き込み動作及び読み出し動作を実行する。複数のメモリチップ21の各々は、バスを介してメモリコントローラ10に接続されている。各々のメモリチップ21は、複数のブロック22を含む。各々のブロック22は複数のページ23を含む。本実施形態では、上記の書き込み動作及び読み出し動作はページ23単位で実行される。したがって、本実施形態におけるピニング処理等はページ単位で行われる。ただし、ピニング処理は上記以外の単位で行われてもよい。例えば、複数のページを1つの単位としてピニング処理が行われてもよく、1ページの一部についてピニング処理が行われてもよい。
【0032】
上記のメモリチップ21、ブロック22、及びページ23は、メモリの階層構造又はグループ化の一例を示すものであって、本発明の一実施形態は上記の構成に限定されない。上記の書き込み動作及び読み出し動作に加えて、消去動作がページ単位で実行されてもよい。書き込み動作、読み出し動作、及び消去動作の各々が同じ単位(メモリチップ21、ブロック22、又はページ23)で実行されてもよく、各々のうち少なくとも1つが異なる単位で実行されてもよい。書き込み動作、読み出し動作、及び消去動作はメモリセル単位で実行されてもよい。
【0033】
不揮発性メモリ20は、データを不揮発に記憶する不揮発性メモリであり、例えば、NAND型フラッシュメモリやSCM(Storage Class Memory)である。SCMとして、NOR型フラッシュメモリ、クロスポイント型メモリ、相変化メモリ(Phase Change Memory;PCM)、磁気抵抗メモリ(Magnetoresistive Random Access Memory;MRAM)、抵抗変化型メモリ(Resistance Random Access Memory;ReRAM)、強誘電体メモリ(Ferroelectric Random Access Memory;FeRAM)、酸化物半導体メモリ(Oxide Semiconductor Random Access Memory;OSRAM)などの半導体記憶装置が用いられる。不揮発性メモリ20が半導体記憶装置であることは必須ではない。半導体記憶装置以外の種々の記憶媒体に対しても本実施形態を適用することができる。
【0034】
不揮発性メモリ20のメモリチップ21では、複数のメモリセルがアレイ状に配置されている。各メモリセルは、2値または多値(3以上の値)を記録可能である。メモリチップ21には、複数のメモリセルに接続されたワードライン及びビットラインが設けられている。例えば、メモリチップ21を特定するチップアドレス、ワードラインアドレス、及びビットラインアドレス等を含む物理アドレスによって、メモリセル(又は、ページ)の位置が指定される。
【0035】
不揮発性メモリ20に用いられるSCMは、DRAM(Dynamic Random Access Memory)等のような主記憶メモリとストレージ(NAND型フラッシュメモリなど)との中間に位置するメモリである。具体的には、速度、コスト、及び寿命の点において、SCMはDRAMとNAND型フラッシュメモリとの中間に位置する。SCMにおけるアクセス粒度は、DRAMと同程度に小さい。一方、アクセス粒度が小さいことに伴い、アクセスに関する履歴情報に係るデータ量が大きくなってしまう。その結果、そのような履歴情報を保持するためには、第1バッファ15の容量を大きくする必要があり、コストの上昇を招いてしまう。第1バッファ15の容量を大きくせずに上記の構成を採用する場合、保持できるデータ量が制限されてしまうため、アクセスに関する履歴情報を用いて長期的な傾向を把握することが難しくなる。
【0036】
そこで、本実施形態では、アクセス回数に対して1/1000程度の係数で比例するウェアレベリング処理の履歴情報をアクセス履歴の代わりに用いることで、長期的な傾向を把握することができる。
【0037】
[1-2.Pin制御部16の構成]
図2を用いて、Pin制御部16の詳細な構成を説明する。
図2に示すように、メモリコントローラ10は、第1バッファ15及びPin制御部16に加え、ウェアレベリング履歴テーブル100及び第2バッファ110を備える。なお、Pin制御部16はメモリコントローラ10の一部の機能を実現する部分ということができる。以下の説明において、Pin制御部16の機能はメモリコントローラ10の機能と言い換えることもできる。
【0038】
ウェアレベリング履歴テーブル100には、ウェアレベリング履歴が格納されている。ウェアレベリング履歴は、不揮発性メモリ20に対してウェアレベリング処理が実行された履歴に係る情報である。本実施形態では、過去N回のウェアレベリング処理に係るN個のウェアレベリング履歴が、ウェアレベリング履歴テーブル100に格納されている(以下、Nは自然数)。詳細は後述するが、ウェアレベリング履歴テーブル100には、当該ウェアレベリング履歴としてウェアレベリング処理が実行されたページの論理アドレスが格納されている。ただし、ウェアレベリング履歴として、当該論理アドレス以外の情報がウェアレベリング履歴テーブル100に格納されてもよい。
【0039】
本実施形態では、ウェアレベリング履歴テーブル100として、例えば、リングバッファが用いられる。つまり、ウェアレベリング履歴テーブル100に空きがない場合、当該テーブルに新たな情報が追加されると当該テーブルから最も古い情報が追い出される。ただし、ウェアレベリング履歴テーブル100は上記の構成に限定されない。
【0040】
第2バッファ110は、第1バッファ15と同様の構成を備える。ただし、第2バッファ110の容量は、第1バッファ15の容量の1/1000~1/10程度である。詳細は後述するが、第2バッファ110には、Pin制御部16によってピニング処理が実行されたページに係るデータが格納される。
【0041】
Pin制御部16は、ウェアレベリング履歴テーブル100を管理する。ウェアレベリング処理が実行されると、Pin制御部16は、ウェアレベリング処理が実行されたページの論理アドレスをウェアレベリング履歴テーブル100に追加する。この動作を、ウェアレベリング履歴テーブル100の更新という。
【0042】
さらに、Pin制御部16は、ウェアレベリング履歴テーブル100に基づいて、上記のウェアレベリング処理が実行されたページに係るデータに対してピニング処理を実行する。詳細は後述するが、ウェアレベリング処理が実行され、ウェアレベリング履歴テーブル100が更新された場合であって、更新に係るページの論理アドレスが、過去N回以内にウェアレベリング処理が実行されたページの論理アドレスに含まれる場合、Pin制御部16は、当該ページに係るデータに対してピニング処理を実行する。この場合、当該ページに係るデータは第1バッファ15に格納されている場合、Pin制御部16は、第1バッファ15から必要な情報を抽出して第2バッファ110に格納する。
【0043】
上記の第1バッファ15及び第2バッファ110を合わせて、単に「バッファ」という場合がある。この場合、第2バッファ110は、バッファの「ピニング領域」に該当する。第2バッファ110は、当該バッファのうち、書き換えが制限される領域に設けられたバッファである。一方、第1バッファ15は、当該バッファのうち、ウェアレベリング履歴テーブル100に基づく書き換え制限を受けないバッファである。本実施形態では、第1バッファ15と第2バッファ110とは別個に設けられている。
【0044】
新たなデータが第1バッファ15に追加される際に、第1バッファ15の容量に空きがない場合、Pin制御部16は、所定の条件に応じて、第1バッファ15に格納されているデータの追い出しを行う。同様に、新たなデータが第2バッファ110に追加される際に、第2バッファ110の容量に空きがない場合、Pin制御部16は、所定の条件に応じて、第2バッファ110に格納されているデータの追い出しを行う。第1バッファ15におけるデータの追い出しのための条件と、第2バッファ110におけるデータの追い出しのための条件と、は同じであってもよく、異なっていてもよい。
【0045】
[1-3.ピニング処理のフローチャート]
図3を用いて、ピニング処理の動作について説明する。
図3は、一実施形態に係るメモリシステムのピニング処理を示すフローチャートである。以下のフローチャートに記載された動作は、メモリコントローラ10(例えば、疲弊管理部14及びPin制御部16)によって実行される。
【0046】
図3に示すように、所定の条件に基づいてウェアレベリング処理が実行されると(ステップS301)、ウェアレベリング処理が実行されたページに基づいてウェアレベリング履歴テーブル100の更新が行われる(ステップS302)。具体的には、当該ページの論理アドレスがウェアレベリング履歴テーブル100に追加される更新が行われる。当該更新はPin制御部16によって実行される。
【0047】
S302の更新処理に続いて、更新に係るページが直近N回のウェアレベリング処理の対象であったか否かの判断が行われる(ステップS303)。具体的には、Pin制御部16によって、上記の更新によって追加されたページの論理アドレスと同じ論理アドレスがウェアレベリング履歴テーブル100に含まれているか否かが判断される。
【0048】
S303において、更新に係るページが直近N回のウェアレベリング処理の対象であったと判断された場合(S303の「YES」)、第2バッファ110の容量に空きがあるか否かの判断が行われる(ステップS304)。一方、S303において、更新に係るページが直近N回のウェアレベリング処理の対象ではなかったと判断された場合(S303の「NO」)、ピニング処理は行われず
図3に示す動作は終了する。
【0049】
S304において、第2バッファ110の容量に空きがあると判断された場合(S304の「YES」)、ウェアレベリング処理が実行されたページに係るデータに対してピニング処理が実行される(ステップS305)。具体的には、当該ページに係るデータが第2バッファ110に追加される。一方、S304において、第2バッファ110の容量に空きがないと判断された場合(S304の「NO」)、第2バッファ110に格納されているデータの追い出しが行われる(ステップS306)。そして、追い出しによって容量に空きが生じた領域に、S305において上記のページに係るデータが追加される。S306及びS305の動作をまとめて、既存のデータを新たなデータに置き換える、ということができる。
【0050】
S303における判断は、上記の構成に限定されず、他の方法で判断が行われてもよい。例えば、S303の代わりに又はS303に加えて、更新に係るページが直近N回のウェアレベリング処理のうちM回以上(Mは2以上N以下の自然数)当該処理が実行されたページと同じであるか否かの判断が行われてもよい。S303の代わりに又はS303に加えて、更新に係るページが特定の範囲の論理アドレスに含まれるか否かの判断が行われてもよい。
【0051】
S306におけるデータの追い出しの対象を選択する手段として、第2バッファ110に格納されたデータのうち、最初に格納されたデータ(最も古いデータ)が選択される「FIFO」が採用されてもよく、第2バッファ110に格納されたデータのうち、参照された回数が最も少ないデータが選択される「LFU」が採用されてもよく、第2バッファ110に格納されたデータのうち、最後に参照されてから最も時間が経過しているデータが選択される「LRU」が採用されてもよい。
【0052】
[1-4.第1バッファ15に格納されるデータ構成]
図4は、一実施形態に係るバッファのデータ構成の一例を示す図である。
図4に示すように、第1バッファ15は、「エントリ番号」、「データ」、「タグ」、「Valid」、及び「アクセス履歴」の項目を有する。これらの項目は互いに関連付けられて格納されている。
図4の例では、エントリ番号「0」、「2」にデータが格納され、エントリ番号「1」、「3」が空き(「XXXX」と表示されている)である構成が例示されている。
【0053】
図4において、論理アドレスの下位ビットに基づいて「エントリ番号」の範囲が決定される。「データ」は、CPU90からの書き込み要求に対応するライトデータである。「タグ」は、論理アドレスの上位ビットを示すものである。第1バッファ15に格納された「エントリ番号」及び「タグ」に基づいてデータの論理アドレスを復元することができる。「Valid」は、エントリにおけるデータの有無を示すものである。本実施形態では、「Valid」が「1」の場合、そのエントリ番号にデータが存在していることを示し、「Valid」が「0」の場合、そのエントリ番号にデータが存在しない(エントリが空いている)ことを示す。「アクセス履歴」は、データに対するアクセスに関する履歴情報を示すものであり、例えば、過去のアクセス回数等に基づく情報である。第1バッファ15におけるデータの追い出しは、この「アクセス履歴」に基づいて行われる。
【0054】
第2バッファ110に格納されるデータ構成は
図4と類似した構成である。ただし、第2バッファ110では、第1バッファ15とは異なり、論理アドレスによってエントリ番号の範囲は制限されない。第2バッファ110では、「タグ」として論理アドレスが格納される。ただし、第2バッファ110の構成が第1バッファ15の構成と同じであってもよい。さらに、第2バッファ110では、「アクセス履歴」の項目が省略されていてもよい。
【0055】
[1-5.ウェアレベリング履歴テーブル100に格納されるデータ構成]
図5は、一実施形態に係るウェアレベリング履歴テーブルのデータ構成の一例を示す図である。
図5に示すように、ウェアレベリング履歴テーブル100では、ウェアレベリング処理が実行されたページの論理アドレスが、アドレスリストとして格納されている。
図5では、リスト番号「2」から「9」までの論理アドレスが有効な範囲として指定されている。そのため、「head」として「2」が指定されており、「tail」として「9」が指定されている。ウェアレベリング処理が実行され、アドレスリストに対して論理アドレスの追加及び削除が実行される度に「head」及び「tail」の値が更新される。
図5に示すアドレスリストのうち、「head」が示すアドレスは、有効な範囲において最も古いアドレスであり、「tail」が示すアドレスは最新のアドレスである。なお、
図5では、リスト番号「0」、「1」が空き(「XXX」と表示されている)である構成が示されている。
【0056】
例えば、ウェアレベリング処理が実行される前は、ウェアレベリング履歴テーブル100にはリスト番号「2」~「8」に論理アドレスが格納されている状態で、「500」の論理アドレスのページに対してウェアレベリング処理が実行された場合について説明する。つまり、ウェアレベリング処理が実行される前は、「head」の値は「2」であり、「tail」の値は「8」である。そして、ウェアレベリング処理が実行されることで、論理アドレス「500」がリスト番号「9」に追加され、「tail」の値が「9」に更新される。
【0057】
この場合、リスト番号「9」に追加された論理アドレス「500」に対して実行されたウェアレベリング処理を「第1ウェアレベリング処理」といい、当該論理アドレスを「第1ウェアレベリング履歴」という。この第1ウェアレベリング処理より前に実行された、リスト番号「2」~「8」に対応する論理アドレスに対して実行されたN回分(N=7)のウェアレベリング処理を「第2ウェアレベリング処理」といい、第2ウェアレベリング処理に対応するN個(N=7)の論理アドレスを「第2ウェアレベリング履歴」という。この例では、ウェアレベリング履歴テーブル100は、第1ウェアレベリング履歴と第2ウェアレベリング履歴とを格納する、ということができる。第1ウェアレベリング履歴を、更新に係る履歴ということができ、第2ウェアレベリング履歴を、過去の履歴ということができる。Nの数は7に限定されず任意の自然数とすることができる。
【0058】
上記の表現を用いて、
図3のS301~S303、S305の動作を説明する。まず、S301において第1ウェアレベリング処理が実行される。次に、S302において、当該第1ウェアレベリング処理に基づいて、ウェアレベリング履歴テーブル100に第1ウェアレベリング履歴を追加する更新が行われる。具体的には、
図5のリスト番号「9」に論理アドレス「500」が追加され、「tail」の値が「9」に更新される。そして、S303において、当該第1ウェアレベリング履歴が、N個(N=7)の第2ウェアレベリング履歴に含まれるか否かの判断が行われる。具体的には、第1ウェアレベリング履歴であるリスト番号「9」の論理アドレス「500」と同じ論理アドレスが、第2ウェアレベリング履歴であるリスト番号「2」~「8」の論理アドレスに含まれているか否かの判断が行われる。
図5の場合、N個(N=7)の第2ウェアレベリング履歴のうち、リスト番号「7」の論理アドレスが「500」なので、第1ウェアレベリング処理の対象ページが、直近N回(N=7)のウェアレベリング処理の対象であったと判断される(S303の「YES」)。そして、S305において第2バッファ110に第1ウェアレベリング処理が実行された対象のデータが格納される。
【0059】
同様に、上記の表現を用いて、
図3のS303、S304、S306の動作を説明する。S303における判断において、当該第1ウェアレベリング履歴が、N個の第2ウェアレベリング履歴に含まれる場合(S303の「YES」)、S304において、第2バッファ110に新たなデータを格納する容量があるか否かの判断が行われる。S304における判断において、第2バッファ110に新たなデータを格納する容量がないと判断した場合(S304の「NO」)、S306において、第2バッファ110に格納された既存のデータを上記第1ウェアレベリング処理が実行された対象のデータに置き換える。
【0060】
[1-6.書き込み動作のフローチャート]
図6は、一実施形態に係るメモリシステムの書き込み動作を示すフローチャートである。メモリコントローラ10がCPU90から書き込み要求を受信した場合、当該書き込み要求に係るライトデータが第1バッファ15に存在するか否かの判断が行われる(ステップS601)。
【0061】
S601において、ライトデータが第1バッファ15に存在すると判断された場合(S601の「YES」)、第1バッファ15におけるエントリについて上書き処理が行われる(ステップS602)。具体的には、当該ライトデータに対応するエントリ番号について、データ及びアクセス履歴(
図4参照)が更新される。一方、S601において、ライトデータが第1バッファ15に存在しないと判断された場合(S601の「NO」)、当該ライトデータが第2バッファ110に存在するか否かの判断が行われる(ステップS603)。
【0062】
S603において、ライトデータが第2バッファ110に存在すると判断された場合(S603の「YES」)、第2バッファ110におけるエントリについて上書き処理が行われる(ステップS604)。具体的には、ライトデータに対応するエントリ番号について、データが更新される。一方、S603において、ライトデータが第2バッファ110に存在しないと判断された場合(S603の「NO」)、第1バッファ15の容量に空きがあるか否かの判断が行われる(ステップS605)。
【0063】
S605において、第1バッファ15の容量に空きがあると判断された場合(S605の「YES」)、空きがある領域に当該ライトデータの書き込みが行われる(ステップS606)。一方、S605において、第1バッファ15の容量に空きがないと判断された場合(S605の「NO」)、第1バッファ15におけるデータの追い出しが行われ(ステップS607)、第1バッファ15の容量に空きが生じた領域に上記のライトデータの書き込みが行われる(S606)。S607におけるデータの追い出しの対象を選択する手段として、「FIFO」、「LFU」、又は「LRU」が採用されてもよい。
【0064】
[1-7.読み出し動作のフローチャート]
図7は、一実施形態に係るメモリシステムの読み出し動作を示すフローチャートである。メモリコントローラ10は、CPU90から読み出し要求を受信した場合、当該読み出し要求に係るリードアドレスのデータが第1バッファ15に存在するか否かの判断が行われる(ステップS701)。
【0065】
S701において、当該データが第1バッファ15に存在すると判断された場合(S701の「YES」)、第1バッファ15に格納されたデータが出力される(ステップS702)。一方、S701において、当該データが第1バッファ15に存在しないと判断された場合(S701の「NO」)、当該データが第2バッファ110に存在するか否かの判断が行われる(ステップS703)。
【0066】
S703において、上記データが第2バッファ110に存在すると判断された場合(S703の「YES」)、第2バッファ110に格納されたデータが出力される(ステップS704)。一方、S703において、上記データが第2バッファ110に存在しないと判断された場合(S703の「NO」)、第1バッファ15の容量に空きがあるか否かの判断が行われる(ステップS705)。
【0067】
S705において、第1バッファ15の容量に空きがあると判断された場合(S705の「YES」)、不揮発性メモリ20から当該データが読み出され(ステップS706)、読み出されたデータは、空きがある領域に書き込まれる(ステップS707)。一方、S705において、第1バッファ15の容量に空きがないと判断された場合(S705の「NO」)、第1バッファ15におけるデータの追い出しが行われ(ステップS708)、第1バッファ15の容量に空きが生じた領域に不揮発性メモリ20から読み出されたデータの書き込みが行われたうえで(S706、S707)、S702のデータ出力が実行される。
【0068】
以上のように、本実施形態に係るメモリシステムによると、ウェアレベリング処理の履歴情報をアクセス履歴の代わりに用いてピニング処理を実行することで、バッファのサイズを大きくする必要なく、長期的な傾向を把握することができる。その結果、コストの上昇を抑制しつつ、処理速度を向上させることができる。
【0069】
[2.第2実施形態]
図8~
図15を用いて、第2実施形態に係るメモリシステム1Aについて説明する。第2実施形態に係るメモリシステム1Aの構成は、第1実施形態に係るメモリシステム1の構成と類似するため、共通する部分の説明を省略し、主に相違点について説明する。第2実施形態では、
図2の第2バッファ110は設けられておらず、第1バッファ15Aの中に第2バッファ110の機能を実現する領域が設けられている。以下の説明において、
図1及び
図2に示すメモリシステム1と同様の構成について説明をする場合、
図1及び
図2に示された符号の後にアルファベット“A”を付して説明を省略する場合がある。
【0070】
[2-1.Pin制御部16Aの構成]
図8を用いて、Pin制御部16Aの詳細な構成を説明する。
図8に示すメモリコントローラ10Aと
図2に示すメモリコントローラ10とを対比すると、第1バッファ15A及びPin制御部16Aの構成(
図8)が、第1バッファ15及びPin制御部16の構成(
図2)と相違する。なお、Pin制御部16Aはメモリコントローラ10Aの一部の機能を実現する部分ということができる。以下の説明において、Pin制御部16Aの機能はメモリコントローラ10Aの機能と言い換えることもできる。
【0071】
図8に示すように、第1バッファ15Aは、ピニング領域120Aと非ピニング領域121Aとに区分される。
図8において、ピニング領域120Aは「valid」と表記された領域であり、実線の枠で表記された領域である。一方、非ピニング領域121Aは「invalid」と表記された領域であり、点線の枠で表記された領域である。ピニング領域120Aは、
図2の第2バッファ110の機能を実現する領域であり、Pin制御部16Aによってピニング処理が実行されたページに係るデータが格納される。つまり、ピニング領域120Aは、
図2の第2バッファ110に対応する。
【0072】
第1バッファ15Aにおいて、ピニング領域120Aのサイズ(例えば、ビット数)は可変である。換言すると、ピニング処理が実行されるデータの数は可変である。本実施形態では、第1バッファ15Aの領域がピニング領域120A又は非ピニング領域121Aに区分され得る構成が例示されているが、この構成に限定されない。例えば、第1バッファ15Aのうち、一部の領域はピニング領域120A又は非ピニング領域121Aに区分され得る領域であり、他の領域はピニング領域120Aには区分されず常に非ピニング領域121Aである構成であってもよい。第1バッファ15Aにおけるピニング領域120Aと非ピニング領域121Aとの比率は、適宜調整が可能である。この比率の調整は、例えば、CPU90からの指示によって行われてもよい。
【0073】
Pin制御部16Aは、Pinアドレスリスト122A及びPin制御レジスタ123Aを備えている。
【0074】
Pinアドレスリスト122Aには、ピニング処理を実行する候補の論理アドレスが格納されている。詳細は後述するが、ピニング処理を実行するタイミングで、第1バッファ15Aにピニング処理を実行する対象のデータが格納されていない(データが追い出されてしまっている)場合がある。そのような場合であっても、Pinアドレスリスト122Aにピニング処理を実行する候補の論理アドレスが格納されていることで、既にデータが追い出されてしまっている状況であっても、当該論理アドレスに対応するデータが第1バッファ15Aに追加されたときに、そのデータに対してピニング処理を実行することができる。
【0075】
本実施形態では、ウェアレベリング履歴テーブル100Aに基づいて、ピニング処理を実行するページが決定され、当該ページの論理アドレスがPinアドレスリスト122Aに格納される。そして、その後、当該論理アドレスのページに係るデータが第1バッファ15Aに追加されたときに、当該データに対して、Pinアドレスリスト122Aに基づいてピニング処理が実行されることで、ピニング領域120Aに対象のデータが格納される。
【0076】
なお、特定のページに対してピニング処理が実行された場合、当該ピニング処理が解除されない限り当該ページに対するウェアレベリング処理は実行されない。その結果、ウェアレベリング履歴テーブル100Aの当該ページのアドレスを含むエントリのうち最新の(最後に追加された)エントリが、最新のピニング処理の原因となったウェアレベリング処理に対応する。Pinアドレスリスト122Aは、ウェアレベリング履歴テーブル100Aのピニング処理の原因となったウェアレベリング処理の対象アドレスを、古い順に保持する。
図10の手順に従うと、ピニング処理が実行された順にピニング処理が解除される。つまり、結果的にPinアドレスリスト122Aのデータ構成は、ウェアレベリング履歴テーブル100のデータ構成(
図5参照)と同様である。
【0077】
Pin制御レジスタ123Aには、第1バッファ15Aにおけるピニング領域120Aを指定する情報が格納されている。例えば、Pin制御レジスタ123Aには、第1バッファ15Aのうちピニング領域120Aに該当するエントリ番号を特定する情報、又は、第1バッファ15Aの各エントリに対してピニング領域120Aに該当するか否かを示すフラグ情報が格納されている。また、Pin制御レジスタ123Aでは、ピニング領域120Aのサイズの上限及びピニング処理の実行可否を判断するための閾値等が設定される。当該サイズは、例えばCPU90Aによって設定可能である。
【0078】
[2-2.ピニング処理のフローチャート]
図9を用いて、ピニング処理の動作について説明する。
図9は、一実施形態に係るメモリシステムのピニング処理を示すフローチャートである。以下のフローチャートに記載された動作は、メモリコントローラ10Aによって実行される。本実施形態では、ウェアレベリング処理が実行されると、ウェアレベリング処理が実行されたページのデータが第1バッファ15Aから追い出される場合について説明する。
【0079】
図9の動作フローにおいて、ステップS901~S903は、
図3のS301~S303と同じステップなので、説明を省略する。ただし、本実施形態の場合、S903のステップにおいて、ウェアレベリング処理が実行されたページのデータは第1バッファ15Aに存在していない。したがって、S903においてピニング処理を実行するページが特定されても、そのページに係るデータを第1バッファ15Aから抽出することができないため、以下のような動作が行われる。
【0080】
図9に示すように、S903において、更新に係るページが直近N回のウェアレベリング処理の対象であったと判断された場合(S903の「YES」)、第1バッファ15Aのピニング領域120Aに空きがあるか否かの判断が行われる(ステップS904)。一方、S903において、更新に係るページが直近N回のウェアレベリング処理の対象ではなかったと判断された場合(S903の「NO」)、
図9に示す動作は終了する。
【0081】
S904において、ピニング領域120Aに空きがあると判断された場合(S904の「YES」)、ウェアレベリング処理が実行されたページの論理アドレスがPinアドレスリスト122Aに追加される(ステップS905)。一方、S904において、ピニング領域120Aに空きがないと判断された場合(S904の「NO」)、
図9に示す動作は終了する。その後、Pinアドレスリスト122Aに格納された論理アドレスに係るデータが第1バッファ15Aに追加された場合に、当該データに対してピニング処理を実行する。
【0082】
図10は、一実施形態に係るメモリシステムのウェアレベリング履歴テーブルの更新処理を示すフローチャートである。
図10は、
図9のS902における動作を詳細に説明した動作フローである。
【0083】
まず、N回前のウェアレベリング処理が実行されたページに係るデータがピニング領域120Aに格納されているか否かの判断が行われる(ステップS1001)。S1001において、当該データがピニング領域120Aに格納されている場合(S1001の「YES」)、当該データに係る論理アドレスがウェアレベリング履歴テーブル100Aに複数回存在しているか否かの判断が行われる(ステップS1002)。一方、S1001において、当該データがピニング領域120Aに格納されていないと判断された場合(S1001の「NO」)、ウェアレベリング履歴テーブル100AからN回前のウェアレベリング処理に係る論理アドレスが削除され、新たに実行されたウェアレベリング処理に係る論理アドレスがウェアレベリング履歴テーブル100Aに追加される(ステップS1003)。
【0084】
S1002において、上記データに係る論理アドレスがウェアレベリング履歴テーブル100Aに複数回存在している場合(S1002の「YES」)、S1003の動作が実行される。一方、当該データに係る論理アドレスがウェアレベリング履歴テーブル100Aに複数回存在しないと判断された場合(S1002の「NO」)、当該データに対するピニング処理が解除される(ステップS1004)。この場合、ピニング処理が解除されたデータは、非ピニング領域121Aに格納されてもよく、データの追い出しにより不揮発性メモリ20Aに記憶されてもよい。上記のように、アクセス頻度が低いアドレスについて、ピニング処理を解除することで、利用される可能性が相対的に低いデータをピニング領域120Aから排除し、ピニング領域120Aを有効に活用することができる。
【0085】
[2-3.第1バッファ15Aに格納されるデータ構成]
図11は、一実施形態に係るバッファのデータ構成の一例を示す図である。
図11に示す第1バッファ15Aのデータ構成は、
図4に示す第1バッファ15のデータ構成と類似しているが、第1バッファ15Aのデータ構成は「Pinフラグ」及び「Pinカウンタ」の項目を有する点において、第1バッファ15のデータ構成と相違する。
【0086】
「Pinフラグ」は、そのエントリ番号に格納されたデータに対してピニング処理が実行されているか否かを示すフラグである。
図11では、「Pinフラグ」が「1」の場合、そのエントリ番号に格納されたデータに対してピニング処理が実行されており、「Pinフラグ」が「0」の場合、そのエントリ番号に格納されたデータに対してピニング処理は実行されていないことを意味する。つまり、「Pinフラグ」が「1」のデータは、ピニング領域120Aに格納されたデータに該当し、「Pinフラグ」が「0」のデータは、非ピニング領域121Aに格納されたデータに該当する。「Pinカウンタ」は、「Pinフラグ」が「1」であるエントリの数を示し、第1バッファ15Aにおいてピニング処理が実行されているエントリの数を意味する。Pin制御レジスタ123Aがピニング領域120Aの上限を設定する場合、この「Pinカウンタ」の数が設定を越えないように、全体の動作が制御される。
【0087】
図12及び
図13は、一実施形態に係るバッファのデータ構成の一例を示す図である。
図12及び
図13では、
図11とは異なるデータ構成の一例を示す。
図12のデータ構成は
図11のデータ構成とは異なり、「Pinフラグ」の項目は設けられていない。その代わりに、
図12と関連付けられた
図13のピニング管理テーブル17Aにおいて、ピニング処理が実行されるエントリ番号が管理されている。
図12に示すように、この例では、エントリ番号「2」のデータに対してピニング処理が実行されている。したがって、
図13に示すように、ピニング管理テーブル17Aのエントリ番号「0」において、第1バッファ15A上でピニング処理が実行されているエントリ番号「2」が格納されている。
【0088】
[2-4.書き込み動作のフローチャート]
図14は、一実施形態に係るメモリシステムの書き込み動作を示すフローチャートである。メモリコントローラ10AがCPU90Aから書き込み要求を受信した場合、当該書き込み要求に係るライトデータが第1バッファ15Aに存在するか否かの判断が行われる(ステップS1401)。
【0089】
S1401において、ライトデータが第1バッファ15Aに存在すると判断された場合(S1401の「YES」)、第1バッファ15Aにおけるエントリについて上書き処理が行われ(ステップS1402)、
図14に示すフローは終了する。一方、S1401において、ライトデータが第1バッファ15Aに存在しないと判断された場合(S1401の「NO」)、第1バッファ15Aの容量に空きがあるか否かの判断が行われる(ステップS1403)。
【0090】
S1403において、第1バッファ15Aの容量に空きがあると判断された場合(S1403の「YES」)、空きがある領域に当該ライトデータの書き込みが行われる(ステップS1404)。一方、S1403において、第1バッファ15Aの容量に空きがないと判断された場合(S1403の「NO」)、第1バッファ15Aにおけるデータの追い出しが行われ(ステップS1405)、第1バッファ15Aの容量に空きが生じた領域に上記のライトデータの書き込みが行われる(S1404)。S1405におけるデータの追い出しの対象を選択する手段として、「FIFO」、「LFU」、又は「LRU」が採用されてもよい。
【0091】
S1404において、ライトデータの書き込みが完了すると、当該ライトデータに対応するページの論理アドレスがPinアドレスリスト122Aに格納されているか否かの判断が行われる(ステップS1406)。S1406において、当該論理アドレスがPinアドレスリスト122Aに格納されている場合(S1406の「YES」)、当該論理アドレスに対応するページのデータに対してピニング処理が実行される(ステップS1407)。一方、S1406において、当該論理アドレスがPinアドレスリスト122Aに格納されていないと判断された場合(S1406の「NO」)、
図14に示すフローは終了する。
【0092】
以上のように、本実施形態に係るメモリシステムによると、第1実施形態と同様の効果を得ることができ、さらに、ピニング処理を実行する対象のデータが決定するときには、当該データが第1バッファ15Aに格納されていないような場合であっても、当該データに対してピニング処理を実行することができる。
【0093】
[2-5.変形例]
図15を用いて、第2実施形態の変形例について説明する。
図15は、一実施形態の変形例に係るメモリシステムのウェアレベリング履歴テーブルの更新処理を示すフローチャートである。上記の実施形態では、ウェアレベリング履歴テーブル100Aに論理アドレスが格納された構成を例示したが、変形例では、ウェアレベリング履歴テーブル100Aに物理アドレスが格納された構成について説明する。
【0094】
図15に示すフローチャートは、
図10に示すフローチャートと類似しているが、
図10のS1003と同じ
図15のS1503の後に、ウェアレベリング履歴テーブル100Aの物理アドレスがウェアレベリング処理前のアドレスから当該処理後のアドレスに更新される(ステップS1505)。ウェアレベリング処理が実行されると、論理アドレスと物理アドレスとの関連付けが変更される。ピニング処理を実行する対象は同一の論理アドレスに格納されたデータなので、ウェアレベリング処理によって、特定の論理アドレスに関連付けられた論理アドレスが旧アドレスから新アドレスに変更された場合、その変更に合わせて、ウェアレベリング履歴テーブル100Aにおいて格納される物理アドレスも旧アドレスから新アドレスに更新される。この変形例は、第2実施形態だけではなく、他の実施形態に適用することもできる。
【0095】
[3.第3実施形態]
図16及び
図17を用いて、第3実施形態に係るメモリシステム1Bについて説明する。第3実施形態に係るメモリシステム1Bの構成は、第2実施形態に係るメモリシステム1Aの構成(
図8参照)と類似するため、共通する部分の説明を省略し、主に相違点について説明する。第3実施形態では、メモリコントローラ10Bが、第1バッファ15B、Pin制御部16B、及びウェアレベリング履歴テーブル100Bに加えバッファ統計取得部124Bを備えている点において、メモリシステム1Aと相違する。以下の説明において、
図8に示すメモリシステム1Aと同様の構成について説明をする場合、
図8に示された符号の後のアルファベットを“A”から“B”に代えて説明を省略する場合がある。同様に、
図1に示すメモリシステム1と同様の構成について説明をする場合、
図1に示された符号の後にアルファベット“B”を付して説明を省略する場合がある。
【0096】
[3-1.バッファ統計取得部124Bの構成]
バッファ統計取得部124Bは、CPU90Bからの書き込み要求及び読み出し要求に対して、第1バッファ15Bに格納されたデータを活用した確率などの統計情報を取得する。バッファ統計取得部124Bは、取得した当該統計情報をピニング処理の制御に用いる。具体的には、
図14のフローチャートを参照して説明すると、バッファ統計取得部124Bが取得する統計情報は、CPU90Bから受信した書き込み要求に対して、ライトデータが第1バッファ15Bに存在すると判断された回数及びその確率などの統計情報であってもよく、CPU90Bから受信した読み出し要求に係るリードアドレスのデータが第1バッファ15Bに存在する場合であって、当該データが第1バッファ15Bから出力された回数及びその確率などの統計情報であってもよい。
【0097】
上記の回数を「ヒット回数」という場合があり、上記の確率を「ヒット率」という場合がある。バッファ統計取得部124Bは、ヒット回数又はヒット率に基づき、所定の条件に基づいて閾値を設定する。詳細は後述するが、その閾値に基づいて、ピニング処理を解除するか否かの判断が行われる。
【0098】
特に、本実施形態の場合、バッファ統計取得部124Bは、上記ライトデータが第1バッファ15Bのうちピニング領域120Bに格納されていると判断された場合、及びリードアドレスに係るデータが第1バッファ15Bのうちピニング領域120Bから出力された場合におけるヒット回数及びヒット率を取得する。ただし、バッファ統計取得部124Bが取得する統計情報は、上記のものに限定されない。
【0099】
バッファ統計取得部124Bはメモリコントローラ10Bの一部の機能を実現する部分ということができる。以下の説明において、バッファ統計取得部124Bの機能はメモリコントローラ10Bの機能と言い換えることもできる。
【0100】
[3-2.ピニング処理のフローチャート]
本実施形態に係るピニング処理全体のフローチャートは
図9に示すものと同じなので、詳細な説明を省略する。本実施形態では、ウェアレベリング履歴テーブルの更新処理に係るフローチャートが
図10に示すものと相違する。以下、
図10との相違点について詳細に説明する。
【0101】
図17に示す各ステップのうちステップS1701~S1704は
図10に示すステップS1001~S1004と同様なので、説明を省略する。
図17では、S1702において、対象のデータに係る論理アドレスがウェアレベリング履歴テーブル100Bに複数回存在している場合(S1702の「YES」)、ピニング処理が実行されてからのヒット数が閾値に達しているか否かの判断が行われる(ステップS1705)。
【0102】
S1705において、当該ヒット数が閾値に達していない(閾値未満)と判断された場合(S1705の「YES」)、当該データに対するピニング処理が解除される(ステップS1704)。一方、S1705において、当該ヒット数が閾値に達していると判断された場合(S1705の「NO」)、ウェアレベリング履歴テーブル100BからN回前のウェアレベリング処理に係る論理アドレスが削除され、新たに実行されたウェアレベリング処理に係る論理アドレスがウェアレベリング履歴テーブル100Bに追加される(ステップS1703)。
【0103】
以上のように、本実施形態に係るメモリシステムによると、第2実施形態と同様の効果を得ることができる。また、統計情報に基づいてウェアレベリング履歴テーブル100Bの更新が行われるため、実情に沿って、アクセス頻度が高いページの情報を当該テーブルに残すことができる。
【0104】
[4.第4実施形態]
図18及び
図19を用いて、第4実施形態に係るメモリシステム1Cについて説明する。第4実施形態に係るメモリシステム1Cの構成は、第2実施形態に係るメモリシステム1Aの構成(
図8参照)と類似するため、共通する部分の説明を省略し、主に相違点について説明する。第4実施形態では、ウェアレベリング履歴テーブル100Cは、ウェアレベリング処理が実行されたページの論理アドレスに加えて当該ウェアレベリング処理が実行された時刻又はある基準時からの時間に係る時間情報が格納される点において、第2実施形態のウェアレベリング履歴テーブル100Aと相違する。以下の説明において、
図8に示すメモリシステム1Aと同様の構成について説明をする場合、
図8に示された符号の後のアルファベットを“A”から“C”に代えて説明を省略する場合がある。同様に、
図1に示すメモリシステム1と同様の構成について説明をする場合、
図1に示された符号の後にアルファベット“C”を付して説明を省略する場合がある。
【0105】
[4-1.ウェアレベリング履歴テーブル100Cの構成]
図18は、一実施形態に係る不揮発性メモリ及びメモリモジュールの構成を示すブロック図である。ウェアレベリング履歴テーブル100Cは、上記のように時間情報を格納している。当該時間情報は、ウェアレベリング処理が実行された時刻に関する情報であってもよく、他のウェアレベリング処理が実行されたときからの時間に関する情報であってもよい。当該時間情報は、前回のウェアレベリング処理が実行されたときから今回のウェアレベリング処理が実行されたときまでの間隔に関する情報であってもよい。
【0106】
ウェアレベリング履歴テーブル100Cは、当該時間情報に加えて、その他のメタデータを含んでいてもよい。当該メタデータとして、例えば、上記のヒット回数又はヒット率が含まれていてもよい。
【0107】
[4-2.ピニング処理のフローチャート]
図19は、一実施形態に係るメモリシステムのピニング処理を示すフローチャートである。本実施形態に係る
図19のフローチャートは、
図9のフローチャートと類似しているが、
図9ではステップS903の工程が設けられているのに対して、
図19ではステップS1903の工程が設けられている点において、両者は相違する。
図19にその他のステップS1901、S1902、S1904、S1905は、
図9に示すステップS901、S902、S904、S905と同様なので、説明を省略する。
【0108】
S1903では、更新に係るページが直近N回のウェアレベリング処理の対象であり、かつ、前回のウェアレベリング処理が実行されたときからの時間が閾値に達していない(閾値未満)か否かの判断が行われる。つまり、S1903では、ウェアレベリング履歴テーブル100Cに付加された上記の時間情報を参照することによって、ピニング処理の実行に対する要否が判断される。具体的には、ウェアレベリング処理の間隔が長い場合、つまり、前回のウェアレベリング処理が実行されたときから今回のウェアレベリング処理が実行されたときまでの時間が閾値に達している場合、ピニング処理されたデータに対するアクセス頻度が低く、ピニング処理を継続することは非効率であるため、当該ページをピニング処理の対象にしない(Pinアドレスリスト122Cに追加しない)と判断する。一方、前回のウェアレベリング処理が実行されたときから今回のウェアレベリング処理が実行されたときまでの時間が閾値未満である場合、ピニング処理されたデータに対するアクセス頻度が高く、ピニング処理を実行する実益があるため、S1904、S1905のステップを経て、当該ページをピニング処理の対象とする(Pinアドレスリスト122Cに追加する)と判断する。
【0109】
以上のように、本実施形態に係るメモリシステムによると、第2実施形態と同様の効果を得ることができる。また、時間情報に基づいてピニング処理の実行の要否が決定されるため、実情に沿って、アクセス頻度が高いページに対してピニング処理を実行することができる。
【0110】
[5.第5実施形態]
図20~
図22を用いて、第5実施形態に係るメモリシステム1Dについて説明する。第5実施形態に係るメモリシステム1Dの構成は、第1実施形態に係るメモリシステム1の構成(
図2参照)と類似するため、共通する部分の説明を省略し、主に相違点について説明する。第5実施形態では、第1バッファ15Dが、リードバッファ151D及びライトバッファ152Dを備えている点において、メモリシステム1と相違する。以下の説明において、
図2に示すメモリシステム1と同様の構成について説明をする場合、
図2に示された符号の後にアルファベット“D”を付して説明を省略する場合がある。同様に、
図1に示すメモリシステム1と同様の構成について説明をする場合、
図1に示された符号の後にアルファベット“D”を付して説明を省略する場合がある。
【0111】
[5-1.第1バッファ15Dの構成]
図20に示すように、第1バッファ15Dは、リードバッファ151D及びライトバッファ152Dを備えている。リードバッファ151Dは、読み出し動作用のバッファであり、CPU90Dからの読み出し要求に対して不揮発性メモリ20Dから読み出されたデータを格納する。ライトバッファ152Dは、書き込み動作用のバッファであり、CPU90Dからの書き込み要求に含まれ、不揮発性メモリ20Dに書き込む前のライトデータを格納する。
【0112】
[5-2.書き込み動作のフローチャート]
図21は、一実施形態に係るメモリシステムの書き込み動作を示すフローチャートである。メモリコントローラ10DがCPU90Dから書き込み要求を受信した場合、当該書き込み要求に係るライトデータがライトバッファ152Dに存在するか否かの判断が行われる(ステップS2101)。
【0113】
S2101において、ライトデータがライトバッファ152Dに存在すると判断された場合(S2101の「YES」)、ライトバッファ152Dにおけるエントリについて上書き処理が行われる(ステップS2102)。一方、S2101において、ライトデータがライトバッファ152Dに存在しないと判断された場合(S2101の「NO」)、当該ライトデータが第2バッファ110Dに存在するか否かの判断が行われる(ステップS2103)。
【0114】
S2103において、ライトデータが第2バッファ110に存在すると判断された場合(S2103の「YES」)、第2バッファ110におけるエントリについて上書き処理が行われる(ステップS2104)。一方、S2103において、ライトデータが第2バッファ110に存在しないと判断された場合(S2103の「NO」)、ライトデータがリードバッファ151Dに存在するか否かの判断が行われる(ステップS2105)。
【0115】
S2105において、ライトデータがリードバッファ151Dに存在すると判断された場合(S2105の「YES」)、リードバッファ151Dにおけるエントリの解放が行われる(ステップS2106)。S2106の後に、ライトバッファ152Dの容量に空きがあるか否かの判断が行われる(ステップS2107)。S2105において、ライトデータがリードバッファ151Dに存在しないと判断された場合(S2105の「NO」)も、S2107のステップが実行される。
【0116】
S2107において、ライトバッファ152Dの容量に空きがあると判断された場合(S2107の「YES」)、空きがある領域に当該ライトデータの書き込みが行われる(ステップS2108)。一方、S2107において、ライトバッファ152Dの容量に空きがないと判断された場合(S2107の「NO」)、ライトバッファ152Dにおけるデータの追い出しが行われ(ステップS2109)、ライトバッファ152Dの容量に空きが生じた領域に上記のライトデータの書き込みが行われる(S2108)。S2109におけるデータの追い出しの対象を選択する手段として、「FIFO」、「LFU」、又は「LRU」が採用されてもよい。
【0117】
[5-2.読み出し動作のフローチャート]
図22は、一実施形態に係るメモリシステムの読み出し動作を示すフローチャートである。メモリコントローラ10Dは、CPU90Dから読み出し要求を受信した場合、当該読み出し要求に係るリードアドレスのデータがリードバッファ151D又はライトバッファ152Dに存在するか否かの判断が行われる(ステップS2201)。
【0118】
S2201において、当該データがリードバッファ151D又はライトバッファ152Dに存在すると判断された場合(S2201の「YES」)、リードバッファ151D又はライトバッファ152Dに格納されたデータが出力される(ステップS2202)。一方、S2201において、当該データがリードバッファ151Dにもライトバッファ152Dにも存在しないと判断された場合(S2201の「NO」)、当該データが第2バッファ110Dに存在するか否かの判断が行われる(ステップS2203)。
【0119】
S2203において、上記データが第2バッファ110Dに存在すると判断された場合(S2203の「YES」)、第2バッファ110Dに格納されたデータが出力される(ステップS2204)。一方、S2203において、上記データが第2バッファ110Dに存在しないと判断された場合(S2203の「NO」)、リードバッファ151Dの容量に空きがあるか否かの判断が行われる(ステップS2205)。
【0120】
S2205において、リードバッファ151Dの容量に空きがあると判断された場合(S2205の「YES」)、不揮発性メモリ20Dから当該データが読み出され(ステップS2206)、読み出されたデータは、空きがある領域に書き込まれる(ステップS2207)。一方、S2205において、リードバッファ151Dの容量に空きがないと判断された場合(S2205の「NO」)、リードバッファ151Dにおけるデータの追い出しが行われ(ステップS2208)、リードバッファ151Dの容量に空きが生じた領域に不揮発性メモリ20Dから読み出されたデータの書き込みが行われたうえで(S2206、S2207)、S2202のデータ出力が実行される。
【0121】
[6.第6実施形態]
図23~
図25を用いて、第6実施形態に係るメモリシステム1Eについて説明する。第6実施形態に係るメモリシステム1Eの構成は、第2実施形態に係るメモリシステム1Aの構成と類似するため、共通する部分の説明を省略し、主に相違点について説明する。第6実施形態の構成は、
図1、
図8に示す構成と同じなので、図示を省略する。第6実施形態のメモリシステム1Eの構成について説明をする場合、
図8を参照しつつ、
図8に示された構成に対して表記された符号の後のアルファベットを“A”から“E”に代えて説明する。同様に、
図1に示すメモリシステム1と同様の構成について説明をする場合、
図1に示された符号の後にアルファベット“E”を付して説明を省略する場合がある。本実施形態におけるウェアレベリング処理は読み出し動作をトリガとして実行される。
【0122】
[6-1.ピニング処理のフローチャート]
図23は、一実施形態に係るメモリシステムのピニング処理を示すフローチャートである。本実施形態に係る
図23のフローチャートは、
図9のフローチャートと類似しているが、
図23では、
図9のS904に対応するS2304の後に、対象ページの論理アドレスに係るデータが第1バッファ15Eに存在するか否かの判断が行われる(ステップS2305)。当該データが第1バッファ15Eに存在すると判断された場合(S2305の「YES」)、対象ページに対してピニング処理が実行される(ステップS2306)。一方、当該データが第1バッファ15Eに存在しないと判断された場合(S2305の「NO」)、ウェアレベリング処理が実行されたページの論理アドレスがPinアドレスリスト122Eに追加される(ステップS2307)。
【0123】
[6-2.書き込み動作のフローチャート]
第6実施形態の書き込み動作のフローチャートは、
図14のフローチャートと同じである。
【0124】
[6-3.読み出し動作のフローチャート]
図24は、一実施形態に係るメモリシステムの読み出し動作を示すフローチャートである。メモリコントローラ10Eは、CPU90Eから読み出し要求を受信した場合、当該読み出し要求に係るリードアドレスのデータが第1バッファ15Eに存在するか否かの判断が行われる(ステップS2401)。
【0125】
S2401において、当該データが第1バッファ15Eに存在すると判断された場合(S2401の「YES」)、第1バッファ15Eに格納されたデータが出力され(ステップS2402)、
図24に示すフローは終了する。一方、S2401において、当該データが第1バッファ15Eに存在しないと判断された場合(S2401の「NO」)、第1バッファ15Eの容量に空きがあるか否かの判断が行われる(ステップS2403)。
【0126】
S2403において、第1バッファ15Eの容量に空きがあると判断された場合(S2403の「YES」)、不揮発性メモリ20Eから対象のリードデータが読み出され、空きがある領域に書き込まれる(ステップS2404)。一方、S2403において、第1バッファ15Eの容量に空きがないと判断された場合(S2403の「NO」)、第1バッファ15Eにおけるデータの追い出しが行われ(ステップS2405)、第1バッファ15Eの容量に空きが生じた領域に不揮発性メモリ20Eから読み出されたリードデータの書き込みが行われる(S2404)。S2405におけるデータの追い出しの対象を選択する手段として、「FIFO」、「LFU」、又は「LRU」が採用されてもよい。
【0127】
S2404において、リードデータの書き込みが完了すると、当該リードデータに対応するページの論理アドレスがPinアドレスリスト122Eに格納されているか否かの判断が行われる(ステップS2406)。S2406において、当該論理アドレスがPinアドレスリスト122Eに格納されている場合(S2406の「YES」)、当該論理アドレスに対応するページのデータに対してピニング処理が実行される(ステップS2407)。一方、S2406において、当該論理アドレスがPinアドレスリスト122Eに格納されていないと判断された場合(S2406の「NO」)、
図24に示すフローは終了する。
【0128】
以上、本発明について図面を参照しながら説明したが、本発明は上記の実施形態に限られるものではなく、本発明の趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、本実施形態のPin制御部を基にして、当業者が適宜構成要素の追加、削除もしくは設計変更を行ったものも、本発明の要旨を備えている限り、本発明の範囲に含まれる。さらに、上述した各実施形態は、相互に矛盾がない限り適宜組み合わせが可能であり、各実施形態に共通する技術事項については、明示の記載がなくても各実施形態に含まれる。
【0129】
上述した各実施形態の態様によりもたらされる作用効果とは異なる他の作用効果であっても、本明細書の記載から明らかなもの、又は、当業者において容易に予測し得るものについては、当然に本発明によりもたらされるものと解される。
【符号の説明】
【0130】
1:メモリシステム、 10:メモリコントローラ、 11:ホストインタフェース、 12:コマンド処理部、 13:NVM制御部、 14:疲弊管理部、 15:第1バッファ、 16:Pin制御部、 17A:ピニング管理テーブル、 19:内部バス、 20:不揮発性メモリ、 21:メモリチップ、 22:ブロック、 23:ページ、 100:ウェアレベリング履歴テーブル、 110:第2バッファ、 120A:ピニング領域、 121A:非ピニング領域、 122A:アドレスリスト、 123A:制御レジスタ、 124B:バッファ統計取得部、 151D:リードバッファ、 152D:ライトバッファ