(57)【要約】      （修正有）【課題】SMT、SMPおよび／またはCMPシステムのような複数ソフトウェア・スレッドの同時並行的な実行をサポートするシステムのために、少数のスレッドに限定することなく、パフォーマンスに負の影響なしにスレッドをスケジューリングする方法を提供する。【解決手段】シュレッド１３０〜１３６はユーザーレベルのプログラムによって生成および管理され、オペレーティング・システム１４０からは隔離されているシーケンサー上で走るようスケジューリングされる。抽象化層によって隔離論理、プロキシ実行論理、遷移検出およびシュレッド・サスペンド論理ならびにシーケンサー算術論理の各機能が提供される。【選択図】図１
2011103132.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサによって実行される方法であって、
シーケンサーに一つまたは複数のスレッド制御信号を発する段階を有し、前記シーケンサーはオペレーティング・システム（OS）から隔離されたシーケンサーであり；
前記発する段階が、ユーザー生成された命令に反応して抽象化層によって実行され、
当該方法がさらに、前記隔離されたシーケンサー上での実行のサスペンドを引き起こす一組の動作を実行する段階をさらに有し、前記一組の動作が、OS可視シーケンサー上でのリング遷移に反応して前記抽象化層によって実行され；前記一組の動作がさらに、前記一つまたは複数の制御信号を発することを含み、該制御信号が前記隔離されたシーケンサーを待機状態に入れる信号を含む、
方法。
【請求項２】
前記抽象化層は、前記シーケンサーのハードウェアがユーザーレベルのシュレッド利用機能をサポートしていなくてもユーザーレベルのシュレッド利用機能をエミュレートするものであり、前記発する段階がさらに、OS可視スレッドにおける前記ユーザー生成された命令のOS可視シーケンサー上での実行に反応して前記抽象化層によって実行される、請求項１記載の方法。
【請求項３】
前記一つまたは複数のスレッド制御信号がさらに、前記隔離されたシーケンサーをして命令のシーケンスの実行を開始させる信号を含む、請求項１または２記載の方法。
【請求項４】
前記一つまたは複数のスレッド制御信号がさらに、前記隔離されたシーケンサーをして修正された命令ポインタアドレスにて命令のシーケンスの実行を開始させる信号を含む、請求項３記載の方法。
【請求項５】
前記ユーザー生成された命令が第一の命令シーケンスに含まれ、オペレーティング・システムによってスケジューリングされた該第一の命令シーケンスをある第一のシーケンサー上で実行し、
並行して、前記隔離されたシーケンサー上で第二の命令シーケンスを実行する、
ことをさらに含む、請求項１ないし４のうちいずれか一項記載の方法。
【請求項６】
前記隔離されたシーケンサーのための実行環境を生成する段階をさらに有する請求項１ないし５のうちいずれか一項記載の方法であって；
前記生成する段階が前記抽象化層によって実行される、方法。
【請求項７】
前記スレッド制御信号がさらに：
前記隔離されたシーケンサー上での実行に割り込むための信号を含む、
請求項１ないし６のうちいずれか一項記載の方法。
【請求項８】
前記スレッド制御信号がさらに：
割り込み信号を含む、
請求項７記載の方法。
【請求項９】
OS可視シーケンサーをして、前記隔離されたシーケンサーに代わってのイベント処理ルーチンの実行をトリガーさせる一組の動作を実行する段階をさらに有する請求項１ないし８のうちいずれか一項記載の方法であって；
前記一組の動作が前記抽象化層によって実行される、方法。
【請求項１０】
前記実行をトリガーさせる一組の動作がさらに：
前記隔離されたシーケンサーについての状態を前記OS可視シーケンサーに移すこと、
を含む、請求項９記載の方法。
【請求項１１】
前記サスペンドを引き起こす一組の動作がさらに：
OSに透明な仕方で、前記OS可視シーケンサー上でリング遷移を追跡手段によって追跡すること、
を含む、請求項１ないし１０のうちいずれか一項記載の方法。
【請求項１２】
前記隔離されたシーケンサー上での実行の再開を引き起こす一組の動作を実行する段階をさらに有する、請求項１ないし１１のうちいずれか一項記載の方法であって；
前記再開を引き起こす一組の動作が、OS可視シーケンサー上での例外処理ルーチンの完了に反応して前記抽象化層によって実行され；
前記一組の動作がさらに、前記一つまたは複数の制御信号を発することを含み、該制御信号が前記隔離されたシーケンサー上での実行を再開する信号を含む、方法。
【請求項１３】
前記再開を引き起こす一組の動作がさらに：
前記OS可視シーケンサー上のブレークポイントをクリアすること、
を含む、請求項１２記載の方法。
【請求項１４】
複数の命令ストリームを並行して実行する複数のシーケンサーと；
前記複数のシーケンサーに結合されたメモリと；
前記複数のシーケンサーに結合され、前記複数のシーケンサーのうち一つまたは複数をオペレーティング・システムから隔離する抽象化層、
とを有するシステムであって、前記抽象化層がさらに、前記隔離されたシーケンサーのうち一つまたは複数の上の前記命令ストリームの一つまたは複数の実行を制御し、
前記抽象化層がさらに、前記隔離されたシーケンサーのうち少なくとも一つをして、オペレーティング・システムのリング0動作の間、動作をサスペンドさせるための遷移検出モジュールを含み、前記隔離されたシーケンサーが待機状態に入れられる、
システム。
【請求項１５】
前記複数のシーケンサーの少なくとも一つが、他のシーケンサーのうち一つまたは複数に対してコンピューティング面で非対称的である、
請求項１４記載のシステム。
【請求項１６】
前記メモリがDRAMである、
請求項１４または１５記載のシステム。
【請求項１７】
前記抽象化層がさらに、前記一つまたは複数のシーケンサーを隔離するためのシーケンサー隔離モジュールを含む、
請求項１４ないし１６のうちいずれか一項記載のシステム。
【請求項１８】
前記抽象化層がさらに、前記隔離されたシーケンサーのためにオペレーティング・システム・サービスを呼び出すためのプロキシ実行モジュールを含む、
請求項１４ないし１７のうちいずれか一項記載のシステム。
【請求項１９】
前記抽象化層がさらに、前記複数のシーケンサーのうち少なくとも二つの間の信号伝達を提供するためのシーケンサー算術モジュールを含む、
請求項１４ないし１８のうちいずれか一項記載のシステム。
【請求項２０】
前記抽象化層がさらに、前記隔離されたシーケンサーのうち少なくとも一つをして、オペレーティング・システムのリング0動作のあと、動作を再開させるための遷移検出モジュールを含む、
請求項１４ないし１９のうちいずれか一項記載のシステム。
【請求項２１】
前記抽象化層のための命令が前記メモリに含まれる、
請求項１４ないし２０のうちいずれか一項記載のシステム。
【請求項２２】
前記メモリが、前記抽象化層のゲストとしてオペレーティング・システムを走らせるための命令を含む、
請求項１４ないし２１のうちいずれか一項記載のシステム。
【請求項２３】
抽象化層のための複数の機械アクセス可能命令を記憶している機械アクセス可能媒体であって、前記命令がプロセッサによって実行されたときに、前記命令は：
シーケンサーに一つまたは複数のスレッド制御信号を発する動作を提供し、ここで、前記シーケンサーはオペレーティング・システム（OS）から隔離されたシーケンサーであり；
前記発する動作のための前記命令が、ユーザー生成された命令に反応して前記抽象化層によって実行され、
前記抽象化層のための命令がさらに、前記隔離されたシーケンサー上での実行のサスペンドを引き起こす一組の動作を実行する動作を提供し、前記一組の動作が、OS可視シーケンサー上でのリング遷移に反応して前記抽象化層によって実行され；前記一組の動作がさらに、前記一つまたは複数の制御信号を発することを含み、該制御信号が前記隔離されたシーケンサーを待機状態に入れる信号を含む、
機械アクセス可能媒体。
【請求項２４】
前記発する動作のための前記命令がさらに、OS可視スレッドにおける前記ユーザー生成された命令のOS可視シーケンサー上での実行に反応して前記抽象化層によって実行される、請求項２３記載の機械アクセス可能媒体。
【請求項２５】
前記一つまたは複数のスレッド制御信号がさらに、前記隔離されたシーケンサーをして命令のシーケンスの実行を開始させる信号を含む、請求項２３または２４記載の機械アクセス可能媒体。
【請求項２６】
前記一つまたは複数のスレッド制御信号がさらに、前記隔離されたシーケンサーをして修正された命令ポインタアドレスにて命令のシーケンスの実行を開始させる信号を含む、請求項２３ないし２５のうちいずれか一項記載の機械アクセス可能媒体。
【請求項２７】
前記プロセッサがさらに：
前記ユーザー生成された命令を含み、オペレーティング・システムによってスケジューリングされた該第一の命令シーケンスを、ある第一のシーケンサー上で実行し、
並行して、前記隔離されたシーケンサー上で第二の命令シーケンスを実行する、
請求項２３ないし２６のうちいずれか一項記載の機械アクセス可能媒体。
【請求項２８】
前記抽象化層命令がさらに、前記プロセッサによって実行されたときに：
前記隔離されたシーケンサーのための実行環境を生成する動作を提供する命令を含む、
請求項２３ないし２７のうちいずれか一項記載の機械アクセス可能媒体。
【請求項２９】
前記スレッド制御信号がさらに：
前記隔離されたシーケンサー上での実行に割り込むための信号を含む、
請求項２３ないし２８のうちいずれか一項記載の機械アクセス可能媒体。
【請求項３０】
前記スレッド制御信号がさらに：
割り込み信号を含む、
請求項２９記載の機械アクセス可能媒体。
【請求項３１】
前記抽象化層命令がさらに、前記プロセッサによって実行されたときに：
OS可視シーケンサーをして、前記隔離されたシーケンサーに代わってのイベント処理ルーチンの実行をトリガーさせる一組の動作を実行する動作を提供する、
請求項２３ないし３０のうちいずれか一項記載の機械アクセス可能媒体。
【請求項３２】
前記一組の動作がさらに：
前記隔離されたシーケンサーについての状態を前記OS可視シーケンサーに移すこと、
を含む、請求項３１記載の機械アクセス可能媒体。
【請求項３３】
前記抽象化層命令がさらに、前記プロセッサによって実行されたときに：
前記隔離されたシーケンサー上での実行のサスペンドを引き起こす一組の動作を実行する動作を提供する、請求項２３ないし３２のうちいずれか一項記載の機械アクセス可能媒体であって；
前記一組の動作が、OS可視シーケンサー上でのリング遷移に反応して前記抽象化層によって実行され；
前記一組の動作がさらに、前記一つまたは複数の制御信号を発することを含み、該制御信号が前記隔離されたシーケンサーを待機状態に入れる信号を含む、機械アクセス可能媒体。
【請求項３４】
前記一組の動作がさらに：
前記OS可視シーケンサー上にブレークポイントを設定すること、
を含む、請求項３３記載の機械アクセス可能媒体。
【請求項３５】
前記抽象化層命令がさらに、前記プロセッサによって実行されたときに：
前記隔離されたシーケンサー上での実行の再開を引き起こす一組の動作を実行する動作を提供する、請求項２３ないし３４のうちいずれか一項記載の機械アクセス可能媒体であって；
前記一組の動作が、OS可視シーケンサー上での例外処理ルーチンの完了に反応して前記抽象化層によって実行され；
前記一組の動作がさらに、前記一つまたは複数の制御信号を発することを含み、該制御信号が前記隔離されたシーケンサー上での実行を再開する信号を含む、機械アクセス可能媒体。
【請求項３６】
前記一組の動作がさらに：
前記OS可視シーケンサー上のブレークポイントをクリアすること、
を含む、請求項３５記載の機械アクセス可能媒体。
【請求項３７】
請求項１１記載の方法であって、前記追跡することがさらに：
前記OS可視シーケンサーのためのブレークポイントを設定することを含む、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、概括的には情報処理システムに、より詳細には、一つまたは複数のシーケンサーがオペレーティング・システムから隔離されて（sequestered）いてもよいマルチシーケンサー・システム上のマルチスレッド化に関する。
【背景技術】
【０００２】
マイクロプロセッサを含む情報処理システムのような、情報処理システムのパフォーマンスを上げるため、ハードウェア技術およびソフトウェア技術の両方が用いられてきた。ハードウェア側では、マイクロプロセッサのパフォーマンスを改善するためのマイクロプロセッサ設計法は、増加したクロック速度、パイプライン処理、分岐予測、スーパースカラー実行、アウト・オブ・オーダ実行およびキャッシュを含んできた。多くのそのようなアプローチはトランジスタ数の増大につながり、場合によってはパフォーマンス向上の割合よりも大きな割合でのトランジスタ数の増加をもたらしていた。
【０００３】
厳密に追加的なトランジスタを通じてパフォーマンス向上を図るのではない、他のパフォーマンス向上は、ソフトウェア技術に関わるものである。プロセッサのパフォーマンスを改善するために用いられてきたソフトウェア・アプローチの一つは、「マルチスレッド化（multithreading）」として知られている。ソフトウェア・マルチスレッド化においては、命令ストリームは、並列に実行できる複数の命令ストリームに分割される。あるいはまた、複数の独立したソフトウェア・ストリームが並列に実行されうる。
【０００４】
タイムスライス・マルチスレッドまたは時間多重（time-multiplex）（「TMUX」）として知られるアプローチでは、単一のプロセッサが、決まった時間期間後にスレッドを切り換える。もう一つのアプローチでは、単一のプロセッサが、長い遅延のキャッシュミス（a  long  latency  cache  miss）といったトリガー・イベントの生起に際してスレッドを切り換える。イベント時切り換えマルチスレッド（switch-on-event  multithreading）（「SoEMT」）として知られるこの後者のアプローチでは、ある所与の時間には高々一つのスレッドしかアクティブでない。
【０００５】
マルチスレッドはますますハードウェアでサポートされつつある。たとえば、あるアプローチでは、チップ・マルチプロセッサ（chip  multiprocessor）（「CMP」）システム（単一のチップ・パッケージ上に複数プロセッサ）および対称マルチスレッド（symmetric  multithreading）（「SMP」）システム（複数チップ上に複数プロセッサ）のようなマルチプロセッサ・システムにおける各プロセッサは、同時並行して、複数のソフトウェア・スレッドの一つに対して作用しうる。同時マルチスレッド（simultaneous  multithreading）（「SMT」）と称されるもう一つのアプローチでは、単一の物理的なプロセッサが、オペレーティング・システムやユーザー・プログラムには複数の論理的なプロセッサとして見えるようにされる。SMTについては、複数のソフトウェア・スレッドが、切り換えなしに、単一のプロセッサ上で同時にアクティブであり実行されることができる。すなわち、各論理的なプロセッサがアーキテクチャ状態の完全なセットを維持するが、当該物理的なプロセッサの他の多くの資源、たとえばキャッシュ、実行ユニット、分岐予測器、制御論理およびバスは共有される。SMTについては、こうして、複数のソフトウェア・スレッドからの命令が同時並行して各論理的なプロセッサ上で実行される。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
SMT、SMPおよび／またはCMPシステムのような複数ソフトウェア・スレッドの同時並行的な実行をサポートするシステムのために、ソフトウェア・スレッドのスケジューリングおよび実行をオペレーティング・システム（「OS」）・アプリケーションが制御しうる。しかし、典型的には、オペレーティング・システム制御はスケーリングがよくなく、オペレーティング・システム・アプリケーションがパフォーマンスに負の影響なしにスレッドをスケジューリングする能力は、普通には、比較的少数のスレッドに限定される。
本発明の諸実施形態は図面を参照しつつ理解されうる。図面では、同様の要素は同様の数字で示される。図面は限定することを意図されてはおらず、OS隔離されたシーケンサー上でユーザーレベルのシュレッド制御がOS透明な抽象化層を介して提供されるマルチシーケンサー・システム上でユーザーレベルのマルチスレッド化を実行する装置、システムおよび方法の選ばれた実施形態を解説するために与えられるものである。
【図面の簡単な説明】
【０００７】
【図１】マルチシーケンサー・システムのための、一般的な並列プログラミングのアプローチの図的な表現を示すブロック図である。
【図２】ユーザーレベルのマルチスレッド化の少なくとも一つの実施形態のための、複数のスレッドおよびシュレッドの間で共有されるメモリおよび状態を示すブロック図である。
【図３】マルチシーケンサー・システムのさまざまな実施例を示すブロック図である。
【図４】マルチシーケンサー・マルチスレッド・システムのためのソフトウェア機構の少なくとも一つの実施形態を示すブロック図である。
【図５】仮想機械モニタの一部としてシュレッド化エミュレーション層を含むマルチシーケンサー処理システムを示すブロック図である。
【図６】一つまたは複数のシーケンサーの隔離の少なくとも一つの実施形態を示すブロック図である。
【図７】シュレッド化エミュレーション層を含むソフトウェア層を起動する方法の少なくとも一つの実施形態を示すフローチャートである。
【図８】オペレーティング・システムおよび仮想機械モニタの起動後の例示的なマルチシーケンサー・システムの隔離シーケンサーおよびOS可視シーケンサーの状態を示すブロック図である。
【図９】シーケンサー・リダイレクションのための方法の少なくとも一つの実施形態のための方法および制御フローを示す制御フロー図である。
【図１０】シュレッド生成の方法の少なくとも一つの実施形態のための方法および制御フローを示す制御フロー図である。
【図１１】リング遷移に起因するシュレッドのサスペンドの少なくとも一つの実施形態を示す制御フロー図である。
【図１２】リング遷移が処理されたあとのシュレッド再開の少なくとも一つの実施形態を示す制御フロー図である。
【図１３】プロキシ実行機構の少なくとも一つの実施形態を示す制御フロー図である。
【図１４】プロキシ実行方法の少なくとも一つの実施形態を示すフローチャートである。
【図１５】開示される技法を実行する機能のあるシステムの少なくとも一つの実施形態を示すブロック図である。
【発明を実施するための最良の形態】
【０００８】
以下の議論は、マルチシーケンサー・マルチスレッド・システムにおいてユーザーレベルのアプリケーション・プログラムがOS独立な実行スレッド（「シュレッド（shred）」と称される）を生成および制御することを許容する方法、システムおよび機構の選ばれた実施形態を記載する。ユーザーレベルのシュレッドは、完全なオペレーティング・システム透明性をもって生成、スケジューリングおよび実行される。開示される技法が実行されるマルチシーケンサー・システムのハードウェアは、必ずしもアーキテクチャ上のシュレッド制御命令をサポートしない。むしろ、そのような機能性はOS透明なソフトウェアまたはファームウェアのエミュレーション層を通じて提供されうる。
【０００９】
ここに記載される機構は単一コアまたはマルチコアのマルチスレッド・システムで利用されうる。以下の記述では、本発明のより完全なる理解を提供するために、プロセッサの種類、マルチスレッド環境、システム構成、マルチシーケンサー・システムにおけるシーケンサーの数およびトポロジー、マイクロアーキテクチャ構造および命令命名体系ならびにパラメータといった数多くの個別的な詳細が述べられている。しかしながら、そうした個別的な詳細なしでも本発明が実施されうることは当業者によって理解されるであろう。さらに、いくつかのよく知られた構造、回路などは、本発明を無用に埋没させるのを避けるために詳しく示していない。
【００１０】
下記で論じる図１および図２は、ユーザー制御される「シュレッド」を含む共有メモリ・マルチプロセッシング・パラダイムを示している。シュレッドとは、オペレーティング・システムのビューおよび制御から隔離されているシーケンサー上で実行される命令シーケンスである。そのようなOS隔離シーケンサーは時に「OS不可視」シーケンサーと称される。図３および図１５は、そのようなパラダイムが実装されうるプロセッサおよび／またはシステムの見本実施形態を示している。図４は一般的に、シーケンサーのハードウェアがアーキテクチャ上のシュレッド利用命令をサポートしないマルチシーケンサー・システム上でユーザーレベルのシュレッド利用機能を提供しうる、シュレッド化エミュレーション層と称される抽象化層の少なくとも一つの実施形態を示している。最後に、図５ないし図１４はシュレッド化エミュレーション層のための個別的な方法およびシステムの実施形態を示している。
【００１１】
共有メモリ・マルチプロセッシング・パラダイムが、並列プログラミングと称されるアプローチにおいて使用されうる。このアプローチによれば、アプリケーションのプログラマは、ソフトウェア・プログラムについて並列を表現するために、ソフトウェア・プログラム（「アプリケーション」または「プロセス」と称されることもある）を同時並行して実行される複数のタスクに分割しうる。同じソフトウェア・プログラム（「プロセス」）のすべてのスレッドは、メモリについて共通の論理的なビューを共有する。
【００１２】
図１は、マルチシーケンサー・マルチスレッド・システム上での並列プログラミングのアプローチの図的な表現を示すブロック図である。図１は、オペレーティング・システム１４０に見えるプロセス１００、１２０を示している。これらのプロセス１００、１２０は、ワード・プロセッシング・プログラムおよび電子メール管理プログラムといった、異なるソフトウェア・アプリケーション・プログラムであってもよい。普通、各プロセスは異なるアドレス空間内で動作する。
【００１３】
オペレーティング・システム（「OS」）１４０は普通、図１に示されるプロセス１２０のようなプロセスについてユーザー生成のタスクを管理することを担う。したがって、オペレーティング・システム１４０は、プロセス１２０に関連付けられたユーザー定義のタスクのそれぞれについて相異なるスレッド１２５、１２６を生成することができ、スレッド１２５、１２６をスレッド実行資源にマッピングすることができる。（これらの実行資源は図１には示されていないが、のちに詳細に議論する。）OS１４０は普通、これらのスレッド１２５、１２６を実行資源上での実行のためにスケジューリングすることを担う。単一のプロセスに関連付けられた諸スレッドは、典型的には、メモリについて同じビューをもち、同じ仮想アドレス空間を共有する。
【００１４】
スレッドを生成し、マッピングし、スケジューリングすることはOS１４０が担うので、スレッド１２５、１２６はOS１４０に「見える」。さらに、本発明の諸実施形態は、OS１４０には見えない追加的なスレッド１３０〜１３６を包含する。すなわち、これらの追加的なスレッド１３０〜１３６については、OS１４０は生成、管理もしくは他の仕方での認識または制御をしない。OS１４０によって生成も制御もされないこうした追加的なスレッドは、OSに見えるスレッドと区別するため、本稿では時に「シュレッド」１３０〜１３６と称される。シュレッドはユーザーレベルのプログラムによって生成および管理され、オペレーティング・システムからは隔離されているシーケンサー上で走るようスケジューリングされる。OS隔離シーケンサーは、OS可視シーケンサーと同じリング0状態を共有する。このように、シュレッド（shred）１３０〜１３６は、同じプロセス１２６に関連付けられた諸スレッド（thread）１２５、１２６のために生成される同じ実行環境（アドレス・マップ）を共有する（share）。
【００１５】
ここでの用法では、「スレッド」および「シュレッド」の用語は、少なくとも、あるプロセスの他のスレッドおよび／またはシュレッドと同時並行して実行される命令のストリームの独立した実行の概念を含む。したがって、スレッドおよび「シュレッド」の用語はいずれも、ソフトウェア命令ストリームの実行とともに関連付けられたプロセッサ状態の概念を包含する。ここでの用法では、どちらも命令のストリームであるスレッド（これはOSに制御される）とシュレッド（これはオペレーティング・システムには見えず、その代わりユーザーによって制御される）とを区別する因子は、スレッドおよびシュレッドの命令ストリームの実行がどのように管理されるかの相違にある。スレッドはOSへのシステム・コールに反応して生成される。OSがそのスレッドを生成し、そのスレッドを走らせるために資源を割り当てる。スレッドに割り当てられたそのような資源は、オペレーティング・システムがスレッドを制御およびスケジューリングするために使うデータ構造を含みうる。
【００１６】
これに対し、シュレッドの少なくとも一つの実施例は、ユーザーレベルのソフトウェア命令を介して生成される。その命令がOSが認識しないシュレッドを生成するためのソフトウェア・ライブラリまたはその他のOS独立な機構を呼び出すのである。このように、シュレッドはユーザーレベルのソフトウェア・ライブラリ・コールに反応して生成されうる。ソフトウェア・ライブラリ・コールは、ソフトウェア・ライブラリによって維持されているシュレッド作業待ち行列（図示せず）内に項目を生成しうる。そのようなシュレッド作業待ち行列は、OS隔離シーケンサー上で走るようスケジューリングされている各シュレッドについての項目を保持しうる。シュレッド作業待ち行列の少なくとも一つの実施形態についてのさらなる議論については、同時係属中の出願で“Mechanism  to  Schedule  Threads  on  OS-Sequestered  Sequencers  without  Operating  System  Intervention（オペレーティング・システム介入なしにOS隔離シーケンサー上でスレッドをスケジューリングする機構）”と題する米国特許第＿＿＿＿（代理人整理番号42390.P20205）を参照されたい。
【００１７】
図２は、同じソフトウェア・プログラムまたはプロセスのすべてのスレッドがメモリについて共通の論理的なビューを共有するという、上記の陳述に関するさらなる詳細を図的な形で示すブロック図である。本発明の諸実施形態については、この陳述は、プロセス１００、１２０に関連付けられたシュレッドに関しても真である。すなわち、複数のシュレッド１３０〜１３６が、単一の、OSに管理されたスレッド１２５に付随しうる。スレッド１２５によって該スレッド１２５に付随する諸シュレッドを実行するよう初期化されるすべてのシーケンサー（seq.1〜seq.4）は、そのスレッドについてオペレーティング・システムが構築した仮想メモリの同じビューを共有する。
【００１８】
ここでは図２について、図１を参照しつつ議論する。図２は、図１に示されるプロセス１２０、スレッド１２５、１２６およびシュレッド１３０〜１３６の図的な表現である。しかしながら、そのような表現は限定するものと解釈すべきではない。本発明の諸実施形態は必ずしもあるプロセスに関連付けられるスレッドまたはシュレッドの数に上限または下限を課すことはしない。下限に関しては、図１は、所与の時点において走っているあらゆるプロセスが必ずしも何らかのスレッドまたはシュレッドと関連付けられている必要はないことを示している。たとえば、図１に示したプロセス０  １００は、図１に示されている特定の時点ではスレッドもシュレッドもなしに走っていることが示されている。
【００１９】
しかしながら、別のプロセス１２０が、図１に示されるように、一つまたは複数のスレッド１２５、１２６に関連付けられていることがある。さらに、プロセス１２０は追加的に、一つまたは複数のシュレッド１３０〜１３６とも関連付けられていることがある。プロセス１２０についての二つのスレッド１２５、１２６および４つのシュレッド１３０〜１３６の表現はあくまでも例示的なものであって、限定するものと解釈すべきではない。あるプロセスに関連付けられたOS可視スレッドの数はOSプログラムによって限定されうる。しかしながら、プロセスに関連付けられたシュレッドの累積数についての上限は、少なくとも一つの実施例については、実行中のある特定の時点において利用可能なスレッド実行資源の数によってのみ限定される。図２は、プロセス１２０に関連付けられている第二のスレッド１２６が第一のスレッド１２５とは異なる数（n）の関連付けられたスレッドをもちうることを示している。（Nはスレッド１２５、１２６の一方または両方について0であってもよい。）
【００２０】
図２は、ある特定のプロセス１２０に関連付けられたすべてのスレッド１２５、１２６によって共有されるメモリのある特定の論理的なビュー２００を示している。図２は、各スレッド１２５、１２６がそれぞれ独自のアプリケーションおよびシステム状態２０２ａ、２０２ｂを有していることを示している。図２は、スレッド１２５、１２６についての該アプリケーションおよびシステム状態２０２が、その特定のスレッドに関連付けられたすべてのシュレッド（たとえばシュレッド１３０〜１３６）によって共有されることを示している。
【００２１】
したがって、図２は、本発明の少なくとも一つの実施形態についてのシステムが、スレッド１２５のようなOS可視スレッドと、該スレッドに関連付けられたシュレッド１３０〜１３６（これはOSには不可視）との間の一対多の関係をサポートしうることを示している。シュレッドを生成し、同期させ、その動作をその他の仕方で管理および制御するためにOSでなくアプリケーション・プログラマがユーザーレベルの技法を用いうるという意味において、シュレッドはOS（図１の１４０参照）に「可視」ではない。OS１４０はスレッドを認識し、管理するものの、OS１４０はシュレッドは認識せず、管理も制御もしない。
【００２２】
こうして、スレッド・ユニット・ハードウェアとシュレッドとの間のマッピングを管理するためにオペレーティング・システムに頼る代わりに、ユーザーレベルのアプリケーションが、そのようなマッピングを直接制御し、シュレッド実行に関連した制御および状態転移を直接操作することが望ましいことがある。そのような直接的な制御および操作を容易にするため、スレッド・ユニットのアーキテクチャのユーザー可視の特徴は、少なくとも、ユーザーレベルのアプリケーション・プログラムにスレッド・ユニット・ハードウェアの直接的な操作および制御を許容する正準的な命令セットを含みうる。
【００２３】
少なくとも一つの実施例については、以下の機能のいずれかまたは全部をマルチシュレッド・システムに実装することが望ましいことがありうる。そのような機能はそれぞれ、その機能を実施するための別個のアーキテクチャ上の命令によってサポートされてもよい。あるいはまた、そのような機能は、シュレッド生成および制御の小さな正準的な命令セットに基づく、より高レベルのプリミティブまたはソフトウェア・ライブラリ関数によって実装されてもよい。正準的なアーキテクチャ上のユーザーレベルのシュレッド利用命令のハードウェア実装についてのさらなる議論は、“A  Mechanism  For  Instructions  Set-Based  Thread  Execution  on  a  Plurality  of  Instruction  Sequencers（複数の命令シーケンサー上での、命令セットに基づくスレッド実行のための機構）”と題する同時係属中の特許出願米国特許第＿＿＿＿（代理人整理番号：42390.P19770）に見出されうる。
【００２４】
ユーザーレベルのシュレッド利用プログラミング・パラダイムの一部としてプログラマに提供されうる機能は、次の機能のうちのいずれかまたは全部の一つまたは複数を含みうる：
１．OS制御からのシーケンサーの隔離
２．シーケンサー間制御移行を実施するためのシーケンサー算術
３．リング遷移検出およびユーザーレベルの例外処理
４．隔離されたシーケンサーのために特権動作の処理をサポートするための、OS可視シーケンサーによる「プロキシ実行」
これらの機能のそれぞれについて以下で詳細に議論していく。
【００２５】
上に挙げたユーザーレベルのシュレッド利用機能がハードウェアにおいてアーキテクチャ上サポートされていないシステム上でユーザーレベルのシュレッド生成および制御の機能を提供することが望ましいことがありうる。したがって、シュレッド生成、制御および同期命令の機能性は代わりに抽象化層によってエミュレートされてもよい。以下の議論および請求項の多くが扱うのはこの、ユーザーレベル・シュレッド利用のエミュレーションである。そのようなエミュレーションは、上述したように、根底にあるスレッド・ユニットが、ユーザーレベルのシュレッド生成、マッピング、制御および同期のためのアーキテクチャ上の命令をサポートしていないシステムにおいて実装されうる。しかしながら、ここで議論されるソフトウェア・エミュレーション機構の諸実施形態はそのようなシステムに限定されない。諸実施形態は、スレッド・ユニットの一つまたは複数がアーキテクチャ上のシュレッド命令をサポートしているシステム上でも実施されうる。
【００２６】
ここでの用法では、スレッド・ユニット（ここでは交換可能的に「シーケンサー」とも称される）とは、スレッドまたはシュレッドを実行する機能のある任意の物理的または論理的なユニットでありうる。これは、所与のスレッドまたはシュレッドのために実行されるべき次の命令を決定するための次命令ポインタ論理を含みうる。たとえば、図２に示されるOSスレッド１２５は、図示されないシーケンサー上で実行されうる一方、アクティブなシュレッド１３０〜１３６のそれぞれは、それぞれ他のシーケンサー「seq1」〜「seq4」上で実行されうる。シーケンサーは論理的なスレッド・ユニットであっても物理的なスレッド・ユニットであってもよい。論理的なスレッド・ユニットと物理的なスレッド・ユニットとの間の区別を図３に示す。
【００２７】
図３は、開示されている技法を実行する機能のあるマルチシーケンサー・システムの実施例３１０、３５０の選ばれたハードウェア特徴を示すブロック図である。図３が示すのは、SMTマルチシーケンサー・マルチスレッド環境３１０の選ばれたハードウェア特徴を示している。図３はまた、複数コアのマルチスレッド環境３５０の選ばれたハードウェア特徴をも示しており、この場合、各シーケンサーは別個の物理的なプロセッサ・コアである。
【００２８】
SMT環境３１０では、単一の物理プロセッサ３０４は、オペレーティング・システムおよびユーザー・プログラムにとっては、複数の論理プロセッサ（図示せず）として見えるようにされる。該複数の論理プロセッサはここではLP1ないしLPnと称される。各論理プロセッサLP1ないしLPnは、それぞれ完全なセットのアーキテクチャ状態AS1〜ASnを含む。アーキテクチャ状態は、少なくとも一つの実施例については、データレジスタ、セグメント・レジスタ、制御レジスタ、デバッグ・レジスタおよび大半のモデル固有のレジスタを含む。論理プロセッサLP1〜LPnは、キャッシュ、実行ユニット、分岐予測器、制御論理およびバスといった物理プロセッサ３０４の大半の他の資源を共有する。そのような特徴は共有されうるものの、マルチスレッド環境３１０における各スレッド・コンテキストは、次命令アドレスを独立して生成できる（そしてたとえば命令キャッシュ、実行命令キャッシュまたはトレース・キャッシュからのフェッチを実行できる）。
【００２９】
こうして、プロセッサ３０４は、各スレッド・コンテキストについての命令をフェッチするため、論理的に独立な次命令ポインタおよびフェッチ論理３２０を含む。ただし、その複数の論理シーケンサーは単一の物理的なフェッチ／デコード・ユニット３２２において実装してもよいのであるが。SMTまたは実施例については、「シーケンサー」の用語は少なくとも、あるスレッド・コンテキストについての次命令ポインタおよびフェッチ論理３２０を、そのスレッド・コンテキストについての関連付けられたアーキテクチャ状態ASの少なくとも一部とともに包含する。SMTシステム３１０のシーケンサーが対称的である必要はないことも注意しておくべきである。たとえば、同じ物理コアのための二つのSMTシーケンサーは、そのそれぞれが維持するアーキテクチャ状態情報の量において違っていてもよい。
【００３０】
こうして、少なくとも一つの実施例については、マルチシーケンサー・システム３１０は、同時並行マルチスレッドをサポートする単一コアのプロセッサ３０４である。そのような実施形態については、各シーケンサーは、独自の命令次命令ポインタおよびフェッチ論理３２０と独自のアーキテクチャ状態情報ASとをもつ論理プロセッサであるが、同じ物理プロセッサ・コア３０４がすべてのスレッド命令を実行する。そのような実施形態については、論理プロセッサは、アーキテクチャ状態については独自のバージョンを維持するが、単一のプロセッサ・コアの実行資源は同時実行されるスレッドの間で共有されうる。
【００３１】
図３は、マルチコア・マルチスレッド環境３５０の少なくとも一つの実施形態をも示している。そのような環境３５０は、それぞれが異なるスレッド／シュレッドを実行する機能をもつ二つ以上の別個の物理的プロセッサ３０４ａ〜３０４ｎを含んでおり、該複数の異なるスレッド／シュレッドの少なくとも一部分の実行は同時に進行しうるようになっている。各プロセッサ３０４ａないし３０４ｎは、それぞれのスレッドまたはシュレッドのための命令情報をフェッチするため、物理的に独立なフェッチ・ユニット３２２を含んでいる。各プロセッサ３０４ａ〜３０４ｎが単一のスレッド／シュレッドを実行する実施形態では、フェッチ／デコード・ユニット３２２は単一の次命令ポインタおよびフェッチ論理３２０を実装する。しかしながら、各プロセッサ３０４ａ〜３０４ｎが複数スレッド・コンテキストをサポートする実施形態では、フェッチ／デコード・ユニット３２２は、サポートされるスレッド・コンテキストそれぞれについて相異なる次命令ポインタおよびフェッチ論理３２０を実装する。マルチプロセッサ環境３５０における追加的な次命令ポインタおよびフェッチ論理３２０が任意的であるという性質は、図３で点線によって表されている。
【００３２】
こうして、図３に示されるマルチコア・システム３５０の少なくとも一つの実施例については、シーケンサーのそれぞれは、単一のチップ・パッケージ３６０に複数のコア３０４ａ〜３０４ｎが存在しているプロセッサ・コア３０４でありうる。各コア３０４ａ〜３０４ｎは、単一スレッドまたはマルチスレッドのプロセッサ・コアのいずれでもありうる。図３ではチップ・パッケージ３６０は破線で表されているが、これはマルチコア・システム３５０の図示されている単一チップ実施形態が単に例示的であることを示している。他の実施形態については、マルチコア・システム３５０のプロセッサ・コア３０４ａ〜３０４ｎは別個のチップ上に存在してもよい。
【００３３】
少なくとも一つの実施例については、上に挙げたユーザーレベルのシュレッド生成、制御および同期機能は、図３に示されるような根底にあるシーケンサー・ハードウェアのアーキテクチャ上の命令セットによっては提供されない。にもかかわらず、プログラマがユーザーレベルのシュレッド利用機能を呼び出すコードを書けることが望ましいことがありうる。そのようなシステムについては、ユーザーレベルのシュレッド利用機能は、ファームウェアまたはソフトウェア抽象化層を介してエミュレートされうる。それによりプログラマは、あたかも根底にあるハードウェアがシュレッド命令をサポートしているかのように、透明にコードを書くことができる。ソフトウェアまたはファームウェア層は、OS隔離されたシーケンサー上で実行するOS独立なシュレッドのユーザーレベルの生成、制御および同期が実施されるよう、抽象化層を提供するはたらきをしうる。
【００３４】
図４は、オペレーティング・システム１４０のビューおよび制御から隔離されることのできる一つまたは複数のシーケンサーを含むマルチシーケンサー・マルチスレッド・システムのための抽象化層４０２の少なくとも一つの実施形態を示すブロック図である。抽象化層４０２は、ユーザーレベルのシュレッド利用のためのアーキテクチャ上の命令が隔離シーケンサー上でサポートされていないシステムのために、ユーザーレベルのスレッド制御を実施する機構を提供する。したがって、図４に示された実施形態については、複数シーケンサー４３２ａ〜４３２ｎの一つまたは複数は、OS独立な実行シュレッドのユーザーレベルの生成および制御のためのアーキテクチャ上のハードウェア・サポートを設けておらず、同じシーケンサーがOSビューおよび制御から隔離されうることが想定される。
【００３５】
図４が示すところでは、抽象化４０２は、論理的にマルチシーケンサー・ハードウェア４３０の上に載っている抽象化の層である。オペレーティング・システム１４０は、この抽象化層より少なくとも１レベル高いところで動作しうる。抽象化層（abstraction  layer）のことは、ここでは時にシュレッド化エミュレーション層（shredding  emulation  layer）（「SEL」）と称される。
【００３６】
図４が示すところでは、SEL４２０は、さまざまなシュレッド関数を実行するためのモジュールを含みうる。図４は、SEL４２０がシーケンサー隔離モジュール４０４、プロキシ実行モジュール４０６、シーケンサー算術モジュール４０８および遷移検出モジュール４１０を含みうることを示している。SEL４２０の機能モジュール４０４、４０６、４０８、４１０のそのような論理的な表現は限定するものと解釈すべきではない。当業者は、それらのモジュールは、指定された機能を実行するための論理を表現することを意図されていることを認識するであろう。該論理は、ソフトウェア、ハードウェア、ファームウェアまたはそのいかなる組み合わせであってもよい。さらに、複数モジュール４０４、４０６、４０８、４１０の機能性は、より大きな関数または論理モジュールとして一緒に実装されてもよい。あるいはまた、一つまたは複数の個別モジュールの論理がより小さな下位モジュールに細分されてもよい。また、前記モジュールの一つまたは複数が、論理の冗長なコピーを含むのではなく、共有関数コールまたはその他の共有論理のように、他のモジュールの一つまたは複数と論理を共有してもよい。
【００３７】
少なくとも一つの実施形態については、SEL４０２は独立な論理モジュールでありうる。少なくとも一つの他の実施形態については、SEL４０２は既存の論理モジュールへの修正として実装されうる。たとえば、SEL４０２は、既存のソフトウェア的な抽象化層に対する修正のセットとして実装されうる。のちに議論されるある種の実施形態は、SEL４０２を、仮想機械モニタ（virtual  machine  monitor）（「VMM」）への修正のセットとして含みうる。ここでもまた、そのような実施形態は、SEL４０２の選ばれた特徴をより詳細に、特定の実装環境のコンテキストにおいて示す目的のためにのみ与えられるものである。だが、VMM実施形態に関するそのような個別的事項についての以下の議論は限定するものと解釈するべきではない。SEL４０２は、独立して実装されてもよいし、あるいはオペレーティング・システムとシーケンサー・ハードウェアとの間のインターフェースを提供する何らかの他の抽象化層の一部として実装されてもよい。ではあるが、既存のVMMへの修正として実装されうるSEL４０２のそれらの実施形態についての明確化の目的のため、以下の図５の議論は、例示的なVMM実施形態に関する追加的な情報を提供する。
【００３８】
図５は、SEL４０２をVMM５０６の一部として含んでいるマルチシーケンサー処理システム５００を示すブロック図である。システム５００は、プロセッサ資源５３０を含むハードウェア資源５２０を含む。プロセッサ資源５３０は複数シーケンサー５３２ａ〜５３２ｎを含みうる。シーケンサー５３２ａ〜５３２ｎは非対称的であってもよい。
【００３９】
図５に示された例示的なシステム５００は他のハードウェア資源５２６をも含みうるが、ここで議論される他の特徴をかすませるのを避けるために個々に示すことは省いている。そのような他のハードウェア資源５２６としては、たとえば、これに限られないが、メモリ、周辺装置、チップセット、記憶などが含まれうる。
【００４０】
図５が示すところでは、すぐ上で論じたハードウェア資源５２０に加えて、システム５００はソフトウェア資源をも含みうる。そのようなソフトウェア資源は仮想機械モニタ５０６を含みうる。VMM５０６は、処理システム５００のハードウェア資源を分割および管理することができる。それにより同じシステム５００上で一つまたは複数のオペレーティング・システム５０３ａ〜５０３ｎが同時並行して実行されることが許容される。各OS５０３ａ〜５０３ｎは、パーティションまたは仮想機械（VM:  virtual  machine）５１０ａ〜５１０ｎと称される実質的に独立したソフトウェア環境内で動作しうる。図５に示される例示的な実施形態については、VMM５０６は、それぞれ独自の独立したゲストOS５０３ａ〜５０３ｎを走らせている複数の仮想機械５１０ａ〜５１０ｎをサポートする。当業者は、ここで論じる諸実施形態は、単一のVM５１０をサポートするシステムで用いられてもよいことを認識するであろう。追加的なVM５１０は、それが任意的であることを示すため、図５では点線で示されている。
【００４１】
少なくとも一つの実施例については、VMM５０６は、マイクロカーネル５１２およびサービスOS５１３のようなソフトウェアまたはファームウェア・コンポーネントの実行を通じて実装されうる。マイクロカーネル５１２は、命令スケジューリングのようなシステム管理タスクのための、命令の小さな核を含みうる。サービスOS５１３は、仮想機械を生成および維持するためのデバイス・ドライバおよび環境仮想化ソフトウェアを含みうる。
【００４２】
したがって、図５に示されたシステム５００の少なくとも一つの実施形態については、VMMソフトウェア５０６はハードウェア資源５２０の制御を保持することができ、VMM５０６へのゲストとして、ゲストOS５０３ａ〜５０３ｎを非特権モードで走らせることができる。ある種のゲスト・イベント、命令および状況は、VMM５０６にトラップすることができ、するとVMM５０６はそのようなイベント、命令および／または状況を処理しうる。このように、VMM５０６はゲストOSソフトウェア５０３ａ〜５０３ｎにプロセッサ抽象化を呈する。
【００４３】
ここでの用法では、ゲストOS５０３ａ〜５０３ｎからVMM５０６へのトラップはここではVMEXITと称される。VMM５０６からゲストOS５０３ａ〜５０３ｎに制御を戻す遷移はここではVMENTERと称される。VMM５０６とゲストOSソフトウェア５０３ａ〜５０３ｎとの間の遷移は、仮想機械制御構造（VMCS:  Virtual  Machine  Control  Structure）５６０と称されるハードウェア構造によって制御されうる。VMCS５６０は、ゲスト（たとえば５０３ａ〜５０３ｎのような）状態、VMM５０６状態およびさまざまな制御レジスタの状態を、VMM５０６への、およびVMM５０６からの制御移行に際して保存しうる。制御レジスタの値は、どのゲスト・イベントがVMM５０６にトラップすべきか、および、どの状態がVMEXITおよびVMENTER遷移に際してロードおよび保存されるかを指示しうる。
【００４４】
少なくとも一つの実施例については、VMM５０６は、VMEXITおよびVMENTER遷移のために以下の処理を実行する。VMEXITのためには、その遷移イベントを発生させたゲストOS５０３についての状態情報が、VMCS５６０のゲスト状態領域に保存される。VMENTERのためには、そのゲスト状態が、VMCS５６０のゲスト状態領域から復元される。少なくとも一つの実施例については、VMM５０６は、ここではそれぞれVMREADおよびVMWRITEと称される特化された読み出しおよび書き込み命令を利用して、VMCS５６０のフィールドを読み出しおよび書き込みしうる。
【００４５】
SEL４０２をVMM５０６の一部として実装するシステムの少なくとも一つの実施例については、VMCS５６０およびVMM５０６の基本機能が利用されうる。VMM５０６を利用してどのように個別的なユーザーレベルのシュレッド生成、制御および同期機能をエミュレートするかの個別的な例を以下に述べる。
【００４６】
〈シーケンサー隔離〉ここでの用法では、シーケンサー隔離の用語は、マルチシーケンサー・マルチスレッド・システムの一つまたは複数のシーケンサーが隔離された状態または条件に遷移したことを意味するために使用される。そのような隔離された状態または条件の特性は、そのような状態または条件にあるシーケンサーについてはOSが命令をスケジューリングしないということである。したがって、ある所与の時点において隔離された状態にある一つまたは複数のシーケンサーをもつシステムについては、OSには隔離されていないシーケンサーだけが「可視である」という。いかなる所与の時点においても、一つまたは複数のシーケンサーが隔離されているかどうかに依存して、OSは、実際にプラットフォーム上にあるよりも少ない数のシーケンサーへの可視性を有することがある。OS制御されるスレッド実行のためには「可視」の隔離されていないシーケンサーだけが利用可能である。隔離された（すなわち「OS不可視」な）シーケンサー上でシュレッドが実行されうるのは、ユーザーレベルの命令を受けてである。
【００４７】
図６は、シーケンサー隔離の少なくとも一つの実施形態を示すブロック図である。隔離されたシーケンサーは、互いに、あるいはOS可視シーケンサーと対称的であってもよいが、そうである必要はない。少なくとも一つの実施例については、一つまたは複数のシーケンサー６２２、６２４、６２６の隔離は、仮想機械内のゲストOSのようなオペレーティング・システム６０３のブートの間に実施されうる。そのような実施例については、OS６０３のためのブート・パラメータ６５０は、メモリ内に、たとえばファイル（たとえばboot.ini）内に存在しうる。ブート・パラメータ６５０は、システム６００のシーケンサー全体のうちある部分集合（たとえばシーケンサー６２０）だけがOS６０３に可視となるよう、ブートに先立って構成設定されうる。（少なくとも一つの実施例については、ブート・パラメータは、オペレーティング・システムの設定を再設定するルート特権のあるシステム管理者によって構成設定されうる。）VMM５０６は、少なくとも一つの実施例については、OS６０３がそのブート・プロセスを完了したあとに起動されうる。
【００４８】
あるいはまた、VMM５０６がOS６０３に先立って起動される実施例について、一つまたは複数のシーケンサー６２２、６２４、６２６の隔離が実施されうる。そのような実施例は、たとえば、VMM５０６の起動を、BIOS（basic  input/output  system［基本入出力システム］）もしくはEFI（extensible  firmware  interface［拡張可能ファームウェアインターフェース］）またはハードウェアとオペレーティング・システム６０３との間のインターフェースのはたらきをするその他のファームウェアを介して行いうる。VMM５０６は、OS６０３への引き継ぎに先立ってそのようなファームウェアによって起動されうる。OSのブート・パラメータ・ファイルを利用して隔離を実施するのではなく、OS６０３に明かされるシーケンサーの数は、オペレーティング・システム６０３によって利用されるACPI（advanced  configuration  and  power  interface［高度構成設定および電力インターフェース］）テーブル中の数値によって制御されてもよい。（ここでもまた、ACPIはシステム管理者によって、あるいはブート・マネージャ（BIOS、EFIなど）の販売者によってプログラムされうる。）
図６にはOS可視シーケンサー６２０は一つしか描かれていないが、そのような描写は単に例示のためであって、限定するものと解釈すべきではない。システム６００のシーケンサーは、オペレーティング・システム６０３に対していくつ可視であってもよい。オペレーティング・システム６０３が効率的に多数の同時並行スレッドを処理する能力の限界によって、システム６００中の全シーケンサーのうちのいくつがOS６０３に可視であるべきで、いくつか隔離されるべきかに関する判断を知ることができることがある。
【００４９】
図６は、VMM５０６が、OS６０３に可視のシーケンサー（単数または複数）６２０を含めてシステム６００の全部のシーケンサー６２０、６２２、６２４、６２６を制御しうることを示している。隔離されたシーケンサー６２２、６２４、６２６は、オペレーティング・システム６０３には見えないが、VMM５０６の直接制御のもとで動作する。可視シーケンサー（単数または複数）６２０のためには、VMM５０６はOS６０３をゲスト・モードで走らせうる。
【００５０】
シーケンサー隔離モジュール４０４は、隔離されるシーケンサー６２２、６２４、６２６を初期化するための処理を実行しうる。それらのシーケンサーを、ユーザーレベルの命令によって指令されるとおりにスレッドを実行するよう準備するためである。VMM起動後、シーケンサー隔離モジュール４０４は隔離されるシーケンサー６２２、６２４、６２６のそれぞれに初期化命令を送りうる。
【００５１】
それらのシーケンサーはOS６０３には見えないので、隔離シーケンサーは、オペレーティング・システム６０３の特権リングによるサービスを要求する特権コードは実行しない。少なくとも一つの実施例については、特定のシーケンサーが特権命令（たとえばシステム・コールおよびページ・フォールト処理のような）を実行できないことは、のちにさらに詳しく論じる透明なプロキシ機構によって、プログラマからは隠蔽されうる。
【００５２】
図７は、図４に示したSEL４０２のようなシュレッド化エミュレーション層を含むソフトウェア層を立ち上げるための方法７００の少なくとも一つの実施形態を示すフローチャートである。少なくとも一つの実施例については、SEL４０２は、VMMのようなより包括的なソフトウェア・モジュールの一部として起動されうる。方法７００は、OS可視シーケンサー上の起動ドライバによって開始されうる。
【００５３】
図７が示すところでは、方法７００はブロック７０２で始まってブロック７０４に進む。ブロック７０４で、ソフトウェア層のイメージがシステムのためのメモリにロードされる。少なくとも一つの実施例については、このイメージは起動ドライバによってロードされうる。次いで処理はブロック７０６に進む。ブロック７０６では、前記ソフトウェア層が呼び出される。結果として、起動ドライバから、ブロック７０４でロードされたSELイメージに制御が移される。
【００５４】
図７が示すところでは、ブロック７０６での呼び出しを受けて、SELはある種の処理７２４〜７３２を実行しうる。むろん、処理７２４〜７３２が必ずしも図示した順に実行されなくてもよいこと、そしていくつかのブロックはより大きなマクロ・ブロックとして実行されるべく組み合わされてもよく、あるいは代替的により小さな下位ブロックに分割されてもよいことは理解されるであろう。
【００５５】
少なくとも一つの実施例については、図７に示された処理７２４〜７３２は、SEL４２０を含むよう修正されたVMMのようなソフトウェア層によって実行されうる。図７が示すところでは、ブロック７２４で、方法７００は初期化を実行する。初期化７２４はVMXON命令の実行を含みうる。この命令はシーケンサーにおいて利用可能なVMX（Virtual  Machine  Extension［仮想機械拡張］）機能をオンにする。初期化７２４は、VMMが実行される別個の仮想アドレス空間を設定することも含みうる。ブロック７２４から処理はブロック７２６に進む。
【００５６】
ブロック７２６では、方法７００は、OSから隔離されているシーケンサーの制御を握る。少なくとも一つの実施例については、そのような制御は、隔離シーケンサー（単数または複数）のそれぞれに立ち上げプロセッサ間割り込み（startup  interprocessor  interrupt）（またはSIPI）を送ることを介してアサートされる。次いで処理はブロック７２６から７２８に進む。
【００５７】
ブロック７２８では、隔離されたシーケンサーのそれぞれは、スケジューラからの作業を待つ待機状態に入れられる。その後、シュレッド・スケジューラ（図示せず）によって隔離シーケンサー上に作業がスケジューリングされうる。シュレッド・スケジューラはたとえば、ランタイム・ライブラリ（図示せず）の一部として動作しうる。あるいはまた、シュレッド・スケジューラはSEL（図４の４２０参照）の一部として動作しうる。シュレッド・スケジューラの少なくとも一つの実施例に関するさらなる詳細は、同時係属中の出願で“Mechanism  to  Schedule  Threads  on  OS-Sequestered  Sequencers  without  Operating  System  Intervention（オペレーティング・システム介入なしにOS隔離シーケンサー上でスレッドをスケジューリングする機構）”と題する米国特許出願第＿＿＿＿（代理人整理番号42390.P20205）に見出されうる。
【００５８】
ブロック７２８から、処理はブロック７３０に進みうる。ブロック７３０では、方法７００はOS可視シーケンサーについて仮想メモリ制御構造（VMCS）を設定する。ブロック７３０で設定されるVMCSの値は、OS可視シーケンサー上で例外が生じるたびにVMMへのトラップを引き起こすよう操作されうる。次いで処理はブロック７３２に進みうる。
【００５９】
ブロック７３２では、方法７００はVMENTERを実行して、制御を、最初にSELを起動した（ブロック７０６参照）ドライバに戻しうる。移行７３２は事実上、OS可視シーケンサーについて、制御をOSに与える。少なくとも一つの実施例については、この第一のVMENTERが起動時に実行されたあと、OS可視シーケンサーについてのオペレーティング・システムは、VMM上でゲストとして非特権モード（のちに論じる「0D」）で走りうる。次いでそのゲストOSは、ブロック７０８で通常の処理を実行することに進みうる。次いで方法７００についての処理はブロック７１０で終わりうる。
【００６０】
当業者は、図７の諸ブロックが、ここに記載される一般的な機能を維持する多様な代替的な順序で実行されうることを認識するであろう。たとえば、ブロック７２６のあと、ブロック７２８が実行される前に、ブロック７３０および７３２が実行されてもよい。
【００６１】
図８は、VMM８０６およびOS８０３起動後の例示的なマルチシーケンサー・システム８００の隔離シーケンサーS1およびOS可視シーケンサーS0の状態を示すブロック図である。図８に示される見本は二つのシーケンサーS0およびS1を含んでいる。少なくとも一つの実施例については、各シーケンサーS0およびS1はSMTマルチスレッド・プロセッサ８００の論理的なプロセッサである。少なくとも一つの代替的な実施例では、シーケンサーS0、S1は、マルチコア・マルチスレッド・システム８００のための複数のスレッドを同時並行して実行できる独立したプロセッサ・コアであってもよい。ここに記載されるすべての実施形態と同様、開示される技法は、図に示されるよりも多数または少数のシーケンサーを含むシステム上で実行されてもよい。
【００６２】
図８が示すところでは、第一のシーケンサーS0はOS８０３に可視であり、OS８０３の指令および制御でスレッドを実行しうる。OS８０３は、シーケンサーS0によって実行されるべき作業をスケジューリングする。しかしながら、OS８０３はVMM８０６のゲストとして動作するので、VMM８０６はシーケンサーS0、S1の両方を制御する。すなわち、少なくとも一つの実施例については、VMM８０６はすべてのシーケンサーS0、S1を制御し、OS８０３にとってのOS可視シーケンサーS0を仮想化する。シーケンサーS0が特権動作を実行しようとすると、たとえば、OS８０３上で走っているアプリケーション８０６が制御レジスタにアクセスしようとした場合、VMM８０８はOS８０３に明かされている制御値を操作する。
【００６３】
OS８０３の上で走るアプリケーション（単数または複数）８０８は、OS８０３のリング3で、非特権（deprivileged）モードで走る。そのようなアプリケーション８０８のための非特権的なリング3動作モードは図８では、記号「3D」によって表されている。ゲストOS８０３のカーネルおよびドライバ８１２はオペレーティング・システム８０３のリング0で走るが、非特権モードである。オペレーティング・システム８０３のための非特権的なリング0動作モードは図８では記号「0D」によって表されている。
【００６４】
図８が示すところでは、OS８０３から隔離されているシーケンサーS1はVMM８０６制御のもとで動作する。図８はさらに、VMM８０６が特権的な（privileged）リング0モード、P0で動作することを示している。ある種の特権動作は、OS可視シーケンサーS0によって実行されることが試みられる場合、VMM８０６へのVMEXITを引き起こしうる。そのようなVMEXIT処理のSEL８０２の扱いのさらなる記述は、以下で図９〜図１３との関連でより詳細に述べる。
【００６５】
〈シーケンサー算術〉ここでの用法では、シーケンサー算術（Sequencer  Arithmetic）の用語は、二つの隔離シーケンサーの間でのユーザーレベルの制御移行を指すために使われる。SEL（図４の４０２参照）の少なくとも一つの実施例については、同期的および非同期的両方のシーケンサー間制御移行機能が与えられる。もちろん、代替的な実施例では、同期的なシーケンサー間制御移行機能のみ、あるいは非同期的なシーケンサー間制御移行機能のみが与えられてもよい。同期的および／または非同期的なユーザーレベルのシーケンサー間制御移行機能は、根底にあるシーケンサー・ハードウェアがそのような機能のアーキテクチャ上のサポートを提供しているかどうかに関わりなく、SELによって提供されうる。
【００６６】
一般に、SELの同期的な制御移行機能は、第一のシーケンサーによって実行されたときに第二のシーケンサーに送られるべき信号を引き起こすユーザーレベルの命令によって呼び出されうる。少なくとも一つの実施例については、SELのシーケンサー算術機能を呼び出すためには、ここでVMCALLと称される新しいユーザーレベルの命令がプログラマによって利用されうる。VMCALL命令のパラメータは、さまざまな型のシーケンサー間制御移行シナリオを実施するために、ユーザーレベルのアプリケーションによって操作されうる。（そのようなシーケンサー間制御移行シナリオの例示的な見本は下記の表１に記載されている。）この新しいVMCALL命令を利用するユーザーレベルのアプリケーションは、ここでは「シュレッドを認識する（shred-aware）」アプリケーションと称される。
【００６７】
この新たなVMCALL命令の少なくとも一つの実施例は、シュレッド認識ゲスト・ソフトウェアが、ゲスト・ソフトウェアからVMMへのVMEXITを強制することを許容する。次いでVMMは隔離されたシーケンサーへの信号伝達を管理する。表１は、ユーザーレベルのアプリケーションによるVMCALL命令の使用によって開始されうる、そしてVMMによって処理されうる信号伝達シナリオのさまざまな見本実施形態を述べている。VMCALLはゲスト・ソフトウェアの制御からの抜け出しを引き起こすので、表１に挙げられているシナリオはここでは「出行（egress）シナリオ」と称される。他の実施形態については、追加的または異なる出行シナリオを実装してもよい。
【００６８】
表１  OS可視シーケンサーから隔離シーケンサーに移るための同期的なシーケンサー間制御移行についての出行シナリオ
【００６９】
【表１】
2011103132.tif 000003
したがって、ここでシュレッド移行（SXFR）機能と称される、シーケンサー演算の同期的なシーケンサー間制御移行特徴は、シーケンサーどうしの間でのサービスのためにシーケンサー間信号伝達を実行する機構を提供する。SXFR機能は同期的（synchronous）である。これは、アプリケーション・プログラマが、SXFR機能を呼び出す命令をシュレッド認識コードの中に巧妙に位置させることによって、信号を生成するシーケンサーのシュレッド命令ストリーム中の他の命令の実行との関係で、制御移行の実行のタイミングを制御できるという意味においてである。ここでの用法では、SXFR機能のための信号を生成するシーケンサーは、サーブ側（servant）シーケンサーと称され、生成された信号の受信側はここではクライアント（client）シーケンサーと称される。
【００７０】
SXFR機能は、前記新しいVMCALL命令のある変形によってユーザーレベルのアプリケーションから呼び出されうる。VMCALL命令を処理する際に、VMMは、新たなユーザーレベルの命令を扱うことができ、それにより非同期的な制御移行を隔離シーケンサーに受け容れさせるようにする。VMMは、ユーザー生成されたVMCALL命令の結果として、隔離シーケンサーに送られる制御メッセージを生成しうる。そのような制御メッセージは、サーブ側シーケンサーをして、VMMによって指令されるとおりに非同期的に制御を受け容れさせる。そのような非同期的な入行（ingress）イベントはシュレッドに、そのはいってくるイベントを処理させる。割り込み処理と同様である。入行シナリオ信号が隔離シーケンサーによって受信される時点においてシュレッドが現在隔離シーケンサー上で実行されている場合、VMMはそのシュレッドの実行を新たな命令ポインタ・アドレス（EIP）にリダイレクトしうる。上述したように、そのような処理は、シュレッド上の実行を新たなEIPにリダイレクトするために、実行中のシュレッドにユーザーレベルの割り込みを配送することに近い。
【００７１】
信号はシュレッドをしてVMM制御のもとで実行を開始させるので、表２に挙げられるシナリオはここでは「入行（ingress）シナリオ」と称される。他の実施形態については、追加的または異なる入行シナリオを実装してもよい。
【００７２】
表２  OS可視シーケンサーから隔離シーケンサーへ移るための非同期的なシーケンサー間制御移行についての入行シナリオ
【００７３】
【表２】
2011103132.tif 000004
よって、VMMは、OS可視シーケンサーとOS隔離シーケンサーとの間でシュレッド実行を開始および停止させるための、表１および表２に挙げられた出行および入行シナリオを実装するためのインターフェースを提供する。ここで、図９および図１０が参照されるこれらの図は、VMCALL命令を利用して、VMMがOS可視シーケンサー上で走っているシュレッド認識プログラムから隔離シーケンサーへのシーケンサー間信号伝達を容易にするようにするための方法９００、１０００の例示的な実施形態を示している。図９は、シーケンサーに新たなアドレスで実行を継続するよう指令するVMCALL命令の変形を処理するための方法９００の少なくとも一つの実施形態を示している。図１０は、分岐動作を実行するVMCALL命令の変形を処理するための方法１０００の少なくとも一つの実施形態を示している。
【００７４】
図９は、方法９００の少なくとも一つの実施形態およびSEL９５０を介した隔離シーケンサーへの信号伝達を実装するためのVMCALL命令の変形を実行するための制御フローを示す制御フロー図である。そのような変形は、たとえば、以前にサスペンドされた、今その次の命令のEIP以外のEIPにおいて再開されるべきであるシュレッドについて利用されうる。そのような使用のため、この信号伝達変形は、のちに図１２との関連で論じされる再開機構の変形として考えてもよい。この変形はまた、シーケンサーどうしの間の他の任意の信号伝達のためにも使われうる。よって、図９に示される信号伝達変形は、表１に挙げられた出行シナリオの一つまたは複数を実装するための基本的な機構として利用されうる。図９に示された方法９００は、SELのシーケンサー算術モジュール（たとえば図４に示されたSEL４０２のシーケンサー算術モジュール４０８参照）によって実行されうる。
【００７５】
図９が示すところでは、方法９００は、ある命令ポインタアドレス（ａ）から別の命令ポインタアドレス（ｊ）に隔離シーケンサーｎの実行をリダイレクトしうる。方法９００の動作は、少なくとも一つの実施例については、SEL９５０（VMMの一部として具現されているか否かによらず）によって実行されうる。少なくとも一つの実施例については、方法９００は、SEL９５０のシーケンサー算術モジュール（図４の４０８参照）によって実行されうる。
【００７６】
図９が示すところでは、VMCALL命令を実行するための方法９００がトリガーされうるのは、OS可視シーケンサーｍがVMCALL命令を、そのVMCALL命令がSXFR機能を実装するものであることを示すよう設定されたパラメータをもって実行９０２するときである。具体的には、図９は、VMCALL命令が、別個の隔離シーケンサーｎ上のシュレッドを新たなEPIにおいて実行再開するようリダイレクトするタイプの同期的な制御移行命令「リダイレクト」を示していることを図示している。
【００７７】
図９が示すところでは、VMCALL命令のシーケンサーｎ上での実行９０２は、シーケンサーｍ上で走っているゲストOS（図示せず）からSEL９５０へのトラップを引き起こす。そのようなトラップを受けて、SEL９５０は方法９００の実行をブロック９１０で開始し、処理はブロック９１２へと進む。
【００７８】
ブロック９１２は、SEL９５０がすぐには隔離シーケンサーに非同期的な割り込みイベントを配送しなくてもよい実施形態について実行される。他の実施形態については、もちろん、ブロック９１２、９１４または９１６を実行することなく、非同期的な割り込みはすぐ配送され、ブロック９１８で始まってもよい。図９に示される実施形態については、SEL９５０はブロック９１２で、リダイレクト信号が指定されたシーケンサーｎへの配送のために列にはいっているという事実を記録する。次いで処理はブロック９１４に進む。
【００７９】
ブロック９１４では、SEL９５０はリング0からリング3への遷移が起こるのを待つ。そのような遷移を受けて、処理はブロック９１６に進む。ブロック９１６では、SEL９５０は、シュレッド・イベントが以前にブロック９１２で記録されたことを判別する。したがって、処理はそのイベントを処理するためにブロック９１８に進む。
【００８０】
ブロック９１８では、SEL９５０は、シーケンサーｎ上のサスペンドされたシュレッドが実行を再開していたはずのEIP（図９では命令ａのためのアドレスとして示されている）をそのシュレッドに関連付けられたスタックにプッシュする。このようにして、現在のEIPは、シュレッドの現在の命令ストリームののちの再開のために保存される。次いで処理はブロック９２０に進む。
【００８１】
ブロック９２０では、SEL９５０は、シュレッドのスタックを操作して、シーケンサーｎ上のシュレッドについて命令ｊで実行を開始する「call」命令を機能的に模倣する。VMM９５０はこうして、シーケンサーｎ上のシュレッドを、新たなEIP  ｊにおいて再開させる。方法９００のための処理は次いで、ブロック９２１に進む。ブロック９２１では、SEL９５０はOS可視シーケンサーｍに制御を返す。次いで処理はブロック９２２で終わる。
【００８２】
図９が示すところでは、新たなEIP  ｊで実行を開始するシュレッドは、信号サービス・ルーチン９７０と考えられうる。信号サービス・ルーチン９７０は復帰命令９７２で終わりうる。復帰命令９７２のシーケンサーｎによる実行は、処理の、シーケンサーｎ上での、その処理が中断されたEIP  ａでの再開につながりうる。そのような動作は、さまざまな実施例について、さまざまな機構によって実施されうる。たとえば、少なくとも一つの実施例については、復帰命令９７２を受けて次の動作が実行されうる：復帰命令９７２の実行に際して、シーケンサーｎはスタックから、ブロック９１８でSEL９５０によって該スタックにプッシュされたEIPの値をポップさせうる。シーケンサーｎは次いで、処理を、その処理が中断されたEIP  ａにおいて再開しうる。
【００８３】
あるいはまた、シーケンサーｎの処理を、その処理が中断されたEIP  ａにおいて再開するために他の機構が用いてもよい。少なくとも一つの代替的な実施例については、スタックのポップは含まれない。代わりに、別の呼び出し慣行が利用されうる。そのような代替的な呼び出し創案の一つは、たとえば、スタックではなくレジスタを利用する、分岐およびリンク（branch-and-link）式の復帰機構である。
【００８４】
図１０は、SEL１０５０によって提供されうるシーケンサー算術機能のもう一つの実施形態を示す制御フロー図である。図１０は、分岐出行シナリオを実装するためのVMCALL命令の実行を示している。VMMは、VMCALL命令のこの特定の変形を処理することで、OS可視シーケンサーが、隔離シーケンサーに（新たなシュレッドを始めるための）信号を送ることを許容する。ここでもまた、図１０に示される方法１０００は、SELのシーケンサー算術モジュール（たとえば図４に示されたSEL４０２のシーケンサー算術モジュール４０８参照）によって実行されうる。
【００８５】
図１０が示すところでは、隔離されたシーケンサーに付随する新たな命令ポインタアドレスで実行を開始するよう新たなスレッドの実行を指令しうる。図１０では、分岐命令がシュレッド認識シュレッドによって生成される実施形態を示しているが、そのような例は限定するものと解釈すべきではない。本発明の諸実施形態は、分岐命令が、ある隔離シーケンサーによって別の隔離シーケンサー上にシュレッドを発生させるために実行されてもよいことを考えている。
【００８６】
図１０が示すところでは、SEL１０５０は、図９に示されたリダイレクションの追加または代替として、OS可視シーケンサーｘ上のユーザー生成された命令が隔離シーケンサーｙ上のシュレッドの発生を引き起こしうるように分岐動作を実行する。上記の表１に示されているように、アプリケーション・プログラマは、分岐出行シナリオのためのVMCALL命令を、OS可視シーケンサーｘ上で走っているシュレッド認識アプリケーション中に位置させうる。
【００８７】
OS可視シーケンサーｘ上で動作するシュレッド認識プログラムがVMCALL命令の「分岐」変形（図１０のEIP「ｔ」での命令として示されている）を実行するとき、その命令において指定されている「分岐」出行シナリオは、SEL１０５０への制御の移行を引き起こす。分岐命令の実行は図１０の１００２で示されている。図１０が示すところでは、VMCALL命令の分岐変形の少なくとも一つの実施例は、発生したスレッドが実行を開始すべきEIP（「ｕ」）および新たなシュレッドのためにリザーブされるスタック・スペースを表す指標（「stack」）を示している。任意的なパラメータとして、アプリケーション・プログラマは、新たなシュレッドが実行されるべき隔離されたシーケンサーｙを指定しうる。あるいはまた、アプリケーション・プログラマはそのような割り当て機能はSEL１０５０に任せてもよい。SEL１０５０は新たなシュレッドのために隔離シーケンサーを、たとえばラウンドロビン割り当てポリシーに従って割り当てうる。
【００８８】
OS可視シーケンサー（ｘ）によるVMCALL命令の分岐変形の実行の結果としての結果として得られる制御の移行は、図１０ではVMEXITと称されている。VMEXITを受けて、SEL１０５０は分岐動作を実行するための方法１０００の実行を開始する。
【００８９】
図１０が示すところでは、方法１０００はブロック１０１０で始まり、ブロック１０１２に進む。ブロック１０１２では、SEL１０５０は、そのシュレッドのために隔離シーケンサーｙを割り当て、その割り当てられたシーケンサーｙのための実行１００２環境を生成する。ブロック１０１２では、少なくとも一つの実施例については、実行環境は下記のような仕方で生成される。下記に与えられる例は単に例示の目的のためにウィンドウズ（登録商標）オペレーティング・システムの諸機能を利用する一つの実施例であることは理解しておくべきである。他の実施形態では、新たなシュレッドのための実行環境の生成を他の、あるいは追加的な構造を利用して行うこともできる
VMCS１０８０からの、シーケンサーｘのためのゲスト状態領域は、シーケンサーｘ上でシュレッド認識アプリケーションを実行するためにオペレーティング・システムによって設定された状態のスナップショットを含む。そのようなゲスト状態は、CR3のような制御レジスタのための値のほか、グローバル記述子テーブル・レジスタ（global  descriptor  table  register）（「GDTR」）およびセグメント・レジスタのための値を含みうる。ブロック１０１２では、VMCS１０８０において反映されているシーケンサーｘのためのゲスト状態がSEL１０５０によってコピーされる。それにより、VMCALL分岐命令において同定された新たなシュレッドを実行するためにSEL１０５０によって割り当てられた隔離シーケンサーｙに関連付けられたVMCS１０８２内に状態が設定される。
【００９０】
こうして、SEL１０５０は、新たなシュレッドを実行するシーケンサーｙのためのゲスト状態を埋めるために、発生元のシーケンサーｘのためのゲスト状態を使うのである。したがって、ブロック１０１２において、SEL１０５０は、シーケンサーｘ上でのシュレッド認識アプリケーションの実行のためにオペレーティング・システムによって設定された実行環境を模倣する実行環境を、隔離シーケンサーｙのために生成するという目標を実施しうるのである。
【００９１】
次いでSEL１０５０は、隔離シーケンサーｙのためのVMCS１０８２内の隔離シーケンサーの状態を、VMCALL分岐命令のパラメータを利用して修正しうる（まだブロック１０１２）。ブロック１０１２において、隔離シーケンサーｙのためのゲストEIPは、VMCS１０８２内において、VMCALL分岐命令において指定されているEIP  ｕを反映するよう修正されうる。同様に、ブロック１０１２において、SEL１０５０はまた、VMCS１０８２内のゲスト・スタック・ポインタを、VMCALL分岐命令において指定されているスタック・ポインタ値「stack」を反映するよう修正しうる。ブロック１０１２において、SEL１０５０はまた、隔離シーケンサーｙのためのVMCS１０８２内のフラグを修正して、シュレッド実行の間、あらゆるマスク可能割り込みがブロックされることを示してもよい。
【００９２】
これらの修正された値（EIP、スタック・ポインタおよび割り込みフラグのような）のほかは、OS可視のシュレッド認識シーケンサーｘのためのVMCS１０８２内のゲスト状態は、ブロック１０１２で隔離シーケンサーｙのために生成されたゲスト状態（VMCS１０８２に反映されている）と同一である。次いで処理はブロック１０１４に進む。
【００９３】
ブロック１０１４では、SEL１０５０はシュレッドが実行されるコンテキストに対応するスレッドを記録する。少なくとも一つのウィンドウズ（登録商標）ベースの実施例については、SEL１０５０は、そうするために、OSに割り当てられたスレッドIDを利用する。少なくとも一つの実施例については、OS可視シーケンサー（ｘのような）によって生成されるあらゆるシュレッドは仮想メモリのビューをOS可視シーケンサーと共有するので、ブロック１０１４では、OS可視シーケンサーについてのスレッドIDの値が、隔離シーケンサー（ｙのような）のための新たなシュレッドが実行されるコンテキストに対応するプロセスを同定するために記録される。次いで処理はブロック１０１６に進む。
【００９４】
ブロック１０１６では、SEL１０５０は、OS可視シーケンサーｘのためのゲストOSが、OS可視シーケンサーｘ上でシュレッド認識アプリケーションの実行を再開することを許容する。少なくとも一つの実施例については、これは、OS可視シーケンサーｘのためのゲストOSに制御を戻すVMRESUME命令を実行することによって達成される。また、SEL１０５０は、ブロック１０１２で生成された実行環境において隔離シーケンサーｙ上のシュレッドのコードの実行を開始するためのVMENTER動作をも実行する。次いで処理はブロック１０１８で終わる。
【００９５】
VMENTERに際して、隔離シーケンサー（ｙ）のメモリのビューは、シーケンサーｘのメモリのビューと同一である。というのも、いずれのシーケンサーも、それぞれのVMCS１０８０、１０８２において、ゲスト・モード実行のための同じGDTレジスタ値およびCR3レジスタ値に関連付けられているからである。当業者は、GDTレジスタ値およびCR3レジスタ値が、それぞれのシーケンサーｘ、ｙによる実行の間に仮想アドレスが物理的なアドレスに変換される仕方に影響することを認識するであろう。
【００９６】
図１０が示すところでは、方法１０００を実行することによって、SEL１０５０は事実上、上記の表２に示したgo_shred入行シナリオに類似した非同期的な入行シナリオを実装している。隔離シーケンサーｘのための入行シナリオは、シュレッド認識アプリケーションにおいてユーザー供給されるVMCALL分岐命令を受けて実行される。図１０が示すところでは、方法１０００の他のブロック１０１０〜１０１４を実行したのち、SEL１０５０は、ブロック１０１６でシュレッド・コードの実行を開始する。また、隔離シーケンサーｙのために設定された実行環境は、OS制御シーケンサーｘのためにオペレーティング・システムによって設定された実行環境と実質的に同一である。このようにして、SEL１０５０による方法１０００の実行は、事実上、分岐動作について、図１および図２との関連で先に論じた共有メモリ・並列マルチプロセッシング・パラダイムを達成する。
【００９７】
図９および図１０は、ソフトウェア・エミュレーション層の少なくとも一つの実施形態のためのシーケンサー算術機能の個別的な例示的な例を示すために与えられている。そのような例は限定するものと解釈すべきではない。SEL１０５０は他の多くのシーケンサー算術機能も備えうる。
【００９８】
〈ユーザーレベルの例外処理〉ここに記載される少なくとも一つの実施例については、隔離シーケンサー（単数または複数）上でのユーザーレベルのシュレッド命令の実行は、OS可視シーケンサー上または隔離シーケンサー上のいずれかでのシュレッド実行の間のリング遷移に際してサスペンドされるべきである。リング遷移はしばしば、OS可視シーケンサー上または隔離シーケンサー上のいずれかで発生される例外、割り込みまたはシステム・コールに反応して生じる。OS可視シーケンサー上でのリング遷移については、サスペンドされたシュレッドの実行が再開されるのは、その割り込み／例外／システム・コールがOSによって処理されたあと、次いでOSがそのシュレッド認識アプリケーションを継続実行のためにスケジューリングするときである。少なくとも一つの実施例については、図１０および図１１との関連で以下に論じられるシュレッドのサスペンドおよび再開の方法は、遷移検出モジュール（たとえば図４に示されるSEL４０２の遷移検出モジュール４１０参照）によって実行されてもよい。
【００９９】
図１１は、リング遷移に起因するシュレッド・サスペンドのための機構の少なくとも一つの実施形態を示す制御フロー図である。図１１に示される機構は、具体的な例――OS可視シーケンサーｃ上でリング3からリング0への遷移が起こるときに隔離シーケンサーｄ上でシュレッド実行をサスペンドする――の背景において呈示される。もちろん、当業者は、OS隔離シーケンサー上でリング3からリング0への遷移が起こるときにも同様のサスペンド論理が用いられうることを認識するであろう（下記のプロキシ機構の議論を参照）。
【０１００】
図１１に示されたサスペンド機構の少なくとも一つの実施例について、動作の三つの段階が図示されている。第一段階１１１０では、初期化が実行される。そのような初期化１１１０はSEL１１５０によって実行されうる。少なくとも一つの実施例については、初期化１１１０は、例外に起因するリング3からリング0への遷移が例外として記録され、したがってVMEXITを引き起こすようにするために実行される。そのような初期化１１１０の間に、OS可視シーケンサーｃ上でのスレッド実行の間にリング3からリング0への遷移が起こるときはいつでもSEL１１５０制御への遷移が起こるように制御構造が構成される。
【０１０１】
少なくとも一つの実施例については、初期化１１１０は、OS可視シーケンサーのためのVMCS１０８０内の例外ビット・マップにおいて、所望のシステム・イベント（シーケンサーｃ上での例外に起因するリング3からリング0への遷移）についての例外ビットをセットすることによって実行されうる。図１１にはOS可視シーケンサーｃ一つとその対応するVMCS１１８０が示されているだけだが、初期化１１１０は複数のOS可視シーケンサーについて実行されてもよいことは理解しておくべきである。
【０１０２】
SEL１１５０がVMMの一部である実施形態については、初期化１１１０は、シーケンサーｃ上での例外に起因するリング遷移の生起に際して、VMCS１１８０の例外ビット・マップを使ってVMEXIT（VMMへの制御の移行）を引き起こす機構を実施する。
【０１０３】
もちろん、割り込みまたはシステム・コールといった他の型のシステム・イベントも、OS可視シーケンサーｃについてのシュレッド処理の間に起こりうる。初期化１１１０は、割り込みまたはシステム・コールまたはOS可視シーケンサーｃ上でのOSの処理を必要とするその他のシステム・イベントの生起に際してもVMEXITを引き起こすようにする。少なくとも一つの実施例については、割り込み、システム・コールなどについての初期化１１１０はトランポリン機構を介して実装されうる。トランポリン機構は、ある種のシュレッド・サスペンド動作を実行するために、ゲストOSからの第一の「バウンス」に際して、ゲストOSに制御を「バウンス」し戻すまで、暫時、制御を受け容れる。
【０１０４】
割り込みについてのトランポリン機構の実施例については、SEL１１５０は割り込みのホスト制御のための機構を、ゲストOSが走っているときに割り込みが起こったときは常にSEL１１５０が制御を得るように構成しうる。少なくとも一つの実施例については、SEL１１５０は、初期化１１１０の間に、特殊なドライバを呼び出しうる。ドライバは、OS可視シーケンサーのゲストOSによって割り込みおよびシステム・コールを処理するために利用される、ある種の設定を修正しうる。
【０１０５】
一般性を失うことなく、トランポリン機構を構成する個別的な例が与えられているが、例はいかなる観点でも限定するものと解釈すべきではない。そのような構成はいくつかの異なる仕方のいずれにおいても達成しうるからである。少なくとも一つの実施例については、初期化１１１０の間に、ドライバが割り込み記述子テーブル（IDT:  interrupt  descriptor  table）を修正しうる。そのような修正は、システム・コールおよび割り込みに関連付けられた一つまたは複数の割り込みサービス・ルーチン（ISR:  interrupt  service  routine）に関連付けられたIDTにおいてオフセットを修正しうる。修正されたオフセットは、割り込みまたはシステム・コールに関連付けられたISRが実行される前にVMCALLを生成させうる。よって、初期化１１１０の間にIDTになされた修正は、OS可視シーケンサーｃ上で割り込みまたはシステム・コールが起こるときにSEL１１５０に制御を「バウンス」させうる。のちにより詳細に論じるように、SEL１１５０は、制御がシーケンサーｃのためのISRに「バウンス」し戻されるまでにある種のシュレッド・サスペンド動作を行いうる。
【０１０６】
トランポリン機構は、システム・コールについて同様の仕方でブロック１１１０において初期化されうる。ブロック１１１０において、SEL１１５０は、該SEL１１５０がシステム・コールの生起を検出できるよう初期化を実行しうる。少なくとも一つの実施例については、この初期化は、高速システム・コールまたは通常はSEL１１５０をバイパスするその他の型のシステム・コールを無効にすることによって実施されうる。そのような実施例については、高速システム・コールを無効にすることにより、OS可視シーケンサーのためのゲストOSは、システム・コールのために割り込み命令（たとえばINTのような）を使うことになる。もちろん、SEL１１５０が高速システム・コールをトラップしうる実施形態については、高速システム・コールは必ずしも無効にされる必要はなく、高速システム・コールがSEL１１５０にトラップすることを保証するよう、IDT（次段落で言及）の修正を実行することができる。
【０１０７】
ブロック１１１０において初期化はさらに実行され、それにより、OS可視シーケンサーｃのためのゲストOSによる割り込み命令（または高速システム・コールのようなその他のシステム・コール）の実行が、割り込み（すなわちIDTの修正）について上記したのと同様の仕方で、SEL１１５０に制御を「バウンス」し戻しうる。換言すれば、そのような初期化１１１０は、システム・コールをSEL１１５０にトラップさせる。
【０１０８】
最後に、ブロック１１１０における初期化は、シーケンサーｄのようなOS隔離シーケンサーの初期化も含みうる。それにより、OS隔離シーケンサーは、マスク不可割り込み（NMI:  non-maskable  interrupt）を受け取るときはいつでもSEL１１５０にトラップすることになる（ブロック１１０４との関連での下記のさらなる議論を参照）。そのような初期化は、NMIが受信されたときにSEL１１５０制御への遷移が起こるべきであると示すよう、隔離シーケンサーｄに関連付けられたVMCS１１８２についての例外ビット・マップを修正することによって実行されうる。
【０１０９】
図１１は、OS可視シーケンサーｃによって第二段階１１２０が実行されうることを示している。OS可視シーケンサーｃ上でのスレッドの実行の間に、シーケンサーはリング3からリング0への遷移に起因する例外を生成しうる。あるいはシステム・コール、割り込みまたはOSサービスを必要とするその他のシステム・イベントに遭遇しうる。上で論じた初期化１１１０のため、そのようなイベントの生起は、シーケンサーｃのためのゲストOSにそのイベントをすぐ処理することを許容するのではなく、SEL１１５０制御へのVMEXIT型の遷移を引き起こしうる。SEL１２５０がVMMの一部である実施形態については、第二段階１１２０の間に生成される遷移１１０１はVMEXITと呼ばれうる。
【０１１０】
図１１は、VMEXIT型の遷移に際して、制御がSEL１１５０に移行されることを示している。第三段階１１３０の間に、SEL１１５０はシュレッド・サスペンドのための方法１１００を実行する。SEL１１５０論理がVMMに組み込まれる実施形態については、方法１１００はVMMによって実行されうる。
【０１１１】
図１１が示すところでは、OS可視シーケンサーｃ上でのシステム・イベントによってトリガーされるVMEXIT１１０１を受けて、SEL１１５０は、ゲストOSがOS可視シーケンサーｃ上の該イベントを処理することを許容するのに先立ち、方法１１００を実行する。そのような機構を用いうるのは、少なくとも次の理由による。すなわち、ゲストOSは隔離されたシュレッドを認識せず、したがって、ゲストOSの何らかのカーネル・モード・コードがOS可視シーケンサー上で実行されている間はシュレッドは実行を続けるべきではないからである。
【０１１２】
図１１が示すところでは、方法１１００はブロック１１０２で始まり、ブロック１１０４に進む。ブロック１１０４では、SEL１１５０は割り込みを一つまたは複数のOS隔離シーケンサーｄに送る。該OS隔離シーケンサーｄは、OS可視シーケンサーｃによって実行されるシュレッド認識コードに関連付けられたコードを走らせている。図１１は、そのような隔離シーケンサーを一つしか示していないが、当業者は、ブロック１１０４で複数の隔離シーケンサーに割り込みが発されてもよいことを認識するであろう。少なくとも一つの実施例については、ブロック１１０４で発される割り込みは、受信シーケンサーが無視できないマスク不可割り込みである。SEL１１５０がブロック１１０４で割り込みを発生させるのは、一例では、高度プログラム可能割り込みコントローラ（APIC:  Advanced  Programmable  Interrupt  Controller）をプログラムすることによってなされうる。
【０１１３】
ブロック１１０４において割り込みを送らしめることによって、SEL１１５０は事実上、隔離シーケンサーｄ上でのシュレッド実行の非同期的なサスペンドをトリガーし、したがって、「サスペンド」シュレッド制御命令をエミュレートする。このように、ブロック１１０４で割り込みをトリガーすることは、表２に示したシナリオに類似した、隔離シーケンサーｄについてのhalt_shred入行シナリオを実施する。SEL１１５０はブロック１１０６で、ブロック１１０４で発された割り込みに基づいて、隔離シーケンサーｄからの制御の遷移を待つ。
【０１１４】
図１１が示すところでは、ブロック１１０４で生成される割り込みはOS不可視シーケンサーｄによって受信されることができ、今度は該隔離シーケンサーｄについてSEL１１５０制御への遷移１１０５を引き起こすことができる。ここでもまた、SEL１１５０論理がVMMに組み込まれている実施形態については、そのような遷移１１５０はVMEXITと称されうる。（ブロック１１０４において二つ以上の隔離シーケンサーに割り込みが発された場合、複数シーケンサーのそれぞれがVMEXITを生成し、その後のブロック１１０８および１１１０はこの複数の隔離シーケンサーのそれぞれについて実行されうる。）
ブロック１１０４で発された割り込みによって引き起こされた、OS隔離シーケンサーｄからのVMEXIT１１０５を受けて、SEL１１５０はブロック１１０６でその遷移を検出し、ブロック１１０８の実行に進む。ブロック１１０８では、SEL１１５０は、システム・イベントがOS可視シーケンサーｃのゲストOSのイベント・ハンドラ・ルーチンによって処理されたあとのシュレッド再開の準備をするための処理を実行する。そうするために、SEL１１５０の少なくとも一つの実施例は、コード・ブレークポイントを利用する。
【０１１５】
したがって、ブロック１１０８において、SEL１１５０は一つまたは複数のデバッグ・レジスタ（DR:  debug  register）にコード・ブレークポイントを設定しうる。それにより、OS可視シーケンサーのために、システム・イベントがもともとトリガーされた命令のEIP命令アドレスｔにおいてコード・ブレークポイントが設定される。OS可視シーケンサーｃのためのゲストOSがシステム・イベントを処理したあと、ゲストOSはシュレッド認識スレッドの実行をEIP  ｔにおいて開始し、よってシステム・イベントが処理されたあとにブレークポイントをトリガーすることが想定されている。（ブレークポイント処理のさらなる議論は、図１２およびシュレッド再開機構の議論に関連してのちに述べる。）少なくとも一つの実施例については、ブレークポイント機構により、SEL１１５０は、OS可視シーケンサー上でのリング遷移を、OS可視シーケンサーｃのゲストOSには透明な仕方で追跡できる。この透明というのは、ブレークポイントがゲストOSには見えないという意味においてである。
【０１１６】
次いで処理はブロック１１０８からブロック１１１０へと進む。ブロック１１１０では、SEL１１５０は、シーケンサーｃ上のイベントを生成したシュレッド認識スレッドに関連付けられた隔離シーケンサーｄのそれぞれを待機状態にする。次いで処理はブロック１１１２に進む。
【０１１７】
ブロック１１１２では、SEL１１５０は、制御を放棄してOS可視シーケンサーｃのためのゲストOSに戻す。それによりゲストOSがイベントを扱えるようになる。次いで処理はブロック１１１４で終わる。
【０１１８】
図１２は、リング遷移後にシュレッド実行を再開するための機構の少なくとも一つの実施形態についての制御フローおよび方法１２００を示す制御フロー図である。図１２は、図１１との関連で上で論じた見本シナリオの続きの見本シナリオを示している。
【０１１９】
図１２に示すところでは、OS可視シーケンサーｃがそのイベント処理シーケンスを完了して、最初にイベントを生成したシュレッド認識スレッドの命令ストリームの実行に戻っている。すなわち、図１２が示すところでは、OS可視シーケンサーｃは、図１１のブロック１１０８でブレークポイントが設定されたEIP  ｔにおける命令を実行している。
【０１２０】
図１２が示すところでは、ブレークポイントが設定されている命令ｔの実行が、SEL１２５０制御への遷移を引き起こすデバッグ例外を生成する。ここで、SEL１２５０は、サスペンド方法１１００（図１１）の間に自らが設定したブレークポイントに頼って、いつシュレッドを再開するかを決める。
【０１２１】
図１２が示すところでは、SEL１２５０が、遷移１２０１に反応してシュレッド再開方法１２００を開始する。本方法は、ブロック１２０２で始まり、ブロック１２０４に進む。ブロック１２０４では、そのデバッグ例外および結果としての制御遷移を生成したのが適切なシュレッドであることを確認するために認証が実行される。すなわち、少なくとも一つの実施例については、デバッグ例外は、任意のスレッドが、たとえそれが別のスレッドであっても、指定されたブレークポイントEIPアドレスでの命令を実行するときにトリガーされることができるのである。
【０１２２】
こうして、ブロック１２０４では、SEL１２５０は、そのデバッグ例外および結果としての制御遷移１２０１を生成するスレッドに関連付けられたスレッド識別子が、サスペンドされたシュレッドが関連付けられているスレッドのスレッド識別子に一致することを確認する。少なくとも一つの実施例については、そのような認証１２０４は、OS可視シーケンサーｃのためのVMCS１２８０のゲスト領域におけるスレッド識別子（CR3レジスタ値のような）を、隔離されたシーケンサーｄのためのVMCS１２８２のゲスト領域におけるスレッド識別子の値（CR3レジスタ値のような）と比較することによって実行される。それらの値が一致すれば、処理はブロック１２０６に進む。そうでなければ、遷移１２０１は、「誤ったヒット」に起因して生成されたことになり、処理はブロック１２１０に進む。
【０１２３】
ブロック１２０６では、SEL１２５０は、以前に図１１のブロック１１０８でデバッグ・レジスタに設定したブレークポイント値をクリアする。次いで処理はブロック１２０８および１２０９に進む。そこでは、OS可視スレッドおよびOS不可視スレッド両方についての制御をSEL１２５０が放棄する（必ずしも示されている順序ではない）。次いで処理はブロック１２１４で終わる。
【０１２４】
ブロック１２１０では、EIP  ｔでの命令は一ステップずつ実行される（これは、シーケンサーｃによる次の命令の実行後に例外が生成されるべきであることを指定するために、EFLAGSインジケータのような例外インジケータの修正を含みうる）。処理は次いでブロック１２１２に進む。ブロック１２１２では、デバッグ・レジスタ（単数または複数）は、図１１のブロック１１０８で生成されたブレークポイント設定をクリアされる。次いで処理はブロック１２１３に進む。ここで、制御は放棄されてOS可視シーケンサーのためのゲストOSに渡される。次いで方法１２００の処理はブロック１２１４で終わる。
【０１２５】
少なくとも一つの実施例については、「誤ったヒット」についての処理の間にブロック１２１３で制御が放棄されてOS可視シーケンサーに渡されたのち、再開機構のある追加的な段階（図示せず）が実行されうる。すなわち、ゲストOSがブロック１２１３の結果として制御を得たのち、ゲストOSはその次の命令を実行する。ブロック１２１０での一ステップ実行の設定のため、ゲストOSは、その一つの命令が実行されたのち、再び例外を経験する。この例外についての処理の間に、SEL１２１０は、デバッグ・レジスタをリセットすることがあり、そうすれば、SEL１２１０は、指示されたEIPがOS可視シーケンサー上のシュレッドによって実行された次のときに、シュレッド処理を再開することを試みようと方法１２００を実行できる。
【０１２６】
〈プロキシ実行〉ここでの用法では、プロキシ実行の用語は、シーケンサー間のシュレッド・マイグレーション――隔離シーケンサーからOS可視シーケンサーへの制御および状態情報の移転を指す。それによりOS可視シーケンサーがオペレーティング・システムをトリガーして隔離シーケンサーのために特権動作を実行させる。したがって、プロキシ実行は、隔離シーケンサー上のシュレッドの実行の間に起こるシステム・イベントを処理するためにOS可視シーケンサーがオペレーティング・システムの注意を得ることができる手段である。プロキシ実行は、非対称的な複数のシーケンサーを含むシステム上でアプリケーション・プログラマにアーキテクチャ上の対称性の幻想を呈するために利用されうる。プロキシ実行のさらなる議論のために図１３が参照される。
【０１２７】
図１３は、一つまたは複数の隔離シーケンサーｂおよび一つまたは複数のOS可視シーケンサーａを含むマルチシーケンサー・システムにおけるプロキシ実行機構の少なくとも一つの実施形態を示す制御フロー図である。図１３に示されるような少なくとも一つの実施形態については、OS可視シーケンサーａのためのゲストOSは隔離シーケンサーｂ上で実行されているシュレッドは認識しないと想定される。また、隔離シーケンサーｂ上で走っているシュレッドは、OSサービスを必要とする特権命令を実行することはできないものと想定される。少なくとも一つの実施例については、図１３に示される方法１３００はSELのプロキシ実行モジュールによって実行されうる（図４に示されるSEL４０２のモジュール４０６参照）。
【０１２８】
概括的には、図１３は、OS可視シーケンサーａが、ページ・フォールト、システム・コールなどといった、オペレーティング・システムからの何らかの形のサービスを必要とするイベントを扱うために、シュレッドのなりすましをする実施形態を示している。この方法により、オペレーティング・システムは、シュレッド実行の間に起こったシステム・イベントにサービスするようトリガーされる。
【０１２９】
解説の目的のため、図１３は、シュレッドによって生成されるページ・フォールトを扱うためのプロキシ実行を利用する方法を示している。しかしながら、当業者は、シュレッドのために、いかなる例外、割り込み、システム・コールまたはその他の特権イベントおよび／もしくはシステム・イベントを扱うためにも、図１３に示される方法１３００の代替的な諸実施形態を利用しうることを認識するであろう。
【０１３０】
図１３に示されたプロキシ機構の少なくとも一つの実施形態については、動作の三つの段階が図示されている。第一段階１３１０では、初期化が実行される。そのような初期化１３１０はSEL１３５０によって実行されうる。そのような初期化１３１０の間に、隔離シーケンサーｂ上で走っているシュレッドが選ばれた型のシステム・イベントに遭遇するときはいつでもSEL１３５０制御への遷移が起こるよう、制御構造が構成される。そのような初期化１３１０は、ページ・フォールト、システム・コールなどといった、プロキシ実行が望まれる複数の型のシステム・イベントについて実行されてもよい。初期化１３１０の結果として、隔離シーケンサーｂ上のスレッドの実行の間に、選ばれたイベント型の一つが起こるときは常に、SEL１３５０が制御を得る。SEL１３５０がVMMの一部である実施形態については、初期化１３１０は、選ばれたシステム・イベントのいずれかの生起に際してVMEXIT（VMMへの制御の移行）を引き起こす機構を実施する。
【０１３１】
少なくとも一つの実施例については、初期化１３１０は、隔離シーケンサーｂのためのVMCS１３８２内で、所望のシステム・イベントについての例外ビットをセットすることによって実行されうる。図１３には隔離シーケンサーｂ一つとその対応するVMCS１３８２が示されているだけだが、初期化１３１０は複数の隔離シーケンサーについて実行されてもよいことは理解しておくべきである。
【０１３２】
図１３は、隔離シーケンサーｂによって第二段階１３２０が実行されうることを示している。隔離シーケンサーｂ上でのスレッドの実行の間に、シーケンサーは選ばれたシステム・イベントの一つを生成しうる。そのシステム・イベントを受けて、そのシュレッドのためのイベント・ハンドラ（図示せず）がそのシュレッドの現在状態を捕捉しうる。該現在状態は、そのシュレッドについての現在EIPのほかシーケンサーによって生成された任意のエラー・コードをも含む、イベントの処理または同定を容易にするものである。（ゲストOSとしてウィンドウズ（登録商標）オペレーティング・システムを含む実施例については、シュレッド状態の捕捉は、システム・イベントを引き起こした命令のアドレスを捕捉する、CR2制御レジスタの値を捕捉することを含みうる。）次いでイベント・ハンドラはSEL１３５０制御への遷移１３０１を生成しうる。SEL１３５０がVMMの一部である実施形態については、第二段階１３２０の間に生成される遷移１３０１はVMEXITと呼ばれうる。
【０１３３】
その際、第二段階１３２０の間、SEL１３５０制御への遷移（VMEXITのような）は、選ばれたシステム・イベントの一つが起こるときにトリガーされる。そのような遷移１３０１は、シーケンサーｂのための初期化１３１０の間にシーケンサーのVMCS１３８２においてセットされた例外ビットに基づいてトリガーされうる。
【０１３４】
図１３は、VMEXIT型の遷移１３０１に際して、制御がSEL１３５０に移行されることを示している。第三段階１３３０の間に、SEL１３５０はプロキシ実行の方法１３００を実行する。一般に、方法１３００は、ａ）OS可視シーケンサー上で走っているOS可視スレッドの状態を保存すること、ｂ）イベントを生成するシュレッドからOS可視シーケンサーに状態を移すこと、ｃ）OS可視シーケンサーに制御を移行して、OS可視シーケンサーが（もし実現可能であれば）該OS可視シーケンサー上で、隔離シーケンサー上で起こったイベントを再現することができるようにすること、それによりｄ）オペレーティング・システムがそのイベントにサービスをすること、ｅ）SEL制御を再開して、OS可視シーケンサーのもとの状態を復元すること、ならびにｆ）次いでOS可視シーケンサーおよび隔離シーケンサー両方についてのもとの実行ストリームを続けること、に関わる。方法１３００のこれらの要素のそれぞれについて、以下でより詳細に論じる。
【０１３５】
ある代替的な実施形態については、SEL１３５０は、方法１３００を実行するのではなく、単にイベントをトラップして、次いでユーザー生成されたエラー処理ルーチンを実行するためにあらかじめ割り当てられたアドレスにジャンプしうる。そのような代替的な実施形態については、方法１３００の機能は、SEL１３５０ではなく、ユーザー生成されたエラー処理ルーチンによって実行されうる。
【０１３６】
図１３が示すところでは、方法１３００はブロック１３０２で始まり、ブロック１３０４に進む。ブロック１３０４では、SEL１３５０はシュレッド状態を隔離シーケンサーｂからOS可視シーケンサーａに移す準備をする。少なくとも一つの実施例については、そのような準備１３０４は、イベントを生成する隔離シーケンサーｂの状態を、OS可視シーケンサーａもアクセスできる状態記憶領域１３１５（領域「ｂ」参照）に保存することを含む。そのような動作は、少なくとも一つの実施例については、SEL１３５０によって実行されるVMCALL命令の個別的なコンテキスト状態記憶変形に反応して実行されうる。少なくとも一つの実施例については、ここではSSAVEと称される見本の（sample）コンテキスト状態記憶変形は、シーケンサー識別子と、保存領域１３１５へのポインタとを指定する。
【０１３７】
シュレッド状態マイグレーションのための準備１３０４はさらに、少なくとも一つの実施例については、OS可視シーケンサーａの状態を、該シーケンサーが隔離シーケンサーの状態を採用する前に保存することを含みうる。そのような方法では、OS可視シーケンサーａの状態は保存され、のちにOS可視シーケンサーａが自分のスレッドを再開するときに復元されうる。ここでもまた、OS可視シーケンサーａについての状態は、保存領域１３１５へのポインタを指定するコンテキスト保存命令に反応して、保存領域１３１５（領域「ａ」参照）に保存されうる。次いで処理はブロック１３０４からブロック１３０６に進みうる。
【０１３８】
ブロック１３０６では、イベントを生成するシュレッドのための制御は、隔離シーケンサーｂからOS可視シーケンサーａに移行される。少なくとも一つの実施例については、移行１３０６は、OS可視シュレッドについての入行シナリオの実行によって実施される。このシナリオは、SELによるVMCALL命令のプロキシ変形の実行によってトリガーされうるものである。（上述した代替的な実施形態については、移行１３０６は、隔離シーケンサーｂ上のエラー処理ルーチン（図示せず）によって生成されるVMCALLプロキシ命令によって実施されうる。）
VMCALL命令のプロキシ変形は、次のパラメータを指示しうる：宛先シーケンサー識別子、入行シナリオ識別子および待機／不待機指標。図１３のブロック１３０６は、図１３に示される例についての見本プロキシ命令についてのパラメータが、次のパラメータ値を含みうることを示している：ａ、begin_proxy、待機。それにより、制御がシーケンサーａに移行されてプロキシ・シナリオの実行が開始され、隔離シーケンサー（ｂ）は、自分の命令ストリームの実行を続ける前に該プロキシ・シナリオの完了を待つ。
【０１３９】
少なくとも一つの実施例については、制御のマイグレーション１３０６は、SEL１３５０によって実行される場合、OS可視シーケンサー上でのリング0からリング3への遷移を受けてSEL１３５０が制御を得るときに実行される。しかし、そのような待機は必須ではない。少なくとも一つの代替的な実施形態では、制御１３０６のマイグレーションは、SEL１３５０制御への次の遷移を待つのではなく、すぐに実行される。
【０１４０】
制御マイグレーション１３０６は、少なくとも一つの実施例については、イベントを生成するシーケンサーｂについての保存された状態（CR2およびEIPを含む）を、状態領域１３１５（部分ｂ）からプロキシ・シーケンサーａに移すことを含む。制御を移行する前に、SEL１３５０はまた、ブロック１３０６において、OS可視シーケンサー上にシステム・イベントを注入するための諸ステップを取り得る。
【０１４１】
図１３が示すところでは、ブロック１３０６で実行された制御移行を受けて、制御はOS可視シーケンサーａのためのOSに返される。制御移行１３０６は、OS可視シーケンサーａがその現在のスレッドの実行をサスペンドして、プロキシ実行ルーチン１４００の先頭であるEIP  begin_proxyで実行を開始するよう、譲歩命令として実装されうる。
【０１４２】
OS可視シーケンサーａがプロキシ実行ルーチン１４００（図１４との関連でのちに論じる）を実行したのち、ブロック１３０８で制御はSEL１３５０に戻る。ブロック１３０８では、SEL１３５０はOS可視シーケンサーのもとの状態（ブロック１３０４で保存された）を、状態保存領域１３１５から復元する。そのような状態の復元は、VMCALL命令のRSTOR変形によって実装されうる。これは先に表１に挙げたRSTORシナリオに類似するものである。同様に、ブロック１３０８では、SEL１３５０は、隔離シーケンサーのもとの状態（やはりブロック１３０４で保存された）を、状態保存領域１３１５のその対応する部分ｂから復元する。VMM１３５０は次いで、隔離シーケンサーｂ上のシュレッドと、OS可視シーケンサーａ上のスレッドの両方を再開する。次いで方法１３００はブロック１３１０で終わる。
【０１４３】
図１４は、プロキシ実行方法１４００を示すフローチャートである。少なくとも一つの実施例については、そのような方法１４００は、OS可視シーケンサーのような一つのシーケンサーによって、隔離シーケンサーのような別のシーケンサーのために実行されうる。図１４が示すところでは、方法１４００はブロック１４０２で始まってブロック１４０４に進む。
【０１４４】
ブロック１４０４では、OS可視シーケンサーは、隔離シーケンサー上でトリガーされたシステム・イベントを再現しようと試みる。少なくとも一つの実施例については、システム・イベントの再現は、SEL１３５０による、OS可視シーケンサーａのためのOSへのシステム・イベントの注入を介して達成されうる（上記のブロック１３０６の議論を参照）。少なくとも一つの実施例については、そのようなイベントは、VMMが例外を注入してからゲストOSを再開することを許容する「ベクター・オン・エントリー（vector  on  entry）」機能を使って注入されうる。このようにして、SEL１３５０はプロキシ・シーケンサーａ上のシステム・イベントのなりすましをすることができる。図１４が示すところでは、イベントのなりすましは、OS可視シーケンサー上でのリング3からリング0への遷移を引き起こしうる。
【０１４５】
次いで処理はブロック１４０６に進む。ブロック１４０６では、プロキシ・シーケンサーのためのOSは、システム・イベントをリング0特権レベルで処理する（上記の図８との関連の非特権リング0レベル「0D」を参照）。たとえば、イベントがページ・フォールトである場合、そのイベントは、必要なら、ディスクからのページングによって処理１４０６されうる。ゲストOSのイベント・ハンドラは、ページ・テーブルを修正するなどといった、追加的なタスクをも実行しうる。次いで方法１４００はブロック１４０８に進む。
【０１４６】
ブロック１４０８では、プロキシ・シーケンサーは、その命令ストリーム中で現在EIP値によって指示される次の命令を実行することを試みる。ここで、少なくとも一つの実施例については、プロキシ・シーケンサーについてのEIPは、プロキシに関係した状態マイグレーション（図１３、ブロック１３０６参照）のために修正されていることがあることを注意しておく。よって、ブロック１４０８では、プロキシ・シーケンサーは、最初にプロキシ実行をトリガーした（たとえば図１３におけるEIP  ｔにおける命令を参照）イベントを引き起こした命令を実行しようと試みることがありうる。少なくとも一つの実施例については、特権命令を実行する前記試みは、リング3からリング0への遷移を引き起こす。
【０１４７】
したがって、OS可視シーケンサーのためのゲストOSがブロック１４０６で例外にサービスしたのち、シーケンサーがブロック１４０８でイベントをトリガーする命令を実行しようと試みるときに、リング0からリング3への遷移が起こりうる。この遷移は、OSのイベント処理サービスの完了を示す。こうして、この遷移は、プロキシ実行サービスの終わりを合図する。こうしてプロキシ実行が完了すると、OS可視プロセッサ上でのなりすまされた処理が完了し、よって制御をもとのシーケンサーｂに移し戻すことが適切である。たとえば図７のブロック７３０で実行されていたかもしれない初期化のため、リング遷移に際して生成される例外はSEL１３５０へのトラップを引き起こす。
【０１４８】
ブロック１４０８での、イベントを生成した命令を実行しようとする試みによって生成されるリング遷移に際して、制御はSEL１３５０（図１３のブロック１３０８参照）に遷移して戻る。
【０１４９】
図１３との関連で上に論じた処理は、OS可視シーケンサーを利用してOS不可視シーケンサーのために動作を実行する例示的な背景で論じられているが、そのような例示的な背景は限定するものと解釈すべきではない。たとえば、ある代替的な実施形態については、図１３に示されるプロキシ機構の代替的な実施形態を利用して、あるOS隔離シーケンサーが別のOS隔離シーケンサーのために命令を実行するようにすることもできる。そのような実施形態は、たとえば、非対称的な複数のシーケンサーを含むマルチシーケンサー・システム上で利用されうる。
【０１５０】
このように、ここに開示される諸技法の諸実施形態を実行することのできるシステムの諸シーケンサーは、対称的である必要はないことに注意すべきである。諸シーケンサーは、計算の品質に影響する諸側面も含め、あらゆる仕方で異なりうる。たとえば、シーケンサーは電力消費、計算実行のスピード、機能上の特徴などに関して異なりうる。例として、ある実施形態については、シーケンサーは機能性の面で異なりうる。図７〜図１３に示した機能的な非対称性の例が示すところでは、少なくとも一つのシーケンサーがOS（たとえば図１の１４０参照）に可視でもよく、したがってシステム・コール、ページ・フォールトへの対応などを実行するような「リング0」動作を実行する機能をもちうる。他方、一つまたは複数の別のシーケンサーは、OSから隔離されていて、したがってリング0動作を実行することができないこともありうる。しかしながら、これは単に機能的な対称性についての一例である。マルチシーケンサー・システムの諸シーケンサーは、大きさ、語長および／またはデータ路サイズ、トポロジー、メモリ、電力消費、機能ユニット数、通信アーキテクチャ（マルチドロップかポイントツーポイント相互接続か）または機能性、パフォーマンス、フットプリントなどに関係する他の任意の基準といった、あらゆる仕方で異なりうる。
【０１５１】
たとえば、一つのシーケンサーは整数および浮動小数点命令を実行する機能をもつが、ストリーミングSIMD拡張３（「SSE3」）のような単一命令多重データ（single  instruction  multiple  data）（「SIMD」）命令セット拡張は実行できないことがありうる。その一方で、別のシーケンサーは第一のシーケンサーが実行できるすべての命令を実行できる上にSSE3命令をも実行できることがありうる。そのような実施形態については、図１３に示されるプロキシ機構の代替的な実施形態を利用して、SSE3命令を実行する機能のあるシーケンサーのような一つのOS隔離シーケンサーが、SSE3命令を実行する機能のないシーケンサーのような別のOS隔離シーケンサーのためのコードを実行するプロキシとしてはたらきうるようにできる。同様に、プロキシ実行機構のある実施形態は、たとえば、隔離されたプロセッサによってサポートされていない特別な浮動小数点命令の実行を実施するために呼び出されうる。このようにして、非対称性は、アプリケーション・プログラマにとって透明でありうる。
【０１５２】
ここで議論されたシュレッド化エミュレーション層および関連する技法は、単一コアSMTシステム（たとえば図３の３１０参照）およびマルチコアシステム（たとえば図３の３５０参照）を含め、いかなるマルチシーケンサー・システム上でも実装されうる。そのようなシステムのさらなる議論について、図１５との関連で以下に論じる。
【０１５３】
図１５は、開示されている諸技法を実行する機能のあるコンピューティング・システム１５００の少なくとも一つの見本実施形態を示している。コンピューティング・システム１５００は少なくとも一つのプロセッサ・コア１５０４およびメモリ・システム１５４０を含む。メモリ・システム１５４０はより大きな、比較的より遅いメモリ記憶１５０２とともに、命令キャッシュ１５４４および／もしくはデータキャッシュ１５４２のような一つもしくは複数のより小さな比較的高速のキャッシュを含みうる。メモリ記憶１５０２は、プロセッサ・コア１５０４の動作を制御するための命令１５１０およびデータ１５１２を保存しうる。
【０１５４】
メモリ・システム１５４０はメモリの一般化された表現として意図されており、ハード・ドライブ、CD-ROM、ランダムアクセスメモリ（RAM）、動的ランダムアクセスメモリ（DRAM）、静的ランダムアクセスメモリ（SRAM）、フラッシュメモリおよび関係した回路といった多様な形のメモリを含みうる。メモリ・システム１５４０は、プロセッサ１５０４によって実行されうるデータ信号によって表現される命令１５１０および／またはデータ１５１２を保存しうる。命令１５１０および／またはデータ１５１２は、ここに議論された技術のいずれかまたは全部を実行するためのコードおよび／またはデータを含みうる。たとえば、データ１５１２は、シュレッド化エミュレーション層を実装するための命令を含みうる。
【０１５５】
プロセッサ１５０４は、実行コア１５３０に命令情報を供給するフロントエンド１５２０を含みうる。フェッチされた命令情報は、実行コア１５３０による実行を待つべく、キャッシュ１５２５にバッファリングされうる。フロントエンド１５２０は、その命令情報をプログラム順に実行コア１５３０に供給しうる。少なくとも一つの実施例については、フロントエンド１５２０は、実行されるべき次の命令を決めるフェッチ／デコード・ユニット３２２を含む。システム１５００の少なくとも一つの実施例については、フェッチ／デコード・ユニット３２２は、単一の次命令ポインタおよびフェッチ論理３２０を含みうる。しかしながら、各プロセッサ１５０４が複数スレッド・コンテキストをサポートする実施形態では、フェッチ／デコード・ユニット３２２は、サポートされるスレッド・コンテキストそれぞれについて相異なる次命令ポインタおよびフェッチ論理３２０を実装する。マルチプロセッサ環境における追加的な次命令ポインタおよびフェッチ論理３２０が任意的であるという性質は、図１５で点線によって表されている。
【０１５６】
ここに記載される諸方法の実施形態は、ハードウェア、ハードウェア・エミュレーション・ソフトウェアもしくはその他のソフトウェア、ファームウェアまたはそのような実装手法の組み合わせにおいて実装されうる。本発明の実施形態は、少なくとも一つのプロセッサ、データ記憶システム（揮発性および不揮発性のメモリおよび／または記憶要素を含む）、少なくとも一つの入力装置ならびに少なくとも一つの出力装置を有するプログラム可能システムのために実装されうる。本出願の目的のためには、処理システムは、たとえばデジタル信号プロセッサ（DSP）、マイクロコントローラ、特定用途向け集積回路（ASIC）またはマイクロプロセッサといったプロセッサをもつ任意のシステムを含む。
【０１５７】
プログラムは、汎用または特殊目的プログラム可能処理システムによって読み取り可能な記憶媒体またはデバイス（たとえばハードディスク・ドライブ、フロッピー（登録商標）ディスク・ドライブ、読み出し専用メモリ（ROM）、CD-ROMデバイス、フラッシュメモリ・デバイス、デジタル多用途ディスク（DVD）またはその他の記憶デバイス）上に記憶されうる。処理システム中のプロセッサにとってアクセス可能な命令が、該処理システムによって前記記憶媒体またはデバイスが読まれたときに、ここに記載される手順を実行するために、該処理システムを構成設定し、動作させることを提供する。本発明の実施形態は、処理システムとともに使用するよう構成された機械可読記憶媒体として実装されると考えられてもよい。ここで、そのように構成された記憶媒体は、処理システムをして、ここに記載される機能を実行するために特定かつ所定の仕方で動作させる。
【０１５８】
見本システム１４００は、インテル社から入手可能なペンティアム（登録商標）、ペンティアム（登録商標）プロ、ペンティアム（登録商標）II、ペンティアム（登録商標）III、ペンティアム（登録商標）4およびアイテニアム（登録商標）およびアイテニアム（登録商標）2といったマイクロプロセッサに基づいた処理システムを表す。ただし、その他のシステム（他のマイクロプロセッサをもつパーソナル・コンピュータ（PC）、エンジニアリング・ワークステーション、携帯情報端末およびその他のハンドヘルド装置、セットトップボックスなどを含む）を使ってもよい。ある実施例については、見本システムはマイクロソフト社から入手可能なウィンドウズ（登録商標）オペレーティング・システムのあるバージョンを実行してもよい。ただし、他のオペレーティング・システムおよびグラフィカルユーザーインターフェースなどを使用してもよい。
【０１５９】
本発明の具体的な実施形態について図示し、記載してきたが、より広い諸側面における付属の請求項の範囲から外れることなく変更および修正をなすことができることは当業者には明らかであろう。付属の請求項は、本発明の真の範囲内にはいるそのようなすべての変更および修正を包含する。
【０１６０】
本願発明の可能な態様をいくつか記載しておく。
〔態様１〕
オペレーティング・システム（OS）から隔離されたシーケンサーに一つまたは複数のスレッド制御信号を発する段階を有する方法であって；
前記発する段階が、ユーザー生成された命令に反応して抽象化層によって実行される方法。
〔態様２〕
前記発する段階がさらに、OS可視スレッドにおける前記ユーザー生成された命令のOS可視シーケンサー上での実行に反応して前記抽象化層によって実行される、態様１記載の方法。
〔態様３〕
前記一つまたは複数のスレッド制御信号がさらに、前記隔離されたシーケンサーをして命令のシーケンスの実行を開始させる信号を含む、態様１記載の方法。
〔態様４〕
前記一つまたは複数のスレッド制御信号がさらに、前記隔離されたシーケンサーをして修正された命令ポインタアドレスにて命令のシーケンスの実行を開始させる信号を含む、態様３記載の方法。
〔態様５〕
前記ユーザー生成された命令が第一の命令シーケンスに含まれ、オペレーティング・システムによってスケジューリングされた該第一の命令シーケンスをある第一のシーケンサー上で実行し、
並行して、前記隔離されたシーケンサー上で第二の命令シーケンスを実行する、
ことをさらに含む、態様１記載の方法。
〔態様６〕
前記隔離されたシーケンサーのための実行環境を生成する段階をさらに有する態様１記載の方法であって；
前記生成する段階が前記抽象化層によって実行される、方法。
〔態様７〕
前記スレッド制御信号がさらに：
前記隔離されたシーケンサー上での実行に割り込むための信号を含む、
態様１記載の方法。
〔態様８〕
前記スレッド制御信号がさらに：
割り込み信号を含む、
態様７記載の方法。
〔態様９〕
OS可視シーケンサーをして、前記隔離されたシーケンサーに代わってのイベント処理ルーチンの実行をトリガーさせる一組の動作を実行する段階をさらに有する態様１記載の方法であって；
前記一組の動作が前記抽象化層によって実行される、方法。
〔態様１０〕
前記一組の動作がさらに：
前記隔離されたシーケンサーについての状態を前記OS可視シーケンサーに移すこと、
を含む、態様９記載の方法。
〔態様１１〕
前記隔離されたシーケンサー上での実行のサスペンドを引き起こす一組の動作を実行する段階をさらに有する、態様１記載の方法であって；
前記一組の動作が、OS可視シーケンサー上でのリング遷移に反応して前記抽象化層によって実行され；
前記一組の動作がさらに、前記一つまたは複数の制御信号を発することを含み、該制御信号が前記隔離されたシーケンサーを待機状態に入れる信号を含む、方法。
〔態様１２〕
前記一組の動作がさらに：
OSに透明な仕方で、前記OS可視シーケンサー上でリング遷移を追跡すること、
を含む、態様１１記載の方法。
〔態様１３〕
前記隔離されたシーケンサー上での実行の再開を引き起こす一組の動作を実行する段階をさらに有する、態様１記載の方法であって；
前記一組の動作が、OS可視シーケンサー上での例外処理ルーチンの完了に反応して前記抽象化層によって実行され；
前記一組の動作がさらに、前記一つまたは複数の制御信号を発することを含み、該制御信号が前記隔離されたシーケンサー上での実行を再開する信号を含む、方法。
〔態様１４〕
前記一組の動作がさらに：
前記OS可視シーケンサー上のブレークポイントをクリアすること、
を含む、態様１３記載の方法。
〔態様１５〕
複数の命令ストリームを並行して実行する複数のシーケンサーと；
前記複数のシーケンサーに結合されたメモリと；
前記複数のシーケンサーに結合され、前記複数のシーケンサーのうち一つまたは複数をオペレーティング・システムから隔離する抽象化層、
とを有するシステムであって、前記抽象化層がさらに、前記隔離されたシーケンサーのうち一つまたは複数の上の前記命令ストリームの一つまたは複数の実行を制御する、システム。
〔態様１６〕
前記複数のシーケンサーの少なくとも一つが、他のシーケンサーのうち一つまたは複数に対してコンピューティング面で非対称的である、
態様１５記載のシステム。
〔態様１７〕
前記メモリがDRAMである、
態様１５記載のシステム。
〔態様１８〕
前記抽象化層がさらに、前記一つまたは複数のシーケンサーを隔離するためのシーケンサー隔離モジュールを含む、
態様１５記載のシステム。
〔態様１９〕
前記抽象化層がさらに、前記隔離されたシーケンサーのためにオペレーティング・システム・サービスを呼び出すためのプロキシ実行モジュールを含む、
態様１５記載のシステム。
〔態様２０〕
前記抽象化層がさらに、前記複数のシーケンサーのうち少なくとも二つの間の信号伝達を提供するためのシーケンサー算術モジュールを含む、
態様１５記載のシステム。
〔態様２１〕
前記抽象化層がさらに、前記隔離されたシーケンサーのうち少なくとも一つをして、オペレーティング・システムのリング0動作の間、動作をサスペンドさせるための遷移検出モジュールを含む、
態様１５記載のシステム。
〔態様２２〕
前記抽象化層がさらに、前記隔離されたシーケンサーのうち少なくとも一つをして、オペレーティング・システムのリング0動作のあと、動作を再開させるための遷移検出モジュールを含む、
態様２１記載のシステム。
〔態様２３〕
前記抽象化層のための命令が前記メモリに含まれる、
態様１５記載のシステム。
〔態様２４〕
前記メモリが、前記抽象化層のゲストとしてオペレーティング・システムを走らせるための命令を含む、
態様１５記載のシステム。
〔態様２５〕
抽象化層のための複数の機械アクセス可能命令を有する機械アクセス可能媒体を有する物品であって、前記命令がプロセッサによって実行されたときに、前記命令は：
オペレーティング・システム（OS）から隔離されたシーケンサーに一つまたは複数のスレッド制御信号を発する動作を提供し；
前記発する動作のための前記命令が、ユーザー生成された命令に反応して前記抽象化層によって実行される、物品。
〔態様２６〕
前記発する動作のための前記命令がさらに、OS可視スレッドにおける前記ユーザー生成された命令のOS可視シーケンサー上での実行に反応して前記抽象化層によって実行される、態様２５記載の物品。
〔態様２７〕
前記一つまたは複数のスレッド制御信号がさらに、前記隔離されたシーケンサーをして命令のシーケンスの実行を開始させる信号を含む、態様２５記載の物品。
〔態様２８〕
前記一つまたは複数のスレッド制御信号がさらに、前記隔離されたシーケンサーをして修正された命令ポインタアドレスにて命令のシーケンスの実行を開始させる信号を含む、態様２７記載の物品。
〔態様２９〕
前記プロセッサがさらに：
前記ユーザー生成された命令を含み、オペレーティング・システムによってスケジューリングされた該第一の命令シーケンスを、ある第一のシーケンサー上で実行し、
並行して、前記隔離されたシーケンサー上で第二の命令シーケンスを実行する、
態様２５記載の物品。
〔態様３０〕
前記抽象化層命令がさらに、前記プロセッサによって実行されたときに：
前記隔離されたシーケンサーのための実行環境を生成する動作を提供する命令を含む、
態様２５記載の物品。
〔態様３１〕
前記スレッド制御信号がさらに：
前記隔離されたシーケンサー上での実行に割り込むための信号を含む、
態様２５記載の物品。
〔態様３２〕
前記スレッド制御信号がさらに：
割り込み信号を含む、
態様３１記載の物品。
〔態様３３〕
前記抽象化層命令がさらに、前記プロセッサによって実行されたときに：
OS可視シーケンサーをして、前記隔離されたシーケンサーに代わってのイベント処理ルーチンの実行をトリガーさせる一組の動作を実行する動作を提供する、
態様２５記載の物品。
〔態様３４〕
前記一組の動作がさらに：
前記隔離されたシーケンサーについての状態を前記OS可視シーケンサーに移すこと、
を含む、態様３３記載の物品。
〔態様３５〕
前記抽象化層命令がさらに、前記プロセッサによって実行されたときに：
前記隔離されたシーケンサー上での実行のサスペンドを引き起こす一組の動作を実行する動作を提供する、態様２５記載の物品であって；
前記一組の動作が、OS可視シーケンサー上でのリング遷移に反応して前記抽象化層によって実行され；
前記一組の動作がさらに、前記一つまたは複数の制御信号を発することを含み、該制御信号が前記隔離されたシーケンサーを待機状態に入れる信号を含む、物品。
〔態様３６〕
前記一組の動作がさらに：
前記OS可視シーケンサー上にブレークポイントを設定すること、
を含む、態様３５記載の物品。
〔態様３７〕
前記抽象化層命令がさらに、前記プロセッサによって実行されたときに：
前記隔離されたシーケンサー上での実行の再開を引き起こす一組の動作を実行する動作を提供する、態様２５記載の物品であって；
前記一組の動作が、OS可視シーケンサー上での例外処理ルーチンの完了に反応して前記抽象化層によって実行され；
前記一組の動作がさらに、前記一つまたは複数の制御信号を発することを含み、該制御信号が前記隔離されたシーケンサー上での実行を再開する信号を含む、物品。
〔態様３８〕
前記一組の動作がさらに：
前記OS可視シーケンサー上のブレークポイントをクリアすること、
を含む、態様３７記載の物品。
〔態様３９〕
態様１２記載の方法であって、前記追跡することがさらに：
前記OS可視シーケンサーのためのブレークポイントを設定することを含む、方法。
【図１】
2011103132.tif 000005
【図２】
2011103132.tif 000006
【図３】
2011103132.tif 000007
【図４】
2011103132.tif 000008
【図５】
2011103132.tif 000009
【図６】
2011103132.tif 000010
【図７】
2011103132.tif 000011
【図８】
2011103132.tif 000012
【図９】
2011103132.tif 000013
【図１０】
2011103132.tif 000014
【図１１】
2011103132.tif 000015
【図１２】
2011103132.tif 000016
【図１３】
2011103132.tif 000017
【図１４】
2011103132.tif 000018
【図１５】
2011103132.tif 000019