(57)【特許請求の範囲】
【請求項１】
ホスト装置と、半導体記憶装置とを備える情報処理装置において、
前記ホスト装置は、
メインメモリと、
前記半導体記憶装置に対してリード要求を送信する第１の制御部と
を備え、
前記半導体記憶装置は、
不揮発性半導体メモリと、
前記ホスト装置から前記リード要求を受信する第２の制御部と
を備え、
前記不揮発性半導体メモリは、前記ホスト装置が前記半導体記憶装置にアクセスする際に使用する論理アドレスと前記不揮発性半導体メモリ内の物理アドレスとを対応づけるアドレス変換情報を格納し、
前記メインメモリは、前記アドレス変換情報の少なくとも一部を格納し、
前記第２の制御部は、前記メインメモリに保持された前記アドレス変換情報を用いて前記リード要求に含まれる論理アドレスを物理アドレスに変換し、該物理アドレスを用いて前記リード要求に対応するデータを前記不揮発性半導体メモリから読み出す
ことを特徴とする情報処理装置。
【請求項２】
前記第１の制御部は、前記半導体記憶装置に対してライト要求を送信し、
前記第２の制御部は、前記メインメモリに保持された前記アドレス変換情報を用いて前記ライト要求に含まれる論理アドレスを物理アドレスに変換し、該物理アドレスを用いて前記ライト要求に対応するデータを前記不揮発性半導体メモリに書き込む
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記第１の制御部は、前記半導体記憶装置に対するライト要求をライトコマンドと前記ライトコマンドに対応するライトデータに分離し、前記ライトコマンドを前記半導体記憶装置に出力し、前記ライトデータを前記メインメモリに記憶させ、
前記第２の制御部は、前記ホスト装置から転送される前記ライトコマンドを受信すると、前記メインメモリに記憶された該ライトコマンドに対応するライトデータを半導体記憶装置に転送させ、転送されたライトデータを前記ライト要求に対応するデータとして前記不揮発性半導体メモリに書き込む
ことを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記第２の制御部は、前記ライト要求に対応するデータを前記不揮発性半導体メモリに書き込んだ後、前記メインメモリおよび前記不揮発性半導体メモリに格納された前記アドレス変換情報を更新することを特徴とする請求項２または３に記載の情報処理装置。
【請求項５】
前記第２の制御部は、前記メインメモリに格納されるアドレス変換情報を示すタグ情報を用いてホスト装置からのリード要求またはライト要求に含まれる論理アドレスに対応するアドレス変換情報が前記メインメモリに格納されているか否かを判定することを特徴とする請求項２から４の何れか一つに記載の情報処理装置。
【請求項６】
メインメモリを備えるホスト装置と接続可能な半導体記憶装置において、
前記半導体記憶装置は、
不揮発性半導体メモリと、
前記ホスト装置からリード要求を受信する制御部と、
を備え、
前記不揮発性半導体メモリは、前記ホスト装置が前記半導体記憶装置にアクセスする際に使用する論理アドレスと前記不揮発性半導体メモリ内の物理アドレスとを対応づけるアドレス変換情報を格納し、
前記制御部は、前記メインメモリに、前記アドレス変換情報の少なくとも一部を格納し、前記メインメモリに保持された前記アドレス変換情報を用いて前記リード要求に含まれる論理アドレスを物理アドレスに変換し、該物理アドレスを用いて前記リード要求に対応するデータを前記不揮発性半導体メモリから読み出す
ことを特徴とする半導体記憶装置。
【請求項７】
前記制御部は、前記ホスト装置からライト要求を受信すると、前記メインメモリに保持された前記アドレス変換情報を用いて前記ライト要求に含まれる論理アドレスを物理アドレスに変換し、該物理アドレスを用いて前記ライト要求に対応するデータを前記不揮発性半導体メモリに書き込む
ことを特徴とする請求項６に記載の半導体記憶装置。
【請求項８】
前記ホスト装置は、前記半導体記憶装置に対するライト要求をライトコマンドと前記ライトコマンドに対応するライトデータに分離し、前記ライトコマンドを前記半導体記憶装置に出力し、前記ライトデータを前記メインメモリに記憶させ、
前記制御部は、前記ホスト装置から転送される前記ライトコマンドを受信すると、前記メインメモリに記憶された該ライトコマンドに対応するライトデータを半導体記憶装置に転送させ、転送されたライトデータを前記ライト要求に対応するデータとして前記不揮発性半導体メモリに書き込む
ことを特徴とする請求項７に記載の半導体記憶装置。
【請求項９】
前記制御部は、前記ライト要求に対応するデータを前記不揮発性半導体メモリに書き込んだ後、前記メインメモリおよび前記不揮発性半導体メモリに格納された前記アドレス変換情報を更新することを特徴とする請求項６または７に記載の半導体記憶装置。
【請求項１０】
前記制御部は、前記メインメモリに格納されるアドレス変換情報を示すタグ情報を用いてホスト装置からのリード要求またはライト要求に含まれる論理アドレスに対応するアドレス変換情報が前記メインメモリに格納されているか否かを判定することを特徴とする請求項７から９の何れか一つに記載の半導体記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、メインメモリを有するホスト装置と、不揮発性半導体メモリを有する半導体記憶装置とを備える情報処理装置に関する。
【背景技術】
【０００２】
複数の演算プロセッサが集積されるＧＰＵ(Graphical Processing Unit)などで、複数の演算プロセッサ間で一つのメモリを共有するＵＭＡ(Unified Memory Architecture)という技術がある。ＵＭＡによれば、メモリコストの低減を図ることができる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平１０−２６９１６５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明の一つの実施形態は、ホスト装置と半導体記憶装置間のインターフェイスバンド幅を増大させることなく、半導体記憶装置のバッファメモリの容量を低減させることを目的とする。
【課題を解決するための手段】
【０００５】
本発明の一つの実施形態によれば、情報処理装置は、ホスト装置と、半導体記憶装置とを備える。ホスト装置は、メインメモリと、前記半導体記憶装置に対するライト要求をライトコマンドと前記ライトコマンドに対応するライトデータに分離し、ライトコマンドを前記半導体記憶装置に出力し、ライトデータを前記メインメモリに記憶させる第１の制御部とを備える。前記半導体記憶装置は、不揮発性半導体メモリと、前記ホスト装置から転送される前記ライトコマンドを受信し、該ライトコマンドの実行時に前記メインメモリに記憶された該ライトコマンドに対応するライトデータを半導体記憶装置に転送させ、前記不揮発性半導体メモリに書き込む第２の制御部とを備える。
【図面の簡単な説明】
【０００６】
【図１】図１は、情報処理装置の構成例を示すブロック図である。
【図２】図２は、ライト処理の際の情報処理装置側の動作例を示すフローチャートである。
【図３】図３は、ライト処理の際の半導体記憶装置及び情報処理装置側の動作例を示すフローチャートである。
【図４】図４は、リード処理の際の半導体記憶装置及び情報処理装置側の動作例を示すフローチャートである。
【発明を実施するための形態】
【０００７】
（実施形態）
図１に、本実施形態の情報処理装置の構成例を示す。本情報処理装置は、ホスト装置（以下、ホストと略す）１０と、ホスト１０の記憶装置として機能するメモリシステム（半導体記憶装置）２０とを備える。メモリシステム２０は、ｅＭＭＣ(Embedded Multi Media Card)規格に準拠した組み込み用途のフラッシュメモリや、ＳＳＤ（Solid State Drive）などである。情報処理装置は、例えば、パーソナルコンピュータ、携帯電話、撮像装置などである。
【０００８】
メモリシステム２０は、不揮発性半導体メモリとしてのＮＡＮＤフラッシュ２１、ＮＡＮＤインタフェース（ＮＡＮＤＩ／Ｆ）２４、ＤＭＡコントローラ２５、バッファメモリ２６、ＥＣＣ回路２７、ストレージコントローラ２８、ストレージインタフェース（ストレージＩ／Ｆ）２９を有する。
【０００９】
ＮＡＮＤフラッシュ２１は、複数のメモリセルがマトリクス状に配列されたメモリセルアレイを有する。個々のメモリセルは上位ページ及び下位ページを使用して多値記憶が可能である。ＮＡＮＤフラッシュ２１は、データ消去の単位であるブロックを複数配列して構成される。さらに、各ブロックは、複数のページより構成されている。各ページは、データの書き込み及び読み出しの単位である。ＮＡＮＤフラッシュ２１は、例えば、複数のメモリチップによって構成される。
【００１０】
ＮＡＮＤフラッシュ２１は、ホスト１０から送信されるユーザデータ、メモリシステム２０の管理情報、ホスト１０で使用するＯＳ２３を記憶する。
【００１１】
ＯＳ２３は、ホスト１０の制御プログラムとして機能する。
【００１２】
論理物理変換テーブル（Ｌ２Ｐテーブル）２２は、ホスト１０がメモリシステム２０にアクセスする際に使用する論理ブロックアドレス（ＬＢＡ：Logical block address）と、ＮＡＮＤフラッシュ２１内の物理アドレス（ブロックアドレス＋ページアドレス＋ページ内記憶位置）とを対応づけるアドレス変換情報である。これ以降、ＮＡＮＤフラッシュに記憶されているＬ２Ｐテーブル２２をＬ２Ｐ本体と呼称する。
【００１３】
ＮＡＮＤＩ／Ｆ２４は、ストレージコントローラ２８の制御に基づき、ＮＡＮＤフラッシュ２１に対してデータおよび管理情報のリード／ライトを実行する。
【００１４】
バッファメモリ２６は、ＮＡＮＤフラッシュ２１にライトするデータあるいはＮＡＮＤフラッシュ２１からリードされたデータを記憶するためのバッファとして用いられる。また、バッファメモリ２６は、ホスト１０から入力されるライト要求、リード要求などに関わるコマンドをキューイングするコマンドキュー２６ａと、後述するホスト１０のメインメモリ１３にキャッシュされるＬ２Ｐ情報のタグ情報２６ｂを記憶する。例えば、バッファメモリ２６は、ＳＲＡＭ又はＤＲＡＭ等で構成されるが、レジスタ等で構成してもよい。
【００１５】
ＥＣＣ回路２７は、バッファメモリ２６から転送されてＮＡＮＤフラッシュに２１にライトすべきデータに対して、ＥＣＣ処理（誤り訂正処理）におけるエンコード処理を行い、エンコード結果をデータに付加してＮＡＮＤインタフェース２４に出力する。また、ＥＣＣ回路２７は、ＮＡＮＤインタフェース２４を介してＮＡＮＤフラッシュ２１からリードされたデータに対して、ＥＣＣ処理におけるデコード処理（誤り訂正符号を用いた誤り訂正処理）を行い、誤り訂正されたデータをバッファメモリ２６に出力する。
【００１６】
ＤＭＡコントローラ２５は、ＮＡＮＤインタフェース２４と、ＥＣＣ回路２７と、バッファメモリ２６との間のデータ転送を制御する。なお、ホスト１０のストレージインタフェース（ストレージＩ／Ｆ）１４内のレジスタ１４ａとバッファメモリ２６との間のデータ伝送を、ＤＭＡコントローラ２５によって行わせるようにしてもよいが、この実施形態では、レジスタ１４ａとバッファメモリ２６との間のデータ伝送は、ストレージＩ／Ｆ２９が行うこととする。
【００１７】
ストレージインタフェース（ストレージＩ／Ｆ）２９は、ホスト１０と接続するためのインタフェースである。ストレージＩ／Ｆ２９は、ホスト１０のストレージＩ／Ｆ１４内のレジスタ１４ａとメモリシステム２０のバッファメモリ２６との間のデータ伝送を制御する機能を有する。
【００１８】
ストレージコントローラ２８は、ファームウェアでその機能を実現され、バス３０に接続されたメモリシステム２０内の各構成要素を統括的に制御する。
【００１９】
メモリシステム２０では、論理アドレス（ＬＢＡ）と物理アドレス（ＮＡＮＤフラッシュ２１の記憶位置）との関係は静的に決定されておらず、データの書込み時に動的に関係付けられる。例えば、同じＬＢＡのデータを上書きする場合は、つぎのような処理が行われる。論理アドレスＡ１にブロックサイズの有効なデータが割当られており、記憶領域としてはＮＡＮＤフラッシュ２１のブロックＢ１が使用されていたとする。ホスト１０から論理アドレスＡ１のブロックサイズの更新データを上書きするコマンドを受信した場合、ＮＡＮＤフラッシュ２１の未使用のフリーブロック（ブロックＢ２とする）を１個確保し、そのフリーブロックにホスト１０から受信したデータを書き込む。その後、論理アドレスＡ１とブロックＢ２を関係付ける。その結果、ブロックＢ２は、内部に有効データを含む、アクティブブロックになり、ブロックＢ１に保存されたデータは無効になるためブロックＢ１はフリーブロックとなる。
【００２０】
このように、メモリシステムでは、同じ論理アドレスＡ１のデータであっても、実際の記録領域として使用されるブロックは書込みの度に変化する。なお、ブロックサイズの更新データ書き込みでは、必ず書き込み先ブロックが変化するが、ブロックサイズ未満の更新データ書き込みでは、同じブロックに更新データが書き込まれることもある。例えばブロックサイズ未満のページデータが更新される場合、当該ブロック内において同じ論理アドレスの旧ページデータが無効化され、新たに書き込まれた最新のページデータが有効ページとして管理される。ブロック内の全データが無効化されると、当該ブロックはフリーブロックとして解放される。
【００２１】
また、メモリシステム２０ではブロック整理が実行される。メモリシステムにおいて、データの消去単位（ブロック）と、データの管理単位が異なる場合、ＮＡＮＤフラッシュ２１の書き換えが進むと、無効な（最新ではない）データによって、ブロックは穴あき状態になる。このような穴あき状態のブロックが増えると、実質的に使用可能なブロックが少なくなり、ＮＡＮＤフラッシュ２１の記憶領域を有効利用できなくなる。そこで、例えば、ＮＡＮＤ２１のフリーブロックが所定の閾値より少なくなった場合、有効な最新のデータを集めて、違うブロックに書き直すコンパクション、ガベージコレクションなどのブロック整理を実行し、フリーブロックを確保する
【００２２】
また、メモリシステム２０では、ページ内の一部セクタの更新を行うときなどには、ＮＡＮＤフラッシュ２１の記憶データを読み取って、変更を加えて、ＮＡＮＤフラッシュ２１に書き戻すリード・モディファイ・ライト（ＲＭＷ）を実行する。ＲＭＷ処理においては、まず、更新セクタを含むページまたはブロックをＮＡＮＤフラッシュ２１からリードし、リードしたデータを、ホスト１０から受信したライトデータと統合する。そして、この統合データをＮＡＮＤフラッシュ２１の新たなページまたは新たなブロックに書き込む。
【００２３】
ホスト１０は、ＣＰＵ１１、メインメモリインタフェース１２、メインメモリ１３、ストレージインタフェース（ストレージＩ／Ｆ）１４、およびこれらを接続するバス１６を備える。メインメモリＩ／Ｆ１２は、メインメモリ１３をバス１６に接続するためのインタフェースである。
【００２４】
メインメモリ１３は、ＣＰＵ１１が直接アクセス可能な主記憶装置であり、本例では、ＤＲＡＭ（Dynamic random access memory）を使用する。メインメモリ１３は、ＣＰＵ１１が使用する主記憶としての機能の他に、Ｌ２Ｐキャッシュ１３ａ、ライトキャッシュ１３ｂの格納領域として用いられる。また、メインメモリ１３は、作業領域１３ｃとしても用いられる。Ｌ２Ｐキャッシュ１３ａは、メモリシステム２０のＮＡＮＤフラッシュ２１に格納されているＬ２Ｐ本体２２の一部又は全部である。メモリシステム２０のストレージコントローラ２８は、メインメモリ１３にキャッシュされたＬ２Ｐキャッシュ１３ａとＮＡＮＤフラッシュ２１に格納されているＬ２Ｐ本体２２を使用して、ＮＡＮＤフラッシュ２１に記憶されているデータにアクセスする際ののアドレス解決を行う。
【００２５】
ライトキャッシュ１３ｂには、ホスト１０からメモリシステム２０に書き込まれるライトデータが一時的に保存される。作業領域１３ｃは、ＮＡＮＤフラッシュ２１にデータを書き込む際の作業領域であり、具体的には、前述したブロックの整理やＲＭＷなどを実行する際に使用される。
【００２６】
ストレージＩ／Ｆ１４は、メモリシステム２０と接続するためのインタフェースである。ストレージＩ／Ｆ１４は、ＤＭＡコントローラ１５と、レジスタ１４ａを有する。ＤＭＡコントローラ１５は、メインメモリ１３のＬ２Ｐキャッシュ１３ａ、ライトキャッシュ１３ｂ、作業領域１３ｃとストレージＩ／Ｆ１４内のレジスタ１４ａとの間でのデータ転送制御を実行する。
【００２７】
ＣＰＵ１１は、ホスト１０の動作を制御するプロセッサであり、ＮＡＮＤフラッシュ２１からメインメモリ１３にロードされるＯＳ２３を実行する。ＯＳ２３にはメモリシステム２０を制御するデイバスドライバ２３ａが含まれる。デバイスドライバ２３ａは、ＯＳ２３またはＯＳ２３上のアプリケーションからメモリシステム２０に対するライト要求を受け付けると、ライト要求をライトコマンドとライトデータに分離する。コマンドには、コマンドの種類（リード、ライトなど）を識別するフィールド、先頭ＬＢＡを指定するフィールド、データ長を指定するフィールドなどが含まれる。そして、デバイスドライバ２３ａは、コマンドはストレージＩ／Ｆ１４を介してメモリシステム２０に直接送信する。一方、デバイスドライバ２３ａは、分離したデータについては、メインメモリ１３のライトキャッシュ１３ｂに一旦格納する。
【００２８】
図２は、ライト要求を受け付けた際のデバイスドライバ２３ａの動作手順を示すものである。デバイスドライバ２３ａは、ＯＳ２３またはＯＳ２３上のアプリケーションからメモリシステム２０に対するライト要求を受け付けると、ライト要求をコマンドとデータに分離する（ステップＳ１００）。つぎに、デバイスドライバ２３ａは、コマンドはストレージＩ／Ｆ１４を介してメモリシステム２０に直接送信する。また、デバイスドライバ２３ａは、分離したデータをメインメモリ１３のライトキャッシュ１３ｂに一旦格納する（ステップＳ１１０）。ライトキャッシュ１３ｂにキャッシュされたデータについては、この後、メモリシステム２０のストレージコントローラ２８の制御によって、メモリシステム２０側に転送される。
【００２９】
図３は、ライトコマンドを受信した際のメモリシステム２０側の動作手順を示すものである。ホスト１０からメモリシステム２０に送信されたライトコマンドは、ストレージＩ／Ｆ２９によってバッファメモリ２６のコマンドキュー２６ａにセットされる（ステップＳ２００、Ｓ２１０）。ストレージコントローラ２８は、コマンドキュー２６ａにセットされた当該ライトコマンドの実行順番になり、当該ライトコマンドの実行が可能となると（ステップＳ２２０）、ライトコマンドに含まれるＬＢＡが未書き込み状態であるか否かを判定する（ステップＳ２３０）。ここで、ＬＢＡが未書き込み状態とは、このＬＢＡに対応する有効なデータがＮＡＮＤフラッシュ２１に記憶されていない状態である。
【００３０】
ＬＢＡが未書き込み状態であるか否かの判定は、具体的には、例えば以下の手順で行われる。即ち、ストレージコントローラ２８は、ライトコマンドに含まれるＬＢＡがタグ情報２６ｂにヒットするか否かを判定し、ヒットしない場合は、ＮＡＮＤフラッシュ２１に記憶されているＬ２Ｐ本体２２にヒットするか否か判定する。なお、タグ情報２６ｂは、ホスト１０のメインメモリ１３のＬ２Ｐキャッシュ１３ｂにキャッシュされているＬ２Ｐ情報が登録されたデータであり、タグ情報２６ｂを検索することにより、Ｌ２Ｐキャッシュ１３ｂにＬＢＡに対応するＬ２Ｐ情報が格納されているか否か判定することが可能である。
【００３１】
このようにタグ情報２６ｂ及びＬ２Ｐ本体２２の検索により、ＬＢＡがヒットしないと判定された場合（ステップＳ２３０：Ｙｅｓ）、ストレージコントローラ２８は、ホスト１０のＤＭＡコントローラ１５に対し、ライトコマンドに対応するライトデータをライトキャッシュ１３ｂから転送するためのデータ転送指令を出力する（ステップＳ２４０）。このデータ転送指令を受信したＤＭＡコントローラ１５は、メインメモリ１３のライトキャッシュ１３ｂに記憶されているライトデータをメインメモリ１３のライトキャッシュ１３ｂからストレージＩ／Ｆ１４のレジスタ１４ａに転送する。このレジスタ１４ａにデータがセットされると、その旨がストレージＩ／Ｆ１４からストレージＩ／Ｆ２９に通知され、この通知を受けたストレージＩ／Ｆ２９は、レジスタ１４ａにセットされたライトデータをバッファメモリ２６に転送する（ステップＳ２５０）。
【００３２】
ストレージコントローラ２８が、メインメモリ１３上のライトキャッシュ１３ｂに記憶されたライトデータの記憶位置を特定できるようにするために、ライトコマンドにメインメモリ１３での記憶位置を含ませるようにしてもよい。また、ライトキャッシュ１３ｂをＦＩＦＯ構造やリングバッファ構造とすることによりストレージコントローラ２８がライトデータの記憶位置を特定可能とすることもできる。つまり、ライトデータは、ＦＩＦＯ構造のライトキャッシュ１３ｂに対し、ライトコマンドが発生した順にセットする。ライトコマンドには、データ長が含まれているので、ストレージコントローラ２８が、ＦＩＦＯ構造のライトキャッシュ１３ｂの初期アドレスを認識していれば、ライトコマンドを受信する度に、データ長ずつアドレスに加算することで、ライトデータのメインメモリ１３上での記憶位置に把握することができる。
【００３３】
ステップＳ２５０の処理によってライトデータがバッファメモリ２６にセットされると、ストレージコントローラ２８はライトデータをＥＣＣ回路２７でＥＣＣ符号化した後、ＮＡＮＤＩ／Ｆ２４を介して、ＮＡＮＤフラッシュのフリーブロックに書き込む（ステップＳ３５０）。その後、このフリーブロックにライトコマンドで指定されたＬＢＡを対応付けるようＬ２Ｐキャッシュ１３ａ、タグ情報２６ｂ、さらにはＬ２Ｐ本体２２を更新する（ステップＳ３６０）。なお、Ｌ２Ｐ本体に関しては、ＮＡＮＤフラッシュ２１に対する書き込みの度に更新するのではなく、定期的に更新するようにしてもよい。
【００３４】
Ｌ２Ｐキャッシュ１３ａの更新は次のようにして行われる。ストレージコントローラ２８は、バッファメモリ２６で新たなＬ２Ｐ情報を作成後、そのタグ情報をバッファメモリ２６のタグ情報２６ｂに追加し、ストレージＩ／Ｆ２９にその旨を通知し、さらにホスト１０のＤＭＡコントローラ１５に対しＬ２Ｐ情報を転送するための転送指令を出力する。これにより、ストレージＩ／Ｆ２９は、バッファメモリ２６で作成された新たなＬ２Ｐ情報をストレージＩ／Ｆ１４のレジスタ１４ａにセットする。ＤＭＡコントローラ１５は、レジスタ１４ａにセットされたＬ２Ｐ情報をメインメモリ１３に転送し、Ｌ２Ｐ情報をＬ２Ｐキャッシュ１３ａにキャッシュする。
【００３５】
一方、ステップＳ２３０において、ライトコマンドに含まれるＬＢＡがタグ情報２６ｂにヒットする場合（ステップＳ２３０：Ｎｏ）、ストレージコントローラ２８は、ホスト１０のＤＭＡコントローラ１５に対しＬ２Ｐ情報の転送指令を出力する。これにより、ＤＭＡコントローラ１５は、メインメモリ１３のＬ２Ｐキャッシュ１３ａに記憶されている、ヒットしたＬ２Ｐ情報をメインメモリ１３からストレージＩ／Ｆ１４のレジスタ１４ａに転送する。前述したように、レジスタ１４ａにデータがセットされると、その旨がストレージＩ／Ｆ１４からストレージＩ／Ｆ２９に通知され、この通知を受けたストレージＩ／Ｆ２９は、レジスタ１４ａにセットされたＬ２Ｐ情報をバッファメモリ２６に転送する。ストレージコントローラ２８は、バッファメモリ２６に転送されたＬ２Ｐ情報を用いてアドレス解決を行う。
【００３６】
次に、ストレージコントローラ２８は、アドレス解決により得られたＬＢＡに対応する物理アドレスに記憶されたデータを含むページまたはブロックをＮＡＮＤフラッシュ２１から読み出してバッファメモリ２６に転送させる（ステップＳ２６０）。つぎに、ストレージコントローラ２８は、ホスト１０のＤＭＡコントローラ１５に対しライトキャッシュ１３ｂに記憶されているライトデータを転送するためのデータ転送指令を出力する（ステップＳ２７０）。このデータ転送指令を受信したＤＭＡコントローラ１５は、メインメモリ１３のライトキャッシュ１３ｂに記憶されているライトデータをメインメモリ１３からストレージＩ／Ｆ１４のレジスタ１４ａに転送する。このレジスタ１４ａにセットされたデータは、前記と同様にして、ストレージＩ／Ｆ２９によってバッファメモリ２６に転送される（ステップＳ２８０）。
【００３７】
つぎに、ストレージコントローラ２８は、ＮＡＮＤフラッシュ２１から読み出してバッファメモリ２６に書き込んだデータと、ライトキャッシュ１３ｂから転送してバッファメモリ２６に書き込んだデータとをバッファメモリ２６上で合成する（ステップＳ２９０）。この合成が終了すると、ストレージコントローラ２８は、その旨をストレージＩ／Ｆ２９に通知し、さらにホスト１０のＤＭＡコントローラ１５に対しデータを転送するための転送指令を出力する（ステップＳ３００）。これにより、ストレージＩ／Ｆ２９は、バッファメモリ２６で合成されたデータをストレージＩ／Ｆ１４のレジスタ１４ａにセットする。ＤＭＡコントローラ１５は、レジスタ１４ａにセットされた合成データをメインメモリ１３に転送し、この合成データを作業領域１３ｃに記憶する（ステップＳ３１０）。
【００３８】
この後、ストレージコントローラ２８は、データの合成処理が終了したか否かを判定し（ステップＳ３２０）、データ合成処理が終了していない場合は、ステップＳ２６０〜Ｓ３１０の手順をデータ合成処理が終了するまで繰り返す。このようにして、メインメモリ１３の作業領域１３ｃ上にできるだけ多くのブロック単位のデータを作成する。
【００３９】
ストレージコントローラ２８は、データの合成処理が終了すると、ホスト１０のＤＭＡコントローラ１５に対しメインメモリ１３の作業領域１３ｃに記憶されている合成データを転送するためのデータ転送指令を出力する（ステップＳ３３０）。このデータ転送指令を受信したＤＭＡコントローラ１５は、メインメモリ１３の作業領域１３ｃに記憶されている合成データをメインメモリ１３からストレージＩ／Ｆ１４のレジスタ１４ａに転送する。このレジスタ１４ａにセットされたデータは、前記と同様にして、ストレージＩ／Ｆ２９によってバッファメモリ２６に転送される（ステップＳ３４０）。
【００４０】
ステップＳ３４０の処理によって合成データがバッファメモリ２６にセットされると、ストレージコントローラ２８はライトデータをＥＣＣ回路２７でＥＣＣ符号化した後、ＮＡＮＤＩ／Ｆ２４を介して、ＮＡＮＤフラッシュのフリーブロックに書き込む（ステップＳ３５０）。その後、このフリーブロックにＬＢＡを対応付け、旧アクティブブロックを無効化するようＬ２Ｐキャッシュ１３ａ、タグ情報２６ｂ、さらにはＬ２Ｐ本体２２を更新する（ステップＳ３６０）。
【００４１】
なお、合成処理が、メインメモリ１３からバッファメモリ２６への１回のデータ転送で終了する場合は、バッファメモリ２６で合成したデータをＮＡＮＤフラッシュ２１に直接書き込むようにしてもよい。
【００４２】
図４は、リードコマンドを受信した際のメモリシステム２０側の動作手順を示すものである。ストレージＩ／Ｆ２９を介してメモリシステム２０で受信されたリードコマンドは、ストレージＩ／Ｆ２９によってバッファメモリ２６のコマンドキュー２６ａにセットされる。このリードコマンドが実行可能な状態になると、ストレージコントローラ２８は、リードコマンドに含まれるＬＢＡがタグ情報２６ｂにヒットするか否かを判定する（ステップＳ４２０）。ヒットする場合（ステップＳ４２０：Ｙｅｓ）、ストレージコントローラ２８は、ホスト１０のＤＭＡコントローラ１５に対しＬ２Ｐ転送指令を出力する（ステップＳ４３０）。これにより、ＤＭＡコントローラ１５は、メインメモリ１３のＬ２Ｐキャッシュ１３ａに記憶されている、ヒットしたＬ２Ｐ情報をメインメモリ１３からストレージＩ／Ｆ１４のレジスタ１４ａに転送する。レジスタ１４ａにセットされたＬ２Ｐ情報は、前記と同様にして、ストレージＩ／Ｆ２９によってバッファメモリ２６に転送される（ステップＳ４４０）。
【００４３】
ストレージコントローラ２８は、バッファメモリ２６に転送されたＬ２Ｐ情報を用いてアドレス解決を行う。すなわち、ストレージコントローラ２８は、ＬＢＡに対応付けれた物理アドレスをＬ２Ｐ情報から取得し、取得した物理アドレスに対応するデータをＮＡＮＤフラッシュ２１からリードさせる。ＥＣＣ回路２７は、ＮＡＮＤインタフェース２４を介してＮＡＮＤフラッシュ２１からリードされたデータに対して、ＥＣＣ処理におけるデコード処理を行い、誤り訂正されたデータをバッファメモリ２６に出力する。この後、ストレージコントローラ２８は、バッファメモリ２６に記憶されたリードデータをホスト１０に出力する。
【００４４】
一方、ステップＳ４２０において、リードコマンドに含まれるＬＢＡがタグ情報２６ｂにヒットしない場合（ステップＳ４２０：Ｎｏ）、ストレージコントローラ２８は、ＮＡＮＤフラッシュ２１に記憶されているＬ２Ｐ本体の一部又は全てをバッファメモリ２６にリードして検索する（ステップＳ４６０）。ＬＢＡがＬ２Ｐ本体でヒットしない場合は、リード処理を終了し、ホスト１０にエラーを返信する。ストレージコントローラ２８は、ＬＢＡがＬ２Ｐ本体でヒットした場合（ステップＳ４７０）、ヒットしたＬ２Ｐ情報を用いてアドレス解決を行う。すなわち、ストレージコントローラ２８は、ＬＢＡに対応付けれた物理アドレスをＬ２Ｐ情報から取得し、取得した物理アドレスに対応するデータをＮＡＮＤフラッシュ２１からリードさせる。ＥＣＣ回路２７は、ＮＡＮＤインタフェース２４を介してＮＡＮＤフラッシュ２１からリードされたデータに対して、ＥＣＣ処理におけるデコード処理を行い、誤り訂正されたデータをバッファメモリ２６に出力する。この後、ストレージコントローラ２８は、バッファメモリ２６に記憶されたリードデータをホスト１０に出力する（ステップＳ４８０）。
【００４５】
ストレージコントローラ２８は、バッファメモリ２６に読み出したＬ２Ｐ本体のうちの、リードコマンドに含まれるＬＢＡに対応するＬ２Ｐ情報、あるいはリードコマンドに含まれるＬＢＡを含む周辺ＬＢＡに対応するＬ２Ｐ情報をストレージＩ／Ｆ１４のレジスタ１４ａに転送するようストレージＩ／Ｆ２９に指令するとともに、ホスト１０のＤＭＡコントローラ１５に対しＬ２Ｐ情報を転送するための転送指令を出力する。これにより、ストレージＩ／Ｆ２９は、バッファメモリ２６にバッファリングされているＬ２Ｐ情報をストレージＩ／Ｆ１４のレジスタ１４ａにセットする。ＤＭＡコントローラ１５は、レジスタ１４ａにセットされたＬ２Ｐ情報をメインメモリ１３に転送し、このＬ２Ｐ情報をＬ２Ｐキャッシュにキャッシュする。これに伴い、ストレージコントローラ２８は、バッファメモリ２６のタグ情報２６ｂを更新する。
【００４６】
なお、メインメモリ１３上に形成された作業領域１３ｃは、前述したブロック整理、ＲＭＷ等を行う際の作業領域としても使用される。また、上記実施形態では、Ｌ２Ｐキャッシュ１３ａのタグ情報２６ｂをメモリシステム２０側で持つこととしたが、タグ情報２６ｂを持たずに、Ｌ２Ｐキャッシュ１３ａを直接検索するようにしてもよい。また、メモリシステム２０のストレージＩ／Ｆ２９がレジスタ１４ａと、バッファメモリ２６間のデータ転送を行うこととしたが、ストレージコントローラ２８にこのデータ転送を行わせるようにしてもよい。また、メインメモリ１３とバッファメモリ２６との間で直接データ転送を行わせるようにしてもよい。
【００４７】
このようにこの実施形態においては、ホスト１０のメインメモリ１３がライトキャッシュ１３ｂ及びＬ２Ｐキャッシュ１３ａの格納領域として用いられる。これにより、バッファメモリ２６のメモリ容量の低減を図ることができる。さらに、本実施形態では、ライト要求時にライトコマンドとライトデータとを分離し、ライトデータをホスト１０のメインメモリ１３に記憶し、ライトコマンドをメモリシステムのバッファメモリ２６に記憶する。そして、メモリシステム２０においてライトコマンドの実行時にホスト１０のメインメモリ１３からライトデータを読み出し、ＮＡＮＤフラッシュ２１に書き込みを行う。これにより、ライトコマンドとライトデータを分離しない場合に比べ、ホスト１０とメモリシステム２０の間のインターフェイスバンド幅を低減することができる。つまり、ライトコマンドとライトデータを分離しない場合には、ライト要求時にホストからメモリシステムにライトコマンド及びライトデータが転送され、次いでメモリシステムがライトコマンドとライトデータを分離し、分離したライトデータをホスト１０のメインメモリ１３に転送するという動作になる。この場合、一度のライト要求に対して、ライトデータは、ホスト１０とメモリシステム２０の間のバスを３回転送されることとなり、インターフェイスバンド幅を増加させてしまう。これに対し、本実施形態の構成によれば、そのような課題を解決できる。
【００４８】
なお、メモリシステムの起動時に、ＮＡＮＤフラッシュ２１に記憶されているＬ２Ｐ本体２２を、ホストのメインメモリ１３にロードするようにしてもよい。また、メモリシステム２０側に、Ｌ２Ｐ情報の一次キャッシュを設け、ホストのメインメモリにＬ２Ｐ情報の二次キャッシュを設ける、一次キャッシュ、二次キャッシュでヒットしない場合に、ＮＡＮＤフラッシュ２１に記憶されているＬ２Ｐ本体２２を検索するようにしてもよい。
【００４９】
また、この実施形態では、メモリシステム２０のストレージコントローラ２８が使用する作業領域１３ｃをメインメモリ１３上に設けるようにしたので、メモリシステム側での作業領域のためのバッファの容量をおよび専有面積を低減することが可能となる。
【００５０】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００５１】
１０  ホスト装置、、１１  ＣＰＵ、１３  メインメモリ、１３ａ  Ｌ２Ｐキャッシュ、１３ｂ  ライトキャッシュ、１３ｃ  作業領域、１４  ストレージインタフェース、１４ａ  レジスタ、１５  ＤＭＡコントローラ、２０  メモリシステム、２１  ＮＡＮＤフラッシュ、２２  Ｌ２Ｐ本体、２３ａ  デバイスドライバ、２５  ＤＭＡコントローラ、２６  バッファメモリ、２６ａ  コマンドキュー、２６ｂ  タグ情報、２７  ＥＣＣ回路、２８  ストレージコントローラ。
【図１】
0005762930.tif 000002
【図２】
0005762930.tif 000003
【図３】
0005762930.tif 000004
【図４】
0005762930.tif 000005