IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インテル・コーポレーションの特許一覧

特許7497806コンピュータシステムの投機的サイドチャネル分析に対する防御
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-06-03
(45)【発行日】2024-06-11
(54)【発明の名称】コンピュータシステムの投機的サイドチャネル分析に対する防御
(51)【国際特許分類】
   G06F 12/14 20060101AFI20240604BHJP
   G06F 12/1027 20160101ALI20240604BHJP
   G06F 12/1009 20160101ALI20240604BHJP
   G06F 12/0895 20160101ALI20240604BHJP
【FI】
G06F12/14 510A
G06F12/1027
G06F12/1009
G06F12/0895 100
【請求項の数】 20
(21)【出願番号】P 2020565409
(86)(22)【出願日】2019-12-02
(65)【公表番号】
(43)【公表日】2022-02-16
(86)【国際出願番号】 US2019063994
(87)【国際公開番号】W WO2020139517
(87)【国際公開日】2020-07-02
【審査請求日】2022-11-25
(31)【優先権主張番号】16/236,117
(32)【優先日】2018-12-28
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】ダーハム、デイビッド エム.
【審査官】上島 拓也
(56)【参考文献】
【文献】特開2017-167582(JP,A)
【文献】米国特許出願公開第2016/0092702(US,A1)
【文献】米国特許出願公開第2013/0111132(US,A1)
【文献】米国特許出願公開第2008/0133629(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/14
G06F 12/1027
G06F 12/1009
G06F 12/0895
(57)【特許請求の範囲】
【請求項1】
データオブジェクトに関連付けられ、第1メモリタグを有する第1アドレスを指定する命令を復号するデコーダと、
キャッシュと、
前記第1アドレスを、前記データオブジェクトのメモリ位置を識別する第2アドレスに変換するアドレス変換回路と、
前記第1メモリタグと、前記第2アドレスに関連付けられた第2メモリタグとを比較するコンパレータと、
前記メモリ位置に関連付けられたキャッシュミスを検出するキャッシュコントローラと、
前記コンパレータによる前記第1メモリタグと前記第2メモリタグとの一致の検出、および前記キャッシュコントローラによる前記キャッシュミスの検出に応じて、前記メモリ位置から前記キャッシュに前記データオブジェクトをロードするメモリコントローラと、を備えるプロセッサ。
【請求項2】
前記第1アドレスは仮想アドレスであり、前記第2アドレスは物理アドレスである、請求項1に記載のプロセッサ。
【請求項3】
前記コンパレータが前記第1メモリタグと前記第2メモリタグとの前記一致を検出するまで、前記メモリコントローラはさらに、前記メモリ位置に対応するキャッシュラインのロードを阻止する、請求項1または2に記載のプロセッサ。
【請求項4】
前記コンパレータが前記第1メモリタグと前記第2メモリタグとの不一致を検出したことに応じて、前記メモリコントローラはさらに、前記データオブジェクトを示さないデータを、前記メモリ位置に対応するキャッシュラインにロードする、請求項1から3のいずれか一項に記載のプロセッサ。
【請求項5】
前記第1メモリタグを提供するポインタセキュリティ回路をさらに備える、請求項1から4のいずれか一項に記載のプロセッサ。
【請求項6】
前記第1メモリタグに少なくとも部分的に基づいて、前記データオブジェクトを暗号保護する暗号化回路をさらに備える、請求項1から5のいずれか一項に記載のプロセッサ。
【請求項7】
前記第1メモリタグは、前記データオブジェクトの種類、機能、メモリ位置、または使用を識別する識別タグを含む、請求項1から6のいずれか一項に記載のプロセッサ。
【請求項8】
前記暗号化回路は、暗号化アルゴリズムへのtweak入力を少なくとも部分的に定義するために、前記メモリタグの少なくとも一部を使用する、請求項6に記載のプロセッサ。
【請求項9】
前記第1メモリタグは暗号化タグを含み、前記暗号化回路は前記暗号化タグを使用して、複数の暗号化鍵の1つを識別する、請求項6に記載のプロセッサ。
【請求項10】
前記第1メモリタグは、前記メモリ位置に関連付けられたキャッシュラインが複数のデータオブジェクトを含むかどうかを示す、小オブジェクトタグを含む、請求項1に記載のプロセッサ。
【請求項11】
前記小オブジェクトタグは、サブキャッシュライン粒度のメモリタギングを可能にする、請求項10に記載のプロセッサ。
【請求項12】
前記第1アドレスと、前記データオブジェクトの暗号化された値とに少なくとも部分的に基づいて、インテグリティチェック値を生成するインテグリティチェック回路をさらに備える、請求項1に記載のプロセッサ。
【請求項13】
前記インテグリティチェック値に少なくとも部分的に基づいて、前記第1アドレスの改ざんを検出するポインタセキュリティ回路をさらに備える、請求項12に記載のプロセッサ。
【請求項14】
前記デコーダは、ソフトウェアプログラムにメモリ領域を割り当てる第1命令と、前記データオブジェクトに関連付けられ、前記第1メモリタグを有する前記第1アドレスを指定する第2命令とを復号
前記プロセッサは、
前記メモリ領域に対して有効範囲を決定する範囲ルール回路と、
前記ソフトウェアプログラムにより、前記有効範囲内のアドレスを操作するのに使用される第1の数のアドレスビットと、アクセス許可を示すメモリタグを含む第2の数のアドレスビットとを決定するアドレス調整回路と、
前記アドレスと前記メモリタグとの少なくとも一部を暗号化して、前記ソフトウェアプログラムに戻す暗号化されたアドレスを生成する暗号化回路と
を備える請求項1から13のいずれか一項に記載のプロセッサ。
【請求項15】
前記デコーダはさらに、前記データオブジェクトに関連付けられた暗号化された前記第1アドレスを指定する第命令を復号し、前記プロセッサはさらに、前記暗号化された第1アドレスを解読して、解読されたアドレスと解読されたメモリタグとを生成する解読回路を備える、請求項14に記載のプロセッサ。
【請求項16】
データオブジェクトに関連付けられ、第1メモリタグを有する第1アドレスを指定する命令を復号する段階と、
前記第1アドレスを、前記データオブジェクトのメモリ位置を識別する第2アドレスに変換する段階と、
前記第1メモリタグと、前記第2アドレスに関連付けられた第2メモリタグとを比較する段階と、
前記メモリ位置に関連付けられたキャッシュミスを検出する段階と、
前記第1メモリタグと前記第2メモリタグとの一致の検出、および前記キャッシュミスの検出に応じて、前記メモリ位置からキャッシュに前記データオブジェクトをロードする段階と、を備える方法。
【請求項17】
前記第1アドレスは仮想アドレスであり、前記第2アドレスは物理アドレスである、請求項16に記載の方法。
【請求項18】
前記一致を検出するまで、前記メモリ位置に対応するキャッシュラインのロードを阻止する段階をさらに含む、請求項16または17に記載の方法。
【請求項19】
前記第1メモリタグと前記第2メモリタグとの不一致を検出したことに応じて、前記データオブジェクトを示さないデータを、前記メモリ位置に対応するキャッシュラインにロードする段階をさらに含む、請求項16から18のいずれか一項に記載の方法。
【請求項20】
暗号化されたアドレスを解読して、前記第1アドレスおよび前記第1メモリタグを提供する段階をさらに含む、請求項16から19のいずれか一項に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
発明の分野は概して、コンピュータに関し、より具体的にはコンピュータシステムセキュリティに関する。
【背景技術】
【0002】
コンピュータシステムは、敵対者による、機密、個人、または秘密の機密情報を取得する試みに対して脆弱となり得る。例えば、スペクターやメルトダウンなどの攻撃は、プロセッサの投機的およびアウトオブオーダ実行機能を利用して、サイドチャネル分析を通じて不正にデータを読み出すものである。
【図面の簡単な説明】
【0003】
本発明は、添付の図面の各図において限定ではなく例として示されており、これらの図面において、同様の参照符号は同様の要素を示している。
【0004】
図1A】本明細書に記載の実施形態の少なくとも1つによる、プロセッサのメモリ内にアドレスベースのセキュリティ機能を提供することで、プロセッサ内でサイドチャネル分析成功の可能性が低減し得る、コンピューティング環境のブロック図である。
【0005】
図1B】少なくとも1つの実施形態によるプロセッサのブロック図である。
【0006】
図2】少なくとも1つの実施形態による、サイドチャネル分析に対してメモリアドレスポインタを保護するのに使用され得る、メモリタグの実装の図である。
【0007】
図3】少なくとも1つの実施形態による、サイドチャネル分析に対する防御において、メモリタグを使用する方法のフロー図である。
【0008】
図4】少なくとも1つの実施形態による、サイドチャネル分析に対する防御における、メモリタグの使用のブロック図である。
【0009】
図5】少なくとも1つの実施形態による、識別タグ(例えば、カラータグ)が仮想メモリアドレス内の様々な位置に格納され得ることを示す、拡張仮想メモリアドレスのブロック図である。
【0010】
図6】少なくとも1つの実施形態によるプロセッサのブロック図である。
【0011】
図7】実施形態による、図6のセキュアメモリアクセスロジックの適用を示すコンピューティング環境の図を示す。
【0012】
図8A】コンピュータプログラムの実行時に、メモリ割り当てオペレーションを開始する方法の少なくとも1つの実施形態のフロー図である。
【0013】
図8B図8Aのメモリ割り当てオペレーションを継続する方法の少なくとも1つの実施形態のフロー図である。
【0014】
図9】間接アドレスにセキュリティを提供する方法の少なくとも1つの実施形態のフロー図である。
【0015】
図10】既にセキュアにされた間接アドレスを検証する方法の少なくとも1つの実施形態のフロー図である。
【0016】
図11】メモリタグがアドレスの暗号化部で暗号化される実施形態を示す。
【0017】
図12A】本発明の実施形態による、例示的なインオーダパイプライン、および例示的なレジスタリネーム、アウトオブオーダ発行/実行パイプラインの双方を図示するブロック図である。
【0018】
図12B】本発明の実施形態によるプロセッサに含まれる、例示的な実施形態のインオーダアーキテクチャ、および例示的なレジスタリネーム、アウトオブオーダ発行/実行アーキテクチャの双方を図示するブロック図である。
【0019】
図13】本発明の実施形態によるプロセッサに含まれ得る、例示的アウトオブオーダ発行/実行プロセッサコアのブロック図である。
【0020】
図14】は、本発明の複数の実施形態による、2以上のコアを有し得、統合メモリコントローラを有し得、また統合グラフィックスを有し得るプロセッサのブロック図である。
【0021】
図15】本発明の実施形態による、プロセッサに含まれ得る例示的な中央処理装置(CPU)複合体のブロック図である。
【0022】
図16】本発明の実施形態による、プロセッサに含まれ得る例示的なキャッシュ階層のブロック図である。
【0023】
図17~21は、例示的なコンピュータアーキテクチャのブロック図である。
【0024】
図17】本発明の一実施形態によるシステムのブロック図を示す。
【0025】
図18】本発明の実施形態による、本発明の実施形態に係る第1の具体的な例示的システムのブロック図である。
【0026】
図19】本発明の実施形態による第2のより具体的な例示的なシステムのブロック図である。
【0027】
図20】本発明の実施形態による、システムオンチップ(SoC)のブロック図である。
【0028】
図21】本発明の実施形態による、システムオンチップ(SoC)のブロック図である。
【0029】
図22】本発明の実施形態による、ソース命令セットのバイナリ命令を、ターゲット命令セットのバイナリ命令に変換するソフトウェア命令コンバータの使用と対比するブロック図である。
【発明を実施するための形態】
【0030】
以下の説明では、数多く具体的且つ詳細な内容を記載する。しかし、本発明の実施形態はこのような具体的且つ詳細な内容を利用することなく実施し得るものと理解されたい。また、公知の回路、構造および技術は、本明細書の理解をあいまいにしないよう、詳細な説明を省略した。
【0031】
本明細書中の「一実施形態」、「実施形態」、「例示的な実施形態」などの言及は、説明された実施形態は特定の機能、構造、または特徴を含み得るが、すべての実施形態がその特定の機能、構造または特徴を含んでいてもよいし、必ずしも含んでいなくてもよいことを示す。またこのような文言が必ずしも、同一の実施形態を指すとは限らない。さらに、機能、構造または特徴がある実施形態に関し説明された場合に、明示的な記載の有無に関わらず、このような機能、構造または特徴を他の実施形態に関し実効あらしめることは、当業者の知識の範囲内のものであると考えられる。
【0032】
多くのプロセッサおよびプロセッサコアは、キャッシュ、マルチスレッディング、アウトオブオーダ実行、分岐予測、および投機的実行などの機能をサポートすることで、性能向上を図っている。敵対者は、不正にデータを読み出すため、これらプロセッサの機能を利用する方法を見つけてきた。
【0033】
例えば、敵対者は意図的にデータ(例えば、秘密データ)を、それが読み出し可能でないはずのメモリ位置(例えば、境界外)から読み出そうと試み得る。読み出しは、アクセスが境界外であるか判定されるまで、投機的に実行され続けることが可能であり得る。判定が出るまで、結果を一切コミットしないことにより、システムの構造的適切性が保証され得る。しかし、投機的実行により、判定が出る前に、プロセッサのマイクロアーキテクチャの状態が変化し得る。そして敵対者はこのプロセッサのマイクロアーキテクチャの状態の変化より、秘密データの値を推測するように、サイドチャネル分析を実行可能であり得る。この種の投機的攻撃としては、多くのバリエーションがあり得る。一つのシナリオにおいて、敵対者はメモリアドレスの一部を投機的に秘密データとして使用し、タイミング分析を利用して、キャッシュにロードされているメモリ位置を判定することで、値を推測し得る。
【0034】
より具体的な例として、64ビットのキャッシュラインサイズの場合、メモリアドレスの最下位6ビットに対するいかなる変化も、アドレスの異なるキャッシュライン参照を生じることはないが、最下位から7番目のビットへの変化は、アドレスの異なるキャッシュライン参照を生じる。したがって、敵対者は繰り返し(例えばノイズを除去するため、および/または統計的に有意な結果を得るため)、キャッシュのフラッシュおよび/またはフィルを行って、既知または予測可能な状態を実現し、投機的フローを使用してプロセッサに秘密データに投機的にアクセスさせ、レジスタに格納された既知のメモリアドレスの最下位から7番目のビットに秘密データのビットを投機的に適用し(例えば、シフト、および/またはその他ビット操作命令を利用)、操作されたメモリアドレスで自身のメモリスペースに投機的にアクセスし、タイミングサイドチャネル分析により新たなキャッシュラインがロードされたかを判定し、既知のメモリアドレスの最下位から7番目のビットの値と、秘密ビットの値が同じか、異なるかを推測し得る。
【0035】
本発明の実施形態は、様々な理由で、様々なコンピュータシステムに利用されることが望ましく成り得る機能または特徴を提供する、システム、方法、および装置を含む。当該理由としては、投機的サイドチャネル分析に基づく攻撃への脆弱性を低減、性能などに関して別のアプローチと比較して低コストで当該分析に対する脆弱性を低減する、および/またはセキュリティ全般向上を含む。実施形態は、投機的にバイパス不能でありながら、投機的使用を不能にすることはないため、投機的性能の向上を維持するような、細粒度メモリアクセス制御機構またはその組合せを提供する。例えば、前段落に記載したような種類の分析から防御するため、実施形態はメモリタギング技術および/またはアドレス符号化/暗号化を提供する。これらはそれぞれ、後述のように、敵対者による、秘密データについての情報を、それをメモリアドレスなどとして投機的に利用する、および/または有効性、セキュリティ、またはその他の目的のために定義された境界外のメモリ位置にアクセスすることを試みて推測する行為の効果を限定する。
【0036】
実施形態は、以下の任意のもの、および/または任意の組合せ(それぞれさらに後述され得る)を含み得る。「識別/インテグリティタギング」インラインタグ情報がプロセッサまたはメモリコントローラに、データアクセスと共に利用可能となる。これにより、投機的メモリアクセスが不正で、停止または阻害されるべきであるかをプロセッサが即把握する。「メモリタグ暗号化」適切なデータ解読が、適切なタグ値(鍵)の認識に基づく。したがって、不正な暗号化タグ(鍵識別子)による推測は、無効な暗号化テキストのみがサイドチャネル敵対者に伝わることとなり、所定のアドレスについて秘密データが開示されない。「暗号ポインタ」(例えばmallocを介して)割り当てた、サイドチャネル敵対者により利用可能なポインタが、アドレス破損が生じることなくその境界外で使用することができなくなる。したがって、サイドチャネル敵対者が当該ポインタをサイドチャネル分析のために、目的とした既知のメモリ位置に使用することがそもそもできなくなる(通常、破損した仮想アドレスは割り当てられていない仮想メモリに終着し、ページフォールトが生じるため、プロセッサもそれを確認する)。「技術の組合せ」暗号ポインタがタグ情報を含む(アドレスのタグ部分も、実際の位置のアドレス情報と共に暗号化される)。これにより、サイドチャネル敵対者はメモリを対象にすることも、独立的にタグ情報を選択することもできない。したがって、一方または他方の修正が両方の破損を生じ、サイドチャネル分析の観点から、完全に意味消失が起きる。「カウンタ」投機的メモリアクセス制御違反をカウントする。これにより、敵対者が推測失敗を継続すると、プロセッサは特定の閾値を超えた処理を終了し得る。それに続き、OSが修正動作を行い得る。
[メモリタギング技術]
【0037】
開示の実施形態は、既存のおよびあり得るコンピュータシステムセキュリティ脆弱性に対処するメモリタギング回路および技術を含む。メモリタギング回路は、メモリポインタ(参照)が投機的に有効境界を越えて使用されるのを阻止する、ポインタによる誤った(不正な)データオブジェクトへのアクセスを生じるメモリポインタ操作(例えば、値の追加による)を阻止する、キャッシュ内のバイトレベルのタギングが含まれるように、メモリタギングの粒度を上げるように構成され得る。メモリタギング回路はさらに、メモリの部分(例えばワード)をタギングすることで、信頼できないコードをサンドボックスするように構成され得る。これにより、メモリのタギングされた部分が保護されたポインタを含んだ場合、それが示される。メモリタギング回路は、プロセッサに投機的オペレーションを実行しつづけさせ、および実行による利益を享受させ続けながら、セキュリティ機能を提供する。
【0038】
図1Aは、本開示の実施形態に合わせた、プロセッサのメモリ内にアドレスベースのセキュリティ機能を提供することで、サイドチャネル分析成功の可能性が低減し得る、コンピューティング環境100のブロック図である。コンピューティング環境100は、サイドチャネル分析成功の可能性を低減しながら、同時にプロセッサにある実施形態に係る投機的オペレーションの実行並びに、その実行による利益を享受可能とするシステム104を含む。図1Aは、1または複数のネットワーク106または1または複数の物理接続108を通じてシステム104に接続された敵対者102を示す。敵対者102は、ネットワーク106および/または物理接続108を通じて、システム104に1または複数のサイドチャネル分析110を実行し得る。システム104は、1または複数の様々なコンピューテイングデバイスを含み得る。当該コンピューテイングデバイスは、パーソナルコンピュータ、サーバ、ノートパソコン、タブレット、ファブレット、スマートフォン、マザーボード、チップセット、またはその他いくつかのコンピューテイングデバイスを含むが、これらに限定はされない。システム104は、様々なアドレスベースセキュリティ機能を用いて、サイドチャネル分析からプロセッサを保護するように構成される。当該機能は、プロセッサに、投機的オペレーションを実行しながら、安全に動作することを可能とする。換言すると、プロセッサおよび/または関連するハードウェアに、プロセッサに安全な推測を可能とする追加(アクセス制御)情報に対する、同時アクセス(投機的データアクセスと同時に利用可能であることを意味する)が提供される。
【0039】
敵対者102は、1または複数のサイドチャネル分析(例えば、スペクター)をシステム104に関して、またはシステム104に対して試み得る、コンピュータシステム、人、またはコンピュータシステムと人の組合せであり得る。敵対者102は、1または複数のネットワーク106を利用して、サイドチャネル分析110を実行し得る。敵対者102はさらに、メモリインターポーザ、メモリプローブなどの1または複数の物理接続108も利用して、システム104内の1または複数のメモリアドレスに読み出し、修正、および/または書き込みを実行し得る。いくつかのサイドチャネル分析110は、ポインタを使用して許容されたメモリ境界を超えたデータに対する投機的アクセスを試みること、ポインタの操作(例えば、ポインタが意図しないオブジェクトを示すように、ポインタに値を足す)を試みることなどを含み得る。
【0040】
システム104は、サイドチャネル分析110からの保護のため、様々なメモリベースのセキュリティ機能を提供するように構成される。システム104は、1または複数の通信チャネル116を通じて、メモリ114に接続される、プロセッサ112を含む。プロセッサ112は、プロセッサコア118、キャッシュ120、暗号化回路122、インテグリティチェック回路124、およびメモリコントローラ170を含み得る。プロセッサ112はさらに、メモリタグ機能を拡張し、ポインタ上書き攻撃を低減または防止し、ポインタ操作を低減または防止し、プロセッサ112にバイト粒度メモリ安全性を可能にするように構成されたポインタセキュリティ回路126を含む。
【0041】
プロセッサ112は、現在利用可能、および/または将来的に開発される、シングルまたはマルチコアプロセッシングユニットを任意の数、および/または組み合わせて含み得る。実施形態において、プロセッサ112は、Intel(登録商標)(カリフォルニア州サンタクララ市のIntel Corporation)から入手可能であるCore(登録商標)i3、i5、i7、2 DuoおよびQuad、Xeon(登録商標)、Itanium(登録商標)、Atom(登録商標)、またはQuark(登録商標)マイクロプロセッサなどの汎用プロセッサであるか、それを含み得る。あるいは、プロセッサ112は、アドバンスト・マイクロ・デバイセズ(AMD(登録商標),Inc)ARM Holdings(登録商標),Ltd、MIPS(登録商標)などの他のメーカーまたは企業製の1または複数のプロセッサであるか、それを含み得る。プロセッサ112は、例えばネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、コプロセッサ、埋め込みプロセッサなどの特定用途向けプロセッサであるか、それを含み得る。プロセッサ112は、単一の半導体ダイまたはパッケージ、あるいは、積層などで相互接続された半導体ダイおよび/またはパッケージの組合せとして実装され得る。プロセッサ112は、例えば、BiCMOS、CMOS、またはNMOSなどのいくつかのプロセス技術のいずれかを使用して、1または複数の基板の一部であってよく、および/またはそれらの上に実装されてよい。
【0042】
メモリ114は、実施形態による、システム104内で使用され得る、1または複数の様々な種類のメモリである。メモリ114は、揮発性メモリ、非揮発性メモリ、または揮発性メモリと非揮発性メモリの組合せであり得る。揮発性メモリは、様々な種類のランダムアクセスメモリ(RAM)を含み得る。非揮発性メモリは、NANDメモリ、3Dクロスポイント(3DXP)、相変化メモリ(PCM)、ハードディスクドライブなどを含み得る。
【0043】
プロセッサ112は、実施形態により、メモリコントローラ170を使用して、プロセッサ112と、メモリ114との間でデータをやり取りし得る。例えば、1または複数のソフトウェアプログラムを実行しながら、または様々な命令を実行しながら、プロセッサコア118は新たなデータ128を生成し得る。プロセッサコア118は、新たなデータ128の仮想アドレス(またはリニアアドレス)130を使用して、新たなデータ128をキャッシュ120またはメモリ114に書き込み得る。新たなデータ128は、キャッシュデータ132としてキャッシュ120に保存されてもよいし、既存のキャッシュデータ132に加えられてもよい。キャッシュデータ132は物理アドレス134を有し得る。プロセッサ112は、暗号化回路122および暗号化アルゴリズム136を使用して、新たなデータ128および/またはキャッシュデータ132がメモリ回路114に格納データ138として格納される前に、新たなデータ128および/またはキャッシュデータ132を暗号化するように構成され得る。ただし、格納データ138は、暗号化されなくてよく、暗号化されたデータ、暗号化されていないデータ、または暗号化されたおよび暗号化されていないデータの任意の組合せを含み得る。プロセッサ112はさらに、インテグリティチェック回路124を使用して、新たなデータ128、仮想アドレス130、キャッシュデータ132、および/または物理アドレス134に基づいて、インテグリティチェック値140を生成し得る。メモリコントローラ170は、プロセッサによる鍵識別子(鍵ID)に基づいて、メモリ114にインテグリティチェック値を書き込んでよく(格納データ138の破損検出を容易にするため)、および/またはメモリコントローラ170は、プロセッサが識別した鍵を使用して、メモリに書き込むデータを暗号化してよい(例えば、物理アドレス内で鍵識別子を指定することによる)。
【0044】
プロセッサ112は、ポインタセキュリティ回路126を利用して、システム104内のデータに対してセキュリティを提供してよい。ポインタセキュリティ回路126は、本明細書に開示の様々な実施形態により、仮想アドレス130および/または物理アドレス134が上書きされた場合を検出し、仮想アドレス130および/または物理アドレス134が操作された場合を検出し、バイト粒度メモリ安全性を提供し、および/またはメモリタグの利用を提供するように構成され得る。図2、4、5は、様々な実施形態による、サイドチャネル分析110からシステム104を保護するために、ポインタセキュリティ回路126によって識別、定義、および/または適用され得る様々な例示的メモリタグ構成を示す。
【0045】
プロセッサコア118が仮想アドレス130を新たなデータ128に割り当てると(例えば、ソフトウェアプログラムを実行することによる)、ポインタセキュリティ回路126は、仮想アドレス130内に、新たなデータ128に関連付けて、1または複数のメモリタグ142Aを定義、挿入、または識別し得る。これにより、サイドチャネル分析成功の可能性を低減する。1または複数のメモリタグ142Aは、識別タグ144および/または暗号化タグ146を含み得る。いくつかの実施形態において、タグはそのデータをメモリに書き込むソフトウェアにより選択され得る。ソフトウェア(例えば、malloc等のメモリ割り当て機能)は、タグ値を選択し、それを仮想(リニア)アドレスに挿入し得る。ハードウェアはそのタグ値を解釈するか、それを符号化または変換し、および/またはそれを物理アドレスに渡し得る。
【0046】
新たなデータ128に対する仮想アドレス130は、新たなデータ128にアクセス制御を提供するために、識別タグ144を含み得る。識別タグ144は、カラー、暗号カラー、メモリカラー、タグカラー、鍵IDなどと呼ばれ得る。ポインタセキュリティ回路126は、仮想アドレス130内のどこに識別タグ144が存在するか、定義されるかを定義するように構成され得る。例えば、ポインタセキュリティ回路126は、識別タグ144を、仮想アドレス130内の最上位8ビットとして定義し得る。例えば識別タグ144は、例えば仮想アドレス130の長さが64ビットであると仮定して、仮想アドレス130の0~63ビットのうち、56~62ビット(即ち7ビット)として定義され得る。他の実施形態は、より大きいまたは小さいタグサイズ、および/またはより大きいまたは小さい仮想アドレスサイズ(例えば128ビット)を使用し得る。
【0047】
ポインタセキュリティ回路126は、新たなデータ128にセキュリティを提供するために、様々な方法で識別タグ144を使用し得る。例えば、ポインタセキュリティ回路126は、暗号化アルゴリズム136において、識別タグ144をtweakまたはtweakの一部として利用し得る(例えば、平文データに加えた、異なるtweak値に対して異なる暗号化テキストデータとなるデータ暗号への入力)。実施形態において、識別タグ144は、新たなデータ128を暗号化する際に、暗号化アルゴリズム136により利用され得るtweakを定義するため、仮想アドレス130のサブセットに組み合わされる。
【0048】
新たなデータ128に対する仮想アドレス130は、新たなデータ128にセキュリティを提供するために、暗号化タグ146を含み得る。ポインタセキュリティ回路126は、仮想アドレス130内のどこに暗号化タグ146が存在するか、または定義されるかを定義するように構成され得る。例えば、ポインタセキュリティ回路126は、暗号化タグ146を仮想アドレス130内の最上位3ビットとして定義し得る。例えば、暗号化タグ146は、例えば仮想アドレス130の長さが64ビットであると仮定して、仮想アドレス130の0~63ビットの、59~62ビット(即ち4ビット)として定義され得る。暗号化タグ146は、暗号化回路122により鍵テーブル156内で暗号化鍵154を検索するのに使用される、鍵ID152の表現であり得る。暗号化タグ146は、上記に加えて、または代えて、他の技術を使用して識別され得る。例えば、物理アドレス134内の1または複数のビット内で定義され得る。鍵IDが、メモリ暗号化回路に伝達され得るように、仮想アドレスから物理アドレスへとコピーまたは変換され得る。実施形態は、投機的サイドチャネル分析に対する防御に寄与するように、鍵IDの利用を提供するものであり得る。即ち、誤ったメモリ暗号化タグが使用されると、データは開示されない(ランダムビットに解読される)。したがって、サイドチャネル分析を実行する敵対者に対し、このランダムデータに基づく推測により機密が開示されることは一切ない。
【0049】
ポインタセキュリティ回路126はさらに、少なくとも部分的にタグ定義160を提供するポインタセキュリティ命令158を含み得る。ポインタセキュリティ命令158はさらに、タグ定義160に応じてポインタを追加するために、ポインタセキュリティ回路126またはプロセッサ112により使用され得る命令またはオペレーションを含み得る。タグ定義160は、1または複数の識別タグ144および/または暗号化タグ146の長さ、位置、および使用のうちの1または複数を定義し得る。実施形態において、命令はメモリ内に対応するタグ値を設定し、および/またはメモリからタグ値を読み出すのに使用され得、特権的ソフトウェア(例えば、OSカーネルまたはVMM)による使用に限定され得る。
【0050】
ポインタセキュリティ回路126は、ポインタメタデータテーブル162を使用して、メモリタグ142Eおよび/またはタグ定義160を格納、更新、および取得し得る。
【0051】
プロセッサ112が、物理アドレス134により新たなデータ128をキャッシュデータ132に書き込むと、ポインタセキュリティ回路126は、物理アドレス134内に、キャッシュデータ132に関連付けて、1または複数のメモリタグ142Bを定義、挿入、または識別し得る。これにより、サイドチャネル分析成功の可能性を低減する。物理アドレス134内に埋め込まれた1または複数のメモリタグ142Bは、識別タグ144および/または暗号化タグ146の1または複数を含み得る。物理アドレス134は、仮想アドレス130で使用される、またはこれに関連付けられるものと比較して、メモリタグ142Bをより少なく、より多く、またはその異なる部分を含み得る。
【0052】
投機的攻撃阻止のため、書き込まれるデータを「所有する」ソフトウェア機能がメモリ書き込みを実行するため、書き込みは関連する識別タグ(例えば、オーナーシップ用書き込み、またはマイデータマイタグ)を割り当て得、タグ割り当てはデータの書き込みに使用される、対応する仮想(リニア)アドレスに適用されたソフトウェアフローと共に開始する。ハードウェアは、タグ値に基づく、読み出しメモリアクセス制御実行を担う。識別タグのシナリオでは、ハードウェアはデータで元々書き込まれたタグ値を、メモリアクセス要求(メモリロード)のアドレスにおけるタグ値と比較している。タグが一致すると、メモリアクセスは次に進み得る(要求元は使用する正しい識別タグ値を把握している)。同様に、暗号化タグについて、要求元は使用する正しい鍵を把握している(データをメモリに書き込む際に暗号化に使用した鍵)。
【0053】
図1Bは、図1Aのプロセッサ112のブロック図であり、ある実施形態による、プロセッサコア118と、キャッシュ120と、ポインタメタデータテーブル162と、メモリコントローラ170のさらなる詳細とを示す。 タグ検索回路172は、図3の方法300のように、実施形態により、物理アドレスに関連付けられたメモリタグを検索し得る。タグ比較回路174は、図3の方法300のように、実施形態により、物理アドレス134に関連付けられたメモリタグを、仮想アドレス130に関連付けられたメモリタグと比較し得る。メモリ制御回路178は、任意のアプローチにしたがって、メモリ制御オペレーションを実行する任意のその他回路であり得る。
【0054】
図2は、ある実施形態による、サイドチャネル分析に対してメモリアドレスポインタを保護するのに使用され得る、メモリタグの実装のメモリアドレス変換ダイアグラム200を示す。メモリアドレス変換ダイアグラム200は、1または複数のビット(例えば、非カノニカルビット)を占める識別タグ204と、拡張仮想アドレス202のサブセットを占める仮想アドレス206と、含む拡張仮想アドレス(またはリニアアドレス)202を示す。拡張仮想アドレス202は64ビットであり得る。識別タグ204は、1または複数の最上位ビットまたは、拡張仮想アドレス202内のその他ビットを占め得る。仮想アドレス206は、図示のとおりトランスレーションルックアサイドバッファ(TLB)210を通じて、またはページテーブルウォークにより物理アドレス208に変換される。識別タグ204は物理アドレス208に添付される。物理アドレス208と識別タグ204とは、後述のように、暗号化アルゴリズムに適用される暗号化tweak212を形成または定義するように組み合わされ得る。暗号化タグ214は、識別タグ204および物理アドレス208に添付され得る。これにより、鍵テーブル156を通じて1または複数の暗号化鍵が識別される(図1Aに示す)。識別タグ204、物理アドレス208、および暗号化タグ214は、キャッシュライン物理アドレス216を定義するように組み合わされ得る。ビット位置および/またはタグサイズは実施形態間で異なり得る。タグサイズが大きくなる程、取り得るタグ値が多くなり、敵対者が推測することが困難となる。
【0055】
実施形態において、メモリアドレス変換ダイアグラム200に示すメモリタグアーキテクチャは、識別タグ204および/または暗号化タグ214の異なるサイズを採用し得る。これにより、特定のメモリアドレスポインタおよび/または特定のオブジェクトにどのメモリタグ(例えば、識別タグ204および/または暗号化タグ214)が関連付けられているかの推測の困難度が調整される。
【0056】
メモリタギングは、物理アドレスビット(またはその他キャッシュメタデータ)がタグビットを保持する(例えば、鍵識別子鍵IDまたは鍵ドメイン)、マルチキートータルメモリ暗号化(MKTME)にも同様に作用する。タグを選択するソフトウェア(例えば、glibcにおけるmallocなどのメモリ割り当てライブラリ)は、非カノニカルビットをタグ値に設定することで、リニアアドレススペース内のタグビットを選択し得る。ハードウェアは、これら変換用のページング構造をバイパス可能である。これにより、リニアアドレスが物理アドレス内にタグビットを直接設定可能となる。実施形態は、ロードオペレーション時に、外部メモリとプロセッサキャッシュとの間でタグメタデータを確認することを含み得る。これにより、キャッシュ内容が影響を受ける前にタグを確認および検証できるので、サイドチャネル防御機構が提供される。本明細書に記載のタギングオペレーションは、「メモリコントローラ」または「メモリタグコントローラ」と呼ばれ得、より一般的にはメモリコントローラサブシステムハードウェアと呼ばれる、実施形態により、キャッシュラインデータタギングを扱うため、潜在的にメモリサブシステムの様々な位置に配置され得るハードウェアにより実行され得る。
【0057】
図3は、本発明のある実施形態による、ロードオペレーションを実行する方法300のフロー図を示す。実施形態において、方法300は、メモリコントローラまたはその他メモリ実行回路により実行され得る。したがって、方法300は、ハードウェア回路、ファームウェア、ソフトウェア、および/またはその組合せにより実行され得る。
【0058】
図示のように、方法300は、メモリ内のデータラインに対するタグ情報を含むロード要求の受信で開始する(ブロック310)。このロード要求は、任意の所定のコンポーネントからの、データラインから少なくとも1つのデータスロットを読み出すための要求であり得る。実施形態において、このデータ要求は、ロード要求のアドレスの非カノニカル部分内に含まれるタグ識別子を含み得る。このロード要求に応じて、メモリコントローラはロード要求をメモリに送信する(ブロック320)。このロードオペレーションに対して、メモリコントローラは、メモリから、要求されたアドレスに対するデータと共に、メモリラインに関連付けられたメタデータに含まれたタグを受信し得る(ブロック330)。メモリコントローラは(例えば、メモリコントローラ170内のタグ比較回路174により)、タグ情報の1または複数のタグが、メモリ要求のアドレスのタグに一致するかを判定し得る(菱形340)。する場合、例えば、データスロットのような1または複数の部分は、タグ識別子そのものを例えばキャッシュラインのメタデータ内に格納することと共に、キャッシュラインに格納され得る。
【0059】
ロード上で一致するタグが見つからなかった場合、制御はブロック360に移る。ここで、メモリコントローラは、実施形態において、キャッシュラインのロードを阻止し得、または別の実施形態では、キャッシュラインをランダムまたはゴミデータ(即ち、メモリ内の対応する物理アドレスに格納されたデータを示さない)と共にロードし得る。これにより、識別タグが一致したかを開示しないことで、識別タグ値を推定しようとする敵対者に対して、防御となり得る。
【0060】
ここで図4を参照すると、プロセッサ(CPU)410と、関連付けられたメモリ(DRAM)460とを含む、システム400の高レベル構成が示される。図示のように、ロードまたは読み出し要求が生成されたと仮定する。ソフトウェアは、64ビットリニアアドレス420を使用して、読み出すデータを要求し得る。これは図示のとおり、最下位部分422(例えば、キャッシュライン内のバイトを識別するための6ビット)と、キャッシュラインを識別するための別の部分424と、ページ位置を識別するリニアアドレス部分425と、例えば設定されると、要求がキャッシュライン幅未満に対するものであるかを識別する小オブジェクトビットのような、小オブジェクトインジケータ426を含む様々な部分を含む。例えば、この小オブジェクトアドレスビットは、ヒープの小オブジェクト領域の一部であるページに対応する、ページテーブルエントリにより設定され得る。さらに図示のとおり、アドレスの非カノニカル部分は、本明細書に記載のようなタグ428を含み得る。リニアアドレス部分425は、メモリ物理アドレス442を取得するため、ページテーブルおよびTLBキャッシュ構造430内で検索を実行するために使用され得ることに留意されたい。この物理アドレスは、図4にさらに示されるメモリライン466に対応すると仮定する。メモリライン466は、ECC(またはテーブル内)メモリ468に格納された対応するタグ4680~3をそれぞれ有する4つの16Bスロット(スロット0~スロット3)を含む。
【0061】
これら格納されたタグのそれぞれが異なるタグ識別子値である場合、各スロットが異なるタグに関連付けられていることを意味する。したがって、図4にさらに示すように、キャッシュ445にロードおよび格納されると、各スロットは、対応するタグ識別子448がキャッシュラインに対するPAアドレス内にある状態で、異なるキャッシュライン内に格納され得る(例えば、図示のようにキャッシュラインの右手側)。したがって、図4に図示するように、タグ識別子4680~4683がそれぞれ異なる値を含み(即ち、値1~4)、メモリライン466内のそれぞれ対応するデータスロットが、それぞれ異なるキャッシュライン446内に格納され得る。キャッシュライン446はそれぞれ、キャッシュライン関連付けられたキャッシュ445のアドレスまたはメタデータ部分内のその対応するタグ識別子と関連付けられて格納される。
【0062】
さらに図示のように、ロードについて実行されるメモリコントローラオペレーションが示される。勿論、別の場合では、この(メモリタグコントローラ)機能は、例えば、L2キャッシュおよびLLC間、またはL1およびL2キャッシュ間など、任意のキャッシュ層間で実行され得る。図示のように、メモリコントローラ450は、アドレスのタグが、メモリから取得されたタグ情報内の識別されたタグの任意のものに一致するか判定してよい(菱形452)。する場合、さらに小アドレスオブジェクトインジケータが設定されているかも判定してよい(菱形456)。されている場合、メモリコントローラ450は、一致したタグに関連付けられたデータスロットを、図示のように右手側に整列した所定のキャッシュラインに格納させてよい。読み出すまたは書き込む次のバイトが、キャッシュラインの末尾を超えると、越境検出によるキャッシュライン内のデータシフトが生じ得る。そして、アンダーフロー読み出しまたはオーバーフロー読み出しエラーを検出することを望むのかに応じて、データはキャッシュラインの先頭または末尾のいずれかに整列/シフトされ得ることに留意されたい。ユースケースに応じて、データスロットは、一方端または他端にシフトされ得る。例えば、スタック利用に対しては、最上位側へのシフトであってよい。キャッシュラインの端に全てのデータをプッシュすることでオーバーフローが生じると、もう1つのバイトがバッファの端を超えてウォークし、別のキャッシュラインが読み出される。このようにしてバイト粒度でバッファオーバーフローが検出され得る。この後続の隣接するキャッシュライン読み出しが生じると、これは隣接するキャッシュライン用のメモリコントローラに提供される。メモリコントローラはタグが前回のものと一致しないと判定し、したがって、違反を検出する。特定のキャッシュラインについて、シフトがどの方向に起こるかは、(例えば、ECC)メモリ内に格納されたタグ設定の一部として設定され得るか、シフトオペレーションの予期された方向を示す小オブジェクトインジケータビットと同様の別のアドレスビットで示され得る。
【0063】
アドレスのタグが、メモリロードのメモリから受信したタグ識別子のいずれにも一致しない場合、メモリコントローラ450は、実施形態において、キャッシュラインのロードを阻止し得、または別の実施形態では、キャッシュラインをランダムまたはゴミデータ(即ち、メモリ内の対応する物理アドレスに格納されたデータを示さない)と共にロードし得る。これにより、識別タグが一致したかを開示しないことで、識別タグ値を推測しようとする敵対者に対して、防御となり得る。
【0064】
図5は、識別タグ504(例えば、カラータグ)が仮想メモリアドレス内の様々な位置に格納され得ることを示す、拡張仮想メモリアドレス502のブロック図500を示す。識別タグ504は、仮想メモリアドレス502内の1または複数のビットを占め得る。したがって、仮想メモリアドレス502は、識別タグ504の上の1または複数のビットと、識別タグおよび物理アドレス内に(例えばトランスレーションルックアサイドバッファを通じて)変換される仮想メモリアドレスの部分の間の1または複数のビットとを含む。
[アドレス符号化/暗号化]
【0065】
図1Aに戻ると、プロセッサ112は、例えば暗号化回路122を使用して、新たなデータ128、キャッシュデータ132、および/または格納データ138を解読することに加えてまたは代えて、仮想/リニアアドレス(例えば、仮想アドレス130)、その任意の部分、任意のその他アドレス(直接または間接)、および/またはその任意の部分を符号化および解読するように構成され得る。
【0066】
図6は、図1Aおよび図1Bのプロセッサ112の別の表現を示すブロック図である。同図は、仮想アドレスが符号化され得るある実施形態により、プロセッサコア118、キャッシュ120、およびセキュアメモリアクセス回路600を示す。セキュアメモリアクセス回路600は、図1Aに示す暗号化回路122により示すような暗号化回路を使用するか含み得、またはその他暗号化回路を使用または含み得るが、便宜上、暗号化回路658および解読回路654を含むように示されている。
【0067】
実施形態において、セキュアメモリアクセス回路600は、アドレス(例えば、仮想アドレス130)についてのメタデータを利用する。このメタデータはメモリタグビット(例えばメモリタグ142A)、またはアドレス内のまたはアドレスに関連付けられたその他ビット(例えば、64ビットアドレスの非カノニカルビット、または対応するアドレス範囲の上位ビットメタデータの格納に使用され得るように、例えばオペレーティングシステムが確保していたアドレスの範囲)に符号化される。これにより、アドレスが示すメモリ位置へのアクセス制御を保証、および/または提供する。例えば、セキュアメモリアクセス回路600が提供するメタデータ符号化および復号は、バッファオーバーフローを生じるようにアドレスが操作されることを阻止し得、および/またはアクセス許可のないメモリに、プログラムコードがアクセスすることを阻止し得る。
【0068】
実施形態において、セキュアメモリアクセス回路600は、任意の複数の異なる方法により、メモリが実行中のプログラムに割り当てられ(例えば、オペレーティングシステムにより、ヒープにおいて)提供されると、呼び出され得るアドレス符号化回路652を含む。当該方法は、malloc、alloc、またはnewなどの機能を使用する、またはローダを使用して明示的に、またはコンパイラにより静的にメモリを割り当てるなどを含む。この結果、割り当てられたメモリを示す、符号化アドレスが、アドレスメタデータにより符号化される。
【0069】
アドレスメタデータは有効範囲メタデータを含み得る。有効範囲メタデータは、実行中のプログラムに有効範囲(例えば、ポインタの平文部分にポインタ演算を実行することによる)内のアドレスの値を操作可能にし得る。一方で、有効範囲を超えるアドレスを使用したメモリへのアクセスの場合にアドレスを破損し得る(例えば、暗号に入力するtweakの一部として使用されるポインタの暗号化テキスト部分、またはポインタのその他ビットに影響することによる)。さらに/あるいは、有効範囲メタデータは例えば、プログラムコードがアクセス許可された、メモリの範囲である有効コード範囲を識別するために使用され得る(例えば、レジスタ上の明示的範囲の設定に使用され得る、符号化範囲情報)。アドレスメタデータ内で符号化され得るその他情報は、アドレスに対するアクセス規制を含む(例えば、アドレスが参照メモリに対する書き込み、実行、または読み出しのみに使用され得るか)。
【0070】
実施形態において、セキュアメモリアクセス回路600は、メモリに対して値の読み出しまたは書き込みを実行するために汎用レジスタがメモリアドレスとして使用される、MOVなどのプロセッサ命令を利用したメモリ読み出しおよび書き込み(例えば、ロード/格納)オペレーション時、ならびにメモリの「使用」(制御移行命令、例えば、CALL/JMPなど)および/またはメモリオペランドを取得可能な任意の命令を伴うその他オペレーション時の符号化メタデータを検証するために呼び出され得る、アドレス復号回路662を含む。メモリアクセスに使用される間接(例えば、符号化仮想/リニア)メモリアドレスは、正しい仮想/リニアメモリアドレスを得るために、プロセッサにより最初に復号および/または解読される。
【0071】
実施形態において、メモリ割り当てオペレーション(例えば、「malloc」)時(または中)、メモリ割り当て回路(例えば、システムメモリ内の特権的システムコンポーネント内のメモリ管理コード)は、バッファに対してメモリの範囲を割り当て、アドレスと対応するメタデータ(例えば、範囲および/または許可メタデータ)を戻し得る。例えば、メモリ割り当て回路は、アドレス内の平文範囲情報を符号化し得(例えば暗号化前の、未使用/非カノニカルビットにおける)、または1または複数の別個のパラメータとしてメタデータを命令に供給し得る。ここで、パラメータ(複数可)が、範囲および/またはコード許可情報を指定する。このように、ある実施形態により、メモリ割り当て回路はアドレス符号化回路652を呼び出し得る。アドレス符号化回路652は、後述のようにアドレスをメタデータ(例えば、範囲および/または許可メタデータ)および「調整」により符号化する、範囲ルール回路654およびアドレス調整回路656を含む。アドレス符号化回路652は、アドレスの未使用部分(例えば、64ビットアドレスの非カノニカルビット)にメタデータを格納し得る。
【0072】
有効範囲メタデータを決めるため、範囲ルール回路654はアドレスが参照するバッファのサイズに対する上限を示す有効範囲メタデータを選択し得る。アドレス調整回路656は、有効範囲メタデータを適宜調整し得る。即ち、アドレスを操作可能とする(例えば、ソフトウェアが演算オペレーションを実行することによる)、範囲メタデータが示す有効範囲内のメモリ位置をアドレスが参照する限り、アドレス範囲内のアドレスの上位アドレスビット(例えば、最上位ビット)が変化しないようにする。ただし、操作によりアドレスが有効範囲を超える(例えば、バッファのオーバーフロー)ことはないことにする。換言すると、プロセッサは調整値を取得し、それをアドレス(ポインタ)値に加える。このオペレーションが、アドレスの暗号化テキスト(またはtweakの一部として使用されるビット)に影響しない限り、メモリアクセスは許可される。実施形態において、調整値そのものは、符号化アドレスの一部として暗号化され得る。これにより、投機的敵対者のアドレス調整値の制御が阻止される。
【0073】
アドレス符号化回路652は、有効範囲メタデータを使用して、アドレスの暗号化される部分を選択し得る。暗号化回路658は、さらに後述するように、秘密鍵(例えば、図1Aの鍵154)およびtweakを使用して、アドレスの選択された部分(そしていくつかの実施形態において、調整および/または識別タグ)を暗号化し得る。メモリアクセスオペレーション(例えば、読み出し、書き込み、または実行オペレーション)時に、アドレス復号回路662は以前に符号化されたアドレスを復号し得る。このために、解読回路664はさらに後述するように、秘密鍵およびtweakを使用して、アドレスの暗号化された部分を解読し得る(さらに、いくつかの実施形態において、暗号化された調整および/または暗号化された識別タグ)。
【0074】
アドレス復元回路666は、アドレスの元の値を復元するため(例えば、真の、元のリニアメモリアドレス)、アドレスを元の(例えばカノニカル)形式に戻し得る。このために、アドレス復元回路666はアドレスの未使用ビット内の有効範囲メタデータ符号化を除去し得る(例えば、未使用ビットをその元の形式に戻す)。アドレスが適切に復号されると、メモリアクセスオペレーションは成功裏に完了する。しかし、符号化アドレスが、その値が範囲メタデータで示された有効範囲外となる(例えば、バッファのオーバーフロー)ように操作されていると(例えばソフトウェアによる)、解読回路664により実行された解読処理の結果、アドレスが破損する。破損した間接アドレスにより、フォールトが立ち上がる(例えば、一般的防御フォールト)。このようにして、セキュアメモリアクセス回路650は、プロセッサに、バッファオーバーフロー攻撃および同様の利用に対して、アクセス制御およびアドレスセキュリティを提供可能にする。
【0075】
ここで図7を参照すると、いくつかの実施形態において、コンピュータシステムはオペレーション中にコンピューティング環境710を構築し得る(例えば、ネイティブおよび/または仮想ランタイムまたは「実行」環境)。環境710内に示す様々なモジュールは、ハードウェア、ファームウェア、ソフトウェア、またはその組合せとして実施され得る。環境710内で、ユーザ空間アプリケーション734(または例えば、ユーザ空間アプリケーション734のロードにおける、特権的システムコンポーネント742)は時々、コンピュータシステムのオペレーション中に、メモリ割り当て702を発行し得る。メモリ割り当て702は、プロセッサ(例えば、プロセッサ112)に渡される前に、特権的システムコンポーネント742のメモリ割り当て回路746により、適宜変換され得る(例えば、コンパイルされるか、解釈される)。プロセッサにおいて、メモリ割り当て702(例えば、従来の「malloc」命令の代わり)に応じて、アドレス符号化回路652が呼び出される。従来のmalloc命令が単純にメモリを割り当て、(安全ではない)ポインタを戻す一方、アドレス符号化回路652は、本明細書に記載のとおり、メタデータ705(例えば、プロセッサが暗号化を適用する前であって、アドレス内で既に平文符号化された、または範囲を指定する命令に対する別個のパラメータとしての範囲および/または許可情報)を含むアドレス704を符号化し、符号化アドレス706を戻す。
【0076】
同様に、ユーザ空間アプリケーション734または特権的システムコンポーネント742は時々、メモリアクセス708を発行し得る。これは、メモリから読み出しおよびレジスタへの書き込み、あるいはレジスタからの読み出しおよびメモリへの書き込み(例えば、MOV命令)を行うプロセッサ命令として、プロセッサに扱われ得る。一例としてMOV命令を使用して、安全移動回路660は、アドレス復号回路662が適切に呼び出された上でのみ、メモリアクセスを実行する。図6および図7で安全移動回路660およびアドレス復号回路662は別個のモジュールとして示されているが、アドレス復号回路662が安全移動回路660内に組み込まれてよく、これらが別個に実装され得ることが理解されたい。さらに、MOV命令(例えば、コール、JMPなど)に加えてまたは代えて、アドレス復号回路662がその他種類の命令に組み込まれるか、それを参照し得ることを理解されたい。例えば、コールおよびJMPなどの制御移行命令により、コードが実行する符号化アドレスがプロセッサのプログラムカウンタレジスタにロードされ得る(例えば、命令ポインタまたはRIPであって、RIPは64ビットコードにおける命令関連アドレス指定を利用した命令ポインタレジスタである)。そして命令ポインタレジスタは、プログラムによりクエリされ得、この結果、現在のプログラムカウンタアドレスが符号化形式となる(現在のプログラムカウンタ位置へオフセット)。
【0077】
アドレス復号回路662が符号化アドレス706を適切に復号されると、元のアドレス704が特権的システムコンポーネント742に戻され、メモリアクセスが完了する(716)か、新たなプログラムカウンタ位置からプログラム実行が開始する(制御フローが変わる場合)。符号化アドレス706が適切に復号されないと、フォールトが立ち上がる(718)。
【0078】
ここで図8Aおよび8Bを参照すると、メモリ割り当て処理を実行するための方法802および820の例が示されている。方法802および820の一部は、コンピュータシステムのハードウェア、ファームウェア、および/またはソフトウェアにより実行され得る(例えば、メモリ割り当て回路746を特権的システムコンポーネント742が実行することによる)。図8Aにおいて、方法802はコーリングコード(例えば、特権的システムコンポーネント742またはユーザ空間アプリケーション734)からのメモリ割り当てのコールに応じて開始する。ブロック810において、コンピュータシステムはコーリングコードにメモリ割り当てする権限があるかを判定する。このために、コンピュータシステムは例えば最新分岐記録(LBR)である、最近取得したコード分岐の位置を記録するため、プロセッサレジスタのセットを利用し得る。例えば、コーリングコード(例えば機能をコールしたコード)を判定するため、機能はLBRをクエリして、分岐履歴を確認可能である。あるいは、機能はリターンアドレスに対するコールスタックをクエリし得る(しかし、スタック上のリターンアドレスは、プロセッサレジスタに格納されたデータ程セキュアでない可能性がある)。コンピュータシステムがコーリングコードにメモリ割り当て権限がないと判定すると、ブロック812でフォールトが立ち上る。コンピュータシステムがコーリングコードにメモリ割り当て権限があると判定すると、コンピュータシステムはブロック814に進み、本明細書に開示の技術を利用して、セキュアメモリ割り当てを開始する。したがって、コンピュータシステムはブロック814から、図9に示す後述の方法900の始めに移行する。
【0079】
図8Bにおいて、方法900のブロック924での符号化アドレス出力に応じて、方法820が開始する。ブロック822において、コンピュータシステムは、アドレスの符号化バージョン(例えば、符号化アドレス706)を、図8Aのブロック814において、メモリ割り当てを開始したコーリングコードに戻す。ブロック824において、コーリングコードは符号化アドレスを使用して、割り当てられたメモリ(例えばバッファ)にアクセスする。そうすることで、コーリングコードは、例えば符号化アドレスに演算オペレーションを実行することで、符号化アドレスを変更または修正し得る。したがって、コーリングコードの後続の読み出しまたは書き込みオペレーションは、後述する図10の方法の実行をトリガし得る。
【0080】
ここで図9を参照して、アドレスをセキュアにする方法900の例が示される。方法900の一部は、コンピュータシステムのハードウェア、ファームウェア、および/またはソフトウェアにより実行され得る(例えば、アドレス符号化回路652を呼び出すプロセッサ112による)。方法900は、(例えば、図8Aのブロック814でメモリマネージャモジュールによる)メモリ割り当てに応じて開始する。ブロック910において、コンピュータシステムはアドレス、アドレス範囲、およびアドレスを符号化するのに必要なその他入力(例えば、後述のコードブロック識別子または命令ポインタ)を取得する。ブロック912において、コンピュータシステムは、コーリングコード(例えば、図8Aのブロック810でメモリ割り当てを開始するコード)にブロック910(例えば、アドレス704)で受信した間接アドレスにアクセスする権限があるかを判定する。このために、コンピュータシステムは、例えばメモリマネージャモジュールのヒープマネージャから取得され得る、命令ポインタコーリングコードに対するコーラー特権的レベル情報を検証することで、アクセス制御チェックを実行し得る。コンピュータシステムがコーリングコードにアドレスアクセス権限がないと判定すると、フォールトが立ち上る(914)。コンピュータシステムがコーリングコードにアドレスアクセス権限があると判定すると、コンピュータシステムはブロック916に進む。ブロック916において、コンピュータシステムは、アドレス範囲符号化を実行するために、アドレスの未使用(例えば、非カノニカル)アドレスビットを判定する。このために、コンピュータシステムは単純にアドレスのより高位の(例えば、最上位)未使用/非カノニカルビットを使用し得る。符号化アドレスは、構造的に非カノニカルである必要はないことに留意されたい。むしろ、未使用/非カノニカルアドレスは、本明細書に開示のアドレス符号化を可能とするように、単純に例えば特権的システムコンポーネント742により確保されたメモリの範囲であり得る。
【0081】
ブロック918において、コンピュータシステムはメタデータ(例えば、有効範囲および/または許可データ)を生成し、メタデータをブロック916で選択されたアドレスの未使用/非カノニカルビット内に格納する。例示的に、メタデータはアドレスにより示されたバッファのサイズの上限を示す。メタデータを生成するため、コンピュータシステムは最上位カノニカルアドレスビットが有効メモリ範囲について変化しない中心位置に、アドレス値を変換する。いくつかの実施形態において、範囲メタデータはメモリ範囲サイズの2の累乗を示す「指数」を含む。いくつかの場合において、後述のように、2の累乗の範囲の終わりに値が強制的に来るように「調整」が利用される。別の実施形態では、バッファ「アンダーフロー」(バッファ「オーバーフロー」と異なる)に対処する必要がある場合、調整はバッファを2の累乗の範囲の先頭に強制的に移すように利用され得る。指数メタデータを使用して、任意の2の累乗メモリ範囲が定義され得る(例えば、2、4、8、16…2^64)。
【0082】
以下に、範囲メタデータ符号化の単純例を示す。アドレス0000b~0011bは、上位2ビットが変化しない範囲0~3に収まる。ただし、ポインタがインデックス4に移るように修正された場合、上位ビットの1つが変化する。したがって、有効範囲メタデータは[2]として符号化され得(これにより、上位2ビットで4の範囲を符号化する)、有効範囲メタデータが例えば、「[2]00xxb」であるより高位の非カノニカルビットに格納され得る。この例では、指数のサイズは2ビット(例えば値[1~4])となり例で使用される4ビットアドレスが包含される。以下のテーブル1は、複数の追加的な単純化された例を示す。
【表1】
テーブル1。アドレス符号化例。
【0083】
テーブル1において、浮動小数点形式と同様の形式を使用して、符号化アドレスが示される。テーブル1の3列目の符号化アドレスにおいて、[]内の数(例えば[2])は、指数または有効範囲メタデータで、{}内の数(例えば{3})は、調整値で、調整値の右側のアドレスは、有効範囲メタデータおよび調整値が格納された未使用/非カノニカルビットを示す。ブロック920において、コンピュータシステムは、有効範囲に適用される調整(または「オフセット」)を決定し、間接アドレスの未使用/非カノニカルビット内に調整値を格納する。いくつかの実施形態において、調整を利用して、符号化範囲を、2の累乗境界に強制移動する(例えば、バッファサイズに特定の上限を設定するため)。このように、元の(符号化されていない)有効アドレス範囲の符号化バージョンが、生成され得る。符号化バージョンは、有効範囲内で変化する上位ビット数が最小になるように指定され得る(例えば、上位ビットの暗号化により、解読に関する符号化アドレスの修正を検出/強調するようにする)。符号化は可逆的である。したがって、範囲内の修正である限り、元の意図された有効アドレス範囲が戻される。上述の例では、範囲0~3十進数(0000b~0011b二進数)は、[2]{0}00xxbとして符号化され得る(ここで、「xx」は、ビットが範囲:00、01、10、11の範囲内で任意の値を採り得ることを示す)。別の例では、範囲1~4十進数(0001b~0100b)は、[2]{-1}00xxbとして符号化され得る(ここで、上位ビットを一定に維持するため、調整が引かれる)。あるいは、同じ範囲1~4十進数(0001b~0100b)は、[2]{3}01xxbとして符号化され得る(この時は、3の調整を加えることで、上位ビットを一定に維持する)。いずれの表現でも、符号化バージョンは元のアドレス範囲1~4に復号されて戻される。さらに別の例では、バッファサイズが4KBであれば、4バイトの解像度の10ビット調整値が使用され得る。
【0084】
他の実施形態は、符号付き調整値(例えば2のコンプリメント)を利用し得る。この場合、バッファは調整の符号に応じて、バッファは2の累乗境界の先頭または末尾のいずれかに調整され得る。そのような実施形態は、調整符号に応じて、バッファオーバーフローまたはアンダーフローのいずれの状況でも、保護を提供し得る。未使用/非カノニカルアドレスで16ビットが利用可能であれば(例えば、現在の64ビットプロセッサにおける)、利用可能なビットのうちの10ビットが調整に利用され得、残りの6ビットが有効範囲メタデータ(例えば、指数値/2の累乗)に利用され得る。指数値が4KBページを超える範囲に到達すると、調整は2の乗数で拡大し得る。これにより、より大きな2の累乗の範囲内の大きなバッファの調整が可能となる(なお、いくつかの実施形態において、4096バイトは10ビット調整値で適切に包含される。したがって、上位(2の累乗)ビットが変化する前に4KBページ内の最後の4バイトである終わりの部分に、バッファを「調整」するように調整が可能である)。そのような調整(例えば、1増やす)により、バッファ位置は4バイトずつ調整される。別の実施形態では、その他任意の初期調整サイズおよびワードサイズが選択可能である。別の例では、指数の値が13であれば、調整値は2倍され得る。これにより、調整は2の累乗範囲(この場合、8バイトずつ調整するとして、2つの4KBページ)を包含したままとなり得、それ以上も同様である(例えば、指数の値が14であれば、調整値は4倍され、指数の値が15であれば、調整値は8倍され、以下同様で、2の累乗範囲を包含した調整が可能となる)。
【0085】
ブロック922において、コンピュータシステムがアドレスの一部を暗号化する。このアドレスの暗号化される部分は、有効範囲メタデータ(例えば、指数/2の累乗)および調整値により決まる。有効範囲メタデータは、符号化アドレスの、符号化される最上位アドレスビットの数を決める(例えば、一部のアドレスビットが必ず暗号化され得るように、最小数に絞る)。いくつかの実施形態において、調整値および/または識別タグも暗号化される(例えば、ブロック暗号に妥当なブロックサイズを生成するため)。いくつかの実施形態において、有効範囲メタデータ内で特定される、使用されたビット/カノニカルアドレスの最上位ビットは、有効範囲メタデータ(調整値を含んでも、含まなくてもよい)をtweakとして利用して、秘密鍵で暗号化される(例えば、秘密鍵720)。図示の実施形態では、プロセッサが解読するビット数を決めるのに、有効範囲メタデータ平文を使用するため、有効範囲メタデータ(例えば、指数/2の累乗)は暗号化されない。しかし、tweak可能なブロック暗号の場合、有効範囲メタデータ(例えば、指数/2の累乗)はtweakとして利用され得る(したがって、暗号化ビットに影響する)。tweakとして使用され得るその他データ値は、間接アドレスの未使用ビットに格納されるデータ、バッファサイズの上限、バッファサイズの上限として選択された2の累乗境界の指数、2の累乗境界に適用される調整値、コードブロック識別子、命令ポインタデータ、メタデータ内の許可情報符号化、および/またはバージョン番号(プログラムに以前割り当てられたポインタを再割り当て/取り消しを行う場合に有用。バージョンはレジスタ内でプロセッサにより維持され得る)を含む。実施形態は、ブロックサイズが64ビット仮想/リニアメモリアドレス/ポインタのサイズに対応する(収まる)、Simon、Speck ciphers、PRINCE cipherなどの小ブロック暗号(例えば、データの暗号化32ビット)を利用し得る。暗号化に加えて、または代えて、暗号を利用して、メッセージ認証コード(MAC)を生成してよい。これは、トランケートされて未使用非カノニカルリニア/仮想アドレスビット内に格納され得る。この暗号MACは、仮想アドレスがその境界外に操作された場合に、同アドレスの改ざんまたは修正を検出するのに使用され得る。
【0086】
本明細書で使用される、「tweak」とは特に、通常の平文または暗号化テキスト入力と鍵(例えば、秘密鍵720)に加えた、ブロック暗号への第2入力を示し得る。上位2カノニカルビットを暗号化することで、コンピュータシステムは、アドレスが不正に変更されたことを検出可能になる。暗号化アルゴリズムにより、不正に変更された上位ビットが敵対者により判別不能なランダムビットシーケンスを生成することとなり、したがって不正に変更された間接アドレスが使用されるとフォールトに帰結する可能性が高いためである。
【0087】
アドレスの暗号化される部分は(例えば、上位使用された/カノニカルビット)は、有効範囲メタデータと、調整(例えば、上述の例では[2]{-1})をtweakとして使用する、tweak可能ブロック暗号などの暗号モード暗号化アルゴリズムを使用して暗号化される。tweak可能ブロック暗号のいくつかの例は、XOR-encrypt-XOR(XEX)、LRW(Liskov、Rivest、およびWagner)方式、暗号文窃盗(ciphertext stealing:XTS)を伴うXEXベースのtweakされたコードブックモードを含む。暗号における任意の単一のビットの変化が解読された平文全体の変化に帰結するような、その他ビット拡散方法が利用可能である。必要であれば、別の実施形態として、セキュリティよりも性能を優先するが、ブロック暗号に近い、妥当なビット拡散は実現可能である非暗号方法を使用してよい。
【0088】
暗号化のために選択される暗号は、ビット選択可能ブロックサイズ(例えば、SPECK)を有するアルゴリズム、または残りの暗号化されていないビット(固定ブロックサイズ外の余剰ビット)を使用したtweakを含む固定ブロックサイズを可能とするアルゴリズムを使用して、ハードウェア内に実装され得る。いくつかの実施形態において、暗号は十分にビット拡散されている。したがって、暗号化されたアドレスビットへの任意のビットの変更が、解読時に全てのビット位置に、均等に影響を与える(波及する)。これに基づいて、任意の変更または越境に対するアドレス破損が生じる。この方法を使用して、敵対者がメタデータ(例えば、指数または調整値または識別タグ、または暗号化された最上位ビット)改ざんを試みた場合、その結果復号されるアドレスは破損している。64ビットアドレススペースで、アドレス破損が起きると、フォールトに帰結する可能性が高い。したがって、特権的システムコンポーネント742(例えば、オペレーティングシステム/エグゼクティブ/VMM/別モード/デバッグトレース/管理プロセッサ/サブシステム、など)が、アドレス破損(延いてはポインタアクセスまたは越境)を把握可能となる。
【0089】
上述の例では、アドレス/ポインタ値が3超にまで増加すると、このようなアドレス/ポインタ修正は、上位カノニカルビットを破損し、敵対者により制御不能な、判別不能メモリアクセスが生じる。例えば、バッファサイズを1バイト超えることが、高確率でページフォールトとなるランダムメモリアクセスに帰結する。これは、たとえ1つでもビットが変更となれば、それが最上位ビット全てに拡散することが保証される、ビット拡散特性による。値を2の累乗範囲の末尾に強制的に置く調整の結果、バッファオーバーフローは暗号化されたアドレスビットの破損を生じる。
【0090】
暗号tweakは、コードブロック識別子を含むように拡張され得る。これにより、コードブロック(例えば、コーリングコードのブロック)がアクセスメモリへの間接アドレス/ポインタの使用を許可される、アクセス制御が提供される。さらに、命令ポインタ(「プログラムカウンタ」とも呼ばれ得る)情報または範囲は、ポインタ暗号化tweakの一部として符号化され得る。命令ポインタ情報は、どのコードがどのデータをアクセス可能かの範囲を限定するのに使用され得る。例えば、全てのコードが、64ビットアドレススペース内のメモリの固定ブロック内に配置され得る。同様のアクセス許可を持つコードは、同一のブロックまたは範囲内にグループ化され得る。tweakは、実行中の命令を含むメモリのブロックの識別子を含み得る。このように、コードとデータは関連付けられ得、アクセスが制御され得る。したがって、別のコードブロックからの敵対者が、暗号化されたポインタを使用して、保護されたブロックのデータにアクセス不能となる。誤ったコードブロック識別子がtweakとして利用された場合に、暗号化されたポインタが適切に復号されないためである。さらに、コードのブロックが例えばmallocをコールして、自身にメモリを割り当てる場合、mallocはコーリングコードのメモリブロックを利用して、暗号化されたアドレスを戻し得る。これにより、割り当てられたメモリに対する、プライベートアクセスが保証される(ただし、割り当てたメモリが解放されず、別のコードブロックに再割り当てされない限り)。あるいは、保護鍵などの、コーリングコードを特定するその他方法がtweakで使用され得る。そしてさらに、メモリへの制御アクセスのためにプロセッサ112が使用する、アクセス読み出し/書き込み/実行用のメタデータが、暗号化されたアドレスビット用のtweakの一部として使用され得る。さらに、命令ポインタそのものが、符号化ポインタ(例えば、範囲に基づく)として表され得る。この場合、データポインタにアクセスする、またはメモリ割り当て/アサインを要求するコードブロックを特定する「tweak」の一部としてメタデータおよび暗号化されたアドレスビットが使用され得る。
【0091】
ここで図10を参照すると、アドレスを復号する方法1000の例が示される。方法1000の一部は、コンピュータシステムのハードウェア、ファームウェア、および/またはソフトウェアにより実行され得る(例えば、安全移動回路660および/またはアドレス復号回路662を呼び出すプロセッサ112による)。方法1000は、例えば、MOV命令のような読み出し、書き込み、または実行オペレーションなどのメモリアクセスオペレーションに応じて開始する。以下のテーブル2は、本明細書に開示のアドレス符号化技術を使用可能なMOV命令の例示的な例をいくつか提供する。勿論、異なるプロセッサアーキテクチャは、命令に対する異なる名称または異なるオプション/パラメータにより、「MOV」機能を参照し得る。このようにして、開示の実施形態は、異なるアーキテクチャ間で、全種類のMOV「機能」を、当該機能を参照するための用語に関わらず適用する。さらに、MOV命令は一例であって、データの読み出し/書き込みを行うためにメモリにアクセス可能な任意の命令が、本明細書に開示のアドレス符号化および復号方法が適用され得る。
【表2】
テーブル2。例示的MOV命令。
【0092】
ブロック1010において、コンピュータシステムは符号化アドレスを取得する(例えば、レジスタから取得され得る符号化アドレス706)。ブロック1012において、コンピュータシステムは、ブロック1010で取得した符号化アドレスが、未使用または非カノニカルビットを有するか判定する。コンピュータシステムが、符号化アドレスが未使用/非カノニカルビットを有さないと判定すると(例えばアドレスが、アドレス範囲が32ビット、64ビット、128ビット、またはその他アーキテクチャが要し得るいずれの範囲であれ、アドレスの非カノニカルまたはその他確保された範囲内に収まらない場合)、フォールトが立ち上がる(1014)。コンピュータシステムが、符号化アドレスが未使用/非カノニカルビットを有すると判定すると(例えば、アドレスがカノニカルまたは確保されたアドレス範囲内に収まる場合)、コンピュータシステムはブロック1016に進む。ブロック1016において、コンピュータシステムは、図9のブロック922で使用される暗号化アルゴリズムに対応する解読アルゴリズムを使用して、図9のブロック922の暗号化アルゴリズムにより使用されるのと同じ秘密鍵およびtweakを使用して、符号化アドレスの暗号化された部分を解読する。ブロック1018において、コンピュータシステムは解読されたアドレス内の範囲メタデータの調整を「解除」する(例えば、アドレスの全解読値から、未使用/非カノニカルビット内の解読された調整値を減算することによる)。ブロック1030において、例えばコンピュータシステムは未使用/非カノニカルビットを除去することで、解読されたアドレスを元の(例えば、カノニカル)形式に戻す。ブロック1022において、コンピュータシステムは、ブロック1020で出力された、復号されたアドレスを、「真の」(例えば、仮想またはリニア)メモリアドレスとして(例えば、ポインタとして)使用する。ブロック1024において、コンピュータシステムは、ブロック1022でメモリアドレス/ポインタとして使用された復号されたアドレスが、破損アドレスであるか判定する。復号されたアドレスが破損していると、フォールトが立ち上がる(1014)。復号されたアドレスが破損していなければ、コンピュータシステムは、ブロック1026で復号されたアドレスをメモリアドレス/ポインタとして使用して、成功裏にメモリアクセスオペレーションを完了する。このようにして、方法1000は、コンピュータシステムが、範囲符号化間接アドレスを検証可能にし、範囲符号化アドレスが実メモリアドレスに変換される前に、埋め込まれた範囲のチェックを実施する。さらに、破損が生じると検出するために確保された有効アドレス値またはメタデータと共に、破損が生じたことをある程度の確率で判定するように無効調整値(例えば、2の累乗範囲を超える調整値)も使用され得る。破損が検出されなくても、結果的なアドレスは敵対者により、判別不能(したがって使用不能)となる。
[タグおよびアドレス符号化/暗号化]
【0093】
図11は、アドレスの符号化部分でメモリタグが暗号化される実施形態を示す。メモリ割り当て(例えばmalloc)で割り当てられたアドレスの暗号化された部分にメモリタグが含まれる実施形態では、さらにタグビットへの影響も避けながら、敵対者がアドレスを操作することが阻止され得る。したがって、敵対者は固定アドレスを取得して、独立してタグビットの推定を開始することができない。暗号化により、タグ値および暗号化されたアドレスビットの変化が生じる。この結果、ランダムアドレスにランダムタグが関連付けられる。
【0094】
暗号ポインタの暗号化された部分にメモリタグが含まれる実施形態によると、敵対者によるタグの推測が阻止され得る。暗号化されたポインタのいずれの部分が修正されると、解読されたビットは全てランダムになる。解読されたアドレスとタグの両方が異なる。したがって、敵対者が暗号化テキストを修正して、結果を推測しようと試みるたびに両者が変化するので、敵対者はタグを暗号化されたアドレスに対応付けることができない。
[例示的実施形態]
【0095】
実施形態において、プロセッサは、デコーダと、キャッシュと、アドレス変換回路と、キャッシュコントローラと、メモリコントローラと、を備える。デコーダは、命令を復号する。命令は、データオブジェクトに関連付けられ、第1メモリタグを有する第1アドレスを指定する。アドレス変換回路は、第1アドレスを、データオブジェクトのメモリ位置を識別する第2アドレスに変換する。コンパレータは、第1メモリタグと、第2アドレスに関連付けられた第2メモリタグとを比較する。キャッシュコントローラは、メモリ位置に関連付けられたキャッシュミスを検出する。メモリコントローラは、コンパレータによる第1メモリタグと第2メモリタグとの一致の検出、およびキャッシュコントローラによるキャッシュミスの検出に応じて、メモリ位置からキャッシュにデータオブジェクトをロードする。
【0096】
様々な実施形態において、以下の任意のもの、または任意の組合せもさらに適用され得る。第1アドレスは仮想アドレスであってよく、第2アドレスは物理アドレスであってよい。コンパレータが一致を検出するまで、メモリコントローラはさらに、メモリ位置に対応するキャッシュラインのロードを阻止してよい。コンパレータが第1メモリタグと第2メモリタグとの不一致を検出したことに応じて、メモリコントローラはさらに、データオブジェクトを示さないデータを、メモリ位置に対応するキャッシュラインにロードしてよい。プロセッサはさらに、コンパレータが第1メモリタグと第2メモリタグとの不一致を検出したことに応じて、メモリ位置に対応するキャッシュラインが無効であることを示すようにインジケータを設定する有害キュー回路を含み得る。有害キュー回路はさらに、命令の結果がコミットされた後にのみ、キャッシュラインが無効であることを示すインジケーションをソフトウェアに提供し得る。プロセッサはさらに、第1メモリタグを定義するポインタセキュリティ回路を備えてよい。プロセッサはさらに、第1メモリタグに少なくとも部分的に基づいて、データオブジェクトを暗号保護する暗号化回路を備えてよい。第1メモリタグは、データオブジェクトの、種類、機能、メモリ位置、または使用を識別する識別タグを含んでよい。暗号化回路は、暗号化アルゴリズムへのtweak入力を少なくとも部分的に定義するために、メモリタグの少なくとも一部を使用してよい。第1メモリタグは暗号化タグを含んでよく、暗号化回路はさらに、暗号化タグを使用して、複数の暗号化鍵の1つを識別してよい。第1メモリタグは、メモリ位置に関連付けられたキャッシュラインが複数のデータオブジェクトを含むかどうかを示す、小オブジェクトタグを含んでよい。小オブジェクトタグは、サブキャッシュライン粒度のメモリタギングを可能にしてよい。第1メモリタグは、第1メモリアドレスと、データオブジェクトとの許容距離を示す、境界距離タグを含む。プロセッサはさらに、第1アドレスと、データオブジェクトの暗号化された値とに少なくとも部分的に基づいて、インテグリティチェック値を生成するインテグリティチェック回路を備えてよい。プロセッサはさらに、インテグリティチェック値に少なくとも部分的に基づいて、第1アドレスの改ざんを検出するポインタセキュリティ回路を備えてよい。
【0097】
実施形態において、プロセッサは、ソフトウェアプログラムにメモリ領域を割り当てる命令を復号するデコーダと、命令を実行する実行ユニットと、を備える。実行ユニットは、メモリ領域に対して有効範囲を決定する範囲ルール回路と、ソフトウェアプログラムにより、有効範囲内のアドレスを操作するのに使用される第1の数のアドレスビットと、アクセス許可を示すメモリタグを含む第2の数のアドレスビットとを決定するアドレス調整回路と、アドレスとメモリタグの少なくとも一部を暗号化して、ソフトウェアプログラムに戻す暗号化されたアドレスを生成する暗号化回路と、を含む。
【0098】
実施形態において、プロセッサは、データオブジェクトに関連付けられた暗号化された第1アドレスを指定する命令を復号するデコーダと、暗号化された第1アドレスを解読して、解読された第1アドレスと解読された第1メモリタグとを生成する解読回路と、キャッシュと、解読された第1アドレスを、データオブジェクトのメモリ位置を識別する第2アドレスに変換するアドレス変換回路と、第1メモリタグと、第2アドレスに関連付けられた第2メモリタグとを比較するコンパレータと、メモリ位置に関連付けられたキャッシュミスを検出するキャッシュコントローラと、コンパレータによる第1メモリタグと第2メモリタグとの一致の検出、およびキャッシュコントローラによるキャッシュミスの検出に応じて、メモリ位置からキャッシュにデータオブジェクトをロードするメモリコントローラと、を備える。
【0099】
実施形態において、プロセッサは、データオブジェクトに関連付けられ、第1メモリタグを有する第1アドレスを指定する命令を復号するデコーダと、キャッシュと、第1アドレスを、データオブジェクトのメモリ位置を識別する第2アドレスに変換するアドレス変換回路と、第1メモリタグと、第2アドレスに関連付けられた第2メモリタグとを比較するコンパレータと、メモリ位置に関連付けられたキャッシュミスを検出するキャッシュコントローラと、コンパレータによる第1メモリタグと第2メモリタグとの一致の検出、およびキャッシュコントローラによるキャッシュミスの検出に応じて、メモリ位置からキャッシュにデータオブジェクトをロードする手段と、を備える。
【0100】
様々な実施形態において、以下の任意のもの、または任意の組合せも適用され得る。手段はさらに、コンパレータが一致を検出するまで、メモリ位置に対応するキャッシュラインのロードを阻止するためのものであってよい。手段はさらに、コンパレータが第1メモリタグと第2メモリタグとの不一致を検出したことに応じて、データオブジェクトを示さないデータを、メモリ位置に対応するキャッシュラインにロードするためのものであってよい。プロセッサはさらに、コンパレータが第1メモリタグと第2メモリタグとの不一致を検出したことに応じて、メモリ位置に対応するキャッシュラインが無効であることを示すようにインジケータを設定する有害キュー手段を含み得る。有害キュー手段はさらに、命令の結果がコミットされた後にのみ、キャッシュラインが無効であることを示すインジケーションをソフトウェアに提供し得る。
【0101】
実施形態において、プロセッサは、ソフトウェアプログラムにメモリ領域を割り当てる命令を復号するデコーダと、命令を実行する実行ユニットと、を備え、実行ユニットは、メモリ領域に対して有効範囲を決定する範囲ルール手段と、ソフトウェアプログラムにより、有効範囲内のアドレスを操作するのに使用される第1の数のアドレスビットと、アクセス許可を示すメモリタグを含む第2の数のアドレスビットとを決定するアドレス調整手段と、アドレスとメモリタグの少なくとも一部を暗号化して、ソフトウェアプログラムに戻す暗号化されたアドレスを生成する暗号化手段と、を含む。
【0102】
実施形態において、プロセッサは、データオブジェクトに関連付けられた暗号化された第1アドレスを指定する命令を復号するデコーダと、暗号化された第1アドレスを解読して、解読された第1アドレスと解読された第1メモリタグとを生成する解読回路と、キャッシュと、解読された第1アドレスを、データオブジェクトのメモリ位置を識別する第2アドレスに変換するアドレス変換回路と、第1メモリタグと、第2アドレスに関連付けられた第2メモリタグとを比較するコンパレータと、メモリ位置に関連付けられたキャッシュミスを検出するキャッシュコントローラと、コンパレータによる第1メモリタグと第2メモリタグとの一致の検出、およびキャッシュコントローラによるキャッシュミスの検出に応じて、メモリ位置からキャッシュにデータオブジェクトをロードする手段と、を備える。
【0103】
実施形態において、方法は、データオブジェクトに関連付けられ、第1メモリタグを有する第1アドレスを指定する命令を復号する段階と、第1アドレスを、データオブジェクトのメモリ位置を識別する第2アドレスに変換する段階と、第1メモリタグと、第2アドレスに関連付けられた第2メモリタグとを比較する段階と、メモリ位置に関連付けられたキャッシュミスを検出する段階と、第1メモリタグと第2メモリタグとの一致の検出、およびキャッシュミスの検出に応じて、メモリ位置からキャッシュにデータオブジェクトをロードする段階と、を備える。
【0104】
様々な実施形態において、以下の任意のもの、または任意の組合せも適用され得る。第1アドレスは仮想アドレスであってよく、第2アドレスは物理アドレスであってよい。方法はさらに、一致を検出するまで、メモリ位置に対応するキャッシュラインのロードを阻止する段階を含んでもよい。方法はさらに、第1メモリタグと第2メモリタグとの不一致を検出したことに応じて、データオブジェクトを示さないデータを、メモリ位置に対応するキャッシュラインにロードする段階を含んでもよい。方法はさらに、コンパレータが第1メモリタグと第2メモリタグとの不一致を検出したことに応じて、メモリ位置に対応するキャッシュラインが無効であることを示すようにインジケータを設定することを含み得る。方法はさらに、命令の結果がコミットされた後にのみ、キャッシュラインが無効であることを示すインジケーションをソフトウェアに提供することを含み得る。
【0105】
実施形態において、方法は、ソフトウェアプログラムにメモリ領域を割り当てる命令を復号する段階と、命令を実行する段階と、を含み、実行は、メモリ領域に対して有効範囲を決定する段階と、ソフトウェアプログラムにより、有効範囲内のアドレスを操作するのに使用される第1の数のアドレスビットを決定する段階と、アクセス許可を示すメモリタグを含む第2の数のアドレスビットとを決定する段階と、アドレスとメモリタグの少なくとも一部を暗号化して、暗号化されたアドレスを生成する段階と、暗号化されたアドレスをソフトウェアプログラムに戻す段階と、を含む。
【0106】
実施形態において、方法は、データオブジェクトに関連付けられた暗号化された第1アドレスを指定する命令を復号する段階と、暗号化された第1アドレスを解読して、解読された第1アドレスと解読された第1メモリタグとを生成する段階と、解読された第1アドレスを、データオブジェクトのメモリ位置を識別する第2アドレスに変換する段階と、第1メモリタグと、第2アドレスに関連付けられた第2メモリタグとを比較する段階と、メモリ位置に関連付けられたキャッシュミスを検出する段階と、第1メモリタグと第2メモリタグとの一致の検出、およびキャッシュミスの検出に応じて、メモリ位置からキャッシュにデータオブジェクトをロードする段階と、を備える。
【0107】
実施形態において、装置は、上述の機能および/または方法のいずれかを実行する手段を含み得る。実施形態において、機械可読有形媒体は、命令を格納し得る。この命令は、機械により実行されると、上述の方法のいずれかを機械に実行させる。例示的コア、プロセッサ、およびシステムアーキテクチャ
【0108】
本発明が異なる態様および/または異なる目的で実施される、数多くの異なるプロセッサのうち任意のものを表し得る、プロセッサ112を参照して、本発明の実施形態が説明および図示された。これらプロセッサおよびコアは、例えば以下に説明するように、キャッシュおよび分岐予測部などのハードウェアを含み得る。ハードウェアは性能を向上するが、本発明の実施形態により防御され得る分析に対して、プロセッサおよび/またはコアをより脆弱にし得る。
【0109】
例えば、本発明が実施され得るプロセッサ内のコア(例えば、コア118)の実装は、汎用コンピューティング向けの汎用インオーダコア、汎用コンピューティング向けの高性能汎用アウトオブオーダコア、主にグラフィックおよび/または科学(スループット)コンピューティング向けの特定用途向けコアを含んでよい。本発明が実施され得るプロセッサの実装は、汎用コンピューティング向けの1または複数の汎用インオーダコアおよび/または汎用コンピューティング向けの1または複数の汎用アウトオブオーダコアを含む中央処理装置(CPU)、および、主にグラフィックおよび/または科学(スループット)向けの1または複数の特定用途向けコアを含むコプロセッサを含んでよい。そのような異なるプロセッサは、CPUとは別個のチップ上のコプロセッサ、CPUと同じパッケージ内の別個のダイ上のコプロセッサ、CPUと同じダイ上のコプロセッサ(この場合、そのようなコプロセッサは、統合グラフィックスおよび/または科学(スループット)ロジックなどの特定用途向けロジックまたは特定用途向けコアと呼ばれる場合がある)、および上記CPU(アプリケーションコア(複数可)またはアプリケーションプロセッサ(複数可)と呼ばれる場合がある)、上述のコプロセッサおよび追加の機能を同じダイ上に含み得るシステムオンチップ(SoC)を含み得る、異なるコンピュータシステムアーキテクチャをもたらす。
【0110】
例示的なコアアーキテクチャが次に説明され、その後、例示的なプロセッサおよびコンピュータアーキテクチャの説明が続く。各プロセッサは1または複数のコアを備えることができ、各コアおよび/またはコアの組合せは、様々なときに1または複数のスレッド、プロセス、または他の命令シーケンスを実行するように構築(architected)および設計(designed)され得る。コアアーキテクチャおよび設計技法は、同時(または対称)マルチスレッディング(SMT)として知られる種類のアプローチのいずれか、または任意の他の手法にしたがって、複数のスレッドの同時実行を提供および/またはサポートすることができる。
【0111】
さらに、上述し、より詳しく後述するように、本開示の実施形態は、汎用プロセッサ、サーバプロセッサもしくはサーバ環境で使用するための処理要素、コプロセッサ(例えば、セキュリティコプロセッサ)、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックアクセラレータまたはデジタル信号処理(DSP)ユニット、暗号化アクセラレータ、固定機能アクセラレータ、機械学習アクセラレータ、ネットワーキングアクセラレータ、またはコンピュータビジョンアクセラレータなど)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサもしくは処理装置を含む任意の種類のプロセッサまたは処理要素に適用され得る。1または複数のプロセッサは、1または複数のチップ上に実装されてよい。1または複数のプロセッサは、例えば、BiCMOS、CMOSまたはNMOSなど、多数の処理技術のいずれかを用いる1または複数の基板の一部であってよく、および/または当該基板上に実装されてよい。上に列挙され本明細書で説明されるプロセッサおよび処理装置は例示的なものであり、本明細書で説明するように、本開示は、任意のプロセッサまたは処理装置に適用可能である。
【0112】
さらに、上述し、より詳しく後述するように、本開示の実施形態は、例えば、x86命令セット(場合により、新しいバージョンで追加された拡張を含む)、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セット、カリフォルニア州サニーベールのARM HoldingsのARM命令セット(NEONなどの任意の追加の拡張を伴う)、IBMの「Power」命令セット、またはRISCおよびCISCの両方の命令セットを含む他の任意の命令セットを含む、多種多様な命令セットおよび命令セットアーキテクチャを使用して、プロセッサまたは処理要素に適用できる。上に列挙され本明細書で説明される命令セットおよび命令セットアーキテクチャは例示的なものであり、本明細書で説明するように、本開示は、任意の命令セットおよび命令セットアーキテクチャに適用可能である。
[例示的なコアアーキテクチャ]
【0113】
図12Aは、本発明の実施形態による、例示的なインオーダパイプライン、および例示的なレジスタリネーム、アウトオブオーダ発行/実行パイプラインの双方を図示するブロック図である。図12Bは、本発明の実施形態による、プロセッサに含まれるべきインオーダアーキテクチャコアの例示的な実施形態と、例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。図12A図12Bの実線のボックスはインオーダパイプラインおよびインオーダコアを示し、破線のボックスのオプションの追加は、レジスタリネーミング、アウトオブオーダ発行/実行パイプラインおよびコアを示す。インオーダの態様がアウトオブオーダの態様のサブセットであると仮定して、アウトオブオーダの態様が説明される。
【0114】
図12Aにおいて、プロセッサパイプライン1200は、フェッチステージ1202と、長さ復号ステージ1204と、復号ステージ1206と、割り当てステージ1208と、リネームステージ1210と、スケジューリング(ディスパッチまたは発行としても知られる)ステージ1212と、レジスタ読み出し/メモリ読み出しステージ1214と、実行ステージ1216と、ライトバック/メモリ書き込みステージ1218と、例外処理ステージ1222と、およびコミットステージ124とを含む。
【0115】
図12Bは、実行エンジンユニット1250に接続されているフロントエンドユニット1230を含むプロセッサコア1290を示す図であり、フロントエンドユニット1230および実行エンジンユニット1250の両方はメモリユニット1270に接続されている。コア1290は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドもしくは代替的なコアタイプであってよい。さらに別の選択肢として、コア1290は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理装置(GPGPU)コア、グラフィックスコアなどの専用コアであってよい。例えば、上述のように、コア1290は汎用プロセッサ、サーバプロセッサもしくはサーバ環境で使用するための処理要素、コプロセッサ(例えば、セキュリティコプロセッサ)、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックアクセラレータまたはデジタル信号処理(DSP)ユニット、暗号化アクセラレータ、固定機能アクセラレータ、機械学習アクセラレータ、ネットワーキングアクセラレータ、またはコンピュータビジョンアクセラレータなど)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサもしくは処理装置を含むセットの任意の部材であり得る。
【0116】
フロントエンドユニット1230は、マイクロоpキャッシュ1233に接続されている分岐予測ユニット1232を含む。命令キャッシュユニット1234は、命令トランスレーションルックアサイドバッファ(TLB)1236に接続されている。命令TLB1236は、命令フェッチユニット1238に接続されている。命令フェッチユニット1238は、復号ユニット1240に接続されている。復号ユニット1240(またはデコーダ)は、命令を復号し、元の命令から復号され、またはこれらを反映し、またはこれらから導出された1または複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号を、出力として生成してよい。マイクロオペレーション、マイクロコードエントリポイント、マイクロ命令などは、少なくともマイクロopキャッシュ1233に格納され得る。復号ユニット1240は、様々な異なる機構を用いて実装されてよい。適切な機構の例には、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコード読み取り専用メモリ(ROM)などが含まれるが、それらに限定されない。一実施形態において、コア1290は、マイクロコードROM、または特定のマクロ命令のためのマイクロコードを(例えば、復号ユニット1240にまたはそうでなければフロントエンドユニット1230内に)格納する他の媒体を含む。マイクロopキャッシュ1233および復号ユニット1240は、実行エンジンユニット1250内のリネーム/アロケータユニット1252に接続される。様々な実施形態において、1233などのマイクロopキャッシュは、追加的または代替的に、opキャッシュ、u-opキャッシュ、uopキャッシュ、またはμopキャッシュと呼ばれ得、マイクロオペレーションは、マイクロop、u-op、uop、およびμopと呼ばれ得る。
【0117】
実行エンジンユニット1250は、リタイアメントユニット1254および1または複数のスケジューラユニット1256のセットに接続されたリネーム/アロケータユニット1252を含む。スケジューラユニット1256は任意の数の異なるスケジューラを表し、リザベーションステーション、中央命令ウィンドウなどを含む。スケジューラユニット(複数可)1256は、物理レジスタファイル(複数可)ユニット(複数可)1258に接続される。物理的レジスタファイル(複数可)ユニット1258の各々は、1または複数の物理的レジスタファイルを表し、それらの異なるいくつかが、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行される次の命令のアドレスである命令ポインタ)等のような、1または複数の異なるデータタイプを格納する。一実施形態において、物理レジスタファイル(複数可)ユニット1258は、ベクトルレジスタユニット、ライトマスクレジスタユニット、およびスカラレジスタユニットを備える。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供することができる。物理レジスタファイル(複数可)ユニット(複数可)1258は、レジスタリネーミングおよびアウトオブオーダ実行が(例えば、リオーダバッファ(複数可)およびリタイアメントレジスタファイル(複数可)を使用すること、将来ファイル(複数可)、履歴バッファ(複数可)、およびリタイアメントレジスタファイル(複数可)を使用すること、レジスタマップおよびレジスタのプールを使用することなどで)実装され得る様々な方法を示すために、リタイアメントユニット1254と重なっている。リタイアメントユニット1254および物理レジスタファイル(複数可)ユニット(複数可)1258は、実行クラスタ(複数可)1260に接続される。実行クラスタ(複数可)1260には、1または複数の実行ユニット1262のセットおよび1または複数のメモリアクセスユニット1264のセットが含まれる。実行ユニット1262は、様々な演算(例えば、シフト、加算、減算、乗算)を様々な種類のデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に実行してよい。いくつかの実施形態は、特定の機能または機能のセットに専用のいくつかの実行ユニットを含んでもよいが、他の実施形態は、ただ1つの実行ユニットまたはすべてがすべての機能を実行する複数の実行ユニットを含んでもよい。スケジューラユニット(複数可)1256、物理レジスタファイル(複数可)ユニット(複数可)1258、および実行クラスタ(複数可)1260は、特定の実施形態が特定の種類のデータ/演算用の別々のパイプライン(例えばスカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/または各々が独自のスケジューラユニット、物理レジスタファイル(複数可)ユニット、および/もしくは実行クラスタを有するメモリアクセスパイプライン-別個のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット(複数可)1264を有する特定の実施形態が実装される)を作成するので、場合によっては複数であるように示されている。別個のパイプラインが使用される場合、これらのパイプラインのうちの1または複数がアウトオブオーダ発行/実行であり、残りがインオーダであってよいことも理解されたい。
【0118】
メモリアクセスユニット1264のセットは、メモリユニット1270に接続される。メモリユニット1270は、データTLBユニット1272を含む。データTLBユニット1272は、データキャッシュユニット1274に接続される。データキャッシュユニット1274は、レベル2(L2)キャッシュユニット1276に接続される。1つの例示的な実施形態において、メモリアクセスユニット1264は、ロードユニット、ストアアドレスユニット、ストアデータユニットを含むことができ、それぞれがメモリユニット1270内のデータTLBユニット1272に接続される。命令キャッシュユニット1234はさらに、メモリユニット1270内のレベル2(L2)キャッシュユニット1276に接続される。L2キャッシュユニット1276は、1または複数の他のレベルのキャッシュに接続され、最終的にメインメモリに接続される。
【0119】
例として、例示的なレジスタリネーム、アウトオブオーダ発行/実行コアアーキテクチャは、パイプライン1200を以下のように実装し得る。1)命令フェッチ1238は、フェッチステージ1202および長さ復号ステージ1204を実行する。2)復号ユニット1240は、復号ステージ1206を実行する。3)リネーム/アロケータユニット1252は、割り当てステージ1208およびリネームステージ1210を実行する。4)スケジューラユニット1256は、スケジューリングステージ1212を実行する。5)物理レジスタファイルユニット1258およびメモリユニット1270は、レジスタ読み出し/メモリ読み出しステージ1214を実行し、実行クラスタ1260は、実行ステージ1216を実行する。6)メモリユニット1270および物理レジスタファイルユニット1258は、ライトバック/メモリ書き込みステージ1218を実行する。7)様々なユニットは、例外処理ステージ1222に関係し得る。8)リタイアメントユニット1254および物理レジスタファイルユニット1258は、コミットステージ1224を実行する。
【0120】
コア1290は、本明細書において説明される命令(複数可)を含む1または複数の命令セット(例えば、x86命令セット(新しいバージョンで追加された、いくつかの拡張を含む)、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セット、カリフォルニア州サニーベールのARM HoldingsのARM命令セット(NEONなどの任意の追加の拡張を伴う)、IBMの「Power」命令セット、またはRISCおよびCISCの両方の命令セットを含む他の任意の命令セット)をサポートしてよい。一実施形態において、コア1290は、パックドデータ命令セット拡張(例えば、AVX、AVX2、AVX-512)をサポートするロジックを含み、これにより、多くのマルチメディアアプリケーションにより用いられるオペレーションがパックドデータを用いて実行されることを可能にする。
【0121】
コアはマルチスレッディング(オペレーションまたはスレッドの2以上の並列なセットを実行すること)をサポートし得、タイムスライスマルチスレッディング、SMT(例えば、物理コアが同時にマルチスレッディングしているスレッドの各々に対して、単一の物理コアがロジックコアを提供する)、またはそれらの組合せ(例えば、タイムスライスフェッチおよび復号ならびにその後のIntel(登録商標)ハイパースレッディング技術におけるものなどのSMT)を含む様々な態様でサポートしてよいことを理解されたい。
【0122】
レジスタリネームは、アウトオブオーダ実行の文脈で説明されるが、レジスタリネームは、インオーダアーキテクチャで用いられ得ることを理解されたい。図示されたプロセッサの実施形態はまた、別個の命令キャッシュユニット1234およびデータキャッシュユニット1274ならびに共有L2キャッシュユニット1276を含むが、代替の実施形態は、例えば、レベル1(L1)内部キャッシュまたは複数レベルの内部キャッシュなどの、命令とデータとの両方のための単一の内部キャッシュを有してよい。いくつかの実施形態では、システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュとの組合せを含んでもよい。あるいは、全てのキャッシュ(複数可)がコアおよび/またはプロセッサの外部にあってよい。
[例示的コアアーキテクチャ]
【0123】
図13は、本発明の実施形態による、プロセッサに含まれ得る例示的なアウトオブオーダ発行/実行プロセッサコアのブロック図である。図13では、プロセッサコア1300は、フロントエンドユニット1310と、整数ユニット1320と、FPユニット1330と、ロードストアユニット1340と、レベル2(L2)キャッシュユニット1350と、を含む。図13は、例示の目的で提示したものであり、そのため、本発明の実施形態により可能となる多くのアプローチのうちの1つにしたがって構成および命名された様々なユニットを示す。
【0124】
図13では、フロントエンドユニット1310は、分岐予測ユニット1311と、マイクロオペレーションキャッシュ(opキャッシュ)ユニット1312と、命令キャッシュ(iキャッシュ)ユニット1313と、復号ユニット1314と、マイクロオペレーション(マイクロop)キューユニット1315と、を含む。分岐予測ユニット1311は、平均分岐遅延を低減するために、分岐ターゲットバッファ(BTB)などの分岐予測回路を含み、opキャッシュユニット1312およびiキャッシュユニット1313に接続されている。opキャッシュユニット1312は、命令に関連するマイクロopをキャッシュするopキャッシュを含む。iキャッシュ1313ユニットは、一実施形態では64K、4ウェイのiキャッシュであり得る、命令をキャッシュするためのiキャッシュを含む。iキャッシュユニット1313は、復号対象のキャッシュされた命令を提供するために復号ユニット1314に接続される。復号ユニット1314は、命令デコーダなどの、命令を復号するための復号回路を含む。一実施形態では、1クロックサイクルにつき最大4つの命令が、フロントエンドユニット1310によってフェッチされ得、復号ユニット1314によって復号され得る。opキャッシュユニット1312および復号ユニット1314は、マイクロopキューユニット1315にそれぞれ接続されて、マイクロopをマイクロopキューユニット1315にロードするための2つの経路を提供する。マイクロopキュー1315はマイクロopキューを含み、マイクロopキューは、一実施形態では、1サイクル当たり6つのマイクロopを1または複数の実行ユニットにディスパッチすることができる。
【0125】
また図13において、整数ユニット1320は、整数リネーミングユニット1321と、整数スケジューラユニット1322A、1322B、1322C、1322D、1322E、および1322F(まとめて、整数スケジューラユニット1322)と、整数物理レジスタファイル1323と、算術論理ユニット(ALU)1324A、1324B、1324C、および1324D(まとめてALU1324)と、アドレス生成ユニット(AGU)1325Aおよび1325B(まとめて、AGU1325)と、を含む。整数リネーミングユニット1321は、マイクロopキューユニット1315に接続されて、ALU1324および/またはAGU1325のうちの1または複数によって全体的または部分的に実行される1または複数のマイクロopを受信する。整数リネーミングユニット1321はレジスタリネーミング回路を含み、整数スケジューラユニット1322にも接続され、整数スケジューラユニット1322は整数物理レジスタファイル1323に接続されて、整数レジスタリネーミングを提供する。整数スケジューラユニット1322は、ALU1324および/またはAGU1325のうちの1または複数によって全体的にまたは部分的に実行されるマイクロopをスケジューリングするためのスケジューリング回路を含む。整数物理レジスタファイル1323は、実施形態において168個の物理整数レジスタを含み得る物理整数レジスタのファイルを含む。ALU1324およびAGU1325のそれぞれが、マイクロopの実行において入力として使用される値を受信する、および/またはマイクロopの実行の出力としての値を提供するために、物理レジスタファイル1323に接続される。
【0126】
また図13において、FPユニット1330は、FPリネーミングユニット1331と、FPスケジューラユニット1332と、FPレジスタファイル1333と、FP乗算器1334Aおよび1334B(まとめて、FP乗算器1334)と、FP加算器1335Aおよび1335B(まとめて、FP加算器1335)と、を含む。FPリネーミングユニット1331は、マイクロopキューユニット1315に接続されて、FP乗算器1334および/またはFP加算器1335のうちの1または複数によって全体的または部分的に実行される1または複数のマイクロopを受信する。FPリネーミングユニット1331はレジスタリネーミング回路を含み、FPスケジューラユニット1332にも接続され、FPスケジューラユニット1332はFPレジスタファイル1333に接続されて、FPレジスタリネーミングを提供する。FPスケジューラユニット1332は、FP乗算器1334および/またはFP加算器1335のうちの1または複数によって全体的にまたは部分的に実行されるマイクロopをスケジューリングするためのスケジューリング回路を含む。FP乗算器1334およびFP加算器1335のそれぞれが、マイクロopの実行において入力として使用される値を受信する、および/またはマイクロopの実行の出力としての値を提供するために、FPレジスタファイル1333に接続される。
【0127】
また図13において、ロードストアユニット1340は、ロードストアキューユニット1341と、データキャッシュ(dキャッシュ)ユニット1342と、を含む。ロードストアキューユニット1341は、1クロックサイクル当たり2回のロードおよび1回のストアを提供する一実施形態では、ロードオペレーションおよび/またはストアオペレーションのためのメモリアドレスを受信するためにAGU1325に接続された、任意の数のロードキューおよび/またはストアキューを含むことができる。dキャッシュユニット1342は、一実施形態において、マイクロopの実行によって生成され、マイクロopの実行に使用されるデータを受信して提供するために、整数物理レジスタファイル1323、FPレジスタファイル1333、およびロードストアキューユニット1341に接続された、一実施形態では32K、8ウェイのレベル1(L1)dキャッシュであり得る、データをキャッシュするためのdキャッシュを含む。
【0128】
また図13において、L2キャッシュユニット1350は、一実施形態では512K、8ウェイのキャッシュであり得る、命令およびデータをキャッシュするためのL2キャッシュを含む。
[例示的プロセッサアーキテクチャ]
【0129】
図14は、本発明の実施形態による、複数のコアを有することができ、統合メモリコントローラを有することができ、統合グラフィックを有することができる、プロセッサ1400のブロック図である。図14の実線のボックスは、シングルコア1402A、システムエージェント1410、1または複数のバスコントローラユニット1416のセットを有するプロセッサ1400を示すが、任意の追加される破線のボックスは、複数のコア1402A~N、システムエージェントユニット1410における1または複数の統合メモリコントローラユニット(複数可)1414のセット、および専用ロジック1408を有する代替的なプロセッサ1400を示す。
【0130】
このように、プロセッサ1400の複数の異なる実施例は、1)統合グラフィクスおよび/または科学(スループット)ロジック(1または複数のコアを含むとしてよい)である特定用途向けロジック1408と、1以上の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、これら2つの組み合わせ)であるコア1402A~Nとを有するCPU、2)コア1402A~Nが、主にグラフィクスおよび/または科学(スループット)を目的とした多数の特定用途向けコアであるコプロセッサ、および3)コア1402A~Nが多数の汎用インオーダコアであるコプロセッサ、4)別個の入/出力(I/O)ブロックを有する任意の数の分散コアをあらわすコア1402A~Nを含むとしてよい。したがって、プロセッサ1400は、汎用プロセッサ、サーバプロセッサもしくはサーバ環境で使用するための処理要素、コプロセッサ(例えば、セキュリティコプロセッサ)、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックアクセラレータまたはデジタル信号処理(DSP)ユニット、暗号化アクセラレータ、固定機能アクセラレータ、機械学習アクセラレータ、ネットワーキングアクセラレータ、またはコンピュータビジョンアクセラレータなど)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサもしくは処理装置であり得る。プロセッサは、1または複数のチップ上に実装されてよい。プロセッサ1400は、例えば、BiCMOS、CMOS、またはNMOSなどの多数のプロセス技術のいずれかを用いる1または複数の基板の一部であり得、および/または当該基板上に実装されてよい。
【0131】
メモリ階層は、コア内における1または複数のレベルのキャッシュと、1セットまたは1または複数の共有キャッシュユニット1406と、統合メモリコントローラユニット1414のセットに接続された外部メモリ(不図示)とを含む。共有キャッシュユニット1406のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)、または他のレベルのキャッシュなど、1または複数の中間レベルのキャッシュ、または他のレベルのキャッシュ、ラストレベルキャッシュ(LLC)、および/またはこれらの組合せを含んでよい。一実施形態において、リングベース相互接続ユニット1412は統合グラフィックスロジック1408(統合グラフィックスロジック1408は特定用途向けロジックの一例であり、本明細書でそのようにも呼ばれる)、共有キャッシュユニット1406のセットおよびシステムエージェントユニット1410/統合メモリコントローラユニット(複数可)1414を相互接続するが、代替的な実施形態は、そのようなユニットを相互接続するためのよく知られている任意の数の技術を用い得る。一実施形態において、1または複数のキャッシュユニット1406と、コア1402A~Nとの間で一貫性が維持される。
【0132】
いくつかの実施形態において、コア1402A~Nのうちの1または複数は、マルチスレッディングができる。システムエージェント1410は、コア1402A~Nを調整し動作させるこうしたコンポーネントを含む。システムエージェントユニット1410は、例えば、電力制御ユニット(PCU)およびディスプレイユニットを含んでよい。PCUは、コア1402A~Nおよび統合グラフィックスロジック1408の電力状態を管理するのに必要なロジックおよびコンポーネントであってよく、または当該ロジックおよび当該コンポーネントを含んでもよい。ディスプレイユニットは、外部接続された1または複数のディスプレイを駆動するためのものである。
【0133】
複数のコア1402A~Nは、アーキテクチャ命令セットの面で同種または異種であってよい。即ち、コア1402A~Nのうちの2またはそれよりも多いコアは、同一の命令セットを実行し得るが、他のものは、その命令セットまたは異なる命令セットのサブセットのみを実行し得る。
【0134】
図15は、本発明の実施形態による、プロセッサに含まれ得る例示的な中央処理装置(CPU)複合体のブロック図である。一実施形態では、L3キャッシュは、4コアモジュール(CPU複合体またはCCXと呼ばれる)上に分割された8MBの16ウェイキャッシュであり、コア当たり2MBの「スライス」のL3キャッシュを提供する。しかしながら、CCXにおけるL3キャッシュスライスは、L3キャッシュが共有キャッシュになるように実装されている。複数のCCXを単一のプロセッサに含めることができる(例えば、2つのCCXが16MBのL3キャッシュを形成する)。各CCXの8MBキャッシュは別々のものであるため、データが必要か否かを判定するために他のL3キャッシュへの適切なフックと共に4コアモジュールごとの最終レベルのキャッシュとして機能する(L3キャッシュ設計に含まれるプロトコルにより、各コアが他の各コアのL3キャッシュにアクセスできる)。したがって、これらのL1、L2、およびL3キャッシュはコヒーレントキャッシュであり、CCX内およびCCX間のL3キャッシュスライスはキャッシュコヒーレントインターコネクト(キャッシュコヒーレントファブリックとも呼ばれる)によって接続されている。
【0135】
図16は、本発明の実施形態による、プロセッサに含まれ得る例示的なキャッシュ階層のブロック図である。図16では、キャッシュ階層1600は、L1 iキャッシュ1610AおよびL1 dキャッシュ1610B(まとめてL1キャッシュ1610)と、L2命令およびデータキャッシュ1620と、レベル3(L3)の命令およびデータキャッシュ1630と、を含む。一実施形態では、L1キャッシュ1610とL2キャッシュ1620との両方がプライベート/ローカルライトバックキャッシュである一方、L3キャッシュ1630は犠牲キャッシュである。一実施形態では、L1 iキャッシュ1610Aは64KBの4ウェイキャッシュであり、L1 dキャッシュ1610Bは32KBの8ウェイキャッシュであり、L2キャッシュ1620は512KBの8ウェイキャッシュであり、レベル3(L3)キャッシュ1630は、8MBの16ウェイキャッシュである。
[例示的なコンピュータアーキテクチャ]
【0136】
図17~21は、例示的なコンピュータアーキテクチャのブロック図である。ノートパソコン、デスクトップ、ハンドヘルドPC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタルシグナルプロセッサ(DSP)、汎用プロセッサ、サーバ環境で使用するためのサーバプロセッサまたは処理要素、コプロセッサ(例えば、セキュリティコプロセッサ)ハイスループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックスアクセラレータ、暗号化アクセラレータ、固定機能アクセラレータ、機械学習アクセラレータ、ネットワークアクセラレータ、またはコンピュータビジョンアクセラレータなど)、フィールドプログラマブルゲートアレイ、または他の任意のプロセッサまたは処理装置、グラフィック装置、ビデオゲーム装置、セットトップボックス、マイクロコントローラ、携帯電話、携帯型メディアプレーヤ、ハンドヘルド装置、および他の様々な電子デバイスなどの当技術分野で知られている他のシステム設計および構成も適している。一般に、本明細書で開示されたプロセッサおよび/または他の実行ロジックを組み込むことが可能な多様なシステムまたは電子装置が一般的に適している。
【0137】
ここで図17を参照すると、本発明の一実施形態によるシステム1700のブロック図が示されている。システム1700は、1または複数のプロセッサ1710、1715を含み得、これらはコントローラハブ1720に接続されている。一実施形態において、コントローラハブ1720は、グラフィクスメモリコントローラハブ(GMCH)1790および入出力ハブ(IOH)1750(別のチップ上にあるとしてよい)を含む。GMCH1790は、メモリ1740およびコプロセッサ1745が接続されているメモリおよびグラフィクスコントローラを含む。IOH1750は、入出力(I/O)デバイス1760をGMCH1790に接続する。あるいは、メモリおよびグラフィックスコントローラの一方または両方が、(本明細書で説明されるように)プロセッサ内に統合され、メモリ1740およびコプロセッサ1745は、プロセッサ1710と、IOH1750と共に単一チップに入ったコントローラハブ1720とに直接接続される。
【0138】
追加のプロセッサ1715の任意選択の性質は、図17において破線で示される。各プロセッサ1710、1715は、本明細書で説明される処理コアのうち1または複数を含んでよく、何らかのバージョンのプロセッサ1400であってよい。
【0139】
メモリ1740は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、または、これら2つの組合せであってよい。少なくとも一の実施形態について、コントローラハブ1720は、フロントサイドバス(FSB)等のマルチドロップバス、QuickPath Interconnect(QPI)等のポイントツーポイントインタフェース、または、同様の接続1795を介して、プロセッサ(複数可)1710、1715と通信する。
【0140】
一実施形態において、コプロセッサ1745は特定用途プロセッサである(例えば、汎用プロセッサ、サーバプロセッサもしくはサーバ環境で使用するための処理要素、コプロセッサ(例えば、セキュリティコプロセッサ)、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックアクセラレータまたはデジタル信号処理(DSP)ユニット、暗号化アクセラレータ、固定機能アクセラレータ、機械学習アクセラレータ、ネットワーキングアクセラレータ、またはコンピュータビジョンアクセラレータなど)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサもしくは処理装置を含む)。一実施形態において、コントローラハブ1720は統合グラフィックスアクセラレータを含んでよい。
【0141】
物理リソース1710と物理リソース1715との間には、アーキテクチャ、マイクロアーキテクチャ、熱、電力消費の特徴等を含む幅広い価値基準に関して様々な違いが存在し得る。
【0142】
一実施形態において、プロセッサ1710は、一般的な種類のデータ処理オペレーションを制御する命令を実行する。命令に組み込まれているのはコプロセッサ命令であってよい。プロセッサ1710は、これらのコプロセッサ命令を、付属のコプロセッサ1745が実行すべき種類の命令であると認識する。したがって、プロセッサ1710は、これらのコプロセッサ命令(またはコプロセッサ命令を表す制御信号)をコプロセッサバスまたは他の相互接続を使ってコプロセッサ1745に発行する。コプロセッサ1745は、受信したコプロセッサ命令を受け付けて実行する。
【0143】
ここで図18を参照すると、本発明の実施形態による、第1のより具体的な例示的システム1800のブロック図が示されている。図18に示されるように、マルチプロセッサシステム1800はポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続1850を介して接続される第1プロセッサ1870と、第2プロセッサ1880とを含む。プロセッサ1870および1880の各々は、何らかのバージョンのプロセッサ1400であってよい。本発明の一実施形態において、プロセッサ1870および1880はそれぞれ、プロセッサ1710および1715であり、コプロセッサ1838はコプロセッサ1745である。別の実施形態において、プロセッサ1870および1880はそれぞれ、プロセッサ1710、コプロセッサ1745である。
【0144】
統合メモリコントローラ(IMC)ユニット1872および1882を各々含むプロセッサ1870および1880が示される。プロセッサ1870はさらに、自身のバスコントローラユニットの一部として、ポイントツーポイント(P-P)インタフェース1876および1878を含み、同様に、第2プロセッサ1880は、P-Pインタフェース1886および1888を含む。プロセッサ1870、1880は、ポイントツーポイント(P-P)インタフェース1850を介し、P-Pインタフェース回路1878、1888を用いて情報を交換してよい。図18に示されるように、IMC1872および1882は、プロセッサをそれぞれのメモリ、即ちメモリ1832およびメモリ1834に接続する。これらのメモリは、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であってよい。
【0145】
プロセッサ1870、1880は各々、ポイントツーポイントインタフェース回路1876、1894、1886、1898を用い、個々のP-Pインタフェース1852、1854を介してチップセット1890と情報を交換し得る。チップセット1890は、高性能インタフェース1892を介してコプロセッサ1838と任意に情報を交換してよい。一実施形態において、コプロセッサ1838は、例えば、ハイスループットMICプロセッサ、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサなどの特定用途向けプロセッサである。
【0146】
共有キャッシュ(不図示)は、いずれかのプロセッサに含まれ、または両方のプロセッサの外部にあり得るが、プロセッサが低電力モードにされると、どちらかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得るように、P-P相互接続を介してプロセッサとなおも接続され得る。
【0147】
チップセット1890は、インタフェース1896を介して第1バス1816に接続され得る。一実施形態において、第1バス1816は、周辺構成要素相互接続(PCI)バス、またはPCI Expressバス等のバス、または別の第3世代I/O相互接続バスであり得るが、本発明の範囲はそのように限定されない。
【0148】
図18に示されるように、様々なI/Oデバイス1814が、第1バス1816を第2バス1820に接続するバスブリッジ1818と共に、第1バス1816に接続され得る。一実施形態において、汎用プロセッサ、サーバプロセッサもしくはサーバ環境で使用するための処理要素、コプロセッサ(例えば、セキュリティコプロセッサな)、高スループットMICプロセッサ、GPGPUのコプロセッサ、アクセラレータ(例えば、グラフィックアクセラレータまたはデジタル信号処理(DSP)ユニット、暗号化アクセラレータ、固定機能アクセラレータ、機械学習アクセラレータ、ネットワークアクセラレータ、またはコンピュータビジョンアクセラレータなど)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサもしくは処理装置などの、1または複数の追加のプロセッサ(複数可)1815が、第1バス1816に接続されている。一実施形態において、第2バス1820はローピンカウント(LPC)バスであってよい。様々なデバイスが第2バス1820に接続され得、一実施形態において、そのようなデバイスには例えば、キーボードおよび/またはマウス1822、通信デバイス1827、およびストレージユニット1828が含まれ、ストレージユニットには、命令/コードおよびデータ1830を含み得るディスクドライブまたは他の大容量ストレージデバイスなどがある。さらに、オーディオI/O1824が第2バス1820に接続されてよい。他のアーキテクチャも可能であることに留意されたい。例えば、図18のポイントツーポイントアーキテクチャの代わりに、システムがマルチドロップバスアーキテクチャまたは他のそのようなアーキテクチャを実装してよい。
【0149】
ここで図19を参照すると、本発明の実施形態による、第2のより具体的な例示的システム1900のブロック図が示されている。図18および図19内の同様の要素は同様の参照番号を有しており、図18の特定の態様が、図19の他の態様をあいまいにしないように、図19から省略されている。
【0150】
図19は、プロセッサ1870、1880が統合メモリおよびI/O制御ロジック(「CL」)1872および1882を各々含み得ることを示す。したがって、CL1872、1882は、統合メモリコントローラユニットを含み、I/O制御ロジックを含む。図19は、メモリ1832、1834だけがCL1872、1882に接続されているのでなく、I/Oデバイス1914もまた、制御ロジック1872、1882に接続されていることをも示している。レガシI/Oデバイス1915がチップセット1890に接続されている。
【0151】
ここで図20を参照すると、本発明の実施形態によるSoC2000のブロック図が示されている。図14の同種の要素は、同様の参照番号を有している。また、破線枠は、より高度なSoC上の任意選択的な特徴である。図20において、相互接続ユニット(複数可)2002は、キャッシュユニット1404A~Nを含む1または複数のコア1402A~Nのセットおよび共有キャッシュユニット(複数可)1406を含むアプリケーションプロセッサ2010と、システムエージェントユニット1410と、バスコントローラユニット(複数可)1416と、統合メモリコントローラユニット(複数可)1414と、統合グラフィックロジック、画像プロセッサ、オーディオプロセッサ、およびビデオプロセッサ、汎用プロセッサ、サーバプロセッサもしくはサーバ環境で使用するための処理要素、セキュリティコプロセッサ、高スループットMICプロセッサ、GPGPUのコプロセッサ、アクセラレータ(例えば、グラフィックアクセラレータまたはデジタル信号処理(DSP)ユニット、暗号化アクセラレータ、固定機能アクセラレータ、機械学習アクセラレータ、ネットワークアクセラレータ、またはコンピュータビジョンアクセラレータなど)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサもしくは処理装置を含み得る1または複数のコプロセッサ2020のセットと、スタティックランダムアクセスメモリ(SRAM)ユニット2030と、ダイレクトメモリアクセス(DMA)ユニット2032と、1または複数の外部ディスプレイに接続するためのディスプレイユニット2040と、に接続される。一実施形態において、コプロセッサ(複数可)2020は特定用途向けプロセッサを含み、例えば、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、GPGPU、ハイスループットMICプロセッサ、組み込みプロセッサなどがある。
【0152】
ここで図21を参照すると、本発明の実施形態による、SoC2000のブロック図が示される。
[結論]
【0153】
本明細書に開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装アプローチの組合せで実装され得る。本発明の実施形態は、例えば、汎用プロセッサ、サーバプロセッサもしくはサーバ環境で使用するための処理要素、コプロセッサ(例えば、セキュリティコプロセッサ)、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックアクセラレータまたはデジタル信号処理(DSP)ユニット、暗号化アクセラレータ、固定機能アクセラレータ、機械学習アクセラレータ、ネットワーキングアクセラレータ、またはコンピュータビジョンアクセラレータなど)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサもしくは処理装置を含む少なくとも1つのプロセッサと、ストレージシステム(揮発性および不揮発性メモリ、および/またはストレージ要素を含む)と、少なくとも1つの入力デバイスと、少なくとも1つの出力デバイスと、を備える、プログラマブルシステム上で実行するコンピュータプログラムまたはプログラムコードとして実装され得る。
【0154】
図18に示されるコード1830等のプログラムコードは、本明細書に説明される機能を実行して出力情報を生成するべく、入力命令に適用され得る。出力情報は、既知の方式で1または複数の出力装置に適用されてよい。本出願の目的のため、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサのようなプロセッサを有する、任意のシステムを含む。
【0155】
プログラムコードは、高レベル手続き型プログラミング言語またはオブジェクト指向プログラミング言語で実装され、処理システムと通信し得る。プログラムコードはまた、必要な場合、アセンブリ言語または機械語で実装されてもよい。実際、本明細書に記載される機構は、いかなる特定のプログラミング言語にも範囲を限定されない。いずれにせよ、言語は、コンパイラ言語またはインタプリタ言語であり得る。
【0156】
少なくとも一実施形態の1または複数の態様は、プロセッサ内の様々なロジックを表す、機械可読媒体上に格納された代表的な命令により実装され得、命令は、機械により読み出されると、当該機械に本明細書に説明される技術を実行させるためのロジックを生成させる。「IPコア」として知られるこのような表現は、有形の機械可読媒体上に格納され、実際にロジックまたはプロセッサを製造する製造機械にロードするために、様々な顧客または製造施設に供給され得る。
【0157】
このような機械可読格納媒体は、これらに限定されないが、機械またはデバイスで製造または形成される、非一時的で有形の物品の配列を含むとしてよい。ハードディスク、任意のその他の種類のディスク、例えば、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリーメモリ(CD-ROM)、コンパクトディスクリライタブル(CD-RW)および光磁気ディスク、リードオンリーメモリ(ROM)等の半導体デバイス、ダイナミックランダムアクセスメモリ(DRAM)等のランダムアクセスメモリ(RAM)、スタティックランダムアクセスメモリ(SRAM)、消去可能プログラミング可能リードオンリーメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラミング可能リードオンリーメモリ(EEPROM)、相変化メモリ(PCM)、磁気カードもしくは光カード、または、電子命令を格納するのに適した任意のその他の種類の媒体等の格納媒体を含む。
【0158】
したがって、本発明の実施形態は、本明細書に説明される構造体、回路、装置、プロセッサ、および/またはシステム機能を定義するハードウェア記述言語(HDL)等の命令を含むか、または設計データを含む非一時的有形機械可読媒体も含む。そのような実施形態はまた、プログラム製品と呼ばれ得る。
【0159】
本発明の実施形態によるプロセッサコアによって実行される命令は、以下に詳述する「汎用ベクトルフレンドリ命令形式」で実施され得る。他の実施形態では、そのような形式は利用されず、別の命令形式が使用されるが、書き込みマスクレジスタ、様々なデータ変換(スウィズル、ブロードキャストなど)、アドレッシングなどの以下の説明は、一般に上記の命令(複数可)の実施形態の説明に適用され得る。さらに、例示的なシステム、アーキテクチャ、およびパイプラインが下記で詳述される。命令は、そのようなシステム、アーキテクチャ、およびパイプライン上で実行することができるが、詳述されるものに限定されない。
【0160】
いくつかの場合に、命令コンバータは、ソース命令セットからターゲット命令セットへと命令を変換するべく用いられ得る。例えば、命令コンバータは、命令をコアによって処理されるべき1または複数の他の命令に、(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用して)解釈し、モーフィングし、エミュレートし、または場合によっては変換することができる。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組合せとして実装され得る。命令コンバータは、プロセッサ上にあっても、プロセッサ外にあっても、または部分的にプロセッサ上で部分的にプロセッサ外にあってよい。
【0161】
図22は、本発明の実施形態による、ソース命令セットのバイナリ命令を、ターゲット命令セットのバイナリ命令に変換するソフトウェア命令コンバータの使用と対比するブロック図である。図示された実施形態では、命令コンバータはソフトウェア命令コンバータであるが、代替として、命令コンバータはソフトウェア、ファームウェア、ハードウェア、またはそれらの様々な組合せに実装され得る。図22は、x86コンパイラ2204を用いてコンパイルされ、少なくとも1つのx86命令セットコアを持つプロセッサ2216によりネイティブに実行され得るx86バイナリコード2206を生成し得る、ハイレベル言語2202のプログラムを示す。少なくとも1つのx86命令セットコアを持つプロセッサ2216は、少なくとも1つのx86命令セットコアを有するインテルプロセッサと実質的に同じ結果を達成するために、(1)インテルx86命令セットコアの命令セットの大部分、または(2)少なくとも1つのx86命令セットコアを有するインテルプロセッサ上で実行することを目的とするアプリケーションまたは他のソフトウェアのオブジェクトコードバージョンを、互換性を有するように実行するまたは、そうでなければ、処理することにより、少なくとも1つのx86命令セットコアを有するインテルプロセッサと実質的に同じ機能を実行することができる任意のプロセッサを表す。x86コンパイラ2204は、追加のリンク処理の有無にかかわらず、少なくとも1つのx86命令セットコアを持つプロセッサ2216上で実行可能なx86バイナリコード2206(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。同様に、図22は、高レベル言語2202のプログラムが代替の命令セットコンパイラ2208を使用してコンパイルされることによって、少なくとも1つのx86命令セットコアを持たないプロセッサ2214(例えば、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セットを実行する、および/またはカリフォルニア州サニーベールのARM HoldingsのARM命令セットを実行する複数のコアを有するプロセッサ)によってネイティブに実行され得る代替の命令セットバイナリコード2210が生成され得ることを示す。命令コンバータ2212は、x86バイナリコード2206を、x86命令セットコアを持たないプロセッサ2214によってネイティブに実行され得るコードに変換するために用いられる。この変換されたコードは、代替的な命令セットバイナリコード2210と同じになる可能性は低い。なぜなら、これが実現できる命令コンバータを作るのは難しいからである。しかしながら、変換されたコードは一般的なオペレーションを実現し、代替的な命令セットの命令で構成される。したがって、命令コンバータ2212は、エミュレーション、シミュレーション、または任意の他のプロセスを介して、x86命令セットプロセッサまたはコアをもたないプロセッサまたは他の電子デバイスがx86バイナリコード2206を実行することを可能にする、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組合せを表す。
【0162】
フロー図におけるオペレーションは、他の図の例示的な実施形態を参照して説明されている場合がある。しかしながら、フロー図のオペレーションは、他の図を参照して説明された以外の本発明の実施形態により実行可能であり得、他の図を参照して説明される本発明の実施形態は、フロー図を参照して説明されたものとは異なるオペレーションを実行可能であり得ることを理解されたい。さらに、図中のフロー図は、本発明の特定の実施形態によって実行される特定のオペレーション順序を示しているが、そのような順序は例示であることを理解されたい(例えば代替的な実施形態は異なる順序でオペレーションを実行したり、特定のオペレーションを組み合わせたり、特定のオペレーションを重複して実行したりできる)。
【0163】
本発明の実施形態の1または複数の部分は、ソフトウェア、ファームウェア、および/またはハードウェアの異なる組合せを使用して実施することができる。実施形態は、機械可読記憶媒体(例えば、磁気ディスク、光ディスク、読み出し専用メモリ(ROM)、フラッシュメモリ装置、相変化メモリ)および機械可読伝送媒体(搬送波とも呼ばれる)など(例えば、電気、光、無線、音響、または搬送波、赤外線信号などの他の形式の伝播信号)の機械可読媒体(コンピュータ可読媒体とも呼ばれる)を用いて、(ソフトウェア命令で構成され、コンピュータプログラムコードまたはコンピュータプログラムと呼ばれることもある)コードおよび/またはデータを(内部的におよび/またはネットワークを介して他の電子デバイスと共に)格納および伝送する電子デバイスを使用して実装され得る。よって、電子デバイス(例えば、コンピュータ)は、プロセッサのセット上で実行するためのコードを格納する、および/またはデータを格納するために、1または複数の機械可読記憶媒体に接続された1または複数のプロセッサのセットなどのハードウェアおよびソフトウェアを含むことができる。例えば、電子デバイスは、不揮発性メモリは、電子デバイスがオフにされたとき(電源が切られたとき)でもコード/データを持続させることができるため、コードを含む不揮発性メモリを含むことができ、電子デバイスがオンにされている間、その電子デバイスのプロセッサ(複数可)によって実行されるコードの一部は、典型的には、電子デバイスの低速の不揮発性メモリから揮発性メモリ(例えば、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM))にコピーされる。典型的な電子デバイスはまた、(伝播信号を使用してコードおよび/またはデータを送信および/または受信するために)他の電子デバイスとのネットワーク接続を確立するための1または複数の物理ネットワークインタフェース(複数可)のセットを含む。
【0164】
本発明は、いくつかの実施形態に関して説明されているが、当業者は、本発明が説明される実施形態に限定されず、添付の特許請求の範囲の趣旨および範囲内で修正および変更を実施し得ることを理解するであろう。したがって、詳細な説明は、限定的ではなく、例示的なものとしてみなされるべきである。
図1A
図1B
図2
図3
図4
図5
図6
図7
図8A
図8B
図9
図10
図11
図12A
図12B
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22