(57)【特許請求の範囲】
【請求項１】
第１プロセッサコアにて、第１の要求された情報を識別する仮想アドレスを含む第１メモリアクセス要求を生成することと、
トランスレーションルックアサイドバッファ（ＴＬＢ）にて、前記仮想アドレスと、前記第１メモリアクセス要求に関連する仮想マシン（ＶＭ）タグ値とに基づいて、前記ＴＬＢが前記仮想アドレス及び前記ＶＭタグ値のエントリを含むことを識別したことに応じて、前記仮想アドレスに対応するシステム物理アドレスと、前記ＶＭタグ値と、前記第１の要求された情報が暗号保護用に指定されているかどうかの指示と、をキャッシュのキャッシュコントローラに送信することと、
前記キャッシュコントローラにて、前記キャッシュが、前記ＶＭタグ値と、前記システム物理アドレスと、前記第１の要求された情報が暗号保護用に指定されているかどうかの指示と、に対応するエントリを含むことを識別したことに応じて、キャッシュヒットを示し、前記キャッシュにおいて前記第１メモリアクセス要求を満たすことと、
を備える、方法。
【請求項２】
前記第１メモリアクセス要求の前記仮想アドレスに対応するゲスト物理アドレスに含まれるビットに基づいて、前記第１の要求された情報が暗号保護用に指定されているのを識別すること、
をさらに備える、請求項１の方法。
【請求項３】
前記ゲスト物理アドレスを含むページテーブルに基づいて、前記ゲスト物理アドレスに含まれるビットを識別すること、
をさらに備える、請求項２の方法。
【請求項４】
前記第１の要求された情報が暗号保護用に指定されているのを識別したことに応じて、
前記メモリアクセス要求を生成した仮想マシンを示す仮想マシン識別値に基づいて、キーを識別すること、をさらに備え、
前記第１の要求された情報を暗号化することは、前記キーに基づいて前記第１の要求された情報を暗号化することを含む、
請求項１の方法。
【請求項５】
前記プロセッサコアから分離したセキュリティモジュールから前記キーを受信すること、
をさらに備える、請求項４の方法。
【請求項６】
前記第１メモリアクセス要求を受信することは、前記プロセッサコアで実行されるハイパーバイザを介して前記第１メモリアクセス要求を受信することを備える、
請求項１の方法。
【請求項７】
メモリコントローラにて、第２の要求された情報をメモリに書き込むための第２メモリアクセス要求を受信することと、
前記第２の要求された情報が暗号保護用に指定されていないのを識別したことに応じて、前記メモリコントローラにて、前記第２の要求された情報を暗号化せずに、前記メモリで記憶するために前記第２の要求された情報を提供することと、
をさらに備える、請求項１の方法。
【請求項８】
前記キャッシュが前記ＶＭタグ値に対応するエントリを含まないことを識別したことに応じて、キャッシュミスを示すこと、
をさらに備える、請求項１の方法。
【請求項９】
プロセッサのメモリコントローラにて、第１仮想マシンから第１メモリアクセス要求を受信したことに応じて、
前記第１仮想マシンに割り当てられた第１キーを識別することと、
前記第１キーに基づいて、前記第１メモリアクセス要求に関連した第１情報を前記メモリコントローラにて暗号化することと、
前記プロセッサのキャッシュにて、前記第１情報を識別する仮想アドレスを含む第２メモリアクセス要求を受信したことと、トランスレーションルックアサイドバッファ（ＴＬＢ）にて、前記仮想アドレスと、前記第２メモリアクセス要求に関連する仮想マシンタグ値とに基づいて、前記ＴＬＢが前記仮想アドレス及び前記仮想マシンタグ値のエントリを含むことを識別したこととに応じて、前記仮想アドレスに対応するシステム物理アドレスと、前記仮想マシンタグ値と、前記第１情報が暗号保護用に指定されているかどうかの指示と、をキャッシュのキャッシュコントローラに送信することと、
前記キャッシュコントローラにて、前記キャッシュが、前記仮想マシンタグ値と、前記システム物理アドレスと、前記第１情報が暗号保護用に指定されているかどうかの指示と、に対応するエントリを含むことを識別したことに応じて、キャッシュヒットを示し、前記キャッシュにおいて前記第１メモリアクセス要求を満たすことによって、暗号化された前記第１情報へのアクセスを提供することと、
を備える、方法。
【請求項１０】
前記メモリコントローラにて、前記第１キーとは異なる第２キーが割り当てられている第２仮想マシンから第３メモリアクセス要求を受信したことに応じて、
前記第２仮想マシンが前記第３メモリアクセス要求に関連する第１情報を正しく解釈できないようにすることと、
をさらに備える、請求項９の方法。
【請求項１１】
前記キャッシュが前記仮想マシンタグ値に対応するエントリを含まないことを識別したことに応じて、キャッシュミスを示すこと、
をさらに備える、請求項９の方法。
【請求項１２】
前記第１情報を暗号化することは、前記第１メモリアクセス要求の前記仮想アドレスに対応するゲスト物理アドレスに含まれるビットに基づいて前記第１情報が暗号保護用に指定されているのを識別したことに応じて、前記第１情報を暗号化することを備える、
請求項９の方法。
【請求項１３】
第１の要求された情報を識別する仮想アドレスを含む第１メモリアクセス要求を生成するプロセッサコアと、
トランスレーションルックアサイドバッファ（ＴＬＢ）であって、前記仮想アドレスと、前記第１メモリアクセス要求に関連する仮想マシン（ＶＭ）タグ値とに基づいて、前記仮想アドレス及び前記ＶＭタグ値のエントリを含むことを識別するＴＬＢと、
前記仮想アドレスに対応するシステム物理アドレスと、前記ＶＭタグ値と、前記第１の要求された情報が暗号保護用に指定されているかどうかの指示と、を前記ＴＬＢから受信するキャッシュのキャッシュコントローラであって、前記キャッシュが、前記ＶＭタグ値と、前記システム物理アドレスと、前記第１の要求された情報が暗号保護用に指定されているかどうかの指示と、に対応するエントリを含むことを識別したことに応じて、キャッシュヒットを示し、前記キャッシュにおいて前記第１メモリアクセス要求を満たすキャッシュコントローラと、を備える、
プロセッサ。
【請求項１４】
前記第１の要求された情報が暗号保護用に指定されているかどうかの指示は、前記第１メモリアクセス要求の前記仮想アドレスに対応するゲスト物理アドレスに含まれるビットを備える、
請求項１３のプロセッサ。
【請求項１５】
前記ゲスト物理アドレスを含むページテーブルに基づいて、前記ゲスト物理アドレスに含まれるビットを識別するアドレス生成ユニットをさらに備える、
請求項１４のプロセッサ。
【請求項１６】
第１仮想マシンから前記第１メモリアクセス要求を受信したことに応じて、前記第１仮想マシンに割り当てられた第１キーを識別し、前記第１メモリアクセス要求に関連する前記第１の要求された情報を前記第１キーに基づいて暗号化するメモリコントローラをさらに備える、
請求項１３のプロセッサ。
【請求項１７】
前記キャッシュコントローラは、
前記キャッシュが前記仮想マシンタグ値に対応するエントリを含まないことを識別したことに応じて、キャッシュミスを示す、
請求項１３のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、概してプロセッサに関し、より具体的には、プロセッサでの情報セキュリティに関する。
【背景技術】
【０００２】
多くのプロセッサアプリケーションにおいて、情報セキュリティの保護は重要な機能である。例えば、プロセッサは、ＩＡＡＳ（Infrastructure As A Service）環境内のサーバで使用されることが可能であり、ＩＡＡＳ環境では、プロセッサが１つ以上の仮想マシン（ＶＭ）を実行し、ＶＭ間のサーバハードウェアをパーティショニングしてＶＭを互いに隔離するためにハイパーバイザを実行する。様々な利用者のために異なるＶＭが実行されるので、各ＶＭによって採用された情報（命令及びデータ）を他のＶＭのアクセスから保護することが望ましい。従来、ハイパーバイザは、各ＶＭのために個別のメモリページテーブル及び他の論理エンティティを維持することによって、ＶＭ情報の隔離を維持している。しかしながら、ハイパーバイザの欠陥（例えば、バグ）は、一つのＶＭが他のＶＭの情報にアクセスすることを可能にする不法利用（exploitation）に対して当該ハイパーバイザ自体が脆弱になる原因となる可能性がある。例えばパーソナルコンピュータ等のように、より私的なセキュリティ環境までも、メモリモジュールに記憶されたデータが盗難の対象となり、不正アクセスの対象となる可能性がある。
【０００３】
本開示は、添付の図面を参照することによって、当業者により良く理解されることができ、その多数の特徴及び利点を明らかにすることができる。異なる図面で用いられる同じ符号は、類似又は同一の項目を示している。
【図面の簡単な説明】
【０００４】
【図１】いくつかの実施形態による、情報の安全な隔離のためにメモリコントローラで暗号化モジュールを用いる処理システムのブロック図である。
【図２】いくつかの実施形態による、仮想マシンの隔離のために提供される図１の処理システムの例示的な実装を示すブロック図である。
【図３】いくつかの実施形態による、図１の処理システムで保護用のメモリアクセス（secure memory accesses）を識別するためのトランスレーションルックアサイドバッファ及びページテーブルの使用を示すブロック図である。
【図４】いくつかの実施形態による、図１の処理システムで保護用のメモリアクセスを識別するためのゲスト及びホストページテーブルの使用を示すブロック図である。
【図５】いくつかの実施形態による、保護情報（secure information）を隔離するための図１のキャッシュに記憶されたタグの使用を示すブロック図である。
【図６】いくつかの実施形態による、保護情報を隔離するための図１のキャッシュのＴＬＢに記憶されたタグの使用を示すブロック図である。
【図７】いくつかの実施形態による、暗号保護用に指定された情報を保護するために図１のキャッシュでメモリアクセス要求を処理する方法のフロー図である。
【図８】いくつかの実施形態による、暗号保護用に指定された情報を保護するために図１のキャッシュでメモリアクセス要求を処理する他の方法のフロー図である。
【図９】いくつかの実施形態による、暗号保護用に指定された情報を保護するために図１のノースブリッジでメモリアクセス要求を処理する方法のフロー図である。
【図１０】いくつかの実施形態による、暗号保護を有効にするためにＶＭ識別値を割り当てる方法のフロー図である。
【図１１】いくつかの実施形態による、処理システムのコンポーネントのうち少なくとも一部を実装する集積回路デバイスを設計及び製造する方法を示すフロー図である。
【発明を実施するための形態】
【０００５】
図１〜１１は、プロセッサのメモリアクセスパスのハードウェア暗号化モジュールを用いて保護情報を暗号で隔離することによって、処理システムにて保護情報を保護するための技術を示す図である。いくつかの実施形態において、暗号化モジュールは、プロセッサのメモリコントローラ（例えば、ノースブリッジ）に配置されており、メモリコントローラに提供されたメモリアクセスの各々は、保護用のメモリアクセス（メモリアクセスに関連する情報が暗号保護用に指定されていることを示すメモリアクセス）であるか否かを示している。暗号化モジュールは、保護用のメモリアクセスに対して、メモリアクセスに関連するデータの（書き込みアクセスのための）暗号化又は（読み出しアクセスのための）復号化を実行する。プロセッサのメモリアクセスパスのハードウェアによって暗号化が行われるので、正しい暗号化／復号化キー（key）が無い場合には、メモリに記憶されたデータに対して意味のあるアクセスができない。
【０００６】
いくつかの実施形態において、プロセッサは、処理システムに用いられ、異なる仮想マシン（ＶＭ）を実行し、さらには、ハイパーバイザを実行して、ＶＭと処理システムのハードウェア（メモリを含む）との間にインタフェースを提供する。ＶＭが個別のユーザ（例えば、異なる利用者）によって実行され得ることから、例えば一つのＶＭが、他のＶＭが用いた情報（命令及びデータ）にアクセス不可能となるように、ＶＭを互いに隔離することが望ましい。従来、ハイパーバイザは、各ＶＭを、私的使用のために、メモリの専用部分及び処理システムの他のリソースに割り当てることによって、ＶＭを隔離するために用いられている。しかしながら、ハイパーバイザのバグ、又は、不法利用の媒介（vehicle）として作用するように悪意を持って変更されたハイパーバイザは、ハイパーバイザ又は所定のＶＭが、他のＶＭの情報を検査若しくは更に変更するのを可能にし得る。本明細書に記載された技術を用いて、メモリコントローラの暗号化モジュールが、ハイパーバイザによるアクセス、又は、他の実行しているＶＭによるアクセスから各ＶＭの情報を暗号で保護するために用いられる。プロセッサのメモリアクセスパスのハードウェア（以下、実行しているハイパーバイザ）に暗号保護が実装されているので、ハイパーバイザのバグ又は悪意あるハイパーバイザは、理解又は意味のある解釈をされることの不可能な暗号化されたデータのみへのアクセスを提供することになる。
【０００７】
例えば、いくつかの実施形態において、暗号化モジュールは、プロセッサにより実行されるＶＭごとに固有のキーを記憶する。いくつかの状況において、ＶＭ用のキーは、処理システムのプロセッサコアから分離したセキュリティモジュールにより生成され得るため、ハイパーバイザを含むプロセッサコアにて実行されるソフトウェアは、このキーにアクセス不可能である。暗号化モジュールは、メモリコントローラがメモリアクセス要求を受信したことに応じて、この要求を生成したＶＭを識別し、要求を行ったＶＭに対応するキーを用いて、当該要求と関連したデータを暗号化又は復号化する。したがって、このデータは、ハイパーバイザ又は他のＶＭによるアクセスからは暗号で保護される。図示するように、認証されていないＶＭが、他のＶＭに割り当てられたメモリ位置に記憶されたデータを、（例えば、ハイパーバイザのバグを利用することで）取得する場合であっても、このデータ自体が暗号化されているので、認証されていないＶＭにとっては意味がない。
【０００８】
いくつかの実施形態において、本明細書に記載された技術は、物理的に安全でない環境に採用された処理システムに実装され、処理システムのメモリは、不正な物理的アクセス（例えば、ハードウェアメモリモジュールの盗難、又は、メモリの物理的プロービング）の対象となる。しかしながら、暗号化モジュールが、保護用のデータを暗号化された形式でメモリに記憶させるため、この保護用のデータは、不正な物理的アクセスの対象となる場合であっても、有用になりにくい。
【０００９】
図１は、いくつかの実施形態による、情報の暗号保護を提供する処理システム１００を示す図である。この処理システム１００は、プロセッサ１０２と、メモリ１２０と、を含む。処理システム１００は、例えば、サーバ、パーソナルコンピュータ、タブレット、セットトップボックス、ゲーム機等の様々な電子デバイスの何れかに組み込まれ得る。一般に、プロセッサ１０２は、所定のタスクを実行するためにプロセッサ１０２の回路を操作する複数セットの命令（例えば、コンピュータプログラム）を実行するように構成されている。メモリ１２０は、プロセッサ１０２によって用いられたデータを記憶することにより、タスクの実行を促進する。メモリ１２０は、例えば、ランダムアクセスメモリ（ＲＡＭ）、フラッシュメモリ又はハードディスクドライブ（ＨＤＤ）等の不揮発性メモリであってもよいし、これらの組み合わせであってもよい。
【００１０】
複数セットの命令を実行する過程において、プロセッサ１０２は、データをメモリ１２０に記憶する書き込み要求と、メモリ１２０からデータを取得する読み出し要求と、を含むメモリアクセス要求を生成する。各メモリアクセス要求は、メモリアクセス要求のターゲットとなるメモリ１２０の位置を示すメモリアドレス（例えば、システム物理アドレス）を含む。メモリ１２０は、読み出し要求に応じて、読み出し要求のメモリアドレスに対応する位置に記憶された情報（データ又は命令）を取得し、この情報をプロセッサ１０２へ提供する。メモリ１２０は、書き込み要求に応じて、当該要求の書き込み情報を、当該要求のメモリアドレスに対応する位置に記憶する。
【００１１】
プロセッサ１０２は、セキュリティモジュール１３０を含む。セキュリティモジュール１３０は、プロセッサ１０２で実行されるエンティティ（例えば、仮想マシン、コンピュータプログラム等）の登録、実行されるエンティティ用のセキュリティキーの生成及び識別、セキュリティ操作のための処理システム１００の認証等を含む処理システム１００用のセキュリティ操作を実行するように設計及び構成された、汎用プロセッサ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）、プロセッサコアの動作モード、又は、他のモジュールである。いくつかの実施形態において、セキュリティモジュール１３０は、操作を実行することが許可される前に安全な登録プロセスを受けることができ、セキュリティ操作のみに限定された操作を有し得る。このため、セキュリティモジュール１３０は、不法利用に対して脆弱な状態で操作を実行することが不可能である。本明細書で更に記載されるように、セキュリティモジュール１３０は、処理システム１００において実行されるように登録されたエンティティを識別するためのセキュリティキーを生成することにより、処理システム１００における情報の暗号隔離、及び、かかる暗号隔離を有効にする他の操作をサポートする。
【００１２】
プロセッサ１０２は、命令の実行を促進するために、プロセッサコア１０４，１０６と、キャッシュ１０５，１０７，１０８と、ノースブリッジ１１０と、セキュリティモードレジスタ１２１と、を含む。プロセッサコア１０４，１０６は、命令を個別且つ同時に実行する処理ユニットである。いくつかの実施形態において、各プロセッサコア１０４，１０６は、命令をフェッチし、フェッチした命令を対応する操作に復号化し、処理システム１００のリソースを用いてメモリアクセス要求を含む操作を実行する、個別の命令パイプラインを含む。各プロセッサコア１０４，１０６は、メモリアクセス要求を、メモリアクセス要求に対応する情報を暗号保護用に指定することを示す保護用のメモリアクセス要求、又は、メモリアクセス要求に対応する情報を暗号保護用に指定しないことを示す保護用ではないメモリアクセス要求の２つの種類の何れかの種類として識別するように構成されている。
【００１３】
いくつかの実施形態において、処理システム１００は、メモリ１２０内で情報が記憶された位置に対応するメモリアドレス、又は、情報の種類（例えば、命令又はデータ）に対応するメモリアドレスに含まれる制御ビットに基づいて、情報用のセキュリティ指定（情報が暗号で保護されるものであるか否か）を割り当てる、セキュリティスキームを実装している。これは、大規模なデータコレクションを、効率的な情報保護を提供する保護情報として簡単に分類することを可能にする。例えば、いくつかの実施形態において、制御ビットは、命令情報等の特定の種類の情報、又は、メモリ１２０の物理アドレスへの仮想アドレスのマッピングを提供するページテーブル情報が保護情報として指定されるように、処理システム１００によって設定されるため、後述するように当該情報を暗号で保護する。データに割り当てられたアドレス用の制御ビットは、例えば、プロセッサ１０２で実行されるプログラムによって要求された指定に基づいて、よりきめ細やかな様式で指定され得る。このセキュリティスキームは、より一般的なデータのために更なるフレキシビリティを提供しながら、重要なデータの保護（例えば、仮想マシン又はそのプログラムの不正な実行を防ぐ）を提供する。
【００１４】
いくつかの実施形態において、情報に割り当てられたセキュリティの種類は、情報に対応するメモリアドレスに基づいて指定されるので、処理システム１００は、ページテーブル自体を用いて、メモリアドレスごとのセキュリティの種類を示す。したがって、図３を参照して以下に説明するように、プロセッサコア１０４，１０６は、メモリアクセス要求に対応するメモリアドレスを識別する過程において、メモリアクセス要求の種類を識別する。特に、メモリアドレスが保護情報を記憶するものとして示されている場合には、対応するメモリアクセスは、保護用のメモリアクセスとして識別される。同様に、メモリアドレスが保護情報ではない情報を記憶するものとして示されている場合には、対応するメモリアクセスを保護用ではないメモリアクセスとして識別する。
【００１５】
キャッシュ１０５，１０７，１０８は、メモリ１２０に記憶された情報のサブセットを記憶するメモリデバイスであって、各々の情報のサブセットに対するプロセッサコア１０４，１０６の迅速なアクセスを提供する。簡略化のために、キャッシュ１０８を単一のキャッシュとして示しているが、いくつかの実施形態では、キャッシュ１０８が、プロセッサ１０２の異なるレベルのメモリ階層に存在する異なるキャッシュを含む複数のキャッシュで表し得ることが理解されるであろう。キャッシュ１０８は、メモリアクセス要求を受信して、そのストレージアレイ（図１では省略）が、メモリアクセス要求によってターゲットとされる情報を記憶するか否かを識別する。かかる場合に、キャッシュ１０８は、キャッシュヒットを示し、ストレージアレイにてメモリアクセス要求を満たす。キャッシュ１０８がターゲットとされる情報を記憶しない場合には、キャッシュミスを示し、ノースブリッジ１１０に対してメモリアクセス要求を提供する。
【００１６】
図１に示された例において、処理システム１００のメモリアクセスパスは、キャッシュ１０８が保護情報を含む情報を暗号化されない形式で記憶するようなものである。このため、図５に関して以下でさらに記載されるように、いくつかの実施形態では、キャッシュ１０８は、所定のサイズの記憶位置（例えば、キャッシュライン）ごとに、特定のプログラムを識別するエンティティタグ情報、又は、記憶位置で情報にアクセスするために認証される他のエンティティ（例えば、ＶＭ）を記憶する。ストレージアレイの位置に対するメモリアクセスに応じて、キャッシュ１０８は、メモリアクセス要求を生成したエンティティのアイデンティティ（identity）と、エンティティのタグ情報とを比較し、不一致に応じてキャッシュミスを示すことによって、情報に対する不正なアクセスを防ぐ。
【００１７】
ノースブリッジ１１０は、メモリ１２０と通信するために、プロセッサ１０２用のインタフェースを提供するメモリコントローラである。いくつかの実施形態において、ノースブリッジ１１０は、入力／出力コントローラ（例えばサウスブリッジ、図示省略）とインタフェースで接続されており、グラフィックスプロセッシングユニット等の異なるプロセッサコア（例えば、プロセッサコア１０４，１０６）及び他のプロセッサコア（図示省略）間にインタフェースを提供する等の他の機能を実行することが可能である。ノースブリッジ１１０は、メモリコントローラとしての容量内でキャッシュ１０８からメモリアクセス要求を受信して、メモリ１２０に対する当該要求の提供を制御する。また、ノースブリッジ１１０は、メモリアクセス要求に対するメモリ１２０からの応答を受信し、キャッシュ１０８に対する応答の提供を制御する。いくつかの実施形態において、ノースブリッジ１１０は、処理システム１００の入力／出力デバイス（図示省略）からメモリアクセス要求（例えば、直接メモリアクセス要求）を受信してもよく、メモリ１２０に対する当該要求の提供を制御する。
【００１８】
ノースブリッジ１１０は、情報の暗号隔離を提供するために、特定の暗号標準に従って、キー１２６に基づいて情報を暗号化及び復号化するように構成された暗号化モジュール１１５を含む。いくつかの実施形態において、暗号化モジュール１１５は、高度暗号化標準（ＡＥＳ）の暗号化及び復号化を用いるように構成されているが、他の実施形態では、暗号化モジュール１１５は、他の暗号化／復号化技術を用いてもよい。ノースブリッジ１１０は、書き込み要求を受信したことに応じて、当該要求が保護用のメモリアクセス要求、又は、保護用ではないメモリアクセス要求であるか否かを識別する。書き込み要求が保護用ではないメモリアクセス要求である場合には、ノースブリッジ１１０は、暗号化モジュール１１５をバイパスして、書き込まれる情報を暗号化することなく、メモリ１２０に対する書き込み要求を提供する。書き込み要求が保護用のメモリアクセス要求である場合には、ノースブリッジ１１０は、メモリアクセス要求を生成したエンティティ（例えば、プログラム、ＶＭ、ソフトウェアサービス等）に割り当てられる１つのキー１２６を識別する。いくつかの実施形態において、セキュリティモジュール１３０は、何れのエンティティがプロセッサ１０２で現在実行されているかに基づいて、選択されるキーを識別する。暗号化モジュール１１５は、書き込まれる情報を、選択されたキーを用いて暗号化し、この暗号化された情報とともに、記憶用のメモリ１２０に対して書き込み要求を提供する。いくつかの実施形態において、暗号化モジュール１１５は、対応する情報の暗号化及び復号化のためのメモリアクセス要求の選択されたキー及び物理アドレスの両方を用いて、ブロックムーブアタックを防ぐ。いくつかの実施形態において、暗号化モジュール１１５は、プロセッサ１０２での制御ビット（図示省略）の状態に基づく暗号化及び復号化のために、物理アドレスを用いるか否かを識別する。制御ビット状態は、セキュリティモジュール１３０により設定され得る。
【００１９】
ノースブリッジ１１０は、読み出し要求を受信したことに応じて、当該要求をメモリ１２０に提供した後に、当該要求に応じた情報を受信する。ノースブリッジ１１０が読み出し要求を保護用ではないメモリアクセス要求として識別した場合には、ノースブリッジ１１０は、暗号化モジュール１１５をバイパスして、読み出し情報を暗号化なしでキャッシュ１０８に提供する。ノースブリッジ１１０が読み出し要求を保護用のメモリアクセス要求として識別した場合には、ノースブリッジ１１０は、読み出しアクセス要求を生成したエンティティの割り当てられるキー１２６のうち１つのキーを識別し、暗号化モジュール１１５は読み出し情報を復号化する。ノースブリッジ１１０は、復号化された読み出し情報を、記憶のためにキャッシュ１０８に提供する。ノースブリッジ１１０は、状況次第で、キャッシュ１０８に対する情報の提供をバイパスしてもよく、復号化された読み出し情報を、対応する読み出しアクセス要求を生成したプロセッサコアに直接提供してもよい。
【００２０】
いくつかの実施形態では、セキュリティモードレジスタ１２１を用いて、暗号化モジュール１１５の操作を制御する。セキュリティモードレジスタ１２１は、ガードモードオンフィールド１２２と、ガードモードアクティブフィールド１２３と、を含む。ノースブリッジ１１０は、ガードモードオンフィールドが特定の状態（例えば、ネゲート状態）にあることに応じて、保護用のメモリアクセス要求を含む全てのメモリアクセス要求のために暗号化モジュール１１５をバイパスする。このことは、処理システム１００が、プロセッサ１０２で実行される全てのプログラムのために暗号化及び復号化がバイパスされるモードで動作することを可能にする。
【００２１】
ノースブリッジ１１０は、ガードモードオンフィールドが異なる特定の状態（例えば、アサート状態）にあることに応じて、ガードモードアクティブフィールドの状態を識別する。ノースブリッジ１１０は、ガードモードアクティブフィールドが特定の状態（例えば、ネゲート状態）にあることに応じて、受信したメモリアクセス要求（保護用のメモリアクセス要求を含む）のために暗号化モジュール１１５をバイパスし、ガードモードアクティブフィールドが異なる状態（例えば、アサート状態）にあることに応じて、保護用ではないメモリアクセス要求のためにのみ暗号化モジュールをバイパスする。いくつかの実施形態において、ガードモードオンフィールドは、プロセッサ１０２で複数の個々のプログラム又はエンティティ（例えば、ＶＭ）の実行を管理するエンティティ（例えば、ハイパーバイザ）によって設定される。ガードモードオンフィールドは、個々のプログラム又はエンティティごとに個別に設定される。このようにして、セキュリティモードレジスタは、粒度の異なるレベルで暗号化モジュール１１５の使用を制御することを可能にする。
【００２２】
図２は、いくつかの実施形態による、ＶＭ用の情報を暗号隔離のために提供する処理システム１００の例示的な操作を示す図である。図示された例では、プロセッサ１０２は、ＶＭ２５０及びＶＭ２５１を同時に実行する。また、プロセッサ１０２は、ＶＭ２５０，２５１と、処理システム１００のハードウェアとの間にインタフェースを提供するハイパーバイザ２５２を実行する。これらの実行過程において、ＶＭ２５０，２５１は、保護情報２２５，２２６にそれぞれアクセスする（記憶及び取得する）。暗号化モジュール１１５は、保護情報２２５，２２６の暗号隔離を確実に行うので、保護情報２２５，２２６の各々は、対応するＶＭのみによってアクセスされることが可能である。
【００２３】
操作中に、各ＶＭ２５０，２５１は、プロセッサ１０２で実行することを許可される前に、セキュリティモジュール１３０に登録する。いくつかの実施形態において、ＶＭは、ＶＭの所有者がセキュリティモジュール１３０と安全な通信チャネル（図２では図示省略）を確立するように、登録される。「ＶＭＩＤ」が指定された識別値と、「ＶＭＫＥＹ」が指定されたセキュリティキーとが、ＶＭ用に生成される。この生成は、セキュリティモジュール１３０又は別のセキュリティデバイスで行われてもよいし、安全な通信チャネルを介してセキュリティモジュール１３０へ通信されてもよい。セキュリティモジュール１３０は、ＶＭＫＥＹ及びＶＭＩＤの各々の値が対応するＶＭに対して固有であることを保証する。ＶＭの所有者は、対応するＶＭのイメージを暗号化して、暗号化されたイメージを、当該イメージを保護データとしてメモリ１２０に記憶するハイパーバイザ２５２に提供する。このようにして、図示された例では、保護情報２２５は、ＶＭ２５０用のＶＭイメージを含む。
【００２４】
次に、プロセッサ１０２は、ＶＭを実行する要求を受信する。プロセッサ１０２は、この要求に応じて、要求されたＶＭのＶＭＩＤをセキュリティモジュール１３０に通知する。セキュリティモジュール２３０は、ＶＭＩＤに基づき、要求されたＶＭのセキュリティキーを識別して、セキュリティキーを暗号化モジュール１１５に提供する。図２に示された例では、プロセッサ１０２は、ＶＭＡ２５０，２５１の両方を実行する要求を受信しているため、セキュリティモジュール１３０は、ＶＭＡ２５０用のキー１１８と、ＶＭＡ２５１用のキー１１９と、を暗号化モジュール１１５に提供する。
【００２５】
ＶＭ２５０，２５１は、これらの実行過程において、メモリアクセス要求を生成し、それらをノースブリッジ１１０に提供する。ノースブリッジ１１０は、メモリアクセス要求のメモリアドレスに含まれる１つ以上のビットに基づいて、当該メモリアクセス要求が保護用のメモリアクセス要求であるか否かを識別する。ノースブリッジ１１０は、保護用のメモリアクセス要求でない場合に、暗号化モジュール１１５をバイパスして、暗号化又は復号化なしでメモリアクセス要求を満たす。ノースブリッジ１１０は、メモリアクセス要求が保護用のメモリアクセス要求である場合に、メモリアクセス要求とともに提供されたメモリアドレス又は他の情報に基づいて、ＶＭ２５０，２５１の何れがメモリアクセス要求を生成したのかを識別する。暗号化モジュール１１５は、メモリアクセス要求を生成したＶＭに対応するキー１１８，１１９のうち１つのキーを選択して、選択されたキーを用いて、メモリアクセス情報（読み出しデータ又は書き込みデータ）に対して暗号化（書き込み要求の場合）又は復号化（読み出し要求の場合）を実行する。
【００２６】
上述したように、データの暗号保護はノースブリッジ１１０で行われ、暗号保護に用いられるキーは不明であり、ＶＭ２５０，２５１及びハイパーバイザ２５２にアクセス不可能である。このことは、一方のＶＭが他方のＶＭの保護情報にアクセス不可能であることを確実にする。例えば、ＶＭ２５１は、メモリアクセス要求を発行して、保護情報２２５（ＶＭ２５０の保護情報）にアクセスしようとする場合を想定する。暗号化モジュール１１５は、メモリアクセス要求がＶＭ２５１によって生成されたので、要求された保護データを、当該保護データを暗号化するのに用いられたキー１１８よりも、ＶＭ２５１に割り当てられたキー１１９を用いて復号化を試みる。これにより、ＶＭ２５１は、間違ったキーを用いて復号化が行われたので、復号化されたデータに対して意味のある解釈又は正しい解釈をすることが不可能である。このようにして、ＶＭ２５０用の保護情報２２５は、ＶＭ２５１によるアクセスから暗号で隔離される。
【００２７】
いくつかの実施形態において、処理システム１００は、キー１１８，１１９を定期的に変更してセキュリティを強化する。例えば、セキュリティモジュール１３０は、ＶＭが完全にシャットダウンした（一時停止ではなく）としても、ＶＭ用の新規のキーを生成し、ＶＭが再起動されるときに当該新規のキーをＶＭが備えるようにすることが可能である。セキュリティモジュール１３０は、古いキーの下でメモリ１２０に記憶されたＶＭの保護情報について、古いキーを用いてかかる情報を復号化し、かかる情報を新規のキーを用いて再暗号化するようにノースブリッジ１１０に指示することが可能であるため、この保護情報はＶＭが再起動する場合にアクセス可能である。
【００２８】
いくつかの実施形態において、セキュリティモジュール１３０は、ＶＭが一時停止状態に移行することに応じて、ＶＭ用の新規のキーを生成し得る。ＶＭ（例えば、ゲストオペレーティングシステム）の一部は、ＶＭ用の暗号化されたデータを記憶するメモリ１２０のメモリページを識別するデータ構造を維持する。セキュリティモジュール１３０は、ＢＭが一時停止状態に移行することに応じて、識別されたメモリページを古いキーを用いて復号化し、当該メモリページを新規のキーを用いて再暗号化するようにノースブリッジ１１０に指示する。これにより、ＶＭが一時停止状態を終了する場合に、保護情報にアクセス可能であることを保証する。
【００２９】
いくつかの実施形態において、処理システム１００は、異なる利用者に対応する複数のＶＭを実行するのに用いられないが、代わりに、単一のユーザ又は単一の利用者の環境で用いられるモード（説明のために「ネイティブモード」と呼ばれる）に配置されることが可能である。かかる状況では、ノースブリッジ１１０の暗号化モジュール１１５を用いて、プロセッサ１０２で実行される１つ以上のプログラムによって識別されるような機密情報を暗号で保護することが可能である。したがって、この機密情報は、暗号化された形式でメモリ１２０に記憶される。不正な方式（例えば、メモリ１２０のメモリモジュールの盗難を介して）によってメモリ１２０にアクセスする場合であっても、暗号化された情報は、情報を暗号化するのに用いられたキーの情報なしに意味のある解釈がなされることが不可能である。したがって、機密情報は、不正なアクセスから暗号で保護される。
【００３０】
いくつかの実施形態において、本明細書でさらに説明するように、実行中のＶＭに対して特殊なタグ値（「ＶＭタグ値」と呼ばれる）を割り当て、暗号化又は復号化を促進する。これらのタグ値の１つは、ネイティブモードで使用するために予約され得るので、ネイティブモードにおける暗号化用に指定された情報は、処理システム１００がＶＭを実行するために続いて使用される場合に、アクセスされるのが不可能である。いくつかの実施形態において、ネイティブモードは、プロセッサ１０２で指定された制御ビット（図示省略）によって有効にされることが可能であり、個別に、又は、プロセッサ１０２でのＶＭの実行と併せて使用されることが可能である。
【００３１】
いくつかの実施形態において、プロセッサ１０２以外のデバイスは、ノースブリッジ１１０を用いて、直接メモリアクセス（ＤＭＡ）要求を介してメモリ１２０にアクセスすることができる。いくつかの実施形態において、ノースブリッジ１１０は、かかる全てのＤＭＡ要求のために暗号化モジュール１１５をバイパスする。他の実施形態において、処理システム１０２は、ＤＭＡ要求のための特定のＶＭタグ値を指定又は予約することができる。ＤＭＡ要求によって、異なるＶＭタグに対応する保護情報にアクセスしようとする試みは、処理システム１０２でのエラー通知の生成の原因となる可能性がある。このことは、ＤＭＡ要求が情報の暗号保護をバイパスするために使用されることが不可能であることを保証する。
【００３２】
図３は、いくつかの実施形態による、メモリアクセス要求のためのセキュリティの種類（例えば、保護された、又は、保護されない）の識別を可能にするプロセッサ１０２の一部を示す図である。特に、図３では、アドレス変換モジュール３４５と、トランスレーションルックアサイドバッファ（ＴＬＢ）３４６と、ページテーブル３４７と、が示されている。アドレス変換モジュール３４５は、概して、対応するメモリアクセス要求のために仮想アドレスをプロセッサコア１０４，１０６の一方又は両方から受信するように構成されたモジュールである。このアドレス変換モジュール３４５は、受信した仮想アドレスの各々を、対応する物理アドレス（メモリアクセス要求がターゲットとするメモリ１２０の位置を識別する物理アドレス）に変換する。
【００３３】
このアドレス変換モジュール３４５は、ＴＬＢ３４６及びページテーブル３４７の一方又は両方を用いて、仮想アドレスを、対応する物理アドレスに変換する。ページテーブル３４７は、仮想アドレスによってインデックスされた複数のエントリ（例えば、エントリ３４８）を含む。いくつかの実施形態では、ページテーブル３４７は、多重レベルのページテーブルであって、最高レベルのページが、仮想アドレスに割り当てられた物理アドレスを識別しながら、低レベルのページが、仮想アドレスと関連した他のページを識別するエントリを含む。物理アドレスは、物理アドレスを含む最高レベルのページテーブルが識別され、最高レベルのページテーブルから物理アドレスを取得するまで等に、ページウォークでページテーブルを横断することで識別され得る。最低レベルのページは、アクセスされる次のレベルでページを識別する最初のアクセスである。また、最高レベルのページテーブルは、物理アドレスに対応するデータが暗号で保護されるか否かを示すビット（「Ｃビット」と指定される）を記憶する。ＴＬＢ３４６は、アドレス変換モジュール３４５によって直近に受信した仮想アドレスを反映するページテーブル３４７のエントリのサブセットを共に記憶する複数のエントリ（例えば、エントリ３４９）を含む。
【００３４】
アドレス変換モジュール３４５は、仮想アドレスを受信したことに応じて、ＴＬＢ３４６にアクセスして、仮想アドレスに対応するエントリを含むか否かを判定する。この場合、アドレス変換モジュール３４５は、Ｃビット値を物理アドレスへアペンドして、メモリアクセス要求によって用いられる、結果として得られる物理アドレス値を提供する。物理アドレス値のＣビット部分は、ノースブリッジ１１０によって使用され、メモリアクセス要求が保護用のメモリアクセス要求であるか否かを識別する。このようにして、例えば、物理アドレス値のＣビットがアサート状態にある場合に、ノースブリッジ１１０は、対応するメモリアクセス要求を保護用のメモリアクセス要求と識別して、暗号化モジュール１１５を用いて、当該要求に対応する情報を暗号化又は復号化する。
【００３５】
アドレス変換モジュール３４５は、ＴＬＢ３４６が仮想アドレスに対応するエントリを含まない場合に、メモリ１２０からページテーブル３４７を取得して、仮想アドレスに対応するエントリのためにページテーブル３４７の検索（時として「ページウォーク」と呼ばれ）を実行する。アドレス変換モジュール３４５は、メモリアクセス要求に応じて、エントリをＴＬＢ３４６に移し、Ｃビットを含む物理アドレス値を提供する。
【００３６】
ページテーブル３４７及びＴＬＢ３４６を使用してＣビットを記憶することで、保護用のメモリアクセス要求を識別するので、保護情報は、より簡単且つ安全に保護され得る。例えば、いくつかの実施形態において、ＶＭコードに対応する物理アドレスは、対応するページテーブルでＣビットをアサート状態に設定することによって、保護情報として指定され得る。このことは、ＶＭコード自体が暗号で隔離されることを保証する。さらに、ＶＭ用のページテーブルは、対応するＣビットをアサート状態に設定することにより、暗号で保護され得る。いくつかの実施形態において、ページテーブルのＣビットは、ハードウェアによって無条件に設定される。いくつかの実施形態において、ＶＭは、ＶＭのフレキシビリティを提供する他の非実行情報のためにＣビットを設定して、例えば直接メモリアクセスを介して入力／出力デバイスにより直接アクセスされるデータ等のように、保護されないデータを識別してもよい。
【００３７】
いくつかの実施形態において、処理システム１００は、アドレスごとに、物理アドレス値に加えてＣビットを用いるよりも、Ｃビット値用の各物理アドレスの既存ビット（例えば、最上位ビット）を再利用する。また、処理システム１００は、物理アドレスの１つ以上のビットを再利用して、暗号で保護された情報にアクセスすることが許可されるＶＭ用のＶＭタグ値を記憶することができる。物理アドレスのビットの再利用は、処理システム１００の物理アドレス空間を制限する潜在的なコストでシリコン面積を節約する。いくつかの実施形態において、プロセッサ１０２は、ページウォーク中に発生し得る物理アドレス上での既存のチェックを変更して、より小さいアドレスの物理アドレス空間を収容することができる。例えば、プロセッサ１０２は、情報暗号化が有効にされない場合に４８ビットの物理アドレスを用いることができ、情報暗号化が有効にされる場合に４４ビットの物理アドレスを用いることができ、Ｃビット及びＶＭタグ値のための他の４ビットを再利用する。したがって、情報暗号化が有効にされる場合に、プロセッサ１０２は、４４ビット超を含む物理アドレスを参照するプログラム又はハードウェアモジュールに応じて、エラー表示を生成することができる。
【００３８】
プロセッサ１０２がＶＭ及びハイパーバイザを実行するいくつかの実施形態において、アドレス変換モジュール１４５は、ページテーブルの１レベル以上にアクセスして、メモリ１２０（図４の説明のために「システム物理アドレス」と呼ばれる）によって使用されるＣビット及び物理アドレスを識別してもよい。一例は、いくつかの実施形態に従い図４に示される。図示された例において、アドレス変換モジュール１４５は、ＴＬＢ３４６と、ゲストページテーブル４４７と、ホストページテーブル４４９（例えば、ネストされたページテーブル）とを用いて、受信した仮想アドレスに対するシステム物理アドレスを識別するように構成されている。
【００３９】
ゲストページテーブル４４７は、ゲスト物理アドレスと呼ばれる１セットのアドレスへの仮想アドレスのマッピングを記憶する。ゲスト物理アドレスは、メモリ１２０の実際の物理アドレスではなく、メモリ１２０の仮想アドレスとシステム物理アドレスとの間の中間アドレスを表す。ホストページテーブル４４９は、ゲスト物理アドレスと対応するシステム物理アドレスとの間のマッピングを格納する。このようにして、ゲストページテーブル４４７及びホストページテーブル４４９は、例えばＶＭによって用いられるアドレス空間と、例えばハイパーバイザによって用いられるアドレス空間との間に隔離及び変換の１つの層を可能にする。図４に示された例において、アドレスに対するＣビットは、特定のデータが暗号保護のために指定されるか否かをＶＭが制御することを可能にするゲストページテーブル４４７に記憶されている。これは、ハイパーバイザからＣビットを隔離することによって、バグだらけのハイパーバイザ又は悪意のあるハイパーバイザによる不法利用から暗号指定を保護する。
【００４０】
操作中に、アドレス変換モジュール３４５は、メモリアクセス用の仮想アドレスを受信し、ＴＬＢ３４６が仮想アドレスに対するシステム物理アドレスを記憶しているか否かを最初に識別する。かかる場合に、アドレス変換モジュール３４５は、システム物理アドレス及び対応するＣビットをＴＬＢ３４６から取得し、取得した情報をノースブリッジ１１０に提供する。ＴＬＢ３４６がシステム物理アドレスを記憶していない場合には、アドレス変換モジュール３４５は、受信した仮想アドレスに割り当てられたゲストページテーブル４４７のエントリ（例えば、エントリ４４８）を識別する。アドレス変換モジュール３４５は、識別されたエントリからＣビット値を取得し、識別されたエントリでゲスト物理アドレスを使用し、ホストページテーブル４４９でページウォークを実行する。ページウォークの結果として、アドレス変換モジュール３４５は、ゲスト物理アドレスに割り当てられたホストページテーブル４４９のエントリ（例えば、エントリ４５１）を識別し、このエントリは、受信した仮想アドレスに対応するシステム物理アドレスを記憶する。アドレス変換モジュール３４５は、システム物理アドレスを取得し、取得したシステム物理アドレスを、ゲストページテーブル４４７の対応するエントリから取得されたＣビットと共に、本明細書に記載されるようなメモリアクセス要求のさらなる処理のためにノースブリッジ１１０に提供する。また、アドレス変換モジュール３４５は、システム物理アドレス及びＣビットを、受信した仮想アドレスに対応するＴＬＢ３４６のエントリに記憶する。このようにして、図４の例において、Ｃビットは、ＶＭに割り当てられた一方のセットのページテーブル（ゲストページテーブル４４７）によって提供され、メモリ１２０にアクセスするために使用される物理アドレスは、ハイパーバイザに割り当てられた他方のセットのページテーブル（ホストページテーブル４４９）によって提供される。
【００４１】
図５は、いくつかの実施形態による、図１のプロセッサ１０２のキャッシュ１０８を示す図である。キャッシュ１０８は、キャッシュコントローラ５７２と、ＣＶＭタグレジスタ５７３と、ストレージアレイ５７５と、を含む。ストレージアレイ５７５は、エントリ用のデータを記憶するデータフィールドを含む複数のエントリ（例えば、エントリ５７８）と、データフィールドに記憶された情報へのアクセスが許可されるＶＭに対応するＶＭタグ値を示すＶＭタグフィールドと、この情報が暗号保護のために指定されるか否かを示すＣビットを記憶するＣビットエントリと、を含む。ＣＶＭタグレジスタ４７３は、プロセッサ１０２で現在実行されているＶＭに関するＶＭタグ値を記憶する。いくつかの実施形態において、各プロセッサコア１０４，１０６は、コアで現在実行されているＶＭに関するＶＭタグ値を示す個々のＣＶＭタグレジスタを含む。いくつかの実施形態において、この値は、ＶＭの実行を開始するときにプロセッサコアによって設定される。
【００４２】
暗号保護のために指定されたデータが、ストレージアレイ５７５に記憶される前に暗号化モジュール１１５で復号化されている場合であっても、ストレージアレイ５７５のエントリに記憶されたデータは暗号化されない。これにより、キャッシュコントローラ５７２は、ストレージアレイ５７５にてデータへのアクセスを制御し、暗号保護のために指定されたデータが不正なエントリによってアクセスされないことを保証する。特に、キャッシュコントローラ５７２は、メモリアクセス要求を受信したことに応じて、メモリアクセス要求アドレスから導かれたアドレスタグ値に基づいて、ストレージアレイ５７５の１つのエントリが、メモリアクセス要求によってターゲットとされた情報を記憶しているか否かを識別する。キャッシュコントローラ５７２は、エントリが記憶していない場合に、キャッシュミスを示し、情報の取得のためにメモリアクセス要求をノースブリッジ１１０に提供する。
【００４３】
ストレージアレイ５７５が、メモリアクセス要求によってターゲットとされた情報を記憶するエントリを確かに含む場合に、キャッシュコントローラ５７２は、エントリのためのＣビットがアサート状態にあるか否かを判別する。アサート状態にない場合には、当該情報を暗号保護用に指定しない。したがって、キャッシュコントローラ５７２は、情報をエントリに書き込む（書き込み要求の場合に）こと、又は、エントリのデータフィールドで情報を取得及び提供する（読み出し要求の場合に）ことの何れかでキャッシュヒットを示し、メモリアクセス要求を満たす。Ｃビットがアサート状態にある場合には、当該情報を暗号保護用に指定する。これに応じて、キャッシュコントローラ５７２は、エントリのＶＭタグフィールドでのＶＭタグ値と、ＣＭＶ  ＩＤ値レジスタ５７３に記憶されたＶＭタグ値とを比較する。値の一致は、プロセッサ１０２で現在実行しているＶＭが、エントリで情報にアクセスするために認証されるＶＭであることを示している。したがって、キャッシュコントローラ５７２は、一致に応じて、キャッシュヒットを示し、メモリアクセス要求を満たす。キャッシュコントローラ５７２は、ＶＭタグ値間の不一致に応じて、キャッシュミスを示し、この要求を満たさない。これにより、現在実行しているＶＭが、暗号保護用に指定された情報にアクセスするために認証されない場合に、キャッシュコントローラ５７２は、アクセスを防止する。これは、不正なアクセスから情報を隔離したままで、ストレージアレイ５７５が、異なるＶＭのために記憶情報を同時に記憶することを可能にする。いくつかの実施形態において、キャッシュコントローラ５７２は、セキュリティ侵害の企てを監視エンティティに順に通知することの可能な情報、例えばセキュリティモジュール１３０に通知する等の情報にアクセスするために、現在実行しているＶＭを認証しないのを識別したことに応じて、追加の動作を行うことができる。
【００４４】
図６は、いくつかの実施形態による、図１のプロセッサ１０２のキャッシュ１０８を示す図である。ここで、ＶＭタグ値は、キャッシュ１０８にてキャッシュヒットを識別するために用いられるＴＬＢ６７６内に記憶される。ＴＬＢ６７６は、複数のエントリ（例えば、６７８）を含み、各エントリは、ストレージアレイ６７５の１つのエントリに対応している。ＴＬＢ６７６の各エントリは、ストレージアレイ６７５の対応するエントリの物理アドレスと、物理アドレスに割り当てられた仮想アドレスと、ストレージアレイ６７５のエントリに記憶された情報にアクセスするために認証されるＶＭを示すＶＭタグ値と、情報を暗号保護用に指定するか否かを示すＣビット値と、を記憶する。
【００４５】
アドレス変換モジュール３４５は、メモリアクセス要求を受信したことに応じて、ＴＬＢ６７６の任意のエントリが、メモリアクセス要求の仮想アドレスに一致する仮想アドレスを記憶するか否かを識別する。アドレス変換モジュール３４５は、仮想アドレスを記憶しない場合に、ページテーブルウォークを実行して仮想アドレスに対するシステム物理アドレスを識別し、この情報を用いて新規のＴＬＢエントリを作成する。キャッシュコントローラ５７２は、メモリアクセス要求によってターゲットとされた情報を記憶するエントリをＴＬＢ６７６が含むと、ストレージアレイ５７５が、Ｃビット値と、システム物理アドレスと、ＶＭタグ値と、について対応するマッチング値を記憶するエントリを含むか否かを識別する。エントリを含む場合に、キャッシュコントローラ５７２は、キャッシュヒットを示し、キャッシュ１０８でメモリアクセス要求を満たす。ストレージアレイ５７５がかかるエントリを含まない場合に、キャッシュコントローラ５７２は、キャッシュミスを示し、メモリアクセス要求を満たさない。また、キャッシュコントローラ５７２は、より高レベルのキャッシュ及び／又はノースブリッジ１１０に対してメモリ要求を発行して、要求された情報を取得することができる。
【００４６】
いくつかの実施形態において、他の情報の記憶を可能にするストレージアレイ６７５のエントリ（例えば、キャッシュライン）を排除する場合に、キャッシュコントローラ５７２は、ノースブリッジ１１０に対して、図５のエントリ５７８で示されるように、記憶されたＣビット及びＶＭタグ値とともに、排除される情報を提供する。ノースブリッジ１１０は、これに応じて、Ｃビットがアサート状態にあるか否かを識別し、アサート状態にある場合に、暗号化モジュール１１５は、ＶＭタグ値に割り当てられたキーに基づいて、当該情報を暗号化する。次に、ノースブリッジ１１０は、記憶用のメモリ１２０に対してこの情報を提供する。Ｃビットがネゲート状態にある場合には、ノースブリッジ１１０は、暗号化モジュール１１５をバイパスして、暗号化されない情報を記憶用のメモリ１２０に提供する。
【００４７】
いくつかの状況において、ハイパーバイザ２５２（図２）は、メモリ１２０に記憶されたＶＭ情報にアクセスする必要があり、又は、一方のメモリ位置から他方のメモリ位置へかかる情報を移動させ得ることを保証する。しかしながら、かかる情報は、キャッシュ１０８で変更されている可能性があり、ハイパーバイザ２５２は、適切なＶＭタグ値を使用不可能であるため、キャッシュ１０８にてかかる情報にアクセス不可能である。ハイパーバイザ２５２が、メモリのインコヒーレントビューを避けて最新のデータのコピー（暗号化された）にアクセス可能であることを保証するために、ハイパーバイザ２５２は、キャッシュ１０８のストレージアレイ６７５全体を消去することができるが、これは、プロセッサ１０２の性能に望ましくない影響を与える可能性がある。それに応じて、いくつかの実施形態において、プロセッサコア１０４，１０６が、操作によって識別されたＶＭタグ値及びアドレス範囲と関連したストレージアレイ５７５でキャッシュ１０８がエントリを消去することを要求する操作を発行することが可能である。これに応じて、キャッシュコントローラ５７２は、ＶＭタグ値及びアドレス範囲に対応するストレージアレイ６７５で任意のエントリを消去する。ノースブリッジ１１０は、アサート状態でその対応するＣビットを含む任意の情報を暗号化する、メモリ１２０へ消去された情報をコピーする。したがって最新の情報は、メモリ１２０でハイパーバイザ２５２によるアクセスのために利用可能である。
【００４８】
図７は、暗号保護用に指定された情報を保護するためにキャッシュでメモリアクセス要求を処理する方法７００のフロー図である。説明のために、この方法は、図１及び図５で示したキャッシュ１０８での例示的な実装に関して記載されている。ブロック７０２では、プロセッサコア１０４，１０６のうち１つは、要求された情報を識別する仮想アドレスを用いてメモリアクセス要求を生成する。ブロック７０４では、アドレス変換モジュール３４５（図３）は、ＴＬＢ３４６及びページテーブル３４７（又は、ＴＬＢ３４６、ゲストページテーブル４４７及びホストページテーブル４４９）を用いて、仮想アドレスと、物理アドレスにて情報を暗号保護用に指定するか否かを示すＣビット値と、に対応するシステム物理アドレスを識別する。このアドレス変換モジュール３４５は、メモリアクセス要求とともにシステム物理アドレス値及びＣビット値を、キャッシュ１０８に提供する。
【００４９】
ブロック７０６では、キャッシュコントローラ５７２（図５）は、メモリアクセス要求と関連した物理アドレスに基づいて、ストレージアレイ５７５のエントリが、当該要求によってターゲットとされた情報を記憶するか否かを識別する。記憶しない場合には、方法フローは、ブロック７０８へ進み、キャッシュコントローラ５７２は、キャッシュミスを示す。また、キャッシュコントローラ５７２は、メモリアクセス要求を満たすために、Ｃビット値と物理アドレス値とを含むメモリアクセス要求をノースブリッジ１１０に提供する。ストレージアレイ５７５のエントリが、メモリアクセス要求によってターゲットとされた情報を確実に記憶する場合に、方法フローはブロック７１０に進み、キャッシュコントローラ５７２は、識別されたエントリに関するＣビットがアサートされるか否かを識別する。アサートされない場合には、暗号保護用に識別されたエントリでの情報を指定しない。それに応じて、方法フローはブロック７１２へ移動して、キャッシュコントローラ５７２は、識別されたエントリのデータフィールドに情報を書き込むこと、又は、ストレージアレイ５７５の識別されたエントリから情報を取得することによって、メモリアクセス要求を満たす。
【００５０】
ブロック７１０に戻り、識別されたエントリ用のＣビットを設定することをキャッシュコントローラ５７２が判別する場合に、方法フローはブロック７１４へ移動して、キャッシュコントローラ５７２は、識別されたエントリでのＶＭタグ値が、ＣＶＭタグレジスタ５７３に記憶されたＣＶＭタグ値に一致するか否かを判別する。一致する場合には、現在実行しているＶＭが、ストレージアレイ５７５の識別されたエントリにて情報にアクセスするために認証されるＶＭに一致することを示す。それに応じて、方法フローはブロック７１２に進み、キャッシュコントローラ５７２は、識別されたエントリでこの情報を使用してメモリアクセス要求を満たす。ブロック７１４では、識別されたエントリのＶＭタグ値が、ＣＶＭタグレジスタ５７３に記憶されたＣＶＭタグ値と不一致であるとキャッシュコントローラが判別した場合には、方法フローはブロック７１６に移動して、キャッシュコントローラ５７２は、キャッシュミスを示す。キャッシュコントローラ５７２は、メモリアクセス要求を満たさないため、暗号保護用に指定された情報を不正なアクセスから保護する。
【００５１】
図８は、暗号保護用に指定された情報を識別するためにＴＬＢを使用してキャッシュでメモリアクセス要求を処理する方法８００のフロー図である。説明のために、この方法は、図１及び図６で示されたキャッシュ１０８での例示的な実装に関して説明される。ブロック８０２では、プロセッサコア１０４，１０６のうち１つは、要求された情報を識別する仮想アドレスを用いてメモリアクセス要求を生成する。
【００５２】
ブロック８０６では、ＴＬＢ６７６は、メモリアクセス要求と関連した仮想アドレス及びＶＭタグ値に基づいて、ＴＬＢ６７６が仮想アドレス及びＶＭタグ値用のエントリを含むか否かを識別する。含む場合には、方法フローは後述するブロック８１０へ進む。含まない場合には、方法フローはブロック８０８に進み、アドレス生成ユニット３４５は、テーブルウォークを実行して、仮想アドレス用のシステム物理アドレス及びＣビット値を識別する。また、ＴＬＢ６７６は、ＣＶＭタグレジスタ５７３からＶＭタグ値を取得する。ＴＬＢ６７６は、１つのエントリに、システム物理アドレス、仮想アドレス、ＶＭタグ値及びＣビット値を配置する。方法フローはブロック８１０に進み、ＴＬＢ６７６は、エントリでのＣビット値、システム物理アドレス及びＶＭタグ値を、キャッシュコントローラ５７２に送信する。ブロック８１２では、キャッシュコントローラ５７２は、キャッシュ１０８が、Ｃビット値、システム物理アドレス及びＶＭタグ値に関して対応するマッチング値を記憶するエントリを含むか否かを識別する。含む場合には、方法フローはブロック８１４へ進み、キャッシュコントローラ５７２は、キャッシュヒットを示し、キャッシュ１０８でメモリアクセス要求を満たす。ブロック８１２では、キャッシュ１０８がＣビット値、ＶＭタグ値、または物理アドレス値に一致するエントリを含まない場合に、方法フローはブロック８１６へ進み、キャッシュコントローラ５７２は、キャッシュミスを示す。また、キャッシュコントローラ５７２は、メモリアクセス要求を満たすために、Ｃビット値及びＶＭタグと、物理アドレス値とを含むメモリアクセス要求を、ノースブリッジ１１０に提供する。キャッシュコントローラ５７２は、メモリアクセス要求を満たさないため、暗号保護用に指定された情報を不正なアクセスから保護する。
【００５３】
図９は、いくつかの実施形態による、暗号保護用に指定された情報を保護するために、メモリコントローラでメモリアクセス要求を処理する方法９００のフロー図である。説明のために、図１のノースブリッジ１１０での例示的な実装に関する方法９００が記載されている。ブロック９０２では、ノースブリッジ１１０は、メモリアクセス要求をキャッシュ１０８から受信する。メモリアクセス要求は、プロセッサコア１０４，１０６のうち１つによって生成された要求であってもよいし、キャッシュ１０８がエントリを排除して満たす場合にキャッシュ１０８の代わりに生成された要求であってもよい。図１〜８に関して上述したように、メモリアクセス要求が保護用のメモリアクセス要求であるか否かを示すＣビット値を含むメモリアクセス要求用の物理アドレス値及びＶＭタグ値は、アドレス変換モジュール３４５によって既に識別されている。
【００５４】
ブロック９０４では、ノースブリッジ１１０は、メモリアクセス要求用のＣビットがアサートされているか否かを判定する。アサートされていない場合、メモリアクセス要求は、保護用ではないメモリアクセス要求である。よって、方法フローはブロック９０６に移動し、ノースブリッジ１１０は、暗号化モジュールをバイパスして、メモリアクセス要求を満たす。これに応じて、ノースブリッジ１１０は、書き込み要求の場合に書き込み情報を暗号化しないため、メモリ１２０は、暗号化されない形式で書き込み情報を記憶する。ノースブリッジ１１０は、読み出し要求の場合にメモリ１２０から情報を取得し、情報を復号化しないでキャッシュ１０８に提供する。取得した情報が既に暗号化されている場合には、当該情報が暗号化された形式では意味がないこと又は有用ではないことに留意する。これにより、悪意のあるエンティティ（例えば、ハッキングソフトウェア）は、暗号で保護された情報に対して保護用ではないメモリ要求を用いたアクセスを試みることによって、当該情報へのアクセスを達成することが不可能である。
【００５５】
ブロック９０４に戻り、ノースブリッジが、メモリアクセス要求用のＣビットをアサートすることを識別した場合、その後のメモリアクセス要求は、保護用のメモリアクセス要求である。それに応じて、方法フローはブロック９０８にへ移動し、ノースブリッジ１１０は、メモリアクセス要求に基づき、メモリアクセス要求と関連したＶＭを識別する。ブロック９１０では、ノースブリッジ１１０は、識別されたＶＭに対応するキー１２６のうち１つのキーを識別する。ブロック９１２では、暗号化モジュール１１５は、メモリアクセス要求を満たすために使用される情報を暗号化又は復号化する。すなわち、メモリアクセス要求が書き込み要求である場合、暗号化モジュール１１５は、書き込まれる情報を暗号化する。メモリアクセス要求が読み出し要求である場合、ノースブリッジ１１０は、メモリ１２０から読み出される情報を取得して、暗号化モジュール１１５は、取得した情報を復号化する。ブロック９１４では、ノースブリッジ１１０は、暗号化された情報（書き込み要求の場合）又は復号化された情報（読み出し要求の場合）を使用して、メモリアクセス要求を満たす。
【００５６】
本明細書で記載されるように、いくつかの実施形態において、ＶＭタグ（又はＶＭタグ値と呼ばれる）は、現在実行しているＶＭ、及び、暗号保護用に指定された情報にアクセスするのを許可されたＶＭの両方を識別するために使用される。いくつかの状況において、割り当て用に利用可能なＶＭタグの数は、実行用に利用可能なＶＭの数よりも少ない。図１０は、いくつかの実施形態による、ＶＭタグ値を割り当てる方法１０００のフロー図である。説明のために、方法１０００は、図１及び図２の処理システム１００での例示的な実装に関して記載されており、セキュリティモジュール１３０は、ＶＭタグ値の生成及び割り当てを管理する。
【００５７】
ブロック１００２で、セキュリティモジュール１３０は、ハイパーバイザ２５２がプロセッサコア１０４，１０６のうち１つ以上でＶＭの実行を開始していることを示すＶＭタグ用のハイパーバイザ２５２から要求を受信する。ハイパーバイザ２５２は、実行されるＶＭ用の識別値（場合によりＶＭＩＤ値と呼ばれる）を含むセキュリティモジュール１３０を提供する。それに応じて、ブロック１００４では、セキュリティモジュール１３０は、割り当てられたＶＭタグの記憶されたテーブルにアクセスして、ＶＭタグ値が既にＶＭに割り当てられているか否かを識別する。割り当てられている場合、この方法フローはブロック１００６に進み、セキュリティモジュール１３０は、既に割り当てられたＶＭタグ値をハイパーバイザ２５２に提供する。このようにして、ＶＭタグ値は、例えばキャッシュ１０８で使用するために利用可能であり、実行しているＶＭ用の保護情報を識別する。
【００５８】
ブロック１００４に戻り、ＶＭタグ値がＶＭにまだ割り当てられていない場合、方法フローはブロック１００８へ進み、セキュリティモジュール１３０は、全てのＶＭタグ値が既に他のＶＭに割り当てられているか否かを識別する。割り当てられない場合には、方法フローはブロック１０１０へ移動し、セキュリティモジュール１３０は、ＶＭタグ値をＶＭに割り当て、割り当てられたＶＭタグのテーブルにＶＭタグ値を記憶する。方法フローはブロック１００６へ進み、セキュリティモジュール１３０は、割り当てられたＶＭタグ値をハイパーバイザ２５２に提供する。
【００５９】
ブロック１００８に戻り、セキュリティモジュール１３０が、全ての利用可能なＶＭタグ値が割り当てられていることを識別した場合に、既に割り当てられたＶＭタグは、実行しているＶＭに再度割り当てられなければならない。しかしながら、このことは、実行しているＶＭが、アクセスするのに認証されないキャッシュ１０８にて保護情報にアクセスするのを可能にする。それに応じて、方法フローはブロック１０１２に進み、セキュリティモジュール１３０は、ハイパーバイザ２５２に対してキャッシュ１０８を消去することを要求するので、対応するＣビットにより要求されるような暗号化された形式、又は、暗号化されない形式で全ての情報をメモリ１２０に書き込むことによって、保護情報をキャッシュ１０８から削除する。ブロック１０１４では、セキュリティモジュール１３０は、キャッシュ１０８が消去されているハイパーバイザ２５２から肯定応答を受信し、これに応じて、全てのＶＭタグを未使用としてマーク付けする。方法フローはブロック１０１０に移動し、セキュリティモジュール１３０は、新規のＶＭタグ値をＶＭに割り当て、割り当てられたＶＭタグのテーブルにＶＭタグ値を記憶する。方法フローはブロック１００６に進み、セキュリティモジュール１３０は、割り当てられたＶＭタグ値をハイパーバイザ２５２に提供する。
【００６０】
いくつかの実施形態において、上述した装置及び技術は、図１〜１０を参照して上記のように説明したプロセッサ等の１つ以上の集積回路（ＩＣ）デバイス（又は集積回路パッケージ若しくはマイクロチップと呼ばれる）を含むシステムに実装される。電子設計自動化（ＥＤＡ）及びコンピュータ支援設計（ＣＡＤ）ソフトウェアツールは、これらのＩＣデバイスの設計及び製造で使用され得る。典型的に、これらの設計ツールは、１つ以上のソフトウェアプログラムとして表現される。この１つ以上のソフトウェアプログラムは、回路を製造する製造システムを設計又は改造するプロセスの少なくとも一部を実行するようにコンピュータシステムによって実行可能なコードを含み、コンピュータシステムを操作して１つ以上のＩＣデバイスの回路構成を表すコード上で動作する。このコードは、命令、データ、又は、命令及びデータの組み合わせを含み得る。典型的に、設計ツール又は製造ツールを表すソフトウェア命令は、コンピューティングシステムにアクセス可能なコンピュータ可読記憶媒体に記憶される。同様に、ＩＣデバイスの設計又は製造の１つ以上のフェーズを表すコードは、同一のコンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体に格納されてもよいし、これらの媒体からアクセスされてもよい。
【００６１】
コンピュータ可読記憶媒体は、命令及び／又はデータをコンピュータシステムに提供する、使用中にコンピュータシステムによってアクセス可能な任意の記憶媒体又は記憶媒体の組み合わせを含み得る。かかる記憶媒体は、限定されないが、光媒体（例えば、コンパクトディスク（ＣＤ）、デジタル多用途ディスク（ＤＶＤ）、ブルーレイ（登録商標）ディスク）、磁気媒体（例えば、フロッピー（登録商標）ディスク、磁気テープ若しくは磁気ハードドライブ）、揮発性メモリ（例えば、ランダムアクセスメモリ（ＲＡＭ）若しくはキャッシュ）、不揮発性メモリ（例えば、読み出し専用メモリ（ＲＯＭ）若しくはフラッシュメモリ）、又は、微小電気機械システム（ＭＥＭＳ）ベースの記憶媒体を含み得る。コンピュータ可読記憶媒体は、コンピューティングシステム（例えば、システムＲＡＭ又はＲＯＭ）に組み込まれてもよいし、コンピューティングシステム（例えば、磁気ハードドライブ）に固着されてもよいし、コンピューティングシステム（例えば、光ディスク又はユニバーサルシリアルバス（ＵＳＢ）ベースのフラッシュメモリ）に着脱されもよいし、有線又は無線ネットワーク（例えば、ネットワークアクセス可能なストレージ（ＮＡＳ））を介してコンピュータシステムに接続されてもよい。
【００６２】
図１１は、いくつかの実施形態による１つ以上の態様を実装するＩＣデバイスの設計及び製造のための例示的な方法１１００を示すフロー図である。上述したように、以下のプロセスの各々のために生成されたコードは、対応する設計ツール又は製造ツールによるアクセス及び使用のための非一時的なコンピュータ可読記憶媒体に記憶されてもよいし、その他の方法で具現化されてもよい。
【００６３】
ブロック１１０２では、ＩＣデバイスの機能仕様を生成する。この機能仕様（よくマイクロアーキテクチャ仕様（ＭＡＳ）と呼ばれる）は、Ｃ、Ｃ＋＋、ＳｙｓｔｅｍＣ、Ｓｉｍｕｌｉｎｋ若しくはＭＡＴＬＡＢを含む様々なプログラミング言語又はモデリング言語より表され得る。
【００６４】
ブロック１１０４では、機能仕様を使用して、ＩＣデバイスのハードウェアを表すハードウェア記述コードを生成する。いくつかの実施形態において、このハードウェア記述コードは、ＩＣデバイスの回路の形式記述及び設計のための様々なコンピュータ言語、仕様言語又はモデリング言語を含む、少なくとも１つのハードウェア記述言語（ＨＤＬ）を使用して表される。典型的に、生成されたＨＤＬコードは、ＩＣデバイスの回路の動作と、回路の設計及び統合と、シミュレーションを通してＩＣデバイスの正常動作を検証するテストと、を表す。ＨＤＬの例は、ＡｎａｌｏｇＨＤＬ（ＡＨＤＬ）、ＶｅｒｉｌｏｇＨＤＬ、ＳｙｓｔｅｍＶｅｒｉｌｏｇＨＤＬ及びＶＨＤＬを含む。同期デジタル回路を実装するＩＣデバイスについて、ハードウェア記述コードは、レジスタトランスファレベル（ＲＴＬ）コードを含み、同期デジタル回路の動作を表すアブストラクトを提供することができる。回路の他の種類について、ハードウェア記述コードは、動作レベルコードを含み、回路の動作を表すアブストラクトを提供することができる。典型的に、ハードウェア記述コードにより表されたＨＤＬモデルは、設計検証をパスするためにシミュレーション及びデバッグの１つ以上のラウンドを受ける。
【００６５】
ハードウェア記述コードにより表された設計を検証した後に、ブロック１１０６では、ハードウェア記述コードを合成するために合成ツールが使用され、ＩＣデバイスの回路構成の最初の物理的な実装を表すコード又は当該実装を定義するコードを生成する。いくつかの実施形態において、合成ツールは、回路デバイスインスタンス（例えば、ゲート、トランジスタ、レジスタ、コンデンサ、インダクタ、ダイオード等）及びネットを含む１つ以上のネットリスト、又は、回路デバイスインスタンス間の接続を生成する。また、ネットリストの全て又は一部は、合成ツールを使用せずに手動で生成されてもよい。ネットリストは、ハードウェア記述コードと同様に、１つ以上のネットリストの最終セットを生成する前に１つ以上のテスト及び検証プロセスを受けることができる。
【００６６】
また、回路図エディタツールは、ＩＣデバイスの回路の概略図を起草するために使用されることが可能であり、次いで、回路図キャプチャツールは、得られた回路図をキャプチャして、回路図のコンポーネント及び接続を表す１つ以上のネットリスト（コンピュータ可読媒体に記憶される）を生成するために使用され得る。次に、キャプチャされた回路図は、テスト及び検証のためにシミュレーションの１つ以上のラウンドを受けることができる。
【００６７】
ブロック１１０８では、１つ以上のＥＤＡツールは、ブロック１１０６で生成されたネットリストを使用して、ＩＣデバイスの回路構成の物理的なレイアウトを表すコードを生成する。このプロセスは、例えばネットリストを使用する配置ツールを含み、ＩＣデバイスの回路構成の各素子の位置を決定又は固定することが可能である。さらに、配線ツールは、ネットリストに従って回路素子を接続するために必要なワイヤを加えて配線するように、配置プロセス上に構築する。得られたコードは、ＩＣデバイスの３次元モデルを表す。このコードは、例えばグラフィックデータベースシステムＩＩ（ＧＤＳＩＩ）フォーマット等のデータベースファイルフォーマットで表され得る。典型的に、このフォーマットのデータは、階層形式で回路レイアウトについての幾何学的形状、テキストラベル及び他の情報を表す。
【００６８】
ブロック１１１０では、物理レイアウトコード（例えば、ＧＤＳＩＩコード）は、ＩＣデバイスを製造するために製造施設（例えば、マスクワークを介して）の製造ツールを構成又は改造するために物理レイアウトコードを使用する、製造施設に提供される。すなわち、物理レイアウトコードは、１つ以上のコンピュータシステムでプログラミングされてもよく、次に製造施設のツールの操作又は当該操作中に実行された製造オペレーションを全体又は部分的に制御することができる。
【００６９】
いくつかの実施形態において、上述した技術の特定の態様は、ソフトウェアを実行する処理システムの１つ以上のプロセッサにより実装され得る。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶され、又は、その他の方法で当該媒体にて有形に具現化された１つ以上のセットの実行可能な命令を含む。このソフトウェアは、１つ以上のプロセッサによる実行時に、１つ以上のプロセッサを操作して上記技術の１つ以上の態様を実行する命令及び特定のデータを含み得る。非一時的なコンピュータ可読記憶媒体は、例えば、磁気若しくは光ディスクストレージデバイス、例えばフラッシュメモリ等のソリッドステートストレージデバイス、キャッシュ、ランダムアクセスメモリ（ＲＡＭ）、又は、他の１つの不揮発性メモリデバイス若しくは複数の不揮発性メモリデバイス等を含み得る。非一時的なコンピュータ可読記憶媒体に記憶された実行可能な命令は、１つ以上のプロセッサにより解釈され、若しくは、その他の方法で実行可能なソースコード、アセンブリ言語コード、オブジェクトコード、又は、他の命令フォーマットであってもよい。
【００７０】
これらの説明に加えて、一般的な説明において上記のアクティビティ又は要素の全てが必要とされないこと、具体的なアクティビティ又はデバイスの一部が必要とされない可能性があること、及び、さらに１つ以上のアクティビティが実行され、１つ以上の要素が含まれる可能性があることに留意されたい。さらに、アクティビティがリストされる順序は、必ずしもそれらが実行される順序ではない。また、概念は、具体的な実施形態を参照して説明されている。しかしながら、当業者は、様々な修正及び変更が以下の特許請求の範囲に記載されるような本開示の範囲から逸脱することなく行われ得ることを理解するであろう。それに応じて、明細書及び図面は、限定的な意味ではなく例示的な意味を有するものとみなされるべきであり、全てのかかる修正は本開示の範囲内に含まれることが意図される。
【００７１】
効果、他の利点、及び、問題に対する解決策は、具体的な実施形態に関して上記で説明されている。しかしながら、効果、利点、問題に対する解決策、及び、発生又はより顕著になる任意の効果、利点、解決策を引き起こす可能性のある任意の特徴は、任意の若しくは全ての特許請求の範囲の重要な、必要な、又は、本質的な特徴として解釈されるべきではない。さらに、上記で開示された特定の実施形態は例示であって、開示された主題は、本明細書の技術の効果を有するように、当業者に明らかであるように、異なるが同等の方式で修正及び実施され得る。以下の特許請求の範囲に記載されたもの以外に本明細書にて示された構成又は設計の詳細への如何なる制限も意図されない。したがって、上記で開示された特定の実施形態を変更又は修正することができ、全てのかかる変形が、開示された発明の主題の範囲内にあるとみなされることが明らかである。それに応じて、本願で保護を求めている発明は、以下の特許請求の範囲に記載されている。
【図１】
0006450775.tif 000002
【図２】
0006450775.tif 000003
【図３】
0006450775.tif 000004
【図４】
0006450775.tif 000005
【図５】
0006450775.tif 000006
【図６】
0006450775.tif 000007
【図７】
0006450775.tif 000008
【図８】
0006450775.tif 000009
【図９】
0006450775.tif 000010
【図１０】
0006450775.tif 000011
【図１１】
0006450775.tif 000012