(57)【特許請求の範囲】
【請求項１】
キャッシュを有するプロセッサを少なくとも一つ備えた計算機システムに適用されるキャッシュフラッシュ装置において、
全プロセッサ分のキャッシュのモディファイドブロックに関するアドレス情報をキャッシュライン単位で各エントリに記憶する第１の記憶手段と、
前記第１の記憶手段上の各エントリのうち、少なくとも一つのモディファイドブロックのアドレスを含むエントリのインデックスを検索するために使用する情報を記憶する第２の記憶手段と
を具備し、前記第２の記憶手段の情報を使用することによってモディファイドブロックのアドレスを高速に読み出せるようにしたことを特徴とするキャッシュフラッシュ装置。
【請求項２】
キャッシュを有するプロセッサを少なくとも一つ備えた計算機システムに適用されるキャッシュフラッシュ装置において、
全プロセッサ分のキャッシュのモディファイドブロックに関するアドレス情報をキャッシュライン単位で各エントリに記憶する第１の記憶手段と、
前記第１の記憶手段上の各エントリのうち、少なくとも一つのモディファイドブロックのアドレスを含むエントリのインデックスを検索するための情報として、各エントリ内にある全プロセッサ分のモディファイビットを論理和した値を有するデータを前記インデックスに対応付けて記憶する第２の記憶手段と
を具備し、前記第２の記憶手段の情報を使用することによってモディファイドブロックのアドレスを高速に読み出せるようにしたことを特徴とするキャッシュフラッシュ装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、キャッシュを有するユニプロセッサまたはマルチプロセッサにより構成される計算機システムに適用されるキャッシュフラッシュ装置及び方法に関する。
【０００２】
【従来の技術】
一般に、計算機においては、プロセッサによるメインメモリへのアクセスを高速化するために、プロセッサが必要とするデータを一時的に格納するキャッシュが用いられている。通常、このキャッシュは、キャッシュブロックと呼ばれる所定の大きさのデータ単位でデータを保持する。また、このキャッシュは、キャッシュタグと呼ばれる管理情報を保持して、キャッシュに格納したキャッシュブロックのデータが、メインメモリの中のどのデータであるのか、およびプロセッサによって変更されてメインメモリの内容と異なっている状態（モディファイド状態、ダーティ状態）にあるか等を管理している。
【０００３】
プロセッサを複数設けた計算機システム（マルチプロセッサシステム）においては、複数のキャッシュ間でデータの一貫性を保証するために、スヌープ機構をもったキャッシュがよく用いられる。このスヌープ機構は、バス上に発行されたバスコマンド（又はトランザクション）が、自身のキャッシュに格納されたデータに影響を与えないか、あるいは自身のキャッシュに格納されたデータを応答として返さなければならないかを監視し、必要であれば、該当するデータの無効化などを行うものである。
【０００４】
コピーバック型のキャッシュの場合、すなわち、プロセッサによるデータの更新を直ちにメインメモリに反映させないタイプのキャッシュの場合、プロセッサによってキャッシュ上で変更されてメインメモリの内容と異なっているデータ（モディファイド状態のデータ）を、積極的にメインメモリへ書き戻す操作が必要となる。例えば、スヌープ機構を持たない入出力装置に対してキャッシュが保持するデータを転送する場合などに必要となる。このキャッシュが保持するデータのうち、モディファイド状態にあるデータをメインメモリに書き戻すことをキャッシュフラッシュと呼ぶ。また、モディファイド状態にあるキャッシュブロックをモディファイドブロックと呼ぶ。
【０００５】
このキャッシュフラッシュは、特に、チェックポイント方式の計算機において必要とされる処理である。すなわち、計算機に何らかの障害が発生したときに、予め取得しておいたチェックポイントの時点から処理を再開するチェックポイント方式の計算機の場合、各チェックポイントの時点で、キャッシュ中にのみ存在する変更されたデータをまとめてメインメモリに書き戻す（キャッシュフラッシュする）必要があるためである。
【０００６】
上記キャッシュフラッシュ操作を実現する方式としては、プロセッサにキャッシュフラッシュ命令を実行させる方式と、キャッシュフラッシュ装置を用いてキャッシュフラッシュ命令を実行させる方式とが挙げられる。
【０００７】
【発明が解決しようとする課題】
プロセッサにキャッシュフラッシュ命令を実行させる方式では、キャッシュフラッシュを実行している期間中は、そのプロセッサが他のプログラムを実行することはできないため、本来のデータ処理を停止させなければならず、システム全体の性能低下を招いてしまう。また、プロセッサの種類によってはキャッシュが全て無効化されるものがある。キャッシュが全て無効化された場合、処理を再開させる時には全ての命令、データをメインメモリから再び読み出さなくてはならないため、処理再開時のオーバーヘッドが大きい。特に、プロセッサにキャッシュフラッシュ命令を実行させる方式では、キャッシュフラッシュ時間を短縮するのに有効な２相チェックポイント方式（チェックポイント取得システム（特願平7-151739））を採用することができないという問題がある。
【０００８】
一方、キャッシュフラッシュ装置を用いる方式では、キャッシュ上のモディファイドブロックに関するアドレス情報を保持する記憶部がキャッシュフラッシュ装置に備えられるが、この記憶部に保持されたモディファイドブロックの格納位置を検索するのに無駄な時間を費やしてしまうという問題がある。特に、チェックポイント処理時においては、キャッシュフラッシュのために全てのモディファイドブロックのアドレスを記録手段から逐次読み出さなければならず、この際にモディファイドブロックの格納位置を検索するのにかなりの時間をかけてしまう。このことは、特にチェックポイント処理時におけるオーバーヘッドを増大してしまうことになる。
【０００９】
本発明は上記実情に鑑みてなされたものであり、高速なキャッシュフラッシュを実現し、チェックポイント処理時におけるオーバーヘッドを低減するキャッシュフラッシュ装置及び方法を提供することを目的とする。
【００１０】
【課題を解決するための手段】
上記課題を解決するために、本発明のキャッシュフラッシュ装置は、キャッシュを有するプロセッサを少なくとも一つ備えた計算機システムに適用されるキャッシュフラッシュ装置において、全プロセッサ分のキャッシュのモディファイドブロックに関するアドレス情報をキャッシュライン単位で各エントリに記憶する第１の記憶手段と、前記第１の記憶手段上の各エントリのうち、少なくとも一つのモディファイドブロックのアドレスを含むエントリのインデックスを検索するために使用する情報を記憶する第２の記憶手段とを具備し、前記第２の記憶手段の情報を使用することによってモディファイドブロックのアドレスを高速に読み出せるようにしたことを特徴とする。
【００１１】
また、上記課題を解決するために、本発明のキャッシュフラッシュ装置は、キャッシュを有するプロセッサを少なくとも一つ備えた計算機システムに適用されるキャッシュフラッシュ装置において、全プロセッサ分のキャッシュのモディファイドブロックに関するアドレス情報をキャッシュライン単位で各エントリに記憶する第１の記憶手段と、前記第１の記憶手段上の各エントリのうち、少なくとも一つのモディファイドブロックのアドレスを含むエントリのインデックスを検索するための情報として、各エントリ内にある全プロセッサ分のモディファイビットを論理和した値を有するデータを前記インデックスに対応付けて記憶する第２の記憶手段とを具備し、前記第２の記憶手段の情報を使用することによってモディファイドブロックのアドレスを高速に読み出せるようにしたことを特徴とする。
【００４７】
【発明の実施の形態】
以下、図面を参照して本発明の実施の形態を説明する。
【００４８】
まず、実施の形態を詳細に説明する前に、本発明を理解しやすくする観点から、各実施の形態に表現された発明の基本的な考えを簡単に説明しておく。
【００４９】
本発明のキャッシュフラッシュ装置は、全プロセッサ分のキャッシュのモディファイドブロックに関するアドレス情報をキャッシュライン単位で各エントリに記憶するＭＢＴ(Modified Block Table)メモリ（実施形態ではMBT Tag RAM）の 他に、このＭＢＴメモリ上の各エントリのうち、少なくとも一つのモディファイドブロックのアドレスを含むエントリのインデックスを検索するための情報として、各エントリ内にある全プロセッサ分のモディファイビットを論理和した値を有するデータを前記インデックスと共に記憶するＭＦ(Modified Flag)メモリ（ 実施形態ではMF RAM）を備えている。
【００５０】
キャッシュフラッシュ時には、ＭＦメモリに記憶された情報を用いることによってモディファイドブロックのアドレスを高速に読み出せるようにし、キャッシュフラッシュの高速化を実現するというものである。
【００５１】
ＭＦメモリに記憶すべき情報を生成するには、まず、ＭＢＴメモリに登録されているモディファイドビットを、キャッシュライン毎に、全プロセッサ分について論理和をとる。そして、キャッシュライン毎に得られた論理和の結果を所定のビット数分（所定のキャッシュライン数分）まとめてＭＦメモリに保存する。キャッシュライトバック時には、ＭＦメモリの中を検索することで、ＭＢＴメモリ上のモディファイドブロックを含むエントリのインデックスを取り出し、これにより対応するモディファイドブロックのアドレスをＭＢＴメモリから読み出せるので、キャッシュライトバックの高速化が可能となるのである。
【００５２】
従来方式では、ライトバック時にはＭＢＴメモリを“モディファイドブロックの検索”と“モディファイドブロックの読み出し”とで共用していたため、ＭＢＴメモリアクセスがチェックポイント処理のボトルネックとなっていたが、本発明によれば、ＭＦメモリを追加することで、ＭＢＴメモリにおいて“モディファイドブロックの読み出し”に専念できる。このように“モディファイドブロックの検索”をＭＦメモリを用いて行うことにより、ＭＢＴメモリのアクセスの際に、モディファイドブロックのアドレスのみを高速に読み出せるのである。
【００５３】
また、本発明において、２相チェックポイント方式と呼ばれる技術の全部又は一部を採用することで効果を一層向上させることが可能となる。
【００５４】
本実施形態で採用する２相チェックポイント方式は、チェックポイント時のキャッシュ書き戻し時間を短縮するための方式であり、ファーストフェーズとセカンドフェーズとがある。ファーストフェーズチェックポイントではプロセッサ間の同期を取らず、プロセッサが通常処理をしながらキャッシュフラッシュを行う。よって、ファーストフェーズチェックポイント終了時点ではプロセッサ内に（新たに発生した）モディファイドブロックが存在しており、システム状態は確定していない。一方、セカンドフェーズチェックポイントではプロセッサ間で同期を取り、ワークエリアを除いてプロセッサはキャッシュにモディファイドブロックを生成しない状態でキャッシュフラッシュを実行するというものである。
【００５５】
［第１実施形態］
図１は、本発明に係るキャッシュフラッシュ装置が適用される計算機システムの構成の一例を示すブロック図である。
【００５６】
図１において、１は本発明のキャッシュフラッシュ装置であり、プロセッサのキャッシュ状態を監視し、高速なキャッシュフラッシュを行う。
【００５７】
２はMF RAMであり、MBT Tag RAM３上のモディファイドブロックを持つエント リ（キャッシュライン）のインデックスをキャッシュフラッシュ時に高速に検索するためのメモリである。このMF RAM２は、MBT Tag RAM３におけるインデック スを検索するために使用する情報を記憶しており、MBT Tag RAM３のインデック ス単位で、当該インデックスの一部とデータ（モディファイドフラグ及びパリティビットを含む）とを各エントリに記憶している。
【００５８】
３はMBT Tag RAM（ＭＢＴメモリ）であり、ＭＢＴ(Modified Block Table)と 呼ばれるテーブルを有している。ＭＢＴは、全プロセッサ分のキャッシュのモディファイドブロックに関するアドレス情報をキャッシュライン単位で各エントリに記憶しており、インデックスとデータ（全プロセッサ分のタグ、モディファイドビット、及びパリティビットを含む）とを記憶している。また、MBT Tag RAM ３は、キャッシュフラッシュを実行することが可能なハードウェアであり、キャッシュフラッシュが実行されると、ワークエリアを除いてＭＢＴ上のキャッシュステートがクリーン（MESIプロトコルの場合、S（Shared）又はI（Invalid）） となる。
【００５９】
５はプロセッサバスであり、プロセッサ、メモリ、バスブリッジ等が接続され、データの受け渡しを行う。
【００６０】
７０１、７１１、７２１、７３１はプロセッサ（ＣＰＵ０〜３）である。７０２、７１２、７２２、７３２はそれぞれプロセッサ（ＣＰＵ０〜３）７０１、７１１、７２１、７３１に接続されるキャッシュである。
【００６１】
８００はメモリコントローラであり、主記憶の制御を行う。８０１はメモリバスであり、メモリコントローラとメモリモジュール間のデータの受け渡しと制御信号の伝播を行う。８１０、８１１、８１２、８１３はメモリモジュールであり、ＤＲＡＭで構成されるメモリの実体である。
【００６２】
９００はＰＣＩブリッジであり、プロセッサバス５とＰＣＩバス９０１の間のデータ転送を行う。９０１はＰＣＩバスである。９１０はＰＣＩバスエージェントの一例であるＩＳＡブリッジであり、ＰＣＩバス９０１とＩＳＡバス９１１のデータ転送を行う。９２０はＰＣＩバスエージェントの一例であるＬＡＮアダプタであり、ＰＣＩバス９０１とＬＡＮ９２１のデータ転送を行う。９２１はＬＡＮであり、他のコンピュータシステムとの通信を行う。
【００６３】
９５０はＰＣＩブリッジであり、プロセッサバス５とＰＣＩバス９５１の間のデータ転送を行う。９６０はＰＣＩバスエージェントの一例であるグラフィックアダプタであり、ディスプレイ９６１の表示制御を行う。９６１はディスプレイである。９７０はＰＣＩバスエージェントの一例であるディスクコントローラであり、ディスク９７１とＰＣＩバス９５１のデータ転送を行う。９７１はディスクであり、データを保存する。
【００６４】
この第１実施形態のキャッシュフラッシュ装置は、キャッシュ上のブロック毎のキャッシュステートを示すアドレス情報を記憶するMBT Tag RAM３と、このMBT Tag RAM３に記憶されたアドレス情報のうちのモディファイドブロック情報を有するエントリのインデックスを検索するための情報として、当該第１の記憶手段の各エントリ内にある複数のモディファイビットの論理和した値を有するデータを前記インデックスと共に記憶するMF RAM２とを備えている。
【００６５】
キャッシュフラッシュ時には、MF RAM２に記憶された情報を用いることによって、MF RAM２における少なくとも一つのモディファイドブロックを有するエントリのインデックスを検索できるようにし、キャッシュフラッシュの高速化を実現するというものである。
【００６６】
MF RAM２に記憶すべき情報を生成するには、まず、MBT Tag RAM３に登録され ているモディファイドビットを、キャッシュライン毎に、全プロセッサ分（例えばＣＰＵ４つ分）について論理和をとる。そして、キャッシュライン毎に得られた論理和の結果を例えば８ビット分（キャッシュライン８本分）まとめてMF RAM２に保存する。キャッシュライトバック時には、MF RAM２の中を検索することで、MBT Tag RAM３上のモディファイドブロックを含むエントリのインデックスを 取り出し、これにより対応するモディファイドブロックのアドレスをMBT Tag RAM３から読み出せるので、キャッシュライトバックの高速化が可能となる。なお 、こうした一連の処理の詳細については後で説明する。
【００６７】
図２は、本発明の第１実施形態に係るキャッシュフラッシュ装置の構成を示すブロック図である。
【００６８】
２００はMF RAM制御部であり、MF RAMの制御とMF RAMデータの生成を行う。
【００６９】
２０１はMF RAMアドレス出力レジスタであり、MF RAMのインデックスであるSRAMアドレスを保持する。
【００７０】
２０２はMF RAMアドレスセレクタであり、MF RAMリードアドレスバッファ２０３の出力とMF RAMライトバッファ２１１の出力からMF RAMアドレス出力レジスタ２０１のアドレスを選択する。
【００７１】
２０３はMF RAMリードアドレスバッファであり、MF RAMへのリードアクセスを保持するＦＩＦＯバッファである。
【００７２】
２０４はMF RAMアドレスマッチバッファであり、MF RAMリードアドレスセレクタ２０５の出力がMF RAMリードアドレスバッファ２０３に入力されるまでの３サイクルで、MF RAM制御部２００の先行するアクセスに同一MF RAMインデックスのエントリが存在するか否かを検出する機構である。
【００７３】
２０５はMF RAMリードアドレスセレクタであり、MF RAMインデックスカウンタ２０６とＴ２Ｆアクセスバッファ２０７の出力からMF RAMアドレスマッチバッファ２０４の入力を選択する。
【００７４】
２０６は、キャッシュフラッシュ時にMF RAMを検索するためのアドレスを生成する１２ビットのインデックスカウンタである。
【００７５】
２０７はＴ２Ｆアクセスバッファであり、MBT Tag RAM制御部３００からのMF RAM更新要求を受け取るためのＦＩＦＯバッファである。
【００７６】
２１０はMF RAMライトデータレジスタであり、次にMF RAMに書き込むデータを保持する。
【００７７】
２１１はMF RAMライトバッファであり、MF RAMに書き込むデータを保持するＦＩＦＯバッファである。
【００７８】
２２０はMF RAMリードデータレジスタであり、MF RAM２からのリードデータとそれに対応するMF RAMインデックス、MF RAM更新情報等を保持する。
【００７９】
２２１はMF RAMモディファイド検出機構であり、MF RAMインデックスカウンタ２０６で生成されたMF RAMアドレスによるMF RAM２からのリードデータであるモディファイドフラグ８ビットの論理和をとり、このMF RAMインデックスに対応するキャッシュブロックに“Modified”が存在するか否かを判定する。
【００８０】
２２２はMF RAM先読みバッファであり、MF RAMモディファイド検出機構２２１で“Modified”があると判定されたMF RAMデータを保持するＦＩＦＯバッファである。
【００８１】
２２３はMF RAMキャッシュフラッシュ系変更ロジックであり、MF RAM先読みバッファ２２２にあるモディファイドフラグと対応するMF RAMインデックスからMBT Tag RAMインデックスを復元してMBT Tag RAM制御部３００に通知し、全てのモディファイドフラグを通知し終えるとモディファイドフラグを全て“０”にしてMF RAMライトバッファ２１１に通知する。尚、MF RAMキャッシュフラッシュ系変更ロジックとMF RAMライトバッファ２１１はハンドシェーク方式でデータの受け渡しを行う。
【００８２】
２２４はMF RAM通常系変更ロジックであり、MF RAM２から読み込んだデータをMBT Tag RAM制御部３００に指定された値に変更してMF RAMライトバッファ２１ １に通知する。尚、MF RAM通常系変更ロジックからの出力要求があるとMF RAMライトバッファ２１１に無条件で登録する。
【００８３】
３００はMBT Tag RAM制御部であり、MBT Tag RAMの制御とMBT Tag RAMデータ の生成を行う。
【００８４】
３０１はMBT Tag RAMアドレス出力レジスタであり、MBT Tag RAM３のインデックスであるSRAMアドレスを保持する。
【００８５】
３０２はMBT Tag RAMアドレスセレクタであり、MBT Tag RAMリードアドレスバッファ２０３の出力とMBT Tag RAMライトバッファ３１１の出力からMBT Tag RAMアドレス出力レジスタ３０１のアドレスを選択する。
【００８６】
３０３はMBT Tag RAMリードアドレスバッファであり、MBT Tag RAMへのリードアクセスを保持するＦＩＦＯバッファである。
【００８７】
３０４はMBT Tag RAMアドレスマッチバッファであり、MBT Tag RAMリードアドレスセレクタ３０５の出力がMBT Tag RAMリードアドレスバッファ３０３に入力 されるまでの３サイクルで、MBT Tag RAM制御部３００の先行するアクセスに同 一MBT Tag RAMインデックスのエントリが存在するか否かを検出する機構である 。
【００８８】
３０５はMBT Tag RAMリードアドレスセレクタであり、MBT Tag RAMインデックスカウンタ３０６とＦ２Ｔアクセスバッファ３０７の出力、およびＢ２Ｔアクセスバッファ３０８からMBT Tag RAMアドレスマッチバッファ３０４の入力を選択 する。
【００８９】
３０６は、ファーストフェーズのキャッシュフラッシュ時にMBT Tag RAMを検 索するためのアドレスを生成する１５ビットのインデックスカウンタである。
【００９０】
３０７はＦ２Ｔアクセスバッファであり、MF RAM制御部２００からのMBT Tag RAM検索要求を受け取るためのＦＩＦＯバッファである。セカンドフェーズのラ イトバックに使用される。
【００９１】
３０８はＢ２Ｔアクセスバッファであり、プロセッサバススヌーパ５００からのMBT Tag RAM変更要求を受け取るためのＦＩＦＯバッファである。通常処理時 のＭＢＴ変更に使用される。
【００９２】
３１０はMBT Tag RAMライトデータレジスタであり、次にMBT Tag RAMに書き込むデータを保持する。
【００９３】
３１１はMBT Tag RAMライトバッファであり、MBT Tag RAMに書き込むデータを保持するＦＩＦＯバッファである。
【００９４】
３２０はMBT Tag RAMリードデータレジスタであり、MBT Tag RAM３からのリードデータとそれに対応するMBT Tag RAMインデックス、MBT Tag RAM更新情報等を保持する。
【００９５】
３２１はMBT Tag RAMモディファイド検出機構であり、MBT Tag RAMインデックスカウンタ３０６で生成されたMBT Tag RAMアドレス、またはＦ２Ｔアクセスバ ッファ３０７から出力されたMBT Tag RAMアドレスによるMBT Tag RAM３からのリードデータのうちモディファイドビット４ビットの論理和をとり、このMBT Tag RAMインデックスに対応するキャッシュブロックに“Modified”が存在するか否 かを判定する。
【００９６】
３２２はMBT Tag RAM先読みバッファであり、MBT Tag RAMモディファイド検出機構３２１で“Modified”があると判定されたMBT Tag RAMデータを保持するＦ ＩＦＯバッファである。
【００９７】
３２３はMBT Tag RAMキャッシュフラッシュ系変更ロジックであり、MBT Tag RAM先読みバッファ３２２にあるモディファイドビットと対応するMBT Tag RAMイ ンデックスからモディファイドブロックの物理アドレスを復元してＭＢＷＢバッファ４００に通知し、全てのモディファイドビットを通知し終えるとモディファイドビットを全て“０”にしてMBT Tag RAMライトバッファ３１１に通知する。 尚、MBT Tag RAMキャッシュフラッシュ系変更ロジックとMBT Tag RAMライトバッファ３１１はハンドシェーク方式でデータの受け渡しを行う。
【００９８】
３２４はMBT Tag RAM通常系変更ロジックであり、MBT Tag RAM３から読み込んだデータをプロセッサバススヌーパ５００でのバススヌープ結果に対応する値に変更してMBT Tag RAMライトバッファ３１１に通知する。尚、MBT Tag RAM通常系変更ロジックからの出力要求があるとMBT Tag RAMライトバッファ３１１に無条 件で登録する。また、既に“Modified”が登録されているブロックに対して新たなモディファイが登録される場合、古いモディファイブロックの物理アドレスをＭＢＷＢバッファ４００に通知してモディファイブロックのライトバックを強制的に行わせてMBTとプロセッサのキャッシュステートに矛盾が発生しないように させる。
【００９９】
４００はＭＢＷＢバッファであり、MBT Tag RAM制御部３００からのモディフ ァイドブロックライトバック要求を保持する。
【０１００】
４０１はキャッシュフラッシュ系ライトバックバッファであり、MBT Tag RAM キャッシュフラッシュ系変更ロジック３２３から通知されたモディファイブロックライトバック要求を保持するＦＩＦＯバッファである。尚、本バッファはMBT Tag RAMキャッシュフラッシュ系変更ロジック３２３とハンドシェークでデータ の受け渡しを行う。
【０１０１】
４０２は通常処理系ライトバックバッファであり、MBT Tag RAM通常処理系変 更ロジック３２４から通知されたモディファイブロックライトバック要求を保持するＦＩＦＯバッファである。尚、本バッファはMBT Tag RAM通常処理系変更ロ ジック３２４からライトバック要求を受け付けると無条件で登録する。
【０１０２】
４０３はライトバックバッファであり、ライトバックスピード調整機構４１０と通常処理系ライトバックバッファ４０２からのライトバック要求を受け取り、保持するＦＩＦＯバッファである。本バッファは、ライトバックスピード調整機構４１０と通常処理系ライトバックバッファ４０２とハンドシェーク方式でデータの受け渡しを行う。通常処理系ライトバックバッファ４０２からのライトバック要求がある場合には通常処理系ライトバックバッファ４０２からのライトバック要求を登録する。通常処理系ライトバックバッファ４０２からのライトバック要求がなく、ライトバックスピード調整機構４１０からのライトバック要求がある場合にはライトバックスピード調整機構４１０からのライトバック要求を登録する。
【０１０３】
４１０はライトバックスピード調整機構であり、ファーストフェーズでのチェックポイント処理のときにキャッシュフラッシュ系ライトバックバッファ４０１からのライトバック要求をライトバックバッファ４０１に通知する間隔を調整する。
【０１０４】
５００はプロセッサバススヌーパであり、プロセッサバス５上のバストランザクションを監視し、キャッシュ状態が変化する場合にMBT Tag RAM制御部３００ に通知する。
【０１０５】
６００はバスマスタであり、プロセッサバス５へバストランザクションを発行する。
【０１０６】
６０１はバス出力レジスタであり、プロセッサバスへ出力するキャッシュフラッシュアドレスを保持する。
【０１０７】
ところで、従来方式においては、上記MF RAM２及びMF RAM制御部２００を設けずに、以下のような構成を採っていた。すなわち、MBT Tag RAM３にインデック スカウンタを直結することにより、キャッシュフラッシュ時にモディファイドブロックを探し出し、バスにキャッシュフラッシュを誘発するメモリリードを発行する。メモリ検索時には読みだしたラインに必ずしも“Modified”があるとは限らないので、以下に示す“先読みバッファ”を設ける。
【０１０８】
先読みバッファはＭＢＴ出力アドレス確定からデータラッチまでのサイクル数（４サイクル）に若干のマージンをもたせた段数（８段）のＦＩＦＯバッファで、“Modified”のあるラインだけをバッファに取り込み、“Modified”のないラインは取り込まないようにしてある。アドレス出力の段階では読みだしたラインに“Modified”があるか否かわからないので、読み出し中の全てのラインに“Modified”がある場合でもバッファの取りこぼしがないようにしなくてはならない。よって、先読みバッファの空きエントリがＭＢＴ出力アドレス確定からデータラッチまでのサイクル数（４サイクル）になった時点でメモリリード発行を停止する必要がある。
【０１０９】
“Modified”のあるラインを効率よく捜すという観点からすると、先読みバッファは深い程良い（段数が多い程よい）。しかし、１ライン３２バイトの３６ビットアドレスを４プロセッサ分まとめて１Mバイトダイレクトマップ方式のＭＢ Ｔで管理すると１エントリあたり、
・インデックス：１５ビット（１Mバイト（２０ビット）を１ライン３２バ イト（５ビット）単位で管理）
・タグ：６４ビット（１６ビットを４プロセッサ分）
・モディファイドフラグ：４ビット（１ビットを４プロセッサ分）
の８３ビットが最低限必要である。フリップフロップは１個あたり１０ゲート強のハード量を必要とするので、先読みバッファ３２２は１エントリあたり約１k ゲートのハード量が必要となる。
【０１１０】
モディファイドライン検索は（“Modified”が全く存在しない最速の場合でも）インデックス全体分かかる。上記例では、１サイクルに１個読むとすると３２kサイクル（１５ビット分）かかる計算になる。
【０１１１】
従来においてはこうした非効率の問題があったが、本発明の第１実施形態は、以下に説明するようにこれを解消するものである。
【０１１２】
第１実施形態では、プロセッサバス５上でやり取りされる物理アドレスは、３２バイトの３６ビット幅をもち、タグ（１６ビット）、インデックス（１５ビット）、及びブロック（５ビット）により構成されるものとする。
【０１１３】
上記MBT Tag RAM３では、１ライン３６ビット幅の物理アドレスを４プロセッ サ分まとめて１Ｍバイトダイレクトマップ方式のＭＢＴで管理する。この場合、１ラインあたり、
・インデックス：１５ビット
・タグ（データ）：６４ビット
・モディファイドビット（データ）：４ビット
・パリティ：４ビット
の構成となる。
【０１１４】
MF RAM２では、MBT Tag RAM３における４つのモディファイドビットの論理和 を８個つなげたものを１エントリする。この場合、１ラインあたり、
・インデックス：１２ビット（１５ビット中３ビットをデータとする）
・モディファイドフラグ（データ）：８ビット
・パリティ：１ビット
の構成となる。
【０１１５】
MBT Tag RAM３、MF RAM２のインデックスとタグは、実メモリアドレスに対し て図３のように対応する。
【０１１６】
MBT Tag RAM３では、アドレス[4:0]はキャッシュライン内の情報なので無視してよい。ＭＢＴはキャッシュライン単位で管理しているためである。アドレス[19:5]は、MBT Tag RAM３のインデックス（アドレス）として扱われる。アドレス[35:20]は、MBT Tag RAM３のタグ（データ）として扱われる。タグはキャッシュ フラッシュ時にインデックスと組み合わせてキャッシュラインの実アドレスを復元するのに使用される。
【０１１７】
MF RAM２では、アドレス[7:5]をモディファイドフラグとよび、MF RAM２のデ ータとして扱われる。アドレス[19:8]は、MF RAM２のインデックス（アドレス）として扱われる。キャッシュフラッシュ時にはインデックスとモディファイドフラグを組み合わせてMBT Tag RAM３のインデックスを復元する。尚、MF RAM２はMBT Tag RAM３のうち“Modified”が登録されているインデックスを見つけるために使用するので、タグ情報を必要としない。
【０１１８】
図４は、物理アドレス〜MBT Tag RAM情報〜MF RAM情報の順で情報を変換する 手順を示す。一方、図５は、MF RAM情報〜MBT Tag RAM情報〜物理アドレスの順 で情報を逆変換する手順を示す。
【０１１９】
ここでは、３２ビットデータに４つのパリティビットをもつ３６ビット幅データのＳＳＲＡＭをMBT Tag RAM用に２個、MF RAM用に１個使用するものとする。
【０１２０】
MBT Tag RAM３では、各ＳＳＲＡＭのデータ部にタグ情報を、パリティビット にモディファイド情報とプロセッサ単位の（タグ＋モディファイドビット）パリティを記録する。すなわち、２個のＳＳＲＡＭデータ６４ビットとパリティ８ビットを図６のように使用する。図６では、８ビットあるパリティビットを４ビットずつに分け、便宜上Ｐ[3:0]とＭ[3:0]とに分けて記載してある。
【０１２１】
MF RAM２では、４バイト幅のデータをもつＳＳＲＡＭのうち１バイトを使用してモディファイドフラグを記録し、パリティビットにモディファイドフラグ８ビットのパリティを記録する。MF RAMの各ビットの構成を図７に示す。
【０１２２】
ここで、図４及び図５を参照して情報を変換する原理について説明する。
【０１２３】
図４に示すように、プロセッサバス物理アドレスの中のインデックスは、そのままMBT Tag RAM３のインデックスとして記録され、プロセッサバス物理アドレ スの中のタグは、モディファイドフラグと共にMBT Tag RAM３のデータとして記 録される。
【０１２４】
次に、MBT Tag RAM３のインデックスの一部（１２ビット）は、MF RAM２のイ ンデックスとして記録され、残りの一部（３ビット）は、MF RAM２のモディファイドフラグ（データ）を生成するのに利用される。MBT Tag RAM３の全モディフ ァイドビットを論理和した結果を８ビット分まとめたものがMF RAM２のデータとして記録される。すなわち、MBT Tag RAM３のデータに１つでもモディファイド のものがあれば、その論理和は“１”となる。この場合、例えばMBT Tag RAM３ のインデックスのうちの最後の３ビットが“０１０”であるとすると、MF RAM２上の該当するモディファイドフラグ“ＭＦ２”の値が“１”となる。
【０１２５】
一方、図５に示すように、MF RAM２のインデックス及びデータからMBT Tag RAM３のインデックスが復元される。例えば、“ＭＦ２”の値が“１”であれば、MBT Tag RAM３のインデックスのうちの最後の３ビットが導き出され、MBT Tag RAM３のインデックス全体が復元される。これにより、モディファイドブロックを 持つキャッシュラインのインデックスが検出される。
【０１２６】
次に、通常処理時の情報の更新手順について例を挙げて説明する。
【０１２７】
通常処理時でのMBT Tag RAM３とMF RAM２の更新は以下のようにして行う。
【０１２８】
プロセッサバス５にＭＢＴを変更するトランザクションが発行されると、MBT Tag RAM３を引き、キャッシュステートを変更する。このとき、１ライン上の全 プロセッサ分のモディファイドビットの論理和をとり、この論理和の結果をMBT Tag RAM３のインデックスと一緒にしてMF RAM２に通知する。なお、より効率的 にするため、各プロセッサのモディファイドビットの論理和の結果がもともと記録されていたモディファイドビットの論理和と異なる場合にのみMF RAM２に対して変更要求を出すようにしてもよい（詳細については第７実施形態で説明する）。
【０１２９】
例えば、もともとのキャッシュステートが全てのプロセッサについてクリーンであったときプロセッサバスにＣＰＵ１からRead and Invalidateが発行された 場合、ＣＰＵ１のキャッシュステートは“Modified”に変更される。すなわち、
MBT Tag RAMモディファイドビットは“0000”→“0010”
MF RAMモディファイドフラグは“０”→“１”（変更要求を出す）
となる。
【０１３０】
このとき、ＣＰＵ１のキャッシュステートの論理和は、“０”から“１”に変化する。よって、ＭＢＴはMF RAM２に対して“１”を登録するように要求する。さらに同じindexに対してＣＰＵ２がRead and Invalidateトランザクションを発行した場合、ＭＢＴ本体はＣＰＵ２が“Clean”から“Modified”になるので変 更されるが、プロセッサのキャッシュステートの論理和は“１”のまま変更されないので、MF RAM２には変更要求を出さない。すなわち、
MBT Tag RAMモディファイドビットは“0010”→“0110”
MF RAMモディファイドフラグは“１”→“１”（変更要求を出さない）
となる。
【０１３１】
この後、ＣＰＵ１が“Modified”を持っているラインに対してＣＰＵ３がReadトランザクションを発行すると、ＭＢＴのキャッシュステートは変更されるがＣＰＵ２が依然として“Modified”を持っているので、MF RAM２には変更要求が出ない。すなわち、
MBT Tag RAMモディファイドビットは“0110”→“0100”
MF RAMモディファイドフラグは“１”→“１”（変更要求を出さない）
となる。
【０１３２】
さらにＣＰＵ２が“Modified”を持っているラインに対してプロセッサ０がRead and Invalidateトランザクションを発行するとMBT Tag RAMのキャッシュステートは変更されるが“Modified”をもっているプロセッサが移動するだけなのでMF RAM２には変更要求が出ない。すなわち、
MBT Tag RAMモディファイドビットは“0100”→“0001”
MF RAMモディファイドフラグは“１”→“１”（変更要求を出さない）
となる。
【０１３３】
最後にプロセッサ０が“Modified”を持っているラインに対してＣＰＵ３がReadトランザクションを発行すると、MBT Tag RAM３上の対応するインデックスに おいて“Modified”をもっているプロセッサが無くなるのでMF RAM２に変更要求が出る。ＭＢＴはMF RAM２を読み出してこのビットを変更して書き戻す。すなわち、
MBT Tag RAMモディファイドビットは“0001”→“0000”
MF RAMモディファイドフラグは“１”→“０”（変更要求を出す）
となる。
【０１３４】
（キャッシュフラッシュ時の動作）
次に、キャッシュフラッシュ時の動作を図８を参照して説明する。
【０１３５】
キャッシュフラッシュ処理を起動すると、MF RAM２のアドレス（インデックス）生成回路に接続された１２ビットカウンタを順次インクリメントして（ステップＡ１）、MF RAM２を読み出す（ステップＡ２）。
【０１３６】
先読みバッファ２２２ではMF RAMデータのうち、１個でもモディファイドフラグが“１”であるものがあればバッファに登録する（ステップＡ３）。先読みバッファ２２２に登録されたデータは順番にMF RAM変更ロジック２２３に読み込まれる（ステップＡ４）。MF RAM変更ロジック２２３ではインデックスとMF RAM２のモディファイドフラグのビット位置からMBT Tag RAM３のインデックスを復元 し（ステップＡ５）、MBT Tag RAM３に通知する（ステップＡ６）。
【０１３７】
各インデックスのモディファイドフラグが“１”であるものを全てMBT Tag RAM３に通知するとモディファイドフラグを全て“０”にして（ステップＡ７）、MF RAM２用のライトバッファ２１１に転送し（ステップＡ８）、先読みバッファ ２２２から次のエントリを読み出す（ステップＡ９）。ライトバッファ２１１が一杯になるとMF RAM２にモディファイドフラグが全て“０”のデータを書き戻す（ステップＡ１０）。
【０１３８】
一方、MBT Tag RAM３では、MF RAM２から通知されたインデックスを順次読み 出す（ステップＡ１１）。MF RAM２から通知されるインデックスには少なくとも１個のモディファイドラインが登録されている。よって、読みだしたデータは必ず先読みバッファ３２２に登録される（ステップＡ１２）。以後、MBT Tag RAM データとインデックスからプロセッサ内にあるモディファイドラインの実アドレスを復元して（ステップＡ１３）、バス上にReadトランザクションを発行し（ステップＡ１４）、モディファイドブロックをライトバックさせる（ステップＡ１５）。
【０１３９】
一方、上記ステップＡ１３の後、MBT Tag RAM３のモディファイドビットを全 て“０”にし（ステップＡ１６）、当該モディファイドビットを全て“０”にしたデータをMBT Tag RAM３のライトバッファ３１１に送り（ステップＡ１７）、 先読みバッファ３２２から新たなデータを読み出す（ステップＡ１８）。ライトバッファ３１１が一杯になるとデータをMBT Tag RAM３に書き戻す（ステップＡ １９）。
【０１４０】
尚、プロセッサ内に“Modified”を残さないセカンドフェーズ（後で詳述）のキャッシュフラッシュの場合には、ＭＢＴに同期化用のハードウェアを設け、キャッシュフラッシュ命令を受け取る前後を区別するバリアを作りキャッシュフラッシュ命令以前の処理がMF RAM、MBT Tag RAMの両方で完了してからキャッシュ フラッシュを実行しなくてはならない。
【０１４１】
（通常処理時の動作）
通常処理時の動作を図９〜図１２に示す。また、この場合の情報の流れを図１３に示す。以下、情報の流れに沿って説明する。
【０１４２】
この通常処理においては、バストランザクションによるキャッシュ情報の更新処理（ＭＢＴ登録）が行われる。
【０１４３】
プロセッサバス５上のバストランザクションをプロセッサバススヌーパ５００がスヌープし（ステップＢ１）、キャッシュ状態を変化させるトランザクションであれば、Ｂ２Ｔアクセスバッファ３０８に通知し、MBT Tag RAM更新要求を発 行する（ステップＢ２）。
【０１４４】
MBT Tag RAMリードアドレスバッファ３０３に登録可能であれば、Ｂ２Ｔアク セスバッファ３０８から出力されたMBT Tag RAM更新要求は、MBT Tag RAMリードアドレスセレクタ３０５で選択され、MBT Tag RAMアドレスマッチバッファ３０ ４に入力される（ステップＢ３）。MBT Tag RAMアドレスマッチバッファ３０４ では、入力が現在MBT Tag RAM制御部３００で処理中のエントリに同一のMBT Tag RAMインデックスが一致するものが存在するか否かをチェックする（ステップＢ４）。同一インデックスのものがあれば、MBT Tag RAMリードアドレスバッファ ３０３登録時にインデックスマッチフラグを立てる（ステップＢ５）。同一インデックスのものが無ければインデックスマッチフラグを立てない（ステップＢ６）。MBT Tag RAMアドレスマッチバッファ３０４はパイプライン化されているの で、入力から３サイクルでMBT Tag RAMリードアドレスバッファ３０３に登録さ れる。MBT Tag RAMリードアドレスバッファ３０３では、先頭のエントリのイン デックスマッチフラグが立っていなければMBT Tag RAMアドレスセレクタ３０２ にリード要求を出力する。インデックスマッチフラグが立っていれば、先行するMBT Tag RAM更新処理が全て終了するまで待ち（ステップＢ７、Ｂ８）、インデ ックスマッチフラグを落とす（ステップＢ９）。MBT Tag RAMアドレスセレクタ ３０２にMBT Tag RAMリード要求が出力されると（ステップＢ１０）、MBT Tag RAMアドレスセレクタ３０２では、優先順位に応じてMBT Tag RAMライトバッファ ３１１とMBT Tag RAMリードアドレスバッファ３０３からMBT Tag RAMアクセス要求を選択する（ステップＢ１１）。MBT Tag RAMアドレスセレクタ３０２でMBT Tag RAMリードアドレスバッファ３０３からのリードアクセス要求が選択されると、MBT Tag RAMアドレス出力レジスタに登録され（ステップＢ１２）、MBT Tag RAM３へのアクセスが行われる（ステップＢ１３）。
【０１４５】
MBT Tag RAM３からのリードデータはMBT Tag RAMリードデータレジスタ３２０に登録される（ステップＢ１４）。このとき、MBT Tag RAM制御部３００内部で 通知されるMBT Tag RAMインデックス、プロセッサＩＤ、キャッシュステート更 新値も同時にMBT Tag RAMリードデータレジスタ３２０に登録される。MBT Tag RAMリードデータレジスタ３２０に登録されたMBT Tag RAM更新要求は直ちにMBT Tag RAM通常系変更ロジック３２４に通知される（ステップＢ１５）。MBT Tag RAM通常系変更ロジック３２４からはMBT Tag RAMライトバッファ３１１、Ｔ２Ｆアクセスバッファ２０７、通常処理系ライトバックバッファ４０２の３つのモジュールにデータ出力する（ステップＢ１６）。以下、それぞれのデータの流れに沿って順に説明する。
【０１４６】
MBT Tag RAM通常系変更ロジック３２４で変更されたMBT Tag RAMデータはMBT Tag RAMライトバッファ３１１に登録される（ステップＣ１）。MBT Tag RAMライトバッファ３１１は、２種類のMBT Tag RAMライト要求をMBT Tag RAMアドレスセレクタ３０２に出力する（ステップＣ２）。空きがある一定個数以下になると出力する高優先順位ライト要求と通常のライト要求である。MBT Tag RAMアドレス セレクタ３０２は、高優先順位ライト要求が出力されている場合かMBT Tag RAM リードアドレスバッファの先頭のエントリのインデックスマッチフラグが立っている場合、もしくは現在セレクタがライト要求を選択している場合の３通り以外はリード要求を優先して選択する。MBT Tag RAMアドレスセレクタ３０２でライ ト要求が選択されると（ステップＣ３）、MBT Tag RAMライトデータレジスタ３ １０にライトデータを、MBT Tag RAMアドレス出力レジスタ３０１にライトアド レスを登録し（ステップＣ４）、MBT Tag RAM３のデータを更新する（ステップ Ｃ５）。
【０１４７】
一方、MBT Tag RAM通常系変更ロジック３２４で、既にモディファイドブロッ クが登録されているプロセッサが新たに別のモディファイドブロックが登録される場合、MBT Tag RAM３に登録されていたモディファイドブロックは通常処理系 ライトバックバッファ４０２に追い出される（ステップＤ１）。通常処理系ライトバックバッファ４０２に登録されたモディファイドブロックは順にライトバックバッファ４０３に転送される（ステップＤ２）。ライトバックバッファ４０３に登録されたモディファイドブロックはプロセッサバスマスタ６００に通知され（ステップＤ３）、バス出力レジスタ６０１を経由してプロセッサバス５に出力され（ステップＤ４）、プロセッサのキャッシュ状態とＩＤ状態を一致させる（ステップＤ５）。
【０１４８】
一方、MBT Tag RAM通常系変更ロジック３２４で、MBT Tag RAM３のモディファイドビットのリードデータの論理和と、更新後のモディファイドビットの論理和とが異なっていればＴ２Ｆアクセスバッファ２０７にMBT Tag RAM３のインデッ クスとモディファイドビットの論理和であるモディファイドフラグの値を通知する（ステップＥ１）。MF RAMリードアドレスバッファが受け取り可能であればＴ２Ｆアクセスバッファ２０７からのリード要求はMF RAMリードアドレスセレクタ２０５で選択され（ステップＥ２）、MF RAMアドレスマッチバッファ２０４でMF RAM制御部２００で処理中のエントリとインデックスマッチを行い（ステップＥ３）、その結果をMF RAMリードアドレスバッファ２０３に登録する（ステップＥ４）。MF RAMリードアドレスバッファ２０３の先頭のエントリのインデックスマッチフラグが立っていなければMF RAMリード要求がMF RAMアドレスセレクタ２０２に通知される（ステップＥ５）。MF RAMアドレスセレクタ２０２でリード要求が選択されるとMF RAMアドレス出力レジスタ２０１を通じてMF RAM２にリード要求が出力される（ステップＥ６）。
【０１４９】
MF RAMリードデータはMF RAMリードデータレジスタ２２０にMF RAMインデックス、モディファイドフラグ更新情報とともに登録される（ステップＥ７）。MF RAMリードデータレジスタ２２０のデータは直ちにMF RAM通常系変更ロジック２２４に転送される（ステップＥ８）。MF RAM通常系変更ロジック２２４で更新されたデータはMF RAMライトバッファ２１１に登録される（ステップＥ９）。
【０１５０】
MF RAMライトバッファ２１１は、２種類のMF RAMライト要求をMF RAMアドレスセレクタ２０２に出力する（ステップＥ１０）。空きがある一定個数以下になると出力する高優先順位ライト要求と通常のライト要求である。MF RAMアドレスセレクタ２０２は、高優先順位ライト要求が出力されている場合かMF RAMリードアドレスバッファの先頭のエントリのインデックスマッチフラグが立っている場合、もしくは現在セレクタがライト要求を選択している場合の３通り以外はリード要求を優先して選択する。MF RAMアドレスセレクタ２０２でライト要求が選択されると（ステップＥ１１）、MF RAMライトデータレジスタ２１０にライトデータを、MF RAMアドレス出力レジスタ２０１にライトアドレスを出力し（ステップＥ１２）、MF RAM２のデータを更新する（ステップＥ１３）。
【０１５１】
（セカンドフェーズチェックポイント時の動作）
セカンドフェーズチェックポイント時の動作を図１４〜図１６に示す。また、この場合の情報の流れを図１７に示す。以下、情報の流れに沿って説明する。
【０１５２】
このセカンドフェーズチェックポイント時においては、ＭＢＴ登録を中断した状態でキャッシュフラッシュが実行される。
【０１５３】
セカンドフェーズのチェックポイントを起動すると、MF RAMリードアドレスバッファ２０３が受け付け可能であればMF RAMインデックスカウンタ２０６を順次インクリメントし（ステップＦ１）、MF RAMリードアドレスセレクタ２０５、MF RAMインデックスマッチバッファ２０４を経由してMF RAMリードアドレスバッファ２０３にその値を登録する（ステップＦ２）。MF RAMリードアドレスバッファ２０３の先頭のエントリのインデックスマッチフラグが立っていなければMF RAMアドレスセレクタ２０２にリード要求を出力する（ステップＦ３）。MF RAMアドレスセレクタ２０２でリードが選択されると（ステップＦ４）、MF RAMアドレス出力レジスタ２０１を経由してMF RAM２にリード要求を出力する（ステップＦ５）。
【０１５４】
MF RAM２からのリードデータは、MF RAMインデックスともにMF RAMリードデータレジスタ２２０に登録する（ステップＦ６）。MF RAMリードデータレジスタの出力はMF RAMモディファイド検出機構２２１に入力される（ステップＦ７）。MF RAMモディファイド検出機構２２１ではモディファイドフラグ８ビットの論理和をとり、一つでもモディファイドフラグが立っていればMF RAM先読みバッファ２２２に登録する（ステップＦ８）。なお、モディファイドフラグが一つも立っていなければそのデータは捨てる。MF RAMキャッシュフラッシュ系変更ロジック２２３が受け付け可能であればMF RAM先読みバッファ２２２からデータを転送する（ステップＦ９）。MF RAMキャッシュフラッシュ系変更ロジック２２３では、MF RAMのインデックスとモディファイドフラグのビット位置からMBT Tag RAM３の インデックスを復元し（ステップＦ１０）、Ｆ２Ｔアクセスバッファ３０７に通知する（ステップＦ１１）。また、全てのモディファイドフラグの処理を終了すると、モディファイドフラグを全て“０”にして（ステップＦ１２）、MF RAMライトバッファ２１１に通知する（ステップＦ１３）。
【０１５５】
MF RAMライトバッファ２１１に登録されたデータは通常のＭＢＴ更新処理と同様にMF RAMライト要求をMF RAMアドレスセレクタ２０２に通知し（ステップＦ１４）、ライト要求が選択されると（ステップＦ１５）、データをMF RAMライトデータレジスタ２１０に入力してMF RAM２に書き込む（ステップＦ１６）。
【０１５６】
一方、上記ステップＦ１１の後、Ｆ２Ｔアクセスバッファ３０７がMF RAMキャッシュフラッシュ系変更ロジック２２３からのライトバック要求を受け取ると（ステップＧ１）、MBT Tag RAMリードアドレスセレクタ３０５、MBT Tag RAMインデックスマッチバッファ３０４を経由してMBT Tag RAMリードアドレスバッファ ３０３にその要求を登録する（ステップＧ２）。MBT Tag RAMリードアドレスバ ッファ３０３では先頭のエントリのインデックスマッチフラグが立っていなければMBT Tag RAMアドレスセレクタ３０２にリード要求を出力する（ステップＧ３ ）。MBT Tag RAMアドレスセレクタ３０２でリード要求が選択されると（ステッ プＧ４）、MBT Tag RAMアドレス出力レジスタ３０１からMBT Tag RAM３にリード要求が出力される（ステップＧ５）。
【０１５７】
MBT Tag RAM３からのリードデータはMBT Tag RAMインデックスとともにMBT Tag RAMリードデータレジスタ３２０に登録される（ステップＧ６）。MBT Tag RAMリードデータレジスタ３２０の出力は直ちにMBT Tag RAMモディファイド検出機 構３２１に入力される（ステップＧ７）。MBT Tag RAMモディファイド検出機構 ３２１では、MBT Tag RAMデータの中でプロセッサ単位でつけられたモディファ イドビットの論理和をとり、モディファイドブロックが一つでもあればMBT Tag RAM先読みバッファ３２２に登録する（ステップＧ８）。なお、モディファイド ブロックが存在しなければそのエントリは捨てる。ここで、セカンドフェーズではMF RAM２で“Modified”があるとされたエントリのみを読み出しているので、実際にはMBT Tag RAM先読みバッファ３２２に必ず登録される。MBT Tag RAMキャッシュフラッシュ系変更ロジック３２３が受け付け可能であればMBT Tag RAM先 読みバッファ３２２からデータを転送し（ステップＧ９）、MBT Tag RAMのイン デックスとMBT Tag RAMのデータであるタグから物理アドレスを復元して（ステ ップＧ１０）、キャッシュフラッシュ系ライトバックバッファ４０１に登録する（ステップＧ１１）。また、全てのモディファイドブロックの処理を終了すると、モディファイドビットを全て“０”にして（ステップＧ１２）、MBT Tag RAM ライトバッファ３１１に登録する（ステップＧ１３）。
【０１５８】
MBT Tag RAMライトバッファ３１１に登録されたデータは通常のＭＢＴ更新処 理と同様にMBT Tag RAMライト要求をMBT Tag RAMアドレスセレクタ３０２に通知し（ステップＧ１４）、ライト要求が選択されると（ステップＧ１５）、データをMBT Tag RAMライトデータレジスタ３１０に入力してMBT Tag RAM３に書き込む（ステップＧ１６）。
【０１５９】
一方、上記ステップＧ１１の後、キャッシュフラッシュ系ライトバックバッファ４０１からの出力はライトバックスピード調整機構４１０を通り（ステップＨ１）、ライトバックスピード調整機構４１０を通過可能であればライトバックバッファ４０３に登録される（ステップＨ２）。ライトバックバッファ４０３の出力はプロセッサバスマスタ６００に通知され（ステップＨ３）、プロセッサバス出力レジスタ６０１を通してプロセッサバス５に発行される（ステップＨ４）。
【０１６０】
第１実施形態には、次のような利点がある。
【０１６１】
・MF RAM２のデータ量は８ビット程度であり、MBT Tag RAM３の７２ビット 程度に比べて少ないので、MF RAM２を用いたキャッシュフラッシュ装置では検索用バッファのハード量も少なくて済み、効率がよい。
【０１６２】
・従来はMBT Tag RAM３に対する検索がシステム動作のボトルネックとなっ ていたが、MF RAM２を付加することでMBT Tag RAM３のモディファイドブロック へのヒット率が１００％となり、効率を最大にすることができる。
【０１６３】
・メモリアクセスの局所性によりモディファイドブロックはメモリのいくつかの離散的な特定領域に集中する傾向がある。MBT Tag RAM３がある一つの特定 領域の処理をしている間にMF RAM２によって次の特定領域を独立して検索できるので、検索のオーバーヘッドを大幅に低減できる。
【０１６４】
ところで、前述した第１実施形態の方式において、効率化のためにＭＢＴ登録を実行しながらキャッシュフラッシュを行おうとした場合、バッファ制御が難しくなり、デッドロックを引き起こしやすくなる。そこで、この問題を解決する手法について、以下に説明する。
【０１６５】
（第１実施形態の変形例）
前述した第１実施形態の方式において、MF RAM２およびMBT Tag RAM３はイン オーダーで処理するものとする。ファーストフェーズのキャッシュフラッシュを開始すると以下の二つの方向のデータが流れる。
【０１６６】
・プロセッサバスのスヌープによるMBT Tag RAM３からMF RAM２への変更要 求
・キャッシュフラッシュ起動によるMF RAM２からMBT Tag RAM３へのキャッ シュフラッシュ要求
MBT Tag RAM３のアドレス生成部とMF RAM２のアドレス生成部の両方において 同時にインデックスマッチが発生すると、MBT Tag RAM３とMF RAM２が同時にビ ジー状態になりデッドロックに陥る可能性がある。すなわち、MBT Tag RAM３はMF RAM２へ変更通知を発行しなければ後続の処理が実行できないが、MF RAM２が ビジーであるため変更通知を発行できない。一方、MF RAM２もMBT Tag RAM３が ビジーであるのでキャッシュフラッシュ要求を発行することができない。
【０１６７】
後続の処理を実行するためにはMF RAM２もしくはMBT Tag RAM３のいずれか一 方のビジーが解除されないとならないが、第１実施形態の方式ではMF RAM２はMBT Tag RAM３に、MBT Tag RAM３はMF RAM２に要求を受け取ってもらわないとならないため、時間が経過してもビジーは解除されない。
【０１６８】
以下に、デッドロック状態に陥らないようにし、かつデッドロックに陥ってしまった場合にデッドロックを解消するための方法を述べる。
【０１６９】
デッドロックに陥らないようにするためには、リクエスト受け付けバッファを十分に深くし、かつ通常はリクエスト受け付けバッファにはあまり詰め込まないようにしてビジー発生時にリクエストを受け付けてビジーを解消するように制御する。リクエスト受け付けバッファは相手側の先読みバッファ（MF RAM２の場合はMBT Tag RAM３の先読みバッファ３２２、MBT Tag RAM３の場合はMF RAM２の先読みバッファ３０６）の段数に、相手の先読みバッファ１段あたりの最大リクエスト発行数を掛けた段数が最低限必要である。例えば、MBT Tag RAM３のMF RAM ２からの変更要求受け付けバッファの段数は、
（MF RAM先読みバッファ段数）×（１段あたりの最大キャッシュフラッシュ要求数）
=  ６段×８
=  ４８段
以上必要となる。一方、MF RAM２のMBT Tag RAM３からの変更要求受け付けバッ ファの段数は、
（MBT Tag RAM先読みバッファ段数）×（１段あたりのMF RAM変更要求数 ）
=  ８段×１
=  ８段
以上必要となる。
【０１７０】
よって、この例の場合にはMF RAM２側のリクエスト受け付けバッファに８段以上の余裕を持たせてビジーを解消させるようにするのがよい。実際にはリクエスト受け付けバッファにはさらに４〜８段程度のマージンをもたせないとビジーが多発し性能が出ない。よって、MF RAM２のリクエスト受け付けバッファは１６段程度、MBT Tag RAM３のリクエスト受け付けバッファは８段程度が適正値となる 。尚、マージンはMBT Tag RAM３およびMF RAM２がパイプライン動作するために 必要なものなので、各アドレス制御部は相手側のリクエスト受け付けバッファに２個目の未処理のエントリが登録された時点でアドレス発行を停止する。MBT Tag RAM３に限り、相手側（MF RAM側）がビジーになっても処理は続行して先読み バッファを空にしてバススヌープによるＭＢＴ更新要求を通し、MBT Tag RAM３ のビジーを解消する。
【０１７１】
本例のようにMF RAM２側にリクエスト受け付けバッファを設ける場合、MBT Tag RAM３からはMF RAM２への変更要求だけでなくプロセッサバスへのキャッシュ フラッシュ要求も出力されるので、プロセッサバスへのキャッシュフラッシュ要求受け付けバッファも同様にビジー解消用のバッファが必要となる。４プロセッサ構成の場合に必要なバッファの段数は、
（MBT Tag RAM先読みバッファ段数）×（１段あたりのキャッシュフラッ シュ変更要求数）
=  ８段×４
=  ３２段
以上必要となる。
【０１７２】
実際には、キャッシュフラッシュリクエスト受け付けバッファにはさらに８〜１６段程度のマージンをもたせないとビジーが多発し性能が出ない。よって、キャッシュフラッシュリクエスト受け付けバッファは４８段程度必要となる。実際にはリクエスト受け付けバッファは１段あたり３２ビット程度の幅が必要であるので、フリップフロップ１段を１０ゲートと換算して１段あたり約３００ゲート必要である。よって４８段では１５ｋゲートを要することになる。
【０１７３】
以上のように、第１実施形態の方式でデッドロックを発生させないためには、大量のバッファが必要であることがわかる。また、このバッファはデッドロックを発生させないためのものなので、それぞれ８段、１６段、４８段あるバッファも通常使用可能なのは２段程度であり、平均バッファ使用率は最大でも４〜２５%と非常に効率が悪い。よって、デッドロックを発生させない方式よりもデッド ロックが発生した場合にデッドロックを解消する手段を設ける方が現実的である。そこで、デッドロックを解消する手段の例を図１８を参照して説明する。
【０１７４】
図１８では、プロセッサバス５上のバストランザクションによりMBT Tag RAM ３とMF RAM２を更新する流れを破線の矢印で、キャッシュフラッシュによりMBT Tag RAM３とMF RAM２を更新する流れを実線の矢印で示してある。
【０１７５】
プロセッサが動作状態にあるので、MF RAM２、MBT Tag RAM３の更新はプロセ ッサバス５上のトランザクションをスヌープしてMBT Tag RAM３を更新した結果 のみによることとし、キャッシュフラッシュ結果は自身のプロセッサバスマスタ６００が発行したバストランザクションをプロセッサバススヌーパ５００がスヌープすることで反映するものとする。
【０１７６】
デッドロック状態が発生している場合、Ｔ２Ｆアクセスバッファ２０７、Ｆ２Ｔアクセスバッファ３０７がビジーであるため、MF RAM２、MBT Tag RAM３のリ ードが発行できない状態にある。MBT Tag RAMリードアクセスバッファ３０３でMBT Tag RAM３のリードアクセスを発行できないので、Ｂ２Ｔアクセスバッファはいずれビジーになり、プロセッサバススヌーパ５００はプロセッサバス５のトランザクションをスヌープできない状態に陥るので、結果としてプロセッサバスマスタ６００はプロセッサバス５トランザクションの発行を禁止してシステム全体がロック状態に陥る。このとき、一般的にはMF RAMライトバッファ２１１、MBT Tag RAMライトバッファ３１１はMBT Tag RAM３、MF RAM２へのリードアクセスがないのでライトは必ず実行されるため空であり、ライトバックバッファ４０３にも余裕がある。
【０１７７】
デッドロックを解消するにはMBT Tag RAM制御部３００あるいはMF RAM制御部 ２００のビジーを何らかの方法で解除すれば良い。以下にMF RAM制御部２００のビジーを解除してデッドロックを解消する方法を示す。
【０１７８】
ファーストフェーズのキャッシュフラッシュでは必ずしも全てのモディファイドラインをフラッシュする必要はない。よってMF RAM２とMBT Tag RAM３が両方 ともビジーとなりデッドロックが発生したと判断するとMF RAM先読みバッファ２２２の全てのエントリを無効化し、MF RAMリードアドレスバッファ２０３内のキャッシュフラッシュ要求をＮＯＰ(no-operation)にする。キャッシュフラッシュ要求は単純に無効化してもよいが、MF RAMリードアドレスバッファ２０３がＦＩＦＯで構成されている場合は無効化せずにＮＯＰとして処理した方がインプリメントは簡単になる。
【０１７９】
さて、MF RAM先読みバッファ２２２の全てのエントリを無効化し、MF RAMリードアドレスバッファ２０３内のキャッシュフラッシュ要求をＮＯＰにするとMF RAMリードアドレスバッファ２０３の先頭のMF RAM更新要求は先行する処理にインデックスマッチしたものが無くなるのでMF RAM２をリードすることができるようになる（ここで、デッドロック状態に入ると処理が完全に止まるのでMF RAM更新ロジック以後のモジュール、特にMF RAMライトバッファには有効なエントリが無くなっていることに注意）。
【０１８０】
MF RAM更新要求は処理を行ってもMBT Tag RAM制御回路３００へのキャッシュ フラッシュ要求は出力しないのでMF RAM制御回路２００とMF RAM２で閉じた範囲で処理が終了する。すると、仮につぎのMF RAM更新要求が先頭のMF RAM更新要求にインデックスマッチを起こしていたとしても、先頭のMF RAM更新要求が処理された時点でインデックスマッチは解消され、MF RAM２をリードできるようになる。
【０１８１】
MF RAMリードアドレスバッファ２０３にはMF RAM更新要求しか存在しないので、いずれはMF RAM更新要求がなくなり、MF RAMのビジーは解消される。MF RAM制御回路２００のビジーが解消し、MBT Tag RAM制御回路２００からのMF RAM変更 要求を受け取り可能になるので、MBT Tag RAM制御回路２００側も処理を実行可 能になり、MBT Tag RAM制御回路２００のビジーも解除されデッドロックが解消 する。
【０１８２】
［第２実施形態］
第２実施形態のキャッシュフラッシュ装置の構成は、第１実施形態で示した図２の構成と同様であるため、以下の説明において図２を参照する。なお、その他の動作などに関しては、後述するように第１実施形態の場合とは異なっている。
【０１８３】
この第２実施形態では、図２におけるMF RAM用インデックスカウンタ２０６とMBT Tag RAM用インデックスカウンタ３０６との間で、キャッシュフラッシュ方 式に応じた使い分けができるようになっている。
【０１８４】
前述したように第１実施形態の方式において効率化のためにＭＢＴ登録を実行しながらキャッシュフラッシュを行おうとすると、バッファ制御が難しくなり、デッドロックを引き起こしやすい。そこで、第２実施形態では、MBT Tag RAM３ の他にMF RAM２を備えたキャッシュフラッシュ装置において、ＭＢＴ登録中にキャッシュフラッシュを問題なく行えるキャッシュフラッシュ方式と、キャッシュフラッシュのみを高速に実行するキャッシュフラッシュ方式の両方を持つキャッシュフラッシュ装置について提示する。すなわち、第２実施形態では、２相チェックポイント方式を採用する。
【０１８５】
この２相チェックポイント方式においては、セカンドフェーズのキャッシュフラッシュの前に、ＭＢＴ登録を実行しながらキャッシュフラッシュを実行する。前述したように、ＭＢＴ登録を実行しながら行うキャッシュフラッシュをファーストフェーズとよび、ＭＢＴ登録を中断して高速に実行するキャッシュフラッシュをセカンドフェーズとよぶ。尚、ファーストフェーズではプロセッサが通常処理の動作を行っているので、キャッシュコヒーレンシはＭＢＴで保証しなくてはならないが、セカンドフェーズではプロセッサが安定な状態にあること（キャッシュ状態が変化しないこと）をソフトウェアで保証するようにする。
【０１８６】
ＭＢＴ登録実行中は、キャッシュのモディファイド率が高く（平均約１５%） 、MBT Tag RAM３を直接検索してもある程度のヒット率が期待できる。また、こ のファーストフェーズでは、MBTとプロセッサのキャッシュ状態に矛盾が生じな ければ良く、セカンドフェーズのキャッシュフラッシュ時間を短縮するのが目的であるので、キャッシュフラッシュはセカンドフェーズほど高速である必要はない。一方、セカンドフェーズのキャッシュフラッシュでは、ファーストフェーズのキャッシュフラッシュのためにモディファイド率は低下しており（平均約４% ）、モディファイドブロック検索を高速で実行しなくてはならない。そこで、ファーストフェーズでは検索速度を若干犠牲にしてもデッドロックの発生しにくいキャッシュフラッシュ方式を採ることが有効であり、セカンドフェーズでは出来る限り高速にキャッシュフラッシュを実行する方式を採ることが有効である。
【０１８７】
以下に、第２実施形態の詳細について説明する。
【０１８８】
第２実施形態では、図２中のMBT Tag RAMアドレス生成部に相当する１５ビッ トのインデックスカウンタ３０６を使用する。このカウンタ３０６は、ファーストフェーズのチェックポイント時に、キャッシュフラッシュと同時にＭＢＴ登録を実行している。
【０１８９】
また、第２実施形態では、MBT Tag RAM３からMF RAM２への書き換え要求はあ るが、MF RAM２からMBT Tag RAM３への書き戻し要求（キャッシュフラッシュ要 求）は無い。MBT内のデータの流れはMBT Tag RAM３からMF RAM２への一方向である。
【０１９０】
また、第２実施形態では、MF RAMがビジーになってMBT Tag RAMの処理ができ なくなり、プロセッサバスからのＭＢＴ登録を受け付けられなくなって他のバスエージェントにバストランザクション発行を停止させざるを得なくなっても時間が経過すればMF RAMの処理が進んでビジーが解除される。MBT Tag RAM３の処理 が進んでバッファに空きが出来るため、再びバスからのトランザクション発行を再開させることができる。
【０１９１】
なお、前述の第１実施形態の方式では、MF RAM２を検索して“Modified”があるとわかっているラインをMBT Tag RAM３から読み込むため、キャッシュフラッ シュの効率が第２実施形態の方式よりも高い。しかし、ファーストフェーズのキャッシュフラッシュはセカンドフェーズのキャッシュフラッシュ時間を短縮するのが目的であるので、キャッシュモディファイド率の高いときにキャッシュフラッシュができれば良い。例えば、４プロセッサ構成でキャッシュモディファイド率Ｄが１２．５%であればMBT Tag RAMのあるラインを読んだときにモディファイドラインが存在する確率Ｐは、
Ｐ＝  １−（１−Ｄ）４
＝  １−（１−０．１２５）４
＝  ０．４１４
より４１．４％であるので、ほぼ２回に１回の割合でモディファイドラインが存在することになる。前述の第１実施形態の方式ではデッドロックを回避するためにファーストフェーズのキャッシュフラッシュ時には先読みバッファの使用率を高くすることはできなかった。この第２実施形態の方式では、既に述べたように時間が経過すれば必ずビジーが解除されるので、先読みバッファの使用率を高くしても問題ない。
【０１９２】
先読みバッファをあまり深くするとゲート数（ハード量）が増えるだけでなく、後続の処理とインデックスが一致する確率が高くなる。先読みバッファは多くても１０段前後しか取れないのが普通なので、キャッシュのモディファイド率が１０％程度あればモディファイドラインへのヒット率が多少下がってもバッファ使用率を高く取ってパイプライン動作の効率を上げることによりライトバックが早く終了する。
【０１９３】
（ファーストフェーズチェックポイント時の動作）
ファーストフェーズチェックポイント時の動作を図１９〜図２１に示す。また、この場合の情報の流れを図２２に示す。以下、情報の流れに沿って説明する。
【０１９４】
ファーストフェーズのチェックポイントを起動すると、MBT Tag RAMリードア ドレスバッファ３０３が受け付け可能であればMBT Tag RAMインデックスカウン タ３０６を順次インクリメントし（ステップＩ１）、MBT Tag RAMリードアドレ スセレクタ３０５、MBT Tag RAMインデックスマッチバッファ３０４を経由してMBT Tag RAMリードアドレスバッファ３０３に登録する（ステップＩ２）。MBT Tag RAMリードアドレスバッファ３０３の先頭のエントリのインデックスマッチフ ラグが立っていなければMBT Tag RAMアドレスセレクタ３０２にリード要求を出 力する（ステップＩ３）。MBT Tag RAMアドレスセレクタ３０２でリードが選択 されると（ステップＩ４）、MBT Tag RAMアドレス出力レジスタ３０１を経由し てMBT Tag RAM３にリード要求を出力する（ステップＩ５）。
【０１９５】
MBT Tag RAM３からのリードデータは、MBT Tag RAMインデックスともにMBT Tag RAMリードデータレジスタ３２０に登録する（ステップＩ６）。MBT Tag RAMリードデータレジスタの出力はMBT Tag RAMモディファイド検出機構３２１に入力 される（ステップＩ７）。MBT Tag RAMモディファイド検出機構３２１ではモデ ィファイドビット４ビットの論理和をとり、一つでもモディファイドビットが立っていればMBT Tag RAM先読みバッファ３２２に登録する（ステップＩ８）。な お、モディファイドビットが一つも立っていなければそのデータは捨てる。MBT Tag RAMキャッシュフラッシュ系変更ロジック３２３が受け付け可能であればMBT Tag RAM先読みバッファ３２２からデータを転送する（ステップＩ９）。MBT Tag RAMキャッシュフラッシュ系変更ロジック３２３では、MBT Tag RAMのインデックスとリードデータのタグ情報からモディファイドブロックの物理アドレスを復元し（ステップＩ１０）、キャッシュフラッシュ系ライトバックバッファ４０１に登録する（ステップＩ１１）。また、全てのモディファイドフラグの処理を終了すると、モディファイドフラグを全て“０”にして（ステップＩ１２）、MF RAMライトバッファ２１１に登録する（ステップＩ１３）。
【０１９６】
MBT Tag RAMライトバッファ３１１に登録されたデータは通常のＭＢＴ更新処 理と同様にMBT Tag RAMライト要求をMBT Tag RAMアドレスセレクタ３０２に通知し（ステップＩ１４）、ライト要求が選択されると（ステップＩ１５）、データをMBT Tag RAMライトデータレジスタ３１０に入力してMBT Tag RAM３に書き込む（ステップＩ１６）。
【０１９７】
一方、上記ステップＨ９の後、MBT Tag RAMインデックスとモディファイドビ ット４ビットの論理和である“０”をＴ２Ｆアクセスバッファ２０７に通知し、MF RAM更新要求を発行する（ステップＩ１７）。
【０１９８】
Ｔ２Ｆアクセスバッファ２０７がMBT Tag RAMキャッシュフラッシュ系変更ロ ジック３２３からのMF RAM更新要求を受け取ると、MF RAMリードアドレスセレクタ２０５、MF RAMインデックスマッチバッファ２０４を経由してMF RAMリードアドレスバッファ２０３に登録する（ステップＪ１）。MF RAMリードアドレスバッファ２０３では先頭のエントリのインデックスマッチフラグが立っていなければMF RAMアドレスセレクタ２０２にリード要求を出力する（ステップＪ２）。MF RAMアドレスセレクタ２０２でリード要求が選択されると（ステップＪ３）、MF RAMアドレス出力レジスタ２０１からMF RAM２にリード要求が出力される（ステップＪ４）。
【０１９９】
MF RAM２からのリードデータは、MF RAMインデックス、MF RAM更新情報とともにMF RAMリードデータレジスタ２２０に登録される（ステップＪ５）。MF RAMリードデータレジスタ２２０の出力は直ちにMF RAM通常処理系変更ロジック２２４に入力される（ステップＪ６）。MF RAM通常処理系変更ロジック２２４は、MBT Tag RAMキャッシュフラッシュ系変更ロジック３２３が指定したモディファイフ ラグの値を“０”にしてMF RAMライトバッファ２１１に登録する（ステップＪ８）。MF RAMライトバッファ２１１に登録されたデータは通常のＭＢＴ更新処理と同様にMF RAMライト要求をMF RAMアドレスセレクタ２０２に通知し（ステップＪ９）、ライト要求が選択されると（ステップＪ１０）、データをMF RAMライトデータレジスタ２１０に入力し、MF RAM２に書き込む（ステップＪ１１）。
【０２００】
一方、上記ステップＩ１１の後、キャッシュフラッシュ系ライトバックバッファ４０１からの出力はライトバックスピード調整機構４１０を通り（ステップＫ１）、ライトバックスピード調整機構４１０を通過可能であればライトバックバッファ４０３に登録される（ステップＫ２）。ライトバックバッファ４０３の出力は、プロセッサバスマスタ６００に通知され（ステップＫ３）、プロセッサバス出力レジスタ６０１を通してプロセッサバス５に発行される（ステップＫ４）。
【０２０１】
なお、セカンドフェーズチェックポイント時の動作は、前述した第１実施形態の場合と同様となるので、その説明を省略する。
【０２０２】
第２実施形態には、次のような利点がある。
【０２０３】
・ファーストフェーズで検索を実行してもMBT Tag RAM３とMF RAM２とが両 方同時にビジーとなることがなく、デッドロックが発生しない。このため、従来例のようにデッドロックを回避するためにバッファ量を増やしたり、難しいバッファ制御のチューニングを行う必要もない。また、バッファ使用率を下げる必要がないので性能が低下しない。
【０２０４】
・各フェーズの平均的なキャッシュモディファイド率の違いにより、ファーストフェーズでは若干速度を犠牲にしてもキャッシュ状態を保証し、セカンドフェーズではキャッシュ状態が変化しないことをソフトウェアで保証することで、デッドロックを発生させずにセカンドフェーズで高速にモディファイドブロックを見つけ出せる。
【０２０５】
なお、この第２実施形態ではMBT Tag RAM３とMF RAM２のそれぞれに専用のイ ンデックスカウンタを設ける場合を説明したが、代わりに共用のインデックスカウンタを設け、キャッシュフラッシュ方式に応じて当該インデックスカウンタの接続先を切り替えるようにしてもよい。
【０２０６】
この後、上述した第１及び第２実施形態に適用可能な変形例又は具体例としての別の実施形態をいくつか説明する。
【０２０７】
［第３実施形態］
この第３実施形態では、図２のキャッシュフラッシュ装置において、MF RAM２は、情報更新時にビット単位（MBT Tag RAM３のインデックス単位）での書き込 みが可能となっている。
【０２０８】
MF RAM２をビット単位で書き込み可能とすることにより、MF RAMライト時におけるインデックスマッチが不要となる。
【０２０９】
前述の第１及び第２実施形態ではMF RAM２もMBT Tag RAM３と同様、リード／ モディファイ／ライトという一連の処理が基本動作となっている。周知のようにリードモディファイライトでは、ライトのためにリードが必要である他、コヒーレンシを保証するためライトしようとするアドレスが既に読み込まれていないかをチェックする必要がある。特に、ファーストフェーズにおけるライトバックの場合には自身の発行したライトバックが必然的にインデックスマッチを引き起こしやすいので性能低下を引き起こす。この第３実施形態の方式ではインデックスマッチが不要となるので、通常処理と同じ性能を維持できる。
【０２１０】
以下に、第３実施形態の詳細について説明する。
【０２１１】
MF RAMデータの各ビットに対し、１ビットずつのパリティビットを付ける。MF RAM２を構成するＳＳＲＡＭは、MF RAMデータ１ライン全部を書き込みできる他、MF RAMデータとパリティビットとの対単位で書き込みが出来るようにする。これにより、以下に示すように、ＳＳＲＡＭはリード／モディファイ／ライトの一連した処理をすることなくライトだけで処理できるようになるので、MF RAM２に関するオーバーヘッドが低減する。また、ＳＳＲＡＭインデックスの比較回路が不要になるので、ハード量が少なくなる。また、一般に比較回路は動作に時間がかかるためクリティカルパスになりやすいが、第３実施形態の方式では比較回路を省略できるので回路全体としても高速化しやすくなる。
【０２１２】
本方式では、ＭＢＴ登録動作時にはＳＳＲＡＭのインデックス比較は不要である。MF RAM２は（セカンドフェーズの）キャッシュフラッシュ時に最新情報が残っていれば良い。
【０２１３】
MF RAM２は、ＭＢＴ登録時にはMBT Tag RAM３からの変更要求に従って無条件 で更新される。前述した第１及び第２実施形態の方式では、MFRAM更新動作はリ ード／モディファイ／ライトであるので、例えばMBT制御部内部にデータＢを書 き込もうとするインデックスのデータＡが読み込まれている状態でデータＣを登録しようとすると、本来はデータＢに対して修正を施したデータＣを書き込まなくてはならないにもかかわらず、最終的には変更前の古いデータＡに対して修正を施したデータＣ’が書き込まれてしまう。データＣ’はデータＢを反映していないのでデータＢは失われてしまう。これに対して第３実施形態の方式ではMF RAM更新動作は単純なライト動作になるので、ライトする順番を変えなければMF RAM２は常に最新の情報が登録（オーバーライト）される。
【０２１４】
MF RAM２上のあるラインに対して順にビット０、ビット１、ビット２を“１”にし、最後にビット０を“０”にするような要求がMBT Tag RAM３から出力され たとき、以下に示す３通りの各方式でMF RAM２を更新する場合のMF RAMの最終状態と、更新に要する時間を比較検討する。以下の説明では、MF RAM更新を、
（ａ）第１実施形態の方式
（ｂ）第１実施形態の方式においてインデックスマッチを省略した場合
（ｃ）第３実施形態の方式
の各方式で行った場合の処理を順に説明する。尚、MF RAM２のアドレス出力からリードバッファに取り込むまで４サイクル、リードバッファからMF RAM変更ロジックを経由してMF RAMライトバッファに登録するまで３サイクル、ライトバッファに取り込まれてからMF RAM２のライトアドレス出力まで２サイクルかかるものとする。すなわち、MF RAM更新には９サイクルかかるものとする。尚、各ロジックはパイプライン動作を行い、１サイクルに１個の処理が可能であるものとする。
【０２１５】
（ａ）第１実施形態の方式
一連した４つの変更要求は、MF RAM２においてインデックスマッチが発生するので、MF RAMアドレス生成部でシリアライズされる。前の要求が処理されてMF RAM２に書き戻されるまで次の要求は受け入れられない。すなわち、ビット０の更新が終了してMF RAM２への書き戻しがなされるまでビット１更新のためのMF RAMリードは実行されず、ビット１の更新が終了してMF RAMに書き戻されるまでビット２のリードは実行されず、…というように各MF RAM更新動作は前の動作が完了するまで開始しない。
【０２１６】
４つの変更要求はMF RAMデータを、
・ビット０を“１”にする変更要求：0000_0000 → 0000_0001
・ビット１を“１”にする変更要求：0000_0001 → 0000_0011
・ビット２を“１”にする変更要求：0000_0011 → 0000_0111
・ビット０を“０”にする変更要求：0000_0111 → 0000_0110
のように変更する。
【０２１７】
結果として更新が終了したときのこのインデックスのMF RAMデータは、
・0000_0000 → 0000_0110
となる。MF RAMは正しい最終状態になっている。
【０２１８】
MF RAM更新は４回実行し、各更新動作に９サイクルかかるのでこの例のMF RAM更新動作には、９×４=３６サイクルかかる。
【０２１９】
（ｂ）第１実施形態の方式においてインデックスマッチを省略した場合
この方式ではMF RAM２でインデックスマッチを行わないので、MF RAMアドレス生成部ではMF RAM更新のためのリードを４個連続して発行して先読みバッファに取り込む。
【０２２０】
MF RAM変更ロジックではそれぞれMF RAMの元の状態（0000_0000）に対して変 更を行い、ライトバッファに書き込む。すなわち、４つの変更要求はMF RAMデータを、
・ビット０を“１”にする変更要求：0000_0000 → 0000_0001
・ビット１を“１”にする変更要求：0000_0000 → 0000_0010
・ビット２を“１”にする変更要求：0000_0000 → 0000_0100
・ビット０を“０”にする変更要求：0000_0000 → 0000_0000
のように変更し、結果として更新が終了したときのこのインデックスのMF RAMデータは、
・0000_0000 → 0000_0000
となる。この方式ではMF RAM２の最終状態は正しくない。
【０２２１】
この一連の変更動作はＳＳＲＡＭがパイプライン動作しているので９＋３＝１２サイクルで終了する。
【０２２２】
（ｃ）第３実施形態の方式
本方式ではＭＢＴ更新動作ではＩＤリードを必要としない。MBT Tag RAM３か らのMF RAM更新要求はライトバッファに直接取り込まれる。各ビットの更新は他のビットに影響を与えることなく実行される。
【０２２３】
すなわち、４つの変更要求はMF RAMデータを、
・ビット０を“１”にする変更要求：xxxx_xxxx → xxxx_xxx1
・ビット１を“１”にする変更要求：xxxx_xxxx → xxxx_xx1x
・ビット２を“１”にする変更要求：xxxx_xxxx → xxxx_x1xx
・ビット０を“０”にする変更要求：xxxx_xxxx → xxxx_xxx0
のように変更する。
【０２２４】
よって、MF RAMデータは順に、
・0000_0000 → 0000_0001 → 0000_0011 → 0000_0111
→ 0000_0110
のように変更される。
【０２２５】
この一連の動作はライトバッファからの書き込み要求が４個連続するものなので、２＋３＝５サイクルで終了する。MF RAM２は正しい最終状態になっている。
【０２２６】
以上の３方式の結果をまとめると、図２３の通りとなる。
【０２２７】
［第４実施形態］
この第４実施形態では、図２のキャッシュフラッシュ装置における２階層からなるライトバックバッファ群４０１、４０２、４０３の具体例について説明する。
【０２２８】
図１からわかるように、ライトバックバッファは２階層で構成され、第１階層は通常処理用のバッファ４０２とキャッシュフラッシュ用のバッファ４０１とが独立して設けられ、第２階層には通常処理用とキャッシュフラッシュ用とを共用したバッファ４０３が設けられる。
【０２２９】
すなわち、本方式では、バストランザクションによりアドレス情報の更新を行う機構と、キャッシュフラッシュ動作により前記アドレス情報の更新を行う機構とを独立して設けることにより、前記バストランザクションによるキャッシュ情報の更新と、前記キャッシュフラッシュ動作によるキャッシュ情報の更新とを並行して実行できるようにしている。
【０２３０】
ライトバックバッファが通常処理用とキャッシュフラッシュ用で独立しているため、通常処理とキャッシュフラッシュをアウト・オブ・オーダー的に処理でき、ビジーになりにくくなる。
【０２３１】
以下に、第４実施形態の詳細について説明する。
【０２３２】
本構成では、図２に示されるようにＭＢＴ情報更新回路が通常処理系とキャッシュフラッシュ系で独立しているので、各々の更新回路出力をセレクタにいれずに直接１段目のライトバックバッファ４０１、４０２の入力に接続する。また、１段目の通常処理系とキャッシュフラッシュ系のライトバックバッファ４０１、４０２の出力はセレクタを介して２段目のライトバックバッファ４０３の入力に接続する。
【０２３３】
ファーストフェーズのチェックポイントでは、ＭＢＴ登録動作とキャッシュフラッシュとが並列して動作している。本構成ではＭＢＴインデックス比較をあらかじめ行っているので、インデックスマッチのフラグが立っていなければ、先行するキャッシュフラッシュが終了する前に、通常処理のＭＢＴ更新のためにＭＢＴから該当するラインを変更回路に読み出すことができる（アウト・オブ・オーダー処理）。
【０２３４】
ところで、ライトバックバッファが独立していない場合には、以下のような問題がある。
【０２３５】
（１）通常処理系ではキャッシュリプレースによるライトバックは高々１個しか発生しないが、キャッシュフラッシュではプロセッサ数ｎ個分（本例では４個）のライトバックが発生する。
【０２３６】
（２）よって、先読みバッファがｍ段使用されている場合、ｗ＝ｍ×ｎ個のライトバックが発生する可能性がある。
【０２３７】
（３）本構成例では通常処理系に先読みバッファおよびMF RAM更新通知用バッファを設けていないので、通常処理系はＭＢＴリードが起動するとパイプラインの処理を中断できない。
【０２３８】
（４）上記の（２）、（３）よりキャッシュライトバック用の先読みバッファが使用されている場合、多数のライトバックが発生してライトバックバッファが使いきられてしまう可能性があるので、通常処理のためのＭＢＴリードが発行できなくなる。
【０２３９】
（５）よって、ファーストフェーズキャッシュフラッシュでは、キャッシュフラッシュ効率を高くしようとすると通常処理のためのＭＢＴリードが発行しにくくなり、逆に通常処理の効率を高くしようとするとキャッシュフラッシュのためのＭＢＴ検索を減らさなくてはならない、というトレードオフがあった。
【０２４０】
これに対し、本方式ではキャッシュフラッシュ用のライトバックバッファと通常処理用のライトバックバッファとが独立しているので、キャッシュフラッシュ用の先読みバッファが使用されていても通常処理のためのＭＢＴリードを発行することができる。なぜなら、キャッシュフラッシュ用の先読みバッファが使用されている（可能性のある）状態で発行される通常処理用のＭＢＴリードは、先行するキャッシュフラッシュ用アクセスとはインデックスが一致していないので、アウト・オブ・オーダーで処理できるからである。通常処理およびキャッシュフラッシュ用のアクセスの選択は以下のようにして行えばよい。
【０２４１】
キャッシュフラッシュ用アクセスは以下の場合、発行バッファに登録しない。
【０２４２】
・インデックスマッチが発生している場合
・キャッシュフラッシュ用の１段目のライトバックバッファが規定段数（本構成例の場合２段）以上使用されている場合
・２段目のライトバックバッファが規定段数（本構成例の場合２段）以上使用されている場合
・先読みバッファが規定段数（本構成例の場合２段）以上使用されている場合
通常処理用アクセスは以下の場合、発行バッファに登録しない。
【０２４３】
・インデックスマッチが発生している場合
登録条件が通常処理用の方が緩いのは、キャッシュフラッシュを登録しなくてもシステムの状態が固まることはないが、通常処理を登録しないとバススヌープ用のバッファを使いきってバススヌープできなくなるため、他のバスエージェントがバストランザクションを発行するのを禁止せざるを得ず、自身もキャッシュフラッシュを発行できなくなってバッファが空かず、システムが停止してしまう可能性があるためである。
【０２４４】
第４実施形態には、次のような利点がある。
【０２４５】
・通常処理とキャッシュフラッシュをアウト・オブ・オーダー的に処理でき、ビジーになりにくくなる。
【０２４６】
・ファーストフェーズに有効である。但し、セカンドフェーズに適用してもあまり意味がない。
【０２４７】
・なお、通常処理用ライトバックバッファとキャッシュフラッシュ用バッファとに分けない状態で２段構成にした場合も、ある程度の効果がある。
【０２４８】
・ライトバックバッファを通常処理用とキャッシュフラッシュ用とに分けると、ファーストフェーズで速度調整する場合に有効である。
【０２４９】
［第５実施形態］
この第５実施形態では、図２のキャッシュフラッシュ装置におけるライトバックスピード調整機構４１０の具体例について説明する。
【０２５０】
ライトバックスピード調整機構４１０は、キャッシュフラッシュ時に前記モディファイドブロックのライトバック要求を送出するスピードを制限する機構である。なお、このスピード制限機構がキャッシュ状態の管理を妨げていることを検知した場合にはそのスピード制限手段の機能を一時的に又は継続的に無効にする機構も設けておく。
【０２５１】
ＭＢＴによるキャッシュフラッシュが開始されると、プロセッサバスはＭＢＴキャッシュフラッシュに占有されてＩ／Ｏやプロセッサからのリクエストを受け付けなくなることがある。そこで、ライトバックスピード調整機構４１０を設けてＭＢＴキャッシュフラッシュがバスを占有しないようにすることで、Ｉ／Ｏのタイムアウトを防止し、かつファーストフェーズでのプロセッサ動作をあまり邪魔しないようにすることができる。これは、前述の第４実施形態で説明したライトバックバッファ独立方式と組み合わせることで実現しやすくなる。
【０２５２】
以下に、第５実施形態の詳細について説明する。
【０２５３】
前述の第４実施形態によるライトバックバッファ独立方式において、キャッシュフラッシュ系ライトバックバッファ４０１と２段目のライトバックバッファ４０３の間に以下のハードウェアを追加する。尚、通常処理系のライトバックバッファ４０２は２段目のライトバックバッファ４０３に直結するものとする。
【０２５４】
・１０ビットの減算カウンタ
・カウンタの初期値を記録するレジスタ
・インデックスマッチを検出するか、カウンタが全て“０”になった場合に要求を発行する要求生成機構
ここで、キャッシュフラッシュ系ライトバックバッファ４０１に付けられた減算カウンタ４１０について説明する。
【０２５５】
このカウンタ４１０は、リセットが入ると初期値“０”になる。また、カウンタの初期値を記録するレジスタは初期値0x_10にリセットされ、１６サイクルに １回出力可能なようにする。
【０２５６】
リセット直後はカウンタ４１０が全て“０”であるので、キャッシュフラッシュ系ライトバックバッファ４０１にライトバック要求が登録されると即座に２段目のライトバックバッファ４０３にライトバック要求が出力されるようになっている。
【０２５７】
キャッシュフラッシュが起動されると、MBT Tag RAM制御回路３００はモディ ファイドラインを検索し、キャッシュフラッシュ系ライトバックバッファ４０１に登録する。キャッシュフラッシュ系ライトバックバッファ４０１に登録された１個目のエントリは、１０ビットの減算カウンタ４１０の値が“０”であるので、直ちに２段目のライトバックバッファ４０３へのライトバック要求を行う。２段目のライトバックバッファ４０３では、通常処理系のライトバックバッファ４０２からのライトバック要求がなければキャッシュフラッシュ系ライトバックバッファ４０１からのライトバック要求を受け取り、登録する。
【０２５８】
キャッシュフラッシュ系ライトバックバッファ４０１からのライトバック要求が受け取られると、１０ビットの減算カウンタ４１０はカウンタの初期値を記録するレジスタの値に書き換えられる。カウンタの初期値を記録するレジスタが書き換えられていなければ、カウンタの初期値を記録するレジスタの初期値である0x_10が書き込まれる。すると、キャッシュフラッシュ系ライトバックバッファ に登録された２個目のエントリは、１０ビット減算カウンタが“０”になるまでライトバック要求を出力しない。
【０２５９】
さて、本構成例では、第４実施形態においても示したようにＭＢＴ情報更新回路３２３が通常処理系とキャッシュフラッシュ系で独立しており、各々の更新回路出力をセレクタにいれずに直接１段目のライトバックバッファ４０１、４０２の入力に接続しているので、通常処理系とキャッシュフラッシュ系を独立してアウト・オブ・オーダーで処理できる。よって、ＭＢＴでのインデックスマッチが発生しなければキャッシュフラッシュ系の処理が終了する前に通常系の処理を実行できる。
【０２６０】
また、キャッシュフラッシュ系もライトバックバッファ４０１の他に先読みバ ッファ３２２があり、ＭＢＴアドレス生成回路内のリクエストバッファ３０３にはキャッシュフラッシュ系はライトバックバッファ４０１および先読みバッファ３２２に取り込める分しか登録しないので、キャッシュフラッシュ系が処理されないために通常処理が実行されない、という事態は発生しない。
【０２６１】
ここまではMBT Tag RAM制御回路３００内部でのインデックスマッチが発生し ない場合について説明した。次に、キャッシュフラッシュ系と通常処理系の間でインデックスマッチが発生した場合の動作を述べる。
【０２６２】
キャッシュフラッシュ系の先読みバッファ３２２もしくは変更ロジック３２３にあるエントリとＭＢＴアドレス生成回路内のリクエストバッファ３０３内にある通常処理系変更要求とがインデックスマッチすると、キャッシュフラッシュ系ライトバックバッファ４０１が一杯のため、先読みバッファ３２２からキャッシュフラッシュ要求を変更ロジック３２３に読み込めなくなり、通常処理系も停止して後続の処理が滞る可能性がある。これを回避するため、以下のようにする。
【０２６３】
すなわち、インデックスマッチを検出すると、減算カウンタ４１０の値にかかわらずキャッシュフラッシュ系のライトバックバッファ４０１からのライトバック要求を２段目のライトバックバッファ４０３に通知する。インデックスマッチが発生したエントリはインデックスマッチが解消するまでアドレス生成回路内のリクエストバッファ３０３にとどまるので、数サイクル（パイプラインの段数分）経てばＭＢＴから通常処理系のデータは読み込まれなくなる。よって、ある一定時間後はＭＢＴ変更ロジック３２２ではキャッシュフラッシュ系の処理だけが行われる。
【０２６４】
通常処理系のライトバックバッファ４０２にエントリがあるうちは２段目のラ イトバックバッファ４０３への登録は通常処理系が優先される。通常処理系のライトバックバッファ４０２が空になると２段目のライトバックバッファ４０３へのライトバック要求はキャッシュフラッシュ系４０１だけになる。インデックスマッチが発生していないときには１０ビットの減算カウンタ４１０が“０”になるまでキャッシュフラッシュ系ライトバックは受け付けられないので、キャッシュフラッシュ系ライトバックはカウンタの初期値を記録するレジスタに指定されたサイクルに１回しか処理されない。
【０２６５】
一方、この第５実施形態の方式ではインデックスマッチが発生すると減算カウ ンタ４１０の値に拘わらずライトバック要求を出力するので先読みバッファ３２２からインデックスマッチが発生したエントリが早く抜け、通常処理再開が早くなる。
【０２６６】
以下の各実施形態では、前述した第１及び第２実施形態に適用可能な変形例について説明する。
【０２６７】
［第６実施形態］
前述の第１及び第２実施形態では、モディファイドビットを論理和した値を複数個分まとめて複数ビットの形でMF RAM２に記録した例（図７）を説明したが、この第６実施形態では、これらの複数ビットの値を論理和した値を上記複数ビットにさらに加えた例について説明する。
【０２６８】
すなわち、第６実施形態によるMF RAM２のデータは、図２４に示すように、ビット[7:0]の論理和をとった結果が新たにビット[8]として加えられている。このビット[8]は、MF RAM２にデータをライトするときに一緒に書き込まれる。
【０２６９】
キャッシュフラッシュ時には、ビット[8]の値だけを調べて先読みバッファ２ ２２に取り込むべきかどうかを判断することにより、検索時間をさらに短縮することができる。こうした方式は、特にMF RAM２のデータのビット数が多いときには有効である。
【０２７０】
［第７実施形態］
この第７実施形態では、通常処理時にMBT Tag RAM３における情報の更新が発 生した際に前記モディファイドビットの論理和が変化する場合にのみ、MF RAM２における情報の更新を要求する。
【０２７１】
前述の第１実施形態において既に述べたように、プロセッサバス５にＭＢＴを変更するトランザクションが発行されると、MBT Tag RAM３を引き、キャッシュ ステートを変更する。このとき、各プロセッサのモディファイドビットの論理和をとり、この論理和の結果をMBT Tag RAM３のインデックスと一緒にしてMF RAM ２に通知する。
【０２７２】
もともとMF RAM２はMBT Tag RAM３に比べてインデックスマッチが発生し易い ものである。この第７実施形態は、MF RAM２の状態が変化しないのならMBT Tag RAM３から通知しないようにすることで、インデックスマッチを減らし、通常処 理によるＭＢＴ更新時のオーバーヘッドを低減するというものである。
【０２７３】
すなわち、第７実施形態では、MBT Tag RAM３からMF RAM２へ変更要求を出力 するとき、MBT Tag RAM３のモディファイドビットの論理和が変化するときのみ 通知し、変化しないときにはMBT Tag RAM３のみ更新し、MF RAM２は更新しない 。
【０２７４】
これを実現するには、具体的には以下のように構成すればよい。
【０２７５】
すなわち、MBT Tag RAM通常系変更ロジック３２４において、MBT Tag RAM変更前のモディファイドビットの論理和結果を保持するレジスタと、MBT Tag RAM変 更後のモディファイドビットの論理和結果を比較するＸＯＲゲートを作り、ＸＯＲ＝１であればMF RAM２に変更要求を出力し、ＸＯＲ＝０であればMF RAM２に変更要求を出力しないようにする。
【０２７６】
［第８実施形態］
この第８実施形態では、MF RAM２に記憶された情報のアドレスマップは、MBT Tag RAM３におけるインデックスの最上位ビット側からマッピングされたものと なっている。
【０２７７】
すなわち、MF RAM２とMBT Tag RAM３のアドレスマップが互いに逆順となって いる。
【０２７８】
前述の第１実施形態のMF RAM２（図３）では、アドレス[19:8]にはインデックスが対応し、アドレス[7:5]にはモディフィアドフラグが対応する場合を説明し たが、この第８実施形態では、図２５に示すようにアドレスマップを変更する。図示の例では、アドレス[19:17]にはモディフィアドフラグが対応し、アドレス[16:5]にはインデックスが対応している。これに伴い、MF RAM２のデータの中身 であるMF RAMエントリフォ−マット）を図２６のように変更する。
【０２７９】
これにより、MF RAM２におけるインデックスマッチを減らすことができる。
【０２８０】
［第９実施形態］
この第９実施形態では、ファーストフェーズチェックポイント時のキャッシュフラッシュにおいて、インデックスカウンタ３０６から出力されるインデックスの上位ビットと下位ビットとを入れ替えたものを用いてMBT Tag RAM３における インデックスを検索することにより、MF RAM２におけるインデックスマッチを低減させる。
【０２８１】
すなわち、MBT Tag RAM３のインデックスカウンタ３０６を使用してキャッシ ュフラッシュをする時に、インデックスカウンタ３０６の出力のビット順を変更してモディファイブロック検索を行うことでMF RAM２におけるインデックスマッチによるオーバーヘッドを低減させるというものである。
【０２８２】
これを実現するには、MBT Tag RAM３のインデックスカウンタの接続を例えば 図２７のように変更する。図示の例では、MBT Tag RAM３のアドレス[19:16]にはインデックスカウンタ出力の下位ビット（４ビット分）が対応し、アドレス[15:4]にはインデックスカウンタ出力の上位ビット（１１ビット分）が対応している。
【０２８３】
これにより、ファーストフェーズチェックポイント時にMBT Tag RAM３側のイ ンデックスカウンタ３０６を使用してキャッシュフラッシュした場合に、MF RAM２のインデックスマッチが発生しにくくなり、性能低下を小さくすることができる。
【０２８４】
なお、上記では、MBT Tag RAM３におけるインデックスを検索する際に、イン デックスカウンタ３０６から出力されるインデックスの上位ビットと下位ビットとを入れ替えたものを用いる場合を説明したが、代わりに、ビット順を逆にしたものを用いてもよい。
【０２８５】
［第１０実施形態］
この第１０実施形態では、MBT Tag RAM３で管理するキャッシュ容量を動的に 切り替える機構を追加し、切り替え前はキャッシュ容量を大きくしてシステムの性能低下を小さくし、切り替え後はキャッシュ容量を小さくしてキャッシュフラッシュ時間を低減させる。
【０２８６】
以下、ファーストフェーズのチェックポイントを起動するとキャッシュ容量を１／４にする例について述べる。ここでは、通常処理時には１MBのダイレクトマップ方式、ファーストフェーズでのチェックポイント起動からセカンドフェーズチェックポイント起動までの間を１／４の容量の２５６KBで管理する方式に移行するものとする。
【０２８７】
ＭＢＴの（又はキャッシュフラッシュ装置の）制御レジスタにキャッシュ容量設定ビットを追加し、このビットのみおよびチェックポイント開始ビットと同時にキャッシュ容量設定ビットを書き換えられるものとする。また、ＭＢＴが２５６KBのダイレクトマップ相当になっていることを示す縮退ビットの保持手段をMBT Tag RAM制御部３００内に設ける。
【０２８８】
通常処理時には、キャッシュ容量を１MB単位で管理する。このときにもキャッシュ容量を２５６KBに切り替えたときに対応できるように、Tag RAM２のアドレ スマップを図２８のように変更する。図示の例では、アドレス[19:18]に共用ビ ットが割り当てられている。また、これに応じてビット構成を図２９に示すように変更する。
【０２８９】
ここで、共用ビットは通常処理時はインデックスの一部として使用し、かつMBT Tag TAM３のタグビットとしても記録しておく。また、ＭＢＴが２５６KB相当 になっていることを示す縮退ビットは立っていない（ＭＢＴが１MB相当を示す）。
【０２９０】
さて、ファーストフェーズのチェックポイント処理を起動するときには、ＭＢＴを２５６KB管理に切り替える。このとき、２５６KB〜１MBの領域を無効にするとＭＢＴがキャッシュの状態を反映しないことになるので、
・ＭＢＴは全領域有効とする
・バススヌープによるＩＤ更新は０〜２５６KBのみ行う
・ファーストフェーズチェックポイントによるキャッシュフラッシュは２５６KB〜１MBを優先して１MBの全領域を行う
こととする。
【０２９１】
インプリメントの簡単のため、キャッシュフラッシュは１MBから０Bの向かっ て降順に行うものとする。キャッシュフラッシュが２５６KBまで来るとＭＢＴは実質的に２５６KBのダイレクトマップ相当となり、縮退ビットを立てる。
【０２９２】
セカンドフェーズキャッシュフラッシュは以下のようにする。
【０２９３】
ファーストフェーズのキャッシュフラッシュが２５６KB以下の領域にまで及んでＭＢＴが２５６KB相当のダイレクトマップになっていれば、セカンドフェーズは０〜２５６KBの領域だけ実行すれば十分である。よって、縮退ビットが立っていればMF RAMを２５６KB相当の位置から０Bの位置かで検索すれば十分である。
【０２９４】
一方、ファーストフェーズのキャッシュフラッシュが２５６KB以下の領域にまで及んでいなければ、ＭＢＴは２５６KB相当のダイレクトマップになっていない。よって、MBT Tag RAM用インデックスカウンタの値の上位１２ビットをMF RAM 用インデックスカウンタの初期値として０Bに向かってMF RAMを検索する。この 場合でもファーストフェーズでキャッシュフラッシュした領域にモディファイドブロックは存在しないので、セカンドフェーズのキャッシュフラッシュを高速化することができる。
【０２９５】
以上の説明から各フェーズ毎のプロセッサＩＤ更新領域、有効領域、無効領域の違いをまとめたものを図３０に示す。
【０２９６】
［第１１実施形態］
この第１１実施形態では、前述の第１０実施形態のようにキャッシュ容量を制限するのではなく、アドレス情報をシステム全体でMBT Tag RAM３上の１プロセ ッサ分の記憶領域を用いて管理することにより、見かけ上のキャッシュ容量を小さくする。
【０２９７】
すなわち、切り替え前はアドレス情報を全プロセッサ分の領域を用いて管理し、切り替え後はアドレス情報を１プロセッサ分の記憶領域を用いて管理することにより、見かけ上のキャッシュ容量を小さくするものである。
【０２９８】
前述の第１０実施形態の方式ではキャッシュ容量を減らしたときにタグ幅を拡張しなくてはならなかったが、この第１１実施形態の方式ではタグ幅を拡張する必要はない。
【０２９９】
以下に、ファーストフェーズのチェックポイントを起動するとキャッシュ管理を４プロセッサで統一する方式について述べる。ここでは通常処理時にはプロセッサ単位で管理するダイレクトマップ方式、ファーストフェーズでのチェックポイント起動からセカンドフェーズチェックポイント起動までの間をシステム全体でキャッシュ管理する方式に移行するものとする。
【０３００】
また、ＭＢＴがシステム全体管理になっていることを示す縮退ビットをMBT Tag RAM制御部３００内に設ける。
【０３０１】
通常処理時には、プロセッサバススヌーパ５００から出力されるプロセッサのＩＤ情報をもとにプロセッサ単位でモディファイドブロックを管理する。
【０３０２】
ファーストフェーズのチェックポイント処理を起動するときに、ＭＢＴ管理をプロセッサ単位で管理する方式からシステム全体で管理する方式に移行する。ＭＢＴ管理をシステム全体で管理する方式に移行するときには、ＭＢＴ情報をプロセッサ０に対応するMBT Tag RAM領域に記録する。
【０３０３】
キャッシュフラッシュは、ファーストフェーズ、セカンドフェーズともに全領域について行う。
【０３０４】
本方式でも前述の第１０実施形態と同様に、
・ＩＤ新規登録はプロセッサ０の位置にあるシステム全体のエリアに限定
・ＣＰＵ１、２、３の領域は、新規登録は行わないが有効
とする。
【０３０５】
本方式はMBT Tag RAM３上の情報およびMBT Tag RAM３のアドレスマップを更新する必要はない。
【０３０６】
なお、この第１１実施形態で説明した方式を前述の第１０実施形態と組み合わせて実施するこも可能である。
【０３０７】
［第１２実施形態］
この第１２実施形態では、図２のキャッシュフラッシュ装置において、MBT Tag RAM３上でプロセッサ単位でキャッシュ状態を管理し、MBT Tag RAM３上におけるＣＰＵ１のモディファイドラインに対応するインデックスに対してＣＰＵ２のモディファイドラインを登録するトランザクションが発生し、当該ＣＰＵ２のキャッシュラインがクリーンであるとき、もともと登録されていたＣＰＵ１のモディファイドラインをＣＰＵ２のキャッシュラインに登録し、ＣＰＵ１のキャッシュラインに新たなモディファイドラインを登録することで、キャッシュフラッシュを減らし、システム性能への影響を小さくする。
【０３０８】
プロセッサがセットアソシアティブ方式のキャッシュをもち、かつどのセットに登録したかを外部から観測できない場合で、（外部に付けた）キャッシュ管理機構がダイレクトマップ方式あるいは独自にセット情報を構成するセットアソシアティブ方式でキャッシュ状態の管理を行っている場合に、プロセッサではキャッシュのリプレースが発生しないのにキャッシュ管理機構ではキャッシュのリプレース処理を行わなくてはならないことがある。
【０３０９】
特にキャッシュ管理機構がダイレクトマップ方式の場合には、この現象が発生することは容易に想像される。このようなキャッシュの追い出し動作によって、プロセッサにとっては最も都合の良いキャッシュ状態である“Modified”状態が“Shared”状態に変更されることによる性能低下、およびキャッシュ追い出しのためのバストランザクション発行のためにメモリおよびバスが使用されることによる性能低下がある。特にキャッシュフラッシュを目的とするキャッシュ状態管理では、“Modified”がどのプロセッサにあるかは問題ではなく、“Modified”があるキャッシュラインがもれなく登録されていれば十分である。
【０３１０】
よって、キャッシュ管理機構内部でキャッシュリプレースが発生し、かつバス上でプロセッサからの“Modified”ラインの書き戻しが観測されない場合にキャッシュ管理機構の他のプロセッサの領域に“Invalid”のものがあれば、追い出 されるはずのキャッシュラインをその“Invalid”の領域に“Modified”として 登録すれば、キャッシュ管理機構からの不要なキャッシュライン追い出しトランザクションが発生しないので性能低下が軽減される。
【０３１１】
尚、“Invalid”領域を使われた側のプロセッサが、その領域に登録するよう なトランザクションを発行した場合には、本来所有権のあるプロセッサの登録が後になるので優先順位が高く、仮に登録された“Modified”領域の追い出し動作が発生するので、キャッシュ状態に問題は発生しない。
【０３１２】
上記方式を実現するには、通常系更新ロジック３２４のアルゴリズムを変更すればよい。
【０３１３】
［第１３実施形態］
この第１３実施形態では、図２のキャッシュフラッシュ装置において、キャッシュフラッシュをするキャッシュインデックスの範囲を指定できるようにする。特に、キャッシュフラッシュ方式毎にキャッシュフラッシュの範囲を指定できるようにする。
【０３１４】
上記方式を実現するには、キャッシュフラッシュ用カウンタ２０６、３０６に初期値と終了値を設定できるように変更すればよい。
【０３１５】
このようにすると、キャッシュフラッシュを分割して実行したい場合、あるいはシミュレーションや実機でのデバッグ時間を短縮するのに有効である。また、キャッシュフラッシュによってバス使用権を離さなくなり、プロセッサやＩ／Ｏがタイムアウトするのを防ぐのにも使用できる。
【０３１６】
なお、本発明は上述した各実施形態に限定されるものではなく、その範囲で種々変形して実施することが可能である。
【０３１７】
【発明の効果】
以上詳述したように本発明によれば、高速なキャッシュフラッシュを実現し、併せてチェックポイント処理時におけるオーバーヘッドを低減するキャッシュフラッシュ装置及び方法を提供することができる。
【図面の簡単な説明】
【図１】本発明のキャッシュフラッシュ装置が適用される計算機システムの構成例を示すブロック図。
【図２】本発明のキャッシュフラッシュ装置の構成を示すブロック図。
【図３】  MF RAMおよびMBT Tag RAMに対する実アドレスのマッピングを示す図。
【図４】物理アドレスからMBT Tag RAM上の情報、MF RAM上の情報へ変換する原理を示 す図。
【図５】  MBT Tag RAM上の情報、MF RAM上の情報から物理アドレスへ逆変換する原理を 示す図。
【図６】  MBT Tag RAMデータの中身を示す図。
【図７】  MF RAMデータの中身を示す図。
【図８】キャッシュフラッシュ時の動作を示すフローチャート。
【図９】本発明の第１実施形態における通常処理時の動作の一部を示すフローチャート。
【図１０】本発明の第１実施形態における通常処理時の動作の一部を示すフローチャート。
【図１１】本発明の第１実施形態における通常処理時の動作の一部を示すフローチャート。
【図１２】本発明の第１実施形態における通常処理時の動作の一部を示すフローチャート。
【図１３】同通常処理時のデータの流れを示す図。
【図１４】本発明の第１実施形態におけるセカンドフェーズチェックポイント時の動作の一部を示すフローチャート。
【図１５】同セカンドフェーズチェックポイント時の動作の一部を示すフローチャート。
【図１６】同セカンドフェーズチェックポイント時の動作の一部を示すフローチャート。
【図１７】同セカンドフェーズチェックポイント時のデータの流れを示す図。
【図１８】変形例としてのキャッシュフラッシュ装置によるデータの流れを示す図。
【図１９】本発明の第２実施形態におけるファーストフェーズチェックポイント時の動作の一部を示すフローチャート。
【図２０】同ファーストフェーズチェックポイント時の動作の一部を示すフローチャート。
【図２１】同ファーストフェーズチェックポイント時の動作の一部を示すフローチャート。
【図２２】同ファーストフェーズチェックポイント時のデータの流れを示す図。
【図２３】本発明の第３実施形態の方式を採用した場合における更新サイクルとMF RAMの最終状態の妥当性を示す図。
【図２４】本発明の第６実施形態におけるMF RAMデータんぽ中身を示す図。
【図２５】本発明の第８実施形態に対応するようにMF RAMに対する実アドレスのマッピングを変更する例を示す図。
【図２６】本発明の第８実施形態におけるMF RAMデータの中身を示す図。
【図２７】本発明の第９実施形態に対応するようにMBT Tag RAMに対する実アドレスのマ ッピングを変更する例を示す図。
【図２８】本発明の第１０実施形態に対応するようにMBT Tag RAMに対する実アドレスの マッピングを変更する例を示す図。
【図２９】本発明の第１０実施形態に対応するようにMF RAMに対する実アドレスのマッピングを変更する例を示す図。
【図３０】本発明の第１０実施形態における各フェーズ毎のプロセッサＩＤ更新領域、有効領域、無効領域の違いを示す図。
【符号の説明】
１…キャッシュフラッシュ装置、２…MF RAM、３…MBT Tag RAM、５…プロセ ッサバス、２００…MF RAM制御部、２０１…MF RAM、２０２…MF RAMアドレスセレクタ、２０３…MF RAMリードアドレスバッファ、２０４…MF RAMアドレスマッチバッファ、２０５…MF RAMリードアドレスセレクタ、２０６…インデックスカウンタ、２０７…Ｔ２Ｆアクセスバッファ、２１０…MF RAMライトデータレジスタ、２１１…MF RAMライトバッファ、２２０…MF RAMリードデータレジスタ、２２１…MF RAMモディファイド検出機構、２２２…MF RAM先読みバッファ、２２３…MF RAMキャッシュフラッシュ系変更ロジック、２２４…MF RAM通常系変更ロジック、３００…MBT Tag RAM制御部、３０１…MBT Tag RAMアドレス出力レジスタ、３０２…MBT Tag RAMアドレスセレクタ、３０３…MBT Tag RAMリードアドレスバッファ、３０４…MBT Tag RAMアドレスマッチバッファ、３０５…MBT Tag RAMリードアドレスセレクタ、３０６…インデックスカウンタ、３０７…Ｆ２Ｔアクセスバッファ、３０８…Ｂ２Ｔアクセスバッファ、３１０…MBT Tag RAMライト データレジスタ、３１１…MBT Tag RAMライトバッファ、３２０…MBT Tag RAMリードデータレジスタ、３２１…MBT Tag RAMモディファイド検出機構、３２２…MBT Tag RAM先読みバッファ、３２３…MBT Tag RAMキャッシュフラッシュ系変更 ロジック、３２４…MBT Tag RAM通常系変更ロジック、４００…ＭＢＷＢバッフ ァ、４０１…キャッシュフラッシュ系ライトバックバッファ、４０２…通常処理系ライトバックバッファ、４０３…ライトバックバッファ、４１０…ライトバックスピード調整機構、５００…プロセッサバススヌーパ、６００…バスマスタ、６０１…バス出力レジスタ、７０１，７１１，７２１，７３１…プロセッサ、７０２，７１２，７２２，７３２…キャッシュ、８００…メモリコントローラ、８０１…メモリバス、８１０，８１１，８１２，８１３…メモリモジュール、９００…ＰＣＩブリッジ、９０１…ＰＣＩバス、９１０…ＩＳＡブリッジ、９１１…ＩＳＡバス、９２０…ＬＡＮアダプタ、９２１…ＬＡＮ、９５０…ＰＣＩブリッジ、９５１…ＰＣＩバス、９６０…グラフィックアダプタ、９６１…ディスプレイ、９７０…ディスクコントローラ、９７１…ディスク。
【図１】
0004303803.tif 000002
【図２】
0004303803.tif 000003
【図３】
0004303803.tif 000004
【図４】
0004303803.tif 000005
【図５】
0004303803.tif 000006
【図６】
0004303803.tif 000007
【図７】
0004303803.tif 000008
【図８】
0004303803.tif 000009
【図９】
0004303803.tif 000010
【図１０】
0004303803.tif 000011
【図１１】
0004303803.tif 000012
【図１２】
0004303803.tif 000013
【図１３】
0004303803.tif 000014
【図１４】
0004303803.tif 000015
【図１５】
0004303803.tif 000016
【図１６】
0004303803.tif 000017
【図１７】
0004303803.tif 000018
【図１８】
0004303803.tif 000019
【図１９】
0004303803.tif 000020
【図２０】
0004303803.tif 000021
【図２１】
0004303803.tif 000022
【図２２】
0004303803.tif 000023
【図２３】
0004303803.tif 000024
【図２４】
0004303803.tif 000025
【図２５】
0004303803.tif 000026
【図２６】
0004303803.tif 000027
【図２７】
0004303803.tif 000028
【図２８】
0004303803.tif 000029
【図２９】
0004303803.tif 000030
【図３０】
0004303803.tif 000031