プロセッサでのNMIの操作に伴う1つの課題は、例外からの復帰時にさらなるNMIの配信が早期に有効とされる場合があることである。背景技術にて論じたように、NMIの受信時に、特定のプロセッサは、NMIを操作する責任があるNMIハンドラが実行を完了しており、制御フローを発信プログラムまたはタスクに復帰するまで、NMI割り込みを含む他の割り込みが、受信されないことを保証するよう試みるべく特定のハードウェア条件を起動し得る。例えば、プロセッサは、ソフトウェア不可視NMI無効制御(例えば、NMI無効ビット)によって次のNMIの配信を一時的に無効化または延期すること(用語「マスク不可」と一致する)によりNMIの受信に応答し得る。NMIハンドラが(例えば、IRET命令または他のNMIハンドラ復帰命令を使用して)復帰した場合、プロセッサは、(例えば、NMI無効ビットをクリアすることにより)さらなるNMIの配信を再有効化するべくNMI無効制御を設定(コンフィギュア)し得る。しかしながら、例外からの復帰も、NMI無効制御がさらなるNMIの配信を(例えば、NMI無効ビットをクリアすることにより)再有効化するように設定してよい。例えば、NMIハンドラおよび例外ハンドラの両方は、復帰がハンドラからプログラムまたはタスクに復帰するべく、同じ命令(例えば、IRET命令または他のハンドラ復帰命令)を用いてよく、この復帰命令は、復帰がNMIまたは例外からかどうかに関わらず(例えば、NMI無効ビットをクリアすることにより)さらなるNMIの配信を再有効化するべくNMI無効制御を設定してよい。たとえ同じ命令がNMIおよび例外ハンドラの両方から復帰するべく使用されなくても、例外ハンドラからの復帰がさらなるNMIの配信を再有効化し得ることは、可能なままである。
結果として、NMIを操作している間(例えば、NMIハンドラがNMIを操作している間で、NMIハンドラが復帰する前)に、例外が取り入れられた場合、それが復帰する場合の例外ハンドラは、次のNMIの配信を早期に再有効化し得る。さらに、例えば、ページフォールト、機械チェックの例外、または他のタイプの例外に起因してなど、NMI内に例外が発生することはまれではない。さらなるNMI配信のそのような早期の再有効化に対する1つの潜在的な問題は、NMIハンドラが、先に配信されたNMIの操作(例えば、NMIハンドラのネスト型実行)を完了する前に、第2NMIがNMIハンドラに配信されることを可能にすることにより、NMIがネスト化するのを不注意に許可することである。これにより、NMIの処理は、ネスト型NMIと十分に互換性がないプロセッサのタスクゲート、割り込みスタックテーブル(IST)または他のフィーチャに依存し得るので、オペレーティングシステムの不安定性および/または潜在的に致命的なエラーを引き起こす傾向があり得る。これにより、プロセッサが、機械チェック例外NMI(#MC)などのNMIおよび例外が通常同時に存在するように期待される高信頼性環境にて使用される場合に、とりわけ問題となる傾向があり得る。
本明細書中に、例外からの復帰時にマスク不可割り込みの早期有効化を回避する方法、装置、システムおよび命令が開示される。以下の説明において、多くの具体的な詳細が、明らかにされる(例えば、特定のマイクロアーキテクチャ上の詳細、オペレーションシーケンス、命令オペレーションなど)。しかしながら、複数の実施形態は、これらの具体的な詳細がなくても実施し得る。他の例では、周知の回路、構造および技術は、本明細書の理解が不明瞭になることを回避するべく、詳細に示されていない。
図1は、本発明の複数の実施形態が実装され得るコンピュータシステム100の実施形態のブロック図である。様々な実施形態において、コンピュータシステムは、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレット型コンピュータ、ネットブック、スマートフォン、携帯電話、サーバ、ネットワークデバイス(例えば、ルータ、スイッチなど)、メディアプレーヤ、スマートテレビ、ネットトップ、セットトップボックス、ビデオゲームコントローラ、あるいは当技術分野にて既知の他のタイプの電子デバイスを表してよい。コンピュータシステムは、プロセッサ102およびメモリ130を含む。プロセッサおよびメモリは結合されるか、別のやり方で、従来の結合機構125によって(例えば、1または複数のバス、ハブ、メモリコントローラ、チップセット構成要素等を介して)、互いに通信する。
いくつかの実施形態において、プロセッサ102は、汎用プロセッサ(例えば、デスクトップ、ラップトップ、または複数の他のコンピュータにおいて使用されるタイプの汎用マイクロプロセッサまたは中央処理ユニット(CPU))であり得る。あるいは、プロセッサは、専用プロセッサであり得る。好適な専用プロセッサの例は、限定されるものではないが、ネットワークプロセッサ、通信プロセッサ、クリプトグラフィックプロセッサ、グラフィクスプロセッサ、コプロセッサ、埋め込みプロセッサ、デジタル信号プロセッサ(DSP)およびコントローラ(例えば、マイクロコントローラ)を含む。プロセッサは、様々な複合命令セットコンピューティング(CISC)アーキテクチャ、縮小命令セットコンピューティング(RISC)アーキテクチャ、超長命令語(VLIW)アーキテクチャ、ハイブリッドアーキテクチャ、他のタイプのアーキテクチャのうちのいずれか、または、異なるアーキテクチャの組み合わせ(例えば、異なるコアは異なるアーキテクチャを有し得る)を有し得る。
メモリ130は、1または複数の異なるメモリデバイスおよび/または1または複数の異なるタイプのメモリを含み得る。例えば、いくつかの実施形態において、メモリは、ダイナミックランダムアクセスメモリ(DRAM)を含み得るが、複数の他の実施形態において、メモリは、フラッシュメモリを含み得る。メモリは、オペレーティングシステム(OS)モジュール132を含む。単一のOSモジュールが示されるが、複数の他の実施形態は、2またはそれよりも多いOSモジュールを任意で含み得、および/または、仮想機械マネージャ(VMM)モジュール、ハイパーバイザモジュール等を任意で含み得る。OSモジュールは、NMIハンドラモジュール134および例外ハンドラモジュール136を含む。メモリはまた、例えば、ワード処理アプリケーション、表計算アプリケーション、図面アプリケーション、電子メールアプリケーションなどのような1または複数のアプリケーションモジュール142を含む。メモリはまた、アクティブルーチンが実行を完了する場合にアクティブルーチンが制御を復帰するべきポイントのトラックを保持するのを助けるべく、コンピュータプログラムのアクティブルーチンについての情報を格納するように利用され得る1または複数のスタック構造144を有する。スタック構造はまた、時には、呼び出しスタック構造、実行スタック構造、起動時スタック構造、機械スタック構造、または単にスタックと呼ばれる。
動作中に、実行中のソフトウェア104は、プロセッサ上で実行し得る。実行中のソフトウェアは、メモリ(例えば、OSモジュールおよび/またはアプリケーションモジュール)からロードされ、実行パイプライン106(例えば、デコーダ、実行ユニットなど)によって実行されるプロセッサの命令セットのマクロ命令または命令を含み得る。実行中のソフトウェアは、例えば、フラグレジスタ、プログラムカウンタ、コードセグメントセレクタ、汎用レジスタ、パック型データレジスタ、他のアーキテクチャレジスタなどの関連するアーキテクチャ状態108を利用し得る。
動作中、プロセッサは、マスク不可割り込み(NMI)に遭遇し得る。NMIは、複数の異なる実施形態では異なる方法で遭遇され得る。いくつかの実施形態において、プロセッサは、NMIに対応するイべント121を受信するべく割り込みおよび例外ユニット110を含み得る。例えば、割り込みおよび例外ユニット110は、様々な内部および/または外部ソースからのイべント121を収集し、イベントを割り込みまたは例外(例えば、NMI、非NMI割り込み、例外、システム管理割り込み(SMI)など)にマッピングするプログラム可能割り込みコントローラ(例えば、ローカル進化型プログラム可能割り込みコントローラ(LAPIC))と、割り込みおよび例外を受信および処理する割り込みおよび/または例外ユニットを含み得るが、本発明の範囲はそのように限定されない。別の例として、NMI120は、プロセッサの1または複数のピン116上の外部構成要素124(例えば、入力/出力デバイス、周辺デバイス、別のプロセッサなど)からプロセッサに受信され得る。いくつかの場合、NMI120の受信専用のピンを設けてもよい。ピンで受信されたNMI120は、割り込みおよび例外ユニット110に提供され得る。さらに別の例として、いくつかの場合に、割り込みおよび例外ユニット110(例えば、プログラム可能割り込みコントローラ)は任意でタイマ(図示せず)を有し、タイマーは、デバッグ作業、プロファイリングまたは別のやり方でNMIを生成するように使用され得る。複数の他のプロセッサは、説明された割り込みおよび例外ユニット110に加えて様々な他の既知の割り込みおよび例外操作機能を有し得る。プロセッサは、NMIハンドラモジュール134に呼び出し126をすることにより、これらの様々な異なる方法で受信されたNMIの操作を開始し得る。例えば、プロセッサは、NMIに対応する割り込みベクトルを見つけるべくプロセッサの割り込みおよび/または例外記述子テーブル構造または他の構造を参照し得、見つけられた割り込みベクトルに対応するNMIハンドラを次に呼び出し得る。インテル(登録商標)アーキテクチャの特定の場合において、NMIは、割り込みベクトル2に割り当てられる。NMIハンドラモジュールは、NMIを操作するか、これをサービスし始め得る。
プロセッサはまた、ネスト型NMI防止ユニット149を有する。ネスト型NMI防止ユニット(例えば、NMI無効制御構成ユニット112)は、NMI(例えば、前述のソースのうちのいずれかから)が発生した指示121を受信し得る。NMI121の指示に応答して、プロセッサおよび/またはネスト型NMI防止ユニットは、さらなるNMIの配信を一時的に無効化または延期することによりネスト型NMIを防止し得る。いくつかの実施形態において、ネスト型NMI防止ユニットは、NMI無効制御114を有し得る。NMI無効制御は、さらなるNMIの配信を交互に有効化または延期するべく、ビット、ビットセット、モードまたはハードウェア条件を広く表し得る。例えば、NMI無効ビットまたはビットセットは、さらなるNMIの配信を有効にするべく第1値(例えば、ビットはバイナリ・ゼロにクリアされ得る)を有し得、あるいは、さらなるNMIの配信を一時的に無効化または延期するべく第2の異なる値(例えば、ビットはバイナリ1にセットされ得る)を有し得る。いくつかの実施形態において、ネスト型NMI防止ユニットは、NMI無効制御構成ユニット112を有し、さらなるNMIの配信を交互に有効化または延期するべくNMI無効制御114を設定し得る。NMI121の指示に応答して、NMI無効制御構成ユニット112は、さらなるNMIの配信を一時的に無効化または延期するべく、NMI無効制御114を設定するように動作し得る(例えば、単一ビットをバイナリ1にセットし得る)。代表的には、NMI無効制御は、次のNMIの配信を一時的に阻止または無効化にするように設定される場合、割り込みおよび例外ユニット110(またはそのロジックまたは回路)に次のNMIの配信を一時的に阻止または延期させるか、割り込みおよび例外ユニット110を設定し得る。単一ビットで十分であり得るが、2またはより多くのビットが任意で使用され得ることと、1つのビットまたは2またはより多くのビットの任意の所望の値が、有効および無効にされた状態を表すべく任意の所望される慣例に従って使用され得ることとは理解されるべきである。図示例では、NMI無効制御構成ユニットおよびNMI無効制御は、別個のユニットであるように示されているが、複数の他の実施形態において、それらは例示されたユニット(例えば、割り込みおよび例外ユニット110において)のうちの1つに任意で含まれ得る。
NMI(例えば、NMI120)がNMIハンドラモジュール134によって操作またはサービスされている間に、例外118が発生し得る。いくつかの実施形態において、実行パイプライン106が実行中のソフトウェア104の処理命令である間に、例外は発生し得る。好適なタイプの例外の例は、フォールト、トラップおよびアボートを含む。例外がフォールト、トラップまたはアボートと分類されるかどうかは、1つの実装から別の実装へと変わり得、および/または、例外が発生する異なる状況に基づいて変わり得る。多くの場合、フォールトおよびトラップは、例外を引き起こしたプログラムまたはタスクの実行が通常、プログラムまたはタスクの連続性の損失なく再開され得るフォールトおよびトラップの例外に関係する。多くの場合、フォールトは、通常修正されることができるフォールトの例外を表す。異なるタイプのフォールトの例は、限定されるものではないが、ページフォールト、一般的な保護フォールト、セグメント不在、スタックセグメントフォールト、分割エラー、無効または未定義のオペコード、数値計算コプロセッサ利用不可、数値計算フォールト、アライメントチェックフォールト、SIMD浮動小数点例外フォールト、仮想化例外フォールトなどを含む。多くの場合、トラップは、トラップを引き起こした命令が完了した後、配信されるトラップの例外を表す。異なるタイプのトラップの例は、限定されるものではないが、ブレイクポイントトランプおよびオーバーフロートラップを含む。フォールトおよびトラップとは対照的に、多くの場合、アボートは、例外を引き起こしたプログラムまたはタスクが、プログラムまたはタスクの連続性の損失なく再開されることをしばしば許可しないそれらの例外を表す。多くの場合、アボートは、それから回復するのが困難である異常なイベントを指す。異なるタイプのアボートの例は、限定されるものではないが、二重フォールトアボートおよびマシンチェックアボートを含む。
例外は、割り込みおよび例外ユニット110に提供され得る。割り込みおよび例外ユニット、または、例外の受信に応答したプロセッサは、例外ハンドラモジュール136に呼び出し128をすることにより例外の操作を開始し得る。例えば、プロセッサは、例外に対応するベクトルを見つけるべくプロセッサの割り込みおよび/または例外記述子テーブル構造または他の構造を参照し得、次に見つけられたベクトルに対応する例外ハンドラを呼び出し得る。
ネスト型NMI防止ユニット149は、NMI判定ユニット138およびNMI保存ユニット140の実施形態を有する。これらの構成要素の各々は、ハードウェア(例えば、集積回路)、ファームウェア(例えば、不揮発性ストレージ上に格納されたマイクロコードまたは複数の他の命令またはコード)、あるいはその組み合わせにて実装され得る。NMI判定ユニットは、例外118がNMI内に取り入れられた(例えば、NMIハンドラ134の実行中)かどうかを判定するように動作し得る。いくつかの実施形態において、NMI判定ユニットは、この判定をするべく、NMI無効制御114と結合され、これをチェックするように動作し得る。NMI無効制御が、さらなるNMIの配信が一時的に無効化または延期されるべきであることを示す場合、NMI判定ユニットは、例外118がNMI(例えば、NMI120)内に取り入れられたことを推定し得る。逆に、NMI無効制御114が、さらなるNMIの配信が延期されないことを示す場合、NMI判定ユニットは、例外118がNMI内に取り入れられなかったことを推定し得る。本例において、例外118は、NMI内に取り入れられたので(例えば、NMIハンドラモジュールが呼び出された後であるが、NMIの操作を完了し、割り込まれたプログラムまたはタスクに復帰することが可能であった前)、NMI判定ユニット138は、例外がNMI内(例えば、NMIハンドラ実行内)に取り入れられたことを判定する。
図1を再度参照すると、ネスト型NMI防止ユニット149はまた、NMI保存ユニット140を有する。NMI保存ユニットは、NMI判定ユニット138と結合されるか、別のやり方でそれと通信し得る。NMI保存ユニットは、例外がNMI内に取り入れられた場合、例外がNMI内に取り入れられた指示を格納するか、別のやり方で保存するべく動作し得る。いくつかの実施形態において、1ビットまたはビットセットは、例外がNMI内に取り入れられたことを示すべく、第1値(例えば、単一ビットがバイナリ1にセットされるか、(代わりに、バイナリ・ゼロにクリアされ)得る)を有し得、あるいは、例外がNMI内に取り入れられなかったことを示すべく、第2の異なる値(例えば、単一ビットがバイナリ・ゼロにクリアされるか、(代わりに、バイナリ1にセットされ得る)を有し得る。例外がNMI内に取り入れられたか、取り入れられなかったとの指示を保存することはまた、さらなるNMIの配信が延期されるべきか、延期されるべきではないとの指示を保存するか、および/または、NMI無効制御114の値を保存するものと見なされてもよい。例えば、例外がNMI内に取り入れられた場合、例外はNMI無効制御の第1値に対応し得るが、例外がNMI内に取り入れられなかった場合、例外はNMI無効制御の第2の、異なる値に対応し得る。
指示は、異なる実施形態の様々な異なる場所に格納または保存され得る。いくつかの実施形態において、指示は、メモリに(例えば、スタック構造(例えば、スタック構造144)に)格納されることになる例外フレームに格納されるか、別のやり方で保存され得る。図示されるように、いくつかの実施形態において、NMI保存ユニット140は任意で、例外フレーム生成ユニット150の一部であり得る。あるいは、NMI保存ユニットは任意で、例外フレーム生成ユニットから分離され得るが、それと結合され得、別のやり方で例外フレーム生成ユニットと通信し得る。スタック構造上の例外フレームの指示を格納する1つの利点は、スタック構造が、利用され得るネスト化用のネイティブ組込みサポートを既に有し得ることである。別のオプションとして、複数の他の実施形態において、指示は、タスク状態セグメント(TSS)または類似の構造に(例えば、例外フレームまたは他のデータ構造に)格納または保存され得る。TSSは、タスクについての情報を格納するべく使用され、タスク管理用のオペレーティングシステムモジュールによって使用される構造を表し得る。例えば、OSモジュールは、タスク切り替えによってTSSについての情報を格納し得る。また、保存された指示、TSSに格納され得る他の情報は、例えば、プロセッサレジスタ状態、I/Oポート許可、内部レベルスタックポインタ、前のTSSリンクなどを含む。さらなる複数の実施形態において、指示は、例外ハンドラ内か、それにアクセス可能なデータ構造(例えば、メモリ130のある場所内)に格納されるか、別のやり方で保存され得る。そのような実施形態において、指示はまた、例外フレームおよびその関連内容(例えば、保存されたアーキテクチャ状態)と関連することを可能にするのに十分な情報を含み得る。さらなる他の実施形態において、指示は、プロセッサと例外ハンドラモジュールとの間の情報を通過するスタック上の例外フレームの代わり、および/またはそれに加えて使用される例外状態と潜在的に一緒に、プロセッサレジスタに格納されるか、別のやり方で保存され得る。
有利には、さらに以下に説明されるように、例外がNMI内に取り入れられたか否かの指示を保存することは、例外ハンドラからの復帰時に、さらなるNMIの迅速な配信を再有効化するか否かを条件付きで判定するべく使用され得る。例えば、プロセッサによって実行されている場合の例外ハンドラ復帰命令は、例外がNMI操作中に取り入れられなかった場合、さらなるNMIの即時配信を再有効化し得るが、例外がNMI操作中に取り入れられた場合、さらなるNMIの配信を再有効化することを控え得る。そのような条件下でさらなるNMIの配信を再有効化することを控えることにより、NMIのネスト化およびそれから起こり得る関連した問題を防止するべく役立ち得る。
いくつかの実施形態において、NMI配信の早期有効化の防止に役立つ例外ハンドラモジュール136の前述の機能は、常に有効にされるか、オンにされ得る。複数の他の実施形態において、この機能は、例えば、オペレーティングシステムまたは他の特権のあるおよび/またはシステムレベルのソフトウェアによって、有効かつ無効にされるように設定され得る。例えば、プロセッサは任意で、ネスト型NMI防止有効制御122を有し得る。ネスト型NMI防止有効制御は、例えば、ネスト型NMI防止機能/機構(例えば、例外ハンドラモジュールの前述の機能を含む)を有効にするべく、第1値(例えば、単一ビットがバイナリ1にセットされるか、(代わりに、バイナリ・ゼロにクリアされ)得る)を有し得る1または複数のビット、または、ネスト型NMI防止機能/機構を無効にするべく、第2の異なる値(例えば、単一ビットがバイナリ・ゼロにクリアされるか、(代わりに、バイナリ1にセットされ得る))を有し得る1または複数のビットを含み得る。そのようにして、システムは、特定の実装向けに所望されるこの機能/機構を用いるか、用いないかのいずれかとなり得る。
図2は、例外が、(例えば、例外フレーム254の)NMIハンドラ内に取り入れられたか否かの指示256を保存することにより、ネスト型NMIの防止を助けるべく動作可能であるネスト型NMI防止ユニット249の実施形態のブロック図である。この実施形態において、例外がNMIハンドラ内に取り入れたかどうかの指示256は、保存されたNMI無効制御値256として実装される。
ネスト型NMI防止ユニット249は、NMI無効制御値を判定するべく動作し得るNMI無効制御判定ユニット240を含む。これは、同様に、または、代わりに、例外ハンドラモジュールへの呼び出しに対応する例外がNMIハンドラ内に取り入れられたか否かを判定するように見なされ得る。NMI無効制御判定ユニットは、NMI無効制御214(例えば、NMI無効制御114)と結合するか、別のやり方で通信し得る。
ネスト型NMI防止ユニット249はまた、NMI無効制御保存ユニット240を含む。NMI無効制御保存ユニットは、現在のNMI無効制御値を受信するべく、NMI無効制御判定ユニットと結合するか、別のやり方でそれと通信する。
図示されるように、いくつかの実施形態において、NMI無効制御保存ユニットは任意で、例外フレーム生成ユニット250の一部であり得る。例外フレーム生成ユニットは、例外用の例外フレーム254を生成するべく動作し、メモリの例外フレームを格納する(例えば、例外フレームをスタック構造244の上にプッシュするか、別のやり方で例外フレームを格納する)。例外フレームは、例外フレームに従来見出されたタイプのアーキテクチャ状態209を含み得る。例えば、このアーキテクチャ状態は、復帰命令ポインタ、復帰コードセグメントセレクタおよびプロセッサフラグのコピーを含み得る。そのような実施形態において、NMI無効制御保存ユニットは、保存されたNMI無効制御256として例外フレームに格納されるか、別のやり方で例外フレームに含まれるNMI無効制御値214の保存されたコピーを有するべく動作し得る。あるいは、保存されたNMI無効制御は、前述のように、プロセッサレジスタに保存され得る。
1つの具体例として、NMI無効制御値が、さらなるNMIの配信が例外ハンドラへの加入時に現在既に延期されていることを示すバイナリ1の値を有する単一ビットである場合、保存されたNMI無効制御はまた、例外がNMIハンドラに取り入れられたこと示す、および/または例外ハンドラへのエントリ時に、NMIが現在既に延期されていることを示すバイナリ1の値を有する単一ビットを含み得る。前述のように、1または複数のビット用のどの特定の値が使用されるかは、主として採用された慣例の事項であり、1または複数のビット用の特定の値が採用された慣例に従って互いに対応するロジックによって理解される限り、それらはプロセッサのNMI無効制御214および保存されたNMI無効制御用に採用された同じ慣例であり得るが、その必要はない。
いくつかの実施形態において、保存されたNMI無効制御256は、例外フレーム254の1または複数のビットを表し得る。いくつかの実施形態において、これらの1または複数のビットは、ある他の用途のために既に使用済みではない例外フレームの任意の前に使用されていない(例えば、アーキテクチャ状態209に対して既に使用済みではない)ビットであり得る。様々な前に使用されていないビットは任意で、使用され得る。いくつかの実施形態において、保存されたNMI無効制御256は、プロセッサの実際のアーキテクチャ状態での1または複数のビットの相手セットを有しない場合がある(例えば、プロセッサのフラグレジスタの1または複数のビットの相手セットがない場合がある)。追加フラグをプロセッサのフラグレジスタに加えることは(例えば、互換性の理由で)あまり所望されない。フラグレジスタの1または複数のビットの相手セットを有しない例外フレームの1または複数のビットのセットを使用することにより、互換性の困難さを課すことなく、NMI無効制御214の保存を可能にし得る。いくつかの実施形態において、保存されたNMI無効制御256用に使用される例外フレームの1または複数のビットのセットは、プロセッサのフラグレジスタでのリザーブされたビットではない場合がある。他の実施形態において、保存されたNMI無効制御256用に使用される例外フレームの1または複数のビットのセットは、プロセッサのフラグレジスタでのリザーブされたビットに対応する例外フレームの位置を有し得るが、いくつかの実施形態において、プロセッサは、実際のフラグレジスタのこれらの相手ビットをまだリザーブするか、用いない場合がある。あるいは、1または複数のビットは、プロセッサのフラグレジスタに任意で追加され、所望ならば、例外フレーム254のアーキテクチャ状態209の間の相手ビットを有し得る。本発明の実施形態は、例外がNMIおよび/または保存されたNMI無効制御内に取り入れられたか否かの保存された指示を有する例外フレームデータ構造に関する。
いくつかの実施形態において、ネスト型NMI防止ユニット249は任意で、ネスト型NMI防止有効制御チェッカユニット252を有し得る。ネスト型NMI防止有効制御チェッカユニットは、任意のネスト型NMI防止有効制御222(例えば、任意のネスト型NMI防止有効制御122)と結合され得、それをチェックし得、ネスト型NMI防止および/またはNMI無効制御の保存が現在有効とされているか、無効とされているか否かを判定する。任意のネスト型NMI防止有効制御チェッカユニットは、NMI無効制御保存ユニット240と結合するか、別のやり方でこれと通信する。ネスト型NMI防止および/またはNMI無効制御の保存が現在無効にされている場合、チェッカモジュール252は、NMI無効制御保存ユニットに、例外フレームの保存されたNMI無効制御を含まないことをシグナリングし得、または、別のやり方で、NMI無効制御を含むことをNMI無効制御保存ユニットにシグナリングし得る。
図3は、例外がNMIハンドラ内で取り入れられた指示を保存する方法357の実施形態のブロックフロー図である。いくつかの実施形態において、方法357は、図1のネスト型NMI防止ユニット149および/または図2のネスト型NMI防止ユニット249によって、および/またはその内部で実行され得る。ネスト型NMI防止ユニット149、249用の本明細書中に説明される構成要素、フィーチャ、特定の任意の詳細はまた、任意で、方法357に適用される。あるいは、方法357は、同様または異なるユニットまたは他の装置によって、および/またはその内部で実行され得る。さらにユニット149、249は、方法357と同じ、類似、または異なる方法を実行し得る。
方法は、ブロック358で、例外がNMIハンドラ内に取り入れられたことを判定する工程を含む。いくつかの実施形態において、この判定は、プロセッサのNMI無効制御をチェックすることによりなされ得る。いくつかの実施形態において、チェックされるNMI無効制御は、プロセッサがNMIの受信時のさらなるNMIの配信を延期するように設定する特性を有し得る。
方法は、ブロック359で、例外は、NMIハンドラ内に取り入れられた指示を保存する工程を含む。いくつかの実施形態において、指示は、メモリに格納される(例えば、スタック構造の上に押される)ことになる例外フレームに保存され得る。いくつかの実施形態において、指示は、プロセッサのフラグレジスタの1または複数のビットの相手セットを有しない例外フレームの1または複数のビットのセットに保存され得る。いくつかの実施形態において、指示は、プロセッサのフラグレジスタの1または複数のリザーブされたビットのセットに対応する例外フレームの1または複数のビットのセットに保存され得るが、プロセッサは、実際にそれらを使用する代わりにこれらのビットの使用をまだリザーブし得る。いくつかの実施形態において、指示は、プロセッサのNMI無効制御のNMI無効制御値であり得る。
図4は、例外ハンドラ復帰命令460の実施形態を実行するプロセッサの実施形態402の実施形態のブロック図である。プロセッサは、前述のタイプのプロセッサ(例えば、汎用プロセッサまたは専用プロセッサ)のうちのいずれであってもよい。動作中に、プロセッサは、例外ハンドラ復帰命令を受信し得る。例えば、命令は、メモリから相互接続によって受信され得る。命令は、マクロ命令、アセンブリ言語命令、機械コード命令、またはプロセッサの命令セットの他の命令もしくは制御信号を表してよい。いくつかの実施形態において、命令は、例外ハンドラモジュールの終わりに含まれるべきであり、制御フローを例外ハンドラモジュールから例外によって割り込まれたプログラムまたはタスクに復帰するように使用されるべきである命令を表し得る。命令は、本明細書中で例外ハンドラ復帰命令と呼ばれるが、それはまた任意で、割り込みハンドラ復帰命令(例えば、例外および割り込みの両方から復帰するために用いられる命令)であり得る。
プロセッサは、デコードユニットまたはデコーダ462を含む。デコードユニットは、例外ハンドラ復帰命令460を受信およびデコードし得る。デコードユニットは、1または複数の比較的低レベルの命令または制御信号(例えば、1または複数のマイクロ命令、マイクロオペレーション、マイクロコードエントリポイント、デコードされた命令または制御信号など)を出力し得、これらの命令または制御信号は、比較的高レベルの例外ハンドラ復帰命令を反映し、表し、および/またはそれから導出される。いくつかの実施形態において、デコードユニットは、命令を受信する1または複数の入力構造(例えば、ポート、相互接続、インターフェース)と、命令を認識およびデコードするべくそれと結合される命令認識およびデコードロジックと、低レベルの命令または制御信号を出力するべくそれと結合される1または複数の出力構造(例えば、ポート、相互接続、インターフェース)とを含み得る。デコードユニットは、マイクロコードリードオンリーメモリ(ROM)、ルックアップテーブル、ハードウェア実装、プログラム可能ロジックアレイ(PLA)、および当技術分野にて既知のデコードユニットを実装するために用いられる他の機構を含むが、これらに限定されるものではなく、様々な異なる機構を用いて実装され得る。
例外ハンドラ復帰実行ユニット464は、デコードユニット462と結合される。例外ハンドラ復帰実行ユニットは、例外ハンドラ復帰命令を表す、および/またはこれから導出される1または複数のデコードされた、もしくは別のやり方で変換された命令または制御信号を受信し得る。例外ハンドラ復帰実行ユニットはまた、保存されたNMI無効制御456(例えば、命令は、保存されたNMI無効制御456を有する例外フレーム454にスタックからポップされるか、別のやり方でプロセッサ中に受信させられ得)を受信するか、別のやり方で保存されたNMI無効制御456にアクセスし得る。例外ハンドラ復帰実行ユニットは、任意のネスト型NMI防止有効制御チェッカユニット466を有する。ネスト型NMI防止有効制御チェッカユニットは、プロセッサのネスト型NMI防止有効制御422と結合され、ネスト型NMI防止が有効化または無効化されるかどうかを判定するべくチェックし得る。ネスト型NMI防止が無効にされた場合、例外ハンドラ復帰実行ユニットは、いくつかの実施形態において、NMI無効制御412を保存されたNMI無効制御456に関わらず、NMIの配信を有効化するように設定し得る。
逆に、ネスト型NMI防止が有効にされた場合、例外ハンドラ復帰実行ユニット464(例えば、NMI無効制御構成ユニット412)は、いくつかの実施形態において、保存されたNMI無効制御456に依存または基づいてさらなるNMIの配信を有効化または延期するようにNMI無効制御414を設定し得る。いくつかの実施形態において、保存されたNMI無効制御チェッカユニット468は、保存されたNMI無効制御をチェックまたは検査し得る。いくつかの実施形態において、保存されたNMI無効制御は、ポップされるか、別のやり方で取り出される例外フレーム454中にあり得、チェッカユニットは、例外フレームをチェックまたは検査し得る。あるいは、保存されたNMI無効制御は、(例えば、取り出された例外フレームから)既に引き出され、実行ユニットに提供されている場合がある。保存されたNMI無効制御は、例外ハンドラ復帰命令が復帰するべく使用された例外ハンドラに対応する例外が、NMIハンドラ内に取り入れられたか否かを示し得る。NMI無効制御構成ユニットは、保存されたNMI無効制御チェッカユニットと結合される。NMI無効制御構成ユニットは、NMI無効制御414を設定しない例外ハンドラ復帰命令(例えば、それからデコードされた1または複数の命令または制御信号に応答して)に応答して、および/またはそれの結果として動作し、例外がNMIハンドラ内に取り入れられた場合、および/または保存されたNMI無効制御456が、さらなるNMIの配信が保存の時点で一時的に無効化または延期されたことを示す場合、次に受信されるNMIの配信を有効にする。
逆に、NMI無効制御構成ユニット412は、NMI無効制御414を設定する例外ハンドラ復帰命令460に応答して、および/またはそれの結果として動作し、例外がNMIハンドラ内に取り入れられなかった場合、および/または保存されたNMI無効制御456が、さらなるNMIの配信が保存の時点で有効にされたことを示す場合、次に受信されるNMIの配信を有効にする。従って、例外ハンドラ復帰実行ユニットは、例外ハンドラ復帰命令に応答して、保存されたNMI無効制御が、例外がNMI内に受信されたか、受信されなかったことを示すかどうかに基づいてさらなるNMIの配信を有効にするか、有効にしないかのいずれかにし得る。例えば、保存されたNMI無効制御が第1値を有する場合、さらなるNMIの配信が有効にされ得るが、保存されたNMI無効制御が第2の異なる値を有する場合、さらなるNMIの配信が有効にされ得ず、それゆえまだ延期され得る。例外復帰命令に応答して、実行ユニットはまた、他の従来のオペレーション、例えば、例外フレームからプロセッサのアーキテクチャ状態へのアーキテクチャ状態を復元すること(例えば、例外フレームからの値でプロセッサのプログラムカウンタをロードすること、プロセッサのフラグレジスタを例外フレームからの値でロードすること、など)のようなオペレーションを実行し得る。
NMI無効制御構成ユニット412および/またはプロセッサは、特有または特定のロジック(例えば、トランジスタ、集積回路、またはファームウェア(例えば、不揮発性メモリに格納される命令)および/またはソフトウェアと潜在的に組み合わされる他のハードウェア)を含み、ロジックは、例外ハンドラ復帰命令に応答して、および/またはそれの結果として(例えば、それからデコードされた1または複数の命令または制御信号に応答して)例外ハンドラ復帰命令を実行、および/またはNMI無効制御を設定するよう動作可能である。いくつかの実施形態において、NMI無効制御構成ユニットは、デコードされた命令および関連データを受信する1または複数の入力構造(例えば、ポート、相互接続、インターフェース)と、それと結合して、デコードされた命令および関連データを受信および処理する回路またはロジック(例えば、ステートマシーン)と、NMI無効制御を設定するべく出力信号を提供する1または複数の出力構造(例えば、ポート、相互接続、インターフェース)とを含み得る。
有利には、例外がNMI操作内に取り入れられたか否かに基づいてさらなるNMIの配信を条件付きで有効にするそのような機能は、NMIのネスト化および本明細書の他の場所に説明される関連した潜在的な問題を回避するのに役立ち得る。さらに、オペレーティングシステムまたは他の特権のあるソフトウェアは、NMI無効ビットを直接セットする必要はなく、これは原形がそこなわれたソフトウェアの場合には可能性のあるリスクを負わせる場合がある。むしろ、さらなるNMIの配信は、プロセッサのロジックがさらなるNMIを既に無効にしている場合、無効のままとされるように許可され得るにすぎない。
説明の不明瞭化を回避すべく、比較的に簡単なプロセッサが図示および説明されている。しかしながら、プロセッサが、任意で他の周知のプロセッサ構成要素を含んでもよい。そのような構成要素の可能な例は、限定されるものではないが、汎用レジスタ、状態レジスタ(時に、フラグレジスタと呼ばれる)、プログラムカウンタレジスタ、セグメントレジスタ、システム制御レジスタ、命令フェッチユニット、プレフェッチバッファ、キャッシュの1または複数レベル(例えば、レベル1(L1)命令キャッシュ、L1データキャッシュおよびL2データ/命令キャッシュ)、命令トランスレーションルックアサイドバッファ(TLB)、データTLB、分岐予測ユニット、アウトオブオーダ実行ユニット(例えば、命令スケジューラユニット、レジスタリネーミングおよび/または割り当てユニット、命令ディスパッチユニット、リオーダバッファ(ROB)、リザベーションステーション、メモリオーダバッファ、リタイアメントユニットなど)、バスインターフェースユニット、アドレス生成ユニット、デバッグユニット、パフォーマンスモニタユニット、パワー管理ユニット、外部ピン、プロセッサに含まれる他の構成要素、およびその様々な組み合わせを含む。そのような構成要素は、様々な異なる適切組み合わせおよび/または当技術分野に既知の構成にて一緒に結合され得る。実施形態は、そのような任意の既知の組み合わせまたは構成に限定されるものではない。さらに、実施形態は、複数のコアを有するプロセッサに含まれ得、複数のコアのうちの少なくとも1つは、本明細書中に説明される例外ハンドラ復帰命令の実施形態を実行するように動作する。
図5は、例外ハンドラ復帰命令の実施形態を実行するプロセッサの方法595の実施形態のブロックフロー図である。いくつかの実施形態において、方法595は、図1のプロセッサ102および/または図4のプロセッサ402によって、および/またはその内部で実行され得る。プロセッサ102、402用に本明細書に説明されている構成要素、フィーチャ、および特定の任意の詳細はまた方法595に任意で適用される。あるいは、方法595は、同様または異なるプロセッサまたは装置によって、および/またはその内部で実行され得る。さらに、プロセッサ102、402は、方法595と同じ、同様、またはそれとは異なる方法を実行し得る。
方法は、ブロック596で、例外ハンドラ復帰命令の第1インスタンスを受信する工程を含む。第1例外ハンドラ復帰命令は、第1例外に対応する例外ハンドラから復帰するべく使用されており、この方法において、第1例外はNMIハンドラ内に取り入れられなかった。方法は、ブロック597で、第1例外ハンドラ復帰命令に応答して次に受信されるNMIの配信を有効にするプロセッサ(例えば、NMI無効制御によって)を設定する工程を含む。第1例外がNMIハンドラ内に取り入れられなかったので、次のNMIの配信が早期に有効とされ得るように、現在サービスされている未処理係属中のNMIはない。
方法は、ブロック598で、例外ハンドラ復帰命令の第2インスタンスを受信する。図示例にて示されないが、ブロック597−598の間で、複数の他のイべントが発生し得ることは理解されるべきである。例えば、NMIが受信され得、NMIハンドラへの呼び出しがなされ得、例外が受信され得るが、NMIハンドラにて、例外ハンドラへの呼び出しがなされ得、そして、例外ハンドラからの復帰は、ブロック598で受信された例外ハンドラ復帰命令の第2インスタンスを使用して実行され得る。すなわち、例外ハンドラ復帰命令の第2インスタンスは、NMIハンドラ内に取り入れられた第2例外に対応する例外ハンドラから復帰するべく使用されている。方法は、ブロック599で、プロセッサ(例えば、NMI無効制御によって)が、第2例外ハンドラ復帰命令に応答して次に受信されるNMIの配信を有効にするように設定しないこと、または、設定することを控える工程を含む。有利には、NMI無効制御を次に受信されるNMIの配信を有効にするように設定しない工程は、NMIおよび/またはネスト型NMIを早期に有効にすることを回避するのに役立ち得る。むしろ、次に受信されるNMIの配信は、NMIからの復帰までなお延期され得る。
例外ハンドラ復帰命令は、復帰中の例外がNMI操作中に取り入れられたか否かに依存して2つの異なる挙動を有し得ることに留意されたい。方法は、比較的基本的な形態で示される。しかしながら、複数のオペレーションが、方法に追加されるか、および/またはこれから取り除かれてよい。また、複数のオペレーションの特定の順序が示されているが、その特定の順序は例示的なものである。複数の他の実施形態は、異なる順序で複数のオペレーションを実行する、動作を重複させるなどをし得る。
図5−6向けに示され、説明されるフィーチャのいずれかを組み込むべく修正され得る適切な例外ハンドラ復帰命令の1つの特定の例示的な実施形態は、IRET割り込み復帰命令である。この命令は、オペランドサイズの16ビット、32ビットおよび64ビットに対して、それぞれニーモニックIRET、IRETDおよびIRETQによって参照することができる。大抵のアセンブラは、全てのオペランドサイズに対してIRETニーモニックを交換可能に使用する。ソフトウェアは、この命令を使用して、例外または割り込みハンドラから例外、外部割り込みまたはソフトウェア生成割り込みによって割り込まれたプログラムまたは手順へプログラム制御を復帰し得る。命令はまた、ネスト型タスクからの復帰を実行するべく使用され得る。ネスト型タスクは、CALL命令がタスク切り替えを開始するべく使用される場合、または、割り込みまたは例外が割り込みまたは例外ハンドラへのタスク切り替えを引き起こす場合に作成され得る。リアルアドレスモードにおいて、IRET命令は、割り込まれたプログラムまたは手順へのファーリターンを実行する。この動作中、プロセッサは、スタックからの復帰命令ポインタ、復帰コードセグメントセレクタ、およびEFLAGS画像をそれぞれ、拡張命令ポインタ(EIP)、コードセグメントセレクタ(CS)およびフラグ(EFLAGS)レジスタへとポップし、次に割り込まれたプログラムまたは手順の実行を再開する。保護されたモードにて、IRET命令の作用は、EFLAGSレジスタのNT(ネスト型タスク)およびVM(仮想8086モード)フラグ、コードセグメントセレクタのRPLフィールドからの現在の特権レベル(CPL)、現在のスタック上に格納されたEFLAGS画像のVMフラグ、および現在のスタック上のコードセグメントセレクタのRPLフィールドのセッティングに依存する。これらの値に応じて、プロセッサは、(1)仮想8086モードからの復帰、(2)仮想8086モードへの復帰、(3)特権内レベル復帰、(4)特権間レベル復帰、(5)ネスト型タスクからの復帰(タスク切り替え)から成る割り込み復帰のタイプのうちの1つを実行する。
NTフラグ(例えば、EFLAGSレジスタにおいて)がクリアされた場合、IRET命令は、タスク切り替えなしで、割り込み手順からのファーリターンを実行する。復帰中のコードセグメントは、(例えば、スタックからポップされたコードセグメントセレクタのRPLフィールドによって示されるように)割り込みハンドラルーチンと比較して概して等しいか、あまり特権化されていない。リアルアドレスモード割り込み復帰に関して、IRET命令は、スタックからの復帰命令ポインタ、復帰コードセグメントセレクタ、およびEFLAGS画像をそれぞれ、拡張命令ポインタ、コードセグメントセレクタおよびEFLAGSレジスタへとポップし、次に割り込まれたプログラムまたは手順の実行を再開する。復帰は、別の特権レベルに対してである場合、または、復帰が64ビットモードからである場合、IRET命令はまた、プログラム実行を再開する前に、スタックからのスタックポインタおよびセグメントセレクタをポップする。復帰は、仮想8086モードに対してである場合、プロセッサはまた、スタックからデータセグメントセレクタをポップする。
NTフラグ(例えば、EFLAGSレジスタにおいて)が、セットされた場合、IRET命令は、ネスト型タスク(CALL命令、割り込みまたは例外で呼び出されるタスク)から呼び出しまたは割り込まれたタスクに戻るタスク切り替え(復帰)を実行する。IRET命令を実行するタスクの更新状態は、そのTSSにセーブされる。タスクが後で再エンターされた場合、IRET命令に続くコードが実行される。NTフラグがセットされ、プロセッサがIA−32eモードにある場合、IRET命令は一般的な保護例外を引き起こし得る。
NMIが阻止された場合、IRET命令の実行は、NMIを解除する。この解除は、たとえ命令がフォールトを引き起こしても発生する。そのような場合、例外ハンドラが起動される前にNMIは、マスクが外される。
図6は、ネスト型NMI防止サポートモジュール680の実施形態を有するオペレーティングシステムモジュール632の実施形態のブロック図である。ネスト型NMI防止サポートモジュールは、プロセッサフィーチャサポートチェッカモジュール684である。プロセッサフィーチャサポートチェッカモジュールは、プロセッサの1または複数のプロセッサフィーチャサポートレジスタ682と結合するか、別のやり方で通信し得る。プロセッサは一般に、プロセッサのフィーチャおよび機能を特定するべく使用される1または複数のフィーチャサポートおよび/または識別レジスタを有する。プロセッサフィーチャサポートチェッカモジュールは、プロセッサがネスト型NMI防止機構/機能に対するサポートを有するか否かをチェックまたは判定するように動作し得る。例えば、プロセッサフィーチャサポートチェッカモジュールは、このチェックを実行するべく、プロセッサフィーチャ識別命令(例えば、CPUID命令等)を発行し得る。
ネスト型NMI防止サポートモジュールは任意で、ネスト型NMI防止有効制御構成モジュール686を含み得る。ネスト型NMI防止有効制御構成モジュールは、プロセッサのネスト型NMI防止有効制御622(例えば、ネスト型NMI防止有効制御122)と結合するか、別のやり方で、それと通信する。例として、ネスト型NMI防止有効制御は、モデル固有レジスタ、プロセッサの制御または構成レジスタ等に見つけられ得る。1つの態様において、ネスト型NMI防止有効制御は、非特権化またはアプリケーションレベルソフトウェアによってではなく、オペレーティングシステムまたは他の特権化レベルソフトウェアによって修正されることが可能な特権化レベル制御を表す。プロセッサがネスト型NMI防止機構/機能向けのサポートを有する場合、構成モジュール686は任意で、ネスト型NMI防止有効制御622がこの機構/機能を有効にするように設定し得る。あるいは、ある理由により、この機構/機能を有効にしないことが判定され得る。
ネスト型NMI防止サポートモジュールはまた、「回避策」無効モジュール688を任意で含み得る。回避策無効モジュールは、オペレーティングシステムモジュールの1または複数の回避策モジュール690と結合するか、別のやり方で通信する。これらの回避策モジュールは、ネスト型NMI操作と関連する問題を処理するか、これを回避するかを試みるべく、当技術分野にて既知の様々なアプローチのうちのいずれかを表し得る。例として、回避策モジュールは、NMIハンドラ内のネスト化を検出し、復帰命令(例えば、IRET命令)を実行することを回避するべく、各例外ハンドラにて対策を講じるように動作し得る。回避策モジュールは、不要なネスト型割り込みが実際に配信されることになった場合、特別なスタック操作などの効果を緩和するか、除去するように動作し得る。概して、そのような回避策は、複雑さおよび/またはパフォーマンスの点でコストを招く。いくつかの実施形態において、ネスト型NMI防止機構/機能が有効とされた場合、本明細書の他の場所に説明されるように、回避策無効モジュールは任意で、これらの回避策モジュールの1または複数を無効にし得るが、これは必要とされない。
本明細書中に説明される複数の実施形態は、NMIに対して主に説明されているが、複数の他の実施形態は、複数の他のタイプの割り込みに対して使用され得る。例えば、複数の実施形態は、システム管理割り込み(SMI)および/または他の比較的高い優先度の割り込み(例えば、NMIと同じくらい高い優先度、または、それよりも高い優先度)に適用可能である。SMIの可能な原因の例は、限定されるものではないが、指定されたSMIピン上のSMIをシグナリングする構成要素(例えば、マザーボード上のチップセット、ハードウェア)、システムハードウェアなどによって特別と見なされている特定の場所への入力/出力アクセスに起因してシステムソフトウェアによって引き起こされるソフトウェアSMIなどを含む。そのようなSMIは、システム管理モード(SMM)への加入を可能にし得る。SMMは、オペレーティングシステムの動作を含む通常の実行が一時的に停止されている異なる、孤立した動作モードまたは実行環境を表し、SMIハンドラおよび/または他のSMMコード(例えば、(例えば、基本入力・出力システム(BIOS))のファームウェアおよび/またはソフトウェア)は、オペレーティングシステムおよびユーザレベルのアプリケーションに対して透過的に高特権モードで実行され得る。代表的には、SMMコードは一般に、プロセッサの他の動作モードにアクセス不可であるアドレス空間から実行する。
前述したように、NMIの処理は、タスクゲート、割り込みスタックテーブル(IST)またはネスト型NMIと十分に互換性のないプロセッサの他のフィーチャに依存し得るので、オペレーティングシステムの不安定性、および/または潜在的に致命的なエラーを引き起こす場合がある、次のNMIの配信を早期の再有効化を防止することが概して望ましい。特定のシステムにおいて、SMIは、ファームウェア(例えば、BIOS)に実装されたSMIハンドラによって操作され得るが、NMIを含む大抵のまたは他の割り込み全てが、オペレーティングシステムによって典型的には操作される。その理由のため、SMIハンドラ(例えば、BIOSおよび/またはファームウェア)が、SMIを操作するように動作している間、NMIの配信を延期することが概して望ましい。これをサポートするべく、特定のプロセッサは、SMIを配信する場合、NMIの一時的な延期または阻止を有効化または設定し得る。SMIを操作している間(例えば、SMIハンドラがSMIを操作している間で、SMIハンドラが復帰する前)に、例外が取り入れられた場合、それが復帰する場合の例外ハンドラは、次のNMIの配信を早期に再有効化し得る。これにより、次のNMIは、それが代わりにオペレーティングシステム(例えば、NMIハンドラ)に配信されるべき場合に、SMIの操作中にBIOS/ファームウェア(すなわち、オペレーティングシステムへではない)に配信されることになり得る。いくつかの実施形態において、命令(例えば、BIOS例外ハンドラ復帰命令)は、本明細書中に開示されるものに類似した技術を使用して、NMIの配信を早期に再有効化することなく、BIOS例外ハンドラから復帰し得る。また、他のアーキテクチャが、SMIに類似した他のタイプの高優先度の割り込みを有してよく、これに本明細書中に説明される実施形態が適用可能であることは当業者なら理解するであろう。
[例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ]
複数のプロセッサコアは、複数の異なる方法で、複数の異なる目的のために、複数の異なるプロセッサにおいて実装され得る。例えば、そのような複数のコアの複数の実装は、(1)汎用コンピューティングを意図した汎用インオーダコア、(2)汎用コンピューティングを意図した高性能汎用アウトオブオーダコア、(3)グラフィクスおよび/または科学的(スループット)コンピューティングを主に意図した専用コアを含んでよい。 複数の異なるプロセッサの複数の実装は、1)汎用コンピューティングを意図した1または複数の汎用インオーダコアおよび/または汎用コンピューティングを意図した1または複数の汎用アウトオブオーダコアを含むCPUと、2)主にグラフィクスおよび/または科学的(スループット)を意図した1または複数の専用コアを含むコプロセッサとを含んでもよい。そのような複数の異なるプロセッサは、1)CPUとは別個のチップ上のコプロセッサ、2)CPUと同じパッケージ内で別個のダイ上のコプロセッサ、3)CPUと同じダイ上のコプロセッサ(この場合、そのようなコプロセッサは、時には統合グラフィクスおよび/または科学的(スループット)ロジックのような専用ロジック、または複数の専用コアと呼ばれる)、および4)同じダイ上で、説明されたCPU(時には、アプリケーションコアまたはアプリケーションプロセッサと呼ばれる)上述したコプロセッサおよび追加的な機能性を含み得るシステムオンチップを含み得、複数の異なるコンピュータシステムアーキテクチャをもたらす。次に例示的なコアアーキテクチャを説明し、その後、例示的なプロセッサおよびコンピュータアーキテクチャを説明する。
[例示的なコアアーキテクチャ]
[インオーダおよびアウトオブオーダコアのブロック図]
図7Aは、本発明の複数の実施形態による例示的なインオーダパイプラインおよび例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。図7Bは、本発明の複数の実施形態によるプロセッサに含まれるべきインオーダアーキテクチャコアの例示的な実施形態および例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。図7A−Bにおける実線で囲まれた複数のボックスは、インオーダパイプラインおよびインオーダコアを図示するが、複数の点線で囲まれたボックスの任意の追加により、レジスタリネーミング、アウトオブオーダ発行/実行パイプライン、およびコアを図示する。インオーダ態様はアウトオブオーダ態様のサブセットであると考え、アウトオブオーダ態様を説明する。
図7Aにおいて、プロセッサパイプライン700は、フェッチ段702、長さデコード段704、デコード段706、割り当て段708、リネーミング段710、スケジューラ段(ディスパッチ段または発行段として既知)712、レジスタ読み出し/メモリ読み出し段714、実行段716、書き戻し/メモリ書き込み段718、例外操作段722、および、コミット段724を含む。
図7Bは、実行エンジンユニット750に結合されるフロントエンドユニット730を含むプロセッサコア790を示し、両方ともメモリユニット770に結合される。コア790は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コアまたはハイブリッドもしくは代替的なコアタイプであってもよい。さらに別のオプションとして、コア790は、専用コア、例えば、ネットワークコアもしくは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィクス処理ユニット(GPGPU)コア、グラフィクスコア等であってよい。
フロントエンドユニット730は、命令キャッシュユニット734に結合された分岐予測ユニット732を含み、命令キャッシュユニット734は、命令トランスレーションルックアサイドバッファ(TLB)736に結合され、TLB736は、命令フェッチユニット738に結合され、命令フェッチユニット738は、デコードユニット740に結合される。デコードユニット740(またはデコーダ)は、複数の命令をデコードし、出力として、1または複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または元の複数の命令からデコードされた、もしくはこれらを別のやり方で反映する、もしくはこれらから導出された他の制御信号を生成してもよい。デコードユニット740は、複数の様々な異なる機構を用いて実装されてよい。複数の好適な機構の例は、限定されるものではないが、ルックアップテーブル、ハードウェア実装、プログラム可能ロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)などを含む。1つの実施形態において、コア790は、(例えば、デコードユニット740にて、またはフロントエンドユニット730内の別のやり方で)特定の複数のマクロ命令に対するマイクロコードを格納するマイクロコードROMまたは他の媒体を含む。デコードユニット740は、実行エンジンユニット750内のリネーム/アロケータユニット752に結合されている。
実行エンジンユニット750は、リタイアメントユニット754および1または複数のスケジューラユニット756のセットに結合されたリネーム/アロケータユニット752を含む。スケジューラユニット756は、リザベーションステーション、中央命令ウィンドウなどを含む任意の数の異なるスケジューラを表す。スケジューラユニット756は、物理レジスタファイルユニット758に結合される。複数の物理レジスタファイルユニット758の各々は、1または複数の物理レジスタファイルを表し、それらのうちの異なるものが、スカラ整数、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点、状態(例えば、実行される次の命令のアドレスである命令ポインタ)など、1または複数の異なるデータタイプを格納する。1つの実施形態において、物理レジスタファイルユニット758は、ベクトルレジスタユニット、書き込みマスクレジスタユニットおよびスカラレジスタユニットを備える。これらの複数のレジスタユニットは、複数のアーキテクチャ上のベクトルレジスタ、ベクトルマスクレジスタおよび汎用レジスタを提供してよい。物理レジスタファイルユニット758は、リタイアメントユニット754と重なり、レジスタリネーミングおよびアウトオブオーダ実行が(例えば、リオーダバッファおよびリタイアメントレジスタファイルを用いることにより、フューチャファイル、履歴バッファ、およびリタイアメントレジスタファイルを用いることにより、複数のレジスタのレジスタマップおよびプールなどを用いることにより)実装され得る様々な方法を図示する。リタイアメントユニット754および物理レジスタファイルユニット758は、実行クラスタ760に結合される。実行クラスタ760は、1または複数の実行ユニット762のセットおよび1または複数のメモリアクセスユニット764のセットを含む。複数の実行ユニット762は、複数の様々なタイプのデータ(例えば、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して、様々な複数のオペレーション(例えば、複数のシフト、加算、減算、乗算)を実行してよい。いくつかの実施形態は、複数の特定の機能または複数のセットの機能に専用のいくつかの実行ユニットを含み得が、複数の他の実施形態は、1つのみ実行ユニットまたは複数の実行ユニットを含み、それらの全てがあらゆる関数を実行し得る。スケジューラユニット756、物理レジスタファイルユニット758および実行クラスタ760は、複数として示される可能性があるが、その理由は、複数の特定の実施形態は、複数の特定のタイプのデータ/オペレーションに対して複数の個別のパイプラインを作成するからである(例えば、各々が自身のスケジューラユニット、物理レジスタファイルユニットおよび/または実行クラスタを有するスカラ整数パイプライン、スカラ浮動小数点/パック型整数/パック型浮動小数点/ベクトル整数/ベクトル浮動小数点パイプラインおよび/またはメモリアクセスパイプライン、および、別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット764を有する複数の特定の実施形態が実装される)。また、個別のパイプラインが用いられる場合、これらのパイプラインのうち1または複数のパイプラインはアウトオブオーダ発行/実行方式であり、残りはインオーダ方式であると理解されるべきである。
メモリアクセスユニット764のセットは、データTLBユニット772を含むメモリユニット770に結合され、データTLBユニット772は、データキャッシュユニット774に結合され、データキャッシュユニット774は、レベル2(L2)キャッシュユニット776に結合される。1つの例示的な実施形態において、メモリアクセスユニット764は、ロードユニット、格納アドレスユニットおよび格納データユニットを含んでもよく、これらの各々は、メモリユニット770内のデータTLBユニット772に結合される。命令キャッシュユニット734は、メモリユニット770内のレベル2(L2)キャッシュユニット776に、さらに結合される。L2キャッシュユニット776は、キャッシュの1または複数の他のレベルに結合されており、最終的にはメインメモリに結合されている。
一例として、例示的なレジスタリネーミングアウトオブオーダ発行/実行コアアーキテクチャは、以下のようにパイプライン700を実装するとしてよい。
1)命令フェッチ738は、フェッチ段702および長さデコード段704を実行する。
2)デコードユニット740は、デコード段706を実行する。
3)リネーム/アロケータユニット752は、割り当て段708およびリネーミング段710を実行する。
4)スケジューラユニット756は、スケジュール段712を実行する。
5)物理レジスタファイルユニット758およびメモリユニット770は、レジスタ読み出しし/メモリ読み出し段714を実行し、実行クラスタ760は、実行段716を実行する。
6)メモリユニット770および物理レジスタファイルユニット758は、書き戻し/メモリ書き込み段718を実行する。
7)例外操作段722には様々なユニットが関係される。
8)リタイアメントユニット754および物理レジスタファイルユニット758は、コミット段724を実行する。
コア790は、本明細書で説明される命令を含む1または複数の命令セット(例えば、x86命令セット(複数のより新しいバージョンで追加されたいくつかの拡張を有する)カリフォルニア州サニーベールのMIPSテクノロジーズのMIPS命令セット、カリフォルニア州サニーベールのARMホールディングスの(NEONのような任意の追加的な拡張を有する)ARM命令セット)をサポートしてもよい。1つの実施形態において、コア790が、パック型パック型データ命令セット拡張(例えば、AVX1、AVX2)をサポートするロジックを含み、それにより、多くのマルチメディアアプリケーションによって使用されるオペレーションがパック型データを使用して実行されることを可能にする。
コアは、マルチスレッド化(オペレーションまたはスレッドの2またはそれよりも多い並列のセットを実行)をサポートし得るものであって、様々な方法でそのようにマルチスレッド化を行い得ると理解されるべきである。例えば、タイムスライスマルチスレッド化、同時マルチスレッド化(単一物理コアが、当該物理コアが同時マルチスレッド化している複数のスレッドの各々に対する論理コアを提供する)、または、その組み合わせ(例えば、タイムスライス方式でフェッチおよびデコードして、その後で同時マルチスレッド化を実行、例えば、インテル(登録商標)社のようなハイパースレッド化技術)を含む。
レジスタリネーミングは、アウトオブオーダ実行の文脈で説明されるが、レジスタリネーミングは、インオーダアーキテクチャにおいて用いられ得ることを理解されるべきである。プロセッサの図示された実施形態は、別個の命令および複数のデータキャッシュユニット734/774、ならびに共有L2キャッシュユニット776も含むが、複数の代替的な実施形態は、例えば、レベル1(L1)内部キャッシュまたは内部キャッシュの複数のレベル等のように、命令およびデータの双方に対する単一の内部キャッシュを有し得る。いくつかの実施形態において、システムは、内部キャッシュ、およびコアおよび/またはプロセッサの外部にある外部キャッシュの組み合わせを含んでもよい。代わりに、全てのキャッシュは、コアおよび/またはプロセッサの外部にあるとしてよい。
[特定の例示的なインオーダコアアーキテクチャ]
図8A−Bは、より特定の例示的なインオーダコアアーキテクチャのブロック図を示し、ここで、コアは、チップ内のいくつかの論理ブロック(同じタイプおよび/または異なるタイプの他の複数のコアを含む)のうちの1つであってもよい。論理ブロックは、用途に応じて、高帯域幅相互接続ネットワーク(例えば、リングネットワーク)を介して、ある固定機能ロジック、メモリI/Oインターフェースおよび他の必要なI/Oロジックと通信する。
図8Aは、本発明の複数の実施形態による単一のプロセッサコアのブロック図であり、オンダイの相互接続ネットワーク802とのその接続およびそのレベル2(L2)キャッシュのローカルサブセット804とともに示される。1つの実施形態において、命令デコーダ800は、パック型データ命令セット拡張を有するx86命令セットをサポートする。L1キャッシュ806は、スカラおよびベクトルユニットへのキャッシュメモリに対する低レイテンシアクセスを可能とする。1つの実施形態において(設計を単純にするために)、スカラユニット808およびベクトルユニット810が、分離したレジスタセット(それぞれ、スカラレジスタ812およびベクトルレジスタ814)を用い、それらの間で転送されたデータはメモリに書き込まれ、次に、レベル1(L1)キャッシュ806から読み戻されるが、本発明の代替実施形態は異なるアプローチを用いてもよい(例えば、単一のレジスタセットを用いるか、またはデータを、書き込みおよび読み戻されず、2つのレジスタファイルの間で転送されることを可能にする通信経路を含む)。
L2キャッシュのローカルサブセット804は、1つのプロセッサコアあたり1つの別個のローカルサブセットに分割されるグローバルL2キャッシュの一部である。各プロセッサコアは、それ自身のL2キャッシュローカルサブセット804に対するダイレクトアクセス経路を有する。プロセッサコアにより読み出されたデータは、そのL2キャッシュサブセット804に格納され、迅速かつ、自身の複数のローカルL2キャッシュサブセットにアクセスする複数の他のプロセッサコアと並列に、アクセスされることができる。プロセッサコアに書き込まれたデータは、それ自身のL2キャッシュサブセット804に格納され、必要な場合には、他の複数のサブセットからフラッシュされる。 リングネットワークは、共有のデータに対する一貫性を保証する。リングネットワークが双方向であることにより、複数のプロセッサコア、複数のL2キャッシュおよび他の複数の論理ブロックなどのエージェントは、チップ内で互いに通信を行うことを可能にする。各リングデータ経路は方向毎に1012ビット幅である。
図8Bは、本発明の複数の実施形態による図8Aのプロセッサコアの一部の拡大図である。図8Bは、L1キャッシュ804のL1データキャッシュ806A部分、ならびにベクトルユニット810およびベクトルレジスタ814に関するさらなる詳細を含む。具体的には、ベクトルユニット810は、整数、単精度浮動および倍精度浮動命令のうちの1または複数を実行する16幅ベクトル処理ユニット(VPU)(16幅ALU828を参照)である。VPUは、再構成ユニット820による複数のレジスタ入力の再構成、数字変換ユニット822A−Bによる数字変換、および複製ユニット824によるメモリ入力に対する複製をサポートする。書き込みマスクレジスタ826は、結果として得られるベクトル書き込みを記述することを可能とする。
[統合メモリコントローラおよびグラフィクスを有するプロセッサ]
図9は、本発明の複数の実施形態によるプロセッサ900のブロック図であり、プロセッサ900は、1つより多くのコアを有してもよく、統合メモリコントローラを有してもよく、統合グラフィクスを有してもよい。図9において実線で囲まれたボックスは、単一のコア902A、システムエージェント910、1または複数のバスコントローラユニット916のセットを備えるプロセッサ900を示すが、点線で囲まれたボックスの任意の追加は、複数のコア902A−N、システムエージェントユニット910内の1または複数の統合メモリコントローラユニット914のセット、および、専用ロジック908を備える別のプロセッサ900を示す。
従って、プロセッサ900の複数の異なる実装は、1)統合グラフィクスおよび/または科学的(スループット)ロジック(1または複数のコアを含み得)である専用ロジック908、および1または複数の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、これら2つの組み合わせ)である複数のコア902A−Nを用いるCPUと、2)グラフィクスおよび/または科学的(スループット)に主に意図される多数の専用コアである複数のコア902A−Nを用いるコプロセッサと、3)多数の汎用インオーダコアである複数のコア902A〜Nを用いるコプロセッサと、を含み得る。従って、プロセッサ900は、汎用プロセッサ、コプロセッサまたは、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU(汎用グラフィクス処理ユニット)、ハイスループット多集積コア(MIC)コプロセッサ(30またはそれより多くのコアを含む)、埋め込みプロセッサなどのような専用プロセッサであってもよい。プロセッサは1または複数のチップ上に実装され得る。プロセッサ900は、複数の処理技術のうちのいずれか、例えば、BiCMOS、CMOSまたはNMOS等を利用し、1または複数の基板の一部であってよく、および/または、1または複数の基板に実装されてよい。
メモリ階層は、複数のコア、1または複数の共有キャッシュユニット906またはそのセット、および複数の統合メモリコントローラユニット914のセットに結合される外部メモリ(図示せず)内に、1または複数のレベルのキャッシュを含む。複数の共有キャッシュユニット906のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)または他の複数のレベルのキャッシュなどの1または複数の中レベルキャッシュ、ラストレベルキャッシュ(LLC)および/またはこれらの組み合わせを含んでもよい。1つの実施形態において、リングベースの相互接続ユニット912が、統合グラフィクスロジック908、複数の共有キャッシュユニット906のセットおよびシステムエージェントユニット910/統合メモリコントローラユニット914を相互接続するが、複数の代替的な実施形態は、そのような複数のユニットを相互接続するための任意の数の周知技術を用いてもよい。1つの実施形態において、1または複数のキャッシュユニット906とコア902A−Nとの間において一貫性が維持される。
いくつかの実施形態において、複数のコア902A−Nのうちの1または複数は、マルチスレッディングが可能である。システムエージェント910は、コア902A−Nを調整して動作させる複数の構成要素を含む。システムエージェントユニット910は、例えば、電力制御ユニット(PCU)およびディスプレイユニットを含んでもよい。PCUは、複数のコア902A−Nおよび統合グラフィクスロジック908の電力状態を調整するために必要なロジックおよび複数の構成要素であってもよく、またはこれらを含んでもよい。ディスプレイユニットは、1または複数の外部に接続されたディスプレイを駆動するためのユニットである。
コア902A−Nは、アーキテクチャ命令セットに関して同質または異質のいずれであってもよい。すなわち、コア902A−Nのうちの2またはそれよりも多くは、同じ命令セットを実行可能であり得るが、他は当該命令セットのサブセットまたは異なる命令セットのみを実行可能であるとしてよい。
[例示的なコンピュータアーキテクチャ]
図10−13は、複数の例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルド型PC、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、埋め込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィクスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイスおよび様々な他の電子デバイス用の当技術分野で既知の他の複数のシステム設計および複数の構成も、適切である。概して、プロセッサおよび/または他の実行ロジックを本明細書で開示するように組み込むことが可能な多岐にわたるシステムまたは電子デバイスは、通常適切である。
ここで、図10を参照すると、本発明の1つの実施形態によるシステム1000のブロック図が示される。システム1000は、コントローラハブ1020に結合される1または複数のプロセッサ1010、1015を含んでもよい。1つの実施形態において、コントローラハブ1020は、グラフィクスメモリコントローラハブ(GMCH)1090および入力/出力ハブ(IOH)1050(複数の別個のチップ上にあってもよい)を含む。GMCH1090は、メモリ1040およびコプロセッサ1045に結合されたメモリおよびグラフィクスコントローラを含む。IOH1050は、入力/出力(I/O)デバイス1060をGMCH1090に結合する。あるいは、メモリコントローラおよびグラフィクスコントローラのうち一方または両方は、プロセッサ内に統合されている(本明細書中に説明されるように)。メモリ1040およびコプロセッサ1045は、プロセッサ1010に直接結合されており、IOH1050を含む単一のチップのコントローラハブ1020に直接結合されている。
複数の追加のプロセッサ1015の任意のタイプが、図10に複数の破線で示される。各プロセッサ1010、1015は、本明細書中に説明される処理コアのうちの1または複数を含み得、および何らかのバージョンのプロセッサ900とし得る。
メモリ1040は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、位相変化メモリ(PCM)またはこれら2つの組み合わせであってもよい。少なくとも1つの実施形態について、コントローラハブ1020は、フロントサイドバス(FSB)等のマルチドロップバス、QuickPath Interconnect(QPI)等のポイントツーポイントインターフェース、または、同様の接続1095を介して、プロセッサ1010、1015と通信する。
1つの実施形態において、コプロセッサ1045は、例えば、ハイスループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、埋め込みプロセッサ等の専用プロセッサである。1つの実施形態において、コントローラハブ1020は、統合グラフィクスアクセラレータを含むとしてよい。
アーキテクチャ上の特性、マイクロアーキテクチャ上の特性、温度特性、消費電力特性などを含む利点の一連のメトリクスの観点から物理的リソース1010、1015の間には様々な差が存在し得る。
1つの実施形態において、プロセッサ1010は、一般的なタイプの複数のデータ処理オペレーションを制御する複数の命令を実行する。複数の命令内に、複数のコプロセッサ命令が組み込まれていてもよい。プロセッサ1010は、これらの複数のコプロセッサ命令を、取り付けられたコプロセッサ1045によって実行されるべきタイプのものと認識する。従って、プロセッサ1010は、これらの複数のコプロセッサ命令(または複数のコプロセッサ命令を表す複数の制御信号)を、コプロセッサバスまたは他の相互接続上で、コプロセッサ1045に対して発行する。コプロセッサ1045は、受信されたコプロセッサ命令を承認して実行する。
ここで、図11を参照すると、本発明の実施形態による第1のより特定の例示的システム1100のブロック図が示される。図11に示されるように、マルチプロセッサシステム1100は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続1150を介して結合される第1のプロセッサ1170および第2のプロセッサ1180を含む。プロセッサ1170および1180の各々は、いくつかのバージョンのプロセッサ900であってよい。本発明の1つの実施形態において、プロセッサ1170および1180は、それぞれプロセッサ1010および1015であるが、コプロセッサ1138は、コプロセッサ1045である。別の実施形態において、プロセッサ1170および1180はそれぞれ、プロセッサ1010およびコプロセッサ1045である。
プロセッサ1170および1180は、統合メモリコントローラ(IMC)ユニット1172および1182をそれぞれ含むものとして示される。プロセッサ1170はまた、そのバスコントローラユニットの一部として、複数のポイントツーポイント(P−P)インターフェース1176および1178をさらに含み、同様に、第2のプロセッサ1180は、複数のP−Pインターフェース1186および1188を含む。複数のプロセッサ1170、1180は、複数のP−Pインターフェース回路1178、1188を用いたポイントツーポイント(P−P)インターフェース1150を介して、情報を交換してもよい。図11に図示しているように、IMC1172および1182は、プロセッサをそれぞれのメモリ、つまり、メモリ1132およびメモリ1134に結合する。メモリ1132およびメモリ1134は、それぞれのプロセッサにローカルに取り付けられているメインメモリの部分であるとしてよい。
複数のプロセッサ1170、1180の各々は、複数のポイントツーポイントインターフェース回路1176、1194、1186、1198を用いる個々のP−Pインターフェース1152、1154を介して、チップセット1190と情報を交換してもよい。チップセット1190は、高性能インターフェース1139を介して、コプロセッサ1138と任意で情報を交換してもよい。1つの実施形態において、コプロセッサ1138は、専用プロセッサ、例えば、ハイスループットMICプロセッサ、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、埋め込みプロセッサ等である。
共有キャッシュ(図示せず)は、どちらかのプロセッサに含まれているかまたは、両方のプロセッサの外部に、P−P相互接続を介してプロセッサとなお接続されて含まれてよく、それにより、プロセッサが低電力モードに置かれると、どちらかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に格納されてよい。
チップセット1190は、インターフェース1196を介して、第1のバス1116に結合されてもよい。1つの実施形態において、第1のバス1116がPCI(ペリフェラルコンポーネント相互接続(Peripheral Component Interconnect))バスまたはPCIエクスプレス(PCI Express)バスまたはその他の第3生成I/O相互接続バス等のバスとされ得るが、本発明の範囲がそのように限定されることはない。
図11に示されるように、様々なI/Oデバイス1114が、第1のバス1116を第2のバス1120に結合するバスブリッジ1118とともに、第1のバス1116に結合されてもよい。1つの実施形態において、コプロセッサ、ハイスループットMICプロセッサ、GPGPUのアクセラレータ(例えば、グラフィクスアクセラレータもしくはデジタル信号処理(DSP)ユニットなど)、フィールドプログラム可能ゲートアレイまたは任意の他のプロセッサなどの1または複数の追加のプロセッサ1115が、第1のバス1116に結合される。1つの実施形態において、第2のバス1120は、ローピンカウント(LPC)バスであってもよい。例えば、キーボードおよび/またはマウス1122、通信デバイス1127、およびディスクドライブ、または複数の命令/コードおよびデータ1130を含みうる他の大容量ストレージデバイスなどのストレージユニット1128を含む様々な複数のデバイスが、1つの実施形態において、第2のバス1120に結合されてもよい。さらに、オーディオI/O1124が、第2のバス1120に結合されてもよい。なお、複数の他のアーキテクチャが、可能である。例えば、図11のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装してよい。
ここで、図12を参照すると、本発明の実施形態による第2のより特定の例示的システム1200のブロック図が示される。図11および図12における同様の構成要素は同様の参照番号を有しており、図11の特定の態様は、図12の他の態様の不明瞭化を回避するべく、図12から省略されている。
図12は、プロセッサ1170、1180はそれぞれ、統合メモリおよびI/O制御ロジック(「CL」)1172および1182を含み得ることを示す。従って、CL1172、1182は、複数の統合メモリコントローラユニットを含み、かつ、I/O制御ロジックを含む。図12は、メモリ1132、1134がCL1172、1182に結合されるのみならず、複数のI/Oデバイス1214もまた制御ロジック1172、1182に結合されることを示す。レガシーI/Oデバイス1215は、チップセット1190に結合されている。
ここで、図13を参照すると、本発明の実施形態によるSoC1300のブロック図が示される。図9における複数の同様の構成要素には、同様の参照番号が付される。 また、複数の点線で囲まれたボックスは、より高度なSoC上の任意のフィーチャである。図13では、相互接続ユニット1302は、1または複数のコア202A−Nおよび共有キャッシュユニット906のセットを含むアプリケーションプロセッサ1310、システムエージェントユニット910、バスコントローラユニット916、統合メモリコントローラユニット914、統合グラフィクスロジック、画像プロセッサ、オーディオプロセッサおよびビデオプロセッサを含み得る1または複数のコプロセッサ1320またはそのセット、スタティックランダムアクセスメモリ(SRAM)ユニット1330、ダイレクトメモリアクセス(DMA)ユニット1332および1または複数の外部ディスプレイに結合するためのディスプレイユニット1340に結合される。1つの実施形態において、コプロセッサ1320は、専用プロセッサ、例えば、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、GPGPU、ハイスループットMICプロセッサ、埋め込みプロセッサ等を含む。
本明細書に開示される複数の機構の複数の実施形態は、ハードウェア、ソフトウェア、ファームウェアまたはそのような複数の実装アプローチの組み合わせで実装され得る。本発明の複数の実施形態は、少なくとも1つのプロセッサ、ストレージシステム(揮発性および不揮発性メモリおよび/またはストレージ要素を含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを備えるプログラム可能なシステム上で実行されるコンピュータプログラムまたはプログラムコードとして実装され得る。
図11に示されるコード1130などのプログラムコードは、本明細書中に説明される複数の機能を実行し、出力情報を生成するべく、複数の入力命令に適用されてよい。出力情報は、1または複数の出力デバイスに、既知のやり方で適用され得る。このアプリケーションの目的のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
プログラムコードは、処理システムと通信するべく、高水準の手順型またはオブジェクト指向プログラミング言語で実装されてよい。プログラムコードは、所望ならば、アセンブリまたは機械言語で実装されてもよい。実際に、本明細書において説明される複数の機構は、その範囲において、何らかの特定のプログラミング言語に限定されるものではない。どの場合であっても、言語はコンパイラ型またはインタプリタ型言語であってよい。
少なくとも1つの実施形態の1または複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体上に格納された複数の代表的命令によって実装されてよく、複数の代表的命令は、機械によって読み取られる場合、機械に、本明細書において説明される複数の技術を実行するロジックを作成させる。そのような表現は、「IPコア」として知られており、有形で機械可読型の媒体に格納されているとしてよく、ロジックまたはプロセッサを実際に製造する製造機械にロードするべく、様々な顧客または製造設備に供給されるとしてよい。
そのような機械可読記憶媒体は、限定されないが、機械またはデバイスで製造または形成される、非一時的で有形の物品の配列を含むとしてよく、ハードディスク、任意の他のタイプのディスク、例えば、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリーメモリ(CD−ROM)、コンパクトディスクリライタブル(CD−RW)および光磁気ディスク、リードオンリーメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)などのランダムアクセスメモリ(RAM)、スタティックランダムアクセスメモリ(SRAM)、消去可能プラグラム可能リードオンリーメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラム可能リードオンリーメモリ(EEPROM)、相変化メモリ(PCM)などの半導体デバイス、磁気カードもしくは光カード、または、電子命令を格納するのに適切な任意の他のタイプの媒体等の記憶媒体を含む。
従って、本発明の複数の実施形態はまた、複数の命令を含む、または本明細書に説明される複数の構造、回路、装置、プロセッサおよび/またはシステムのフィーチャを定義するハードウェア記述言語(HDL)などの設計データを含む非一時的かつ有形の機械可読媒体を含む。そのような実施形態はまた、プログラム製品とも呼ばれてよい。
[エミュレーション(バイナリ変換、コードモーフィングなどを含む)]
いくつかの場合、命令コンバータは、ソース命令セットからターゲット命令セットに命令を変換するために用いられてよい。例えば、命令コンバータは、命令を、コアによって処理されるべき1または複数の他の命令にトランスレート(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて)、モーフィング、エミュレート、または別のやり方で変換してよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはその組み合わせで実装されてよい。命令コンバータは、オンプロセッサ、オフプロセッサ、または、部分オン・部分オフプロセッサであるとしてよい。
図14は、本発明の複数の実施形態による、ソース命令セット内の複数のバイナリ命令をターゲット命令セット内の複数のバイナリ命令に変換するソフトウェア命令コンバータの使用を対比させるブロック図である。図示された実施形態では、命令コンバータは、ソフトウェア命令コンバータであるが、代わりに、命令コンバータは、ソフトウェア、ファームウェア、ハードウェアまたはこれらの様々な組み合わせで実装されてよい。図14は、高水準言語1402のプログラムが少なくとも1つのx86命令セットコア1416を有するプロセッサによってネイティブで実行され得るx86バイナリコード1406を生成するべく、x86コンパイラ1404を用いてコンパイルされ得ることを示す。少なくとも1つのx86命令セットコア1416を有するプロセッサは、少なくとも1つのx86命令セットコアを有するインテル(登録商標)プロセッサと実質的に同じ結果を出すべく、(1)インテル(登録商標)のx86命令セットコアの命令セットの大部分、または(2)複数のアプリケーションのオブジェクトコードバージョン、もしくは少なくとも1つのx86命令セットコアを有するインテル(登録商標)プロセッサ上で実行されることが想定された他のソフトウェアを互換可能に実行または別のやり方で処理することにより、少なくとも1つのx86命令セットコアを有するインテル(登録商標)プロセッサと実質的に同じ複数の機能を実行可能な任意のプロセッサを表す。x86コンパイラ1404は、追加のリンケージ処理を用い、もしくは用いずに、少なくとも1つのx86命令セットコア1416を用いるプロセッサ上で実行され得る、x86バイナリコード1406(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。同様に、図14は、少なくとも1つのx86命令セットコアを有さないプロセッサ1414(例えば、カリフォルニア州サニーベールのMIPSテクノロジーズ(MIPS Technologies)のMIPSの命令セットを実行する、および/またはカリフォルニア州サニーベールのARMホールディングス(ARM Holdings)のARMの命令セットを実行する複数のコアを有するプロセッサ)によってネイティブで実行され得る、代替的な命令セットバイナリコード1410を生成するべく、代替的な命令セットコンパイラ1408を使用してコンパイルされ得る高水準言語1402のプログラムを示す。命令コンバータ1412は、x86バイナリコード1406を、x86命令セットコアを有さないプロセッサ1414によってネイティブで実行され得るコードに変換するために使用される。この変換されたコードは、これが可能な命令コンバータの作成は難しいため、代替的な命令セットバイナリコード1410と同じとなる可能性は低いが、しかしながら変換されたコードは、一般的なオペレーションを達成し、代替的な命令セットからの複数の命令により補完される。従って、命令コンバータ1412は、エミュレーション、シミュレーションまたは任意のその他の処理を用いて、x86命令セットプロセッサまたはコアを持たないプロセッサまたはその他の電子デバイスが、x86バイナリコード1406を実行することを可能にするためのソフトウェア、ファームウェア、ハードウェアまたはその組み合わせを表す。
図1向けに説明された構成要素、フィーチャ、および詳細はまた、図2−3および/または図4−5のいずれかに任意で適用され得る。さらに、装置のいずれかに対して説明されている構成要素、フィーチャ、および詳細はまた、そのような装置によって、および/またはそれを用いて実行され得る方法のいずれかに任意で適用され得る。システムのいずれかは、本明細書中に説明されるシステムのいずれかを含み得、本明細書中に説明されるプロセッサのいずれかは、これらのシステムのいずれかに含まれ得る(例えば、図9−13)。
明細書および特許請求の範囲では、用語「結合されるおよび/または「接続されるがそれらの派生語とともに使用されている場合がある。これらの用語は、互いに同義語であることを意図されていない。むしろ、複数の実施形態において、「接続」は、2つまたはそれより多くの要素が互いに直接物理的および/または電気的に接触していることを示すために用いられてよい。「結合」は、2つまたはそれより多くの要素が互いに直接物理的および/または電気的に接触していることを意味してよい。しかしながら、「結合された」は、2つまたはそれより多くの要素が、互いに直接的に接触しないが、さらになお互いに協働または相互作用することも意味し得る。例えば、実行ユニットは、1または複数の介在する構成要素を介してデコードユニットと結合し得る。図では、接続および結合を示すために矢印が用いられている。
明細書および/または特許請求の範囲にて、「ロジック」、「ユニット」または「構成要素」なる用語が、使用されてよい。これらの用語の各々は、ハードウェア、ファームウェアまたはその様々な組み合わせを指すべく使用され得る。例示的な実施形態において、これらの用語の各々は、命令を含む集積回路、特定用途向け集積回路、アナログ回路、デジタル回路、プログラムされたロジックデバイス、メモリデバイスなどと、それの様々な組み合わせを指し得る。いくつかの実施形態において、これらは、少なくともあるハードウェア(例えば、トランジスタ、ゲート、他の回路構成要素など)を含み得る。
用語「および/または」が用いられていてよい。本明細書で使用するとき、用語「および/または」は、一方または他方あるいは両方を意味する(例えば、Aおよび/またはBは、AまたはBあるいはAおよびBの両方を意味する)。
上記の説明では、具体的な詳細が複数の実施形態の完全な理解を提供するべく明らかにされた。しかしながら、複数の他の実施形態は、これらの具体的な詳細のいくつかを用いることなく実施されてよい。本発明の範囲は、上記に提供された具体例によって判定されるのではなく、以下に添付された特許請求の範囲によってのみ判定される。複数の他の例において、説明の理解に対する不明瞭化を回避すべく、周知の回路、構造、デバイス、および/またはオペレーションは、ブロック図の形式で、または詳細なく示されている。適切と考えられる場合には、参照番号または参照番号の末尾部分が、対応するかまたは類似の要素を示すべく複数図面にわたって反復して使用されているが、それらはオプションとして、別段の指定があるか、または明らかにそれ以外となる場合を除いて類似の、または同じの特性を任意で有することがあり得る。
複数の特定のオペレーションは、ハードウェア構成要素によって実行されてよく、または機械実行可能もしくは回路実行可能命令で具現化されてよい。機械実行可能もしくは回路実行可能命令は、複数のオペレーションを実行する命令でプログラムされた機械、回路、またはハードウェア構成要素(例えば、プロセッサ、プロセッサの一部、回路など)を生じさせ、および/またはもたらすために用いられてよい。複数のオペレーションはまた、任意で、ハードウェアおよびソフトウェアの組み合わせによって実行されてよい。プロセッサ、機械、回路またはハードウェアは、特有または特定の回路を含み得、他のロジック(例えば、ファームウェアおよび/またはソフトウェアと潜在的に組み合わされたハードウェア)は、命令を実行処理および/または処理し、命令に応答して結果を格納するべく動作可能である。
いくつかの実施形態は、機械可読媒体を含む製造物品(例えば、コンピュータプログラム製品)を含む。媒体は、機械によって可読な形式で情報を提供する、例えば格納する機構を含み得る。機械可読媒体は、機械によって実行される、および/または実行される場合、本明細書に開示されている1または複数の動作、方法、または技術を機械に実行させ、および/またはそれらを実行する機械をもたらすべく動作可能である命令、または命令シーケンスを提供するか、またはそれらをその上に格納しておき得る。
いくつかの実施形態において、機械可読媒体は非一時的機械可読記憶媒体を含んでよい。例えば、非一時的機械可読記憶媒体としては、フロッピー(登録商標)ディスケット、光記憶媒体、光ディスク、光学式データストレージデバイス、CD−ROM、磁気ディスク、光磁気ディスク、リードオンリーメモリ(ROM)、プログラム可能ROM(PROM)、消去可能プログラム可能ROM(EPROM)、電気的消去可能プログラム可能ROM(EEPROM)、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、フラッシュメモリ、相変化メモリ、相変化データストレージ材料、不揮発性メモリ、不揮発性データストレージデバイス、非一時的メモリ、非一時的データストレージデバイス等を含み得る。非一時的機械可読記憶媒体は、一時的な伝搬信号から構成されるものではない。いくつかの実施形態において、記憶媒体は、固体物質を含む有形媒体を含み得。
複数の適切な機械の複数の例は、限定されるものではないが、汎用プロセッサ、専用プロセッサ、デジタル論理回路、集積回路等を含む。複数の適切な機械の複数のさらに他の例は、プロセッサ、デジタル論理回路または集積回路を含むコンピュータシステムまたは他の電子デバイスを含む。そのようなコンピュータシステムまたは電子デバイスの例としては、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレット型コンピュータ、ネットブック、スマートフォン、携帯電話、サーバ、ネットワークデバイス(例えば、ルータおよびスイッチ)、モバイルインターネットデバイス(MID)、メディアプレーヤ、スマートテレビ、ネットトップ、セットトップボックス、およびビデオゲームコントローラが挙げられるが、これらに限定されるものではない。
本明細書の全体における、「1つの実施形態」、「実施形態」、「1または複数の実施形態」、「いくつかの実施形態」という言及は、例えば、特定のフィーチャが本発明の実施に含まれてよいが、必ずしも必要とされるものではないことを示す。同様に、本明細書では、開示のストリームライン化および様々な発明の態様の理解の助けを目的として、様々なフィーチャが時には単一の実施形態、図、またはその説明にて一緒にグループ化される。しかしながら、本開示の方法は、本発明が各請求項において明白に記載されたものよりも多くのフィーチャを必要とするという意図を反映するものと解釈されるべきではない。むしろ、以下の特許請求の範囲が反映するように、複数の発明の態様は、単一の開示された実施形態の全てのフィーチャの一部に存する。従って、詳細な説明に続く特許請求の範囲は、各請求項が本発明の別個の実施形態として自立してありながら、ここに明白にこの詳細な説明に組み込まれる。
[例示的な実施形態]
以下の複数の例は、さらなる実施形態に関する。これらの例に示されている詳細は、1または複数の実施形態のどこかに使用してもよい。
例1は、例外ハンドラ復帰命令をデコードするデコードユニットを含むプロセッサまたは他の装置である。装置はまた、デコードユニットと結合する例外ハンドラ復帰実行ユニットを含む。例外ハンドラ復帰実行ユニットは、例外ハンドラ復帰命令に応答して、例外ハンドラ復帰命令に対応する例外がNMIハンドラ内に取り入れられた場合、次に受信されるマスク不可割り込み(NMI)のNMIハンドラへの配信を有効にするようにプロセッサを設定しない。例外ハンドラ復帰実行ユニットは、例外ハンドラ復帰命令に応答して、例外がNMIハンドラ内に取り入れられなかった場合、次に受信されるNMIのNMIハンドラへの配信を有効にするようにプロセッサを設定する。
例2は、例1のプロセッサを含み、例外ハンドラ復帰命令に応答して、例外が、メモリから取り出された(例えば、スタックからポップされた)例外に対応する例外フレームにおいて例外がNMIハンドラ内に取り入れられたかどうかの保存された指示をチェックし、保存された指示に部分的に基づいて次に受信されたNMIの配信を有効にするようにプロセッサを設定するかどうかを判定する、保存されたNMI指示チェッカユニットをさらに含む。
例3は、例2のプロセッサを含み、任意で、例外ハンドラ復帰命令に応答して、保存されたNMI指示チェッカユニットは、保存された指示が第1値を有する場合、次に受信されるNMIの配信を有効にするようにプロセッサを設定しないことを判定し、または、保存された指示が第2の異なる値を有する場合、次に受信されるNMIの配信を有効にするようにプロセッサを設定することを判定する。
例4は、例2のプロセッサを含み、任意で、保存された指示は、プロセッサのフラグレジスタにおける1または複数の相手ビットに対応しない例外フレームの位置を有する。
例5は、例2のプロセッサを含み、任意で、保存された指示は、プロセッサのフラグレジスタにおける1または複数のリザーブされたビットに対応する例外フレームの位置を有するが、任意で、プロセッサは、フラグレジスタにおける1または複数のリザーブされたビットをまだリザーブする。
例6は、例1のプロセッサを含み、任意で、例外ハンドラ復帰実行ユニットは、例外ハンドラ復帰命令に応答して、プロセッサのNMI無効制御の保存されたコピーである保存されたNMI無効制御をチェックするとし、NMIの配信を交互に有効および延期にするように使用される。例外ハンドラ復帰実行ユニットは、例外ハンドラ復帰命令に応答して、例外がプロセッサのNMI無効制御を変更することによりNMIハンドラ内に取り入れられなかった場合、次に受信されるNMIのNMIハンドラへの配信を有効にするようにプロセッサを設定する。
例7は、例1から6のうちのいずれか1つのプロセッサを含み、例外ハンドラ復帰命令に応答して、ネスト型NMI防止機構を選択的に有効および無効にするネスト型NMI防止有効制御をチェックするネスト型NMI防止有効制御チェッカユニットをさらに含む。機構は、有効にされた場合、例外がNMIハンドラ内に取り入れられたかどうかに基づいて次に受信されるNMIの配信の有効を条件付ける例外ハンドラ復帰実行ユニットを含む。
例8は、例1から6のうちのいずれか1つのプロセッサを含み、任意で、例外ハンドラ復帰命令は、NMIハンドラからの復帰にも使用されるオペコードを有する。
例9は、マスク不可割り込み(NMI)ハンドラ内に取り入れられなかった第1例外に対応する例外ハンドラからの復帰に使用されている第1例外ハンドラ復帰命令を受信する工程を含むプロセッサの方法である。方法は、第1例外ハンドラ復帰命令に応答して次に受信されるNMIの配信を有効にするようにプロセッサを設定する工程を含む。方法はまた、NMIハンドラ内に取り入れられた第2例外に対応する例外ハンドラからの復帰に使用されている第2例外ハンドラ復帰命令を受信する工程を含む。方法は、第2例外ハンドラ復帰命令に応答して次に受信されるNMIの配信を有効にするようにプロセッサを設定しない工程を含む。
例10は、例9の方法を含み、第2例外ハンドラ復帰命令に応答して、メモリから取り出された例外フレームにおいて、第2例外がNMIハンドラ内に取り入れられるとの保存された指示をチェックする工程をさらに含む。
例11は、例10の方法を含み、任意で、保存された指示をチェックする工程は、プロセッサのフラグレジスタの1または複数のビットの相手セットを有しない例外フレームの1または複数のビットのセットの保存された指示をチェックする工程を含む。
例12は、例10の方法を含み、任意で、保存された指示をチェックする工程は、プロセッサのフラグレジスタの1または複数のリザーブされたビットのセットに対応する例外フレームの1または複数のビットのセットに保存された指示をチェックする工程を含む。
例13は、例9の方法を含み、任意で、第1例外ハンドラ復帰命令に応答して次に受信されるNMIの配信を有効にするようにプロセッサを設定する工程は、NMI無効制御を変更する工程を含む。NMI無効制御はまた、NMIハンドラに配信されるNMIに応答するプロセッサによって変更される。
例14は、例外がNMIハンドラ内に取り入れられたかどうかを判定するマスク不可割り込み(NMI)判定ユニットを含むプロセッサまたは他の装置である。装置はまた、NMI判定ユニットと結合するNMI保存ユニットを含む。NMI保存ユニット例外がNMIハンドラ内に取り入れられたかどうかの指示を保存する。
例15は、例14のプロセッサを含み、任意で、NMI保存ユニットは、プロセッサのNMI無効制御を保存するためのNMI無効制御保存ユニットを含む。NMI無効制御は、NMIの配信を交互に一時的に有効化および無効化するために使用される。
例16は、例15のプロセッサを含み、任意で、NMI保存ユニットは、メモリに(例えば、スタック構造上に)格納される例外フレームにおいて例外がNMIハンドラ内に取り入れられたかどうかの指示を保存する。
例17は、例16のプロセッサを含み、任意で、NMI保存ユニットは、プロセッサのフラグレジスタに1または複数のビットの相手セットを有しない例外フレームの1または複数のビットのセットに指示を保存する。
例18は、例16のプロセッサを含み、任意で、NMI保存ユニットは、プロセッサのフラグレジスタの1または複数のリザーブされたビットのセットに対応する例外フレームの1または複数のビットのセットに指示を保存する。
例19は、例14のプロセッサを含み、任意で、NMI判定ユニットは、プロセッサのNMI無効制御をチェックすることにより、例外がNMIハンドラ内に取り入れられたかどうかを判定するNMI無効制御判定ユニットフラグレジスタを含む。NMI無効制御は、NMIの配信を交互に一時的に無効化および有効化するように使用される。
例20は、例14から19のうちのいずれか1つのプロセッサを含み、ネスト型NMI防止機構を選択的に有効および無効にする、プロセッサのネスト型NMI防止有効制御をチェックするネスト型NMI防止有効制御チェッカユニットをさらに含む。ネスト型NMI防止機構は、有効にされた場合、例外がNMIハンドラ内に取り入れられたかどうかの指示を保存するNMI保存ユニットを含み、有効にされない場合、指示を保存するNMI保存ユニットを含まない。
実施例21は、相互接続と、この相互接続と結合されるプロセッサとを含む命令を処理するシステムである。プロセッサは、例外ハンドラ復帰命令を受信する。プロセッサは、例外ハンドラ復帰命令に応答して、例外ハンドラ復帰命令に対応する例外がNMIハンドラ内に取り入れられた場合、次に受信されるマスク不可割り込み(NMI)のNMIハンドラへの配信を延期するように設定されるプロセッサを保持する。プロセッサは、命令に応答して、例外がNMIハンドラ内に取り入れられなかった場合、次に受信されるNMIをNMIハンドラに配信するようにプロセッサを設定する。システムはまた、相互接続と結合されたダイナミックランダムアクセスメモリ(DRAM)を含む。
例22は、例21のシステムを含み、任意で、プロセッサは、例外ハンドラ復帰命令に応答して、メモリ(例えば、スタック)から取り出された例外に対応する例外フレームにおいて、例外がNMIハンドラ内に取り入れられたかどうかの保存された指示をチェックする。
例23は、非一時的機械可読記憶媒体を含む製造品である。非一時的機械可読記憶媒体は、例外ハンドラ復帰命令を格納する。例外ハンドラ復帰命令は、機械によって実行される場合、例外ハンドラ復帰命令に対応する例外がNMIハンドラ内に取り入れられた場合、次に受信されるマスク不可割り込み(NMI)のNMIハンドラへの配信を延期する工程を含む動作を機械に実行させる。動作はまた、例外がNMIハンドラ内に取り入れられなかった場合、次に受信されるNMIをNMIハンドラに配信する工程を含む。
例24は、例23の製造品を含み、任意で、例外ハンドラ復帰命令は、機械によって実行される場合、メモリ(例えば、スタック)から受信された例外に対応する例外フレームにおいて、例外がNMIハンドラ内に取り入れられたかどうかの保存された指示をチェックする工程を含む動作を機械に実行させる。
例25は、例9から13のうちのいずれか1つの方法を実行するように動作するプロセッサまたは他の装置である。
例26は、例9から13のうちのいずれか1つの方法を実行するための手段を包含するプロセッサまたは他の装置である。
例27は、例9から13のうちのいずれか1つの方法を実行するためのユニットおよび/またはロジックおよび/または回路および/または手段の任意の組み合わせを含むプロセッサである。
例28は、任意で命令を格納するか、別のやり方でそれを提供する任意で非一時的機械可読媒体を含む製造品であり、非一時的機械可読媒体は、プロセッサ、コンピュータシステム、電子デバイスまたは他の機械によって実行される、および/または、場合なら、例9から13のうちのいずれか1つの方法を機械に実行させるように動作する。
例29は、バスまたは他の相互接続を含むコンピュータシステム、他の電子デバイスまたは他の装置であり、例1から8のうちのいずれか1つのプロセッサは相互接続と結合され、少なくとも1つの構成要素は、ダイナミックランダムアクセスメモリ(DRAM)、ネットワークインターフェース、グラフィクスチップ、無線通信チップ、モバイル通信用のグローバルシステム(GSM(登録商標))アンテナ、相変化メモリおよびビデオカメラから選択される相互接続と結合される。例30は、本明細書中に実質的に説明されるプロセッサまたは他の装置である。
例31は、実質的に本明細書中に説明されている任意の方法を実行するべく動作するプロセッサまたは他の装置である。
例32は、実質的に本明細書中に説明されるように、任意の例外ハンドラ復帰命令を実行するべく動作するプロセッサまたは他の装置である。