(57)【特許請求の範囲】
【請求項１】
複数の安全エンクレーヴが実装されている計算ドメインをホストする計算プラットフォームにおいてプロセッサがハードウェア・エラーを処理する方法であって、当該方法は：
前記計算プラットフォームにおける異常ハードウェアに対応するプラットフォーム・エラー・イベントを検出する段階と；
前記異常ハードウェアによって影響される前記複数の安全エンクレーヴのうちの一つまたは複数を同定する段階と；
前記複数の安全エンクレーヴのうちの同定された前記一つまたは複数のそれぞれに対して割り込みを差し向ける段階とを含む、
方法。
【請求項２】
前記異常ハードウェアが前記計算プラットフォームにおけるプロセッサ上の異常IPブロックに対応し、当該方法がさらに：
前記異常IPブロックに関連付けられている少なくとも一つの安全エンクレーヴについて、
その安全エンクレーヴに差し向けられた割り込みの受信に応答して、前記プロセッサをリセットすることなく前記異常IPブロックをリセットさせる、エラー処理ルーチンまたはエラー処理ルーチンの初期部分の一方を実行する段階を含む、
請求項１記載の方法。
【請求項３】
前記異常IPブロックに関連付けられている前記少なくとも一つの安全エンクレーヴのそれぞれについて：
その安全エンクレーヴを破棄し；
前記異常IPブロックがリセットされたのちに新たな安全エンクレーヴを生成することをさらに含む、
請求項２記載の方法。
【請求項４】
第一の安全エンクレーヴが差し向けられた割り込みを受信するのに応答して、前記第一の安全エンクレーヴにおいて実行中のソフトウェアによって、前記第一の安全エンクレーヴにおけるデータの少なくとも一部を第二の安全エンクレーヴにコピーする割り込みサービス・ルーチンが実行される、請求項２または３記載の方法。
【請求項５】
前記異常ハードウェアによって影響される前記複数の安全エンクレーヴのうちの一つまたは複数を同定する段階が：
プラットフォーム・エラー源をエンクレーヴ固有または全システム規模として分類し；
前記計算プラットフォーム上の複数のIPブロックのそれぞれに属する安全エンクレーヴを同定するマッピング・データを構成し；
前記IPブロックのうちの一つが前記プラットフォーム・エラー・イベントについてのエラー源であると判別し；
前記マッピング・データを使って、エラー源であると判別されたIPブロックに属する安全エンクレーヴを同定することを含む、
請求項１ないし４のうちいずれか一項記載の方法。
【請求項６】
安全エンクレーヴのセットアップの間に、エンクレーヴ・プラットフォーム割り込みハンドラーを生成する段階をさらに含み、前記エンクレーヴ・プラットフォーム割り込みハンドラーは、前記プラットフォーム・エラー・イベントに応答してその安全エンクレーヴに差し向けられた割り込みを処理するまたはその安全エンクレーヴに差し向けられた前記割り込みの処理を開始するの一方を行なうよう構成されている、請求項１ないし５のうちいずれか一項記載の方法。
【請求項７】
第一の安全エンクレーヴによる前記エンクレーヴ・プラットフォーム割り込みハンドラーの実行が、前記第一の安全エンクレーヴにおけるデータの少なくとも一部を第二の安全エンクレーヴにコピーする、請求項６記載の方法。
【請求項８】
前記複数の安全エンクレーヴが仮想安全エンクレーヴである、請求項１ないし７のうちいずれか一項記載の方法。
【請求項９】
差し向けられた割り込みが差し向けられた機械チェックを含む、請求項１ないし８のうちいずれか一項記載の方法。
【請求項１０】
前記計算プラットフォームが、それぞれ複数のIPブロックを有する一つまたは複数のプロセッサと、前記一つまたは複数のプロセッサと通信するよう結合されている一つまたは複数の管理容易性コンポーネントとを含み、前記異常ハードウェアがプロセッサ上の異常IPブロックに対応し、当該方法がさらに：
前記計算プラットフォーム上の複数のIPブロックのそれぞれに属する安全エンクレーヴを同定するマッピング・データを記憶し；
管理容易性コンポーネントによって検出されるエラーをプロセッサ・ピンまたは割り込みを介してアサートし；
前記管理容易性コンポーネントを用いて前記マッピング・データにアクセスして、どの安全エンクレーヴが前記異常IPブロックによって影響されるかを判別することを含む、
請求項１ないし９のうちいずれか一項記載の方法。
【請求項１１】
前記管理容易性コンポーネントが、ベースボード管理コントローラを含む、請求項１０記載の方法。
【請求項１２】
前記管理容易性コンポーネントから前記異常IPブロックを含むプロセッサに、前記異常IPブロックによって影響される一つまたは複数の安全エンクレーヴを同定する情報を送り；
前記プロセッサにおいて前記情報を受信することに応答して、前記異常IPブロックによって影響される前記一つまたは複数の安全エンクレーヴのそれぞれに割り込みを差し向けることをさらに含む、
請求項１０記載の方法。
【請求項１３】
複数の相互接続を介して相互接続されている複数のIPブロックであって、前記複数のIPブロックは複数のコア、複数のキャッシュ、複数のエージェント、それぞれ一つまたは複数のメモリ・チャネルをもつ一つまたは複数のメモリ・コントローラおよび一つまたは複数の入出力（I/O）コンポーネントを含む、複数のIPブロックを有するプロセッサであって、
当該プロセッサはさらに、当該プロセッサが計算プラットフォームにおいて設置され、動作しているときに複数の安全エンクレーヴを実装するために使われる複数の命令のためのマイクロコードを含み、前記計算プラットフォームは、前記一つまたは複数のメモリ・チャネルを介して前記一つまたは複数のメモリ・コントローラに動作上結合された一つまたは複数のメモリ・デバイスを含み、各安全エンクレーヴは、前記一つまたは複数のメモリ・デバイスにおけるメモリの保護された部分にあるか保護された部分にマッピングされており、それに属する前記複数のIPブロックの部分をもち、当該プロセッサは、前記計算プラットフォームにおいて設置され、動作しているときにエラー復元動作を実行するよう構成された埋め込み論理を含み、前記エラー復元動作は：
異常IPブロックを検出し；
前記複数の安全エンクレーヴのうちの前記異常IPブロックが属する一つまたは複数に対して割り込みを差し向けることを含む、
プロセッサ。
【請求項１４】
当該プロセッサがさらにレジスタを有し、さらに、当該プロセッサが：
IPブロックと該IPブロックが属する安全エンクレーヴとの間のマッピングを含むデータを前記レジスタに記憶し；
異常であると検出されたIPブロックの素性に基づいて、前記複数の安全エンクレーヴのうちのどれに対して、差し向けられた割り込みを送るかを決定することができるようにするための埋め込み論理を含む、
請求項１３記載のプロセッサ。
【請求項１５】
当該プロセッサが、プロセッサ全体をリセットすることなく、個々のIPブロックまたは関係したIPブロックの選択された集合をリセットすることができるようにするマイクロコード命令を当該プロセッサが含む、請求項１３または１４記載のプロセッサ。
【請求項１６】
前記埋め込み論理がさらに、前記計算プラットフォームにおける管理容易性コンポーネントから、前記複数の安全エンクレーヴのうちの前記異常IPブロックが属する前記一つまたは複数の識別情報を受信するようさらに構成されている、請求項１３ないし１５のうちいずれか一項記載のプロセッサ。
【請求項１７】
前記複数の安全エンクレーヴが仮想安全エンクレーヴである、請求項１３ないし１６のうちいずれか一項記載のプロセッサ。
【請求項１８】
前記計算プラットフォームが、当該プロセッサが前記計算プラットフォームにおいて設置されたときに少なくとも一つの通信インターフェースを介して通信上結合される管理容易性コンポーネントを含み、異常IPブロックを検出することに応答して、当該プロセッサが：
エラー信号をピン上にアサートするまたは通信インターフェースを介して割り込みをアサートして前記管理容易性コンポーネントにエラーを通知し；
通信インターフェースを介して前記管理容易性コンポーネントによって返される、割り込みを差し向けるべき一つまたは複数の安全エンクレーヴを同定する情報を受信するよう構成されている、
請求項１３ないし１７のうちいずれか一項記載のプロセッサ。
【請求項１９】
複数の相互接続を介して相互接続されている複数のIPブロックであって、前記複数のIPブロックは複数のコア、複数のキャッシュ、複数のエージェント、それぞれ一つまたは複数のメモリ・チャネルをもつ一つまたは複数のメモリ・コントローラおよび一つまたは複数の入出力（I/O）コンポーネントを含む、複数のIPブロックを含む第一のプロセッサと；
前記一つまたは複数のメモリ・チャネルを介して前記第一のプロセッサの前記一つまたは複数のメモリ・コントローラに動作上結合された一つまたは複数の第一のメモリ・デバイスとを有する計算プラットフォームであって、
前記第一のプロセッサはさらに、当該計算プラットフォームが動作しているときに複数の安全エンクレーヴを実装するために使われる複数の命令のためのマイクロコードを含み、各安全エンクレーヴは、前記一つまたは複数のメモリ・デバイスにおけるメモリの保護された部分にあるか保護された部分にマッピングされており、それに属する前記複数のIPブロックの部分をもち、前記第一のプロセッサは、エラー復元動作を実行するよう構成された埋め込み論理を含み、前記エラー復元動作は：
異常IPブロックを検出し；
前記複数の安全エンクレーヴのうちの前記異常IPブロックが属する一つまたは複数に対して割り込みを差し向けることを含む、
計算プラットフォーム。
【請求項２０】
レジスタと；
前記第一のプロセッサに動作上結合された管理容易性コンポーネントとをさらに有しており、
当該計算プラットフォームの動作の間に、各安全エンクレーヴをその安全エンクレーヴに属するIPブロックにマッピングする情報が前記レジスタに記憶され、異常IPブロックの検出に応答して、
前記第一のプロセッサが、前記管理容易性コンポーネントに向けて、プロセッサ・ピンまたは割り込みを介してエラーをアサートするよう構成されており、アサートされるエラーは前記異常IPブロックを同定し、
前記管理容易性コンポーネントは、そのIPブロックがどの安全エンクレーヴに属するかを同定するデータを前記レジスタから取り出すよう構成されている、
請求項１９記載の計算プラットフォーム。
【請求項２１】
前記第一のプロセッサがさらに：
前記複数の安全エンクレーヴのうち前記異常IPブロックが属する前記一つまたは複数の安全エンクレーヴの識別情報を、当該計算プラットフォームにおける前記管理容易性コンポーネントから受信し；
同定されている安全エンクレーヴのそれぞれに対して割り込みを差し向けるよう構成されている、
請求項２０記載の計算プラットフォーム。
【請求項２２】
前記第一のプロセッサが、該プロセッサがプロセッサ全体をリセットすることなく個々のIPブロックまたは関係したIPブロックの選択された集合をリセットできるようにするマイクロコード命令を含む、請求項１９ないし２１のうちいずれか一項記載の計算プラットフォーム。
【請求項２３】
差し向けられた割り込みを受信することに応答して、安全エンクレーヴが、前記第一のプロセッサをリセットすることなく前記異常IPブロックをリセットさせる割り込みハンドラーを実行する、請求項２２記載の計算プラットフォーム。
【請求項２４】
複数の相互接続を介して相互接続されている複数のIPブロックであって、前記複数のIPブロックは複数のコア、複数のキャッシュ、複数のエージェント、それぞれ一つまたは複数のメモリ・チャネルをもつ一つまたは複数のメモリ・コントローラおよび一つまたは複数の入出力（I/O）コンポーネントを含む、複数のIPブロックを含む第二のプロセッサと；
前記一つまたは複数のメモリ・チャネルを介して前記第二のプロセッサの前記一つまたは複数のメモリ・コントローラに動作上結合された一つまたは複数の第二のメモリ・デバイスと；
前記第一のプロセッサおよび第二のプロセッサを通信するよう結合するプロセッサ間相互接続とをさらに有しており、
前記第二のプロセッサはさらに、当該計算プラットフォームが動作しているときに複数の安全エンクレーヴを実装するために使われる複数の命令のためのマイクロコードを含み、各安全エンクレーヴは、前記一つまたは複数のメモリ・デバイスにおけるメモリの保護された部分にあるか保護された部分にマッピングされており、それに属する前記複数のIPブロックの部分をもち、
当該計算プラットフォームはさらに、
プラットフォーム・エラー源をエンクレーヴ固有または全システム規模として分類するデータを記憶し；
全システム規模のプラットフォーム・エラーを検出し；
各安全エンクレーヴに割り込みを差し向けて、各エンクレーヴに割り込みハンドラーを実行させ；
各安全エンクレーヴがその割り込みハンドラーの実行を完了したのち、当該計算プラットフォームをリセットするよう構成されている、
請求項１９ないし２３のうちいずれか一項記載の計算プラットフォーム。
【請求項２５】
前記複数の安全エンクレーヴが仮想安全エンクレーヴである、請求項１９ないし２４のうちいずれか一項記載の計算プラットフォーム。
【発明の詳細な説明】
【背景技術】
【０００１】
過去十年の間に、いわゆる「クラウドでホストされる」サービスの使用における多大な成長があった。そのようなサービスの例は、マイクロソフト（オンラインのホットメール／アウトルック）、グーグル（gmail）およびヤフー（ヤフー・メール）によって提供される電子メールサービス、マイクロソフト・オフィス３６５およびグーグルDocsのような生産性アプリケーションおよびアマゾン・ウェブ・サービス（AWS:  Amazon  Web  Services）およびエラスティック・コンピュート・クラウド（EC2:  Elastic  Compute  Cloud）およびマイクロソフトAzureのようなウェブ・サービス・プラットフォームを含む。クラウドでホストされるサービスは典型的には、サーバー・ブレードおよび／またはモジュールで満たされたブレード・サーバーならびに他の型のサーバー構成（たとえば1U、2Uおよび4Uサーバー）のような、さまざまな型のサーバーを収めたラックにおいて実装される、非常に多数の計算資源を有するデータ・センターを使って実装される。
【０００２】
サーバーOEM（Original  Equipment  Manufacturer［オリジナル製品製造業者］）およびCSP（Cloud  Service  Provider［クラウド・サービス・プロバイダー］）両方についての鍵となる指標は信頼性、可用性および保守性（RAS:  Reliability,  Availability,  and  Serviceability）である。RASはIBMによってそのメインフレームについての仕様を定義するために最初に使われたもので、もともとはハードウェアに適用されたが、今日のデータ・センターでは、RASはソフトウェアおよびネットワークにも適用される。
【０００３】
サーバーOEMおよびCSPは、ハードウェアによるRAS処理（hardware  RAS  handling）がシステム耐久性（system  resilience）を改善し続ける必要があることをしばしば示してきた。今日の仮想化された環境では、複数の仮想マシン（VM）が複数コアをもつ諸ホスト・プロセッサ上で実行され、各VMが一つまたは複数のサービス（またはそのようなサービスに関連するアプリケーション／プロセス）の集合をホストする。リセットを要求するプロセッサ障害の場合には、結果として生じるホスト可用性の喪失は数十のサービスに当てはまることがあり、著しいコストになることがある。特に、シリコン（すなわち、プロセッサ・ハードウェア）は、訂正不能なエラーを見るとき、機械チェックを合図し、典型的にはPCC＝1（processor  context  corrupt［プロセッサ・コンテキスト破損］）をもってエラーをログ記録する。そのようなエラーは、適正に機能するためにシリコンがリセットされることを要求する。現在の手法のもとでは、これはプロセッサ上で実行されているソフトウェアがあればそれを止めることを必要とする。そのようなソフトウェアはあらゆるVMを、よってVMによってホストされるあらゆるソフトウェア・ベースのサービスを含む。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】Frank  McKeen  et  al、「Innovative  Instructions  and  Software  Model  for  Isolated  Execution」、インテル（登録商標）コーポレイション、2013年
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、他方では、ハードウェアの進歩は、より高いレベルの可用性（システム稼働時間）および保守性を保証するための、向上した機械チェック（Machine  Check）、ファームウェア第一のエラー処理（firmware-first  handling  of  errors）およびメモリ・ポイズニング（memory  poisoning）などのような、耐久性に関係するさまざまな機能のサポートを含んでいる。これらの進歩は注目すべきものではあるが、OEMおよびCSPは、現在利用可能であるよりも大規模にこれらの機能を活用できるようになることを望んでいる。
【図面の簡単な説明】
【０００６】
上記の側面および本発明に付随する利点の多くは、付属の図面とともに以下の詳細な説明を参照することにより、より容易に理解され、よりよく理解されるようになる。図面において、同様の参照符号は、特に断わりのない限り、さまざまな図を通じて同様の部分を指す。
【図１】物理的および仮想メモリにおける安全エンクレーヴの位置と、安全エンクレーヴの例示的な一組の構成要素を示す概略図である。
【図２】高レベルのSGXハードウェアおよびソフトウェア・アーキテクチャーを示す概略図である。
【図３】エンクレーヴおよび非エンクレーヴ・メモリ・アクセスに関係する動作および論理を示すフローチャートである。
【図４ａ】複数の安全エンクレーヴが実装されている例示的な計算プラットフォームおよび計算ドメインを示す概略図である。
【図４ｂ】ある実施形態に基づく、計算プラットフォーム全体をリセットする必要なしにプラットフォーム・エラーからの回復をサポートする、図４ａの計算プラットフォームの増強されたバージョンを示す概略図である。
【図５】ある実施形態に基づく、プラットフォーム・エラー・イベントに応答して一つまたは複数の安全エンクレーヴをホストする計算プラットフォームによって実行される動作および論理を示すフローチャートである。
【図６】複数の安全エンクレーヴが実装されている計算プラットフォームおよび計算ドメインを示し、計算プラットフォーム上のIPおよび諸コンポーネントと、該IPおよび諸コンポーネントが属する安全エンクレーヴとの間のマッピングをさらに示す概略図である。
【発明を実施するための形態】
【０００７】
本稿では、安全エンクレーヴを使ってクラウド可用性およびシリコン隔離を高める方法および装置の実施形態が記述される。以下の記述では、本発明の実施形態の十全な理解を提供すべく、数多くの個別的詳細が記載されるが、当業者は、本発明は該個別的詳細の一つまたは複数がなくても、あるいは他の方法、コンポーネント、材料などを用いてでも、実施されうることを認識するであろう。他方、よく知られた構造、材料または動作は、本発明の諸側面を埋没させるのを避けるために詳細には図示や記述をしていない。
【０００８】
本明細書を通じた「一つの実施形態」または「ある実施形態」への言及は、その実施形態との関連で記述される特定の特徴、構造または特性が本発明の少なくとも一つの実施形態に含まれることを意味する。よって、本明細書を通じた随所で「一つの実施形態では」または「ある実施形態では」といった句が出現することは、必ずしもみなが同じ実施形態を指しているわけではない。さらに、特定の特徴、構造または特性は一つまたは複数の実施形態において任意の好適な仕方で組み合わされてもよい。
【０００９】
明確のため、本願の図面における個々の構成要素は、特定の参照符号によってではなく図面におけるそのラベルによって参照されることもある。さらに、（特定の構成要素ではなく）特定の型の構成要素を指す参照符号が、参照符号に「典型的（typical）」を意味する「(typ)」を続けたものをもって示されることがある。これらの構成要素の構成は、存在しうるが簡明のため図面に示されていない類似の構成要素またはそれ以外に別個の参照符号でラベル付けされていない同様の構成要素についての典型であることが理解される。逆に、「(typ)」はその構成要素、要素等がその開示される機能、実装、目的等のために典型的に使われることを意味するものとは解釈されない。
【００１０】
近年、インテル（登録商標）・コーポレイションは、インテル（登録商標）・ソフトウェア保護拡張（Software  Guard  Extensions）（INTEL（登録商標）  SGX）という、将来のインテル（登録商標）・アーキテクチャー・プロセッサに加えられるメモリ・アクセスのための一組の命令および機構を記述する文書を公開した。インテル（登録商標）SGXは、SGX1およびSGX2と称される命令拡張の二つの集合を包含できる。SGX1拡張は、アプリケーションが、エンクレーヴ（enclave）と称される保護されたコンテナをインスタンス生成することを許容する。
【００１１】
エンクレーヴとは、アプリケーションのアドレス空間における保護された領域であり（図１参照）、これが、特権のあるマルウェアがあったとしても秘匿性（confidentiality）および完全性（integrity）を提供する。エンクレーヴ内に存在するのでないいかなるソフトウェアからのエンクレーヴ・メモリ領域へのアクセスも防止される。SGX2拡張は、エンクレーヴ内のエンクレーヴ資源およびスレッド実行のランタイム管理における追加的な柔軟性を許容する。
【００１２】
サーバー環境において使われるときのSGXは、クラウドにおいてホストされているユーザーのアプリケーションが、観察、破損などから安全であることを保証することをねらいとする技術である。問題は、どのようにしてサーバーが仮想化および要求システム資源とともに、RAS（たとえばエラー）イベントにおけるそのようなシステム資源のOEMおよびCSP管理と結合されて、使われるかである。
【００１３】
SGXおよびRASの要求は、SGXの務めは、必要であればシステムを止めることによって常時顧客エンクレーヴを保護することであり、一方、CSP/OEMの務めは稼働時間を最大にすることであるという点で、相反している。本稿に記載される実施形態は、両方の関心に対処し、サーバー全体を止めることなく、障害を起こした／起こしつつあるハードウェアが選択的にリセットできるようにする。今日までのインテルRASのテーマは、ハードウェアおよびシリコンを理解するCSP／OEMが、システム稼働時間を増すために根底にある問題を是正しようとすることを許容することであった。
【００１４】
第一の手法によれば、安全エンクレーヴにおいて走っているまたは安全エンクレーヴに関連付けられているソフトウェアが、訂正不能なまたは致命的なエラー・イベントのようなRASイベントを処理することにおいて支援できるようにするために、SGXアーキテクチャーに拡張が加えられる。以下でより詳細に述べるように、エンクレーヴの所有者をターゲットとするエンクレーヴ・レベルRASフィーチャーを表面化させるRASの新たなレベルを作り出すための機構が提供される。より具体的には、エンクレーヴは、エンクレーヴ所有者が適切と見なす仕方でエラー・イベントを処理する機会をもつことになる。これは、WLOGで（without  loss  of  generality［一般性を失うことなく］）、エンクレーヴをシャットダウンすること、OEM/CSPプラットフォームまたはOSコードに制御を渡すこと、ハンドオフに先立って安全な情報をクリーンアップすることなどを含みうる。
【００１５】
実装環境のよりよい理解をもつために、選択されたSGXフィーチャーおよびアーキテクチャーについてここで手短かに論じておく。
【００１６】
SGXは、アプリケーションの保護された部分が、平文で配送されることを許容する。エンクレーヴが構築される前には、エンクレーヴ・コードおよびデータは、自由に観察および解析できる。保護された部分はエンクレーヴ中にロードされ、そこでそのコードおよびデータが測定される。ひとたびアプリケーションのコードおよびデータがエンクレーヴ中にロードされたら、それはあらゆる外部ソフトウェア・アクセスに対して保護される。アプリケーションはその素性をリモート・パーティーに証明することができ、安全に鍵およびクレデンシャルを与えられることができる。アプリケーションは、エンクレーヴの外側に記憶したい鍵およびデータを保護するために使用できるエンクレーヴおよびプラットフォーム固有鍵を要求することもできる。
【００１７】
図１は、オペレーティング・システム（OS）１０２、エンクレーヴ１０４、アプリケーション・スタック１０６およびアプリケーション・コード１０８を含むプラットフォームの仮想アドレス空間１００のメモリ・レイアウトを示している。エンクレーヴ１０４仮想メモリは物理メモリ１１２の保護された領域１１０にマッピングされる。エンクレーヴ１０４はさらに、エントリー・テーブル１１４、エンクレーヴ・ヒープ１１６、エンクレーヴ・スタック１１８およびエンクレーヴ・コード１２０を含むものとして描かれている。
【００１８】
図２は、高レベルのSGXハードウェアおよびソフトウェア・アーキテクチャーを示している。このアーキテクチャーは、露出されるハードウェア層、特権環境層およびアプリケーション環境層を含む。プラットフォーム２００上の露出されるハードウェアは、エンクレーヴ・ページ・キャッシュ（EPC:  Enclave  Page  Cache）２０２およびエンクレーヴ・ページ・キャッシュ・マップ（EPCM:  Enclave  Page  Cache  Map）２０４を含む。ある実施形態では、EPC  ２０２は保護されたコードおよびデータを4Kページにおいて含み、一方、EPCM  ２０４は各エンクレーヴ・ページについてのメタデータを含む。ランタイム・コンポーネントを有するSGXモジュール２０６は特権環境層内に描かれており、OSにおける対応するページ・テーブル・データ構造を介して実装されるページ・テーブル２０８を含む。アプリケーション環境層はSGCユーザー・ランタイム・インスタンス２１０および２１２ならびにエンクレーヴ２１４および２１６を含む。
【００１９】
高レベルでは、SGXをサポートし、暗号学的に保護されたプラットフォームDRAMにおいてEPCを実装するCPUは、BIOSがプロセッサ予約メモリ（PRM:  Processor  Reserved  Memory）と呼ばれるメモリの範囲（単数または複数）を予約する能力をサポートする。BIOSは、まとめてPRMRRとして知られる一組の範囲レジスタ（range  register）を構成設定することによって、PRMを割り当てる。
【００２０】
メイン・メモリをEPCのための記憶として使うことは、多くの実装について非常に望ましい。課題は、DRAMメモリに対して仕掛けられることのできる多くの既知のソフトウェアおよびハードウェア攻撃があるということである。DRAM内のEPCコンテンツを暗号学的に保護することは、これらの攻撃に対して防衛する一つの方法である。
【００２１】
これは、メモリ暗号化エンジン（MEE:  Memory  Encryption  Engine）によって容易にされる。これは、プロセッサ・パッケージとメイン・メモリ（DRAM）との間の選択されたトラフィックを暗号化し、完全性保護するハードウェア・ユニットである。MEEが動作する全体的なメモリ領域は、MEE領域と呼ばれる。実装に依存して、PRMは一つまたは複数のMEE領域によってカバーされる。
【００２２】
メモリ・アクセス・セマンティクス
CPUメモリ保護機構は、あらゆる外部エージェント（DMA、グラフィック・エンジンなど）からのPRMへのアクセスを、そのようなアクセスを存在しないメモリへの参照として扱うことによって、物理的に遮断する。MOVおよび他のメモリ関係の命令を使ってエンクレーヴ内のページにアクセスするために、ハードウェアは図３に記載されるように以下のことをチェックする：
論理プロセッサが「エンクレーヴ・モード」で実行中である、
ページが、論理プロセッサが実行しているエンクレーヴに属する、
ページが正しい仮想アドレスを使ってアクセスされる。
【００２３】
アクセスされるページがエンクレーヴの仮想アドレス空間の一部ではなく、EPCの一部であれば、アクセスは、存在しないメモリへの参照として扱われる。ページがエンクレーヴ仮想アドレス空間の外部であれば、ハードウェアは、エンクレーヴ・コードがPRMの外部のメモリにアクセスすることを許容する。ページがエンクレーヴの仮想アドレス空間の外部であり、PRMページに解決される場合には、ハードウェアは、フォールトを信号伝達することによってそのようなアクセスを防止する。エンクレーヴ・モードにないプロセッサによるエンクレーヴ・ページへのアクセスは、存在しないメモリへの参照として扱われる。
【００２４】
図３は、エンクレーヴおよび非エンクレーヴ・メモリ・アクセスに関係する動作および論理を示すフローチャート３００を示している。ブロック３０２では、線形メモリ・アドレスが受領され、伝統的なページ・テーブル・チェックが実行され、結果として出力物理アドレスを与える。判断ブロック３０４において、物理アドレスがエンクレーヴ・アクセスに対応するかどうか（たとえば、物理アドレスがエンクレーヴのために割り当てられた物理メモリ内の領域に対応するかどうか）について判定がなされる。答えがNOであれば、アクセスは非エンクレーヴ・アクセスであり、論理は判断ブロック３０６に進み、アドレスがエンクレーヴ・ページ・キャッシュであるかどうかについて判定がなされる。（非エンクレーヴ・アクセスについては）そうではないはずなので、答えがYESであれば、論理はブロック３０８に進んで、そのアドレスはアボート・ページで置き換えられる。判断ブロック３０６への答えがNOであれば、これは通常のメモリ・アクセスであり、それはブロック３１０において許容される。
【００２５】
判断ブロック３０４に戻って、メモリ・アクセスがエンクレーヴ・アクセスであれば、答えはYESであり、論理は判断ブロック３１２に進み、アドレスがエンクレーヴ・ページ・キャッシュであるかどうかについて判定がなされる。答えがYESであれば、ブロック３１４においてEPCMチェックが実行され、判断ブロック３１６によって描かれるようにチェックが合格すれば、論理はブロック３１０に進み、メモリ・アクセスを許容する。判断ブロック３１２も３１６も、答えがNOであれば、論理はフォールト信号伝達ブロック３２０に進み、メモリ・アクセス・フォールトを信号伝達する。
【００２６】
図４ａは、n個のエンクレーヴ４０４が実装される例示的な計算プラットフォーム４００ａおよび計算ドメイン４０２を示している。コンピュータ・プラットフォーム４００は、UPI（Universal  Path  Interconnect［ユニバーサル経路相互接続］）相互接続４０８を介して結合されるm個の処理ユニット（CPU）４０６を含む。各CPU  ４０６はそれぞれのメモリ４１０に結合される。CPU-0は直接メディア・インターフェース（DMI:  direct  media  interface）４１２を介して、管理容易性エンジン（ME:  manageability  engine）４１６および革新エンジン（IE:  innovation  engine）４１８を含むプラットフォーム・コントローラ・ハブ（PCH:  platform  controller  hub）４１４に結合される。任意的なベースボード管理コントローラ（BMC:  baseboard  management  controller）４２０もPCI  ４１４に結合されているものとして描かれている。
【００２７】
ある実施形態では、各CPU  ４０６は複数のコア４２２を含む。また、CPU  ４０６は、メモリ４１０の別個の部分にアクセスするよう構成された複数のメモリ・チャネルを有していてもよい。
【００２８】
ある実施形態では、ME  ４１６は、集束されたセキュリティおよび管理容易性エンジン（CSME:  converged  security  and  manageability  engine）として実装される。いくつかの実施形態では、オリジナル製品製造業者（OEM）は、ME  ４１６によって提供される便益を増強するためにカスタマイズされた機能を配備することを望むことがある。これらはIE  ４１８によって実装されてもよく、該IE  ４１８はOEM革新エンジンとも称される。一般に、IE  ４１８の使用は任意的である。ME  ４１６およびIE  ４１８（もし使われるなら）は、プラットフォーム管理容易性動作を実行するために使われる管理容易性サブシステムの一部である。
【００２９】
現在のSGXアーキテクチャーの一つの実施形態のもとでは、各SGXエンクレーヴ４０４は専用のハードウェア（たとえば専用のCPU、一つまたは複数の専用のプロセッサ・コアおよびメモリ）をもつ。ある実施形態では、m＝nであり、各エンクレーヴ４０４について、専用のCPU  ４０６およびその付随するメモリ４１０がある。任意的に、のちに示すように、各エンクレーヴはあるIP（知的財産）ブロック（一般に「IPブロック」（IP  block）、「IPコア」（IP  core）、あるいは単に「IP」とも称される）に関連付けられ、それらのIPブロックのいくつかは専用であってもよく、いくつかは二つ以上のエンクレーヴを横断して共有されていてもよい。
【００３０】
現在の手法のもとでは、MCERR（machine  check  error［機械チェック・エラー］）のようなプラットフォーム・イベントが起こるとき、設計により、すべてのエンクレーヴは一掃され、システムは正しい動作を可能にするためにリセットを要求する。ハードウェア、OSまたはプラットフォーム・ソフトウェアが、どれでもよいがあるハードウェア／ソフトウェア片がそのエラーを引き起こしたと判定する場合には、エンクレーヴは保護され、一掃される。これは、たとえ遭遇されたエラーが「回復可能な」変種であったとしても成り立つ。SGXが有効にされていなければ、伝統的なエラー処理が生起するが、それでもPCC（プロセッサ・コンテキスト破損）がセットされるエラーがある場合には、リセットが要求される。これは大半のエラーについて成り立つ。
【００３１】
本稿の新規な手法のある実施形態のもとでは、プラットフォーム・シリコンは、（全部へではなく）影響を受けたエンクレーヴへの差し向けられた（directed）MCERR（機械チェック）を有効にし、その情報をレジスタ（たとえば構成設定空間レジスタ（CSR:  configuration  space  register））に入れる。この情報をレジスタ中に加える理由は、シリコンがエラーをアサートするとき、管理容易性サブコンポーネントはピン／割り込みによってアサートされたエラーを見ることになるということである。すると、管理容易性サブコンポーネントは作動し、どのエンクレーヴがそのエラーによって影響を受けたかを判別する必要があることになる。
【００３２】
加えて、本手法は以下のことをも含む：
CPUエラー源をエンクレーヴ固有（enclave-specific）または全システム規模（system-wide）として分類する。たとえば、メモリ・サブシステム・エラーはエンクレーヴ固有であることがあるが、KTI相互接続サブシステム・エラーは全システム規模であろう。
【００３３】
IPが自らがどのエンクレーヴ（単数または複数）に属しているかを構成設定され、そのIPの資源を消費しているコア（単数または複数）のみにMCERRを送る機能を加える。
【００３４】
エンクレーヴ（単数または複数）は、割り込み（同期的なエラー信号伝達）を受信するとき、そのエラーを処理することについての判断をもつ。これは、信頼されるパートナー（CSP/OEM、代替エンクレーヴ、プラットフォーム・ファームウェア（FW）、OSなど）がそのエラーを処理すること、情報を渡すことまたは単に当該エンクレーヴを完全に止めることを許容することを含むことができる。これは、後述するファームウェア・フローにおいてより明白になるであろう。
【００３５】
図４ｂは、新たなアーキテクチャー４００ｂのある実施形態を高レベルで示している。図のように、計算プラットフォーム４００ｂは、BMC  ４２０とCPU-0の間で送られる、エラー信号およびPECI（Platform  Environment  Control  Interface［プラットフォーム環境制御インターフェース］）信号をさらに追加する。たとえば、CPU-0は、BMC  ４２０によって検出可能であるERR[0]、ERR[1]、ERR[2]、MSMI#、CATERR#などのようなエラーをアサートしてもよい。この例では、CPU-0内のIPが異常であると検出されており、それがCPU-0を介してアクセスされるメモリ４１０の一部におけるメモリ障害または破損につながっている。異常なプラットフォームIP／メモリ資源の一部は、エンクレーヴ３および５が構成設定され、インスタンス生成されたときに、該エンクレーヴ３および５に割り当てられた。よって、エンクレーヴ３および５だけが、異常IPのリセットとの関連で止められ、残りのエンクレーヴの動作は影響されない。
【００３６】
ある実施形態では、シリコンでエラーが起こるとき、CPUは外部ピンをアサートし、エラーがBMC  ４２０、ME  ４１６またはIE  ４１８によって検出される。BMC  ４２０、ME  ４１６またはIE  ４１８は、安全エンクレーヴを自らの資源にマッピングする情報を記憶しているか、そのような情報へのアクセスをもつ。具体的なエラーに基づいて、BMC／ME／IEは資源マッピング情報を使って、影響される安全エンクレーヴを同定し、影響される安全エンクレーヴを同定する対応する情報をCPUに送り返す。次いで、CPUは影響されるエンクレーヴ（単数または複数）に差し向けられた割り込みをする（directed  interrupt）。ある実施形態では、エンクレーヴ・セットアップの間、エンクレーヴは、該割り込みにサービスするためのクリティカル・エンクレーヴ・プラットフォーム割り込みハンドラーを生成することを受け持つ。
【００３７】
図５のフローチャート５００は、ある実施形態に基づき、エンクレーヴがどのようにしてエラー・イベントに応答するかを示している。フローは開始ブロック５０２で始まり、エンクレーヴがアプリケーションを実行する。シリコン・エラーの発生は判断ブロック５０４によって描かれている。これは非同期イベントであるが、簡便のためループされたフローとして示されている。シリコンで生成されたエラーに応答して、判断ブロック５０４への答えはYESとなり、論理はブロック５０６に進み、安全エンクレーヴ（SE）プラットフォーム・シリコン・ハンドラーが呼び出される。
【００３８】
次に、ブロック５０８において、セキュリティ・クリーンアップが実行される。SEは、秩序だった仕方で処理される必要のある何らかの量の情報をもつことが期待される。たとえば、ある実施形態では、エンクレーヴはすべてのキーをゼロにし、エンクレーヴに関連付けられたメモリを安全に消去する。
【００３９】
次に論理は判断ブロック５１０に進み、ファームウェアまたはオペレーティング・システムがイベントを処理することを許容するかどうかの決定がなされる。答えがYESであれば、プラットフォーム・レベル割り込みがブロック５１２においてアサートされ、関連する割り込み処理作業が終了ブロック５１４において実行される。判断ブロック５１０への答えがNOであれば、論理はブロック５１６に進み、冗長性のために任意的なSEからSEへの通信が許容される（たとえば、破棄されるSEによって維持されているデータが、破棄されない別のSEに通信される）。次いで、終了ブロック５１８に描かれているように、SE作業は停止され、アプリケーションの破棄（teardown）が許容される。
【００４０】
図６は、ある実施形態に基づく、計算プラットフォーム４００ｂのさらなる詳細を示している。簡単のためおよび図面のスペース不足のため、図６は二つのCPU  ４０６のみを示しており、これらはCPU-0およびCPU-1と称される。一般に、計算プラットフォームは、1-mのCPUを有することができ、アーキテクチャーに依存して、各CPUはそれぞれのソケットに関連付けられていてもよく、あるいはソケットと称されてもよい。図６に示した計算プラットフォームは二ソケット・プラットフォームと称されてもよい。
【００４１】
CPU-1は、ある実施形態に基づく、CPU  ４０６のさらなる詳細を示している。CPU-0も同様の構成をもつことは理解されるであろう。さらに、m個のCPUのそれぞれが同様の構成を有していてもよい。CPU-1は8個のコアC0……C7を含み、それぞれがそれぞれのエージェントA0……A7に結合されている。エージェントA0……A7は相互接続６００に結合されている。やはり相互接続６００に結合されて示されているものとして、CSR  ６０２、IP  ６０４および６０６の対、最終レベルキャッシュ（LLC:  last  level  cache）６１２に結合されたメモリ暗号化エンジンをもつメモリ・コントローラ（MC/MEE:  memory  controller  with  memory  encryption  engine）６０８および６１０の対がある。さらに詳細に示されるように、各コア４２２はレベル１（L1）およびレベル２（L2）キャッシュを含む。一般に、エージェントA0……A7は、典型的にプロセッサ・コアに関連付けられている、キャッシング・エージェントのような一つまたは複数のエージェントを表わす。
【００４２】
ある実施形態では、相互接続６００は、各コア４２２のL1/L2キャッシュ、LLC  ６１２およびメモリ４１０−０および４１０−１を含むコヒーレント・メモリ・ドメインにおけるコヒーレント相互接続に対応する。ある実施形態では、IPブロック６０４および６０６の一つまたは複数は入出力（I/O）相互接続（スペース不足のため図示せず）に接続されており、これはさらにブリッジなどを介して相互接続６００に接続されている。
【００４３】
図のように、さまざまなプラットフォーム資源が対応するエンクレーヴに割り当てられる。たとえば、CPU-1について：
コアC0およびC1ならびにそれらのエージェントはエンクレーヴ５に割り当てられる；
コアC2およびC3（図示せず）ならびにそれらのエージェントはエンクレーヴ６に割り当てられる；
コアC4およびC5（図示せず）ならびにそれらのエージェントはエンクレーヴ７に割り当てられる；
コアC6（図示せず）およびC7ならびにそれらのエージェントはエンクレーヴ８に割り当てられる。
【００４４】
図のように、エンクレーヴ５〜８のために使われるメモリ４１０−０および４１０−１の保護された領域がある。（メモリ４１０−０および４１０−１は仮想メモリではなく物理メモリを表わすが、メモリ・サブシステムは物理メモリと仮想メモリとの間のマッピングのためのページング・テーブルなど（図示せず）をもつであろうことを注意しておく。）
ある実施形態では、IP  ６０４は、PCIeルート・コントローラであり、IPブロック６１４、６１６のそれぞれおよびディスク・コントローラ６１８はPCIe相互接続を介してIP  ６０４に結合される。IP  ６１４および６１６の一つまたは複数は、計算プラットフォーム４００ｂのメイン・ボード上にマウントされるまたは計算プラットフォーム４００ｂ上のPCIeスロット（別個には図示せず）に設置されるI/Oコンポーネントを表わしていてもよい。たとえば、ある実施形態では、IP  ６１４はネットワーク・インターフェース・コントローラであり、一方、IP  ６１６はグラフィック・チップであるまたはグラフィック・カードもしくはグラフィック・モジュールを表わす。
【００４５】
図６は、種々の型の共有される資源と、それらが個々にリセットできるかCPUもしくはプラットフォームのリセットを必要とするか否かとを描くために、さまざまなクロスハッチ・パターンの使用を含んでいる。たとえば、PCH  ４１４、UPI  ４０８またはIP  ６１４のために検出されたエラーはプラットフォーム・リセットを必要とし、計算プラットフォーム４００ｂによってホストされるエンクレーヴ４０４すべての破棄に関わる。逆に、IP  ６１６のエラーは局在化したIPリセットとして処理されてもよく、これは（IP  ６１６によってどんな型の機能が提供されるかに依存して）どのエンクレーヴの破棄も要求しないことがある。
【００４６】
同様に、CPUレベルでは、所与のコンポーネントについてのエラー・イベントはCPUのリセットを要求してもよく、あるいは個別のコンポーネント（または関係したコンポーネントの組）のリセットに関わってもよい。たとえば、相互接続６００にエラーが生じたら、CPU-1のリセットが必要とされることがある。相互接続６００は、プロセッサ・コア４２２およびCPU-1の関連付けられたコヒーレント・メモリ・ドメインによるすべてのメモリ・アクセスに関連するからである。同様に異常なLLC  ６１２は、具体的なアーキテクチャーに依存してCPUリセットを要求することがある。たとえば、LLC  ６１２が共有されるキャッシュとして実装される場合、CPUリセットが要求されることがある。逆に、LLC  ６１２が「スライスされた」LLCとして実装される場合には、異常スライスに関連するメモリ部分のみについてのエラー処理が実行されるだけでよい状況がありうる。さらに、具体的なキャッシュ・アーキテクチャーに依存して、LLC内のデータはL1キャッシュまたはL2キャッシュのいずれかにおいて常に他所に存在することがあり、そのためLLCにおけるエラーはどのエンクレーヴの破棄も必要としないことがある。
【００４７】
CPU上のいくつかの個別のコンポーネントによって引き起こされるエラーは、その個別のコンポーネントまたは一組の関係したコンポーネントをリセットすることによって処理されてもよい。そのような状況のもとでは、異常コンポーネントに関連するエンクレーヴ（単数または複数）のみが破棄される必要がある。場合によっては、障害を起こしたコンポーネントはエンクレーヴによって使用されるデータを生成しないことがあり、よってどのエンクレーヴも破棄される必要がないことになる。たとえば、そのようなコンポーネントはIP  ６０６によって描かれている。
【００４８】
コアまたはエージェント・エラーの場合、異常コンポーネントは（エラーの型に依存して）他のコアおよび／またはエージェントをリセットする必要なしに、リセットされてもよい。このシナリオのもとでは、異常コアまたはエージェントに関連するエンクレーヴが破棄される必要がある。たとえば、コアC0においてエラーがあるとする。コアC0はエンクレーヴ５に関連付けられているだけなので、これが、コアC0のリセットとの関連で破棄される必要のある唯一のエンクレーヴである。
【００４９】
別の事例では、CPU内のいくつかのコンポーネントにおけるエラーは、そのCPUに関連するエンクレーヴの一部のみの破棄につながることがある。たとえば、メモリ・コントローラ６０８についての回復不能エラーが検出される場合、エンクレーヴ５および６が破棄される一方、エンクレーヴ７および８は影響されない。
【００５０】
SGXが有効にされていない別の手法のもとでは、仮想エンクレーヴ（virtual  enclave）またはvSEは、CPUをリセットしたりプラットフォーム全体を止めたりする必要なしに、（該当するエラー型のもとでの）選択されたコンポーネントのリセットを可能にする仕方で、適切なエラー処理を実施するよう構成される。シリコン・マイクロアーキテクチャーは、RASエラー隔離（isolation）ドメインの新たなレベルのために向上される。さらなる詳細では、下記で概説されるシリコン変更は追加的なRASを提供し、それにより、シリコンのコンポーネントにおけるエラーにおいて、向上されたマイクロアーキテクチャーが、計算プラットフォームおよびその上で走る関連するアプリケーションの残りに影響することなく、シリコンの影響される領域のみをリセットすることができる。
【００５１】
以下は、非特許文献１からの抜粋を含む。同文献はここに参照によって組み込まれる。
【００５２】
エンクレーヴ生成およびセットアップ
エンクレーヴ生成プロセスはエンクレーヴ・バイナリーをEPCにロードし、エンクレーヴ素性を確立する。エンクレーヴ生成プロセスは複数の段階に分割される。それらの段階は、エンクレーヴ制御構造の初期化、EPCページの割り当ておよびエンクレーヴ・コンテンツをページにロードすること、エンクレーヴ・コンテンツの測定および最後にエンクレーヴ素性を確立することを含む。
【００５３】
これらの動作は、以下の命令：ECREATE  EADD、EEXTENDおよびEINITによってサポートされる。ECREATEは、エンクレーヴ生成プロセスを開始し、エンクレーヴについてのグローバル情報を含むSGXエンクレーヴ制御構造（SECS:  SGX  Enclave  Control  Structure）を初期化する。EADDはEPCページをエンクレーヴにコミットし、SECSにおいてそのコミットメントを記録するが、コンテンツは記録しない。エンクレーヴのメモリ・コンテンツはEEXTENDによって明示的に測定される。EINITは生成プロセスを完了し、これはエンクレーヴ測定を最終化し、エンクレーヴ素性を確立する。EINITが実行されるまで、エンクレーヴ入場は許可されない。
【００５４】
エンクレーヴ生成プロセスはECREATEで始まる。これは空いているEPCページをSECSページに変換し、前記構造を初期化する。ECREATEの一部として、システム・ソフトウェアはどのEPCページがSECSにされるかを選択し、エンクレーヴがアクセスできる保護されたアドレスの範囲、動作モード（32ビットか64ビットか）、エンクレーヴによってサポートされるプロセッサ機能およびデバッグ・アクセスが許容されるかどうかを含むエンクレーヴのいくつかの属性を指定する。
【００５５】
エンクレーヴ入場および退場
エンクレーヴの素性を保存することにとって枢要なのは、実行のエンクレーヴ内へのおよびエンクレーヴからの移行を制御することである。入場プロセスは、エンクレーヴの保護されるアドレス領域と重なるキャッシュされたトランスレーションがあればそれをクリアーする必要がある。これは、すべての保護されたエンクレーヴ・メモリ・アクセスが適正にチェックされることを保証する。入場プロセスは、エンクレーヴ内のどこでプロセッサが制御を移行し、エンクレーヴ・モードの実行を有効にするかを同定しなければならない。エンクレーヴからの退場はやはりエンクレーヴの保護されたアドレス領域を参照するキャッシュされたトランスレーションがあればクリアーする必要がある。それにより、他のソフトウェアは、キャッシュされたトランスレーションを使ってエンクレーヴの保護されたメモリにアクセスすることはできない。
【００５６】
エンクレーヴ・モードで動作する間、割り込み、フォールトまたは例外が発生することがある。伝統的には、プロセッサは、システム・ソフトウェアによって指定されたフォールト・ハンドラーにベクターする。フォールト・ハンドラーはレジスタ状態を保存し、イベントにサービスする。ひとたびイベントがサービスされたら、システム・ソフトウェアはレジスタ状態を復元し、制御を、ソフトウェアが中断されたところに戻す。システム・ソフトウェアがエンクレーヴのレジスタ状態を読むおよび／または修正することができるようにすることは、システム・ソフトウェアをエンクレーヴの信頼境界内に置く。結果として、SGXは、エンクレーヴの完全性および秘匿性を保護するために新たなルーチンを導入する。
【００５７】
SGXは、プログラム的に（たとえば、呼び出し／復帰シーケンスの一部として）エンクレーヴに入退場するためのEENTERおよびEEXIT命令を提供する。イベントに起因してエンクレーヴ退場が起こるとき、プロセッサは非同期退場（AEX:  Asynchronous  Exit）と呼ばれる特殊な内部ルーチンを呼び出す。これはエンクレーヴ・レジスタ状態を保存し、レジスタをクリアーし、フォールトを起こした命令アドレスをEENTERによって指定される値に設定する。ERESUME命令は状態をもとに復元し、エンクレーヴが実行を再開できるようにする。
【００５８】
EENTER命令はプログラム制御のもとでエンクレーヴにはいるメソッドである。EENTERを実行するために、ソフトウェアは、はいるべきエンクレーヴの一部であるスレッド制御構造（TCS:  thread  control  structure）のアドレスを供給する必要がある。TCSは、制御を移行すべきエンクレーヴ内部の位置を指示する。そこで、エンクレーヴ内でAEXがレジスタ状態を記憶するべきである。論理プロセッサがエンクレーヴにはいると、論理プロセッサがエンクレーヴから出るまで、TCSはビジーであると考えられる。SGXはエンクレーヴ・ビルダーが複数のTCS構造を定義し、それによりマルチスレッド・エンクレーヴのサポートを提供することを許容する。
【００５９】
EENTERは非同期退場ポインター（AEP:  Asynchronous  Exit  Pointer）パラメーターをも定義する。AEPは、AEX後にエンクレーヴ中に遷移して戻るために使われる、エンクレーヴの外部のアドレスである。AEPは、例外ハンドラーがIRETを使って戻るアドレスである。典型的には、その位置はERESUME命令を含む。ERESUMEは、エンクレーヴ保存状態から取得されたエンクレーヴ・アドレスに制御を移行させる。
【００６０】
例外および割り込みのような非同期イベントは、エンクレーヴ内での実行中に発生することがある。これらのイベントはエンクレーヴ退場イベント（EEE:  Enclave  Exiting  Event）と称される。EEEに際して、プロセッサ状態はエンクレーヴ内部に安全に保存され、次いで秘密漏洩を防ぐために合成状態によって置き換えられる。状態を安全に保存し、合成状態を確立するプロセスは、非同期エンクレーヴ退場（AEX:  Asynchronous  Enclave  Exit）と呼ばれる。
【００６１】
EEEの一部として、AEPは、フォールトを起こしているアドレスの位置としてスタックにプッシュされる。これは、IRET（Interrupt  Return［割り込み復帰］命令）の実行後に制御が戻る位置である。ERESUMEはエンクレーヴに再入場するためにその点から実行されることができる。
【００６２】
AEX完了後、論理プロセッサはもはやエンクレーヴ・モードになく、退場イベントは正常に処理される。AEX完了後に発生する新たなイベントがあれば、エンクレーヴ外で発生したものとして扱われる。
【００６３】
システム・ソフトウェアが、論理プロセスにエンクレーヴから出させたイベントにサービスしたのち、論理プロセッサはERESUMEを使って実行を再開できる。EENTERとは異なり、ERESUMEはレジスタを復元し、実行が中断されたところに制御を戻す。退場の原因が例外またはフォールトであり、解決されなかった場合には、イベントは再びトリガーされる。たとえば、エンクレーヴが0による除算演算を実行する場合、ERESUMEを実行することは、エンクレーヴに、フォールトを起こした命令を再実行しようとさせる。エンクレーヴ内で発生した例外を処理するために、ソフトウェアは、異なる位置でエンクレーヴにはいり、例外ハンドラーを呼び出すべきである。EENTER命令が使われるべきである。例外ハンドラーは、フォールトを起こした条件を解決しようと試みるか、あるいは単に戻ってエンクレーヴが終了されるべきであることをソフトウェアに示すことができる。
【００６４】
本稿に記載された主題のさらなる側面が以下の付番条項において記載される。
〔条項１〕
複数の安全エンクレーヴが実装されている計算ドメインをホストする計算プラットフォームにおいてハードウェア・エラーを処理する方法であって：
前記計算プラットフォームにおける異常ハードウェアに対応するプラットフォーム・エラー・イベントを検出する段階と；
前記異常ハードウェアによって影響される前記複数の安全エンクレーヴのうちの一つまたは複数を同定する段階と；
前記複数の安全エンクレーヴのうちの同定された前記一つまたは複数のそれぞれに対して割り込みを差し向ける（directing）段階とを含む、
方法。
〔条項２〕
前記異常ハードウェアが前記計算プラットフォームにおけるプロセッサ上の異常知的財産ブロック（IP）に対応し、当該方法がさらに：
前記異常IPに関連付けられている少なくとも一つの安全エンクレーヴについて、
その安全エンクレーヴに差し向けられた割り込みの受信に応答して、前記プロセッサをリセットすることなく前記異常IPをリセットさせる、エラー処理ルーチンまたはエラー処理ルーチンの初期部分の一方を実行する段階を含む、
条項１記載の方法。
〔条項３〕
前記異常IPに関連付けられている前記少なくとも一つの安全エンクレーヴのそれぞれについて：
その安全エンクレーヴを破棄し；
前記異常IPがリセットされたのちに新たな安全エンクレーヴを生成することをさらに含む、
条項２記載の方法。
〔条項４〕
第一の安全エンクレーヴが差し向けられた割り込みを受信するのに応答して、前記第一の安全エンクレーヴにおいて実行中のソフトウェアによって、前記第一の安全エンクレーヴにおけるデータの少なくとも一部を第二の安全エンクレーヴにコピーする割り込みサービス・ルーチンが実行される、
条項２または３記載の方法。
〔条項５〕
前記異常ハードウェアによって影響される前記複数の安全エンクレーヴのうちの一つまたは複数を同定する段階が：
プラットフォーム・エラー源をエンクレーヴ固有または全システム規模として分類し；
前記計算プラットフォーム上の複数の知的財産ブロック（IP）のそれぞれに属する安全エンクレーヴを同定するマッピング・データを構成し；
前記IPのうちの一つが前記プラットフォーム・エラー・イベントについてのエラー源であると判別し；
前記マッピング・データを使って、エラー源であると判別されたIPに属する安全エンクレーヴを同定することを含む、
条項１ないし４のうちいずれか一項記載の方法。
〔条項６〕
安全エンクレーヴのセットアップの間に、エンクレーヴ・プラットフォーム割り込みハンドラーを生成する段階をさらに含み、前記エンクレーヴ・プラットフォーム割り込みハンドラーは、前記プラットフォーム・エラー・イベントに応答してその安全エンクレーヴに差し向けられた割り込みを処理するまたはその安全エンクレーヴに差し向けられた前記割り込みの処理を開始するの一方を行なうよう構成されている、条項１ないし５のうちいずれか一項記載の方法。
〔条項７〕
第一の安全エンクレーヴによる前記エンクレーヴ・プラットフォーム割り込みハンドラーの実行が、前記第一の安全エンクレーヴにおけるデータの少なくとも一部を第二の安全エンクレーヴにコピーする、条項６記載の方法。
〔条項８〕
前記複数の安全エンクレーヴが仮想安全エンクレーヴである、条項１ないし７のうちいずれか一項記載の方法。
〔条項９〕
差し向けられた割り込みが差し向けられた機械チェックを含む、条項１ないし８のうちいずれか一項記載の方法。
〔条項１０〕
前記計算プラットフォームが、それぞれ複数の知的財産ブロック（IP）を有する一つまたは複数のプロセッサと、前記一つまたは複数のプロセッサと通信するよう結合されている一つまたは複数の管理容易性コンポーネントとを含み、前記異常ハードウェアがプロセッサ上の異常IPに対応し、当該方法がさらに：
前記計算プラットフォーム上の複数の知的財産ブロック（IP）のそれぞれに属する安全エンクレーヴを同定するマッピング・データを記憶し；
管理容易性コンポーネントによって検出されるエラーをプロセッサ・ピンまたは割り込みを介してアサートし；
前記管理容易性コンポーネントを用いて前記マッピング・データにアクセスして、どの安全エンクレーヴが前記異常IPによって影響されるかを判別することを含む、
条項１ないし９のうちいずれか一項記載の方法。
〔条項１１〕
前記管理容易性コンポーネントが、管理容易性エンジン、革新エンジンおよびベースボード管理コントローラのうちの一つを含む、条項１０記載の方法。
〔条項１２〕
前記管理容易性コンポーネントから前記異常IPを含むプロセッサに、前記異常IPによって影響される一つまたは複数の安全エンクレーヴを同定する情報を送り；
前記プロセッサにおいて前記情報を受信することに応答して、前記異常IPによって影響される前記一つまたは複数の安全エンクレーヴのそれぞれに割り込みを差し向けることをさらに含む、
条項１０記載の方法。
〔条項１３〕
複数の相互接続を介して相互接続されている複数の知的財産ブロック（IP）であって、前記複数のIPは複数のコア、複数のキャッシュ、複数のエージェント、それぞれ一つまたは複数のメモリ・チャネルをもつ一つまたは複数のメモリ・コントローラおよび一つまたは複数の入出力（I/O）コンポーネントを含む、複数のIPを有するプロセッサであって、
当該プロセッサはさらに、当該プロセッサが計算プラットフォームにおいて設置され、動作しているときに複数の安全エンクレーヴを実装するために使われる複数の命令のためのマイクロコードを含み、前記計算プラットフォームは、前記一つまたは複数のメモリ・チャネルを介して前記一つまたは複数のメモリ・コントローラに動作上結合された一つまたは複数のメモリ・デバイスを含み、各安全エンクレーヴは、前記一つまたは複数のメモリ・デバイスにおけるメモリの保護された部分において動作し、それに属する前記複数のIPの部分をもち、当該プロセッサは、前記計算プラットフォームにおいて設置され、動作しているときにエラー復元動作を実行するよう構成された埋め込み論理を含み、前記エラー復元動作は：
異常IPを検出し；
前記複数の安全エンクレーヴのうちの前記異常IPが属する一つまたは複数に対して割り込みを差し向けることを含む、
プロセッサ。
〔条項１４〕
当該プロセッサがさらにレジスタを有し、さらに、当該プロセッサが：
IPと該IPが属する安全エンクレーヴとの間のマッピングを含むデータを前記レジスタに記憶し；
異常であると検出されたIPの素性〔どれであるか〕に基づいて、前記複数の安全エンクレーヴのうちのどれに対して、差し向けられた割り込みを送るかを決定することができるようにするための埋め込み論理を含む、
条項１３記載のプロセッサ。
〔条項１５〕
当該プロセッサが、プロセッサ全体をリセットすることなく、個々のIPまたは関係したIPの選択された集合をリセットすることができるようにするマイクロコード命令を当該プロセッサが含む、条項１３または１４記載のプロセッサ。
〔条項１６〕
前記埋め込み論理がさらに、前記計算プラットフォームにおける管理容易性コンポーネントから、前記複数の安全エンクレーヴのうちの前記異常IPが属する前記一つまたは複数の識別情報を受信するようさらに構成されている、条項１３ないし１５のうちいずれか一項記載のプロセッサ。
〔条項１７〕
前記複数の安全エンクレーヴが仮想安全エンクレーヴである、条項１３ないし１６のうちいずれか一項記載のプロセッサ。
〔条項１８〕
前記計算プラットフォームが、当該プロセッサが前記計算プラットフォームにおいて設置されたときに少なくとも一つの通信インターフェースを介して通信上結合される管理容易性コンポーネントを含み、異常IPを検出することに応答して、当該プロセッサが：
エラー信号をピン上にアサートするまたは通信インターフェースを介して割り込みをアサートして前記管理容易性コンポーネントにエラーを通知し；
通信インターフェースを介して前記管理容易性コンポーネントによって返される、割り込みを差し向けるべき一つまたは複数の安全エンクレーヴを同定する情報を受信するよう構成されている、
条項１３ないし１７のうちいずれか一項記載のプロセッサ。
〔条項１９〕
複数の相互接続を介して相互接続されている複数の知的財産ブロック（IP）であって、前記複数のIPは複数のコア、複数のキャッシュ、複数のエージェント、それぞれ一つまたは複数のメモリ・チャネルをもつ一つまたは複数のメモリ・コントローラおよび一つまたは複数の入出力（I/O）コンポーネントを含む、複数のIPを含む第一のプロセッサと；
前記一つまたは複数のメモリ・チャネルを介して前記第一のプロセッサの前記一つまたは複数のメモリ・コントローラに動作上結合された一つまたは複数の第一のメモリ・デバイスとを有する計算プラットフォームであって、
前記第一のプロセッサはさらに、当該計算プラットフォームが動作しているときに複数の安全エンクレーヴを実装するために使われる複数の命令のためのマイクロコードを含み、各安全エンクレーヴは、前記一つまたは複数のメモリ・デバイスにおけるメモリの保護された部分において動作し、それに属する前記複数のIPの部分をもち、前記第一のプロセッサは、エラー復元動作を実行するよう構成された埋め込み論理を含み、前記エラー復元動作は：
異常IPを検出し；
前記複数の安全エンクレーヴのうちの前記異常IPが属する一つまたは複数に対して割り込みを差し向けることを含む、
計算プラットフォーム。
〔条項２０〕
レジスタと；
前記第一のプロセッサに動作上結合された管理容易性コンポーネントとをさらに有しており、
当該計算プラットフォームの動作の間に、各安全エンクレーヴをその安全エンクレーヴに属するIPにマッピングする情報が前記レジスタに記憶され、異常IPの検出に応答して、
前記第一のプロセッサが、前記管理容易性コンポーネントに向けて、プロセッサ・ピンまたは割り込みを介してエラーをアサートするよう構成されており、アサートされるエラーは前記異常IPを同定し、
前記管理容易性コンポーネントは、そのIPがどの安全エンクレーヴに属するかを同定するデータを前記レジスタから取り出すよう構成されている、
条項１９記載の計算プラットフォーム。
〔条項２１〕
前記第一のプロセッサがさらに：
前記複数の安全エンクレーヴのうち前記異常IPが属する前記一つまたは複数の安全エンクレーヴの識別情報を、当該計算プラットフォームにおける前記管理容易性コンポーネントから受信し；
同定されている安全エンクレーヴのそれぞれに対して割り込みを差し向けるよう構成されている、
条項２０記載の計算プラットフォーム。
〔条項２２〕
前記第一のプロセッサが、該プロセッサがプロセッサ全体をリセットすることなく個々のIPまたは関係したIPの選択された集合をリセットできるようにするマイクロコード命令を含む、条項１９ないし２１のうちいずれか一項記載の計算プラットフォーム。
〔条項２３〕
差し向けられた割り込みを受信することに応答して、安全エンクレーヴが、前記第一のプロセッサをリセットすることなく前記異常IPをリセットさせる割り込みハンドラーを実行する、条項２２記載の計算プラットフォーム。
〔条項２４〕
複数の相互接続を介して相互接続されている複数の知的財産ブロック（IP）であって、前記複数のIPは複数のコア、複数のキャッシュ、複数のエージェント、それぞれ一つまたは複数のメモリ・チャネルをもつ一つまたは複数のメモリ・コントローラおよび一つまたは複数の入出力（I/O）コンポーネントを含む、複数のIPを含む第二のプロセッサと；
前記一つまたは複数のメモリ・チャネルを介して前記第二のプロセッサの前記一つまたは複数のメモリ・コントローラに動作上結合された一つまたは複数の第二のメモリ・デバイスと；
前記第一のプロセッサおよび第二のプロセッサを通信するよう結合するプロセッサ間相互接続とをさらに有しており、
前記第二のプロセッサはさらに、当該計算プラットフォームが動作しているときに複数の安全エンクレーヴを実装するために使われる複数の命令のためのマイクロコードを含み、各安全エンクレーヴは、前記一つまたは複数のメモリ・デバイスにおけるメモリの保護された部分において動作し、それに属する前記複数のIPの部分をもち、
当該計算プラットフォームはさらに、
プラットフォーム・エラー源をエンクレーヴ固有または全システム規模として分類するデータを記憶し；
全システム規模のプラットフォーム・エラーを検出し；
各安全エンクレーヴに割り込みを差し向けて、各エンクレーヴに割り込みハンドラーを実行させ；
各安全エンクレーヴがその割り込みハンドラーの実行を完了したのち、当該計算プラットフォームをリセットするよう構成されている、
条項１９ないし２３のうちいずれか一項記載の計算プラットフォーム。
〔条項２５〕
前記複数の安全エンクレーヴが仮想安全エンクレーヴである、条項１９ないし２４のうちいずれか一項記載の計算プラットフォーム。
〔条項２６〕
計算プラットフォームにおけるプロセッサによって実行されるよう構成された命令が記憶されている有体の非一時的な機械可読媒体であって、前記プロセッサは、複数の相互接続を介して相互接続されている複数の知的財産ブロック（IP）であって、前記複数のIPは複数のコア、複数のキャッシュ、複数のエージェント、それぞれ一つまたは複数のメモリ・チャネルをもつ一つまたは複数のメモリ・コントローラおよび一つまたは複数の入出力（I/O）コンポーネントを含み、前記計算プラットフォームはさらに、前記一つまたは複数のメモリ・チャネルを介して前記一つまたは複数のメモリ・コントローラに動作上結合された一つまたは複数のメモリ・デバイスを含み、前記命令の実行は前記計算プラットフォームに：
複数の安全エンクレーヴを生成する段階であって、各安全エンクレーヴはメモリ・アドレス空間の保護された部分において展開され、その安全エンクレーヴ内にないユーザー・レベルのソフトウェアによるアクセスを防止するよう構成されている、段階と；
異常IPから帰結する差し向けられた割り込みに応答して割り込みサービス・ルーチン（ISR）を実施する段階であって、前記ISRは前記プロセッサをリセットすることなく前記異常IPを含む前記プロセッサの部分をリセットさせる、段階とを実行させる、
有体の非一時的な機械可読媒体。
〔条項２７〕
前記命令の実行は前記計算プラットフォームにさらに、前記異常IPの資源を使っている各安全エンクレーヴまたは一つもしくは複数の安全エンクレーヴに、差し向けられた割り込みを送らせる、条項２６記載の有体の非一時的な機械可読媒体。
〔条項２８〕
差し向けられた割り込みを受信するのに応答して、前記安全エンクレーヴは一つまたは複数のセキュリティ・クリーンアップ動作を実行する、条項２７記載の有体の非一時的な機械可読媒体。
〔条項２９〕
前記一つまたは複数のセキュリティ・クリーンアップ動作は、前記安全エンクレーヴに関連するメモリを安全に消去することを含む、条項２８記載の有体の非一時的な機械可読媒体。
〔条項３０〕
前記命令の実行は前記計算プラットフォームにさらに、
安全エンクレーヴを破棄する段階と；
前記異常IPがリセットされたのちに新たな安全エンクレーヴを生成する段階とを実行させる、
条項２６ないし２９のうちいずれか一項記載の有体の非一時的な機械可読媒体。
〔条項３１〕
前記命令の実行は前記計算プラットフォームにさらに、安全エンクレーヴを破棄するのに先立って該安全エンクレーヴに対してセキュリティ・クリーンアップ動作を実行させる、条項３０記載の有体の非一時的な機械可読媒体。
〔条項３２〕
前記命令が、差し向けられた割り込みを受信するのに応答して第一の安全エンクレーヴにおいて実行中のソフトウェアによって実行される、第一の安全エンクレーヴにおけるデータの少なくとも一部を第二の安全エンクレーヴにコピーする割り込みサービス・ルーチンを含む、条項３０記載の有体の非一時的な機械可読媒体。
〔条項３３〕
前記命令の実行が前記計算プラットフォームにさらに、安全エンクレーヴのセットアップの間に、エンクレーヴ・プラットフォーム割り込みハンドラーを生成させ、前記エンクレーヴ・プラットフォーム割り込みハンドラーは、前記プラットフォーム・エラー・イベントに応答してその安全エンクレーヴに差し向けられた割り込みを処理するまたはその安全エンクレーヴに差し向けられた前記割り込みの処理を開始するの一方を行なうよう構成されている、条項２６ないし３２のうちいずれか一項記載の有体の非一時的な機械可読媒体。
〔条項３４〕
第一の安全エンクレーヴによる前記エンクレーヴ・プラットフォーム割り込みハンドラーの実行が、前記第一の安全エンクレーヴにおけるデータの少なくとも一部を第二の安全エンクレーヴにコピーする、条項３３記載の有体の非一時的な機械可読媒体。
〔条項３５〕
前記複数の安全エンクレーヴが仮想安全エンクレーヴである、条項２６ないし３２のうちいずれか一項記載の有体の非一時的な機械可読媒体。
【００６５】
個別的な実装を参照していくつかの実施形態が記述されているが、いくつかの実施形態によれば他の実装が可能である。さらに、図面に示されるおよび／または本稿に記載される要素または他の特徴の配置および／または順序は、図示および記載される特定の仕方で配置される必要はない。いくつかの実施形態によれば他の多くの配置が可能である。
【００６６】
図に示した各システムにおいて、いくつかの場合の要素は、表わされている要素が異なるおよび／または類似であることができることを示唆するために、それぞれ同じ参照符号または異なる参照符号をもつことがある。しかしながら、要素は、異なる実装をもち、本願で示されるまたは記載されるシステムの一部または全部と一緒に機能するのに十分柔軟でありうる。図面に示したさまざまな要素は同じまたは異なることがありうる。どれが第一の要素と称され、どれが第二の要素と呼ばれるかは任意である。
【００６７】
本稿および請求項において、「結合される」および「接続される」の用語ならびにその派生形が使用されることがある。これらの用語は互いに同義とは意図されていないことを理解しておくべきである。むしろ、個別的な実施形態において、「接続される」は二つ以上の要素が互いに直接的な物理的または電気的接触をしていることを示すために使われることがある。「結合される」は、二つ以上の要素が直接的な物理的または電気的接触をしていることを意味することがあるが、「結合される」は二つ以上の要素が互いに直接接触していないが、それでも互いに協働するまたは相互作用することをも意味しうる。
【００６８】
実施形態は、本発明の実装または例である。本明細書における「ある実施形態」、「一つの実施形態」、「いくつかの実施形態」または「他の実施形態」への言及は、その実施形態との関連で記述されている特定の特徴、構造または特性が少なくともいくつかの実施形態に含まれるが、必ずしも本発明のすべての実施形態には含まれないことを意味する。「ある実施形態」、「一つの実施形態」、「いくつかの実施形態」のさまざまな出現は、必ずしもみなが同じ実施形態を指すのではない。
【００６９】
本願で記述され、図示されるすべてのコンポーネント、特徴、構造、特性などが特定の実施形態（単数または複数）に含まれる必要はない。たとえば明細書があるコンポーネント、特徴、構造または特性が、含まれ「うる」、含まれ「てもよい」、含まれる「ことができる」または含まれる「ことがありうる」と述べる場合、その特定のコンポーネント、特徴、構造または特性が含まれることは必須ではない。明細書または請求項がある要素に言及する場合、それはその要素が一つだけあることを意味するのではない。明細書または請求項が「追加的な」要素に言及するとき、それは該追加的な要素が二つ以上あることを排除しない。
【００７０】
アルゴリズムは、本稿では、また一般に、所望の結果につながる工程または動作の自己無矛盾なシーケンスと考えられる。これらは物理量の物理的な操作を含む。必ずではないが通例、これらの量は、記憶、転送、組み合わせ、比較および他の操作をされることができる電気または磁気信号の形を取る。時に、主として慣用のため、これらの信号をビット、値、要素、シンボル、キャラクタ、項、数などと称することが便利であることが判明している。しかしながら、これらおよび同様の用語のすべては適切な物理量と関連付けられるものであり、これらの量に適用される単に便利なラベルであることを理解しておくべきである。
【００７１】
上記で論じたように、本願の実施形態のさまざまな側面は、組み込みプロセッサによって実行されるソフトウェアおよび／またはファームウェアなどのような、対応するソフトウェアおよび／またはファームウェア・コンポーネントおよびアプリケーションによって容易にされてもよい。よって、本発明の実施形態は、何らかの形のプロセッサ、処理コアまたは組み込み論理、プロセッサもしくはコア上で走る仮想マシンで実行される、あるいはさもなければコンピュータ可読もしくは機械可読の非一時的な記憶媒体上または該媒体内に実装もしくは実現される、ソフトウェア・プログラム、ソフトウェア・モジュール、ファームウェアおよび／または分散ソフトウェアとして使われてもよく、あるいはそれをサポートしてもよい。コンピュータ可読もしくは機械可読の非一時的な記憶媒体は、機械（たとえばコンピュータ）によって読み取り可能な形で情報を記憶または伝送するための任意の機構を含む。たとえば、コンピュータ可読もしくは機械可読の非一時的な記憶媒体は、コンピュータまたはコンピューティング機械（たとえばコンピューティング装置、電子システムなど）によってアクセス可能な形で情報を提供する（すなわち、記憶および／または伝送する）任意の機構を含む。たとえば、記録可能／記録不能型媒体（たとえば、読み出し専用メモリ（ROM）、ランダム・アクセス・メモリ（RAM）、磁気ディスク記憶媒体、光記憶媒体、フラッシュメモリ・デバイスなど）である。コンテンツは直接実行可能物（「オブジェクト」または「実行可能」形式）、ソース・コードまたは異なるコード（「デルタ」または「パッチ」コード）であってもよい。コンピュータ可読もしくは機械可読な非一時的な記憶媒体は、そこからコンテンツがダウンロードできる記憶またはデータベースをも含んでいてもよい。コンピュータ可読もしくは機械可読な非一時的な記憶媒体は、販売または送達の時点でそこにコンテンツが記憶されているデバイスまたはプロダクトをも含んでいてもよい。よって、記憶されたコンテンツをもつデバイスを送達することまたは通信媒体を通じたダウンロードのためにコンテンツをオファーすることは、本稿に記載されるそのようなコンテンツをもつコンピュータ可読もしくは機械可読な非一時的な記憶媒体を含む製造物を提供することと理解されうる。
【００７２】
本稿に記載されるプロセス、サーバーまたはツールとして上記で言及されるさまざまなコンポーネントは記載される機能を実行するための手段であってもよい。本稿に記載されるさまざまなコンポーネントによって実行される動作および機能は、処理要素上で走るソフトウェアによって組み込みのハードウェアなどを介して、あるいはハードウェアとソフトウェアの何らかの組み合わせによって実装されてもよい。そのようなコンポーネントは、ソフトウェア・モジュール、ハードウェア・モジュール、特殊目的ハードウェア（たとえば、特定用途向けハードウェア、ASIC、DSPなど）、組み込みコントローラ、固定構成回路、ハードウェア論理などとして実装されてもよい。ソフトウェア・コンテンツ（たとえば、データ、命令、構成設定情報など）は、実行されることのできる命令を表わすコンテンツを提供する、コンピュータ可読もしくは機械可読な非一時的な記憶媒体を含む製造物を介して提供されてもよい。該コンテンツは、コンピュータが本稿に記載されるさまざまな機能／動作を実行する結果を与えうる。
【００７３】
本稿での用法では、用語「少なくとも一つの」で結ばれる項目のリストは、リストされた項目の任意の組み合わせを意味しうる。たとえば、「A、BまたはCの少なくとも一つ」という句はA；B；C；AおよびB；AおよびC；BおよびC；またはA、BおよびCを意味することができる。
【００７４】
本発明の例解される実施形態の上記の記述は、要約書に記載されることも含めて、網羅的であることも、本発明を開示される厳密な形に限定することも意図されていない。本発明の特定的な実施形態や例が本稿において例解目的のために記述されているが、本発明の範囲内でさまざまな等価な修正が可能である。当業者はこのことを認識するであろう。
【００７５】
上記の詳細な説明に照らして本発明にこれらの修正をすることができる。付属の請求項において使われる用語は、本発明を明細書および図面において開示されている特定の実施形態に限定するものと解釈すべきではない。むしろ、本発明の範囲は、完全に請求項によって決定されるものであり、請求項は、クレーム解釈の確立されたドクトリンに従って解釈されるべきものである。
【符号の説明】
【００７６】
１００  仮想アドレス空間
１０４  エンクレーヴ
１０６  アプリ・スタック
１０８  アプリ・コード
１１０  保護された領域
１１２  物理メモリ
１１４  エントリー・テーブル
１１６  エンクレーヴ・ヒープ
１１８  エンクレーヴ・スタック
１２０  エンクレーヴ・コード
２００  プラットフォーム
２０２  エンクレーヴ・ページ・キャッシュ（EPC）
２０６  SGXモジュール
２０８  ページ・テーブル
２１０、２１２  SGCユーザー・ランタイム
２１４、２１６  エンクレーヴ
３０２  伝統的なページ・テーブル検査
３０４  エンクレーヴ・アクセス？
３０６  アドレスがEPC内？
３０８  アドレスをアボート・ページで置換
３１０  メモリ・アクセスを許容
３１２  アドレスがEPC内？
３１４  EPCMをチェック
３１６  チェック合格？
３２０  フォールトを発する
５０２  エンクレーヴがアプリを実行
５０４  シリコンがエラーを生成？
５０６  SEプラットフォーム・シリコン・ハンドラーを呼び出し
５０８  セキュリティ・クリーンアップを実行
５１０プラットフォームFW/OSがイベントを処理することを許容？
５１２  プラットフォーム・レベル割り込みをアサート
５１４  割り込み処理に関連する作業を実行
５１６  任意的に冗長性のためにSE間通信を許容
５１８  SE作業を停止し、アプリの破棄を許容
【図１】
0006363153.tif 000002
【図２】
0006363153.tif 000003
【図３】
0006363153.tif 000004
【図４ａ】
0006363153.tif 000005
【図４ｂ】
0006363153.tif 000006
【図５】
0006363153.tif 000007
【図６】
0006363153.tif 000008