(57)【要約】      （修正有）【課題】複数のプロセッサ・コアを含むマルチスレッド・データ処理システムにおいて、変換エントリを無効化する方法を提供する。【解決手段】同時に実行されている複数のハードウェア・スレッドのストレージ修正要求を共有キュー内に受け取る。ストレージ修正要求は、開始ハードウェア・スレッドの変換無効化要求を含む。変換無効化要求が、共有キューから除去され、各々が複数のハードウェア・スレッドのそれぞれと関連した複数のサイドカーの１つにおけるサイドカー論理内にバッファリングされる間に、変換無効化要求が複数のプロセッサ・コアにより受け取られ処理されるように、サイドカー論理は変換無効化要求をブロードキャストする。開始プロセッサ・コアによる変換無効化要求の処理の完了を確認するとサイドカーから変換無効化要求を除去する。複数のプロセッサ・コアの全てで変換無効化要求の処理の完了が、ブロードキャスト同期要求により保証される。【選択図】なし【特許請求の範囲】
【請求項１】
複数のプロセッサ・コアを含むマルチスレッド・データ処理システムにおいて、デッドロックなしに変換エントリを無効化する方法であって、
前記複数のプロセッサ・コアのうちの開始プロセッサ・コアの同時に実行されている複数のハードウェア・スレッドのストレージ修正要求を共有キュー内に受け取ることであって、前記複数のストレージ修正要求は、前記複数のハードウェア・スレッドのうちの前記開始ハードウェア・スレッドの変換無効化要求を含む、受け取ることと、
前記共有キュー内に前記変換無効化要求を受け取ることに応答して、前記共有キューから前記変換無効化要求を除去し、前記変換無効化要求をサイドカー論理内にバッファリングすることと、
前記変換無効化要求がサイドカー論理内にバッファリングされる間に、前記変換無効化要求が前記複数のプロセッサ・コアにより受け取られ処理されるように、前記サイドカー論理が、前記変換無効化要求をブロードキャストすることと、
前記開始プロセッサ・コアによる前記変換無効化要求の処理の完了を確認することに応答して、前記サイドカー論理が、前記サイドカーから前記変換無効化要求を除去することと、
ブロードキャスト同期要求により前記複数のプロセッサ・コアの全てにおける前記変換無効化要求の処理の完了を保証することと、
を含む方法。
【請求項２】
前記開始プロセッサ・コアにおける前記変換無効化要求の処理の完了を確認する確認応答信号を受け取るまで、前記開始プロセッサ・コアが、プログラム順で前記変換無効化要求に従う前記開始ハードウェア・スレッド内の命令のディスパッチを停止することをさらに含む、請求項１に記載の方法。
【請求項３】
前記データ処理システムのシステム・ファブリック上の前記変換無効化要求のブロードキャストのスヌーピングに応答して、変換スヌープ・マシンと関連のあるスヌーピング・プロセッサ・コアにおける前記変換無効化要求の処理の完了を確認する信号を受け取り、その後、非アクティブ状態に戻るまで、変換スヌープ・マシンがアクティブ状態のままであることをさらに含む、請求項１に記載の方法。
【請求項４】
前記変換無効化要求は実効アドレスを指定し、
前記開始処理コアにおいて前記変換無効化要求を受け取ることに応答して、
前記プロセッサ・コアが、前記実効アドレスを変換する１つ又は複数の変換エントリを無効化し、
前記プロセッサ・コアが、前記１つ又は複数の変換エントリに依存する１つ又は複数のメモリ参照要求が前記開始プロセッサ・コアからドレインするのを待ち、その後、
前記プロセッサ・コアが、完了要求を前記共有キューに伝送して、前記開始プロセッサ・コアによる前記変換無効化要求の処理の完了の確認を提供する、
請求項１に記載の方法。
【請求項５】
前記共有キューが前記完了要求を受け取ることに応答して、前記共有キューは、前記サイドカーから前記変換無効化要求を除去するより前に、前記共有キューから前記共有キュー内の全てのより古いストア要求がドレインされることを保証することをさらに含む、請求項４に記載の方法。
【請求項６】
前記完了を保証することは、前記サイドカー論理が、変換同期要求を前記複数のプロセッサ・コアの全てにブロードキャストすることを含む、請求項１に記載の方法。
【請求項７】
前記開始プロセッサ・コアが、第１の同期命令の実行により、前記同期要求を生成することと、
前記開始プロセッサ・コアが、第２の同期命令の実行により、前記変換同期命令に対する後のメモリ参照命令の実行を順序付けること、
をさらに含む、請求項１に記載の方法。
【請求項８】
複数のプロセッサ・コアを含むマルチスレッド・データ処理システムのための処理ユニットであって、前記処理ユニットは、
アドレス変換をキャッシュする変換構造と、
前記変換構造を参照することにより、実効アドレスを実アドレスに変換するメモリ管理ユニットと、
複数のハードウェア・スレッドを同時に実行する実行ユニットであって、前記複数のハードウェア・スレッドのうちの開始スレッドは、対応する変換無効化命令の実行によって変換無効化要求を生成する、実行ユニットと、
前記同時に実行されている複数のハードウェア・スレッドのストレージ修正要求を受け取る共有キューであって、前記複数のストレージ修正要求は前記変換無効化要求を含む、共有キューと、
前記共有キューに結合され、各々が前記複数のハードウェア・スレッドのそれぞれと関連付けられた複数のサイドカーを含む、サイドカー論理と、
を含むプロセッサ・コアを含み、前記処理ユニットは、
前記共有キュー内に前記変換無効化要求を受け取ることに応答して、前記共有キューから前記変換無効化要求を除去し、前記変換無効化要求を前記開始スレッドと関連したサイドカー内にバッファリングすることと、
前記変換無効化要求が前記サイドカー内にバッファリングされる間に、前記変換無効化要求が前記複数のプロセッサ・コアにより受け取られ処理されるように、前記変換無効化要求をブロードキャストすることと、
前記プロセッサ・コアによる前記変換無効化要求の処理の完了を確認することに応答して、前記サイドカーから前記変換無効化要求を除去することと、
ブロードキャスト同期要求により前記複数のプロセッサ・コアの全てにおける前記変換無効化要求の処理の完了を保証することと、
を実行するように構成される、処理ユニット。
【請求項９】
前記処理ユニットは、前記プロセッサ・コアにおける前記変換無効化要求の処理の完了を確認する肯定応答信号を受け取るまで、プログラム順で前記無効化要求に従う前記開始ハードウェア・スレッド内の命令のディスパッチを停止するようにさらに構成される、請求項８に記載の処理ユニット。
【請求項１０】
前記データ処理システムのシステム・ファブリック上の前記変換無効化要求のブロードキャストのスヌーピングに応答して、前記プロセッサ・コアにより前記変換無効化要求の処理の完了を確認する信号を受け取り、その後、非アクティブ状態に戻るまでアクティブ状態のままである、変換スヌープ・マシンをさらに含む、請求項８に記載の処理ユニット。
【請求項１１】
前記変換無効化要求は実効アドレスを指定し、
前記プロセッサ・コアは、前記変換無効化要求を受け取ることに応答して、前記実効アドレスを変換する前記変換構造内の１つ又は複数の変換エントリを無効化する変換シーケンサを含み、
前記プロセッサ・コアは、前記変換無効化要求に応答して、前記１つ又は複数の変換エントリに依存する１つ又は複数のメモリ参照要求が前記プロセッサ・コアからドレインするのを待ち、その後、完了要求を前記共有キューに伝送して前記プロセッサ・コアによる前記変換無効化要求の処理の完了の確認を提供するように構成される、請求項８に記載の処理ユニット。
【請求項１２】
前記共有キューは、前記完了要求を受け取ることに応答して、前記サイドカーから前記変換無効化要求を除去するより前に、前記共有キューから、前記共有キュー内の全てのより古いストア要求がドレインされることを保証する、請求項１１に記載の処理ユニット。
【請求項１３】
前記ブロードキャスト同期要求は、前記サイドカー論理によりブロードキャストされる変換同期要求である、請求項８に記載の処理ユニット。
【請求項１４】
前記プロセッサ・コアが、第１の同期命令の実行により前記同期要求を生成し、
前記プロセッサ・コアが、第２の同期命令の前記実行ユニットによる実行に応答して、前記変換同期命令に対する後のメモリ参照命令の実行を順序付ける、請求項８に記載の処理ユニット。
【請求項１５】
請求項８に記載の複数の処理ユニットと、前記複数の処理ユニットを結合するシステム・ファブリックとを含むデータ処理システム。
【請求項１６】
集積回路を設計、製造、又は試験するための、機械可読ストレージ・デバイス内に有形に具体化された設計構造体であって、
複数のプロセッサ・コアを含むマルチスレッド・データ処理システムのための処理ユニットを含み、前記処理ユニットは、
アドレス変換をキャッシュする変換構造と、
前記変換構造を参照することにより、実効アドレスを実アドレスに変換するメモリ管理ユニットと、
複数のハードウェア・スレッドを同時に実行する実行ユニットであって、前記複数のハードウェア・スレッドのうちの開始スレッドは、対応する変換無効化命令の実行によって変換無効化要求を生成する、実行ユニットと、
前記同時に実行されている複数のハードウェア・スレッドのストレージ修正要求を受け取る共有キューであって、前記複数のストレージ修正要求は前記変換無効化要求を含む、共有キューと、
前記共有キューに結合され、各々が前記複数のハードウェア・スレッドのそれぞれと関連した複数のサイドカーを含む、サイドカー論理と、
を含むプロセッサ・コアを含み、前記処理ユニットは、
前記共有キュー内に前記変換無効化要求を受け取ることに応答して、前記共有キューから前記変換無効化要求を除去し、前記変換無効化要求を前記開始スレッドと関連したサイドカー内にバッファリングすることと、
前記変換無効化要求が前記サイドカー内にバッファリングされる間に、前記変換無効化要求が前記複数のプロセッサ・コアにより受け取られ処理されるように、前記変換無効化要求をブロードキャストすることと、
前記プロセッサ・コアによる前記変換無効化要求の処理の完了を確認することに応答して、前記サイドカーから前記変換無効化要求を除去することと、
ブロードキャスト同期要求により前記複数のプロセッサ・コアの全てにおける前記変換無効化要求の処理の完了を保証することと、
を実行するように構成される、設計構造体。
【請求項１７】
前記処理ユニットは、前記プロセッサ・コアにおける前記変換無効化要求の処理の完了を確認する肯定応答信号を受け取るまで、プログラム順で前記無効化要求に従う前記開始ハードウェア・スレッド内の命令のディスパッチを停止するようにさらに構成される、請求項１６に記載の設計構造体。
【請求項１８】
前記データ処理システムのシステム・ファブリック上の前記変換無効化要求のブロードキャストのスヌーピングに応答して、前記プロセッサ・コアにより前記変換無効化要求の処理の完了を確認する信号を受け取り、その後、非アクティブ状態に戻るまでアクティブ状態のままである、変換スヌープ・マシンをさらに含む、請求項１６に記載の設計構造体。
【請求項１９】
前記変換無効化要求は実効アドレスを指定し、
前記プロセッサ・コアは、前記変換無効化要求を受け取ることに応答して、前記実効アドレスを変換する前記変換構造内の１つ又は複数の変換エントリを無効化する変換シーケンサを含み、
前記プロセッサ・コアは、前記変換無効化要求に応答して、前記１つ又は複数の変換エントリに依存する１つ又は複数のメモリ参照要求が前記プロセッサ・コアからドレインするのを待ち、その後、完了要求を前記共有キューに伝送して前記プロセッサ・コアによる前記変換無効化要求の処理の完了の確認を提供するように構成される、請求項１６に記載の設計構造体。
【請求項２０】
前記共有キューは、前記完了要求を受け取ることに応答して、前記サイドカーから前記変換無効化要求を除去するより前に、前記共有キューから、前記共有キュー内の全てのより古いストア要求がドレインされることを保証する、請求項１９に記載の設計構造体。
【発明の詳細な説明】
【技術分野】
【０００１】
一般に、本発明は、データ処理に関し、特に、マルチスレッド・データ処理システムにおける変換エントリの無効化に関する。
【背景技術】
【０００２】
従来のマルチプロセッサ（ＭＰ）コンピュータ・システムは、（各々が１つ又は複数のプロセッサ・コア及びその種々のキャッシュ・メモリを含むことができる）複数の処理ユニット、入力／出力（Ｉ／Ｏ）デバイス、及び（揮発性とすることも又は不揮発性とすることもできる）システム・メモリ及び不揮発性の大容量記憶装置の両方を含む。メモリ・マップド（memory-mapped）Ｉ／Ｏ操作のための十分なアドレス、並びにオペレーティング・システム及びアプリケーション・ソフトウェアにより利用されるデータ及び命令を提供するために、ＭＰコンピュータ・システムは、一般的に、メモリ・マップドＩ／Ｏデバイス及びシステム・メモリ内の物理ストレージ場所の数よりはるかに多数の実効アドレス（effective address）を含む実効アドレス空間を参照する。従って、メモリ・マップドＩ／Ｏを実行するため、又はシステム・メモリにアクセスするために、実効アドレッシングを利用するコンピュータ・システム内のプロセッサ・コアは、実効アドレスを、特定のＩ／Ｏデバイス又はシステム・メモリ内の物理的記憶場所に割り当てられる実アドレス（real address）に変換しなければならない。
【０００３】
ＰＯＷＥＲ（商標）ＲＩＳＣアーキテクチャにおいて、実効アドレス空間は、多数の均一なサイズのメモリ・ページにパーティション化される。各ページは、ページ・テーブル・エントリ（ＰＴＥ）と呼ばれる、それぞれの関連したアドレス記述子を有する。特定のメモリ・ページに対応するＰＴＥは、メモリ・ページのベース実効アドレス、並びにページ・フレームの関連したベース実アドレスを含む。これにより、プロセッサ・コアが、メモリ・ページ内のあらゆる実効アドレスをシステム・メモリ内の実アドレスに変換することが可能になる。オペレーティング・システム及び／又はハイパーバイザ・ソフトウェアによりシステム・メモリ内に生成されるＰＴＥは、ページ・フレーム・テーブル内に集められる。
【０００４】
メモリ・マップドＩ／Ｏ及びメモリ・アクセス命令（以下、合わせて単に「メモリ参照命令（memory referent instruction）」と呼ぶ）の処理の間に実効アドレスから実アドレスへの変換を促進するために、従来のプロセッサ・コアは、他の変換構造の中でも、プロセッサ・コア内の最近アクセスされたＰＴＥをバッファリングするために、変換ルックアサイド・バッファ（ＴＬＢ）と呼ばれるキャッシュを用いることが多い。もちろん、（例えば、新しいプロセス又はコンテキスト・スイッチの呼び出しに応答して）データがシステム・メモリ内の物理ストレージ場所に移動され、及び、システム・メモリ内の物理ストレージ場所から移動されると、新しいデータの存在を反映させるように、ＴＬＢ内のエントリを更新しなければならず、かつ、システム・メモリから除去された（例えば、不揮発性の大容量記憶装置にページアウトされた）データと関連したＴＬＢエントリを無効化する必要がある。ＩＢＭコーポレーションから入手可能なプロセッサのＰＯＷＥＲ（商標）ラインのような多くの従来のプロセッサにおいては、ＴＬＢエントリの無効化はソフトウェアの責任であり、明示的なＴＬＢ無効化エントリ命令（例えば、ＰＯＷＥＲ（商標）命令セット・アーキテクチャ（ＩＳＡ）におけるＴＬＢＩＥ）の実行を通じて達成される。
【０００５】
ＭＰコンピュータ・システムにおいて、１つのプロセッサ・コア内にキャッシュされたＰＴＥの無効化は、各々の他のプロセッサ・コアがそれぞれのＴＬＢを有し、これが、ターゲットＰＴＥのコピーもキャッシュできるという事実により複雑化なものとなる。全てのプロセッサ・コアにわたるシステム・メモリの一貫した表示を維持するために、１つのプロセッサ・コア内のＰＴＥを無効化すると、他の全てのプロセッサ・コアのＴＬＢ内の同じＰＴＥの無効化が必要になる（存在する場合）。多くの従来のＭＰコンピュータ・システムにおいて、システム内の全てのプロセッサ・コアにおけるＰＴＥの無効化は、開始（initiating）プロセッサ・コア内のＴＬＢエントリ無効化（TLBinvalidate entry）命令の実行、及び、システム内の開始プロセッサ・コアから他の各々のプロセッサ・コアへのＴＬＢエントリ無効化要求のブロードキャストによって達成される。開始プロセッサ・コアの命令シーケンスにおいて、ＴＬＢエントリ無効化命令（又は、複数のＰＴＥが無効化される場合、複数の命令）の後に、全てのプロセッサ・コアによりＴＬＢエントリの無効化が実行されたことを保証する１つ又は複数の同期命令が続くことがある。
【０００６】
従来のＭＰコンピュータ・システムにおいて、ＴＬＢエントリ無効化命令及び関連した同期命令は、厳密にシリアル化される。これは、実行がハードウェア・スレッドの次の命令に進む前に（例えば、ＴＬＢエントリ無効化要求を他のプロセッサ・コアにブロードキャストすることにより）ＴＬＢエントリ無効化命令を含む開始プロセッサ・コアのハードウェア・スレッドが、各々の命令を完全に処理しなければならないことを意味している。このシリアル化の結果として、特にハードウェア・スレッドが複数のＴＬＢエントリ無効化命令を含む場合、少なくとも、ＴＬＢエントリ無効化命令を含む開始プロセッサ・コアのハードウェア・スレッドは、大きな性能上の不利益を被る。
【０００７】
マルチスレッド処理ユニットにおいて、処理ユニットのキュー、バッファ及び他のストレージ・ファシリティの少なくとも一部は、複数のハードウェア・スレッドにより共有される。ＴＬＢＩＥエントリ無効化命令及び関連した同期命令の厳密なシリアル化により、ＴＬＢ無効化シーケンスと関連した特定の要求が、例えばこれらの共有ファシリティにおいてストールする一方で、他のプロセッサ・コアによる要求の処理の確認を待つことになる。適切に処理されない場合、こうしたストールにより、ストレージ・ファシリティを共有する他のハードウェア・スレッドが、高レイテンシ及び／又はデッドロックに直面することがある。
【０００８】
上記を考慮すると、本発明は、マルチスレッド・コンピュータ・システムにおいてＰＴＥのコヒーレンシを維持するための改善された方法を提供するのに有用であり、望ましいことが認識される。
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本発明の目的は、複数のプロセッサ・コアを含むマルチスレッド・データ処理システムにおいて変換エントリを無効化する方法、処理ユニット、データ処理システム、設計構造体を提供することである。
【課題を解決するための手段】
【００１０】
複数のプロセッサ・コアを含むマルチスレッド・データ処理システムの一実施形態によると、同時に実行されている複数のハードウェア・スレッドのストレージ修正要求が共有キュー内に受け取られる。ストレージ修正要求は、開始ハードウェア・スレッドの変換無効化要求を含む。変換無効化要求は、共有キューから除去され、各々が複数のハードウェア・スレッドのそれぞれと関連した複数のサイドカーの１つのサイドカー論理内にバッファリングされる。変換無効化要求がサイドカー内にバッファリングされている間に、変換無効化要求が複数のプロセッサ・コアにより受け取られ処理されるように、サイドカー論理は、変換無効化要求をブロードキャストする。開始プロセッサ・コアによる変換無効化要求の処理の完了を確認することに応答して、サイドカー論理は、サイドカーから変換無効化要求を除去する。複数のプロセッサ・コアの全てにおける変換無効化要求の処理の完了が、ブロードキャスト同期要求により保証される。
【００１１】
一実施形態において、付加的な同期命令（例えば、ＨＷＳＹＮＣ）の実行により、ブロードキャスト同期要求を参照して、後のメモリ参照命令が順序付けられる。
【図面の簡単な説明】
【００１２】
【図１】一実施形態による、例示的なデータ処理システムの高レベル・ブロック図である。
【図２】一実施形態による、例示的な処理ユニットのより詳細なブロック図である。
【図３】一実施形態による、プロセッサ・コア及び低レベル・キャッシュ・メモリの詳細なブロック図である。
【図４】一実施形態による、第１の例示的な変換エントリ無効化命令のシーケンスである。
【図５】一実施形態による、第２の例示的な変換エントリ無効化命令のシーケンスである。
【図６】一実施形態による、マルチプロセッサ・データ処理システムのプロセッサ・コアが変換エントリ無効化命令を処理する例示的な方法の高レベル論理フローチャートである。
【図７】一実施形態による、処理ユニットのサイドカー論理が変換エントリ無効化要求を処理する例示的な方法の高レベル論理フローチャートである。
【図８】一実施形態におる、処理ユニットのスヌーパが変換エントリ無効化要求及び変換同期要求を処理する例示的な方法の高レベル論理フローチャートである。
【図９】一実施形態による、処理ユニットのアービタが変換エントリ無効化要求を処理する例示的な方法の高レベル論理フローチャートである。
【図１０】一実施形態による、プロセッサ・コアの変換シーケンサが変換エントリ無効化要求を処理する例示的な方法の高レベル論理フローチャートである。
【図１１】一実施形態による、処理ユニットのストア・キューが変換無効化完了要求を処理する例示的な方法の高レベル論理フローチャートである。
【図１２】一実施形態による、プロセッサ・コアが変換同期命令を処理する例示的な方法の高レベル論理フローチャートである。
【図１３】一実施形態による、処理ユニットのサイドカー論理が変換同期要求を処理する例示的な方法の高レベル論理フローチャートである。
【図１４】一実施形態による、処理コアがページ・テーブル同期命令を処理する例示的な方法の高レベル論理フローチャートである。
【図１５】一実施形態による、処理ユニットがページ・テーブル同期要求を処理する例示的な方法の高レベル論理フローチャートである。
【図１６】一実施形態による、処理ユニットのスヌーパ論理が、変換無効化要求、変換無効化完了要求、及びページ・テーブル同期要求を処理する例示的な方法の高レベル論理フローチャートである。
【図１７】設計プロセスを示すデータ・フロー図である。
【発明を実施するための形態】
【００１３】
ここで、全体にわたって同様の参照番号が同様の対応する部品を指す図面、特に図１を参照すると、一実施形態による、例示的なデータ処理システム１００を示す高レベル・ブロック図が示される。示される実施形態において、データ処理システム１００は、データ及び命令を処理するための複数の処理ノード１０２を含むキャッシュ・コヒーレント対称型マルチプロセッサ（ＳＭＰ）データ処理システムである。処理ノード１０２は、アドレス、データ及び制御情報を搬送するために、システム相互接続１１０に結合されている。システム相互接続１１０は、例えば、バス状相互接続、スイッチ型相互接続、又はハイブリッド相互接続として実装することができる。
【００１４】
示される実施形態において、各処理ノード１０２は、それぞれが好ましくは集積回路として実現された４つの処理ユニット１０４ａ〜１０４ｄを含むマルチチップ・モジュール（ＭＣＭ）として実現される。各処理ノード１０２内の処理ユニット１０４は、ローカル相互接続１１４によって通信のために結合されており、そのローカル相互接続は、システム相互接続１１０のように、１つ又は複数のバス及び／又はスイッチで実装することができる。システム相互接続１１０及びローカル相互接続１１４は一緒にシステム・ファブリックを形成する。
【００１５】
図２を参照して以下により詳細に説明されるように、処理ユニット１０４はそれぞれ、それぞれのシステム・メモリ１０８へのインターフェースを提供するための、ローカル相互接続１１４に結合されたメモリ・コントローラ１０６を含む。通常、データ処理システム１００内のいずれかの処理ノード１０２のいずれかの処理ユニット１０４におけるプロセッサにより、システム・メモリ１０８内に常駐するデータ及び命令にアクセスし、それらをキャッシュし、修正することができる。従って、システム・メモリ１０８は、データ処理システム１００の分散型共有メモリ・システム・メモリにおける最下位レベルのメモリ・ストレージを形成する。代替的な実施形態において、１つ又は複数のメモリ・コントローラ１０６（及びシステム・メモリ１０８）は、ローカル相互接続１１４ではなく、システム相互接続１１０に結合することができる。
【００１６】
当業者であれば、図１のＳＭＰデータ処理システム１００は、相互接続ブリッジ、不揮発性ストレージ、ネットワーク又は接続されたデバイスへの接続のためのポート等といった、示されていない多くの付加的なコンポーネントを含むことができる。そうした付加的なコンポーネントは、必ずしも、説明される実施形態の理解に必要ではないので、図１には示しておらず、又は本明細書でさらに説明もしない。しかしながら、本明細書で説明される機能強化が様々なアーキテクチャのデータ処理システムに適用可能であり、図１に示される一般化されたデータ処理システムのアーキテクチャに決して限定されるものではないことも理解されたい。
【００１７】
ここで図２を参照すると、一実施形態による、例示的な処理ユニット１０４のより詳細なブロック図が示される。示される実施形態において、各々の処理ユニット１０４は、命令及びデータを処理するための１つ又は複数のプロセッサ・コア２００を含む集積回路である。好ましい実施形態において、各々のプロセッサ・コア２００は、同時マルチスレッディング（simultaneous multithreading、ＳＭＴ）をサポートし、従って、複数のハードウェア・スレッドを同時に独立して実行することができる。
【００１８】
各々のプログラム・コア２００の動作は、マルチ・レベルのメモリ階層によってサポートされ、このメモリ階層は、統合されたメモリ・コントローラ１０６を介してアクセスされる共有システム・メモリ１０８をその最下位レベルで有する。示されるように、共有システム・メモリ１０８は、実効アドレス・実アドレス変換を行って、システム・メモリ１０８内のストレージ場所へのアクセスを可能にするために、複数のページ・フレーム・エントリ（ＰＴＥ）２２２を含むページ・フレーム・テーブル２２０を格納する。その上位レベルでは、マルチレベル・メモリ階層は、１つ又は複数のレベルのキャッシュ・メモリを含み、それは、例証となる実施形態において、各プロセッサ・コア２００内にあり、そのプロセッサ・コア専用のストア・スルー（store-through）・レベル１（Ｌ１）キャッシュ３０２（図３参照）と、各プロセッサ・コア２００用のそれぞれのストア・イン（store-in）・レベル２（Ｌ２）キャッシュ２３０とを含む。示されるキャッシュ階層は、２つのレベルのキャッシュしか含まないが、当業者であれば、代替的な実施形態は、上位レベルのキャッシュのコンテンツを完全に含む、部分的に含む、又は含まない、付加的なレベル（Ｌ３、Ｌ４等）のオンチップ・キャッシュ又はオフチップ・キャッシュ、専用キャッシュ又は共有キャッシュ、インライン・キャッシュ又はルックアサイド・キャッシュを含み得ることを理解するであろう。
【００１９】
各処理ユニット１０４は、ローカル相互接続１１４及びシステム相互接続１１０を含むシステム・ファブリック上の動作のフローの制御、及び、選択されるキャッシュ・コヒーレンシ・プロトコルを実装するのに必要とされるコヒーレンシ通信の実装を担当する統合型及び分散型ファブリック・コントローラ２１６をさらに含む。処理ユニット１０４は、１つ又は複数のＩ／Ｏデバイス（示されない）の取り付けをサポートする統合型Ｉ／Ｏ（入力／出力）コントローラ２１４をさらに含む。
【００２０】
ここで図３を参照すると、一実施形態による、プロセッサ・コア２００及びその関連のある（affiliated）Ｌ２キャッシュ２３０の例示的な実施形態のより詳細なブロック図が示される。
【００２１】
示される実施形態において、プロセッサ・コア２００は、複数のハードウェア・スレッドの同時実行からの命令を実行する１つ又は複数の実行ユニット３００を含む。命令は、例えば、算術命令、論理命令及びメモリ参照命令、並びに変換エントリ無効化命令（以下、ＰＯＷＥＲ（商標）ＩＳＡニーモニックによりＴＬＢＩＥ（Translation Lookaside Buffer Invalidate Entry）と呼ばれる）及び関連した同期命令を含むことができる。実行ユニット３００は、一般に、データ依存性、及び同期命令により要求される明示的な順序付けが観察される限り、いずれの順序でもハードウェア・スレッドの命令を実行することができる。
【００２２】
プロセッサ・コア２００は、実行ユニット３００内のメモリ参照命令の実行により決定されるターゲット実効アドレスを実アドレスの変換を担当するメモリ管理ユニット（memory management unit、ＭＭＵ）３０８を付加的に含む。ＭＭＵ３０８は、変換ルックアサイド・バッファ（ＴＬＢ）、ブロック・アドレス・テーブル（ＢＡＴ）、セグメント・ルックアサイド・バッファ（ＳＬＢ）等などの１つ又は複数の変換構造３１０を参照することにより、実効アドレス−実アドレス変換を行う。これらの変換構造の数及びタイプは、実装及びアーキテクチャによって異なる。存在する場合、ＴＬＢは、ページ・フレーム・テーブル２２０から取り出されたＰＴＥ２２２をキャッシュすることにより、実効アドレス・実アドレス変換と関連したレイテンシを低減させる。変換構造３１０と関連付けられた変換シーケンサ３１２は、変換構造３１０内に保持される実効アドレス・実アドレス変換エントリの無効化を処理し、プロセッサ・コア２００内の実行中（in flight）のメモリ参照命令に対するこうした無効化を管理する。
【００２３】
プロセッサ・コア２００は、プロセッサ・コア２００によりサポートされる複数のハードウェア・スレッドにより共有される種々のストレージ・ファシリティを付加的に含む。複数のハードウェア・スレッドにより共有されるストレージ・ファシリティは、実行ユニット３００による対応するストア及び同期命令の実行により生成されるストア及び同期要求を一時的にバッファリングするＬ１ストア・キュー３０４を含む。Ｌ１キャッシュ３０２はストア・スルー・キャッシュであり、それは下位レベルのキャッシュ階層において（例えば、Ｌ２キャッシュ２３０において）コヒーレンスが完全に決定されることを意味するので、要求はＬ１  ＳＴＱ３０４を通って流れ、次に、バス３１８を介してＬ２キャッシュ２３０に送られて処理される。
【００２４】
複数のハードウェア・スレッドにより共有されるプロセッサ・コア２００のストレージ・ファシリティは、Ｌ１キャッシュ３０２内でミスするロード要求を一時的にバッファリングするロード・ミス・キュー（ＬＭＱ）３０６を付加的に含む。こうしたロード要求はまだ満たされていないので、ロード要求のターゲット実アドレスを得るために用いられたアドレス変換エントリが、ロード要求が満たされる前に無効化された場合、ロード要求は、誤ったメモリ・ページのヒットを受けることになる。従って、ＰＴＥ又は他の変換エントリが無効化される場合、関連する変換エントリにより変換された実効アドレスを再割り当てする前に、その変換エントリに依存するＬＭＱ３０６内のあらゆるロード要求を、ＬＭＱ３０６からドレインし、満たさなければならない。
【００２５】
さらに図３を参照すると、Ｌ２キャッシュ２３０は、キャッシュ・アレイ３３２と、キャッシュ・アレイ３３２のコンテンツのＬ２ディレクトリ３３４とを含む。キャッシュ・アレイ３３２及びＬ２ディレクトリ３３４が従来のもののようにセット・アソシアティブ方式（set associative）であると仮定すると、システム・メモリ１０８内のストレージ場所は、システム・メモリ（実）アドレス内の所定のインデックス・ビットを用いて、キャッシュ・アレイ３３２内の特定の合同クラスにマッピングされる。キャッシュ・アレイ３３２のキャッシュ・ライン内に格納された特定のメモリ・ブロックは、各々のキャッシュ・ライン毎に１つのディレクトリ・エントリを含むＬ２ディレクトリ３３４内に記録される。図３に明白に示されないが、キャッシュ・ディレクトリ３３４内の各ディレクトリ・エントリは、例えば、キャッシュ・アレイ３３２の対応するキャッシュ・ライン内に保持されるメモリ・ブロックの実アドレスを識別するタグ・フィールド、キャッシュ・ラインのコヒーレンシ状態を示す状態フィールド、同じ合同クラス内の他のキャッシュ・ラインに対するキャッシュ・ラインの置換順序を示すＬＲＵ（最長時間未使用）フィールド、及びメモリ・ブロックが関連したＬ１キャッシュ３０２内に保持されるかどうかを示す包含性ビットなどの種々のフィールドを含むことが、当業者により理解されるであろう。
【００２６】
Ｌ２キャッシュ２３０は、インターフェース３１８を介して、Ｌ１  ＳＴＱ３０４からストレージ修正要求及び同期要求を受け取り、そうした要求をバッファリングするＬ２  ＳＴＱ３２０を付加的に含む。Ｌ２  ＳＴＱ３２０は、関連のあるプロセッサ・コア２００の全てのハードウェア・スレッドの要求をバッファリングする統一されたストア・キューであることに留意されたい。従って、スレッドのストア要求の全て、ＴＬＢＩＥ要求及び関連した同期要求は、Ｌ２  ＳＴＱ３２０を通って流れる。大部分の実施形態において、Ｌ２  ＳＴＱ３２０は複数のエントリを含むが、Ｌ２  ＳＴＱ３２０は、深さに関係なく（即ち、単一のエントリ・キューとして実装される場合でも）、デッドロックフリー方式で機能することが必要とされる。このために、Ｌ２  ＳＴＱ３２０は、インターフェース３２１により、関連のあるプロセッサ・コア２００によりサポートされるハードウェア・スレッド毎に１つの要求バッファリング・エントリ（本明細書では「サイドカー（sidecar）」と呼ばれる）３２４を含む関連したサイドカー論理３２２に結合される。従って、Ｌ２  ＳＴＱ３２０において、サイドカー３２４の数は、エントリの数と関連しない。本明細書でさらに説明されるように、サイドカー３２４の使用により、潜在的にデッドロック要求をＬ２  ＳＴＱ３２０から除去することが可能になり、従って、変換エントリの無効化の際、デッドロックは発生しない。
【００２７】
Ｌ２キャッシュ２３０は、それぞれバス３２７及び３２８を介して関連のあるプロセッサ・コア２００により開始されるローカル・ロード要求及びストア要求を受け取り、バス３２９を介してローカル相互接続１１４上でスヌープされる遠隔ロード要求を受け取る、ディスパッチ／応答論理３３６をさらに含む。ローカル・ロード要求及び遠隔ロード要求、ストア要求、ＴＬＢＩＥ要求及び関連した同期要求を含むこうした要求は、ディスパッチ／応答論理３３６により処理され、次に、サービスのために適切な状態機械にディスパッチされる。
【００２８】
示される実施形態において、要求をサービスするためにＬ２キャッシュ２３０内に実装される状態機械は、関連のあるプロセッサ・コア２００から受け取ったロード（ＬＤ）要求及びストア（ＳＴ）要求を独立して同時にサービスする、複数の読み取りクレーム（Read-Claim、ＲＣ）マシン３４２を含む。関連のあるプロセッサ・コア２００以外のプロセッサ・コア２００によって生じる遠隔メモリ・アクセス要求をサービスするために、Ｌ２キャッシュ２３０は、複数のスヌープ（snoop、ＳＮ）マシン３４４も含む。各スヌープ・マシン３４４は、ローカル相互接続１１４からスヌープされた遠隔メモリ・アクセス要求を独立して同時に処理することができる。理解されるように、ＲＣマシン３４２によるメモリ・アクセス要求のサービスは、キャッシュ・アレイ３３２（及びＬ１キャッシュ３０２）内のメモリ・ブロックの置換又は無効化を必要とすることがある。従って、Ｌ２キャッシュ２３０は、キャッシュ・アレイ３３２からのメモリ・ブロックの除去及びライトバックを管理する複数のＣＯ（キャストアウト）マシン３４０も含む。
【００２９】
示される実施形態において、Ｌ２キャッシュ２３０は、ＴＬＢＩＥ要求及び関連した同期要求をサービスするために用いられる複数の変換スヌープ（ＴＳＮ）マシン３４６を付加的に含む。幾つかの実施形態において、ＴＳＮマシン３４６は、例えば、キャッシュ不能な（noncacheable）メモリ・アクセス操作を処理するキャッシュ不能ユニット（ＮＣＵ）（図示されない）など、処理ユニット１０４の別のサブユニット内に実装され得ることを理解されたい。少なくとも１つの実施形態において、データ処理システム１００内の複数のＴＬＢＩＥ同時要求の処理を調整するコンセンサス・プロトコル（本明細書でさらに説明される）の実装を単純化するために、各々のＬ２キャッシュ２３０において、同じ番号のＴＳＮマシン３４６が実装される。
【００３０】
ＴＳＮマシン３４６は全て、バス３５０を介して、プロセッサ・コア２００内の変換シーケンサ３１２に伝送するために、ＴＳＮマシン３４６により処理される要求を選択するアービタ（arbiter）３４８に結合される。少なくとも幾つかの実施形態において、バス３５０は、ＴＳＮマシン３４６の要求のみ伝送するのではなく、Ｌ２キャッシュ２３０からプロセッサ・コア２００へとデータ及び他の操作を戻す統一されたバスとして実装される。変換シーケンサ３１２は、デッドロックを回避するために、非ブロッキング方式でアービタ３４８からの要求を受け付けなければならない。
【００３１】
ここで図４を参照すると、一実施形態による、データ処理システム１００のプロセッサ・コア２００により実行することができる第１の例示的な変換エントリ無効化命令シーケンス４００が示される。命令シーケンス４００の目的は、（ａ）変換エントリがデータ処理システム１００のいずれかのＭＭＵ３０８により再ロードされないように、ページ・フレーム・テーブル２２０内の変換エントリ（例えば、ＰＴＥ２２２）をディスエーブルにすること、（ｂ）データ処理システム１００におけるいずれかのプロセッサ・コア２００によりキャッシュされた変換エントリ（又は、変換エントリと同じ実効アドレスを変換する他の変換エントリ）のあらゆるコピーを無効化すること、及び（ｃ）実効アドレスが再割り当てされる前に、古い変換エントリに依存する全ての未解決のメモリ・アクセス要求をドレインすることである。古い変換エントリに依存するストア要求がドレインする前に変換が更新された場合、ストア要求は、古い変換エントリにより識別されるメモリ・ページを損なうことがある。同様に、変換が再割り当てされる前に、古い変換エントリに依存し且つＬ１キャッシュ３０２をミスするロード要求が満たされなかった場合、ロード要求は、意図したのとは異なるメモリ・ページからデータを読み取り、従って、ロード要求に見えることを意図しないデータを観察する。
【００３２】
命令シーケンス４００は、任意の数の命令に先行しても、任意の命令がこれに続いてもよく、１つ又は複数のストア（ＳＴ）命令４０２から開始する。各ストア命令４０２は、実行時にストア要求を生成させ、関連するシステム・メモリ１０８に伝搬されるとき、ページ・フレーム・テーブル２２０内のターゲットＰＴＥ２２２を無効としてマーク付けする。ひとたびストア要求がページ・フレーム・テーブル２２０においてＰＴＥ２２２を無効としてマーク付けすると、ＭＭＵ３０８は、もはや、ページ・フレーム・テーブル２２０から無効化された変換をロードしない。
【００３３】
命令シーケンス４００における１つ又は複数のストア命令４０２の後に、重量同期（heavyweight synchronization）（即ち、ＨＷＳＹＮＣ）命令４０４が続き、このＨＷＳＹＮＣ命令４０４は、後のＴＬＢＩＥ命令４０６が、プロセッサ・コア２００により再順序付けされ、ストア命令４０２のどれいずれよりも前に実行されないことを保証するバリアである。従って、ＨＷＳＹＮＣ命令４０４は、ＴＬＢＩＥ命令４０６がＰＴＥ２２２のキャッシュされたコピーを無効化した後にプロセッサ・コア２００がＰＴＥ２２２をページ・フレーム・テーブル２２０から再ロードした場合、プロセッサ・コア２００が、ストア命令４０２に起因する無効化を観察したことが保証され、従って、ターゲットＰＴＥ２２２により変換された実効アドレスが再割り当てされ、有効に設定されるまで、ターゲットＰＴＥ２２２を使用しない又は変換構造３１０に再ロードしない。
【００３４】
命令シーケンス４００におけるＨＷＳＹＮＣ命令４０４の後に、少なくとも１つのＴＬＢＩＥ命令４０６が続き、このＴＬＢＩＥ命令４０６は、実行時に、データ処理システム１００全体にわたって全ての変換構造３１０内のＴＬＢＩＥ要求のターゲット実効アドレスを変換するあらゆる変換エントリを無効化する対応するＴＬＢＩＥ要求を生成する。命令シーケンス４００において、１つ又は複数のＴＬＢＩＥ命令４０６に、変換同期（即ち、ＴＳＹＮＣ）命令４０８が続き、このＴＳＹＮ命令４０８は、後続の命令に進むスレッドの実行前に、ＴＬＢＩＥ命令４０６の実行により生成されるＴＬＢＩＥ要求が、データ処理システム１００全体にわたる全ての変換構造３１０内のターゲット実効アドレスの全ての変換の無効化を終了し、今や無効化された変換に依存する全ての以前のメモリ・アクセス要求がドレインされたことを保証する。
【００３５】
命令シーケンス４００は、第２のＨＷＳＹＮＣ命令４１０で終了し、この第２のＨＷＳＹＮＣ命令４１０は、ＴＳＹＮＣ命令４０６がその処理を完了するまで、プログラム順でＨＷＳＹＮＣ命令４１０に続くあらゆるメモリ参照命令の実行を防止するバリアを実施する。このように、ＴＬＢＩＥ要求のターゲット実効アドレスの変換を必要とするいずれのより若いメモリ参照命令も、ＴＬＢＩＥ要求により無効化された古い変換ではなく、新しい変換を受け取る。ＨＷＳＹＮＣ命令４１０は、ページ・フレーム・テーブル内のターゲットＰＴＥ２２２の無効化、変換構造３１０内の変換エントリの無効化、又は古い変換に依存するメモリ参照命令のドレインに直接関係するいずれの機能も有さないことに留意されたい。
【００３６】
ここで開示される本発明の理解を促進するために、図６〜図１１を参照して、ＴＬＢＩＥ命令４０６及びそこから生成されるＴＬＢＩＥ要求を開始から完了まで説明する。図１２及び図１３は、ＴＳＹＮＣ命令４０８及びその対応するＴＳＹＮＣ要求の進行を付加的に示し、これらは、全てのスヌーピング・プロセッサ・コア２００上でＴＬＢＩＥ要求により要求される無効化が完了したことを保証する。
【００３７】
最初に図６を参照すると、一実施形態による、マルチプロセッサ・データ処理システム１００の開始プロセッサ・コア２００が、変換エントリ無効化（例えば、ＴＬＢＩＥ）命令を処理する例示的な方法の高レベル論理フローチャートが示される。示されるプロセスは、単一のハードウェア・スレッドで実施される処理を表し、単一のプロセッサ・コア２００上で複数のこれらのプロセスを同時に（即ち、並行して）実行できること、そしてさらに、データ処理システム１００全体にわたって種々の異なる処理コア２００上で複数のこれらのプロセスを同時に実行できることを意味する。その結果、異なる開始ハードウェア・スレッドにより、データ処理システム１００の種々のプロセッサ・コア２００内にバッファリングされた複数の異なるアドレス変換エントリを同時に無効化することができる。
【００３８】
示されるプロセスがブロック５００から開始し、次に、プロセッサ・コア２００の実行ユニット３００による命令シーケンス４００におけるＴＬＢＩＥ命令４０６の実行を示すブロック５０１に進む。ＴＬＢＩＥ命令４０６の実行は、データ処理システム１００全体にわたって変換構造３１０内にバッファリングされた全ての変換エントリが無効化されるターゲット実効アドレスを決定する。ＴＬＢＩＥ命令４０６の実行に応答して、図３の例示的な実施形態において、サイドカー論理３２２は、スレッド毎に単一のサイドカー３２４のみを含み、一度に、スレッド毎に最大でも１つのＴＬＢＩＥ要求がアクティブであり得ることを意味するので、プロセッサ・コア２００は、開始ハードウェア・スレッド内のあらゆる付加的な命令のディスパッチを停止させる。スレッド毎に複数のサイドカー３２４を有する他の実施形態においては、スレッド毎に、同時にアクティブな複数のＴＬＢＩＥ要求をサポートすることができる。
【００３９】
ブロック５０４において、ＴＬＢＩＥ命令４０６に対応するＴＬＢＩＥ要求が生成され、Ｌ１  ＳＴＱ３０４に発行される。ＴＬＢＩＥ要求は、例えば、要求のタイプ（即ち、ＴＬＢＩＥ）を示すトランザクション・タイプ、キャッシュされた変換が無効化される実効アドレス、及びＴＬＢＩＥ要求を発行した開始プロセッサ・コア２００及びハードウェア・スレッドの表示を含むことができる。Ｌ１  ＳＴＱ３０４内の要求の処理は進行し、ブロック５０６に示されるように、ＴＬＢＩＥ要求は、最終的に、バス３１８を介してＬ１  ＳＴＱ３０４からＬ２  ＳＴＱ３２０へ移動する。次に、プロセスは、開始プロセッサ・コア２００が、バス３２５を介してストレージ・サブシステムから、開始プロセッサ・コア２００によるＴＬＢＩＥ要求の処理が完了したことを示すＴＬＢＣＭＰＬＴ＿ＡＣＫ信号を受け取るまで、開始ハードウェア・スレッド内の命令のディスパッチを控える続けることを示すブロック５０８に進む。（ＴＬＢＣＭＰＬＴ＿ＡＣＫ信号の生成は、図１１のブロック１０１０を参照して以下に説明される。）開始スレッド内の命令のディスパッチが停止されるので、いずれの所定のスレッドについても、Ｌ２  ＳＴＱ３２０及びサイドカー論理３２２内に、一度に２つのタイプの要求のうちの１つしか存在できないので、ＴＳＹＮＣ命令４０８に対応するＴＳＹＮＣ要求による開始スレッドのサイドカー３２４の競合は存在し得ないことも留意されたい。
【００４０】
ブロック５０８におけるＴＬＢＣＭＰＬＴ＿ＡＣＫ信号を受け取ったとの判断に応答して、プロセスはブロック５０８から、プロセッサ・コア２００が開始スレッド内の命令のディスパッチを再開することを示すブロック５１０に進み、従って、図１２を参照して以下に説明されるように、ブロック５１０におけるスレッドの解放により、ＴＳＹＮＣ命令４０８（命令シーケンス４００における次の命令である）の処理を開始することが可能になる。その後、ブロック５１２において、図６のプロセッサが終了する。
【００４１】
ここで図７を参照すると、Ｌ２キャッシュ２３０のサイドカー論理３２２が一実施形態により関連のあるプロセッサ・コア２００のハードウェア・スレッドの変換編取り無効化（例えば、ＴＬＢＩＥ）要求を処理する例示的な方法の高レベルの論理フローチャートが示される。図７のプロセスは、スレッドごとに行われる。
【００４２】
図７のプロセスはブロック６００から開始し、次に、サイドカー論理３２２が、関連のあるプロセッサ・コア２００のハードウェア・スレッドのＴＬＢＩＥ要求がＬ２  ＳＴＱ３２０内にロードされたかどうかを判断することを示すブロック６０２に進む。ロードされていない場合、プロセスは、ブロック６０２において繰り返す。しかしながら、関連のあるプロセッサ・コア２００のハードウェア・スレッドのＴＬＢＩＥ要求がＬ２  ＳＴＱ３２０にロードされている場合、サイドカー論理３２２は、Ｌ２  ＳＴＱ３２０からＴＬＢＩＥ要求を除去し、ＴＬＢＩＥ要求を、インターフェース３２１を介して、開始スレッドに対応するサイドカー３２４に移動させる（ブロック６０４）。Ｌ２  ＳＴＱ３２０からＴＬＢＩＥ要求を除去することにより、関連したプロセッサ・コア２００からの入ってくる要求をＬ２  ＳＴＱ３２０が受け取ることができないため、デッドロックが発生しないことが保証され、こうした要求がＬ２  ＳＴＱ３２０を通って流れることが可能になる。
【００４３】
ブロック６０６において、サイドカー３２４は、インターフェース３２６及びローカル相互接合１１４を介して、コンセンサス・プロトコル（従来のものとすることができる）に関与し、１つ１つのＬ２  キャッシュ２３０における１つ（及び１つのみ）のＴＳＮマシン３４６がそのＴＬＢＩＥ要求を受け取ることを保証する。さらに、コンセンサス・プロトコルは、ひとたび対応するＴＳＮマシン３４６の全てがＴＬＢＩＥ要求を受け取ると、種々のＴＳＮマシン３４６がＴＬＢＩＥ要求をサービスするためのアクションのみを取ることを保証する。その後、プロセスは、説明されたブロック６０２に戻る。
【００４４】
ここで図８を参照すると、一実施形態による、ＴＳＮマシン３４６がＴＬＢＩＥ要求及びＴＳＹＮＣ要求を処理する例示的な方法の高レベル論理フローチャートが示される。示されるプロセスは、各ＴＳＮマシン３４６について独立して同時に実行される。
【００４５】
プロセスがブロック７００から開始し、次にブロック７０２及び７２０に進む。ブロック７０２及び後続のブロック７０４は、コンセンサス・プロトコルを介したＴＬＢＩＥ要求の受信に応答して、ＴＳＮマシン３４６がＴＬＢＩＥ要求をバッファリングし、ＴＬＢＩＥ＿アクティブ状態を呈する。システム・ファブリック１１０、１１４上で、開始プロセッサ・コア２００のＬ２  キャッシュ２３０及び図７のブロック６０６におけるデータ処理システム１００の全ての他のプロセッサ・コア２００のものにブロードキャストされるＴＬＢＩＥ要求は、インターフェース３２９を介してＬ２キャッシュ２３０に受け取られ、ディスパッチ／応答論理３３６により処理され、次にＴＳＮマシン３４６に割り当てられる。上述のように、好ましい実施形態において、コンセンサス・プロトコルは、ＴＳＮマシン３４６が全ての他のＬ２キャッシュ２３０によりＴＬＢＩＥ要求に同様に割り当てられる場合にのみ、ＴＬＢＩＥ要求が、１つのＬ２キャッシュ２３０内のＴＳＮマシン３４６に割り当てられるという状況を実施する。図９のブロック８０２を参照して以下にさらに説明されるように、ＴＬＢＩＥ＿アクティブ状態を呈するＴＳＮマシン３４６は、ＴＬＢＩＥ要求を処理する準備ができていることを、関連したアービタ３４８に知らせる。
【００４６】
ブロック７０６は、信号ライン３３０を介したＴＬＢＣＭＰＬＴ＿ＡＣＫ信号の受信により示されるように、関連したプロセッサ・コア２００によるＴＬＢＩＥ要求の処理（即ち、変換構造３１０内の関連する変換エントリの無効化及びプロセッサ・コア２００からの関連するメモリ参照要求のドレイン）が完了するまで、ＴＳＮマシン３４６が、ＴＬＢＩＥ＿アクティブ状態のままであることを示す。ＴＬＢＣＭＰＬＴ＿ＡＣＫ信号の受信に応答して、ＴＬＢＩＥ＿アクティブ状態がリセットされ、ＴＳＮマシン３４６は、再割り当てのために解放される（ブロック７０８）。その後、図８のプロセスは、ブロック７０８から、説明されたブロック７０２に戻る。
【００４７】
ここでブロック７２０〜７２４を参照すると、ＴＳＮマシン３４６は、ブロック７２０において、ブロック７０４において確立されたＴＬＢＩＥ＿アクティブ状態にあるかどうかを判断する。ＴＬＢＩＥ＿アクティブ状態にない場合、プロセスは、ブロック７２０において繰り返す。しかしながら、ＴＳＮマシン３４６が、ブロック７０４において確立されたＴＬＢＩＥ＿アクティブ状態にある場合、ＴＳＮマシン３４６は、そのＴＬＢＩＥ要求の開始ハードウェア・スレッドのＴＳＹＮＣ要求が検出されたかどうかを判断するために監視を行う（ブロック７２２）。ＴＳＹＮＣ要求が検出されない場合、プロセスは、ブロック７２０〜７２２において引き続き繰り返す。しかしながら、ＴＳＮマシン３４６がＴＬＢＩＥ＿アクティブ状態にある間にそのＴＬＢＩＥ要求の開始ハードウェア・スレッドのＴＳＹＮＣ要求を検出することに応答して、ブロック７２４に示されるように、ＴＳＮマシン３４６は、システム・ファブリック１１０、１１４を介して、再試行コヒーレンス応答を提供する。図１３のブロック１２０８を参照して以下に説明されるように、開始ハードウェア・スレッドのＴＬＢＩＥ要求を処理するいずれかのＴＳＮスヌーパ３４６による再試行コヒーレンス応答は、ソースＬ２キャッシュ２３０によるＴＳＹＮＣ要求の再発行を強制し、再試行コヒーレンス応答なしでＴＳＹＮＣ要求が完了するまで、開始ハードウェア・スレッドがＨＷＳＹＮＣ命令４１０に進むのを防止する。開始プロセッサ・コア２００以外の全てのプロセッサ・コア２００がＴＬＢＩＥ要求の処理を完了すると、ＴＳＹＮＣ要求は、再試行コヒーレンス応答なしに完了する。（図６のブロック５０８を参照して上述されたように、ＴＬＢＩＥ要求の処理のために命令のディスパッチが停止されるために、開始プロセッサ・コア２００がＴＬＢＩＥ要求の処理を完了するまで、開始プロセッサ・コア２００により、ＴＳＹＮＣ要求は発行されない。）
【００４８】
ここで図９を参照すると、一実施形態による、Ｌ２キャッシュ２３０のアービタ３４８がＴＬＢＩＥ要求を処理する例示的な方法の高レベル論理フローチャートがある。プロセスはブロック８００から開始し、アービタ３４８が、そのＴＳＮマシン３４６のいずれかがＴＬＢＩＥ＿アクティブ状態にあるかどうかを判断することを示すブロック８０２に進む。ＴＬＢＩＥ＿アクティブ状態にない場合、ブロック８０２において図９のプロセスを繰り返す。しかしながら、そのＴＳＮマシン３４６の１つ又は複数がＴＬＢＩＥ＿アクティブ状態にあると判断することに応答して、アービタ３４８は、そのＴＬＢＩＥ要求が以前転送されなかった、ＴＬＢＩＥ＿アクティブ状態にあるＴＳＮマシン３４６の１つを選択し、そのＴＬＢＩＥ要求を、インターフェース３５０を介して関連のあるプロセッサ・コア２００の変換シーケンサ３１２に伝送する（ブロック８０４）。デッドロックを回避するために、変換シーケンサ３１２は、一定の時間内に且つＴＬＢ要求を受け付ける任意の遅延なしに、ＴＬＢ要求を受け付けるように構成される。
【００４９】
プロセスはブロック８０４から、関連のあるプロセッサ・コア２００が、ＴＬＢＩＥ要求に応答して、変換構造３１０内の関連する変換エントリ（単数又は複数）を無効化し、無効化された変換エントリにより変換されたそのターゲット・アドレスを有していた関連するメモリ参照要求をドレインしたことを示すＴＬＢＣＭＰＬＴ＿ＡＣＫメッセージの受信を、アービタ３４８が待っていることを示すブロック８０６に進む。従って、ブロック８０６において、アービタ３４８は、開始スレッド（ブロック５０８）及びＬ２キャッシュ２３０の各々におけるＴＳＮマシン３４６（ブロック７０６）の両方のようにＴＬＢＣＭＰＬＴ＿ＡＣＫメッセージを待っている。ブロック８０６におけるＴＬＢＣＭＰＬＴ＿ＡＣＫメッセージの受信に応答して、プロセスは、説明されたブロック８０２に戻る。プロセスがブロック８０２戻る前に、ブロック７０６及び７０８に示されるようにＴＬＢＩＥ＿アクティブ状態がリセットされるので、プロセスがブロック８０２に戻るまで、以前に選択されたＴＳＮマシン３４６は、既に処理されたＴＬＢＩＥ要求に関して、依然としてＴＬＢＩＥ＿アクティブ状態にないことに留意されたい。
【００５０】
図９のプロセス（特に、ブロック８０２及び８０６）は、プロセッサ・コア２００により一度に１つのＴＬＢＩＥ要求だけが処理されることを保証する。図１０を参照して以下に説明されるように、プロセッサ・コア２００によるＴＬＢＩＥ要求のシリアル処理は、ＴＬＢＣＭＰＬＴ＿ＡＣＫメッセージにタグ付けして、それらをＴＬＢＩＥ要求と関連付け、命令マーク付け機構を簡単化する必要性を排除する。しかしながら、当業者であれば、他の実施形態においては、プロセッサ・コア２００は、何らかの付加的な複雑さを有して複数のＴＬＢＩＥ要求を同時にサービスするように構成できることを理解するであろう。
【００５１】
ここで図１０を参照すると、一実施形態により、開始又はスヌーピング・プロセッサ・コア２００の変換シーケンサ３１２がＴＬＢＩＥ要求を処理する例示的な方法の高レベル論理フローチャートが示される。図１０に示されるプロセスはブロック９００から開始し、図９のブロック８０４を参照して上述されるように、変換シーケンサ３１２がアービタ３４８により転送されるＴＬＢＩＥ要求の受信を待っていることを示すブロック９０２に進む。ＴＬＢＩＥ要求の受信に応答して、変換シーケンサ３１２は、ＴＬＢＩＥ要求のターゲット実効アドレスを変換する変換構造３１０内の１つ又は複数のエントリ（例えば、ＰＴＥ又は他の変換エントリ）を無効化する（ブロック９０４）。さらに、ブロック９０６において、変換シーケンサ３１２は、プロセッサ・コア２００からドレインされるべき全てのメモリ参照要求にマーク付けする。
【００５２】
あまり正確ではない実施形態において、ブロック９０６において、変換シーケンサ３１２は、そうしたメモリ参照要求のいずれかが、ブロック９０２で受け取ったＴＬＢＩＥ要求により無効化された変換エントリにより変換されたそのターゲット・アドレスを有することができたという仮定の下で、変換されたそのターゲット・アドレスを有していたプロセッサ・コア２００における全てのハードウェア・スレッドの全てのメモリ参照要求にマーク付けする。従って、この実施形態において、マーク付けされたメモリ参照要求は、Ｌ１  ＳＴＱ３０４内の全てのストア要求及びＬＭＱ３０６内の全てのロード要求を含む。この実施形態は、Ｌ１  ＳＴＱ３０４及びＬＭＱ３０６の全てのエントリについての比較器を実装する必要性を排除するが、長いドレイン時間のために高いレイテンシをもたらし得る。
【００５３】
より正確な実施形態は、Ｌ１  ＳＴＱ３０４及びＬＭＱ３０６の全てのエントリについて比較器を実装する。この実施形態において、各比較器は、ＴＬＢＩＥ要求によって指定される（及び、ＭＭＵ３０８によって変換されない）実効アドレス・ビットのサブセットを、Ｌ１  ＳＴＱ３０４又はＬＭＱ３０６の関連したエントリ内に指定されたターゲット実アドレスの対応する実アドレス・ビットと比較する。比較器が合致を検出するメモリ参照要求だけが、変換シーケンサ３１２によりマーク付けされる。従って、このより正確な実施形態は、付加的な比較器を犠牲にして、マーク付けされたメモリ・アクセス要求の数を低減させる。
【００５４】
あまり正確でない及びより正確なマーク付け実施形態の幾つかの実装において、変換シーケンサ３１２により適用されるマーク付けは、プロセッサ・コア２００内の要求にのみ適用され、マーク付けされた要求がプロセッサ・コア２００からドレインされるまでしか持続しない。こうした実装において、Ｌ２キャッシュ２３０は元に戻り、Ｌ２キャッシュ２３０内の実行中の全ての要求が、ＴＬＢＩＥ要求により無効化された変換エントリにより変換されたそのアドレスを有しており、且つ、ＴＬＢＩＥ要求のターゲット実効アドレスの新しい変換を用いてストア要求を処理する前に、全てのそうしたストア要求のドレインを強制し得ることを悲観的に仮定することができる。他の実装においては、変換シーケンサ３１２により適用されるより正確なマーク付けは、Ｌ２キャッシュ２３０内の実行中のストア要求にも拡張することができる。
【００５５】
図１０のプロセスは、ブロック９０６から、変換シーケンサ３１２が、ブロック９０６においてマーク付けされた要求がプロセッサ・コア２００からドレインするのを待つことを示すブロック９０８へ進む。特定的には、変換シーケンサ３１２は、ブロック９０６でマーク付けされた全てのロード要求は、プロセッサ・コア２００に戻されたその要求されたデータを有しており、且つ、ブロック９０６でマーク付けされた全てのストア要求がＬ２  ＳＴＱ３２０に発行されるまで待つ。全てマーク受けされた要求がプロセッサ・コア２００からドレインするのに応答して、変換シーケンサ３１２は、ＴＬＢＣＭＰＬＴ要求をＬ２  ＳＴＱ３２０に挿入して、変換シーケンサ３１２によるＴＬＢＩＥ要求のサービスが完了したことを示す（ブロック９１０）。その後、ブロック９１２において、図１０のプロセスが終了する。
【００５６】
ここで図１１を参照すると、一実施形態による、Ｌ２  ＳＴＱ３２０がＴＬＢＣＭＰＬＴ要求を処理する例示的な方法の高レベル論理フローチャートが示される。図１１のプロセスはブロック１０００から開始し、次に、図１０のブロック９１０を参照して上述されたように、Ｌ２  ＳＴＱ３２０がその関連したプロセッサ・コア２００により発行されるＴＬＢＣＭＰＬＴ要求を受け取り、エントリの１つの中にエンキューすることを示すブロック１００２に進む。ブロック１００４に示されるように、ＴＬＢＣＭＰＬＴ要求を受け取った後、Ｌ２  ＳＴＱ３２０は、Ｌ２  ＳＴＱ３２０から全てのハードウェア・スレッドの全てのより古いストア要求がドレインするまで待つ。ひとたびＬ２  ＳＴＱ３２０からより古いストア要求の全てがドレインされると、プロセスは、ブロック１００４から、Ｌ２  ＳＴＱ３２０が、ＴＬＢＩＥ要求を発行したＴＳＮマシン３４６、並びにブロック７０６及び７０８を参照して上述されたようにＴＬＢＩＥ要求の処理の完了の確認を待つアービタ３４８に、バス３３０を介して、ＴＬＢＣＭＰＬＴ＿ＡＣＫ信号を伝送することを示すブロック１００６に進む。
【００５７】
ブロック１００８において、Ｌ２  ＳＴＱ３２０は、例えば、ＴＬＢＣＭＰＬＴ要求内のスレッド識別情報を調べることにより、関連のあるプロセッサ・コア２００が、その完了がＴＬＢＣＭＰＬＴ要求により知らせられるＴＬＢＩＥ要求の開始プロセッサ・コアであるかどうかを判断する。開始プロセッサ・コアでない場合（プロセスが、スヌーピング処理コア２００と関連したＬ２キャッシュ２３０で行われていることを意味する）、ＴＬＢＩＥ要求の処理は完了し、Ｌ２  ＳＴＱ３２０は、Ｌ２  ＳＴＱ３２０からＴＬＢＣＭＰＬＴ要求を除去する（ブロック１０１４）。その後、ブロック１０１６においてプロセスは終了する。
【００５８】
一方、Ｌ２キャッシュ３２０が、ブロック１００８において、その関連のあるプロセッサ・コア２００がサイドカー論理３２２内にバッファリングされたＴＬＢＩＥ要求の開始プロセッサ・コア２００であると判断する場合、プロセスは、ブロック１００８から、Ｌ２  ＳＴＱ３２０が、バス３３０を介してＴＬＢＣＭＰＬＴ＿ＡＣＫ信号をサイドカー論理３２２に発行することを示すブロック１００９に進む。ＴＬＢＣＭＰＬＴ＿ＡＣＫ信号の受信に応答して、サイドカー論理３２２は、バス３２５を介して、ＴＬＢＣＭＰＬＴ＿ＡＣＫ信号を関連のあるプロセッサ・コア２００に発行する。図６のブロック５０８を参照して上述されるように、ＴＬＢＣＭＰＬＴ＿ＡＣＫ信号の受信により、プロセッサ・コア２００の開始スレッドが解放され、新しい命令（即ち、その挙動が図１２を参照して説明されるＴＳＹＮＣ命令４０８）のディスパッチを再開する。次に、関連するサイドカー３２４は、完了したＴＬＢＩＥ要求を除去し（ブロック１０１２）、プロセスは、説明されたブロック１０１４及び１０１６に移る。
【００５９】
ここで図１２を参照すると、一実施形態による、プロセッサ・コア２００が変換同期（例えば、ＴＳＹＮＣ）命令を処理する例示的な方法の高レベル論理フローチャートが示される。
【００６０】
示されるプロセスはブロック１１００から開始し、次に、プロセッサ・コア２００の実行ユニット３００による命令シーケンス４００におけるＴＳＹＮＣ命令４０８の実行を示すブロック１１０１に進む。ＴＳＹＮＣ命令４０８の実行に応答して、プロセッサ・コア２００は、ハードウェア・スレッド内のあらゆる後の命令のディスパッチを停止する（ブロック１１０２）。上述のように、図３の例示的な実施形態において、サイドカー論理３２２は、プロセッサ・コア２００のハードウェア・スレッド毎に単一のサイドカー３２４しか含まず、そのことは、一度に、スレッド毎に最大でも１つのＴＬＢＩＥ又はＴＳＹＮＣ要求がアクティブであり得ることを意味する。
【００６１】
ブロック１１０４において、ＴＳＹＮＣ命令４０８に対応するＴＳＹＮＣ要求が生成され、Ｌ１  ＳＴＱ３０４に発行される。ＴＳＹＮＣ要求は、例えば、要求のタイプ（即ち、ＴＳＹＮＣ）を示すトランザクション・タイプ、及びＴＳＹＮＣ要求を発行した開始プロセッサ・コア２００及びハードウェア・スレッドの表示を含むことができる。Ｌ１  ＳＴＱ３０４内の要求の処理は進行し、ブロック１１０６に示されるように、ＴＳＹＮＣ要求は、最終的に、バス３１８を介してＬ１  ＳＴＱ３０４からＬ２  ＳＴＱ３２０に移動する。次にプロセスは、開始プロセッサ・コア２００が、開始プロセッサ・コア２００によるＴＳＹＮＣ要求の処理が完了したことを示すＴＳＹＮＣ＿ＡＣＫ信号を、バス３２５を介してストレージ・サブシステムから受け取るまで、開始ハードウェア・スレッド内の命令のディスパッチを引き続き控える。（ＴＳＹＮＣ＿ＡＣＫ信号の生成は、図１３のブロック１２１０を参照して、以下に説明される。）開始スレッド内の命令のディスパッチは停止されるため、いずれの所定のスレッドについても、Ｌ２  ＳＴＱ３２０及びサイドカー論理３２２内に一度に２つのタイプの要求のうちの１つしか存在できないので、別のＴＬＢＩＥ要求による開始ハードウェア・スレッドのサイドカー３２４の競合は存在し得ないことに再び留意されたい。
【００６２】
ブロック１１０８において、ＴＳＹＮＣ＿ＡＣＫ信号を受信したとの判断に応答して、プロセスは、プロセッサ・コア２００が開始スレッドにおける命令のディスパッチを開始することを示すブロック１１１０に進み、従って、ブロック１１１０におけるスレッドの解放により、ＨＷＳＹＮＣ命令４１０（命令シーケンス４００における次の命令である）の処理が可能になる。その後、ブロック１１１２において、図１２のプロセスが終了する。
【００６３】
ここで図１３を参照すると、一実施形態による、サイドカー論理３２４がＴＳＹＮＣ要求を処理する例示的な方法の高レベル論理フローチャートが示される。プロセスはブロック１２００から開始し、次に、サイドカー論理３２４が、インターフェース３２１を介して、ＴＳＹＮＣ要求がＬ２  ＳＴＱ３２０内にエンキューされているとの通知を監視することを示すブロック１２０２に進む。インターフェース３２１を介して、ＴＳＹＮＣ要求がＬ２  ＳＴＱ３２０内にエンキューされているとの通知を受信することに応答して、サイドカー論理３２２は、インターフェース３２１を介して、ＴＳＹＮＣ要求を開始ハードウェア・スレッドのサイドカー３２４に移動する（ブロック１２０４）。ＴＳＹＮＣ要求の受信に応答して、サイドカー３２４は、インターフェース３２６を介して、システム・ファブリック１１０、１１４上でＴＳＹＮＣ要求を発行し（ブロック１２０６）、次に、ＴＳＹＮＣ要求へのコヒーレンス応答を監視し、図８のブロック７２４に関して以前に説明されたように、いずれかのＴＳＮマシン３４６が再試行コヒーレンス応答を提供したかどうかを判断する（ブロック１２０８）。上述のように、ＴＳＮマシン３４６は、ＴＳＮマシンが依然としてＴＬＢＩＥ＿アクティブ状態にあり、且つそのスヌーピング・プロセッサ・コア２００が、同じ開始プロセッサ・コア２００及びハードウェア・スレッドの先行するＴＬＢＩＥ要求の処理の完了を待つ場合、再試行コヒーレンス応答を提供する。ＴＬＢＣＭＰＬＴ＿ＡＣＫが開始プロセッサ・コア２００に発行される前に、ブロック１００６において、ＴＬＢＣＭＰＬＴ＿ＡＣＫ信号が発行プロセッサ・コアのＴＳＮマシン３４６を非アクティブ状態にリセットするので、ＴＳＹＮＣ要求が発行されるときまで、発行処理ユニットのＴＳＮマシン３４６は、もはやＴＬＢＩＥ＿アクティブ状態にはなく、再試行コヒーレンス応答を発行しないことに留意されたい。プロセッサ・コア２００によるＴＬＢＣＭＰＬＴ＿ＡＣＫ信号の受信により、開始プロセッサ・コア２００は、ＴＬＢＩＥ命令４０６の後の命令のディスパッチを再開し、従って、ＴＳＹＮＣ命令４０８を実行して、ＴＳＹＮＣ要求を生成する。しかしながら、開始プロセッサ・コア２００は、スヌーピング処理コア２００がその変換エントリの無効化を完了し、無効化された変換エントリに依存する又は潜在的に依存するとしてマーク付けされたメモリ参照命令をドレインするずっと前に、ＴＬＢＩＥ要求の処理を完了することができる。従って、開始プロセッサ・コア２００がＨＷＳＹＮＣ命令４１０を実行する前に、ＴＳＹＮＣ要求は、変換エントリの無効化、及びスヌーピング処理コア２００における無効化された変換エントリに依存するメモリ参照命令のドレインが完了する。
【００６４】
ひとたび全てのスヌーピング・プロセッサ・コア２００がＴＬＢＩＥ要求のその処理を完了すると、最終的に、ＴＳＹＮＣ要求は、再試行コヒーレンス応答なしに完了する。ブロック１２０８において、ＴＳＹＮＣ要求が再試行コヒーレンス応答なしに完了することに応答して、サイドカー３２４は、バス３２５を介して、ＴＳＹＮＣ＿ＡＣＫ信号を開始プロセッサ・コア２００に発行する（ブロック１２１０）。ブロック１１０８を参照して上述されたように、ＴＳＹＮＣ＿ＡＣＫ信号の受信に応答して、開始プロセッサ・コア２００は、より若いメモリ参照命令に対する開始スレッドの順序付け要件を完了するＨＷＳＹＮＣ命令４１０を実行する。ブロック１２１０の後、サイドカー３２４は、ＴＳＹＮＣ要求を除去し（ブロック１２１２）、プロセスは、説明されたブロック１２０２に戻る。
【００６５】
ここで図６〜図１３を参照して、図４の命令シーケンス４００及び関連した処理が詳細に説明されたが、次に、多数の命令、特定てきには、変換無効化シーケンスにおける同期命令の数を低減させる代替的なコード・シーケンス４２０を示す図５を参照する。示されるように、命令シーケンス４２０は、ページ・フレーム・テーブル２２０内のＰＴＥ２２２を無効化するための１つ又は複数のストア命令４２２、ＨＷＳＹＮＣ命令４２４、及び全てのプロセッサ・コア２００内の指定された実効アドレスについてのキャッシュされた変換エントリを無効化する１つ又は複数のＴＬＢＩＥ命令４２６を含む。従って、命令４２２〜４２６は、図４の命令シーケンス４２６の命令４０２〜４０６に対応する。命令シーケンス４２０は、ＴＬＢＩＥ命令４２６の直後のＰＴＥＳＹＮＣ命令４３０を付加的に含む。ＰＴＥＳＹＮＣ命令４３０は、図４の命令シーケンス４００のＴＳＹＮＣ命令４０８及びＨＷＳＹＮＣ命令４１０によって実行される作業を結合して単一の命令にする。つまり、ＰＴＥＳＹＮＣ命令４３０の実行は、ＴＬＢＩＥ命令４２６により生成されるＴＬＢＩＥ要求のシステム全体の完了の保証（ＴＳＹＮＣ命令４０８の実行により生成されるＴＳＹＮＣ要求が行うような）、及び、より若いメモリ参照命令に対する命令の順序付けの実施（ＨＷＳＹＮＣ命令４１０の実行によって生成されるＨＷＳＹＮＣ要求が行うような）の両方のために、データ処理システム１００の全ての処理ユニット１０４にブロードキャストされるＰＴＥＳＹＮＣ要求をもたらす。
【００６６】
命令シーケンス４２０及び４００の類似性が与えられた場合、命令シーケンス４２０の処理は、図１４〜図１６を参照して以下に説明される、ＰＴＥＳＹＮＣ命令４３０の実行により生成されるＰＴＥＳＹＮＣ要求に関連した処理を除いて、図６〜図１３に与えられる命令シーケンス４００についてのものと同じである。
【００６７】
ここで図１４を参照すると、一実施形態による、処理コア２００がページ・テーブル同期（例えば、ＰＴＥＳＹＮＣ）命令４３０を処理する例示的な方法の高レベルの論理フローチャートが示される。上述のように、ＰＴＥＳＹＮＣ命令４３０及びその実効アドレス-実アドレス変換により生成されるＰＴＥＳＹＮＣ要求は、２つの機能、即ち、ＴＬＢＩＥ命令４２６により生成されるＴＬＢＩＥ要求のシステム全体の完了を保証すること、及びより若いメモリ参照命令に対する命令の順序付けの実施を有する。
【００６８】
示されるプロセスは、ブロック１３００から始まり、プロセッサ・コア２００が、実行ユニット３００内の命令シーケンス４２０におけるＰＴＥＳＹＮＣ命令４３０の実行により、ＰＴＥＳＹＮＣ要求を生成することを示すブロック１３０１に進む。ＰＴＥＳＹＮＣ要求は、例えば、要求のタイプを示すトランザクション・タイプ（即ち、ＰＴＥＳＹＮＣ）及びＰＴＥＳＹＮＣ要求を発行した開始プロセッサ・コア２００及びハードウェア・スレッドの表示を含むことができる。ＰＴＥＳＹＮＣ命令４３０の実行に応答して、プロセッサ・コア２００は、開始ハードウェア・スレッド内のあらゆるより若い命令のディスパッチを停止する（ブロック１３０２）。上述のように、図３の例示的な実施形態において、サイドカー論理３２２は、プロセッサ・コア２００のハードウェア・スレッド毎に単一のサイドカー３２４だけを含み、それは、この実施形態においては、一度に、スレッド毎に最大でも１つのＴＬＢＩＥ又はＰＴＥＳＹＮＣ要求がアクティブであり得ることを意味するので、ディスパッチは停止される。
【００６９】
ブロック１３０２に続いて、図１４のプロセスは、並行してブロック１３０３及びブロック１３０４〜１３１２に進む。ブロック１３０３は、開始プロセッサ・コア２００が、全てのハードウェア・スレッドの全ての適切なより古いロード要求（即ち、ＨＷＳＹＮＣ要求の処理が完了する前に要求されるデータを受け取るために、ＨＷＳＹＮＣによりアーキテクチャ的に要求されもの）が、ＬＭＱ３０６からドレインするのを待つことにより、ＰＴＥＳＹＮＣ要求のロード順序付け機能を実施することを表す。ブロック１３０３においてこれらのロード要求が満たされるのを待つことにより、ブロック９０６において識別されたロード要求のセットが、再割り当てされたメモリ・ページではなく、正しいメモリ・ページからデータを受け取る（ターゲット・アドレスが再割り当てされるメモリ・ページ上にあった場合でも）ことが保証される。
【００７０】
ブロック１３０３と同時に、プロセッサ・コア２００は、ＰＴＥＳＹＮＣ命令４３０に対応するＰＴＥＳＹＮＣ要求も、Ｌ１  ＳＴＱ３０４に発行する（ブロック１３０４）。プロセスは、ブロック１３０４から、全てのハードウェア・スレッドの全ての適切なより古いストア要求（即ち、Ｌ１  ＳＴＱ３０４からドレインされるよう、ＨＷＳＹＮＣによりアーキテクチャ的に要求されるもの）が、Ｌ１  ＳＴＱ３０４からドレインするのを待つことにより、プロセッサ・コア２００は、ＰＴＥＳＹＮＣ要求のストア順序付け機能を実施することを示すブロック１３０８に進む。ひとたびブロック１３０８において行われたストア順序付けが完了すると、ブロック１３１０に示されるように、ＰＴＥＳＹＮＣ要求が、バス３１８を介して、Ｌ１  ＳＴＱ３０４からＬ２  ＳＴＱ３２０に発行される。
【００７１】
次に、プロセスは、ブロック１３１０から、開始プロセッサ・コア２００が監視を行って、開始プロセッサ・コア２００によるＰＴＥＳＹＮＣ要求の処理が完了したことを示すＰＴＥＳＹＮＣ＿ＡＣＫ信号を、バス３２５を介してストレージ・サブシステムから受信したことを検出することを示すブロック１３１２に進む。（ＰＴＥＳＹＮＣ＿ＡＣＫ信号の生成は、図１５のブロック１４１０を参照して、以下に説明される。）開始ハードウェア・スレッド内の命令のディスパッチが停止されたままであるため、いずれの所定のスレッドについても、Ｌ２  ＳＴＱ３２０及びサイドカー論理３２２内に、一度にＴＬＢＩＥ要求又はＰＴＥＳＹＮＣ要求の１つしか存在できないので、別のＴＬＢＩＥ要求による開始ハードウェア・スレッドのサイドカー３２４の競合は存在し得ないことに再び留意されたい。
【００７２】
ブロック１３０３及び１３１２の両方における肯定的判断にのみ応答して、図１４のプロセスは、プロセッサ・コア２００が、開始スレッド内の命令のディスパッチを再開することを示すブロック１３１４に進み、従って、ブロック１３１４におけるスレッドの解放により、ＰＴＥＳＹＮＣ命令４３０の後の命令の処理を開始することが可能になる。その後、ブロック１３１６において図１４のプロセスが終了する。
【００７３】
ここで図１５を参照すると、一実施形態による、処理ユニット１０４のＬ２  ＳＴＱ３２０及びサイドカー論理３２２がＰＴＥＳＹＮＣ要求を処理する例示的な方法の高レベル論理フローチャートが示される。図１５のプロセスはブロック１４００から開始し、次に、図１４のブロック１３１０を参照して上述されたように、Ｌ２  ＳＴＱ３２０が、Ｌ１  ＳＴＱ３０４からのＰＴＥＳＹＮＣ要求の受信を監視することを示すブロック１４０２に進む。図５の第２の実施形態において、ＰＴＥＳＹＮＣ要求の受信に応答して、Ｌ２  ＳＴＱ３２０及びサイドカー論理３２４は協働して２つの機能、即ち（１）Ｌ２  ＳＴＱ３２０内のストア要求についてのストア順序付け、及び（２）他の処理コア２００の全てにおけるＴＬＢＩＥ要求の完了の保証を実施する。図１５の実施形態において、これらの２つの機能は、それぞれ、ブロック１４０３、１４０５、並びにブロック１４０４、１４０６及び１４０８において示される２つの経路に沿って並行して実行される。代替的な実施形態において、これらの機能は、最初にブロック１４０３及び１４０５に示される順序付け機能を実行し、次に、ブロック１４０４、１４０６及び１４０８におけるＴＬＢＩＥ要求の完了を保証することによって、代わりにシリアル化することができる。（ストア順序付けを行う前にＴＬＢＩＥ要求の完了を保証することによって、これらの機能の順序付けをシリアル化しようとする試みがデッドロックをもたらし得ることに留意されたい。）
【００７４】
ここでブロック１４０３〜１４０５を参照すると、Ｌ２  ＳＴＱ３２０は、Ｌ２  ＳＴＱ３２０内の全ての適切なより古いストア要求がＬ２  ＳＴＱ３２０からドレインされたことを保証することによって、ＰＴＥＳＹＮＣ要求についてのストア順序付けを行う。ブロック１４０３で順序付けられたストア要求のセットは、以前のＴＬＢＩＥ要求により無効化された変換エントリにより変換されたターゲット・アドレスを有していた可能性がある第１のサブセットを含む。この第１のサブセットは、ブロック９０６でマーク付けされたものに対応する。さらに、ブロック１４０３で順序付けられたストア要求のセットは、アーキテクチャ的に定められたストア要求がＨＷＳＹＮＣにより順序付けられるものを含む第２のサブセットを含む。ひとたび全てのこうしたストア要求がＬ２  ＳＴＱ３２０からドレインされると、Ｌ２  ＳＴＱ３２０は、Ｌ２  ＳＴＱ３２０からＰＴＥＳＹＮＣ要求を除去する（ブロック１４０５）。ＰＴＥＳＹＮＣ要求の除去により、ＰＴＥＳＹＮＣ要求より若いストア要求がＬ２  ＳＴＱ３２０を通って流れることが可能になる。
【００７５】
ここでブロック１４０４を参照すると、サイドカー論理３２２は、Ｌ２  ＳＴＱ３２０におけるＰＴＥＳＹＮＣ要求の存在を検出し、ブロック１４０５においてＬ２  ＳＴＱ３２０からＰＴＥＳＹＮＣ要求を除去する前に、インターフェース３２１を介して、ＰＴＥＳＹＮＣ要求を適切なサイドカー３２４にコピーする。次に、プロセスは、ブロック１４０６及び１４０８に示されるループに進み、そこで、サイドカー論理３２２は、プロセッサ・コア２００が再試行コヒーレンス応答に応答しなくなるまで（即ち、同じプロセッサ・コア及びハードウェア・スレッドの先行するＴＬＢＩＥ要求が、全てのスヌーピング・プロセッサ・コア２００により完了されるまで）、システム・ファブリック１１０、１１４上でＰＴＥＳＹＮＣ要求を発行し続ける。
【００７６】
ブロック１４０３、１４０５、並びにブロック１４０４、１４０６及び１４０８に示される機能の両方の完了のみに応答して、プロセスは、サイドカー論理３２２がバス３２５を介してＰＴＥＳＹＮＣ＿ＡＣＫ信号を関連のあるプロセッサ・コアに発行することを示すブロック１４１０に進む。次に、サイドカー論理３２２は、サイドカー３２４からＰＴＥＳＹＮＣ要求を除去し（ブロック１４１２）、プロセスは、説明されたブロック１４０２に戻る。
【００７７】
ここで図１６を参照すると、一実施形態による、ＴＳＮマシン３４６が、ＴＬＢＩＥ要求、ＴＬＢＣＭＰＴ＿ＡＣＫ信号、及びＰＴＥＳＹＮＣ要求を処理する例示的な方法の高レベル論理フローチャートがある。同様の参照番号で示されるように、図１６は、ブロック１５２２を除いて、図８に前述したものと同じである。ブロック１５２２は、ブロック７０４において確立されたＴＬＢＩＥ＿アクティブ状態にある間、ＴＳＮマシン３４６が監視を行って、そのＴＬＢＩＥ要求に合致する、開始プロセッサ・コア及びハードウェア・スレッドを指定するＰＴＥＳＹＮＣ要求が検出されたかどうかを判断することを示す。検出されない場合、プロセスは、ブロック７２０及び１５２２を含むループにおいて繰り返す。しかしながら、ＴＳＮマシン３４６が、ＴＬＢＩＥ＿アクティブ状態にある間、そのＴＬＢＩＥ要求に合致する、開始プロセッサ・コア及びハードウェア・スレッドを指定するＰＴＥＳＹＮＣ要求を検出することに応答して、ブロック７２４に示されるように、ＴＳＮマシン３４６は再試行コヒーレンス応答を提供する。上述のように、開始ハードウェア・スレッドのＴＬＢＩＥ要求を処理するいずれかのＴＳＮスヌーパ３４６による再試行コヒーレンス応答は、ＰＴＥＳＹＮＣ要求の再試行を強制し、再試行コヒーレンス応答なしにＰＴＥＳＹＮＣ要求完了するまで、開始ハードウェア・スレッドが、ＰＴＥＳＹＮＣ命令４３０より若いあらゆるメモリ参照命令を実行するのを防止する。
【００７８】
ここで図１７を参照すると、例えば、半導体ＩＣ論理の設計、シミュレーション、試験、レイアウト及び製造に用いられる例示的な設計フロー１６００のブロック図が示される。設計フロー１６００は、図１４に示される設計構造体及び／又はデバイスの論理的に又は他の方法で機能的に等価な表現を生成するように設計構造体又はデバイスを処理するためのプロセス、機械、及び／又は機構を含む。設計フロー１６００によって処理及び／又は生成される設計構造体は、データ処理システム上で実行又は他の方法で処理されたときに、ハードウェア・コンポーネント、回路、デバイス又はシステムの論理的、構造的、機械的、又は他の方法で機能的に等価な表現を生成するデータ及び／又は命令を含むように、機械可読伝送又はストレージ媒体上でコード化することができる。機械は、これらに限定されるものではないが、回路、コンポーネント、デバイス、又はシステムを設計、製造又はシミュレートするといった、ＩＣ設計プロセスに用いられるどのようなマシンも含む。例えば、機械は、リソグラフィ機械、マスクを生成するための機械及び／又は機器（例えば、ｅビーム・ライタ）、設計構造体をシミュレートするためのコンピュータ又は機器、製造プロセス又は試験プロセスの製造に用いられるいずれかの装置、又は設計構造体の機能的に等価な表現をいずれかの媒体にプログラミングするためのいずれかの機械（例えば、プログラマブル・ゲートアレイをプログラミングするための機械）を含むことができる。
【００７９】
設計フロー１６００は、設計される表現のタイプに応じて変わり得る。例えば、特定用途向けＩＣ（ＡＳＩＣ）を構築するための設計フロー１６００は、標準的なコンポーネントを設計するための設計フロー１６００、又はプログラマブル・アレイ、例えば、Ａｌｔｅｒａ（登録商標）  Ｉｎｃ．又はＸｉｌｉｎｘ（登録商標）  Ｉｎｃ．から提供されているプログラマブル・ゲートアレイ（ＰＧＡ）又はフィールド・プログラマブル・ゲートアレイ（ＦＰＧＡ）に設計をインスタンス化するための設計フロー１６００とは異なることがある。
【００８０】
図１７は、好ましくは設計プロセス１６１０によって処理される入力設計構造体１６２０を含む、複数のこのような設計構造体を示す。設計構造体１６２０は、設計プロセス１６１０によって生成及び処理され、ハードウェア・デバイスの論理的に等価な機能表現を生じる、論理的シミュレーション設計構造体とすることができる。設計構造体１６２０はさらに、又は代替的に、設計プロセス１６１０によって処理されたときに、ハードウェア・デバイスの物理的構造の機能的表現を生成するデータ及び／又はプログラム命令を含むこともできる。機能的及び／又は構造的設計特徴のどちらを表現するのであれ、設計構造体１６２０は、コア開発者／設計者によって実施されるような、電子的コンピュータ支援設計（ＥＣＡＤ）を使用して生成することができる。機械可読データ伝送、ゲートアレイ、又はストレージ媒体上でコード化された場合、設計構造体１６２０を設計プロセス１６１０内の１つ又は複数のハードウェア及び／又はソフトウェア・モジュールによってアクセス及び処理して、図１〜図３に示されるもののような電子コンポーネント、回路、電子若しくは論理モジュール、装置、デバイス、又はシステムをシミュレートするか、又は他の方法で機能的に表現することができる。そのため、設計構造体１６２０は、設計又はシミュレーション・データ処理システムによって処理されたときに回路又は他のレベルのハードウェア論理設計を機能的にシミュレートするか、又は他の方法で表現する、人間及び／又は機械可読のソースコード、コンパイルされた構造体、及びコンピュータ実行可能コード構造体を含む、ファイル又は他のデータ構造体を含むことができる。このようなデータ構造体は、ハードウェア記述言語（ＨＤＬ）設計エンティティ、又は、Ｖｅｒｉｌｏｇ及びＶＨＤＬのような低レベルＨＤＬ設計言語、及び／又はＣ若しくはＣ＋＋のような高レベル設計言語に適合する及び／又はそれと互換性のある他のデータ構造体を含むことができる
【００８１】
設計プロセス１６１０は、設計構造体１６２０のような設計構造体を含むことができるネットリスト１６８０を生成するために、図１〜図３に示されるコンポーネント、回路、デバイス又は論理構造体の設計／シミュレーションの機能的等価物を合成、変換又はその他の方法で処理するためのハードウェア及び／又はソフトウェア・モジュールを使用し、組み込むことが好ましい。ネットリスト１６８０は、例えば、集積回路設計内の他の素子及び回路への接続を記述する配線、個別部品、論理ゲート、制御回路、Ｉ／Ｏデバイス、モデル等のリストを表す、コンパイルされた又は他の方法で処理されたデータ構造体を含むことができる。ネットリスト１６８０は繰り返しプロセスを用いて合成することができ、このプロセスにおいて、ネットリスト１６８０は、デバイスの設計仕様及びパラメータに応じて１回又は複数回再合成される。ここで説明された他の設計構造体のタイプと同様に、ネットリスト１６８０を機械可読データ・ストレージ媒体上に記録し、又はプロブラマブル・ゲートアレイにプログラムすることができる。媒体は、磁気又は光ディスク・ドライブのような不揮発性ストレージ媒体、プロブラマブル・ゲートアレイ、コンパクト・フラッシュ、又は他のフラッシュメモリとすることができる。それに加えて、又は代替的に、媒体は、システム又はキャッシュ・メモリ、又はバッファ領域とすることができる。
【００８２】
設計プロセス１６１０は、ネットリスト１６８０を含む様々な入力データ構造体のタイプを処理するためのハードウェア及びソフトウェア・モジュールを含むことができる。このようなデータ構造体のタイプは、例えば、ライブラリ要素１６３０内に常駐し、所与の製造技術（例えば、異なる技術ノード３２ｎｍ、４５ｎｍ、９０ｎｍ等）についての、モデル、レイアウト及び記号表示を含む、一般的に用いられる要素、回路及びデバイスの組を含むことができる。データ構造体のタイプは、設計仕様１６４０と、特性データ１６５０と、検証データ１６６０と、設計規則１６７０と、入力試験パターン、出力試験結果及び他の試験情報を含むことができるテスト・データ・ファイル１６８５とをさらに含むことができる。設計プロセス１６１０は、例えば、応力分析、熱分析、機械イベント・シミュレーション、鋳造、成形、ダイ・プレス形成等のような動作のためのプロセス・シミュレーションのような標準的な機械設計プロセスをさらに含むことができる。機械設計の当業者であれば、本発明の範囲及び趣旨から逸脱することなく、設計プロセス１６１０に用いられる可能な機械設計ツール及びアプリケーションの範囲を認識することができる。設計プロセス１６１０はまた、タイミング分析、検証、設計規則照合、場所及びルート動作等のような標準的な回路設計プロセスを実行するためのモジュールを含むこともできる。
【００８３】
設計プロセス１６１０は、第２の設計構造体１６９０を作成するために、ＨＤＬコンパイラ及びシミュレーション・モデル構築ツールのような論理的及び物理的設計ツールを使用し、組み込んで、設計構造体１６２０を、図示された支持データ構造体のうちの幾つか又は全てと共に、いずれかの付加的な機械設計又はデータ（該当する場合）と併せて処理する。設計構造体１６９０は、機械的なデバイス及び構造体のデータの交換に用いられるデータ形式（例えば、ＩＧＥＳ、ＤＸＦ、Ｐａｒａｓｏｌｉｄ  ＸＴ、ＪＴ、ＤＲＧ、又はこのような機械的設計構造体を格納又はレンダリングするのに適したその他のいずれかの形式で格納される情報）でストレージ媒体又はプログラマブル・ゲートアレイ上に存在する。設計構造体１６２０と同様に、設計構造体１６９０は、好ましくは、１つ又は複数のファイル、データ構造体、又は他のコンピュータ・コード化データ又は命令を含み、これは、伝送又はデータ・ストレージ媒体上に存在し、かつ、ＥＣＡＤシステムによって処理されると図１〜図３に示される本発明の実施形態の１つ又は複数の論理的又はその他の方式で機能的に等価な形態を生成する。１つの実施形態において、設計構造体１６９０は、例えば、図１〜図３に示されるデバイスを機能的にシミュレートする、コンパイルされた実行可能なＨＤＬシミュレーション・モデルを含むことができる。
【００８４】
設計構造体１６９０はまた、集積回路のレイアウト・データの交換に用いられるデータ形式、及び／又は記号データ形式（例えば、ＧＤＳＩＩ（ＧＤＳ２）、ＧＬ１、ＯＡＳＩＳ、マップファイル、又はこのような設計データ構造体を格納するためのその他のいずれかの適切な形式で格納される情報）を使用することもできる。データ構造体１６９０は、例えば、記号データ、マップファイル、試験データ・ファイル、設計コンテンツ・ファイル、製造データ、レイアウト・パラメータ、配線、金属のレベル、ビア、形状、製造ラインを通じた経路指定のためのデータ、並びに、上記に説明され、図１〜図３に示されるようなデバイス又は構造体を製造するために製造者又は他の設計者／開発者により要求される他のいずれかのデータといった情報を含むことができる。次に、設計構造体１６９０はステージ１６９５に進むことができ、そこで、例えば、設計構造体１６９０は、テープに読み出されたり、製造のためにリリースされたり、マスク会社にリリースされたり、別の設計会社に送られたり、顧客に返送されたりする。
【００８５】
既述のように、複数のプロセッサ・コアを含むマルチスレッド・データ処理システムの少なくとも１つの実施形態において、同時に実行している複数のハードウェア・スレッドのストレージ修正要求を、共有キュー内に受け取る。ストレージ修正要求は、開始ハードウェア・スレッドの変換無効化要求を含む。変換無効化要求は、共有キューから除去され、各々が複数のハードウェア・スレッドのそれぞれと関連付けられた複数のサイドカーの１つのサイドカー論理内にバッファリングされる。変換無効化要求は、サイドカー内にバッファリングされるが、サイドカー論理は、変換無効化要求をブロードキャストするので、変換無効化要求は、複数のプロセッサ・コアにより受け取られ、処理される。開始プロセッサ・コアによる変換無効化要求の処理の完了を確認することに応答して、サイドカー論理は、サイドカーから変換無効化要求を除去する。複数のプロセッサ・コアの全てにおける変換無効化要求の処理の完了が、ブロードキャスト同期要求により保証される。
【００８６】
一実施形態において、付加的な同期命令（例えば、ＨＷＳＹＮＣ）の実行により、ブロードキャスト同期要求を参照して、後のメモリ参照命令が順序付けられる。
【００８７】
種々の実施形態が具体的に示され、説明されたが、当業者であれば、添付の特許請求の範囲の趣旨及び範囲から逸脱することなく、形態及び詳細における種々の変更を本明細書においてなし得ることを理解するであろう。例えば、本明細書の機能を指示するプログラム・コードを実行するコンピュータ・システムに関して態様が説明されたが、本発明は、代替的に、データ処理システムに、説明された機能を実施させるために、データ処理システムのプロセッサにより処理することができるプログラム・コードを格納するコンピュータ可読ストレージ・デバイスを含むプログラム製品として実装できることを理解されたい。コンピュータ可読ストレージ・デバイスは、揮発性又は不揮発性メモリ、光又は磁気ディスク等を含むことができるが、伝搬信号自体、伝送媒体自体及びエネルギー自体の形態のような非法定主題（non-statutory subject matter）を排除する。
【００８８】
一例として、プログラム製品は、データ処理システム上で実行される又は他の方法で処理されるとき、本明細書で開示されるハードウェア・コンポーネント、回路、デバイス又はシステムの論理的、構造的、又は他の方法で機能的に等価な表現（シミュレーション・モデルを含む）を生成する、データ及び／又は命令を含むことができる。こうしたデータ及び／又は命令は、ハードウェア記述言語（ＨＤＬ）設計エンティティ、又はＶｅｒｉｌｏｇ及びＶＨＤＬのような低レベルＨＤＬ設計言語、及び／又はＣ若しくはＣ＋＋のような高レベル設計言語に適合する及び／又はそれと互換性のある他のデータ構造体を含むことができる。さらに、データ及び／又は命令は、集積回路のレイアウト・データの交換に用いられるデータ形式、及び／又は記号データ形式（例えば、ＧＤＳＩＩ（ＧＤＳ２）、ＧＬ１、ＯＡＳＩＳ、マップファイル、又はこのような設計データ構造体を格納するための他のいずれかの適切な形式で格納される情報）を使用することもできる。
【符号の説明】
【００８９】
１００：データ処理システム
１０２：処理ノード
１０４、１０４ａ〜１０４ｄ：処理ユニット
１０８：システム・メモリ
１１０：システム相互接続
１１４：ローカル相互接続
２００：プロセッサ・コア
２２２：ページ・フレーム・エントリ（ＰＴＥ）
２２０：ページ・テーブル
２３０：レベル２（Ｌ２）キャッシュ
３００：実行ユニット
３０８：メモリ管理ユニット（ＭＭＵ）
３１０：変換構造
３１２：変換シーケンサ
３０２：レベル１（Ｌ１）キャッシュ
３０４：Ｌ１  ＳＴＱ
３２０：Ｌ２  ＳＴＱ
３２２：サイドカー論理
３２４：サイドカー
３４６：変換スヌープ（ＴＳＮ）マシン
３４８：アービタ
４００、４２０：命令シーケンス
１６００：設計フロー
１６１０：設計プロセス
１６２０：設計構造体
【図１】
2017117453.tif 000002
【図２】
2017117453.tif 000003
【図３】
2017117453.tif 000004
【図４】
2017117453.tif 000005
【図５】
2017117453.tif 000006
【図６】
2017117453.tif 000007
【図７】
2017117453.tif 000008
【図８】
2017117453.tif 000009
【図９】
2017117453.tif 000010
【図１０】
2017117453.tif 000011
【図１１】
2017117453.tif 000012
【図１２】
2017117453.tif 000013
【図１３】
2017117453.tif 000014
【図１４】
2017117453.tif 000015
【図１５】
2017117453.tif 000016
【図１６】
2017117453.tif 000017
【図１７】
2017117453.tif 000018