(57)【特許請求の範囲】
【請求項１】
データ処理システムのプロセッサにおいてアプリケーション・コードをデバッグするための方法であって、
前記プロセッサのハードウェア・ユニットにおいて命令を受け取るステップであって、前記命令は、前記データ処理システムのメモリにおいて前記命令がアクセスしようとしているターゲット・メモリ・アドレスを有する、ステップと、
前記ハードウェア・ユニットに関連付けられたコンテント・アドレッサブル・メモリ（ＣＡＭ）を、前記ターゲット・メモリ・アドレスに対応した前記ＣＡＭにおけるエントリに関してサーチするステップであり、前記ＣＡＭにおけるエントリの組の中の各エントリーは、開始アドレス、長さ、ストアビット及びロードビットを含み、前記ストアビット及び前記ロードビットは命令のタイプを識別し、前記ストアビット及び前記ロードビットを所定の値にセットすることが、対応するタイプの命令が例外を発生すべき命令であるということを表わし、前記ターゲット・メモリ・アドレスが提示するメモリ・アドレスの範囲に対応した開始アドレス及び長さを有するエントリに関して前記ＣＡＭにおけるエントリをサーチする、ステップと、
前記ターゲット・メモリ・アドレスに対応した前記ＣＡＭにおけるエントリが見つかったことに応答して、前記エントリにおける情報が前記受け取られた命令を例外を発生すべき命令として識別するかどうかを判断するステップであり、
前記受け取られた命令のタイプを決定するサブ・ステップと、
前記受け取られた命令のタイプが、例外を発生すべき命令のタイプであるということを前記エントリにおける値が表わすかどうかを判断するサブ・ステップと、
前記受け取られた命令のタイプが、例外を発生すべき命令のタイプであるということを前記エントリにおける値が表わすことに応答して、前記受け取られた命令が例外を発生すべき命令であるということを決定するサブ・ステップと、
を含む、ステップと、
前記エントリにおける情報が前記受け取られた命令を例外を発生すべき命令として識別したことに応答して、例外を発生し、前記例外を例外ハンドラ又はデバッガ・アプリケーションの１つに送るステップと、
前記例外ハンドラ又は前記デバッガ・アプリケーションが前記ターゲット・メモリ・アドレスに対応した特定の変数へのアクセスを検出することに応答して、前記特定の変数へのアクセスよりも前に前記命令が必要な同期構成を獲得しており、それにより前記特定の変数に対する競合状態が生じていないことを示すことを確認するステップと
を含む、方法。
【請求項２】
前記受け取られた命令のタイプがロード命令又はストア命令の１つであり、ロード命令又はストア命令のどちらが例外を発生すべきであるかどうかを前記エントリにおける値が表わす、請求項１に記載の方法。
【請求項３】
前記ＣＡＭにおけるエントリの組は、デバッグのためにモニタされる前記メモリにおけるアドレスの範囲を識別するためにデバッガ・アプリケーションによって作成される、請求項１又は２に記載の方法。
【請求項４】
前記例外ハンドラは、前記例外のときに特定の変数の状態を記録することによって、アプリケーション・コード実行中に前記特定の変数が修正されようとしている前記アプリケーション・コードにおける場所を決定する、請求項１乃至３のいずれかに記載の方法。
【請求項５】
前記例外ハンドラは、前記受け取られた命令が前記特定の変数のターゲット・アドレスを操作するかどうかをチェックすることによって、前記受け取られた命令が前記特定の変数のターゲット・アドレスをアクセスしようとする前に保護同期オブジェクトが他のスレッドによって獲得されてしまっても、競合状態をチェックし、
前記受け取られた命令が前記特定の変数のターゲット・アドレスをアクセスしようとする前に他のスレッドが前記特定の変数に対する保護同期オブジェクトを獲得していた場合、前記受け取られた命令が前記特定の変数のターゲット・アドレスを操作しないときには競合状態は存在しない、請求項１乃至４のいずれかに記載の方法。
【請求項６】
前記プロセッサは、複数個のＣＡＭを、前記プロセッサによってサポートされる実行の各スレッドに対して１つずつ維持する、請求項１乃至５のいずれかに記載の方法。
【請求項７】
前記例外ハンドラは、前記受け取られた命令が、対応する同期オブジェクトを獲得せずに変数のターゲット・アドレスを操作するかどうかをチェックする、請求項１乃至６のいずれかに記載の方法。
【請求項８】
コンテント・アドレッサブル・メモリ（ＣＡＭ）を有するハードウェア・ユニットを含むプロセッサと、
前記プロセッサに結合されたメモリと、
を含み、
前記プロセッサは請求項１乃至７のいずれかに記載の方法を遂行するように構成される、データ処理システム。
【請求項９】
コンピュータ・プログラムであって、コンピュータにおいて実行されるとき、前記コンピュータに請求項１乃至７のいずれかに記載の方法を遂行させる、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的には、データ処理装置及び方法の改良に関し、詳しくいえば、マルチスレッド・コードのデバッグをサポートする機構に関する。
【背景技術】
【０００２】
数多くのスレッドで実行されるコンピュータ・プログラムを書くことは、アプリケーションのパフォーマンスを改善する分野の最新技術では周知の方法である。プログラムの順序に従って命令を順次に実行する単一スレッドのアプリケーションとは異なり、マルチスレッドのアプリケーションは、システムの様々な処理コンポーネント上で多数のスレッドを同時に実行することによってパフォーマンスを改善する。一般に、複数個のプロセッサ又はハードウェア・スレッドがマルチスレッド・コードを実行し、それによってアプリケーションが短時間で自己のタスクを完了するのを支援するので、パフォーマンスが改善する。
【０００３】
しかし、順次プログラムとして稼動するアプリケーションの等価な結果を計算するために望ましい方法でスレッドを動作させるために、多くの場合、プログラマは同期コードを挿入しなければならないので、マルチスレッド・アプリケーションの開発は相変わらず難しいタスクである。そのような同期コードは、書き込むこと及び維持することが難しい。マルチスレッドのアプリケーション・コードを開発する際のもう１つの困難は、スレッド間でのデータの共用を整理することである。スレッドがスレッド間でデータを共用する方法に関して注意深い整理を行なわないと、アプリケーション内のスレッドは、データ項目に対する相互の変更をメモリに上書きすることがあり、或いは、同じデータ項目の読み取り及び書き込みが適正に順序付けられていないので、予測し得ない結果を生じることがある。この状態は、通常、「データ競合」又は、単に「競合状態」と呼ばれる。
【０００４】
マルチスレッドのアプリケーションを開発する際にプログラマを支援するために、多くの同期基本命令が発明された。例えば、セマフォ、ロック、及びモニタは、一般に、共用のデータ・アクセスにおける順序を設定し、スレッドが予測可能な方法で相互に対話することを保証するための認識された技術である。正しく書かれた並列プログラムがこれらの構成体を使用するとき、一般に、それは正しい結果を生じるであろうし、決定論的に振る舞うであろう。しかし、これらの構成体及び基本命令をもってしても、マルチスレッド・コードを開発するタスクは簡単なタスクではない。プログラマは、適切な同期コードを導入できないことによって共用データ項目へのアクセスを防止するのを忘れることがある。そのような無防備のアクセスはデーモニック（demonic）アクセスと呼ばれ、ランタイム時に追跡することが非常に難しい。
【０００５】
アプリケーション・コードが実施時に正しいと実際には想定されないことがあるので、通常、デバッグ及びテスト段階がコード開発に後続する。この過程で、アプリケーションはテスト・スーツ(通常、回帰テストと呼ばれる)を実行し、その結果は、アプリケーションがリリースされ得るかどうかを調べるために検討される。その結果がアプリケーション・コードにおけるエラーを示す場合、それは、エラーの源が識別及び修正されるまで、そのエラーをそれの原点に戻って関連づけるようないくつかの手法によりデバッグされる。多くの場合、アプリケーション・コードが決定論的ではないので、既に逐次デバッグが困難なこの技術は、マルチスレッド・コードにおいて使用することが更に難しい。例えば、共用データのデーモニック・アクセスが存在する場合、アプリケーションの実行は、そのデーモニック・アクセスに対して種々の可能なスケジュールを持ち得るし、これらのスケジュールの或るものは全くエラーを生じないこともある。従って、バグを見つけるためにアプリケーションの実行を繰り返すことは、マルチスレッド・コードをデバッグする場合の有望な手法ではない。
【０００６】
その問題の悪化に加えて、マルチスレッド・アプリケーションのデバッグを支援し得るツールの欠乏が存在する。逐次コードがプログラムの種々のフェーズを実行するとき、そのコードの作用を観察するツールをプログラマが使用し得る逐次コードとは異なり、並列プログラムはいつも同じ態様で実行しないかもしれない。従って、バグが一時的に現われるという状況が存在するであろう。或いは、更に悪いことに、バグは滅多に現われず、見つかることを困難にすることもある。更に、逐次デバッギングのための従来技術の多くは、デバッグ・セッションがオンであるときにバグの出現を隠し、その後デバッグ・ツールが解放されたときにだけ現われるように、並列プログラムのタイミングを混乱させることもある。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明の目的は、データ処理システムのプロセッサにおいて、アプリケーション・コードをデバッグするための方法を提供することにある。
【課題を解決するための手段】
【０００８】
本方法は、プロセッサのハードウェア・ユニットにおいて命令を受け取るステップを含み、その命令は、それがアクセスしようとしているターゲット・メモリ・アドレスを有する。更に、その方法は、ハードウェア・ユニットに関連したコンテント・アドレッサブル・メモリ（ＣＡＭ）を、ターゲット・メモリ・アドレスを含むアドレスの範囲を指定するそのＣＡＭにおけるエントリに関してサーチするステップを含む。更に、その方法は、ターゲット・メモリ・アドレスを含むアドレスの範囲を指定するそのＣＡＭにおけるエントリを見つけたことに応答して、そのエントリにおける情報が命令を関連ある命令(an instruction of interest)として識別するかどうかを判断するステップを含む。更に、その方法は、エントリがその命令を関連ある命令として識別したことに応答して、例外を発生し、その例外を例外ハンドラ又はデバッガ・アプリケーションの１つに送るステップを含む。
【０００９】
更に、その方法は、プログラムにおける種々のスレッド間で共用される変数を含むアドレスの範囲を、プログラマがそのハードウェアに関連したＣＡＭにロードするステップを含む。更に、その方法は本発明の実施例に従って、アプリケーション・スレッドを実行するすべてのハードウェア・スレッドのＣＡＭをセットするステップを含む。しかる後、プログラムは実行され、スレッドがＣＡＭにおける指定された範囲における変数をアクセスする場合、アプリケーションが、その変数をアクセスする前に、必要な同期構成体を獲得したことをデバッガが確認する。保護のない変数へのアクセスは、従来のデバッギングにおいて検知することが難しい同期バグの可能性がある。
【００１０】
別の実施例では、コンピュータ可読プログラムとしてコンピュータ使用可能媒体又は可読媒体に格納され得るコンピュータ・プログラムが提供される。コンピュータ可読プログラムは、コンピューティング装置において実行されるとき、そのコンピューティング装置に、方法の実施例に関して上述された種々のオペレーション及びそれらオペレーションの組み合わせを遂行させる。
【００１１】
更に別の実施例では、システム／装置が提供される。そのシステム／装置は、１つ又は複数個のプロセッサ及びその１つ又は複数個のプロセッサに結合されたメモリを含み得る。メモリは、１つ又は複数個のプロセッサによって実行されるときに方法の実施例に関して上述された種々のオペレーション及びそれらのオペレーションの組み合わせを、前記１つ又は複数個のプロセッサに遂行させる命令を含み得る。
【００１２】
本発明のこれらの及び他の特徴並びに利点は、本発明の実施例に関する下記の詳細な説明において記述されるし、その説明から見て当業者には明らかであろう。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施例を具現化し得るプロセッサ・アーキテクチャのブロック図である。
【図２】１つの実施例によるロード／ストア・ユニットのブロック図である。
【図３】１つの実施例によるロード／ストア・ユニットの例示的オペレーションを示すフローチャートである。
【発明を実施するための形態】
【００１４】
本実施例は、マルチスレッド・コンピュータ・コードに対してデバッグ・サポートを施すための機構を提供する。本実施例の機構は、アプリケーションがメモリにおけるいくつもの範囲へのメモリ・アクセスを追跡することを可能にするハードウェア・サポートを提供する。そのハードウェア・サポートは、アプリケーションによって又はアプリケーションを制御するデバッガによってセットされ得るコンテント・アドレッサブル・メモリ（ＣＡＭ）構造を含む。ＣＡＭ構造における各エントリは、モニタされているメモリ範囲の開始アドレスを指定する開始アドレスを有する。更にそのエントリは長さフィールドを含み、その長さフィールドは、そのエントリに対応したモニタされるメモリの範囲のサイズを指定する長さフィールド、開始アドレス及び長さによって定義されるメモリの範囲に対するメモリ・ストア及びメモリ・ロードの検知をそれぞれ可能にするストア・ビット（即ち、Ｓビット）及びロード・ビット（即ち、Ｌビット）を含む。
【００１５】
ハードウェア・レベルでは、プロセッサが、実行中のスレッド内におけるメモリへのすべてのアクセスをチェックする。メモリ・アクセスのアドレスがＣＡＭにおけるエントリの１つと適合する場合、即ち、そのアドレスが、ＣＡＭにおけるエントリに対応するメモリの範囲内にある場合、ハードウェアは例外を送出する。例外は、スタック上のスレッドの状態を格納させ、ソフトウェアで例外処理ルーチンへ実行をジャンプさせる。メモリ・アクセスがストアであり、対応するＳビットが所定値、例えば、１にセットされているとき、その対応するアドレスがＣＡＭエントリの１つによって決定された範囲にある場合、ＣＡＭにおけるエントリへのアクセスのアドレスの適合が生じる。メモリ・アクセスがロードであり且つ対応するＬビットが所定値、例えば、１にセットされているＣＡＭエントリの１つよって決定された範囲に、その対応するアドレスがある場合、適合が生じる。Ｓビット又はＬビットが所定値にセットされてない場合、例えば、Ｓビット又はＬビットが０にセットされ且つアクセスがそれぞれストア又はロードである場合、適合は無視される。
【００１６】
アプリケーションをデバッグするためには、アプリケーション又はそのアプリケーションを制御するデバッガが、モニタされるべきメモリ範囲をＣＡＭエントリの１つにセットされ、モニタされた範囲へのすべてのメモリ・アクセスの際に発生された例外を処理するために、例外ハンドラが提供され得る。例えば、例外の時にその特定の変数の状態とパフォーマンス・カウンタ等によって発生され得るような他の実行パラメータとを記録することにより、アプリケーションのコードにおけるどこの特定の変数が実行中に修正されるかを決定するために、例外ハンドラが使用され得る。
【００１７】
ＣＡＭ構造は、実行拡張を生じ得る如何なるパフォーマンス・オーバヘッドもない複数個のメモリ範囲をハードウェアが同時にモニタすることを可能にする。マルチスレッド・アプリケーションをデバッグするためには、アプリケーション又はデバッガは、保護同期オブジェクト、例えば、ロックがアクセスに先立って別のスレッドにより得られているとき、受け取られた命令が変数のメモリ・アドレスに対してストア又はロードを行なうかどうかをチェックするように例外ハンドラをセットし得る。そのチェックの結果が否定的である場合、これは競合状態又は共用変数へのデーモニック・アクセスの一例である。それは一般的ではあり、マルチスレッド・アプリケーションにおいてバグを見つけることが難しい。保護同期オブジェクトがアクセスの前に得られている場合、競合状態又は共用変数へのデーモニック・アクセスは遭遇していない。バグを見つけ難い他のタイプのものは、デバッグ例外の発生にサポートを提供するために、及びデバッグを目的としてトレース情報を収集するに適した例外ハンドラへの実行のブランチにサポートを提供するために、実施例のハードウェア機構を使用して見つかり得る。
【００１８】
実施例の機構は、多くの様々なタイプのデータ処理システム及びプロセッサのアーキテクチャにおいて使用し得る。その実施例は、シングル・プロセッサの順次処理アーキテクチャ及び複数プロセッサのマルチスレッド・データ処理システム・アーキテクチャの両方において使用され、コンピュータ・プログラムのデバッグに対してハードウェア・サポートを提供する。しかし、この説明のために、実施例の機構が具現化されるデータ処理システムは、マルチスレッド・ハードウェアを提供するマルチプロセッサ（又は、マルチコア）データ処理システムであると仮定する。しかし、実施例及び本発明がそのようなものに限定されないことは明らかである。
【００１９】
当業者には明らかなように、本発明は、システム、方法、又はコンピュータ・プログラムとして具体化され得る。従って、本発明は、全体的にハードウェアの実施例、全体的にソフトウェアの実施例（ファームウェア、駐在ソフトウェア、マイクロコード等を含む）、又は本明細書では一般的に「回路」、「モジュール」、又は「システム」と呼ばれ得るソフトウェア及びハードウェア態様を結合した実施例の形態を取り得る。更に、本発明は、任意の実体的な表現媒体においてコンピュータ使用可能プログラム・コードで具現化されたコンピュータ・プログラムの形態を取り得る。
【００２０】
１つ又は複数個のコンピュータ使用可能媒体又はコンピュータ可読媒体の任意の組合せが利用し得る。例えば、コンピュータ使用可能媒体又はコンピュータ可読媒体は、例えば、電子的、磁気的、光学的、電磁気的、赤外線もしくは半導体システム、装置、デバイス、或いは伝播媒体であってもよいが、それらに限定されない。コンピュータ可読媒体の更に特殊な例（完全無欠でないリスト）は、下記のもの、即ち、 １つ又は複数個のワイヤ有する電気的接続線、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、リード・オンリ・メモリ（ＲＯＭ）、消去可能プログラマブル・リード・オンリ・メモリ（ＥＰＲＯＭ又はフラッシュ・メモリ）、光ファイバ、ポータブル・コンパクト・ディスク・リード・オンリ・メモリ（ＣＤＲＯＭ）、光学的記憶装置、インターネットもしくはイントラネットをサポートするような伝送媒体、或いは磁気記憶装置を含むであろう。プログラムは、例えば、用紙又は他の媒体の光学的スキャンによって電子的に捕捉され、しかる後、コンパイルされ、解釈され、或いは、必要な場合に適切な方法で処理され、しかる後、コンピュータ・メモリに格納され得るので、コンピュータ使用可能媒体又はコンピュータ可読媒体は、用紙又はプログラムが印刷される他の適切な媒体であってもよい。本明細書の記載において、コンピュータ使用可能媒体又はコンピュータ可読媒体は、命令実行システム、装置、又はデバイスによって、或いはそれに関連して使用するのためのプログラムを含み、格納し、伝送し、伝播し、又は搬送し得る任意の媒体であってもよい。コンピュータ使用可能媒体は、ベースバンドにおいて又は搬送波の一部として具体化されたコンピュータ使用可能プログラム・コードを備えた伝播データ信号を含み得る。コンピュータ使用可能プログラム・コードは、無線、有線、光ファイバ・ケーブル、無線周波（ＲＦ）等を含むが、それらに限定されない任意の適切な媒体も使用して伝送することが可能である。
【００２１】
本発明のオペレーションを実行するためのコンピュータ・プログラム・コードは、Java（商標）、Smalltalk（商標）、C++等のようなオブジェクト指向プログラミング言語、及び「Ｃ」プログラミング言語又は同様のプログラミング言語のような通常の手続き型プログラミング言語を含む１つ又は複数個のプログラミング言語の任意の組み合せで書くことが可能である。プログラム・コードは、ユーザのコンピュータにおいて全体的に、ユーザのコンピュータにおいて部分的に、スタンド・アロン・パッケージ・ソフトとしてユーザのコンピュータにおいて部分的に及びリモート・コンピュータにおいて部分的に、或いはリモート・コンピュータ又はサーバにおいて全体的に実行することが可能である。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）又は広域ネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを介してユーザのコンピュータに接続され得るし、その接続は、外部コンピュータに（例えば、インターネット・サービス・プロバイダを使用してインターネットを介して）行なうことが可能である。更に、プログラム・コードは、サーバ又はリモート・コンピュータにおけるコンピュータ可読記憶媒体上に具現化され、記憶及び／又は実行のためにネットワークを介してリモート・コンピュータ又はユーザのコンピュータのコンピュータ可読記憶媒体にダウンロードされてもよい。更に、コンピューティング・システム又はデータ処理システムのいずれも、リモート・コンピューティング・システム又はデータ処理システムからネットワークを介してプログラム・コードをダウンロードした後、コンピュータ可読記憶媒体にそのプログラム・コードを格納し得る。
【００２２】
本実施例は、本発明に従って、方法、装置（システム）、及びコンピュータ・プログラムのフローチャート及び／又はブロック図に関連して以下で説明される。フローチャート及び／又はブロック図の各ブロック、並びに、フローチャート及び／又はブロック図におけるブロックの組み合せは、コンピュータ・プログラム命令によって具現化することができる。これらのコンピュータ・プログラム命令は、汎用コンピュータ、特殊目的コンピュータ、又はマシンを生産する他のプログラム可能データ処理装置のプロセッサに提供され、従って、そのコンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令は、フローチャート及び／またはブロック図のブロックにおいて指定された機能／行為を具現化するための手段を形成する。
【００２３】
これらのコンピュータ・プログラム命令は、コンピュータ可読媒体に格納され、特定の態様で機能するようにコンピュータ又は他のプログラム可能データ処理装置を指示し得る。従って、コンピュータ可読媒体に格納された命令は、フローチャート、ブロック図のブロックにおいて指定された機能／行為を具現化する命令手段を含む製品を産出する。
【００２４】
コンピュータ・プログラム命令は、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び／又はブロック図のブロックにおいて指定された機能／行為を具現化するためのプロセスを提供するよう、コンピュータ利用のプロセスを創出する一連の動作ステップをコンピュータ又は他のプログラム可能データ処理装置において遂行させるためにコンピュータ又は他のプログラム可能データ処理装置上にロードされ得る。
【００２５】
図面におけるフローチャート及びブロック図は、本発明の種々の実施例に従ってシステム、方法及びコンピュータ・プログラムの可能な実施態様のアーキテクチャ、機能、及びオペレーションを表わす。これに関して、フローチャートまたはブロック図における各ブロックは、モジュール、セグメント、又はコード部分を表わし、そのコード部分は、指定された論理的機能を具現化するための１つ又は複数個の実行可能な命令を含む。或る別の実施態様では、ブロックに示された機能は図面に記載された順序を外れて生じ得るということに留意されたい。例えば、順次態様で示された２つのブロックが実際には実質的に同時に実行されることがあり、或いは、それらのブロックは関連する機能に依存して逆の順序で実行されることがある。更に、ブロック図及び／又はフローチャートの各ブロック、並びにブロック図及び／又はフローチャートにおけるブロックの組み合せは、指定された機能又は行為、或いは特殊目的ハードウェア及びコンピュータ命令の組み合せを遂行する特殊目的のハードウェア・ベースのシステムによって具現化されてもよいということも留意されたい。
【００２６】
図１を参照すると、機能ユニット及びレジスタを示すデュアル・スレッド・プロセッサ設計の例示的ブロック図が実施例に従って示される。プロセッサ１００は、例えば、デュアル・スレッド・データ処理システム・アーキテクチャにおける１つ又は複数個の処理装置として具現化され得る。即ち、プロセッサ１００は、複数個のスレッドの同時実行をサポートする１つまたは複数個のプロセッサ・コアを含み得る。例えば、プロセッサ１００は、単一スレッド・モードにおいても操作され得るデュアル・スレッド同時マルチ・スレッド（ＳＭＴ）を備えた単一集積回路スーパースカラ・マイクロプロセッサを含み得る。従って、以下で更に検討されるように、プロセッサ１００は、種々のユニット、レジスタ、バッファ、メモリ、及び他のセクションを含み、それらのすべては集積回路によって形成される。本明細書では説明目的のために特定のプロセッサ・アーキテクチャ及び特定のマルチ・スレッド機能に対して言及されるが、実施例の機構は、任意のレベルのマルチ・スレッド、例えば、デュアル・スレッド、クワッド・スレッド等をサポートする任意のプロセッサ・アーキテクチャに適用可能であるということは明らかであろう。
【００２７】
図１に示されるように、命令フェッチ・ユニット（ＩＦＵ）１０２は命令キャッシュ１０４に接続している。命令キャッシュ１０４は、実行される多数のプログラム（スレッド）に対する命令を保持する。命令キャッシュ１０４は、更にレベル２（Ｌ２）キャッシュ／メモリ１０６に対するインターフェースも有する。ＩＦＵ１０２は、命令アドレスに従って命令キャッシュ１０４からの命令を要求し、命令デコード・ユニット１０８に命令を送る。実施例では、ＩＦＵ１０２は、同時に２個までのスレッドに対して命令キャッシュ１０４から複数個の命令を要求し得る。命令デコード・ユニット１０８は、同時に２個までのスレッドに対する複数個の命令をデコードし、デコードされた命令を命令シーケンサ・ユニット（ＩＳＵ）１０９に送る。
【００２８】
プロセッサ１００は、ＩＳＵ１０９からのデコードされた命令を受け取る送出キュー１１０を含み得る。命令は、適切な実行ユニットへのディスパッチを待つ間、送出キュー１１０に格納される。アウト・オブ・オーダ・プロセッサがイン・オーダ態様で作動するために、ＩＳＵ１０９は、各命令間の疑似従属関係を素早く使って選択的に命令を送出し得る。命令がリード・アフタ・ライトのような従属関係でデータを生じない場合、ＩＳＵ１０９は、前のターゲット命令（プロデューサとも呼ばれる）を指すために、１つの命令につき１つの付加的ソース・オペランド（コンシューマとも呼ばれる）を付加し得る。送出キュー１１０は、それがプロデューサを送出する場合、送出のためにコンシューマをウェイクアップし得る。疑似従属関係を導入することによって、一連の従属命令が作成され得るし、その後、それらの命令は単にイン・オーダ態様で送出され得る。ＩＳＵ１０９は、その付加されたコンシューマを命令スケジューリングのために使用し、命令は、それが実行されるとき、その付加された従属関係からのデータを実際には使用しない。一旦ＩＳＵ１０９が任意の必要な疑似従属関係を選択的に付加すると、その後は、送出キュー１１０が継承して各スレッドに対して順序どおりに命令を送出し、各スレッドに対する命令をプロセッサの実行ユニット１１２、１１４、１１６、１１８、１２０、１２２、１２４、１２６、及び１２８に出力又は送出する。
【００２９】
実施例では、プロセッサの実行ユニットは、ブランチ・ユニット１１２、ロード／ストア・ユニット（ＬＳＵＡ）１１４及び（ＬＳＵＢ）１１６、固定小数点実行ユニット（ＦＸＵＡ）１１８及び（ＦＸＵＢ）１２０、浮動小数点実行ユニット（ＦＰＵＡ）１２２及び（ＦＰＵＢ）１２４、並びに、ベクトル・マルチメディア拡張ユニット（ＶＭＸＡ）１２６及び（ＶＭＸＢ）１２８を含み得る。実行ユニット１１２、１１４、１１６、１１８、１２０、１２２、１２４、１２６、及び１２８は両方のスレッドをわたって完全に共用され、それは、実行ユニット１１２、１１４、１１６、１１８、１２０、１２２、１２４、１２６、及び１２８が一方又は両方のスレッドから命令を受け取り得るということを意味する。プロセッサは、設計済みレジスタ・ファイル（ＡＲＦ）とも呼ばれ得る多数のレジスタ・セット１３０、１３２、１３４、１３６、１３８、１４０、１４２、１４４、及び１４６を含む。
【００３０】
ＡＲＦは、一旦命令が実行を完了すると、完成したデータが保存されるファイルである。ＡＲＦ １３０、１３２、１３４、１３６、１３８、１４０、１４２、１４４、及び１４６は、２つのスレッドの各々に対して及び命令のタイプによって別々にデータを、即ち、汎用レジスタ（ＧＰＲ）１３０及び１３２、浮動小数点レジスタ（ＦＰＲ）１３４及び１３６、特殊目的レジスタ（ＳＰＲ）１３８及び１４０、並びにベクトル・レジスタ（ＶＲ）１４４及び１４６に格納し得る。完成したデータをタイプによって及びスレッドによって別々に格納することは、命令を処理している間のプロセッサ競合を減らすことに役立つ。
【００３１】
プロセッサは、更に、命令ポインタ、スタック・ポインタ、又はプロセッサ・ステータス・ワードのような、一方又は両方のスレッドに関連して使用され得るプログラム状態を保持する共用の特殊目的レジスタ（ＳＰＲ）１４２のセットを含む。実行ユニット１１２、１１４、１１６、１１８、１２０、１２２、１２４、１２６、及び１２８が、単純化された内部バス構成体１４９を介してＡＲＦ１３０、１３２、１３４、１３６、１３８、１４０、１４２、１４４、及び１４６に接続される。
【００３２】
浮動小数点命令を実行するために、ＦＰＵＡ１２２及びＦＰＵＢ１２４は、１つの命令を実行するために必要な命令データが完全である場合、又はそのデータがパイプラインにおけるフラッシングのポイントを通った場合、命令を実行するために必要な入力データであるレジスタ・ソース・オペランド情報をＦＰＲ１３４及び１３６から検索する。完全なデータは、一旦命令が実行を完了すると実行ユニットによって生成されるデータであり、ＡＲＦ１３０、１３２、１３４、１３６、１３８、１４０、１４２、１４４、及び１４６のようなＡＲＦに格納される。不完全なデータは、命令が実行を完了していない命令実行中に生成されたデータである。ＦＰＵＡ１２２及びＦＰＵＢ１２４は、各実行中の命令がどのスレッドに属するかに従ってそれらのデータを入力する。例えば、ＦＰＵＡ１２２、ＦＰＵＢ１２４、ＦＰＲ１３４、及び１３６がスレッド特有のものであるので、ＦＰＵＡ１２２はＦＰＲ１３４に完成したデータを入力し、ＦＰＵＢ１２４はＦＰＲ１３６に完成したデータを入力する。
【００３３】
命令の実行中、ＦＰＵＡ１２２及びＦＰＵＢ１２４は、その命令がパイプラインにおけるフラッシングのポイントを通過したとき、それらの宛先レジスタ・オペランド・データ又はその命令の実行中に発生された命令データをＦＰＲ１３４及び１３６に出力する。命令の実行中、ＦＸＵＡ１１８、ＦＸＵＢ１２０、ＬＳＵＡ１１４及びＬＳＵＢ１１６は、その命令がパイプラインにおけるフラッシングのポイントを通過したとき、それらの宛先レジスタ・オペランド・データ又はその命令の実行中に発生された命令データをＧＰＲ１３０及び１３２に出力する。命令のサブセットの実行中、ＦＸＵＡ１１８、ＦＸＵＢ１２０、及びブランチ・ユニット１１２は、その命令がパイプラインにおけるフラッシングのポイントを通過したとき、それらの宛先レジスタ・オペランド・データをＳＰＲ１３８、１４０、及び１４２に出力する。ＳＰＲ１３８及び１４０に格納された命令ポインタ、スタック・ポインタ、又はプロセッサ・ステータス・ワードのようなプログラム状態は、スレッド優先順位１５２をＩＳＵ１０９に表示する。命令の実行中、その命令がパイプラインにおいけるフラッシングのポイントを通過したとき、ＶＭＸＡ１２６及びＶＭＸＢ１２８は、それらの宛先レジスタ・オペランド・データをＶＲ１４４及び１４６に出力する。
【００３４】
データ・キャッシュ１５０は、それと、プロセッサからのデータを受領してそれをレベル２キャッシュ／メモリ１０６を直接書き込む非キャッシュ可能ユニット（図示されてない）とを関連付け得る。この方法では、非キャッシュ可能ユニットは、キャッシュするための記憶装置を必要とするコヒーレンス・プロトコルを回避する。
【００３５】
命令キャッシュ１０４から入力され、命令デコード・ユニット１０８によってデコードされた命令に応答して、ＩＳＵ１０９は、その命令を選択的に送出キュー１１０にディスパッチし、しかる後、命令タイプ及びスレッドに関しては実行ユニット１１２、１１４、１１６、１１８、１２０、１２２、１２４、１２６、及び１２８上にディスパッチする。一方、実行ユニット１１２、１１４、１１６、１１８、１２０、１２２、１２４、１２６、及び１２８は、特定のクラス又はタイプの命令のうちの１つ又は複数個の命令を実行する。例えば、ＦＸＵＡ１１８及びＦＸＵＢ１２０は、レジスタ・ソース・オペランドに関して、加算、減算、ＡＮＤ、ＯＲ、及びＸＯＲのような固定小数点の数学的演算を実行する。ＦＰＵＡ１２２及びＦＰＵＢ１２４は、レジスタ・ソース・オペランドに関して、浮動小数点の乗算及び除算のような浮動小数点の数学的演算を実行する。ＬＳＵＡ１１４及びＬＳＵＢ１１６は、データ・キャッシュ１５０と、ＡＲＦ１３０、１３２、１３４、及び１３６との間でオペランド・データを移動させるロード・アンド・ストア命令を実行する。ＶＭＸＡ１２６及びＶＭＸＢ１２８は、複数個のデータを含む単一の命令オペレーションを実行する。ブランチ・ユニット１１２は、命令キャッシュ１０４からの命令を要求するようにＩＦＵ１０２によって使用される命令アドレスを修正することにより、プログラムを介して実行のフローを条件付で変更するブランチ命令を実行する。
【００３６】
命令完了ユニット１５４は、実行ユニット１１２、１１４、１１６、１１８、１２０、１２２、１２４、１２６、及び１２８において実行される命令がそれらのオペランド結果をＡＲＦ１３０、１３２、１３４、１３６、１３８、１４０、１４２、１４４、及び１４６に書き込むことを終了したときを決定するために、内部バス構造１４９をモニタする。ブランチ・ユニット１１２、ＦＸＵＡ１１８、ＦＸＵＢ１２０、ＬＳＵＡ１１４及びＬＳＵＢ１１６によって実行される命令は、実行のために同じサイクル数を必要とするが、ＦＰＵＡ１２２、ＦＰＵＢ１２４、ＶＭＸＡ１２６、及びＶＭＸＢ１２８によって実行される命令は、実行のために可変の及び更に大きいサイクル数を必要とする。従って、グループ化され且つ同時に実行を開始した命令が必ずしも同時に実行を終了するとは限らない。１つの命令の「完了」は、その命令が実行ユニット１１２、１１４、１１６、１１８、１２０、１２２、１２４、１２６、又は１２８の１つにおける実行を終了しつつあり、フラッシングのポイントを通過してしまい、命令が順序どおりに完了しなければならないのですべてのそれ以前の命令が設計済み状態で既に更新されてしまったということを意味する。従って、その命令は今や完了し、設計済み状態を更新する準備ができている。それは、その命令が完了してしまったので、データの最終的状態の更新を意味する。その設計済み状態は、単に順序どおりに更新され得るだけである。即ち、命令は、順序どおりに完了しなければならず、完成したデータは、各命令が完了するときに更新されなければならない。
【００３７】
命令完了ユニット１５４は命令の完了をモニタし、更なる情報グループが実行ユニット１１２、１１４、１１６、１１８、１２０、１２２、１２４、１２６、及び１２８にディスパッチされ得るということをＩＳＵ１０９に通知する制御情報１５６をＩＳＵ１０９に送る。ＩＳＵ１０９は、ディスパッチ・ユニットへのパイプラインに更なる命令をもたらすスロットルとして働くディスパッチ信号をＩＦＵ１０２及び命令デコード・ユニット１０８に送り、それが更なるデコードされた命令を受け取る準備ができていることを表わす。プロセッサ１００は、単一スレッド・モードでも操作され得るデュアル・スレッド同時マルチスレッディング（ＳＭＴ）を備えた単一集積回路スーパスカラ・マイクロプロセッサに関する１つの詳細な説明を提供するが、本実施例はそのようなマイクロプロセッサに限定されない。即ち、本実施例は、パイプライン技術を使用する任意のタイプのプロセッサにおいて具現化され得る。
【００３８】
図１に示されたアーキテクチャでは、１つ又は複数個のロード／ストア・ユニット１１４及び１１６が本実施例の機構を具現化するためのハードウェア・コンテント・アドレッサブル・メモリ（ＣＡＭ）構造及びロジックを含むように拡張され得る。コンテント・アドレッサブル・メモリ（ＣＡＭ）は、サーチ集中アプリケーションのためのアルゴリズム手法よりもはるかに高速の特別タイプのハードウェア検索エンジンである。ＣＡＭは、サーチ操作が単一のプロセッサ・クロック・サイクルで完了することを可能にする追加比較回路を備えた一般的な半導体メモリ、通常、ＳＲＡＭで構成される。ＣＡＭに関する更なる情報に関しては、IEEE Journal of Solid-State Circuits, Vol. 41, No. 3, pp.712-727, March 2006 における“Content-Addressable Memory (CAM) Circuits and Architectures: A Tutorial and Survey”と題した Pagiamtzis 氏他による論文を参照されたい。
【００３９】
ロード／ストア・ユニットのロジック及びそれのＣＡＭ構造は、デバック情報の収集を促進するためには例外を発生しなければならないロード／ストア・オペレーションがターゲットとするメイン・メモリのようなメモリの範囲を定義するようにアプリケーション、デバッガ等によって構成し得る。プロセッサは、デバッガ又はアプリケーションが、例えば、或る範囲に関してＣＡＭ構造をロードするために、ＣＡＭ構造にアクセスすること並びに対応するＳ及びＬビットをセットすることを可能にするために、特別の命令によって補強される。更に、その命令は、デバッグが起こっていないときには、エネルギを節約するためにアプリケーションがＣＡＭをすべてオフにすることを可能にする。
【００４０】
アプリケーション又はデバッガは、そのメモリの範囲の開始アドレスと、そのメモリの範囲の長さと、そのメモリの範囲に対するロード、ストア、或いは、ロード及びストアが、例外ハンドラ又はデバッガ・アプリケーションによる処理のための例外を発生するためのものであるかどうかと、を指定するエントリをＣＡＭ構造において作成する。この情報はＣＡＭ構造におけるエントリに格納され、アクセス・オペレーションのアドレスがＣＡＭ構造におけるエントリの１つにより指定された範囲以内にあるかどうかを判断するためにアクセス・オペレーションのアドレスに基づいてサーチ可能である。その判断の結果が肯定的であり、アクセス・オペレーションが、例外を発生するアクセス・オペレーションであるとして表わされるものである場合、その例外は、デバッグ情報を収集するために及び／又はアプリケーションの実際のデバッグを行うために例外ハンドラ又はデバッガのいずれかによって発生され、処理され得る。これは、アプリケーションがマルチスレッド・アプリケーションであってもなくても行われ得る。
【００４１】
例外ハンドラ又はデバッガは、競合状態又は共用変数へのデーモニック・アクセスのようなマルチスレッド・アプリケーションにおけるバグを見つけるのが困難であるものを識別するように構成され得る。例えば、競合状態又はデーモニック・アクセスをチェックするために、例外ハンドラ又はデバッガは、アクセス・オペレーションを提示したスレッドがアクセス・オペレーションを試みる前にアクセス・オペレーションにおけるアドレスによって指定されたメモリ・ロケーションにおけるロックを捕捉したかどうかを知るためにチェックし得る。その捕捉の結果が肯定的である場合、デバッガ又は例外ハンドラは如何なるアクションも遂行し得ず、代わりに、アプリケーションが実行を再開することを可能にし得る。しかし、そのアクセス・オペレーションを試みたスレッドがメモリ・ロケーションに対して最初にロックを捕捉しなかった場合、デバッガ又は例外ハンドラは、アプリケーションの実行を引き継ぎ、アプリケーション・コードにおける潜在的なバグを識別する分析において使用するためにデバッグまたはトレース情報を検索し得る。
【００４２】
アクセス・オペレーションが例外を発生するアクセス・オペレーションであるとして表わされないアクセス・オペレーションである場合、又は、アクセス・オペレーションのアドレスが、ＣＡＭにおけるエントリによって定義されたメモリの範囲の１つ内ではない場合、そのアクセス・オペレーションは例外を発生せずに行なわれ得る。
【００４３】
図２は、１つの実施例に従ってロード／ストア・ユニットの例示的ブロック図を示す。図２に示されるように、ロード／ストア・ユニット２３０は、１つ又は複数個のＣＡＭエントリ及びサーチ・ロジック２４９を有するコンテント・アドレッサブル・メモリ（ＣＡＭ）を含むように拡張されている。各ＣＡＭエントリは、開始アドレス２４２、長さ２４４、ストア・ビット（Ｓビット）２４６、及びロード・ビット（Ｌビット）２４８を含む。開始アドレス２４２及び長さ２４４は、ＣＡＭ ２４０を使ってモニタされるべきメモリのアドレスの範囲を定義する。開始アドレス２４２及び長さ２４４は、特定の実施態様に依存して、有効アドレス、仮想アドレス、実アドレス又は物理アドレス等によって指定され得る。Ｓビット２４６及びＬビット２４８は、対応する開始アドレス２４２及び長さ２４４によって指定されたメモリのアドレス範囲をターゲットとするストア命令／オペレーション及びロード命令／オペレーションの一方又は両方がモニタされるべきであるかどうか、即ち、例外処理を必要とする例外を発生すべきであるかどうかを指定する。
【００４４】
或る実施態様では、プロセッサ・アーキテクチャにおいて実行中のすべてのスレッドによって実行されるロード／ストア命令を処理するために、単一のＣＡＭ構造２４０が使用され得るということを留意されたい。それとは別に、ＣＡＭ構造２４０がスレッド・コンテキストに関連付けられるように、スレッドの各々に対して個別のＣＡＭ構造２４０が提供されてもよい。従って、ロード／ストア・ユニット２３０は、複数個のＣＡＭ構造２４０を、プロセッサにおいて実行される各スレッドに対して１つずつ有し得る。或いは、複数個のロード／ストア・ユニット２３０を有するアーキテクチャでは、各ロード／ストア・ユニット２３０は、それらが扱うスレッドの各々に対して１つまたは複数個のＣＡＭ構造２４０を持ってもよい。各スレッドに対して１つずつとする複数個のＣＡＭ構造２４０の場合、ＣＡＭ構造２４０は、特定のスレッドのスレッド・コンテキスト情報において指定され得るスレッドに対応する。
【００４５】
アプリケーション又はデバッガの２８０は、メモリの或るアドレス範囲がモニタされ、或る命令、例えば、メモリのモニタされたアドレス範囲をターゲットとするストア及び／又はロード命令がモニタされるように、ＣＡＭ２４０においてエントリを生成し得る。実施例の機構によっては、必ずしも、モニタされたメモリのすべての部分がモニタされる必要がないということは明らかであろう。それと対照的に、実施例の機構は、アプリケーション又はデバッガ２８０がメモリの個々の部分、即ち、メモリの個々のアドレス範囲をターゲットとすることを可能にするので、ターゲットとされたトレーシング及びデバッギングが遂行され得る。例えば、ＣＡＭにおけるエントリは、特定の変数に対応するメモリのアドレス範囲に関連付けられ得るし、従って、実施例の機構はこの変数に関してアプリケーション・コードの実行をトレース及びデバッグするために使用され得る。
【００４６】
ＣＡＭ ２４０のサーチ・ロジック２４９は、同じプロセッサ・サイクルにおいてＣＡＭ２４０内のすべてのエントリを素早くサーチして、入力アドレスに適合するエントリがあるかどうかを判断するために使用される。詳しく云えば、送出キュー２１０が命令２２０をロード／ストア・ユニット２３０に送出したことに応答して、サーチ・ロジック２４９は、命令２２０に関連した入力アドレス２２２を受け取る。命令２２０は、ロード命令又はストア命令のいずれであってもよい。命令２２０及びそれの入力アドレス２２２を受け取ったことに応答して、サーチ・ロジック２４９は、その入力アドレスがＣＡＭ２４０におけるエントリのアドレス範囲内にあるかどうかを判断するために、ＣＡＭ ２４０における各エントリの開始アドレス２４２及び長さ２４４によって指定されたアドレス範囲をサーチする。その判断の結果が肯定的である場合、適合したエントリのＳビット２４６及びＬビット２４８の状態が決定され、ロード命令又はストア命令２２０の命令コードと比較される。その命令がストア命令であることを命令２２０の命令コードが表わし、対応する適合したＣＡＭエントリのＳビット２４６が所定の値（例えば、１）にセットされている場合、ＣＡＭ２４０のロジックは例外２５０を発生し得る。同様に、その命令がロード命令であることを命令２２０の命令コードが表わし、対応する適合したＣＡＭエントリのＬビット２４８が所定値（例えば、１）にセットされている場合、ＣＡＭ２４０のロジックは例外２５０を発生し得る。その命令がロード命令又はストア命令であり、対応するＳビット２４６又はＬビット２４８が所定値にセットされてない場合、例外は発生されず、その命令の実行は単にロード／ストア・ユニット２３０を通して正規の態様で継続する。
【００４７】
ＣＡＭ ２４０におけるエントリに対するこのチェックはロード／ストア命令２２０を提示する各スレッドに対して行なわれるということを留意されたい。従って、複数個のスレッドがプロセッサにおいて実行され得るし、各スレッドは、ロード／ストア命令２２０が関連あるアドレス範囲(an address range of interest)をターゲットとし、関連ある命令であるかどうかを判断するために上述の態様でその対応するＣＡＭ構造によってチェックされる。従って、従来技術では必要とされたスレッドごとにモニタリングを順次化する必要がなく、複数個のスレッドを実質的に同時にモニタすることが可能である。更に、ＣＡＭ構造２４０は、メモリの個々のアドレス範囲がターゲットにされること、及び個々の命令のタイプ、例えば、ロード、ストアの一方又はロード、ストアの両方がターゲットにされることを可能にする。
【００４８】
例外２５０がＣＡＭ ２４０によって発生される場合、その例外は例外ハンドラ２６０に提供され得る。それとは別に、例外は、個別の例外ハンドラ２６０を持つのではなくアプリケーション又はデバッガの２８０に直接送られてもよい。例外ハンドラ２６０又はアプリケーション／デバッガ２８０は、実行中のアプリケーションの代わりに例外を受け取るように予め登録されていてもよい。これは、UNIX（商標）のptrace（）システム・コール又はUNIXシステム及びUNIX系システムの信号処理機構のような伝統的なオペレーティング・システム技術を使用して行うことが可能である。オペレーティング・システムは、現在の技術において行われるように、例外を適切なエンティティ（デバッガ又はアプリケーション）に伝え、適切なコード・ハンドラーにおいて処理させる責任がある。アプリケーション・コードの実行は、例外２５０が発生される場合に例外ハンドラ２６０又はアプリケーション／デバッガ２８０にブランチし、しかる後、トレース・データ構造２７０においてトレース／デバッグ情報を収集するように操作し得る。アプリケーション／デバッガ２８０は、分析を行ってアプリケーション・コードにおける潜在的なバグを識別するようにトレース・データ構造２７０において操作してもよい。
【００４９】
例えば、アプリケーション／デバッガ２８０は、複数個のスレッドが、メモリの同じアドレス範囲をほぼ同時にアクセスすることによって、潜在的な競合状態又はデーモニック・アクセスを識別し得る。競合状態又はデーモニック・アクセスは、データが破損され得るか、或いは他のスレッドがそのデータを使用すること又は種々の方法でそれを修正することを試みているとき、１つのスレッドがそのデータを修正したためにそのデータをアクセスしようとする１つ又は複数個のスレッドにとって正しくないものにされることがあるので、アプリケーション・コードの実行時に重大問題を引き起こすことがある。例えば、第１のスレッドは以下のタイプのものであってもよい。
Lock(I);
v+=1;
Unlock(I);
第２のスレッドは以下のタイプのものであってもよい。
V+=2; //デーモニック変数アクセス
第１スレッドに入る前に、V==3  である場合、v==4, v==5, v==6はすべて出口後において起こり得る。第２スレッドへのエントリ前に、v==2  である場合、同じことが真である。更に、第２スレッドへのエントリ前に、v==3  である場合、v==5及びv==6の両方とも起こり得る。従って、その可能性がある場合、第１及び第２のスレッドの同時実行によって、ｖが第１及び第２スレッドの両方において同じ値であるとき、競合状態またはデーモニック・アクセスが生じる。それをアクセスしようとする前に、スレッド２がメモリ・ロケーションにおけるロックを得ていないという点で、そのような競合状態又はデーモニック・アクセスがスレッド２に関して検出され得る。これは簡単な例であるが、それは起こり得る問題点を示している。マルチ・スレッド・アプリケーションにおいて生じる実際のエラーは、一般的にはこれよりもっと複雑であろうが、実施例のＣＡＭ構造及び例外処理を使用して同様に検出され得る。
【００５０】
アプリケーション／デバッガ２８０は、トレース・データ構造２７０において格納されたトレース情報に関するアプリケーション／デバッガ２８０によって行なわれた分析の結果を詳述したデバッガ出力２９０を提供し得る。例えば、アプリケーション／デバッガ２８０は、起こり得る競合状態又はスレッドによるデーモニック・アクセスを識別し、関連するスレッドを識別し、競合状態／デーモニック・アクセス等を生じさせた命令を識別し得る。種々のタイプのデバッガ出力２９０が、トレース・データ構造２７０において収集されたトレース情報、及びアプリケーション／デバッガ２８０によって行なわれた分析に基づいて提供され得る。
【００５１】
図３は、ロード及び／又はストア命令が、スレッドに関係なく、関連あるメモリのアドレス範囲をアクセスしようとするとき、例外をトリガするためにコンテント・アドレッサブル・メモリ（ＣＡＭ）を使用することに関連して１つの実施例によりロード／ストア・ユニットの例示オペレーションを概説するフローチャートである。図３におけるオペレーションは、ＣＡＭ構造がロード／ストア・ユニットに存在し、デバッガに関連あるメモリのアドレス範囲を指定する１つ又は複数個のエントリで占められているものと仮定する。上述のように、デバッガは、そのデバッガに関連するメモリのアドレス範囲を識別するためにＣＡＭ構造にエントリを書込み得るし、そのデバッガに関連ある命令のタイプに対して適切なＳビット及び／又はＬビットをセットし得る。デバッガは、上述したようにＣＡＭ構造によって発生された例外を処理するためのシステムに登録されてもよい。
【００５２】
図３に示されるように、オペレーションは、ロード又はストア命令をロード／ストア・ユニットにおいて受け取ることによって開始する（ステップ３１０）。そのロード又はストア命令において指定されたアドレスがＣＡＭにおけるエントリの１つによって定義されたアドレス範囲内にあるかどうかを判断するために、その指定されたアドレスに対してルックアップ・オペレーション（又は、サーチ・オペレーション）がＣＡＭにおいて遂行される（ステップ３２０）。適合するエントリがあるかどうかに関して判断が行われる（ステップ３３０）。その判断結果が肯定的である場合、適合するエントリのＳビット及びＬビットのセッティングに基づいて、例外を発生すべきか否かに関して判断が行われる（ステップ３４０）。例えば、上述したように、命令がストアであって、Ｓビットがセットされている場合、又は命令がロードであって、Ｌビットがセットされている場合、例外が発生され得る。そうでない場合、例外は発生されない。
【００５３】
例外が発生されるべき場合には例外が発生され、例外ハンドラ又はデバッガに送られる（ステップ３５０）。そのロード又はストア命令を送出したスレッドの状態がスタックに格納され（ステップ３６０）、その例外を発生したスレッドに関してデバッグ又はトレース情報が集められる（ステップ３７０）。しかる後、その例外が、例外ハンドラ又はデバッガのいずれかによって処理される（ステップ３８０）。
【００５４】
例えば、例外ハンドラは、集められたデバッグ／トレース情報を分析し、競合状態又はデーモニック・アクセスが生じたことが検知されたかどうかを判断し得る。そのような状態を検知し得る１つの方法は、ロード又はストア命令を送出したスレッドがＣＡＭにおける対応エントリのアドレス範囲に関してロックを獲得したか、或いはロード又はストア命令におけるアドレスによって識別された特定のメモリ・ロケーションを獲得したかを、少なくともそのメモリ・ロケーションにおいてロード又はストアを行なおうとする前に、判断することである。そのロックが得られなかった場合、競合状態又はデーモニック・アクセスが生じたかもしれない。
【００５５】
従って、実施例は、アプリケーション・コードのデバッグを支援するためのＣＡＭ構造を提供するハードウェア機構を提供する。本実施例の機構は、マルチスレッド・アプリケーション・コードのデバッグの支援に対して特によく適する。それは、プロセッサがメモリの或るアドレス範囲をアクセスしようとするときにはいつも、そのアクセスを試みる特定のスレッドに無関係に、特定のスレッド・コンテキストに関連した１つ又は複数個のＣＡＭ構造が例外を発生するために提供されるためである。このように、複数個の同時に作動するスレッドが、関連ある特定のアドレス範囲に関して及び関連ある特定の命令タイプに関して、同時にモニタされ得る。
【００５６】
本実施例は、メモリの或るアドレス範囲に対するロード及び／又はストアをモニタするためにプロセッサのロード／ストア・ユニットに設けられるＣＡＭ構造に関して説明されているが、本実施例がそのようなものに限定されないことは明らかであろう。むしろ、同様のＣＡＭ構造はプロセッサにおいて実行されつつある種々のタイプの命令をモニタするために、同様のＣＡＭ構造がプロセッサの他の機能的ユニットに設けることも可能である。例えば、種々のタイプの命令をモニタするために及びデバッグ又はトレース情報を生成する対応の例外を発生するために、同様のＣＡＭ構造が図１におけるブランチ・ユニット１１２、浮動小数点ユニット１２２又は１２４等に設けることが可能である。重要な概念は、関連あるメモリのアドレス範囲及び関連ある命令のタイプを指定するためにハードウェアＣＡＭ構造を使用すること、及び関連ある命令が関連あるアドレス範囲をターゲットとするとき、どのスレッドが命令を実行しているかに関係なく、例外を発生することである。
【００５７】
上述したように、本実施例は、全体的にハードウェアの実施例、全体的にソフトウェアの実施例、又はハードウェア要素及びソフトウェア要素の両方を含む実施例の形態をとり得る。或る実施例では、その実施例の機構が、ファームウェア、駐在ソフトウェア、マイクロコード等を含むが、それに限定されないソフトウェア又はプログラム・コードで具現化される。
【００５８】
プログラム・コードを格納及び／又は実行するに適したデータ処理システムは、システム・バスを介してメモリ・エレメントに直接的に又は間接的に結合された少なくとも１つのプロセッサを含むであろう。メモリ・エレメントは、プログラム・コードの実際の実行中に使用されるローカル・メモリ、大容量記憶装置、及び、実行中にコードが大容量記憶装置から検索されなければならない回数を減らすために少なくとも幾つかのプログラム・コードの一時的記憶装置を提供するキャッシュ・メモリを含み得る。
【００５９】
入出力装置、即ち、I／O装置（キーボード、ディスプレイ、ポインティング・デバイス等を含むが、それに限定されない）は、システムに直接に又は介在するI／Oコントローラを介して結合され得る。ネットワーク・アダプタも、データ処理システムが、介在する専用又は公衆ネットワークを介して他のデータ処理システム又は遠隔のプリンタもしくは記憶装置に結合されることを可能にするために、そのシステムに結合され得る。モデム、ケーブル・モデム、及びイーサネット・カードは、数少ない現在利用可能なタイプのネットワーク・アダプタである。
【００６０】
本発明に関する記述は、図解及び説明を目的に提示されており、全網羅的であること又は開示された形体の発明に限定されることを意図するものではない。多くの修正及び変更が当業者には明らかであろう。実施例は、本発明の原理、実用的な応用例を最もよく説明するために、及び期待される特定の用途に適する種々の修正を伴う種々の実施例に関しても当業者が本発明を理解することを可能にするために選定され、記述された。
【図１】
0005904993.tif 000002
【図２】
0005904993.tif 000003
【図３】
0005904993.tif 000004