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