(57)【要約】      （修正有）【課題】データ先読みコマンドの実行による通常のデータ読出しコマンド実行の遅延を抑制する。【解決手段】データ通常読出しコマンドを保持する第１コマンドキューと、データ先読みコマンドを保持する第２コマンドキューとを個別に設け、第１コマンドキューにコマンドが保持されているコマンドを、第２コマンドキューに保持されているコマンドよりも優先して実行させる。【選択図】図７
2017228172.tif 000002
【特許請求の範囲】
【請求項１】
第１アドレス領域に格納された第１データを指定するコマンド生成要求に基づき、前記第１データを読出し対象とする第１読出しコマンドを生成する第１コマンド生成部と、
前記コマンド生成要求に基づき、前記第１アドレス領域とは異なる第２アドレス領域に格納された第２データを読出し対象とする第２読出しコマンドを生成する第２コマンド生成部と、
前記第１コマンド生成部によって生成された前記第１読出しコマンドを保持する第１コマンドバッファと、
前記第２コマンド生成部によって生成された前記第２読出しコマンドを保持する第２コマンドバッファと、
前記第１コマンドバッファ及び前記第２コマンドバッファに保持される前記第１読出しコマンド及び前記第２読出しコマンドを実行するコマンド実行部と、
を有し、
前記コマンド実行部は、前記第１コマンドバッファが空の状態であることを条件として、前記第２コマンドバッファに格納されている前記第２読出しコマンドを実行する
ことを特徴とする情報処理システム。
【請求項２】
前記情報処理システムは、情報処理装置と、前記情報処理装置に接続されたストレージとを有し、
前記情報処理装置は、第１メモリを有し、
前記ストレージは、第２メモリを有し、
前記第１読出しコマンド及び前記第２読出しコマンドが実行されることにより、前記第２メモリの前記第１アドレス領域及び前記第２アドレス領域にそれぞれ格納されている前記第１データ及び前記第２データが読み出され、読み出された前記第１データ及び前記第２データは、前記第１メモリに保持されることを特徴とする請求項１に記載の情報処理システム。
【請求項３】
前記第１コマンド生成部は、前記情報処理装置に設けられ、
前記第２コマンド生成部は、前記ストレージに設けられ、
前記第１コマンド生成部は、前記第２アドレス領域を示す情報を前記第２コマンド生成部へ送信することを特徴とする請求項２に記載の情報処理システム。
【請求項４】
前記情報処理装置は、情報処理に使用される前記第１データが格納される前記第１メモリの前記第１アドレス領域を指定する前記第１読出しコマンドを生成し、
前記情報処理装置は、前記第１アドレスに基づき、前記第２データが前記情報処理に使用されることを予測し、
前記情報処理装置は、前記予測に基づき、前記第２アドレス領域を特定し、
前記第２コマンド生成部は、特定された前記第２アドレス領域を読出し対象とする前記第２読出しコマンドを生成する
ことを特徴とする請求項１乃至３何れか一項に記載の情報処理システム。
【請求項５】
第１アドレス領域に格納された第１データを指定するコマンド生成要求に基づき、前記第１データを読出し対象とする第１読出しコマンドを生成する第１コマンド生成部と、
前記コマンド生成要求に基づき、前記第１アドレス領域とは異なる第２アドレス領域に格納された第２データを読出し対象とする第２読出しコマンドを生成する第２コマンド生成部と、
前記第１コマンド生成部及び前記第２コマンド生成部によってそれぞれ生成された前記第１読出しコマンド及び前記第２読出しコマンドを保持する第１コマンドバッファと、
前記第１コマンドバッファに保持される前記第１読出しコマンド及び前記第２読出しコマンドを実行するコマンド実行部と、
を有し、
前記第２コマンド生成部は、前記第１コマンドバッファのコマンド保持状況に基づいて、前記第２コマンド生成部にて生成される前記第２読出しコマンドを、前記第１コマンドバッファに保持させるタイミングを制御することを特徴とする情報処理システム。
【請求項６】
前記第２コマンド生成部は、前記第１コマンドバッファに保持されるコマンドの数が所定値以下である場合に、前記第２コマンド生成部にて生成される前記第２読出しコマンドを、前記第１コマンドバッファに保持させることを特徴とする請求項５に記載の情報処理システム。
【請求項７】
前記第１コマンド生成部によって生成された前記第１読出しコマンドは、前記第１コマンドバッファ及び前記第２コマンド生成部へ送信され、
前記第２コマンド生成部は、前記第１読出しコマンドを保持する第２コマンドバッファを有し、
前記第２コマンド生成部は、前記第２コマンドバッファに前記第１コマンド保持されるコマンドの数が所定値以上である場合に、前記第２コマンド生成部にて生成される前記第２読出しコマンドを、前記第１コマンドバッファに保持させることを特徴とする請求項５又は６に記載の情報処理システム。
【請求項８】
前記第２コマンド生成部は、生成された前記第２読出しコマンドを保持する第２コマンドバッファを有し、
前記第２コマンド生成部は、前記第２コマンドバッファに保持される前記第２読出しコマンドの数が所定値以上である場合に、前記第２読出しコマンドを前記第１コマンドバッファに保持させることを特徴とする請求項７に記載の情報処理システム。
【請求項９】
第１アドレス領域に格納された第１データを指定するコマンド生成要求に基づき、前記第１データを読出し対象とする第１読出しコマンドを生成する第１コマンド生成部と、
前記コマンド生成要求に基づき、前記第１アドレス領域とは異なる第２アドレス領域に格納された第２データを読出し対象とする第２読出しコマンドを生成する第２コマンド生成部と、
前記第１読出しコマンド及び前記第２読出しコマンドに基づき、前記第１アドレス及び前記第２アドレス領域からそれぞれ第１データ及び第２データを読み出すコマンド実行部と、
読み出された前記第１データ及び前記第２データを保持する第１メモリと、を有し、
第２コマンド生成部は、前記第２データが前記第１メモリに保持された後の一定期間内に、前記第２アドレス領域を指定する他のコマンド生成要求がなされなかった場合は、前記一定期間が経過した後に、前記第１アドレス領域を指定する他のコマンド生成要求がなされた場合に、前記第２アドレス領域を指定する第３読出しコマンドを生成しない
ことを特徴とする情報処理システム。
【請求項１０】
前記情報処理システムは、情報処理装置と、前記情報処理装置に接続されたストレージとを有し、
前記情報処理装置は、前記第１メモリを有し、
前記ストレージは、第２メモリを有する
ことを特徴とする請求項９に記載の情報処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、情報処理システムに関する。
【背景技術】
【０００２】
サーバ等の情報処理装置がストレージ等の外部記憶装置にアクセスし、外部記憶装置に格納されているデータを読み出す際、データの読出しに要する時間を短縮することが望まれる。ストレージ内には、Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ（ＨＤＤ）やフラッシュメモリ等の不揮発性メモリが設けられ、不揮発性メモリにデータが格納される。一般的に不揮発性メモリのデータ読出しに要する時間は、Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ（ＤＲＡＭ）やＳｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ（ＳＲＡＭ）等の揮発性メモリにおけるデータ読出しに要する時間に比べて長い。ＮＡＮＤ型フラッシュメモリにおいてページ単位でのデータ読出しが行われる場合、１ページのデータ読出しには例えば５０μｓ程度の時間を要する。
【０００３】
不揮発性メモリからのデータ読出しを効率的に実行する方法として、データ先読み又はデータの投機的読出しと呼ばれる処理が知られている。このデータ先読み処理は、例えばサーバがあるデータを不揮発性メモリから読み出す際、その後にサーバでの演算処理等に使用される可能性があるデータも併せて読み出し、サーバに設けられた揮発性メモリに保持しておく方法である。サーバは、データ先読み処理によってデータが揮発性メモリに保持されている場合には、不揮発性メモリへのデータ読出しを行うことなく、揮発性メモリに保持されたデータを使用して演算処理を実行する。これにより、演算処理の高速化を図ることができる。データ先読み処理の具体的な処理として、不揮発性メモリの第１アドレスを指定したデータ読出しコマンド（以下、「データ通常読出しコマンド」と呼ぶ）がサーバによって発行される際、サーバは、データ先読み処理の対象となる第２アドレスを特定する。そして第１アドレスを読出し対象とするデータ通常読出しコマンドと、第２アドレスを読出し対象とするデータ読出しコマンド（以下、「データ先読みコマンド」と呼ぶ）が発行される。ストレージは、データ通常読出しコマンド及びデータ先読みコマンドを実行し、不揮発性メモリから読み出されたデータをサーバへ送信する。
【０００４】
データ先読み処理において、先読みの対象アドレスを特定する方法として、例えばＬｏｏｋ  Ａｈｅａｄと呼ばれるアルゴリズムが知られている。Ｌｏｏｋ  Ａｈｅａｄは、通常のデータ読出しコマンドで指定されたアドレスに続く次のアドレスを、データ先読み処理の対象アドレスとして特定する方法である。
【０００５】
尚、本明細書の以降の部分において、「データ読出しコマンド」という表記は、「データ通常読出しコマンド」と「データ先読みコマンド」の両方を含む上位概念の文言として使用される。また「コマンド」という表記は、データ読出しコマンドや、その他データ書込みコマンド（プログラムコマンド）やデータ消去コマンド（イレースコマンド）等を含めた更なる上位概念の文言として使用される。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００１−１２５８９号公報
【特許文献２】特開２００６−２６００６７号公報
【特許文献３】特開２０１０−１９１９８３号公報
【特許文献４】特開２００２−２４００７号公報
【特許文献５】特開２００４−１６４１４４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
データ先読み処理を実行する場合においては、サーバによって実際に使用されるデータを読み出すための通常のデータ読出しコマンドと、サーバによって使用されることが予測されるデータを読み出すためのデータ先読みコマンドが発行される。本開示は、データ先読みコマンドの実行により通常のデータ読出しコマンドの実行が遅延することを抑制することを目的とするものである。
【課題を解決するための手段】
【０００８】
開示の情報処理システムは、第１アドレス領域に格納された第１データを指定するコマンド生成要求に基づき、前記第１データを読出し対象とする第１読出しコマンドを生成する第１コマンド生成部と、前記コマンド生成要求に基づき、前記第１アドレス領域とは異なる第２アドレス領域に格納された第２データを読出し対象とする第２読出しコマンドを生成する第２コマンド生成部と、前記第１コマンド生成部によって生成された前記第１読出しコマンドを保持する第１コマンドバッファと、前記第２コマンド生成部によって生成された前記第２読出しコマンドを保持する第２コマンドバッファと、前記第１コマンドバッファ及び前記第２コマンドバッファに保持される前記第１読出しコマンド及び前記第２読出しコマンドを実行するコマンド実行部と、を有し、前記コマンド実行部は、前記第１コマンドバッファが空の状態であることを条件として、前記第２コマンドバッファに格納されている前記第２読出しコマンドを実行することを特徴とする
【発明の効果】
【０００９】
データ先読みコマンドの実行によりデータ通常読出しコマンドの実行が遅延することを抑制することができる。
【図面の簡単な説明】
【００１０】
【図１】第１実施例におけるシステム構成を示す図である。
【図２】第１実施例におけるシステムのハードウェア構成を示す図である。
【図３】第１実施例における効果を説明するための図である。
【図４】第１実施例における情報処理装置の機能ブロックを示す図である。
【図５】第１実施例におけるコマンドのデータ構成を示す図である。
【図６】第１実施例における保持データテーブルの内容例を示す図である。
【図７】第１実施例におけるストレージの機能ブロックを示す図である。
【図８】第１実施例におけるＣＰＵによって実行される処理のフローチャートである。
【図９】第１実施例におけるメモリコントローラによって実行される処理のフローチャートである。
【図１０】第１実施例におけるメモリコントローラによって実行される処理のフローチャートである。
【図１１】第１実施例におけるＣＰＵによって実行される処理のフローチャートである。
【図１２】第２実施例におけるストレージの機能ブロックを示す図である。
【図１３】第２実施例におけるデータ先読みコマンド生成部の機能ブロックの一例を示す図である。
【図１４】図１３に示されるデータ先読みコマンド生成部によって実行される処理のフローチャートである。
【図１５】第２実施例におけるデータ先読みコマンド生成部の機能ブロックの他の例を示す図である。
【図１６】図１５に示されるデータ先読みコマンド生成部によって実行される処理のフローチャートである。
【図１７】第３実施例における情報処理装置の機能ブロックを示す図である。
【図１８】第３実施例における先読みリストテーブルの内容例を示す図である。
【図１９】第３実施例におけるＣＰＵによって実行される処理のフローチャートである。
【図２０】第３実施例におけるＣＰＵによって実行される処理のフローチャートである。
【図２１】第３実施例の変形例におけるＣＰＵによって実行される処理のフローチャートである。
【図２２】第３実施例の変形例におけるＣＰＵによって実行される処理のフローチャートである。
【発明を実施するための形態】
【００１１】
＜第１実施例＞
図１は、第１実施例におけるシステム構成を示す図である。本実施例で開示されるシステムは、情報処理装置１０とストレージ２０を含む。情報処理装置１０としてはサーバ等のホスト装置の他、Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ（ＰＣ）等の端末装置も適用可能である。ストレージ２０としてはＳｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ（ＳＳＤ）やＨＤＤが適用可能である。情報処理装置１０は、データ処理を実行するデータ処理部１１と、データ処理部１１でのデータ処理に使用されるデータ又はデータ処理部１１にて処理がなされたデータを保持するデータ保持部１２を含む。ストレージ２０は、データを格納するデータ格納部２２と、データ格納部２２へのデータ格納処理やデータ格納部２２からのデータ読出しの処理を制御する制御部２１とを含む。
【００１２】
図２は、第１実施例におけるシステムのハードウェア構成を示す図である。情報処理装置１０は、Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ（ＣＰＵ）１００と、Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ（ＲＯＭ）１５０と、ＤＲＡＭ１６０と、通信デバイス１７０と、インターフェースカード１８０と、バス１９０とを有する。ＣＰＵ１００は、ＲＯＭ１５０に格納されたコンピュータプログラムをＤＲＡＭ１６０にダウンロードして実行することにより、所定のデータ処理を行う。ＣＰＵ１００は、ハードウェアプロセッサの一例であり、Ｍｉｃｒｏ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ（ＭＣＵ）、Ｍｉｃｒｏ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ（ＭＰＵ）、Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ（ＤＳＰ）、Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ（ＦＰＧＡ）等がＣＰＵ１００の代わりに用いられてもよい。
【００１３】
ＲＯＭ１５０には、ＣＰＵ１００によって実行されるコンピュータプログラム等が格納される。ＲＯＭ１５０は不揮発性メモリデバイスの一例であり、Ｍａｓｋ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ（マスクＲＯＭ）や、Ｐｒｏｇｒａｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ（ＰＲＯＭ）、フラッシュメモリ、Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ（ＭＲＡＭ）、Ｒｅｓｉｓｔａｎｃｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ（ＲｅＲＡＭ）、Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ（ＦｅＲＡＭ）等が適用可能である。
【００１４】
ＤＲＡＭ１６０には、ＲＯＭ１５０に格納されているコンピュータプログラムがロードされる。またＤＲＡＭ１６０は、ＣＰＵ１００によって処理されるデータを、ストレージ２０から受信して保持する。ＤＲＡＭ１６０は揮発性メモリデバイスの一例であり、ＳＲＡＭがＤＲＡＭ１６０の代わりとして用いられてもよい。通信デバイス１７０は、情報処理装置１０が他の情報処理装置とデータ通信を行うためのデバイスであり、無線通信デバイス又は有線通信デバイスを含み得る。バス１９０は、ＣＰＵ１００、ＲＯＭ１５０、ＤＲＡＭ１６０、通信デバイス１７０を相互に接続し、互いのデータ通信の経路として機能する物理配線である。インターフェースカード１８０は、バス１９０によりＣＰＵ１００やＤＲＡＭ１６０等に接続される。インターフェースカード１８０は、ストレージ２０に対してデータ読出しコマンド（リードコマンド）やデータ書込みコマンド（プログラムコマンド）等のコマンドを送信し、また、ストレージ２０から読み出されたデータを受信する。
【００１５】
ストレージ２０は、メモリコントローラ２００、フラッシュメモリ２５０Ａ、２５０Ｂ及び２５０Ｃと、インターフェースカード２８０を含む。メモリコントーラ２００は、例えばＦＰＧＡである。メモリコントローラ２００は、ＦＰＧＡ以外にも、ＣＰＵやＭＣＵを用いて実現されてもよい。フラッシュメモリ２５０Ａ、２５０Ｂ及び２５０Ｃは、データを格納するための不揮発性メモリデバイスの一例であり、例えばＮＡＮＤ型フラッシュメモリである。但しＮＡＮＤ型フラッシュメモリ以外にも、ＮＯＲ型フラッシュメモリや、マスクＲＯＭ、ＰＲＯＭ、ＭＲＡＭ、ＲｅＲＡＭ、ＦｅＲＡＭ等も不揮発性メモリデバイスとして適用可能である。図２においては３つのチップのフラッシュメモリ２５０Ａ、２５０Ｂ及び２５０Ｃが示されるが、これは不揮発性メモリデバイスのハードウェア構成の一例であり、不揮発性メモリデバイスの数（チップ数）を限定するものではない。本実施例では、不揮発性メモリデバイスの数を「チャネル数」と呼び、フラッシュメモリ２５０Ａが第１チャネル、フラッシュメモリ２５０Ｂが第２チャネル、フラッシュメモリ２５０Ｃが第３チャネルにそれぞれ対応するものとする。また本明細書の以降の部分において、図示された３つのフラッシュメモリの何れかを特定する意図のない場合は、単に「フラッシュメモリ２５０」と表記するものとする。各チャネルのフラッシュメモリ２５０において、例えば２１１２バイトのメモリセルが１つのページを構成する。また例えば６４ページにより一つのブロックが構成される。ＮＡＮＤ型フラッシュメモリの場合、データ消去はブロック単位で行われ、データ読出し及びデータ書込みはページ単位で行われる。
【００１６】
インターフェースカード２８０は、情報処理装置１０から送信されたコマンドを受信する。メモリコントローラ２００は、インターフェースカード２８０にて受信されたコマンドに基づき、フラッシュメモリ２５０に対して、データの読出し、データ書込み及びデータ消去等の処理を行う。またメモリコントローラ２００は、フラッシュメモリ２５０から読み出されたデータを、インターフェースカード２８０を介して情報処理装置１０へ送信する。
【００１７】
ここで、データ先読み処理の概要について説明する。情報処理装置１０のＣＰＵ１００は、自身がデータ処理を実行する際に使用するデータがＤＲＡＭ１６０に保持されていない場合は、当該データをストレージ２０から読み出してＤＲＡＭ１６０に保持させる。この際、ＣＰＵ１００は、当該データが格納されているフラッシュメモリ２５０のアドレスを指定するデータ読出しコマンド（データ通常読出しコマンド）を発行する。また、ＣＰＵ１００は、ＣＰＵ１００でのデータ処理に用いられることが予想されるデータを投機的に読み出すための追加のデータ読出しコマンド（データ先読みコマンド）の発行を、ストレージ２０に指示する。データ先読みコマンドの発行指示は、データ通常読出しコマンド内に含ませることができる。ＣＰＵ１００によって発行されたデータ通常読出しコマンドは、情報処理装置１０のインターフェースカード１８０及びストレージ２０のインターフェースカード２８０を介してメモリコントローラ２００へ送信される。メモリコントローラ２００は、データ通常読出しコマンドを実行してフラッシュメモリ２５０からデータを読み出す。メモリコントローラ２００は更に、ＣＰＵ１００からの指示に基づいてデータ先読みコマンドを発行して実行することで、フラッシュメモリ２５０から他のデータを読み出す。一つのデータ通常読出しコマンドに対して発行されるデータ先読みコマンドの数は１つであってもよく複数であってもよい。
【００１８】
ＮＡＮＤ型のフラッシュメモリでは、データの読出しはページ単位で実行される。１ページのデータ読出しには例えば５０μｓ程度の時間がかかる。そのためメモリコントローラ２００は、複数のデータ読出しコマンドを受信した場合は、これらのコマンドを例えばＦｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ（ＦＩＦＯ）バッファに保持する。そしてメモリコントローラ２００は、ＦＩＦＯバッファに格納された複数のコマンドを順に実行し、実行中のコマンドの処理が終了するまで、他のコマンドをＦＩＦＯバッファにて待機させる。
【００１９】
ここで、図２に示されるような複数チャネルのフラッシュメモリ２５０へのデータ格納例及びデータ先読み処理例について説明する。例えば、ＣＰＵ１００によって連続してアクセスされる可能性がある２ページ分のデータをフラッシュメモリ２５０に格納する場合、２ページ分のデータのうち、１ページ分のデータ（第１データ）がフラッシュメモリ２５０Ａ（第１チャネル）の第１ブロックの第１ページに格納され、残りの１ページ分のデータ（第２データ）がフラッシュメモリ２５０Ｂ（第２チャネル）の第１ブロックの第１ページに格納される。そしてフラッシュメモリ２５０Ａの第１ブロックの第１ページへのデータ通常読出しコマンドの生成に伴い、フラッシュメモリ２５０Ｂの第１ブロックの第１ページへのデータ先読みコマンドが生成される。そしてフラッシュメモリ２５０Ａに対してデータ通常読出しコマンドが実行されることにより第１データが読み出され、フラッシュメモリ２５０Ｂに対してデータ先読みコマンドが実行されることにより第２データが読み出される。これにより、第１データの読出しの完了を待つことなく、第２データが読み出される。また、第１データへのアクセスの後に第２データへのアクセスがなされた場合、第２データは既にストレージ２０から読み出されて情報処理装置１０のＤＲＡＭ１６０に保持されているため、第２データの読出しに要する時間が短縮される。
【００２０】
尚、ＣＰＵ１００によって連続してアクセスされる可能性がある複数ページ分のデータとは、例えば１ページ分のデータ容量を超えるファイルデータであって、分割されて複数のページに跨ってフラッシュメモリ２５０に格納されたデータ等である。
【００２１】
図３は、第１実施例における効果を説明するための図である。例えば情報処理装置１０のＣＰＵ１００が、フラッシュメモリ２５０の特定のアドレスに対するデータ通常読出しコマンドＡを発行する。またこのデータ通常読出しコマンドＡに付随して、データ先読みコマンドＸが発行される。データ通常読出しコマンドＡは、フラッシュメモリ２５０Ａ（第１チャネル）の第１ブロックの第１ページを対象アドレスとするものであり、データ先読みコマンドＸはフラッシュメモリ２５０Ｂ（第２チャネル）の第１ブロックの第１ページを対象アドレスとするものであるとする。データ通常読出しコマンドＡ、データ先読みコマンドＸはそれぞれ、第１チャネルに対して設けられたＦＩＦＯバッファと第２チャネルに対して設けられたＦＩＦＯバッファに格納される。その後、ＣＰＵ１００が更にデータ通常読出しコマンドＢを発行したとする。データ通常読出しコマンドＢは、フラッシュメモリ２５０Ｂ（第２チャネル）の第１ブロックの第２ページを指定するものであるとする。データ通常読出しコマンドＢは、データ先読みコマンドＸの次に第２チャネルに対して設けられたＦＩＦＯバッファに格納され、実行の待ち状態となる。
【００２２】
データ先読みコマンドＸは、ＣＰＵ１００によって使用される可能性があるデータに対して、投機的に発行されるデータ読出しコマンドである。それゆえ、フラッシュメモリ２５０Ｂから読み出されてＤＲＡＭ１６０に保持されても、実際にはＣＰＵ１００によって利用されない場合もある。図３の（Ａ）は、投機的に発行されたデータ先読みコマンドＸがＦＩＦＯバッファに保持されているために、データ通常読出しコマンドＢの実行が待たされる様子を示している。図３の（Ａ）に示される例では、例えばフラッシュメモリ２５０の１ページの読出しに５０μｓを要するとすると、データ通常読出しコマンドＢの実行は、データ先読みコマンドＸがＦＩＦＯバッファ内に存在しない場合に比べて、５０μｓ遅れることになる。本実施例は、データ通常読出しコマンドＢの実施が、データ先読みコマンドＸの実行により遅延することを抑制するためのものである。
【００２３】
本実施例においては、データ先読みコマンドＸが発行された後にデータ通常読出しコマンドＢが発行された場合、データ先読みコマンドＸがＦＩＦＯバッファ内で実行待ちである状態であれば、データ先読みコマンドＸの実行よりも、データ通常読出しコマンドＢが優先して実行される。図３の（Ｂ）は、データ先読みコマンドＸよりもデータ通常読出しコマンドＢが優先して実行される様子を示すものである。図３の（Ｂ）に示された例では、図３の（Ａ）に示された例に比べて早いタイミングで、データ通常読出しコマンドＢが実行される。
【００２４】
図４は、第１実施例における情報処理装置１０の、主にＣＰＵ１００の機能ブロックを示す図である。ＣＰＵ１００は、例えばＲＯＭ１５０からＤＲＡＭ１６０にロードされたコンピュータプログラムを実行することにより、演算処理部１０２、コマンド生成要求部１０４、コマンド生成要求受信部１１１、コマンド生成部１１２、データ先読み情報生成部１１３、コマンド送信部１１４及びＤＲＡＭ制御部１１５として機能する。図４においては、演算処理部１０２は、例えばアプリケーション層１０１により実現される。コマンド生成要求部１０４は、Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ（ＯＳ）１０５の例えばファイルシステム１０３により実現される。コマンド生成要求受信部１１１、コマンド生成部１１２、データ先読み情報生成部１１３、コマンド送信部１１４及びＤＲＡＭ制御部１１５は、ＯＳ１０５の例えばデバイスドライバ１１０により実現される。またＣＰＵ１００は、アドレス変換テーブル１３１及び保持データテーブル１３２を保持する。
【００２５】
演算処理部１０２は、ＤＲＡＭ１６０に保持されたデータに基づく演算処理を実行する。コマンド生成要求部１０４は、演算処理部１０２の演算処理に使用されるデータをストレージ２０から読み出すために、データ読出しコマンドの生成をコマンド生成要求受信部１１１に対して要求する。コマンド生成要求受信部１１１は、コマンド生成要求部１０４からデータ読出しコマンドの生成要求を受けると、コマンド生成部１１２に対してデータ通常読出しコマンドの生成を指示する。コマンド生成部１１２は、コマンド生成要求部１０４によって要求されたデータを読み出すためのデータ通常読出しコマンドを発行する。生成されたデータ通常読出しコマンドはデータ先読み情報生成部１１３に引き渡される。データ先読み情報生成部１１３は、コマンド生成要求部１０４によって要求されたデータとは別のデータであって、演算処理部１０２によって使用されることが予測されるデータを読み出すためのデータ先読み情報を生成してデータ通常読出しコマンドに付加する。データ先読み情報とは、先読み処理の対象となるデータが格納されているフラッシュメモリ２５０内のアドレス情報等である。
【００２６】
尚、コマンド生成部１１２及びデータ先読み情報生成部１１３がそれぞれデータ通常読出しコマンド及びデータ先読み情報を生成する際、演算処理部１０２が管理するアドレス（以下、「論理アドレス」と呼ぶ）は、ストレージ２０の管理するアドレス（以下、「フラッシュメモリアドレス」と呼ぶ）に変換される。アドレス変換テーブル１３１は、論理アドレスとフラッシュメモリアドレスの対応関係を保持する。コマンド生成部１１２はデータ通常読出しコマンドを発行する際、アドレス変換テーブル１３１を参照することによりフラッシュメモリ２５０のアドレス、例えばチャネル番号、ブロック番号及びページ番号を特定する読出しデータ情報を、データ通常読出しコマンドに含ませる。またデータ先読み情報生成部１１３はデータ先読み情報を生成する際、必要に応じて、アドレス変換テーブル１３１を参照することによりフラッシュメモリ２５０のアドレス、例えばチャネル番号、ブロック番号及びページ番号を特定するデータ先読み情報を、データ通常読出しコマンドに付加する。データ先読み情報生成部１１３によってデータ先読み情報が付加されたデータ通常読出しコマンドは、コマンド送信部１１４を介してストレージ２０へ送信される。
【００２７】
図５の（Ａ）は、コマンド生成部１１２及びデータ先読み情報生成部１１３にて生成されるコマンドのデータ構成例を示す図である。コマンドは、「コマンドＩＤ」、「コマンドタイプ」、「フラッシュメモリアドレス」、「ＤＲＡＭアドレス」及び「データ先読み情報」がそれぞれ登録される領域を含む。「コマンドＩＤ」は、各コマンドを識別するための識別子であり、コマンド毎に個別の識別子が付される。「コマンドタイプ」は、コマンドの種別を示す情報である。フラッシュメモリ２５０に対するコマンドの種別としては、例えばデータ読出しコマンド、データ書込みコマンド、データ消去コマンド等が挙げられる。データ通常読出しコマンドにおいては、「コマンドタイプ」の領域に、当該コマンドがデータの読出しを要求するコマンドであることを示す情報が登録される。データ読出しコマンドにおいては、「フラッシュメモリアドレス」の領域に、読出し対象のデータが格納されているフラッシュメモリ２５０のアドレスを特定する情報が登録される。例えば、チャネル番号、ブロック番号及びページ番号が、「フラッシュメモリアドレス」の領域に登録される。またコマンドがデータ読出しコマンドである場合は、「ＤＲＡＭアドレス」の領域に、フラッシュメモリ２５０から読み出されたデータをＤＲＡＭ１６０のどのアドレスに格納するかを特定するためのアドレス（以下、「ＤＲＡＭアドレス」と呼ぶ）が登録される。また、「データ先読み情報」の領域には、当該コマンドがデータ読出しコマンドである場合に、データ先読みコマンドの生成要否を示す情報や、データ先読み対象となるフラッシュメモリ２５０のアドレス情報等が登録される。このデータ先読み情報は、データ先読み情報生成部１１３により生成され、データ通常読出しコマンドに付加される。
【００２８】
図５の（Ｂ）は、データ先読み情報の第１の例を示す図である。図５の（Ｂ）において、データ先読みコマンドの生成要否を示す情報が、データ先読み情報として登録される。例えば、データ先読み情報に登録される値「１」は、データ先読みコマンドの発行が要求されることを意味し、データ先読み情報に格納される値「０」は、データ先読みコマンドの発行が不要であることを意味する。例えばデータ先読み情報生成部１１３は、ＣＰＵ１００による直近の複数のデータアクセスが、ランダムな論理アドレスに対して行われている場合は、データ先読みコマンドの生成は不要と判断し、データ先読み情報として「０」を登録する。逆にデータ先読み情報生成部１１３は、ＣＰＵ１００による直近の複数のデータアクセスが、連続する論理アドレスに対して行われている場合は、データ先読みコマンドの生成が必要と判断し、データ先読み情報として「１」を登録する。ストレージ２０は、受信したデータ通常読出しコマンドのデータ先読み情報が「１」である場合は、データ先読みコマンドを生成する。図５（Ｂ）において、データ先読み情報にはデータ先読みの対象となるフラッシュメモリアドレスは含まれていない。この場合、ストレージ２０は、受信したデータ通常読出しコマンドの「フラッシュメモリアドレス」に登録されている情報を参照する。例えばデータ通常読出しコマンドにて指定される「フラッシュメモリアドレス」が、第１チャネルの第１ブロックの第１ページである場合は、第２チャネルの第１ブロックの第１ページをデータ先読みの対象アドレスとするデータ先読みコマンドと、第３チャネルの第１ブロックの第１ページをデータ先読みの対象アドレスとするデータ先読みコマンドを生成する。
【００２９】
図５の（Ｃ）は、データ先読み情報の第２の例を示す図である。第２の例においてはデータ先読みコマンドの生成要否を示す情報が、チャネル毎に、データ先読み情報として登録される。図５の（Ｃ）では、第１チャネルに関するデータ先読み情報が「０」、第２チャネルに関するデータ先読み情報が「１」、第３チャネルに関するデータ先読み情報が「０」である場合が示されている。尚、データ通常読出しコマンドにて指定される「フラッシュメモリアドレス」は、第１チャネルの第１ブロックの第１ページであるものとする。この場合、ストレージ２０は、第２チャネルの第１ブロックの第１ページをデータ先読みの対象アドレスとするデータ先読みコマンドを生成するが、第１チャネル及び第３チャネルに対してはデータ先読みコマンドを生成しない。
【００３０】
図５の（Ｄ）は、データ先読み情報の第３の例を示す図である。第３の例においては、データ先読みコマンドの生成要否を示す情報に加え、チャネル毎にデータ先読み処理の対象アドレスが、データ先読み情報として登録される。これにより、チャネル毎に異なるフラッシュメモリアドレスを対象とするデータ先読みコマンドを生成させることができる。図５の（Ｄ）の例では、第１チャネルに関してはデータ先読みコマンドは生成されず、第２チャネルの第１ブロック、第２ページに対するデータ先読みコマンドと、第３チャネルの第２ブロック、第３ページに対するデータ先読みコマンドが、生成される。
【００３１】
図６は、図４に示される保持データテーブル１３２の内容例を示す図である。保持データテーブル１３２には、「コマンドＩＤ」、「論理アドレス」、「ＤＲＡＭアドレス」及び「完了フラグ」に関する情報が登録され得る。コマンド生成部１１２及びデータ先読み情報生成部１１３は、データ通常読出しコマンド及びデータ先読み情報をそれぞれ生成した場合、生成されたデータ通常読出しコマンド及びストレージ２０にて生成されるデータ先読みコマンドのコマンドＩＤと、読出し対象となるデータの論理アドレス（以下、「読出し対象アドレス」と呼ぶ）と、読み出されたデータの保持領域を示すＤＲＡＭアドレスを、保持データテーブル１３２に登録する。図６の（Ａ）は、データ読出しコマンドの生成に対応し、関連する情報が登録された状態の保持データテーブル１３２の内容を例示する。例えばコマンド生成要求部１０４が、論理アドレス「ａ」についてのデータ読出しコマンドの生成要求を行い、コマンド生成部１１２が、論理アドレス「ａ」についてのデータ通常読出しコマンド（コマンドＩＤが「Ａ」）を生成し、データ先読み情報生成部１１３が、論理アドレス「ｂ」についてのデータ先読み情報（データ先読みコマンドのコマンドＩＤが「Ｂ」）の生成をストレージ２０に指示したとする。この場合、図６の（Ａ）に示されるように、生成されるコマンド毎に、コマンドＩＤと論理アドレスとＤＲＡＭアドレスとが保持データテーブル１３２に登録される。データ先読み情報生成部１１３は、データ先読みコマンドの生成をストレージ２０に指示する際、コマンドＩＤ情報をデータ先読み情報に含める。尚、図６の（Ｂ）及び「完了フラグ」の意義については後述する。
【００３２】
図７は第１実施例におけるストレージ２０の、主にメモリコントローラ２００の機能ブロックを示す図である。ストレージ２０のメモリコントローラ２００は、コマンド受信部２０２、チャネル選択部２０４、データ先読みコマンド生成部２６０、第１コマンドキュー２１２Ａ、２１２Ｂ及び２１２Ｃ（３つの第１コマンドキューの何れかを特定する意図のない場合は、単に「第１コマンドキュー２１２」と表記する）、第２コマンドキュー２１５Ａ、２１５Ｂ及び２１５Ｃ（３つの第２コマンドキューの何れかを特定する意図のない場合は、単に「第２コマンドキュー２１５」と表記する）、コマンド選択部２２０Ａ、２２０Ｂ及び２２０Ｃ（３つのコマンド選択部の何れかを特定する意図のない場合は、単に「コマンド選択部２２０」と表記する）、コマンド実行部２３０Ａ、２３０Ｂ及び２３０Ｃ（３つのコマンド実行部の何れかを特定する意図のない場合は、単に「コマンド実行部２３０」と表記する）、及びデータ送信部２４０として機能する。メモリコントローラ２００がＦＰＧＡを用いて実装される場合は、ＦＰＧＡ内に設けられた再構成可能な複数のゲート（ゲートアレイ）を所望の接続状態とすることによって上述の各機能ブロックが実現される。またメモリコントローラ２００がＣＰＵ等のプロセッサを用いて実装される場合は、上述の各機能ブロックは、プロセッサがコンピュータプログラムを実行することにより実現される。
【００３３】
コマンド受信部２０２は、情報処理装置１０のコマンド送信部１１４から送信されたコマンドを受信する。チャネル選択部２０４は、コマンド受信部２０２にて受信されたコマンドを、当該コマンドに含まれるフラッシュメモリアドレスのチャネル情報に基づき、対応するチャネルを選択する。各チャネルにはそれぞれ第１コマンドキュー２１２、第２コマンドキュー２１５、コマンド選択部２２０、コマンド実行部２３０が設けられる。チャネル選択部２０４によりチャネルが選択されたコマンドは、選択されたチャネルの第１コマンドキュー２１２へ入力される。また、コマンド受信部２０２は、受信されたコマンドがデータ読出しコマンドである場合、当該コマンドを複製してデータ先読みコマンド生成部２６０へ送信する。データ先読みコマンド生成部２６０は、複製されたデータ通常読出しコマンドからデータ先読み情報を抽出し、データ先読みコマンドの生成要否を判断する。データ先読みコマンドを生成する必要がある場合は、データ先読みコマンド生成部２６０はデータ先読みコマンドを生成し、生成されたデータ先読みコマンドを、第２コマンドキュー２１５に保持させる。第１コマンドキュー２１２及び第２コマンドキュー２１５はそれぞれ、例えばＦＩＦＯバッファにより実現される。
【００３４】
このように本実施例では、データ通常読出しコマンド等のコマンドを保持する第１コマンドキュー２１２とは別に第２コマンドキュー２１５が設けられ、データ先読みコマンドが選択的に第２コマンドキュー２１５に入力される。尚、上記の例では、コマンド受信部２０２が、複製されたコマンドをデータ先読みコマンド生成部２６０へ送信したが、複製されたコマンドに代えて、受信されたコマンドに含まれるデータ先読み情報が選択的にデータ先読みコマンド生成部２６０へ通知されてもよい。この場合、データ先読みコマンド生成部２６０は、通知されたデータ先読み情報に基づいて、データ先読みコマンドの生成要否の判断及びデータ先読みコマンドの生成処理を実行する。
【００３５】
次にコマンド選択部２２０は、第１コマンドキュー２１２と第２コマンドキュー２１５に蓄えられているコマンドを選択して取り出し、コマンド実行部２３０に引き渡す。コマンド選択部２２０は、第１コマンドキュー２１２にコマンドが蓄積されている場合は、第２コマンドキュー２１５にデータ先読みコマンドが保持されている場合であっても、第１コマンドキュー２１２に保持されているコマンドを優先的に選択して取り出す。コマンド選択部２２０にて選択されたコマンドはコマンド実行部２３０により実行される。コマンド実行部２３０は、コマンドに登録されたコマンドタイプを示す情報に基づき、コマンドを実行する。当該コマンドのコマンドタイプがデータ読出しである場合は、コマンド実行部２３０はフラッシュメモリ２５０からのデータの読出しを実行する。
【００３６】
コマンド選択部２２０は、第１コマンドキュー２１２に保持されているコマンドを全て処理し、第１コマンドキュー２１２が空の状態になった場合には、第２コマンドキュー２１５にデータ先読みコマンドが保持されているか否かを確認する。コマンド選択部２２０は、第２コマンドキュー２１５にデータ先読みコマンドが保持されている場合は、当該データ先読みコマンドを第２コマンドキュー２１５から取り出し、コマンド実行部２３０へ引き渡す。そしてデータ先読みコマンドがコマンド実行部２３０により実行され、フラッシュメモリ２５０からデータが読み出される。このように、データ通常読出しコマンドが、データ先読みコマンドの実行よりも優先的に実行されることにより、データ通常読出しコマンドの実行の遅延を抑制することができる。
【００３７】
フラッシュメモリ２５０から読み出されたデータは、データ送信部２４０を介して情報処理装置１０へ送信される。データ送信部２４０から送信されるデータは、情報処理装置１０から発行されたコマンドに含まれるＤＲＡＭアドレスの情報と共に送信される。またデータ送信部２４０は、コマンド実行完了通知を情報処理装置１０へ送信する。
【００３８】
図４の説明に戻り、ＤＲＡＭ制御部１１５は、ストレージ２０のデータ送信部２４０から送信されたデータを受信する。そしてＤＲＡＭ制御部１１５は、受信されたデータを、ＤＲＡＭ１６０の所定のアドレスに書き込む。またコマンド生成部１１２又はデータ先読み情報生成部１１３は、データ送信部２４０から送信されたコマンド実行完了通知に基づき、対応するデータ通常読出しコマンド及び対応するデータ先読みコマンドについてデータ読出し処理が完了したことを示す完了フラグを保持データテーブル１３２に登録する。図６の（Ｂ）は、完了フラグが登録された状態の保持データテーブル１３２の内容を示す。コマンドＩＤが「Ａ」であり、論理アドレスが「ａ」であるコマンド（本実施例ではデータ通常読出しコマンド）に関して、フラッシュメモリ２５０から読み出されたデータが、ＤＲＡＭアドレスが「ｘ」の領域に書込まれたことが、保持データテーブル１３２に完了フラグをして記録される。また、コマンドＩＤが「Ｂ」であり、論理アドレスが「ｂ」であるコマンド（本実施例においてはデータ先読みコマンド）に関して、フラッシュメモリ２５０から読み出されたデータが、ＤＲＡＭアドレスが「ｙ」の領域に書込まれたことが、保持データテーブル１３２に完了フラグとして記録される。
【００３９】
次に、論理アドレス「ｂ」を指定するデータ読出しコマンドの生成要求がコマンド生成要求部１０４によってなされた場合における、情報処理装置１０内における処理を説明する。
【００４０】
コマンド生成要求受信部１１１は、論理アドレス「ｂ」についてのデータ読出しコマンドの生成要求を受信する。コマンド生成要求受信部１１１は、保持データテーブル１３２を参照し、論理アドレス「ｂ」に対応するデータが、ＤＲＡＭ１６０に格納されているか否かを判定する。図６の（Ｂ）に示す例では、論理アドレス「ｂ」に対応するデータが既にＤＲＡＭ１６０に格納されているため、コマンド生成要求受信部１１１はＤＲＡＭ制御部１１５に、ＤＲＡＭアドレス「ｙ」の領域に格納されているデータの読出しを指示する。ＤＲＡＭ制御部１１５はＤＲＡＭ１６０にアクセスし、ＤＲＡＭアドレス「ｙ」の領域に保持されたデータを読出して演算処理部１０２へ引き渡す。これにより演算処理部１０２が論理アドレス「ｂ」のデータを使用する際、データ読出しに要する時間が短縮される。
【００４１】
図８は、ＣＰＵ１００によって実行される処理のうち、主にコマンドの生成に関する処理のフローチャートである。図８に示される処理フローは処理１０００により開始され、処理１００２においてコマンド生成要求部１０４が、コマンド生成要求を発行する。処理１００４においてコマンド生成要求受信部１１１が、コマンド生成要求を受信する。処理１００６においてコマンド生成要求受信部１１１が、受信されたコマンド生成要求が、データの読出しを要求するものであるか否かを判定する。コマンド生成要求がデータの読出しを要求するものであると判定されない場合は、処理フローは処理１００８へ進み、コマンド生成要求がデータ読出しを要求するものであると判定された場合は、処理フローは処理１０１０へ進む。処理１００８においてコマンド生成部１１２は、コマンド生成要求の要求内容に従い、コマンド、例えばデータ書込みコマンドやデータ消去コマンドを生成する。処理フローが処理１００６から処理１０１０へ進んだ場合は、処理１０１０においてコマンド生成要求受信部１１１が、保持データテーブル１３２にアクセスする。そして処理１０１２において、コマンド生成要求にて要求されるデータがＤＲＡＭ１６０に保持されているか否かを判定する。要求されたデータがＤＲＡＭ１６０に保持されていると判定された場合は、処理フローは処理１０１８へ進み、要求されたデータがＤＲＡＭ１６０に保持されていると判定されない場合は、処理フローは処理１０１４へ進む。処理１０１８においてコマンド生成要求受信部１１１は、該当するデータのＤＲＡＭ１６０からの読出しをＤＲＡＭ制御部１１５へ指示する。この場合はコマンドの生成処理は行われず、処理１０２２にて処理フローが終了する。一方、処理フローが処理１０１２から処理１０１４へ進んだ場合は、処理１０１４においてコマンド生成部１１２が、データ通常読出しコマンドを生成する。更に、処理１０１６においてデータ先読み情報生成部１１３が、データ先読み情報を生成してデータ通常読出しコマンドに付加する。そして処理１０２０においてコマンド送信部１１４が、処理１００８にて生成されたコマンド、または処理１０１４及び処理１０１６にて生成された、データ先読み情報を含むデータ通常読出しコマンドを送信し、処理１０２２にて処理フローが終了する。
【００４２】
図９は、メモリコントローラ２００によって実行される処理のうち、主に第１コマンドキュー２１２及び第２コマンドキュー２１５へのコマンドの入力に関する処理のフローチャートである。図９における処理フローは処理１１００により開始され、処理１１０２においてコマンド受信部２０２が、コマンド送信部１１４から送信されるコマンドが受信されたか否かを判定する。コマンドが受信されたと判定された場合は、処理フローは処理１１０４へ進み、コマンドが受信されたと判定されない場合は、コマンド受信部２０２が処理１１０２を繰り返し実行する。処理１１０２の後、処理１１０４においてチャネル選択部２０４が、受信されたコマンドに含まれるチャネル情報に基づいてチャネルを選択する。そして処理１１０６において選択されたチャネルの第１コマンドキュー２１２がコマンドを保持する。処理１１０８においてコマンド受信部２０２が、受信されたコマンドがデータ読出しコマンドか否かを判定する。コマンドがデータ読出しコマンドであると判定された場合は、処理フローは処理１１１０へ進み、コマンドがデータ読出しコマンドであると判定されない場合は、処理フローは処理１１０２へ戻る。処理１１１０においてコマンド受信部２０２は、受信されたコマンドを複製してデータ先読みコマンド生成部２６０へ送信する。処理１１１２においてデータ先読みコマンド生成部２６０は、複製されたコマンドに含まれるデータ先読み情報に基づき、データ先読みコマンドの生成の要否を判定する。処理１１１２においてデータ先読みコマンドの生成が必要と判定された場合は、処理１１１４においてデータ先読みコマンド生成部２６０は、データ先読みコマンドを生成し、処理１１１６において第２コマンドキュー２１５が、生成されたデータ先読みコマンドを保持する。処理１１１６の後、処理フローは処理１１０２へ戻る。処理１１１２においてデータ先読みコマンドの生成が必要と判定されない場合は、処理フローは処理１１０２へ戻る。尚、処理１１０４および処理１１０６と、処理１１０８以降の処理は、並列に実行されてもよい。
【００４３】
図１０は、メモリコントローラ２００によって実行される処理のうち、主に第１コマンドキュー２１２及び第２コマンドキュー２１５に保持されたコマンドの選択及び実行に関する処理のフローチャートである。図１０における処理フローは処理１２００により開始され、処理１２０２においてコマンド選択部２２０が、第１コマンドキュー２１２にコマンドが蓄えられているか否かを判定する。第１コマンドキュー２１２にコマンドが蓄えられていると判定された場合は、処理フローは処理１２０４へ進み、第１コマンドキュー２１２にコマンドが蓄えられていると判定されない場合は、処理フローは処理１２０８へ進む。処理１２０４においてコマンド選択部２２０が、第１コマンドキュー２１２に蓄えられているコマンドのうち、キューの先頭にあるコマンドを選択して取り出す。そして処理１２０６においてコマンド実行部２３０が、処理１２０４にて選択されたコマンドを実行する。一方、処理フローが処理１２０２から処理１２０８へ進んだ場合は、処理１２０８においてコマンド選択部２２０が、第２コマンドキュー２１５にデータ先読みコマンドが蓄えられているか否かを判定する。第２コマンドキュー２１５にデータ先読みコマンドが蓄えらえていると判定された場合は、処理フローは処理１２１０へ進み、第２コマンドキュー２１５にデータ先読みコマンドが蓄えられていると判断されない場合は、処理フローは処理１２０２へ戻る。処理１２１０においてコマンド選択部２２０が、第２コマンドキュー２１５に蓄えられているコマンドのうち、キューの先頭にあるデータ先読みコマンドを抽出する。そして処理１２０６においてコマンド実行部２３０がデータ先読みコマンドを実行する。処理１２０６の後、処理フローは処理１２０２へ戻る。
【００４４】
図１１は、情報処理装置１０のＣＰＵ１００によって実行される処理のうち、主にＤＲＡＭ１６０へのデータの書込みに関する処理のフローチャートである。図１１の処理フローは処理１３００により開始され、処理１３０２においてＤＲＡＭ制御部１１５が、ストレージ２０から受信したデータをＤＲＡＭ１６０に書き込む。処理１３０４においてコマンド生成部１１２又はデータ先読み情報生成部１１３はストレージ２０から受信したコマンド実行完了通知に基づき、保持データテーブル１３２に完了フラグを登録し、処理１３０６において処理フローが終了する。
【００４５】
このように、第１実施例によれば情報処理装置１０は、データ通常読出しコマンドが発行される際、当該コマンドにデータ先読み情報を付加する。当該コマンドを受信したストレージ２０は、データ先読み情報に基づいてデータ先読みコマンドを生成する。ストレージ２０は、受信されたコマンド（データ通常読出しコマンド）と、生成されたデータ先読みコマンドを、それぞれに対して設けられたコマンドキューに入力する。データ先読みコマンド以外のコマンド用のキューである第１コマンドキュー２１２にコマンドが蓄積されている場合には、第１コマンドキュー２１２に保持されているコマンドが、データ先読みコマンド用のキューである第２コマンドキュー２１５に保持されているコマンドよりも優先して実行される。これにより、データ先読みコマンドの実行によってデータ通常読出しコマンドの実行が遅延することが抑制される。
【００４６】
＜第２実施例＞
第１実施例においては、データ通常読出しコマンド用の第１コマンドキュー２１２と、データ先読みコマンド用の第２コマンドキュー２１５が並列に設けられることにより、データ先読みコマンドよりもデータ通常読出しコマンドが優先的に実行される。第２実施例においては、データ通常読出しコマンドとデータ先読みコマンドは、共通のコマンドキューに保持される。但し、データ先読みコマンドをコマンドキューに保持させるタイミングが制御されることにより、データ先読みコマンドよりもデータ通常読出しコマンドが優先的に実行される。尚、第１実施例において説明された図１（システム構成図）、図２（システムのハードウェア構成図）、図４（情報処理装置１０の機能ブロック図）、図５（データ通常読出しコマンドのデータ構成図）、図８及び図１１（情報処理装置１０のＣＰＵ１００によって実行される処理のフローチャート）は、第２実施例にも適用され得る。
【００４７】
図１２は、第２実施例におけるストレージ２０の、主にメモリコントローラ２００の機能ブロック図である。図７に示される機能ブロックと同一の機能ブロックについては、図７にて付された参照符号と同一の参照符号が付され、説明は省略される。ストレージ２０のメモリコントローラ２００は、コマンド受信部２０２、チャネル選択部２０４、データ先読みコマンド生成部２６０、コマンドキュー２１８Ａ、２１８Ｂ及び２１８Ｃ（３つのコマンドキューの何れかを特定する意図のない場合は、単に「コマンドキュー２１８」と表記する）、コマンド実行部２３０Ａ、２３０Ｂ及び２３０Ｃ、及びデータ送信部２４０として機能する。
【００４８】
コマンド受信部２０２は、情報処理装置１０からデータ通常読出しコマンドを受信すると、データ通常読出しコマンドを複製してデータ先読みコマンド生成部２６０に送信する。データ先読みコマンド生成部２６０は、チャネル毎にコマンドキュー２１８の状況を監視する。コマンドキュー２１８の状況とは、例えばコマンドキュー２１８内に保持されているコマンドの数に関する状況である。そしてデータ先読みコマンド生成部２６０は、コマンドキュー２１８の状況に基づいて、データ先読みコマンドを生成してコマンドキュー２１８へ送信する。尚、上記の例では、コマンド受信部２０２が、複製されたコマンドをデータ先読みコマンド生成部２６０へ送信したが、第１実施例と同様に、複製されたコマンドに代えて、受信されたコマンドに含まれるデータ先読み情報が選択的にデータ先読みコマンド生成部２６０へ通知されてもよい。
【００４９】
ここで、コマンドキュー２１８に所定数以上の数のコマンドが保持されている状況において、データ先読みコマンドが生成されてコマンドキュー２１８に入力されたと仮定する。この場合、データ先読みコマンドがコマンドキュー２１８の中で実行の順番待ち状態にある期間に、後続のコマンド（例えばデータ通常読出しコマンド）がコマンドキュー２１８に更に入力される可能性がある。この後続のコマンドの実行は、データ先読みコマンドの実行に要する時間だけ遅延することになる。そのため第２実施例では、データ先読みコマンド生成部２６０は、コマンドキュー２１８にコマンドが保持されていない、又はコマンドキュー２１８に保持されるコマンド数が一定値以下である場合に、データ先読みコマンドを生成してコマンドキュー２１８に保持させる。このように、データ先読みコマンドの生成タイミングを、コマンドキュー２１８の状況に基づいて制御することにより、データ通常読出しコマンドの実行が、データ先読みコマンドの実行により遅延することが抑制される。
【００５０】
図１３は、図１２に示されたデータ先読みコマンド生成部２６０内の機能ブロックを示す図である。データ先読みコマンド生成部２６０は、ＦＩＦＯバッファ２６１と、判定部２６２と、生成部２６３とを有する。ＦＩＦＯバッファ２６１は、コマンド受信部２０２から送信されたコマンドを保持する。判定部２６２は、ＦＩＦＯバッファ２６１から複製コマンドを読み出す。また判定部２６２は、コマンドキュー２１８の状況を示す状況情報をコマンドキュー２１８から受信する。判定部２６２は、ＦＩＦＯバッファ２６１から読み出したコマンドに含まれるデータ先読み情報と、コマンドキュー２１８の状況情報に基づいて、所定の条件が満たされたか否かを判定する。判定部２６２は、所定の条件が満たされた場合に、生成部２６３にデータ先読みコマンドの生成を指示する。生成部２６３は、判定部２６２からの指示に応じて、データ先読みコマンドを生成してコマンドキュー２１８へ送信する。
【００５１】
次に、判定部２６２の判定に用いられる所定の条件について、例を挙げて説明する。所定の条件として、「データ先読み処理の対象チャネルのコマンドキュー２１８の全てが空の状態である」という条件（以下、第１の条件と呼ぶ）が判定部２６２に対して設定されているとする。また、判定部２６２がＦＩＦＯバッファ２６１から読み出したコマンドに含まれるデータ先読み情報が、第１チャネル、第２チャネル及び第３チャネルのそれぞれに対してデータ先読みコマンドを生成することを規定するものだとする。ここで判定部２６２は、コマンドキュー２１８Ａ、２１８Ｂ及び２１８Ｃの状況情報を取得する。コマンドキュー２１８Ａ、２１８Ｂ及び２１８Ｃの状況情報から、判定部２６２は全てのチャネルのコマンドキュー２１８が空の状態であるか否かを判断する。全てのチャネルのコマンドキュー２１８が空の状態であると判定される場合、すなわち上記の所定の条件が満たされたと判定される場合には、判定部２６２は生成部２６３に、第１チャネル、第２チャネル及び第３チャネルのそれぞれに対するデータ先読みコマンドを生成し、コマンドキュー２１８Ａ、２１８Ｂ及び２１８Ｃへ送信する。全てのチャネルのコマンドキュー２１８Ａ、２１８Ｂ及び２１８Ｃはこの時点において空の状態であるため、データ先読みコマンドが各チャネルにおいて実行される。
【００５２】
判定部２６２の判定に用いられる所定の条件として、「データ先読み処理の対象チャネルのコマンドキュー２１８のうち、一定数以上（例えば２以上）のコマンドキューが空の状態である」という条件（以下、第２の条件と呼ぶ）が適用されてもよい。この場合、３つのコマンドキュー２１８Ａ、２１８Ｂ及び２１８Ｃのうち、２つ以上のコマンドキュー２１８が空の状態であれば、判定部２６２は特定の条件が満たされたと判定される。そして判定部２６２は生成部２６３にデータ先読みコマンドの生成を指示する。３つのコマンドキューのうち、１つのコマンドキューが空の状態ではない状況が長時間続くことによってデータ先読みコマンドの生成が送れることを避けるために、第１の条件に代えて第２の条件が判定部２６２に対して設定されてもよい。
【００５３】
判定部２６２の判定に用いられる所定の条件として、「ＦＩＦＯバッファ２６１に保持されるコマンドの数が所定数以上になる」という条件（以下、第３の条件と呼ぶ）が適用されてもよい。この場合、判定部２６２は、ＦＩＦＯバッファ２６１に保持されているコマンドの数をカウントする。そして、カウントされたコマンド数が所定数以上となった場合に、コマンドキュー２１８の状況に依らずに、判定部２６２は所定の条件が満たされたと判定される。そして判定部２６２は、生成部２６３にデータ先読みコマンドの生成を指示する。
【００５４】
上記の第１乃至第３の条件を組み合わせた条件が、判定部２６２の判定に用いられる所定の条件として用いられてもよい。例えば「第１の条件と第３の条件の少なくとも一方の条件が満たされた」という条件が適用されてもよい。この場合、第１の条件が満たされなくても、第３の条件が満たされた場合には、判定部２６２は生成部２６３に対してデータ先読みコマンドの生成を指示する。これにより、第１の条件が満たされずにＦＩＦＯバッファ２６１の容量が飽和して新たなコマンドを受信できなくなることが防止される。
【００５５】
更に、判定部２６２に上記の第１乃至第３の条件又はこれらの条件を組み合わせた条件が設定された場合であって、ＦＩＦＯバッファ２６１にコマンドが保持された状態で、設定された条件が満たされない期間が所定時間以上継続した場合に、判定部２６２が生成部２６３にデータ先読みコマンドの生成を指示するよう、データ先読みコマンド生成部２６０が構成されてもよい。この場合、特定の条件が満たされないことに起因してデータ先読み処理の実行が遅延されることが防止される。
【００５６】
図１４は、データ先読みコマンド生成部２６０によって実行される処理のフローチャートである。処理フローは処理１４００により開始され、処理１４０２においてＦＩＦＯバッファ２６１が、コマンド受信部２０２から送信されたコマンドを保持する。処理１４０４において判定部２６２が、所定の条件が満たされたか否かを判定する。所定の条件として、例えば前述の第１の条件から第３の条件のいずれか、もしくは第１の条件から第３の条件の任意の組み合わせ、が設定される。所定の条件が満たされたと判定されない場合は、判定部２６２は処理１４０４を繰り返し実行し、所定の条件が満たされたと判定された場合は、処理フローは処理１４０６へ進む。処理１４０６において生成部２６３は、コマンドのデータ先読み情報に基づいて、データ先読みコマンドの生成が要求されているか否かを判定する。データ先読みコマンドの生成が要求されていると判定されない場合は、処理フローは処理１４０２に戻り、データ先読みコマンドの生成が要求されていると判定される場合は、処理フローは処理１４０８へ進む。処理１４０８において生成部２６３が、データ先読みコマンドを生成し、処理１４１０において生成部２６３が、データ先読みコマンドをコマンドキュー２１８へ送信する。その後処理フローは処理１４０２へ戻る。
【００５７】
図１５は、データ先読みコマンド生成部２６０の他の機能ブロック例である。図１５において、データ先読みコマンド生成部２６０は生成部２６３、ＦＩＦＯバッファ２６１Ａ、２６１Ｂ及び２６１Ｃ（３つのＦＩＦＯバッファの何れかを特定する意図のない場合は、単に「ＦＩＦＯバッファ２６１」と表記する）、判定部２６２及び発行部２６４Ａ、２６４Ｂ及び２６４Ｃ（３つの発行部の何れかを特定する意図のない場合は、単に「発行部２６４」と表記する）を有する。生成部２６３は、コマンド受信部２０２から送信されるコマンドを受信し、チャネル毎にデータ先読みコマンドを生成する。ＦＩＦＯバッファ２６１Ａ、２６１Ｂ及び２６１Ｃは、生成部２６３の後段に配置され、生成部２６３が生成したデータ先読みコマンドをチャネル毎に保持する。ＦＩＦＯバッファ２６１Ａ、２６１Ｂ及び２６１Ｃは、それぞれ第１チャネル、第２チャネル、第３チャネルに対応する。判定部２６２は、コマンドキュー２１８の状況情報を取得し、所定の条件が満たされたか否かをチャネル毎に判定する。発行部２６４は特定の条件が満たされたチャネルに関して、ＦＩＦＯバッファ２６１に保持されたデータ先読みコマンドを、対応するチャネルのコマンドキュー２１８へ送信する。
【００５８】
次に、判定部２６２の判定に用いられる所定の条件について、例を挙げて説明する。所定の条件として、「対応するチャネルのコマンドキュー２１８が空の状態である」という条件（以下、第４の条件と呼ぶ）が判定部２６２に対して設定されているとする。また、第１チャネルに対応するＦＩＦＯバッファ２６１Ａにデータ先読みコマンドが保持されているものとする。判定部２６２は、各チャネルに対応するコマンドキュー２１８の状況情報を取得する。例えば第１チャネルに対応するコマンドキュー２１８Ａが空の状態である場合、判定部２６２は、ＦＩＦＯバッファ２６１Ａに保持されているデータ先読みコマンドをコマンドキュー２１８Ａに対して発行するよう、発行部２６４Ａに指示する。発行部２６４Ａは、判定部２６２の指示に基づき、ＦＩＦＯバッファ２６１Ａに保持されているデータ先読みコマンドをコマンドキュー２１８Ａに送信する。
【００５９】
判定部２６２の判定に用いられる所定の条件として、「ＦＩＦＯバッファ２６１Ａ、２６１Ｂ、２６１Ｃにそれぞれ保持されるコマンドの数が所定数以上となった」という条件（以下、第５の条件と呼ぶ）が適用されてもよい。この場合、判定部２６２は、ＦＩＦＯバッファ２６１Ａ、２６１Ｂ及び２６１Ｃそれぞれに保持されているコマンドの数をカウントする。そして判定部２６２は、カウントされたコマンド数が所定数以上となったＦＩＦＯバッファ２６１に保持されているデータ先読みコマンドを、コマンドキュー２１８に送信するよう、対応する発行部２６４に指示する。
【００６０】
上記の第４及び第５の条件を組み合わせた条件が、判定部２６２の判定に用いられる所定の条件として用いられてもよい。例えば「第４の条件と第５の条件の少なくとも一方の条件が満たされた」という条件が適用されてもよい。この場合、第４の条件が満たされなくても、第５の条件が満たされた場合には、判定部２６２は発行部２６４に対してデータ先読みコマンドの発行を指示する。これにより、第４の条件が満たされずにＦＩＦＯバッファ２６１の容量が飽和して新たなデータ先読みコマンドを保持できなくなることが防止される。
【００６１】
更に、判定部２６２に上記の第４又は第５の条件又はこれらの条件を組み合わせた条件が設定された場合であって、ＦＩＦＯバッファ２６１にデータ先読みコマンドが保持された状態で、設定された条件が満たされない期間が所定時間以上継続された場合に、判定部２６２が発行部２６４にデータ先読みコマンドの発行を指示するよう、データ先読みコマンド生成部２６０が構成されてもよい。この場合、所定の条件が満たされないことに起因してデータ先読み処理の実行が遅延されることを防止することができる。
【００６２】
図１６は、図１５に示されたデータ先読みコマンド生成部２６０によって実行される処理のフローチャートである。処理フローは処理１５００により開始され、処理１５０２において生成部２６３が、コマンド受信部２０２から送信されたコマンドを受信する。処理１５０４において生成部２６３が、コマンドのデータ先読み情報に基づいて、データ先読みコマンドの生成が要求されているか否かを判定する。データ先読みコマンドの生成が要求されていると判定されない場合は、処理フローは処理１５０２に戻り、データ先読みコマンドの生成が要求されていると判定される場合は、処理フローは処理１５０６へ進む。処理１５０６において生成部２６３が、データ先読みコマンドを生成し、処理１５０８においてＦＩＦＯバッファ２６１が、生成されたデータ先読みコマンドを保持する。処理１５１０において判定部２６２が、所定の条件が満たされたか否かを判定する。所定の条件として、例えば前述の第４の条件及び第５の条件のいずれか、もしくは第４の条件と第５の条件の組み合わせ、が設定される。所定の条件が満たされたと判定されない場合は、判定部２６２は処理１５１０を繰り返し実行し、所定の条件が満たされたと判定された場合は、処理フローは処理１５１２へ進む。処理１５１２において発行部２６４が、ＦＩＦＯバッファ２６１に保持されたデータ先読みコマンドをコマンドキュー２１８へ発行する。その後処理フローは処理１５０２へ戻る。
【００６３】
このように第２実施例では、データ先読みコマンドがデータ先読みコマンド生成部２６０からコマンドキュー２１８へ入力されるタイミングが制御されることにより、データ通常読出しコマンドの実行が遅延することが抑制される。
【００６４】
＜第３実施例＞
第３実施例では、データ先読みコマンドによってフラッシュメモリ２５０から読み出されたデータが、その後実際に演算処理部１０２による演算に使用されたか否かが監視される。そして、データ先読みコマンドにより読み出されたデータ（以下、「先読みデータ」と呼ぶ）であって、実際には演算に使用されなかったデータについては、データ先読みコマンドの発行はその後行われない。これにより、不要なデータ先読みコマンドの発行が抑制される。尚、第１実施例において説明された図１（システム構成図）、図２（システムのハードウェア構成図）、図５（データ通常読出しコマンドのデータ構成図）、図６（保持データテーブル１３２の内容例）、図７（ストレージ２０の機能ブロック図）、図８及び図１１（情報処理装置１０のＣＰＵ１００によって実行される処理のフローチャート）、図９及び図１０（メモリコントローラ２００によって実行される処理のフローチャート）が、第３実施例にも適用され得る。また、第２実施例において説明された、図１２（ストレージ２０の機能ブロック図）、図１３及び図１５（データ先読みコマンド生成部２６０の機能ブロック図）、図１４及び図１６（データ先読みコマンド生成部２６０によって実行される処理のフローチャート）が、第３実施例にも適用され得る。
【００６５】
図１７は、第３実施例における情報処理装置１０のＣＰＵ１００の機能ブロックを示す図である。第１実施例にて示された機能ブロック（図４）と同一の機能を有する機能ブロックについては、図４にて付された参照符号と同一の参照符号が付され、説明は省略される。ＣＰＵ１００は、図４に示された機能ブロックに加え、記録部１２１、監視部１２２、タイマ１２３、判定部１２４及びフラグリセット部１２５として機能する。またＣＰＵ１００は先読みリストテーブル１４１を有する。
【００６６】
図１８は、先読みリストテーブル１４１の内容例を示す図である。先読みリストテーブル１４１には、「論理アドレス」と「書込み時刻」と「判定フラグ」が登録され得る。記録部１２１は、データ先読み情報生成部１１３がデータ先読み情報を生成した際、当該データ先読み情報で特定されるフラッシュメモリアドレスに対応する論理アドレスを、先読みリストテーブル１４１の「論理アドレス」に記録する。また記録部１２１は、当該データ先読みコマンドに対してストレージ２０から送信されたコマンド実行完了通知の受信時刻をタイマ１２３から取得し、取得された時刻を先読みリストテーブル１４１の「書込み時刻」に記録する。図１８の（Ａ）には、論理アドレスが「ａ」、「ｂ」及び「ｃ」のデータについてそれぞれデータ先読みコマンドが発行されたことが記録されている。また、これらのデータ先読みコマンドの実行が完了したことを示すコマンド実行完了通知が、それぞれ「９時１３分２１．３７秒」、「９時１３分２１．８９秒」、「９時１３分２２．１５秒」に、データ先読み情報生成部１１３によって受信されたことが記録されている。
【００６７】
データ先読みコマンドが生成された後、監視部１２２は、フラッシュメモリ２５０から読み出されたデータが実際に演算処理部１０２によって使用されたか否かを監視する。具体的には監視部１２２は、先読みリストテーブル１４１に登録されている内容と、コマンド生成要求受信部１１１にて受信されるコマンド生成要求と、タイマ１２３が計測する時刻とをモニターする。そして、コマンド生成要求にて読出しが要求されるデータの論理アドレスが、先読みリストテーブル１４１に記録されているか否かを判定する。該当する論理アドレスが先読みリストテーブル１４１に記録されている場合であって、先読みリストテーブル１４１に記録されている書込み時刻から所定時間（例えば１秒）が未だ経過していない場合は、先読みリストテーブル１４１から該当する論理アドレスを削除する。逆に、先読みリストテーブル１４１に記録されている書込み時刻から所定時間が経過しても、当該論理アドレスに対するデータ読出しコマンドの生成要求がなされない場合には、先読みリストテーブル１４１に判定フラグを登録する。言い換えれば、先読みリストテーブル１４１の判定フラグは、当該論理アドレスについてデータの先読み処理が行われたが、読み出された先読みデータは実際には演算処理部１０２による演算には使用されなかったことを意味する。図１８の（Ｂ）は、図１８（Ａ）にて例示された先読みリストテーブル１４１の内容が更新された状態を示す図である。図１８の（Ｂ）においては、論理アドレス「ａ」についてのデータの先読み処理が行われた後、所定時間内に論理アドレス「ａ」についてデータ読出しコマンドの生成要求がなされず、論理アドレス「ａ」の欄に判定フラグが登録されている様子を示している。一方、論理アドレス「ｂ」についてデータの先読み処理が行われた後、所定時間内に論理アドレス「ｂ」についてデータ読出しコマンドの生成要求がなされ、論理アドレス「ｂ」がデータ先読みコマンドリステーブル１４１から削除されている。尚、論理アドレス「ｃ」については、データの先読み処理が行われてからまだ所定時間が経過しておらず、判定フラグがまだ付されない状態である。
【００６８】
このように、使用実績のない論理アドレスが先読みリストテーブル１４１に過去実績として蓄積される。
【００６９】
次に、上述の方法で作成された先読みリストテーブル１４１の利用方法について説明する。コマンド生成要求部１０４がデータ読出しコマンドの生成要求を行い、コマンド生成要求受信部１１１が当該生成要求を受信する。データ先読み情報生成部１１３は当該生成要求に基づき、所定のアルゴリズムに基づいてデータ先読み処理の対象となる論理アドレスを特定する。ここで判定部１２４は、特定された論理アドレスが、先読みリストテーブル１４１に記録されているか否かを判定する。特定された論理アドレスが先読みリストテーブル１４１に記録されており、かつ、当該論理アドレスに対して判定フラグが登録されている場合は、判定部１２４は、当該論理アドレスを対象としたデータ先読みコマンドの作成は不要であると判定する。そして判定部１２４は、データ先読み情報生成部１１３に、データ先読みコマンドの生成は不要であることを通知する。これにより、過去にデータ先読みコマンドにより読み出されたデータであって、実際には演算に使用されなかったデータに対する再度のデータ先読み処理が行われないようにすることができる。
【００７０】
図１９は、第３実施例における情報処理装置１０のＣＰＵ１００により実施される処理のうち、主に監視部１２２によって実行される処理のフローチャートである。図１９における処理フローは処理１６００により開始され、処理１６０２において監視部１２２が、コマンド生成要求受信部１１１によりデータ読出しコマンドの生成要求が受信されたか否かを判定する。処理１６０２において、データ読出しコマンドの生成要求が受信されたと判定された場合は、処理フローは処理１６０４へ進み、データ読出しコマンドが受信されたと判定されない場合は、処理フローは処理１６１０へ進む。
【００７１】
まず、処理フローが処理１６０４へ進んだ場合について説明する。処理１６０４において監視部１２２は、受信された生成要求により指定される論理アドレスが、先読みリストテーブル１４１に記録されているか否かを判定する。処理１６０４において、指定された論理アドレスが先読みリストテーブル１４１に記録されていると判定された場合は、処理フローは処理１６０６へ進み、指定された論理アドレスが先読みリストテーブル１４１に記録されていると判定されない場合は、処理フローは処理１６０２へ戻る。処理１６０６において監視部１２２が、先読みリストテーブル１４１に登録された論理アドレスに判定フラグが登録されているか否かを判定する。処理１６０６において判定フラグが登録されていると判定されない場合は、処理フローは処理１６０８へ進み、判定フラグが登録されていると判定された場合は、処理フローは処理１６０２へ戻る。処理１６０８において監視部１２２が、該当する論理アドレスを先読みリストテーブル１４１から削除するよう記録部１２１に指示し、記録部１２１が先読みリストテーブル１４１から該当する論理アドレスを削除する。
【００７２】
一方、処理フローが処理１６０２から処理１６１０へ進んだ場合、処理１６１０において監視部１２２が、フラッシュメモリ２５０から読み出された後、利用されずに一定時間が経過した先読みデータがあるか否かを判定する。具体的には監視部１２２は、タイマ１２３が計測する時刻と、先読みリストテーブル１４１に記録された書込み時刻との差分に基づき、処理１６１０の判定を行う。処理１６１０において、利用されずに一定時間が経過した先読みデータがあると判定されない場合は、処理フローは処理１６０２へ戻り、利用されずに一定時間が経過した先読みデータがあると判定された場合は、処理フローは処理１６１２へ進む。処理１６１２において監視部１２２は、利用されないで一定時間が経過した先読みデータの欄に判定フラグを登録するよう記録部１２１へ指示し、記録部１２１が先読みリストテーブル１４１に判定フラグを登録する。処理フローは、処理１６１２の後処理１６０２へ戻る。このようにして、先読みデータの利用実績が先読みリストテーブル１４１に蓄積され、その後のデータ先読み情報の生成の際に参照される。
【００７３】
図２０は、第３実施例における情報処理装置１０のＣＰＵ１００によって実行される処理のうち、データ先読み情報の生成に関する処理のフローチャートを示す図である。図２０に示される処理フローは、図８にて示された処理１０１６に相当する。処理フローは処理１７００により開始され、処理１７０２においてデータ先読み情報生成部１１３が、先読みの対象となる論理アドレスを特定する。処理１７０４において判定部１２４が、処理１７０２において特定された論理アドレスが先読みリストテーブル１４１に記録されているか否かを判定する。特定された論理アドレスが先読みリストテーブル１４１に記録されていると判定された場合は、処理フローは処理１７０６へ進み、特定された論理アドレスが先読みリストテーブル１４１に記録されていると判定されない場合は、処理フローは処理１７１０へ進む。処理１７０６において判定部１２４が、特定された論理アドレスに対して判定フラグが先読みリストテーブル１４１に登録されているか否かを判定する。判定フラグが登録されていると判定された場合は、処理フローは処理１７２０にて処理が終了する。この場合はデータ先読み情報として、データ先読みコマンドの生成が不要であることを示す「０」が生成される。判定フラグが登録されていると判定されない場合は、処理フローは処理１７１０へ進む。処理１７１０においてデータ先読み情報生成部１１３は、データ先読み情報として、データ先読みコマンドの生成が必要であることを示す「１」と、データ先読み処理の対象となるフラッシュメモリアドレスを、データ先読み情報として生成し、処理フローは処理１７２０において終了する。
【００７４】
このように第３実施例では、データ先読み処理によりフラッシュメモリ２５０から読み出された先読みデータが、その後、演算処理部１０２によって使用されたか否かが監視される。先読みデータが、読み出された後の一定時間以内に演算処理部１０２による演算処理において使用されていない場合は、先読みデータの論理アドレスと判定フラグとが対応付けられて先読みリストテーブル１４１に記録される。そして、以降にその論理アドレスに対するデータ先読みコマンドの発行は行われない。これにより、使用される可能性の低いデータに対するデータ先読みコマンドの発行が抑制される。
【００７５】
次に、図１７に示されるフラグリセット部１２５について説明する。フラグリセット部１２５は、コマンド生成部１１２からフラッシュメモリ２５０に対するデータ書込みコマンドが発行された場合、当該コマンドによってデータが書き換えられる論理アドレス及び判定フラグを、先読みリストテーブル１４１から削除する機能を有する。データ書込みコマンドが発行された場合は、フラッシュメモリ２５０に格納されるデータ内容は変更されるため、あるフラッシュメモリアドレスに格納されていたデータであって変更前のものについてなされた論理アドレス及び判定フラグはリセットされる。
【００７６】
ここまで第３実施例について説明した。次に第３実施例の変形例について説明する。第３実施例では、データ先読み処理が行われた後、一定時間内に使用されなかった先読みデータに関して、不使用であることを示す判定フラグが登録される例が開示された。第３実施例の変形例では、ＤＲＡＭ１６０の先読みデータが保持される領域から、先読みデータが消去された時点で判定フラグが登録される。
【００７７】
本変形例において、保持データテーブル１３２には、先読みデータがＤＲＡＭ１６０に書込まれた時刻が記録される。保持データテーブル１３２に記録された時刻情報は、当該先読みデータが演算処理部１０２で使用された場合には、当該先読みデータが使用された時刻により上書きされる。ＤＲＡＭ制御部１１５は、新しくフラッシュメモリ２５０から読み出されてくる先読みデータを順次ＤＲＡＭ１６０に書き込む一方、保持データテーブル１３２に記録された時刻情報により特定される時刻が古い先読みデータを順に消去する作業を行う。例えば、ＤＲＡＭ１６０のデータ保持領域のうち先読みデータ用に割り当てられた領域の空き容量が閾値以下となった場合、保持データテーブル１３２に記録された時刻情報によって特定される時刻からの経過時間が長いデータが順に消去される。またＤＲＡＭ制御部１１５は、ＤＲＡＭ１６０から先読みデータを消去した場合には、保持データテーブル１３２の内容を更新する。すなわちＤＲＡＭ１６０から先読みデータが消去された場合には、保持データテーブル１３２から対応する論理アドレスが削除される。
【００７８】
監視部１２２は、保持データテーブル１３２の内容をモニターする。例えば保持データテーブル１３２に記録されていた論理アドレス「ａ」が消去されたとする。この場合、監視部１２２は、先読みリストテーブル１４１にアクセスし、論理アドレス「ａ」が先読みリストテーブル１４１に記録されているか否かを判定する。論理アドレス「ａ」が先読みリストテーブル１４１に記録されていれば、論理アドレス「ａ」に対応して判定フラグを登録するよう、記録部１２１に指示する。これにより、論理アドレス「ａ」に対して判定フラグが登録される。また監視部１２２は、コマンド生成要求受信部１１１により受信されたコマンド生成要求を検出する。例えばコマンド生成要求受信部１１１が、論理アドレス「ａ」を指定するデータ読出しコマンドの生成要求を受信したとする。この場合、監視部１２２は、先読みリストテーブル１４１に論理アドレス「ａ」が記録されているか否かを判定する。論理アドレス「ａ」が先読みリストテーブル１４１に記録されている場合、監視部１２２は更に、論理アドレス「ａ」に対応して判定フラグが登録されているか否かを判定する。判定フラグが登録されていない場合は、監視部１２２は、論理アドレス「ａ」を先読みリストテーブル１４１から消去するよう、記録部１２１に指示する。これにより、論理アドレス「ａ」が先読みリストテーブル１４１から消去される。
【００７９】
図２１は、第３実施例の変形例におけるＣＰＵ１００によって実行される処理のうち、判定フラグの登録に関する処理のフローチャートである。処理フローは処理１８００により開始され、処理１８０２において監視部１２２が、保持データテーブル１３２から消去された先読みデータがあるか否かを判定する。消去された先読みデータがあると判定された場合は、処理フローは処理１８０４へ進み、消去された先読みデータがあると判定されない場合は、監視部１２２は処理１８０２を繰り返し実行する。処理１８０４において監視部１２２が、保持データテーブル１３２から消去された先読みデータに対応する論理アドレスが、先読みリストテーブル１４１に記録されているか否かを判定する。消去された先読みデータに対応する論理アドレスが先読みリストテーブル１４１に記録されていると判定された場合は、処理フローは処理１８０６へ進み、消去された先読みデータに対応する論理アドレスが先読みリストテーブル１４１に記録されていると判定されない場合は、処理フローは処理１８０２へ戻る。処理１８０６において監視部１２２が、先読みリストテーブル１４１に記録されている論理アドレスに対して判定フラグを登録するよう記録部１２１に指示し、記録部１２１が、判定フラグを登録する。処理フローは、処理１８０６の後、処理１８０２へ戻る。
【００８０】
図２２は、第３実施例の変形例におけるＣＰＵ１００によって実行される処理のうち、先読みリストテーブル１４１から論理アドレスを消去する処理のフローチャートである。処理フローは処理１９００により開始され、処理１９０２において監視部１２２が、データ読出しコマンドの生成要求がコマンド生成要求受信部１１１によって受信されたか否かを判定する。データ読出しコマンドの生成要求が受信されたと判定された場合は、処理フローは処理１９０４へ進み、データ読出しコマンドの生成要求が受信されたと判定されない場合は、監視部１２２は処理１９０２を繰り返し実行する。処理１９０４において監視部１２２が、コマンド生成要求にて指定される論理アドレスが先読みリストテーブル１４１に記録されているか否かを判定する。コマンド生成要求にて指定される論理アドレスが記録されていると判定された場合は、処理フローは処理１９０６へ進み、コマンド生成要求にて指定される論理アドレスが記録されていると判定されない場合は、処理フローは処理１９０２へ戻る。処理１９０６において監視部１２２が、コマンド生成要求にて指定される論理アドレスに判定フラグが登録されているか否かを判定する。判定フラグが登録されていると判定されない場合は、処理フローは処理１９０８へ進み、判定フラグが登録されていると判定された場合は、処理フローは処理１９０２へ戻る。そして処理１９０８において監視部１２２が、先読みリストテーブル１４１に記録されている論理アドレスを消去するよう記録部１２１に指示し、記録部１２１が論理アドレスを先読みリストテーブル１４１から消去する。処理フローは、処理１９０８の後、処理１９０２へ戻る。
【００８１】
開示の実施例に基づき、更に以下の付記を開示する。
（付記１）
第１アドレス領域に格納された第１データを指定するコマンド生成要求に基づき、前記第１データを読出し対象とする第１読出しコマンドを生成する第１コマンド生成部と、
前記コマンド生成要求に基づき、前記第１アドレス領域とは異なる第２アドレス領域に格納された第２データを読出し対象とする第２読出しコマンドを生成する第２コマンド生成部と、
前記第１コマンド生成部によって生成された前記第１読出しコマンドを保持する第１コマンドバッファと、
前記第２コマンド生成部によって生成された前記第２読出しコマンドを保持する第２コマンドバッファと、
前記第１コマンドバッファ及び前記第２コマンドバッファに保持される前記第１読出しコマンド及び前記第２読出しコマンドを実行するコマンド実行部と、
を有し、
前記コマンド実行部は、前記第１コマンドバッファが空の状態であることを条件として、前記第２コマンドバッファに格納されている前記第２読出しコマンドを実行する
ことを特徴とする情報処理システム。
（付記２）
前記情報処理システムは、情報処理装置と、前記情報処理装置に接続されたストレージとを有し、
前記情報処理装置は、第１メモリを有し、
前記ストレージは、第２メモリを有し、
前記第１読出しコマンド及び前記第２読出しコマンドが実行されることにより、前記第２メモリの前記第１アドレス領域及び前記第２アドレス領域にそれぞれ格納されている前記第１データ及び前記第２データが読み出され、読み出された前記第１データ及び前記第２データは、前記第１メモリに保持されることを特徴とする付記１に記載の情報処理システム。
（付記３）
前記第１コマンド生成部は、前記情報処理装置に設けられ、
前記第２コマンド生成部は、前記ストレージに設けられ、
前記第１コマンド生成部は、前記第２アドレス領域を示す情報を前記第２コマンド生成部へ送信することを特徴とする付記２に記載の情報処理システム。
（付記４）
前記情報処理装置は、情報処理に使用される前記第１データが格納される前記第１メモリの前記第１アドレス領域を指定する前記第１読出しコマンドを生成し、
前記情報処理装置は、前記第１アドレスに基づき、前記第２データが前記情報処理に使用されることを予測し、
前記情報処理装置は、前記予測に基づき、前記第２アドレス領域を特定し、
前記第２コマンド生成部は、特定された前記第２アドレス領域を読出し対象とする前記第２読出しコマンドを生成する
ことを特徴とする付記１乃至３何れか一に記載の情報処理システム。
（付記５）
前記第１コマンドバッファは、第１Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ（ＦＩＦＯ）バッファであり、
前記第２コマンドバッファは、第２ＦＩＦＯバッファである
ことを特徴とする付記１乃至４何れか一に記載の情報処理システム。
（付記６）
前記第１メモリは揮発性メモリであり、
前記第２メモリは不揮発性メモリである
ことを特徴とする付記１乃至５何れか一に記載の情報処理システム。
（付記７）
第１アドレス領域に格納された第１データを指定するコマンド生成要求に基づき、前記第１データを読出し対象とする第１読出しコマンドを生成する第１コマンド生成部と、
前記コマンド生成要求に基づき、前記第１アドレス領域とは異なる第２アドレス領域に格納された第２データを読出し対象とする第２読出しコマンドを生成する第２コマンド生成部と、
前記第１コマンド生成部及び前記第２コマンド生成部によってそれぞれ生成された前記第１読出しコマンド及び前記第２読出しコマンドを保持する第１コマンドバッファと、
前記第１コマンドバッファに保持される前記第１読出しコマンド及び前記第２読出しコマンドを実行するコマンド実行部と、
を有し、
前記第２コマンド生成部は、前記第１コマンドバッファのコマンド保持状況に基づいて、前記第２コマンド生成部にて生成される前記第２読出しコマンドを、前記第１コマンドバッファに保持させるタイミングを制御することを特徴とする情報処理システム。
（付記８）
前記第２コマンド生成部は、前記第１コマンドバッファに保持されるコマンドの数が所定値以下である場合に、前記第２コマンド生成部にて生成される前記第２読出しコマンドを、前記第１コマンドバッファに保持させることを特徴とする付記７に記載の情報処理システム。
（付記９）
前記第１コマンド生成部によって生成された前記第１読出しコマンドは、前記第１コマンドバッファ及び前記第２コマンド生成部へ送信され、
前記第２コマンド生成部は、前記第１読出しコマンドを保持する第２コマンドバッファを有し、
前記第２コマンド生成部は、前記第２コマンドバッファに前記第１コマンド保持されるコマンドの数が所定値以上である場合に、前記第２コマンド生成部にて生成される前記第２読出しコマンドを、前記第１コマンドバッファに保持させることを特徴とする付記７又は８に記載の情報処理システム。
（付記１０）
前記第２コマンド生成部は、生成された前記第２読出しコマンドを保持する第２コマンドバッファを有し、
前記第２コマンド生成部は、前記第２コマンドバッファに保持される前記第２読出しコマンドの数が所定値以上である場合に、前記第２読出しコマンドを前記第１コマンドバッファに保持させることを特徴とする付記７又は８に記載の情報処理システム。
（付記１１）
前記情報処理システムは、情報処理装置と、前記情報処理装置に接続されたストレージとを有し、
前記情報処理装置は、第１メモリを有し、
前記ストレージは、第２メモリを有し、
前記第１読出しコマンド及び前記第２読出しコマンドが実行されることにより、前記第２メモリの前記第１アドレス領域及び前記第２アドレス領域にそれぞれ格納されている前記第１データ及び前記第２データが読み出され、読み出された前記第１データ及び前記第２データは、前記第１メモリに保持されることを特徴とする付記７乃至１０何れか一に記載の情報処理システム。
（付記１２）
前記第１コマンド生成部は、前記情報処理装置に設けられ、
前記第２コマンド生成部は、前記ストレージに設けられ、
前記第１コマンド生成部は、前記第２アドレス領域を示す情報を前記第２コマンド生成部へ送信することを特徴とする付記１１に記載の情報処理システム。
（付記１３）
前記情報処理装置は、情報処理に使用される前記第１データが格納される前記第２メモリの前記第１アドレス領域を指定する前記第１読出しコマンドを生成し、
前記情報処理装置は、前記第１アドレスに基づき、前記第２データが前記情報処理に使用されることを予測し、
前記情報処理装置は、前記予測に基づき、前記第２アドレス領域を特定し、
前記第２コマンド生成部は、特定された前記第２アドレス領域を読出し対象とする前記第２読出しコマンドを生成する
ことを特徴とする付記７乃至１２何れか一に記載の情報処理システム。
（付記１４）
前記第１コマンドバッファは、第１ＦＩＦＯバッファであり、
前記第２コマンドバッファは、第２ＦＩＦＯバッファである
ことを特徴とする付記７乃至１３何れか一に記載の情報処理システム。
（付記１５）
前記第１メモリは揮発性メモリであり、
前記第２メモリは不揮発性メモリである
ことを特徴とする付記７乃至１４何れか一に記載の情報処理システム。
（付記１６）
第１アドレス領域に格納された第１データを指定するコマンド生成要求に基づき、前記第１データを読出し対象とする第１読出しコマンドを生成する第１コマンド生成部と、
前記コマンド生成要求に基づき、前記第１アドレス領域とは異なる第２アドレス領域に格納された第２データを読出し対象とする第２読出しコマンドを生成する第２コマンド生成部と、
前記第１読出しコマンド及び前記第２読出しコマンドに基づき、前記第１アドレス及び前記第２アドレス領域からそれぞれ第１データ及び第２データを読み出すコマンド実行部と、
読み出された前記第１データ及び前記第２データを保持する第１メモリと、を有し、
第２コマンド生成部は、前記第２データが前記第１メモリに保持された後の一定期間内に、前記第２アドレス領域を指定する他のコマンド生成要求がなされなかった場合は、前記一定期間が経過した後に、前記第１アドレス領域を指定する他のコマンド生成要求がなされた場合に、前記第２アドレス領域を指定する第３読出しコマンドを生成しない
ことを特徴とする情報処理システム。
（付記１７）
前記情報処理システムは、情報処理装置と、前記情報処理装置に接続されたストレージとを有し、
前記情報処理装置は、前記第１メモリを有し、
前記ストレージは、第２メモリを有する
ことを特徴とする付記１６に記載の情報処理システム。
（付記１８）
前記第１コマンド生成部は、前記情報処理装置に設けられ、
前記第２コマンド生成部は、前記ストレージに設けられ、
前記第１コマンド生成部は、前記第２アドレス領域を示す情報を前記第２コマンド生成部へ送信することを特徴とする付記１７に記載の情報処理システム。
（付記１９）
前記情報処理装置は、情報処理に使用される前記第１データが格納される前記第１メモリの前記第１アドレス領域を指定する前記第１読出しコマンドを生成し、
前記情報処理装置は、前記第１アドレスに基づき、前記第２データが前記情報処理に使用されることを予測し、
前記情報処理装置は、前記予測に基づき、前記第２アドレス領域を特定し、
前記第２コマンド生成部は、特定された前記第２アドレス領域を読出し対象とする前記第２読出しコマンドを生成する
ことを特徴とする付記１６乃至１８何れか一に記載の情報処理システム。
（付記２０）
第１コマンド生成部は、前記第２データが前記第１メモリに保持された後の一定期間内に、前記第２アドレス領域を指定する第２読出しコマンド生成要求がなされなかった場合は、前記一定期間が経過した後に、前記第１アドレス領域を指定する他のコマンド生成要求がなされた場合に、前記第２アドレス領域を示す情報を前記第２コマンド生成部へ送信しないこと特徴とする付記１６乃至１９何れか一に記載の情報処理システム。
【符号の説明】
【００８２】
１０  情報処理装置
１１  データ処理部
１２  データ保持部
２０  ストレージ
２１  制御部
２２  データ格納部
１００  ＣＰＵ
１５０  ＲＯＭ
１６０  ＤＲＡＭ
１７０  通信デバイス
１８０  インターフェースカード
１９０  バス
２００  メモリコントローラ
２５０Ａ、２５０Ｂ、２５０Ｃ  フラッシュメモリ
２８０  インターフェースカード
１０１  アプリケーション層
１０２  演算処理部
１０３  ファイルシステム
１０４  コマンド生成要求部
１０５  ＯＳ
１１０  デバイスドライバ
１１１  コマンド生成要求受信部
１１２  コマンド生成部
１１３  データ先読み情報生成部
１１４  コマンド送信部
１１５  ＤＲＡＭ制御部
１２１  記録部
１２２  監視部
１２３  タイマ
１２４  判定部
１２５  フラグリセット部
１３１  アドレス変換テーブル
１３２  保持データデーブル
１４１  先読みリストテーブル
２０２  コマンド受信部
２０４  チャネル選択部
２１０Ａ、２１０Ｂ、２１０Ｃ  キュー選択部
２１２Ａ、２１２Ｂ、２１２Ｃ  第１コマンドキュー
２１５Ａ、２１５Ｂ、２１５Ｃ  第２コマンドキュー
２１８Ａ、２１８Ｂ、２１８Ｃ  コマンドキュー
２２０Ａ、２２０Ｂ、２２０Ｃ  コマンド選択部
２３０Ａ、２３０Ｂ、２３０Ｃ  コマンド実行部
２４０  データ送信部
２６０  データ先読みコマンド生成部
２６１、２６１Ａ、２６１Ｂ、２６１Ｃ  ＦＩＦＯバッファ
２６２  判定部
２６３  生成部
２６４Ａ、２６４Ｂ、２６４Ｃ  発行部
【図１】
2017228172.tif 000003
【図２】
2017228172.tif 000004
【図３】
2017228172.tif 000005
【図４】
2017228172.tif 000006
【図５】
2017228172.tif 000007
【図６】
2017228172.tif 000008
【図７】
2017228172.tif 000009
【図８】
2017228172.tif 000010
【図９】
2017228172.tif 000011
【図１０】
2017228172.tif 000012
【図１１】
2017228172.tif 000013
【図１２】
2017228172.tif 000014
【図１３】
2017228172.tif 000015
【図１４】
2017228172.tif 000016
【図１５】
2017228172.tif 000017
【図１６】
2017228172.tif 000018
【図１７】
2017228172.tif 000019
【図１８】
2017228172.tif 000020
【図１９】
2017228172.tif 000021
【図２０】
2017228172.tif 000022
【図２１】
2017228172.tif 000023
【図２２】
2017228172.tif 000024