(57)【特許請求の範囲】
【請求項１】
プロセッサ上で実行するための実行可能命令をサンドボックスする方法であって、
前記プロセッサに命令セットを実装するステップであって、前記プロセッサは第１の命令セットおよび第２の命令セットの両方を同時に実装するようには制御されないものであり、前記第１の命令セットは第１のオペコードを有する第１の命令で構成され、前記第２の命令セットは第２のオペコードを有する第２の命令で構成され、前記第１の命令セットは、前記プロセッサが第１のモードにあるときにのみ、関連付けられかつ実装され、前記第２の命令セットは、前記プロセッサが第２のモードにあるときにのみ、関連付けられかつ実装される、ステップと、
前記プロセッサ上で第１の実行ユニットおよび第２の実行ユニットを実行するステップであって、前記第１の実行ユニットはそれぞれ、複数の前記第１の命令のみから構成され、前記第２の実行ユニットはそれぞれ、複数の前記第２の命令のみから構成される、ステップと、
前記第１の実行ユニットおよび前記第２の実行ユニットを実行している間の任意の所与の時間に、命令を復号しているとき、前記プロセッサが前記第１のモードで動作している間に有効な命令として第１のオペコードのみを認識し、前記プロセッサが前記第２のモードで動作している間に有効な命令として第２のオペコードのみを認識するステップと
を含み、
前記第１のオペコードの各々および前記第２のオペコードの各々は所定のビットシーケンスを含み、前記第１のオペコードの各々の前記所定のビットシーケンスは、前記第１のオペコードの各々が前記第１の命令セットからのものであることを示す第１の値を有し、前記第２のオペコードの各々の前記所定のビットシーケンスは、前記第２のオペコードの各々が前記第２の命令セットからのものであることを示す、前記第１の値とは異なる第２の値を有し、前記第１のオペコードは前記第２のオペコードと相互に排他的である、方法。
【請求項２】
前記プロセッサによって現在実装されている前記命令セットは、現在の実行コンテキストを変更する実行コンテキスト切替え中に変わる、請求項１に記載の方法。
【請求項３】
前記第１のオペコードまたは前記第２のオペコードのいずれか一方のみが、任意の所与の時間に有効なオペコードとして前記プロセッサによって認識される、請求項１に記載の方法。
【請求項４】
前記第１のオペコードが前記プロセッサによって現在認識されているとき、かつ第２のオペコードが実行を試みられるとき、前記プロセッサのデコーダは前記第２のオペコードを復号できない、請求項３に記載の方法。
【請求項５】
プロセッサであって、
命令セットを実装し、ここで、前記プロセッサは第１の命令セットおよび第２の命令セットの両方を同時に実装するようには制御されないものであり、前記第１の命令セットは第１のオペコードを有する第１の命令で構成され、前記第２の命令セットは第２のオペコードを有する第２の命令で構成され、前記第１の命令セットは、前記プロセッサが第１のモードにあるときにのみ、関連付けられかつ実装され、前記第２の命令セットは、前記プロセッサが第２のモードにあるときにのみ、関連付けられかつ実装され、
第１の実行ユニットおよび第２の実行ユニットを実行し、ここで、前記第１の実行ユニットはそれぞれ、複数の前記第１の命令のみから構成され、前記第２の実行ユニットはそれぞれ、複数の前記第２の命令のみから構成され、
前記第１の実行ユニットおよび前記第２の実行ユニットを実行している間の任意の所与の時間に、命令を復号しているとき、前記プロセッサが前記第１のモードで動作している間に有効な命令として第１のオペコードのみを認識し、前記プロセッサが前記第２のモードで動作している間に有効な命令として第２のオペコードのみを認識する、
よう構成され、
前記第１のオペコードの各々および前記第２のオペコードの各々は所定のビットシーケンスを含み、前記第１のオペコードの各々の前記所定のビットシーケンスは、前記第１のオペコードの各々が前記第１の命令セットからのものであることを示す第１の値を有し、前記第２のオペコードの各々の前記所定のビットシーケンスは、前記第２のオペコードの各々が前記第２の命令セットからのものであることを示す、前記第１の値とは異なる第２の値を有し、前記第１のオペコードは前記第２のオペコードと相互に排他的である、プロセッサ。
【請求項６】
少なくとも第１のモードおよび第２のモードを提供するプロセッサによって実行される方法であって、
前記第１のモードと関連する第１の実行ユニットを実行するステップと、
前記第２のモードと関連する第２の実行ユニットを実行するステップと、
前記プロセッサが前記第１のモードに設定されている間に任意の実行ユニットが現在実行されている間、第１の命令セット内の第１の命令のみを実行できるようにするステップであって、前記第１の命令セットは第１のオペコードを有する前記第１の命令で構成され、前記第１の実行ユニットはそれぞれ、複数の前記第１の命令のみから構成される、ステップと、
前記プロセッサが前記第２のモードに設定されている間に任意の実行ユニットが実行されている間、第２の命令セット内の第２の命令のみを実行できるようにするステップであって、前記第２の命令セットは第２のオペコードを有する前記第２の命令で構成され、前記第２の実行ユニットはそれぞれ、複数の前記第２の命令のみから構成される、ステップと
を含み、
前記第１のオペコードの各々および前記第２のオペコードの各々は所定のビットシーケンスを含み、前記第１のオペコードの各々の前記所定のビットシーケンスは、前記第１のオペコードの各々が前記第１の命令セットからのものであることを示す第１の値を有し、前記第２のオペコードの各々の前記所定のビットシーケンスは、前記第２のオペコードの各々が前記第２の命令セットからのものであることを示す、前記第１の値とは異なる第２の値を有し、前記第１のオペコードは前記第２のオペコードと相互に排他的である、方法。
【発明の詳細な説明】
【背景技術】
【０００１】
最近のオペレーティングシステムは、一般に、少なくとも２つの１次セキュリティ層から構成される。１つのセキュリティ層（たとえば、アプリケーション層）は、その他のより高い特権的層（たとえば、カーネル層）より少ない特権を有する。カーネル層は、直接に、または仮想化の場合にはハイパーバイザで、基盤となるハードウェアとインターフェースするので、より高い特権的レベルを有する。多くのプロセッサは、いくつかのオペレーティングシステムが利用することができる２つより多い特権的レベルを提供する。たとえば、いくつかのオペレーティングシステムは、アプリケーション層とカーネル層の間で実行されるデバイスドライバを有し得る。
【０００２】
従来のオペレーティングシステムおよびＣＰＵ（中央処理ユニット）により、同じプロセッサ命令セットがすべての層で使用可能になっている。すなわち、オペコード（オペレーションコード）の１つのグローバルセットが存在する。たとえば、アプリケーションレベルで実行されるプロセスは、カーネルなどのより高い特権的レベルで実行されるプロセスによって使用される同じ機械命令のうちのいくつかを使用することになる。層間の意味論的区別は、プロセッサで実行されるソフトウェア、および、ある程度ハードウェアにあり、現在の特権的レベルに基づいて特定の機能へのアクセスを制限または拒否することになる。
【０００３】
一方、この方法の問題は、不正アプリケーションまたは悪意のコードが、対応する現在の実行コンテキストの特権的レベルを上げ、それによって、オペレーティングシステムまたはコンピュータ内のより高い特権的リソースへのアクセス権を獲得することである。たとえば、バッファオーバフロー条件が悪意のあるコードによって不当に利用される場合を考える。オーバフローエリア内の影響を受けるまたは関連するコードを実行することが許可されるべきかどうかを低レベルで認識することは難しくなる。高レベルの抽象化では、いくつかのコードが無許可であることが明白であり得るが、ＣＰＵレベルなどの低レベルの抽象化では、コードが許可されているかを見分けることは不可能である。一般に、悪意のあるコードのスペース外のコード（たとえば、オーバーランスペース内の特権的コード）が非特権的プロセスの制御下にあることを確実に知る方法は存在していない。
【０００４】
従来の方法は、まず第１に悪意のあるコードがシステム上で実行されないように、アプリケーション層を強固にすることによってこの状態を防ぐことを試みる。高度なオペレーティングシステムセキュリティスキームは言うまでもなく、たとえば、信頼できるコードシステムおよびコード走査が使用されている。あるいは、システムの動作を見ること、およびその動作を何らかのヒューリスティックと比較することによって、悪意のあるコードがそのシステム上で実行されているかを非確定的に判定しようとするあいまいな解決法が存在する。たとえば、ある特定のコールシーケンスパターンが疑わしいことがある。しかし、それが有効であるかまたは悪意があるかを判定するために、カーネル内で実行される現在のコードを確定的に評価することができる解決法は存在していない。
【０００５】
互換性のない（incompatible）命令セットを使用して、実行可能コードを隔離または「サンドボックス」することに関連する技術を、以下で説明する。
【発明の概要】
【０００６】
以下の概要は、以下の「発明を実施するための形態」で説明するいくつかの概念を紹介するためにのみ含まれる。本概要は、包括的ではなく、添付の特許請求の範囲に記載される特許請求される主題の範囲を線引きするものでもない。
【０００７】
本明細書に記載の実施形態は、スレッド、プロセス、プロテクションドメインなどの異なる実行ユニットの異なる命令セットの使用に関する。実行ユニットは、命令セットと関連し得る。命令セットは、相互に排他的オペコードを有することができ、１つの命令セット内のオペコードが他の命令セット内に含まれない。所与の実行ユニットを実行するとき、プロセッサは、その現在の実行ユニットに対応する命令セット内の命令の実行のみを許す。その実行ユニットが、別の命令セット内の命令を直接実行しようとする場合、障害が発生する。
【０００８】
多数の付随する特徴が、添付の図面に関連して考慮される以下の詳細な説明を参照して説明される。
【図面の簡単な説明】
【０００９】
本明細書は、添付の図面を参照して以下の詳細な説明からよりよく理解されよう。同様の参照番号が添付の説明において同様の部分を指定するために使用される。
【図１】プロセッサを示す図である。
【図２】保護リングと関連して命令セットを示す図である。
【図３】例示的命令セットを示す図である。
【図４】命令を取り出し実行するためのプロセスを示す図である。
【図５】異なる保護リング内で実行される実行ユニットを示す図である。
【図６】メッセージングシステムを示す図である。
【図７】ＩＰＣメッセージングを示す図である。
【発明を実施するための形態】
【００１０】
「背景技術」で述べたように、コンピュータセキュリティの分野では、悪意のあるコードを実行するのを防ぐ問題を解決するための多数の試みが存在している。従来の解決法は、一般に２つに分類される：静的保護（static protection）および動的検出（dynamic detection）。静的保護解決法は、有効なコードのみが実行されるようにすることをを目標としている。静的保護の一例は、暗号で署名されたバイナリのみをロードする、Ｍｅｄｉａ  Ｆｏｕｎｄａｔｉｏｎ  Ｐｒｏｔｅｃｔｅｄ  Ｍｅｄｉａ  Ｐａｔｈ（ＰＭＰ）である。動的保護解決法は、システムの動的動作を見て、セキュリティ違反を識別することを目標としている。動的検出の一例は、機械の動作を観測し、ウェブページ要求の後に新しいポートが開かれるなどの任意の不規則な動作パターンの出現を識別しようと試みるマルウェア検出コードである。動的および静的手法を組み合わせることも行われている。しかし、いずれの方法も、単独でまたは他と組み合わせて、異なる特権的レベルを有する異なるコードベースの分離を保証することはできていない。従来の方法では、特権保護における違反は、無許可の特権コードの実行を可能にする。
【００１１】
本明細書に記載の技法は、同一のコンピュータ、オペレーティングシステム、および／またはアプリケーションプラットフォーム上で相違する（divergent）かつ互換性のない命令セットを提供することによって、コード分離が生じることを可能にする。これらの技法は、実行ユニットが１つの命令セットのみからの命令を直接に実行できるようにすることによって、外部のまたは信頼できない実体と対話するコードが効果的にサンドボックスされることを可能にする（本明細書では、実行ユニットは、スレッド、プロセス、階層的プロテクションドメイン（たとえば、保護リング）、または同等のものを示し、プロセスは、スレッドの仮想実行環境を提供する）。特定のプロセスまたはスレッドもしくはリング（すなわち、実行ユニット）が破られた（breach）場合、破られた実行ユニットと明示的に関連し、その結果として別の（恐らくより能力のある）命令セット内の命令をその機械上で実行することができない、サンドボックスされた命令セットで破られることになる。実際には、１つの命令セットと関連し、それを実行するコードは、その命令セットを介して使用可能な機能およびリソースのみにアクセス権を有する。その命令セットが、制限され、かつ、様々な感知可能なまたは特権的なリソースへのアクセス権を許さない場合、その命令セットで実行されるプロセスは、ある特定の特権的命令を実行する能力を有さない。概念的には、そのプロセッサは、２つの異なる言語を話すものとして考えることができ、１つの状態に関連する実行ユニット（およびそれらの実行ユニットのみ）は、その状態の言語を話すことしかできない。
【００１２】
ここで、汎用プロセッサの考察について説明を進め、命令セットがどのように実行ユニットと関連付けられるかの考察を続ける。次いで、例示的命令セットを説明する。命令がどのように復号されるかの説明を提供し、次いで、異なる命令セットを有するプロセスまたはコンテキストの間で渡されるメッセージの考察が続く。
【００１３】
図１は、汎用プロセッサ１００を示す。本プロセッサは、任意のタイプ、たとえばＲＩＳＣ（縮小命令セットコンピュータ）またはＣＩＳＣ（複雑命令セットコンピュータ）プロセッサ、でもよい。さらに、プロセッサ１００は、マイクロコードを使用して、直接的にまたは間接的に命令を実装することができる。プロセッサ１００は、ＣＰＵキャッシュ１０２、算術論理ユニット（ＡＬＵ）１０４、およびプログラムカウンタ１０６などの様々な知られている構成要素を有する。モードビット１０８は、プロセッサ１００が動作している現在のモード、および、その結果として、どの命令セットがアクティブかを示す。一実施形態で、そのモードは、特権的レベル（たとえば、リング）と一致するが、プロセッサ１００がモードと命令セットを関連付ける手段を有することで十分である。命令レジスタ１１０は、実行されている現在の命令を保持する。通常の命令処理サイクル１１２は、ＣＰＵキャッシュ１０２から命令を取り出すステップと、命令レジスタ１１０にそれを記憶させるステップを含み得る。命令デコーダ１１４は、次いで、恐らくまたレジスタおよびメモリを操作して命令レジスタ１１０内の命令によって指定されたアドレスをロードし、命令レジスタ１１０内の命令のオペコード（オペレーションコード）を復号する。その命令はＡＬＵ１０４によって実行される。
【００１４】
一実施形態で、ＡＬＵ１０４は、２つの異なる命令セット、命令セットＸ１  １１６および命令セットＸ２  １１８を実装する。プロセッサ１００で実行するコードの観点からすると、ＡＬＵ１０４は、透過的である。プロセッサ１００は、所与の命令の呼出しが、プロセッサ１００が何らかのタイプの対応する動作（たとえば、レジスタを追加すること、レジスタを無効にすることなど）を実行することによって応答する結果をもたらすことになる、実行するコードとの「契約」を有する。しかし、プロセッサ１００の規定またはプロトコルは、現在のモード（モードビット１０８による）に対応する命令セット内の命令のみが実行されることになるというものである。
【００１５】
一実施形態で、命令セット分離は、命令を復号するプロセスで黙示的に提供される。命令デコーダ１１４は、モードビット１０８とリンクされる。すなわち、命令デコーダ１１４の論理は、モードビット１０８の内容によって知らされる。プロセッサが、命令セットＸ１  １１６内のまたは命令セットＸ１  １１８内の有効な命令として認識することになるかどうかは、モードビット１０８で指示される現在のモードに依存する。具体的には、命令デコーダ１１４が認識することになる命令は、モードビット１０８に依存する。たとえば、モードビット１０８がモードは「０」であると指示するとき、その場合、命令デコーダ１１４は、現在の命令を復号できず、「無効オペコード例外」または同様のものを発生させ得る。
【００１６】
別の実施形態では、命令セット分離は、ＡＬＵ１０４内で提供される。ＡＬＵ１０４は、モードビット１０８を見て、命令要求が許可されるべきかどうかを判定する。さらに別の実施形態で、命令ローダ１２０は、命令を命令レジスタ１１０にロードするとき、どの命令セットにその命令が属するかを示す命令内のビットを見ることができる。命令ローダ１２０は、モードビット１０８によって指示される現在のモードとその命令が属する命令セットの間のミスマッチが存在する場合、命令をロードすることを拒否することができる。命令の１つのセットが１つのモードで使用可能であり、命令の別の相互に排他的なセットが別のモードで使用可能であるという効果とともに、命令が現在のモードに基づいてフィルタをかけられ得るまたは限定され得る、命令をロードおよび実行するプロセス内の多数のポイントが存在することが理解されよう。
【００１７】
モードビットは、異なる命令セットを処理するための１つの方法であるが、任意のレジスタが使用可能である。さらに、命令セットまたは実行ユニットのモードは、単純に、管理技法である。命令セットは、概して、静的で、数が限られるので、オペレーティングシステムは、選択的に、または体系的に、異なる実行ユニットを異なる命令セットと関連付ける。たとえば、アクティブなプロセステーブルは、異なるプロセスの命令セットを指示するためのフラグを有する「命令セット」欄を有し得る。オペレーティングシステムが、テーブル内のプロセスを実行し始めるとき、そのオペレーティングシステムは、対応するプロセステーブル項目内のモードにしたがって、モードビットをセットする。
【００１８】
図２は、概念的サンドボックス１２０、１２２、１２４に関連して、命令セットＸ１  １１６、Ｘ２  １１８、およびＸ３  １４０を示す。図２に示す実施形態で、プロセッサは、実行ユニットがそれらの関連する命令セット内の命令のみを実行できるようにすることによって、実行分離を提供する。サンドボックス１２０（たとえば、モードビット１０８で識別されるモード）内の実行ユニット１２０Ａ、１２０Ｂ、１２０Ｃについて、命令セットＸ１  １１６のみが有効である。サンドボックス１２２内で、実行ユニット１２２Ａ、１２２Ｂ、１２２Ｃは、命令セットＸ２  １１８内の命令のみを実行することを許可され、サンドボックス１２４内の実行ユニット１２４Ａ、１２４Ｂ、１２４Ｃは、命令セットＸ３  １４０内の命令を実行することのみを許可される。少なくとも２つのモードまたはサンドボックスおよび２つの対応する命令セットが必要とされるが、３つ以上が使用され得ることに留意されたい。
【００１９】
一実施形態で、サンドボックスは、階層的プロテクションドメインまたは保護リングに相当し得る。この場合、プロセッサは、２つの命令セットを有することができ、１つの命令セットは１つのプロテクションドメイン（たとえば、リング０）のみと関連し（かつそれについて有効であり）、その他の命令セットは、複数の他のプロテクションドメインと関連する（たとえば、命令セットＸ２  １１８は、リング１  １４４およびリング２  １４６と関連する）。
【００２０】
図３は、例示的命令セットを示す。当技術分野では知られているように、機械命令は、レジスタ、情報ビットなどの他のデータとともにオペコードで構成される。説明のために、図３は、それぞれ、命令セットＸ１  １１６、Ｘ２  １１８、ならびにＸ３  １４０のオペコード１６０、１６２、および１６４のみを示す。その命令セットにかかわらず、各オペコードは、グローバルに一意である。すなわち、オペコードまたは命令デコーダ１１４は、一意に各オペコードを復号することになる。さらに、オペコード１６０、１６２、および１６４は、相互に排他的である。一実施形態で、１つの命令セット内のオペコード（および、それが表す命令）は、他の命令セット内では見つからない。説明のために、それぞれの命令セットからの命令から成る、アプリケーション（１つまたは複数の実行ユニット）が示される。たとえば、アプリ１  １６６およびアプリ２  １６８は、命令セットＸ１  １１６からの命令のみを有する。アプリ３  １７０で示されるアプリケーションは、命令セットＸ２  １１８からの命令のみを有し（対応するオペコード１７２によって示すように）、アプリ４  １７４は、命令セットＸ３  １４０内のオペコード／命令のみを有する。オペレーティングシステムは、どのアプリケーションまたは実行ユニットがどのモードまたは命令セットと関連するかを追跡し、アプリケーションまたは実行ユニットに関連する命令セットは、その実行ユニットがオペレーティングシステムによってロードおよび実行されるときの実行時条件に依存することになる。
【００２１】
一実施形態では、命令セットおよびオペコードは、相互に排他的である必要はない。無害な命令は、同じ命令セット内で使用することができ、その命令セットは、セキュリティリスクを提示する命令に関してのみ総合的に排他的でもよい。さらに、命令セットは、相互に排他的である命令サブセット（命令セットでもある）とオーバーラップする命令のサブセットの両方から成り得る。
【００２２】
相互に排他的オペコードを実装する１つの方法は、各オペコード内の第１のビットシーケンス１７６を各命令セットについて固有に、かつある命令セット内の各命令について同じにすることである（必ずしもその命令内の第１のビットではなく、ビットシーケンスは１つのビットでもよい）。たとえば、命令セットＸ１  １１６のオペコード１６０の最初の２つのビットは、すべて、「０１」を含む。同様に、オペコード１６２は第１のビットシーケンス内に「１０」を有し、オペコード１６４は第１のビットシーケンス内に「００」を有する。この実施形態では、その命令セット内の命令を一意に識別する各命令内の第２のビットシーケンス１７８も有することが便利であり得る。この方法は、異なる命令セット内の２つの命令が、両方ともＡＬＵ１０４内の同じ回路を使用して都合よく実装されるが、なお異なるオペコードを有する相異なる動作として存在することを可能にし得る。すなわち、第１のＡＤＤ命令は、命令セットＸ１  １１６内にオペコード「０１０００００１」を有することができ、命令セットＸ２  １１８内の別のＡＤＤ命令はオペコード「１００００００１」を有することができる。両方は互いに異なるオペコードを有する技術的に異なる命令であるが、ＡＤＤは害のない動作であると見なされるので、その機能は複数の命令セット内で使用可能でもよい場合があり得る。一実施形態で、１つのアプリケーションまたはプロセスは、異なる命令セットのコードを有する異なるセクションを有することができ、オペレーティングシステムは、以下に説明するように、互換性のない命令の異なるセットを使用する実行ユニット間で切り替えてコンテキストを処理することになる。
【００２３】
図４は、命令を取り出し、実行するためのプロセスを示す。本プロセスは、実行されることになる次の命令を取り出すことによって、ステップ２００で開始する。その命令は、次いで、ステップ２０２で復号される。前述のように、プロセッサは、現在アクティブな命令セットに対応するオペコードを有する命令のみを実装または認識する。したがって、ステップ２０４で命令を復号するエラーが存在する場合、次いで、何らかの障害措置が、ステップ２０６で生じる。たとえば、中断が生成される、現在の実行コンテキストが停止されるなど。命令が上手く復号された場合、次いでステップ２０８で、その命令は、プロセッサのＡＬＵまたは同等のものによって実行される。
【００２４】
前述のように、特定の命令セットの命令のみを所与のＣＰＵモードで実行できるようにする他の方法が存在する。たとえば、命令ローディングプロセス中に、スクリーニングステップが追加されて、命令セット（または、命令セットに対応する動作モード）にオペコードを関連付けるテーブルに対する入力オペコードをチェックすることができる。別の例として、命令制限が、命令を実行するときに、実行され得る。命令が正しく復号された場合でも、ＡＬＵ内の実行論理は、現在のモードが現在の命令について正しいものであるかどうかをテストすることができる。
【００２５】
図５は、異なる保護リング内で実行する実行ユニットを示す。この実施形態では、前述のように、実行ユニットは、スレッド、プロセスなどの実行の任意のユニット、または、階層的プロテクションドメイン、プロテクションドメインなどのその封じ込めのユニットである。実行ユニット２３０は、リング３  ２３２（たとえば、Ｘ２）のみについて有効な第１の命令セットからの様々な命令２３１から各々構成される。実行ユニット２３０は、リング３  ２３２で実行する。実行ユニット２３４は、実行ユニット２３４があるリング０  ２３６についてのみ有効な別の命令セット（たとえば、Ｘ１）内の命令２３５のみから各々構成される。オペレーティングシステムが、実行ユニット２３０、２３４の間でプロセッサ実行時間を割り当てるとき、そのオペレーティングシステムは、リング０  ２３６から、現在のプロテクションドメインを管理する。そのプロセッサが命令２３１および命令２３５を実行するとき、現在のリングの命令セット内の命令のみが実際に実行可能である。不正実行ユニット２３０がその特権的レベルをリング０  ２３６に上げる方法を見つけた場合でも、リング０がアクティブなプロテクションドメインであるとき、不正実行ユニット２３０の命令２３１は実行することさえできないことになるので、不正実行ユニット２３０は、特権における対応する利得を利用することはできないことになる。実際には、各実行ユニット２３０は、リング３  ２３２でロックされ、リング０の命令セット内に固有の機能のうちの少なくともいくつかを実行することはできない。
【００２６】
図６は、メッセージングシステムを示す。１つの命令セットを実行するプロセス（またはスレッド）が別の命令セットを実行する別のプロセスの機能を呼び出せるようにすることは、有用であり得る。たとえば、プロセス２  ２８０が第１の命令セットを有するコンテキスト２  ２８２内で実行する場合、そのとき、プロセス２  ２８０は、ＩＰＣメッセージングサービス２８８を使用し、何らかの外部コード、たとえば、コンテキストｌ  ２８６内で実行する（および、別個の命令セットを実行する）カーネルプロセス２８４を間接的に呼び出すことができ得る。
【００２７】
図７は、ＩＰＣメッセージングサービス２８８がいかにしてプロセス２  ２８０とカーネル２８４の間の実行に介在するかを示す。ステップ２９０で、プロセス２  ２８０が、ＯＳ（オペレーティングシステム）コールを引き起こす。ステップ２９２で、プロセス２  ２８０が、ＩＰＣメッセージングサービス２８８内のメッセージ待ち行列内の対応するメッセージを通知する。ステップ２９４で、カーネル２８４は、ＩＰＣメッセージングサービス２８８にそれが次のメッセージのために利用可能であることを知らせる。ＩＰＣメッセージングサービス２８８は、ステップ２９６で、その待ち行列からそのメッセージをポップし、カーネル２８４にそのＯＳコールに関するメッセージを渡すことによって、応答する。カーネル２８４は、ステップ２９８で、正しい命令セットを使用し、そのＯＳコールを実行する。結果は、ステップ３００でＩＰＣメッセージングサービス２８８に通知される。ステップ３０２で、ＩＰＣメッセージングサービスが、その結果を取得し、ステップ３０４で、その結果をプロセス２  ２８０に渡して返す。もちろん、そのメッセージの受け渡し、ステップ２９８での実行は、プロセス２  ２８０が適切な許可を有する場合にのみ許される。別の実施形態では、ＩＰＣメッセージングは、別個の実行ユニットが実行コンテキスト間で情報をやりとりすることを可能にするロックを有する共用メモリを使用し、実装される。この実施形態では、カーネルまたはオペレーティングシステムが、共用メモリを監視し、メッセージがその共用メモリ内にあるときに、実行ユニットに知らせる。
【００２８】
前述の実施形態で、ＨＴＴＰ（ハイパテキスト転送プロトコル）要求をパーズするものなどの危険な実行コンテキストまたはプロセスは、それらのプロセスを破るために、そのＨＴＴＰパーサの命令セット内の命令のみが使用可能であり、かつ適切に制限される場合、その命令セットは、様々なシステムリソースのアクセスまたは操作を可能にすることができないので、実際にサンドボックスすることが可能である。さらに、オペレーティングシステムは、異なる命令セットを有するセクションで構成された２値のローディングを処理すること、その異なる命令セットの間でコンテキスト切替えを処理すること、および、その異なる実行コンテキストのプロテクションドメインを管理することによって、前述のように、命令セットを有するプロセッサを処理することができる。
（結論）
【００２９】
前述の実施形態および特徴は、揮発性または非揮発性コンピュータまたはデバイス可読媒体に記憶された情報の形で実現することができる。これは、光記憶装置（たとえば、コンパクトディスク読取り専用メモリ（ＣＤ−ＲＯＭ））、磁気媒体、フラッシュ読取り専用メモリ（ＲＯＭ）、または、デジタル情報を記憶する任意の現在のまたは未来の手段などの媒体を少なくとも含むと考えられる。記憶される情報は、機械実行可能命令（たとえば、コンパイル済みの実行可能２進コード）、ソースコード、バイトコード、または、コンピュータデバイスが前述の様々な実施形態を実行することを可能にするまたはそのように構成するために使用することができる任意の他の情報の形態でもよい。これはまた、実施形態を遂行するプログラムの実行中の中央処理ユニット（ＣＰＵ）命令などの情報を記憶するランダムアクセスメモリ（ＲＡＭ）および／または仮想メモリなどの揮発性メモリ、ならびにプログラムまたは実行可能ファイルをロードおよび実行できるようにする情報を記憶する非揮発性媒体を少なくとも含むと考えられる。それらの実施形態および特徴は、携帯デバイス、ワークステーション、サーバ、モバイルワイヤレスデバイスなどを含む、任意のタイプのコンピュータデバイス上で実行することができる。
【図１】
0005847839.tif 000002
【図２】
0005847839.tif 000003
【図３】
0005847839.tif 000004
【図４】
0005847839.tif 000005
【図５】
0005847839.tif 000006
【図６】
0005847839.tif 000007
【図７】
0005847839.tif 000008