(57)【要約】【課題】マルチプロセッサシステムを制御するシステムコントローラに関し，システムコントローラによるＥｖｉｃｔｉｏｎの数を減らし，システムの性能低下を防止することができるようにする。【解決手段】マルチプロセッサシステムにおいて，システムコントローラ１１０は，各ＣＰＵ１２０が保持するキャッシュタグ１２２のコピー情報であるスヌープタグ１１１を備える。同一のＣＰＵバス１３０に接続されたＣＰＵ１２０同士でキャッシュタグ１２２にＳ（共有状態）の同じアドレスが登録される場合には，その同じアドレスが登録されるＣＰＵ１２０に対応するスヌープタグ１１１のいずれか１つにのみ，Ｓ（共有状態）でアドレスが登録されるようにする。【選択図】図２
2008046961.tif 000002
【特許請求の範囲】
【請求項１】
マルチプロセッサシステムにおいて，キャッシュメモリを備える複数のＣＰＵを管理するシステムコントローラであって，
各ＣＰＵが保持する前記キャッシュメモリのタグのコピー情報を有するスヌープタグを，前記ＣＰＵごとに備えるとともに，
前記ＣＰＵからのリクエストに対する処理を行うリクエスト処理部を備え，
前記リクエスト処理部は，前記複数のＣＰＵの中のあるＣＰＵからキャッシュメモリのタグへの共有状態でのアドレスの登録が必要な要求が発行されたときに，同一のＣＰＵバスに接続されたＣＰＵ同士で前記キャッシュメモリのタグに同じアドレスが登録される場合には，その同じアドレスが登録されるＣＰＵに対応するスヌープタグのいずれか１つにのみ前記アドレスが共有状態で登録されるようにスヌープタグの更新処理を行う
ことを特徴とするシステムコントローラ。
【請求項２】
請求項１に記載されたシステムコントローラにおいて，
前記リクエスト処理部は，前記複数のＣＰＵの中のあるＣＰＵから共有状態でのリード要求が発行されたときに，リード要求を発行したＣＰＵと同一のＣＰＵバスに接続された他のＣＰＵに対応するスヌープタグにリード要求されたアドレスが共有状態で既に登録されている場合には，リード要求を発行したＣＰＵに対応するスヌープタグに前記リード要求されたアドレスを登録しない制御を行う
ことを特徴とするシステムコントローラ。
【請求項３】
請求項１に記載されたシステムコントローラにおいて，
前記リクエスト処理部は，前記複数のＣＰＵの中のあるＣＰＵから共有状態でのリード要求が発行されたときに，リード要求を発行したＣＰＵと同一のＣＰＵバスに接続された他のＣＰＵに対応するスヌープタグにリード要求されたアドレスが共有状態で既に登録されている場合には，そのリード要求されたアドレスが登録されているスヌープタグの前記アドレスのエントリを無効状態にし，リード要求を発行したＣＰＵに対応するスヌープタグに前記アドレスを登録する制御を行う
ことを特徴とするシステムコントローラ。
【請求項４】
請求項１に記載されたシステムコントローラにおいて，
前記リクエスト処理部は，前記複数のＣＰＵの中のあるＣＰＵから共有状態でのリード要求が発行されたときに，リード要求を発行したＣＰＵと同一のＣＰＵバスに接続された他のＣＰＵに対応するスヌープタグにリード要求されたアドレスが共有状態で既に登録されている場合には，そのリード要求されたアドレスが登録されているスヌープタグとリード要求を発行したＣＰＵに対応するスヌープタグの空きエントリ数または使用エントリ数を比較し，その比較結果によって，リード要求を発行したＣＰＵに対応するスヌープタグに前記アドレスを登録しない制御を行うのか，前記アドレスが既に登録されているスヌープタグの前記アドレスのエントリを無効状態にし，リード要求を発行したＣＰＵに対応するスヌープタグに前記アドレスを登録する制御を行うのかを決定し，その決定に基づくスヌープタグの更新処理を実行する
ことを特徴とするシステムコントローラ。
【請求項５】
請求項１から請求項４までのいずれかに記載されたシステムコントローラにおいて，
前記リクエスト処理部は，前記複数のＣＰＵの中のあるＣＰＵからキャッシュリプレース要求が発行されたときに，キャッシュリプレース要求を発行したＣＰＵと同一のＣＰＵバスに接続された他のＣＰＵの共有状態をスヌープし，その結果キャッシュリプレース要求を発行したＣＰＵ以外のＣＰＵにキャッシュリプレース要求されたアドレスが共有状態で登録されている場合には，発行されたキャッシュリプレース要求を無効化する制御を行う
ことを特徴とするシステムコントローラ。
【請求項６】
請求項１から請求項５までのいずれかに記載されたシステムコントローラにおいて，
前記リクエスト処理部は，前記複数のＣＰＵの中のあるＣＰＵからキャッシュリプレース要求が発行されたときに，キャッシュリプレース要求を発行したＣＰＵと同一のＣＰＵバスに接続された他のＣＰＵの共有状態をスヌープし，その結果キャッシュリプレース要求を発行したＣＰＵ以外のＣＰＵにキャッシュリプレース要求されたアドレスが登録されていない場合には，発行されたキャッシュリプレース要求をキャッシュリプレース要求を発行したＣＰＵと同一のＣＰＵバスに接続されたすべてのＣＰＵからのキャッシュリプレース要求に拡張する制御を行う
ことを特徴とするシステムコントローラ。
【請求項７】
マルチプロセッサシステムにおいて，キャッシュメモリを備える複数のＣＰＵを管理するシステムコントローラであって，
各ＣＰＵが保持する前記キャッシュメモリのタグのコピー情報を有するスヌープタグを，前記ＣＰＵごとに備えるとともに，
前記ＣＰＵからのリクエストに対する処理を行うリクエスト処理部を備え，
前記リクエスト処理部は，前記複数のＣＰＵの中のあるＣＰＵから前記キャッシュメモリのタグに登録されているあるアドレスの排他状態を共有状態に変更する要求があったときに，同一のＣＰＵバスに接続された他のＣＰＵに対応するスヌープタグに共有状態の同じアドレスが登録されているかを調べ，共有状態の同じアドレスが既に登録されているスヌープタグが存在する場合に，前記アドレスがスヌープタグのいずれか１つにのみ共有状態で登録されるようにスヌープタグの更新処理を行う
ことを特徴とするシステムコントローラ。
【請求項８】
マルチプロセッサシステムにおいて，キャッシュメモリを備える複数のＣＰＵを管理するシステムコントローラであって，
各ＣＰＵが保持する前記キャッシュメモリのタグのコピー情報を有するスヌープタグを，前記ＣＰＵごとに備えるとともに，
前記ＣＰＵからのリクエストに対する処理を行うリクエスト処理部を備え，
前記リクエスト処理部は，前記複数のＣＰＵの中のあるＣＰＵから共有状態でのリード要求が発行されたときに，同一のＣＰＵバスに接続されたＣＰＵ同士で前記キャッシュメモリのタグに同じアドレスが既に登録されている場合には，少なくとも，リード要求を発行したＣＰＵに対応するスヌープタグに前記リード要求されたアドレスを登録しない制御を行うスヌープタグの更新処理を行うか，または，そのリード要求されたアドレスが登録されているスヌープタグの前記アドレスのエントリを無効状態にし，リード要求を発行したＣＰＵに対応するスヌープタグに前記アドレスを登録する制御を行うスヌープタグの更新処理を行うか，または，前記リード要求されたアドレスが登録されているスヌープタグと前記リード要求を発行したＣＰＵに対応するスヌープタグの両方に共有状態で同じアドレスを登録するスヌープタグの更新処理を行うかを，前記リクエスト処理部に与えられるモード信号によって選択する
ことを特徴とするシステムコントローラ。
【請求項９】
マルチプロセッサシステムにおいて，キャッシュメモリを備える複数のＣＰＵを管理し，各ＣＰＵが保持する前記キャッシュメモリのタグのコピー情報を有するスヌープタグをＣＰＵごとに備えたシステムコントローラによるスヌープタグ更新方法であって，
前記複数のＣＰＵの中のあるＣＰＵから共有状態でのリード要求が発行されたときに，同一のＣＰＵバスに接続されたＣＰＵ同士で前記キャッシュメモリのタグに同じアドレスが登録される場合には，その同じアドレスが登録されるＣＰＵに対応するスヌープタグのいずれか１つにのみアドレスが共有状態で登録されるようにスヌープタグの更新処理を行う
ことを特徴とするスヌープタグ更新方法。
【請求項１０】
それぞれがキャッシュメモリを備える複数のＣＰＵと，前記複数のＣＰＵを管理するシステムコントローラとを有する情報処理装置において，
前記システムコントローラが，
各ＣＰＵが保持する前記キャッシュメモリのタグのコピー情報を有する前記複数のＣＰＵのそれぞれに対応して備えられたスヌープタグと，
前記ＣＰＵからのリクエストに対する処理を行うリクエスト処理部とを備え，
前記リクエスト処理部は，あるＣＰＵからキャッシュメモリのタグへの共有状態でのアドレスの登録が必要な要求が発行されたときに，同一のＣＰＵバスに接続されたＣＰＵ同士で前記キャッシュメモリのタグに同じアドレスが登録される場合には，前記同一ＣＰＵバスに接続されたＣＰＵに対応するスヌープタグのいずれか１つのみに前記アドレスが共有状態で登録されるようにスヌープタグの更新処理を行う
ことを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，マルチプロセッサシステムにおいて，各ＣＰＵのキャッシュタグのコピー情報を持つスヌープタグを制御することにより，キャッシュメモリのコヒーレンシ保証を行うシステムコントローラ，スヌープタグ更新方法および情報処理装置に関するものである。
【背景技術】
【０００２】
近年，情報処理装置が各分野で広く利用されるようになってきたことに伴い，マルチプロセッサ構成のチップセットの処理能力の高さが，以前にも増して求められるようになってきている。
【０００３】
図２３は，マルチプロセッサシステムの例を説明する図である。図２３のマルチプロセッサシステムにおいて，システムコントローラ５１０には，ＣＰＵ５２０ａ，５２０ｂがＣＰＵバス５３０ａにより接続され，ＣＰＵ５２０ｃ，５２０ｄがＣＰＵバス５３０ｃにより接続されている。ＣＰＵ５２０（ａ〜ｄ）は，それぞれキャッシュメモリ５２１（ａ〜ｄ）とキャッシュタグ５２２（ａ〜ｄ）とを備える。また，システムコントローラ５１０は，各ＣＰＵ５２０（ａ〜ｄ）のキャッシュタグ５２２（ａ〜ｄ）に対応するスヌープタグ５１１（ａ〜ｄ）を備える。
【０００４】
キャッシュタグ５２２には，キャッシュメモリ５２１に格納されたデータの状態とアドレスとが記録される。スヌープタグ５１１には，対応するキャッシュタグ５２２のコピー情報が記録される。
【０００５】
図２４は，従来のキャッシュタグ／スヌープタグの例を示す図である。図２４には，図２３において同一ＣＰＵバス５３０ａに接続されたＣＰＵ５２０ａ，ＣＰＵ５２０ｂと，システムコントローラ５１０との関係が示されている。ＣＰＵ５２０ａのキャッシュタグ５２２ａ，ＣＰＵ５２０ｂのキャッシュタグ５２２ｂ，システムコントローラ５１０のスヌープタグ５１１ａ，スヌープタグ５１１ｂには，ある同一インデックスのエントリが示されている。なお，キャッシュメモリ５２１は４Ｗａｙセットアソシアティブ方式で制御されているものとする。
【０００６】
システムコントローラ５１０のスヌープタグ５１１ａは，対応するキャッシュタグ５２２ａのコピー情報を保持する。また，システムコントローラ５１０のスヌープタグ５１１ｂは，対応するキャッシュタグ５２２ｂのコピー情報を保持する。図２４では，キャッシュタグ５２２で登録されたものは，対応するスヌープタグ５１１で有効なエントリを持っている。
【０００７】
図２４のキャッシュタグ５２２，スヌープタグ５１１には，エントリごとに状態，アドレスが記載されている。ここでは，キャッシュコヒーレンシにＭＥＳＩプロトコルが用いられるものとする。ＭＥＳＩプロトコルは，キャッシュコヒーレンシプロトコルの一種であり，キャッシュの各ラインを，Ｍ（更新状態：Ｍｏｄｅｉｆｉｅｄ），Ｅ（排他状態：Ｅｘｃｌｕｓｉｖｅ），Ｓ（共有状態：Ｓｈａｒｅｄ），Ｉ（無効状態：Ｉｎｖａｌｉｄ）に分けて制御する。
【０００８】
図２５は，Ｅｖｉｃｔｉｏｎを説明する図である。Ｅｖｉｃｔｉｏｎとは，システムコントローラ５１０側からＣＰＵ５２０に対してキャッシュの排出処理の指示を行うことである。以下，図２５の例を用いてＥｖｉｃｔｉｏｎを説明する。
【０００９】
まず，段階０に示すように，キャッシュタグ５２２とスヌープタグ５１１のある同一インデックスが，いずれも空であるものとする。このとき，ＣＰＵ５２０がＡ番地をリードすると，段階１に示すように，キャッシュタグ５２２，スヌープタグ５１１には，それぞれＡ番地が登録される。さらにＣＰＵ５２０がＢ番地，Ｃ番地，Ｄ番地と同一インデックスのリードを続けていくと，段階２に示すように，Ｗａｙフルとなる。
【００１０】
このようなＷａｙフルの状態において，ＣＰＵ５２０がさらに同一インデックスのＥ番地をリードしたい場合には，まずキャッシュタグ５２２内のいずれかのデータを消さなくてはならない。ここではＡ番地を消すものとする。ＣＰＵ５２０がキャッシュリプレース要求をサポートしておらず，かつＡ番地の状態がＭ（更新状態）でない場合には，ＣＰＵ５２０内でＡ番地のサイレントドロップが発生する。段階３に示すように，キャッシュタグ５２２のＡ番地が削除される。なお，サイレントドロップとは，他に通知することなくデータを捨てることをいう。
【００１１】
同様に，ＣＰＵ５２０からのＥ番地のリードを受けたシステムコントローラ５１０でもＥ番地を登録することになるので，スヌープタグ５１１からいずれか１つのデータを消さなくてはならない。ここではＢ番地を消すものとする。このとき，“キャッシュタグ５２２にあるものはスヌープタグ５１１になくてはならない”というインクルージョンルールがあるため，自分が消したものをＣＰＵ５２０にも消させなくてはならないので，段階４に示すように，ＣＰＵ５２０に対して吐き出し要求を発行する必要がある。この吐き出し要求をＥｖｉｃｔｉｏｎと呼ぶ。最終的に，キャッシュタグ５２２とスヌープタグ５１１のいずれにも空きができるので，段階５に示すように，それぞれにＥ番地を登録することができる。
【００１２】
なお，マルチプロセッサシステムにおいてキャッシュメモリのコヒーレンシ保証を行うシステムコントローラに関する技術が記載された先行技術文献としては，例えば特許文献１などがある。特許文献１には，バススヌープ方式でキャッシュメモリのコヒーレンシを保証するキャッシュメモリ制御装置（上記のシステムコントローラ５１０に相当）に関する技術が記載されている。ただし，特許文献１に記載された技術では，後述の課題を解決することはできない。
【特許文献１】特開２００１−４３２０４号公報
【発明の開示】
【発明が解決しようとする課題】
【００１３】
ＣＰＵ５２０からのキャッシュリプレース要求がないシステムでは，システムコントローラ５１０のスヌープタグ５１１に，ＣＰＵ５２０がすでにリプレースした（Ｉドロップした）エントリを有している場合が多い（図２５の段階３参照）。この特性により，ＣＰＵ５２０がまだＷａｙフルではないのに，システムコントローラ５１０は，ＣＰＵ５２０がＷａｙフルであると勘違いし，Ｅｖｉｃｔｉｏｎを発行してしまうことがある（図２５の段階４参照）。
【００１４】
これにより，システムコントローラ５１０がＣＰＵ５２０に対して必要以上のデータ吐き出し要求を発行してしまうこととなり，もしデータ吐き出し要求の対象となったエントリがＣＰＵ５２０でまだ必要とされているエントリであるときには，その後に必要になった時点でＣＰＵ５２０がリード要求を発行することにより，そのエントリを再獲得しなければならなくなる。このことは，システムの性能低下の大きな要因となっている。
【００１５】
本発明は，上記の問題点の解決を図り，システムコントローラによるＥｖｉｃｔｉｏｎの数を減らし，システムの性能低下を防止する技術を提供することを目的とする。
【課題を解決するための手段】
【００１６】
本発明は，上記の課題を解決するため，システムコントローラにおいて，同一のＣＰＵバスに接続された各ＣＰＵに対応するスヌープタグを一元的に管理し，同一のＣＰＵバスに接続されたＣＰＵ同士でキャッシュタグに同じアドレスが共有状態で登録される場合に，その同じアドレスが登録されるＣＰＵに対応するスヌープタグのいずれか１つにのみアドレスが共有状態で登録されることを特徴とする。すなわち，システムコントローラは，同一ＣＰＵバスに接続されているＣＰＵのスヌープタグには，共有状態（Ｓ状態）の同一アドレスがいずれか１つにしか登録されないように制御する手段を持つ。
【００１７】
具体的には，本発明は，マルチプロセッサシステムにおいて，キャッシュメモリを備える複数のＣＰＵを管理するシステムコントローラであって，各ＣＰＵが保持するキャッシュタグのコピー情報を有するスヌープタグを，ＣＰＵごとに備え，同一のＣＰＵバスに接続されたＣＰＵ同士で同じアドレスが登録される場合には，その同じアドレスが登録されるＣＰＵに対応するスヌープタグのいずれか１つにのみアドレスが共有状態で登録されることを特徴とする。これにより，システムコントローラ内のスヌープタグの使用エントリ数を減らすことが可能となる。
【００１８】
また，本発明は，上記のシステムコントローラであって，ＣＰＵからのリクエストに対するＣＰＵを行うリクエスト処理部を備え，リクエスト処理部は，あるＣＰＵからリード要求が発行されたときに，リード要求を発行したＣＰＵと同一のＣＰＵバスに接続された他のＣＰＵに対応するスヌープタグにリード要求されたアドレスが共有状態で登録されている場合には，リード要求を発行したＣＰＵに対応するスヌープタグに前記アドレスを登録しないというスヌープタグの更新処理を実行することを特徴とする。これにより，簡単な回路でスヌープタグ更新時のＥｖｉｃｔｉｏｎの数を減らし，システムの性能を向上させることが可能となる。
【００１９】
また，本発明は，上記のシステムコントローラであって，リクエスト処理部は，あるＣＰＵからリード要求が発行されたときに，リード要求を発行したＣＰＵと同一のＣＰＵバスに接続された他のＣＰＵに対応するスヌープタグにリード要求されたアドレスが共有状態で登録されている場合には，そのリード要求されたアドレスが登録されたスヌープタグの前記アドレスのエントリを無効状態にし，リード要求を発行したＣＰＵに対応するスヌープタグに前記アドレスを登録するというスヌープタグの更新処理を実行することを特徴とする。これにより，ＣＰＵのキャッシュタグですでにＳ（共有状態）からＩ（無効状態）にドロップされたエントリをスヌープタグに持ち続ける確率を下げ，システムの性能を向上させることが可能となる。
【００２０】
また，本発明は，上記のシステムコントローラであって，リクエスト処理部は，あるＣＰＵからリード要求が発行されたときに，リード要求を発行したＣＰＵと同一のＣＰＵバスに接続された他のＣＰＵに対応するスヌープタグにリード要求されたアドレスが共有状態で登録されている場合には，そのリード要求されたアドレスが登録されたスヌープタグとリード要求を発行したＣＰＵに対応するスヌープタグの空きエントリ数（空きＷａｙ数）または使用エントリ数（使用Ｗａｙ数）を比較し，その比較結果によって，リード要求を発行したＣＰＵに対応するスヌープタグに前記アドレスを登録しないというスヌープタグの更新処理を実行するのか，前記アドレスが登録されているスヌープタグの前記アドレスのエントリを無効状態にし，リード要求を発行したＣＰＵに対応するスヌープタグに前記アドレスを登録するというスヌープタグの更新処理を実行するのかを決定し，決定されたスヌープタグの更新処理を実行することを特徴とする。
【００２１】
これにより，発生する無駄なＥｖｉｃｔｉｏｎを減らすことと，ＣＰＵのキャッシュタグですでにＳ（共有状態）からＩ（無効状態）にドロップされたエントリをスヌープタグに持ち続ける確率を下げることとのバランスをとりつつ，システムの性能を向上させることが可能となる。
【００２２】
また，本発明は，上記のシステムコントローラであって，リクエスト処理部は，あるＣＰＵからキャッシュリプレース要求が発行されたときに，キャッシュリプレース要求を発行したＣＰＵと同一のＣＰＵバスに接続された他のＣＰＵの共有状態をスヌープし，その結果キャッシュリプレース要求を発行したＣＰＵ以外のＣＰＵにキャッシュリプレース要求されたアドレスが共有状態で登録されている場合には，発行されたキャッシュリプレース要求を無効化するというキャッシュリプレース要求への対応処理を実行することを特徴とする。これにより，キャッシュリプレース要求によって発生する可能性があるスヌープタグのコヒーレンシエラーを防ぐことが可能となる。
【００２３】
また，本発明は，上記のシステムコントローラであって，リクエスト処理部は，あるＣＰＵからキャッシュリプレース要求が発行されたときに，キャッシュリプレース要求を発行したＣＰＵと同一のＣＰＵバスに接続された他のＣＰＵの共有状態をスヌープし，その結果キャッシュリプレース要求を発行したＣＰＵ以外のＣＰＵにキャッシュリプレース要求されたアドレスが登録されていない場合には，発行されたキャッシュリプレース要求をキャッシュリプレース要求を発行したＣＰＵと同一のＣＰＵバスに接続されたすべてのＣＰＵからのキャッシュリプレース要求に拡張するというキャッシュリプレース要求への対応処理を実行することを特徴とする。これにより，キャッシュリプレース要求によってＣＰＵがすでにＩ（無効状態）にドロップしたアドレスのエントリを，スヌープタグが持ち続けることをなくすことが可能となる。
【００２４】
また，本発明は，上記のシステムコントローラであって，リクエスト処理部は，あるＣＰＵからリード要求が発行されたときだけでなく，同一ＣＰＵバス内で，ＣＰＵのキャッシュタグのエントリの状態がＥ（排他状態）からＳ（共有状態）にドロップし，同一ＣＰＵ内で１つのＥ登録から２つのＳ登録になる場合にも，対応するスヌープタグでは，Ｓ登録を１つとするスヌープタグの更新処理を実行することを特徴とする。これにより，エントリの状態をＥ（排他状態）からＳ（共有状態）にドロップするケースにも，上記のスヌープタグの更新処理を適用することが可能となる。
【００２５】
また，本発明は，上記のシステムコントローラであって，リクエスト処理部は，ＣＰＵからリード要求が発行されたときに実行するスヌープタグの更新処理方法を，モード信号によって変更することを特徴とする。これにより，スヌープタグの更新処理の論理を自在に変更できるので，実マシンによりスヌープタグの更新方法の違いによる性能変化の調査が可能となり，また，最適なスヌープタグの更新処理方法をマルチプロセッサシステムごとに選択することが可能となる。
【００２６】
リクエスト処理部に与えられるモード信号によって選択することができるスヌープタグの更新処理方法としては，例えば，あるＣＰＵから共有状態でのリード要求が発行されたときに，同一のＣＰＵバスに接続されたＣＰＵ同士でキャッシュメモリのタグに同じアドレスが既に登録されている場合には，少なくとも，リード要求を発行したＣＰＵに対応するスヌープタグに前記リード要求されたアドレスを登録しない制御を行うスヌープタグの更新処理方法，または，そのリード要求されたアドレスが登録されているスヌープタグの前記アドレスのエントリを無効状態にし，リード要求を発行したＣＰＵに対応するスヌープタグに前記アドレスを登録する制御を行うスヌープタグの更新処理方法，または，従来技術と同様に複数のスヌープタグに，共有状態で同じアドレスを登録するスヌープタグの更新処理方法などがある。
【発明の効果】
【００２７】
本発明により，システムコントローラ内のスヌープタグの空きエントリが増えることになり，スヌープタグの使用を削減することができるようになるため，Ｅｖｉｃｔｉｏｎの発生を減少させることが可能となる。Ｅｖｉｃｔｉｏｎが減少すると，ＣＰＵのキャッシュメモリから必要なデータを追い出してしまうケースが減少するため，システムの性能が向上する。
【発明を実施するための最良の形態】
【００２８】
以下，本発明の実施の形態について，図を用いて説明する。
【００２９】
図１は，本発明の実施の形態によるマルチプロセッサシステムの構成例を示す図である。図１に示すマルチプロセッサシステムは，４つのシステムボード１００（ａ〜ｄ）と，アドレスクロスバボード２００から構成されている。各システムボード１００（ａ〜ｄ）とアドレスクロスバボード２００とは，ローカルバス３００（ａ〜ｄ），グローバルバス３０１，ローカル通知パス３０２（ａ〜ｄ），グローバル通知パス３０３等で接続される。
【００３０】
システムボード１００ａは，システムコントローラ１１０と，４つのＣＰＵ１２０（ａ〜ｄ）とを備える。ＣＰＵ１２０ａとＣＰＵ１２０ｂはＣＰＵバス１３０ａで，またＣＰＵ１２０ｃとＣＰＵ１２０ｄはＣＰＵバス１３０ｃで，システムコントローラ１１０に接続される。他のシステムボード１００（ｂ〜ｄ）も，システムボード１００ａと同様の構成となる。
【００３１】
各ＣＰＵ１２０（ａ〜ｄ）は，それぞれキャッシュメモリ１２１（ａ〜ｄ）と，キャッシュタグ１２２（ａ〜ｄ）とを備える。本実施の形態では，キャッシュメモリ１２１は，４Ｗａｙセットアソシアティブ方式で制御されているものとする。
【００３２】
システムコントローラ１１０は，スヌープタグ１１１（ａ〜ｄ），ＣＰＵ発行リクエストキュー１１２（ａ，ｃ），ローカルアービタ１１３，リクエスト処理部１１４，リクエスト実行部１１５を備える。
【００３３】
スヌープタグ１１１（ａ〜ｄ）は，それぞれキャッシュタグ１２２（ａ〜ｄ）に対応する。ＣＰＵ発行リクエストキュー１１２は，ＣＰＵ１２０が発行するリクエストをＣＰＵバス１３０ごとに保持する。ここでは，ＣＰＵ１２０（ａ，ｂ）が発行するリクエストをＣＰＵ発行リクエストキュー１１２ａが保持し，ＣＰＵ１２０（ｃ，ｄ）が発行するリクエストをＣＰＵ発行リクエストキュー１１２ｃが保持する。ローカルアービタ１１３は，ＣＰＵ発行リクエストキュー１１２に保持されたリクエストを，ローカルバス３００ａに出力する。
【００３４】
リクエスト処理部１１４は，グローバルバス３０１から送られてきたリクエストに対する処理を行う。リクエスト処理部１１４は，資源管理部１１６，リクエスト実行起動部１１７を備える。資源管理部１１６は，リクエストを処理するための資源等のチェックを行う。リクエスト実行起動部１１７は，リクエスト実行部１１５の起動や，スヌープタグ１１１の更新を行う。
【００３５】
アドレスクロスバボード２００は，グローバルアービタ２１０，実行可否判定回路２２０を備える。グローバルアービタ２１０は，ローカルバス３００（ａ〜ｄ）から入力されたリクエストを，グローバルバス３０１を介して，すべてのシステムボード１００（ａ〜ｄ）に出力する。実行可否判定回路２２０は，ローカル通知パス３０２（ａ〜ｄ）から入力された通知をもとにリクエストの実行の可否判定を行い，その結果とリクエストの実行に必要な情報とをグローバル通知パス３０３を介して各システムボード１００（ａ〜ｄ）に通知する。
【００３６】
ここで，ＣＰＵ１２０ａがリード要求を行う場合を例に，図１に示すシステムの動作を説明する。ここでは，ＣＰＵ１２０ａが１０００番地のリードを行うものとする。
【００３７】
ＣＰＵ１２０ａは，自身のキャッシュメモリ１２１ａに１０００番地のデータが存在するかを確認するために，まずキャッシュタグ１２２ａの検索を行う。検索の結果，自身のキャッシュメモリ１２１ａに有効なデータがないと判断すると，ＣＰＵ１２０ａは，ＣＰＵバス１３０ａにリード要求のリクエストを発行する。
【００３８】
ＣＰＵ１２０ａから発行されたリクエストは，ＣＰＵ発行リクエストキュー１１２ａ，ローカルアービタ１１３，ローカルバス３００ａを介し，グローバルアービタ２１０に入力される。グローバルアービタ２１０に入力されたリクエストは，グローバルバス３０１を介し，すべてのシステムボード１００（ａ〜ｄ）に同時に通知される。
【００３９】
システムボード１００ａでは，グローバルバス３０１からリクエスト処理部１１４にリクエストが入力される。リクエスト処理部１１４は，各スヌープタグ１１１を読み込み，リクエストを処理するための資源等があるかのチェックを資源管理部１１６によって行う。それらの結果は，ローカル通知パス３０２ａを介して実行可否判定回路２２０に送られる。
【００４０】
実行可否判定回路２２０は，すべてのローカル通知パス３０２（ａ〜ｄ）からの通知をもとにリクエスト実行の可否判定を行い，その結果とリクエストの実行に必要な情報とを，グローバル通知パス３０３を介して，リクエスト実行起動部１１７に通知する。リクエスト実行起動部１１７は，リクエスト実行の可否判定の結果とリクエストの実行に必要な情報とをもとに，スヌープタグ１１１の更新や，リクエスト実行部１１５の起動を行う。
【００４１】
例えば，資源確保ができ，スヌープタグ１１１の検索結果がすべてＩｎｖａｌｉｄであった場合，リクエスト実行起動部１１７は，スヌープタグ１１１ａに１０００番地を登録する。なお，登録される状態は，発行リクエストによって決定される。同時に，リクエスト実行部１１５は，メモリの１０００番地のリードを行い，得られたデータをＣＰＵ１２０ａに送る。ＣＰＵ１２０ａは，キャッシュメモリ１２１ａおよびキャッシュタグ１２２ａを更新する。
【００４２】
また，例えば，資源確保ができ，スヌープタグ１１１の検索結果，１０００番地がスヌープタグ１１１ｃにＭ（更新状態）で登録されていた場合，リクエスト実行起動部１１７は，スヌープタグ１１１ａに１０００番地を登録する。なお，登録される状態は，発行リクエストによって決定される。また，スヌープタグ１１１ｃの１０００番地の状態をＳ（共有状態）またはＩ（無効状態）に変更する。このときに変更される状態は発行リクエストによって決定される。同時に，リクエスト実行部１１５は，ＣＰＵ１２０ｃに１０００番地のＭデータを送出する指示を出し，出力されたデータをＣＰＵ１２０ａに送る。ＣＰＵ１２０ａはキャッシュメモリ１２１ａおよびキャッシュタグ１２２ａを更新し，ＣＰＵ１２０ｃはキャッシュタグ１２２ｃを更新する。
【００４３】
図２は，本実施の形態のキャッシュタグ／スヌープタグの例を示す図である。図２には，図１において同一ＣＰＵバス１３０ａに接続されたＣＰＵ１２０ａ，ＣＰＵ１２０ｂと，システムコントローラ１１０との関係が示されている。ＣＰＵ１２０ａのキャッシュタグ１２２ａ，ＣＰＵ１２０ｂのキャッシュタグ１２２ｂ，システムコントローラ１１０のスヌープタグ１１１ａ，スヌープタグ１１１ｂには，ある同一インデックスのエントリが示されている。
【００４４】
図２のキャッシュタグ１２２，スヌープタグ１１１には，エントリごとに状態，アドレスが記載されている。ここでは，キャッシュコヒーレンシにＭＥＳＩプロトコルが用いられるものとする。ＭＥＳＩプロトコルは，キャッシュコヒーレンシプロトコルの一種であり，キャッシュの各ラインを，Ｍ（更新状態：Ｍｏｄｅｉｆｉｅｄ），Ｅ（排他状態：Ｅｘｃｌｕｓｉｖｅ），Ｓ（共有状態：Ｓｈａｒｅｄ），Ｉ（無効状態：Ｉｎｖａｌｉｄ）に分けて制御する。
【００４５】
スヌープタグ１１１には，原則として，対応するキャッシュタグ１２２のコピー情報が登録される。ただし，本実施の形態では，同一ＣＰＵバス１３０で接続される複数のＣＰＵ１２０のキャッシュタグ１２２にＳ（共有状態）で共通するアドレスが登録されている場合には，対応する各スヌープタグ１１１のうち，いずれか１つにのみ，その共通アドレスが登録される。
【００４６】
図２において，１０００番地と２０００番地は，キャッシュタグ１２２ａとキャッシュタグ１２２ｂとの双方にＳ（共有状態）で登録されている。ＣＰＵ１２０ａとＣＰＵ１２０ｂとが同一ＣＰＵバス１３０ａに接続されていることから，システムコントローラ１１０では，共通アドレスがスヌープタグ１１１ａかスヌープタグ１１１ｂのいずれか一方にしか登録されない。図２では，共通アドレスである１０００番地と２０００番地がいずれもＳ（共有状態）でスヌープタグ１１１ａのみに登録されており，スヌープタグ１１１ｂには登録されていない。
【００４７】
これによりスヌープタグ１１１ｂには，１０００番地および２０００番地のＳの登録情報が存在しないことになるが，他のＣＰＵからの例えば１０００番地に対するリクエストによってスヌープタグ１１１の参照が必要になった場合，スヌープタグ１１１ａから１０００番地のＳの登録情報が読み出されるので，スヌープタグ１１１ｂの１０００番地にＳの登録情報がなくても動作に影響はない。また，１０００番地に対するキャッシュメモリのパージ要求が発生した場合，ＣＰＵ１２０ａ，ＣＰＵ１２０ｂは同一のＣＰＵバス１３０ａに接続されていることから，ＣＰＵ１２０ａに対するパージ要求によって，同時にＣＰＵ１２０ｂにおいてもパージ要求の処理が行われることになる。
【００４８】
図３は，本実施の形態のリクエスト処理部の構成例を示す図である。リクエスト処理部１１４は，図１にも示すように，資源管理部１１６，リクエスト実行起動部１１７を備える。また，リクエスト実行起動部１１７は，スヌープタグ更新処理部１１８，キャッシュリプレース要求対応処理部１１９を備える。
【００４９】
スヌープタグ更新処理部１１８は，スヌープタグ１１１の更新を行う。ただし，図２の例でも説明したように，本実施の形態では同一のＣＰＵバス１３０に接続された各ＣＰＵ１２０に対応する各スヌープタグ１１１をまとめて一元的に管理するため，スヌープタグ１１１の更新もそれに留意したものとなる。すなわち，スヌープタグ更新処理部１１８は，同一のＣＰＵバス１３０に接続された各ＣＰＵ１２０に対応する各スヌープタグ１１１に同じアドレスが登録されないように留意し，スヌープタグ１１１の更新を行う。本実施の形態のスヌープタグ更新のパターンとしては，様々なものが考えられる。詳しくは後述する。
【００５０】
また，スヌープタグ更新処理部１１８が，従来の更新パターンを含む複数のスヌープタグ更新のパターンをモード信号で切り替えて，実行するようにしてもよい。
【００５１】
キャッシュリプレース要求対応処理部１１９は，キャッシュリプレース要求が発行されたときに発生し得る問題に対処するために，キャッシュリプレース要求を無効化する処理や，キャッシュリプレース要求を拡張する処理を行う。本実施の形態におけるキャッシュリプレース要求対応処理部１１９が行う詳しい説明は，後述する。
【００５２】
スヌープタグ更新処理部１１８によるスヌープタグ１１１の更新について説明する。ここでは，図２のタグの状態を例として，リード要求を発行したＣＰＵ１２０ａと同一のＣＰＵバス１３０ａに接続されたＣＰＵ１２０ｂに対応するスヌープタグ１１１ｂに，リード要求されたアドレスがＳ（共有状態）で登録されている場合のスヌープタグ更新を，３パターン紹介する。
【００５３】
スヌープタグ更新のパターン１では，あるＣＰＵ１２０ａがリード要求を発行したときに，そのリード要求を発行したＣＰＵ１２０ａと同一のＣＰＵバス１３０ａに接続されたＣＰＵ１２０ｂに対応するスヌープタグ１１１ｂにリード要求されたアドレスがＳ（共有状態）で登録されている場合，リード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａの更新を行わない。すなわち，リード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａには，リード要求されたアドレスを登録しない。
【００５４】
例えば，図２において，ＣＰＵ１２０ａが５０００番地のリード要求を発行した場合，同一ＣＰＵバス１３０ａに接続されたＣＰＵ１２０ｂに対応するスヌープタグ１１１ｂに５０００番地がＳ（共有状態）で登録されているので，リード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａは更新されない。
【００５５】
図４は，スヌープタグ更新のパターン１によるスヌープタグ更新処理フローチャート（１）である。ＣＰＵ１２０ａからリード要求が発行されると（ステップＳ１０），リード要求を発行したＣＰＵ１２０ａと同一のＣＰＵバス１３０ａに接続された他のＣＰＵ１２０ｂに対応するスヌープタグ１１１ｂの検索を行う（ステップＳ１１）。検索の結果，リード要求されたアドレスがＳ（共有状態）で登録されていなければ（ステップＳ１２），リード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａに，リード要求されたアドレスを登録する（ステップＳ１３）。リード要求されたアドレスがＳ（共有状態）で登録されていれば（ステップＳ１２），リード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａの更新を行わない。
【００５６】
このように，スヌープタグ更新のパターン１では，リード要求されたアドレスがスヌープタグ１１１ｂにＳ（共有状態）で登録されているか否かを判断するだけなので，簡単な回路で実現することが可能である。また，スヌープタグ更新のパターン１では，リード要求されたアドレスがスヌープタグ１１１ｂにＳ（共有状態）で登録されていればリード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａの更新を行わないので，スヌープタグ更新時のＥｖｉｃｔｉｏｎの数を減らし，システムの性能を向上させることが可能となる。
【００５７】
スヌープタグ更新のパターン２では，あるＣＰＵ１２０ａがリード要求を発行したときに，そのリード要求を発行したＣＰＵ１２０ａと同一のＣＰＵバス１３０ａに接続されたＣＰＵ１２０ｂに対応するスヌープタグ１１１ｂにリード要求されたアドレスがＳ（共有状態）で登録されている場合，そのスヌープタグ１１１ｂからリード要求されたアドレスを消去してＩ（無効状態）にし，リード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａにリード要求されたアドレスを登録しなおす。
【００５８】
例えば，図２において，ＣＰＵ１２０ａが５０００番地のリード要求を発行した場合には，同一ＣＰＵバス１３０ａに接続されたＣＰＵ１２０ｂに対応するスヌープタグ１１１ｂに５０００番地がＳ（共有状態）で登録されているので，その登録を消去し，リード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａに５０００番地を登録する。このとき，スヌープタグ１１１ａに空きエントリがなければ，Ｅｖｉｃｔｉｏｎ機能を用いる。
【００５９】
図５は，スヌープタグ更新のパターン２によるスヌープタグ更新処理フローチャート（１）である。ＣＰＵ１２０ａからリード要求が発行されると（ステップＳ２０），リード要求を発行したＣＰＵ１２０ａと同一のＣＰＵバス１３０ａに接続された他のＣＰＵ１２０ｂに対応するスヌープタグ１１１ｂの検索を行う（ステップＳ２１）。検索の結果，リード要求されたアドレスがＳ（共有状態）で登録されていない場合には（ステップＳ２２），リード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａに，リード要求されたアドレスを登録する（ステップＳ２４）。
【００６０】
検索の結果，リード要求されたアドレスがＳ（共有状態）で登録されている場合には（ステップＳ２２），そのスヌープタグ１１１ｂに登録されたアドレスをＩ（無効状態）にドロップし（ステップＳ２３），リード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａに，リード要求されたアドレスを登録する（ステップＳ２４）。
【００６１】
このように，スヌープタグ更新のパターン２では，最新のリード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａにリード要求されたアドレスを登録し，すでに登録されていたスヌープタグ１１１ｂの該当アドレスをＩ（無効状態）にドロップするので，ＣＰＵ１２０のキャッシュタグ１２２ですでにＳ（共有状態）からＩ（無効状態）にドロップされたエントリをスヌープタグ１１１に持ち続ける確率を下げ，システムの性能を向上させることが可能となる。
【００６２】
スヌープタグ更新のパターン３では，あるＣＰＵ１２０ａがリード要求を発行したときに，そのリード要求を発行したＣＰＵ１２０ａと同一のＣＰＵバス１３０ａに接続されたＣＰＵ１２０ｂに対応するスヌープタグ１１１ｂにリード要求されたアドレスがＳ（共有状態）で登録されている場合，リード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａの空きエントリ数（または，使用エントリ数）と，スヌープタグ１１１ｂの空きエントリ数（または，使用エントリ数）とをもとに，リード要求されたアドレスを登録するスヌープタグ１１１を決定する。例えば，空きエントリ数の数が多いほうのスヌープタグ１１１をリード要求されたアドレスを登録するスヌープタグ１１１として決定する。
【００６３】
例えば，図２において，ＣＰＵ１２０ａが５０００番地のリード要求を発行した場合には，同一ＣＰＵバス１３０ａに接続されたＣＰＵ１２０ｂに対応するスヌープタグ１１１ｂに５０００番地がＳ（共有状態）で登録されているので，リード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａとスヌープタグ１１１ｂの空きエントリ数を比較する。
【００６４】
ここでは，“スヌープタグ１１１ａの空きエントリ数がスヌープタグ１１１ｂの空きエントリ数（ただし，５０００番地のエントリを空きエントリと見なす）以上である場合にはリード要求されたアドレスをスヌープタグ１１１ａに登録し，スヌープタグ１１１ａの空きエントリ数がスヌープタグ１１１ｂの空きエントリ数未満である場合にはリード要求されたアドレスをスヌープタグ１１１ｂに登録する”という条件で，アドレスを登録するスヌープタグ１１１を決定するものとする。
【００６５】
図２に示すように，スヌープタグ１１１ａの空きエントリ数は０であり，スヌープタグ１１１ｂの空きエントリ数は３（５０００番地のエントリを含む）である。スヌープタグ１１１ｂの空きエントリ数の方が多いので，スヌープタグ１１１ａの更新を行わない。すなわち，リード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａには，リード要求されたアドレスを登録しない。
【００６６】
仮に，スヌープタグ１１１ａの空きエントリ数の方が多かった場合には，スヌープタグ１１１ｂの５０００番地の登録をＩ（無効状態）にドロップし，リード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａに５０００番地を登録する。
【００６７】
図６は，スヌープタグ更新のパターン３によるスヌープタグ更新処理フローチャート（１）である。ＣＰＵ１２０ａからリード要求が発行されると（ステップＳ３０），リード要求を発行したＣＰＵ１２０ａと同一のＣＰＵバス１３０ａに接続された他のＣＰＵ１２０ｂに対応するスヌープタグ１１１ｂの検索を行う（ステップＳ３１）。検索の結果，リード要求されたアドレスがＳ（共有状態）で登録されていなければ（ステップＳ３２），リード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａに，リード要求されたアドレスを登録する（ステップＳ３６）。
【００６８】
検索の結果，リード要求されたアドレスがＳ（共有状態）で登録されていれば（ステップＳ３２），リード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａの空きエントリ数と，スヌープタグ１１１ｂの空きエントリ数とを比較する（ステップＳ３３）。なお，ここでは，スヌープタグ１１１ｂのリード要求されたアドレスが登録されたエントリを，空きエントリと見なす。
【００６９】
スヌープタグ１１１ａの空きエントリ数がスヌープタグ１１１ｂの空きエントリ数以上である場合には（ステップＳ３４），スヌープタグ１１１ｂに登録されたアドレスをＩ（無効状態）にドロップする（ステップＳ３５）。リード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａに，リード要求されたアドレスを登録する（ステップＳ３６）。
【００７０】
スヌープタグ１１１ａの空きエントリ数がスヌープタグ１１１ｂの空きエントリ数未満である場合には（ステップＳ３４），リード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａの更新を行わない。
【００７１】
このように，スヌープタグ更新のパターン３では，スヌープタグ更新のパターン２とパターン１とをバランスをとって実行するので，発生する無駄なＥｖｉｃｔｉｏｎを減らすことと，ＣＰＵのキャッシュタグですでにＳ（共有状態）からＩ（無効状態）にドロップされたエントリをスヌープタグに持ち続ける確率を下げることとのバランスをとりつつ，システムの性能を向上させることが可能となる。
【００７２】
図７，図８は，スヌープタグ更新の例（１）を説明する図である。以下，図７，図８を用いて，リード要求を発行したＣＰＵ１２０ａと同一のＣＰＵバス１３０ａに接続されたＣＰＵ１２０ｂに対応するスヌープタグ１１１ｂに，リード要求されたアドレスがＳ（共有状態）で登録されている場合のスヌープタグ更新の例を説明する。図７，図８には，図１に示す構成におけるキャッシュタグ１２２ａ，キャッシュタグ１２２ｂ，スヌープタグ１１１ａ，スヌープタグ１１１ｂのある同一インデックスの更新の例が示されている。
【００７３】
図７（Ａ）は，従来のスヌープタグ更新の例（１）を説明する図である。図７（Ａ）において，段階０はある時点での各タグの状況を示す。各エントリの状態はすべてＳ（共有状態）となっている。
【００７４】
ここで，ＣＰＵ１２０ａが５０００番地をリードしたいものとする。ＣＰＵ１２０ａは，キャッシュタグ１２２ａがＷａｙフルの状態であるので，１０００番地をＩドロップし，すなわち１０００番地の状態をＩ（無効状態）にし，５０００番地のリード要求を発行する。各タグは，段階１の状況となる。
【００７５】
システムコントローラ１１０は，スヌープタグ１１１ａがＷａｙフルの状態であるので，２０００番地をＥｖｉｃｔｉｏｎし，５０００番地を登録する。ＣＰＵ１２０ａは，システムコントローラ１１０のＥｖｉｃｔｉｏｎにより，キャッシュタグ１２２ａの２０００番地をＩドロップする（２０００番地の状態をＩ（無効状態）にする）。各タグは，段階２の状況となる。
【００７６】
ＣＰＵ１２０ａは，リード結果の返信により，キャッシュタグ１２２ａにおいて，５０００番地の登録を行う。各タグは，段階３の状況となる。
【００７７】
図７（Ｂ）は，本実施の形態のスヌープタグ更新のパターン１によるスヌープタグ更新の例（１）を説明する図である。図７（Ｂ）において，段階０はある時点での各タグの状況を示す。各エントリの状態はすべてＳ（共有状態）となっている。
【００７８】
ここで，ＣＰＵ１２０ａが５０００番地をリードしたいものとする。ＣＰＵ１２０ａは，キャッシュタグ１２２ａがＷａｙフルの状態であるので，１０００番地をＩドロップし，５０００番地のリード要求を発行する。各タグは，段階１の状況となる。
【００７９】
システムコントローラ１１０は，ＣＰＵ１２０ａと同一ＣＰＵバス１３０ａで接続されたＣＰＵ１２０ｂのキャッシュタグ１２２ｂに対応するスヌープタグ１１１ｂに５０００番地が登録されているので，スヌープタグ１１１ａの更新を行わない。各タグは，段階２の状況（段階１の状況と変わらず）となる。
【００８０】
ＣＰＵ１２０ａは，リード結果の返信により，キャッシュタグ１２２ａにおいて，５０００番地の登録を行う。各タグは，段階３の状況となる。
【００８１】
図８（Ａ）は，本実施の形態のスヌープタグ更新のパターン２によるスヌープタグ更新の例（１）を説明する図である。図８（Ａ）において，段階０はある時点での各タグの状況を示す。各エントリの状態はすべてＳ（共有状態）となっている。
【００８２】
ここで，ＣＰＵ１２０ａが５０００番地をリードしたいものとする。ＣＰＵ１２０ａは，キャッシュタグ１２２ａがＷａｙフルの状態であるので，１０００番地をＩドロップし，５０００番地のリード要求を発行する。各タグは，段階１の状況となる。
【００８３】
システムコントローラ１１０は，ＣＰＵ１２０ａと同一ＣＰＵバス１３０ａで接続されたＣＰＵ１２０ｂのキャッシュタグ１２２ｂに対応するスヌープタグ１１１ｂに５０００番地が登録されているので，それを消去する。スヌープタグ１１１ａがＷａｙフルの状態であるので，２０００番地をＥｖｉｃｔｉｏｎし，５０００番地を登録する。ＣＰＵ１２０ａは，システムコントローラ１１０のＥｖｉｃｔｉｏｎにより，キャッシュタグ１２２ａの２０００番地をＩドロップする。各タグは，段階２の状況となる。
【００８４】
ＣＰＵ１２０ａは，リード結果の返信により，キャッシュタグ１２２ａにおいて，５０００番地の登録を行う。各タグは，段階３の状況となる。
【００８５】
図８（Ｂ）は，本実施の形態のスヌープタグ更新のパターン３によるスヌープタグ更新の例（１）を説明する図である。図８（Ｂ）において，段階０はある時点での各タグの状況を示す。各エントリの状態はすべてＳ（共有状態）となっている。
【００８６】
ここで，ＣＰＵ１２０ａが５０００番地をリードしたいものとする。ＣＰＵ１２０ａは，キャッシュタグ１２２ａがＷａｙフルの状態であるので，１０００番地をＩドロップし，５０００番地のリード要求を発行する。各タグは，段階１の状況となる。
【００８７】
システムコントローラ１１０は，同一ＣＰＵバス１３０ａに接続されたＣＰＵ１２０ａとＣＰＵ１２０ｂとにそれぞれ対応するスヌープタグ１１１ａと，スヌープタグ１１１ｂとの使用エントリ数を比較する。ここでは，５０００番地以外の使用エントリ数はスヌープタグ１１１ｂの方が少ないので，特にスヌープタグ１１１ａとスヌープタグ１１１ｂの更新を行わない。各タグは，段階２の状況（段階１の状況と変わらず）となる。
【００８８】
ＣＰＵ１２０ａは，リード結果の返信により，キャッシュタグ１２２ａにおいて，５０００番地の登録を行う。各タグは，段階３の状況となる。
【００８９】
図９，図１０は，スヌープタグ更新の例（２）を説明する図である。以下，図９，図１０を用いて，リード要求を発行したＣＰＵ１２０ａと同一のＣＰＵバス１３０ａに接続されたＣＰＵ１２０ｂに対応するスヌープタグ１１１ｂに，リード要求されたアドレスがＳ（共有状態）で登録されている場合のスヌープタグ更新の例を説明する。図９，図１０には，図１に示す構成におけるキャッシュタグ１２２ａ，キャッシュタグ１２２ｂ，スヌープタグ１１１ａ，スヌープタグ１１１ｂのある同一インデックスの更新の例が示されている。
【００９０】
図９（Ａ）は，従来のスヌープタグ更新の例（２）を説明する図である。図９（Ａ）において，段階０はある時点での各タグの状況を示す。各エントリの状態はすべてＳ（共有状態）となっている。
【００９１】
ここで，ＣＰＵ１２０ａが５０００番地をリードしたいものとする。ＣＰＵ１２０ａは，キャッシュタグ１２２ａがＷａｙフルの状態ではないので，ドロップなしに５０００番地のリード要求を発行する。各タグは，段階１の状況（段階０の状況と変わらず）となる。
【００９２】
システムコントローラ１１０は，スヌープタグ１１１ａの空きエントリに５０００番地を登録する。各タグは，段階２の状況となる。
【００９３】
ＣＰＵ１２０ａは，リード結果の返信により，キャッシュタグ１２２ａにおいて，５０００番地の登録を行う。各タグは，段階３の状況となる。
【００９４】
図９（Ｂ）は，本実施の形態のスヌープタグ更新のパターン１によるスヌープタグ更新の例（２）を説明する図である。図９（Ｂ）において，段階０はある時点での各タグの状況を示す。各エントリの状態はすべてＳ（共有状態）となっている。
【００９５】
ここで，ＣＰＵ１２０ａが５０００番地をリードしたいものとする。ＣＰＵ１２０ａは，キャッシュタグ１２２ａがＷａｙフルの状態ではないので，ドロップなしに５０００番地のリード要求を発行する。各タグは，段階１の状況（段階０の状況と変わらず）となる。
【００９６】
システムコントローラ１１０は，ＣＰＵ１２０ａと同一ＣＰＵバス１３０ａで接続されたＣＰＵ１２０ｂのキャッシュタグ１２２ｂに対応するスヌープタグ１１１ｂに５０００番地が登録されているので，スヌープタグ１１１ａの更新を行わない。各タグは，段階２の状況（段階１の状況と変わらず）となる。
【００９７】
ＣＰＵ１２０ａは，リード結果の返信により，キャッシュタグ１２２ａにおいて，５０００番地の登録を行う。各タグは，段階３の状況となる。
【００９８】
図１０（Ａ）は，本実施の形態のスヌープタグ更新のパターン２によるスヌープタグ更新の例（２）を説明する図である。図１０（Ａ）において，段階０はある時点での各タグの状況を示す。各エントリの状態はすべてＳ（共有状態）となっている。
【００９９】
ここで，ＣＰＵ１２０ａが５０００番地をリードしたいものとする。ＣＰＵ１２０ａは，キャッシュタグ１２２ａがＷａｙフルの状態ではないので，ドロップなしに５０００番地のリード要求を発行する。各タグは，段階１の状況（段階０の状況と変わらず）となる。
【０１００】
システムコントローラ１１０は，ＣＰＵ１２０ａと同一ＣＰＵバス１３０ａで接続されたＣＰＵ１２０ｂのキャッシュタグ１２２ｂに対応するスヌープタグ１１１ｂに５０００番地が登録されているので，それを消去する。スヌープタグ１１１ａの空きエントリに５０００番地を登録する。各タグは，段階２の状況となる。
【０１０１】
ＣＰＵ１２０ａは，リード結果の返信により，キャッシュタグ１２２ａにおいて，５０００番地の登録を行う。各タグは，段階３の状況となる。
【０１０２】
図１０（Ｂ）は，本実施の形態のスヌープタグ更新のパターン３によるスヌープタグ更新の例（２）を説明する図である。図１０（Ｂ）において，段階０はある時点での各タグの状況を示す。各エントリの状態はすべてＳ（共有状態）となっている。
【０１０３】
ここで，ＣＰＵ１２０ａが５０００番地をリードしたいものとする。ＣＰＵ１２０ａは，キャッシュタグ１２２ａがＷａｙフルの状態ではないので，ドロップなしに５０００番地のリード要求を発行する。各タグは，段階１の状況（段階０の状況と変わらず）となる。
【０１０４】
システムコントローラ１１０は，同一ＣＰＵバス１３０ａに接続されたＣＰＵ１２０ａと，ＣＰＵ１２０ｂとにそれぞれ対応するスヌープタグ１１１ａと，スヌープタグ１１１ｂとの使用エントリ数を比較する。ここでは，５０００番地以外の使用エントリ数は同じなので，スヌープタグ１１１ｂに登録された５０００番地を消去する。スヌープタグ１１１ａの空きエントリに５０００番地を登録する。各タグは，段階２の状況となる。
【０１０５】
ＣＰＵ１２０ａは，リード結果の返信により，キャッシュタグ１２２ａにおいて，５０００番地の登録を行う。各タグは，段階３の状況となる。
【０１０６】
ここまで，リード要求を発行したＣＰＵ１２０ａと同一のＣＰＵバス１３０ａに接続された他のＣＰＵ１２０ｂに対応するスヌープタグ１１１ｂに，リード要求されたアドレスがＳ（共有状態）で登録されている場合のスヌープタグ更新の例を説明した。次に，リード要求を発行したＣＰＵ１２０ａと同一のＣＰＵバス１３０ａに接続されたＣＰＵ１２０ｂに対応するスヌープタグ１１１ｂに，リード要求されたアドレスがＥ（排他状態）で登録されている場合のスヌープタグ更新の例を説明する。リード要求されたアドレスがＥ（排他状態）で登録されている場合には，そのＥ（排他状態）をＳ（共有状態）に変更し，上述のスヌープタグ更新を行う。
【０１０７】
図１１は，スヌープタグ更新のパターン１によるスヌープタグ更新処理フローチャート（２）である。図１１では，リード要求を発行したＣＰＵ１２０ａと同一のＣＰＵバス１３０ａに接続された他のＣＰＵ１２０ｂに対応するスヌープタグ１１１ｂに，リード要求されたアドレスがＥ（排他状態）で登録されている場合を考慮し，上述のスヌープタグ更新のパターン１によるスヌープタグ更新を行う。
【０１０８】
ＣＰＵ１２０ａからリード要求が発行されると（ステップＳ４０），リード要求を発行したＣＰＵ１２０ａと同一のＣＰＵバス１３０ａに接続された他のＣＰＵ１２０ｂに対応するスヌープタグ１１１ｂの検索を行う（ステップＳ４１）。検索の結果，リード要求されたアドレスがＥ（排他状態）で登録されていなければ（ステップＳ４２），リード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａに，リード要求されたアドレスを登録する（ステップＳ４３）。
【０１０９】
検索の結果，リード要求されたアドレスがＥ（排他状態）で登録されていれば（ステップＳ４２），スヌープタグ１１１ｂのリード要求されたアドレスの状態を，Ｅ（排他状態）からＳ（共有状態）にドロップする（ステップＳ４４）。リード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａの更新を行わない。
【０１１０】
図１２は，スヌープタグ更新のパターン２によるスヌープタグ更新処理フローチャート（２）である。図１２では，リード要求を発行したＣＰＵ１２０ａと同一のＣＰＵバス１３０ａに接続された他のＣＰＵ１２０ｂに対応するスヌープタグ１１１ｂに，リード要求されたアドレスがＥ（排他状態）で登録されている場合を考慮し，上述のスヌープタグ更新のパターン２によるスヌープタグ更新を行う。
【０１１１】
ＣＰＵ１２０ａからリード要求が発行されると（ステップＳ５０），リード要求を発行したＣＰＵ１２０ａと同一のＣＰＵバス１３０ａに接続された他のＣＰＵ１２０ｂに対応するスヌープタグ１１１ｂの検索を行う（ステップＳ５１）。検索の結果，リード要求されたアドレスがＥ（排他状態）で登録されていない場合には（ステップＳ５２），リード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａに，リード要求されたアドレスを登録する（ステップＳ５４）。
【０１１２】
検索の結果，リード要求されたアドレスがＥ（排他状態）で登録されている場合には（ステップＳ５２），そのスヌープタグ１１１ｂに登録されたアドレスをＩ（無効状態）にドロップし（ステップＳ５３），リード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａに，リード要求されたアドレスを登録する（ステップＳ５４）。
【０１１３】
図１３は，スヌープタグ更新のパターン３によるスヌープタグ更新処理フローチャート（２）である。図１３では，リード要求を発行したＣＰＵ１２０ａと同一のＣＰＵバス１３０ａに接続された他のＣＰＵ１２０ｂに対応するスヌープタグ１１１ｂに，リード要求されたアドレスがＥ（排他状態）で登録されている場合を考慮し，上述のスヌープタグ更新のパターン３によるスヌープタグ更新を行う。
【０１１４】
ＣＰＵ１２０ａからリード要求が発行されると（ステップＳ６０），リード要求を発行したＣＰＵ１２０ａと同一のＣＰＵバス１３０ａに接続された他のＣＰＵ１２０ｂに対応するスヌープタグ１１１ｂの検索を行う（ステップＳ６１）。検索の結果，リード要求されたアドレスがＥ（排他状態）で登録されていなければ（ステップＳ６２），リード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａに，リード要求されたアドレスを登録する（ステップＳ６６）。
【０１１５】
検索の結果，リード要求されたアドレスがＥ（共有状態）で登録されていれば（ステップＳ６２），リード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａの空きエントリ数と，スヌープタグ１１１ｂの空きエントリ数とを比較する（ステップＳ６３）。なお，ここでは，スヌープタグ１１１ｂのリード要求されたアドレスが登録されたエントリを，空きエントリと見なす。
【０１１６】
スヌープタグ１１１ａの空きエントリ数がスヌープタグ１１１ｂの空きエントリ数以上である場合には（ステップＳ６４），スヌープタグ１１１ｂに登録されたアドレスをＩ（無効状態）にドロップする（ステップＳ６５）。リード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａに，リード要求されたアドレスを登録する（ステップＳ６６）。
【０１１７】
スヌープタグ１１１ａの空きエントリ数がスヌープタグ１１１ｂの空きエントリ数未満である場合には（ステップＳ６４），スヌープタグ１１１ｂのリード要求されたアドレスの状態を，Ｅ（排他状態）からＳ（共有状態）にドロップする（ステップＳ６７）。リード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａの更新を行わない。
【０１１８】
図１４，図１５は，スヌープタグ更新の例（３）を説明する図である。以下，図１４，図１５を用いて，リード要求を発行したＣＰＵ１２０ａと同一のＣＰＵバス１３０ａに接続されたＣＰＵ１２０ｂに対応するスヌープタグ１１１ｂに，リード要求されたアドレスがＥ（排他状態）で登録されている場合のスヌープタグ更新の例を説明する。図１４，図１５には，図１に示す構成におけるキャッシュタグ１２２ａ，キャッシュタグ１２２ｂ，スヌープタグ１１１ａ，スヌープタグ１１１ｂのある同一インデックスの更新の例が示されている。
【０１１９】
図１４（Ａ）は，従来のスヌープタグ更新の例（３）を説明する図である。図１４（Ａ）において，段階０はある時点での各タグの状況を示す。キャッシュタグ１２２ｂ，スヌープタグ１１１ｂの５０００番地の状態がＥ（排他状態）となっており，それ以外のエントリの状態はＳ（共有状態）となっている。
【０１２０】
ここで，ＣＰＵ１２０ａが５０００番地をリードしたいものとする。ＣＰＵ１２０ａは，キャッシュタグ１２２ａがＷａｙフルの状態であるので，１０００番地をＩドロップし（１０００番地の状態をＩ（無効状態）にする），５０００番地のリード要求を発行する。このとき，同一ＣＰＵバス１３０ａのＣＰＵ１２０ｂは，キャッシュタグ１２２ｂの５０００番地の状態を，Ｅ（排他状態）からＳ（共有状態）にドロップする。各タグは，段階１の状況となる。
【０１２１】
システムコントローラ１１０は，スヌープタグ１１１ａがＷａｙフルの状態であるので，２０００番地をＥｖｉｃｔｉｏｎし，５０００番地を登録する。このとき，スヌープタグ１１１ｂの５０００番地の状態を，Ｅ（排他状態）からＳ（共有状態）にドロップする。ＣＰＵ１２０ａは，システムコントローラ１１０のＥｖｉｃｔｉｏｎにより，キャッシュタグ１２２ａの２０００番地をＩドロップする（２０００番地の状態をＩ（無効状態）にする）。各タグは，段階２の状況となる。
【０１２２】
ＣＰＵ１２０ａは，リード結果の返信により，キャッシュタグ１２２ａにおいて，５０００番地の登録を行う。各タグは，段階３の状況となる。
【０１２３】
図１４（Ｂ）は，本実施の形態のスヌープタグ更新のパターン１によるスヌープタグ更新の例（３）を説明する図である。図１４（Ｂ）において，段階０はある時点での各タグの状況を示す。キャッシュタグ１２２ｂ，スヌープタグ１１１ｂの５０００番地の状態がＥ（排他状態）となっており，それ以外のエントリの状態はＳ（共有状態）となっている。
【０１２４】
ここで，ＣＰＵ１２０ａが５０００番地をリードしたいものとする。ＣＰＵ１２０ａは，キャッシュタグ１２２ａがＷａｙフルの状態であるので，１０００番地をＩドロップし，５０００番地のリード要求を発行する。このとき，同一ＣＰＵバス１３０ａのＣＰＵ１２０ｂは，キャッシュタグ１２２ｂの５０００番地の状態を，Ｅ（排他状態）からＳ（共有状態）にドロップする。各タグは，段階１の状況となる。
【０１２５】
システムコントローラ１１０は，ＣＰＵ１２０ａと同一ＣＰＵバス１３０ａで接続されたＣＰＵ１２０ｂのキャッシュタグ１２２ｂに対応するスヌープタグ１１１ｂに５０００番地がＥ（排他状態）で登録されているので，その状態をＥ（排他状態）からＳ（共有状態）にドロップする。スヌープタグ１１１ａの更新は行わない。各タグは，段階２の状況となる。
【０１２６】
ＣＰＵ１２０ａは，リード結果の返信により，キャッシュタグ１２２ａにおいて，５０００番地の登録を行う。各タグは，段階３の状況となる。
【０１２７】
図１５（Ａ）は，本実施の形態のスヌープタグ更新のパターン２によるスヌープタグ更新の例（３）を説明する図である。図１５（Ａ）において，段階０はある時点での各タグの状況を示す。キャッシュタグ１２２ｂ，スヌープタグ１１１ｂの５０００番地の状態がＥ（排他状態）となっており，それ以外のエントリの状態はＳ（共有状態）となっている。
【０１２８】
ここで，ＣＰＵ１２０ａが５０００番地をリードしたいものとする。ＣＰＵ１２０ａは，キャッシュタグ１２２ａがＷａｙフルの状態であるので，１０００番地をＩドロップし（１０００番地の状態をＩ（無効状態）にする），５０００番地のリード要求を発行する。このとき，同一ＣＰＵバス１３０ａのＣＰＵ１２０ｂは，キャッシュタグ１２２ｂの５０００番地の状態を，Ｅ（排他状態）からＳ（共有状態）にドロップする。各タグは，段階１の状況となる。
【０１２９】
システムコントローラ１１０は，ＣＰＵ１２０ａと同一ＣＰＵバス１３０ａで接続されたＣＰＵ１２０ｂのキャッシュタグ１２２ｂに対応するスヌープタグ１１１ｂに５０００番地が登録されているので，それを消去する。スヌープタグ１１１ａがＷａｙフルの状態であるので，２０００番地をＥｖｉｃｔｉｏｎし，５０００番地を登録する。ＣＰＵ１２０ａは，システムコントローラ１１０のＥｖｉｃｔｉｏｎにより，キャッシュタグ１２２ａの２０００番地をＩドロップする（２０００番地の状態をＩ（無効状態）にする）。各タグは，段階２の状況となる。
【０１３０】
ＣＰＵ１２０ａは，リード結果の返信により，キャッシュタグ１２２ａにおいて，５０００番地の登録を行う。各タグは，段階３の状況となる。
【０１３１】
図１５（Ｂ）は，本実施の形態のスヌープタグ更新のパターン３によるスヌープタグ更新の例（３）を説明する図である。図１５（Ｂ）において，段階０はある時点での各タグの状況を示す。キャッシュタグ１２２ｂ，スヌープタグ１１１ｂの５０００番地の状態がＥ（排他状態）となっており，それ以外のエントリの状態はＳ（共有状態）となっている。
【０１３２】
ここで，ＣＰＵ１２０ａが５０００番地をリードしたいものとする。ＣＰＵ１２０ａは，キャッシュタグ１２２ａがＷａｙフルの状態であるので，１０００番地をＩドロップし（１０００番地の状態をＩ（無効状態）にする），５０００番地のリード要求を発行する。このとき，同一ＣＰＵバス１３０ａのＣＰＵ１２０ｂは，キャッシュタグ１２２ｂの５０００番地の状態を，Ｅ（排他状態）からＳ（共有状態）にドロップする。各タグは，段階１の状況となる。
【０１３３】
システムコントローラ１１０は，同一ＣＰＵバス１３０ａに接続されたＣＰＵ１２０ａと，ＣＰＵ１２０ｂとにそれぞれ対応するスヌープタグ１１１ａと，スヌープタグ１１１ｂとの使用エントリ数を比較する。ここでは，５０００番地以外の使用エントリ数はスヌープタグ１１１ｂの方が少ないので，特にスヌープタグ１１１ａの更新は行わない。スヌープタグ１１１ｂの５０００番地の状態を，Ｅ（排他状態）からＳ（共有状態）にドロップする。各タグは，段階２の状況となる。
【０１３４】
ＣＰＵ１２０ａは，リード結果の返信により，キャッシュタグ１２２ａにおいて，５０００番地の登録を行う。各タグは，段階３の状況となる。
【０１３５】
図１６，図１７は，スヌープタグ更新の例（４）を説明する図である。以下，図１６，図１７を用いて，リード要求を発行したＣＰＵ１２０ａと同一のＣＰＵバス１３０ａに接続されたＣＰＵ１２０ｂに対応するスヌープタグ１１１ｂに，リード要求されたアドレスがＥ（排他状態）で登録されている場合のスヌープタグ更新の例を説明する。図１６，図１７には，図１に示す構成におけるキャッシュタグ１２２ａ，キャッシュタグ１２２ｂ，スヌープタグ１１１ａ，スヌープタグ１１１ｂのある同一インデックスの更新の例が示されている。
【０１３６】
図１６（Ａ）は，従来のスヌープタグ更新の例（４）を説明する図である。図１６（Ａ）において，段階０はある時点での各タグの状況を示す。キャッシュタグ１２２ｂ，スヌープタグ１１１ｂの５０００番地の状態がＥ（排他状態）となっており，それ以外のエントリの状態はＳ（共有状態）となっている。
【０１３７】
ここで，ＣＰＵ１２０ａが５０００番地をリードしたいものとする。ＣＰＵ１２０ａは，キャッシュタグ１２２ａがＷａｙフルの状態ではないので，ドロップなしに５０００番地のリード要求を発行する。このとき，同一ＣＰＵバス１３０ａのＣＰＵ１２０ｂは，キャッシュタグ１２２ｂの５０００番地の状態を，Ｅ（排他状態）からＳ（共有状態）にドロップする。各タグは，段階１の状況となる。
【０１３８】
システムコントローラ１１０は，スヌープタグ１１１ａの空きエントリに５０００番地を登録する。このとき，スヌープタグ１１１ｂの５０００番地の状態を，Ｅ（排他状態）からＳ（共有状態）にドロップする。各タグは，段階２の状況となる。
【０１３９】
ＣＰＵ１２０ａは，リード結果の返信により，キャッシュタグ１２２ａにおいて，５０００番地の登録を行う。各タグは，段階３の状況となる。
【０１４０】
図１６（Ｂ）は，本実施の形態のスヌープタグ更新のパターン１によるスヌープタグ更新の例（４）を説明する図である。図１６（Ｂ）において，段階０はある時点での各タグの状況を示す。キャッシュタグ１２２ｂ，スヌープタグ１１１ｂの５０００番地の状態がＥ（排他状態）となっており，それ以外のエントリの状態はＳ（共有状態）となっている。
【０１４１】
ここで，ＣＰＵ１２０ａが５０００番地をリードしたいものとする。ＣＰＵ１２０ａは，キャッシュタグ１２２ａがＷａｙフルの状態ではないので，ドロップなしに５０００番地のリード要求を発行する。このとき，同一ＣＰＵバス１３０ａのＣＰＵ１２０ｂは，キャッシュタグ１２２ｂの５０００番地の状態を，Ｅ（排他状態）からＳ（共有状態）にドロップする。各タグは，段階１の状況となる。
【０１４２】
システムコントローラ１１０は，ＣＰＵ１２０ａと同一ＣＰＵバス１３０ａで接続されたＣＰＵ１２０ｂのキャッシュタグ１２２ｂに対応するスヌープタグ１１１ｂに５０００番地がＥ（排他状態）で登録されているので，その状態をＥ（排他状態）からＳ（共有状態）にドロップする。スヌープタグ１１１ａの更新は行わない。各タグは，段階２の状況となる。
【０１４３】
ＣＰＵ１２０ａは，リード結果の返信により，キャッシュタグ１２２ａにおいて，５０００番地の登録を行う。各タグは，段階３の状況となる。
【０１４４】
図１７（Ａ）は，本実施の形態のスヌープタグ更新のパターン２によるスヌープタグ更新の例（４）を説明する図である。図１７（Ａ）において，段階０はある時点での各タグの状況を示す。キャッシュタグ１２２ｂ，スヌープタグ１１１ｂの５０００番地の状態がＥ（排他状態）となっており，それ以外のエントリの状態はＳ（共有状態）となっている。
【０１４５】
ここで，ＣＰＵ１２０ａが５０００番地をリードしたいものとする。ＣＰＵ１２０ａは，キャッシュタグ１２２ａがＷａｙフルの状態ではないので，ドロップなしに５０００番地のリード要求を発行する。このとき，同一ＣＰＵバス１３０ａのＣＰＵ１２０ｂは，キャッシュタグ１２２ｂの５０００番地の状態を，Ｅ（排他状態）からＳ（共有状態）にドロップする。各タグは，段階１の状況となる。
【０１４６】
システムコントローラ１１０は，ＣＰＵ１２０ａと同一ＣＰＵバス１３０ａで接続されたＣＰＵ１２０ｂのキャッシュタグ１２２ｂに対応するスヌープタグ１１１ｂに５０００番地が登録されているので，それを消去する。スヌープタグ１１１ａの空きエントリに５０００番地を登録する。各タグは，段階２の状況となる。
【０１４７】
ＣＰＵ１２０ａは，リード結果の返信により，キャッシュタグ１２２ａにおいて，５０００番地の登録を行う。各タグは，段階３の状況となる。
【０１４８】
図１７（Ｂ）は，本実施の形態のスヌープタグ更新のパターン３によるスヌープタグ更新の例（４）を説明する図である。図１７（Ｂ）において，段階０はある時点での各タグの状況を示す。キャッシュタグ１２２ｂ，スヌープタグ１１１ｂの５０００番地の状態がＥ（排他状態）となっており，それ以外のエントリの状態はＳ（共有状態）となっている。
【０１４９】
ここで，ＣＰＵ１２０ａが５０００番地をリードしたいものとする。ＣＰＵ１２０ａは，キャッシュタグ１２２ａがＷａｙフルの状態ではないので，ドロップなしに５０００番地のリード要求を発行する。このとき，同一ＣＰＵバス１３０ａのＣＰＵ１２０ｂは，キャッシュタグ１２２ｂの５０００番地の状態を，Ｅ（排他状態）からＳ（共有状態）にドロップする。各タグは，段階１の状況となる。
【０１５０】
システムコントローラ１１０は，同一ＣＰＵバス１３０ａに接続されたＣＰＵ１２０ａと，ＣＰＵ１２０ｂとにそれぞれ対応するスヌープタグ１１１ａと，スヌープタグ１１１ｂとの使用エントリ数を比較する。ここでは，５０００番地以外の使用エントリ数は同じなので，スヌープタグ１１１ｂに登録された５０００番地を消去する。スヌープタグ１１１ａの空きエントリに５０００番地を登録する。各タグは，段階２の状況となる。
【０１５１】
ＣＰＵ１２０ａは，リード結果の返信により，キャッシュタグ１２２ａにおいて，５０００番地の登録を行う。各タグは，段階３の状況となる。
【０１５２】
ここまで説明した様々なスヌープタグ更新のパターンを，モード信号によって変更可能としてもよい。
【０１５３】
図１８は，スヌープタグ更新のモード変更が可能な場合のスヌープタグ更新処理フローチャートである。ここでは，従来のスヌープタグ更新をモードＡ，スヌープタグ更新のパターン１をモードＢ，スヌープタグ更新のパターン２をモードＣ，スヌープタグ更新のパターン３をモードＤとする。
【０１５４】
ＣＰＵ１２０ａがリード要求を発行する（ステップＳ７０）。スヌープタグ更新のモードがＡであれば（ステップＳ７１），リード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａに，リード要求されたアドレスを登録する（ステップＳ８０）。
【０１５５】
スヌープタグ更新のモードがＡでない場合，リード要求を発行したＣＰＵ１２０ａと同一のＣＰＵバス１３０ａに接続された他のＣＰＵ１２０ｂに対応するスヌープタグ１１１ｂの検索を行う（ステップＳ７２）。検索の結果，スヌープタグ１１１ｂにリード要求されたアドレスがＳ（共有状態）またはＥ（排他状態）で登録されていなければ（ステップＳ７３），リード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａに，リード要求されたアドレスを登録する（ステップＳ８０）。
【０１５６】
スヌープタグ１１１ｂにリード要求されたアドレスがＳ（共有状態）またはＥ（排他状態）で登録されていれば（ステップＳ７３），スヌープタグ更新のモードがＢであるかＣであるかＤであるかを確認する（ステップＳ７４）。
【０１５７】
スヌープタグ更新のモードがＢであれば，スヌープタグ１１１ｂのリード要求されたアドレスの状態がＳ（共有状態）であるかＥ（排他状態）であるかを確認する（ステップＳ７７）。Ｅ（排他状態）であれば，スヌープタグ１１１ｂのリード要求されたアドレスの状態をＥ（排他状態）からＳ（共有状態）にドロップする（ステップＳ７８）。Ｓ（共有状態）であれば，スヌープタグ１１１の更新を行わない。
【０１５８】
スヌープタグ更新のモードがＣであれば，スヌープタグ１１１ｂのリード要求されたアドレスの状態をＳ（共有状態）またはＥ（排他状態）からＩ（無効状態）にドロップし（ステップＳ７９），リード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａに，リード要求されたアドレスを登録する（ステップＳ８０）。
【０１５９】
スヌープタグ更新のモードがＤであれば，リード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａの空きエントリ数と，スヌープタグ１１１ｂの空きエントリ数とを比較する（ステップＳ７５）。なお，ここでは，スヌープタグ１１１ｂのリード要求されたアドレスが登録されたエントリを，空きエントリと見なす。
【０１６０】
スヌープタグ１１１ａの空きエントリ数がスヌープタグ１１１ｂの空きエントリ数以上である場合には（ステップＳ７６），スヌープタグ１１１ｂのリード要求されたアドレスの状態をＳ（共有状態）またはＥ（排他状態）からＩ（無効状態）にドロップし（ステップＳ７９），リード要求を発行したＣＰＵ１２０ａに対応するスヌープタグ１１１ａに，リード要求されたアドレスを登録する（ステップＳ８０）。
【０１６１】
スヌープタグ１１１ａの空きエントリ数がスヌープタグ１１１ｂの空きエントリ数未満である場合には（ステップＳ７６），スヌープタグ１１１ｂのリード要求されたアドレスの状態がＳ（共有状態）であるかＥ（排他状態）であるかを確認する（ステップＳ７７）。Ｅ（排他状態）であれば，スヌープタグ１１１ｂのリード要求されたアドレスの状態をＥ（排他状態）からＳ（共有状態）にドロップする（ステップＳ７８）。Ｓ（共有状態）であれば，スヌープタグ１１１の更新を行わない。
【０１６２】
スヌープタグの更新処理をモード信号によって変更可能とすることにより，スヌープタグの更新処理の論理を自在に変更できるので，実マシンによりスヌープタグの更新方法の違いによる性能変化の調査が可能となる。また，その結果から最適なモードの設定による運用が可能となる。
【０１６３】
次に，キャッシュリプレース要求対応処理部１１９によるキャッシュリプレース要求への対応処理について説明する。図２に示すように，本実施の形態では，同一のＣＰＵバス１３０ａに接続されたＣＰＵ１２０ａ，ＣＰＵ１２０ｂに対応するスヌープタグ１１１ａ，スヌープタグ１１１ｂは，同一のＣＰＵバス１３０ａに接続されたＣＰＵ１２０ａ，ＣＰＵ１２０ｂで共有された状態となる。しかし，この状態では，キャッシュリプレース要求が発行されたときに，問題が発生する場合がある。例えば，単にキャッシュリプレース要求によって，Ｓ登録のエントリをＩドロップすると，同一ＣＰＵバス１３０ａに接続されている他のＣＰＵのキャッシュタグ１２２がＳ登録で同一アドレスを保持している場合に，スヌープタグ１１１にはそのアドレスのＳ登録の情報が残らなくなるからである。以下，キャッシュリプレース要求の発行によって発生する可能性がある問題に対処するための処理を説明する。
【０１６４】
図１９は，キャッシュリプレース要求を無効化する処理の例を説明する図である。以下，図１９を用いて，ＣＰＵ１２０ａからキャッシュリプレース要求が発行された場合の処理の例を説明する。図１９には，図１に示す構成におけるキャッシュタグ１２２ａ，キャッシュタグ１２２ｂ，スヌープタグ１１１ａ，スヌープタグ１１１ｂのある同一インデックスの例が示されている。
【０１６５】
図１９（Ａ）は，キャッシュリプレース要求を無効化する処理を行わない場合の例を説明する図である。図１９（Ａ）において，段階０はある時点での各タグの状況を示す。ここで，ＣＰＵ１２０ａは，１０００番地のキャッシュリプレース要求を発行し，キャッシュタグ１２２ａから１０００番地を削除する。各タグは，段階１の状況となる。
【０１６６】
システムコントローラ１１０は，ＣＰＵ１２０ａからのキャッシュリプレース要求を受け，スヌープタグ１１１ａから１０００番地を削除する。各タグは，段階２の状況となる。
【０１６７】
しかし，段階２の状況では，キャッシュリプレース要求を発行したＣＰＵ１２０ａと同一のＣＰＵバス１３０ａに接続されたＣＰＵ１２０ｂのキャッシュタグ１２２ｂには１０００番地が登録されているのに対し，システムコントローラ１１０のスヌープタグ１１１ａ，スヌープタグ１１１ｂにはいずれも１０００番地が登録されておらず，コヒーレンシエラーが発生してしまう。
【０１６８】
図１９（Ｂ）は，本実施の形態において，キャッシュリプレース要求を無効化する処理を行う場合の例を説明する図である。図１９（Ｂ）において，段階０はある時点での各タグの状況を示す。ここで，ＣＰＵ１２０ａは，１０００番地のキャッシュリプレース要求を発行し，キャッシュタグ１２２ａから１０００番地を削除する。このとき，システムコントローラ１１０のリクエスト処理部１１４におけるキャッシュリプレース要求対応処理部１１９は，ＣＰＵバス１３０ａ内をスヌープし，キャッシュタグ１２２ｂからＣＰＵ１２０ｂが１０００番地をＳ（共有状態）で登録していることを検出する。各タグは，段階１の状況となる。
【０１６９】
システムコントローラ１１０は，スヌープの結果（ＣＰＵ１２０ｂが１０００番地をＳ（共有状態）で登録）から，ＣＰＵ１２０ａからのキャッシュリプレース要求を無効化する。すなわち，スヌープタグ１１１ａの１０００番地は削除されない。各タグは，段階２の状況となる。
【０１７０】
このように，ＣＰＵ１２０ａがキャッシュリプレース要求を発行したときに，そのキャッシュリプレース要求を発行したＣＰＵ１２０ａが接続されたＣＰＵバス１３０ａ内をスヌープし，ＣＰＵバス１３０ａ内にキャッシュリプレース要求されたアドレスが登録されたキャッシュタグ１２２ｂが存在する場合に，システムコントローラ１１０がキャッシュリプレース要求の無効化処理を行うことにより，コヒーレンシエラーを防ぐことができる。
【０１７１】
図２０は，キャッシュリプレース要求を拡張する処理の例を説明する図である。以下，図２０を用いて，ＣＰＵ１２０ａからキャッシュリプレース要求が発行された場合の処理の例を説明する。図２０には，図１に示す構成におけるキャッシュタグ１２２ａ，キャッシュタグ１２２ｂ，スヌープタグ１１１ａ，スヌープタグ１１１ｂのある同一インデックスの例が示されている。
【０１７２】
図２０（Ａ）は，キャッシュリプレース要求を拡張する処理を行わない場合の例を説明する図である。図２０（Ａ）において，段階０はある時点での各タグの状況を示す。ここで，ＣＰＵ１２０ａは，１０００番地のキャッシュリプレース要求を発行し，キャッシュタグ１２２ａから１０００番地を削除する。各タグは，段階１の状況となる。
【０１７３】
システムコントローラ１１０は，ＣＰＵ１２０ａからのキャッシュリプレース要求を受けるが，スヌープタグ１１１ａには１０００番地が登録されていないので，特に処理を行わない。各タグは，段階２の状況（段階１の状況と変わらず）となる。
【０１７４】
しかし，段階２の状況では，同一ＣＰＵバス１３０ａに接続されたＣＰＵ１２０ａ，ＣＰＵ１２０ｂのいずれにも１０００番地が登録されていない状況であるにもかかわらず，スヌープタグ１１１ｂには１０００番地が登録されたままとなってしまい，ゴミの情報が残ってしまう。
【０１７５】
図２０（Ｂ）は，本実施の形態において，キャッシュリプレース要求を拡張する処理を行う場合の例を説明する図である。図２０（Ｂ）において，段階０はある時点での各タグの状況を示す。ここで，ＣＰＵ１２０ａは，１０００番地のキャッシュリプレース要求を発行し，キャッシュタグ１２２ａから１０００番地を削除する。このとき，システムコントローラ１１０のリクエスト処理部１１４におけるキャッシュリプレース要求対応処理部１１９は，ＣＰＵバス１３０ａ内をスヌープし，ＣＰＵ１２０ｂのキャッシュタグ１２２ｂにも１０００番地が登録されていないことを検出する。各タグは，段階１の状況となる。
【０１７６】
システムコントローラ１１０は，スヌープの結果（ＣＰＵ１２０ｂにも１０００番地が登録されていない）から，ＣＰＵ１２０ａからのキャッシュリプレース要求をＣＰＵバス１３０ａ全体に拡張し，同一のＣＰＵバス１３０ａに接続されているすべてのＣＰＵ１２０ａ，１２０ｂからキャッシュリプレース要求が発行されたものとして処理を行う。これにより，スヌープタグ１１１ｂの１０００番地が削除されることになる。各タグは，段階２の状況となる。
【０１７７】
このように，ＣＰＵ１２０ａがキャッシュリプレース要求を発行したときに，そのキャッシュリプレース要求を発行したＣＰＵ１２０ａが接続されたＣＰＵバス１３０ａ内をスヌープし，ＣＰＵバス１３０ａ内の他のＣＰＵ１２０ｂにもキャッシュリプレース要求されたアドレスが登録されていない場合に，ＣＰＵ１２０ａから発行されたキャッシュリプレース要求を，ＣＰＵバス１３０ａに接続された全ＣＰＵ１２０から発行されたキャッシュリプレース要求とすることにより，スヌープタグ１１１にゴミが残ってしまうのを防ぐことができる。
【０１７８】
図２１は，本実施の形態によるキャッシュリプレース要求対応処理フローチャートである。図２１では，キャッシュリプレース要求されたアドレスが，キャッシュリプレース要求を発行したＣＰＵ１２０ａが接続されたＣＰＵバス１３０ａ内の他のＣＰＵ１２０ｂに登録されているか否かを判断し，キャッシュリプレース要求を無効化する処理や，キャッシュリプレース要求を拡張する処理を行う。
【０１７９】
ＣＰＵ１２０ａからキャッシュリプレース要求が発行されると（ステップＳ９０），キャッシュリプレース要求を発行したＣＰＵ１２０ａが接続されたＣＰＵバス１３０ａ内をスヌープする（ステップＳ９１）。
【０１８０】
スヌープの結果，キャッシュリプレース要求されたアドレスがＣＰＵバス１３０ａ内の他のＣＰＵ１２０ｂに登録されている場合には（ステップＳ９２），ＣＰＵ１２０ａからのキャッシュリプレース要求を破棄する（ステップＳ９３）。
【０１８１】
スヌープの結果，キャッシュリプレース要求されたアドレスがＣＰＵバス１３０ａ内の他のＣＰＵ１２０ｂに登録されていない場合には（ステップＳ９２），ＣＰＵ１２０ａからのキャッシュリプレース要求をＣＰＵバス１３０ａに接続された全ＣＰＵ１２０から発行されたキャッシュリプレース要求とし（ステップＳ９４），キャッシュリプレース要求を実行する（ステップＳ９５）。
【０１８２】
これらの処理は，図３に示すキャッシュリプレース要求対応処理部１１９が行うが，キャッシュリプレース要求対応処理部１１９は，スヌープタグ更新処理部１１８が従来の更新パターンを含むスヌープタグ更新のモード切り替えを行う場合には，キャッシュリプレース要求に対応する処理を実行するか否かを判断し，従来の更新パターンの場合に，キャッシュリプレース要求に対応する処理を実行しないようにする。
【０１８３】
図２２は，スヌープタグ更新のモード変更が可能な場合のキャッシュリプレース要求対応処理フローチャートである。従来のスヌープタグ更新の場合には，キャッシュリプレース要求を無効化する処理や，キャッシュリプレース要求を拡張する処理は必要ない。図２２では，従来のスヌープタグ更新と本実施の形態のスヌープタグ更新とが切り替え可能である場合の処理の例を説明する。ここでは，従来のスヌープタグ更新をモードＡ，スヌープタグ更新のパターン１をモードＢ，スヌープタグ更新のパターン２をモードＣ，スヌープタグ更新のパターン３をモードＤとする。
【０１８４】
ＣＰＵ１２０ａからキャッシュリプレース要求が発行される（ステップＳ１００）。スヌープタグ更新のモードがＡであれば（ステップＳ１０１），キャッシュリプレース要求を実行する（ステップＳ１０６）。
【０１８５】
スヌープタグ更新のモードがＡ以外であれば（ステップＳ１０１），キャッシュリプレース要求を発行したＣＰＵ１２０ａが接続されたＣＰＵバス１３０ａ内をスヌープする（ステップＳ１０２）。
【０１８６】
スヌープの結果，キャッシュリプレース要求されたアドレスがＣＰＵバス１３０ａ内の他のＣＰＵ１２０ｂに登録されている場合には（ステップＳ１０３），ＣＰＵ１２０ａからのキャッシュリプレース要求を破棄する（ステップＳ１０４）。
【０１８７】
スヌープの結果，キャッシュリプレース要求されたアドレスがＣＰＵバス１３０ａ内の他のＣＰＵ１２０ｂに登録されていない場合には（ステップＳ１０３），ＣＰＵ１２０ａからのキャッシュリプレース要求をＣＰＵバス１３０ａに接続された全ＣＰＵ１２０から発行されたキャッシュリプレース要求とし（ステップＳ１０５），キャッシュリプレース要求を実行する（ステップＳ１０６）。
【０１８８】
以上，本発明の実施の形態について説明したが，本発明はこれに限られるものではない。例えば，本実施の形態では，１つのＣＰＵバス１３０に２つのＣＰＵ１２０が接続されている例を説明したが，１つのＣＰＵバスに３つ以上のＣＰＵが接続されていても，同様に実施可能である。
【図面の簡単な説明】
【０１８９】
【図１】本発明の実施の形態におけるマルチプロセッサシステムの構成例を示す図である。
【図２】本実施の形態のキャッシュタグ／スヌープタグの例を示す図である。
【図３】本実施の形態のリクエスト処理部の構成例を示す図である。
【図４】スヌープタグ更新のパターン１によるスヌープタグ更新処理フローチャート（１）である。
【図５】スヌープタグ更新のパターン２によるスヌープタグ更新処理フローチャート（１）である。
【図６】スヌープタグ更新のパターン３によるスヌープタグ更新処理フローチャート（１）である。
【図７】スヌープタグ更新の例（１）を説明する図である。
【図８】スヌープタグ更新の例（１）を説明する図である。
【図９】スヌープタグ更新の例（２）を説明する図である。
【図１０】スヌープタグ更新の例（２）を説明する図である。
【図１１】スヌープタグ更新のパターン１によるスヌープタグ更新処理フローチャート（２）である。
【図１２】スヌープタグ更新のパターン２によるスヌープタグ更新処理フローチャート（２）である。
【図１３】スヌープタグ更新のパターン３によるスヌープタグ更新処理フローチャート（２）である。
【図１４】スヌープタグ更新の例（３）を説明する図である。
【図１５】スヌープタグ更新の例（３）を説明する図である。
【図１６】スヌープタグ更新の例（４）を説明する図である。
【図１７】スヌープタグ更新の例（４）を説明する図である。
【図１８】スヌープタグ更新のモード変更が可能な場合のスヌープタグ更新処理フローチャートである。
【図１９】キャッシュリプレース要求を無効化する処理の例を説明する図である。
【図２０】キャッシュリプレース要求を拡張する処理の例を説明する図である。
【図２１】本実施の形態によるキャッシュリプレース要求対応処理フローチャートである。
【図２２】スヌープタグ更新のモード変更が可能な場合のキャッシュリプレース要求対応処理フローチャートである。
【図２３】マルチプロセッサシステムの例を説明する図である。
【図２４】従来のキャッシュタグ／スヌープタグの例を示す図である。
【図２５】Ｅｖｉｃｔｉｏｎを説明する図である。
【符号の説明】
【０１９０】
１００  システムボード
１１０  システムコントローラ
１１１  スヌープタグ
１１２  ＣＰＵ発行リクエストキュー
１１３  ローカルアービタ
１１４  リクエスト処理部
１１５  リクエスト実行部
１１６  資源管理部
１１７  リクエスト実行起動部
１１８  スヌープタグ更新処理部
１１９  キャッシュリプレース要求対応処理部
１２０  ＣＰＵ
１２１  キャッシュメモリ
１２２  キャッシュタグ
１３０  ＣＰＵバス
２００  アドレスクロスバボード
２１０  グローバルアービタ
２２０  実行可否判定回路
３００  ローカルバス
３０１  グローバルバス
３０２  ローカル通知パス
３０３  グローバル通知パス
【図１】
2008046961.tif 000003
【図２】
2008046961.tif 000004
【図３】
2008046961.tif 000005
【図４】
2008046961.tif 000006
【図５】
2008046961.tif 000007
【図６】
2008046961.tif 000008
【図７】
2008046961.tif 000009
【図８】
2008046961.tif 000010
【図９】
2008046961.tif 000011
【図１０】
2008046961.tif 000012
【図１１】
2008046961.tif 000013
【図１２】
2008046961.tif 000014
【図１３】
2008046961.tif 000015
【図１４】
2008046961.tif 000016
【図１５】
2008046961.tif 000017
【図１６】
2008046961.tif 000018
【図１７】
2008046961.tif 000019
【図１８】
2008046961.tif 000020
【図１９】
2008046961.tif 000021
【図２０】
2008046961.tif 000022
【図２１】
2008046961.tif 000023
【図２２】
2008046961.tif 000024
【図２３】
2008046961.tif 000025
【図２４】
2008046961.tif 000026
【図２５】
2008046961.tif 000027