(57)【要約】【解決手段】  トランザクションのメモリシステムにおけるトランザクションを実行するためのシステム及び方法が開示される。システムは、共有メモリに結合される複数のプロセッサの１つのプロセッサを含み、プロセッサは、複数のプロセッサの実行に関するアトミックなトランザクションとしての、共有メモリへの複数のメモリアクセス動作を含むコードのセクションを実行するように構成される。実施形態によると、プロセッサは、許可されていない命令の任意のセットを複数のメモリアクセス動作が含むかどうかを決定するように構成されてよく、セットは、バーチャル化されたコンピューティング環境内で自然コンピューティング環境内におけるのと異なるように動作する１つ以上の命令を含む。メモリアクセス動作が、許可されていない命令のそれである場合には、プロセッサはトランザクションを中断する。【選択図】図３
2011529603.tif 000002
【特許請求の範囲】
【請求項１】
１つ以上の他のプロセッサによって共有される共有メモリに結合可能なプロセッサを備えた装置であって、
前記プロセッサは、前記１つ以上の他のプロセッサに対するアトミックなトランザクションとしての、前記共有メモリへの複数のメモリアクセス動作を含むコードのセクションを実行するように構成され、
前記プロセッサは、許可されていない命令の少なくとも１つのセットを前記複数のメモリアクセス動作が含むかどうかを決定するように構成され、許可されていない命令の前記セットは、バーチャル化されたコンピューティング環境内で自然コンピューティング環境内におけるのと異なるように動作する１つ以上の命令を含み、
前記プロセッサは、許可されていない命令の少なくとも１つの前記セットを含む前記複数のメモリアクセス動作の１つに応答して前記トランザクションを中断するように構成されている装置。
【請求項２】
請求項１の装置であって、許可されていない命令の前記セットは少なくとも１つの命令を含み、前記少なくとも１つの命令は、前記少なくとも１つの命令がバーチャルマシン内にあるか否かに応じて前記プロセッサ上で異なるように実行する装置。
【請求項３】
請求項１の装置であって、許可されていない命令の前記セットは遠方制御転送命令を含み、前記遠方制御転送命令は、前記プロセッサのセグメントレジスタ内の値を修正することによる命令を含む以外のメモリセグメントへプログラム制御を転送するように実行可能である装置。
【請求項４】
請求項１の装置であって、許可されていない命令の前記セットは前記プロセッサの最も高い特権レベルでのみ実行され得る１つ以上の命令を含む装置。
【請求項５】
請求項１の装置であって、前記プロセッサは前記複数のメモリアクセス動作の１つ以上の実行によって作成される前記共有メモリ内の１つ以上の値に対する任意の修正を破棄することによって前記トランザクションを中断するように構成される装置。
【請求項６】
共有メモリに結合される複数のプロセッサの第１のプロセッサが、前記複数のプロセッサに関するアトミックなトランザクションとしての共有メモリへの複数のメモリアクセス動作を含むコードのセクションを実行することと、
前記第１のプロセッサが、許可されていない命令の少なくとも１つのセットを前記複数のメモリアクセス動作が含むかどうかを決定することと、
許可されていない命令の少なくとも１つの前記セットを含む前記複数のメモリアクセス動作に応答して前記第１のプロセッサが前記トランザクションを中断することとを備えた方法であって、
許可されていない命令の前記セットは、前記命令がバーチャルマシン内で実行されるか否かに応じて異なるように動作する１つ以上の命令を含む方法。
【請求項７】
請求項６の方法であって、許可されていない命令の前記セットは遠方制御転送命令を備えており、前記遠方制御転送命令は、前記プロセッサのセグメントレジスタ内の値を修正することによる命令を含む以外のメモリセグメントへプログラム制御を転送するように実行可能である方法。
【請求項８】
請求項６の方法であって、許可されていない命令の前記セットは前記第１のプロセッサの最も高い特権レベルでのみ実行され得る命令を備えている方法。
【請求項９】
請求項６の方法であって、前記中断することは前記複数のメモリアクセス動作の１つ以上の実行によって作成される前記共有メモリ内の１つ以上の値に対する任意の修正を破棄することを備えている方法。
【請求項１０】
共有メモリと、前記共有メモリに結合される複数のプロセッサとを備えたシステムであって、
前記複数のプロセッサの第１のプロセッサは、前記共有メモリへの複数のメモリアクセス動作を含むコードのセクションを実行するように構成され、前記第１のプロセッサは、前記複数のプロセッサの残りに対するアトミックなトランザクションとして前記複数のメモリアクセス動作を実行するように構成され、
前記第１のプロセッサは、許可されていない命令のセットにおける少なくとも１つの命令を前記複数のメモリアクセス動作が含むかどうかを決定するように構成され、許可されていない命令の前記セットにおける少なくとも１つの命令の実行は、前記第１のプロセッサの特権レベルに基いており、
前記第１のプロセッサは、許可されていない命令の前記セットの少なくとも１つの前記セットを含む前記複数のメモリアクセス動作の１つに応答して前記トランザクションを中断するように構成されているシステム。
【請求項１１】
請求項１０のシステムであって、許可されていない命令の前記セットは、前記命令がバーチャルマシン内で実行されるか否かに応じて前記プロセッサ上で異なるように実行する命令を含むシステム。
【請求項１２】
請求項１０のシステムであって、許可されていない命令の前記セットは特権の命令を含むシステム。
【請求項１３】
請求項１０のシステムであって、許可されていない命令の前記セットは遠方制御転送命令を含むシステム。
【請求項１４】
請求項１０のシステムであって、前記第１のプロセッサは前記複数のメモリアクセス動作の１つ以上の実行によって作成される前記共有メモリ内の１つ以上の値に対する任意の修正を破棄することによって前記トランザクションを中断するように構成されるシステム。
【請求項１５】
請求項１０のシステムであって、許可されていない命令の前記セットはハイパーバイザに関連する１つ以上の命令を含むシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
共有メモリコンピュータシステムは、共有メモリロケーションへのアクセスの多重同時スレッドの実行を可能にする。残念なことに、正確な多重スレッドプログラムを書くことは、同時のメモリアクセスを連携させる複雑さに起因して難しい。
【０００２】
従来、プログラムの正確性を確保するために、プログラマは、共有メモリロケーションへのアクセスを連携させるのにロック(locks)又は他の相互排他的メカニズム(mutual exclusion mechanisms)を用いてきた。例えば従来のロックを用いて、スレッドは、排他的なアクセスを必要とする各メモリロケーションに対するロックを獲得して且つ保持するように構成され得る。スレッドはロックを保持する一方で他のスレッドはそのロックを獲得し得ないので、他のスレッドは当該ロックによって保護されているメモリロケーションにアクセスすることはできない。しかし、従来のロックする技術は、デッドロック(dead-lock)、競合状態、優先順序の逆転、ソフトウエア複雑性、及び性能制限を含む種々の潜在的危険性に対して脆弱である。
【０００３】
同時性制御のための代替的な手法は、トランザクションのメモリ(transactional memory)である。トランザクションのメモリのプログラミングモデルにおいては、プログラマは、他のスレッドの実行に対してアトミックに(atomically)実行されるべき「トランザクション」として、コードのセクション（即ち実行パス又はプログラム命令のセット）を指定することができる。例えば、トランザクションが２つのメモリ記憶動作を含む場合には、トランザクションメモリシステムは、他の全てのスレッドが、一方のみの効果ではなく、両方のメモリ動作の累積的効果を観察することができることあるいは両方とも観察することができないことのいずれかのみを確実にする。単純化されたプログラミングモデルに加えて、トランザクションのメモリシステムは、従来のロックよりもきめ細かなメモリ共有が可能になるので、アプリケーション性能を高めることができる。
【０００４】
これまで種々のトランザクションのメモリシステムが、ソフトウエア、ハードウエア、又はこれらの組み合わせにおいて実装されるものを含めて提案されてきた。しかし、従来の多くの概念及び実装は種々の制限に制約されている。例えば、ソフトウエアベースのトランザクションメモリシステム（ＳＴＭｓ）は不所望な性能経費に悩まされる一方で、ハードウエア提案（ＨＴＭｓ）は実装するのに極めて複雑であることがある。
【発明の概要】
【課題を解決するための手段】
【０００５】
トランザクションのメモリシステムにおけるトランザクションを実行するためのシステム及び方法が開示される。システムは、共有メモリに結合される複数のプロセッサの１つのプロセッサを含む。プロセッサは、複数のプロセッサの実行に対するアトミックなトランザクション(atomic transaction)としての、共有メモリへの複数のメモリアクセス動作を含むコードのセクションを実行するように構成されてよい。
【０００６】
幾つかの実施形態によると、プロセッサは、許可されていない命令の任意のセットを複数のメモリアクセス動作が含むかどうかを決定するように構成されてよく、許可されていない命令のセットは、バーチャル化されたコンピューティング環境内で自然コンピューティング環境内におけるのと異なるように動作する１つ以上の命令を含む。任意のメモリアクセス動作が、許可されていない命令のそれである場合には、プロセッサはトランザクションを中断する。
【図面の簡単な説明】
【０００７】
【図１】図１は種々の実施形態に従いＡＳＦを実装するように構成される多重プロセッサコンピュータシステムの構成部分を示すブロック図である。
【０００８】
【図２】図２は１つの実施形態に従いプロセッサを備えている構成部分の更なる詳細を示すブロック図である。
【０００９】
【図３】図３は種々の実施形態に従いＡＳＦを用いるトランザクションを実行するための方法を示す一般的なフロー図である。
【００１０】
【図４】図４は１つの実施形態に従い入れ子にされたトランザクションの例を示すブロック図である。
【００１１】
【図５】図５は幾つかの実施形態に従い後退モードにおいて推測的なセクションを開始するためのＳＰＥＣＵＬＡＴＥ命令の実装又は実施を示すフロー図である。
【００１２】
【図６】図６は幾つかの実施形態に従い記憶状態モードにおける推測的なセクションを開始するためのＢＥＧＩＮ命令を実行するステップを示すフロー図である。
【００１３】
【図７】図７は幾つかの実施形態に従い種々のＡＳＦ実装がどのようにしてデータ競合を処理し得るのかを規定する一連の規則をまとめた表である。
【００１４】
【図８】図８は種々の実施形態に従ってＡＳＦメカニズムが後退モードにおけるトランザクションを実行可能な方法を示すフロー図である。
【００１５】
【図９】図９は幾つかの実施形態に従いＣＯＭＭＩＴ命令を実行することによるようなトランザクションをコミットするための方法を示す図である。
【００１６】
【図１０】図１０は幾つかの実施形態に従い記憶状態モードにあるトランザクションを実行するための方法を示すフロー図である。
【００１７】
【図１１】図１１は１つの実施形態に従いロックベースのコードと相互運用するＡＳＦベースのトランザクションを設定するための方法を示すフローチャートである。
【００１８】
【図１２】図１２はここで説明されるＡＳＦの種々の実施形態を実装するように構成されるコンピュータシステムの１つの実施形態を示している。
【００１９】
幾つかの実施形態及び例示的な図面のための例を目的として本発明がここに説明されるが、当業者であれば説明された実施形態又は図面に本発明が限定されないことを認識するであろう。ここでの図面及び詳細な説明は開示された特定の形態に本発明を限定することを意図したものではなく、むしろ本発明は、添付の特許請求の範囲によって画定されるような本発明の精神及び範囲内にある全ての修正、均等なもの、及び代替案に及ぶことが理解されるべきである。ここで用いられるいかなる表題も構成上の目的だけのためのものであり、明細書の範囲又は特許請求の範囲を限定することを意味しない。ここで用いられる「かもしれない、あり得る、し得る、であろう、ことがある、してよい、あってよい、することができる(may)」の語は、必須の意味（即ち「なければならない(must)」を意味する）ではなく、許容の意味（即ち「可能性がある」を意味する）である。同様に、「含む(include)」及び「含んでいる(including)」は含んでいることを意味し、限定することを意味しない。
【発明を実施するための形態】
【００２０】
トランザクションのメモリシステムは、ロックを用いる相互排他のような従来の同期メカニズムに付随する経費及びプログラム上の複雑性を必要とすることなしに、多重スレッドシステムにおけるソフトウエアスレッドが他のスレッドに関してアトミックに一連の共有メモリロケーションにアクセスする（読み出す及び／又は書き込む）ことを可能にし得る。しかし、トランザクションのメモリシステムの効率を高めるためには更なる技術が必要である。
【００２１】
幾つかの実施形態によると、ここで説明される効率的なトランザクションのメモリメカニズムを実装するために種々のハードウエアメカニズムが用いられてよい。幾つかの実施形態においては、高位の同期メカニズムを合成するのに用いることができる種々の同期機能をハードウエアが実行するように命令するために、コンピュータ的に高価でない基本命令(primitives)（例えばプログラム命令）が定義されてよい。ハードウエアメカニズム及び／又はプログラム命令は、ここでは集合的に高度な同期機構(Advanced Synchronization Facility)（ＡＳＦ）と称されることがある。
【００２２】
幾つかの実施形態においては、既存のプロセッサアーキテクチャ（例えばｘ８６）がＡＳＦメカニズムを実装するように補強されてよい。説明を明確にするために、この開示の残りは、既知の６４ビットｘ８６アーキテクチャＡＭＤ６４が、トランザクションのメモリを実装するためにどのようにＡＳＦメカニズムと共に増強され得るかを説明している。しかし、これらの例示的な実施形態はＡＳＦメカニズムをこのアーキテクチャだけに限定することを意図されておらず、またこの開示の利点を与えられれば、他のプロセッサアーキテクチャにおけるＡＳＦメカニズムの実装は当業者に明らかであろう。
【００２３】
図１は種々の実施形態に従いＡＳＦを実装するように構成される多重プロセッサコンピュータシステムの構成部分を示すブロック図である。図示された実施形態によると、コンピュータシステム１００は多重プロセッサ、例えばプロセッサ１１０ａ及び１１０ｂを含んでいてよい。幾つかの実施形態では、プロセッサ１１０は、多重化された物理的又は論理的（例えばＳＭＴ）コアを備えていてよく、また互いに結合され且つ／又は符号１４０で示されるような相互接続を介して共有メモリ１５０に結合されていてよい。種々の実施形態において、種々のトポグラフィにある共有システムバス又は点対点ネットワーク（例えば完全接続、トーラス、等）のような異なる相互接続が用いられてよい。
【００２４】
図示された実施形態によると、各プロセッサ１１０は１つ以上のレベルのメモリキャッシュ１３０を含んでいてよい。メモリキャッシュのレベルは階層的に配置されてよく（例えばＬ１キャッシュ、Ｌ２キャッシュ、Ｌ３キャッシュ、等）、また共有メモリ１５０に記憶されている複数の値のローカルコピーをキャッシュするために用いられてよい。
【００２５】
種々の実施形態において、メモリキャッシュ１３０は種々のキャッシュコヒーレンスメカニズム１３２を含んでいてよい。キャッシュコヒーレンスメカニズム１３２は、１つの実施形態においては、各プロセッサ１１０のメモリキャッシュ１３０内に含まれている複数の値が、共有メモリ内及び／又は他のプロセッサのメモリキャッシュ内に記憶されている複数の値に対してコヒーレントであることを確実にするために、相互接続された複数のプロセッサの間でのキャッシュコヒーレンス通信プロトコルを実装していてよい。幾つものそのようなプロトコル（ＭＥＳＩ（即ちイリノイ(Illinois)プロトコル）及びＭＯＥＳＩプロトコルを含む）が存在し、また種々の実施形態において実装されてよい。キャッシュコヒーレンスプロトコルは、プロセッサ同士が共有データに対する修正を互いに伝えることを可能にするための一連のメッセージ及びルールを定義することができ、それによりキャッシュコヒーレンスが維持される。例えば、ＭＥＳＩプロトコルに従うと、キャッシュ内に記憶されている各ブロックは、４つの状態、即ち修正された、排他的な、共有された、又は無効な状態の１つにあるものとして標識付けられる必要がある。ある特定のプロトコルは、一連のメッセージ及びルールを、それらのメッセージを送信し且つ解釈するために定義し、それらのメッセージによりプロセッサは各ブロック上の適切な標識付けを維持する。所与のキャッシュブロックの状態に応じて、プロセッサは特定の動作を実行することを制限されてよい。例えば、プロセッサは、無効であると標識付けられているキャッシュブロックに依存するプログラム命令を実行しなくてよい。キャッシュコヒーレンスメカニズムは、種々の実施形態において、ハードウエア、ソフトウエア、又はそれらの組み合わせにおいて実装され得る。キャッシュコヒーレンスメッセージは、相互接続１４０を介して通信されてよく、またブロードキャスト又は点対点であってよい。
【００２６】
図示された実施形態によると、各プロセッサ１１０はまた、ここに説明されるように、トランザクションのメモリを実装するための種々のＡＳＦメカニズムを含んでいてよい。種々の実施形態において、より多くのプロセッサ１１０が相互接続１４０に接続されていてよく、また種々のレベルのキャッシュメモリがそのような多重のプロセッサの間で且つ／又は各プロセッサ上の多重コアの間で共有されてよい。
【００２７】
図２は１つの実施形態に従いプロセッサ１１０のようなプロセッサを備えている構成部分の更なる詳細を示すブロック図である。図示された図２の実施形態によると、プロセッサ２００はレジスタファイル２１０を備えており、レジスタファイル２１０は、各々が任意のサイズ（例えば１６ビット、３２ビット、６４ビット、１２８ビット、等）であってよい種々のレジスタを含んでいてよい。例えばレジスタファイル２１０は、種々の既知のｘ８６レジスタ、例えばｒＳＰレジスタ２１２（スタックポインタ）、ｒＩＰレジスタ２１４（命令ポインタ）、ｒＡＸレジスタ２１６（アキュムレータレジスタ）、及び／又はｒＦＬＡＧＳレジスタ２１８（プロセッサ状態を示すフラグレジスタ）を含んでいてよい。幾つかの実施形態では、レジスタファイル２１０は任意の数の汎用レジスタ２２０及び／又は浮動小数点レジスタ２２２を更に備えていてよい。幾つかの実施形態では、レジスタファイル２１０は１つ以上の１２８ビットレジスタ、例えばＸＭＭレジスタ２２４を含んでいてよいい。種々の実施形態において、レジスタファイル２１０は種々のサイズであってよい任意の数の他のレジスタ２２６を備えていてよい。
【００２８】
図示された実施形態によると、プロセッサ２００は、共有メモリ内の複数の値のローカルコピーを記憶するためのメモリキャッシュ２３０と、それらの値の無矛盾性を、共有メモリ、キャッシュ、及び他のキャッシュ内に分散されている種々のコピーにわたって維持するためのキャッシュコヒーレンスメカニズム２３２とを含んでいてよい。プロセッサ２００はまた、ここで説明されているようなトランザクション同期メカニズムを実施するためのＡＳＦメカニズム２４０を含んでいてよい。ＡＳＦメカニズム２４０は、種々の実施形態に従ってここに説明されているようなメモリトランザクションを実施するためにデータ構造及び／又は論理を含んでいてよい。幾つかの実施形態では、ＡＳＦメカニズム２４０は固定ラインバッファ(locked line buffer)２４２を含んでいてよく、固定ラインバッファ２４２は、後で説明されるような部分的に実行されるトランザクションによって生じるメモリ変化を後退させる(roll back)ための中断(abort)の場合に用いられてよい。幾つかの実施形態では、ＡＳＦメカニズム２４０はネスティングレベルレジスタ(nesting level register)２４４を含んでいてよく、ネスティングレベルレジスタ２４４は、後で更に詳細に説明されるような、その時点でのトランザクションが他のトランザクションにおいて入れ子にされている(nested)深さを示す値を保持することができる。幾つかの実施形態では、ＡＳＦメカニズムは、トランザクションがアクティブであるかどうかを示すためのフラグ、例えばトランザクションアクティブフラグ２４６を含んでいてよい。幾つかの実施形態では、ＡＳＦメカニズムは、トランザクションモードを示すフラグ、例えば記憶状態モードフラグ２４８を含んでいてよく、記憶状態モードフラグ２４８は、実行中のトランザクションが記憶状態モード又は他のモードのいずれにおいて実行中であるかを示すためにセットされてよい。更なる実施形態においては、トランザクション実行を支援するためにＡＳＦメカニズム２４０内に他のフラグ及び／又はレジスタが実装されていてよい。
【００２９】
図３は種々の実施形態に従いＡＳＦを用いるトランザクションを実行するための方法を示す一般的なフロー図である。図示された実施形態によると、ＡＳＦは、ステップ３１０にあるように、ソフトウエア（例えばスレッド）がトランザクションの開始を示す所与の命令（又は多重命令）を実行することによってトランザクション（即ちコードのクリティカルセクション）を実行することを許可してよい。後で論じられるように、種々の実施形態においては、クリティカルセクションの開始を示すために、ＳＰＥＣＵＬＡＴＥ又はＢＥＧＩＮのようなＡＳＦ命令を用いることができる。
【００３０】
トランザクションを開始した後、スレッドは、ステップ３２０にあるように、トランザクション本体を備えた一連の命令を実行してよい。そのような命令は多くのメモリアクセス（読み出し及び／又は書き込み）動作を含んでいてよく、その幾つかはアクセスされたメモリロケーションが保護されるべきであることを指定することができる。スレッドは、所与のメモリロケーションがＡＳＦにより提供される１つ以上の特別な宣言子(declaratory)命令を用いることによって保護されるべきであることを指定することができる。ＡＳＦメカニズムは、保護されたメモリ（宣言子命令によって指定された）へのアクセスがシステム内の同時に実行中の他の全てのスレッドに関してアトミックに起こること（即ち一斉に又は全くないように）を確実にすることができる。例えば、メモリへの多重の保護された書き込みをトランザクションが含む場合には、ＡＳＦメカニズムは、メモリへの当該保護された書き込みのサブセットのみの結果を確実に他のスレッドが観察することができないようにしてよい。他の例においては、幾つかの実施形態によると、トランザクションが１つ以上の保護されたメモリ読み出し動作を含む場合には、ＡＳＦメカニズムは、トランザクションが完了する前に他のスレッドが保護された読み出しロケーションを修正していないときに限りそのトランザクションが成功して完了することを確実にしてよい。種々の実施形態においては、宣言子動作によって保護される「メモリロケーション」は、システム依存キャッシュブロックのサイズのような異なるサイズのもの又は他のサイズのものであってよい。
【００３１】
そのような実施形態によると、ＡＳＦは、指定された宣言子命令を用いて特定されたメモリラインだけを保護するように構成されてよい。そのような実施形態においては、他の全てのメモリロケーションは、保護されていないままであってよく、また標準的なｘ８６命令を用いてクリティカルセクション内を修正されてよい。保護されていないメモリへのこれらの修正は、例えばプログラム順序での実行に際して即座に他のＣＰＵに対して可視的になってよい。幾つかの実施形態においては、トランザクション本体（例えばステップ３２０において実行される命令）は、１つ以上の他のトランザクション（即ち入れ子にされたトランザクション）を備えていてよい。
【００３２】
種々の実施形態によると、トランザクション実行の１つ以上の状態が妨害された場合には、当該トランザクションは中断してよい（ステップ３３０からの肯定の出口で示される）。種々の実施形態においては、トランザクションの試行は、他のプロセッサとの競合、遠方(far)制御転送（例えば割り込み及び障害に起因するもの）、明示的なソフトウエアＡＢＯＲＴ命令の実行、不十分なハードウエア資源、他の実装固有の状態、等を理由として、任意の点で中断されてよい。
【００３３】
種々の実施形態においては、トランザクションの試行が中断した場合には、トランザクションの実行のモードに応じて種々のリカバリ動作がとられてよい。種々の実施形態においては、各トランザクションに対して、ＡＳＦは、後退(rollback)モードの実行及び／又は記憶状態モードの実行を支援することができる。幾つかの実施形態では、モードの実行は、中断されているトランザクションの試行に応答して何の動作が実行されているのかを決定してよい。例えば、幾つかの実施形態においては、後退モードでトランザクションを中断することは、実行をそのトランザクションの開始へ「後退させる」ことができ、一方、記憶状態モードでトランザクションの試行を中断することは、そのトランザクションの記憶動作が実行されないままでそのトランザクションを継続させることができる（即ちトランザクションの記憶の実行はそのトランザクションが中断されなかったことを条件としてよい）。
【００３４】
図示された実施形態によると、後退モードにおいて実行しているトランザクションが中断した場合（ステップ３４０からの肯定の出口によって示される）、ステップ３５０にあるようにＡＳＦメカニズムがリカバリ動作を実行するように設定されてよく、リカバリ動作は保護されたラインの内容に対する修正を破棄することを含んでいてよい。ステップ３５０にあるように当該修正を破棄することによって、ＡＳＦメカニズムは、当該修正をシステム内の他のスレッドから観測することができないようにすることができ、それによりトランザクションのアトミック性(atomicity property)に適合することができる。しかし、ＡＳＦメカニズムは、保護されていないメモリへの修正、例えば標準的なｘ８６メモリ命令を用いて実行された修正を後退させないように設定されてもよい。幾つかの実施形態においては、アプリケーションプログラマは、これらの保護されていない修正を収容するためのソフトウエア、例えばクリティカルセクションに至るまでの初期化シーケンスに再び入るように構成されるソフトウエアリカバリルーチンを提供してよい。
【００３５】
種々の実施形態においては、ステップ３５０のリカバリ動作は、全てのレジスタよりはむしろシステムレジスタの一部（例えばｒＩＰ及びｒＳＰ）のみを後退させるように設定されてよい。従ってそのような実施形態においては、トランザクションの実行に入るときに種々のレジスタの内容に頼らないようにソフトウエアが書かれてよい（例えば、中断イベントの後に幾つかのレジスタの初期内容を無視することによって、及び／又はトランザクションの実行の間に種々のレジスタを修正しないことに対して）。
【００３６】
幾つかの例では、割り込み又は例外ハンドラがリターンする前に、オペレーティングシステムコード又は他のプロセスが暫定的に実行されてしまっていてよい。更に、幾つかの例では、割り込まれたトランザクションが目標としていたロケーションを調査し及び／又は修正するＡＳＦトランザクションを他のプロセスが実行してしまっていてもよい。幾つかの実施形態においては、ＡＳＦメカニズムは、複数のコンテキストスイッチにわたる任意のＡＳＦ関連状態を維持しないことによる懸念を未然に防止してよい。その代わりに、そのような実施形態においては、割り込まれたスレッドがプロセッサにリターンしたときに、ＡＳＦメカニズムは当該トランザクションを自動的に中断すると共に再試行するように設定されてよい。
【００３７】
図示された実施形態によると、１つ以上のリカバリ動作を実行した後に、スレッドは次いで、ステップ３５０からステップ３１０までのフィードバックループで示されるように、当該トランザクションを再試行してよい。
【００３８】
幾つかの実施形態においては、記憶状態モードにおけるトランザクション実行の中断（ステップ３４０からの否定の出口によって示される）は、後退におけるトランザクション実行の中断（ステップ３４０からの肯定の出口によって示される）とは異なるように処理されてよい。例えば、後退モードトランザクションの中断は実行フローをクリティカルセクションの開始へ（又は他のリカバリコードへ）自動的にリセットしてよいのに対して、記憶状態モードにおけるトランザクションの中断は、保護されたメモリロケーション内の値に対してクリティカルセクションによって作成された変更を取り消すかさもなければ破棄した後に、ステップ３６０にあるように当該トランザクションを「解除する(deactivating)」ことによって処理されてよい。種々の実施形態においては、トランザクションを解除することは、中断が発生したこと及び／又はトランザクションがもはやアクティブでないことを示す状態コードをセットすることを含んでいてよい。記憶状態モードにおいては、トランザクションが解除され（ステップ３６０にあるように）た後、保護されたメモリロケーションへの任意の記憶動作を実行することなしに、システムはクリティカルセクションの実行を継続して（ステップ３７０において）よい。例えば、トランザクションが解除された後、保護されたメモリロケーションに対する後続の記憶動作は動作不能(no-ops)として処理されてよい。
【００３９】
幾つかの実施形態においては、中断されたトランザクションが完了した場合、トランザクションが中断されていたことを示すために状態コードがレジスタ、例えばｒＡＸレジスタ２１６内にセットされてよい。幾つかの実施形態においては、ステップ３７０からステップ３５０へのフィードバックループによって示されるように、中断状態コードが設定されたことを検知すると共に１つ以上のリカバリ動作を実行するようにスレッドが設定されてよい。種々の実施形態では、ステップ３５０のリカバリ動作は、記憶状態モードにおいて（即ちステップ３７０からの）中断されたトランザクションに対するのと、後退モードにおいて（即ちステップ３４０からの）中断されたトランザクションに対するのとで異なっていてよい。後退及び記憶状態モードにおけるトランザクションの更に詳細な議論は後で提供される。
【００４０】
図示された実施形態によると、一旦トランザクション本体が完了したら、スレッドは、ステップ３８０にあるように、ＡＳＦメカニズムに対するトランザクションの終了を示す１つ以上の命令、例えば以下に論じられるようなＣＯＭＭＩＴ命令を実行してよい。ステップ３８０にあるようにトランザクションをコミットした後、スレッドはステップ３９０にあるように実行を継続してよい。
【００４１】
幾つかの実施形態においては、ＡＳＦは１つ以上の他のトランザクション内の１つ以上のトランザクションのネスティング(nesting)を支援することができる。例えば、ステップ３１０にあるようにトランザクションが開始された後（例えばＳＰＥＣＵＬＡＴＥ命令を実行することによって）、ステップ３２０において実行中のトランザクション本体の命令は、その第１のトランザクションが完了する前に他のトランザクションを開始することができる（例えば他のＳＰＥＣＵＬＡＴＥ命令を実行することによって）。この場合、第２の（「子」）トランザクションは第１の（「親」）トランザクション内で「入れ子にされている(nested)」と言われることがある。いかなる他のトランザクション内においても入れ子にされていないトランザクションは、ここでは「トップレベル」トランザクションと称されることがある。
【００４２】
図４は１つの実施形態に従い入れ子にされたトランザクションの例を示している。図４によると、トップレベル親トランザクション４００は後退モードトランザクションであり、２つの入れ子にされたトランザクション、即ち同じく入れ子にされた親トランザクション４１０と、記憶状態モードにある入れ子にされたトランザクション４４０とを備えている。図示された実施形態によると、入れ子にされた親トランザクション４１０は、２つの入れ子にされたトランザクション、即ちそれぞれ後退モード及び記憶状態モードにある入れ子にされたトランザクション４２０及び入れ子にされたトランザクション４３０を含む。
【００４３】
幾つかの実施形態においては、ＡＳＦメカニズムは、入れ子にされた複数のトランザクション（例えば多重のＳＰＥＣＵＬＡＴＥ−ＣＯＭＭＩＴ複数対から構成される）を単一のトランザクションに平坦化するするように設定されてよい。幾つかの実施形態においては、入れ子にされたトランザクションはＡＳＦハードウエア資源を共有することができる。即ち、幾つかの実施形態においては、入れ子にされたトランザクションの実行の間、親トランザクションによって保護されているメモリロケーションは、子トランザクションにおいても保護され続ける。また、幾つかの実施形態においては、入れ子にされたトランザクションにおいて保護されているメモリロケーションは、その入れ子にされたトランザクションが完了した後にも親トランザクション内で保護され続け得る。このように幾つかの実施形態においては、子トランザクションによって保護されているメモリロケーションを取り扱うときに、保護されているメモリ動作を親トランザクションが継続して用いる必要があることがある。そのような実施形態においては、子トランザクションによって保護されているメモリロケーションに対する親による標準的メモリ書き込み動作の使用は、一般的な保護障害（即ち＃ＧＰ例外）を引き起こす可能性がある。
【００４４】
幾つかの実施形態においては、１つ以上の記憶状態トランザクションは１つ以上の後退トランザクション内で入れ子にされてよい。幾つかの実施形態においては、入れ子にされた複数のトランザクションの平坦化を理由として、ＡＳＦメカニズムは、トップレベル親トランザクション（ステップ３５０にあるような）のリカバリ動作を実行することによって、入れ子にされた記憶状態トランザクションの中断に応答するように設定されてよい。しかし、幾つかの実施形態によると、入れ子にされたトランザクションは記憶状態トランザクションの内部で許可されなくてよい。
【００４５】
トランザクションの実行を可能にするために、ＡＳＦメカニズムは、ソフトウエアスレッドによって呼び出され得る種々のコヒーレンシ制御命令を定義すると共に顕在化してよい。幾つかの命令が異なる実施形態において異なるように命名されてよいが、種々の実施形態は、以下の１つ以上に一致し又は類似するコヒーレンシ制御命令を顕在化すことができる。
【００４６】
図５は幾つかの実施形態に従うＳＰＥＣＵＬＡＴＥ命令の実装又は実施を示している。上で論じられたように、幾つかの実施形態においては、ＳＰＥＣＵＬＡＴＥ命令は、後退モードにおけるトランザクションの開始を示すためにスレッドによって実行されてよい。図示された実施形態によると、ＳＰＥＣＵＬＡＴＥ動作を実行することは、ステップ５０５にあるように、システムによって支持される最大ネスティング深さを超えてトランザクションが入れ子にされているかどうかを照合することを備えていてよい。種々の実施形態においては、その時点で実行しているトランザクションの深さを保持するために、様々なレジスタ及び／又はメモリロケーションが用いられてよい。ステップ５０５からの肯定の出口によって示されるように、トランザクションがシステム規定最大ネスティング深さよりも深い場合には、ＡＳＦメカニズムは、ステップ５１５にあるように、一般的な保護障害（＃ＧＰ[０]）を提起するように設定されていてよい。
【００４７】
図示された実施形態によると、ＳＰＥＣＵＬＡＴＥ命令を実行することは、ステップ５１０にあるように、トランザクションが記憶状態トランザクション内で入れ子にされているかどうかを決定することを更に備えていてよい。トランザクションが記憶状態トランザクション内で入れ子にされ得ない幾つかの実施形態においては、ステップ５１０からの肯定の出口によって示されるように、親トランザクションが記憶状態トランザクションであることの検知に応答して、ＡＳＦメカニズムは、ステップ５１５にあるように、一般的な保護障害を提起するように（又は何らかの他の動作をとるように）設定されてよい。幾つかの実施形態においては、その時点での実行のモードを示すために用いられるレジスタ又はメモリロケーションが、親トランザクションが記憶状態モードで実行しているかどうかを決定するために読み込まれてよい。更なる実施形態においては、トランザクションの有効性に対する種々の他の照合が実行されてよく、また１つ以上が違反している場合にはＧＰ障害が提起されてよい。
【００４８】
図示された実施形態によると、トランザクションが有効である（例えば、最大ネスティング深さを超えておらず且つ記憶状態トランザクション内で入れ子にされていない）場合には、ｒＡＸレジスタ（又は他の適切なレジスタ）が、例えばそれをゼロ値にセットすることによってリセットされてよい。幾つかの実施形態においては、ｒＡＸレジスタは、以下に説明されるようにトランザクション実行状態を示す種々の値及びコードを保持することができる。
【００４９】
図示された実施形態によると、ＳＰＥＣＵＬＡＴＥの実行は、次いでステップ５３０にあるようにトランザクションがトップレベルトランザクションであるかどうかを決定してよい。幾つかの実施形態においては、この決定は、その時点のトランザクションが入れ子にされているかどうかを決定するために、インクリメントされたネスティングレベルの値を照合することを備えていてよい。ステップ５３０からの肯定の出口によって示されるように、トランザクションがトップレベルトランザクションである場合には、ＳＰＥＣＵＬＡＴＥを実行することは、トランザクションが中断されたときにプロセッサが所与の後退点まで実行を戻すのに用いることができる情報を含む照合点を記録することを備えていてよい。幾つかの実施形態では、照合点を記録することは、ＳＰＥＣＵＬＡＴＥ命令が実行された後に、ステップ５３５及び５４０にあるように、命令ポインタ（例えばｒＩＰ２１４）及びスタックポインタ（例えばｒＳＰ２１２）が即座に有することになる値を記録することを含んでいてよい。従って、中断の場合には、記録された照合点は、ＳＰＥＣＵＬＡＴＥ命令のすぐ後に続く命令に制御を移管するために用いることができる。幾つかの実施形態においては、ＳＰＥＣＵＬＡＴＥ命令を実行することは、１つ以上の他のレジスタ、例えばｒＦＬＡＧＳレジスタ２１８における値がプロセッサ状態を示すようにこれらを設定又は修正することを更に備えていてよい。
【００５０】
幾つかの実施形態においては、ＳＰＥＣＵＬＡＴＥ命令は後退モードにあるトランザクションを開始してよいが、異なる命令（例えばＢＥＧＩＮ）が記憶状態モードにあるトランザクションを開始してもよい。
【００５１】
図６は幾つかの実施形態に従いＢＥＧＩＮ命令を実行するステップを示している。方法６００はトランザクションに対する１つ以上の有効状態を決定することによって開始してよい。幾つかの実施形態においては、これらの状態は、ＳＰＥＣＵＬＡＴＥトランザクションを実行するときに照合される状態と類似していてよい。例えば方法６００においては、ＢＥＧＩＮを実行することは、最大ネスティングレベルに到達したかどうか（ステップ６０５にあるように）を決定することと、その時点でのトランザクションが他の記憶状態セクション内で入れ子にされているかどうか（ステップ６１０にあるように）を決定することとを備えている。いずれかの条件が真である場合には（ステップ６０５及び６１０からの肯定の出口によってそれぞれ示されている）、ＡＳＦメカニズムは、ステップ６１５にあるように、ＧＰ又は他の障害を提起するように設定されてよい。そうでない場合には、方法６００によると、ＢＥＧＩＮを実行することは、ステップ６２０にあるようにｒＡＸ又は他のレジスタをリセット（例えばゼロに）することと、ネスティングレベルをインクリメントすることと（ステップ６２５にあるように）、その時点でのトランザクションが記憶状態モードにあることを示すフラグをセットすることと（ステップ６３０にあるように）、トランザクション本体のトランザクションの実行に進むことと（ステップ６３５にあるように）を含んでいてよい。種々の実施形態においては、ステップ６３０におけるフラグセットは、ステップ５１０及び６１０にあるように、その時点でのトランザクションが記憶状態モードにあるかどうかを決定するために用いることができる。
【００５２】
幾つかの実施形態においては、ＡＳＦメカニズムは、どのメモリロケーションがトランザクションの一部として保護されるべきか（即ちアトミックアクセスが望まれるメモリロケーション）を指定するために、宣言子と称される種々のメモリ参照命令を定義することができる。例えば幾つかの実施形態においては、ＡＳＦメカニズムは、標準的なｘ８６＿ＭＯＶ命令に類似する、メモリを読み出すための宣言子メモリアクセス命令を顕在化することができる。従来のＭＯＶ命令と同様に、メモリからの複数の値をロードするために、ＡＳＦ定義のＬＯＣＫ＿ＭＯＶ命令を用いることができる。しかし、幾つかの実施形態によると、スレッドがＬＯＣＫ＿ＭＯＶ命令を用いてトランザクション内のメモリロケーションを読み出す場合、ＡＳＦメカニズムは、参照されたメモリロケーションの第１バイトを含むメモリキャッシュブロックを一連の保護されたキャッシュブロックに付加してよい。幾つかの実施形態においては、ソフトウエアメカニズムは、整列させられていない(unaligned)メモリアクセスが、保護されたライン及び保護されていないラインの両方に渡る(span)ことがないことを確実にすることができる。幾つかの実施形態によると、既に保護されているキャッシュブロックを参照する宣言子命令は、通常のメモリ参照と同様の挙動を示してよく、またブロックの保護された状態を変化させないであろう。幾つかの実施形態においては、宣言子はクリティカルセクションの外側では許可されなくてよい（例えば例外が提起されてよい）。幾つかの実施形態においては、クリティカルセクションの外側での宣言子は、通常のメモリ動作と同様に処理されてよい。これは記憶状態モードが利用可能な幾つかの実施形態の場合となろう。
【００５３】
幾つかの実施形態においては、ＡＳＦメカニズムはＬＯＣＫ＿ＭＯＶ命令の他に宣言子も定義してよい。例えば、ｘ８６＿ＰＲＥＦＥＴＣＨ及び／又はＰＲＥＦＥＴＣＨＷに類似した命令が用いられてよい（例えばＬＯＣＫ＿ＰＲＥＦＥＴＣＨ、ＬＯＣＫ＿ＰＲＥＦＥＴＣＨＷ）。これらと同様、ｘ８６アナログ、ＬＯＣＫ＿ＰＲＥＦＥＴＣＨ及びＬＯＣＫ＿ＰＲＥＦＥＴＣＨＷが、（ＰＲＥＦＥＴＣＨ）の読み出し又は（ＰＲＥＦＥＴＣＨＷ）の書き込みに対してメモリからキャッシュへ値をフェッチ(fetch)するために用いられてよい。しかし、ＬＯＣＫ接頭辞のない標準的なプリフェッチ(prefetches)と異なり、ＬＯＣＫ＿ＰＲＥＦＥＴＣＨ及びＬＯＣＫ＿ＰＲＥＦＥＴＣＨＷはメモリロケーションを保護させることができる。また幾つかの実施形態においては、ＬＯＣＫ＿ＰＲＥＦＥＴＣＨ及びＬＯＣＫ＿ＰＲＥＦＥＴＣＨＷは、解釈障害(translation faults)及びメモリアクセス許可（それぞれ読み出し又は書き込み）に対して、指定されたメモリアドレスを照合することもでき、また不成功の場合にはページ障害を生成することができる。幾つかの実施形態においては、ＬＯＣＫ＿ＰＲＥＦＥＴＣＨ及びＬＯＣＫ＿ＰＲＥＦＥＴＣＨＷは、データ分断点が構成されたメモリアドレスを参照する場合における＃ＤＢ例外を生成することができる。
【００５４】
幾つかの実施形態においては、メモリロケーションが宣言子を用いて一旦保護されたならば、当該メモリロケーションは、当該トランザクション内で再度推測的に、しかし非推測的にではなく修正されてよい。例えば幾つかの実施形態においては、ＬＯＣＫ＿ＭＯＶ読み出し命令を用いてメモリロケーションが読み出された後、そのメモリロケーションに記憶されている値は、ＡＳＦ定義のＬＯＣＫ＿ＭＯＶ記憶命令を用いて推測的に修正されてよい。実施形態によると、そのような推測的な更新は、そのトランザクションがコミットされている場合にのみ可視的になってよい。そのような実施形態によると、トランザクションの試行が中断された場合、推測的な更新は後退され且つ／又は破棄される。幾つかの実施形態においては、トランザクションの実行の間、宣言子を用いて保護されたメモリロケーションは、推測的な記憶命令を用いてのみ修正されてよい。そのような実施形態においては、トランザクションのモードにあるスレッドが、従来の非推測的な記憶動作を用いて、保護されたメモリロケーションの値を修正しようとする場合、ＡＳＦメカニズムは例外／障害（例えば＃ＧＰ（０））を提起することがある。
【００５５】
幾つかの実施形態においては、推測的な記憶命令（例えばＬＯＣＫ＿ＭＯＶ）がクリティカルセクション外で実行されている場合には、例外が提起されてよい。記憶状態モードが利用可能であるような他の実施形態においては、クリティカルセクション外での推測的な記憶は動作不能(no-op)として取り扱われてよい。
【００５６】
種々の実施形態において、宣言子メモリ命令はシステムのキャッシュコヒーレンスプロトコルに関与してよい。例えば、メモリロケーションを読み込むためのＬＯＣＫ＿ＭＯＶ又はＬＯＣＫ＿ＰＲＥＦＥＴＣＨ命令がキャッシュ内でミスした場合、システムのキャッシュコヒーレンスプロトコルによる指示に従って、非無効化プローブ(probe)が他のプロセッサへ送られてよい。他の例においては、排他的な／所有に係る状態にあるローカルキャッシュ内に所与のキャッシュラインが既にない場合には、ＬＯＣＫ＿ＭＯＶ命令を用いてそれを修正しようとすることは、結果として、システムのキャッシュコヒーレンスプロトコルの指示に従って無効化プローブを他のプロセッサに送ることをもたらすことがある。幾つかの実施形態においては、ＬＯＣＫ＿ＰＲＥＦＥＴＣＨＷ命令の実行もまた、無効化プローブ等を送ることを結果としてもたらすであろう。
【００５７】
種々のＡＳＦメカニズムが、保護されたメモリロケーション（例えば保護されたキャッシュブロック）を監視し且つ／又は強化するために用いられてよい。幾つかの実施形態においては、どのキャッシュライン（即ちブロック）が保護されているのかを示すために、ＡＳＦメカニズムは１つ以上のシステムのキャッシュへの拡張を含んでいてよい。例えば１つの実施形態においては、所与のキャッシュ内の各ラインは「保護された」フラグを備えていてよく、そのフラグは、その時点で実行中のトランザクション内でそのキャッシュラインが保護されている場合にセットされ、また保護されていない場合に非セットにされる。幾つかの実施形態においては、保護されているフラグは１つ以上のビットを備えていてよい。
【００５８】
幾つかの実施形態においては、保護されたキャッシュラインを追跡するためのＡＳＦメカニズムは固定ラインバッファを備えていてよい。そのような実施形態においては、保護されたメモリロケーション内の値が修正されている場合には（例えばＬＯＣＫ＿ＭＯＶ命令によって）、キャッシュブロック及びそれによって保持されている修正前の値を示すために、固定ラインバッファへのエントリが作成されてよい。そのような実施形態では、トランザクションの中断のイベントにおいて、固定ラインバッファのエントリは、各保護されたキャッシュラインのトランザクション前の値をローカルキャッシュに再記憶させるのに用いることができる。そのような実施形態においては、以下に説明されるように、固定ラインバッファはシステムのキャッシュコヒーレンスプロトコルに関与していてよい。
【００５９】
他の実施形態においては、上述のようにメモリ記憶を取り消すために固定ラインバッファを用いることの代わりに、種々のＡＳＦ実装は、クリティカルセクション内の保護されたメモリロケーションに対する記憶命令が、トランザクションがコミットされるよりも前にキャッシュ及び／又はメモリへ書き込まれることを防止することができる。例えば、ＡＳＦは、内部記憶バッファ内の全てのメモリ修正を保持し且つバッファリングされた複数の値をトランザクションにおける後続のロード動作へ転送するように構成されてよい。そのような実施形態においては、一旦トランザクションがコミットすると、ＡＳＦメカニズムは、内部記憶バッファ内にバッファリングされた複数の記憶動作がキャッシュへ書き戻されることを許容することができる。
【００６０】
幾つかの実施形態においては、種々のＡＳＦハードウエア構成部分の固定された能力に起因して、トランザクション（又は一連の入れ子にされたトランザクション）の間に同時に保護することのできるメモリロケーションの数に関して種々の制限が存在し得る。例えば上述したように幾つかの実施形態によると、クリティカルセクションの期間のために全ての保護されたメモリロケーションがデータキャッシュ（例えばメモリキャッシュ２３０）内に同時にあるような実装が必要になり得る。そのような実施形態においては、保護されたラインがトランザクションの間にキャッシュから退避させられた場合には（例えば容量の制約に起因して）、クリティカルセクションは中断されてよい。例えば、保護されたメモリロケーションＮ＋１がアクセスされるときに少なくとも１つの保護されたキャッシュラインは退避させられているであろうから、Ｎウエイアソシアティブ(N-way associative)データキャッシュ内の同一のセットに全てマッピングされたＮ＋１メモリロケーションを参照するように発生したクリティカルセクションは、完了しなくてよい。しかし、更に分散された参照パターンをトランザクションが実行する場合には、任意の１つのキャッシュインデックスが超えられる前であって且つ保護されたラインがデータキャッシュから移される前のＮよりも多くのメモリロケーションを同時に保護することが可能になるであろう。
【００６１】
種々の実施形態においては、キャッシュアソシアティビティ(cache associativity)以外にも容量制限があり得る。例えば固定ラインバッファが用いられている実施形態においては、同時に保護され修正されるメモリロケーションの最大数は、固定ラインバッファの容量によって決定され得る。他の例において記憶バッファリングスキームを利用する実施形態では、ＡＳＦハードウエア能力は、記憶バッファの容量（即ちシステムパイプラインによって支持されている未解決の(outstanding)記憶の最大数）に依存するであろう。
【００６２】
種々の実施形態では、ＡＳＦメカニズムは、保護されたロケーションの数が所与の最大保証容量を超えない限りにおいて、不十分なハードウエア能力に起因してクリティカルセクションが機能しなくなることのないように保証することができる。種々の実施形態においては、保護されたメモリロケーションが、キャッシュ可能なアドレス空間内の何処にあるかにかかわらず、この保証が可能である。例えば、保護された全てのメモリロケーションがデータキャッシュ内に同時にあることを必要とする実施形態においては、最小保証容量はデータキャッシュのアソシアティビティ（即ちアソシアティビティセットのサイズ）に依存するであろう。種々の実施形態においては、トランザクションがハードウエア能力を超えた場合には、トランザクションの試行は中断してよい。
【００６３】
幾つかの実施形態においては、ＡＳＦメカニズムは、トランザクションを実行しているスレッドが、修正されずに保護されているメモリロケーションをトランザクションの一連の保護されているメモリロケーションから取り除くことを可能にしてよい。幾つかの実施形態においては、このことは、ＡＳＦによって提供される明示的なＲＥＬＥＡＳＥ命令を当該スレッドが実行することによって達成され得る。幾つかの実施形態においては、保護されているメモリロケーションが解除された(released)場合（例えばＲＥＬＥＡＳＥ命令を用いて）、そのメモリロケーションはもはや他のスレッドとの競合を監視されない。例えば、保護されたフラグが利用される実施形態においては、解除されたキャッシュブロックに関連するその保護されたフラグの値は、当該ブロックがもはや保護されていないことを示すように修正されてよい。このように、修正されずに保護されているメモリロケーションを一連の保護されているメモリロケーションから取り除くことによって、スレッドは、トランザクション中断を招くであろう、他のスレッドとの不必要なデータ矛盾、及び／又はＡＳＦ実装のハードウエア能力を超えることを回避することができる。幾つかの実施形態においては、ＲＥＬＥＡＳＥ命令は、指定された保護されているメモリロケーションが解除されるであろうことを保証してよいし、保証しなくてもよい。幾つかの実施形態においては、修正されたことのない保護されたキャッシュラインのみが解除されてよい。
【００６４】
上述したように、幾つかの実施形態においては、ＡＳＦ実装の容量よりも多くのメモリロケーション（例えばキャッシュブロック）を保護する（宣言子を用いて）ことをトランザクションが試行た場合には、そのトランザクションは中断されてよい。他の実施形態においては、中断は提起されている障害に応答して実行されてよい。
【００６５】
種々の実施形態において、トランザクション中断は、不十分なハードウエア能力以外の条件によっても生じることがある。例えば、メモリ競合、つまり保護されているメモリロケーションにアクセスしようと試行している他のプロセッサに起因する干渉によっても中断が生じ得る。種々の実施形態において、ＡＳＦメカニズムは、１つ以上の保護されたキャッシュラインに関連していてよくまたデータ矛盾が存在することを当該プローブが示しているかどうかを決定してよい種々のキャッシュコヒーレンスメッセージ（例えば無効化及び／又は非無効化プローブ）を検知するように構成されてよい。データ矛盾を検知することに応答して、ＡＳＦメカニズムはトランザクションの試行を中断してよい。例えば、トランザクションのモードで実行中であり且つメモリロケーションを保護している（即ち宣言子命令を用いてメモリロケーションを読み出している）第１のスレッドを想定する。次いでその保護されているメモリロケーションへの記憶を第２のスレッドが試行する場合、第２のスレッドを実行しているプロセッサは、システムによって展開されている特定のキャッシュコヒーレンスプロトコルに従って、第１のスレッドを実行しているプロセッサに無効化プローブを送ってよい。もしメモリロケーションがまだ保護されている間に（例えば第１のスレッドがそのトランザクションをコミットするかさもなければメモリロケーションを解除するよりも前に）第１のプロセッサが無効化プローブを受け取れば、データ矛盾が存在しているであろう。そのような例においては、ＡＳＦメカニズムは、保護されているメモリロケーションに無効化プローブが関連していることを検知し、それに応答して第１のスレッドのトランザクションを中断するように構成されていてよい。
【００６６】
種々の実施形態によると、保護されているキャッシュラインに関連する無効化プローブが受け取られたことをＡＳＦメカニズムが検知した場合に、トランザクションは中断されてよい。幾つかの実施形態においては、修正され保護されているキャッシュラインに関連する非無効化プローブが受け取られたことをＡＳＦメカニズムが検知した場合にも、トランザクションは中断されてよい。
【００６７】
図７は幾つかの実施形態に従い種々のＡＳＦ実装がどのようにしてデータ競合を処理し得るのかを規定する一連の規則をまとめた表である。図７の表は、第１のプロセッサ（ＣＰＵ＿Ａ）上で実行中の第１のスレッドが所与のメモリロケーションでの所与のメモリアクセス動作を実行している一方で第２のプロセッサ（ＣＰＵ＿Ｂ）上の第２のスレッドが当該ロケーションを保護してきたトランザクションを実行しているときの結果を説明している。上述したように、種々のコヒーレンスプロトコルは、メモリキャッシュが、リードオンリアクセスのための異なる「状態」、例えば「共有された」状態で、又は書き込みアクセスのための「所有された」若しくは「排他的な」状態でメモリ値をキャッシュすることを可能にする。「保護され共有されている」及び「保護され所有されている」の列は、それぞれ共有され及び所有された状態での保護されたキャッシュラインに対応している。
【００６８】
例えば、図７の表の上段の項目は、１つの実施形態に従って状況をどのように処理するのかを列挙しており、ＣＰＵ＿Ａは任意のモード（クリティカルセクションの内側又は外側）で実行中であると共に、共有された又は所有された状態のいずれかでＣＰＵ＿Ｂが保護しているメモリロケーションに対する読み出し動作を実行している。図示された実施形態によると、所有された状態でＣＰＵ＿Ｂがロケーションを保護している場合には、ＣＰＵ＿Ｂのトランザクションは中断し、さもなければＣＰＵ＿Ｂのトランザクションは中断しない。ＣＰＵ＿Ａが任意のモードでプリフェッチ動作を実行したか又はＣＰＵ＿Ａがトランザクションの内部からのＬＯＣＫ＿ＭＯＶ若しくはＬＯＣＫ＿ＰＲＥＦＥＴＣＨ動作を実行した場合には、同様の結果となることになる。しかし、図示された実施形態によると、ＣＰＵ＿Ａが、任意のモードでメモリロケーションに対して書き込み若しくはＰＲＥＦＥＴＣＨＷ動作を実行し又はトランザクションのモードでメモリロケーションに対してＬＯＣＫ＿ＰＲＥＦＥＴＣＨＷ動作を実行することになっていた場合には、共有された又は所有された状態でメモリを保持しているかどうかにかかわらず、ＣＰＵ＿Ｂは当該トランザクションを中断することになる。
【００６９】
幾つかの実施形態においては、トランザクションはＡＳＦ定義のＡＢＯＲＴ命令を用いて明示的に中断することができる。幾つかの実施形態においては、許可されていない命令、例えば遠方制御転送をもたらすような命令を試行ていることを理由として、トランザクションは中断され得る。種々の実施形態において、遠方制御転送は、例えばｘ８６実装におけるＣＳレジスタの内容を変更することにより制御を他のセグメント内のロケーションへ転送する命令を含んでいてよい。遠方制御転送は、トラップ(traps)、フォールト(faults)、例外、ＮＭＩｓ、ＳＭＩｓ、マスクされず且つ非繰り延べの割り込み、例外に変換される許可されていない命令、等を含んでいてよい。幾つかの実施形態においては、許可されない命令は、高められた特権レベル（例えばＣＰＬ＝０）で実行される必要のある命令のような特権のある(privileged)命令、遠方制御転送又は例外を生じさせる命令、及びセキュアバーチャルマシン（ＳＶＭ）ハイパーバイザ(hypervisor)によって割り込まれる可能性のある任意の命令を含む。幾つかの実施形態において、許可されない命令は以下を含むことがある。
・ＦＡＲ＿ＪＭＰ、ＦＡＲ＿ＣＡＬＬ、ＦＡＲ＿ＲＥＴ
・ＳＹＳＣＡＬＬ、ＳＹＳＲＥＴ、ＳＹＳＥＮＴＥＲ、ＳＹＳＥＸＩＴ
・ＩＮＴ、ＩＮＴｘ、ＩＲＥＴ、ＲＳＭ
・ＢＯＵＮＤ、ＵＤ２
・ＰＵＳＨＦ、ＰＯＰＦ、ＰＡＵＳＥ、ＨＬＴ、ＣＰＵＩＤ、ＭＯＮＩＴＯＲ、ＭＷＡＩＴ、ＲＤＴＳＣ、ＲＤＴＳＣＰ、ＲＤＰＭＣ
・ＩＮ、ＯＵＴ
・全ての特権のある命令
・全てのＳＶＭ命令
【００７０】
ここで用いられるＳＶＭ命令という用語は、バーチャルマシンモニタ及び／又はバーチャルマシンが複数のバーチャルマシンの境界を越えて相互作用するために用いることのできる任意の命令を参照する。種々の実施形態において、そのような命令は、限定はされないが、ＶＭＲＵＮ（即ちバーチャルマシンを動作させる）、ＶＭＬＯＡＤ／ＶＭＳＡＶＥ（即ち種々のバーチャルマシン状態をプロセッサ及び／又はメモリ内のセーブ領域にロード／セーブする）、及び／又はＶＭＭＣＡＬＬ（即ちバーチャルマシンモニタに対するシステム呼び出しを実行する）を含んでいてよい。
【００７１】
種々の実施形態において、バーチャルマシンは、プロセッサにおいて設定可能な一連の命令の実行を、例えば当該動作を遮断することによって阻んでよい。そのような命令はここでは「遮断可能(interceptable)」と称されることがある。幾つかの実施形態によると、種々の又は全てのＳＶＭ命令は遮断可能である。幾つかの実施形態においては、トランザクション内での任意の遮断可能な命令の実行は、そのトランザクションを中断させてよい。
【００７２】
幾つかの実施形態においては、ＡＳＦメカニズムは、バーチャル化された環境（例えばバーチャルマシン）において自然の環境とは異なるように動作するトランザクション内で命令を禁止することができる。そのような制限を課すことによって、実施形態を完全にバーチャル化可能にすることができ、従って当該命令がバーチャル環境で実行されたときに引き起こすであろう予測不能な又は不正確な挙動に煩わされることなく実施形態をバーチャルマシン内で用いることができる。例えば幾つかの実施形態においては、全ての遮断可能な命令はトランザクション内で禁止されてよい。幾つかの実施形態においては、バーチャルマシン特有の命令及び／又は特権のある命令は禁止されてよい。
【００７３】
幾つかの実施形態においては、クリティカルセクション内で許可されていない又は遠方制御転送を引き起こす命令の実行を試みることは、例外（例えば＃ＧＰ例外）を生じさせることがあり、その例外はトランザクションの試行を中断させてるかもしれない。幾つかの実施形態においては、遠方制御転送は中断の後に実行されてよい。そのような実施形態においては、遠方制御転送（又は許可されていないトランザクションにより生じる例外によって呼び出される障害ハンドラ）からのリターンの場合には、ソフトウエアリカバリルーチンが実行されてよい。
【００７４】
上述したように、種々の実施形態においては、ＡＳＦメカニズムは、ハードウエア能力制限、他のスレッドとのメモリ競合、許可されていない命令（例えば遠方制御転送）を実行しているスレッド、及び／又はスレッドが明示的なＡＢＯＲＴ命令を実行していることに起因して、トランザクションの試行を中断してよい。
【００７５】
図８は種々の実施形態に従ってＡＳＦメカニズムが後退モードにおけるトランザクションを実行可能な方法を示すフロー図である。方法８００によると、スレッドは、先ずＳＰＥＣＵＬＡＴＥ命令を実行することによって後退モードにおけるトランザクションを開始してよい。図５に詳しくあるように、ＳＰＥＣＵＬＡＴＥを実行することは、命令及びスタックポインタ値を後での使用のために照合点付けること(checkpointing)（即ち保存すること）を含んでいてよい。しかし、幾つかの実施形態においては、トランザクションが他のトランザクション内で入れ子にされている場合には、照合点は既に存在していることがあり、また図５にあるように、ＳＰＥＣＵＬＡＴＥ命令は他の照合点が記録されることを結果としてもたらさないであろう。
【００７６】
ＳＰＥＣＵＬＡＴＥ命令を実行した後、スレッドは、ステップ８１０にあるように中断状態がセットされたかどうかを決定してよく、セットされていれば、ステップ８１５にあるようにリカバリルーチンへジャンプしてこれを実行してよい。幾つかの実施形態においては、種々の中断状態コードが配置されているであろう１つ以上のレジスタ（例えばｒＡＸレジスタ）を調べることによって、中断状態コードがセットされたかどうかをソフトウエアが決定してよい。幾つかの実施形態においては、前回のトランザクションの試行が中断されたかどうか及びその理由を、異なる複数の中断状態コードが示してよい。種々の実施形態においては、前回のトランザクションの試行が中断されなかったこと又は競合、容量の制約、許可されていない命令の実行、遠方制御転送、若しくは他の理由によって中断されたことを示すような異なる複数の中断状態コードがセットされてよい。幾つかの実施形態においては、単一又は複数のリカバリルーチン８１５が、決定された中断状態コードに応じて異なる複数のリカバリ動作をとってよい。例えば幾つかの例では、単一又は複数のリカバリルーチン８１５は、ＡＳＦを用いるトランザクションの実行をスレッドが再試行すべきでないことを決定してよい。
【００７７】
方法８００によると、スレッドは次いでトランザクション本体の実行を開始してよく、トランザクション本体は、ステップ８２０にあるように、幾つかの保護されているメモリロケーションを保護することを含んでいてよい。幾つかの実施形態においては、メモリロケーションを保護することは、ＬＯＣＫ＿ＭＯＶのような上述した種々の宣言子命令を用いて実行することができる。幾つかの実施形態においては、各保護されているメモリロケーションのキャッシュブロックに対応する保護されているフラッグが、当該ロケーションが保護されていることを示すためにセットされてよい。図８の図示された例によると、トランザクション本体を実行することは、ステップ８２５にあるように、１つ以上の保護されているメモリロケーションへ書き込むことを更に含んでいてよい。幾つかの実施形態においては、このことは、ＬＯＣＫ＿ＭＯＶのような上述した種々の推測的な記憶動作を用いて実行することができる。固定ラインバッファを利用する実施形態においては、保護されているメモリロケーションへ書き込むことは、修正されていない値をその固定ラインバッファに記憶することと、次いでローカルキャッシュに対する書き込み動作を実行することとを含んでいてよい。
【００７８】
方法８００によると、ステップ８３０からの肯定の出口で示されるように、実行の間に中断状態が引き起こされてよい。上述したように、種々の例において、中断状態は、他のスレッドとの競合、容量の制約、遠方制御転送、許可されなかった命令、及び／又は明示的なＡＢＯＲＴ命令を実行しているスレッドによって生じ得る。中断状態が検知された場合（ステップ８３０からの肯定の出口）、ＡＳＦメカニズムは、全ての保護されているメモリロケーションに対して部分的に実行されたトランザクションによって作成されたいかなる修正をも破棄するように設定されてよい。
【００７９】
種々の実施形態においては、ステップ８３５にあるように全ての保護されているメモリロケーションに対する修正を破棄することは、使用されている特定の推測的な実行メカニズムに応じて種々の方法により達成することができる。例えば上述したように、保護されているメモリへの記憶動作の書き戻し段階を遅延するためにＡＳＦが記憶バッファを利用している幾つかの実施形態においては、修正を破棄すること（ステップ８３５にあるような）は、記憶バッファ内で待機している保護されたメモリロケーションに対するいかなる記憶動作をも破棄することを備えていてよい。固定ラインバッファが用いられる幾つかの実施形態においては、修正を破棄すること（ステップ８３５におけるような）は、固定ラインバッファ内に記憶されている各メモリロケーションの複数の古い値（トランザクションによって修正される前における各メモリロケーションの複数の値）をローカルキャッシュに書き戻すことを備えていてよい。
【００８０】
方法８００によると、後退モードにあるトランザクションを中断することは、ステップ８４０にあるように、全ての保護されているメモリロケーションをそれらがもはや保護されないように解除することを更に備えていてよい。例えば、保護されているメモリロケーションを解除することは、中断されたトランザクションによって保護されている各メモリロケーションに付随する１つ以上の保護されているフラグをセットしないことを含んでいてよい。固定ラインバッファを利用する実施形態においては、保護されているメモリロケーションを解除することは、トランザクションにおいて修正された保護されているメモリロケーションに対応する固定ラインバッファのエントリを取り除くことを更に含んでいてよい。
【００８１】
図示された実施形態によると、ＡＳＦメカニズムは次いで、適切な中断状態コードを決定するために中断の原因を決定してよい。幾つかの実施形態においては、ステップ８４５にあるように、ＡＳＦメカニズムは、当該コードを状態レジスタ（例えばｒＡＸレジスタ２１６）内に符号化することによって、中断状態コードを複数のソフトウエアメカニズムへ伝えることができる。
【００８２】
幾つかの実施形態においては、状態レジスタ（例えばｒＡＸレジスタ）は複数の状態コードを同時に保持するために用いることができる。例えば、状態レジスタビットの幾つかのサブセットは中断状態コードを保持するために用いることができる一方で、１つ以上の他のサブセットは付加的な情報を保持することができる。例えば、ＡＢＯＲＴ命令を実行しているスレッドによって中断が生じていた場合には、状態レジスタのビットのサブセットは、呼び出されたときにそのスレッドによってＡＢＯＲＴ命令に渡される１つ以上の値を保持していてよい。幾つかの実施形態においては、状態レジスタのビットのサブセットは、その時点でのトランザクションのネスティング深さの表示を保持することもできる。更なる実施形態においては、状態レジスタにおけるビットの種々のサブセットは、状態情報の他の種々のセットを保持していてよい。
【００８３】
方法８００によると、ＡＳＦメカニズムは次いで、例えばステップ８５０にあるように命令及びスタックポインタを照合点付けられた値まで後退させることによって、トランザクションの開始まで実行を後退させてよい。幾つかの例においては、トランザクションがトップレベルトランザクションである場合には、照合点は、ＳＰＥＣＵＬＡＴＥを実行すること（ステップ８０５にあるような）の一部として記録されたものであってよく、また後退の実行は、ステップ８５０からステップ８１０へのフィードバックループによって示されるように、制御フローをトランザクション本体の開始へ戻すことをもたらしてよい。他の実施形態においては、トランザクションが入れ子にされたトランザクションである場合には、照合点は、トップレベルトランザクション内に記録されたものであってよく、また後退の実行は、制御フローをトップレベルトランザクションの本体の開始へ戻すことをもたらしてよい。このように、幾つかの実施形態においては、入れ子にされたトランザクションを中断することは、その入れ子にされたトランザクションが入れ子にされている全ての親トランザクションを中断することを備えていてよい。
【００８４】
方法８００によると、トランザクション本体は、中断状態が検知されなくなるまで試みられてよい。ステップ８３０の否定の出口によって示されるようにトランザクションの試行が中断なしに完了した場合には、ステップ８５５にあるようにスレッドはトランザクションをコミットしてよい。幾つかの実施形態においては、トランザクションをコミットすることはＣＯＭＭＩＴ命令を実行することを備えていてよい。
【００８５】
図９は幾つかの実施形態に従いＣＯＭＭＩＴ命令を実行することによるようなトランザクションをコミットするための方法を示している。
【００８６】
図９は種々の実施形態に従いＡＳＦメカニズムが記憶状態モードで実行中のトランザクションを中断することができる方法を示すフロー図である。図示された実施形態によると、方法９００はステップ９０５にあるようにトランザクションがアクティブであるかどうかを決定することによって開始してよい。ステップ９０５からの肯定の出口によって示されるように、トランザクションがアクティブである場合には、トランザクションは実行の間に中断しなかったことになる。このように幾つかの実施形態においては、成功した実行を示すコードが状態レジスタ内に記憶されてよい。例えば幾つかの実施形態においては、ステップ９１０にあるように、例えばレジスタ内にゼロの値を記憶することによってｒＡＸレジスタがクリアされてよい。
【００８７】
方法９００によると、トランザクションをコミットすることは、ステップ９１５にあるように実行が記憶状態モードにないことを示すフラグをセットすることと、ステップ９２０にあるようにアクティブトランザクションのネスティングレベルを示すカウンタをデクリメントすることとを更に備えていてよい。幾つかの実施形態においては、ステップ９２５からの否定の出口で示されるように、コミットされつつあるトランザクションが入れ子にされたトランザクションである場合には、トランザクションはステップ９４０にあるように終了してよい。このように幾つかの実施形態においては、入れ子にされたトランザクション内で実行されている推測的な記憶は、入れ子にされたトランザクションがコミットされた後であっても推測的な（且つ競合の影響を受けやすい）ままであってよい。
【００８８】
図９の実施形態によると、ステップ９２５の肯定の出口によって示されているように、トランザクションがトップレベルトランザクションである場合には、ＡＳＦメカニズムは、ステップ９３０にあるように、保護されているメモリロケーションがシステム内の他のスレッドに対してグローバルに可視的(globally visible)であるようにするために、保護されているメモリロケーションに対して全ての修正をコミットしてよい。種々の実施形態においては、保護されているメモリロケーションに対して修正をコミットすることは、用いられている推測的なメカニズムに依存するであろう種々の動作を含んでいてよい。例えば、保護されているメモリに対する推測的な記憶動作が、トランザクションがコミットするまで記憶バッファ内で遅延させられる実施形態においては、修正をコミットすることは、当該値のメモリへの（例えばローカルキャッシュへの及び／又は主メモリへの）書き戻しを実行することを意味するであろう。種々の実施形態においては、トップレベルトランザクションをコミットすることは、ステップ９３５にあるように、全ての保護されているメモリロケーションをそれらがもはやＡＳＦメカニズムによって保護されないように解除することを更に備えていてよい。例えば、保護されているキャッシュブロックを示すために保護されているフラグが用いられる実施形態においては、各保護されているキャッシュブロックに付随する各フラグの値は、キャッシュブロックがもはや保護されていないことを示すようにセットされてよい。このようにＡＳＦメカニズムは、解除されたメモリロケーションに関するアトミック性を確保しておく必要はない。
【００８９】
幾つかの実施形態においては、ステップ９０５からの否定の出口によって示されるように、アクティブでないトランザクションをスレッドがコミットすることを試みると、動作は、実行のモードが記憶状態若しくは後退であるか又はそれ以外であるかに依存するであろう。ステップ９４５からの否定の出口によって示されるように、実行モードが後退である場合には、ＡＳＦメカニズムは例外、例えば＃ＧＰ例外を提起するように設定されてよい。一方、実行モードが記憶状態である場合には（ステップ９４５からの肯定の出口で示されるように）、ＡＳＦメカニズムは、中断状態コードを状態レジスタ、例えばｒＡＸ（ステップ９５５にあるように）内に記憶すると共にステップ９６０にあるようにリカバリルーチンへジャンプするように設定されてよい。トランザクションは次いで必要に応じて再試行されてよい。
【００９０】
図１０は幾つかの実施形態に従い記憶状態モードにあるトランザクションを実行するための方法を示すフロー図である。方法１０００によると、記憶状態モードにあるトランザクションを実行することは、ステップ１００５にあるように、ＢＥＧＩＮ命令を実行することにより開始してよい。幾つかの実施形態においては、ＢＥＧＩＮ命令を実行することは、図６の方法６００を実行することを含んでいてよい。種々の実施形態においては、ＢＥＧＩＮ命令は、記憶状態モードにあるトランザクション実行がアクティブであることを決定するために用いられてよい１つ以上のフラグをセットすることができる。
【００９１】
図示された実施形態によると、トランザクションは次いで、ステップ１０１０にあるように、宣言子命令を用いて１つ以上のメモリロケーションを保護してよい。幾つかの実施形態においては、トランザクションはまた、ステップ１０１５にあるように、ステップ１０１０で保護された１つ以上のメモリロケーションに書き込むことを試行してよい。
【００９２】
方法１０００によると、ステップ１０２５からの否定の出口にあるように、ＡＳＦメカニズムが中断状態（例えば競合、容量制限超過、遠方制御転送、許可されていないトランザクション、等）を検知しない場合には、ステップ１０４０にあるようにスレッドはトランザクションをコミットしてよい。幾つかの実施形態においては、ステップ１０２５にあるようにトランザクションをコミットすることは、図９によって示されるようなコミット命令を実行することを含んでいてよい。
【００９３】
幾つかの実施形態においては、ステップ１０２５からの肯定の出口によって示されるように、実行の間に中断状態が検知された場合には、トランザクションはステップ１０３０にあるように中断されてよい。幾つかの実施形態においては、トランザクションを中断することは、そのトランザクションの記憶動作によって作成された保護されているメモリロケーションへの任意の修正を取り消すかさもなければ破棄することを含んでいてよい。幾つかの実施形態においては、中断の理由（例えば矛盾、容量、許可されなかったトランザクション、等）を示す中断状態コードは、ステップ１０３０にあるように、トランザクションを中断することの一部として記録されてよい。
【００９４】
図示された実施形態によると、トランザクションが中断され（ステップ１０３０にあるように）た後、制御フローはトランザクション本体において継続してよく、またトランザクションは、ステップ１０３５にあるように、保護されているメモリロケーションに対する推測的な記憶を除いて実行され続けてよい。幾つかの実施形態においては、トランザクションの試行が中断された後に、トランザクション本体内に現れる宣言子命令が標準的なメモリ参照（例えば保護されているフラグをメモリロケーションに対してセットしない読み出し命令）として実行されてよく、且つ／又は保護されているメモリロケーションへのアクセスが無視されてよい（例えば動作不能命令として処理されてよい）。
【００９５】
幾つかの実施形態によると、記憶状態モードにあるトランザクションを実行しているスレッドは、そのトランザクションが中断されたか否かを検証するように設定されてよい。例えば幾つかの実施形態においては、スレッドは、トランザクションが未だにアクティブであるかどうか（即ち未だ中断されていないか）を決定するために、ステップ１０４０にあるようにＶＡＬＩＤＡＴＥ命令を実行してよい。幾つかの実施形態においては、ＶＡＬＩＤＡＴＥ命令は、その時点の中断状態コードを、値をソフトウエアによって読み出すことができるプログラム可読状態レジスタ内に（例えばｒＡＸレジスタ内に）コピーすることを実行可能であってよい。トランザクションが中断されなかった場合には、ＶＡＬＩＤＡＴＥ命令は、状態レジスタをトランザクションが未だにアクティブであることを示す値にセットする（例えばｒＡＸを値ゼロにセットする）ことを実行可能であってよい。
【００９６】
図示された実施形態によると、スレッドがＶＡＬＩＤＡＴＥ命令を実行する場合、トランザクションが中断されたかどうかを決定するために状態（例えばｒＡＸ）レジスタが次いで照合されてよい。ステップ１０４５からの否定の出口によって示されるように、トランザクションがアクティブでない場合には、ステップ１０５５にあるようにスレッドは幾つかのリカバリ動作を実行してよい。種々の実施形態によると、リカバリ動作を実行することは、任意の保護されているメモリロケーションを解除し且つ／又は再実行のためにプログラム制御をトランザクションの開始に戻すことを含んでいてよい。ステップ１０４５からの肯定の出口によって示されるように、トランザクションが未だにアクティブである場合には、スレッドはステップ１０５０にあるようにトランザクションの実行を継続し且つ／又はトランザクションをコミットしてよい。
【００９７】
図示された実施形態によると、一旦スレッドがトランザクションの実行を終了すると、ステップ１０５０にあるように、トランザクションをコミットすることが試行されてよい。既に示したように、トランザクションをコミットすることは、例えば図９に示されるようなコミット命令を実行することを含んでいてよい。コミット命令を実行することの一部として、ＡＳＦメカニズムは、トランザクションがアクティブであるかどうか（ステップ９０５にあるように）を検知してよく、アクティブでない場合には、中断状態をソフトウエア可読レジスタ内（例えばステップ９５５にあるようなｒＡＸ内）に記憶すると共にリカバリルーチン（ステップ９６０にあるような）にジャンプしてよく、これらはリカバリ動作１０５５に類似し又は同一であってよい。リカバリルーチンを実行することは、任意の保護されているメモリロケーションを解除し且つ／又は再実行のためにプログラム制御をトランザクションの開始に戻すことを含んでいてよい。幾つかの実施形態においては、１つ以上の後退モードトランザクションにおいてセクションが入れ子にされている場合には、図８を参照して上述したように、当該親トランザクションは中断されてよくまた制御はＳＰＥＣＵＬＡＴＥ命令の最上位レベルによってとられた照合点に戻されてよい。
【００９８】
種々の実施形態においては、プログラマは、ＡＳＦ有効のシステム(ASF-enabled system)のためのトランザクションのメモリプログラミングモデルを利用するアプリケーションを作成することができる。そのような実施形態においては、プログラマは、プログラムが、トランザクションの開始命令（例えばＳＰＥＣＵＬＡＴＥ、ＢＥＧＩＮ、等）を実行することによりトランザクションを開始し、保護されているメモリへの１つ以上のアクセス（例えばＬＯＣＫ＿ＭＯＶ、等）を実行し、次いでトランザクションをコミットするために１つ以上の命令（例えばＣＯＭＭＩＴ）を実行するように、プログラムを作成することができる。
【００９９】
幾つかの実施形態においては、プログラムは、ＡＳＦ有効トランザクションのメモリプログラミングモデルを他の並行制御メカニズム、例えば非ＡＳＦ、固定ベースのコードと共に利用して書かれていてよい。例えばＢツリー(B-tree)のようなデータ構造が考えられる。共有メモリアプリケーションにおける並行スレッドは、ＡＳＦベースのトランザクション用メモリを用いてトランザクション的なロックフリーな方法でＢツリーに対して頻繁な挿入及び削除動作を実行することができる。場合によってはＢツリーは、Ｂツリーの多くのメモリロケーション上でアトミックに動作することを含んでよい動作について効率に対して再度バランスを取られる必要があるかもしれない。しかし、この動作は多くのメモリロケーションを保護することを含むであろうから、それをトランザクションとして完了しようと試行することは、頻繁な中断をもたらす可能性がある。例えば、Ｂツリー上で削除及び／又は挿入動作を実行する他の同時実行中スレッドとの矛盾に起因する矛盾中断が生じることがある。他の例では、同時に多数のメモリロケーションを保護することは、ＡＳＦ実装の容量を超える可能性があり、トランザクションの容量中断をもたらすかもしれない。そのような状況においては、再度バランスをとる動作を実行するトランザクションのメモリを用いるよりはむしろ、従来のロックベースの相互排他(lock-based mutual exclusion)を用いるように構成することによって、動作をより効率的にすることができる。例えば、ロックは、Ｂツリー全体に関連していてよく、またＢツリーへの相互排他的なアクセスに対して獲得され得る。この例では、再度バランスを取る動作は、Ｂツリーに対するロックを獲得し、次いで再度バランスをとることを実行し、その後にロックを解除することによって開始してよい。しかし、そのような例においては、ロックベースの相互排他セマンティックス(semantics)を利用するコードが、ＡＳＦベーストランザクションのメモリセマンティックスを利用するコードと安全に相互運用することを確実にするよう注意が必要である。
【０１００】
図１１は１つの実施形態に従いロックベースのコードと相互運用するＡＳＦベースのトランザクションを設定するための方法を示すフローチャートである。図示された実施形態によると、ステップ１１１０にあるように、例えば上述したようにＳＰＥＣＵＬＡＴＥ又はＢＥＧＩＮ命令を実行することによって、スレッドがトランザクションを開始してよい。
【０１０１】
トランザクション内で保護されている一連のメモリロケーションは、ここではトランザクションの読み出しセットと称されることがある。ロックベースのコードがある場合、トランザクションの読み出しセットはロック(locks)に関連する１つ以上のメモリロケーションを含んでいてよい。あるロックに関連し且つそのロックによって保護されている任意のメモリロケーションは、ここではロック保護されていると称されることがある。
【０１０２】
図示された実施形態によると、ステップ１１２０にあるように、スレッドは、トランザクションの読み出しセット内の各ロック保護されたメモリロケーションに関連する各ロックの値をアトミックに読み出す（例えば宣言子動作を用いて）ように構成されてよい。このように、複数のロックの値をアトミックに読み出すことによって、スレッドはそれらロックをトランザクションの読み出しセットに付加する（即ちＡＳＦメカニズムはロックをトランザクションの一部として監視すると共にそれらを保護する）。例えば、上述のＢツリーの例では、先ずＢツリー構造の全体に関連するロックの値をアトミックに読み出すことによって、トランザクション挿入動作が開始してよい。幾つかの実施形態においては、ロックの値をアトミックに読み出すことは、宣言子動作を用いてロック値を読み出すことを含んでいてよい。
【０１０３】
図示された実施形態によると、スレッドは次いで、ステップ１１２０で読み出された任意のロックが保持されているかどうかを決定してよい。ステップ１１３０からの肯定の出口によって示されるようにどれかが保持されていれば、スレッドはトランザクションを再試行してよい。幾つかの実施形態においては、ステップ１１３０からの否定の出口によって示されるように、全てのロックが自由になるまで、スレッドは各ロックの値を再読み込みすることを継続してよい。幾つかの実施形態においては、任意のロックが保持されていれば、スレッドはトランザクションを中断してよく（例えばＡＢＯＲＴ命令を実行することによって）、次いでトランザクションの実行を再試行してよい。他の実施形態においては、任意のロックが保持されていれば、スレッドは、保護されているメモリロケーション内の値に対してトランザクションが作成した任意の修正を後退させることと、次いでトランザクションをコミットすることとを試行してよい。
【０１０４】
図示された実施形態によると、ステップ１１３０からの否定の出口によって示されるように、一旦スレッドがステップ１１２０で読み出されたロックが保持されていないことを検知すると、スレッドはステップ１１４０にあるようにトランザクション本体の実行を継続してよい。図示された実施形態においては、種々のロックのメモリロケーションは宣言子動作を用いて保護されるので、ロックの値に対する任意の変化（例えばロックを獲得している異なるスレッド）はトランザクションの矛盾中断を引き起こすかもしれない。従って、トランザクション実行の間に中断状態が検知され（例えば獲得されているロックに起因する矛盾中断）、次いでＡＳＦメカニズム及び／又はスレッドは、トランザクションを中断してよく、幾つかのリカバリ動作を実行してよく（ステップ１１６０にあるように）、またトランザクションを再試行してよい（ステップ１１６０からステップ１１２０へのフィードバックループによって示される）。例えば、上述のようなＢツリーの例を継続しながら、Ｂツリーに関連するロックを獲得することを異なるスレッドが試行する（例えば再度バランスをとる動作を実行することの一部として）場合、キャッシュコヒーレンスメッセージが実行中のスレッドへ送られてよく、挿入動作トランザクションの矛盾中断を引き起こすかもしれない。
【０１０５】
図示された実施形態によると、中断状態が検出されない場合（ステップ１１５０からの否定の出口によって示される）、ステップ１１６０にあるようにスレッドはトランザクションをコミットしてよい。
【０１０６】
図１２はここで説明されるＡＳＦの種々の実施形態を実装するように構成されるコンピュータシステムの１つの実施形態を示している。コンピュータシステム１２００は、限定はされないが、パーソナルコンピュータシステム、デスクトップコンピュータ、ラップトップ又はノートブックコンピュータ、メインフレームコンピュータシステム、ハンドヘルドコンピュータ、ワークステーション、ネットワークコンピュータ、コンシューマデバイス、アプリケーションサーバ、記憶デバイス、周辺デバイス、例えばスイッチ、モデム、ルータ等、又は概して任意の種類のコンピューティングデバイスを含む任意の種類のデバイスであってよい。
【０１０７】
コンピュータシステム１２００は複数のプロセッサ１２７０を含んでいてよく、各プロセッサ１２７０は多重コアを含んでいてよく、任意のコアは単一又は多重スレッドのもの（例えば同時多重プロセシング、ハイパースレッディング(Hyperthreading)（商標）、等）であってよい。幾つかの実施形態では、プロセッサ１２７０は、ここで説明されるような推測的記憶バッファを実装するためのロード／記憶キュー１２７４内の推測的な記憶を遅延させることが可能なような動的スケジューリングメカニズム１２７２を含んでいてよい。幾つかの実施形態においては、プロセッサ１２７０は、プロセッサパイプライン内での機内(in-flight)メモリ動作を保持するための種々のロードキュー、記憶キュー、及び／又はロード／記憶キュー、例えばロード／記憶キュー１２７４を含んでいてよい。プロセッサ１２７０はまた、ネスティング深さ、トランザクションのモード、又はトランザクションの状態（アクティブ対非アクティブ）を記録するために用いられるようなレジスタ１２７６、例えばｒＡＸ、ｒＦＬＡＧＳ又は他の特定目的レジスタを含んでいてよい。幾つかの実施形態においては、プロセッサ１２７０は、ここで説明されるような任意の数のＡＳＦハードウエアトランザクションのメモリメカニズム１２７８を含んでいてよい。例えばＡＳＦメカニズム１２７８は、アクティブなトランザクションによって保護されているメモリロケーションを監視するための固定ラインバッファ及び／又はハードウエア論理を含んでいてよい。幾つかの実施形態においては、プロセッサ１２７０はまた種々のキャッシュコヒーレンスメカニズム１２７９を含んでいてよく、キャッシュコヒーレンスメカニズム１２７９は、種々のキャッシュコヒーレンスプロトコル（例えばＭＥＳＩ、ＭＯＥＳＩ、等）を実装するために用いられてよく、またここで説明されるような矛盾中断を検知するためにＡＳＦメカニズムによって用いられてよい。
【０１０８】
コンピュータシステム１２００はまた１つ以上の永続的な記憶デバイス１２６０（例えば光学的記憶装置、磁気的記憶装置、ハードドライブ、テープドライブ、ソリッドステートメモリ、等）を含んでいてよく、記憶デバイス１２６０は例えばファイルシステム１２６２のようなファイルシステムを用いることによってファイルを記憶することができる。コンピュータシステム１２００は多重プロセッサによって共有される１つ以上のメモリ１２１０（例えば１つ以上のキャッシュ、ＳＲＡＭ、ＤＲＡＭ、ＲＤＲＡＭ、ＥＤＯ＿ＲＡＭ、ＤＤＲ＿１０＿ＲＡＭ、ＳＤＲＡＭ、ラムバスＲＡＭ、ＥＥＰＲＯＭ、等）を含んでいてよい。種々の実施形態は、図１２には図示されていない少数の又は付加的な構成部分（例えばビデオカード、オーディオカード、付加的ネットワークインタフェース、周辺デバイス、ネットワークインタフェース、例えばＡＴＭインタフェース、イーサネットインタフェース、フレームリレーインタフェース、等）を含んでいてよい。
【０１０９】
プロセッサ１２７０、単一又は複数の記憶デバイス１２６０、及び共有メモリ１２１０はシステム相互接続１２５０と結合されていてよい。１つ以上のシステムメモリ１２１０はプログラム命令１２２０を含んでいてよい。プログラム命令１２２０は、プラットフォーム固有バイナリ、ＪＡＶＡ（商標）バイトコードのような任意のインタープリタ型言語、若しくはＣ／Ｃ＋＋、ＪＡＶＡ（商標）等のような任意の他の言語、又はこれらの組み合わせにおいて符号化されてよい。
【０１１０】
プログラム命令１２２０は、１つ以上のＡＳＦベーストランザクションのメモリアプリケーション１２２２を実装するように実行可能なプログラム命令を含んでいてよい。各アプリケーション１２２２は多重スレッド化されていてよく、またＡＳＦトランザクションのメモリメカニズムを利用するように構成されていてよい。幾つかの実施形態においては、１つ以上のアプリケーション１２２２は、ここで説明されるようにＡＳＦトランザクションのメモリ命令及び相互排他ロックの両方を用いて動作するように構成されてよい。そのような実施形態においては、共有メモリ１２１０は種々のデータ構造及び変数１２３０を含んでいてよく、そのどれかは１つ以上の相互排他ロック１２４０と関連していてよい。
【０１１１】
幾つかの実施形態においては、プログラム命令１２２０及び／又はＡＳＦベーストランザクションのメモリアプリケーション１２２２は、コンピュータシステム（又は他の電子デバイス）が種々の実施形態に従うプロセスを実行するようにプログラムするために用いることができる命令が記憶されたコンピュータ可読記憶媒体を含んでいてよい製品として提供され得る。コンピュータ可読記憶媒体は、機械（例えばコンピュータ）によって読み出され得る形態（例えばソフトウエア、処理アプリケーション）にある情報を記憶するための任意のメカニズムを含んでいてよい。機械可読記憶媒体は、限定はされないが、磁気記憶媒体（例えばフロッピーディスケット）、光学的記憶媒体（例えばＣＤ−ＲＯＭ）、磁気光学的記憶媒体、リードオンリメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、イレーザブルプログラマブルメモリ（例えばＥＰＲＯＭ及びＥＥＰＲＯＭ）、フラッシュメモリ、プログラム命令を記憶するのに適した電気的な又は他の種類の有形媒体を含み得る。また、プログラム命令は、無形媒体、即ち光学的、音響学的又は他の形態の伝搬信号（例えば搬送波、赤外線信号、デジタル信号、等）を用いて伝えられ得る。
【０１１２】
上述の実施形態は極めて詳細に説明されてきたが、上述の開示が完全に理解されれば種々の変形及び修正が当業者には明らかになろう。後述の特許請求の範囲はそのような全ての変形及び修正を包含するように解釈されることが意図されている。
【産業上の利用可能性】
【０１１３】
この発明は概して共有メモリコンピュータシステムに適用可能である。
【図１】
2011529603.tif 000003
【図２】
2011529603.tif 000004
【図３】
2011529603.tif 000005
【図４】
2011529603.tif 000006
【図５】
2011529603.tif 000007
【図６】
2011529603.tif 000008
【図７】
2011529603.tif 000009
【図８】
2011529603.tif 000010
【図９】
2011529603.tif 000011
【図１０】
2011529603.tif 000012
【図１１】
2011529603.tif 000013
【図１２】
2011529603.tif 000014
【国際調査報告】
2011529603.tif 000015
2011529603.tif 000016
2011529603.tif 000017