(57)【要約】【課題】ＣＰＵに負荷をかけることなくメモリアクセスの高速化を図る。【解決手段】メモリコントローラ２００内のアドレス変換テーブル２０３が、ＣＰＵやＩ／Ｏデバイスから供給される論理アドレスとメモリ３上の物理アドレスとを所定のブロック単位で管理し、論理アドレスのブロックと物理アドレスのブロックとを対応づけ、データの移動が必要な場合に、アドレス変換テーブル２０３上の論理アドレスのブロックと物理アドレスのブロックとの対応づけを変更することにより、物理アドレス上でデータを移動させることなく、論理アドレス上でデータを移動させてメモリアクセスの高速化を図る。【選択図】        図１
2004240616.tif 000002
【特許請求の範囲】
【請求項１】
メモリと、メモリへのアクセスを行うデバイスとに接続され、デバイスのメモリアクセスを制御するメモリコントローラであって、
デバイスがメモリにアクセスする際に用いる論理アドレスを所定のブロック単位で管理してデバイスのメモリアクセスを制御することを特徴とするメモリコントローラ。
【請求項２】
前記メモリコントローラは、
所定のブロック単位で論理アドレスとメモリ上の物理アドレスとを管理し、論理アドレスのブロックである論理アドレスブロックと物理アドレスのブロックである物理アドレスブロックとを対応づけ、デバイスより論理アドレスが供給された場合に、供給された論理アドレスに対応する物理アドレスブロックを特定し、供給された論理アドレスを物理アドレスに変換するアドレス管理部と、
前記アドレス管理部により変換された物理アドレスに従ってメモリへのアクセスを行うメモリアクセス制御部とを有することを特徴とする請求項１に記載のメモリコントローラ。
【請求項３】
前記アドレス管理部は、
所定の場合に、論理アドレスブロックに対応づけられている特定の物理アドレスブロックについて、対応づけの対象となる論理アドレスブロックを別の論理アドレスブロックに変更することにより、前記特定の物理アドレスブロックを論理アドレス上で移動させることを特徴とする請求項２に記載のメモリコントローラ。
【請求項４】
前記メモリコントローラは、更に、
対応づけの変更前の論理アドレスブロックを設定するソースアドレス・レジスタと、
対応づけの変更後の論理アドレスブロックを設定するディスティネーションアドレス・レジスタと、
対応づけの変更を行うブロックサイズを設定するブロックサイズ・レジスタとを有し、
前記アドレス管理部は、
前記ソースアドレス・レジスタ、前記ディスティネーションアドレス・レジスタ、及び前記ブロックサイズ・レジスタの設定内容に従い、論理アドレスブロックと物理アドレスブロックの対応づけを変更することを特徴とする請求項３に記載のメモリコントローラ。
【請求項５】
前記メモリコントローラは、
所定のブロック単位で論理アドレスとメモリ上の物理アドレスとを管理し、論理アドレスのブロックである論理アドレスブロックと物理アドレスのブロックである物理アドレスブロックとを対応づけるとともに、論理アドレスブロックごとにアドレスシフトのためのシフト量を設定し、デバイスより論理アドレスが供給された場合に、供給された論理アドレスに対応する物理アドレスブロックを特定するとともに、供給された論理アドレスが属する論理アドレスブロックのシフト量に従ってアドレスシフトを行い、供給された論理アドレスを物理アドレスに変換するアドレス管理部と、
前記アドレス管理部により変換された物理アドレスに従ってメモリへのアクセスを行うメモリアクセス制御部とを有することを特徴とする請求項１に記載のメモリコントローラ。
【請求項６】
前記アドレス管理部は、
所定の場合に、特定の論理アドレスブロックについてシフト量を変更することにより、前記特定の論理アドレスブロックに対応づけられている物理アドレスブロックを論理アドレス上で移動させることを特徴とする請求項５に記載のメモリコントローラ。
【請求項７】
前記メモリコントローラは、更に、
シフト量の変更量を設定するシフト量設定レジスタを有し、
前記アドレス管理部は、
前記シフト量設定レジスタに設定されたシフト量の変更量に従って、前記特定の論理アドレスブロックのシフト量を変更することを特徴とする請求項６に記載のメモリコントローラ。
【請求項８】
前記アドレス管理部は、
所定の場合に、論理アドレスブロックに対応づけられている特定の物理アドレスブロックについて、対応づけの対象となる論理アドレスブロックを別の論理アドレスブロックに変更するとともに、前記特定の物理アドレスブロックに新たに対応づけられた論理アドレスブロックのシフト量を変更することにより、前記特定の物理アドレスブロックを論理アドレス上で移動させることを特徴とする請求項５に記載のメモリコントローラ。
【請求項９】
前記メモリコントローラは、プリフェッチに用いられるプリフェッチバッファを管理し、
論理アドレスのブロックである論理アドレスブロックごとにプリフェッチの対象となるか否かを特定するとともに、デバイスより論理アドレスが供給された場合に、供給された論理アドレスがプリフェッチの対象であるか否かを示すプリフェッチ属性情報を出力するプリフェッチ属性管理部と、
前記プリフェッチ属性管理部より出力されたプリフェッチ属性情報に基づき、メモリ及びプリフェッチバッファの少なくともいずれかにアクセスするメモリアクセス制御部とを有することを特徴とする請求項１に記載のメモリコントローラ。
【請求項１０】
前記プリフェッチ属性管理部は、
プリフェッチの対象となる論理アドレスブロックごとに、プリフェッチを行う場合のプリフェッチサイズを特定するとともに、デバイスより供給された論理アドレスがプリフェッチの対象である場合に、供給された論理アドレスの属する論理アドレスブロックのプリフェッチサイズを示すプリフェッチ属性情報を出力し、
前記メモリアクセス制御部は、
前記プリフェッチ属性情報に示されたプリフェッチサイズに従ってメモリ及びプリフェッチバッファの少なくともいずれかにアクセスすることを特徴とする請求項９に記載のメモリコントローラ。
【請求項１１】
前記メモリアクセス制御部は、
デバイスよりプリフェッチの対象となる論理アドレスブロックに対するライトアクセスがあり、当該論理アドレスブロックについてプリフェッチデータがプリフェッチバッファに存在している場合に、当該ライトアクセスのライトデータをメモリ及びプリフェッチバッファの双方に書き込むことを特徴とする請求項９に記載のメモリコントローラ。
【請求項１２】
前記メモリコントローラは、複数のプリフェッチバッファを管理し、
前記メモリアクセス制御部は、
いずれかのプリフェッチバッファへのアクセス中に他のプリフェッチバッファへのアクセスが必要になった場合に、アクセス中のプリフェッチバッファにプリフェッチデータを保持させたまま当該プリフェッチバッファへのアクセスを中断し、アクセスが必要になった他のプリフェッチバッファへのアクセスを開始することを特徴とする請求項９に記載のメモリコントローラ。
【請求項１３】
前記メモリアクセス制御部は、
他のプリフェッチバッファへのアクセスが終了した際に、アクセスが中断したプリフェッチバッファへのアクセスを再開することを特徴とする請求項１２に記載のメモリコントローラ。
【請求項１４】
前記メモリコントローラは、更に、
プリフェッチ対象の論理アドレスブロックについてプリフェッチデータがプリフェッチバッファに存在しないために当該論理アドレスブロックに対するライトデータがプリフェッチバッファに書き込めない状態にある場合に、当該論理アドレスブロックに対するライトアクセスの発生前に当該論理アドレスブロックについて擬似プリフェッチを行って当該論理アドレスブロックに対するライトデータをプリフェッチバッファに書込める状態にするプリフェッチバッファ制御部を有し、
前記メモリアクセス制御部は、
前記プリフェッチバッファ制御部による擬似プリフェッチの後に当該論理アドレスブロックに対するライトアクセスがあった場合に、当該ライトアクセスのライトデータをプリフェッチバッファに書き込むことを特徴とする請求項９に記載のメモリコントローラ。
【請求項１５】
前記メモリコントローラは、プリフェッチに用いられるプリフェッチバッファを管理し、
所定のブロック単位で論理アドレスとプリフェッチバッファ上の物理アドレスとを管理し、論理アドレスのブロックである論理アドレスブロックとプリフェッチバッファ上の物理アドレスのブロックであるプリフェッチバッファ上の物理アドレスブロックとを対応づけ、所定の場合に、論理アドレスブロックに対応づけられているプリフェッチバッファ上の特定の物理アドレスブロックについて、対応づけの対象となる論理アドレスブロックを別の論理アドレスブロックに変更することにより、前記プリフェッチバッファ上の特定の物理アドレスブロックを論理アドレス上で移動させるアドレス管理部を有することを特徴とする請求項１に記載のメモリコントローラ。
【請求項１６】
前記メモリコントローラは、プリフェッチに用いられるプリフェッチバッファを管理し、
所定のブロック単位で論理アドレスとプリフェッチバッファ上の物理アドレスとを管理し、論理アドレスのブロックである論理アドレスブロックとプリフェッチバッファ上の物理アドレスのブロックであるプリフェッチバッファ上の物理アドレスブロックとを対応づけるとともに、論理アドレスブロックごとにアドレスシフトのためのシフト量を設定し、所定の場合に、論理アドレスブロックに対応づけられているプリフェッチバッファ上の特定の物理アドレスブロックについて、対応づけの対象となる論理アドレスブロックを別の論理アドレスブロックに変更するとともに、前記プリフェッチバッファ上の特定の物理アドレスブロックに新たに対応づけられた論理アドレスブロックのシフト量を変更することにより、前記プリフェッチバッファ上の特定の物理アドレスブロックを論理アドレス上で移動させるアドレス管理部を有することを特徴とする請求項１に記載のメモリコントローラ。
【請求項１７】
メモリと、メモリへのアクセスを行うデバイスとの間で、デバイスのメモリアクセスを制御するメモリアクセス制御方法であって、
デバイスがメモリにアクセスする際に用いる論理アドレスを所定のブロック単位で管理してデバイスのメモリアクセスを制御することを特徴とするメモリアクセス制御方法。
【請求項１８】
前記メモリアクセス制御方法は、
所定のブロック単位で論理アドレスとメモリ上の物理アドレスとを管理し、論理アドレスのブロックである論理アドレスブロックと物理アドレスのブロックである物理アドレスブロックとを対応づけ、デバイスより論理アドレスが供給された場合に、供給された論理アドレスに対応する物理アドレスブロックを特定し、供給された論理アドレスを物理アドレスに変換するアドレス管理ステップと、
前記アドレス管理ステップで変換された物理アドレスに従ってメモリへのアクセスを行うメモリアクセス制御ステップとを有することを特徴とする請求項１７に記載のメモリアクセス制御方法。
【請求項１９】
前記アドレス管理ステップは、
所定の場合に、論理アドレスブロックに対応づけられている特定の物理アドレスブロックについて、対応づけの対象となる論理アドレスブロックを別の論理アドレスブロックに変更することにより、前記特定の物理アドレスブロックを論理アドレス上で移動させることを特徴とする請求項１８に記載のメモリアクセス制御方法。
【請求項２０】
前記メモリアクセス制御方法は、
所定のブロック単位で論理アドレスとメモリ上の物理アドレスとを管理し、論理アドレスのブロックである論理アドレスブロックと物理アドレスのブロックである物理アドレスブロックとを対応づけるとともに、論理アドレスブロックごとにアドレスシフトのためのシフト量を設定し、デバイスより論理アドレスが供給された場合に、供給された論理アドレスに対応する物理アドレスブロックを特定するとともに、供給された論理アドレスが属する論理アドレスブロックのシフト量に従ってアドレスシフトを行い、供給された論理アドレスを物理アドレスに変換するアドレス管理ステップと、
前記アドレス管理ステップにより変換された物理アドレスに従ってメモリへのアクセスを行うメモリアクセス制御ステップとを有することを特徴とする請求項１７に記載のメモリアクセス制御方法。
【請求項２１】
前記アドレス管理ステップは、
所定の場合に、特定の論理アドレスブロックについてシフト量を変更することにより、前記特定の論理アドレスブロックに対応づけられている物理アドレスブロックを論理アドレス上で移動させることを特徴とする請求項２０に記載のメモリアクセス制御方法。
【請求項２２】
前記アドレス管理ステップは、
所定の場合に、論理アドレスブロックに対応づけられている特定の物理アドレスブロックについて、対応づけの対象となる論理アドレスブロックを別の論理アドレスブロックに変更するとともに、前記特定の物理アドレスブロックに新たに対応づけられた論理アドレスブロックのシフト量を変更することにより、前記特定の物理アドレスブロックを論理アドレス上で移動させることを特徴とする請求項２０に記載のメモリアクセス制御方法。
【請求項２３】
前記メモリアクセス制御方法は、プリフェッチに用いられるプリフェッチバッファを管理し、
論理アドレスのブロックである論理アドレスブロックごとにプリフェッチの対象となるか否かを特定するとともに、デバイスより論理アドレスが供給された場合に、供給された論理アドレスがプリフェッチの対象であるか否かを示すプリフェッチ属性情報を出力するプリフェッチ属性管理ステップと、
前記プリフェッチ属性管理ステップより出力されたプリフェッチ属性情報に基づき、メモリ及びプリフェッチバッファの少なくともいずれかにアクセスするメモリアクセス制御ステップとを有することを特徴とする請求項１７に記載のメモリアクセス制御方法。
【請求項２４】
前記プリフェッチ属性管理ステップは、
プリフェッチの対象となる論理アドレスブロックごとに、プリフェッチを行う場合のプリフェッチサイズを特定するとともに、デバイスより供給された論理アドレスがプリフェッチの対象である場合に、供給された論理アドレスの属する論理アドレスブロックのプリフェッチサイズを示すプリフェッチ属性情報を出力し、
前記メモリアクセス制御ステップは、
前記プリフェッチ属性情報に示されたプリフェッチサイズに従ってメモリ及びプリフェッチバッファの少なくともいずれかにアクセスすることを特徴とする請求項２３に記載のメモリアクセス制御方法。
【請求項２５】
前記メモリアクセス制御方法は、プリフェッチに用いられるプリフェッチバッファを管理し、
所定のブロック単位で論理アドレスとプリフェッチバッファ上の物理アドレスとを管理し、論理アドレスのブロックである論理アドレスブロックとプリフェッチバッファ上の物理アドレスのブロックであるプリフェッチバッファ上の物理アドレスブロックとを対応づけ、所定の場合に、論理アドレスブロックに対応づけられているプリフェッチバッファ上の特定の物理アドレスブロックについて、対応づけの対象となる論理アドレスブロックを別の論理アドレスブロックに変更することにより、前記プリフェッチバッファ上の特定の物理アドレスブロックを論理アドレス上で移動させるアドレス管理ステップを有することを特徴とする請求項１７に記載のメモリアクセス制御方法。
【請求項２６】
前記メモリアクセス制御方法は、プリフェッチに用いられるプリフェッチバッファを管理し、
所定のブロック単位で論理アドレスとプリフェッチバッファ上の物理アドレスとを管理し、論理アドレスのブロックである論理アドレスブロックとプリフェッチバッファ上の物理アドレスのブロックであるプリフェッチバッファ上の物理アドレスブロックとを対応づけるとともに、論理アドレスブロックごとにアドレスシフトのためのシフト量を設定し、所定の場合に、論理アドレスブロックに対応づけられているプリフェッチバッファ上の特定の物理アドレスブロックについて、対応づけの対象となる論理アドレスブロックを別の論理アドレスブロックに変更するとともに、前記プリフェッチバッファ上の特定の物理アドレスブロックに新たに対応づけられた論理アドレスブロックのシフト量を変更することにより、前記プリフェッチバッファ上の特定の物理アドレスブロックを論理アドレス上で移動させるアドレス管理ステップを有することを特徴とする請求項１７に記載のメモリアクセス制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、マイクロプロセッサやＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）デバイスによりアクセスされるメモリの制御技術に関する。
【０００２】
【従来の技術】
ネットワークやストレージ等のＩ／Ｏデバイスからの入力データは、Ｉ／Ｏデバイスにより、デバイスドライバが管理するＩ／Ｏバッファに転送され、それより上位のミドルウェアやアプリケーションは、このデータをそれぞれのプログラムが管理するデータバッファにコピーして使用する。この時に発生するメモリ間のデータコピーがＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）にとって大きな負荷となっている。
【０００３】
従来の技術では、例えば、特開平１１−３２７７９８では、高速なＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）をＩ／Ｏキャッシュメモリとして用いることにより、アクセススピードが上がる分データコピーにかかるＣＰＵの負荷を軽減させる方法が開示されている。
【０００４】
また、一般的な方法として、チップセットにＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）コントローラを内蔵させることにより、データコピーをＤＭＡコントローラに行わせる方法がある。
【０００５】
また、メモリのリードアクセスに関してはプリフェッチを行うことが有効であり、いくつかの方式が提案されている。
例えば、特開平９−１２０３７２では、プリフェッチ命令を用いることにより好適なプリフェッチを行う手法について開示している。この方法は、ソフトウェアの設計者が通常のロード命令とプリフェッチ命令を意識して記述する必要がある点で一般に普及させることが難しい。また、Ｃ言語を使ったプログラムにおいては、コンパイラが通常のロード命令とプリフェッチ命令を生成し分けることは、さらに困難である点で、実現上の課題がある。
【０００６】
また、特開２０００−１４８５８４では、ＣＰＵのひとつ前のアクセスに関連してプリフェッチを行う方式が開示されている。しかし、メモリを複数のＣＰＵやＩ／Ｏデバイスでシェアするシステムにおいては、メモリへのアクセスは、複数のデバイスが交互にアクセスする場合があり、このようなケースにおいては、プリフェッチによる効果が得られないだけでなく、プリフェッチ動作がメモリバスを使用することによる性能の低下も考えられる。また、単一のＣＰＵアクセスについても、タスクスイッチや割り込み処理等によりメモリアクセス処理が中断されることも考えられる。
【０００７】
【特許文献１】
特開平１１−３２７７９８号公報
【特許文献２】
特開平９−１２０３７２号公報
【特許文献３】
特開２０００−１４８５８４号公報
【０００８】
【発明が解決しようとする課題】
ＣＰＵとメモリとＩ／Ｏデバイスで構成される計算機システムでは、ＣＰＵの内部動作周波数に比して、メモリデバイスの動作周波数が低く、アクセスレイテンシが大きいため、メモリアクセス、特にメモリのリードアクセスやメモリ上のデータの移動にかかる処理がシステム性能のボトルネックになっている。
この問題は、近年のＣＰＵ内部周波数の向上率に比して、メモリの動作周波数やアクセスレイテンシの向上率が低いことに起因しており、計算機システムを構築する上で年々大きな課題となっている。
以上のように、従来の技術では、この問題を有効に解決することができず、本発明はこの問題を解決することを主な目的とする。
【０００９】
【課題を解決するための手段】
本発明に係るメモリコントローラは、
メモリと、メモリへのアクセスを行うデバイスとに接続され、デバイスのメモリアクセスを制御するメモリコントローラであって、
デバイスがメモリにアクセスする際に用いる論理アドレスを所定のブロック単位で管理してデバイスのメモリアクセスを制御することを特徴とする。
【００１０】
【発明の実施の形態】
実施の形態１．
図２は一般的な計算機システムの構成例を示しており、ＣＰＵ１およびネットワークＩ／Ｆ４やストレージＩ／Ｆ５等のＩ／Ｏデバイスはチップセット２を介してメモリ３（例えばＳＤＲＡＭ（Ｓｙｎｃｈｒｏｎｏｕｓ  Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））と接続されている。
ネットワークやストレージへの入力データは、ネットワークデバイスやストレージデバイスより、これらを制御するＩ／Ｏドライバが管理するＩ／Ｏバッファに転送され、その後、そのデータを使用するアプリケーション・ソフトウェアが管理するアプリケーション・バッファにコピーして使用される。同様に、ネットワークやストレージへの出力データは、アプリケーション・バッファよりＩ／Ｏバッファにコピーした後に、ネットワークやストレージデバイスに出力される。データコピーは、ＣＰＵがロード命令とストア命令により行うが、現在のＣＰＵはＣＰＵ内部のクロック周波数に対して、ＣＰＵの外部バスへアクセスを行うためのクロック周波数が１／２〜１／１０程度と低いために、メモリへのアクセスは、ＣＰＵの処理性能に対して非常に低速な処理となる。したがって、このようなデータコピーは、計算機システムの性能にとって大きなマイナス要因であり、データコピーを高速に行う手法が求められている。
【００１１】
例えば、特開平１１−３２７７９８では、高速メモリをＩ／Ｏバッファに用いてシステム性能を向上させているが、前述のようにＣＰＵがロード命令とストア命令を用いて、Ｉ／Ｏバッファから主メモリ上のアプリケーション・バッファへデータコピーを行うため、性能向上の度合いは限定的である。
また、一般的な手法としては、図２のチップセットにＤＭＡコントローラを内蔵して、ＤＭＡコントローラにメモリコピーを行わせる方法がある。この方法においては、ＣＰＵがロード命令やストア命令を実行しなくて済むという利点がある。しかし、データコピーにかかる時間はＣＰＵがロード命令とストア命令により実施するのと大差がない。また、ＤＭＡコントローラがメモリアクセスを行うことにより、ＣＰＵのメモリアクセス性能が低下することや、ＤＭＡコントローラは、データコピーの終了を割り込みにより通知するために、割り込み処理が必要となること等の問題点がある。
【００１２】
図１は、メモリ管理テーブルとしてアドレス変換テーブルを、図２におけるチップセット２上に内蔵されるメモリコントローラ２００に実装した場合の例を示している。
図１において、アドレス変換テーブル２０３は、ＣＰＵ１とＩ／Ｏデバイスが供給する論理アドレスとメモリ上の物理アドレスを例えば１Ｋバイトのブロック単位で管理し、論理アドレスのブロック（論理アドレスブロック）と物理アドレスのブロック（物理アドレスブロック）を対応づけている。アドレス変換テーブル２０３では、例えば、０ｘ１０００番地（Ｌｏｇｉｃ）を先頭とする１Ｋバイト分の論理アドレスブロックと、０ｘ２０００番地（Ｐｈｙ）を先頭とする１Ｋバイト分の物理アドレスブロックとを対応づけるといった形で論理アドレスブロックと物理アドレスブロックの対応づけを管理している。そして、アドレス変換テーブル２０３では、ＣＰＵ又はＩ／Ｏデバイスから論理アドレスが供給された場合に、供給された論理アドレスが対応する物理アドレスブロックを特定し、論理アドレスを物理アドレスに変換し、変換した物理アドレスをメモリアクセス制御回路２０２に供給する。
制御レジスタ２０４は、アドレス変換テーブル２０３の内容を更新するためのソフトウェアインタフェースである。
調停回路２０１は、ＣＰＵとＩ／Ｏデバイスのアクセスの調停を行い、いずれかのアクセスのみをメモリアクセス制御回路２０２とアドレス変換テーブル２０３に供給する。
メモリアクセス制御回路２０２は、上記調停回路２０１より供給されたアクセスによりメモリの制御を行う。その際に、アドレスとして、アドレス変換テーブルが供給するメモリの物理アドレスを使用する。
【００１３】
なお、ＣＰＵ１、ネットワークＩ／Ｆ４やストレージＩ／Ｆ５等のＩ／Ｏデバイスは、メモリを共用する複数のデバイスであり、メモリコントローラにおいて、管理テーブルはアドレス管理部の例に相当し、メモリアクセス制御回路はメモリアクセス制御部の例に相当する。
【００１４】
一般的な計算機システムでは、Ｉ／Ｏバッファに置かれている受信データをアプリケーション・バッファにデータコピーした後、コピー元のデータにアクセスすることは殆どない。これは、Ｉ／Ｏバッファがデバイスドライバによって管理されているメモリ領域であり、デバイスドライバは、Ｉ／Ｏデバイスを制御するためのソフトウェアであるために、デバイスの制御が、この場合はデータ受信処理が終わってしまえば、その受信データにアクセスする必要が無くなるためである。
従って、多くの場合において、このようなＩ／Ｏバッファからアプリケーション・バッファにコピーされる場合は、データコピーはデータムーブ（移動）であっても差し支えないことになる。
【００１５】
本実施の形態では、物理アドレス上はデータを移動させずに、アドレス変換テーブルを更新することで、論理アドレス上でデータを移動させることにより、高速にデータムーブを行う特徴を持つ。
具体的に図１の構成において、ネットワークＩ／Ｆが１Ｋバイトのデータを受信する例を用いて説明を行う。
ネットワークＩ／Ｆは、デバイスドライバにより、Ｉ／Ｏバッファに受信データを転送するようにプログラミングされている。Ｉ／Ｏバッファはデバイスドライバからは、論理アドレスで管理されている。従って、ネットワークＩ／Ｆは受信データを論理アドレスにより転送する。この例では、Ｉ／Ｏバッファのアドレスを、０ｘ１０００番地（Ｌｏｇｉｃ）であるとする。
ネットワークＩ／Ｆは、データを受信するとＩ／Ｏバスを用いて０ｘ１０００番地（Ｌｏｇｉｃ）に受信データの転送を行う。チップセット内部のメモリコントローラ２００は、この転送を受けてアドレス変換テーブル２０３を用いて、論理アドレスから物理アドレスへの変換を行い、物理アドレスでメモリへデータの転送を行う。
ここでは仮にアドレス変換テーブル２０３において、０ｘ１０００番地（Ｌｏｇｉｃ）が０ｘ２０００番地（Ｐｈｙ）に対応づけられていた、つまり、０ｘ１０００番地（Ｌｏｇｉｃ）を先頭とする１Ｋバイト分の論理アドレスブロックと０ｘ２０００番地（Ｐｈｙ）を先頭とする１Ｋバイト分の物理アドレスブロックが対応づけられていたとする。アドレス変換テーブル２０３では、下位１０ビットは論理アドレスをそのまま物理アドレスとして出力し、それ以外の上位アドレスは、テーブルに保持されている対応づけられたアドレスに付け替えて物理アドレスとし、メモリアクセス制御回路に出力する。つまり、アドレス変換テーブル２０３では、論理アドレスブロックと物理アドレスブロックの対応づけから、供給された論理アドレスに対応する物理アドレスブロックを特定して、論理アドレスを物理アドレスに変換する。
メモリアクセス制御回路は物理アドレスでメモリにアクセスを行う。
このようにすることで、０ｘ１０００番地（Ｌｏｇｉｃ）は、０ｘ２０００番地（Ｐｈｙ）に変換されて、メモリへは０ｘ２０００番地（Ｐｈｙ）にデータが転送される。ここで、０ｘ２０００番地（Ｐｈｙ）は、ネットワークＩ／Ｆからだけでなく、ＣＰＵからも０ｘ１０００番地（Ｌｏｇｉｃ）によりアクセスされることを付け加えておく。
【００１６】
デバイスドライバによる一定の処理が完了した後、受信データはアプリケーション・バッファに渡される。ここでは仮に、アプリケーション・バッファのアドレスが０ｘ８０００番地（Ｌｏｇｉｃ）であるとし、アドレス変換テーブル２０３では０ｘ８０００番地（Ｌｏｇｉｃ）と０ｘ９０００番地（Ｐｈｙ）とを対応づけていた、つまり、０ｘ８０００番地（Ｌｏｇｉｃ）を先頭とする１Ｋバイト分の論理アドレスブロックと０ｘ９０００番地（Ｐｈｙ）を先頭とする１Ｋバイト分の物理アドレスブロックとを対応づけていたとする。この場合に、ソフトウェアは、アドレス変換テーブルを０ｘ８０００番地（Ｌｏｇｉｃ）と０ｘ２０００番地（Ｐｈｙ）とを対応づけるように書き換え、もともと、０ｘ８０００番地（Ｌｏｇｉｃ）に対応づけられていた０ｘ９０００番地（Ｐｈｙ）を０ｘ１０００番地（Ｌｏｇｉｃ）と対応づけるように書き換える。
これにより、アプリケーション・ソフトウェアは０ｘ８０００番地（Ｌｏｇｉｃ）、すなわちアプリケーション・バッファをアクセスすれば、０ｘ２０００番地（Ｐｈｙ）にアクセスすることとなり、受信データにアクセスできるようになる。すなわち、０ｘ１０００番地（Ｌｏｇｉｃ）から０ｘ８０００番地（Ｌｏｇｉｃ）へ１Ｋバイトのデータが移動したことになる。このように、論理アドレスブロックに対応づけられている特定の物理アドレスブロックについて、対応づけの対象となる論理アドレスブロックを別の論理アドレスブロックに変更することにより、特定の物理アドレスブロックを論理アドレス上で移動させることができる。
同時に、デバイスドライバが管理するＩ／Ｏバッファ０ｘ１０００番地（Ｌｏｇｉｃ）には、新たに０ｘ９０００番地（Ｐｈｙ）が物理領域として割り当てられることになる。
同様に、２Ｋバイトの受信データであれば、２ブロック分のアドレス変換テーブルを書き換えれば良い。
【００１７】
そして、本実施の形態では、アドレス変換テーブルの書き換えに関して、好適なソフトウェアインタフェースも定義する。メモリコントローラには、アドレス変換テーブル書き換え用として、制御レジスタ２０４に、ソースアドレス・レジスタとディスティネーションアドレス・レジスタとブロックサイズ・レジスタを備える。ソースアドレス・レジスタには、書換え前（対応づけの変更前）の論理アドレスブロックを設定し、ディスティネーションアドレス・レジスタには書換え後（対応づけの変更後）の論理アドレスブロックを設定し、ブロックサイズ・レジスタには書換え（対応づけの変更）を行うブロックサイズを設定する。
前述した、ネットワークＩ／Ｆから受信したＩ／Ｏバッファにあるデータをアプリケーション・バッファに移動するケースでは、ソースアドレス・レジスタに０ｘ１０００番地（Ｌｏｇｉｃ）を設定し、ディスティネーションアドレス・レジスタに０ｘ８０００番地（Ｌｏｇｉｃ）を設定し、ブロックサイズ・レジスタに１（１ブロック＝１ＫＢ）を設定することで、メモリコントローラが、０ｘ１０００番地（Ｌｏｇｉｃ）に対応づけられていた１Ｋバイトの物理アドレスブロックを０ｘ８０００番地（Ｌｏｇｉｃ）に対応づけ、０ｘ８０００番地（Ｌｏｇｉｃ）に対応づけられていた１Ｋバイトの物理アドレスブロックを０ｘ１０００番地（Ｌｏｇｉｃ）に対応づける。
このようなソフトウェアインタフェースにより、ソフトウェアに論理アドレスと物理アドレスの対応づけを意識する必要が無くなり、システムの設計が容易になる。
【００１８】
このように、本実施の形態のメモリコントローラは、アドレス変換テーブルの対応づけを更新することで、物理アドレス上でデータを移動させることなく、論理アドレス上でデータを移動させることができ、これにより高速にデータムーブを行うことができ、ＣＰＵに負荷をかけることなくメモリアクセスの高速化を図ることができる。
【００１９】
実施の形態２．
実施の形態１で示したアドレス変換機能を用いたブロック単位のデータムーブ機能に加えて、本実施の形態では、メモリコントローラがブロック単位にメモリを管理していることを利用して、ワード単位のデータ移動の機能を実現する。この機能は、ネットワークＩ／Ｆにデータを出力する場合などに、ブロックデータにパケットヘッダを付加する場合に好適である。
なお、本実施の形態において、ワードはメモリバスのビット幅と同じとし、メモリバスのビット幅は３２ビットとする。すなわち、１ワードは４バイトである。
【００２０】
図３は、ワード単位でのデータ移動を可能にしたメモリコントローラ２００の内部構造を示している。
アドレス変換＋ワードシフトテーブル２０５は、実施の形態１のアドレス変換テーブル２０３の機能に加えて、メモリコントローラが管理するメモリブロック毎にアドレスをシフトするためのシフト量を保持するためのテーブルである。つまり、アドレス変換＋ワードシフトテーブル２０５は、実施の形態１のアドレス変換テーブルと同様に論理アドレスブロックと物理アドレスブロックとを対応づけるとともに、更に、論理アドレスブロックごとにアドレスシフトのためのシフト量を設定している。シフト量はワード単位で設定が可能で１ワードは４バイトである。
本実施の形態では、制御レジスタ２０４は、実施の形態１のアドレス変換テーブルを更新するためのソフトウェアインタフェースに加えて、メモリコントローラが管理するメモリブロック毎のシフト量を設定するためのブロックアドレス指定レジスタとシフト量設定レジスタからなるソフトウェアインタフェースを備える。
なお、本実施の形態においても、メモリコントローラが管理するメモリブロックサイズは、１Ｋバイトとする。
また、本実施の形態のアドレス変換＋ワードシフトテーブルは、アドレス管理部の例に相当する。
【００２１】
例えば、０ｘ１０００番地（Ｌｏｇｉｃ）にある５１２バイトのブロック・データに３２バイトのパケットヘッダを付加するために、０ｘ１０２０番地（Ｌｏｇｉｃ）にブロック・データを移動する場合について説明する。
まず、ソフトウェアは制御レジスタのブロックアドレス指定レジスタに０ｘ１０００番地（Ｌｏｇｉｃ）を設定し、シフト量設定レジスタに８（８ワード＝３２バイト）を設定し、ワードシフトテーブル更新コマンドを発行することにより、０ｘ１０００番地（Ｌｏｇｉｃ）のブロックを３２バイトシフトするようにワードシフトテーブルを更新する。
前記設定が行われると、アドレス変換＋ワードシフトテーブル２０５は、メモリの物理アドレスを生成する場合に、下位１０ビットについては、ＣＰＵおよびＩ／Ｏデバイスが供給するアドレスに対してワードシフトテーブルに設定されたシフト量を引き算したアドレスを生成し、それ以外の上位アドレスは、実施の形態１に示すようにアドレスの付け替えによりアドレスを生成する。つまり、本実施の形態では、ＣＰＵやＩ／Ｏデバイスから供給された論理アドレスに対応する物理アドレスブロックを特定するとともに、供給された論理アドレスが属する論理アドレスブロックのシフト量に従ってアドレスシフトを行い、供給された論理アドレスを物理アドレスに変換する。
【００２２】
仮に、０ｘ１０００番地（Ｌｏｇｉｃ）と０ｘ２０００番地（Ｐｈｙ）が対応づけられていて、０ｘ１０００番地（Ｌｏｇｉｃ）のブロックに３２バイトのシフト量が設定されている場合、ＣＰＵおよびＩ／Ｏデバイスからの０ｘ１０２０番地（Ｌｏｇｉｃ）は、０ｘ２０００番地（Ｐｈｙ）に変換され、０ｘ１０００番地（Ｌｏｇｉｃ）は、０ｘ２３Ｅ０番地（Ｐｈｙ）に変換される。
このことは、付加される３２バイトのヘッダは、物理メモリ上は０ｘ２３Ｅ０番地（Ｐｈｙ）から０ｘ２３ＦＦ番地（Ｐｈｙ）の３２バイトの物理アドレス空間に置かれ、ＣＰＵおよびＩ／Ｏデバイスからは０ｘ１０００番地（Ｌｏｇｉｃ）から０ｘ１０２０番地（Ｌｏｇｉｃ）の３２バイトの論理アドレス空間によってアクセスされることになる。また、５１２バイトのブロックデータは、物理メモリ上は、０ｘ２０００番地（Ｐｈｙ）から０ｘ２２００番地（Ｐｈｙ）の５１２バイトの物理アドレス空間に置かれ、ＣＰＵおよびＩ／Ｏデバイスからは、０ｘ１０２０番地（Ｌｏｇｉｃ）から０ｘ１２１Ｆ番地（Ｌｏｇｉｃ）の５１２バイトの論理アドレス空間によってアクセスされることを示す。
【００２３】
さらに、ワードシフトを設定したブロックを実施の形態１に示す方法により、論理アドレス上を移動（データムーブ）させる場合について説明する。
例えば、０ｘ１０００番地（Ｌｏｇｉｃ）は物理アドレス０ｘ２０００番地（Ｐｈｙ）と対応づけられており、ワードシフト量が８に設定されていて、０ｘ８０００番地（Ｌｏｇｉｃ）は物理アドレス０ｘ９０００番地（Ｐｈｙ）と対応づけられており、ワードシフト量が１に設定されているとする。
０ｘ１０００番地（Ｌｏｇｉｃ）と０ｘ８０００番地（Ｌｏｇｉｃ）を実施の形態１に示す方法によりデータムーブさせる場合は、０ｘ１０００番地（Ｌｏｇｉｃ）の物理アドレスとワードシフト量を、０ｘ８０００番地（Ｌｏｇｉｃ）のデータムーブ後の物理アドレスとワードシフト量とし、０ｘ８０００番地（Ｌｏｇｉｃ）の物理アドレスとワードシフト量を、０ｘ１０００番地（Ｌｏｇｉｃ）のデータムーブ後の物理アドレスとワードシフト量とすれば良い。即ち、０ｘ１０００番地（Ｌｏｇｉｃ）のデータムーブ後の物理アドレスは０ｘ９０００番地（Ｐｈｙ）、ワードシフト量は１であり、０ｘ８０００番地（Ｌｏｇｉｃ）のデータムーブ後の物理アドレスは０ｘ２０００番地（Ｐｈｙ）、ワードシフト量は８である。
この結果、ＣＰＵおよびＩ／Ｏデバイスは、０ｘ８０００番地（Ｌｏｇｉｃ）から０ｘ８０１Ｆ番地（Ｌｏｇｉｃ）の論理アドレスにより付加した３２バイトのパケットヘッダをアクセスでき、０ｘ８０２０番地（Ｌｏｇｉｃ）から０ｘ８２１Ｆ番地（Ｌｏｇｉｃ）の論理アドレスにより５１２バイトのブロック・データをアクセスすることが可能になる。
このように、本実施の形態では、論理アドレスブロックに対応づけられている特定の物理アドレスブロックについて、対応づけの対象となる論理アドレスブロックを別の論理アドレスブロックに変更するとともに、特定の物理アドレスブロックに新たに対応づけられた論理アドレスブロックのシフト量を変更することにより、特定の物理アドレスブロックを論理アドレス上で移動させることができる。
なお、以上の説明では、ブロック及びシフト量の双方を変更することでデータを論理アドレス上で移動させる場合について説明したが、ブロックの変更を伴わずにワードシフトテーブルに示されているシフト量を変更することで論理アドレス上でデータを移動させてもよい。
【００２４】
さらに、本実施の形態ではソフトウェアによるワードシフトテーブルの変更を容易にするために、ワードシフト量設定レジスタは、相対的なシフト量（シフト量の変更量）を設定するようにする。すなわち、その時点から何ワードシフトするかを設定するようにする。そして、ワードシフトテーブルの更新は、その時点でのワードシフト管理テーブルに設定されているシフト量にシフト量設定レジスタに設定された相対値（シフト量の変更量）を足し算したものを新たな値として書き込む。
例えば、既にワードシフト量８と設定されているメモリブロックに対して、シフト量設定レジスタに１と設定してワードシフトコマンドが発行した場合は、ワードシフトテーブルは９に更新される。このようにすることで、ソフトウェアは、以前に設定したシフト量を意識する必要がなくなるため、管理が容易になる。
【００２５】
このように、本実施の形態のメモリコントローラは、アドレス変換テーブルの対応づけ及びワードシフトテーブルのシフト量を更新することで、物理アドレス上でデータを移動させることなく、論理アドレス上でブロック単位及びワード単位でデータを移動させることができ、これにより高速にデータムーブを行うことができ、ＣＰＵに負荷をかけることなくメモリアクセスの高速化を図ることができる。
【００２６】
実施の形態３．
本実施の形態では、メモリに対するプリフェッチを効率的に行うことにより計算機システムの性能を向上させる方法について示す。
【００２７】
図５、図６は、図２に示す計算機システムにおいて、主メモリに一般的なＳＤＲＡＭを用いた場合のプリフェッチを行わない場合とプリフェッチを行った場合の連続するアドレスへのアクセスのタイミングを示したものである。プリフェッチを行わない場合は、図５に示すように、２回目以降のアクセスが９サイクルかかっているのに対して、プリフェッチを行った場合は、図６に示すように、２回目以降のバーストが５サイクルで完了する。これは、プリフェッチを行うことで、ＳＤＲＡＭのレイテンシを隠蔽できることによる。また、メモリバスに流れるデータ量を見れば分かるように、ＣＰＵからのトランザクションを待たずにメモリをアクセスすることで、メモリバスの実質的バンド幅を大幅に向上させることも可能となる。このように、ＳＤＲＡＭへのブロック・リード・アクセスは、プリフェッチを行うことが、ＳＤＲＡＭ特有のアクセス・レイテンシを低減できる点で有効である。
【００２８】
しかしながら、実際の計算機システムにおいては、いつもブロックデータにアクセスする訳ではなく、様々なサイズのデータへのアクセスが存在するため、常にプリフェッチを行うことは計算機システムの性能を向上させる上で決して有効な手法ではない。例えば、４バイトのデータに対して、１Ｋバイトのプリフェッチを行ってしまえば、システム性能としては非常に大きなダメージを受ける。また、プリフェッチが有効なデータへのアクセスであっても、割り込みやタスクスイッチ、他のＩ／Ｏからのメモリアクセスにより、連続する領域へのアクセスが中断されてしまうケースもある。
従って、一般的な計算機システムではプリフェッチは行わず、特開平１１−３２７７９８の例にあるように高速メモリを部分的に用いてシステム性能を向上させている。
【００２９】
また、プリフェッチを行う手法としては、特開平９−１２０３７２の例にあるように、プロセッサが実行する命令にプリフェッチ情報を埋め込む方法がある。この方法では、特開２０００−１４８５８４に示されるように、
コンパイラが通常のロード命令とプリフェッチ命令を区別して生成することが困難であるとの問題点がある。
また、特開２０００−１４８５８４の方法によれば、上記コンパイラによる問題は解決されるものの、ＣＰＵのひとつ前のアクセスに関連してプリフェッチ動作が行われる点において、前述したように割り込みやタスクスイッチ、他のＩ／Ｏからのメモリアクセスにより連続するアクセスが中断された場合に、プリフェッチが有効に働かないという問題点がある。
【００３０】
図４は、本実施の形態に係るメモリコントローラ２００の構成例を示す。
図４において、調停回路２０１は、ＣＰＵとＩ／Ｏデバイスのアクセスの調停を行い、いずれかのアクセスのみをメモリアクセス制御回路２０２とエリア属性管理テーブル２０６に供給する。
エリア属性管理テーブル２０６は、１Ｋバイトの論理アドレスブロックごとにエリア属性を保持し、調停回路２０１を介してＣＰＵ又はＩ／Ｏデバイスより供給される論理アドレスにより、エリア属性情報をメモリアクセス制御回路２０２に供給する。エリア属性には、論理アドレスブロックがプリフェッチの対象となるか否か、及びプリフェッチを行うとした場合のプリフェッチサイズが示されている。エリア属性管理テーブル２０６は、調停回路２０１を介してＣＰＵ又はＩ／Ｏデバイスより論理アドレスが供給された場合に、エリア属性情報として、供給された論理アドレスがプリフェッチの対象となるか否か、プリフェッチの対象となる場合にはそのプリフェッチサイズをメモリアクセス制御回路２０２に通知する。プリフェッチサイズは、回路を簡単にするために、例えば、１Ｋバイト、５１２バイト、２５６バイトの３通りとする。
なお、エリア属性管理テーブルは、プリフェッチ属性管理部の例に相当し、エリア属性情報はプリフェッチ属性情報の例に相当する。
【００３１】
メモリアクセス制御回路２０２は、調停回路２０１より供給されるアドレスと、エリア属性管理テーブル２０６から供給されるエリア属性情報、プリフェッチバッファ２０８に該データ（プリフェッチデータ）が有るか無いか（Ｈｉｔ／Ｍｉｓｓ）により、以下に示すメモリまたはプリフェッチバッファへのアクセスを行う。
（１）リードアクセスであり、プリフェッチ可能、プリフェッチバッファにプリフェッチデータが無い場合
エリア属性のプリフェッチサイズ分のデータをメモリよりリードし、該アクセスに対するリードデータを返すと同時に、全てのリードデータをプリフェッチバッファに書き込む。
（２）リードアクセスであり、プリフェッチ可能、プリフェッチバッファにプリフェッチデータが有る場合
メモリへはアクセスを行わず、プリフェッチバッファよりデータをリードし、該アクセスに対するリードデータを返す。
（３）ライトアクセスであり、プリフェッチ可能、プリフェッチバッファにプリフェッチデータが有る場合
プリフェッチバッファとメモリの双方に対して、該アクセスのライトデータを書き込む。
（４）ライトアクセスであり、プリフェッチ可能、プリフェッチバッファにプリフェッチデータが無い場合、及び、ライトアクセスであり、プリフェッチ不可である場合
該アクセスのライトデータをメモリに書き込む。
【００３２】
プリフェッチバッファ制御回路２０７は、調停回路２０１より供給されるアドレスによりアクセスされるデータがプリフェッチバッファに有るか無いかを判定し、該アクセスのデータがプリフェッチバッファに有る場合はＨｉｔ信号を、無い場合はＭｉｓｓ信号を出力する。また、本実施の形態では複数個のプリフェッチバッファ２０８を備える。プリフェッチバッファ制御回路２０７は、これら複数のプリフェッチバッファ２０８へのアクセス履歴を保持し、新たな領域へのプリフェッチ要求に対しては、もっともアクセス履歴が古いプリフェッチバッファを廃棄して、そのプリフェッチバッファに新たなプリフェッチデータを保持する。なお、本実施の形態でのプリフェッチバッファのサイズは１Ｋバイト、プリフェッチバッファの数は８個である。なお、プリフェッチバッファ制御回路は、プリフェッチバッファ制御部の例に相当する。
【００３３】
１Ｋバイトの０ｘ１０００番地にあるブロックデータへのリードアクセスを行う場合について例を示す。
まず、ソフトウェアは、この領域をプリフェッチ可能、プリフェッチサイズ１Ｋバイトにエリア属性管理テーブル２０６を設定する。この処理は、ＯＳがタスクやハンドラにメモリを割り当てる時に行っても良いし、タスクやハンドラ自身が行っても良い。
ＣＰＵもしくは、Ｉ／Ｏデバイスがこの領域、例えば０ｘ１０００番地へのリードアクセスを発行すると、エリア属性管理テーブル２０６は、メモリアクセス制御回路２０２に対してプリフェッチ可能、プリフェッチサイズが１Ｋバイトのエリア属性情報を出力すると同時に、プリフェッチバッファ制御回路はＭｉｓｓを出力する。
これを受けて、メモリアクセス制御回路は、メモリに対して図５に示す連続したリードアクセスによって１Ｋバイトのデータをリードし、ＣＰＵもしくはＩ／Ｏデバイスへリードデータを返すと同時に、プリフェッチバッファへリードしたデータ全てを書き込む。
次に、０ｘ１０２０番地へのアクセスがあった場合は、エリア属性管理テーブル２０６からプリフェッチ可能とのエリア属性情報、プリフェッチバッファ制御回路２０７からＨｉｔが出力されるので、メモリアクセス制御回路２０２はプリフェッチバッファ２０８よりデータをリードして、ＣＰＵもしくは、Ｉ／Ｏデバイスにリードデータを返す。
【００３４】
さらに、本実施の形態ではプリフェッチバッファを複数持つことで、プリフェッチバッファの利用効率を高めている。例えば、前記のように０ｘ１０００番地から１Ｋバイトをプリフェッチバッファに保持した状態で、０ｘ２０００番地へのリードアクセスがあった場合、その０ｘ２０００番地がプリフェッチ可能であれば、その時点で最もアクセス履歴の古い、すなわち、最後にアクセスされてから時間が経過しているプリフェッチバッファを破棄して０ｘ２０００番地のデータをプリフェッチバッファに格納する。このことは、ブロックデータへのアクセスの途中で、命令フェッチやタスクスイッチ、割り込み処理、Ｉ／Ｏデバイスからのアクセス等の発生によるプリフェッチしたブロックデータへの連続アクセスの中断があっても、プリフェッチデータを保持し続けることができ、低レイテンシなデータ提供を可能にする。つまり、本実施の形態では、メモリアクセス制御回路は、いずれかのプリフェッチバッファへのアクセス中に他のプリフェッチバッファへのアクセスが必要になった場合に、アクセス中のプリフェッチバッファにプリフェッチデータを保持させたまま当該プリフェッチバッファへのアクセスを中断し、アクセスが必要になった他のプリフェッチバッファへのアクセスを開始することができ、更には、他のプリフェッチバッファへのアクセスが終了した際に、アクセスが中断したプリフェッチバッファへのアクセスを再開することができる。
また、このような特徴から、本実施の形態がブロックデータへのアクセスだけでなく、命令アクセスに対しても有効であることを示す。
【００３５】
さらに、本実施の形態では、プリフェッチされた領域へのライトアクセスがあった場合は、メモリアクセス制御回路が、メモリにライトするのと平行して、プリフェッチバッファにもライトする。このことにより、データのコヒーレンシを保証し、次にリードアクセスがあった場合に低レイテンシなデータ供給が可能となる。
【００３６】
さらに、本実施の形態では、ＣＰＵとＩ／Ｏデバイスとのデータの受け渡しも高性能に実現することが可能である。例えば、ネットワークＩ／Ｆが受信したデータは、メモリ上のＩ／Ｏバッファにライトされ、そのデータはＣＰＵによってリードされる可能性が非常に高い。このような場合に、Ｉ／Ｏバッファの領域がプリフェッチバッファにあれば、ネットワークＩ／Ｆからのライトは、プリフェッチバッファにもライトされるために、その後のＣＰＵからのリードは、プリフェッチバッファにアクセスすることになるため、高速に処理することが可能となる。Ｉ／Ｏバッファ領域をプリフェッチバッファに載せるためには、Ｉ／Ｏバッファ領域のエリア属性をプリフェッチ可能、プリフェッチサイズ１Ｋバイトに設定し、１ＷＯＲＤリードすれば、プリフェッチが行われてＩ／Ｏバッファ領域がプリフェッチバッファに載ることになる。
ただし、このような受信バッファ領域には多くの場合は、受信前には意味の有るデータが置かれていない、即ちソフトウェアから見ればバッファが空であり、このような場合にはデータのコヒーレンシを保証しなくても良いことになる。
そこで、本実施の形態では、擬似プリフェッチ機能を定義する。擬似プリフェッチ機能は、プリフェッチをせずにプリフェッチをしたことにする機能である。具体的には、ソフトウェアが、制御レジスタを通して、擬似プリフェッチアドレスを設定し、擬似プリフェッチコマンドを発行する。これが発行されると、プリフェッチバッファ制御回路２０７は、擬似プリフェッチを行い、擬似プリフェッチアドレスに対して、プリフェッチバッファを与える。これに伴うメモリへのリードは行わない。従って、ＣＰＵとＩ／Ｏデバイスとの間のデータのやり取りを高速に行うことができる上に、メモリバスを効率的に使うことが可能となる。
このように本実施の形態では、プリフェッチ対象の論理アドレスブロックについてプリフェッチデータがプリフェッチバッファに存在しないために当該論理アドレスブロックに対するライトデータがプリフェッチバッファに書き込めない状態にある場合に、プリフェッチバッファ制御回路が当該論理アドレスブロックに対するライトアクセスの発生前に当該論理アドレスブロックについて擬似プリフェッチを行って当該論理アドレスブロックに対するライトデータをプリフェッチバッファに書込める状態にする。
【００３７】
以上のように、本実施の形態のメモリコントローラは、論理アドレスブロックごとのエリア属性に従ってプリフェッチを行うため、プリフェッチが有効な論理アドレスブロックのみプリフェッチを行うといった効率的なプリフェッチを行うことができる。
また、エリア属性としてプリフェッチサイズが設定されているため、論理アドレスブロックごとに効率のよいプリフェッチサイズでプリフェッチを行うことができる。
【００３８】
更には、本実施の形態のメモリコントローラは、複数のプリフェッチバッファを備えているため、ブロックデータへのアクセスの途中で、命令フェッチやタスクスイッチ、割り込み処理、Ｉ／Ｏデバイスからのアクセス等の発生によるプリフェッチしたブロックデータへの連続アクセスの中断があっても、プリフェッチデータを保持し続けることができ、低レイテンシなデータ提供を可能にする。
また、本実施の形態のメモリコントローラは、ブロックデータへのアクセスだけでなく、命令アクセスに対しても有効である。
【００３９】
また、本実施の形態のメモリコントローラは、プリフェッチされた領域へのライトアクセスがあった場合は、メモリにライトするのと平行して、プリフェッチバッファにもライトする。このことにより、データのコヒーレンシを保証し、次にリードアクセスがあった場合に低レイテンシなデータ供給が可能となる。
【００４０】
また、本実施の形態のメモリコントローラは、擬似プリフェッチを行うことにより、複数のデバイス間のデータのやり取りを高速に行うことができる上に、メモリバスを効率的に使うことが可能となる。
【００４１】
実施の形態４．
実施の形態１および実施の形態２と実施の形態３でそれぞれ示したデータを移動する機能とプリフェッチ機能を組み合わせて使用することも可能である。
この場合は、実施の形態３で示したエリア属性管理テーブルは、実施の形態１又は２で示す論理アドレスが管理され、実施の形態３で示したプリフェッチバッファは、実施の形態１又は２で示す物理アドレスが管理されるようにすれば良い。
このようにすれば、ネットワークＩ／Ｆより受信したデータは、ネットワークＩ／Ｆがメモリに書き込むのと同時にプリフェッチバッファに書き込まれ、これを実施の形態１又は２の方法に基づいて移動すると、プリフェッチバッファは物理アドレスで管理されているため、プリフェッチバッファも論理アドレス上を移動することになる。従って、データを移動した後のデータアクセスはプリフェッチバッファに対して行われることになり、非常に高速なデータアクセスが可能となる。
以上より、実施の形態１と実施の形態３とを組合せた場合は、論理アドレスブロックに対応づけられているプリフェッチバッファ上の特定の物理アドレスブロックについて、対応づけの対象となる論理アドレスブロックを別の論理アドレスブロックに変更することにより、プリフェッチバッファ上の特定の物理アドレスブロックを論理アドレス上で移動させることができ、実施の形態２と実施の形態３とを組み合わせた場合は、論理アドレスブロックに対応づけられているプリフェッチバッファ上の特定の物理アドレスブロックについて、対応づけの対象となる論理アドレスブロックを別の論理アドレスブロックに変更するとともに、プリフェッチバッファ上の特定の物理アドレスブロックに新たに対応づけられた論理アドレスブロックのシフト量を変更することにより、プリフェッチバッファ上の特定の物理アドレスブロックを論理アドレス上で移動させることができる。
【００４２】
このように、本実施の形態のメモリコントローラは、プリフェッチバッファ上のデータも論理アドレス上を移動させることができ、従って、データを移動した後のデータアクセスはプリフェッチバッファに対して行われることになり、非常に高速なデータアクセスが可能となる。
【００４３】
ここで、以上の実施の形態１〜４に示したメモリコントローラの特徴を以下にて再言する。
【００４４】
実施の形態１〜４に示したメモリコントローラは、ＣＰＵとネットワークＩ／ＦやストレージＩ／Ｆ等のＩ／Ｏデバイスにより共有されるメモリへのアクセスを制御するメモリコントローラであって、ＣＰＵとＩ／Ｏデバイスが供給するアドレス（論理アドレス）をブロック単位で管理する管理テーブルを備えたことを特徴とする。
【００４５】
実施の形態１に示したメモリコントローラは、ブロック毎に論理アドレスとメモリの物理アドレスを対応づけるアドレス変換テーブルを有し、このアドレス変換テーブルの情報に基づいてＣＰＵとＩ／Ｏデバイスが供給する論理アドレスを変換した物理アドレスによってメモリにアクセスすることを特徴とする。
【００４６】
実施の形態１に示したメモリコントローラは、アドレス変換テーブルを書き換えることにより、論理アドレス上、データを移動させることができることを特徴とする。
【００４７】
実施の形態１に示したメモリコントローラは、ソフトウェアインタフェースとして、ソースアドレス・レジスタとディスティネーションアドレス・レジスタとデータサイズ・レジスタを備え、これらのレジスタを設定への設定情報に基づいて、アドレス変換テーブルを書き換えることを特徴とする。
【００４８】
実施の形態２に示したメモリコントローラは、ブロック毎にワードシフト量を有し、論理アドレスに対してワードシフト量を引き算することで生成する物理アドレスによってメモリにアクセスすることを特徴とする。
【００４９】
実施の形態２に示したメモリコントローラは、ワードシフト量を更新することにより、論理アドレス上、データをワード単位で移動させることができることを特徴とする。
【００５０】
実施の形態２に示したメモリコントローラは、ソフトウェアインタフェースとして相対的なワードシフト量を設定させる制御レジスタを備え、ワードシフトテーブルに設定されていた値と相対的なワードシフト量を加算した値によって、ワードシフトテーブルを更新することを特徴とする。
【００５１】
実施の形態２に示したメモリコントローラは、ブロック単位のデータ移動を行う際に、ワードシフト量も物理アドレス情報と共に更新することで、ブロック単位のデータ移動とブロック内のワード単位のデータ移動を両立させることを特徴とする。
【００５２】
実施の形態２に示したメモリコントローラは、ブロックデータを論理アドレス上、ブロック単位にもワード単位にも移動できることを特徴とする。
【００５３】
実施の形態３に示したメモリコントローラは、管理するエリア毎にアクセス属性を有することで、メモリへのアクセス効率を向上させることを特徴とする。
【００５４】
実施の形態３に示したメモリコントローラは、アクセス属性として、該当プリフェッチ可能か否かを示す情報と、該当エリアに対するプリフェッチサイズを持つことで、メモリへの効率的で無駄のないプリフェッチを可能にすることを特徴とする。
【００５５】
実施の形態３に示したメモリコントローラは、プリフェッチバッファを複数持つことにより、ＣＰＵおよびＩ／Ｏデバイスからの連続するエリアへのアクセスが、他のエリアへのアクセスにより中断されても、メモリへのアクセス効率を低下させないことを特徴とする。
【００５６】
実施の形態３に示したメモリコントローラは、プリフェッチバッファに該当エリアのデータが存在している場合に、ライトアクセスをプリフェッチバッファとメモリの双方にデータを書き込むことで、その後発生する該エリアへのリードアクセスを高速に処理することを特徴とする。
【００５７】
実施の形態３に示すメモリコントローラは、プリフェッチバッファに該当エリアのデータが存在していない場合において、Ｉ／Ｏデバイス、またはＣＰＵからの書き込みが予測される場合は、プリフェッチバッファにバッファリングすることで、ＣＰＵ、またはＩ／Ｏデバイスからのリード処理を高速に処理することを特徴とする。
【００５８】
実施の形態４に示すメモリコントローラは、ＣＰＵおよびＩ／Ｏデバイスが供給する論理アドレスによりプリフェッチ属性を管理し、物理アドレスでプリフェッチバッファを管理することで、実施の形態１および実施の形態２に記載の処理と実施の形態３に記載の処理とを組み合わせることを特徴とする。
【００５９】
実施の形態４に示すメモリコントローラは、実施の形態３に示す属性管理方式とプリフェッチバッファ管理方式を有し、ブロックデータを論理アドレス上、ブロック単位にもワード単位にも移動でき、かつ実施の形態３によるメモリアクセスを可能とすることを特徴とする。
【００６０】
【発明の効果】
本発明によれば、論理アドレスを所定のブロック単位で管理してメモリアクセスを制御するため、ＣＰＵに負荷をかけることなくメモリアクセスの高速化を図ることができ、また、効率的なプリフェッチを実現することができる。
【図面の簡単な説明】
【図１】実施の形態１に係るメモリコントローラの構成例を示す図。
【図２】一般的な計算機システムの構成例を示す図。
【図３】実施の形態２に係るメモリコントローラの構成例を示す図。
【図４】実施の形態３に係るメモリコントローラの構成例を示す図。
【図５】プリフェッチを行わない場合の連続アドレスへのアクセスのタイミングを示すタイミングチャート。
【図６】プリフェッチを行った場合の連続アドレスへのアクセスのタイミングを示すタイミングチャート。
【符号の説明】
１  ＣＰＵ、２  チップセット、３  メモリ、４  ネットワークＩ／Ｆ、５  ストレージＩ／Ｆ、６  その他Ｉ／Ｏ、２００  メモリコントローラ、２０１  調停回路、２０２  メモリアクセス制御回路、２０３  アドレス変換テーブル、２０４  制御レジスタ、２０５  アドレス変換＋ワードシフトテーブル、２０６エリア属性管理テーブル、２０７  プリフェッチバッファ制御回路、２０８  プリフェッチバッファ。
【図１】
2004240616.tif 000003
【図２】
2004240616.tif 000004
【図３】
2004240616.tif 000005
【図４】
2004240616.tif 000006
【図５】
2004240616.tif 000007
【図６】
2004240616.tif 000008