(57)【特許請求の範囲】
【請求項１】
各々キャッシュメモリを備え該キャッシュメモリを介して記憶データにアクセスする複数のプロセッサと、該複数のプロセッサで共有される主記憶とを有し、キャッシュメモリの更新時に同時に主記憶も更新するストアスルー方式のキャッシュ制御プロトコルとキャッシュメモリの更新時点では主記憶を更新しないストアイン方式のキャッシュ制御プロトコルとを動的に切り替えるマルチプロセッサシステムにおいて、
キャッシュメモリを介して前記主記憶の共有データにアクセスを行うプロセスの走行する仮想空間番号を外部より予め設定されて保持する仮想空間番号レジスタと、
キャッシュメモリを介して前記主記憶の共有データにアクセスを行うプロセス内モジュールの命令コードを格納する命令セグメント番号を外部より予め設定されて保持する命令セグメント番号レジスタと、
キャッシュメモリを介して記憶データにアクセスするプロセスの仮想空間番号及び命令セグメント番号が、前記仮想空間番号レジスタおよび前記命令セグメント番号レジスタの保持する仮想空間番号および命令セグメント番号と一致するか否かを検出する比較手段とを有し、
前記比較手段の検出結果に応じて動的にキャッシュ制御プロトコルの切り替えを行うことを特徴とするマルチプロセッサシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はマルチプロセッサシステムにおけるキャッシュメモリの制御に関し、特にキャッシュ制御プロトコルの切り替えに関する。
【０００２】
【従来の技術】
従来、マルチプロセッサシステムにおけるキャッシュ制御プロトコルとしては、データを更新する場合にキャッシュメモリ内のデータのみを更新し、主記憶への更新データの反映は、キャッシュ内の該当するデータ部が主記憶に掃き出される時に行うストアイン方式と、データの更新時に、キャッシュメモリへの更新データの反映と同時期に、主記憶にも更新データの反映を行うストアスルー方式との２種類がある。
【０００３】
マルチプロセッサ環境下においては、ストアイン方式では、データの更新時に、更新データをキャッシュ内にのみ反映させる事から、主記憶へのアクセス回数は少なくてすむ。但し、別のプロセッサがその更新データと同じデータエリアに対してデータ更新する場合は、該データエリアを、最新の更新データを所持しているキャッシュから掃き出させ、別のプロセッサの保持しているキャッシュに移してから、データの更新を行なうことになる。この為、複数のプロセッサで共有している主記憶エリアの更新時は、キャッシュ間でのデータの移送が行われ、性能低下の要因となっている。
【０００４】
他方、ストアスルー方式では、データの更新時に、自プロセッサ内のキャッシュのみならず、主記憶にも随時反映させる事から、マルチプロセッサ環境下では、主記憶のアクセス回数が非常に大きくなる。この事から、メモリアクセスに対するレスポンスが遅くなり、性能低下を引き起こしている。
【０００５】
このような事情に鑑み、キャッシュメモリの更新時に同時に主記憶も更新するストアスルー方式のキャッシュ制御プロトコルと、キャッシュメモリの更新時点では主記憶を更新しないストアイン方式のキャッシュ制御プロトコルとを動的に切り替えるマルチプロセッサシステムが提案されている。
【０００６】
例えば、特開平２−２２６４４９号公報および特開平３−２１０６４５号公報では、メモリのページ単位にそのページが複数のプロセッサで共有されるページか否かを示すフラグを持たせ、共有ページに対するアクセス時にはストアスルー方式を、それ以外のページに対するアクセス時にはストアイン方式を使用する。また、特開平３−４００４６号公報では、メモリのページ単位或いはセグメント単位にストアインまたはストアスルー属性を示す識別子を付与しておき、アクセスされるページまたはセグメントの前記識別子によってキャッシュ制御プロトコルをストアスルー方式とストアイン方式との間で動的に切り替える。
【０００７】
【発明が解決しようとする課題】
上述した従来の技術によれば、ストアイン方式とストアスルー方式の各々の欠点を補うことができ、マルチプロセッサ環境下において、主記憶へのアクセス頻度を低下させたままで、共有メモリ領域のキャッシュ間での移送も抑えることができ、性能を向上させることが可能となる。
【０００８】
しかしながら、何れの従来技術も、アクセス先の領域に基づいて、キャッシュ制御プロトコルの切り替えを行っている。キャッシュ制御プロトコルをアクセス先の領域に基づいて切り替える場合、アーキテクチャの変更が必要になり、従来装置との互換性が取れなくなるという問題がある。つまり、キャッシュ制御プロトコルをアクセス先の領域に基づいて変更する場合、前記の各公報に記載されるように、セグメント記述子やページ記述子などのアクセス先領域の属性を示す構造体にストアイン方式かストアスルー方式かを区別するフラグを付加する必要があるが、セグメント記述子等はその構造がアーキテクチャで規定されているからである。
【０００９】
そこで本発明の目的は、セグメント記述子やページ記述子などのアクセス先領域の属性を示す構造体に手を入れずにキャッシュ制御プロトコルの動的な切り替えを可能にすることにある。
【００１０】
【課題を解決するための手段】
本発明のマルチプロセッサシステムは、キャッシュメモリを介して記憶データにアクセスするプロセスの仮想空間番号及び命令セグメント番号が、仮想空間番号レジスタおよび命令セグメント番号レジスタに保持される仮想空間番号および命令セグメント番号と一致するか否かを検出し、その検出結果に応じて動的にキャッシュ制御プロトコルの切り替えを行う。つまり、主記憶上の共有メモリ領域へのアクセスを行うプロセスであるときは、キャッシュメモリの更新時に同時に主記憶も更新するストアスルー方式のキャッシュ制御プロトコルで制御し、そうでないときはキャッシュメモリの更新時点では主記憶を更新しないストアイン方式のキャッシュ制御プロトコルで制御を行う。
【００１２】
このように、主記憶上の共有メモリ領域へのアクセスを行うソフトウェアモジュールか否かを検出してキャッシュ制御プロトコルを切り替えることにより、セグメント記述子やページ記述子などのアクセス先領域の属性を示す構造体に手を入れずにキャッシュ制御プロトコルの動的な切り替えが可能となる。
【００１３】
【発明の実施の形態】
次に本発明の実施の形態の例について図面を参照して詳細に説明する。
【００１４】
図１は本発明を適用したマルチプロセッサシステムの一例を示すブロック図である。この例のマルチプロセッサシステムは、２つのプロセッサ１，２が１つの主記憶３をシステムバス４および主記憶制御部５を介して共有している。なお、ここではプロセッサの台数を２台としたが、本発明は３台以上のプロセッサが主記憶を共有するマルチプロセッサシステムに適用可能である。
【００１５】
各々のプロセッサ１，２には、図示しない演算部などに加えて、主記憶３の一部のコピーを保持するキャッシュメモリ１１，２１と、キャッシュメモリ１１，２１を制御するキャッシュ制御部１２，２２と、モジュール検出手段１３，２３とが含まれている。
【００１６】
モジュール検出手段１３，２３は、主記憶３上の共有メモリ領域へのアクセスを行うソフトウェアモジュールの実行を検出する手段である。モジュール検出手段１３の構成例を図２に示す。モジュール検出手段２３も同様の構成とすることができる。
【００１７】
図２において、仮想空間番号レジスタ１３１は、プロセッサ１において現にメモリアクセスを行おうとしているプロセスの仮想空間番号がセットされるレジスタであり、命令セグメント番号レジスタ１３２は、プロセッサ１において現に実行されているプロセス内モジュールの命令コードを格納している命令セグメントの番号がセットされるレジスタである。
【００１８】
他方、仮想空間番号レジスタ１３３は、主記憶３上の共有メモリ領域へのアクセスを行うプロセスの走行する仮想空間番号が事前に設定されているレジスタであり、命令セグメント番号レジスタ１３４は、主記憶３上の共有メモリ領域へのアクセスを行うプロセス内モジュールの命令コードを格納している命令セグメントの番号が事前に設定されているレジスタである。これらのレジスタ１３３，１３４は、ソフトウェアビジブルなレジスタであり、所望の値をソフトウェア命令によって外部より設定することができる。
【００１９】
仮想空間番号レジスタ１３１中の仮想空間番号と仮想空間番号レジスタ１３３中の仮想空間番号とは比較器１３５で比較され、命令セグメント番号レジスタ１３２中の命令セグメント番号と命令セグメント番号レジスタ１３４中の命令セグメント番号とは比較器１３６で比較される。比較器１３５，１３６の双方で一致が検出された場合、つまり、プロセッサ１において現にメモリアクセスを行おうとしているプロセス内モジュールが、主記憶３上の共有メモリ領域へのアクセスを行うものとして事前に登録されたモジュールである場合は、アンド回路１３７から出力されるキャッシュ制御方式指示ビット１３８が、キャッシュメモリの更新時に同時に主記憶も更新するストアスルー方式のキャッシュ制御プロトコルを指示する論理値１となり、それ以外は、キャッシュメモリの更新時点では主記憶を更新しないストアイン方式のキャッシュ制御プロトコルを指示する論理値０となる。
【００２０】
キャッシュ制御部１２，２２は、メモリアクセス要求時、モジュール検出手段１３，２３からのキャッシュ制御方式指示ビット１３８が論理値１を示すときは、ストアスルー方式のキャッシュ制御プロトコルで制御を行い、キャッシュ制御方式指示ビット１３８が論理値０を示すときは、ストアイン方式のキャッシュ制御プロトコルで制御を行う。
【００２１】
従って、オペレーティングシステム（ＯＳ）の或る特定モジュール（例えばシステムトレースモジュール）のみが主記憶３上の共有メモリ領域に対してアクセスする場合、仮想空間番号レジスタ１３３にＯＳが走行する仮想空間番号を事前にセットすると共に、命令セグメント番号レジスタ１３４にＯＳ内の前記特定モジュールの命令コードを格納している命令セグメントの番号を事前にセットしておけば、ＯＳの前記特定モジュール内で行われるメモリアクセスについては、ストアスルー方式のキャッシュ制御プロトコルで制御され、それ以外のモジュール（つまり共有メモリ領域をアクセスしないモジュール）内で行われるメモリアクセスについては、ストアイン方式のキャッシュ制御プロトコルで制御される。
【００２２】
図２の構成では、主記憶３の共有メモリ領域をアクセスするモジュールを１つしか検出できないが、仮想空間番号レジスタ１３３，命令セグメント番号レジスタ１３４，比較器１３５，１３６およびアンド回路１３７の組をＮ個設け、各組のアンド回路１３７の出力の論理和をとるオア回路を設ければ、主記憶３の共有メモリ領域をアクセスするモジュールをＮ個まで検出することが可能である。従って、共有メモリ領域へアクセスするＯＳモジュールが複数存在する場合にも対応することができる。また、共有メモリ領域へアクセスするのは一般的にＯＳの特定モジュールと考えられ、アプリケーションジョブが共有メモリ領域へアクセスする頻度は小さいが、若し、アプリケーションジョブの中に共有メモリ領域へアクセスするモジュールがあれば、そのようなモジュールも検出対象に含めることができる。
【００２３】
なお、上記の例では、仮想空間番号と命令セグメント番号とからどのプロセスのどのモジュールが実行されているかを検出しているが、上記以外の方法でも、特定プロセス内の特定モジュールの走行を検出することは可能である。例えば、単一の仮想空間しかない場合、仮想空間番号の比較は省略できる。
【００２４】
ストアスルー方式のキャッシュ制御プロトコルは、キャッシュメモリの更新時に同時に主記憶も更新するプロトコルであればどのようなものでも良く、ストアイン方式のキャッシュ制御プロトコルは、キャッシュメモリの更新時点では主記憶を更新しないプロトコルであればどのようなものでも良いが、以下にストアイン方式およびストアスルー方式のキャッシュ制御プロトコルの例を示す。以下のストアイン方式およびストアスルー方式のキャッシュ制御プロトコルは、何れも、キャッシュ自身が能動的にコヒーレンスを維持するスヌープ（ｓｎｏｏｐ）キャッシュ法、つまり、各キャッシュがシステムバスを流れる全てのメモリトランザクションを監視し、自分自身に影響を及ぼすトランザクションを検出するとコヒーレンスを維持するために必要な適切な処置をとる方式である。また、或るキャッシュでミスヒットが起き、かつ、最新データが主記憶になく他のキャッシュに存在する場合、キャッシュ間転送によって最新データを保持するキャッシュからミスヒットを起こしたキャッシュに直接にコピーを送ると共に主記憶にも同時に書き戻す方式である。
【００２５】
図３及び図４はそのようなキャッシュ制御プロトコルにおけるキャッシュブロックの状態遷移図であり、図３はストアイン方式、図４はストアスルー方式に対応している。キャッシュブロックはメモリとキャッシュ間の転送単位（例えば６４バイト）であり、各々のキャッシュブロックの状態は３値で制御される。１つは、主記憶やキャッシュが同じデータを持っている状態（この状態をＳｈａｒｄと呼ぶ）、他の１つは自キャッシュ内にのみ最新の更新データを持っている状態（この状態をＤｉｒｔｙと呼ぶ）、残りの１つは自キャッシュ内に該当するキャッシュブロックを保持していない状態（この状態をＩｎｖａｌｉｄと呼ぶ）である。図中の矢印は、矢印の根の状態のキャッシュブロックに対して、矢印で示される様なアクセスが行われた場合に、矢印の矢の示すキャッシュブロックの状態に遷移する事を示している。各キャッシュ制御プロトコルでは、具体的には以下のような状態遷移となる。
【００２６】
（Ａ）ストアイン方式のキャッシュ制御プロトコル（図３）
Ｉｎｖａｌｉｄの状態のキャッシュブロックに対して自プロセッサからリードリクエストが発行された場合は、該当するキャッシュブロックの最新値を主記憶または他プロセッサ内のキャッシュから読み出し、Ｓｈａｒｄの状態に遷移する（図３の（８））。また、Ｉｎｖａｌｉｄの状態のキャッシュブロックに対して自プロセッサからライトリクエストが発行された場合は、該当するキャッシュブロックの最新値を主記憶または他プロセッサ内のキャッシュから読み出し、データの更新を行って、Ｄａｒｔｙの状態に遷移する（図３の（７））。
【００２７】
Ｓｈａｒｄの状態のキャッシュブロックに対しては、自プロセッサからリードリクエストが来たら、該当するデータを自プロセッサに返却し、状態の遷移は行わない（図３の（１））。Ｓｈａｒｄの状態のキャッシュブロックに対するライトリクエストの場合は、リクエスト発行元が自プロセッサであった場合は、更新データを自キャッシュ内のみに反映し、状態をＤｉｒｔｙに遷移する（図３の（２））。ライトリクエストの発行元が他プロセッサであった場合は、キャッシュブロックの状態をＩｎｖａｌｉｄに遷移する（図３の（３））。
【００２８】
Ｄｉｒｔｙの状態のキャッシュブロックに対しては、自プロセッサからのリクエストの場合は、リードリクエスト、ライトリクエスト共に、自キャッシュ内でアクセスを処理し、状態の遷移は行わない（図３の（５））。他プロセッサからのリードリクエストの場合は、リクエストのあったキャッシュブロックをリクエスト発行元のプロセッサ内のキャッシュと主記憶に転送し、状態をＳｈａｒｄに遷移する（図３の（４））。他プロセッサからのリクエストがライトリクエストの場合は、リクエストのあったキャッシュブロックをリクエスト発行元のプロセッサ内のキャッシュと主記憶に掃き出し、状態をＩｎｖａｌｉｄに遷移する（図３の（６））。
【００２９】
（Ｂ）ストアスルー方式のキャッシュ制御プロトコル（図４）
Ｉｎｖａｌｉｄの状態のキャッシュブロックに対して、自プロセッサからのリクエストの場合は、リードリクエスト、ライトリクエスト共に、該当するキャッシュブロックの最新値を主記憶または他プロセッサ内のキャッシュから読み出し、自キャッシュ内に格納してからデータへのアクセスを行い、状態をＳｈａｒｄに遷移する（図４の（１４））。この際、ライトリクエストの場合は、更新データを自キャッシュ内に反映すると共に、メモリ及び他プロセッサ内のキャッシュにも反映させる。
【００３０】
Ｓｈａｒｄの状態のキャッシュブロックに対して、自プロセッサからのリクエストの場合は、リードリクエスト、ライトリクエスト共に、自キャッシュ内のキャッシュブロックにアクセスし、状態遷移は行わない（図４の（１１））。この際、ライトリクエストの場合は、更新データを自キャッシュ内に反映すると共に、メモリ及び他プロセッサ内のキャッシュにも反映させる。他プロセッサからのライトリクエストに対しては、システムバス経由で送られてくる他プロセッサからの更新データを自キャッシュ内に反映させて、状態遷移は行わない（図４の（１１））。
【００３１】
Ｄｉｒｔｙの状態のキャッシュブロックに対するリードリクエストに関しては、リクエストの発行元が自プロセッサであれ、他プロセッサであれ、リクエストのあったキャッシュブロックを主記憶とリクエスト発行元の他プロセッサ内のキャッシュに転送し、状態をＳｈａｒｄに遷移する（図４の（１２））。ライトリクエストの場合は、リクエスト発行元が自プロセッサの場合は、リクエストされたキャッシュブロックをシステムバスに送出し、Ｄｉｒｔｙ状態のキャッシュブロックを主記憶に先ず反映させ、キャッシュの状態をＳｈａｒｄに遷移する。次に、自キャッシュに更新データを反映させると共に、システムバス経由で、主記憶と他プロセッサ内のキャッシュに更新データを反映させる（図４の（１２））。ライトリクエストの発行元が他プロセッサの場合は、リクエストのあったキャッシュブロックを主記憶と他プロセッサ内のキャッシュに掃き出し、状態をＩｎｖａｌｉｄに遷移する（図４の（１３））。
【００３２】
図５に示すキャッシュブロックの状態遷移図は、図３の状態遷移図に、図４の状態遷移図を付け加えたものである。図３のストアイン方式のキャッシュ制御プロトコルと図４のストアスルー方式のキャッシュ制御プロトコルとを動的に切り替える場合、キャッシュブロックは図５のように状態が遷移する。なお、図５の文章中、「ストアイン方式の」とあるリクエストはキャッシュ制御方式指示ビットが０であるリクエストに対応し、「ストアスルー方式の」とあるリクエストはキャッシュ制御方式指示ビットが１であるリクエストに対応している。
【００３３】
図６は、図３および図４に示したキャッシュ制御プロトコルを採用した実施例において、プロセッサ１内に設けられるキャッシュメモリ周辺のハードウェア構成例を示すブロック図である。プロセッサ２内にも同様なハードウェアが設けられる。
【００３４】
図６において、レジスタ１３１およびレジスタ１３２は図２のレジスタ１３１，１３２に相当し、プロセッサ１内において現に実行されているプロセスが走行する仮想空間番号をレジスタ１３１が保持し、そのプロセスの現に実行されているモジュールの命令コードを格納している命令セグメントの番号をレジスタ１３２が保持する。他方、レジスタ６０１は図２のレジスタ１３３および１３４に相当し、特定プロセスの仮想空間番号およびそのプロセス内の特定モジュールの命令コードを格納している命令セグメントの番号が事前に設定されている。チェック回路６０２は図２の比較器１３５，１３６およびアンド回路１３７に相当し、プロセッサ１において現に実行されているプロセス内モジュールが事前に設定されたプロセス内モジュールであるときは、キャッシュ制御方式指示ビット１３８をストアスルー方式のキャッシュ制御プロトコルを指示する論理値１とし、それ以外はストアイン方式のキャッシュ制御プロトコルを指示する論理値０とする。
【００３５】
チェック回路６０２から出力されるキャッシュ制御方式指示ビット１３８は、プロセッサ１内でメモリリクエストが発生した場合、キャッシュに対するリクエストアドレス６０３およびリクエストコマンド６０４と一緒にセレクタ６０５を介してレジスタ６０６にセットされる。
【００３６】
レジスタ６０６の情報は、キャッシュメモリ１１の検索に供されると共にキャッシュ制御部１２の制御に使用される。キャッシュメモリ１１の検索は、キャッシュメモリ１１に格納されているキャッシュブロック毎にその主記憶３上でのアドレスの写しを保持するアドレスアレイ６０７を用いて行われる。また、アドレスアレイ６０７には、各キャッシュブロックの状態がＩｎｖａｌｉｄ，Ｓｈａｒｄ，Ｄｉｒｔｙの何れであるかを示すキャッシュ状態ビットも格納されており、キャッシュ制御部１２から参照される。
【００３７】
キャッシュ制御部１２は、レジスタ６０６中のキャッシュ制御方式指示ビットの値が１であれば、ストアスルー方式のキャッシュ制御プロトコルで制御を行い、レジスタ６０６中のリクエストアドレスで指示されたキャッシュブロックに対して、レジスタ６０６中のリクエストコマンドに応じて、図４に記述した動作と状態遷移を行う。この時、レジスタ６０６で保持している情報を信号線６０８でシステムバス４に出力し、システムバス４経由で、主記憶制御部５と他プロセッサ２内のキャッシュ制御部２２に通知する。また、キャッシュメモリ１１からレジスタ６０６の情報に応じて読み出したキャッシュブロックは、図４で記述した動作に応じて、主記憶３または他プロセッサ２内のキャッシュメモリ２１に転送する必要があれば、信号線６０９でシステムバス４に出力し、システムバス４経由で、主記憶制御部５と他プロセッサ２内のキャッシュ制御部２２に転送する。主記憶３または他プロセッサ２内のキャッシュへのキャッシュブロックの転送が必要でないのであれば、信号線６１０を通して、自プロセッサの演算部に転送を行う。
【００３８】
他方、レジスタ６０６のキャッシュ制御方式指示ビットが論理値０であれば、キャッシュ制御部１２は、ストアイン方式のキャッシュ制御プロトコルで制御を行い、レジスタ６０６のリクエストアドレスで指示されたキャッシュブロックに対して、レジスタ６０６のリクエストコマンドに応じて、図３に記述した動作と状態遷移を行う。レジスタ６０６が保持している情報とキャッシュメモリ１１から読み出したキャッシュブロックは、図３に記述した動作に応じて、必要であれば、信号線６０８，６０９で、システムバス４に出力し、システムバス４経由で、主記憶制御部５と他プロセッサ２内のキャッシュ制御部２２に通知し、自プロセッサ内の演算部へは信号線６１０を通してキャッシュブロックを転送する。
【００３９】
また、他プロセッサからのキャッシュブロックに対するリクエストは、レジスタ６０６の情報と同様に、キャッシュに対するリクエストアドレス、リクエストコマンド、キャッシュ制御方式指示ビットからなり、システムバス４を経由して、信号線６１１で受け取られ、ＦＩＦＯで制御するバッファ６１２に格納される。バッファ６１２に格納された他プロセッサからのリクエストは、ＦＩＦＯ制御により、順次、信号線６１３およびセレクタ６０５を経由して、レジスタ６０６に格納され、キャッシュメモリ１１のアクセス、キャッシュ制御部１２によるキャッシュ制御に供される。
【００４０】
図７および図８はプロセッサの処理例を示すフローチャートである。以下、本実施例の動作を説明する。なお、プロセッサ１を中心に説明する。
【００４１】
プロセッサ１において、或るプロセス内モジュールより記憶データに対するメモリアクセスが発生すると、チェック回路６０２において、メモリアクセスにかかるリクエストを出したプロセス内モジュールがレジスタ６０１に事前に設定されたプロセス内モジュールか否か、つまり、仮想空間番号およびセグメント番号が一致するか否かがチェックされる（Ｓ１０１）。仮想空間番号およびセグメント番号が一致する場合、レジスタ６０６には、リクエストアドレス６０３およびリクエストコマンド６０４に加えストアスルー方式を指示する論理値１のキャッシュ制御指示ビットがセットされ、ストアスルー方式のキャッシュ制御プロトコルに従って制御が実施される。また、仮想空間番号およびセグメント番号の何れか一方が一致しない場合、レジスタ６０６には、リクエストアドレス６０３およびリクエストコマンド６０４に加えストアイン方式を指示する論理値０のキャッシュ制御指示ビットがセットされ、ストアイン方式のキャッシュ制御プロトコルに従って制御が実施される。
【００４２】
（１）ストアスルー方式の場合
キャッシュ制御部１２は、リクエストされたデータがキャッシュメモリ１１内にあるか否かを調べる（Ｓ１０２）。キャッシュヒットした場合（Ｓ１０２でＹＥＳ）、ヒットしたキャッシュブロックの状態がＳｈａｒｄかＤｉｒｔｙかを判別する（Ｓ１０３）。Ｓｈａｒｄの場合（Ｓ１０３でＹＥＳ）、リードリクエストであれば（Ｓ１１１でＹＥＳ）、当該キャッシュブロックからデータを読み出して返却する（Ｓ１１２）。この場合、当該キャッシュブロックの状態はＳｈａｒｄのままである（図４の（１１））。ライトリクエストであれば（Ｓ１１１でＮＯ）、更新データを当該キャッシュブロックに反映する（Ｓ１１３）。そして、ストアスルー方式なので、主記憶３および他プロセッサ２のキャッシュメモリ２１のコピーを更新すべく、更新データをライトリクエスト（付随するキャッシュ制御方式指示ビットは１）でシステムバス４に送出する（Ｓ１１４）。この場合、プロセッサ１における当該キャッシュブロックの状態はＳｈａｒｄのままである（図４の（１１））。他方、ステップＳ１１４でプロセッサ１からシステムバス４に送出されたライトリクエストを受けたプロセッサ２は、該当するキャッシュブロックのコピーを保持していれば、それを更新し（図４の（１１））、また主記憶制御部５も前記ライトリクエストに応答して主記憶３上の該当するデータを更新する。
【００４３】
キャッシュヒットしたキャッシュブロックの状態がＤｉｒｔｙの場合は（Ｓ１０３でＮＯ）、キャッシュ制御部１２は、まず、該当キャッシュブロックをライトリクエスト（付随するキャッシュ制御方式指示ビットは１）でシステムバス４に送出して（Ｓ１０４）、図４の状態遷移（１２）に従って当該キャッシュブロックの状態をＳｈａｒｄに変更する（Ｓ１０５）。このとき主記憶制御部５は上記ライトリクエストに従って主記憶３上の当該キャッシュブロックに対応するデータブロックを更新する。次に、キャッシュ制御部１２はリードリクエストの場合は（Ｓ１１１でＹＥＳ）、当該キャッシュブロックからデータを読み出して返却する（Ｓ１１２）。また、ライトリクエストの場合は（Ｓ１１１でＮＯ）、更新データを当該キャッシュブロックに反映し（Ｓ１１３）、更にストアスルー方式なので、主記憶３を更新すべく、更新データをライトリクエスト（付随するキャッシュ制御方式指示ビットは１）でシステムバス４に送出する（Ｓ１１４）。
【００４４】
他方、キャッシュミスヒットした場合（Ｓ１０２でＮＯ）、キャッシュメモリ１１に新たなキャッシュブロックを読み込む空き領域があるか否かを調べる（Ｓ１０６）。空き領域がなければ（Ｓ１０６でＮＯ）、空き領域を生成した後（Ｓ１０７）、空き領域があれば（Ｓ１０６でＹＥＳ）直ちに、リクエストされたデータを含むキャッシュブロックのリードリクエスト（付随するキャッシュ制御方式指示ビットは１）をシステムバス４に送出する（Ｓ１０８）。このリードリクエストに対して、当該キャッシュブロックの最新値を主記憶３が保持している場合、主記憶制御部５がそれをシステムバス４に送出し、当該キャッシュブロックに対応するデータブロックの主記憶３における状態をＳｈａｒｄとする。また、最新値が主記憶３になく、他プロセッサ２が有していた場合は、プロセッサ２が上記リードリクエストに応じて、図４の状態遷移に従い、リクエストされたキャッシュブロックをシステムバス４に送出してプロセッサ２内での当該キャッシュブロックの状態をＳｈａｒｄに変更する（図４の（１２））。このとき主記憶制御部５はプロセッサ２からシステムバス４に送出されたキャッシュブロックで主記憶３の該当するデータブロックを更新する。
【００４５】
次にキャッシュ制御部１２は、ステップＳ１０８で発行したリードリクエストに対するキャッシュブロックをシステムバス４より受信し（Ｓ１０９）、キャッシュメモリ１１の前記空き領域に当該データを格納すると共に、図４の状態遷移（１４）に従ってそのキャッシュブロックの状態をＳｈａｒｄとする（Ｓ１１０）。そして、リクエストがリードリクエストであれば（Ｓ１１１でＹＥＳ）、当該キャッシュブロックからデータを読み出して返却し（Ｓ１１２）、ライトリクエストであれば（Ｓ１１１でＮＯ）、更新データを当該キャッシュブロックに反映し（Ｓ１１３）、更新データをライトリクエスト（付随するキャッシュ制御方式指示ビットは１）でシステムバス４に送出する（Ｓ１１４）。
【００４６】
ステップＳ１０７の空き領域の生成処理では、例えば以下のような処理が行われる。キャッシュ制御部１２は、ＬＲＵ等の周知のアルゴリズムに従って、掃き出し対象とするキャッシュブロックを１つ選択する。次に、この選択したキャッシュブロックの状態がＩｎｖａｌｉｄであれば、そのキャッシュブロックが格納されていた領域を空き領域とする。選択したキャッシュブロックの状態がＤｉｒｔｙであれば、キャッシュブロックの内容をシステムバス４を介して主記憶３に掃き出し、主記憶３の該当するデータブロックの状態をＤｉｒｔｙにさせ、そのキャッシュブロックが格納されていた領域を空き領域とする。選択したキャッシュブロックの状態がＳｈａｒｄであれば、システムバス４を介して主記憶制御部５に通知を出して該当するデータブロックの状態をＤｉｒｔｙにさせ、そのキャッシュブロックが格納されていた領域を空き領域とする。
【００４７】
（２）ストアイン方式の場合
キャッシュ制御部１２は、リクエストされたデータがキャッシュメモリ１１内にあるか否かを調べる（Ｓ１２１）。キャッシュヒットした場合（Ｓ１２１でＹＥＳ）、ヒットしたキャッシュブロックの状態がＳｈａｒｄかＤｉｒｔｙかを判別する（Ｓ１３１）。Ｓｈａｒｄの場合（Ｓ１３１でＹＥＳ）、リードリクエストであれば（Ｓ１２７でＹＥＳ）、当該キャッシュブロックからデータを読み出して返却する（Ｓ１２８）。この場合、当該キャッシュブロックの状態はＳｈａｒｄのままである（図３の（１））。他方、ライトリクエストであれば（Ｓ１２７でＮＯ）、更新データを当該キャッシュブロックに反映する（Ｓ１２９）。そして、ストアイン方式なので、図３の状態遷移（２）に従い、当該キャッシュブロックの状態をＤｉｒｔｙとする（Ｓ１３０）。なお、ステップＳ１３０では、当該ライトリクエストがシステムバス４を介して主記憶制御部５および他プロセッサ２に通知され、主記憶制御部５は該当データブロックの状態がＳｈａｒｄであればそれをＩｎｖａｌｉｄとし、プロセッサ２は該当キャッシュブロックの状態がＳｈａｒｄであれば図３の状態遷移（３）に従いＩｎｖａｌｉｄとする。
【００４８】
キャッシュヒットしたキャッシュブロックの状態がＤｉｒｔｙの場合（Ｓ１３１でＮＯ）、キャッシュ制御部１２は、リードリクエストであれば（Ｓ１３２でＹＥＳ）、当該キャッシュブロックからデータを読み出して返却し（Ｓ１３３）、ライトリクエストであれば（Ｓ１３２でＮＯ）、更新データを当該キャッシュブロックに反映する（Ｓ１３４）。ストアイン方式なので、主記憶３への掃き出しはない。また、何れの場合も当該キャッシュブロックの状態の遷移はない（図３の（５））。
【００４９】
他方、キャッシュミスヒットした場合（Ｓ１２１でＮＯ）、キャッシュ制御部１２は、キャッシュメモリ１１に新たなキャッシュブロックを読み込む空き領域があるか否かを調べる（Ｓ１２２）。空き領域がなければ（Ｓ１２２でＮＯ）、ステップＳ１０７と同様にして空き領域を生成した後（Ｓ１２３）、空き領域があれば（Ｓ１２２でＹＥＳ）直ちに、リクエストされたデータを含むキャッシュブロックのリードリクエスト（付随するキャッシュ制御方式指示ビットは０）をシステムバス４に送出する（Ｓ１２４）。このリードリクエストに対して、当該キャッシュブロックの最新値を主記憶３が保持している場合、主記憶制御部５がそれをシステムバス４に送出し、当該キャッシュブロックに対応するデータブロックの主記憶３における状態をＳｈａｒｄとする。また、最新値が主記憶３になく、他プロセッサ２が有していた場合は、プロセッサ２が上記リードリクエストに応じて、図３の状態遷移に従い、リクエストされたキャッシュブロックをシステムバス４に送出してプロセッサ２内での当該キャッシュブロックの状態をＳｈａｒｄに変更する（図３の（４））。このとき主記憶制御部５はプロセッサ２からシステムバス４に送出されたキャッシュブロックで主記憶３の該当するデータブロックを更新する。
【００５０】
次にキャッシュ制御部１２は、ステップＳ１２４で発行したリードリクエストに対するキャッシュブロックをシステムバス４より受信し（Ｓ１２５）、キャッシュメモリ１１の前記空き領域に当該データを格納すると共に、そのキャッシュブロックの状態をＳｈａｒｄとする（Ｓ１２６）。そして、リクエストがリードリクエストであれば（Ｓ１２７でＹＥＳ）、当該キャッシュブロックからデータを読み出して返却する（Ｓ１２８）。この場合、当該キャッシュブロックの状態は最終的にＳｈａｒｄである（図３の（８））。また、ライトリクエストであれば（Ｓ１２７でＮＯ）、更新データを当該キャッシュブロックに反映し（Ｓ１２９）、図３の状態遷移（７）に従い、当該キャッシュブロックの状態をＤｉｒｔｙとする（Ｓ１３０）。なお、ステップＳ１３０では、前述したように、当該ライトリクエストがシステムバス４を介して主記憶制御部５および他プロセッサ２に通知され、主記憶制御部５は該当データブロックの状態がＳｈａｒｄであればそれをＩｎｖａｌｉｄとし、プロセッサ２は該当キャッシュブロックの状態がＳｈａｒｄであれば図３の状態遷移（３）に従いＩｎｖａｌｉｄとする。
【００５１】
【発明の効果】
以上説明したように本発明によれば、アクセス先の領域を検出してキャッシュ制御プロトコルの切り替えを行うのではなく、主記憶上の共有メモリ領域へのアクセスを行うソフトウェアモジュールか否かを検出してキャッシュ制御プロトコルを切り替えるものであり、セグメント記述子やページ記述子などのアクセス先領域の属性を示す構造体に手を入れずにキャッシュ制御プロトコルの動的な切り替えが可能となる。
【００５２】
また、事前に設定する情報は主記憶上の共有メモリ領域へのアクセスを行うソフトウェアモジュールを特定する仮想空間番号，命令セグメント番号といった少量の情報で済み、大量のセグメント記述子やページ記述子の各々に対して制御情報を設定しなければならない従来技術に比べて事前の処理が格段に簡便化される。
【図面の簡単な説明】
【図１】本発明を適用したマルチプロセッサシステムの一例を示すブロック図である。
【図２】モジュール検出手段の構成例を示すブロック図である。
【図３】ストアイン方式のキャッシュ制御プロトコルにおけるキャッシュブロックの状態遷移図である。
【図４】ストアスルー方式のキャッシュ制御プロトコルにおけるキャッシュブロックの状態遷移図である。
【図５】図３の状態遷移図に図４の状態遷移図を付け加えた状態遷移図である。
【図６】図３および図４に示したキャッシュ制御プロトコルを採用した実施例において、プロセッサ内に設けられるキャッシュメモリ周辺のハードウェア構成例を示すブロック図である。
【図７】プロセッサの処理例を示すフローチャートである。
【図８】プロセッサの処理例を示すフローチャートである。
【符号の説明】
１，２…プロセッサ
３…主記憶
４…システムバス
５…主記憶制御部
１１，２１…キャッシュメモリ
１２，２２…キャッシュ制御部
１３，２３…モジュール検出手段
１３１，１３３…仮想空間番号レジスタ
１３２，１３４…命令セグメント番号レジスタ
１３５，１３６…比較器
１３７…アンド回路
１３８…キャッシュ制御方式指示ビット
６０１，６０６…レジスタ
６０２…チェック回路
６０３…リクエストアドレス
６０４…リクエストコマンド
６０５…セレクタ
６０７…アドレスアレイ
６０８，６０９，６１０，６１１，６１３…信号線
６１２…バッファ
【図１】
0003626609.tif 000002
【図２】
0003626609.tif 000003
【図３】
0003626609.tif 000004
【図４】
0003626609.tif 000005
【図５】
0003626609.tif 000006
【図６】
0003626609.tif 000007
【図７】
0003626609.tif 000008
【図８】
0003626609.tif 000009