(57)【要約】【課題】リード処理性能を可及的に向上させること。【解決手段】ＮＡＮＤメモリ１と、ＲＡＭ３と、ＲＡＭ３を使用してホスト装置２００とＮＡＮＤメモリ１との間のデータ転送を実行するコントローラ２と、を備え、コントローラ２は、ホスト装置２００から送信されてくるライトコマンド毎のデータをＲＡＭ３が備えるライトキャッシュ３２にキャッシュし、所定のタイミングで、ライトキャッシュ３２にキャッシュされているライトコマンド毎のデータを夫々先頭部分を残してＮＡＮＤメモリ１へ転送する。【選択図】図２
2011198133.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性の第１メモリと、
第２メモリと、
前記第２メモリを使用してホスト装置と前記第１メモリとの間のデータ転送を実行するコントローラと、
を備え、
前記コントローラは、前記ホスト装置から送信されてくるライトコマンド毎のデータを前記第２メモリにキャッシュし、所定のタイミングで、前記第２メモリにキャッシュされているライトコマンド毎のデータを夫々先頭部分を残して前記第１メモリへ転送する第１転送を実行する、
ことを特徴とするメモリシステム。
【請求項２】
前記所定のタイミングは、前記第２メモリにキャッシュされているデータ量が所定のしきい値を超えたタイミングである、ことを特徴とする請求項１に記載のメモリシステム。
【請求項３】
前記コントローラは、前記ライトコマンドに含まれる書き込みアドレスに基づいてキャッシュラインの管理を実行する、
ことを特徴とする請求項１に記載のメモリシステム。
【請求項４】
前記コントローラは、前記第１転送を実行する際、ライトコマンド毎のデータのサイズが小さいデータほど前記第２メモリに残す先頭部分のサイズが大きくなるように前記第２メモリにキャッシュされているライトコマンド毎のデータ毎に前記第２メモリに残す先頭部分のサイズを決定する、
ことを特徴とする請求項１に記載のメモリシステム。
【請求項５】
不揮発性の第１メモリと、第２メモリと、を備えるメモリシステムに搭載され、前記第２メモリを使用してホスト装置と前記第１メモリとの間のデータ転送を実行するコントローラであって、
前記コントローラは、前記ホスト装置から送信されてくるライトコマンド毎のデータを前記第２メモリにキャッシュし、所定のタイミングで、前記第２メモリにキャッシュされているライトコマンド毎のデータを夫々先頭部分を残して前記第１メモリへ転送する第１転送を実行する、
ことを特徴とするコントローラ。
【請求項６】
前記ライトコマンドに含まれる書き込みアドレスに基づいてキャッシュラインの管理を実行する、ことを特徴とする請求項５に記載のコントローラ。
【請求項７】
前記第１転送を実行する際、ライトコマンド毎のデータのサイズが小さいデータほど前記第２メモリに残す先頭部分のサイズが大きくなるように前記第２メモリにキャッシュされているライトコマンド毎のデータ毎に前記第２メモリに残す先頭部分のサイズを決定する、
ことを特徴とする請求項５に記載のコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリシステムおよびコントローラに関する。
【背景技術】
【０００２】
不揮発性メモリであるＮＡＮＤ型フラッシュメモリ（以下、単にＮＡＮＤメモリ）は、ハードディスクに比べ、高速、軽量などの利点を有している。また、ＮＡＮＤメモリは、ＮＯＲ型フラッシュメモリを含む他のフラッシュメモリに比べて大容量化・高集積化を行いやすい。これらの特徴を有するＮＡＮＤメモリを搭載したＳＳＤ（Solid  State  Drive）は、磁気ディスク装置に替わる大容量の外部記憶装置として注目されている。
【０００３】
磁気ディスク装置をＮＡＮＤメモリを搭載したＳＳＤに置き換える際の問題点の一つとして、ＮＡＮＤメモリが読み書き(特に書き込み)アクセスに耐えられる回数（アクセス制限回数）が少ないことが挙げられる。この問題に対応できる１つの解として、ＮＡＮＤメモリへ書き込む前にＤＲＡＭなどの高速リード／ライトが可能なメモリ(ＲＡＭ)を経由させることが挙げられる。具体的には、ＳＳＤは、ホスト装置から送信されてきた小容量データをＲＡＭに貯めておき、大容量データをして扱えるようになった際に、ＲＡＭに貯めてあったデータをブロック単位などの大きな単位でＮＡＮＤメモリへ書き込む（例えば特許文献１参照）。
【０００４】
一般的に、ホスト装置からのリードコマンドに対するレスポンスの速度や、リード処理完了までにかかる時間は、ＳＳＤのリード処理に関する性能指標として重視される。上記したホスト装置からのデータを一時的に記憶するＲＡＭを有するＳＳＤにおいても、ホスト装置からのリードコマンドに対するレスポンスの速度およびリードにかかる速度を向上させる技術の開発が要望されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−３３７８８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明は、リード処理性能を可及的に向上させたメモリシステムおよびコントローラを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本願発明の一態様によれば、不揮発性の第１メモリと、第２メモリと、前記第２メモリを使用してホスト装置と前記第１メモリとの間のデータ転送を実行するコントローラと、を備え、前記コントローラは、前記ホスト装置から送信されてくるライトコマンド毎のデータを前記第２メモリにキャッシュし、所定のタイミングで、前記第２メモリにキャッシュされているライトコマンド毎のデータを夫々先頭部分を残して前記第１メモリへ転送する第１転送を実行する、ことを特徴とするメモリシステムが提供される。
【０００８】
また、本願発明の一態様によれば、不揮発性の第１メモリと、第２メモリと、を備えるメモリシステムに搭載され、前記第２メモリを使用してホスト装置と前記第１メモリとの間のデータ転送を実行するコントローラであって、前記コントローラは、前記ホスト装置から送信されてくるライトコマンド毎のデータを前記第２メモリにキャッシュし、所定のタイミングで、前記第２メモリにキャッシュされているライトコマンド毎のデータを夫々先頭部分を残して前記第１メモリへ転送する第１転送を実行する、ことを特徴とするコントローラが提供される。
【発明の効果】
【０００９】
本発明によれば、リード処理性能を可及的に向上させることができるという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】図１は、第１の実施の形態のＳＳＤのハードウェア構成を示す図である。
【図２】図２は、ホスト装置からデータが書き込まれる際の動作を説明する図である。
【図３】図３は、ホスト装置からデータが読み出される際の動作を説明する図である。
【図４】図４は、ホスト装置へのデータ転送にかかる時間を説明する図である。
【図５】図５は、第１の実施の形態のＳＳＤの機能構成を説明する図である。
【図６】図６は、ＬＢＡアドレスとタグ情報テーブルおよびライン情報との関係を説明する図である。
【図７】図７は、コマンド管理テーブルを説明する図である。
【図８】図８は、ライト処理における第１の実施の形態のＳＳＤの動作を説明するフローチャートである。
【図９】図９は、リード処理における第１の実施の形態のＳＳＤの動作を説明するフローチャートである。
【図１０】図１０は、第２の実施の形態のＳＳＤの機能構成を説明する図である。
【図１１】図１１は、ライン情報を説明する図である。
【図１２】図１２は、ライト処理における第２の実施の形態のＳＳＤの動作を説明するフローチャートである。
【図１３】図１３は、第３の実施の形態のＳＳＤの機能構成を説明する図である。
【図１４】図１４は、ライト処理における第３の実施の形態のＳＳＤの動作を説明するフローチャートである。
【図１５】図１５は、先頭サイズ決定処理を説明するフローチャートである。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照して、本発明の実施の形態にかかるメモリシステムを詳細に説明する。なお、これらの実施の形態により本発明が限定されるものではない。
【００１２】
（第１の実施の形態）
図１は、メモリシステムのハードウェア構成を説明する図である。本第１の実施の形態においては、メモリシステムの一例として、ハードディスクドライブ（ＨＤＤ）と同じ接続インタフェース規格（ＡＴＡ規格）を持つ、不揮発性半導体メモリであるＮＡＮＤ型フラッシュメモリ（以下、ＮＡＮＤメモリ）を備えるＳＳＤを取り上げて説明する。なお、第１の実施の形態の適用範囲はＳＳＤのみに限定されない。
【００１３】
図１において、ＳＳＤ１００とホスト装置２００との間はＡＴＡ規格の通信インタフェースで接続されている。ＳＳＤ１００は、ホスト装置２００から、ユーザデータを書き込むためのライトコマンド、ユーザデータを読み出すためのリードコマンドを受信する。リード／ライトコマンドは、ユーザデータの書き込みアドレスとしての先頭のＬＢＡ（Logical  Block  Addressing）アドレスと該ユーザデータのサイズとを含んでいる。１つのリード／ライトコマンドにより読み出し／書き込み要求されるユーザデータは例えば１つのファイルであり、セクタのサイズ（例えば、５１２Ｂｙｔｅ）の自然数倍のサイズを有する。
【００１４】
ＳＳＤ１００は、不揮発性半導体メモリチップであるＮＡＮＤメモリチップを備える、ホスト装置２００からリード／ライトされるユーザデータ（以下、データ）が格納される第１メモリとしてのＮＡＮＤメモリ１と、ホスト装置２００とＮＡＮＤメモリ１との間のデータ転送を制御するコントローラ２と、ホスト装置２００からのデータ（ライトデータ）が一時蓄積される第２メモリとしてのＲＡＭ（Random  Access  Memory）３と、を備えている。
【００１５】
コントローラ２は、ＮＡＮＤメモリ１とＲＡＭ３を制御してホスト装置２００とＮＡＮＤメモリ１との間のデータ転送を行う。このデータ転送を行うための構成として、コントローラ２は以下の構成要素をさらに有する。すなわち、コントローラ２は、ＲＯＭ（Read  Only  Memory）４と、ＭＰＵ５と、インタフェース（Ｉ／Ｆ）制御回路６と、ＲＡＭ制御回路７と、ＮＡＮＤ制御回路８と、を備えている。
【００１６】
Ｉ／Ｆ制御回路６は、ＡＴＡインタフェースを介してホスト装置２００との間でユーザデータを送受信する。ＲＡＭ制御回路７は、ＲＡＭ３との間でユーザデータを送受信する。ＮＡＮＤ制御回路８は、ＮＡＮＤメモリ１との間でユーザデータを送受信する。
【００１７】
ＲＯＭ４には、ＮＡＮＤメモリ１に記憶されている管理プログラム（ファームウェア）をブートするブート用プログラムが格納されている。ＭＰＵ５は前記ファームウェアをブートしてＲＡＭ３上に展開し、ＲＡＭ３上に展開したファームウェアに基づいてコントローラ２全体を制御する。
【００１８】
ＲＡＭ３は、ホスト装置２００とＮＡＮＤメモリ１間でのデータ転送用のキャッシュおよび作業領域用メモリなどとして機能する。ＲＡＭ３には、ＤＲＡＭ（Dynamic  Random  Access  Memory）、ＳＲＡＭ（Static  Random  Access  Memory）、ＦｅＲＡＭ（Ferroelectric  Random  Access  Memory）、ＭＲＡＭ（Magnetoresistive  Random  Access  Memory）、ＲｅＲＡＭ（Resistance  Random  Access  Memory）などを採用することができる。ＲＡＭ３の作業領域には、前記したファームウェアが展開され、また、キャッシュを管理するための各種情報（後述する）が格納される。
【００１９】
本発明の第１の実施の形態では、ＲＡＭ３に実現されるキャッシュを活用してリード処理性能を向上させる。図２〜図４を参照して、本発明の第１の実施の形態の特徴を概要的に説明する。図２は、ホスト装置２００からデータが書き込まれる際の動作を説明する図であり、図３は、ホスト装置２００からデータが読み出される際の動作を説明する図である。
【００２０】
図２に示すように、ＲＡＭ３は、ホスト装置２００から書き込み要求されたデータがキャッシュされるライトキャッシュ３２と、ＮＡＮＤメモリ１から読み出されたデータがキャッシュされるリードキャッシュ３１と、を備えている。ライトキャッシュ３２は、１つのライトコマンド（ライトコマンドＡ）によるライトデータであるデータＡをキャッシュしている。データＡは、ＮＡＮＤメモリ１の書き込み／読み出しアクセスの際の単位サイズとなるページ単位のデータＡ１〜Ａ３により構成されている。同様に、ライトキャッシュ３２は、夫々ページ単位のデータから構成されるライトコマンドＢ〜Ｈにかかるライトコマンド単位のデータＢ〜Ｈを夫々キャッシュしている。そして、新たなデータＩを書き込むライトコマンドＩをホスト装置２００から受信した場合において、ライトキャッシュ３２にキャッシュされているデータの量が所定のしきい値を超えているとき、ＳＳＤ１００は、キャッシュされているライトコマンド毎のライトデータを先頭の数ページ分（ここでは２ページ分）のデータを残してＮＡＮＤメモリ１へ退避させる（第１転送）。例えば、データＡは、データＡ１およびデータＡ２を残し、データＡ３のみがＮＡＮＤメモリ１へ退避されている。
【００２１】
ホスト装置２００は、ユーザデータの読み出しを実行する際、ライトコマンド単位のデータを部分的に読み出し要求するケースよりも、ライトコマンド発行時と同一のＬＢＡアドレスおよびデータサイズをリードコマンドで指定することによって、ライトコマンド単位のデータを１つのリードコマンドで読み出し要求するケースが多い。図３に示すように、データＡを読み出すリードコマンドＡをホスト装置２００から受信したとき、ＳＳＤ１００は、ライトキャッシュ３２にキャッシュされていたデータＡの先頭２ページ分のデータＡ１、Ａ２をホスト装置２００へ転送開始するとともに、残るデータＡ３をＮＡＮＤメモリ１から読み出して、読み出したＡ３をリードキャッシュ３１にキャッシュさせる。そして、ＳＳＤ１００は、データＡ１、Ａ２をホスト装置２００へ転送した後、リードキャッシュ３１にキャッシュしたデータＡ３を転送する。
【００２２】
図４は、ホスト装置２００へのデータＡの転送にかかる時間を、ライトデータが先頭部分と残りの部分との区別なくＮＡＮＤメモリ１へ退避される場合（以下、比較例という）と比較して説明する図である。なお、ＮＡＮＤメモリ１の読み出しレイテンシをｔ＿Ｒ、ＮＡＮＤメモリ１からＲＡＭ３への１ページ分の転送時間をｔ＿ＮＲ、ホスト装置２００とＲＡＭ３との間の１ページ分の転送時間をｔ＿ＨＲとしている。
【００２３】
比較例では、図４（ａ）に示すように、リードコマンドＡを受信したとき、ＮＡＮＤメモリ１に格納されているデータＡ１〜Ａ３が順次読み出されてライトキャッシュ３２に格納され、個々のデータＡ１〜Ａ３は、ライトキャッシュ３２に格納完了次第、順次ホスト装置２００へ転送開始される。したがって、ホスト装置２００は、リードコマンドＡを発行してから、ｔ＿Ｒ＋ｔ＿ＮＲが経過した後にレスポンスが得られ、ｔ＿Ｒ＋３×ｔ＿ＮＲ＋ｔ＿ＨＲが経過した後にデータＡのリード処理が完了する。これに対して、本第１の実施の形態の例では、図４（ｂ）に示すように、リードコマンドＡを発行するとＳＳＤ１００はライトキャッシュ３２からのデータＡ１の転送を開始するので、ホスト装置２００は、リードコマンドＡの発行後、直ちにレスポンスが得られる。そして、リードコマンドＡを発行してからｔ＿Ｒ＋ｔ＿ＮＲ＋ｔ＿ＨＲが経過した後にデータＡのリード処理が完了する。つまり、第１の実施の形態によると、比較例にかかる技術に比して、レスポンスの速度が向上し、リード処理が完了するまでの時間が短縮される。
【００２４】
このように、第１の実施の形態は、リード処理性能を向上させるために、ライトコマンド毎のデータの先頭部分をライトキャッシュに極力残すようにしたことが主たる特徴となっている。図５は、上述の特徴を実現するためのＳＳＤ１００の機能構成を説明する図である。図示するように、ＭＰＵ５は、ライトコマンドに対応して、ライトデータのライトキャッシュ３２への格納、ライトキャッシュ３２からＮＡＮＤメモリ１へのデータの退避（転送）を実行するライト処理と、リードコマンドに対応して、該リードコマンドにかかるデータをライトキャッシュ３２または／およびＮＡＮＤメモリ１からホスト装置２００へ転送するリード処理と、の制御を実行するリード／ライト処理部５１を備えている。
【００２５】
ＲＡＭ３は、キャッシュ３１、３２を備えているほか、ライトキャッシュ３２を管理するための情報として、タグ情報テーブル３３、キャッシュライン毎のライン情報３４、ＬＲＵ（Least  Recently  Used）管理テーブル３５、コマンド管理テーブル３６が格納される。なお、これらの情報は、ＲＡＭ３以外の記憶部に格納されるようにしてもよい。例えば、コントローラ２の中または外にメモリを設け、該メモリに格納するようにしてもよい。
【００２６】
図６は、ＬＢＡアドレスとタグ情報テーブル３３およびライン情報３４との関係を説明する図である。図示するように、ライトキャッシュ３２では、各キャッシュラインに格納されているデータを特定するために、ＬＢＡアドレスのうちのキャッシュラインのサイズ（ライン単位サイズ）分のオフセットを除いたライン単位アドレスが使用される。すなわち、ライトキャッシュ３２は、ＬＢＡアドレスに基づいてキャッシュラインの管理がなされる。具体的には、タグ情報テーブル３３は、ライン単位アドレスのＬＳＢの数ビット（上位桁アドレス）をインデックス（Ｉｎｄｅｘ）とし、インデックス毎に複数（ｎウェイ）のタグ（Ｔａｇ）を有する。各タグには、ライン単位アドレス３３１と、該ライン単位アドレスに対応するライン情報へのポインタ３３２が記憶されている。リード／ライト処理部５１は、対象のデータのライン単位アドレスと、該ライン単位アドレスの下位桁アドレスをインデックスとする各タグに記憶されているライン単位アドレス３３１とを比較することによって対象のデータのキャッシュヒット／キャッシュミスを判定することができる。なお、ライン単位サイズは任意であるが、ここではページサイズに等しいとして説明する。また、タグ情報テーブル３３は、インデックス毎に複数のタグを有するセットアソシアティブ方式が採用されているものとして説明するが、夫々１つのタグしか有さないダイレクトマップ方式が採用されるようにしてもよい。
【００２７】
各キャッシュラインに格納されているデータ（ライン単位データ）に対応するライン情報３４は、対応するライン単位データに含まれるセクタ毎のデータの夫々が有効であるか無効であるかを示すセクタビットマップ３４１と、該ライン単位データのライトキャッシュ３２内における格納先アドレスであるライトキャッシュ内アドレス３４２と、を含んでいる。リード／ライト処理部５１は、キャッシュヒットした場合、ライトキャッシュ内アドレス３４２を参照することによってライトキャッシュ３２内における対象のライン単位データの格納位置を認識することができる。
【００２８】
タグ情報テーブル３３では、管理されるインデックス毎の最大タグ数（ウェイ数）が決められている。リード／ライト処理部５１は、格納先のインデックスのウェイが空いていないとき（キャッシュラインが空いていないとき）、同インデックスのキャッシュラインのうちの１つに格納されているデータをＮＡＮＤメモリ１へ追い出して、キャッシュラインの空きを作る（第２転送）。ＬＲＵ管理テーブル３５は、最後にアクセスされた時間が最も古いタグほど追い出し優先順位が高くなるようにインデックス毎に各タグの追い出し優先順位を管理するテーブルであって、リード／ライト処理部５１は、ＬＲＵ管理テーブル３５に基づいて、最も古いキャッシュラインを追い出し対象として選択する。
【００２９】
図７は、コマンド管理テーブル３６を説明する図である。図示するように、コマンド管理テーブル３６は、ホスト装置２００からライトされたデータの先頭ＬＢＡとデータサイズ（セクタ数）とをライトコマンド毎に管理するテーブルである。リード／ライト処理部５１は、コマンド管理テーブル３６を参照することによって、リードコマンド単位のデータ毎に先頭部分を認識（識別）することができる。また、リード／ライト処理部５１は、キャッシュライン毎のキャッシュデータが属するリードコマンドを認識することができる。
【００３０】
次に、上述のように構成されるＳＳＤ１００における動作を、図８および図９を参照して説明する。
【００３１】
図８は、ライト処理におけるＳＳＤ１００の動作を説明するフローチャートである。図示するように、ライトコマンドを受信してライト処理がスタートすると、リード／ライト処理部５１は、受信したライトコマンドをコマンド管理テーブル３６に追加する（ステップＳ１）。そして、リード／ライト処理部５１は、ライトキャッシュ３２は所定のしきい値以上の量のデータをキャッシュしているか否かを判定する（ステップＳ２）。
【００３２】
ライトキャッシュ３２が所定のしきい値以上の量のデータをキャッシュしていた場合（ステップＳ２、Ｙｅｓ）、リード／ライト処理部５１は、コマンド管理テーブル３６を参照して、ライトコマンド毎のキャッシュデータを先頭の所定ページ数分を残して残りをＮＡＮＤメモリ１へ退避させ、退避させたライン単位データに対応するタグ情報テーブル３３上のタグおよびライン情報３４を消去する（ステップＳ３）。ライトキャッシュ３２が所定のしきい値以上の量のデータをキャッシュしていなかった場合（ステップＳ２、Ｎｏ）、ステップＳ３の動作はスキップされる。
【００３３】
続いて、リード／ライト処理部５１は、ライトコマンドのＬＢＡアドレスおよびデータサイズから、ライトキャッシュ３２の格納先を検索するために、ライン単位データ毎の先頭ＬＢＡアドレスを算出し（ステップＳ４）、算出した先頭ＬＢＡアドレスのうちの１つを選択する（ステップＳ５）。なお、ライン単位データ毎の先頭ＬＢＡアドレスは、ライトコマンドが含む先頭ＬＢＡアドレスから該先頭ＬＢＡアドレスにライトコマンドが含むデータサイズ分を加算したアドレス値に至るまでライン単位サイズ刻みでアドレス値を分割することによって算出することができる。ステップＳ５の後、リード／ライト処理部５１は、選択した先頭ＬＢＡアドレスに対応するキャッシュラインが空いているか否かを判定する（ステップＳ６）。リード／ライト処理部５１は、選択した先頭ＬＢＡアドレスを用いてタグ情報テーブル３３を検索し、キャッシュミスした場合、該キャッシュラインが空いており、キャッシュヒットした場合、該キャッシュラインが空いていないと判定する。
【００３４】
キャッシュラインが空いていなかった場合（ステップＳ６、Ｎｏ）、リード／ライト処理部５１は、ＬＲＵ管理テーブル３５を参照して追い出し対象のキャッシュラインを決定し、該キャッシュラインに格納されていたデータおよび該データと同一のライトコマンドに属するデータをＮＡＮＤメモリ１へ退避させるとともに、退避させたデータに対応するタグおよびライン情報３４を削除し、退避させたデータが属するライトコマンドをコマンド管理テーブル３６から削除する（ステップＳ７）。リード／ライト処理部５１は、コマンド管理テーブル３６を参照することによって、追い出し対象のキャッシュラインに格納されていたデータと同一のライトコマンドに属するデータを求めることができる。
【００３５】
ステップＳ７の後、リード／ライト処理部５１は、データの追い出しにより空いたキャッシュラインにライトデータのうちの選択した先頭ＬＢＡアドレスからライン単位サイズ分のデータを書き込み、書き込んだデータに対応するタグおよびライン情報３４を追加する（ステップＳ８）。そして、リード／ライト処理部５１は、算出した先頭ＬＢＡアドレスを全て選択済みであるか否かを判定し（ステップＳ９）、選択済みで無い場合（ステップＳ９、Ｎｏ）、ステップＳ５に移行して未選択の先頭ＬＢＡアドレスを１つ選択する。
【００３６】
ステップＳ６において、選択した先頭ＬＢＡアドレスに対応するキャッシュラインが空いていた場合（ステップＳ６、Ｙｅｓ）、リード／ライト処理部５１は、該ラインにライトデータのうちの選択した先頭ＬＢＡアドレスからライン単位サイズ分のデータを書き込み、書き込んだデータに対応するタグおよびライン情報３４を追加する（ステップＳ１０）。そして、ステップＳ９へ移行する。
【００３７】
ステップＳ９において、算出した先頭ＬＢＡアドレスを全て選択済みであった場合（ステップＳ９、Ｙｅｓ）、リード／ライト処理部５１は、書き込んだライン単位データに対応するタグの優先順位が同一インデックス内のタグのうちで最下位になるようにＬＲＵ管理テーブル３５を更新し（ステップＳ１１）、ライト処理がリターンとなる。
【００３８】
図９は、リード処理におけるＳＳＤ１００の動作を説明するフローチャートである。なお、ここでは、ライトコマンド単位のデータがリードコマンドによって読み出し要求された場合について説明する。
【００３９】
図９に示すように、リードコマンドを受信してリード処理がスタートすると、リード／ライト処理部５１は、リードコマンドから、ライン単位データ毎の先頭ＬＢＡアドレスを算出する（ステップＳ２１）。そして、リード／ライト処理部５１は、算出した先頭ＬＢＡアドレス毎にタグ情報テーブル３３を検索して、算出した先頭ＬＢＡアドレスのライン単位データのうち、ライトキャッシュ３２にキャッシュされていないデータがあるか否かを判定する（ステップＳ２２）。ライトキャッシュ３２にキャッシュされていないデータがなかった場合（ステップＳ２２、Ｎｏ）、リード／ライト処理部５１は、ライトキャッシュ３２から、算出した先頭ＬＢＡアドレスのライン単位データを逐次読み出して、読み出したライン単位データを逐次ホスト装置２００へ転送する（ステップＳ２３）。そして、リード／ライト処理部５１は、読み出したライン単位データに対応するタグの優先順位が同一インデックス内のタグのうちで最下位になるようにＬＲＵ管理テーブル３５を更新し（ステップＳ２４）、リード処理がリターンとなる。
【００４０】
ステップＳ２２において、ライトキャッシュ３２にキャッシュされていないデータがあった場合（ステップＳ２２、Ｙｅｓ）、リード／ライト処理部５１は、ライトキャッシュ３２にキャッシュされていないライン単位データをＮＡＮＤメモリ１からリードキャッシュ３１へ転送開始する（ステップＳ２５）。そして、リード／ライト処理部５１は、算出した先頭ＬＢＡアドレス毎にタグ情報テーブル３３を検索して、算出した先頭ＬＢＡアドレスのライン単位データのうち、ライトキャッシュ３２にキャッシュされているデータ（すなわちリードコマンドにより読み出し要求されたデータの先頭部分）があるか否かを判定する（ステップＳ２６）。ライトキャッシュ３２にキャッシュされているデータがあった場合（ステップＳ２６、Ｙｅｓ）、リード／ライト処理部５１は、ライトキャッシュ３２にキャッシュされているデータを逐次読み出してホスト装置２００へ転送する（ステップＳ２７）。そして、リード／ライト処理部５１は、読み出したライン単位データに対応するタグの優先順位が同一インデックス内のタグのうちで最下位になるようにＬＲＵ管理テーブル３５を更新する（ステップＳ２８）。そして、キャッシュされていたデータの転送完了後、リード／ライト処理部５１は、リードキャッシュ３１に転送されたデータを逐次読み出してホスト装置２００へ転送し（ステップＳ２９）、リード処理がリターンとなる。ステップＳ２６において、ライトキャッシュ３２にキャッシュされているデータが無かった場合（ステップＳ２６、Ｎｏ）、ステップＳ２７およびステップＳ２８はスキップされる。
【００４１】
なお、ＬＲＵ管理テーブル３５を省略し、タグ情報テーブル３３およびコマンド管理テーブル３６を参照して、最もサイズが大きいコマンド単位のデータを求め、該求めたコマンド単位のデータを追い出すようにしてもよい。例えば、３ページ分のサイズを有するライトコマンド単位のデータＡをＮＡＮＤメモリ１から読み出す場合、レスポンスが得られるまでの経過時間は、ｔ＿Ｒ＋ｔ＿ＮＲ、リード処理が完了するまでの経過時間は、ｔ＿Ｒ＋３ｔ＿ＮＲ＋ｔ＿ＨＲとなる。また、５ページ分のサイズを有するライトコマンド単位のデータＢをＮＡＮＤメモリ１から読み出す場合、レスポンスが得られるまでの経過時間はデータＡの場合と同等で、リード処理が完了するまでの経過時間は、ｔ＿Ｒ＋５ｔ＿ＮＲ＋ｔ＿ＨＲとなる。つまり、データのサイズが大きいほど、リード処理完了にかかる時間に対するレスポンスの遅さの影響が相対的に小さくなる。したがって、コマンド単位のデータのサイズが大きいデータを優先してＮＡＮＤメモリ１へ退避させることによって、単にＬＲＵルールに基づいてデータを退避させる場合に比べてさらにリード処理性能を向上させることができるようになる。
【００４２】
また、ＬＲＵ管理テーブル３５の代わりに、書き込み効率の高いデータを格納するキャッシュラインほど優先順位が高くなるようにインデックス毎に各タグの追い出し優先順位を管理するテーブルを備え、リード／ライト処理部５１は、該テーブルに基づいて、書き込み効率が最も高いデータを格納するキャッシュラインを追い出し対象として選択するようにしてもよい。
【００４３】
また、コマンド単位でデータを追い出すものとして説明したが、ライン単位でデータを追い出すようにしてもよい。なお、コマンド単位でデータを追い出す場合、ライン単位でデータを追い出す場合に比してライトキャッシュ３２にキャッシュされているデータ量を減らすことができ、ひいてはステップＳ３の退避処理およびステップＳ７の追い出し処理の頻度を低減することができる。
【００４４】
また、ライトキャッシュ３２に残す先頭部分のサイズの設定は任意であるが、先頭部分のサイズの設定値が大きすぎるとライトキャッシュ３２にキャッシュされるデータ量が多くなり、ステップＳ３における退避処理およびステップＳ７における追い出し処理の頻度が上昇し、ライト処理性能が低下する。したがって、残す先頭部分のサイズをむやみに大きくすることはせず、ＮＡＮＤメモリ１から読み出された最初のデータがホスト装置２００へ転送されるまでにかかる時間ｔ＿Ｒ＋ｔ＿ＮＲをほぼ隠蔽できる程度のサイズとするとよい。
【００４５】
また、ＳＳＤ１００は、ライトキャッシュ３２にキャッシュされているデータ量が所定のしきい値を超えたときステップＳ３の退避処理を実行するとして説明したが、該退避処理のタイミングはどのようなタイミングで行われるようにしても構わない。例えば定期的に行われるようにしても構わない。
【００４６】
また、ＲＡＭ３としてＦｅＲＡＭのような不揮発性メモリを採用する場合、各タグにライン単位データの有効／無効を示すフラグを付し、ライン単位データの退避および追い出しを実行した際に該フラグを無効とすることによって該ライン単位データが消去されたこととして扱うようにしてもよい。
【００４７】
以上説明したように、本発明の第１の実施の形態によれば、ホスト装置２００から送信されてくるライトコマンド毎のデータをＲＡＭ３が備えるライトキャッシュ３２にキャッシュし、所定のタイミングで、ライトキャッシュ３２にキャッシュされているライトコマンド毎のデータを夫々先頭部分を残してＮＡＮＤメモリ１へ転送するようにしたので、ホスト装置２００からのリードコマンドを受信したときにライトキャッシュ３２にキャッシュされている先頭部分を直ちにホスト装置２００へ転送することができるので、リードコマンドに対するレスポンスが速くなるとともにリード処理が完了するまでにかかる時間が短縮される。すなわち、リード処理性能を可及的に向上させることができる。
【００４８】
（第２の実施の形態）
第２の実施の形態では、リード処理時においてライトキャッシュのヒット率を向上させるために、ライトキャッシュからＮＡＮＤメモリへキャッシュデータを退避させたとき、ライトキャッシュに退避済みのデータのコピーを残しておくようにしたことが特徴となっている。
【００４９】
第２の実施の形態のＳＳＤ３００のハードウェア構成は、第１の実施の形態と同等であるので、説明を省略する。図１０は、第２の実施の形態のＳＳＤ３００の機能構成を説明する図である。なお、ここでは、第１の実施の形態と同等の構成要素については同一の符号を付し、詳細な説明は省略する。
【００５０】
図１０に示すように、ＭＰＵ５は、ＳＳＤ３００のリード処理およびライト処理の制御を実行するリード／ライト処理部５２を備えている。また、ＲＡＭ３には、キャッシュ３１、３２を備えているほか、タグ情報テーブル３３、ライン情報３７、ＬＲＵ管理テーブル３５、コマンド管理テーブル３６が格納される。
【００５１】
図１１は、ライン情報３７を説明する図である。図示するように、ライン情報３７は、セクタビットマップ３４１と、ライトキャッシュ内アドレス３４２と、ＮＡＮＤ格納フラグ３７１と、を備えている。ＮＡＮＤ格納フラグ３７１は、対応するライン単位データがＮＡＮＤメモリ１にコピー済みであるか否かを判定するために用いられる。
【００５２】
図１２は、ライト処理におけるＳＳＤ３００の動作を説明するフローチャートである。図示するように、ライトコマンドを受信してライト処理がスタートすると、リード／ライト処理部５２は、受信したライトコマンドをコマンド管理テーブル３６に追加する（ステップＳ３１）。そして、リード／ライト処理部５２は、ライトキャッシュ３２は所定のしきい値以上の量のデータをキャッシュしているか否かを判定する（ステップＳ３２）。
【００５３】
ライトキャッシュ３２が所定のしきい値以上の量のデータをキャッシュしていた場合（ステップＳ３２、Ｙｅｓ）、リード／ライト処理部５２は、コマンド管理テーブル３６を参照して、ライトコマンド毎のキャッシュデータを先頭の所定ページ数分を残して残りをＮＡＮＤメモリ１へコピーし（言い換えると、ライトコマンド毎のキャッシュデータを先頭の所定ページ数分を残して残りをＮＡＮＤメモリ１へ転送するとともに、転送済みのデータのコピーを元のキャッシュラインに残し）、コピーしたキャッシュデータに対応するＮＡＮＤ格納フラグ３７１を立てる（ステップＳ３３）。ライトキャッシュ３２が所定のしきい値以上の量のデータをキャッシュしていなかった場合（ステップＳ３２、Ｎｏ）、ステップＳ３３の動作はスキップされる。
【００５４】
続いて、リード／ライト処理部５２は、ライトコマンドのＬＢＡアドレスおよびデータサイズから、ライトキャッシュ３２の格納先を検索するために、ライン単位データ毎の先頭ＬＢＡアドレスを算出し（ステップＳ３４）、算出した先頭ＬＢＡアドレスのうちの１つを選択する（ステップＳ３５）。そして、リード／ライト処理部５２は、タグ情報テーブル３３に基づいて、選択した先頭ＬＢＡアドレスに対応するキャッシュラインが空いているか否かを判定する（ステップＳ３６）。
【００５５】
キャッシュラインが空いていなかった場合（ステップＳ３６、Ｎｏ）、リード／ライト処理部５２は、ＬＲＵ管理テーブル３５を参照して追い出し対象のキャッシュラインを決定する（ステップＳ３７）。そして、リード／ライト処理部５２は、追い出し対象のキャッシュラインに格納されているデータおよび該データと同一のライトコマンドに属するデータのうち、ＮＡＮＤ格納フラグ３７１が立っているデータを削除し、削除したデータに対応するタグおよびライン情報３７を削除し、削除したデータが属するライトコマンドをコマンド管理テーブル３６から削除する（ステップＳ３８）。さらに、リード／ライト処理部５２は、追い出し対象のキャッシュラインに格納されているデータおよび該データと同一のライトコマンドに属するデータのうち、ＮＡＮＤ格納フラグ３７１が立っているデータをＮＡＮＤメモリ１に退避させ、退避させたデータに対応するタグおよびライン情報３７を削除し、退避させたデータが属するライトコマンドをコマンド管理テーブル３６から削除する（ステップＳ３９）。
【００５６】
そして、リード／ライト処理部５２は、データの追い出しにより空いたキャッシュラインにライトデータのうちの選択した先頭ＬＢＡアドレスからライン単位サイズ分のデータを書き込み、書き込んだデータに対応するタグ及びライン情報３７を追加する（ステップＳ４０）。そして、リード／ライト処理部５２は、算出した先頭ＬＢＡアドレスを全て選択済みであるか否かを判定し（ステップＳ４１）、選択済みで無い場合（ステップＳ４１、Ｎｏ）、ステップＳ３５に移行して未選択の先頭ＬＢＡアドレスを１つ選択する。
【００５７】
ステップＳ３６において、選択した先頭ＬＢＡアドレスに対応するキャッシュラインが空いていた場合（ステップＳ３６、Ｙｅｓ）、リード／ライト処理部５２は、該ラインにライトデータのうちの選択した先頭ＬＢＡアドレスからライン単位サイズ分のデータを書き込み、書き込んだデータに対応するタグおよびライン情報３７を追加する（ステップＳ４２）。そして、ステップＳ４１へ移行する。
【００５８】
ステップＳ４１において、算出した先頭ＬＢＡアドレスを全て選択済みであった場合（ステップＳ４１、Ｙｅｓ）、リード／ライト処理部５２は、書き込んだライン単位データに対応するタグの優先順位が同一インデックス内のタグのうちで最下位になるようにＬＲＵ管理テーブル３５を更新し（ステップＳ４３）、ライト処理がリターンとなる。
【００５９】
このように、第２の実施の形態によれば、ＮＡＮＤメモリ１に転送済みのライトコマンド毎のデータのコピーを該データがキャッシュされていたキャッシュラインに残し、該キャッシュラインが新たなライトコマンド毎のデータのキャッシュ先となったとき、該キャッシュラインにキャッシュされていたライトコマンド毎のデータを削除する、ように構成したので、第１の実施の形態に比してキャッシュされているデータの量が増え、結果としてリード処理時におけるライトキャッシュ３２のヒット率を向上させることができる。
【００６０】
（第３の実施の形態）
前述のように、ライトコマンド単位のデータのサイズが大きい場合、サイズが小さいデータよりも優先してＮＡＮＤメモリ１へ退避させると、サイズに応じた優先順位を設けない場合に比べてリード処理性能が向上する。そこで、第３の実施の形態では、ライトキャッシュに残す先頭部分のサイズをライトコマンド単位のデータのサイズに応じて変化させるようにした。
【００６１】
図１３は、第３の実施の形態のＳＳＤ４００の機能構成を説明する図である。図示するようにＭＰＵ５は、ＳＳＤ４００のリード処理およびライト処理の制御を実行するリード／ライト処理部５３を備えている。また、ＲＡＭ３には、キャッシュ３１、３２を備えているほか、タグ情報テーブル３３、ライン情報３４、ＬＲＵ管理テーブル３５、コマンド管理テーブル３６が格納される。
【００６２】
図１４は、ライト処理におけるＳＳＤ４００の動作を説明するフローチャートである。図示するように、ライトコマンドを受信してライト処理がスタートすると、リード／ライト処理部５３は、受信したライトコマンドをコマンド管理テーブル３６に追加する（ステップＳ５１）。そして、リード／ライト処理部５３は、ライトキャッシュ３２は所定のしきい値以上の量のデータをキャッシュしているか否かを判定する（ステップＳ５２）。
【００６３】
ライトキャッシュ３２が所定のしきい値以上の量のデータをキャッシュしていた場合（ステップＳ５２、Ｙｅｓ）、リード／ライト処理部５３は、ライトキャッシュ３２に残す先頭部分のサイズを決定する先頭サイズ決定処理を実行する（ステップＳ５３）。
【００６４】
図１５は、先頭サイズ決定処理の一例を説明するフローチャートである。図示するように、リード／ライト処理部５３は、コマンド管理テーブル３６を参照し、ライトコマンド毎のデータを１つ選択する（ステップＳ７１）。そして、リード／ライト処理部５３は、選択したデータのデータサイズは４ページ分のサイズ以上であるか否かを判定する（ステップＳ７２）。選択したデータのサイズが４ページに満たなかった場合（ステップＳ７２、Ｎｏ）、リード／ライト処理部５３は、該データの先頭サイズを３ページ分のサイズとする（ステップＳ７３）。また、選択したデータのサイズが４ページ分以上のサイズであった場合（ステップＳ７２、Ｙｅｓ）、該データの先頭サイズを２ページ分のサイズとする（ステップＳ７４）。そして、リード／ライト処理部５３は、データを全て選択したか否かを判定し（ステップＳ７５）、未選択のデータがあった場合（ステップＳ７５、Ｎｏ）、ステップＳ７１へ移行して未選択のデータを１つ選択する。データを全て選択済みであった場合（ステップＳ７５、Ｙｅｓ）、先頭サイズ決定処理がリターンとなる。
【００６５】
なお、ここではデータのサイズが４ページ分のサイズであるか否かに基づいて先頭部分のサイズを決定しているが、先頭部分のサイズの決定のための場合分けに使用するしきい値は４以外であっても構わない。また、２つ以上のしきい値を用いて３つ以上に場合分けし、場合分けされた夫々の場合について異なるサイズを決定するようにしても構わない。また、先頭部分のサイズを２ページ分または３ページ分のサイズに決定するようにしたが、先頭部分のサイズはこれらのサイズに限定しない。
【００６６】
このように、小さいサイズのライトデータほどライトキャッシュ３２に残す先頭部分のサイズを大きくする。
【００６７】
図１４へ戻り、リード／ライト処理部５３は、先頭サイズ決定処理の後、ライトコマンド毎のキャッシュデータを先頭の所定ページ数分を残して残りをＮＡＮＤメモリ３へ退避させ、退避させたライン単位データに対応するタグ情報テーブル３３上のタグおよびライン情報３４を消去する（ステップＳ５４）。そして、ＳＳＤ４００は、ステップＳ５５〜ステップＳ６２において、第１の実施の形態におけるステップＳ４〜ステップＳ１１と同等の動作を実行し、ライト処理がリターンとなる。
【００６８】
なお、以上の説明においては、ライトキャッシュ３２が所定のしきい値以上の量のデータをキャッシュしていると判定された場合に先頭サイズ決定処理が実行されるとしたが、先頭サイズ決定処理の実行タイミングは該判定の後のタイミングだけに限定しない。
【００６９】
このように、小さいサイズのライトデータほどライトキャッシュ３２に残す先頭部分のサイズを大きくするように構成したので、ライトコマンド単位のデータのサイズが大きい場合、サイズが小さいデータよりも優先してＮＡＮＤメモリ１へ退避させることができるので、リード処理性能を向上させることができる。
【符号の説明】
【００７０】
１  ＮＡＮＤメモリ、２  コントローラ、３  ＲＡＭ、４  ＲＯＭ、５  ＭＰＵ、６  Ｉ／Ｆ制御回路、７  ＲＡＭ制御回路、８  ＮＡＮＤ制御回路、３１  リードキャッシュ、３２  ライトキャッシュ、３３  タグ情報テーブル、３４  ライン情報、３５  ＬＲＵ管理テーブル、３６  コマンド管理テーブル、３７  ライン情報、５１〜５３  リード／ライト処理部、１００、３００、４００  ＳＳＤ、２００  ホスト装置、３３１  ライン単位アドレス、３３２  ライン情報へのポインタ、３４１  セクタビットマップ、３４２  ライトキャッシュ内アドレス、３７１  ＮＡＮＤ格納フラグ。
【図１】
2011198133.tif 000003
【図２】
2011198133.tif 000004
【図３】
2011198133.tif 000005
【図４】
2011198133.tif 000006
【図５】
2011198133.tif 000007
【図６】
2011198133.tif 000008
【図７】
2011198133.tif 000009
【図８】
2011198133.tif 000010
【図９】
2011198133.tif 000011
【図１０】
2011198133.tif 000012
【図１１】
2011198133.tif 000013
【図１２】
2011198133.tif 000014
【図１３】
2011198133.tif 000015
【図１４】
2011198133.tif 000016
【図１５】
2011198133.tif 000017