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