(57)【要約】セキュリティ例外を取り扱うための方法およびシステム。この方法は、セキュアメモリのベースアドレスにセキュリティ例外スタックフレーム（９００）を作成することを含む。また、この方法は、フォールティングコードシーケンスアドレスおよび１つ以上のレジスタ値をセキュリティ例外スタックフレーム（９００）に書き込むことと、複数のセキュリティ例外命令を実行することとを含む。
2005528690.tif 000002
【特許請求の範囲】
【請求項１】
セキュアメモリ内のベースアドレスにセキュリティ例外スタックフレーム（９００）を作成し、
フォールティングコードシーケンスアドレスおよび１つ以上のレジスタ値を前記セキュリティ例外スタックフレーム（９００）に書き込み、
複数のセキュリティ例外命令を実行する、方法。
【請求項２】
前記セキュリティ例外スタックフレーム（９００）の作成では、ハードウェアセキュア実行モードセキュリティ例外およびソフトウェアセキュア実行モードセキュリティ例外の少なくとも１つを含むセキュリティ例外を受信し、
前記セキュアメモリの前記ベースアドレスに前記セキュリティ例外スタックフレーム（９００）の作成では、前記セキュリティ例外と関連付けられたエラーコードの位置を識別する、請求項１に記載の方法。
【請求項３】
前記セキュアメモリの前記ベースアドレスの前記セキュリティ例外スタックフレーム（９００）の作成では、
エラーコード上にターゲットアドレスを書き込み、
１つ以上のレジスタ（５１０）から複数のレジスタ値を書き込む、請求項１に記載の方法。
【請求項４】
ターゲットアドレスおよび複数のレジスタ値を１つ以上のセキュアレジスタ（５１０）から読み取る、請求項１に記載の方法。
【請求項５】
前記セキュアメモリの前記ベースアドレスに前記セキュリティ例外スタックフレーム（９００）の作成では、前記ベースアドレスおよび前記セキュアメモリにあるオフセットにスタックポインタを書き込む、請求項１に記載の方法。
【請求項６】
セキュリティレジスタ（９０２）にあるアドレスと、ベースメモリアドレスレジスタからのアドレスとをスワッピングし、前記ベースメモリアドレスレジスタからの前記アドレスと、前記セキュリティレジスタ（９０２）にある前記アドレスとをスワッピングする、請求項１に記載の方法。
【請求項７】
前記複数のセキュリティ例外命令の実行では、エラーコードの解析、または、前記セキュリティ例外の原因を決定するためのフォールティング命令のデコードがなされる、請求項１に記載の方法。
【請求項８】
リクエストをモニタするように構成され、リクエストの一つに応答してセキュリティ例外を生成するようにさらに構成された、１つ以上のセキュリティチェックユニット（３１６）と、
複数のセキュア格納位置（５１０）と、
セキュアメモリ内のベースアドレスにセキュリティ例外スタックフレーム（９００）を作成し、フォールティングコードシーケンスアドレスおよび１つ以上のレジスタ値を前記セキュリティ例外スタックフレーム（９００）に書き込むように構成されたプロセッサ（３０２）と、を含み、
前記プロセッサ（３０２）は、セキュリティカーネル（４０４）を実行するようにさらに構成され、当該セキュリティカーネル（４０４）が、複数のセキュリティ例外命令を実行するように構成される、システム。
【請求項９】
前記セキュリティカーネル（４０４）は、エラーコード、ハードウェアセキュア実行モードセキュリティ例外通知、およびソフトウェアセキュア実行モードセキュリティ例外通知の少なくとも１つを含む、セキュリティ例外通知を受信するようにさらに構成される、請求項８に記載のシステム。
【請求項１０】
前記プロセッサ（３０２）が、
１つ以上のセキュアレジスタ（５１０）から１つ以上のレジスタ値を読み取り、
前記セキュリティメモリへ１つ以上のレジスタ値を書き込み、
前記セキュリティカーネル（４０４）に制御を移すようにさらに構成される、請求項８に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、コンピュータシステムに関し、さらに詳しく言えば、コンピューティングシステムにセキュリティを提供する方法に関する。
【背景技術】
【０００２】
図１は、Ｗｉｎｄｏｗｓ（Ｒ）オペレーティングシステム（Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐ．、Ｒｅｄｍｏｎｄ、ＷＡ）の実行時などに、Ｘ８６プロセッサによって生成される例外スタックフレーム１００の図である。例外ハンドラへのエントリ時、例外が生じたアプリケーションプログラム（すなわち、「フォールティングアプリケーション（faulting application）」）のすべてのレジスタが、コードセグメント（ＣＳ：code segment）、命令ポインタ（ＥＩＰ：instruction pointer）、スタックセグメント（ＳＳ：stack segment）、スタックポインタ（ＥＳＰ：stack pointer）レジスタ、およびＥＦＬＡＧＳを除いて保存される。これらのレジスタのコンテンツは、例外スタックフレーム１００で利用可能である。
【０００３】
例外スタックフレーム１００は、セグメント化アドレスＳＳ：ＥＳＰで始まる。エラーコードは、例外スタックフレーム１００のセグメント化アドレスＳＳ：ＥＳＰ＋００ｈにある。フォールティングアプリケーションの命令ポインタ（ＥＩＰ）レジスタのコンテンツは、例外スタックフレーム１００のセグメント化アドレスＳＳ：ＥＳＰ＋０４ｈにある。フォールティングアプリケーションのコードセグメント（ＣＳ）レジスタのコンテンツは、例外スタックフレーム１００のセグメント化アドレスＳＳ：ＥＳＰ＋０８ｈにある。フォールティングアプリケーションのフラグ（ＥＦＬＡＧＳ）レジスタのコンテンツは、例外スタックフレーム１００のセグメント化アドレスＳＳ：ＥＳＰ＋０Ｃｈにある。フォールティングアプリケーションのスタックポインタ（ＥＳＰ）レジスタのコンテンツは、例外スタックフレーム１００のセグメント化アドレスＳＳ：ＥＳＰ＋１０ｈにある。フォールティングアプリケーションのスタックセグメント（ＳＳ）レジスタのコンテンツは、例外スタックフレーム１００のセグメント化アドレスＳＳ：ＥＳＰ＋１４ｈにある。ＥＳＰ値およびＳＳ値は、例外ハンドラへの関連するコントロール転送で特権レベルが変化すれば、例外スタックフレーム１００に現れることに留意されたい。
【０００４】
セグメント化アドレスＳＳ：ＥＳＰ＋０４ｈにある、フォールティングアプリケーションの命令ポインタ（ＥＩＰ）レジスタのコンテンツは、例外を発生したフォールティングアプリケーションにある命令をポイントする。セグメント化アドレスＳＳ：ＥＳＰ＋１０ｈにある、フォールティングアプリケーションのスタックポインタ（ＥＳＰ）レジスタのコンテンツは、フォールト時間でのフォールティングアプリケーションのスタックフレームのアドレスである（すなわち、それをポイントする）。
【０００５】
セグメント関係の例外のエラーコードは、保護モードセレクタに非常に類似している。最上位の１３ビット（ビット１５：３）は、セレクタインデックスであり、ビット２は、テーブルインデックスである。しかしながら、リクエスタ特権レベル（ＲＰＬ：requestor privilege level）の代わりに、ビット０およびビット１は、以下の一致を有する。すなわち、フォールトがプログラム外部のイベントによって生じたものであれば、ビット０（ＥＸＴ）が設定され、セレクタインデックスがＩＤＴのゲートディスクリプタを参照すれば、ビット１（ＩＤＴ）が設定される。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
図２は、Ａｄｖａｎｃｅｄ  Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓ，Ｉｎｃ．製のＸ８６プロセッサにおいて使用されるＳＹＳＣＡＬＬ／ＳＹＳＲＥＴターゲットアドレスレジスタ（ＳＴＡＲ）２００の図である。ＳＹＳＣＡＬＬ／ＳＹＳＲＥＴターゲットアドレスレジスタ（ＳＴＡＲ）２００は、「ＳＹＳＲＥＴ ＣＳセレクタおよびＳＳセレクタベース」フィールドと、「ＳＹＳＣＡＬＬ ＣＳセレクタおよびＳＳセレクタベース」フィールドと、「ターゲットＥＩＰアドレス」フィールドとを含む。
【０００７】
ＳＹＳＣＡＬＬ命令の実行前のある時点で、オペレーティングシステムは、適切なシステムサービスコードのコードセグメント（ＣＳ）の値を、ＳＹＳＣＡＬＬ／ＳＹＳＲＥＴターゲットアドレスレジスタ（ＳＴＡＲ）２００のＳＹＳＣＡＬＬ  ＣＳセレクタおよびＳＳセレクタベースフィールドに書き込む。また、オペレーティングシステムは、実行予定のシステムサービスコード内にある第１の命令のアドレスを、ＳＹＳＣＡＬＬ／ＳＹＳＲＥＴターゲットアドレスレジスタ（ＳＴＡＲ）２００のターゲットＥＩＰアドレスフィールドに書き込む。ＳＴＡＲレジスタは、システムブート時に環境設定される。ターゲットＥＩＰアドレスは、オペレーティングシステムのカーネルにある固定システムサービス領域をポイントするものであってよい。
【０００８】
ＳＹＳＣＡＬＬ命令の実行中、ＳＹＳＣＡＬＬ ＣＳセレクタおよびＳＳセレクタベースフィールドのコンテンツは、ＣＳレジスタにコピーされる。ＳＹＳＣＡＬＬ ＣＳセレクタおよびＳＳセレクタベースフィールドのコンテンツに値「１０００ｂ」を加えたものが、ＳＳレジスタにコピーされる。これによって、ＣＳセレクタのインデックスフィールドが効果的にインクリメントされることで、結果的なＳＳセレクタは、ＣＳディスクリプタの後、ディスクリプタテーブルにある次のディスクリプタをポイントする。ＥＩＰアドレスフィールドのコンテンツは、命令ポインタ（ＥＩＰ）レジスタにコピーされ、実行予定の第１の命令のアドレスを指定する。
【０００９】
ＳＹＳＣＡＬＬ命令に対応するＳＹＳＲＥＴ命令実行前のある時点で、オペレーティングシステムは、呼び出しコードのコードセグメント（ＣＳ）の値を、ＳＹＳＣＡＬＬ／ＳＹＳＲＥＴターゲットアドレスレジスタ（ＳＴＡＲ）２００のＳＹＳＲＥＴ ＣＳセレクタおよびＳＳセレクタベースフィールドに書き込む。ＳＹＳＲＥＴ命令は、ＥＣＸレジスタから戻りＥＩＰアドレスを獲得する。
【課題を解決するための手段】
【００１０】
本発明の１つの態様によれば、ある方法が提供される。この方法は、セキュアメモリ（保護されたメモリ）のベースアドレスにセキュリティ例外スタックフレームを作成することを含む。また、この方法は、フォールティングコードシーケンスアドレスおよび１つ以上のレジスタ値をセキュリティ例外スタックフレームに書き込むことと、複数のセキュリティ例外命令を実行することとを含む。
【００１１】
本発明の別の態様によれば、あるシステムが提供される。このシステムは、リクエストをモニタするように構成された１つ以上のセキュリティチェックユニットと、複数のセキュア格納位置とを含む。また、このシステムは、セキュリティカーネルを実行するように構成されたプロセッサを含む。１つ以上のセキュリティチェックユニットは、リクエストの１つ又は複数に応答してセキュリティ例外を生成するようにさらに構成される。プロセッサは、セキュアメモリ内のベースアドレスにセキュリティ例外スタックフレームを作成し、フォールティングコードシーケンスアドレスおよび１つ以上のレジスタセキュリティ例外スタックフレームに書き込むようにさらに構成される。セキュリティカーネルは、複数のセキュリティ例外命令を実行するように構成される。
【００１２】
本発明のさらなる別の態様によれば、機械読み取り可能媒体が提供される。機械読み取り可能媒体は、コンピュータシステムの設定で実行されるとき、この方法を実行する命令で構成される。
【００１３】
本発明のさらなる別の態様によれば、別の方法が提供される。この方法は、セキュリティ例外を受信することと、セキュリティ例外の受信に応答して、セキュアメモリのベースアドレスにセキュリティ例外スタックフレームを作成することとを含む。また、この方法は、フォールティングコードシーケンスアドレスおよび１つ以上のレジスタ値をセキュリティ例外スタックフレームに書き込むことと、複数のセキュリティ例外命令を実行することとを含む。
【００１４】
本発明は、添付の図面と組み合わせた以下の記載を参照することによって理解されてよく、図面において、参照番号が同様の要素は、それぞれ同様の要素を示す。
【００１５】
本発明は、さまざまな修正および別の形態が可能なものであるが、その具体的な実施形態が、例示的に図面に示され、本願明細書に記載される。しかしながら、本願明細書における具体的な実施形態の記載は、本発明を開示された特定の形態に限定することを意図したものではなく、むしろ、添付の特許請求の範囲内に定義したような本発明の趣旨および範囲内にあるすべての修正、均等物、および代替物に及ぶことが想定されていることを理解されたい。
【発明を実施するための最良の形態】
【００１６】
以下、本発明の例示的な実施形態について記載する。明確にするために、本願明細書において、実際の実施例のすべての特徴が記載されているわけではない。言うまでもなく、このような実際の実施形態を開発するにあたって、システム関連の制約やビジネス関連の制約を踏まえるなど、実施例ごとにさまざまな判断を下して開発者らの意図する目的を達成していく必要があり、これは実施例によって異なることは認識されよう。さらに、このような開発作業は、複雑であり時間を要することもあるが、本願の開示内容を利用できる当業者らにとっては日常業務の一環であることも認識されよう。
【００１７】
図３は、ＣＰＵ３０２、システムまたは「ホスト」ブリッジ３０４、メモリ３０６、第１のデバイスバス３０８（例えば、ペリフェラルコンポーネントインターコネクト、いわゆるＰＣＩバス）、デバイスバスブリッジ３１０、第２のデバイスバス３１２（例えば、業界標準アーキテクチャ、いわゆるＩＳＡバス）、および４つのデバイスハードウェアユニット３１４Ａ〜３１４Ｄを含むコンピュータシステム３００の１つの実施形態の図である。ホストブリッジ３０４は、ＣＰＵ３０２、メモリ３０６、および第１のデバイスバス３０８に結合される。ホストブリッジ３０４は、ＣＰＵ３０２と第１のデバイスバス３０８との間の信号を変換し、メモリ３０６をＣＰＵ３０２および第１のデバイスバス３０８に動作可能に結合する。デバイスバスブリッジ３１０は、第１のデバイスバス３０８と第２のデバイスバス３１２との間に結合され、第１のデバイスバス３０８と第２のデバイスバス３１２との間の信号を変換する。ＣＰＵ３０２は、セキュリティチェックユニット（ＳＣＵ）３１６を含む。
【００１８】
以下に詳細に記載するように、ＳＣＵ３１６は、メモリ（ＭＥＭ）ＳＣＵ３１６Ａ、制御レジスタ（ＲＥＧ）ＳＣＵ３１６Ｂ、および入出力（Ｉ／Ｏ）ＳＣＵ３１６などの１つ以上の特殊化されたＳＣＵ３１６で具体化されてよい。ＭＥＭ  ＳＣＵ３１６Ａは、ＣＰＵ３０２（すなわち、「ソフトウェア主導のアクセス」）と、さらに、さまざまなハードウェア主導のアクセスとによって発生する不正アクセスからメモリ３０６を保護する。ＲＥＧ ＳＣＵ３１６Ｂは、不正アクセスから制御レジスタ（例えば、制御レジスタ５０８および／またはＳＥＭレジスタ５１０）を保護する。Ｉ／Ｏ ＳＣＵ３１６Ｃは、不正アクセスからＩ／Ｏ空間（例えば、Ｉ／Ｏポート）を保護する。
【００１９】
図３の実施形態において、デバイスハードウェアユニット３１４Ａおよび３１４Ｂは、第１のデバイスバス３０８に結合され、デバイスハードウェアユニット３１４Ｃおよび３１４Ｄは、第２のデバイスバス３１２に結合される。デバイスハードウェアユニット３１４Ａ〜３１４Ｄのうちの１つ以上は、例えば、ストレージデバイス（例えば、ハードディスクドライブ、フロッピードライブ、およびＣＤ−ＲＯＭドライブ）、通信デバイス（例えば、モデムおよびネットワークアダプタ）、または入出力デバイス（例えば、ビデオデバイス、オーディオデバイス、およびプリンタ）であってよい。他の実施形態において、ホストブリッジ３０４は、図３に示すようなＣＰＵ３０２の一部であってよいことに留意されたい。
【００２０】
図４は、図３のコンピュータシステム３００のさまざまなハードウェアおよびソフトウェアコンポーネント間の関係を示す図である。図４の実施形態において、メモリ３０６には、複数のアプリケーションプログラム４００、オペレーティングシステム４０２、セキュリティカーネル４０４、およびデバイスドライバ４０６Ａ〜４０６Ｄが格納されている。アプリケーションプログラム４００、オペレーティングシステム４０２、セキュリティカーネル４０４、およびデバイスドライバ４０６Ａ〜４０６Ｄは、ＣＰＵ３０２によって実行される命令を含む。オペレーティングシステム４０２は、ユーザインタフェースと、ソフトウェア「プラットフォーム」とを与え、そのトップでアプリケーションプログラム４００が動作する。また、オペレーティングシステム４０２は、例えば、ファイルシステム管理、プロセス管理、およびＩ／Ｏ制御を含む基本的なサポート機能を与えるものであってよい。
【００２１】
また、オペレーティングシステム４０２は、基本的なセキュリティ機能を与えるものであってもよい。例えば、ＣＰＵ３０２（図３）は、Ｘ８６命令セットの命令を実行するＸ８６プロセッサであってよい。この状況において、ＣＰＵ３０２は、上述したように、保護モードにおいて仮想メモリと物理メモリの保護の両方を与えるために、特殊化されたハードウェアエレメントを含んでよい。オペレーティングシステム４０２は、例えば、オペレーティングシステムのＷｉｎｄｏｗｓ（Ｒ）ファミリー（Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐ．、Ｒｅｄｍｏｎｄ、ＷＡ）の１つであってよく、これは、保護モードにおいてＣＰＵ３０２を動作させ、保護モードにおいて仮想メモリとメモリ保護の両方を与えるために、ＣＰＵ３０２の特殊化されたハードウェアエレメントを用いる。セキュリティカーネル４０４は、例えば、不正アクセスからメモリ３０６に格納されたデータを保護するために、オペレーティングシステム４０２によって与えられたセキュリティ機能より上位にある追加のセキュリティ機能を与える。
【００２２】
図４の実施形態において、デバイスドライバ４０６Ａ〜４０６Ｄは、対応するデバイスハードウェアユニット３１４Ａ〜３１４Ｄのそれぞれに動作的に関連付けられ、結合される。デバイスハードウェアユニット３１４Ａおよび３１４Ｄは、例えば、「セキュア」デバイスであってよく、対応するデバイスドライバ４０６Ａおよび４０６Ｄは、「セキュア」デバイスドライバであってよい。セキュリティカーネル４０４は、オペレーティングシステム４０２とセキュアデバイスドライバ４０６Ａおよび４０６Ｄとの間で結合され、デバイスドライバ４０６Ａおよび４０６Ｄと、対応するセキュアデバイス３１４Ａおよび３１４Ｄのセキュリティ保護のために、アプリケーションプログラム４００およびオペレーティングシステム４０２によるすべてのアクセスをモニタしてよい。セキュリティカーネル４０４は、アプリケーションプログラム４００およびオペレーティングシステム４０２によってセキュアデバイスドライバ４０６Ａおよび４０６Ｄと、対応するセキュアデバイス３１４Ａおよび３１４Ｄへの不正アクセスを防止してよい。他方で、デバイスドライバ４０６Ｂおよび４０６Ｃは、「非セキュア」デバイスドライバであってよく、対応するデバイスハードウェアユニット３１４Ｂおよび３１４Ｃは、「非セキュア」デバイスハードウェアユニットであってよい。デバイスドライバ４０６Ｂおよび４０６Ｃと、対応するデバイスハードウェアユニット３１４Ｂおよび３１４Ｃは、例えば、「レガシー」デバイスドライバおよびデバイスハードウェアユニットであってよい。
【００２３】
他の実施形態において、セキュリティカーネル４０４は、オペレーティングシステム４０２の一部であってよいことに留意されたい。さらなる他の実施形態において、セキュリティカーネル４０４、デバイスドライバ４０６Ａおよび４０６Ｄ、および／または、デバイスドライバ４０６Ｂおよび４０６Ｃは、オペレーティングシステム４０２の一部であってよい。また、セキュリティカーネル４０４は、セキュアアプリケーションメモリ空間および／またはセキュアプログラム空間へのアクセスを制御してもよい。また、ＳＣＵ３１６は、セキュリティカーネル４０４に動作的に関連付けられる。
【００２４】
図５Ａは、コンピュータシステム３００のＣＰＵ３０２の１つの実施形態の図である。図５Ａの実施形態において、ＣＰＵ３０２Ａは、実行ユニット５００、メモリ管理ユニット（ＭＭＵ）５０２、キャッシュユニット５０４、バスインタフェースユニット（ＢＩＵ）５０６、制御レジスタ５０８のセット、およびセキュア実行モード（ＳＥＭ：secure execution mode）レジスタ５１０のセットを含む。ＳＥＭレジスタ５１０のセットは、コンピュータシステム３００内でセキュア実行モード（ＳＥＭ）を実行するために使用される。ＳＥＭレジスタ５１０は、セキュリティカーネル４０４によってアクセスされてよい（すなわち、書き込みおよび／または読み取りされてよい）。ＭＥＭ  ＳＣＵ３１６Ａは、ＭＭＵ５０２内に位置するように示されている。ＲＥＧ ＳＣＵ３１６Ｂは、実行ユニット５００内に位置するように示されている。Ｉ／Ｏ ＳＣＵ３１６Ｃは、ＢＩＵ５０６内に位置するように示されている。ＣＰＵ内の他の位置も考えられる。ＭＥＭ  ＳＣＵ３１６Ａ、ＲＥＧ ＳＣＵ３１６Ｂ、およびＩ／Ｏ ＳＣＵ３１６Ｃの動作は、ＳＥＭレジスタ５１０のセットのコンテンツによって制御される。
【００２５】
図５Ａの実施形態において、ＳＥＭレジスタ５１０のセットは、セキュア実行モード（ＳＥＭ）ビットを含む。図３のコンピュータシステム３００は、例えば、（ｉ）ＣＰＵ３０２が、Ｘ８６保護モードにおいて動作するＸ８６プロセッサである場合、（ｉｉ）メモリページングがイネーブルにされる場合、および（ｉｉｉ）ＳＥＭビットが「１」に設定される場合、セキュア実行モード（ＳＥＭ）で動作してよい。ＳＥＭの動作およびＳＥＭの他の動作を示す他の方法が使用されてもよい。
【００２６】
一般的に、制御レジスタ５０８のセットのコンテンツは、ＣＰＵ３０２の動作を制御するために使用される。したがって、制御レジスタ５０８のセットのコンテンツは、実行ユニット５００、ＭＭＵ５０２、キャッシュユニット５０４、および／またはＢＩＵ５０６の動作を制御するために使用される。制御レジスタ５０８のセットは、例えば、Ｘ８６プロセッサアーキテクチャの複数の制御レジスタを含んでよい。
【００２７】
ＣＰＵ３０２の実行ユニット５００は、命令（例えば、Ｘ８６命令）およびデータをフェッチし、フェッチされた命令を実行し、命令の実行中に、信号（例えば、アドレス、データ、および制御信号）を発生する。実行ユニット５００は、キャッシュユニット５０４に結合され、キャッシュユニット５０４およびＢＩＵ５０６を介してメモリ３０６から命令を受信してよい。
【００２８】
コンピュータシステム３００のメモリ３０６は、各々が固有物理アドレスを有する複数のメモリ位置を含む。ページングをイネーブルにした保護モードでの動作時、ＣＰＵ３０２のアドレス空間は、ページフレーム、いわゆる「ページ」と呼ばれる複数のブロックに分割される。他の実施形態において、メモリは、異なるように規定されたメモリ領域に分割されてよく、それを介してアクセスされてよい。典型的に、任意の時間にメモリ３０６内に、ページの一部分に対応するデータのみしか格納されない。
【００２９】
図５Ａの実施形態において、命令の実行中、実行ユニット５００によって発生したアドレス信号は、セグメント化（すなわち、「ロジカル」）アドレスを表す。ＭＭＵ５０２は、実行ユニット５００によって発生したセグメント化アドレスを、メモリ３０６の対応する物理アドレスに変換する。ＭＭＵ５０２は、物理アドレスをキャッシュユニット５０４に与える。キャッシュユニット５０４は、実行ユニット５００によって最後にフェッチされた命令およびデータを格納するために使用される比較的小さな格納ユニットである。ＢＩＵ５０６は、キャッシュユニット５０４とホストブリッジ３０４との間に結合され、メモリ３０６からホストブリッジ３０４を経由して、キャッシュユニット５０４に存在しない命令およびデータをフェッチするために使用される。
【００３０】
キャッシュユニット５０４の使用は任意のものであるが、ＣＰＵ３０２の動作効率をさらに高めることが有益な場合もあることに留意されたい。また、実行ユニット５００は、実施例に応じて、命令、セキュア命令、および／または、マイクロコードを実行してよいことに留意されたい。１つの実施形態において、プロセッサ３０２において実行するマイクロコードは、ハードウェアであって、ソフトウェアではない。
【００３１】
コンピュータシステム３００がＳＥＭで動作するとき、セキュリティカーネル４０４は、メモリ３０６の保護部分において、１つ以上のセキュリティ属性データ構造（例えば、テーブル）を発生および維持する。各メモリページは、対応するセキュリティコンテクスト識別（ＳＣＩＤ）値を有し、対応するＳＣＩＤ値は、セキュリティ属性データ構造内に格納されてよい。ＭＭＵ５０２は、１つ以上のセキュリティ属性データ構造にアクセスして、対応するメモリページのＳＣＩＤを獲得するために、命令の実行中に生成されたアドレス（例えば、物理アドレス）を使用する。一般的に、コンピュータシステム３００は、ｎ個の異なるセキュリティコンテクスト識別（ＳＣＩＤ：security context identification）値を有し、ｎは整数であり、ｎ≧１である。
【００３２】
コンピュータシステム３００がＳＥＭで動作するとき、セキュリティメカニズムを侵害するソフトウェアによるさまざまな活動により、ＳＥＭセキュリティ例外が生じることになる。ＳＥＭセキュリティ例外は、Ｘ８６「ＳＹＳＥＮＴＥＲ」および「ＳＹＳＥＸＩＴ」命令の動作方法に類似した一対のレジスタ（例えば、モデル固有レジスタ、いわゆるＭＳＲ：model specific register）を介して送り出されてよい。レジスタの対は、「セキュリティ例外エントリポイント」レジスタであってよく、ＳＥＭセキュリティ例外が生じたときに命令を実行するためのブランチターゲットアドレスを規定してよい。セキュリティ例外エントリポイントレジスタは、ＳＥＭセキュリティ例外ハンドラへのエントリ時に使用される予定の、コードセグメント（ＣＳ）、命令ポインタ（ＥＩＰ、または６４−ビットバージョンのＲＩＰ）、スタックセグメント（ＳＳ）、およびスタックポインタ（ＥＳＰ、または６４−ビットバージョンのＲＳＰ）値を規定してよい。
【００３３】
実行ユニット５００は、例外が生じた場所を示すために、先行のＳＳ、ＥＳＰ／ＲＳＰ、ＥＦＬＡＧＳ、ＣＳ、およびＥＩＰ／ＲＩＰ値を新しいスタックに送ってよい。さらに、実行ユニット５００は、エラーコードをスタックに送ってよい。先行のＳＳおよびＥＳＰ／ＲＳＰ値が常に保存されているとき、割込（ＩＲＥＴ）命令からの通常のリターンが使用されないこともあり、ＣＰＬが変化していなくても、スタックスイッチが常に達成されることに留意されたい。したがって、ＳＥＭセキュリティ例外ハンドラ（ＳＭＲＥＴ）からの戻りを達成するために、新しい命令が規定されてよい。
【００３４】
図５Ｂは、コンピュータシステム３００のＣＰＵ３０２の別の実施形態の図である。図５Ｂの実施形態において、ＣＰＵ３０２Ｂは、図５Ａに関して上述した、実行ユニット５００、ＭＭＵ５０２、キャッシュユニット５０４、ＢＩＵ５０５、制御レジスタ５０８のセット、およびセキュア実行モード（ＳＥＭ）レジスタ５１０のセットを含む。さらに、ＣＰＵ３０２Ｂは、マイクロコードエンジン５５０およびマイクロコードストア５５２を含む。マイクロコードエンジン５５０は、実行ユニット５００、ＭＭＵ５０２、キャッシュユニット５０４、ＢＩＵ５０５、制御レジスタ５０８のセット、およびＳＥＭレジスタ５１０のセットに結合される。マイクロコードエンジン５５０は、マイクロコードストア５５２に格納されたマイクロコード命令を実行し、マイクロコード命令、制御レジスタ５０８のセットのコンテンツ、およびＳＥＭレジスタ５１０のセットのコンテンツに応じて、実行ユニット５００、ＭＭＵ５０２、キャッシュユニット５０４、およびＢＩＵ５０５の動作を制御する信号を発生する。図５Ｂの実施形態において、マイクロコードストア５５２に格納されたマイクロコード命令を実行するマイクロコードエンジン５５０は、ＭＥＭ  ＳＣＵ３１６Ａ、ＲＥＧ ＳＣＵ３１６Ｂ、およびＩ／Ｏ ＳＣＵ３１６Ｃの１つ以上を置き換えてもよい。また、Ｘ８６実施形態において、マイクロコードエンジン５５０は、Ｘ８６命令セットのより複雑な命令を実行するさい、実行ユニット５００のアシストに用いられてもよい。
【００３５】
図５Ｂの実施形態において、マイクロコードストア５５２に格納されたマイクロコード命令の一部分が、セキュリティチェックコード５５４を形成する。セキュリティチェックコード５５４は、ＳＥＭにおいてコンピュータシステム３００が動作し、実行するための実行ユニット５００に命令が送られるときに実行されてよい。本質的に、セキュリティチェックコード５５４のマイクロコード命令を実行すると、マイクロコードエンジン５５０と、実行ユニット５００、ＭＭＵ５０２、およびＢＩＵ５０５のさまざまなものが、上述したＳＣＵ３１６の機能を実行する。
【００３６】
例えば、実行ユニット５００にＩ／Ｏ命令が送られると、実行ユニット５００は、Ｉ／Ｏ命令の存在をマイクロコードエンジン５５０に知らせることができる。マイクロコードエンジン５５０は、ＭＭＵ５０２およびＢＩＵ５０５に信号をアサートしてよい。マイクロコードエンジン５５０からの信号に応答して、ＭＭＵ５０２は、Ｉ／Ｏ命令を含むメモリページのセキュリティコンテクスト識別（ＳＣＩＤ）値をＢＩＵ５０５に与えてよい。実行ユニット５００は、Ｉ／Ｏ命令によってアクセスされるＩ／Ｏポート番号をＢＩＵ５０５に与えてよい。
【００３７】
マイクロコードエンジン５５０からの信号に応答して、ＢＩＵ５０５は、セキュリティコンテクスト識別（ＳＣＩＤ）値、およびＳＥＭ  Ｉ／Ｏ許可ビットマップ８００（図８を参照）にアクセスするために受信したＩ／Ｏポート番号を用いてよく、ＳＥＭ  Ｉ／Ｏ許可ビットマップ８００からマイクロコードエンジン５５０に対応するビットを与えてよい。ＳＥＭ Ｉ／Ｏ許可ビットマップ８００からの対応するビットが、「０」にクリアされれば、マイクロコードエンジン５５０は、Ｉ／Ｏ命令の実行を完了するさいに実行ユニット５００の助力を継続してよい。他方で、対応するビット、「１」に設定されれば、マイクロコードエンジン５５０は、Ｉ／Ｏ命令の実行を停止し、ＳＥＭ例外ハンドラの実行を開始するように実行ユニット５００に知らせてよい。
【００３８】
また、実行ユニット５００が、実施例に応じて、標準的な命令、セキュア命令、および／またはマイクロコードを実行してよいことに留意されたい。したがって、１つの実施形態において、実行ユニット５００およびマイクロコードエンジン５５０の両方が、マイクロコードを実行する。１つの実施形態において、プロセッサ３０２において実行するマイクロコードは、ハードウェアアクションであって、ソフトウェアアクションと考慮されない。
【００３９】
図６は、Ｘ８６実施形態を記載した、ＭＭＵ５０２の１つの実施形態の図である。図６の実施形態において、ＭＭＵ５０２は、セグメンテーションユニット６００、ページングユニット６０２、およびセグメンテーションユニット６００およびページングユニット６０２の出力間を選択して、物理アドレスを発生するための選択ロジック６０４を含む。図示するように、ページングユニット６０２は、ＭＥＭ  ＳＣＵ３１６Ａを含む。図６に示すように、セグメンテーションユニット６００は、実行ユニット５００からセグメント化アドレスを受信し、出力で対応するリニアアドレスを発生するために、Ｘ８６プロセッサアーキテクチャの公知のセグメント化・リニアアドレス変換メカニズムを用いてよい。図６に示すように、「ＰＡＧＩＮＧ」信号によってイネーブルにされると、ページングユニット６０２は、セグメンテーションユニット５００によって発生したリニアアドレスを受信し、出力で対応する物理アドレスを発生する。ＰＡＧＩＮＧ信号は、Ｘ８６プロセッサアーキテクチャおよび制御レジスタ５０８のセットの制御レジスタ０（ＣＲ０）にあるページングフラグ（ＰＧ）ビットをミラーリングしてよい。ＰＡＧＩＮＧ信号がディアサートされると、メモリページングはイネーブルされず、選択ロジック６０４は、物理アドレスとしてセグメンテーションユニット６００から受信したリニアアドレスを発生する。
【００４０】
ＰＡＧＩＮＧ信号がアサートされると、メモリページングがイネーブルされ、ページングユニット６０２は、Ｘ８６プロセッサアーキテクチャのリニア・物理アドレス変換メカニズムを用いて、セグメンテーションユニット５００から受信したリニアアドレスを、対応する物理アドレスへ変換する。リニア・物理アドレスの変換動作中、選択されたページディレクトリエントリおよびページテーブルエントリのＵ／Ｓビットのコンテンツは、ページフレームへのアクセスが許可されるかを決定するために、論理ＡＮＤが実行される。同様に、選択されたページディレクトリエントリおよび選択されたページテーブルエントリのＲ／Ｗビットのコンテンツは、ページフレームへのアクセスが許可されるかを決定するために、論理ＡＮＤが実行される。Ｕ／ＳおよびＲ／Ｗビットの論理的な組合せが、ページフレームへのアクセスが許可されたことを示せば、ページングユニット６０２は、リニア・物理アドレス変換動作から得られる物理アドレスを発生する。選択ロジック６０４は、ページングユニット６０２によって発生した物理アドレスを受信し、物理アドレスとしてページングユニット６０２から受信した物理アドレスを発生し、物理アドレスをキャッシュユニット５０４に出力する。
【００４１】
他方で、Ｕ／ＳおよびＲ／Ｗビットの論理的組合せが、ページフレームへのアクセスが許可されていないことを示せば、ページングユニット６０２は、リニア・物理アドレス変換動作中に物理アドレスを発生しない。その代わりとして、ページングユニット６０２は、ページフォールト（ＰＦ）信号をアサートし、ＭＭＵ５０２は、ＰＦ信号を実行ユニット５００に送る。ＰＦ信号に応答して、実行ユニット５００は、ＳＥＭセキュリティ例外ハンドラなどの例外ハンドラルーチンを実行してよく、最終的に、ＰＦ信号がアサートされたときに実行するアプリケーションプログラム４００の１の実行を停止してよい。
【００４２】
図６の実施形態において、ＭＭＵ５０２のページングユニット６０２内に、ＭＥＭ  ＳＣＵ３１６Ａが位置する。また、ページングユニット６０２は、比較的少数の最後に決定されたリニア・物理アドレス変換を格納するためのトランスレーションルックアサイドバッファ（ＴＬＢ：translation lookaside buffer）を含んでよい。
【００４３】
図７Ａは、ＭＥＭ  ＳＣＵ３１６の１つの実施形態の図である。図７Ａの実施形態において、ＭＥＭ  ＳＣＵ３１６は、ＳＥＭレジスタ５１０のセットに結合されたセキュリティチェックロジック７００Ａ、およびセキュリティ属性テーブル（ＳＡＴ）エントリバッファ７０２を含む。ＳＡＴエントリは、メモリページに対応するページディレクトリおよびページテーブルエントリのＵ／ＳおよびＲ／Ｗビットより上に追加のセキュリティ情報を含んでよい。セキュリティチェックロジック７００Ａは、対応するメモリページへのソフトウェア主導の不正アクセスを防止するために、所与のＳＡＴエントリ内に格納された追加のセキュリティ情報を用いる。ＳＡＴエントリバッファ７０２は、比較的少数の最後にアクセスされたメモリページを格納するために用いられる。
【００４４】
上述したように、ＳＥＭレジスタ５１０のセットは、コンピュータシステム３００内においてＳＥＭを実行するために用いられてよい。ＳＥＭレジスタ５１０のセットのコンテンツは、ＭＥＭ  ＳＣＵ３１６Ａの動作を制御する。セキュリティチェックロジック７００Ａは、図７Ａに示すように、ＭＭＵ５０２から通信バスを経由して、ＳＡＴエントリバッファ７０２に格納される情報を受信する。また、セキュリティチェックロジック７００Ａは、ページングユニット６０２によって発生する物理アドレスを受信する。
【００４５】
図示するように、セキュリティチェックロジック７００Ａは、通信バスおよびＳＥＭレジスタ５１０に結合される。チェックロジック７００Ａは、ページフォールト通知信号およびＳＥＭセキュリティ例外通知信号を生成してよい。
【００４６】
図７Ｂは、Ｉ／Ｏ ＳＣＵ３１６Ｃの１つの実施形態を示す図である。図７Ｂの実施形態において、Ｉ／Ｏ ＳＣＵ３１６Ｃは、セキュリティチェックロジック７００Ｂを含む。セキュリティチェックロジック７００Ｂは、実行ユニット５００から「ＥＮＡＢＬＥ」信号およびＩ／Ｏポート番号を受信し、ＭＭＵ５０２からＳＣＩＤ値を受信する。実行ユニット５００は、Ｉ／Ｏアドレス空間において「ターゲット」Ｉ／ＯポートにアクセスするＩ／Ｏ命令を実行する前にＥＮＡＢＬＥ信号をアサートしてよい。Ｉ／Ｏポート番号は、ターゲット Ｉ／Ｏポートの数である。ＳＣＩＤ値は、Ｉ／Ｏ命令を含むメモリページのセキュリティコンテクストレベルを示す。
【００４７】
コンピュータシステム３００がＳＥＭにおいて動作するとき、セキュリティカーネル４０４は、メモリ３０６においてＳＥＭ Ｉ／Ｏ許可ビットマップ８００を生成および維持してもよい。実行ユニット５００が、タスクのＩ／Ｏ命令を実行すると、ＣＰＵ３０２内のロジックは、まず、タスクの現行の特権レベル（ＣＰＬ）と、Ｉ／Ｏ特権レベル（ＩＯＰＬ）とを比較してよい。タスクのＣＰＬが、ＩＯＰＬと少なくとも同程度の特権をもつものであれば（すなわち、数値的にＩＯＰＬより小さいか同等であれば）、ＣＰＵ３０２内のロジックは、ＳＥＭ  Ｉ／Ｏ許可ビットマップ８００をチェックしてよい。他方で、タスクのＣＰＬが、ＩＯＰＬほど特権をもたなければ（すなわち、数値的にＩＯＰＬより大きければ）、実行ユニット５００は、Ｉ／Ｏ命令を実行しない。１つの実施形態において、一般保護フォールト（ＧＰＦ：general protection fault）が生じる。
【００４８】
実行ユニット５００がＥＮＡＢＬＥ信号をアサートすると、セキュリティチェックロジック７００Ｂは、ＥＮＡＢＬＥ信号、受信したＳＣＩＤ値、および受信したＩ／Ｏポート番号を、ＢＩＵ５０５内のロジックに出力する。ＢＩＵ５０５内のロジックは、ＳＣＩＤ値およびＳＥＭ Ｉ／Ｏ許可ビットマップ８００へアクセスするために受信したＩ／Ｏポート番号を使用し、ＳＥＭ Ｉ／Ｏ許可ビットマップ８００からセキュリティチェックロジック７００Ｂへ、対応するビットを出力する。ＳＥＭ Ｉ／Ｏ許可ビットマップ８００からの対応するビットが、「０」にクリアされれば、セキュリティチェックロジック７００Ｂは、実行ユニット５００に出力された出力「ＥＸＥＣＵＴＥ」信号をアサートしてよい。アサートされたＥＸＥＣＵＴＥ信号に応答して、実行ユニット５００は、Ｉ／Ｏ命令を実行してよい。他方で、対応するビットが、「１」に設定されれば、セキュリティチェックロジック７００Ｂは、実行ユニット５００に出力された出力「ＳＥＭセキュリティ例外」信号をアサートしてよい。アサートされたＳＥＭセキュリティ例外信号に応答して、実行ユニット５００は、Ｉ／Ｏ命令を実行しないことがあり、その代わりに、ＳＥＭセキュリティ例外ハンドラを実行してよい。
【００４９】
Ｉ／Ｏ命令が、１６−ビットワードＩ／Ｏポート、または３２−ビットダブルワードＩ／Ｏポートへのアクセスを試みれば、実行ユニット５００は、連続して複数のバイトＩ／Ｏポート番号をセキュリティチェックロジック７００Ｂに出力してよいセキュリティチェックロジック７００Ｂが、バイトＩ／Ｏポート番号の各々に対してＥＸＥＣＵＴＥ信号をアサートすれば、実行ユニット５００は、Ｉ／Ｏ命令を実行してよい。他方で、セキュリティチェックロジック７００Ｂが、バイトＩ／Ｏポート番号の１つ以上に対してＳＥＭセキュリティ例外をアサートすれば、実行ユニット５００は、Ｉ／Ｏ命令を実行しないことがあり、その代わりに、ＳＥＭセキュリティ例外ハンドラを実行してよい。
【００５０】
図８は、ＳＥＭ Ｉ／Ｏ許可ビットマップ８００の１つの実施形態と、ＳＥＭ Ｉ／Ｏ許可ビットマップ８００にアクセスするためのメカニズムの１つの実施形態を示す図である。図８のメカニズムは、ＢＩＵ５０５内のロジック内に具体化されてよく、コンピュータシステム３００がＳＥＭにおいて動作中のときに適用されてよい。図８の実施形態において、ＳＥＭ Ｉ／Ｏ許可ビットマップ８００は、メモリ３０６の一部分に格納された単一の６４ｋ−ビット（８ｋ−バイト）Ｉ／Ｏ許可ビットマップを含む。Ｉ／Ｏポート番号は、モデル固有のレジスタ８０２（すなわち、セキュア実行モードＩ／Ｏ許可ビットマップ８００のベースアドレス）のコンテンツから、Ｉ／Ｏ許可ビットマップ８００へのビットオフセットとして使用される。このようにしてアクセスされたビットは、Ｉ／Ｏポート番号によって規定されたＩ／Ｏポートに対応するビットである。
【００５１】
上述したように、コンピュータシステム３００は、ｎ個の異なるＳＣＩＤ値を有し、ｎは整数であり、ｎ≧１である。ＳＥＭＩ／Ｏ許可ビットマップ８００は、ｎ個の異なるＳＣＩＤ値の各々に対して、異なるＩ／Ｏ許可ビットマップ８００を含んでよい。別々のＩ／Ｏ許可ビットマップ８００の各々は、６４ｋビット、いわゆる８ｋバイトを含んでよい。
【００５２】
他の実施形態において、ＭＳＲ８０２は、ＳＥＭ Ｉ／Ｏ許可ビットマップ８００の最初の（すなわち、ベース）アドレスを格納するために用いられてよい。Ｉ／ＯポートにアクセスするＩ／Ｏ命令を含むメモリページのＳＣＩＤ値は、モデル固有のレジスタ８０２（すなわち、ＳＥＭ Ｉ／Ｏ許可ビットマップ８００のベースアドレス）のコンテンツから、ＳＥＭ Ｉ／Ｏ許可ビットマップ８００を構成する１つ以上の６４ｋ−ビット（８ｋ−バイト）Ｉ／Ｏ許可ビットマップへのオフセットとして用いられてよい。その結果、ＳＣＩＤ値に対応するＩ／Ｏ許可ビットマップがアクセスされることになる。次いで、Ｉ／Ｏポート番号は、ＳＣＩＤ値に対応するＩ／Ｏ許可ビットマップへのビットオフセットとして用いられてよい。このようにしてアクセスされるビットは、Ｉ／Ｏポート番号によって規定されるＩ／Ｏポートに対応するビットである。
【００５３】
図９は、セキュアモードＳＭＣＡＬＬ／ＳＭＲＥＴターゲットアドレスレジスタ（ＳＭＳＴＡＲ）８５０およびＳＥＭセキュリティ例外を取り扱うために使用されるセキュアモードＧＳベース（ＳＭＧＳＢＡＳＥ）レジスタ８５２の図である。セキュリティ面から、ＳＥＭセキュリティ例外メカニズムは、ＳＥＭセキュリティ例外が生じるときにＳＥＭセキュリティ例外ハンドラおよびスタックのアドレスを与えるために、通常モードでアクセス可能な任意の制御レジスタのコンテンツまたはデータ構造に依存できない。
【００５４】
ＳＭＳＴＡＲレジスタ８５０は、「ＳＭＲＥＴ ＣＳセレクタおよびＳＳセレクタベース」フィールド、「ＳＭＣＡＬＬ ＣＳセレクタおよびＳＳセレクタベース」フィールド、および「ターゲットＥＩＰアドレス」フィールドを含む。ＳＭＧＳＢＡＳＥレジスタ８５２は、セキュアモードＧＳベースアドレスを含む。ＳＭＳＴＡＲレジスタ８５０およびＳＭＧＳＢＡＳＥレジスタ８５２に格納された値は、典型的に、ブート時に設定される。
【００５５】
図１０は、ＳＥＭセキュリティ例外が生じるときにオペレーティングシステム４０２によって生成されるＳＥＭセキュリティ例外スタックフレーム９００の図である。ＳＥＭセキュリティ例外スタックフレーム９００は、ＧＳ［００ｈ］で始まる。
【００５６】
ＳＥＭセキュリティ例外スタックフレーム９００のＧＳ［００ｈ］に、エラーコードがある。ＳＥＭセキュリティ例外スタックフレーム９００のＧＳ［０４ｈ］に、フォールティングアプリケーションの命令ポインタ（ＥＩＰ）のコンテンツがある。ＳＥＭセキュリティ例外スタックフレーム９００のＧＳ［０８ｈ］に、フォールティングアプリケーションコードセグメント（ＣＳ）レジスタのコンテンツがある。ＳＥＭセキュリティ例外スタックフレーム９００のＧＳ［０Ｃｈ］に、フォールティングアプリケーションまたはコードセグメントのフラグ（ＥＦＬＡＧＳ）レジスタのコンテンツがある。ＳＥＭセキュリティ例外スタックフレーム９００のＧＳ［１０ｈ］に、フォールティングアプリケーションのスタックポインタ（ＥＳＰ）レジスタのコンテンツがある。ＳＥＭセキュリティ例外スタックフレーム９００のＧＳ［１４ｈ］に、フォールティングアプリケーションのスタックセグメント（ＳＳ）レジスタのコンテンツがある。
【００５７】
図１１は、図１０のＳＥＭセキュリティ例外スタックフレーム９００のエラーコードの例示的なフォーマット１０１０の図である。図１１の実施形態において、エラーコードフォーマットは、書き込み／読み取り（Ｗ／Ｒ）ビット、ユーザ／スーパーバイザ（Ｕ／Ｓ）ビット、モデル固有レジスタ（ＭＳＲ）ビット、およびシステム管理割込（ＳＭＩ：system management interrupt）ビットを含む。書き込み／読み取り（Ｗ／Ｒ）ビットは、書き込み動作中にＳＥＭセキュリティ例外が発生したとき、「１」であり、読み取りまたは実行中にＳＥＭセキュリティ例外が生じたとき、「０」である。ユーザ／スーパーバイザ（Ｕ／Ｓ）ビットは、ユーザモード（ＣＰＬ＝３）でセキュア実行モード（ＳＥＭ）例外が生じたとき、「１」であり、スーパーバイザモード（ＣＰＬ＝０）でＳＥＭセキュリティ例外が生じたとき、「０」である。
【００５８】
モデル固有レジスタ（ＭＳＲ）ビットは、セキュアモデル固有レジスタ（ＭＳＲ）へのアクセスを試みている間にＳＥＭセキュリティ例外が生じたとき、「１」であり、セキュアＭＳＲへのアクセスを試みている間にＳＥＭセキュリティ例外が生じなかったとき、「０」である。システム管理割込（ＳＭＩ）ビットは、システム管理割込（ＳＭＩ）中にＳＥＭセキュリティ例外が生じたとき、「１」であり、ＳＭＩ中にＳＥＭセキュリティ例外が生じたとき、「０」である。
【００５９】
図１２は、本発明の１つの態様によれば、ＳＥＭセキュリティ例外を取り扱う方法１１００の実施形態のフローチャートである。方法１１００は、ブロック１１０５において、例えば、ＳＭＣＡＬＬ命令を介して、ハードウェアかソフトウェアのいずれかを介して、ＳＥＭセキュリティ例外を生成することを含んでよい。方法１１００は、ブロック１１１０において、ベースアドレスおよびオフセットでＳＥＭスタックフレーム９００を作成することを含む。セキュアモードＧＳベースアドレスは、ＳＭＧＳＢＡＳＥレジスタ８５２から読み取られる。ＳＥＭスタックポインタは、ＳＥＭスタックフレームのバイト数によってセキュアモードＧＳベースアドレスオフセットから形成されてよい。ＳＥＭスタックフレーム９００は、ＳＭＧＳＢＡＳＥレジスタ８５２に格納されたセキュアモードＧＳベースアドレスによってポイントされた位置にエラーコードがあるように、メモリに書き込まれる。ＳＥＭセキュリティ例外のエラーコードは、ＳＥＭ例外ハードウェアによって生成される。ＳＥＭセキュリティ例外そのものは、オペレーティングシステム４０２、デバイスドライバコード４０６、アプリケーションコード４００などによって生成されたものであってよい。フォールティングコードセグメント値は、図１０に示すように、ＧＳ空間に書き込まれる。
【００６０】
次に、方法１１００は、ブロック１１１５において、ターゲットＥＩＰアドレスと、ＳＭＣＡＬＬ  ＣＳおよびＳＳセレクタ値をＳＭＳＴＡＲレジスタ８５０から読み取り、ターゲットＥＩＰアドレスと、ＳＭＣＡＬＬ ＣＳおよびＳＳセレクタ値を適切なレジスタに格納する。ターゲットＥＩＰアドレスは、ＥＩＰレジスタにロードされる。ＣＳセレクタ値は、ＣＳレジスタにロードされ、ＳＳセレクタ値は、ＳＳレジスタにロードされる。ＳＳセレクタアドレスは、ＣＳセレクタアドレスから求められてよい。ターゲットＥＩＰアドレスは、ＳＥＭセキュリティ例外ハンドラコードの第１の命令をポイントする。
【００６１】
また、方法１１００は、ブロック１１２０において、ＳＷＡＰＧＳ命令を実行する。ＳＷＡＰＧＳ命令の実行は、ＳＭＧＳＢＡＳＥレジスタ９０２のコンテンツと、ＣＰＵ４０２にキャッシュされたＧＳセグメントディスクリプタのベースアドレスとをスワッピングあるいは交換する。次のＳＥＭセキュリティ例外ハンドラ命令は、ＧＳ空間の変位のみのアドレッシングを用いて、ＳＥＭセキュリティ例外スタックフレーム９００およびＳＥＭセキュリティ例外スタックフレーム９００の上または下のメモリにアクセスできる。ＧＳ空間のアドレッシングにより、ＳＥＭセキュリティ例外ハンドラにセキュアメモリを与える。
【００６２】
セキュリティカーネル４０４のＳＥＭセキュリティ例外ハンドラは、セキュリティビットによって保護された、例えば、ＳＥＭレジスタ５１０に格納された数ページの仮想メモリや、本願明細書に記載する他のセキュリティ手段を含んでよい。ＳＥＭセキュリティ例外ハンドラは、セキュリティビットによって保護された、例えば、ＳＥＭレジスタ５１０に格納された数ページの物理メモリや、本願明細書に記載する他のセキュリティを含んでよい。
【００６３】
次に、方法１１００は、ブロック１１２０において、エラーコードを解析する。エラーコードビットは、ＳＥＭセキュリティ例外のソースが決定されると、一つずつ解析されてよい。オプションとして、方法１１００は、ブロック１１３０において、ＳＥＭセキュリティ例外が生成される前に実行されたか、実行の準備が整った１つ以上の命令をデコードする。特定の命令およびそれらのオペランドは、ＳＥＭセキュリティ例外のソースに関する追加情報を与えてよい。方法１１００は、ブロック１１３５において、エラーコードに基づいて、さらに、可能的に、ＳＥＭセキュリティ例外の生成を生じさせた命令の前または後の命令に基づいて、ＳＥＭセキュリティ例外を評価する。ブロック１３５の評価は、ルックアップテーブルを参照するか、セキュリティアルゴリズムを実行することを含む。ルックアップテーブルは、エラーコードの１つ以上、エラーコードの１ビット以上、および特定の命令の１つ以上、および／またはそれらのオペランドによってインデックス化されてよい。セキュリティアルゴリズムは、セキュリティカーネル４０４によって実行されるコードツリーを含んでよい。ルックアップテーブルとセキュリティアルゴリズムの両方は、正確なハードウェア３１０など、およびコンピュータシステム３００において実行されるオペレーティングシステム４０２を決定することになる。
【００６４】
ブロック１１３５において、方法１１００が、ＳＥＭセキュリティ例外を評価すると、方法１１００は、必要に応じて、ブロック１１４０において、その評価に作用する。ＳＥＭセキュリティ例外は無視されてよく、動作が再開される。フォールティング命令またはコードセグメントは無視されてよい。フォールティング命令またはコードセグメントは、フォールティング命令またはコードセグメントが、仮想メモリまたはＩ／Ｏ空間において、プロキシによって実行されるように含まれてよい。
【００６５】
方法１１００は、ブロック１１４５において、コンピュータシステム３００をそのプレＳＥＭセキュリティ例外コンフィグレーションにほぼ戻す。ＳＥＭセキュリティ例外ハンドラが存在すると、別のＳＷＡＰＧＳ命令は、セキュアモードベースアドレス値を最初の値に戻すように実行され、ＳＭＲＥＴ命令は、ブロック１１５０において、前の動作モードに戻すように実行される。ＳＷＡＰＧＳ命令を実行すると、セキュリティカーネル４０４は、フォールティングコードのコードセグメント（ＣＳ）の値をＳＭＳＴＡＲレジスタ８５０のＳＭＲＥＴ ＣＳセレクタおよびＳＳセレクタベースフィールドに書き込む。ＳＭＲＥＴ命令は、システム３００を通常モードに戻してよい。ＳＹＳＲＥＴ命令とは異なり、ＳＭＲＥＴ命令は、現行特権レベル（ＣＰＬ）を０にしたままでよく、ＥＦＬＡＧＳ．ＩＦビットを設定しない。
【００６６】
１つの実施形態において、方法１１００のブロック１１０５〜１１１５は、主にハードウェアにおいて実行されるのに対して、ブロック１１２０〜１１３５は、主にソフトウェアにおいて実行されることに留意された。別の実施形態、方法１１００は、主にソフトウェアにおいて実行される。さらなる別の実施形態、方法１１００は、主にハードウェアにおいて実行される。１つの実施形態において、ＳＥＭセキュリティ例外を生じさせる可能性のある命令を回避するために、ＥＩＰアドレスが修正されることに留意されたい。
【００６７】
再度、図７Ａに戻ると、コンピュータシステム３００がＳＥＭに動作しているとき、セキュリティチェックロジック７００Ａは、物理アドレスが存在する選択されたメモリページに関連付けられた通常の制御ビットおよび１つ以上のＳＥＭビット５０９とともに、現行実行タスク（すなわち、現在実行命令）のＣＰＬを受信する。セキュリティチェックロジック７００Ａは、メモリ３０６の該当部分へのアクセスが許可されているかを決定するために、上記情報を用いる。
【００６８】
ＣＰＵ３０２は、Ｘ８６プロセッサであってよく、コードセグメント（ＣＳ）レジスタ、すなわち、Ｘ８６プロセッサアーキテクチャの１６−ビットセグメントレジスタの１つを含んでよい。各セグメントレジスタは、セグメントと呼ばれる６４ｋメモリブロックを選択する。ページングをイネーブル状態にした保護モードにおいて、ＣＳレジスタにはメモリ３０６の実行可能なセグメントを示すセグメントセレクタがロードされる。セグメントセレクタの最高位（すなわち、最上位）ビットは、ＣＰＵ３０２の実行ユニット５００によって実行される予定の次の命令を含むメモリのセグメントを示す情報を格納するために使用される。ＣＳレジスタによって示されたセグメントにオフセットを格納するために、命令ポインタ（ＩＰ）レジスタが使用される。ＣＳ：Ｉペアは、次の命令のセグメント化アドレスを示す。実行ユニット５００（すなわち、現行タスクのＣＰＬ）によって現在実行されているタスクのＣＰＬを示す値を格納するために、ＣＳレジスタの２つの最低位（すなわち、最下位）ビットが使用される。
【００６９】
ＭＥＭ  ＳＣＵ３１６Ａのセキュリティチェックロジック７００Ａは、ページフォールト（「ＰＦ」）信号および「ＳＥＭセキュリティ例外」信号を発生してよく、ＰＦおよびＳＥＭセキュリティ例外信号をページングユニット６０２内のロジックに出力してよい。セキュリティチェックロジック７００ＡがＰＦ信号をアサートすると、ＭＭＵ５０２は、ＰＦ信号を実行ユニット５００に送る。ＰＦ信号に応答して、実行ユニット５００は、ＰＦハンドラルーチンにアクセスし実行するために、Ｘ８６プロセッサアーキテクチャの公知の割込ディスクリプタテーブル（ＩＤＴ）ベクトル化メカニズムを用いてよい。
【００７０】
セキュリティチェックロジック７００Ａが、ＳＥＭセキュリティ例外信号をアサートすると、ＭＭＵ５０２は、ＳＥＭセキュリティ例外信号を実行ユニット５００に送る。Ｘ８６プロセッサアーキテクチャのＩＤＴベクトル化メカニズムを用いる通常のプロセッサ例外とは異なり、ＳＥＭセキュリティ例外を取り扱うために、異なるベクトル化方法が使用されてよい。ＳＥＭセキュリティ例外は、Ｘ８６「ＳＹＳＥＮＴＥＲ」および「ＳＹＳＥＸＩＴ」命令が動作する方法と同様の一対のレジスタ（例えば、ＭＳＲ）を介して送り出されてよい。レジスタのペアは、「セキュリティ例外エントリポイント」レジスタであってよく、ＳＥＭセキュリティ例外が生じると、命令を実行するためのブランチターゲットアドレスを規定してよい。セキュリティ例外エントリポイントレジスタは、コードセグメント（ＣＳ）、次いで、命令ポインタ（ＥＩＰ、または６４−ビットバージョンのＲＩＰ）、スタックセグメント（ＳＳ）、およびＳＥＭセキュリティ例外ハンドラへのエントリ時に用いられるスタックポインタ（ＥＳＰ、６４−ビットバージョンのＲＳＰ）値を規定してよい。実行ユニット５００は、ＳＥＭセキュリティ例外が生じた場所を示すために、前のＳＳ、ＥＳＰ／ＲＳＰ、ＥＦＬＡＧＳ、ＣＳ、およびＥＩＰ／ＲＩＰ値を新しいスタックに送ってよい。さらに、実行ユニット５００は、エラーコードをスタックに送ってよい。上述したように、ＩＲＥＴ命令は、ＳＳおよびＥＳＰ／ＲＳＰ値が保存されている場合は使用されなくてもよく、ＣＰＬの変化が生じなくても、スタックスイッチが達成される。ＳＥＭセキュリティ例外ハンドラからの戻りは、ＳＭＲＥＴ命令を経由したものである。
【００７１】
上述したような本発明のいくつかの態様は、ハードウェアまたはソフトウェアにおいて実行されてよい。したがって、本願明細書の詳細な記載のいくつかの部分は、、ハードウェア実行プロセスの点で結果的に与えられ、本願明細書の詳細な記載のいくつかの部分は、結果的に、コンピューティングシステムまたはコンピューティングデバイスのメモリ内のデータビットでの動作の記号表記を伴うソフトウェア実行プロセスの点で結果的に与えられる。これらの記載および表記は、ハードウェアおよびソフトウェアの両方を用いる当業者らにそれらの働きの実体を最も効果的に伝えるために、当業者によって用いられる手段である。プロセスおよび動作は、物理量の物理的な操作を必要とする。ソフトウェアにおいて、一般に、必要不可欠なことではないが、これらの量は、格納、転送、組合せ、比較、および操作可能な電気、磁気、または光信号の形をとる。主に共通して使用するために、これらの信号を、ビット、値、要素、記号、文字、用語、数などとして参照すると利便性が良い場合がある。
【００７２】
しかしながら、これらの同様の用語のすべてが、適切な物理量に関連付けられ、これらの量に適用された利便性の良いラベルにすぎないことに留意されたい。本願の開示内容全体を通して、特段の記載がない限り、または明らかであるように、これらの記載は、電子デバイスのアクションおよびプロセスを参照し、このデバイスは、何らかの電子デバイスのストレージ内の物理（電子、磁気、または光）量として表されるデータを操作して、格納内または伝送またはディスプレイデバイスにおいて物理量として同様に表される他のデータに変形する。このような記載を表す用語の例は、限定するものではないが、「処理」、「コンピューティング」、「計算」、「決定」、「表示」などの用語である。
【００７３】
また、本発明のソフトウェア実行の態様は、典型的に、プログラム格納媒体の何らかの形態でコード化されるか、または、何らかのタイプの伝送媒体で実行されることにも留意されたい。プログラムストレージ媒体は、磁気（例えば、フロッピーディスクまたはハードドライブ）または光（例えば、コンパクトディスク読み取り専用メモリ、いわゆる「ＣＤＲＯＭ」）であってよく、読取専用またはランダムアクセスであってよい。同様に、伝送媒体は、ツイストペア線、同軸ケーブル、光ファイバ、または当業者に公知の何らかの他の適切な伝送媒体であってよい。本発明は、任意の所与の実施例のこれらの態様によって制限されるものではない。
【００７４】
上記に開示された特定の実施形態は、例示的なものにすぎず、本発明は、異なるように修正および実施されてよいが、同等の方法は、本願明細書の開示内容を利用できる当業者らに明らかである。さらに、特許請求の範囲に記載するもの以外、本願明細書に示された構成またはデザインの詳細には何ら制限が意図されていない。したがって、上記に開示された特定の実施形態は、変更または修正されてよく、すべてのこのような変形例は、特許請求の範囲内であると見なされることは明らかである。したがって、本願明細書において求められる保護は、特許請求の範囲において示される。
【図面の簡単な説明】
【００７５】
【図１】Ｗｉｎｄｏｗｓ（Ｒ）オペレーティングシステムの実行時など、Ｘ８６プロセッサによって発生した例外スタックフレームの図。
【図２】ＳＹＳＣＡＬＬ／ＳＹＳＲＥＴターゲットアドレスレジスタの図。
【図３】本発明の１つの態様に従って利用されてよいコンピュータシステムの１つの実施形態のブロック図。
【図４】本発明の１つの態様による、コンピュータシステム実施形態のさまざまなハードウェアおよびソフトウェアコンポーネントのいくつかの関係を示す図。
【図５Ａ】本発明のさまざまな態様による、ＣＰＵの実施形態の図。
【図５Ｂ】本発明のさまざまな態様による、ＣＰＵの実施形態の図。
【図６】本発明の１つの態様による、メモリセキュリティチェックユニット（ＭＥＭ ＳＣＵ）を有するページングユニットを含むＭＭＵの１つの実施形態の図。
【図７Ａ】本発明の１つの態様による、ＭＥＭ  ＳＣＵの１つの実施形態の図。
【図７Ｂ】本発明の１つの態様による、Ｉ／Ｏ ＳＣＵの１つの実施形態の図。
【図８】本発明のさまざまな態様による、メモリ内に格納されたセキュア実行モード（ＳＥＭ）Ｉ／Ｏ許可ビットマップ１つの実施形態と、ＳＥＭ  Ｉ／Ｏ許可ビットマップにアクセスするためのメカニズムの１つの実施形態とを示す図。
【図９】本発明の１つの態様による、セキュアモードＳＭＣＡＬＬ／ＳＭＲＥＴターゲットアドレスレジスタ（ＳＭＳＴＡＲ）およびＳＥＭセキュリティ例外を取り扱うために使用されるセキュアモードＧＳベース（ＳＭＧＳＢＡＳＥ）レジスタの実施形態の図。
【図１０】本発明の１つの態様による、ＳＥＭセキュリティ例外が生じたときに生成されるＳＥＭセキュリティ例外スタックフレームの１つの実施形態の図。
【図１１】本発明の１つの態様による、ＳＥＭセキュリティ例外スタックフレームのエラーコードの例示的なフォーマットの図。
【図１２】本発明の１つの態様による、ＳＥＭ例外を取り扱う方法の実施形態のフローチャート。
【図１】
2005528690.tif 000003
【図２】
2005528690.tif 000004
【図３】
2005528690.tif 000005
【図４】
2005528690.tif 000006
【図５Ａ】
2005528690.tif 000007
【図５Ｂ】
2005528690.tif 000008
【図６】
2005528690.tif 000009
【図７Ａ】
2005528690.tif 000010
【図７Ｂ】
2005528690.tif 000011
【図８】
2005528690.tif 000012
【図９】
2005528690.tif 000013
【図１０】
2005528690.tif 000014
【図１１】
2005528690.tif 000015
【図１２】
2005528690.tif 000016
【国際調査報告】
2005528690.tif 000017
2005528690.tif 000018
2005528690.tif 000019