"ロック命令が競合するかに関する予測を発生する予測手段と、前記予測が前記ロック命令が競合しないことを示すとき、前記ロック命令に対応するloadwithlockマイクロ動作を有するマイクロ動作のセットを投機的に発生するスケジュール手段と、投機的に発生されたloadwithlockマイクロ動作がリタイアとなる準備がされたとき、storeunlockマイクロ動作を発生する手段と、前記storeunlockマイクロ動作がリタイアとなる準備がされたとき、前記投機的に発生されたloadwithlockマイクロ動作をリタイアさせる手段と、競合することの示唆が生じたかを判定するモニタ手段と、前記競合することの示唆は、unlockマイクロ動作によるストア動作についてキャッシュミスが生じたときに生じ、前記モニタ手段が前記競合することの示唆が生じたことを判定したとき、前記ロック命令の実行を再開し、ストアバッファに存在する全てのリタイアされていない命令について前記ストアバッファがフラッシュされた後に前記ロック命令の実行を非投機的に継続する実行手段と、を有することを特徴とするアウトオブオーダ実行プロセッサ。前記競合することの示唆は割り込みである、請求項1記載のプロセッサ。前記モニタ手段は、前記unlockマイクロ動作によるストア動作が最も古いリタイアされていないstoreマイクロ動作となる前に、前記競合することの示唆を判定する、請求項1記載のプロセッサ。前記モニタ手段は、前記unlockマイクロ動作によるストア動作の結果がグローバルに観察可能になる前に、前記競合することの示唆を判定する、請求項1記載のプロセッサ。前記ロック命令を前記loadwithoutlockマイクロ動作にデコードするデコーダを更に有する、請求項1記載のプロセッサ。アウトオブオーダ実行プロセッサでロック命令を実行する方法であって、当該方法は、ロック命令が競合するかに関して予測手段が予測するステップと、前記予測が前記ロック命令が競合しないことを示すとき、前記ロック命令に対応するloadwithlockマイクロ動作を有するマイクロ動作のセットをスケジュール手段が投機的に発生するステップと、投機的に発生されたloadwithlockマイクロ動作がリタイアとなる準備がされたとき、storeunlockマイクロ動作を発生手段が発生するステップと、前記storeunlockマイクロ動作がリタイアとなる準備がされたとき、前記投機的に発生されたloadwithlockマイクロ動作をリタイア手段がリタイアさせるステップと、競合することの示唆をモニタ手段によりモニタするステップと、前記競合することの示唆は、unlockマイクロ動作によるストア動作についてキャッシュミスが生じたときに生じ、前記競合することの示唆が生じたことを前記モニタ手段が検出したとき、実行手段が、前記ロック命令の実行を再開し、ストアバッファに存在する全てのリタイアされていない命令について前記ストアバッファがフラッシュされた後に前記ロック命令の実行を非投機的に継続するステップと、を含むことを特徴とする方法。前記競合することの示唆は割り込みである、請求項6記載の方法。前記発生するステップは、loadwithoutlockマイクロ動作をバッファから送出するステップを含む、請求項6記載の方法。前記loadwithoutlockマイクロ動作は、loadwithlockマイクロ動作として前記バッファに記憶される、請求項8記載の方法。前記発生するステップは、前記ロック命令からの前記loadwithoutlockマイクロ命令をデコードするステップを含む、請求項9記載の方法。アウトオブオーダ実行プロセッサでロック命令を実行する装置であって、当該装置は、ロック命令が競合するかを予測する手段と、前記予測手段が前記ロック命令が競合しないことを予測したとき、前記ロック命令に対応するloadwithlockマイクロ動作を発生する手段と、投機的に発生されたloadwithlockマイクロ動作がリタイアとなる準備がされたとき、storeunlockマイクロ動作を発生する手段と、前記storeunlockマイクロ動作がリタイアとなる準備がされたとき、前記投機的に発生されたloadwithlockマイクロ動作をリタイアさせる手段と、競合することの示唆をモニタする手段と、前記競合することの示唆は、unlockマイクロ動作によるストア動作についてキャッシュミスが生じたときに生じ、前記モニタ手段が前記競合することの示唆を検出したとき、前記ロック命令の実行を再開し、ストアバッファに存在する全てのリタイアされていない命令について前記ストアバッファがフラッシュされた後に前記ロック命令の実行を非投機的に継続する手段と、を備えることを特徴とする装置。前記発生手段は、バッファからloadwithoutlockマイクロ動作を送出する手段を含む、請求項11記載の装置。前記loadwithoutlockマイクロ動作は、前記バッファに前記loadwithlockマイクロ動作として記憶される、請求項12記載の装置。前記発生手段は、前記ロック命令から前記loadwithoutlockマイクロ動作をデコードする手段を含む、請求項13記載の装置。本発明は、例示を通して説明され、添付図面の図において制限されるものではない。図において、同じ参照符号は同様のエレメントを参照する。以下の説明は、ロック命令のアウトオブオーダ実行を可能にする記述を説明するものであり、この技術は、それらのロック命令が競合しないときに利益を与えるものである。ロック命令は、1を超えるプロセッサ、又は同じプロセッサにおける1を超えるスレッドが本質的に同時にメモリにおける同じロケーションをロックするのを試みたときに競合される、といわれる。ロック命令は、別のプロセッサ、又は同じプロセッサにおける別のスレッドが別のプロセッサ又はスレッドによりロックされたメモリにおけるロケーションにアクセスするのを試みたときに競合されるとして扱われる。これは、他のプロセッサ又は他のスレッドのメモリアクセスがロックアテンプト又は単なるシンプルメモリアクセスであるかを判定するのが可能ではないためである。以下の記載では、ロジックインプルメンテーション、ソフトウェアモジュールアロケーション、バス及び他のインタフェースシグナリング技術のような様々な特定の詳細、及び動作の詳細は、本発明の更に全体的な理解を提供するために述べられる。しかし、当業者によれば、本発明はかかる特定の詳細なしに実施さてる場合があることを理解されるであろう。他の例では、制御構造、ゲートレベル回路、フルソフトウェア命令シーケンスは、本発明を曖昧にすることのないように、詳細に示されない。当業者であれば、包含される記載により、過度の実験なしに適切な機能を実現することができる。所定の実施の形態では、本発明は、Intel登録商標社により製造されるプロセッサのようなPentium登録商標コンパチブルプロセッサ用の定量化した属性値を予測する形式で開示される。しかし、本発明は、アウトオブオーダで命令を実行する、Itaniumプロセッサファミリコンパチブルプロセッサ、又はX-Scale登録商標ファミリコンパチブルプロセッサのような他の種類のプロセッサで実施される場合がある。図1を参照して、1実施の形態に係る、パイプラインの終了近くで動作するロック競合予測器を示す、プロセッサ100及びその実行パイプラインの概念図が示されている。図1の実施の形態では、フロントエンドステージ102、デコードステージ104、トレースキャッシュ106、リオーダバッファROB108、実行ステージ112及びリタイアメントステージ114が示されている。他の実施の形態では、他のステージは、パイプラインで使用され、ステージのオーダリングが変化する場合がある。マクロ命令は、フロントエンドステージ102によりレベル1L1のキャッシュ124から引き出され、デコーダステージ104によりマイクロ動作の対応するセットにデコードされる。これらのマイクロ動作のセットは、トレースキャッシュ106におけるトレースの形式で記憶される。他の実施の形態では、トレースは、別の形式のバッファに記憶される。更なる実施の形態では、マイクロ動作のセットは、トレースの形式ではなく、他の形式のバッファに記憶される。マイクロ動作のセットが実行の準備がされたとき、ROB108にロードされる。ROB108は、一連のストレージロケーション150~166を含み、それぞれは、マイクロ動作、そのソース及び目的地レジスタのアイデンティフィケーション、及び利用可能なときには実行結果を含む。他の実施の形態では、異なるストレージロケーションの番号が提供され、ストレージロケーションのコンテンツの正確なフォーマットが異なる場合がある。スケジューラ110は、ストレージロケーション150~166におけるどのマイクロ動作が、利用可能な、すなわち実行を可能にするそれらのソースオペランドの値を有するか、を判定するために使用される。1実施の形態では、スケジューラ110は、トレージロケーション150~166におけるそれぞれのマイクロ動作のソースレジスタの状態を調べる。次いで、スケジューラ110は、それらのマイクロ動作を発生し、そのソースレジスタは、書かれたソフトウェアでのそれらの順序すなわち、潜在的にアウトオブオーダに関わらず、実行ステージ112における実行のための有効データを含む。かかるマイクロ動作の実行からの結果は、対応するストレージロケーションにおける実行結果として一時的に記憶される。ストレージロケーション150~166のそれぞれは、関連される終了ビット130~146を有し、このビットは、対応するマイクロ動作が実行を完了し、実行からの結果が対応するストレージロケーション150~166における実行結果として一時的に記憶されることを示す。1実施の形態では、終了ビット130~146は、プログラムオーダーで前の命令に対応するマイクロ動作がひとたびリタイアされると、対応するマイクロ動作がリタイアの準備がされることを示す。マクロ命令から生成されたマイクロ動作は、オリジナルのプログラムオーダーでなお使われないリタイアメントの準備がされたマイクロ動作は、リタイアメントステージ114に送出される場合がある。メモリの参照を発するマイクロ動作は、メモリオーダバッファMOB122に配置される。MOB122は、幾つかのペンディングになっているメモリ参照の動作を記憶する。図1のプロセッサは、ロック命令を実行可能である。1つのロック命令の形式は、プロセッサがロックされているメモリで動作を実行している間、他のプロセッサ、又はマルチスレッドプロセッサにおける他のスレッドが所与のメモリロケーション又はキャッシュにアクセスするのを妨げる。実際に、命令を実行している間、これは、他のアクセスを妨げるために特定のメモリ位置又はキャッシュラインをロックする。別の観点は、このロッキングの形式により、命令が特定のメモリロケーション又はキャッシュラインをアトミックに変更する文献では、アトミックな読取り、変更、書込み命令atomicreadmodifywriteinstructionと呼ぶことがあるのを可能にすることである。対照的に、これらロッキング命令は、拡張された数の命令にわたり他のメモリロケーションを意味的にロックするためのソフトウェアセマフォとして使用される。これら拡張された数の命令は、クリティカルセクションとして文献において参照される。1実施の形態では、ロック命令は、通常の命令に添付されるロックプレフィックスとして実現される。Pentium登録商標コンパチブルアーキテクチャでは、ロックプレフィックスは、目的地オペランドがメモリオペランドである、以下の種類を含む命令に付加される。ADDadd、ADCaddwithcarry、ANDlogicaland、BTCbittestandcomplement、BTRbittestandreset、BTSbittestandset、CMPXCHGcompareandexchange、CMPXCH8Bcompareandexchange8bytes、DECdecrement、INCincrement、NEGtwo’scomplementnegation、NOTone’scomplementnegation、ORlogicalor、SBBintegersubtractionwithborrow、SUBsubtract、XORexclusiveor、XADDexchangeandadd、及びXCHGexchangememorywithregister。他のプロセッサ又はスレッドが、これらの命令により規定される読取り変更書込み機能の部分間の目的地のメモリロケーションの値を変えないことが絶対に必要なとき、ロックプレフィックスは、1つのシングルパートに見えるその部分をアトミックにするために使用される。1実施の形態では、ロック命令は、loadwithstoreintentlockマイクロ動作及びstoreunlockマイクロ動作を含む、幾つかのマイクロ動作にデコードされる。他のマイクロ動作は、先のパラグラフで記載された様々な命令について存在する。議論の容易さのため、loadwithstoreintentlockマイクロ動作をloadwithlockマイクロ動作として示し、それをloadlockで書くことにする。loadlockマイクロ動作は、実行ユニット112に入るとき、ロック状態を始める。storeunlockマイクロ動作は、MOB122から発せられるときロック状態を除く。先の実施の形態は、2つの条件が満たされるまでloadlockマイクロ動作を発しない。第一の条件は、オリジナルプログラムオーダーにおける全ての前の命令が実行され、リタイアされている必要があることである。言い換えれば、loadlockマイクロ命令は、ROB108において最も古いマイクロ命令である。第二の条件は、MOB122における前にペンディングにされているstoreマイクロ動作が終了されている必要があり、MOB122と関連付けされたストアバッファがドレインしている必要がある言い換えれば、全てのストア動作は、それらのデータをメモリシステムに書き込んでいる必要があることである。これら2つの条件は、アウトオブオーダ実行と互換性がない。ロック命令は厳密に必須ではないことが多いことが知られている。かなりのパーセンテージのケースでは、メモリロケーション又はキャッシュラインは、ロックの期間で競合されない状態のままであり、すなわち他のプロセッサ又はスレッドは、ロックの下で特定のメモリロケーション又はキャッシュラインにアクセスするのを試みることはなく、他のプロセッサのイベントは、そのメモリロケーションの保全性に脅威を与えない。プロセッサ100は、ロック競合予測器118及びモニタロジック116を更に含む。ロック競合予測器118は、特定のロック命令がロック期間の間に競合されるか否かに関する予測を発する。予測が、特定のロック命令が実際に競合されることを示す場合、ロック命令のための前の実行方法に従う。しかし、予測が、特定のロック命令が実際に競合しないことを示す場合、投機的に発せられた通常のloadマイクロ動作に進み、いずれか競合することの示唆が生じるかを判定するためにモニタロジック116で関与されるメモリロケーションをモニタすることが可能である。したがって、アトミック性atomicityを強制するために命令の読取り変更書込み部分を実行しつつ、メモリロケーションを実際にロックしないが、代わりに、別のプロセッサ又はスレッドがアトミック性の知覚を破壊したことを示す状態を監視しつつ、その部分を個別に実行する。かかる競合することの示唆は、ロード命令のターゲットアドレスを含むキャッシュラインへのスヌープsnoop、割り込み、又はその後のstoreunlockマイクロ動作がキャッシュで抜けた場合を含む。モニタロジック116は、幾つかの実施の形態では、プロセッサに存在する幾つかの既存のロジック信号を監視する。競合しない示唆が等価なロック条件を表す時間の間に生じない場合、投機的に発せられた通常のloadマイクロ動作は、正常にリタイアとなる。これは、ロック命令のアウトオブオーダ実行を可能にし、プロセッサパフォーマンスをエンハンスする。しかし、競合することの示唆が生じた場合、パイプラインがフラッシュされ、ロック命令が再び実行される必要がある。この際実行の間、ロック命令は、フォワードプログレスにおいて支援するために従来の実現におけるように非投機的に実行される。別の実施の形態では、プロセッサは、数回にわたり投機的にロック命令を実行するのを試み、非投機的に命令を実行する前にそれぞれで競合を検出する。従来の実現におけるようにプロセッサが非投機的に命令を実行するとき、信号をアサートするか、又は他のスレッド又はプロセッサが問題のあるメモリロケーションにアクセスするのを妨げる手順を採用する。これは、プロセッサが実行を終了し、その後の再始動なしにロック命令をリタイアとすることを保証する。固定された数の投機的な実行の試みの後、プロセッサが非投機的な実行に戻らない場合、プロセッサがそれぞれの実行で競合することの示唆に遭遇し、ロック命令を繰り返し強制的に再始動され、フォワードプログレスを禁止するケースである。ロック競合予測器118は、ローカル予測器及び代替的にグローバル予測器の回路及び理論を含めて、様々な公知のブランチ予測器のうちの1つの動作の回路及び理論を利用する。1実施の形態では、ロック競合予測器118は、競合することが過去において発見されているそれらロック命令のリニアな命令ポインタを記憶するためのテーブルである。1実施の形態では、テーブルは、プロセッサの初期化に応じて空にされ、全てのロック命令は、競合しないことが想定される。所与のロック命令の予測が誤っていることが発見されたとき、そのロック命令のリニアな命令ポインタは、将来の使用のためにテーブルに書き込まれる。ロック競合予測器118が所与のロック命令が競合しないことを予測したとき、スケジューラ110は、ROB108から対応するloadlockマイクロ動作を投機的に発生する。1実施の形態では、対応するloadlockマイクロ動作は、投機的なloadwithoutlockマイクロ動作としてROB108から発せられる。いずれかの種類のloadマイクロ動作は、幾つかの実施の形態では、modifiedexclusivesharedinvalidMESTキャッシュコヒーレンシープロトコルを使用したキャッシュにおいて排他的E状態に遷移するキャッシュラインを始動する、対応するキャッシュラインのオーナシップの要求を発生する。loadマイクロ動作が最も低いキャッシュを失った場合、フィルバッファが割り当てられ、ロードはMOB122におけるペンディング動作としてスリープする。loadlockマイクロ動作がキャッシュでヒットした場合、又は眠っているloadlockマイクロ動作が対応するキャッシュラインフィルによりMOB122で目覚めたとき、以下が行われる。幾つかの実施の形態では、ロック変数を含むキャッシュラインがloadlockの実行とstoreunlockのリタイアメントとの間で置き換えられるのを防止することが必要である。1実施の形態では、置き換えを防止するため、更にメモリのオーダリングプロトコルにより必要とされるときにスヌープするのを可能にするため、キャッシュラインのタグにビットを設定することができる。しかし、これら投機的なloadlockのセットについて古いロードの前に実行することができ、したがって、キャッシュセットにおける方法の全てが消費される。これは、次のレベルのキャッシュからそのデータを満たすため、古いロードのセットにおける方法を残さず、古いロードのリタイアメントは、終了することができないので防止される。投機的なloadlockは、最も古くないのでリタイアすることができず、したがってヘッドロックを有することになる。このシナリオを防止するため、loadlockは、古い命令について少なくとも幾つかを利用可能なままにするため、セットにおいて十分なロックされていない方法が存在する場合にのみ投機的に発する。十分にロックされていない方法が存在しない場合、従来の実現におけるように全ての前の命令がリタイアとなったときにのみ、loadlockが発生される。1実施の形態では、発すべき投機的なloadlockについて少なくとも2つの利用可能な方法が存在する必要がある。loadlockマイクロ動作又はloadwithoutlockマイクロ動作がROB108から発せられたかは、対応するstoreunlockマイクロ動作及び何れか介入するマイクロ動作が、ロードマイクロ動作の前後のいずれかでROB108から発する。しかし、storeunlockマイクロ動作がロードマイクロ動作までにMOB122でペンディングされた状態に留まり、何れか介入するマイクロ動作は、リタイアメントのポイントにあり、そのポイントで、MOB122がstoreunlockマイクロ動作を発する。ロードマイクロ動作及び対応するstoreunlockマイクロ動作は、競合する示唆が発生したことをモニタロジック116が判定した場合にリタイアすることが許可されない。これは、ロック命令が競合しないという予測が誤っていることを意味する。この競合された示唆が考慮される時間は、異なる実施の形態で変わる場合がある。1実施の形態では、この時間は、storeunlockに対応するメモリストアがグローバルに観察可能となるときに終了する。ここで、グローバルに観察可能とは、キャッシュコヒーレンシードメインにおける全てのエージェントがこのメモリロケーションの最後の値を見ることを意味する。別の実施の形態では、この時間は、storeunlockがMOB122で最も古いストアとなったときに終了する。この第二の実施の形態では、実際のロック条件は、storeunlockがMOB122における最も古いストアとなった時間とstoreunlockがグローバルに観察可能になった時間との間の短い期間について必要とされる。前の実現では、storeunlockマイクロ動作は、メモリストアがグローバルに観察可能となったとき、ROB108における最も古いリタイアされていないマイクロ動作である。しかし、1実施の形態では、storeunlockマイクロ動作は、メモリストアがグローバルに観察可能となったとき、ROB108における最も古いリタイアとなっていないマイクロ動作ではない。これは、メモリストアがグローバルに観察可能となるまで、ロックを持つか、ロックを持たないloadマイクロ動作がリタイアとなっていないためである。したがって、ロードは、コンピュータにおいて最も古いリタイアとなっていないマイクロ動作である。別の実施の形態では、ロック競合予測器118が省略される。代わりに、ロック命令が競合しない全てのケースで想定される。対応するロードマイクロ動作は、それぞれのケースにおいて、はじめに投機的に実行される。ロック命令が実際に競合しないことが分かっているケースでは、モニタロジック116は、競合することの示唆を検出し、実行パイプラインを再始動する。競合することの示唆を生じたロック命令のみが非投機的な方式で再実行される。別の実施の形態では、モニタロジック116が省略される場合がある。この実施の形態では、キャッシュシステムは、ロック命令に対する関心のあるアドレスに向けられるスヌープを拒否するためのロジックを含む。これは、正式なロックが発せられることなしに関心のあるアドレスでのコンテンツの保全性を保持する。スヌープを発生した他のエージェントは、そのスヌープの拒否を短時間の後に再びスヌープをトライする示唆として受ける。ここで図2を参照して、1実施の形態に係る、パイプラインの開始近くで動作するロック競合予測器を示す、プロセッサ及びその実行パイプラインの概念図が示される。図2で示される回路の多くは、図1の回路に類似するが、ロック競合予測器218は、代わりに、デコードステージ204の動作を変更するために使用される。ロック命令をloadlockマイクロ動作及びstorelockマイクロ動作に常にデコードするよりはむしろ、ロック命令が競合しないことをロック競合予測器218が判定したとき、デコードステージ204は、規則的なロードのマイクロ動作及びstoreunlockマイクロ動作を含むマイクロ動作にロック命令をデコードする。規則的なロードのマイクロ動作は、幾つかの実施の形態では、ヒント又は他のステータスビットが添付されて、loadlockマイクロ動作として現れる。これらのマイクロ動作は、トレースキャッシュ206でトレースを構築するために使用される。他の実施の形態では、マイクロ動作は、別の形式のバッファに一時的に記憶される。モニタロジック216は、図1のモニタロジック116により実行される機能と同様の機能を実行する。さらに、loadマイクロ動作及び対応するstoreunlockマイクロ動作は、競合することの示唆が生じたことをモニタロジック216が判定した場合にリタイアとなることが許可されない。これは、ロック命令が競合しないという予測が誤りであったことを意味する。この競合することの示唆が考慮される期間は、異なる実施の形態で変わる場合がある。1実施の形態では、storeunlockに対応するメモリストアがグローバルに観察可能であるときに期間が終了する。別の実施の形態では、この期間は、storeunlockがMOB222において最も古い記憶となったときに終了する場合がある。競合することの示唆が判定された場合、回復プロセスは、先の図1とともに説明されたプロセスと異なる。再始動に応じたロック命令は、トレースキャッシュ206から再び発生することが不可能である。これは、トレースキャッシュ206がloadwithoutlockマイクロ動作によるトレースを含むためである。ロック命令は、デコードステージで再びデコードされる必要があり、このとき、loadlockマイクロ動作及び対応するstoreunlockマイクロ動作を含むマイクロ動作にデコードする。これらのマイクロ動作は、新たなトレースがトレースキャッシュ206で構築されるのを必要とする。図3を参照して、1実施の形態に係る、パイプラインの終わり近くで動作するロック競合予測器を示すプロセッサ及びその実行パイプラインの概念図が示されている。図3の実施の形態は、Pentium登録商標4コンパチブルプロセッサでのリプレイ動作をサポートするため、リプレイキュー322で示される変更されたMOBを含む。リプレイ動作は、データの投機dataspeculationが正しくなるまで、投機的に発せられたマイクロ動作を再実行することで誤ったデータの投機を修復する。1実施の形態では、loadlock及びstoreunlockマイクロ動作は、パイプラインをフラッシュするか、又はロック命令を再始動することなしに、モニタロジック316が競合を示唆する場合にリプレイされる。別の実施の形態では、チェックポイントの修復は、チェックポイント回復ロジック370を使用して実行される。1実施の形態では、チェックポイント回復ロジック370は、loadlockマイクロ動作の前に全てのマイクロ動作がリタイアされるとき、プロセッサ状態のスナップショットを記憶する。チェックポイントが取られた後、投機的に実行されたロック命令の全ての構成のマイクロ動作、及びある実施の形態では、プログラムにおける後続する命令は、それらが終了したときに順序においてリタイアとなる。プロセッサパイプラインがフラッシュされる必要があることを示唆して、storeunlockに対応するメモリストアがグローバルに観察可能である前に、モニタロジック316が競合を示唆する場合、loadlockの直前にマイクロ命令のリタイアメントでのプロセッサ状態は、チェックポイント回復ロジック370から回復される。loadlock、storeunlock、及びロック命令のいずれか他の構成要素のマイクロ動作は、再実行される。この再実行の間、構成要素のマイクロ動作は、従来の実現として扱われ、非投機的に実行される。チェックポイント回復ロジック370は、他の実施の形態では、先の図1及び図2で示されるプロセッサのような他のプロセッサで使用される。1実施の形態では、ロック命令が競合しないことをロック競合予測器318が判定したとき、loadlockマイクロ動作又はloadwithoutlockマイクロ動作は、ROB308から投機的に発せられる。loadlockマイクロ動作又はloadwithoutlockマイクロ動作がROB308から発せられるかで、対応するstoreunlockマイクロ動作、及び介入するマイクロ動作は、loadマイクロ動作の前又は後のいずれかでROB308から発せられる。誤ったデータの投機が間違ったアドレスを生成したケースでは、1以上のデータチェッカーロジック368は、無効なアドレス信号372をリプレイキュー322に発する。無効なアドレス信号372は、投機的なloadマイクロ動作及び対応するstoreunlockマイクロ動作の処理を判定するため、モニタロジック316とともに使用される。無効なアドレス信号372がFALSEであり、モニタロジック316が競合することの示唆を検出しないとき、storeマイクロ動作及びstoreunlockマイクロ動作は、正常にリタイアとなる。無効なアドレス信号372がFALSEであり、モニタロジック316が競合することの示唆を検出するとき、パイプラインはフラッシュされ、ロック命令が再始動される。別の実施の形態では、モニタロジック316が競合の示唆を検出した場合、loadマイクロ動作がリプレイされる。しかし、無効なアドレス信号372がTRUEであるとき、何れか競合することの示唆が誤ったアドレスに関するので、モニタロジック316の状態は無関係である。したがって、無効なアドレス信号372がTRUEであるとき、リプレイが生じ、モニタロジック316からの何れか競合することの示唆は、ロック競合予測器318を更新しない。図4を参照して、この開示の1実施の形態によれば、ロック命令の実行の状態図が示される。ブロック410では、ロック命令が競合するか否かに関する予測が行われる。ロック命令が競合するという予測である場合、プロセスは、競合するパス414に沿って存在し、ブロック460に入る。ブロック460では、loadlockマイクロ動作は、リタイアとなる準備がされたとき、及び全てのペンディングにされているストアバッファがデータを排出した後にのみ、メモリシステムに発せられる。ブロック410でなされた予測が、ロック命令が競合しない場合、プロセスは、競合しないパス412に沿って存在し、loadlockマイクロ動作又はある実施の形態では、ロック動作が競合しない幾つかのヒントが添付されたloadlockマイクロ動作、又はある実施の形態では、loadwithuncontendedlockマイクロ動作又はloadwithoutlockマイクロ動作のような幾つかの新たなマイクロ動作に変形されるloadlockマイクロ動作は、実行のために投機的に発せられる。次いで、ブロック430では、loadlockマイクロ動作がリタイアメントであるとき、storeunlockマイクロ動作がメモリに発せられる。storeunlockマイクロ動作は、リタイアメントとなる準備をする。1実施の形態では、storeunlockマイクロ動作は、メモリストアがグローバルに観察可能であるとき、リタイアとなるために準備される。また、これは、loadlockマイクロ動作がリタイアするのを可能にする。別の実施の形態では、storeunlockマイクロ動作は、メモリストアがメモリオーダリングバッファで最も古いペンディングにされているstoreマイクロ動作となるときに、リタイアとなる準備がされる。つぎに、これにより、loadlockマイクロ動作がリタイアとなるのが可能となる。競合することの示唆なしで1実施の形態では、グローバルに観察可能となったときであるstoreunlockマクロ動作がリタイアとなる準備がされた場合、プロセスはパス432に沿って存在し、ブロック440で、loadlockマイクロ動作がリタイアとなり、予測ロジックはTRUE真の予測結果でアップデートされる。しかし、storeunlockマイクロ動作がリタイアとなる準備がされる前に、競合することの示唆が生じた場合、プロセスはパス434に沿って存在し、ブロック450で、ロック命令が再始動され、予測ロジックは、FALSE偽の予測結果でアップデートされる。この再実行の間、ロック命令は、フォワードプログレスで支援するために従来の実現におけるように、非投機的に実行される。別の実施の形態では、ブロック410,460及び470が省略される場合がある。かわりに、ロック命令が競合しないことが全てのケースで想定される。対応するロードマイクロ動作は、それぞれのケースで、はじめに投機的に実行されるブロック420。ロック命令が実際の競合することが分かっているケースでは、モニタロジック160は、競合することの示唆を検出し、実行パイプラインをフラッシュし、ロック命令を再始動するブロック450。競合することの示唆を生じているロック命令のみが非投機的な方式で再実行される。ここで図5A及び図5Bを参照して、この開示の2つの実施の形態に係る、ロック競合予測器及びモニタロジックをサポートするプロセッサを含むシステムの概念図が示される。図5Aのシステムは、プロセッサ、メモリ、及び入力/出力装置がシステムバスにより相互接続されるシステムを一般的に示し、図5Bのシステムは、プロセッサ、メモリ、及び入力/出力装置が多数のポイントツーポイントインタフェースにより相互接続されるシステムを一般的に示している。図5Aのシステムは、幾つかのプロセッサを含み、このうち2つのプロセッサ40,60のみが明確さのために示される。プロセッサ40,60は、レベル1のキャッシュ42,62を含む。図5Aのシステムは、システムバス6とバスインタフェース44,64,12を介して接続される幾つかの機能を有する。1実施の形態では、システムバス6は、Intel登録商標社により製造されるPentium登録商標クラスのマイクロプロセッサで利用されるフロントサイドバスFSBである。他の実施の形態では、他のバスが使用される場合もある。ある実施の形態では、メモリコントローラ34及びバスブリッジ32は、チップセットと集合的に呼ばれる。ある実施の形態では、チップセットの機能は、図5Aの実施の形態で示されるのとは異なる物理的なチップのなかで分割される。メモリコントローラ34は、プロセッサ40,60がシステムメモリ10との間で、及びBIOSbasicinputoutputsystem消去可能なプログラマブルリードオンリメモリEPROMとの間で読み取り、書き込みするのを可能にする。ある実施の形態では、BIOROM36は、フラッシュメモリを利用する。メモリコントローラ34は、メモリ読み取り及び書き込みデータがシステムバス6のバスエージェントに送出され、バスエージェントから送出されるのを可能にするバスインタフェース8を含む。また、メモリコントローラ34は、高性能グラフィックインタフェース39を通して高性能グラフィック回路38と接続する。所定の実施の形態では、高性能グラフィックインタフェース39は、最新のグラフィックスポートAGPインタフェースである。メモリコントローラ34は、高性能グラフィックスインタフェース39にわたりシステムメモリ10から高性能グラフィックス回路38にデータを送出する。図5Bのシステムは、幾つかのプロセッサを含み、このうち2つのプロセッサ70,80のみが明確さのために示されている。プロセッサ70,80は、メモリ2,4との接続するため、ローカルメモリコントローラハブMCH72,82をそれぞれ含んでいる。プロセッサ70,80は、ポイントツーポイントインタフェース回路78,88を使用して、ポイントツーポイントインタフェース50を介してデータをやり取りする。プロセッサ70,80は、ポイントツーポイントインタフェース回路76,94,86,98を使用して、個々のポイントツーポイントインタフェース52,54を介してチップセット90とデータをやり取りする。チップセット90は、高性能グラフィックスインタフェース92を介して高性能グラフィックス回路38とデータをやり取りする。図5Aのシステムでは、バスブリッジ32は、システムバス6とバス16との間でのデータのやり取りを可能にし、このブリッジは、ある実施の形態では、ISAindustrystandardarchitectureバス又はPCIperipheralcomponentinterconnectバスである。図5Bのシステムでは、チップセット90は、バスインタフェース96を介してバス16とのデータをやり取りする。いずれのシステムであっても、ある実施の形態では低性能グラフィックスコントローラ、ビデオコントローラ、及びネットワークコントローラを含む、バス16に様々な入力/出力I/O装置14が存在する。別のバスブリッジ18は、ある実施の形態では、バス16とバス20との間でのデータのやり取りを可能にするために使用される。バス20は、ある実施の形態では、SCSIsmallcomputersysteminterfaceバス、IDEintegrateddriveelectronicsバス、又はUSBuniversalserialbusバスである。更なるI/O装置は、バス20と接続される。これらは、マウス、オーディオI/O24、通信装置26を含み、モデム及びネットワークインタフェース及びデータストレージ装置28を含む、キーボード及びカーソル制御装置22を含む。ソフトウェアコード30は、データストレージ装置28に記憶される。ある実施の形態では、データストレージ装置28は、固定された磁気ディスク、フロプティカルディスクドライブ、光ディスクドライブ、光磁気ディスクドライブ、磁気テープ、フラッシュメモリを含む不揮発性メモリである。上述された明細書では、本発明は、その特定の実施の形態を参照して記載された。しかし、様々な変更及び変形が特許請求の範囲で述べたように本発明の広義の精神及び範囲から逸脱することなしになされることが明らかである。したがって、明細書及び図面は、限定的な意味よりはむしろ例示的な意味であると考えられる。"