以下の説明は、プロセスを分岐して、プロセッサ、コンピュータシステム、又は他の処理装置の中の、又はそれに関連したセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令及び処理ロジックを開示する。
例えば、エンクレーブに関連付けられるデータなど、プライベートデータ又は保護されたデータのみを保持する特殊なキャッシュ又はキャッシュの一部において、そのプライベートデータ又は保護されたデータが暗号化されていない場合、そのデータへのアクセスは許可されたプロセッサコア、ハードウェアスレッド、又は論理プロセッサのみに制限され得る。そのようなエンクレーブプライベートメモリは、エンクレーブページキャッシュ(EPC)メモリと呼ばれることもある。他の物理メモリと同様に、EPCは必要に応じてデータ及び/又はコードをページイン及びページアウトすることによって、より大きなプライベートアドレス空間又は保護されたアドレス空間をサポートするよう構成され得る。命令は、セキュアエンクレーブ制御構造データ、アプリケーションデータ、アプリケーションコードなどを格納するために、EPCにおいて親プロセス及び子プロセスのエンクレーブに割り当てられるセキュアストレージのアドレスを指定する。いくつかの実施形態では、親プロセスが実行されてよく、又はシステムソフトウェアガードエクステンション(SGX)ライブラリが、親セキュアエンクレーブ制御構造(SECS)を子プロセスのセキュアストレージ領域にコピーし、一意の子エンクレーブID、及び親のSECS/エンクレーブIDへのリンクを初期化する命令を実行してよい。いくつかの実施形態では、子プロセスが実行されてよく、又はシステムSGXライブラリが、親エンクレーブのページを子のエンクレーブにコピーし(両方のエンクレーブは同じキーを有する)、次にまた、割り込まれた場合には、EPCマッピングのエントリを部分的完了に設定し、子エンクレーブのページ状態を記録する命令を実行してよい。こうして、親エンクレーブのページをコピーする命令を再開することができる。
いくつかの実施形態では、本明細書に開示される命令及びロジックは、プロセスを分岐するSECSコピー及びセキュアエンクレーブ内のページコピー操作において、割り込まれ再開されることが可能である。いくつかの実施形態では、そのような命令は、(例えば、既にセキュアEPCにある)セキュアエンクレーブに割り当てられるページアドレスを指定する。プロセスを分岐してセキュアEPCに子エンクレーブを確立する、そのようなエンクレーブ命令を用いることで、親プロセスが子プロセスを作成(すなわち、分岐)してセキュアEPCに子プロセスエンクレーブのコピーを確立できることが理解されよう。そのような命令に対するプロセッサのサポートを受けずに、同じ(又は類似した)技術的効果を実現する任意のソフトウェアシステムのセキュリティ機能は(仮にも実現可能であれば)、非常に高価になる可能性があり、及び/又は何らかのより弱いセキュリティ対策を不都合にも受け入れることがあるという程度まで限定した性能になり得ることも理解されよう。
以下の説明では、処理ロジック、プロセッサタイプ、マイクロアーキテクチャ条件、イベント、実行可能メカニズムなどの多くの具体的な詳細が、本発明の実施形態のより完全な理解を提供するために明記されている。しかし、そのような具体的な詳細がなくても、本発明は実施できることが、当業者には理解されよう。さらに、本発明の実施形態を不必要にあいまいにしないように、いくつかのよく知られた構造、回路などは詳細に示されていない。
以下の実施形態はプロセッサに関して説明されているが、他のタイプの集積回路及びロジックデバイスには他の実施形態が適用可能である。本発明の実施形態に関する類似の技術及び教示は、他のタイプの回路又は半導体デバイスに適用することができ、当該回路又は半導体デバイスは、より高いパイプラインスループット及び性能の向上によって恩恵を受けることができる。本発明の実施形態の教示は、データ操作を行うあらゆるプロセッサ又は機械に適用可能である。しかし、本発明は512ビット、256ビット、128ビット、64ビット、32ビット、又は16ビットのデータ操作を行うプロセッサ又は機械に限定されず、本発明は、データの操作又は管理が行われるあらゆるプロセッサ及び機械に適用することができる。さらに、以下の説明は複数の例を提供しており、添付図面は例示を目的として様々な例を示している。しかし、これらの例は、本発明の実施形態に関する全ての可能性のある実装を網羅的に列挙して提供するのではなく、単に本発明の実施形態の例を提供することを意図しているので、限定的な意味において解釈されるべきではない。
以下の例は、実行ユニット及びロジック回路との関連で命令の処理及び分配を説明するが、本発明の他の実施形態は、機械により行われると、本発明の少なくとも1つの実施形態と一致する機能を機械に行わせる機械可読で有形の媒体に格納されたデータ及び/又は命令によって実現され得る。1つの実施形態では、本発明の実施形態に関連付けられる機能は、機械実行可能命令で具現化される。命令は、命令でプログラムされる汎用プロセッサ又は専用プロセッサに、本発明の段階を行わせるのに用いることができる。本発明の実施形態は、本発明の実施形態による1つ又は複数のオペレーションを行うために、コンピュータ(又は他の電子デバイス)をプログラムするのに用いることができる命令を格納した機械可読媒体又はコンピュータ可読媒体を含み得るコンピュータプログラム製品又はソフトウェアとして提供されてよい。あるいは、本発明の実施形態の複数の段階は、当該段階を行うための固定機能ロジックを含む特定のハードウェアコンポーネントによって、又はプログラムされたコンピュータコンポーネント及び固定機能ハードウェアコンポーネントの任意の組み合わせによって、行われることもある。
本発明の実施形態を行うロジックをプログラムするのに用いられる命令は、DRAM、キャッシュ、フラッシュメモリ、又は他のストレージなど、システム内のメモリの中に格納することができる。さらに、命令は、ネットワークを介して、又は他のコンピュータ可読媒体によって配信することができる。したがって、機械可読媒体は、機械(例えば、コンピュータ)が可読な形態で、情報を格納又は送信するためのあらゆるメカニズムを含むことができ、当該メカニズムには、限定されないが、フロッピー(登録商標)ディスケット、光ディスク、コンパクトディスクリードオンリメモリ(CD−ROM)、及び光磁気ディスク、並びに、リードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、磁気カード又は光カード、フラッシュメモリ、あるいは、電気、光、音波、又は他の形態の伝搬信号(例えば、搬送波、赤外線信号、デジタル信号など)を介してインターネット上で情報の送信に用いられる有形の機械可読ストレージが含まれる。したがって、コンピュータ可読媒体には、機械(例えば、コンピュータ)が可読な形態で電子命令又は電子情報を格納又は送信するのに適した、あらゆるタイプの有形の機械可読媒体が含まれる。
設計は、作成からシミュレーション、製造まで様々なステージを経ることもある。設計を表すデータは、複数の形式で設計を表すことができる。まず、シミュレーションで役立つように、ハードウェア記述言語又は別の機能記述言語を用いて、ハードウェアを表すことができる。さらに、ロジック及び/又はトランジスタゲートを用いた回路レベルのモデルを、設計プロセスのいくつかのステージで作り出すことができる。さらに、大部分の設計が、どこかのステージにおいて、ハードウェアモデルで様々なデバイスの物理配置を表すデータレベルに到達する。従来の半導体製造技術が用いられる場合には、ハードウェアモデルを表すデータは、集積回路を製造するのに用いられるマスクの異なるマスクレイヤ上に様々な特徴が存在する又は存在しないことを指定するデータであってよい。設計のあらゆる表現において、データは、あらゆる形態の機械可読媒体に格納されてよい。メモリ、あるいはディスクなどの磁気ストレージ又は光ストレージは、光波又は電波を介して送信された情報を格納する機械可読媒体であってよく、光波又は電波は、そのような情報を送信するよう変調される、又は別の方法で生成される。コード又は設計を示す、あるいはそれを搬送する電気搬送波が、電気信号のコピー、バッファリング、再送信が行われるという程度まで送信されると、新たなコピーが作られる。したがって、通信事業者又はネットワーク事業者は、搬送波にエンコードされた情報などの物品を、有形の機械可読媒体に少なくとも一時的に格納して、本発明の実施形態の技術を具現化することができる。
現代のプロセッサでは、複数の異なる実行ユニットが、様々なコード及び命令を処理して実行するのに用いられる。命令によっては、より高速で完了するものもあれば、完了に多くのクロックサイクルを必要とし得るものもあるなど、全ての命令が等しく作成されているわけではない。命令のスループットが高速になればなるほど、プロセッサの全体的な性能もそれだけ良くなる。したがって、多くの命令を可能な限り高速で実行させることが有利であろう。しかし、複雑さがより増して、実行時間及びプロセッサリソースに関してより多くを必要とする特定の命令が存在する。例えば、浮動小数点命令、ロード/ストア演算、データ移動などがある。
より多くのコンピュータシステムがインターネット、テキスト、及びマルチメディアアプリケーションで用いられるにつれ、追加のプロセッササポートが徐々に導入されている。1つの実施形態では、データタイプ、命令、レジスタアーキテクチャ、アドレス指定モード、メモリアーキテクチャ、割り込み処理及び例外処理、並びに外部入力及び出力(I/O)を含む1つ又は複数のコンピュータアーキテクチャに、命令セットが関連付けられてよい。
1つの実施形態では、命令セットアーキテクチャ(ISA)は1つ又は複数のマイクロアーキテクチャで実装されてよく、マイクロアーキテクチャには1つ又は複数の命令セットを実装するのに用いられるプロセッサロジック及び回路が含まれる。代替の実施形態は、マイクロコード、拡張マイクロコード又はマイクロコードアシスト、ハイパーバイザ、バイナリ変換、ハードウェア、再コンパイルなどによって、ISAを実装することができる。したがって、異なるマイクロアーキテクチャを有するプロセッサが、共通の命令セットの少なくとも一部を共有することができる。例えば、Intel(登録商標)のPentium(登録商標)4プロセッサ、Intel(登録商標)のCore(商標)プロセッサ、及びAdvanced Micro Devices,Inc.(カリフォルニア州、サニーベール)のプロセッサは、ほぼ同一バージョンのx86命令セット(より新しいバージョンに追加された、いくつかの拡張を有する)を実装するが、異なる内部設計を有する。同様に、ARM Holdings,Ltd.、MIPSなどの他のプロセッサ開発会社、あるいはこれらのライセンス先又は採用者が設計したプロセッサは、共通の命令セットの少なくとも一部を共有することができるが、異なるプロセッサ設計を含むこともできる。例えば、ISAの同じレジスタアーキテクチャは、異なる方法で、異なるマイクロアーキテクチャに、新たな技術又はよく知られた技術を用いて実装することができ、専用物理レジスタ、レジスタリネーミングメカニズムを用いる(例えば、レジスタエイリアステーブル(RAT)、リオーダバッファ(ROB)及びリタイアメントレジスタファイルを用いる)1つ又は複数の動的に割り当てられる物理レジスタを含む。1つの実施形態では、レジスタは1つ又は複数のレジスタ、レジスタアーキテクチャ、レジスタファイル、又は他のレジスタセットを含んでよく、それらは、ソフトウェアプログラマがアドレス指定可能であってもなくてもよい。
1つの実施形態では、命令は1つ又は複数の命令フォーマットを含むことができる。1つの実施形態では、命令フォーマットは、とりわけ、行われるべき演算、及びその演算が行われるオペランドを指定する様々なフィールド(ビットの数、ビットの位置など)を示すことができる。いくつかの命令フォーマットは、命令テンプレート(又はサブフォーマット)によって、さらに分割され定義されることもある。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するよう定義されてよく、及び/又は異なるように解釈された所与のフィールドを有するよう定義されてもよい。1つの実施形態では、命令は命令フォーマットを用いて(及び、定義されている場合は、命令フォーマットの命令テンプレートのうち所与の1つで)表され、演算及びその演算が処理するオペランドを指定又は示す。
科学アプリケーション、財務アプリケーション、自動ベクトル化された汎用アプリケーション、RMS(認識、マイニング、及び合成)アプリケーション、並びに視覚アプリケーション及びマルチメディアアプリケーション(例えば、2D/3Dグラフィックス、画像処理、映像圧縮/解凍、音声認識アルゴリズム、オーディオ操作)は、同じ演算が多数のデータ項目に対して行われることを必要とし得る。1つの実施形態では、単一命令複数データ(SIMD)は、複数のデータ要素に対して1つの演算をプロセッサに行わせる命令のタイプを指す。SIMD技術は、レジスタ内のビットを複数の固定サイズ又は可変サイズのデータ要素に論理的に分割できるプロセッサに用いることができ、各データ要素は別個の値を表す。例えば、1つの実施形態では、64ビットレジスタ内のビットは、4つの別個の16ビットデータ要素を含むソースオペランドとして編成することができ、各データ要素は別個の16ビット値を表す。このタイプのデータは、「パックド」データタイプ、又は「ベクトル」データタイプと呼ばれることもあり、このデータタイプのオペランドは、パックドデータオペランド又はベクトルオペランドと呼ばれる。1つの実施形態では、パックドデータ項目又はベクトルは、単一のレジスタ内に格納された一連のパックドデータ要素であってよく、パックドデータオペランド又はベクトルオペランドは、SIMD命令(あるいは、「パックドデータ命令」又は「ベクトル命令」)のソースオペランド又はデスティネーションオペランドであってよい。1つの実施形態では、SIMD命令は、2つのソースベクトルオペランドに対して行われる単一のベクトル演算を指定し、同じ又は異なるサイズのデスティネーションベクトルオペランド(結果ベクトルオペランドとも呼ばれる)を、同じ又は異なる数のデータ要素を用いて、同じ又は異なるデータ要素の順序で生成する。
x86命令、MMX(商標)命令、ストリーミングSIMD拡張(SSE)命令、SSE2命令、SSE3命令、SSE4.1命令、及びSSE4.2命令を含む命令セットを有するIntel(登録商標)のCore(商標)プロセッサ、ベクトル浮動小数点(VFP)命令及び/又はNEON命令を含む命令セットを有するARMのCortex(登録商標)ファミリのプロセッサなどのARMプロセッサ、並びに中国科学院の計算技術研究所(ICT)が開発した龍芯(Loongson)ファミリのプロセッサなどMIPSプロセッサにより採用された技術などのSIMD技術は、アプリケーション性能において著しい向上を可能にした(Core(商標)及びMMX(商標)は、Intel(登録商標)Corporation(カリフォルニア州、サンタクララ)の登録商標又は商標である)。
1つの実施形態では、デスティネーション及びソースレジスタ/データは、対応するデータ又は演算のソース及びデスティネーションを表す一般名称である。いくつかの実施形態では、これらは、レジスタ、メモリ、又は示されたもの以外の他の名称又は機能を有する他のストレージ領域により実装されてもよい。例えば、1つの実施形態では、「DEST1」が一時的なストレージレジスタ又は他のストレージ領域であってよく、「SRC1」及び「SRC2」が、第1及び第2のソースストレージレジスタ又は他のストレージ領域であってよい、などである。他の実施形態では、SRCストレージ領域及びDESTストレージ領域のうち2つ又はそれより多くが、同じストレージ領域内(例えば、SIMDレジスタ)の異なるデータストレージエレメントに対応してよい。1つの実施形態では、複数のソースレジスタのうち1つが、例えば、第1のソースデータ及び第2のソースデータに対して行われた演算結果をデスティネーションレジスタとして機能する2つのソースレジスタのうちの1つに書き戻すことによって、デスティネーションレジスタとしても動作してよい。
図1Aは、本発明の1つの実施形態による命令を実行する実行ユニットを含むプロセッサと共に形成された、例示的なコンピュータシステムのブロック図である。システム100は、本明細書で説明される実施形態などにおいて、本発明に従って、プロセスデータ用のアルゴリズムを実行するロジックを含んだ実行ユニットを利用するプロセッサ102などのコンポーネントを含む。システム100は、Intel Corporation(カリフォルニア、サンタクララ)から入手可能なPentium(登録商標)III、Pentium(登録商標)4、Xeon(商標)、Itanium(登録商標)、XScale(商標)、及び/又はStrongARM(商標)マイクロプロセッサに基づく処理システムを代表するものであるが、他のシステム(他のマイクロプロセッサを有するPC、エンジニアリングワークステーション、セットトップボックスなどを含む)が用いられてもよい。1つの実施形態では、例示のシステム100は、Microsoft Corporation(ワシントン州、レドモンド)から入手可能なWindows(登録商標)版のオペレーティングシステムを実行することができるが、他のオペレーティングシステム(例えば、UNIX(登録商標)、Linux(登録商標))、組込みソフトウェア、及び/又はグラフィカルユーザインタフェースが用いられてもよい。したがって、本発明の実施形態は、ハードウェア回路、及びソフトウェアのいかなる具体的な組み合わせにも限定されてはいない。
実施形態はコンピュータシステムに限定されてはいない。本発明の代替の実施形態は、ハンドヘルドデバイス及び組込みアプリケーションなどの他のデバイスにおいて用いられ得る。ハンドヘルドデバイスのいくつかの例には、携帯電話、インターネットプロトコルデバイス、デジタルカメラ、携帯情報端末(PDA)、及びハンドヘルドPCが含まれる。組込みアプリケーションには、マイクロコントローラ、デジタル信号プロセッサ(DSP)、システムオンチップ、ネットワークコンピュータ(NetPC)、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク(WAN)スイッチ、又は少なくとも1つの実施形態に従って1つ又は複数の命令を実行することができる任意の他のシステムが含まれ得る。
図1Aは、本発明の1つの実施形態による少なくとも1つの命令を実行するアルゴリズムを実行する1つ又は複数の実行ユニット108を含んだプロセッサ102と共に形成される、コンピュータシステム100のブロック図である。1つの実施形態は、単一プロセッサのデスクトップ又はサーバシステムとの関連で説明することができるが、代替の実施形態は、マルチプロセッサシステムに含まれ得る。システム100は、「ハブ」システムアーキテクチャの例である。コンピュータシステム100は、データ信号を処理するプロセッサ102を含む。プロセッサ102は、例えば、複合命令セットコンピュータ(CISC)マイクロプロセッサ、縮小命令セットコンピューティング(RISC)マイクロプロセッサ、超長命令語(VLIW)マイクロプロセッサ、命令セットの組み合わせを実装するプロセッサ、又は、デジタル信号プロセッサなどのその他のプロセッサデバイスであり得る。プロセッサ102は、プロセッサ102とシステム100内の他のコンポーネントとの間でデータ信号を送信することができるプロセッサバス110に結合される。システム100の諸要素は、当技術分野に詳しい者によく知られた従来の機能を実行する。
1つの実施形態では、プロセッサ102はレベル1(L1)内部キャッシュメモリ104を含む。アーキテクチャに応じて、プロセッサ102は、単一の内部キャッシュ又は複数レベルの内部キャッシュを有することができる。あるいは、別の実施形態では、キャッシュメモリはプロセッサ102の外部に存在することもできる。他の実施形態は、特定の実装及び必要に応じて、内部キャッシュ及び外部キャッシュの両方の組み合わせを含むこともできる。レジスタファイル106は、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、及び命令ポインタレジスタを含む様々なレジスタに、異なるタイプのデータを格納することができる。
整数及び浮動小数点演算を実行するロジックを含む実行ユニット108も、プロセッサ102内に存在する。プロセッサ102は、特定のマクロ命令用のマイクロコードを格納するマイクロコード(ucode)ROMも含む。1つの実施形態では、実行ユニット108はパックド命令セット109を処理するロジックを含む。命令を実行する関連回路と共に、パックド命令セット109を汎用プロセッサ102の命令セットに含めることで、多くのマルチメディアアプリケーションにより用いられる演算は、汎用プロセッサ102内のパックドデータを用いて実行されてよい。したがって、多くのマルチメディアアプリケーションは、パックドデータに演算を実行するために、プロセッサのデータバスの全幅を用いることで、より効率的に加速され実行され得る。これにより、1つ又は複数の演算を一度に1つのデータ要素に対して実行するために、より小さいユニットのデータをプロセッサのデータバス全体にわたって転送する必要性を排除することができる。
実行ユニット108の代替の実施形態も、マイクロコントローラ、組込みプロセッサ、グラフィックスデバイス、DSP、及び他のタイプのロジック回路に用いられ得る。システム100はメモリ120を含む。メモリ120は、ダイナミックランダムアクセスメモリ(DRAM)デバイス、スタティックランダムアクセスメモリ(SRAM)デバイス、フラッシュメモリデバイス、又は他のメモリデバイスであり得る。メモリ120は、プロセッサ102が実行できるデータ信号で表される命令及び/又はデータを格納することができる。
システムロジックチップ116が、プロセッサバス110及びメモリ120に結合される。例示された実施形態のシステムロジックチップ116はメモリコントローラハブ(MCH)である。プロセッサ102は、プロセッサバス110を介してMCH116と通信することができる。MCH116は、命令及びデータのストレージ用に、並びにグラフィックスコマンド、データ、及びテクスチャのストレージ用に、高帯域幅のメモリパス118をメモリ120に提供する。MCH116は、プロセッサ102、メモリ120、及びシステム100内の他のコンポーネントの間でデータ信号を送信し、プロセッサバス110、メモリ120、及びシステムI/O122の間でデータ信号を橋渡しする。いくつかの実施形態では、システムロジックチップ116は、グラフィックスコントローラ112に結合するためのグラフィックスポートを提供することができる。MCH116は、メモリインタフェース118を通じてメモリ120に結合される。グラフィックスカード112は、加速式グラフィックスポート(AGP)相互接続114を通じてMCH116に結合される。
システム100は、独自のハブインタフェースバス122を用いて、MCH116をI/Oコントローラハブ(ICH)130に結合する。ICH130は、ローカルI/Oバスを介して、いくつかのI/Oデバイスに直接接続を提供する。ローカルI/Oバスは、メモリ120、チップセット、及びプロセッサ102に周辺機器を接続するための高速I/Oバスである。いくつかの例には、オーディオコントローラ、ファームウェアハブ(フラッシュBIOS)128、無線送受信機126、データストレージ124、ユーザ入力及びキーボードインタフェースを含むレガシI/Oコントローラ、ユニバーサルシリアルバス(USB)などのシリアル拡張ポート、並びにネットワークコントローラ134がある。データストレージデバイス124は、ハードディスクドライブ、フロッピー(登録商標)ディスクドライブ、CD−ROMデバイス、フラッシュメモリデバイス、又は他の大容量ストレージデバイスを含むことができる。
システムの別の実施形態では、1つの実施形態による命令が、システムオンチップと共に用いられ得る。システムオンチップの1つの実施形態は、プロセッサ及びメモリを備える。そのような1つのシステムのメモリはフラッシュメモリである。フラッシュメモリは、プロセッサ及び他のシステムコンポーネントと同じダイ上に位置することができる。さらに、メモリコントローラ又はグラフィックスコントローラなどの他のロジックブロックも、システムオンチップ上に位置することができる。
図1Bは、本発明の1つの実施形態の原理を実装するデータ処理システム140を示す。本明細書に説明される実施形態は、本発明の実施形態の範囲から逸脱することなく、代替の処理システムと共に用いられ得ることが、当業者には容易に理解されよう。
コンピュータシステム140は、1つの実施形態による少なくとも1つの命令を実行可能な処理コア159を備える。1つの実施形態では、処理コア159は、限定されないが、CISC、RISC、又はVLIWタイプのアーキテクチャを含むあらゆるタイプのアーキテクチャの処理ユニットを表す。処理コア159はまた、1つ又は複数のプロセス技術で製造するのに適している場合があり、十分な詳細さで機械可読媒体上に表されることで、上記製造を容易にするのに適している場合がある。
処理コア159は、実行ユニット142、レジスタファイル145のセット、及びデコーダ144を含む。処理コア159は、本発明の実施形態を理解するのに必須ではない追加の回路(不図示)も含む。実行ユニット142は、処理コア159が受信した命令を実行するのに用いられる。通常のプロセッサ命令を実行することに加えて、実行ユニット142は、パックドデータフォーマットで演算を実行するために、パックド命令セット143内の命令を実行することができる。パックド命令セット143は、本発明の実施形態を実行するための命令、及び他のパックド命令を含む。実行ユニット142は、内部バスでレジスタファイル145に結合される。レジスタファイル145は、データを含む情報を格納するための、処理コア159上のストレージ領域を表す。前述したように、パックドデータの格納に用いられるストレージ領域は、不可欠ではないことが理解される。実行ユニット142はデコーダ144に結合される。デコーダ144は、処理コア159が受信した命令を、制御信号及び/又はマイクロコードエントリポイントにデコードするのに用いられる。これらの制御信号及び/又はマイクロコードエントリポイントに応答して、実行ユニット142は適切な演算を実行する。1つの実施形態では、デコーダは命令のオペコードを解釈するのに用いられ、それにより、命令内に示された対応するデータに対してどの演算が行われるべきかが示されることになる。
処理コア159は、様々な他のシステムデバイスと通信するためにバス141に結合され、これらのシステムデバイスには、限定されないが、例えば、シンクロナスダイナミックランダムアクセスメモリ(SDRAM)制御146、スタティックランダムアクセスメモリ(SRAM)制御147、バーストフラッシュメモリインタフェース148、パーソナルコンピュータメモリカード国際協会(PCMCIA)/コンパクトフラッシュ(登録商標)(CF)カード制御149、液晶ディスプレイ(LCD)制御150、ダイレクトメモリアクセス(DMA)コントローラ151、及び代替のバスマスタインタフェース152が含まれてよい。1つの実施形態では、データ処理システム140は、I/Oバス153を介して様々なI/Oデバイスと通信するためのI/Oブリッジ154も備えることができる。そのようなI/Oデバイスは、限定されないが、例えば、汎用非同期送受信機(UART)155、ユニバーサルシリアルバス(USB)156、Bluetooth(登録商標)無線UART157、及びI/O拡張インタフェース158を含むことができる。
データ処理システム140の1つの実施形態は、モバイル通信、ネットワーク通信、及び/又は無線通信、並びにテキスト文字列比較演算を含むSIMD演算を実行可能な処理コア159を提供する。処理コア159は、様々なオーディオアルゴリズム、ビデオアルゴリズム、イメージングアルゴリズム、及び通信アルゴリズムを用いてプログラムされてよく、これらのアルゴリズムには、ウォルシュ・アダマール変換、高速フーリエ変換(FFT)、離散コサイン変換(DCT)、及びこれらのそれぞれの逆変換などの離散変換、色空間変換、ビデオエンコード動き推定又はビデオデコード動き補償などの圧縮/解凍技術、並びにパルス符号変調(PCM)などの変調/復調(MODEM)機能が含まれる。
図1Cは、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令を実行することが可能な、データ処理システムの別の代替の実施形態を示す。1つの代替の実施形態において、データ処理システム160は、メインプロセッサ166、SIMDコプロセッサ161、キャッシュメモリ167、及び入出力システム168を含むことができる。入出力システム168はオプションとして、無線インタフェース169に結合されてよい。SIMDコプロセッサ161は、1つの実施形態による命令を含む演算を実行可能である。処理コア170は、1つ又は複数のプロセス技術で製造するのに適している場合があり、十分な詳細さで機械可読媒体上に表されることで、処理コア170を含むデータ処理システム160の全て又は一部の製造を容易にするのに適している場合がある。
1つの実施形態では、SIMDコプロセッサ161は、実行ユニット162及びレジスタファイルのセット164を含む。メインプロセッサ166の1つの実施形態は、実行ユニット162が実行するための1つの実施形態による命令を含む命令セット163の命令を認識するデコーダ165を含む。代替の実施形態では、SIMDコプロセッサ161は、命令セット163の命令をデコードするデコーダ165Bの少なくとも一部も含む。処理コア170は、本発明の実施形態を理解するのに必須ではない追加の回路(不図示)も含む。
演算の際に、メインプロセッサ166は、キャッシュメモリ167及び入出力システム168とのやり取りを含む一般的なタイプのデータ処理操作を制御する一連のデータ処理命令を実行する。SIMDコプロセッサ命令は、一連のデータ処理命令内に組み込まれている。メインプロセッサ166のデコーダ165は、これらのSIMDコプロセッサ命令を、付属のSIMDコプロセッサ161が実行すべきタイプのものであると認識する。したがって、メインプロセッサ166は、これらのSIMDコプロセッサ命令(又は、SIMDコプロセッサ命令を表す制御信号)をコプロセッサバス171上に発行し、そこからSIMDコプロセッサ命令が任意の付属のSIMDコプロセッサにより受信される。この場合、SIMDコプロセッサ161は、SIMDコプロセッサ161を対象とした、あらゆる受信済みのSIMDコプロセッサ命令を受け付けて実行する。
データは、SIMDコプロセッサ命令による処理のために、無線インタフェース169を介して受信されてよい。1つの例では、音声通信がデジタル信号の形態で受信されてよく、デジタル信号は、音声通信を表すデジタルオーディオサンプルを再生成するために、SIMDコプロセッサ命令により処理されてよい。別の例では、圧縮されたオーディオ及び/又はビデオが、デジタルビットストリームの形態で受信されてよく、デジタルビットストリームは、オーディオサンプル及び/又は動画フレームを再生成するために、SIMDコプロセッサ命令により処理されてよい。処理コア170の1つの実施形態では、メインプロセッサ166及びSIMDコプロセッサ161は、実行ユニット162、レジスタファイル164のセット、1つの実施形態による命令を含む命令セット163の命令を認識するデコーダ165を含む単一の処理コア170に統合される。
図2は、本発明の1つの実施形態による命令を実行するロジック回路を含むプロセッサ200に関するマイクロアーキテクチャのブロック図である。いくつかの実施形態では、1つの実施形態による命令が、バイト、ワード、ダブルワード、クワッドワードなどのサイズ、並びに単精度及び倍精度の整数及び浮動小数点データタイプなどのデータタイプを有するデータ要素を処理するために実装され得る。1つの実施形態では、インオーダフロントエンド201は、実行される命令をフェッチして、プロセッサパイプラインにおいて後で用いられるよう当該命令を準備するプロセッサ200の一部である。フロントエンド201は、いくつかのユニットを含むことができる。1つの実施形態では、命令プリフェッチャ226は、メモリから命令をフェッチし、当該命令を命令デコーダ228に提供し、次に命令デコーダは当該命令をデコード又は解釈する。例えば、1つの実施形態では、デコーダは、受信した命令を機械が実行できる「マイクロ命令」又は「マイクロオペレーション」と呼ばれる(マイクロop又はuopとも呼ばれる)1つ又は複数のオペレーションにデコードする。他の実施形態では、デコーダは、1つの実施形態によるオペレーションを実行するために、命令をマイクロアーキテクチャにより用いられるオペコード並びに対応するデータ及び制御フィールドにパースする。1つの実施形態では、トレースキャッシュ230はデコードされたuopを取得し、実行のためにそれらをプログラム順の並びに整理するか、uopキュー234においてトレースする。トレースキャッシュ230が複雑な命令に遭遇すると、マイクロコードROM232は、オペレーションを完了するのに必要なuopを提供する。
いくつかの命令は単一のマイクロopに変換され、他の命令は全オペレーションを完了するのにいくつかのマイクロopを必要とする。1つの実施形態では、命令を完了するのに4つより多くのマイクロopを必要とする場合、デコーダ228はマイクロコードROM232にアクセスして命令を実行する。1つの実施形態では、命令は、命令デコーダ228で処理するために、少数のマイクロopにデコードされ得る。別の実施形態では、オペレーションを実現するのに多数のマイクロopが必要となる場合、命令はマイクロコードROM232の中に格納され得る。トレースキャッシュ230とは、1つの実施形態による1つ又は複数の命令を完了するマイクロコードシーケンスをマイクロコードROM232から読み出すための正しいマイクロ命令ポインタを決定するエントリポイントプログラマブルロジックアレイ(PLA)を指す。マイクロコードROM232が、命令用のマイクロopを順番に並べ終えた後に、機械のフロントエンド201は、トレースキャッシュ230からマイクロopをフェッチすることを再開する。
アウトオブオーダ実行エンジン203は、命令が実行のために準備される場所である。アウトオブオーダ実行ロジックは複数のバッファを有し、実行のために命令がパイプラインを下り、スケジューリングされるときに性能を最適化するよう、命令のフローを滑らかにし並べ替える。アロケータロジックは、各uopが実行するために必要な機械バッファ及びリソースを割り当てる。レジスタリネーミングロジックは、ロジックレジスタをレジスタファイルのエントリ上にリネームする。アロケータはまた、メモリスケジューラ、高速スケジューラ202、低速/汎用浮動小数点スケジューラ204、及び簡易浮動小数点スケジューラ206といった命令スケジューラの前段にある、1つはメモリ演算用、もう1つは非メモリ演算用となる2つのuopキューの一方に、uopごとのエントリを割り当てる。uopスケジューラ202、204、206は、これらのスケジューラが依存する入力レジスタのオペランドソースの準備状況と、uopがそのオペレーションを完了するのに必要な実行リソースの可用性とに基づいて、uopがいつ実行の準備ができるかを決定する。1つの実施形態の高速スケジューラ202は、メインクロックサイクルの各半周期においてスケジューリングすることができ、その他のスケジューラは、メインプロセッサのクロックサイクルごとに一度だけスケジューリングすることができる。スケジューラは、実行のためにuopをスケジューリングするよう、ディスパッチポートを調整する。
レジスタファイル208、210は、スケジューラ202、204、206と、実行ブロック211内の実行ユニット212、214、216、218、220、222、224との間に位置する。別個のレジスタファイル208、210がそれぞれ、整数演算用及び浮動小数点演算用に存在する。1つの実施形態の各レジスタファイル208、210には、レジスタファイルにまだ書き込まれていない完了したばかりの結果を、新たに依存するuopにバイパス又は転送することができるバイパスネットワークも含まれる。整数レジスタファイル208及び浮動小数点レジスタファイル210は、他方とデータを通信することもできる。1つの実施形態では、整数レジスタファイル208は2つの別個のレジスタファイルに分割され、一方のレジスタファイルはデータの下位32ビット用、もう一方のレジスタファイルがデータの上位32ビット用である。1つの実施形態の浮動小数点レジスタファイル210が128ビット幅のエントリを有するのは、通常、浮動小数点命令が64ビットから128ビットまでの幅のオペランドを有するからである。
実行ブロック211は、実行ユニット212、214、216、218、220、222、224を含み、ここで命令が実際に実行される。この部分には、マイクロ命令が実行に必要とする、整数データオペランド値及び浮動小数点データオペランド値を格納するレジスタファイル208、210が含まれる。1つの実施形態のプロセッサ200は複数の実行ユニット、すなわち、アドレス生成ユニット(AGU)212、AGU214、高速ALU216、高速ALU218、低速ALU220、浮動小数点ALU222、浮動小数点移動ユニット224から構成される。1つの実施形態では、浮動小数点実行ブロック222、224は、浮動小数点演算、MMX演算、SIMD演算、及びSSE演算、又は他の演算を実行する。1つの実施形態の浮動小数点ALU222は、除算マイクロop、平方根マイクロop、及び剰余マイクロopを実行する64ビット×64ビットの浮動小数点除算器を含む。本発明の実施形態では、浮動小数点値を含む命令は、浮動小数点ハードウェアで処理されてよい。1つの実施形態では、ALU演算は、高速ALU実行ユニット216、218を使う。1つの実施形態の高速ALU216、218は、クロックサイクル半分の実効レイテンシで高速演算を実行することができる。1つの実施形態では、大部分の複雑な整数演算は低速ALU220を使うが、それは、低速ALU220が、乗算器、シフト、フラグロジック、及び分岐処理など、長レイテンシタイプの演算用の整数実行ハードウェアを含むからである。メモリロード/ストア演算は、AGU212、214により実行される。1つの実施形態では、整数ALU216、218、220は、64ビットデータオペランドで整数演算を実行するという状況で説明される。代替の実施形態では、ALU216、218、220は、16ビット、32ビット、128ビット、256ビットなどを含む様々なデータビットをサポートするよう実装され得る。同様に、浮動小数点ユニット222、224は、様々な幅のビットを有する様々なオペランドをサポートするよう実装され得る。1つの実施形態では、浮動小数点ユニット222、224は、128ビット幅のパックドデータオペランドをSIMD命令及びマルチメディア命令と共に処理し得る。
1つの実施形態では、uopスケジューラ202、204、206は、親ロードが実行を終了する前に、依存演算をディスパッチする。uopは、プロセッサ200において投機的にスケジューリングされ実行されるので、プロセッサ200はメモリミスを処理するロジックも含む。データロードがデータキャッシュで失敗した場合、一時的に不正確なデータのままスケジューラを離れたインフライトの依存演算がパイプラインに存在する可能性がある。やり直しメカニズムが、不正確なデータを用いる命令を追跡して再実行する。依存演算だけがやり直される必要があり、独立演算は完了することが可能である。プロセッサの1つの実施形態に関するスケジューラ及びやり直しメカニズムは、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令も捕らえるよう設計される。
「レジスタ」という用語は、オペランドを識別する命令の一部として用いられるオンボードプロセッサのストレージ位置を指すことができる。換言すれば、レジスタは、(プログラマの視点で)プロセッサの外側から使用可能なレジスタであってよい。しかし、実施形態のレジスタは、特定のタイプの回路に意味が限定されるべきではない。むしろ、実施形態のレジスタはデータを格納し提供すること、及び本明細書で説明される機能を実行することが可能である。本明細書で説明されるレジスタは、専用物理レジスタ、レジスタリネーミングを用いて動的に割り当てられる物理レジスタ、専用物理レジスタと動的に割り当てられる物理レジスタとの組み合わせなどの任意の数の異なる技術を用いて、プロセッサ内の回路により実装され得る。1つの実施形態では、整数レジスタが32ビット整数データを格納する。1つの実施形態のレジスタファイルはまた、パックドデータ用の8つのマルチメディアSIMDレジスタを含む。以下の議論では、レジスタは、Intel Corporation(カリフォルニア州、サンタクララ)のMMX技術を用いて可能となるマイクロプロセッサの64ビット幅のMMX(商標)レジスタ(いくつかの例では、「mm」レジスタとも呼ばれる)など、パックドデータを保持するよう設計されたデータレジスタであると理解される。これらのMMXレジスタは、整数及び浮動小数点の両方の形態で利用可能であり、SIMD命令及びSSE命令に付随するパックドデータ要素を用いて動作し得る。同様に、SSE2、SSE3、SSE4、又はそれ以降(「SSEx」と総称して呼ばれる)の技術に関する128ビット幅のXMMレジスタも、そのようなパックドデータオペランドを保持するのに用いられ得る。1つの実施形態では、パックドデータ及び整数データを格納するときに、レジスタは、その2つのデータタイプを区別する必要はない。1つの実施形態では、整数及び浮動小数点は、同じレジスタファイルに含まれているか、異なるレジスタファイルに含まれているかのいずれかである。さらに、1つの実施形態では、浮動小数点データ及び整数データは、異なるレジスタに格納されても、同じレジスタに格納されてもよい。
以下の図の例では、複数のデータオペランドが説明される。図3Aは、本発明の1つの実施形態によるマルチメディアレジスタにおいて、様々なパックドデータタイプの表現を示す。図3Aは、128ビット幅オペランド用のパックドバイト310、パックドワード320、及びパックドダブルワード(dword)330のデータタイプを示す。この例のパックドバイトフォーマット310は128ビット長であり、16個のパックドバイトデータ要素を含む。バイトは、ここでは8ビットのデータと定義される。バイトデータ要素ごとの情報は、バイト0ではビット7〜ビット0に、バイト1ではビット15〜ビット8に、バイト2ではビット23〜ビット16に、そして最後にバイト15ではビット120〜ビット127に格納される。したがって、全ての利用可能なビットがレジスタで用いられる。このストレージ構成で、プロセッサのストレージ効率が増加する。また、16個のデータ要素にアクセスして、今では、1つの演算が16個のデータ要素に対して並列に実行され得る。
一般に、データ要素とは、単一のレジスタ又はメモリ位置に同じ長さの他のデータ要素と共に格納される個々のデータである。SSEx技術に関するパックドデータシーケンスでは、XMMレジスタに格納されるデータ要素の数は、128ビットを個々のデータ要素のビット長で除算したものである。同様に、MMX及びSSE技術に関するパックドデータシーケンスでは、MMXレジスタに格納されるデータ要素の数は、64ビットを個々のデータ要素のビット長で除算したものである。図3Aに示されるデータタイプは128ビット長であるが、本発明の実施形態は、64ビット幅、256ビット幅、512ビット幅、又は他のサイズのオペランドでも動作し得る。この例のパックドワードフォーマット320は128ビット長であり、8個のパックドワードデータ要素を含む。各パックドワードは16ビットの情報を含む。図3Aのパックドダブルワードフォーマット330は128ビット長であり、4個のパックドダブルワードデータ要素を含む。各パックドダブルワードデータ要素は32ビットの情報を含む。パックドクワッドワードは128ビット長であり、2個のパックドクワッドワードデータ要素を含む。
図3Bは、代替のレジスタ内のデータストレージフォーマットを示す。各パックドデータは、1つより多くの独立データ要素を含み得る。3つのパックドデータフォーマットである、パックドハーフ341、パックドシングル342、及びパックドダブル343が示される。パックドハーフ341、パックドシングル342、及びパックドダブル343の1つの実施形態には、固定小数点のデータ要素が含まれる。代替の実施形態では、パックドハーフ341、パックドシングル342、及びパックドダブル343のうち1つ又は複数は、浮動小数点のデータ要素を含むことができる。パックドハーフ341の1つの代替の実施形態は128ビット長であり、8個の16ビットデータ要素を含む。パックドシングル342の1つの実施形態は128ビット長であり、4個の32ビットデータ要素を含む。パックドダブル343の1つの実施形態は128ビット長であり、2個の64ビットデータ要素を含む。そのようなパックドデータフォーマットはさらに、他のレジスタ長、例えば、96ビット、160ビット、192ビット、224ビット、256ビット、512ビット、又はそれより多くに拡張されてもよいことが理解されよう。
図3Cは、本発明の1つの実施形態によるマルチメディアレジスタにおいて、様々な符号付き及び符号なしのパックドデータタイプの表現を示す。符号なしパックドバイト表現344が、SIMDレジスタにおける符号なしパックドバイトのストレージを示す。バイトデータ要素ごとの情報は、バイト0ではビット7〜ビット0に、バイト1ではビット15〜ビット8に、バイト2ではビット23〜ビット16になど、そして最後にバイト15ではビット120〜ビット127に格納される。したがって、全ての利用可能なビットがレジスタで用いられる。このストレージ構成で、プロセッサのストレージ効率が増加し得る。また、16個のデータ要素にアクセスして、今では、1つの演算が16個のデータ要素に対して並列方式で実行され得る。符号付きパックドバイト表現345が、符号付きパックドバイトのストレージを示す。各バイトデータ要素の8番目のビットは符号標識であることに留意されたい。符号なしパックドワード表現346は、ワード7〜ワード0がどのようにSIMDレジスタに格納されるかを示す。符号付きパックドワード表現347は、符号なしパックドワードレジスタ内表現346に類似している。各ワードデータ要素の16番目のビットは符号標識であることに留意されたい。符号なしパックドダブルワード表現348は、ダブルワードデータ要素がどのように格納されるかを示す。符号付きパックドダブルワード表現349は、符号なしパックドダブルワードレジスタ内表現348に類似している。必要な符号ビットは、各ダブルワードデータ要素の32番目のビットであることに留意されたい。
図3Dは、32ビット又はそれより多くのビットを有するオペレーションエンコーディング(オペコード)フォーマット360と、レジスタ/メモリオペランドのアドレス指定モードに関する1つの実施形態を表現したものであり、これらは、Intel Corporation(カリフォルニア州、サンタクララ)のワールドワイドウェブ(www)intel.com/products/processor/manuals/から入手可能な、「Intel(登録商標)64及びIA−32 Intel(登録商標)アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル(2A及び2Bの合体版):命令セットリファレンスA−Z」に説明されるオペコードフォーマットのタイプに対応する。1つの実施形態では、命令はフィールド361及び362のうち1つ又は複数によってエンコードされてよい。1つの命令当たり2つまでのオペランド位置が識別されてよく、それらには2つまでのソースオペランド識別子364及び365が含まれる。1つの実施形態では、デスティネーションオペランド識別子366はソースオペランド識別子364と同じであるが、他の実施形態ではこれらは異なる。代替の実施形態では、デスティネーションオペランド識別子366はソースオペランド識別子365と同じであるが、他の実施形態ではこれらは異なる。1つの実施形態では、ソースオペランド識別子364及び365により識別されるソースオペランドのうち1つが、命令の結果で上書きされるが、他の実施形態では、識別子364はソースレジスタ要素に対応し、識別子365はデスティネーションレジスタ要素に対応する。1つの実施形態では、オペランド識別子364及び365は、32ビット又は64ビットのソースオペランド及びデスティネーションオペランドを識別するのに用いられてもよい。
図3Eは、別の代替のオペレーションエンコーディング(オペコード)フォーマット370の表現であり、40ビット又はそれより多くのビットを有する。オペコードフォーマット370はオペコードフォーマット360に対応し、オプションのプリフィックスバイト378を有する。1つの実施形態による命令は、フィールド378、371、及び372のうち1つ又は複数によってエンコードされてよい。1つの命令当たり2つまでのオペランド位置が、ソースオペランド識別子374及び375、並びにプリフィックスバイト378によって識別されてよい。1つの実施形態では、プリフィックスバイト378は、32ビット又は64ビットのソースオペランド及びデスティネーションオペランドを識別するのに用いられてもよい。1つの実施形態では、デスティネーションオペランド識別子376はソースオペランド識別子374と同じであるが、他の実施形態ではこれらは異なる。代替の実施形態では、デスティネーションオペランド識別子376はソースオペランド識別子375と同じであるが、他の実施形態ではこれらは異なる。1つの実施形態では、命令は、オペランド識別子374及び375により識別されるオペランドのうち1つ又は複数を処理し、オペランド識別子374及び375により識別される1つ又は複数のオペランドは命令の結果によって上書きされるが、他の実施形態では、識別子374及び375により識別されたオペランドは、別のレジスタ内の別のデータ要素に書き込まれる。オペコードフォーマット360及び370は、MODフィールド363及び373、並びにオプションのスケール・インデックス・ベース・バイト及び変位バイトにより部分的に指定される、レジスタ・ツー・レジスタのアドレス指定、メモリ・ツー・レジスタのアドレス指定、レジスタ・バイ・メモリのアドレス指定、レジスタ・バイ・レジスタのアドレス指定、レジスタ・バイ・即値のアドレス指定、レジスタ・ツー・メモリのアドレス指定を可能にする。
次に図3Fを参照すると、いくつかの代替の実施形態では、64ビット(又は128ビット、又は256ビット、又は512ビット、又はそれより多くのビット)の単一命令複数データ(SIMD)算術演算が、コプロセッサデータ処理(CDP)命令によって実行されてよい。オペレーションエンコーディング(オペコード)フォーマット380は、CDPオペコードフィールド382及び389を有するそのようなCDP命令の1つを表す。代替の実施形態では、そのタイプのCDP命令演算は、フィールド383、384、387、及び388のうち1つ又は複数によってエンコードされてよい。1つの命令当たり3つまでのオペランド位置が識別されてよく、それらには2つまでのソースオペランド識別子385及び390、並びに1つのデスティネーションオペランド識別子386が含まれる。コプロセッサの1つの実施形態は、8ビット値、16ビット値、32ビット値、及び64ビット値を処理することができる。1つの実施形態では、命令は整数データ要素に対して実行される。いくつかの実施形態では、命令は、条件フィールド381を用いて、条件付きで実行されてよい。いくつかの実施形態では、ソースデータサイズがフィールド383によりエンコードされてよい。いくつかの実施形態では、ゼロ(Z)、ネガティブ(N)、キャリー(C)、及びオーバーフロー(V)の検出が、SIMDフィールド上で行われ得る。いくつかの命令では、そのタイプのサチュレーションは、フィールド384によりエンコードされてよい。
次に参照する図3Gは、別の実施形態に従って、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する、別の代替のオペレーションエンコーディング(オペコード)フォーマット397の表現であり、Intel Corp.(カリフォルニア州、サンタクララ)のワールドワイドウェブ(www)intel.com/products/processor/manuals/から入手可能な、「Intel(登録商標)アドバンスト・ベクトル・エクステンション・プログラミング・リファレンス」に説明されるオペコードフォーマットのタイプに対応する。
最初のx86命令セットは、様々なフォーマットのアドレスシラブル、及び第1の「オペコード」バイトから存在が知られていた追加のバイトに含まれる即値オペランドを有する、1バイトのオペコードを規定した。さらに、特定のバイト値が存在し、そのバイト値はオペコードに対する修飾子として確保された(修飾子は、命令の前に配置する必要があったので、プリフィックスと呼ばれる)。元のパレットの256個のオペコードバイト(これらの特殊なプリフィックス値を含む)が使い尽くされた場合、新たなセットの256個のオペコードに逃れる手段として、単一のバイトが充てられた。ベクトル命令(例えば、SIMD)が追加されたとき、より多くのオペコードの必要性が生まれ、プリフィックスを用いて拡張した場合でさえ、「2バイト」のオペコードマップも不十分であった。このため、2バイトに加えてオプションのプリフィックスを識別子として用いる追加のマップに、新たな命令が追加された。
さらに、64ビットモードの追加のレジスタを助けるために、追加のプリフィックス(「REX」と呼ばれる)が、プリフィックスとオペコード(及び、オペコードの決定に必要なあらゆるエスケープバイト)との間に用いられてもよい。1つの実施形態では、REXは、64ビットモードの追加のレジスタを用いることを示す4つの「ペイロード」ビットを有することができる。他の実施形態では、「ペイロード」ビットは、4つより少ない、又は4つより多いビットを有してもよい。少なくとも1つの命令セットの一般的なフォーマット(概ね、フォーマット360及び/又はフォーマット370に対応する)が、以下のフォーマットによって一般的に示される。つまり、[prefixes] [rex] escape [escape2] opcode modrm(など)である。
オペコードフォーマット397はオペコードフォーマット370に対応し、大部分の他の一般的に用いられるレガシ命令プリフィックスバイト及びエスケープコードに取って代わるオプションのVEXプリフィックスバイト391(1つの実施形態では、16進のC4から始まる)を有する。例えば、図3Hは、命令をエンコードする2つのフィールドを用いる実施形態を示し、これは、第2のエスケープコードが元の命令に存在する場合、又はREXフィールド内の追加のビット(例えば、XBフィールド及びWフィールド)を用いる必要がある場合に用いられてよい。図3Hが示す実施形態では、レガシのエスケープが新たなエスケープ値で表され、レガシのプリフィックスが「ペイロード」バイトの一部として十分に圧縮され、レガシのプリフィックスが再利用されて今後の拡張に利用可能であり、第2のエスケープコードは「マップ」フィールドに圧縮されて、今後のマップ又は特徴空間が利用可能であり、新たな機能が追加される(例えば、ベクトル長の拡大、追加のソースレジスタ指定子)。
1つの実施形態による命令は、フィールド391及び392のうち1つ又は複数によりエンコードされてよい。1つの命令当たり4つまでのオペランド位置が、ソースオペランド識別子374及び375と組み合わせて、またオプションのスケール・インデックス・ベース(SIB)識別子393、オプションの変位識別子394、及びオプションの即値バイト395と組み合わせて、フィールド391により識別されてよい。1つの実施形態では、VEXプリフィックスバイト391が、32ビット又は64ビットのソースオペランド及びデスティネーションオペランド、及び/又は、128ビット又は256ビットのSIMDレジスタ又はメモリオペランドを識別するのに用いられてよい。1つの実施形態では、オペコードフォーマット397により提供される機能は、オペコードフォーマット370と共に冗長であってよいが、他の実施形態ではこれらは異なる。オペコードフォーマット370及び397は、MODフィールド373、並びにオプションの(SIB)識別子393、オプションの変位識別子394、及びオプションの即値バイト395により部分的に指定される、レジスタ・ツー・レジスタのアドレス指定、メモリ・ツー・レジスタのアドレス指定、レジスタ・バイ・メモリのアドレス指定、レジスタ・バイ・レジスタのアドレス指定、レジスタ・バイ・即値のアドレス指定、レジスタ・ツー・メモリのアドレス指定を可能にする。
次に参照する図3Jは、別の実施形態に従って、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する、別の代替のオペレーションエンコーディング(オペコード)フォーマット398の表現である。オペコードフォーマット398は、オペコードフォーマット370及び397に対応し、大部分の他の一般的に用いられるレガシ命令プリフィックスバイト及びエスケープコードに取って代わり、追加の機能を提供する、オプションのEVEXプリフィックスバイト396(1つの実施形態では、16進の62から始まる)を有する。1つの実施形態による命令は、フィールド396及び392のうち1つ又は複数によりエンコードされてよい。1つの命令当たり4つまでのオペランド位置及び1つのマスクが、ソースオペランド識別子374及び375と組み合わせて、またオプションのスケール・インデックス・ベース(SIB)識別子393、オプションの変位識別子394、及びオプションの即値バイト395と組み合わせて、フィールド396により識別されてよい。1つの実施形態では、EVEXプリフィックスバイト396が、32ビット又は64ビットのソースオペランド及びデスティネーションオペランド、及び/又は、128ビット、256ビット、又は512ビットのSIMDレジスタ又はメモリオペランドを識別するのに用いられてよい。1つの実施形態では、オペコードフォーマット398により提供される機能は、オペコードフォーマット370又は397と共に冗長であってよいが、他の実施形態ではこれらは異なる。オペコードフォーマット398は、MODフィールド373、並びにオプションの(SIB)識別子393、オプションの変位識別子394、及びオプションの即値バイト395により部分的に指定される、マスクを用いた、レジスタ・ツー・レジスタのアドレス指定、メモリ・ツー・レジスタのアドレス指定、レジスタ・バイ・メモリのアドレス指定、レジスタ・バイ・レジスタのアドレス指定、レジスタ・バイ・即値のアドレス指定、レジスタ・ツー・メモリのアドレス指定を可能にする。少なくとも1つの命令セットの一般的なフォーマット(概ね、フォーマット360及び/又はフォーマット370に対応する)が、以下のフォーマットによって一般的に示される。つまり、evexl RXBmmmmm WvvvLpp evex4 opcode modrm [sib] [disp] [imm]である。
1つの実施形態では、EVEXフォーマット398に従ってエンコードされる命令は、例えば、ユーザ設定可能なマスクレジスタ、又は追加のオペランド、あるいは128ビット、256ビット、又は512ビットのベクトルレジスタ、又は選択対象となるさらに大きいレジスタの中から選択したものなど、追加の新たな機能を用いて、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立するのに用いられ得る追加の「ペイロード」ビットを有することができる。例えば、VEXフォーマット397は、マスクのない命令に用いられてよく、EVEXフォーマット398は、明確なユーザ設定可能なマスクを有する命令に用いられてよい。さらに、VEXフォーマット397は、128ビット又は256ビットのベクトルレジスタを用いる命令に用いられてよく、EVEXフォーマット398は、128ビット、256ビット、512ビット、又はより大きいビット(又はより小さいビット)のベクトルレジスタを用いる命令に用いられてよい。
プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する例示的な命令又はコマンドが、以下の例によって示される。
上記の例示的な命令は、セキュアエンクレーブ制御構造データ、アプリケーションデータ、アプリケーションコードなどを格納するために、EPCにおいて親プロセス及び子プロセスのエンクレーブに割り当てられるセキュアストレージのアドレスを暗黙的に又は明示的に指定することができる。いくつかの実施形態では、親プロセスが実行されてよく、又はシステムソフトウェアガードエクステンション(SGX)ライブラリが、親セキュアエンクレーブ制御構造(SECS)を子プロセスのセキュアストレージ領域にコピーし、一意の子エンクレーブID、及び親のSECS/エンクレーブIDへのリンクを初期化する命令を実行してよい。いくつかの実施形態では、子プロセスが実行されてよく、又はシステムSGXライブラリが、親エンクレーブのページを子のエンクレーブにコピーし(両方のエンクレーブは同じキーを有する)、次にまた、割り込まれた場合には、EPCマッピングのエントリを部分的完了に設定し、子エンクレーブのページ状態を記録する命令を実行してよい。したがって、親エンクレーブのページをコピーする命令を再開することができる。
いくつかの実施形態では、本明細書に開示される命令及びロジックは、プロセスを分岐するSECSコピー及びセキュアエンクレーブ内のページコピー操作において、割り込まれ再開されることが可能である。したがって、プロセスを分岐してセキュアエンクレーブのページの子コピーを確立することに関するフォワードプログレスを保証することができ、音声、映像、リアルタイムのトランザクションなどのサービスにおける容認できないトラブルは、タイムリーなサービス保留割り込みにより回避され得る。いくつかの実施形態では、親エンクレーブのページを子のエンクレーブにコピーする最後の命令を示すために、コピー終了フラグが設定されてもよい。コピー終了フラグが設定されている場合、命令が完了に成功すると、親のSECS/エンクレーブIDへのリンクが子SECSから除去されてよい。いくつかの実施形態では、親のSECS/エンクレーブIDへのリンクが除去されるまで、アプリケーションは、子プロセスのエンクレーブからアクセス/実行されなくてよい。プロセスを分岐してセキュアEPCに子エンクレーブを確立するそのようなエンクレーブ命令を用いることで、親プロセスはセキュアに、子プロセスを作成(すなわち、分岐)してEPCに子プロセスエンクレーブのコピーを確立できることが理解されよう。そのような命令に対するプロセッサのサポートを受けずに、同じ(又は類似した)技術的効果を実現する任意のソフトウェアシステムのセキュリティ機能は(仮にも実現可能であれば)、非常に高価になる可能性があり、及び/又は何らかのより弱いセキュリティ対策を不都合にも受け入れることがあるという程度まで限定した性能になる得ることも理解されよう。
パーミッションの管理、物理メモリ及び/又はマッピングの変更は、まだOSで管理されてよいが、セキュアエンクレーブ内と同じようにメモリコンテンツが保護されている場合、OSは、エンクレーブプライベートメモリの実際の保護されたコンテンツにアクセスすることに、許可も信頼も与えられないことも理解されよう。OSを信頼できなくても、プライベートメモリコンテンツのセキュリティ及び/又は完全性を保証し、プロセスを分岐してページの子コピーを確立することに関する技術的制約を管理することは、精巧なハードウェアサポート及び/又は設計努力を必要とすることなく、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令及び処理ロジックを用いて実現され得る。
図4Aは、本発明の少なくとも1つの実施形態による、インオーダパイプライン、及びレジスタリネーミングステージ、アウトオブオーダ発行/実行パイプラインを示すブロック図である。図4Bは、本発明の少なくとも1つの実施形態によるプロセッサに含まれる、インオーダアーキテクチャコア、及びレジスタリネーミングロジック、アウトオブオーダ発行/実行ロジックを示すブロック図である。図4Aの実線枠はインオーダパイプラインを示し、破線枠はレジスタリネーミング、アウトオブオーダ発行/実行パイプラインを示す。同様に、図4Bの実線枠はインオーダアーキテクチャロジックを示し、破線枠はレジスタリネーミングロジック及びアウトオブオーダ発行/実行ロジックを示す。
図4Aにおいて、プロセッサパイプライン400には、フェッチステージ402、レングスデコードステージ404、デコードステージ406、割り当てステージ408、リネーミングステージ410、スケジューリング(ディスパッチ又は発行としても知られる)ステージ412、レジスタ読み出し/メモリ読み出しステージ414、実行ステージ416、ライトバック/メモリ書き込みステージ418、例外処理ステージ422、及びコミットステージ424が含まれる。
図4Bにおいて、矢印は、2つ又はそれより多くのユニットの間の結合を示し、矢印の方向は、これらのユニット間のデータフローの方向を示す。図4Bは、実行エンジンユニット450に結合されたフロントエンドユニット430を含むプロセッサコア490を示し、実行エンジンユニット450及びフロントエンドユニット430は両方ともメモリユニット470に結合される。
コア490は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、あるいはハイブリッド又は代替のコアタイプであってよい。さらに別のオプションとして、コア490は、例えば、ネットワークコア又は通信コア、圧縮エンジン、グラフィックスコアなどの専用コアであってもよい。
フロントエンドユニット430には、命令キャッシュユニット434に結合された分岐予測ユニット432が含まれ、命令キャッシュユニット434は命令トランスレーションルックアサイドバッファ(TLB)436に結合され、TLB436は命令フェッチユニット438に結合され、命令フェッチユニット438はデコードユニット440に結合される。デコードユニット又はデコーダは命令をデコードし、1つ又は複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、又は他の制御信号を出力として生成することができ、これらは元の命令からデコードされる、あるいは別の方法で元の命令を反映する、又は元の命令から派生する。デコーダは、様々な異なるメカニズムを用いて実装されてよい。好適なメカニズムの例には、限定されないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)などが含まれる。命令キャッシュユニット434はさらに、メモリユニット470内のレベル2(L2)キャッシュユニット476に結合される。デコードユニット440は、実行エンジンユニット450内のリネーム/アロケータユニット452に結合される。
実行エンジンユニット450には、リタイアメントユニット454と、1つ又は複数のスケジューラユニット456のセットとに結合された、リネーム/アロケータユニット452が含まれる。スケジューラユニット456は任意の数の異なるスケジューラを表し、リザベーションステーション、中央命令ウィンドウなどを含む。スケジューラユニット456は、物理レジスタファイルユニット458に結合される。それぞれの物理レジスタファイルユニット458は1つ又は複数の物理レジスタファイルを表し、その異なる複数の物理レジスタファイルが、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点などの1つ又は複数の異なるデータタイプ、ステータス(例えば、実行される次の命令のアドレスである命令ポインタ)などを格納する。物理レジスタファイルユニット458は、リタイアメントユニット454が重ねられており、レジスタリネーミング及びアウトオブオーダ実行が(例えば、リオーダバッファ及びリタイアメントレジスタファイルを用いる、フューチャファイル、履歴バッファ、及びリタイアメントレジスタファイルを用いる、レジスタマップ及びレジスタのプールを用いるなどして)実装され得る様々な方法を示す。概して、アーキテクチャレジスタは、プロセッサの外側から、又はプログラマの視点から可視である。レジスタは、いかなる既知の特定のタイプの回路にも限定されない。本明細書で説明されるようなデータを格納し提供できる限りにおいて、様々な異なるタイプのレジスタが適している。好適なレジスタの例には、限定されないが、専用物理レジスタ、レジスタリネーミングを用いて動的に割り当てられる物理レジスタ、専用物理レジスタと動的に割り当てられる物理レジスタとの組み合わせなどが含まれる。リタイアメントユニット454及び物理レジスタファイルユニット458は、実行クラスタ460に結合される。実行クラスタ460には、1つ又は複数の実行ユニット462のセット及び1つ又は複数のメモリアクセスユニット464のセットが含まれる。実行ユニット462は、様々な演算(例えば、シフト、加算、減算、乗算)を様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して実行することができる。いくつかの実施形態は、特定の機能又は機能のセットに専用の多くの実行ユニットを含むことができるが、他の実施形態は、1つの実行ユニットだけ、又は全ての機能を全てが実行する複数の実行ユニットを含んでもよい。スケジューラユニット456、物理レジスタファイルユニット458、及び実行クラスタ460は、場合によっては複数であるとして示されており、それは、特定の実施形態が特定のタイプのデータ/演算用に別個のパイプラインを作成するからである(例えば、スカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、及び/又はメモリアクセスパイプラインであり、それぞれ独自のスケジューラユニット、物理レジスタファイルユニット、及び/又は実行クラスタを有し、別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタだけがメモリアクセスユニット464を有する特定の実施形態が実装される)。別個のパイプラインが用いられる場合、これらのパイプラインのうち1つ又は複数がアウトオブオーダ発行/実行であってよく、その他がインオーダであってよいことも理解されたい。
メモリアクセスユニット464のセットはメモリユニット470に結合され、メモリユニット470には、レベル2(L2)キャッシュユニット476に結合されたデータキャッシュユニット474に結合されたデータTLBユニット472が含まれる。例示的な1つの実施形態において、メモリアクセスユニット464は、ロードユニット、ストアアドレスユニット、ストアデータユニットを含むことができ、それぞれがメモリユニット470内のデータTLBユニット472に結合される。L2キャッシュユニット476は、1つ又は複数の他のレベルのキャッシュに結合され、最終的にメインメモリに結合される。
例として、例示的なレジスタリネーミング、アウトオブオーダ発行/実行コアのアーキテクチャは、以下のようにパイプライン400を実装することができる。1)命令フェッチ438はフェッチステージ402及びレングスデコードステージ404を実行する。2)デコードユニット440はデコードステージ406を実行する。3)リネーム/アロケータユニット452は割り当てステージ408及びリネーミングステージ410を実行する。4)スケジューラユニット456はスケジューリングステージ412を実行する。5)物理レジスタファイルユニット458及びメモリユニット470はレジスタ読み出し/メモリ読み出しステージ414を実行し、実行クラスタ460は実行ステージ416を実行する。6)メモリユニット470及び物理レジスタファイルユニット458はライトバック/メモリ書き込みステージ418を実行する。7)様々なユニットが例外処理ステージ422に関与することができる。8)リタイアメントユニット454及び物理レジスタファイルユニット458はコミットステージ424を実行する。
コア490は、1つ又は複数の命令セット(例えば、x86命令セット(より新しいバージョンに追加された、いくつかの拡張を有する)、MIPS Technologies(カリフォルニア州、サニーベール)のMIPS命令セット、ARM Holdings(カリフォルニア州、サニーベール)のARM命令セット(NEONなどのオプションの追加拡張を有する))をサポートすることができる。
コアはマルチスレッディング(2つ又はそれより多くの並列セットの演算又はスレッドを実行すること)をサポートすることができ、タイムスライスマルチスレッディング、同時マルチスレッディング(この場合、物理的コアが同時にマルチスレッディングするスレッドごとに、単一の物理的コアが論理コアを提供する)、又はこれらの組み合わせ(例えば、Intel(登録商標)ハイパースレッディングテクノロジに見られるような、タイムスライスフェッチ及びデコード、並びにその後の同時マルチスレッディング)を含む様々な方法でマルチスレッディングを行うことができることを理解されたい。
レジスタリネーミングがアウトオブオーダ実行との関連で説明されるが、レジスタリネーミングはインオーダアーキテクチャで用いられてよいことを理解されたい。示されたプロセッサの実施形態は、別個の命令キャッシュユニット434及びデータキャッシュユニット474、並びに共有のL2キャッシュユニット476も含むが、代替の実施形態は、命令及びデータの両方に対して、例えば、レベル1(L1)内部キャッシュなどの単一の内部キャッシュ、又は複数レベルの内部キャッシュなどを有してよい。いくつかの実施形態では、システムは、内部キャッシュと、コア及び/又はプロセッサの外部にある外部キャッシュとの組み合わせを含んでよい。あるいは、全てのキャッシュがコア及び/又はプロセッサの外部にあってもよい。
図5は、本発明の実施形態による、統合メモリコントローラ及び統合グラフィックスを有するシングルコアプロセッサ及びマルチコアプロセッサ500のブロック図である。図5の実線枠は、シングルコア502A、システムエージェント510、1つ又は複数のバスコントローラユニット516のセットを有するプロセッサ500を示し、オプション追加の破線枠は、複数のコア502A〜N、システムエージェントユニット510内の1つ又は複数の統合メモリコントローラユニット514のセット、統合グラフィックスロジック508を有する代替のプロセッサ500を示す。
メモリ階層には、コア内の1つ又は複数のレベルのキャッシュ、共有キャッシュユニット506のセットあるいは1つ又は複数の共有キャッシュユニット506、及び統合メモリコントローラユニット514のセットに結合された外部メモリ(不図示)が含まれる。共有キャッシュユニット506のセットには、レベル2(L2)、レベル3(L3)、レベル4(L4)、又は他のレベルのキャッシュなどの1つ又は複数の中間レベルキャッシュ、ラストレベルキャッシュ(LLC)、及び/又はこれらの組み合わせが含まれてよい。1つの実施形態では、リングベースの相互接続ユニット512が、統合グラフィックスロジック508、共有キャッシュユニット506のセット、システムエージェントユニット510を相互接続するが、代替の実施形態は、そのようなユニットの相互接続のために任意の数のよく知られた技術を用いてよい。
いくつかの実施形態では、コア502A〜Nのうち1つ又は複数は、マルチスレッディングが可能である。システムエージェント510には、コア502A〜Nを調整し動作させるそれらのコンポーネントが含まれる。システムエージェントユニット510には、例えば、出力制御ユニット(PCU)及びディスプレイユニットが含まれてよい。PCUは、コア502A〜N及び統合グラフィックスロジック508の電力状態を管理するのに必要なロジック及びコンポーネントであってよく、又はこれらを含んでよい。ディスプレイユニットは、外部接続された1つ又は複数のディスプレイを駆動するためのものである。
コア502A〜Nは、アーキテクチャ及び/又は命令セットに関して、同種であっても異種であってもよい。例えば、コア502A〜Nのうちいくつかはインオーダ型であってよく、他のものはアウトオブオーダ型である。別の例として、コア502A〜Nのうち2つ又はそれより多くは同じ命令セットを実行することができてよく、他のものは当該命令セットのサブセットだけ又は異なる命令セットを実行することができてよい。
プロセッサは、Core(商標)i3、i5、i7、2 Duo、及びQuad、Xeon(商標)、Itanium(商標)、XScale(商標)、又はStrongARM(商標)プロセッサなどの汎用プロセッサであってよく、これらはIntel Corporation(カリフォルニア州、サンタクララ)から入手可能である。あるいは、プロセッサは、ARM Holdings,Ltd、MIPSなどの別の会社のものであってもよい。プロセッサは、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、コプロセッサ、組込みプロセッサなどの専用プロセッサであってもよい。プロセッサは、1つ又は複数のチップに実装されてよい。プロセッサ500は、例えば、BiCMOS、CMOS、又はNMOSなどの多数のプロセス技術のうちいずれかを用いる1つ又は複数の基板の一部であってよく、及び/又は当該基板上に実装されてよい。
図6〜図8は、プロセッサ500を含むのに適した例示的なシステムであり、図9は、複数のコア502のうち1つ又は複数を含むことができる例示的なシステムオンチップ(SoC)である。ラップトップ、デスクトップ、ハンドヘルドPC、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯型メディアプレーヤ、ハンドヘルドデバイス、及び様々な他の電子デバイスのための、当技術分野で知られた他のシステム設計及びシステム構成も好適である。一般に、本明細書に開示されるプロセッサ及び/又は他の実行ロジックを組み込むことができる多様なシステム又は電子デバイスが、概ね好適である。
ここで図6を参照すると、本発明の1つの実施形態によるシステム600のブロック図が示されている。システム600は、1つ又は複数のプロセッサ610、615を含むことができ、これらはグラフィックスメモリコントローラハブ(GMCH)620に結合される。オプション的な性質の追加のプロセッサ615は、図6では破線で示されている。
各プロセッサ610、615は、プロセッサ500の何らかのバージョンであってよい。しかし、統合グラフィックスロジック及び統合メモリ制御ユニットがプロセッサ610、615の中に存在する可能性は低いことに留意されたい。図6は、GMCH620がメモリ640に結合されてよいことを示し、メモリ640は、例えば、ダイナミックランダムアクセスメモリ(DRAM)であってよい。DRAMは、少なくとも1つの実施形態では、不揮発性キャッシュと関連付けられてよい。
GMCH620はチップセットであっても、チップセットの一部であってもよい。GMCH620は、プロセッサ610、615と通信することができ、プロセッサ610、615とメモリ640との間のやり取りを制御することができる。GMCH620は、プロセッサ610、615とシステム600の他の要素との間のアクセラレーテッドバスインタフェースとして動作することもできる。少なくとも1つの実施形態では、GMCH620は、フロントサイドバス(FSB)695などのマルチドロップバスを介して、プロセッサ610、615と通信する。
さらに、GMCH620はディスプレイ645(フラットパネルディスプレイなど)に結合される。GMCH620は、統合グラフィックスアクセラレータを含むことができる。GMCH620はさらに、入力/出力(I/O)コントローラハブ(ICH)650に結合され、ICH650は、様々な周辺デバイスをシステム600に結合するのに用いられてよい。例えば、図6の実施形態には、外部グラフィックスデバイス660が示されており、これは、別の周辺デバイス670と共にICH650に結合された別個のグラフィックスデバイスであってよい。
あるいは、追加のプロセッサ又は異なるプロセッサもシステム600に存在してよい。例えば、追加のプロセッサ615には、プロセッサ610と同じ追加のプロセッサ、プロセッサ610に対して異種又は非対称の追加のプロセッサ、アクセラレータ(例えば、グラフィックスアクセラレータ、又はデジタル信号処理(DSP)ユニットなど)、フィールドプログラマブルゲートアレイ、又はその他のプロセッサが含まれてよい。物理リソース610と615との間には、アーキテクチャ上の特性、マイクロアーキテクチャ上の特性、熱特性、電力消費特性などを含む様々な価値基準に関して、様々な差異が存在し得る。これらの差異は、プロセッサ610と615との間の非対称性及び異種性として、効果的に現れ得る。少なくとも1つの実施形態では、様々なプロセッサ610、615は同じダイパッケージの中に存在することができる。
ここで図7を参照すると、本発明のある実施形態による第2のシステム700のブロック図が示されている。図7に示されるように、マルチプロセッサシステム700はポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続750を介して結合された第1のプロセッサ770及び第2のプロセッサ780を含む。プロセッサ770及び780のそれぞれは、プロセッサ610及び615のうち1つ又は複数と同じように、プロセッサ500の何らかのバージョンであってよい。
2つのプロセッサ770、780だけで示されているが、本発明の範囲はそのように限定されてはいないことを理解されたい。他の実施形態では、1つ又は複数の追加のプロセッサが所与のプロセッサ内に存在することができる。
プロセッサ770及び780はそれぞれ、統合メモリコントローラユニット772及び782を含んで示されている。プロセッサ770は、そのバスコントローラユニットの一部として、ポイントツーポイント(P−P)インタフェース776及び778も含み、同様に第2のプロセッサ780はP−Pインタフェース786及び788を含む。プロセッサ770、780は、ポイントツーポイント(P−P)インタフェース750を介し、P−Pインタフェース回路778、788を用いて、情報を交換することができる。図7に示されるように、IMC772及び782はプロセッサをそれぞれのメモリ、すなわちメモリ732及びメモリ734に結合し、これらのメモリはそれぞれのプロセッサにローカルに取り付けられたメインメモリの一部であってよい。
プロセッサ770、780はそれぞれ、個々のP−Pインタフェース752、754を介し、ポイントツーポイントインタフェース回路776、794、786、798を用いて、チップセット790と情報を交換することができる。チップセット790は、高性能グラフィックスインタフェース739を介し、高性能グラフィックス回路738と情報を交換することもできる。
共有キャッシュ(不図示)がどちらかのプロセッサに含まれても、両方のプロセッサの外側にあってもよいが、P−P相互接続を介してプロセッサに接続されており、その結果、プロセッサが低電力モードに置かれた場合に、どちらかのプロセッサ又は両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得る。
チップセット790は、インタフェース796を介して第1のバス716に結合されてよい。1つの実施形態では、第1のバス716は、ペリフェラルコンポーネントインターコネクト(PCI)バス、あるいはPCIエクスプレスバス又は別の第3世代I/O相互接続バスなどのバスであってよいが、本発明の範囲はそのように限定されてはいない。
図7に示されるように、様々なI/Oデバイス714が、第1のバス716を第2のバス720に結合するバスブリッジ718と共に、第1のバス716に結合されてよい。1つの実施形態では、第2のバス720はローピンカウント(LPC)バスであってよい。1つの実施形態では、様々なデバイスが第2のバス720に結合されてよく、それらのデバイスには、例えば、キーボード及び/又はマウス722、通信デバイス727、並びに命令/コード及びデータ730を含むことができるディスクドライブ又は他の大容量ストレージデバイスなどのストレージユニット728が含まれる。さらに、オーディオI/O724が第2のバス720に結合されてよい。他のアーキテクチャも可能であることに留意されたい。例えば、システムは、図7のポイントツーポイントアーキテクチャの代わりに、マルチドロップバス又は他のそのようなアーキテクチャを実装することができる。
ここで図8を参照すると、本発明のある実施形態による第3のシステム800のブロック図が示されている。図7及び図8の同様の要素は同様の参照符号を有しており、図7の特定の態様が図8から省略されているのは、図8の他の態様を不明瞭にしないためである。
図8は、プロセッサ870、880がそれぞれ、統合メモリ及びI/O制御ロジック(「CL」)872及び882を含み得ることを示す。少なくとも1つの実施形態では、CL872、882は、図5及び図7に関して上述されたような統合メモリコントローラユニットを含むことができる。さらに、CL872、882はI/O制御ロジックも含むことができる。図8は、メモリ832、834だけがCL872、882に結合されるのではなく、I/Oデバイス814も制御ロジック872、882に結合されることを示している。レガシI/Oデバイス815がチップセット890に結合される。
ここで図9を参照すると、本発明のある実施形態によるSoC900のブロック図が示されている。図5の類似の要素は、同様の参照符号を有する。また、破線枠は、より高度なSoCに関するオプション機能である。図9では、相互接続ユニット902が、1つ又は複数のコア502A〜Nのセット及び共有キャッシュユニット506を含むアプリケーションプロセッサ910と、システムエージェントユニット510と、バスコントローラユニット516と、統合メモリコントローラユニット514と、統合グラフィックスロジック508を含むことができる1つ又は複数のメディアプロセッサ920のセットと、スチルカメラ機能及び/又はビデオカメラ機能を提供するためのイメージプロセッサ924と、ハードウェアオーディオアクセラレーションを提供するためのオーディオプロセッサ926と、ビデオエンコード/デコードアクセラレーションを提供するためのビデオプロセッサ928と、スタティックランダムアクセスメモリ(SRAM)ユニット930と、ダイレクトメモリアクセス(DMA)ユニット932と、1つ又は複数の外部ディスプレイに結合するためのディスプレイユニット940とに結合される。
図10は、中央処理装置(CPU)及びグラフィックス処理ユニット(GPU)を含むプロセッサを示し、これらは、1つの実施形態による少なくとも1つの命令を実行することができる。1つの実施形態では、少なくとも1つの実施形態によるオペレーションを実行する命令が、CPUにより実行され得る。別の実施形態では、命令はGPUにより実行され得る。さらに別の実施形態では、命令は、GPU及びCPUにより実行されるオペレーションの組み合わせによって実行されてよい。例えば、1つの実施形態では、1つの実施形態による命令が、GPU上で実行されるために受信されデコードされてよい。しかし、デコードされた命令内の1つ又は複数のオペレーションはCPUにより実行されてよく、その結果は、命令の最終リタイアメントのためにGPUに返されてよい。逆に、いくつかの実施形態では、CPUは一次プロセッサとして動作してよく、GPUはコプロセッサとして動作してよい。
いくつかの実施形態では、高度に並列化されたスループットの高いプロセッサから恩恵を受ける命令はGPUにより実行されてよく、深くパイプライン化されたアーキテクチャから恩恵を受けるプロセッサの性能から恩恵を受ける命令はCPUにより実行されてよい。例えば、グラフィックス、科学アプリケーション、財務アプリケーション、及び他の並列ワークロードは、GPUの性能から恩恵を受けてよく、それに応じて実行されてよいが、オペレーティングシステムのカーネル又はアプリケーションコードなどのよりシーケンシャルなアプリケーションは、CPUにより好適であってよい。
図10において、プロセッサ1000には、CPU1005、GPU1010、イメージプロセッサ1015、ビデオプロセッサ1020、USBコントローラ1025、UARTコントローラ1030、SPI/SDIOコントローラ1035、ディスプレイデバイス1040、高精細度マルチメディアインタフェース(HDMI(登録商標))コントローラ1045、MIPIコントローラ1050、フラッシュメモリコントローラ1055、デュアルデータレート(DDR)コントローラ1060、セキュリティエンジン1065、及びI2S/I2C(Integrated Interchip Sound/Inter−Integrated Circuit)インタフェース1070が含まれる。他のロジック及び回路が図10のプロセッサに含まれてよく、それらには、より多くのCPU又はGPU、及び他のペリフェラルインタフェースコントローラが含まれる。
少なくとも1つの実施形態の1つ又は複数の態様が、プロセッサ内の様々なロジックを表す機械可読媒体に格納された典型的なデータによって実装されてよく、そのデータは、機械により読み出されると、本明細書で説明される技術を実行するロジックを機械に作らせる。「IPコア」として知られるそのような表現は、有形の機械可読媒体(「テープ」)に格納され、実際にロジック又はプロセッサを作る製造機械にロードするために、様々な顧客又は製造施設に供給されてよい。例えば、ARM Holdings,Ltd.が開発したCortex(商標)ファミリのプロセッサなどのIPコア、及び中国科学院の計算技術研究所(ICT)が開発した龍芯(Loongson)のIPコアが、Texas Instruments、Qualcomm、Apple、又はSamsungなどの様々な顧客又はライセンス先に販売又はライセンス供与されてよく、これらの顧客又はライセンス先によって製造されたプロセッサに実装されてよい。
図11は、1つの実施形態によるIPコアの開発を説明するブロック図を示す。ストレージ1130には、シミュレーションソフトウェア1120、及び/又は、ハードウェア又はソフトウェアモデル1110が含まれる。1つの実施形態では、IPコア設計を表すデータは、メモリ1140(例えば、ハードディスク)、有線接続1150(例えば、インターネット)、又は無線接続1160を介してストレージ1130に提供され得る。シミュレーションツール及びモデルにより生成されるIPコア情報は次に、少なくとも1つの実施形態による少なくとも1つの命令を実行するIPコアがサードパーティにより製造され得る製造施設に送信され得る。
いくつかの実施形態では、1つ又は複数の命令は、第1のタイプ又はアーキテクチャ(例えば、x86)に対応し、異なるタイプ又はアーキテクチャのプロセッサ(例えば、ARM)上で変換又はエミュレートされてよい。したがって、1つの実施形態によれば、命令は、ARM、x86、MIPS、GPU、あるいは他のプロセッサタイプ又はアーキテクチャを含む任意のプロセッサ又はプロセッサタイプ上で実行されてよい。
図12は、1つの実施形態に従って、第1のタイプの命令が異なるタイプのプロセッサによってどのようにエミュレートされるかを示す。図12において、プログラム1205は、1つの実施形態による命令として、同じ機能又は実質的に同じ機能を実行することができるいくつかの命令を含む。しかし、プログラム1205の命令は、プロセッサ1215と異なる又は非互換であるタイプ及び/又はフォーマットのものであってよく、このことは、プログラム1205内のタイプの命令を、プロセッサ1215がネイティブに実行できなくてもよいことを意味する。しかし、エミュレーションロジック1210を用いて、プログラム1205の命令は、プロセッサ1215がネイティブに実行できる命令に変換される。1つの実施形態では、エミュレーションロジックはハードウェアで具現化される。別の実施形態では、エミュレーションロジックは、プログラム1205の命令タイプをプロセッサ1215がネイティブに実行可能なタイプに変換するソフトウェアを含む有形の機械可読媒体で具現化される。他の実施形態では、エミュレーションロジックは、固定機能のハードウェア又はプログラマブルなハードウェアと、有形の機械可読媒体に格納されたプログラムとの組み合わせである。1つの実施形態では、プロセッサはエミュレーションロジックを含み、他の実施形態では、エミュレーションロジックはプロセッサの外側に存在して、サードパーティにより提供される。1つの実施形態では、プロセッサは、プロセッサに含まれる又はプロセッサに関連付けられるマイクロコード又はファームウェアを実行することで、ソフトウェアを含む有形の機械可読媒体で具現化されたエミュレーションロジックをロードすることができる。
図13は、本発明の実施形態による、ソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換するソフトウェア命令変換器の使用を対比するブロック図である。示された実施形態では、命令変換器はソフトウェア命令変換器であるが、代わりに命令変換器は、ソフトウェア、ファームウェア、ハードウェア、又はこれらの様々な組み合わせで実装されてもよい。図13は、高水準言語1302のプログラムがx86コンパイラ1304を用いてコンパイルされ、少なくとも1つのx86命令セットコアを搭載するプロセッサ1316がネイティブに実行できるx86バイナリコード1306を生成できることを示す。少なくとも1つのx86命令セットコアを搭載するプロセッサ1316は、少なくとも1つのx86命令セットコアを搭載するIntel(登録商標)プロセッサと実質的に同じ結果を実現するために、(1)Intel(登録商標)x86命令セットコアの命令セットの大部分、又は(2)少なくとも1つのx86命令セットコアを搭載するIntel(登録商標)プロセッサ上で動作させることを目的としたオブジェクトコード形式のアプリケーション又は他のソフトウェアを、互換的に実行する、又は別の方法で処理することで、少なくとも1つのx86命令セットコアを搭載するIntel(登録商標)プロセッサと実質的に同じ機能を実行し得る任意のプロセッサを表す。x86コンパイラ1304は、追加のリンケージ処理があってもなくても、少なくとも1つのx86命令セットコアを搭載するプロセッサ1316上で実行され得るx86バイナリコード1306(例えば、オブジェクトコード)を生成するよう動作可能なコンパイラを表す。同様に、図13は、高水準言語1302のプログラムが、別の命令セットコンパイラ1308を用いてコンパイルされ、少なくとも1つのx86命令セットコアを搭載しないプロセッサ1314(例えば、MIPS Technologies(カリフォルニア州、サニーベール)のMIPS命令セットを実行するコア、及び/又は、ARM Holdings(カリフォルニア州、サニーベール)のARM命令セットを実行するコアを搭載したプロセッサ)がネイティブに実行できる別の命令セットバイナリコード1310を生成できることを示す。命令変換器1312は、x86バイナリコード1306を、x86命令セットコアを搭載しないプロセッサ1314がネイティブに実行できるコードに変換するのに用いられる。この変換されたコードは、別の命令セットバイナリコード1310と同じである可能性は低い。なぜなら、これが実現できる命令変換器を作るのは難しいからである。しかし、変換されたコードは一般的なオペレーションを実現し、別の命令セットの命令で構成される。したがって、命令変換器1312は、エミュレーション、シミュレーション、又はその他の処理を通じて、x86命令セットプロセッサ又はコアを持たないプロセッサ又は他の電子デバイスがx86バイナリコード1306を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、又はこれらの組み合わせを表す。
図14Aは、セキュアエンクレーブページキャッシュEPC1460にマルチプロセッシング能力を提供する処理システム1401の実施形態を示しており、そのマルチプロセッシング能力には、プロセスを分岐して、セキュアエンクレーブページキャッシュに子エンクレーブを確立する子エンクレーブ作成命令を用いることが含まれる。システム1401には、システムメモリ1490及びプロセッサ1402が含まれる。プロセッサ1402は、第1のハードウェアスレッド又は論理プロセッサ1420と、第2のハードウェアスレッド又は論理プロセッサ1430とを有する。プロセッサ1402は、簡略化のために、それぞれ単一のハードウェアスレッドを表す2つの論理プロセッサを有するものとして示されているが、本発明はそのように限定されてはいないことが理解されよう。例えば、プロセッサ1402などのプロセッサ、又は本明細書に示される他のプロセッサが、いくつかの論理プロセッサコアを有することは通常のことであり、それらの論理プロセッサコアは、いくつかの物理リソース(例えば、EPC1460)及び/又は回路(例えば、SEユニット1470)を共有してもしなくてもよく、各論理プロセッサ又はプロセッサコアは、ソフトウェアスレッドを同時に又は並行して実行できる複数のハードウェアスレッドを有する。
プロセッサ1402は、セキュアエンクレーブ(SE)ユニット1470及びエンクレーブページキャッシュEPC1460も有する。いくつかの実施形態では、EPC1460は、より大きいキャッシュユニット、例えば、1つ又は複数のレベル1キャッシュ1440及び1450、又はレベル2キャッシュ(不図示)の一部であってよい。他の実施形態では、EPC1460は、複数のハードウェアスレッド、論理プロセッサ、又は処理コアにより共有された別個の構造又は分散した構造(例えば、キャッシュ1440及びキャッシュ1450)であってよく、1つ又は複数のセキュアエンクレーブに割り当てられ、ハードウェアスレッド、論理プロセッサ、又は処理コアがアクセス可能なページ(例えば、1442、1446、及び1452)のアドレスのセキュアデータ、又はそのアドレスに関連付けられるセキュアデータを格納する。いくつかの実施形態では、OSは、1つ又は複数のページ(例えば、ページ1442、1446、又は1452)を追い出し、データを暗号化し、そのデータをメモリ(例えば、暗号化されたページ1495として)又は不揮発性ストレージに書き戻してよい。いくつかの実施形態では、OSは次に、新たなページ(例えば、ページ1410)をメモリ又は不揮発性ストレージから読み出し、データを解読し、解読したページをEPC1460に格納することができる。ページングプロセス(例えば、セキュアエンクレーブページキャッシュのメモリコンテンツが暗号化されて書き戻される、新たなページがメモリからロードされて解読される、TLBエントリがフラッシュされて置換されるなど)は、ページングプロセスが完了するまで、プロセッサコア又は論理プロセッサ(例えば、論理プロセッサ1420及び1430)が(例えば、IPIによって)一時的に割り込まれるだけで、その後再開するといった方法で実現され得る。
SEユニット1470は、暗号化ユニット、完全性保護ユニット、アクセス制御ユニット、レンジレジスタ、エンクレーブページキャッシュマッピング、エポックカウンタストレージ位置などを有する複数のハードウェアスレッド、論理プロセッサ、又は処理コアにより共有される別個の構造又は分散した構造(例えば、SEユニット1427及び1437)も含んでよく、SEユニット1470は、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する子エンクレーブ作成命令もサポートする。
この例では、論理プロセッサ1420は、デコードステージ1422、読み出しステージ1424、1つ又は複数の実行ユニット(例えば、実行ユニット1426)、及び書き込みステージ1428を有する。論理プロセッサ1420はTLB1425も有し、ここには、EPC1460にアクセスするために変換がインストールされ得る。論理プロセッサ1430は、デコードステージ1432、読み出しステージ1434、1つ又は複数の実行ユニット(例えば、実行ユニット1436)、及び書き込みステージ1438を有する。論理プロセッサ1430はTLB1435も有し、ここには、EPC1460にアクセスするために変換がインストールされ得る。論理プロセッサ1420及び1430の実施形態は、セキュアエンクレーブページキャッシュEPC1460にマルチプロセッシング能力を提供するエンクレーブ命令の実行のために、他のパイプラインステージ(例えば、パイプライン400に示されるもの)も有してよい。論理プロセッサ1420及び1430の実施形態は、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する子エンクレーブ作成命令もサポートすることができる。
論理プロセッサ1420及び1430の実施形態では、1つ又は複数の実行ユニット(例えば、実行ユニット1426及び/又は1436)は、デコードされた子エンクレーブ作成命令に応答して、第1のセキュアストレージ領域(例えば1442)の第1のセキュア制御構造(SECS)を第2のセキュアストレージ領域(例えば1452)にコピーすることができる。さらに、デコードされた子エンクレーブ作成命令に応答して、1つ又は複数の実行ユニット(例えば、実行ユニット1426及び/又は1436)は、新たに作成された子プロセスに関連付けられる一意のエンクレーブ識別子(例えば1453)で第2のSECSデータを初期化し、(例えば1442における)第1のSECSデータへの第2のSECSリンク1444を(例えば1452における)第2のSECSデータに記録することができる。いくつかの実施形態では、リンク1444は、(例えば1452における)第2のSECSデータへの双方向リンクであってもよく、(例えば1442における)第1のSECSデータにも記録されてよい。
図14Bは、セキュアエンクレーブページキャッシュEPC1460にマルチプロセッシング能力を提供する処理システム1402の別の実施形態を示しており、そのマルチプロセッシング能力には、プロセスを分岐して、セキュアエンクレーブページキャッシュに子エンクレーブを確立する子エンクレーブコピー命令を用いることが含まれる。
この第2の例では、論理プロセッサ1420及び1430の実施形態は、親プロセスに割り当てられるセキュアエンクレーブから、アプリケーションデータページ、アプリケーションコードページ、エンクレーブライブラリコードページなどを、子プロセスに割り当てられるセキュアエンクレーブにセキュアにコピーすることで、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する子エンクレーブコピー命令もサポートすることができる。論理プロセッサ1420及び1430の実施形態では、1つ又は複数の実行ユニット(例えば、実行ユニット1426及び/又は1436)は、デコードされた子エンクレーブコピー命令に応答して、第2のセキュアストレージ領域(例えば1452)の第2のSECSデータに格納された、第1のセキュアストレージ領域(例えば1442)の第1のSECSデータへのリンク(例えば1444)を識別し、リンクが識別された場合、EPC1460の(例えば1446における)第1のセキュアストレージ領域のセキュアデータを、EPC1460の(例えば1456における)第2のセキュアストレージ領域にコピーすることができる。いくつかの実施形態では、第2のセキュアストレージ領域の第2のSECSデータに格納された、第1のSECSデータへのリンクを識別することは、両方のSECSが同じ暗号化キーに関連付けられていることを検証することも含むことができる。
論理プロセッサ1420及び1430の実施形態では、1つ又は複数の実行ユニット(例えば、実行ユニット1426及び/又は1436)は、デコードされた子エンクレーブコピー命令に応答して、コピー終了フラグが設定されている場合、子エンクレーブコピー命令が実行完了に成功すると、第2のセキュアストレージ領域の第2のセキュア制御構造データから第1のセキュアストレージ領域の第1のセキュア制御構造データへのリンク(例えば1444)を除去することもできる。論理プロセッサ1420及び1430の実施形態では、EPC1460の(例えば1456における)第2のセキュアストレージ領域は、第1のセキュア制御構造データへのリンク(例えば1444)が除去されるまで、アプリケーションからアクセスできなくてよい。
論理プロセッサ1420及び1430のいくつかの代替の実施形態では、1つ又は複数の実行ユニット(例えば、実行ユニット1426及び/又は1436)は、デコードされた子エンクレーブコピー命令に応答して、第1のセキュアストレージ領域(例えば1442)の第1のセキュア制御構造(SECS)を第2のセキュアストレージ領域(例えば1452)に最初にコピーし、新たに作成された子プロセスに関連付けられる一意のエンクレーブ識別子(例えば1453)で第2のSECSデータを初期化し、また(例えば1442における)第1のSECSデータへの第2のSECSリンク1444を(例えば1452における)第2のSECSデータに、及び/又は、(例えば1452における)第2のSECSデータへの第2のSECSリンク1444を(例えば1442における)第1のSECSデータにも記録することができる。
プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令を含むエンクレーブ命令を用いることによって、親プロセスが子プロセスを作成(すなわち分岐)して、子プロセスエンクレーブのコピーをセキュアエンクレーブページキャッシュ(例えば、EPC1460)に確立できることが理解されよう。同じ(又は類似した)技術的効果を実現する任意のソフトウェアシステムのセキュリティ機能は(仮にも実現可能であれば)、非常に高価になる可能性があり、及び/又はより弱いセキュリティ対策を不都合にも受け入れることがあるという程度まで限定した性能になり得ることも理解されよう。
図15は、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立することを含むマルチプロセッシング能力を、セキュアエンクレーブページキャッシュに提供する命令を用いるためのプロセッサコア1501における装置の実施形態を示す。本装置は、セキュアエンクレーブ(SE)ユニット1502及びエンクレーブページキャッシュ(EPC)1520を備える。いくつかの実施形態では、EPC1520は、より大きいキャッシュユニット、例えば、レベル1キャッシュ(L1)1540又はレベル2キャッシュ(不図示)の一部であってよい。他の実施形態では、EPC1520は、複数のハードウェアスレッド、論理プロセッサ、又は処理コアにより共有される別個の構造又は分散した構造であってよく、1つ又は複数のセキュアエンクレーブ(例えば、親エンクレーブ1504及び/又は子エンクレーブ1505)に割り当てられ、ハードウェアスレッド、論理プロセッサ、又は処理コア(例えば、プロセッサコア1501)がアクセス可能なページ(例えば、1542、1546、1552、及び1556)のアドレスのセキュアデータ、又はそのアドレスに関連付けられるセキュアデータを格納する。SEユニット1502は、暗号化ユニット1510、完全性保護ユニット1512、アクセス制御ユニット1514、レンジレジスタ1516、及びエンクレーブページキャッシュマッピングEPCM1518を含むことができる。SEユニット1502は、エンクレーブ分岐命令1503も含むことができ、その命令には、ECHILDCREATE命令1532、ECHILDCOPY命令1534、ECHILDCOPYR命令1536、及び示されていない他のエンクレーブ命令(例えば、AEX命令、ELOAD命令、EWRITEBACK命令、EEXIT命令、EENTER命令、ERESUME命令など)が含まれる。
プロセッサコア1501はTLB1525も備え、ここには、EPC1520にアクセスするために変換がインストールされ得る。プロセッサコア1501は、デコードステージ1522、読み出しステージ1524、1つ又は複数の実行ユニット(例えば、実行ユニット1526)、及び書き込みステージ1528も備える。プロセッサコア1501の実施形態は、エンクレーブ分岐命令1503を実行するための他のパイプラインステージ(例えば、パイプライン400に示されるもの)も備えてよく、プロセスを分岐してセキュアエンクレーブページキャッシュEPC1520に子エンクレーブを確立する命令を中断し、再開することを含むマルチプロセッシング能力を提供する。
1つの実施形態では、ECHILDCREATE命令1532が、デスティネーションページ1552のアドレスオペランドとしてEPC1520内の(第2の)セキュアストレージ領域を指定する(例えば、セキュアストレージ領域の実効アドレスが、RCXなどのレジスタ内の間接デスティネーションオペランドとして暗黙的又は明示的に指定されてよい)。デコードされたECHILDCREATE命令1532に応答して、プロセッサコア1501の実施形態における1つ又は複数の実行ユニット(例えば、実行ユニット1526)は、第1のセキュアストレージ領域(例えば1542)の第1のセキュア制御構造(SECS)を第2のセキュアストレージ領域(例えば1552)にコピーすることができる。
ECHILDCREATE命令1532の実施形態は、第1のセキュアストレージ領域の実効アドレスを、レジスタ(例えば、RBXなど)内の間接ソースオペランドとして暗黙的又は明示的に指定することもできる。さらに、デコードされたECHILDCREATE命令1532に応答して、1つ又は複数の実行ユニット(例えば、実行ユニット1526)は、新たに作成された子プロセスに関連付けられる一意のエンクレーブ識別子(例えば1553)で第2のSECSデータを初期化し、(例えば、1542における)第1のSECSデータへの第2のSECSリンク1544を(例えば、1552における)第2のSECSデータに記録することができる。いくつかの実施形態では、リンク1544は、(例えば1552における)第2のSECSデータへの双方向リンクであってもよく、(例えば1542における)第1のSECSデータにも記録されてよい。
1つの実施形態では、親プロセスの対応するセキュアエンクレーブ1504に割り当てられる(例えば、1542及び/又は1546における)第1のセキュアストレージ領域は、(例えば、セキュアデータを暗号化する及び/又は解読するための)第1のキーに関連付けられ、子プロセスの対応する第2のセキュアエンクレーブ1505に割り当てられる(例えば、1552及び/又は1556における)第2のセキュアストレージ領域も同じ第1のキーに関連付けられる。いくつかのエンクレーブ分岐命令1503の実施形態は、両方のSECSが同じ暗号化キーに関連付けられていることを検証することも備えることができる。プロセッサコア1501の実施形態は、親プロセスに割り当てられるセキュアエンクレーブ1504から、アプリケーションデータページ、アプリケーションコードページ、エンクレーブライブラリコードページなどを、子プロセスに割り当てられるセキュアエンクレーブ1505にセキュアにコピーすることで、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令を中断及び再開する、子エンクレーブコピー命令(例えば、ECHILDCOPY命令1534及び/又はECHILDCOPY再開命令1536)をサポートすることができる。
1つの実施形態では、ECHILDCOPY命令1534は、EPC1520内の(第1の)セキュアストレージ領域を、ソースページ1546のアドレスオペランドとして指定する。プロセッサコア1501の実施形態では、1つ又は複数の実行ユニット(例えば、実行ユニット1526)は、デコードされたECHILDCOPY命令1534(又はECHILDCOPYR命令1536)に応答して、第2のセキュアストレージ領域(例えば、子エンクレーブ1505の1552)の第2のSECSデータに格納された、第1のセキュアストレージ領域(例えば、親エンクレーブ1504の1542)の第1のSECSデータへのリンク(例えば1544)を識別し、リンクが識別された場合、EPC1560の(例えば、親エンクレーブ1504の1546における)第1のセキュアストレージ領域のセキュアデータを、EPC1560の(例えば、子エンクレーブ1505の1556における)第2のセキュアストレージ領域にコピーすることができる。いくつかの実施形態では、(例えば、子エンクレーブ1505の1556における)第2のセキュアストレージ領域の(例えば、1552における)第2のSECSデータに格納された、(例えば、1542における)第1のSECSデータへのリンク(例えば1544)を識別することは、両方のSECSが同じ暗号化キーに関連付けられていることを検証することも含むことができる。
プロセッサコア1501の実施形態において、1つ又は複数の実行ユニット(例えば、実行ユニット1526)は、デコードされたECHILDCOPY命令1534(又はECHILDCOPYR命令1536)に応答して、コピー終了フラグが設定されている場合、ECHILDCOPY命令1534(又はECHILDCOPYR命令1536)が実行完了に成功すると、第1のセキュアストレージ領域(例えば1504)の第1のSECSデータへのリンク(例えば1544)を、第2のセキュアストレージ領域(例えば1505)のSECSデータから除去することもできる。プロセッサコア1501の実施形態において、EPC1560の(例えば、子エンクレーブ1505の1556における)第2のセキュアストレージ領域は、第1のSECSデータへのリンク(例えば1544)が除去されるまで、アプリケーションからアクセスできなくてよい。
プロセッサコア1501のいくつかの代替の実施形態において、1つ又は複数の実行ユニット(例えば、実行ユニット1526)は、デコードされたECHILDCOPY命令1534に応答して、第1のセキュアストレージ領域(例えば、親エンクレーブ1504の1542)の第1のSECSを第2のセキュアストレージ領域(例えば、子エンクレーブ1505の1552)に最初にコピーし、新たに作成された子プロセスに関連付けられる一意のエンクレーブ識別子(例えば1553)で第2のSECSデータを初期化し、(例えば1542における)第1のSECSデータへの第2のSECSリンク1544を(例えば1552における)第2のSECSデータに記録する、及び/又は、(例えば1552における)第2のSECSデータへの第2のSECSリンク1544を(例えば1542における)第1のSECSデータにも記録することができる。
パーミッションの管理、物理メモリ及び/又はマッピングの変更は、まだOSで管理されてよいが、セキュアエンクレーブ内と同じようにメモリコンテンツが保護されている場合、OSは、プロセスを分岐してエンクレーブプライベートメモリにプロセスの子コピーを作成するために、エンクレーブプライベートメモリの実際の保護されたコンテンツにアクセスすることに、許可も信頼も与えられないことが理解されよう。OSを信頼できなくても、プライベートメモリコンテンツのセキュリティ及び/又は完全性を保証し、プロセスを分岐してセキュアアプリケーションページの子コピーを確立することに関する技術的制約を管理することなどは、追加の精巧なハードウェアサポート及び/又は設計努力を必要とすることなく、セキュアエンクレーブプロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令及び処理ロジックを用いて実現され得る。
図16は、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立するプロセス1601の1つの実施形態に関するフロー図を示す。プロセス1601及び開示される本明細書の他のプロセスは、汎用の機械又は専用の機械又は両方の組み合わせによって実行可能な、専用のハードウェア又はソフトウェア又はファームウェアのオペレーションコードを備えることができる処理ブロックにより実行される。
プロセス1601の処理ブロック1610では、親プロセス1604はシステムソフトウェアガードエクステンション(SGX)ライブラリへの分岐コールを実行する。例えば、通常の分岐システムコールの代わりに、エンクレーブ1604からのOcall(OSコール)が特殊なライブラリ(例えば、libSGXと呼ばれるSGX LIB1648)に対して行われてよい。結果として、処理ブロック1620において、EChild作成コマンド又は命令(例えば、ECHILDCREATE命令1532)が実行される。1つの実施形態では、EChild作成コマンド又は命令が、デスティネーションページ1652のアドレスオペランドとしてEPC内のセキュアストレージ領域を指定する(例えば、セキュアストレージ領域の実効アドレスが、RCXなどのレジスタ内の間接デスティネーションオペランドとして暗黙的又は明示的に指定されてよい)。EChild作成コマンド又は命令に応答して、処理ブロック1630では、1つ又は複数の実行ユニット(例えば、実行ユニット1426、1436、又は1526)は、親セキュアストレージ領域(例えば、エンクレーブ1604の1642)の第1のセキュア制御構造(SECS)を子セキュアストレージ領域(例えば、エンクレーブ1605の1652)にコピーする。EChild作成コマンド又は命令の実施形態は、親セキュアストレージ領域の実効アドレスを、レジスタ(例えば、RBXなど)内の間接ソースオペランドとして暗黙的又は明示的に指定することもできる。さらに、EChild作成コマンド又は命令に応答して、1つ又は複数の実行ユニットは、処理ブロック1640において、新たに作成された子プロセスに関連付けられる一意のエンクレーブ識別子(例えば1653)で(例えば1652内の)第2のSECSデータを初期化し、(例えば1642における)第1のSECSデータへの第2のSECSリンク1644を(例えば1652における)第2のSECSデータに記録する。いくつかの実施形態では、リンク1644は、(例えば1652における)第2のSECSデータへの双方向リンクであってもよく、(例えば1642における)第1のSECSデータにも記録されてよい。
1つの実施形態では、親プロセスの対応するセキュアエンクレーブ1604に割り当てられる(例えば、1642及び/又は1646における)第1のセキュアストレージ領域は(例えば、セキュアデータを暗号化する及び/又は解読するための)第1のキーに関連付けられ、子プロセスの対応する第2のセキュアエンクレーブ1605に割り当てられる(例えば、1652及び/又は1656における)第2のセキュアストレージ領域も同じ第1のキーに関連付けられる。いくつかのエンクレーブ分岐命令の実施形態は、両方のSECSが同じ暗号化キーに関連付けられていることを直接的に又は間接的に検証することも備えることができる。
処理ブロック1650では、1つ又は複数のEChildコピーコマンド又は命令(例えば、ECHILDCOPY命令1534)が実行される。1つの実施形態では、EChildコピーコマンド又は命令は、EPC内のセキュアストレージ領域を、ソースページ(例えば、1646、1647、又は1648)のアドレスオペランドとして指定する。いくつかの実施形態では、1つ又は複数の実行ユニット(例えば、実行ユニット1426、1436、又は1526)は、EChildコピーコマンド又は命令に応答して、第2のセキュアストレージ領域(例えば、子エンクレーブ1605の1652)の第2のSECSデータに格納された、第1のセキュアストレージ領域(例えば、親エンクレーブ1604の1642)の第1のSECSデータへのリンク(例えば1644)を識別し、リンクが識別された場合、EPCの(例えば、親エンクレーブ1604の1646における)第1のセキュアストレージ領域のセキュアデータを、EPCの(例えば、子エンクレーブ1605の1656における)第2のセキュアストレージ領域にコピーすることができる。いくつかの実施形態では、(例えば、子エンクレーブ1605の1656における)第2のセキュアストレージ領域の(例えば、1652における)第2のSECSデータに格納された、(例えば、1642における)第1のSECSデータへのリンク(例えば1644)を識別することは、両方のSECSが同じ暗号化キーに関連付けられていることを検証することも含むことができる。
処理ブロック1660では、最後のEChildコピーコマンド又は命令(例えば、ECHILDCOPY命令1534又はECHILDCOPYR命令1536)が実行される。いくつかの実施形態では、1つ又は複数の実行ユニット(例えば、実行ユニット1426、1436、又は1526)は、最後のEChildコピーコマンド又は命令に応答して、(例えば、コピー終了フラグが設定されている場合、)最後のEChildコピーコマンド又は命令が完了に成功すると、第1のセキュアストレージ領域(例えば1504)の親SECSデータへのEChildリンク(例えば1644)を、第2のセキュアストレージ領域(例えば1505)のSECSデータから除去することもできる。いくつかの実施形態では、EPCの(例えば、子エンクレーブ1605の1656、1657、又は1658における)第2のセキュアストレージ領域は、親SECSデータへのEChildリンク(例えば1644)が除去されるまで、アプリケーションからアクセスできなくてよい。
いくつかの実施形態では、開示される本明細書の命令及びロジックは、セキュアエンクレーブ内の、EChild作成コマンド又は命令(例えば、ECHILDCREATE命令1532)など、プロセスを分岐するSECSコピー操作において、またEChildコピーコマンド又は命令(例えば、ECHILDCOPY命令1534、又はECHILDCOPYR命令1536)などのページコピー操作において、割り込まれ、再開されることが可能である。したがって、プロセスを分岐してセキュアエンクレーブのページの子コピーを確立することに関するフォワードプログレスを保証することができ、音声、映像、リアルタイムのトランザクションなどのサービスにおける容認できないトラブルは、タイムリーなサービス保留割り込みにより回避され得る。プロセスを分岐してセキュアEPCに子エンクレーブを確立するそのようなエンクレーブ命令を用いることで、親プロセスはセキュアに、子プロセスを作成(すなわち、分岐)してEPCに子プロセスエンクレーブのコピーを確立できることが理解されよう。そのような命令に対するプロセッサのサポートを受けずに、同じ(又は類似した)技術的効果を実現する任意のソフトウェアシステムのセキュリティ機能は(仮にも実現可能であれば)、非常に高価になる可能性があり、及び/又は何らかのより弱いセキュリティ対策を不都合にも受け入れることがあるという程度まで限定した性能になり得ることも理解されよう。
図17Aは、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する子エンクレーブ作成命令を用いるプロセス1701の1つの実施形態に関するフロー図を示す。処理ブロック1710では、子エンクレーブ作成命令がデコードされる。子エンクレーブ作成命令のいくつかの実施形態は、オペランドとして、第1のセキュア制御構造(SECS)を格納する親プロセスの対応する第1のセキュアエンクレーブに割り当てられるエンクレーブページキャッシュ(EPC)の第1のセキュアストレージ領域として、及び第2のSECSを格納する子プロセスの対応する第2のセキュアエンクレーブに割り当てられるEPCの第2のセキュアストレージ領域として、暗黙的又は明示的にパラメータを指定することができる。例えば、子エンクレーブ作成命令の実施形態は、第1のセキュアストレージ領域の実効アドレスを、RBXなどのレジスタ内の間接オペランドとして指定することができる。子エンクレーブ作成命令の実施形態は、第2のセキュアストレージ領域の実効アドレスを、RCXなどのレジスタ内の間接オペランドとして指定することができる。処理ブロック1720では、EPCの指定されたあらゆるパラメータが検証される。処理ブロック1725において、EPCの指定されたいずれかのパラメータが無効であると判定された場合、次に処理は処理ブロック1790に進み、ここで不成功エラーが返される。そうでなければ、処理は処理ブロック1730に進み、ここで、EPCがアクセスされ、第1のセキュアストレージ領域の第1のSECSを子プロセスの第2のセキュアストレージ領域にコピーする。処理ブロック1740において、子の第2のSECSは、子プロセスに関連付けられる一意のエンクレーブ識別子で初期化される。処理ブロック1750では、第1のソースSECSと第2の子SECSとの間のリンケージが、(例えば、第2の子SECS及び/又は第1のソースSECSに)記録される。処理ブロック1755では、プロセスを分岐して子エンクレーブを確立する子エンクレーブ作成命令が実行に成功したかどうかについて判定が行われる。成功した場合、処理ブロック1780において、子エンクレーブ作成命令はリタイアされる。成功しなかった場合には、処理は処理ブロック1790に進み、不成功エラーが返される。
プロセス1701及び開示される本明細書の他のプロセスの処理ブロックは、反復方式で実行されるものとして示されているが、好ましくは、代替の順序での実行、又は同時での実行、又は並列での実行が、可能ならいつでも実行され得ることが理解されよう。いくつかの実施形態では、親エンクレーブのページを子プロセスのエンクレーブにコピーする最後の子エンクレーブコピー命令を示すために、コピー終了フラグが設定されてもよい。コピー終了フラグが設定されている場合、親のSECS/エンクレーブIDへのリンクは、子エンクレーブコピー命令が完了に成功すると、子SECSから除去されてよい。いくつかの実施形態では、親のSECS/エンクレーブIDへのリンクが除去されるまで、アプリケーションは、子プロセスのエンクレーブからアクセス/実行されなくてよい。
図17Bは、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する子エンクレーブコピー命令を用いるプロセス1702の1つの実施形態に関するフロー図を示す。処理ブロック1712では、子エンクレーブコピー命令がデコードされる。子エンクレーブコピー命令のいくつかの実施形態は、オペランドとして、第1のSECSを格納し且つページアドレスのセキュアデータを格納する親プロセスの対応する第1のセキュアエンクレーブに割り当てられるEPCの第1のセキュアストレージ領域として、及び第2のSECSを格納し且つページアドレスのセキュアデータのコピーを格納する子プロセスの対応する第2のセキュアエンクレーブに割り当てられるEPCの第2のセキュアストレージ領域として、パラメータを暗黙的又は明示的に指定することができる。例えば、子エンクレーブコピー命令の実施形態は、第1のセキュアストレージ領域の実効アドレスを、RBXなどのレジスタ内の間接オペランドとして指定することができる。子エンクレーブコピー命令の実施形態は、第2のセキュアストレージ領域の実効アドレスを、RCXなどのレジスタ内の間接オペランドとして指定することができる。処理ブロック1722では、EPCの指定されたいずれかのパラメータが検証される。子エンクレーブコピー命令のいくつかの実施形態では、EPCの指定されたパラメータを検証することは、第2のSECSに格納された第1のSECSへのリンケージを識別することを含んでよい。処理ブロック1727において、EPCの指定されたいずれかのパラメータが無効であると判定された場合、次に処理は処理ブロック1790に進み、ここで不成功エラーが返される。そうでなければ、処理は処理ブロック1732に進み、ここで上記リンケージが識別された場合には、EPCの第1のセキュアストレージ領域のソースページアドレスのセキュアデータコンテンツは、EPCの第2のセキュアストレージ領域にコピーされる。処理ブロック1742では、ソースページアドレスのエンクレーブページキャッシュマッピング(EPCM)エントリが、子プロセスのEPCMエントリにコピーされる。処理ブロック1752では、子プロセスの新たなEPCMエントリは、子プロセスに関連付けられた一意のエンクレーブ識別子に更新される。
処理ブロック1752では、コピー終了(EOC)フラグが設定されているかどうかについて判定が行われる。例えば、子エンクレーブコピー命令の実施形態は、EOCフラグ(すなわち、最後の子エンクレーブコピー命令)を、RDXなどのレジスタ内のオペランドとして暗黙的又は明示的に指定することができる。処理ブロック1757において、EOCフラグが設定されていると判定された場合には、子エンクレーブコピー命令が実行完了に成功すると、処理ブロック1762において、第2のSECSから第1のSECSへのリンケージが除去され、処理ブロック1770において、子エンクレーブコピー命令はリタイアされる。反対に、処理ブロック1757において、EOCフラグが設定されていないと判定された場合には、処理は処理ブロック1770に直接進み、ここで、子エンクレーブコピー命令が実行完了に成功すると、子エンクレーブコピー命令はリタイアされる。
いくつかの実施形態では、本明細書に開示される命令及びロジックは、プロセスを分岐するSECSコピー及びセキュアエンクレーブ内のページコピー操作において、割り込まれ再開されることが可能である。したがって、プロセスを分岐してセキュアエンクレーブのページの子コピーを確立することに関するフォワードプログレスを保証することができ、音声、映像、リアルタイムのトランザクションなどのサービスにおける容認できないトラブルは、タイムリーなサービス保留割り込みにより回避され得る。プロセスを分岐してセキュアEPCに子エンクレーブを確立するそのようなエンクレーブ命令を用いることで、親プロセスはセキュアに、子プロセスを作成(すなわち、分岐)してEPCに子プロセスエンクレーブのコピーを確立できることが理解されよう。そのような命令に対するプロセッサのサポートを受けずに、同じ(又は類似した)技術的効果を実現する任意のソフトウェアシステムのセキュリティ機能は(仮にも実現可能であれば)、非常に高価になる可能性があり、及び/又は何らかのより弱いセキュリティ対策を不都合にも受け入れることがあるという程度まで限定した性能になり得ることも理解されよう。
図18Aは、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する子エンクレーブ作成命令を用いる、割り込み可能プロセス1801の1つの実施形態に関するフロー図を示す。処理ブロック1810では、子エンクレーブ作成命令がデコードされる。子エンクレーブ作成命令のいくつかの実施形態は、オペランドとして、第1のセキュア制御構造(SECS)を格納する親プロセスの対応する第1のセキュアエンクレーブに割り当てられるエンクレーブページキャッシュ(EPC)の第1のセキュアストレージ領域として、及び第2のSECSを格納する子プロセスの対応する第2のセキュアエンクレーブに割り当てられるEPCの第2のセキュアストレージ領域として、暗黙的又は明示的にパラメータを指定することができ、その結果、EPCの指定されたいずれかのパラメータが検証され得る。例えば、子エンクレーブ作成命令の実施形態は、第1のセキュアストレージ領域の実効アドレスを、RBXなどのレジスタ内の間接オペランドとして指定することができる。子エンクレーブ作成命令の実施形態は、第2のセキュアストレージ領域の実効アドレスを、RCXなどのレジスタ内の間接オペランドとして指定することができる。処理ブロック1831では、EPCがアクセスされ、第1のセキュアストレージ領域の第1のSECSを子プロセスの第2のSECSにコピーするフォワードプログレスが行われる。
処理ブロック1835では、第1のセキュアストレージ領域の第1のSECSを子プロセスの第2のSECSにコピーすることが終了したかどうかについての判定が行われる。終了した場合、処理は処理ブロック1840に進み、ここで、子の第2のSECSは、子プロセスに関連付けられる一意のエンクレーブ識別子で初期化される。処理ブロック1850では、第1のソースSECSと第2の子SECSとの間のリンケージが、(例えば、第2の子SECS及び/又は第1のソースSECSに)記録され、処理ブロック1880において、子エンクレーブ作成命令はリタイアされる。
別の状況では、処理ブロック1835において、第1のセキュアストレージ領域の第1のSECSを子プロセスの第2のSECSにコピーすることが終了していない場合、処理ブロック1821において、子エンクレーブ作成命令が割り込まれようとしているかどうかについて判定が行われる。割り込まれない場合には、処理は処理ブロック1831を続けて開始してよい。反対に、子エンクレーブ作成命令が割り込まれようとしている場合には、保留中の割り込みが存在し、処理は処理ブロック1822に進み、ここで、第1のSECSのコピー操作の状態がチェックされる(例えば、ページング操作の部分的完了が、エンクレーブページキャッシュマッピングエントリに記録されてよく、ページ状態情報の一部が、対応する子ページのキャッシュライン又は何らかの他のセキュアストレージなどに格納されてよい)。処理ブロック1823では、アドバイザリコードが返され得る(例えば、割り込みをサービスできることを示すなど)。処理ブロック1824では、割り込みがサービスされ、処理ブロック1825では、第1のセキュアストレージ領域の第1のSECSからコピーされるべきページ上で、子エンクレーブ作成命令が再開される。次に処理は、処理ブロック1835において、第1のセキュアストレージ領域の第1のSECSを子プロセスの第2のSECSにコピーすることが終了するまで、処理ブロック1831の先頭から繰り返し、その後、処理は処理ブロック1840に進む。
図18Bは、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する子エンクレーブコピー命令を用いる、割り込み可能プロセス1802の1つの実施形態に関するフロー図を示す。処理ブロック1812では、子エンクレーブコピー命令がデコードされる。子エンクレーブコピー命令のいくつかの実施形態は、オペランドとして、第1のSECSを格納し且つページアドレスのセキュアデータを格納する親プロセスの対応する第1のセキュアエンクレーブに割り当てられるEPCの第1のセキュアストレージ領域として、及び第2のSECSを格納し且つページアドレスのセキュアデータのコピーを格納する子プロセスの対応する第2のセキュアエンクレーブに割り当てられるEPCの第2のセキュアストレージ領域として、パラメータを暗黙的又は明示的に指定することができ、その結果、EPCの指定されたいずれかのパラメータは、第2のSECSに格納された第1のSECSへのリンケージを識別することを含めて検証され得る。例えば、子エンクレーブコピー命令の実施形態は、第1のセキュアストレージ領域の実効アドレスを、RBXなどのレジスタ内の間接オペランドとして指定することができる。子エンクレーブコピー命令の実施形態は、第2のセキュアストレージ領域の実効アドレスを、RCXなどのレジスタ内の間接オペランドとして指定することができる。処理ブロック1820では、子プロセスのエンクレーブページキャッシュマッピング(EPCM)エントリが、子プロセスに関連付けられる一意のエンクレーブ識別子にチェック/設定される。処理ブロック1832では、上記リンケージが識別された場合、EPCがアクセスされ、EPCの第1のセキュアストレージ領域のソースページアドレスのセキュアデータコンテンツをEPCの第2のセキュアストレージ領域にコピーするフォワードプログレスが行われる。
処理ブロック1835では、第1のセキュアストレージ領域のソースページアドレスのセキュアデータコンテンツを子プロセスの第2のセキュアストレージ領域にコピーすることが終了したかどうかについての判定が行われる。終了した場合、処理は処理ブロック1857に進み、ここで、コピー終了(EOC)フラグが設定されているかどうかについての判定が行われる。例えば、子エンクレーブコピー命令の実施形態は、EOCフラグ(すなわち、最後の子エンクレーブコピー命令)を、RDXなどのレジスタ内のオペランドとして暗黙的又は明示的に指定することができる。処理ブロック1857において、EOCフラグが設定されていると判定された場合には、子エンクレーブコピー命令が実行完了に成功すると、処理ブロック1862において、第2のSECSから第1のSECSへのリンケージが除去され、処理ブロック1870において、子エンクレーブコピー命令はリタイアされる。反対に、処理ブロック1857において、EOCフラグが設定されていないと判定された場合には、処理は処理ブロック1870に直接進み、ここで、子エンクレーブコピー命令が実行完了に成功すると、子エンクレーブコピー命令はリタイアされる。
別の状況では、処理ブロック1835において、第1のセキュアストレージ領域のソースページアドレスのセキュアデータコンテンツを子プロセスの第2のセキュアストレージ領域にコピーすることが終了していない場合、処理ブロック1821において、子エンクレーブコピー命令が割り込まれようとしているかどうかについての判定が行われる。割り込まれない場合には、処理は処理ブロック1820を続けて開始してよい。反対に、子エンクレーブコピー命令が割り込まれようとしている場合には、保留中の割り込みが存在し、処理は処理ブロック1826に進み、ここで、コピー操作の部分的完了を示すためにEPCMが設定される。処理ブロック1827において、ページ状態情報の一部が(例えば、対応する子ページの最後のキャッシュライン又は、何らかの他のセキュアストレージなどに)格納される。処理ブロック1828では、割り込みがサービスされ、処理ブロック1829では、子エンクレーブコピー命令が、第1のセキュアストレージ領域のソースページアドレスから子プロセスの第2のセキュアストレージ領域にコピーされるべきページ上で再開される。次に処理は、処理ブロック1835において、第1のセキュアストレージ領域のソースページアドレスを子プロセスの第2のセキュアストレージ領域にコピーすることが終了するまで、処理ブロック1820の先頭から繰り返し、その後、処理は処理ブロック1857に進む。
したがって、パーミッションの管理、物理メモリ及び/又はマッピングの変更は、まだOSで管理されてよいが、セキュアエンクレーブ内と同じようにメモリコンテンツが保護されている場合、OSは、エンクレーブプライベートメモリの実際の保護されたコンテンツにアクセスすることに、許可も信頼も与えられていない。OSを信頼できなくても、プライベートメモリコンテンツのセキュリティ及び/又は完全性を保証し、プロセスを分岐してページの子コピーを確立することに関する技術的制約を管理することは、精巧なハードウェアサポート及び/又は設計努力を必要とすることなく、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令及び処理ロジックを用いて実現され得る。
特定の順序で実行されるように示される処理ブロックは、プロセス1802及び開示される本明細書の他のプロセスに関するいくつかの代替の実施形態において、可能であれば、別の順序で、又は同時に、又は互いに並列に実行されてもよいことが理解されよう。
本明細書に開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はそのような実装手法の組み合わせで実装されてよい。本発明の実施形態は、少なくとも1つのプロセッサ、ストレージシステム(揮発性メモリ及び不揮発性メモリ及び/又はストレージエレメントを含む)、少なくとも1つの入力デバイス、及び少なくとも1つの出力デバイスを備えるプログラマブルシステム上で実行されるコンピュータプログラム又はプログラムコードとして実装されてよい。
プログラムコードは、本明細書に説明される機能を実行して出力情報を生成する入力命令に適用されてよい。出力情報は、1つ又は複数の出力デバイスに、既知の方式で適用されてよい。この応用の目的のために、処理システムには、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、又はマイクロプロセッサなどのプロセッサを有するあらゆるシステムが含まれる。
プログラムコードは、処理システムと通信するために、高水準の手続き型プログラミング言語、又はオブジェクト指向プログラミング言語で実装されてよい。プログラムコードは、必要に応じて、アセンブリ言語又は機械語で実施されてもよい。実際に、本明細書に説明されるメカニズムは、いかなる特定のプログラミング言語にも範囲を限定されてはいない。いかなる場合にも、言語は、コンパイラ型言語又はインタープリタ型言語であってよい。
少なくとも1つの実施形態の1つ又は複数の態様が、プロセッサ内の様々なロジックを表す機械可読媒体に格納された典型的な命令によって実装されてよく、その命令は機械により読み出されると、本明細書で説明される技術を実行するロジックを機械に作らせる。「IPコア」として知られるそのような表現は、有形の機械可読媒体に格納され、実際にロジック又はプロセッサを作る製造機械にロードするために、様々な顧客又は製造施設に供給されてよい。
そのような機械可読記憶媒体には、機械又は装置により製造又は形成される非一時的な有形の構成の物品が含まれてよく、そのような物品には、ハードディスクや、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD−ROM)、コンパクトディスクリライタブル(CD−RW)、及び光磁気ディスクを含むその他のタイプのディスク、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)やスタティックランダムアクセスメモリ(SRAM)などのランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)などの半導体デバイス、磁気カード又は光カード、あるいは電子命令を格納するのに適したその他のタイプの媒体などの記憶媒体が、限定されることなく含まれる。
したがって、本発明の実施形態には、命令を含む又はハードウェア記述言語(HDL)などの設計データを含む非一時な有形の機械可読媒体も含まれ、HDLは、本明細書で説明される構造、回路、装置、プロセッサ、及び/又はシステム機能を定義する。そのような実施形態は、プログラム製品とも呼ばれる場合がある。
いくつかの場合では、命令をソース命令セットからターゲット命令セットに変換するのに、命令変換器が用いられてよい。例えば、命令変換器は、命令をコアにより処理される1つ又は複数の他の命令に、変換(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いる)、変形、エミュレート、又は別の方法で変換することができる。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせで実装されてよい。命令変換器は、プロセッサに搭載されても、プロセッサの外部にあっても、又は一部がプロセッサに搭載され一部がプロセッサの外部にあってもよい。
こうして、少なくとも1つの実施形態による1つ又は複数の命令を実行する技術が開示される。特定の例示的な実施形態が説明され、添付図面に示されたが、そのような実施形態は、広範な発明の単に例示であって広範な発明に限定を加えるものではないこと、本開示を検討すると、当業者には様々な他の変更が見出され得るので、示され説明された特定の解釈及び構成に本発明は限定されないことを理解されたい。このような、成長が速く、さらなる進歩が容易に予見できない技術領域では、開示された実施形態は、技術的進歩を可能にすることで容易になるような構成及び詳細において、本開示の原理又は添付の特許請求の範囲から逸脱することなく、容易に変更可能であり得る。