(57)【要約】  装置は、処理回路１８と、各メモリ領域を複数の領域タイプのうちの１つとして識別するメモリ属性データに基づき、メモリ・システムへのアクセスを制御するためのメモリ・アクセス回路３５とを有する。投機制限領域タイプがサポートされ、それに対しては、少なくとも、第１の読み出しリクエストが、投機制限タイプの領域に非投機的に発行されるときは、それ以降の読み出しリクエストは、第１の読み出しリクエストに応答して得られたデータを用いて処理されることが許可され、投機制限タイプの領域に投機的に発行された読み出しリクエストに対しては、少なくとも、読み出されたデータをキャッシュすることがキャッシュへの新たなエントリの割り当てを要求するであろう場合に、投機制限領域タイプのターゲット・メモリ領域を指定する非投機的に発行された読み出しリクエストに対しては許可される少なくとも１つの応答動作が、第１の読み出しリクエストが正しいと決定される前に実行されることが禁止され得る。
2021525416.tif 000002
【特許請求の範囲】
【請求項１】
メモリ・システムのターゲット・メモリ領域からデータが読み出されることを要求するために、読み出しリクエストを投機的に発行することができる処理回路と、
各メモリ領域を複数の領域タイプのうちの１つとして識別するメモリ属性データに基づき、前記メモリ・システムへのアクセスを制御するためのメモリ・アクセス回路とを備えており、
前記ターゲット・メモリ領域が前記メモリ属性データによって投機制限領域タイプとして示されている第１の読み出しリクエストに応答して、
少なくとも前記第１の読み出しリクエストが前記処理回路によって非投機的に発行されるときは、前記メモリ・アクセス回路は、それ以降の読み出しリクエストが前記第１の読み出しリクエストに応答して得られたデータを用いて処理されることを許可するように構成され、
前記第１の読み出しリクエストが前記処理回路によって投機的に発行されるときは、少なくとも、前記第１の読み出しリクエストに応答して得られたデータの前記処理回路のキャッシュへの記憶が前記キャッシュへの新たなエントリの割り当てを要求するであろう場合に、前記メモリ・アクセス回路は、投機制限領域タイプのターゲット・メモリ領域を指定する非投機的に発行された読み出しリクエストに対しては許可される少なくとも１つの応答動作が、前記第１の読み出しリクエストが正しいかどうかを前記処理回路が決定する前に実行されることを禁止するように構成される、
装置。
【請求項２】
前記少なくとも１つの応答動作が、キャッシュ・アクセス・タイミング又はメモリ・システム・アクセス・タイミングを測定することを通じて検出可能である効果を生じさせる潜在性を有する動作を含む、請求項１に記載の装置。
【請求項３】
前記少なくとも１つの応答動作が、前記処理回路からの前記第１の読み出しリクエストに応答して、読み出しトランザクションを前記メモリ・システムに発行することを含む、請求項１又は２に記載の装置。
【請求項４】
前記少なくとも１つの応答動作が、前記処理回路への前記読み出しリクエストに応答して、前記メモリ・システムから得られたデータを戻すことを含む、請求項１から３までのいずれかに記載の装置。
【請求項５】
前記少なくとも１つの応答動作が、前記ターゲット・メモリ領域に対応するデータを記憶するための前記キャッシュに新たなエントリを割り当てることを含む、請求項１から４までのいずれかに記載の装置。
【請求項６】
前記第１の読み出しリクエストが前記処理回路によって投機的に発行されるときは、前記第１の読み出しリクエストの発行の前に、前記ターゲット・メモリ領域に対応するデータを記憶するための前記キャッシュにエントリが既に割り当てられているときには、前記メモリ・アクセス回路が、前記第１の読み出しリクエストが正しいかどうかを前記処理回路が決定する前に前記少なくとも１つの応答動作が実行されることを禁止するように構成される、請求項１から５までのいずれかに記載の装置。
【請求項７】
前記第１の読み出しリクエストが前記処理回路によって投機的に発行されるときは、前記第１の読み出しリクエストの発行の前に、前記ターゲット・メモリ領域に対応するデータを記憶するための前記キャッシュに、エントリが既に割り当てられているときには、前記メモリ・アクセス回路が、前記第１の読み出しリクエストが正しいかどうかを前記処理回路が決定する前に前記少なくとも１つの応答動作が実行されることを許容するように構成される、請求項１から５までのいずれかに記載の装置。
【請求項８】
前記少なくとも１つの応答動作が、前記処理回路以外のマスタ・デバイスの少なくとも１つのリモート・キャッシュに割り当てられたデータをどのアドレスが有するかに関する変更をトリガすることを含む、請求項１から６までのいずれかに記載の装置。
【請求項９】
前記少なくとも１つの応答動作が、前記メモリ・システムの開かれていないＤＲＡＭページを開かせることを含む、請求項１から６まで及び８のいずれかに記載の装置。
【請求項１０】
前記キャッシュが、前記処理回路のレベル１のキャッシュを含む、請求項１から９までのいずれかに記載の装置。
【請求項１１】
前記第１の読み出しリクエストが前記処理回路によって投機的に発行されるときは、少なくとも、前記第１の読み出しリクエストに応答して得られたデータの前記キャッシュへの記憶が新たなエントリの前記キャッシュへの割り当てを要求するであろう場合に、前記メモリ・アクセス回路は、前記第１の読み出しリクエストが正しいと前記処理回路が既に決定しているときであっても、前記第１の読み出しリクエストに応答して前記少なくとも１つの応答動作が実行されることを禁止するように構成される、請求項１から１０までのいずれかに記載の装置。
【請求項１２】
前記メモリ・アクセス回路が、前記ターゲット・メモリ領域が前記投機制限領域タイプである投機的に発行された読み出しリクエストを拒否するように構成される、請求項１から１１までのいずれかに記載の装置。
【請求項１３】
前記メモリ・アクセス回路が、前記投機制限領域タイプのメモリ領域への非整列メモリ・アクセスを許可するように構成される、請求項１から１２までのいずれかに記載の装置。
【請求項１４】
前記処理回路の前記キャッシュが、前記投機制限領域タイプのメモリ領域に対応するデータが前記キャッシュにキャッシュされたままの状態で留まることができる最大継続時間を限定するように構成される、請求項１から１３までのいずれかに記載の装置。
【請求項１５】
前記メモリ・アクセス回路が、前記投機制限領域タイプのメモリ領域からのデータを前記キャッシュの中にプリフェッチするためのプリフェッチ・リクエストを禁止するように構成される、請求項１から１４までのいずれかに記載の装置。
【請求項１６】
前記メモリ・アクセス回路は、メモリ・アドレス空間における所与のメモリ領域の直前のメモリ領域に対応するデータが前記キャッシュに既に非投機的にキャッシュされていない場合には、前記投機制限領域タイプの前記所与のメモリ領域からのデータを前記キャッシュの中にプリフェッチするためのプリフェッチ・リクエストを禁止するように構成される、請求項１から１４までのいずれかに記載の装置。
【請求項１７】
前記プリフェッチ・リクエストが、
前記処理回路によって実行される命令とは独立にハードウェア・プリフェッチャによって生成されるハードウェア・プリフェッチ・リクエストと、
前記処理回路によって実行されるソフトウェア・プリフェッチ命令によってトリガされるソフトウェア・プリフェッチ・リクエストと、
のうちの一方を含む、請求項１５又は１６に記載の装置。
【請求項１８】
前記ターゲット・メモリ領域が前記メモリ属性データによってデバイス領域タイプとして示される所与の読み出しリクエストに応答して、前記メモリ・アクセス回路が、前記所与の読み出しリクエストに応答して得られたデータを用いてそれ以降の読み出しリクエストが処理されることを禁止するように構成される、請求項１から１７までのいずれかに記載の装置。
【請求項１９】
前記ターゲット・メモリ領域が前記メモリ属性データによって非投機制限領域タイプとして示される読み出しリクエストに応答して、前記メモリ・アクセス回路が、前記読み出しリクエストが投機的に発行されるのか又は非投機的に発行されるのかとは独立に、前記少なくとも１つの応答動作が許可されるかどうかを決定するように構成される、請求項１から１８までのいずれかに記載の装置。
【請求項２０】
前記メモリ・アクセス属性データが、各メモリ領域に対して特定されるタイプ属性を含んでおり、前記メモリ・アクセス回路が、所与のメモリ領域が、
前記所与のメモリ領域に対する前記タイプ属性が第１の値を有するときには、前記非投機制限領域タイプ、及び
前記所与のメモリ領域に対する前記タイプ属性が第２の値を有するときには、前記投機制限領域タイプ、
であると決定するように構成される、請求項１９に記載の装置。
【請求項２１】
前記メモリ・アクセス属性データが、各メモリ領域に対して特定されるタイプ属性と、複数のメモリ領域の間で共有されるグローバル属性とを含んでおり、
所与のメモリ領域に対する前記タイプ属性が所定の値を有するときには、前記メモリ・アクセス回路が、前記所与のメモリ領域が、
前記グローバル属性が第１の値を有するときには、前記非投機制限領域タイプ、及び
前記グローバル属性が第２の値を有するときには、前記投機制限領域タイプ、
であると決定するように構成される、請求項１９に記載の装置。
【請求項２２】
メモリ・システムのターゲット・メモリ領域からデータが読み出されることを要求するために、読み出しリクエストを投機的に発行することができる処理回路を備えるデータ処理装置のための方法であって、
各メモリ領域を複数の領域タイプのうちの１つとして識別するメモリ属性データに基づき、前記メモリ・システムへのアクセスを制御するステップと、
前記ターゲット・メモリ領域が前記メモリ属性データによって投機制限領域タイプとして示されている第１の読み出しリクエストに応答して、
少なくとも前記第１の読み出しリクエストが前記処理回路によって非投機的に発行されるときは、それ以降の読み出しリクエストが前記第１の読み出しリクエストに応答して得られたデータを用いて処理されることを許可するステップと、
前記第１の読み出しリクエストが、前記処理回路によって投機的に発行されるときは、少なくとも、前記第１の読み出しリクエストに応答して得られたデータの前記処理回路のキャッシュへの記憶が前記キャッシュへの新たなエントリの割り当てを要求するであろう場合に、投機制限領域タイプのターゲット・メモリ領域を指定する非投機的に発行された読み出しリクエストに対しては許可される少なくとも１つの応答動作が、前記第１の読み出しリクエストが正しいかどうかを前記処理回路が決定する前に実行されることを禁止するステップと
を含む方法。
【請求項２３】
データ処理装置のためのメモリ割り当てのための方法であって、
所与のソフトウェア・プロセスによって使用するためのメモリの１つ又は複数の領域を割り当てるステップと、
割り当てられた各領域に対して、複数の領域タイプの間から選択された領域タイプを選択し、前記選択された領域タイプを識別するメモリ属性データを記憶するステップとを含み、
少なくとも１つの領域に対して、前記選択された領域タイプは、前記少なくとも１つの領域からデータが読み出されることを要求する第１の読み出しリクエストに応答して、前記データ処理装置が、
少なくとも前記第１の読み出しリクエストが前記データ処理装置によって非投機的に発行されるときは、それ以降の読み出しリクエストが前記第１の読み出しリクエストに応答して得られたデータを用いて処理されることを許可し、
前記第１の読み出しリクエストが、前記データ処理装置によって投機的に発行されるときは、少なくとも、前記第１の読み出しリクエストに応答して得られたデータの前記データ処理装置のキャッシュへの記憶が前記キャッシュへの新たなエントリの割り当てを要求するであろう場合に、投機制限領域タイプのターゲット・メモリ領域を指定する非投機的に発行された読み出しリクエストに対しては許可される少なくとも１つの応答動作が、前記第１の読み出しリクエストが正しいかどうかを前記データ処理装置が決定する前に実行されることを禁止する、
ということを示す投機制限領域タイプを含む、
方法。
【請求項２４】
請求項２３の方法を実行するようにホスト処理装置を制御するためのコンピュータ・プログラム。
【請求項２５】
請求項２４のコンピュータ・プログラムを記憶する記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、データ処理の分野に関する。
【背景技術】
【０００２】
データ処理装置は、命令の投機的実行をサポートすることがあり得るが、投機的実行の場合、命令は、その命令に対する入力オペランドが正しいかどうか、又は、その命令がそもそも実行される必要があるかどうか分かる前に実行される。たとえば、処理装置は、その分岐の実際の結果が何であるか分かる前に、それ以降の命令がフェッチされ、デコードされ、投機的に実行されることが可能であるように、分岐命令の結果を予測するための分岐予測器を有し得る。また、いくつかのシステムは、メモリからロードされる値が、それ以降の命令がより高速に処理されることを可能にするために、実際の値がメモリから現実に戻されるよりも前に予測される、負荷投機をサポートすることもあり得る。他の形式の投機も可能である。
【発明の概要】
【課題を解決するための手段】
【０００３】
少なくともいくつかの実例は、メモリ・システムのターゲット・メモリ領域からデータが読み出されることを要求するために、読み出しリクエストを投機的に発行することができる処理回路と、各メモリ領域を複数の領域タイプのうちの１つとして識別するメモリ属性データに基づき、メモリ・システムへのアクセスを制御するためのメモリ・アクセス回路とを備える装置を提供するのであって、ターゲット・メモリ領域がメモリ属性データによって投機制限領域タイプとして示されている第１の読み出しリクエストに応答して、少なくとも、第１の読み出しリクエストが、処理回路によって非投機的に発行されるときは、メモリ・アクセス回路は、それ以降の読み出しリクエストが第１の読み出しリクエストに応答して得られたデータを用いて処理されることを許可するように構成され、第１の読み出しリクエストが、処理回路によって投機的に発行されるときは、少なくとも、第１の読み出しリクエストに応答して得られたデータの処理回路のキャッシュへの記憶がキャッシュへの新たなエントリの割り当てを要求するであろう場合に、メモリ・アクセス回路は、投機制限領域タイプのターゲット・メモリ領域を指定する非投機的に発行された読み出しリクエストに対しては許可される少なくとも１つの応答動作が、第１の読み出しリクエストが正しいかどうかを処理回路が決定する前に実行されることを禁止するように構成される。
【０００４】
少なくともいくつかの実例は、メモリ・システムのターゲット・メモリ領域からデータが読み出されることを要求するために、読み出しリクエストを投機的に発行することができる処理回路を備えるデータ処理装置のための方法を提供するのであるが、この方法は、各メモリ領域を複数の領域タイプのうちの１つとして識別するメモリ属性データに基づき、メモリ・システムへのアクセスを制御するステップと、ターゲット・メモリ領域がメモリ属性データによって投機制限領域タイプとして示されている第１の読み出しリクエストに応答して、少なくとも、第１の読み出しリクエストが、処理回路によって非投機的に発行されるときは、それ以降の読み出しリクエストが第１の読み出しリクエストに応答して得られたデータを用いて処理されることを許可するステップと、第１の読み出しリクエストが、処理回路によって投機的に発行されるときは、少なくとも、第１の読み出しリクエストに応答して得られたデータの処理回路のキャッシュへの記憶がキャッシュへの新たなエントリの割り当てを要求するであろう場合に、投機制限領域タイプのターゲット・メモリ領域を指定する非投機的に発行された読み出しリクエストに対しては許可される少なくとも１つの応答動作が、第１の読み出しリクエストが正しいかどうかを処理回路が決定する前に実行されることを禁止するステップと、を含む。
【０００５】
少なくともいくつかの実例は、データ処理装置のためのメモリ割り当てのための方法であって、所与のソフトウェア・プロセスによって使用するためのメモリの１つ又は複数の領域を割り当てるステップと、割り当てられた各領域に対して、複数の領域タイプの間から選択された領域タイプを選択し、選択された領域タイプを識別するメモリ属性データを記憶するステップとを含む方法を提供するが、少なくとも１つの領域に対して、選択された領域タイプは、前記少なくとも１つの領域からデータが読み出されることを要求する第１の読み出しリクエストに応答して、データ処理装置が、少なくとも、第１の読み出しリクエストが、データ処理装置によって非投機的に発行されるときは、それ以降の読み出しリクエストが第１の読み出しリクエストに応答して得られたデータを用いて処理されることを許可し、第１の読み出しリクエストが、データ処理装置によって投機的に発行されるときは、少なくとも、第１の読み出しリクエストに応答して得られたデータのデータ処理装置のキャッシュへの記憶がキャッシュへの新たなエントリの割り当てを要求するであろう場合に、投機制限領域タイプのターゲット・メモリ領域を指定する非投機的に発行された読み出しリクエストに対しては許可される少なくとも１つの応答動作が、第１の読み出しリクエストが正しいかどうかをデータ処理装置が決定する前に実行されることを禁止する、ということを示す投機制限領域タイプを含む。
【０００６】
少なくともいくつかの実例が、上述されたメモリ割り当てのための方法を実行するようにホスト処理装置を制御するためのコンピュータ・プログラムを、提供する。コンピュータ・プログラムは、記憶媒体に記憶され得る。記憶媒体は、非一時的な記憶媒体であり得る。
【０００７】
本技術のさらなる様態、特徴及び利点は、実例に関する以下の説明から明らかになるが、以下の説明は、次の添付の図面と共に読まれるべきである。
【図面の簡単な説明】
【０００８】
【図１】データ処理装置の実例の概略図である。
【図２】各メモリ領域の領域タイプの指示を含む、メモリ領域のためのメモリ属性セットの実例を示す図である。
【図３】メモリ領域タイプを表す代替的な方法を示す図である。
【図４】メモリ領域タイプを表す代替的な方法を示す図である。
【図５】通常領域タイプ、投機制限領域タイプ、及びデバイスのメモリ領域タイプの特性を示す表である。
【図６】領域タイプに基づいてメモリへのアクセスを制御するための方法を示す流れ図である。
【図７】メモリ割り当てのための方法を図解する流れ図である。
【発明を実施するための形態】
【０００９】
データ処理装置は、メモリにおけるいくつかのデータへの処理回路上で実行している一定のプロセスによるアクセスは不可能である、ということを保証するための機構を有し得る。たとえば、特権ベースの機構及び／又はメモリ保護属性が、メモリの一定の領域へのアクセスを制御するために、用いられることがあり得る。投機的実行とデータ・キャッシングとを用いるシステムでは、投機的に実行された命令のいずれかのアーキテクチャ上の効果が、誤り投機に続いて反転された後でも、投機的に実行された命令の効果がデータ・キャッシュに存続し得る、という特性を利用することにより、悪意を有する者が、彼らがアクセスを有さないメモリの領域から情報を得る潜在性が存在することが最近認識されてきている。そのような攻撃は、分岐予測器又は他の投機的機構を、上位の特権コードを欺いて、機密情報に従属するメモリ・アドレスのパターンにその特権コードをアクセスさせるように設計されている一連の命令を投機的に実行させるように、訓練する場合があり得るのであって、それにより、その機密情報へのアクセスを有さない下位の特権コードが、機密情報が推測されることを許容する可能性がある何らかの情報を与えるため、上位の特権コードによって、どのアドレスがキャッシュに割り当てられたのか又はキャッシュから追い出されたのかを、キャッシュ・タイミング・サイドチャネルを用いて、調べることができる。そのような攻撃は、投機的なサイドチャネル攻撃と称され得る。
【００１０】
装置は、メモリ・システムのターゲット・メモリ領域からデータが読み出されることを要求するために、読み出しリクエストを投機的に発行することができる処理回路と、各メモリ領域をいくつかの領域タイプのうちの１つとして識別するメモリ属性データに基づき、メモリ・システムへのアクセスを制御するためのメモリ・アクセス回路とを有する。この装置は、メモリの対応する領域と関連する領域タイプのうちの１つとして示されることが可能な投機制限領域タイプをサポートする。
【００１１】
少なくとも、投機制限領域タイプの領域をターゲットとする非投機的に発行された読み出しリクエストに対しては、それ以降の読み出しリクエストは、第１の読み出しリクエストに応答して得られたデータを用いて処理されることが許可される。たとえば、第１の読み出しリクエストに応答して得られたデータを、キャッシュすることが可能であり、それ以降の読み出しリクエストは、第２のリクエストをメモリ・システムに発行することを必要としないで、キャッシュされているデータに対してヒットすることが許容される。これは、別個のトランザクションをメモリ・システムに送ることを要する読み出しリクエストの個数を減少させることによって、パフォーマンスを向上させる助けとなる。
【００１２】
他方では、処理回路によって投機的に発行される読み出しリクエストに関して、少なくとも、第１の読み出しリクエストに応答して得られたデータの処理回路のキャッシュへの記憶が、キャッシュへの新たなエントリの割り当てを要求するであろう場合に、少なくとも１つの応答動作が、第１の読み出しリクエストが正しいかどうかを処理回路が決定する前に実行されることが禁止され得る。禁止される応答動作は、非投機的に発行された投機制限領域タイプのターゲット・メモリ領域を指定する読み出しリクエストに対しては許可されることになる動作であり得る。この振る舞いは、上で論じられたタイプの投機的サイドチャネル攻撃に対する保護の助けとなる。読み出しリクエストの提供が結果的にキャッシュにおける新たなエントリの割り当てを生じさせる可能性がある場合に、少なくとも１つの応答動作が禁止されることを可能にするメモリ領域のタイプを定義することによって、これは、そのような攻撃に対して、より強力なセキュリティを提供することができる。たとえば、そのような攻撃に対して最も危険なメモリ領域（たとえば、そのような領域が機密データを含む可能性があるから）を、投機的読み出しリクエストがそのような領域と対話できる態様を制限するために、メモリ属性データによって、投機制限領域タイプとして指定することが可能である。それにもかかわらず、投機制限タイプのメモリ領域に対する読み出しリクエストに応答して得られたデータを用いて、それ以降の読み出しリクエストが処理されることを可能にすることにより、これは、第１の読み出しリクエストに応答して得られたデータを用いてそれ以降の読み出しリクエストが処理されることが禁止されていた場合に生じ得るパフォーマンスの損失を、回避する。
【００１３】
上で論じられたように、投機制限タイプの領域に対し、第１の読み出しリクエストに応答して得られたデータを用いて、それ以降の読み出しリクエストが処理することは、少なくとも、第１の読み出しリクエストが処理回路によって非投機的に発行されるときは、許可され得る。いくつかの実装例では、第１の読み出しリクエストが処理回路によって投機的に発行され、第１の読み出しリクエストが正しく発行されたということを処理回路が既に決定したときには、メモリ・アクセス回路は、また、投機制限領域タイプのターゲット・メモリ領域と関連する第１の読み出しリクエストに応答して得られたデータを用いて、それ以降の読み出しリクエストが処理されることも、許可し得る。
【００１４】
一般的に、（少なくとも、第１の読み出しリクエストに対するデータの記憶がキャッシュへの新たなエントリの割り当てを要求するであろう場合に、投機制限タイプのメモリ領域への読み出しリクエストに対して禁止されている）少なくとも１つの応答動作は、キャッシュ・アクセス・タイミング又はメモリ・システム・アクセス・タイミングを測定することを通じて検出可能な効果を生じさせる潜在性を有するいずれかのタイプの応答動作であり得る。上で論じられた投機サイドチャネル攻撃は、一般的に、それらのアドレスに対応するメモリ領域におけるデータへのアクセスを攻撃者が実際には有していない場合であっても、アドレス上の情報がアクセスされたことを検出するために、キャッシュ・アクセス・タイミング又はメモリ・システム・アクセス・タイミングを調べる。これは、攻撃者にはアクセス可能でない機密データに関する情報を推測するのに用いられることが可能である。データがキャッシュにまだ存在しないときに投機制限領域タイプに投機的に発行された読み出しリクエストに対して、アクセスされたアドレス上の情報を露出させるためにキャッシュ・アクセス・タイミング又はメモリ・システム・アクセス・タイミングを潜在的に変更する可能性がある動作を禁止することによって、これは、そのような攻撃に対し、より強力なセキュリティを提供する。
【００１５】
より具体的には、少なくとも１つの応答動作は、以下のタイプの動作のうちのいずれかを含み得る：
・処理回路からの読み出しリクエストに応答して、メモリ・システムへの読み出しトランザクションを発行すること。読み出しトランザクションがメモリ・システムに発行されることを完全に阻止することにより、これは、キャッシュに割り当てられることが可能で、よってキャッシュ・アクセス・タイミングを変更する可能性があるどのデータも、メモリ・システムから戻されることを阻止し、また、（リモート・キャッシュ又はＤＲＡＭユニットなどの）メモリ・システムの別の部分において測定されたタイミングを通じて可視的であり得るトランザクションのいかなる他の効果も阻止する。
・処理回路への読み出しリクエストに応答して、メモリ・システムから得られたデータを戻すこと。よって、この実例では、トランザクションは、依然として、メモリ・システムに発行され得るが、データが戻されるときには、これは、処理回路のキャッシュにキャッシュされることが可能でないように、処理回路に送られることを阻止され得る。このアプローチは、上で論じられた攻撃を鎮静化するために、戻されたデータが処理回路自体のキャッシュにキャッシュされることを依然として阻止しながら、同じアドレスへのそれ以降のリクエストのレイテンシを短縮するために、たとえば、データが処理回路自体のキャッシュの中に運ばれるまで、処理回路には直接的に可視的でないメモリ・システムの一部におけるさらなるレベルのキャッシュの中にデータが運ばれるのを許容することによって、パフォーマンスの改善を助ける場合があり得る。
・ターゲット・メモリ領域に対応するデータを記憶するためのキャッシュに、新たなエントリを割り当てること。よって、このアプローチを用いると、データが処理回路に投機的に戻されることが許容され、それによって、読み出しリクエストをトリガした命令（と、潜在的に、１つ又は複数のそれ以降の命令と）が、第１の読み出しリクエストに応答して戻されたデータを用いて処理され得る（たとえば、データは、それ以降の命令によるアクセスのために、レジスタに記憶され得る）のに対し、新たなエントリが、そのデータを記憶するためのキャッシュに割り当てられることは、許されない。これは、再び、上で論じられたような攻撃を開始するために攻撃者によって調べられる可能性があるキャッシュ割り当てパターンには変更がないことを意味する。よって、このアプローチを用いると、処理回路上で実行されるコードのパフォーマンスは、他のオプションと比較して、改善され得る。
これらのオプションのうちのどれが応答動作として選択されるかは、具体的なプロセッサの実装に左右され得る。読み出しトランザクションがメモリ・システムに対して発行されることが阻止される場合には、次に、これは、定義により、メモリ・システムからのデータの復帰と、戻されたデータを記憶するためのキャッシュへの新たなエントリの割り当てとも阻止される、ということが理解されるであろう。しかし、読み出しトランザクションがメモリ・システムに対して発行されることが許可されるシステムでは、次に、データが処理回路に戻されることが全面的に阻止されるかどうか、又は、データが戻されることは許容されるがキャッシュへのいかなる新たなエントリも割り当てられることが許容されないかどうかは、実装例に依存する。
【００１６】
いくつかの実施例では、投機制限領域タイプのメモリ領域をターゲットとする投機的読み出しリクエストに関して、いずれかのエントリが投機制限領域タイプのターゲット・メモリ領域に対応するデータを記憶するためのプロセッサのキャッシュに既に割り当てられているかどうかとは関係なく、少なくとも１つの応答動作が、読み出しリクエストが正しいと決定される前に実行されることが禁止され得る。このアプローチは、実装がより単純であり得るのであるが、その理由は、少なくとも１つの応答動作が許容されるかどうかを決定するときに、どのアドレスがプロセッサのキャッシュに既にキャッシュされているのかをチェックする必要がないからである。
【００１７】
或いは、いくつかの実装例は、投機制限領域タイプに対して投機的に発行された読み出しリクエストに関して、投機制限領域タイプのターゲット・メモリ領域に対応するデータを記憶するためのキャッシュにエントリが既に割り当てられているかどうかをチェックすることができ、そのようなエントリが既にキャッシュに存在するときには、メモリ・アクセス回路は、第１の読み出しリクエストが正しいかどうかを処理回路が決定する前に、少なくとも１つの応答動作が実行されることを許容し得る。このアプローチは、データが既にキャッシュにキャッシュされていない場合には、そうでない場合には許可され得ない動作を許可することによって、パフォーマンスの改善を許容することができる。これは、所与のアドレスからのデータが既にキャッシュに存在するときには、多くの場合、これは、現在実行されているプロセスがそのデータにアクセスすることを許容されており、よって、上で論じられたような投機サイドチャネル攻撃の危険はより少ないであろう、ということを、認識している。既にキャッシュされているアドレスに対するそれ以降のリクエストのための応答動作を許可することによって、たとえその投機的なリクエストがまだ決定されていない場合であっても、これは、この動作を実行するために正しいと投機的アクセスが決定されるまで待機する必要性を回避することによって、パフォーマンスを改善することができる。
【００１８】
よって、投機制限領域タイプに対する第１の読み出しリクエストのターゲットであるアドレスに対して関連するエントリをキャッシュが既に記憶しているかどうかに関するチェックが実際に存在するかどうかは、任意である。少なくとも、キャッシュへのデータの記憶がキャッシュに新たなエントリへの割り当てを要求し得るようにデータがまだキャッシュにキャッシュされていないときには、少なくとも１つの応答動作は、投機制限領域タイプのメモリ領域をターゲットとする第１の読み出しリクエストに対して、禁止され得る。しかし、データが既にキャッシュにおけるエントリに割り当てられているときには、そのような投機的に発行された第１の読み出しリクエストに対して応答動作が許可されるのか又は禁止されるのかは、任意である。
【００１９】
（投機制限領域タイプのメモリ領域に投機的に発行されたリクエストに対して禁止されることがあり得る）応答動作の別の実例は、処理回路以外のマスタ・デバイスの少なくとも１つのリモート・キャッシュに割り当てられたデータをどのアドレスが有するかに関する変更をトリガすることがあり得る。さらなる実例は、メモリ・システムの開かれていないＤＲＡＭページを開かせることを含み得る。再び、そのような動作は、機密データに関する情報を攻撃者に潜在的に露出させる可能性があり、その理由は、以前に開かれていなかったＤＲＡＭページを開けること、又は、リモート・キャッシュにどのアドレスがキャッシュされているかに関する変更は、結果的に、他のアドレスへのアクセス・タイミングの差異を生じさせる可能性があり、これは、攻撃者がどのアドレスに投機的にアクセスがなされたかに関する情報を推測することを許容し、これが、いくつかの場合に、機密に関する情報を露出させることがあり得る。リモート・キャッシュにおけるアドレス割り当ての変更と、開かれていなかったＤＲＡＭページを開くこととは、投機制限領域タイプのメモリ領域のアドレスと関連するデータが処理回路自体のキャッシュの内部に既にキャッシュされているかどうかとは関係なく、投機制限タイプのメモリ領域への投機的に発行された読み出しリクエストに対して禁止され得る、ということに注意してほしい。リモート・キャッシュの変更又はＤＲＡＭページの開放に対する禁止は、異なる複数の方法で、達成されることが可能である（たとえば、どのような読み出しトランザクションも決してメモリ・システムに発行しないことによって、又は、それがリモート・キャッシュの割り当て及び／又はＤＲＡＭページの開放に変更を生じさせない場合にだけ、処理されることが可能であることを示すという形式のトランザクションを発行することによって）。
【００２０】
上で論じられたキャッシュは、処理回路のレベル１のキャッシュであり得る。すなわち、応答動作の実行が可能かどうかを決定するとき、キャッシュの中へのエントリの割り当てに関する制限、及び／又は、エントリがキャッシュに既に割り当てられているかどうかに関する考慮が、処理回路のレベル１のキャッシュに適用され得る。処理回路がレベル２のキャッシュ又はそれ以降のレベルのキャッシュを有する場合には、次に、投機制限領域タイプからのデータをレベル２又はさらなるレベルのキャッシュにキャッシュすることは、無制限であり得るのであって、投機制限領域タイプのメモリ領域に対してリクエストが投機的に発行されたかどうかとは無関係に許容され得る。これは、多くの処理装置の設計において、処理回路によるすべてのデータへのアクセスは、レベル１のキャッシュを通じて実行され、よって、データがレベル１のキャッシュにキャッシュされることを制限される場合には、次に、たとえそれがレベル２のキャッシュに存在している場合であっても、そのことで、必ずしも、レベル２のキャッシュにおけるデータへのアクセスが、処理回路に与えられることはない、ということを認識している。よって、投機制限領域タイプに投機的に発行された読み出しリクエストに対し、レベル２又はさらなるレベルのキャッシュの中にデータが運ばれることを許可することによって、これは、投機サイドチャネル攻撃の観点からの危険を生じさせる蓋然性はなく、パフォーマンスを改善し得るのであるが、その理由は、いったんリクエストが正しいと決定されると、次に、非投機的なアクセスが、レベル２のキャッシュにデータが配置されることがまったく許容されない場合よりも高速にレベル２のキャッシュからデータを引き出してレベル１のキャッシュに入れ得るからである。よって、このアプローチは、パフォーマンスを改善することができる。
【００２１】
上記の実例では、第１の読み出しリクエストが、投機制限領域タイプとして示されているメモリ領域に対して、処理回路によって投機的に発行されるときに、少なくとも１つの応答動作は、第１の読み出しリクエストが正しいかどうかを処理回路が決定する前に実行されることを、禁止され得る。他方で、いったん処理回路が投機的に発行された第１の読み出しリクエストが正しいと既に決定すると、少なくとも１つの応答動作が依然として禁止されるのか又は許容されるのかどうかは、任意である。
【００２２】
いくつかの場合には、第１の読み出しリクエストが投機的に発行されるときは、少なくとも、読み出しリクエストに応答して得られたデータの記憶がキャッシュへの新たなエントリの割り当てを要求するであろう場合に、メモリ・アクセス回路は、第１の読み出しリクエストは正しいと処理回路が決定したときは、第１の読み出しリクエストに応答して少なくとも１つの応答動作が実行されることを禁止し得る。これは、投機的に発行されたリクエストが正しいと決定されたことになるタイミングを考慮する必要性を回避し、先に考慮されたリクエストの結果をトラッキングする必要性を回避することによって、メモリ・アクセス制御論理を単純化することができる。代わりに、投機的に発行された第１の読み出しリクエストに遭遇する場合には、次に、少なくとも１つの応答動作は、禁止され得る。この結果として、第１の読み出しリクエストが失敗することになり、よって、誤りの指示が戻されることになり、次に、これが、たとえば、いったんリクエストが正しかったと決定されると、処理回路がリクエストを非投機的に再発行することを、トリガすることがあり得る。よって、このアプローチは、要求されるメモリ・アクセス論理の観点からは、実装するのにより効率的であり得る。
【００２３】
他の実施例では、第１の読み出しリクエストを正しく発行されたものとして処理回路がまだ決定していない場合に少なくとも１つの応答動作が禁止されている場合に、メモリ・アクセス回路は、第１の読み出しリクエストが正しいと処理回路が既に決定した後に、少なくとも１つの応答動作が実行されることを許容し得る。これは、処理回路がそれを正しいと決定した後で読み出しリクエストを再発行する必要性を回避することができるが、その理由は、メモリ・アクセス回路がこれを検出し、次に、応答動作が継続することを許容することができるからである。
【００２４】
いくつかの実装例では、メモリ・アクセス回路は、ターゲット・メモリ領域が投機制限領域タイプである投機的に発行されたすべての読み出しリクエストを、単純に拒否することができる。よって、これは、応答動作が実行されるのを阻止することが必要である特定の条件を識別するためのより複雑な論理を提供する必要性を回避することができ、代わりに、単純に、いずれかの投機的に発行された読み出しリクエストは、それが投機制限領域タイプの領域をターゲットにしている場合には、拒否されることがあり得る。処理回路は、次に、いったんリクエストと関連するいずれかの投機が正しいと決定されたならば、投機制限領域タイプのターゲット・メモリ領域に対して非投機的に発行された読み出しリクエストを、発行することができる。このアプローチは、実装が単純であり得る。しかし、それは、投機サイドチャネル攻撃の危険を実際に生じさせていない場合には、結果的に、応答動作が阻止されることがあり得る。
【００２５】
応答動作が禁止される必要がある特定の状況についてチェックすることによって（たとえば、第１の読み出しリクエストと関連する投機が既に決定されているかどうか、及び／又は、投機制限領域タイプのターゲット領域のアドレスと関連するエントリが既にキャッシュに割り当てられているかどうか）、他の実装例が、より高度化されることがあり得る。
【００２６】
非整列メモリ・アクセスは、投機制限領域タイプのメモリ領域に対して、許可され得る。厳密に２の累乗に対応する所定の個数のメモリ位置に対応するデータのブロックにメモリ・アクセスのアドレスが整列されている整列メモリ・アクセスに基づいてメモリ・システムにアクセスすることは、多くの場合に、最も効率的である。しかし、メモリ・アクセスのアドレスが２の累乗のアドレス境界に厳密に整列されていない場合には、ソフトウェアが、非整列メモリ・アクセスを用いて、読み出しリクエストを生成することができる。いくつかのシステムは、非整列メモリ・アクセスを禁止するメモリ領域タイプをサポートし得るが、たとえば、その理由は、非整列メモリ・アクセスは、しばしば、より多数の別個の整列されたメモリ・アクセスに分解されることができるからであるが、これは、たとえば、一定の周辺デバイスに割り当てられたメモリ領域にアクセスするときに、不所望の効果を生じさせることがあり得る。しかし、すべてのメモリ・アクセスが整列されることを要求すると、実行されているソフトウェアに対して大きな複雑性を課することになり得る。投機制限領域タイプを用いると、アドレスが整列されているか非整列であるかは、投機サイドチャネル攻撃に対する保護という観点からは、重要ではないから、ソフトウェア開発者に追加的な負担をかけることを回避するために、投機制限領域タイプのメモリ領域への非整列メモリ・アクセスを許可するのが、好ましいであろう。
【００２７】
いくつかの実装例では、処理回路のキャッシュは、投機制限領域タイプのメモリ領域に対応するデータがキャッシュにキャッシュされたままの状態で留まることができる最大の継続時間を制限することがあり得る。たとえば、継続時間を制限する１つの方法は、キャッシュにおける投機制限領域からのデータに関係するキャッシュ・ラインにマークすることがあり得る（たとえば、「投機制限」フラグ又はキャッシュ・エントリのメタデータにおいて特定された他の指示を用いる）。新たなデータがキャッシュに割り当てられる必要があり、新たなデータが割り当てられることが可能な無効なエントリが存在しないときには、いくつかの候補エントリ（たとえば、新たなデータのアドレスに基づいてインデクスが付された位置の集合におけるエントリ）の間から、犠牲エントリが選択される。犠牲エントリを選択するときには、投機制限領域からのデータと関係するとマークされたエントリが、投機制限領域からのデータと関係するとマークされていないエントリよりも好ましいとして、選択され得る。これは、投機制限領域からのエントリの寿命が比較的短いことを保証する傾向を有する（レベル１のキャッシュのサイズは比較的小さく、たとえば、数十キロバイトであるから）。これは、投機制限領域からのデータがキャッシュされたままの状態で留まることができる継続時間をどのようにして制限するかに関する単なる１つの実例であり、他も可能である。一般的に、投機制限タイプのメモリ領域からのデータが処理回路のキャッシュにおいてキャッシュされていることが可能な最大継続時間を制限することにより、これは、上で論じられたようなサイドチャネル攻撃に対する脆弱性を減らすことができるのであるが、その理由は、しばしば、そのような攻撃は、どのアドレスが依然としてキャッシュの中にあり、よって、どのアドレスが機密情報に基づいてアクセスされた可能性があるのかを厳密に調べるために、異なる複数のアドレスに対して実行されるキャッシュへの多数の異なるアクセスを要求し得るからである。投機的にロードされた投機制限領域タイプのメモリ領域に対応するデータがキャッシュされたままの状態で留まることができる最大の継続時間を制限することによって、これは、攻撃者がこの情報を推測することをより困難にするが、その理由は、キャッシュ・タイミングを調べるためのアクセスのその連続の終了に向かうと、元々が投機的にアクセスされたデータは、もはや存在しない可能性があるからである。
【００２８】
メモリ・システムへのリクエストの別のソースは、そのようなデータが処理回路のレジスタの中に運ばれることが求められることを示すどのような命令も存在する前に、将来において求められる可能性があるデータをキャッシュに運ぶことを要求するものとして発行されるプリフェッチ・リクエストであり得る。プリフェッチ・リクエスト（これは、定義により、投機的である）は、機密情報を含む領域に向けて行われた場合、次に、再び、この情報のキャッシュの中への割り当てが、機密に関する何らかの情報を攻撃者に露出する可能性がある。
【００２９】
異なるクラスのプリフェッチャが、提供されることが可能である。たとえば、アドレス・パターン・ベースのプリフェッチャは、先にアクセスされた一連のアドレスに基づいて、たとえば、それらのアドレスが、規則的な間隔で一連のアドレスがアクセスされるストライド・パターンを含むかどうかを検出するために、訓練され得るが、ストライドが検出されるときには、プリフェッチャは、システムによって非投機的に到達された現在のアドレスを超えて伸長するストライド・シーケンスにおけるそれ以降のアドレスにおけるデータに対するプリフェッチ・リクエストを発行し続けることがあり得る。攻撃者は、したがって、プリフェッチャを訓練するように設計されたアドレスへのデータ・アクセス・リクエストのパターンを発行することができ、それにより、それ以降、機密性の高い位置からのデータを、キャッシュの中にプリフェッチする、又は、機密に従属する他のアドレスをフェッチすることになる。別のクラスのプリフェッチャは、コンテンツ・ベースのプリフェッチャであり得るが、これは、メモリにおける他の位置への可能性のあるポインタを識別するために、メモリ・アクセスによってフェッチされたデータを解析する。いくつかが見つかる場合には、そのデータは、ポインタによって指摘されたメモリにおける位置からフェッチされることが可能である。
【００３０】
投機サイドチャネル攻撃を開始するプリフェッチャの使用は、投機制限領域タイプの領域へのプリフェッチ・リクエストを禁止することによって、鎮静させることが可能である。或いは、いくつかのシステムにおいて、プリフェッチ・リクエストは投機制限領域タイプの領域に対して一般的に禁止され得るが、プリフェッチ・リクエストによってターゲットにされている領域の直前のメモリ領域がキャッシュにおいて非投機的に既にキャッシュされている場合に対しては、例外が作られるのであり、その場合は、それが投機制限領域タイプである場合でも、次のメモリ領域へのプリフェッチ・リクエストが許可され得る。これが、現在の非投機的な実行到達点をはるかに超えてプリフェッチャがプリフェッチする能力を制限することになり、これは、投機サイドチャネル攻撃への脆弱性を減少させる。それにもかかわらず、投機制限領域タイプ以外のタイプのメモリ領域へのプリフェッチ・リクエストは、依然として、パフォーマンスを改善させるために、許可され得る。これが、セキュリティとパフォーマンスとの間のよりよいバランスを提供することができる。
【００３１】
上で論じられたプリフェッチ・リクエストは、処理回路によって実行される命令とは独立にハードウェア・プリフェッチャによって生成されるハードウェア・プリフェッチ・リクエストか、又は、処理回路によって実行されるソフトウェア・プリフェッチ命令によってトリガされるソフトウェア・プリフェッチ・リクエストのいずれか、であり得る。よって、データのプリフェッチを要求する明示的な命令でさえも（そのデータが、処理回路のレジスタの中にロードされることが現時点では要求されていなくても）、メモリの投機制限領域に対して禁止されることがあり得る。
【００３２】
いくつかの実装例では、異なるレベルの制限が、異なるタイプのプリフェッチャに対して、適用され得る。たとえば、アドレス・パターン・ベースのプリフェッチャは、上で論じられたコンテンツ・ベースのプリフェッチャよりも、攻撃者が利用するのが困難であり得るが、その理由は、処理回路を、それ自体にセキュリティ・ホールを有するメモリのブロックに合法的にアクセスし、関心対象の位置のアドレスを含むようにそのホールを調整して、次いでコンテンツ・ベースのプリフェッチャによってそのデータがプリフェッチされるように調整することは、比較的容易であり得るからである。よって、いくつかの場合には、投機制限メモリ領域タイプをターゲットにするプリフェッチ・リクエストは、それらがコンテンツ・ベースのプリフェッチャによって生成されるときには、禁止されることがあり得る（又は、ターゲット領域からのデータが、まだキャッシュに存在しない場合には、禁止される）が、投機制限メモリ領域タイプをターゲットにするプリフェッチ・リクエストは、それらがアドレス・パターン・ベースのプリフェッチャによって生成されるときには、制限が、より軽微であり得る。たとえば、アドレス・パターン・ベースのプリフェッチャからのプリフェッチ・リクエストは、それらがメモリ領域の投機制限タイプをターゲットにするときは、依然として許可され得るが、ただし、投機制限領域をターゲットにしないリクエストとの関係では、いくつかの制限が依然として適用され得るのであって、たとえば、プリフェッチ・リクエストは、外部キャッシュのレベルへのプリフェッチに（レベル１のキャッシュに対するよりも）制限され得るのであって、それにより、データは、メイン・メモリからフェッチされなければならない場合よりも、はるかに低いコストで利用可能になるが、さらなる投機のためにそれを自由に用いられることが可能な最も内側（レベル１）のキャッシュの中にそれを運ぶことはない。よって、いくつかの場合には、投機制限領域タイプの領域へのプリフェッチ・リクエストに適用される制限は、プリフェッチ・リクエストを生成したプリフェッチャのクラスに応じて、変動し得る。
【００３３】
投機制限領域タイプは、唯一のメモリ領域タイプではあり得ない。システムは、また、メモリ属性データによってメモリの領域に示されることが可能なデバイス領域タイプも、サポートすることができる。デバイス領域タイプの領域に対しては、メモリ・アクセス回路が、所与の読み出しリクエストに応答して得られたデータを用いてそれ以降の読み出しリクエストが処理されることを禁止することがある。デバイス領域タイプは、その周辺デバイスへのどのアクセスに対しても別個のトランザクションがメモリに発行されることが望まれる一定の周辺デバイスにマッピングされたメモリの領域にとって、有用であり得る。たとえば、これは、自動車におけるエアバッグの着火など、システムにおいて一定の現実世界における動作を実行する周辺デバイスにとって、有用であり得る。デバイス領域タイプの領域への投機的なリクエストは、しばしば全面的に禁止され得るが、その理由は、多くの場合に、周辺デバイスへのメモリ・アクセスの効果は撤回不可能であり、よって、そのような周辺デバイスは、常に非投機的にアクセスされることだけが望まれ得るからである。既存のシステムでは、デバイス領域タイプは、また、投機サイドチャネル攻撃が危険として想定されるメモリの領域にも用いられることが可能であり、メモリのデバイス領域タイプへの投機的アクセスは否定されることがあり得るので、これは、攻撃を鎮静化させ得るのであるが、これは、また、そのような領域にアクセスする際のパフォーマンスに著しく影響し得るのであり、その理由は、デバイス領域タイプに対しては、それ以降のどのリクエストも、完全に別個のメモリ・トランザクションを用いて処理されなければならないからである。よって、投機的なリクエストに応答してメモリ・アクセスを処理する能力を制限するが、それにもかかわらず、（第１の読み出しリクエストに応答してデータが戻される場合に）別個のトランザクションをメモリに発行することを必要としないで、それ以降の読み出しリクエストが処理されることを許可する投機制限領域タイプを指定することにより、これは、デバイス領域タイプが投機サイドチャネル攻撃に対する保護として用いられた場合よりも、よりすぐれたパフォーマンスを可能にする。
【００３４】
提供され得る別のタイプのメモリ領域は、非投機制限領域タイプ（又は、通常領域タイプ）であり得るが、これに対しては、メモリ・アクセス回路が、読み出しリクエストが投機的に発行されるのか又は非投機的に発行されるのかとは独立に、少なくとも１つの応答動作が許可されるかどうかを、決定することができる。よって、非投機制限領域は、投機的に発行された読み出しリクエストに応答して、それらの領域への完全なアクセスを許容することによりパフォーマンスを改善させるために、投機サイドチャネル攻撃の危険が低いほとんどのメモリ領域に対して、用いられ得るのであるが、攻撃の危険が想定されるようなこれらの特定の領域に対しては、投機制限領域タイプが、セキュリティを強化するために、用いられ得る。
【００３５】
メモリ属性データは、非投機制限領域タイプと投機制限領域タイプとの領域を、異なる方法で、区別することができる。ある実例では、各メモリ領域は、領域タイプを識別する対応するタイプ属性を有し得る。メモリ・アクセス回路は、所与の領域が、所与のメモリ領域に対するタイプ属性が第１の値を有するときには、非投機制限領域タイプであり、所与のメモリ領域に対するタイプ属性が第２の値を有するときには、投機制限領域タイプであると決定することができる。よって、この場合には、領域ごとを基礎として提供されるタイプ属性は、領域が非投機制限領域タイプであるか又は投機制限領域タイプであるかを区別することができる。
【００３６】
或いは、他の場合には、メモリ・アクセス属性データは、各メモリ領域に対して特定されるタイプ属性を含み得るが、複数のメモリ領域の間で共有されるグローバル属性も含み得る。このアプローチを用いると、所与のメモリ領域に対するタイプ属性が所定の値を有するときには、所与のメモリ領域は、グローバル属性が第１の値を有するときには、非投機制限領域タイプであり、グローバル属性が第２の値を有するときには、投機制限領域タイプであると決定され得る。よって、このアプローチを用いると、非投機制限領域タイプと投機制限領域タイプとは、メモリ領域ごとに提供されるタイプ属性に関しては、まったく同じ所定の値を共有し得るのであるが、その所定の値のタイプ属性が、必要に応じて、非投機制限領域タイプを示すと解釈されるべきなのか、又は、投機制限領域タイプを示すと解釈されるべきなのかを示すために、別個のグローバルに定義される属性が、提供され得る。たとえば、グローバル属性は、各メモリ領域に対するタイプ属性を提供するページ・テーブルにおいて、ヘッダ・パラメータとして特定され得る、又は、データ処理装置の制御レジスタの内部で、特定され得る。そのような制御レジスタは、所与のプロセッサの実装のために固定されるように、ハードワイアードであることが可能である又は、タイプ属性が所定の値を有する領域が非投機制限領域タイプとして扱われるべきか又は投機制限領域タイプとして扱われるべきかをソフトウェアが選択できるようにプログラムされることも、可能である。グローバル属性を用いるこのアプローチは、投機制限領域タイプをサポートしないシステムのために書かれたソフトウェアとの下位互換を実現することが可能であるが、その理由は、非投機制限領域タイプのメモリ領域を定義する同じページ・テーブルは、単純に変更することなく再利用が可能であるが、グローバル属性を用いると、非投機制限として先に示されていた領域が、今や、投機制限として解釈されるべきであることを示すように更新されるからである。
【００３７】
処理回路は、インオーダ処理又はアウトオブオーダ処理のいずれかを用いることができる。アウトオブオーダ・プロセッサでは、上で論じられた投機制限領域タイプが、特に有用であり得るが、その理由は、アウトオブオーダ・プロセッサでは、プロセッサが、機能停止した命令を超えて、命令を投機的に実行することができるからであり、上で論じられた形式の攻撃のより大きな危険に至ることになる。しかし、また、いくつかのインオーダ・プロセッサの設計では、メモリ・アクセス回路は、上で論じられたのと同じように、投機制限領域へのアクセスを、非投機制限領域へのアクセスとは異なるように扱うことができる。
【００３８】
しかし、インオーダ・プロセッサでは、攻撃の危険が、より小さいことがあり得るのであって、その理由は、分岐予測を超えて投機的に実行されることが可能な動作の回数が制限されるからであり、キャッシュ・ミスのために、メモリ・アクセス命令が機能停止となると、次に、そのメモリ・アクセス命令が提供されるまで、さらなる命令が実行されることが不可能であるからである。よって、インオーダ・プロセッサのいくつかの実装例では、投機制限領域タイプに関する追加的な保護は、不必要だと考えることができ、その理由は、投機サイド・チャネルの危険が十分に低いからである。したがって、メモリ・アクセス回路の複雑性を低減させる（及び、非投機的に読み出されたリクエストに対して許可される投機的読み出しリクエストに対する動作を許可することによって、パフォーマンスを改善する）ために、メモリ・アクセス回路は、投機制限領域タイプを、上で論じられた非投機制限領域タイプ（通常領域タイプ）と同じように扱うことができる。それにもかかわらず、メモリ・マッピング・データは、依然として、投機制限領域タイプの領域と非投機制限領域タイプの領域とを区別することができ、それによって、同じプログラム・コードが、上で論じられたように応答動作を少なくとも１つ削除して投機制限領域タイプへの投機的読み出しを別に扱うアウトオブオーダ・プロセッサ上で又はインオーダ・プロセッサ上で、実行することができる。
【００３９】
メモリ割り当てのための方法が、上で論じられた投機制限領域タイプを利用するために、提供され得る。この方法は、所与のソフトウェア・プロセスによって使用するためのメモリの１つ又は複数の領域を割り当てるステップと、割り当てられた各領域に対して、いくつかの領域タイプの間から選択された領域タイプを選択して、その領域のために選択された領域タイプを識別するメモリ属性データを記憶するステップとを含み得る。少なくとも１つの領域に対して、選択された領域タイプは、上で論じられた投機制限領域タイプであり得る。この方法は、他のプロセスによって使用するためのメモリの割り当てを制御するためのいずれかのソフトウェアによって、実行されることが可能である。たとえば、このメモリ割り当て方法は、オペレーティング・システム又はハイパーバイザによって実行されることが可能である。いくつかの場合に、所与の領域に対して投機制限領域タイプを用いるかどうかに関する決定は、その領域に記憶されるデータの機密性に基づくか、又は、メモリが全体として割り当てられるソフトウェアの知覚された機密性に基づき得る。いくつかの場合に、メモリ割り当てプロセスは、ユーザによって提供されており実行される具体的なアクセスに対する機密性の予測されるレベルを示す注釈データに基づき得る。この方法は、ホスト・データ処理装置上で実行されるコンピュータ・プログラムによって、制御され得る。ホスト・データ処理装置は、次に、メモリ・システムへのアクセスを制御するための定義されたメモリ属性データをそれ以降に用いる同じ処理装置であり得る、又は、そのメモリ・アクセスがメモリ属性データに基づいて制御されるものとは異なる処理装置であり得るが、ホスト処理装置上で実行されるメモリ割り当てコンピュータ・プログラムによって生成されるメモリ属性データは、次に、それ以降は、メモリ属性データに基づいて制御されるメモリ・アクセスを用いてコードを実際に実行するターゲット・データ処理装置の中にロードされる。記憶媒体は、コンピュータ・プログラムを記憶することができ、一時的な記憶媒体又は非一時的な記憶媒体であり得る。
【００４０】
図１は、いくつかのパイプライン段を備えた処理パイプラインを有するＣＰＵ（中央処理装置）３を含むデータ処理装置２の実例を、概略的に図解している。パイプラインは、分岐命令の結果を予測し、フェッチされる命令の一連のフェッチ・アドレスを生成するための分岐予測器４を含む。フェッチ段６は、命令キャッシュ８からのフェッチ・アドレスによって識別された命令をフェッチする。デコード段１０は、パイプラインのそれ以降の段を制御するための制御情報を生成するために、フェッチされた命令をデコードする。リネーム段１２は、命令によって識別されたアーキテクチャ上のレジスタ指定子を、ハードウェアにおいて提供されるレジスタ１４を識別する物理レジスタ指定子にマッピングするために、レジスタのリネームを実行する。レジスタのリネームは、アウトオブオーダ実行をサポートするために有用であり得るのであるが、その理由は、それが、同じアーキテクチャ上のレジスタを指定する命令の間のハザードを、それらの命令がキャッシュ８からフェッチされたそれらのプログラムの順序とは異なる順序で実行されることが可能になる蓋然性を向上させるために、ハードウェア・レジスタ・ファイルにおける異なる物理レジスタにそれらをマッピングすることによって、除去されることを許容するからであり、これが、オペランドが利用可能になるのを先行する命令が待機している間に後の命令の実行を許容することによって、パフォーマンスを改善することができる。アーキテクチャ上のレジスタを異なる物理レジスタにマッピングすることが可能であることにより、また、分岐の予測ミスの場合にアーキテクチャ上の状態をロール・バックすることも、容易になり得る。発行段１６は、それらの命令を処理するために要求されるオペランドがレジスタ１４で利用可能になるまで、実行を待機している命令を、待ち行列に入れる。実行段１８は、対応する処理動作を実行するために、命令を実行する。ライト・バック段２０は、実行された命令の結果を、レジスタ１４に書き戻す。
【００４１】
実行段１８は、分岐命令が正しく予測されたかどうかを評価するための分岐ユニット２１、算術又は論理動作を実行するためのＡＬＵ（算術論理ユニット）２２、浮動小数点オペランドを用いて動作を実行するための浮動小数点ユニット２４、及びメモリ・システムからレジスタ１４にデータをロードするロード動作又はレジスタ１４からメモリ・システムにデータを記憶する記憶動作を実行するためのロード／記憶ユニット２６など、いくつかの実行ユニットを含み得る。この実例では、メモリ・システムは、レベル１の命令キャッシュ８と、レベル１のデータ・キャッシュ３０と、データと命令との間で共用されるレベル２のキャッシュ３２と、メイン・メモリ３４とを含んでいるが、それは可能なメモリ階層の単なる１つの実例であり、他の実装例はさらなるレベルのキャッシュ又は異なる配列を有し得る、ということが理解されるであろう。
【００４２】
メモリへのアクセスは、アドレス変換及び／又はメモリ保護を制御するためのメモリ管理ユニット（ＭＭＵ）３５を用いて、制御され得る。ロード／記憶ユニット２６は、パイプラインによって生成された仮想アドレスをメモリ・システム内部の位置を識別する物理アドレスにマッピングするために、ＭＭＵ３５の変換索引バッファ３６を用いることができる。ＣＰＵ３は、ＣＰＵ３のキャッシュ３０、３２、８におけるデータと別のマスタ・デバイス（たとえば、グラフィック処理ユニット）３８内部のリモート・キャッシュ４０におけるデータとの間のコヒーレンシを管理する相互接続３７を介して、メモリ３４と対話する。図１に示されているパイプラインは単なる１つの実例であって、他の実例は異なる組のパイプライン段又は実行ユニットを有する場合があり得る、ということが理解されるであろう。たとえば、インオーダ・プロセッサは、リネーム段１２を有しない場合があり得る。
【００４３】
図１に示されているように、ＣＰＵ３は、また、パイプラインで処理された命令によってそれらが明示的に示される前に、将来のメモリ・アクセスのアドレスを予測するためのハードウェア・プリフェッチャ４４も含む。プリフェッチャ４４は、予測されたアドレスに従ってデータがメモリからフェッチされＬ１キャッシュ３０の中に割り当てられることを要求するプリフェッチ・リクエストを発行する。たとえば、プリフェッチャ４４には、ＴＬＢ３６において参照された一連のアドレスが供給される、又は、ロード／記憶ユニット２６によって供給される場合があり得るが、連続的なアドレスの間に規則的なオフセットを有するアドレスのストライド・パターンが検出されるかどうかを検出し得る。そのようなストライド・パターンが検出されると、プリフェッチャ４４は、ロード／記憶ユニット２６によって到達された直近のデータ・アドレスを超えて、予測されるアドレス・ストライドの間隔で延長するアドレスと関連するデータに対し、追加的なメモリ・アクセス・リクエストが、メモリ・システムに発行されることをトリガすることができる。アドレスの実際のパターンがストライド・パターンにもはや従わないことが検出されると、次に、そのようなプリフェッチ動作は、別のストライド・パターンが検出されるまで、停止されることがあり得る。或いは、プリフェッチャ４４は、所与のメモリ・アクセスによってロードされたデータがメモリにおけるさらなる位置へのポインタであるかどうかを予測し、そのデータがポインタであると予測される場合には、そのポインタによって識別されたさらなる位置からデータをプリフェッチする、コンテンツ・ベースのプリフェッチャであり得る。いくつかの場合には、パイプラインが、また、所与のアドレスからのデータが、レジスタ・バンク１４の中にロードされることなく、Ｌ１キャッシュ３０の中に運ばれることを要求するソフトウェア・プリフェッチ命令を実行することもあり得る（データがターゲット・レジスタの中にロードされることを要求する規則的なロード命令とは異なる）。
【００４４】
投機的なメモリ読み出しを用いる投機ベースのキャッシュ・タイミング・サイドチャネルが、最近、提案されている。投機的なメモリ読み出しは、先進のマイクロプロセッサに典型的であり、非常に高いパフォーマンスを可能にする全体的な機能の一部である。アーキテクチャ上で決定されていない分岐（又は、プログラム・フローにおける他の変更）を超えて、キャッシュ可能な位置への投機的なメモリ読み出しを実行することによって、及び、さらに、さらなる投機的なメモリ読み出しのアドレスを形成するためにそれらの読み出し自体の結果を用いることによって、これらの投機的読み出しは、そのアドレスが第１の投機的読み出しの値を示すキャッシュの中へのエントリの割り当てを生じさせる。これは、信頼されていないコードが、そうでない場合にはその信頼されていないコードにおいてアクセス可能ではない位置の第１の投機的読み出しを生じさせるように、投機を制御することができるが、キャッシュの内部への第２の投機的割り当ての効果が、その信頼されていないコードによって測定されることが可能である場合には、利用可能なサイドチャネルになる。
【００４５】
どの形式の管理ソフトウェアでも、信頼されていないソフトウェアが、オフセットとして用いられるデータ値を、信頼されているソフトウェアによってアクセスされるアレイ又は同様の構造に送るのは、通例である。たとえば、アプリケーション（信頼されていない）は、ファイル記述子ＩＤに基づいて、オープン・ファイルに関する情報を求めることがあり得る。もちろん、管理ソフトウェアは、それを用いる前に、そのオフセットが適切な範囲内にあることをチェックするのであり、よって、そのようなパラダイムのためのソフトウェアは、次のような形式で、書かれることが可能である：
【数１】
2021525416.tif 000003
【００４６】
現代のマイクロプロセッサでは、プロセッサ実装例が、ｕｎｔｒｕｓｔｅｄ＿ｏｆｆｓｅｔ＿ｆｒｏｍ＿ｕｓｅｒの範囲チェック（ライン７によって含意されている）と関連する分岐を実行する前に値を確立するために、データ・アクセス（上述のコードにおけるライン９によって含意されている）を投機的に実行し得るのは、通例である。（ＯＳカーネル又はハイパーバイザなどの）管理レベルでこのコードを実行しているプロセッサは、その管理レベルにアクセス可能な通常メモリのどこからでも投機的にロードすることができ、信頼されていないソフトウェアによって送られたｕｎｔｒｕｓｔｅｄ＿ｏｆｆｓｅｔ＿ｆｒｏｍ＿ｕｓｅｒに対するアウト・オブ・レンジ値によって決定される。これは、アーキテクチャ上の問題ではなく、その理由は、投機が正しくない場合には、次に、ロードされた値はハードウェアによって廃棄されるからである（投機によって生じたレジスタ・バンク１４に対する効果を反転させる）。
【００４７】
しかし、先進的なプロセッサは、投機的にロードされた値を、さらなる投機のために用いることができる。投機ベースのキャッシュ・タイミング・サイドチャネルによって利用されるのは、このさらなる投機である。たとえば、先の実例は、以下の形式に拡張され得る。
【数２】
2021525416.tif 000004
この実例では、「ｖａｌｕｅ」は、ｕｎｔｒｕｓｔｅｄ＿ｏｆｆｓｅｔ＿ｆｒｏｍ  ｕｓｅｒと組み合わされたａｒｒ１−＞ｄａｔａから計算されたアドレスを用いて、メモリからロードされるのであるが（ライン１０）、次に、さらなるメモリ・アクセスの基礎として用いられる（ライン１３）。したがって、ｖａｌｕｅ２の投機的なロードは、ｖａｌｕｅのために投機的にロードされたデータから導かれるアドレスに由来する。プロセッサによるｖａｌｕｅ２の投機的なロードが、キャッシュの中への割り当てを生じさせる場合には、次に、そのロードのアドレスの一部は、標準的なキャッシュ・タイミング・サイドチャネルを用いて、推測される。そのアドレスは、ｖａｌｕｅにおけるデータに依存するので、次に、ｖａｌｕｅのデータの一部は、サイドチャネルを用いて、推測されることが可能である。このアプローチを「ｖａｌｕｅ」の異なるビットに（いくつかの投機的実行において）適用することにより、ｖａｌｕｅのデータの全体が決定されることが可能である。よって、この信頼されていないソフトウェアは、ｕｎｔｒｕｓｔｅｄ＿ｏｆｆｓｅｔ＿ｆｒｏｍ＿ｕｓｅｒにアウト・オブ・レンジの量を提供することによって、管理ソフトウェアにアクセス可能である任意の場所にアクセスすることができ、このように、このアプローチは、信頼されていないソフトウェアが、管理ソフトウェアによってアクセス可能な任意のメモリの値を回復するために、用いられることが可能である。
【００４８】
現代のプロセッサは、命令キャッシュ、データ・キャッシュ及び分岐予測キャッシュを含む複数の異なるタイプのキャッシュを有する。これらのキャッシュにおけるエントリの割り当てが、信頼されていない入力に基づいてロードされたいくつかのデータのいずれかの部分の値によって決定される場合には、次に、原理的には、このサイド・チャネルは、スティミュレートされることが可能である。
【００４９】
この機構の一般化として、分岐を通過するコードが投機的に実行され得るということを基礎になるハードウェア技術が意味しており、したがって、分岐の後でメモリにアクセスする任意のシーケンスが投機的に実行され得る、ということを理解されるべきである。そのような投機においては、投機的にロードされた１つの値が、次に、第２のロード又はやはり投機的に実行されることが可能な間接的な分岐のためのアドレスを構築するのに用いられる場合には、その第２のロード又は間接的な分岐は、そうでない場合にはその値を読み出すことができないであろうコードによるキャッシュのタイミング解析を用いて読み出されることが可能な方法で、第１の投機的なロードによってロードされた値の指示を残すことがあり得る。この一般化は、一般的に生成される多くのコード・シーケンスが、他のより下位の特権を有するソフトウェアによって読み出されることが可能なキャッシュ割り当てのパターンに情報をリークする、ということを含意している。この問題の最も深刻な形式は、このセクションにおいて既に説明されたものであり、その場合、より下位の特権を有するソフトウェアが、このようにして、どの値がリークされるかを選択できるのである。
【００５０】
以下で説明される実例では、このタイプの攻撃に対する対抗手段が、「投機制限タイプ」のメモリ領域と称される新たなタイプのメモリ領域を定義することによって提供されるのであるが、「投機制限タイプ」のメモリ領域に対しては、ＭＭＵ３５が、投機サイドチャネル攻撃に対していくらか緩和するために、投機的に発行されるリクエストがメモリ・システムと対話するための能力をプロセッサが制限することを保証する。
【００５１】
図２は、アクセスされるデータについて要求される仮想アドレスに基づきページ・テーブルを参照する実例を示している。ページ・テーブルは、それぞれが仮想アドレスの一定のブロックに対応しそのブロックに対して対応する物理アドレスを指定するいくつかのエントリと、１つ又は複数のアクセス許可（読み出し及び／又は書き込みがそのメモリ領域に許可されるかどうか、及び、いくつかの場合には、どの特権レベルがそのメモリ領域にアクセスするのを許容されるのかなど）と、以下で論じられるようにいくつかの代替的な領域タイプから特定されるメモリ領域のタイプの指示とを含む。
【００５２】
図２は、概略的なレベルでページ・テーブルを参照する実例を示しており、現実的には、ページ・テーブルのための実際のルックアップ・プロセスはより複雑であり得る、ということが理解されるであろう。たとえば、いくつかのシステムは、２段のアドレス変換をサポートし得るのであって、オペレーティング・システムによって設定された第１の組のページ・テーブルの制御による仮想アドレスから中間的な物理アドレスへの第１の段と、ハイパーバイザによって制御される第２の組のページ・テーブルの制御による中間的な物理アドレスから物理アドレスへの第２の段とである。これは、複数のゲスト・オペレーティング・システムが、同じプラットフォーム上に共存しており、ハイパーバイザによって、物理アドレス空間の異なる領域上にマッピングされるという視覚化をサポートするのに有用であり得るが、それらのオペレーティング・システムは、それ自体の観点からは、自らが物理アドレス（コンフリクトを生じることがあり得る）を用いていると認識しているが、しかし、それは、ハイパーバイザの視点からは、実際には、ハイパーバイザによって別個の物理アドレスにマッピングされる中間的な物理アドレスである。また、上で論じられた第１の段若しくは第２の段のいずれかのページ・テーブル、又は、仮想アドレスから物理アドレスへの完全な変換を提供する統一されたページ・テーブルなど、１組のページ・テーブルの内部においても、ページ・テーブルは、いくつかのレベルのページ・テーブルを用いて実装され得るのであるが、その場合、ページ・テーブル・ウォークの間に、異なるレベルのページ・テーブル構造の内部において仮想アドレスからのビットの異なる部分集合がエントリを選択し、それにより、結果的に、メモリの要求されるブロックに対する実際の物理アドレスを提供するページ・テーブル・エントリの位置が突き止められる。こうした階層的なページ・テーブル構造は、ページ・テーブル自体を記憶するためにアドレス変換が表現され得るアドレス範囲全体のサイズに比例してメモリ領域を予約する必要がないことを意味するため、メモリの使用においてより効率的であり得る。いずれかの知られているアドレス変換技術が、用いられることが可能である。
【００５３】
そのような知られている技術により各ページ・テーブル・エントリに示されている領域タイプは、以下で論じられるように、投機制限タイプの領域の指示を含むように拡張されることが可能である。図２はページ・テーブルの中への索引付けを示しているが、ページ・テーブルからの選択されたエントリは、ＭＭＵ３５により高速なアクセスのために、変換索引バッファ３６にキャッシュされ得るのであって、それにより、アドレス変換が要求される度にメモリ３４におけるページ・テーブルにアクセスすることは不要になる。
【００５４】
図３及び４は、ページ・テーブルにおいて領域タイプを表現する２つの代替的方法を示している。図３の実例においては、領域タイプ・フィールドが、アドレスの対応するブロックのためのいくつかの領域タイプのうちの１つを示す各ページ・テーブル・エントリに対して、提供される。いくつかの異なる値が、異なるタイプのメモリ領域に割り当てられる。たとえば、図３では、タイプ・フィールドは、２ビットのエンコードを提供するのであるが、それに対し、値のうちの３つが、通常（非投機制限）、デバイス、及び投機制限メモリ領域タイプをそれぞれ示すように、割り当てられている。タイプ・フィールドの第４のエンコードは、反転である。各自のメモリ・タイプにそれぞれに割り当てられているタイプ・フィールドの特定の値は、任意の選択であり、他の実施例では、どの領域タイプがタイプ・フィールドの特定のエンコードによって示されるのかを入れ替えることが可能である、ということが理解されるであろう。いくつかのシステムでは、３つより多くの異なる領域タイプをサポートできる、ということが理解されるであろう。
【００５５】
図４に示されているように、代替的なアプローチでは、タイプ・フィールドは、領域タイプが通常又は投機制限のいずれかであるときには所定の値（たとえば、０）に設定され、領域タイプがデバイス・タイプであるときには１に設定される、１ビットだけを含み得る。この場合に、ページ・テーブルにおけるそれぞれの別個のメモリ領域に対して特定されるのではなく、複数のメモリ領域の間で共有される、別個のグローバル・メモリ属性５０が、定義され得る。たとえば、グローバル属性５０は、レジスタ・バンク１４における制御レジスタの内部で特定されることが可能であるし、又は、メモリ・システムにおいて、全体のアドレス空間に対して若しくはアドレス空間の特定の部分に対して包括的である属性データの内部に記憶されることが可能である。このアプローチは、下位互換性のために、よりすぐれているのであるが、その理由は、コードのうちの多くの既存の部分は、利用可能な唯一の領域タイプは通常及びデバイスであると仮定して書かれているからであり、この場合に、グローバル属性５０は、通常タイプの領域として先に扱われたこれらの領域のいくつかが、代わりに投機制限として扱われるべきかどうかを修正するのに用いられることが可能である。
【００５６】
図５は、通常、投機制限、及びデバイス・タイプそれぞれのメモリ領域の様々な特性を指示する表を示している。投機制限タイプの領域の場合には、投機制限タイプと示されている領域への読み出しリクエストが投機的に発行されるのか又は非投機的に発行されるのかに応じて、振る舞いが異なる。図５は、非投機的な場合と、リクエストが投機的に発行されているが正しいとはまだ決定されていない場合との振る舞いを図解するカラムを有する。また、リクエストが投機的に発行され、結果的に正しいと決定される場合も存在する、ということが理解されるであろう。いったん投機的読み出しリクエストが正しいと既に決定されると、次に、いくつかの実装例では、これを、非投機的な場合と同じものとして扱うことがあり得る。他の実装例では、未決定の投機的なリクエストについては、たとえ投機的なリクエストが決定された後であっても、投機制限領域に対するすべての投機的読み出しリクエストを、同じ態様で扱うことによって、メモリ・アクセス制御を単純化することがあり得る。よって、投機制限領域への既に決定された投機的なリクエストが、図５に示されている投機的な場合に示される振る舞いに従うべきか又は非投機的な場合に示される振る舞いに従うべきかは、実装例に依存する、ということが理解されるであろう。
【００５７】
同様に、デバイス・タイプの領域に対して示されている振る舞いは、デバイス・タイプ領域に投機的に発行されたリクエストと非投機的に発行されたリクエストとの間で異なるのであるが、この場合に、投機的なリクエストが既に正しいと決定されているか決定されていないかに応じた差異は、存在しない。
【００５８】
投機的に発行されたリクエストは、ロード／記憶ユニット２６によってメモリ・システム又はキャッシュに発行された任意の読み出しリクエストであって、正しく発行されたことを処理パイプラインがまだ決定していないものであり得る、ということが理解されるであろう。たとえば、これは、分岐が正しく予測されたかどうかまだ決定されていないときに、分岐の後のそれ以降の命令がメモリ・システムへの読み出しリクエストをトリガするようにという、分岐予測器４による分岐予測結果であり得る。
【００５９】
図５に示されているように、通常タイプのメモリ領域に発行されたリクエストに関しては、それらが投機的に発行されるのか又は非投機的に発行されるのかとは関係なく、同じ態様で、読み出しリクエストが処理されることが可能である。よって、通常の領域へのリクエストに関しては、システムは、読み出しリクエストに応答して、読み出しトランザクションをメモリ・システム３０、３２、３４、３７に発行することが許容され、メモリ・システムから得られたデータを、読み出しリクエストに応答してそのデータがレジスタ１４に記憶されることが可能なように、プロセッサ３に戻すことが許容され、戻されたデータをプロセッサ・コア３のＬ１キャッシュ３０の中に割り当てることが許容される。
【００６０】
さらに、通常タイプとしてページ・テーブルによって示されたメモリ領域をターゲットにする読み出しリクエストは、読み出しリクエストをトリガした命令を実行しているマスタ３以外の別のマスタ・デバイス３８におけるリモート・キャッシュ４０におけるアドレス割り当ての変更をトリガすることが許容され、メモリ３４の内部のＤＲＡＭデバイスにリクエストが発行されると、開いていないＤＲＡＭ（ダイナミック・ランダム・アクセス・メモリ）ページを開いた状態にすることも可能である。ＤＲＡＭチップでは、ＤＲＡＭは、しばしば、メモリ・アレイのうちの１つの行から読み出されたすべてのデータを記憶するのに用いられることが可能な行バッファを含む。データ値が同じ行の内部のいずれかのセルからアクセスされると、セルのすべての行が、行バッファに読み出され得る。よって、同じ行の内部のアドレスへのそれ以降のリクエストは、ＤＲＡＭアレイの別の行におけるアドレスへのリクエストよりも高速に処理されることが可能であり、非常に多くの場合に、可能であれば、メモリ・アクセスを同じ行の内部のアドレスにグループ化するのが、最も効率的であり得る。よって、開いていないＤＲＡＭのページを開くというのは、あるアドレスが、行バッファの内部に現在憶されているものとは異なる行からアクセスされるという機会を指すのであって、それにより、先に開かれたページと関連する行バッファからの値を、ＤＲＡＭ構造におけるセルの対応する行の中に書き戻し、次いで、セルの異なる行を行バッファの中に読み出すことが必要となる。そのような動作は、通常タイプの領域をターゲットにする投機的に発行されたリクエストと非投機的に発行されたリクエストとの両方に対して許容され得る。
【００６１】
通常タイプのアクセスの別の特性は、いったん１つの読み出しリクエストが処理されると、そのリクエストに応答して読み出された通常タイプの領域からのデータは、同じアドレス又は近傍のアドレスへのそれ以降の読み出しリクエストに処理するのに用いることが許容されることができる、ということであり得る。たとえば、いくつかの場合には、メモリによって戻されたデータのブロックの小さな部分だけが、ある読み出しリクエストを扱うために要求される場合であっても、そのブロックの残りは、それにもかかわらず、Ｌ１データ・キャッシュ３０の内部にキャッシュされ得るのであって、後で、それ以降のリクエストが、同じブロックのそれ以降の部分のうちの１つに対してヒットする場合があり、よって、メモリ・システムに発行される余分なメモリ・トランザクションを必要とすることなく、処理され得る。
【００６２】
プリフェッチャ４４によって発行されるプリフェッチ・リクエストは、通常タイプのメモリ領域に許容され得る。また、パイプラインにおいて実行されるソフトウェア・プリフェッチ命令によってトリガされるソフトウェア・プリフェッチ・リクエストも、許容され得る。また、通常領域からのデータがＣＰＵ３のＬ１キャッシュ３０の内部にキャッシュされている継続時間には、限度が存在しない場合があり得る（結果的にキャッシュ・データが、より直近にアクセスされたデータのための余地を作るために追い出される必要があり得るように、利用可能なキャッシュ空間の制限された量によって課される何らかの継続時間以外に）。
【００６３】
図３から５の実例に示されている「通常」メモリ・タイプは単一のメモリ・タイプとして示されているが、いくつかの実装例は、異なる振る舞いを有する「通常」タイプの複数のバージョンをサポートし得るということに注意してほしい。たとえば、図５に示された特性を有する「通常」の「ライト・スルー」及び「ライト・バック」という変形例が、定義され得るが、その場合、「ライト・スルー」領域への書き込みは、キャッシュとメイン・メモリとの両方においてデータの更新を生じさせ、他方では、「ライト・バック」領域への書き込みは、キャッシュだけにおいて更新を生じさせ、メイン・メモリへのライト・バックは、キャッシュされたデータがキャッシュから追い出されるまで延期される。したがって、いくつかのシステムは、複数の「通常」マッピング・タイプをサポートすることができる。同様に、「投機制限」メモリ・タイプの複数の変形例又は「デバイス」メモリ・タイプの複数の変形例が、サポートされることが可能であり、その場合には、一般的に、図５の特性は、各変形例によって満たされるが、他の特性は、所与のメモリ領域に割り当てられた特定の変形例に応じて、異なる。
【００６４】
メモリのデバイス・タイプは、相互接続３７に接続された一定の周辺デバイスにマッピングされるメモリの領域に対して、設計され得る。ＭＭＵ３５によってデバイス・タイプであるとしてマークされた領域への投機的に発行されたリクエストは、ＭＭＵ３５によって常に拒否され得るのであり、それによって、デバイス・タイプの領域に投機的にアクセスすることは可能でない。これは、車両における乗客エアバッグのリリースや、建物における火災安全のためのスプリンクラ・システムのトリガなど、物理的変更を開始するような周辺装置と関連する一定の不可逆的な動作が、いったんそのようなリクエストが非投機的となり、これが正しい振る舞いであることが知られたときにだけ、トリガされることを保証するために、有用であり得る。よって、図５に示されるように、投機的に発行されたリクエストが、デバイス・タイプの領域をターゲットにする場合には、次に、メモリ・システムに対して読み出しトランザクションは発行されず、これは、また、プロセッサにデータは戻されず、リクエストに応答して読み出されたデータは、レベル１のキャッシュ３０の中に割り当てられない、ということを含意している。さらに、リモート・キャッシュ４０におけるアドレス割り当ての変更は存在せず、開かれていないＤＲＡＭページが、開かれることもあり得ない。また、デバイス・タイプの領域をターゲットにするリクエストに応答して、非投機的リクエストであっても、第１の読み出しリクエストに応答して得られたデータを用いて、それ以降の読み出しリクエストが処理されることは、許容されない。これは、多くの周辺装置に対して、プロセッサがその周辺装置との対話を命令すると、プロセッサが動作を命令する度に、この動作が生じるということが重要であり得るということを認識しており、これは、デバイス・タイプとしてマークされたその領域におけるメモリ・アドレスへの読み出し又は書き込みメモリ・アクセスを通じて、なされ得るのであって、よって、近傍のアドレスへのそれ以降のアクセス・リクエストが、同じ領域に対する先のアドレス・リクエストに応答して戻されたデータを用いて処理されることが許容されるのは、望ましくない。また、プリフェッチ・リクエストは、デバイス・タイプの領域に対しては許容され得ないのであるが、その理由は、やはり、これが投機という形式であるからである。
【００６５】
上で議論された投機サイドチャネルのタイプの攻撃を鎮静化する１つの可能性のある方法は、そのような攻撃を潜在的に受ける可能性があるメモリ・アドレス空間の領域を、デバイス・タイプの領域としてマークすることであって、それが、そのようなメモリ領域に投機的にアクセスする能力を否定することによって、攻撃を阻止し得る。この場合、分岐予測器４のどのような悪意ある訓練も、又は、投機の後に命令の誤った実行を誘導するように設計された攻撃者の他の活動も、結果的に、攻撃者によって不適切にアクセスされているデバイス・タイプの領域からのデータを生じさせることは不可能であり、その理由は、どのような投機も、これらの領域がアクセスされる前に決定されるからである。しかし、デバイス・タイプの領域は、各読み出しリクエストを、別個のトランザクションを用いてデバイス領域に提供することを要求され、第１の読み出しリクエストに応答して得られたデータを用いて、それ以降のどの読み出しリクエストが処理されることも阻止するため、メモリの領域を単にサイドチャネル攻撃に対する警戒としてデバイス・タイプとして指定することは、結果的に、パフォーマンスの損失を生じさせる可能性がある。
【００６６】
図５に示されている投機制限タイプの領域は、デバイス・タイプと同様の態様で領域への読み出しを投機的に発行する能力を依然として制限する異なる組の特性を提供するが、デバイス・タイプの領域よりも、いくつかの点で制限が弱く、これが、通常タイプの領域と同様の態様で、第１の読み出しリクエストに応答して得られたデータを用いてそれ以降の読み出しリクエストが処理されることを、許容する。よって、投機制限タイプのメモリ領域は、通常又はデバイス・タイプのいずれかの領域が提供することができるよりも、セキュリティとパフォーマンスとの間のすぐれたバランスを提供し得る。
【００６７】
読み出しリクエストが投機制限タイプの領域に対して非投機的に発行されると、次に、これは、通常タイプとマークされたメモリ領域に対して発行された非投機的又は投機的読み出しリクエストと同様に扱われるが、プリフェッチ・リクエストは決して非投機的ではあり得ないため、これらは、投機制限メモリ領域に対して非投機的に発行されたリクエストと関連しないということが例外である。さらに、いくつかの実装例では、投機制限タイプの領域からのデータがＬ１データ・キャッシュ３０の内部にキャッシュされ得る継続時間が、何らかの最大継続時間に制限されるという点で、投機制限タイプの領域をターゲットとするすべてのリクエストに対して、オプションであるが、追加的な制限が存在し得る。これは、攻撃者が以前の投機的なデータ・アクセスにおいてアクセスされたアドレスに関する情報を引き出すことができる期間を、一定の最大継続時間に制限することによって、サイドチャネル攻撃のための範囲を制限するのを助けることができる。データがキャッシュにおいてペンディングの状態で留まることができる継続時間は、異なる複数の方法、たとえば、キャッシュ・エントリに関連付けられたカウンタを用いることによってトラッキングされ得、このカウンタは、経過した各々の処理サイクル、各々のメモリ・アクセス、又はキャッシュ内の新しいエントリの各々の割り当てに応答してデクリメント又はインクリメントされ、次に、一定の閾値に到達すると、投機制限領域からの先に割り当てられたデータがキャッシュから追い出されるようにトリガすることができる。
【００６８】
他方では、投機的に発行されたが正しいことがまだ決定されていないメモリ・アクセス・リクエストに対して、このリクエストが、投機制限とマークされた領域をターゲットにするときには、次に、投機制限領域への通常のアクセス・リクエストに対して又は非投機的なアクセス・リクエストに対して許可され得る動作のうちの少なくとも１つが、許可されないことがあり得る。たとえば、読み出しトランザクションをメモリ・システムに発行すること、メモリから得られたデータをプロセッサに戻すこと、及び／若しくは、読み出されたデータをＬ１データ・キャッシュ３０に割り当てること、のうちのいずれか１つ又は複数が、投機制限タイプの領域をターゲットにする投機的に発行された読み出しリクエストに対して、禁止され得る。或いは、これらの動作は、投機制限とマークされた領域におけるターゲット・アドレスに対して、Ｌ１データ・キャッシュ３０に、既存のエントリがまだ存在しないときには、許可されないことがあるが、そのターゲット・アドレスに対してＬ１データ・キャッシュ３０にエントリが既に存在する場合には、依然として許可されることがあり得る。これは、いったんデータが所与のアドレスに対してＬ１データ・キャッシュ３０に割り当てられると、次に、それは、このアドレスが既に一度は正当にアクセスされたということを意味しており、よって、そのアドレスが現在実行されているプロセスにアクセス可能ではない機密情報を表す蓋然性は低く、したがって、そのアドレスが投機制限タイプとしてマークされた領域からのものであっても、投機的に発行された読み出しリクエストに応答して再びそのアドレスにアクセスすることは容認可能であり得る、ということを反映し得る。
【００６９】
さらに、ターゲット・アドレスがＬ１データ・キャッシュ３０に既にキャッシュされているかどうかとは関係なく、実行段１８によって正しいとまだ決定されていない投機制限領域への投機的に発行された読み出しリクエストに関し、リモート・キャッシュ４０におけるアドレス割り当ての変更は禁止される場合があり、また、開かれていないＤＲＡＭページが、メモリ３４の内部で開かれることが阻止されることがあり得る。いくつかの場合に、これは、図５のテーブルの最初のラインに示されているように、メモリ・システムへの読み出しトランザクションの発行をすべて阻止することによって、又は、その代わりに、リモート・キャッシュ４０におけるアドレス割り当てパターンを変更せずに若しくは開かれていないＤＲＡＭページを開かれた状態にすることなく行われることが可能である場合にだけ作用を受けるということを保証するような特性を有する、ある形式の読み出しトランザクションを発行することによって、単純に強制され得る。
【００７０】
プリフェッチャ４４によって又はソフトウェア・プリフェッチ命令に応答して発行されたプリフェッチ・リクエストは、それらが投機制限領域をターゲットにする場合には、禁止され得る。或いは、直前のメモリ領域に対応するデータがＬ１データ・キャッシュ３０に非投機的に既にキャッシュされているときにだけ、それらは、許容される。いくつかの実例では、複数のタイプのプリフェッチャ４４が提供されている場合には（たとえば、アドレス・パターン・ベースのプリフェッチャ及びコンテンツ・ベースのプリフェッチャ）、１つのタイプのプリフェッチャ（たとえば、コンテンツ・ベースのプリフェッチャ）によって生成された投機制限領域へのプリフェッチ・リクエストは、別のタイプのプリフェッチャ（たとえば、アドレス・パターン・ベースのプリフェッチャ）によって生成された投機制限領域へのプリフェッチ・リクエストよりも、より制限されていることがあり得る。
【００７１】
メモリ領域の投機制限タイプへの読み出しリクエストが発行されたのが投機的であるか非投機的であるかとは関係なく、投機制限メモリ領域への読み出しリクエストに応答してデータがプロセッサ３に戻される場合には、それ以降の読み出しリクエストは、デバイス領域とは対照的に、そのデータを用いて処理されることが許容され得る。よって、投機制限メモリ領域タイプは、パフォーマンスに対して有害度ははるかに小さいが、それにもかかわらず、投機に対していくつかの制限を有しており、それが、上述された攻撃に対する保護に役立つ。
【００７２】
図５に示されている特性の全部が、投機制限タイプのために実装されることは必須ではない、ということが理解されるであろう。一般的に、投機制限メモリ領域は、下記の特徴の一部又は全部を、新たなメモリ・クラスに提供することができる：
・ＣＰＵが投機的に実行しているときに、メモリへのアクセスは戻されない。
・データが既にＬ１キャッシュに存在していない場合には、ＣＰＵが投機的に実行しているときに、メモリへのアクセスは戻されない。
・投機的に実行しているときのメモリへのアクセスは、ローカル又はリモートＣＰＵ上のどのキャッシュのコンテンツも変更しない。
・投機的に実行しているときのメモリへのアクセスは、それが先に開いていない場合には、ＤＲＡＭページ（又は、他の同様のメモリ構造）を開いた状態にしない。
・いったん最初にアクセスされると、メモリは、キャッシュに保持されることはできない。
・非整列アクセスは、許可され得ない（いずれかの制限が適用の場合には、これらは、通常領域タイプをターゲットにするリクエストに適用されるのと同じシステム・レベルの制限である）。
・メモリは、延長された時間期間の間、キャッシュに存続しないことを保証するために、非時間的なアクセス特性、又は同様の特性を有する（キャッシュ動作の継続時間が制限されている）。
・メモリへのプリフェッチ動作は無視されるか、又は、非常に制限される（たとえ、明示的なプリフェッチ命令に対しても）
・プリフェッチ動作は、キャッシュにおける先のラインが既に非投機的にアクセスされている場合にだけ、起こり得る。
【００７３】
図５に関する以上の議論は、読み出しリクエストのコンテンツにおけるものである。いくつかの場合には、メモリの投機制限領域にデータを書き込むことを要求する書き込みリクエストは、通常領域への書き込みと同じように扱われ得る。一般的に、投機サイドチャネル攻撃の危険は、書き込みよりも読み出しの場合の方が大きいために、よって、いくつかのシステムでは、投機制限領域をターゲットにするリクエストに対してだけ、読み出しへの投機に制限を適用することが容認され得る。或いは、投機制限リクエストへの一貫した制御書き込みに対して、読み出しと同じように扱われることが可能である。
【００７４】
図６は、メモリ・アクセスを制御する方法を図解する流れ図である。たとえば、この方法は、ロード／記憶ユニット２６若しくはＭＭＵ３５によって、又は両方の要素の組合せによって、実行され得る。ステップ１００では、所与のターゲット・アドレスＸに対する読み出しリクエストが、受け取られる。ステップ１０２では、読み出しリクエストが投機的に発行されたかどうかが、検出される。リクエストが非投機的である場合は、ステップ１０４で、ＭＭＵ３５が、ターゲット・アドレスＸを含む領域に対する領域タイプを決定する。領域タイプがデバイス・タイプである場合には、次に、ステップ１０６で、リクエストが処理されるが、その理由は、それが、デバイス・メモリにアクセスすることが許容される非投機的リクエストであるからであるが、ステップ１０８では、それ以降のどのリクエストも、現在のリクエストに応答して戻されるデータを用いて処理されることが、阻止される。よって、デバイス・タイプのメモリに再びアクセスするためには、別個の読み出しトランザクションが、必要とされる。
【００７５】
或いは、ステップ１０４で、領域タイプが、通常タイプの領域か又は投機制限タイプの領域のいずれかである場合には、次に、ステップ１０９で、少なくとも１つの応答動作が許可され、それは、図５の行１から５に示されている動作のうちのいずれかであり得るのであって、ステップ１１０では、それ以降のリクエストが、現在のリクエストに応答して戻されるデータを用いて処理されることが、許容される。
【００７６】
他方で、ステップ１０２で、リクエストが投機的に発行されたことが検出されると、次に、ステップ１１２で、再び、ターゲット・アドレスＸを含む領域に対する領域タイプが決定される。関連する領域に対する領域タイプがデバイス・タイプである場合には、次に、ステップ１１４で、そのリクエストは単純に拒否されるのであるが、その理由は、デバイス・タイプのメモリへの投機的アクセスは許容されないからである。領域タイプが通常である場合には、次に、ステップ１１６で、要求される場合には、図５の行１から５に示されている応答動作が許容され、ステップ１１８で、再び、それ以降の読み出しリクエストが、現在の読み出しに応答して戻されるデータを用いて処理されることが許可される。
【００７７】
ステップ１１２で、ターゲット・アドレスＸに対する領域タイプが投機制限タイプであると決定される場合には、次に、ステップ１２０で、ロード／記憶ユニット２６が、ターゲット・アドレスＸに対するエントリがレベル１のデータ・キャッシュ３０の内部に既に存在し有効であるかどうかをチェックし得るが、そうである場合には、次に、ステップ１１６で、応答動作が再び許容され、通常のリクエストについて同じように、ステップ１１８がそれに続く。ターゲット・アドレスＸがレベル１のキャッシュに割り当てられたエントリをまだ有しない場合には、次に、これは、アドレスＸからのデータのキャッシュへの記憶が新たなエントリの割り当てを要求するであろうということを意味し、それは、攻撃者によってキャッシュ・タイミング・サイドチャネルを通じて検出されることが可能な異なるアドレスと関連するエントリの取り出しをトリガする可能性があり、よって、機密データに関する情報を露出させる危険にさらすことになり得る。したがって、この場合には、ステップ１２２で、ロード／記憶ユニット２６が、図５の行１から５に示されている応答動作の少なくとも１つを禁止する。代替的な実装例では、ステップ１２０が削除されることが可能であり、この場合には、投機制限とマークされているメモリ領域へのどのような投機的アクセスも、常に、ステップ１１６ではなく、ステップ１２２に進むことができる。ステップ１２２において投機制限タイプの領域への投機的アクセスに対してどの応答動作が禁止されるのかに応じて、いくつかの場合には、データが依然としてプロセッサに戻されることが可能であり得る。この場合、ステップ１１８で、現在の読み出しリクエストに応答するデータを用いてそれ以降の読み出しリクエストの提供が許可されることが、依然として許容され得る。たとえば、いくつかのサイクルのために先のロードされた値を保持するためのロード／記憶バッファが提供される場合には、次に、別のメモリ・トランザクションが発行されることを必要とせずに、対応するキャッシュ・ラインにそれ以降のロードを提供することが可能であり得る。
【００７８】
実施には、読み出しリクエストの取り扱いが、簡潔性のために図６には示されていないメモリ・アクセスの許可をチェックする追加的なステップを要求する場合も、あり得ることを理解されるであろう。
【００７９】
図７は、所与のソフトウェア・プロセスによって用いられるために割り当てられている領域に対して、メモリ・アクセスの許可とメモリ・タイプとを設定する責任を有するソフトウェアによって実行され得るメモリ割り当てのための方法を示す。たとえば、この方法は、オペレーティング・システムによって管理されるアプリケーションによって使用するためのメモリを割り当てるときに、オペレーティング・システムによって実行され得るし、又は、ハイパーバイザの下で実行しているオペレーティング・システムによって使用するためのメモリを割り当てるときに、ハイパーバイザによって実行され得る。ステップ１５０では、監督プロセスが、それが制御する所与のソフトウェア・プロセスによって用いられるための１つ又は複数のメモリ領域を割り当てる。ステップ１５２では、割り当てられた領域のそれぞれに対し、監督プロセスが、その領域に対して指定される領域タイプを選択する。投機サイドチャネル攻撃の危険がある領域は、投機制限領域タイプとして設定されることが可能であり、これは、上で論じられたように、これらの領域がデバイス・タイプとしてマークされた場合と同様に、パフォーマンスを害することなく、キャッシュ・タイミング・サイド・チャネルを通じて情報が露出することに対して、そのような領域を保護する傾向がある。たとえば、メモリを割り当てるソフトウェアは、どの領域が保護されることを必要とする機密データのために用いられる蓋然性が高いのかを示す注釈へのアクセスを有することができるし、投機制限タイプの領域を適切なものとして選択することができる。或いは、いくつかの場合に、ソフトウェアが一般的に機密性が高いと考えられる場合には、次に、デバイス・タイプの領域以外の割り当てられた領域の全部を、通常タイプの代わりに投機制限タイプとしてマークすることが好ましいであろう。厳密にどの領域が投機制限としてマークされるべきであるかは、メモリが割り当てられている具体的なアプリケーションに左右され得るということを理解されるであろう。一般的に、投機制限領域タイプにアーキテクチャに関する及びマイクロアーキテクチャに関するサポートを提供することは、上で論じられたように通常及びデバイス・タイプとは区別されるが、セキュリティを強化するのに非常に有用であり得る。
【００８０】
図７のステップ１５４では、メモリ割り当てソフトウェアが、割り当てられた各領域に対して選択された領域タイプを示す属性データを記憶する。図３に示されているように、これは、割り当てられた領域に対してメモリ属性を定義するページ・テーブルの各ページ・テーブル・エントリの内部に特定されたタイプ・フィールドを含み得るし、又は、図４に示されているように、この属性データは、領域ごとに定義されたタイプ・フィールドに加えて、タイプ・フィールドがどのように解釈されるかを制御するグローバル属性５０も含み得る。
【００８１】
本出願では、装置の要素が定義された動作を実行できる構成を有することを意味するために、「〜するように構成される」という表現が用いられている。この文脈において、「構成」とは、ハードウェア又はソフトウェアの相互接続の配置又は態様を意味する。たとえば、装置が、定義された動作を提供する専用のハードウェアを有する場合があり得るし、又は、プロセッサ若しくは他の処理デバイスが、機能を実行するようにプログラムされていることがあり得る。「構成される」とは、装置の要素が、定義された動作を提供するために、どのような態様においても変更される必要があることは、含意しない。
【００８２】
本明細書では、本発明の例証のための実施例が、添付の図面を参照して、詳細に説明されてきたが、本発明はこれらのそのままの実施例に限定されることはなく、当業者によって、添付の特許請求の範囲によって定義される本発明の範囲及び思想から逸脱することなく、それらにおいて、様々な変更及び修正が行われ得ることが、理解されるべきである。
【図１】
2021525416.tif 000005
【図２】
2021525416.tif 000006
【図３】
2021525416.tif 000007
【図４】
2021525416.tif 000008
【図５】
2021525416.tif 000009
【図６】
2021525416.tif 000010
【図７】
2021525416.tif 000011
【国際調査報告】
2021525416.tif 000012
2021525416.tif 000013
2021525416.tif 000014