(57)【特許請求の範囲】
【請求項１】
揮発性メモリと、
ホスト装置からの書き込みデータをそれぞれ記憶し、前記書き込みデータの物理的な記憶位置である物理アドレスと前記ホスト装置から指定される論理アドレスとを対応付けた不揮発性アドレス管理情報が格納された不揮発性メモリと、
前記ホスト装置からのコマンドを格納するコマンドキューと、
前記不揮発性メモリ内の前記不揮発性アドレス管理情報の一部である揮発性アドレス管理情報を格納するアドレス情報キャッシュと、
前記ホスト装置からコマンドの実行時に、前記コマンドの実行に使用するアドレス管理情報を前記不揮発性メモリから前記アドレス情報キャッシュに読み出して、前記不揮発性メモリに対してリード／ライトを実行するコントローラと、
を備え、
前記コントローラは、前記コマンドキューに格納されたリードコマンドのうち、１つのリードコマンドに含まれるアクセス先のすべてが前記揮発性アドレス管理情報に存在するリードコマンドから優先的に実行するようにリオーダ制御することを特徴とするメモリシステム。
【請求項２】
前記コントローラは、前記コマンドキューに格納されたコマンド中の依存関係を調べ、依存関係がないリードコマンドについて前記リオーダ制御することを特徴とする請求項１に記載のメモリシステム。
【請求項３】
前記不揮発性メモリは、それぞれ個別にリード／ライトされる並列動作要素を複数備え、少なくとも１つの前記並列動作要素に前記不揮発性アドレス管理情報を格納し、
前記コントローラは、前記複数の並列動作要素に対してリード／ライトを同時に実行可能な構成を有し、前記アクセス先のすべてが前記揮発性アドレス管理情報に存在するリードコマンドのうち、コマンドの処理状況が少ない前記並列動作要素から所定の順序で前記リードコマンドを実行させるようにリオーダ制御することを特徴とする請求項２に記載のメモリシステム。
【請求項４】
前記コントローラでリオーダ制御された順にリードコマンドを登録するリードキューと、
前記リードキューに登録された順に前記リードコマンドを実行する転送順序制御手段と、
前記揮発性アドレス管理情報で前記不揮発性メモリにアクセス可能なリードコマンドを記憶するリオーダバッファと、
前記揮発性アドレス管理情報では前記不揮発性メモリにアクセスできないリードコマンドを格納するウェイトキューと、
をさらに備え、
前記コントローラは、前記コマンドキューに格納されたリードコマンドのうち、前記リードコマンドに含まれるすべてのアクセス先の論理アドレスを前記揮発性アドレス管理情報によって前記不揮発性メモリ上の記憶位置を特定できるリードコマンドを前記リオーダバッファに登録し、前記不揮発性メモリ上の記憶位置を特定できないリードコマンドを前記ウェイトキューに登録する第１の処理手段を有することを特徴とする請求項１に記載のメモリシステム。
【請求項５】
前記不揮発性メモリは、それぞれ個別にリード／ライトされる並列動作要素を複数備え、少なくとも１つの前記並列動作要素に前記不揮発性アドレス管理情報を格納し、
前記リオーダバッファは、前記並列動作要素ごとに対応したキューを有し、
前記第１の処理手段は、前記不揮発性メモリ上の記憶位置を特定できるリードコマンドを、そのアクセス先の前記並列動作要素に対応する前記リオーダバッファ中の前記キューに登録することを特徴とする請求項４に記載のメモリシステム。
【請求項６】
前記コントローラは、コマンドの処理状況が少ない前記並列動作要素から所定の順序で前記リードコマンドを実行させるように、前記リオーダバッファに登録されたリードコマンドを前記リードキューに登録する第２の処理手段を有することを特徴とする請求項５に記載のメモリシステム。
【請求項７】
前記コントローラは、前記コマンドキューに格納されたコマンド中の依存関係を判断し、依存関係がないリードコマンドを前記リオーダバッファと前記ウェイトキューに振り分ける第３の処理手段を有することを特徴とする請求項４〜６のいずれか１つに記載のメモリシステム。
【請求項８】
前記不揮発性メモリと前記揮発性メモリとの間でのデータ転送をコマンドにしたがって行う不揮発性メモリインタフェースを備え、
前記転送順序制御手段は、先行するリードコマンドのデータ転送中に、前記リードキュー中の前記先行するリードコマンドに後続するリードコマンドの要求を前記不揮発性メモリインタフェースに発行し、
前記不揮発性メモリインタフェースは、前記先行するリードコマンドのデータ転送が終了した後、発行された前記後続するリードコマンドの要求によるデータ転送処理を開始することを特徴とする請求項４〜７のいずれか１つに記載のメモリシステム。
【請求項９】
前記ウェイトキューに登録された前記リードコマンドについての管理情報読み出しコマンドを記憶するウェイトキュー用リオーダバッファをさらに備え、
前記コントローラは、前記ウェイトキューに登録された前記リードコマンドの論理アドレスで指定される前記不揮発性メモリ上の記憶位置を特定できるアドレス管理情報を前記不揮発性メモリの前記不揮発性アドレス管理情報から取得して、前記アドレス情報キャッシュに登録する管理情報読み出しコマンドを生成し、前記ウェイトキュー用リオーダバッファに登録し、前記管理情報読み出しコマンドによって前記アドレス情報キャッシュに前記ウェイトキューに登録された前記リードコマンド用のアドレス管理情報が登録された後、前記リードコマンドを前記リオーダバッファに登録する第４の処理手段をさらに有することを特徴とする請求項４〜８のいずれか１つに記載のメモリシステム。
【請求項１０】
前記第２の処理手段は、前記リードキューに投入しようとするリードコマンドと同じアドレスまたは連続するアドレスの他のリードコマンドがある場合には、前記リードコマンドとともに前記他のリードコマンドも前記リードキューに投入することを特徴とする請求項９に記載のメモリシステム。
【請求項１１】
前記コントローラは、前記コマンドキューに格納されたライトコマンドのうち転送するデータ量分の空きが前記揮発性メモリにあるものを優先的に処理する書き込み制御手段を有することを特徴とする請求項１〜１０のいずれか１つに記載のメモリシステム。
【請求項１２】
前記書き込み制御手段は、前記コマンドキューに格納されたライトコマンドのうち依存関係がないライトコマンドを依存関係があるライトコマンドよりも優先的に処理することを特徴とする請求項１１に記載のメモリシステム。
【請求項１３】
前記書き込み制御手段は、前記依存関係がないライトコマンドのうち前記転送するデータ量分の空きが前記揮発性メモリにない場合に、前記揮発性メモリに前記転送するデータ量分の空きを作るように前記揮発性メモリに開き領域を確保するコマンドを生成し、実行することを特徴とする請求項１１または１２に記載のメモリシステム。
【請求項１４】
揮発性メモリと、
ホスト装置からの書き込みデータをそれぞれ記憶し、前記書き込みデータの物理的な記憶位置である物理アドレスと前記ホスト装置から指定される論理アドレスとを対応付けた不揮発性アドレス管理情報が格納された不揮発性メモリと、
前記ホスト装置からのコマンドを格納するコマンドキューと、
前記不揮発性メモリ内の前記不揮発性アドレス管理情報の一部である揮発性アドレス管理情報を格納するアドレス情報キャッシュと、
前記ホスト装置からコマンドの実行時に、前記コマンドの実行に使用するアドレス管理情報を前記不揮発性メモリから前記アドレス情報キャッシュに読み出して、前記不揮発性メモリに対してリード／ライトを実行するコントローラと、
を備えるメモリシステムの制御方法であって、
前記コントローラは、前記コマンドキューに格納されたリードコマンドのうち、１つのリードコマンドに含まれるアクセス先のすべてが前記揮発性アドレス管理情報に存在するリードコマンドから優先的に実行するようにリオーダ制御することを特徴とするメモリシステムの制御方法。
【請求項１５】
前記コントローラは、前記コマンドキューに格納されたコマンド中の依存関係を調べ、依存関係がないリードコマンドについて前記リオーダ制御することを特徴とする請求項１４に記載のメモリシステムの制御方法。
【請求項１６】
前記不揮発性メモリは、それぞれ個別にリード／ライトされる並列動作要素を複数備え、少なくとも１つの前記並列動作要素に前記不揮発性アドレス管理情報を格納し、
前記コントローラは、前記複数の並列動作要素に対してリード／ライトを同時に実行可能な構成を有し、前記アクセス先のすべてが前記揮発性アドレス管理情報に存在するリードコマンドのうち、コマンドの処理状況が少ない前記並列動作要素から所定の順序で前記リードコマンドを実行させるようにリオーダ制御することを特徴とする請求項１５に記載のメモリシステムの制御方法。
【請求項１７】
前記不揮発性メモリと前記揮発性メモリとの間でのデータ転送をコマンドにしたがって行う不揮発性メモリインタフェースと、
前記コントローラによってリオーダ制御された順に前記不揮発性メモリインタフェースを介して前記リードコマンドを実行する転送順序制御手段と、
をさらに備え、
前記転送順序制御手段は、先行するリードコマンドのデータ転送中に、前記先行するリードコマンドに後続するリードコマンドの要求を前記不揮発性メモリインタフェースに発行し、
前記不揮発性メモリインタフェースは、前記先行するリードコマンドのデータ転送が終了した後、発行された前記後続するリードコマンドの要求によるデータ転送処理を開始することを特徴とする請求項１４〜１６のいずれか１つに記載のメモリシステムの制御方法。
【請求項１８】
前記コントローラは、前記コマンドキューに格納されたライトコマンドのうち転送するデータ量分の空きが前記揮発性メモリにあるものを優先的に処理することを特徴とする請求項１４〜１７のいずれか１つに記載のメモリシステムの制御方法。
【請求項１９】
前記コントローラは、前記コマンドキューに格納されたライトコマンドのうち依存関係がないライトコマンドを依存関係があるライトコマンドよりも優先的に処理することを特徴とする請求項１８に記載のメモリシステムの制御方法。
【請求項２０】
前記コントローラは、前記依存関係がないライトコマンドのうち前記転送するデータ量分の空きが前記揮発性メモリにない場合に、前記揮発性メモリに前記転送するデータ量分の空きを作るように前記揮発性メモリに開き領域を確保するコマンドを生成し、実行することを特徴とする請求項１８または１９に記載のメモリシステムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、メモリシステムおよびメモリシステムの制御方法に関する。
【背景技術】
【０００２】
コンピュータシステムに用いられるメモリシステムとして、ＮＡＮＤ型フラッシュメモリ（以下、単にＮＡＮＤメモリという）などの不揮発性半導体メモリを搭載したＳＳＤ（Solid  State  Drive）が注目されている。このＳＳＤにおいて、ＮＡＮＤメモリを複数のチップで構成し、ＳＳＤコントローラと複数のチップとの間をそれぞれ独立のチャネルで接続して、より高速のリード／ライト処理を実現させる技術が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願公開第２００９／２９２８６５号明細書
【特許文献２】特開２００１−１４２７７４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明の一つの実施形態は、バッファ量を削減しながら、データ転送のスループットを高めることができるメモリシステムおよびメモリシステムの制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００５】
本発明の一つの実施形態によれば、揮発性メモリと、不揮発性メモリと、コマンドキューと、アドレス情報キャッシュと、コントローラと、を備えるメモリシステムが提供される。前記不揮発性メモリは、ホスト装置からの書き込みデータをそれぞれ記憶し、前記書き込みデータの物理的な記憶位置である物理アドレスと前記ホスト装置から指定される論理アドレスとを対応付けた不揮発性アドレス管理情報が格納される。前記コマンドキューは、前記ホスト装置からのコマンドを格納する。前記アドレス情報キャッシュは、前記不揮発性メモリ内の前記不揮発性アドレス管理情報の一部である揮発性アドレス管理情報を格納する。前記コントローラは、前記ホスト装置からコマンドの実行時に、前記コマンドの実行に使用するアドレス管理情報を前記不揮発性メモリから前記アドレス情報キャッシュに読み出して、前記不揮発性メモリに対してリード／ライトを実行する。また、前記コントローラは、前記コマンドキューに格納されたリードコマンドのうち、１つのリードコマンドに含まれるアクセス先のすべてが前記揮発性アドレス管理情報に存在するリードコマンドから優先的に実行するようにリオーダ制御する。
【図面の簡単な説明】
【０００６】
【図１】図１は、第１の実施形態によるメモリシステムの構成の一例を模式的に示すブロック図である。
【図２】図２は、第１の実施形態によるＳＳＤの機能構成を模式的に示すブロック図である。
【図３】図３は、不揮発性アドレス管理情報の一例を示す図である。
【図４】図４は、揮発性アドレス管理情報の一例を示す図である。
【図５】図５は、リオーダバッファの構成の一例を模式的に示す図である。
【図６】図６は、第１の実施形態によるコマンドのリオーダ処理の手順の一例を示すフローチャートである。
【図７】図７は、ＳＳＤの操作完了時の処理手順の一例を示すフローチャートである。
【図８】図８は、データ転送の準備処理の手順の一例を示すフローチャートである。
【図９】図９は、管理情報の先行要求処理の手順の一例を示すフローチャートである。
【図１０】図１０は、リードコマンド処理の手順の一例を示すフローチャートである。
【図１１】図１１は、ライトコマンド処理の手順の一例を示すフローチャートである。
【図１２】図１２は、リオーダ処理の概略を模式的に示す図である。
【図１３】図１３は、リード処理時のリオーダ処理の概略を模式的に示す図である。
【図１４】図１４は、チャネルの利用状況に応じたリオーダ処理の概略を模式的に示す図である。
【図１５】図１５は、コマンド投入数に制限がある場合の読み出し用リソース情報へのリードコマンドの登録の一例を示す図である。
【図１６】図１６は、チャネルの利用状況に応じたリオーダ処理の概略を模式的に示す図である。
【図１７】図１７は、再利用性を考慮したリードコマンドの実行順序の入れ替え処理を模式的に示す図である。
【図１８】図１８は、ＳＳＤを搭載したパーソナルコンピュータの一例を示す斜視図である。
【図１９】図１９は、ＳＳＤを搭載したパーソナルコンピュータのシステム構成例を示している。
【発明を実施するための形態】
【０００７】
従来技術では、ホスト装置とＳＳＤとの間で転送されるデータを一時的に格納するバッファ量を削減しながら、データ転送のスループットを高めることに着目した技術については提案されていなかった。
【０００８】
以下の各実施形態では、従来に比して、ホスト装置とＳＳＤとの間で転送されるデータを一時的に格納するバッファ量を削減しながら、データ転送のスループットを高めることができるメモリシステムおよびその制御方法を開示する。
【０００９】
以下に添付図面を参照して、実施形態にかかるメモリシステムを詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【００１０】
（第１の実施形態）
図１は、第１の実施形態によるメモリシステムの構成の一例を模式的に示すブロック図である。ここでは、メモリシステムの一例としてＳＳＤを例に挙げて説明するが、本実施形態の適用対象はＳＳＤに限定されない。
【００１１】
ＳＳＤ２０は、パーソナルコンピュータなどのホスト装置（以下ホストという）１０とＡＴＡ（Advanced  Technology  Attachment）規格などの通信インタフェースで接続され、ホスト１０の外部記憶装置として機能する。ＳＳＤ２０は、ホスト１０からリード／ライトされるデータを記憶する不揮発性半導体メモリであるＮＡＮＤメモリ３０と、ＳＳＤ２０のデータ転送制御を実行するデータ転送装置４０と、データ転送装置４０が転送する転送データを一時的に格納する際などに使用される例えば揮発性メモリであるＲＡＭ５０と、を備える。ホスト１０から送信されてきたデータは、データ転送装置４０の制御の基に、一旦ＲＡＭ５０に格納され、その後、ＲＡＭ５０から読み出されてＮＡＮＤメモリ３０に書き込まれる。ＮＡＮＤメモリ３０から読み出されたデータは、一旦ＲＡＭ５０に格納され、その後、ＲＡＭ５０から読み出されてホスト１０に転送される。
【００１２】
データ転送装置４０は、ＡＴＡ  Ｉ／Ｆの制御およびホスト１０とＲＡＭ５０との間のデータ転送の制御を実行するＡＴＡインタフェースコントローラ（以下、ＡＴＡコントローラという）４１と、ＲＡＭ５０に対するデータのリード／ライトを制御するＲＡＭコントローラ４２と、ＮＡＮＤメモリ３０とＲＡＭ５０との間のデータ転送の制御を実行するＮＡＮＤコントローラ４３と、ファームウェアに基づいてデータ転送装置４０全体の制御を実行するＭＰＵ４４と、ＮＡＮＤメモリ３０からのリード管理と、ＮＡＮＤメモリ３０からリードしたデータをＲＡＭ５０へデータ転送する際のデータ転送管理を行う自動転送管理部４５と、を備える。ＭＰＵ４４、ＡＴＡコントローラ４１、ＲＡＭコントローラ４２、ＮＡＮＤコントローラ４３および自動転送管理部４５はバス接続されている。自動転送管理部４５は、ＮＡＮＤコントローラ４３の上位のコントローラであり、自動転送管理部４５は、ＭＰＵ４４の制御下で、ＮＡＮＤコントローラ４３によるＮＡＮＤメモリ３０の読み出し制御を管理する。
【００１３】
ＮＡＮＤメモリ３０は、ホスト１０によって指定されたユーザデータを記憶したり、ＲＡＭ５０で管理される管理情報をバックアップ用に記憶したりする。ＮＡＮＤメモリ３０は、この場合、４並列動作を行う４つの並列動作要素３１ａ〜３１ｄを有する。各並列動作要素３１ａ〜３１ｄはそれぞれチャネルｃｈ０〜ｃｈ３を介してＮＡＮＤコントローラ４３に接続されている。設定によって、４つの並列動作要素３１ａ〜３１ｄを単独動作させたり、並列動作させたりすることが可能である。また、ＮＡＮＤメモリ３０は、複数のメモリセルがマトリクス状に配列されたメモリセルアレイを有し、個々のメモリセルは上位ページ及び下位ページを使用して多値記憶が可能である。ＮＡＮＤメモリ３０は、複数のメモリチップによって構成され、各メモリチップは、データ消去の単位である物理ブロックを複数配列して構成される。また、ＮＡＮＤメモリ３０では、物理ページごとにデータの書き込み及びデータの読み出しが行われる。物理ブロックは、複数の物理ページによって構成されている。また、ＳＳＤ２０では、物理ブロックを、内部に有効データを含まない、用途未割り当てのブロックであるフリーブロックと、内部に有効データを含み、用途が割り当てられたアクティブブロックとに区別して管理する。なお、ここではＮＡＮＤメモリ３０を４つの並列動作要素３１ａ〜３１ｄで構成される場合が示されているが、並列動作要素の数は４つに限定されない。
【００１４】
ＲＡＭ５０は、データ転送用、管理情報記録用または作業領域用の記憶部として使用される。具体的には、データ転送用の記憶部（データ転送用バッファ）としては、ホスト１０から書込要求があったデータをＮＡＮＤメモリ３０に書込む前に一時的に保存したり、ホスト１０から読出要求があったデータをＮＡＮＤメモリ３０から読出して一時的に保存したりする用途で使用される。管理情報記録用の記憶部としては、ＮＡＮＤメモリ３０に記憶されるデータの格納位置とホスト１０が指定する論理アドレスとの対応などを管理するための管理情報（ＮＡＮＤメモリ３０に記憶されている各種管理テーブルの一部が起動時などに展開された管理テーブル、これら管理テーブルの変更差分情報であるログなど）を格納するために使用される。
【００１５】
図２は、第１の実施形態によるＳＳＤの機能構成を模式的に示すブロック図である。機能構成で見た場合のＳＳＤ２０は、ホストインタフェース（以下、ホストＩ／Ｆと表記）４１０と、コマンドキュー４２０と、バッファ４３０と、ＮＡＮＤメモリ３０と、ＮＡＮＤインタフェース（以下、ＮＡＮＤ  Ｉ／Ｆと表記）４４０と、転送順序制御部４５０と、アドレス情報キャッシュ４６１と、リオーダバッファ４６２と、ウェイトキュー４６３と、ウェイトキュー用リオーダバッファ４６４と、リソース情報格納部４６５と、リソース情報格納部４６５と、制御部４７０と、を備える。
【００１６】
図２に示す各機能ブロックは、ハードウェア、及びソフトウェアのいずれか、又は両者の組み合わせとして実現することができる。このため、各機能ブロックは、これらのいずれでもあることが明確となるように、概してそれらの機能の観点から以下に説明される。このような機能が、ハードウェアとして実現されるか、又はソフトウェアとして実現されるかは、具体的な実施態様、或いはシステム全体に課される設計制約に依存する。当業者は、具体的な実施態様ごとに、様々な方法でこれらの機能を実現し得るが、そのような実現を決定することは本発明の範疇に含まれる。
【００１７】
ホストＩ／Ｆ４１０は、ライト処理（書き込み処理）の場合には、ホスト１０からのコマンドとＮＡＮＤメモリ３０に書き込むデータを受け付け、リード処理（読み出し処理）の場合には、ホスト１０からのコマンドを受け付け、バッファ４３０に格納されたデータをホスト１０へと送出する。ホストＩ／Ｆ４１０は、制御部４７０によって実行要求が出されたライトコマンドを受け付けるライトキュー４１１を有する。ホストＩ／Ｆ４１０はライトキュー４１１に登録された順にコマンドを実行する。
【００１８】
コマンドキュー４２０は、ホストＩ／Ｆ４１０を介して受け付けたコマンドを格納する。バッファ４３０は、ライトコマンド（書き込みコマンド）を受けた時に、書き込み処理を行うデータを一時的に記憶するライトキャッシュ（図中、ＷＣと表記）４３１と、リードコマンドを受けた時に、リードコマンドに含まれるＬＢＡに対応するＮＡＮＤメモリ３０の記憶位置から読み出したデータを一時的に記憶するリードキャッシュ（図中、ＲＣと表記）４３２と、を有する。
【００１９】
ＮＡＮＤメモリ３０は、上記したようにそれぞれがチャネルｃｈ０〜ｃｈ３によってＮＡＮＤ  Ｉ／Ｆ４４０に接続される４つの並列動作要素３１ａ〜３１ｄによって構成され、ＳＳＤ２０を動作させる上で必要なソフトウェアやホスト１０から書き込み要求があったデータ、ＮＡＮＤメモリ３０内でのデータの保存位置を管理する不揮発性管理情報３２などを格納する。不揮発性管理情報３２は、ＮＡＮＤメモリ３０の各並列動作要素３１ａ〜３１ｄが管理する論理アドレスの範囲を規定するアドレス−チャネル対応情報と、ＮＡＮＤメモリ３０内のデータのすべての記憶位置を管理する不揮発性アドレス管理情報と、を含む。ここでは、各並列動作要素３１ａ〜３１ｄに不揮発性管理情報３２が設けられる場合を示しているが、不揮発性管理情報３２は、４つの並列動作要素３１ａ〜３１ｄのうちの少なくとも１つ以上に設けられていればよい。また、アドレス−チャネル対応情報は、いずれか１つの並列動作要素３１ａ〜３１ｄに設けられていればよい。
【００２０】
図３は、不揮発性アドレス管理情報の一例を示す図であり、（ａ）はアドレス−チャネル対応情報の一例を示す図であり、（ｂ）は不揮発性アドレス管理情報の一例を示す図である。アドレス−チャネル対応情報は、ホスト１０から入力される論理アドレスとしてのＬＢＡ（Logical  Block  Addressing）と、各並列動作要素３１ａ〜３１ｄ（チャネルｃｈ０〜ｃｈ３）との関連付けを行っている。ＬＢＡはセクタ（サイズ：５１２Ｂ）に対して０からの通し番号を付けた論理アドレスである。なお、セクタサイズはこの限りではない。
【００２１】
この例では、アドレス−チャネル対応情報として、図３（ａ）に示されるように、０〜Ｌ１のＬＢＡにチャネルｃｈ０に接続される並列動作要素３１ａ（物理アドレス０〜Ｐ１）が割り当てられ、Ｌ１〜Ｌ２のＬＢＡにチャネルｃｈ１に接続される並列動作要素３１ｂ（物理アドレスＰ１〜Ｐ２）が割り当てられ、Ｌ２〜Ｌ３のＬＢＡにチャネルｃｈ２に接続される並列動作要素３１ｃ（物理アドレスＰ２〜Ｐ３）が割り当てられ、Ｌ３〜Ｌ４のＬＢＡにチャネルｃｈ３に接続される並列動作要素３１ｄ（物理アドレスＰ３〜Ｐ４）が割り当てられている。このようにアドレス−チャネル対応情報では、チャネル単位（並列動作要素３１ａ〜３１ｄ単位）でＬＢＡとＮＡＮＤメモリ３０内の物理アドレスとの対応付けを管理している。
【００２２】
不揮発性アドレス管理情報は、図３（ｂ）に示されるように、ホスト１０から指定される論理アドレスとしてのＬＢＡと、実際のＮＡＮＤメモリ３０上での記憶位置を示す物理アドレスとの対応付けを管理している。ここでは、アドレス−チャネル対応情報と異なり、たとえばセクタ単位でＬＢＡとＮＡＮＤメモリ３０内の物理アドレスとを対応付けて管理しているものとする。また、アドレス変換の単位としては、セクタサイズの２以上の倍数であればよい。ＳＳＤ２０では、論理アドレスと物理アドレスとの関係は予め静的に決定されておらず、データの書き込み時に動的に関係づけられる論物変換方式が採用されている。
【００２３】
ＮＡＮＤ  Ｉ／Ｆ４４０は、転送順序制御部４５０からのコマンドにしたがってＮＡＮＤメモリ３０とバッファ４３０との間のデータ転送を制御する。
【００２４】
転送順序制御部４５０は、制御部４７０によって実行要求が出されたリードコマンドを受け付けるリードキュー４５１を有し、リードキュー４５１に登録された順にコマンドを実行する。コマンドの実行の際には、ＮＡＮＤメモリ３０からのデータの読み出しと、読み出したデータのホスト１０への転送を制御し、また管理情報の読み出しの際には、ＮＡＮＤメモリ３０からアドレス情報キャッシュ４６１にアドレス管理情報を読み出してくる制御を行う。
【００２５】
また、転送順序制御部４５０は、特願２０１０−２１３７７６に開示しているように、１つのリードコマンドをＬＢＡ順の複数のリード命令列に展開し、ＮＡＮＤメモリ３０からＬＢＡ順にリード命令列に対応するデータをバッファ４３０に読み出し、ホスト１０へと転送するように制御する。ここではＮＡＮＤメモリ３０からデータをＬＢＡ順に読み出すようにしているが、ＬＢＡ順に読み出すのではなく、バッファ４３０に読み出す順番に関係なくホスト１０へ転送する際にバッファからＬＢＡ順に転送する構成としてもよい。
【００２６】
また、転送順序制御部４５０は、リードキュー４５１に登録されたリードコマンドの中でＮＡＮＤ  Ｉ／Ｆ４４０へ発行可能な要求を前もって発行する。たとえば、あるリードコマンドのデータ転送中に、リードキュー４５１に登録された後続するリードコマンドの要求を予めＮＡＮＤ  Ｉ／Ｆ４４０へ発行し、データ転送処理の準備を先行して行う。そして、上記あるリードコマンドについてのデータ転送が完了すると、ＮＡＮＤ  Ｉ／Ｆ４４０に先行して発行されたリードコマンドの要求が実行され、またリードキュー４５１に登録された後続するリードコマンドの要求を先行してＮＡＮＤ  Ｉ／Ｆ４４０へと発行する。ここでは、先行するリードコマンドの要求に対するデータ転送中にＮＡＮＤ  Ｉ／Ｆ４４０へと発行する要求として、異なるリードコマンドの要求でもよいし、データ転送しているデータがＬＢＡ順に読み出されるようにリードコマンド内の後続する要求でもよい。
【００２７】
アドレス情報キャッシュ４６１は、ＮＡＮＤメモリ３０中の不揮発性アドレス管理情報の一部である揮発性アドレス管理情報を格納する。揮発性アドレス管理情報は、リードコマンドのＬＢＡで指定されたＮＡＮＤメモリ３０内のデータを読み出す際に使用する情報であり、ＮＡＮＤメモリ３０の不揮発性アドレス管理情報からリードコマンドのＬＢＡが含まれるアドレス管理情報が読み出され、アドレス情報キャッシュ４６１に展開される。このように、このＳＳＤ２０では、ＮＡＮＤメモリ３０内のすべてのデータの記憶位置をキャッシュメモリに読み出して管理するのではなく、ＮＡＮＤメモリ３０内の一部のデータの記憶位置を必要に応じて読み出して管理する方式を採っている。このような構成とすることで、キャッシュメモリ（アドレス情報キャッシュ４６１）の容量を抑えることができる。
【００２８】
図４は、揮発性アドレス管理情報の一例を示す図である。この揮発性アドレス管理情報は、図３（ｂ）の不揮発性アドレス管理情報の構造と同じであるが、上記したようにＮＡＮＤメモリ３０内のすべてのデータの記憶位置についてのアドレス管理情報ではなく、ＮＡＮＤメモリ３０内の一部のデータの記憶位置について格納されている。アドレス情報キャッシュ４６１の容量は、ＳＳＤ２０に求められる性能によって定められる。なお、揮発性アドレス管理情報は、ホスト１０からのコマンドが要求するデータのＬＢＡに対応するＮＡＮＤメモリ３０内の物理アドレスが存在しない場合に、制御部４７０によってその物理アドレスが含まれるように更新される。
【００２９】
リオーダバッファ４６２は、制御部４７０によって実行可能と判断されたコマンドを一時的に格納するバッファである。具体的には、後述するように依存関係がないコマンドであり、かつアドレス情報キャッシュ４６１にアクセス先のアドレスが管理されているコマンドを一時的に保持する。図５は、リオーダバッファの構成の一例を模式的に示す図である。この図に示されるように、ＮＡＮＤメモリ３０のチャネルｃｈ０〜ｃｈ３（並列動作要素３１ａ〜３１ｄ）に対応してコマンドを登録することができる構成となっている。なお、この図でＲはリードコマンドを示し、ＲＴはリードコマンドを実行するのに必要な管理情報を読み出すコマンドを示している。
【００３０】
ウェイトキュー４６３は、制御部４７０によってすぐには実行できないと判断されたコマンドを一時的に格納するバッファである。具体的には、アドレス情報キャッシュ４６１にアクセス先のアドレスが管理されていないリードコマンドを一時的に保持する。コマンドを実行することができる環境になった場合に、制御部４７０によってリオーダバッファ４６２へと移される。
【００３１】
ウェイトキュー用リオーダバッファ４６４は、ウェイトキュー４６３に振り分けられたコマンドのうちリードコマンドについて、ＮＡＮＤメモリ３０上のアドレスを特定するのに必要なアドレス管理情報をＮＡＮＤメモリ３０の不揮発性管理情報３２から読み出し、アドレス情報キャッシュ４６１に登録する管理情報読み出しコマンドを一時的に保持する。このウェイトキュー用リオーダバッファ４６４の構成も図５に示されるリオーダバッファの構成と同様であり、ＮＡＮＤメモリ３０のチャネルｃｈ０〜ｃｈ３（並列動作要素３１ａ〜３１ｄ）に対応してコマンドを登録することができる構成となっている。
【００３２】
リソース情報格納部４６５は、バッファ４３０のライトキャッシュ４３１の空き容量を示す書き込み用リソース情報と、ＮＡＮＤメモリ３０のコマンドの受け付け状態（処理状態）を示す読み出し用リソース情報と、を有する。読み出し用リソース情報として、ＮＡＮＤメモリ３０が受け付けているコマンド数（ＮＡＮＤメモリ３０が一度に受け付けることが可能なコマンド数）や各並列動作要素３１ａ〜３１ｄ（チャネルｃｈ０〜ｃｈ３）に積まれているコマンドの数、またはこれら２つを合わせたものなどを用いることができる。
【００３３】
制御部４７０は、コマンドキュー４２０に格納されたライトコマンドの書き込みを制御する書き込み制御部４７１と、コマンドキュー４２０に格納されたリードコマンドの実行順序を制御するリオーダ制御部４７２と、コマンドキュー４２０に格納されたコマンドのアドレスを変換し、アドレス情報キャッシュ４６１を管理するアドレス管理部４７３と、バッファ４３０のライトキャッシュ４３１の空き容量と、ＮＡＮＤメモリ３０のコマンドの受け付け状態を管理するリソース管理部４７４と、を有する。
【００３４】
書き込み制御部４７１は、ライトコマンドにしたがってデータをバッファ４３０のライトキャッシュ４３１に書き込んだり、ライトキャッシュ４３１上のデータをＮＡＮＤメモリ３０へと書き込んだりする処理を行う。また、書き込み処理部４７１は、後述する依存関係のないライトコマンドについて、リソース情報格納部４６５内の書き込み用リソース情報からライトキャッシュ４３１の空き領域がライトコマンドで書き込むデータ量よりも大きいと判定した場合に、すぐに実行できるコマンドとし、そうでない場合にすぐには実行できないコマンドとする。また、すぐには実行できないライトコマンドが実行可能な状態となるように環境を整える機能も有する。具体的には、ライトキャッシュ４３１に転送されるデータ量を書き込むことができるように空き容量を確保する処理を行う。たとえば、ライトキャッシュ４３１に格納されているデータのうち、最も古いデータからＮＡＮＤメモリ３０に追い出す処理を行う。このＮＡＮＤメモリ３０への書き込み処理は、追い出すデータのＬＢＡが含まれるＮＡＮＤメモリ３０内のブロックを取得し、このブロック内のデータをライトキャッシュ４３１のデータを用いて更新し、更新したデータをＮＡＮＤメモリ３０内の新たな（別の）ブロックに書き込む。このとき、古いデータが記憶されていたブロックは無効化される。そして、書き込み処理部４７１は、実行可能なライトコマンドについて、無条件でハードウェア（ホストＩ／Ｆ４１０のライトキュー４１１）へ投入する。
【００３５】
リオーダ制御部４７２は、コマンドキュー４２０に格納されたコマンドについて依存関係があるかを判定し、依存関係がある場合には、依存関係が解消されるまでそのコマンドの実行を中止する。コマンドの依存関係には、Read  After  Write（以下、ＲＡＷという）、Write  After  Write（以下、ＷＡＷという）およびWrite  After  Read（以下、ＷＡＲという）の３種類がある。ＲＡＷは、後続する読み出し要求が先行する書き込み要求を追い越して、先行する書き込み要求と同じＬＢＡの古いデータを読み出してしまう場合である。ＷＡＷは、後続の書き込み要求が先行する同一アドレスに対する書き込み要求を追い越すことで古い書き込みデータが最終的に残ってしまう場合である。ＷＡＲは、後続の書き込み要求が先行する読み出し要求を追い越すことで、未来のデータを読み出してしまう場合である。
【００３６】
これらの依存関係は、先行する要求と後続の要求とがいずれも同一のアドレスに対するものである場合である。そのため、リオーダ制御部４７１は、コマンドキュー４２０に蓄積されたコマンドのアクセス先のアドレスを調べ、先行する（先に投入された）コマンドと後続の（後に投入された）コマンドとが同じアクセス先アドレスを有し、かつＲＡＷ，ＷＡＷまたはＷＡＲの関係を有する場合には、そのコマンドの実行を中止する処理を行う。
【００３７】
また、リオーダ制御部４７２は、依存関係がないコマンドについて、すぐに実行可能なコマンドをリオーダバッファ４６２に格納し、すぐには実行できないコマンドをウェイトキュー４６３に格納する処理も行う。たとえば、アドレス管理部４７３によってコマンドのアクセス先のＬＢＡがＮＡＮＤメモリ３０内の物理アドレスに変換された場合に、すぐに実行できるコマンドとし、そうでない場合にすぐには実行できないコマンドとする。
【００３８】
さらに、リオーダ制御部４７２は、リオーダバッファ４６２に登録されたコマンドについて、読み出し用リソース情報に基づいてハードウェア（転送順序制御部４５０のリードキュー４５１）への投入を制御する。たとえば、ＮＡＮＤメモリ３０のリソースとして、ＮＡＮＤメモリ３０に投入されている全コマンド数を用いる場合には、ＮＡＮＤメモリ３０に投入されている全コマンド数が所定の閾値の場合にリードコマンドを投入せず、閾値未満の場合に閾値から投入されている全コマンド数を差し引いた数のリードコマンドを投入する。また、ＮＡＮＤメモリ３０のリソースとして、各並列動作要素３１ａ〜３１ｄに積まれているコマンド数を用いる場合には、リードコマンドを投入する並列動作要素のコマンドの積み数が所定の閾値の場合にリードコマンドを投入せず、閾値未満の場合にたとえばチャネル番号が増える方向にラウンドロビンで空いている並列動作要素３１ａ〜３１ｄに順にリードコマンドを投入する。
【００３９】
また、このときリオーダ制御部４７２は、リードコマンドのアドレスを参照し、同じアドレス（ページ）へのアクセスとなるリードコマンドが存在するかを判定し、同じアドレス（ページ）または連続するアドレス（ページ）へのアクセスとなるリードコマンドが存在する場合には、続けて実行されるようにリードコマンドの順序を決定する。
【００４０】
たとえば、ウェイトキュー４６３中のリードコマンドのアクセス先アドレスであるＬＢＡを取得し、アドレス−チャネル対応情報からそのＬＢＡが存在する並列動作要素を特定し、特定した並列動作要素の不揮発性アドレス管理情報からそのＬＢＡとＮＡＮＤメモリ３０内の物理アドレスとの対応関係が記録されているアドレス管理情報を特定する。この特定されたアドレス管理情報をＮＡＮＤメモリ３０上から読み出す管理情報読み出しコマンドを作成し、作成した管理情報読み出しコマンドをウェイトキュー用リオーダバッファ４６４に登録し、読み出し用リソース情報に基づいてハードウェア（転送順序制御部４５０のリードキュー４５１）への投入を制御する。また、ウェイトキュー４６３中のコマンドで読み込むデータの記録位置の解決に必要なすべての情報（アドレス管理情報）が揃った（アドレス情報キャッシュ４６１に登録された）段階で、そのコマンドをウェイトキュー４６３からリオーダバッファ４６２に登録する。なお、管理情報読み出しコマンドを実行する際に、リオーダバッファ４６２に登録されたリードコマンドで使用されるアドレス管理情報は残し、リオーダバッファ４６２に登録されたリードコマンドで使用されないアドレス管理情報を消去して、この消去した領域に取得したアドレス管理情報を登録する。
【００４１】
アドレス管理部４７３は、依存関係がないリードコマンドについて、そのリードコマンドのアクセス先アドレス（ＬＢＡ）について、アドレス情報キャッシュ４６１のアドレス管理情報を用いてＮＡＮＤメモリ３０内の物理アドレスに変換し、その結果をリオーダ制御部４７２に通知する。アドレス情報キャッシュ４６１のアドレス管理情報のみでアクセス先のＮＡＮＤメモリ３０上の位置を特定することができる場合には、そのＮＡＮＤメモリ３０上の物理アドレスをリオーダ制御部４７２に通知する。また、アドレス情報キャッシュ４６１のアドレス管理情報ではアクセス先のＮＡＮＤメモリ３０上の位置を特定することができない場合には、リオーダ制御部４７２に物理アドレスを特定することができないことを示す情報を通知する。
【００４２】
リソース管理部４７４は、ライトコマンドの実行に必要なバッファ４３０のライトキャッシュ４３１の空き容量を書き込み用リソース情報として管理し、リードコマンドの実行に必要なＮＡＮＤメモリ３０のコマンドの受け付け状態を読み出し用リソース情報として管理し、これらの書き込み用リソース情報と読み出し用リソース情報に変更が生じる際に、リソース情報格納部４６５内のそれぞれの情報を更新する。
【００４３】
つぎに、このような構成のＳＳＤ２０におけるコマンドのリオーダ処理について説明する。図６は、第１の実施形態によるコマンドのリオーダ処理の手順の一例を示すフローチャートである。まず、リオーダ制御部４７２は、過去に実行されたコマンドについてＳＳＤ２０の操作が完了したかを判定する（ステップＳ１１）。ここでは、たとえばアドレス管理情報の読み出しやＮＡＮＤメモリ３０からの１ページ分のデータの読み出し完了などのＳＳＤ２０の内部状態の変化が検出されたかを判定する。ついで、第１の状態の更新処理としてＳＳＤ２０の操作完了時の処理を行う（ステップＳ１２）。
【００４４】
図７は、ＳＳＤの操作完了時の処理手順の一例を示すフローチャートである。リオーダ制御部４７２は、過去に実行されたコマンドの完了した操作の情報を取得し（ステップＳ３１）、完了した操作がＳＳＤ２０へのリード要求であるかを判定する（ステップＳ３２）。完了した操作がＳＳＤ２０へのリード要求である場合（ステップＳ３２でＹｅｓの場合）には、リソース管理部４７４は、リソース情報格納部４６５の読み出し用リソース情報を更新する（ステップＳ３３）。
【００４５】
ついで、実行待ちのリードコマンドがあるかを判定し（ステップＳ３４）、実行待ちのリードコマンドがある場合（ステップＳ３４でＹｅｓの場合）には、後述するリードコマンドの実行処理を行う（ステップＳ３５）。その後または実行待ちのリードコマンドがない場合（ステップＳ３４でＮｏの場合）には、図６のフローチャートへと処理が戻る。
【００４６】
また、ステップＳ３２で完了した操作がＳＳＤ２０へのライト要求である場合（ステップＳ３２でＮｏの場合）には、書き込み制御部４７１は、バッファ４３０のライトキャッシュ４３１を確保する（ステップＳ３６）。このとき、リソース管理部４７４は、リソース情報格納部４６５の書き込み用リソース情報を更新する。
【００４７】
その後、実行待ちのライトコマンドがあるかを判定し（ステップＳ３７）、実行待ちのライトコマンドがある場合（ステップＳ３７でＹｅｓの場合）には、後述するライトコマンドの実行処理を行う（ステップＳ３８）。その後または実行待ちのライトコマンドがない場合（ステップＳ３７でＮｏの場合）には、図６のフローチャートへと処理が戻る。
【００４８】
図６のフローチャートに戻り、ステップＳ１２のＳＳＤ２０の操作完了時の処理が終了後、またはステップＳ１１でＳＳＤ２０の操作が完了した場合（ステップＳ１１でＮｏの場合）には、新しいコマンドを受信したか、またはコマンドの実行が完了したかを判定する（ステップＳ１３）。新しいコマンドを受信したかまたはコマンドの実行が完了した場合（ステップＳ１３でＹｅｓの場合）には、第２の状態更新処理としてコマンドの依存関係更新処理を行う（ステップＳ１４）。これは、新たなコマンドを受信したことによって、コマンドの依存関係が発生したか、またコマンドの実行を完了したことによって、依存関係のあったコマンドに関して、依存関係が解消されたかを確認する。
【００４９】
その後、またはステップＳ１３で新しいコマンドを受信せずかつコマンドの実行が完了していない場合（ステップＳ１３でＮｏの場合）には、上記第１と第２の状態の更新処理を行ったかを判定する（ステップＳ１５）。第１と第２の状態の更新処理を行った場合（ステップＳ１５でＹｅｓの場合）には、データ転送の準備処理を行う（ステップＳ１６）。
【００５０】
図８は、データ転送の準備処理の手順の一例を示すフローチャートである。まず、ホスト１０からのコマンドがホストＩ／Ｆ４１０を介してＳＳＤ２０に入力され、コマンドキュー４２０が新たなコマンドを受け付ける（ステップＳ５１）。ついで、リオーダ制御部４７２がキューイングされたコマンド間の依存関係の更新と依存関係の存在の有無を判断し（ステップＳ５２）、依存関係のないコマンドが存在するかを判定する（ステップＳ５３）。コマンド間の依存関係の存在については、リオーダ制御部４７２は、たとえばコマンドキュー４２０に蓄積されたコマンドのアクセス先アドレスを用いて、コマンド間に上記したＲＡＷ，ＷＡＷまたはＷＡＲの関係があるかを判定する。
【００５１】
依存関係のないコマンドが存在する場合（ステップＳ５３でＹｅｓの場合）には、リオーダ制御部４７２は、コマンドの種類とＬＢＡ、コマンドで実行されるデータの転送サイズを取得する（ステップＳ５４）。ついで、取得したコマンドがリードコマンドであるかを判定する（ステップＳ５５）。コマンドがリードコマンドである場合（ステップＳ５５でＹｅｓの場合）には、リオーダ制御部４７２は後述するリードコマンドの処理を実行し（ステップＳ５６）、図６のフローチャートに処理が戻る。また、コマンドがリードコマンドでない場合（ステップＳ５５でＮｏの場合）には、書き込み制御部４７１は後述するライトコマンドの処理を実行し（ステップＳ５７）、図６のフローチャートに処理が戻る。
【００５２】
一方、ステップＳ５３で依存関係のあるコマンドが存在する場合（ステップＳ５３でＮｏの場合）には、コマンドの転送準備をしていないコマンドであるかを判定する（ステップＳ５８）。コマンドの転送準備をしているコマンドである場合（ステップＳ５８でＮｏの場合）には、図６のフローチャートに処理が戻る。
【００５３】
また、コマンドの転送準備をしていないコマンドである場合（ステップＳ５８でＹｅｓの場合）には、そのコマンドがリードコマンドであるかを判定する（ステップＳ５９）。リードコマンドである場合（ステップＳ５９でＹｅｓの場合）には、リオーダ制御部４７２は管理情報の先行要求処理を行う（ステップＳ６０）。この処理は、実行しようとするコマンドが依存関係のあるリードコマンドの場合に、そのコマンドのアクセス先のデータを取得する際に用いるアドレス管理情報を予め取得する処理である。
【００５４】
図９は、管理情報の先行要求処理の手順の一例を示すフローチャートである。まず、アドレス管理部４７３によって、アドレス情報キャッシュ４６１中の揮発性アドレス管理情報を用いて、転送するデータのＮＡＮＤメモリ３０上の物理アドレスを解決する処理を行い（ステップＳ７１）、その結果から、リオーダ制御部４７２は、ＮＡＮＤメモリ３０上のアドレスを解決することができたかを判定する（ステップＳ７２）。具体的には、アドレス管理部４７３によって、リードコマンドに含まれるＬＢＡがＮＡＮＤメモリ３０内での記録位置を示す物理アドレスに変換されるかを判定する。そして、アドレス管理部４７３によって物理アドレスが返された場合には、リオーダ制御部４７２は転送するデータのＮＡＮＤメモリ３０上の物理アドレスを解決することができると判定し、物理アドレスが返されない場合には、転送するデータのＮＡＮＤメモリ３０上の物理アドレスを解決することができないと判定する。
【００５５】
転送するデータのＮＡＮＤメモリ３０上のアドレスを解決できた場合（ステップＳ７２でＹｅｓの場合）には、アドレス情報キャッシュ４６１中の揮発性アドレス管理情報で解決できたことを示し、新たにアドレス管理情報を取得する必要はないので、アドレス管理情報の先行要求処理が終了し、処理が図８のフローチャートに戻る。
【００５６】
また、転送するデータのＮＡＮＤメモリ３０上のアドレスを解決できなかった場合（ステップＳ７２でＮｏの場合）には、リオーダ制御部４７２は、読み出すべきアドレス管理情報を特定し、読み出すべきアドレス管理情報を読み出す管理情報読み出しコマンドを作成する（ステップＳ７３）。読み出すべきアドレス管理情報とは、リードコマンドで指定されるＬＢＡのうち、揮発性アドレス管理情報に含まれないＬＢＡとＮＡＮＤメモリ３０上の物理アドレスとの対応関係を示す情報である。リオーダ制御部４７２は、読み出すべきアドレス管理情報が格納されている並列動作要素をアドレス−チャネル対応情報から取得し、その読み出すべきアドレス管理情報が格納されている位置を取得することによって、管理情報読み出しコマンドを作成する。そして、リオーダ制御部４７２は、作成した管理情報読み出しコマンドを、ウェイトキュー用リオーダバッファ４６４のアクセス先の並列動作要素に対応するキューに配置する。
【００５７】
ついで、リオーダ制御部４７２は、アドレス管理情報の読み出し時にアクセスするＮＡＮＤ  Ｉ／Ｆ４４０（並列動作要素３１ａ〜３１ｄ）の現在のリソース状況を取得して（ステップＳ７４）、管理情報読み出しコマンドの実行の有無を判断する（ステップＳ７５）。具体的には、リオーダ制御部４７２は、リソース情報格納部４６５から現在の読み出し用リソース情報を取得し、読み出し用リソース情報からＮＡＮＤ  Ｉ／Ｆ４４０にコマンドを投入することができるかを判断する。アクセスするＮＡＮＤ  Ｉ／Ｆ４４０のリソース量がいっぱいである場合には、管理情報読み出しコマンドを実行せず、アクセスするＮＡＮＤ  Ｉ／Ｆ４４０のリソース量に空きがある場合には、管理情報読み出しコマンドを実行すると判定する。
【００５８】
管理情報読み出しコマンドを実行すると判定した場合（ステップＳ７５でＹｅｓの場合）には、ハードウェア（ここでは、転送順序制御部４５０のリードキュー４５１）へ管理情報読み出しコマンドを登録し（ステップＳ７６）、図８のフローチャートに処理が戻る。また、管理情報読み出しコマンドを実行しないと判定した場合（ステップＳ７５でＮｏの場合）には、管理情報の先行要求取得処理が終了し、図８のフローチャートに処理が戻る。
【００５９】
以上の図９に示したように依存関係があるリードコマンドのうち、データ転送のための準備処理が行われていないリードコマンドについて、アドレス管理情報を先行して取得する処理が行われる。そして、この処理が終了すると、図６のフローチャートに処理が戻る。
【００６０】
図８のフローチャートに戻ってステップＳ５９でライトコマンドである場合（ステップＳ５９でＮｏの場合）には、書き込み制御部４７１は、バッファ４３０のライトキャッシュ４３１にライトコマンドで指定される転送データを書き込めるだけの領域を確保する処理を行い（ステップＳ６１）、図６のフローチャートに処理が戻る。
【００６１】
再び図６のフローチャートに戻り、ステップＳ１６のデータ転送の準備処理の後、またはステップＳ１５で第１と第２の状態の更新処理を行っていない場合（ステップＳ１５でＮｏの場合）には、リオーダ制御部４７２は、コマンドキュー４２０に蓄積されたすべてのコマンドについて処理が完了したかを判定する（ステップＳ１７）。すべてのコマンドの処理が完了していない場合（ステップＳ１７でＮｏの場合）には、ステップＳ１１に戻り、すべてのコマンドの処理が完了した場合（ステップＳ１７でＹｅｓの場合）には、リオーダ処理が終了する。
【００６２】
つぎに、図７のステップＳ３５と図８のステップＳ５６に示されるリードコマンドの処理の詳細について説明する。図１０は、リードコマンド処理の手順の一例を示すフローチャートである。まず、アドレス管理部４７３によって、アドレス情報キャッシュ４６１中の揮発性アドレス管理情報を用いて、転送するデータのＮＡＮＤメモリ３０上の物理アドレスを解決する処理を行い（ステップＳ９１）、その結果から、リオーダ制御部４７２は、転送するデータのＮＡＮＤメモリ３０上のアドレスを解決することができたかを判定する（ステップＳ９２）。
【００６３】
ここでは、リオーダ制御部４７２は、リードコマンドのＬＢＡと転送サイズをアドレス管理部４７３に通知し、アドレス管理部４７３は、アドレス情報キャッシュ４６１中の揮発性アドレス管理情報を用いて、受け取ったＬＢＡをＮＡＮＤメモリ３０上の物理アドレスに変換する。このとき、受け取ったＬＢＡに対応するＮＡＮＤメモリ３０上の物理アドレスが揮発性アドレス管理情報にある場合には、ＬＢＡを物理アドレスに変換したものをリオーダ制御部４７２に返すが、受け取ったＬＢＡに対応するＮＡＮＤメモリ３０上の物理アドレスが揮発性アドレス管理情報にない場合には、物理アドレスがない旨の信号（たとえば受け取ったＬＢＡ）を返す。これによって、リオーダ制御部４７２は、転送するデータのＮＡＮＤメモリ３０上のアドレスを解決できたかを判定することができる。
【００６４】
転送するデータのＮＡＮＤメモリ３０上のアドレスを解決できた場合（ステップＳ９２でＹｅｓの場合）には、リオーダ制御部４７２は、そのリードコマンドについて実行可能と判断する。このとき、リオーダ制御部４７２は、そのリードコマンドをリオーダバッファ４６２中のアクセス先の並列動作要素に対応するキューに格納する。
【００６５】
その後、リオーダ制御部４７２は、リソース情報格納部４６５の読み出し用リソース情報を用いて、そのリードコマンドでデータ転送が行われるＮＡＮＤ  Ｉ／Ｆ４４０のリソース状況を確認し（ステップＳ９３）、そのリードコマンド実行の可否を判断する（ステップＳ９４）。ここでは、リオーダ制御部４７２は、リオーダバッファ４６２に登録されたリードコマンドのアクセス先のＮＡＮＤ  Ｉ／Ｆ４４０のリソース量が、所定値未満の場合に実行可能と判断し、ＮＡＮＤ  Ｉ／Ｆ４４０のリソース量が所定値の場合には実行不可能と判断する。なお、ステップＳ９３のリソース状況の確認時に、コマンドの再利用性や連続性も考慮して、コマンドの実行の可否を判定してもよい。たとえば、同じアドレスや連続するアドレスにアクセスするリードコマンドが存在する場合には、それらのコマンドを続けて処理するように並び替えた後に、読み出し用リソース情報を用いてリードコマンド実行の可否を判定してもよい。
【００６６】
判断の結果、コマンドを実行しないと判断した場合（ステップＳ９４でＮｏの場合）には、リードコマンドの処理が終了し、図７または図８のフローチャートに処理が戻る。また、コマンドを実行すると判断した場合（ステップＳ９４でＹｅｓの場合）には、ハードウェア（ここでは、転送順序制御部４５０のリードキュー４５１）へリードコマンドの転送要求を登録し（ステップＳ９５）、図７または図８のフローチャートに処理が戻る。
【００６７】
一方、ステップＳ９２で転送するデータのＮＡＮＤメモリ３０上のアドレスを解決できなかった場合（ステップＳ９２でＮｏの場合）には、リオーダ制御部４７２は、そのリードコマンドでデータ転送を行う際に使用されるアドレス管理情報を読み出す管理情報読み出しコマンドを既に発行したかを判定する（ステップＳ９６）。管理情報読み出しコマンドを既に発行した場合（ステップＳ９６でＹｅｓの場合）には、リードコマンドの処理を終了し、図７または図８のフローチャートに処理が戻る。
【００６８】
また、管理情報読み出しコマンドをまだ発行していない場合（ステップＳ９６でＮｏの場合）には、リオーダ制御部４７２は、読み出すべきアドレス管理情報を特定し、管理情報読み出しコマンドを作成する（ステップＳ９７）。
【００６９】
ついで、リオーダ制御部４７２は、アドレス管理情報の読み出し時にアクセスするＮＡＮＤ  Ｉ／Ｆ４４０（並列動作要素）の現在のリソース状況、すなわち読み出し用リソース情報を取得して（ステップＳ９８）、リソース状況に基づいて管理情報読み出しコマンドの実行の有無を判断する（ステップＳ９９）。
【００７０】
管理情報読み出しコマンドを実行すると判定した場合（ステップＳ９９でＹｅｓの場合）には、ハードウェア（ここでは、転送順序制御部４５０のリードキュー４５１）へ管理情報読み出しコマンドを登録し（ステップＳ１００）、図７または図８のフローチャートに処理が戻る。また、管理情報読み出しコマンドを実行しないと判定した場合（ステップＳ９９でＮｏの場合）には、リードコマンドの処理が終了し、図７または図８のフローチャートに処理が戻る。
【００７１】
以上のようにリードコマンドの処理では、アドレス情報キャッシュ４６１中の揮発性アドレス管理情報で転送するすべてのデータのＮＡＮＤメモリ３０上の物理アドレスを解決することができる場合には、ＮＡＮＤ  Ｉ／Ｆ４４０のリソース量に応じハードウェアへリードコマンドを転送するか否かを決めている。また、揮発性アドレス管理情報ではＮＡＮＤメモリ３０上の物理アドレスを解決できない場合には、そのリードコマンドを実行するのに用いるアドレス管理情報をアドレス情報キャッシュ４６１に登録する管理情報読み出しコマンドを発行する処理を行う。
【００７２】
つぎに、図７のステップＳ３８と図８のステップＳ５７に示されるライトコマンドの処理の詳細について説明する。図１１は、ライトコマンド処理の手順の一例を示すフローチャートである。まず、書き込み制御部４７１は、ライトコマンドで指定されるデータ量を書き込むのに十分な空き領域がバッファ４３０のライトキャッシュ４３１にあるかを、書き込み用リソース情報を用いて確認し、転送するデータ量分の領域をライトキャッシュ４３１に確保する処理を行う（ステップＳ１１１）。
【００７３】
転送するデータ量分の領域をライトキャッシュ４３１に確保できた場合（ステップＳ１１２でＹｅｓの場合）には、書き込み制御部４７１はライトコマンドの実行を判断する（ステップＳ１１３）。このとき、リソース管理部４７４は、ライトコマンドで転送するデータを書き込むことによって変化するライトキャッシュ４３１の空き領域を計算し、リソース情報格納部４６５の書き込み用リソース情報を更新する。そして、ハードウェア（この場合には、ホストＩ／Ｆ４１０）にライトコマンドの転送要求を登録し（ステップＳ１１４）、図７と図８のフローチャートに処理が戻る。
【００７４】
また、転送するデータ量分の領域をライトキャッシュ４３１に確保できない場合（ステップＳ１１２でＮｏの場合）には、既にバッファ４３０のライトキャッシュ４３１の確保処理を行ったコマンドであるかを判定する（ステップＳ１１５）。既にライトキャッシュ４３１の確保処理を行ったコマンドの場合（ステップＳ１１５でＹｅｓの場合）には、ライトコマンドの処理が終了し、図７と図８のフローチャートに処理が戻る。
【００７５】
また、まだライトキャッシュ４３１の確保処理を行っていないコマンドの場合（ステップＳ１１５でＮｏの場合）には、バッファ４３０のライトキャッシュ４３１にライトコマンドで指定される転送データを書き込めるだけの領域を確保する処理を行い（ステップＳ１１６）、図７と図８のフローチャートに処理が戻る。
【００７６】
以上のようにライトコマンドの処理では、書き込むデータ量分の空き領域をライトキャッシュ４３１に確保することができた場合にはライトコマンドを実行させ、ライトキャッシュ４３１に書き込むデータ量分の空き領域を確保できなかった場合には、ライトキャッシュ４３１に空き領域を確保する処理を行うようにしている。
【００７７】
なお、以上で説明した処理は、それぞれの処理が独立して実行される。ここで、第１の実施形態によるリオーダ処理の具体的な流れについて、図面を参照しながら説明する。
【００７８】
＜リオーダ処理の概略＞
図１２は、リオーダ処理の概略を模式的に示す図である。新しいコマンドがコマンドキュー４２０に登録されると（ステップＳ２０１）、制御部４７０はコマンドキュー４２０内の新規コマンドを検索し（ステップＳ２０２）、ライトコマンドまたはリードコマンドを取得する（ステップＳ２０３，Ｓ２０４）。なお、この図でＷはライトコマンドを示している。
【００７９】
ライトコマンドを取得した場合（ステップＳ２０３）には、制御部４７０はライト処理を実行する（ステップＳ２０５）。上記したように、ライト処理の場合には、ライトキャッシュ４３１にデータを書き込む空き領域を確保し、確保した空き領域に取得したライトコマンドで書き込むデータを割り当てる。そして、ライトコマンドの実行をライトキュー４１１に登録し（ステップＳ２０６）、ライトキュー４１１に登録された順にライトコマンドが実行される（ステップＳ２０７）。
【００８０】
リードコマンドを取得した場合（ステップＳ２０４）には、制御部４７０はリード処理を実行する（ステップＳ２０８）。上記したように、リード処理の場合には、揮発性アドレス管理情報内にリードコマンドのアクセス先のＮＡＮＤメモリ３０内の物理アドレスがあるか否かによってリードコマンドの実行順序を変更し、すぐに実行可能なリードコマンドについてＮＡＮＤ  Ｉ／Ｆ４４０のリソース状況とリードコマンドの再利用性に応じてさらにリードコマンドの実行順序を変更するリオーダ処理が行われる。また、揮発性アドレス管理情報内にリードコマンドのアクセス先のＮＡＮＤメモリ３０内の物理アドレスがない場合に、そのリードコマンドについてのアドレス管理情報を読み出す管理情報読み出しコマンドを作成する。そして、リードコマンドまたは管理情報読み出しコマンドをリードキュー４５１に登録し（ステップＳ２０９）、リードキュー４５１に登録された順にリードコマンドが実行される（ステップＳ２１０）。
【００８１】
＜リード処理時のデータ記録位置の解決の可否によるリオーダ処理＞
図１３は、リード処理時のリオーダ処理の概略を模式的に示す図である。新しいコマンドがコマンドキュー４２０に登録されると（ステップＳ３０１）、制御部４７０はコマンドキュー４２０内の新規コマンドを検索し（ステップＳ３０２）、リードコマンドを取得する（ステップＳ３０３）。
【００８２】
ついで、制御部４７０は、アドレス情報キャッシュ４６１を用いてリードコマンドのＬＢＡをＮＡＮＤメモリ３０内の物理アドレスに変換できるか否かによって振り分け処理を行う（ステップＳ３０４，Ｓ３０５）。転送すべき全データの記録位置をアドレス情報キャッシュ４６１の揮発性アドレス管理情報で解決できる場合には、そのリードコマンドをリオーダバッファ４６２に登録し（ステップＳ３０４）、転送すべきデータの記録位置を揮発性アドレス管理情報で解決できない場合には、そのリードコマンドをウェイトキュー４６３に登録する（ステップＳ３０５）。
【００８３】
ついで、制御部４７０は、リオーダバッファ４６２に登録されたリードコマンドについて、ＮＡＮＤ  Ｉ／Ｆ４４０のリソース状況に応じてさらにリードコマンドの実行の可否を決め、実行可能なリードコマンドについてリードキュー４５１に登録する（ステップＳ３０６）。
【００８４】
制御部４７０は、ウェイトキュー４６３に登録されたリードコマンドについて、リードコマンドで転送すべき全データの記録位置を解決できるアドレス管理情報を取得する管理情報読み出しコマンドを生成し、リードキュー４５１に登録する（ステップＳ３０７）。また、転送すべきデータの記録位置の解決に必要なアドレス管理情報が揃った段階で、ウェイトキュー４６３中のリードコマンドを、制御部４７０を介してリオーダバッファ４６２に登録する。なお、リオーダバッファ４６２に登録されたリードコマンドは、ステップＳ３０６で説明したように、リソース状況に応じてリードキュー４５１に登録される。
【００８５】
そして、リードキュー４５１に登録された順にリードコマンドが実行される（ステップＳ３０９）。
【００８６】
＜チャネルの利用状況に応じたリオーダ処理＞
図１４は、チャネルの利用状況に応じたリオーダ処理の概略を模式的に示す図である。この図は、図１３のリオーダバッファ４６２からリードキュー４５１に登録する処理の詳細を示している。なお、ここでは、リードキュー４５１に既にリードコマンドＲ１〜Ｒ７が登録されているものとする。
【００８７】
まず、制御部４７０は、コマンドキュー４２０からリードコマンドを取得し、アドレス情報キャッシュ４６１の揮発性アドレス管理情報でアクセス先のＮＡＮＤメモリ３０内の物理アドレスを解決できたリードコマンドをリオーダバッファ４６２に登録する（ステップＳ４０１）。このとき、コマンドキュー４２０には、リードコマンドＲ８〜Ｒ１４が順に登録されたものとし、リオーダバッファ４６２内のチャネルｃｈ０〜ｃｈ３（並列動作要素３１ａ〜３１ｄ）ごとに設けられたキュー４６２−０〜４６２−３のうち、アクセス先の並列動作要素３１ａ〜３１ｄに対応するキューにリードコマンドＲ８〜Ｒ１４が登録される。たとえば、リードコマンドＲ８〜Ｒ１０，Ｒ１４は並列動作要素３１ａをアクセス先とするので、リオーダバッファ４６２内のチャネルｃｈ０に対応するキュー４６２−０に登録される。また、リードコマンドＲ１１，Ｒ１２，Ｒ１３は、それぞれリオーダバッファ４６２内のチャネルｃｈ１，ｃｈ２，ｃｈ３に対応するキュー４６２−１，４６２−２，４６２−３に登録される。
【００８８】
ついで、制御部４７０は、リソース情報格納部４６５の読み出し用リソース情報４６５ａを参照して、並列動作要素３１ａ〜３１ｄのコマンドの登録状況を参照する（ステップＳ４０２）。ここで、ＮＡＮＤメモリ３０全体のコマンド登録個数は１０個に制限されているとし、各並列動作要素３１ａ〜３１ｄへのコマンド登録個数は３個までであるとする。つまり、読み出し用リソース情報４６５ａに、リードコマンドが１０個登録されている場合には、リードキュー４５１への新たなコマンドの登録はできず、また１つのチャネルｃｈ０〜ｃｈ３にリードコマンドが３個登録されている場合には、そのチャネルには新たなコマンドの登録はできないものとする。
【００８９】
図に示される例では、制御部４７０は、ＮＡＮＤメモリ３０全体のコマンド登録数が７個であるので、新たにコマンドを３個登録することができると判断する。そして、読み出し用リソース情報４６５ａで、最もコマンドの登録個数の少ない並列動作要素に対応するチャネルで、かつチャネル番号の小さいものを検索する。そして、制御部４７０は、読み出し用リソース情報４６５ａの検索したチャネルからラウンドロビンで空いている場所にリードコマンドを登録し（ステップＳ４０３）、読み出し用リソース情報４６５ａを更新する。
【００９０】
この例では、読み出し用リソース情報４６５ａのチャネルｃｈ２で最もコマンドの登録個数が少なく、かつチャネル番号が小さいものであるので、まずこのチャネルｃｈ２にリードコマンドＲ１２を登録する。ついで、チャネルｃｈ３にリードコマンドＲ１３を登録し、さらにチャネルｃｈ１にリードコマンドＲ１１を登録する。なお、ＮＡＮＤメモリ３０全体に登録できるコマンド数は１０個であり、この登録処理の前には７個のコマンドが登録されていたので、３個のリードコマンドが登録される。また、チャネルｃｈ０には３個のコマンドが登録されているので、リードコマンドは登録されない。
【００９１】
その後、読み出し用リソース情報４６５ａに登録した順に、リオーダバッファ４６２からリードキュー４５１にリードコマンドを登録する（ステップＳ４０４）。ステップＳ４０３では、リードコマンドＲ１２，Ｒ１３，Ｒ１１の順で読み出し用リソース情報４６５ａに登録したので、リードキュー４５１にこの順番で登録する。その結果、リードキュー４５１ではリードコマンドＲ７の後に、リードコマンドＲ８ではなくリードコマンドＲ１２が登録されることになる。
【００９２】
なお、図１４の例では、ＮＡＮＤメモリ３０に最初に投入されているコマンド数は、登録可能な個数の１０個よりも少ない７個であったが、最初に投入されているコマンド数が１０個の場合について、コマンドの投入方法について説明する。図１５は、コマンド投入数に制限がある場合の読み出し用リソース情報へのリードコマンドの登録の一例を示す図である。図１５（ａ）に示されるように、読み出し用リソース情報４６５ａには１０個のリードコマンドＲ１〜Ｒ１０が登録されている。そのため、この状態ではこれ以上のリードコマンドの投入はできない。
【００９３】
その後、図１５（ｂ）に示されるように、リードコマンドＲ１，Ｒ２の処理が完了すると、全体で２個のリードコマンドを投入可能な状態となる。そこで、ここでは新たに２個のリードコマンドＲ１１,Ｒ１２が、上記した規則にしたがってそれぞれチャネルｃｈ２，ｃｈ３に登録される。
【００９４】
このように、ＮＡＮＤメモリ３０に投入される全体のコマンド数に制限がある場合には、コマンドの完了によってコマンド数に空きが生じた後に、新たなコマンドが投入されることになる。
【００９５】
＜アドレス管理情報の読み出し制御＞
上記したフローチャートを用いた説明では、管理情報読み出しコマンドのリードキュー４５１への投入は、リードコマンドと同様の手順によって行われる場合を示したが、このような方法に限定されず、他の方法で管理情報読み出しコマンドをリードキュー４５１へ投入してもよい。
【００９６】
図１６は、チャネルの利用状況に応じたリオーダ処理の概略を模式的に示す図である。この図は、図１３のウェイトキュー４６３からリードキュー４５１に管理情報読み出しコマンドを登録する処理の詳細を示している。なお、ここでは、リードキュー４５１に既にリードコマンドＲ１〜Ｒ５が登録されているものとする。
【００９７】
まず、制御部４７０は、ウェイトキュー４６３に登録されたリードコマンドのアクセスに必要な不揮発性アドレス管理情報のアドレスを取得する（ステップＳ５０１）。このとき、たとえば複数のリードコマンドについて不揮発性アドレス管理情報のアドレスを取得してもよく、この例では４つのリードコマンドＲ２１〜Ｒ２４の不揮発性アドレス管理情報のアドレスを取得するものとする。
【００９８】
ついで、制御部４７０は、取得した各リードコマンドの不揮発性アドレス管理情報のアドレスを用いて、管理情報読み出しコマンドを作成し、ウェイトキュー用リオーダバッファ４６４に登録する（ステップＳ５０２）。ここでは、リードコマンドＲ２１は、並列動作要素３１ａ，３１ｃの２箇所にアクセスするものであるので、管理情報読み出しコマンドとして、並列動作要素３１ａにアクセスする際のアドレス管理情報を取得する管理情報読み出しコマンドＲＴ２１−ａと、並列動作要素３１ｃにアクセスする際のアドレス管理情報を取得する管理情報読み出しコマンドＲＴ２１−ｂと、の２つのコマンドが生成されている。また、リードコマンドＲ２２，Ｒ２３についてはそれぞれ並列動作要素３１ｄにアクセスするものであるので、管理情報読み出しコマンドとして、並列動作要素３１ｄにアクセスする管理情報読み出しコマンドＲＴ２２，ＲＴ２３が生成される。さらに、リードコマンドＲ２４については、並列動作要素３１ｂ，３１ｄの２箇所にアクセスするものであるので、管理情報読み出しコマンドとして、並列動作要素３１ｂにアクセスする際のアドレス管理情報を取得する管理情報読み出しコマンドＲＴ２４−ａと、並列動作要素３１ｄにアクセスする際のアドレス管理情報を取得する管理情報読み出しコマンドＲＴ２４−ｂと、の２つのコマンドが生成されている。
【００９９】
ついで、ウェイトキュー用リオーダバッファ４６４のチャネルに対応するキューのいずれかに積まれた管理情報読み出しコマンドの数が所定の数（この例では２）になった時点で、リソース情報格納部４６５の読み出し用リソース情報４６５ａに、管理情報読み出しコマンドを登録する（ステップＳ５０３）。なお、このとき１回の読み出し処理で積めないところ（たとえば、図のウェイトキュー用リオーダバッファ４６４の管理情報読み出しコマンドＲＴ２４−ｂ）は、コマンドの完了を待つか、つぎの読み出し要求として登録する。
【０１００】
その後、読み出し用リソース情報４６５ａに登録した管理情報読み出しコマンドをリードキュー４５１に登録する（ステップＳ５０４）。この例では、読み出し用リソース情報４６５ａに４つの管理情報読み出しコマンドＲＴ２１−ａ〜ＲＴ２３が登録されており、これらをまとめて１つのリードコマンドとして扱い、リードキューに登録する。
【０１０１】
＜再利用性を考慮した実行順序入れ替え処理＞
図１７は、再利用性を考慮したリードコマンドの実行順序の入れ替え処理を模式的に示す図である。ここでは、リオーダバッファ４６２の並列動作要素３１ａ（チャネルｃｈ０）に対応するキューに、４つのリードコマンドＲａ〜Ｒｄが登録されているものとする。また、リードコマンドＲａはブロック０のページ０へのリード要求であり、リードコマンドＲｂはブロック９９のページ０内の領域（１）へのリード要求であり、リードコマンドＲｃはブロック０のページ０へのリード要求であり、リードコマンドＲｄはブロック９９のページ０内の領域（２）へのリード要求であるものとする。
【０１０２】
図１７（ａ）に示されるように、コマンドの再利用性を考慮しない場合では、リオーダバッファ４６２に登録された順、すなわちリードコマンドＲａ，Ｒｂ，Ｒｃ，Ｒｄの順にコマンドの実行処理が行われる。そのため、１つのリードコマンドを実行すると、そのリードコマンドで指定されるＮＡＮＤメモリ３０内の記憶位置からデータを読み出し、その後につぎのリードコマンドを実行する。つまり、１つのコマンドを実行するごとにデータの読み出し時間ｔＲが発生する。
【０１０３】
一方、図１７（ｂ）に示されるように、コマンドの再利用性を考慮する場合では、リオーダバッファ４６２に登録されたリードコマンドが、再利用性を考慮してさらに並び替えられる。ここでは、リードコマンドＲａと同じアドレスにアクセスするリードコマンドＲｃを、リードコマンドＲａのつぎに配置する。つまり、リードコマンドＲｂとリードコマンドＲｃとを入れ替える。その結果、リードコマンドＲｂはリードコマンドＲｃの後に配列されることになる。このようにリオーダ処理すると、同じアドレスにアクセスするリードコマンドＲａを実行した後に、リードコマンドＲｃを配置しているので、データの読み出しが一回で済む。また、同じページで異なる領域（１），（２）を読み出すコマンドＲｂ，Ｒｄも一度の読み出し処理で行われる。なお、ここでは同一のページに対する要求をまとめる場合を示したが、既に実行を決定したページのつぎのページに対する要求についても同様にまとめて実行することができる。
【０１０４】
このように、すでに実行を決定したページ、またはそのつぎのページに対する要求をまとめるように、リードコマンドの順番を入れ替え、優先的にリードキュー４５１に登録することで、ＳＳＤ２０内のキャッシュ機能を有効活用することができ、余計な読み出し時間を削減することができる。
【０１０５】
第１の実施形態では、依存関係のあるコマンドを中止し、依存関係のないリードコマンドについて、揮発性アドレス管理情報でＮＡＮＤメモリ３０にアクセス可能か否かと、揮発性アドレス管理情報でＮＡＮＤメモリ３０にアクセス可能な場合に並列動作要素３１ａ〜３１ｄでのコマンドの積み具合によって、コマンドキュー４２０に蓄積されたコマンドの並び替えを行うようにした。これによって、ＳＳＤ２０内でのデータ転送準備の時間を削減しつつ、少ないバッファ量で高いスループットのデータ転送を達成することができる。
【０１０６】
また、揮発性アドレス管理情報でＮＡＮＤメモリ３０にアクセス可能でないリードコマンドについては、そのリードコマンドのアクセス先のアドレス管理情報をＮＡＮＤメモリ３０から読み出し、アドレス情報キャッシュ４６１に登録する管理情報読み出しコマンドを作成し、実行されるようにした。これによって、後回しにされたコマンドも、アクセス環境が整った段階でコマンドが実行されることになる。
【０１０７】
さらに、依存関係のないライトコマンドについては、ライトキャッシュ４３１に転送するデータを書き込むだけのデータ量があるか否かによって、コマンドキュー４２０に蓄積されたコマンドの並び替えを行うようにした。これによって、ライトキャッシュ４３１にすぐに転送することができるデータを先に処理し、空き領域を確保しなければならないコマンドを後回しにしたので、ＳＳＤ２０内でのデータ転送準備の時間を削減しつつ、少ないバッファ量で高いスループットのデータ転送を達成することができる。
【０１０８】
また、先行するリードコマンドによるデータ転送中に、リードキュー４５１に登録された後続のリードコマンドをＮＡＮＤ  Ｉ／Ｆ４４０に予め発行してデータ転送の準備をしておき、先行するリードコマンドによるデータ転送が終了するとすぐにつぎに登録されている後続のリードコマンドによるデータ転送を開始するようにした。これによって、データ転送のスループットを上げることができる。
【０１０９】
（第２の実施形態）
図１８は、ＳＳＤを搭載したパーソナルコンピュータ１２００の一例を示す斜視図である。パーソナルコンピュータ１２００は、本体１２０１、及び表示ユニット１２０２を備えている。表示ユニット１２０２は、ディスプレイハウジング１２０３と、このディスプレイハウジング１２０３に収容された表示装置１２０４とを備えている。
【０１１０】
本体１２０１は、筐体１２０５と、キーボード１２０６と、ポインティングデバイスであるタッチパッド１２０７とを備えている。筐体１２０５内部には、メイン回路基板、ＯＤＤ（Optical  Disk  Device）ユニット、カードスロット、及びＳＳＤ１００等が収容されている。
【０１１１】
カードスロットは、筐体１２０５の周壁に隣接して設けられている。周壁には、カードスロットに対向する開口部１２０８が設けられている。ユーザは、この開口部１２０８を通じて筐体１２０５の外部から追加デバイスをカードスロットに挿抜することが可能である。
【０１１２】
ＳＳＤ１００は、従来のＨＤＤの置き換えとして、パーソナルコンピュータ１２００内部に実装された状態として使用してもよいし、パーソナルコンピュータ１２００が備えるカードスロットに挿入した状態で、追加デバイスとして使用してもよい。
【０１１３】
図１９は、ＳＳＤを搭載したパーソナルコンピュータのシステム構成例を示している。パーソナルコンピュータ１２００は、ＣＰＵ１３０１、ノースブリッジ１３０２、主メモリ１３０３、ビデオコントローラ１３０４、オーディオコントローラ１３０５、サウスブリッジ１３０９、ＢＩＯＳ−ＲＯＭ１３１０、ＳＳＤ１００、ＯＤＤユニット１３１１、エンベデッドコントローラ／キーボードコントローラＩＣ（ＥＣ／ＫＢＣ）１３１２、及びネットワークコントローラ１３１３等を備えている。
【０１１４】
ＣＰＵ１３０１は、パーソナルコンピュータ１２００の動作を制御するために設けられたプロセッサであり、ＳＳＤ１００から主メモリ１３０３にロードされるオペレーティングシステム（ＯＳ）を実行する。更に、ＯＤＤユニット１３１１が、装填された光ディスクに対して読出し処理及び書込み処理の少なくとも１つの処理の実行を可能にした場合に、ＣＰＵ１３０１は、それらの処理の実行をする。
【０１１５】
また、ＣＰＵ１３０１は、ＢＩＯＳ−ＲＯＭ１３１０に格納されたシステムＢＩＯＳ（Basic  Input  Output  System）も実行する。尚、システムＢＩＯＳは、パーソナルコンピュータ１２００内のハードウェア制御のためのプログラムである。
【０１１６】
ノースブリッジ１３０２は、ＣＰＵ１３０１のローカルバスとサウスブリッジ１３０９との間を接続するブリッジデバイスである。ノースブリッジ１３０２には、主メモリ１３０３をアクセス制御するメモリコントローラも内蔵されている。
【０１１７】
また、ノースブリッジ１３０２は、ＡＧＰ（Accelerated  Graphics  Port）バス１３１４等を介してビデオコントローラ１３０４との通信、及びオーディオコントローラ１３０５との通信を実行する機能も有している。
【０１１８】
主メモリ１３０３は、プログラムやデータを一時的に記憶し、ＣＰＵ１３０１のワークエリアとして機能する。主メモリ１３０３は、例えばＲＡＭから構成される。
【０１１９】
ビデオコントローラ１３０４は、パーソナルコンピュータ１２００のディスプレイモニタとして使用される表示ユニット１２０２を制御するビデオ再生コントローラである。
【０１２０】
オーディオコントローラ１３０５は、パーソナルコンピュータ１２００のスピーカ１３０６を制御するオーディオ再生コントローラである。
【０１２１】
サウスブリッジ１３０９は、ＬＰＣ（Low  Pin  Count）バス上の各デバイス、及びＰＣＩ（Peripheral  Component  Interconnect）バス１３１５上の各デバイスを制御する。また、サウスブリッジ１３０９は、各種ソフトウェア及びデータを格納する記憶装置であるＳＳＤ１００を、ＡＴＡインタフェースを介して制御する。
【０１２２】
パーソナルコンピュータ１２００は、セクタ単位でＳＳＤ１００へのアクセスを行う。ＡＴＡインタフェースを介して、書き込みコマンド、読出しコマンド、キャッシュフラッシュコマンド等がＳＳＤ１００に入力される。
【０１２３】
また、サウスブリッジ１３０９は、ＢＩＯＳ−ＲＯＭ１３１０、及びＯＤＤユニット１３１１をアクセス制御するための機能も有している。
【０１２４】
ＥＣ／ＫＢＣ１３１２は、電力管理のためのエンベデッドコントローラと、キーボード（ＫＢ）１２０６及びタッチパッド１２０７を制御するためのキーボードコントローラとが集積された１チップマイクロコンピュータである。
【０１２５】
このＥＣ／ＫＢＣ１３１２は、ユーザによるパワーボタンの操作に応じてパーソナルコンピュータ１２００の電源をＯＮ／ＯＦＦする機能を有している。ネットワークコントローラ１３１３は、例えばインターネット等の外部ネットワークとの通信を実行する通信装置である。
【０１２６】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１２７】
１０…ホスト、２０，１００  ＳＳＤ、３０…ＮＡＮＤメモリ、３１ａ〜３１ｄ…並列動作要素、３２…不揮発性管理情報、４０…データ転送装置、４１…ＡＴＡコントローラ、４２…ＲＡＭコントローラ、４３…ＮＡＮＤコントローラ、４５…自動転送管理部、５０…ＲＡＭ、４１０…ホストＩ／Ｆ、４１１…ライトキュー、４２０…コマンドキュー、４３０…バッファ、４３１…ライトキャッシュ、４３２…リードキャッシュ、４４０…ＮＡＮＤ  Ｉ／Ｆ、４５０…転送順序制御部、４５１…リードキュー、４６１…アドレス情報キャッシュ、４６２…リオーダバッファ、４６３…ウェイトキュー、４６４…ウェイトキュー用リオーダバッファ、４６５…リソース情報格納部、４７０…制御部、４７１…書き込み制御部、４７２…リオーダ制御部、４７３…アドレス管理部、４７４…リソース管理部。
【図１】
0005296041.tif 000002
【図２】
0005296041.tif 000003
【図３】
0005296041.tif 000004
【図４】
0005296041.tif 000005
【図５】
0005296041.tif 000006
【図６】
0005296041.tif 000007
【図７】
0005296041.tif 000008
【図８】
0005296041.tif 000009
【図９】
0005296041.tif 000010
【図１０】
0005296041.tif 000011
【図１１】
0005296041.tif 000012
【図１２】
0005296041.tif 000013
【図１３】
0005296041.tif 000014
【図１４】
0005296041.tif 000015
【図１５】
0005296041.tif 000016
【図１６】
0005296041.tif 000017
【図１７】
0005296041.tif 000018
【図１８】
0005296041.tif 000019
【図１９】
0005296041.tif 000020