(57)【要約】      （修正有）【課題】メモリアクセスをモニタするソフトウェアの負担を軽減する。【解決手段】メモリ参照またはアクセスの発生を検出し、それに応答するロジックは、ハードウェアロジック内に実装するので、メモリ参照／アクセスの役割を果たすソフトウェアはオーバヘッドによる負担が少ない。検出されたアクセスに応答してプログラムされた様々なシナリオに従い、機能を実行する。シナリオの発生は機能を実行するハンドラールーチンを呼び出す成果イベントをトリガする。【選択図】図１
2008071339.tif 000002
【特許請求の範囲】
【請求項１】
装置であって、
一のメモリアクセス動作は、１つまたはそれ以上のメモリ領域にアクセスすることと、それに応答して一の成果イベントを生じることであるかどうかを決定する第一のロジックを含み、前記成果イベントは、前記１つまたはそれ以上のメモリ領域にアクセスする前記メモリアクセス動作に応答し、１つまたはそれ以上の機能を実行する一の割り込みハンドラを呼び出す、装置。
【請求項２】
前記メモリアクセス動作は、一のセンチネル命令によりプログラム順で優先されることである、請求項１に記載の装置。
【請求項３】
前記センチネル命令は、プログラム順で前記センチネルに次ぐ命令が、前記１つまたはそれ以上のメモリ領域にアクセスするという動作をモニタすることであるということを前記第１のロジックに示すことである、請求項２に記載の装置。
【請求項４】
前記センチネル命令は、対応する宛先ロードアドレスがないことに対する一のロード動作を含む、請求項３に記載の装置。
【請求項５】
前記メモリアクセス動作に対応する一のデータが一の値の範囲内にあるかどうかを決定する第２のロジックをさらに含む、請求項１に記載の装置。
【請求項６】
前記第１のロジックは、前記第２のロジックが前記メモリアクセス動作に対応するデータは前記値の範囲内にあるかどうかを決定するかどうかを該第２のロジックに示すよう一のフラグを設定することである、請求項５に記載の装置。
【請求項７】
前記成果イベントは、一のフォールトのような成果動作を含む、請求項６に記載の装置。
【請求項８】
前記第１および第２のロジックは、一のセンチネル命令の検出に応答して１つまたはそれ以上のシナリオを実行する１つまたはそれ以上のプログラマブルチャネルを含む、請求項７に記載の装置。
【請求項９】
システムであって、
一のセンチネル命令を格納する一のメモリと、
１つまたはそれ以上のアクセス範囲への一のアクセスに対し、プログラム順における前記センチネル命令に続く複数の命令をモニタする一のプロセッサと、
を含むシステム。
【請求項１０】
前記アクセスは、一のメモリロードまたは記憶アドレスを含む、請求項９に記載のシステム。
【請求項１１】
前記アクセスは、一のスタックへの一の命令ポインタを含む、請求項９に記載のシステム。
【請求項１２】
前記アクセスは、一の分岐ターゲットアドレスを含む、請求項９に記載のシステム。
【請求項１３】
前記プロセッサは、一のデータ範囲内のデータの１つまたはそれ以上のアドレス範囲へのアクセスをモニタする、請求項１０に記載のシステム。
【請求項１４】
前記プロセッサは、前記１つまたはそれ以上のアドレス範囲へのアクセスをモニタすべく複数のシナリオによりプログラムされる複数のチャネルを含む、請求項１３に記載のシステム。
【請求項１５】
前記プロセッサは、前記１つまたはそれ以上のアドレス範囲へのアクセスが一の成果イベントを生じることになるかどうかを示すべく、前記複数のシナリオに対応する複数のフラグ記憶領域を含む、請求項１４に記載のシステム。
【請求項１６】
前記複数のフラグ記憶領域は、前記複数のシナリオの第１のシナリオから前記複数のシナリオの第２のシナリオまで、前記第２のシナリオが前記１つまたはそれ以上のアドレス範囲への前記アクセスをモニタすることであるかどうかを示す一のフラグを含む、請求項１５に記載のシステム。
【請求項１７】
前記１つまたはそれ以上のアドレス範囲は、１つまたはそれ以上の線形アドレス範囲を含む、請求項９に記載のシステム。
【請求項１８】
方法であって、
１つまたはそれ以上のシナリオを一のプロセッサの論理チャネルにプログラミングすることと、
前記１つまたはそれ以上のシナリオをトリガすべく一の第１のセンチネルのための一のプログラムをモニタすることと、
前記第１のセンチネルの検出に応答し、前記１つまたはそれ以上のシナリオを実行することと、
前記１つまたはそれ以上のシナリオが満たされる場合、一の成果イベントを実行することと、を含み、前記１つまたはそれ以上のシナリオは、一の第１のアドレス範囲に対し一のアクセスが生じているかを決定することと、
を含む方法。
【請求項１９】
前記成果イベントは、一のハンドラルーチンを呼び出すことである、請求項１８に記載の方法。
【請求項２０】
前記ハンドラルーチンは、一のソフトウェアプログラムを修正することである、請求項１９に記載の方法。
【請求項２１】
前記ハンドラルーチンは、一のソフトウェアプログラムの一のプロフィールを生成させることであり、該プロフィールは、前記ソフトウェアプログラムの様々なパフォーマンス態様を示す、請求項１９に記載の方法。
【請求項２２】
前記ソフトウェアプログラムは、一の管理されたランタイム環境内で動作する、請求項２１に記載の方法。
【請求項２３】
前記ハンドラルーチンは、一の第１のスレッドが一の第２のスレッドに割り当てられる一のメモリ領域にアクセスすることを防ぐ、請求項１９に記載の方法。
【請求項２４】
前記メモリ領域は、一のソフトウェアスタックを含む、請求項２３に記載の方法。
【請求項２５】
前記メモリ領域は、一のソフトウェアヒープを含む、請求項２３に記載の方法。
【請求項２６】
一の機械により実行された場合、該機械に一の方法を実行させる一組の命令を格納する機械可読媒体であって、前記方法は、
一の命令スレッドによる一のメモリ領域へのアクセスをモニタすることと、
前記メモリ領域への前記アクセスをモニタすることに応答して生成された一の情報プロフィールに従い、前記命令スレッドのパフォーマンスを修正することと、
を含む、機械可読媒体。
【請求項２７】
前記モニタすることは、複数のシナリオを実行することを含む、請求項２６に記載の機械可読媒体。
【請求項２８】
前記複数のシナリオは、前記命令スレッド内の一のセンチネル命令が実行される場合に実行されることだけである、請求項２７に記載の機械可読媒体。
【請求項２９】
前記命令スレッドが修正される一の管理されたランタイム環境をさらに備える、請求項２８に記載の機械可読媒体。
【請求項３０】
一の処理リソースと通信するための一のアプリケーションプログラムインターフェース（ＡＰＩ）をさらに備える、請求項２８に記載の機械可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピューティングおよびコンピュータシステムの分野に関し、より詳しくは、コンピュータシステム内のメモリに対するアドレス、命令、データまたは他の参照を検出することの分野に関する。
【背景技術】
【０００２】
コンピュータプログラムによりメモリに対する様々な参照を追跡すべく、参照ポイントにより注釈をつけることができる（計装など）プログラムを走らせるコンピュータシステムがある。例えば、コンピュータプログラムによりアクセスされるアドレス範囲を追跡する計装コードを含み得るコンピュータもあり、特定のアドレス範囲へのアクセスに応答していくらかの動作がとられることもある。一般的に、プログラムの一のメモリアクセスと、複数のメモリアドレスまたは値のある試験範囲との比較、および／または、特定のメモリ範囲へのアクセスに応答してある機能を実行することに用いられるロジックは、ソフトウェアプログラムまたはルーチン内に実装される。
【０００３】
ソフトウェアにおけるメモリアクセスの比較動作の実行は、モニタされることができるメモリアクセスのタイプ、数、および、頻度を制限する可能性があり、それは、それらチェックするのに必要なソフトウェアを実行することに付随するオーバーヘッドなどの理由による。一般に、メモリアクセスフィルタリングまたはモニタリングなどの機能をモニタするソフトウェアプログラムが大きくなるにつれ、コンピュータシステムの性能は低下し、その一方で、コードサイズは拡大する。それによって、より大きなコードを格納できるデバイスが必要になり、システムコストは上昇する。
【発明を実施するための最良の形態】
【０００４】
本発明の実施形態は、コンピュータシステムに関する。より詳しくは、本発明の少なくとも１つの実施形態は、コンピュータシステムにおけるメモリアクセスに関連するアクセスまたは情報を検出しかつフィルタリングする技術に関する。
【０００５】
一実施形態では、コンピュータプログラムまたは他のロジックによるメモリへのアクセスがモニタでき、また、それに応答して、プロセッサ内の回路に実装されるようなハードウェアロジックと、１つまたはそれ以上のソフトウェア命令との組み合わせを用いて様々な動作が実行される。一実施形態では、「チャネル」などのハードウェア・プログラマブルロジックは、様々なメモリ領域または様々なデータ値のアクセスを検出し、それら検出されたアクセスに応答してチャネル内でプログラムされた様々なシナリオに従い機能を実行すべく用いられてよい。
一実施形態では、特定のシナリオ、または、シナリオの組み合わせの発生は、これらの発生に応答して機能を実行するハンドラルーチンを呼び出すフォールトのような成果イベントをトリガしてよい。
【０００６】
一実施形態において、メモリ参照またはアクセスの発生を検出し、それに応答するロジックは、ハードウェアロジック内に実装されているので、メモリ参照／アクセスの役割を果たすソフトウェアは、オーバーヘッドコードによる負担が少ない。これにより、メモリアクセス／参照が検出され、ソフトウェア内で処理される場合より、ソフトウェアはより効率的に、より高いパフォーマンスレベルで実行できるようになる。さらに、少なくとも１つの実施形態では、検出され得る様々なメモリアクセスおよび参照の数、タイプ、および、組み合わせにおいてより柔軟性が見込まれる。
【０００７】
一実施形態では、ハードウェアに定義されたシナリオは、モニタされるべきソフトウェアプログラム内に命令または他のコードを含むことにより、プログラム内の様々なメモリアクセスをモニタすることができ、プログラムが実行された場合、それは、シナリオに、コード内の他の命令を検出させる。
例えば、一実施形態では、「センチネル」命令などの命令は、メモリ領域にアクセスする命令または命令のグループに予めプログラム順で挿入されてもよい。センチネルがプログラムを走らせるプロセッサと遭遇するかまたはプロセッサにより実行された後、そのプロセッサまたは他のプロセッサ内の対応する一のまたは複数のチャネルは、センチネルに続きプログラム順で実行される命令に含まれるか関連するデータ、アドレス、または、他の情報に対し、様々な比較動作を実行してよい。また、チャネルにプログラムされているという条件がセンチネルに続く命令のプログラム順での実行により満たされる場合、その条件は、フォールトのような成果イベントをトリガすることができ、それに応答してハンドラは、機能を実行することができる。
【０００８】
一実施形態では、線形または物理アドレスの範囲へのアクセスは、１つまたはそれ以上のチャネルにアクセスを検出させ、それに応答して機能を実行させるセンチネルによりプログラム順で先行する命令または命令のグループによりアクセスされてよい。他の実施形態では、線形または物理メモリアドレスに格納されるデータまたはデータの範囲は、これらデータまたはデータ範囲を格納する役割を果たすプログラム順の命令に先立つ１つまたはそれ以上のセンチネルの検出に応答して１つまたはそれ以上のシナリオを実行する１つまたはそれ以上のチャネルにより検出されてよい。さらに、一実施形態では、分岐ターゲットまたは分岐ターゲット範囲への制御の移行は、分岐予測動作を実行する役割を果たすプログラム順の命令に先立つ１つまたはそれ以上のセンチネルの検出に応答して１つまたはそれ以上のシナリオを実行する１つまたはそれ以上のチャネルにより検出されてよい。他の実施形態では、他のメモリ参照またはアクセスは、プログラム内のセンチネルの検出に応答していくつかのシナリオを実行するチャネルをプログラムすることにより検出されてよい。さらに、メモリ参照またはアクセスの１つまたはそれ以上の組み合わせ（例えば一のメモリアクセスに対応するデータまたはアドレス）は、チャネルにより実行されるシナリオを組み合わせることにより、１つまたはそれ以上のチャネル内で検出されてよい。
【０００９】
一実施形態では、データへのポインタが「スタック」外のプログラムに公開された場合、データが簡単に上書きされるスタックのようなさらなる一時記憶域よりむしろ「ヒープ」のようなグローバルメモリ領域をプログラムスレッド、または、他の命令シーケンスが使用できるようするべく、領域フィルタリング技術が用いられてよい。より詳しくは、一実施形態では、ヒープ（「キンダーガルテン」）の部分は、このキンダーガルテンへのポインタが他のプログラムまたはスレッドに公開されているかどうかに関わらず、１つまたはそれ以上のプログラムスレッドに特に割り当てられてよい。なぜなら、ポインタをヒープ（「ゴミ収集」）に維持する既存の技術は、キンダーガルテンへのアクセスを有するそれらのスレッドのみのためにキンダーガルテンに適用されるかもしれないからである。一実施形態では、メモリアクセスフィルタリング技術は、一のまたは複数のスレッドがヒープ全体に関わるゴミ収集オーバヘッドを招くことなく、スタックの一時的品質を回避できるよう、スタックが情報を格納し、アクセスできるようにするより、むしろ、スレッドがヒープキンダーガルテンを使用するようにできる。
【００１０】
図１は、一実施形態に従う、実行資源の条件をモニタできるシステムを示す。図１の実施形態では、実行資源１０５、モニタ１１０、および、イネーブルロジック１２０は、命令を実行できるプロセッサ１００の一部を形成する。いくつかの実施形態では、実行資源は、単一の構成要素または集積回路に集積できるハードウェア資源を含んでよい。しかしながら、実行資源は、プログラム命令の実行時に使用することもできるソフトウェアまたはファームウェア資源、あるいは、ハードウェアおよびソフトウェアおよび／またはファームウェアの任意の組み合わせを含んでよい。例えば、ファームウェアは、抽象概念層の一部として用いられるか、または、ソフトウェアのように、ハードウェアの処理に機能を追加してもよい。ソフトウェアは、また、命令セットの１部またはすべてをエミュレートするか、または処理中の支援をするために用いられてもよい。
【００１１】
プロセッサは、命令を実行する種々の異なるタイプのいずれであってもよい。例えば、プロセッサは、縮小命令セットコンピューティング（ＲＩＳＣ）プロセッサ、複合命令セットコンピューティング（ＣＩＳＣ）プロセッサ、超長命令語（ＶＬＩＷ）プロセッサ、または、任意のハイブリッドまたは他のプロセッサタイプであってよい。さらに、ネットワークまたは通信プロセッサ、コプロセッサ、埋込み型プロセッサ、圧縮エンジン、グラフィックプロセッサなどの専用プロセッサが開示された技術に用いられてもよい。集積化が引き続きトレンドであり、プロセッサがより複雑になるにつれ、内部パフォーマンスインジケータをモニタし、それに反応することの必要はさらに高まる可能性があり、それはここに開示される技術にとってさらに望ましいことである。しかしながら、この技術の領域の目覚しい進歩により、開示された技術がプログラムシーケンスを実行する複雑なハードウェアに普及しているにも関わらず、それらの用途すべてを予見することは難しい。
【００１２】
図１に示すように、プロセッサ１００は、メモリなどの記憶媒体１５０に結合される。記憶媒体１５０は、様々な階層レベルを有するメモリサブシステムであってよく、階層レベルは、キャッシュメモリ、ダイナミック・ランダム・アクセス・メモリなどのシステムメモリ、フラッシュメモリ（メモリスティックなど）の不揮発性メモリ、磁気または光ディスクの様々なレベルを含むがこれらに限定されない。図に示すように、記憶媒体は、プログラム１６０、ハンドラおよび／またはサービススレッド１７０の命令などの他のスレッド命令を格納する。さらに、メモリは、一のまたは複数のプログラムスレッドが実行資源内の様々なイベントのモニタリングに応答して展開されかつ最適化される管理されたランタイム環境１５５を格納してよい。
【００１３】
モニタ１１０が望ましいイベントをモニタできるようにすべく、モニタ１１０は、特定の条件が検出されるように、または、特定のミクロアーキテクチャイベントが伝えられるように、実行資源の様々な部分に結合されてよい。信号ラインは、モニタ１１０への経路を定められてよく、あるいは、モニタは、関連する資源と共に効果的に配置されるか集積化されてよい。モニタ１１０は、様々なプログラマブルロジック、あるいは、ソフトウェアまたはファームウェア要素を含んでよい。少なくとも１つの実施形態では、モニタ１１０は、構造上定義されたイベントの組み合わせ、または、成果イベントをトリガするために用いられ得る「シナリオ」に関連する１つまたはそれ以上のアーキテクチャまたはミクロアーキテクチャイベントをモニタするようプログラムされてよい。
【００１４】
一実施形態では、シナリオを実装するようプログラムされるロジックは、より精巧なシナリオを組み立てるべく、個別にまたは組み合わせて用いられることができるハードウェアチャネル内に含まれる。一実施形態では、シナリオは、ソフトウェア命令または命令のグループを用いてプログラムされてよい。さらに、一実施形態では、チャネルは、多数のチャネルに格納された、多数の相互関係のあるシナリオを実行するチャネル読み取り命令を実行することにより、他のチャネルと論理的に関連付けられてよい。または、モニタ１１０は、一のシナリオに関連する特定の条件または条件のセットを検出すべくハードウェアに組み込まれてよい。
【００１５】
したがって、図１に示されるシステムは、１つまたはそれ以上のアーキテクチャイベント、または、「成果イベント」を支持してよい。成果イベントは、現在走っている命令ストリームからチャネルの成果イベントサービスルーチンへと実行を移す。チャネルのサービスルーチンは、現在走っている命令ストリームの同じプロセス／コンテキストに属する。チャネルに関連するシナリオがトリガされると、成果イベントに信号が送られる。
【００１６】
モニタ１１０は、様々なイベントまたは条件を追跡し、検出されるようプログラムされるイベントまたは条件が発生する場合、実行資源１０５は、そうしなければプログラムが続く通常の制御フローを途絶えさせるよう信号が送られる。図１に示すように、途絶は、結果としてスレッドスイッチの発生と呼ばれるイベントハンドラを生じる。少なくとも１つの別の実施形態では、モニタ１１０によりモニタされるイベントまたは条件が生じる場合には、必ずしもプログラムの通常制御フローの途絶はトリガされない。その代わりに、チャネル１３００のような、アーキテクチャ状態記憶素子のグループの１つまたはそれ以上は、一のシナリオに対するすべての条件がモニタ１１０によって検出された場合は成果イベントが生じるべきかどうかを示すよう利用されてよい。すなわち、チャネルがプログラムされ得る場合、その結果シナリオが検出されると、成果イベントが生じる。チャネル内にこのような指示がない場合、シナリオが満足していることが検出されたにもかかわらず、成果イベントを生じないこともある。
【００１７】
一実施形態では、図１に示されるプロセッサ１００は、一組のチャネル１３００を含む。各チャネルは、トリガシナリオを特定できる。シナリオのトリガに応答し、成果イベントハンドラは、トリガイベントの発生を記録し、図１に示されるチャネルサービスハンドラ１８５のようなサービスルーチンを呼び出すことにより応答してよい。成果イベントハンドラは、ハードウェア、ファームウェア、または、ソフトウェア機構であってよい。
【００１８】
一実施形態では、メモリ領域（例えばキャッシュ内またはシステムメモリ内のいずれか）がプロセッサ上を走るプログラム内の一の動作によりアクセスされる場合、１つまたはそれ以上のシナリオは、フォールトのような成果を生じるよう、１つまたはそれ以上のチャネルにプログラムされてよい。例えば、一実施形態では、シナリオは、アクセスの線形または物理アドレスに基づき、メモリの第１の領域へのアクセスをテストするよう定義されてよい。加えて、あるいは、その代わりに、一実施形態では、シナリオは、第２のアドレス範囲に格納されるデータをテストするよう定義されてもよい。さらに別の実施形態では、メモリからの格納またはアクセスされるべきデータ範囲がテストされてよく、それに応答して成果イベントがトリガされてよい。低速プログレスインジケータでもあり得る他の検出可能なイベントは、実行資源の様々なミクロアーキテクチャまたは構造上の詳細に関連してよい。
【００１９】
図１は、記憶媒体１５０がチャネルサービスハンドラ機構１８５に加え、オペレーティングシステム（ＯＳ）１８０も含み得ることを示す。少なくとも１つの実施形態では、オペレーティングシステム１８０は、本願明細書中に記載されるユーザレベルのスレッドモニタおよび最適化技術に最小限関係していてよい。例えば、ＯＳ１８０は、成果イベント処理の間、コンテキストをセーブしリストアすることに関わる可能性がある。オペレーティングシステム１８０は、したがって、コンテキスト管理サービスを提供し得る。チャネル状態は、ＯＳ１８０が管理するコンテキストの一部である。
【００２０】
しかしながら、少なくとも１つの実施形態では、ＯＳ１８０は、成果イベントの供給には関与しない。このような実施形態では、プログラムされたシナリオ（すなわち、成果イベントをトリガすべくチャネルにプログラムされているイベントの組み合わせ）を満足させることにより、ハードウェアまたはファームウェア内の成果イベントハンドラを介し供給される一の成果イベントをトリガする。例えば、少なくとも１つの実施形態では、シナリオの満足をトリガする命令は、ハードウェアを介しタグ付けされてよい。このようなタグは、成果イベントを供給するべく処理されることができる。このような処理は、例えば実行資源１０５のマイクロコードロム命令のようなハードウェアまたはファームウェアにおいて生じることもあり得る。成果イベントの制御を転送するこのハードウェアまたはファームウェア機構は、本願明細書中「成果イベントハンドラ」と呼ばれることもある。
【００２１】
制御は、成果イベントハンドラを介し、チャネルサービスハンドラ１８５へと転送される。この方法では、構造上定義されたシナリオの処理は、ＯＳ１８０による介入は最小限でユーザレベルコードにより直接実行されてよい。シナリオ状態の検出および成果イベントの共有（制御転送を含む）は、このような実施形態のＯＳ１８０に対しトランスペアレントである。
【００２２】
しかしながら、少なくとも１つの他の実施形態では、シナリオの満足は、前述のようなハードウェアにより供給される成果イベントをトリガするより、むしろ、内部で生じるソフトウェア割り込みをトリガする可能性がある。このような実施形態では、オペレーティングシステム１８０は、成果イベントソフトウェアの割り込みが生じたとき、チャネルサービスハンドラ１８５を呼び出す。
【００２３】
成果イベントがどのように供給されるかに関わらず（ハードウェア対ソフトウェア）、成果イベントは、ユーザレベルコードにより取り扱われることができる。すなわち、いずれのアプローチ制御がチャネルサービスハンドラ１８５に転送されるにしても、実質的に、制御は、トリガ条件の検出に応答して、ユーザ定義のサービススレッドまたはハンドラに転送されてよい。この制御の転送は、成果イベントが生じたときに実行していた最新の命令ストリームの実行を中断させる。一実施形態において、ユーザ定義のサービススレッド、または、ハンドラは、トリガされるべきシナリオを生じたスレッドを最適化させるルーチンを含んでよい。さらに、一実施形態では、ユーザ定義のサービススレッドまたはハンドラは、リアルタイムでの最適化が実現されるよう、管理されたランタイム環境内でシナリオをトリガさせるユーザレベルのプログラムを最適化するよう用いられてよい。
【００２４】
少なくとも１つの実施形態においてシナリオが満足させられた場合、様々な状態を示すよう１つまたはそれ以上のフラグを設定すること、および／または、成果イベントを生成することを含むいくつかの機能の１つまたはそれ以上が実行されてよい。例えば、データ範囲またはアドレス領域へのアクセスがモニタされる第１のシナリオをトリガすることに応答し、他のシナリオを呼び出すべく、「キャリーフラグ」などのフラグが用いられてよい。一実施形態では、１つ、または、それ以上のチャネルが以下を実行するようプログラムされる。１）キャリーフラグを設定し、成果イベントは生じない。または、２）キャリーフラグを設定し、成果イベントを生ずる。
【００２５】
さらに、一実施形態では、他のタイプのシナリオを実行した結果として起こされる他の動作を意味するよう他のフラグが用いられてよい。例えば、命令ポインタの範囲がすでにアクセスされている第１のシナリオをトリガすることに応答し、他のシナリオを呼び出すべく、「ゼロフラグ」などのフラグが用いられてよい。一実施形態では、１つまたはそれ以上のチャネルが以下を実行するようプログラムされてよい。ゼロフラグを設定し、成果イベントは生じない。または、２）ゼロフラグを設定し、成果イベントを生ずる。同様に、ブランチターゲットアドレスがすでにアクセスされている第１のシナリオをトリガすることに応答し、他のシナリオを呼び出すべく、「オーバーフラグ」などのフラグが設定されてよい。例えば、一実施形態では、１つまたはそれ以上のチャネルが以下を実行するようプログラムされてよい。１）オーバーフローフラグを設定し、成果イベントは生じない。または、２）オーバーフローフラグを設定し、成果イベントを生ずる。
【００２６】
一実施形態では、フラグは、チャネルロジック内、または、チャネルロジックに関連するビット記憶領域として実装されてよい。さらに、対応するイベントが生じた後、適切なフラグを設定すべく各シナリオに関連するチャネルをプログラミングすることにより、組み合わせの論理関数を実装するよう、いかなる数のシナリオが論理的に一緒に構成されてよい。シナリオは、シナリオを正しい順序で呼び出すべく、他のシナリオのフラグをモニタするようプログラムされてよい。
【００２７】
図６は、一実施形態に従う、フラグにより相互に接続される異なるシナリオによりプログラムされる２つのチャネルを示す。図６では、チャネル６０１は、第１のシナリオを実行し、そのシナリオの発生に応答して、チャネル６１０においてプログラムされる第２のシナリオによりモニタされるキャリーフラグ６０５を設定する。結果は、第１および第２のシナリオの一の機能である出力を有する合成シナリオとなる。一実施形態において、第２のシナリオが実行された後、成果フラグ６２０により一の成果イベントに信号が送られる。ハンドラは、２つのシナリオの発生の組み合わせに基づくいくつかの機能を実行するよう設定された成果フラグに応答して実行されてよい。
【００２８】
一実施形態では、プログラムは、特定のシナリオとは読み取りまたは書き込み動作のような特定のメモリアクセスをテストすることであるプログラムにおけるポイントを示すセンチネル命令を含んでよい。一実施形態では、センチネルは、シナリオによりプログラムされるチャネルとは、以降の動作または命令をモニタし始めることであるプログラム順におけるポイントを示す以外の機能を実行しない命令である。他の実施形態では、センチネルは、プログラムがシナリオによりモニタされ始めることであるところを示すことに加えて実行されることになっている他の機能を含んでよい。いくつかの実施形態では、センチネルは、シナリオによりモニタされる同じ命令または複数の命令に含まれてよい。
【００２９】
一実施形態では、センチネル命令は、「ＭＯＤ  ｒ／ｍ」フォーマットを有し得る。「ＭＯＤ」は、ソースアドレスからの修正動作を示し、「ｒ／ｍ」（レジスタ／メモリアドレス）は、例えば、３バイトオペコードにより表される。この例では、センチネルは、宛先アドレスフィールドは含まない。しかしながら、他の実施形態では、センチネルは、宛先アドレスフィールドを含んでもよいし、または、他のフォーマットを有してもよい。センチネルのフォーマット（例えばオペコードなど）は、所属する特定の命令セットアーキテクチャに少なくとも一部基づいてよい。例えば、オペランドは、ｍｏｄ  ｒ／ｍフォーマットにより特定されるようなメモリまたはレジスタからであってよい。
【００３０】
本発明の一実施形態に従いモニタされ得るメモリアクセスを実行する命令シーケンスを以下に示す。
Ｓｅｎｔｉｎｅｌ＜ｍｏｄｅ＞
Ｍｏｖ＜ｄｅｓｔ＞、＜ｓｒｃ＞
【００３１】
上記コードシーケンスでは、センチネル命令の後にメモリアクセス命令が続く。一実施形態では、センチネルは、プロセッサ内のチャネルにプログラムされるシナリオに、メモリアクセス命令は、第１のメモリアドレスまたはアドレス範囲、および、次の命令に関連するデータへのアクセスに対するモニタであることを示す。他の実施形態では、次の命令は、データ範囲が次の命令によりメモリに格納されるかどうかを検出することなど、他の理由でモニタされてよい。
【００３２】
メモリアクセス命令が一のまたは複数のチャネルにプログラムされる条件を満たす場合、成果イベントに応答していくつかの動作を実行すべくハンドラルーチンを呼び出すフォールトのような成果イベントが生じてよい。ハンドラにより実行される動作は、変化し得る。例えば、一実施形態では、ハンドラは、特定のアドレス範囲にアクセスがなされていることをユーザに伝えてよい。他の実施形態では、ハンドラは、成果イベントに応答し、他のプロファイリングまたはユーザコード修正を実行してよく、そのいくつかは、本開示において以下に述べる。成果イベントのトリガ条件を設定すべく、多数のシナリオがチャネルにプログラムされてよい。さらに、いくつかの実施形態では、１つまたはそれ以上のシナリオは、より複雑なシナリオを検出すべく、論理的に鎖で繋がれた１つまたはそれ以上のチャネルにプログラムされることもできる。
【００３３】
一実施形態では、初期化手続きが実行され、ここで、処理ハードウェアにおける１つまたはそれ以上のチャネルがシナリオを検出すべくプログラムされ、ここで第１のセンチネルが検出された場合、ストア命令のような次のメモリアクセス動作のターゲットアドレスがアドレス範囲と比較される。一実施形態では、ストア命令のターゲットアドレスが特定のアドレス範囲内にある場合、ハードウェアフラグまたは他のインジケータは、ストア命令に対応する特定のデータ範囲などの他の条件の発生をモニタするよう他のシナリオに伝えるべく設定されてよい。この例では、第１のシナリオは、成果イベントを生じないであろうし、フラグまたは他のインジケータを設定するだけであり、コードシーケンスは続であろう。
【００３４】
一実施形態では、（上記）第１のシナリオの発生を検出するよう、また、第１のシナリオにおいて検出された命令に対応するデータ値の範囲（例えばデータ値の特定の範囲内にあるストア命令に対応するデータ）を次に検出するよう、第２のシナリオが初期化されてよい。第２のシナリオが満たされる場合、一実施形態では、成果イベントが発生し、ハンドラは、満たされた２つのシナリオに応答していくつかの動作を実行するよう呼び出される。上記例において、第１のシナリオは、アドレス範囲内にあるストア命令のターゲットアドレスを検出するよう、また、それに応答してフラグを設定するよう初期化され、第２のシナリオは、フォールトのような成果がハンドラを呼び出す場合、ストア命令に対応する記憶データが特定の値の範囲内にあるかまたは特定の値に等しいかを決定すべくモニタするよう初期化される。他の実施形態では、一の範囲または特定のメモリ位置に対応するメモリロード動作のようなメモリアクセス動作の他の発生を検出すべく、他のシナリオが初期化されてよい。この方法では、メモリ領域フィルタリングを実行すべく、少なくとも１つの実施形態が用いられてよい。
【００３５】
図２は、本発明の少なくとも１つの実施形態に対応する動作を示すフローチャートである。動作２０１では、第１のセンチネルの発生がモニタされる。第１のセンチネルが検出されない場合、プログラム動作は継続する。第１のセンチネルが検出される場合、動作２０５において、次のメモリアクセス動作が関心のメモリ位置またはメモリ位置の範囲に対応するかどうかが決定される。対応する場合、動作２１０において、第１のシナリオが満たされることを示すようフラグが設定される。一実施形態では、次のメモリアクセス動作は、関心のターゲットアドレス、または、ターゲットアドレスの特定の範囲を有するストア命令であってよい。他の実施形態では、次のメモリアクセス動作は、特定のロードアドレスまたはロードアドレスの範囲に対応するロード命令であってよい。第１のセンチネルが検出される場合、また、第１のシナリオからフラグが設定されていて、メモリアクセス動作に対応するデータが特定の値に等しいかまたは特定の範囲またはデータ値内に収まる場合、そして、動作２１５において、前のシナリオの結果に基づくいかなるシナリオもない場合、動作２２０においてフォールトのような成果が発生し、動作２２５でハンドラが呼び出される。第１のシナリオからのフラグが設定されなかった場合、または、メモリアクセスに対応するデータ値が特定の値または範囲の中にない場合、成果イベントは発生せず、プログラム動作は続行する。
【００３６】
本願明細手中に記載された実施形態は、メモリから／へのロードまたは格納動作よるアクセス、メモリの様々な領域への命令ポインタによるアクセス、および、コードブランチターゲットに対応するメモリ領域へのアクセスなどを含む様々なメモリアクセスに適用されることができる。さらに、少なくとも１つの実施形態は、命令、命令ポインタ、または、ブランチターゲットによりアクセスされるアドレスおよび／またはデータ値の範囲をフィルタすべく用いられることもできる。
【００３７】
上記例においてフォールトのような成果が生じた場合、いかなる数の動作を実行するようハンドラが呼び出されてよい。例えば、一実施形態では、成果イベントを生じたプログラムがリアルタイムで修正できるよう、上記シナリオが満たされたことに応じて様々なプロファイリング動作が実行されてよい。一実施形態では、１つまたはそれ以上のメモリアクセス動作の発生に応じて１つまたはそれ以上のシナリオが満足することにより、メモリ領域にアクセスすることが想定されないプログラムまたは命令によりアクセスされることから様々なメモリ領域を保護するプログラムが呼び出されることもあり得る。
【００３８】
例えば、一実施形態では、上記メモリ領域フィルタリング技術は、ソフトウェアプログラムスレッドがそのヒープキンダーガルテン、スタック、または、他のメモリ領域に割り当てられていないオブジェクトへのアクセスを試みている場合を検出し、さらなるアクセスを防ぐよう用いられることもできる。さらに、一実施形態は、ポインタがスタック外に公開される可能性がない場合、推測でオブジェクトをスタックに割り当てる。これは、スタックアクセス時間を節約しながら、キャッシュスラッシングを防ぐ。あるいは、一実施形態では、スレッドに対するヒープの他の領域におけるガベージコレクションの実行に関わらず、キンダーガルテンへのポインタが維持されて、キンダーガルテンに対しガベージコレクションが実行されるよう、オブジェクトは、スレッド特定ヒープキンダーガルテンに格納されることができる。さらに、特定のスレッドまたは複数のスレッドに対応するキンダーガルテンにアクセスがなされた場合、少なくとも１つの実施形態は、例えば結果としてフォールトのような成果を生じるイベントを取り扱うべくシナリオをトリガしてよい。
【００３９】
一実施形態では、センチネル命令は、メモリへのアクセスを検出し、続いて、フォールトのような成果を生じる１つまたはそれ以上のトリガイベントを定義し得るシナリオをトリガしてよい。少なくとも１つの実施形態では、シナリオは、実際には、合成シナリオを形成するいくつかのトリガ機能に従い論理的に結合される多数のシナリオから構成されることもできる。しかしながら、他の実施形態では、センチネル（または複合センチネル）トリガのシナリオ数が減少するよう、１つまたはそれ以上のシナリオにおいて定義される１つまたはそれ以上のトリガイベントは、センチネル命令、または、論理的に相互接続されるセンチネル命令の組み合わせにおいて定義されてよい。
【００４０】
いくつかの実施形態では、センチネル命令は、メモリ領域へのアクセスだけでなく、他のパラメータを定義すべく用いられることもできる。例えば、一実施形態では、１つのセンチネルは、メモリ領域へのアクセスが他のセンチネルによりモニタされる時間窓を制御することもできる。例えば、第１のセンチネルは、メモリ領域へのアクセスをモニタし始めることを他のセンチネルに示すフラグを設定してよい。第１のセンチネルは、メモリ領域へのアクセスをモニタするのを中断するよう他のセンチネルに示すフラグを後で消去することもできる。
【００４１】
いくつかの実施形態では、センチネルは、メモリ領域に加えて、または、メモリ領域の代わりにモニタする入出力（Ｉ／Ｏ）範囲を定義することもできる。一実施形態では、Ｉ／Ｏの範囲は、アドレス範囲に従いモニタされる一方、他の実施形態では、センチネルは、それぞれ異なるＩ／Ｏに対応するビットのいくつかの組み合わせ（例えば「ビットマップ」）に従いＩ／Ｏの範囲へのアクセスをモニタすることができる。
【００４２】
都合がよいことに、本発明の１つまたはそれ以上の実施形態は、少なくとも抽象的かつ一般的には、特権レベルに従うＯＳカーネルのみが利用できるプロセッサ資源へのオペレーティングシステムアクセス内で稼働するソフトウェアアプリケーションのようなユーザプログラムを実現できる。例えば、一実施形態では、ユーザプログラムは、領域へのメモリアクセスをモニタするべくセンチネルを用い、それに応じて１つの処理アーキテクチャ内の「リング０」における特権付き資源のような、高い特権処理資源に影響を及ぼす動作を実行することができる。他の処理アーキテクチャが資源特権の異なるレベルを定義し、ユーザプログラムがそれらの資源にアクセスできないようにまたはできるようにすべく実施形態を用いてもよい。
【００４３】
一実施形態では、メモリ領域は、データが同時並列のスレッド間で共有されるアプリケーションを含む、本願明細書中に記載される技術に従いフィルタリングされることができる。例えば、一度に１つのスレッドのみが所定のデータオブジェクトにアクセスするよう、データオブジェクトへの相互排除アクセスを実施すべく、アプリケーション中で少なくとも１つの実施形態が用いられてよい。データオブジェクトへの相互排除アクセスを維持することは、パフォーマンスオーバーヘッドを招く可能性もあるので、少なくとも１つの実施形態では、データオブジェクトがただ１つのスレッドによりアクセスされるメモリ領域に分類されるようにする。さらに、他のスレッドからのアクセスは、少なくとも一つの実施形態においてモニタされることにより、データオブジェクトへのアクセス間での相互排除を確実にする。
【００４４】
一実施形態では、メモリ領域は、保護された、または、「ロックされていない」データへのアクセスを防ぐべく、本願明細書中に記載される技術に従い、フィルタリングされてよい。例えば、メモリに格納されるあるデータが特定のスレッドに対し指定される一方で、他のデータが多数の異なるスレッドにより用いられてよい。したがって、本発明の少なくとも１つの実施形態は、特定のスレッドに対してのみ割り当てられるデータへのアクセスを検出し、未許可のスレッドによるこの「ロックされた」データへのアクセスを防ぐこともできる。反対に、本発明の複数の実施形態は、特定のスレッド、または、「ロックされていない」データ専用でない可能性があるデータへの多数のスレッドによるアクセスを許容する。この例では、オブジェクトが「スレッド−ローカル」メモリ空間として指定されるメモリ空間に格納されたとき、スレッドは、コードのロックがかかっていないバージョンを使用することを許可され、その一方で、特定の状況下では、スレッドは、他のメモリ空間におけるデータにアクセスするよう、コードのロックがかかったバージョンを使用することを許可されるだけであってよい。
【００４５】
本発明の実施形態は、他の用途にも同様に用いられることができる。例えばセキュリティの領域では、少なくとも１つの実施形態は、メモリアクセスをモニタし、ユーザがリアルタイムでソフトウェアにおける様々なセキュリティパラメータを調整できるようハンドラを呼び出すべく用いられてよい。具体的には、少なくとも１つの実施形態は、信頼できる、または、機械的に検証されたコードが同じプロセス内の危険なエージェントにより変更されることを防ぐよう、プライベートデータ構造が同じプロセス内の未許可のエージェントに閲覧されるのを防ぐよう、データ構造が同じプロセス内の未許可のエージェントにより変更されることを防ぐよう、あるいは、認可されたコードがいかなるパフォーマンスオーバーヘッドもなく保護された構造にアクセスできるように用いられることができる。
【００４６】
一実施形態では、様々なプログラミング言語において認識されるようなコードオブジェクトへのアクセスは、特に、アクセスが対応するものの外側のヒープまたはスタックから／へのデータをロードまたは格納すべくアクセスが試みられる場合にモニタされかつ検出されてよい。例えば、第１のチャネルは、シナリオによりプログラムされることにより、オブジェクトロードのアドレス（ｘ）が、オブジェクトロードに割り当てられるグローバルヒープ範囲（ｒ１）にも、オブジェクトロードに割り当てられるスレッド特定ヒープ範囲（ｒ２）にもないかどうか決定してよい。オブジェクトロードのアドレスを確認するシナリオをトリガすべく、第１のセンチネル命令は、プログラム順でオブジェクトロードに先立ち用いられてよい。
【００４７】
オブジェクト記憶動作の場合、第２のセンチネルは、第２のチャネルにプログラムされるシナリオをトリガするよう用いられてよく、その結果、オブジェクト記憶のアドレス（ｙ）がｒ２に対応せず、今のところオブジェクト記憶のデータ（ｚ）がｒ２に記憶されているかどうかが決定される。もしそうであれば、オブジェクト記憶は、それが対応するローカルヒープの外側にデータを公開しようとしていると仮定してよい。
【００４８】
図７は、一実施形態に従うフローチャートを示す。図７に示すように、動作７００において、モニタされるべきプログラム条件は、決定される。プログラム命令は、動作７０５において実行される。動作７１０において、メートルまたはミクロアーキテクチャイベントがモニタされてよい。図７に示すように、トリガが発生しなければ、方法は、動作７０５において再開されてよい。そうでなければ、動作７１５において（例えば、トリガされた場合）、処理は、検出された条件を生じる処理に合せて調整するよう中断されてよい。さらに、動作７１５において、制御フローは、異なるプログラム部分に転送されてよい。
【００４９】
図８は、オブジェクトロードおよびオブジェクト記憶がそれらの対応するソフトウェアヒープの外側のメモリ領域にアクセスを試みたかどうかを決定すべくモニタされる、一実施形態に用いられる動作を示すフローチャートである。動作８０１において、第１のセンチネルが検出された場合、動作８０５において、第１のシナリオは、次のオブジェクトロードのアドレス（ｘ）がオブジェクトロードに割り当てられたグローバルヒープ範囲（ｒ１）内にも、スレッド特定ヒープ範囲（ｒ２）内にもないかどうかをテストする。もしそうであれば、動作８１０において、オブジェクトロードを再発行する、および／または、キャンセルするようハンドラを呼び出す成果イベントが生じてよい。もし、そうでない場合、動作８１５において、第２のセンチネルが検出されたかどうかが決定され、決定された場合、動作８２０において、オブジェクト記憶のアドレス（ｙ）がｒ２に対応せず、オブジェクト記憶のデータ（ｚ）が未だｒ２に格納されているかどうかが決定される。格納されていれば、動作８２５において、オブジェクト記憶を再発行および／またはキャンセルすべくハンドラを呼び出す成果イベントが生じる。
【００５０】
管理されたランタイム環境で使用され得る上述の用途に加え、本発明の複数の実施形態は、管理されたランタイム環境に関わりなく他の方法において用いられることができる。例えば、一実施形態において、上述のメモリ領域フィルタリング技術は、スレッド特定オブジェクトへのアクセスからの検出およびリカバリ、あるいは、メモリ領域またはメモリタイプの間での過干渉性プロトコルの実施のために用いられてよい。本願明細書中に記載された実施形態を多数の他の用途に利用できる。
【００５１】
図３は、一実施形態に従う、処理リソース内で発生するイベントをモニタし、アーキテクチャ内で稼働するユーザレベルのソフトウェアプログラムを向上させるかまたは最適化させるべくモニタされるイベントを使用するシステムを示す。特に、図３は、アプリケーションのようなユーザレベルのソフトウェアプログラムが展開され得る管理されたランタイム環境３０１を示す。他の実施形態では、環境３０１は、管理されないランタイム環境であってよい。一実施形態では、ソフトウェアプログラムは、マルチコアプロセッサおよび／またはマルチプロセッサなどの複数の処理リソースを含み得るＣＰＵ３２０により実行される。チャネル３１５は、コードホットスポットのような、ＣＰＵの特定の性能特性の検出において役立つイベントおよびシナリオをモニタすべく、プロファイリング・アプリケーション・プログラミング・インタフェース（ＡＰＩ）を介しプログラムされてよい。コードホットスポットのような性能特性は、チャネルにプログラムされるイベントおよびシナリオの結果を翻訳することにより、ロジックまたはソフトウェア３０７により検出されることができる。さらに、チャネルにプログラムされる成果動作も翻訳され、それに応答して検出コード／ロジック３０７により正しいハンドラが呼び出される。
【００５２】
検出ロジック／コード３０７により翻訳されかつ検出されるパフォーマンス情報は、管理されたランタイム環境内のアプリケーションのようなユーザコードを向上または最適化すべく、プロフィール法生成コードまたはロジック３０５により特定の動作または方法に翻訳され得るプロフィール生成コードまたはロジック３０３によりモニタされる特性のプロフィールを生成するよう用いられてよい。さらに、一実施形態において、図３のパフォーマンスモニタアーキテクチャにより課されるオーバーヘッドがほとんどまたは全く検出されずに、リアルタイムかつスレッドごとにユーザコードへの改善がなされてよい。他の実施形態では、ＣＰＵ内のパフォーマンス情報を検出し、それに応答してユーザコードを最適化するよう要求される情報を生成すべく、他の段階または機能単位が用いられてよい。
【００５３】
図４は、本発明の一実施形態が用いられ得るフロントサイドバス（ＦＳＢ）コンピュータシステムを示す。プロセッサ４０５は、レベルワン（Ｌ１）キャッシュメモリ４１０からメインメモリ４１５までのデータにアクセスする。本発明の他の実施形態では、キャッシュメモリは、レベルツー（Ｌ２）キャッシュ、または、コンピュータシステムのメモリ階層内の他のメモリであってよい。さらに、いくつかの実施形態では、図４のコンピュータシステムは、Ｌ１キャッシュおよびＬ２キャッシュをどちらも含んでよい。
【００５４】
図４のプロセッサ内にマシンステートの記憶領域４０６が示されている。一実施形態では、記憶領域は、一組のレジスタであってよく、一方、他の実施形態では、記憶領域は、他の記憶構造であってよい。また、図４には、一実施形態に従うセーブエリアセグメントの記憶領域４０７も示される。他の実施形態では、セーブエリアセグメントは、他のデバイスまたはメモリ構造内にあってよい。プロセッサは、いかなる数の処理コアを有することもできる。本発明の他の実施形態は、しかしながら、個別のバスエージェントなどのシステム内の他のデバイス内に実装されるか、または、ハードウェア、ソフトウェア、または、そのいくつかの組み合わせ全体にわたり分散されてよい。
【００５５】
メインメモリは、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、ハードディスクドライブ（ＨＤＤ）４２０、または、様々な記憶デバイスおよび技術を含むネットワークインターフェース４３０を介し、コンピュータシステムから離れて位置するメモリソースのような様々なメモリソースに実装されることができる。キャッシュメモリは、プロセッサ内に配置されるか、または、プロセッサのローカルバス４０７上など、プロセッサに極めて接近して配置されるかのいずれかであってよい。
【００５６】
さらに、キャッシュメモリは、６トランジスタ（６Ｔ）セルなどの比較的高速なメモリセル、または、ほぼ同じかそれより高速なアクセス速度の他のメモリセルを含み得る。図４のコンピュータシステムは、ポイントツーポイント（ＰｔＰ）ネットワークにおける各エージェント専用のバス信号を介し通信するマイクロプロセッサのようなバスエージェントのＰｔＰネットワークであってよい。図５は、ポイントツーポイント（ＰｔＰ）構成に配列されるコンピュータシステムを示す。特に、図５は、プロセッサ、メモリ、および、入出力デバイスが多数のポイントツーポイントインターフェースにより相互接続されるシステムを示す。
【００５７】
図５のシステムは、いくつかのプロセッサを含んでもよく、説明をわかりやすくするため、そのうちの２つ、プロセッサ５７０および５８０のみが示される。プロセッサ５７０および５８０は、メモリ２２および２４を接続するローカルメモリコントローラハブ（ＭＣＨ）５７２および５８２をそれぞれ含む。プロセッサ５７０および５８０は、ＰｔＰインターフェース回路５７８および５８８を用い、ポイントツーポイント（ＰｔＰ）インターフェース５５０を介しデータを交換してよい。プロセッサ５７０および５８０は、ポイントツーポイントインターフェース回路５７６、５９４、５８６、および５９８を用い、個別のＰｔＰインターフェース５５２および５５４を介しデータとチップセット５９０とをそれぞれ交換してよい。チップセット５９０は、高性能グラフィックインターフェース５３９を介し、データと高性能グラフィック回路５３８とを交換することもできる。本発明の実施形態は、いかなる数の処理コアを有する任意のプロセッサ内、または、図５の各ＰｔＰバスエージェント内に配置されてもよい
【００５８】
しかしながら、本発明の他の実施形態は、図５のシステム内の他の回路、論理演算装置、または、デバイス内に存在してもよい。さらに、本発明の他の実施形態は、図５に示されるいくつかの回路、論理演算装置、または、デバイスのすべてにわたり分散されてもよい。
【００５９】
本願明細書中で言及されるプロセッサ、または、本発明の一実施形態に従い設計される他のいかなる構成要素は、作成、シミュレーション、製造までの様々な段階において設計されてよい。設計を表すデータは、設計を多くの方法で表してよい。第１に、シミュレーションに役立つように、ハードウェアは、ハードウェア記述言語または他の関数的記述言語を用いて表わされてよい。加えて、または、代わりに、論理および／またはトランジスタゲートによる回路レベルモデルが設計プロセスのいくつかの段階で生成されてよい。さらに、ほとんどの設計は、ある段階において、様々なデバイスの物理的配置を表すデータによりモデル化され得るレベルに到達する。従来の半導体製造技術が用いられる場合、デバイスの配置モデルを表すデータは、集積回路を製造するのに用いられるマスクの異なるマスク層における様々な特徴の有無を特定するデータであってよい。
【００６０】
設計のいかなる表現においても、データは、機械可読媒体の任意の形式で格納されてよい。このような情報を伝送すべく変調あるいは生成される光または電波、メモリ、あるいは、ディスクのような磁気または光記憶媒体は、機械可読媒体であってよい。これらの媒体のいずれも、設計、あるいは、エラーリカバリルーチンにおける命令などの、本発明の一実施形態に用いられる他の情報を有するかあるいは示してよい。情報を示すかまたは有する電子キャリアが伝送されると、電気信号のコピー、バッファリング、または、再送が実行される範囲で新たなコピーがなされる。したがって、通信プロバイダまたはネットワークプロバイダの動作は、本発明の技術を実施するキャリアのような物品のコピーを作成することであってよい。
【００６１】
このように、ロード、記憶などのメモリアクセスを操る技術が開示される。これまで特定の実施形態が添付の図面を示しながら記載されてきたが、このような実施形態は例示に過ぎず、本発明の範囲を制限しないこと、そして、本発明は、特定の構造および配置に限定されず、様々な変更が生じてよいことは、本発明を研究する当業者にとり、明らかであろう。成長が急速であり、さらなる発展が予見し難いこのような技術の領域では、本発明の開示の趣旨および添付の請求項の範囲を逸脱せずに技術的発展を実現することにより容易とされる配置および詳細の修正も直ちに可能である。
【００６２】
本発明の１つまたはそれ以上の実施形態の様々な側面が記載され、説明されるか、さらもなくば、本発明の１つまたはそれ以上の実施形態が用いられ得るプロセッサまたはコンピュータシステムの広告において言及されている。このような広告は、新聞、雑誌、ビルボード、または、他の紙あるいは有形媒体を含み得るが、これに限定されない。特に、ウェブサイトまたは「ポップアップ」を作成するためにプログラムを主催しているサーバがアメリカ合衆国またはその領土内にあるにせよ無しにせよ、本発明の１つまたはそれ以上の実施形態の様々な側面は、ウェブサイト、「ポップアップ」広告または他のウェブベースの媒体を介しインターネット上で広告されることができる。
【図面の簡単な説明】
【００６３】
添付の図面によって本発明を例示するが、これに限定されない。
【００６４】
【図１】プロセッサ内の様々なイベントをモニタするシステムの一実施形態を示す。
【００６５】
【図２】本発明の少なくとも１つの実施形態の様々な側面を示すフローチャートである。
【００６６】
【図３】１つの実施形態が用いられ得る管理されたランタイム環境を示す。
【００６７】
【図４】少なくとも１つの実施形態が用いられ得る共有バスシステムを示す。
【００６８】
【図５】本発明の少なくとも１つの実施形態が用いられ得るポイント・ツー・ポイントバスを示す。
【００６９】
【図６】１つの実施形態に従い、１つまたはそれ以上のシナリオがプログラムされる多数のチャネルを示す。
【００７０】
【図７】１つの実施形態に従う、１つまたはそれ以上のシナリオがメモリ領域へのアクセスをモニタできるようにする際に用いられる動作を示すフローチャートである。
【００７１】
【図８】１つの実施形態で用いられる動作を示すフローチャートである。
【図１】
2008071339.tif 000003
【図２】
2008071339.tif 000004
【図３】
2008071339.tif 000005
【図４】
2008071339.tif 000006
【図５】
2008071339.tif 000007
【図６】
2008071339.tif 000008
【図７】
2008071339.tif 000009
【図８】
2008071339.tif 000010
【外国語明細書】
2008071339.tif 000011
2008071339.tif 000012
2008071339.tif 000013
2008071339.tif 000014
2008071339.tif 000015
2008071339.tif 000016
2008071339.tif 000017
2008071339.tif 000018
2008071339.tif 000019
2008071339.tif 000020
2008071339.tif 000021
2008071339.tif 000022
2008071339.tif 000023
2008071339.tif 000024
2008071339.tif 000025
2008071339.tif 000026
2008071339.tif 000027
2008071339.tif 000028
2008071339.tif 000029
2008071339.tif 000030
2008071339.tif 000031
2008071339.tif 000032
2008071339.tif 000033
2008071339.tif 000034
2008071339.tif 000035
2008071339.tif 000036
2008071339.tif 000037
2008071339.tif 000038
2008071339.tif 000039
2008071339.tif 000040
2008071339.tif 000041
2008071339.tif 000042
2008071339.tif 000043
2008071339.tif 000044
2008071339.tif 000045
2008071339.tif 000046
2008071339.tif 000047
2008071339.tif 000048
2008071339.tif 000049
2008071339.tif 000050