(57)【要約】【課題】同一アドレスのリクエストのキューイング防止を行うシステムコントローラに関し，ハードウェア量を削減しつつも，キャッシュリプレース要求を誤ってリトライとすることを防止する技術を提供する。【解決手段】アドレスが一致するリクエストが複数入らないように処理する回路を持つＣＰＵ発行リクエストキュー１１２を備えるシステムコントローラにおいて，投入リクエスト保持部１５０にキャッシュリプレース要求以外の最新のリクエストを保持することにより，キャッシュリプレース要求の発行リクエストについては，ＣＰＵ発行リクエストキュー１１２に保持されるリクエストとアドレスが一致しても，投入リクエスト保持部１５０が保持するアドレスの全部と一致しなければ，そのキャッシュリプレース要求の発行リクエストをリトライとしないで，ＣＰＵ発行リクエストキュー１１２にキューイングする。【選択図】図１
2008046958.tif 000002
【特許請求の範囲】
【請求項１】
マルチプロセッサシステムにおいて，ＣＰＵから発行されたリクエストを制御するシステムコントローラであって，
ＣＰＵから発行されたリクエストを保持する複数のエントリを持つＣＰＵ発行リクエストキューと，
ＣＰＵから発行され，前記ＣＰＵ発行リクエストキューに保持されたキャッシュリプレース要求以外の最新のリクエストを保持する投入リクエスト保持部と，
ＣＰＵから発行された新たなリクエストをリトライとするか否かを判定するリトライ判定部とを備え，
前記ＣＰＵ発行リクエストキューは，ＣＰＵから発行された新たなリクエストのアドレスの特定部分が一致するアドレスを各エントリのいずれかが保持するときに，リトライ要の信号を出力する回路を備え，
前記投入リクエスト保持部は，前記新たなリクエストがキャッシュリプレース要求であり，かつ前記新たなリクエストのアドレスの前記特定部分が，自らが保持するリクエストのアドレスの前記特定部分と一致し，かつ前記特定部分とは別の部分が一致しないときに，リトライを抑止する信号を出力する回路を備え，
前記リトライ判定部は，前記ＣＰＵ発行リクエストキューがリトライ要の信号を出力し，かつ前記投入リクエスト保持部がリトライを抑止する信号を出力していない場合に，前記新たなリクエストをリトライとし，それ以外の場合に，前記新たなリクエストをリトライとしないで前記ＣＰＵ発行リクエストキューに保持させる
ことを特徴とするシステムコントローラ。
【請求項２】
請求項１に記載されたシステムコントローラであって，
前記投入リクエスト保持部は，ＣＰＵごとに１つずつ備えられ，対応するＣＰＵから発行され，前記ＣＰＵ発行リクエストキューに保持されたキャッシュリプレース要求以外の最新のリクエストを保持し，
前記リトライ判定部は，前記ＣＰＵ発行リクエストキューがリトライ要の信号を出力し，かつ前記新たなリクエストを発行したＣＰＵに対応する前記投入リクエスト保持部がリトライを抑止する信号を出力していない場合に，前記新たなリクエストをリトライとし，それ以外の場合に，前記新たなリクエストをリトライとしないで前記ＣＰＵ発行リクエストキューに保持させる
ことを特徴とするシステムコントローラ。
【請求項３】
請求項２に記載されたシステムコントローラであって，
前記投入リクエスト保持部は，自らが保持するリクエストに対応する前記ＣＰＵ発行リクエストキューに保持されたリクエストが開放された場合に，自らが保持するリクエストを開放し，リトライを抑止する信号を出力しない
ことを特徴とするシステムコントローラ。
【請求項４】
請求項２に記載されたシステムコントローラであって，
前記投入リクエスト保持部は，タイマ機能を備え，新たにリクエストを保持してから規定の時間が経過したときに，自らが保持するリクエストを開放し，リトライを抑止する信号を出力しない
ことを特徴とするシステムコントローラ。
【請求項５】
マルチプロセッサシステムにおいて，ＣＰＵから発行されたリクエストを保持する複数のエントリを持つＣＰＵ発行リクエストキューと，ＣＰＵから発行され，前記ＣＰＵ発行リクエストキューに保持されたキャッシュリプレース要求以外の最新のリクエストを保持する投入リクエスト保持部と，ＣＰＵから発行されたリクエストをリトライとするか否かを判定するリトライ判定部とを備え，ＣＰＵから発行されたリクエストを制御するシステムコントローラによる同一アドレスリクエストキューイング防止方法であって，
前記ＣＰＵ発行リクエストキューは，ＣＰＵから発行された新たなリクエストのアドレスの特定部分が一致するアドレスを各エントリのいずれかが保持するときに，リトライ要の信号を出力し，
前記投入リクエスト保持部は，前記新たなリクエストがキャッシュリプレース要求であり，かつ前記新たなリクエストのアドレスの前記特定部分が，自らが保持するリクエストのアドレスの前記特定部分と一致し，かつ前記特定部分とは別の部分が一致しないときに，リトライを抑止する信号を出力し，
前記リトライ判定部は，前記ＣＰＵ発行リクエストキューがリトライ要の信号を出力し，かつ前記投入リクエスト保持部がリトライを抑止する信号を出力していない場合に，前記新たなリクエストをリトライとし，それ以外の場合に，前記新たなリクエストをリトライとしないで前記ＣＰＵ発行リクエストキューに保持させる
ことを特徴とする同一アドレスリクエストキューイング防止方法。
【請求項６】
請求項５に記載された同一アドレスリクエストキューイング防止方法であって，
前記投入リクエスト保持部は，ＣＰＵごとに１つずつ備えられ，対応するＣＰＵから発行され，前記ＣＰＵ発行リクエストキューに保持されたキャッシュリプレース要求以外の最新のリクエストを保持し，
前記リトライ判定部は，前記ＣＰＵ発行リクエストキューがリトライ要の信号を出力し，かつ前記新たなリクエストを発行したＣＰＵに対応する前記投入リクエスト保持部がリトライを抑止する信号を出力していない場合に，前記新たなリクエストをリトライとし，それ以外の場合に，前記新たなリクエストをリトライとしないで前記ＣＰＵ発行リクエストキューに保持させる
ことを特徴とする同一アドレスリクエストキューイング防止方法。
【請求項７】
請求項６に記載された同一アドレスリクエストキューイング防止方法であって，
前記投入リクエスト保持部は，自らが保持するリクエストに対応する前記ＣＰＵ発行リクエストキューに保持されたリクエストが開放された場合に，自らが保持するリクエストを開放する
ことを特徴とする同一アドレスリクエストキューイング防止方法。
【請求項８】
請求項６に記載された同一アドレスリクエストキューイング防止方法であって，
前記投入リクエスト保持部は，タイマ機能を備え，
前記投入リクエスト保持部が，新たにリクエストを保持してから規定の時間が経過したときに，自らが保持するリクエストを開放する
ことを特徴とする同一アドレスリクエストキューイング防止方法。
【請求項９】
複数のプロセッサと，前記プロセッサから発行されたリクエストを制御するシステムコントローラとを備えた情報処理装置において，
前記システムコントローラが，
前記プロセッサから発行されたリクエストを保持するための複数のエントリを有し，前記プロセッサから発行された新たなリクエストのアドレスと一致するアドレスを有するリクエストが前記エントリのいずれかに保持されているときに，リトライ要を示す信号を出力するリクエストキューと，
前記リクエストキューに保持されたキャッシュリプレース要求以外の最新のリクエストを保持し，前記新たなリクエストのアドレスが自ら保持するリクエストのアドレスと一致しない場合にリトライ抑止を示す信号を出力するするリクエスト保持部と，
前記リクエストキューがリトライ要を示す信号を出力し，かつ前記リクエスト保持部がリトライを抑止する信号を出力していない場合，前記新たなリクエストをリトライとするリトライ判定部とを備えた
ことを特徴とする情報処理装置。
【請求項１０】
請求項９に記載された情報処理装置において，
前記リクエストキューは，前記新たなリクエストのアドレスの第一の部分と，前記リクエストキューに保持されたリクエストのアドレスの第一の部分とが一致するか否かを判別する
ことを特徴とする情報処理装置。
【請求項１１】
請求項９に記載された情報処理装置において，
前記リクエスト保持部は，前記新たなリクエストのアドレスの第二の部分と，前記リクエスト保持部に保持されたリクエストのアドレスの第二の部分とが一致しない場合に，リトライ抑止を示す信号を出力する
ことを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，マルチプロセッサシステムにおいて，各ＣＰＵから発行されたリクエストをシステムコントローラによって制御する技術に関し，特に各ＣＰＵから発行されたリクエストをキューに保持する場合に，同一アドレスのリクエストを保持することを防止するシステムコントローラ，同一アドレスリクエストキューイング防止方法および情報処理装置に関するものである。
【背景技術】
【０００２】
近年，情報処理装置が各分野で広く利用されるようになったことに伴い，マルチプロセッサ構成のチップセットの処理能力の高さが求められるようになっている。
【０００３】
図１２は，マルチプロセッサシステムの構成例を示す図である。図１２に示すマルチプロセッサシステムは，４つのシステムボード１００（ａ〜ｄ）と，アドレスクロスバボード２００から構成されている。各システムボード１００（ａ〜ｄ）とアドレスクロスバボード２００とは，ローカルバス３００（ａ〜ｄ），グローバルバス３０１，ローカル通知パス３０２（ａ〜ｄ），グローバル通知パス３０３等で接続される。
【０００４】
システムボード１００ａは，システムコントローラ１１０と，４つのＣＰＵ１２０（ａ〜ｄ）とを備える。ＣＰＵ１２０ａとＣＰＵ１２０ｂはＣＰＵバス１３０ａで，ＣＰＵ１２０ｃとＣＰＵ１２０ｄはＣＰＵバス１３０ｃで，システムコントローラ１１０に接続される。システムボード１００（ｂ〜ｄ）も，システムボード１００ａと同様の構成となる。
【０００５】
各ＣＰＵ１２０（ａ〜ｄ）は，それぞれキャッシュメモリ１２１（ａ〜ｄ）と，キャッシュタグ１２２（ａ〜ｄ）とを備える。本実施の形態では，キャッシュメモリ１２１は，４Ｗａｙセットアソシアティブ方式で制御されているものとする。
【０００６】
システムコントローラ１１０は，スヌープタグ１１１（ａ〜ｄ），ＣＰＵ発行リクエストキュー１１２（ａ，ｃ），ローカルアービタ１１３，リクエスト処理部１１４，リクエスト実行部１１５を備える。
【０００７】
スヌープタグ１１１（ａ〜ｄ）は，それぞれキャッシュタグ１２２（ａ〜ｄ）に対応する。ＣＰＵ発行リクエストキュー１１２は，ＣＰＵ１２０が発行するリクエストをＣＰＵバス１３０ごとに保持する。ここでは，ＣＰＵ１２０（ａ，ｂ）が発行するリクエストをＣＰＵ発行リクエストキュー１１２ａが保持し，ＣＰＵ１２０（ｃ，ｄ）が発行するリクエストをＣＰＵ発行リクエストキュー１１２ｃが保持する。ローカルアービタ１１３は，ＣＰＵ発行リクエストキュー１１２に保持されたリクエストを，ローカルバス３００ａに出力する。
【０００８】
リクエスト処理部１１４は，グローバルバス３０１から送られてきたリクエストに対する処理を行う。リクエスト処理部１１４は，資源管理部１１６，リクエスト実行起動部１１７を備える。資源管理部１１６は，リクエストを処理するための資源等のチェックを行う。リクエスト実行起動部１１７は，リクエスト実行部１１５の起動や，スヌープタグ１１１の更新を行う。
【０００９】
アドレスクロスバボード２００は，グローバルアービタ２１０，実行可否判定回路２２０を備える。グローバルアービタ２１０は，ローカルバス３００（ａ〜ｄ）から入力されたリクエストを，グローバルバス３０１を介して，すべてのシステムボード１００（ａ〜ｄ）に出力する。実行可否判定回路２２０は，ローカル通知パス３０２（ａ〜ｄ）から入力された通知をもとにリクエストの実行の可否判定を行い，その結果とリクエストの実行に必要な情報とをグローバル通知パス３０３を介して各システムボード１００（ａ〜ｄ）に通知する。
【００１０】
ここで，ＣＰＵ１２０ａがリード要求を行う場合を例に，図１２に示すシステムの動作を説明する。ここでは，ＣＰＵ１２０ａが１０００番地のリードを行うものとする。なお，キャッシュコヒーレンシには，ＭＥＳＩプロトコルが用いられるものとする。ＭＥＳＩプロトコルは，キャッシュコヒーレンシプロトコルの一種であり，キャッシュの各ラインを，Ｍ（更新状態：Ｍｏｄｅｉｆｉｅｄ），Ｅ（排他状態：Ｅｘｃｌｕｓｉｖｅ），Ｓ（共有状態：Ｓｈａｒｅｄ），Ｉ（無効状態：Ｉｎｖａｌｉｄ）に分けて制御する。
【００１１】
ＣＰＵ１２０ａは，自身のキャッシュメモリ１２１ａに１０００番地のデータが存在するかを確認するために，まずキャッシュタグ１２２ａの検索を行う。検索の結果，自身のキャッシュメモリ１２１ａに有効なデータがないと判断すると，ＣＰＵ１２０ａは，ＣＰＵバス１３０ａにリード要求のリクエストを発行する。
【００１２】
ＣＰＵ１２０ａから発行されたリクエストはＣＰＵ発行リクエストキュー１１２ａ，ローカルアービタ１１３，ローカルバス３００ａを介し，グローバルアービタ２１０に入力される。グローバルアービタ２１０に入力されたリクエストは，グローバルバス３０１を介し，すべてのシステムボード１００（ａ〜ｄ）に同時に通知される。
【００１３】
システムボード１００ａでは，グローバルバス３０１からリクエスト処理部１１４にリクエストが入力される。リクエスト処理部１１４は，各スヌープタグ１１１を読み込み，リクエストを処理するための資源等があるかのチェックを資源管理部１１６によって行う。それらの結果は，ローカル通知パス３０２ａを介して実行可否判定回路２２０に送られる。
【００１４】
実行可否判定回路２２０は，すべてのローカル通知パス３０２（ａ〜ｄ）からの通知をもとにリクエスト実行の可否判定を行い，その結果とリクエストの実行に必要な情報とを，グローバル通知パス３０３を介して，リクエスト実行起動部１１７に通知する。リクエスト実行起動部１１７は，リクエスト実行の可否判定の結果とリクエストの実行に必要な情報とをもとに，スヌープタグ１１１の更新やリクエスト実行部１１５の起動を行う。
【００１５】
例えば，資源確保ができ，スヌープタグ１１１の検索結果がすべてＩｎｖａｌｉｄであった場合，リクエスト実行起動部１１７は，スヌープタグ１１１ａに１０００番地を登録する。なお，登録される状態は，発行リクエストによって決定される。同時に，リクエスト実行部１１５は，メモリの１０００番地のリードを行い，得られたデータをＣＰＵ１２０ａに送る。ＣＰＵ１２０ａは，キャッシュタグ１２２ａを更新する。
【００１６】
また，例えば，資源確保ができ，スヌープタグ１１１の検索結果，１０００番地がスヌープタグ１１１ｃにＭ（更新状態）で登録されていた場合，リクエスト実行起動部１１７は，スヌープタグ１１１ａに１０００番地を登録する。なお，登録される状態は，発行リクエストによって決定される。また，スヌープタグ１１１ｃの１０００番地の状態をＳ（共有状態）またはＩ（無効状態）に変更する。このときに変更される状態は発行リクエストによって決定される。同時に，リクエスト実行部１１５は，ＣＰＵ１２０ｃに１０００番地のＭデータを送出する指示を出し，出力されたデータをＣＰＵ１２０ａに送る。ＣＰＵ１２０ａはキャッシュタグ１２２ａを更新し，ＣＰＵ１２０ｃはキャッシュタグ１２２ｃを更新する。
【００１７】
図１３は，従来の同一アドレスのリクエストのキューイング防止の例を説明する図である。ＣＰＵ発行リクエストキュー１１２は，同一アドレスのリクエストが同時に保持されないように，同一アドレスのリクエストのキューイング防止を行う。以下，図１３を用いて，従来のＣＰＵ発行リクエストキュー１１２における同一アドレスのリクエストのキューイング防止の例を説明する。
【００１８】
発行リクエストは，ＣＰＵ１２０から発行され，ＣＰＵバス１３０を介してＣＰＵ発行リクエストキュー１１２に送られるリクエストであり，コマンド（ＣＭＤ），キャッシュラインアドレス（ＡＤＲ０，ＡＤＲ１，ＡＤＲ２），ＣＰＵＩＤなどの信号群からなる。ここでは，キャッシュラインアドレスを，ＡＤＲ０，ＡＤＲ１，ＡＤＲ２の３ブロックに分割して扱うものとする。なお，図１３に示された発行リクエストの信号群は，リクエストに含まれる全信号のうち，説明に必要な一部を抜粋したものである。
【００１９】
保持リクエストは，ＣＰＵ発行リクエストキュー１１２の各エントリに保持されたリクエストであり，バリッド信号（Ｖ），キャッシュラインアドレス（ＡＤＲ０，ＡＤＲ１，ＡＤＲ２）などの信号群からなる。ここでは，キャッシュラインアドレスを，ＡＤＲ０，ＡＤＲ１，ＡＤＲ２の３ブロックに分割して扱うものとする。なお，図１３に示された保持リクエストの信号群は，リクエストに含まれる全信号のうち，説明に必要な一部を抜粋したものである。
【００２０】
ＣＰＵ発行リクエストキュー１１２の各エントリは，比較回路１４１，ＡＮＤ回路１４２を備える。各エントリのＡＮＤ回路１４２は，ＯＲ回路１４３に接続されている。
【００２１】
図１３（Ａ）に示す手法では，ＣＰＵ発行リクエストキュー１１２の各エントリにおいて，比較回路１４１が，発行リクエストのキャッシュラインアドレス（ＡＤＲ０，ＡＤＲ１，ＡＤＲ２）と，保持リクエストのキャッシュラインアドレス（ＡＤＲ０，ＡＤＲ１，ＡＤＲ２）とを比較する。双方が一致する場合には有効信号“１”を発信し，双方が一致しない場合には無効信号“０”を発信する。ＡＮＤ回路１４２は，比較回路１４１から発信された信号が有効であり，かつ保持リクエストのバリッド信号（Ｖ）が有効であれば，有効信号を発信する。それ以外の場合には無効信号を発信する。
【００２２】
ＯＲ回路１４３は，ＣＰＵ発行リクエストキュー１１２のいずれかのエントリのＡＮＤ回路１４２から発信された信号が有効である場合には，発行リクエストをリトライとする。すなわち，ＣＰＵ発行リクエストキュー１１２の保持リクエストに，発行リクエストとキャッシュラインアドレス（ＡＤＲ０，ＡＤＲ１，ＡＤＲ２）が一致するものが存在する場合には，発行リクエストのＣＰＵ発行リクエストキュー１１２へのキューイングは行われない。
【００２３】
図１３（Ａ）に示す手法では，論理的には完全に同一アドレスのキューイングを防ぐことが可能である。しかし，近年のシステムではアドレス空間の拡大とＣＰＵ発行リクエストキュー１１２のエントリ数の増加とが要求されており，キャッシュラインアドレス（ＡＤＲ０，ＡＤＲ１，ＡＤＲ２）の一致をチェックするためには莫大なハードウェアが必要となる。また，論理段数も増えるため，システムの高速化が難しくなる。そのため，近年のシステムでは，図１３（Ｂ）に示すように，キャッシュラインアドレスの一部（ＡＤＲ０）のみの一致をチェックする手法が用いられることがある。
【００２４】
図１３（Ｂ）に示す手法では，ＣＰＵ発行リクエストキュー１１２の各エントリにおいて，比較回路１４１が，発行リクエストのキャッシュラインアドレスの一部（ＡＤＲ０）と，保持リクエストのキャッシュラインアドレスの一部（ＡＤＲ０）とを比較する。双方が一致する場合には有効信号を発信し，双方が一致しない場合には無効信号を発信する。ＡＮＤ回路１４２は，比較回路１４１から発信された信号が有効であり，かつ保持リクエストのバリッド信号（Ｖ）が有効であれば，有効信号を発信する。それ以外の場合には無効信号を発信する。
【００２５】
ＯＲ回路１４３は，ＣＰＵ発行リクエストキュー１１２のいずれかのエントリのＡＮＤ回路１４２から発信された信号が有効である場合には，発行リクエストをリトライとする。すなわち，ＣＰＵ発行リクエストキュー１１２の保持リクエストに，発行リクエストとキャッシュラインアドレスの一部（ＡＤＲ０）が一致するものが存在する場合には，発行リクエストのＣＰＵ発行リクエストキュー１１２へのキューイングは行われない。
【００２６】
なお，マルチプロセッサシステムに関する技術が記載された先行技術文献としては，例えば特許文献１などがある。特許文献１には，各ノードがリング状に結合された多重プロセッサコンピュータシステムに関する技術が記載されている。ただし，特許文献１に記載された技術では，後述の課題を解決することはできない。
【特許文献１】特表２００２−５２２８２７号公報
【発明の開示】
【発明が解決しようとする課題】
【００２７】
ＣＰＵ発行リクエストキュー１１２内に同一アドレスが複数あると，キャッシュリプレース要求の処理が複雑になる。例えば，同一ＣＰＵ１２０から，リード要求Ａ，キャッシュリプレース要求Ｂ，リード要求Ｂと順に発行され，キャッシュリプレース要求Ｂとリード要求Ｂとが同時にキュー内に存在する場合には，追い越しが発生しないように制御する必要がある。この制御をリード要求のアウトオブオーダ処理をしつつ行うには，複雑な論理が必要となる。
【００２８】
同一アドレスがＣＰＵ発行リクエストキュー１１２内に入らないようにするために，図１３（Ａ）に示すようにフルアドレスのコンパレータを用いると，ハードウェア量が増えてしまうという問題が発生する。また，ハードウェア量の増加は，高周波数のクロックで動作をさせるのを困難にする。
【００２９】
また，図１３（Ｂ）に示す手法において，一般的に，キャッシュラインアドレスの一部（ＡＤＲ０）には，キャッシュインデックスが用いられる。しかし，キャッシュリプレース要求とその親となるリード要求（すなわち，キャッシュリプレースを必要とするもとになったリード要求）とは同一インデックスであるため，図１３（Ｂ）に示す手法では，キャッシュリプレース要求がリトライになってしまうという問題がある。
【００３０】
本発明は，上記の問題点の解決を図り，システムコントローラでの同一アドレスのリクエストのキューイング防止において，ハードウェア量を削減しつつも，キャッシュリプレース要求を誤ってリトライとすることを防ぐことが可能となる技術を提供することを目的とする。
【課題を解決するための手段】
【００３１】
本発明は，上記の課題を解決するため，アドレスの特定部分を比較することにより，システムコントローラでの同一アドレスのリクエストのキューイングを防止する場合において，ＣＰＵから発行されたリクエストがキャッシュリプレース要求であるときに，そのキャッシュリプレース要求が直前に発行されてキューイングされたリード要求を親とするキャッシュリプレース要求であるかを判定し，そうであればそのキャッシュリプレース要求をリトライとしないことを特徴とする。
【００３２】
具体的には，本発明は，マルチプロセッサシステムにおいて，ＣＰＵから発行されたリクエストを制御するシステムコントローラであって，ＣＰＵから発行されたリクエストを保持する複数のエントリを持つＣＰＵ発行リクエストキューと，ＣＰＵから発行され，ＣＰＵ発行リクエストキューに保持されたキャッシュリプレース要求以外の最新のリクエストを保持する投入リクエスト保持部と，ＣＰＵから発行されたリクエストをリトライとするか否かを判定するリトライ判定部とを備え，ＣＰＵ発行リクエストキューは，ＣＰＵから発行された新たなリクエストのアドレスの特定部分が一致するアドレスを各エントリのいずれかが保持するときに，リトライ要の信号を出力し，投入リクエスト保持部は，新たなリクエストがキャッシュリプレース要求であり，かつ新たなリクエストのアドレスの特定部分が，自らが保持するリクエストのアドレスの特定部分と一致し，かつ特定部分とは別の部分が一致しないときに，リトライを抑止する信号を出力し，リトライ判定部は，ＣＰＵ発行リクエストキューがリトライ要の信号を出力し，かつ投入リクエスト保持部がリトライを抑止する信号を出力していない場合に，新たなリクエストをリトライとし，それ以外の場合に，新たなリクエストをリトライとしないでＣＰＵ発行リクエストキューに保持させることを特徴とする。
【００３３】
これにより，システムコントローラでの同一アドレスのリクエストのキューイング防止において，ハードウェア量を削減しつつも，キャッシュリプレース要求を誤ってリトライとすることを防ぐことが可能となる。
【００３４】
また，本発明は，上記のシステムコントローラであって，投入リクエスト保持部は，ＣＰＵごとに１つずつ備えられ，対応するＣＰＵから発行され，ＣＰＵ発行リクエストキューに保持されたキャッシュリプレース要求以外の最新のリクエストを保持し，リトライ判定部は，ＣＰＵ発行リクエストキューがリトライ要の信号を出力し，かつ新たなリクエストを発行したＣＰＵに対応する投入リクエスト保持部がリトライを抑止する信号を出力していない場合に，新たなリクエストをリトライとし，それ以外の場合に，新たなリクエストをリトライとしないでＣＰＵ発行リクエストキューに保持させることを特徴とする。
【００３５】
これにより，システムコントローラでの同一アドレスのリクエストのキューイング防止において，複数のＣＰＵからのリクエストが混在する場合であっても，ハードウェア量を削減しつつも，キャッシュリプレース要求を誤ってリトライとすることを防ぐことが可能となる。
【００３６】
また，本発明は，上記のシステムコントローラであって，投入リクエスト保持部は，自らが保持するリクエストに対応するＣＰＵ発行リクエストキューに保持されたリクエストが開放された場合に，自らが保持するリクエストを開放することを特徴とする。これにより，本来リトライされるべきリクエストがリトライされないという誤動作を防ぐことが可能となる。
【００３７】
また，本発明は，上記のシステムコントローラであって，投入リクエスト保持部は，タイマ機能を備え，新たにリクエストを保持してから規定の時間が経過したときに，自らが保持するリクエストを開放することを特徴とする。これにより，本来リトライされるべきリクエストがリトライされないという誤動作を防ぐことを，より少ないハードウェア量で実現することが可能となる。
【発明の効果】
【００３８】
本発明により，同一アドレスのリクエストのキューイング防止において，ＣＰＵ発行リクエストキューの全エントリ中にアドレスの全部を比較する回路ではなく，特定部分だけを比較する回路を持たせるだけでリトライを制御することができ，ハードウェア量の増加を防ぐことができるとともに，キャッシュリプレース要求を誤ってリトライとすることを防ぐことが可能となるため，システム性能が向上する。
【発明を実施するための最良の形態】
【００３９】
以下，本発明の実施の形態について，図を用いて説明する。本実施の形態では，上述の図１２に示すマルチプロセッサシステムの構成を前提に説明を行う。
【００４０】
図１は，本発明の実施の形態の原理構成例を示す図である。以下の説明において，発行リクエストは，ＣＰＵ１２０から発行され，ＣＰＵバス１３０を介してＣＰＵ発行リクエストキュー１１２に送られるリクエストである。保持リクエストは，ＣＰＵ発行リクエストキュー１１２の各エントリに保持されたリクエストである。投入リクエストは，投入リクエスト保持部１５０に保持されたリクエストである。
【００４１】
ＣＰＵ発行リクエストキュー１１２は，エントリごとに同一アドレス判定部１４０を備える。各エントリの同一アドレス判定部１４０は，発行リクエストのアドレスの特定部分と自エントリの保持リクエストのアドレスの特定部分とが一致するかを比較判定する。
【００４２】
投入リクエスト保持部１５０は，リクエスト／アドレス判定部１５１を備える。投入リクエスト保持部１５０には，ＣＰＵ発行リクエストキュー１１２に保持されたキャッシュリプレース要求以外の最新のリクエストが，投入リクエストとして保持される。リクエスト／アドレス判定部１５１は，発行リクエストがキャッシュリプレース要求であるかの判定，発行リクエストのアドレスの特定部分と投入リクエストのアドレスの特定部分とが一致するかの判定，発行リクエストのアドレスの特定部分とは別の部分と投入リクエストのアドレスの特定部分とは別の部分とが一致しないかの判定などを行う。
【００４３】
リトライ判定部１７０は，ＣＰＵ発行リクエストキュー１１２の各エントリの同一アドレス判定部１４０の判定結果や，投入リクエスト保持部１５０のリクエスト／アドレス判定部１５１の判定結果をもとに，発行リクエストをリトライとするか否かを判定する。
【００４４】
図２は，本実施の形態による同一アドレスのリクエストのキューイング防止の例（１）を説明する図である。図２において，発行リクエストは，コマンド（ＣＭＤ），アドレス（ＡＤＲ０，ＡＤＲ１，ＡＤＲ２），ＣＰＵＩＤなどの信号群からなる。保持リクエストは，バリッド信号（Ｖ），アドレス（ＡＤＲ０，ＡＤＲ１，ＡＤＲ２）などの信号群からなる。投入リクエストは，バリッド信号（Ｖ），アドレス（ＡＤＲ０，ＡＤＲ１）などの信号群からなる。なお，図２に示された各リクエストの信号群は，リクエストに含まれる全信号のうち，説明に必要な一部を抜粋したものである。
【００４５】
図２の例において，アドレスは１６ビットで表されるものとする。ここでは，ＡＤＲ２はアドレスｂｉｔ１５からｂｉｔ１２までとし，ＡＤＲ１はアドレスｂｉｔ１１からｂｉｔ８までとし，ＡＤＲ０はアドレスｂｉｔ７からｂｉｔ４までとする。ＡＤＲ０がキャッシュインデックスアドレスであるものとする。
【００４６】
ＣＰＵ発行リクエストキュー１１２の各エントリは，比較回路１４１，ＡＮＤ回路１４２を備える。各エントリのＡＮＤ回路１４２は，ＯＲ回路１４３に接続されている。ＯＲ回路１４３は，ＡＮＤ回路１７１に接続されている。
【００４７】
ＣＰＵ発行リクエストキュー１１２の各エントリにおいて，比較回路１４１は，発行リクエストのアドレスの特定部分（ＡＤＲ０）と，保持リクエストのアドレスの特定部分（ＡＤＲ０）とを比較する。ここでは，比較するアドレスの特定部分は，インデックスアドレス（ＡＤＲ０）である。双方が一致する場合には有効信号“１”を発信し，双方が一致しない場合には無効信号“０”を発信する。
【００４８】
ＡＮＤ回路１４２は，比較回路１４１から発信された信号が有効であり，かつ保持リクエストのバリッド信号（Ｖ）が有効であれば，有効信号を発信する。それ以外の場合には無効信号を発信する。
【００４９】
ＯＲ回路１４３は，ＣＰＵ発行リクエストキュー１１２のいずれかのエントリのＡＮＤ回路１４２から発信された信号が有効である場合には，ＡＮＤ回路１７１に有効信号を発信する。
【００５０】
投入リクエスト保持部１５０は，比較回路１５２，比較回路１５３，キャッシュリプレース要求判定回路１５４，ＮＡＮＤ回路１５５を備える。ＮＡＮＤ回路１５５は，ＡＮＤ回路１７１に接続されている。
【００５１】
比較回路１５２は，発行リクエストのアドレスの特定部分（ＡＤＲ０）と，投入リクエストのアドレスの特定部分（ＡＤＲ０）とを比較する。双方が一致する場合には有効信号を発信し，双方が一致しない場合には無効信号を発信する。
【００５２】
比較回路１５３は，発行リクエストのアドレスの特定部分（ＡＤＲ０）とは別の部分（ＡＤＲ１）と，投入リクエストのアドレスの特定部分（ＡＤＲ０）とは別の部分（ＡＤＲ１）とを比較する。ここでは，ＡＤＲ１は，アドレスｂｉｔ１１からｂｉｔ８までの４ｂｉｔ分であるが，必ずしもこの４ｂｉｔに限らず，アドレス中の他のｂｉｔ群でもよい。双方が一致しない場合には有効信号を発信し，双方が一致する場合には無効信号を発信する。
【００５３】
キャッシュリプレース要求判定回路１５４は，発行リクエストのコマンド（ＣＭＤ）から，発行リクエストがキャッシュリプレース要求であるか否かを判定する。発行リクエストがキャッシュリプレース要求である場合には有効信号を発信し，発行リクエストがキャッシュリプレース要求でない場合には無効信号を発信する。
【００５４】
ＮＡＮＤ回路１５５は，比較回路１５２から発信された信号が有効であり，かつ比較回路１５３から発信された信号が有効であり，かつキャッシュリプレース要求判定回路１５４から発信された信号が有効であり，かつ投入リクエストのバリッド信号（Ｖ）が有効であれば，無効信号を発信する。それ以外の場合には有効信号を発信する。
【００５５】
ＡＮＤ回路１７１は，ＯＲ回路１４３から発信された信号が有効であり，かつＮＡＮＤ回路１５５から発信された信号が有効であれば，発行リクエストをリトライとする。すなわち，キャッシュリプレース要求以外のリクエストは，従来と同様に，同一インデックスにつき，１つのリクエストまでしかＣＰＵ発行リクエストキュー１１２にキューイングされない。キャッシュリプレース要求については，ＣＰＵ発行リクエストキュー１１２にキューイングされた最新のリクエストとインデックスアドレス（ＡＤＲ０）が一致していても，アドレスの他の特定部分（ＡＤＲ１）が不一致であるなら，ＣＰＵ発行リクエストキュー１１２へのキューイングが許可される。
【００５６】
図３は，投入リクエストの更新の例（１）を示す図である。投入リクエスト保持部１５０に保持された投入リクエストの更新は，発行リクエストのコマンド（ＣＭＤ）の種別や，発行リクエストのリトライの発生の有無によって決定される。
【００５７】
図３に示すように，発行リクエストがキャッシュリプレース要求以外であって，リトライが発生しなければ（Ｎｏ），投入リクエスト保持部１５０に保持された投入リクエストを，発行リクエストで更新する。発行リクエストがキャッシュリプレース要求以外であってもリトライが発生する場合（Ｙｅｓ）や，発行リクエストがキャッシュリプレース要求である場合には，投入リクエスト保持部１５０に保持された投入リクエストのバリッド信号（Ｖ）を無効にする（Ｖａｌｉｄ  ｏｆｆ）。
【００５８】
図３に示すように，投入リクエストは，発行リクエストで更新されない場合でもバリッド信号（Ｖ）が無効に更新されるので，投入リクエスト保持部１５０に保持された次の発行リクエストに対してのみ有効となる。すなわち，ＣＰＵ発行リクエストキュー１１２にキューイングされたキャッシュリプレース要求以外のリクエストの直後の同一インデックスのキャッシュリプレース要求のみ，ＣＰＵ発行リクエストキュー１１２へのキューイングが許可される。
【００５９】
図４は，投入リクエスト保持部が設けられたことの効果を説明する図である。図４を用いて，図２に示す同一アドレスのリクエストのキューイング防止の効果を説明する。図４において，時間は左から右に流れているものとする。“Ｒｅａｄ”はリード要求を示し，“Ｒｅｐｌａｃｅ”はキャッシュリプレース要求を示す。“ＣＰＵａ”はＣＰＵ１２０ａを示す。また，アドレスは１６ｂｉｔで表されるものとし，そのうちｂｉｔ７からｂｉｔ４までがインデックスアドレスであるものとする。
【００６０】
図４（Ａ）は，投入リクエスト保持部１５０がない場合の同一アドレスのリクエストのキューイング防止の例を示す。まず，ＣＰＵ１２０ａからアドレス１０００番地のリード要求が発行される。ＣＰＵ発行リクエストキュー１１２には同一インデックスのリクエストがまだ保持されていないので，発行されたリード要求はＣＰＵ発行リクエストキュー１１２にキューイングされる。
【００６１】
続けて，ＣＰＵ１２０ａからアドレス１０００番地のリード要求を親とするアドレス１１００番地のキャッシュリプレース要求が発行される。このとき，ＣＰＵ発行リクエストキュー１１２には，すでに同一インデックスのリクエスト（アドレス１０００番地のリード要求）が保持されている。発行されたキャッシュリプレース要求はリトライとなり，ＣＰＵ発行リクエストキュー１１２にはキューイングされない。
【００６２】
このように，投入リクエスト保持部１５０がない場合には，親リード要求に続くキャッシュリプレース要求がリトライとなってしまう。
【００６３】
図４（Ｂ）は，投入リクエスト保持部１５０がある場合の同一アドレスのリクエストのキューイング防止の例を示す。まず，ＣＰＵ１２０ａからアドレス１０００番地のリード要求が発行される。ＣＰＵ発行リクエストキュー１１２には同一インデックスのリクエストがまだ保持されていないので，発行されたリード要求はＣＰＵ発行リクエストキュー１１２にキューイングされる。また，発行されたリード要求は，投入リクエスト保持部１５０に保持される。
【００６４】
続けて，ＣＰＵ１２０ａから，アドレス１０００番地のリード要求を親とするアドレス１１００番地のキャッシュリプレース要求が発行される。このとき，ＣＰＵ発行リクエストキュー１１２には，すでに同一インデックスのリクエスト（アドレス１０００番地のリード要求）が保持されている。しかし，発行されたリクエストは，投入リクエスト保持部１５０に保持されたリード要求と同一インデックスであり，かつインデックス以外の部分でアドレスが異なり，かつキャッシュリプレース要求であるので，ＣＰＵ発行リクエストキュー１１２にキューイングされる。なお，発行されたリクエストがキャッシュリプレース要求であるので，投入リクエスト保持部１５０に保持されたリクエスト（アドレス１０００番地のリード要求）は，無効となる。
【００６５】
このように，投入リクエスト保持部１５０がある場合には，親リード要求に続くキャッシュリプレース要求はリトライとならず，ＣＰＵ発行リクエストキュー１１２にキューイングされる。
【００６６】
図５は，本実施の形態による同一アドレスのリクエストのキューイング防止の例（２）を説明する図である。図２の例では，ＣＰＵバス１３０ごとに１つの投入リクエスト保持部１５０が用意されることを前提としていた。図５の例では，ＣＰＵ１２０ごとに１つの投入リクエスト保持部１５０が用意されることを前提とする。
【００６７】
図５において，投入リクエスト保持部１５０ａはＣＰＵ１２０ａに対応し，投入リクエスト保持部１５０ｂはＣＰＵ１２０ｂに対応するものとする。すなわち，投入リクエスト保持部１５０ａに保持される投入リクエストはＣＰＵ１２０ａから発行されたリクエストであり，投入リクエスト保持部１５０ｂに保持される投入リクエストはＣＰＵ１２０ｂから発行されたリクエストである。なお，図１２に示すように，ＣＰＵ１２０ａとＣＰＵ１２０ｂは，同一ＣＰＵバス１３０ａに接続されている。
【００６８】
図５に示す各投入リクエスト保持部１５０（ａ，ｂ）の内部の構成は，図２に示す投入リクエスト保持部１５０と同様であり，その動作も同様であるので，説明は省略する。また，ＣＰＵ発行リクエストキュー１１２，ＯＲ回路１４３の動作も図２と同様であるので，説明は省略する。
【００６９】
セレクタ１５６は，発行リクエストのＣＰＵＩＤがＣＰＵ１２０ａのものである場合には，投入リクエスト保持部１５０ａのＮＡＮＤ回路１５５から発信された信号をＡＮＤ回路１７１に送り，発行リクエストのＣＰＵＩＤがＣＰＵ１２０ｂのものである場合には，投入リクエスト保持部１５０ｂのＮＡＮＤ回路１５５から発信された信号をＡＮＤ回路１７１に送る。
【００７０】
ＡＮＤ回路１７１は，ＯＲ回路１４３から発信された信号が有効であり，かつセレクタ１５６から送られた信号が有効であれば，発行リクエストをリトライとする。キャッシュリプレース要求は，同じＣＰＵ１２０から発行されてＣＰＵ発行リクエストキュー１１２にキューイングされた最新のリクエストとインデックスアドレス（ＡＤＲ０）が一致していても，アドレスの他の特定部分（ＡＤＲ１）が不一致であるなら，ＣＰＵ発行リクエストキュー１１２へのキューイングが許可される。
【００７１】
図６は，投入リクエストの更新の例（２）を示す図である。各投入リクエスト保持部１５０（ａ，ｂ）に保持された投入リクエストの更新は，対応するＣＰＵ１２０（ａ，ｂ）から発行されたリクエストのコマンド（ＣＭＤ）の種別や，発行リクエストのリトライの発生の有無によって決定される。
【００７２】
図６に示すように，発行リクエストがキャッシュリプレース要求以外であって，リトライが発生しなければ（Ｎｏ），発行リクエストの発行元であるＣＰＵ１２０に対応する投入リクエスト保持部１５０に保持された投入リクエストを，発行リクエストで更新する。発行リクエストがキャッシュリプレース要求以外であってもリトライが発生する場合（Ｙｅｓ）や，発行リクエストがキャッシュリプレース要求である場合には，発行リクエストの発行元であるＣＰＵ１２０に対応する投入リクエスト保持部１５０に保持された投入リクエストのバリッド信号（Ｖ）を無効にする（Ｖａｌｉｄ  ｏｆｆ）。
【００７３】
図６に示すように，投入リクエストは，発行元であるＣＰＵ１２０が同じである場合にのみ更新される。すなわち，同じＣＰＵ１２０から直前に発行され，ＣＰＵ発行リクエストキュー１１２にキューイングされたキャッシュリプレース要求以外のリクエストと，インデックスが同一のキャッシュリプレース要求に，ＣＰＵ発行リクエストキュー１１２へのキューイングが許可される。
【００７４】
図７は，投入リクエスト保持部がＣＰＵごとに設けられたことの効果を説明する図である。図７を用いて，図５に示す同一アドレスのリクエストのキューイング防止の効果を説明する。図７において，時間は左から右に流れているものとする。“Ｒｅａｄ”はリード要求を示し，“Ｒｅｐｌａｃｅ”はキャッシュリプレース要求を示す。“ＣＰＵａ”はＣＰＵ１２０ａを示し，“ＣＰＵｂ”はＣＰＵ１２０ｂを示す。“投入リクエスト保持部ａ”は投入リクエスト保持部１５０ａを示し，“投入リクエスト保持部ｂ”は投入リクエスト保持部１５０ｂを示す。また，アドレスは１６ｂｉｔで表されるものとし，そのうちｂｉｔ７からｂｉｔ４までがインデックスアドレスであるものとする。
【００７５】
図７（Ａ）は，投入リクエスト保持部１５０がＣＰＵバス１３０ごとに設けられた場合の同一アドレスのリクエストのキューイング防止の例を示す。まず，ＣＰＵ１２０ａからアドレス１０００番地のリード要求が発行される。ＣＰＵ発行リクエストキュー１１２には同一インデックスのリクエストがまだ保持されていないので，発行されたリード要求はＣＰＵ発行リクエストキュー１１２にキューイングされる。また，ＣＰＵ１２０ａから発行されたアドレス１０００番地のリード要求は，投入リクエスト保持部１５０ａに保持される。
【００７６】
続けて，ＣＰＵ１２０ｂからアドレス２０１０番地のリード要求が発行される。ＣＰＵ発行リクエストキュー１１２には同一インデックスのリクエストがまだ保持されていないので，発行されたリード要求はＣＰＵ発行リクエストキュー１１２にキューイングされる。また，投入リクエスト保持部１５０に保持されたＣＰＵ１２０ａから発行されたアドレス１０００番地のリード要求は，ＣＰＵ１２０ｂから発行されたアドレス２０１０番地のリード要求に更新される。
【００７７】
続けて，ＣＰＵ１２０ａからアドレス１０００番地のリード要求を親とするアドレス１１００番地のキャッシュリプレース要求が発行される。このとき，ＣＰＵ発行リクエストキュー１１２には，すでに同一インデックスのリクエスト（アドレス１０００番地のリード要求）が保持されている。また，発行されたリクエストは，投入リクエスト保持部１５０に保持されたリード要求と同一インデックスではない。そのため，発行されたキャッシュリプレース要求はリトライとなり，ＣＰＵ発行リクエストキュー１１２にはキューイングされない。なお，発行されたリクエストがキャッシュリプレース要求であるので，投入リクエスト保持部１５０に保持されたリクエスト（ＣＰＵ１２０ｂから発行されたアドレス２０１０番地のリード要求）は，無効となる。
【００７８】
続けて，ＣＰＵ１２０ｂからアドレス２０１０番地のリード要求を親とするアドレス２１１０番地のキャッシュリプレース要求が発行される。このとき，ＣＰＵ発行リクエストキュー１１２には，すでに同一インデックスのリクエスト（アドレス２０１０番地のリード要求）が保持されている。また，投入リクエスト保持部１５０には，有効なリクエストが保持されていない。そのため，発行されたキャッシュリプレース要求はリトライとなり，ＣＰＵ発行リクエストキュー１１２にはキューイングされない。
【００７９】
このように，投入リクエスト保持部１５０がＣＰＵバス１３０ごとに設けられた場合には，あるＣＰＵ１２０ａから発行された親リード要求とそれに続くキャッシュリプレース要求との間に，同一ＣＰＵバス１３０の他のＣＰＵ１２０ｂから発行されたリクエストが入り込んでしまうと，あるＣＰＵ１２０ａから発行された親リード要求に続くキャッシュリプレース要求がリトライとなってしまう。
【００８０】
図７（Ｂ）は，投入リクエスト保持部１５０がＣＰＵ１２０ごとに設けられた場合の同一アドレスのリクエストのキューイング防止の例を示す。まず，ＣＰＵ１２０ａからアドレス１０００番地のリード要求が発行される。ＣＰＵ発行リクエストキュー１１２には同一インデックスのリクエストがまだ保持されていないので，発行されたリード要求はＣＰＵ発行リクエストキュー１１２にキューイングされる。また，ＣＰＵ１２０ａから発行されたアドレス１０００番地のリード要求は，ＣＰＵ１２０ａに対応する投入リクエスト保持部１５０ａに保持される。
【００８１】
続けて，ＣＰＵ１２０ｂからアドレス２０１０番地のリード要求が発行される。ＣＰＵ発行リクエストキュー１１２には同一インデックスのリクエストがまだ保持されていないので，発行されたリード要求はＣＰＵ発行リクエストキュー１１２にキューイングされる。また，ＣＰＵ１２０ｂから発行されたアドレス２０１０番地のリード要求は，ＣＰＵ１２０ｂに対応する投入リクエスト保持部１５０ｂに保持される。
【００８２】
続けて，ＣＰＵ１２０ａからアドレス１０００番地のリード要求を親とするアドレス１１００番地のキャッシュリプレース要求が発行される。このとき，ＣＰＵ発行リクエストキュー１１２には，すでに同一インデックスのリクエスト（アドレス１０００番地のリード要求）が保持されている。しかし，発行されたリクエストは，ＣＰＵ１２０ａに対応する投入リクエスト保持部１５０ａに保持されたリード要求と同一インデックスであり，かつインデックス以外の部分でアドレスが異なり，かつキャッシュリプレース要求であるので，ＣＰＵ発行リクエストキュー１１２にキューイングされる。なお，発行されたリクエストがキャッシュリプレース要求であるので，投入リクエスト保持部１５０ａに保持されたリクエスト（アドレス１０００番地のリード要求）は，無効となる。
【００８３】
続けて，ＣＰＵ１２０ｂからアドレス２０１０番地のリード要求を親とするアドレス２１１０番地のキャッシュリプレース要求が発行される。このとき，ＣＰＵ発行リクエストキュー１１２には，すでに同一インデックスのリクエスト（アドレス２０１０番地のリード要求）が保持されている。しかし，発行されたリクエストは，ＣＰＵ１２０ｂに対応する投入リクエスト保持部１５０ｂに保持されたリード要求と同一インデックスであり，かつインデックス以外の部分でアドレスが異なり，かつキャッシュリプレース要求であるので，ＣＰＵ発行リクエストキュー１１２にキューイングされる。なお，発行されたリクエストがキャッシュリプレース要求であるので，投入リクエスト保持部１５０ｂに保持されたリクエスト（アドレス２０１０番地のリード要求）は，無効となる。
【００８４】
このように，投入リクエスト保持部１５０がＣＰＵ１２０ごとに設けられた場合には，あるＣＰＵ１２０ａから発行された親リード要求とそれに続くキャッシュリプレース要求との間に，同一ＣＰＵバス１３０の他のＣＰＵ１２０ｂから発行されたリクエストが入り込んでしまっても，あるＣＰＵ１２０ａから発行された親リード要求に続くキャッシュリプレース要求はリトライとならず，ＣＰＵ発行リクエストキュー１１２にキューイングされる。
【００８５】
図８は，投入リクエスト保持部に投入リクエストの開放機能を設けた場合の例を説明する図である。図８では，ＣＰＵ発行リクエストキュー１１２の保持リクエストが開放され，その開放された保持リクエストが投入リクエスト保持部１５０に投入リクエストとして保持されている場合に，その投入リクエストを開放する機能を説明する。図８において，発行リクエスト，保持リクエスト，投入リクエストは，バリッド信号（Ｖ），アドレス（ＡＤＲ）などの信号群からなる。
【００８６】
ＣＰＵ発行リクエストキュー１１２の各エントリは，それぞれエントリ番号（Ｅｎｔｒｙ  Ｎｏ）を保持する。また，ＣＰＵ発行リクエストキュー１１２の各エントリは，比較回路１４４，ＡＮＤ回路１４５を備える。
【００８７】
ＣＰＵ発行リクエストキュー１１２の各エントリにおいて比較回路１４４は，保持リクエストを開放するエントリを指定するリクエストキュー開放エントリ番号と，自エントリに保持されたエントリ番号（Ｅｎｔｒｙ  Ｎｏ）とを比較する。双方が一致する場合には有効信号を発信し，双方が一致しない場合には無効信号を発信する。
【００８８】
ＡＮＤ回路１４５は，比較回路１４４から発信された信号が有効であり，保持リクエストの開放を通知する信号であるリクエストキュー開放通知が有効であれば，保持リクエストのバリッド信号（Ｖ）を無効にする（Ｖａｌｉｄ  ｏｆｆ）。
【００８９】
投入リクエスト保持部１５０は，自らが保持する投入リクエストに対応する保持リクエストが保持されたＣＰＵ発行リクエストキュー１１２のエントリのエントリ番号（Ｅｎｔｒｙ  Ｎｏ）を保持する。また，投入リクエスト保持部１５０は，比較回路１５７，ＡＮＤ回路１５８を備える。
【００９０】
比較回路１５７は，保持リクエストを開放するＣＰＵ発行リクエストキュー１１２のエントリを指定するリクエストキュー開放エントリ番号と，投入リクエスト保持部１５０に保持されたエントリ番号（Ｅｎｔｒｙ  Ｎｏ）とを比較する。双方が一致する場合には有効信号を発信し，双方が一致しない場合には無効信号を発信する。
【００９１】
ＡＮＤ回路１５８は，比較回路１５７から発信された信号が有効であり，保持リクエストの開放を通知する信号であるリクエストキュー開放通知が有効であれば，投入リクエストのバリッド信号（Ｖ）を無効にする（Ｖａｌｉｄ  ｏｆｆ）。
【００９２】
図９は，投入リクエスト保持部に投入リクエストの開放機能を設けた場合の効果を説明する図である。図９において，時間は左から右に流れているものとする。“Ｒｅａｄ”はリード要求を示し，“Ｒｅｐｌａｃｅ”はキャッシュリプレース要求を示す。“ＣＰＵａ”はＣＰＵ１２０ａを示し，“ＣＰＵｂ”はＣＰＵ１２０ｂを示す。“投入リクエスト保持部ａ”は投入リクエスト保持部１５０ａを示し，“投入リクエスト保持部ｂ”は投入リクエスト保持部１５０ｂを示す。また，アドレスは１６ｂｉｔで表されるものとし，そのうちｂｉｔ７からｂｉｔ４までがインデックスアドレスであるものとする。
【００９３】
図９（Ａ）は，投入リクエスト保持部に投入リクエストの開放機能を設けない場合の例を示す。まず，ＣＰＵ１２０ａからアドレス１０００番地のリード要求が発行される。ＣＰＵ発行リクエストキュー１１２には同一インデックスのリクエストがまだ保持されていないので，発行されたリード要求はＣＰＵ発行リクエストキュー１１２にキューイングされる。また，ＣＰＵ１２０ａから発行されたアドレス１０００番地のリード要求は，投入リクエスト保持部１５０ａに保持される。
【００９４】
ここで，次のリクエストが発行される前に，ＣＰＵ発行リクエストキュー１１２に保持されたアドレス１０００番地のリード要求が処理され，ＣＰＵ発行リクエストキュー１１２から開放されるものとする。このとき，ＣＰＵ１２０ａからはまだ新たなリクエストが発行されていないので，投入リクエスト保持部１５０ａのアドレス１０００番地のリード要求は開放されない。
【００９５】
続けて，ＣＰＵ１２０ｂからアドレス１１００番地のリード要求が発行される。ＣＰＵ１２０ａから発行されたアドレス１０００番地のリード要求はすでに開放されており，ＣＰＵ発行リクエストキュー１１２には同一インデックスのリクエストが保持されていないので，発行されたリード要求はＣＰＵ発行リクエストキュー１１２にキューイングされる。また，ＣＰＵ１２０ｂから発行されたアドレス１１００番地のリード要求は，ＣＰＵ１２０ｂに対応する投入リクエスト保持部１５０ｂに保持される。
【００９６】
続けて，ＣＰＵ１２０ａからアドレス１０００番地のリード要求を親とするアドレス１１００番地のキャッシュリプレース要求が発行される。このとき，ＣＰＵ発行リクエストキュー１１２には，すでに同一インデックスのリクエスト（ＣＰＵ１２０ｂから発行されたアドレス１１００番地のリード要求）が保持されている。しかし，発行されたリクエストは，ＣＰＵ１２０ａに対応する投入リクエスト保持部１５０ａに保持されたリード要求と同一インデックスであり，かつインデックス以外の部分でアドレスが異なり，かつキャッシュリプレース要求であるので，ＣＰＵ発行リクエストキュー１１２にキューイングされる。なお，発行されたリクエストがキャッシュリプレース要求であるので，投入リクエスト保持部１５０ａに保持されたリクエスト（アドレス１０００番地のリード要求）は，無効となる。
【００９７】
しかし，ＣＰＵ１２０ａから発行されたアドレス１１００番地のキャッシュリプレース要求は，すでにＣＰＵ発行リクエストキュー１１２に保持されたＣＰＵ１２０ｂから発行されたアドレス１１００番地のリード要求と，アドレスが完全に同一である。本来，ＣＰＵ発行リクエストキュー１１２に保持されたリクエストとアドレスが完全に一致するリクエストは，ＣＰＵ発行リクエストキュー１１２にキューイングされずにリトライされるべきである。
【００９８】
このように，投入リクエスト保持部に投入リクエストの開放機能を設けない場合には，親リード要求が発行されてからキャッシュリプレース要求が発行されるまでの時間の間隔が，リード要求が処理される最短時間より長くなってしまう可能性があるシステムにおいて，本来リトライとなるはずのリクエストが，ＣＰＵ発行リクエストキュー１１２にキューイングされてしまう。
【００９９】
図９（Ｂ）は，投入リクエスト保持部に投入リクエストの開放機能を設けた場合の例を示す。まず，ＣＰＵ１２０ａからアドレス１０００番地のリード要求が発行される。ＣＰＵ発行リクエストキュー１１２には同一インデックスのリクエストがまだ保持されていないので，発行されたリード要求はＣＰＵ発行リクエストキュー１１２にキューイングされる。また，ＣＰＵ１２０ａから発行されたアドレス１０００番地のリード要求は，投入リクエスト保持部１５０ａに保持される。
【０１００】
ここで，次のリクエストが発行される前に，ＣＰＵ発行リクエストキュー１１２に保持されたアドレス１０００番地のリード要求が処理され，ＣＰＵ発行リクエストキュー１１２から開放されるものとする。このとき，リクエストキュー開放通知によって，ＣＰＵ発行リクエストキュー１１２で開放されたアドレス１０００番地のリード要求が，投入リクエスト保持部１５０ａでも開放される。
【０１０１】
続けて，ＣＰＵ１２０ｂからアドレス１１００番地のリード要求が発行される。ＣＰＵ１２０ａから発行されたアドレス１０００番地のリード要求はすでに開放されており，ＣＰＵ発行リクエストキュー１１２には同一インデックスのリクエストが保持されていないので，発行されたリード要求はＣＰＵ発行リクエストキュー１１２にキューイングされる。また，ＣＰＵ１２０ｂから発行されたアドレス１１００番地のリード要求は，ＣＰＵ１２０ｂに対応する投入リクエスト保持部１５０ｂに保持される。
【０１０２】
続けて，ＣＰＵ１２０ａからアドレス１０００番地のリード要求を親とするアドレス１１００番地のキャッシュリプレース要求が発行される。このとき，ＣＰＵ発行リクエストキュー１１２には，すでに同一インデックスのリクエスト（ＣＰＵ１２０ｂから発行されたアドレス１１００番地のリード要求）が保持されている。また，ＣＰＵ１２０ａに対応する投入リクエスト保持部１５０ａには，有効なリクエストが保持されていない。そのため，発行されたキャッシュリプレース要求はリトライとなり，ＣＰＵ発行リクエストキュー１１２にはキューイングされない。
【０１０３】
このように，投入リクエスト保持部に投入リクエストの開放機能を設けた場合には，ＣＰＵ発行リクエストキュー１１２で開放されたリクエストが投入リクエスト保持部１５０に保持されているときに，その投入リクエスト保持部１５０に保持されたリクエストも開放される。これにより，本来リトライとなるべきリクエストがリトライとなり，ＣＰＵ発行リクエストキュー１１２にキューイングされない。
【０１０４】
図１０は，投入リクエスト保持部にタイマによる投入リクエストの開放機能を設けた場合の例を説明する図である。図１０では，タイマによって，投入リクエスト保持部１５０の投入リクエストを開放する機能を説明する。図１０において，発行リクエスト，保持リクエスト，投入リクエストは，バリッド信号（Ｖ），アドレス（ＡＤＲ）などの信号群からなる。
【０１０５】
ＣＰＵ発行リクエストキュー１１２における保持リクエストの開放については，図８と同様であるので説明を省略する。図１０に示すタイマによる投入リクエストの開放は，図８に示すＣＰＵ発行リクエストキュー１１２の保持リクエストの開放による投入リクエストの開放と異なり，ＣＰＵ発行リクエストキュー１１２における保持リクエストの開放を，投入リクエスト保持部１５０の投入リクエストの開放の契機としない。
【０１０６】
投入リクエスト保持部１５０は，カウンタ１５９，規定値判定回路１６０を備える。図１０の例では，カウンタ１５９と規定値判定回路１６０によって，タイマ機能を実現している。
【０１０７】
カウンタ１５９は，投入リクエスト保持部１５０に新たなリクエストが登録されたと同時にカウントを開始し，投入リクエストのバリッド信号（Ｖ）が有効である間は，例えばクロックごとにカウント値をインクリメントしていく。規定値判定回路１６０は，カウンタ１５９のカウント値があらかじめ規定された値Ｎに達したときに，開放通知（Ｖａｌｉｄ  ｏｆｆ）により，投入リクエストのバリッド信号（Ｖ）を無効にする。ここでは，Ｎの値をリード要求の最短処理時間より少ない値とする。
【０１０８】
図１１は，投入リクエスト保持部にタイマによる投入リクエストの開放機能を設けた場合の効果を説明する図である。図１１において，時間は左から右に流れているものとする。“Ｒｅａｄ”はリード要求を示し，“Ｒｅｐｌａｃｅ”はキャッシュリプレース要求を示す。“ＣＰＵａ”はＣＰＵ１２０ａを示し，“ＣＰＵｂ”はＣＰＵ１２０ｂを示す。“投入リクエスト保持部ａ”は投入リクエスト保持部１５０ａを示し，“投入リクエスト保持部ｂ”は投入リクエスト保持部１５０ｂを示す。また，アドレスは１６ｂｉｔで表されるものとし，そのうちｂｉｔ７からｂｉｔ４までがインデックスアドレスであるものとする。
【０１０９】
まず，ＣＰＵ１２０ａからアドレス１０００番地のリード要求が発行される。ＣＰＵ発行リクエストキュー１１２には同一インデックスのリクエストがまだ保持されていないので，発行されたリード要求はＣＰＵ発行リクエストキュー１１２にキューイングされる。また，ＣＰＵ１２０ａから発行されたアドレス１０００番地のリード要求は，投入リクエスト保持部１５０ａに保持される。このとき，投入リクエスト保持部１５０ａにおいて，タイマを起動する。
【０１１０】
投入リクエスト保持部１５０ａにおいて，タイマにより規定の時間が経過すると，すなわちカウンタ１５９のカウント値がＮになると，投入リクエスト保持部１５０ａに保持されたアドレス１０００番地のリード要求が開放される。その後，次のリクエストが発行される前に，ＣＰＵ発行リクエストキュー１１２に保持されたアドレス１０００番地のリード要求が処理され，ＣＰＵ発行リクエストキュー１１２から開放される。
【０１１１】
続けて，ＣＰＵ１２０ｂからアドレス１１００番地のリード要求が発行される。ＣＰＵ１２０ａから発行されたアドレス１０００番地のリード要求はすでに開放されており，ＣＰＵ発行リクエストキュー１１２には同一インデックスのリクエストが保持されていないので，発行されたリード要求はＣＰＵ発行リクエストキュー１１２にキューイングされる。また，ＣＰＵ１２０ｂから発行されたアドレス１１００番地のリード要求は，ＣＰＵ１２０ｂに対応する投入リクエスト保持部１５０ｂに保持される。
【０１１２】
続けて，ＣＰＵ１２０ａからアドレス１０００番地のリード要求を親とするアドレス１１００番地のキャッシュリプレース要求が発行される。このとき，ＣＰＵ発行リクエストキュー１１２には，すでに同一インデックスのリクエスト（ＣＰＵ１２０ｂから発行されたアドレス１１００番地のリード要求）が保持されている。また，ＣＰＵ１２０ａに対応する投入リクエスト保持部１５０ａには，有効なリクエストが保持されていない。そのため，発行されたキャッシュリプレース要求はリトライとなり，ＣＰＵ発行リクエストキュー１１２にはキューイングされない。
【０１１３】
このように，投入リクエスト保持部にタイマによる投入リクエストの開放機能を設けた場合には，投入リクエスト保持部１５０に保持されたリクエストを，ＣＰＵ発行リクエストキュー１１２で処理される前に開放することができるようになるので，図９で説明したＣＰＵ発行リクエストキュー１１２の保持リクエストの開放を契機に投入リクエストを開放する場合と同様に，本来リトライとなるべきリクエストがリトライとなり，ＣＰＵ発行リクエストキュー１１２にキューイングされない。カウンタ１５９の一刻みを大きくすれば，ＣＰＵ発行リクエストキュー１１２の保持リクエストの開放を契機に投入リクエストを開放する場合と比べて少ないハードウェア量で実現することが可能となる。
【図面の簡単な説明】
【０１１４】
【図１】本発明の実施の形態の原理構成例を示す図である。
【図２】本実施の形態による同一アドレスのリクエストのキューイング防止の例（１）を説明する図である。
【図３】投入リクエストの更新の例（１）を示す図である。
【図４】投入リクエスト保持部が設けられたことの効果を説明する図である。
【図５】本実施の形態による同一アドレスのリクエストのキューイング防止の例（２）を説明する図である。
【図６】投入リクエストの更新の例（２）を示す図である。
【図７】投入リクエスト保持部がＣＰＵごとに設けられたことの効果を説明する図である。
【図８】投入リクエスト保持部に投入リクエストの開放機能を設けた場合の例を説明する図である。
【図９】投入リクエスト保持部に投入リクエストの開放機能を設けた場合の効果を説明する図である。
【図１０】投入リクエスト保持部にタイマによる投入リクエストの開放機能を設けた場合の例を説明する図である。
【図１１】投入リクエスト保持部にタイマによる投入リクエストの開放機能を設けた場合の効果を説明する図である。
【図１２】マルチプロセッサシステムの構成例を示す図である。
【図１３】従来の同一アドレスのリクエストのキューイング防止の例を説明する図である。
【符号の説明】
【０１１５】
１１０  システムコントローラ
１１２  ＣＰＵ発行リクエストキュー
１４０  同一アドレス判定部
１５０  投入リクエスト保持部
１５１  リクエスト／アドレス判定部
１７０  リトライ判定部
【図１】
2008046958.tif 000003
【図２】
2008046958.tif 000004
【図３】
2008046958.tif 000005
【図４】
2008046958.tif 000006
【図５】
2008046958.tif 000007
【図６】
2008046958.tif 000008
【図７】
2008046958.tif 000009
【図８】
2008046958.tif 000010
【図９】
2008046958.tif 000011
【図１０】
2008046958.tif 000012
【図１１】
2008046958.tif 000013
【図１２】
2008046958.tif 000014
【図１３】
2008046958.tif 000015