プロセッサ上で実行するための実行可能命令をサンドボックスする方法であって、前記プロセッサを実行するステップであって、前記プロセッサは第1の命令セットおよび第2の命令セットを実装し、前記第1の命令セットは第1のオペコードを有する第1の命令で構成され、前記第2の命令セットは第2のオペコードを有する第2の命令で構成され、前記第1の命令セットは、前記プロセッサが第1のモードにあるときにのみ、関連付けられかつ実装され、前記第2の命令セットは、前記プロセッサが第2のモードにあるときにのみ、関連付けられかつ実装される、ステップと、前記プロセッサ上で第1の実行ユニットおよび第2の実行ユニットを実行するステップであって、前記第1の実行ユニットはそれぞれ、複数の前記第1の命令を備え、前記第2の実行ユニットはそれぞれ、複数の前記第2の命令を備える、ステップと、前記第1および第2の実行ユニットを実行している間の任意の所与の時間に、命令を復号しているとき、前記プロセッサが前記第1のモードで動作している間に有効な命令として第1のオペコードのみを認識し、前記プロセッサが前記第2のモードで動作している間に有効な命令として第2のオペコードのみを認識するステップとを含むことを特徴とする方法。前記第1の命令セット内の前記オペコードのうちのいくつかは、前記第2の命令セット内のオペコードと等しいことを特徴とする請求項1に記載の方法。前記第1のオペコードの各々が前記第2のオペコードの各々と等しくないように、前記第1のオペコードは前記第2のオペコードと相互に排他的であることを特徴とする請求項1に記載の方法。前記プロセッサによって現在実装されている前記命令セットは、現在の実行コンテキストを変更する実行コンテキスト切替え中に変わることを特徴とする請求項3に記載の方法。前記第1のオペコードまたは前記第2のオペコードのみが、任意の所与の時間に有効なオペコードとして前記プロセッサによって認識されることを特徴とする請求項1に記載の方法。前記第1のオペコードが前記プロセッサによって現在認識されるとき、かつ第2のオペコードが実行を試みられるとき、前記プロセッサのデコーダは前記第2のオペコードを復号できないことを特徴とする請求項5に記載の方法。プロセッサであって、前記プロセッサによって実装される第1の複数の機械命令を含む第1の命令セットであって、前記第1の複数の機械命令内の命令を備える前記プロセッサにロードされるコードは、前記コードが前記第1の命令セットと関連付けられた実行ユニットの部分である場合にのみ前記プロセッサによって復号および実行可能である、第1の命令セットと、前記プロセッサによって直接実装される第2の複数の機械命令を含む第2の命令セットであって、前記第2の命令セット内の命令を備える前記プロセッサにロードされるコードは、前記コードが前記第2の命令セットと関連付けられた実行ユニットの部分である場合にのみ前記プロセッサによって復号および実行可能である、前記第2の命令セットとを備え、前記第1の命令セットが前記第2の命令セットの命令を有さず、前記第2の命令セットが前記第1の命令セットを有さないように、前記第1の命令セットおよび前記第2の命令セットは相互に排他的であることを特徴とするプロセッサ。前記プロセッサ内のモード設定が前記第1の命令セットに対応する第1の値に現在設定されているときに、有効な命令として前記第1の命令セット内の命令のみを識別することを特徴とする請求項7に記載のプロセッサ。少なくとも第1のモードおよび第2のモードを提供するプロセッサによって実行される方法であって、前記第1のモードと関連する実行ユニットを実行するステップと、前記第2のモードと関連する実行ユニットを実行するステップと、前記プロセッサが前記第1のモードに設定されている間に任意の実行ユニットが現在実行されている間、第1の命令セット内の命令のみを実行できるようにするステップと、前記プロセッサが前記第2のモードにセットされている間に任意の実行ユニットが実行されている間、前記第1の命令セットのいずれの命令も含まない、第2の命令セット内の命令のみを実行できるようにするステップとを含むことを特徴とする方法。各オペコードは第1のビットシーケンスおよび第2のビットシーケンスを含み、第1のオペコードは前記第2のビットシーケンス内に同じビット列を有する対応する第2のオペコードを有し、前記第1のオペコードはすべて前記第1のビットシーケンス内に同じビット列を有することを特徴とする請求項9に記載の方法。背景技術で述べたように、コンピュータセキュリティの分野では、悪意のあるコードを実行するのを防ぐ問題を解決するための多数の試みが存在している。従来の解決法は、一般に2つに分類される:静的保護staticprotectionおよび動的検出dynamicdetection。静的保護解決法は、有効なコードのみが実行されるようにすることをを目標としている。静的保護の一例は、暗号で署名されたバイナリのみをロードする、MediaFoundationProtectedMediaPathPMPである。動的保護解決法は、システムの動的動作を見て、セキュリティ違反を識別することを目標としている。動的検出の一例は、機械の動作を観測し、ウェブページ要求の後に新しいポートが開かれるなどの任意の不規則な動作パターンの出現を識別しようと試みるマルウェア検出コードである。動的および静的手法を組み合わせることも行われている。しかし、いずれの方法も、単独でまたは他と組み合わせて、異なる特権的レベルを有する異なるコードベースの分離を保証することはできていない。従来の方法では、特権保護における違反は、無許可の特権コードの実行を可能にする。本明細書に記載の技法は、同一のコンピュータ、オペレーティングシステム、および/またはアプリケーションプラットフォーム上で相違するdivergentかつ互換性のない命令セットを提供することによって、コード分離が生じることを可能にする。これらの技法は、実行ユニットが1つの命令セットのみからの命令を直接に実行できるようにすることによって、外部のまたは信頼できない実体と対話するコードが効果的にサンドボックスされることを可能にする本明細書では、実行ユニットは、スレッド、プロセス、階層的プロテクションドメインたとえば、保護リング、または同等のものを示し、プロセスは、スレッドの仮想実行環境を提供する。特定のプロセスまたはスレッドもしくはリングすなわち、実行ユニットが破られたbreach場合、破られた実行ユニットと明示的に関連し、その結果として別の恐らくより能力のある命令セット内の命令をその機械上で実行することができない、サンドボックスされた命令セットで破られることになる。実際には、1つの命令セットと関連し、それを実行するコードは、その命令セットを介して使用可能な機能およびリソースのみにアクセス権を有する。その命令セットが、制限され、かつ、様々な感知可能なまたは特権的なリソースへのアクセス権を許さない場合、その命令セットで実行されるプロセスは、ある特定の特権的命令を実行する能力を有さない。概念的には、そのプロセッサは、2つの異なる言語を話すものとして考えることができ、1つの状態に関連する実行ユニットおよびそれらの実行ユニットのみは、その状態の言語を話すことしかできない。ここで、汎用プロセッサの考察について説明を進め、命令セットがどのように実行ユニットと関連付けられるかの考察を続ける。次いで、例示的命令セットを説明する。命令がどのように復号されるかの説明を提供し、次いで、異なる命令セットを有するプロセスまたはコンテキストの間で渡されるメッセージの考察が続く。図1は、汎用プロセッサ100を示す。本プロセッサは、任意のタイプ、たとえばRISC縮小命令セットコンピュータまたはCISC複雑命令セットコンピュータプロセッサ、でもよい。さらに、プロセッサ100は、マイクロコードを使用して、直接的にまたは間接的に命令を実装することができる。プロセッサ100は、CPUキャッシュ102、算術論理ユニットALU104、およびプログラムカウンタ106などの様々な知られている構成要素を有する。モードビット108は、プロセッサ100が動作している現在のモード、および、その結果として、どの命令セットがアクティブかを示す。一実施形態で、そのモードは、特権的レベルたとえば、リングと一致するが、プロセッサ100がモードと命令セットを関連付ける手段を有することで十分である。命令レジスタ110は、実行されている現在の命令を保持する。通常の命令処理サイクル112は、CPUキャッシュ102から命令を取り出すステップと、命令レジスタ110にそれを記憶させるステップを含み得る。命令デコーダ114は、次いで、恐らくまたレジスタおよびメモリを操作して命令レジスタ110内の命令によって指定されたアドレスをロードし、命令レジスタ110内の命令のオペコードオペレーションコードを復号する。その命令はALU104によって実行される。一実施形態で、ALU104は、2つの異なる命令セット、命令セットX1116および命令セットX2118を実装する。プロセッサ100で実行するコードの観点からすると、ALU104は、透過的である。プロセッサ100は、所与の命令の呼出しが、プロセッサ100が何らかのタイプの対応する動作たとえば、レジスタを追加すること、レジスタを無効にすることなどを実行することによって応答する結果をもたらすことになる、実行するコードとの契約を有する。しかし、プロセッサ100の規定またはプロトコルは、現在のモードモードビット108によるに対応する命令セット内の命令のみが実行されることになるというものである。一実施形態で、命令セット分離は、命令を復号するプロセスで黙示的に提供される。命令デコーダ114は、モードビット108とリンクされる。すなわち、命令デコーダ114の論理は、モードビット108の内容によって知らされる。プロセッサが、命令セットX1116内のまたは命令セットX1118内の有効な命令として認識することになるかどうかは、モードビット108で指示される現在のモードに依存する。具体的には、命令デコーダ114が認識することになる命令は、モードビット108に依存する。たとえば、モードビット108がモードは0であると指示するとき、その場合、命令デコーダ114は、現在の命令を復号できず、無効オペコード例外または同様のものを発生させ得る。別の実施形態では、命令セット分離は、ALU104内で提供される。ALU104は、モードビット108を見て、命令要求が許可されるべきかどうかを判定する。さらに別の実施形態で、命令ローダ120は、命令を命令レジスタ110にロードするとき、どの命令セットにその命令が属するかを示す命令内のビットを見ることができる。命令ローダ120は、モードビット108によって指示される現在のモードとその命令が属する命令セットの間のミスマッチが存在する場合、命令をロードすることを拒否することができる。命令の1つのセットが1つのモードで使用可能であり、命令の別の相互に排他的なセットが別のモードで使用可能であるという効果とともに、命令が現在のモードに基づいてフィルタをかけられ得るまたは限定され得る、命令をロードおよび実行するプロセス内の多数のポイントが存在することが理解されよう。モードビットは、異なる命令セットを処理するための1つの方法であるが、任意のレジスタが使用可能である。さらに、命令セットまたは実行ユニットのモードは、単純に、管理技法である。命令セットは、概して、静的で、数が限られるので、オペレーティングシステムは、選択的に、または体系的に、異なる実行ユニットを異なる命令セットと関連付ける。たとえば、アクティブなプロセステーブルは、異なるプロセスの命令セットを指示するためのフラグを有する命令セット欄を有し得る。オペレーティングシステムが、テーブル内のプロセスを実行し始めるとき、そのオペレーティングシステムは、対応するプロセステーブル項目内のモードにしたがって、モードビットをセットする。図2は、概念的サンドボックス120、122、124に関連して、命令セットX1116、X2118、およびX3140を示す。図2に示す実施形態で、プロセッサは、実行ユニットがそれらの関連する命令セット内の命令のみを実行できるようにすることによって、実行分離を提供する。サンドボックス120たとえば、モードビット108で識別されるモード内の実行ユニット120A、120B、120Cについて、命令セットX1116のみが有効である。サンドボックス122内で、実行ユニット122A、122B、122Cは、命令セットX2118内の命令のみを実行することを許可され、サンドボックス124内の実行ユニット124A、124B、124Cは、命令セットX3140内の命令を実行することのみを許可される。少なくとも2つのモードまたはサンドボックスおよび2つの対応する命令セットが必要とされるが、3つ以上が使用され得ることに留意されたい。一実施形態で、サンドボックスは、階層的プロテクションドメインまたは保護リングに相当し得る。この場合、プロセッサは、2つの命令セットを有することができ、1つの命令セットは1つのプロテクションドメインたとえば、リング0のみと関連しかつそれについて有効であり、その他の命令セットは、複数の他のプロテクションドメインと関連するたとえば、命令セットX2118は、リング1144およびリング2146と関連する。図3は、例示的命令セットを示す。当技術分野では知られているように、機械命令は、レジスタ、情報ビットなどの他のデータとともにオペコードで構成される。説明のために、図3は、それぞれ、命令セットX1116、X2118、ならびにX3140のオペコード160、162、および164のみを示す。その命令セットにかかわらず、各オペコードは、グローバルに一意である。すなわち、オペコードまたは命令デコーダ114は、一意に各オペコードを復号することになる。さらに、オペコード160、162、および164は、相互に排他的である。一実施形態で、1つの命令セット内のオペコードおよび、それが表す命令は、他の命令セット内では見つからない。説明のために、それぞれの命令セットからの命令から成る、アプリケーション1つまたは複数の実行ユニットが示される。たとえば、アプリ1166およびアプリ2168は、命令セットX1116からの命令のみを有する。アプリ3170で示されるアプリケーションは、命令セットX2118からの命令のみを有し対応するオペコード172によって示すように、アプリ4174は、命令セットX3140内のオペコード/命令のみを有する。オペレーティングシステムは、どのアプリケーションまたは実行ユニットがどのモードまたは命令セットと関連するかを追跡し、アプリケーションまたは実行ユニットに関連する命令セットは、その実行ユニットがオペレーティングシステムによってロードおよび実行されるときの実行時条件に依存することになる。一実施形態では、命令セットおよびオペコードは、相互に排他的である必要はない。無害な命令は、同じ命令セット内で使用することができ、その命令セットは、セキュリティリスクを提示する命令に関してのみ総合的に排他的でもよい。さらに、命令セットは、相互に排他的である命令サブセット命令セットでもあるとオーバーラップする命令のサブセットの両方から成り得る。相互に排他的オペコードを実装する1つの方法は、各オペコード内の第1のビットシーケンス176を各命令セットについて固有に、かつある命令セット内の各命令について同じにすることである必ずしもその命令内の第1のビットではなく、ビットシーケンスは1つのビットでもよい。たとえば、命令セットX1116のオペコード160の最初の2つのビットは、すべて、01を含む。同様に、オペコード162は第1のビットシーケンス内に10を有し、オペコード164は第1のビットシーケンス内に00を有する。この実施形態では、その命令セット内の命令を一意に識別する各命令内の第2のビットシーケンス178も有することが便利であり得る。この方法は、異なる命令セット内の2つの命令が、両方ともALU104内の同じ回路を使用して都合よく実装されるが、なお異なるオペコードを有する相異なる動作として存在することを可能にし得る。すなわち、第1のADD命令は、命令セットX1116内にオペコード01000001を有することができ、命令セットX2118内の別のADD命令はオペコード10000001を有することができる。両方は互いに異なるオペコードを有する技術的に異なる命令であるが、ADDは害のない動作であると見なされるので、その機能は複数の命令セット内で使用可能でもよい場合があり得る。一実施形態で、1つのアプリケーションまたはプロセスは、異なる命令セットのコードを有する異なるセクションを有することができ、オペレーティングシステムは、以下に説明するように、互換性のない命令の異なるセットを使用する実行ユニット間で切り替えてコンテキストを処理することになる。図4は、命令を取り出し、実行するためのプロセスを示す。本プロセスは、実行されることになる次の命令を取り出すことによって、ステップ200で開始する。その命令は、次いで、ステップ202で復号される。前述のように、プロセッサは、現在アクティブな命令セットに対応するオペコードを有する命令のみを実装または認識する。したがって、ステップ204で命令を復号するエラーが存在する場合、次いで、何らかの障害措置が、ステップ206で生じる。たとえば、中断が生成される、現在の実行コンテキストが停止されるなど。命令が上手く復号された場合、次いでステップ208で、その命令は、プロセッサのALUまたは同等のものによって実行される。前述のように、特定の命令セットの命令のみを所与のCPUモードで実行できるようにする他の方法が存在する。たとえば、命令ローディングプロセス中に、スクリーニングステップが追加されて、命令セットまたは、命令セットに対応する動作モードにオペコードを関連付けるテーブルに対する入力オペコードをチェックすることができる。別の例として、命令制限が、命令を実行するときに、実行され得る。命令が正しく復号された場合でも、ALU内の実行論理は、現在のモードが現在の命令について正しいものであるかどうかをテストすることができる。図5は、異なる保護リング内で実行する実行ユニットを示す。この実施形態では、前述のように、実行ユニットは、スレッド、プロセスなどの実行の任意のユニット、または、階層的プロテクションドメイン、プロテクションドメインなどのその封じ込めのユニットである。実行ユニット230は、リング3232たとえば、X2のみについて有効な第1の命令セットからの様々な命令231から各々構成される。実行ユニット230は、リング3232で実行する。実行ユニット234は、実行ユニット234があるリング0236についてのみ有効な別の命令セットたとえば、X1内の命令235のみから各々構成される。オペレーティングシステムが、実行ユニット230、234の間でプロセッサ実行時間を割り当てるとき、そのオペレーティングシステムは、リング0236から、現在のプロテクションドメインを管理する。そのプロセッサが命令231および命令235を実行するとき、現在のリングの命令セット内の命令のみが実際に実行可能である。不正実行ユニット230がその特権的レベルをリング0236に上げる方法を見つけた場合でも、リング0がアクティブなプロテクションドメインであるとき、不正実行ユニット230の命令231は実行することさえできないことになるので、不正実行ユニット230は、特権における対応する利得を利用することはできないことになる。実際には、各実行ユニット230は、リング3232でロックされ、リング0の命令セット内に固有の機能のうちの少なくともいくつかを実行することはできない。図6は、メッセージングシステムを示す。1つの命令セットを実行するプロセスまたはスレッドが別の命令セットを実行する別のプロセスの機能を呼び出せるようにすることは、有用であり得る。たとえば、プロセス2280が第1の命令セットを有するコンテキスト2282内で実行する場合、そのとき、プロセス2280は、IPCメッセージングサービス288を使用し、何らかの外部コード、たとえば、コンテキストl286内で実行するおよび、別個の命令セットを実行するカーネルプロセス284を間接的に呼び出すことができ得る。図7は、IPCメッセージングサービス288がいかにしてプロセス2280とカーネル284の間の実行に介在するかを示す。ステップ290で、プロセス2280が、OSオペレーティングシステムコールを引き起こす。ステップ292で、プロセス2280が、IPCメッセージングサービス288内のメッセージ待ち行列内の対応するメッセージを通知する。ステップ294で、カーネル284は、IPCメッセージングサービス288にそれが次のメッセージのために利用可能であることを知らせる。IPCメッセージングサービス288は、ステップ296で、その待ち行列からそのメッセージをポップし、カーネル284にそのOSコールに関するメッセージを渡すことによって、応答する。カーネル284は、ステップ298で、正しい命令セットを使用し、そのOSコールを実行する。結果は、ステップ300でIPCメッセージングサービス288に通知される。ステップ302で、IPCメッセージングサービスが、その結果を取得し、ステップ304で、その結果をプロセス2280に渡して返す。もちろん、そのメッセージの受け渡し、ステップ298での実行は、プロセス2280が適切な許可を有する場合にのみ許される。別の実施形態では、IPCメッセージングは、別個の実行ユニットが実行コンテキスト間で情報をやりとりすることを可能にするロックを有する共用メモリを使用し、実装される。この実施形態では、カーネルまたはオペレーティングシステムが、共用メモリを監視し、メッセージがその共用メモリ内にあるときに、実行ユニットに知らせる。前述の実施形態で、HTTPハイパテキスト転送プロトコル要求をパーズするものなどの危険な実行コンテキストまたはプロセスは、それらのプロセスを破るために、そのHTTPパーサの命令セット内の命令のみが使用可能であり、かつ適切に制限される場合、その命令セットは、様々なシステムリソースのアクセスまたは操作を可能にすることができないので、実際にサンドボックスすることが可能である。さらに、オペレーティングシステムは、異なる命令セットを有するセクションで構成された2値のローディングを処理すること、その異なる命令セットの間でコンテキスト切替えを処理すること、および、その異なる実行コンテキストのプロテクションドメインを管理することによって、前述のように、命令セットを有するプロセッサを処理することができる。結論前述の実施形態および特徴は、揮発性または非揮発性コンピュータまたはデバイス可読媒体に記憶された情報の形で実現することができる。これは、光記憶装置たとえば、コンパクトディスク読取り専用メモリCD-ROM、磁気媒体、フラッシュ読取り専用メモリROM、または、デジタル情報を記憶する任意の現在のまたは未来の手段などの媒体を少なくとも含むと考えられる。記憶される情報は、機械実行可能命令たとえば、コンパイル済みの実行可能2進コード、ソースコード、バイトコード、または、コンピュータデバイスが前述の様々な実施形態を実行することを可能にするまたはそのように構成するために使用することができる任意の他の情報の形態でもよい。これはまた、実施形態を遂行するプログラムの実行中の中央処理ユニットCPU命令などの情報を記憶するランダムアクセスメモリRAMおよび/または仮想メモリなどの揮発性メモリ、ならびにプログラムまたは実行可能ファイルをロードおよび実行できるようにする情報を記憶する非揮発性媒体を少なくとも含むと考えられる。それらの実施形態および特徴は、携帯デバイス、ワークステーション、サーバ、モバイルワイヤレスデバイスなどを含む、任意のタイプのコンピュータデバイス上で実行することができる。