(57)【要約】Ｉ／Ｏ命令を選択的に実行するための方法ならびに装置。この方法は、Ｉ／Ｏ許可ビットマップ（６００）をメモリ（２０６）に作成するステップと、Ｉ／Ｏポート番号とセキュリティコンテキスト識別情報値とを受信するステップとを有する。この方法は、前記セキュリティコンテキスト識別情報値と前記Ｉ／Ｏポート番号とを使用して、記憶されている前記Ｉ／Ｏ許可ビットマップ（６００）にアクセスして、前記Ｉ／Ｏポートに対応する許可ビットを取得するステップと、前記Ｉ／Ｏポートに対応する前記許可ビットの値に応じて前記Ｉ／Ｏ命令を実行するステップと、も有する。Ｉ／Ｏ許可ビットマップ（６００）は、複数の許可ビットを含む。前記許可ビットの各々は、複数のＩ／Ｏポートのうちの異なる１つに対応している。前記許可ビットの各々は、対応するＩ／Ｏポートへのアクセスが許可されるかどうかを示す値を有する。前記Ｉ／Ｏポート番号は前記Ｉ／Ｏ命令によって参照されるＩ／Ｏポートを示す。前記セキュリティコンテキスト識別情報値は前記Ｉ／Ｏ命令を格納しているメモリ場所のセキュリティコンテキストレベルを示す。
2005521941.tif 000002
【特許請求の範囲】
【請求項１】
メモリ（２０６）に結合するためのプロセッサ（２０２）であって、前記プロセッサ（２０２）は、
Ｉ／Ｏ命令を実行するように構成された実行ユニット（４００）と、
前記メモリ（２０６）にデータを記憶するように構成されたメモリ管理ユニット（４０２）と、
入出力（Ｉ／Ｏ）ポート番号と前記Ｉ／Ｏポート番号に対応する許可ビットとを受信し、前記許可ビットの値に応じて出力信号を生成するために結合されたバスインタフェースユニット（４０６）と、を備え、
前記実行ユニット（４００）は、前記出力信号を受信するために結合され、かつ前記出力信号に応じて前記Ｉ／Ｏ命令を実行するように構成されているプロセッサ。
【請求項２】
前記Ｉ／Ｏポート番号は、Ｉ／Ｏ命令によって参照される入出力（Ｉ／Ｏ）ポートの番号を示し、前記バスインタフェースユニット（４０６）はセキュリティコンテキスト識別情報値を受信するために結合されており、前記セキュリティコンテキスト識別情報値は前記Ｉ／Ｏ命令を格納しているメモリ場所のセキュリティコンテキストレベルを示し、前記バスインタフェースユニット（４０６）は、前記セキュリティコンテキスト識別情報値と前記Ｉ／Ｏポート番号とを使用して前記メモリ（２０６）に記憶されている入出力（Ｉ／Ｏ）許可ビットマップ（６００）にアクセスし、前記許可ビットを取得するように構成されている請求項１に記載のプロセッサ（２０２）。
【請求項３】
前記バスインタフェースユニット（４０６）は前記実行ユニット（４００）と前記メモリ管理ユニット（４０２）とに接続されており、前記Ｉ／Ｏポート番号は前記実行ユニット（４００）から受信され、前記セキュリティコンテキスト識別情報は前記メモリ管理ユニット（４０２）から受信される請求項２に記載のプロセッサ（２０２）。
【請求項４】
前記Ｉ／Ｏポート番号と前記セキュリティコンテキスト識別情報とはＩ／Ｏ命令の実行中に前記実行ユニット（４００）によって受信される請求項２に記載のプロセッサ（２０２）。
【請求項５】
前記Ｉ／Ｏ許可ビットマップ（６００）は複数の許可ビットを有し、前記許可ビットの各々は、複数のＩ／Ｏポートのうちの異なる１つに対応しており、前記許可ビットの各々は、対応するＩ／Ｏポートへのアクセスが許可されるかどうかを示す値を有する請求項２に記載のプロセッサ（２０２）。
【請求項６】
前記Ｉ／Ｏ許可ビットマップ（６００）のベースアドレスを記憶するように構成されたモデル固有レジスタ（６０２）をさらに備え、前記バスインタフェースユニット（４０６）は、前記Ｉ／Ｏ許可ビットマップ（６００）にアクセスして、前記Ｉ／Ｏポート番号を、前記Ｉ／Ｏ許可ビットマップ（６００）における、前記モデル固有レジスタ（６０２）の記憶内容からのビットオフセットとして使用することによって前記Ｉ／Ｏポート番号に対応する前記許可ビットを取得する請求項２に記載のプロセッサ（２０２）。
【請求項７】
前記Ｉ／Ｏ許可ビットマップ（６００）はプライマリＩ／Ｏ許可ビットマップ（６００）であり、前記プライマリＩ／Ｏ許可ビットマップ（６００）は複数のセカンダリＩ／Ｏ許可ビットマップを有し、前記セカンダリＩ／Ｏ許可ビットマップの各々は複数の許可ビットを含み、前記セカンダリＩ／Ｏ許可ビットマップのうちの所定の１つの許可ビットの各々は、複数のＩ／Ｏポートのうちの異なる１つに対応しており、前記許可ビットの各々は、対応するＩ／Ｏポートへのアクセスが許可されるかどうかを示す値を有し、前記セカンダリＩ／Ｏ許可ビットマップの各々は、複数のセキュリティコンテキスト識別情報値のうちの異なる１つに対応している請求項２に記載のプロセッサ（２０２）。
【請求項８】
前記実行ユニット（４００）、前記メモリ管理ユニット（４０２）、および前記バスインタフェースユニット（４０６）に結合され、かつマイクロコード記憶装置（８０２）に記憶されているマイクロコード命令を実行するように構成されたマイクロコードエンジン（８００）をさらに備え、前記マイクロコードエンジン（８００）は前記マイクロコード命令のうちの少なくとも１つの実行中に制御信号を発生し、前記マイクロコード命令の一部は、前記マイクロコードエンジン（８００）に制御信号を発生させ、その結果前記バスインタフェースユニット（４０６）は、
Ｉ／Ｏ命令によって参照される入出力（Ｉ／Ｏ）ポートの番号を示す前記入出力（Ｉ／Ｏ）ポート番号と、前記Ｉ／Ｏ命令を格納しているメモリ場所のセキュリティコンテキストレベルを示すセキュリティコンテキスト識別情報値とを受信して、
前記セキュリティコンテキスト識別情報値と前記Ｉ／Ｏポート番号とを使用して前記メモリ（２０６）に記憶されている入出力（Ｉ／Ｏ）許可ビットマップ（６００）にアクセスして、前記Ｉ／Ｏポートに対応する前記許可ビットを取得し、前記許可ビットの値に応じて出力信号を発生し、
前記実行ユニット（４００）は前記出力信号を受信するために結合され、かつ前記出力信号に応じて前記Ｉ／Ｏ命令を実行するように構成されている請求項１に記載のプロセッサ（２０２）。
【請求項９】
入出力（Ｉ／Ｏ）命令を選択的に実行するための方法であって、
入出力（Ｉ／Ｏ）許可ビットマップ（６００）をメモリ（２０６）に作成するステップと、前記Ｉ／Ｏ許可ビットマップ（６００）は複数の許可ビットを有し、前記許可ビットの各々は、複数のＩ／Ｏポートのうちの異なる１つに対応しており、前記許可ビットの各々は、対応するＩ／Ｏポートへのアクセスが許可されるかどうかを示す値を有し、
前記Ｉ／Ｏ命令によって参照されるＩ／Ｏポートを示すＩ／Ｏポート番号と、前記Ｉ／Ｏ命令を格納しているメモリ場所のセキュリティコンテキストレベルを示すセキュリティコンテキスト識別情報値とを受信するステップと、
前記セキュリティコンテキスト識別情報値と前記Ｉ／Ｏポート番号とを使用して、記憶されている前記Ｉ／Ｏ許可ビットマップ（６００）にアクセスして、前記Ｉ／Ｏポートに対応する許可ビットを取得するステップと、
前記Ｉ／Ｏポートに対応する前記許可ビットの値に応じて前記Ｉ／Ｏ命令を実行するステップと、を有する方法。
【請求項１０】
Ｉ／Ｏポート番号とセキュリティコンテキスト識別情報値とを受信するステップは、前記Ｉ／Ｏ命令の実行中に前記Ｉ／Ｏポート番号と前記セキュリティコンテキスト識別情報値とを受信するステップをさらに有し、前記Ｉ／Ｏポートに対応する前記許可ビットの値に応じて前記Ｉ／Ｏ命令を実行するステップは、前記Ｉ／Ｏポートに対応する許可ビットの前記値が、前記Ｉ／Ｏポートへのアクセスが許されることを示す場合に、前記Ｉ／Ｏ命令を実行するステップをさらに有する請求項９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、メモリ管理のシステムならびに方法に関し、本発明は、より詳細には、メモリに記憶されたデータの保護を行うメモリ管理のシステムならびに方法に関する。
【背景技術】
【０００２】
８０ｘ８６（すなわち「ｘ８６」）プロセッサアーキテクチャでは、メモリアドレス空間とは別個に入出力（Ｉ／Ｏ）アドレス空間を利用できる。ｘ８６のＩ／Ｏアドレス空間は、８ビットのデータを単位する６４キロの連続するブロックであり、そのアドレス範囲は０〜６５，５３５（００００ｈ〜ＦＦＦＦｈ、「ｈ」は１６進数を示す）を占め、通常は周辺機器（例えばキーボード、ディスクドライブ等）との間の通信に使用される。周辺機器は、通常「Ｉ／Ｏポート」、あるいは略して「ポート」と呼ばれる特別なアクセスレジスタを備える。Ｉ／Ｏポートは８ビットポート、１６ビットポートまたは３２ビットポートのいずれかであり得る。８ビットポートは、そのポートの一意的なバイトアドレスを使用してアクセスされる。１６ビットＩ／Ｏポートは隣接する２個のバイトを有し、３２ビットＩ／Ｏポートは、隣接する４個のバイトを有する。１６ビットＩ／Ｏポートおよび３２ビットＩ／Ｏポートは、これらの隣接する全バイトのうちの最下位のアドレスを使用してアクセスされる。
【０００３】
ｘ８６プロセッサのＩ／Ｏアドレス空間でのアドレスは、ｘ８６プロセッサに結合されている複数の周辺機器の別個のポートに対応し得る。ｘ８６プロセッサは、アドレス信号線にＭ／ＩＯ（メモリＩ／Ｏ）信号を送り、このＭ／ＩＯ信号は、アドレス信号線上をアドレス信号によって伝えられるアドレスが、メモリアドレス空間のアドレスであるかＩ／Ｏアドレス空間のアドレスであるかを示している。
【０００４】
ｘ８６命令セットは、Ｉ／Ｏアドレス空間にアクセスするための特別なＩ／Ｏ命令を有している。ｘ８６のＩ／Ｏ命令は、ｘ８６プロセッサの内蔵レジスタとＩ／Ｏアドレス空間にマップされたＩ／Ｏポートの間、およびｘ８６プロセッサに結合されたメモリとＩ／Ｏポートとの間でデータを交換するための方法を提供する。ｘ８６のＩ／Ｏ命令は、「ＩＮ」（ポートからの入力）および「ＯＵＴ」（ポートへの出力）のレジスタＩ／Ｏ命令のほか、「ＩＮＳ」（ポートからの文字列の入力）および「ＯＵＴＳ」（ポートへの文字列の出力）のブロックＩ／Ｏ命令または文字列Ｉ／Ｏ命令を備える。ブロックｘ８６命令は、Ｉ／Ｏポートからメモリに、メモリからＩ／Ｏポートに、直接データを転送する。
【０００５】
「タスク」とは、実行の連続的な１つのスレッド（thread）である。８０２８６以降のｘ８６プロセッサは、複数のタスクを並行して実行できるマルチタスク処理に対応している。実際には、所定の時間に１つのタスクしか実行されておらず、ｘ８６プロセッサは単に複数のタスクを切り替えているだけである。
【０００６】
最近のｘ８６プロセッサは、実アドレスすなわち「リアル」モード、保護された仮想アドレスすなわち「プロテクト」モード、および仮想８０８６すなわち「仮想」モードを含む、数種類の異なるモードのいずれか１つで実行することが可能である。プロテクトモードにおいて、Ｉ／Ｏ命令の使用は、ＦＬＡＧＳレジスタにあるＩＯＰＬ（Ｉ／Ｏ特権レベル）フィールドの設定によって制御される。８０３８６以降のｘ８６プロセッサでは、Ｉ／Ｏアドレス空間にマップされた個々のポートに対するアクセスは、タスクのタスク状態セグメント（ＴＳＳ）内のＩ／Ｏ許可ビットマップによって制御される。プロテクトモードのオペレーティングシステムの大半は、Ｉ／Ｏポートへのアクセスをオペレーティングシステム自身（特権レベル０）のほか、少数の「信頼された」デバイスドライバ（特権レベル１）に制限している。
【０００７】
８０３８６以降のｘ８６プロセッサがプロテクトモードで動作している場合、２種類のメカニズムを使用して、タスクによるＩ／Ｏアドレス空間へのアクセスを制限し得る。第１に、Ｉ／Ｏ命令の使用は、フラグ（ＥＦＬＡＧＳ）レジスタにあるＩ／Ｏ特権レベル（ＩＯＰＬ）フィールドの設定によって制御される。第２に、Ｉ／Ｏ空間にある個々のＩ／Ｏポートへのアクセスは、各タスクのタスク状態セグメント（ＴＳＳ）内のＩ／Ｏ許可ビットマップによって制御され得る。Ｉ／Ｏ許可ビットマップのメカニズムは、８０３８６以降のｘ８６プロセッサのみに実装されている点が留意される。
【０００８】
プロテクトモードのオペレーティングシステムの大半は、Ｉ／Ｏ命令の使用を、オペレーティングシステム自身のほか、少数の「信頼された」デバイスドライバに制限しようとする。ｘ８６プロセッサアーキテクチャの同心円状の特権モデルにおいては、プロテクトモードのオペレーティングシステムソフトウェアは、通常、特権レベル０の内側のリングで実行しており、信頼されたドライバソフトウェアは、通常、この内側のリングを囲む特権レベル１のリング、または特権レベル０で実行している。アプリケーションプログラムは、通常、特権レベル３の外側のリングで実行している。
【０００９】
プロテクトモードで実行しているｘ８６プロセッサがタスクのＩ／Ｏ命令を実行する場合、ｘ８６プロセッサは、最初に、タスクの現在の特権レベル（ＣＰＬ）とＩ／Ｏ特権レベル（ＩＯＰＬ）とを比較する。タスクの現在の特権レベル（ＣＰＬ）が、Ｉ／Ｏ特権レベル（ＩＯＰＬ）と少なくとも同等である（すなわち現在の特権レベルの数値がＩＯＰＬ以下である）場合、ｘ８６プロセッサはそのＩ／Ｏ命令を実行する。タスクの現在の特権レベル（ＣＰＬ）が、Ｉ／Ｏ特権レベル（ＩＯＰＬ）と同等ではない（すなわち現在の特権レベルの数値がＩＯＰＬを越える）場合、ｘ８６プロセッサは、タスクのタスク状態セグメント（ＴＳＳ）にあるＩ／Ｏ許可ビットマップを検査する。
【００１０】
ここで、図１を用いて、ｘ８６アーキテクチャの公知のＩ／Ｏ許可ビットマップ保護メカニズムを示す。図１は、メモリ１００に記憶されているタスク状態セグメント１０２（ＴＳＳ）と、対応するＩ／Ｏ許可ビットマップ１０４とを示す図である。タスク状態セグメント（ＴＳＳ）１０３は、メモリセグメントの先頭（すなわちベース）から始まり、Ｉ／Ｏ許可ビットマップメモリ１０４はセグメントの終端（すなわち境界）で終わっている。タスク状態セグメント（ＴＳＳ）１０２は、メモリセグメント内の相対アドレス６６ｈに１６ビットの「Ｉ／Ｏマップベース」を有する。このＩ／Ｏマップベースは、対応するＩ／Ｏ許可ビットマップ１０４の先頭バイトのオフセットを、バイト単位で表した値を格納している。
【００１１】
Ｉ／Ｏ許可ビットマップ１０４の各ビットは、Ｉ／Ｏ空間におけるバイトに対応している。例えば、Ｉ／Ｏ許可ビットマップ１０４の先頭のビットは、Ｉ／Ｏ空間のアドレス「０」の８ビットポートを表し、第２のビットは、Ｉ／Ｏ空間のアドレス「１」の８ビットポートを表す、という風に続いていく。アクセス先のＩ／Ｏポートの番号は、Ｉ／Ｏ許可ビットマップ１０４におけるビットオフセットとして使用される。アクセス先のＩ／Ｏポートに対応するＩ／Ｏ許可ビットマップ１０４のビットが「０」にクリアされている場合、ｘ８６プロセッサ（メモリ１００に結合されており、Ｉ／Ｏ保護ビットマップ１０４にアクセスしている）はＩ／Ｏ命令を実行する。このビットが「１」にセットされている場合、ｘ８６プロセッサはＩ／Ｏ命令を実行せず、一般保護フォールトを生成する。アクセス先のＩ／Ｏポートが１６ビットワードまたは３２ビットダブルワードのＩ／Ｏポートである場合、ｘ８６プロセッサがＩ／Ｏ命令を実行するためには、ポートの隣り合ったバイトに対するビットの全てが「０」にクリアされている必要がある。
【００１２】
Ｉ／Ｏ空間の使用度は得てして低く、Ｉ／Ｏ空間内の６４キロのポートの全てを表すには８キロバイトが必要となるため、Ｉ／Ｏ許可ビットマップの保護メカニズムは、Ｉ／Ｏ許可ビットマップを圧縮する方法を備えている。Ｉ／Ｏ許可ビットマップの終端を越えたアドレスを有するＩ／Ｏポートは、Ｉ／Ｏ許可ビットマップにある対応するビットが「１」にセットされているように扱われる。
【発明の開示】
【発明が解決しようとする課題】
【００１３】
ｘ８６プロセッサアーキテクチャのＩ／Ｏ保護ビットマップメカニズムが不十分で、Ｉ／Ｏアドレス空間が適切に保護されないという問題が生ずる。例えば、管理者レベル[スーパーバイザレベル(supervisor lever)、例えば、ＣＰＬ＝０を有する]で実行しているどのタスクも、Ｉ／Ｏアドレス空間の任意のポートにいつでもアクセスすることができる。さらに、管理者レベルで実行している第１のタスクが、第２のタスクのＩ／Ｏ許可ビットマップのビットを変更して、第２のタスクが、Ｉ／Ｏアドレス空間の任意のポートまたは全てのポートにアクセスできるようにすることができる。その後、第２のタスクは、これらのポートの１つ以上にアクセスする可能性がある。本発明は、ｘ８６アーキテクチャのＩ／Ｏ空間の保護が不十分であるという上記の問題を解決し得るか、少なくとも低減し得るシステムおよび／または方法を対象したものである。
【課題を解決するための手段】
【００１４】
本発明の一態様においては、入出力（Ｉ／Ｏ）命令を選択的に実行するための方法が提供される。この方法は、入出力（Ｉ／Ｏ）許可ビットマップをメモリに作成するステップと、Ｉ／Ｏポート番号とセキュリティコンテキスト識別情報（ＳＣＩＤ）値とを受信するステップと、を有する。この方法は、前記ＳＣＩＤ値と前記Ｉ／Ｏポート番号とを使用して、記憶されている前記Ｉ／Ｏ許可ビットマップにアクセスし、前記Ｉ／Ｏポートに対応する許可ビットを取得するステップと、前記Ｉ／Ｏポートに対応する前記許可ビットの値に応じて前記Ｉ／Ｏ命令を実行するステップと、も有する。Ｉ／Ｏ許可ビットマップは、複数の許可ビットを有する。前記許可ビットの各々は、複数のＩ／Ｏポートのうちの異なる１つに対応している。前記許可ビットの各々は、対応するＩ／Ｏポートへのアクセスが許可されるかどうかを示す値を有する。前記Ｉ／Ｏポート番号は前記Ｉ／Ｏ命令によって参照されるＩ／Ｏポートを示す。前記ＳＣＩＤ値は前記Ｉ／Ｏ命令を格納しているメモリ場所のセキュリティコンテキストレベルを示す。
【発明を実施するための最良の形態】
【００１５】
添付の図面と併せて下記の説明を読めば、本発明を理解できるであろう。添付の図面においては、同一の参照符号は同じ要素を指している。
【００１６】
本発明は、種々の変形および代替形態を取り得るが、その特定の実施形態が、図面に例として図示され、ここに詳細に記載されているに過ぎない。しかし、この詳細な説明は、本発明を特定の実施形態に限定することを意図するものではなく、反対に、添付の特許請求の範囲によって規定される本発明の趣旨ならびに範囲に含まれる全ての変形例、均等物および代替例を含むことを理解すべきである。
【００１７】
本発明の例示的な実施形態を下記に記載する。簡潔を期すために、実際の実装の特徴を全て本明細書に記載することはしない。当然、実際の実施形態の開発においては、システム上の制約およびビジネス上の制約に適合させるなど、開発の具体的な目的を達するために、実装に固有の判断が数多く必要とされ、この判断は実装によって変わるということが理解される。さらに、この種の開発作業は複雑かつ時間がかかるものであるが、本開示による利益を受ける当業者にとって日常的な作業であるということが理解されよう。
【００１８】
図２は、ＣＰＵ（プロセッサ）２０２、システムブリッジまたは「ホスト」ブリッジ２０４、メモリ２０６、第１デバイスバス２０８（例えば、周辺機器相互接続（ＰＣＩ）バス）、デバイスバスブリッジ２１０、第２デバイスバス２１２（例えば、業界標準アーキテクチャ（ＩＳＡ）バス）、および４つのデバイスハードウェアユニット２１４Ａ〜２１４Ｄを備えたコンピュータシステム２００の一実施形態を示す図である。ホストブリッジ２０４は、ＣＰＵ２０２、メモリ２０６、および第１デバイスバス２０８に結合されている。ホストブリッジ２０４は、ＣＰＵ２０２と第１デバイスバス２０８との間で信号の変換を行うと共に、メモリ２０６を、ＣＰＵ２０２と第１デバイスバス２０８とに動作可能に結合している。デバイスバスブリッジ２１０は、第１デバイスバス２０８と第２デバイスバス２１２との間に結合されており、第１デバイスバス２０８と第２デバイスバス２１２との間で信号の変換を行う。図２の実施形態において、デバイスハードウェアユニット２１４Ａ，２１４Ｂは第１デバイスバス２０８に結合されており、デバイスハードウェアユニット２１４Ｃ，２１４Ｄは第２デバイスバス２１２に結合されている。デバイスハードウェアユニット２１４Ａ〜２１４Ｄの１つ以上は、例えば、記憶装置（ハードディスクドライブ、フロッピードライブおよびＣＤ−ＲＯＭドライブなど）、通信装置（モデムおよびネットワークアダプタなど）または入出力装置（ビデオ機器、オーディオ機器およびプリンタなど）であり得る。
【００１９】
図２の実施形態において、ＣＰＵ２０２は、入出力（Ｉ／Ｏ）セキュリティチェックユニット（ＳＣＵ）２１６を有する。デバイスハードウェアユニット２１４Ａ〜２１４Ｄは、ＣＰＵ２０２のＩ／Ｏ空間のさまざまなＩ／Ｏポートにマップされ得、ＣＰＵ２０２は、デバイスハードウェアユニット２１４Ａ〜２１４Ｄと、対応するＩ／Ｏポートを介して通信し得る。
【００２０】
この場合、Ｉ／Ｏ  ＳＣＵ２１６は、ＣＰＵ２０２によって生成される権限のないアクセスからデバイスハードウェアユニット２１４Ａ〜２１４Ｄを保護するために使用される。別の実施形態においては、図２に示すホストブリッジ２０４は、ＣＰＵ２０２に内蔵されてもよい点が留意される。
【００２１】
図３は、図２のコンピュータシステム２００の各種ハードウェアコンポーネントおよびソフトウェアコンポーネントの間の関係を示す図である。図３の実施形態において、複数のアプリケーションプログラム３００、オペレーティングシステム３０２、セキュリティカーネル３０４、およびデバイスドライバ３０６Ａ〜３０６Ｄがメモリ２０６に記憶されている。アプリケーションプログラム３００、オペレーティングシステム３０２、セキュリティカーネル３０４、およびデバイスドライバ３０６Ａ〜３０６Ｄは、ＣＰＵ２０２によって実行される命令を含む。オペレーティングシステム３０２はユーザーインターフェースおよびソフトウェアの「プラットホーム」を提供しており、このプラットホームの最上層においてアプリケーションプログラム３００が実行している。また、オペレーティングシステム３０２は、例えばファイルシステム管理、プロセス管理、および入出力（Ｉ／Ｏ）制御などの基本的な支援機能を提供している。
【００２２】
また、オペレーティングシステム３０２は、基本的なセキュリティ機能を提供し得る。例えば、ＣＰＵ２０２（図２）はｘ８６命令セットの命令を実行するｘ８６プロセッサであり得る。この場合、上記したように、ＣＰＵ２０２は、プロテクトモードで仮想メモリおよび実メモリの保護の機能の両方を提供する専用のハードウェア要素を有し得る。例えば、オペレーティングシステム３０２は、Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムファミリ（マイクロソフト  コーポレイション、ワシントン州レドモンド所在）の１つであり得る。このオペレーティングシステムは、ＣＰＵ２０２をプロテクトモードで動作させ、ＣＰＵ２０２の専用のハードウェア要素を使用して、プロテクトモードで仮想メモリおよびメモリ保護の両方を提供する。
【００２３】
下記にさらに詳述するように、セキュリティカーネル３０４は、オペレーティングシステム３０２によって提供されるセキュリティ機能を越える付加的なセキュリティ機能を提供し、メモリ２０６に記憶されているデータを権限のないアクセスから保護する。図３に示すように、セキュリティカーネル３０４はＩ／Ｏ  ＳＣＵ２１６に結合されている。下記に詳述するように、Ｉ／Ｏ  ＳＣＵ２１６は、ソフトウェアが行った、Ｉ／Ｏアドレス空間内のＩ／Ｏポートに対するアクセスを全て監視して、Ｉ／Ｏポートに対する正当なアクセスのみを許可する。
【００２４】
図３の実施形態において、デバイスドライバ３０６Ａ〜３０６Ｄは、対応するデバイスハードウェアユニット２１４Ａ〜２１４Ｄにそれぞれ動作的に関連付けられ、かつ結合されている。例えば、デバイスハードウェアユニット２１４Ａ，２１４Ｄは、「セキュアな（セキュリティ保護された）」デバイスであり得、対応するデバイスドライバ３０６Ａ，３０６Ｄは「セキュアな」デバイスドライバであり得る。セキュリティカーネル３０４は、オペレーティングシステム３０２とセキュアなデバイスドライバ３０６Ａ，３０６Ｄとの間に結合されており、アプリケーションプログラム３００およびオペレーティングシステム３０２が行うアクセスを全て監視して、デバイスドライバ３０６Ａ，３０６Ｄおよび対応するセキュアなデバイス２１４Ａ，２１４Ｄを保護し得る。セキュリティカーネル３０４は、アプリケーションプログラム３０およびオペレーティングシステム３０２によって行われる、デバイスドライバ３０６Ａ，３０６Ｄおよび対応するセキュアなデバイス２１４Ａ，２１４Ｄへの権限のないアクセスを阻止し得る。これに対し、デバイスドライバ３０６Ｂ，３０６Ｃは、「非セキュアな」デバイスドライバであり得、対応するデバイスハードウェアユニット２１４Ｂ，２１４Ｃは「非セキュアな」デバイスハードウェアユニットであり得る。デバイスドライバ３０６Ｂ，３０６Ｃおよび対応するデバイスハードウェアユニット２１４Ｂ，２１４Ｃは、例えば、旧来のデバイスドライバである「レガシー」デバイスドライバおよびデバイスハードウェアユニットであり得る。
【００２５】
別の実施形態においては、セキュリティカーネル３０４がオペレーティングシステム３０２に内蔵されてもよい点が留意される。さらに別の実施形態においては、セキュリティカーネル３０４、デバイスドライバ３０６Ａ，３０６Ｄ、および／またはデバイスドライバ３０６Ｂ，３０６Ｃがオペレーティングシステム３０２に内蔵されてもよい。
【００２６】
図４は、図２のコンピュータシステム２００のＣＰＵ２０２の一実施形態を示す図である。図４の実施形態において、ＣＰＵ２０２は、実行ユニット４００、メモリ管理ユニット（ＭＭＵ）４０２、キャッシュユニット４０４、バスインタフェースユニット（ＢＩＵ）４０６、制御レジスタの組４０８、およびセキュア実行モード（ＳＥＭ）レジスタの組４１０を有する。ＢＩＵ４０６は、ホストブリッジ２０４（図２）に結合されており、ＣＰＵ２０２とホストブリッジ２０４との間のインタフェースを形成している。また、ＢＩＵ４０６は、ホストブリッジ２０４を介してメモリ２０６（図２）に結合されており、ＣＰＵ２０２とメモリ２０６との間のインタフェースを形成している。図４の実施形態において、Ｉ／Ｏ  ＳＣＵ２１６は、ＢＩＵ４０６に内蔵されている。
【００２７】
以下に詳述するように、ＳＥＭレジスタの組４１０は、図２のコンピュータシステム２００内でセキュア実行モード（ＳＥＭ）を実装するために使用され、Ｉ／Ｏ  ＳＣＵ２１６の動作はＳＥＭレジスタの組４１０の記憶内容によって支配される。ＳＥＭレジスタ４１０は、セキュリティカーネル３０４（図３）によってアクセスされる（すなわち書き込みおよび／または読み込みが行われる）。
【００２８】
図４の実施形態において、ＳＥＭレジスタの組４１０は、セキュア実行モード（ＳＥＭ）ビットを有する。図２のコンピュータシステム２００は、例えば、（ｉ）ＣＰＵ２０２がｘ８６プロテクトモードで実行しているｘ８６プロセッサであり、（ｉｉ）メモリページングが有効となっており、かつ（ｉｉｉ）ＳＥＭビットが「１」にセットされている場合に、セキュア実行モード（ＳＥＭ）で動作し得る。
【００２９】
一般に、制御レジスタの組４０８の記憶内容は、ＣＰＵ２０２の動作を支配する。したがって、制御レジスタの組４０８の記憶内容は、実行ユニット４００、ＭＭＵ４０２、キャッシュユニット４０４、および／またはＢＩＵ４０６の動作を支配する。例えば、制御レジスタの組４０８は、ｘ８６プロセッサアーキテクチャの制御レジスタを複数有し得る。
【００３０】
ＣＰＵ２０２の実行ユニット４００は、命令（例えばｘ８６命令）およびデータをフェッチし、フェッチされた命令を実行して、命令の実行中に信号（例えばアドレス信号、データ信号および制御信号）を生成する。実行ユニット４００は、キャッシュユニット４０４に結合されており、キャッシュユニット４０４およびＢＩＵ４０６を介してメモリ２０６（図２）から命令を受信し得る。
【００３１】
コンピュータシステム２００のメモリ２０６（図２）は、各々が一意的な物理アドレスを有する複数のメモリ場所を有し得る。ページングを有効にしてプロテクトモードで動作している場合、ＣＰＵ２０２のアドレス空間は、ページフレームまたは「ページ」と呼ばれる複数のブロックに分割される。任意の時間において、メモリ２０６には、ページの一部に対応するデータのみが記憶されている。図４の実施形態において、命令の実行中に実行ユニット４００によって生成されるアドレス信号は、セグメント化された（すなわち「論理」）アドレスである。ＭＭＵ４０２は、実行ユニット４００によって生成されたセグメント化アドレスを、メモリ２０６の対応する物理アドレスに変換する。ＭＭＵ４０２は、物理アドレスをキャッシュユニット４０４に提供する。キャッシュユニット４０４は、実行ユニット４００が最近フェッチした命令およびデータを記憶するために使用される比較的小さな記憶装置である。
【００３２】
ＢＩＵ４０６は、キャッシュユニット４０４とホストブリッジ２０４との間に結合されている。ＢＩＵ４０６は、キャッシュユニット４０４に存在しない命令およびデータを、ホストブリッジ２０４を介してメモリ２０６からフェッチするために使用される。ＢＩＵ４０６は、Ｉ／Ｏ  ＳＣＵ２１６も備えている。Ｉ／Ｏ  ＳＣＵ２１６は、ＳＥＭレジスタ４１０、実行ユニット４００およびＭＭＵ４０２に結合されている。上記したように、Ｉ／Ｏ  ＳＣＵ２１６は、ソフトウェアが行った、Ｉ／Ｏアドレス空間内のＩ／Ｏポートに対するアクセスを全て監視して、Ｉ／Ｏポートに対する正当なアクセスのみを許可する。
【００３３】
図５は、図４のＩ／Ｏ  ＳＣＵ２１６の一実施形態を示す図である。図５の実施形態において、Ｉ／Ｏ  ＳＣＵ２１６は、セキュリティ検査ロジック５００を備える。セキュリティ検査ロジック５００は、実行ユニット４００から「ＥＮＡＢＬＥ」信号およびＩ／Ｏポート番号を、ＭＭＵ４０２からセキュリティコンテキスト識別情報（ＳＣＩＤ）値を受信する。実行ユニット４００は、Ｉ／Ｏアドレス空間内の「対象の」Ｉ／ＯポートにアクセスするＩ／Ｏ命令を実行する前に、ＥＮＡＢＬＥ信号をアサートし得る。Ｉ／Ｏポート番号は対象のＩ／Ｏポートの番号である。ＳＣＩＤ値は、Ｉ／Ｏ命令を格納しているメモリページのセキュリティコンテキストレベルを示す。
【００３４】
図２のコンピュータシステム２００がセキュア実行モード（ＳＥＭ）で動作している場合、セキュリティカーネル３０４（図３）は、１つ以上のセキュリティ属性データ構造（テーブルなど）をメモリ２０６（図２）に生成し、保持する。各メモリページは、対応するセキュリティコンテキスト識別情報（ＳＣＩＤ）値を有しており、この対応するセキュリティコンテキスト識別情報（ＳＣＩＤ）値は、セキュリティ属性データ構造に記憶され得る。ＭＭＵ４０２は、命令の実行中に生成されるアドレス（例えば物理アドレス）を使用して、１つ以上のセキュリティ属性データ構造にアクセスして、対応するメモリページのセキュリティコンテキスト識別情報（ＳＣＩＤ）を取得する。一般に、コンピュータシステム２００は、ｎ個の別のセキュリティコンテキスト識別情報（ＳＣＩＤ）値を有しており、ｎはｎ≧１の整数である。
【００３５】
また、図２のコンピュータシステム２００がセキュア実行モード（ＳＥＭ）で動作している場合、セキュリティカーネル３０４（図３）は、セキュア実行モード（ＳＥＭ）Ｉ／Ｏ許可ビットマップもメモリ２０６（図２）に生成し、保持する。実行ユニット４００（図４）がタスクのＩ／Ｏ命令を実行する場合、ＣＰＵ２０２内のロジックは、最初にタスクの現在の特権レベル（ＣＰＬ）とＩ／Ｏ特権レベル（ＩＯＰＬ）とを比較し得る。タスクの現在の特権レベル（ＣＰＬ）が、Ｉ／Ｏ特権レベル（ＩＯＰＬ）と少なくとも同等である（すなわち現在の特権レベルの数値がＩＯＰＬ以下である）場合、ＣＰＵ２０２内のロジックはセキュア実行モード（ＳＥＭ）Ｉ／Ｏ許可ビットマップを検査し得る。これに対し、タスクの現在の特権レベル（ＣＰＬ）が、Ｉ／Ｏ特権レベル（ＩＯＰＬ）と同等ではない（すなわち現在の特権レベルの数値がＩＯＰＬを越える）場合、実行ユニット４００はＩ／Ｏ命令を実行しない。一実施形態において、一般保護フォールトが発生する。
【００３６】
実行ユニット４００（図４）がＥＮＡＢＬＥ信号をアサートすると、セキュリティ検査ロジック５００は、ＥＮＡＢＬＥ信号、受け取ったセキュリティコンテキスト識別情報（ＳＣＩＤ）値、および受け取ったＩ／Ｏポート番号をＢＩＵ４０６内のロジックに提供する。ＢＩＵ４０６内のロジックは、セキュリティコンテキスト識別情報（ＳＣＩＤ）値と受け取ったＩ／Ｏポート番号とを使用して、セキュア実行モード（ＳＥＭ）Ｉ／Ｏ許可ビットマップにアクセスし、セキュア実行モード（ＳＥＭ）Ｉ／Ｏ許可ビットマップにある対応するビットを、セキュリティ検査ロジック５００に提供する。セキュア実行モード（ＳＥＭ）Ｉ／Ｏ許可ビットマップの対応するビットが「０」にクリアされている場合、セキュリティ検査ロジック５００は、出力「ＥＸＥＣＵＴＥ」信号をアサートし、これが実行ユニット４００に提供され得る。ＥＸＥＣＵＴＥ信号がアサートされると、実行ユニット４００はＩ／Ｏ命令を実行し得る。これに対し、対応するビットが「１」にセットされている場合、セキュリティ検査ロジック５００は、出力「ＳＥＭ  ＳＥＣＵＲＩＴＹ  ＥＸＣＥＰＴＩＯＮ（ＳＥＭセキュリティ例外）」信号をアサートし、これが実行ユニット４００に提供される。ＳＥＭ  ＳＥＣＵＲＩＴＹ  ＥＸＣＥＰＴＩＯＮ信号がアサートされると、実行ユニット４００は、Ｉ／Ｏ命令を実行する代わりに、セキュア実行モード（ＳＥＭ）例外ハンドラを実行し得る。
【００３７】
１６ビットワードのＩ／Ｏポートまたは３２ビットダブルワードのＩ／ＯポートにアクセスするＩ／Ｏ命令の場合、実行ユニット４００は、複数バイトのＩ／Ｏポート番号をセキュリティ検査ロジック５００に連続して提供し得る。セキュリティ検査ロジック５００がＩ／Ｏポート番号のバイトの各々に対してＥＸＥＣＵＴＥ信号をアサートすると、実行ユニット４００はそのＩ／Ｏ命令を実行し得る。これに対し、セキュリティ検査ロジック５００が、Ｉ／Ｏポート番号のバイトの１つ以上に対してＳＥＭ  ＳＥＣＵＲＩＴＹ  ＥＸＣＥＰＴＩＯＮをアサートすると、実行ユニット４００はＩ／Ｏ命令を実行する代わりに、セキュア実行モード（ＳＥＭ）例外ハンドラを実行し得る。
【００３８】
図６は、図６に６００によって示すセキュア実行モード（ＳＥＭ）Ｉ／Ｏ許可ビットマップの一実施形態と、セキュア実行モード（ＳＥＭ）Ｉ／Ｏ許可ビットマップ６００にアクセスするためのメカニズムの一実施形態とを示す図である。図６のメカニズムは、ＢＩＵ４０６（図４）内のロジックに実装され得、コンピュータシステム２００がセキュア実行モード（ＳＥＭ）で実行している場合に該当し得る。図６において、セキュア実行モード（ＳＥＭ）レジスタ４１０は、モデル固有レジスタ（ＭＳＲ）６０２を有する。モデル固有レジスタ（ＭＳＲ）６０２は、セキュア実行モード（ＳＥＭ）Ｉ／Ｏ許可ビットマップ６００の先頭（すなわちベース）アドレスを記憶するために使用される。上記したように、コンピュータシステム２００は、ｎ個の別のセキュリティコンテキスト識別情報（ＳＣＩＤ）値を有しており、ｎはｎ≧１の整数である。セキュア実行モード（ＳＥＭ）Ｉ／Ｏ許可ビットマップ６００は、ｎ個の別のセキュリティコンテキスト識別情報（ＳＣＩＤ）値の各々に対応した、別個のＩ／Ｏ許可ビットマップを有する。別個のＩ／Ｏ許可ビットマップの各々は、６４キロビットすなわち８キロバイトを有する。
【００３９】
図６の実施形態において、Ｉ／ＯポートにアクセスするＩ／Ｏ命令を格納しているメモリページのセキュリティコンテキスト識別情報（ＳＣＩＤ）値が、セキュア実行モード（ＳＥＭ）Ｉ／Ｏ許可ビットマップを構成している１つ以上の６４キロビット（８キロバイト）のＩ／Ｏ許可ビットマップ６００において、モデル固有レジスタ６０２の記憶内容（すなわちセキュア実行モードＩ／Ｏ許可ビットマップ６００のベースアドレス）からのオフセットとして使用される。この結果、セキュリティコンテキスト識別情報（ＳＣＩＤ）値に対応したＩ／Ｏ許可ビットマップがアクセスされる。次に、Ｉ／Ｏポート番号が、セキュリティコンテキスト識別情報（ＳＣＩＤ）値に対応するＩ／Ｏ許可ビットマップのビットオフセットとして使用される。上記の方法でアクセスされたビットは、Ｉ／Ｏポート番号によって定義されるＩ／Ｏポートに対応するビットとなる。
【００４０】
図７は、図７に７００によって示すセキュア実行モード（ＳＥＭ）Ｉ／Ｏ許可ビットマップの別の実施形態と、セキュア実行モード（ＳＥＭ）Ｉ／Ｏ許可ビットマップ７００にアクセスするためのメカニズムの別の実施形態とを示す図である。図７のメカニズムは、ＢＩＵ４０６（図４）にあるロジックに実装され得る。図７の実施形態において、セキュア実行モード（ＳＥＭ）Ｉ／Ｏ許可ビットマップ７００は、６４キロビット（８キロバイト）Ｉ／Ｏ許可ビットマップを１つ有する。Ｉ／Ｏポート番号が、Ｉ／Ｏ許可ビットマップにおける、モデル固有レジスタ６０２の記憶内容（すなわちセキュア実行モードＩ／Ｏ許可ビットマップ６００のベースアドレス）からのビットオフセットとして使用される。上記の方法でアクセスされたビットは、Ｉ／Ｏポート番号によって定義されるＩ／Ｏポートに対応するビットとなる。
【００４１】
図８は、図２のコンピュータシステム２００のＣＰＵ２０２の別法による実施形態を示す図である。図８の実施形態において、上記したＣＰＵ２０２は、実行ユニット４００、メモリ管理ユニット（ＭＭＵ）４０２、キャッシュユニット４０４、バスインタフェースユニット（ＢＩＵ）４０６、制御レジスタの組４０８、およびセキュアな実行モード（ＳＥＭ）レジスタの組４１０を備える。これに加え、ＣＰＵ２０２はマイクロコードエンジン８００およびマイクロコード記憶装置８０２を備える。マイクロコードエンジン８００は、実行ユニット４００、ＭＭＵ４０２、キャッシュユニット４０４、ＢＩＵ４０６、制御レジスタの組４０８、およびセキュア実行モード（ＳＥＭ）レジスタの組４１０に結合されている。マイクロコードエンジン８００は、マイクロコード記憶装置８０２に記憶されているマイクロコード命令を実行して、マイクロコード命令、制御レジスタの組４０８の記憶内容、およびセキュア実行モード（ＳＥＭ）レジスタの組４１０の記憶内容に応じて、実行ユニット４００、ＭＭＵ４０２、キャッシュユニット４０４、およびＢＩＵ４０６の動作を制御する信号を発生する。また、マイクロコードエンジン８００は、ｘ８６命令セットのより複雑な命令を実行することによって、実行ユニット４００を支援し得る。
【００４２】
図８の実施形態において、マイクロコード８０２に記憶されているマイクロコード命令の一部は、Ｉ／Ｏセキュリティ検査コード８０４を構成している。図２のコンピュータシステム２００がセキュア実行モード（ＳＥＭ）で動作している場合、Ｉ／Ｏセキュリティ検査コード８０４が実行されて、Ｉ／Ｏ命令が実行のために実行ユニット４００に転送される。基本的に、Ｉ／Ｏセキュリティ検査コード８０４のマイクロコード命令は、上記したＩ／Ｏ  ＳＣＵ２１６（図２〜４）の機能をマイクロコードエンジン８００およびＢＩＵ４０６に実行させる。
【００４３】
例えば、Ｉ／Ｏ命令が実行のために実行ユニット４００に転送される際に、実行４００は、マイクロコードエンジン８００に対して、Ｉ／Ｏ命令の存在を知らせ得る。マイクロコードエンジンは、ＭＭＵ４０２およびＢＩＵ４０６に信号をアサートし得る。ＭＭＵ４０２は、マイクロコードエンジン８００からの信号に応答して、Ｉ／Ｏ命令を格納しているメモリページのセキュリティコンテキスト識別情報（ＳＣＩＤ）値をＢＩＵ４０６に提供し得る。実行ユニット４００は、Ｉ／Ｏ命令によってアクセスされるＩ／Ｏポート番号をＢＩＵ４０６に提供し得る。
【００４４】
ＢＩＵ４０６は、マイクロコードエンジン８００からの信号に応答して、上記したように、セキュリティコンテキスト識別情報（ＳＣＩＤ）値と受け取ったＩ／Ｏポート番号とを使用して、セキュア実行モード（ＳＥＭ）Ｉ／Ｏ許可ビットマップにアクセスし、セキュア実行モード（ＳＥＭ）Ｉ／Ｏ許可ビットマップにある対応するビットをマイクロコードエンジン８００に提供し得る。セキュア実行モード（ＳＥＭ）Ｉ／Ｏ許可ビットマップのビットが「０」にクリアされている場合、マイクロコードエンジン８００は、実行ユニット４００がＩ／Ｏ命令の実行を完了するのを支援し得る。これに対し、対応するビットが「１」にセットされている場合、マイクロコードエンジンは、実行ユニット４００に信号を送ってＩ／Ｏ命令の実行を中止させ、セキュア実行モード（ＳＥＭ）例外ハンドラの命令の実行を開始する。
【００４５】
ここで、図９を用いて、セキュリティコンテキスト識別情報（ＳＣＩＤ）値を割り当て、対応する実行モード（ＳＥＭ）Ｉ／Ｏ許可ビットマップを生成することによって、図２に示したコンピュータシステム２００のデバイスドライバと、関連するデバイスハードウェアユニットとがセキュリティを目的として「コンパートメント化」される様子を示す。図９は、図２のコンピュータシステム２００の各種ハードウェアコンポーネントおよびソフトウェアコンポーネントの間の関係を示す図であり、デバイスドライバ３０６Ａと対応するデバイスハードウェアユニット２１４Ａとは、第１のセキュリティ「コンパートメント」９００に存在し、デバイスドライバ３０６Ｄと対応するデバイスハードウェアユニット２１４Ｄとは第２のセキュリティコンパートメント９０２に存在する。セキュリティコンパートメント９００，９０２は、動作的に相互に隔離されている。デバイスドライバ３０６Ａのみがデバイスハードウェアユニット２１４Ａへのアクセスを許可され、デバイスドライバ３０６Ｄのみがデバイスハードウェアユニット２１４Ｄへのアクセスを許可されている。デバイスドライバと関連するデバイスハードウェアユニットとがこのように「コンパートメント化」されていることにより、悪意のあるコードや異常なコードが、デバイスハードウェアユニットの状態に悪影響を及ぼしたり、図２のコンピュータシステム２００の正常な動作を妨害することが阻止される。
【００４６】
例えば、図９の実施形態において、デバイスドライバ３０６Ａ，３０６Ｄの命令を含むメモリページに、異なるセキュリティコンテキスト識別情報（ＳＣＩＤ）値が割り当てられ得る。デバイスドライバ３０６ＡのＳＣＩＤ値に対して生成された第１のセキュア実行モード（ＳＥＭ）Ｉ／Ｏ許可ビットマップは、デバイスハードウェアユニット２１４Ａに割り当てられているコンピュータシステム２００のＩ／Ｏアドレス空間の第１部分にデバイスドライバ３０６Ａがアクセスするのを許可し、デバイスハードウェアユニット２１４Ｄに割り当てられたＩ／Ｏアドレス空間の第２部分にデバイスドライバ３０６Ａがアクセスするのを許可しないことがあり得る。同様に、デバイスドライバ３０６ＤのＳＣＩＤ値に対して生成された第２のセキュア実行モード（ＳＥＭ）Ｉ／Ｏ許可ビットマップは、デバイスハードウェアユニット２１４Ｄに割り当てられたＩ／Ｏアドレス空間の第２部分にデバイスドライバ３０６Ｄがアクセスするのを許可し、デバイスハードウェアユニット２１４Ａに割り当てられたＩ／Ｏアドレス空間の第１部分にデバイスドライバ３０６Ａがアクセスするのを許可しないことがあり得る。この結果、デバイスドライバ３０６Ａのみがデバイスハードウェアユニット２１４Ａへのアクセスを許可され、デバイスドライバ３０６Ｄのみがデバイスハードウェアユニット２１４Ｄへのアクセスを許可される。
【００４７】
上記に開示した本発明の態様の一部は、ハードウェアに実装されても、ソフトウェアに実装されてもよい。このため、本明細書の詳細な説明には、ハードウェアによって実装される処理として記載されたものもあれば、演算システムまたは演算装置のメモリ内のデータビットの操作の記号的表記を含む、ソフトウェアによって実装される処理として記載されたものもある。このような記述および表現は、当業者が、ハードウェアおよびソフトウェアを用いた、自身の作業の内容を他の当業者に効率的に伝えるために用いられているものである。この処理および操作は、いずれも物理量の物理的な操作を必要とする。ソフトウェアにおいては、この物理量は通常、記憶、転送、結合、比較などの操作が可能な電気信号、磁気信号、または光学信号の形を取るが、必ずしもこれらに限定されない。主に公共の利用に供するという理由で、これらの信号を、ビット、値、要素、記号、文字、語（term）、数字などとして参照すれば、時として利便性が高いことが知られている。
【００４８】
しかし、上記の全用語ならびに類似の用語は、適切な物理量に関連付けられており、この物理量を表す簡便な標識に過ぎないという点を留意すべきである。特段の断りのない限り、もしくはそうではないことが自明ではない限り、本開示の全てにおいて、その記載内容は、電子装置の記憶領域内で物理（電子的、磁気的、または光学的な）量として表されるデータを、記憶装置、伝送装置または表示装置内で同様に物理量として表される他のデータへと操作および変換する電子装置の動作および処理を指す。このような内容を示す表現としては「処理」、「演算」、「計算」、「判定」、「表示」などがあるが、これらに限定されない。
【００４９】
ソフトウェアによって実装する本発明の態様は、典型的には、ある種のプログラム記憶媒体に符号化されているか、ある種の伝送媒体を介して実装されるという点に留意すべきである。プログラム記憶媒体は、磁気を利用したもの（例えば、フロッピードライブやハードドライブ）でも、光学を利用したもの（例えば、コンパクトディスクの読み取り専用記憶装置、すなわち「ＣＤ−ＲＯＭ」）でもよく、読み取り専用であっても、ランダムアクセス可能なものであってもよい。同様に、伝送媒体は、より線対、同軸ケーブル、ファイバのほか、当業界に公知の伝送媒体であってもよい。本発明は、いずれの特定の実装の態様にも限定されない。
【００５０】
上記に記載した特定の実施形態は例に過ぎず、本発明は、本開示の教示から利益を得る当業者にとって自明の、同等の別法によって変更および実施されてもよい。さらに、ここに記載した構成または設計の詳細が、添付の特許請求の範囲以外によって制限を受けることはない。このため、上記に記載した特定の実施形態を変形または変更することが可能であり、この種の変形例の全てが本発明の範囲ならびに趣旨に含まれることが意図されることが明らかである。したがって、ここに保護を請求する対象は、添付の特許請求の範囲に記載したとおりである。
【図面の簡単な説明】
【００５１】
【図１】メモリに記憶されているｘ８６アーキテクチャのタスク状態セグメント（ＴＳＳ）と、ｘ８６アーキテクチャの対応するＩ／Ｏ許可ビットマップとを示す図である。
【図２】中央処理装置（ＣＰＵ）、システムブリッジまたは「ホスト」ブリッジ、メモリ、第１デバイスバス（例えば、周辺機器相互接続（ＰＣＩ）バス）、デバイスバスブリッジ、第２デバイスバス（例えば、業界標準アーキテクチャ（ＩＳＡ）バス）、および４つのデバイスハードウェアユニットを備えたコンピュータシステムの一実施形態を示す図であり、ＣＰＵは、ＣＰＵによって生成される権限のないアクセスからデバイスハードウェアユニットを保護するための入出力（Ｉ／Ｏ）セキュリティチェックユニット（ＳＣＵ）を備える。
【図３】図２のコンピュータシステムの各種ハードウェアコンポーネントおよびソフトウェアコンポーネントの間の関係を示す図である。
【図４】図２のコンピュータシステム２００のＣＰＵの一実施形態を示す図であり、ＣＰＵは、実行ユニット、メモリ管理ユニット（ＭＭＵ）、および実行ユニットとＭＭＵとに結合されたバスインタフェースユニット（ＢＩＵ）を備え、ＢＩＵはＩ／Ｏ  ＳＣＵを備える。
【図５】図４のＩ／Ｏ  ＳＣＵの一実施形態を示す図である。
【図６】図２のメモリに記憶されているセキュア実行モード（ＳＥＭ）Ｉ／Ｏ許可ビットマップの一実施形態と、ＳＥＭ  Ｉ／Ｏ許可ビットマップにアクセスするためのメカニズムの一実施形態とを示す図である。
【図７】図６のＳＥＭ  Ｉ／Ｏ許可ビットマップの別の実施形態と、ＳＥＭ  Ｉ／Ｏ許可ビットマップにアクセスするためのメカニズムの別の実施形態とを示す図である。
【図８】図２のコンピュータシステムのＣＰＵの別法による実施形態を示す図であり、ＣＰＵは、実行ユニット、ＭＭＵ、実行ユニットとＭＭＵとに結合されたバスインタフェースユニット（ＢＩＵ）、および実行ユニットとＭＭＵとＢＩＵとに結合されたマイクロコードエンジンを備え、マイクロコードエンジンは、マイクロコード記憶装置に記憶されているマイクロコード命令を実行して、マイクロコード命令に応じて実行ユニット、ＭＭＵ、およびＢＩＵの動作を制御する信号を生成する。
【図９】図２のコンピュータシステムの各種ハードウェアコンポーネントおよびソフトウェアコンポーネントの間の関係を示す図であり、第１のデバイスドライバおよび対応する第１のデバイスハードウェアユニットは第１のセキュリティ「コンパートメント」に存在し、第２のデバイスドライバおよび対応する第２のデバイスハードウェアユニットは、第２のセキュリティコンパートメントに存在し、第１のセキュリティコンパートメントから動作的に分離されている。
【図１】
2005521941.tif 000003
【図２】
2005521941.tif 000004
【図３】
2005521941.tif 000005
【図４】
2005521941.tif 000006
【図５】
2005521941.tif 000007
【図６】
2005521941.tif 000008
【図７】
2005521941.tif 000009
【図８】
2005521941.tif 000010
【図９】
2005521941.tif 000011
【手続補正書】
【提出日】平成16年6月1日(2004.6.1)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
メモリ（２０６）に結合するためのプロセッサ（２０２）であって、前記プロセッサ（２０２）は、
Ｉ／Ｏ命令を実行する実行ユニット（４００）を有し、当該実行ユニットは、Ｉ／Ｏ命令に対応する現在の特権レベルを決定し、前記現在の特権レベルとＩ／Ｏ特権レベルとを比較して、前記比較に基づいて第１の信号を提供するように構成されたものであり、
入出力（Ｉ／Ｏ）ポート番号と前記第１の信号とを受信するために結合されたバスインタフェースユニット（４０６）を有し、前記バスインタフェースユニット（４０６）は、前記Ｉ／Ｏポート番号に対応する許可ビットにアクセスして、前記許可ビットの値に応じて第２の信号を生成するように構成されたものであり、
前記実行ユニット（４００）は、前記第２の信号を受信し、かつ前記第２の信号に応じて前記Ｉ／Ｏ命令を実行するために結合されており、
前記バスインタフェースユニット（４０６）は、前記現在の特権レベルが前記Ｉ／Ｏ特権レベル以下であることを前記第１の信号が示す場合に、前記Ｉ／Ｏポート番号に対応する許可ビットにアクセスするように構成されている、プロセッサ。
【請求項２】
前記Ｉ／Ｏポート番号はＩ／Ｏ命令によって参照される入出力（Ｉ／Ｏ）ポートの番号を示し、前記バスインタフェースユニット（４０６）はセキュリティコンテキスト識別情報値（ＳＣＩＤ）を受信するために結合されており、前記セキュリティコンテキスト識別情報値は前記Ｉ／Ｏ命令を格納しているメモリ場所のセキュリティコンテキストレベルを示し、前記バスインタフェースユニット（４０６）は、前記セキュリティコンテキスト識別情報値と前記Ｉ／Ｏポート番号とを使用して前記メモリ（２０６）に記憶されている入出力（Ｉ／Ｏ）許可ビットマップ（６００）にアクセスし、前記許可ビットを取得するように構成されている、請求項１に記載のプロセッサ（２０２）。
【請求項３】
前記メモリ（２０６）にデータを記憶するように構成されたメモリ管理ユニット（４０２）をさらに有し、前記バスインタフェースユニット（４０６）は前記実行ユニット（４００）と前記メモリ管理ユニット（４０２）とに接続されており、前記Ｉ／Ｏポート番号は前記実行ユニット（４００）から受信され、前記セキュリティコンテキスト識別情報は前記メモリ管理ユニット（４０２）から受信される請求項２に記載のプロセッサ（２０２）。
【請求項４】
前記Ｉ／Ｏポート番号と前記セキュリティコンテキスト識別情報とはＩ／Ｏ命令の実行中に前記実行ユニット（４００）によって受信される請求項２に記載のプロセッサ（２０２）。
【請求項５】
前記Ｉ／Ｏ許可ビットマップ（６００）は複数の許可ビットを有し、
前記許可ビットの各々は、複数のＩ／Ｏポートのうちの異なる１つに対応しており、前記許可ビットの各々は、対応するＩ／Ｏポートへのアクセスが許可されるかどうかを示す値を有する請求項２に記載のプロセッサ（２０２）。
【請求項６】
前記Ｉ／Ｏ許可ビットマップ（６００）のベースアドレスを記憶するように構成されたモデル固有レジスタ（６０２）をさらに備え、前記バスインタフェースユニット（４０６）は、前記Ｉ／Ｏ許可ビットマップ（６００）にアクセスして、前記Ｉ／Ｏポート番号を、前記Ｉ／Ｏ許可ビットマップ（６００）における、前記モデル固有レジスタ（６０２）の記憶内容からのビットオフセットとして使用することによって前記Ｉ／Ｏポート番号に対応する前記許可ビットを取得する請求項２に記載のプロセッサ（２０２）。
【請求項７】
前記Ｉ／Ｏ許可ビットマップ（６００）はプライマリＩ／Ｏ許可ビットマップ（６００）であり、前記プライマリＩ／Ｏ許可ビットマップ（６００）は複数のセカンダリＩ／Ｏ許可ビットマップを有し、前記セカンダリＩ／Ｏ許可ビットマップの各々は複数の許可ビットを含み、前記セカンダリＩ／Ｏ許可ビットマップのうちの所定の１つの許可ビットの各々は、複数のＩ／Ｏポートのうちの異なる１つに対応しており、前記許可ビットの各々は、対応するＩ／Ｏポートへのアクセスが許可されるかどうかを示す値を有し、前記セカンダリＩ／Ｏ許可ビットマップの各々は、複数のセキュリティコンテキスト識別情報値のうちの異なる１つに対応している請求項２に記載のプロセッサ（２０２）。
【請求項８】
前記実行ユニット（４００）、メモリ管理ユニット（４０２）、および前記バスインタフェースユニット（４０６）に結合され、かつマイクロコード記憶装置（８０２）に記憶されているマイクロコード命令を実行するように構成されたマイクロコードエンジン（８００）をさらに備え、前記マイクロコードエンジン（８００）は前記マイクロコード命令のうちの少なくとも１つの実行中に制御信号を発生し、前記マイクロコード命令の一部は、前記マイクロコードエンジン（８００）に制御信号を発生させ、その結果前記バスインタフェースユニット（４０６）は、
Ｉ／Ｏ命令によって参照される入出力（Ｉ／Ｏ）ポートの番号を示す前記入出力（Ｉ／Ｏ）ポート番号と、前記Ｉ／Ｏ命令を格納しているメモリ場所のセキュリティコンテキストレベルを示すセキュリティコンテキスト識別情報値とを受信して、
前記セキュリティコンテキスト識別情報値と前記Ｉ／Ｏポート番号とを使用して前記メモリ（２０６）に記憶されている入出力（Ｉ／Ｏ）許可ビットマップ（６００）にアクセスして、前記Ｉ／Ｏポートに対応する前記許可ビットを取得し、前記許可ビットの値に応じて出力信号を発生し、
前記実行ユニット（４００）は前記出力信号を受信するために結合され、かつ前記出力信号に応じて前記Ｉ／Ｏ命令を実行するように構成されている請求項１に記載のプロセッサ（２０２）。
【請求項９】
入出力（Ｉ／Ｏ）命令を選択的に実行するための方法であって、
入出力（Ｉ／Ｏ）許可ビットマップ（６００）をメモリ（２０６）に作成するステップと、前記Ｉ／Ｏ許可ビットマップ（６００）は複数の許可ビットを有し、前記許可ビットの各々は、複数のＩ／Ｏポートのうちの異なる１つに対応しており、前記許可ビットの各々は、対応するＩ／Ｏポートへのアクセスが許可されるかどうかを示す値を有し、
前記Ｉ／Ｏ命令によって参照されるＩ／Ｏポートを示すＩ／Ｏポート番号と、前記Ｉ／Ｏ命令を格納しているメモリ場所のセキュリティコンテキストレベルを示すセキュリティコンテキスト識別情報値とを受信するステップと、
Ｉ／Ｏ特権レベルと前記入出力（Ｉ／Ｏ）命令に対応する現在の特権レベルとを比較するステップと、
前記セキュリティコンテキスト識別情報値と前記Ｉ／Ｏポート番号とを使用して、前記Ｉ／Ｏ許可ビットマップ（６００）にアクセスして、前記Ｉ／Ｏポートに対応する許可ビットを取得するステップと、
前記Ｉ／Ｏポートに対応する前記許可ビットの値に応じて前記Ｉ／Ｏ命令を実行するステップと、を有し、
前記現在の特権レベルが前記Ｉ／Ｏ特権レベル以下である場合に、前記許可ビットマップがアクセスされる方法。
【請求項１０】
Ｉ／Ｏポート番号とセキュリティコンテキスト識別情報値とを受信するステップは、前記Ｉ／Ｏ命令の実行中に前記Ｉ／Ｏポート番号と前記セキュリティコンテキスト識別情報値とを受信するステップをさらに有し、前記Ｉ／Ｏポートに対応する前記許可ビットの値に応じて前記Ｉ／Ｏ命令を実行するステップは、前記Ｉ／Ｏポートに対応する許可ビットの前記値が、前記Ｉ／Ｏポートへのアクセスが許されることを示す場合に、前記Ｉ／Ｏ命令を実行するステップをさらに有する請求項９に記載の方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００９
【補正方法】変更
【補正の内容】
【０００９】
ｘ８６アーキテクチャについては、「インテルアーキテクチャソフトウェア開発者マニュアル（Intel Architecture Software Developer's Manual）」（インテル  コーポレーション、１９９７年刊）に詳細に記載されている。特に、入出力（Ｉ／Ｏ）命令のハンドリングについては、第１巻（ＸＰ−００２２４３５４３）第９章に概要が記載されている。プロセッサが仮想８０８６モード時のＩ／Ｏ命令のハンドリングについては、第３巻（ＸＰ−００２２４８３７６）段落１５．２．８に記載されている。「Ｉ／Ｏ特権」および「Ｉ／Ｏ許可ビットマップ」については、インテル製３８６ＤＸマイクロプロセッサに関連して「統合メモリ管理を備えたＩｎｔｅｌ３８６マイクロプロセッサ３２ビットＣＨＭＯＳマイクロプロセッサ（Intel386 Microprocessor 32-Bit CHMOS Microprocessor with Integrated Memory Management）」（インテル  コーポレーション、１９９５年刊、ＸＰ−００２２４３５４２）、特に段落４．４．３．３に、記載されている。
プロテクトモード（すなわち、上記の参考文献に記載した動作）で実行しているｘ８６プロセッサがタスクのＩ／Ｏ命令を実行する場合、ｘ８６プロセッサは、最初に、タスクの現在の特権レベル（ＣＰＬ）とＩ／Ｏ特権レベル（ＩＯＰＬ）とを比較する。タスクの現在の特権レベル（ＣＰＬ）が、Ｉ／Ｏ特権レベル（ＩＯＰＬ）と少なくとも同等である（すなわち現在の特権レベルの値がＩＯＰＬ以下である）場合、ｘ８６プロセッサはそのＩ／Ｏ命令を実行する。タスクの現在の特権レベル（ＣＰＬ）が、Ｉ／Ｏ特権レベル（ＩＯＰＬ）と同等ではない（すなわち現在の特権レベルの値がＩＯＰＬを越える）場合、ｘ８６プロセッサは、タスクのタスク状態セグメント（ＴＳＳ）にあるＩ／Ｏ許可ビットマップを検査する。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００１６
【補正方法】変更
【補正の内容】
【００１６】
本発明は、種々の変形および代替形態を取り得るが、その特定の実施形態が、図面に例として図示され、ここに詳細に記載されているに過ぎない。しかし、この詳細な説明は、本発明を特定の実施形態に限定することを意図するものではなく、反対に、添付の特許請求の範囲によって規定される本発明の範囲に含まれる全ての変形例、均等物および代替例を含むことを理解すべきである。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００５０
【補正方法】変更
【補正の内容】
【００５０】
上記に記載した特定の実施形態は例に過ぎず、本発明は、本開示の教示から利益を得る当業者にとって自明の、同等の別法によって変更および実施されてもよい。ここに保護を請求する対象は、添付の特許請求の範囲に記載したとおりである。


【国際調査報告】
2005521941.tif 000012
2005521941.tif 000013