(57)【特許請求の範囲】
【請求項１】
プロセッサであって、
第１のセキュア制御構造データを、親プロセスの対応する第１のセキュアエンクレーブに割り当てられる第１のセキュアストレージ領域に格納し、第２のセキュア制御構造データを、子プロセスの対応する第２のセキュアエンクレーブに割り当てられる第２のセキュアストレージ領域に格納するエンクレーブページキャッシュと、
前記プロセッサによる実行のために第１の命令をデコードするデコードステージであって、前記第１の命令は前記第２のセキュアストレージ領域をオペランドとして指定する、デコードステージと、
デコードされた前記第１の命令に応答して、
前記第１のセキュアストレージ領域の前記第１のセキュア制御構造データを前記第２のセキュアストレージ領域にコピーし、
前記子プロセスに関連付けられる一意のエンクレーブ識別子で前記第２のセキュア制御構造データを初期化し、
前記第１のセキュア制御構造データへの第２のセキュア制御構造リンクを前記第２のセキュア制御構造データに記録する、１つ又は複数の実行ユニットと
を備える
プロセッサ。
【請求項２】
前記親プロセスの前記対応する第１のセキュアエンクレーブに割り当てられる前記第１のセキュアストレージ領域は第１のキーに関連付けられ、前記子プロセスの前記対応する第２のセキュアエンクレーブに割り当てられる前記第２のセキュアストレージ領域も前記第１のキーに関連付けられる、
請求項１に記載のプロセッサ。
【請求項３】
前記子プロセスの前記対応する第２のセキュアエンクレーブに割り当てられる前記第２のセキュアストレージ領域内の前記第２のセキュア制御構造データは、前記第１のセキュア制御構造データへの前記第２のセキュア制御構造リンクが前記第２のセキュア制御構造データから除去されない限り、アプリケーションが用いることができない、
請求項１又は２に記載のプロセッサ。
【請求項４】
前記第２のセキュア制御構造データに記録された前記第２のセキュア制御構造リンクは、前記親プロセスに関連付けられる一意のエンクレーブ識別子を含む、
請求項１から３のいずれか一項に記載のプロセッサ。
【請求項５】
前記第２のセキュア制御構造データに記録された前記第２のセキュア制御構造リンクは、前記第１のセキュアストレージ領域内の前記第１のセキュア制御構造データの実効アドレスを含む、
請求項１から３のいずれか一項に記載のプロセッサ。
【請求項６】
前記１つ又は複数の実行ユニットはさらに、デコードされた前記第１の命令に応答して、前記第１のセキュアストレージ領域のアプリケーションデータ及びアプリケーションコードを前記第２のセキュアストレージ領域にコピーする、
請求項１から５のいずれか一項に記載のプロセッサ。
【請求項７】
前記１つ又は複数の実行ユニットはさらに、デコードされた前記第１の命令に応答して、前記第２のセキュアエンクレーブに対応する前記子プロセスを、前記第１のセキュアエンクレーブに対応する前記親プロセスの子として作成する、
請求項１から５のいずれか一項に記載のプロセッサ。
【請求項８】
前記第１の命令は、前記第２のセキュアストレージ領域の実効アドレスを、レジスタ内、つまりＲＣＸ内の間接デスティネーションオペランドとして指定する、
請求項１から７のいずれか一項に記載のプロセッサ。
【請求項９】
前記第１の命令は、前記第１のセキュアストレージ領域の実効アドレスを、レジスタ内、つまりＲＢＸ内の間接ソースオペランドとして指定する、
請求項１から７のいずれか一項に記載のプロセッサ。
【請求項１０】
プロセッサによる実行のために第１の命令をデコードする段階であって、前記第１の命令は、第１のセキュア制御構造を格納するために親プロセスの対応する第１のセキュアエンクレーブに割り当てられる、エンクレーブページキャッシュ内の第１のセキュアストレージ領域、及び、第２のセキュア制御構造を格納するために子プロセスの対応する第２のセキュアエンクレーブに割り当てられる、前記エンクレーブページキャッシュ内の第２のセキュアストレージ領域のうち少なくとも１つを、１つ又は複数のオペランドとして指定する、デコードする段階と、
前記第１のセキュアストレージ領域の前記第１のセキュア制御構造を前記第２のセキュアストレージ領域にコピーするために、前記エンクレーブページキャッシュにアクセスする段階と、
前記子プロセスに関連付けられる一意のエンクレーブ識別子で前記第２のセキュア制御構造を初期化する段階と、
前記第１のセキュア制御構造へのリンクを前記第２のセキュア制御構造に記録する段階と
を備える
方法。
【請求項１１】
前記第１の命令は、前記第２のセキュアストレージ領域の実効アドレスを、レジスタ内、つまりＲＣＸ内の間接オペランドとして指定する、
請求項１０に記載の方法。
【請求項１２】
前記第１の命令は、前記第１のセキュアストレージ領域の実効アドレスを、レジスタ内、つまりＲＢＸ内の間接オペランドとして指定する、
請求項１０に記載の方法。
【請求項１３】
前記親プロセスの前記対応する第１のセキュアエンクレーブに割り当てられる前記第１のセキュアストレージ領域は第１のキーに関連付けられ、前記子プロセスの前記対応する第２のセキュアエンクレーブに割り当てられる前記第２のセキュアストレージ領域も前記第１のキーに関連付けられる、
請求項１０から１２のいずれか一項に記載の方法。
【請求項１４】
前記子プロセスの前記対応する第２のセキュアエンクレーブに割り当てられる前記第２のセキュアストレージ領域内の前記第２のセキュア制御構造は、前記第１のセキュア制御構造への前記リンクが前記第２のセキュア制御構造から除去されない限り、アプリケーションが用いることができない、
請求項１０から１３のいずれか一項に記載の方法。
【請求項１５】
コピー終了フラグが設定されている場合、前記第１の命令が実行完了に成功すると、前記第１のセキュア制御構造への前記リンクを前記第２のセキュア制御構造から除去する段階をさらに備える、
請求項１０から１４のいずれか一項に記載の方法。
【請求項１６】
前記第１の命令は、コピー終了フラグをレジスタ内の、つまりＲＤＸ内のオペランドとして指定する、
請求項１０から１５のいずれか一項に記載の方法。
【請求項１７】
前記親プロセスの前記第１のセキュアエンクレーブ用のエンクレーブページキャッシュマップを、前記子プロセスの前記第２のセキュアエンクレーブ用の前記エンクレーブページキャッシュマップにコピーする段階をさらに備える、
請求項１０から１６のいずれか一項に記載の方法。
【請求項１８】
前記子プロセスに関連付けられる更新したエンクレーブ識別子を用いて、前記第２のセキュア制御構造を更新する段階をさらに備える、
請求項１０から１７のいずれか一項に記載の方法。
【請求項１９】
プロセッサに、
前記プロセッサによる実行のために第１の命令をデコードする手順であって、前記第１の命令は、ページアドレス用の第１のセキュア制御構造及びセキュアデータを格納するために親プロセスの対応する第１のセキュアエンクレーブに割り当てられるエンクレーブページキャッシュ内の第１のセキュアストレージ領域、及び、前記ページアドレス用の第２のセキュア制御構造及び前記セキュアデータのコピーを格納するために子プロセスの対応する第２のセキュアエンクレーブに割り当てられる前記エンクレーブページキャッシュ内の第２のセキュアストレージ領域のうち少なくとも１つを、１つ又は複数のオペランドとして指定する、手順と
前記第２のセキュア制御構造に格納された前記第１のセキュア制御構造へのリンクを識別するために、前記エンクレーブページキャッシュにアクセスする手順と、
前記エンクレーブページキャッシュ内の前記第１のセキュアストレージ領域の前記セキュアデータを、前記エンクレーブページキャッシュ内の前記第２のセキュアストレージ領域にコピーする手順と
を実行させる、
プログラム。
【請求項２０】
前記第１の命令は、前記第２のセキュアストレージ領域の実効アドレスを、レジスタ内、つまりＲＣＸ内の間接オペランドとして指定する、
請求項１９に記載のプログラム。
【請求項２１】
前記第１の命令は、前記第１のセキュアストレージ領域の実効アドレスを、レジスタ内、つまりＲＢＸ内の間接オペランドとして指定する、
請求項１９又は２０に記載のプログラム。
【請求項２２】
前記親プロセスの前記対応する第１のセキュアエンクレーブに割り当てられる前記第１のセキュアストレージ領域は第１のキーに関連付けられ、前記子プロセスの前記対応する第２のセキュアエンクレーブに割り当てられる前記第２のセキュアストレージ領域も前記第１のキーに関連付けられる、
請求項１９から２１のいずれか一項に記載のプログラム。
【請求項２３】
前記子プロセスの前記対応する第２のセキュアエンクレーブに割り当てられる前記第２のセキュアストレージ領域内の前記第２のセキュア制御構造は、前記第１のセキュア制御構造への前記リンクが前記第２のセキュア制御構造から除去されない限り、アプリケーションが用いることができない、
請求項１９から２２のいずれか一項に記載のプログラム。
【請求項２４】
コピー終了フラグが設定されている場合、前記第１の命令が実行完了に成功すると、前記プロセッサにさらに、前記第１のセキュア制御構造への前記リンクを前記第２のセキュア制御構造から除去させる、
請求項１９から２３のいずれか一項に記載のプログラム。
【請求項２５】
前記プロセッサにさらに、前記親プロセスの前記第１のセキュアエンクレーブのエンクレーブページキャッシュマップを、前記子プロセスの前記第２のセキュアエンクレーブの前記エンクレーブページキャッシュマップにコピーさせる、
請求項１９から２４のいずれか一項に記載のプログラム。
【請求項２６】
請求項１９から２５のいずれか一項に記載のプログラムを格納する、
コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、処理ロジック、マイクロプロセッサ、及び関連命令セットアーキテクチャの分野に関するものであり、関連命令セットアーキテクチャは、プロセッサ又は他の処理ロジックにより実行されると、ロード演算、ストア演算、論理演算、数学的演算、又は他の関数演算を行う。具体的には、本開示は、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令及びロジックに関する。
【背景技術】
【０００２】
音声データ、映像データ、トランザクションデータ、プライベートデータなどの新たな使用モデル及びサービスをサポートするアプリケーション及び高性能ネットワークは、セキュリティの領域に新たな課題を提示する。ストレージ内のデータ又は送信中のデータを機密性及び完全性のために保護する責任は重要であるが、保護されたコード及び／又はデータへのセキュアなアクセスを維持するのに必要な高速暗号演算及びストレージをサポートすることで、複雑さが増し、最終的に費用が増えることになる。
【０００３】
セキュアで保護された又は分離されたパーティションあるいは環境を作り出し維持するための１つの技術は、エンクレーブの確立として知られている。エンクレーブとは、グループとして保護される情報及び処理機能のセットである。情報及び処理機能には、ネットワーク、ホスト、又はアプリケーションが含まれてよい。エンクレーブ用のデータ及び／又は命令が外部メモリからロードされると、それらは解読されて認証され、その後、保護されたメモリに格納又はキャッシュされる。同様に、エンクレーブ用のデータ及び／又は命令が保護されたメモリから追い出されると、それらは外部メモリに格納し直す前に暗号化される。セキュアエンクレーブデータは特定のプロセスに割り当てられ、そのプロセス用の一意のエンクレーブ識別子に関連付けられ、その結果、セキュアエンクレーブデータへのアクセスは許可されたプロセスに制限される。オペレーティングシステムでさえ、異なるプロセスのエンクレーブ識別子に関連付けられ解読済みエンクレーブデータへのアクセスを許可されない。
【０００４】
したがって、セキュアエンクレーブを割り当てられたプロセスが、子プロセスとして自らの複製を作成するために、オペレーティングシステムコール、ｆｏｒｋ（）を利用しようとしても、オペレーティングシステムは、親プロセスに関連付けられた解読済みのエンクレーブデータにアクセスすることができない。したがって、オペレーティングシステムは、子プロセス用に親プロセスの状態を複製することができず、親プロセスに割り当てられたセキュアエンクレーブはまだアクティブである。さらに、オペレーティングシステムが、セキュアエンクレーブに対するメモリページのページイン（すなわち、読み込み）及び／又はページアウト（すなわち、追い出しと書き戻し）を行っている場合、暗号演算が、通常４ＫＢのサイズになる得るページ全体に行われなければならない。結果として、セキュアエンクレーブに対するページコピー操作は、数万もの処理サイクルを要することもある。ページングプロセスが割り込まれた場合、ページングプロセスは再実行される必要があり得るが、セキュアエンクレーブに対するページング操作が完了するまで、割り込みサービスが許可されないならば、割り込みサービスの遅延により、音声、映像、リアルタイムのトランザクションなどのいくつかのサービスに容認できないトラブルが生じることもある。
【０００５】
したがって、子プロセスを分岐するために、親プロセスのセキュアエンクレーブのデータ及び状態に関するページを複製することは、一意のセキュリティ、ユーザ体験、及び性能という一連の課題を提示している。今日まで、これらの課題に取り組む解決手法、潜在的に性能を制限する問題、及びリアルタイムの複雑さは、十分に調査されていなかった。
【図面の簡単な説明】
【０００６】
本発明は、添付図面の図に、限定としてではなく例として示されている。
【０００７】
【図１Ａ】プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令を実行するシステムの１つの実施形態に関するブロック図である。
【０００８】
【図１Ｂ】プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令を実行するシステムの別の実施形態に関するブロック図である。
【０００９】
【図１Ｃ】プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令を実行するシステムの別の実施形態に関するブロック図である。
【００１０】
【図２】プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令を実行するプロセッサの１つの実施形態に関するブロック図である。
【００１１】
【図３Ａ】１つの実施形態によるパックドデータタイプを示す。
【００１２】
【図３Ｂ】１つの実施形態によるパックドデータタイプを示す。
【００１３】
【図３Ｃ】１つの実施形態によるパックドデータタイプを示す。
【００１４】
【図３Ｄ】１つの実施形態に従ってプロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令エンコーディングを示す。
【００１５】
【図３Ｅ】別の実施形態に従ってプロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令エンコーディングを示す。
【００１６】
【図３Ｆ】別の実施形態に従ってプロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令エンコーディングを示す。
【００１７】
【図３Ｇ】別の実施形態に従ってプロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令エンコーディングを示す。
【００１８】
【図３Ｈ】命令をエンコードするのに２つのフィールドを用いる実施形態を示す。
【００１９】
【図３Ｊ】別の実施形態に従ってプロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令エンコーディングを示す。
【００２０】
【図４Ａ】プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令を実行するプロセッサのマイクロアーキテクチャに関する１つの実施形態の要素を示す。
【００２１】
【図４Ｂ】プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令を実行するプロセッサのマイクロアーキテクチャに関する別の実施形態の要素を示す。
【００２２】
【図５】プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令を実行するプロセッサの１つの実施形態に関するブロック図である。
【００２３】
【図６】プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令を実行するコンピュータシステムの１つの実施形態に関するブロック図である。
【００２４】
【図７】プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令を実行するコンピュータシステムの別の実施形態に関するブロック図である。
【００２５】
【図８】プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令を実行するコンピュータシステムの別の実施形態に関するブロック図である。
【００２６】
【図９】プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令を実行するシステムオンチップの１つの実施形態に関するブロック図である。
【００２７】
【図１０】プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令を実行するプロセッサの実施形態に関するブロック図である。
【００２８】
【図１１】プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立するＩＰコア開発システムの１つの実施形態に関するブロック図である。
【００２９】
【図１２】プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立するアーキテクチャエミュレーションシステムの１つの実施形態を示す。
【００３０】
【図１３】プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令を変換するシステムの１つの実施形態を示す。
【００３１】
【図１４Ａ】プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する子エンクレーブ作成命令を用いる処理システムの実施形態を示す。
【００３２】
【図１４Ｂ】プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する子エンクレーブコピー命令を用いる処理システムの別の実施形態を示す。
【００３３】
【図１５】プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令を用いるプロセッサ内装置の実施形態を示す。
【００３４】
【図１６】コンピューティングプロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立するプロセスの１つの実施形態に関するフロー図を示す。
【００３５】
【図１７Ａ】プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する子エンクレーブ作成命令を用いるプロセスの１つの実施形態に関するフロー図を示す。
【００３６】
【図１７Ｂ】プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する子エンクレーブコピー命令を用いるプロセスの１つの実施形態に関するフロー図を示す。
【００３７】
【図１８Ａ】プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する子エンクレーブ作成命令を用いる割り込み可能なプロセスの１つの実施形態に関するフロー図を示す。
【００３８】
【図１８Ｂ】プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する子エンクレーブコピー命令を用いる割り込み可能なプロセスの１つの実施形態に関するフロー図を示す。
【発明を実施するための形態】
【００３９】
以下の説明は、プロセスを分岐して、プロセッサ、コンピュータシステム、又は他の処理装置の中の、又はそれに関連したセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令及び処理ロジックを開示する。
【００４０】
例えば、エンクレーブに関連付けられるデータなど、プライベートデータ又は保護されたデータのみを保持する特殊なキャッシュ又はキャッシュの一部において、そのプライベートデータ又は保護されたデータが暗号化されていない場合、そのデータへのアクセスは許可されたプロセッサコア、ハードウェアスレッド、又は論理プロセッサのみに制限され得る。そのようなエンクレーブプライベートメモリは、エンクレーブページキャッシュ（ＥＰＣ）メモリと呼ばれることもある。他の物理メモリと同様に、ＥＰＣは必要に応じてデータ及び／又はコードをページイン及びページアウトすることによって、より大きなプライベートアドレス空間又は保護されたアドレス空間をサポートするよう構成され得る。命令は、セキュアエンクレーブ制御構造データ、アプリケーションデータ、アプリケーションコードなどを格納するために、ＥＰＣにおいて親プロセス及び子プロセスのエンクレーブに割り当てられるセキュアストレージのアドレスを指定する。いくつかの実施形態では、親プロセスが実行されてよく、又はシステムソフトウェアガードエクステンション（ＳＧＸ）ライブラリが、親セキュアエンクレーブ制御構造（ＳＥＣＳ）を子プロセスのセキュアストレージ領域にコピーし、一意の子エンクレーブＩＤ、及び親のＳＥＣＳ／エンクレーブＩＤへのリンクを初期化する命令を実行してよい。いくつかの実施形態では、子プロセスが実行されてよく、又はシステムＳＧＸライブラリが、親エンクレーブのページを子のエンクレーブにコピーし（両方のエンクレーブは同じキーを有する）、次にまた、割り込まれた場合には、ＥＰＣマッピングのエントリを部分的完了に設定し、子エンクレーブのページ状態を記録する命令を実行してよい。こうして、親エンクレーブのページをコピーする命令を再開することができる。
【００４１】
いくつかの実施形態では、本明細書に開示される命令及びロジックは、プロセスを分岐するＳＥＣＳコピー及びセキュアエンクレーブ内のページコピー操作において、割り込まれ再開されることが可能である。いくつかの実施形態では、そのような命令は、（例えば、既にセキュアＥＰＣにある）セキュアエンクレーブに割り当てられるページアドレスを指定する。プロセスを分岐してセキュアＥＰＣに子エンクレーブを確立する、そのようなエンクレーブ命令を用いることで、親プロセスが子プロセスを作成（すなわち、分岐）してセキュアＥＰＣに子プロセスエンクレーブのコピーを確立できることが理解されよう。そのような命令に対するプロセッサのサポートを受けずに、同じ（又は類似した）技術的効果を実現する任意のソフトウェアシステムのセキュリティ機能は（仮にも実現可能であれば）、非常に高価になる可能性があり、及び／又は何らかのより弱いセキュリティ対策を不都合にも受け入れることがあるという程度まで限定した性能になり得ることも理解されよう。
【００４２】
以下の説明では、処理ロジック、プロセッサタイプ、マイクロアーキテクチャ条件、イベント、実行可能メカニズムなどの多くの具体的な詳細が、本発明の実施形態のより完全な理解を提供するために明記されている。しかし、そのような具体的な詳細がなくても、本発明は実施できることが、当業者には理解されよう。さらに、本発明の実施形態を不必要にあいまいにしないように、いくつかのよく知られた構造、回路などは詳細に示されていない。
【００４３】
以下の実施形態はプロセッサに関して説明されているが、他のタイプの集積回路及びロジックデバイスには他の実施形態が適用可能である。本発明の実施形態に関する類似の技術及び教示は、他のタイプの回路又は半導体デバイスに適用することができ、当該回路又は半導体デバイスは、より高いパイプラインスループット及び性能の向上によって恩恵を受けることができる。本発明の実施形態の教示は、データ操作を行うあらゆるプロセッサ又は機械に適用可能である。しかし、本発明は５１２ビット、２５６ビット、１２８ビット、６４ビット、３２ビット、又は１６ビットのデータ操作を行うプロセッサ又は機械に限定されず、本発明は、データの操作又は管理が行われるあらゆるプロセッサ及び機械に適用することができる。さらに、以下の説明は複数の例を提供しており、添付図面は例示を目的として様々な例を示している。しかし、これらの例は、本発明の実施形態に関する全ての可能性のある実装を網羅的に列挙して提供するのではなく、単に本発明の実施形態の例を提供することを意図しているので、限定的な意味において解釈されるべきではない。
【００４４】
以下の例は、実行ユニット及びロジック回路との関連で命令の処理及び分配を説明するが、本発明の他の実施形態は、機械により行われると、本発明の少なくとも１つの実施形態と一致する機能を機械に行わせる機械可読で有形の媒体に格納されたデータ及び／又は命令によって実現され得る。１つの実施形態では、本発明の実施形態に関連付けられる機能は、機械実行可能命令で具現化される。命令は、命令でプログラムされる汎用プロセッサ又は専用プロセッサに、本発明の段階を行わせるのに用いることができる。本発明の実施形態は、本発明の実施形態による１つ又は複数のオペレーションを行うために、コンピュータ（又は他の電子デバイス）をプログラムするのに用いることができる命令を格納した機械可読媒体又はコンピュータ可読媒体を含み得るコンピュータプログラム製品又はソフトウェアとして提供されてよい。あるいは、本発明の実施形態の複数の段階は、当該段階を行うための固定機能ロジックを含む特定のハードウェアコンポーネントによって、又はプログラムされたコンピュータコンポーネント及び固定機能ハードウェアコンポーネントの任意の組み合わせによって、行われることもある。
【００４５】
本発明の実施形態を行うロジックをプログラムするのに用いられる命令は、ＤＲＡＭ、キャッシュ、フラッシュメモリ、又は他のストレージなど、システム内のメモリの中に格納することができる。さらに、命令は、ネットワークを介して、又は他のコンピュータ可読媒体によって配信することができる。したがって、機械可読媒体は、機械（例えば、コンピュータ）が可読な形態で、情報を格納又は送信するためのあらゆるメカニズムを含むことができ、当該メカニズムには、限定されないが、フロッピー（登録商標）ディスケット、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ−ＲＯＭ）、及び光磁気ディスク、並びに、リードオンリメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、磁気カード又は光カード、フラッシュメモリ、あるいは、電気、光、音波、又は他の形態の伝搬信号（例えば、搬送波、赤外線信号、デジタル信号など）を介してインターネット上で情報の送信に用いられる有形の機械可読ストレージが含まれる。したがって、コンピュータ可読媒体には、機械（例えば、コンピュータ）が可読な形態で電子命令又は電子情報を格納又は送信するのに適した、あらゆるタイプの有形の機械可読媒体が含まれる。
【００４６】
設計は、作成からシミュレーション、製造まで様々なステージを経ることもある。設計を表すデータは、複数の形式で設計を表すことができる。まず、シミュレーションで役立つように、ハードウェア記述言語又は別の機能記述言語を用いて、ハードウェアを表すことができる。さらに、ロジック及び／又はトランジスタゲートを用いた回路レベルのモデルを、設計プロセスのいくつかのステージで作り出すことができる。さらに、大部分の設計が、どこかのステージにおいて、ハードウェアモデルで様々なデバイスの物理配置を表すデータレベルに到達する。従来の半導体製造技術が用いられる場合には、ハードウェアモデルを表すデータは、集積回路を製造するのに用いられるマスクの異なるマスクレイヤ上に様々な特徴が存在する又は存在しないことを指定するデータであってよい。設計のあらゆる表現において、データは、あらゆる形態の機械可読媒体に格納されてよい。メモリ、あるいはディスクなどの磁気ストレージ又は光ストレージは、光波又は電波を介して送信された情報を格納する機械可読媒体であってよく、光波又は電波は、そのような情報を送信するよう変調される、又は別の方法で生成される。コード又は設計を示す、あるいはそれを搬送する電気搬送波が、電気信号のコピー、バッファリング、再送信が行われるという程度まで送信されると、新たなコピーが作られる。したがって、通信事業者又はネットワーク事業者は、搬送波にエンコードされた情報などの物品を、有形の機械可読媒体に少なくとも一時的に格納して、本発明の実施形態の技術を具現化することができる。
【００４７】
現代のプロセッサでは、複数の異なる実行ユニットが、様々なコード及び命令を処理して実行するのに用いられる。命令によっては、より高速で完了するものもあれば、完了に多くのクロックサイクルを必要とし得るものもあるなど、全ての命令が等しく作成されているわけではない。命令のスループットが高速になればなるほど、プロセッサの全体的な性能もそれだけ良くなる。したがって、多くの命令を可能な限り高速で実行させることが有利であろう。しかし、複雑さがより増して、実行時間及びプロセッサリソースに関してより多くを必要とする特定の命令が存在する。例えば、浮動小数点命令、ロード／ストア演算、データ移動などがある。
【００４８】
より多くのコンピュータシステムがインターネット、テキスト、及びマルチメディアアプリケーションで用いられるにつれ、追加のプロセッササポートが徐々に導入されている。１つの実施形態では、データタイプ、命令、レジスタアーキテクチャ、アドレス指定モード、メモリアーキテクチャ、割り込み処理及び例外処理、並びに外部入力及び出力（Ｉ／Ｏ）を含む１つ又は複数のコンピュータアーキテクチャに、命令セットが関連付けられてよい。
【００４９】
１つの実施形態では、命令セットアーキテクチャ（ＩＳＡ）は１つ又は複数のマイクロアーキテクチャで実装されてよく、マイクロアーキテクチャには１つ又は複数の命令セットを実装するのに用いられるプロセッサロジック及び回路が含まれる。代替の実施形態は、マイクロコード、拡張マイクロコード又はマイクロコードアシスト、ハイパーバイザ、バイナリ変換、ハードウェア、再コンパイルなどによって、ＩＳＡを実装することができる。したがって、異なるマイクロアーキテクチャを有するプロセッサが、共通の命令セットの少なくとも一部を共有することができる。例えば、Ｉｎｔｅｌ（登録商標）のＰｅｎｔｉｕｍ（登録商標）４プロセッサ、Ｉｎｔｅｌ（登録商標）のＣｏｒｅ（商標）プロセッサ、及びＡｄｖａｎｃｅｄ  Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓ，Ｉｎｃ．（カリフォルニア州、サニーベール）のプロセッサは、ほぼ同一バージョンのｘ８６命令セット（より新しいバージョンに追加された、いくつかの拡張を有する）を実装するが、異なる内部設計を有する。同様に、ＡＲＭ  Ｈｏｌｄｉｎｇｓ，Ｌｔｄ．、ＭＩＰＳなどの他のプロセッサ開発会社、あるいはこれらのライセンス先又は採用者が設計したプロセッサは、共通の命令セットの少なくとも一部を共有することができるが、異なるプロセッサ設計を含むこともできる。例えば、ＩＳＡの同じレジスタアーキテクチャは、異なる方法で、異なるマイクロアーキテクチャに、新たな技術又はよく知られた技術を用いて実装することができ、専用物理レジスタ、レジスタリネーミングメカニズムを用いる（例えば、レジスタエイリアステーブル（ＲＡＴ）、リオーダバッファ（ＲＯＢ）及びリタイアメントレジスタファイルを用いる）１つ又は複数の動的に割り当てられる物理レジスタを含む。１つの実施形態では、レジスタは１つ又は複数のレジスタ、レジスタアーキテクチャ、レジスタファイル、又は他のレジスタセットを含んでよく、それらは、ソフトウェアプログラマがアドレス指定可能であってもなくてもよい。
【００５０】
１つの実施形態では、命令は１つ又は複数の命令フォーマットを含むことができる。１つの実施形態では、命令フォーマットは、とりわけ、行われるべき演算、及びその演算が行われるオペランドを指定する様々なフィールド（ビットの数、ビットの位置など）を示すことができる。いくつかの命令フォーマットは、命令テンプレート（又はサブフォーマット）によって、さらに分割され定義されることもある。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するよう定義されてよく、及び／又は異なるように解釈された所与のフィールドを有するよう定義されてもよい。１つの実施形態では、命令は命令フォーマットを用いて（及び、定義されている場合は、命令フォーマットの命令テンプレートのうち所与の１つで）表され、演算及びその演算が処理するオペランドを指定又は示す。
【００５１】
科学アプリケーション、財務アプリケーション、自動ベクトル化された汎用アプリケーション、ＲＭＳ（認識、マイニング、及び合成）アプリケーション、並びに視覚アプリケーション及びマルチメディアアプリケーション（例えば、２Ｄ／３Ｄグラフィックス、画像処理、映像圧縮／解凍、音声認識アルゴリズム、オーディオ操作）は、同じ演算が多数のデータ項目に対して行われることを必要とし得る。１つの実施形態では、単一命令複数データ（ＳＩＭＤ）は、複数のデータ要素に対して１つの演算をプロセッサに行わせる命令のタイプを指す。ＳＩＭＤ技術は、レジスタ内のビットを複数の固定サイズ又は可変サイズのデータ要素に論理的に分割できるプロセッサに用いることができ、各データ要素は別個の値を表す。例えば、１つの実施形態では、６４ビットレジスタ内のビットは、４つの別個の１６ビットデータ要素を含むソースオペランドとして編成することができ、各データ要素は別個の１６ビット値を表す。このタイプのデータは、「パックド」データタイプ、又は「ベクトル」データタイプと呼ばれることもあり、このデータタイプのオペランドは、パックドデータオペランド又はベクトルオペランドと呼ばれる。１つの実施形態では、パックドデータ項目又はベクトルは、単一のレジスタ内に格納された一連のパックドデータ要素であってよく、パックドデータオペランド又はベクトルオペランドは、ＳＩＭＤ命令（あるいは、「パックドデータ命令」又は「ベクトル命令」）のソースオペランド又はデスティネーションオペランドであってよい。１つの実施形態では、ＳＩＭＤ命令は、２つのソースベクトルオペランドに対して行われる単一のベクトル演算を指定し、同じ又は異なるサイズのデスティネーションベクトルオペランド（結果ベクトルオペランドとも呼ばれる）を、同じ又は異なる数のデータ要素を用いて、同じ又は異なるデータ要素の順序で生成する。
【００５２】
ｘ８６命令、ＭＭＸ（商標）命令、ストリーミングＳＩＭＤ拡張（ＳＳＥ）命令、ＳＳＥ２命令、ＳＳＥ３命令、ＳＳＥ４．１命令、及びＳＳＥ４．２命令を含む命令セットを有するＩｎｔｅｌ（登録商標）のＣｏｒｅ（商標）プロセッサ、ベクトル浮動小数点（ＶＦＰ）命令及び／又はＮＥＯＮ命令を含む命令セットを有するＡＲＭのＣｏｒｔｅｘ（登録商標）ファミリのプロセッサなどのＡＲＭプロセッサ、並びに中国科学院の計算技術研究所（ＩＣＴ）が開発した龍芯（Ｌｏｏｎｇｓｏｎ）ファミリのプロセッサなどＭＩＰＳプロセッサにより採用された技術などのＳＩＭＤ技術は、アプリケーション性能において著しい向上を可能にした（Ｃｏｒｅ（商標）及びＭＭＸ（商標）は、Ｉｎｔｅｌ（登録商標）Ｃｏｒｐｏｒａｔｉｏｎ（カリフォルニア州、サンタクララ）の登録商標又は商標である）。
【００５３】
１つの実施形態では、デスティネーション及びソースレジスタ／データは、対応するデータ又は演算のソース及びデスティネーションを表す一般名称である。いくつかの実施形態では、これらは、レジスタ、メモリ、又は示されたもの以外の他の名称又は機能を有する他のストレージ領域により実装されてもよい。例えば、１つの実施形態では、「ＤＥＳＴ１」が一時的なストレージレジスタ又は他のストレージ領域であってよく、「ＳＲＣ１」及び「ＳＲＣ２」が、第１及び第２のソースストレージレジスタ又は他のストレージ領域であってよい、などである。他の実施形態では、ＳＲＣストレージ領域及びＤＥＳＴストレージ領域のうち２つ又はそれより多くが、同じストレージ領域内（例えば、ＳＩＭＤレジスタ）の異なるデータストレージエレメントに対応してよい。１つの実施形態では、複数のソースレジスタのうち１つが、例えば、第１のソースデータ及び第２のソースデータに対して行われた演算結果をデスティネーションレジスタとして機能する２つのソースレジスタのうちの１つに書き戻すことによって、デスティネーションレジスタとしても動作してよい。
【００５４】
図１Ａは、本発明の１つの実施形態による命令を実行する実行ユニットを含むプロセッサと共に形成された、例示的なコンピュータシステムのブロック図である。システム１００は、本明細書で説明される実施形態などにおいて、本発明に従って、プロセスデータ用のアルゴリズムを実行するロジックを含んだ実行ユニットを利用するプロセッサ１０２などのコンポーネントを含む。システム１００は、Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ（カリフォルニア、サンタクララ）から入手可能なＰｅｎｔｉｕｍ（登録商標）ＩＩＩ、Ｐｅｎｔｉｕｍ（登録商標）４、Ｘｅｏｎ（商標）、Ｉｔａｎｉｕｍ（登録商標）、ＸＳｃａｌｅ（商標）、及び／又はＳｔｒｏｎｇＡＲＭ（商標）マイクロプロセッサに基づく処理システムを代表するものであるが、他のシステム（他のマイクロプロセッサを有するＰＣ、エンジニアリングワークステーション、セットトップボックスなどを含む）が用いられてもよい。１つの実施形態では、例示のシステム１００は、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ（ワシントン州、レドモンド）から入手可能なＷｉｎｄｏｗｓ（登録商標）版のオペレーティングシステムを実行することができるが、他のオペレーティングシステム（例えば、ＵＮＩＸ（登録商標）、Ｌｉｎｕｘ（登録商標））、組込みソフトウェア、及び／又はグラフィカルユーザインタフェースが用いられてもよい。したがって、本発明の実施形態は、ハードウェア回路、及びソフトウェアのいかなる具体的な組み合わせにも限定されてはいない。
【００５５】
実施形態はコンピュータシステムに限定されてはいない。本発明の代替の実施形態は、ハンドヘルドデバイス及び組込みアプリケーションなどの他のデバイスにおいて用いられ得る。ハンドヘルドデバイスのいくつかの例には、携帯電話、インターネットプロトコルデバイス、デジタルカメラ、携帯情報端末（ＰＤＡ）、及びハンドヘルドＰＣが含まれる。組込みアプリケーションには、マイクロコントローラ、デジタル信号プロセッサ（ＤＳＰ）、システムオンチップ、ネットワークコンピュータ（ＮｅｔＰＣ）、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク（ＷＡＮ）スイッチ、又は少なくとも１つの実施形態に従って１つ又は複数の命令を実行することができる任意の他のシステムが含まれ得る。
【００５６】
図１Ａは、本発明の１つの実施形態による少なくとも１つの命令を実行するアルゴリズムを実行する１つ又は複数の実行ユニット１０８を含んだプロセッサ１０２と共に形成される、コンピュータシステム１００のブロック図である。１つの実施形態は、単一プロセッサのデスクトップ又はサーバシステムとの関連で説明することができるが、代替の実施形態は、マルチプロセッサシステムに含まれ得る。システム１００は、「ハブ」システムアーキテクチャの例である。コンピュータシステム１００は、データ信号を処理するプロセッサ１０２を含む。プロセッサ１０２は、例えば、複合命令セットコンピュータ（ＣＩＳＣ）マイクロプロセッサ、縮小命令セットコンピューティング（ＲＩＳＣ）マイクロプロセッサ、超長命令語（ＶＬＩＷ）マイクロプロセッサ、命令セットの組み合わせを実装するプロセッサ、又は、デジタル信号プロセッサなどのその他のプロセッサデバイスであり得る。プロセッサ１０２は、プロセッサ１０２とシステム１００内の他のコンポーネントとの間でデータ信号を送信することができるプロセッサバス１１０に結合される。システム１００の諸要素は、当技術分野に詳しい者によく知られた従来の機能を実行する。
【００５７】
１つの実施形態では、プロセッサ１０２はレベル１（Ｌ１）内部キャッシュメモリ１０４を含む。アーキテクチャに応じて、プロセッサ１０２は、単一の内部キャッシュ又は複数レベルの内部キャッシュを有することができる。あるいは、別の実施形態では、キャッシュメモリはプロセッサ１０２の外部に存在することもできる。他の実施形態は、特定の実装及び必要に応じて、内部キャッシュ及び外部キャッシュの両方の組み合わせを含むこともできる。レジスタファイル１０６は、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、及び命令ポインタレジスタを含む様々なレジスタに、異なるタイプのデータを格納することができる。
【００５８】
整数及び浮動小数点演算を実行するロジックを含む実行ユニット１０８も、プロセッサ１０２内に存在する。プロセッサ１０２は、特定のマクロ命令用のマイクロコードを格納するマイクロコード（ｕｃｏｄｅ）ＲＯＭも含む。１つの実施形態では、実行ユニット１０８はパックド命令セット１０９を処理するロジックを含む。命令を実行する関連回路と共に、パックド命令セット１０９を汎用プロセッサ１０２の命令セットに含めることで、多くのマルチメディアアプリケーションにより用いられる演算は、汎用プロセッサ１０２内のパックドデータを用いて実行されてよい。したがって、多くのマルチメディアアプリケーションは、パックドデータに演算を実行するために、プロセッサのデータバスの全幅を用いることで、より効率的に加速され実行され得る。これにより、１つ又は複数の演算を一度に１つのデータ要素に対して実行するために、より小さいユニットのデータをプロセッサのデータバス全体にわたって転送する必要性を排除することができる。
【００５９】
実行ユニット１０８の代替の実施形態も、マイクロコントローラ、組込みプロセッサ、グラフィックスデバイス、ＤＳＰ、及び他のタイプのロジック回路に用いられ得る。システム１００はメモリ１２０を含む。メモリ１２０は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）デバイス、スタティックランダムアクセスメモリ（ＳＲＡＭ）デバイス、フラッシュメモリデバイス、又は他のメモリデバイスであり得る。メモリ１２０は、プロセッサ１０２が実行できるデータ信号で表される命令及び／又はデータを格納することができる。
【００６０】
システムロジックチップ１１６が、プロセッサバス１１０及びメモリ１２０に結合される。例示された実施形態のシステムロジックチップ１１６はメモリコントローラハブ（ＭＣＨ）である。プロセッサ１０２は、プロセッサバス１１０を介してＭＣＨ１１６と通信することができる。ＭＣＨ１１６は、命令及びデータのストレージ用に、並びにグラフィックスコマンド、データ、及びテクスチャのストレージ用に、高帯域幅のメモリパス１１８をメモリ１２０に提供する。ＭＣＨ１１６は、プロセッサ１０２、メモリ１２０、及びシステム１００内の他のコンポーネントの間でデータ信号を送信し、プロセッサバス１１０、メモリ１２０、及びシステムＩ／Ｏ１２２の間でデータ信号を橋渡しする。いくつかの実施形態では、システムロジックチップ１１６は、グラフィックスコントローラ１１２に結合するためのグラフィックスポートを提供することができる。ＭＣＨ１１６は、メモリインタフェース１１８を通じてメモリ１２０に結合される。グラフィックスカード１１２は、加速式グラフィックスポート（ＡＧＰ）相互接続１１４を通じてＭＣＨ１１６に結合される。
【００６１】
システム１００は、独自のハブインタフェースバス１２２を用いて、ＭＣＨ１１６をＩ／Ｏコントローラハブ（ＩＣＨ）１３０に結合する。ＩＣＨ１３０は、ローカルＩ／Ｏバスを介して、いくつかのＩ／Ｏデバイスに直接接続を提供する。ローカルＩ／Ｏバスは、メモリ１２０、チップセット、及びプロセッサ１０２に周辺機器を接続するための高速Ｉ／Ｏバスである。いくつかの例には、オーディオコントローラ、ファームウェアハブ（フラッシュＢＩＯＳ）１２８、無線送受信機１２６、データストレージ１２４、ユーザ入力及びキーボードインタフェースを含むレガシＩ／Ｏコントローラ、ユニバーサルシリアルバス（ＵＳＢ）などのシリアル拡張ポート、並びにネットワークコントローラ１３４がある。データストレージデバイス１２４は、ハードディスクドライブ、フロッピー（登録商標）ディスクドライブ、ＣＤ−ＲＯＭデバイス、フラッシュメモリデバイス、又は他の大容量ストレージデバイスを含むことができる。
【００６２】
システムの別の実施形態では、１つの実施形態による命令が、システムオンチップと共に用いられ得る。システムオンチップの１つの実施形態は、プロセッサ及びメモリを備える。そのような１つのシステムのメモリはフラッシュメモリである。フラッシュメモリは、プロセッサ及び他のシステムコンポーネントと同じダイ上に位置することができる。さらに、メモリコントローラ又はグラフィックスコントローラなどの他のロジックブロックも、システムオンチップ上に位置することができる。
【００６３】
図１Ｂは、本発明の１つの実施形態の原理を実装するデータ処理システム１４０を示す。本明細書に説明される実施形態は、本発明の実施形態の範囲から逸脱することなく、代替の処理システムと共に用いられ得ることが、当業者には容易に理解されよう。
【００６４】
コンピュータシステム１４０は、１つの実施形態による少なくとも１つの命令を実行可能な処理コア１５９を備える。１つの実施形態では、処理コア１５９は、限定されないが、ＣＩＳＣ、ＲＩＳＣ、又はＶＬＩＷタイプのアーキテクチャを含むあらゆるタイプのアーキテクチャの処理ユニットを表す。処理コア１５９はまた、１つ又は複数のプロセス技術で製造するのに適している場合があり、十分な詳細さで機械可読媒体上に表されることで、上記製造を容易にするのに適している場合がある。
【００６５】
処理コア１５９は、実行ユニット１４２、レジスタファイル１４５のセット、及びデコーダ１４４を含む。処理コア１５９は、本発明の実施形態を理解するのに必須ではない追加の回路（不図示）も含む。実行ユニット１４２は、処理コア１５９が受信した命令を実行するのに用いられる。通常のプロセッサ命令を実行することに加えて、実行ユニット１４２は、パックドデータフォーマットで演算を実行するために、パックド命令セット１４３内の命令を実行することができる。パックド命令セット１４３は、本発明の実施形態を実行するための命令、及び他のパックド命令を含む。実行ユニット１４２は、内部バスでレジスタファイル１４５に結合される。レジスタファイル１４５は、データを含む情報を格納するための、処理コア１５９上のストレージ領域を表す。前述したように、パックドデータの格納に用いられるストレージ領域は、不可欠ではないことが理解される。実行ユニット１４２はデコーダ１４４に結合される。デコーダ１４４は、処理コア１５９が受信した命令を、制御信号及び／又はマイクロコードエントリポイントにデコードするのに用いられる。これらの制御信号及び／又はマイクロコードエントリポイントに応答して、実行ユニット１４２は適切な演算を実行する。１つの実施形態では、デコーダは命令のオペコードを解釈するのに用いられ、それにより、命令内に示された対応するデータに対してどの演算が行われるべきかが示されることになる。
【００６６】
処理コア１５９は、様々な他のシステムデバイスと通信するためにバス１４１に結合され、これらのシステムデバイスには、限定されないが、例えば、シンクロナスダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）制御１４６、スタティックランダムアクセスメモリ（ＳＲＡＭ）制御１４７、バーストフラッシュメモリインタフェース１４８、パーソナルコンピュータメモリカード国際協会（ＰＣＭＣＩＡ）／コンパクトフラッシュ（登録商標）（ＣＦ）カード制御１４９、液晶ディスプレイ（ＬＣＤ）制御１５０、ダイレクトメモリアクセス（ＤＭＡ）コントローラ１５１、及び代替のバスマスタインタフェース１５２が含まれてよい。１つの実施形態では、データ処理システム１４０は、Ｉ／Ｏバス１５３を介して様々なＩ／Ｏデバイスと通信するためのＩ／Ｏブリッジ１５４も備えることができる。そのようなＩ／Ｏデバイスは、限定されないが、例えば、汎用非同期送受信機（ＵＡＲＴ）１５５、ユニバーサルシリアルバス（ＵＳＢ）１５６、Ｂｌｕｅｔｏｏｔｈ（登録商標）無線ＵＡＲＴ１５７、及びＩ／Ｏ拡張インタフェース１５８を含むことができる。
【００６７】
データ処理システム１４０の１つの実施形態は、モバイル通信、ネットワーク通信、及び／又は無線通信、並びにテキスト文字列比較演算を含むＳＩＭＤ演算を実行可能な処理コア１５９を提供する。処理コア１５９は、様々なオーディオアルゴリズム、ビデオアルゴリズム、イメージングアルゴリズム、及び通信アルゴリズムを用いてプログラムされてよく、これらのアルゴリズムには、ウォルシュ・アダマール変換、高速フーリエ変換（ＦＦＴ）、離散コサイン変換（ＤＣＴ）、及びこれらのそれぞれの逆変換などの離散変換、色空間変換、ビデオエンコード動き推定又はビデオデコード動き補償などの圧縮／解凍技術、並びにパルス符号変調（ＰＣＭ）などの変調／復調（ＭＯＤＥＭ）機能が含まれる。
【００６８】
図１Ｃは、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令を実行することが可能な、データ処理システムの別の代替の実施形態を示す。１つの代替の実施形態において、データ処理システム１６０は、メインプロセッサ１６６、ＳＩＭＤコプロセッサ１６１、キャッシュメモリ１６７、及び入出力システム１６８を含むことができる。入出力システム１６８はオプションとして、無線インタフェース１６９に結合されてよい。ＳＩＭＤコプロセッサ１６１は、１つの実施形態による命令を含む演算を実行可能である。処理コア１７０は、１つ又は複数のプロセス技術で製造するのに適している場合があり、十分な詳細さで機械可読媒体上に表されることで、処理コア１７０を含むデータ処理システム１６０の全て又は一部の製造を容易にするのに適している場合がある。
【００６９】
１つの実施形態では、ＳＩＭＤコプロセッサ１６１は、実行ユニット１６２及びレジスタファイルのセット１６４を含む。メインプロセッサ１６６の１つの実施形態は、実行ユニット１６２が実行するための１つの実施形態による命令を含む命令セット１６３の命令を認識するデコーダ１６５を含む。代替の実施形態では、ＳＩＭＤコプロセッサ１６１は、命令セット１６３の命令をデコードするデコーダ１６５Ｂの少なくとも一部も含む。処理コア１７０は、本発明の実施形態を理解するのに必須ではない追加の回路（不図示）も含む。
【００７０】
演算の際に、メインプロセッサ１６６は、キャッシュメモリ１６７及び入出力システム１６８とのやり取りを含む一般的なタイプのデータ処理操作を制御する一連のデータ処理命令を実行する。ＳＩＭＤコプロセッサ命令は、一連のデータ処理命令内に組み込まれている。メインプロセッサ１６６のデコーダ１６５は、これらのＳＩＭＤコプロセッサ命令を、付属のＳＩＭＤコプロセッサ１６１が実行すべきタイプのものであると認識する。したがって、メインプロセッサ１６６は、これらのＳＩＭＤコプロセッサ命令（又は、ＳＩＭＤコプロセッサ命令を表す制御信号）をコプロセッサバス１７１上に発行し、そこからＳＩＭＤコプロセッサ命令が任意の付属のＳＩＭＤコプロセッサにより受信される。この場合、ＳＩＭＤコプロセッサ１６１は、ＳＩＭＤコプロセッサ１６１を対象とした、あらゆる受信済みのＳＩＭＤコプロセッサ命令を受け付けて実行する。
【００７１】
データは、ＳＩＭＤコプロセッサ命令による処理のために、無線インタフェース１６９を介して受信されてよい。１つの例では、音声通信がデジタル信号の形態で受信されてよく、デジタル信号は、音声通信を表すデジタルオーディオサンプルを再生成するために、ＳＩＭＤコプロセッサ命令により処理されてよい。別の例では、圧縮されたオーディオ及び／又はビデオが、デジタルビットストリームの形態で受信されてよく、デジタルビットストリームは、オーディオサンプル及び／又は動画フレームを再生成するために、ＳＩＭＤコプロセッサ命令により処理されてよい。処理コア１７０の１つの実施形態では、メインプロセッサ１６６及びＳＩＭＤコプロセッサ１６１は、実行ユニット１６２、レジスタファイル１６４のセット、１つの実施形態による命令を含む命令セット１６３の命令を認識するデコーダ１６５を含む単一の処理コア１７０に統合される。
【００７２】
図２は、本発明の１つの実施形態による命令を実行するロジック回路を含むプロセッサ２００に関するマイクロアーキテクチャのブロック図である。いくつかの実施形態では、１つの実施形態による命令が、バイト、ワード、ダブルワード、クワッドワードなどのサイズ、並びに単精度及び倍精度の整数及び浮動小数点データタイプなどのデータタイプを有するデータ要素を処理するために実装され得る。１つの実施形態では、インオーダフロントエンド２０１は、実行される命令をフェッチして、プロセッサパイプラインにおいて後で用いられるよう当該命令を準備するプロセッサ２００の一部である。フロントエンド２０１は、いくつかのユニットを含むことができる。１つの実施形態では、命令プリフェッチャ２２６は、メモリから命令をフェッチし、当該命令を命令デコーダ２２８に提供し、次に命令デコーダは当該命令をデコード又は解釈する。例えば、１つの実施形態では、デコーダは、受信した命令を機械が実行できる「マイクロ命令」又は「マイクロオペレーション」と呼ばれる（マイクロｏｐ又はｕｏｐとも呼ばれる）１つ又は複数のオペレーションにデコードする。他の実施形態では、デコーダは、１つの実施形態によるオペレーションを実行するために、命令をマイクロアーキテクチャにより用いられるオペコード並びに対応するデータ及び制御フィールドにパースする。１つの実施形態では、トレースキャッシュ２３０はデコードされたｕｏｐを取得し、実行のためにそれらをプログラム順の並びに整理するか、ｕｏｐキュー２３４においてトレースする。トレースキャッシュ２３０が複雑な命令に遭遇すると、マイクロコードＲＯＭ２３２は、オペレーションを完了するのに必要なｕｏｐを提供する。
【００７３】
いくつかの命令は単一のマイクロｏｐに変換され、他の命令は全オペレーションを完了するのにいくつかのマイクロｏｐを必要とする。１つの実施形態では、命令を完了するのに４つより多くのマイクロｏｐを必要とする場合、デコーダ２２８はマイクロコードＲＯＭ２３２にアクセスして命令を実行する。１つの実施形態では、命令は、命令デコーダ２２８で処理するために、少数のマイクロｏｐにデコードされ得る。別の実施形態では、オペレーションを実現するのに多数のマイクロｏｐが必要となる場合、命令はマイクロコードＲＯＭ２３２の中に格納され得る。トレースキャッシュ２３０とは、１つの実施形態による１つ又は複数の命令を完了するマイクロコードシーケンスをマイクロコードＲＯＭ２３２から読み出すための正しいマイクロ命令ポインタを決定するエントリポイントプログラマブルロジックアレイ（ＰＬＡ）を指す。マイクロコードＲＯＭ２３２が、命令用のマイクロｏｐを順番に並べ終えた後に、機械のフロントエンド２０１は、トレースキャッシュ２３０からマイクロｏｐをフェッチすることを再開する。
【００７４】
アウトオブオーダ実行エンジン２０３は、命令が実行のために準備される場所である。アウトオブオーダ実行ロジックは複数のバッファを有し、実行のために命令がパイプラインを下り、スケジューリングされるときに性能を最適化するよう、命令のフローを滑らかにし並べ替える。アロケータロジックは、各ｕｏｐが実行するために必要な機械バッファ及びリソースを割り当てる。レジスタリネーミングロジックは、ロジックレジスタをレジスタファイルのエントリ上にリネームする。アロケータはまた、メモリスケジューラ、高速スケジューラ２０２、低速／汎用浮動小数点スケジューラ２０４、及び簡易浮動小数点スケジューラ２０６といった命令スケジューラの前段にある、１つはメモリ演算用、もう１つは非メモリ演算用となる２つのｕｏｐキューの一方に、ｕｏｐごとのエントリを割り当てる。ｕｏｐスケジューラ２０２、２０４、２０６は、これらのスケジューラが依存する入力レジスタのオペランドソースの準備状況と、ｕｏｐがそのオペレーションを完了するのに必要な実行リソースの可用性とに基づいて、ｕｏｐがいつ実行の準備ができるかを決定する。１つの実施形態の高速スケジューラ２０２は、メインクロックサイクルの各半周期においてスケジューリングすることができ、その他のスケジューラは、メインプロセッサのクロックサイクルごとに一度だけスケジューリングすることができる。スケジューラは、実行のためにｕｏｐをスケジューリングするよう、ディスパッチポートを調整する。
【００７５】
レジスタファイル２０８、２１０は、スケジューラ２０２、２０４、２０６と、実行ブロック２１１内の実行ユニット２１２、２１４、２１６、２１８、２２０、２２２、２２４との間に位置する。別個のレジスタファイル２０８、２１０がそれぞれ、整数演算用及び浮動小数点演算用に存在する。１つの実施形態の各レジスタファイル２０８、２１０には、レジスタファイルにまだ書き込まれていない完了したばかりの結果を、新たに依存するｕｏｐにバイパス又は転送することができるバイパスネットワークも含まれる。整数レジスタファイル２０８及び浮動小数点レジスタファイル２１０は、他方とデータを通信することもできる。１つの実施形態では、整数レジスタファイル２０８は２つの別個のレジスタファイルに分割され、一方のレジスタファイルはデータの下位３２ビット用、もう一方のレジスタファイルがデータの上位３２ビット用である。１つの実施形態の浮動小数点レジスタファイル２１０が１２８ビット幅のエントリを有するのは、通常、浮動小数点命令が６４ビットから１２８ビットまでの幅のオペランドを有するからである。
【００７６】
実行ブロック２１１は、実行ユニット２１２、２１４、２１６、２１８、２２０、２２２、２２４を含み、ここで命令が実際に実行される。この部分には、マイクロ命令が実行に必要とする、整数データオペランド値及び浮動小数点データオペランド値を格納するレジスタファイル２０８、２１０が含まれる。１つの実施形態のプロセッサ２００は複数の実行ユニット、すなわち、アドレス生成ユニット（ＡＧＵ）２１２、ＡＧＵ２１４、高速ＡＬＵ２１６、高速ＡＬＵ２１８、低速ＡＬＵ２２０、浮動小数点ＡＬＵ２２２、浮動小数点移動ユニット２２４から構成される。１つの実施形態では、浮動小数点実行ブロック２２２、２２４は、浮動小数点演算、ＭＭＸ演算、ＳＩＭＤ演算、及びＳＳＥ演算、又は他の演算を実行する。１つの実施形態の浮動小数点ＡＬＵ２２２は、除算マイクロｏｐ、平方根マイクロｏｐ、及び剰余マイクロｏｐを実行する６４ビット×６４ビットの浮動小数点除算器を含む。本発明の実施形態では、浮動小数点値を含む命令は、浮動小数点ハードウェアで処理されてよい。１つの実施形態では、ＡＬＵ演算は、高速ＡＬＵ実行ユニット２１６、２１８を使う。１つの実施形態の高速ＡＬＵ２１６、２１８は、クロックサイクル半分の実効レイテンシで高速演算を実行することができる。１つの実施形態では、大部分の複雑な整数演算は低速ＡＬＵ２２０を使うが、それは、低速ＡＬＵ２２０が、乗算器、シフト、フラグロジック、及び分岐処理など、長レイテンシタイプの演算用の整数実行ハードウェアを含むからである。メモリロード／ストア演算は、ＡＧＵ２１２、２１４により実行される。１つの実施形態では、整数ＡＬＵ２１６、２１８、２２０は、６４ビットデータオペランドで整数演算を実行するという状況で説明される。代替の実施形態では、ＡＬＵ２１６、２１８、２２０は、１６ビット、３２ビット、１２８ビット、２５６ビットなどを含む様々なデータビットをサポートするよう実装され得る。同様に、浮動小数点ユニット２２２、２２４は、様々な幅のビットを有する様々なオペランドをサポートするよう実装され得る。１つの実施形態では、浮動小数点ユニット２２２、２２４は、１２８ビット幅のパックドデータオペランドをＳＩＭＤ命令及びマルチメディア命令と共に処理し得る。
【００７７】
１つの実施形態では、ｕｏｐスケジューラ２０２、２０４、２０６は、親ロードが実行を終了する前に、依存演算をディスパッチする。ｕｏｐは、プロセッサ２００において投機的にスケジューリングされ実行されるので、プロセッサ２００はメモリミスを処理するロジックも含む。データロードがデータキャッシュで失敗した場合、一時的に不正確なデータのままスケジューラを離れたインフライトの依存演算がパイプラインに存在する可能性がある。やり直しメカニズムが、不正確なデータを用いる命令を追跡して再実行する。依存演算だけがやり直される必要があり、独立演算は完了することが可能である。プロセッサの１つの実施形態に関するスケジューラ及びやり直しメカニズムは、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令も捕らえるよう設計される。
【００７８】
「レジスタ」という用語は、オペランドを識別する命令の一部として用いられるオンボードプロセッサのストレージ位置を指すことができる。換言すれば、レジスタは、（プログラマの視点で）プロセッサの外側から使用可能なレジスタであってよい。しかし、実施形態のレジスタは、特定のタイプの回路に意味が限定されるべきではない。むしろ、実施形態のレジスタはデータを格納し提供すること、及び本明細書で説明される機能を実行することが可能である。本明細書で説明されるレジスタは、専用物理レジスタ、レジスタリネーミングを用いて動的に割り当てられる物理レジスタ、専用物理レジスタと動的に割り当てられる物理レジスタとの組み合わせなどの任意の数の異なる技術を用いて、プロセッサ内の回路により実装され得る。１つの実施形態では、整数レジスタが３２ビット整数データを格納する。１つの実施形態のレジスタファイルはまた、パックドデータ用の８つのマルチメディアＳＩＭＤレジスタを含む。以下の議論では、レジスタは、Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ（カリフォルニア州、サンタクララ）のＭＭＸ技術を用いて可能となるマイクロプロセッサの６４ビット幅のＭＭＸ（商標）レジスタ（いくつかの例では、「ｍｍ」レジスタとも呼ばれる）など、パックドデータを保持するよう設計されたデータレジスタであると理解される。これらのＭＭＸレジスタは、整数及び浮動小数点の両方の形態で利用可能であり、ＳＩＭＤ命令及びＳＳＥ命令に付随するパックドデータ要素を用いて動作し得る。同様に、ＳＳＥ２、ＳＳＥ３、ＳＳＥ４、又はそれ以降（「ＳＳＥｘ」と総称して呼ばれる）の技術に関する１２８ビット幅のＸＭＭレジスタも、そのようなパックドデータオペランドを保持するのに用いられ得る。１つの実施形態では、パックドデータ及び整数データを格納するときに、レジスタは、その２つのデータタイプを区別する必要はない。１つの実施形態では、整数及び浮動小数点は、同じレジスタファイルに含まれているか、異なるレジスタファイルに含まれているかのいずれかである。さらに、１つの実施形態では、浮動小数点データ及び整数データは、異なるレジスタに格納されても、同じレジスタに格納されてもよい。
【００７９】
以下の図の例では、複数のデータオペランドが説明される。図３Ａは、本発明の１つの実施形態によるマルチメディアレジスタにおいて、様々なパックドデータタイプの表現を示す。図３Ａは、１２８ビット幅オペランド用のパックドバイト３１０、パックドワード３２０、及びパックドダブルワード（ｄｗｏｒｄ）３３０のデータタイプを示す。この例のパックドバイトフォーマット３１０は１２８ビット長であり、１６個のパックドバイトデータ要素を含む。バイトは、ここでは８ビットのデータと定義される。バイトデータ要素ごとの情報は、バイト０ではビット７〜ビット０に、バイト１ではビット１５〜ビット８に、バイト２ではビット２３〜ビット１６に、そして最後にバイト１５ではビット１２０〜ビット１２７に格納される。したがって、全ての利用可能なビットがレジスタで用いられる。このストレージ構成で、プロセッサのストレージ効率が増加する。また、１６個のデータ要素にアクセスして、今では、１つの演算が１６個のデータ要素に対して並列に実行され得る。
【００８０】
一般に、データ要素とは、単一のレジスタ又はメモリ位置に同じ長さの他のデータ要素と共に格納される個々のデータである。ＳＳＥｘ技術に関するパックドデータシーケンスでは、ＸＭＭレジスタに格納されるデータ要素の数は、１２８ビットを個々のデータ要素のビット長で除算したものである。同様に、ＭＭＸ及びＳＳＥ技術に関するパックドデータシーケンスでは、ＭＭＸレジスタに格納されるデータ要素の数は、６４ビットを個々のデータ要素のビット長で除算したものである。図３Ａに示されるデータタイプは１２８ビット長であるが、本発明の実施形態は、６４ビット幅、２５６ビット幅、５１２ビット幅、又は他のサイズのオペランドでも動作し得る。この例のパックドワードフォーマット３２０は１２８ビット長であり、８個のパックドワードデータ要素を含む。各パックドワードは１６ビットの情報を含む。図３Ａのパックドダブルワードフォーマット３３０は１２８ビット長であり、４個のパックドダブルワードデータ要素を含む。各パックドダブルワードデータ要素は３２ビットの情報を含む。パックドクワッドワードは１２８ビット長であり、２個のパックドクワッドワードデータ要素を含む。
【００８１】
図３Ｂは、代替のレジスタ内のデータストレージフォーマットを示す。各パックドデータは、１つより多くの独立データ要素を含み得る。３つのパックドデータフォーマットである、パックドハーフ３４１、パックドシングル３４２、及びパックドダブル３４３が示される。パックドハーフ３４１、パックドシングル３４２、及びパックドダブル３４３の１つの実施形態には、固定小数点のデータ要素が含まれる。代替の実施形態では、パックドハーフ３４１、パックドシングル３４２、及びパックドダブル３４３のうち１つ又は複数は、浮動小数点のデータ要素を含むことができる。パックドハーフ３４１の１つの代替の実施形態は１２８ビット長であり、８個の１６ビットデータ要素を含む。パックドシングル３４２の１つの実施形態は１２８ビット長であり、４個の３２ビットデータ要素を含む。パックドダブル３４３の１つの実施形態は１２８ビット長であり、２個の６４ビットデータ要素を含む。そのようなパックドデータフォーマットはさらに、他のレジスタ長、例えば、９６ビット、１６０ビット、１９２ビット、２２４ビット、２５６ビット、５１２ビット、又はそれより多くに拡張されてもよいことが理解されよう。
【００８２】
図３Ｃは、本発明の１つの実施形態によるマルチメディアレジスタにおいて、様々な符号付き及び符号なしのパックドデータタイプの表現を示す。符号なしパックドバイト表現３４４が、ＳＩＭＤレジスタにおける符号なしパックドバイトのストレージを示す。バイトデータ要素ごとの情報は、バイト０ではビット７〜ビット０に、バイト１ではビット１５〜ビット８に、バイト２ではビット２３〜ビット１６になど、そして最後にバイト１５ではビット１２０〜ビット１２７に格納される。したがって、全ての利用可能なビットがレジスタで用いられる。このストレージ構成で、プロセッサのストレージ効率が増加し得る。また、１６個のデータ要素にアクセスして、今では、１つの演算が１６個のデータ要素に対して並列方式で実行され得る。符号付きパックドバイト表現３４５が、符号付きパックドバイトのストレージを示す。各バイトデータ要素の８番目のビットは符号標識であることに留意されたい。符号なしパックドワード表現３４６は、ワード７〜ワード０がどのようにＳＩＭＤレジスタに格納されるかを示す。符号付きパックドワード表現３４７は、符号なしパックドワードレジスタ内表現３４６に類似している。各ワードデータ要素の１６番目のビットは符号標識であることに留意されたい。符号なしパックドダブルワード表現３４８は、ダブルワードデータ要素がどのように格納されるかを示す。符号付きパックドダブルワード表現３４９は、符号なしパックドダブルワードレジスタ内表現３４８に類似している。必要な符号ビットは、各ダブルワードデータ要素の３２番目のビットであることに留意されたい。
【００８３】
図３Ｄは、３２ビット又はそれより多くのビットを有するオペレーションエンコーディング（オペコード）フォーマット３６０と、レジスタ／メモリオペランドのアドレス指定モードに関する１つの実施形態を表現したものであり、これらは、Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ（カリフォルニア州、サンタクララ）のワールドワイドウェブ（ｗｗｗ）ｉｎｔｅｌ．ｃｏｍ／ｐｒｏｄｕｃｔｓ／ｐｒｏｃｅｓｓｏｒ／ｍａｎｕａｌｓ／から入手可能な、「Ｉｎｔｅｌ（登録商標）６４及びＩＡ−３２  Ｉｎｔｅｌ（登録商標）アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル（２Ａ及び２Ｂの合体版）：命令セットリファレンスＡ−Ｚ」に説明されるオペコードフォーマットのタイプに対応する。１つの実施形態では、命令はフィールド３６１及び３６２のうち１つ又は複数によってエンコードされてよい。１つの命令当たり２つまでのオペランド位置が識別されてよく、それらには２つまでのソースオペランド識別子３６４及び３６５が含まれる。１つの実施形態では、デスティネーションオペランド識別子３６６はソースオペランド識別子３６４と同じであるが、他の実施形態ではこれらは異なる。代替の実施形態では、デスティネーションオペランド識別子３６６はソースオペランド識別子３６５と同じであるが、他の実施形態ではこれらは異なる。１つの実施形態では、ソースオペランド識別子３６４及び３６５により識別されるソースオペランドのうち１つが、命令の結果で上書きされるが、他の実施形態では、識別子３６４はソースレジスタ要素に対応し、識別子３６５はデスティネーションレジスタ要素に対応する。１つの実施形態では、オペランド識別子３６４及び３６５は、３２ビット又は６４ビットのソースオペランド及びデスティネーションオペランドを識別するのに用いられてもよい。
【００８４】
図３Ｅは、別の代替のオペレーションエンコーディング（オペコード）フォーマット３７０の表現であり、４０ビット又はそれより多くのビットを有する。オペコードフォーマット３７０はオペコードフォーマット３６０に対応し、オプションのプリフィックスバイト３７８を有する。１つの実施形態による命令は、フィールド３７８、３７１、及び３７２のうち１つ又は複数によってエンコードされてよい。１つの命令当たり２つまでのオペランド位置が、ソースオペランド識別子３７４及び３７５、並びにプリフィックスバイト３７８によって識別されてよい。１つの実施形態では、プリフィックスバイト３７８は、３２ビット又は６４ビットのソースオペランド及びデスティネーションオペランドを識別するのに用いられてもよい。１つの実施形態では、デスティネーションオペランド識別子３７６はソースオペランド識別子３７４と同じであるが、他の実施形態ではこれらは異なる。代替の実施形態では、デスティネーションオペランド識別子３７６はソースオペランド識別子３７５と同じであるが、他の実施形態ではこれらは異なる。１つの実施形態では、命令は、オペランド識別子３７４及び３７５により識別されるオペランドのうち１つ又は複数を処理し、オペランド識別子３７４及び３７５により識別される１つ又は複数のオペランドは命令の結果によって上書きされるが、他の実施形態では、識別子３７４及び３７５により識別されたオペランドは、別のレジスタ内の別のデータ要素に書き込まれる。オペコードフォーマット３６０及び３７０は、ＭＯＤフィールド３６３及び３７３、並びにオプションのスケール・インデックス・ベース・バイト及び変位バイトにより部分的に指定される、レジスタ・ツー・レジスタのアドレス指定、メモリ・ツー・レジスタのアドレス指定、レジスタ・バイ・メモリのアドレス指定、レジスタ・バイ・レジスタのアドレス指定、レジスタ・バイ・即値のアドレス指定、レジスタ・ツー・メモリのアドレス指定を可能にする。
【００８５】
次に図３Ｆを参照すると、いくつかの代替の実施形態では、６４ビット（又は１２８ビット、又は２５６ビット、又は５１２ビット、又はそれより多くのビット）の単一命令複数データ（ＳＩＭＤ）算術演算が、コプロセッサデータ処理（ＣＤＰ）命令によって実行されてよい。オペレーションエンコーディング（オペコード）フォーマット３８０は、ＣＤＰオペコードフィールド３８２及び３８９を有するそのようなＣＤＰ命令の１つを表す。代替の実施形態では、そのタイプのＣＤＰ命令演算は、フィールド３８３、３８４、３８７、及び３８８のうち１つ又は複数によってエンコードされてよい。１つの命令当たり３つまでのオペランド位置が識別されてよく、それらには２つまでのソースオペランド識別子３８５及び３９０、並びに１つのデスティネーションオペランド識別子３８６が含まれる。コプロセッサの１つの実施形態は、８ビット値、１６ビット値、３２ビット値、及び６４ビット値を処理することができる。１つの実施形態では、命令は整数データ要素に対して実行される。いくつかの実施形態では、命令は、条件フィールド３８１を用いて、条件付きで実行されてよい。いくつかの実施形態では、ソースデータサイズがフィールド３８３によりエンコードされてよい。いくつかの実施形態では、ゼロ（Ｚ）、ネガティブ（Ｎ）、キャリー（Ｃ）、及びオーバーフロー（Ｖ）の検出が、ＳＩＭＤフィールド上で行われ得る。いくつかの命令では、そのタイプのサチュレーションは、フィールド３８４によりエンコードされてよい。
【００８６】
次に参照する図３Ｇは、別の実施形態に従って、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する、別の代替のオペレーションエンコーディング（オペコード）フォーマット３９７の表現であり、Ｉｎｔｅｌ  Ｃｏｒｐ．（カリフォルニア州、サンタクララ）のワールドワイドウェブ（ｗｗｗ）ｉｎｔｅｌ．ｃｏｍ／ｐｒｏｄｕｃｔｓ／ｐｒｏｃｅｓｓｏｒ／ｍａｎｕａｌｓ／から入手可能な、「Ｉｎｔｅｌ（登録商標）アドバンスト・ベクトル・エクステンション・プログラミング・リファレンス」に説明されるオペコードフォーマットのタイプに対応する。
【００８７】
最初のｘ８６命令セットは、様々なフォーマットのアドレスシラブル、及び第１の「オペコード」バイトから存在が知られていた追加のバイトに含まれる即値オペランドを有する、１バイトのオペコードを規定した。さらに、特定のバイト値が存在し、そのバイト値はオペコードに対する修飾子として確保された（修飾子は、命令の前に配置する必要があったので、プリフィックスと呼ばれる）。元のパレットの２５６個のオペコードバイト（これらの特殊なプリフィックス値を含む）が使い尽くされた場合、新たなセットの２５６個のオペコードに逃れる手段として、単一のバイトが充てられた。ベクトル命令（例えば、ＳＩＭＤ）が追加されたとき、より多くのオペコードの必要性が生まれ、プリフィックスを用いて拡張した場合でさえ、「２バイト」のオペコードマップも不十分であった。このため、２バイトに加えてオプションのプリフィックスを識別子として用いる追加のマップに、新たな命令が追加された。
【００８８】
さらに、６４ビットモードの追加のレジスタを助けるために、追加のプリフィックス（「ＲＥＸ」と呼ばれる）が、プリフィックスとオペコード（及び、オペコードの決定に必要なあらゆるエスケープバイト）との間に用いられてもよい。１つの実施形態では、ＲＥＸは、６４ビットモードの追加のレジスタを用いることを示す４つの「ペイロード」ビットを有することができる。他の実施形態では、「ペイロード」ビットは、４つより少ない、又は４つより多いビットを有してもよい。少なくとも１つの命令セットの一般的なフォーマット（概ね、フォーマット３６０及び／又はフォーマット３７０に対応する）が、以下のフォーマットによって一般的に示される。つまり、［ｐｒｅｆｉｘｅｓ］  ［ｒｅｘ］  ｅｓｃａｐｅ  ［ｅｓｃａｐｅ２］  ｏｐｃｏｄｅ  ｍｏｄｒｍ（など）である。
【００８９】
オペコードフォーマット３９７はオペコードフォーマット３７０に対応し、大部分の他の一般的に用いられるレガシ命令プリフィックスバイト及びエスケープコードに取って代わるオプションのＶＥＸプリフィックスバイト３９１（１つの実施形態では、１６進のＣ４から始まる）を有する。例えば、図３Ｈは、命令をエンコードする２つのフィールドを用いる実施形態を示し、これは、第２のエスケープコードが元の命令に存在する場合、又はＲＥＸフィールド内の追加のビット（例えば、ＸＢフィールド及びＷフィールド）を用いる必要がある場合に用いられてよい。図３Ｈが示す実施形態では、レガシのエスケープが新たなエスケープ値で表され、レガシのプリフィックスが「ペイロード」バイトの一部として十分に圧縮され、レガシのプリフィックスが再利用されて今後の拡張に利用可能であり、第２のエスケープコードは「マップ」フィールドに圧縮されて、今後のマップ又は特徴空間が利用可能であり、新たな機能が追加される（例えば、ベクトル長の拡大、追加のソースレジスタ指定子）。
【００９０】
１つの実施形態による命令は、フィールド３９１及び３９２のうち１つ又は複数によりエンコードされてよい。１つの命令当たり４つまでのオペランド位置が、ソースオペランド識別子３７４及び３７５と組み合わせて、またオプションのスケール・インデックス・ベース（ＳＩＢ）識別子３９３、オプションの変位識別子３９４、及びオプションの即値バイト３９５と組み合わせて、フィールド３９１により識別されてよい。１つの実施形態では、ＶＥＸプリフィックスバイト３９１が、３２ビット又は６４ビットのソースオペランド及びデスティネーションオペランド、及び／又は、１２８ビット又は２５６ビットのＳＩＭＤレジスタ又はメモリオペランドを識別するのに用いられてよい。１つの実施形態では、オペコードフォーマット３９７により提供される機能は、オペコードフォーマット３７０と共に冗長であってよいが、他の実施形態ではこれらは異なる。オペコードフォーマット３７０及び３９７は、ＭＯＤフィールド３７３、並びにオプションの（ＳＩＢ）識別子３９３、オプションの変位識別子３９４、及びオプションの即値バイト３９５により部分的に指定される、レジスタ・ツー・レジスタのアドレス指定、メモリ・ツー・レジスタのアドレス指定、レジスタ・バイ・メモリのアドレス指定、レジスタ・バイ・レジスタのアドレス指定、レジスタ・バイ・即値のアドレス指定、レジスタ・ツー・メモリのアドレス指定を可能にする。
【００９１】
次に参照する図３Ｊは、別の実施形態に従って、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する、別の代替のオペレーションエンコーディング（オペコード）フォーマット３９８の表現である。オペコードフォーマット３９８は、オペコードフォーマット３７０及び３９７に対応し、大部分の他の一般的に用いられるレガシ命令プリフィックスバイト及びエスケープコードに取って代わり、追加の機能を提供する、オプションのＥＶＥＸプリフィックスバイト３９６（１つの実施形態では、１６進の６２から始まる）を有する。１つの実施形態による命令は、フィールド３９６及び３９２のうち１つ又は複数によりエンコードされてよい。１つの命令当たり４つまでのオペランド位置及び１つのマスクが、ソースオペランド識別子３７４及び３７５と組み合わせて、またオプションのスケール・インデックス・ベース（ＳＩＢ）識別子３９３、オプションの変位識別子３９４、及びオプションの即値バイト３９５と組み合わせて、フィールド３９６により識別されてよい。１つの実施形態では、ＥＶＥＸプリフィックスバイト３９６が、３２ビット又は６４ビットのソースオペランド及びデスティネーションオペランド、及び／又は、１２８ビット、２５６ビット、又は５１２ビットのＳＩＭＤレジスタ又はメモリオペランドを識別するのに用いられてよい。１つの実施形態では、オペコードフォーマット３９８により提供される機能は、オペコードフォーマット３７０又は３９７と共に冗長であってよいが、他の実施形態ではこれらは異なる。オペコードフォーマット３９８は、ＭＯＤフィールド３７３、並びにオプションの（ＳＩＢ）識別子３９３、オプションの変位識別子３９４、及びオプションの即値バイト３９５により部分的に指定される、マスクを用いた、レジスタ・ツー・レジスタのアドレス指定、メモリ・ツー・レジスタのアドレス指定、レジスタ・バイ・メモリのアドレス指定、レジスタ・バイ・レジスタのアドレス指定、レジスタ・バイ・即値のアドレス指定、レジスタ・ツー・メモリのアドレス指定を可能にする。少なくとも１つの命令セットの一般的なフォーマット（概ね、フォーマット３６０及び／又はフォーマット３７０に対応する）が、以下のフォーマットによって一般的に示される。つまり、ｅｖｅｘｌ  ＲＸＢｍｍｍｍｍ  ＷｖｖｖＬｐｐ  ｅｖｅｘ４  ｏｐｃｏｄｅ  ｍｏｄｒｍ  ［ｓｉｂ］  ［ｄｉｓｐ］  ［ｉｍｍ］である。
【００９２】
１つの実施形態では、ＥＶＥＸフォーマット３９８に従ってエンコードされる命令は、例えば、ユーザ設定可能なマスクレジスタ、又は追加のオペランド、あるいは１２８ビット、２５６ビット、又は５１２ビットのベクトルレジスタ、又は選択対象となるさらに大きいレジスタの中から選択したものなど、追加の新たな機能を用いて、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立するのに用いられ得る追加の「ペイロード」ビットを有することができる。例えば、ＶＥＸフォーマット３９７は、マスクのない命令に用いられてよく、ＥＶＥＸフォーマット３９８は、明確なユーザ設定可能なマスクを有する命令に用いられてよい。さらに、ＶＥＸフォーマット３９７は、１２８ビット又は２５６ビットのベクトルレジスタを用いる命令に用いられてよく、ＥＶＥＸフォーマット３９８は、１２８ビット、２５６ビット、５１２ビット、又はより大きいビット（又はより小さいビット）のベクトルレジスタを用いる命令に用いられてよい。
【００９３】
プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する例示的な命令又はコマンドが、以下の例によって示される。
【表１】
0006702590.tif 000002
【００９４】
上記の例示的な命令は、セキュアエンクレーブ制御構造データ、アプリケーションデータ、アプリケーションコードなどを格納するために、ＥＰＣにおいて親プロセス及び子プロセスのエンクレーブに割り当てられるセキュアストレージのアドレスを暗黙的に又は明示的に指定することができる。いくつかの実施形態では、親プロセスが実行されてよく、又はシステムソフトウェアガードエクステンション（ＳＧＸ）ライブラリが、親セキュアエンクレーブ制御構造（ＳＥＣＳ）を子プロセスのセキュアストレージ領域にコピーし、一意の子エンクレーブＩＤ、及び親のＳＥＣＳ／エンクレーブＩＤへのリンクを初期化する命令を実行してよい。いくつかの実施形態では、子プロセスが実行されてよく、又はシステムＳＧＸライブラリが、親エンクレーブのページを子のエンクレーブにコピーし（両方のエンクレーブは同じキーを有する）、次にまた、割り込まれた場合には、ＥＰＣマッピングのエントリを部分的完了に設定し、子エンクレーブのページ状態を記録する命令を実行してよい。したがって、親エンクレーブのページをコピーする命令を再開することができる。
【００９５】
いくつかの実施形態では、本明細書に開示される命令及びロジックは、プロセスを分岐するＳＥＣＳコピー及びセキュアエンクレーブ内のページコピー操作において、割り込まれ再開されることが可能である。したがって、プロセスを分岐してセキュアエンクレーブのページの子コピーを確立することに関するフォワードプログレスを保証することができ、音声、映像、リアルタイムのトランザクションなどのサービスにおける容認できないトラブルは、タイムリーなサービス保留割り込みにより回避され得る。いくつかの実施形態では、親エンクレーブのページを子のエンクレーブにコピーする最後の命令を示すために、コピー終了フラグが設定されてもよい。コピー終了フラグが設定されている場合、命令が完了に成功すると、親のＳＥＣＳ／エンクレーブＩＤへのリンクが子ＳＥＣＳから除去されてよい。いくつかの実施形態では、親のＳＥＣＳ／エンクレーブＩＤへのリンクが除去されるまで、アプリケーションは、子プロセスのエンクレーブからアクセス／実行されなくてよい。プロセスを分岐してセキュアＥＰＣに子エンクレーブを確立するそのようなエンクレーブ命令を用いることで、親プロセスはセキュアに、子プロセスを作成（すなわち、分岐）してＥＰＣに子プロセスエンクレーブのコピーを確立できることが理解されよう。そのような命令に対するプロセッサのサポートを受けずに、同じ（又は類似した）技術的効果を実現する任意のソフトウェアシステムのセキュリティ機能は（仮にも実現可能であれば）、非常に高価になる可能性があり、及び／又は何らかのより弱いセキュリティ対策を不都合にも受け入れることがあるという程度まで限定した性能になる得ることも理解されよう。
【００９６】
パーミッションの管理、物理メモリ及び／又はマッピングの変更は、まだＯＳで管理されてよいが、セキュアエンクレーブ内と同じようにメモリコンテンツが保護されている場合、ＯＳは、エンクレーブプライベートメモリの実際の保護されたコンテンツにアクセスすることに、許可も信頼も与えられないことも理解されよう。ＯＳを信頼できなくても、プライベートメモリコンテンツのセキュリティ及び／又は完全性を保証し、プロセスを分岐してページの子コピーを確立することに関する技術的制約を管理することは、精巧なハードウェアサポート及び／又は設計努力を必要とすることなく、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令及び処理ロジックを用いて実現され得る。
【００９７】
図４Ａは、本発明の少なくとも１つの実施形態による、インオーダパイプライン、及びレジスタリネーミングステージ、アウトオブオーダ発行／実行パイプラインを示すブロック図である。図４Ｂは、本発明の少なくとも１つの実施形態によるプロセッサに含まれる、インオーダアーキテクチャコア、及びレジスタリネーミングロジック、アウトオブオーダ発行／実行ロジックを示すブロック図である。図４Ａの実線枠はインオーダパイプラインを示し、破線枠はレジスタリネーミング、アウトオブオーダ発行／実行パイプラインを示す。同様に、図４Ｂの実線枠はインオーダアーキテクチャロジックを示し、破線枠はレジスタリネーミングロジック及びアウトオブオーダ発行／実行ロジックを示す。
【００９８】
図４Ａにおいて、プロセッサパイプライン４００には、フェッチステージ４０２、レングスデコードステージ４０４、デコードステージ４０６、割り当てステージ４０８、リネーミングステージ４１０、スケジューリング（ディスパッチ又は発行としても知られる）ステージ４１２、レジスタ読み出し／メモリ読み出しステージ４１４、実行ステージ４１６、ライトバック／メモリ書き込みステージ４１８、例外処理ステージ４２２、及びコミットステージ４２４が含まれる。
【００９９】
図４Ｂにおいて、矢印は、２つ又はそれより多くのユニットの間の結合を示し、矢印の方向は、これらのユニット間のデータフローの方向を示す。図４Ｂは、実行エンジンユニット４５０に結合されたフロントエンドユニット４３０を含むプロセッサコア４９０を示し、実行エンジンユニット４５０及びフロントエンドユニット４３０は両方ともメモリユニット４７０に結合される。
【０１００】
コア４９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、あるいはハイブリッド又は代替のコアタイプであってよい。さらに別のオプションとして、コア４９０は、例えば、ネットワークコア又は通信コア、圧縮エンジン、グラフィックスコアなどの専用コアであってもよい。
【０１０１】
フロントエンドユニット４３０には、命令キャッシュユニット４３４に結合された分岐予測ユニット４３２が含まれ、命令キャッシュユニット４３４は命令トランスレーションルックアサイドバッファ（ＴＬＢ）４３６に結合され、ＴＬＢ４３６は命令フェッチユニット４３８に結合され、命令フェッチユニット４３８はデコードユニット４４０に結合される。デコードユニット又はデコーダは命令をデコードし、１つ又は複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、又は他の制御信号を出力として生成することができ、これらは元の命令からデコードされる、あるいは別の方法で元の命令を反映する、又は元の命令から派生する。デコーダは、様々な異なるメカニズムを用いて実装されてよい。好適なメカニズムの例には、限定されないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコードリードオンリメモリ（ＲＯＭ）などが含まれる。命令キャッシュユニット４３４はさらに、メモリユニット４７０内のレベル２（Ｌ２）キャッシュユニット４７６に結合される。デコードユニット４４０は、実行エンジンユニット４５０内のリネーム／アロケータユニット４５２に結合される。
【０１０２】
実行エンジンユニット４５０には、リタイアメントユニット４５４と、１つ又は複数のスケジューラユニット４５６のセットとに結合された、リネーム／アロケータユニット４５２が含まれる。スケジューラユニット４５６は任意の数の異なるスケジューラを表し、リザベーションステーション、中央命令ウィンドウなどを含む。スケジューラユニット４５６は、物理レジスタファイルユニット４５８に結合される。それぞれの物理レジスタファイルユニット４５８は１つ又は複数の物理レジスタファイルを表し、その異なる複数の物理レジスタファイルが、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点などの１つ又は複数の異なるデータタイプ、ステータス（例えば、実行される次の命令のアドレスである命令ポインタ）などを格納する。物理レジスタファイルユニット４５８は、リタイアメントユニット４５４が重ねられており、レジスタリネーミング及びアウトオブオーダ実行が（例えば、リオーダバッファ及びリタイアメントレジスタファイルを用いる、フューチャファイル、履歴バッファ、及びリタイアメントレジスタファイルを用いる、レジスタマップ及びレジスタのプールを用いるなどして）実装され得る様々な方法を示す。概して、アーキテクチャレジスタは、プロセッサの外側から、又はプログラマの視点から可視である。レジスタは、いかなる既知の特定のタイプの回路にも限定されない。本明細書で説明されるようなデータを格納し提供できる限りにおいて、様々な異なるタイプのレジスタが適している。好適なレジスタの例には、限定されないが、専用物理レジスタ、レジスタリネーミングを用いて動的に割り当てられる物理レジスタ、専用物理レジスタと動的に割り当てられる物理レジスタとの組み合わせなどが含まれる。リタイアメントユニット４５４及び物理レジスタファイルユニット４５８は、実行クラスタ４６０に結合される。実行クラスタ４６０には、１つ又は複数の実行ユニット４６２のセット及び１つ又は複数のメモリアクセスユニット４６４のセットが含まれる。実行ユニット４６２は、様々な演算（例えば、シフト、加算、減算、乗算）を様々なタイプのデータ（例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して実行することができる。いくつかの実施形態は、特定の機能又は機能のセットに専用の多くの実行ユニットを含むことができるが、他の実施形態は、１つの実行ユニットだけ、又は全ての機能を全てが実行する複数の実行ユニットを含んでもよい。スケジューラユニット４５６、物理レジスタファイルユニット４５８、及び実行クラスタ４６０は、場合によっては複数であるとして示されており、それは、特定の実施形態が特定のタイプのデータ／演算用に別個のパイプラインを作成するからである（例えば、スカラ整数パイプライン、スカラ浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、及び／又はメモリアクセスパイプラインであり、それぞれ独自のスケジューラユニット、物理レジスタファイルユニット、及び／又は実行クラスタを有し、別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタだけがメモリアクセスユニット４６４を有する特定の実施形態が実装される）。別個のパイプラインが用いられる場合、これらのパイプラインのうち１つ又は複数がアウトオブオーダ発行／実行であってよく、その他がインオーダであってよいことも理解されたい。
【０１０３】
メモリアクセスユニット４６４のセットはメモリユニット４７０に結合され、メモリユニット４７０には、レベル２（Ｌ２）キャッシュユニット４７６に結合されたデータキャッシュユニット４７４に結合されたデータＴＬＢユニット４７２が含まれる。例示的な１つの実施形態において、メモリアクセスユニット４６４は、ロードユニット、ストアアドレスユニット、ストアデータユニットを含むことができ、それぞれがメモリユニット４７０内のデータＴＬＢユニット４７２に結合される。Ｌ２キャッシュユニット４７６は、１つ又は複数の他のレベルのキャッシュに結合され、最終的にメインメモリに結合される。
【０１０４】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行／実行コアのアーキテクチャは、以下のようにパイプライン４００を実装することができる。１）命令フェッチ４３８はフェッチステージ４０２及びレングスデコードステージ４０４を実行する。２）デコードユニット４４０はデコードステージ４０６を実行する。３）リネーム／アロケータユニット４５２は割り当てステージ４０８及びリネーミングステージ４１０を実行する。４）スケジューラユニット４５６はスケジューリングステージ４１２を実行する。５）物理レジスタファイルユニット４５８及びメモリユニット４７０はレジスタ読み出し／メモリ読み出しステージ４１４を実行し、実行クラスタ４６０は実行ステージ４１６を実行する。６）メモリユニット４７０及び物理レジスタファイルユニット４５８はライトバック／メモリ書き込みステージ４１８を実行する。７）様々なユニットが例外処理ステージ４２２に関与することができる。８）リタイアメントユニット４５４及び物理レジスタファイルユニット４５８はコミットステージ４２４を実行する。
【０１０５】
コア４９０は、１つ又は複数の命令セット（例えば、ｘ８６命令セット（より新しいバージョンに追加された、いくつかの拡張を有する）、ＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ（カリフォルニア州、サニーベール）のＭＩＰＳ命令セット、ＡＲＭ  Ｈｏｌｄｉｎｇｓ（カリフォルニア州、サニーベール）のＡＲＭ命令セット（ＮＥＯＮなどのオプションの追加拡張を有する））をサポートすることができる。
【０１０６】
コアはマルチスレッディング（２つ又はそれより多くの並列セットの演算又はスレッドを実行すること）をサポートすることができ、タイムスライスマルチスレッディング、同時マルチスレッディング（この場合、物理的コアが同時にマルチスレッディングするスレッドごとに、単一の物理的コアが論理コアを提供する）、又はこれらの組み合わせ（例えば、Ｉｎｔｅｌ（登録商標）ハイパースレッディングテクノロジに見られるような、タイムスライスフェッチ及びデコード、並びにその後の同時マルチスレッディング）を含む様々な方法でマルチスレッディングを行うことができることを理解されたい。
【０１０７】
レジスタリネーミングがアウトオブオーダ実行との関連で説明されるが、レジスタリネーミングはインオーダアーキテクチャで用いられてよいことを理解されたい。示されたプロセッサの実施形態は、別個の命令キャッシュユニット４３４及びデータキャッシュユニット４７４、並びに共有のＬ２キャッシュユニット４７６も含むが、代替の実施形態は、命令及びデータの両方に対して、例えば、レベル１（Ｌ１）内部キャッシュなどの単一の内部キャッシュ、又は複数レベルの内部キャッシュなどを有してよい。いくつかの実施形態では、システムは、内部キャッシュと、コア及び／又はプロセッサの外部にある外部キャッシュとの組み合わせを含んでよい。あるいは、全てのキャッシュがコア及び／又はプロセッサの外部にあってもよい。
【０１０８】
図５は、本発明の実施形態による、統合メモリコントローラ及び統合グラフィックスを有するシングルコアプロセッサ及びマルチコアプロセッサ５００のブロック図である。図５の実線枠は、シングルコア５０２Ａ、システムエージェント５１０、１つ又は複数のバスコントローラユニット５１６のセットを有するプロセッサ５００を示し、オプション追加の破線枠は、複数のコア５０２Ａ〜Ｎ、システムエージェントユニット５１０内の１つ又は複数の統合メモリコントローラユニット５１４のセット、統合グラフィックスロジック５０８を有する代替のプロセッサ５００を示す。
【０１０９】
メモリ階層には、コア内の１つ又は複数のレベルのキャッシュ、共有キャッシュユニット５０６のセットあるいは１つ又は複数の共有キャッシュユニット５０６、及び統合メモリコントローラユニット５１４のセットに結合された外部メモリ（不図示）が含まれる。共有キャッシュユニット５０６のセットには、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、又は他のレベルのキャッシュなどの１つ又は複数の中間レベルキャッシュ、ラストレベルキャッシュ（ＬＬＣ）、及び／又はこれらの組み合わせが含まれてよい。１つの実施形態では、リングベースの相互接続ユニット５１２が、統合グラフィックスロジック５０８、共有キャッシュユニット５０６のセット、システムエージェントユニット５１０を相互接続するが、代替の実施形態は、そのようなユニットの相互接続のために任意の数のよく知られた技術を用いてよい。
【０１１０】
いくつかの実施形態では、コア５０２Ａ〜Ｎのうち１つ又は複数は、マルチスレッディングが可能である。システムエージェント５１０には、コア５０２Ａ〜Ｎを調整し動作させるそれらのコンポーネントが含まれる。システムエージェントユニット５１０には、例えば、出力制御ユニット（ＰＣＵ）及びディスプレイユニットが含まれてよい。ＰＣＵは、コア５０２Ａ〜Ｎ及び統合グラフィックスロジック５０８の電力状態を管理するのに必要なロジック及びコンポーネントであってよく、又はこれらを含んでよい。ディスプレイユニットは、外部接続された１つ又は複数のディスプレイを駆動するためのものである。
【０１１１】
コア５０２Ａ〜Ｎは、アーキテクチャ及び／又は命令セットに関して、同種であっても異種であってもよい。例えば、コア５０２Ａ〜Ｎのうちいくつかはインオーダ型であってよく、他のものはアウトオブオーダ型である。別の例として、コア５０２Ａ〜Ｎのうち２つ又はそれより多くは同じ命令セットを実行することができてよく、他のものは当該命令セットのサブセットだけ又は異なる命令セットを実行することができてよい。
【０１１２】
プロセッサは、Ｃｏｒｅ（商標）ｉ３、ｉ５、ｉ７、２  Ｄｕｏ、及びＱｕａｄ、Ｘｅｏｎ（商標）、Ｉｔａｎｉｕｍ（商標）、ＸＳｃａｌｅ（商標）、又はＳｔｒｏｎｇＡＲＭ（商標）プロセッサなどの汎用プロセッサであってよく、これらはＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ（カリフォルニア州、サンタクララ）から入手可能である。あるいは、プロセッサは、ＡＲＭ  Ｈｏｌｄｉｎｇｓ，Ｌｔｄ、ＭＩＰＳなどの別の会社のものであってもよい。プロセッサは、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、コプロセッサ、組込みプロセッサなどの専用プロセッサであってもよい。プロセッサは、１つ又は複数のチップに実装されてよい。プロセッサ５００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、又はＮＭＯＳなどの多数のプロセス技術のうちいずれかを用いる１つ又は複数の基板の一部であってよく、及び／又は当該基板上に実装されてよい。
【０１１３】
図６〜図８は、プロセッサ５００を含むのに適した例示的なシステムであり、図９は、複数のコア５０２のうち１つ又は複数を含むことができる例示的なシステムオンチップ（ＳｏＣ）である。ラップトップ、デスクトップ、ハンドヘルドＰＣ、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯型メディアプレーヤ、ハンドヘルドデバイス、及び様々な他の電子デバイスのための、当技術分野で知られた他のシステム設計及びシステム構成も好適である。一般に、本明細書に開示されるプロセッサ及び／又は他の実行ロジックを組み込むことができる多様なシステム又は電子デバイスが、概ね好適である。
【０１１４】
ここで図６を参照すると、本発明の１つの実施形態によるシステム６００のブロック図が示されている。システム６００は、１つ又は複数のプロセッサ６１０、６１５を含むことができ、これらはグラフィックスメモリコントローラハブ（ＧＭＣＨ）６２０に結合される。オプション的な性質の追加のプロセッサ６１５は、図６では破線で示されている。
【０１１５】
各プロセッサ６１０、６１５は、プロセッサ５００の何らかのバージョンであってよい。しかし、統合グラフィックスロジック及び統合メモリ制御ユニットがプロセッサ６１０、６１５の中に存在する可能性は低いことに留意されたい。図６は、ＧＭＣＨ６２０がメモリ６４０に結合されてよいことを示し、メモリ６４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）であってよい。ＤＲＡＭは、少なくとも１つの実施形態では、不揮発性キャッシュと関連付けられてよい。
【０１１６】
ＧＭＣＨ６２０はチップセットであっても、チップセットの一部であってもよい。ＧＭＣＨ６２０は、プロセッサ６１０、６１５と通信することができ、プロセッサ６１０、６１５とメモリ６４０との間のやり取りを制御することができる。ＧＭＣＨ６２０は、プロセッサ６１０、６１５とシステム６００の他の要素との間のアクセラレーテッドバスインタフェースとして動作することもできる。少なくとも１つの実施形態では、ＧＭＣＨ６２０は、フロントサイドバス（ＦＳＢ）６９５などのマルチドロップバスを介して、プロセッサ６１０、６１５と通信する。
【０１１７】
さらに、ＧＭＣＨ６２０はディスプレイ６４５（フラットパネルディスプレイなど）に結合される。ＧＭＣＨ６２０は、統合グラフィックスアクセラレータを含むことができる。ＧＭＣＨ６２０はさらに、入力／出力（Ｉ／Ｏ）コントローラハブ（ＩＣＨ）６５０に結合され、ＩＣＨ６５０は、様々な周辺デバイスをシステム６００に結合するのに用いられてよい。例えば、図６の実施形態には、外部グラフィックスデバイス６６０が示されており、これは、別の周辺デバイス６７０と共にＩＣＨ６５０に結合された別個のグラフィックスデバイスであってよい。
【０１１８】
あるいは、追加のプロセッサ又は異なるプロセッサもシステム６００に存在してよい。例えば、追加のプロセッサ６１５には、プロセッサ６１０と同じ追加のプロセッサ、プロセッサ６１０に対して異種又は非対称の追加のプロセッサ、アクセラレータ（例えば、グラフィックスアクセラレータ、又はデジタル信号処理（ＤＳＰ）ユニットなど）、フィールドプログラマブルゲートアレイ、又はその他のプロセッサが含まれてよい。物理リソース６１０と６１５との間には、アーキテクチャ上の特性、マイクロアーキテクチャ上の特性、熱特性、電力消費特性などを含む様々な価値基準に関して、様々な差異が存在し得る。これらの差異は、プロセッサ６１０と６１５との間の非対称性及び異種性として、効果的に現れ得る。少なくとも１つの実施形態では、様々なプロセッサ６１０、６１５は同じダイパッケージの中に存在することができる。
【０１１９】
ここで図７を参照すると、本発明のある実施形態による第２のシステム７００のブロック図が示されている。図７に示されるように、マルチプロセッサシステム７００はポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続７５０を介して結合された第１のプロセッサ７７０及び第２のプロセッサ７８０を含む。プロセッサ７７０及び７８０のそれぞれは、プロセッサ６１０及び６１５のうち１つ又は複数と同じように、プロセッサ５００の何らかのバージョンであってよい。
【０１２０】
２つのプロセッサ７７０、７８０だけで示されているが、本発明の範囲はそのように限定されてはいないことを理解されたい。他の実施形態では、１つ又は複数の追加のプロセッサが所与のプロセッサ内に存在することができる。
【０１２１】
プロセッサ７７０及び７８０はそれぞれ、統合メモリコントローラユニット７７２及び７８２を含んで示されている。プロセッサ７７０は、そのバスコントローラユニットの一部として、ポイントツーポイント（Ｐ−Ｐ）インタフェース７７６及び７７８も含み、同様に第２のプロセッサ７８０はＰ−Ｐインタフェース７８６及び７８８を含む。プロセッサ７７０、７８０は、ポイントツーポイント（Ｐ−Ｐ）インタフェース７５０を介し、Ｐ−Ｐインタフェース回路７７８、７８８を用いて、情報を交換することができる。図７に示されるように、ＩＭＣ７７２及び７８２はプロセッサをそれぞれのメモリ、すなわちメモリ７３２及びメモリ７３４に結合し、これらのメモリはそれぞれのプロセッサにローカルに取り付けられたメインメモリの一部であってよい。
【０１２２】
プロセッサ７７０、７８０はそれぞれ、個々のＰ−Ｐインタフェース７５２、７５４を介し、ポイントツーポイントインタフェース回路７７６、７９４、７８６、７９８を用いて、チップセット７９０と情報を交換することができる。チップセット７９０は、高性能グラフィックスインタフェース７３９を介し、高性能グラフィックス回路７３８と情報を交換することもできる。
【０１２３】
共有キャッシュ（不図示）がどちらかのプロセッサに含まれても、両方のプロセッサの外側にあってもよいが、Ｐ−Ｐ相互接続を介してプロセッサに接続されており、その結果、プロセッサが低電力モードに置かれた場合に、どちらかのプロセッサ又は両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得る。
【０１２４】
チップセット７９０は、インタフェース７９６を介して第１のバス７１６に結合されてよい。１つの実施形態では、第１のバス７１６は、ペリフェラルコンポーネントインターコネクト（ＰＣＩ）バス、あるいはＰＣＩエクスプレスバス又は別の第３世代Ｉ／Ｏ相互接続バスなどのバスであってよいが、本発明の範囲はそのように限定されてはいない。
【０１２５】
図７に示されるように、様々なＩ／Ｏデバイス７１４が、第１のバス７１６を第２のバス７２０に結合するバスブリッジ７１８と共に、第１のバス７１６に結合されてよい。１つの実施形態では、第２のバス７２０はローピンカウント（ＬＰＣ）バスであってよい。１つの実施形態では、様々なデバイスが第２のバス７２０に結合されてよく、それらのデバイスには、例えば、キーボード及び／又はマウス７２２、通信デバイス７２７、並びに命令／コード及びデータ７３０を含むことができるディスクドライブ又は他の大容量ストレージデバイスなどのストレージユニット７２８が含まれる。さらに、オーディオＩ／Ｏ７２４が第２のバス７２０に結合されてよい。他のアーキテクチャも可能であることに留意されたい。例えば、システムは、図７のポイントツーポイントアーキテクチャの代わりに、マルチドロップバス又は他のそのようなアーキテクチャを実装することができる。
【０１２６】
ここで図８を参照すると、本発明のある実施形態による第３のシステム８００のブロック図が示されている。図７及び図８の同様の要素は同様の参照符号を有しており、図７の特定の態様が図８から省略されているのは、図８の他の態様を不明瞭にしないためである。
【０１２７】
図８は、プロセッサ８７０、８８０がそれぞれ、統合メモリ及びＩ／Ｏ制御ロジック（「ＣＬ」）８７２及び８８２を含み得ることを示す。少なくとも１つの実施形態では、ＣＬ８７２、８８２は、図５及び図７に関して上述されたような統合メモリコントローラユニットを含むことができる。さらに、ＣＬ８７２、８８２はＩ／Ｏ制御ロジックも含むことができる。図８は、メモリ８３２、８３４だけがＣＬ８７２、８８２に結合されるのではなく、Ｉ／Ｏデバイス８１４も制御ロジック８７２、８８２に結合されることを示している。レガシＩ／Ｏデバイス８１５がチップセット８９０に結合される。
【０１２８】
ここで図９を参照すると、本発明のある実施形態によるＳｏＣ９００のブロック図が示されている。図５の類似の要素は、同様の参照符号を有する。また、破線枠は、より高度なＳｏＣに関するオプション機能である。図９では、相互接続ユニット９０２が、１つ又は複数のコア５０２Ａ〜Ｎのセット及び共有キャッシュユニット５０６を含むアプリケーションプロセッサ９１０と、システムエージェントユニット５１０と、バスコントローラユニット５１６と、統合メモリコントローラユニット５１４と、統合グラフィックスロジック５０８を含むことができる１つ又は複数のメディアプロセッサ９２０のセットと、スチルカメラ機能及び／又はビデオカメラ機能を提供するためのイメージプロセッサ９２４と、ハードウェアオーディオアクセラレーションを提供するためのオーディオプロセッサ９２６と、ビデオエンコード／デコードアクセラレーションを提供するためのビデオプロセッサ９２８と、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット９３０と、ダイレクトメモリアクセス（ＤＭＡ）ユニット９３２と、１つ又は複数の外部ディスプレイに結合するためのディスプレイユニット９４０とに結合される。
【０１２９】
図１０は、中央処理装置（ＣＰＵ）及びグラフィックス処理ユニット（ＧＰＵ）を含むプロセッサを示し、これらは、１つの実施形態による少なくとも１つの命令を実行することができる。１つの実施形態では、少なくとも１つの実施形態によるオペレーションを実行する命令が、ＣＰＵにより実行され得る。別の実施形態では、命令はＧＰＵにより実行され得る。さらに別の実施形態では、命令は、ＧＰＵ及びＣＰＵにより実行されるオペレーションの組み合わせによって実行されてよい。例えば、１つの実施形態では、１つの実施形態による命令が、ＧＰＵ上で実行されるために受信されデコードされてよい。しかし、デコードされた命令内の１つ又は複数のオペレーションはＣＰＵにより実行されてよく、その結果は、命令の最終リタイアメントのためにＧＰＵに返されてよい。逆に、いくつかの実施形態では、ＣＰＵは一次プロセッサとして動作してよく、ＧＰＵはコプロセッサとして動作してよい。
【０１３０】
いくつかの実施形態では、高度に並列化されたスループットの高いプロセッサから恩恵を受ける命令はＧＰＵにより実行されてよく、深くパイプライン化されたアーキテクチャから恩恵を受けるプロセッサの性能から恩恵を受ける命令はＣＰＵにより実行されてよい。例えば、グラフィックス、科学アプリケーション、財務アプリケーション、及び他の並列ワークロードは、ＧＰＵの性能から恩恵を受けてよく、それに応じて実行されてよいが、オペレーティングシステムのカーネル又はアプリケーションコードなどのよりシーケンシャルなアプリケーションは、ＣＰＵにより好適であってよい。
【０１３１】
図１０において、プロセッサ１０００には、ＣＰＵ１００５、ＧＰＵ１０１０、イメージプロセッサ１０１５、ビデオプロセッサ１０２０、ＵＳＢコントローラ１０２５、ＵＡＲＴコントローラ１０３０、ＳＰＩ／ＳＤＩＯコントローラ１０３５、ディスプレイデバイス１０４０、高精細度マルチメディアインタフェース（ＨＤＭＩ（登録商標））コントローラ１０４５、ＭＩＰＩコントローラ１０５０、フラッシュメモリコントローラ１０５５、デュアルデータレート（ＤＤＲ）コントローラ１０６０、セキュリティエンジン１０６５、及びＩ２Ｓ／Ｉ２Ｃ（Ｉｎｔｅｇｒａｔｅｄ  Ｉｎｔｅｒｃｈｉｐ  Ｓｏｕｎｄ／Ｉｎｔｅｒ−Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）インタフェース１０７０が含まれる。他のロジック及び回路が図１０のプロセッサに含まれてよく、それらには、より多くのＣＰＵ又はＧＰＵ、及び他のペリフェラルインタフェースコントローラが含まれる。
【０１３２】
少なくとも１つの実施形態の１つ又は複数の態様が、プロセッサ内の様々なロジックを表す機械可読媒体に格納された典型的なデータによって実装されてよく、そのデータは、機械により読み出されると、本明細書で説明される技術を実行するロジックを機械に作らせる。「ＩＰコア」として知られるそのような表現は、有形の機械可読媒体（「テープ」）に格納され、実際にロジック又はプロセッサを作る製造機械にロードするために、様々な顧客又は製造施設に供給されてよい。例えば、ＡＲＭ  Ｈｏｌｄｉｎｇｓ，Ｌｔｄ．が開発したＣｏｒｔｅｘ（商標）ファミリのプロセッサなどのＩＰコア、及び中国科学院の計算技術研究所（ＩＣＴ）が開発した龍芯（Ｌｏｏｎｇｓｏｎ）のＩＰコアが、Ｔｅｘａｓ  Ｉｎｓｔｒｕｍｅｎｔｓ、Ｑｕａｌｃｏｍｍ、Ａｐｐｌｅ、又はＳａｍｓｕｎｇなどの様々な顧客又はライセンス先に販売又はライセンス供与されてよく、これらの顧客又はライセンス先によって製造されたプロセッサに実装されてよい。
【０１３３】
図１１は、１つの実施形態によるＩＰコアの開発を説明するブロック図を示す。ストレージ１１３０には、シミュレーションソフトウェア１１２０、及び／又は、ハードウェア又はソフトウェアモデル１１１０が含まれる。１つの実施形態では、ＩＰコア設計を表すデータは、メモリ１１４０（例えば、ハードディスク）、有線接続１１５０（例えば、インターネット）、又は無線接続１１６０を介してストレージ１１３０に提供され得る。シミュレーションツール及びモデルにより生成されるＩＰコア情報は次に、少なくとも１つの実施形態による少なくとも１つの命令を実行するＩＰコアがサードパーティにより製造され得る製造施設に送信され得る。
【０１３４】
いくつかの実施形態では、１つ又は複数の命令は、第１のタイプ又はアーキテクチャ（例えば、ｘ８６）に対応し、異なるタイプ又はアーキテクチャのプロセッサ（例えば、ＡＲＭ）上で変換又はエミュレートされてよい。したがって、１つの実施形態によれば、命令は、ＡＲＭ、ｘ８６、ＭＩＰＳ、ＧＰＵ、あるいは他のプロセッサタイプ又はアーキテクチャを含む任意のプロセッサ又はプロセッサタイプ上で実行されてよい。
【０１３５】
図１２は、１つの実施形態に従って、第１のタイプの命令が異なるタイプのプロセッサによってどのようにエミュレートされるかを示す。図１２において、プログラム１２０５は、１つの実施形態による命令として、同じ機能又は実質的に同じ機能を実行することができるいくつかの命令を含む。しかし、プログラム１２０５の命令は、プロセッサ１２１５と異なる又は非互換であるタイプ及び／又はフォーマットのものであってよく、このことは、プログラム１２０５内のタイプの命令を、プロセッサ１２１５がネイティブに実行できなくてもよいことを意味する。しかし、エミュレーションロジック１２１０を用いて、プログラム１２０５の命令は、プロセッサ１２１５がネイティブに実行できる命令に変換される。１つの実施形態では、エミュレーションロジックはハードウェアで具現化される。別の実施形態では、エミュレーションロジックは、プログラム１２０５の命令タイプをプロセッサ１２１５がネイティブに実行可能なタイプに変換するソフトウェアを含む有形の機械可読媒体で具現化される。他の実施形態では、エミュレーションロジックは、固定機能のハードウェア又はプログラマブルなハードウェアと、有形の機械可読媒体に格納されたプログラムとの組み合わせである。１つの実施形態では、プロセッサはエミュレーションロジックを含み、他の実施形態では、エミュレーションロジックはプロセッサの外側に存在して、サードパーティにより提供される。１つの実施形態では、プロセッサは、プロセッサに含まれる又はプロセッサに関連付けられるマイクロコード又はファームウェアを実行することで、ソフトウェアを含む有形の機械可読媒体で具現化されたエミュレーションロジックをロードすることができる。
【０１３６】
図１３は、本発明の実施形態による、ソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換するソフトウェア命令変換器の使用を対比するブロック図である。示された実施形態では、命令変換器はソフトウェア命令変換器であるが、代わりに命令変換器は、ソフトウェア、ファームウェア、ハードウェア、又はこれらの様々な組み合わせで実装されてもよい。図１３は、高水準言語１３０２のプログラムがｘ８６コンパイラ１３０４を用いてコンパイルされ、少なくとも１つのｘ８６命令セットコアを搭載するプロセッサ１３１６がネイティブに実行できるｘ８６バイナリコード１３０６を生成できることを示す。少なくとも１つのｘ８６命令セットコアを搭載するプロセッサ１３１６は、少なくとも１つのｘ８６命令セットコアを搭載するＩｎｔｅｌ（登録商標）プロセッサと実質的に同じ結果を実現するために、（１）Ｉｎｔｅｌ（登録商標）ｘ８６命令セットコアの命令セットの大部分、又は（２）少なくとも１つのｘ８６命令セットコアを搭載するＩｎｔｅｌ（登録商標）プロセッサ上で動作させることを目的としたオブジェクトコード形式のアプリケーション又は他のソフトウェアを、互換的に実行する、又は別の方法で処理することで、少なくとも１つのｘ８６命令セットコアを搭載するＩｎｔｅｌ（登録商標）プロセッサと実質的に同じ機能を実行し得る任意のプロセッサを表す。ｘ８６コンパイラ１３０４は、追加のリンケージ処理があってもなくても、少なくとも１つのｘ８６命令セットコアを搭載するプロセッサ１３１６上で実行され得るｘ８６バイナリコード１３０６（例えば、オブジェクトコード）を生成するよう動作可能なコンパイラを表す。同様に、図１３は、高水準言語１３０２のプログラムが、別の命令セットコンパイラ１３０８を用いてコンパイルされ、少なくとも１つのｘ８６命令セットコアを搭載しないプロセッサ１３１４（例えば、ＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ（カリフォルニア州、サニーベール）のＭＩＰＳ命令セットを実行するコア、及び／又は、ＡＲＭ  Ｈｏｌｄｉｎｇｓ（カリフォルニア州、サニーベール）のＡＲＭ命令セットを実行するコアを搭載したプロセッサ）がネイティブに実行できる別の命令セットバイナリコード１３１０を生成できることを示す。命令変換器１３１２は、ｘ８６バイナリコード１３０６を、ｘ８６命令セットコアを搭載しないプロセッサ１３１４がネイティブに実行できるコードに変換するのに用いられる。この変換されたコードは、別の命令セットバイナリコード１３１０と同じである可能性は低い。なぜなら、これが実現できる命令変換器を作るのは難しいからである。しかし、変換されたコードは一般的なオペレーションを実現し、別の命令セットの命令で構成される。したがって、命令変換器１３１２は、エミュレーション、シミュレーション、又はその他の処理を通じて、ｘ８６命令セットプロセッサ又はコアを持たないプロセッサ又は他の電子デバイスがｘ８６バイナリコード１３０６を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、又はこれらの組み合わせを表す。
【０１３７】
図１４Ａは、セキュアエンクレーブページキャッシュＥＰＣ１４６０にマルチプロセッシング能力を提供する処理システム１４０１の実施形態を示しており、そのマルチプロセッシング能力には、プロセスを分岐して、セキュアエンクレーブページキャッシュに子エンクレーブを確立する子エンクレーブ作成命令を用いることが含まれる。システム１４０１には、システムメモリ１４９０及びプロセッサ１４０２が含まれる。プロセッサ１４０２は、第１のハードウェアスレッド又は論理プロセッサ１４２０と、第２のハードウェアスレッド又は論理プロセッサ１４３０とを有する。プロセッサ１４０２は、簡略化のために、それぞれ単一のハードウェアスレッドを表す２つの論理プロセッサを有するものとして示されているが、本発明はそのように限定されてはいないことが理解されよう。例えば、プロセッサ１４０２などのプロセッサ、又は本明細書に示される他のプロセッサが、いくつかの論理プロセッサコアを有することは通常のことであり、それらの論理プロセッサコアは、いくつかの物理リソース（例えば、ＥＰＣ１４６０）及び／又は回路（例えば、ＳＥユニット１４７０）を共有してもしなくてもよく、各論理プロセッサ又はプロセッサコアは、ソフトウェアスレッドを同時に又は並行して実行できる複数のハードウェアスレッドを有する。
【０１３８】
プロセッサ１４０２は、セキュアエンクレーブ（ＳＥ）ユニット１４７０及びエンクレーブページキャッシュＥＰＣ１４６０も有する。いくつかの実施形態では、ＥＰＣ１４６０は、より大きいキャッシュユニット、例えば、１つ又は複数のレベル１キャッシュ１４４０及び１４５０、又はレベル２キャッシュ（不図示）の一部であってよい。他の実施形態では、ＥＰＣ１４６０は、複数のハードウェアスレッド、論理プロセッサ、又は処理コアにより共有された別個の構造又は分散した構造（例えば、キャッシュ１４４０及びキャッシュ１４５０）であってよく、１つ又は複数のセキュアエンクレーブに割り当てられ、ハードウェアスレッド、論理プロセッサ、又は処理コアがアクセス可能なページ（例えば、１４４２、１４４６、及び１４５２）のアドレスのセキュアデータ、又はそのアドレスに関連付けられるセキュアデータを格納する。いくつかの実施形態では、ＯＳは、１つ又は複数のページ（例えば、ページ１４４２、１４４６、又は１４５２）を追い出し、データを暗号化し、そのデータをメモリ（例えば、暗号化されたページ１４９５として）又は不揮発性ストレージに書き戻してよい。いくつかの実施形態では、ＯＳは次に、新たなページ（例えば、ページ１４１０）をメモリ又は不揮発性ストレージから読み出し、データを解読し、解読したページをＥＰＣ１４６０に格納することができる。ページングプロセス（例えば、セキュアエンクレーブページキャッシュのメモリコンテンツが暗号化されて書き戻される、新たなページがメモリからロードされて解読される、ＴＬＢエントリがフラッシュされて置換されるなど）は、ページングプロセスが完了するまで、プロセッサコア又は論理プロセッサ（例えば、論理プロセッサ１４２０及び１４３０）が（例えば、ＩＰＩによって）一時的に割り込まれるだけで、その後再開するといった方法で実現され得る。
【０１３９】
ＳＥユニット１４７０は、暗号化ユニット、完全性保護ユニット、アクセス制御ユニット、レンジレジスタ、エンクレーブページキャッシュマッピング、エポックカウンタストレージ位置などを有する複数のハードウェアスレッド、論理プロセッサ、又は処理コアにより共有される別個の構造又は分散した構造（例えば、ＳＥユニット１４２７及び１４３７）も含んでよく、ＳＥユニット１４７０は、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する子エンクレーブ作成命令もサポートする。
【０１４０】
この例では、論理プロセッサ１４２０は、デコードステージ１４２２、読み出しステージ１４２４、１つ又は複数の実行ユニット（例えば、実行ユニット１４２６）、及び書き込みステージ１４２８を有する。論理プロセッサ１４２０はＴＬＢ１４２５も有し、ここには、ＥＰＣ１４６０にアクセスするために変換がインストールされ得る。論理プロセッサ１４３０は、デコードステージ１４３２、読み出しステージ１４３４、１つ又は複数の実行ユニット（例えば、実行ユニット１４３６）、及び書き込みステージ１４３８を有する。論理プロセッサ１４３０はＴＬＢ１４３５も有し、ここには、ＥＰＣ１４６０にアクセスするために変換がインストールされ得る。論理プロセッサ１４２０及び１４３０の実施形態は、セキュアエンクレーブページキャッシュＥＰＣ１４６０にマルチプロセッシング能力を提供するエンクレーブ命令の実行のために、他のパイプラインステージ（例えば、パイプライン４００に示されるもの）も有してよい。論理プロセッサ１４２０及び１４３０の実施形態は、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する子エンクレーブ作成命令もサポートすることができる。
【０１４１】
論理プロセッサ１４２０及び１４３０の実施形態では、１つ又は複数の実行ユニット（例えば、実行ユニット１４２６及び／又は１４３６）は、デコードされた子エンクレーブ作成命令に応答して、第１のセキュアストレージ領域（例えば１４４２）の第１のセキュア制御構造（ＳＥＣＳ）を第２のセキュアストレージ領域（例えば１４５２）にコピーすることができる。さらに、デコードされた子エンクレーブ作成命令に応答して、１つ又は複数の実行ユニット（例えば、実行ユニット１４２６及び／又は１４３６）は、新たに作成された子プロセスに関連付けられる一意のエンクレーブ識別子（例えば１４５３）で第２のＳＥＣＳデータを初期化し、（例えば１４４２における）第１のＳＥＣＳデータへの第２のＳＥＣＳリンク１４４４を（例えば１４５２における）第２のＳＥＣＳデータに記録することができる。いくつかの実施形態では、リンク１４４４は、（例えば１４５２における）第２のＳＥＣＳデータへの双方向リンクであってもよく、（例えば１４４２における）第１のＳＥＣＳデータにも記録されてよい。
【０１４２】
図１４Ｂは、セキュアエンクレーブページキャッシュＥＰＣ１４６０にマルチプロセッシング能力を提供する処理システム１４０２の別の実施形態を示しており、そのマルチプロセッシング能力には、プロセスを分岐して、セキュアエンクレーブページキャッシュに子エンクレーブを確立する子エンクレーブコピー命令を用いることが含まれる。
【０１４３】
この第２の例では、論理プロセッサ１４２０及び１４３０の実施形態は、親プロセスに割り当てられるセキュアエンクレーブから、アプリケーションデータページ、アプリケーションコードページ、エンクレーブライブラリコードページなどを、子プロセスに割り当てられるセキュアエンクレーブにセキュアにコピーすることで、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する子エンクレーブコピー命令もサポートすることができる。論理プロセッサ１４２０及び１４３０の実施形態では、１つ又は複数の実行ユニット（例えば、実行ユニット１４２６及び／又は１４３６）は、デコードされた子エンクレーブコピー命令に応答して、第２のセキュアストレージ領域（例えば１４５２）の第２のＳＥＣＳデータに格納された、第１のセキュアストレージ領域（例えば１４４２）の第１のＳＥＣＳデータへのリンク（例えば１４４４）を識別し、リンクが識別された場合、ＥＰＣ１４６０の（例えば１４４６における）第１のセキュアストレージ領域のセキュアデータを、ＥＰＣ１４６０の（例えば１４５６における）第２のセキュアストレージ領域にコピーすることができる。いくつかの実施形態では、第２のセキュアストレージ領域の第２のＳＥＣＳデータに格納された、第１のＳＥＣＳデータへのリンクを識別することは、両方のＳＥＣＳが同じ暗号化キーに関連付けられていることを検証することも含むことができる。
【０１４４】
論理プロセッサ１４２０及び１４３０の実施形態では、１つ又は複数の実行ユニット（例えば、実行ユニット１４２６及び／又は１４３６）は、デコードされた子エンクレーブコピー命令に応答して、コピー終了フラグが設定されている場合、子エンクレーブコピー命令が実行完了に成功すると、第２のセキュアストレージ領域の第２のセキュア制御構造データから第１のセキュアストレージ領域の第１のセキュア制御構造データへのリンク（例えば１４４４）を除去することもできる。論理プロセッサ１４２０及び１４３０の実施形態では、ＥＰＣ１４６０の（例えば１４５６における）第２のセキュアストレージ領域は、第１のセキュア制御構造データへのリンク（例えば１４４４）が除去されるまで、アプリケーションからアクセスできなくてよい。
【０１４５】
論理プロセッサ１４２０及び１４３０のいくつかの代替の実施形態では、１つ又は複数の実行ユニット（例えば、実行ユニット１４２６及び／又は１４３６）は、デコードされた子エンクレーブコピー命令に応答して、第１のセキュアストレージ領域（例えば１４４２）の第１のセキュア制御構造（ＳＥＣＳ）を第２のセキュアストレージ領域（例えば１４５２）に最初にコピーし、新たに作成された子プロセスに関連付けられる一意のエンクレーブ識別子（例えば１４５３）で第２のＳＥＣＳデータを初期化し、また（例えば１４４２における）第１のＳＥＣＳデータへの第２のＳＥＣＳリンク１４４４を（例えば１４５２における）第２のＳＥＣＳデータに、及び／又は、（例えば１４５２における）第２のＳＥＣＳデータへの第２のＳＥＣＳリンク１４４４を（例えば１４４２における）第１のＳＥＣＳデータにも記録することができる。
【０１４６】
プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令を含むエンクレーブ命令を用いることによって、親プロセスが子プロセスを作成（すなわち分岐）して、子プロセスエンクレーブのコピーをセキュアエンクレーブページキャッシュ（例えば、ＥＰＣ１４６０）に確立できることが理解されよう。同じ（又は類似した）技術的効果を実現する任意のソフトウェアシステムのセキュリティ機能は（仮にも実現可能であれば）、非常に高価になる可能性があり、及び／又はより弱いセキュリティ対策を不都合にも受け入れることがあるという程度まで限定した性能になり得ることも理解されよう。
【０１４７】
図１５は、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立することを含むマルチプロセッシング能力を、セキュアエンクレーブページキャッシュに提供する命令を用いるためのプロセッサコア１５０１における装置の実施形態を示す。本装置は、セキュアエンクレーブ（ＳＥ）ユニット１５０２及びエンクレーブページキャッシュ（ＥＰＣ）１５２０を備える。いくつかの実施形態では、ＥＰＣ１５２０は、より大きいキャッシュユニット、例えば、レベル１キャッシュ（Ｌ１）１５４０又はレベル２キャッシュ（不図示）の一部であってよい。他の実施形態では、ＥＰＣ１５２０は、複数のハードウェアスレッド、論理プロセッサ、又は処理コアにより共有される別個の構造又は分散した構造であってよく、１つ又は複数のセキュアエンクレーブ（例えば、親エンクレーブ１５０４及び／又は子エンクレーブ１５０５）に割り当てられ、ハードウェアスレッド、論理プロセッサ、又は処理コア（例えば、プロセッサコア１５０１）がアクセス可能なページ（例えば、１５４２、１５４６、１５５２、及び１５５６）のアドレスのセキュアデータ、又はそのアドレスに関連付けられるセキュアデータを格納する。ＳＥユニット１５０２は、暗号化ユニット１５１０、完全性保護ユニット１５１２、アクセス制御ユニット１５１４、レンジレジスタ１５１６、及びエンクレーブページキャッシュマッピングＥＰＣＭ１５１８を含むことができる。ＳＥユニット１５０２は、エンクレーブ分岐命令１５０３も含むことができ、その命令には、ＥＣＨＩＬＤＣＲＥＡＴＥ命令１５３２、ＥＣＨＩＬＤＣＯＰＹ命令１５３４、ＥＣＨＩＬＤＣＯＰＹＲ命令１５３６、及び示されていない他のエンクレーブ命令（例えば、ＡＥＸ命令、ＥＬＯＡＤ命令、ＥＷＲＩＴＥＢＡＣＫ命令、ＥＥＸＩＴ命令、ＥＥＮＴＥＲ命令、ＥＲＥＳＵＭＥ命令など）が含まれる。
【０１４８】
プロセッサコア１５０１はＴＬＢ１５２５も備え、ここには、ＥＰＣ１５２０にアクセスするために変換がインストールされ得る。プロセッサコア１５０１は、デコードステージ１５２２、読み出しステージ１５２４、１つ又は複数の実行ユニット（例えば、実行ユニット１５２６）、及び書き込みステージ１５２８も備える。プロセッサコア１５０１の実施形態は、エンクレーブ分岐命令１５０３を実行するための他のパイプラインステージ（例えば、パイプライン４００に示されるもの）も備えてよく、プロセスを分岐してセキュアエンクレーブページキャッシュＥＰＣ１５２０に子エンクレーブを確立する命令を中断し、再開することを含むマルチプロセッシング能力を提供する。
【０１４９】
１つの実施形態では、ＥＣＨＩＬＤＣＲＥＡＴＥ命令１５３２が、デスティネーションページ１５５２のアドレスオペランドとしてＥＰＣ１５２０内の（第２の）セキュアストレージ領域を指定する（例えば、セキュアストレージ領域の実効アドレスが、ＲＣＸなどのレジスタ内の間接デスティネーションオペランドとして暗黙的又は明示的に指定されてよい）。デコードされたＥＣＨＩＬＤＣＲＥＡＴＥ命令１５３２に応答して、プロセッサコア１５０１の実施形態における１つ又は複数の実行ユニット（例えば、実行ユニット１５２６）は、第１のセキュアストレージ領域（例えば１５４２）の第１のセキュア制御構造（ＳＥＣＳ）を第２のセキュアストレージ領域（例えば１５５２）にコピーすることができる。
ＥＣＨＩＬＤＣＲＥＡＴＥ命令１５３２の実施形態は、第１のセキュアストレージ領域の実効アドレスを、レジスタ（例えば、ＲＢＸなど）内の間接ソースオペランドとして暗黙的又は明示的に指定することもできる。さらに、デコードされたＥＣＨＩＬＤＣＲＥＡＴＥ命令１５３２に応答して、１つ又は複数の実行ユニット（例えば、実行ユニット１５２６）は、新たに作成された子プロセスに関連付けられる一意のエンクレーブ識別子（例えば１５５３）で第２のＳＥＣＳデータを初期化し、（例えば、１５４２における）第１のＳＥＣＳデータへの第２のＳＥＣＳリンク１５４４を（例えば、１５５２における）第２のＳＥＣＳデータに記録することができる。いくつかの実施形態では、リンク１５４４は、（例えば１５５２における）第２のＳＥＣＳデータへの双方向リンクであってもよく、（例えば１５４２における）第１のＳＥＣＳデータにも記録されてよい。
【０１５０】
１つの実施形態では、親プロセスの対応するセキュアエンクレーブ１５０４に割り当てられる（例えば、１５４２及び／又は１５４６における）第１のセキュアストレージ領域は、（例えば、セキュアデータを暗号化する及び／又は解読するための）第１のキーに関連付けられ、子プロセスの対応する第２のセキュアエンクレーブ１５０５に割り当てられる（例えば、１５５２及び／又は１５５６における）第２のセキュアストレージ領域も同じ第１のキーに関連付けられる。いくつかのエンクレーブ分岐命令１５０３の実施形態は、両方のＳＥＣＳが同じ暗号化キーに関連付けられていることを検証することも備えることができる。プロセッサコア１５０１の実施形態は、親プロセスに割り当てられるセキュアエンクレーブ１５０４から、アプリケーションデータページ、アプリケーションコードページ、エンクレーブライブラリコードページなどを、子プロセスに割り当てられるセキュアエンクレーブ１５０５にセキュアにコピーすることで、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令を中断及び再開する、子エンクレーブコピー命令（例えば、ＥＣＨＩＬＤＣＯＰＹ命令１５３４及び／又はＥＣＨＩＬＤＣＯＰＹ再開命令１５３６）をサポートすることができる。
【０１５１】
１つの実施形態では、ＥＣＨＩＬＤＣＯＰＹ命令１５３４は、ＥＰＣ１５２０内の（第１の）セキュアストレージ領域を、ソースページ１５４６のアドレスオペランドとして指定する。プロセッサコア１５０１の実施形態では、１つ又は複数の実行ユニット（例えば、実行ユニット１５２６）は、デコードされたＥＣＨＩＬＤＣＯＰＹ命令１５３４（又はＥＣＨＩＬＤＣＯＰＹＲ命令１５３６）に応答して、第２のセキュアストレージ領域（例えば、子エンクレーブ１５０５の１５５２）の第２のＳＥＣＳデータに格納された、第１のセキュアストレージ領域（例えば、親エンクレーブ１５０４の１５４２）の第１のＳＥＣＳデータへのリンク（例えば１５４４）を識別し、リンクが識別された場合、ＥＰＣ１５６０の（例えば、親エンクレーブ１５０４の１５４６における）第１のセキュアストレージ領域のセキュアデータを、ＥＰＣ１５６０の（例えば、子エンクレーブ１５０５の１５５６における）第２のセキュアストレージ領域にコピーすることができる。いくつかの実施形態では、（例えば、子エンクレーブ１５０５の１５５６における）第２のセキュアストレージ領域の（例えば、１５５２における）第２のＳＥＣＳデータに格納された、（例えば、１５４２における）第１のＳＥＣＳデータへのリンク（例えば１５４４）を識別することは、両方のＳＥＣＳが同じ暗号化キーに関連付けられていることを検証することも含むことができる。
【０１５２】
プロセッサコア１５０１の実施形態において、１つ又は複数の実行ユニット（例えば、実行ユニット１５２６）は、デコードされたＥＣＨＩＬＤＣＯＰＹ命令１５３４（又はＥＣＨＩＬＤＣＯＰＹＲ命令１５３６）に応答して、コピー終了フラグが設定されている場合、ＥＣＨＩＬＤＣＯＰＹ命令１５３４（又はＥＣＨＩＬＤＣＯＰＹＲ命令１５３６）が実行完了に成功すると、第１のセキュアストレージ領域（例えば１５０４）の第１のＳＥＣＳデータへのリンク（例えば１５４４）を、第２のセキュアストレージ領域（例えば１５０５）のＳＥＣＳデータから除去することもできる。プロセッサコア１５０１の実施形態において、ＥＰＣ１５６０の（例えば、子エンクレーブ１５０５の１５５６における）第２のセキュアストレージ領域は、第１のＳＥＣＳデータへのリンク（例えば１５４４）が除去されるまで、アプリケーションからアクセスできなくてよい。
【０１５３】
プロセッサコア１５０１のいくつかの代替の実施形態において、１つ又は複数の実行ユニット（例えば、実行ユニット１５２６）は、デコードされたＥＣＨＩＬＤＣＯＰＹ命令１５３４に応答して、第１のセキュアストレージ領域（例えば、親エンクレーブ１５０４の１５４２）の第１のＳＥＣＳを第２のセキュアストレージ領域（例えば、子エンクレーブ１５０５の１５５２）に最初にコピーし、新たに作成された子プロセスに関連付けられる一意のエンクレーブ識別子（例えば１５５３）で第２のＳＥＣＳデータを初期化し、（例えば１５４２における）第１のＳＥＣＳデータへの第２のＳＥＣＳリンク１５４４を（例えば１５５２における）第２のＳＥＣＳデータに記録する、及び／又は、（例えば１５５２における）第２のＳＥＣＳデータへの第２のＳＥＣＳリンク１５４４を（例えば１５４２における）第１のＳＥＣＳデータにも記録することができる。
【０１５４】
パーミッションの管理、物理メモリ及び／又はマッピングの変更は、まだＯＳで管理されてよいが、セキュアエンクレーブ内と同じようにメモリコンテンツが保護されている場合、ＯＳは、プロセスを分岐してエンクレーブプライベートメモリにプロセスの子コピーを作成するために、エンクレーブプライベートメモリの実際の保護されたコンテンツにアクセスすることに、許可も信頼も与えられないことが理解されよう。ＯＳを信頼できなくても、プライベートメモリコンテンツのセキュリティ及び／又は完全性を保証し、プロセスを分岐してセキュアアプリケーションページの子コピーを確立することに関する技術的制約を管理することなどは、追加の精巧なハードウェアサポート及び／又は設計努力を必要とすることなく、セキュアエンクレーブプロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令及び処理ロジックを用いて実現され得る。
【０１５５】
図１６は、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立するプロセス１６０１の１つの実施形態に関するフロー図を示す。プロセス１６０１及び開示される本明細書の他のプロセスは、汎用の機械又は専用の機械又は両方の組み合わせによって実行可能な、専用のハードウェア又はソフトウェア又はファームウェアのオペレーションコードを備えることができる処理ブロックにより実行される。
【０１５６】
プロセス１６０１の処理ブロック１６１０では、親プロセス１６０４はシステムソフトウェアガードエクステンション（ＳＧＸ）ライブラリへの分岐コールを実行する。例えば、通常の分岐システムコールの代わりに、エンクレーブ１６０４からのＯｃａｌｌ（ＯＳコール）が特殊なライブラリ（例えば、ｌｉｂＳＧＸと呼ばれるＳＧＸ  ＬＩＢ１６４８）に対して行われてよい。結果として、処理ブロック１６２０において、ＥＣｈｉｌｄ作成コマンド又は命令（例えば、ＥＣＨＩＬＤＣＲＥＡＴＥ命令１５３２）が実行される。１つの実施形態では、ＥＣｈｉｌｄ作成コマンド又は命令が、デスティネーションページ１６５２のアドレスオペランドとしてＥＰＣ内のセキュアストレージ領域を指定する（例えば、セキュアストレージ領域の実効アドレスが、ＲＣＸなどのレジスタ内の間接デスティネーションオペランドとして暗黙的又は明示的に指定されてよい）。ＥＣｈｉｌｄ作成コマンド又は命令に応答して、処理ブロック１６３０では、１つ又は複数の実行ユニット（例えば、実行ユニット１４２６、１４３６、又は１５２６）は、親セキュアストレージ領域（例えば、エンクレーブ１６０４の１６４２）の第１のセキュア制御構造（ＳＥＣＳ）を子セキュアストレージ領域（例えば、エンクレーブ１６０５の１６５２）にコピーする。ＥＣｈｉｌｄ作成コマンド又は命令の実施形態は、親セキュアストレージ領域の実効アドレスを、レジスタ（例えば、ＲＢＸなど）内の間接ソースオペランドとして暗黙的又は明示的に指定することもできる。さらに、ＥＣｈｉｌｄ作成コマンド又は命令に応答して、１つ又は複数の実行ユニットは、処理ブロック１６４０において、新たに作成された子プロセスに関連付けられる一意のエンクレーブ識別子（例えば１６５３）で（例えば１６５２内の）第２のＳＥＣＳデータを初期化し、（例えば１６４２における）第１のＳＥＣＳデータへの第２のＳＥＣＳリンク１６４４を（例えば１６５２における）第２のＳＥＣＳデータに記録する。いくつかの実施形態では、リンク１６４４は、（例えば１６５２における）第２のＳＥＣＳデータへの双方向リンクであってもよく、（例えば１６４２における）第１のＳＥＣＳデータにも記録されてよい。
【０１５７】
１つの実施形態では、親プロセスの対応するセキュアエンクレーブ１６０４に割り当てられる（例えば、１６４２及び／又は１６４６における）第１のセキュアストレージ領域は（例えば、セキュアデータを暗号化する及び／又は解読するための）第１のキーに関連付けられ、子プロセスの対応する第２のセキュアエンクレーブ１６０５に割り当てられる（例えば、１６５２及び／又は１６５６における）第２のセキュアストレージ領域も同じ第１のキーに関連付けられる。いくつかのエンクレーブ分岐命令の実施形態は、両方のＳＥＣＳが同じ暗号化キーに関連付けられていることを直接的に又は間接的に検証することも備えることができる。
【０１５８】
処理ブロック１６５０では、１つ又は複数のＥＣｈｉｌｄコピーコマンド又は命令（例えば、ＥＣＨＩＬＤＣＯＰＹ命令１５３４）が実行される。１つの実施形態では、ＥＣｈｉｌｄコピーコマンド又は命令は、ＥＰＣ内のセキュアストレージ領域を、ソースページ（例えば、１６４６、１６４７、又は１６４８）のアドレスオペランドとして指定する。いくつかの実施形態では、１つ又は複数の実行ユニット（例えば、実行ユニット１４２６、１４３６、又は１５２６）は、ＥＣｈｉｌｄコピーコマンド又は命令に応答して、第２のセキュアストレージ領域（例えば、子エンクレーブ１６０５の１６５２）の第２のＳＥＣＳデータに格納された、第１のセキュアストレージ領域（例えば、親エンクレーブ１６０４の１６４２）の第１のＳＥＣＳデータへのリンク（例えば１６４４）を識別し、リンクが識別された場合、ＥＰＣの（例えば、親エンクレーブ１６０４の１６４６における）第１のセキュアストレージ領域のセキュアデータを、ＥＰＣの（例えば、子エンクレーブ１６０５の１６５６における）第２のセキュアストレージ領域にコピーすることができる。いくつかの実施形態では、（例えば、子エンクレーブ１６０５の１６５６における）第２のセキュアストレージ領域の（例えば、１６５２における）第２のＳＥＣＳデータに格納された、（例えば、１６４２における）第１のＳＥＣＳデータへのリンク（例えば１６４４）を識別することは、両方のＳＥＣＳが同じ暗号化キーに関連付けられていることを検証することも含むことができる。
【０１５９】
処理ブロック１６６０では、最後のＥＣｈｉｌｄコピーコマンド又は命令（例えば、ＥＣＨＩＬＤＣＯＰＹ命令１５３４又はＥＣＨＩＬＤＣＯＰＹＲ命令１５３６）が実行される。いくつかの実施形態では、１つ又は複数の実行ユニット（例えば、実行ユニット１４２６、１４３６、又は１５２６）は、最後のＥＣｈｉｌｄコピーコマンド又は命令に応答して、（例えば、コピー終了フラグが設定されている場合、）最後のＥＣｈｉｌｄコピーコマンド又は命令が完了に成功すると、第１のセキュアストレージ領域（例えば１５０４）の親ＳＥＣＳデータへのＥＣｈｉｌｄリンク（例えば１６４４）を、第２のセキュアストレージ領域（例えば１５０５）のＳＥＣＳデータから除去することもできる。いくつかの実施形態では、ＥＰＣの（例えば、子エンクレーブ１６０５の１６５６、１６５７、又は１６５８における）第２のセキュアストレージ領域は、親ＳＥＣＳデータへのＥＣｈｉｌｄリンク（例えば１６４４）が除去されるまで、アプリケーションからアクセスできなくてよい。
【０１６０】
いくつかの実施形態では、開示される本明細書の命令及びロジックは、セキュアエンクレーブ内の、ＥＣｈｉｌｄ作成コマンド又は命令（例えば、ＥＣＨＩＬＤＣＲＥＡＴＥ命令１５３２）など、プロセスを分岐するＳＥＣＳコピー操作において、またＥＣｈｉｌｄコピーコマンド又は命令（例えば、ＥＣＨＩＬＤＣＯＰＹ命令１５３４、又はＥＣＨＩＬＤＣＯＰＹＲ命令１５３６）などのページコピー操作において、割り込まれ、再開されることが可能である。したがって、プロセスを分岐してセキュアエンクレーブのページの子コピーを確立することに関するフォワードプログレスを保証することができ、音声、映像、リアルタイムのトランザクションなどのサービスにおける容認できないトラブルは、タイムリーなサービス保留割り込みにより回避され得る。プロセスを分岐してセキュアＥＰＣに子エンクレーブを確立するそのようなエンクレーブ命令を用いることで、親プロセスはセキュアに、子プロセスを作成（すなわち、分岐）してＥＰＣに子プロセスエンクレーブのコピーを確立できることが理解されよう。そのような命令に対するプロセッサのサポートを受けずに、同じ（又は類似した）技術的効果を実現する任意のソフトウェアシステムのセキュリティ機能は（仮にも実現可能であれば）、非常に高価になる可能性があり、及び／又は何らかのより弱いセキュリティ対策を不都合にも受け入れることがあるという程度まで限定した性能になり得ることも理解されよう。
【０１６１】
図１７Ａは、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する子エンクレーブ作成命令を用いるプロセス１７０１の１つの実施形態に関するフロー図を示す。処理ブロック１７１０では、子エンクレーブ作成命令がデコードされる。子エンクレーブ作成命令のいくつかの実施形態は、オペランドとして、第１のセキュア制御構造（ＳＥＣＳ）を格納する親プロセスの対応する第１のセキュアエンクレーブに割り当てられるエンクレーブページキャッシュ（ＥＰＣ）の第１のセキュアストレージ領域として、及び第２のＳＥＣＳを格納する子プロセスの対応する第２のセキュアエンクレーブに割り当てられるＥＰＣの第２のセキュアストレージ領域として、暗黙的又は明示的にパラメータを指定することができる。例えば、子エンクレーブ作成命令の実施形態は、第１のセキュアストレージ領域の実効アドレスを、ＲＢＸなどのレジスタ内の間接オペランドとして指定することができる。子エンクレーブ作成命令の実施形態は、第２のセキュアストレージ領域の実効アドレスを、ＲＣＸなどのレジスタ内の間接オペランドとして指定することができる。処理ブロック１７２０では、ＥＰＣの指定されたあらゆるパラメータが検証される。処理ブロック１７２５において、ＥＰＣの指定されたいずれかのパラメータが無効であると判定された場合、次に処理は処理ブロック１７９０に進み、ここで不成功エラーが返される。そうでなければ、処理は処理ブロック１７３０に進み、ここで、ＥＰＣがアクセスされ、第１のセキュアストレージ領域の第１のＳＥＣＳを子プロセスの第２のセキュアストレージ領域にコピーする。処理ブロック１７４０において、子の第２のＳＥＣＳは、子プロセスに関連付けられる一意のエンクレーブ識別子で初期化される。処理ブロック１７５０では、第１のソースＳＥＣＳと第２の子ＳＥＣＳとの間のリンケージが、（例えば、第２の子ＳＥＣＳ及び／又は第１のソースＳＥＣＳに）記録される。処理ブロック１７５５では、プロセスを分岐して子エンクレーブを確立する子エンクレーブ作成命令が実行に成功したかどうかについて判定が行われる。成功した場合、処理ブロック１７８０において、子エンクレーブ作成命令はリタイアされる。成功しなかった場合には、処理は処理ブロック１７９０に進み、不成功エラーが返される。
【０１６２】
プロセス１７０１及び開示される本明細書の他のプロセスの処理ブロックは、反復方式で実行されるものとして示されているが、好ましくは、代替の順序での実行、又は同時での実行、又は並列での実行が、可能ならいつでも実行され得ることが理解されよう。いくつかの実施形態では、親エンクレーブのページを子プロセスのエンクレーブにコピーする最後の子エンクレーブコピー命令を示すために、コピー終了フラグが設定されてもよい。コピー終了フラグが設定されている場合、親のＳＥＣＳ／エンクレーブＩＤへのリンクは、子エンクレーブコピー命令が完了に成功すると、子ＳＥＣＳから除去されてよい。いくつかの実施形態では、親のＳＥＣＳ／エンクレーブＩＤへのリンクが除去されるまで、アプリケーションは、子プロセスのエンクレーブからアクセス／実行されなくてよい。
【０１６３】
図１７Ｂは、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する子エンクレーブコピー命令を用いるプロセス１７０２の１つの実施形態に関するフロー図を示す。処理ブロック１７１２では、子エンクレーブコピー命令がデコードされる。子エンクレーブコピー命令のいくつかの実施形態は、オペランドとして、第１のＳＥＣＳを格納し且つページアドレスのセキュアデータを格納する親プロセスの対応する第１のセキュアエンクレーブに割り当てられるＥＰＣの第１のセキュアストレージ領域として、及び第２のＳＥＣＳを格納し且つページアドレスのセキュアデータのコピーを格納する子プロセスの対応する第２のセキュアエンクレーブに割り当てられるＥＰＣの第２のセキュアストレージ領域として、パラメータを暗黙的又は明示的に指定することができる。例えば、子エンクレーブコピー命令の実施形態は、第１のセキュアストレージ領域の実効アドレスを、ＲＢＸなどのレジスタ内の間接オペランドとして指定することができる。子エンクレーブコピー命令の実施形態は、第２のセキュアストレージ領域の実効アドレスを、ＲＣＸなどのレジスタ内の間接オペランドとして指定することができる。処理ブロック１７２２では、ＥＰＣの指定されたいずれかのパラメータが検証される。子エンクレーブコピー命令のいくつかの実施形態では、ＥＰＣの指定されたパラメータを検証することは、第２のＳＥＣＳに格納された第１のＳＥＣＳへのリンケージを識別することを含んでよい。処理ブロック１７２７において、ＥＰＣの指定されたいずれかのパラメータが無効であると判定された場合、次に処理は処理ブロック１７９０に進み、ここで不成功エラーが返される。そうでなければ、処理は処理ブロック１７３２に進み、ここで上記リンケージが識別された場合には、ＥＰＣの第１のセキュアストレージ領域のソースページアドレスのセキュアデータコンテンツは、ＥＰＣの第２のセキュアストレージ領域にコピーされる。処理ブロック１７４２では、ソースページアドレスのエンクレーブページキャッシュマッピング（ＥＰＣＭ）エントリが、子プロセスのＥＰＣＭエントリにコピーされる。処理ブロック１７５２では、子プロセスの新たなＥＰＣＭエントリは、子プロセスに関連付けられた一意のエンクレーブ識別子に更新される。
【０１６４】
処理ブロック１７５２では、コピー終了（ＥＯＣ）フラグが設定されているかどうかについて判定が行われる。例えば、子エンクレーブコピー命令の実施形態は、ＥＯＣフラグ（すなわち、最後の子エンクレーブコピー命令）を、ＲＤＸなどのレジスタ内のオペランドとして暗黙的又は明示的に指定することができる。処理ブロック１７５７において、ＥＯＣフラグが設定されていると判定された場合には、子エンクレーブコピー命令が実行完了に成功すると、処理ブロック１７６２において、第２のＳＥＣＳから第１のＳＥＣＳへのリンケージが除去され、処理ブロック１７７０において、子エンクレーブコピー命令はリタイアされる。反対に、処理ブロック１７５７において、ＥＯＣフラグが設定されていないと判定された場合には、処理は処理ブロック１７７０に直接進み、ここで、子エンクレーブコピー命令が実行完了に成功すると、子エンクレーブコピー命令はリタイアされる。
【０１６５】
いくつかの実施形態では、本明細書に開示される命令及びロジックは、プロセスを分岐するＳＥＣＳコピー及びセキュアエンクレーブ内のページコピー操作において、割り込まれ再開されることが可能である。したがって、プロセスを分岐してセキュアエンクレーブのページの子コピーを確立することに関するフォワードプログレスを保証することができ、音声、映像、リアルタイムのトランザクションなどのサービスにおける容認できないトラブルは、タイムリーなサービス保留割り込みにより回避され得る。プロセスを分岐してセキュアＥＰＣに子エンクレーブを確立するそのようなエンクレーブ命令を用いることで、親プロセスはセキュアに、子プロセスを作成（すなわち、分岐）してＥＰＣに子プロセスエンクレーブのコピーを確立できることが理解されよう。そのような命令に対するプロセッサのサポートを受けずに、同じ（又は類似した）技術的効果を実現する任意のソフトウェアシステムのセキュリティ機能は（仮にも実現可能であれば）、非常に高価になる可能性があり、及び／又は何らかのより弱いセキュリティ対策を不都合にも受け入れることがあるという程度まで限定した性能になり得ることも理解されよう。
【０１６６】
図１８Ａは、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する子エンクレーブ作成命令を用いる、割り込み可能プロセス１８０１の１つの実施形態に関するフロー図を示す。処理ブロック１８１０では、子エンクレーブ作成命令がデコードされる。子エンクレーブ作成命令のいくつかの実施形態は、オペランドとして、第１のセキュア制御構造（ＳＥＣＳ）を格納する親プロセスの対応する第１のセキュアエンクレーブに割り当てられるエンクレーブページキャッシュ（ＥＰＣ）の第１のセキュアストレージ領域として、及び第２のＳＥＣＳを格納する子プロセスの対応する第２のセキュアエンクレーブに割り当てられるＥＰＣの第２のセキュアストレージ領域として、暗黙的又は明示的にパラメータを指定することができ、その結果、ＥＰＣの指定されたいずれかのパラメータが検証され得る。例えば、子エンクレーブ作成命令の実施形態は、第１のセキュアストレージ領域の実効アドレスを、ＲＢＸなどのレジスタ内の間接オペランドとして指定することができる。子エンクレーブ作成命令の実施形態は、第２のセキュアストレージ領域の実効アドレスを、ＲＣＸなどのレジスタ内の間接オペランドとして指定することができる。処理ブロック１８３１では、ＥＰＣがアクセスされ、第１のセキュアストレージ領域の第１のＳＥＣＳを子プロセスの第２のＳＥＣＳにコピーするフォワードプログレスが行われる。
【０１６７】
処理ブロック１８３５では、第１のセキュアストレージ領域の第１のＳＥＣＳを子プロセスの第２のＳＥＣＳにコピーすることが終了したかどうかについての判定が行われる。終了した場合、処理は処理ブロック１８４０に進み、ここで、子の第２のＳＥＣＳは、子プロセスに関連付けられる一意のエンクレーブ識別子で初期化される。処理ブロック１８５０では、第１のソースＳＥＣＳと第２の子ＳＥＣＳとの間のリンケージが、（例えば、第２の子ＳＥＣＳ及び／又は第１のソースＳＥＣＳに）記録され、処理ブロック１８８０において、子エンクレーブ作成命令はリタイアされる。
【０１６８】
別の状況では、処理ブロック１８３５において、第１のセキュアストレージ領域の第１のＳＥＣＳを子プロセスの第２のＳＥＣＳにコピーすることが終了していない場合、処理ブロック１８２１において、子エンクレーブ作成命令が割り込まれようとしているかどうかについて判定が行われる。割り込まれない場合には、処理は処理ブロック１８３１を続けて開始してよい。反対に、子エンクレーブ作成命令が割り込まれようとしている場合には、保留中の割り込みが存在し、処理は処理ブロック１８２２に進み、ここで、第１のＳＥＣＳのコピー操作の状態がチェックされる（例えば、ページング操作の部分的完了が、エンクレーブページキャッシュマッピングエントリに記録されてよく、ページ状態情報の一部が、対応する子ページのキャッシュライン又は何らかの他のセキュアストレージなどに格納されてよい）。処理ブロック１８２３では、アドバイザリコードが返され得る（例えば、割り込みをサービスできることを示すなど）。処理ブロック１８２４では、割り込みがサービスされ、処理ブロック１８２５では、第１のセキュアストレージ領域の第１のＳＥＣＳからコピーされるべきページ上で、子エンクレーブ作成命令が再開される。次に処理は、処理ブロック１８３５において、第１のセキュアストレージ領域の第１のＳＥＣＳを子プロセスの第２のＳＥＣＳにコピーすることが終了するまで、処理ブロック１８３１の先頭から繰り返し、その後、処理は処理ブロック１８４０に進む。
【０１６９】
図１８Ｂは、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する子エンクレーブコピー命令を用いる、割り込み可能プロセス１８０２の１つの実施形態に関するフロー図を示す。処理ブロック１８１２では、子エンクレーブコピー命令がデコードされる。子エンクレーブコピー命令のいくつかの実施形態は、オペランドとして、第１のＳＥＣＳを格納し且つページアドレスのセキュアデータを格納する親プロセスの対応する第１のセキュアエンクレーブに割り当てられるＥＰＣの第１のセキュアストレージ領域として、及び第２のＳＥＣＳを格納し且つページアドレスのセキュアデータのコピーを格納する子プロセスの対応する第２のセキュアエンクレーブに割り当てられるＥＰＣの第２のセキュアストレージ領域として、パラメータを暗黙的又は明示的に指定することができ、その結果、ＥＰＣの指定されたいずれかのパラメータは、第２のＳＥＣＳに格納された第１のＳＥＣＳへのリンケージを識別することを含めて検証され得る。例えば、子エンクレーブコピー命令の実施形態は、第１のセキュアストレージ領域の実効アドレスを、ＲＢＸなどのレジスタ内の間接オペランドとして指定することができる。子エンクレーブコピー命令の実施形態は、第２のセキュアストレージ領域の実効アドレスを、ＲＣＸなどのレジスタ内の間接オペランドとして指定することができる。処理ブロック１８２０では、子プロセスのエンクレーブページキャッシュマッピング（ＥＰＣＭ）エントリが、子プロセスに関連付けられる一意のエンクレーブ識別子にチェック／設定される。処理ブロック１８３２では、上記リンケージが識別された場合、ＥＰＣがアクセスされ、ＥＰＣの第１のセキュアストレージ領域のソースページアドレスのセキュアデータコンテンツをＥＰＣの第２のセキュアストレージ領域にコピーするフォワードプログレスが行われる。
【０１７０】
処理ブロック１８３５では、第１のセキュアストレージ領域のソースページアドレスのセキュアデータコンテンツを子プロセスの第２のセキュアストレージ領域にコピーすることが終了したかどうかについての判定が行われる。終了した場合、処理は処理ブロック１８５７に進み、ここで、コピー終了（ＥＯＣ）フラグが設定されているかどうかについての判定が行われる。例えば、子エンクレーブコピー命令の実施形態は、ＥＯＣフラグ（すなわち、最後の子エンクレーブコピー命令）を、ＲＤＸなどのレジスタ内のオペランドとして暗黙的又は明示的に指定することができる。処理ブロック１８５７において、ＥＯＣフラグが設定されていると判定された場合には、子エンクレーブコピー命令が実行完了に成功すると、処理ブロック１８６２において、第２のＳＥＣＳから第１のＳＥＣＳへのリンケージが除去され、処理ブロック１８７０において、子エンクレーブコピー命令はリタイアされる。反対に、処理ブロック１８５７において、ＥＯＣフラグが設定されていないと判定された場合には、処理は処理ブロック１８７０に直接進み、ここで、子エンクレーブコピー命令が実行完了に成功すると、子エンクレーブコピー命令はリタイアされる。
【０１７１】
別の状況では、処理ブロック１８３５において、第１のセキュアストレージ領域のソースページアドレスのセキュアデータコンテンツを子プロセスの第２のセキュアストレージ領域にコピーすることが終了していない場合、処理ブロック１８２１において、子エンクレーブコピー命令が割り込まれようとしているかどうかについての判定が行われる。割り込まれない場合には、処理は処理ブロック１８２０を続けて開始してよい。反対に、子エンクレーブコピー命令が割り込まれようとしている場合には、保留中の割り込みが存在し、処理は処理ブロック１８２６に進み、ここで、コピー操作の部分的完了を示すためにＥＰＣＭが設定される。処理ブロック１８２７において、ページ状態情報の一部が（例えば、対応する子ページの最後のキャッシュライン又は、何らかの他のセキュアストレージなどに）格納される。処理ブロック１８２８では、割り込みがサービスされ、処理ブロック１８２９では、子エンクレーブコピー命令が、第１のセキュアストレージ領域のソースページアドレスから子プロセスの第２のセキュアストレージ領域にコピーされるべきページ上で再開される。次に処理は、処理ブロック１８３５において、第１のセキュアストレージ領域のソースページアドレスを子プロセスの第２のセキュアストレージ領域にコピーすることが終了するまで、処理ブロック１８２０の先頭から繰り返し、その後、処理は処理ブロック１８５７に進む。
【０１７２】
したがって、パーミッションの管理、物理メモリ及び／又はマッピングの変更は、まだＯＳで管理されてよいが、セキュアエンクレーブ内と同じようにメモリコンテンツが保護されている場合、ＯＳは、エンクレーブプライベートメモリの実際の保護されたコンテンツにアクセスすることに、許可も信頼も与えられていない。ＯＳを信頼できなくても、プライベートメモリコンテンツのセキュリティ及び／又は完全性を保証し、プロセスを分岐してページの子コピーを確立することに関する技術的制約を管理することは、精巧なハードウェアサポート及び／又は設計努力を必要とすることなく、プロセスを分岐してセキュアエンクレーブページキャッシュに子エンクレーブを確立する命令及び処理ロジックを用いて実現され得る。
【０１７３】
特定の順序で実行されるように示される処理ブロックは、プロセス１８０２及び開示される本明細書の他のプロセスに関するいくつかの代替の実施形態において、可能であれば、別の順序で、又は同時に、又は互いに並列に実行されてもよいことが理解されよう。
【０１７４】
本明細書に開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はそのような実装手法の組み合わせで実装されてよい。本発明の実施形態は、少なくとも１つのプロセッサ、ストレージシステム（揮発性メモリ及び不揮発性メモリ及び／又はストレージエレメントを含む）、少なくとも１つの入力デバイス、及び少なくとも１つの出力デバイスを備えるプログラマブルシステム上で実行されるコンピュータプログラム又はプログラムコードとして実装されてよい。
【０１７５】
プログラムコードは、本明細書に説明される機能を実行して出力情報を生成する入力命令に適用されてよい。出力情報は、１つ又は複数の出力デバイスに、既知の方式で適用されてよい。この応用の目的のために、処理システムには、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、又はマイクロプロセッサなどのプロセッサを有するあらゆるシステムが含まれる。
【０１７６】
プログラムコードは、処理システムと通信するために、高水準の手続き型プログラミング言語、又はオブジェクト指向プログラミング言語で実装されてよい。プログラムコードは、必要に応じて、アセンブリ言語又は機械語で実施されてもよい。実際に、本明細書に説明されるメカニズムは、いかなる特定のプログラミング言語にも範囲を限定されてはいない。いかなる場合にも、言語は、コンパイラ型言語又はインタープリタ型言語であってよい。
【０１７７】
少なくとも１つの実施形態の１つ又は複数の態様が、プロセッサ内の様々なロジックを表す機械可読媒体に格納された典型的な命令によって実装されてよく、その命令は機械により読み出されると、本明細書で説明される技術を実行するロジックを機械に作らせる。「ＩＰコア」として知られるそのような表現は、有形の機械可読媒体に格納され、実際にロジック又はプロセッサを作る製造機械にロードするために、様々な顧客又は製造施設に供給されてよい。
【０１７８】
そのような機械可読記憶媒体には、機械又は装置により製造又は形成される非一時的な有形の構成の物品が含まれてよく、そのような物品には、ハードディスクや、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ−ＲＯＭ）、コンパクトディスクリライタブル（ＣＤ−ＲＷ）、及び光磁気ディスクを含むその他のタイプのディスク、リードオンリメモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）やスタティックランダムアクセスメモリ（ＳＲＡＭ）などのランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）などの半導体デバイス、磁気カード又は光カード、あるいは電子命令を格納するのに適したその他のタイプの媒体などの記憶媒体が、限定されることなく含まれる。
【０１７９】
したがって、本発明の実施形態には、命令を含む又はハードウェア記述言語（ＨＤＬ）などの設計データを含む非一時な有形の機械可読媒体も含まれ、ＨＤＬは、本明細書で説明される構造、回路、装置、プロセッサ、及び／又はシステム機能を定義する。そのような実施形態は、プログラム製品とも呼ばれる場合がある。
【０１８０】
いくつかの場合では、命令をソース命令セットからターゲット命令セットに変換するのに、命令変換器が用いられてよい。例えば、命令変換器は、命令をコアにより処理される１つ又は複数の他の命令に、変換（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いる）、変形、エミュレート、又は別の方法で変換することができる。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせで実装されてよい。命令変換器は、プロセッサに搭載されても、プロセッサの外部にあっても、又は一部がプロセッサに搭載され一部がプロセッサの外部にあってもよい。
【０１８１】
こうして、少なくとも１つの実施形態による１つ又は複数の命令を実行する技術が開示される。特定の例示的な実施形態が説明され、添付図面に示されたが、そのような実施形態は、広範な発明の単に例示であって広範な発明に限定を加えるものではないこと、本開示を検討すると、当業者には様々な他の変更が見出され得るので、示され説明された特定の解釈及び構成に本発明は限定されないことを理解されたい。このような、成長が速く、さらなる進歩が容易に予見できない技術領域では、開示された実施形態は、技術的進歩を可能にすることで容易になるような構成及び詳細において、本開示の原理又は添付の特許請求の範囲から逸脱することなく、容易に変更可能であり得る。
本開示は、以下の各項目に示す発明もまた開示する。
［項目１］
プロセッサであって、
第１のセキュア制御構造データを、親プロセスの対応する第１のセキュアエンクレーブに割り当てられる第１のセキュアストレージ領域に格納し、第２のセキュア制御構造データを、子プロセスの対応する第２のセキュアエンクレーブに割り当てられる第２のセキュアストレージ領域に格納するエンクレーブページキャッシュと、
前記プロセッサによる実行のために第１の命令をデコードするデコードステージであって、前記第１の命令は前記第２のセキュアストレージ領域をオペランドとして指定する、デコードステージと、
デコードされた前記第１の命令に応答して、
前記第１のセキュアストレージ領域の前記第１のセキュア制御構造データを前記第２のセキュアストレージ領域にコピーし、
前記子プロセスに関連付けられる一意のエンクレーブ識別子で前記第２のセキュア制御構造データを初期化し、
前記第１のセキュア制御構造データへの第２のセキュア制御構造リンクを前記第２のセキュア制御構造データに記録する、１つ又は複数の実行ユニットと
を備える
プロセッサ。
［項目２］
前記親プロセスの前記対応する第１のセキュアエンクレーブに割り当てられる前記第１のセキュアストレージ領域は第１のキーに関連付けられ、前記子プロセスの前記対応する第２のセキュアエンクレーブに割り当てられる前記第２のセキュアストレージ領域も前記第１のキーに関連付けられる、
項目１に記載のプロセッサ。
［項目３］
前記子プロセスの前記対応する第２のセキュアエンクレーブに割り当てられる前記第２のセキュアストレージ領域内の前記第２のセキュア制御構造データは、前記第１のセキュア制御構造データへの前記第２のセキュア制御構造リンクが前記第２のセキュア制御構造データから除去されない限り、アプリケーションが用いることができない、
項目１又は２に記載のプロセッサ。
［項目４］
前記第２のセキュア制御構造データに記録された前記第２のセキュア制御構造リンクは、前記第１のセキュア制御構造データに関する第１のセキュア制御構造の一意のエンクレーブ識別子を含む、
項目１から３のいずれか一項に記載のプロセッサ。
［項目５］
前記第２のセキュア制御構造データに記録された前記第２のセキュア制御構造リンクは、前記第１のセキュアストレージ領域内の前記第１のセキュア制御構造データの実効アドレスを含む、
項目１から３のいずれか一項に記載のプロセッサ。
［項目６］
前記１つ又は複数の実行ユニットはさらに、デコードされた前記第１の命令に応答して、前記第１のセキュアストレージ領域のアプリケーションデータ及びアプリケーションコードを前記第２のセキュアストレージ領域にコピーする、
項目１から５のいずれか一項に記載のプロセッサ。
［項目７］
前記１つ又は複数の実行ユニットはさらに、デコードされた前記第１の命令に応答して、前記第２のセキュアエンクレーブに対応する前記子プロセスを、前記第１のセキュアエンクレーブに対応する前記親プロセスの子として作成する、
項目１から５のいずれか一項に記載のプロセッサ。
［項目８］
前記第１の命令は、前記第２のセキュアストレージ領域の実効アドレスを、レジスタ内、つまりＲＣＸ内の間接デスティネーションオペランドとして指定する、
項目１から７のいずれか一項に記載のプロセッサ。
［項目９］
前記第１の命令は、前記第１のセキュアストレージ領域の実効アドレスを、レジスタ内、つまりＲＢＸ内の間接ソースオペランドとして指定する、
項目１から７のいずれか一項に記載のプロセッサ。
［項目１０］
プロセッサによる実行のために第１の命令をデコードする段階であって、前記第１の命令は、第１のセキュア制御構造を格納するために親プロセスの対応する第１のセキュアエンクレーブに割り当てられるエンクレーブページキャッシュ内の第１のセキュアストレージ領域、及び、第２のセキュア制御構造を格納するために子プロセスの対応する第２のセキュアエンクレーブに割り当てられる前記エンクレーブページキャッシュ内の第２のセキュアストレージ領域のうち少なくとも１つを、１つ又は複数のオペランドとして指定する、デコードする段階と、
前記第１のセキュアストレージ領域の前記第１のセキュア制御構造を前記第２のセキュアストレージ領域にコピーするために、前記エンクレーブページキャッシュにアクセスする段階と、
前記子プロセスに関連付けられる一意のエンクレーブ識別子で前記第２のセキュア制御構造を初期化する段階と、
前記第１のセキュア制御構造へのリンクを前記第２のセキュア制御構造に記録する段階と
を備える
方法。
［項目１１］
前記第１の命令は、前記第２のセキュアストレージ領域の実効アドレスを、レジスタ内、つまりＲＣＸ内の間接オペランドとして指定する、
項目１０に記載の方法。
［項目１２］
前記第１の命令は、前記第１のセキュアストレージ領域の実効アドレスを、レジスタ内、つまりＲＢＸ内の間接オペランドとして指定する、
項目１０に記載の方法。
［項目１３］
前記親プロセスの前記対応する第１のセキュアエンクレーブに割り当てられる前記第１のセキュアストレージ領域は第１のキーに関連付けられ、前記子プロセスの前記対応する第２のセキュアエンクレーブに割り当てられる前記第２のセキュアストレージ領域も前記第１のキーに関連付けられる、
項目１０から１２のいずれか一項に記載の方法。
［項目１４］
前記子プロセスの前記対応する第２のセキュアエンクレーブに割り当てられる前記第２のセキュアストレージ領域内の前記第２のセキュア制御構造は、前記第１のセキュア制御構造への前記リンクが前記第２のセキュア制御構造から除去されない限り、アプリケーションが用いることができない、
項目１０から１３のいずれか一項に記載の方法。
［項目１５］
コピー終了フラグが設定されている場合、前記第１の命令が実行完了に成功すると、前記第１のセキュア制御構造への前記リンクを前記第２のセキュア制御構造から除去する段階をさらに備える、
項目１０から１４のいずれか一項に記載の方法。
［項目１６］
前記第１の命令は、コピー終了フラグをレジスタ内の、つまりＲＤＸ内のオペランドとして指定する、
項目１０から１５のいずれか一項に記載の方法。
［項目１７］
前記親プロセスの前記第１のセキュアエンクレーブ用のエンクレーブページキャッシュマップを、前記子プロセスの前記第２のセキュアエンクレーブ用の前記エンクレーブページキャッシュマップにコピーする段階をさらに備える、
項目１０から１６のいずれか一項に記載の方法。
［項目１８］
前記子プロセスに関連付けられる更新したエンクレーブ識別子を用いて、前記第２のセキュア制御構造を更新する段階をさらに備える、
項目１０から１７のいずれか一項に記載の方法。
［項目１９］
プロセッサに、
前記プロセッサによる実行のために第１の命令をデコードする手順であって、前記第１の命令は、ページアドレス用の第１のセキュア制御構造及びセキュアデータを格納するために親プロセスの対応する第１のセキュアエンクレーブに割り当てられるエンクレーブページキャッシュ内の第１のセキュアストレージ領域、及び、前記ページアドレス用の第２のセキュア制御構造及び前記セキュアデータのコピーを格納するために子プロセスの対応する第２のセキュアエンクレーブに割り当てられる前記エンクレーブページキャッシュ内の第２のセキュアストレージ領域のうち少なくとも１つを、１つ又は複数のオペランドとして指定する、手順と
前記第２のセキュア制御構造に格納された前記第１のセキュア制御構造へのリンクを識別するために、前記エンクレーブページキャッシュにアクセスする手順と、
前記エンクレーブページキャッシュ内の前記第１のセキュアストレージ領域の前記セキュアデータを、前記エンクレーブページキャッシュ内の前記第２のセキュアストレージ領域にコピーする手順と
を実行させる、
プログラム。
［項目２０］
前記第１の命令は、前記第２のセキュアストレージ領域の実効アドレスを、レジスタ内、つまりＲＣＸ内の間接オペランドとして指定する、
項目１９に記載のプログラム。
［項目２１］
前記第１の命令は、前記第１のセキュアストレージ領域の実効アドレスを、レジスタ内、つまりＲＢＸ内の間接オペランドとして指定する、
項目１９又は２０に記載のプログラム。
［項目２２］
前記親プロセスの前記対応する第１のセキュアエンクレーブに割り当てられる前記第１のセキュアストレージ領域は第１のキーに関連付けられ、前記子プロセスの前記対応する第２のセキュアエンクレーブに割り当てられる前記第２のセキュアストレージ領域も前記第１のキーに関連付けられる、
項目１９から２１のいずれか一項に記載のプログラム。
［項目２３］
前記子プロセスの前記対応する第２のセキュアエンクレーブに割り当てられる前記第２のセキュアストレージ領域内の前記第２のセキュア制御構造は、前記第１のセキュア制御構造への前記リンクが前記第２のセキュア制御構造から除去されない限り、アプリケーションが用いることができない、
項目１９から２２のいずれか一項に記載のプログラム。
［項目２４］
コピー終了フラグが設定されている場合、前記第１の命令が実行完了に成功すると、前記プロセッサにさらに、前記第１のセキュア制御構造への前記リンクを前記第２のセキュア制御構造から除去させる、
項目１９から２３のいずれか一項に記載のプログラム。
［項目２５］
前記プロセッサにさらに、前記親プロセスの前記第１のセキュアエンクレーブのエンクレーブページキャッシュマップを、前記子プロセスの前記第２のセキュアエンクレーブの前記エンクレーブページキャッシュマップにコピーさせる、
項目１９から２４のいずれか一項に記載のプログラム。
［項目２６］
項目１９から２５のいずれか一項に記載のプログラムを格納する、
コンピュータ可読記憶媒体。
【図１Ａ】
0006702590.tif 000003
【図１Ｂ】
0006702590.tif 000004
【図１Ｃ】
0006702590.tif 000005
【図２】
0006702590.tif 000006
【図３Ａ】
0006702590.tif 000007
【図３Ｂ】
0006702590.tif 000008
【図３Ｃ】
0006702590.tif 000009
【図３Ｄ】
0006702590.tif 000010
【図３Ｅ】
0006702590.tif 000011
【図３Ｆ】
0006702590.tif 000012
【図３Ｇ】
0006702590.tif 000013
【図３Ｈ】
0006702590.tif 000014
【図３Ｊ】
0006702590.tif 000015
【図４Ａ】
0006702590.tif 000016
【図４Ｂ】
0006702590.tif 000017
【図５】
0006702590.tif 000018
【図６】
0006702590.tif 000019
【図７】
0006702590.tif 000020
【図８】
0006702590.tif 000021
【図９】
0006702590.tif 000022
【図１０】
0006702590.tif 000023
【図１１】
0006702590.tif 000024
【図１２】
0006702590.tif 000025
【図１３】
0006702590.tif 000026
【図１４Ａ】
0006702590.tif 000027
【図１４Ｂ】
0006702590.tif 000028
【図１５】
0006702590.tif 000029
【図１６】
0006702590.tif 000030
【図１７Ａ】
0006702590.tif 000031
【図１７Ｂ】
0006702590.tif 000032
【図１８Ａ】
0006702590.tif 000033
【図１８Ｂ】
0006702590.tif 000034