JP6344614B2 - セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するための命令および論理 - Google Patents

セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するための命令および論理 Download PDF

Info

Publication number
JP6344614B2
JP6344614B2 JP2015170962A JP2015170962A JP6344614B2 JP 6344614 B2 JP6344614 B2 JP 6344614B2 JP 2015170962 A JP2015170962 A JP 2015170962A JP 2015170962 A JP2015170962 A JP 2015170962A JP 6344614 B2 JP6344614 B2 JP 6344614B2
Authority
JP
Japan
Prior art keywords
instruction
processor
cache
protected data
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2015170962A
Other languages
English (en)
Other versions
JP2016006681A (ja
Inventor
ヴィ. ロザス、カルロス
ヴィ. ロザス、カルロス
アレクサンドロヴィッチ、イリヤ
アナティ、イッタイ
ベレンゾン、アレックス
エー. ゴールドスミス、マイケル
エー. ゴールドスミス、マイケル
イー. ハントリー、バリー
イー. ハントリー、バリー
イヴァノフ、アントン
ピー. ジョンソン、サイモン
ピー. ジョンソン、サイモン
エム. レスリー−ハード、リベカ
エム. レスリー−ハード、リベカ
エックス. マッキーン、フランシス
エックス. マッキーン、フランシス
ネイガー、ギルバート
ラポポルト、リナト
ダイオン ロジャース、スコット
ダイオン ロジャース、スコット
アール. サバガオンカ、ウデイ
アール. サバガオンカ、ウデイ
アール. スカーラタ、ヴィンセント
アール. スカーラタ、ヴィンセント
シャンボーグ、ヴェドヤス
エイチ. スミス、ウェスレー
エイチ. スミス、ウェスレー
コリン ウッド、ウィリアム
コリン ウッド、ウィリアム
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of JP2016006681A publication Critical patent/JP2016006681A/ja
Application granted granted Critical
Publication of JP6344614B2 publication Critical patent/JP6344614B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1458Protection against unauthorised use of memory or access to memory by checking the subject access rights
    • G06F12/1466Key-lock mechanism
    • G06F12/1475Key-lock mechanism in a virtual system, e.g. with translation means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0808Multiuser, multiprocessor or multiprocessing cache systems with cache invalidating means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/40Specific encoding of data in memory or cache
    • G06F2212/402Encrypted data

Description

本開示は、処理論理、マイクロプロセッサ、および関連する命令セットアーキテクチャであって、プロセッサまたはその他の処理論理によって実行されるときに論理的、数学的、またはその他の機能的動作を行う命令セットアーキテクチャの分野に関する。特に、本開示はセキュア(secure)エンクレーブページキャッシュのための進歩したページング能力を提供するための命令および論理に関する。
たとえば音声、ビデオ、トランザクション、およびプライベートデータなどの新たな使用モデルおよびサービスを支援するためのアプリケーションおよび高性能ネットワークは、セキュリティの領域の新たな課題を示す。保存中または輸送中のデータを機密性および保全性のために保護する必要があることは重要であるが、保護されたコードおよび/またはデータへのセキュアなアクセスを維持するために必要とされる高速暗号化動作および記憶装置を支援することは複雑性を増し、結局は費用を増すこととなる。
セキュアな、保護された、または分離された区画または環境を生成および維持するための技術の1つは、エンクレーブを確立することとして公知である。エンクレーブとは、グループとして保護される情報および処理能力の組である。情報および処理能力とは、ネットワーク、ホストまたはアプリケーションを含んでもよい。
データおよび/または命令にアクセスするために一般的に用いられる処理技術は、たとえば変換ルックアサイドバッファ(translation look−aside buffer:TLB)を用いて、ページテーブルに見出されるマッピングに従って線形アドレスから物理メモリアドレスへのハードウェアにおける変換を迅速に行うことなどによって、仮想メモリを支援するキャッシュを通じたものである。TLB内のエントリは、1つまたは複数の特定のプロセッサコア、ハードウェアスレッド、または論理プロセッサに関連付けられてもよい。よって、キャッシュにおいてアクセスされ得るデータは、無許可のプロセッサコア、ハードウェアスレッドまたは論理プロセッサによるアクセスから保護されてもよい。
許可の管理、物理メモリおよび/またはページテーブルにおけるマッピングの変更は、典型的にオペレーティングシステム(operating system:OS)によって管理されるが、たとえばエンクレーブなどと同様にメモリコンテンツが保護されるとき、OSは実際の保護コンテンツにアクセスするための許可または信頼が得られないことがあり、すなわちエンクレーブはプライベートメモリを有する。
したがって、プライベートメモリコンテンツのセキュリティおよび/または保全性を保証すること、ならびにOSを信頼できないときに制限された量の物理メモリという技術的制約を管理することは、一組の一意のセキュリティおよび性能の課題を示している。
現在まで、これらの課題に対処するセキュリティの解決策、ならびにこうした性能を制限する問題ならびに設計、検証およびその他の複雑性に対する潜在的解決策が適切に探索されていない。
セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するための命令を実行するシステムの一実施形態を示すブロック図である。 セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するための命令を実行するシステムの別の実施形態を示すブロック図である。 セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するための命令を実行するシステムの別の実施形態を示すブロック図である。 セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するための命令を実行するプロセッサの一実施形態を示すブロック図である。 一実施形態に従うパックデータタイプを示す図である。 一実施形態に従うパックデータタイプを示す図である。 一実施形態に従うパックデータタイプを示す図である。 一実施形態に従うセキュアエンクレーブページキャッシュのための進歩したページング能力を提供するための命令コード化を示す図である。 別の実施形態に従うセキュアエンクレーブページキャッシュのための進歩したページング能力を提供するための命令コード化を示す図である。 別の実施形態に従うセキュアエンクレーブページキャッシュのための進歩したページング能力を提供するための命令コード化を示す図である。 別の実施形態に従うセキュアエンクレーブページキャッシュのための進歩したページング能力を提供するための命令コード化を示す図である。 別の実施形態に従うセキュアエンクレーブページキャッシュのための進歩したページング能力を提供するための命令コード化を示す図である。 セキュアエンクレーブページキャッシュのための進歩したページング能力を提供する命令を実行するためのプロセッサマイクロアーキテクチャの一実施形態の構成要素を示す図である。 セキュアエンクレーブページキャッシュのための進歩したページング能力を提供する命令を実行するためのプロセッサマイクロアーキテクチャの別の実施形態の構成要素を示す図である。 セキュアエンクレーブページキャッシュのための進歩したページング能力を提供する命令を実行するためのプロセッサの一実施形態を示すブロック図である。 セキュアエンクレーブページキャッシュのための進歩したページング能力を提供する命令を実行するためのコンピュータシステムの一実施形態を示すブロック図である。 セキュアエンクレーブページキャッシュのための進歩したページング能力を提供する命令を実行するためのコンピュータシステムの別の実施形態を示すブロック図である。 セキュアエンクレーブページキャッシュのための進歩したページング能力を提供する命令を実行するためのコンピュータシステムの別の実施形態を示すブロック図である。 セキュアエンクレーブページキャッシュのための進歩したページング能力を提供する命令を実行するためのシステムオンチップの一実施形態を示すブロック図である。 セキュアエンクレーブページキャッシュのための進歩したページング能力を提供する命令を実行するためのプロセッサの実施形態を示すブロック図である。 セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するIPコア開発システムの一実施形態を示すブロック図である。 セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するアーキテクチャエミュレーションシステムの一実施形態を示す図である。 セキュアエンクレーブページキャッシュのための進歩したページング能力を提供する命令を変換するためのシステムの一実施形態を示す図である。 セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するために命令を使用するための処理システムの一実施形態を示す図である。 セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するために命令を使用するためのプロセッサ内の装置の実施形態を示す図である。 セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するためのプロセスの一実施形態に対する流れ図である。 セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するためのプロセスの代替的実施形態に対する流れ図である。 セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するためのプロセスの別の実施形態に対する流れ図である。 セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するためのプロセスの別の実施形態に対する流れ図である。
添付の図面の図において、本発明は限定ではなく例として示される。
以下の説明は、プロセッサ、コンピュータシステム、またはその他の処理装置の中にあるか、またはそれに関連する、セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するための命令および処理論理を開示するものである。
たとえばエンクレーブに関連するデータなど、プライベートデータまたは保護データのみを保持する特殊なキャッシュまたはキャッシュの部分において、そのプライベートデータまたは保護データが解読されたときに、そのデータへのアクセスは認可されたプロセッサコア、ハードウェアスレッド、または論理プロセッサのみに制限されてもよい。こうしたエンクレーブプライベートメモリは、エンクレーブページキャッシュ(enclave page cache:EPC)メモリと呼ばれてもよい。
他の物理メモリと同様に、EPCは必要に応じてデータおよび/またはコードをページインおよびページアウトすることによって、より大きなプライベートアドレス空間または保護アドレス空間を支援するようにできる。ページのマッピングの変更は典型的にOSによって管理されるが、エンクレーブにおいてOSは必ずしもエンクレーブプライベートメモリのコンテンツへのアクセスを有さない。
TLB内のエントリは、1つまたは複数の特定のプロセッサコア、ハードウェアスレッドまたは論理プロセッサに関連付けられており、それはページがメモリまたは不揮発性記憶装置にページアウトされているときにページを修正することが許可されるべきではない。したがって、エンクレーブに対するページのマッピングの変更、たとえばエンクレーブに対するページの退去または新たなページのロードなどを行うためには、EPCメモリコンテンツが暗号化されて書戻されたり、メモリから新たなページがロードされて解読されたり、TLBエントリがフラッシュされて置換されたりなどする間に、システムが、エンクレーブリソースにアクセスしている1つまたは複数のプロセッサコア、ハードウェアスレッドまたは論理プロセッサを一時的に非活動もしくは抑止状態にするか、または別様にエンクレーブ内の任意のアプリケーションの実行を止めることによって、それらを「休止する(quiesce)」ことが必要とされてもよい。ハードウェア保護機構は、プライベートメモリコンテンツのセキュリティおよび/または保全性を保証するためにEPC内のページを保護するため、およびOSを信頼できないときに制限された量の物理プライベートメモリの管理を助けるために用いられる必要があり得る。
セキュアエンクレーブを伴うアプローチの一例は、2012年6月19日に提出された同時係属の「セキュアなアプリケーション実行を提供するための方法および装置(Method and Apparatus to Provide Secure Application Execution)」と題する米国特許出願連続番号第13/527,547号に記載されている。
EPCメモリのページが退去されるときはいつも、そのEPCメモリを用いるすべてのプロセッサコアもしくは論理プロセッサの信号伝達を必然的に伴うか、および/または、ページコンテンツの置換、TLBの単数もしくは複数のエントリのフラッシュなどを行うためにすべてのプロセッサコアもしくは論理プロセッサがエンクレーブを出ることを要求し得る。さらに、エンクレーブのプライバシーを保護するためにこうした要求が満たされることをハードウェアにおいて保証することは、かなりの設計および検証の複雑性を伴い得る。
たとえばEPCメモリコンテンツが暗号化されて書戻され、メモリから新たなページがロードされて解読され、TLBエントリがフラッシュされて置換されるなどのページングプロセスが複数の段階に分割可能であって、ここで1つまたは複数の段階の間にプロセッサコアまたは論理プロセッサが短時間しか中断されないとき、ページングプロセスによる性能の低下は低減され得ることが認識されるだろう。
本明細書においては、セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するための命令および論理が開示される。いくつかの実施形態は、複数のハードウェアスレッド、論理プロセッサまたは処理コアと、そのハードウェアスレッド、論理プロセッサまたは処理コアによってアクセス可能な、セキュアエンクレーブに割り当てられた共有ページアドレスに対するセキュアデータを保存するためのキャッシュとを含む。復号段階は第1の命令(例、以下により詳細に考察されるEBLOCK命令)を復号し、この第1の命令は共有ページアドレスをオペランドとして指定する。1つまたは複数の実行ユニットは、共有ページアドレスに対するエンクレーブページキャッシュマッピングに対応するエントリをマーク付けして、前記複数のハードウェアスレッド、論理プロセッサまたは処理コアのいずれかが共有ページにアクセスするための新たなTLB変換の生成をブロックする。第2の命令(例、同じく以下により詳細に考察されるETRACK命令)が実行のために復号され、この第2の命令は前記セキュアエンクレーブをオペランドとして指定し、1つまたは複数の実行ユニットは、セキュアエンクレーブに対応するエンクレーブページキャッシュ内のセキュアデータに現在アクセス中のハードウェアスレッドを記録する。ハードウェアスレッドのいずれかがセキュアエンクレーブから出るとき、記録されたハードウェアスレッドの数は減らされる。
次いでOSは、セキュアエンクレーブに対応するエンクレーブページキャッシュ内のセキュアデータに現在アクセス中の任意のハードウェアスレッド、論理プロセッサまたは処理コアにプロセッサ間割り込み(inter−processor interrupt:IPI)を送ってもよい。ハードウェアスレッド、論理プロセッサまたは処理コアがIPIを承認してセキュアエンクレーブから出るとき、それらの単数または複数のTLBエントリはフラッシュされ、記録されたハードウェアスレッドの数は減らされる。記録されたハードウェアスレッドの数が0に達するとき、単数または複数のページを退去させ、暗号化し、それらをメモリまたは不揮発性記憶装置に書戻すことがOSにとって安全である。OSは第3の命令(例、同じく以下により詳細に考察されるEWB命令)を用いて退去および書戻しを完了させてもよい。セキュアデータのエンクレーブ保護はOSを信頼できないことがあるため、記録されたハードウェアスレッドの数が0に達しないときに、第3の命令の一実施形態は失敗してもよい。代替的実施形態において、第3の命令は記録されたハードウェアスレッドの数が0に達するまで実行を待ってもよい。
許可の管理、物理メモリおよび/またはマッピングの変更はなおもOSによって管理されてもよいが、エンクレーブと同様にメモリコンテンツが保護されているときは、OSは実際の保護コンテンツにアクセスするための許可または信頼が得られないことがあることが認識されるだろう。なぜならエンクレーブはプライベートメモリを有するからである。したがって、プライベートメモリコンテンツのセキュリティおよび/または保全性を保証すること、ならびにOSを信頼できないときに制限された量の物理メモリという技術的制約を管理することは、精巧なハードウェア支援および/または設計努力を必要とすることなく、セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するための命令および処理論理を用いた段階的な態様で達成され得る。
以下の説明においては、本発明の実施形態のより完全な理解を提供するために、たとえば処理論理、プロセッサタイプ、マイクロアーキテクチャの条件、事象、使用可能性機構などの多数の特定的な詳細が示される。しかしながら、本発明はこうした特定の詳細なしに実施されてもよいことが当業者に認識されるだろう。加えて、本発明の実施形態を不必要に曖昧にすることを避けるために、いくつかの周知の構造、回路などは詳細に示されていない。
以下の実施形態はプロセッサを参照して説明されるが、他の実施形態は他のタイプの集積回路および論理デバイスに適用できる。本発明の実施形態と類似の技術および教示が、より高いパイプラインスループットおよび性能改善から利益を受け得る他のタイプの回路または半導体デバイスに適用されてもよい。本発明の実施形態の教示は、データ操作を行う任意のプロセッサまたは機械に適用可能である。しかし、本発明は512ビット、256ビット、128ビット、64ビット、32ビット、または16ビットデータの動作を行うプロセッサまたは機械に限定されず、データの操作または管理が行われる任意のプロセッサおよび機械に適用されてもよい。加えて、例示の目的のために以下の説明は実施例を提供し、添付の図面はさまざまな実施例を示す。しかし、これらの実施例は本発明の実施形態のすべての可能な実施の網羅的なリストを提供することではなく、単に本発明の実施形態の例を提供することが意図されるものであるため、これらの実施例は限定的な意味で解釈されるべきではない。
以下の実施例は、実行ユニットおよび論理回路の状況における命令の処理および分配を説明しているが、本発明の他の実施形態は、機械によって実行されるときに本発明の少なくとも1つの実施形態に一致する機能をその機械に行わせるような、機械読取り可能な有形の媒体に保存されるデータおよび/または命令によって達成されてもよい。一実施形態において、本発明の実施形態に関連する機能は、機械実行可能命令において具現化される。この命令を用いて、この命令によってプログラムされた汎用プロセッサまたは特別目的のプロセッサに本発明のステップを行わせてもよい。本発明の実施形態は、本発明の実施形態に従う1つまたは複数の動作を行わせるためにコンピュータ(またはその他の電子デバイス)をプログラムするために用いられ得る命令を保存する機械またはコンピュータ読取り可能媒体を含み得るコンピュータプログラム製品またはソフトウェアとして提供されてもよい。代替的に、本発明の実施形態のステップは、そのステップを行うための固定関数論理を含む特定のハードウェア構成要素によって行われてもよいし、プログラムされたコンピュータ構成要素および固定関数ハードウェア構成要素の任意の組み合わせによって行われてもよい。
本発明の実施形態を行うための論理をプログラムするために用いられる命令は、たとえばDRAM、キャッシュ、フラッシュメモリ、またはその他の記憶装置など、システム内のメモリに保存されてもよい。さらに、命令はネットワークを介して分配されてもよいし、他のコンピュータ読取り可能媒体によって分配されてもよい。よって、機械読取り可能媒体は機械(例、コンピュータ)によって読取り可能な形の情報を保存または送信するための任意の機構を含んでもよいが、フロッピー(登録商標)ディスケット、光ディスク、コンパクトディスクリードオンリメモリ(Compact Disc,Read−Only Memory:CD−ROM)、および磁気光学ディスク、リードオンリメモリ(ROM)、ランダムアクセスメモリ(Random Access Memory:RAM)、消去可能プログラマブルリードオンリメモリ(Erasable Programmable Read−Only Memory:EPROM)、電気的消去可能プログラマブルリードオンリメモリ(Electrically Erasable Programmable Read−Only Memory:EEPROM)、磁気もしくは光学カード、フラッシュメモリ、または電気、光学、音響もしくはその他の形の伝播信号(例、搬送波、赤外線信号、デジタル信号など)を介したインターネット上の情報送信に用いられる有形の機械読取り可能記憶装置に限定されない。したがって、コンピュータ読取り可能媒体は、機械(例、コンピュータ)によって読取り可能な形の電子的命令または情報を保存または送信するために好適なあらゆるタイプの有形の機械読取り可能媒体を含む。
設計は、作製からシミュレーションおよび製作までのさまざまな段階を経てもよい。設計を表すデータは、その設計をいくつかの態様で表してもよい。第1に、シミュレーションにおいて有用であるとおり、ハードウェアはハードウェア記述言語または別の機能記述言語を用いて表されてもよい。加えて、設計プロセスのいくつかの段階において、論理および/またはトランジスタゲートを有する回路レベルモデルが生成されてもよい。さらに、ほとんどの設計は何らかの段階において、ハードウェアモデルにおけるさまざまなデバイスの物理的配置を表すデータのレベルに達する。従来の半導体製作技術が用いられる場合、ハードウェアモデルを表すデータは、集積回路を生産するために用いられるマスクに対する、異なるマスク層におけるさまざまな特徴の有無を指定するデータであってもよい。設計のあらゆる表現において、データはあらゆる形の機械読取り可能媒体に保存されてもよい。メモリまたは磁気もしくは光学記憶装置、たとえばディスクなどは、こうした情報を送信するために変調されたか、または別様に生成された光学的または電気的な波を介して送信された情報を保存するための機械読取り可能媒体であってもよい。コードまたは設計を表示または保有する電気的搬送波が送信されるとき、電気的信号のコピー、バッファまたは再送が行われる範囲で新たなコピーが作られる。よって、通信プロバイダまたはネットワークプロバイダは、有形の機械読取り可能媒体に少なくとも一時的に、本発明の実施形態の技術を具現化する、たとえば搬送波にコード化された情報などの物品を保存してもよい。
近年のプロセッサでは、さまざまなコードおよび命令を処理および実行するためにいくつかの異なる実行ユニットが用いられる。すべての命令が同等に作成されるわけではなく、ある命令はより早く完了するのに対し、別の命令は完了するためにいくつかのクロックサイクルを要してもよい。命令のスループットが速いほど、プロセッサの全体的性能が良くなる。よって、できる限り迅速に多くの命令を実行させることが有利であろう。しかし、より複雑性が高く、実行時間およびプロセッサリソースの点での要求が大きい特定の命令も存在する。たとえば、浮動小数点命令、ロード/保存動作、データ移動などである。
インターネット、テキストおよびマルチメディア適用においてより多くのコンピュータシステムが用いられるにつれて、時とともに付加的なプロセッサ支援が導入されてきた。一実施形態において、命令セットは、データタイプ、命令、レジスタアーキテクチャ、アドレス指定モード、メモリアーキテクチャ、割り込みおよび例外処理、ならびに外部入力および出力(input and output:I/O)を含む1つまたは複数のコンピュータアーキテクチャに関連付けられてもよい。
一実施形態において、命令セットアーキテクチャ(instruction set architecture:ISA)は、1つまたは複数の命令セットを実現するために用いられるプロセッサ論理および回路を含む1つまたは複数のマイクロアーキテクチャによって実現されてもよい。したがって、異なるマイクロアーキテクチャを有するプロセッサは、共通命令セットの少なくとも一部を共有してもよい。たとえば、インテル(Intel)(登録商標)ペンティアム(登録商標)(Pentium(登録商標))4プロセッサ、インテル(登録商標)コア(Core)(商標)プロセッサ、およびカリフォルニア州サニーヴェールのアドバンスト・マイクロ・デバイス社(Advanced Micro Devices,Inc.)のプロセッサは、x86命令セットのほぼ同一のバージョンを実施する(より新しいバージョンではいくつかの拡張が加えられている)が、異なる内部設計を有する。同様に、たとえばARMホールディングス社(ARM Holdings,Ltd.)、MIPS、またはそのライセンス取得者もしくは採用者など、他のプロセッサ開発会社によって設計されたプロセッサは、共通命令セットの少なくとも一部を共有していてもよいが、異なるプロセッサ設計を含んでもよい。たとえば、ISAの同じレジスタアーキテクチャが、新たな技術または周知の技術を用いた異なるマイクロアーキテクチャにおいて異なるやり方で実現されてもよく、それは専用物理レジスタ、レジスタリネーム機構を用いた(例、レジスタエイリアステーブル(Register Alias Table:RAT)、リオーダバッファ(Reorder Buffer:ROB)、およびリタイアレジスタファイルの使用)1つまたは複数の動的に割り当てられた物理レジスタを含む。一実施形態において、レジスタは1つまたは複数のレジスタ、レジスタアーキテクチャ、レジスタファイル、またはソフトウェアプログラマによってアドレス指定可能であってもなくてもよいその他のレジスタの組を含んでもよい。
一実施形態において、命令は1つまたは複数の命令フォーマットを含んでもよい。一実施形態において、命令フォーマットは、特に実行されるべき動作およびその動作が実行されるべきオペランドを指定するためのさまざまなフィールド(ビット数、ビットの位置など)を示してもよい。いくつかの命令フォーマットは、さらに分割されて命令テンプレート(またはサブフォーマット)によって定義されてもよい。たとえば、所与の命令フォーマットの命令テンプレートは、その命令フォーマットのフィールドの異なる部分集合を有するように定義されるか、および/または異なる態様で解釈された所与のフィールドを有するように定義されてもよい。一実施形態において、命令は命令フォーマットを用いて(および、もし定義されればその命令フォーマットの命令テンプレートの所与の1つにおいて)表現され、動作およびその動作が動作するオペランドを指定または表示する。
科学的適用、金融適用、自動ベクトル化汎用適用、RMS(認識、検索および合成(recognition,mining,and synthesis))適用、ならびに視覚およびマルチメディア適用(例、2D/3Dグラフィックス、イメージ処理、ビデオ圧縮/解凍、音声認識アルゴリズムおよび音響操作)は、多数のデータ項目に対して同じ動作を行うことを要求してもよい。一実施形態において、単一命令複数データ(Single Instruction Multiple Data:SIMD)とは、プロセッサに複数のデータ要素に対する動作を行わせる命令のタイプを示す。SIMD技術は、レジスタ内のビットを論理的に分割して、各々が別個の値を表すいくつかの固定サイズまたは可変サイズのデータ要素にできるプロセッサにおいて使用されてもよい。たとえば一実施形態において、64ビットレジスタ内のビットは、各々が別個の16ビット値を表す4つの別個の16ビットデータ要素を含むソースオペランドとして編成されてもよい。このタイプのデータは「パック(packed)」データタイプまたは「ベクトル」データタイプと呼ばれてもよく、このデータタイプのオペランドはパックデータオペランドまたはベクトルオペランドと呼ばれる。一実施形態において、パックデータ項目またはベクトルは単一のレジスタ内に保存されたパックデータ要素のシーケンスであってもよく、パックデータオペランドまたはベクトルオペランドはSIMD命令(または「パックデータ命令」もしくは「ベクトル命令」)のソースまたは宛先オペランドであってもよい。一実施形態において、SIMD命令は、2つのソースベクトルオペランドに対して行われるべき単一ベクトル動作を指定することによって、同サイズまたは異なるサイズの、同数または異なる数のデータ要素を有する、同じかまたは異なるデータ要素順序の宛先ベクトルオペランド(結果ベクトルオペランドとも呼ばれる)を生成する。
たとえば、x86、MMX(商標)、ストリーミングSIMD拡張(Streaming SIMD Extensions:SSE)、SSE2、SSE3、SSE4.1およびSSE4.2命令を含む命令セットを有するインテル(登録商標)コア(商標)プロセッサ、ARMプロセッサ、たとえばベクトル浮動小数点(Vector Floating Point:VFP)および/またはNEON命令を含む命令セットを有するプロセッサのARMコルテックス(Cortex)(登録商標)ファミリーなど、ならびにMIPSプロセッサ、たとえば中国科学院(Chinese Academy of Sciences)のコンピュータ技術研究所(Institute of Computing Technology:ICT)によって開発されたプロセッサのロンシン(Loongson)ファミリーなどによって用いられるものなどのSIMD技術は、アプリケーション性能の顕著な改善を可能にした(コア(商標)およびMMX(商標)は、カリフォルニア州サンタクララのインテル社(Intel Corporation)の登録商標または商標である)。
一実施形態において、宛先およびソースレジスタ/データとは、対応するデータまたは動作のソースおよび宛先を表す総称用語である。いくつかの実施形態において、それらは記載されるもの以外の名前または機能を有するレジスタ、メモリまたはその他の記憶領域によって実現されてもよい。たとえば一実施形態において、「DEST1」は一時記憶レジスタまたはその他の記憶領域であってもよく、一方「SRC1」および「SRC2」は第1および第2のソース記憶レジスタまたはその他の記憶領域であってもよく、以下同様であってもよい。他の実施形態においては、SRCおよびDEST記憶領域の2つまたはそれ以上が、同じ記憶領域(例、SIMDレジスタ)内の異なるデータ記憶構成要素に対応していてもよい。一実施形態において、たとえば第1および第2のソースデータに対して行われた動作の結果を、宛先レジスタの役割をする2つのソースレジスタの一方に対して書戻すことなどによって、ソースレジスタの1つが宛先レジスタとしても働いてもよい。
図1Aは、本発明の一実施形態に従う命令を実行するための実行ユニットを含むプロセッサを伴って形成された例示的コンピュータシステムのブロック図である。システム100は、本明細書に記載される実施形態など、本発明に従ってデータを処理するためのアルゴリズムを実行するための論理を含む実行ユニットを用いるために、たとえばプロセッサ102などの構成要素を含む。システム100は、カリフォルニア州サンタクララのインテル社より入手可能なペンティアム(登録商標)III、ペンティアム(登録商標)4、ジオン(Xeon)(商標)、アイテニアム(Itanium)(登録商標)、XScale(商標)および/またはストロングアーム(StrongARM)(商標)マイクロプロセッサに基づく処理システムの典型であるが、他のシステム(他のマイクロプロセッサ、エンジニアリングワークステーション、セットトップボックスなどを有するPCを含む)が用いられてもよい。一実施形態において、サンプルシステム100は、ワシントン州レドモンドのマイクロソフト社(Microsoft Corporation)より入手可能なウィンドウズ(登録商標)(WINDOWS(登録商標))オペレーティングシステムのバージョンを実行してもよいが、他のオペレーティングシステム(たとえばUNIX(登録商標)およびリナックス(登録商標)(Linux(登録商標))など)、埋め込み型ソフトウェア、および/またはグラフィカルユーザインタフェースが用いられてもよい。よって本発明の実施形態は、ハードウェア回路およびソフトウェアのいかなる特定の組み合わせにも限定されない。
実施形態はコンピュータシステムに限定されない。本発明の代替的実施形態は、たとえばハンドヘルドデバイスおよび埋め込み型アプリケーションなど、他のデバイスに用いられてもよい。ハンドヘルドデバイスのいくつかの例は、携帯電話、インターネットプロトコルデバイス、デジタルカメラ、携帯情報端末(personal digital assistants:PDA)、およびハンドヘルドPCを含む。埋め込み型アプリケーションは、マイクロコントローラ、デジタル信号プロセッサ(digital signal processor:DSP)、システムオンチップ、ネットワークコンピュータ(network computers:NetPC)、セットトップボックス、ネットワークハブ、広域ネットワーク(wide area network:WAN)スイッチ、または少なくとも1つの実施形態に従う1つまたは複数の命令を実行し得る任意のその他のシステムを含んでもよい。
図1Aは、本発明の一実施形態に従う少なくとも1つの命令を実行するためのアルゴリズムを行うための1つまたは複数の実行ユニット108を含むプロセッサ102を伴って形成された、コンピュータシステム100のブロック図である。一実施形態はシングルプロセッサのデスクトップまたはサーバシステムの状況において記載されていてもよいが、代替的実施形態はマルチプロセッサシステムに含まれてもよい。システム100は、「ハブ」システムアーキテクチャの一例である。コンピュータシステム100は、データ信号を処理するためのプロセッサ102を含む。プロセッサ102は、複雑命令セットコンピュータ(complex instruction set computer:CISC)マイクロプロセッサ、縮小命令セットコンピューティング(reduced instruction set computing:RISC)マイクロプロセッサ、超長命令語(very long instruction word:VLIW)マイクロプロセッサ、命令セットの組み合わせを実現するプロセッサ、またはあらゆるその他のプロセッサデバイス、たとえばデジタル信号プロセッサなどであってもよい。プロセッサ102は、プロセッサ102とシステム100内の他の構成要素との間にデータ信号を送信できるプロセッサバス110に結合される。システム100の構成要素は、当業者に周知であるその従来の機能を行う。
一実施形態において、プロセッサ102はレベル1(Level 1:L1)内部キャッシュメモリ104を含む。アーキテクチャに依存して、プロセッサ102は単一の内部キャッシュまたは複数のレベルの内部キャッシュを有してもよい。代替的に、別の実施形態において、キャッシュメモリはプロセッサ102の外部に存在してもよい。加えて他の実施形態は、特定の実施および要求に依存して、内部および外部キャッシュ両方の組み合わせを含んでもよい。レジスタファイル106は、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、および命令ポインタレジスタを含むさまざまなレジスタに、異なるタイプのデータを保存してもよい。
プロセッサ102内には、整数および浮動小数点演算を行うための論理を含む実行ユニット108も存在する。加えてプロセッサ102は、特定のマクロ命令に対するマイクロコードを保存するマイクロコード(ucode)ROMを含む。一実施形態として、実行ユニット108はパック命令セット109を処理するための論理を含む。命令を実行するための関連回路とともに、汎用プロセッサ102の命令セットにパック命令セット109を含むことによって、汎用プロセッサ102内のパックデータを用いて、多くのマルチメディア適用によって使用される動作が行われてもよい。よって、パックデータに対する動作を行うためにプロセッサのデータバスの全幅を用いることによって、多くのマルチメディア適用が加速されてより効率的に実行され得る。これによって、一度に1つのデータ要素に1つまたは複数の動作を行うためにプロセッサのデータバスにより小さい単位のデータを移送する必要がなくなる。
マイクロコントローラ、埋め込み型プロセッサ、グラフィックスデバイス、DSP、およびその他のタイプの論理回路において、実行ユニット108の代替的実施形態が用いられてもよい。システム100はメモリ120を含む。メモリ120は、動的ランダムアクセスメモリ(dynamic random access memory:DRAM)デバイス、静的ランダムアクセスメモリ(static random access memory:SRAM)デバイス、フラッシュメモリデバイス、またはその他のメモリデバイスであってもよい。メモリ120は、プロセッサ102によって実行され得るデータ信号によって表される命令および/またはデータを保存できる。
プロセッサバス110およびメモリ120には、システム論理チップ116が結合される。例示される実施形態におけるシステム論理チップ116は、メモリコントローラハブ(memory controller hub:MCH)である。プロセッサ102は、プロセッサバス110を介してMCH116と通信できる。MCH116は、命令およびデータの記憶のため、ならびにグラフィックスコマンド、データおよびテクスチャの記憶のために、メモリ120に対する高帯域メモリ経路118を提供する。MCH116は、プロセッサ102、メモリ120、およびシステム100内の他の構成要素の間にデータ信号を送り、かつプロセッサバス110、メモリ120、およびシステムI/O122の間のデータ信号の橋渡しをする。いくつかの実施形態において、システム論理チップ116はグラフィックスコントローラ112への結合のためのグラフィックスポートを提供してもよい。MCH116は、メモリインタフェース118を通じてメモリ120に結合される。グラフィックスカード112は、アクセラレーテッドグラフィックスポート(Accelerated Graphics Port:AGP)相互接続114を通じてMCH116に結合される。
システム100は、専用の(proprietary)ハブインタフェースバス122を用いてMCH116をI/Oコントローラハブ(I/O controller hub:ICH)130に結合する。ICH130は、ローカルI/Oバスを介していくつかのI/Oデバイスへの直接接続を提供する。ローカルI/Oバスは、周辺装置をメモリ120、チップセットおよびプロセッサ102に接続するための高速I/Oバスである。いくつかの例は、音響コントローラ、ファームウェアハブ(フラッシュBIOS)128、無線トランシーバ126、データ記憶装置124、ユーザ入力およびキーボードインタフェースを含むレガシーI/Oコントローラ、ユニバーサルシリアルバス(Universal Serial Bus:USB)などのシリアル拡張ポート、ならびにネットワークコントローラ134である。データ記憶装置124は、ハードディスクドライブ、フロッピー(登録商標)ディスクドライブ、CD−ROMデバイス、フラッシュメモリデバイス、またはその他の大容量記憶装置を含んでもよい。
システムの別の実施形態については、一実施形態に従う命令がシステムオンチップとともに用いられてもよい。システムオンチップの一実施形態は、プロセッサおよびメモリで構成される。こうしたシステムの1つに対するメモリは、フラッシュメモリである。フラッシュメモリは、プロセッサおよび他のシステム構成要素と同じダイ上に位置してもよい。加えて、たとえばメモリコントローラまたはグラフィックスコントローラなどのその他の論理ブロックもシステムオンチップに位置していてもよい。
図1Bは、本発明の一実施形態の原理を実現するデータ処理システム140を示す。本明細書に記載される実施形態は、本発明の実施形態の範囲から逸脱することなく代替的な処理システムとともに用いられてもよいことが当業者には容易に認識されるであろう。
コンピュータシステム140は、一実施形態に従う少なくとも1つの命令を実行し得る処理コア159を含む。一実施形態として、処理コア159は、CISC、RISC、またはVLIWタイプアーキテクチャを含むがそれに限定されないあらゆるタイプのアーキテクチャの処理ユニットを表す。加えて処理コア159は、1つまたは複数のプロセス技術での製造に好適であってもよく、機械読取り可能媒体に十分な詳細が表されることによって、前記製造を容易にするために好適であってもよい。
処理コア159は、実行ユニット142と、レジスタファイルの組145と、デコーダ144とを含む。加えて処理コア159は、本発明の実施形態の理解のために必要ではない付加的な回路(図示せず)を含む。実行ユニット142は、処理コア159が受け取る命令を実行するために用いられる。実行ユニット142は、典型的なプロセッサ命令の実行に加えて、パックデータフォーマットに対する動作を行うためのパック命令セット143の命令を実行してもよい。パック命令セット143は、本発明の実施形態を行うための命令と、その他のパック命令とを含む。実行ユニット142は、内部バスによってレジスタファイル145に結合される。レジスタファイル145は、データを含む情報を保存するための処理コア159上の記憶領域を表す。前述のとおり、パックデータを保存するために用いられる記憶領域は重要ではないことが理解される。実行ユニット142はデコーダ144に結合される。デコーダ144は、処理コア159が受け取った命令を復号して制御信号および/またはマイクロコードエントリポイントにするために用いられる。これらの制御信号および/またはマイクロコードエントリポイントに応答して、実行ユニット142は適切な動作を行う。一実施形態において、デコーダは、命令の中に示される対応データに対してどの動作を行うべきかを示す命令のオペコードを解釈するために用いられる。
処理コア159は、さまざまな他のシステムデバイスと通信するためのバス141に結合され、他のシステムデバイスとは、たとえば同期動的ランダムアクセスメモリ(synchronous dynamic random access memory:SDRAM)制御146、静的ランダムアクセスメモリ(static random access memory:SRAM)制御147、バーストフラッシュメモリインタフェース148、パーソナルコンピュータ・メモリカード国際協会(personal computer memory card international association:PCMCIA)/コンパクトフラッシュ(登録商標)(compact flash:CF)カード制御149、液晶ディスプレイ(liquid crystal display:LCD)制御150、直接メモリアクセス(direct memory access:DMA)コントローラ151、および代替的バスマスタインタフェース152などを含んでもよいが、それに限定されない。一実施形態において、データ処理システム140は、I/Oバス153を介してさまざまなI/Oデバイスと通信するためのI/Oブリッジ154も含んでもよい。こうしたI/Oデバイスは、たとえばユニバーサル非同期受信機/送信機(universal asynchronous receiver/transmitter:UART)155、ユニバーサルシリアルバス(USB)156、Bluetooth(登録商標)無線UART157、およびI/O拡張インタフェース158などを含んでもよいがそれに限定されない。
データ処理システム140の一実施形態は、モバイル、ネットワークおよび/または無線通信と、テキスト文字列比較演算を含むSIMD演算を行い得る処理コア159とを提供する。処理コア159はさまざまな音響、ビデオ、イメージングおよび通信アルゴリズムによってプログラムされてもよく、そこには離散変換、たとえばウォルシュ−アダマール変換、高速フーリエ変換(fast Fourier transform:FFT)、離散コサイン変換(discrete cosine transform:DCT)およびそれぞれの逆変換など;圧縮/解凍技術、たとえば色空間変換、ビデオコード化運動推定またはビデオ復号運動補償など;ならびに変調/復調(modulation/demodulation:MODEM)機能、たとえばパルス符号変調(pulse coded modulation:PCM)などが含まれる。
図1Cは、セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するための命令を実行できるデータ処理システムの別の代替的実施形態を示す。代替的実施形態の1つに従うと、データ処理システム160はメインプロセッサ166と、SIMDコプロセッサ161と、キャッシュメモリ167と、入出力システム168とを含んでもよい。入出力システム168は任意に無線インタフェース169に結合されてもよい。SIMDコプロセッサ161は、一実施形態に従う命令を含む動作を実行できる。処理コア170は、1つまたは複数のプロセス技術での製造に好適であってもよく、機械読取り可能媒体に十分な詳細が表されることによって、処理コア170を含むデータ処理システム160のすべてまたは一部の製造を容易にするために好適であってもよい。
一実施形態として、SIMDコプロセッサ161は実行ユニット162およびレジスタファイル(単数または複数)164の組を含む。メインプロセッサ166の一実施形態は、実行ユニット162による実行のために、一実施形態に従う命令を含む命令セット163の命令を認識するためのデコーダ165を含む。代替的実施形態として、SIMDコプロセッサ161はさらに、命令セット163の命令を復号するためのデコーダ165Bの少なくとも部分を含む。加えて処理コア170は、本発明の実施形態の理解のために必要ではない付加的な回路(図示せず)を含む。
動作中、メインプロセッサ166は、キャッシュメモリ167および入出力システム168との対話を含む一般的タイプのデータ処理動作を制御するデータ処理命令のストリームを実行する。データ処理命令のストリームにはSIMDコプロセッサ命令が埋め込まれている。メインプロセッサ166のデコーダ165はこれらのSIMDコプロセッサ命令を、接続されたSIMDコプロセッサ161によって実行されるべきタイプの命令であるとして認識する。したがってメインプロセッサ166はこれらのSIMDコプロセッサ命令(またはSIMDコプロセッサ命令を表す制御信号)をコプロセッサバス171上に発行し、それらの命令はそこから任意の接続されたSIMDコプロセッサに受信される。この場合、SIMDコプロセッサ161は、自身に対して意図されたあらゆる受信SIMDコプロセッサ命令を受け取り実行する。
データは、SIMDコプロセッサ命令による処理のために無線インタフェース169を介して受信されてもよい。一例として、音声通信はデジタル信号の形で受信されてもよく、それがSIMDコプロセッサ命令によって処理されて、音声通信を表すデジタル音響サンプルが再生成されてもよい。別の例として、圧縮された音響および/またはビデオがデジタルビットストリームの形で受信されてもよく、それがSIMDコプロセッサ命令によって処理されて、デジタル音響サンプルおよび/または動画ビデオフレームが再生成されてもよい。処理コア170の一実施形態として、メインプロセッサ166およびSIMDコプロセッサ161は統合されて、実行ユニット162と、レジスタファイル(単数または複数)164の組と、一実施形態に従う命令を含む命令セット163の命令を認識するためのデコーダ165とを含む単一の処理コア170となる。
図2は、本発明の一実施形態に従う命令を実行するための論理回路を含むプロセッサ200に対するマイクロアーキテクチャのブロック図である。いくつかの実施形態において、一実施形態に従う命令は、バイト、ワード、ダブルワード、カッド語などのサイズ、ならびにたとえば単精度および倍精度整数、および浮動小数点データタイプなどのデータタイプを有するデータ要素に対して動作するように実現されてもよい。一実施形態において、インオーダ(in−order)フロントエンド201は、実行されるべき命令をフェッチして、それらをプロセッサパイプラインにおけるその後の使用のために準備するプロセッサ200の部分である。フロントエンド201はいくつかのユニットを含んでもよい。一実施形態において、命令プリフェッチャ226はメモリから命令をフェッチしてそれらを命令デコーダ228に供給し、次いで命令デコーダ228はその命令を復号または解釈する。たとえば一実施形態において、デコーダは受信した命令を復号して、機械が実行できる「マイクロ命令」または「マイクロオペレーション(micro−operations)」(マイクロopまたはuopとも呼ばれる)と呼ばれる1つまたは複数の動作にする。他の実施形態において、デコーダは命令を構文解析してオペコードならびに対応するデータおよび制御フィールドにし、それらは一実施形態に従う動作を行うためにマイクロアーキテクチャによって用いられる。一実施形態において、トレースキャッシュ230は復号されたuopを取り、それらをアセンブルしてプログラム順序シーケンスにするか、または実行のためのuopキュー234にトレースする。トレースキャッシュ230が複雑な命令に遭遇するとき、マイクロコードROM232は動作を完了するために必要とされるuopを提供する。
いくつかの命令は単一のマイクロopに変換されるのに対し、他の命令は全動作を完了するためにいくつかのマイクロopを必要とする。一実施形態において、ある命令を完了するために4つを超えるマイクロopが必要とされるとき、デコーダ228は命令を行うためにマイクロコードROM232にアクセスする。一実施形態として、命令は命令デコーダ228における処理のために少数のマイクロopに復号されてもよい。別の実施形態において、動作を達成するためにいくつかのマイクロopが必要とされれば、命令はマイクロコードROM232内に保存されてもよい。トレースキャッシュ230は、マイクロコードROM232から一実施形態に従う1つまたは複数の命令を完了するためのマイクロコードシーケンスを読み出すための正しいマイクロ命令ポインタを定めるためのエントリポイントプログラマブル論理アレイ(programmable logic array:PLA)を示す。マイクロコードROM232が命令に対するマイクロopの順番付けを終えた後に、機械のフロントエンド201はトレースキャッシュ230からのマイクロopのフェッチを再開する。
アウトオブオーダ(out−of−order)実行エンジン203は、命令が実行のために準備されるところである。アウトオブオーダ実行論理は、命令がパイプラインを下って実行のためにスケジュールされる際に性能を最適化するために、命令の流れの平坦化および再順序付けを行うためのいくつかのバッファを有する。アロケータ論理は、各uopが実行のために必要とする機械バッファおよびリソースを割り当てる。レジスタリネーム論理は、論理レジスタをレジスタファイルのエントリ上にリネームする。加えてアロケータは、命令スケジューラの前にある、メモリ動作のためのキューと非メモリ動作のためのキューである2つのuopキューの一方に、各uopに対するエントリを割り当てる。命令スケジューラは、すなわちメモリスケジューラ、高速スケジューラ202、低速/一般的浮動小数点スケジューラ204、および単純な浮動小数点スケジューラ206である。uopスケジューラ202、204、206は、それらの依存入力レジスタオペランドソースの準備(readiness)と、uopがその動作を完了するために必要とする実行リソースの可用性とに基づいて、いつuopの実行の準備ができるかを定める。一実施形態の高速スケジューラ202はメインクロックサイクルの各半分に対してスケジュールできるのに対し、その他のスケジューラはメインプロセッサクロックサイクル当り1回しかスケジュールできない。スケジューラは、実行のためにuopをスケジュールするためにディスパッチポートを調停する。
レジスタファイル208、210は、実行ブロック211内の、スケジューラ202、204、206と、実行ユニット212、214、216、218、220、222、224との間に位置する。整数および浮動小数点演算に対して、それぞれ別個のレジスタファイル208、210が存在する。一実施形態の各レジスタファイル208、210は、まだレジスタファイルに書込まれていない完了したばかりの結果を新たな依存uopにバイパスまたは転送できるバイパスネットワークも含む。加えて整数レジスタファイル208および浮動小数点レジスタファイル210は、互いにデータを通信できる。一実施形態として、整数レジスタファイル208は2つの別個のレジスタファイルに分けられ、一方のレジスタファイルは下位32ビットのデータに対するものであり、第2のレジスタファイルは上位32ビットのデータに対するものである。一実施形態の浮動小数点レジスタファイル210は128ビット幅のエントリを有し、これは浮動小数点命令が典型的に幅64ビットから128ビットのオペランドを有するためである。
実行ブロック211は実行ユニット212、214、216、218、220、222、224を含み、そこで命令が実際に実行される。このセクションは、マイクロ命令が実行のために必要とする整数および浮動小数点データオペランド値を保存するレジスタファイル208、210を含む。一実施形態のプロセッサ200はいくつかの実行ユニットで構成される。すなわち、アドレス生成ユニット(address generation unit:AGU)212、AGU214、高速ALU216、高速ALU218、低速ALU220、浮動小数点ALU222、浮動小数点移動ユニット224である。一実施形態として、浮動小数点実行ユニット222、224は浮動小数点、MMX、SIMD、およびSSE、またはその他の演算を実行する。一実施形態の浮動小数点ALU222は、分割、平方根および剰余マイクロopを実行するための64ビット掛ける64ビットの浮動小数点ディバイダを含む。本発明の実施形態に対して、浮動小数点値を伴う命令は浮動小数点ハードウェアによって処理されてもよい。一実施形態において、ALU演算は高速ALU実行ユニット216、218に行く。一実施形態の高速ALU216、218は、クロックサイクルの半分の有効待ち時間による高速演算を実行できる。一実施形態として、最も複雑な整数演算は低速ALU220に行く。なぜなら低速ALU220は、たとえば乗算器、シフト、フラグ論理、および分岐処理などの待ち時間が長いタイプの演算に対する整数実行ハードウェアを含むからである。メモリのロード/保存動作はAGU212、214によって実行される。一実施形態として、整数ALU216、218、220は、64ビットデータオペランドに対する整数演算を行う状況において説明される。代替的実施形態において、ALU216、218、220は、16、32、128、256などを含むさまざまなデータビットを支援するように実現されてもよい。同様に浮動小数点ユニット222、224は、さまざまな幅のビットを有するオペランドの範囲を支援するように実現されてもよい。一実施形態として、浮動小数点ユニット222、224は、SIMDおよびマルチメディア命令とともに128ビット幅のパックデータオペランドに対して動作してもよい。
一実施形態において、uopスケジューラ202、204、206は、親ロードが実行を終える前に依存動作をディスパッチする。uopはプロセッサ200において投機的にスケジュールされて実行されるため、プロセッサ200はメモリミスを処理するための論理をさらに含む。データキャッシュ内でデータロードがミスするとき、一時的に不正確なデータによってスケジューラから離れた依存動作がパイプラインを飛行中であり得る。リプレイ機構は、不正確なデータを用いた命令を追跡して再実行する。リプレイが必要なのは依存動作のみであり、独立動作は完了される。加えてプロセッサの一実施形態のスケジューラおよびリプレイ機構は、セキュアエンクレーブページキャッシュのための進歩したページング能力を提供する命令を捕えるように設計される。
「レジスタ」という用語は、オペランドを識別するための命令の部分として用いられるオンボードプロセッサ記憶位置を示してもよい。言い換えると、レジスタは、(プログラマの視点から)プロセッサの外側から使用可能なものであってもよい。しかし、実施形態のレジスタは特定のタイプの回路を意味するものとして限定されるべきではない。そうではなく、実施形態のレジスタは、データを保存および提供することができ、かつ本明細書に記載される機能を行うことができるものである。本明細書に記載されるレジスタは、たとえば専用物理レジスタ、レジスタリネームを用いて動的に割り当てられた物理レジスタ、専用物理レジスタと動的に割り当てられた物理レジスタとの組み合わせなど、あらゆる数の異なる技術を用いて、プロセッサ内の回路によって実現されてもよい。一実施形態において、整数レジスタは32ビットの整数データを保存する。加えて一実施形態のレジスタファイルは、パックデータのために8つのマルチメディアSIMDレジスタを含む。以下の考察に対して、レジスタはパックデータを保持するように設計されたデータレジスタ、たとえばカリフォルニア州サンタクララのインテル社のMMX技術によって可能にされたマイクロプロセッサ内の64ビット幅のMMX(商標)レジスタ(場合によっては「mm」レジスタとも呼ばれる)などであると理解される。整数および浮動小数点の両方の形で入手可能なこれらのMMXレジスタは、SIMDおよびSSE命令を伴うパックデータ要素とともに動作できる。同様に、こうしたパックデータオペランドを保持するために、SSE2、SSE3、SSE4またはそれ以上の(総称的に「SSEx」と呼ばれる)技術に関する128ビット幅のXMMレジスタも用いられ得る。一実施形態において、パックデータおよび整数データを保存する際に、レジスタはこれら2つのデータタイプを区別する必要はない。一実施形態において、整数および浮動小数点は同じレジスタファイルに含まれているか、または異なるレジスタファイルに含まれている。さらに一実施形態において、浮動小数点および整数データは異なるレジスタに保存されても、同じレジスタに保存されてもよい。
以下の図面の実施例において、いくつかのデータオペランドが説明される。図3Aは、本発明の一実施形態に従うマルチメディアレジスタ内のさまざまなパックデータタイプの表現を示す。図3Aは、128ビット幅のオペランドに対するパックバイト310と、パックワード320と、パックダブルワード(doubleword:dword)330とに対するデータタイプを示す。本実施例のパックバイトフォーマット310は128ビットの長さであり、16個のパックバイトデータ要素を含む。ここでバイトは8ビットのデータと定義される。各バイトデータ要素に対する情報は、バイト0に対してはビット7からビット0に、バイト1に対してはビット15からビット8に、バイト2に対してはビット23からビット16に、最後にバイト15に対してはビット120からビット127に保存される。よって、レジスタ内のすべての利用可能なビットが使用されている。この記憶配置はプロセッサの記憶効率を高める。加えて、16個のデータ要素がアクセスされるため、1つの動作が16個のデータ要素に対して並列に行われ得る。
一般的に、データ要素とは、同じ長さの他のデータ要素とともに単一のレジスタまたはメモリ位置に保存される個々のデータ部分である。SSEx技術に関係するパックデータシーケンスにおいて、XMMレジスタに保存されるデータ要素の数は、個々のデータ要素のビット長で128ビットを割った数である。同様に、MMXおよびSSE技術に関係するパックデータシーケンスにおいて、MMXレジスタに保存されるデータ要素の数は、個々のデータ要素のビット長で64ビットを割った数である。図3Aに示されるデータタイプは128ビットの長さであるが、本発明の実施形態は64ビット幅、256ビット幅、512ビット幅、またはその他のサイズのオペランドとともに動作してもよい。本実施例のパックワードフォーマット320は128ビットの長さであり、8個のパックワードデータ要素を含む。各パックワードは16ビットの情報を含む。図3Aのパックダブルワードフォーマット330は128ビットの長さであり、4個のパックダブルワードデータ要素を含む。各パックダブルワードデータ要素は32ビットの情報を含む。パックカッド語は128ビットの長さであり、2個のパックカッド語データ要素を含む。
図3Bは、代替的なレジスタ内データ記憶フォーマットを示す。各パックデータは2つ以上の独立のデータ要素を含み得る。3つのパックデータフォーマットが示される。すなわち、パックハーフ(packed half)341、パックシングル342、およびパックダブル343である。パックハーフ341、パックシングル342、およびパックダブル343の一実施形態は、固定小数点データ要素を含む。代替的実施形態としては、パックハーフ341、パックシングル342、およびパックダブル343のうち1つまたは複数が浮動小数点データ要素を含んでもよい。パックハーフ341の代替的実施形態の1つは128ビットの長さであり、8個の16ビットデータ要素を含む。パックシングル342の一実施形態は128ビットの長さであり、4個の32ビットデータ要素を含む。パックダブル343の一実施形態は128ビットの長さであり、2個の64ビットデータ要素を含む。こうしたパックデータフォーマットは、たとえば96ビット、160ビット、192ビット、224ビット、256ビット、512ビットまたはそれ以上など、他のレジスタ長にさらに拡張されてもよいことが認識されるだろう。
図3Cは、本発明の一実施形態に従うマルチメディアレジスタ内の、さまざまな符号付きおよび無符号のパックデータタイプ表現を示す。無符号パックバイト表現344は、SIMDレジスタ内の無符号パックバイトの記憶を示す。各バイトデータ要素に対する情報は、バイト0に対してはビット7からビット0に、バイト1に対してはビット15からビット8に、バイト2に対してはビット23からビット16に保存されるなどし、最後にバイト15に対してはビット120からビット127に保存される。よって、レジスタ内のすべての利用可能なビットが使用されている。この記憶配置はプロセッサの記憶効率を高め得る。加えて、16個のデータ要素がアクセスされるため、1つの動作が16個のデータ要素に対して並列な態様で行われ得る。符号付きパックバイト表現345は、符号付きパックバイトの記憶を示す。各バイトデータ要素の第8ビットが符号標識であることに留意されたい。無符号パックワード表現346は、ワード7からワード0がSIMDレジスタ内にどのように保存されているかを示す。符号付きパックワード表現347は、レジスタ内無符号パックワード表現346と類似のものである。各ワードデータ要素の第16ビットが符号標識であることに留意されたい。無符号パックダブルワード表現348は、ダブルワードデータ要素がどのように保存されているかを示す。符号付きパックダブルワード表現349は、レジスタ内無符号パックダブルワード表現348と類似のものである。必要な符号ビットは各ダブルワードデータ要素の第32ビットであることに留意されたい。
図3Dは、演算コード化(オペコード)フォーマット360の一実施形態を示すものであり、このオペコードフォーマットは32ビットまたはそれ以上を有し、さらに、ワールドワイドウェブ(world−wide−web:www)のintel.com/products/processor/manuals/においてカリフォルニア州サンタクララのインテル社より入手可能な「インテル(登録商標)64およびIA−32インテルアーキテクチャソフトウェア開発者のマニュアル第2Aおよび2B巻合併号:命令セット参照A−Z(Intel(R) 64 and IA−32 Intel Architecture Software Developer's Manual Combined Volumes 2A and 2B:Instruction Set Reference A−Z)」に記載されるオペコードフォーマットのタイプに対応するレジスタ/メモリオペランドアドレス指定モードを有する。一実施形態において、命令はフィールド361および362の1つまたは複数によってコード化されてもよい。命令当り最大2つのオペランド位置が識別されてもよく、そこには最大2つのソースオペランド識別子364および365が含まれる。一実施形態については、宛先オペランド識別子366がソースオペランド識別子364と同じであるのに対し、他の実施形態においてはそれらが異なる。代替的実施形態については、宛先オペランド識別子366がソースオペランド識別子365と同じであるのに対し、他の実施形態においてはそれらが異なる。一実施形態において、ソースオペランド識別子364および365によって識別されるソースオペランドの1つは命令の結果によって上書されるのに対し、他の実施形態においては識別子364がソースレジスタ要素に対応し、識別子365が宛先レジスタ要素に対応する。一実施形態としては、32ビットまたは64ビットのソースおよび宛先オペランドを識別するためにオペランド識別子364および365が用いられてもよい。
図3Eは、40ビットまたはそれ以上を有する別の代替的な演算コード化(オペコード)フォーマット370を示すものである。オペコードフォーマット370はオペコードフォーマット360に対応し、任意のプレフィックスバイト378を含む。一実施形態に従う命令は、フィールド378、371および372の1つまたは複数によってコード化されてもよい。ソースオペランド識別子374および375ならびにプレフィックスバイト378によって、命令当り最大2つのオペランド位置が識別されてもよい。一実施形態としては、32ビットまたは64ビットのソースおよび宛先オペランドを識別するためにプレフィックスバイト378が用いられてもよい。一実施形態については、宛先オペランド識別子376がソースオペランド識別子374と同じであるのに対し、他の実施形態においてはそれらが異なる。代替的実施形態については、宛先オペランド識別子376がソースオペランド識別子375と同じであるのに対し、他の実施形態においてはそれらが異なる。一実施形態においては、オペランド識別子374および375によって識別されるオペランドの1つまたは複数に対して命令が動作し、オペランド識別子374および375によって識別される1つまたは複数のオペランドが命令の結果によって上書されるのに対し、他の実施形態においては、識別子374および375によって識別されるオペランドが別のレジスタ内の別のデータ要素に書込まれる。オペコードフォーマット360および370は、MODフィールド363および373ならびに任意のスケールインデックスベース(scale−index−base)および変位バイトによって部分的に指定された、レジスタ・ツー・レジスタ(register to register)、メモリ・ツー・レジスタ(memory to register)、レジスタ・バイ・メモリ(register by memory)、レジスタ・バイ・レジスタ(register by register)、レジスタ・バイ即値(register by immediate)、レジスタ・ツー・メモリ(register to memory)のアドレス指定を可能にする。
次に図3Fに移ると、いくつかの代替的実施形態において、64ビット(または128ビット、または256ビット、または512ビットもしくはそれ以上)の単一命令複数データ(SIMD)算術演算が、コプロセッサデータ処理(coprocessor data processing:CDP)命令を通じて行われてもよい。演算コード化(オペコード)フォーマット380は、CDPオペコードフィールド382および389を有するこうしたCDP命令の1つを示す。代替的実施形態に対するCDP命令のタイプでは、演算はフィールド383、384、387および388の1つまたは複数によってコード化されてもよい。命令当り最大3つのオペランド位置が識別されてもよく、そこには最大2つのソースオペランド識別子385および390、ならびに1つの宛先オペランド識別子386が含まれる。コプロセッサの一実施形態は、8、16、32、および64ビット値に対して動作できる。一実施形態として、命令は整数データ要素に対して実行される。いくつかの実施形態においては、条件フィールド381を用いて命令が条件付きで実行されてもよい。いくつかの実施形態については、フィールド383によってソースデータサイズがコード化されてもよい。いくつかの実施形態においては、SIMDフィールドに対して0(Zero:Z)、負(negative:N)、キャリー(carry:C)、およびオーバフロー(overflow:V)検出が行われてもよい。いくつかの命令については、フィールド384によって飽和のタイプがコード化されてもよい。
次に、図3Gは、別の実施形態に従うセキュアエンクレーブページキャッシュのための進歩したページング能力を提供するための別の代替的な演算コード化(オペコード)フォーマット397を示しており、このオペコードフォーマットは、ワールドワイドウェブ(www)のintel.com/products/processor/manuals/においてカリフォルニア州サンタクララのインテル社より入手可能な「インテル(登録商標)進歩したベクトル拡張プログラミング参照(Intel(R) Advanced Vector Extensions Programming Reference)」に記載されるオペコードフォーマットのタイプに対応する。
元のx86命令セットは、付加的なバイトに含まれるさまざまなフォーマットのアドレス音節および即値オペランドを有する1バイトのオペコードを提供し、その存在は第1の「オペコード」バイトから既知となる。加えて、オペコードに対する修飾子として確保された特定のバイト値が存在した(それらは命令の前に置かれる必要があるためにプレフィックスと呼ばれた)。(これらの特殊なプレフィックス値を含む)256オペコードバイトの元のパレットが使い果たされたとき、単一バイトが256オペコードの新たな組へのエスケープとされた。ベクトル命令(例、SIMD)が加えられる際に、より多くのオペコードに対する要求が生じ、プレフィックスを使用して拡張されたときにも「2バイト」オペコードマップは不十分であった。このために、付加的なマップに新たな命令が加えられ、これは2バイトに加えて識別子として任意のプレフィックスを用いる。
加えて、64ビットモードにおける追加のレジスタを容易にするために、プレフィックスとオペコード(およびオペコードを定めるために必要なあらゆるエスケープバイト)との間に付加的なプレフィックスが用いられてもよい(「REX」と呼ばれる)。一実施形態において、REXは、64ビットモードにおける追加のレジスタの使用を示すために4「ペイロード」ビットを有してもよい。他の実施形態において、REXは4ビットよりも少ないか、またはより多いビット数を有してもよい。(一般的にフォーマット360および/またはフォーマット370に対応する)少なくとも1つの命令セットの一般的フォーマットは、総称的に以下によって示される。 [プレフィックス][rex]エスケープ[エスケープ2]オペコード modrm(等)。
オペコードフォーマット397はオペコードフォーマット370に対応し、ほとんどの他の一般的に用いられるレガシー命令プレフィックスバイトおよびエスケープコードを置換する任意のVEXプレフィックスバイト391(一実施形態において16進値C4から始まる)を含む。たとえば下記は、命令をコード化するために2つのフィールドを用いる実施形態を示しており、これは元の命令に第2のエスケープコードが存在するとき、またはREXフィールド内の追加のビット(例、XBおよびWフィールド)が用いられる必要があるときに用いられてもよい。下に示される実施形態において、レガシーエスケープは新たなエスケープ値によって表され、レガシープレフィックスは「ペイロード」バイトの部分として完全に圧縮され、レガシープレフィックスは再生されて将来の拡張のために利用可能であり、第2のエスケープコードは「マップ」フィールドに圧縮され、将来のマップまたは特徴空間が利用可能であり、新たな特徴が加えられる(例、増加したベクトル長および付加的なソースレジスタ指定子)。
Figure 0006344614
一実施形態に従う命令は、フィールド391および392の1つまたは複数によってコード化されてもよい。命令当り最大4つのオペランド位置が、フィールド391と、ソースオペランド識別子374および375との組み合わせ、ならびに任意のスケールインデックスベース(SIB)識別子393、任意の変位識別子394、および任意の即値バイト395との組み合わせによって識別されてもよい。一実施形態として、32ビットもしくは64ビットのソースおよび宛先オペランド、ならびに/または128ビットもしくは256ビットのSIMDレジスタもしくはメモリオペランドを識別するために、VEXプレフィックスバイト391が用いられてもよい。一実施形態については、オペコードフォーマット397によって提供される機能がオペコードフォーマット370によって冗長であり得るのに対し、他の実施形態においてそれらは異なる。オペコードフォーマット370および397は、MODフィールド373、ならびに任意の(SIB)識別子393、任意の変位識別子394、および任意の即値バイト395によって部分的に指定された、レジスタ・ツー・レジスタ、メモリ・ツー・レジスタ、レジスタ・バイ・メモリ、レジスタ・バイ・レジスタ、レジスタ・バイ即値、レジスタ・ツー・メモリのアドレス指定を可能にする。
次に、図3Hは、別の実施形態に従うセキュアエンクレーブページキャッシュのための進歩したページング能力を提供するための別の代替的な演算コード化(オペコード)フォーマット398を示す。オペコードフォーマット398はオペコードフォーマット370および397に対応し、ほとんどの他の一般的に用いられるレガシー命令プレフィックスバイトおよびエスケープコードを置換して付加的な機能を提供する任意のEVEXプレフィックスバイト396(一実施形態において16進値62から始まる)を含む。一実施形態に従う命令は、フィールド396および392の1つまたは複数によってコード化されてもよい。命令当り最大4つのオペランド位置およびマスクが、フィールド396と、ソースオペランド識別子374および375との組み合わせ、ならびに任意のスケールインデックスベース(SIB)識別子393、任意の変位識別子394、および任意の即値バイト395との組み合わせによって識別されてもよい。一実施形態として、32ビットもしくは64ビットのソースおよび宛先オペランド、ならびに/または128ビット、256ビットもしくは512ビットのSIMDレジスタもしくはメモリオペランドを識別するために、EVEXプレフィックスバイト396が用いられてもよい。一実施形態については、オペコードフォーマット398によって提供される機能がオペコードフォーマット370または397によって冗長であり得るのに対し、他の実施形態においてそれらは異なる。オペコードフォーマット398は、マスクとともに、MODフィールド373、ならびに任意の(SIB)識別子393、任意の変位識別子394、および任意の即値バイト395によって部分的に指定された、レジスタ・ツー・レジスタ、メモリ・ツー・レジスタ、レジスタ・バイ・メモリ、レジスタ・バイ・レジスタ、レジスタ・バイ即値、レジスタ・ツー・メモリのアドレス指定を可能にする。(一般的にフォーマット360および/またはフォーマット370に対応する)少なくとも1つの命令セットの一般的フォーマットは、総称的に以下によって示される。 evex1 RXBmmmmm WvvvLpp evex4オペコードmodrm[sib][変位][即値]。
一実施形態として、EVEXフォーマット398に従ってコード化された命令は、たとえばユーザ構成可能マスクレジスタ、または付加的なオペランド、または128ビット、256ビットもしくは512ビットのベクトルレジスタからの選択、または選択されるべきさらなるレジスタなどの付加的な新しい特徴によって、セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するために用いられ得る付加的な「ペイロード」ビットを有してもよい。
たとえば、VEXフォーマット397は暗示的マスクによってセキュアエンクレーブページキャッシュのための進歩したページング能力を提供するために用いられ得るのに対し、EVEXフォーマット398は明示的なユーザ構成可能マスクによってセキュアエンクレーブページキャッシュのための進歩したページング能力を提供するために用いられ得る。加えて、VEXフォーマット397は128ビットまたは256ビットのベクトルレジスタにおいてセキュアエンクレーブページキャッシュのための進歩したページング能力を提供するために用いられ得るのに対し、EVEXフォーマット398は128ビット、256ビット、512ビットまたはそれより大きい(もしくは小さい)ベクトルレジスタにおいてセキュアエンクレーブページキャッシュのための進歩したページング能力を提供するために用いられ得る。
セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するための命令の例は、以下の実施例によって示される。
Figure 0006344614
セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するために上記のエンクレーブ命令を用いることによって、ページングプロセス(例、セキュアエンクレーブページキャッシュメモリコンテンツが暗号化されて書戻される、メモリから新たなページがロードされて解読される、TLBエントリがフラッシュされて置換されるなど)を複数の段階に分割でき、ここでプロセッサコアまたは論理プロセッサは1つまたは複数の段階の間に短時間しか中断されないことが認識されるだろう。よって、セキュアエンクレーブデータのセキュリティを保証しながら、かつ不当な複雑性および設計努力を必要とすることなしに、ページングプロセスによる性能低下が低減され得る。
いくつかの実施形態は、複数のハードウェアスレッド、論理プロセッサまたは処理コアと、そのハードウェアスレッド、論理プロセッサまたは処理コアによってアクセス可能な、セキュアエンクレーブに割り当てられた共有ページアドレスに対するセキュアデータを保存するためのエンクレーブページキャッシュとを含む。EBLOCK命令の一実施形態は、共有ページアドレスをオペランドとして指定する。1つまたは複数の実行ユニットは、共有ページアドレスに対するエンクレーブページキャッシュマッピングに対応するエントリをマーク付けすることによって、複数のハードウェアスレッド、論理プロセッサまたは処理コアのいずれかが共有ページにアクセスするための新たなTLB変換の作成をブロックする。ETRACK命令の一実施形態は、セキュアエンクレーブをオペランドとして指定し、1つまたは複数の実行ユニットは、セキュアエンクレーブに対応するエンクレーブページキャッシュ内のセキュアデータに現在アクセス中のハードウェアスレッドを記録する。たとえば一実施形態において、エンクレーブは2つまたはそれ以上のカウンタを有してもよく、それらは本明細書において「エポック」カウンタと呼ばれ、セキュアエンクレーブの現行エポックにおいて、セキュアデータに現在アクセス中のハードウェアスレッドの数を記録し、次いでその数を直前の(most recent previous)エポックカウンタにコピーし、ハードウェアスレッドを有さない新たなエポックを新たな現行エポックとして初期化してもよい。代替的実施形態において、EBLOCK&TRACK命令は、共有ページアドレスをオペランドとして指定する。1つまたは複数の実行ユニットは、共有ページアドレスに対するエンクレーブページキャッシュマッピングに対応するエントリをマーク付けすることによって、複数のハードウェアスレッド、論理プロセッサまたは処理コアのいずれかが共有ページにアクセスするための新たなTLB変換の作成をブロックし、ページメモリアドレスAddr1に対応するセキュアエンクレーブに現在アクセス中の論理プロセッサまたはハードウェアスレッドを記録し、いずれかがセキュアエンクレーブから出た際に論理プロセッサまたはハードウェアスレッドの数を減らす。1つまたはそれ以上の代替的実施形態において、エポックカウンタは、セキュアエンクレーブに関連するセキュアデータにおいて実行中であるか、またはそれにアクセス中のハードウェアスレッド、論理プロセッサまたは処理コアを常時追跡している。
次いでOSは、セキュアエンクレーブに対応するエンクレーブページキャッシュ内のセキュアデータに現在アクセス中のあらゆるハードウェアスレッド、論理プロセッサまたは処理コアにプロセッサ間割り込み(IPI)を送ってもよい。セキュアエンクレーブに対応するセキュアデータに現在アクセス中の各ハードウェアスレッド、論理プロセッサまたは処理コアは、セキュアエンクレーブを指定するEENTERまたはERESUME命令によってセキュアエンクレーブに入ったものであり、そのときにエポック数はハードウェアスレッド、論理プロセッサまたは処理コアに関連付けられていただろう。ハードウェアスレッド、論理プロセッサまたは処理コアがIPIを承認してセキュアエンクレーブを出るとき、それらの単数または複数のTLB変換はフラッシュされる。直前のエポックからのハードウェアスレッドが(例、EEXITまたはAEX命令によって)セキュアエンクレーブから出るたびに、直前のエポックカウンタ内に記録されたハードウェアスレッド数が減らされる。
記録されたハードウェアスレッド数が0に達するとき、単数または複数のページを退去させ、データを暗号化し、それらをメモリまたは不揮発性記憶装置に書戻すことがOSにとって安全である。一実施形態において、OSは、共有ページアドレスをオペランドとして指定するEWRITEBACKまたはEWB命令を用いて退去を完了し、セキュアデータを暗号化し、ページを不揮発性記憶装置に書戻してもよい。セキュアデータのエンクレーブ保護はOSを信頼できないかもしれないため、EWRITEBACKまたはEWB命令の一実施形態は、直前のエポックからの記録されたハードウェアスレッド数が0に達しないときには失敗し得る。他の代替的実施形態において、EWRITEBACKまたはEWB命令は、記録されたハードウェアスレッド数が0に達するまで実行を待つか、または例外をもたらしてもよい。OSは、ELOAD命令の一実施形態が新たな共有ページアドレスをオペランドとして指定することに応答して、セキュアエンクレーブの新たなページにフリーストレージを割り当てて、その新たなページに対するセキュアデータを解読してもよい。
許可の管理、物理メモリおよび/またはマッピングの変更はなおもOSによって管理されてもよいが、セキュアエンクレーブと同様に、メモリコンテンツが保護されているときは、OSはエンクレーブプライベートメモリの実際の保護コンテンツにアクセスするための許可または信頼が得られないことが認識されるだろう。プライベートメモリコンテンツのセキュリティおよび/または保全性を保証すること、ならびにOSを信頼できないときにより大きい保護されたエンクレーブプライベートメモリ空間を支援するために制限された量の物理メモリを使用するという技術的制約を管理することは、精巧なハードウェア支援および/または設計努力を必要とすることなく、セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するための命令および処理論理を用いた段階的な態様で達成され得る。
図4Aは、本発明の少なくとも1つの実施形態に従うインオーダパイプラインおよびレジスタリネーム段階、アウトオブオーダ発行/実行パイプラインを示すブロック図である。図4Bは、本発明の少なくとも1つの実施形態に従うプロセッサに含まれるインオーダアーキテクチャコアおよびレジスタリネーム論理、アウトオブオーダ発行/実行論理を示すブロック図である。図4Aにおける実線のボックスはインオーダパイプラインを示し、破線のボックスはレジスタリネーム、アウトオブオーダ発行/実行パイプラインを示す。同様に、図4Bにおける実線のボックスはインオーダアーキテクチャ論理を示し、破線のボックスはレジスタリネーム論理およびアウトオブオーダ発行/実行論理を示す。
図4Aにおいて、プロセッサパイプライン400はフェッチ段階402と、長さ復号段階404と、復号段階406と、割り当て段階408と、リネーム段階410と、スケジュール(ディスパッチまたは発行としても公知である)段階412と、レジスタ読取り/メモリ読取り段階414と、実行段階416と、書戻し/メモリ書込み段階418と、例外処理段階422と、コミット段階424とを含む。
図4Bにおいて、矢印は2つまたはそれ以上のユニット間の結合を示し、矢印の方向はそれらのユニット間のデータの流れの方向を示す。図4Bはプロセッサコア490を示し、プロセッサコア490は実行エンジンユニット450に結合されたフロントエンドユニット430を含み、それらは両方ともメモリユニット470に結合される。
コア490は、縮小命令セットコンピューティング(RISC)コア、複雑命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドもしくは代替的コアタイプであってもよい。さらに別の選択として、コア490は、たとえばネットワークまたは通信コア、圧縮エンジン、グラフィックスコアなどの特別目的のコアであってもよい。
フロントエンドユニット430は、命令キャッシュユニット434に結合された分岐予測ユニット432を含み、命令キャッシュユニット434は命令変換ルックアサイドバッファ(TLB)436に結合され、命令変換ルックアサイドバッファ(TLB)436は命令フェッチユニット438に結合され、命令フェッチユニット438は復号ユニット440に結合される。復号ユニットまたはデコーダは命令を復号して、1つまたは複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、その他の命令、またはその他の制御信号を出力として生成してもよく、それらは元の命令から復号されるか、元の命令を別様で反映するか、または元の命令から導き出される。デコーダはさまざまな異なる機構を用いて実現されてもよい。好適な機構の例は、ルックアップテーブル、ハードウェア実施、プログラマブル論理アレイ(PLA)、マイクロコードリードオンリメモリ(ROM)などを含むがそれに限定されない。命令キャッシュユニット434はさらに、メモリユニット470内のレベル2(L2)キャッシュユニット476に結合される。復号ユニット440は、実行エンジンユニット450内のリネーム/アロケータユニット452に結合される。
実行エンジンユニット450は、リタイアユニット454および1つまたは複数のスケジューラユニット(単数または複数)456の組に結合されたリネーム/アロケータユニット452を含む。スケジューラユニット(単数または複数)456は、予約局、中央命令ウインドウなどを含むあらゆる数の異なるスケジューラを表す。スケジューラユニット(単数または複数)456は物理レジスタファイル(単数または複数)ユニット(単数または複数)458に結合される。物理レジスタファイル(単数または複数)ユニット458の各々は1つまたは複数の物理レジスタファイルを表し、その異なる1つが1つまたは複数の異なるデータタイプを保存し、そのデータタイプはたとえばスカラ整数、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点など、ステータス(例、実行されるべき次の命令のアドレスである命令ポインタ)などである。レジスタリネームおよびアウトオブオーダ実行が実現され得るさまざまな態様(例、リオーダバッファ(単数または複数)およびリタイアレジスタファイル(単数または複数)の使用、将来のファイル(単数または複数)、履歴バッファ(単数または複数)、およびリタイアレジスタファイル(単数または複数)の使用、レジスタマップおよびレジスタのプールの使用など)を示すために、物理レジスタファイル(単数または複数)ユニット(単数または複数)458はリタイアユニット454と重ね合わされている。一般的に、アーキテクチャレジスタはプロセッサの外側またはプログラマの観点から可視である。レジスタはいかなる公知の特定タイプの回路にも限定されない。本明細書に記載されるとおりにデータを保存および提供できる限り、さまざまな異なるタイプのレジスタが好適である。好適なレジスタの例は、専用物理レジスタ、レジスタリネームを用いて動的に割り当てられた物理レジスタ、専用物理レジスタと動的に割り当てられた物理レジスタとの組み合わせなどを含むがそれに限定されない。
リタイアユニット454および物理レジスタファイル(単数または複数)ユニット(単数または複数)458は、実行クラスタ(単数または複数)460に結合される。実行クラスタ(単数または複数)460は、1つまたは複数の実行ユニット462の組と、1つまたは複数のメモリアクセスユニット464の組とを含む。実行ユニット462は、さまざまなタイプのデータ(例、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して、さまざまな演算(例、シフト、加算、減算、乗算)を行ってもよい。いくつかの実施形態は、特定の機能または機能の組の専用にされたいくつかの実行ユニットを含んでもよいが、他の実施形態はただ1つの実行ユニットを含むか、またはすべてが全機能を行う複数の実行ユニットを含んでもよい。スケジューラユニット(単数または複数)456、物理レジスタファイル(単数または複数)ユニット(単数または複数)458、および実行クラスタ(単数または複数)460は、複数の可能性もあるものとして示されている。なぜなら、特定の実施形態は、特定のタイプのデータ/演算に対して別個のパイプラインを作成するからである(例、スカラ整数パイプライン、スカラ浮動小数点/パック整数/パック浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはメモリアクセスパイプラインは、各々が自身のスケジューラユニット、物理レジスタファイル(単数または複数)ユニットおよび/または実行クラスタを有し、さらに別個のメモリアクセスパイプラインの場合には、特定の実施形態の実現において、このパイプラインの実行クラスタのみがメモリアクセスユニット(単数または複数)464を有する)。加えて、別個のパイプラインが用いられるとき、これらのパイプラインのうちの1つまたは複数がアウトオブオーダ発行/実行であって、残りのものがインオーダであってもよいことが理解されるべきである。
メモリアクセスユニット464の組はメモリユニット470に結合され、メモリユニット470はデータTLBユニット472を含み、データTLBユニット472はデータキャッシュユニット474に結合され、データキャッシュユニット474はレベル2(L2)キャッシュユニット476に結合される。例示的実施形態の1つにおいて、メモリアクセスユニット464はロードユニットと、保存アドレスユニットと、保存データユニットとを含んでもよく、その各々はメモリユニット470内のデータTLBユニット472に結合される。L2キャッシュユニット476は、1つまたは複数の他のレベルのキャッシュに結合され、最終的にはメインメモリに結合される。
例として、例示的なレジスタリネームアウトオブオーダ発行/実行コアアーキテクチャは、パイプライン400を次のとおりに実施してもよい。1)命令フェッチ438はフェッチおよび長さ復号段階402および404を実行する、2)復号ユニット440は復号段階406を実行する、3)リネーム/アロケータユニット452は割り当て段階408およびリネーム段階410を実行する、4)スケジューラユニット(単数または複数)456はスケジュール段階412を実行する、5)物理レジスタファイル(単数または複数)ユニット(単数または複数)458およびメモリユニット470はレジスタ読取り/メモリ読取り段階414を実行する;実行クラスタ460は実行段階416を実行する、6)メモリユニット470および物理レジスタファイル(単数または複数)ユニット(単数または複数)458は書戻し/メモリ書込み段階418を実行する、7)例外処理段階422にはさまざまなユニットが含まれてもよい、8)リタイアユニット454および物理レジスタファイル(単数または複数)ユニット(単数または複数)458はコミット段階424を実行する。
コア490は、1つまたは複数の命令セット(例、x86命令セット(より新しいバージョンではいくつかの拡張が加えられる)、カリフォルニア州サニーヴェールのミップステクノロジーズ(MIPS Technologies)のMIPS命令セット、カリフォルニア州サニーヴェールのARMホールディングスのARM命令セット(たとえばNEONなどの任意の付加的拡張を有する))を支援してもよい。
コアはマルチスレッディング(動作またはスレッドの2つまたはそれ以上の並列する組を実行すること)を支援してもよく、それはタイムスライスマルチスレッディング、同時マルチスレッディング(単一の物理コアが、その物理コアが同時マルチスレッディングを行うスレッドの各々に対する論理コアを提供する)、またはその組み合わせ(例、たとえばインテル(登録商標)のハイパースレッディング技術などのように、タイムスライスフェッチおよび復号の後に同時マルチスレッディングを行うこと)を含むさまざまなやり方で行われてもよいことが理解されるべきである。
アウトオブオーダ実行の状況においてレジスタリネームが説明されるが、レジスタリネームはインオーダアーキテクチャにおいて用いられてもよいことが理解されるべきである。図示されるプロセッサの実施形態は、別個の命令およびデータキャッシュユニット434/474ならびに共有のL2キャッシュユニット476を含むが、代替的実施形態は命令およびデータの両方に対する単一の内部キャッシュ、たとえばレベル1(L1)内部キャッシュ、または複数のレベルの内部キャッシュなどを有してもよい。いくつかの実施形態において、システムは内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュとの組み合わせを含んでもよい。代替的に、すべてのキャッシュがコアおよび/またはプロセッサの外部にあってもよい。
図5は、本発明の実施形態に従う集積メモリコントローラおよびグラフィックスを有するシングルコアプロセッサおよびマルチコアプロセッサ500のブロック図である。図5における実線のボックスは、シングルコア502Aと、システムエージェント510と、1つまたは複数のバスコントローラユニット516の組とを有するプロセッサ500を示すのに対し、破線のボックスを任意に追加したものは、複数のコア502A〜Nと、システムエージェントユニット510内の1つまたは複数の集積メモリコントローラユニット(単数または複数)514の組と、集積グラフィックス論理508とを含む代替的プロセッサ500を示す。
メモリ階層は、コア内の1つまたは複数のレベルのキャッシュと、1つまたは複数の共有キャッシュユニット506の組と、集積メモリコントローラユニット514の組に結合された外部メモリ(図示せず)とを含む。共有キャッシュユニット506の組は、1つまたは複数の中間レベルのキャッシュ、たとえばレベル2(L2)、レベル3(L3)、レベル4(L4)、もしくはその他のレベルのキャッシュなど、最終レベルキャッシュ(last level cache:LLC)、および/またはその組み合わせを含んでもよい。一実施形態においては、リングに基づく相互接続ユニット512が集積グラフィックス論理508と、共有キャッシュユニット506の組と、システムエージェントユニット510とを相互接続するが、代替的実施形態は、こうしたユニットを相互接続するためにあらゆる数の周知の技術を用いてもよい。
いくつかの実施形態において、コア502A〜Nのうちの1つまたは複数はマルチスレッディングが可能である。システムエージェント510は、コア502A〜Nを調和して動作させる構成要素を含む。システムエージェントユニット510は、たとえば出力制御ユニット(power control unit:PCU)およびディスプレイユニットなどを含んでもよい。PCUは、コア502A〜Nおよび集積グラフィックス論理508の電力状態を調節するために必要な論理および構成要素であるか、またはそれらを含んでいてもよい。ディスプレイユニットは、1つまたは複数の外部接続されたディスプレイを駆動するためのものである。
コア502A〜Nは、アーキテクチャおよび/または命令セットの点で同種であっても異種であってもよい。たとえば、コア502A〜Nのうちいくつかはインオーダであり、他のものはアウトオブオーダであってもよい。別の例として、コア502A〜Nのうち2つまたはそれ以上は同じ命令セットの実行が可能であり、他のものはその命令セットの部分集合のみ実行可能であるか、または異なる命令セットの実行が可能であってもよい。
プロセッサは、たとえばカリフォルニア州サンタクララのインテル社より入手可能なコア(Core)(商標)i3、i5、i7、2デュオ(Duo)およびクアッド(Quad)、ジオン(Xeon)(商標)、アイテニアム(Itanium)(商標)、XScale(商標)、またはストロングアーム(StrongARM)(商標)プロセッサなどの汎用プロセッサであってもよい。代替的に、プロセッサはたとえばARMホールディングス社、MIPSなどの別の会社のものであってもよい。プロセッサは、たとえばネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、コプロセッサ、または埋め込み型プロセッサなどの特別目的のプロセッサであってもよい。プロセッサは1つまたは複数のチップ上に実現されてもよい。プロセッサ500は、たとえばBiCMOS、CMOSまたはNMOSなどの、いくつかのプロセス技術のいずれかを用いた1つまたは複数の基板の一部であるか、および/またはその基板上に実現されてもよい。
図6〜8はプロセッサ500を含ませるために好適な例示的システムであり、図9はコア502の1つまたは複数を含み得る例示的システムオンチップ(system on a chip:SoC)である。ラップトップ、デスクトップ、ハンドヘルドPC、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、埋め込み型プロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、およびさまざまなその他の電子デバイスに対する、当該技術分野において公知のその他のシステム設計および構成も好適である。一般的に、本明細書に開示されるプロセッサおよび/または他の実行論理を組み込むことができる多様なシステムまたは電子デバイスは、概して好適である。
ここで図6を参照すると、本発明の一実施形態に従うシステム600のブロック図が示される。システム600は1つまたは複数のプロセッサ610、615を含んでもよく、それらはグラフィックスメモリコントローラハブ(graphics memory controller hub:GMCH)620に結合される。付加的なプロセッサ615が任意のものであるという性質は、図6において破線で示される。
各プロセッサ610、615はプロセッサ500の何らかのバージョンであってもよい。しかしながら、プロセッサ610、615内には集積グラフィックス論理および集積メモリ制御ユニットは存在しないであろうことに留意すべきである。図6では、GMCH620が、たとえば動的ランダムアクセスメモリ(DRAM)などであってもよいメモリ640に結合されてもよいことが示される。少なくとも1つの実施形態に対して、DRAMは不揮発性キャッシュに関連付けられてもよい。
GMCH620は、チップセットまたはチップセットの一部であってもよい。GMCH620はプロセッサ(単数または複数)610、615と通信して、プロセッサ(単数または複数)610、615とメモリ640との対話を制御してもよい。加えてGMCH620は、プロセッサ(単数または複数)610、615とシステム600のその他の構成要素との間のアクセラレーテッドバスインタフェースとして働いてもよい。少なくとも1つの実施形態について、GMCH620は、たとえばフロントサイドバス(frontside bus:FSB)695などのマルチドロップバスを介してプロセッサ(単数または複数)610、615と通信する。
さらに、GMCH620はディスプレイ645(たとえば平面パネルディスプレイなど)に結合される。GMCH620は集積グラフィックスアクセラレータを含んでもよい。GMCH620はさらに、システム600にさまざまな周辺デバイスを結合するために用いられ得る入出力(I/O)コントローラハブ(ICH)650に結合される。たとえば図6の実施形態においては、ICH650に結合される個別のグラフィックスデバイスであってもよい外部グラフィックスデバイス660と、別の周辺デバイス670とが示される。
代替的には、システム600内に付加的なプロセッサまたは異なるプロセッサも存在してもよい。たとえば、付加的なプロセッサ(単数または複数)615は、プロセッサ610と同じものである付加的なプロセッサ(単数または複数)、プロセッサ610に対して異種または非対称である付加的なプロセッサ(単数または複数)、アクセラレータ(たとえば、グラフィックスアクセラレータまたはデジタル信号処理(digital signal processing:DSP)ユニットなど)、フィールドプログラマブルゲートアレイ、またはあらゆるその他のプロセッサを含んでもよい。物理リソース610、615の間には、アーキテクチャ特性、マイクロアーキテクチャ特性、熱的特性、消費電力特性などを含む利点のメトリクスの範囲という点で、さまざまな相違があってもよい。これらの相違は、プロセッサ610、615間の非対称性および異種性を効果的に表してもよい。少なくとも1つの実施形態については、さまざまなプロセッサ610、615が同じダイパッケージ内に存在してもよい。
ここで図7を参照すると、本発明の実施形態に従う第2のシステム700のブロック図が示される。図7に示されるとおり、マルチプロセッサシステム700はポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続750を介して結合された第1のプロセッサ770および第2のプロセッサ780を含む。プロセッサ610、615の1つまたはそれ以上と同様に、プロセッサ770および780の各々はプロセッサ500の何らかのバージョンであってもよい。
2つのプロセッサ770、780のみが図示されているが、本発明の範囲はそのように限定されないことが理解されるべきである。他の実施形態においては、所与のプロセッサにおいて1つまたは複数の付加的なプロセッサが存在してもよい。
プロセッサ770および780はそれぞれ集積メモリコントローラユニット772および782を含むことが示される。加えてプロセッサ770は、そのバスコントローラユニットの部分としてポイントツーポイント(point−to−point:P−P)インタフェース776および778を含む。同様に、第2のプロセッサ780はP−Pインタフェース786および788を含む。プロセッサ770、780は、P−Pインタフェース回路778、788を用いたポイントツーポイント(P−P)インタフェース750を介して情報を交換してもよい。図7に示されるとおり、IMC772および782は、プロセッサをそれぞれのメモリ、すなわちメモリ732およびメモリ734に結合し、これらのメモリはそれぞれのプロセッサにローカルに取付けられたメインメモリの部分であってもよい。
プロセッサ770、780の各々は、ポイントツーポイントインタフェース回路776、794、786、798を用いた個々のP−Pインタフェース752、754を介して、チップセット790と情報を交換してもよい。チップセット790は、高性能グラフィックスインタフェース739を介して高性能グラフィックス回路738とも情報を交換してもよい。
共有キャッシュ(図示せず)がいずれかのプロセッサに含まれるか、または両方のプロセッサの外側にあるがP−P相互接続を介してプロセッサと接続されることによって、プロセッサが低電力モードに入ったときに、いずれかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュに保存され得るようにしてもよい。
チップセット790はインタフェース796を介して第1のバス716に結合されてもよい。一実施形態において、第1のバス716は周辺構成要素相互接続(Peripheral Component Interconnect:PCI)バスであってもよいし、たとえばPCIエクスプレスバスまたは別の第3世代I/O相互接続バスなどのバスであってもよいが、本発明の範囲はそのように限定されない。
図7に示されるとおり、第1のバス716を第2のバス720に結合するバスブリッジ718とともに、さまざまなI/Oデバイス714が第1のバス716に結合されてもよい。一実施形態において、第2のバス720は低ピンカウント(low pin count:LPC)バスであってもよい。第2のバス720には、たとえばキーボードおよび/またはマウス722、通信デバイス727、ならびにたとえばディスクドライブもしくはその他の大容量記憶装置などの記憶ユニット728などを含むさまざまなデバイスが結合されてもよく、一実施形態において、記憶ユニット728は命令/コードおよびデータ730を含んでもよい。さらに、音響I/O724が第2のバス720に結合されてもよい。他のアーキテクチャも可能であることに留意されたい。たとえば、図7のポイントツーポイントアーキテクチャの代わりに、システムはマルチドロップバスまたはその他のこうしたアーキテクチャを実現してもよい。
ここで図8を参照すると、本発明の実施形態に従う第3のシステム800のブロック図が示される。図7および図8における類似の構成要素は類似の参照番号を有し、図8の他の局面を曖昧にすることを避けるために、図7の特定の局面は図8では省略されている。
図8は、プロセッサ870、880がそれぞれ集積メモリおよびI/O制御論理(control logic)(「CL」)872および882を含んでもよいことを示す。少なくとも1つの実施形態に対して、CL872、882は、図5および図7に関連して上述したものなどの集積メモリコントローラユニットを含んでもよい。加えて、CL872、882はI/O制御論理を含んでもよい。図8では、メモリ832、834がCL872、882に結合されるだけでなく、I/Oデバイス814も制御論理872、882に結合されることが示される。レガシーI/Oデバイス815はチップセット890に結合される。
ここで図9を参照すると、本発明の実施形態に従うSoC900のブロック図が示される。図5と類似の構成要素は類似の参照番号を有する。加えて、破線のボックスはより進歩したSoCにおける任意の特徴である。図9において、相互接続ユニット(単数または複数)902は、1つまたは複数のコア502A〜Nの組および共有キャッシュユニット(単数または複数)506を含むアプリケーションプロセッサ910と、システムエージェントユニット510と、バスコントローラユニット(単数または複数)516と、集積メモリコントローラユニット(単数または複数)514と、集積グラフィックス論理508、静止および/またはビデオカメラ機能を提供するためのイメージプロセッサ924、ハードウェア音響加速を提供するための音響プロセッサ926、およびビデオコード化/復号加速を提供するためのビデオプロセッサ928を含んでもよい1つまたは複数のメディアプロセッサ920の組と、静的ランダムアクセスメモリ(SRAM)ユニット930と、直接メモリアクセス(DMA)ユニット932と、1つまたは複数の外部ディスプレイに結合するためのディスプレイユニット940とに結合される。
図10は、一実施形態に従う少なくとも1つの命令を実行し得る、中央処理ユニット(central processing unit:CPU)およびグラフィックス処理ユニット(graphics processing unit:GPU)を含むプロセッサを示す。一実施形態において、少なくとも1つの実施形態に従う動作を行うための命令は、CPUによって実行されてもよい。別の実施形態において、その命令はGPUによって実行されてもよい。さらに別の実施形態において、その命令はGPUおよびCPUによって行われる動作の組み合わせによって実行されてもよい。たとえば一実施形態において、一実施形態に従う命令はGPUにおいて受け取られ、実行のために復号されてもよい。しかし、復号された命令の中の1つまたは複数の動作はCPUによって行われてもよく、その結果は命令の最終リタイアのためにGPUに戻される。反対に、いくつかの実施形態においてはCPUが1次プロセッサとして働き、GPUがコプロセッサとして働いてもよい。
いくつかの実施形態において、高度に並列のスループットプロセッサから利益を得る命令はGPUによって実行されてもよく、一方で深くパイプライン化されたアーキテクチャから利益を得るプロセッサの性能から利益を得る命令はCPUによって実行されてもよい。たとえば、グラフィックス、科学的適用、金融適用およびその他の並列作業負荷はGPUの性能から利益を得てもよく、それに従って実行されてもよいのに対し、たとえばオペレーティングシステムカーネルまたはアプリケーションコードなど、より連続的な適用はCPUの方が好適であり得る。
図10において、プロセッサ1000はCPU1005と、GPU1010と、イメージプロセッサ1015と、ビデオプロセッサ1020と、USBコントローラ1025と、UARTコントローラ1030と、SPI/SDIOコントローラ1035と、ディスプレイデバイス1040と、高解像度マルチメディアインタフェース(High−Definition Multimedia Interface:HDMI(登録商標))コントローラ1045と、MIPIコントローラ1050と、フラッシュメモリコントローラ1055と、デュアルデータレート(dual data rate;DDR)コントローラ1060と、セキュリティエンジン1065と、IS/IC(集積チップ間サウンド/集積回路間(Integrated Interchip Sound/Inter−Integrated Circuit))インタフェース1070とを含む。さらに多くのCPUまたはGPUおよびその他の周辺インタフェースコントローラを含む、その他の論理および回路が図10のプロセッサに含まれてもよい。
少なくとも1つの実施形態の1つまたはそれ以上の局面は、プロセッサ内のさまざまな論理を表す機械読取り可能媒体に保存された表現的データによって実現されてもよく、そのデータは機械によって読取られるときに、本明細書に記載される技術を行うための論理を機械に作成させる。こうした表現は「IPコア」として公知であり、有形の機械読取り可能媒体(「テープ」)に保存されてさまざまな顧客または製造設備に供給されることによって、その論理またはプロセッサを実際に作成する製作機械にロードされてもよい。たとえば、IPコア、たとえばARMホールディングス社が開発したプロセッサのコルテックス(Cortex)(商標)ファミリー、および中国科学院のコンピュータ技術研究所(ICT)が開発したロンシン(Loongson)IPコアなどは、たとえばテキサス・インスツルメンツ(Texas Instruments)、クアルコム(Qualcomm)、アップル(Apple)、またはサムスン(Samsung)などのさまざまな顧客またはライセンス取得者にライセンス供与または販売されて、これらの顧客またはライセンス取得者が生産するプロセッサにおいて実現されてもよい。
図11は、一実施形態に従うIPコアの開発を示すブロック図を示す。記憶装置1130は、シミュレーションソフトウェア1120および/またはハードウェアもしくはソフトウェアモデル1110を含む。一実施形態において、IPコア設計を表すデータは、メモリ1140(例、ハードディスク)、有線接続(例、インターネット)1150または無線接続1160を介して記憶装置1130に提供されてもよい。次いで、シミュレーションツールおよびモデルによって生成されたIPコア情報が製作設備に送信されてもよく、そこで少なくとも1つの実施形態に従う少なくとも1つの命令を行うために第三者によってIPコアが作成されてもよい。
いくつかの実施形態において、1つまたは複数の命令は第1のタイプまたはアーキテクチャ(例、x86)に対応してもよく、異なるタイプまたはアーキテクチャ(例、ARM)のプロセッサにおいて変換またはエミュレートされてもよい。したがって一実施形態に従う命令は、ARM、x86、MIPS、GPU、またはその他のプロセッサタイプもしくはアーキテクチャを含むあらゆるプロセッサまたはプロセッサタイプにおいて実行されてもよい。
図12は、一実施形態に従って、第1のタイプの命令が異なるタイプのプロセッサによってどのようにエミュレートされるかを示す。図12において、プログラム1205は、一実施形態に従う命令と同じ機能か、または実質的に同じ機能を行い得るいくつかの命令を含む。しかしながらプログラム1205の命令は、プロセッサ1215と異なるか、または互換性のないタイプおよび/またはフォーマットの命令であってもよく、これはプログラム1205のタイプの命令がプロセッサ1215によってネイティブに実行できないかもしれないことを意味する。しかし、エミュレーション論理1210の助けによって、プログラム1205の命令がプロセッサ1215によってネイティブに実行され得る命令に変換される。一実施形態において、エミュレーション論理はハードウェアにおいて具現化される。別の実施形態において、エミュレーション論理は、プログラム1205のタイプの命令をプロセッサ1215によってネイティブに実行され得るタイプに変換するためのソフトウェアを含む有形の機械読取り可能媒体において具現化される。他の実施形態において、エミュレーション論理は固定関数またはプログラマブルハードウェアと、有形の機械読取り可能媒体に保存されるプログラムとの組み合わせである。一実施形態においては、プロセッサがエミュレーション論理を含むのに対し、他の実施形態においては、エミュレーション論理はプロセッサの外側に存在し、第三者によって提供される。一実施形態において、プロセッサは、そのプロセッサに含まれるかまたは関連付けられるマイクロコードまたはファームウェアを実行することによって、ソフトウェアを含む有形の機械読取り可能媒体において具現化されるエミュレーション論理をロードできる。
図13は、本発明の実施形態に従ってソース命令セットの2進命令を目標命令セットの2進命令に変換するための、ソフトウェア命令コンバータの使用を対比したブロック図である。図示される実施形態において、命令コンバータはソフトウェア命令コンバータであるが、代替的に命令コンバータはソフトウェア、ファームウェア、ハードウェア、またはそのさまざまな組み合わせにおいて実現されてもよい。図13は、高レベル言語1302のプログラムがx86コンパイラ1304を用いてコンパイルされることにより、少なくとも1つのx86命令セットコアを有するプロセッサ1316によってネイティブに実行され得るx86 2進コード1306が生成され得ることを示す。少なくとも1つのx86命令セットコアを有するプロセッサ1316とは、少なくとも1つのx86命令セットコアを有するインテルプロセッサと実質的に同じ結果を得るために、(1)インテルx86命令セットコアの命令セットの本質的な部分、または(2)少なくとも1つのx86命令セットコアを有するインテルプロセッサにおいて実行することを目標としたアプリケーションのオブジェクトコードバージョンまたはその他のソフトウェアを互換的に実行するか、別様に処理することによって、少なくとも1つのx86命令セットコアを有するインテルプロセッサと実質的に同じ機能を行い得るあらゆるプロセッサを表す。
x86コンパイラ1304とは、少なくとも1つのx86命令セットコアを有するプロセッサ1316において、追加のリンク処理によって、または追加のリンク処理なしで実行され得るx86 2進コード1306(例、オブジェクトコード)を生成するために動作可能なコンパイラを表す。同様に、図13は、高レベル言語1302のプログラムが代替的命令セットコンパイラ1308を用いてコンパイルされることにより、少なくとも1つのx86命令セットコアを有さないプロセッサ1314(例、カリフォルニア州サニーヴェールのミップステクノロジーズのMIPS命令セットを実行するか、および/またはカリフォルニア州サニーヴェールのARMホールディングスのARM命令セットを実行するコアを有するプロセッサ)によってネイティブに実行され得る代替的命令セット2進コード1310が生成され得ることを示す。命令コンバータ1312は、x86 2進コード1306を、x86命令セットコアを有さないプロセッサ1314によってネイティブに実行され得るコードに変換するために用いられる。この変換されたコードは、代替的命令セット2進コード1310と同じではないと考えられる。なぜなら、それが可能な命令コンバータの作製は困難だからである。しかし、変換されたコードは一般的な動作を遂行し、代替的命令セットからの命令で構成されるだろう。よって命令コンバータ1312は、エミュレーション、シミュレーションまたはあらゆるその他のプロセスを通じて、x86命令セットプロセッサまたはコアを有さないプロセッサまたはその他の電子デバイスが、x86 2進コード1306を実行できるようにするソフトウェア、ファームウェア、ハードウェア、またはその組み合わせを表す。
図14は、セキュアエンクレーブページキャッシュEPC1460のための進歩したページング能力を提供するために命令を用いるための処理システム1401の一実施形態を示す。システム1401は、システムメモリ1490およびプロセッサ1402を含む。プロセッサ1402は、第1のハードウェアスレッドまたは論理プロセッサ1420と、第2のハードウェアスレッドまたは論理プロセッサ1430とを含む。簡潔のためにプロセッサ1402は、各々が単一のハードウェアスレッドを表す2つの論理プロセッサを含むものとして示されているが、本発明はそのように限定されないことが認識されるだろう。たとえば、プロセッサ1402または本明細書に示される他のプロセッサなどのプロセッサがいくつかの論理プロセッサコアを有することは典型的なことであり、それらはいくつかの物理リソース(例、EPC1460)および/または回路(例、SEユニット1470)を共有してもしなくてもよく、各論理プロセッサまたはプロセッサコアは、ソフトウェアスレッドを一斉または同時に実行できる複数のハードウェアスレッドを有する。
加えてプロセッサ1402は、セキュアエンクレーブ(secure enclave:SE)ユニット1470およびエンクレーブページキャッシュEPC1460を含む。いくつかの実施形態について、EPC1460は、たとえば1つまたは複数のレベル1キャッシュ1440および1450、またはレベル2キャッシュ(図示せず)などのより大きなキャッシュユニットの部分であってもよい。他の実施形態として、EPC1460は、ハードウェアスレッド、論理プロセッサまたは処理コアによってアクセス可能な、セキュアエンクレーブに割り当てられた共有ページ1442、1444および1456のアドレスに対するセキュアデータを保存するための、複数のハードウェアスレッド、論理プロセッサまたは処理コアによって共有される別個の構造または分配された構造(例、キャッシュ1440およびキャッシュ1450)であってもよい。
同様にSEユニット1470は、暗号化ユニットと、保全性保護ユニットと、アクセス制御ユニットと、範囲レジスタと、エンクレーブページキャッシュマッピングと、少なくとも前のエポックおよび現行エポックを保存するための2つまたはそれ以上のエポックカウンタ記憶位置とを有する、複数のハードウェアスレッド、論理プロセッサまたは処理コアによって共有される別個の構造または分配された構造(例、SEユニット1427および1437)を含んでもよい。加えてSEユニット1470は、セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するためのエンクレーブ命令を支援する。
この実施例において、論理プロセッサ1420は復号段階1422と、読取り段階1424と、1つまたは複数の実行ユニット(例、実行ユニット1426)と、書込み段階1428とを有する。加えて論理プロセッサ1420はTLB1425を有し、ここにはEPC1460にアクセスするための変換がインストールされてもよい。論理プロセッサ1430は復号段階1432と、読取り段階1434と、1つまたは複数の実行ユニット(例、実行ユニット1436)と、書込み段階1438とを有する。加えて論理プロセッサ1430はTLB1435を有し、ここにはEPC1460にアクセスするための変換がインストールされてもよい。論理プロセッサ1420および1430の実施形態はさらに、セキュアエンクレーブページキャッシュEPC1460のための進歩したページング能力を提供するためのエンクレーブ命令を実行するために、他のパイプライン段階(例、パイプライン400内に示されるもの)を含んでもよい。
セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するためにエンクレーブ命令を用いることによって、ページングプロセス(例、セキュアエンクレーブページキャッシュメモリコンテンツが暗号化されて書戻される、メモリから新たなページがロードされて解読される、TLBエントリがフラッシュされて置換されるなど)を複数の段階に分割でき、ここでプロセッサコアまたは論理プロセッサ(例、論理プロセッサ1420および1430)は1つまたは複数の段階の間に短時間しか中断されないことが認識されるだろう。よって、セキュアエンクレーブデータのセキュリティを保証しながら、かつ不当な複雑性および設計努力を必要とすることなしに、ページングプロセスによる性能低下が低減され得る。
一実施形態においてEBLOCK命令は、共有ページ(例、ページ1442)のアドレスをオペランドとして指定する。1つまたは複数の実行ユニット(例、実行ユニット1426)は、共有ページアドレスに対するエンクレーブページキャッシュマッピングに対応するエントリをマーク付けすることによって、複数のハードウェアスレッド、論理プロセッサまたは処理コアのいずれかが共有ページにアクセスするための新たなTLB変換(例、TLB1435内)の作成をブロックする。一実施形態においてETRACK命令は、セキュアエンクレーブをオペランドとして指定し、1つまたは複数の実行ユニット(例、実行ユニット1426)は、セキュアエンクレーブに対応するエンクレーブページキャッシュEPC1460内のセキュアデータに現在アクセス中のハードウェアスレッドを記録する。たとえば一実施形態において、エンクレーブは2つまたはそれ以上のエポックカウンタを有してもよく、それによってセキュアエンクレーブの現行エポックにおいて、セキュアデータに現在アクセス中のハードウェアスレッドの数を記録し、次いでその数を直前のエポックカウンタにコピーし(例、ETRACK命令に応答して)、ハードウェアスレッドを有さない新たなエポックを新たな現行エポックとして初期化してもよい。
次いでOSは、セキュアエンクレーブに対応するエンクレーブページキャッシュ内のセキュアデータに現在アクセス中のあらゆるハードウェアスレッド、論理プロセッサまたは処理コアにIPIを送ってもよい。一実施形態において、セキュアエンクレーブに対応するセキュアデータに現在アクセス中の各ハードウェアスレッド、論理プロセッサまたは処理コア(例、論理プロセッサ1420および1430)は、セキュアエンクレーブを指定するEENTERまたはERESUME命令によってセキュアエンクレーブに入ったものであり、そのときにエポック数はハードウェアスレッド、論理プロセッサまたは処理コアに関連付けられていただろう。ハードウェアスレッド、論理プロセッサまたは処理コアがIPIを承認してセキュアエンクレーブを出るとき、それらの単数または複数のTLB変換は(例、TLB1425および/またはTLB1435から)フラッシュされる。直前のエポックからのハードウェアスレッドが(例、EEXITまたはAEX命令によって)セキュアエンクレーブから出るたびに、直前のエポックカウンタ内に記録されたハードウェアスレッド数が減らされる。
記録されたハードウェアスレッド数が0に達するとき、単数または複数のページ(例、ページ1442)を退去させ、データを暗号化し、それらを(例、暗号化ページ1495として)メモリまたは不揮発性記憶装置に書戻すことがOSにとって安全である。一実施形態において、OSは、共有ページ(例、ページ1442)のアドレスをオペランドとして指定するEWRITEBACKまたはEWB命令を用いて退去を完了し、セキュアデータを暗号化し、ページをメモリまたは不揮発性記憶装置に書戻してもよい。セキュアデータのエンクレーブ保護はOSを信頼できないかもしれないため、EWRITEBACKまたはEWB命令の一実施形態は、直前のエポックからの記録されたハードウェアスレッド数が0に達しないときには失敗し得る。他の代替的実施形態において、EWRITEBACKまたはEWB命令は、記録されたハードウェアスレッド数が0に達するまで実行を待つか、または例外をもたらしてもよい。一実施形態において、次いでOSはELOAD命令を用いて、メモリまたは不揮発性記憶装置から新たなページ(例、ページ1410)を読取り、そのデータを解読し、解読されたページをEPC1460に保存してもよい。よって、ページングプロセス(例、セキュアエンクレーブページキャッシュメモリコンテンツが暗号化されて書戻される、メモリから新たなページがロードされて解読される、TLBエントリがフラッシュされて置換されるなど)を複数の段階に分割でき、ここでプロセッサコアまたは論理プロセッサ(例、論理プロセッサ1420および1430)は1つまたは複数の段階の間に(例、IPIによって)短時間しか中断されない。
図15は、セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するために命令を用いるためのプロセッサ1501内の装置の実施形態を示す。この装置は、セキュアエンクレーブ(SE)ユニット1502およびエンクレーブページキャッシュEPC1520を含む。いくつかの実施形態について、EPC1520は、たとえばレベル1キャッシュL1 1540、またはレベル2キャッシュ(図示せず)などのより大きなキャッシュユニットの部分であってもよい。他の実施形態として、EPC1520は、ハードウェアスレッド、論理プロセッサまたは処理コアによってアクセス可能な、セキュアエンクレーブに割り当てられた共有ページ1542のアドレスに対するセキュアデータを保存するための、複数のハードウェアスレッド、論理プロセッサまたは処理コアによって共有される別個の構造または分配された構造であってもよい。SEユニット1502は、暗号化ユニット1510と、保全性保護ユニット1512と、アクセス制御ユニット1514と、範囲レジスタ1516と、エンクレーブページキャッシュマッピングEPC1518と、2つまたはそれ以上のエポックカウンタ記憶位置、すなわち前のエポック(previous epoch)PE1517および現行エポック(current epoch)CE1519とを含んでもよい。さらに、SEユニット1502はエンクレーブ命令1503を含んでもよく、エンクレーブ命令1503はEBLOCK命令1531と、ETRACK命令1532と、EWB命令1533と、ELOAD命令1534と、EEXIT命令1535と、EENTER命令1536と、図示されないその他のエンクレーブ命令(例、AEX命令、ERESUME命令など)とを含む。
加えて、プロセッサコア1501はTLB1525を含み、ここにはEPC1520にアクセスするための変換がインストールされてもよい。プロセッサコア1501はさらに復号段階1522と、読取り段階1524と、1つまたは複数の実行ユニット(例、実行ユニット1526)と、書込み段階1528とを含む。プロセッサコア1501の実施形態はさらに、セキュアエンクレーブページキャッシュEPC1520のための進歩したページング能力を提供するためのエンクレーブ命令1503を実行するために、他のパイプライン段階(例、パイプライン400内に示されるもの)を含んでもよい。
一実施形態においてEBLOCK命令1531は、共有ページ1542のアドレスをオペランドとして指定する。1つまたは複数の実行ユニット(例、実行ユニット1526)は、共有ページ1542のアドレスに対するEPCM1518内のエンクレーブページキャッシュマッピングに対応するエントリをマーク付けすることによって、ハードウェアスレッド、論理プロセッサまたは処理コアが共有ページにアクセスするための新たなTLB変換(例、TLB1525またはあらゆる他のTLB内)の作成をブロックする。一実施形態においてETRACK命令1532は、セキュアエンクレーブをオペランドとして指定し、1つまたは複数の実行ユニット(例、実行ユニット1526またはアクセス制御ユニット1514)は、セキュアエンクレーブに対応するエンクレーブページキャッシュEPC1520内のセキュアデータに現在アクセス中のハードウェアスレッドを記録する。たとえば一実施形態において、エンクレーブは2つまたはそれ以上のエポックカウンタ(例、PE1517およびCE1519)を有してもよく、それによってセキュアエンクレーブの現行エポック(例、CE1519)において、セキュアデータに現在アクセス中のハードウェアスレッドの数を記録し、次いでその数を直前のエポックカウンタ(例、PE1517)にコピーし、ハードウェアスレッドを有さない新たなエポックを新たな現行エポック(例、CE1519)として初期化してもよい。
次いでOSは、セキュアエンクレーブに対応するエンクレーブページキャッシュEPC1520内のセキュアデータに現在アクセス中のあらゆるハードウェアスレッド、論理プロセッサまたは処理コアにIPIを送ってもよい。セキュアエンクレーブに対応するセキュアデータに現在アクセス中の各ハードウェアスレッド、論理プロセッサまたは処理コアは、セキュアエンクレーブを指定するEENTER(またはERESUME)命令1536によってセキュアエンクレーブに入ったものであり、そのときにエポック数はハードウェアスレッド、論理プロセッサまたは処理コアに関連付けられていただろう。ハードウェアスレッド、論理プロセッサまたは処理コアがIPIを承認してセキュアエンクレーブを出るとき、それらの単数または複数のTLB変換は(例、TLB1525から)フラッシュされる。(例、PE1517に対応する)直前のエポックからのハードウェアスレッドがEEXIT(またはAEX)命令1535によってセキュアエンクレーブから出るたびに、直前のエポックカウンタ(例、PE1517)内に記録されたハードウェアスレッド数が減らされる。
(例、PE1517内に)記録されたハードウェアスレッド数が0に達するとき、単数または複数のページ(例、共有ページ1542)を退去させ、データを暗号化し、それをメモリまたは不揮発性記憶装置に書戻すことがOSにとって安全である。一実施形態において、OSは、共有ページ1542のアドレスをオペランドとして指定するEWB(またはEWRITEBACK)命令1533を用いて退去を完了し、セキュアデータを暗号化し、ページ1542を不揮発性記憶装置に書戻してもよい。セキュアデータのエンクレーブ保護はOSを信頼できないかもしれないため、EWB命令1533の一実施形態は、直前のエポック(例、PE1517)からの記録されたハードウェアスレッド数が0に達しないときには失敗し得る。他の代替的実施形態において、EWB命令1533は、(例、PE1517内に)記録されたハードウェアスレッド数が0に達するまで実行を待つか、またはEWB命令1533は例外をもたらしてもよい。
許可の管理、物理メモリおよび/またはマッピングの変更はなおもOSによって管理されてもよいが、セキュアエンクレーブと同様に、メモリコンテンツが保護されているときは、OSはエンクレーブプライベートメモリの実際の保護コンテンツにアクセスするための許可または信頼が得られないことが認識されるだろう。プライベートメモリコンテンツのセキュリティおよび/または保全性を保証すること、ならびにOSを信頼できないときにより大きい保護されたエンクレーブプライベートメモリ空間を支援するために制限された量の物理メモリ(例、EPC1520またはEPC1460)を使用するという技術的制約を管理することは、精巧なハードウェア支援および/または設計努力を必要とすることなく、セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するための命令および処理論理を用いた段階的な態様で達成され得る。
図16は、セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するためのプロセス1601の一実施形態に対する流れ図を示す。プロセス1601および本明細書に開示されるその他のプロセスは、汎用機械または特別目的の機械またはその両方の組み合わせによって実行可能な、専用のハードウェアまたはソフトウェアまたはファームウェアの演算コードを含み得る処理ブロックによって行われる。
プロセス1601の処理ブロック1610において、プライベートデータおよび/または命令を保護するためにセキュアエンクレーブが作成される。処理ブロック1620において、EPCページがセキュアエンクレーブに割り当てられる。処理ブロック1625において、ページングが必要とされているか否かが判断される。もし必要でなければ、処理ブロック1620においてEPCページはセキュアエンクレーブに割り当てられ続け、ここでセキュアデータは、セキュアエンクレーブ内で実行中の複数のハードウェアスレッドによってアクセス可能な、セキュアエンクレーブに割り当てられた共有ページアドレスに対するEPCラインに保存されてもよい。他方の場合、処理ブロック1630において、1つまたは複数のEBLOCK命令が実行され、一実施形態における各EBLOCK命令は共有ページアドレスをオペランドとして指定する。処理ブロック1640において、ETRACK命令が実行され、一実施形態におけるETRACK命令はセキュアエンクレーブを指定する。処理ブロック1650において、セキュアエンクレーブ内で実行中の各論理プロセッサにIPIが送られることによって、それらがセキュアエンクレーブから出る。処理ブロック1660においてIPIの承認が確認され、処理ブロック1665において、すべてのIPIが承認されたか否かが判断される。もし承認されなければ、処理ブロック1660において処理が続くが、もしすべてのIPIが承認されれば、処理は処理ブロック1670に進む。処理ブロック1670において、1つまたは複数のEWB命令が実行され、一実施形態における各EWB命令は、ブロックされた共有ページアドレスの1つをオペランドとして指定する。処理ブロック1680において、1つまたは複数のELOAD命令が実行され、一実施形態における各ELOAD命令は、新たな共有ページアドレスをオペランドとして指定する。次いで、処理は処理ブロック1625から繰り返される。
図17は、セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するためのプロセス1701の代替的実施形態に対する流れ図を示す。プロセス1701の処理ブロック1710において、(例、共有ページアドレスをオペランドとして指定するEBLOCK命令に応答して)共有ページに対するエントリがマーク付けされることによって、あらゆるTLBにおける新たな変換の作成がブロックされる。処理ブロック1720において、(例、セキュアエンクレーブをオペランドとして指定するETRACK命令に応答して)セキュアエンクレーブ内のセキュアデータに現在アクセス中のハードウェアスレッド、論理プロセッサまたは処理コアが記録される。処理ブロック1730において、(例、EEXITまたはAEX命令を用いて)いずれかのスレッドがセキュアエンクレーブから出たときに、記録されたスレッドの数が減らされる。処理ブロック1735において、記録されたスレッドの数が現在0であるか否かが判断される。もし0でなければ、処理ブロック1730において処理が続くが、もし記録されたスレッドの数が現在0であれば、処理は処理ブロック1740に進む。処理ブロック1740において、共有ページに対するセキュアデータが退去され、処理ブロック1750において、(例、共有ページアドレスをオペランドとして指定するEWRITEBACKまたはEWB命令に応答して)退去された共有ページに対するセキュアデータが暗号化される。次いで処理ブロック1760において、退去された共有ページに対する暗号化セキュアデータが、メモリまたは不揮発性記憶装置に書戻される。処理ブロック1770において、セキュアエンクレーブの新たなページにフリーストレージが割り当てられる。処理ブロック1780において、(例、新たな共有ページアドレスをオペランドとして指定するELOAD命令に応答して)新たなページに対するセキュアデータが解読される。
図18Aは、セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するためのプロセス1801の別の実施形態に対する流れ図を示す。プロセス1801の処理ブロック1810において、(例、マルチスレッドプロセッサ内で)複数のハードウェアスレッドが実行される。処理ブロック1820において、複数のスレッドによってアクセス可能なセキュアエンクレーブに割り当てられた共有ページに対するキャッシュにセキュアデータが保存される。プロセス1802の処理ブロック1830において、EBLOCK命令が復号され、一実施形態におけるEBLOCK命令は共有ページアドレスをオペランドとして指定する。処理ブロック1840において、共有ページに対するエントリがマーク付けされて、あらゆるTLBにおける新たな変換の作成がブロックされる。処理ブロック1850において、セキュアエンクレーブ内のセキュアデータに現在アクセス中のハードウェアスレッド、論理プロセッサまたは処理コアが記録される。プロセス1803の処理ブロック1860において、ETRACK命令が復号され、一実施形態におけるETRACK命令はセキュアエンクレーブをオペランドとして指定する。処理ブロック1870において、(例、EEXITまたはAEX命令を用いて)いずれかのスレッドがセキュアエンクレーブから出るとき、記録されたスレッドの数が減らされる。処理ブロック1880において、記録されたスレッドの数が現在0であるか否かが判断される。もし0でなければ、処理ブロック1870において処理が続くが、もし記録されたスレッドの数が現在0であれば、処理は処理ブロック1890に進む。処理ブロック1890において、(例、共有ページアドレスをオペランドとして指定するEWRITEBACKまたはEWB命令に応答して)共有ページに対するセキュアデータがメモリまたは不揮発性記憶装置にページアウトされる。
セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するためにエンクレーブ命令を用いることによって、ページングプロセス(例、セキュアエンクレーブページキャッシュメモリコンテンツが暗号化されて書戻される、メモリから新たなページがロードされて解読される、TLBエントリがフラッシュされて置換されるなど)を複数の段階に分割でき、ここでプロセッサコアまたは論理プロセッサは1つまたは複数の段階の間に短時間しか中断されない。よって、セキュアエンクレーブデータのセキュリティを保証しながら、かつ不当な複雑性および設計努力を必要とすることなしに、ページングプロセスによる性能低下が低減され得る。
図18Bは、セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するためのプロセス1804の別の実施形態に対する流れ図を示す。プロセス1804の処理ブロック1810において、(例、マルチスレッドプロセッサ内で)複数のハードウェアスレッドが実行される。処理ブロック1820において、複数のスレッドによってアクセス可能なセキュアエンクレーブに割り当てられた共有ページに対するキャッシュにセキュアデータが保存される。プロセス1805の処理ブロック1830において、EBLOCK命令が復号され、一実施形態におけるEBLOCK命令は共有ページアドレスをオペランドとして指定する。処理ブロック1840において、共有ページに対するエントリがマーク付けされて、あらゆるTLBにおける新たな変換の作成がブロックされる。プロセス1806の処理ブロック1860において、ETRACK命令が復号され、一実施形態におけるETRACK命令はセキュアエンクレーブをオペランドとして指定する。処理ブロック1850において、セキュアエンクレーブ内のセキュアデータに現在アクセス中のハードウェアスレッド、論理プロセッサまたは処理コアが記録される。処理ブロック1870において、(例、EEXITまたはAEX命令を用いて)いずれかのスレッドがセキュアエンクレーブから出るとき、記録されたスレッドの数が減らされる。処理ブロック1880において、記録されたスレッドの数が現在0であるか否かが判断される。もし0でなければ、処理ブロック1870において処理が続くが、もし記録されたスレッドの数が現在0であれば、処理は処理ブロック1890に進む。処理ブロック1890において、(例、共有ページアドレスをオペランドとして指定するEWRITEBACKまたはEWB命令に応答して)共有ページに対するセキュアデータがメモリまたは不揮発性記憶装置にページアウトされる。
よって、許可の管理、物理メモリおよび/またはマッピングの変更はなおもOSによって管理されてもよいが、OSはエンクレーブプライベートメモリの実際の保護コンテンツにアクセスするための許可または信頼が得られない。プライベートメモリコンテンツのセキュリティおよび/または保全性を保証すること、ならびにより大きな保護されたエンクレーブプライベートメモリ空間を支援するために制限された量の物理メモリを用いるという技術的制約を管理することは、精巧なハードウェア支援および/または設計努力を必要とすることなく、セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するための命令および処理論理を用いた段階的な態様で達成され得る。プロセス1804のいくつかの代替的実施形態および本明細書に開示される他のプロセスにおいて可能であれば、特定の順序で実行されるものとして示される処理ブロックは、別の順序で実行されても、同時に実行されても、互いに並行して実行されてもよいことが認識されるだろう。
本明細書に開示される機構の実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはこうした実現アプローチの組み合わせにおいて実現されてもよい。本発明の実施形態は、少なくとも1つのプロセッサと、記憶システム(揮発性および不揮発性メモリおよび/または記憶構成要素を含む)と、少なくとも1つの入力デバイスと、少なくとも1つの出力デバイスとを含むプログラマブルシステムにおいて実行されるコンピュータプログラムまたはプログラムコードとして実現されてもよい。
本明細書に記載される機能を行うための命令を入力して、出力情報を生成するために、プログラムコードが適用されてもよい。出力情報は、公知の態様で1つまたは複数の出力デバイスに適用されてもよい。この適用の目的のために、処理システムは、たとえばデジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(application specific integrated circuit:ASIC)、またはマイクロプロセッサなどのプロセッサを有する何らかのシステムを含む。
プログラムコードは、処理システムと通信するための高レベル手続き型またはオブジェクト指向プログラミング言語で実現されてもよい。加えて、所望であれば、プログラムコードはアセンブリ言語または機械語で実現されてもよい。実際には、本明細書に記載される機構はいかなる特定のプログラミング言語にも範囲を限定されない。あらゆる場合に、言語はコンパイルまたは解釈された言語であってもよい。
少なくとも1つの実施形態の1つまたはそれ以上の局面は、プロセッサ内のさまざまな論理を表す機械読取り可能媒体に保存された表現的な命令によって実現されてもよく、その命令は機械によって読取られるときに、本明細書に記載される技術を行うための論理を機械に作成させる。こうした表現は「IPコア」として公知であり、有形の機械読取り可能媒体に保存されてさまざまな顧客または製造設備に供給されることによって、その論理またはプロセッサを実際に作成する製作機械にロードされてもよい。
こうした機械読取り可能記憶媒体は、機械またはデバイスによって製造または形成された物品の非一時的な有形の配置を限定なしに含んでもよく、それはたとえば、ハードディスク、ならびにフロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD−ROM)、書換え可能コンパクトディスク(compact disk rewritable's:CD−RW)、および磁気光学ディスクを含むあらゆるその他のタイプのディスク、半導体デバイス、たとえばリードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、たとえば動的ランダムアクセスメモリ(DRAM)および静的ランダムアクセスメモリ(SRAM)など、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)など、磁気もしくは光学カード、または電子命令を保存するために好適なあらゆるその他のタイプの媒体などの記憶媒体を含んでもよい。
したがって、本発明の実施形態はさらに、本明細書に記載される構造、回路、装置、プロセッサおよび/またはシステムの特徴を定義する、たとえばハードウェア記述言語(Hardware Description Language:HDL)などの命令または設計データを含む、非一時的な有形の機械読取り可能媒体を含む。こうした実施形態はプログラム製品と呼ばれてもよい。
いくつかの場合には、命令コンバータを用いて命令をソース命令セットから目標命令セットに変換してもよい。たとえば、命令コンバータは命令を、コアによって処理される1つまたは複数の他の命令に(例、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて)変換(translate)、変形、エミュレート、または別様で変換(convert)してもよい。命令コンバータはソフトウェア、ハードウェア、ファームウェア、またはその組み合わせにおいて実現されてもよい。命令コンバータは、オンプロセッサ、オフプロセッサ、または部分的にオンプロセッサで部分的にオフプロセッサであってもよい。
よって、少なくとも1つの実施形態に従う1つまたは複数の命令を実行するための技術が開示される。添付の図面には特定の例示的実施形態が記載されて図示されるが、こうした実施形態は単なる例示であって広い発明を限定するものではなく、本発明は図示されて記載される特定の構成および配置に限定されないことが理解されるべきである。なぜなら、本開示を検討する際に通常の当業者にはさまざまなその他の修正が生じ得るからである。本技術のように、成長が速くさらなる進歩が容易に予知されない技術分野においては、本開示の原理または添付の請求項の範囲から逸脱することなく、技術的進歩を可能にすることによって容易にされるとおりに、開示される実施形態の配置および詳細が容易に修正可能となり得る。
本実施形態の例を下記の各項目として示す。
[項目1]
プロセッサであって、
第1のハードウェアスレッドおよび第2のハードウェアスレッドと、
前記第1および第2のハードウェアスレッドによってアクセス可能な、対応するセキュアエンクレーブに割り当てられた共有ページアドレスに対するキャッシュラインにセキュアデータを保存するためのエンクレーブページキャッシュと、
前記プロセッサによる実行のために第1の命令を復号するための復号段階であって、前記第1の命令は前記共有ページアドレスをオペランドとして指定する、復号段階と、
1つまたは複数の実行ユニットとを含み、前記1つまたは複数の実行ユニットは、前記復号された第1の命令に応答して、
前記共有ページアドレスに対するエンクレーブページキャッシュマッピングに対応するエントリをマーク付けすることによって、前記第1または第2のハードウェアスレッドのいずれかが前記共有ページアドレスに対応するセキュアデータにアクセスするための新たな変換の作成をブロックする、プロセッサ。
[項目2]
前記第1の命令は、任意の変換ルックアサイドバッファ(TLB)における前記共有ページアドレスに対応する新たな変換の前記作成を防ぐために前記共有ページアドレスを指定するEBLOCK命令である、項目1に記載のプロセッサ。
[項目3]
前記プロセッサによる実行のために第2の命令を復号するための前記復号段階であって、前記第2の命令は前記セキュアエンクレーブをオペランドとして指定する、前記復号段階と、
1つまたは複数の実行ユニットとを含み、前記1つまたは複数の実行ユニットは、前記復号された第2の命令に応答して、
前記セキュアエンクレーブに対応する前記エンクレーブページキャッシュ内のセキュアデータに現在アクセス中のハードウェアスレッドを記録する、項目1または2に記載のプロセッサ。
[項目4]
前記第2の命令は、前記セキュアエンクレーブにおいて現在実行中のハードウェアスレッドの数を記録するために前記セキュアエンクレーブを指定するETRACK命令である、項目3に記載のプロセッサ。
[項目5]
前記1つまたは複数の実行ユニットは、前記復号された第2の命令に応答して、
前記ハードウェアスレッドのいずれかが前記セキュアエンクレーブから出るときに、前記セキュアエンクレーブにおいて現在実行中のハードウェアスレッドの前記記録された数を減らす、項目4に記載のプロセッサ。
[項目6]
前記1つまたは複数の実行ユニットは、前記復号された第1の命令に応答して、
前記ハードウェアスレッドのいずれかが前記セキュアエンクレーブから出るときに、前記セキュアエンクレーブにおいて現在実行中のハードウェアスレッドの前記記録された数を減らす、項目4に記載のプロセッサ。
[項目7]
プロセッサであって、
第1のハードウェアスレッドおよび第2のハードウェアスレッドと、
前記第1および第2のハードウェアスレッドによってアクセス可能な、対応するセキュアエンクレーブに割り当てられた共有ページアドレスに対するキャッシュラインにセキュアデータを保存するためのエンクレーブページキャッシュと、
前記プロセッサによる実行のために第1の命令を復号するための復号段階であって、前記第1の命令は前記セキュアエンクレーブをオペランドとして指定する、復号段階と、
1つまたは複数の実行ユニットとを含み、前記1つまたは複数の実行ユニットは、前記復号された第1の命令に応答して、
前記セキュアエンクレーブに対応する前記エンクレーブページキャッシュ内のセキュアデータに現在アクセス中のハードウェアスレッドを記録する、プロセッサ。
[項目8]
前記第1の命令は、前記セキュアエンクレーブにおいて現在実行中のハードウェアスレッドの数を記録するために前記セキュアエンクレーブを指定するETRACK命令である、項目7に記載のプロセッサ。
[項目9]
前記1つまたは複数の実行ユニットは、前記復号された第1の命令に応答して、
前記ハードウェアスレッドのいずれかが前記セキュアエンクレーブから出るときに、前記セキュアエンクレーブにおいて現在実行中のハードウェアスレッドの前記記録された数を減らす、項目8に記載のプロセッサ。
[項目10]
前記プロセッサによる実行のために第2の命令を復号するための前記復号段階であって、前記第2の命令は前記共有ページアドレスをオペランドとして指定する、前記復号段階と、
1つまたは複数の実行ユニットとを含み、前記1つまたは複数の実行ユニットは、前記復号された第2の命令に応答して、
前記共有ページアドレスに対するエンクレーブページキャッシュマッピングに対応するエントリをマーク付けすることによって、前記第1または第2のハードウェアスレッドのいずれかが前記共有ページアドレスに対応するセキュアデータにアクセスするための新たな変換の作成をブロックする、項目7から9のいずれか1項に記載のプロセッサ。
[項目11]
前記第2の命令は、任意のTLBにおける前記共有ページアドレスに対応する新たな変換の前記作成を防ぐために前記共有ページアドレスを指定するEBLOCK命令である、項目10に記載のプロセッサ。
[項目12]
前記1つまたは複数の実行ユニットは、前記復号された第2の命令に応答して、
前記ハードウェアスレッドのいずれかが前記セキュアエンクレーブから出るときに、前記セキュアエンクレーブにおいて現在実行中のハードウェアスレッドの前記記録された数を減らす、項目11に記載のプロセッサ。
[項目13]
前記プロセッサによる実行のために第2の命令を復号するための前記復号段階であって、前記第2の命令は前記共有ページアドレスをオペランドとして指定する、前記復号段階と、
1つまたは複数の実行ユニットとを含み、前記1つまたは複数の実行ユニットは、前記復号された第2の命令に応答して、
前記セキュアエンクレーブにおいて現在実行中のハードウェアスレッドの前記記録された数が0に達するときに、前記共有ページアドレスに対応する前記エンクレーブページキャッシュ内のセキュアデータの退去および書戻しを行う、項目7から12のいずれか1項に記載のプロセッサ。
[項目14]
前記第2の命令は、前記エンクレーブページキャッシュからの前記共有ページの退去および書戻しを行うために前記共有ページアドレスを指定するエンクレーブ書戻し(EWB)命令である、項目13に記載のプロセッサ。
[項目15]
前記セキュアエンクレーブにおいて現在実行中のハードウェアスレッドの前記記録された数が0に達しないとき、前記第2の命令は失敗する、項目14に記載のプロセッサ。
[項目16]
前記第2の命令は、前記セキュアエンクレーブにおいて現在実行中のハードウェアスレッドの前記記録された数が0に達するまで実行を待つ、項目14に記載のプロセッサ。
[項目17]
方法であって、
マルチスレッドプロセッサにおいて第1のハードウェアスレッドおよび第2のハードウェアスレッドを実行するステップと、
前記第1および第2のハードウェアスレッドによってアクセス可能な、対応するセキュアエンクレーブに割り当てられた共有ページアドレスに対するキャッシュラインにセキュアデータを保存するステップと、
前記プロセッサによる実行のために第1の命令を復号するステップであって、前記第1の命令は前記共有ページアドレスをオペランドとして指定する、ステップと、
前記第1の命令を復号するステップに応答して、前記共有ページアドレスに対するエンクレーブページキャッシュマッピングに対応するエントリをマーク付けすることによって、前記第1または第2のハードウェアスレッドのいずれかが前記共有ページアドレスに対応するセキュアデータにアクセスするための新たな変換の作成をブロックするステップと
を含む、方法。
[項目18]
前記第1の命令は、任意のTLBにおける前記共有ページアドレスに対応する新たな変換の前記作成を防ぐために前記共有ページアドレスを指定するEBLOCK命令である、項目17に記載の方法。
[項目19]
前記第1の命令を復号するステップに応答して、前記セキュアエンクレーブに対応する前記エンクレーブページキャッシュ内のセキュアデータに現在アクセス中のハードウェアスレッドを記録するステップをさらに含む、項目17または18に記載の方法。
[項目20]
前記第1の命令を復号するステップに応答して、前記ハードウェアスレッドのいずれかが前記セキュアエンクレーブから出るときに、前記セキュアエンクレーブにおいて現在実行中のハードウェアスレッドの前記記録された数が減少する、項目19に記載の方法。
[項目21]
前記対応するハードウェアスレッドが前記セキュアエンクレーブから出るときに、前記ハードウェアスレッドのいずれかに対応するTLBに前記共有ページアドレスに対応する変換がフラッシュされる、項目20に記載の方法。
[項目22]
前記プロセッサによる実行のために第2の命令を復号するステップであって、前記第2の命令は前記セキュアエンクレーブをオペランドとして指定する、ステップと、
前記第2の命令を復号するステップに応答して、前記セキュアエンクレーブに対応する前記エンクレーブページキャッシュ内のセキュアデータに現在アクセス中のハードウェアスレッドを記録するステップと
を含む、項目17から21のいずれか1項に記載の方法。
[項目23]
前記第2の命令を復号するステップに応答して、前記ハードウェアスレッドのいずれかが前記セキュアエンクレーブから出るときに、前記セキュアエンクレーブにおいて現在実行中のハードウェアスレッドの前記記録された数が減少する、項目22に記載の方法。
[項目24]
前記プロセッサによる実行のために第3の命令を復号するステップであって、前記第3の命令は前記共有ページアドレスをオペランドとして指定する、ステップと、
前記第3の命令を復号するステップに応答して、前記セキュアエンクレーブにおいて現在実行中のハードウェアスレッドの前記記録された数が0に達するときに、前記共有ページアドレスに対応する前記エンクレーブページキャッシュ内のセキュアデータの退去および書戻しを行うステップと
を含む、項目22に記載の方法。
[項目25]
前記プロセッサによる実行のために前記第3の命令を復号するステップに応答して、前記セキュアデータをメモリまたは不揮発性記憶装置に書戻す前に、前記共有ページアドレスに対応する前記エンクレーブページキャッシュ内の前記セキュアデータが暗号化される、項目24に記載の方法。
[項目26]
前記セキュアエンクレーブにおいて現在実行中のハードウェアスレッドの前記記録された数が0に達しないとき、前記第3の命令は失敗する、項目24に記載の方法。
[項目27]
前記第3の命令は、前記セキュアエンクレーブにおいて現在実行中のハードウェアスレッドの前記記録された数が0に達するまで実行を待つ、項目24に記載の方法。
[項目28]
方法であって、
マルチスレッドプロセッサにおいて第1のハードウェアスレッドおよび第2のハードウェアスレッドを実行するステップと、
前記第1および第2のハードウェアスレッドによってアクセス可能な、対応するセキュアエンクレーブに割り当てられた共有ページアドレスに対するキャッシュラインにセキュアデータを保存するステップと、
前記プロセッサによる実行のために第1の命令を復号するステップであって、前記第1の命令は前記セキュアエンクレーブをオペランドとして指定する、ステップと、
前記第1の命令を復号するステップに応答して、前記セキュアエンクレーブに対応するエンクレーブページキャッシュ内のセキュアデータに現在アクセス中のハードウェアスレッドを記録するステップと
を含む、方法。
[項目29]
前記第1の命令は、前記セキュアエンクレーブにおいて現在実行中のハードウェアスレッドの数を記録するために前記セキュアエンクレーブを指定するETRACK命令である、項目28に記載の方法。
[項目30]
前記第1の命令を復号するステップに応答して、前記ハードウェアスレッドのいずれかが前記セキュアエンクレーブから出るときに、前記セキュアエンクレーブにおいて現在実行中のハードウェアスレッドの前記記録された数が減少する、項目28または29に記載の方法。
[項目31]
前記第1の命令を復号するステップに応答して、任意のTLBにおける前記共有ページアドレスに対応する新たな変換の作成が防がれる、項目30に記載の方法。
[項目32]
前記プロセッサによる実行のために第2の命令を復号するステップであって、前記第2の命令は前記共有ページアドレスをオペランドとして指定する、ステップと、
前記第2の命令を復号するステップに応答して、前記セキュアエンクレーブにおいて現在実行中のハードウェアスレッドの前記記録された数が0に達するときに、前記共有ページアドレスに対応する前記エンクレーブページキャッシュ内のセキュアデータの退去および書戻しを行うステップと
を含む、項目30に記載の方法。
[項目33]
前記プロセッサによる実行のために前記第2の命令を復号するステップに応答して、前記セキュアデータをメモリまたは不揮発性記憶装置に書戻す前に、前記共有ページアドレスに対応する前記エンクレーブページキャッシュ内の前記セキュアデータが暗号化される、項目32に記載の方法。
[項目34]
前記セキュアエンクレーブにおいて現在実行中のハードウェアスレッドの前記記録された数が0に達しないとき、前記第2の命令は失敗する、項目33に記載の方法。
[項目35]
処理システムであって、
メモリと、
プロセッサとを含み、前記プロセッサは、
第1のハードウェアスレッドおよび第2のハードウェアスレッドと、
前記第1および第2のハードウェアスレッドによってアクセス可能な、対応するセキュアエンクレーブに割り当てられた共有ページアドレスに対するキャッシュラインにセキュアデータを保存するためのエンクレーブページキャッシュと、
前記プロセッサによる実行のために第1の命令を復号するための復号段階であって、前記第1の命令は前記共有ページアドレスをオペランドとして指定する、復号段階と、
1つまたは複数の実行ユニットであって、前記復号された第1の命令に応答して、前記共有ページアドレスに対するエンクレーブページキャッシュマッピングに対応するエントリをマーク付けすることによって、前記第1または第2のハードウェアスレッドのいずれかが前記共有ページアドレスに対応するセキュアデータにアクセスするための新たな変換の作成をブロックする、1つまたは複数の実行ユニットと、
前記プロセッサによる実行のために第2の命令を復号するための前記復号段階であって、前記第2の命令は前記セキュアエンクレーブをオペランドとして指定する、前記復号段階と、
前記1つまたは複数の実行ユニットであって、前記復号された第2の命令に応答して、
前記セキュアエンクレーブに対応する前記エンクレーブページキャッシュ内のセキュアデータに現在アクセス中のハードウェアスレッドを記録し、
前記ハードウェアスレッドのいずれかが前記セキュアエンクレーブから出るときに、前記セキュアエンクレーブにおいて現在実行中のハードウェアスレッドの前記記録された数を減らす、前記1つまたは複数の実行ユニットと
を含む、処理システム。
[項目36]
前記対応するハードウェアスレッドが前記セキュアエンクレーブから出るときに、前記ハードウェアスレッドのいずれかに対応するTLBにおいて前記共有ページアドレスに対応する変換がフラッシュされる、項目35に記載の処理システム。
[項目37]
前記プロセッサは、
前記プロセッサによる実行のために第3の命令を復号するための前記復号段階であって、前記第3の命令は前記共有ページアドレスをオペランドとして指定する、前記復号段階と、
前記1つまたは複数の実行ユニットであって、前記復号された第3の命令に応答して、前記セキュアエンクレーブにおいて現在実行中のハードウェアスレッドの前記記録された数が0に達するときに、前記共有ページアドレスに対応する前記エンクレーブページキャッシュ内のセキュアデータの退去および書戻しを行う、前記1つまたは複数の実行ユニットと
を含む、項目36に記載の処理システム。
[項目38]
前記セキュアエンクレーブにおいて現在実行中のハードウェアスレッドの前記記録された数が0に達しないとき、前記第3の命令は失敗する、項目37に記載の処理システム。

Claims (22)

  1. プロセッサであって、
    第1のハードウェアスレッドおよび第2のハードウェアスレッドと、
    前記第1および第2のハードウェアスレッドによってアクセス可能な、有ページアドレスに対するキャッシュラインに保護データを保持するためのキャッシュの一部と、
    前記プロセッサによる実行のために第1の命令を復号するための復号段階であって、前記第1の命令は前記共有ページアドレスをオペランドとして指定する、復号段階と、
    1つまたは複数の実行ユニットとを含み、前記1つまたは複数の実行ユニットは、前記復号された第1の命令に応答して、
    前記共有ページアドレスに対するージキャッシュマッピングに対応するエントリをマーク付けすることによって、前記第1または第2のハードウェアスレッドのいずれかが前記共有ページアドレスに対応する保護データにアクセスするための新たな変換の作成をブロックする、プロセッサ。
  2. 前記第1の命令は、任意の変換ルックアサイドバッファ(TLB)における前記共有ページアドレスに対応する新たな変換の前記作成を防ぐために前記共有ページアドレスを指定するEBLOCK命令である、請求項1に記載のプロセッサ。
  3. 前記プロセッサによる実行のために第2の命令を復号するための前記復号段階であって、前記第2の命令は前記キャッシュの前記一部をオペランドとして指定する、前記復号段階と、
    1つまたは複数の実行ユニットとを含み、前記1つまたは複数の実行ユニットは、前記復号された第2の命令に応答して、
    前記キャッシュの前記一部内の保護データに現在アクセス中のハードウェアスレッドを記録する、請求項1または2に記載のプロセッサ。
  4. 前記第2の命令は、前記保護データに現在アクセス中のハードウェアスレッドの数を記録するために前記キャッシュの前記一部を指定するETRACK命令である、請求項3に記載のプロセッサ。
  5. 前記1つまたは複数の実行ユニットは、前記復号された第2の命令に応答して、
    前記ハードウェアスレッドのいずれかが、前記キャッシュの前記一部から出て、前記保護データにアクセスするための1つまたは複数の変換をフラッシュするときに、前記保護データに現在アクセス中のハードウェアスレッドの前記記録された数を減らす、請求項4に記載のプロセッサ。
  6. 前記1つまたは複数の実行ユニットは、前記復号された第1の命令に応答して、
    前記ハードウェアスレッドのいずれかが、前記キャッシュの前記一部から出て、前記保護データにアクセスするための1つまたは複数の変換をフラッシュするときに、前記保護データに現在アクセス中のハードウェアスレッドの前記記録された数を減らす、請求項4に記載のプロセッサ。
  7. 方法であって、
    マルチスレッドプロセッサにおいて第1のハードウェアスレッドおよび第2のハードウェアスレッドを実行するステップと、
    前記第1および第2のハードウェアスレッドによってアクセス可能な、有ページアドレスに対するキャッシュラインに保護データを保存するステップと、
    前記プロセッサによる実行のために第1の命令を復号するステップであって、前記第1の命令は前記共有ページアドレスをオペランドとして指定する、ステップと、
    前記第1の命令を復号するステップに応答して、前記共有ページアドレスに対するージキャッシュマッピングに対応するエントリをマーク付けすることによって、前記第1または第2のハードウェアスレッドのいずれかが前記共有ページアドレスに対応する保護データにアクセスするための新たな変換の作成をブロックするステップと
    を含む、方法。
  8. 前記第1の命令は、任意のTLBにおける前記共有ページアドレスに対応する新たな変換の前記作成を防ぐために前記共有ページアドレスを指定するEBLOCK命令である、請求項に記載の方法。
  9. 前記第1の命令を復号するステップに応答して、キャッシュの一部内の保護データに現在アクセス中のハードウェアスレッドを記録するステップをさらに含む、請求項またはに記載の方法。
  10. 前記第1の命令を復号するステップに応答して、前記ハードウェアスレッドのいずれかが、前記キャッシュの前記一部から出て、前記保護データにアクセスするための1つまたは複数の変換をフラッシュするときに、前記キャッシュの前記一部内の前記保護データに現在アクセス中のハードウェアスレッドの前記記録された数が減少する、請求項に記載の方法。
  11. 前記対応するハードウェアスレッドが、保護データを保持するための前記キャッシュの前記一部から出るときに、前記ハードウェアスレッドのいずれかに対応するTLBに前記共有ページアドレスに対応する変換がフラッシュされる、請求項10に記載の方法。
  12. 前記プロセッサによる実行のために第2の命令を復号するステップであって、前記第2の命令はキャッシュの一部をオペランドとして指定する、ステップと、
    前記第2の命令を復号するステップに応答して、前記キャッシュの前記一部内の保護データに現在アクセス中のハードウェアスレッドを記録するステップと
    を含む、請求項から11のいずれか1項に記載の方法。
  13. 前記第2の命令を復号するステップに応答して、前記ハードウェアスレッドのいずれかが、前記キャッシュの前記一部から出て、前記保護データにアクセスするための1つまたは複数の変換をフラッシュするときに、前記キャッシュの前記一部内の保護データに現在アクセス中のハードウェアスレッドの前記記録された数が減少する、請求項12に記載の方法。
  14. 前記プロセッサによる実行のために第3の命令を復号するステップであって、前記第3の命令は前記共有ページアドレスをオペランドとして指定する、ステップと、
    前記第3の命令を復号するステップに応答して、前記キャッシュの前記一部内の保護データに現在アクセス中のハードウェアスレッドの前記記録された数が0に達するときに、前記共有ページアドレスに対応する前記キャッシュの前記一部内の保護データの退去および書戻しを行うステップと
    を含む、請求項12に記載の方法。
  15. 前記プロセッサによる実行のために前記第3の命令を復号するステップに応答して、前記保護データをメモリまたは不揮発性記憶装置に書戻す前に、前記共有ページアドレスに対応する前記キャッシュの前記一部内の前記保護データが暗号化される、請求項14に記載の方法。
  16. 前記キャッシュの前記一部内の保護データに現在アクセス中のハードウェアスレッドの前記記録された数が0に達しないとき、前記第3の命令は失敗する、請求項14に記載の方法。
  17. 前記第3の命令は、前記キャッシュの前記一部内の保護データに現在アクセス中のハードウェアスレッドの前記記録された数が0に達するまで実行を待つ、請求項14に記載の方法。
  18. 処理システムであって、
    メモリと、
    プロセッサとを含み、前記プロセッサは、
    第1のハードウェアスレッドおよび第2のハードウェアスレッドと、
    前記第1および第2のハードウェアスレッドによってアクセス可能な、対応するセキュアエンクレーブに割り当てられた共有ページアドレスに対するキャッシュラインに保護データを保持するためのキャッシュの一部と、
    前記プロセッサによる実行のために第1の命令を復号するための復号段階であって、前記第1の命令は前記共有ページアドレスをオペランドとして指定する、復号段階と、
    1つまたは複数の実行ユニットであって、前記復号された第1の命令に応答して、前記共有ページアドレスに対するージキャッシュマッピングに対応するエントリをマーク付けすることによって、前記第1または第2のハードウェアスレッドのいずれかが前記共有ページアドレスに対応する保護データにアクセスするための新たな変換の作成をブロックする、1つまたは複数の実行ユニットと、
    含む、処理システム。
  19. 前記プロセッサは、
    前記プロセッサによる実行のために第2の命令を復号するための前記復号段階であって、前記第2の命令は前記キャッシュの前記一部をオペランドとして指定する、前記復号段階と、
    前記1つまたは複数の実行ユニットであって、前記復号された第2の命令に応答して、
    前記キャッシュの前記一部内の保護データに現在アクセス中のハードウェアスレッドを記録し、
    前記ハードウェアスレッドのいずれかが、前記キャッシュの前記一部から出て、前記保護データにアクセスするための1つまたは複数の変換をフラッシュするときに、前記キャッシュの前記一部内の保護データに現在アクセス中のハードウェアスレッドの前記記録された数を減らす、前記1つまたは複数の実行ユニットと、
    を含む、請求項18に記載の処理システム。
  20. 前記対応するハードウェアスレッドが、保護データを保持するための前記キャッシュの前記一部から出るときに、前記ハードウェアスレッドのいずれかに対応するTLBにおいて前記共有ページアドレスに対応する変換がフラッシュされる、請求項18または19に記載の処理システム。
  21. 前記プロセッサは、
    前記プロセッサによる実行のために第3の命令を復号するための前記復号段階であって、前記第3の命令は前記共有ページアドレスをオペランドとして指定する、前記復号段階と、
    前記1つまたは複数の実行ユニットであって、前記復号された第3の命令に応答して、前記キャッシュの前記一部内の保護データに現在アクセス中のハードウェアスレッドの前記記録された数が0に達するときに、前記共有ページアドレスに対応する前記キャッシュの前記一部内の保護データの退去および書戻しを行う、前記1つまたは複数の実行ユニットと
    を含む、請求項19に記載の処理システム。
  22. 前記キャッシュの前記一部内の保護データに現在アクセス中のハードウェアスレッドの前記記録された数が0に達しないとき、前記第3の命令は失敗する、請求項21に記載の処理システム。
JP2015170962A 2013-03-31 2015-08-31 セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するための命令および論理 Active JP6344614B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/854,107 2013-03-31
US13/854,107 US9430384B2 (en) 2013-03-31 2013-03-31 Instructions and logic to provide advanced paging capabilities for secure enclave page caches

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2014028162A Division JP5802290B2 (ja) 2013-03-31 2014-02-18 セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するための命令および論理

Publications (2)

Publication Number Publication Date
JP2016006681A JP2016006681A (ja) 2016-01-14
JP6344614B2 true JP6344614B2 (ja) 2018-06-20

Family

ID=50737713

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2014028162A Active JP5802290B2 (ja) 2013-03-31 2014-02-18 セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するための命令および論理
JP2015170962A Active JP6344614B2 (ja) 2013-03-31 2015-08-31 セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するための命令および論理

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2014028162A Active JP5802290B2 (ja) 2013-03-31 2014-02-18 セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するための命令および論理

Country Status (7)

Country Link
US (2) US9430384B2 (ja)
JP (2) JP5802290B2 (ja)
KR (1) KR101628886B1 (ja)
CN (1) CN104484284B (ja)
BR (1) BR102014006806A2 (ja)
DE (1) DE102014004563A1 (ja)
GB (4) GB2515611B (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10867092B2 (en) 2017-12-16 2020-12-15 Intel Corporation Avoiding asynchronous enclave exits based on requests to invalidate translation lookaside buffer entries

Families Citing this family (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9378560B2 (en) * 2011-06-17 2016-06-28 Advanced Micro Devices, Inc. Real time on-chip texture decompression using shader processors
US9430384B2 (en) 2013-03-31 2016-08-30 Intel Corporation Instructions and logic to provide advanced paging capabilities for secure enclave page caches
US9705892B2 (en) * 2014-06-27 2017-07-11 Intel Corporation Trusted time service for offline mode
US9684608B2 (en) * 2014-10-28 2017-06-20 Intel Corporation Maintaining a secure processing environment across power cycles
US9710622B2 (en) 2015-02-23 2017-07-18 Intel Corporation Instructions and logic to fork processes of secure enclaves and establish child enclaves in a secure enclave page cache
US9870467B2 (en) * 2015-03-27 2018-01-16 Intel Corporation Apparatus and method for implementing a forked system call in a system with a protected region
FR3035241B1 (fr) * 2015-04-16 2017-12-22 Inside Secure Procede de partage d'une memoire entre au moins deux entites fonctionnelles
WO2016204766A1 (en) 2015-06-18 2016-12-22 Hewlett Packard Enterprise Development Lp Transmitting contents of an operation field to a media controller
US9710401B2 (en) * 2015-06-26 2017-07-18 Intel Corporation Processors, methods, systems, and instructions to support live migration of protected containers
US10664179B2 (en) 2015-09-25 2020-05-26 Intel Corporation Processors, methods and systems to allow secure communications between protected container memory and input/output devices
US9460011B1 (en) 2015-12-14 2016-10-04 International Business Machines Corporation Memory reference estimation method and device based on improved cache
US9798641B2 (en) * 2015-12-22 2017-10-24 Intel Corporation Method to increase cloud availability and silicon isolation using secure enclaves
US10534724B2 (en) * 2015-12-24 2020-01-14 Intel Corporation Instructions and logic to suspend/resume migration of enclaves in a secure enclave page cache
US10354095B2 (en) 2016-03-31 2019-07-16 Intel Corporation Methods and apparatus to initialize enclaves on target processors
US10346641B2 (en) 2016-09-23 2019-07-09 Intel Corporation Processors, methods, systems, and instructions to determine whether to load encrypted copies of protected container pages into protected container memory
US10180854B2 (en) * 2016-09-28 2019-01-15 Intel Corporation Processor extensions to identify and avoid tracking conflicts between virtual machine monitor and guest virtual machine
US20180095892A1 (en) * 2016-10-01 2018-04-05 Intel Corporation Processors, methods, systems, and instructions to determine page group identifiers, and optionally page group metadata, associated with logical memory addresses
US10120805B2 (en) * 2017-01-18 2018-11-06 Intel Corporation Managing memory for secure enclaves
CN108469986B (zh) * 2017-02-23 2021-04-09 华为技术有限公司 一种数据迁移方法及装置
US10372452B2 (en) * 2017-03-14 2019-08-06 Samsung Electronics Co., Ltd. Memory load to load fusing
US10552153B2 (en) * 2017-03-31 2020-02-04 Intel Corporation Efficient range-based memory writeback to improve host to device communication for optimal power and performance
CN107273138A (zh) * 2017-07-04 2017-10-20 杭州铜板街互联网金融信息服务有限公司 基于Android业务模块间交互的解耦方法和系统
US10534725B2 (en) * 2017-07-25 2020-01-14 International Business Machines Corporation Computer system software/firmware and a processor unit with a security module
CN107392011B (zh) * 2017-08-22 2019-11-22 海光信息技术有限公司 一种内存页转移方法
US10552344B2 (en) * 2017-12-26 2020-02-04 Intel Corporation Unblock instruction to reverse page block during paging
US11126699B2 (en) * 2018-02-07 2021-09-21 Nec Corporation Replica trusted execution environment: enabling seamless replication of trusted execution environment (TEE)-based enclaves in the cloud
US10970390B2 (en) * 2018-02-15 2021-04-06 Intel Corporation Mechanism to prevent software side channels
US10649911B2 (en) * 2018-03-29 2020-05-12 Intel Corporation Supporting memory paging in virtualized systems using trust domains
CN112005237A (zh) 2018-04-30 2020-11-27 谷歌有限责任公司 安全区中的处理器与处理加速器之间的安全协作
CN112005230A (zh) * 2018-04-30 2020-11-27 谷歌有限责任公司 通过统一的安全区接口管理安全区创建
EP4155996A1 (en) 2018-04-30 2023-03-29 Google LLC Enclave interactions
US10725911B2 (en) * 2018-12-10 2020-07-28 Sap Se Non-Uniform pagination of columnar data
WO2019120335A2 (en) * 2019-04-19 2019-06-27 Alibaba Group Holding Limited Methods and devices for executing trusted applications on processor with support for protected execution environments
US11436016B2 (en) * 2019-12-04 2022-09-06 Advanced Micro Devices, Inc. Techniques for improving operand caching

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5933627A (en) * 1996-07-01 1999-08-03 Sun Microsystems Thread switch on blocked load or store using instruction thread field
US6185258B1 (en) * 1997-09-16 2001-02-06 At&T Wireless Services Inc. Transmitter diversity technique for wireless communications
US6539470B1 (en) * 1999-11-16 2003-03-25 Advanced Micro Devices, Inc. Instruction decode unit producing instruction operand information in the order in which the operands are identified, and systems including same
JP3866597B2 (ja) * 2002-03-20 2007-01-10 株式会社東芝 内部メモリ型耐タンパプロセッサおよび秘密保護方法
WO2004006075A1 (ja) * 2002-07-09 2004-01-15 Fujitsu Limited 開放型汎用耐攻撃cpu及びその応用システム
US7475220B1 (en) * 2003-08-18 2009-01-06 Cray Incorporated Buffer overflow detection
US8074051B2 (en) * 2004-04-07 2011-12-06 Aspen Acquisition Corporation Multithreaded processor with multiple concurrent pipelines per thread
US7657754B2 (en) * 2005-12-08 2010-02-02 Agere Systems Inc Methods and apparatus for the secure handling of data in a microcontroller
US7836320B2 (en) * 2006-07-07 2010-11-16 Arm Limited Power management in a data processing apparatus having a plurality of domains in which devices of the data processing apparatus can operate
US8108659B1 (en) * 2006-11-03 2012-01-31 Nvidia Corporation Controlling access to memory resources shared among parallel synchronizable threads
US7958320B2 (en) * 2006-12-05 2011-06-07 Intel Corporation Protected cache architecture and secure programming paradigm to protect applications
US8909601B2 (en) * 2007-11-13 2014-12-09 Oracle America, Inc. System and method for implementing shared scalable nonzero indicators
WO2010019916A1 (en) * 2008-08-14 2010-02-18 The Trustees Of Princeton University Hardware trust anchors in sp-enabled processors
JP2012508938A (ja) * 2008-11-14 2012-04-12 インテル・コーポレーション セキュアなアプリケーション実行方法および装置
US9305189B2 (en) * 2009-04-14 2016-04-05 Owl Computing Technologies, Inc. Ruggedized, compact and integrated one-way controlled interface to enforce confidentiality of a secure enclave
GB2481563B (en) * 2009-12-22 2017-07-19 Intel Corp Method and apparatus to provide secure application execution
US8677076B2 (en) * 2010-03-30 2014-03-18 Oracle International Corporation System and method for tracking references to shared objects using byte-addressable per-thread reference counters
US8181176B2 (en) * 2010-06-21 2012-05-15 Intel Corporation Uniform storage device access using partial virtual machine executing within a secure enclave session
US8972746B2 (en) * 2010-12-17 2015-03-03 Intel Corporation Technique for supporting multiple secure enclaves
US8832452B2 (en) * 2010-12-22 2014-09-09 Intel Corporation System and method for implementing a trusted dynamic launch and trusted platform module (TPM) using secure enclaves
US8954755B2 (en) * 2012-01-23 2015-02-10 International Business Machines Corporation Memory address translation-based data encryption with integrated encryption engine
US9223709B1 (en) * 2012-03-06 2015-12-29 Marvell International Ltd. Thread-aware cache memory management
US20140181484A1 (en) * 2012-12-21 2014-06-26 James Callister Mechanism to provide high performance and fairness in a multi-threading computer system
US9430384B2 (en) 2013-03-31 2016-08-30 Intel Corporation Instructions and logic to provide advanced paging capabilities for secure enclave page caches

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10867092B2 (en) 2017-12-16 2020-12-15 Intel Corporation Avoiding asynchronous enclave exits based on requests to invalidate translation lookaside buffer entries

Also Published As

Publication number Publication date
GB201601398D0 (en) 2016-03-09
JP5802290B2 (ja) 2015-10-28
BR102014006806A2 (pt) 2014-12-02
DE102014004563A1 (de) 2014-10-02
KR101628886B1 (ko) 2016-06-09
GB2522137B (en) 2015-12-02
CN104484284B (zh) 2017-11-21
GB2534037B8 (en) 2018-04-18
JP2016006681A (ja) 2016-01-14
US20140297962A1 (en) 2014-10-02
CN104484284A (zh) 2015-04-01
GB2515611B (en) 2015-06-03
US10592421B2 (en) 2020-03-17
GB201405732D0 (en) 2014-05-14
GB2522137A (en) 2015-07-15
GB2534037B (en) 2016-10-19
GB2528796B (en) 2016-05-18
JP2014203456A (ja) 2014-10-27
GB201505638D0 (en) 2015-05-13
US9430384B2 (en) 2016-08-30
GB2528796B8 (en) 2018-04-18
KR20140118862A (ko) 2014-10-08
GB201515835D0 (en) 2015-10-21
GB2515611A (en) 2014-12-31
GB2528796A (en) 2016-02-03
US20160371191A1 (en) 2016-12-22
GB2534037A (en) 2016-07-13
GB2528796A8 (en) 2018-04-18
GB2534037A8 (en) 2018-04-18

Similar Documents

Publication Publication Date Title
JP6344614B2 (ja) セキュアエンクレーブページキャッシュのための進歩したページング能力を提供するための命令および論理
US9990314B2 (en) Instructions and logic to interrupt and resume paging in a secure enclave page cache
CN107209722B (zh) 处理器、处理系统和用于指令执行的方法
JP6227621B2 (ja) 複数の試験ソースに対するor試験及びand試験機能を提供するために命令をフュージングする方法及び装置
CN108351839B (zh) 挂起/恢复飞地页面高速缓存中飞地的迁移的设备和方法
KR101842058B1 (ko) 푸싱형 버퍼 복사 및 저장 기능성을 제공하기 위한 명령어 및 논리
CN108351779B (zh) 用于安全指令执行流水线的指令和逻辑
US10346170B2 (en) Performing partial register write operations in a processor
CN108351784B (zh) 用于在乱序处理器中进行有序处理的指令和逻辑

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151008

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170217

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20180424

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180509

R150 Certificate of patent or registration of utility model

Ref document number: 6344614

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250