(57)【要約】  データの書き換えによる不具合などを生じさせることなくバーストリードを行うことで、メモリアクセスを高速化する。  プロセッサ（１０）からのリード要求に応じて、キャッシャブル領域とアンキャッシャブル領域とからなるメインメモリ（２０）からデータを読み出すバッファメモリ装置（１００）であって、リード要求に含まれるリードアドレスが示す領域の属性を取得する属性取得部（１１０）と、属性取得部（１１０）によって取得された属性が、バースト可属性であるか否かを判定する属性判定部（１２０）と、属性取得部（１１０）によって取得された属性がバースト可属性であると判定された場合、リードアドレスが示す領域に保持されているデータを含むデータをバーストリードするデータ読出部（１３０）と、データ読出部（１３０）によってバーストリードされたデータを保持するバッファメモリ（１４０）とを備える。
2010032433.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサからのリード要求に応じて、キャッシャブル属性とアンキャッシャブル属性とのいずれかに属する複数の領域からなるメインメモリ又は周辺デバイスからデータを読み出すバッファメモリ装置であって、
前記リード要求に含まれるリードアドレスが示す領域の属性を取得する属性取得部と、
前記属性取得部によって取得された属性が、前記アンキャッシャブル属性であり、かつ、バースト転送すべきデータが保持されることを示す第１属性であるか否かを判定する属性判定部と、
前記属性判定部によって、前記属性取得部によって取得された属性が前記第１属性であると判定された場合、前記リードアドレスが示す領域に保持されているデータを含むデータをバーストリードするデータ読出部と、
前記データ読出部によってバーストリードされたデータを保持する第１バッファメモリとを備える
バッファメモリ装置。
【請求項２】
前記属性判定部は、前記属性取得部によって取得された属性が、前記アンキャッシャブル属性であり、かつ、バースト転送すべきデータが保持されないことを示す第２属性であるか、前記第１属性であるかを判定し、
前記データ読出部は、さらに、前記属性判定部によって、前記属性取得部によって取得された属性が前記第２属性であると判定された場合、前記リードアドレスが示す領域に保持されているデータのみを読み出す
請求項１記載のバッファメモリ装置。
【請求項３】
前記バッファメモリ装置は、さらに、
前記メインメモリ又は前記周辺デバイスのアドレスと、当該アドレスが示す領域の属性が、前記第１属性、前記第２属性、及び、前記キャッシャブル属性であることを示す第３属性のいずれであるかを示す属性情報とを対応付けたテーブルを保持するテーブル保持部を備え、
前記属性取得部は、前記テーブル保持部に保持されたテーブルを参照することで、前記リードアドレスが示す領域の属性を取得する
請求項２記載のバッファメモリ装置。
【請求項４】
前記バッファメモリ装置は、さらに、
キャッシュメモリを備え、
前記属性判定部は、前記属性取得部によって取得された属性が、前記第１属性、前記第２属性、及び、前記第３属性のいずれであるかを判定し、
前記データ読出部は、さらに、前記属性判定部によって、前記属性取得部によって取得された属性が前記第３属性であると判定された場合、前記リードアドレスが示す領域に保持されているデータを含むデータをバーストリードし、
前記キャッシュメモリは、前記データ読出部によってバーストリードされたデータのうち、前記リードアドレスが示す領域に保持されているデータを含む第１データを保持し、
前記第１バッファメモリは、前記データ読出部によってバーストリードされたデータのうち、前記第１データを除く第２データを保持する
請求項３記載のバッファメモリ装置。
【請求項５】
前記バッファメモリ装置は、さらに、
前記メインメモリ又は前記周辺デバイスのアドレスと、当該アドレスが示す領域の属性を、前記第１属性、前記第２属性、及び、前記第３属性のいずれかに設定することで前記テーブルを生成する属性設定部を備え、
前記テーブル保持部は、前記属性設定部によって生成されたテーブルを保持する
請求項３記載のバッファメモリ装置。
【請求項６】
前記データ読出部は、前記属性判定部によって、前記属性取得部によって取得された属性が前記第１属性であると判定された場合、さらに、前記リードアドレスが示す領域に保持されているデータが前記第１バッファメモリに既に保持されているか否かを判断し、当該データが前記第１バッファメモリに既に保持されている場合、前記第１バッファメモリから当該データを読み出し、当該データが前記第１バッファメモリに保持されていない場合、当該データを含むデータをバーストリードする
請求項１記載のバッファメモリ装置。
【請求項７】
前記属性取得部は、さらに、前記プロセッサからのライト要求に含まれるライトアドレスが示す領域の属性を取得し、
前記バッファメモリ装置は、さらに、
前記属性判定部によって、前記属性取得部によって取得された属性のうち、前記ライトアドレスが示す領域の属性が前記第１属性である場合に、前記メインメモリ又は前記周辺デバイスに書き込むための前記ライト要求に対応するライトデータを保持する第２バッファメモリと、
前記プロセッサからの前記リード要求又は前記ライト要求であるメモリアクセス要求の性質を示すメモリアクセス情報を取得するメモリアクセス情報取得部と、
前記メモリアクセス情報取得部によって取得されたメモリアクセス情報が示す性質、又は、前記属性取得部によって取得された属性が、予め定められた条件を満たすか否かを判定する条件判定部と、
前記メモリアクセス情報が示す性質が前記条件を満たすと前記条件判定部によって判定された場合、前記第２バッファメモリに保持されたライトデータを前記メインメモリ又は前記周辺デバイスに掃き出す制御部とを備える
請求項１記載のバッファメモリ装置。
【請求項８】
前記メモリアクセス情報取得部は、前記メモリアクセス情報として、前記メモリアクセス要求を発行した論理プロセッサ及び物理プロセッサを示すプロセッサ情報を取得し、
前記条件判定部は、前記プロセッサ情報が示す物理プロセッサとは異なる物理プロセッサで、かつ、前記プロセッサ情報が示す論理プロセッサと同じ論理プロセッサで以前に発行されたライト要求に対応するライトデータが前記第２バッファメモリに保持されている場合に、前記条件を満たすと判定し、
前記制御部は、前記条件を満たすと前記条件判定部によって判定された場合、前記条件を満たす第２バッファメモリに保持されているデータを前記メインメモリ又は前記周辺デバイスに掃き出す
請求項７記載のバッファメモリ装置。
【請求項９】
前記条件判定部は、前記メモリアクセス情報に、前記第２バッファメモリに保持されたデータを前記メインメモリ又は前記周辺デバイスに掃き出すためのコマンド情報が含まれているか否かを判定し、
前記制御部は、前記メモリアクセス情報に前記コマンド情報が含まれていると前記条件判定部によって判定された場合、前記コマンド情報が示す第２バッファメモリに保持されたデータを前記メインメモリ又は前記周辺デバイスに掃き出す
請求項７記載のバッファメモリ装置。
【請求項１０】
前記メモリアクセス情報取得部は、さらに、前記メモリアクセス情報として、前記メモリアクセス要求を発行したプロセッサを示すプロセッサ情報を取得し、
前記条件判定部は、さらに、前記属性情報が示す属性が、前記第１属性であるか否かを判定し、
前記制御部は、さらに、前記属性取得部によって取得された属性が前記第１属性であると前記条件判定部によって判定された場合、前記プロセッサ情報が示すプロセッサに対応する第２バッファメモリに保持されたデータを前記メインメモリ又は前記周辺デバイスに掃き出す
請求項７記載のバッファメモリ装置。
【請求項１１】
前記第２バッファメモリは、さらに、前記ライトデータに対応するライトアドレスを保持し、
前記メモリアクセス情報取得部は、さらに、前記メモリアクセス要求がリード要求を含む場合に、前記メモリアクセス情報として、当該リード要求に含まれるリードアドレスを取得し、
前記条件判定部は、前記リードアドレスに一致するライトアドレスが前記第２バッファメモリに保持されているか否かを判定し、
前記制御部は、前記リードアドレスに一致するライトアドレスが前記第２バッファメモリに保持されていると前記条件判定部によって判定された場合、前記ライトアドレスに対応するライトデータ以前に前記第２バッファメモリに保持されたデータを前記メインメモリ又は前記周辺デバイスに掃き出す
請求項７記載のバッファメモリ装置。
【請求項１２】
前記メモリアクセス情報取得部は、さらに、前記メモリアクセス要求がライト要求を含む場合に、当該ライト要求に含まれる第１ライトアドレスを取得し、
前記条件判定部は、前記第１ライトアドレスが、直前に入力されたライト要求に含まれる第２ライトアドレスに連続するか否かを判定し、
前記制御部は、前記第１ライトアドレスと前記第２ライトアドレスとが連続すると前記条件判定部によって判定された場合、前記第２ライトアドレスに対応するライトデータ以前に前記第２バッファメモリに保持されたデータを前記メインメモリ又は前記周辺デバイスに掃き出す
請求項７記載のバッファメモリ装置。
【請求項１３】
前記条件判定部は、さらに、前記第２バッファメモリに保持されているデータのデータ量が所定の閾値に達したか否かを判定し、
前記制御部は、さらに、前記データ量が前記閾値に達したと前記条件判定部によって判定された場合、前記第２バッファメモリに保持されたデータを前記メインメモリ又は前記周辺デバイスに掃き出す
請求項７記載のバッファメモリ装置。
【請求項１４】
前記バッファメモリ装置は、さらに、
前記プロセッサからのライト要求に含まれるライトアドレスが、前記第１バッファメモリに保持されているデータに対応するアドレスと一致するか否かを判断し、前記ライトアドレスが一致する場合、前記第１バッファメモリに保持されているデータを無効化する無効化部を備える
請求項１記載のバッファメモリ装置。
【請求項１５】
プロセッサと、キャッシャブル属性及びアンキャッシャブル属性のいずれかに属する複数の領域からなるメインメモリ又は周辺デバイスとを備え、前記プロセッサからのリード要求に応じて、前記メインメモリ又は前記周辺デバイスからデータを読み出すメモリシステムであって、
前記プロセッサからのリード要求に含まれるリードアドレスが示す領域の属性を取得する属性取得部と、
前記属性取得部によって取得された属性が、前記アンキャッシャブル属性であり、かつ、バースト転送すべきデータが保持されることを示す第１属性であるか否かを判定する属性判定部と、
前記属性判定部によって、前記属性取得部によって取得された属性が前記第１属性であると判定された場合、前記リードアドレスが示す領域に保持されているデータを含むデータをバーストリードするデータ読出部と、
前記データ読出部によってバーストリードされたデータを保持するバッファメモリとを備え、
前記データ読出部は、前記属性判定部によって、前記属性取得部によって取得された属性が前記第１属性であると判定された場合、さらに、前記リードアドレスが示す領域に保持されているデータが前記バッファメモリに既に保持されているか否かを判断し、当該データが前記バッファメモリに既に保持されている場合、前記バッファメモリから当該データを読み出し、当該データが前記バッファメモリに保持されていない場合、当該データを含むデータをバーストリードする
メモリシステム。
【請求項１６】
前記メモリシステムは、さらに、複数のキャッシュを備え、
前記複数のキャッシュのうち、前記メインメモリ又は前記周辺デバイスに最も近いキャッシュは、前記バッファメモリを備える
請求項１５記載のメモリシステム。
【請求項１７】
プロセッサからのリード要求に応じて、キャッシャブル属性とアンキャッシャブル属性とのいずれかに属する複数の領域からなるメインメモリ又は周辺デバイスからデータを読み出すデータ読出方法であって、
前記プロセッサからのリード要求に含まれるリードアドレスが示す領域の属性を取得する属性取得ステップと、
前記属性取得ステップで取得された属性が、前記アンキャッシャブル属性であり、かつ、バースト転送すべきデータが保持されることを示す第１属性であるか否かを判定する属性判定ステップと、
前記属性判定ステップで、前記属性取得ステップで取得された属性が前記第１属性であると判定された場合、前記リードアドレスが示す領域に保持されているデータが前記バッファメモリに既に保持されているか否かを判断する判断ステップと、
前記判断ステップで、当該データがバッファメモリに既に保持されていると判断された場合、前記バッファメモリから当該データを読み出し、当該データが前記バッファメモリに保持されていないと判断された場合、当該データを含むデータをバーストリードし、バーストリードしたデータを前記バッファメモリに格納するデータ読出ステップとを含む
データ読出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、バッファメモリ装置、メモリシステム及びデータ読出方法に関し、特に、メインメモリに保持されたデータをバーストリードする際に、バーストリードされたデータを保持するバッファメモリ装置、メモリシステム及びデータ読出方法に関する。
【背景技術】
【０００２】
近年、マイクロプロセッサからメインメモリへのメモリアクセスを高速化させるために、例えば、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などからなる小容量で高速で動作可能なキャッシュメモリが利用されている。例えば、キャッシュメモリをマイクロプロセッサの内部、又は、その近傍に配置し、メインメモリに保持されたデータの一部をキャッシュメモリに記憶させておくことで、メモリアクセスを高速化させることができる。【０００３】
従来、メモリアクセスをさらに高速化させるために、リード要求に応じて、当該リード要求に含まれるアドレスに連続するアドレスへは、プロセッサからアクセスされる可能性が高いと想定し、該当するアドレスに対応するデータをバーストリードする技術が示されている（特許文献１参照）。【０００４】
図２７は、従来のメモリアクセス方法の概略を示す図である。同図に示すように、特許文献１に記載されている技術では、メインメモリ６２０は、キャッシャブル領域６２１とアンキャッシャブル領域６２２とに分けられる。【０００５】
ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）などのプロセッサ６１０から、アンキャッシャブル領域６２２に対するリード要求があった場合、バーストリードされたデータは、プロセッサ６１０が備える汎用レジスタ６１２に格納される。また、キャッシャブル領域６２１に対するリード要求があった場合、バーストリードされたデータはキャッシュメモリ６１１に格納される。【０００６】
以上のようにして、特許文献１に記載のメモリアクセス方法では、アクセスされる可能性が高いアドレスに対応するデータをバーストリードすることで、メモリアクセスをさらに高速化することができる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００４−２４０５２０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上記従来技術によれば、以下のような課題がある。【０００９】
まず、アンキャッシャブル領域６２２に対するリード要求があった場合は、上述のように、バーストリードされたデータは、ＣＰＵが備える汎用レジスタ６１２に格納されるが、汎用レジスタ６１２は、キャッシュメモリ６１１などと比べて非常に効率が悪い。また、アンキャッシャブル領域６２２の中には、リードするだけで保持していたデータの値が変わってしまうようなリードセンシティブな領域がある。アンキャッシャブル領域６２２に保持されるデータをバーストリードした場合、リードセンシティブな領域にまでアクセスしてしまい、データを書き換えてしまうという不具合が生じる。【００１０】
さらに、キャッシャブル領域６２１に対するリード要求があった場合は、上述のように、バーストリードされたデータは、キャッシュメモリ６１１に格納されるが、これにより、キャッシュメモリ６１１の内容が書き換えられてしまう。これにより、本来、メモリアクセスを高速化するためにキャッシュメモリ６１１に格納していたデータが消えてしまうため、メモリアクセスの高速化が達成されなくなる。【００１１】
そこで、本発明は、上記課題を解決するためになされたものであって、データの書き換えによる不具合などを生じさせることなくバーストリードを行うことで、メモリアクセスを高速化するバッファメモリ装置、メモリシステム及びデータ読出方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上記課題を解決するために、本発明のバッファメモリ装置は、プロセッサからのリード要求に応じて、キャッシャブル属性とアンキャッシャブル属性とのいずれかに属する複数の領域からなるメインメモリ又は周辺デバイスからデータを読み出すバッファメモリ装置であって、前記リード要求に含まれるリードアドレスが示す領域の属性を取得する属性取得部と、前記属性取得部によって取得された属性が、前記アンキャッシャブル属性であり、かつ、バースト転送すべきデータが保持されることを示す第１属性であるか否かを判定する属性判定部と、前記属性判定部によって、前記属性取得部によって取得された属性が前記第１属性であると判定された場合、前記リードアドレスが示す領域に保持されているデータを含むデータをバーストリードするデータ読出部と、前記データ読出部によってバーストリードされたデータを保持する第１バッファメモリとを備える。【００１３】
これにより、メインメモリ又は周辺デバイスのアドレスが示す領域の属性を判定することで、アンキャッシャブル領域の中のバースト転送すべきデータを保持する領域からデータをバーストリードするので、メインメモリ又は周辺デバイスの他の領域のデータの想定外の書き換えなどが発生してしまうことを防ぐことができる。さらに、バーストリードしたデータをバッファメモリに予め保持させておくことができるので、メモリアクセスの高速化を達成することができる。さらに、キャッシュメモリとは異なるバッファメモリにバーストリードしたデータを格納することで、キャッシュメモリを使用することなく、データを保持することができる領域を多くすることができる。【００１４】
また、前記属性判定部は、前記属性取得部によって取得された属性が、前記アンキャッシャブル属性であり、かつ、バースト転送すべきデータが保持されないことを示す第２属性であるか、前記第１属性であるかを判定し、前記データ読出部は、さらに、前記属性判定部によって、前記属性取得部によって取得された属性が前記第２属性であると判定された場合、前記リードアドレスが示す領域に保持されているデータのみを読み出してもよい。【００１５】
これにより、バーストリードすべきでない領域からデータをバーストリードしてしまうことを防ぐことができるので、想定外のデータの書き換えなどが発生してしまうことを防ぐことができる。【００１６】
また、前記バッファメモリ装置は、さらに、前記メインメモリ又は前記周辺デバイスのアドレスと、当該アドレスが示す領域の属性が、前記第１属性、前記第２属性、及び、前記キャッシャブル属性であることを示す第３属性のいずれであるかを示す属性情報とを対応付けたテーブルを保持するテーブル保持部を備え、前記属性取得部は、前記テーブル保持部に保持されたテーブルを参照することで、前記リードアドレスが示す領域の属性を取得してもよい。【００１７】
これにより、メインメモリ又は周辺デバイスのアドレスが示す領域と、属性との関係を容易に管理することができ、テーブルを参照するだけで属性を取得することができるので、本発明のバッファメモリ装置の構成を簡単化することができる。【００１８】
また、前記バッファメモリ装置は、さらに、キャッシュメモリを備え、前記属性判定部は、前記属性取得部によって取得された属性が、前記第１属性、前記第２属性、及び、前記第３属性のいずれであるかを判定し、前記データ読出部は、さらに、前記属性判定部によって、前記属性取得部によって取得された属性が前記第３属性であると判定された場合、前記リードアドレスが示す領域に保持されているデータを含むデータをバーストリードし、前記キャッシュメモリは、前記データ読出部によってバーストリードされたデータのうち、前記リードアドレスが示す領域に保持されているデータを含む第１データを保持し、前記第１バッファメモリは、前記データ読出部によってバーストリードされたデータのうち、前記第１データを除く第２データを保持してもよい。【００１９】
これにより、本来キャッシュメモリのみを利用していた場合に、さらに、バッファメモリにも予めデータを保持させておくことができるので、メモリアクセスをさらに高速化することができる。【００２０】
また、前記バッファメモリ装置は、さらに、前記メインメモリ又は前記周辺デバイスのアドレスと、当該アドレスが示す領域の属性を、前記第１属性、前記第２属性、及び、前記第３属性のいずれかに設定することで前記テーブルを生成する属性設定部を備え、前記テーブル保持部は、前記属性設定部によって生成されたテーブルを保持してもよい。【００２１】
これにより、必要に応じて属性を変更することなどもできる。【００２２】
また、前記データ読出部は、前記属性判定部によって、前記属性取得部によって取得された属性が前記第１属性であると判定された場合、さらに、前記リードアドレスが示す領域に保持されているデータが前記第１バッファメモリに既に保持されているか否かを判断し、当該データが前記第１バッファメモリに既に保持されている場合、前記第１バッファメモリから当該データを読み出し、当該データが前記第１バッファメモリに保持されていない場合、当該データを含むデータをバーストリードしてもよい。【００２３】
これにより、バッファメモリをキャッシュメモリと同じように動作させることができ、メモリアクセスを高速化することができる。【００２４】
また、前記属性取得部は、さらに、前記プロセッサからのライト要求に含まれるライトアドレスが示す領域の属性を取得し、前記バッファメモリ装置は、さらに、前記属性判定部によって、前記属性取得部によって取得された属性のうち、前記ライトアドレスが示す領域の属性が前記第１属性である場合に、前記メインメモリ又は前記周辺デバイスに書き込むための前記ライト要求に対応するライトデータを保持する第２バッファメモリと、前記プロセッサからの前記リード要求又は前記ライト要求であるメモリアクセス要求の性質を示すメモリアクセス情報を取得するメモリアクセス情報取得部と、前記メモリアクセス情報取得部によって取得されたメモリアクセス情報が示す性質、又は、前記属性取得部によって取得された属性が、予め定められた条件を満たすか否かを判定する条件判定部と、前記メモリアクセス情報が示す性質が前記条件を満たすと前記条件判定部によって判定された場合、前記第２バッファメモリに保持されたライトデータを前記メインメモリ又は前記周辺デバイスに掃き出す制御部とを備えてもよい。【００２５】
これにより、バッファメモリを利用することで、データの書き込み時にデータをマージし、マージしたデータをメインメモリ又は周辺デバイスにバーストライトすることができ、データの転送効率を向上させることができる。【００２６】
また、前記メモリアクセス情報取得部は、前記メモリアクセス情報として、前記メモリアクセス要求を発行した論理プロセッサ及び物理プロセッサを示すプロセッサ情報を取得し、前記条件判定部は、前記プロセッサ情報が示す物理プロセッサとは異なる物理プロセッサで、かつ、前記プロセッサ情報が示す論理プロセッサと同じ論理プロセッサで以前に発行されたライト要求に対応するライトデータが前記第２バッファメモリに保持されている場合に、前記条件を満たすと判定し、前記制御部は、前記条件を満たすと前記条件判定部によって判定された場合、前記条件を満たす第２バッファメモリに保持されているデータを前記メインメモリ又は前記周辺デバイスに掃き出してもよい。【００２７】
これにより、以前に発行されているライト要求に対応するデータをメインメモリ又は周辺デバイスに書き込むことで、データのコヒーレンシを保つことができる。なぜなら、メモリアクセス要求が、同じ論理プロセッサであるが、異なる物理プロセッサで発行された場合、異なるバッファメモリに同じ論理プロセッサから出力されたデータを保持してしまう恐れがあるが、この場合、各バッファメモリ間でのデータのコヒーレンシが保てなくなるためである。バッファメモリに保持されていたデータをメインメモリ又は周辺デバイスに掃き出すことで、バッファメモリ間でのデータのコヒーレンシの問題を無くすことができる。【００２８】
また、前記条件判定部は、前記メモリアクセス情報に、前記第２バッファメモリに保持されたデータを前記メインメモリ又は前記周辺デバイスに掃き出すためのコマンド情報が含まれているか否かを判定し、前記制御部は、前記メモリアクセス情報に前記コマンド情報が含まれていると前記条件判定部によって判定された場合、前記コマンド情報が示す第２バッファメモリに保持されたデータを前記メインメモリ又は前記周辺デバイスに掃き出してもよい。【００２９】
これにより、プロセッサからの指示に基づいて、容易にバッファメモリに保持されているデータをメインメモリ又は周辺デバイスに掃き出すことができ、メインメモリ又は周辺デバイスのデータを最新のデータに更新することができる。【００３０】
また、前記メモリアクセス情報取得部は、さらに、前記メモリアクセス情報として、前記メモリアクセス要求を発行したプロセッサを示すプロセッサ情報を取得し、前記条件判定部は、さらに、前記属性情報が示す属性が、前記第１属性であるか否かを判定し、前記制御部は、さらに、前記属性取得部によって取得された属性が前記第１属性であると前記条件判定部によって判定された場合、前記プロセッサ情報が示すプロセッサに対応する第２バッファメモリに保持されたデータを前記メインメモリ又は前記周辺デバイスに掃き出してもよい。【００３１】
これにより、プロセッサが発行したライト要求の順序を保つことができる。よって、データのコヒーレンシを保つことができる。【００３２】
また、前記第２バッファメモリは、さらに、前記ライトデータに対応するライトアドレスを保持し、前記メモリアクセス情報取得部は、さらに、前記メモリアクセス要求がリード要求を含む場合に、前記メモリアクセス情報として、当該リード要求に含まれるリードアドレスを取得し、前記条件判定部は、前記リードアドレスに一致するライトアドレスが前記第２バッファメモリに保持されているか否かを判定し、前記制御部は、前記リードアドレスに一致するライトアドレスが前記第２バッファメモリに保持されていると前記条件判定部によって判定された場合、前記ライトアドレスに対応するライトデータ以前に前記第２バッファメモリに保持されたデータを前記メインメモリ又は前記周辺デバイスに掃き出してもよい。【００３３】
これにより、常に、リードアドレスが示す領域からデータを読み出す前に、当該領域のデータを最新のデータに更新することができるので、古いデータをプロセッサが読み出してしまうことを防ぐことができる。【００３４】
また、前記メモリアクセス情報取得部は、さらに、前記メモリアクセス要求がライト要求を含む場合に、当該ライト要求に含まれる第１ライトアドレスを取得し、前記条件判定部は、前記第１ライトアドレスが、直前に入力されたライト要求に含まれる第２ライトアドレスに連続するか否かを判定し、前記制御部は、前記第１ライトアドレスと前記第２ライトアドレスとが連続すると前記条件判定部によって判定された場合、前記第２ライトアドレスに対応するライトデータ以前に前記第２バッファメモリに保持されたデータを前記メインメモリ又は前記周辺デバイスに掃き出してもよい。【００３５】
これにより、通常、プロセッサは一連の処理を行う場合は、連続するアドレスが示す連続領域へアクセスすることが多いので、アドレスが連続しない場合には当該一連の処理とは異なる処理が始まったと推定することができる。このため、当該一連の処理に関わるデータをメインメモリ又は周辺デバイスに掃き出す。これにより、バッファメモリに他の処理に関わるデータを保持させることができ、バッファメモリを効率良く利用することができる。【００３６】
また、前記条件判定部は、さらに、前記第２バッファメモリに保持されているデータのデータ量が所定の閾値に達したか否かを判定し、前記制御部は、さらに、前記データ量が前記閾値に達したと前記条件判定部によって判定された場合、前記第２バッファメモリに保持されたデータを前記メインメモリ又は前記周辺デバイスに掃き出してもよい。【００３７】
これにより、バッファメモリに保持されているデータ量が適当な量になった場合に、データを掃き出すことができる。例えば、データ量が、バッファメモリに保持できるデータの最大値、又は、バッファメモリとメインメモリ又は周辺デバイスとのデータバス幅に一致したときに、データを掃き出すことができる。【００３８】
また、前記バッファメモリ装置は、さらに、前記プロセッサからのライト要求に含まれるライトアドレスが、前記第１バッファメモリに保持されているデータに対応するアドレスと一致するか否かを判断し、前記ライトアドレスが一致する場合、前記第１バッファメモリに保持されているデータを無効化する無効化部を備えてもよい。【００３９】
これにより、バッファメモリに保持されたデータと、メインメモリ又は周辺デバイスに保持された対応するデータとが一致していない場合に、プロセッサがバッファメモリからデータを読み出すことを防ぐことができる。【００４０】
また、本発明は、メモリシステムとしても実現することができ、本発明のメモリシステムは、プロセッサと、キャッシャブル属性及びアンキャッシャブル属性のいずれかに属する複数の領域からなるメインメモリ又は周辺デバイスとを備え、前記プロセッサからのリード要求に応じて、前記メインメモリ又は前記周辺デバイスからデータを読み出すメモリシステムであって、前記プロセッサからのリード要求に含まれるリードアドレスが示す領域の属性を取得する属性取得部と、前記属性取得部によって取得された属性が、前記アンキャッシャブル属性であり、かつ、バースト転送すべきデータが保持されることを示す第１属性であるか否かを判定する属性判定部と、前記属性判定部によって、前記属性取得部によって取得された属性が前記第１属性であると判定された場合、前記リードアドレスが示す領域に保持されているデータを含むデータをバーストリードするデータ読出部と、前記データ読出部によってバーストリードされたデータを保持するバッファメモリとを備え、前記データ読出部は、前記属性判定部によって、前記属性取得部によって取得された属性が前記第１属性であると判定された場合、さらに、前記リードアドレスが示す領域に保持されているデータが前記バッファメモリに既に保持されているか否かを判断し、当該データが前記バッファメモリに既に保持されている場合、前記バッファメモリから当該データを読み出し、当該データが前記バッファメモリに保持されていない場合、当該データを含むデータをバーストリードする。【００４１】
また、前記メモリシステムは、さらに、複数のキャッシュを備え、前記複数のキャッシュのうち、前記メインメモリ又は前記周辺デバイスに最も近いキャッシュは、前記バッファメモリを備えてもよい。【００４２】
なお、本発明は、バッファメモリ装置及びメモリシステムとして実現できるだけではなく、当該メモリシステムを構成する処理部をステップとする方法として実現することもできる。また、これらステップをコンピュータに実行させるプログラムとして実現してもよい。さらに、当該プログラムを記録したコンピュータ読み取り可能なＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）などの記録媒体、並びに、当該プログラムを示す情報、データ又は信号として実現してもよい。そして、それらプログラム、情報、データ及び信号は、インターネットなどの通信ネットワークを介して配信してもよい。
【発明の効果】
【００４３】
本発明のバッファメモリ装置、メモリシステム及びデータ読出方法によれば、データの書き換えによる不具合などを生じさせることとなくバーストリードを行うことで、メモリアクセスを高速化することができる。
【図面の簡単な説明】
【００４４】
【図１】図１は、実施の形態１のプロセッサ、メインメモリ及びキャッシュメモリを含むシステムの概略構成を示すブロック図である。
【図２】図２は、実施の形態１のアドレス空間に設定された属性を示す図である。
【図３】図３は、実施の形態１のバッファメモリ装置の構成を示すブロック図である。
【図４】図４は、実施の形態１の領域属性テーブルの一例を示す図である。
【図５】図５は、実施の形態１のバッファメモリとキャッシュメモリとの詳細を示す図である。
【図６】図６は、実施の形態１のバッファメモリ装置の動作を示すフローチャートである。
【図７】図７は、実施の形態１において、属性がバースト可属性である場合の転送処理の詳細を示すフローチャートである。
【図８】図８は、実施の形態１において、属性がバースト不可属性である場合の転送処理の詳細を示すフローチャートである。
【図９】図９は、実施の形態１において、属性がキャッシャブル属性である場合の転送処理の詳細を示すフローチャートである。
【図１０】図１０は、実施の形態２のバッファメモリ装置の構成を示すブロック図である。
【図１１】図１１は、実施の形態２において、属性がキャッシャブル属性である場合の転送処理の詳細を示すフローチャートである。
【図１２】図１２は、実施の形態３のメモリシステムの構成を示すブロック図である。
【図１３】図１３は、実施の形態３のアドレス変換テーブルの一例を示す図である。
【図１４】図１４は、実施の形態４のバッファメモリ装置の構成を示すブロック図である。
【図１５】図１５は、実施の形態４のメモリアクセス情報の一例を示す図である。
【図１６】図１６は、実施の形態４のバッファメモリ装置が備えるバッファメモリの概略を示す図である。
【図１７】図１７は、実施の形態４の複数の判定条件の一例を示す判定テーブルを示す図である。
【図１８】図１８は、実施の形態４の判定部の詳細な構成を示すブロック図である。
【図１９】図１９は、実施の形態４のバッファメモリ装置の動作を示すフローチャートである。
【図２０】図２０は、実施の形態４のバッファメモリ装置の書き込み処理を示すフローチャートである。
【図２１】図２１は、実施の形態４のバッファメモリ装置の属性判定処理を示すフローチャートである。
【図２２】図２２は、実施の形態４のバッファメモリ装置のコマンド判定処理を示すフローチャートである。
【図２３】図２３は、実施の形態４のバッファメモリ装置のリードアドレス判定処理を示すフローチャートである。
【図２４】図２４は、実施の形態４のバッファメモリ装置のライトアドレス判定処理を示すフローチャートである。
【図２５】図２５は、実施の形態４のバッファメモリ装置のバッファ量判定処理を示すフローチャートである。
【図２６】図２６は、実施の形態４のバッファメモリ装置のプロセッサ判定処理を示すフローチャートである。
【図２７】図２７は、従来のメモリアクセス方法の概略を示す図である。
【発明を実施するための形態】
【００４５】
以下では、本発明について、実施の形態に基づいて、図面を用いて詳細に説明する。
【００４６】
（実施の形態１）
まず、本実施の形態のバッファメモリ装置が備えられる一般的なメモリシステムについて説明する。
【００４７】
図１は、本実施の形態のプロセッサ、メインメモリ及びキャッシュメモリを含むシステムの概略構成を示すブロック図である。同図に示すように、本実施の形態のシステムは、プロセッサ１０と、メインメモリ２０と、Ｌ１（レベル１）キャッシュ３０と、Ｌ２（レベル２）キャッシュ４０とを備える。
【００４８】
本実施の形態のバッファメモリ装置は、図１に示すようなシステムにおいて、例えば、プロセッサ１０とメインメモリ２０との間に備えられる。具体的には、バッファメモリ装置が備えるバッファメモリは、Ｌ２キャッシュ４０に備えられる。
【００４９】
プロセッサ１０は、メインメモリ２０にメモリアクセス要求を出力する。メモリアクセス要求は、例えば、データを読み出すためのリード要求、又は、データを書き込むためのライト要求である。リード要求は、データの読み出し先の領域を示すリードアドレスを含んでおり、ライト要求は、データの書き込み先の領域を示すライトアドレスを含んでいる。
【００５０】
メインメモリ２０は、キャッシャブル属性とアンキャッシャブル属性とのいずれかに属する複数の領域からなり、当該領域にプログラム又はデータなどを記憶するＳＤＲＡＭ（Ｓｙｎｃｈｒｏｎｏｕｓ  Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などの大容量のメインメモリである。プロセッサ１０から出力されるメモリアクセス要求（リード要求又はライト要求）に応じて、メインメモリ２０からのデータの読み出し、又は、メインメモリ２０へデータの書き込みが実行される。
【００５１】
Ｌ１キャッシュ３０とＬ２キャッシュ４０とは、プロセッサ１０がメインメモリ２０から読み出したデータの一部、及び、メインメモリ２０に書き込むデータの一部を記憶するＳＲＡＭなどのキャッシュメモリである。Ｌ１キャッシュ３０とＬ２キャッシュ４０とは、メインメモリ２０に比べて、容量は小さいが、高速で動作可能なキャッシュメモリである。また、Ｌ１キャッシュ３０は、Ｌ２キャッシュ４０よりプロセッサ１０の近くに配置される優先度の高いキャッシュメモリであり、通常、Ｌ２キャッシュ４０よりも小容量であるが高速で動作可能である。
【００５２】
Ｌ１キャッシュ３０は、プロセッサ１０から出力されるメモリアクセス要求を取得し、取得したメモリアクセス要求に含まれるアドレスに対応するデータを既に格納しているか（ヒット）格納していないか（ミス）を判定する。例えば、リード要求がヒットした場合、Ｌ１キャッシュ３０は、当該リード要求に含まれるリードアドレスに対応するデータをＬ１キャッシュ３０内部から読み出し、読み出したデータをプロセッサ１０に出力する。なお、リードアドレスに対応するデータとは、リードアドレスが示す領域に記憶されているデータである。ライト要求がヒットした場合、Ｌ１キャッシュ３０は、当該ライト要求と同時にプロセッサ１０から出力されるデータを、Ｌ１キャッシュ３０内部に書き込む。
【００５３】
リード要求がミスした場合、Ｌ１キャッシュ３０は、Ｌ２キャッシュ４０又はメインメモリ２０から当該リード要求に対応するデータを読み出し、読み出したデータをプロセッサ１０に出力する。ライト要求がミスした場合、Ｌ１キャッシュ３０は、リフィル処理を行い、タグアドレスを更新し、当該ライト要求と同時にプロセッサ１０から出力されるデータを書き込む。
【００５４】
Ｌ２キャッシュ４０は、プロセッサ１０から出力されるメモリアクセス要求を取得し、取得したメモリアクセス要求がヒットしたかミスしたかを判定する。リード要求がヒットした場合、Ｌ２キャッシュ４０は、当該リード要求に含まれるリードアドレスに対応するデータをＬ２キャッシュ４０内部から読み出し、Ｌ１キャッシュ３０を介して、読み出したデータをプロセッサ１０に出力する。ライト要求がヒットした場合、Ｌ１キャッシュ３０を介して、当該ライト要求と同時にプロセッサ１０から出力されるデータをＬ２キャッシュ４０内部に書き込む。
【００５５】
リード要求がミスした場合、Ｌ２キャッシュ４０は、メインメモリ２０から当該リード要求に対応するデータを読み出し、Ｌ１キャッシュ３０を介して、読み出したデータをプロセッサ１０に出力する。ライト要求がミスした場合、Ｌ２キャッシュ４０は、リフィル処理を行い、Ｌ１キャッシュ３０を介して、タグアドレスを更新し、当該ライト要求と同時にプロセッサ１０から出力されるデータを書き込む。
【００５６】
なお、図１に示すシステムでは、メインメモリ２０と、Ｌ１キャッシュ３０と、Ｌ２キャッシュ４０とのコヒーレンシを持たせるための処理が行われている。例えば、ライト要求に従ってキャッシュメモリに書き込まれたデータは、ライトスルー処理又はライトバック処理によって、メインメモリ２０に書き込まれる。
【００５７】
また、ライト要求がミスした場合、プロセッサ１０は、Ｌ１キャッシュ３０をリフィル及び更新することなく、メインメモリ２０にデータを書き込んでもよい。Ｌ２キャッシュ４０についても同様である。
【００５８】
なお、図１では、Ｌ１キャッシュ３０がプロセッサ１０の外部に備えられる構成を示したが、プロセッサ１０が、Ｌ１キャッシュ３０を備えてもよい。
【００５９】
また、メインメモリ２０に限らず、ＩＯデバイスなどのその他の周辺デバイスとの間でデータを転送してもよい。周辺デバイスとは、プロセッサ１０との間でデータの転送を行う機器であり、例えば、キーボード、マウス、ディスプレイ、又は、フロッピー（登録商標）ディスクドライブなどである。
【００６０】
次に、本実施の形態のメインメモリ２０について説明する。
【００６１】
図２は、本実施の形態のアドレス空間に設定された属性を示す図である。アドレス空間の領域は、メインメモリ２０、及び、その他の周辺デバイスなどに割り当てられる。同図に示すように、メインメモリ２０は、キャッシャブル領域２１とアンキャッシャブル領域２２とから構成される。
【００６２】
キャッシャブル領域２１は、Ｌ１キャッシュ３０及びＬ２キャッシュ４０などのキャッシュメモリにキャッシュすべきデータを保持することができることを示すキャッシャブル属性に属する領域である。
【００６３】
アンキャッシャブル領域２２は、Ｌ１キャッシュ３０及びＬ２キャッシュ４０などのキャッシュメモリにキャッシュすべきでないデータを保持することができることを示すアンキャッシャブル属性に属する領域である。アンキャッシャブル領域２２は、バースト可領域２３とバースト不可領域２４とから構成される。
【００６４】
バースト可領域２３は、キャッシュメモリにキャッシュすべきでなく、かつ、バースト転送すべきデータを保持することができることを示すバースト可属性に属する領域である。バースト転送は、データを一括して転送することであり、バーストリード及びバーストライトなどである。バースト可領域２３は、例えば、リードセンシティブでない領域である。
【００６５】
バースト不可領域２４は、キャッシュメモリにキャッシュすべきでなく、かつ、バースト転送すべきデータを保持することができないことを示すバースト不可属性に属する領域である。バースト不可領域２４は、例えば、リードセンシティブな領域である。
【００６６】
以上のように、本実施の形態のメインメモリ２０には、領域ごとに、３つの排他的な属性のいずれか１つが設定されている。
【００６７】
続いて、本実施の形態のバッファメモリ装置の構成について説明する。
【００６８】
図３は、本実施の形態のバッファメモリ装置の構成を示すブロック図である。同図のバッファメモリ装置１００は、図１に示すＬ２キャッシュ４０と同一のチップに備えられるとし、プロセッサ１０とメインメモリ２０との間でデータの転送処理を実行する。なお、図３では、プロセッサ１０がＬ１キャッシュ３０を備えるものとし、Ｌ１キャッシュ３０は図示していない。
【００６９】
図３に示すように、バッファメモリ装置１００は、属性取得部１１０と、属性判定部１２０と、データ読出部１３０と、バッファメモリ１４０と、キャッシュメモリ１５０と、テーブル保持部１６０と、属性設定部１７０とを備える。バッファメモリ装置１００は、プロセッサ１０から出力されるリード要求に対応するデータを、メインメモリ２０、バッファメモリ１４０又はキャッシュメモリ１５０から読み出し、読み出したデータをプロセッサ１０に転送する。
【００７０】
属性取得部１１０は、リード要求に含まれるアドレス（以下、リードアドレスとも記載する）が示す領域の属性を取得する。具体的には、属性取得部１１０は、テーブル保持部１６０に保持される領域属性テーブル１６１を参照することで、リードアドレスが示す領域の属性を取得する。
【００７１】
ここで、領域の属性には、上述のようにキャッシャブル属性、バースト可属性、及び、バースト不可属性の３つの属性がある。キャッシャブル属性は、領域がキャッシャブル領域２１に属することを示す。バースト可属性は、領域がアンキャッシャブル領域２２のバースト可領域２３に属することを示す。バースト不可属性は、領域がアンキャッシャブル領域２２のバースト不可領域２４に属することを示す。
【００７２】
属性判定部１２０は、属性取得部１１０で取得された属性が、キャッシャブル属性、バースト可属性、及び、バースト不可属性のいずれであるかを判定する。
【００７３】
データ読出部１３０は、属性判定部１２０の判定結果に応じて、メインメモリ２０、バッファメモリ１４０又はキャッシュメモリ１５０から、リード要求に対応するデータを読み出す。ここでは、データ読出部１３０は、第１データ読出部１３１と、第２データ読出部１３２と、第３データ読出部１３３とを備える。
【００７４】
第１データ読出部１３１は、属性判定部１２０によって、リード要求に含まれるアドレスが示す領域の属性がバースト可属性であると判定された場合に、リードアドレスが示す領域に保持されているデータの読み出しを実行する。さらに、第１データ読出部１３１は、リード要求がヒットしたかミスしたかを判定する。
【００７５】
リード要求がヒットした場合、第１データ読出部１３１は、バッファメモリ１４０から、リードアドレスに対応するデータ（以下、リードデータとも記載する）を読み出し、読み出したデータをプロセッサ１０に出力する。リード要求がミスした場合、第１データ読出部１３１は、メインメモリ２０から、リードデータを含むデータをバーストリードし、バーストリードしたデータ（以下、バーストリードデータとも記載する）をバッファメモリ１４０に格納する。そして、格納したバーストリードデータのうち、リードデータのみをプロセッサ１０に出力する。なお、バーストリードデータのバッファメモリ１４０への格納と、リードデータのプロセッサ１０への出力とは、並列して実行されてもよい。
【００７６】
ここで、バーストリードデータは、例えば、リードデータと、当該リードデータと共に使用される可能性の高いデータとである。一般的には、リードアドレスに連続するアドレスに対応するデータなどである。なお、リードデータ及びバーストリードデータのサイズは、プロセッサ１０、メインメモリ２０及びバッファメモリ装置１００などの間のデータバス幅、バッファメモリ１４０のメモリサイズ、又は、プロセッサ１０からの指示などに基づいて決定される。ここでは、一例として、リードデータのサイズは４バイトとし、バーストリードデータのサイズは６４バイトとする。
【００７７】
なお、本実施の形態では、キャッシュメモリの場合と同様に、リードアドレスに対応するデータがバッファメモリ１４０に既に保持されている場合を“リード要求がヒットした”、リードアドレスに対応するデータがバッファメモリ１４０に保持されていない場合を“リード要求がミスした”という。
【００７８】
第２データ読出部１３２は、属性判定部１２０によって、リード要求に含まれるアドレスが示す領域の属性がバースト不可属性であると判定された場合に、データの読み出しを実行する。具体的には、第２データ読出部１３２は、リードアドレスに対応するデータ（リードデータ）のみを、メインメモリ２０から読み出し、読み出したリードデータをプロセッサ１０に出力する。
【００７９】
第３データ読出部１３３は、属性判定部１２０によって、リード要求に含まれるアドレスが示す領域の属性がキャッシャブル属性であると判定された場合に、データの読み出しを実行する。さらに、第３データ読出部１３３は、リード要求がヒットしたかミスしたかを判定する。
【００８０】
具体的には、リード要求がヒットした場合、第３データ読出部１３３は、キャッシュメモリ１５０から、リードアドレスに対応するデータ（リードデータ）を読み出し、読み出したリードデータをプロセッサ１０に出力する。リード要求がミスした場合、第３データ読出部１３３は、メインメモリ２０からリードデータを読み出し、読み出したリードデータをキャッシュメモリ１５０に格納する。そして、格納したリードデータをプロセッサ１０に転送する。なお、メインメモリ２０から読み出したリードデータのキャッシュメモリ１５０への格納と、プロセッサ１０への出力とは、並列して実行されてもよい。
【００８１】
バッファメモリ１４０は、第１データ読出部１３１によって、メインメモリ２０からバーストリードされたデータ（バーストリードデータ）を保持するメモリなどの記憶部である。バッファメモリ１４０は、バーストリードデータと、各データに対応するアドレスとを対応付けて記憶する。
【００８２】
キャッシュメモリ１５０は、第３データ読出部１３３によって、メインメモリ２０から読み出されたデータを保持するキャッシュメモリである。キャッシュメモリ１５０は、アドレスを記憶するタグ領域と、データを記憶するデータ領域とを含む。本実施の形態では、キャッシュメモリ１５０は、図１のＬ２キャッシュ４０に相当する。
【００８３】
テーブル保持部１６０は、メインメモリのアドレスと、領域の属性とを対応付けた領域属性テーブル１６１を保持するメモリなどの記憶部である。領域属性テーブル１６１は、属性設定部１７０によって生成及び変更される。
【００８４】
ここで、図４を参照する。図４は、本実施の形態の領域属性テーブル１６１の一例を示す図である。同図に示すように、領域属性テーブル１６１は、メインメモリ２０の物理アドレスと、当該物理アドレスが示す領域の属性とを対応付けたテーブルである。同図の“キャッシャブル”は、キャッシャブル属性を示し、“バースト可”は、バースト可属性を示し、“バースト不可”は、バースト不可属性を示す。例えば、図４の例では、リードアドレスが“物理アドレス３”である場合、属性取得部１１０は、領域属性テーブル１６１を参照することで、当該リードアドレスが示す領域の属性として、バースト不可属性を取得する。
【００８５】
図３に戻ると、属性設定部１７０は、メインメモリ２０のアドレスに対応する属性を、キャッシャブル属性、バースト可属性、及び、バースト不可属性のいずれか１つに設定する。これらの属性は、プロセッサ１０からの指示に基づいて、メインメモリ２０に記憶されているデータの特性などに応じて設定される。
【００８６】
例えば、属性設定部１７０は、アンキャッシャブル領域のうちリードセンシティブな領域をバースト不可属性に設定する。または、属性設定部１７０は、データの利用可能性に応じて各アドレスに属性を設定する。具体的には、属性設定部１７０は、連続的に読み出され、かつ、何度も利用される可能性が高いデータを記憶している領域を示すアドレスには、キャッシャブル属性を設定する。連続的に読み出されるが、一度しか利用されない可能性が高いデータを記憶している領域を示すアドレスには、バースト可属性を設定する。その他のデータを記憶している領域を示すアドレスには、バースト不可属性を設定する。また、データを記憶していない領域を示すアドレスには、任意に、又は、必要に応じて、それぞれの属性を設定する。
【００８７】
ここで、本実施の形態のバッファメモリ１４０とキャッシュメモリ１５０との構成について説明する。図５は、本実施の形態のバッファメモリ１４０とキャッシュメモリ１５０との詳細を示す図である。
【００８８】
同図に示すように、バッファメモリ１４０は、メインメモリ２０のアドレス（物理アドレス）と、当該アドレスが示す領域から第１データ読出部１３１によって読み出されたデータとを対応付けて記憶する。バッファメモリ１４０は、所定バイト数（例えば６４バイト）のデータを複数個（例えば、８個）保持することができる。なお、本実施の形態では、バッファメモリ１４０は、メインメモリ２０からのデータの読み出しにのみ利用される。すなわち、メインメモリ２０へのデータの書き込みには利用されない。バッファメモリ１４０は、読み出される可能性が高いデータを予め保持しておくＰＦＢ（Ｐｒｅｆｅｔｃｈ  Ｂｕｆｆｅｒ）である。
【００８９】
キャッシュメモリ１５０は、例えば、同図に示すような４ウェイ・セット・アソシエイティブ方式のキャッシュメモリである。キャッシュメモリ１５０は、同じ構成を有する４つのウェイを有し、各ウェイは、複数個（例えば、１０２４個）のキャッシュエントリを有する。１つのキャッシュエントリは、バリッドフラグＶと、タグと、ラインデータと、ダーティフラグＤとを有する。
【００９０】
バリッドフラグＶは、当該キャッシュエントリのデータが有効であるか否かを示すフラグである。タグは、タグアドレスのコピーである。ラインデータは、タグアドレス及びセットインデックスにより特定されるブロック中の所定バイト数のデータ（例えば、６４バイトのデータ）のコピーである。ダーティフラグＤは、キャッシュされたデータをメインメモリに書き戻す必要があるか否かを示すフラグである。
【００９１】
以上に示すように、本実施の形態のバッファメモリ１４０は、キャッシュメモリのタグとデータとの関係と同じように、アドレスとデータとを対応付けて記憶する。
【００９２】
なお、キャッシュメモリ１５０が有するウェイの数は４個に限らない。１つのウェイが有するキャッシュエントリの個数、及び、１つのキャッシュエントリが有するラインデータのバイト数もいかなる値でもよい。また、キャッシュメモリ１５０は、他の方式のキャッシュメモリでもよい。例えば、ダイレクト・マップ方式、又は、フル・アソシエイティブ方式でもよい。
【００９３】
以上の構成に示すように、本実施の形態のバッファメモリ装置１００は、キャッシャブル領域２１とアンキャッシャブル領域２２とからなるメインメモリ２０のアンキャッシャブル領域２２のうち、バーストリードすべきデータを保持するバースト不可領域２４からバーストリードされたデータを保持するバッファメモリ１４０を備える。
【００９４】
これにより、リード要求に応じて、当該リード要求に対応するデータと、その後に読み出される可能性の高いデータとをバーストリードするので、メモリアクセスを高速化することができる。
【００９５】
なお、図３に示すバッファメモリ装置１００は、ライト要求に対応するライトデータの書き込み処理を行う処理部をも備えるものとする。
【００９６】
例えば、属性取得部１１０は、リード要求と同様にライト要求に含まれるライトアドレスが示す領域の属性を取得する。属性判定部１２０は、属性取得部１１０で取得された属性が、キャッシャブル属性、バースト可属性、及び、バースト不可属性のいずれであるかを判定する。そして、データ書込部（図示せず）が、判定結果に基づいて、キャッシュメモリ１５０、又は、メインメモリ２０へライトデータを書き込む。
【００９７】
具体的には、属性がキャッシャブル属性である場合に、キャッシュメモリ１５０へライトデータを書き込む。また、属性がアンキャッシャブル属性である場合に、メインメモリ２０へライトデータを書き込む。このとき、キャッシュメモリ１５０への書き込みの際には、ライト要求がヒットするかミスするかを判定し、ヒットした場合にキャッシュメモリ１５０へライトデータを書き込み、ミスした場合にはメインメモリ２０へライトデータを書き込む。
【００９８】
以上のように、本実施の形態のバッファメモリ装置１００は、プロセッサ１０からのライト要求に応じて、ライトデータの書き込みも行うことができる。
【００９９】
なお、このとき、データ読出部１３０は、ライトアドレスがバッファメモリ１４０に保持されているデータに対応するアドレスと一致するか否かを判断し、ライトアドレスが一致する場合、バッファメモリ１４０に保持されているデータを無効化してもよい。例えば、対応するデータに無効であることを示すフラグを立てることで、又は、対応するデータをバッファメモリ１４０から消去することで、データを無効化する。
【０１００】
これにより、メインメモリ２０とバッファメモリ１４０との間でデータのコヒーレンシを確保することができる。すなわち、最新のデータがメインメモリ２０にのみ書き込まれていて、バッファメモリ１４０に書き込まれたデータが古くなった場合に、バッファメモリ１４０から古いデータを読み出すことを防ぐことができる。
【０１０１】
次に、本実施の形態のバッファメモリ装置１００の動作について図６〜図９を用いて説明する。図６は、本実施の形態のバッファメモリ装置１００の動作を示すフローチャートである。
【０１０２】
まず、バッファメモリ装置１００は、プロセッサ１０からリード要求を取得することで、本実施の形態のリード処理を実行する。
【０１０３】
属性取得部１１０は、領域属性テーブル１６１を参照することで、リードアドレスが示す領域の属性を取得する（Ｓ１０１）。そして、属性判定部１２０は、属性取得部１１０によって取得された属性が、キャッシャブル属性、バースト可属性、及び、バースト不可属性のいずれであるかを判定する（Ｓ１０２）。
【０１０４】
リードアドレスが示す領域の属性が、バースト可属性であると判定された場合（Ｓ１０２で“アンキャッシャブル（バースト可）”）、第１データ読出部１３１は、第１転送処理を実行する（Ｓ１０３）。第１転送処理は、属性がバースト可属性である場合に実行される処理であり、プロセッサ１０にデータを転送する際に、メインメモリ２０からデータをバーストリードし、バーストリードしたデータをバッファメモリ１４０に格納する処理である。
【０１０５】
ここで、図７を参照する。図７は、本実施の形態において、属性がバースト可属性である場合の転送処理の詳細を示すフローチャートである。
【０１０６】
第１データ読出部１３１は、リード要求がヒットしたかミスしたかを判断する（Ｓ２０１）。リード要求がミスした場合（Ｓ２０１でＮｏ）、第１データ読出部１３１は、メインメモリ２０から、リードデータを含むバーストリードデータをバーストリードする（Ｓ２０２）。そして、第１データ読出部１３１は、読み出したバーストリードデータをバッファメモリ１４０に格納する（Ｓ２０３）。さらに、第１データ読出部１３１は、バッファメモリ１４０からリードデータを読み出し（Ｓ２０４）、読み出したリードデータをプロセッサ１０に出力する（Ｓ２０５）。なお、このとき、バーストリードデータのバッファメモリ１４０への格納と、リードデータのプロセッサ１０への出力とは、同時に実行してもよい。
【０１０７】
リード要求がヒットした場合（Ｓ２０１でＹｅｓ）、第１データ読出部１３１は、バッファメモリ１４０から、リード要求に対応するリードデータを読み出す（Ｓ２０４）。そして、第１データ読出部１３１は、読み出したリードデータをプロセッサ１０に出力する（Ｓ２０５）。
【０１０８】
図６に戻ると、リードアドレスが示す領域の属性が、バースト不可属性であると判定された場合（Ｓ１０２で“アンキャッシャブル（バースト不可）”）、第２データ読出部１３２は、第２転送処理を実行する（Ｓ１０４）。第２転送処理は、属性がバースト不可属性である場合に実行される処理であり、メインメモリ２０からデータを読み出し、読み出したデータをプロセッサ１０に転送する処理である。
【０１０９】
ここで、図８を参照する。図８は、本実施の形態において、属性がバースト不可属性である場合の転送処理の詳細を示すフローチャートである。
【０１１０】
第２データ読出部１３２は、メインメモリ２０から、リードデータを読み出す（Ｓ３０１）。そして、第２データ読出部１３２は、読み出したリードデータをプロセッサ１０に出力する（Ｓ３０２）。
【０１１１】
再び図６に戻ると、リードアドレスが示す領域の属性が、キャッシャブル属性であると判定された場合（Ｓ１０２で“キャッシャブル”）、第３データ読出部１３３は、第３転送処理を実行する（Ｓ１０５）。第３転送処理は、属性がキャッシャブル属性である場合に実行される処理であり、プロセッサ１０にデータを転送する際に、メインメモリ２０からデータを読み出し、読み出したデータをキャッシュメモリ１５０に格納する処理である。
【０１１２】
ここで、図９を参照する。図９は、本実施の形態において、属性がキャッシャブル属性である場合の転送処理の詳細を示すフローチャートである。
【０１１３】
第３データ読出部１３３は、リード要求がヒットしたかミスしたかを判断する（Ｓ４０１）。リード要求がミスした場合（Ｓ４０１でＮｏ）、第３データ読出部１３３は、メインメモリ２０から、リードデータを読み出す（Ｓ４０２）。そして、第３データ読出部１３３は、読み出したリードデータをキャッシュメモリ１５０に格納する（Ｓ４０３）。さらに、第３データ読出部１３３は、キャッシュメモリ１５０からリードデータを読み出し（Ｓ４０４）、読み出したリードデータをプロセッサ１０に出力する（Ｓ４０５）。なお、このとき、リードデータのキャッシュメモリ１５０への格納と、プロセッサ１０への出力とは、同時に実行してもよい。
【０１１４】
リード要求がヒットした場合（Ｓ４０１でＹｅｓ）、第３データ読出部１３３は、キャッシュメモリ１５０から、リード要求に対応するリードデータを読み出す（Ｓ４０４）。そして、第３データ読出部１３３は、読み出したリードデータをプロセッサ１０に出力する（Ｓ４０５）。
【０１１５】
以上のようにして、本実施の形態のバッファメモリ装置１００は、リードアドレスが示す領域がいずれの属性の領域であるかを判定し、判定結果に応じてデータの読み出しを実行する。
【０１１６】
以上のように、本実施の形態のバッファメモリ装置１００は、キャッシャブル領域２１とアンキャッシャブル領域２２とからなるメインメモリ２０のアンキャッシャブル領域２２のうち、バーストリードすべきデータを保持するバースト不可領域２４からバーストリードされたデータを保持するバッファメモリ１４０を備える。そして、リードアドレスが示す領域がいずれの属性の領域であるかを判定し、判定結果に応じてデータの読み出しを実行する。このとき、属性がバースト可属性である場合には、メインメモリ２０からバーストリードしたデータをバッファメモリ１４０に格納する。
【０１１７】
これにより、リード専用のバッファメモリ１４０を使用することで、キャッシュメモリを使用することを防ぐことができるので、キャッシュメモリには使用頻度の高いと予想されるデータを保持させておくことができる。さらに、メインメモリ２０にバーストリードを不可にする領域を設定することで、必要以上のデータを読み出すことで生じる不具合を防ぐことができ、さらに、バーストリードを可能にする領域を設定することで、メモリアクセスを高速化することができる。
【０１１８】
（実施の形態２）
本実施の形態のバッファメモリ装置は、リード要求に含まれるアドレスが示す領域の属性がキャッシャブル属性である場合に、当該リード要求に対応するデータを含むデータをバーストリードする。これにより、さらに、メモリアクセスを高速化させることができる。
【０１１９】
図１０は、本実施の形態のバッファメモリ装置の構成を示すブロック図である。同図に示すバッファメモリ装置２００は、図３のバッファメモリ装置１００と比べて、データ読出部１３０の代わりにデータ読出部２３０を備える点が異なっている。なお、実施の形態１と同じ構成要素については、同じ符号を付し、以下では、異なる点を中心に説明し、同じ点の説明を省略する場合がある。
【０１２０】
データ読出部２３０は、属性判定部１２０の判定結果に応じて、メインメモリ２０、バッファメモリ１４０又はキャッシュメモリ１５０から、リード要求に対応するデータを読み出す。ここでは、データ読出部２３０は、第１データ読出部１３１と、第２データ読出部１３２と、第３データ読出部２３３とを備える。
【０１２１】
第３データ読出部２３３は、属性判定部１２０によって、リード要求に含まれるアドレスに対応する領域の属性がキャッシャブル属性であると判定された場合に、データの読み出しを実行する。さらに、第３データ読出部２３３は、リード要求がヒットしたかミスしたかを判定する。
【０１２２】
具体的には、リード要求がヒットした場合、第３データ読出部２３３は、キャッシュメモリ１５０又はバッファメモリ１４０から、リードアドレスに対応するデータを読み出し、読み出したデータをプロセッサ１０に出力する。リード要求がミスした場合、第３データ読出部２３３は、メインメモリ２０からリードデータを含むデータをバーストリードし、バーストリードされたデータ（バーストリードデータ）をキャッシュメモリ１５０とバッファメモリ１４０とに格納する。
【０１２３】
例えば、バーストリードデータのうちリードデータを含むデータをキャッシュメモリ１５０に格納し、キャッシュメモリ１５０に保持されたデータを除く、バーストリードデータの残りのデータをバッファメモリ１４０に格納する。そして、格納したバーストリードデータのうちリードデータをキャッシュメモリ１５０から読み出し、読み出したリードデータをプロセッサ１０に出力する。なお、バーストリードデータのキャッシュメモリ１５０及びバッファメモリ１４０への格納と、リードデータのプロセッサ１０への出力とは、並列して実行されてもよい。
【０１２４】
例えば、プロセッサ１０から６４バイトのリードデータのリード要求がされた場合、第３データ読出部２３３は、当該リードデータを含む１２８バイトのデータをバーストリードする。そして、第３データ読出部２３３は、１２８バイトのバーストリードデータのうち、６４バイトの当該リードデータをキャッシュメモリ１５０に格納するとともに、残りの６４バイトのデータをバッファメモリ１４０に格納する。
【０１２５】
以上の構成に示すように、本実施の形態のバッファメモリ装置２００は、リードアドレスが示す領域の属性がキャッシャブル属性であると判定された場合に、当該リードアドレスに対応するデータを含むデータをバーストリードし、バーストリードされたデータをキャッシュメモリ１５０とバッファメモリ１４０とに格納する。
【０１２６】
これにより、キャッシュ時にも、リード要求に応じて、当該リード要求に対応するデータと、その後に読み出される可能性の高いデータとをバーストリードするので、メモリアクセスをより高速化することができる。
【０１２７】
続いて、本実施の形態のバッファメモリ装置２００の動作について説明する。本実施の形態のバッファメモリ装置２００は、実施の形態１のバッファメモリ装置１００の動作と比較して、属性がキャッシャブル属性であると判定された場合の処理（図６のＳ１０５、図９）が異なる。したがって、以下では、異なる点を中心に説明し、同じ点は説明を省略する場合がある。
【０１２８】
まず、バッファメモリ装置２００は、実施の形態１と同様に、プロセッサ１０からリード要求を取得することで、本実施の形態のリード処理が実行される。
【０１２９】
図６に示すように、属性取得部１１０は、領域属性テーブル１６１を参照することで、リードアドレスが示す領域の属性を取得する（Ｓ１０１）。そして、属性判定部１２０は、属性取得部１１０によって取得された属性が、キャッシャブル属性、バースト可属性、及び、バースト不可属性のいずれであるかを判定する（Ｓ１０２）。
【０１３０】
属性判定部１２０によって、リードアドレスが示す領域の属性がバースト可属性であると判定された場合（Ｓ１０２で“アンキャッシャブル（バースト可）”）、第１転送処理を実行する（Ｓ１０３：詳細は図７）。リードアドレスが示す領域の属性がバースト不可属性であると判定された場合（Ｓ１０２で“アンキャッシャブル（バースト不可）”）、第２転送処理を実行する（Ｓ１０４：詳細は図８）。
【０１３１】
リードアドレスが示す領域の属性が、キャッシャブル属性であると判定された場合（Ｓ１０２で“キャッシャブル”）、第３データ読出部２３３は、第３転送処理を実行する（Ｓ１０５）。第３転送処理は、属性がキャッシャブル属性である場合に実行される処理であり、プロセッサ１０にデータを転送する際に、メインメモリ２０からデータを読み出し、読み出したデータをキャッシュメモリ１５０に格納する処理である。
【０１３２】
ここで、図１１を参照する。図１１は、本実施の形態において、属性がキャッシャブル属性である場合の転送処理の詳細を示すフローチャートである。
【０１３３】
第３データ読出部２３３は、リード要求がヒットしたかミスしたかを判断する（Ｓ５０１）。リード要求がミスした場合（Ｓ５０１でＮｏ）、第３データ読出部２３３は、メインメモリ２０から、リードデータ含むデータ（バーストリードデータ）をバーストリードする（Ｓ５０２）。そして、第３データ読出部２３３は、バーストリードデータをキャッシュメモリ１５０とバッファメモリ１４０とに格納する（Ｓ５０３）。さらに、第３データ読出部２３３は、キャッシュメモリ１５０からリードデータを読み出し（Ｓ５０４）、読み出したリードデータをプロセッサ１０に出力する（Ｓ５０５）。なお、このとき、バーストリードデータのキャッシュメモリ１５０への格納と、リードデータのプロセッサ１０への出力とは、同時に実行してもよい。
【０１３４】
リード要求がヒットした場合（Ｓ５０１でＹｅｓ）、第３データ読出部２３３は、キャッシュメモリ１５０又はバッファメモリ１４０から、リード要求に対応するリードデータを読み出す（Ｓ５０４）。そして、第３データ読出部２３３は、読み出したリードデータをプロセッサ１０に出力する（Ｓ５０５）。
【０１３５】
以上のように、本実施の形態のバッファメモリ装置２００は、リードアドレスが示す領域の属性がキャッシャブル属性であると判定された場合に、当該リードアドレスに対応するデータを含むデータをキャッシュメモリ１５０とバッファメモリ１４０とにバーストリードする。
【０１３６】
これにより、プロセッサ１０からキャッシャブル領域に対するリード要求が出力された場合にもバッファメモリ１４０を利用することができる。すなわち、リード要求に対応するデータより多くのデータをバーストリードし、バーストリードされたデータをバッファメモリ１４０に格納しておくことで、リード時のメモリアクセスを高速化することができる。
【０１３７】
（実施の形態３）
本実施の形態のメモリシステムは、メインメモリを管理するＭＭＵ（Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ）、又は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）がメインメモリの領域の属性を設定する。
【０１３８】
図１２は、本実施の形態のメモリシステムの構成を示すブロック図である。同図のメモリシステム３００は、プロセッサ３１０ａ及び３１０ｂと、メインメモリ３２０と、Ｌ２キャッシュ３３０とを備える。なお、本実施の形態のメモリシステム３００は、プロセッサ３１０ａとプロセッサ３１０ｂとを含むマルチプロセッサを備えるシステムである。
【０１３９】
プロセッサ３１０ａは、プロセッサ３１０ａは、Ｌ１キャッシュ３１１と、ＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）３１２とを備え、メインメモリ３２０にメモリアクセス要求（リード要求又はライト要求）を出力するＣＰＵなどである。さらに、プロセッサ３１０ａは、内蔵された又は外部に備えられたＭＭＵとＯＳとを用いて、メインメモリ３２０の管理を行う。
【０１４０】
具体的には、プロセッサ３１０ａは、メインメモリ３２０の物理アドレスと論理アドレスとを対応付けたアドレス変換テーブルの管理を行う。さらに、メインメモリ３２０の物理アドレスが示す領域の属性を設定し、設定した属性と物理アドレスとを対応付けて、アドレス変換テーブルを保持するＴＬＢ３１２に記憶させる。なお、プロセッサ３１０ａは、実施の形態１及び２の属性設定部１７０に相当する。
【０１４１】
プロセッサ３１０ｂは、プロセッサ３１０ａと同じ構成のプロセッサである。なお、プロセッサ３１０ａ及び３１０ｂは、物理的に異なる２つのプロセッサでもよく、１つのプロセッサをＯＳにより仮想的に分割された２つの仮想プロセッサでもよい。
【０１４２】
また、Ｌ１キャッシュ３１１とＴＬＢ３１２とは、プロセッサごとに備えられてもよい。または、Ｌ１キャッシュ３１１とＴＬＢ３１２とは、プロセッサ３１０ａとＬ２キャッシュ３３０との間に備えられてもよい。
【０１４３】
Ｌ１キャッシュ３１１は、プロセッサ３１０ａが発行するメモリアクセス要求を取得し、取得したメモリアクセス要求（リード要求又はライト要求）がヒットしたかミスしたかを判定する。Ｌ１キャッシュ３１１は、実施の形態１及び２のＬ１キャッシュ３０に相当する。
【０１４４】
リード要求がヒットした場合、Ｌ１キャッシュ３１１は、当該リード要求に含まれるリードアドレスに対応するデータをＬ１キャッシュ３１１内部から読み出し、読み出したデータをプロセッサ３１０ａに出力する。ライト要求がヒットした場合、Ｌ１キャッシュ３１１は、当該ライト要求と同時にプロセッサ３１０ａから出力されるデータをＬ１キャッシュ３１１内部に書き込む。
【０１４５】
リード要求がミスした場合、Ｌ１キャッシュ３１１は、Ｌ２キャッシュ３３０又はメインメモリ３２０から当該リード要求に対応するデータを読み出し、読み出したデータをプロセッサ３１０ａに出力する。ライト要求がミスした場合、Ｌ１キャッシュ３１１は、Ｌ２キャッシュ３３０又はメインメモリ３２０に、当該ライト要求と同時にプロセッサ３１０ａから出力されるデータを書き込む。
【０１４６】
ＴＬＢ３１２は、アドレス変換テーブル３１３を記憶するキャッシュメモリである。なお、ＴＬＢ３１２は、実施の形態１及び２のテーブル保持部１６０に相当する。
【０１４７】
アドレス変換テーブル３１３は、論理アドレスと物理アドレスと当該物理アドレスが示す領域の属性とを対応付けたテーブルである。なお、アドレス変換テーブル３１３は、実施の形態１及び２の領域属性テーブル１６１に相当する。
【０１４８】
ここで、図１３を参照する。図１３は、本実施の形態のアドレス変換テーブルの一例を示す図である。同図に示すように、アドレス変換テーブル３１３は、論理アドレスと、物理アドレスと、アクセス許可属性と、メモリ属性とを対応付けたテーブルである。
【０１４９】
論理アドレスは、プロセッサ３１０ａが仮想的に設定したアドレスであり、仮想アドレスともいう。物理アドレスは、メインメモリ３２０の実際の書き込み又は読み出し領域を示すアドレスであり、実アドレスともいう。アクセス許可属性は、ＯＳなどの管理部のみがアクセス可能な領域であることを示す“特権モード”と、一般的なプログラムなどでもアクセス可能な領域であることを示す“ユーザモード”との２つの属性のいずれであるかを示す。メモリ属性は、領域が、キャッシャブル領域、バースト可領域、及び、バースト不可領域のいずれであるかを示す。
【０１５０】
図１３の例では、例えば、“論理アドレスＣ”は、メインメモリ３２０内の“物理アドレス３”が示す領域を示し、当該領域は、“ユーザモード”であり、かつ、“バースト不可領域”であることを示している。よって、“論理アドレスＣ”が示す領域からは、データをバーストリードすることができない。
【０１５１】
図１２に戻ると、メインメモリ３２０は、プログラム又はデータなどを記憶するＳＤＲＡＭなどの記憶部である。プロセッサ３１０ａ及び３１０ｂなどから出力されるメモリアクセス要求（リード要求又はライト要求）に応じて、メインメモリ３２０からのデータの読み出し、又は、メインメモリ３２０へのデータの書き込みが実行される。メインメモリ３２０は、実施の形態１及び２のメインメモリ２０に相当する。
【０１５２】
Ｌ２キャッシュ３３０は、プロセッサ３１０ａ及び３１０ｂから出力されるメモリアクセス要求を取得し、取得したメモリアクセス要求がヒットしたかミスしたかを判定する。Ｌ２キャッシュ３３０は、実施の形態１及び２のＬ２キャッシュ４０（キャッシュメモリ１５０）に相当する。
【０１５３】
なお、以下では、簡単のため、Ｌ２キャッシュ３３０に入力されるメモリアクセス要求は、プロセッサ３１０ａが発行したと仮定する。ただし、メモリアクセス要求は、他のプロセッサ（プロセッサ３１０ｂなど）、又は、ＤＭＡＣ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ）などで発行されたものでもよい。
【０１５４】
リード要求がヒットした場合、Ｌ２キャッシュ３３０は、当該リード要求に含まれるリードアドレスに対応するデータをＬ２キャッシュ３３０内部から読み出し、読み出したデータをプロセッサ３１０ａなどに出力する。ライト要求がヒットした場合、Ｌ２キャッシュ３３０は、当該ライト要求と同時にプロセッサ３１０ａから出力されるデータをＬ２キャッシュ３３０内部に書き込む。
【０１５５】
リード要求がミスした場合、Ｌ１キャッシュ３１１は、Ｌ２キャッシュ３３０又はメインメモリ３２０から当該リード要求に対応するデータを読み出し、読み出したデータをプロセッサ３１０ａに出力する。ライト要求がミスした場合、Ｌ１キャッシュ３１１は、Ｌ２キャッシュ３３０又はメインメモリ３２０に、当該ライト要求と同時にプロセッサ３１０ａから出力されるデータを書き込む。
【０１５６】
Ｌ２キャッシュ３３０は、キュー３３１ａ及び３３１ｂと、属性判定部３３２ａ及び３３２ｂと、セレクタ３３３ａ及び３３３ｂと、ＰＦＢ３３４と、キャッシュメモリ３３５と、メモリインタフェース３３６とを備える。
【０１５７】
キュー３３１ａは、プロセッサ３１０ａから出力されるメモリアクセス要求を一時的に保持する先入れ先出し方式のメモリ（ＦＩＦＯメモリ：Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）である。なお、保持されるメモリアクセス要求には、アドレスと共に、当該アドレスが示す領域の属性も含まれている。
【０１５８】
キュー３３１ｂは、キュー３３１ａと同じ構成であり、プロセッサ３１０ｂから出力されるメモリアクセス要求を一時的に保持するＦＩＦＯメモリである。
【０１５９】
なお、キュー３３１ａ及び３３１ｂは、実施の形態１及び２の属性取得部１１０に相当する。
【０１６０】
属性判定部３３２ａは、キュー３３１ａに保持されたメモリアクセス要求を読み出し、読み出したメモリアクセス要求に含まれる属性が、キャッシャブル属性、バースト可属性、及び、バースト不可属性のいずれであるかを判定する。そして、判定結果に従って、属性判定部３３２ａは、セレクタ３３３ａ又は３３３ｂとメモリインタフェース３３６とを介して、ＰＦＢ３３４とキャッシュメモリ３３５とに、又は、メモリインタフェース３３６にメモリアクセス要求を出力する。
【０１６１】
具体的には、属性がキャッシャブル属性又はバースト可属性であると判定された場合、属性判定部３３２ａは、セレクタ３３３ａとメモリインタフェース３３６とを介して、ＰＦＢ３３４とキャッシュメモリ３３５とにメモリアクセス要求を出力する。属性がバースト不可属性であると判定された場合、属性判定部３３２ａは、セレクタ３３３ｂとメモリインタフェース３３６とを介して、メインメモリ３２０にメモリアクセス要求を出力する。
【０１６２】
属性判定部３３２ｂは、属性判定部３３２ａと同じ構成であり、キュー３３１ｂに保持されたメモリアクセス要求を読み出し、読み出したメモリアクセス要求に含まれる属性を判定する。
【０１６３】
なお、属性判定部３３２ａ及び３３２ｂは、実施の形態１及び２の属性判定部１２０に相当する。
【０１６４】
セレクタ３３３ａ及び３３３ｂは、２つのキュー３３１ａ及び３３１ｂから、属性判定部３３２ａ又は３３２ｂを介して入力される複数のメモリアクセス要求のどれを調停し、調停したメモリアクセス要求を、メモリインタフェース３３６を介して、ＰＦＢ３３４、キャッシュメモリ３３５及びメインメモリ３２０のいずれに出力するかを選択する。
【０１６５】
ＰＦＢ３３４は、メインメモリ３２０のアドレスと、当該アドレスが示す領域から読み出されたデータとを対応付けて記憶するバッファメモリである。ＰＦＢ３３４は、プロセッサ３１０ａなどから出力されるリード要求に応じて、プロセッサ３１０ａなどが読み出す可能性が高いデータを予め保持するプリフェッチ処理に利用される。なお、ＰＦＢ３３４は、実施の形態１及び２のバッファメモリ１４０に相当する。
【０１６６】
キャッシュメモリ３３５は、メインメモリ３２０から読み出されたデータを保持するキャッシュメモリである。キャッシュメモリ３３５は、実施の形態１及び２のキャッシュメモリ１５０に相当する。
【０１６７】
メモリインタフェース３３６は、リード要求がヒットするかミスするかを判定し、判定結果に応じてメインメモリ３２０、ＰＦＢ３３４、又は、キャッシュメモリ３３５からのデータの読み出しを実行する。メモリインタフェース３３６は、実施の形態１及び２のデータ読出部１３０（２３０）に相当する。
【０１６８】
例えば、メモリインタフェース３３６は、リード要求に含まれるリードアドレスが示す領域の属性がバースト不可属性である場合、メインメモリ３２０からデータを読み出し、読み出したデータをプロセッサ３１０ａに出力する。
【０１６９】
また、メモリインタフェース３３６は、リード要求に含まれるリードアドレスが示す領域の属性がバースト可属性である場合、当該リード要求がヒットするかミスするかを判定する。リード要求がヒットした場合は、対応するリードデータをＰＦＢ３３４から読み出し、プロセッサ３１０ａに出力する。リード要求がミスした場合は、対応するリードデータを含むデータをメインメモリ３２０からバーストリードし、バーストリードしたデータをＰＦＢ３３４に書き込む。そして、ＰＦＢ３３４からリードデータを読み出し、プロセッサ３１０ａに出力する。
【０１７０】
さらに、メモリインタフェース３３６は、リード要求に含まれるリードアドレスが示す領域の属性がキャッシャブル属性である場合、当該リード要求がヒットするかミスするかを判定する。リード要求がヒットした場合は、対応するリードデータをキャッシュメモリ３３５から読み出し、プロセッサ３１０ａに出力する。リード要求がミスした場合は、対応するリードデータを含むデータをメインメモリ３２０から読み出し、読み出したデータをキャッシュメモリ３３５に書き込む。そして、キャッシュメモリ３３５からデータを読み出し、プロセッサ３１０ａに出力する。なお、このとき、実施の形態２と同様に、メインメモリ３２０からデータをバーストリードし、キャッシュメモリ３３５とＰＦＢ３３４とに格納してもよい。
【０１７１】
続いて、本実施の形態のメモリシステム３００の動作について説明する。本実施のメモリシステム３００の動作は、実施の形態１又は２と同様であるため、ここでは、図６〜図９のフローチャートに基づいて簡単に説明する。
【０１７２】
まず、プロセッサ３１０ａなどから出されたリード要求が、キュー３３１ａなどに格納される。このとき、リード要求には、アドレス変換テーブル３１３を参照することで得られる属性が含まれている（Ｓ１０１）。
【０１７３】
属性判定部３３２ａは、リード要求に含まれる属性が、キャッシャブル属性、バースト可属性、及び、バースト不可属性のいずれであるかを判定する（Ｓ１０２）。判定結果は、セレクタ３３３ａなどを介して、メモリインタフェース３３６に出力される。
【０１７４】
リード要求に含まれる属性が、バースト可属性であると判定された場合（Ｓ１０２で“アンキャッシャブル（バースト可）”）、メモリインタフェース３３６は、第１転送処理を実行する（Ｓ１０３）。
【０１７５】
図７に示すように、メモリインタフェース３３６は、リード要求がヒットしたかミスしたかを判断する（Ｓ２０１）。リード要求がミスした場合（Ｓ２０１でＮｏ）、メモリインタフェース３３６は、メインメモリ３２０から、リードデータを含むバーストリードデータをバーストリードする（Ｓ２０２）。そして、メモリインタフェース３３６は、読み出したバーストリードデータをＰＦＢ３３４に格納する（Ｓ２０３）。さらに、メモリインタフェース３３６は、ＰＦＢ３３４からリードデータを読み出し（Ｓ２０４）、読み出したリードデータをプロセッサ３１０ａに出力する（Ｓ２０５）。
【０１７６】
リード要求がヒットした場合（Ｓ２０１でＹｅｓ）、メモリインタフェース３３６は、ＰＦＢ３３４からリードデータを読み出し（Ｓ２０４）、読み出したリードデータをプロセッサ３１０ａに出力する（Ｓ２０５）。
【０１７７】
図６に戻ると、リード要求に含まれる属性が、バースト不可属性であると判定された場合（Ｓ１０２で“アンキャッシャブル（バースト不可）”）、メモリインタフェース３３６は、第２転送処理を実行する（Ｓ１０４）。
【０１７８】
図８に示すように、メモリインタフェース３３６は、メインメモリ３２０からリードデータを読み出す（Ｓ３０１）。そして、メモリインタフェース３３６は、読み出したリードデータをプロセッサ３１０ａに出力する（Ｓ３０２）。
【０１７９】
再び図６に戻ると、リード要求に含まれる属性が、キャッシャブル属性であると判定された場合（Ｓ１０２で“キャッシャブル”）、メモリインタフェース３３６は、第３転送処理を実行する（Ｓ１０５）。
【０１８０】
図９に示すように、メモリインタフェース３３６は、リード要求がヒットしたかミスしたかを判断する（Ｓ４０１）。リード要求がミスした場合（Ｓ４０１でＮｏ）、メモリインタフェース３３６は、メインメモリ３２０から、リードデータを読み出す（Ｓ４０２）。そして、メモリインタフェース３３６は、読み出したリードデータをキャッシュメモリ３３５に格納する（Ｓ４０３）。さらに、メモリインタフェース３３６は、キャッシュメモリ３３５からリードデータを読み出し（Ｓ４０４）、読み出したリードデータをプロセッサ３１０ａに出力する（Ｓ４０５）。
【０１８１】
リード要求がヒットした場合（Ｓ４０１でＹｅｓ）、メモリインタフェース３３６は、キャッシュメモリ３３５からリードデータを読み出し（Ｓ４０４）、読み出したリードデータをプロセッサ３１０ａに出力する（Ｓ４０５）。
【０１８２】
なお、リード要求に含まれる属性が、キャッシャブル属性であると判定された場合（Ｓ１０２で“キャッシャブル”）、かつ、リード要求がミスした場合（Ｓ４０１でＮｏ）、メモリインタフェース３３６は、メインメモリ３２０からリードデータを含むデータをバーストリードしてもよい（図１１に示すフローチャート）。このとき、読み出したバーストリードデータは、キャッシュメモリ３３５とＰＦＢ３３４とに格納される。
【０１８３】
以上のように、本実施の形態のメモリシステム３００では、プロセッサ内のＭＭＵなどによって属性を設定し、設定した属性をＴＬＢに保持されるアドレス変換テーブルに記憶させる。これにより、従来から備えられているアドレス変換テーブルを利用することができ、新たに属性記憶用のバッファなどを必要とせず、構成を簡素化することができる。
【０１８４】
（実施の形態４）
本実施の形態のバッファメモリ装置は、プロセッサから出力されたメインメモリへ書き込むためのデータを一時的に保持し、所定の条件が満たされた場合に、保持したデータをバーストライトする。これにより、データバスを有効に利用することができ、効率よくデータを転送することができる。
【０１８５】
図１４は、本実施の形態のバッファメモリ装置の構成を示すブロック図である。同図のバッファメモリ装置４００は、複数のプロセッサ１０ａ、１０ｂ及び１０ｃのそれぞれが発行するメモリアクセス要求に従って、複数のプロセッサ１０ａ、１０ｂ及び１０ｃとメインメモリ２０との間でデータを転送する。以下では、複数のプロセッサ１０ａ、１０ｂ及び１０ｃを特に区別して説明する必要がない場合は、プロセッサ１０と記載する。
【０１８６】
なお、バッファメモリ装置４００は、図１に示すＬ２キャッシュ４０と同一のチップに備えられるとする。また、図１で示したＬ１キャッシュ３０は、複数のプロセッサ１０ａ、１０ｂ及び１０ｃのそれぞれに備えられるものとし、図１４には図示していない。ただし、Ｌ１キャッシュ３０は、複数のプロセッサ１０ａ、１０ｂ及び１０ｃとバッファメモリ装置４００との間に備えられ、複数のプロセッサ１０ａ、１０ｂ及び１０ｃで共有されてもよい。
【０１８７】
図１４に示すように、バッファメモリ装置４００は、メモリアクセス情報取得部４１０と、判定部４２０と、制御部４３０と、データ転送部４４０と、ＳＴＢ（Ｓｔｏｒｅ  Ｂｕｆｆｅｒ）４５０ａ、４５０ｂ及び４５０ｃと、キャッシュメモリ４６０と、ＰＦＢ４７０とを備える。なお、以下では、ＳＴＢ４５０ａ、４５０ｂ及び４５０ｃを特に区別して説明する必要がない場合は、ＳＴＢ４５０と記載する。
【０１８８】
メモリアクセス情報取得部４１０は、プロセッサ１０からメモリアクセス要求を取得し、取得したメモリアクセス要求から、プロセッサ１０で発行されたメモリアクセス要求の性質を示すメモリアクセス情報を取得する。メモリアクセス情報は、メモリアクセス要求に含まれている情報及びそれに付随する情報であり、コマンド情報と、アドレス情報と、属性情報と、プロセッサ情報となどを含む。
【０１８９】
コマンド情報は、メモリアクセス要求がライト要求であるかリード要求であるかと、データ転送に関わる他のコマンドなどとを示す情報である。アドレス情報は、データを書き込む領域を示すライトアドレス、又は、データを読み出す領域を示すリードアドレスを示す情報である。属性情報は、ライトアドレス又はリードアドレスが示す領域の属性が、キャッシャブル属性、バースト可属性及びバースト不可属性のいずれであるかを示す情報である。プロセッサ情報は、メモリアクセス要求を発行したスレッド、論理プロセッサ（ＬＰ：Ｌｏｇｉｃａｌ  Ｐｒｏｃｅｓｓｏｒ）及び物理プロセッサ（ＰＰ：Ｐｈｙｓｉｃａｌ  Ｐｒｏｃｅｓｓｏｒ）を示す情報である。
【０１９０】
なお、属性情報は、メモリアクセス要求に含まれていなくてもよい。この場合、メモリアクセス情報取得部４１０は、メインメモリ２０のアドレスと当該アドレスが示す領域の属性とを対応付けたテーブルを保持し、アドレス情報と当該テーブルとを参照することで、属性情報を取得してもよい。
【０１９１】
ここで、図１５を参照する。図１５は、本実施の形態のメモリアクセス情報の一例を示す図である。同図には、メモリアクセス情報５０１及び５０２が示されている。
【０１９２】
メモリアクセス情報５０１は、メモリアクセス要求が、物理プロセッサ“ＰＰ１”の論理プロセッサ“ＬＰ１”で発行されたライト要求であり、“ライトアドレス１”が示すバースト可属性に属する領域にデータを書き込むことを示すライトコマンドを含んでいることを示している。また、当該ライト要求には、“Ａｌｌ  Ｓｙｎｃ”コマンドが含まれていることを示している。
【０１９３】
メモリアクセス情報５０２は、メモリアクセス要求が、物理プロセッサ“ＰＰ１”の論理プロセッサ“ＬＰ１”で発行されたリード要求であり、“リードアドレス１”が示すバースト可属性に属する領域からデータを読み出すことを示すリードコマンドを含んでいることを示している。また、当該リード要求には、“Ｓｅｌｆ  Ｓｙｎｃ”コマンドが含まれていることを示している。
【０１９４】
なお、“Ａｌｌ  Ｓｙｎｃ”及び“Ｓｅｌｆ  Ｓｙｎｃ”コマンドについては後述する。
【０１９５】
図１４に戻ると、判定部４２０は、メモリアクセス情報取得部４１０で取得されたメモリアクセス情報が示す性質が、予め定められた条件を満たすか否かを判定する。具体的には、判定部４２０は、メモリアクセス情報として取得したコマンド情報、属性情報、アドレス情報及びプロセッサ情報などと、制御部４３０を介してＳＴＢ４５０から取得したバッファ量情報とを用いて、条件の判定を行う。条件と、判定部４２０の処理との詳細は、後述する。なお、バッファ量情報は、ＳＴＢ４５０のそれぞれに保持されたデータの量を示す情報である。
【０１９６】
制御部４３０は、メモリアクセス情報が示す性質が条件を満たすと判定部４２０によって判定された場合、複数のＳＴＢ４５０ａ、４５０ｂ及び４５０ｃのうち、当該条件に対応するＳＴＢに保持されているデータをメインメモリに掃き出す。具体的には、制御部４３０は、ＳＴＢ４５０に掃き出し命令を出力する。掃き出し命令は、データを掃き出す対象となるＳＴＢに出力され、掃き出し命令を受け取ったＳＴＢは、保持しているデータをメインメモリ２０に出力する。
【０１９７】
また、制御部４３０は、制御情報をデータ転送部４４０に出力することで、データ転送部４４０を制御する。例えば、制御情報は少なくとも属性情報を含み、制御部４３０は、アドレスが示す領域の属性に応じて、ライトデータの書き込み先、及び、リードデータの読み出し先などを決定する。
【０１９８】
さらに、制御部４３０は、複数のＳＴＢ４５０ａ、４５０ｂ及び４５０ｃのそれぞれに保持されているデータの量であるバッファ量を判定部４２０に出力する。
【０１９９】
データ転送部４４０は、制御部４３０の制御によって、プロセッサ１０とメインメモリ２０との間でデータを転送する。具体的には、プロセッサ１０からライト要求が出力された場合、メインメモリ２０に書き込むためにプロセッサ１０から出力されるライトデータを、ＳＴＢ４５０、キャッシュメモリ４６０及びメインメモリ２０のいずれかに書き込む。また、プロセッサ１０からリード要求が出力された場合、キャッシュメモリ４６０、ＰＦＢ４７０及びメインメモリ２０のいずれかからリードデータを読み出し、読み出したリードデータをプロセッサ１０に出力する。どのメモリを利用するかは、アドレスが示す領域の属性に応じて、制御部４３０によって決定される。
【０２００】
図１４に示すように、データ転送部４４０は、第１データ転送部４４１と、第２データ転送部４４２と、第３データ転送部４４３とを備える。
【０２０１】
第１データ転送部４４１は、アドレスが示す領域がバースト可属性に属する場合に、データの転送を行う。ライト要求が入力された場合は、第１データ転送部４４１は、当該ライト要求に対応するライトデータをＳＴＢ４５０に書き込む。複数のＳＴＢ４５０ａ、４５０ｂ及び４５０ｃのいずれに書き込むかは、制御情報に含まれるプロセッサ情報によって決定される。具体的には、ライト要求を発行したプロセッサに対応するＳＴＢにライトデータを書き込む。
【０２０２】
リード要求が入力された場合は、第１データ転送部４４１は、当該リード要求に対応するリードデータがＰＦＢ４７０に保持されているか否かを判定する。すなわち、当該リード要求がヒットしたかミスしたかを判定する。当該リード要求がヒットした場合、第１データ転送部４４１は、対応するリードデータをＰＦＢ４７０から読み出し、読み出したリードデータをプロセッサ１０に出力する。当該リード要求がミスした場合、第１データ転送部４４１は、当該リード要求に対応するリードデータを含むデータをメインメモリ２０からバーストリードし、バーストリードしたデータをＰＦＢ４７０に書き込む。そして、リード要求に対応するリードデータをＰＦＢ４７０から読み出し、読み出したリードデータをプロセッサ１０に出力する。なお、メインメモリ２０から読み出したバーストリードデータをＰＦＢ４７０に書き込むのと同時に、リード要求に対応するリードデータをプロセッサ１０に出力してもよい。
【０２０３】
第２データ転送部４４２は、アドレスが示す領域がバースト不可属性に属する場合に、データの転送を行う。ライト要求が入力された場合は、第２データ転送部４４２は、当該ライト要求に対応するライトデータをメインメモリ２０に書き込む。リード要求が入力された場合は、第２データ転送部４４２は、当該リード要求に対応するリードデータをメインメモリ２０から読み出し、読み出したリードデータをプロセッサ１０に出力する。
【０２０４】
第３データ転送部４４３は、アドレスが示す領域がキャッシャブル属性に属する場合に、データの転送を行う。
【０２０５】
ライト要求が入力された場合、第３データ転送部４４３がライトバック処理とライトスルー処理のいずれを行うかによって、ライトデータの書き込み先が異なる。
【０２０６】
ライトバック処理を行う場合、第３データ転送部４４３は、当該ライト要求がヒットするかミスするかを判定する。当該ライト要求がヒットした場合、キャッシュメモリ４６０にライトデータを書き込む。当該ライト要求がミスした場合、第３データ転送部４４３は、キャッシュメモリ４６０に対してリフィル処理を行い、ライト要求に含まれるアドレス（タグアドレス）とライトデータとをキャッシュメモリ４６０に書き込む。いずれの場合も、キャッシュメモリ４６０に書き込まれたライトデータは、任意のタイミングでメインメモリ２０に書き込まれる。なお、ライト要求がミスした場合は、キャッシュメモリ４６０にライトデータを書き込むことなく、直接メインメモリ２０にライトデータを書き込んでもよい。
【０２０７】
ライトスルー処理を行う場合、第３データ転送部４４３は、当該ライト要求がヒットするかミスするかを判定する。当該ライト要求がヒットした場合、第３データ転送部４４３は、ＳＴＢ４５０にライトアドレスとライトデータとを書き込む。ＳＴＢ４５０に書き込まれたライトデータは、後続のメモリアクセス要求の性質が、条件が満たすと判定部４２０によって判定された場合に、制御部４３０の制御に従って、ＳＴＢ４５０からキャッシュメモリ４６０とメインメモリ２０とにバーストライトされる。
【０２０８】
当該ライト要求がミスした場合も同様に、第３データ転送部４４３は、ＳＴＢ４５０にライトアドレスとライトデータとを書き込む。ＳＴＢ４５０に書き込まれたライトデータとライトアドレスとが、後続のメモリアクセス要求の性質が、条件が満たすと判定部４２０によって判定された場合に、ＳＴＢ４５０からキャッシュメモリ４６０とメインメモリ２０とにバーストライトされる。
【０２０９】
リード要求が入力された場合、第３データ転送部４４３は、当該リード要求がヒットするかミスするかを判定する。当該リード要求がヒットした場合、第３データ転送部４４３は、キャッシュメモリ４６０からリードデータを読み出し、読み出したリードデータをプロセッサ１０に出力する。
【０２１０】
当該リード要求がミスした場合は、第３データ転送部４４３は、メインメモリ２０からリードデータを読み出し、読み出したリードデータとリードアドレスとをキャッシュメモリ４６０に書き込む。そして、第３データ転送部４４３は、キャッシュメモリ４６０からリードデータを読み出し、読み出したリードデータをプロセッサ１０に出力する。なお、メインメモリ２０から読み出したリードデータをキャッシュメモリ４６０に書き込むのと同時に、プロセッサ１０に出力してもよい。
【０２１１】
ＳＴＢ４５０ａ、４５０ｂ及び４５０ｃのそれぞれは、複数のプロセッサ１０ａ、１０ｂ及び１０ｃに対応し、対応するプロセッサによって発行されたライト要求に対応するライトデータを保持するストアバッファ（ＳＴＢ）である。ＳＴＢ４５０は、複数のプロセッサ１０から出力されるライトデータをマージするために、一時的にライトデータを保持するバッファメモリである。
【０２１２】
本実施の形態では、ＳＴＢ４５０は、物理プロセッサごとに備えられる。また、一例として、ＳＴＢ４５０は、最大で１２８バイトのデータを保持することができる。ＳＴＢ４５０に保持されているデータは、制御部４３０からの制御に基づいて、メインメモリ２０にバーストライトされる。また、ライト要求がキャッシャブル属性に属する領域へのアクセスであり、かつ、ライトスルー処理を行う場合、ＳＴＢ４５０に保持されているデータは、メインメモリ２０とキャッシュメモリ４６０とにバーストライトされる。
【０２１３】
ここで、図１６を参照する。図１６は、本実施の形態のバッファメモリ装置４００が備えるＳＴＢ４５０の概略を示す図である。
【０２１４】
同図に示すように、ＳＴＢ４５０ａ、４５０ｂ及び４５０ｃはそれぞれ、物理プロセッサ（プロセッサ１０ａ（ＰＰ０）、１０ｂ（ＰＰ１）及び１０ｃ（ＰＰ２））に対応して備えられる。すなわち、ＳＴＢ４５０ａは、プロセッサ１０ａから出力されたライトアドレスなどのバッファ制御情報とライトデータとを保持する。ＳＴＢ４５０ｂは、プロセッサ１０ｂから出力されたライトアドレスなどのバッファ制御情報とライト情報とを保持する。ＳＴＢ４５０ｃは、プロセッサ１０ｃから出力されたライトアドレスなどのバッファ制御情報とライトデータとを保持する。
【０２１５】
バッファ制御情報は、ライト要求に含まれる情報であり、ＳＴＢ４５０に書き込まれるデータを管理するための情報である。すなわち、バッファ制御情報は、少なくともライトアドレスを含み、対応するライトデータを出力した物理プロセッサ及び論理プロセッサなどを示す情報を含んでいる。
【０２１６】
図１６に示す例では、物理プロセッサごとに備えられたＳＴＢは、６４バイトのデータを保持することができる領域を２つ備えている。例えば、この２つの領域をスレッドごとに対応付けてもよい。
【０２１７】
キャッシュメモリ４６０は、例えば、実施の形態１のキャッシュメモリ１５０と同様に、４ウェイ・セット・アソシエイティブ方式のキャッシュメモリである。
【０２１８】
ＰＦＢ４７０は、実施の形態１のバッファメモリ１４０に相当し、メインメモリ２０のアドレスと、当該アドレスが示す領域から第１データ転送部４４１によって読み出されたデータとを対応付けて記憶するバッファメモリである。
【０２１９】
ここで、判定部４２０が判定処理に用いる条件について説明する。
【０２２０】
図１７は、本実施の形態の複数の判定条件の一例を示す判定テーブルを示す図である。同図には、一例として、属性判定条件（“Ｕｎｃａｃｈｅ”）と、コマンド判定条件（“Ａｌｌ  Ｓｙｎｃ”と“Ｓｅｌｆ  Ｓｙｎｃ”）と、アドレス判定条件（“ＲＡＷ  Ｈａｚａｒｄ”と“Ａｎｏｔｈｅｒ  Ｌｉｎｅ  Ａｃｃｅｓｓ”）と、バッファ量判定条件（“Ｓｌｏｔ  Ｆｕｌｌ”）と、プロセッサ判定条件（“同ＬＰ、異ＰＰ”）とが示されている。
【０２２１】
属性判定条件は、属性情報を用いて、メモリアクセス要求に含まれるアドレスが示す領域の属性に従って、ＳＴＢ４５０からのデータの掃き出し、及び、掃き出し対象となるＳＴＢを決定するための条件である。図１７に示す“Ｕｎｃａｃｈｅ”条件は、属性判定条件の一例である。
【０２２２】
“Ｕｎｃａｃｈｅ”条件では、メモリアクセス要求に含まれるアドレスが示す領域の属性が、バースト不可属性であるか否かが、判定部４２０によって判定される。バースト不可属性であると判定された場合、制御部４３０は、当該メモリアクセス要求を発行した論理プロセッサと同じ論理プロセッサで発行されたメモリアクセス要求に対応するデータを保持しているＳＴＢから、保持しているデータをメインメモリ２０に掃き出す。なお、制御部４３０は、掃き出し対象のＳＴＢを判定する基準として、論理プロセッサではなく、スレッドに対応する仮想プロセッサを用いてもよい。
【０２２３】
コマンド判定条件は、コマンド情報を用いて、メモリアクセス要求に含まれるコマンドに従って、ＳＴＢ４５０からのデータの掃き出し、及び、掃き出し対象となるＳＴＢを決定するための条件である。図１７に示す“Ａｌｌ  Ｓｙｎｃ”条件と“Ｓｅｌｆ  Ｓｙｎｃ”条件とは、コマンド判定条件の一例である。
【０２２４】
“Ａｌｌ  Ｓｙｎｃ”条件では、メモリアクセス要求に“Ａｌｌ  Ｓｙｎｃ”コマンドが含まれるか否かが、判定部４２０によって判定される。“Ａｌｌ  Ｓｙｎｃ”コマンドは、全てのＳＴＢ４５０に保持される全てのデータをメインメモリ２０に掃き出すためのコマンドである。“Ａｌｌ  Ｓｙｎｃ”コマンドが含まれる場合（例えば、図１５のメモリアクセス情報５０１）、制御部４３０は、全てのＳＴＢ４５０に保持された全てのデータをメインメモリ２０に掃き出す。
【０２２５】
“Ｓｅｌｆ  Ｓｙｎｃ”条件では、メモリアクセス要求に“Ｓｅｌｆ  Ｓｙｎｃ”コマンドが含まれるか否かが、判定部４２０によって判定される。“Ｓｅｌｆ  Ｓｙｎｃ”コマンドは、当該コマンドを発行したプロセッサが出力したデータのみをＳＴＢ４５０からメインメモリ２０に掃き出すためのコマンドである。“Ｓｅｌｆ  Ｓｙｎｃ”コマンドが含まれる場合（例えば、図１５のメモリアクセス情報５０２）、制御部４３０は、当該メモリアクセス要求を発行した論理プロセッサと同じ論理プロセッサで発行されたメモリアクセス要求に対応するデータを保持しているＳＴＢから、保持しているデータをメインメモリ２０に掃き出す。なお、制御部４３０は、掃き出し対象のＳＴＢを判定する基準として、論理プロセッサではなく、スレッドに対応する仮想プロセッサを用いてもよい。
【０２２６】
アドレス判定条件は、アドレス情報を用いて、メモリアクセス要求に含まれるアドレスに従って、ＳＴＢ４５０からのデータの掃き出し、及び、掃き出し対象となるＳＴＢを決定するための条件である。図１７に示す“ＲＡＷ  Ｈａｚａｒｄ”条件と“Ａｎｏｔｈｅｒ  Ｌｉｎｅ  Ａｃｃｅｓｓ”条件とは、アドレス判定条件の一例である。
【０２２７】
“ＲＡＷ  Ｈａｚａｒｄ”条件では、リード要求に含まれるリードアドレスに一致するライトアドレスが、複数のＳＴＢ４５０の少なくとも１つに保持されているか否かが、判定部４２０によって判定される。リードアドレスに一致するライトアドレスがＳＴＢ４５０のいずれかに保持されている場合に、制御部４３０は、Ｈａｚａｒｄラインまでのデータを全て、すなわち、当該ライトアドレスに対応するライトデータ以前にＳＴＢ４５０に保持されたデータをメインメモリ２０に掃き出す。
【０２２８】
“Ａｎｏｔｈｅｒ  Ｌｉｎｅ  Ａｃｃｅｓｓ”条件では、ライト要求に含まれるライトアドレスが、直前に入力されたライト要求に含まれていたライトアドレスと関連するか否かが、判定部４２０によって判定される。具体的には、当該２つのライトアドレスが連続するアドレスであるか否かが判定される。なお、このとき、２つのライト要求は共に、同じ物理プロセッサで発行されたものとする。２つのライトアドレスが連続するアドレスでないと判定された場合、制御部４３０は、直前に入力されたライト要求に対応するライトデータ以前にＳＴＢ４５０に保持されたデータをメインメモリ２０に掃き出す。
【０２２９】
バッファ量判定条件は、バッファ量情報を用いて、ＳＴＢ４５０に保持されたデータ量に従って、ＳＴＢ４５０からのデータの掃き出し、及び、掃き出し対象となるＳＴＢを決定するための条件である。図１７に示す“Ｓｌｏｔ  Ｆｕｌｌ”条件は、バッファ量判定条件の一例である。
【０２３０】
“Ｓｌｏｔ  Ｆｕｌｌ”条件では、ＳＴＢ４５０に保持されたデータ量であるバッファ量がフルであるか（１２８バイト）否かが、判定部４２０によって判定される。バッファ量が１２８バイトであると判定された場合、制御部４３０は、当該ＳＴＢのデータをメインメモリ２０に掃き出す。
【０２３１】
プロセッサ判定条件は、プロセッサ情報を用いて、どの論理プロセッサと物理プロセッサとがメモリアクセス要求を発行したかに従って、ＳＴＢ４５０からのデータの掃き出し、及び、掃き出し対象となるＳＴＢを決定するための条件である。図１７に示す“同ＬＰ、異ＰＰ”条件は、プロセッサ判定条件の一例である。
【０２３２】
“同ＬＰ、異ＰＰ”条件では、メモリアクセス要求を発行した論理プロセッサが、ＳＴＢ４５０に保持されたライトデータに対応するライト要求を発行した論理プロセッサと同じであるか否かが判定される。さらに、当該メモリアクセス要求を発行した物理プロセッサが、当該ライト要求を発行した物理プロセッサと異なるか否かが判定される。つまり、プロセッサ情報が示す物理プロセッサとは異なる物理プロセッサで、かつ、プロセッサ情報が示す論理プロセッサが示す論理プロセッサと同じ論理プロセッサで以前に発行されたライト要求に対応するライトデータが少なくとも１つのＳＴＢに保持されているか否かが、判定部４２０によって判定される。論理プロセッサが同じであり、物理プロセッサが異なると判定された場合、制御部４３０は、当該論理プロセッサが以前に発行したライト要求に対応するデータをＳＴＢ４５０から掃き出す。なお、論理プロセッサではなく、スレッドが同じであるか否かが判定されてもよい。
【０２３３】
以上のように、本実施の形態では、それぞれの条件を満たす場合にＳＴＢ４５０からデータが掃き出される。なお、上述の条件全てを判定する必要はない。また、上述の条件に新たな条件を加えてもよく、または、上述の条件と新たな条件とを置き換えてもよい。
【０２３４】
例えば、“Ｓｌｏｔ  Ｆｕｌｌ”条件は、バッファ量がフルであるか否かを判定する条件であるが、この条件の代わりに、所定のバッファ量（ＳＴＢに保持できるバッファ量の最大値の半分など）に達したか否かを判定する条件でもよい。例えば、ＳＴＢ４５０に保持できるデータ量の最大値は１２８バイトであるが、ＳＴＢ４５０とメインメモリ２０との間のデータバス幅が６４バイトである場合などに、バッファ量が６４バイトに達したか否かを判定してもよい。
【０２３５】
ここで、図１８を参照する。図１８は、本実施の形態の判定部４２０の詳細な構成を示すブロック図である。同図に示すように、判定部４２０は、属性判定部４２１と、プロセッサ判定部４２２と、コマンド判定部４２３と、アドレス判定部４２４と、バッファ量判定部４２５と、判定結果出力部４２６とを備える。
【０２３６】
属性判定部４２１は、メモリアクセス情報取得部４１０で取得されたメモリアクセス情報から属性情報を取得し、メモリアクセス要求に含まれるアドレスが示す領域の属性がキャッシャブル属性、バースト可属性、及び、バースト不可属性のいずれであるかを判定する。そして、属性判定部４２１は、得られた判定結果を判定結果出力部４２６に出力する。
【０２３７】
プロセッサ判定部４２２は、メモリアクセス情報取得部４１０で取得されたメモリアクセス情報からプロセッサ情報を取得し、メモリアクセス要求を発行したプロセッサが、複数の論理プロセッサ及び物理プロセッサのうち、いずれの論理プロセッサ及び物理プロセッサであるかを判定する。そして、プロセッサ判定部４２２は、得られた判定結果を判定結果出力部４２６に出力する。
【０２３８】
コマンド判定部４２３は、メモリアクセス情報取得部４１０で取得されたメモリアクセス情報からコマンド情報を取得し、メモリアクセス要求に所定のコマンドが含まれるか否かを判定する。さらに、コマンド判定部４２３は、メモリアクセス要求に所定のコマンドが含まれていた場合、当該所定のコマンドの種別を判定する。そして、コマンド判定部４２３は、得られた判定結果を判定結果出力部４２６に出力する。
【０２３９】
なお、所定のコマンドとは、例えば、他の条件に関わらずＳＴＢ４５０からデータを掃き出す命令である。一例として、上述したような“Ａｌｌ  Ｓｙｎｃ”コマンド及び“Ｓｅｌｆ  Ｓｙｎｃ”コマンドがある。
【０２４０】
アドレス判定部４２４は、メモリアクセス情報取得部４１０で取得されたメモリアクセス情報からアドレス情報を取得し、メモリアクセス要求に含まれるアドレスが、ＳＴＢ４５０に既に保持されているか否かを判定する。さらに、アドレス判定部４２４は、当該メモリアクセス要求に含まれるアドレスが、直前のメモリアクセス要求に含まれていたアドレスに関連するか否かを判定する。具体的には、２つのアドレスが連続しているか否かを判定する。そして、アドレス判定部４２４は、得られた判定結果を判定結果出力部４２６に出力する。
【０２４１】
バッファ量判定部４２５は、制御部４３０を介して、ＳＴＢ４５０からバッファ量を取得し、バッファ量が所定の閾値に達したか否かをＳＴＢごとに判定する。そして、バッファ量判定部４２５は、得られた判定結果を判定結果出力部４２６に出力する。なお、所定の閾値は、例えば、ＳＴＢ４５０の最大値、又は、バッファメモリ装置４００とメインメモリ２０との間のデータバス幅などである。
【０２４２】
判定結果出力部４２６は、各判定部から入力される判定結果を基にして、図１７に示す条件を満たすか否かを判定し、得られた判定結果を制御部４３０に出力する。具体的には、判定結果出力部４２６は、図１７に示す条件を満たすと判定された場合、どのＳＴＢのどのデータをメインメモリ２０に掃き出すのかを示す掃き出し情報を制御部４３０に出力する。
【０２４３】
以上の構成により、本実施の形態のバッファメモリ装置４００は、複数のプロセッサ１０から出力されたライトデータを一時的に保持する複数のＳＴＢ４５０を備え、所定の条件が満たされた場合に、ＳＴＢ４５０に保持されたデータをメインメモリ２０にバーストライトする。つまり、小さいサイズの複数のライトデータをマージするために、一時的にＳＴＢ４５０に保持し、マージすることで得られた大きいサイズのデータをメインメモリ２０にバーストライトする。このとき、複数のプロセッサ間でのデータの順序の保証を行うための条件に基づいて、ＳＴＢ４５０からのデータの掃き出しの可否を決定する。
【０２４４】
これにより、データのコヒーレンシを保ちつつ、データの転送効率を向上させることができる。
【０２４５】
続いて、本実施の形態のバッファメモリ装置４００の動作について、図１９〜図２６を用いて説明する。図１９は、本実施の形態のバッファメモリ装置４００の動作を示すフローチャートである。
【０２４６】
まず、本実施の形態のバッファメモリ装置４００は、プロセッサ１０からメモリアクセス要求を取得することで、本実施の形態のデータ転送処理を実行する。
【０２４７】
メモリアクセス情報取得部４１０は、メモリアクセス要求からメモリアクセス情報を取得する（Ｓ６０１）。そして、取得したメモリアクセス情報を判定部４２０に出力する。また、必要に応じて、判定部４２０は、制御部４３０を介してＳＴＢ４５０からバッファ量情報を取得する。
【０２４８】
判定部４２０は、入力されるメモリアクセス情報と、取得したバッファ量情報とを用いて、ＳＴＢ４５０からデータを掃き出すか否かを判定する（Ｓ６０２）。この掃き出し判定処理の詳細については後述する。
【０２４９】
続いて、コマンド判定部４２３が、メモリアクセス要求がライト要求であるかリード要求であるかを判定する（Ｓ６０３）。メモリアクセス要求がライト要求である場合（Ｓ６０３で“ライト”）、データ転送部４４０は、プロセッサ１０から出力されるライトデータの書き込み処理を行う（Ｓ６０４）。メモリアクセス要求がリード要求である場合（Ｓ６０３で“リード”）、データ転送部４４０は、プロセッサ１０へのリードデータの読み出し処理を実行する（Ｓ６０５）。
【０２５０】
なお、掃き出し判定処理（Ｓ６０２）で、メモリアクセス要求がライト要求であるかリード要求であるかが判定されている場合は、掃き出し判定処理（Ｓ６０２）の終了後に、メモリアクセス要求の判定処理（Ｓ６０３）をすることなく、書き込み処理（Ｓ６０４）、又は、読み出し処理（Ｓ６０５）が実行されてもよい。
【０２５１】
以下では、まず、書き込み処理（Ｓ６０４）の詳細について説明する。
【０２５２】
図２０は、本実施の形態のバッファメモリ装置４００の書き込み処理を示すフローチャートである。
【０２５３】
メモリアクセス要求がライト要求である場合、まず、属性判定部４２１は、当該ライト要求に含まれるライトアドレスが示す領域の属性を判定する（Ｓ６１１）。具体的には、属性判定部４２１は、ライトアドレスが示す領域の属性が、バースト可属性、バースト不可属性、及び、キャッシャブル属性のいずれであるかを判定する。
【０２５４】
ライトアドレスが示す領域の属性がバースト可属性であると判定された場合（Ｓ６１１で“アンキャッシャブル（バースト可）”）、第１データ転送部４４１は、プロセッサ１０から出力されたライトデータをＳＴＢ４５０に書き込む（Ｓ６１２）。具体的には、第１データ転送部４４１は、制御部４３０からの制御に基づいて、ライト要求を発行した物理プロセッサ（例えば、プロセッサ１０ａ）に対応するＳＴＢ（ＳＴＢ４５０ａ）にライトデータを書き込む。
【０２５５】
ライトアドレスが示す領域の属性がバースト不可属性であると判定された場合（Ｓ６１１で“アンキャッシャブル（バースト不可）”）、第２データ転送部４４２は、プロセッサ１０から出力されたライトデータをメインメモリ２０に書き込む（Ｓ６１３）。
【０２５６】
ライトアドレスが示す領域の属性がキャッシャブル属性であると判定された場合（Ｓ６１１で“キャッシャブル”）、第３データ転送部４４３は、ライト要求がヒットしたかミスしたかを判定する（Ｓ６１４）。ライト要求がミスした場合（Ｓ６１４でＮｏ）、第３データ転送部４４３は、キャッシュメモリ４６０に対してリフィル処理を行い、タグアドレスを更新する（Ｓ６１５）。
【０２５７】
タグアドレスの更新後、又は、ライト要求がヒットした場合（Ｓ６１４でＹｅｓ）、制御部４３０は、当該ライト要求に基づく書き込み処理が、ライトバック処理であるかライトスルー処理であるかに応じて、ライトデータの書き込み先を変更する（Ｓ６１７）。ライトバック処理の場合（Ｓ６１６で“ライトバック”）、第３データ転送部４４３は、キャッシュメモリ４６０にライトデータを書き込む（Ｓ６１７）。ライトスルー処理の場合（Ｓ６１６で“ライトスルー”）、第３データ転送部４４３は、ＳＴＢ４５０にライトデータとライトアドレスとを書き込む（Ｓ６１８）。
【０２５８】
以上のようにして、プロセッサ１０から出力されたライトデータは、メインメモリ２０、ＳＴＢ４５０又はキャッシュメモリ４６０に書き込まれる。なお、ＳＴＢ４５０及びキャッシュメモリ４６０に書き込まれたデータは、後続のメモリアクセス要求が入力された場合などに実行される掃き出し判定処理によって、メインメモリ２０に書き込まれる。
【０２５９】
なお、掃き出し判定処理（Ｓ６０２）で、ライトアドレスが示す領域の属性が判定されている場合は、メモリアクセス要求の判定処理（Ｓ６０３）の終了後に、属性の判定処理（Ｓ６１１）をすることなく、それぞれの書き込み処理を実行してもよい。
【０２６０】
次に、読み出し処理（Ｓ６０５）について説明する。読み出し処理（Ｓ６０５）は、例えば、図６〜図９に示すフローチャートに従って実行される。
【０２６１】
なお、掃き出し判定処理（Ｓ６０２）で、リードアドレスが示す領域の属性が判定されている場合は、メモリアクセス要求の判定処理（Ｓ６０３）の終了後に、属性の取得処理（Ｓ１０１）及び属性の判定処理（Ｓ１０２）をすることなく、それぞれの読み出し処理を実行してもよい。
【０２６２】
次に、掃き出し判定処理（Ｓ６０２）の詳細について図２１〜図２６を用いて説明する。掃き出し判定処理では、図１７に示す判定テーブルが示す条件をどの順に判定してもよい。ただし、“Ａｌｌ  Ｓｙｎｃ”条件のように、条件が満たされた場合に、全てのバッファに保持されたデータを掃き出すなど、その後に他の条件を判定する必要がなくなるものを優先的に行うのが望ましい。
【０２６３】
図２１は、本実施の形態のバッファメモリ装置４００の属性判定処理を示すフローチャートである。同図は、図１７の“Ｕｎｃａｃｈｅ”条件に基づいた掃き出し判定処理を示す。
【０２６４】
メモリアクセス情報が判定部４２０に入力されると、属性判定部４２１は、メモリアクセス要求に含まれるアドレスが示す領域の属性がバースト不可属性であるか否かを判定する（Ｓ７０１）。当該アドレスが示す領域の属性がバースト不可属性ではない場合（Ｓ７０１でＮｏ）、他の判定処理が実行される。
【０２６５】
メモリアクセス要求に含まれるアドレスが示す領域の属性がバースト不可属性であると判定された場合（Ｓ７０１でＹｅｓ）、制御部４３０は、当該メモリアクセス要求を発行した論理プロセッサと同じ論理プロセッサで発行されたメモリアクセス要求に対応するデータを保持しているＳＴＢから、保持しているデータをメインメモリ２０に掃き出す（Ｓ７０２）。なお、制御部４３０は、プロセッサ判定部４２２の判定結果を用いて、複数のＳＴＢ４５０のうち、掃き出し対象となるＳＴＢを特定することで、データの掃き出しを実行する。当該掃き出しが終了すると、他の判定処理が実行される。
【０２６６】
図２２は、本実施の形態のバッファメモリ装置４００のコマンド判定処理を示すフローチャートである。同図は、図１７の“Ａｌｌ  Ｓｙｎｃ”条件と“Ｓｅｌｆ  Ｓｙｎｃ”条件とに基づいた掃き出し判定処理を示す。
【０２６７】
メモリアクセス情報が判定部４２０に入力されると、コマンド判定部４２３は、メモリアクセス要求に含まれるコマンドに、他の条件に関わらずデータを掃き出す旨の命令である“Ｓｙｎｃ”コマンドが含まれるか否かを判定する（Ｓ８０１）。メモリアクセス要求に“Ｓｙｎｃ”コマンドが含まれない場合（Ｓ８０１でＮｏ）、他の判定処理が実行される。
【０２６８】
メモリアクセス要求に“Ｓｙｎｃ”コマンドが含まれる場合（Ｓ８０１でＹｅｓ）、コマンド判定部４２３は、“Ｓｙｎｃ”コマンドが“Ａｌｌ  Ｓｙｎｃ”コマンドであるか“Ｓｅｌｆ  Ｓｙｎｃ”コマンドであるかを判定する（Ｓ８０２）。“Ｓｙｎｃ”コマンドが“Ａｌｌ  Ｓｙｎｃ”コマンドである場合（Ｓ８０２で“Ａｌｌ  Ｓｙｎｃ”）、制御部４３０は、全てのＳＴＢ４５０から、全てのデータを掃き出す（Ｓ８０３）。
【０２６９】
“Ｓｙｎｃ”コマンドが“Ｓｅｌｆ  Ｓｙｎｃ”コマンドである場合（Ｓ８０２で“Ｓｅｌｆ  Ｓｙｎｃ”）、制御部４３０は、当該メモリアクセス要求を発行した論理プロセッサと同じ論理プロセッサで発行されたメモリアクセス要求に対応するデータを保持しているＳＴＢから、保持しているデータをメインメモリ２０に掃き出す（Ｓ８０４）。なお、制御部４３０は、プロセッサ判定部４２２の判定結果を用いて、複数のＳＴＢ４５０のうち、吐き出し対象となるＳＴＢを特定することで、データの掃き出しを実行する。
【０２７０】
データの掃き出しが終了すると、他の判定処理が実行される。
【０２７１】
図２３は、本実施の形態のバッファメモリ装置４００のリードアドレス判定処理を示すフローチャートである。同図は、図１７の“ＲＡＷ  Ｈａｚａｒｄ”条件に基づいた掃き出し判定処理を示す。なお、“ＲＡＷ  Ｈａｚａｒｄ”条件は、バッファメモリ装置４００がリード要求を受け取った場合に判定される条件である。すなわち、コマンド判定部４２３が、メモリアクセス要求がリード要求であると判定した場合に実行される。
【０２７２】
アドレス判定部４２４は、当該リード要求に含まれるリードアドレスが、ＳＴＢ４５０に保持されているライトアドレスに一致するか否かを判定する（Ｓ９０１）。当該リードアドレスがＳＴＢ４５０に保持されているライトアドレスに一致しないと判定された場合（Ｓ９０１でＮｏ）、他の判定処理が実行される。
【０２７３】
リードアドレスがＳＴＢ４５０に保持されているライトアドレスに一致すると判定された場合（Ｓ９０１でＹｅｓ）、制御部４３０は、Ｈａｚａｒｄラインまでのデータを全て、すなわち、一致したライトアドレスに対応するライトデータ以前に保持された全てのデータをＳＴＢ４５０から掃き出す（Ｓ９０２）。データの掃き出しが終了すると、他の判定処理が実行される。
【０２７４】
図２４は、本実施の形態のバッファメモリ装置４００のライトアドレス判定処理を示すフローチャートである。同図は、図１７の“Ａｎｏｔｈｅｒ  Ｌｉｎｅ  Ａｃｃｅｓｓ”条件に基づいた掃き出し判定処理を示す。なお、“Ａｎｏｔｈｅｒ  Ｌｉｎｅ  Ａｃｃｅｓｓ”条件は、バッファメモリ装置４００がライト要求を受け取った場合に判定される条件である。すなわち、コマンド判定部４２３が、メモリアクセス要求がライト要求であると判定した場合に実行される。
【０２７５】
アドレス判定部４２４は、当該ライト要求に含まれるライトアドレスが、直前に入力されたライト要求に含まれるライトアドレスに連続するか否かを判定する（Ｓ１００１）。２つのアドレスが連続する場合（Ｓ１００１でＮｏ）、他の判定処理が実行される。
【０２７６】
２つのアドレスが連続しない場合（Ｓ１００１でＹｅｓ）、制御部４３０は、直前に入力されたライト要求に対応するライトデータを含み、それ以前のデータを全てＳＴＢ４５０から掃き出す（Ｓ１００２）。データの掃き出しが終了すると、他の判定処理が実行される。
【０２７７】
図２５は、本実施の形態のバッファメモリ装置４００のバッファ量判定処理を示すフローチャートである。同図は、図１７の“Ｓｌｏｔ  Ｆｕｌｌ”条件に基づいた掃き出し判定処理を示す。
【０２７８】
“Ｓｌｏｔ  Ｆｕｌｌ”条件は、他の条件と異なり、メモリアクセス情報ではなく、ＳＴＢ４５０から得られるバッファ量情報に基づいて判定される条件である。したがって、バッファメモリ装置４００がメモリアクセス要求を受け取った場合に限らず、任意のタイミングで、又は、ＳＴＢ４５０にデータを書き込んだ場合などに判定されてもよい。
【０２７９】
バッファ量判定部４２５は、制御部４３０を介して、ＳＴＢ４５０からバッファ量情報を取得し、ＳＴＢごとに、バッファ量がフルであるか否かを判定する（Ｓ１１０１）。バッファ量がフルでない場合（Ｓ１１０１でＮｏ）、バッファメモリ装置４００がメモリアクセス要求を受け取った場合に、他の判定処理が実行される。
【０２８０】
バッファ量がフルである場合（Ｓ１１０１でＹｅｓ）、制御部４３０は、複数のＳＴＢ４５０のうち、バッファ量がフルとなったＳＴＢからデータを掃き出す（Ｓ１１０２）。データの掃き出しが終了すると、他の判定処理が実行される。
【０２８１】
図２６は、本実施の形態のバッファメモリ装置４００のプロセッサ判定処理を示すフローチャートである。同図は、図１７の“同ＬＰ、異ＰＰ”条件に基づいた掃き出し判定処理を示す。
【０２８２】
メモリアクセス情報が判定部４２０に入力されると、プロセッサ判定部４２２は、メモリアクセス要求を発行した物理プロセッサとは異なる物理プロセッサで、かつ、当該メモリアクセス要求を発行した論理プロセッサと同じ論理プロセッサで以前に発行されたメモリアクセス要求に対応するライトデータが、ＳＴＢ４５０に保持されているか否かを判定する（Ｓ１２０１）。当該ライトデータがＳＴＢ４５０に保持されていない場合（Ｓ１２０１でＮｏ）、他の判定処理が実行される。
【０２８３】
同じ論理プロセッサ、かつ、異なる物理プロセッサから出力されたライトデータがＳＴＢ４５０に保持されている場合（Ｓ１２０１でＹｅｓ）、当該ライトデータを保持していたＳＴＢから、データを掃き出す（Ｓ１２０２）。データの掃き出しが終了すると、他の判定処理が実行される。
【０２８４】
以上の図２１〜図２６に示す判定処理が全て終了すると、掃き出し判定処理（図１９のＳ６０２）は終了する。
【０２８５】
以上の掃き出し判定処理に示した条件が満たされない場合は、ライト要求に対応するライトデータは、ＳＴＢ４５０に保持される。すなわち、入力される小さいサイズのライトデータは、ＳＴＢ４５０でマージされ、大きなサイズのデータとなる。そして、当該データは、上述のいずれかの条件が満たされた時点で、メインメモリ２０にバーストライトされる。
【０２８６】
なお、以上の説明では、各判定条件が満たされるごとに、データをメインメモリ２０に掃き出したが、全ての判定条件が判定された後に、満たした条件に対応するデータをまとめてメインメモリ２０に掃き出してもよい。
【０２８７】
以上のように、本実施の形態のバッファメモリ装置４００は、複数のプロセッサ１０のそれぞれに対応するＳＴＢ４５０を備え、各ＳＴＢ４５０にプロセッサ１０から出力されるライトデータをマージして、保持させる。そして、所定の条件を満たした場合に、ＳＴＢ４５０からマージしたデータをメインメモリ２０にバーストライトする。
【０２８８】
これにより、小さなサイズのライトデータをマージすることで得られる大きなデータをメインメモリ２０にバーストライトすることができるので、小さなサイズのデータを個々に書き込む場合に比べて、データの転送効率を向上させることができる。また、ＳＴＢ４５０からデータを読み出す条件を備えることで、複数のプロセッサから出力されるライトデータのコヒーレンシを保つことができる。特に、メモリアクセス要求が、同じ論理プロセッサであるが、異なる物理プロセッサで発行された場合にＳＴＢ４５０に保持されたデータを掃き出すことで、複数のプロセッサが実行するマルチスレッド、又は、マルチプロセッサを利用したメモリシステムの場合でも、データのコヒーレンシを保つことができる。
【０２８９】
以上、本発明のバッファメモリ装置及びメモリシステムについて、実施の形態に基づいて説明したが、本発明は、これらの実施の形態に限定されるものではない。本発明の趣旨を逸脱しない限り、当業者が思いつく各種変形を当該実施の形態に施したものや、異なる実施の形態における構成要素を組み合わせて構築される形態も、本発明の範囲内に含まれる。
【０２９０】
また、各実施の形態において、メモリアクセス要求の発行元は、ＣＰＵなどのプロセッサ、及び、ＤＭＡＣなどいかなるマスタであってもよい。
【０２９１】
また、各実施の形態では、Ｌ２キャッシュ４０が各実施の形態のバッファメモリ１４０、ＰＦＢ３３４又はＰＦＢ４７０を備える構成について説明したが、Ｌ１キャッシュ３０が当該バッファメモリ１４０、ＰＦＢ３３４又はＰＦＢ４７０を備えてもよい。このとき、メモリシステムは、Ｌ２キャッシュ４０を備えなくてもよい。
【０２９２】
また、レベル３キャッシュ以上のキャッシュを備えるメモリシステムに、本発明を適用してもよい。この場合、最大レベルのキャッシュ、すなわち、メインメモリ２０に最も近いキャッシュが各実施の形態のバッファメモリ１４０、ＰＦＢ３３４又はＰＦＢ４７０を備えることが好ましい。
【０２９３】
なお、本発明は、上述したように、バッファメモリ装置、メモリシステム及びデータ読出方法として実現できるだけではなく、本実施の形態のデータ読出方法をコンピュータに実行させるためのプログラムとして実現してもよい。また、当該プログラムを記録するコンピュータ読み取り可能なＣＤ−ＲＯＭなどの記録媒体として実現してもよい。さらに、当該プログラムを示す情報、データ又は信号として実現してもよい。そして、これらプログラム、情報、データ及び信号は、インターネットなどの通信ネットワークを介して配信されてもよい。
【０２９４】
また、本発明は、バッファメモリ装置を構成する構成要素の一部又は全部を、１個のシステムＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）から構成してもよい。システムＬＳＩは、複数の構成部を１個のチップ上に集積して製造された超多機能ＬＳＩであり、具体的には、マイクロプロセッサ、ＲＯＭ及びＲＡＭなどを含んで構成されるコンピュータシステムである。
【産業上の利用可能性】
【０２９５】
本発明のバッファメモリ装置及びメモリシステムは、ＣＰＵなどのプロセッサとメインメモリとの間でデータの転送を行うシステムに利用することができ、例えば、コンピュータなどに利用することができる。
【符号の説明】
【０２９６】
１０、１０ａ、１０ｂ、１０ｃ、３１０ａ、３１０ｂ、６１０  プロセッサ
２０、３２０、６２０  メインメモリ
２１、６２１  キャッシャブル領域
２２、６２２  アンキャッシャブル領域
２３  バースト可領域
２４  バースト不可領域
３０、３１１  Ｌ１キャッシュ
４０、３３０  Ｌ２キャッシュ
１００、２００、４００  バッファメモリ装置
１１０  属性取得部
１２０、３３２ａ、３３２ｂ、４２１  属性判定部
１３０、２３０  データ読出部
１３１  第１データ読出部
１３２  第２データ読出部
１３３、２３３  第３データ読出部
１４０  バッファメモリ
１５０、３３５、４６０、６１１  キャッシュメモリ
１６０  テーブル保持部
１６１  領域属性テーブル
１７０  属性設定部
３００  メモリシステム
３１２  ＴＬＢ
３１３  アドレス変換テーブル
３３１ａ、３３１ｂ  キュー
３３３ａ、３３３ｂ  セレクタ
３３４、４７０  ＰＦＢ
３３６  メモリインタフェース
４１０  メモリアクセス情報取得部
４２０  判定部
４２２  プロセッサ判定部
４２３  コマンド判定部
４２４  アドレス判定部
４２５  バッファ量判定部
４２６  判定結果出力部
４３０  制御部
４４０  データ転送部
４４１  第１データ転送部
４４２  第２データ転送部
４４３  第３データ転送部
４５０、４５０ａ、４５０ｂ、４５０ｃ  ＳＴＢ
５０１、５０２  メモリアクセス情報
６１２  汎用レジスタ
【図１】
2010032433.tif 000003
【図２】
2010032433.tif 000004
【図３】
2010032433.tif 000005
【図４】
2010032433.tif 000006
【図５】
2010032433.tif 000007
【図６】
2010032433.tif 000008
【図７】
2010032433.tif 000009
【図８】
2010032433.tif 000010
【図９】
2010032433.tif 000011
【図１０】
2010032433.tif 000012
【図１１】
2010032433.tif 000013
【図１２】
2010032433.tif 000014
【図１３】
2010032433.tif 000015
【図１４】
2010032433.tif 000016
【図１５】
2010032433.tif 000017
【図１６】
2010032433.tif 000018
【図１７】
2010032433.tif 000019
【図１８】
2010032433.tif 000020
【図１９】
2010032433.tif 000021
【図２０】
2010032433.tif 000022
【図２１】
2010032433.tif 000023
【図２２】
2010032433.tif 000024
【図２３】
2010032433.tif 000025
【図２４】
2010032433.tif 000026
【図２５】
2010032433.tif 000027
【図２６】
2010032433.tif 000028
【図２７】
2010032433.tif 000029
【手続補正書】
【提出日】平成22年12月16日(2010.12.16)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、バッファメモリ装置、メモリシステム及びデータ読出方法に関し、特に、メインメモリに保持されたデータをバーストリードする際に、バーストリードされたデータを保持するバッファメモリ装置、メモリシステム及びデータ読出方法に関する。
【背景技術】
【０００２】
近年、マイクロプロセッサからメインメモリへのメモリアクセスを高速化させるために、例えば、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などからなる小容量で高速で動作可能なキャッシュメモリが利用されている。例えば、キャッシュメモリをマイクロプロセッサの内部、又は、その近傍に配置し、メインメモリに保持されたデータの一部をキャッシュメモリに記憶させておくことで、メモリアクセスを高速化させることができる。
【０００３】
従来、メモリアクセスをさらに高速化させるために、リード要求に応じて、当該リード要求に含まれるアドレスに連続するアドレスへは、プロセッサからアクセスされる可能性が高いと想定し、該当するアドレスに対応するデータをバーストリードする技術が示されている（特許文献１参照）。
【０００４】
図２７は、従来のメモリアクセス方法の概略を示す図である。同図に示すように、特許文献１に記載されている技術では、メインメモリ６２０は、キャッシャブル領域６２１とアンキャッシャブル領域６２２とに分けられる。
【０００５】
ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）などのプロセッサ６１０から、アンキャッシャブル領域６２２に対するリード要求があった場合、バーストリードされたデータは、プロセッサ６１０が備える汎用レジスタ６１２に格納される。また、キャッシャブル領域６２１に対するリード要求があった場合、バーストリードされたデータはキャッシュメモリ６１１に格納される。
【０００６】
以上のようにして、特許文献１に記載のメモリアクセス方法では、アクセスされる可能性が高いアドレスに対応するデータをバーストリードすることで、メモリアクセスをさらに高速化することができる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００４−２４０５２０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上記従来技術によれば、以下のような課題がある。
【０００９】
まず、アンキャッシャブル領域６２２に対するリード要求があった場合は、上述のように、バーストリードされたデータは、ＣＰＵが備える汎用レジスタ６１２に格納されるが、汎用レジスタ６１２は、キャッシュメモリ６１１などと比べて非常に効率が悪い。また、アンキャッシャブル領域６２２の中には、リードするだけで保持していたデータの値が変わってしまうようなリードセンシティブな領域がある。アンキャッシャブル領域６２２に保持されるデータをバーストリードした場合、リードセンシティブな領域にまでアクセスしてしまい、データを書き換えてしまうという不具合が生じる。
【００１０】
さらに、キャッシャブル領域６２１に対するリード要求があった場合は、上述のように、バーストリードされたデータは、キャッシュメモリ６１１に格納されるが、これにより、キャッシュメモリ６１１の内容が書き換えられてしまう。これにより、本来、メモリアクセスを高速化するためにキャッシュメモリ６１１に格納していたデータが消えてしまうため、メモリアクセスの高速化が達成されなくなる。
【００１１】
そこで、本発明は、上記課題を解決するためになされたものであって、データの書き換えによる不具合などを生じさせることなくバーストリードを行うことで、メモリアクセスを高速化するバッファメモリ装置、メモリシステム及びデータ読出方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上記課題を解決するために、本発明のバッファメモリ装置は、プロセッサからのリード要求に応じて、キャッシャブル属性とアンキャッシャブル属性とのいずれかに属する複数の領域からなるメインメモリ又は周辺デバイスからデータを読み出すバッファメモリ装置であって、前記リード要求に含まれるリードアドレスが示す領域の属性を取得する属性取得部と、前記属性取得部によって取得された属性が、前記アンキャッシャブル属性であり、かつ、バースト転送すべきデータが保持されることを示す第１属性であるか否かを判定する属性判定部と、前記属性判定部によって、前記属性取得部によって取得された属性が前記第１属性であると判定された場合、前記リードアドレスが示す領域に保持されているデータを含むデータをバーストリードするデータ読出部と、前記データ読出部によってバーストリードされたデータを保持する第１バッファメモリとを備える。
【００１３】
これにより、メインメモリ又は周辺デバイスのアドレスが示す領域の属性を判定することで、アンキャッシャブル領域の中のバースト転送すべきデータを保持する領域からデータをバーストリードするので、メインメモリ又は周辺デバイスの他の領域のデータの想定外の書き換えなどが発生してしまうことを防ぐことができる。さらに、バーストリードしたデータをバッファメモリに予め保持させておくことができるので、メモリアクセスの高速化を達成することができる。さらに、キャッシュメモリとは異なるバッファメモリにバーストリードしたデータを格納することで、キャッシュメモリを使用することなく、データを保持することができる領域を多くすることができる。
【００１４】
また、前記属性判定部は、前記属性取得部によって取得された属性が、前記アンキャッシャブル属性であり、かつ、バースト転送すべきデータが保持されないことを示す第２属性であるか、前記第１属性であるかを判定し、前記データ読出部は、さらに、前記属性判定部によって、前記属性取得部によって取得された属性が前記第２属性であると判定された場合、前記リードアドレスが示す領域に保持されているデータのみを読み出してもよい。
【００１５】
これにより、バーストリードすべきでない領域からデータをバーストリードしてしまうことを防ぐことができるので、想定外のデータの書き換えなどが発生してしまうことを防ぐことができる。
【００１６】
また、前記バッファメモリ装置は、さらに、前記メインメモリ又は前記周辺デバイスのアドレスと、当該アドレスが示す領域の属性が、前記第１属性、前記第２属性、及び、前記キャッシャブル属性であることを示す第３属性のいずれであるかを示す属性情報とを対応付けたテーブルを保持するテーブル保持部を備え、前記属性取得部は、前記テーブル保持部に保持されたテーブルを参照することで、前記リードアドレスが示す領域の属性を取得してもよい。
【００１７】
これにより、メインメモリ又は周辺デバイスのアドレスが示す領域と、属性との関係を容易に管理することができ、テーブルを参照するだけで属性を取得することができるので、本発明のバッファメモリ装置の構成を簡単化することができる。
【００１８】
また、前記バッファメモリ装置は、さらに、キャッシュメモリを備え、前記属性判定部は、前記属性取得部によって取得された属性が、前記第１属性、前記第２属性、及び、前記第３属性のいずれであるかを判定し、前記データ読出部は、さらに、前記属性判定部によって、前記属性取得部によって取得された属性が前記第３属性であると判定された場合、前記リードアドレスが示す領域に保持されているデータを含むデータをバーストリードし、前記キャッシュメモリは、前記データ読出部によってバーストリードされたデータのうち、前記リードアドレスが示す領域に保持されているデータを含む第１データを保持し、前記第１バッファメモリは、前記データ読出部によってバーストリードされたデータのうち、前記第１データを除く第２データを保持してもよい。
【００１９】
これにより、本来キャッシュメモリのみを利用していた場合に、さらに、バッファメモリにも予めデータを保持させておくことができるので、メモリアクセスをさらに高速化することができる。
【００２０】
また、前記バッファメモリ装置は、さらに、前記メインメモリ又は前記周辺デバイスのアドレスと、当該アドレスが示す領域の属性を、前記第１属性、前記第２属性、及び、前記第３属性のいずれかに設定することで前記テーブルを生成する属性設定部を備え、前記テーブル保持部は、前記属性設定部によって生成されたテーブルを保持してもよい。
【００２１】
これにより、必要に応じて属性を変更することなどもできる。
【００２２】
また、前記データ読出部は、前記属性判定部によって、前記属性取得部によって取得された属性が前記第１属性であると判定された場合、さらに、前記リードアドレスが示す領域に保持されているデータが前記第１バッファメモリに既に保持されているか否かを判断し、当該データが前記第１バッファメモリに既に保持されている場合、前記第１バッファメモリから当該データを読み出し、当該データが前記第１バッファメモリに保持されていない場合、当該データを含むデータをバーストリードしてもよい。
【００２３】
これにより、バッファメモリをキャッシュメモリと同じように動作させることができ、メモリアクセスを高速化することができる。
【００２４】
また、前記属性取得部は、さらに、前記プロセッサからのライト要求に含まれるライトアドレスが示す領域の属性を取得し、前記バッファメモリ装置は、さらに、前記属性判定部によって、前記属性取得部によって取得された属性のうち、前記ライトアドレスが示す領域の属性が前記第１属性である場合に、前記メインメモリ又は前記周辺デバイスに書き込むための前記ライト要求に対応するライトデータを保持する第２バッファメモリと、前記プロセッサからの前記リード要求又は前記ライト要求であるメモリアクセス要求の性質を示すメモリアクセス情報を取得するメモリアクセス情報取得部と、前記メモリアクセス情報取得部によって取得されたメモリアクセス情報が示す性質、又は、前記属性取得部によって取得された属性が、予め定められた条件を満たすか否かを判定する条件判定部と、前記メモリアクセス情報が示す性質が前記条件を満たすと前記条件判定部によって判定された場合、前記第２バッファメモリに保持されたライトデータを前記メインメモリ又は前記周辺デバイスに掃き出す制御部とを備えてもよい。
【００２５】
これにより、バッファメモリを利用することで、データの書き込み時にデータをマージし、マージしたデータをメインメモリ又は周辺デバイスにバーストライトすることができ、データの転送効率を向上させることができる。
【００２６】
また、前記メモリアクセス情報取得部は、前記メモリアクセス情報として、前記メモリアクセス要求を発行した論理プロセッサ及び物理プロセッサを示すプロセッサ情報を取得し、前記条件判定部は、前記プロセッサ情報が示す物理プロセッサとは異なる物理プロセッサで、かつ、前記プロセッサ情報が示す論理プロセッサと同じ論理プロセッサで以前に発行されたライト要求に対応するライトデータが前記第２バッファメモリに保持されている場合に、前記条件を満たすと判定し、前記制御部は、前記条件を満たすと前記条件判定部によって判定された場合、前記条件を満たす第２バッファメモリに保持されているデータを前記メインメモリ又は前記周辺デバイスに掃き出してもよい。
【００２７】
これにより、以前に発行されているライト要求に対応するデータをメインメモリ又は周辺デバイスに書き込むことで、データのコヒーレンシを保つことができる。なぜなら、メモリアクセス要求が、同じ論理プロセッサであるが、異なる物理プロセッサで発行された場合、異なるバッファメモリに同じ論理プロセッサから出力されたデータを保持してしまう恐れがあるが、この場合、各バッファメモリ間でのデータのコヒーレンシが保てなくなるためである。バッファメモリに保持されていたデータをメインメモリ又は周辺デバイスに掃き出すことで、バッファメモリ間でのデータのコヒーレンシの問題を無くすことができる。
【００２８】
また、前記条件判定部は、前記メモリアクセス情報に、前記第２バッファメモリに保持されたデータを前記メインメモリ又は前記周辺デバイスに掃き出すためのコマンド情報が含まれているか否かを判定し、前記制御部は、前記メモリアクセス情報に前記コマンド情報が含まれていると前記条件判定部によって判定された場合、前記コマンド情報が示す第２バッファメモリに保持されたデータを前記メインメモリ又は前記周辺デバイスに掃き出してもよい。
【００２９】
これにより、プロセッサからの指示に基づいて、容易にバッファメモリに保持されているデータをメインメモリ又は周辺デバイスに掃き出すことができ、メインメモリ又は周辺デバイスのデータを最新のデータに更新することができる。
【００３０】
また、前記メモリアクセス情報取得部は、さらに、前記メモリアクセス情報として、前記メモリアクセス要求を発行したプロセッサを示すプロセッサ情報を取得し、前記条件判定部は、さらに、前記属性情報が示す属性が、前記第１属性であるか否かを判定し、前記制御部は、さらに、前記属性取得部によって取得された属性が前記第１属性であると前記条件判定部によって判定された場合、前記プロセッサ情報が示すプロセッサに対応する第２バッファメモリに保持されたデータを前記メインメモリ又は前記周辺デバイスに掃き出してもよい。
【００３１】
これにより、プロセッサが発行したライト要求の順序を保つことができる。よって、データのコヒーレンシを保つことができる。
【００３２】
また、前記第２バッファメモリは、さらに、前記ライトデータに対応するライトアドレスを保持し、前記メモリアクセス情報取得部は、さらに、前記メモリアクセス要求がリード要求を含む場合に、前記メモリアクセス情報として、当該リード要求に含まれるリードアドレスを取得し、前記条件判定部は、前記リードアドレスに一致するライトアドレスが前記第２バッファメモリに保持されているか否かを判定し、前記制御部は、前記リードアドレスに一致するライトアドレスが前記第２バッファメモリに保持されていると前記条件判定部によって判定された場合、前記ライトアドレスに対応するライトデータ以前に前記第２バッファメモリに保持されたデータを前記メインメモリ又は前記周辺デバイスに掃き出してもよい。
【００３３】
これにより、常に、リードアドレスが示す領域からデータを読み出す前に、当該領域のデータを最新のデータに更新することができるので、古いデータをプロセッサが読み出してしまうことを防ぐことができる。
【００３４】
また、前記メモリアクセス情報取得部は、さらに、前記メモリアクセス要求がライト要求を含む場合に、当該ライト要求に含まれる第１ライトアドレスを取得し、前記条件判定部は、前記第１ライトアドレスが、直前に入力されたライト要求に含まれる第２ライトアドレスに連続するか否かを判定し、前記制御部は、前記第１ライトアドレスと前記第２ライトアドレスとが連続すると前記条件判定部によって判定された場合、前記第２ライトアドレスに対応するライトデータ以前に前記第２バッファメモリに保持されたデータを前記メインメモリ又は前記周辺デバイスに掃き出してもよい。
【００３５】
これにより、通常、プロセッサは一連の処理を行う場合は、連続するアドレスが示す連続領域へアクセスすることが多いので、アドレスが連続しない場合には当該一連の処理とは異なる処理が始まったと推定することができる。このため、当該一連の処理に関わるデータをメインメモリ又は周辺デバイスに掃き出す。これにより、バッファメモリに他の処理に関わるデータを保持させることができ、バッファメモリを効率良く利用することができる。
【００３６】
また、前記条件判定部は、さらに、前記第２バッファメモリに保持されているデータのデータ量が所定の閾値に達したか否かを判定し、前記制御部は、さらに、前記データ量が前記閾値に達したと前記条件判定部によって判定された場合、前記第２バッファメモリに保持されたデータを前記メインメモリ又は前記周辺デバイスに掃き出してもよい。
【００３７】
これにより、バッファメモリに保持されているデータ量が適当な量になった場合に、データを掃き出すことができる。例えば、データ量が、バッファメモリに保持できるデータの最大値、又は、バッファメモリとメインメモリ又は周辺デバイスとのデータバス幅に一致したときに、データを掃き出すことができる。
【００３８】
また、前記バッファメモリ装置は、さらに、前記プロセッサからのライト要求に含まれるライトアドレスが、前記第１バッファメモリに保持されているデータに対応するアドレスと一致するか否かを判断し、前記ライトアドレスが一致する場合、前記第１バッファメモリに保持されているデータを無効化する無効化部を備えてもよい。
【００３９】
これにより、バッファメモリに保持されたデータと、メインメモリ又は周辺デバイスに保持された対応するデータとが一致していない場合に、プロセッサがバッファメモリからデータを読み出すことを防ぐことができる。
【００４０】
また、本発明は、メモリシステムとしても実現することができ、本発明のメモリシステムは、プロセッサと、キャッシャブル属性及びアンキャッシャブル属性のいずれかに属する複数の領域からなるメインメモリ又は周辺デバイスとを備え、前記プロセッサからのリード要求に応じて、前記メインメモリ又は前記周辺デバイスからデータを読み出すメモリシステムであって、前記プロセッサからのリード要求に含まれるリードアドレスが示す領域の属性を取得する属性取得部と、前記属性取得部によって取得された属性が、前記アンキャッシャブル属性であり、かつ、バースト転送すべきデータが保持されることを示す第１属性であるか否かを判定する属性判定部と、前記属性判定部によって、前記属性取得部によって取得された属性が前記第１属性であると判定された場合、前記リードアドレスが示す領域に保持されているデータを含むデータをバーストリードするデータ読出部と、前記データ読出部によってバーストリードされたデータを保持するバッファメモリとを備え、前記データ読出部は、前記属性判定部によって、前記属性取得部によって取得された属性が前記第１属性であると判定された場合、さらに、前記リードアドレスが示す領域に保持されているデータが前記バッファメモリに既に保持されているか否かを判断し、当該データが前記バッファメモリに既に保持されている場合、前記バッファメモリから当該データを読み出し、当該データが前記バッファメモリに保持されていない場合、当該データを含むデータをバーストリードする。
【００４１】
また、前記メモリシステムは、さらに、複数のキャッシュを備え、前記複数のキャッシュのうち、前記メインメモリ又は前記周辺デバイスに最も近いキャッシュは、前記バッファメモリを備えてもよい。
【００４２】
なお、本発明は、バッファメモリ装置及びメモリシステムとして実現できるだけではなく、当該メモリシステムを構成する処理部をステップとする方法として実現することもできる。また、これらステップをコンピュータに実行させるプログラムとして実現してもよい。さらに、当該プログラムを記録したコンピュータ読み取り可能なＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）などの記録媒体、並びに、当該プログラムを示す情報、データ又は信号として実現してもよい。そして、それらプログラム、情報、データ及び信号は、インターネットなどの通信ネットワークを介して配信してもよい。
【発明の効果】
【００４３】
本発明のバッファメモリ装置、メモリシステム及びデータ読出方法によれば、データの書き換えによる不具合などを生じさせることとなくバーストリードを行うことで、メモリアクセスを高速化することができる。
【図面の簡単な説明】
【００４４】
【図１】図１は、実施の形態１のプロセッサ、メインメモリ及びキャッシュメモリを含むシステムの概略構成を示すブロック図である。
【図２】図２は、実施の形態１のアドレス空間に設定された属性を示す図である。
【図３】図３は、実施の形態１のバッファメモリ装置の構成を示すブロック図である。
【図４】図４は、実施の形態１の領域属性テーブルの一例を示す図である。
【図５】図５は、実施の形態１のバッファメモリとキャッシュメモリとの詳細を示す図である。
【図６】図６は、実施の形態１のバッファメモリ装置の動作を示すフローチャートである。
【図７】図７は、実施の形態１において、属性がバースト可属性である場合の転送処理の詳細を示すフローチャートである。
【図８】図８は、実施の形態１において、属性がバースト不可属性である場合の転送処理の詳細を示すフローチャートである。
【図９】図９は、実施の形態１において、属性がキャッシャブル属性である場合の転送処理の詳細を示すフローチャートである。
【図１０】図１０は、実施の形態２のバッファメモリ装置の構成を示すブロック図である。
【図１１】図１１は、実施の形態２において、属性がキャッシャブル属性である場合の転送処理の詳細を示すフローチャートである。
【図１２】図１２は、実施の形態３のメモリシステムの構成を示すブロック図である。
【図１３】図１３は、実施の形態３のアドレス変換テーブルの一例を示す図である。
【図１４】図１４は、実施の形態４のバッファメモリ装置の構成を示すブロック図である。
【図１５】図１５は、実施の形態４のメモリアクセス情報の一例を示す図である。
【図１６】図１６は、実施の形態４のバッファメモリ装置が備えるバッファメモリの概略を示す図である。
【図１７】図１７は、実施の形態４の複数の判定条件の一例を示す判定テーブルを示す図である。
【図１８】図１８は、実施の形態４の判定部の詳細な構成を示すブロック図である。
【図１９】図１９は、実施の形態４のバッファメモリ装置の動作を示すフローチャートである。
【図２０】図２０は、実施の形態４のバッファメモリ装置の書き込み処理を示すフローチャートである。
【図２１】図２１は、実施の形態４のバッファメモリ装置の属性判定処理を示すフローチャートである。
【図２２】図２２は、実施の形態４のバッファメモリ装置のコマンド判定処理を示すフローチャートである。
【図２３】図２３は、実施の形態４のバッファメモリ装置のリードアドレス判定処理を示すフローチャートである。
【図２４】図２４は、実施の形態４のバッファメモリ装置のライトアドレス判定処理を示すフローチャートである。
【図２５】図２５は、実施の形態４のバッファメモリ装置のバッファ量判定処理を示すフローチャートである。
【図２６】図２６は、実施の形態４のバッファメモリ装置のプロセッサ判定処理を示すフローチャートである。
【図２７】図２７は、従来のメモリアクセス方法の概略を示す図である。
【発明を実施するための形態】
【００４５】
以下では、本発明について、実施の形態に基づいて、図面を用いて詳細に説明する。
【００４６】
（実施の形態１）
まず、本実施の形態のバッファメモリ装置が備えられる一般的なメモリシステムについて説明する。
【００４７】
図１は、本実施の形態のプロセッサ、メインメモリ及びキャッシュメモリを含むシステムの概略構成を示すブロック図である。同図に示すように、本実施の形態のシステムは、プロセッサ１０と、メインメモリ２０と、Ｌ１（レベル１）キャッシュ３０と、Ｌ２（レベル２）キャッシュ４０とを備える。
【００４８】
本実施の形態のバッファメモリ装置は、図１に示すようなシステムにおいて、例えば、プロセッサ１０とメインメモリ２０との間に備えられる。具体的には、バッファメモリ装置が備えるバッファメモリは、Ｌ２キャッシュ４０に備えられる。
【００４９】
プロセッサ１０は、メインメモリ２０にメモリアクセス要求を出力する。メモリアクセス要求は、例えば、データを読み出すためのリード要求、又は、データを書き込むためのライト要求である。リード要求は、データの読み出し先の領域を示すリードアドレスを含んでおり、ライト要求は、データの書き込み先の領域を示すライトアドレスを含んでいる。
【００５０】
メインメモリ２０は、キャッシャブル属性とアンキャッシャブル属性とのいずれかに属する複数の領域からなり、当該領域にプログラム又はデータなどを記憶するＳＤＲＡＭ（Ｓｙｎｃｈｒｏｎｏｕｓ  Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などの大容量のメインメモリである。プロセッサ１０から出力されるメモリアクセス要求（リード要求又はライト要求）に応じて、メインメモリ２０からのデータの読み出し、又は、メインメモリ２０へデータの書き込みが実行される。
【００５１】
Ｌ１キャッシュ３０とＬ２キャッシュ４０とは、プロセッサ１０がメインメモリ２０から読み出したデータの一部、及び、メインメモリ２０に書き込むデータの一部を記憶するＳＲＡＭなどのキャッシュメモリである。Ｌ１キャッシュ３０とＬ２キャッシュ４０とは、メインメモリ２０に比べて、容量は小さいが、高速で動作可能なキャッシュメモリである。また、Ｌ１キャッシュ３０は、Ｌ２キャッシュ４０よりプロセッサ１０の近くに配置される優先度の高いキャッシュメモリであり、通常、Ｌ２キャッシュ４０よりも小容量であるが高速で動作可能である。
【００５２】
Ｌ１キャッシュ３０は、プロセッサ１０から出力されるメモリアクセス要求を取得し、取得したメモリアクセス要求に含まれるアドレスに対応するデータを既に格納しているか（ヒット）格納していないか（ミス）を判定する。例えば、リード要求がヒットした場合、Ｌ１キャッシュ３０は、当該リード要求に含まれるリードアドレスに対応するデータをＬ１キャッシュ３０内部から読み出し、読み出したデータをプロセッサ１０に出力する。なお、リードアドレスに対応するデータとは、リードアドレスが示す領域に記憶されているデータである。ライト要求がヒットした場合、Ｌ１キャッシュ３０は、当該ライト要求と同時にプロセッサ１０から出力されるデータを、Ｌ１キャッシュ３０内部に書き込む。
【００５３】
リード要求がミスした場合、Ｌ１キャッシュ３０は、Ｌ２キャッシュ４０又はメインメモリ２０から当該リード要求に対応するデータを読み出し、読み出したデータをプロセッサ１０に出力する。ライト要求がミスした場合、Ｌ１キャッシュ３０は、リフィル処理を行い、タグアドレスを更新し、当該ライト要求と同時にプロセッサ１０から出力されるデータを書き込む。
【００５４】
Ｌ２キャッシュ４０は、プロセッサ１０から出力されるメモリアクセス要求を取得し、取得したメモリアクセス要求がヒットしたかミスしたかを判定する。リード要求がヒットした場合、Ｌ２キャッシュ４０は、当該リード要求に含まれるリードアドレスに対応するデータをＬ２キャッシュ４０内部から読み出し、Ｌ１キャッシュ３０を介して、読み出したデータをプロセッサ１０に出力する。ライト要求がヒットした場合、Ｌ１キャッシュ３０を介して、当該ライト要求と同時にプロセッサ１０から出力されるデータをＬ２キャッシュ４０内部に書き込む。
【００５５】
リード要求がミスした場合、Ｌ２キャッシュ４０は、メインメモリ２０から当該リード要求に対応するデータを読み出し、Ｌ１キャッシュ３０を介して、読み出したデータをプロセッサ１０に出力する。ライト要求がミスした場合、Ｌ２キャッシュ４０は、リフィル処理を行い、Ｌ１キャッシュ３０を介して、タグアドレスを更新し、当該ライト要求と同時にプロセッサ１０から出力されるデータを書き込む。
【００５６】
なお、図１に示すシステムでは、メインメモリ２０と、Ｌ１キャッシュ３０と、Ｌ２キャッシュ４０とのコヒーレンシを持たせるための処理が行われている。例えば、ライト要求に従ってキャッシュメモリに書き込まれたデータは、ライトスルー処理又はライトバック処理によって、メインメモリ２０に書き込まれる。
【００５７】
また、ライト要求がミスした場合、プロセッサ１０は、Ｌ１キャッシュ３０をリフィル及び更新することなく、メインメモリ２０にデータを書き込んでもよい。Ｌ２キャッシュ４０についても同様である。
【００５８】
なお、図１では、Ｌ１キャッシュ３０がプロセッサ１０の外部に備えられる構成を示したが、プロセッサ１０が、Ｌ１キャッシュ３０を備えてもよい。
【００５９】
また、メインメモリ２０に限らず、ＩＯデバイスなどのその他の周辺デバイスとの間でデータを転送してもよい。周辺デバイスとは、プロセッサ１０との間でデータの転送を行う機器であり、例えば、キーボード、マウス、ディスプレイ、又は、フロッピー（登録商標）ディスクドライブなどである。
【００６０】
次に、本実施の形態のメインメモリ２０について説明する。
【００６１】
図２は、本実施の形態のアドレス空間に設定された属性を示す図である。アドレス空間の領域は、メインメモリ２０、及び、その他の周辺デバイスなどに割り当てられる。同図に示すように、メインメモリ２０は、キャッシャブル領域２１とアンキャッシャブル領域２２とから構成される。
【００６２】
キャッシャブル領域２１は、Ｌ１キャッシュ３０及びＬ２キャッシュ４０などのキャッシュメモリにキャッシュすべきデータを保持することができることを示すキャッシャブル属性に属する領域である。
【００６３】
アンキャッシャブル領域２２は、Ｌ１キャッシュ３０及びＬ２キャッシュ４０などのキャッシュメモリにキャッシュすべきでないデータを保持することができることを示すアンキャッシャブル属性に属する領域である。アンキャッシャブル領域２２は、バースト可領域２３とバースト不可領域２４とから構成される。
【００６４】
バースト可領域２３は、キャッシュメモリにキャッシュすべきでなく、かつ、バースト転送すべきデータを保持することができることを示すバースト可属性に属する領域である。バースト転送は、データを一括して転送することであり、バーストリード及びバーストライトなどである。バースト可領域２３は、例えば、リードセンシティブでない領域である。
【００６５】
バースト不可領域２４は、キャッシュメモリにキャッシュすべきでなく、かつ、バースト転送すべきデータを保持することができないことを示すバースト不可属性に属する領域である。バースト不可領域２４は、例えば、リードセンシティブな領域である。
【００６６】
以上のように、本実施の形態のメインメモリ２０には、領域ごとに、３つの排他的な属性のいずれか１つが設定されている。
【００６７】
続いて、本実施の形態のバッファメモリ装置の構成について説明する。
【００６８】
図３は、本実施の形態のバッファメモリ装置の構成を示すブロック図である。同図のバッファメモリ装置１００は、図１に示すＬ２キャッシュ４０と同一のチップに備えられるとし、プロセッサ１０とメインメモリ２０との間でデータの転送処理を実行する。なお、図３では、プロセッサ１０がＬ１キャッシュ３０を備えるものとし、Ｌ１キャッシュ３０は図示していない。
【００６９】
図３に示すように、バッファメモリ装置１００は、属性取得部１１０と、属性判定部１２０と、データ読出部１３０と、バッファメモリ１４０と、キャッシュメモリ１５０と、テーブル保持部１６０と、属性設定部１７０とを備える。バッファメモリ装置１００は、プロセッサ１０から出力されるリード要求に対応するデータを、メインメモリ２０、バッファメモリ１４０又はキャッシュメモリ１５０から読み出し、読み出したデータをプロセッサ１０に転送する。
【００７０】
属性取得部１１０は、リード要求に含まれるアドレス（以下、リードアドレスとも記載する）が示す領域の属性を取得する。具体的には、属性取得部１１０は、テーブル保持部１６０に保持される領域属性テーブル１６１を参照することで、リードアドレスが示す領域の属性を取得する。
【００７１】
ここで、領域の属性には、上述のようにキャッシャブル属性、バースト可属性、及び、バースト不可属性の３つの属性がある。キャッシャブル属性は、領域がキャッシャブル領域２１に属することを示す。バースト可属性は、領域がアンキャッシャブル領域２２のバースト可領域２３に属することを示す。バースト不可属性は、領域がアンキャッシャブル領域２２のバースト不可領域２４に属することを示す。
【００７２】
属性判定部１２０は、属性取得部１１０で取得された属性が、キャッシャブル属性、バースト可属性、及び、バースト不可属性のいずれであるかを判定する。
【００７３】
データ読出部１３０は、属性判定部１２０の判定結果に応じて、メインメモリ２０、バッファメモリ１４０又はキャッシュメモリ１５０から、リード要求に対応するデータを読み出す。ここでは、データ読出部１３０は、第１データ読出部１３１と、第２データ読出部１３２と、第３データ読出部１３３とを備える。
【００７４】
第１データ読出部１３１は、属性判定部１２０によって、リード要求に含まれるアドレスが示す領域の属性がバースト可属性であると判定された場合に、リードアドレスが示す領域に保持されているデータの読み出しを実行する。さらに、第１データ読出部１３１は、リード要求がヒットしたかミスしたかを判定する。
【００７５】
リード要求がヒットした場合、第１データ読出部１３１は、バッファメモリ１４０から、リードアドレスに対応するデータ（以下、リードデータとも記載する）を読み出し、読み出したデータをプロセッサ１０に出力する。リード要求がミスした場合、第１データ読出部１３１は、メインメモリ２０から、リードデータを含むデータをバーストリードし、バーストリードしたデータ（以下、バーストリードデータとも記載する）をバッファメモリ１４０に格納する。そして、格納したバーストリードデータのうち、リードデータのみをプロセッサ１０に出力する。なお、バーストリードデータのバッファメモリ１４０への格納と、リードデータのプロセッサ１０への出力とは、並列して実行されてもよい。
【００７６】
ここで、バーストリードデータは、例えば、リードデータと、当該リードデータと共に使用される可能性の高いデータとである。一般的には、リードアドレスに連続するアドレスに対応するデータなどである。なお、リードデータ及びバーストリードデータのサイズは、プロセッサ１０、メインメモリ２０及びバッファメモリ装置１００などの間のデータバス幅、バッファメモリ１４０のメモリサイズ、又は、プロセッサ１０からの指示などに基づいて決定される。ここでは、一例として、リードデータのサイズは４バイトとし、バーストリードデータのサイズは６４バイトとする。
【００７７】
なお、本実施の形態では、キャッシュメモリの場合と同様に、リードアドレスに対応するデータがバッファメモリ１４０に既に保持されている場合を“リード要求がヒットした”、リードアドレスに対応するデータがバッファメモリ１４０に保持されていない場合を“リード要求がミスした”という。
【００７８】
第２データ読出部１３２は、属性判定部１２０によって、リード要求に含まれるアドレスが示す領域の属性がバースト不可属性であると判定された場合に、データの読み出しを実行する。具体的には、第２データ読出部１３２は、リードアドレスに対応するデータ（リードデータ）のみを、メインメモリ２０から読み出し、読み出したリードデータをプロセッサ１０に出力する。
【００７９】
第３データ読出部１３３は、属性判定部１２０によって、リード要求に含まれるアドレスが示す領域の属性がキャッシャブル属性であると判定された場合に、データの読み出しを実行する。さらに、第３データ読出部１３３は、リード要求がヒットしたかミスしたかを判定する。
【００８０】
具体的には、リード要求がヒットした場合、第３データ読出部１３３は、キャッシュメモリ１５０から、リードアドレスに対応するデータ（リードデータ）を読み出し、読み出したリードデータをプロセッサ１０に出力する。リード要求がミスした場合、第３データ読出部１３３は、メインメモリ２０からリードデータを読み出し、読み出したリードデータをキャッシュメモリ１５０に格納する。そして、格納したリードデータをプロセッサ１０に転送する。なお、メインメモリ２０から読み出したリードデータのキャッシュメモリ１５０への格納と、プロセッサ１０への出力とは、並列して実行されてもよい。
【００８１】
バッファメモリ１４０は、第１データ読出部１３１によって、メインメモリ２０からバーストリードされたデータ（バーストリードデータ）を保持するメモリなどの記憶部である。バッファメモリ１４０は、バーストリードデータと、各データに対応するアドレスとを対応付けて記憶する。
【００８２】
キャッシュメモリ１５０は、第３データ読出部１３３によって、メインメモリ２０から読み出されたデータを保持するキャッシュメモリである。キャッシュメモリ１５０は、アドレスを記憶するタグ領域と、データを記憶するデータ領域とを含む。本実施の形態では、キャッシュメモリ１５０は、図１のＬ２キャッシュ４０に相当する。
【００８３】
テーブル保持部１６０は、メインメモリのアドレスと、領域の属性とを対応付けた領域属性テーブル１６１を保持するメモリなどの記憶部である。領域属性テーブル１６１は、属性設定部１７０によって生成及び変更される。
【００８４】
ここで、図４を参照する。図４は、本実施の形態の領域属性テーブル１６１の一例を示す図である。同図に示すように、領域属性テーブル１６１は、メインメモリ２０の物理アドレスと、当該物理アドレスが示す領域の属性とを対応付けたテーブルである。同図の“キャッシャブル”は、キャッシャブル属性を示し、“バースト可”は、バースト可属性を示し、“バースト不可”は、バースト不可属性を示す。例えば、図４の例では、リードアドレスが“物理アドレス３”である場合、属性取得部１１０は、領域属性テーブル１６１を参照することで、当該リードアドレスが示す領域の属性として、バースト不可属性を取得する。
【００８５】
図３に戻ると、属性設定部１７０は、メインメモリ２０のアドレスに対応する属性を、キャッシャブル属性、バースト可属性、及び、バースト不可属性のいずれか１つに設定する。これらの属性は、プロセッサ１０からの指示に基づいて、メインメモリ２０に記憶されているデータの特性などに応じて設定される。
【００８６】
例えば、属性設定部１７０は、アンキャッシャブル領域のうちリードセンシティブな領域をバースト不可属性に設定する。または、属性設定部１７０は、データの利用可能性に応じて各アドレスに属性を設定する。具体的には、属性設定部１７０は、連続的に読み出され、かつ、何度も利用される可能性が高いデータを記憶している領域を示すアドレスには、キャッシャブル属性を設定する。連続的に読み出されるが、一度しか利用されない可能性が高いデータを記憶している領域を示すアドレスには、バースト可属性を設定する。その他のデータを記憶している領域を示すアドレスには、バースト不可属性を設定する。また、データを記憶していない領域を示すアドレスには、任意に、又は、必要に応じて、それぞれの属性を設定する。
【００８７】
ここで、本実施の形態のバッファメモリ１４０とキャッシュメモリ１５０との構成について説明する。図５は、本実施の形態のバッファメモリ１４０とキャッシュメモリ１５０との詳細を示す図である。
【００８８】
同図に示すように、バッファメモリ１４０は、メインメモリ２０のアドレス（物理アドレス）と、当該アドレスが示す領域から第１データ読出部１３１によって読み出されたデータとを対応付けて記憶する。バッファメモリ１４０は、所定バイト数（例えば６４バイト）のデータを複数個（例えば、８個）保持することができる。なお、本実施の形態では、バッファメモリ１４０は、メインメモリ２０からのデータの読み出しにのみ利用される。すなわち、メインメモリ２０へのデータの書き込みには利用されない。バッファメモリ１４０は、読み出される可能性が高いデータを予め保持しておくＰＦＢ（Ｐｒｅｆｅｔｃｈ  Ｂｕｆｆｅｒ）である。
【００８９】
キャッシュメモリ１５０は、例えば、同図に示すような４ウェイ・セット・アソシエイティブ方式のキャッシュメモリである。キャッシュメモリ１５０は、同じ構成を有する４つのウェイを有し、各ウェイは、複数個（例えば、１０２４個）のキャッシュエントリを有する。１つのキャッシュエントリは、バリッドフラグＶと、タグと、ラインデータと、ダーティフラグＤとを有する。
【００９０】
バリッドフラグＶは、当該キャッシュエントリのデータが有効であるか否かを示すフラグである。タグは、タグアドレスのコピーである。ラインデータは、タグアドレス及びセットインデックスにより特定されるブロック中の所定バイト数のデータ（例えば、６４バイトのデータ）のコピーである。ダーティフラグＤは、キャッシュされたデータをメインメモリに書き戻す必要があるか否かを示すフラグである。
【００９１】
以上に示すように、本実施の形態のバッファメモリ１４０は、キャッシュメモリのタグとデータとの関係と同じように、アドレスとデータとを対応付けて記憶する。
【００９２】
なお、キャッシュメモリ１５０が有するウェイの数は４個に限らない。１つのウェイが有するキャッシュエントリの個数、及び、１つのキャッシュエントリが有するラインデータのバイト数もいかなる値でもよい。また、キャッシュメモリ１５０は、他の方式のキャッシュメモリでもよい。例えば、ダイレクト・マップ方式、又は、フル・アソシエイティブ方式でもよい。
【００９３】
以上の構成に示すように、本実施の形態のバッファメモリ装置１００は、キャッシャブル領域２１とアンキャッシャブル領域２２とからなるメインメモリ２０のアンキャッシャブル領域２２のうち、バーストリードすべきデータを保持するバースト不可領域２４からバーストリードされたデータを保持するバッファメモリ１４０を備える。
【００９４】
これにより、リード要求に応じて、当該リード要求に対応するデータと、その後に読み出される可能性の高いデータとをバーストリードするので、メモリアクセスを高速化することができる。
【００９５】
なお、図３に示すバッファメモリ装置１００は、ライト要求に対応するライトデータの書き込み処理を行う処理部をも備えるものとする。
【００９６】
例えば、属性取得部１１０は、リード要求と同様にライト要求に含まれるライトアドレスが示す領域の属性を取得する。属性判定部１２０は、属性取得部１１０で取得された属性が、キャッシャブル属性、バースト可属性、及び、バースト不可属性のいずれであるかを判定する。そして、データ書込部（図示せず）が、判定結果に基づいて、キャッシュメモリ１５０、又は、メインメモリ２０へライトデータを書き込む。
【００９７】
具体的には、属性がキャッシャブル属性である場合に、キャッシュメモリ１５０へライトデータを書き込む。また、属性がアンキャッシャブル属性である場合に、メインメモリ２０へライトデータを書き込む。このとき、キャッシュメモリ１５０への書き込みの際には、ライト要求がヒットするかミスするかを判定し、ヒットした場合にキャッシュメモリ１５０へライトデータを書き込み、ミスした場合にはメインメモリ２０へライトデータを書き込む。
【００９８】
以上のように、本実施の形態のバッファメモリ装置１００は、プロセッサ１０からのライト要求に応じて、ライトデータの書き込みも行うことができる。
【００９９】
なお、このとき、データ読出部１３０は、ライトアドレスがバッファメモリ１４０に保持されているデータに対応するアドレスと一致するか否かを判断し、ライトアドレスが一致する場合、バッファメモリ１４０に保持されているデータを無効化してもよい。例えば、対応するデータに無効であることを示すフラグを立てることで、又は、対応するデータをバッファメモリ１４０から消去することで、データを無効化する。
【０１００】
これにより、メインメモリ２０とバッファメモリ１４０との間でデータのコヒーレンシを確保することができる。すなわち、最新のデータがメインメモリ２０にのみ書き込まれていて、バッファメモリ１４０に書き込まれたデータが古くなった場合に、バッファメモリ１４０から古いデータを読み出すことを防ぐことができる。
【０１０１】
次に、本実施の形態のバッファメモリ装置１００の動作について図６〜図９を用いて説明する。図６は、本実施の形態のバッファメモリ装置１００の動作を示すフローチャートである。
【０１０２】
まず、バッファメモリ装置１００は、プロセッサ１０からリード要求を取得することで、本実施の形態のリード処理を実行する。
【０１０３】
属性取得部１１０は、領域属性テーブル１６１を参照することで、リードアドレスが示す領域の属性を取得する（Ｓ１０１）。そして、属性判定部１２０は、属性取得部１１０によって取得された属性が、キャッシャブル属性、バースト可属性、及び、バースト不可属性のいずれであるかを判定する（Ｓ１０２）。
【０１０４】
リードアドレスが示す領域の属性が、バースト可属性であると判定された場合（Ｓ１０２で“アンキャッシャブル（バースト可）”）、第１データ読出部１３１は、第１転送処理を実行する（Ｓ１０３）。第１転送処理は、属性がバースト可属性である場合に実行される処理であり、プロセッサ１０にデータを転送する際に、メインメモリ２０からデータをバーストリードし、バーストリードしたデータをバッファメモリ１４０に格納する処理である。
【０１０５】
ここで、図７を参照する。図７は、本実施の形態において、属性がバースト可属性である場合の転送処理の詳細を示すフローチャートである。
【０１０６】
第１データ読出部１３１は、リード要求がヒットしたかミスしたかを判断する（Ｓ２０１）。リード要求がミスした場合（Ｓ２０１でＮｏ）、第１データ読出部１３１は、メインメモリ２０から、リードデータを含むバーストリードデータをバーストリードする（Ｓ２０２）。そして、第１データ読出部１３１は、読み出したバーストリードデータをバッファメモリ１４０に格納する（Ｓ２０３）。さらに、第１データ読出部１３１は、バッファメモリ１４０からリードデータを読み出し（Ｓ２０４）、読み出したリードデータをプロセッサ１０に出力する（Ｓ２０５）。なお、このとき、バーストリードデータのバッファメモリ１４０への格納と、リードデータのプロセッサ１０への出力とは、同時に実行してもよい。
【０１０７】
リード要求がヒットした場合（Ｓ２０１でＹｅｓ）、第１データ読出部１３１は、バッファメモリ１４０から、リード要求に対応するリードデータを読み出す（Ｓ２０４）。そして、第１データ読出部１３１は、読み出したリードデータをプロセッサ１０に出力する（Ｓ２０５）。
【０１０８】
図６に戻ると、リードアドレスが示す領域の属性が、バースト不可属性であると判定された場合（Ｓ１０２で“アンキャッシャブル（バースト不可）”）、第２データ読出部１３２は、第２転送処理を実行する（Ｓ１０４）。第２転送処理は、属性がバースト不可属性である場合に実行される処理であり、メインメモリ２０からデータを読み出し、読み出したデータをプロセッサ１０に転送する処理である。
【０１０９】
ここで、図８を参照する。図８は、本実施の形態において、属性がバースト不可属性である場合の転送処理の詳細を示すフローチャートである。
【０１１０】
第２データ読出部１３２は、メインメモリ２０から、リードデータを読み出す（Ｓ３０１）。そして、第２データ読出部１３２は、読み出したリードデータをプロセッサ１０に出力する（Ｓ３０２）。
【０１１１】
再び図６に戻ると、リードアドレスが示す領域の属性が、キャッシャブル属性であると判定された場合（Ｓ１０２で“キャッシャブル”）、第３データ読出部１３３は、第３転送処理を実行する（Ｓ１０５）。第３転送処理は、属性がキャッシャブル属性である場合に実行される処理であり、プロセッサ１０にデータを転送する際に、メインメモリ２０からデータを読み出し、読み出したデータをキャッシュメモリ１５０に格納する処理である。
【０１１２】
ここで、図９を参照する。図９は、本実施の形態において、属性がキャッシャブル属性である場合の転送処理の詳細を示すフローチャートである。
【０１１３】
第３データ読出部１３３は、リード要求がヒットしたかミスしたかを判断する（Ｓ４０１）。リード要求がミスした場合（Ｓ４０１でＮｏ）、第３データ読出部１３３は、メインメモリ２０から、リードデータを読み出す（Ｓ４０２）。そして、第３データ読出部１３３は、読み出したリードデータをキャッシュメモリ１５０に格納する（Ｓ４０３）。さらに、第３データ読出部１３３は、キャッシュメモリ１５０からリードデータを読み出し（Ｓ４０４）、読み出したリードデータをプロセッサ１０に出力する（Ｓ４０５）。なお、このとき、リードデータのキャッシュメモリ１５０への格納と、プロセッサ１０への出力とは、同時に実行してもよい。
【０１１４】
リード要求がヒットした場合（Ｓ４０１でＹｅｓ）、第３データ読出部１３３は、キャッシュメモリ１５０から、リード要求に対応するリードデータを読み出す（Ｓ４０４）。そして、第３データ読出部１３３は、読み出したリードデータをプロセッサ１０に出力する（Ｓ４０５）。
【０１１５】
以上のようにして、本実施の形態のバッファメモリ装置１００は、リードアドレスが示す領域がいずれの属性の領域であるかを判定し、判定結果に応じてデータの読み出しを実行する。
【０１１６】
以上のように、本実施の形態のバッファメモリ装置１００は、キャッシャブル領域２１とアンキャッシャブル領域２２とからなるメインメモリ２０のアンキャッシャブル領域２２のうち、バーストリードすべきデータを保持するバースト不可領域２４からバーストリードされたデータを保持するバッファメモリ１４０を備える。そして、リードアドレスが示す領域がいずれの属性の領域であるかを判定し、判定結果に応じてデータの読み出しを実行する。このとき、属性がバースト可属性である場合には、メインメモリ２０からバーストリードしたデータをバッファメモリ１４０に格納する。
【０１１７】
これにより、リード専用のバッファメモリ１４０を使用することで、キャッシュメモリを使用することを防ぐことができるので、キャッシュメモリには使用頻度の高いと予想されるデータを保持させておくことができる。さらに、メインメモリ２０にバーストリードを不可にする領域を設定することで、必要以上のデータを読み出すことで生じる不具合を防ぐことができ、さらに、バーストリードを可能にする領域を設定することで、メモリアクセスを高速化することができる。
【０１１８】
（実施の形態２）
本実施の形態のバッファメモリ装置は、リード要求に含まれるアドレスが示す領域の属性がキャッシャブル属性である場合に、当該リード要求に対応するデータを含むデータをバーストリードする。これにより、さらに、メモリアクセスを高速化させることができる。
【０１１９】
図１０は、本実施の形態のバッファメモリ装置の構成を示すブロック図である。同図に示すバッファメモリ装置２００は、図３のバッファメモリ装置１００と比べて、データ読出部１３０の代わりにデータ読出部２３０を備える点が異なっている。なお、実施の形態１と同じ構成要素については、同じ符号を付し、以下では、異なる点を中心に説明し、同じ点の説明を省略する場合がある。
【０１２０】
データ読出部２３０は、属性判定部１２０の判定結果に応じて、メインメモリ２０、バッファメモリ１４０又はキャッシュメモリ１５０から、リード要求に対応するデータを読み出す。ここでは、データ読出部２３０は、第１データ読出部１３１と、第２データ読出部１３２と、第３データ読出部２３３とを備える。
【０１２１】
第３データ読出部２３３は、属性判定部１２０によって、リード要求に含まれるアドレスに対応する領域の属性がキャッシャブル属性であると判定された場合に、データの読み出しを実行する。さらに、第３データ読出部２３３は、リード要求がヒットしたかミスしたかを判定する。
【０１２２】
具体的には、リード要求がヒットした場合、第３データ読出部２３３は、キャッシュメモリ１５０又はバッファメモリ１４０から、リードアドレスに対応するデータを読み出し、読み出したデータをプロセッサ１０に出力する。リード要求がミスした場合、第３データ読出部２３３は、メインメモリ２０からリードデータを含むデータをバーストリードし、バーストリードされたデータ（バーストリードデータ）をキャッシュメモリ１５０とバッファメモリ１４０とに格納する。
【０１２３】
例えば、バーストリードデータのうちリードデータを含むデータをキャッシュメモリ１５０に格納し、キャッシュメモリ１５０に保持されたデータを除く、バーストリードデータの残りのデータをバッファメモリ１４０に格納する。そして、格納したバーストリードデータのうちリードデータをキャッシュメモリ１５０から読み出し、読み出したリードデータをプロセッサ１０に出力する。なお、バーストリードデータのキャッシュメモリ１５０及びバッファメモリ１４０への格納と、リードデータのプロセッサ１０への出力とは、並列して実行されてもよい。
【０１２４】
例えば、プロセッサ１０から６４バイトのリードデータのリード要求がされた場合、第３データ読出部２３３は、当該リードデータを含む１２８バイトのデータをバーストリードする。そして、第３データ読出部２３３は、１２８バイトのバーストリードデータのうち、６４バイトの当該リードデータをキャッシュメモリ１５０に格納するとともに、残りの６４バイトのデータをバッファメモリ１４０に格納する。
【０１２５】
以上の構成に示すように、本実施の形態のバッファメモリ装置２００は、リードアドレスが示す領域の属性がキャッシャブル属性であると判定された場合に、当該リードアドレスに対応するデータを含むデータをバーストリードし、バーストリードされたデータをキャッシュメモリ１５０とバッファメモリ１４０とに格納する。
【０１２６】
これにより、キャッシュ時にも、リード要求に応じて、当該リード要求に対応するデータと、その後に読み出される可能性の高いデータとをバーストリードするので、メモリアクセスをより高速化することができる。
【０１２７】
続いて、本実施の形態のバッファメモリ装置２００の動作について説明する。本実施の形態のバッファメモリ装置２００は、実施の形態１のバッファメモリ装置１００の動作と比較して、属性がキャッシャブル属性であると判定された場合の処理（図６のＳ１０５、図９）が異なる。したがって、以下では、異なる点を中心に説明し、同じ点は説明を省略する場合がある。
【０１２８】
まず、バッファメモリ装置２００は、実施の形態１と同様に、プロセッサ１０からリード要求を取得することで、本実施の形態のリード処理が実行される。
【０１２９】
図６に示すように、属性取得部１１０は、領域属性テーブル１６１を参照することで、リードアドレスが示す領域の属性を取得する（Ｓ１０１）。そして、属性判定部１２０は、属性取得部１１０によって取得された属性が、キャッシャブル属性、バースト可属性、及び、バースト不可属性のいずれであるかを判定する（Ｓ１０２）。
【０１３０】
属性判定部１２０によって、リードアドレスが示す領域の属性がバースト可属性であると判定された場合（Ｓ１０２で“アンキャッシャブル（バースト可）”）、第１転送処理を実行する（Ｓ１０３：詳細は図７）。リードアドレスが示す領域の属性がバースト不可属性であると判定された場合（Ｓ１０２で“アンキャッシャブル（バースト不可）”）、第２転送処理を実行する（Ｓ１０４：詳細は図８）。
【０１３１】
リードアドレスが示す領域の属性が、キャッシャブル属性であると判定された場合（Ｓ１０２で“キャッシャブル”）、第３データ読出部２３３は、第３転送処理を実行する（Ｓ１０５）。第３転送処理は、属性がキャッシャブル属性である場合に実行される処理であり、プロセッサ１０にデータを転送する際に、メインメモリ２０からデータを読み出し、読み出したデータをキャッシュメモリ１５０に格納する処理である。
【０１３２】
ここで、図１１を参照する。図１１は、本実施の形態において、属性がキャッシャブル属性である場合の転送処理の詳細を示すフローチャートである。
【０１３３】
第３データ読出部２３３は、リード要求がヒットしたかミスしたかを判断する（Ｓ５０１）。リード要求がミスした場合（Ｓ５０１でＮｏ）、第３データ読出部２３３は、メインメモリ２０から、リードデータ含むデータ（バーストリードデータ）をバーストリードする（Ｓ５０２）。そして、第３データ読出部２３３は、バーストリードデータをキャッシュメモリ１５０とバッファメモリ１４０とに格納する（Ｓ５０３）。さらに、第３データ読出部２３３は、キャッシュメモリ１５０からリードデータを読み出し（Ｓ５０４）、読み出したリードデータをプロセッサ１０に出力する（Ｓ５０５）。なお、このとき、バーストリードデータのキャッシュメモリ１５０への格納と、リードデータのプロセッサ１０への出力とは、同時に実行してもよい。
【０１３４】
リード要求がヒットした場合（Ｓ５０１でＹｅｓ）、第３データ読出部２３３は、キャッシュメモリ１５０又はバッファメモリ１４０から、リード要求に対応するリードデータを読み出す（Ｓ５０４）。そして、第３データ読出部２３３は、読み出したリードデータをプロセッサ１０に出力する（Ｓ５０５）。
【０１３５】
以上のように、本実施の形態のバッファメモリ装置２００は、リードアドレスが示す領域の属性がキャッシャブル属性であると判定された場合に、当該リードアドレスに対応するデータを含むデータをキャッシュメモリ１５０とバッファメモリ１４０とにバーストリードする。
【０１３６】
これにより、プロセッサ１０からキャッシャブル領域に対するリード要求が出力された場合にもバッファメモリ１４０を利用することができる。すなわち、リード要求に対応するデータより多くのデータをバーストリードし、バーストリードされたデータをバッファメモリ１４０に格納しておくことで、リード時のメモリアクセスを高速化することができる。
【０１３７】
（実施の形態３）
本実施の形態のメモリシステムは、メインメモリを管理するＭＭＵ（Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ）、又は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）がメインメモリの領域の属性を設定する。
【０１３８】
図１２は、本実施の形態のメモリシステムの構成を示すブロック図である。同図のメモリシステム３００は、プロセッサ３１０ａ及び３１０ｂと、メインメモリ３２０と、Ｌ２キャッシュ３３０とを備える。なお、本実施の形態のメモリシステム３００は、プロセッサ３１０ａとプロセッサ３１０ｂとを含むマルチプロセッサを備えるシステムである。
【０１３９】
プロセッサ３１０ａは、プロセッサ３１０ａは、Ｌ１キャッシュ３１１と、ＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）３１２とを備え、メインメモリ３２０にメモリアクセス要求（リード要求又はライト要求）を出力するＣＰＵなどである。さらに、プロセッサ３１０ａは、内蔵された又は外部に備えられたＭＭＵとＯＳとを用いて、メインメモリ３２０の管理を行う。
【０１４０】
具体的には、プロセッサ３１０ａは、メインメモリ３２０の物理アドレスと論理アドレスとを対応付けたアドレス変換テーブルの管理を行う。さらに、メインメモリ３２０の物理アドレスが示す領域の属性を設定し、設定した属性と物理アドレスとを対応付けて、アドレス変換テーブルを保持するＴＬＢ３１２に記憶させる。なお、プロセッサ３１０ａは、実施の形態１及び２の属性設定部１７０に相当する。
【０１４１】
プロセッサ３１０ｂは、プロセッサ３１０ａと同じ構成のプロセッサである。なお、プロセッサ３１０ａ及び３１０ｂは、物理的に異なる２つのプロセッサでもよく、１つのプロセッサをＯＳにより仮想的に分割された２つの仮想プロセッサでもよい。
【０１４２】
また、Ｌ１キャッシュ３１１とＴＬＢ３１２とは、プロセッサごとに備えられてもよい。または、Ｌ１キャッシュ３１１とＴＬＢ３１２とは、プロセッサ３１０ａとＬ２キャッシュ３３０との間に備えられてもよい。
【０１４３】
Ｌ１キャッシュ３１１は、プロセッサ３１０ａが発行するメモリアクセス要求を取得し、取得したメモリアクセス要求（リード要求又はライト要求）がヒットしたかミスしたかを判定する。Ｌ１キャッシュ３１１は、実施の形態１及び２のＬ１キャッシュ３０に相当する。
【０１４４】
リード要求がヒットした場合、Ｌ１キャッシュ３１１は、当該リード要求に含まれるリードアドレスに対応するデータをＬ１キャッシュ３１１内部から読み出し、読み出したデータをプロセッサ３１０ａに出力する。ライト要求がヒットした場合、Ｌ１キャッシュ３１１は、当該ライト要求と同時にプロセッサ３１０ａから出力されるデータをＬ１キャッシュ３１１内部に書き込む。
【０１４５】
リード要求がミスした場合、Ｌ１キャッシュ３１１は、Ｌ２キャッシュ３３０又はメインメモリ３２０から当該リード要求に対応するデータを読み出し、読み出したデータをプロセッサ３１０ａに出力する。ライト要求がミスした場合、Ｌ１キャッシュ３１１は、Ｌ２キャッシュ３３０又はメインメモリ３２０に、当該ライト要求と同時にプロセッサ３１０ａから出力されるデータを書き込む。
【０１４６】
ＴＬＢ３１２は、アドレス変換テーブル３１３を記憶するキャッシュメモリである。なお、ＴＬＢ３１２は、実施の形態１及び２のテーブル保持部１６０に相当する。
【０１４７】
アドレス変換テーブル３１３は、論理アドレスと物理アドレスと当該物理アドレスが示す領域の属性とを対応付けたテーブルである。なお、アドレス変換テーブル３１３は、実施の形態１及び２の領域属性テーブル１６１に相当する。
【０１４８】
ここで、図１３を参照する。図１３は、本実施の形態のアドレス変換テーブルの一例を示す図である。同図に示すように、アドレス変換テーブル３１３は、論理アドレスと、物理アドレスと、アクセス許可属性と、メモリ属性とを対応付けたテーブルである。
【０１４９】
論理アドレスは、プロセッサ３１０ａが仮想的に設定したアドレスであり、仮想アドレスともいう。物理アドレスは、メインメモリ３２０の実際の書き込み又は読み出し領域を示すアドレスであり、実アドレスともいう。アクセス許可属性は、ＯＳなどの管理部のみがアクセス可能な領域であることを示す“特権モード”と、一般的なプログラムなどでもアクセス可能な領域であることを示す“ユーザモード”との２つの属性のいずれであるかを示す。メモリ属性は、領域が、キャッシャブル領域、バースト可領域、及び、バースト不可領域のいずれであるかを示す。
【０１５０】
図１３の例では、例えば、“論理アドレスＣ”は、メインメモリ３２０内の“物理アドレス３”が示す領域を示し、当該領域は、“ユーザモード”であり、かつ、“バースト不可領域”であることを示している。よって、“論理アドレスＣ”が示す領域からは、データをバーストリードすることができない。
【０１５１】
図１２に戻ると、メインメモリ３２０は、プログラム又はデータなどを記憶するＳＤＲＡＭなどの記憶部である。プロセッサ３１０ａ及び３１０ｂなどから出力されるメモリアクセス要求（リード要求又はライト要求）に応じて、メインメモリ３２０からのデータの読み出し、又は、メインメモリ３２０へのデータの書き込みが実行される。メインメモリ３２０は、実施の形態１及び２のメインメモリ２０に相当する。
【０１５２】
Ｌ２キャッシュ３３０は、プロセッサ３１０ａ及び３１０ｂから出力されるメモリアクセス要求を取得し、取得したメモリアクセス要求がヒットしたかミスしたかを判定する。Ｌ２キャッシュ３３０は、実施の形態１及び２のＬ２キャッシュ４０（キャッシュメモリ１５０）に相当する。
【０１５３】
なお、以下では、簡単のため、Ｌ２キャッシュ３３０に入力されるメモリアクセス要求は、プロセッサ３１０ａが発行したと仮定する。ただし、メモリアクセス要求は、他のプロセッサ（プロセッサ３１０ｂなど）、又は、ＤＭＡＣ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ）などで発行されたものでもよい。
【０１５４】
リード要求がヒットした場合、Ｌ２キャッシュ３３０は、当該リード要求に含まれるリードアドレスに対応するデータをＬ２キャッシュ３３０内部から読み出し、読み出したデータをプロセッサ３１０ａなどに出力する。ライト要求がヒットした場合、Ｌ２キャッシュ３３０は、当該ライト要求と同時にプロセッサ３１０ａから出力されるデータをＬ２キャッシュ３３０内部に書き込む。
【０１５５】
リード要求がミスした場合、Ｌ１キャッシュ３１１は、Ｌ２キャッシュ３３０又はメインメモリ３２０から当該リード要求に対応するデータを読み出し、読み出したデータをプロセッサ３１０ａに出力する。ライト要求がミスした場合、Ｌ１キャッシュ３１１は、Ｌ２キャッシュ３３０又はメインメモリ３２０に、当該ライト要求と同時にプロセッサ３１０ａから出力されるデータを書き込む。
【０１５６】
Ｌ２キャッシュ３３０は、キュー３３１ａ及び３３１ｂと、属性判定部３３２ａ及び３３２ｂと、セレクタ３３３ａ及び３３３ｂと、ＰＦＢ３３４と、キャッシュメモリ３３５と、メモリインタフェース３３６とを備える。
【０１５７】
キュー３３１ａは、プロセッサ３１０ａから出力されるメモリアクセス要求を一時的に保持する先入れ先出し方式のメモリ（ＦＩＦＯメモリ：Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）である。なお、保持されるメモリアクセス要求には、アドレスと共に、当該アドレスが示す領域の属性も含まれている。
【０１５８】
キュー３３１ｂは、キュー３３１ａと同じ構成であり、プロセッサ３１０ｂから出力されるメモリアクセス要求を一時的に保持するＦＩＦＯメモリである。
【０１５９】
なお、キュー３３１ａ及び３３１ｂは、実施の形態１及び２の属性取得部１１０に相当する。
【０１６０】
属性判定部３３２ａは、キュー３３１ａに保持されたメモリアクセス要求を読み出し、読み出したメモリアクセス要求に含まれる属性が、キャッシャブル属性、バースト可属性、及び、バースト不可属性のいずれであるかを判定する。そして、判定結果に従って、属性判定部３３２ａは、セレクタ３３３ａ又は３３３ｂとメモリインタフェース３３６とを介して、ＰＦＢ３３４とキャッシュメモリ３３５とに、又は、メモリインタフェース３３６にメモリアクセス要求を出力する。
【０１６１】
具体的には、属性がキャッシャブル属性又はバースト可属性であると判定された場合、属性判定部３３２ａは、セレクタ３３３ａとメモリインタフェース３３６とを介して、ＰＦＢ３３４とキャッシュメモリ３３５とにメモリアクセス要求を出力する。属性がバースト不可属性であると判定された場合、属性判定部３３２ａは、セレクタ３３３ｂとメモリインタフェース３３６とを介して、メインメモリ３２０にメモリアクセス要求を出力する。
【０１６２】
属性判定部３３２ｂは、属性判定部３３２ａと同じ構成であり、キュー３３１ｂに保持されたメモリアクセス要求を読み出し、読み出したメモリアクセス要求に含まれる属性を判定する。
【０１６３】
なお、属性判定部３３２ａ及び３３２ｂは、実施の形態１及び２の属性判定部１２０に相当する。
【０１６４】
セレクタ３３３ａ及び３３３ｂは、２つのキュー３３１ａ及び３３１ｂから、属性判定部３３２ａ又は３３２ｂを介して入力される複数のメモリアクセス要求のどれを調停し、調停したメモリアクセス要求を、メモリインタフェース３３６を介して、ＰＦＢ３３４、キャッシュメモリ３３５及びメインメモリ３２０のいずれに出力するかを選択する。
【０１６５】
ＰＦＢ３３４は、メインメモリ３２０のアドレスと、当該アドレスが示す領域から読み出されたデータとを対応付けて記憶するバッファメモリである。ＰＦＢ３３４は、プロセッサ３１０ａなどから出力されるリード要求に応じて、プロセッサ３１０ａなどが読み出す可能性が高いデータを予め保持するプリフェッチ処理に利用される。なお、ＰＦＢ３３４は、実施の形態１及び２のバッファメモリ１４０に相当する。
【０１６６】
キャッシュメモリ３３５は、メインメモリ３２０から読み出されたデータを保持するキャッシュメモリである。キャッシュメモリ３３５は、実施の形態１及び２のキャッシュメモリ１５０に相当する。
【０１６７】
メモリインタフェース３３６は、リード要求がヒットするかミスするかを判定し、判定結果に応じてメインメモリ３２０、ＰＦＢ３３４、又は、キャッシュメモリ３３５からのデータの読み出しを実行する。メモリインタフェース３３６は、実施の形態１及び２のデータ読出部１３０（２３０）に相当する。
【０１６８】
例えば、メモリインタフェース３３６は、リード要求に含まれるリードアドレスが示す領域の属性がバースト不可属性である場合、メインメモリ３２０からデータを読み出し、読み出したデータをプロセッサ３１０ａに出力する。
【０１６９】
また、メモリインタフェース３３６は、リード要求に含まれるリードアドレスが示す領域の属性がバースト可属性である場合、当該リード要求がヒットするかミスするかを判定する。リード要求がヒットした場合は、対応するリードデータをＰＦＢ３３４から読み出し、プロセッサ３１０ａに出力する。リード要求がミスした場合は、対応するリードデータを含むデータをメインメモリ３２０からバーストリードし、バーストリードしたデータをＰＦＢ３３４に書き込む。そして、ＰＦＢ３３４からリードデータを読み出し、プロセッサ３１０ａに出力する。
【０１７０】
さらに、メモリインタフェース３３６は、リード要求に含まれるリードアドレスが示す領域の属性がキャッシャブル属性である場合、当該リード要求がヒットするかミスするかを判定する。リード要求がヒットした場合は、対応するリードデータをキャッシュメモリ３３５から読み出し、プロセッサ３１０ａに出力する。リード要求がミスした場合は、対応するリードデータを含むデータをメインメモリ３２０から読み出し、読み出したデータをキャッシュメモリ３３５に書き込む。そして、キャッシュメモリ３３５からデータを読み出し、プロセッサ３１０ａに出力する。なお、このとき、実施の形態２と同様に、メインメモリ３２０からデータをバーストリードし、キャッシュメモリ３３５とＰＦＢ３３４とに格納してもよい。
【０１７１】
続いて、本実施の形態のメモリシステム３００の動作について説明する。本実施のメモリシステム３００の動作は、実施の形態１又は２と同様であるため、ここでは、図６〜図９のフローチャートに基づいて簡単に説明する。
【０１７２】
まず、プロセッサ３１０ａなどから出されたリード要求が、キュー３３１ａなどに格納される。このとき、リード要求には、アドレス変換テーブル３１３を参照することで得られる属性が含まれている（Ｓ１０１）。
【０１７３】
属性判定部３３２ａは、リード要求に含まれる属性が、キャッシャブル属性、バースト可属性、及び、バースト不可属性のいずれであるかを判定する（Ｓ１０２）。判定結果は、セレクタ３３３ａなどを介して、メモリインタフェース３３６に出力される。
【０１７４】
リード要求に含まれる属性が、バースト可属性であると判定された場合（Ｓ１０２で“アンキャッシャブル（バースト可）”）、メモリインタフェース３３６は、第１転送処理を実行する（Ｓ１０３）。
【０１７５】
図７に示すように、メモリインタフェース３３６は、リード要求がヒットしたかミスしたかを判断する（Ｓ２０１）。リード要求がミスした場合（Ｓ２０１でＮｏ）、メモリインタフェース３３６は、メインメモリ３２０から、リードデータを含むバーストリードデータをバーストリードする（Ｓ２０２）。そして、メモリインタフェース３３６は、読み出したバーストリードデータをＰＦＢ３３４に格納する（Ｓ２０３）。さらに、メモリインタフェース３３６は、ＰＦＢ３３４からリードデータを読み出し（Ｓ２０４）、読み出したリードデータをプロセッサ３１０ａに出力する（Ｓ２０５）。
【０１７６】
リード要求がヒットした場合（Ｓ２０１でＹｅｓ）、メモリインタフェース３３６は、ＰＦＢ３３４からリードデータを読み出し（Ｓ２０４）、読み出したリードデータをプロセッサ３１０ａに出力する（Ｓ２０５）。
【０１７７】
図６に戻ると、リード要求に含まれる属性が、バースト不可属性であると判定された場合（Ｓ１０２で“アンキャッシャブル（バースト不可）”）、メモリインタフェース３３６は、第２転送処理を実行する（Ｓ１０４）。
【０１７８】
図８に示すように、メモリインタフェース３３６は、メインメモリ３２０からリードデータを読み出す（Ｓ３０１）。そして、メモリインタフェース３３６は、読み出したリードデータをプロセッサ３１０ａに出力する（Ｓ３０２）。
【０１７９】
再び図６に戻ると、リード要求に含まれる属性が、キャッシャブル属性であると判定された場合（Ｓ１０２で“キャッシャブル”）、メモリインタフェース３３６は、第３転送処理を実行する（Ｓ１０５）。
【０１８０】
図９に示すように、メモリインタフェース３３６は、リード要求がヒットしたかミスしたかを判断する（Ｓ４０１）。リード要求がミスした場合（Ｓ４０１でＮｏ）、メモリインタフェース３３６は、メインメモリ３２０から、リードデータを読み出す（Ｓ４０２）。そして、メモリインタフェース３３６は、読み出したリードデータをキャッシュメモリ３３５に格納する（Ｓ４０３）。さらに、メモリインタフェース３３６は、キャッシュメモリ３３５からリードデータを読み出し（Ｓ４０４）、読み出したリードデータをプロセッサ３１０ａに出力する（Ｓ４０５）。
【０１８１】
リード要求がヒットした場合（Ｓ４０１でＹｅｓ）、メモリインタフェース３３６は、キャッシュメモリ３３５からリードデータを読み出し（Ｓ４０４）、読み出したリードデータをプロセッサ３１０ａに出力する（Ｓ４０５）。
【０１８２】
なお、リード要求に含まれる属性が、キャッシャブル属性であると判定された場合（Ｓ１０２で“キャッシャブル”）、かつ、リード要求がミスした場合（Ｓ４０１でＮｏ）、メモリインタフェース３３６は、メインメモリ３２０からリードデータを含むデータをバーストリードしてもよい（図１１に示すフローチャート）。このとき、読み出したバーストリードデータは、キャッシュメモリ３３５とＰＦＢ３３４とに格納される。
【０１８３】
以上のように、本実施の形態のメモリシステム３００では、プロセッサ内のＭＭＵなどによって属性を設定し、設定した属性をＴＬＢに保持されるアドレス変換テーブルに記憶させる。これにより、従来から備えられているアドレス変換テーブルを利用することができ、新たに属性記憶用のバッファなどを必要とせず、構成を簡素化することができる。
【０１８４】
（実施の形態４）
本実施の形態のバッファメモリ装置は、プロセッサから出力されたメインメモリへ書き込むためのデータを一時的に保持し、所定の条件が満たされた場合に、保持したデータをバーストライトする。これにより、データバスを有効に利用することができ、効率よくデータを転送することができる。
【０１８５】
図１４は、本実施の形態のバッファメモリ装置の構成を示すブロック図である。同図のバッファメモリ装置４００は、複数のプロセッサ１０ａ、１０ｂ及び１０ｃのそれぞれが発行するメモリアクセス要求に従って、複数のプロセッサ１０ａ、１０ｂ及び１０ｃとメインメモリ２０との間でデータを転送する。以下では、複数のプロセッサ１０ａ、１０ｂ及び１０ｃを特に区別して説明する必要がない場合は、プロセッサ１０と記載する。
【０１８６】
なお、バッファメモリ装置４００は、図１に示すＬ２キャッシュ４０と同一のチップに備えられるとする。また、図１で示したＬ１キャッシュ３０は、複数のプロセッサ１０ａ、１０ｂ及び１０ｃのそれぞれに備えられるものとし、図１４には図示していない。ただし、Ｌ１キャッシュ３０は、複数のプロセッサ１０ａ、１０ｂ及び１０ｃとバッファメモリ装置４００との間に備えられ、複数のプロセッサ１０ａ、１０ｂ及び１０ｃで共有されてもよい。
【０１８７】
図１４に示すように、バッファメモリ装置４００は、メモリアクセス情報取得部４１０と、判定部４２０と、制御部４３０と、データ転送部４４０と、ＳＴＢ（Ｓｔｏｒｅ  Ｂｕｆｆｅｒ）４５０ａ、４５０ｂ及び４５０ｃと、キャッシュメモリ４６０と、ＰＦＢ４７０とを備える。なお、以下では、ＳＴＢ４５０ａ、４５０ｂ及び４５０ｃを特に区別して説明する必要がない場合は、ＳＴＢ４５０と記載する。
【０１８８】
メモリアクセス情報取得部４１０は、プロセッサ１０からメモリアクセス要求を取得し、取得したメモリアクセス要求から、プロセッサ１０で発行されたメモリアクセス要求の性質を示すメモリアクセス情報を取得する。メモリアクセス情報は、メモリアクセス要求に含まれている情報及びそれに付随する情報であり、コマンド情報と、アドレス情報と、属性情報と、プロセッサ情報となどを含む。
【０１８９】
コマンド情報は、メモリアクセス要求がライト要求であるかリード要求であるかと、データ転送に関わる他のコマンドなどとを示す情報である。アドレス情報は、データを書き込む領域を示すライトアドレス、又は、データを読み出す領域を示すリードアドレスを示す情報である。属性情報は、ライトアドレス又はリードアドレスが示す領域の属性が、キャッシャブル属性、バースト可属性及びバースト不可属性のいずれであるかを示す情報である。プロセッサ情報は、メモリアクセス要求を発行したスレッド、論理プロセッサ（ＬＰ：Ｌｏｇｉｃａｌ  Ｐｒｏｃｅｓｓｏｒ）及び物理プロセッサ（ＰＰ：Ｐｈｙｓｉｃａｌ  Ｐｒｏｃｅｓｓｏｒ）を示す情報である。
【０１９０】
なお、属性情報は、メモリアクセス要求に含まれていなくてもよい。この場合、メモリアクセス情報取得部４１０は、メインメモリ２０のアドレスと当該アドレスが示す領域の属性とを対応付けたテーブルを保持し、アドレス情報と当該テーブルとを参照することで、属性情報を取得してもよい。
【０１９１】
ここで、図１５を参照する。図１５は、本実施の形態のメモリアクセス情報の一例を示す図である。同図には、メモリアクセス情報５０１及び５０２が示されている。
【０１９２】
メモリアクセス情報５０１は、メモリアクセス要求が、物理プロセッサ“ＰＰ１”の論理プロセッサ“ＬＰ１”で発行されたライト要求であり、“ライトアドレス１”が示すバースト可属性に属する領域にデータを書き込むことを示すライトコマンドを含んでいることを示している。また、当該ライト要求には、“Ａｌｌ  Ｓｙｎｃ”コマンドが含まれていることを示している。
【０１９３】
メモリアクセス情報５０２は、メモリアクセス要求が、物理プロセッサ“ＰＰ１”の論理プロセッサ“ＬＰ１”で発行されたリード要求であり、“リードアドレス１”が示すバースト可属性に属する領域からデータを読み出すことを示すリードコマンドを含んでいることを示している。また、当該リード要求には、“Ｓｅｌｆ  Ｓｙｎｃ”コマンドが含まれていることを示している。
【０１９４】
なお、“Ａｌｌ  Ｓｙｎｃ”及び“Ｓｅｌｆ  Ｓｙｎｃ”コマンドについては後述する。
【０１９５】
図１４に戻ると、判定部４２０は、メモリアクセス情報取得部４１０で取得されたメモリアクセス情報が示す性質が、予め定められた条件を満たすか否かを判定する。具体的には、判定部４２０は、メモリアクセス情報として取得したコマンド情報、属性情報、アドレス情報及びプロセッサ情報などと、制御部４３０を介してＳＴＢ４５０から取得したバッファ量情報とを用いて、条件の判定を行う。条件と、判定部４２０の処理との詳細は、後述する。なお、バッファ量情報は、ＳＴＢ４５０のそれぞれに保持されたデータの量を示す情報である。
【０１９６】
制御部４３０は、メモリアクセス情報が示す性質が条件を満たすと判定部４２０によって判定された場合、複数のＳＴＢ４５０ａ、４５０ｂ及び４５０ｃのうち、当該条件に対応するＳＴＢに保持されているデータをメインメモリに掃き出す。具体的には、制御部４３０は、ＳＴＢ４５０に掃き出し命令を出力する。掃き出し命令は、データを掃き出す対象となるＳＴＢに出力され、掃き出し命令を受け取ったＳＴＢは、保持しているデータをメインメモリ２０に出力する。
【０１９７】
また、制御部４３０は、制御情報をデータ転送部４４０に出力することで、データ転送部４４０を制御する。例えば、制御情報は少なくとも属性情報を含み、制御部４３０は、アドレスが示す領域の属性に応じて、ライトデータの書き込み先、及び、リードデータの読み出し先などを決定する。
【０１９８】
さらに、制御部４３０は、複数のＳＴＢ４５０ａ、４５０ｂ及び４５０ｃのそれぞれに保持されているデータの量であるバッファ量を判定部４２０に出力する。
【０１９９】
データ転送部４４０は、制御部４３０の制御によって、プロセッサ１０とメインメモリ２０との間でデータを転送する。具体的には、プロセッサ１０からライト要求が出力された場合、メインメモリ２０に書き込むためにプロセッサ１０から出力されるライトデータを、ＳＴＢ４５０、キャッシュメモリ４６０及びメインメモリ２０のいずれかに書き込む。また、プロセッサ１０からリード要求が出力された場合、キャッシュメモリ４６０、ＰＦＢ４７０及びメインメモリ２０のいずれかからリードデータを読み出し、読み出したリードデータをプロセッサ１０に出力する。どのメモリを利用するかは、アドレスが示す領域の属性に応じて、制御部４３０によって決定される。
【０２００】
図１４に示すように、データ転送部４４０は、第１データ転送部４４１と、第２データ転送部４４２と、第３データ転送部４４３とを備える。
【０２０１】
第１データ転送部４４１は、アドレスが示す領域がバースト可属性に属する場合に、データの転送を行う。ライト要求が入力された場合は、第１データ転送部４４１は、当該ライト要求に対応するライトデータをＳＴＢ４５０に書き込む。複数のＳＴＢ４５０ａ、４５０ｂ及び４５０ｃのいずれに書き込むかは、制御情報に含まれるプロセッサ情報によって決定される。具体的には、ライト要求を発行したプロセッサに対応するＳＴＢにライトデータを書き込む。
【０２０２】
リード要求が入力された場合は、第１データ転送部４４１は、当該リード要求に対応するリードデータがＰＦＢ４７０に保持されているか否かを判定する。すなわち、当該リード要求がヒットしたかミスしたかを判定する。当該リード要求がヒットした場合、第１データ転送部４４１は、対応するリードデータをＰＦＢ４７０から読み出し、読み出したリードデータをプロセッサ１０に出力する。当該リード要求がミスした場合、第１データ転送部４４１は、当該リード要求に対応するリードデータを含むデータをメインメモリ２０からバーストリードし、バーストリードしたデータをＰＦＢ４７０に書き込む。そして、リード要求に対応するリードデータをＰＦＢ４７０から読み出し、読み出したリードデータをプロセッサ１０に出力する。なお、メインメモリ２０から読み出したバーストリードデータをＰＦＢ４７０に書き込むのと同時に、リード要求に対応するリードデータをプロセッサ１０に出力してもよい。
【０２０３】
第２データ転送部４４２は、アドレスが示す領域がバースト不可属性に属する場合に、データの転送を行う。ライト要求が入力された場合は、第２データ転送部４４２は、当該ライト要求に対応するライトデータをメインメモリ２０に書き込む。リード要求が入力された場合は、第２データ転送部４４２は、当該リード要求に対応するリードデータをメインメモリ２０から読み出し、読み出したリードデータをプロセッサ１０に出力する。
【０２０４】
第３データ転送部４４３は、アドレスが示す領域がキャッシャブル属性に属する場合に、データの転送を行う。
【０２０５】
ライト要求が入力された場合、第３データ転送部４４３がライトバック処理とライトスルー処理のいずれを行うかによって、ライトデータの書き込み先が異なる。
【０２０６】
ライトバック処理を行う場合、第３データ転送部４４３は、当該ライト要求がヒットするかミスするかを判定する。当該ライト要求がヒットした場合、キャッシュメモリ４６０にライトデータを書き込む。当該ライト要求がミスした場合、第３データ転送部４４３は、キャッシュメモリ４６０に対してリフィル処理を行い、ライト要求に含まれるアドレス（タグアドレス）とライトデータとをキャッシュメモリ４６０に書き込む。いずれの場合も、キャッシュメモリ４６０に書き込まれたライトデータは、任意のタイミングでメインメモリ２０に書き込まれる。なお、ライト要求がミスした場合は、キャッシュメモリ４６０にライトデータを書き込むことなく、直接メインメモリ２０にライトデータを書き込んでもよい。
【０２０７】
ライトスルー処理を行う場合、第３データ転送部４４３は、当該ライト要求がヒットするかミスするかを判定する。当該ライト要求がヒットした場合、第３データ転送部４４３は、ＳＴＢ４５０にライトアドレスとライトデータとを書き込む。ＳＴＢ４５０に書き込まれたライトデータは、後続のメモリアクセス要求の性質が、条件が満たすと判定部４２０によって判定された場合に、制御部４３０の制御に従って、ＳＴＢ４５０からキャッシュメモリ４６０とメインメモリ２０とにバーストライトされる。
【０２０８】
当該ライト要求がミスした場合も同様に、第３データ転送部４４３は、ＳＴＢ４５０にライトアドレスとライトデータとを書き込む。ＳＴＢ４５０に書き込まれたライトデータとライトアドレスとが、後続のメモリアクセス要求の性質が、条件が満たすと判定部４２０によって判定された場合に、ＳＴＢ４５０からキャッシュメモリ４６０とメインメモリ２０とにバーストライトされる。
【０２０９】
リード要求が入力された場合、第３データ転送部４４３は、当該リード要求がヒットするかミスするかを判定する。当該リード要求がヒットした場合、第３データ転送部４４３は、キャッシュメモリ４６０からリードデータを読み出し、読み出したリードデータをプロセッサ１０に出力する。
【０２１０】
当該リード要求がミスした場合は、第３データ転送部４４３は、メインメモリ２０からリードデータを読み出し、読み出したリードデータとリードアドレスとをキャッシュメモリ４６０に書き込む。そして、第３データ転送部４４３は、キャッシュメモリ４６０からリードデータを読み出し、読み出したリードデータをプロセッサ１０に出力する。なお、メインメモリ２０から読み出したリードデータをキャッシュメモリ４６０に書き込むのと同時に、プロセッサ１０に出力してもよい。
【０２１１】
ＳＴＢ４５０ａ、４５０ｂ及び４５０ｃのそれぞれは、複数のプロセッサ１０ａ、１０ｂ及び１０ｃに対応し、対応するプロセッサによって発行されたライト要求に対応するライトデータを保持するストアバッファ（ＳＴＢ）である。ＳＴＢ４５０は、複数のプロセッサ１０から出力されるライトデータをマージするために、一時的にライトデータを保持するバッファメモリである。
【０２１２】
本実施の形態では、ＳＴＢ４５０は、物理プロセッサごとに備えられる。また、一例として、ＳＴＢ４５０は、最大で１２８バイトのデータを保持することができる。ＳＴＢ４５０に保持されているデータは、制御部４３０からの制御に基づいて、メインメモリ２０にバーストライトされる。また、ライト要求がキャッシャブル属性に属する領域へのアクセスであり、かつ、ライトスルー処理を行う場合、ＳＴＢ４５０に保持されているデータは、メインメモリ２０とキャッシュメモリ４６０とにバーストライトされる。
【０２１３】
ここで、図１６を参照する。図１６は、本実施の形態のバッファメモリ装置４００が備えるＳＴＢ４５０の概略を示す図である。
【０２１４】
同図に示すように、ＳＴＢ４５０ａ、４５０ｂ及び４５０ｃはそれぞれ、物理プロセッサ（プロセッサ１０ａ（ＰＰ０）、１０ｂ（ＰＰ１）及び１０ｃ（ＰＰ２））に対応して備えられる。すなわち、ＳＴＢ４５０ａは、プロセッサ１０ａから出力されたライトアドレスなどのバッファ制御情報とライトデータとを保持する。ＳＴＢ４５０ｂは、プロセッサ１０ｂから出力されたライトアドレスなどのバッファ制御情報とライト情報とを保持する。ＳＴＢ４５０ｃは、プロセッサ１０ｃから出力されたライトアドレスなどのバッファ制御情報とライトデータとを保持する。
【０２１５】
バッファ制御情報は、ライト要求に含まれる情報であり、ＳＴＢ４５０に書き込まれるデータを管理するための情報である。すなわち、バッファ制御情報は、少なくともライトアドレスを含み、対応するライトデータを出力した物理プロセッサ及び論理プロセッサなどを示す情報を含んでいる。
【０２１６】
図１６に示す例では、物理プロセッサごとに備えられたＳＴＢは、６４バイトのデータを保持することができる領域を２つ備えている。例えば、この２つの領域をスレッドごとに対応付けてもよい。
【０２１７】
キャッシュメモリ４６０は、例えば、実施の形態１のキャッシュメモリ１５０と同様に、４ウェイ・セット・アソシエイティブ方式のキャッシュメモリである。
【０２１８】
ＰＦＢ４７０は、実施の形態１のバッファメモリ１４０に相当し、メインメモリ２０のアドレスと、当該アドレスが示す領域から第１データ転送部４４１によって読み出されたデータとを対応付けて記憶するバッファメモリである。
【０２１９】
ここで、判定部４２０が判定処理に用いる条件について説明する。
【０２２０】
図１７は、本実施の形態の複数の判定条件の一例を示す判定テーブルを示す図である。同図には、一例として、属性判定条件（“Ｕｎｃａｃｈｅ”）と、コマンド判定条件（“Ａｌｌ  Ｓｙｎｃ”と“Ｓｅｌｆ  Ｓｙｎｃ”）と、アドレス判定条件（“ＲＡＷ  Ｈａｚａｒｄ”と“Ａｎｏｔｈｅｒ  Ｌｉｎｅ  Ａｃｃｅｓｓ”）と、バッファ量判定条件（“Ｓｌｏｔ  Ｆｕｌｌ”）と、プロセッサ判定条件（“同ＬＰ、異ＰＰ”）とが示されている。
【０２２１】
属性判定条件は、属性情報を用いて、メモリアクセス要求に含まれるアドレスが示す領域の属性に従って、ＳＴＢ４５０からのデータの掃き出し、及び、掃き出し対象となるＳＴＢを決定するための条件である。図１７に示す“Ｕｎｃａｃｈｅ”条件は、属性判定条件の一例である。
【０２２２】
“Ｕｎｃａｃｈｅ”条件では、メモリアクセス要求に含まれるアドレスが示す領域の属性が、バースト不可属性であるか否かが、判定部４２０によって判定される。バースト不可属性であると判定された場合、制御部４３０は、当該メモリアクセス要求を発行した論理プロセッサと同じ論理プロセッサで発行されたメモリアクセス要求に対応するデータを保持しているＳＴＢから、保持しているデータをメインメモリ２０に掃き出す。なお、制御部４３０は、掃き出し対象のＳＴＢを判定する基準として、論理プロセッサではなく、スレッドに対応する仮想プロセッサを用いてもよい。
【０２２３】
コマンド判定条件は、コマンド情報を用いて、メモリアクセス要求に含まれるコマンドに従って、ＳＴＢ４５０からのデータの掃き出し、及び、掃き出し対象となるＳＴＢを決定するための条件である。図１７に示す“Ａｌｌ  Ｓｙｎｃ”条件と“Ｓｅｌｆ  Ｓｙｎｃ”条件とは、コマンド判定条件の一例である。
【０２２４】
“Ａｌｌ  Ｓｙｎｃ”条件では、メモリアクセス要求に“Ａｌｌ  Ｓｙｎｃ”コマンドが含まれるか否かが、判定部４２０によって判定される。“Ａｌｌ  Ｓｙｎｃ”コマンドは、全てのＳＴＢ４５０に保持される全てのデータをメインメモリ２０に掃き出すためのコマンドである。“Ａｌｌ  Ｓｙｎｃ”コマンドが含まれる場合（例えば、図１５のメモリアクセス情報５０１）、制御部４３０は、全てのＳＴＢ４５０に保持された全てのデータをメインメモリ２０に掃き出す。
【０２２５】
“Ｓｅｌｆ  Ｓｙｎｃ”条件では、メモリアクセス要求に“Ｓｅｌｆ  Ｓｙｎｃ”コマンドが含まれるか否かが、判定部４２０によって判定される。“Ｓｅｌｆ  Ｓｙｎｃ”コマンドは、当該コマンドを発行したプロセッサが出力したデータのみをＳＴＢ４５０からメインメモリ２０に掃き出すためのコマンドである。“Ｓｅｌｆ  Ｓｙｎｃ”コマンドが含まれる場合（例えば、図１５のメモリアクセス情報５０２）、制御部４３０は、当該メモリアクセス要求を発行した論理プロセッサと同じ論理プロセッサで発行されたメモリアクセス要求に対応するデータを保持しているＳＴＢから、保持しているデータをメインメモリ２０に掃き出す。なお、制御部４３０は、掃き出し対象のＳＴＢを判定する基準として、論理プロセッサではなく、スレッドに対応する仮想プロセッサを用いてもよい。
【０２２６】
アドレス判定条件は、アドレス情報を用いて、メモリアクセス要求に含まれるアドレスに従って、ＳＴＢ４５０からのデータの掃き出し、及び、掃き出し対象となるＳＴＢを決定するための条件である。図１７に示す“ＲＡＷ  Ｈａｚａｒｄ”条件と“Ａｎｏｔｈｅｒ  Ｌｉｎｅ  Ａｃｃｅｓｓ”条件とは、アドレス判定条件の一例である。
【０２２７】
“ＲＡＷ  Ｈａｚａｒｄ”条件では、リード要求に含まれるリードアドレスに一致するライトアドレスが、複数のＳＴＢ４５０の少なくとも１つに保持されているか否かが、判定部４２０によって判定される。リードアドレスに一致するライトアドレスがＳＴＢ４５０のいずれかに保持されている場合に、制御部４３０は、Ｈａｚａｒｄラインまでのデータを全て、すなわち、当該ライトアドレスに対応するライトデータ以前にＳＴＢ４５０に保持されたデータをメインメモリ２０に掃き出す。
【０２２８】
“Ａｎｏｔｈｅｒ  Ｌｉｎｅ  Ａｃｃｅｓｓ”条件では、ライト要求に含まれるライトアドレスが、直前に入力されたライト要求に含まれていたライトアドレスと関連するか否かが、判定部４２０によって判定される。具体的には、当該２つのライトアドレスが連続するアドレスであるか否かが判定される。なお、このとき、２つのライト要求は共に、同じ物理プロセッサで発行されたものとする。２つのライトアドレスが連続するアドレスでないと判定された場合、制御部４３０は、直前に入力されたライト要求に対応するライトデータ以前にＳＴＢ４５０に保持されたデータをメインメモリ２０に掃き出す。
【０２２９】
バッファ量判定条件は、バッファ量情報を用いて、ＳＴＢ４５０に保持されたデータ量に従って、ＳＴＢ４５０からのデータの掃き出し、及び、掃き出し対象となるＳＴＢを決定するための条件である。図１７に示す“Ｓｌｏｔ  Ｆｕｌｌ”条件は、バッファ量判定条件の一例である。
【０２３０】
“Ｓｌｏｔ  Ｆｕｌｌ”条件では、ＳＴＢ４５０に保持されたデータ量であるバッファ量がフルであるか（１２８バイト）否かが、判定部４２０によって判定される。バッファ量が１２８バイトであると判定された場合、制御部４３０は、当該ＳＴＢのデータをメインメモリ２０に掃き出す。
【０２３１】
プロセッサ判定条件は、プロセッサ情報を用いて、どの論理プロセッサと物理プロセッサとがメモリアクセス要求を発行したかに従って、ＳＴＢ４５０からのデータの掃き出し、及び、掃き出し対象となるＳＴＢを決定するための条件である。図１７に示す“同ＬＰ、異ＰＰ”条件は、プロセッサ判定条件の一例である。
【０２３２】
“同ＬＰ、異ＰＰ”条件では、メモリアクセス要求を発行した論理プロセッサが、ＳＴＢ４５０に保持されたライトデータに対応するライト要求を発行した論理プロセッサと同じであるか否かが判定される。さらに、当該メモリアクセス要求を発行した物理プロセッサが、当該ライト要求を発行した物理プロセッサと異なるか否かが判定される。つまり、プロセッサ情報が示す物理プロセッサとは異なる物理プロセッサで、かつ、プロセッサ情報が示す論理プロセッサが示す論理プロセッサと同じ論理プロセッサで以前に発行されたライト要求に対応するライトデータが少なくとも１つのＳＴＢに保持されているか否かが、判定部４２０によって判定される。論理プロセッサが同じであり、物理プロセッサが異なると判定された場合、制御部４３０は、当該論理プロセッサが以前に発行したライト要求に対応するデータをＳＴＢ４５０から掃き出す。なお、論理プロセッサではなく、スレッドが同じであるか否かが判定されてもよい。
【０２３３】
以上のように、本実施の形態では、それぞれの条件を満たす場合にＳＴＢ４５０からデータが掃き出される。なお、上述の条件全てを判定する必要はない。また、上述の条件に新たな条件を加えてもよく、または、上述の条件と新たな条件とを置き換えてもよい。
【０２３４】
例えば、“Ｓｌｏｔ  Ｆｕｌｌ”条件は、バッファ量がフルであるか否かを判定する条件であるが、この条件の代わりに、所定のバッファ量（ＳＴＢに保持できるバッファ量の最大値の半分など）に達したか否かを判定する条件でもよい。例えば、ＳＴＢ４５０に保持できるデータ量の最大値は１２８バイトであるが、ＳＴＢ４５０とメインメモリ２０との間のデータバス幅が６４バイトである場合などに、バッファ量が６４バイトに達したか否かを判定してもよい。
【０２３５】
ここで、図１８を参照する。図１８は、本実施の形態の判定部４２０の詳細な構成を示すブロック図である。同図に示すように、判定部４２０は、属性判定部４２１と、プロセッサ判定部４２２と、コマンド判定部４２３と、アドレス判定部４２４と、バッファ量判定部４２５と、判定結果出力部４２６とを備える。
【０２３６】
属性判定部４２１は、メモリアクセス情報取得部４１０で取得されたメモリアクセス情報から属性情報を取得し、メモリアクセス要求に含まれるアドレスが示す領域の属性がキャッシャブル属性、バースト可属性、及び、バースト不可属性のいずれであるかを判定する。そして、属性判定部４２１は、得られた判定結果を判定結果出力部４２６に出力する。
【０２３７】
プロセッサ判定部４２２は、メモリアクセス情報取得部４１０で取得されたメモリアクセス情報からプロセッサ情報を取得し、メモリアクセス要求を発行したプロセッサが、複数の論理プロセッサ及び物理プロセッサのうち、いずれの論理プロセッサ及び物理プロセッサであるかを判定する。そして、プロセッサ判定部４２２は、得られた判定結果を判定結果出力部４２６に出力する。
【０２３８】
コマンド判定部４２３は、メモリアクセス情報取得部４１０で取得されたメモリアクセス情報からコマンド情報を取得し、メモリアクセス要求に所定のコマンドが含まれるか否かを判定する。さらに、コマンド判定部４２３は、メモリアクセス要求に所定のコマンドが含まれていた場合、当該所定のコマンドの種別を判定する。そして、コマンド判定部４２３は、得られた判定結果を判定結果出力部４２６に出力する。
【０２３９】
なお、所定のコマンドとは、例えば、他の条件に関わらずＳＴＢ４５０からデータを掃き出す命令である。一例として、上述したような“Ａｌｌ  Ｓｙｎｃ”コマンド及び“Ｓｅｌｆ  Ｓｙｎｃ”コマンドがある。
【０２４０】
アドレス判定部４２４は、メモリアクセス情報取得部４１０で取得されたメモリアクセス情報からアドレス情報を取得し、メモリアクセス要求に含まれるアドレスが、ＳＴＢ４５０に既に保持されているか否かを判定する。さらに、アドレス判定部４２４は、当該メモリアクセス要求に含まれるアドレスが、直前のメモリアクセス要求に含まれていたアドレスに関連するか否かを判定する。具体的には、２つのアドレスが連続しているか否かを判定する。そして、アドレス判定部４２４は、得られた判定結果を判定結果出力部４２６に出力する。
【０２４１】
バッファ量判定部４２５は、制御部４３０を介して、ＳＴＢ４５０からバッファ量を取得し、バッファ量が所定の閾値に達したか否かをＳＴＢごとに判定する。そして、バッファ量判定部４２５は、得られた判定結果を判定結果出力部４２６に出力する。なお、所定の閾値は、例えば、ＳＴＢ４５０の最大値、又は、バッファメモリ装置４００とメインメモリ２０との間のデータバス幅などである。
【０２４２】
判定結果出力部４２６は、各判定部から入力される判定結果を基にして、図１７に示す条件を満たすか否かを判定し、得られた判定結果を制御部４３０に出力する。具体的には、判定結果出力部４２６は、図１７に示す条件を満たすと判定された場合、どのＳＴＢのどのデータをメインメモリ２０に掃き出すのかを示す掃き出し情報を制御部４３０に出力する。
【０２４３】
以上の構成により、本実施の形態のバッファメモリ装置４００は、複数のプロセッサ１０から出力されたライトデータを一時的に保持する複数のＳＴＢ４５０を備え、所定の条件が満たされた場合に、ＳＴＢ４５０に保持されたデータをメインメモリ２０にバーストライトする。つまり、小さいサイズの複数のライトデータをマージするために、一時的にＳＴＢ４５０に保持し、マージすることで得られた大きいサイズのデータをメインメモリ２０にバーストライトする。このとき、複数のプロセッサ間でのデータの順序の保証を行うための条件に基づいて、ＳＴＢ４５０からのデータの掃き出しの可否を決定する。
【０２４４】
これにより、データのコヒーレンシを保ちつつ、データの転送効率を向上させることができる。
【０２４５】
続いて、本実施の形態のバッファメモリ装置４００の動作について、図１９〜図２６を用いて説明する。図１９は、本実施の形態のバッファメモリ装置４００の動作を示すフローチャートである。
【０２４６】
まず、本実施の形態のバッファメモリ装置４００は、プロセッサ１０からメモリアクセス要求を取得することで、本実施の形態のデータ転送処理を実行する。
【０２４７】
メモリアクセス情報取得部４１０は、メモリアクセス要求からメモリアクセス情報を取得する（Ｓ６０１）。そして、取得したメモリアクセス情報を判定部４２０に出力する。また、必要に応じて、判定部４２０は、制御部４３０を介してＳＴＢ４５０からバッファ量情報を取得する。
【０２４８】
判定部４２０は、入力されるメモリアクセス情報と、取得したバッファ量情報とを用いて、ＳＴＢ４５０からデータを掃き出すか否かを判定する（Ｓ６０２）。この掃き出し判定処理の詳細については後述する。
【０２４９】
続いて、コマンド判定部４２３が、メモリアクセス要求がライト要求であるかリード要求であるかを判定する（Ｓ６０３）。メモリアクセス要求がライト要求である場合（Ｓ６０３で“ライト”）、データ転送部４４０は、プロセッサ１０から出力されるライトデータの書き込み処理を行う（Ｓ６０４）。メモリアクセス要求がリード要求である場合（Ｓ６０３で“リード”）、データ転送部４４０は、プロセッサ１０へのリードデータの読み出し処理を実行する（Ｓ６０５）。
【０２５０】
なお、掃き出し判定処理（Ｓ６０２）で、メモリアクセス要求がライト要求であるかリード要求であるかが判定されている場合は、掃き出し判定処理（Ｓ６０２）の終了後に、メモリアクセス要求の判定処理（Ｓ６０３）をすることなく、書き込み処理（Ｓ６０４）、又は、読み出し処理（Ｓ６０５）が実行されてもよい。
【０２５１】
以下では、まず、書き込み処理（Ｓ６０４）の詳細について説明する。
【０２５２】
図２０は、本実施の形態のバッファメモリ装置４００の書き込み処理を示すフローチャートである。
【０２５３】
メモリアクセス要求がライト要求である場合、まず、属性判定部４２１は、当該ライト要求に含まれるライトアドレスが示す領域の属性を判定する（Ｓ６１１）。具体的には、属性判定部４２１は、ライトアドレスが示す領域の属性が、バースト可属性、バースト不可属性、及び、キャッシャブル属性のいずれであるかを判定する。
【０２５４】
ライトアドレスが示す領域の属性がバースト可属性であると判定された場合（Ｓ６１１で“アンキャッシャブル（バースト可）”）、第１データ転送部４４１は、プロセッサ１０から出力されたライトデータをＳＴＢ４５０に書き込む（Ｓ６１２）。具体的には、第１データ転送部４４１は、制御部４３０からの制御に基づいて、ライト要求を発行した物理プロセッサ（例えば、プロセッサ１０ａ）に対応するＳＴＢ（ＳＴＢ４５０ａ）にライトデータを書き込む。
【０２５５】
ライトアドレスが示す領域の属性がバースト不可属性であると判定された場合（Ｓ６１１で“アンキャッシャブル（バースト不可）”）、第２データ転送部４４２は、プロセッサ１０から出力されたライトデータをメインメモリ２０に書き込む（Ｓ６１３）。
【０２５６】
ライトアドレスが示す領域の属性がキャッシャブル属性であると判定された場合（Ｓ６１１で“キャッシャブル”）、第３データ転送部４４３は、ライト要求がヒットしたかミスしたかを判定する（Ｓ６１４）。ライト要求がミスした場合（Ｓ６１４でＮｏ）、第３データ転送部４４３は、キャッシュメモリ４６０に対してリフィル処理を行い、タグアドレスを更新する（Ｓ６１５）。
【０２５７】
タグアドレスの更新後、又は、ライト要求がヒットした場合（Ｓ６１４でＹｅｓ）、制御部４３０は、当該ライト要求に基づく書き込み処理が、ライトバック処理であるかライトスルー処理であるかに応じて、ライトデータの書き込み先を変更する（Ｓ６１７）。ライトバック処理の場合（Ｓ６１６で“ライトバック”）、第３データ転送部４４３は、キャッシュメモリ４６０にライトデータを書き込む（Ｓ６１７）。ライトスルー処理の場合（Ｓ６１６で“ライトスルー”）、第３データ転送部４４３は、ＳＴＢ４５０にライトデータとライトアドレスとを書き込む（Ｓ６１８）。
【０２５８】
以上のようにして、プロセッサ１０から出力されたライトデータは、メインメモリ２０、ＳＴＢ４５０又はキャッシュメモリ４６０に書き込まれる。なお、ＳＴＢ４５０及びキャッシュメモリ４６０に書き込まれたデータは、後続のメモリアクセス要求が入力された場合などに実行される掃き出し判定処理によって、メインメモリ２０に書き込まれる。
【０２５９】
なお、掃き出し判定処理（Ｓ６０２）で、ライトアドレスが示す領域の属性が判定されている場合は、メモリアクセス要求の判定処理（Ｓ６０３）の終了後に、属性の判定処理（Ｓ６１１）をすることなく、それぞれの書き込み処理を実行してもよい。
【０２６０】
次に、読み出し処理（Ｓ６０５）について説明する。読み出し処理（Ｓ６０５）は、例えば、図６〜図９に示すフローチャートに従って実行される。
【０２６１】
なお、掃き出し判定処理（Ｓ６０２）で、リードアドレスが示す領域の属性が判定されている場合は、メモリアクセス要求の判定処理（Ｓ６０３）の終了後に、属性の取得処理（Ｓ１０１）及び属性の判定処理（Ｓ１０２）をすることなく、それぞれの読み出し処理を実行してもよい。
【０２６２】
次に、掃き出し判定処理（Ｓ６０２）の詳細について図２１〜図２６を用いて説明する。掃き出し判定処理では、図１７に示す判定テーブルが示す条件をどの順に判定してもよい。ただし、“Ａｌｌ  Ｓｙｎｃ”条件のように、条件が満たされた場合に、全てのバッファに保持されたデータを掃き出すなど、その後に他の条件を判定する必要がなくなるものを優先的に行うのが望ましい。
【０２６３】
図２１は、本実施の形態のバッファメモリ装置４００の属性判定処理を示すフローチャートである。同図は、図１７の“Ｕｎｃａｃｈｅ”条件に基づいた掃き出し判定処理を示す。
【０２６４】
メモリアクセス情報が判定部４２０に入力されると、属性判定部４２１は、メモリアクセス要求に含まれるアドレスが示す領域の属性がバースト不可属性であるか否かを判定する（Ｓ７０１）。当該アドレスが示す領域の属性がバースト不可属性ではない場合（Ｓ７０１でＮｏ）、他の判定処理が実行される。
【０２６５】
メモリアクセス要求に含まれるアドレスが示す領域の属性がバースト不可属性であると判定された場合（Ｓ７０１でＹｅｓ）、制御部４３０は、当該メモリアクセス要求を発行した論理プロセッサと同じ論理プロセッサで発行されたメモリアクセス要求に対応するデータを保持しているＳＴＢから、保持しているデータをメインメモリ２０に掃き出す（Ｓ７０２）。なお、制御部４３０は、プロセッサ判定部４２２の判定結果を用いて、複数のＳＴＢ４５０のうち、掃き出し対象となるＳＴＢを特定することで、データの掃き出しを実行する。当該掃き出しが終了すると、他の判定処理が実行される。
【０２６６】
図２２は、本実施の形態のバッファメモリ装置４００のコマンド判定処理を示すフローチャートである。同図は、図１７の“Ａｌｌ  Ｓｙｎｃ”条件と“Ｓｅｌｆ  Ｓｙｎｃ”条件とに基づいた掃き出し判定処理を示す。
【０２６７】
メモリアクセス情報が判定部４２０に入力されると、コマンド判定部４２３は、メモリアクセス要求に含まれるコマンドに、他の条件に関わらずデータを掃き出す旨の命令である“Ｓｙｎｃ”コマンドが含まれるか否かを判定する（Ｓ８０１）。メモリアクセス要求に“Ｓｙｎｃ”コマンドが含まれない場合（Ｓ８０１でＮｏ）、他の判定処理が実行される。
【０２６８】
メモリアクセス要求に“Ｓｙｎｃ”コマンドが含まれる場合（Ｓ８０１でＹｅｓ）、コマンド判定部４２３は、“Ｓｙｎｃ”コマンドが“Ａｌｌ  Ｓｙｎｃ”コマンドであるか“Ｓｅｌｆ  Ｓｙｎｃ”コマンドであるかを判定する（Ｓ８０２）。“Ｓｙｎｃ”コマンドが“Ａｌｌ  Ｓｙｎｃ”コマンドである場合（Ｓ８０２で“Ａｌｌ  Ｓｙｎｃ”）、制御部４３０は、全てのＳＴＢ４５０から、全てのデータを掃き出す（Ｓ８０３）。
【０２６９】
“Ｓｙｎｃ”コマンドが“Ｓｅｌｆ  Ｓｙｎｃ”コマンドである場合（Ｓ８０２で“Ｓｅｌｆ  Ｓｙｎｃ”）、制御部４３０は、当該メモリアクセス要求を発行した論理プロセッサと同じ論理プロセッサで発行されたメモリアクセス要求に対応するデータを保持しているＳＴＢから、保持しているデータをメインメモリ２０に掃き出す（Ｓ８０４）。なお、制御部４３０は、プロセッサ判定部４２２の判定結果を用いて、複数のＳＴＢ４５０のうち、吐き出し対象となるＳＴＢを特定することで、データの掃き出しを実行する。
【０２７０】
データの掃き出しが終了すると、他の判定処理が実行される。
【０２７１】
図２３は、本実施の形態のバッファメモリ装置４００のリードアドレス判定処理を示すフローチャートである。同図は、図１７の“ＲＡＷ  Ｈａｚａｒｄ”条件に基づいた掃き出し判定処理を示す。なお、“ＲＡＷ  Ｈａｚａｒｄ”条件は、バッファメモリ装置４００がリード要求を受け取った場合に判定される条件である。すなわち、コマンド判定部４２３が、メモリアクセス要求がリード要求であると判定した場合に実行される。
【０２７２】
アドレス判定部４２４は、当該リード要求に含まれるリードアドレスが、ＳＴＢ４５０に保持されているライトアドレスに一致するか否かを判定する（Ｓ９０１）。当該リードアドレスがＳＴＢ４５０に保持されているライトアドレスに一致しないと判定された場合（Ｓ９０１でＮｏ）、他の判定処理が実行される。
【０２７３】
リードアドレスがＳＴＢ４５０に保持されているライトアドレスに一致すると判定された場合（Ｓ９０１でＹｅｓ）、制御部４３０は、Ｈａｚａｒｄラインまでのデータを全て、すなわち、一致したライトアドレスに対応するライトデータ以前に保持された全てのデータをＳＴＢ４５０から掃き出す（Ｓ９０２）。データの掃き出しが終了すると、他の判定処理が実行される。
【０２７４】
図２４は、本実施の形態のバッファメモリ装置４００のライトアドレス判定処理を示すフローチャートである。同図は、図１７の“Ａｎｏｔｈｅｒ  Ｌｉｎｅ  Ａｃｃｅｓｓ”条件に基づいた掃き出し判定処理を示す。なお、“Ａｎｏｔｈｅｒ  Ｌｉｎｅ  Ａｃｃｅｓｓ”条件は、バッファメモリ装置４００がライト要求を受け取った場合に判定される条件である。すなわち、コマンド判定部４２３が、メモリアクセス要求がライト要求であると判定した場合に実行される。
【０２７５】
アドレス判定部４２４は、当該ライト要求に含まれるライトアドレスが、直前に入力されたライト要求に含まれるライトアドレスに連続するか否かを判定する（Ｓ１００１）。２つのアドレスが連続する場合（Ｓ１００１でＮｏ）、他の判定処理が実行される。
【０２７６】
２つのアドレスが連続しない場合（Ｓ１００１でＹｅｓ）、制御部４３０は、直前に入力されたライト要求に対応するライトデータを含み、それ以前のデータを全てＳＴＢ４５０から掃き出す（Ｓ１００２）。データの掃き出しが終了すると、他の判定処理が実行される。
【０２７７】
図２５は、本実施の形態のバッファメモリ装置４００のバッファ量判定処理を示すフローチャートである。同図は、図１７の“Ｓｌｏｔ  Ｆｕｌｌ”条件に基づいた掃き出し判定処理を示す。
【０２７８】
“Ｓｌｏｔ  Ｆｕｌｌ”条件は、他の条件と異なり、メモリアクセス情報ではなく、ＳＴＢ４５０から得られるバッファ量情報に基づいて判定される条件である。したがって、バッファメモリ装置４００がメモリアクセス要求を受け取った場合に限らず、任意のタイミングで、又は、ＳＴＢ４５０にデータを書き込んだ場合などに判定されてもよい。
【０２７９】
バッファ量判定部４２５は、制御部４３０を介して、ＳＴＢ４５０からバッファ量情報を取得し、ＳＴＢごとに、バッファ量がフルであるか否かを判定する（Ｓ１１０１）。バッファ量がフルでない場合（Ｓ１１０１でＮｏ）、バッファメモリ装置４００がメモリアクセス要求を受け取った場合に、他の判定処理が実行される。
【０２８０】
バッファ量がフルである場合（Ｓ１１０１でＹｅｓ）、制御部４３０は、複数のＳＴＢ４５０のうち、バッファ量がフルとなったＳＴＢからデータを掃き出す（Ｓ１１０２）。データの掃き出しが終了すると、他の判定処理が実行される。
【０２８１】
図２６は、本実施の形態のバッファメモリ装置４００のプロセッサ判定処理を示すフローチャートである。同図は、図１７の“同ＬＰ、異ＰＰ”条件に基づいた掃き出し判定処理を示す。
【０２８２】
メモリアクセス情報が判定部４２０に入力されると、プロセッサ判定部４２２は、メモリアクセス要求を発行した物理プロセッサとは異なる物理プロセッサで、かつ、当該メモリアクセス要求を発行した論理プロセッサと同じ論理プロセッサで以前に発行されたメモリアクセス要求に対応するライトデータが、ＳＴＢ４５０に保持されているか否かを判定する（Ｓ１２０１）。当該ライトデータがＳＴＢ４５０に保持されていない場合（Ｓ１２０１でＮｏ）、他の判定処理が実行される。
【０２８３】
同じ論理プロセッサ、かつ、異なる物理プロセッサから出力されたライトデータがＳＴＢ４５０に保持されている場合（Ｓ１２０１でＹｅｓ）、当該ライトデータを保持していたＳＴＢから、データを掃き出す（Ｓ１２０２）。データの掃き出しが終了すると、他の判定処理が実行される。
【０２８４】
以上の図２１〜図２６に示す判定処理が全て終了すると、掃き出し判定処理（図１９のＳ６０２）は終了する。
【０２８５】
以上の掃き出し判定処理に示した条件が満たされない場合は、ライト要求に対応するライトデータは、ＳＴＢ４５０に保持される。すなわち、入力される小さいサイズのライトデータは、ＳＴＢ４５０でマージされ、大きなサイズのデータとなる。そして、当該データは、上述のいずれかの条件が満たされた時点で、メインメモリ２０にバーストライトされる。
【０２８６】
なお、以上の説明では、各判定条件が満たされるごとに、データをメインメモリ２０に掃き出したが、全ての判定条件が判定された後に、満たした条件に対応するデータをまとめてメインメモリ２０に掃き出してもよい。
【０２８７】
以上のように、本実施の形態のバッファメモリ装置４００は、複数のプロセッサ１０のそれぞれに対応するＳＴＢ４５０を備え、各ＳＴＢ４５０にプロセッサ１０から出力されるライトデータをマージして、保持させる。そして、所定の条件を満たした場合に、ＳＴＢ４５０からマージしたデータをメインメモリ２０にバーストライトする。
【０２８８】
これにより、小さなサイズのライトデータをマージすることで得られる大きなデータをメインメモリ２０にバーストライトすることができるので、小さなサイズのデータを個々に書き込む場合に比べて、データの転送効率を向上させることができる。また、ＳＴＢ４５０からデータを読み出す条件を備えることで、複数のプロセッサから出力されるライトデータのコヒーレンシを保つことができる。特に、メモリアクセス要求が、同じ論理プロセッサであるが、異なる物理プロセッサで発行された場合にＳＴＢ４５０に保持されたデータを掃き出すことで、複数のプロセッサが実行するマルチスレッド、又は、マルチプロセッサを利用したメモリシステムの場合でも、データのコヒーレンシを保つことができる。
【０２８９】
以上、本発明のバッファメモリ装置及びメモリシステムについて、実施の形態に基づいて説明したが、本発明は、これらの実施の形態に限定されるものではない。本発明の趣旨を逸脱しない限り、当業者が思いつく各種変形を当該実施の形態に施したものや、異なる実施の形態における構成要素を組み合わせて構築される形態も、本発明の範囲内に含まれる。
【０２９０】
また、各実施の形態において、メモリアクセス要求の発行元は、ＣＰＵなどのプロセッサ、及び、ＤＭＡＣなどいかなるマスタであってもよい。
【０２９１】
また、各実施の形態では、Ｌ２キャッシュ４０が各実施の形態のバッファメモリ１４０、ＰＦＢ３３４又はＰＦＢ４７０を備える構成について説明したが、Ｌ１キャッシュ３０が当該バッファメモリ１４０、ＰＦＢ３３４又はＰＦＢ４７０を備えてもよい。このとき、メモリシステムは、Ｌ２キャッシュ４０を備えなくてもよい。
【０２９２】
また、レベル３キャッシュ以上のキャッシュを備えるメモリシステムに、本発明を適用してもよい。この場合、最大レベルのキャッシュ、すなわち、メインメモリ２０に最も近いキャッシュが各実施の形態のバッファメモリ１４０、ＰＦＢ３３４又はＰＦＢ４７０を備えることが好ましい。
【０２９３】
なお、本発明は、上述したように、バッファメモリ装置、メモリシステム及びデータ読出方法として実現できるだけではなく、本実施の形態のデータ読出方法をコンピュータに実行させるためのプログラムとして実現してもよい。また、当該プログラムを記録するコンピュータ読み取り可能なＣＤ−ＲＯＭなどの記録媒体として実現してもよい。さらに、当該プログラムを示す情報、データ又は信号として実現してもよい。そして、これらプログラム、情報、データ及び信号は、インターネットなどの通信ネットワークを介して配信されてもよい。
【０２９４】
また、本発明は、バッファメモリ装置を構成する構成要素の一部又は全部を、１個のシステムＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）から構成してもよい。システムＬＳＩは、複数の構成部を１個のチップ上に集積して製造された超多機能ＬＳＩであり、具体的には、マイクロプロセッサ、ＲＯＭ及びＲＡＭなどを含んで構成されるコンピュータシステムである。
【産業上の利用可能性】
【０２９５】
本発明のバッファメモリ装置及びメモリシステムは、ＣＰＵなどのプロセッサとメインメモリとの間でデータの転送を行うシステムに利用することができ、例えば、コンピュータなどに利用することができる。
【符号の説明】
【０２９６】
１０、１０ａ、１０ｂ、１０ｃ、３１０ａ、３１０ｂ、６１０  プロセッサ
２０、３２０、６２０  メインメモリ
２１、６２１  キャッシャブル領域
２２、６２２  アンキャッシャブル領域
２３  バースト可領域
２４  バースト不可領域
３０、３１１  Ｌ１キャッシュ
４０、３３０  Ｌ２キャッシュ
１００、２００、４００  バッファメモリ装置
１１０  属性取得部
１２０、３３２ａ、３３２ｂ、４２１  属性判定部
１３０、２３０  データ読出部
１３１  第１データ読出部
１３２  第２データ読出部
１３３、２３３  第３データ読出部
１４０  バッファメモリ
１５０、３３５、４６０、６１１  キャッシュメモリ
１６０  テーブル保持部
１６１  領域属性テーブル
１７０  属性設定部
３００  メモリシステム
３１２  ＴＬＢ
３１３  アドレス変換テーブル
３３１ａ、３３１ｂ  キュー
３３３ａ、３３３ｂ  セレクタ
３３４、４７０  ＰＦＢ
３３６  メモリインタフェース
４１０  メモリアクセス情報取得部
４２０  判定部
４２２  プロセッサ判定部
４２３  コマンド判定部
４２４  アドレス判定部
４２５  バッファ量判定部
４２６  判定結果出力部
４３０  制御部
４４０  データ転送部
４４１  第１データ転送部
４４２  第２データ転送部
４４３  第３データ転送部
４５０、４５０ａ、４５０ｂ、４５０ｃ  ＳＴＢ
５０１、５０２  メモリアクセス情報
６１２  汎用レジスタ
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プロセッサからのリード要求に応じて、キャッシャブル属性とアンキャッシャブル属性とのいずれかに属する複数の領域からなるメインメモリ又は周辺デバイスからデータを読み出すバッファメモリ装置であって、
前記リード要求に含まれるリードアドレスが示す領域の属性を取得する属性取得部と、
前記属性取得部によって取得された属性が、前記アンキャッシャブル属性であり、かつ、バースト転送すべきデータが保持されることを示す第１属性であるか否かを判定する属性判定部と、
前記属性判定部によって、前記属性取得部によって取得された属性が前記第１属性であると判定された場合、前記リードアドレスが示す領域に保持されているデータを含むデータをバーストリードするデータ読出部と、
前記データ読出部によってバーストリードされたデータを保持する第１バッファメモリとを備える
バッファメモリ装置。
【請求項２】
前記属性判定部は、前記属性取得部によって取得された属性が、前記アンキャッシャブル属性であり、かつ、バースト転送すべきデータが保持されないことを示す第２属性であるか、前記第１属性であるかを判定し、
前記データ読出部は、さらに、前記属性判定部によって、前記属性取得部によって取得された属性が前記第２属性であると判定された場合、前記リードアドレスが示す領域に保持されているデータのみを読み出す
請求項１記載のバッファメモリ装置。
【請求項３】
前記バッファメモリ装置は、さらに、
前記メインメモリ又は前記周辺デバイスのアドレスと、当該アドレスが示す領域の属性が、前記第１属性、前記第２属性、及び、前記キャッシャブル属性であることを示す第３属性のいずれであるかを示す属性情報とを対応付けたテーブルを保持するテーブル保持部を備え、
前記属性取得部は、前記テーブル保持部に保持されたテーブルを参照することで、前記リードアドレスが示す領域の属性を取得する
請求項２記載のバッファメモリ装置。
【請求項４】
前記バッファメモリ装置は、さらに、
キャッシュメモリを備え、
前記属性判定部は、前記属性取得部によって取得された属性が、前記第１属性、前記第２属性、及び、前記第３属性のいずれであるかを判定し、
前記データ読出部は、さらに、前記属性判定部によって、前記属性取得部によって取得された属性が前記第３属性であると判定された場合、前記リードアドレスが示す領域に保持されているデータを含むデータをバーストリードし、
前記キャッシュメモリは、前記データ読出部によってバーストリードされたデータのうち、前記リードアドレスが示す領域に保持されているデータを含む第１データを保持し、
前記第１バッファメモリは、前記データ読出部によってバーストリードされたデータのうち、前記第１データを除く第２データを保持する
請求項３記載のバッファメモリ装置。
【請求項５】
前記バッファメモリ装置は、さらに、
前記メインメモリ又は前記周辺デバイスのアドレスと、当該アドレスが示す領域の属性を、前記第１属性、前記第２属性、及び、前記第３属性のいずれかに設定することで前記テーブルを生成する属性設定部を備え、
前記テーブル保持部は、前記属性設定部によって生成されたテーブルを保持する
請求項３記載のバッファメモリ装置。
【請求項６】
前記データ読出部は、前記属性判定部によって、前記属性取得部によって取得された属性が前記第１属性であると判定された場合、さらに、前記リードアドレスが示す領域に保持されているデータが前記第１バッファメモリに既に保持されているか否かを判断し、当該データが前記第１バッファメモリに既に保持されている場合、前記第１バッファメモリから当該データを読み出し、当該データが前記第１バッファメモリに保持されていない場合、当該データを含むデータをバーストリードする
請求項１記載のバッファメモリ装置。
【請求項７】
前記属性取得部は、さらに、前記プロセッサからのライト要求に含まれるライトアドレスが示す領域の属性を取得し、
前記バッファメモリ装置は、さらに、
前記属性判定部によって、前記属性取得部によって取得された属性のうち、前記ライトアドレスが示す領域の属性が前記第１属性である場合に、前記メインメモリ又は前記周辺デバイスに書き込むための前記ライト要求に対応するライトデータを保持する第２バッファメモリと、
前記プロセッサからの前記リード要求又は前記ライト要求であるメモリアクセス要求の性質を示すメモリアクセス情報を取得するメモリアクセス情報取得部と、
前記メモリアクセス情報取得部によって取得されたメモリアクセス情報が示す性質、又は、前記属性取得部によって取得された属性が、予め定められた条件を満たすか否かを判定する条件判定部と、
前記メモリアクセス情報が示す性質が前記条件を満たすと前記条件判定部によって判定された場合、前記第２バッファメモリに保持されたライトデータを前記メインメモリ又は前記周辺デバイスに掃き出す制御部とを備える
請求項１記載のバッファメモリ装置。
【請求項８】
前記メモリアクセス情報取得部は、前記メモリアクセス情報として、前記メモリアクセス要求を発行した論理プロセッサ及び物理プロセッサを示すプロセッサ情報を取得し、
前記条件判定部は、前記プロセッサ情報が示す物理プロセッサとは異なる物理プロセッサで、かつ、前記プロセッサ情報が示す論理プロセッサと同じ論理プロセッサで以前に発行されたライト要求に対応するライトデータが前記第２バッファメモリに保持されている場合に、前記条件を満たすと判定し、
前記制御部は、前記条件を満たすと前記条件判定部によって判定された場合、前記条件を満たす第２バッファメモリに保持されているデータを前記メインメモリ又は前記周辺デバイスに掃き出す
請求項７記載のバッファメモリ装置。
【請求項９】
前記条件判定部は、前記メモリアクセス情報に、前記第２バッファメモリに保持されたデータを前記メインメモリ又は前記周辺デバイスに掃き出すためのコマンド情報が含まれているか否かを判定し、
前記制御部は、前記メモリアクセス情報に前記コマンド情報が含まれていると前記条件判定部によって判定された場合、前記コマンド情報が示す第２バッファメモリに保持されたデータを前記メインメモリ又は前記周辺デバイスに掃き出す
請求項７記載のバッファメモリ装置。
【請求項１０】
前記メモリアクセス情報取得部は、さらに、前記メモリアクセス情報として、前記メモリアクセス要求を発行したプロセッサを示すプロセッサ情報を取得し、
前記条件判定部は、さらに、前記属性情報が示す属性が、前記第１属性であるか否かを判定し、
前記制御部は、さらに、前記属性取得部によって取得された属性が前記第１属性であると前記条件判定部によって判定された場合、前記プロセッサ情報が示すプロセッサに対応する第２バッファメモリに保持されたデータを前記メインメモリ又は前記周辺デバイスに掃き出す
請求項７記載のバッファメモリ装置。
【請求項１１】
前記第２バッファメモリは、さらに、前記ライトデータに対応するライトアドレスを保持し、
前記メモリアクセス情報取得部は、さらに、前記メモリアクセス要求がリード要求を含む場合に、前記メモリアクセス情報として、当該リード要求に含まれるリードアドレスを取得し、
前記条件判定部は、前記リードアドレスに一致するライトアドレスが前記第２バッファメモリに保持されているか否かを判定し、
前記制御部は、前記リードアドレスに一致するライトアドレスが前記第２バッファメモリに保持されていると前記条件判定部によって判定された場合、前記ライトアドレスに対応するライトデータ以前に前記第２バッファメモリに保持されたデータを前記メインメモリ又は前記周辺デバイスに掃き出す
請求項７記載のバッファメモリ装置。
【請求項１２】
前記メモリアクセス情報取得部は、さらに、前記メモリアクセス要求がライト要求を含む場合に、当該ライト要求に含まれる第１ライトアドレスを取得し、
前記条件判定部は、前記第１ライトアドレスが、直前に入力されたライト要求に含まれる第２ライトアドレスに連続するか否かを判定し、
前記制御部は、前記第１ライトアドレスと前記第２ライトアドレスとが連続すると前記条件判定部によって判定された場合、前記第２ライトアドレスに対応するライトデータ以前に前記第２バッファメモリに保持されたデータを前記メインメモリ又は前記周辺デバイスに掃き出す
請求項７記載のバッファメモリ装置。
【請求項１３】
前記条件判定部は、さらに、前記第２バッファメモリに保持されているデータのデータ量が所定の閾値に達したか否かを判定し、
前記制御部は、さらに、前記データ量が前記閾値に達したと前記条件判定部によって判定された場合、前記第２バッファメモリに保持されたデータを前記メインメモリ又は前記周辺デバイスに掃き出す
請求項７記載のバッファメモリ装置。
【請求項１４】
前記バッファメモリ装置は、さらに、
前記プロセッサからのライト要求に含まれるライトアドレスが、前記第１バッファメモリに保持されているデータに対応するアドレスと一致するか否かを判断し、前記ライトアドレスが一致する場合、前記第１バッファメモリに保持されているデータを無効化する無効化部を備える
請求項１記載のバッファメモリ装置。
【請求項１５】
プロセッサと、キャッシャブル属性及びアンキャッシャブル属性のいずれかに属する複数の領域からなるメインメモリ又は周辺デバイスとを備え、前記プロセッサからのリード要求に応じて、前記メインメモリ又は前記周辺デバイスからデータを読み出すメモリシステムであって、
前記プロセッサからのリード要求に含まれるリードアドレスが示す領域の属性を取得する属性取得部と、
前記属性取得部によって取得された属性が、前記アンキャッシャブル属性であり、かつ、バースト転送すべきデータが保持されることを示す第１属性であるか否かを判定する属性判定部と、
前記属性判定部によって、前記属性取得部によって取得された属性が前記第１属性であると判定された場合、前記リードアドレスが示す領域に保持されているデータを含むデータをバーストリードするデータ読出部と、
前記データ読出部によってバーストリードされたデータを保持するバッファメモリとを備え、
前記データ読出部は、前記属性判定部によって、前記属性取得部によって取得された属性が前記第１属性であると判定された場合、さらに、前記リードアドレスが示す領域に保持されているデータが前記バッファメモリに既に保持されているか否かを判断し、当該データが前記バッファメモリに既に保持されている場合、前記バッファメモリから当該データを読み出し、当該データが前記バッファメモリに保持されていない場合、当該データを含むデータをバーストリードする
メモリシステム。
【請求項１６】
前記メモリシステムは、さらに、複数のキャッシュを備え、
前記複数のキャッシュのうち、前記メインメモリ又は前記周辺デバイスに最も近いキャッシュは、前記バッファメモリを備える
請求項１５記載のメモリシステム。
【請求項１７】
プロセッサからのリード要求に応じて、キャッシャブル属性とアンキャッシャブル属性とのいずれかに属する複数の領域からなるメインメモリ又は周辺デバイスからデータを読み出すデータ読出方法であって、
前記プロセッサからのリード要求に含まれるリードアドレスが示す領域の属性を取得する属性取得ステップと、
前記属性取得ステップで取得された属性が、前記アンキャッシャブル属性であり、かつ、バースト転送すべきデータが保持されることを示す第１属性であるか否かを判定する属性判定ステップと、
前記属性判定ステップで、前記属性取得ステップで取得された属性が前記第１属性であると判定された場合、前記リードアドレスが示す領域に保持されているデータが前記バッファメモリに既に保持されているか否かを判断する判断ステップと、
前記判断ステップで、当該データがバッファメモリに既に保持されていると判断された場合、前記バッファメモリから当該データを読み出し、当該データが前記バッファメモリに保持されていないと判断された場合、当該データを含むデータをバーストリードし、バーストリードしたデータを前記バッファメモリに格納するデータ読出ステップとを含む
データ読出方法。
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】全図
【補正方法】変更
【補正の内容】
【図１】
2010032433.tif 000030
【図２】
2010032433.tif 000031
【図３】
2010032433.tif 000032
【図４】
2010032433.tif 000033
【図５】
2010032433.tif 000034
【図６】
2010032433.tif 000035
【図７】
2010032433.tif 000036
【図８】
2010032433.tif 000037
【図９】
2010032433.tif 000038
【図１０】
2010032433.tif 000039
【図１１】
2010032433.tif 000040
【図１２】
2010032433.tif 000041
【図１３】
2010032433.tif 000042
【図１４】
2010032433.tif 000043
【図１５】
2010032433.tif 000044
【図１６】
2010032433.tif 000045
【図１７】
2010032433.tif 000046
【図１８】
2010032433.tif 000047
【図１９】
2010032433.tif 000048
【図２０】
2010032433.tif 000049
【図２１】
2010032433.tif 000050
【図２２】
2010032433.tif 000051
【図２３】
2010032433.tif 000052
【図２４】
2010032433.tif 000053
【図２５】
2010032433.tif 000054
【図２６】
2010032433.tif 000055
【図２７】
2010032433.tif 000056
【国際調査報告】
2010032433.tif 000057
2010032433.tif 000058
2010032433.tif 000059
2010032433.tif 000060