(57)【要約】　　　（修正有）【課題】メイン・メモリに接続された少なくとも１つのプロセッサを有するプロセッサ・システムにおけるソフトウェア・ブレークポイントを実行する方法を提供する。【解決手段】共有メモリ・システム１００内の各プロセッサ１０２は、前記プロセッサ１０２と関連する命令キャッシュ１１０を有し、ブレークポイント・コードは、複数の内の与えられた少なくとも１つのプロセッサ１０２の命令キャッシュ１１０内の特定位置に挿入され、そして、前記特定位置に関連した制御指標は、フェッチが対応アドレスに対して要求することに応答して前記命令キャッシュから前記与えられたプロセッサ１０２に前記ブレークポイント・コードを返すことを許可する状態にセットされる。フェッチ要求に応答して前記命令キャッシュ１１０から与えられたプロセッサ１０２にブレークポイント・コードを返す。【選択図】図１
2004103024.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサ・システム内のソフトウェア・ブレークポイントを実行する方法であって、前記プロセッサ・システムは、メイン・メモリに接続された少なくとも１つのプロセッサ、および、前記プロセッサに関連する命令キャッシュを有し、ブレークポイント・コードは、前記命令キャッシュ内の特定位置に挿入可能であり、この方法が、
　前記特定位置に関連する制御指標を、対応アドレスに向けられた第１のフェッチ要求に応答して、前記ブレークポイント・コードが前記命令キャッシュから前記プロセッサへ返されることを可能にする第１の状態にセットするステップ；
　次に、前記特定位置に関連する前記制御指標を、前記対応アドレスへの第２のフェッチが要求が前記メイン・メモリからサービスされることを命令する第２の状態に、セットするステップ；および
　前記対応アドレスへの前記第２のフェッチ要求が前記メイン・メモリからサービスされることの決定がなされた後に、前記第２の状態にセットされている前記制御指標から前記制御指標状態を変更するステップ、を含むことを特徴とする方法。
【請求項２】
前記第１のフェッチ要求に応答して、前記ブレークポイント・コードが前記命令キャッシュから前記プロセッサへ返される決定が前記第１の状態にセットされている前記制御指標に基づいてなされた後に、前記制御指標を前記第２の状態へセットすることを特徴とする請求項１記載の方法。
【請求項３】
前記制御指標が、前記命令キャッシュの与えられたセットと関連する１つまたはそれ以上のデバッグ制御ビットを含むことを特徴とする請求項１記載の方法。
【請求項４】
前記第１の状態が、デバッグ・ロック状態を含み、かつ前記第２の状態が使用禁止状態を含むことを特徴とする請求項１記載の方法。
【請求項５】
前記制御指標は、前記ソフトウェア・ブレークポイントの利用をしない動作を特定する動作状態の通常モードを含む少なくとも１つの追加状態を特定することを特徴とする請求項１記載の方法。
【請求項６】
前記制御指標が前記第１の状態にある間に、前記命令キャッシュ内のミス・イベントは、前記命令キャッシュ内の前記特定位置内で前記ブレークポイント・コードの置換を導かないことを特徴とする請求項１記載の方法。
【請求項７】
前記命令キャッシュ内の前記特定位置に挿入される前記ブレークポイント・コードが、命令アドレスに関連するキャッシュ不可能属性を有する前記命令アドレスに対して挿入されることを特徴とする請求項１記載の方法。
【請求項８】
前記ブレークポイント・コードが、前記プロセッサ・システムと接続するデバッガの前記制御下で、前記命令キャッシュ内の前記特定位置に挿入されることを特徴とする請求項１記載の方法。
【請求項９】
メイン・メモリ；
前記メイン・メモリに接続された少なくとも１つのプロセッサ；および
前記プロセッサに関連する命令キャッシュを含むプロセッサ・システムであって、そのプロセッサ・システムにおいて、
　ブレークポイントは前記命令キャッシュ内の特定位置に挿入可能であり、
　前記特定位置に関連する制御指標は、対応アドレスに対するフェッチ要求に応答して、前記命令キャッシュから前記プロセッサへ前記ブレークポイント・コードを返すことを許可する第１の状態へ設定可能であり、およびつづいて前記対応アドレスへのフェッチ要求が前記メイン・メモリからサービスされるように、命令をする第２の状態へ設定可能であり；および
　前記制御指標状態は、前記メイン・メモリからサービスされるように前記対応アドレスに対して前記第２のフェッチ要求をする決定がなされた後に、前記第２の状態にセットされている前記制御指標から変更されることを特徴とするプロセッサ・システム。
【請求項１０】
製品であり、この製品は、
メイン・メモリに接続されている少なくとも１つのプロセッサを有するプロセッサ・システム内のソフトウェア・ブレークポイントを実行するための１つまたはそれ以上のソフトウェア・プログラムを格納するための機械が読み出し可能な格納媒体と前記プロセッサと関連し、ブレークポイント・コードは前記命令キャッシュ内の特定位置に挿入可能になっている、命令キャッシュとを含み、
　前記１つまたはそれ以上のソフトウェア・プログラムは、
　前記特定位置に関連する制御指標を、対応アドレスに対する第１のフェッチ要求に応答して前記命令キャッシュから前記プロセッサへ、前記ブレークポイント・コードを返すことを許可する第１の状態にセットするステップ；
　前記特定位置に関連する前記制御指標を、前記メイン・メモリからサービスされるように前記対応アドレスに対する第２のフェッチ要求を命令する第２の状態に次に、セットするステップ；および
　前記制御指標状態を、前記メイン・メモリからサービスされるように前記対応アドレスに対して前記第２のフェッチ要求をする決定がなされた後に、前記第２の状態へ前記制御指標がセットされていることにより変更するステップ、において実行されることを特徴とする製品。
【発明の詳細な説明】
【関連出願】
【０００１】
　本発明は、発明者Ｍ．Ｒ．Ｂｅｔｋｅｒ　ａｔ　ａｌ．によって、２００２年２月８日に出願された、米国特許出願１０／０７２，５２９号のタイトル「Ｍｕｌｔｉｐｒｏｃｅｓｓｏｒ　Ｓｙｓｔｅｍ　ｗｉｔｈ　Ｃａｃｈｅ−Ｂａｓｅｄ　Ｓｏｆｔｗａｒｅ　Ｂｒｅａｋｐｏｉｎｔｓ」に記載されている発明に関連する。前記米国特許Ｎｏ．１０／０７２，５２９をここで参照することにより、本発明に挿入される。
【技術分野】
【０００２】
　本発明は概して、プロセッサ集積回路、および１つまたはそれ以上のプロセッサを包含する他のタイプのシステムに関し、具体的には、そのようなシステムにおけるソフトウェア・ブレークポイントを実行するための技術に関する。
【背景技術】
【０００３】
　ソフトウェア・ブレークポイントは、一般的にプログラム内に組み込まれているアセンブリ命令として実行される。プログラム内で、これら複数のアセンブリ命令の内の与えられた１つに遭遇すると、プログラムの実行はデバッガに転送される。周知のとおり、デバッガと連動する指定ブレークポイントを使用することは、プログラマがプログラムの状態を調査してプログラムの問題を修正したり、プログラムの動きをより良く知ることができるようにする。
【０００４】
　シングル・コンベンショナル・プロセッサのケースでは、ソフトウェア・ブレークポイントは、望まれたブレークポイント位置において、オプコードとして呼ばれる特定のデバッグ・オペレーション・コードの形で、アセンブリ命令を現在の命令に対して上書きすることによってプログラム内に組み込まれる。以下に示すように、上書きされた命令は、デバッガによって格納され、つづいて通常のオペレーションの再開時に挿入されたオプコードを置き換える。伝統的なデバッグ・オプコードの例は、ＤＥＢＵＧ、ＴＲＡＰなどで呼ばれるオプコードを包含する。これらのデバッグ・オプコードは、一般的にプロセッサに大きく依存する。
【０００５】
　与えられたブレークポイントが取られた後、プログラマは、プログラムの通常の実行を続行する状態に入り、ツー・ステップ・プロセスが通常通りに行われる。最初に、デバッガは、デバッグ・オプコードを以前に上書きされた既存命令に置き換え、そのことにより、この命令は、単独で実行（または、進められる）される。次に、デバッグ・オプコードは、望まれたブレークポイント位置においてリストアされ、それによって、プログラムの実行がこのポイントまで到達する次の時に、第２のブレークポイントが発生する。
【０００６】
　多くのハイ・パフォーマンス・プロセッサは、命令キャッシュを含んでいる。命令キャッシュは、プロセッサが、高速ローカル・メモリ内に頻繁にアクセスされた命令を格納することを可能にし、前記高速ローカル・メモリはそのコンテンツを実行プログラムに適応させる。
【０００７】
　マルチプロセッサ・システムは一般的に、マルチ・プロセッサを含み、その各々がコモン・バスに接続されている。命令およびプロセッサが使用するデータを格納する共有メイン・メモリもまた、コモン・バスに接続されている。このようなシステムにおいて、各プロセッサは、典型的に、そのプロセッサ自身の命令キャッシュを持つ。これらの命令キャッシュは、マルチプロセッサ・システムでは特に重要であり、そのキャッシュは、命令およびマルチ・プロセッサのデータ・フェッチに関連したバス・トラフィックを大きく低減する役割を果たす。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
　上述の従来のシングル・プロセッサ・ソフトウェア・ブレークポイントは、概して、マルチプロセッサ・システムでは動かない。具体的には、マルチプロセッサ・システムにおいて、ある１つの特定のプロセッサが一旦ソフトウェア・ブレークポイントを保有すると、対応する実際の命令は、共有のメモリに書かれなければならなくなり、それによって停止したプロセッサは、次のフェッチおよびそれを実行する。しかしながら、実際の命令が共有メモリ内にあれば、他のプロセッサがフェッチし、およびそれを実行し、そのことによってブレークポイントを喪失することになる。従って、共有メモリ・マルチプロセッサ・システムにおいて、プログラマが、一般的なシングル・プロセッサ・ソフトウェア・ブレークポイント技術を使用することで、例えば、与えられたプロセッサが、時々ソフトウェア・ブレークポイントにおいて停止し、他の時には停止しないといった異常な振る舞いを観察することがあり得る。
【０００９】
　既知のマルチプロセッサ・システムの例は、米国のペンシルバニア州アレンタウンのアギアシステムから入手可能なＤＳＰ１６４１０およびＤＳＰ１６２７０共有メモリ・マルチプロセッサ・デジタル信号プロセッサ（ＤＳＰｓ）である。これら各々のシステムは、ＤＳＰ０およびＤＳＰ１の名称の２つのプロセッサを含む。これらのプロセッサは、命令キャッシュを保有していないが、共通共用メモリから実行可能である。ソフトウェア・ブレークポイントが共有メモリ内にセットされ、ＤＳＰ０によって実行されるケースを検討する。ブレークポイントが取得された後に、通常の実行をレジュームするために、ブレークポイントの位置における実際の命令コードは、ＤＳＰ０内のローカル・メモリ内に置かれなければならない。これは、ＤＳＰ１が望まれたブレークポイントをヒットすることを妨げることなしに、ＤＳＰ０が、実際の命令を実行することを可能にする。それゆえＤＳＰ１６４１０またはＤＳＰ１６２７０上のマルチプロセッサ・ソフトウェア・ブレークポイントの実行は、ローカル命令メモリを要求することとなり、このことは装置のコストを増やすこととなる。さらに、ブレークポイント・デバッグ・オプコードがローカル・メモリに対応するアドレス空間に移動されるように実行コードを再構成することは、不便であり、かつプログラマにとって無駄な時間を過ごすこととなる。これら、および他の同様の問題は種々様々の他の従来のマルチプロセッサ・システムで発生する。
【００１０】
　上述された米国特許出願１０／０７２，５２９号は、共有メモリ・マルチプロセッサ・システムにおける改善された実行ソフトウェア・ブレークポイント技術を提供し、１つまたはそれ以上の上記された問題を回避する。ここに開示される実施例は、具体的には、共通ソフトウェア・ブレークポイントからのレジュームについて開示している。それは、マルチプロセッサ・システム停止における全てのプロセッサのためのソフトウェア・ブレークポイントについてである。ソフトウェア・ブレークポイントは、特定のデバッグ・オプコード、または他のブレークポイント・コードが、常に現在のマルチプロセッサ・システムのメイン・メモリ内に残ることを保証するために構成される。そのような、システムの全てのプロセッサは、これらのプロセッサの１つまたはそれ以上がブレークポイントから実行を再開したとしても、確実にブレークポイントをフェッチし実行する。
【００１１】
　しかしながらある特定のマルチプロセッサ・システムにおいて、複数のプロセッサの中の、１つまたはそれ以上であるが、全てに満たないプロセッサを停止することが望まれる。例として、このことは、継続的に実行するように構成されたアプリケーション、またはリアルタイム・プロセス抑制を持つアプリケーションのデバック中に起こりうる。典型的なマルチプロセッサ・システムにおいて、ソフトウェア・ブレークポイントは、ノンストップまたはリアルタイム・アプリケーションのようなものに対して侵入的である。具体的には、ソフトウェア・ブレークポイントが、メイン・メモリ内にセットされた場合、ブレークポイントが全てのプロセッサに対して意図されていなくとも、すべてのプロセッサは、それをフェッチし実行する。ブレークポイントにおいて停止した時に各プロセッサは、それがブレークポイントが対象とするターゲットか否かを決定する。与えられたプロセッサが、ブレークポイントのターゲットならば、デバッガに制御がうつされ、および、それがブレークポイントのターゲットでないときは、実行を再開する。どちらの場合でも、与えられたプロセッサが停止されることは、リアルタイム処理制約または他のアプリケーションの要件を侵害することであり、このことは、システムの故障を導く。ブレークポイントの意図されるターゲットであるプロセッサでさえ、プロセッサが停止している時間を最小限にすることは望ましい。例えば、停止した時のアクションは、デバッグ・スクリプトを実行し、次に自動的に、実行を再開する。
【００１２】
　侵害問題の大部分は、全てのプロセッサが同じメイン・メモリを共有していることであり、そして、不運なことは、上記の命令キャッシュの伝統的用法によってでは十分に対応されないことである。
【００１３】
　従ってこのことにより明白なことは、前述の引例の米国特許出願Ｎｏ．１０／０７２，５２９には重要な進歩性のある技術が開示されているが、シングル・プロセッサまたはマルチプロセッサ・システムのためのキャッシュに基づいたソフトウェア・ブレークポイントの実行におけるさらなる改善が必要である。特に、前述のノン・ストップまたはリアルタイム処理アプリケーションに使用されるソフトウェア・ブレークポイントのためのものである。
【課題を解決するための手段】
【００１４】
　本発明は、シングル・プロセッサ・システムまたは共有メモリ・マルチプロセッサ・システムにおけるソフトウェア・ブレークポイントの実行のための改善された技術を提供する。
【００１５】
　本発明のある１つの方法によれば、共有メモリ・マルチプロセッサ・システムにおける高度なソフトウェア・ブレークポイントの実行を提供する技術である。ここで使用されている高度なソフトウェア・ブレークポイントは、概して、マルチプロセッサ・システム停止の複数のプロセッサの内の１つまたはそれ以上であるが全てではないプロセッサのためのソフトウェア・ブレークポイントと呼ぶ。
【００１６】
　本発明の実施例において、排他的（ｅｘｃｌｕｓｉｖｅ）ソフトウェア・ブレークポイントは、多くのプロセッサの内の各々がメイン・メモリと接続し、プロセッサ自身各々と関連する命令キャッシュを持つ多くのプロセッサを有するマルチプロセッサ・システム内で実行される。ブレークポイント・コードは、複数のプロセッサの内の与えられた少なくとも１つのプロセッサの命令キャッシュ内の特定位置に挿入され、特定位置に関連する制御指標が第１の状態にセットされ、第１の状態は、対応アドレスに対する第１のフェッチ要求に応答して、与えられたプロセッサに、命令キャッシュからブレークポイント・コードを返すことを可能にする。決定がなされた後、制御指標は第１の状態にセットされ、ブレークポイント・コードは、第１のフェッチ要求に応答して、命令キャッシュから与えられたプロセッサへ返され、特定位置に関連する制御指標は、第２の状態にセットされる。第２の状態は、メイン・メモリからサービスを受けるように、対応アドレスに対する第２のフェッチ要求を命令する。次に、制御指標状態は変更され、例えば、第２の状態にセットされている制御指標から、決定が実行された後、第１の状態に初期化され、第２の状態は、第２のフェッチの対応アドレスに対する要求によってメイン・メモリからサービスされる。制御指標が第１の状態にセットされている時に、命令キャッシュ内のミス・イベントは、命令キャッシュ内の特定位置におけるブレークポイント・コードの置換を導くことはない。
【００１７】
　制御指標は、命令キャッシュの与えられた組に関連するシングル・ビットまたはマルチ・ビット指標の形で存在する。例えば、シングル・ビット指標は、デバッグ・ロック状態（ｄｅｂｕｇｌｏｃｋｓｔａｔｅ）を含む第１の状態および使用禁止状態（ａ　ｄｏｎ’ｔ　ｕｓｅｏｎｃｅｓｔａｔｅ）を含む第２の状態において使用される。２ビット指標は、少なくとも１つの追加状態を特定し、ソフトウェア・ブレークポイントを利用することのないオペレーション（動作）を特定する通常モードの動作状態を含み、他の制御指標フォーマットもまた、使用される。
【００１８】
　有利なことは、本発明は、排他的なブレークポイントによって意図されていないプロセッサの通常の動作の継続を保証し、一方で、意図されたプロセッサが効率的な方法でブレークポイントからレジュームすることを可能にする。
【００１９】
　上述したように、本発明の技術は、シングル・プロセッサ・システムにも適用できる。
【実施例】
【００２０】
　本発明は、典型的な共有メモリ・マルチプロセッサ・システムに関して例証する。しかしながら、たとえば一つのプロセッサ、一つの命令キャッシュおよび一つのメインメモリを含むシステムのようなシングルプロセッサシステムを含む、ソフトウェアブレイクポイントの利用によってパフォーマンスの改善をもたらすことがのぞまれているいずれのプロセッサシステムに対しても、より一般的に適用可能であることは理解されるべきである。ここで使用する用語「プロセッサ・システム」は、そのデバイスの中で１つまたはそれ以上のプロセッサを使用してリトリーブされた命令を実行する任意のデバイスを含むことを意味する。用語「プロセッサ」は、例として、制限無く、マイクロプロセッサ、中央演算処理装置（ｃｅｎｔｒａｌ　ｐｒｏｃｅｓｓｉｎｇ　ｕｎｉｔｓ：ＣＰＵｓ）、超長命令語（ｖｅｒｙ　ｌｏｎｇ　ｉｎｓｔｒｕｃｔｉｏｎ　ｗｏｒｄ：ＶＬＩＷ）プロセッサ、単一問題プロセッサ、マルチ問題プロセッサ、デジタル信号プロセッサ（ｄｉｇｉｔａｌ　ｓｉｇｎａｌ　ｐｒｏｃｅｓｓｏｒｓ：ＤＳＰｓ）、アプリケーション特有集積回路（ａｐｐｌｉｃａｔｉｏｎ―ｓｐｅｃｉｆｉｃ　ｉｎｔｅｇｒａｔｅｄ　ｃｉｒｃｕｉｔｓ：ＡＳＩＣｓ）および他の種類のデータ処理装置、同様に、これらの一部、またはこれらのおよびその他のデバイスのくみあわせを含むことを意味する。
【００２１】
　図１は、本発明が実行されている共有メモリ・マルチプロセッサ・システム１００を示す。システム１００は、多くのプロセッサ１０２−１，１０２−２，・・・１０２−Ｎを包含し、そのそれぞれは、共通バス１０６を介してメイン・メモリ１０４に接続されている。また、各プロセッサ１０２−ｉ、ｉ＝１，２、・・・Ｎは、対応マルチプレクサ１０８−ｉおよび命令キャッシュ（Ｉｃａｃｈｅ）１１０−ｉに関連する。オペレーション（動作）において、メイン・メモリ１０４から、関連するデータと同様に、各プロセッサ１０２は命令を読み出し実行する。命令は、マルチプレクサ１０８の第１のパスを通じてメイン・メモリ１０４から直接読み出されるか、マルチプレクサ１０８の第２のパスを通じて命令キャッシュ１１０から直接読み出される。プロセッサは１０２は、また、バス１０６を介してメイン・メモリ１０４に命令実行結果を返す。プロセッサからバス１０６への分離リターン・パスは、はっきりとは図示していない。これらのリターン・パスが、命令およびデータを読み出すために使われる図示の信号ラインに全部またはその一部が結合される。つまり、双方向信号ラインが使用される。
【００２２】
　また、キャッシュ制御ロジック１１２のセットはマルチプロセッサ・システム１００に包まれている。図には明示していないが、キャッシュ制御ロジック１１２は、各命令キャッシュ１１０に接続されている。代わりに、キャッシュ制御ロジック１１２は、キャッシュ制御ロジック１１２の一部が命令キャッシュ１１０の各々の内部部分を形成するように、命令キャッシュ１１０にわたって分布。例えば、集中化ロジックおよび分配化ロジックの様々な組み合わせのような他の配置もまた利用される。例えば、キャッシュ制御ロジックは、プロセッサ１０２をわたって分布される。
【００２３】
　キャッシュ制御ロジック１１２の動作（オペレーション）は、図２から図５の説明と併せて、さらなる詳細な記述を次に示す。適切なハードウェアまたはソフトウェア要素、またはそれらの組み合わせは、当業者に好まれている簡単な方法で構成され、ここに記載されたキャッシュ制御ロジック機能を提供する。キャッシュ制御ロジック１１２は、ハードウェア、ソフトウェアまたはハードウェアとソフトウェアの組み合わせ内で実行される。
【００２４】
　注意されるべきことは、システム１００のような共有メモリ・マルチプロセッサ・システムにおいて、命令アドレスと属性を、命令フェッチの取り扱いを制御するために関連させることは一般的である。例えば、ある既知の属性は、「キャッシュ不可能」属性と呼ばれる。この属性は、特定命令アドレスが命令キャッシュ内に格納されることが許可されるか否かを示す。複数のプロセッサ１０２の各々は、一般的に、そのような属性を解釈するためのハードウェアを包む。キャッシュ不可能属性を備えた命令アドレスのために、キャッシュ制御ロジックは、典型的に常に、このアドレスへフェッチすることをミスとして取り扱う。
【００２５】
　前述に示したように、排他的なソフトウェア・ブレークポイントは概して、複数の内の１つまたはそれ以上であるが全てではない。システム停止のプロセッサのためのソフトウェア・ブレークポイントと呼ばれる。
【００２６】
　本発明によれば、特定のプロセッサの与えられた１つの命令キャッシュに、デバッガが存在する命令のマークおよび配置を許可し、排他的なブレークポイントが確立されるように図１のシステムの命令キャッシュ１１０が構成される。排他的なブレークポイントが意図されていないシステムのプロセッサがそのブレークポイントにおいて停止しないことを保証し、一方でまた、任意の停止されたプロセッサがブレークポイントから、より効率的にレジュームすることを可能にするように命令の配置およびマークを構成すると都合がよい。本発明の実施例は、デバック制御（Ｄ）ビットとしてここで明確に言及される。１つまたはそれ以上の制御ビットを命令キャッシュに格納された命令情報に追加することを通じて、さらにデバッガが命令キャッシュに直接この情報を書くことを許可することによってこの能力を実行する。
【００２７】
　図２は、図１のシステムの複数の内の与えられた１つの命令キャッシュ１１０、すなわち、特定命令キャッシュ１１０−ｉにおける命令処理を図示したものでである。同じ命令処理は実質的に、各命令キャッシュ１１０内で使用されることが理解される。この実施例では、対応プロセッサ１０２−ｉが、命令キャッシュ１１０−ｉから命令をフェッチした場合、アドレス２００はキャッシュに渡される。図２に示されるアドレス２００は、タグ・フィールド２０２、インデックス・フィールド２０４およびブロック・オフセット・フィールド２０６を含む。この例におけるアドレス２００は、３２ビット・アドレスであり、ビット０−３はブロック・オフセットに対応し、ビット４−１１はインデックスに対応し、そして、ビット１２−３１はタグに対応する。
【００２８】
　この実施例において強調されるべきことは、この特定アドレス処理は、例示を目的としたものであり、他のアドレス長およびフィールドの構成が使用される。言い換えると、本発明において、示されたアドレスは特定のフォーマットを持っていることを必要としない。
【００２９】
　アドレス２００のインデックス・フィールド２０４は、命令キャッシュ１１０−ｉ内のいくつかのセットの内の一つを選択するために使用される。具体的には、インデックス・フィールド２０４の特定値は、そのようなセットのグループ２１１内の特定セット２１０を指定する。グループ２１１内のこれらの各セットは、キャッシュに格納された１つまたはそれ以上の命令のセットに一般的に対応する。グループ２１１内の各セットは、有効（Ｖ）ビット、前記に記載されたデバッグ制御（Ｄ）ビット、タグ・フィールドおよび命令データと関連する。例えば、実施例では、１６バイトの命令データのことである。
【００３０】
　本発明に従った命令キャッシュ１００−ｉは、当業者に良く知られた簡単な方法によって実行されるロジック素子２１２および２１４を含む。図に示されるように、ロジック素子２１２は、インデックス・フィールド２０４を使用して選択するように、提示アドレス２００のタグ・フィールド２０２とセット２１０のタグ・フィールドとを比較し、ロジック素子２１４は、有効ビットおよびロジック素子の出力におけるＡＮＤ操作を実行する。与えられたセット２１０について、タグ・フィールド２０２がそのタグ・フィールドと一致する場合、ロジック素子２１４の出力はロジック・ハイ・レベルにあり、その有効ビットはセットされる。それは、例えば、ロジック・ハイ・レベルの場合である。この状況では、キャッシュは、命令アドレス２００において、「ヒット」すると言い、そして、そうでなければ、命令アドレスにおいて「ミス」すると言う。
【００３１】
　任意の挿入されたソフトウェア・ブレークポイントが無い通常の操作において、アドレスのタグ・フィールド２０２と与えられたセットのタグ・フィールドとの間で適合するならば、有効ビットは、与えられたセットの準備を行い、次に、望まれた命令データは、キャッシュ１１０−ｉ内に置かれ、対応プロセッサ１０２−ｉに返される。もし、適合せず、有効ビットがクリアならば、望まれた命令データは、キャッシュ１１０−ｉ内には無く、そして、メイン・メモリ１０４からフェッチされる。
【００３２】
　前述したように、デバッグ制御ビットは、本発明の技術に従った有利な方法による排他的なソフトウェア・ブレークポイントを実行するために使用する。そのような排他的なブレークポイントは、図３に示されるような処理を使用して挿入される。このような特定のソフトウェア・ブレークポイント処理構成３００において、デバッガ３０２は、インターフェース３０４を介して、図１のマルチプロセッサ・システム１００と情報交換する。デバッガ３０２は、良く知られているように、デバッガ・ツールと呼ばれ、適切に構成されたハードウェアおよびソフトウェア要素を使用して実行される。インターフェース３０４は、当業者に良く知られた方法で実行されるので、このことについては、ここでは詳しくは説明しない。評価されるべきことは、本発明は、任意の特定の種類のデバッガまたはマルチプロセッサ・システム・インターフェースの使用を必要としないことである。デバッガ３０２がプロセッサ上で典型的に動くことは、システム１００において本来のことではなく、例としての手段であり、限定されることではない。図３のデバッガ３０２が、マルチプロセッサ・システム１００の与えられたプロセッサのための排他的なソフトウェア・ブレークポイントをプログラムするために使用されることを次に詳細に述べる。
【００３３】
　前述のデバッグ制御ビットは、例を目的としておよび限定されずに、１つの組のビットとして総合的に、３つの特定デバッグ制御システムの内の一つを特定する。３つの特定デバッグ制御システムは、「デバッグ・ロック」状態、「使用禁止（ｄｏｎ’ｔ　ｕｓｅ　ｏｎｃｅ）」状態および「ｎｏｎｄｂｇ」状態と呼ばれる。後の状態は、任意の排他的なソフトウェア・ブレークポイントのない通常の動作を示す。このデバッグ制御ビット構成を使用したシステム１００の動作は、図４および５を伴って次に詳細に述べる。
【００３４】
　デバッグ制御ビットは、より一般にここにデバッグ制御指標と呼ばれる。先の例において、デバッグ制御指標は、前記３つの状態の内の一つを採用し、それらは、「デバッグ・ロック」、「使用禁止」または「ｎｏｎｄｂｇ」である。本発明は、しかしながら、この特定のデバッグ制御ビット構成を使用する必要は無く、そして、多数の他のフォーマットはここに記述された技術を実行するのに使用されてもよい。例えば、シングル・ビットＤ指標が使用されることは、「デバッグ・ロック」状態のみ、または、「使用禁止」状態のみに特定される。
【００３５】
　さらに注意すべきことは、図２に示される各キャッシュ・セットとシングル・デバッグ指標との関連は、例のみである。他の実施例では、デバッグ指標と与えられたキャッシュ・セット内の各命令とを関連させることが可能となる。
【００３６】
　与えられた命令キャッシュ１１０−ｉは、その対応デバッグ制御ビットを次に示す方法によって使用する。システム１００の排他的なソフトウェア・ブレークポイントをセットするために、プログラマは、メイン・メモリから対応するバイトを通常に保持するキャッシュ位置内にデバッグ・オプコードを書く。そのキャッシュ位置のデバッグ制御指標は、次に、例えば、ｎｏｎｄｂｇ状態のようなデフォルト状態から、デバッグ・ロック状態にセットする。プロセッサ１０２−ｉがブレークポイント・アドレスからフェッチした場合、キャッシュ不可能属性がそのアドレスにセットされているとしても、キャッシュ内にヒットされ、デバッグ・オプコードはプロセッサに返される。プロセッサは次に、デバッグ・オプコードを実行し、デバッグ・モードに入る。
【００３７】
　プロセッサが、デバッグ・オプコードを含むキャッシュ・セットと一致する指標を持ち、一致しないタグを持つアドレスからフェッチした場合、キャッシュ制御ロジックは、新しいデータに置き換えることをこのセットに許可しない。その代わりに、デバッグ・オプコードを含むセットは維持され、デバッグ・ロック状態のデバッグ制御指標を持つブレークポイント・アドレスからプロセッサがフェッチする場合に、ブレークポイントは取得される。
【００３８】
　一旦デバッガが、ブレークポイントを扱うと、配置されたブレークポイント上の実際の命令を実行し、フェッチすることによってアプリケーションをレジュームする必要がある。このようにすると、デバッガは、キャッシュ位置のためのデバッグ制御指標を使用禁止状態に変更し、プロセッサをレジュームする。レジュームは、実際の命令のアドレスからフェッチするプロセッサから始まる。デバッグ制御指標の使用禁止状態は、キャッシュ制御ロジックを、キャッシュからの任意の一致データを使用せずに、メイン・メモリからのフェッチ要求をサービスする方向へ向ける。従って、フェッチ要求は、メイン・メモリに転送され、実際の命令は、その場所からプロセッサに返される。しかしながら、メイン・メモリからのフェッチが完了した後、デバッグ制御指標は、元のデバッグ・ロック状態に自動的にセットされる。従って、プロセッサが、この命令アドレスをフェッチする次の時に、デバッグ・オプコードを伴うキャッシュ位置のコンテンツが、返される。
【００３９】
　この作用によって、プロセッサのみよって、ブレークポイントが、デバッグ・オプコードを実行することが意図される。他のプロセッサは、メイン・メモリからフェッチし、デバッグ・オプコードではなく、実際の命令を実行する。さらに、プロセッサは、キャッシュ内の実際の命令を置くステップの除去により、より効率的にレジュームすることができる停止を実行し、ステッピングを行い、そして、デバッグ・オプコードを復元する。
【００４０】
　プロセッサ１０２−ｉに対する排他的なブレークポイント処理について上述してきたが、それは簡単な方法でシステム１００のプロセッサの任意のサブセットにまで適用される。具体的には、シングル・プロセッサのために記述された処理を、ブレークポイントが意図される各々のプロセッサに対して単に繰り返すことができる。
【００４１】
　さらに、前述したとおり、本発明は、シングル・プロセッサ・システムに使用され、そのシステムは、シングル・プロセッサを含み、命令キャッシュおよびメイン・メモリに関連する。シングル・プロセッサ・システムにおいて、本発明は、ブレークポイントが取得された後に、プロセッサを効率的にレジュームする利点を提供する。
【００４２】
　前述したとおり、デバッグ制御状態は、キャッシュ不可能属性の扱いを変化させ、それによって、排他的なソフトウェア・ブレークポイントは、キャッシュ不可能命令にセットされる。キャッシュ不可能命令上の排他的なソフトウェア・ブレークポイントのために、たとえ属性が、キャッシュによってサービスされるのを他の方法で防いでも、プロセッサ・フェッチは、キャッシュによってサービスされる。従って、デバッグ制御ビットは、排他的なソフトウェア・ブレークポイントを、キャッシュ可能およびキャッシュ不可能上に、システム１００のようなマルチプロセッサ・システム内の他のプロセッサに影響を与えることを除いて、セットすることを可能にする。
【００４３】
　図４は、状態およびフロー・ダイアグラム４００を示す。フロー・ダイアグラム４００は、マルチプロセッサ・システム１００内で実行されるキャッシュに基づいたソフトウェア・ブレークポイント処理について更に詳細に説明する。ダイアグラム４００は、ＩＤＬＥ状態４０２およびＭＩＳＳ状態４０４を包含する。
【００４４】
　処理は、最初はＩＤＬＥ状態にある。例えば、図示されているようなリセット・コマンドの実行上にある。ＩＤＬＥ状態から、命令フェッチがシステムの与えられたプロセッサ１０２−ｉによって要求されるか否かの決定は、ステップ４１０で実行される。もし、決定されなければ、処理は、ＩＤＬＥ状態を維持する。そうでなければ、ステップ４１２は、（ｉ）与えられたプロセッサを命令キャッシュがヒットするか否か、および（ｉｉ）キャッシュ可能属性が存在するか、または、デバッグ制御指標がデバッグ・ロックにセットさせるか否か、を決定する。もし、ステップ４１２において、（ｉ）および（ｉｉ）のどちらの状態をも満たしていなければ、ステップ４１４に示されるように、与えられたプロセッサは、止まった状態となり、命令要求は、システムのメイン・メモリ１０４に転送される。ステップ４１６は、次に、デバッグ制御指標が使用禁止状態にあるか否かを決定する。もし、その状態にあれば、デバッグ制御指標の状態は、ステップ４１８において、デバッグ・ロックに変更され、次に、処理は、ＭＩＳＳ状態４０４に入る。そうでなければ、処理は、デバッグ制御指標状態の変更をせずにＭＩＳＳ状態へ入る。
【００４５】
もし、（ｉ）および（ｉｉ）両方の状態がステップ４１２において満たされていれば、命令フェッチ・データは、ステップ４２０に示されるように、命令キャッシュから返される。
【００４６】
　ＭＩＳＳ状態４０４におけるステップ４２４の処理は、命令フェッチ・データがメイン・メモリから返されているか否かを決定する。もし、返されていれば、処理は、命令フェッチ・データから、ステップ４２６に示される要求プロセッサに返され、そして、示されるようにＩＤＬＥ状態４０２に戻る。もし、そうでなければ、処理は、ＭＩＳＳ状態４０４に返される。
【００４７】
　図４と共に記載された操作の少なくとも一部は、図１のキャッシュ制御ロジック１１２を使用して実行される。例えば、キャッシュ制御ロジックは、デバッグ制御指標の状態を制御するため、および図４の処理に関連した他の機能を実行するために構成される。先に示したように、キャッシュ制御ロジックにおけるこれら、または、他の処理を達成するハードウェア、ソフトウェアまたはその両方の適切な処理は当業者には簡単に導くことができることである。
【００４８】
　さらに認識されるべきことは、図４に示される特定の処理動作は、例のみの目的のものであり、本発明の限定を説明するものではない。当業者は、本発明の技術は、処理動作の他の処置を使用して実行することができることを認識する。
【００４９】
　図５は、本発明に従ったマルチプロセッサ・システム１００の３つのプロセッサの実行の動作の具体的な実施例である。この例を説明するために、３つのプロセッサをＰ０、Ｐ１およびＰ２とする。図は、ソフトウェア・ブレークポイントとしての３つのプロセッサ・システム１００の状態の変動を示す（ａ）から（ｄ）と一緒に前記のデバッグ制御メカニズムを含む。各部分（ａ）から（ｄ）は、３つのプロセッサの状態を示す。各ラインは、対応プロセッサの状態の異なった性状を示す。Ｐｉ状態は、対応プロセッサがデバッグ状態であるか、非デバッグ状態であるか否かを示す。これらの状態はまた、モードと呼ばれる。図の中で利用された他の状態は以下のとおりである:
　Ｐｉキャッシュ［　．．．］Ｖ状態は、Ｐｉのためのキャッシュ内の特定セットの有効ビットの状態を示す。
　Ｄｉキャッシュ［　．．．］Ｄ状態は、Ｐｉのためのキャッシュ内の特定セットのデバッグ制御ビットの状態を示す。
　Ｐｉキャッシュ［　．．．］タグ状態は、Ｐｉのためのキャッシュ内の特定セットのタグ・パートの状態を示す。
　Ｐｉキャッシュ［　．．．］データ状態は、Ｐｉのためのキャッシュ内の特定セットのデータ・パートの状態を示す。
　式　指標（ｘ）は、ｘのアドレスの指標フィールド２０４を表す。式　キャッシュ［ｙ］は、ｙによって示されるキャッシュ２１０のセットを表す。式　タグ（ｚ）は、ｚのアドレスのタグ・フィールド２０２を表す。
【００５０】
　(a)における３つすべてのプロセッサは、オペレーションコードを実行し、ＮＯＮＤＥＢＵＧ状態にある。仮定として、プロセッサＰ０は、本発明の技術に従い、アドレスｓｗｂｐｔにおける命令上の排他的なソフトウェア・ブレークポイント・セットを持つ。このアドレスにおける実際の命令は、ｂｐオプコードを表す。指標（ｓｗｂｐｔ）により与えられた指標におけるＰ０キャッシュ・セットのためのデバッグ制御指標は、デバッグ・ロックにセットされ、そして、実際の命令ｂｐオプコードは、デバッグ・オプコードと入れ替わる。このポイントにおいて、Ｐ１またはＰ２どちらも、メイン・メモリ内のｓｗｂｐｔアドレスから、それらの個々のキャッシュへはフェッチされず、そして、指標（ｓｗｂｐｔ）によって与えられた指標におけるＰ１およびＰ２キャッシュ・セットのＶ状態はゼロにセットされる。
【００５１】
　（ｂ）において、Ｐ０は、ＤＥＢＵＧ状態にあり、Ｐ１およびＰ２は、ＮＯＮＤＥＢＵＧ状態を維持する。前述したように、Ｐ０キャッシュは、指標（ｓｗｂｐｔ）によって識別されたセット内に格納されたデバッグ・オプコードを持つ。Ｐ０は、このデバッグ・オプコードをフェッチおよび実行することによって、ＤＥＢＵＧ状態に入る。Ｐ１は、この同じアドレス（ｓｗｂｐｔ）に対してフェッチを要求する。対応キャッシュ・セットのデバッグ制御指標がｎｏｎｄｂｇ（通常動作）にあると、実際の命令（ｂｐオプコード）は、メイン・メモリからフェッチされる。ここでは、このアドレスにおいて、Ｐ０がどのように、実際の命令のＰ１による妨害なしに、ｓｗｂｐｔアドレス上の排他的なソフトウェア・ブレークポイントを取得したか説明している。
【００５２】
　（ｃ）において、Ｐ０は、そのデバッグ・イベントの取り扱いを完了する。アプリケーションをレジュームするために、デバッグ・オプコードを保持しているキャッシュ・セットのデバッグ制御指標は「使用禁止」に変更される。その結果、Ｐ０によるｓｗｂｐｔアドレスに対する次のフェッチは、メイン・メモリからサービスされる。具体的には、実際の命令（ｂｐオプコード）は、フェッチされ、キャッシュ・セットのコンテンツを修正することなく、メイン・メモリから返される。同時に、デバッグ制御指標の状態は、デバッグ・ロックに変更される。Ｐ１において、アドレスｓｗｂｐｔのセットのコンテンツは、キャッシュに留まる。Ｐ２はまだ、ｓｗｂｐｔアドレスをフェッチしない。
【００５３】
　（ｄ）において、Ｐ０は、ブレークポイント命令以外のコードを実行し続ける。Ｐ１は、そのキャッシュ内のｂｐオプコード命令を置換する命令をフェッチする。Ｐ２は、ｓｗｂｐｔアドレスに対してフェッチを要求し、そのキャッシュ内にこのアドレスにおける命令をもたらす。メイン・メモリからフェッチされたバイトがデバッグ・オプコードを包含していないので、Ｐ２は、デバッグ・イベントに遭遇しない。
【００５４】
　上述の例は実施例のみの目的のためのものであり、決して、本発明の範囲を限定するものと見なさない。
【００５５】
　有利なことは、本発明は、プロセッサ・サイクル時間に少しのまたは全くの影響を及ぼさず、最小限のハードウェア・コストおよびプログラムの変更の要求をしないマルチプロセッサ・システムにおける排他的なソフトウェア・ブレークポイントの機能を提供する。重要なことは、指標がセットの検索処理中に、デバッグ制御指標状態の「使用禁止」から「デバッグ・ロック」への変更の作用は生じず、タグは比較される。さらに詳細には、ヒットまたはミスの決定の後に起こるデバッグ制御ビット状態を変更する作用が行われる。さらに、各プロセッサにおけるプライベート・ローカル・メモリは、現在の命令キャッシュ・メモリが使用されるまでは、必要ない。さらに、与えられたユーザ・プログラムの実行可能なコードはそのまま使用される。そのコードは、プライベート・ローカル・メモリに再配置することは必要なく、デバッグ・オプコードは、処理される。さらに、本発明は、高度なソフトウェア・ブレークポイントに対して、キャッチされなかったコードを使用することを可能にする。例えば、キャッシュ不可能属性のためのコードである。
【００５６】
　ここで、注意されるべきことは、本発明は、ブレークポイントからレジュームする場合、デバッガをより効率的にする。また、本発明において、デバッガは、実際の命令をステッピングするツー・ステップ処理を実行せず、そして、デバッグ・オプコードを置き換える。これは、デバッガの実行における重要な利点である。
【００５７】
　本発明の技術は、他のソフトウェア・ブレークポイント技術と共同して使用され、前記米国特許出願Ｎｏ．１０／０７２，５２９に記載されていることを包含する。
【００５８】
　実際の命令キャッシュを使用して例証されたが、本発明は、前記された機能性を提供する専用ハードウェアの少なくとも一部を使用して実行されるが、マルチプロセッサ・システムの通常動作における実際の命令キャッシュとして他のサービスは行わない。言い替えると、専用ハードウェアは、実質的に、命令キャッシュとして構成されるが、本発明の技術に従った排他的なブレークポイントを実行することによってのみ使用される。本明細書で使用している単語「命令キャッシュ」は、このタイプの専用ハードウェアを含むことを意味する。
【００５９】
　本発明は、様々な異なる処理アプリケーションおよび環境の必要条件を満たすために、任意の望まれた種類および構成のプロセッサ、命令キャッシュ、バスおよびメイン・メモリ要素を使用して形成される。本発明の実施例は、例証のみを表しており、多数の代替の実施例が使用されてもよい。例えば、実施例は、命令キャッシュ内に格納され、ブレークポイントされた命令の特定のデバッグ制御指標フォーマットを使用しているが、異なるタイプのシングル・ビットまたはマルチ・ビット指標の他の処理として、他のシングル・ビットまたはマルチ・ビット指標もまた、使用することができる。付け加えると、更新されたデバッグ制御指標における特定の方法は、改変される。さらに、ブレークポイント・コード、命令、命令アドレスおよびキャッシュ・セット構造は、与えられた処理アプリケーションおよび環境を提供するために必要とされ、構造が変更される。さらに、他のキャッシュ・アーキテクチャは、本発明のデバッグ制御指標フィーチャによって実行され、各タグに関連する多重セットを実行する限定キャッシュ以外を含む。それは、ｎ−ｗａｙセットに関するキャッシュ２，４，・・・ｎである。本願請求項の範囲内のこれらおよび多くの代替えの実施例は、当業者には明白である。
【図面の簡単な説明】
【００６０】
【図１】本発明により実行されたマルチプロセッサ・システムの例のブロック図である。
【図２】本発明に従った図１のマルチプロセッサ・システムの命令キャッシュの操作を示す図である。
【図３】デバッガを伴った図１のマルチプロセッサ・システムの相互作用を示す図である。
【図４】本発明に従ったマルチプロセッサ・システムの操作のフロー図および状態を示す図である。
【図５】本発明に従ったマルチプロセッサ・システムの３つのプロセッサの実行の操作の例を示す図である。
【符号の説明】
【００６１】
１００　共有メモリ・マルチプロセッサ・システム
１０２−１　プロセッサ
１０２−２　プロセッサ
１０２−Ｎ　プロセッサ
１０４　メイン・メモリ
１０６　バス
１０８−１　対応マルチプレクサ
１０８−２　対応マルチプレクサ
１０８−Ｎ　対応マルチプレクサ
１１０−１　命令キャッシュ
１１０−２　命令キャッシュ
１１０−Ｎ　命令キャッシュ
１１２　キャッシュ制御ロジック
２００　命令アドレス
２０２　タグ・フィールド
２０４　指標フィールド
２０６　ブロック・オフセット・フィールド
２１０　特定セット、キャッシュ
２１１　セットのグループ
２１２　ロジック素子
２１４　ロジック素子
３００　ソフトウェア・ブレークポイント処理構成
３０２　デバッガ
３０４　インターフェース
４００　フロー・ダイアグラム
４０２　ＩＤＬＥ状態
４０４　ＭＩＳＳ状態
４１０　命令フェッチ？を実行するステップ
４１２　キャッシュ・ヒットＡＮＤ（キャッシュ可能ＯＲデバッグ・ロック）？を実行するステップ
４１４　メイン・メモリからの命令フェッチの要求によるプロセッサの減速
４１６　一旦使用しない状態？を実行する
４１８　デバッグ制御状態をデバッグ・ロックへ変更する
４２０　キャッシュからの返還命令フェッチ・データ
４２４　命令フェッチ・データが返される？を実行するステップ
４２６　メイン・メモリからの返還命令フェッチ・データ
【図１】
2004103024.tif 000003
【図２】
2004103024.tif 000004
【図３】
2004103024.tif 000005
【図４】
2004103024.tif 000006
【図５】
2004103024.tif 000007