(57)【特許請求の範囲】
【請求項１】
データ処理システムにおける複数のメモリアクセスリクエストを再順序付けする方法において、
複数のリクエストを受け入れる段階と、
複数のリクエストから、利用可能なメモリ位置にアクセスするリクエストを選択する段階と、
選択されたリクエストをスケジューリングする段階とを有し、
リクエストを選択する前記段階が、
複数のリクエストの中に、利用可能なメモリ位置にアクセスする読取りリクエストが存在するか否かを決定する段階と、
前記決定する段階が、このような読取りリクエストが存在することを決定する場合には、利用可能なメモリ位置にアクセスする読取りリクエストを選択する段階と、
前記決定する段階で、利用可能な位置にアクセスする読取りリクエストが存在しないことを決定する場合には、利用可能なメモリ位置にアクセスする書込みリクエストを選択する段階とからなり、
選択されたリクエストをスケジューリングする前記段階が、
前記選択された読取りリクエストをスケジュールし、
読取りリクエストをスケジュールする前記段階の後に、バースト書込みを可能とするために、複数の前記書込みリクエストを連続してスケジューリングすることを特徴とする方法。
【請求項２】
前記リクエストを選択する段階が、利用可能なメモリ位置へのアクセスをリクエストする、複数のリクエストの中の最も古いリクエストを選択する段階からなることを特徴とする請求項１に記載の方法。
【請求項３】
複数のリクエストからの少なくとも１つのリクエストが戻り値を作り、複数のリクエストの戻り値を収集する段階と、
複数のリクエストの元の順序付けに従って、収集された戻り値を順序付けする段階とを更に有することを特徴とする請求項１に記載の方法。
【請求項４】
前記複数のリクエストが、同じメモリ位置への読取りリクエストおよび書込みリクエストを保有しているか否かを検出する段階を更に有することを特徴とする請求項１に記載の方法。
【請求項５】
前記各メモリ位置が複数のメモリバンクの１つと関連しており、前記リクエストを選択する段階が、
複数のリクエストからのリクエストによりアクセスがリクエストされるメモリ位置を識別する段階と、
識別されたメモリ位置が対応する複数のメモリバンクのうちの１つのメモリバンクを識別する段階と、
識別されたメモリバンクが利用可能であるか否かを決定する段階とからなることを特徴とする請求項１に記載の方法。
【請求項６】
メモリアクセスリクエストを再順序付けするデータ処理システムにおいて、
複数のメモリアクセスリクエストを保持するリクエストバッファと、
複数のメモリアクセスリクエストのうちの少なくとも幾つかのメモリアクセスリクエストにより探索されるメモリ位置の利用可能性を決定するための利用可能性決定器と、
複数のメモリアクセスリクエストのうちから利用可能なメモリ位置にアクセスするメモリアクセスリクエストを選択すべく、前記利用可能性決定器に応答するリクエスト再順序付けユニットとを有し、
前記リクエスト再順序付けユニットが、
利用可能なメモリ位置にアクセスする読取りリクエストが存在する場合に、該読取りリクエストを識別するための、前記利用可能性決定器に応答する読取り識別器と、
利用可能なメモリ位置にアクセスする書込みリクエストが存在する場合に、該書込みリクエストを識別するための、前記利用可能性決定器に応答する書込み識別器と、
識別された読取りリクエストが存在する場合に該読取りリクエストを選択しかつ識別された読取りリクエストが存在しない場合に識別された書込みリクエストを選択するコントローラとを有し、
前記リクエスト再順序付けユニットが、
前記選択された読取りリクエストをスケジューリングし、
前記読取りリクエストをスケジューリングした後に、バースト書込みを可能とするために、複数の前記書込みリクエストを連続してスケジューリングすることを特徴とするデータ処理システム。
【請求項７】
前記リクエスト再順序付けユニットが、利用可能なメモリ位置へのアクセスをリクエストする、複数のリクエストのうちの最も古いリクエストを選択することを特徴とする請求項６に記載のデータ処理システム。
【請求項８】
前記複数のリクエストからの少なくとも１つのリクエストが戻り値を作り、
複数のリクエストの元の順序付けに従って、複数のリクエストの戻り値を収集しかつ収集された戻り値を順序付けするデータ再順序付けユニットを更に有することを特徴とする請求項６に記載のデータ処理システム。
【請求項９】
新しいリクエストが、前記複数のリクエストのうちの書込みリクエストによりアクセスがリクエストされるメモリ位置と同じメモリ位置へのアクセスをリクエストするものであるか否かを検出する衝突検出器を更に有することを特徴とする請求項６に記載のデータ処理システム。
【請求項１０】
前記複数のリクエストのうちの幾つかのリクエストにはデータが付随し、
選択されたメモリアクセスリクエストに付随する任意のデータを選択するリクエスト再順序付けユニットに応答するデータ再順序付けユニットを更に有し、選択リクエストおよび付随するデータが、メモリコントローラに受け入れられることを特徴とする請求項６に記載のデータ処理システム。
【請求項１１】
各メモリ位置が、複数のメモリバンクのうちの１つのメモリ位置に関連しており、
利用可能性決定器が、メモリバンクが利用可能であるか否かを表示するメモリコントローラに接続されていることを特徴とする請求項６に記載のデータ処理システム。
【請求項１２】
プログラムを実行しかつ複数のメモリアクセスリクエストのうちの少なくとも幾つかのメモリアクセスリクエストを発行する少なくとも１つのプロセッサと、
メモリ位置を備えたメモリシステムと、
該メモリシステムにより実行するための、選択されたメモリアクセスリクエストを受け入れるメモリコントローラとを更に有することを特徴とする請求項６に記載のデータ処理システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、メモリサブシステムを備えたデータ処理システムに関し、より詳しくは、帯域幅および並行性（concurrency)を最大にし、これにより全メモリサブシステムおよびデータ処理システムの速度を増大させるべくメモリサブシステムへのリクエストを制御することに関する。
【０００２】
【従来の技術】
最近のデータ処理システムでは、メモリサブシステムの速度は、全システム速度に影響を与える主要な制限ファクタである。一般に、メモリアクセスは、コンピュータプロセッサおよびデータバスがメモリアクセスリクエストを発生しかつ搬送する速度より非常に遅いため、メモリボトルネックが存在する。メモリアクセスの速度が遅いことは、書込みリクエストではなく、読取りリクエストが存在するときに特に感じられる。これは、読取りリクエストは、リクエストプロセッサがデータを待機することを表示するためである。
低メモリ速度により引き起こされるボトルネックは、コンピュータプロセッサの速度が、一般的なメモリコンポーネンツの速度より高速で増大するときに、よりひどくなる。また、メモリボトルネックは、メモリサブシステムを共有する多重プロセッサを有するコンピュータシステムおよびネットワークアーキテクチャーが導入されるときに悪化する。
【０００３】
メモリボトルネックを緩和させる１つの慣用的なアプローチは、データ処理システム内の種々のレベルでデータキャッシングを使用することである。例えば、低速で安価なディスクメモリサブシステムのデータの一部は、高速システムＲＡＭ（ランダムアクセスメモリ）にコピーすなわち「キャッシュ（cached) 」される。システムＲＡＭのデータの一部は、次に、高速ではあるが高価な少数のＲＡＭを保有する「第２レベル」キャシュＲＡＭサブシステムにキャッシュされる。データの一部も、同じチップにプロセッサとして存在する更に高速の「第１レベル」キャッシュメモリにキャッシュされる。データキャッシングは、低速メモリへのアクセスを最小にする有効な技術である。しかしながら、或る点で、種々のメモリレベルは依然としてアクセスする必要がある。従って、キャッシングを用いるか否かに係わらず、メモリアクセスをスピードアップする技術は依然として必要である。
【０００４】
メモリアクセスをスピードアップする試みとして、メモリを多重バンクに編成する方法がある。このメモリアーキテクチャーの下では、メモリの第１バンクとして繁忙サービスは第１バンクのメモリ位置にアクセスするリクエストであり、利用可能バンクは、次のリクエストが第２バンクのメモリ位置を目的とする場合に、次のメモリアクセスリクエストのサービスを開始する。メモリ位置は、連続的にアクセスされる連続メモリアドレスが異なるバンク内にあるように、バンク間でインターリーブされる。
メモリバンクの慣用的使用に付随する問題は、アドレスがバンク間でインターリーブされる場合でも、連続アクセスリクエストが、依然として、時々、共通バンク内のアドレスを目的とすることである。この状況では、慣用的なメモリサブシステムは、メモリサブシステムが第２リクエストおよび任意の連続リクエストのサービスを開始する前に、共通バンクが利用できるようになることを依然として待機しなければならない。このような強制待機は無駄である。なぜならば、第３リクエストが異なる利用可能メモリバンクを目的とするため、さもなくば第３アクセスリクエストのサービスを開始できるからである。また、インターリーブされたバンク内へのメモリの単なる編成は、前述のように、読取りリクエストが対比書込みリクエストを有するという特別緊急性をアドレスしない。
【０００５】
【発明が解決しようとする課題】
当業界で要望されていることは、メモリリクエストがサービスを待機しなければならない時間を最短にすることにより帯域幅および並行性を最大にすべく、メモリサブシステムへのアクセスを制御する方法である。より詳しくは、先行リクエストが利用不可能メモリ位置を目的とするため未だサービスされない場合でも、メモリサブシステムが、利用可能メモリ位置にアクセスするリクエストのサービスを開始できるようにする方法が要望されている。また、特に、プロセッサが、次のタスクに進む前にメモリ書込みの完了を待機する必要がない「後書込み（posted-write) 」システムでは、書込みリクエストより重要な読取りリクエストに特別な優先順位を与える方法が要望されている。
【０００６】
【課題を解決するための手段】
本発明は、メモリアクセスリクエストがサービスを行なうようにスケジュールされる順序を制御することによりメモリサブシステムの速度を増大させる方法および装置を提供する。
本発明の一実施形態によれば、複数のメモリアクセスリクエストを再順序付けする方法が提供され、本発明の方法は、複数のリクエストを受け入れる段階と、複数のリクエストから、利用可能なメモリ位置にアクセスするリクエストを選択する段階と、選択されたリクエストをスケジューリングする段階とを有している。
本発明の他の実施形態によれば、アクセスメモリへのリクエストを選択する段階が、複数のリクエストの中に、利用可能なメモリ位置にアクセスする読取りリクエストが存在するか否かを決定する段階と、このような読取りリクエストが存在することを決定する場合には、利用可能なメモリ位置にアクセスする読取りリクエストを選択する段階と、利用可能な位置にアクセスする読取りリクエストが存在しないと決定する場合には、利用可能なメモリ位置にアクセスする非読取りリクエストを選択する段階とからなる。
【０００７】
【発明の実施の形態】
本願明細書の以下の記載および図面を参照することにより、本発明の本質および長所が更に理解されよう。
本発明は、データ処理システムにおいてリクエストされたメモリ演算がスケジュールされる順序を制御する技術に関する。
図１は、本発明が具現されるコンピュータシステム１０１の簡単化されたブロック図である。この高レベルで示されたコンピュータシステムの形態は標準的なものであり、このため図１には「PRIOR ART 」と記されている。しかしながら、このシステムがメモリへのアクセスを管理する本発明を採用しているものであれば、システム１０１のようなコンピュータシステムは従来技術ではない。既知のプラクティスによれば、コンピュータシステム１０１は、バスサブシステム１１１を介して多数の周辺装置と通信する１つ以上のプロセッサ１０３を有している。一般に、これらの周辺装置は、ランダムアクセスメモリ（ＲＡＭ）サブシステム１０７およびディスクメモリサブシステム１０９等のメモリサブシステムと、キーボード１０４またはマウス１０５等の入力装置と、ディスプレイ１０２のような出力装置とを有している。他の一般的な周辺装置（図示せず）として、プリンタ、テープメモリサブシステム、遠隔ネットワーク形サーバメモリサブシステム等がある。
【０００８】
本願明細書では、用語「バスサブシステム」は、システム１０１の種々のコンポーネンツを、意図するままに相互通信させるあらゆる機構を包含するものとして広範囲に使用される。例えば、バスサブシステム１１１は単一バスとして概略的に示されているが、一般的なコンピュータシステムは、ローカルバス、１つ以上の拡大バス、直列ポート、並列ポート、ネットワーク接続部等の多数の「バス」を有している。一般に、コンピュータシステム１０１のコンポーネンツを、同じ物理的配置にする必要はない。
図１は、本発明を具現するコンピュータシステムを示すものであるが、単なる一形式である。当業者ならば、多くのコンピュータシステム形式および構成が本発明の具現に適していることが容易に理解されよう。
【０００９】
図２は、本発明の多重プロセッサの実施形態２０１を示すブロック図である。データ処理システム２０１は、多数のプロセッサＰ１〜Ｐ４（それぞれ、参照番号２０３、２０４、２０５、２０６で示されている）を有している。これらのプロセッサは、メモリバス２１５に接続されている。メモリバス２１５は、リクエスト再順序付けユニット２１４を介して、メモリサブシステム２１６に接続されている。
プロセッサＰ１〜Ｐ４は、メモリサブシステム２１６に対するリクエストをメモリバス２１５に発生する。リクエスト再順序付けユニット２１４は、メモリバス２１５からのリクエストを受け入れ、該リクエストを、後述するようにして、本発明の技術に従ってスケジュールする。或る実施形態では、メモリバス２１５はIntel Ｐ６バス、プロセッサの個数は４つ以下、プロセッサはIntel Pentium Pro-compatibleプロセッサである。
【００１０】
図３は、二重ブリッジ形メモリバスを備えた本発明の多重プロセッサの実施形態を示すブロック図である。データ処理システム２０２は、多数のプロセッサＰ１〜Ｐ８（それぞれ、参照番号２２３、２２４、・・・２３０で示されている）を有している。これらのプロセッサのうち、Ｐ１〜Ｐ４は第１メモリバス２１１に接続され、プロセッサＰ５〜Ｐ８は第２メモリバス２１２に接続されている。２つのメモリバス２１１、２１２は、これらの両バスおよび第３バス２１５の間の切換えを遂行するコントローラ／クロスバースイッチ２１３により架橋されている。第３バス２１５は、リクエスト再順序付けユニット２１４を介して、メモリサブシステム２１６に接続されている。バス２１１、２１２、２１５は、バスサブシステムに属するものと考えられる。
【００１１】
コントローラ／クロスバースイッチ２１３は、干渉性チェックを遂行しかつバス２１１、２１２のうちの一方のバスから他方のバスへの演算を反映するのに必要な情報をルーチングする。プロセッサＰ１〜Ｐ４は、メモリサブシステム２１６に対するリクエストを第１メモリバス２１１に発生する。プロセッサＰ５〜Ｐ８は、メモリサブシステム２１６に対するリクエストを第２メモリバス２１２に発生する。コントローラ／クロスバースイッチ２１３は、２つのメモリバス２１１、２１２からのメモリリクエストを第３バス２１５にルーチングする。リクエスト再順序付けユニット２１４は、第３バス２１５からのリクエストを受け入れ、該リクエストを、後述するようにして、本発明の技術に従ってスケジュールする。或る実施形態では、各メモリバス２１１、２１２はIntel Ｐ６バス、各メモリに接続されるプロセッサの個数は４つ以下、プロセッサはIntel Pentium Pro-compatibleプロセッサである。
【００１２】
図４は、発明の背景の部分で論じた従来技術によるリクエストされたメモリ演算の順序付けを示す概略図である。図示を簡単化することのみの理由で、図示の全てのリクエストされたメモリ演算は読取り演算である。図４において、複数のリクエストされたメモリ演算３０３（各リクエストされたメモリ演算は目的メモリアドレスを有している）は、データ処理システムの一部３０１によりメモリサブシステム２１６に提供される。リクエスト／メモリアドレスは、Ａ１１０、Ａ１０４、Ａ９９、Ａ５０、Ａ２、Ａ１（それぞれ、参照番号３０５、３０６、・・・３１０で示されている）の順序をなしている。
メモリサブシステム２１６は、各リクエストされた演算の遂行を順に開始する。リクエストされた演算が利用可能である場合には、メモリサブシステム２１６はリクエストされた演算の遂行を開始する。そうでない場合には、メモリサブシステムは目的メモリアドレスが利用可能になることを待機する。この待機は、発明の背景の部分で説明した、利用可能アドレスを目的とする連続リクエストされた演算がサービスされ始める状況では無駄なことである。
【００１３】
リクエストされた演算３０３によりリクエストされたデータは、該リクエストされた演算３０３の順序に一致する順序３１２で戻される（３２２）。この例では、データの順序３１２は、Ｄ１１１、Ｄ１０４、Ｄ９９、Ｄ５０、Ｄ２、Ｄ１（それぞれ、参照番号３１５、３１６、・・・３２０で示されている）である。図５は、本発明のリクエストされたメモリ演算の再順序付けを広く示す概略図である。図示を簡単化することのみの理由で、図示の全てのリクエストされた演算は読取り演算である。図５において、複数のリクエストされた演算３０３（各リクエストされたメモリ演算は目的メモリアドレスを有している）は、データ処理システムの一部３０１により提供される。
リクエスト／メモリアドレス３０３は、Ａ１１０、Ａ１０４、Ａ９９、Ａ５０、Ａ２、Ａ１（それぞれ、参照番号３０５、３０６、・・・３１０で示されている）の初期順序をなしている。これらのリクエストされた演算は、連続的遂行を行なう新しい順序付け３１１に従ってメモリサブシステム２１６に提供される（３２３）。再順序付けは、利用不可能な目的アドレスにより引き起こされるメモリサブシステム２１６での待機を最短にするように、後述の技術に従って遂行される。リクエスト／アドレスの順序は、この例では、Ａ９９、Ａ１１０、Ａ１、Ａ１０４、Ａ２、Ａ５０の順序に最適化される（３１１）。
【００１４】
データは、Ｄ９９、Ｄ１１０、Ｄ１、Ｄ１０４、Ｄ２、Ｄ５０の最適順序で、メモリサブシステム２１６から読み取られる（３２４）。これらのデータは、次に、Ｄ１１０、Ｄ１０４、Ｄ９９、Ｄ５０、Ｄ２、Ｄ１（それぞれ、参照番号３１５、３１６、・・・３２０で示されている）の順序３１２に再順序付けされる（３１３）。再順序付けされたデータ順序は、初期リクエスト順序と一致する。再順序付けされたデータは、戻される（３２２）。データは、初期リクエスト順序に従って戻されるので、例えばプロセッサのようなメモリ演算をリクエストする構成要素（図示せず）は、リクエストされた演算がメモリサブシステム２１６により実際に遂行される順序を意識する必要はない。
図５には、図示を容易化する目的で、リクエストされた読取り演算のみが示されている。一般に、リクエストされた演算も書込み演算である。書込みのためのデータは、書込みリクエスト／アドレス自体と一緒に再順序付けされなくてはならない。一般に、書込みの前に読取りが遂行されるように、同じアドレスへのリクエストされた読取りが続く、リクエストされた書込みが再順序付けされる状況を防止するステップをとらなくてはならない。不正確な読取りを防止する１つの方法は、書込みリクエストが既にスケジュールされたことをシステムの一部３０１が演繹するまで、該部分３０１が、読取りリクエストが続く書込みリクエストを発行しないようにすることである。他の方法は、システムの一部３０１が、制限されることなくリクエストを発行できるようにし、次に、再順序付けプロセス自体の間に前記状況を積極的に防止することである。後者の方法では、例えばプロセッサのようなメモリ演算をリクエストする構成要素（図示せず）は、再順序付けが行なわれることを意識する必要はない。
【００１５】
図６は、本発明を具現するデータ処理システム４０１を示す機能的ブロック図である。システムの一部３０１は、メモリアクセスリクエスト３０３およびリクエスト３０３の或るものと関連する「Ｗ」データ４０３を発行する。「Ｗ」データは、リクエストされたメモリ演算（単一および複数）と関連するデータであり、目的メモリ位置（単一および複数）に書き込まれるべきデータを有している。リクエスト３０３および「Ｗ」データ４０３は、例えば、データ処理システムの一部３０１におけるバスサブシステム（図示せず。このバスサブシステムは図１のバスサブシステム１１１と同じである）から発行される。
リクエスト再順序付けユニット２１４内で、アドレス再順序付けサブユニット３１１がリクエスト３０３を受けかつこれらを一時的にバッファに記憶する。本発明の実施形態では、アドレス再順序付けサブユニット３１１は、オプションとしての衝突検出器４０４を介して、リクエスト３０３を受ける。アドレス再順序付けサブユニット３１１に入るとき、リクエスト３０３には初期順序を付すことができる。アドレス再順序付けサブユニット３１１は、下記の技術に従って、リクエストの新しい順序４０８で、メモリサブシステム２１６にリクエストを提供する。
【００１６】
リクエスト再順序付けユニット２１４内の第１データ再順序付けサブユニット４０６は、「Ｗ」データ４０３を受ける。第１データ再順序付けサブユニット４０６は、アドレス再順序付けサブユニット３１１からの方向で、「Ｗ」データの新しい順序４１０で、「Ｗ」データをメモリサブシステム２１６に提供する。「Ｗ」データ４０３の新しい順序４１０は、リクエスト３０３の新しい順序４０８に一致する。
メモリサブシステム２１６はリクエストを満たしかつ得られた全ての「Ｒ」データ４１２をリクエスト再順序付けユニット２１４に戻す。「Ｒ」データはリクエストされたメモリ演算（単一または複数）から得られ、目的メモリ位置（単一または複数）からのデータ読取りを含んでいる。
【００１７】
リクエスト再順序付けユニット２１４内で、第２データ再順序付けサブユニット３１３が「Ｒ」データを受けかつ該「Ｒ」データをデータ処理システムの一部３０１に戻す。リクエスト３０３が初期順序を有する場合には、第２データ再順序付けサブユニット３１３は、「Ｒ」データを戻す（４１４）前に、「Ｒ」データ４１２への順序を復元する（これにより、復元された順序はリクエスト３０３の初期順序に一致する）。本発明の実施形態では、第２データ再順序付けサブユニット３１３および第１データ再順序付けサブユニット４０６は、アドレス再順序付けサブユニット３１１からの方向を受けるべく接続された単一ユニットにおいて実施される。
図６の本発明の実施形態は、一般に、進行中の実行時ダイナミック態様で演算する。リクエスト再順序付けユニット２１４は、新しいリクエストおよび対応「Ｗ」データをダイナミックに受け入れる。リクエスト再順序付けユニット２１４は、対応する「Ｗ」データのリクエストおよび４１０のための新しい最適順序４０８に従って、リクエストおよび対応する「Ｗ」データをメモリサブシステム２１６にダイナミックに提供する。リクエスト再順序付けユニット２１４は、メモリサブシステム２１６からの「Ｒ」データを、ダイナミックに受け、再順序付けしかつ戻す。
【００１８】
本発明の幾つかの実施形態の衝突検出器４０４は、当該アドレスへの早期のあらゆる書込みが完了するまで、アドレスからの読取りが起こらないように確保する１つの方法を実施する。このように確保することにより、衝突検出器４０４は、リクエスト再順序付けによって、アドレスからの早期で誤差のある読取りを行なうという上記問題を引き起こすことを防止する。衝突検出器４０４は次の段落で説明するように作動し、上記問題を引き起こすリクエストシーケンスが、第１位置でアドレス再順序付けサブユニット３１１に入ることを防止する。早期読取りの問題を防止する他の方法は、本発明の技術に基づくものであることは明白であろう。例えば、衝突検出器４０４をもたない本発明の実施形態では、アドレス再順序付けサブユニット３１１自体がリクエストシーケンスをモニタリングし、かつ同じアドレスへの読取りリクエストが続く書込みリクエストの順序を反転させないようにする。
【００１９】
衝突検出器４０４では、入ってくる読取りリクエストの目的アドレスが、アドレス再順序付けサブユニット３１１に待機する全てのリクエストのアドレスに対してチェックされる。読取りリクエストが書込みリクエストのアドレスの１つと一致する場合には、読取りリクエストが停止され、読取りリクエストがアドレス再順序付けサブユニット３１１に入ることを防止する。一致する書込みリクエストが最終的にアドレス再順序付けサブユニット３１１を出てメモリサブシステム２１６に向かうと、「衝突」が消滅しかつ読取りリクエストがアドレス再順序付けサブユニット３１１に入ることが可能になる。
リクエスト再順序付けユニット２１４に入ると、リクエストは、リクエストの初期順序を定める省略時優先順位（default priorities) を有する。リクエストの新しい順序を確立することにより、本発明は、リクエストに新しい優先順位を割り当てる。現在利用可能なアドレスを目的とするこれらのリクエストは、高い優先順位で割り当てられる。
【００２０】
リクエストの省略時優先順位は、任意の基準すなわち発見的規則（heuristic rules)により決定される。本発明の実施形態では、新しいリクエストより高い優先順位をもつものとして、古いリクエストが定められる。リクエストのエイジ（age)は、例えば、リクエストが発行された時、リクエストが受けられた時、またはリクエストに関するタイムスタンプにより決定される。本発明の他の実施形態では、省略時優先順位は、リクエストに関連する優先順位フィールドにより決定される。省略時優先順位はまた、最初にリクエストを発した構成要素（例えば、プロセッサ）のアイデンティティによっても影響を受ける。
本発明の実施形態では、リクエスト再順序付けユニット２１４は、プロセッサで遂行されるようにソフトウェアに実施される。本発明の実施形態では、ソフトウェアは、コンピュータが読取り可能な記憶媒体を備えたコンピュータプログラム製品に記憶される。コンピュータが読取り可能な記憶媒体として、リードオンリメモリ（ＲＯＭ）、プログラマブルリードオンリメモリ（ＰＲＯＭ）、ＣＤ−ＲＯＭ、ハードディスク等がある。本発明の実施形態では、リクエスト再順序付けユニット２１４はソフトウェアで構成できる。
【００２１】
図７は、本発明の実施形態によるアドレス再順序付けサブユニット３１１でのリクエスト順序付けを示すフローチャートである。図６を参照しつつ、図７を説明する。図７の実施形態では、アドレス再順序付けサブユニット３１１は、ステップ５０２において、再順序付けサブユニット３１１でバッファされたリクエストが、利用可能なアドレスを目的としているか否かを決定する。ＹＥＳ（５０３）であれば、ステップ５０４において、再順序付けサブユニット３１１が、新しい順序４０８へのリクエストをスケジュールし、従ってデータ再順序付けサブユニット４０６に対応するあらゆる「Ｗ」データをスケジュールさせる。スケジュールされたリクエストは、ステップ５０４で、アドレス再順序付けサブユニット３１１から取り出される。本発明の好ましい実施形態では、アドレス再順序付けサブユニットは、ステップ５０４で、利用可能なアドレスを目的とするリクエスト間の最高の省略時優先順位を有するリクエストをスケジュールする。
【００２２】
リクエストのスケジューリングは、リクエストがメモリサブシステム２１６に供給するリクエストのキューに入れられる。本発明の好ましい実施形態では、キューの長さはゼロであり、リクエストはこれらがスケジュールされるやいなや、メモリサブシステム２１６に提供される。
本発明の実施形態では、メモリサブシステムはメモリのバンクを有し、メモリアドレスは、メモリアドレスが存在するバンクが利用可能であるときに利用可能である。本発明の実施形態では、メモリサブシステムは、インターリーブされたアドレスを備えたメモリのバンクを有し、メモリアドレスは、メモリアドレスが存在するバンクが利用可能であるときに利用可能である。本発明は、メモリのバンクを備えたメモリサブシステムへのアクセスを制御するのに特に適している。また、本発明は、インターリーブされたアドレスを備えたメモリのバンクを備えたメモリサブシステムへのアクセスを制御するのにも特に適している。また、本発明は、半導体メモリサブシステムまたは同様なメモリサブシステムまたはより高速のメモリサブシステムのようなメモリサブシステムへのアクセスを制御するのにも特に適している。
【００２３】
図８は、書込みリクエストに関して読取りリクエストを好都合にする本発明の実施形態のリクエストスケジューリングを示すフローチャートである。発明の背景のセクションで述べたように、読取りリクエストは、リクエスティングプロセッサがデータを待機することを表示するので、できる限り迅速に読取りリクエストを取り扱うことが特に有効である。従って、読取りリクエストは、他の演算（例えば書込み演算）よりも厳格なリクエスト形式である。図６を参照しつつ、図８を説明する。
図８の実施形態では、アドレス再順序付けサブユニット３１１は、先ずステップ６１０で、再順序付けサブユニット３１１でバッファされるリクエストの読取りリクエストが利用可能なアドレスを目的とするか否かを決定する。ＹＥＳであれば（６１１）、アドレス再順序付けサブユニット３１１は、ステップ６１２で、新しい順序付け４０８への読取りリクエストをスケジュールする。本発明の好ましい実施形態では、アドレス再順序付けサブユニットは、ステップ６１２は、利用可能なアドレスを目的とする読取りリクエスト間の最高の省略時優先順位を有するリクエストをスケジュールする。スケジュールされた読取りリクエストは、ステップ６１２で、再順序付けサブユニット３１１から取り出される。
【００２４】
ステップ６１０において、再順序付けサブユニット３１１の読取りリクエストが利用可能なアドレスを目的としないことを決定すると（６１３）、再順序付けサブユニット３１１は、ステップ６１４において、再順序付けサブユニット３１１のリクエストのうちの書込みリクエストが利用可能なアドレスを目的とするか否かを決定する。ＹＥＳであれば（６１６）、アドレス再順序付けサブユニット３１１は、ステップ６１８において、新しい順序付け４０８への書込みリクエストをスケジュールしかつデータ再順序付けサブユニット４０６に任意の対応する「Ｗ」データをスケジュールさせる（４１０）。本発明の好ましい実施形態では、ステップ６１８において、利用可能なアドレスを目的とする書込みリクエスト間の最高の省略時優先順位を有するリクエストをスケジュールする。スケジュールされた書込みリクエストは、ステップ６１８で、再順序付けサブユニット３１１から取り出される。
【００２５】
多くのメモリサブシステムでは、書込みリクエストは、メモリサブシステムに入る書込みデータとメモリサブシステムを出る読取りデータとの間のメモリサブシステムのポテンシャルバスコンテンションのため、読取りリクエストがスケジュールされた直後にスケジュールされることはない。本発明がこのようなメモリサブシステムへのアクセスを制御するのに使用されるとき、この可能性のあるコンテンションを考慮すべきである。可能性のあるコンテンションを防止する１つの方法は、利用可能なアドレスを目的とする書込みリクエストが存在するか否かだけでなく、書込みデータがクリアされているか否かを尋ねるようにステップ６１４を変更することである。例えば、前にスケジュールされたリクエストが読取りリクエストでない場合、または前にスケジュールされたリクエストの実行時間と問題の書込みリクエストの実行時間との間で確保されている場合には、書込みパスはクリアされていると決定できる。書込みリクエストが存在しかつ書込みパスがクリアされている場合にのみ（６１６）、書込みリクエストがステップ６１８でスケジュールされる。
【００２６】
前の段落で説明したメモリサブシステムでは、バスターンアラウンド中または読取りリクエストの取扱いから書込みリクエストの取扱いへの移行中に時間が喪失される。喪失時間を短縮させるため、本発明の実施形態は、オプションとして、ステップ６１８の後に、ターンアラウンドを最小にするバースト書込みステップを設けることができる。バースト書込みステップ６２０は、ステップ６１８で書込みリクエストがスケジュールされたならば、書込みリクエストのバーストがステップ６２０で連続的にスケジュールされる挙動を実施する。この場合、書込みリクエストは、グループとして一体化されるのが有効なため、「バースト可能」な形式である。
図９は、図８のバースト書込みステップを示すフローチャートである。図９は、殆ど説明を要しないものである。図９から分かるように、利用可能なアドレスを目的とする書込みリクエストがもはや存在しなくなるか（６２６）、所定数Ｘの書込みリクエストが現在のバースト中にスケジュールされかつ利用可能なアドレスを目的とする読取りリクエストが存在するようになる（６２６）まで、ステップ６２２で、利用可能なアドレスへの書込みリクエストがスケジュールされる。本発明の一実施形態では、個数Ｘはシステム条件に基づいて調節される。例えば、Ｘの値は、ソフトウェアプログラム、ディップスイッチ等によりレジスタに記憶することができる。図３に示すような８個のIntel Pentiam Pro プロセッサを備えた本発明の実施形態では、Ｘの値として４が適していることが判明している。
【００２７】
図１０は、インターリーブされた多重バンクメモリシステムへのリクエストを制御する本発明の実施形態７０１を示すブロック図である。図１０において、バス１１１は、リクエストバッファ７０３と呼ばれるシフトバッファの入力エンド７０５に、メモリリクエストを送る。
リクエストバッファ７０３は、要素７０５のような多数の要素（各要素は１つのリクエストを記憶できる）を有している。８個の要素をもつバッファは、本発明の８個のIntel Pentiam Pro プロセッサの実施形態に適していることが判明している。要素内には、「形式」７０７、「ＩＤ」７０９および「バンク」７１１としてリクエストが記憶される。リクエストの形式７０７は、「読取り」または「書込み」の値をとることができる。リクエストのＩＤ７０９は、リクエストの目的アドレスを特定化する。本発明の一実施形態では、リクエストのＩＤ自体はアドレスではなく、インデックス、すなわちアドレスを保持するアドレスバッファ（図示せず）へのポインタである。リクエストのバンク７１１は、目的アドレスが帰属するメモリのバンクである。各要素はまた、要素が現在リクエストを保有しているか否かを告げる「有効」ビット７１３を保有している。
【００２８】
リクエストバッファ７０３は、読取り７１７または書込み７１９にメモリのどのバンクが現在利用可能であるかを表示するメモリコントローラ７１５からの情報を受けるように接続されている。どのバンクが利用可能であるかに関する情報に基づいて、リクエストバッファは、どのリクエストが利用可能アドレスを目的としているかを決定する。リクエストバッファ７０３は、利用可能なアドレスを書込みＭＵＸ７２７に目的付ける全ての書込みリクエストを与える（７２５）。読取りＭＡＸ７２３は、読取り／書込みスケジューラ７３１への目的利用可能な読取りリクエスト７２１の最も古い読取りリクエストを与える。また、読取りＭＡＸ７２３は、最も古い目的利用可能な読取りリクエスト７２９の存在を表示する「利用可能な読取り」フラグ７３５を発生する。読取り／書込みスケジューラ７３１および優先ジェネレータ７３７は、「利用可能な書込み」フラグ７３９を受ける。
【００２９】
読取り／書込みスケジューラ７３１および優先ジェネレータ７３７は、協働して実施形態７０１の再順序付け規則（reordering rules）を実施する。実施形態７０１の再順序付け規則について、図８および図９に関連して説明した通りである。
優先ジェネレータ７３７は、後述のように、読取りリクエストの現在の優先順位７４１および書込みリクエストの現在の優先順位７４３を決定する。一部が現在の優先順位に基づいて、読取り／書込みスケジューラ７３１は、後述のように、最も古い目的利用可能な読取りリクエスト７２９または最も古い目的利用可能な書込みリクエスト７３３をスケジュールするか（７４５）。ひとたびリクエストがスケジュールされると（７４５）、メモリコントローラ７１５はリクエストを受け入れ、優先ジェネレータ７３７およびシフトコントローラ７５１は、読取りリクエスト７４７または書込みリクエスト７４９には、スケジュールされたか否かが知らされる。
【００３０】
シフトコントローラ７５１はリクエストバッファ７０３のコンテンツを知るため接続される。リクエストがスケジュールされた後、シフトコントローラ７５１は、リクエストバッファ７０３からの当該リクエストを取り出す。これを行なうため、シフトコントローラ７５１は２つの機能を遂行する。第１の機能は、シフトコントローラ７５１が、今スケジュールされたリクエストの形式（すなわち、読取り形式７４７または書込み形式７４９）に一致する最も古い目的利用可能なリクエストを識別することにより、どのリクエストが今スケジュールされたものであるかを演繹することである。第２の機能は、シフトコントローラ７５１が、リクエストバッファに情報を提供して、１つの読取りリクエストにより今スケジュールされたリクエストより古い全てのリクエストを、リクエストバッファ７０３の入力エンド７０５（すなわち、新しいエンド）からシフトすることである。
【００３１】
上記のように、リクエストバッファ７０３は、若い方のエンド７０５および反対側の古い方のエンド７０６を備えたシフトレジスタとして構成されている。バッファ７０３にリクエストが入るエイジは、必然的に、若い方のエンド７０５から古い方のエンド７０６に向かって増大するリクエストバッファ７０３内の流れは、全ての要素に同時に加えられるバッファの各要素Ｘについての下記規則を用いて制御される。これらの規則の効果は、リクエストバッファ７０３がそのコンテンツをシフトして非占拠要素を満たし、これにより、若い方のエンド７０５での充満のための若い方の要素の利用可能性を最高にする。
規則１：  要素Ｘまたは古い要素が使用されない場合には、要素Ｘのコンテントが隣接する若い要素に置換される。
【００３２】
規則２：  要素Ｘまたは古い要素がメモリシステムに行くことをスケジュールされている場合には、要素Ｘのコンテントが隣接する若い要素に置換される。
規則３：  上記両規則１および２の条件が満たされない場合には、要素Ｘのコンテントが不変に維持される。
実施形態７０１は衝突検出器４０４（図１０には示されていない）を用いて作動するように設計されているため、アドレスへの能動書込みリクエストには同じアドレスへの能動リクエストが続かないものと仮定する。実施形態７０１は、衝突検出器をリクエストバッファ７０３に付加することにより、このような仮定を行なわないように変更できる。
図１１は、読取り７４１のための現在の優先順位を与える、図１０の読取り／書込みスケジューラ７３１のリクエストスケジューリングを示すフローチャートである。図１１において、リクエストが利用可能なアドレスを目的とする場合には（８０３）、最も古い読取りリクエストがスケジュールされる（８０１）。そうでない場合には（８０５）、前の読取りリクエストが書込みパスをクリアするようにスケジュールされてから充分な時間が経過している場合には、利用可能なアドレス８０９を目的とする最も古い書込みリクエストがスケジュールされる（８０７）。
【００３３】
図１２は、書込み７４３のための現在の優先順位を与える、図１０の読取り／書込みスケジューラ７３１のリクエストスケジューリングを示すフローチャートである。図１２において、リクエストが利用可能なアドレスを目的とする場合には（８２３）、最も古い読取りリクエストがスケジュールされる（８２１）。そうでない場合には（８２５）、利用可能なアドレス８２９を目的とする最も古い読取りリクエストがスケジュールされる（８２７）。
図１３、図１４、図１５は、図１０の読取り／書込み優先ジェネレータ７３７での読取り／書込み優先ジェネレーションを示すフローチャートである。図１３から分かるように、目的利用可能な読取りリクエストが存在しない場合（９０５）および目的利用可能な書込みリクエストが存在する場合（９０９）にのみ、読取り７４１の現在の優先順位が書込みの優先順位に変更される（９０７、９１３）。必要ならば（９１０、９１２）、書込みの現在の優先順位を確立する前に、優先ジェネレータが待機する（９１５）。この待機は、前の読取りリクエストがスケジュールされた後に充分な時間経過を与えることにより（９１１）、クリアナ書込みパスを確保するためのものである。待機の間、書込み優先順位および読取り優先順位のいずれも主張されない（すなわち、優先順位は決定されない）。
【００３４】
図１５から分かるように、現在の優先順位が主張されないと、この状態は、目的利用可能な書込みリクエストが存在せず（９１９）かつ所定数Ｘの書込みが連続的に書き込まれなくなるまで維持される（９１７）。本発明の８個のPentium Pro を用いた実施形態において首尾よく作動するための、Ｘについての４つの値が見出されている。
以上、本発明の特定実施形態について全て説明したが、種々の変更を行なうことができる。従って、上記説明は、本発明の範囲を制限するものではなく、本発明およびその均等物の範囲は特許請求の範囲の記載により定められる。
ソースコード付録
マイクロフィッシュソースコード付録として、本発明の一実施形態を実施するソースコードがある。このソースコードは、回路を記載する産業において使用されているVerilog のハードウェア記載言語にある。適当なコンパイラでコンパイルするとき、ソースコードは本発明のシミュレーションを行なうことができる。適当なコンパイラとして、例えばSun Microsystems社のSparc ワークステーションに使用できる、Cadence Design Systems社から市販されているTurbo-Verilog がある。ソースコードに使用されるVerilog のサブセットは、Synopsys, Inc.社から市販されている標準合成ツールを用いてゲートへの合成、従って集積回路（ＩＣ）を選択する実施形態が可能である。
【図面の簡単な説明】
【図１】本発明が具現されるコンピュータシステムを示すブロック図である。
【図２】本発明の多重プロセッサの実施形態を示す高レベルブロック図である。
【図３】二重ブリッジ形メモリバスを備えた本発明の多重プロセッサの実施形態を示す高レベルブロック図である。
【図４】従来技術によるリクエストされたメモリ演算の順序を示す概略図であり、リクエストされた読取り演算を示すものである。
【図５】本発明によるリクエストされたメモリ演算の順序を示す概略図であり、リクエストされた読取り演算を示すものである。
【図６】本発明の一実施形態を示すブロック図である。
【図７】本発明の実施形態におけるリクエスト順序を示すフローチャートである。
【図８】本発明の読取りに適した実施形態におけるリクエストスケジュールを示すフローチャートである。
【図９】本発明の読取りに適した実施形態におけるリクエストスケジューリングを示すフローチャートである。
【図１０】本発明の一実施形態を示す回路ブロック図である。
【図１１】図１０の読取り／書込みスケジューラのリクエストスケジューリングを示すフローチャートである。
【図１２】図１０の読取り／書込みスケジューラのリクエストスケジューリングを示すフローチャートである。
【図１３】図１０の優先ジェネレータにおける読取り／書込み優先ジェネレーションを示すフローチャートである。
【図１４】図１０の優先ジェネレータにおける読取り／書込み優先ジェネレーションを示すフローチャートである。
【図１５】図１０の優先ジェネレータにおける読取り／書込み優先ジェネレーションを示すフローチャートである。
【符号の説明】
１０１  コンピュータシステム
１０２  ディスプレイ
１０３  プロセッサ
１０４  キーボード
１０５  マウス
１０７  ランダムアクセスメモリ（ＲＡＭ）
１０９  ディスクメモリサブシステム
【図１】
0003937365.tif 000002
【図２】
0003937365.tif 000003
【図３】
0003937365.tif 000004
【図４】
0003937365.tif 000005
【図５】
0003937365.tif 000006
【図６】
0003937365.tif 000007
【図７】
0003937365.tif 000008
【図８】
0003937365.tif 000009
【図９】
0003937365.tif 000010
【図１０】
0003937365.tif 000011
【図１１】
0003937365.tif 000012
【図１２】
0003937365.tif 000013
【図１３】
0003937365.tif 000014
【図１４】
0003937365.tif 000015
【図１５】
0003937365.tif 000016