(57)【特許請求の範囲】
【請求項１】
例外ハンドラ復帰命令をデコードするデコードユニットと、
前記デコードユニットと結合された例外ハンドラ復帰実行ユニットとを備えたプロセッサであって、
前記例外ハンドラ復帰実行ユニットは、前記例外ハンドラ復帰命令に応答して、例外が、マスク不可割り込み（ＮＭＩ）ハンドラ内に取り入れられたかどうかの指示に基づいて、
前記例外ハンドラ復帰命令に対応する例外が、前記ＮＭＩハンドラ内に取り入れられたと判定した場合、次に受信されるＮＭＩの前記ＮＭＩハンドラへの配信を有効にするように前記プロセッサを設定せず、
前記例外が、前記ＮＭＩハンドラ内に取り入れられなかったと判定した場合、前記次に受信されるＮＭＩの前記ＮＭＩハンドラへの前記配信を有効にするように前記プロセッサを設定する、
プロセッサ。
【請求項２】
保存されたＮＭＩ指示チェッカユニットをさらに備え、
前記例外ハンドラ復帰命令に応答して、前記例外が、メモリから取り出された前記例外に対応する例外フレームにおいて、前記例外がＮＭＩハンドラ内に取り入れられたかどうかの保存された指示をチェックし、
前記保存された指示に部分的に基づいて前記次に受信されるＮＭＩの前記配信を有効にするように前記プロセッサを設定するかどうかを判定する、
請求項１に記載のプロセッサ。
【請求項３】
前記例外ハンドラ復帰命令に応答して、保存されたＮＭＩ指示チェッカユニットは、前記保存された指示が第１値を有する場合、前記次に受信されるＮＭＩの前記配信を有効にするように前記プロセッサを設定しないことを判定し、または、前記保存された指示が第２の異なる値を有する場合、前記次に受信されるＮＭＩの前記配信を有効にするように前記プロセッサを設定することを判定する、
請求項２に記載のプロセッサ。
【請求項４】
前記保存された指示は、前記プロセッサのフラグレジスタにおける１または複数の相手ビットに対応しない前記例外フレームの位置を有する、
請求項２に記載のプロセッサ。
【請求項５】
前記保存された指示は、前記プロセッサのフラグレジスタにおける１または複数のリザーブされたビットに対応する前記例外フレームの位置を有するが、前記プロセッサは、前記フラグレジスタに前記１または複数のリザーブされたビットをまだリザーブする、
請求項２に記載のプロセッサ。
【請求項６】
前記例外ハンドラ復帰実行ユニットは、
前記例外ハンドラ復帰命令に応答して、前記プロセッサのＮＭＩ無効制御の保存されたコピーであり、ＮＭＩの配信を交互に有効および延期にするように使用される、保存された前記指示としてのＮＭＩ無効制御をチェックし、
前記ＮＭＩ無効制御に基づいて、例外が前記ＮＭＩハンドラ内に取り入れられなかったと判定した場合、前記次に受信されるＮＭＩの前記ＮＭＩハンドラへの前記配信を有効にするように前記プロセッサを設定する、
請求項１に記載のプロセッサ。
【請求項７】
ネスト型ＮＭＩ防止有効制御をチェックするネスト型ＮＭＩ防止有効制御チェッカユニットをさらに備え、
前記ネスト型ＮＭＩ防止有効制御は、前記例外ハンドラ復帰命令に応答して、ネスト型ＮＭＩ防止機構を選択的に有効および無効にし、ネスト型ＮＭＩ防止機構は、有効にされた場合、前記例外が前記ＮＭＩハンドラ内に取り入れられたかどうかに基づいて前記次に受信されたＮＭＩの前記配信の前記有効を条件付けする前記例外ハンドラ復帰実行ユニットを含む、
請求項１から６のうちのいずれか一項に記載のプロセッサ。
【請求項８】
前記例外ハンドラ復帰命令は、ＮＭＩハンドラからの復帰にも使用されるオペコードを有する、請求項１から６のうちのいずれか一項に記載のプロセッサ。
【請求項９】
プロセッサにおいて、例外が、マスク不可割り込み（ＮＭＩ）ハンドラ内に取り入れられたかどうかの指示に基づいて、ＮＭＩハンドラ内に取り入れられなかったと判定された第１例外に対応する例外ハンドラからの復帰に使用されている第１例外ハンドラ復帰命令を受信する段階と、
前記第１例外ハンドラ復帰命令に応答して次に受信されるＮＭＩの配信を有効にするように前記プロセッサを設定する段階と、
前記指示に基づいて、ＮＭＩハンドラ内に取り入れられたと判定された第２例外に対応する例外ハンドラからの復帰に使用されている第２例外ハンドラ復帰命令を受信する段階と、
前記第２例外ハンドラ復帰命令に応答して前記次に受信されるＮＭＩの前記配信を有効にするように前記プロセッサを設定しない段階と
を備える方法。
【請求項１０】
前記第２例外ハンドラ復帰命令に応答して、メモリから取り出された例外フレームにおいて、第２例外がＮＭＩハンドラ内に取り入れられるとの保存された指示をチェックする段階をさらに備える、
請求項９に記載の方法。
【請求項１１】
前記保存された指示をチェックする段階は、前記プロセッサのフラグレジスタの１または複数のビットの相手セットを有しない前記例外フレームの１または複数のビットのセットの前記保存された指示をチェックする段階を有する、
請求項１０に記載の方法。
【請求項１２】
前記保存された指示をチェックする段階は、プロセッサのフラグレジスタの１または複数のリザーブされたビットのセットに対応する前記例外フレームの１または複数のビットのセットの前記保存された指示をチェックする段階を有する、請求項１０に記載の方法。
【請求項１３】
前記第１例外ハンドラ復帰命令に応答して前記次に受信されるＮＭＩの前記配信を有効にするように前記プロセッサを設定する段階は、ＮＭＩ無効制御を変更する段階を有し、前記ＮＭＩ無効制御はまた、ＮＭＩハンドラに配信されるＮＭＩに応答する前記プロセッサによって変更される、
請求項９に記載の方法。
【請求項１４】
請求項９から１３のうちのいずれか一項に記載の方法を実行するための手段を備える装置。
【請求項１５】
機械によって実行される場合、請求項９から１３のうちのいずれか一項に記載の方法を前記機械に実行させる命令を格納する非一時的機械可読記憶媒体を備える製造品。
【請求項１６】
相互接続を備えた電子デバイスであって、請求項１から６のうちのいずれか一項に記載のプロセッサは前記相互接続と結合され、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）は前記相互接続と結合される、電子デバイス。
【請求項１７】
例外ハンドラ復帰命令をデコードするための手段と、
前記例外ハンドラ復帰命令に応答して、例外が、マスク不可割り込み（ＮＭＩ）ハンドラ内に取り入れられたかどうかの指示に基づいて、前記例外ハンドラ復帰命令に対応する例外が、前記ＮＭＩハンドラ内に取り入れられたと判定した場合、次に受信されるＮＭＩの前記ＮＭＩハンドラへの配信を有効にせず、前記例外が、前記ＮＭＩハンドラ内に取り入れられなかったと判定した場合、前記次に受信されるＮＭＩの前記ＮＭＩハンドラへの前記配信を有効にするための手段と、
を含む装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書に説明されている複数の実施形態は、概してコンピュータシステムに関する。特に、本明細書において説明される実施形態は、概して、コンピュータシステムの割り込みおよび例外の操作に関する。
【背景技術】
【０００２】
動作中に、プロセッサおよびコンピュータシステムは、割り込みおよび例外として既知のものに一般に遭遇する。割り込みおよび例外は概して、プロセッサ内、または現在実行中のプログラムまたはタスク内のシステムの様々な場所のいずれかに存在する条件またはイベントを表し、プロセッサの注意を要する。これらの割り込みおよび例外は一般に、プロセッサに現在実行中のプログラムまたはタスクの処理を一時停止させ、制御フローを割り込みまたは例外ハンドラモジュールに転送し、これが割り込みおよび例外を操作する。これはしばしば、割り込みまたは例外のサービス提供または操作と呼ばれる。
【０００３】
割り込みは、しばしばではあるが、常にではなく、所与のプロセッサまたはコアに外部に発生する外的条件またはイべントを参照する。例えば、入力および／または出力（Ｉ／Ｏ）デバイス、タイマー、周辺デバイス、外部プロセッサ、または所与のプロセッサまたはコアの外部にある他の外部ハードウェアは、割り込みを所与のプロセッサまたはコアに配信し得る。別の例として、プロセッサの１つのコアが割り込みをプロセッサの別のコアに配信し得る。しかしながら、割り込みの全てが、外部イべントに起因するわけではない。特定の割り込みは、非同期であるので、コアに内部的に生成され得、割り込みとして配信され得る。特定の割り込みは、非同期ではない。例えば、特定の同期したコア発の割り込みがある。別の例として、割り込みは同期してアサートされ得、見逃されたか、遅延された（例えば、マスクされた）割り込みを再発行または再アサートする。典型的に、割り込みの大多数は非同期であり、外的条件に起因して生成される。
【０００４】
対照的に、例外は典型的には、所与のプロセッサまたはコアの内部に発生する内部条件またはイベントを指す。例えば、例外は一般に、所与のプロセッサまたはコアの実行パイプライン内で実行中の命令から起こる。例外は概して、命令の実行によって通常トリガーされ、関連付けられた命令との特定の関係で通常配信される同期イベントを表す。特定のタイプの同期イベント（例えば、フォールト）は通常、関連付けられた命令を実行する代わりに配信されるが、他のタイプの同期イベント（例えば、トラップ）は通常、その関連付けられた命令を実行した直後に配信される。
【０００５】
割り込みはさらに、マスク可能割り込みと、マスク不可割り込み（ＮＭＩ）とに分類され得る。マスク可能割り込みは、マスクされ得る。例えば、特定のプロセッサは、例えば、フラグ、条件コードまたは状態ビットのようなマスク可能性制御を有し、全てのマスク可能割り込みがグループとしてマスクされるのを許可する。例えば、複数の特定のインテル（登録商標）アーキテクチャ互換プロセッサは、バイナリ・ゼロにクリアされた場合、複数のマスク可能割り込みがソフトウェアに配信されるべく許可しないが、バイナリ１にセットされた場合、複数のマスク可能割り込みがソフトウェアに配信されるべく許可する割り込みフラグ（ＩＦ）を有する。
【０００６】
複数のマスク可能割り込みとは対照的に、複数のマスク不可割り込み（ＮＭＩ）は通常、複数のマスク可能割り込みをマスクするべく用いられるマスク可能性制御（例えば、ＩＦフラグ）によってマスクされることはできない。しかしながら、一度ＮＭＩがソフトウェアに配信されたら、特定のプロセッサは、初期のＮＭＩの操作が完了するまで、ソフトウェアへのさらなるＮＭＩの配信を防止するべく試みるハードウェア条件を起動し得る。例えば、インテル（登録商標）６４およびＩＡ−３２アーキテクチャソフトウェア開発者マニュアル（３Ａ巻、注文番号３２５４６２−０５１ＵＳ、２０１４年６月発行）のセクション６．７および６．７．１に部分的に説明されるには、ＮＭＩの受信時に、プロセッサは、ＮＭＩを操作する責任があるＮＭＩハンドラが実行を完了しており、制御フローを発信プログラムまたはタスクに復帰するまで、ＮＭＩ割り込みを含む他の割り込みは受信されないことを保証するよう試みるべく特定のハードウェア条件を起動し得る。そのようなさなるさらなるＮＭＩの配信の阻止または延期は、ＮＭＩハンドラのネスト型実行を防止しようと試みる。
【図面の簡単な説明】
【０００７】
本発明は、以下の説明および複数の実施形態を図示するために用いられる複数の添付の図面を参照することによって、最も良く理解され得る。
【０００８】
【図１】ネスト型ＮＭＩ防止ユニットの実施形態を有する本発明の複数の実施形態が実装され得るコンピュータシステムの実施形態のブロック図である。
【０００９】
【図２】例外が、例外フレームのＮＭＩハンドラ内に取り入れられたかどうかの指示を保存するべく動作可能であるネスト型ＮＭＩ防止ユニットの実施形態のブロック図である。
【図３】例外がＮＭＩハンドラ内に取り入れられた指示を保存する方法の実施形態のブロックフロー図である。
【図４】例外ハンドラ復帰命令の実施形態を実行するプロセッサの実施形態のブロック図である。
【図５】例外ハンドラ復帰命令の実施形態を実行するプロセッサの方法の実施形態のブロックフロー図である。
【図６】ネスト型ＮＭＩ防止サポートモジュールの実施形態を有するオペレーティングシステムモジュールの実施形態のブロック図である。
【図７Ａ】例示的なインオーダパイプラインの実施形態およびレジスタリネーミングアウトオブオーダ発行／実行パイプラインの実施形態を示すブロック図である。
【図７Ｂ】実行エンジンユニットに結合されているフロントエンドユニットを含み、両方がメモリユニットに結合されているプロセッサコアの実施形態のブロック図である。
【図８Ａ】単一のプロセッサコアの実施形態のブロック図であって、オンダイ相互接続ネットワークへのその接続と、レベル２（Ｌ２）キャッシュのそのローカルサブセットとを伴うブロック図である。
【図８Ｂ】図８Ａのプロセッサコアの一部の拡大図の実施形態のブロック図である。
【図９】１つより多くのコアを有してよく、統合メモリコントローラを有してよく、統合グラフィクスを有してよいプロセッサの実施形態のブロック図である。
【図１０】コンピュータアーキテクチャの第１の実施形態のブロック図である。
【図１１】コンピュータアーキテクチャの第２の実施形態のブロック図である。
【図１２】コンピュータアーキテクチャの第３の実施形態のブロック図である。
【図１３】システムオンチップアーキテクチャの実施形態のブロック図である。
【図１４】本発明の複数の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令コンバータの使用法のブロック図である。
【発明を実施するための形態】
【００１０】
プロセッサでのＮＭＩの操作に伴う１つの課題は、例外からの復帰時にさらなるＮＭＩの配信が早期に有効とされる場合があることである。背景技術にて論じたように、ＮＭＩの受信時に、特定のプロセッサは、ＮＭＩを操作する責任があるＮＭＩハンドラが実行を完了しており、制御フローを発信プログラムまたはタスクに復帰するまで、ＮＭＩ割り込みを含む他の割り込みが、受信されないことを保証するよう試みるべく特定のハードウェア条件を起動し得る。例えば、プロセッサは、ソフトウェア不可視ＮＭＩ無効制御（例えば、ＮＭＩ無効ビット）によって次のＮＭＩの配信を一時的に無効化または延期すること（用語「マスク不可」と一致する）によりＮＭＩの受信に応答し得る。ＮＭＩハンドラが（例えば、ＩＲＥＴ命令または他のＮＭＩハンドラ復帰命令を使用して）復帰した場合、プロセッサは、（例えば、ＮＭＩ無効ビットをクリアすることにより）さらなるＮＭＩの配信を再有効化するべくＮＭＩ無効制御を設定（コンフィギュア）し得る。しかしながら、例外からの復帰も、ＮＭＩ無効制御がさらなるＮＭＩの配信を（例えば、ＮＭＩ無効ビットをクリアすることにより）再有効化するように設定してよい。例えば、ＮＭＩハンドラおよび例外ハンドラの両方は、復帰がハンドラからプログラムまたはタスクに復帰するべく、同じ命令（例えば、ＩＲＥＴ命令または他のハンドラ復帰命令）を用いてよく、この復帰命令は、復帰がＮＭＩまたは例外からかどうかに関わらず（例えば、ＮＭＩ無効ビットをクリアすることにより）さらなるＮＭＩの配信を再有効化するべくＮＭＩ無効制御を設定してよい。たとえ同じ命令がＮＭＩおよび例外ハンドラの両方から復帰するべく使用されなくても、例外ハンドラからの復帰がさらなるＮＭＩの配信を再有効化し得ることは、可能なままである。
【００１１】
結果として、ＮＭＩを操作している間（例えば、ＮＭＩハンドラがＮＭＩを操作している間で、ＮＭＩハンドラが復帰する前）に、例外が取り入れられた場合、それが復帰する場合の例外ハンドラは、次のＮＭＩの配信を早期に再有効化し得る。さらに、例えば、ページフォールト、機械チェックの例外、または他のタイプの例外に起因してなど、ＮＭＩ内に例外が発生することはまれではない。さらなるＮＭＩ配信のそのような早期の再有効化に対する１つの潜在的な問題は、ＮＭＩハンドラが、先に配信されたＮＭＩの操作（例えば、ＮＭＩハンドラのネスト型実行）を完了する前に、第２ＮＭＩがＮＭＩハンドラに配信されることを可能にすることにより、ＮＭＩがネスト化するのを不注意に許可することである。これにより、ＮＭＩの処理は、ネスト型ＮＭＩと十分に互換性がないプロセッサのタスクゲート、割り込みスタックテーブル（ＩＳＴ）または他のフィーチャに依存し得るので、オペレーティングシステムの不安定性および／または潜在的に致命的なエラーを引き起こす傾向があり得る。これにより、プロセッサが、機械チェック例外ＮＭＩ（＃ＭＣ）などのＮＭＩおよび例外が通常同時に存在するように期待される高信頼性環境にて使用される場合に、とりわけ問題となる傾向があり得る。
【００１２】
本明細書中に、例外からの復帰時にマスク不可割り込みの早期有効化を回避する方法、装置、システムおよび命令が開示される。以下の説明において、多くの具体的な詳細が、明らかにされる（例えば、特定のマイクロアーキテクチャ上の詳細、オペレーションシーケンス、命令オペレーションなど）。しかしながら、複数の実施形態は、これらの具体的な詳細がなくても実施し得る。他の例では、周知の回路、構造および技術は、本明細書の理解が不明瞭になることを回避するべく、詳細に示されていない。
【００１３】
図１は、本発明の複数の実施形態が実装され得るコンピュータシステム１００の実施形態のブロック図である。様々な実施形態において、コンピュータシステムは、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレット型コンピュータ、ネットブック、スマートフォン、携帯電話、サーバ、ネットワークデバイス（例えば、ルータ、スイッチなど）、メディアプレーヤ、スマートテレビ、ネットトップ、セットトップボックス、ビデオゲームコントローラ、あるいは当技術分野にて既知の他のタイプの電子デバイスを表してよい。コンピュータシステムは、プロセッサ１０２およびメモリ１３０を含む。プロセッサおよびメモリは結合されるか、別のやり方で、従来の結合機構１２５によって（例えば、１または複数のバス、ハブ、メモリコントローラ、チップセット構成要素等を介して）、互いに通信する。 
【００１４】
いくつかの実施形態において、プロセッサ１０２は、汎用プロセッサ（例えば、デスクトップ、ラップトップ、または複数の他のコンピュータにおいて使用されるタイプの汎用マイクロプロセッサまたは中央処理ユニット（ＣＰＵ））であり得る。あるいは、プロセッサは、専用プロセッサであり得る。好適な専用プロセッサの例は、限定されるものではないが、ネットワークプロセッサ、通信プロセッサ、クリプトグラフィックプロセッサ、グラフィクスプロセッサ、コプロセッサ、埋め込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）およびコントローラ(例えば、マイクロコントローラ)を含む。プロセッサは、様々な複合命令セットコンピューティング（ＣＩＳＣ）アーキテクチャ、縮小命令セットコンピューティング（ＲＩＳＣ）アーキテクチャ、超長命令語（ＶＬＩＷ）アーキテクチャ、ハイブリッドアーキテクチャ、他のタイプのアーキテクチャのうちのいずれか、または、異なるアーキテクチャの組み合わせ（例えば、異なるコアは異なるアーキテクチャを有し得る）を有し得る。 
【００１５】
メモリ１３０は、１または複数の異なるメモリデバイスおよび／または１または複数の異なるタイプのメモリを含み得る。例えば、いくつかの実施形態において、メモリは、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）を含み得るが、複数の他の実施形態において、メモリは、フラッシュメモリを含み得る。メモリは、オペレーティングシステム（ＯＳ）モジュール１３２を含む。単一のＯＳモジュールが示されるが、複数の他の実施形態は、２またはそれよりも多いＯＳモジュールを任意で含み得、および／または、仮想機械マネージャ（ＶＭＭ）モジュール、ハイパーバイザモジュール等を任意で含み得る。ＯＳモジュールは、ＮＭＩハンドラモジュール１３４および例外ハンドラモジュール１３６を含む。メモリはまた、例えば、ワード処理アプリケーション、表計算アプリケーション、図面アプリケーション、電子メールアプリケーションなどのような１または複数のアプリケーションモジュール１４２を含む。メモリはまた、アクティブルーチンが実行を完了する場合にアクティブルーチンが制御を復帰するべきポイントのトラックを保持するのを助けるべく、コンピュータプログラムのアクティブルーチンについての情報を格納するように利用され得る１または複数のスタック構造１４４を有する。スタック構造はまた、時には、呼び出しスタック構造、実行スタック構造、起動時スタック構造、機械スタック構造、または単にスタックと呼ばれる。 
【００１６】
動作中に、実行中のソフトウェア１０４は、プロセッサ上で実行し得る。実行中のソフトウェアは、メモリ（例えば、ＯＳモジュールおよび／またはアプリケーションモジュール）からロードされ、実行パイプライン１０６（例えば、デコーダ、実行ユニットなど）によって実行されるプロセッサの命令セットのマクロ命令または命令を含み得る。実行中のソフトウェアは、例えば、フラグレジスタ、プログラムカウンタ、コードセグメントセレクタ、汎用レジスタ、パック型データレジスタ、他のアーキテクチャレジスタなどの関連するアーキテクチャ状態１０８を利用し得る。
【００１７】
動作中、プロセッサは、マスク不可割り込み（ＮＭＩ）に遭遇し得る。ＮＭＩは、複数の異なる実施形態では異なる方法で遭遇され得る。いくつかの実施形態において、プロセッサは、ＮＭＩに対応するイべント１２１を受信するべく割り込みおよび例外ユニット１１０を含み得る。例えば、割り込みおよび例外ユニット１１０は、様々な内部および／または外部ソースからのイべント１２１を収集し、イベントを割り込みまたは例外（例えば、ＮＭＩ、非ＮＭＩ割り込み、例外、システム管理割り込み（ＳＭＩ）など）にマッピングするプログラム可能割り込みコントローラ（例えば、ローカル進化型プログラム可能割り込みコントローラ（ＬＡＰＩＣ））と、割り込みおよび例外を受信および処理する割り込みおよび／または例外ユニットを含み得るが、本発明の範囲はそのように限定されない。別の例として、ＮＭＩ１２０は、プロセッサの１または複数のピン１１６上の外部構成要素１２４（例えば、入力／出力デバイス、周辺デバイス、別のプロセッサなど）からプロセッサに受信され得る。いくつかの場合、ＮＭＩ１２０の受信専用のピンを設けてもよい。ピンで受信されたＮＭＩ１２０は、割り込みおよび例外ユニット１１０に提供され得る。さらに別の例として、いくつかの場合に、割り込みおよび例外ユニット１１０（例えば、プログラム可能割り込みコントローラ）は任意でタイマ（図示せず）を有し、タイマーは、デバッグ作業、プロファイリングまたは別のやり方でＮＭＩを生成するように使用され得る。複数の他のプロセッサは、説明された割り込みおよび例外ユニット１１０に加えて様々な他の既知の割り込みおよび例外操作機能を有し得る。プロセッサは、ＮＭＩハンドラモジュール１３４に呼び出し１２６をすることにより、これらの様々な異なる方法で受信されたＮＭＩの操作を開始し得る。例えば、プロセッサは、ＮＭＩに対応する割り込みベクトルを見つけるべくプロセッサの割り込みおよび／または例外記述子テーブル構造または他の構造を参照し得、見つけられた割り込みベクトルに対応するＮＭＩハンドラを次に呼び出し得る。インテル（登録商標）アーキテクチャの特定の場合において、ＮＭＩは、割り込みベクトル２に割り当てられる。ＮＭＩハンドラモジュールは、ＮＭＩを操作するか、これをサービスし始め得る。 
【００１８】
プロセッサはまた、ネスト型ＮＭＩ防止ユニット１４９を有する。ネスト型ＮＭＩ防止ユニット（例えば、ＮＭＩ無効制御構成ユニット１１２）は、ＮＭＩ（例えば、前述のソースのうちのいずれかから）が発生した指示１２１を受信し得る。ＮＭＩ１２１の指示に応答して、プロセッサおよび／またはネスト型ＮＭＩ防止ユニットは、さらなるＮＭＩの配信を一時的に無効化または延期することによりネスト型ＮＭＩを防止し得る。いくつかの実施形態において、ネスト型ＮＭＩ防止ユニットは、ＮＭＩ無効制御１１４を有し得る。ＮＭＩ無効制御は、さらなるＮＭＩの配信を交互に有効化または延期するべく、ビット、ビットセット、モードまたはハードウェア条件を広く表し得る。例えば、ＮＭＩ無効ビットまたはビットセットは、さらなるＮＭＩの配信を有効にするべく第１値（例えば、ビットはバイナリ・ゼロにクリアされ得る）を有し得、あるいは、さらなるＮＭＩの配信を一時的に無効化または延期するべく第２の異なる値（例えば、ビットはバイナリ１にセットされ得る）を有し得る。いくつかの実施形態において、ネスト型ＮＭＩ防止ユニットは、ＮＭＩ無効制御構成ユニット１１２を有し、さらなるＮＭＩの配信を交互に有効化または延期するべくＮＭＩ無効制御１１４を設定し得る。ＮＭＩ１２１の指示に応答して、ＮＭＩ無効制御構成ユニット１１２は、さらなるＮＭＩの配信を一時的に無効化または延期するべく、ＮＭＩ無効制御１１４を設定するように動作し得る（例えば、単一ビットをバイナリ１にセットし得る）。代表的には、ＮＭＩ無効制御は、次のＮＭＩの配信を一時的に阻止または無効化にするように設定される場合、割り込みおよび例外ユニット１１０（またはそのロジックまたは回路）に次のＮＭＩの配信を一時的に阻止または延期させるか、割り込みおよび例外ユニット１１０を設定し得る。単一ビットで十分であり得るが、２またはより多くのビットが任意で使用され得ることと、１つのビットまたは２またはより多くのビットの任意の所望の値が、有効および無効にされた状態を表すべく任意の所望される慣例に従って使用され得ることとは理解されるべきである。図示例では、ＮＭＩ無効制御構成ユニットおよびＮＭＩ無効制御は、別個のユニットであるように示されているが、複数の他の実施形態において、それらは例示されたユニット（例えば、割り込みおよび例外ユニット１１０において）のうちの１つに任意で含まれ得る。 
【００１９】
ＮＭＩ（例えば、ＮＭＩ１２０）がＮＭＩハンドラモジュール１３４によって操作またはサービスされている間に、例外１１８が発生し得る。いくつかの実施形態において、実行パイプライン１０６が実行中のソフトウェア１０４の処理命令である間に、例外は発生し得る。好適なタイプの例外の例は、フォールト、トラップおよびアボートを含む。例外がフォールト、トラップまたはアボートと分類されるかどうかは、１つの実装から別の実装へと変わり得、および／または、例外が発生する異なる状況に基づいて変わり得る。多くの場合、フォールトおよびトラップは、例外を引き起こしたプログラムまたはタスクの実行が通常、プログラムまたはタスクの連続性の損失なく再開され得るフォールトおよびトラップの例外に関係する。多くの場合、フォールトは、通常修正されることができるフォールトの例外を表す。異なるタイプのフォールトの例は、限定されるものではないが、ページフォールト、一般的な保護フォールト、セグメント不在、スタックセグメントフォールト、分割エラー、無効または未定義のオペコード、数値計算コプロセッサ利用不可、数値計算フォールト、アライメントチェックフォールト、ＳＩＭＤ浮動小数点例外フォールト、仮想化例外フォールトなどを含む。多くの場合、トラップは、トラップを引き起こした命令が完了した後、配信されるトラップの例外を表す。異なるタイプのトラップの例は、限定されるものではないが、ブレイクポイントトランプおよびオーバーフロートラップを含む。フォールトおよびトラップとは対照的に、多くの場合、アボートは、例外を引き起こしたプログラムまたはタスクが、プログラムまたはタスクの連続性の損失なく再開されることをしばしば許可しないそれらの例外を表す。多くの場合、アボートは、それから回復するのが困難である異常なイベントを指す。異なるタイプのアボートの例は、限定されるものではないが、二重フォールトアボートおよびマシンチェックアボートを含む。 
【００２０】
例外は、割り込みおよび例外ユニット１１０に提供され得る。割り込みおよび例外ユニット、または、例外の受信に応答したプロセッサは、例外ハンドラモジュール１３６に呼び出し１２８をすることにより例外の操作を開始し得る。例えば、プロセッサは、例外に対応するベクトルを見つけるべくプロセッサの割り込みおよび／または例外記述子テーブル構造または他の構造を参照し得、次に見つけられたベクトルに対応する例外ハンドラを呼び出し得る。 
【００２１】
ネスト型ＮＭＩ防止ユニット１４９は、ＮＭＩ判定ユニット１３８およびＮＭＩ保存ユニット１４０の実施形態を有する。これらの構成要素の各々は、ハードウェア（例えば、集積回路）、ファームウェア（例えば、不揮発性ストレージ上に格納されたマイクロコードまたは複数の他の命令またはコード）、あるいはその組み合わせにて実装され得る。ＮＭＩ判定ユニットは、例外１１８がＮＭＩ内に取り入れられた（例えば、ＮＭＩハンドラ１３４の実行中）かどうかを判定するように動作し得る。いくつかの実施形態において、ＮＭＩ判定ユニットは、この判定をするべく、ＮＭＩ無効制御１１４と結合され、これをチェックするように動作し得る。ＮＭＩ無効制御が、さらなるＮＭＩの配信が一時的に無効化または延期されるべきであることを示す場合、ＮＭＩ判定ユニットは、例外１１８がＮＭＩ（例えば、ＮＭＩ１２０）内に取り入れられたことを推定し得る。逆に、ＮＭＩ無効制御１１４が、さらなるＮＭＩの配信が延期されないことを示す場合、ＮＭＩ判定ユニットは、例外１１８がＮＭＩ内に取り入れられなかったことを推定し得る。本例において、例外１１８は、ＮＭＩ内に取り入れられたので（例えば、ＮＭＩハンドラモジュールが呼び出された後であるが、ＮＭＩの操作を完了し、割り込まれたプログラムまたはタスクに復帰することが可能であった前）、ＮＭＩ判定ユニット１３８は、例外がＮＭＩ内（例えば、ＮＭＩハンドラ実行内）に取り入れられたことを判定する。
【００２２】
図１を再度参照すると、ネスト型ＮＭＩ防止ユニット１４９はまた、ＮＭＩ保存ユニット１４０を有する。ＮＭＩ保存ユニットは、ＮＭＩ判定ユニット１３８と結合されるか、別のやり方でそれと通信し得る。ＮＭＩ保存ユニットは、例外がＮＭＩ内に取り入れられた場合、例外がＮＭＩ内に取り入れられた指示を格納するか、別のやり方で保存するべく動作し得る。いくつかの実施形態において、１ビットまたはビットセットは、例外がＮＭＩ内に取り入れられたことを示すべく、第１値（例えば、単一ビットがバイナリ１にセットされるか、（代わりに、バイナリ・ゼロにクリアされ）得る）を有し得、あるいは、例外がＮＭＩ内に取り入れられなかったことを示すべく、第２の異なる値（例えば、単一ビットがバイナリ・ゼロにクリアされるか、（代わりに、バイナリ１にセットされ得る）を有し得る。例外がＮＭＩ内に取り入れられたか、取り入れられなかったとの指示を保存することはまた、さらなるＮＭＩの配信が延期されるべきか、延期されるべきではないとの指示を保存するか、および／または、ＮＭＩ無効制御１１４の値を保存するものと見なされてもよい。例えば、例外がＮＭＩ内に取り入れられた場合、例外はＮＭＩ無効制御の第１値に対応し得るが、例外がＮＭＩ内に取り入れられなかった場合、例外はＮＭＩ無効制御の第２の、異なる値に対応し得る。 
【００２３】
指示は、異なる実施形態の様々な異なる場所に格納または保存され得る。いくつかの実施形態において、指示は、メモリに（例えば、スタック構造（例えば、スタック構造１４４）に）格納されることになる例外フレームに格納されるか、別のやり方で保存され得る。図示されるように、いくつかの実施形態において、ＮＭＩ保存ユニット１４０は任意で、例外フレーム生成ユニット１５０の一部であり得る。あるいは、ＮＭＩ保存ユニットは任意で、例外フレーム生成ユニットから分離され得るが、それと結合され得、別のやり方で例外フレーム生成ユニットと通信し得る。スタック構造上の例外フレームの指示を格納する１つの利点は、スタック構造が、利用され得るネスト化用のネイティブ組込みサポートを既に有し得ることである。別のオプションとして、複数の他の実施形態において、指示は、タスク状態セグメント（ＴＳＳ）または類似の構造に（例えば、例外フレームまたは他のデータ構造に）格納または保存され得る。ＴＳＳは、タスクについての情報を格納するべく使用され、タスク管理用のオペレーティングシステムモジュールによって使用される構造を表し得る。例えば、ＯＳモジュールは、タスク切り替えによってＴＳＳについての情報を格納し得る。また、保存された指示、ＴＳＳに格納され得る他の情報は、例えば、プロセッサレジスタ状態、Ｉ／Ｏポート許可、内部レベルスタックポインタ、前のＴＳＳリンクなどを含む。さらなる複数の実施形態において、指示は、例外ハンドラ内か、それにアクセス可能なデータ構造（例えば、メモリ１３０のある場所内）に格納されるか、別のやり方で保存され得る。そのような実施形態において、指示はまた、例外フレームおよびその関連内容（例えば、保存されたアーキテクチャ状態）と関連することを可能にするのに十分な情報を含み得る。さらなる他の実施形態において、指示は、プロセッサと例外ハンドラモジュールとの間の情報を通過するスタック上の例外フレームの代わり、および／またはそれに加えて使用される例外状態と潜在的に一緒に、プロセッサレジスタに格納されるか、別のやり方で保存され得る。
【００２４】
有利には、さらに以下に説明されるように、例外がＮＭＩ内に取り入れられたか否かの指示を保存することは、例外ハンドラからの復帰時に、さらなるＮＭＩの迅速な配信を再有効化するか否かを条件付きで判定するべく使用され得る。例えば、プロセッサによって実行されている場合の例外ハンドラ復帰命令は、例外がＮＭＩ操作中に取り入れられなかった場合、さらなるＮＭＩの即時配信を再有効化し得るが、例外がＮＭＩ操作中に取り入れられた場合、さらなるＮＭＩの配信を再有効化することを控え得る。そのような条件下でさらなるＮＭＩの配信を再有効化することを控えることにより、ＮＭＩのネスト化およびそれから起こり得る関連した問題を防止するべく役立ち得る。 
【００２５】
いくつかの実施形態において、ＮＭＩ配信の早期有効化の防止に役立つ例外ハンドラモジュール１３６の前述の機能は、常に有効にされるか、オンにされ得る。複数の他の実施形態において、この機能は、例えば、オペレーティングシステムまたは他の特権のあるおよび／またはシステムレベルのソフトウェアによって、有効かつ無効にされるように設定され得る。例えば、プロセッサは任意で、ネスト型ＮＭＩ防止有効制御１２２を有し得る。ネスト型ＮＭＩ防止有効制御は、例えば、ネスト型ＮＭＩ防止機能／機構（例えば、例外ハンドラモジュールの前述の機能を含む）を有効にするべく、第１値（例えば、単一ビットがバイナリ１にセットされるか、（代わりに、バイナリ・ゼロにクリアされ）得る）を有し得る１または複数のビット、または、ネスト型ＮＭＩ防止機能／機構を無効にするべく、第２の異なる値（例えば、単一ビットがバイナリ・ゼロにクリアされるか、（代わりに、バイナリ１にセットされ得る））を有し得る１または複数のビットを含み得る。そのようにして、システムは、特定の実装向けに所望されるこの機能／機構を用いるか、用いないかのいずれかとなり得る。
【００２６】
図２は、例外が、（例えば、例外フレーム２５４の）ＮＭＩハンドラ内に取り入れられたか否かの指示２５６を保存することにより、ネスト型ＮＭＩの防止を助けるべく動作可能であるネスト型ＮＭＩ防止ユニット２４９の実施形態のブロック図である。この実施形態において、例外がＮＭＩハンドラ内に取り入れたかどうかの指示２５６は、保存されたＮＭＩ無効制御値２５６として実装される。 
【００２７】
ネスト型ＮＭＩ防止ユニット２４９は、ＮＭＩ無効制御値を判定するべく動作し得るＮＭＩ無効制御判定ユニット２４０を含む。これは、同様に、または、代わりに、例外ハンドラモジュールへの呼び出しに対応する例外がＮＭＩハンドラ内に取り入れられたか否かを判定するように見なされ得る。ＮＭＩ無効制御判定ユニットは、ＮＭＩ無効制御２１４（例えば、ＮＭＩ無効制御１１４）と結合するか、別のやり方で通信し得る。 
【００２８】
ネスト型ＮＭＩ防止ユニット２４９はまた、ＮＭＩ無効制御保存ユニット２４０を含む。ＮＭＩ無効制御保存ユニットは、現在のＮＭＩ無効制御値を受信するべく、ＮＭＩ無効制御判定ユニットと結合するか、別のやり方でそれと通信する。 
【００２９】
図示されるように、いくつかの実施形態において、ＮＭＩ無効制御保存ユニットは任意で、例外フレーム生成ユニット２５０の一部であり得る。例外フレーム生成ユニットは、例外用の例外フレーム２５４を生成するべく動作し、メモリの例外フレームを格納する（例えば、例外フレームをスタック構造２４４の上にプッシュするか、別のやり方で例外フレームを格納する）。例外フレームは、例外フレームに従来見出されたタイプのアーキテクチャ状態２０９を含み得る。例えば、このアーキテクチャ状態は、復帰命令ポインタ、復帰コードセグメントセレクタおよびプロセッサフラグのコピーを含み得る。そのような実施形態において、ＮＭＩ無効制御保存ユニットは、保存されたＮＭＩ無効制御２５６として例外フレームに格納されるか、別のやり方で例外フレームに含まれるＮＭＩ無効制御値２１４の保存されたコピーを有するべく動作し得る。あるいは、保存されたＮＭＩ無効制御は、前述のように、プロセッサレジスタに保存され得る。
【００３０】
１つの具体例として、ＮＭＩ無効制御値が、さらなるＮＭＩの配信が例外ハンドラへの加入時に現在既に延期されていることを示すバイナリ１の値を有する単一ビットである場合、保存されたＮＭＩ無効制御はまた、例外がＮＭＩハンドラに取り入れられたこと示す、および／または例外ハンドラへのエントリ時に、ＮＭＩが現在既に延期されていることを示すバイナリ１の値を有する単一ビットを含み得る。前述のように、１または複数のビット用のどの特定の値が使用されるかは、主として採用された慣例の事項であり、１または複数のビット用の特定の値が採用された慣例に従って互いに対応するロジックによって理解される限り、それらはプロセッサのＮＭＩ無効制御２１４および保存されたＮＭＩ無効制御用に採用された同じ慣例であり得るが、その必要はない。
【００３１】
いくつかの実施形態において、保存されたＮＭＩ無効制御２５６は、例外フレーム２５４の１または複数のビットを表し得る。いくつかの実施形態において、これらの１または複数のビットは、ある他の用途のために既に使用済みではない例外フレームの任意の前に使用されていない（例えば、アーキテクチャ状態２０９に対して既に使用済みではない）ビットであり得る。様々な前に使用されていないビットは任意で、使用され得る。いくつかの実施形態において、保存されたＮＭＩ無効制御２５６は、プロセッサの実際のアーキテクチャ状態での１または複数のビットの相手セットを有しない場合がある（例えば、プロセッサのフラグレジスタの１または複数のビットの相手セットがない場合がある）。追加フラグをプロセッサのフラグレジスタに加えることは（例えば、互換性の理由で）あまり所望されない。フラグレジスタの１または複数のビットの相手セットを有しない例外フレームの１または複数のビットのセットを使用することにより、互換性の困難さを課すことなく、ＮＭＩ無効制御２１４の保存を可能にし得る。いくつかの実施形態において、保存されたＮＭＩ無効制御２５６用に使用される例外フレームの１または複数のビットのセットは、プロセッサのフラグレジスタでのリザーブされたビットではない場合がある。他の実施形態において、保存されたＮＭＩ無効制御２５６用に使用される例外フレームの１または複数のビットのセットは、プロセッサのフラグレジスタでのリザーブされたビットに対応する例外フレームの位置を有し得るが、いくつかの実施形態において、プロセッサは、実際のフラグレジスタのこれらの相手ビットをまだリザーブするか、用いない場合がある。あるいは、１または複数のビットは、プロセッサのフラグレジスタに任意で追加され、所望ならば、例外フレーム２５４のアーキテクチャ状態２０９の間の相手ビットを有し得る。本発明の実施形態は、例外がＮＭＩおよび／または保存されたＮＭＩ無効制御内に取り入れられたか否かの保存された指示を有する例外フレームデータ構造に関する。
【００３２】
いくつかの実施形態において、ネスト型ＮＭＩ防止ユニット２４９は任意で、ネスト型ＮＭＩ防止有効制御チェッカユニット２５２を有し得る。ネスト型ＮＭＩ防止有効制御チェッカユニットは、任意のネスト型ＮＭＩ防止有効制御２２２（例えば、任意のネスト型ＮＭＩ防止有効制御１２２）と結合され得、それをチェックし得、ネスト型ＮＭＩ防止および／またはＮＭＩ無効制御の保存が現在有効とされているか、無効とされているか否かを判定する。任意のネスト型ＮＭＩ防止有効制御チェッカユニットは、ＮＭＩ無効制御保存ユニット２４０と結合するか、別のやり方でこれと通信する。ネスト型ＮＭＩ防止および／またはＮＭＩ無効制御の保存が現在無効にされている場合、チェッカモジュール２５２は、ＮＭＩ無効制御保存ユニットに、例外フレームの保存されたＮＭＩ無効制御を含まないことをシグナリングし得、または、別のやり方で、ＮＭＩ無効制御を含むことをＮＭＩ無効制御保存ユニットにシグナリングし得る。
【００３３】
図３は、例外がＮＭＩハンドラ内で取り入れられた指示を保存する方法３５７の実施形態のブロックフロー図である。いくつかの実施形態において、方法３５７は、図１のネスト型ＮＭＩ防止ユニット１４９および／または図２のネスト型ＮＭＩ防止ユニット２４９によって、および／またはその内部で実行され得る。ネスト型ＮＭＩ防止ユニット１４９、２４９用の本明細書中に説明される構成要素、フィーチャ、特定の任意の詳細はまた、任意で、方法３５７に適用される。あるいは、方法３５７は、同様または異なるユニットまたは他の装置によって、および／またはその内部で実行され得る。さらにユニット１４９、２４９は、方法３５７と同じ、類似、または異なる方法を実行し得る。
【００３４】
方法は、ブロック３５８で、例外がＮＭＩハンドラ内に取り入れられたことを判定する工程を含む。いくつかの実施形態において、この判定は、プロセッサのＮＭＩ無効制御をチェックすることによりなされ得る。いくつかの実施形態において、チェックされるＮＭＩ無効制御は、プロセッサがＮＭＩの受信時のさらなるＮＭＩの配信を延期するように設定する特性を有し得る。
【００３５】
方法は、ブロック３５９で、例外は、ＮＭＩハンドラ内に取り入れられた指示を保存する工程を含む。いくつかの実施形態において、指示は、メモリに格納される（例えば、スタック構造の上に押される）ことになる例外フレームに保存され得る。いくつかの実施形態において、指示は、プロセッサのフラグレジスタの１または複数のビットの相手セットを有しない例外フレームの１または複数のビットのセットに保存され得る。いくつかの実施形態において、指示は、プロセッサのフラグレジスタの１または複数のリザーブされたビットのセットに対応する例外フレームの１または複数のビットのセットに保存され得るが、プロセッサは、実際にそれらを使用する代わりにこれらのビットの使用をまだリザーブし得る。いくつかの実施形態において、指示は、プロセッサのＮＭＩ無効制御のＮＭＩ無効制御値であり得る。
【００３６】
図４は、例外ハンドラ復帰命令４６０の実施形態を実行するプロセッサの実施形態４０２の実施形態のブロック図である。プロセッサは、前述のタイプのプロセッサ（例えば、汎用プロセッサまたは専用プロセッサ）のうちのいずれであってもよい。動作中に、プロセッサは、例外ハンドラ復帰命令を受信し得る。例えば、命令は、メモリから相互接続によって受信され得る。命令は、マクロ命令、アセンブリ言語命令、機械コード命令、またはプロセッサの命令セットの他の命令もしくは制御信号を表してよい。いくつかの実施形態において、命令は、例外ハンドラモジュールの終わりに含まれるべきであり、制御フローを例外ハンドラモジュールから例外によって割り込まれたプログラムまたはタスクに復帰するように使用されるべきである命令を表し得る。命令は、本明細書中で例外ハンドラ復帰命令と呼ばれるが、それはまた任意で、割り込みハンドラ復帰命令（例えば、例外および割り込みの両方から復帰するために用いられる命令）であり得る。 
【００３７】
プロセッサは、デコードユニットまたはデコーダ４６２を含む。デコードユニットは、例外ハンドラ復帰命令４６０を受信およびデコードし得る。デコードユニットは、１または複数の比較的低レベルの命令または制御信号（例えば、１または複数のマイクロ命令、マイクロオペレーション、マイクロコードエントリポイント、デコードされた命令または制御信号など）を出力し得、これらの命令または制御信号は、比較的高レベルの例外ハンドラ復帰命令を反映し、表し、および／またはそれから導出される。いくつかの実施形態において、デコードユニットは、命令を受信する１または複数の入力構造（例えば、ポート、相互接続、インターフェース）と、命令を認識およびデコードするべくそれと結合される命令認識およびデコードロジックと、低レベルの命令または制御信号を出力するべくそれと結合される１または複数の出力構造（例えば、ポート、相互接続、インターフェース）とを含み得る。デコードユニットは、マイクロコードリードオンリーメモリ（ＲＯＭ）、ルックアップテーブル、ハードウェア実装、プログラム可能ロジックアレイ（ＰＬＡ）、および当技術分野にて既知のデコードユニットを実装するために用いられる他の機構を含むが、これらに限定されるものではなく、様々な異なる機構を用いて実装され得る。 
【００３８】
例外ハンドラ復帰実行ユニット４６４は、デコードユニット４６２と結合される。例外ハンドラ復帰実行ユニットは、例外ハンドラ復帰命令を表す、および／またはこれから導出される１または複数のデコードされた、もしくは別のやり方で変換された命令または制御信号を受信し得る。例外ハンドラ復帰実行ユニットはまた、保存されたＮＭＩ無効制御４５６（例えば、命令は、保存されたＮＭＩ無効制御４５６を有する例外フレーム４５４にスタックからポップされるか、別のやり方でプロセッサ中に受信させられ得）を受信するか、別のやり方で保存されたＮＭＩ無効制御４５６にアクセスし得る。例外ハンドラ復帰実行ユニットは、任意のネスト型ＮＭＩ防止有効制御チェッカユニット４６６を有する。ネスト型ＮＭＩ防止有効制御チェッカユニットは、プロセッサのネスト型ＮＭＩ防止有効制御４２２と結合され、ネスト型ＮＭＩ防止が有効化または無効化されるかどうかを判定するべくチェックし得る。ネスト型ＮＭＩ防止が無効にされた場合、例外ハンドラ復帰実行ユニットは、いくつかの実施形態において、ＮＭＩ無効制御４１２を保存されたＮＭＩ無効制御４５６に関わらず、ＮＭＩの配信を有効化するように設定し得る。
【００３９】
逆に、ネスト型ＮＭＩ防止が有効にされた場合、例外ハンドラ復帰実行ユニット４６４（例えば、ＮＭＩ無効制御構成ユニット４１２）は、いくつかの実施形態において、保存されたＮＭＩ無効制御４５６に依存または基づいてさらなるＮＭＩの配信を有効化または延期するようにＮＭＩ無効制御４１４を設定し得る。いくつかの実施形態において、保存されたＮＭＩ無効制御チェッカユニット４６８は、保存されたＮＭＩ無効制御をチェックまたは検査し得る。いくつかの実施形態において、保存されたＮＭＩ無効制御は、ポップされるか、別のやり方で取り出される例外フレーム４５４中にあり得、チェッカユニットは、例外フレームをチェックまたは検査し得る。あるいは、保存されたＮＭＩ無効制御は、（例えば、取り出された例外フレームから）既に引き出され、実行ユニットに提供されている場合がある。保存されたＮＭＩ無効制御は、例外ハンドラ復帰命令が復帰するべく使用された例外ハンドラに対応する例外が、ＮＭＩハンドラ内に取り入れられたか否かを示し得る。ＮＭＩ無効制御構成ユニットは、保存されたＮＭＩ無効制御チェッカユニットと結合される。ＮＭＩ無効制御構成ユニットは、ＮＭＩ無効制御４１４を設定しない例外ハンドラ復帰命令（例えば、それからデコードされた１または複数の命令または制御信号に応答して）に応答して、および／またはそれの結果として動作し、例外がＮＭＩハンドラ内に取り入れられた場合、および／または保存されたＮＭＩ無効制御４５６が、さらなるＮＭＩの配信が保存の時点で一時的に無効化または延期されたことを示す場合、次に受信されるＮＭＩの配信を有効にする。
【００４０】
逆に、ＮＭＩ無効制御構成ユニット４１２は、ＮＭＩ無効制御４１４を設定する例外ハンドラ復帰命令４６０に応答して、および／またはそれの結果として動作し、例外がＮＭＩハンドラ内に取り入れられなかった場合、および／または保存されたＮＭＩ無効制御４５６が、さらなるＮＭＩの配信が保存の時点で有効にされたことを示す場合、次に受信されるＮＭＩの配信を有効にする。従って、例外ハンドラ復帰実行ユニットは、例外ハンドラ復帰命令に応答して、保存されたＮＭＩ無効制御が、例外がＮＭＩ内に受信されたか、受信されなかったことを示すかどうかに基づいてさらなるＮＭＩの配信を有効にするか、有効にしないかのいずれかにし得る。例えば、保存されたＮＭＩ無効制御が第１値を有する場合、さらなるＮＭＩの配信が有効にされ得るが、保存されたＮＭＩ無効制御が第２の異なる値を有する場合、さらなるＮＭＩの配信が有効にされ得ず、それゆえまだ延期され得る。例外復帰命令に応答して、実行ユニットはまた、他の従来のオペレーション、例えば、例外フレームからプロセッサのアーキテクチャ状態へのアーキテクチャ状態を復元すること（例えば、例外フレームからの値でプロセッサのプログラムカウンタをロードすること、プロセッサのフラグレジスタを例外フレームからの値でロードすること、など）のようなオペレーションを実行し得る。
【００４１】
ＮＭＩ無効制御構成ユニット４１２および／またはプロセッサは、特有または特定のロジック（例えば、トランジスタ、集積回路、またはファームウェア（例えば、不揮発性メモリに格納される命令）および／またはソフトウェアと潜在的に組み合わされる他のハードウェア）を含み、ロジックは、例外ハンドラ復帰命令に応答して、および／またはそれの結果として（例えば、それからデコードされた１または複数の命令または制御信号に応答して）例外ハンドラ復帰命令を実行、および／またはＮＭＩ無効制御を設定するよう動作可能である。いくつかの実施形態において、ＮＭＩ無効制御構成ユニットは、デコードされた命令および関連データを受信する１または複数の入力構造（例えば、ポート、相互接続、インターフェース）と、それと結合して、デコードされた命令および関連データを受信および処理する回路またはロジック（例えば、ステートマシーン）と、ＮＭＩ無効制御を設定するべく出力信号を提供する１または複数の出力構造（例えば、ポート、相互接続、インターフェース）とを含み得る。
【００４２】
有利には、例外がＮＭＩ操作内に取り入れられたか否かに基づいてさらなるＮＭＩの配信を条件付きで有効にするそのような機能は、ＮＭＩのネスト化および本明細書の他の場所に説明される関連した潜在的な問題を回避するのに役立ち得る。さらに、オペレーティングシステムまたは他の特権のあるソフトウェアは、ＮＭＩ無効ビットを直接セットする必要はなく、これは原形がそこなわれたソフトウェアの場合には可能性のあるリスクを負わせる場合がある。むしろ、さらなるＮＭＩの配信は、プロセッサのロジックがさらなるＮＭＩを既に無効にしている場合、無効のままとされるように許可され得るにすぎない。
【００４３】
説明の不明瞭化を回避すべく、比較的に簡単なプロセッサが図示および説明されている。しかしながら、プロセッサが、任意で他の周知のプロセッサ構成要素を含んでもよい。そのような構成要素の可能な例は、限定されるものではないが、汎用レジスタ、状態レジスタ（時に、フラグレジスタと呼ばれる）、プログラムカウンタレジスタ、セグメントレジスタ、システム制御レジスタ、命令フェッチユニット、プレフェッチバッファ、キャッシュの１または複数レベル（例えば、レベル１（Ｌ１）命令キャッシュ、Ｌ１データキャッシュおよびＬ２データ／命令キャッシュ）、命令トランスレーションルックアサイドバッファ（ＴＬＢ）、データＴＬＢ、分岐予測ユニット、アウトオブオーダ実行ユニット（例えば、命令スケジューラユニット、レジスタリネーミングおよび／または割り当てユニット、命令ディスパッチユニット、リオーダバッファ（ＲＯＢ）、リザベーションステーション、メモリオーダバッファ、リタイアメントユニットなど）、バスインターフェースユニット、アドレス生成ユニット、デバッグユニット、パフォーマンスモニタユニット、パワー管理ユニット、外部ピン、プロセッサに含まれる他の構成要素、およびその様々な組み合わせを含む。そのような構成要素は、様々な異なる適切組み合わせおよび／または当技術分野に既知の構成にて一緒に結合され得る。実施形態は、そのような任意の既知の組み合わせまたは構成に限定されるものではない。さらに、実施形態は、複数のコアを有するプロセッサに含まれ得、複数のコアのうちの少なくとも１つは、本明細書中に説明される例外ハンドラ復帰命令の実施形態を実行するように動作する。 
【００４４】
図５は、例外ハンドラ復帰命令の実施形態を実行するプロセッサの方法５９５の実施形態のブロックフロー図である。いくつかの実施形態において、方法５９５は、図１のプロセッサ１０２および／または図４のプロセッサ４０２によって、および／またはその内部で実行され得る。プロセッサ１０２、４０２用に本明細書に説明されている構成要素、フィーチャ、および特定の任意の詳細はまた方法５９５に任意で適用される。あるいは、方法５９５は、同様または異なるプロセッサまたは装置によって、および／またはその内部で実行され得る。さらに、プロセッサ１０２、４０２は、方法５９５と同じ、同様、またはそれとは異なる方法を実行し得る。 
【００４５】
方法は、ブロック５９６で、例外ハンドラ復帰命令の第１インスタンスを受信する工程を含む。第１例外ハンドラ復帰命令は、第１例外に対応する例外ハンドラから復帰するべく使用されており、この方法において、第１例外はＮＭＩハンドラ内に取り入れられなかった。方法は、ブロック５９７で、第１例外ハンドラ復帰命令に応答して次に受信されるＮＭＩの配信を有効にするプロセッサ（例えば、ＮＭＩ無効制御によって）を設定する工程を含む。第１例外がＮＭＩハンドラ内に取り入れられなかったので、次のＮＭＩの配信が早期に有効とされ得るように、現在サービスされている未処理係属中のＮＭＩはない。
【００４６】
方法は、ブロック５９８で、例外ハンドラ復帰命令の第２インスタンスを受信する。図示例にて示されないが、ブロック５９７−５９８の間で、複数の他のイべントが発生し得ることは理解されるべきである。例えば、ＮＭＩが受信され得、ＮＭＩハンドラへの呼び出しがなされ得、例外が受信され得るが、ＮＭＩハンドラにて、例外ハンドラへの呼び出しがなされ得、そして、例外ハンドラからの復帰は、ブロック５９８で受信された例外ハンドラ復帰命令の第２インスタンスを使用して実行され得る。すなわち、例外ハンドラ復帰命令の第２インスタンスは、ＮＭＩハンドラ内に取り入れられた第２例外に対応する例外ハンドラから復帰するべく使用されている。方法は、ブロック５９９で、プロセッサ（例えば、ＮＭＩ無効制御によって）が、第２例外ハンドラ復帰命令に応答して次に受信されるＮＭＩの配信を有効にするように設定しないこと、または、設定することを控える工程を含む。有利には、ＮＭＩ無効制御を次に受信されるＮＭＩの配信を有効にするように設定しない工程は、ＮＭＩおよび／またはネスト型ＮＭＩを早期に有効にすることを回避するのに役立ち得る。むしろ、次に受信されるＮＭＩの配信は、ＮＭＩからの復帰までなお延期され得る。
【００４７】
例外ハンドラ復帰命令は、復帰中の例外がＮＭＩ操作中に取り入れられたか否かに依存して２つの異なる挙動を有し得ることに留意されたい。方法は、比較的基本的な形態で示される。しかしながら、複数のオペレーションが、方法に追加されるか、および／またはこれから取り除かれてよい。また、複数のオペレーションの特定の順序が示されているが、その特定の順序は例示的なものである。複数の他の実施形態は、異なる順序で複数のオペレーションを実行する、動作を重複させるなどをし得る。 
【００４８】
図５−６向けに示され、説明されるフィーチャのいずれかを組み込むべく修正され得る適切な例外ハンドラ復帰命令の１つの特定の例示的な実施形態は、ＩＲＥＴ割り込み復帰命令である。この命令は、オペランドサイズの１６ビット、３２ビットおよび６４ビットに対して、それぞれニーモニックＩＲＥＴ、ＩＲＥＴＤおよびＩＲＥＴＱによって参照することができる。大抵のアセンブラは、全てのオペランドサイズに対してＩＲＥＴニーモニックを交換可能に使用する。ソフトウェアは、この命令を使用して、例外または割り込みハンドラから例外、外部割り込みまたはソフトウェア生成割り込みによって割り込まれたプログラムまたは手順へプログラム制御を復帰し得る。命令はまた、ネスト型タスクからの復帰を実行するべく使用され得る。ネスト型タスクは、ＣＡＬＬ命令がタスク切り替えを開始するべく使用される場合、または、割り込みまたは例外が割り込みまたは例外ハンドラへのタスク切り替えを引き起こす場合に作成され得る。リアルアドレスモードにおいて、ＩＲＥＴ命令は、割り込まれたプログラムまたは手順へのファーリターンを実行する。この動作中、プロセッサは、スタックからの復帰命令ポインタ、復帰コードセグメントセレクタ、およびＥＦＬＡＧＳ画像をそれぞれ、拡張命令ポインタ（ＥＩＰ）、コードセグメントセレクタ（ＣＳ）およびフラグ（ＥＦＬＡＧＳ）レジスタへとポップし、次に割り込まれたプログラムまたは手順の実行を再開する。保護されたモードにて、ＩＲＥＴ命令の作用は、ＥＦＬＡＧＳレジスタのＮＴ（ネスト型タスク）およびＶＭ（仮想８０８６モード）フラグ、コードセグメントセレクタのＲＰＬフィールドからの現在の特権レベル（ＣＰＬ）、現在のスタック上に格納されたＥＦＬＡＧＳ画像のＶＭフラグ、および現在のスタック上のコードセグメントセレクタのＲＰＬフィールドのセッティングに依存する。これらの値に応じて、プロセッサは、（１）仮想８０８６モードからの復帰、（２）仮想８０８６モードへの復帰、（３）特権内レベル復帰、（４）特権間レベル復帰、（５）ネスト型タスクからの復帰（タスク切り替え）から成る割り込み復帰のタイプのうちの１つを実行する。
【００４９】
ＮＴフラグ（例えば、ＥＦＬＡＧＳレジスタにおいて）がクリアされた場合、ＩＲＥＴ命令は、タスク切り替えなしで、割り込み手順からのファーリターンを実行する。復帰中のコードセグメントは、（例えば、スタックからポップされたコードセグメントセレクタのＲＰＬフィールドによって示されるように）割り込みハンドラルーチンと比較して概して等しいか、あまり特権化されていない。リアルアドレスモード割り込み復帰に関して、ＩＲＥＴ命令は、スタックからの復帰命令ポインタ、復帰コードセグメントセレクタ、およびＥＦＬＡＧＳ画像をそれぞれ、拡張命令ポインタ、コードセグメントセレクタおよびＥＦＬＡＧＳレジスタへとポップし、次に割り込まれたプログラムまたは手順の実行を再開する。復帰は、別の特権レベルに対してである場合、または、復帰が６４ビットモードからである場合、ＩＲＥＴ命令はまた、プログラム実行を再開する前に、スタックからのスタックポインタおよびセグメントセレクタをポップする。復帰は、仮想８０８６モードに対してである場合、プロセッサはまた、スタックからデータセグメントセレクタをポップする。 
【００５０】
ＮＴフラグ（例えば、ＥＦＬＡＧＳレジスタにおいて）が、セットされた場合、ＩＲＥＴ命令は、ネスト型タスク（ＣＡＬＬ命令、割り込みまたは例外で呼び出されるタスク）から呼び出しまたは割り込まれたタスクに戻るタスク切り替え（復帰）を実行する。ＩＲＥＴ命令を実行するタスクの更新状態は、そのＴＳＳにセーブされる。タスクが後で再エンターされた場合、ＩＲＥＴ命令に続くコードが実行される。ＮＴフラグがセットされ、プロセッサがＩＡ−３２ｅモードにある場合、ＩＲＥＴ命令は一般的な保護例外を引き起こし得る。 
【００５１】
ＮＭＩが阻止された場合、ＩＲＥＴ命令の実行は、ＮＭＩを解除する。この解除は、たとえ命令がフォールトを引き起こしても発生する。そのような場合、例外ハンドラが起動される前にＮＭＩは、マスクが外される。 
【００５２】
図６は、ネスト型ＮＭＩ防止サポートモジュール６８０の実施形態を有するオペレーティングシステムモジュール６３２の実施形態のブロック図である。ネスト型ＮＭＩ防止サポートモジュールは、プロセッサフィーチャサポートチェッカモジュール６８４である。プロセッサフィーチャサポートチェッカモジュールは、プロセッサの１または複数のプロセッサフィーチャサポートレジスタ６８２と結合するか、別のやり方で通信し得る。プロセッサは一般に、プロセッサのフィーチャおよび機能を特定するべく使用される１または複数のフィーチャサポートおよび／または識別レジスタを有する。プロセッサフィーチャサポートチェッカモジュールは、プロセッサがネスト型ＮＭＩ防止機構／機能に対するサポートを有するか否かをチェックまたは判定するように動作し得る。例えば、プロセッサフィーチャサポートチェッカモジュールは、このチェックを実行するべく、プロセッサフィーチャ識別命令（例えば、ＣＰＵＩＤ命令等）を発行し得る。 
【００５３】
ネスト型ＮＭＩ防止サポートモジュールは任意で、ネスト型ＮＭＩ防止有効制御構成モジュール６８６を含み得る。ネスト型ＮＭＩ防止有効制御構成モジュールは、プロセッサのネスト型ＮＭＩ防止有効制御６２２（例えば、ネスト型ＮＭＩ防止有効制御１２２）と結合するか、別のやり方で、それと通信する。例として、ネスト型ＮＭＩ防止有効制御は、モデル固有レジスタ、プロセッサの制御または構成レジスタ等に見つけられ得る。１つの態様において、ネスト型ＮＭＩ防止有効制御は、非特権化またはアプリケーションレベルソフトウェアによってではなく、オペレーティングシステムまたは他の特権化レベルソフトウェアによって修正されることが可能な特権化レベル制御を表す。プロセッサがネスト型ＮＭＩ防止機構／機能向けのサポートを有する場合、構成モジュール６８６は任意で、ネスト型ＮＭＩ防止有効制御６２２がこの機構／機能を有効にするように設定し得る。あるいは、ある理由により、この機構／機能を有効にしないことが判定され得る。 
【００５４】
ネスト型ＮＭＩ防止サポートモジュールはまた、「回避策」無効モジュール６８８を任意で含み得る。回避策無効モジュールは、オペレーティングシステムモジュールの１または複数の回避策モジュール６９０と結合するか、別のやり方で通信する。これらの回避策モジュールは、ネスト型ＮＭＩ操作と関連する問題を処理するか、これを回避するかを試みるべく、当技術分野にて既知の様々なアプローチのうちのいずれかを表し得る。例として、回避策モジュールは、ＮＭＩハンドラ内のネスト化を検出し、復帰命令（例えば、ＩＲＥＴ命令）を実行することを回避するべく、各例外ハンドラにて対策を講じるように動作し得る。回避策モジュールは、不要なネスト型割り込みが実際に配信されることになった場合、特別なスタック操作などの効果を緩和するか、除去するように動作し得る。概して、そのような回避策は、複雑さおよび／またはパフォーマンスの点でコストを招く。いくつかの実施形態において、ネスト型ＮＭＩ防止機構／機能が有効とされた場合、本明細書の他の場所に説明されるように、回避策無効モジュールは任意で、これらの回避策モジュールの１または複数を無効にし得るが、これは必要とされない。 
【００５５】
本明細書中に説明される複数の実施形態は、ＮＭＩに対して主に説明されているが、複数の他の実施形態は、複数の他のタイプの割り込みに対して使用され得る。例えば、複数の実施形態は、システム管理割り込み（ＳＭＩ）および／または他の比較的高い優先度の割り込み（例えば、ＮＭＩと同じくらい高い優先度、または、それよりも高い優先度）に適用可能である。ＳＭＩの可能な原因の例は、限定されるものではないが、指定されたＳＭＩピン上のＳＭＩをシグナリングする構成要素（例えば、マザーボード上のチップセット、ハードウェア）、システムハードウェアなどによって特別と見なされている特定の場所への入力／出力アクセスに起因してシステムソフトウェアによって引き起こされるソフトウェアＳＭＩなどを含む。そのようなＳＭＩは、システム管理モード（ＳＭＭ）への加入を可能にし得る。ＳＭＭは、オペレーティングシステムの動作を含む通常の実行が一時的に停止されている異なる、孤立した動作モードまたは実行環境を表し、ＳＭＩハンドラおよび／または他のＳＭＭコード（例えば、（例えば、基本入力・出力システム（ＢＩＯＳ））のファームウェアおよび／またはソフトウェア）は、オペレーティングシステムおよびユーザレベルのアプリケーションに対して透過的に高特権モードで実行され得る。代表的には、ＳＭＭコードは一般に、プロセッサの他の動作モードにアクセス不可であるアドレス空間から実行する。
【００５６】
前述したように、ＮＭＩの処理は、タスクゲート、割り込みスタックテーブル（ＩＳＴ）またはネスト型ＮＭＩと十分に互換性のないプロセッサの他のフィーチャに依存し得るので、オペレーティングシステムの不安定性、および／または潜在的に致命的なエラーを引き起こす場合がある、次のＮＭＩの配信を早期の再有効化を防止することが概して望ましい。特定のシステムにおいて、ＳＭＩは、ファームウェア（例えば、ＢＩＯＳ）に実装されたＳＭＩハンドラによって操作され得るが、ＮＭＩを含む大抵のまたは他の割り込み全てが、オペレーティングシステムによって典型的には操作される。その理由のため、ＳＭＩハンドラ（例えば、ＢＩＯＳおよび／またはファームウェア）が、ＳＭＩを操作するように動作している間、ＮＭＩの配信を延期することが概して望ましい。これをサポートするべく、特定のプロセッサは、ＳＭＩを配信する場合、ＮＭＩの一時的な延期または阻止を有効化または設定し得る。ＳＭＩを操作している間（例えば、ＳＭＩハンドラがＳＭＩを操作している間で、ＳＭＩハンドラが復帰する前）に、例外が取り入れられた場合、それが復帰する場合の例外ハンドラは、次のＮＭＩの配信を早期に再有効化し得る。これにより、次のＮＭＩは、それが代わりにオペレーティングシステム（例えば、ＮＭＩハンドラ）に配信されるべき場合に、ＳＭＩの操作中にＢＩＯＳ／ファームウェア（すなわち、オペレーティングシステムへではない）に配信されることになり得る。いくつかの実施形態において、命令（例えば、ＢＩＯＳ例外ハンドラ復帰命令）は、本明細書中に開示されるものに類似した技術を使用して、ＮＭＩの配信を早期に再有効化することなく、ＢＩＯＳ例外ハンドラから復帰し得る。また、他のアーキテクチャが、ＳＭＩに類似した他のタイプの高優先度の割り込みを有してよく、これに本明細書中に説明される実施形態が適用可能であることは当業者なら理解するであろう。
［例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ］
【００５７】
複数のプロセッサコアは、複数の異なる方法で、複数の異なる目的のために、複数の異なるプロセッサにおいて実装され得る。例えば、そのような複数のコアの複数の実装は、（１）汎用コンピューティングを意図した汎用インオーダコア、（２）汎用コンピューティングを意図した高性能汎用アウトオブオーダコア、（３）グラフィクスおよび／または科学的（スループット）コンピューティングを主に意図した専用コアを含んでよい。  複数の異なるプロセッサの複数の実装は、１）汎用コンピューティングを意図した１または複数の汎用インオーダコアおよび／または汎用コンピューティングを意図した１または複数の汎用アウトオブオーダコアを含むＣＰＵと、２）主にグラフィクスおよび／または科学的（スループット）を意図した１または複数の専用コアを含むコプロセッサとを含んでもよい。そのような複数の異なるプロセッサは、１）ＣＰＵとは別個のチップ上のコプロセッサ、２）ＣＰＵと同じパッケージ内で別個のダイ上のコプロセッサ、３）ＣＰＵと同じダイ上のコプロセッサ（この場合、そのようなコプロセッサは、時には統合グラフィクスおよび／または科学的（スループット）ロジックのような専用ロジック、または複数の専用コアと呼ばれる）、および４）同じダイ上で、説明されたＣＰＵ（時には、アプリケーションコアまたはアプリケーションプロセッサと呼ばれる）上述したコプロセッサおよび追加的な機能性を含み得るシステムオンチップを含み得、複数の異なるコンピュータシステムアーキテクチャをもたらす。次に例示的なコアアーキテクチャを説明し、その後、例示的なプロセッサおよびコンピュータアーキテクチャを説明する。
［例示的なコアアーキテクチャ］
［インオーダおよびアウトオブオーダコアのブロック図］
【００５８】
図７Ａは、本発明の複数の実施形態による例示的なインオーダパイプラインおよび例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。図７Ｂは、本発明の複数の実施形態によるプロセッサに含まれるべきインオーダアーキテクチャコアの例示的な実施形態および例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。図７Ａ−Ｂにおける実線で囲まれた複数のボックスは、インオーダパイプラインおよびインオーダコアを図示するが、複数の点線で囲まれたボックスの任意の追加により、レジスタリネーミング、アウトオブオーダ発行／実行パイプライン、およびコアを図示する。インオーダ態様はアウトオブオーダ態様のサブセットであると考え、アウトオブオーダ態様を説明する。
【００５９】
図７Ａにおいて、プロセッサパイプライン７００は、フェッチ段７０２、長さデコード段７０４、デコード段７０６、割り当て段７０８、リネーミング段７１０、スケジューラ段（ディスパッチ段または発行段として既知）７１２、レジスタ読み出し／メモリ読み出し段７１４、実行段７１６、書き戻し／メモリ書き込み段７１８、例外操作段７２２、および、コミット段７２４を含む。
【００６０】
図７Ｂは、実行エンジンユニット７５０に結合されるフロントエンドユニット７３０を含むプロセッサコア７９０を示し、両方ともメモリユニット７７０に結合される。コア７９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コアまたはハイブリッドもしくは代替的なコアタイプであってもよい。さらに別のオプションとして、コア７９０は、専用コア、例えば、ネットワークコアもしくは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィクス処理ユニット（ＧＰＧＰＵ）コア、グラフィクスコア等であってよい。
【００６１】
フロントエンドユニット７３０は、命令キャッシュユニット７３４に結合された分岐予測ユニット７３２を含み、命令キャッシュユニット７３４は、命令トランスレーションルックアサイドバッファ（ＴＬＢ）７３６に結合され、ＴＬＢ７３６は、命令フェッチユニット７３８に結合され、命令フェッチユニット７３８は、デコードユニット７４０に結合される。デコードユニット７４０（またはデコーダ）は、複数の命令をデコードし、出力として、１または複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または元の複数の命令からデコードされた、もしくはこれらを別のやり方で反映する、もしくはこれらから導出された他の制御信号を生成してもよい。デコードユニット７４０は、複数の様々な異なる機構を用いて実装されてよい。複数の好適な機構の例は、限定されるものではないが、ルックアップテーブル、ハードウェア実装、プログラム可能ロジックアレイ（ＰＬＡ）、マイクロコードリードオンリメモリ（ＲＯＭ）などを含む。１つの実施形態において、コア７９０は、（例えば、デコードユニット７４０にて、またはフロントエンドユニット７３０内の別のやり方で）特定の複数のマクロ命令に対するマイクロコードを格納するマイクロコードＲＯＭまたは他の媒体を含む。デコードユニット７４０は、実行エンジンユニット７５０内のリネーム／アロケータユニット７５２に結合されている。
【００６２】
実行エンジンユニット７５０は、リタイアメントユニット７５４および１または複数のスケジューラユニット７５６のセットに結合されたリネーム／アロケータユニット７５２を含む。スケジューラユニット７５６は、リザベーションステーション、中央命令ウィンドウなどを含む任意の数の異なるスケジューラを表す。スケジューラユニット７５６は、物理レジスタファイルユニット７５８に結合される。複数の物理レジスタファイルユニット７５８の各々は、１または複数の物理レジスタファイルを表し、それらのうちの異なるものが、スカラ整数、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点、状態（例えば、実行される次の命令のアドレスである命令ポインタ）など、１または複数の異なるデータタイプを格納する。１つの実施形態において、物理レジスタファイルユニット７５８は、ベクトルレジスタユニット、書き込みマスクレジスタユニットおよびスカラレジスタユニットを備える。これらの複数のレジスタユニットは、複数のアーキテクチャ上のベクトルレジスタ、ベクトルマスクレジスタおよび汎用レジスタを提供してよい。物理レジスタファイルユニット７５８は、リタイアメントユニット７５４と重なり、レジスタリネーミングおよびアウトオブオーダ実行が（例えば、リオーダバッファおよびリタイアメントレジスタファイルを用いることにより、フューチャファイル、履歴バッファ、およびリタイアメントレジスタファイルを用いることにより、複数のレジスタのレジスタマップおよびプールなどを用いることにより）実装され得る様々な方法を図示する。リタイアメントユニット７５４および物理レジスタファイルユニット７５８は、実行クラスタ７６０に結合される。実行クラスタ７６０は、１または複数の実行ユニット７６２のセットおよび１または複数のメモリアクセスユニット７６４のセットを含む。複数の実行ユニット７６２は、複数の様々なタイプのデータ（例えば、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して、様々な複数のオペレーション（例えば、複数のシフト、加算、減算、乗算）を実行してよい。いくつかの実施形態は、複数の特定の機能または複数のセットの機能に専用のいくつかの実行ユニットを含み得が、複数の他の実施形態は、１つのみ実行ユニットまたは複数の実行ユニットを含み、それらの全てがあらゆる関数を実行し得る。スケジューラユニット７５６、物理レジスタファイルユニット７５８および実行クラスタ７６０は、複数として示される可能性があるが、その理由は、複数の特定の実施形態は、複数の特定のタイプのデータ／オペレーションに対して複数の個別のパイプラインを作成するからである（例えば、各々が自身のスケジューラユニット、物理レジスタファイルユニットおよび／または実行クラスタを有するスカラ整数パイプライン、スカラ浮動小数点／パック型整数／パック型浮動小数点／ベクトル整数／ベクトル浮動小数点パイプラインおよび／またはメモリアクセスパイプライン、および、別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット７６４を有する複数の特定の実施形態が実装される）。また、個別のパイプラインが用いられる場合、これらのパイプラインのうち１または複数のパイプラインはアウトオブオーダ発行／実行方式であり、残りはインオーダ方式であると理解されるべきである。
【００６３】
メモリアクセスユニット７６４のセットは、データＴＬＢユニット７７２を含むメモリユニット７７０に結合され、データＴＬＢユニット７７２は、データキャッシュユニット７７４に結合され、データキャッシュユニット７７４は、レベル２（Ｌ２）キャッシュユニット７７６に結合される。１つの例示的な実施形態において、メモリアクセスユニット７６４は、ロードユニット、格納アドレスユニットおよび格納データユニットを含んでもよく、これらの各々は、メモリユニット７７０内のデータＴＬＢユニット７７２に結合される。命令キャッシュユニット７３４は、メモリユニット７７０内のレベル２（Ｌ２）キャッシュユニット７７６に、さらに結合される。Ｌ２キャッシュユニット７７６は、キャッシュの１または複数の他のレベルに結合されており、最終的にはメインメモリに結合されている。 
【００６４】
一例として、例示的なレジスタリネーミングアウトオブオーダ発行／実行コアアーキテクチャは、以下のようにパイプライン７００を実装するとしてよい。
１）命令フェッチ７３８は、フェッチ段７０２および長さデコード段７０４を実行する。
２）デコードユニット７４０は、デコード段７０６を実行する。
３）リネーム／アロケータユニット７５２は、割り当て段７０８およびリネーミング段７１０を実行する。
４）スケジューラユニット７５６は、スケジュール段７１２を実行する。
５）物理レジスタファイルユニット７５８およびメモリユニット７７０は、レジスタ読み出しし／メモリ読み出し段７１４を実行し、実行クラスタ７６０は、実行段７１６を実行する。
６）メモリユニット７７０および物理レジスタファイルユニット７５８は、書き戻し／メモリ書き込み段７１８を実行する。
７）例外操作段７２２には様々なユニットが関係される。
８）リタイアメントユニット７５４および物理レジスタファイルユニット７５８は、コミット段７２４を実行する。
【００６５】
コア７９０は、本明細書で説明される命令を含む１または複数の命令セット（例えば、ｘ８６命令セット（複数のより新しいバージョンで追加されたいくつかの拡張を有する）カリフォルニア州サニーベールのＭＩＰＳテクノロジーズのＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭホールディングスの（ＮＥＯＮのような任意の追加的な拡張を有する）ＡＲＭ命令セット）をサポートしてもよい。１つの実施形態において、コア７９０が、パック型パック型データ命令セット拡張（例えば、ＡＶＸ１、ＡＶＸ２）をサポートするロジックを含み、それにより、多くのマルチメディアアプリケーションによって使用されるオペレーションがパック型データを使用して実行されることを可能にする。
【００６６】
コアは、マルチスレッド化（オペレーションまたはスレッドの２またはそれよりも多い並列のセットを実行）をサポートし得るものであって、様々な方法でそのようにマルチスレッド化を行い得ると理解されるべきである。例えば、タイムスライスマルチスレッド化、同時マルチスレッド化（単一物理コアが、当該物理コアが同時マルチスレッド化している複数のスレッドの各々に対する論理コアを提供する）、または、その組み合わせ（例えば、タイムスライス方式でフェッチおよびデコードして、その後で同時マルチスレッド化を実行、例えば、インテル（登録商標）社のようなハイパースレッド化技術）を含む。 
【００６７】
レジスタリネーミングは、アウトオブオーダ実行の文脈で説明されるが、レジスタリネーミングは、インオーダアーキテクチャにおいて用いられ得ることを理解されるべきである。プロセッサの図示された実施形態は、別個の命令および複数のデータキャッシュユニット７３４／７７４、ならびに共有Ｌ２キャッシュユニット７７６も含むが、複数の代替的な実施形態は、例えば、レベル１（Ｌ１）内部キャッシュまたは内部キャッシュの複数のレベル等のように、命令およびデータの双方に対する単一の内部キャッシュを有し得る。いくつかの実施形態において、システムは、内部キャッシュ、およびコアおよび／またはプロセッサの外部にある外部キャッシュの組み合わせを含んでもよい。代わりに、全てのキャッシュは、コアおよび／またはプロセッサの外部にあるとしてよい。
［特定の例示的なインオーダコアアーキテクチャ］
【００６８】
図８Ａ−Ｂは、より特定の例示的なインオーダコアアーキテクチャのブロック図を示し、ここで、コアは、チップ内のいくつかの論理ブロック（同じタイプおよび／または異なるタイプの他の複数のコアを含む）のうちの１つであってもよい。論理ブロックは、用途に応じて、高帯域幅相互接続ネットワーク（例えば、リングネットワーク）を介して、ある固定機能ロジック、メモリＩ／Ｏインターフェースおよび他の必要なＩ／Ｏロジックと通信する。 
【００６９】
図８Ａは、本発明の複数の実施形態による単一のプロセッサコアのブロック図であり、オンダイの相互接続ネットワーク８０２とのその接続およびそのレベル２（Ｌ２）キャッシュのローカルサブセット８０４とともに示される。１つの実施形態において、命令デコーダ８００は、パック型データ命令セット拡張を有するｘ８６命令セットをサポートする。Ｌ１キャッシュ８０６は、スカラおよびベクトルユニットへのキャッシュメモリに対する低レイテンシアクセスを可能とする。１つの実施形態において（設計を単純にするために）、スカラユニット８０８およびベクトルユニット８１０が、分離したレジスタセット（それぞれ、スカラレジスタ８１２およびベクトルレジスタ８１４）を用い、それらの間で転送されたデータはメモリに書き込まれ、次に、レベル１（Ｌ１）キャッシュ８０６から読み戻されるが、本発明の代替実施形態は異なるアプローチを用いてもよい（例えば、単一のレジスタセットを用いるか、またはデータを、書き込みおよび読み戻されず、２つのレジスタファイルの間で転送されることを可能にする通信経路を含む）。
【００７０】
Ｌ２キャッシュのローカルサブセット８０４は、１つのプロセッサコアあたり１つの別個のローカルサブセットに分割されるグローバルＬ２キャッシュの一部である。各プロセッサコアは、それ自身のＬ２キャッシュローカルサブセット８０４に対するダイレクトアクセス経路を有する。プロセッサコアにより読み出されたデータは、そのＬ２キャッシュサブセット８０４に格納され、迅速かつ、自身の複数のローカルＬ２キャッシュサブセットにアクセスする複数の他のプロセッサコアと並列に、アクセスされることができる。プロセッサコアに書き込まれたデータは、それ自身のＬ２キャッシュサブセット８０４に格納され、必要な場合には、他の複数のサブセットからフラッシュされる。  リングネットワークは、共有のデータに対する一貫性を保証する。リングネットワークが双方向であることにより、複数のプロセッサコア、複数のＬ２キャッシュおよび他の複数の論理ブロックなどのエージェントは、チップ内で互いに通信を行うことを可能にする。各リングデータ経路は方向毎に１０１２ビット幅である。 
【００７１】
図８Ｂは、本発明の複数の実施形態による図８Ａのプロセッサコアの一部の拡大図である。図８Ｂは、Ｌ１キャッシュ８０４のＬ１データキャッシュ８０６Ａ部分、ならびにベクトルユニット８１０およびベクトルレジスタ８１４に関するさらなる詳細を含む。具体的には、ベクトルユニット８１０は、整数、単精度浮動および倍精度浮動命令のうちの１または複数を実行する１６幅ベクトル処理ユニット（ＶＰＵ）（１６幅ＡＬＵ８２８を参照）である。ＶＰＵは、再構成ユニット８２０による複数のレジスタ入力の再構成、数字変換ユニット８２２Ａ−Ｂによる数字変換、および複製ユニット８２４によるメモリ入力に対する複製をサポートする。書き込みマスクレジスタ８２６は、結果として得られるベクトル書き込みを記述することを可能とする。
［統合メモリコントローラおよびグラフィクスを有するプロセッサ］
【００７２】
図９は、本発明の複数の実施形態によるプロセッサ９００のブロック図であり、プロセッサ９００は、１つより多くのコアを有してもよく、統合メモリコントローラを有してもよく、統合グラフィクスを有してもよい。図９において実線で囲まれたボックスは、単一のコア９０２Ａ、システムエージェント９１０、１または複数のバスコントローラユニット９１６のセットを備えるプロセッサ９００を示すが、点線で囲まれたボックスの任意の追加は、複数のコア９０２Ａ−Ｎ、システムエージェントユニット９１０内の１または複数の統合メモリコントローラユニット９１４のセット、および、専用ロジック９０８を備える別のプロセッサ９００を示す。 
【００７３】
従って、プロセッサ９００の複数の異なる実装は、１）統合グラフィクスおよび／または科学的（スループット）ロジック（１または複数のコアを含み得）である専用ロジック９０８、および１または複数の汎用コア（例えば、汎用インオーダコア、汎用アウトオブオーダコア、これら２つの組み合わせ）である複数のコア９０２Ａ−Ｎを用いるＣＰＵと、２）グラフィクスおよび／または科学的（スループット）に主に意図される多数の専用コアである複数のコア９０２Ａ−Ｎを用いるコプロセッサと、３）多数の汎用インオーダコアである複数のコア９０２Ａ〜Ｎを用いるコプロセッサと、を含み得る。従って、プロセッサ９００は、汎用プロセッサ、コプロセッサまたは、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ（汎用グラフィクス処理ユニット）、ハイスループット多集積コア（ＭＩＣ）コプロセッサ（３０またはそれより多くのコアを含む）、埋め込みプロセッサなどのような専用プロセッサであってもよい。プロセッサは１または複数のチップ上に実装され得る。プロセッサ９００は、複数の処理技術のうちのいずれか、例えば、ＢｉＣＭＯＳ、ＣＭＯＳまたはＮＭＯＳ等を利用し、１または複数の基板の一部であってよく、および／または、１または複数の基板に実装されてよい。
【００７４】
メモリ階層は、複数のコア、１または複数の共有キャッシュユニット９０６またはそのセット、および複数の統合メモリコントローラユニット９１４のセットに結合される外部メモリ（図示せず）内に、１または複数のレベルのキャッシュを含む。複数の共有キャッシュユニット９０６のセットは、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）または他の複数のレベルのキャッシュなどの１または複数の中レベルキャッシュ、ラストレベルキャッシュ（ＬＬＣ）および／またはこれらの組み合わせを含んでもよい。１つの実施形態において、リングベースの相互接続ユニット９１２が、統合グラフィクスロジック９０８、複数の共有キャッシュユニット９０６のセットおよびシステムエージェントユニット９１０／統合メモリコントローラユニット９１４を相互接続するが、複数の代替的な実施形態は、そのような複数のユニットを相互接続するための任意の数の周知技術を用いてもよい。１つの実施形態において、１または複数のキャッシュユニット９０６とコア９０２Ａ−Ｎとの間において一貫性が維持される。 
【００７５】
いくつかの実施形態において、複数のコア９０２Ａ−Ｎのうちの１または複数は、マルチスレッディングが可能である。システムエージェント９１０は、コア９０２Ａ−Ｎを調整して動作させる複数の構成要素を含む。システムエージェントユニット９１０は、例えば、電力制御ユニット（ＰＣＵ）およびディスプレイユニットを含んでもよい。ＰＣＵは、複数のコア９０２Ａ−Ｎおよび統合グラフィクスロジック９０８の電力状態を調整するために必要なロジックおよび複数の構成要素であってもよく、またはこれらを含んでもよい。ディスプレイユニットは、１または複数の外部に接続されたディスプレイを駆動するためのユニットである。
【００７６】
コア９０２Ａ−Ｎは、アーキテクチャ命令セットに関して同質または異質のいずれであってもよい。すなわち、コア９０２Ａ−Ｎのうちの２またはそれよりも多くは、同じ命令セットを実行可能であり得るが、他は当該命令セットのサブセットまたは異なる命令セットのみを実行可能であるとしてよい。
［例示的なコンピュータアーキテクチャ］
【００７７】
図１０−１３は、複数の例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルド型ＰＣ、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、埋め込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィクスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイスおよび様々な他の電子デバイス用の当技術分野で既知の他の複数のシステム設計および複数の構成も、適切である。概して、プロセッサおよび／または他の実行ロジックを本明細書で開示するように組み込むことが可能な多岐にわたるシステムまたは電子デバイスは、通常適切である。
【００７８】
ここで、図１０を参照すると、本発明の１つの実施形態によるシステム１０００のブロック図が示される。システム１０００は、コントローラハブ１０２０に結合される１または複数のプロセッサ１０１０、１０１５を含んでもよい。１つの実施形態において、コントローラハブ１０２０は、グラフィクスメモリコントローラハブ（ＧＭＣＨ）１０９０および入力／出力ハブ（ＩＯＨ）１０５０（複数の別個のチップ上にあってもよい）を含む。ＧＭＣＨ１０９０は、メモリ１０４０およびコプロセッサ１０４５に結合されたメモリおよびグラフィクスコントローラを含む。ＩＯＨ１０５０は、入力／出力（Ｉ／Ｏ）デバイス１０６０をＧＭＣＨ１０９０に結合する。あるいは、メモリコントローラおよびグラフィクスコントローラのうち一方または両方は、プロセッサ内に統合されている（本明細書中に説明されるように）。メモリ１０４０およびコプロセッサ１０４５は、プロセッサ１０１０に直接結合されており、ＩＯＨ１０５０を含む単一のチップのコントローラハブ１０２０に直接結合されている。
【００７９】
複数の追加のプロセッサ１０１５の任意のタイプが、図１０に複数の破線で示される。各プロセッサ１０１０、１０１５は、本明細書中に説明される処理コアのうちの１または複数を含み得、および何らかのバージョンのプロセッサ９００とし得る。
【００８０】
メモリ１０４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、位相変化メモリ（ＰＣＭ）またはこれら２つの組み合わせであってもよい。少なくとも１つの実施形態について、コントローラハブ１０２０は、フロントサイドバス（ＦＳＢ）等のマルチドロップバス、ＱｕｉｃｋＰａｔｈ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＱＰＩ）等のポイントツーポイントインターフェース、または、同様の接続１０９５を介して、プロセッサ１０１０、１０１５と通信する。
【００８１】
１つの実施形態において、コプロセッサ１０４５は、例えば、ハイスループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、埋め込みプロセッサ等の専用プロセッサである。１つの実施形態において、コントローラハブ１０２０は、統合グラフィクスアクセラレータを含むとしてよい。
【００８２】
アーキテクチャ上の特性、マイクロアーキテクチャ上の特性、温度特性、消費電力特性などを含む利点の一連のメトリクスの観点から物理的リソース１０１０、１０１５の間には様々な差が存在し得る。
【００８３】
１つの実施形態において、プロセッサ１０１０は、一般的なタイプの複数のデータ処理オペレーションを制御する複数の命令を実行する。複数の命令内に、複数のコプロセッサ命令が組み込まれていてもよい。プロセッサ１０１０は、これらの複数のコプロセッサ命令を、取り付けられたコプロセッサ１０４５によって実行されるべきタイプのものと認識する。従って、プロセッサ１０１０は、これらの複数のコプロセッサ命令（または複数のコプロセッサ命令を表す複数の制御信号）を、コプロセッサバスまたは他の相互接続上で、コプロセッサ１０４５に対して発行する。コプロセッサ１０４５は、受信されたコプロセッサ命令を承認して実行する。
【００８４】
ここで、図１１を参照すると、本発明の実施形態による第１のより特定の例示的システム１１００のブロック図が示される。図１１に示されるように、マルチプロセッサシステム１１００は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続１１５０を介して結合される第１のプロセッサ１１７０および第２のプロセッサ１１８０を含む。プロセッサ１１７０および１１８０の各々は、いくつかのバージョンのプロセッサ９００であってよい。本発明の１つの実施形態において、プロセッサ１１７０および１１８０は、それぞれプロセッサ１０１０および１０１５であるが、コプロセッサ１１３８は、コプロセッサ１０４５である。別の実施形態において、プロセッサ１１７０および１１８０はそれぞれ、プロセッサ１０１０およびコプロセッサ１０４５である。
【００８５】
プロセッサ１１７０および１１８０は、統合メモリコントローラ（ＩＭＣ）ユニット１１７２および１１８２をそれぞれ含むものとして示される。プロセッサ１１７０はまた、そのバスコントローラユニットの一部として、複数のポイントツーポイント（Ｐ−Ｐ）インターフェース１１７６および１１７８をさらに含み、同様に、第２のプロセッサ１１８０は、複数のＰ−Ｐインターフェース１１８６および１１８８を含む。複数のプロセッサ１１７０、１１８０は、複数のＰ−Ｐインターフェース回路１１７８、１１８８を用いたポイントツーポイント（Ｐ−Ｐ）インターフェース１１５０を介して、情報を交換してもよい。図１１に図示しているように、ＩＭＣ１１７２および１１８２は、プロセッサをそれぞれのメモリ、つまり、メモリ１１３２およびメモリ１１３４に結合する。メモリ１１３２およびメモリ１１３４は、それぞれのプロセッサにローカルに取り付けられているメインメモリの部分であるとしてよい。 
【００８６】
複数のプロセッサ１１７０、１１８０の各々は、複数のポイントツーポイントインターフェース回路１１７６、１１９４、１１８６、１１９８を用いる個々のＰ−Ｐインターフェース１１５２、１１５４を介して、チップセット１１９０と情報を交換してもよい。チップセット１１９０は、高性能インターフェース１１３９を介して、コプロセッサ１１３８と任意で情報を交換してもよい。１つの実施形態において、コプロセッサ１１３８は、専用プロセッサ、例えば、ハイスループットＭＩＣプロセッサ、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、埋め込みプロセッサ等である。 
【００８７】
共有キャッシュ（図示せず）は、どちらかのプロセッサに含まれているかまたは、両方のプロセッサの外部に、Ｐ−Ｐ相互接続を介してプロセッサとなお接続されて含まれてよく、それにより、プロセッサが低電力モードに置かれると、どちらかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に格納されてよい。
【００８８】
チップセット１１９０は、インターフェース１１９６を介して、第１のバス１１１６に結合されてもよい。１つの実施形態において、第１のバス１１１６がＰＣＩ（ペリフェラルコンポーネント相互接続（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ））バスまたはＰＣＩエクスプレス（ＰＣＩ  Ｅｘｐｒｅｓｓ）バスまたはその他の第３生成Ｉ／Ｏ相互接続バス等のバスとされ得るが、本発明の範囲がそのように限定されることはない。 
【００８９】
図１１に示されるように、様々なＩ／Ｏデバイス１１１４が、第１のバス１１１６を第２のバス１１２０に結合するバスブリッジ１１１８とともに、第１のバス１１１６に結合されてもよい。１つの実施形態において、コプロセッサ、ハイスループットＭＩＣプロセッサ、ＧＰＧＰＵのアクセラレータ（例えば、グラフィクスアクセラレータもしくはデジタル信号処理（ＤＳＰ）ユニットなど）、フィールドプログラム可能ゲートアレイまたは任意の他のプロセッサなどの１または複数の追加のプロセッサ１１１５が、第１のバス１１１６に結合される。１つの実施形態において、第２のバス１１２０は、ローピンカウント（ＬＰＣ）バスであってもよい。例えば、キーボードおよび／またはマウス１１２２、通信デバイス１１２７、およびディスクドライブ、または複数の命令／コードおよびデータ１１３０を含みうる他の大容量ストレージデバイスなどのストレージユニット１１２８を含む様々な複数のデバイスが、１つの実施形態において、第２のバス１１２０に結合されてもよい。さらに、オーディオＩ／Ｏ１１２４が、第２のバス１１２０に結合されてもよい。なお、複数の他のアーキテクチャが、可能である。例えば、図１１のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装してよい。 
【００９０】
ここで、図１２を参照すると、本発明の実施形態による第２のより特定の例示的システム１２００のブロック図が示される。図１１および図１２における同様の構成要素は同様の参照番号を有しており、図１１の特定の態様は、図１２の他の態様の不明瞭化を回避するべく、図１２から省略されている。 
【００９１】
図１２は、プロセッサ１１７０、１１８０はそれぞれ、統合メモリおよびＩ／Ｏ制御ロジック（「ＣＬ」）１１７２および１１８２を含み得ることを示す。従って、ＣＬ１１７２、１１８２は、複数の統合メモリコントローラユニットを含み、かつ、Ｉ／Ｏ制御ロジックを含む。図１２は、メモリ１１３２、１１３４がＣＬ１１７２、１１８２に結合されるのみならず、複数のＩ／Ｏデバイス１２１４もまた制御ロジック１１７２、１１８２に結合されることを示す。レガシーＩ／Ｏデバイス１２１５は、チップセット１１９０に結合されている。 
【００９２】
ここで、図１３を参照すると、本発明の実施形態によるＳｏＣ１３００のブロック図が示される。図９における複数の同様の構成要素には、同様の参照番号が付される。  また、複数の点線で囲まれたボックスは、より高度なＳｏＣ上の任意のフィーチャである。図１３では、相互接続ユニット１３０２は、１または複数のコア２０２Ａ−Ｎおよび共有キャッシュユニット９０６のセットを含むアプリケーションプロセッサ１３１０、システムエージェントユニット９１０、バスコントローラユニット９１６、統合メモリコントローラユニット９１４、統合グラフィクスロジック、画像プロセッサ、オーディオプロセッサおよびビデオプロセッサを含み得る１または複数のコプロセッサ１３２０またはそのセット、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット１３３０、ダイレクトメモリアクセス（ＤＭＡ）ユニット１３３２および１または複数の外部ディスプレイに結合するためのディスプレイユニット１３４０に結合される。１つの実施形態において、コプロセッサ１３２０は、専用プロセッサ、例えば、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、ハイスループットＭＩＣプロセッサ、埋め込みプロセッサ等を含む。 
【００９３】
本明細書に開示される複数の機構の複数の実施形態は、ハードウェア、ソフトウェア、ファームウェアまたはそのような複数の実装アプローチの組み合わせで実装され得る。本発明の複数の実施形態は、少なくとも１つのプロセッサ、ストレージシステム（揮発性および不揮発性メモリおよび／またはストレージ要素を含む）、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスを備えるプログラム可能なシステム上で実行されるコンピュータプログラムまたはプログラムコードとして実装され得る。
【００９４】
図１１に示されるコード１１３０などのプログラムコードは、本明細書中に説明される複数の機能を実行し、出力情報を生成するべく、複数の入力命令に適用されてよい。出力情報は、１または複数の出力デバイスに、既知のやり方で適用され得る。このアプリケーションの目的のために、処理システムは、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
【００９５】
プログラムコードは、処理システムと通信するべく、高水準の手順型またはオブジェクト指向プログラミング言語で実装されてよい。プログラムコードは、所望ならば、アセンブリまたは機械言語で実装されてもよい。実際に、本明細書において説明される複数の機構は、その範囲において、何らかの特定のプログラミング言語に限定されるものではない。どの場合であっても、言語はコンパイラ型またはインタプリタ型言語であってよい。 
【００９６】
少なくとも１つの実施形態の１または複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体上に格納された複数の代表的命令によって実装されてよく、複数の代表的命令は、機械によって読み取られる場合、機械に、本明細書において説明される複数の技術を実行するロジックを作成させる。そのような表現は、「ＩＰコア」として知られており、有形で機械可読型の媒体に格納されているとしてよく、ロジックまたはプロセッサを実際に製造する製造機械にロードするべく、様々な顧客または製造設備に供給されるとしてよい。 
【００９７】
そのような機械可読記憶媒体は、限定されないが、機械またはデバイスで製造または形成される、非一時的で有形の物品の配列を含むとしてよく、ハードディスク、任意の他のタイプのディスク、例えば、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリーメモリ（ＣＤ−ＲＯＭ）、コンパクトディスクリライタブル（ＣＤ−ＲＷ）および光磁気ディスク、リードオンリーメモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）などのランダムアクセスメモリ（ＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、消去可能プラグラム可能リードオンリーメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラム可能リードオンリーメモリ（ＥＥＰＲＯＭ）、相変化メモリ（ＰＣＭ）などの半導体デバイス、磁気カードもしくは光カード、または、電子命令を格納するのに適切な任意の他のタイプの媒体等の記憶媒体を含む。 
【００９８】
従って、本発明の複数の実施形態はまた、複数の命令を含む、または本明細書に説明される複数の構造、回路、装置、プロセッサおよび／またはシステムのフィーチャを定義するハードウェア記述言語（ＨＤＬ）などの設計データを含む非一時的かつ有形の機械可読媒体を含む。そのような実施形態はまた、プログラム製品とも呼ばれてよい。
［エミュレーション（バイナリ変換、コードモーフィングなどを含む）］ 
【００９９】
いくつかの場合、命令コンバータは、ソース命令セットからターゲット命令セットに命令を変換するために用いられてよい。例えば、命令コンバータは、命令を、コアによって処理されるべき１または複数の他の命令にトランスレート（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて）、モーフィング、エミュレート、または別のやり方で変換してよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはその組み合わせで実装されてよい。命令コンバータは、オンプロセッサ、オフプロセッサ、または、部分オン・部分オフプロセッサであるとしてよい。
【０１００】
図１４は、本発明の複数の実施形態による、ソース命令セット内の複数のバイナリ命令をターゲット命令セット内の複数のバイナリ命令に変換するソフトウェア命令コンバータの使用を対比させるブロック図である。図示された実施形態では、命令コンバータは、ソフトウェア命令コンバータであるが、代わりに、命令コンバータは、ソフトウェア、ファームウェア、ハードウェアまたはこれらの様々な組み合わせで実装されてよい。図１４は、高水準言語１４０２のプログラムが少なくとも１つのｘ８６命令セットコア１４１６を有するプロセッサによってネイティブで実行され得るｘ８６バイナリコード１４０６を生成するべく、ｘ８６コンパイラ１４０４を用いてコンパイルされ得ることを示す。少なくとも１つのｘ８６命令セットコア１４１６を有するプロセッサは、少なくとも１つのｘ８６命令セットコアを有するインテル（登録商標）プロセッサと実質的に同じ結果を出すべく、（１）インテル（登録商標）のｘ８６命令セットコアの命令セットの大部分、または（２）複数のアプリケーションのオブジェクトコードバージョン、もしくは少なくとも１つのｘ８６命令セットコアを有するインテル（登録商標）プロセッサ上で実行されることが想定された他のソフトウェアを互換可能に実行または別のやり方で処理することにより、少なくとも１つのｘ８６命令セットコアを有するインテル（登録商標）プロセッサと実質的に同じ複数の機能を実行可能な任意のプロセッサを表す。ｘ８６コンパイラ１４０４は、追加のリンケージ処理を用い、もしくは用いずに、少なくとも１つのｘ８６命令セットコア１４１６を用いるプロセッサ上で実行され得る、ｘ８６バイナリコード１４０６（例えば、オブジェクトコード）を生成するように動作可能なコンパイラを表す。同様に、図１４は、少なくとも１つのｘ８６命令セットコアを有さないプロセッサ１４１４（例えば、カリフォルニア州サニーベールのＭＩＰＳテクノロジーズ（ＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ）のＭＩＰＳの命令セットを実行する、および／またはカリフォルニア州サニーベールのＡＲＭホールディングス（ＡＲＭ  Ｈｏｌｄｉｎｇｓ）のＡＲＭの命令セットを実行する複数のコアを有するプロセッサ）によってネイティブで実行され得る、代替的な命令セットバイナリコード１４１０を生成するべく、代替的な命令セットコンパイラ１４０８を使用してコンパイルされ得る高水準言語１４０２のプログラムを示す。命令コンバータ１４１２は、ｘ８６バイナリコード１４０６を、ｘ８６命令セットコアを有さないプロセッサ１４１４によってネイティブで実行され得るコードに変換するために使用される。この変換されたコードは、これが可能な命令コンバータの作成は難しいため、代替的な命令セットバイナリコード１４１０と同じとなる可能性は低いが、しかしながら変換されたコードは、一般的なオペレーションを達成し、代替的な命令セットからの複数の命令により補完される。従って、命令コンバータ１４１２は、エミュレーション、シミュレーションまたは任意のその他の処理を用いて、ｘ８６命令セットプロセッサまたはコアを持たないプロセッサまたはその他の電子デバイスが、ｘ８６バイナリコード１４０６を実行することを��能にするためのソフトウェア、ファームウェア、ハードウェアまたはその組み合わせを表す。 
【０１０１】
図１向けに説明された構成要素、フィーチャ、および詳細はまた、図２−３および／または図４−５のいずれかに任意で適用され得る。さらに、装置のいずれかに対して説明されている構成要素、フィーチャ、および詳細はまた、そのような装置によって、および／またはそれを用いて実行され得る方法のいずれかに任意で適用され得る。システムのいずれかは、本明細書中に説明されるシステムのいずれかを含み得、本明細書中に説明されるプロセッサのいずれかは、これらのシステムのいずれかに含まれ得る（例えば、図９−１３）。 
【０１０２】
明細書および特許請求の範囲では、用語「結合されるおよび／または「接続されるがそれらの派生語とともに使用されている場合がある。これらの用語は、互いに同義語であることを意図されていない。むしろ、複数の実施形態において、「接続」は、２つまたはそれより多くの要素が互いに直接物理的および／または電気的に接触していることを示すために用いられてよい。「結合」は、２つまたはそれより多くの要素が互いに直接物理的および／または電気的に接触していることを意味してよい。しかしながら、「結合された」は、２つまたはそれより多くの要素が、互いに直接的に接触しないが、さらになお互いに協働または相互作用することも意味し得る。例えば、実行ユニットは、１または複数の介在する構成要素を介してデコードユニットと結合し得る。図では、接続および結合を示すために矢印が用いられている。 
【０１０３】
明細書および／または特許請求の範囲にて、「ロジック」、「ユニット」または「構成要素」なる用語が、使用されてよい。これらの用語の各々は、ハードウェア、ファームウェアまたはその様々な組み合わせを指すべく使用され得る。例示的な実施形態において、これらの用語の各々は、命令を含む集積回路、特定用途向け集積回路、アナログ回路、デジタル回路、プログラムされたロジックデバイス、メモリデバイスなどと、それの様々な組み合わせを指し得る。いくつかの実施形態において、これらは、少なくともあるハードウェア（例えば、トランジスタ、ゲート、他の回路構成要素など）を含み得る。
【０１０４】
用語「および／または」が用いられていてよい。本明細書で使用するとき、用語「および／または」は、一方または他方あるいは両方を意味する（例えば、Ａおよび／またはＢは、ＡまたはＢあるいはＡおよびＢの両方を意味する）。 
【０１０５】
上記の説明では、具体的な詳細が複数の実施形態の完全な理解を提供するべく明らかにされた。しかしながら、複数の他の実施形態は、これらの具体的な詳細のいくつかを用いることなく実施されてよい。本発明の範囲は、上記に提供された具体例によって判定されるのではなく、以下に添付された特許請求の範囲によってのみ判定される。複数の他の例において、説明の理解に対する不明瞭化を回避すべく、周知の回路、構造、デバイス、および／またはオペレーションは、ブロック図の形式で、または詳細なく示されている。適切と考えられる場合には、参照番号または参照番号の末尾部分が、対応するかまたは類似の要素を示すべく複数図面にわたって反復して使用されているが、それらはオプションとして、別段の指定があるか、または明らかにそれ以外となる場合を除いて類似の、または同じの特性を任意で有することがあり得る。 
【０１０６】
複数の特定のオペレーションは、ハードウェア構成要素によって実行されてよく、または機械実行可能もしくは回路実行可能命令で具現化されてよい。機械実行可能もしくは回路実行可能命令は、複数のオペレーションを実行する命令でプログラムされた機械、回路、またはハードウェア構成要素（例えば、プロセッサ、プロセッサの一部、回路など）を生じさせ、および／またはもたらすために用いられてよい。複数のオペレーションはまた、任意で、ハードウェアおよびソフトウェアの組み合わせによって実行されてよい。プロセッサ、機械、回路またはハードウェアは、特有または特定の回路を含み得、他のロジック（例えば、ファームウェアおよび／またはソフトウェアと潜在的に組み合わされたハードウェア）は、命令を実行処理および／または処理し、命令に応答して結果を格納するべく動作可能である。
【０１０７】
いくつかの実施形態は、機械可読媒体を含む製造物品（例えば、コンピュータプログラム製品）を含む。媒体は、機械によって可読な形式で情報を提供する、例えば格納する機構を含み得る。機械可読媒体は、機械によって実行される、および／または実行される場合、本明細書に開示されている１または複数の動作、方法、または技術を機械に実行させ、および／またはそれらを実行する機械をもたらすべく動作可能である命令、または命令シーケンスを提供するか、またはそれらをその上に格納しておき得る。
【０１０８】
いくつかの実施形態において、機械可読媒体は非一時的機械可読記憶媒体を含んでよい。例えば、非一時的機械可読記憶媒体としては、フロッピー（登録商標）ディスケット、光記憶媒体、光ディスク、光学式データストレージデバイス、ＣＤ−ＲＯＭ、磁気ディスク、光磁気ディスク、リードオンリーメモリ（ＲＯＭ）、プログラム可能ＲＯＭ（ＰＲＯＭ）、消去可能プログラム可能ＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラム可能ＲＯＭ（ＥＥＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、フラッシュメモリ、相変化メモリ、相変化データストレージ材料、不揮発性メモリ、不揮発性データストレージデバイス、非一時的メモリ、非一時的データストレージデバイス等を含み得る。非一時的機械可読記憶媒体は、一時的な伝搬信号から構成されるものではない。いくつかの実施形態において、記憶媒体は、固体物質を含む有形媒体を含み得。 
【０１０９】
複数の適切な機械の複数の例は、限定されるものではないが、汎用プロセッサ、専用プロセッサ、デジタル論理回路、集積回路等を含む。複数の適切な機械の複数のさらに他の例は、プロセッサ、デジタル論理回路または集積回路を含むコンピュータシステムまたは他の電子デバイスを含む。そのようなコンピュータシステムまたは電子デバイスの例としては、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレット型コンピュータ、ネットブック、スマートフォン、携帯電話、サーバ、ネットワークデバイス（例えば、ルータおよびスイッチ）、モバイルインターネットデバイス（ＭＩＤ）、メディアプレーヤ、スマートテレビ、ネットトップ、セットトップボックス、およびビデオゲームコントローラが挙げられるが、これらに限定されるものではない。
【０１１０】
本明細書の全体における、「１つの実施形態」、「実施形態」、「１または複数の実施形態」、「いくつかの実施形態」という言及は、例えば、特定のフィーチャが本発明の実施に含まれてよいが、必ずしも必要とされるものではないことを示す。同様に、本明細書では、開示のストリームライン化および様々な発明の態様の理解の助けを目的として、様々なフィーチャが時には単一の実施形態、図、またはその説明にて一緒にグループ化される。しかしながら、本開示の方法は、本発明が各請求項において明白に記載されたものよりも多くのフィーチャを必要とするという意図を反映するものと解釈されるべきではない。むしろ、以下の特許請求の範囲が反映するように、複数の発明の態様は、単一の開示された実施形態の全てのフィーチャの一部に存する。従って、詳細な説明に続く特許請求の範囲は、各請求項が本発明の別個の実施形態として自立してありながら、ここに明白にこの詳細な説明に組み込まれる。
［例示的な実施形態］
【０１１１】
以下の複数の例は、さらなる実施形態に関する。これらの例に示されている詳細は、１または複数の実施形態のどこかに使用してもよい。
【０１１２】
例１は、例外ハンドラ復帰命令をデコードするデコードユニットを含むプロセッサまたは他の装置である。装置はまた、デコードユニットと結合する例外ハンドラ復帰実行ユニットを含む。例外ハンドラ復帰実行ユニットは、例外ハンドラ復帰命令に応答して、例外ハンドラ復帰命令に対応する例外がＮＭＩハンドラ内に取り入れられた場合、次に受信されるマスク不可割り込み（ＮＭＩ）のＮＭＩハンドラへの配信を有効にするようにプロセッサを設定しない。例外ハンドラ復帰実行ユニットは、例外ハンドラ復帰命令に応答して、例外がＮＭＩハンドラ内に取り入れられなかった場合、次に受信されるＮＭＩのＮＭＩハンドラへの配信を有効にするようにプロセッサを設定する。
【０１１３】
例２は、例１のプロセッサを含み、例外ハンドラ復帰命令に応答して、例外が、メモリから取り出された（例えば、スタックからポップされた）例外に対応する例外フレームにおいて例外がＮＭＩハンドラ内に取り入れられたかどうかの保存された指示をチェックし、保存された指示に部分的に基づいて次に受信されたＮＭＩの配信を有効にするようにプロセッサを設定するかどうかを判定する、保存されたＮＭＩ指示チェッカユニットをさらに含む。
【０１１４】
例３は、例２のプロセッサを含み、任意で、例外ハンドラ復帰命令に応答して、保存されたＮＭＩ指示チェッカユニットは、保存された指示が第１値を有する場合、次に受信されるＮＭＩの配信を有効にするようにプロセッサを設定しないことを判定し、または、保存された指示が第２の異なる値を有する場合、次に受信されるＮＭＩの配信を有効にするようにプロセッサを設定することを判定する。
【０１１５】
例４は、例２のプロセッサを含み、任意で、保存された指示は、プロセッサのフラグレジスタにおける１または複数の相手ビットに対応しない例外フレームの位置を有する。
【０１１６】
例５は、例２のプロセッサを含み、任意で、保存された指示は、プロセッサのフラグレジスタにおける１または複数のリザーブされたビットに対応する例外フレームの位置を有するが、任意で、プロセッサは、フラグレジスタにおける１または複数のリザーブされたビットをまだリザーブする。
【０１１７】
例６は、例１のプロセッサを含み、任意で、例外ハンドラ復帰実行ユニットは、例外ハンドラ復帰命令に応答して、プロセッサのＮＭＩ無効制御の保存されたコピーである保存されたＮＭＩ無効制御をチェックするとし、ＮＭＩの配信を交互に有効および延期にするように使用される。例外ハンドラ復帰実行ユニットは、例外ハンドラ復帰命令に応答して、例外がプロセッサのＮＭＩ無効制御を変更することによりＮＭＩハンドラ内に取り入れられなかった場合、次に受信されるＮＭＩのＮＭＩハンドラへの配信を有効にするようにプロセッサを設定する。
【０１１８】
例７は、例１から６のうちのいずれか１つのプロセッサを含み、例外ハンドラ復帰命令に応答して、ネスト型ＮＭＩ防止機構を選択的に有効および無効にするネスト型ＮＭＩ防止有効制御をチェックするネスト型ＮＭＩ防止有効制御チェッカユニットをさらに含む。機構は、有効にされた場合、例外がＮＭＩハンドラ内に取り入れられたかどうかに基づいて次に受信されるＮＭＩの配信の有効を条件付ける例外ハンドラ復帰実行ユニットを含む。
【０１１９】
例８は、例１から６のうちのいずれか１つのプロセッサを含み、任意で、例外ハンドラ復帰命令は、ＮＭＩハンドラからの復帰にも使用されるオペコードを有する。
【０１２０】
例９は、マスク不可割り込み（ＮＭＩ）ハンドラ内に取り入れられなかった第１例外に対応する例外ハンドラからの復帰に使用されている第１例外ハンドラ復帰命令を受信する工程を含むプロセッサの方法である。方法は、第１例外ハンドラ復帰命令に応答して次に受信されるＮＭＩの配信を有効にするようにプロセッサを設定する工程を含む。方法はまた、ＮＭＩハンドラ内に取り入れられた第２例外に対応する例外ハンドラからの復帰に使用されている第２例外ハンドラ復帰命令を受信する工程を含む。方法は、第２例外ハンドラ復帰命令に応答して次に受信されるＮＭＩの配信を有効にするようにプロセッサを設定しない工程を含む。 
【０１２１】
例１０は、例９の方法を含み、第２例外ハンドラ復帰命令に応答して、メモリから取り出された例外フレームにおいて、第２例外がＮＭＩハンドラ内に取り入れられるとの保存された指示をチェックする工程をさらに含む。 
【０１２２】
例１１は、例１０の方法を含み、任意で、保存された指示をチェックする工程は、プロセッサのフラグレジスタの１または複数のビットの相手セットを有しない例外フレームの１または複数のビットのセットの保存された指示をチェックする工程を含む。
【０１２３】
例１２は、例１０の方法を含み、任意で、保存された指示をチェックする工程は、プロセッサのフラグレジスタの１または複数のリザーブされたビットのセットに対応する例外フレームの１または複数のビットのセットに保存された指示をチェックする工程を含む。
【０１２４】
例１３は、例９の方法を含み、任意で、第１例外ハンドラ復帰命令に応答して次に受信されるＮＭＩの配信を有効にするようにプロセッサを設定する工程は、ＮＭＩ無効制御を変更する工程を含む。ＮＭＩ無効制御はまた、ＮＭＩハンドラに配信されるＮＭＩに応答するプロセッサによって変更される。 
【０１２５】
例１４は、例外がＮＭＩハンドラ内に取り入れられたかどうかを判定するマスク不可割り込み（ＮＭＩ）判定ユニットを含むプロセッサまたは他の装置である。装置はまた、ＮＭＩ判定ユニットと結合するＮＭＩ保存ユニットを含む。ＮＭＩ保存ユニット例外がＮＭＩハンドラ内に取り入れられたかどうかの指示を保存する。
【０１２６】
例１５は、例１４のプロセッサを含み、任意で、ＮＭＩ保存ユニットは、プロセッサのＮＭＩ無効制御を保存するためのＮＭＩ無効制御保存ユニットを含む。ＮＭＩ無効制御は、ＮＭＩの配信を交互に一時的に有効化および無効化するために使用される。
【０１２７】
例１６は、例１５のプロセッサを含み、任意で、ＮＭＩ保存ユニットは、メモリに（例えば、スタック構造上に）格納される例外フレームにおいて例外がＮＭＩハンドラ内に取り入れられたかどうかの指示を保存する。 
【０１２８】
例１７は、例１６のプロセッサを含み、任意で、ＮＭＩ保存ユニットは、プロセッサのフラグレジスタに１または複数のビットの相手セットを有しない例外フレームの１または複数のビットのセットに指示を保存する。
【０１２９】
例１８は、例１６のプロセッサを含み、任意で、ＮＭＩ保存ユニットは、プロセッサのフラグレジスタの１または複数のリザーブされたビットのセットに対応する例外フレームの１または複数のビットのセットに指示を保存する。
【０１３０】
例１９は、例１４のプロセッサを含み、任意で、ＮＭＩ判定ユニットは、プロセッサのＮＭＩ無効制御をチェックすることにより、例外がＮＭＩハンドラ内に取り入れられたかどうかを判定するＮＭＩ無効制御判定ユニットフラグレジスタを含む。ＮＭＩ無効制御は、ＮＭＩの配信を交互に一時的に無効化および有効化するように使用される。
【０１３１】
例２０は、例１４から１９のうちのいずれか１つのプロセッサを含み、ネスト型ＮＭＩ防止機構を選択的に有効および無効にする、プロセッサのネスト型ＮＭＩ防止有効制御をチェックするネスト型ＮＭＩ防止有効制御チェッカユニットをさらに含む。ネスト型ＮＭＩ防止機構は、有効にされた場合、例外がＮＭＩハンドラ内に取り入れられたかどうかの指示を保存するＮＭＩ保存ユニットを含み、有効にされない場合、指示を保存するＮＭＩ保存ユニットを含まない。
【０１３２】
実施例２１は、相互接続と、この相互接続と結合されるプロセッサとを含む命令を処理するシステムである。プロセッサは、例外ハンドラ復帰命令を受信する。プロセッサは、例外ハンドラ復帰命令に応答して、例外ハンドラ復帰命令に対応する例外がＮＭＩハンドラ内に取り入れられた場合、次に受信されるマスク不可割り込み（ＮＭＩ）のＮＭＩハンドラへの配信を延期するように設定されるプロセッサを保持する。プロセッサは、命令に応答して、例外がＮＭＩハンドラ内に取り入れられなかった場合、次に受信されるＮＭＩをＮＭＩハンドラに配信するようにプロセッサを設定する。システムはまた、相互接続と結合されたダイナミックランダムアクセスメモリ（ＤＲＡＭ）を含む。
【０１３３】
例２２は、例２１のシステムを含み、任意で、プロセッサは、例外ハンドラ復帰命令に応答して、メモリ（例えば、スタック）から取り出された例外に対応する例外フレームにおいて、例外がＮＭＩハンドラ内に取り入れられたかどうかの保存された指示をチェックする。
【０１３４】
例２３は、非一時的機械可読記憶媒体を含む製造品である。非一時的機械可読記憶媒体は、例外ハンドラ復帰命令を格納する。例外ハンドラ復帰命令は、機械によって実行される場合、例外ハンドラ復帰命令に対応する例外がＮＭＩハンドラ内に取り入れられた場合、次に受信されるマスク不可割り込み（ＮＭＩ）のＮＭＩハンドラへの配信を延期する工程を含む動作を機械に実行させる。動作はまた、例外がＮＭＩハンドラ内に取り入れられなかった場合、次に受信されるＮＭＩをＮＭＩハンドラに配信する工程を含む。
【０１３５】
例２４は、例２３の製造品を含み、任意で、例外ハンドラ復帰命令は、機械によって実行される場合、メモリ（例えば、スタック）から受信された例外に対応する例外フレームにおいて、例外がＮＭＩハンドラ内に取り入れられたかどうかの保存された指示をチェックする工程を含む動作を機械に実行させる。
【０１３６】
例２５は、例９から１３のうちのいずれか１つの方法を実行するように動作するプロセッサまたは他の装置である。
【０１３７】
例２６は、例９から１３のうちのいずれか１つの方法を実行するための手段を包含するプロセッサまたは他の装置である。
【０１３８】
例２７は、例９から１３のうちのいずれか１つの方法を実行するためのユニットおよび／またはロジックおよび／または回路および／または手段の任意の組み合わせを含むプロセッサである。
【０１３９】
例２８は、任意で命令を格納するか、別のやり方でそれを提供する任意で非一時的機械可読媒体を含む製造品であり、非一時的機械可読媒体は、プロセッサ、コンピュータシステム、電子デバイスまたは他の機械によって実行される、および／または、場合なら、例９から１３のうちのいずれか１つの方法を機械に実行させるように動作する。
【０１４０】
例２９は、バスまたは他の相互接続を含むコンピュータシステム、他の電子デバイスまたは他の装置であり、例１から８のうちのいずれか１つのプロセッサは相互接続と結合され、少なくとも１つの構成要素は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、ネットワークインターフェース、グラフィクスチップ、無線通信チップ、モバイル通信用のグローバルシステム（ＧＳＭ（登録商標））アンテナ、相変化メモリおよびビデオカメラから選択される相互接続と結合される。例３０は、本明細書中に実質的に説明されるプロセッサまたは他の装置である。
【０１４１】
例３１は、実質的に本明細書中に説明されている任意の方法を実行するべく動作するプロセッサまたは他の装置である。 
【０１４２】
例３２は、実質的に本明細書中に説明されるように、任意の例外ハンドラ復帰命令を実行するべく動作するプロセッサまたは他の装置である。
【図１】
0006508851.tif 000002
【図２】
0006508851.tif 000003
【図３】
0006508851.tif 000004
【図４】
0006508851.tif 000005
【図５】
0006508851.tif 000006
【図６】
0006508851.tif 000007
【図７Ａ】
0006508851.tif 000008
【図７Ｂ】
0006508851.tif 000009
【図８Ａ】
0006508851.tif 000010
【図８Ｂ】
0006508851.tif 000011
【図９】
0006508851.tif 000012
【図１０】
0006508851.tif 000013
【図１１】
0006508851.tif 000014
【図１２】
0006508851.tif 000015
【図１３】
0006508851.tif 000016
【図１４】
0006508851.tif 000017