(57)【特許請求の範囲】
【請求項１】
複数のＣＰＵをバスで接続し、各ＣＰＵにキャッシュメモリを備えたマルチＣＰＵ構成の情報処理装置を対象とし、前記ＣＰＵ内でランダム命令列を生成してキャッシュコヒーレンシィ試験を行う情報処理装置の試験方法において、
同一論理空間を持ち、命令により切り換え可能な異なるコンテキストを複数用意し、該コンテキスト毎に、それぞれ論理アドレスと実メモリの物理アドレスとの対応情報を持ち、
前記ランダム命令列を実行させる過程で、特定命令により前記コンテキストを切り換えた際、同一論理アドレスをアクセスしても、実メモリの異なる物理アドレスを指すようにしてキャッシュリプレースを行わせ、キャッシュリプレース回数をより多く生成させることを特徴とする情報処理装置の試験方法。
【請求項２】
複数のＣＰＵをバスで接続し、各ＣＰＵにキャッシュメモリを備えたマルチＣＰＵ構成の情報処理装置を対象とし、前記ＣＰＵ内でランダム命令列を生成してキャッシュコヒーレンシィ試験を行う情報処理装置の試験方法において、
生成したランダム命令列を別の空間に複写する処理と、
両方のランダム命令空間に対して、論理アドレスが等しく、物理アドレスが異なるアドレス変換テーブルを作成し、該テーブルに異なるコンテキスト値を定義する処理と、
初期値として、コンテキストに値を設定し、或る論理アドレスから試験を開始させる処理と、
或る割り込みを契機に、命令の論理アドレスを前記アドレス変換テーブルから選択し、この値にランダム命令内アドレスを命令カウンタに設定する処理と、
或る割り込みを契機に、コンテキストの値を切り換えることにより、論理アドレスの命令カウンタは変わらずに、物理アドレスのみ変更できるようにする処理とを有し、
前記処理により、ランダム命令列を頭から順次実行し、かつ実行空間のみ変化させることで、命令キャッシュのキャッシュコヒーレンシィ試験を可能にしたことを特徴とする情報処理装置の試験方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、複数のＣＰＵをバスで接続し、各ＣＰＵにキャッシュメモリを備えたマルチＣＰＵシステムを対象としたランダム命令試験で、キャッシュコヒーレンシィ機能の検証を可能にした情報処理装置の試験方法に関する。
【０００２】
【従来の技術】
以下、従来例を説明する。
【０００３】
§１：キャッシュコヒーレンシィの説明
近年、コンピュータの高速化の一手段として、主記憶メモリ（主記憶装置）とは別に、ＣＰＵにキャッシュメモリと呼ばれる数キロバイトから数メガバイトにも及ぶ高速メモリを配置し処理のスピードアップを図っている。この場合、主記憶メモリからキャッシュに読み込まれたデータは、キャッシュメモリ上で動作している間、常に高速でデータ処理が行える。
【０００４】
この制御は、ＣＰＵ１台の時は自ＣＰＵ内部のキャッシュメモリと主記憶メモリとの一致性（Cache Coherency ：キャッシュコヒーレンシィ）を考慮するだけで済むが、複数のＣＰＵが搭載された場合は、ＣＰＵ相互のキャッシュメモリをも考慮する必要があり、複雑なハード制御となる。この制御を、図に基づいて簡単に説明すると次のようになる。
【０００５】
§２：システム構成と処理概要の説明・・・図１５参照
図１５は従来例のシステム構成図である。このシステムは、マルチＣＰＵシステムの１例であり、複数のＣＰＵ（ＣＰＵ−０、ＣＰＵ−１・・・）と主記憶メモリ１（全ＣＰＵで共有する１個のメモリ）と、システムコントローラ２等がバスで接続されている。そして、各ＣＰＵには、それぞれキャッシュメモリ（以下、単に「キャッシュ」とも記す）を持っている。
【０００６】
この場合、各ＣＰＵ内部には一次キャッシュ（以下「Ｌ１＄」と記す）を設け、各ＣＰＵのチップの外側には二次キャッシュ（以下「Ｌ２＄」と記す）を設けている。前記Ｌ１＄は小容量のキャッシュであり、Ｌ２＄はＬ１＄よりも大容量のキャッシュである。
【０００７】
また、前記バスにはシステムコントローラ２が接続され、該システムコントローラ２に接続された別のバスには入出力制御部（以下「Ｉ／Ｏ制御部」と記す）５を介してＲＯＭ６等が接続されている。前記システムコントローラ２は、システム内のキャッシュメモリの管理等を含む各種制御を行うものであり、該システムコントローラ２内に、キャッシュ情報テーブル４を有するキャッシュ制御部３が設けてある。
【０００８】
前記キャッシュ制御部３は、前記各ＣＰＵが持つＬ１＄、Ｌ２＄の情報をキャッシュ情報テーブル４に格納し、これらＬ１＄、Ｌ２＄のキャッシュ制御を行う機能を備えている。例えば、ＣＰＵが主記憶メモリ１のデータを取り込む場合、先ず、内部のＬ１＄を見にゆく。そして、Ｌ１＄に該当するデータがなければ、他のＣＰＵへ該当するデータを取りに行くが、この時、前記ＣＰＵはシステムコントローラ２へキャッシュ情報を貰いに行き、その情報に基づいて他のＣＰＵのデータ読み込む。
【０００９】
従って、システムコントローラ２は、各ＣＰＵのＬ１＄、Ｌ２＄の情報を、キャッシュ情報テーブル４に格納し、常に更新しながら管理しておき、各ＣＰＵに対してこの情報によりキャッシュ制御を行うようになっている。
【００１０】
前記システムにおいて、各ＣＰＵがロード命令（Load）、及びストア命令（Store ）を実行する場合の処理概要は次の通りである。例えば、前記ロード命令は、主記憶メモリ１のデータをＣＰＵ内のレジスタに取り込む処理であるが、この場合、最初のロード命令であれば、データは主記憶メモリ１→Ｌ２＄→Ｌ１＄→ＣＰＵ内部のレジスタの順に転送される。
【００１１】
また、ストア命令は、ＣＰＵ内のレジスタに格納されているデータを主記憶メモリ１に書き込む処理であるが、この命令を実行した場合の処理は次の通りである。先ず、ＣＰＵ内のレジスタに格納されているストアすべきデータに対応するデータがＬ１＄に有るかどうかを判断し、該データが有れば、Ｌ１＄の対応するデータを新データ（前記ストア対象のデータ）で書き換えて処理を終了する。この時、主記憶メモリ１のデータは書き換えないため古いデータのままである。
【００１２】
しかし、Ｌ１＄に前記ストア対象のデータに対応するデータが無ければ、ストアすべきデータに対応するデータがＬ２＄に有るかどうかを判断し、該データが有れば、Ｌ２＄の対応するデータを新データ（前記ストア対象のデータ）で書き換えて処理を終了する。この時、主記憶メモリ１のデータは書き換えないため古いデータのままである。
【００１３】
更に、前記ストアすべきデータに対応するデータが、Ｌ１＄にもＬ２＄にも無ければ、前記対応するデータを主記憶メモリ１から読み出してＬ２＄に書き込み、Ｌ２＄の対応するデータを新データ（前記ストア対象のデータ）で書き換えて処理を終了する。この時、主記憶メモリ１のデータは書き換えないため古いデータのままである。
【００１４】
なお、主記憶メモリ１にデータを書き込むのは、Ｌ２＄を追い出されたデータである。そして、前記の各処理はシステムコントローラ２が常に監視していて、そのキャッシュメモリの情報は、キャッシュ制御部３がキャッシュ情報テーブル４に格納している。また、Ｌ１＄に有るデータは、必ずＬ２＄にも有る。従って、各ＣＰＵのアクセス命令実行時には、システムコントローラ２からの前記キャッシュ情報テーブル４の情報を基に処理を行う。
【００１５】
なお、前記キャッシュの制御に関しては、「ＭＯＥＳＩ」の理論として多くの文献に記載されており、良く知られている（周知の理論）ので、詳細な説明は省略する。前記「ＭＯＥＳＩ」に関する参考文献の１例としては、例えば、次の参考文献が知られている。
【００１６】
参考文献：「ultraSPARCTM-IUser′s Manual」，Revision 1.0,Sept 18,1995,「 SPARC Technology Business 」 A Sun Microsystems,Inc.Business 2550 Garcia Avenue,Mountain View,CA 94043 U.S.A,Part No;STP1030-UG.(P91-97参照）．
§３：システム内の処理の説明
前記システムにおいて、例えば、ＣＰＵ−０が主記憶メモリ１の１００番地の内容をロード（Load）すると、ＣＰＵ−０のキャッシュ（Ｌ１＄）には主記憶メモリ１の１００番地から１ブロック（例えば、６４バイト）分のデータが読み込まれる。次に、主記憶メモリ１の１００番地に新しいデータを格納（Store ）すると、ＣＰＵ−０のキャッシュ（Ｌ１＄、又はＬ２＄）は新しいデータに置き変わるが、主記憶メモリ１は古いデータを保持している。
【００１７】
この状態でＣＰＵ−１が主記憶メモリ１の１００番地の内容をロードした場合、その時のデータは主記憶メモリ１から読み出されずにＣＰＵ−０のキャッシュ（Ｌ１＄、又はＬ２＄）から読み出される。これは最新の１００番地のデータをＣＰＵ−０のキャッシュ（Ｌ１＄、又はＬ２＄）が保持しているからである。このような機構を持つシステムにおけるキャッシュの一致性を検証する手法について次に述べる。
【００１８】
§４：キャッシュの一致性を検証する手法の説明・・・図１６参照
図１６は、従来のランダム命令試験例である。一般的に、或る１つのタスクを複数同時に動作させる場合、スタック域、データアクセス域等のデータを書き換える領域をタスク数分設け、各タスクはそれぞれ自分に割り当てられた空間を使用することにより実現させている。この手法は、１つのタスクを複数のＣＰＵから共有して動作させる場合に当てはまり、一般的にはマルチＣＰＵのランダム命令試験もこの手法を用いている場合が多い。
【００１９】
従来技術では、１台のＣＰＵ配下で動作しているランダム命令テスト（この中にはメモリをアクセスする命令も含まれている）を単に、複数のＣＰＵ配下で同時に動作させているだけである。つまり、ランダム命令が同時に複数ＣＰＵから実行されれば、そのランダム命令列中に含まれるアクセス命令も複数ＣＰＵからランダムに発信され、結果的にキャッシュ・主記憶メモリ間のテストができるという考えである。
【００２０】
例えば、図１６に示した例では、ランダム命令列が異なり、メモリアクセス域が異なる第１のテスト例（図１６のＡ図参照）と、ランダム命令列が同じで、メモリアクセス域が異なる第２のテスト例（図１６のＢ図参照）を示している。この場合、前記テスト例１では、ＣＰＵ−０とＣＰＵ−１が、異なるメモリ域を使用し、異なる命令列を実行することでテストを行う。また、前記テスト例２では、ＣＰＵ−０とＣＰＵ−１が、同じメモリ域を使用し、異なる命令列を実行することで試験を行う。
【００２１】
ここで問題となるのが、各ＣＰＵからのアクセス域が別空間に存在するため、或るＣＰＵのメモリアクセス動作が他のＣＰＵのキャッシュに対して作用することがない。すなわち、複数ＣＰＵに跨がってキャッシュコヒーレンシィテストができていないのが現状である。このテストを実現するためには、同一キャッシュラインに対してのアクセスが必要になるが、このような手法は提供されていないのが現状である。
【００２２】
【発明が解決しようとする課題】
前記のような従来のものにおいては、次のような課題があった。
【００２３】
前記のように、同一キャッシュライン（例えば、６４バイト）に対してのアクセスを可能にするためには、各ＣＰＵが同一ブロックアドレス（６４バイトバウンダリから６４バイト）をアクセスする必要がある。ここで、各ＣＰＵがアクセスする空間（メモリ領域）を同じにすれば良いと考えるかもしれないが、各ＣＰＵは非同期に動作しているため、各ＣＰＵが同一アドレスを使うとなると、タイミングによってメモリに書き込んだ内容を読み出した時に異なるデータを読み出すことがある。これは、そのアドレスの内容を読み出す直前に、別のＣＰＵがそのアドレスに別の内容を書き込む可能性があるからである。
【００２４】
本発明は、このような従来の課題を解決し、マルチＣＰＵを対象としたランダム命令試験で、各ＣＰＵが同一ブロックをアクセスでき、かつ別のＣＰＵからデータが破壊されない手法を用いてキャッシュコヒーレンシィ試験を実現できるようにすることを目的とする。
【００２５】
【課題を解決するための手段】
図１は本発明の原理説明図であり、１は主記憶メモリ、２はシステムコントローラ、３はキャッシュ制御部、４はキャッシュ制御情報テーブル、６はプログラムを格納したＲＯＭ、９はキャッシュメモリを示す。本発明は前記の目的を達成するため、次のように構成した。
【００２７】
(1) ：複数のＣＰＵをバスで接続し、各ＣＰＵにキャッシュメモリを備えたマルチＣＰＵ構成の情報処理装置を対象とし、前記ＣＰＵ内でランダム命令列を生成してキャッシュコヒーレンシィ試験を行う情報処理装置の試験方法において、同一論理空間を持ち、命令により切り換え可能な異なるコンテキストを複数用意し、該コンテキスト毎に、それぞれ論理アドレスと実メモリの物理アドレスとの対応情報を持ち、前記ランダム命令列を実行させる過程で、特定命令により前記コンテキストを切り換えた際、同一論理アドレスをアクセスしても、実メモリの異なる物理アドレスを指すようにしてキャッシュリプレースを行わせ、キャッシュリプレース回数をより多く生成させるようにした。
【００２８】
(2) ：複数のＣＰＵをバスで接続し、各ＣＰＵにキャッシュメモリ９を備えたマルチＣＰＵ構成の情報処理装置を対象とし、前記ＣＰＵ内でランダム命令列を生成してキャッシュコヒーレンシィ試験を行う情報処理装置の試験方法において、各ＣＰＵが実行する前記ランダム命令列内に試験対象キャッシュアドレスの選択を行う特定命令を設けておき、この特定命令の実行により、各ＣＰＵとも、同一の試験対象キャッシュアドレスを選択し、このアドレスに、各ＣＰＵに割り振ったシフトバイトを加算した値を求め、この値により、各ＣＰＵから見て、同一キャッシュアドレスで、かつ、アクセスが重複しないようにした。
【００２９】
(3) ：複数のＣＰＵをバスで接続し、各ＣＰＵにキャッシュメモリ９を備えたマルチＣＰＵ構成の情報処理装置を対象とし、前記ＣＰＵ内でランダム命令列を生成してキャッシュコヒーレンシィ試験を行う情報処理装置の試験方法において、生成したランダム命令列を別の空間に複写する処理と、両方のランダム命令空間に対して、論理アドレスが等しく、物理アドレスが異なるアドレス変換テーブルを作成し、該テーブルに異なるコンテキスト値を定義する処理と、初期値として、コンテキストに値を設定し、或る論理アドレスから試験を開始させる処理と、或る割り込みを契機に、命令の論理アドレスを前記アドレス変換テーブルから選択し、この値にランダム命令内アドレスを命令カウンタに設定する処理と、或る割り込みを契機に、コンテキストの値を切り換えることにより、論理アドレスの命令カウンタは変わらずに、物理アドレスのみ変更できるようにする処理とを有し、前記処理により、ランダム命令列を頭から順次実行し、かつ実行空間のみ変化させることで、命令キャッシュのキャッシュコヒーレンシィ試験を可能にした。
【００３１】
（作用）
前記構成に基づく本発明の作用を、図１に基づいて説明する。
【００３３】
このようにすれば、全てのＣＰＵから同一命令を実行した時に、アクセス命令のアクセスアドレスは、ＣＰＵ毎に必ず決められたアドレス範囲を指すことができる。すなわち、全ＣＰＵに同一アクセス空間を割り当てた時の各ＣＰＵからの重複アクセスを回避することができる。
【００３４】
従って、マルチＣＰＵを対象としたランダム命令試験で、各ＣＰＵが同一ブロックをアクセスでき、かつ別のＣＰＵからデータが破壊されないようにしてキャッシュコヒーレンシィ試験を実現できる。
【００３５】
(a) ：前記(1) では、前記情報処理装置の試験を行う際、同一論理空間を持ち、命令により切り換え可能な異なるコンテキストを複数用意する。そして、コンテキスト毎に、それぞれ論理アドレスと実メモリの物理アドレスとの対応情報を持ち、ランダム命令列を実行させる過程で、特定命令によりコンテキストを切り換えた際、同一論理アドレスをアクセスしても、実メモリの異なる物理アドレスを指すようにしてキャッシュリプレース（例えば、Ｌ１＄からＬ２＄へのキャッシュデータの追い出し）を行わせる。このようにすれば、キャッシュリプレース回数をより多く生成することができる。
【００３６】
(b) ：前記(2) では、前記情報処理装置の試験を行う際、各ＣＰＵが実行するランダム命令列内に試験対象キャッシュアドレスの選択を行う特定命令（例えば、Select Line ( )）を設けておき、この特定命令の実行により、各ＣＰＵとも、同一の試験対象キャッシュアドレスを選択し、このアドレスに、各ＣＰＵに割り振ったシフトバイトを加算した値を求め、この値により、各ＣＰＵから見て、同一キャッシュアドレスで、かつ、アクセスが重複しないようにする。
【００３７】
すなわち、複数ＣＰＵから試験対象となる同一メモリブロック内でアクセスが重複しないメモリアドレスを導出することができる。このようにすれば、ランダム命令列に意図したキャッシュコヒーレンシィ論理を組み込む手法を実現でき、試験時の全組み合わせの実現時間を短縮させることが可能になる。
【００３８】
(c) ：前記(3) では、前記情報処理装置の試験を行う際、生成したランダム命令列を別の空間に複写する処理と、両方のランダム命令空間に対して、論理アドレスが等しく、物理アドレスが異なるアドレス変換テーブルを作成し、該テーブルに異なるコンテキスト値を定義する処理と、初期値として、コンテキストに値を設定し、或る論理アドレスから試験を開始させる処理と、或る割り込みを契機に、命令の論理アドレスを前記アドレス変換テーブルから選択し、この値にランダム命令内アドレスを命令カウンタに設定する処理と、或る割り込みを契機に、コンテキストの値を切り換えることにより、論理アドレスの命令カウンタは変わらずに、物理アドレスのみ変更できるようにする処理とを行う。
【００３９】
そして、前記処理により、ランダム命令列を頭から順次実行し、かつ実行空間のみ変化させることで、命令キャッシュのキャッシュコヒーレンシィ試験を可能にする。
【００４３】
【発明の実施の形態】
以下、発明の実施の形態を図面に基づいて詳細に説明する。
【００４４】
§１：システムの説明・・・図２参照
図２はシステム構成図である。このシステムは、マルチＣＰＵシステム（マルチＣＰＵ構成の情報処理装置）の１例であり、バス上に複数（ｎ個）のＣＰＵ（ＣＰＵ−０、ＣＰＵ−１・・・ＣＰＵ−ｎ）と主記憶メモリ１（全ＣＰＵで共有する１個のメモリ）と、システムコントローラ２等が搭載されている。そして、各ＣＰＵは、それぞれキャッシュメモリ（以下、単に「キャッシュ」とも記す）を持っている。
【００４５】
この場合、各ＣＰＵ内部（ＣＰＵチップの内部）にはＬ１＄（一次キャッシュ）を設け、各ＣＰＵの外側（ＣＰＵチップとは別のチップ）にはＬ２＄（二次キャッシュ）を設け、これらをバスにより接続している。なお、この例の場合、一次キャッシュと二次キャッシュを設けた例であるが、一般的には更に多くのキャッシュ（三次キャッシュ、四次キャッシュ等、一般的にはｎ次キャッシュまで）設けることもできる。
【００４６】
前記Ｌ１＄は小容量のキャッシュであり、例えば、３２ＫＢ（キロバイト）のキャッシュメモリ（それぞれ、Ｗａｙ−０、Ｗａｙ−１、Ｗａｙ−２、Ｗａｙ−３とする）を４個で構成する（４つのキャッシュ領域で構成する）。また、前記Ｌ２＄は１ＭＢ、又は２ＭＢ、又は４ＭＢ等の容量を持つ大容量（Ｌ１＄に比べて大容量）のキャッシュである。この場合、図面上では、Ｌ１＄のＷａｙ−０、Ｗａｙ−１、Ｗａｙ−２、Ｗａｙ−３の各左端がアドレス＝０で、右端がアドレス＝３２Ｋとする。そして、図２の斜線部分は、６４バイト幅のキャッシュラインである。
【００４７】
前記バスには、システムコントローラ２が接続され、該システムコントローラ２に接続された別のバスには、入出力制御部（以下「Ｉ／Ｏ制御部」と記す）５を介してＲＯＭ６等が接続されている。前記システムコントローラ２は、システム内のキャッシュ管理等を含む各種制御を行うものであり、該システムコントローラ２内に、キャッシュ情報テーブル４を備えたキャッシュ制御部３が設けてある。
【００４８】
前記キャッシュ制御部３は、各ＣＰＵが持つＬ１＄、Ｌ２＄の情報（キャッシュ情報）をキャッシュ情報テーブル４に格納し、これらＬ１＄、Ｌ２＄のキャッシュ管理（又はキャッシュ制御）を行う機能を備えている。例えば、ＣＰＵが主記憶メモリ１のデータを取り込む（ロードする）場合、先ず、内部のＬ１＄を見にゆく。
【００４９】
そして、Ｌ１＄、Ｌ２＄に該当するデータがなければ、他のＣＰＵへ該当するデータを取りに行くが、この時、前記ＣＰＵはシステムコントローラ２へキャッシュ情報を貰いに行き、その情報に基づいて他のＣＰＵからキャッシュデータを読み込む。
【００５０】
従って、システムコントローラ２は、各ＣＰＵのＬ２＄の情報を、キャッシュ情報テーブル４に格納し、前記情報を常に更新しながら管理しておき、各ＣＰＵに対してこの情報によりキャッシュ制御を行うようになっている。また、ＲＯＭ６には、以下に説明するキャッシュ試験用のプログラムが格納されている。
【００５１】
そして、以下に説明するキャッシュコヒーレンシィ試験を行う場合には、ＲＯＭ６に格納されているプログラムを、ＩＰＬでＣＰＵ（例えば、ＣＰＵ−０）が主記憶メモリ１へロードした後、該ＣＰＵが主記憶メモリ１のプログラムを取り込んで実行することで、このシステム内での試験を行う。
【００５２】
前記システムにおいて、各ＣＰＵがロード命令（Load）、及びストア命令（Store ）を実行する場合の処理概要は次の通りである。例えば、前記ロード命令は、主記憶メモリ１のデータをＣＰＵ内のレジスタに取り込む処理であるが、この場合、最初の（Ｌ１＄、Ｌ２＄が全て空の状態での）ロード命令であれば、データは、主記憶メモリ１→Ｌ２＄→Ｌ１＄→ＣＰＵ内部のレジスタの順に転送される。
【００５３】
この場合、例えば、主記憶メモリ１の１００番地のデータをロードするのであれば、主記憶メモリ１の１００番地から６４バイト分のデータを読み出し、このデータをＬ２＄に格納し、その後、該Ｌ２＄からＬ１＄へデータを転送し、Ｌ１＄のＷａｙ−３に格納する。
【００５４】
このように動作を繰り返すことで、順次データのロードを行うと、Ｌ１＄には、順次Ｗａｙ−３→Ｗａｙ−２→Ｗａｙ−１→Ｗａｙ−０にそれぞれ６４バイト分のデータが格納され、図２に示したキャッシュラインに、主記憶メモリ１から読み出したデータが順次格納されるようになる。
【００５５】
また、ストア命令は、ＣＰＵ内のレジスタに格納されているデータを主記憶メモリ１に書き込む処理であるが、この命令を実行した場合の処理は次の通りである。先ず、ＣＰＵ内のレジスタに格納されているストアすべきデータに対応するデータがＬ１＄に有るかどうかを判断し、該データが有れば、Ｌ１＄の対応するデータを新データ（前記ストア対象のデータ）で書き換えて処理を終了する。この時、主記憶メモリ１のデータは書き換えないため古いデータのままである。
【００５６】
しかし、Ｌ１＄に前記ストア対象のデータに対応するデータが無ければ、ストアすべきデータに対応するデータがＬ２＄に有るかどうかを判断し、該データが有れば、Ｌ２＄の対応するデータを新データ（前記ストア対象のデータ）で書き換えて処理を終了する。この時、主記憶メモリ１のデータは書き換えないため古いデータのままである。
【００５７】
更に、前記ストアすべきデータに対応するデータが、Ｌ１＄にもＬ２＄にも無ければ、前記対応するデータを主記憶メモリ１から読み出してＬ２＄に書き込み、Ｌ２＄の対応するデータを新データ（前記ストア対象のデータ）で書き換えて処理を終了する。この時、主記憶メモリ１のデータは書き換えないため古いデータのままである。以下、キャッシュコヒーレンシィ試験の具体例を詳細に説明する。
【００５８】
§２：例１の説明・・・図３、図４参照
図３は例１の説明図（その１）であり、Ａ図はオペランドアドレス生成用ベースレジスタの定義、Ｂ図はオペランドアドレス生成用インデックスレジスタの定義、Ｃ図はオペランドアドレス生成用Displacement値の定義を示す。また、図４は例１の説明図（その２）である。
【００５９】
例１は、全ＣＰＵに同一アクセス空間を割り当てた時の各ＣＰＵからの重複アクセスを防ぐ手法を用いた試験方法である。なお、各ＣＰＵには、それぞ各種のレジスタ等が設けてあるが、以下の説明では、各ＣＰＵ内に設けたインデックスレジスタを％Ｇ１、ベースレジスタを％Ｇ２と記す（％Ｇ１、％Ｇ２はいずれもレジスタの番号）。
【００６０】
主記憶メモリ１に対するアクセス命令のオペランドアドレスの生成は、▲１▼：ベースレジスタ（％Ｇ２）のアドレス＋インデックスレジスタ（％Ｇ１）のアドレス（％Ｇ２＋％Ｇ１）、又は、▲２▼：ベースレジスタ（％Ｇ２）のアドレス＋ディスプレースメント値（％Ｇ２＋ディスプレースメント値）で決まる。従って、％Ｇ１の値、％Ｇ２の値、及びディスプレースメント値を規定することで、各ＣＰＵのアクセスする空間（主記憶メモリ１の領域）を同じにして、かつ領域の重複アクセスを回避させることができる。そこで、各レジスタの定義を次のようにする。
【００６１】
(1) ：オペランドアドレス生成用ベースレジスタの定義
ランダム命令列で生成されるアクセス命令のオペランドアドレスを指すベースレジスタ（％Ｇ２）の値を、各ＣＰＵ毎に固定に定義し、各ＣＰＵはそのレジスタ（％Ｇ２）の値に１６バイトづつずらした値を設定する。なお、ここで定義した１６バイトという値は、キャッシュのアクセス単位が６４バイトの時に最大４ＣＰＵを動作させた場合の値である。つまり、試験対象のＣＰＵ数とキャッシュのアクセス単位によりこの値は変化する。
【００６２】
この例では、ＣＰＵ−０〜ＣＰＵ−３の各ベースレジスタ（％Ｇ２）の値を図３のＡ図のように設定する（図のｘは１６進数のヘキサを意味する記号である）。例えば、ＣＰＵ−０内のベースレジスタ（％Ｇ２）のアドレスをｎ＝「０ｘ００１０００００」に設定し、この値に１６バイトづつずらした値を他のＣＰＵのベースレジスタに設定する。
【００６３】
すなわち、ＣＰＵ−１内のベースレジスタ（％Ｇ２）のアドレス＝ｎ＋１６＝「０ｘ００１０００１０」に設定し、ＣＰＵ−２内のベースレジスタ（％Ｇ２）のアドレス＝ｎ＋３２＝「０ｘ００１０００２０」に設定し、ＣＰＵ−３内のベースレジスタ（％Ｇ２）のアドレス＝ｎ＋４８＝「０ｘ００１０００３０」に設定する。
【００６４】
(2) ：オペランドアドレス生成用インデックスレジスタの定義
ランダム命令列で生成されるアクセス命令のオペランドアドレスのインデックス部を指すインデックスレジスタ（％Ｇ１）の値を固定に定義し、その内容をキャッシュのアクセス境界（６４バイトバウンダリ）に設定する。この例では、図３のＢ図に示したように、インデックスレジスタ（％Ｇ１）に、「０ｂｍ・・・ｍｍｍ００００００」を設定する。この場合、例えば、０ｘ３ｃ０（ｍの単位はビット）とする。
【００６５】
(3) ：オペランドアドレス生成用ディスプレースメント値（直値）の定義
ランダム命令列で生成されるアクセス命令のオペランドアドレス内のディスプレースメント値のビット４、５を０固定とする。この例では、ディスプレースメント値は「０ｂｎｎｎｎｎｎｎｎ００ｍｍｍｍ」に設定する。この場合、例えば、ディスプレースメント値＝０ｘ２ｃ８（ｍ，ｎの単位はビット）とする。また、前記値「０ｂｎｎｎｎｎｎｎｎ００ｍｍｍｍ」において、図示の右端のｍはビット０、その左側のｍはビット１となる。従って、ビット４は右端から５ビット目の０である。
【００６６】
なお、前記ビット４、５は、前記(1) のオペランドアドレス生成用ベースレジスタの定義で説明した条件（前記定義した１６バイトという値は、キャッシュのアクセス単位が６４バイトの時に最大４ＣＰＵを動作させた場合の値である。つまり、試験対象のＣＰＵ数とキャッシュのアクセス単位によりこの値は変化する。）により決定する。
【００６７】
この場のｍの値は、生成された命令の種類により規定される。例えば、１バイト格納命令が生成された場合は、「ｍｍｍｍ」の値（ｍは任意の値）、２バイト格納命令が生成された場合は、「ｍｍｍ０」の値、４バイト格納命令が生成された場合は、「ｍｍ００」の値、８バイト格納命令が生成された場合は、「ｍｍ００」の値とする。
【００６８】
すなわち、そのアドレスからデータをアクセスした時に、１６のバウンダリを越えない値を定義する必要がある。１６バウンダリを越えてアクセスすると、次のＣＰＵがアクセスする領域にアクセスが及んでしまうからである。前記の条件で生成されたアクセス命令のオペランドアドレスは、必ず６４バイトバウンダリでＣＰＵ単位に決められたアドレスを指すことができる。例えば、以下の命令が生成された場合で前記の例の値を当てはめると、図３のＣ図に示したようになる。
【００６９】
▲１▼：ベースレジスタ（％Ｇ２）のアドレス＋インデックスレジスタ（％Ｇ１）のアドレスを適用した場合、次のようになる。例えば、８バイトアクセスの例では、ストア命令をＳＴＸ（Ｘ：例えば、８バイト）、ＣＰＵ内に設けられたＩレジスタ番号５を％Ｉ５、アクセス命令のアクセスアドレス（オペランドアドレス）をＯＰとすると、ＳＴＸ，％Ｉ５，［％Ｇ２＋％Ｇ１］は、次のようになる。なお、前記［％Ｇ２＋％Ｇ１］は主記憶メモリ１のアドレスを示す。
【００７０】
すなわち、ＣＰＵ−０が、％Ｇ２＝０ｘ００１０００００＋％Ｇ１＝０ｘ３ｃ０、ＯＰ＝０ｘ００１００３ｃ０、ＣＰＵ−１が、％Ｇ２＝０ｘ００１０００１０＋％Ｇ１＝０ｘ３ｃ０、ＯＰ＝０ｘ００１００３ｄ０、ＣＰＵ−２が、％Ｇ２＝０ｘ００１０００２０＋％Ｇ１＝０ｘ３ｃ０、ＯＰ＝０ｘ００１００３ｅ０、ＣＰＵ−３が、％Ｇ２＝０ｘ００１０００３０＋％Ｇ１＝０ｘ３ｃ０、ＯＰ＝０ｘ００１００３ｆ０となる。
【００７１】
▲２▼：ベースレジスタ（％Ｇ２）のアドレス＋ディスプレースメント値のアドレスを適用した場合、次のようになる。例えば、８バイトアクセスの例では、ストア命令をＳＴＸ（Ｘ：例えば、８バイト）、Ｉレジスタ番号５を％Ｉ５、オペランドアドレスをＯＰとすると、ＳＴＸ，％Ｉ５，［％Ｇ２＋０ｘ２ｃ８］は、次のようになる。なお、％Ｉ５は、オペランドアドレスを格納するレジスタである。
【００７２】
すなわち、ＣＰＵ−０が、％Ｇ２＝０ｘ００１０００００＋Ｉｍｍ１３＝０ｘ２ｃ８、ＯＰ＝０ｘ００１００２ｃ８、ＣＰＵ−１が、％Ｇ２＝０ｘ００１０００１０＋Ｉｍｍ１３＝０ｘ２ｃ８、ＯＰ＝０ｘ００１００２ｄ８、ＣＰＵ−２が、％Ｇ２＝０ｘ００１０００２０＋Ｉｍｍ１３＝０ｘ２ｃ８、ＯＰ＝０ｘ００１００２ｅ８、ＣＰＵ−３が、％Ｇ２＝０ｘ００１０００３０＋Ｉｍｍ１３＝０ｘ２ｃ８、ＯＰ＝０ｘ００１００２ｆ８となる。なお、前記［％Ｇ２＋０ｘ２ｃ８］は主記憶メモリ１のアドレスを示す。
【００７３】
前記のように、全てのＣＰＵから同一命令を実行した時に、前記ＯＰで表されるアクセス命令のアクセスアドレスは、ＣＰＵ毎に必ず決められた範囲（この場合は、１６バイト）を指すことができる。従って、各ＣＰＵでランダムに発行したアクセス命令（例えば、ストア命令）は、全ＣＰＵに同一アクセス空間（メモリ領域）を割り当てた時に、各ＣＰＵからの重複アクセスを防止できることになる。この状態を図４に示す。
【００７４】
図４では、ＣＰＵ−０〜ＣＰＵ−３は、それぞれ１６バイトずつ離れた領域（アドレス範囲）に割り当てられており、アクセスする場合の重複が防止できている。すなわち、全ＣＰＵに同一アクセス空間（メモリ領域）を割り当てた時に、各ＣＰＵからの重複アクセスを確実に防止することが可能になる。
【００７５】
この場合、主記憶メモリ１へアクセスする際のデータのブロック単位は、例えば６４バイトであるが、一般的には、（ブロックサイズ）／（ＣＰＵ数）＝各ＣＰＵに割り当てられたアドレス範囲（図４では１６バイト）である。
【００７６】
§３：例２の説明・・・図５参照
図５は例２の説明図であり、アクセス用レジスタ番号とメモリアドレスの関係を示している。例２は、ウインドウの切り換えだけでキャッシュコヒーレンシィの動作環境を実現することで、ランダム命令列にキャッシュコヒーレンシィの動作環境をより多く生成させる例である。
【００７７】
例えば、「Ultra-sparc 」等のＲＩＳＣ（Reduced Instruction Set Computer）型コンピュータ（縮小命令セット・コンピュータ）には、汎用レジスタ（％Ｇ０〜％Ｇ７）と各ウインドウ毎にインレジスタ（％Ｉ０〜％Ｉ７）、ローカルレジスタ（％Ｌ０から％Ｌ７）と、アウトレジスタ（％Ｏ０〜％Ｏ７）があり、ウインドウレジスタは、図５に示したように、隣り合うウインドウのイン（％Ｉ）とアウト（％Ｏ）のレジスタが重複している（％Ｉと％Ｏは内容が同じ）。
【００７８】
この場合、ローカルレジスタ（％Ｌ０〜％Ｌ７）はウインドウ（ＣＷ０〜ＣＷ４）を切り換えると異なる内容となるが、隣り合うウインドウのアウトレジスタ（％Ｏ）とインレジスタ（％Ｉ）の内容は同じである。これらのレジスタは、プログラムが或るウインドウを指している時は、その時のウインドウのレジスタと汎用レジスタ（％Ｇ）のみが使用可能となる。
【００７９】
そのため、アクセス用として定義するのは、どのウインドウからでも参照できる汎用レジスタ（％Ｇ）を使用しているケースが殆どである。この場合、多くても７つのアドレスしか指定できない。この発明では、アクセスレジスタとして着目したのは、各ウインドウのローカルレジスタ（％Ｌ０〜％Ｌ７）であり、ウインドウが５つあると仮定すると、４０個のアドレスが指定可能となる（ウインドウの切り換えだけで、極めて多くのレジスタ値が簡単に得られる）。
【００８０】
この４０個のレジスタに、予め、論理空間の異なるアドレスを設定しておくことにより、命令でカレントウインドウを切り換えるだけで、キャッシュコヒーレンシィの動作環境がより多く作れる。この場合、カレントウインドウＣＷ０〜ＣＷ４（ＣＷ：Current Window）は、プログラム上のウインドウ切り換え命令で切り換え可能なウインドウである。そして、％ＬのレジスタをＣＷで切り換えることにより、ベースレジスタとして使用する。すなわち、％ＬをＣＷ０〜ＣＷ４で切り換えることにより、該％Ｌを前記ベースレジスタとして使用する。
【００８１】
また、前記％Ｇは前記インデックスレジスタとして使用する。この場合、％Ｇには、インデックスポインタとして、−６４、０、＋６４の値が格納されているので、これを使用すれば、ＣＷの切り換えだけでキャッシュコヒーレンシィの動作環境を簡単に実現することが可能になる。
【００８２】
このように、各ウインドウ毎に設けられたローカルレジスタ（％Ｌ）に、予め、論理空間の異なるアドレスを設定しておき、このローカルレジスタをウインドウにより切り換えて、前記ランダム命令列で生成されるアクセス命令のオペランドアドレスを指すベースレジスタとして使用し、前記汎用レジスタ（％Ｇ）を前記オペランドアドレスのインデックス部を指すインデックスレジスタとして使用することにより、ウインドウの切り換えだけで、キャッシュコヒーレンシィの動作環境を実現できるようにした。
【００８３】
なお、この場合には、主記憶メモリ１に対するアクセス命令のオペランドアドレスの生成は、▲１▼：ベースレジスタ（％Ｌ）のアドレス＋インデックスレジスタ（％Ｇ）のアドレス（％Ｌ＋％Ｇ）で決まる。
【００８４】
§４：例３の説明・・・図６参照
図６は例３の説明図であり、Ｌ１＄リプレースメント用レジスタの定義（ＣＷ０，１，２，３，４）を示している。図６は図５に示したローカルレジスタ％Ｌを拡大した説明図である。例３は、キャッシュリプレース（キャッシュデータの置き換え）の回数をより多くすることにより、ランダム命令列にキャッシュコヒーレンシィの動作環境をより多く生成させる例である。
【００８５】
ところで、アクセスするアドレスレジスタの数を多く定義しても、実際にアクセスするアドレスがアクセスレジスタ＋（−）０ｘ１００００のように範囲が大きすぎると、キャッシュの該当ライン（キャッシュライン）にアクセスする確率が非常に少なくなり、結果としてキャッシュリプレース（キャッシュデータの追い出し）の機会が少なくなってしまう。
【００８６】
この場合のキャッシュリプレースは、キャッシュデータの置き換え、すなわち、Ｌ１＄からＬ２＄へのデータの追い出しを意味する。例えば、Ｌ１＄に新たなデータを書き込む場合、Ｌ１＄の領域に空きがなければ、Ｌ１＄内の古いデータから追い出してＬ２＄へ書き込み、この時追い出しにより空いたＬ１＄内の領域に新たなデータを書き込む。
【００８７】
そこで、アドレスを決定する条件である、インデックスレジスタ（％Ｌ）と、ディスプレースメント値（イミーディエイト値）を、マイナス６４、０、プラス６４（−６４，０，＋６４）の３箇所に固定し、それ以外の値が生成されないようにする。これにより、アクセス域は、ローカルレジスタ（％Ｌ）の指すアドレスのプラス、マイナス６４バイト以内に限定される。
【００８８】
この場合、ベースレジスタとして使用する％Ｌ０〜％Ｌ７（図５のレジスタ％Ｌを図６に拡大して示してある。）は、それぞれＬ１＄のＷａｙ−０〜Ｗａｙ−３のそれぞれの幅である３２ＫＢに合わせ、３２ＫＢずつ離して設ける。例えば、％Ｌ０と％Ｌ１の間隔は３２ＫＢ、％Ｌ１と％Ｌ２の間隔は３２ＫＢ、％Ｌ２と％Ｌ３の間隔は３２ＫＢとなっている。
【００８９】
そして、各％Ｌ毎に、インデックスレジスタとして使用する汎用レジスタ％Ｇは、３２ＫＢのバウンダリから、−６４バイト、０バイト、＋６４バイトの間隔に設定されている。従って、インデックスレジスタとして使用する汎用レジスタ％Ｇにはインデックス値を入れるが、この場合、％Ｇ１にインデックス値＝−６４を入れ、％Ｇ２にインデックス値＝＋０を入れ、％Ｇ３にインデックス値＝＋６４を入れる。
【００９０】
また、ディスプレースメント値（イミーディエイト値）も、−６４バイト、０バイト、＋６４バイトの値を使用する。このようにして、ベースレジスタ（％Ｌ）の値に、インデックスレジスタ（％Ｇ）の値、或いはディスプレースメント値（イミーディエイト値）を加算して、アクセス命令のオペランドアドレスを生成することにより、アクセス命令を生成する。
【００９１】
従って、各ＣＰＵで無作為に生成された命令列で、４回アクセス命令を実行すれば、確率的に１回は同一キャッシュラインを指すことになる。この場合のキャッシュラインは、図６に示したＬ１＄内のＷａｙ−０〜Ｗａｙ−３に跨がって斜線で図示したラインである。
【００９２】
§５：例４の説明・・・図７参照
図７は例４の説明図であり、試験空間とＭＭＵテーブルとの関係を示している。例４は、キャッシュリプレースの回数をより多く生成することにより、ランダム命令列にキャッシュコヒーレンシィの動作環境をより多く生成させる例である。
【００９３】
キャッシュリプレース回数をより多くする方法として、コンテキストの切り換えがある。なお、例４において、コンテキストとは連続した１つの論理空間の固まりのことを言う（ＵＮＩＸマシンの用語）。また、ＭＭＵはアドレス変換テーブルのことである。
【００９４】
図７に示したように、同一論理空間（論理アドレス＝０〜ｎ）を持ち、異なるコンテキストCtx （この場合、Ctx=ａ、Ctx=ｂ、Ctx=ｃ）をＮ個（この例ではＮ＝３）用意する。この場合、各コンテキスト毎に、論理アドレス０〜ｎまでの論理空間を有し、それぞれ、論理アドレスと物理アドレスとの対応表を持っている。そして、それぞれの論理アドレスと物理アドレスとの対応表には異なるデータを設定しておく。
【００９５】
例えば、図７のCtx=ａ、Ctx=ｂ、Ctx=ｃの論理空間には、論理アドレスと物理アドレスが対応づけられているので、この対応アドレス情報を用いれば、コンテキストの切り換えにより、図示矢印で示すように、論理アドレスが同じでも、異なる物理アドレス（実メモリのアドレス）を指す。
【００９６】
従って、前記環境でランダム命令列を実行させ（最初のコンテキストは、Ctx=ａとする）、或るところでコンテキストを切り換える（例えば、Ctx=ａからCtx=ｂに切り換える）ことにより、コンテキストを変える前後では論理アドレスは同じであるが、コンテキストが異なることから、同一論理アドレスをアクセスしても、キャッシュリプレースは行われる。
【００９７】
前記のように、キャッシュリプレースさせる環境を組み合わせることにより、従来のキャッシュコヒーレンシィの発生回数に比べ、桁違いに多くのキャッシュコヒーレンシィ状態を実現させることが可能になる。従って、短期間でキャッシュコヒーレンシィの検証が可能となり、ハードウェアの品質も保証できるようになる。
【００９８】
§６：例５の説明・・・図８参照
図８は例５の説明図であり、Ａ図は試験命令の説明図、Ｂ図はキャッシュアドレステーブルを示す。例５は、ランダム命令列に意図したキャッシュコヒーレンシィ論理を組み込むことにより、複数ＣＰＵから試験対象となる同一キャッシュラインを導く例である。
【００９９】
ところで、前記例１〜例４までの試験方法では、全ＣＰＵからランダムにアクセス命令を発行することにより、各ＣＰＵ内のキャッシュと主記憶メモリ１間の全状態の組み合わせを実現させることはできるが、この方法では、どれだけ流せば全組み合わせが実現できるか定かでない。そこで、この全状態の組み合わせの実現時間を短縮させるための手法として、次のような例５の手法がある。
【０１００】
試験対象キャッシュアドレスの選択は、セレクトライン命令「Select Line( ) 」で与えられる。この試験では、試験対象となるキャッシュアドレスを選択し、各ＣＰＵに割り振ったシフトバイトを加算した値を求める。この場合、全ＣＰＵが同一物理アドレスを指すようにする必要があるため、次のような方法を用いる。
【０１０１】
▲１▼：各ＣＰＵ毎に、試験キャッシュアドレスのテーブルを作成する。このテーブル内の論理アドレスは、ＣＰＵ間で異なっても良いが、物理アドレスは必ず一致させる必要がある。
【０１０２】
▲２▼：各ＣＰＵから呼び出されたセレクトライン命令（関数）「Select Line( ) 」は、呼び出し元のリンクアドレス（Ａ）の下位の数ビットをインデックスとし、キャッシュアドレステーブル（Ｂ）から対象アドレス（論理アドレス）を求める。この場合、各ＣＰＵは同一アドレス（Ａ）からセレクトライン命令（関数）「Select Line( ) 」を呼ぶため、各ＣＰＵが選択したアドレスは全て同一物理アドレスを指す。
【０１０３】
▲３▼：選ばれた論理アドレスから１ブロック（６４バイト）を、各ＣＰＵで分割するため、自ＣＰＵ番号に１６を掛けた値を足し込む。このようにして選択された試験アドレスは、各ＣＰＵから見て同一メモリブロック（６４バイト）内で、かつ、アクセスが重複しない値となる。
【０１０４】
この場合、前記セレクトライン命令（関数）は、Select Line( ) ＝｛Ｃ＝* （Ｂ＋（Ａ＆０ｘｆ８）；Ｄ＝Ｃ＋（ＣＰＵ番号×１６）；Ｒｅｔｕｒｎ（Ｄ）｝で表される。この場合、Ａはリンクアドレス、Ｂは論理アドレス、Ｃは物理アドレス、Ｄは１６バイトずらしたアドレス、１６はずらすバイト数、０ｘｆ８は下位のビット、* は括弧内の内容、Ｒｅｔｕｒｎ（Ｄ）はＤの内容を持ってリターンすることを意味している。
【０１０５】
すなわち、Select Line( ) ＝｛Ｃ＝* （Ｂ＋（Ａ＆０ｘｆ８）；Ｄ＝Ｃ＋（ＣＰＵ番号×１６）；Ｒｅｔｕｒｎ（Ｄ）｝は、Ｂの論理アドレス＋（アドレスＡ＋下位のビット「０ｘｆ８」）の内容をもってＣの値とし、このＣの値に（ＣＰＵ番号×１６）の値を足した値をＤとし、このＤの値を持ってリターンする、という内容である。
【０１０６】
また、図８のＡ図では、各ＣＰＵが同一命令（テスト命令、或いは試験命令）を実行することを示している。そして、図８のＢ図では、各ＣＰＵ毎の論理アドレスＢが異なっていても、その論理アドレスから変換される物理アドレス（キャッシュの物理アドレス）は全て同じアドレスになることを示している。
【０１０７】
例えば、ＣＰＵ−０の論理アドレス「５００００００」は物理アドレス「２０００００」に変換され、ＣＰＵ−１の論理アドレス「７００００００」は物理アドレス「２０００００」に変換される。また、ＣＰＵ−０の論理アドレス「５００２０００」は物理アドレス「２０２０００」に変換され、ＣＰＵ−１の論理アドレス「７００２０００」は物理アドレス「２０２０００」に変換される。
【０１０８】
このように、各ＣＰＵが実行する前記ランダム命令列内に試験対象キャッシュアドレスの選択を行う特定命令（セレクトライン命令）を設けておき、この特定命令の実行により、各ＣＰＵとも、同一の試験対象キャッシュアドレスを選択し、このアドレスに、各ＣＰＵに割り振ったシフトバイトを加算した値を求め、この値により、各ＣＰＵから見て、同一キャッシュアドレスで、かつ、アクセスが重複しないようにできる。すなわち、前記セレクト関数により選択されたアドレスは、各ＣＰＵから見て、同一メモリブロック内で、アクセスが重複しないようにすることができる。
【０１０９】
§７：例６の説明・・・図９参照
図９は例６の説明図であり、（ａ）はルーチンテーブル例、（ｘ）はマスタＣＰＵ処理（ＣＰＵ−０）、（ｙ）はスレーブＣＰＵ処理（ＣＰＵ−１，２，３）を示す。この場合、ＣＰＵ−０をマスタとし、他のＣＰＵをスレーブとしているが、マスタＣＰＵはいずれのＣＰＵでも良い。例６は、ランダム命令列に意図したキャッシュコヒーレンシィ論理を組み込むことにより、意図したキャッシュコヒーレンシィ論理の検証がランダム命令試験で実現可能にした例である。
【０１１０】
図９に示したようなキャッシュコヒーレンシィ（キャッシュの一致性）を試験するルーチンを予め用意する。例えば、（ａ）に示したようなルーチンテーブルを用意する。この（ａ）に示したルーチンでは、ＩＦ文を使い、各ＣＰＵ専用処理部（ｘ）、（ｙ）を設ける。これは全ＣＰＵからこのルーチンに起動がかかるためであり、かつ、ＣＰＵ毎に異なる動作をさせるためである。
【０１１１】
このＣＰＵ毎の専用処理部（ｘ）、（ｙ）に、キャッシュコヒーレンシィの論理（従来例で説明した「ＭＯＥＳＩ」として周知）を組み込んだこのルーチンを、ランダム命令列の生成過程で無作為に展開することにより、意図的なキャッシュコヒーレンシィ試験が実現可能になる。以下に、前記ルーチン内の詳細論理を説明する。
【０１１２】
先ず、試験対象キャッシュライン（図２の斜線部分参照）を選択（Select Line命令で選択）し、ＣＰＵの同期をとった後、各ＣＰＵの命令列に分岐する（ＣＰＵ毎に、処理を分けて実行する）。ここでは定義上、ＣＰＵ−０をマスタ、その他のＣＰＵをスレーブとする。前記マスタはキャッシュに或る状態を設定する。例えば、ストア命令（Store ）を使用する。スレーブは、マスタが設定したキャッシュの状態に対し、変化を与える。例えば、ロード命令（Load）により変化を与える（データを変化させる）。
【０１１３】
この例では、マスタが最新のキャッシュ情報を持っている時に、スレーブからその情報を読み出した時のキャッシュ状態の変化を実現させている。このようにして、前記ストア命令と、ロード命令を変化させることにより、多種多様なキャッシュの状態変化を明確に実現でき、その時のキャッシュコヒーレンシィ（キャッシュの一致性）の検証が可能になる。
【０１１４】
このように、前記（ａ）に示すルーチンを、ランダム命令列生成時に無作為に挿入することにより意図したキャッシュコヒーレンシィ論理の検証がランダム命令試験で実現可能となる。例えば、前記キャッシュコヒーレンシィは、次のような内容である。すなわち、データは、主記憶メモリ１や各ＣＰＵのＬ１＄、Ｌ２＄に格納されているが、最新のデータは必ずしも主記憶メモリ１にある必要はなく、いずれかのＣＰＵのＬ１＄、或いはＬ２＄に格納されていることもある。
【０１１５】
つまり、最新のデータは前記主記憶メモリ１、或いは各ＣＰＵのＬ１＄、或いはＬ２＄のいずれかにあれば良く、どこにあっても良いが、必ずどこかになければならない。これらの論理は全て、「ＭＯＥＳＩ」として確立された論理に従って、処理されている。
【０１１６】
§８：例７の説明・・・図１０、図１１参照
図１０は例７の説明図（その１）であり、Ａ図は中間言語の命令定義体、Ｂ図はテーブル例である。また、図１１は例７の説明図（その２）であり、（ｘ）はマスタＣＰＵ処理（ＣＰＵ−０）、（ｙ）はスレーブＣＰＵ処理（ＣＰＵ−１、２、３）を示す。
【０１１７】
例７は、ランダム命令列に意図したキャッシュコヒーレンシィ論理を組み込むことにより、キャッシュコヒーレンシィ試験における、意図したキャッシュデータの組み合わせをランダムに実現させる例である。例７の手法では、意図したキャッシュの動作は１ルーチンで１つ実現できるが、本来の試験はランダム命令試験であることから、意図したキャッシュの動作にランダム性を持たせ、キャッシュ動作の組み合わせが１つのルーチン内で出来ることが望ましい。これを実現する手法を以下に説明する。
【０１１８】
先ず、ルーチン内で定義する図１０のＡ図に示したような中間言語（マクロ命令）の命令定義体を用意する。この中間言語（マクロ命令）はランダム命令列を生成するジェネレータによって解析され、実行形式の命令に変換される。
【０１１９】
この場合、前記中間言語のパラメータの１つとして、次のような機能を持たせる。すなわち、「ＣＨＡＩＮ」，「ＣＨＡＩＮ ＬＩＭＩＴ」，「ＥＮＤ」の各命令において、「ＣＨＡＩＮ」は、以降に命令列が存在することを意味し、「ＣＨＡＩＮ ＬＩＭＩＴ」は、以降に命令列が存在することを意味し、かつ、本パラメータで指定した命令列（連続していることが条件）に対して、メモリに展開する際、展開する命令の順番を無作為に入れ換えることを意味する。「ＥＮＤ」は、命令列の最終を意味する。
【０１２０】
以上の機能を例を挙げて説明する。図１０のＢ図、及び図１１に示した例は、キャッシュコヒーレンシィ試験の１例である。この場合、ＣＰＵ−０、１、２、３が、それぞれ初期化状態からストア命令（STORE)とロード命令(LOAD)を実行した後に、各ＣＰＵからキャッシュ状態を変える幾つかの命令（この例では、D  flush,U  flush,Load,Store,Casxa）を、前記チェインリミット「ＣＨＡＩＮ ＬＩＭＩＴ」を付加して図１０のＢ図に示したテーブルを作成する。
【０１２１】
そして、このテーブルが、前記ジェネレータから選択されると、先頭から順に実行形式の命令（機械語）に置き換えられる。この過程で、図１１に示した（ｂ）の命令列を置き換えるが、この時、置き換える命令の順序が変わるため、このテーブルが選択される度に、異なる命令列が生成され、その結果、種々のキャッシュ状態の遷移が実現できる。
【０１２２】
従って、試験の目的である、キャッシュ状態を変化させる命令の種類と、その命令を発行する直前の状態を変えることにより、少ないテーブルで多くのキャッシュ状態遷移試験が実現可能になる。
【０１２３】
§９：例８の説明・・・図１２参照
図１２は例８の説明図であり、Ａ図はランダム命令の説明図、Ｂ図は状態１、Ｃ図は状態２である。例８は、命令のキャッシュコヒーレンシィ試験の実現を可能にする手法である。前記例１〜例７のようなデータ（命令以外の通常のデータ）のキャッシュコヒーレンシィではなく、命令のキャッシュコヒーレンシィ試験を可能にさせるには、命令実行空間を複数持たせる必要がある。この条件を満足し、かつ、前記例１〜例７の機能を有効にする手法は、次の手順により実現する。
【０１２４】
▲１▼：生成したランダム命令列を別の空間にそっくり複写する。
【０１２５】
▲２▼：両方のランダム命令空間（元の命令空間と複写後の命令空間）に対して、論理アドレスが等しく、物理アドレス（ランダム命令の空間）が異なるＭＭＵテーブル（アドレス変換テーブル）を作成する。そして、各ＭＭＵテーブルには、異なるコンテキスト値を定義する。なお、この場合のコンテキストとは、空間を切り換えるための制御レジスタのことであり、コンテキスト値は前記制御レジスタの値である。
【０１２６】
▲３▼：初期値として、コンテキスト値＝１０とし、例えば、論理アドレス＝０ｘ００００００から試験を開始する。
【０１２７】
▲４▼：或る割り込みを契機に、命令の論理アドレスをＭＭＵテーブルから任意に選択する。この値にランダム命令列内のアドレス（ランダム命令列の空間が１ＭＢと仮定した場合は、１ＭＢバウンダリの値をオアしたアドレス）を命令カウンタに設定する。
【０１２８】
例えば、０ｘ５０５００１０番地で割り込みが発生した場合、新命令アドレス（０ｘ７００００００）にランダム命令列内アドレス（０ｘ５００１０）を足した値＝０ｘ７０５００１０となる。そして、このアドレスで復帰することにより、ランダム命令列の実行順序が乱されることがなく、かつ論理アドレスを変化させることができる。
【０１２９】
▲５▼：また、或る割り込みを契機に、コンテキストを切り換えて異なったコンテキスト値（１０→２０）を得る。これにより、論理アドレスの命令カウンタは変わらずに、物理アドレスのみを変更できる。この場合、０ｘ３０００００のランダム命令空間の命令が動作する。
【０１３０】
▲６▼：前記▲１▼〜▲５▼の処理により、ランダム命令列は頭から順次実行され、かつ、実行する空間のみ変化することになる。つまり、実行される物理空間、及び実行論理アドレスが順次切り換わるため、命令のキャッシュコヒーレンシィ試験が可能となる。
【０１３１】
なお、Ｌ２＄が２ＭＢと仮定すると、実アドレスで２ＭＢ離れたアドレスをアクセスすると、キャッシュのリプレースが発生する。また、Ｌ１＄が６４ＫＢの４Ｗａｙであると仮定すると、１６ＫＢ離れた論理アドレスを５回アクセスすることでキャッシュのリプレースが発生する。
【０１３２】
§１０：試験例例の説明・・・図１３、図１４参照
図１３は試験例の説明図、図１４はランダム命令列生成処理フローチャートである。以下、図１３、図１４に基づいて具体的な試験例を説明する。
【０１３３】
(1) ：試験例の説明
キャッシュコヒーレンシィの試験は例えば、次のようにして行う。
【０１３４】
▲１▼：全ＣＰＵから同一タスクに起動をかける。
【０１３５】
▲２▼：起動されたタスクはマスタＣＰＵ（この例では、ＣＰＵ−０）と、スレーブＣＰＵ（この例では、ＣＰＵ−１、２、３・・・ｎ）にＣＰＵを分け、マスタＣＰＵのみ命令の生成を行う。
【０１３６】
▲３▼：ランダム命令の生成処理を行う（後述する）。
【０１３７】
▲４▼：命令生成後、全ＣＰＵで同期をとり、その後、各ＣＰＵはレジスタに初期値を設定し、生成されたランダム命令域の先頭に処理を渡す。この場合、初期値を設定するレジスタの中にアクセス命令のアクセス専用に割り振られたレジスタ（例えば、Ｇ１：インデックス専用、Ｇ２：ベースレジスタ専用）には、データ域を指す論理アドレスと、そのアドレスからのディスプレートメントを指すためのインデックス値を設定する。また、アクセスの変更は、ランダム命令列から呼び出されたサブルーチンにより変更される。また、何かの割り込みを契機に変更しても良い。
【０１３８】
▲５▼：ランダム命令列の最後の復帰処理により元のタスクに戻る。
【０１３９】
▲６▼：最後に試験の結果得られたデータの比較を行うが、このデータ比較の論理は、例えば、次のａ、ｂの通りである。
【０１４０】
ａ：ランダム命令列の実行で或る条件（例えば、割り込み）で全レジスタとメモリの内容をトレースする。この場合、本ランダム命令列を、走行環境を変えて２回実行し、２度目の実行の時、１度目にトレースした情報と比較する。
【０１４１】
ｂ：本タスク処理を実機と、ソフトシュミレータとで実行させ、或る条件で双方のレジスタとメモリの内容を比較する。
【０１４２】
(2) ：ランダム命令の生成処理
以下、図１４に基づいてランダム命令の生成処理を説明する。なお、Ｓ１〜Ｓ８は各処理ステップを示す。ランダム命令の生成処理が開始されると、先ず、命令生成域にランダムデータを書き込む（Ｓ１）。次に、命令生成域のランダムデータを用い、ルーチンテーブル、又は命令変換テーブルから任意の１つを取り出し、命令に変換後、その命令又は命令列を命令生成域に書き込む。
【０１４３】
この処理を順次行うことで、命令生成域全てにランダム命令を作り上げる。具体的には次の通りである。前記のようにして命令生成域にランダムデータを書き込んだ後、命令生成域の先頭にポインタＰを設定する（Ｓ２）。そして、前記ポインタＰの内容からどちらかに分岐する（Ｓ３）。
【０１４４】
一方に分岐した場合は次のような処理を行う。先ず、命令変換テーブルから任意の命令データをランダムに選択し、その中にあるＡＮＤと、ＯＲデータと、ポインタＰから読み出したランダムデータとを掛け合わせて命令を生成する。生成した命令は、ポインタＰのアドレスに格納する。なお、アクセス命令を生成する場合は、決められたアクセス用レジスタが選ばれるように、前記ＡＮＤ／ＯＲデータを定義する（Ｓ４）。
【０１４５】
その後、ポインタＰの値を更新し（Ｓ５）、最終判定を行ない（Ｓ６）、最終処理になるまで、前記Ｓ３の処理から繰り返す。また、前記Ｓ３の処理の結果、他方に分岐した場合は、次のように処理を行う。先ず、ルーチンテーブルから任意のルーチンをランダムに選択し、そのルーチン内のコマンド列を順次命令に変換し、ポインタＰのアドレス以降に格納する（Ｓ７）。その後、生成した命令の命令数だけポインタＰの値を更新し（Ｓ８）、前記Ｓ６の処理へ移行する。以上の処理を行ない、最終判定で最終処理まで終了したと判定したら、ランダム命令生成処理を終了する。
【０１４６】
§１１：試験用プログラムと記録媒体の説明
図２に示した情報処理装置（情報処理システム）は、図２に示した構成の他に、通信制御部、ディスプレイ装置、キーボード、フレキシブルディスクドライブ（フロッピィディスクドライブ）（以下、「ＦＤＤ」と記す）、ＣＤ−ＲＯＭドライブ、ハードディスク装置（以下「ＨＤＤ」と記す）等を備えている。
【０１４７】
そして、図２に示したシステムは、予めＲＯＭ６に格納（記録、或いは記憶）しておいたプログラムを、ＣＰＵの制御により読み出して主記憶メモリ１へ格納し、該ＣＰＵが前記プログラムを実行することにより、前記キャッシュコヒーレンシィ試験（情報処理装置の試験）を行う。
【０１４８】
しかし、本願発明は、このような例に限らず、例えば、ＨＤＤのハードディスクに、次のようにして試験用のプログラムを格納し、このプログラムをＣＰＵが実行することで前記キャッシュコヒーレンシィ試験を行うことも可能である。
【０１４９】
▲１▼：他の装置で作成されたフレキシブルディスク（フロッピィディスク）に格納されているプログラム（他の装置で作成したプログラムデータ）を、ＦＤＤにより読み取り、ＨＤＤの記録媒体（ハードディスク）に格納する。
【０１５０】
▲２▼：光磁気ディスク、或いはＣＤ−ＲＯＭ等の記憶媒体に格納されているデータを、ＣＤ−ＲＯＭドライブにより読み取り、ＨＤＤの記録媒体（ハードディスク）に格納する。
【０１５１】
▲３▼：ＬＡＮ等の通信回線を介して他の装置から伝送されたプログラム等のデータを、通信制御部を介して受信し、そのデータをＨＤＤの記録媒体（ハードディスク）に格納する。
【０１５２】
【発明の効果】
以上説明したように、本発明によれば次のような効果がある。
【０１５３】
(1) ：キャッシュコヒーレンシィを引き起こすアクセスレジスタの増加、及びキャッシュリプレースの発生確率を増加させた状態で、ランダム命令生成の特質を活かしたキャッシュコヒーレンシィ機能の検証が可能になる。つまり、キャッシュに影響を与えるアクセス命令の前後に、ランダム命令が生成されることで、アクセス命令の発信タイミングをずらすことができ、色々な環境下でキャッシュの状態検証が可能となる。従って、ハードウエアの品質向上が実現できる。
【０１５４】
(2) ：マルチＣＰＵを対象としたランダム命令によるキャッシュコヒーレンシィ試験で、各ＣＰＵが同一ブロックをアクセスでき、かつ別のＣＰＵからデータが破壊されないようにしてキャッシュコヒーレンシィ試験を実現できる。
【０１５５】
(3) ：マルチＣＰＵ構成の情報処理装置を対象とし、該ＣＰＵ内でランダム命令列を生成してキャッシュコヒーレンシィ試験を行う情報処理装置の試験方法において、ランダム命令列で生成されるアクセス命令のオペランドアドレスを指すベースレジスタの値を各ＣＰＵ毎に一定値づつずらした値に設定し、前記オペランドアドレスのインデックス部を指すインデックスレジスタの値と、前記オペランドアドレス内のディスプレースメント値を予め規定しておく。
【０１５６】
このようにすれば、全てのＣＰＵから同一命令を実行した時に、アクセス命令のアクセスアドレスは、ＣＰＵ毎に必ず決められたアドレス範囲（例えば、１６バイト）を指すことができる。すなわち、全ＣＰＵに同一アクセス空間を割り当てた時の各ＣＰＵからの重複アクセスを回避することができる。
【０１５７】
従って、マルチＣＰＵを対象としたランダム命令試験で、各ＣＰＵが同一ブロックをアクセスでき、かつ別のＣＰＵからデータが破壊されないようにしてキャッシュコヒーレンシィ試験を実現できる。
【０１５８】
(4) ：前記情報処理装置の試験を行う際、同一論理空間を持ち、命令により切り換え可能な異なるコンテキストを複数用意する。そして、コンテキスト毎に、それぞれ論理アドレスと実メモリの物理アドレスとの対応情報を持ち、ランダム命令列を実行させる過程で、特定命令によりコンテキストを切り換えた際、同一論理アドレスをアクセスしても、実メモリの異なる物理アドレスを指すようにしてキャッシュリプレースを行わせる。このようにすれば、キャッシュリプレース回数をより多く生成することができる。
【０１５９】
(5) ：前記情報処理装置の試験を行う際、各ＣＰＵが実行するランダム命令列内に試験対象キャッシュアドレスの選択を行う特定命令を設けておき、この特定命令の実行により、各ＣＰＵとも、同一の試験対象キャッシュアドレスを選択し、このアドレスに、各ＣＰＵに割り振ったシフトバイトを加算した値を求め、この値により、各ＣＰＵから見て、同一キャッシュアドレスで、かつ、アクセスが重複しないようにする。
【０１６０】
すなわち、複数ＣＰＵから試験対象となる同一メモリブロック内でアクセスが重複しないメモリアドレスを導出することができる。このようにすれば、ランダム命令列に意図したキャッシュコヒーレンシィ論理を組み込む手法を実現でき、試験時の全組み合わせの実現時間を短縮させることが可能になる。
【０１６１】
(6) ：前記情報処理装置の試験を行う際、生成したランダム命令列を別の空間に複写する処理と、両方のランダム命令空間に対して、論理アドレスが等しく、物理アドレスが異なるアドレス変換テーブルを作成し、該テーブルに異なるコンテキスト値を定義する処理と、初期値として、コンテキストに値を設定し、或る論理アドレスから試験を開始させる処理と、或る割り込みを契機に、命令の論理アドレスを前記アドレス変換テーブルから選択し、この値にランダム命令内アドレスを命令カウンタに設定する処理と、或る割り込みを契機に、コンテキストの値を切り換えることにより、論理アドレスの命令カウンタは変わらずに、物理アドレスのみ変更できるようにする処理とを行う。
【０１６２】
そして、前記処理により、ランダム命令列を頭から順次実行し、かつ実行空間のみ変化させることで、命令キャッシュのキャッシュコヒーレンシィ試験を可能にする。
【０１６３】
(7) ：前記記録媒体のプログラムを読み出して実行することにより、ランダム命令列で生成されるアクセス命令のオペランドアドレスを指すベースレジスタの値を各ＣＰＵ毎に一定値づつずらした値に設定し、前記オペランドアドレスのインデックス部を指すインデックスレジスタの値と、前記オペランドアドレス内のディスプレースメント値を予め規定しておく。
【０１６４】
このようにすれば、全てのＣＰＵから同一命令を実行した時に、アクセス命令のアクセスアドレスは、ＣＰＵ毎に必ず決められたアドレス範囲を指すことができる。すなわち、全ＣＰＵに同一アクセス空間を割り当てた時の各ＣＰＵからの重複アクセスを回避することができる。
【０１６５】
従って、マルチＣＰＵを対象としたランダム命令試験で、各ＣＰＵが同一ブロックをアクセスでき、かつ別のＣＰＵからデータが破壊されないようにしてキャッシュコヒーレンシィ試験を実現できる。
【０１６６】
以上の説明に関して、更に以下の項を開示する。
【０１６７】
(a) ：複数のＣＰＵをバスで接続し、各ＣＰＵにキャッシュメモリを備えたマルチＣＰＵ構成の情報処理装置を対象とし、前記ＣＰＵ内で、ベースレジスタの値に、インデックスレジスタの値、或いはディスプレースメント値を加算して、アクセス命令のオペランドアドレスを生成することにより、ランダム命令列を生成してキャッシュコヒーレンシィ試験を行う情報処理装置の試験方法において、汎用レジスタと、各ウインドウ毎にインレジスタ、ローカルレジスタ、アウトレジスタが有り、命令が或るウインドウを指している時は、その時のウインドウのレジスタと、汎用レジスタのみが使用可能になる場合、各ウインドウ毎に設けられたローカルレジスタに、予め、論理空間の異なるアドレスを設定しておき、このローカルレジスタをウインドウにより切り換えて、前記ランダム命令列で生成されるアクセス命令のオペランドアドレスを指すベースレジスタとして使用し、前記汎用レジスタを前記オペランドアドレスのインデックス部を指すインデックスレジスタとして使用することにより、命令によるウインドウの切り換えだけで、キャッシュコヒーレンシィの動作環境をより多く実現する。
【０１６８】
このようにすれば、既存の多数のレジスタを効率的に利用し、ウインドウの切り換えだけでキャッシュコヒーレンシィの動作環境を簡単に実現できる。また、ベースレジスタとして使用できるレジスタの数も多いので、多くの動作環境を簡単に実現できる。
【０１６９】
(b) ：複数のＣＰＵをバスで接続し、各ＣＰＵにキャッシュメモリを備えたマルチＣＰＵ構成の情報処理装置を対象とし、前記ＣＰＵ内で、ベースレジスタの値に、インデックスレジスタの値、或いはディスプレースメント値を加算して、アクセス命令のオペランドアドレスを生成することにより、ランダム命令列を生成してキャッシュコヒーレンシィ試験を行う情報処理装置の試験方法において、アクセス命令のアドレスを決定する条件である、インデックスレジスタの値と、ディスプレースメント値を、キャッシュメモリの幅で規定される値ｎに対し、−ｎ、０、＋ｎの３か所に固定し、それ以外の値が生成されないようにすることにより、キャッシュリプレースの回数をより多く生成する。
【０１７０】
このように、アクセス命令のアドレスを決定する条件である、インデックスレジスタの値と、ディスプレースメント値を、キャッシュメモリの幅で規定される値ｎ（例えば、ｎ＝６４）に対し、−ｎ、０、＋ｎの３か所に固定し、それ以外の値が生成されないようにすれば、キャッシュリプレースの回数をより多く生成することができる。
【０１７１】
(c) ：複数のＣＰＵをバスで接続し、各ＣＰＵにキャッシュメモリを備えたマルチＣＰＵ構成の情報処理装置を対象とし、前記ＣＰＵ内でランダム命令列を生成してキャッシュコヒーレンシィ試験を行う情報処理装置の試験方法において、キャッシュコヒーレンシィを試験するルーチンを用意し、このルーチンに、各ＣＰＵ毎の専用処理部を設け、該専用処理部にキャッシュコヒーレンシィ試験の論理を組み込んだこのルーチンを、ランダム命令列の生成過程で無作為に展開することにより、意図したキャッシュコヒーレンシィ論理の検証をランダム命令試験で実現可能にする。このようにすれば、意図したキャッシュコヒーレンシィ論理の検証がランダム命令試験で実現可能になる。
【０１７２】
(d) ：複数のＣＰＵをバスで接続し、各ＣＰＵにキャッシュメモリを備えたマルチＣＰＵ構成の情報処理装置を対象とし、前記ＣＰＵ内でランダム命令列を生成してキャッシュコヒーレンシィ試験を行う情報処理装置の試験方法において、マクロ命令の命令定義体を用意し、このマクロ命令をランダム命令列を生成する生成手段によって解析し、先頭から順に実行形式の命令に変換する過程で、展開する命令の順番を無作為に入れ換えることにより、より多くのキャッシュ状態遷移を実現させる。このようにすれば、より多くのキャッシュ状態遷移を実現させ、キャッシュコヒーレンシィ試験を行うことができる。
【図面の簡単な説明】
【図１】本発明の原理説明図である。
【図２】本発明の実施の形態におけるシステム構成図である。
【図３】本発明の実施の形態における例１の説明図（その１）である。
【図４】本発明の実施の形態における例１の説明図（その２）である。
【図５】本発明の実施の形態における例２の説明図である。
【図６】本発明の実施の形態における例３の説明図である。
【図７】本発明の実施の形態における例４の説明図である。
【図８】本発明の実施の形態における例５の説明図である。
【図９】本発明の実施の形態における例６の説明図である。
【図１０】本発明の実施の形態における例７の説明図（その１）である。
【図１１】本発明の実施の形態における例７の説明図（その２）である。
【図１２】本発明の実施の形態における例８の説明図である。
【図１３】本発明の実施の形態における試験例の説明図である。
【図１４】本発明の実施の形態におけるランダム命令列生成処理フローチャートである。
【図１５】従来例のシステム構成図である。
【図１６】従来のランダム命令試験例である。
【符号の説明】
１  主記憶メモリ（主記憶装置）
２  システムコントローラ
３  キャッシュ制御部
４  キャッシュ情報テーブル
５  Ｉ／Ｏ制御部（入出力制御部）
６  ＲＯＭ
９  キャッシュメモリ
Ｌ１＄  一次キャッシュ（一次キャッシュメモリ）
Ｌ２＄  二次キャッシュ（二次キャッシュメモリ）
【図１】
0003954248.tif 000002
【図２】
0003954248.tif 000003
【図３】
0003954248.tif 000004
【図４】
0003954248.tif 000005
【図５】
0003954248.tif 000006
【図６】
0003954248.tif 000007
【図７】
0003954248.tif 000008
【図８】
0003954248.tif 000009
【図９】
0003954248.tif 000010
【図１０】
0003954248.tif 000011
【図１１】
0003954248.tif 000012
【図１２】
0003954248.tif 000013
【図１３】
0003954248.tif 000014
【図１４】
0003954248.tif 000015
【図１５】
0003954248.tif 000016
【図１６】
0003954248.tif 000017