(57)【要約】  装置２は、命令の投機的実行を実施する処理回路４と、主キャッシュ記憶領域３０と、投機的キャッシュ記憶領域３２と、投機的メモリ・アクセスが投機的に留まっている間、主キャッシュ記憶領域の代わりに投機的キャッシュ記憶領域にエントリーを割り当てるキャッシュ制御回路３４であって、エントリーに対して、割当てが、処理回路によりトリガーされた投機的メモリ・アクセスによりもたらされる、キャッシュ制御回路３４とを備える。これは、キャッシュ・タイミング・サイド・チャンネルを利用して投機的メモリ・アクセスによりもたらされるキャッシュへの割当てに関する情報を得る潜在的なセキュリティー攻撃から保護することに役立ち得る。
2021510434.tif 000002
【特許請求の範囲】
【請求項１】
命令の投機的実行を実施する処理回路と、
主キャッシュ記憶領域と、
投機的キャッシュ記憶領域と、
投機的メモリ・アクセスが投機的に留まっている間、前記主キャッシュ記憶領域の代わりに前記投機的キャッシュ記憶領域にエントリーを割り当てるキャッシュ制御回路であって、エントリーに対して、割当てが、前記処理回路によりトリガーされた前記投機的メモリ・アクセスによりもたらされる、キャッシュ制御回路と
を備える装置であって、
前記投機的キャッシュ記憶領域に対する前記エントリーの前記割当てをトリガーした前記投機的メモリ・アクセスが、メモリ・システムからデータをロードするための投機的ロード・メモリ・アクセスである場合、前記投機的ロード・メモリ・アクセスに応答して前記投機的キャッシュ記憶領域に割り当てられた前記エントリーが、前記メモリ・システムからロードされた前記データを指定する、装置。
【請求項２】
前記キャッシュ制御回路が、非投機的メモリ・アクセス又は正しいとして解決された投機的メモリ・アクセスに対応したエントリーを、前記主キャッシュ記憶領域に排他的に割り当てるように構成されている、請求項１に記載の装置。
【請求項３】
前記主キャッシュ記憶領域と前記投機的キャッシュ記憶領域との両方が、前記処理回路により実行された投機的な命令によりトリガーされた読み出しに応答してアクセス可能である、請求項１又は２に記載の装置。
【請求項４】
前記処理回路がより特権的な状態からより特権的でない状態に切り替わったことに応答して、前記キャッシュ制御回路が、前記投機的キャッシュ記憶領域のエントリーを破棄するように、又は、前記投機的キャッシュ記憶領域の前記エントリーを前記処理回路にとってアクセス不能にするように構成されている、請求項３に記載の装置。
【請求項５】
前記キャッシュ制御回路が、投機的メモリ・アクセスが正しいとして解決された後に、前記投機的キャッシュ記憶領域から前記主キャッシュ記憶領域に、前記投機的メモリ・アクセスに応答して割り当てられたエントリーを伝達するように構成されている、請求項１〜４の何れか一項に記載の装置。
【請求項６】
前記キャッシュ制御回路が、前記投機的メモリ・アクセスが正しいとして解決されたことの検出に応答して、直接的に前記主キャッシュ記憶領域に、前記投機的メモリ・アクセスに応答して割り当てられた前記エントリーを伝達するように構成されている、請求項５に記載の装置。
【請求項７】
前記キャッシュ制御回路が、前記投機的キャッシュ記憶領域の任意のエントリーが、正しいとして解決された、解決された投機的メモリ・アクセスに対応しているか否かを判定するように、及び、前記主キャッシュ記憶領域に前記解決された投機的メモリ・アクセスに対応した前記エントリーを伝達するように、投機的キャッシュ伝達演算を定期的に実施するように構成されている、請求項５に記載の装置。
【請求項８】
前記キャッシュ制御回路が、正しくないとして解決された投機的メモリ・アクセスに関連した前記投機的キャッシュ記憶領域のエントリーを破棄するように構成されている、請求項１〜７の何れか一項に記載の装置。
【請求項９】
前記キャッシュ制御回路が、少なくとも、
正しくないとして解決された投機的メモリ・アクセスと、
依然として未解決の投機的メモリ・アクセスと
のうちの１つに関連した前記投機的キャッシュ記憶領域のエントリーを破棄するように、投機的キャッシュ・フラッシュ・イベントに応答する、請求項１〜８の何れか一項に記載の装置。
【請求項１０】
前記キャッシュ制御回路が、前記投機的キャッシュ記憶領域のすべてのエントリーを破棄するように、前記投機的キャッシュ・フラッシュ・イベントに応答する、請求項９に記載の装置。
【請求項１１】
前記投機的キャッシュ・フラッシュ・イベントが、前記処理回路がより特権的な状態とより特権的でない状態との間で切り替わることを含む、請求項９又は１０に記載の装置。
【請求項１２】
前記投機的キャッシュ・フラッシュ・イベントが、前記処理回路がより特権的な状態からより特権的でない状態に切り替わることを含む、請求項９又は１０に記載の装置。
【請求項１３】
前記投機的キャッシュ・フラッシュ・イベントが、前記処理回路による投機的キャッシュ・フラッシュ命令の処理を含む、請求項９〜１２の何れか一項に記載の装置。
【請求項１４】
前記投機的キャッシュ記憶領域のエントリーを破棄するとき、前記キャッシュ制御回路が、破棄された前記エントリーにおけるデータがダーティーであるか否かを判定するように、及び前記データがダーティーである場合、さらなる記憶位置に前記データを書き込むように構成されている、請求項８〜１３の何れか一項に記載の装置。
【請求項１５】
前記さらなる記憶位置が、さらなるレベルのキャッシュ又はメモリを含む、請求項１４に記載の装置。
【請求項１６】
前記さらなる記憶位置が、前記投機的キャッシュ記憶領域に対する前記エントリーの割当てをトリガーした前記投機的メモリ・アクセスに応答して前記データが取得された位置を含む、請求項１４に記載の装置。
【請求項１７】
前記投機的キャッシュ記憶領域の各エントリーが、前記データが取得された位置を表す位置メタデータを指定する、請求項１６に記載の装置。
【請求項１８】
前記投機的キャッシュ記憶領域が、前記主キャッシュ記憶領域に独立したキャッシュ記憶構造を含む、請求項１〜１７の何れか一項に記載の装置。
【請求項１９】
前記投機的キャッシュ記憶領域が、前記主キャッシュ記憶領域より高いアソシエティビティをもつ、請求項１〜１８の何れか一項に記載の装置。
【請求項２０】
前記投機的キャッシュ記憶領域が、完全にアソシエティブである、請求項１９に記載の装置。
【請求項２１】
前記投機的キャッシュ記憶領域が、前記主キャッシュ記憶領域を含む同じキャッシュ記憶構造の確保された部分を含む、請求項１〜１６の何れか一項に記載の装置。
【請求項２２】
前記キャッシュ記憶構造が、セット・アソシエティブであり、前記投機的キャッシュ記憶領域が、前記キャッシュ記憶構造の少なくとも１つの確保されたウェイを含む、請求項２１に記載の装置。
【請求項２３】
命令の投機的実行を実施する処理回路と主キャッシュ記憶領域と投機的キャッシュ記憶領域とを備える装置のための方法であって、
前記処理回路によりトリガーされた投機的メモリ・アクセスに応答して、前記投機的メモリ・アクセスが投機的に留まっている間、前記主キャッシュ記憶領域の代わりに前記投機的キャッシュ記憶領域にエントリーを割り当てることと、
前記投機的キャッシュ記憶領域に対する前記エントリーの割当てをトリガーした前記投機的メモリ・アクセスが、メモリ・システムからデータをロードするための投機的ロード・メモリ・アクセスである場合、前記投機的ロード・メモリ・アクセスに応答して前記投機的キャッシュ記憶領域に割り当てられた前記エントリーが、前記メモリ・システムからロードされた前記データを指定することと
を含む方法。
【請求項２４】
命令の投機的実行を実施する処理回路と、
デコードされた命令に応じて前記処理回路の演算を制御するために前記命令をデコードする命令デコーダと、
を備える装置であって、
前記命令デコーダが、依然として解決されていないまま留まる、又は、正しくないとして解決された投機的メモリ・アクセスに応答して、キャッシュに割り当てられた１つ又は複数の投機的エントリーを、前記キャッシュから、破棄するように、又はアクセス不能にするように前記処理回路を制御するように、投機的キャッシュ・フラッシュ命令に応答する、装置。
【請求項２５】
デコードされた命令に応じて処理回路の演算を制御するように前記命令をデコードすることと、
前記処理回路を使用して命令の投機的実行を実施することと、
投機的キャッシュ・フラッシュ命令のデコードに応答して、依然として解決されていないまま留まる、又は、正しくないとして解決された投機的メモリ・アクセスに応答して、キャッシュに割り当てられた１つ又は複数の投機的エントリーを、前記キャッシュから、破棄するように、又はアクセス不能にするように前記処理回路を制御することと
を含むデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、データ処理の分野に関する。
【背景技術】
【０００２】
データ処理装置は、命令に対する入力オペランドが正しいか否か、又は、命令がそもそも実行される必要があるか否かが知られる前に命令が実行される命令の投機的実行をサポートし得る。例えば、処理装置は、分岐の実際の帰結が何でなければならないかが知られる前に、後続の命令がフェッチされ、デコードされ、及び投機的に実行され得るように、分岐命令の帰結を予測するための分岐プレディクタを含み得る。さらにいくつかのシステムは、後続の命令がより高速に処理されることを可能にするために、実際の値がメモリから実際に返信される前にメモリからロードされた値が予測される、ロード投機をサポートし得る。他の形態の投機も可能である。
【発明の概要】
【課題を解決するための手段】
【０００３】
少なくともいくつかの実例が、
命令の投機的実行を実施する処理回路と、
主キャッシュ記憶領域と、
投機的キャッシュ記憶領域と、
投機的メモリ・アクセスが投機的に留まっている間、主キャッシュ記憶領域の代わりに投機的キャッシュ記憶領域にエントリーを割り当てるキャッシュ制御回路であって、エントリーに対して、割当てが、処理回路によりトリガーされた投機的メモリ・アクセスによりもたらされる、キャッシュ制御回路と
を備え、
投機的キャッシュ記憶領域に対するエントリーの割当てをトリガーした投機的メモリ・アクセスが、メモリ・システムからデータをロードするための投機的ロード・メモリ・アクセスである場合、投機的ロード・メモリ・アクセスに応答して投機的キャッシュ記憶領域に割り当てられたエントリーが、メモリ・システムからロードされたデータを指定する、装置を提供する。
【０００４】
少なくともいくつかの実例が、命令の投機的実行を実施する処理回路と主キャッシュ記憶領域と投機的キャッシュ記憶領域とを備える装置のための方法であって、方法が、
処理回路によりトリガーされた投機的メモリ・アクセスに応答して、投機的メモリ・アクセスが投機的に留まっている間、主キャッシュ記憶領域の代わりに投機的キャッシュ記憶領域にエントリーを割り当てることを含み、
投機的キャッシュ記憶領域に対するエントリーの割当てをトリガーした投機的メモリ・アクセスが、メモリ・システムからデータをロードするための投機的ロード・メモリ・アクセスである場合、投機的ロード・メモリ・アクセスに応答して投機的キャッシュ記憶領域に割り当てられたエントリーが、メモリ・システムからロードされたデータを指定する、方法を提供する。
【０００５】
少なくともいくつかの実例が、
命令の投機的実行を実施する処理回路と、
デコードされた命令に応じて処理回路の演算を制御するために命令をデコードする命令デコーダと
を備え、
命令デコーダは、依然として解決されていないまま留まる、又は、正しくないとして解決された投機的メモリ・アクセスに応答して、キャッシュに割り当てられた１つ又は複数の投機的エントリーを、キャッシュから、破棄するように、又はアクセス不能にするように処理回路を制御するように投機的キャッシュ・フラッシュ命令に応答する、装置を提供する。
【０００６】
少なくともいくつかの実例が、
デコードされた命令に応じて処理回路の演算を制御するように命令をデコードすることと、
処理回路を使用して命令の投機的実行を実施することと、
投機的キャッシュ・フラッシュ命令のデコードに応答して、依然として解決されていないまま留まる、又は、正しくないとして解決された投機的メモリ・アクセスに応答して、キャッシュに割り当てられた１つ又は複数の投機的エントリーを、キャッシュから、破棄するように、又はアクセス不能にするように処理回路を制御することと
を含む、データ処理方法を提供する。
【０００７】
本技術のさらなる態様、特徴、及び利点が、添付図面とともに読まれる以下の実例の説明から明らかとなる。
【図面の簡単な説明】
【０００８】
【図１】主キャッシュ領域及び投機的キャッシュ記憶領域を含むデータ処理装置の実例を概略的に示す図である。
【図２】主及び投機的キャッシュ記憶領域の実例としての一実施態様を示す図である。
【図３】キャッシュ割当ての制御を示すフロー図である。
【図４】投機的メモリ・アクセスが解決された後のキャッシュ割当ての制御を示すフロー図である。
【図５】投機的キャッシュ・フラッシュ・イベントに対する応答を示すフロー図である。
【発明を実施するための形態】
【０００９】
装置は、命令の投機的実行を実施するための処理回路と、主キャッシュ記憶領域と、投機的キャッシュ記憶領域と、投機的メモリ・アクセスが投機的に留まっている間、主キャッシュ記憶領域の代わりに投機的キャッシュ記憶領域にエントリーを割り当てるためのキャッシュ制御回路であって、エントリーに対して、割当てが、処理回路によりトリガーされた投機的メモリ・アクセスによりもたらされる、キャッシュ制御回路とを含む。投機的キャッシュ記憶領域に対するエントリーの割当てをトリガーした投機的メモリ・アクセスが、メモリ・システムからデータをロードするための投機的ロード・メモリ・アクセスである場合、投機的ロード・メモリ・アクセスに応答して投機的キャッシュ記憶領域に割り当てられたエントリーが、メモリ・システムからロードされたデータを指定し得る。
【００１０】
投機的メモリ・アクセスであって、その投機的メモリ・アクセスの投機の帰結がまだ正しいとしても正しくないとしても解決されていない、その投機的メモリ・アクセスにエントリーが関連している場合、エントリーが割り当てられ得る対象である独立した投機的キャッシュ記憶領域を提供することによれば、これは、処理回路により投機的にアクセスされたアドレスに関連したエントリーにより主キャッシュ記憶領域を汚染することを回避する。これは、そうしなければ投機的に実行された命令の任意のアーキテクチャ的効果が投機ミス後に覆された後でも投機的に実行された命令の効果がキャッシュに持続し得る性質を利用し得る、潜在的なセキュリティー攻撃から保護することに役立つ。このような攻撃は、センシティブな情報に依存したメモリ・アドレスのパターンに特権的なコードがアクセスすることをもたらすように設計された命令のシーケンスを投機的に実行するように、より特権的なコードをだますように分岐プレディクタ又は他の投機メカニズムを訓練し得、その結果、センシティブな情報にアクセス可能でないより特権的でないコードが、センシティブな情報が推定されることを可能にし得る何らかの情報を与えるために、どのアドレスがキャッシュに割り当てられたか、又は、より特権的なコードによりキャッシュから退かされたかを明らかにするために、キャッシュ・タイミング・サイド・チャンネルを使用し得る。主キャッシュ記憶領域から独立した投機的キャッシュ記憶領域を提供することにより、結果として、エントリーが投機的キャッシュ記憶領域に割り当てられ得る一方で、それらの対応するメモリ・アクセスが投機的に留まり、これは、投機的な結果の割当てが、エントリーが主キャッシュ記憶領域にキャッシュされた対象のアドレスに影響を与えることなく、キャッシュ・アクセス・タイミングを測定することにより得られ得るサイド・チャンネル情報を減らし、したがって、上述のタイプの攻撃に対して機会を制限することを意味する。キャッシュ制御回路は、非投機的メモリ・アクセスに対応したエントリー、又は、正しいとして既に解決された投機的メモリ・アクセスに対応したエントリーを、主キャッシュ記憶領域に排他的に割り当て得る。
【００１１】
投機的キャッシュ記憶領域は、（メモリ・システムからデータをロードするための）投機的ロード・メモリ・アクセスに応答して割り当てられたエントリーに対して使用され得る。投機が正しくなかった場合でも、投機的なロードがデータを修正しないのでキャッシュされたデータが依然として正しいので、メモリからデータを読み出すだけ（でデータを更新しない）投機的な演算は通常、主キャッシュにエントリーを割り当てることを可能にされるので、メモリ・システムから投機的にロードされたデータを記憶するための独立した投機的キャッシュ記憶領域の使用は、データ処理システムの分野における当業者によると直感に反するように見受けられる。しかし、主キャッシュ記憶領域の代わりに投機的キャッシュ記憶領域に、投機的ロード演算に対するエントリーを割り当てることにより、これが投機的にアクセスされたアドレスにおける情報をさらすことを回避し、したがって、上述のタイプのキャッシュ・タイミング・サイド・チャンネル攻撃のリスクを減らす。
【００１２】
投機的キャッシュ記憶領域は、（メモリ・システムにデータを記憶するための）投機的ストア・メモリ・アクセスに応答して、キャッシュに割り当てられたエントリーにも使用され得る。代替的に、処理パイプラインのマイクロ・アーキテクチャに提供された独立した記憶バッファが、キャッシュにデータを書き込む前に投機的ストア・データをバッファしてよく、この場合、それは、ストア・メモリ・アクセスに応答して投機的キャッシュ記憶領域を使用する必要がないものであってよい。
【００１３】
主キャッシュ記憶領域と投機的キャッシュ記憶領域との両方が、処理回路により実行された投機的な命令によりトリガーされた読み出し（ロード）に応答してアクセス可能であり得る。したがって投機的にロードされたデータをキャッシュすることのパフォーマンス上の利点は、依然として達成され得る。上述のタイプの攻撃を解決するための代替的なアプローチは、投機が解決されるまで投機的エントリーのキャッシュを完全に禁止することであり得るが、それは、以前の投機的メモリ・アクセスと同じデータを要求する後続の命令が、より以前のメモリ・アクセスが解決されるまでキャッシュされたデータを読み出すことができず、遅延をもたらすことを意味するので、これはパフォーマンスを損なう。投機的エントリーが主キャッシュ記憶領域における非投機的エントリーから区別され得るが、依然として主キャッシュと投機的キャッシュとの両方をアクセス可能にするように、専用投機的キャッシュ記憶領域を代替的に提供することによれば、これは、パフォーマンスを改善することに役立つ。
【００１４】
処理回路がより特権的な状態からより特権的でない状態に切り替わったことに応答して、キャッシュ制御回路は、投機的キャッシュ記憶領域のエントリーを破棄し、又は、投機的キャッシュ記憶装置のエントリーを処理回路にとってアクセス不能にし得る。これは、より特権的でない状態に関連したコードが、正しくなく投機された命令によりもたらされたキャッシュ割当ての効果に関連したサイド・チャンネル情報を得ることができるようになることを回避する。その一方で、主キャッシュ記憶領域におけるエントリーは、より特権的でない状態においてアクセス可能に留まり得るが、主キャッシュ記憶領域は投機後に依然として未解決の割当てにより汚染されていないので、攻撃者は、正しくない予測後に投機的に実行された命令におけるどの情報も得ることができず、したがって、より特権的な状態がセンシティブな情報を漏らすことをもたらす手法としてこれを使用することはできない。したがって、これは上述のタイプのセキュリティー攻撃を回避する。
【００１５】
キャッシュ制御回路は、投機的メモリ・アクセスが正しいとして解決された後に、投機的キャッシュ記憶領域から主キャッシュ記憶領域に、投機的メモリ・アクセスに応答して割り当てられたエントリーを伝達し得る。この伝達は、投機的メモリ・アクセスが正しいとして解決されたことを検出したことに応答して直接実施され得、又は、後の時点において実施され得る。
【００１６】
例えば、いくつかの実施態様において、エントリーを割り当てた対応するアクセスが解決されるやいなや直ちにエントリーを伝達するのではなく、キャッシュ制御回路は、投機的キャッシュ伝達演算を定期的に実施してよく、この場合、投機的キャッシュ記憶領域の任意のエントリーが、正しいとして解決された、解決された投機的メモリ・アクセスに対応するか否かを判定され、対応する場合、解決された投機的メモリ・アクセスに対応したエントリーが、主キャッシュ記憶領域に伝達される。この定期的なアプローチは、いくつかの実施態様において（より面積及び電力効率の良い状態で）実装することがより簡単であり得る。例えば、投機的キャッシュ記憶領域におけるどのエントリーが特定のメモリ・アクセス命令に対応しているかを命令レベルにより個々の命令において追跡するのではなく、投機的な命令の解決がより粗い粒度で、例えば、特定の数の命令のブロック（エポック）において追跡され得るエポック・ベースのアプローチが使用されてよい。例えば、投機的キャッシュ記憶領域の各エントリーは、そのエントリーが割り当てられることをもたらしたエポック（命令のブロック）の識別子を指定したメタデータを含み得、所与のエポックのすべての命令が、正しく投機されたとして解決されると判定された場合、そのエポックの識別子を指定した任意のエントリーが、次に主キャッシュ記憶領域に伝達され得る。
【００１７】
したがって、エントリー及び命令が正しく投機されたとして解決され得る正確さと、これを追跡することのパフォーマンス及びエリアのオーバーヘッドとの間にトレード・オフが存在し得る。それにもかかわらず、概して、対応するメモリ・アクセスが正しく投機されたと判定されたとき、投機的キャッシュ記憶領域から主キャッシュ記憶領域にエントリーを伝達することにより後続の投機が失敗し、したがって、エントリーが投機的キャッシュ記憶領域から破棄される場合でも、伝達されたエントリーは結果として主キャッシュにアクセス可能に留まり得る。この伝達はさらに、投機的キャッシュ記憶領域のエントリーを他の投機的メモリ演算に対する再割当てのために利用可能にする。
【００１８】
エントリーが投機的キャッシュ記憶領域から主キャッシュ記憶領域に伝達された時点で、そのエントリーにキャッシュされるデータ値が、伝達されたエントリー内にまだ記憶されていないものであり得ることに留意されたい。例えば、いくつかのエントリーに対して、エントリーを割り当てたメモリ・アクセスが、そのエントリーにロードされる実際のデータ値がさらなるキャッシュ又はメモリから受信される前に、正しいとして解決され得る。キャッシュ制御回路はキャッシュ・ラインフィル・メカニズムを含み得、キャッシュ・ラインフィル・メカニズムは、さらなるキャッシュ又はメモリからの以前に要求されたデータ値の受信時に、どのエントリーがキャッシュ・ラインフィル要求に応答して返信されたデータ値を使用して更新されなければならないかを識別するために、投機的キャッシュ記憶領域と主キャッシュ記憶領域との両方を参照し得、その理由は、メモリ・アクセスにおける投機が正しかったか否かの解決の相対的なタイミング、及び、キャッシュ・ラインフィル要求が受信されたことに対する応答に応じて、更新されるエントリーが主又は投機的キャッシュ記憶領域に存在し得るからである。
【００１９】
いくつかの実施態様において、所与の投機的メモリ・アクセスに関連した投機的キャッシュ記憶領域のエントリーは、投機的メモリ・アクセスが正しくないとして解決された場合、破棄され得る。例えば、分岐が予測ミスであると判定された場合、予測ミスされた分岐後にメモリ・アクセス命令に応答して割り当てられた投機的キャッシュ記憶領域のエントリーが破棄され得る。この場合も、この破棄は、対応する投機的メモリ・アクセスが正しくないとして解決されたことの検出に応答して直接実施され得、又は、任意のエントリーが正しくなく投機されたメモリ・アクセスに関連しているか否かを確認する定期的な確認演算において、後で実施され得る。
【００２０】
代替的に、いくつかの場合において、投機的キャッシュ記憶領域からのエントリーの破棄は、特定のメモリ・アクセスが正しくなく投機されたとして解決されたか否かの任意の知識情報に無関係に実施され得る。例えば、上述のタイプのセキュリティー攻撃は、より信頼性のあるコードから、より信頼性の低いコードへの切り替わりが存在する場合にのみリスクとなり得る。処理がより信頼性のあるコード内に留まっている場合、キャッシュ内における依然として未解決の投機的エントリーにアクセスすることができることについて、どのような問題も存在しないこととなり得る。実際、コード内において所与のレベルの信頼性に留まっている間、同じデータへの後続のアクセスのためにアクセス・タイムを短くするために、投機的キャッシュ記憶領域に、依然として未解決の投機的エントリーを維持することがパフォーマンスにとって有益であり得る。したがって、いくつかの場合において投機的キャッシュ記憶領域におけるエントリーは、投機的キャッシュ・フラッシュ・イベントが発生するまで留まり得る。
【００２１】
キャッシュ制御回路は、正しくないとして解決された投機的メモリ・アクセス、又は、依然として未解決の投機的メモリ・アクセスに関連した投機的キャッシュ記憶領域のエントリーを少なくとも破棄するように、投機的キャッシュ・フラッシュ・イベントに応答し得る。投機的キャッシュ記憶領域が、既に解決されたメモリ・アクセスに関連したエントリーを区別することができる場合、これらのエントリーを破棄することが必須というわけではない。それにもかかわらず、いくつかの実施態様において投機的キャッシュ・フラッシュ・イベントが発生したとき、キャッシュ制御回路は、投機的キャッシュ記憶領域のすべてのエントリーを単に破棄し得る。これは、エントリーを割り当てた対応するメモリ・アクセスの投機の帰結を追跡するための投機的キャッシュ記憶領域の各エントリーにおける記録メタデータのオーバーヘッドを減らし得る。
【００２２】
異なるタイプの投機的キャッシュ・フラッシュ・イベントが、投機的キャッシュ記憶領域からのエントリーの破棄をトリガーするために規定され得る。概して、投機的キャッシュ・フラッシュ・イベントは、依然として未解決の投機的メモリ・アクセスの結果が投機的キャッシュ・フラッシュ・イベント後にアクセス可能に留まる場合、投機的キャッシュ・フラッシュ・イベント後に実行されたコードが投機的キャッシュ・フラッシュ・イベント前に実行されたコードに関連した情報にアクセスを行い得るというリスクが存在し得ることを通知する任意のイベントであり得る。
【００２３】
例えば、投機的キャッシュ・フラッシュ・イベントは、処理回路による特権レベルの切替えを含み得る。例えば処理回路がより特権的な状態とより特権的でない状態との間で切り替えることは、フラッシュ・イベントとして処置され、投機的キャッシュ記憶領域からの少なくともいくつかのエントリーの破棄をトリガーし得る。特に、処理回路がより特権的な状態からより特権的でない状態に切り替えることは、投機的キャッシュ・フラッシュ・イベントをトリガーし得る。したがって、処理回路の特権レベルの低下がある場合に、解決されていない投機的メモリ・アクセスに関連したエントリーによる主キャッシュ領域の汚染を回避すること、及び投機的キャッシュ記憶領域からエントリーを破棄することによれば、これは、情報であって、その情報のアクセスが特権レベルの変更前に実行されたより特権的なコードに制限されたその情報を明らかにするために、より特権的でないコードがキャッシュ・タイミング・サイド・チャンネルを使用することができることに対する対抗手段を提供し得る。
【００２４】
投機的キャッシュ・フラッシュ・イベントの別の実例は、処理回路による投機的キャッシュ・フラッシュ命令の処理であり得る。投機的キャッシュ記憶領域からの依然として未解決の正しくなく投機されたメモリ・アクセスに関連した任意のエントリーの破棄をトリガーするために使用され得る投機的キャッシュ・フラッシュ命令を提供することによれば、これは、プログラマーがコードにおけるポイントであって、そのポイントを越えて、投機的な命令によりもたらされるキャッシュ割当てに関する情報の可視化を可能にすることが安全ではないものであり得るそのポイントを、明示的にマーキングすることを可能にし得る。例えば、どの後続のコードも、それらがセンシティブな情報を推定することを可能にし得るサイド・チャンネル情報を得ることができないように、プログラマーは、センシティブな情報を処理するために使用されるコードの部分の最後に投機的キャッシュ・フラッシュ命令を含め得る。いくつかの場合において、投機的キャッシュ・フラッシュ命令は、例えば、投機的キャッシュ記憶領域の、依然として未解決の、又は正しくないとして解決されたエントリーのフラッシュをトリガーすることとも解釈され得る、より低いレベルの特権への戻りをトリガーする例外戻り命令といった、別の効果をさらに提供する命令であり得る。
【００２５】
しかし、アーキテクチャ・レベルにおいて他の効果を一切提供しない（すなわちアーキテクチャ非演算（ｎｏｐ：ｎｏ−ｏｐｅｒａｔｉｏｎ）命令として振る舞う命令）が、キャッシュ制御回路が少なくとも、依然として未解決の、又は、正しくないとして解決されたメモリ・アクセスにより割り当てられたエントリーを投機的キャッシュ記憶領域から破棄することをトリガーする（又は、いくつかの場合において、投機的キャッシュ記憶領域のすべてのエントリーが破棄されることをトリガーする）専用投機的キャッシュ・フラッシュ命令を提供することが有用であり得る。これは、プログラマー／コンパイラがコードにおける境界であって、その境界を越えて任意の投機的に割り当てられたエントリーがキャッシュから破棄されなければならない、その境界を（他の特権レベル又はアーキテクチャ的効果の変更が要求されない場合でも）マーキングすることを可能にして、続いて実行されるコードがキャッシュ・アクセス・タイミングを測定することによりサイド・チャンネル情報を得ることができないというさらなる信頼性を提供する。
【００２６】
エントリーが投機的キャッシュ記憶領域から破棄された場合、エントリーに関連したデータがクリーンなとき、そのエントリーが単に無効化され得る。しかし、場合によっては、投機的キャッシュ記憶領域のエントリーに記憶されたデータは、エントリーが破棄される必要があるときダーティーであり得る。いくつかの場合において、投機的メモリ・アクセスが実施されたとき、主メモリから対応するデータをフェッチすることを必要とする代わりに、データが同じ処理システム内の別のキャッシュ、例えば別のプロセッサ・コア又は他のマスター・デバイスに関連したキャッシュにおいて既に利用可能であった場合、データは上記の、他のキャッシュから投機的キャッシュ記憶領域に書き込まれ得る。この場合、投機的キャッシュ記憶装置に移動されたデータは、それが他のキャッシュに存在していたとき既にダーティーであり得、メモリにまだ書き戻されていないものであり得、したがって、投機的キャッシュ記憶領域にアクセスする処理回路がデータをまだ更新していない場合でも、投機的キャッシュ記憶領域におけるデータは、依然としてダーティーであり得る。したがって、投機的キャッシュ記憶装置に割り当てられたエントリーが単に無効化されたという場合、所与のアドレスからのデータのまさに最新のコピーが失われ得るというリスクが存在し得る。したがって、投機的キャッシュ記憶領域からエントリーを破棄するとき、キャッシュ制御回路は、エントリーに記憶されたデータがダーティーであるか否かを確認し得、ダーティーである場合、さらなる位置にデータを書き込む。
【００２７】
（投機的キャッシュ記憶領域から破棄されたエントリーのデータが書き戻される先の）さらなる記憶位置は、さらなるレベルのキャッシュ又はメモリであり得る。代替的に、さらなる記憶位置は、投機的キャッシュ記憶領域に対するエントリーの割当てをトリガーした投機的メモリ・アクセスに応答してデータが元々取得された位置であり得る。例えば前述の、他の位置は、上述の別のプロセッサ・コア又はマスター・デバイスにおけるキャッシュであり得る。破棄された投機的エントリーにおけるデータを、それが元々取得された位置に返信又はリストアすることによれば、すなわち、これは、正しくなく投機されたとするメモリ・アクセスの解決後に、全体的にシステムにわたるキャッシュに割り当てられたアドレスのパターンが、投機的メモリ・アクセスが全く実行されていなかったとした場合に存在したであろうパターンに、より近いものとなり得、（例えば他のプロセッサ・コアのキャッシュにおける）さらなる位置におけるキャッシュ・タイミングを測定することにより投機的に実行された命令のアクセス・パターンに関する情報を攻撃者が導出する機会を減らすことを意味する。したがって、これは投機的に実行された命令により直接アクセスされない別のキャッシュにおけるコヒーレンシー状態又はキャッシュ割当てパターンの変化から情報を導出し得る二次サイド・チャンネルから保護し得る。データが取得された位置にデータがリストアされることを可能にするために、投機的キャッシュ記憶領域の各エントリーは、データが取得された位置を表す位置メタデータを指定し得る。
【００２８】
投機的キャッシュ記憶領域は、異なる手法により実装されてよい。概して、投機的キャッシュ記憶領域は、主キャッシュ記憶領域から物理的に別個であるキャッシュ記憶領域であり得るので、それらのアクセスが投機的に留まっている間に投機的メモリ・アクセスに応答して割り当てられたエントリーをキャッシュするために使用される物理的位置は、既に解決された非投機的メモリ・アクセス又は投機的メモリ・アクセスに関連したエントリーをキャッシュするために使用されるエントリーと別個である。これは、依然として解決されていない投機的メモリ・アクセスに応答して割当てが行われたとき、キャッシュから非投機的な値を破棄する必要がないことを意味し、その理由は、投機的エントリー及び非投機的エントリーのために割り当てられた物理的に別個である領域が、投機的キャッシュ記憶領域への割当てが主キャッシュ記憶領域において既に行われた割当てに影響を与えないことを意味するからである。これは、上述の攻撃のいくつかの変形例が単にどのアドレスがキャッシュに割り当てられたかを分析するだけでなく、どのアドレスがキャッシュから破棄されたか／退かされたかの分析からサイド・チャンネルの洞察を取得し得るので、有用であり得る。したがって、投機的割当て又は非投機的割当てに使用され得るエントリーを含む１つのシェアされた領域を提供するが、各エントリーに記憶されたメタデータが非投機的割当てから投機的割当てを区別する代替的なアプローチに比べると、物理的に別個である主及び投機的キャッシュ記憶領域を提供することは、このような攻撃に対するより効果的な対抗手段を提供し得る。
【００２９】
１つの実例において、投機的キャッシュ記憶領域は、主キャッシュ記憶領域に独立したキャッシュ記憶構造を備え得る。例えば主及び投機的キャッシュ記憶領域は、キャッシュの位置であって、そのキャッシュの位置から所与のメモリ・アドレスを含むデータがキャッシュから読み出され、又は、キャッシュに書き込まれなければならない、キャッシュの位置を選択するための独立したインデックス処理、選択、及び／又はタグ比較回路を含み得る。したがって、主及び投機的キャッシュ記憶領域は、異なるインデックス処理又はタギング・スキームを含み得る。主及び投機的領域に対して完全に独立したキャッシュ記憶構造を含むことの利点は、アソシエティビティ、インデックス処理、又はタギング・スキーム、及び、各エントリーに対して提供されたメタデータが、それらの領域の必要性に応じて主及び投機的領域に対して異なる手法により設計されることを、これが可能にすることである。例えば、投機的領域は、典型的には、合理的に頻繁に置換され得る比較的少ないエントリーを記憶する必要があるだけであり得る。対照的に、主記憶領域は、より大きいボリュームのデータを取り扱うように設計され得るが、より長い期間の記憶に対してよりエネルギー効率の高いものであり得る割当てポリシーを使用し得る。
【００３０】
例えば、投機的キャッシュ記憶領域は、主キャッシュ記憶領域より高いアソシエティビティを含み得る。すなわち、所与のメモリ・アドレスに関連したデータ値は、主キャッシュ記憶領域における特定の位置のセットに記憶されるように制限され得、それらの位置の外部に記憶されることができない。投機的キャッシュ記憶領域に、所与のアドレスに関連したデータ値が位置し得る、より多数のとり得る位置が存在し得る。いくつかの実施態様において、任意の所与のアドレスに関連したデータが投機的キャッシュ記憶領域の任意のエントリーに記憶され得るように、投機的キャッシュ記憶領域は完全にアソシエティブであり得る。対照的に、主キャッシュ記憶領域は、セット・アソシエティブであり得る。これは、投機的キャッシュ記憶領域が比較的少ないエントリーを必要とするにすぎないものであり得るということを利用し得、それを完全にアソシエティブにすることにより、これはセット・アソシエティブ構造における同じセットに対応した異なる投機的に実行されたメモリ演算に応答して割り当てられたエントリー間にコンフリクトが存在するケースによりもたらされるパフォーマンス・ロスを回避する。対照的に、主キャッシュ記憶領域に対して、エントリーの総数は、投機的キャッシュ記憶領域に対するものより多いものであり得るので、セット・アソシエティブ割当てスキームは、よりエネルギー効率の高いものであり得、その理由は、それが、どのエントリーが所与のアドレスに関連したデータを記憶するかを見つけるためにキャッシュがアクセスされるごとに、アドレス・タグを比較するために、より少ないエントリーしか参照される必要がないことを意味するからである。
【００３１】
他の実施例において、投機的キャッシュ記憶領域は、主キャッシュ記憶領域を含む同じキャッシュ記憶構造の確保された部分として実装され得る。例えば、投機的キャッシュ記憶領域が、主キャッシュ記憶領域から依然として物理的に別個であり得ることにより、投機的キャッシュ記憶領域への割当てが主キャッシュ記憶領域における非投機的エントリーの破棄を一切もたらす必要がない一方で、それらは、例えば共通のインデックス処理／タギング・スキームを使用して同じキャッシュ記憶構造の一部を形成し得る。例えば、キャッシュ記憶構造は、セット・アソシエティブ・キャッシュを備え得、投機的キャッシュ記憶領域は、キャッシュ記憶構造の少なくとも１つの確保されたウェイを含み得る。
【００３２】
装置は、投機的実行命令を実施する処理回路と、デコードされた命令に応じて処理回路の演算を制御する命令をデコードする命令デコーダとを含み得る。命令デコーダは、依然として解決されていないまま留まる、又は、正しくないとして解決された投機的メモリ・アクセスに応答して、キャッシュに割り当てられた１つ又は複数の投機的エントリーを破棄するように、又はキャッシュからアクセス不能にするように処理回路を制御するように投機的キャッシュ・フラッシュ命令に応答し得る。キャッシュに残った投機的エントリーが存在しないことを確実なものとするためにプログラマーが使用し得るタイプの命令をアーキテクチャ・レベルにおいて提供することにより、これは上述のタイプの攻撃に対する脆弱性を減らすことに役立ち得る。
【００３３】
図１は、データ処理装置２の実例を概略的に示す。これは単に装置のコンポーネントの部分集合のハイ・レベルの表現であり、装置が示されていない多くの他のコンポーネントを含んでよいことが理解される。装置２は、命令デコーダ６によりデコードされた命令に応答してデータ処理を実施するための処理回路４を備える。命令デコーダ６は、命令キャッシュ８からフェッチされた命令をデコードして、命令により表される対応する処理演算を実施するように処理回路４を制御するための制御信号１０を生成する。処理回路４は、レジスタ１４に記憶された値に演算を実施して、レジスタに書き戻される結果値を生成するための１つ又は複数の実行ユニット１２を含む。例えば、実行ユニットは、算術演算又は論理演算を実行するための算術／論理ユニット（ＡＬＵ：ａｒｉｔｈｍｅｔｉｃ／ｌｏｇｉｃ  ｕｎｉｔ）、浮動小数点オペランドを使用して演算を実行するための浮動小数点ユニット、及び／又は、複数の別々のデータ要素を含むオペランドにおいてベクトル演算を実施するためのベクトル処理ユニットを含み得る。処理回路は、レジスタ１４とメモリ・システムとの間におけるデータの伝送を制御するためのメモリ・アクセス・ユニット（又は、ロード／ストア・ユニット）１５をさらに含む。メモリ・システムは、命令キャッシュ８、データ・キャッシュ１６、及び、データ・キャッシュ１６及び命令キャッシュ８の下流に提供されたさらなる記憶装置、例えばさらなるレベルのキャッシュ（例えばレベル２又はレベル３キャッシュ）及び主メモリ１８を含む。ロード演算に応答して、メモリ・アクセス回路１５は、所与のアドレスに関連したデータを返信するように、及び、レジスタ１４にロードされたデータを書き込むようにメモリ・システムを制御する。ストア演算に応答して、レジスタ１４からの値がメモリ・アクセス回路１５によりメモリ・システムに書き込まれる。
【００３４】
図１に示されるように、装置２は、処理回路４により処理される特定の命令の想定される挙動に関する予測を行うための、及び、より以前の命令の予測された帰結に応じて後続の命令を投機的に実行するように装置を制御するための、少なくとも１つの形態の投機メカニズム２０を含み得る。例えば、投機メカニズム２０は、実際の分岐の帰結が解決されることを待つことを必要とせずに後続の命令がフェッチされ、デコードされ、及び、投機的に実行され得るように、分岐命令のとられた／とられていない帰結を予測するための、及び／又は、分岐命令の対象アドレスを予測するための分岐プレディクタを備え得る。分岐予測が正しくないことが分かった場合、レジスタ１４における続いて実行される投機的な命令のアーキテクチャ的効果が覆され得、レジスタ１４におけるアーキテクチャ状態は、分岐が行き着かれたポイントまでリストアされ得、次に、命令の代替的なパスが分岐後に実行され得る。しかし、分岐が正しく予測された場合、より早くパイプラインを後続の命令で満たすことにより、これは、パフォーマンスが改善されることを可能にする。
【００３５】
投機メカニズム２０の別の実例は、データが実際に返信される前にメモリ・システムからロードされるデータを予測し得るロード投機ユニットであり得、結果として、後続の命令が予測されたデータ値を使用して投機的に実行され得る。この予測が正しくないことが後で分かった場合、再度、後続の投機的な命令がキャンセルされ得、レジスタ１４におけるアーキテクチャ状態が、投機されたロードが行き着かれたポイントまでリストアされる。
【００３６】
したがって、それらの命令への入力が正しいか否か、又は、それらの命令がそもそも実行される必要があるか否かが実際に知られる前の処理回路４による命令のこのような投機的実行は、高いプロセッサの性能を提供することにおいて非常に有益であり得る。しかし、このような投機が、メモリ・アクセスが投機的に実施されることをもたらした場合、投機的な命令が予測ミスであるとして、又は正しくなく投機されたとして解決された後でも、及び、投機的な再実行された命令のアーキテクチャ的効果が覆された後でも、投機的メモリ・アクセスによりトリガーされたキャッシュ１６への割当てが可視状態に留まり得ることが最近認識されている。これは、次に、続いて実行されるコードが、キャッシュ・タイミング・サイド・チャンネルを使用することにより、より以前のコードによりどのようなデータがロードされたかを調査することを可能にし得る。キャッシュ・タイミング・サイド・チャンネルの背景にある基本原理は、キャッシュへの割当てのパターン、及び、特に、どのキャッシュ・セットが割当てのために使用されたかが、以前にキャッシュに存在していたエントリーにアクセスするためにかかった時間を測定することにより、又は、割り当てられたエントリーにアクセスする時間を測定することにより特定され得ることである。これは、したがって、どのアドレスがキャッシュに割り当てられたかを特定するために使用され得る。
【００３７】
投機的メモリ読み出しを使用した投機ベースのキャッシュ・タイミング・サイド・チャンネルが最近提案されている。投機的メモリ読み出しは、高度なマイクロ・プロセッサに典型的であり、非常に高いパフォーマンスを可能にする全体的な機能の一部である。アーキテクチャ的に解決されていない分岐（又はプログラム・フローの他の変化）を越えたキャッシュ可能位置に投機的メモリ読み出しを実施し、さらに、それらの読み出し自体の結果を使用して、さらなる投機的メモリ読み出しのアドレスを形成することにより、これらの投機的な読み出しはキャッシュであって、そのキャッシュのアドレスが第１の投機的読み出しの値を示すそのキャッシュへのエントリーの割当てをもたらす。信頼性のないコードが、本来はその信頼性のないコードにおいてアクセス可能でない位置の第１の投機的読み出しを信頼性のないコードがもたらす手法であって、しかし、キャッシュ内における第２の投機的割当ての効果がその信頼性のないコードにより測定され得る手法により、投機を制御することができる場合、これは利用可能なサイド・チャンネルになる。
【００３８】
任意の形態のスーパーバイザリー・ソフトウェアに対して、信頼性のあるソフトウェアによりアクセスされるアレイ又は同様の構造にオフセットとして使用されるデータ値を渡すことは、信頼性のないソフトウェアに対して一般的である。例えば、（信頼性のない）アプリケーションがファイル記述子ＩＤに基づいて、開いているファイルに関する情報を要求し得る。もちろん、スーパーバイザリー・ソフトウェアは、その使用前にオフセットが適切な範囲内にあるかを確認し、したがって、このようなパラダイムのためのソフトウェアは、次の形態で記述され得る。
【数１】
2021510434.tif 000003
【００３９】
現代のマイクロ・プロセッサでは、プロセッサの実施態様は、一般的に（ライン７により暗示される）ｕｎｔｒｕｓｔｅｄ＿ｏｆｆｓｅｔ＿ｆｒｏｍ＿ｕｓｅｒの範囲確認に関連した分岐を実行する前にｖａｌｕｅを確立するために投機的に（上記のコードにおけるライン９により暗示される）データ・アクセスを実施し得る。スーパーバイザリー・レベル（例えばＯＳカーネル又はハイパーバイザー）においてこのコードを走らせるプロセッサは、信頼性のないソフトウェアにより渡されたｕｎｔｒｕｓｔｅｄ＿ｏｆｆｓｅｔ＿ｆｒｏｍ＿ｕｓｅｒに対する範囲外の値により決定された、そのスーパーバイザリー・レベルに対してアクセス可能な通常のメモリにおける任意の場所から投機的にロードし得る。投機が正しくなかった場合、ロードされた値がハードウェアにより破棄されるので、これはアーキテクチャ的に問題にならない。
【００４０】
しかし、高度なプロセッサは、さらなる投機に対して投機的にロードされた値を使用し得る。投機ベースのキャッシュ・タイミング・サイド・チャンネルにより利用されるのは、このさらなる投機である。例えば、前述の実例は、次の形態に拡張され得る。
【数２】
2021510434.tif 000004
【００４１】
この実例において、ｕｎｔｒｕｓｔｅｄ＿ｏｆｆｓｅｔ＿ｆｒｏｍ  ｕｓｅｒと組み合わされてａｒｒ１−＞ｄａｔａ（ライン１０）から計算されたアドレスを使用してメモリからロードされた「ｖａｌｕｅ」は、次に、さらなるメモリ・アクセス（ライン１３）の基礎として使用される。したがって、ｖａｌｕｅ２の投機的なロードは、ｖａｌｕｅに対して投機的にロードされたデータから導出されたアドレスから来る。プロセッサによるｖａｌｕｅ２の投機的なロードがキャッシュへの割当てをもたらす場合、次にそのロードのアドレスの一部は、標準的なキャッシュ・タイミング・サイド・チャンネルを使用して推測され得る。そのアドレスがｖａｌｕｅにおけるデータに依存するので、ｖａｌｕｅのデータの一部は、サイド・チャンネルを使用して推測され得る。このアプローチをｖａｌｕｅの異なるビットに適用することにより、（多くの投機的実行において）ｖａｌｕｅのデータの全体が特定され得る。したがって、信頼性のないソフトウェアは、ｕｎｔｒｕｓｔｅｄ＿ｏｆｆｓｅｔ＿ｆｒｏｍ＿ｕｓｅｒに対して範囲外の量を提供することにより、スーパーバイザリー・ソフトウェアにとってアクセス可能な任意の場所にアクセスし得、このようにして、このアプローチは、スーパーバイザリー・ソフトウェアによりアクセス可能な任意のメモリの値をリカバーするために、信頼性のないソフトウェアにより使用され得る。
【００４２】
現代のプロセッサは、命令キャッシュ、データ・キャッシュ、及び分岐予測キャッシュを含む複数の異なるタイプのキャッシュ手法を含む。これらのキャッシュにおけるエントリーの割当てが、信頼性のない入力に基づいてロードされた何らかのデータの任意の部分の値により決定された場合、原理的にこのサイド・チャンネルは刺激され得る。
【００４３】
このメカニズムの汎化として、基礎となるハードウェア技術が、分岐を越えたコードが投機的に実行され得ること、したがって、分岐が後にメモリにアクセスする任意のシーケンスが投機的に実行され得ることを意味することが理解されなければならない。このような投機では、投機的にロードされたある値が、次に、第２のロード又はさらに投機的に実施され得る間接分岐のためのアドレスを構築するために使用される場合、その第２のロード又は間接分岐は、そうしなければその値を読み出すことができないコードによりキャッシュのタイミング分析を使用して読み取られ得る手法により第１の投機的なロードによりロードされた値の標示を残し得る。この汎化は、一般的に生成された多くのコード・シーケンスが、他の、より特権的でないソフトウェアにより読み取られ得るキャッシュ割当てのパターンに情報を漏らすことを意味する。この問題の最も深刻な形態が、このセクションの前半において説明されているものであり、この形態では、より特権的でないソフトウェアがこの手法によりどのような値が漏らされるかを選択することができる。
【００４４】
したがって、このタイプの攻撃に対する対抗手段を提供することが望ましい。図１に示されるように、キャッシュ、例えばレベル１データ・キャッシュ１６は、上述のタイプの攻撃から保護することに役立つように、物理的に別個の主キャッシュ記憶領域３０及び投機的キャッシュ記憶領域３２を備え得る。図２は、主キャッシュ記憶領域３０及び投機的キャッシュ記憶領域３２の実例をより詳細に概略的に示す。キャッシュに対する割当ては、キャッシュ制御回路３４により制御される。図２に示されるように、キャッシュ制御回路３４は、キャッシュ１６へのエントリーの割当てが投機的メモリ・アクセスによりトリガーされた場合、投機的メモリ・アクセスが投機的に留まっている間、主キャッシュ記憶領域３０の代わりに投機的キャッシュ領域３２に割当てが行われるように、割当てを制御する。その一方で、主キャッシュ記憶領域３０に対する割当ては、非投機的メモリ・アクセスに応答して、又は、正しいとして既に解決された投機的メモリ・アクセスに応答して排他的に行われる。したがって、これは、依然として投機的な、又は投機に失敗したとして解決されたエントリーにより主キャッシュ領域が汚染されることを回避する。投機的メモリ・アクセスが正しいとして解決された場合、そのメモリ・アクセスに応答して投機的キャッシュ記憶領域３２に割り当てられたエントリーは、主キャッシュ領域に伝達され得る。
【００４５】
処理が同じ特権レベルに留まっている間、主キャッシュ領域３０と投機的キャッシュ領域３２との両方におけるすべてのエントリーが、読み出し要求又はロード命令によりアクセス可能であり得る。しかし、特定のフラッシュ・イベント（例えば、上述のタイプの攻撃のリスクが存在することを通知し得るイベント）が発生したとき、エントリーが、投機的キャッシュ領域から破棄され、又はアクセス不能にされ得、それらの投機的割当てが、投機的キャッシュ・フラッシュ・イベント後に実行されたコードにとって可視状態となることを防止する。例えば、このような破棄は、処理回路４の特権レベルの低下に応答して行われ得る。処理回路４は、データにアクセスする異なる権利に関連した多くの特権状態のうちの１つにおいて動作し得る。概して、より特権的な状態では、処理回路４は、より特権的でない状態における動作時に処理回路にとってアクセス不能な何らかのデータにアクセス可能であり得る。例えば、より特権的な状態は、カーネル・レベル（又は、オペレーティング・システム・レベル）特権状態であり得る一方で、より特権的でない状態は、アプリケーション特権レベルにある間に実行されるアプリケーションが、カーネル・レベルにとってアクセス可能な特定のデータにアクセスすることから除外され得るアプリケーション・レベル状態であり得る。投機的キャッシュ領域３２のコンテンツを破棄することによれば、例えば例外返信時といった、より特権的な状態からより特権的でない状態への切り替わりが存在するとき、これは、より特権的でないコードが結果的に、非投機的な、又は解決されたメモリ・アクセスに応答して行われたキャッシュ割当てしか見ることができず、特権制御メカニズムにより提供されるセキュリティー保護を回避するために、キャッシュ・タイミング・サイド・チャンネルを使用して、投機的に実行された命令によりどのようなエントリーが割り当てられたかを調査することを回避することを意味する。
【００４６】
図２の実例において、主キャッシュ記憶領域３０及び投機的キャッシュ記憶領域３２は、異なるアソシエティビティ及び異なるキャッシュ・インデックス処理スキームを備える完全に独立したキャッシュ記憶構造として実装される。この実例では、主キャッシュ記憶領域は、セット・アソシエティブ（Ｎウェイ・セット・アソシエティブ、例えば、この実例ではＮ＝４）である。したがって、特定のアドレスに関連したデータは、メモリ・アドレスから導出されたセット・インデックスにより識別されたＮ個の位置のセットにのみ位置し得、Ｎ個の位置のセットの各々が、エントリーのインデックス処理されたセットのうちの任意のものがそのアドレスに対してデータを実際に記憶したか否かを判定するために、キャッシュにクエリを出したときにデータが探索される対象となるアドレスの対応するタグ部と比較され得るアドレスの一部を識別するタグ情報３６を含む。
【００４７】
対照的に、投機的キャッシュ記憶領域３２は、例えば８個又は１６個のエントリーの比較的小さいバッファとして実装され得、完全にアソシエティブなキャッシュ構造として提供され得、結果として、任意のアドレスに対するデータは、投機的キャッシュ記憶領域のエントリーのうちの任意のものに記憶され得る。この場合、所与のエントリーに関連したデータの完全なアドレス３８は、投機的キャッシュ領域が要求された対象アドレスに対応した任意のデータを記憶しているか否かの参照を可能にするために、エントリーに記憶され得る。投機的キャッシュ領域に対する完全にアソシエティブな実施態様は、投機的キャッシュ記憶領域からデータが破棄される必要があることにつながるセット・コンフリクトを回避するために、より効果的であり得る。
【００４８】
主キャッシュ記憶領域では、各エントリー３５が、タグ３６及び記憶されたデータに加えて、キャッシュ割当て又はコヒーレンシーを制御するために（図２に明示的に示されていない）メタデータをさらに指定し得る。例えばこのメタデータは、エントリーが有効であるか否かを指定した有効情報を対応するデータのコヒーレンシー状態を指定するコヒーレンシー状態情報、例えば、データがクリーンであるかダーティーであるか、又は、それが、図１）のプロセッサ・コア２を含むより大きい処理システムにおける他のマスターにおけるキャッシュとシェアされているか否か、及び／又は、キャッシュに対する新しいエントリーの割当てを承諾する準備が整った利用可能なエントリーが存在しない場合、エントリー３５のどのセットが退かされるかを制御するためのエビクション・ポリシー情報を含み得る。
【００４９】
対照的に、投機的キャッシュ領域に対して、各エントリー３７に記憶されたメタデータ４０は、主キャッシュ記憶領域におけるメタデータとは異なる形態をもち得る。例えば、主キャッシュ領域に対する上述のメタデータのうちの任意のものに加えて、投機的キャッシュ領域３２におけるエントリー３７８は、例えば、投機的キャッシュ領域３２のエントリーと処理回路４により処理される投機的に実行された命令（又は、投機的に実行された命令のブロック）との間の対応を追跡するための投機追跡情報といった追加的な情報をさらに記憶し得る。いくつかの場合において、メタデータ４０は、投機的キャッシュ領域３２におけるエントリー３７の割当てをトリガーした投機的ロード命令の特定のアドレスを識別し得る。しかし、実際には個々の命令ごとの追跡は、妥当なものより複雑であり得、他の実施態様は、より粗い粒度で投機を追跡し得る。例えば、メタデータ４０は、処理回路４により実行される命令の特定のブロック（エポック）の識別子を指定し得る。ブロックにおける命令のすべてが正しく投機されたとして解決されたときこれは、命令の対応するブロックの識別子によりタグ付けされた投機的キャッシュ記憶領域３２の任意のエントリー３７の、投機的キャッシュ記憶領域３２から主キャッシュ記憶領域３０への伝達をトリガーし得る。
【００５０】
いくつかの場合において、投機的キャッシュ記憶領域３２のエントリー３７において指定されたメタデータ４０は、割り当てられたエントリーにそれがロードされたとき、エントリー３７におけるデータが取得された位置を識別する情報をさらに含み得る。この位置は、図１に示されるようにさらなるキャッシュ又は主メモリ１８であり得、又は、マルチ・プロセッサ・システムでは異なるプロセッサ・コアに関連したキャッシュでもあり得る。例えば、システムは、図１に示されるようにプロセッサの複数のインスタンスを含み得、又は、異なる構成をもつがキャッシュをさらに備える他のマスターを含み得る。この場合、メタデータ４０は、データが取得された特定のキャッシュの位置を指定し得るので、投機的キャッシュ記憶領域３２のエントリー３７が破棄される必要があり、及び、そのエントリーにおけるデータがダーティーである場合、そのデータが、主メモリに書き戻される必要があるのではなく、それが取得された位置に書き戻され得る。いくつかの場合においてこれは、実施することがより高速であり得る。さらに、ある位置であって、その位置からデータが来た、その位置にデータを書き戻すことは、前述の、他のキャッシュにおいてキャッシュ割当てにおける変化がより少ないことを意味し得、このことは、攻撃者がシステムにおける全体的なキャッシュ割当ての分析から、正しくなく投機的に実行された命令の挙動に関する情報を導出することができる機会を減らす。
【００５１】
図２は、投機的キャッシュ領域３２が主キャッシュ領域３０から完全に独立した実施例を示す一方で、別の実施態様は、図２の主領域３０に対して示されるように１つのセット・アソシエティブ構造を提供し得るが、投機的に割り当てられたエントリーを記憶するためのセット・アソシエティブ構造の少なくとも１つのウェイ４４を確保するとともに、他のウェイ４４が非投機的割当てに対して排他的に使用される。これは、上述の攻撃からの同様の保護を提供し得る。
【００５２】
１つの実例において、投機的キャッシュ領域は、次のように実装され得る。既存のキャッシュとともに、投機的に追加されたメモリ・アクセスを保持する「投機キャッシュ」３２が提供され得る。例えば、投機キャッシュは、別の「キャッシュ・ウェイ」として振る舞うが、次の性質をもつサイズ的に完全にアソシエティブなバッファＮキャッシュ・ライン（例えばＮ＝８、１６、又は３２）を備え得る。
【００５３】
１）エントリーは、投機的アクセスの結果としてこの投機キャッシュに割り当てられ、それらは、エントリーが割り当てられることをもたらした命令のブロックを示す投機的エポック情報によりタグ付けされ、それは、他のメモリ・アクセスのために、又は、投機キャッシュ３２におけるエントリーに関連したアクセスがそれらの投機を渡したか／失敗したか、又は、依然として投機的であるか否かの判定を可能にする任意の他のメタデータとともに使用される。
【００５４】
２）それらの投機を渡すアイテムは、主キャッシュ３０に割り当てられ得る。
【００５５】
３）それらの投機に失敗するアイテムは、主キャッシュ３０に割り当てられることができないが、例外レベルの変更まで維持され得る。
【００５６】
４）特権の低下（すなわち例外返信）時に、それらの投機に失敗する投機キャッシュ３０におけるエントリーが（それらがクリーンな場合は）破棄され、又は、（それらがダーティーな場合は）書き戻される（その後者のケースは、他の位置から投機キャッシュ３０に移動するダーティーなラインに起因し得る）。
【００５７】
図３は、キャッシュ割当てを制御する方法を示すフロー図を示す。ステップ５０において、例えば、要求されたアドレスがキャッシュ１６内にまだキャッシュされていないとき、ロード命令が行き着かれ、したがって、データがメモリ・システムからロードされることの要求をメモリ・アクセス回路１５が発したとき、キャッシュ制御回路３４がキャッシュへのエントリーの割当てが要求されたか判定する。ステップ５２において、キャッシュ制御回路は、割当てが、投機的に留まる投機的メモリ・アクセスに応答したものか否かを判定する。その場合、ステップ５４において、エントリーが投機的キャッシュ領域３２に割り当てられる。割当てが、投機的に留まる投機的メモリ・アクセスに応答したものでない場合、ステップ５６において、主キャッシュ記憶領域３０に割当てが行われる。
【００５８】
代替的に、いくつかの実施例において、メモリ・アクセスが投機的に実施されたか否かを、キャッシュ割当ての時点において判定しようと試行するのではなく、キャッシュ制御装置３４は、任意の新しいエントリーを最初から投機的キャッシュ記憶領域に単に割当て、次に、対応するメモリ・アクセス又は命令のブロックが正しく予測されたとして解決された場合、新しいエントリーを主キャッシュ記憶領域３０に伝達し得る。この場合、キャッシュ制御装置３４は、投機的キャッシュ領域からエントリーを伝達することによる以外に、主キャッシュ領域３０への新しいエントリーの直接的な割当てを行うことが一切できないものであり得る。したがって、いくつかのメモリ・アクセスが非投機的に実施される場合でも、それらは投機的キャッシュ記憶領域に依然として割り当てられ得るが、それらが正しいとして既に解決されている場合、（例えばブロック伝達の一部として）主キャッシュに比較的迅速に伝達され得る。
【００５９】
図４は、投機的メモリ・アクセスが解決された場合の、キャッシュ制御装置３４の機能を示すフロー図を示す。ステップ６０において、特定の投機的メモリ・アクセスが解決されたと判定される。ステップ６２において、投機が正しかったか否かを判定される。投機が正しかった場合、ステップ６４において、投機的メモリ・アクセスに応答して投機的キャッシュ記憶領域３２に割り当てられたエントリーは、投機的キャッシュ記憶領域３２から主キャッシュ記憶領域３０に伝達され得る。この伝達は、投機が正しかったと判定したことに応答して直接的に発生し得、又は、後のある時点において発生し得る。例えば、対応するエントリーが伝達され得るか否かを各命令に対して確認する代わりに、別のアプローチは、時に応じて実施される定期的な確認演算を提供することであり得る。確認演算が実施された場合、キャッシュ制御装置は、投機的キャッシュ領域３２の各エントリーを通して、それが正しいとして完全に解決された１つ又は複数の命令のブロックに対応するか否かを確認するようにステップし得、対応する場合、それらのエントリーのうちの任意のものが主キャッシュ領域３０に伝達され得るとともに、依然として未解決の命令に関連したエントリーが投機的キャッシュ領域内に保有され得る。
【００６０】
その一方で、ステップ６２において、投機的メモリ・アクセスをもたらした投機が正しくないとして解決されたと判定された場合、ステップ６６において、そのメモリ・アクセスに関連したエントリーが、それを主キャッシュ領域３０に伝達せずに、破棄され、又は投機的キャッシュ記憶領域３２においてアクセス不能にされ得る。エントリーが破棄された、又はアクセス不能にされた場合、そのエントリーにおけるデータがダーティーとして示されたとき、ステップ６８において、そのデータは、さらなるレベルのキャッシュ又は主メモリ１８であり得る、又は、エントリーが以前に割り当てられたときにデータが取得された位置としてメタデータ４０において示された位置であり得るさらなる記憶位置に書き戻される。
【００６１】
図４の処理の代替的な実施態様において、ステップ６６及び６８は省略されてよく、特定の投機的に実行された命令が正しくなく投機されたと判定された時点において、投機的キャッシュ記憶領域３２のエントリーを実際に破棄する必要が存在しない場合があり得る。投機が正しくないとして解決された後に、エントリーが投機的キャッシュ記憶領域３２に留まっている場合でも、後続の命令が同じデータにアクセスことを依然として必要とし得ることが依然として起こり得る。コードがより特権的でないコード、又は、特定のセンシティブな情報にアクセスを行ってはならないコードに後から切り替わる場合、上述のタイプの攻撃のリスクが発生し得る。しかし、投機ミスが特権的に留まっているか、又は、センシティブな情報にアクセス可能になることを可能にされた後に、投機ミスにもかかわらずコードが実行された場合、投機的キャッシュ領域３２内に正しくなく投機された命令に関連した割当てを保有することに問題がない。実際、投機ミスが存在する場合でも、後続の命令が同じアドレス位置にアクセスしようと試行し得ることが依然として起こり得るので、これらのエントリーを保有することはパフォーマンス上の利点を提供し得る。したがって、いくつかの場合において、破棄することは、投機的な命令を解決する時点においてではなく、特定のセンシティブな情報にアクセス可能であってはならないコードの一部への切り替わりが存在するときトリガーされ得る独立したフラッシュ・イベントに応答して行われ得る。
【００６２】
図５は、このようなフラッシュ・イベントの取扱いを示すフロー図である。ステップ７０において、投機的キャッシュ・フラッシュ・イベントが発生する。例えば、このイベントは、例えば例外返信、又は、特権状態からより特権的でない状態への切り替わりといった、処理回路４が動作している特権レベルの低下であり得る。さらに、フラッシュ・イベントの別の実例は、処理回路４による投機的キャッシュ・フラッシュ命令の実行であり得る。すなわち、命令デコーダ６は、投機的キャッシュ・フラッシュ命令が実行されたときに、解決されていない投機的メモリ・アクセス又は正しくなく投機されたとして解決されたメモリ・アクセスに関連した投機的キャッシュ記憶領域３２の任意のエントリーを破棄するようにキャッシュ制御装置３４をトリガーし得る投機的キャッシュ・フラッシュ命令として、命令の特定の部分集合を規定する命令セット・アーキテクチャをサポートし得る。これは、プログラマー又はコンパイラが、後続のコードが上述のサイド・チャンネル方法を通して以前に実行されたコードの演算に関する洞察を得ることを回避するために、投機的割当てがキャッシュから破棄されなければならないコードにおけるポイントを明示的にマーキングすることを可能にし得る。例えば、投機的キャッシュ・フラッシュ命令は、他のアーキテクチャ的効果をもたない専用命令、すなわちアーキテクチャＮＯＰ命令であり得る。
【００６３】
ステップ７０において投機的キャッシュ・フラッシュ・イベントが発生したことに応答して、ステップ７２において、キャッシュ制御装置３４は、少なくとも、解決されずに留まっている、又は、失敗した（正しくなく投機された）として既に解決された投機的メモリ・アクセスに応答して割り当てられたエントリー３７を破棄するようにキャッシュ１６を制御する。いくつかの場合において、このような解決されていない、又は失敗した投機的エントリーのみが破棄され得、正しいとして解決されたメモリ・アクセスに関連したエントリーは破棄される必要がない（例えば主キャッシュ領域３０に伝達することをエントリーに対して確認する定期的なスイープは、それらのエントリーが正しいとして解決されているので、まだ実施されていないものであり得る）。しかし、実際には、エントリーが解決されたか解決されていないかを確認することに関連したオーバーヘッドは妥当でないものであり得、より単純なアプローチは、投機的キャッシュ・フラッシュ・イベントに応答して、投機的キャッシュ領域３２のすべてのエントリーを破棄することであり得る。すべてのエントリーが破棄されたか、解決されていないもの、又は失敗したエントリーのみが破棄されたかにかかわらず、破棄されたエントリーにおけるデータがダーティーな場合、再度さらなる記憶位置への書き戻しが、図４のステップ６８と同様に実施され得る。
【００６４】
本出願において、「するように構成された」という表現は、装置の要素が規定の動作を行うことができる構成をもつことを意味するように使用される。この文脈において、「構成」は、ハードウェア又はソフトウェアの相互接続のアレンジ又は手法を意味する。例えば、装置は規定の動作を提供する専用ハードウェアを含んでよく、又はプロセッサ又は他の処理デバイスが機能を実施するようにプログラムされてよい。「するように構成された」とは、規定の動作を提供するために装置要素が何らかの手法により変えられる必要があることを意味するわけではない。
【００６５】
本発明の実例としての実施例が添付図面を参照しながら本明細書において詳細に説明されているが、本発明はそれらの精密な実施例そのものに限定されないこと、及び、添付の請求項により規定されている本発明の範囲及び趣旨から逸脱することなく、当業者によりその中において様々な変形及び変更が行われてよいことが理解される。
【００６６】
さらなる実例としての構成が以下の付記項に記載される。
【００６７】
（１）命令の投機的実行を実施する処理回路と、
主キャッシュ記憶領域と、
投機的キャッシュ記憶領域と、
投機的メモリ・アクセスが投機的に留まっている間、主キャッシュ記憶領域の代わりに投機的キャッシュ記憶領域にエントリーを割り当てるキャッシュ制御回路であって、エントリーに対して、割当てが、処理回路によりトリガーされた投機的メモリ・アクセスによりもたらされる、キャッシュ制御回路と
を備える装置。
【００６８】
（２）キャッシュ制御回路が、非投機的メモリ・アクセス又は正しいとして解決された投機的メモリ・アクセスに対応したエントリーを、主キャッシュ記憶領域に排他的に割り当てるように構成されている、付記項１に記載の装置。
【００６９】
（３）主キャッシュ記憶領域と投機的キャッシュ記憶領域との両方が、処理回路により実行された投機的な命令によりトリガーされた読み出しに応答してアクセス可能である、付記項１又は２に記載の装置。
【００７０】
（４）処理回路がより特権的な状態からより特権的でない状態に切り替わったことに応答して、キャッシュ制御回路が、投機的キャッシュ記憶領域のエントリーを破棄するように、又は、投機的キャッシュ記憶領域のエントリーを処理回路にとってアクセス不能にするように構成されている、付記項３に記載の装置。
【００７１】
（５）投機的メモリ・アクセスが正しいとして解決された後に、キャッシュ制御回路が、投機的キャッシュ記憶領域から主キャッシュ記憶領域に、投機的メモリ・アクセスに応答して割り当てられたエントリーを伝達するように構成されている、付記項１〜４の何れか一項に記載の装置。
【００７２】
（６）キャッシュ制御回路が、投機的メモリ・アクセスが正しいとして解決されたことの検出に応答して、直接的に主キャッシュ記憶領域に、投機的メモリ・アクセスに応答して割り当てられたエントリーを伝達するように構成されている、付記項５に記載の装置。
【００７３】
（７）キャッシュ制御回路が、投機的キャッシュ記憶領域の任意のエントリーが、正しいとして解決された、解決された投機的メモリ・アクセスに対応しているか否かを判定するように、及び主キャッシュ記憶領域に、解決された投機的メモリ・アクセスに対応したエントリーを伝達するように、投機的キャッシュ伝達演算を定期的に実施するように構成されている、付記項５に記載の装置。
【００７４】
（８）キャッシュ制御回路が、正しくないとして解決された投機的メモリ・アクセスに関連した投機的キャッシュ記憶領域のエントリーを破棄するように構成されている、付記項１〜７の何れか一項に記載の装置。
【００７５】
（９）キャッシュ制御回路が、少なくとも、
正しくないとして解決された投機的メモリ・アクセスと、
依然として未解決の投機的メモリ・アクセスと
のうちの１つに関連した投機的キャッシュ記憶領域のエントリーを破棄するように、投機的キャッシュ・フラッシュ・イベントに応答する、付記項１〜８の何れか一項に記載の装置。
【００７６】
（１０）キャッシュ制御回路が、投機的キャッシュ記憶領域のすべてのエントリーを破棄するように投機的キャッシュ・フラッシュ・イベントに応答する、付記項９に記載の装置。
【００７７】
（１１）投機的キャッシュ・フラッシュ・イベントが、処理回路がより特権的な状態とより特権的でない状態との間で切り替わることを含む、付記項９又は１０に記載の装置。
【００７８】
（１２）投機的キャッシュ・フラッシュ・イベントが、処理回路がより特権的な状態からより特権的でない状態に切り替わることを含む、付記項９又は１０に記載の装置。
【００７９】
（１３）投機的キャッシュ・フラッシュ・イベントが、処理回路による投機的キャッシュ・フラッシュ命令の処理を含む、付記項９〜１２の何れか一項に記載の装置。
【００８０】
（１４）投機的キャッシュ記憶領域のエントリーを破棄するとき、キャッシュ制御回路が、破棄されたエントリーにおけるデータがダーティーであるか否かを判定するように、及び、データがダーティーである場合、さらなる記憶位置にデータを書き込むように構成されている、付記項８〜１３の何れか一項に記載の装置。
【００８１】
（１５）さらなる記憶位置が、さらなるレベルのキャッシュ又はメモリを備える、付記項１４に記載の装置。
【００８２】
（１６）さらなる記憶位置が、投機的キャッシュ記憶領域に対するエントリーの割当てをトリガーした投機的メモリ・アクセスに応答してデータが取得された位置を含む、付記項１４に記載の装置。
【００８３】
（１７）投機的キャッシュ記憶領域の各エントリーが、データが取得された位置を表す位置メタデータを指定する、付記項１６に記載の装置。
【００８４】
（１８）投機的キャッシュ記憶領域が、主キャッシュ記憶領域に独立したキャッシュ記憶構造を備える、付記項１〜１７の何れか一項に記載の装置。
【００８５】
（１９）投機的キャッシュ記憶領域が、主キャッシュ記憶領域より高いアソシエティビティをもつ、付記項１〜１８の何れか一項に記載の装置。
【００８６】
（２０）投機的キャッシュ記憶領域が、完全にアソシエティブである、付記項１９に記載の装置。
【００８７】
（２１）投機的キャッシュ記憶領域が、主キャッシュ記憶領域を含む同じキャッシュ記憶構造の確保された部分を含む、付記項１〜１６の何れか一項に記載の装置。
【００８８】
（２２）キャッシュ記憶構造が、セット・アソシエティブであり、投機的キャッシュ記憶領域が、キャッシュ記憶構造の少なくとも１つの確保されたウェイを含む、付記項２１に記載の装置。
【００８９】
（２３）命令の投機的実行を実施する処理回路と主キャッシュ記憶領域と投機的キャッシュ記憶領域とを備える装置のための方法であって、方法が、
処理回路によりトリガーされた投機的メモリ・アクセスに応答して、投機的メモリ・アクセスが投機的に留まっている間、主キャッシュ記憶領域の代わりに投機的キャッシュ記憶領域にエントリーを割り当てる、方法。
【００９０】
（２４）命令の投機的実行を実施する処理回路と、
デコードされた命令に応じて処理回路の演算を制御するために命令をデコードする命令デコーダと
を備え、
命令デコーダが、依然として解決されていないまま留まる、又は、正しくないとして解決された投機的メモリ・アクセスに応答して、キャッシュに割り当てられた１つ又は複数の投機的エントリーを、キャッシュから、破棄するように、又はアクセス不能にするように処理回路を制御するように、投機的キャッシュ・フラッシュ命令に応答する、装置。
【００９１】
（２５）デコードされた命令に応じて処理回路の演算を制御するように命令をデコードすることと、
処理回路を使用して命令の投機的実行を実施することと、
投機的キャッシュ・フラッシュ命令のデコードに応答して、依然として解決されていないまま留まる、又は、正しくないとして解決された投機的メモリ・アクセスに応答して、キャッシュに割り当てられた１つ又は複数の投機的エントリーを、キャッシュから、破棄する、又はアクセス不能にするように処理回路を制御することと
を含むデータ処理方法。
【図１】
2021510434.tif 000005
【図２】
2021510434.tif 000006
【図３】
2021510434.tif 000007
【図４】
2021510434.tif 000008
【図５】
2021510434.tif 000009
【国際調査報告】
2021510434.tif 000010
2021510434.tif 000011
2021510434.tif 000012