オペレーティングシステムを有するコンピューティングシステムでの同時並行しているスレッドのユーザーレベルのスケジューリングのための方法であって:ユーザー生成されたスレッド命令を実行する段階であって、スレッド制御命令を生成するライブラリ関数を呼び出すことをさらに含む段階と;前記ユーザー生成されたスレッド命令に応じて、スレッドを記述する作業記述子を生成する段階と;前記作業記述子を待ち行列システム内に記憶させる段階と;前記スレッドの、オペレーティングシステムに不可視なシーケンサー上での実行をスケジューリングする段階と、ユーザーレベルの同時並行マルチスレッド利用を実行するよう前記オペレーティングシステムに不可視なシーケンサーを初期化する段階であって、ユーザーレベルの分散されたスケジューラの、前記オペレーティングシステムに不可視なシーケンサー上での実行をトリガーする段階を含む段階、とを有する方法。前記待ち行列システムが、第一のシーケンサー型に関連付けられた第一の待ち行列と、第二のシーケンサー型に関連付けられた第二の待ち行列とを含む、請求項1記載の方法。前記第一および第二のシーケンサー型が、コンピューティング上の少なくとも一つの基準に関して非対称的である、請求項2記載の方法。前記コンピューティング上の基準が機能上の基準である、請求項3記載の方法。前記コンピューティング上の基準が電力消費基準である、請求項3記載の方法。前記機能上の基準が、リング0動作を実行する能力である、請求項4記載の方法。前記記憶させる段階が、前記作業記述子を、ユーザーが提供したヒントに基づいて前記第一の待ち行列に記憶させることをさらに含む;請求項2記載の方法。前記ユーザー生成されたスレッド命令が、シュレッド生成命令である、請求項1記載の方法。前記ユーザー生成されたスレッド命令が、シュレッド同期命令である、請求項1記載の方法。前記ユーザー生成されたスレッド命令が、業界標準準拠のアプリケーションプログラマインターフェースの一部である、請求項1記載の方法。オペレーティングシステムを有する装置であって、分散されたオペレーティングシステム独立なスケジューラルーチンの第一の部分を含む第一のスレッド実行ユニットと;分散されたオペレーティングシステム独立なスケジューラルーチンの第二の部分を含む第二のスレッド実行ユニットとを有する装置であって;前記第一および第二のスレッド実行ユニットが同時並行のマルチスレッドを利用した実行を提供するよう構成されており;前記第一および第二の部分がさらに、スレッドを記述する作業記述子を求めて競るために作業待ち行列に問い合わせするよう構成されており;前記分散されたオペレーティングシステムに不可視なスケジューラルーチンの前記第二の部分が、前記競りに基づいて、オペレーティングシステムには不可視に、前記スレッドを、前記スレッド実行ユニットのうちの選択されたものでの実行のためにスケジューリングする、装置。前記スレッド実行ユニットの少なくとも一つはオペレーティングシステムに可視であり、前記スレッド実行ユニットの少なくとも別の一つはオペレーティングシステムに可視ではない、請求項11記載の装置。当該装置が単一コアのプロセッサであり;前記第一および第二の実行ユニットが論理的なプロセッサである、請求項11記載の装置。当該装置がマルチコアのプロセッサであり;前記第一および第二の実行ユニットがプロセッサコアである、請求項11記載の装置。前記実行ユニットが機能的に対称的である、請求項11記載の装置。前記待ち行列システムが、前記実行ユニットの全部に適用可能な作業記述子を保持するための単一の待ち行列を含む、請求項15記載の装置。前記実行ユニットの少なくとも一つが、他の実行ユニットの一つまたは複数とコンピューティング面で非対称的である、請求項11記載の装置。前記待ち行列システムが、前記少なくとも一つの非対称的である実行ユニットのための作業記述子を保持するための第一の待ち行列を含み、前記一つまたは複数の他の実行ユニットのための記述子を保持するための第二の待ち行列をも含む、請求項17記載の装置。オペレーティングシステムを有するコンピューティングシステムのマルチシーケンサーマルチスレッドシステムであって:メモリシステムと;第一のシーケンサー型の第一のシーケンサーであって、ここで、前記第一のシーケンサー型はオペレーティングシステムに可視である、第一のシーケンサーと;第二のシーケンサー型の第二のシーケンサーであって、ここで、前記第二のシーケンサー型はオペレーティングシステムに不可視である、第二のシーケンサーと;前記メモリシステムに保存されているソフトウェアライブラリであって、実行されたときに作業待ち行列を生成するための一つまたは複数の命令を含むライブラリ、とを有しており:前記ライブラリがさらに、前記作業待ち行列からの作業をシーケンサー上での実行のために、ユーザー指令によりスケジューリングすることを実行する分散されたスケジューラを含み、前記分散されたスケジューラが、前記第一および第二のシーケンサーのためのスケジューリングループを実行する、システム。前記作業待ち行列が、ペンディングのソフトウェアスレッドを記述する一つまたは複数のレコードを保持する、請求項19記載のシステム。前記一つまたは複数のレコードが、それぞれ対応するペンディングのソフトウェアスレッドの開始アドレスを含む、請求項20記載のシステム。前記一つまたは複数のレコードが、それぞれ対応するペンディングのソフトウェアスレッドについてのスタックポインタを含む、請求項20記載のシステム。前記分散されたスケジューラがさらに、前記作業待ち行列からの作業をシーケンサー上での実行のために、ユーザー指令によりスケジューリングすることを、前記シーケンサーが同時並行してその関連付けられた作業を実行するように実行する、請求項20記載のシステム。前記ライブラリがさらに、それぞれ関連付けられたユーザー生成された命令に応じてシュレッド命令を生成する一つまたは複数の関数を含んでおり、前記ユーザー生成された命令は一般的に知られたアプリケーションプログラマインターフェース規格に準拠するものである、請求項20記載の方法。マルチスレッドプロセッサによって実行される、複数のシーケンサーの間でソフトウェアシュレッドの実行をスケジューリングする方法であって:ユーザー生成されたスレッド命令に応じて、スレッドを記述するスレッド記述子を生成手段によって生成する段階と;前記スレッド記述子を待ち行列に入れる段階と;それぞれが相異なるシーケンサーに関連付けられた複数のユーザーレベルの分散されたスケジューラルーチンを実行手段によって実行する段階であって、前記複数のシーケンサーがオペレーティングシステムに基づくスレッドスケジューラに従属せず、前記スケジューラルーチンのそれぞれが前記待ち行列内の前記記述子を求めて競るものである、段階と;前記スレッドを、前記シーケンサーの一つの上での実行のためにスケジューリング手段によってスケジューリングする段階、とを有する方法。前記ユーザー生成されたスレッド命令が、アプリケーションプログラマインターフェースに含まれている命令である、請求項25記載の方法。前記アプリケーションプログラマインターフェースが業界標準に準拠している、請求項26記載の方法。複数の機械アクセス可能命令を記憶した機械アクセス可能媒体であって、前記命令はプロセッサによって実行され、前記命令は:ユーザー生成されたスレッド命令を実行する動作であって、スレッド制御命令を生成するライブラリ関数を呼び出すことをさらに含む動作と;前記スレッド命令に応じて、スレッドを記述する作業記述子を生成する動作と;前記作業記述子を待ち行列システム内に記憶させる動作と;オペレーティングシステムの介入なしに、前記スレッドのシーケンサー上での実行をスケジューリングする動作と、ユーザーレベルの同時並行マルチスレッド利用を実行するよう前記シーケンサーを初期化する動作であって、ユーザーレベルの分散されたスケジューラの、前記シーケンサー上での実行をトリガーすることをさらに含む動作、とを提供する、機械アクセス可能媒体。前記待ち行列システムが、第一のシーケンサー型に関連付けられた第一の待ち行列と、第二のシーケンサー型に関連付けられた第二の待ち行列とを含む、請求項28記載の機械アクセス可能媒体。前記第一および第二のシーケンサーが、コンピューティング上の少なくとも一つの基準に関して非対称的である、請求項29記載の機械アクセス可能媒体。前記コンピューティング上の基準が機能上の基準である、請求項30記載の機械アクセス可能媒体。前記コンピューティング上の基準が電力消費基準である、請求項30記載の機械アクセス可能媒体。前記機能上の基準が、リング0動作を実行する能力である、請求項31記載の機械アクセス可能媒体。前記記憶させる動作を提供する命令が、プロセッサによって実行されたときに、前記作業記述子を、ユーザーが提供したヒントに基づいて前記第一の待ち行列に記憶させる命令をさらに有する;請求項29記載の機械アクセス可能媒体。前記スレッド命令が、シュレッド生成命令である、請求項28記載の機械アクセス可能媒体。前記スレッド命令が、シュレッド同期命令である、請求項28記載の機械アクセス可能媒体。前記スレッド命令が、業界標準準拠のアプリケーションプログラマインターフェースの一部である、請求項28記載の機械アクセス可能媒体。SMTおよび/またはCMPシステムのような複数ソフトウェアスレッドの同時並行的な実行をサポートするシステムのために、ソフトウェアスレッドのスケジューリングおよび実行をオペレーティングシステムアプリケーションが制御しうる。しかし、典型的には、オペレーティングシステム制御はスケーリングがよくなく、オペレーティングシステムアプリケーションがパフォーマンスに悪影響を与えることなくスレッドをスケジューリングする能力は、普通には、比較的少数のスレッドに限定される。本発明の諸実施形態は図面を参照しつつ理解されうる。図面では、同様の要素は同様の数字で示される。図面は限定することを意図されてはおらず、OS隔離スレッドを実行のためにスケジューリングする装置、システムおよび方法の選ばれた実施形態を解説するために与えられるものである。以下の議論は、一つまたは複数のOS隔離シーケンサー上のシュレッドshredと称される実行のスレッドをスケジューリングする、および/または他の仕方で制御する方法、システムおよび機構の選ばれた実施形態を記載する。OS隔離シーケンサーOSsequesteredsequencersは本稿ではOS不可視OSinvisibleと称されることがある。ここに記載される機構は単一コアまたはマルチコアのマルチスレッドシステムで利用されうる。以下の記述では、本発明のより完全なる理解を提供するために、プロセッサの種類、マルチスレッド環境、システム構成、マルチシーケンサーシステムにおけるシーケンサーの数およびトポロジー、マイクロアーキテクチャ構造および命令命名体系ならびにパラメータといった数多くの個別的な詳細が述べられる。しかしながら、そうした個別的な詳細なしでも本発明が実施されうることは当業者によって理解されるであろう。さらに、いくつかのよく知られた構造、回路などは、本発明を無用に埋没させるのを避けるために詳しく示していない。共有メモリマルチプロセッシングのパラダイムが、並列プログラミングと称されるアプローチにおいて使用されうる。このアプローチによれば、アプリケーションのプログラマは、ソフトウェアプログラムについて並列を表現するために、ソフトウェアプログラムアプリケーションまたはプロセスと称されることもあるを同時並行して実行される複数のタスクに分割しうる。同じソフトウェアプログラムプロセスのすべてのスレッドは、メモリについて共通の論理的なビューを共有する。図1は、マルチシーケンサーマルチスレッドシステム上での並列プログラミングのアプローチの図的な表現を示すブロック図である。図1は、オペレーティングシステム140に見えるプロセス100、120を示している。これらのプロセス100、120は、ワードプロセッシングプログラムおよび電子メール管理プログラムといった、異なるソフトウェアアプリケーションプログラムであってもよい。普通、各プロセスは異なるアドレス空間内で動作する。オペレーティングシステムOS140は普通、図1に示されるプロセス120のようなプロセスについてユーザー生成のタスクを管理することを担う。したがって、オペレーティングシステム140は、プロセス120に関連付けられたユーザー定義のタスクのそれぞれについて相異なるスレッド125、126を生成することができ、スレッド125、126をスレッド実行資源にマッピングすることができる。これらの実行資源は図1には示されていないが、のちに詳細に議論する。OS140は普通、これらのスレッド125、126を実行資源上での実行のためにスケジューリングすることを担う。単一のプロセスに関連付けられた諸スレッドは、典型的には、メモリについて同じビューをもち、互いの仮想アドレス空間に対する可視性をもつ。スレッドを生成し、マッピングし、スケジューリングすることはOS140が担うので、スレッド125、126はOS140に見える。さらに、本発明の諸実施形態は、OS140には見えない追加的なスレッド130~136を包含する。すなわち、これらの追加的なスレッド130~136については、OS140は生成、管理もしくは他の仕方での認識または制御をしない。OS140によって生成も制御もされないこうした追加的なスレッドは、OSに見えるスレッドと区別するため、本稿では時にシュレッド130~136と称される。シュレッドはユーザーレベルのプログラムによって生成および管理され、オペレーティングシステムからは隔離されているシーケンサー上で走るようスケジューリングされる。OS隔離シーケンサーは、OS可視シーケンサーと同じリング0状態を共有する。このように、シュレッドshredは、同じプロセスに関連付けられた諸スレッドthreadのために生成される同じ実行環境アドレスマップを共有するshare。ここでの用法では、スレッドおよびシュレッドの用語は、少なくとも、あるプロセスの他のスレッドおよび/またはシュレッドと同時並行して実行されるべき命令の集合の概念を含む。したがって、スレッドおよびシュレッドの用語はいずれも、ソフトウェア命令の集合の概念を包含する。ここでの用法では、どちらも命令のストリームであるスレッドこれはOSに制御されるとシュレッドこれはオペレーティングシステムには見えず、その代わりユーザーによって制御されるとを区別する因子は、スレッドおよびシュレッドの命令ストリームの実行がどのように管理されるかの相違にある。スレッドはOSへのシステムコールに反応して生成される。OSがそのスレッドを生成し、そのスレッドを走らせるために資源を割り当てる。スレッドに割り当てられたそのような資源は、オペレーティングシステムがスレッドを制御およびスケジューリングするために使うデータ構造を含みうる。これに対し、シュレッドの少なくとも一つの実施例は、ユーザー命令またはプリミティブを介して生成される。それがOSが認識しないシュレッドを生成するためのソフトウェアライブラリまたはその他のOS独立な機構を呼び出すのである。このように、シュレッドはユーザーレベルのソフトウェアライブラリコールに反応して生成されうる。図2は、同じソフトウェアプログラムまたはプロセスのすべてのスレッドがメモリについて共通の論理的なビューを共有するという、上記の陳述に関するさらなる詳細を図的な形で示すブロック図である。本発明の諸実施形態については、この陳述は、プロセス100、120に関連付けられたシュレッドに関しても真である。ここでは図2について、図1を参照しつつ議論する。図2は、図1に示されるプロセス120、スレッド125、126およびシュレッド130~136の図的な表現である。しかしながら、そのような表現は限定するものと解釈すべきではない。本発明の諸実施形態は必ずしもあるプロセスに関連付けられるスレッドまたはシュレッドの数に上限または下限を課すことはしない。下限に関しては、図1は、所与の時点において走っているあらゆるプロセスが必ずしも何らかのスレッドまたはシュレッドと関連付けられている必要はないことを示している。たとえば、図1に示したプロセス0100は、図1に示されている特定の時点ではスレッドもシュレッドもなしに走っていることが示されている。しかしながら、別のプロセス120が、図1に示されるように、一つまたは複数のスレッド125、126に関連付けられていることがある。さらに、プロセス120は追加的に、一つまたは複数のシュレッド130~136とも関連付けられていることがある。プロセス120についての二つのスレッド125、126および4つのシュレッド130~136の表現はあくまでも例示的なものであって、限定するものと解釈すべきではない。あるプロセスに関連付けられたOS可視スレッドの数はOSプログラムによって限定されうる。しかしながら、プロセスに関連付けられたシュレッドの累積数についての上限は、少なくとも一つの実施例については、実行中のある特定の時点において利用可能なスレッド実行資源の数によってのみ限定される。図2は、プロセス120に関連付けられている第二のスレッド126が第一のスレッド125とは異なる数nの関連付けられたスレッドをもちうることを示している。Nはスレッド125、126の一方または両方について0であってもよい。図2は、ある特定のプロセス120に関連付けられたすべてのスレッド125、126によって共有されるメモリのある特定の論理的なビュー200を示している。図2は、各スレッド125、126がそれぞれ独自のアプリケーションおよびシステム状態202a、202bを有していることを示している。図2は、スレッド125、126についての該アプリケーションおよびシステム状態202が、その特定のスレッドに関連付けられたすべてのシュレッドたとえばシュレッド130~136によって共有されることを示している。したがって、図2は、本発明の少なくとも一つの実施形態についてのシステムが、スレッド125のようなOS可視スレッドと、該スレッドに関連付けられたシュレッド130~136これはOSには不可視との間の一対多の関係をサポートしうることを示している。シュレッドを生成し、同期させ、その動作をその他の仕方で管理および制御するためにOSでなくプログラマがユーザーレベルの技法を用いうるという意味において、シュレッドはOS図1の140参照に可視ではない。OS140はスレッドを認識し、管理するものの、OS140はシュレッドは認識せず、管理も制御もしない。こうして、スレッドユニットハードウェアとシュレッドとの間のマッピングを管理するためにオペレーティングシステムに頼る代わりに、少なくとも一つの実施例については、ユーザーがそのようなマッピングを直接的に制御でき、シュレッド実行に関連付けられた制御および状態転移を直接的に操作できる。したがって、ここに記載される方法、機構およびシステムの諸実施形態について、スレッドユニットのアーキテクチャのユーザーに見える特徴は、少なくとも、ユーザーにスレッドユニットハードウェアの直接操作および制御を許容する正準的な命令セットである。ここでの用法では、スレッドユニットここでは交換可能的にシーケンサーとも称されるとは、スレッドまたはシュレッドを実行する機能のある任意の物理的または論理的なユニットでありうる。これは、所与のスレッドまたはシュレッドのために実行されるべき次の命令を決定するための次命令ポインタ論理を含みうる。たとえば、図2に示されるOSスレッド125は、図示されないシーケンサー上で実行されうる一方、アクティブなシュレッド130~136のそれぞれは、それぞれ他のシーケンサーseq1~seq4上で実行されうる。シーケンサーは論理的なスレッドユニットであっても物理的なスレッドユニットであってもよい。論理的なスレッドユニットと物理的なスレッドユニットとの間の区別を図3に示す。図3は、開示されている技法を実行する機能のあるマルチシーケンサーシステムの実施例310、350の選ばれたハードウェア特徴を示すブロック図である。図3が示すのは、SMTマルチシーケンサーマルチスレッド環境310の選ばれたハードウェア特徴を示している。図3はまた、複数コアのマルチスレッド環境350の選ばれたハードウェア特徴をも示しており、この場合、各シーケンサーは別個の物理的なプロセッサコアである。SMT環境310では、単一の物理プロセッサ304は、オペレーティングシステムおよびユーザープログラムにとっては、複数の論理プロセッサ図示せずとして見えるようにされる。該複数の論理プロセッサはここではLP1ないしLPnと称される。各論理プロセッサLP1ないしLPnは、それぞれ完全なセットのアーキテクチャ状態AS1~ASnを含む。アーキテクチャ状態は、少なくとも一つの実施例については、データレジスタ、セグメントレジスタ、制御レジスタ、デバッグレジスタおよび大半のモデル固有のレジスタを含む。論理プロセッサLP1~LPnは、キャッシュ、実行ユニット、分岐予測器、制御論理およびバスといった物理プロセッサ304の大半の他の資源を共有する。そのような特徴は共有されうるものの、マルチスレッド環境310における各スレッドコンテキストは、次命令アドレスを独立して生成できるそしてたとえば命令キャッシュ、実行命令キャッシュまたはトレースキャッシュからのフェッチを実行できる。こうして、プロセッサ304は、各スレッドコンテキストについての命令をフェッチするため、論理的に独立な次命令ポインタおよびフェッチ論理320を含む。ただし、その複数の論理シーケンサーは単一の物理的なフェッチ/デコードユニット322において実装してもよいのであるが。SMTまたは実施例については、シーケンサーの用語は少なくとも、あるスレッドコンテキストについての次命令ポインタおよびフェッチ論理320を、そのスレッドコンテキストについての関連付けられたアーキテクチャ状態ASの少なくとも一部とともに包含する。SMTシステム310のシーケンサーが対称的である必要はないことも注意しておくべきである。たとえば、同じ物理コアのための二つのSMTシーケンサーは、そのそれぞれが維持するアーキテクチャ状態情報の量において違っていてもよい。こうして、少なくとも一つの実施例については、マルチシーケンサーシステム310は、同時並行マルチスレッドをサポートする単一コアのプロセッサ304である。そのような実施形態については、各シーケンサーは、独自の命令次命令ポインタおよびフェッチ論理と独自のアーキテクチャ状態情報とをもつ論理プロセッサであるが、同じ物理プロセッサコア304がすべてのスレッド命令を実行する。そのような実施形態については、論理プロセッサは、アーキテクチャ状態については独自のバージョンを維持するが、単一のプロセッサコアの実行資源は同時実行されるスレッドの間で共有されうる。図3は、マルチコアマルチスレッド環境350の少なくとも一つの実施形態をも示している。そのような環境350は、それぞれが異なるスレッド/シュレッドを実行する機能をもつ二つ以上の別個の物理的プロセッサ304a~304nを含んでおり、該複数の異なるスレッド/シュレッドの少なくとも一部分の実行は同時に進行しうるようになっている。各プロセッサ304aないし304nは、それぞれのスレッドまたはシュレッドのための命令情報をフェッチするため、物理的に独立なフェッチユニット322を含んでいる。各プロセッサ304a~304nが単一のスレッド/シュレッドを実行する実施形態では、フェッチ/デコードユニット322は単一の次命令ポインタおよびフェッチ論理320を実装する。しかしながら、各プロセッサ304a~304nが複数スレッドコンテキストをサポートする実施形態では、フェッチ/デコードユニット322は、サポートされるスレッドコンテキストそれぞれについて相異なる次命令ポインタおよびフェッチ論理320を実装する。マルチプロセッサ環境350における追加的な次命令ポインタおよびフェッチ論理320が任意的であるという性質は、図3で点線によって表されている。こうして、図3に示されるマルチコアシステム350の少なくとも一つの実施例については、シーケンサーのそれぞれは、単一のチップパッケージ360に複数のコア304a~304nが存在しているプロセッサコア304でありうる。各コア304a~304nは、単一スレッドまたはマルチスレッドのプロセッサコアのいずれでもありうる。図3ではチップパッケージ360は破線で表されているが、これはマルチコアシステム350の図示されている単一チップ実施形態が単に例示的であることを示している。他の実施形態については、マルチコアシステムのプロセッサコアは別個のチップ上に存在してもよい。議論を簡単にするため、以下の議論はマルチコアシステム350の諸実施形態に焦点を当てる。しかしながら、この焦点は限定するものと解釈するべきではない。以下に記載される機構は、マルチコアまたは単一コアのマルチシーケンサー環境のいずれにおいて実行されてもよいのである。図4は、ユーザーレベルのスレッド制御をサポートするマルチシーケンサーマルチスレッドシステムのためのスケジューリング機構400の少なくとも一つの実施形態を示すデータフロー図である。図4は、機構400が作業待ち行列システム402を含むことを示している。該機構はまた、スケジューラルーチン450をも含むが、これは複数シーケンサー403、404のそれぞれの上で実行されうる。作業待ち行列システム402は、少なくとも一つの実施例については、実行の順番待ちをしていてしたがってペンディングであるユーザー定義のシュレッドのための記述子を維持しうる。上で述べたように、OSが提供するスケジューリング機構ではないスケジューリング機構400が用いられうる。各作業記述子は、OS介入とは独立して、OS隔離されたまたはOS可視のシーケンサーのいずれかの上で実行されるべきシュレッドを記述する。シュレッド記述子は、ユーザーレベルのシュレッド生成命令すなわちプリミティブによって生成されうる。当業者は、プログラマのコードと、シーケンサーにシュレッド記述子の生成および該記述子の作業待ち行列402への配置につながる動作を実行させる実際のアーキテクチャ命令との間に、抽象化のいくつかのレベルがありうることを認識する。ここでの用法では、プログラマまたはユーザーによって生成されると述べられる命令は、ユーザー生成されたコードに基づいてアセンブラまたはコンパイラによって、またはアセンブリ言語で作業しているプログラマによって生成されうるアーキテクチャ命令のみならず、最終的にアセンブルまたはコンパイルされてアーキテクチャ上のシュレッド制御命令になる任意の高級プリミティブまたは命令をも包含することが意図されている。アーキテクチャ上のシュレッド制御命令がさらにスレッド実行ユニットによって一つまたはマイクロ演算にデコードされうることも理解されるべきである。図4は、シーケンサーのそれぞれについてのスケジューラルーチン450a、450bが、関連付けられたシーケンサー403、404上での実行のためにシュレッドを取得するために、作業待ち行列システム402にアクセスしうることを示している。このように、図4は、シュレッドのユーザーレベルでのマッピングおよび制御を許容するスケジューリング機構の少なくとも一つの実施形態を示している。該シュレッドは、シュレッドのスケジューリングのためのOS介入なしに、互いに、および/またはOSに制御されるスレッドと同時並行して実行されうる。図4に示されているシーケンサー403、404が対称的である必要はなく、その数も限定するものと解釈されるべきではないことを注意しておくべきである。シーケンサーの数に関しては、スケジューリング機構400はシーケンサーいくつについて利用されてもよい。たとえば、スケジューリング機構は、4個、8個、16個、32個またはそれ以上のシーケンサーを含むマルチシーケンサーシステムについて実装されうる。対称性に関し、シーケンサー403、404は、計算の品質に影響する諸側面も含め、あらゆる仕方で異なりうる。たとえば、シーケンサーは電力消費、計算実行のスピード、機能上の特徴などに関して異なりうる。例として、ある実施形態については、シーケンサー403、404は機能性の面で異なりうる。たとえば、一つのシーケンサーは整数および浮動小数点命令を実行する機能をもつが、ストリーミングSIMD拡張3SSE3のような単一命令多重データsingleinstructionmultipledataSIMD命令セット拡張は実行できないことがありうる。その一方で、別のシーケンサーは第一のシーケンサーが実行できるすべての命令を実行できる上にSSE3命令を実行できることがありうる。機能上の非対称のもう一つの例として、本発明のある実施形態については、あるシーケンサーはOSたとえば図1の140参照に可視でもよく、したがってシステムコール、ページフォールトへの対応などを実行するようなリング0動作を実行する機能をもちうる。他方、別のシーケンサーは、OSから隔離されていて、リング0動作を実行することができないこともありうる。スケジューリング機構400が利用されるシステムのシーケンサーも、大きさ、語長および/またはデータ路サイズ、トポロジー、メモリ、電力消費、機能ユニット数、通信アーキテクチャマルチドロップかポイントツーポイント相互接続かまたは機能性、パフォーマンス、フットプリントなどに関係する他の任意の基準といった、あらゆる仕方で異なりうる。図5は、非対称なマルチシーケンサーマルチスレッドシステムのためのスケジューリング機構500の少なくとも一つの実施形態を示すデータフロー図である。図5は単に非対称の一つの実施形態を示すものであり、第一のシーケンサー503はオペレーティングシステム540に可視である一方、第二のシーケンサー504はオペレーティングシステム540から隔離されている。ここでもまた、当業者は、他の型の非対称がシステムに存在していてもよく、三つ以上のシーケンサーがシステムに存在していてもよいことを認識するであろう。図5は、OS可視シーケンサー503および隔離シーケンサー504のそれぞれについてのスケジューラルーチン450a、450bが、該スケジューラのインスタンス450a、450bに対応するシーケンサー503、504上で実行されるべきシュレッドを求めて作業待ち行列システム502を探査することを示している。ここでもまた、そのような機構500は、オペレーティングシステム540の介入なしに、非対称なシーケンサー上でのシュレッドのスケジューリングを提供する。図6は、非対称なマルチシーケンサーマルチスレッドシステムのための、スケジューリング機構600の少なくとも一つの実施形態についてのさらなる詳細を示すデータフロー図である。図6は、作業待ち行列602が複数の作業待ち行列604、606を含みうることを示している。少なくとも一つの実施形態について、複数の作業待ち行列604、606のそれぞれは、あるシーケンサー型に関連付けられる。図6に示された見本実施形態については、第一の待ち行列604は、ここではA型と称される第一の型のシーケンサー640の一つまたは複数の集合に関連付けられている。第二の待ち行列606は、ここではB型と称される第二の型のシーケンサー642の一つまたは複数の集合に関連付けられている。これまでの図に示した他の実施形態の場合と同様、図6に示されるような待ち行列およびシーケンサー型の数ならびに各型のシーケンサーの数は限定するものと解釈すべきではない。したがって、図6は、少なくとも二つの型の非対称なシーケンサー――A型シーケンサー640およびB型シーケンサー642――を含むシステムについてのスケジューリング機構600を示している。待ち行列システム602は、シーケンサーの各型に関連付けられた作業待ち行列604、606を含む。各シーケンサー640、642は、分散されたスケジューラルーチン450の一部分を含む。部分450a、450bは互いに同一のコピーであってもよいが、それは必須ではない。図6は、第一の待ち行列604がA型シーケンサー640の上で走るシュレッド623についてのシュレッド記述子を含みうることを示している。第二の待ち行列606がB型シーケンサー642の上で走るシュレッド624についてのシュレッド記述子を含みうる。A型のシュレッド623は、A型シーケンサー640によって提供される特定の機能性を利用するためにユーザーによって書かれたソフトウェアシーケンスでありうる。同様に、B型のシュレッド624は、B型シーケンサー642によって提供される特定の機能性を利用するためにユーザーによって書かれたソフトウェアシーケンスでありうる。少なくとも一つの実施例については、A型およびB型シーケンサーの機能性は互いに排反でありうる。すなわち、たとえば、ある集合の諸シーケンサー640は、もう一方の集合の諸シーケンサー642がサポートしない、SSE3命令の実行のようなある特定の機能性をサポートできる。その一方、別のある集合の諸シーケンサー642は、もう一方の集合の諸シーケンサー640がサポートしない、リング0動作のようなある特定の機能性をサポートできる。そのような実施形態について、スケジューリング機構600の動作は、第一の型のシュレッド623についての記述子はA型シーケンサー640上のスケジューラルーチン450によって第一の待ち行列604から引き出すことができ、その一方、第二の型のシュレッド624についての記述子はA型シーケンサー640上のスケジューラルーチン450によって第一の待ち行列604から引き出すことができるようなものである。シュレッドの適切なシーケンサーへのマッピングはユーザーレベルの命令によって指令されうる。しかしながら、図6で図示した実施形態のような少なくとも一つの他の実施例については、A型シーケンサー640とB型シーケンサー642の機能性は、互いに排反な機能性の関係ではなく、上位集合―部分集合の機能性関係を表す。すなわち、第一の集合のシーケンサーA型シーケンサー640のようなは、第二の集合のシーケンサーB型シーケンサー642のようなのすべての機能性に加えて、該第二の集合のシーケンサー642によって提供されない追加的な機能性をも含む、上位集合の機能性を提供するのである。そのような実施形態については、A型シーケンサー640のためのスケジューラルーチン450は、任意的に、第二の待ち行列606からのシュレッド記述子を取得しうる。この任意的な処理は、たとえばA型シーケンサーのためのすべての記述子が利用不能であるたとえば、第一の待ち行列604が空であるような場合に実行されうる。換言すれば、上位集合の機能性をもつシーケンサーは、そのようなシーケンサーのために特に指定されたシュレッドを実行しうるが、部分集合の機能性のシーケンサーのために指定されたシュレッドをも実行しうるのである。最後に、図6は、別のシュレッドによって、またはシュレッド認識スレッドshredawarethreadによって実行されたシュレッド生成命令に反応してシュレッド記述子が作業待ち行列システム602に入れられ660うることを示している。少なくとも一つの実施例については、シュレッド記述子の生成をトリガーする命令は、shredcreateのようなAPI様アプリケーションプログラマインターフェース[ApplicationProgrammerInterface]スレッド制御プリミティブである。ソフトウェアライブラリによって提供されるようなソフトウェアが、shredcreateプリミティブに反応して、新たなシュレッドについてのシュレッド記述子を生成することができ、それを作業待ち行列システム602に入れることができる。少なくとも一つの実施例については、シュレッド記述子はこうしてshredcreateプリミティブに反応してソフトウェアによって生成され、待ち行列システム702に入れられる。シュレッド記述子は、少なくとも一つの実施例については、シュレッドについて少なくとも以下の属性を同定するレコードでありうる:aシュレッドが実行を開始すべきアドレス、およびbスタック記述子。このスタック記述子は、新たなシュレッドが、ローカル変数および戻りアドレスのような一時変数を記憶するために使うメモリ記憶領域スタックを同定する。図7は、図4~図6に示したいずれかのようなスケジューリング機構の実施形態を利用するための見本系列を示すデータフロー図であり、マルチシーケンサーシステム上での実行のためのシュレッドのユーザーレベルのスケジューリングを実行するためのものである。少なくとも一つの実施例については、方法700は、シーケンサー770上で走っているスレッドTによって実行される。少なくとも一つの実施例については、方法700は、プログラマのようなユーザーによって生成される命令に反応して実行される。図7については、そのような命令は、スレッドTの命令と称される。もちろん、方法700の諸ブロックは、図7に示したのとは異なる系列においてユーザーによってプログラムされてもよい。図7は、シーケンサーが機能上の基準に関して非対称であるマルチシーケンサーシステムの見本実施形態を示している。すなわち、スレッドTが実行されるシーケンサー770はOS可視シーケンサーである。よって、シーケンサー770は、オペレーティングシステムとの対話を介して、リング0動作すなわち、ページフォールトへの対応、システムコールの実行などのような特権動作を実行しうる。これに対し、図7に示した見本実施形態は、OSに可視でない隔離シーケンサー760をも含む。よって、隔離シーケンサー760は特権動作を実行することはできない。隔離シーケンサーはたとえば、リング3動作を実行するが、リング0動作を実行することはできないように限定されうる。このように、図7は、非対称なシーケンサーを含むマルチシーケンサーシステムの見本実施形態を示しているのである。図7に示した実施形態については、方法700はブロック701で開始され、ブロック704に進む。ブロック704では、スレッドTが、該スレッドTに関連付けられた一つまたは複数の同時並行シュレッドのユーザーレベルの制御のために初期化を実行する一つまたは複数の命令を実行する。少なくとも一つの実施例については、そのような初期化704は、作業待ち行列システム702の一つまたは複数の待ち行列たとえば図6の604および606参照の生成および/または初期化を含みうる。さらに、図7は、そのような初期化704が一つまたは複数の隔離されたシーケンサー760を含みうることを示している。もちろん、当業者は、ブロック704に示された待ち行列生成およびシーケンサー初期化が必ずしも単一のルーチン、方法または関数によって実行される必要はなく、ここで論じられる逐次順で実行される必要もないことを認識するであろう。たとえば、ある代替的な実施形態では、ブロック704で行われる初期化動作は、逆順に実行されてもよいし、あるいは同時並行して実行されてもよい。ブロック704のシーケンサー初期化ブロックは、コンピュータプログラマのようなユーザーによってスレッドTについての命令ストリーム中に入れられたユーザー生成のシュレッド生成命令によって指示されるシュレッドを走らせるよう、隔離シーケンサー単数または複数760を準備するために実行されうるものである。少なくとも一つの実施例については、そのようなシーケンサー初期化は、隔離シーケンサー760のそれぞれの上の分散されたスケジューラルーチン450の呼び出しを含みうる。のちにさらに詳細に論じるように、スケジューラルーチン450の呼び出しは、スケジューリングループの実行につながりうる。ここで、分散されたスケジューラの各部分は、対応する隔離シーケンサー760によって実行されうる作業について作業待ち行列システム702を定期的に検査することを始める。そのような初期化704なしでは、少なくとも一つの実施例については、隔離シーケンサー単数または複数760がシュレッドを実行するために利用でないことが予期される。少なくとも一つの実施例については、シュレッドを実行するようシーケンサー760を準備する初期化704は、少なくとも、スケジューラルーチン450の呼び出しを含む。初期化704は、スレッドTについての命令ストリーム中でユーザーによって指示される各シーケンサーのために実行されうる。少なくとも一つの実施例については、スレッドTによる実行のために初期化されたすべてのシーケンサーは、スレッドTが関連付けられているプロセスのためにオペレーティングシステムが構築した仮想メモリの同じビューを共有する。処理はブロック704からブロック706へと進む。ブロック706では、スレッドTは、ユーザー定義のmainシュレッド関数で始まる実行のためのシュレッド記述子を生成する。少なくとも一つの実施例については、ユーザー定義のmainシュレッド関数は、伝統的なOS可視のmain関数を置き換える。図7は、mainシュレッドについてのシュレッド記述子が、作業待ち行列システム702に入れられうることを示している。したがって、mainシュレッドは、次の機会に分散されたシュレッドスケジューラルーチン450の一つによって実行のためにスケジューリングされるべく、順番待ちに入れられる。ブロック706から、処理はブロック708に進む。ブロック708では、OS可視スレッドTが独自のスケジューリングループを開始する。したがって、スレッドTは、シーケンサー770上のスケジューラルーチン750を初期化するために一つまたは複数の命令を実行する。図7は、スケジューラ750が、作業を第一のシーケンサー770上にスケジューリングするために作業待ち行列システム702を参照しうることを示している。このように、図7は、すべてのシュレッド記述子が共通の待ち行列システム702に送られる実施形態を示している。すべてのスケジューラルーチン450a~450n、550はその共通の待ち行列システム702に作業を要求し、スケジューリングするのである。スケジューリングルーチン450a~450nの諸インスタンスは複数の隔離シーケンサーの間に分散されているので、スケジューリングルーチン450はここでは分散されたスケジューラと称されうる。少なくとも一つの実施例については、OS可視シーケンサー770第一の型は、待ち行列システム702の第一の作業待ち行列たとえば図6の604参照に関連付けられており、一方、隔離シーケンサー第二の型は、待ち行列システム702の第二の作業待ち行列たとえば図6の606参照に関連付けられている。図6との関連で先に説明したように、少なくとも一つの実施例については、第一のシーケンサー770は、作業待ち行列システム702内のどの待ち行列からでも作業を引き出しうる。このようにして、OS可視シーケンサー770および一つもしくは複数の隔離シーケンサー760の両方が初期化され704、706、スケジューリングのような管理をOSに頼るのではなくユーザー生成された命令に基づいてシュレッドを実行できるようになった。図示したように、そのようにする少なくとも一つの機構は、mainシュレッドルーチンのためのシュレッド記述子を生成するシーケンサー770上のより一般的なOS可視スケジューラルーチン750を呼び出すとともに、初期化されたブロック704参照隔離シーケンサー760上のスケジューラルーチン450を呼び出すことであるブロック708参照。ブロック708から、処理はブロック710に進む。ブロック710では、シーケンサー770は、そのスケジューラ750によってシーケンサー770上にスケジューリングされた命令を実行する。ブロック710の性質は、シーケンサー770上で複数のシュレッドまたはスレッド部分が逐次的に実行されうるという意味で反復的であってもよい。ブロック710が潜在的に反復的であるという性質は、図7では破線で表されている。シーケンサー770は、そのシーケンサー型に関連付けられた作業待ち行列システム702の待ち行列においてシュレッド記述子によって指示されるシュレッド命令を実行しうる。そのような命令は、追加的なシュレッド記述子が生成され、作業待ち行列システム702に入れられるようにする命令を含みうる。少なくとも一つの実施例については、シーケンサー770によって実行されるシュレッドは、隔離シーケンサー760では実行できず、770のシーケンサー型によって与えられる機能性を必要とするシュレッドを含みうる。たとえば図7に示した例については、シーケンサー770に関連付けられた待ち行列は、リング0動作を要求するシュレッド命令を含みうる。すなわち、OSはOS可視シーケンサーによって発されるシステムコールにしか対応できないので、シュレッドによって実行されるオペレーティングシステムコールは特別な扱いを要求しうるのである。OS隔離シーケンサー760上で走るシュレッドのためのシステムコールは、プロキシ機構を介することでOS可視シーケンサー770によって実行されうる。このプロキシ機構は、OS可視シーケンサーが、特権命令について前進するためにオペレーティングシステムの注意を得るためにシュレッドのなりすましをすることを許容する。プロキシ機構を実装しうる仕方はいくらでもある。たとえば、そのような機構は、隔離シーケンサー760が、OS隔離シーケンサー上でシステムコールのような特権命令の実行を試みるときに暗黙的に呼び出されてもよい。試みられたシステムコールは例外の生成を引き起こしうる。例外のハンドラがシュレッド状態を保存し、そのシステムコールについてのシュレッド記述子を生成し、該シュレッド記述子をOS可視シーケンサー702に関連付けられた待ち行列に入れることができる。そのような記述子がOS可視シーケンサー770上での実行710のためにスケジューリングされるとき、シーケンサー770は、シュレッドの状態を得てシステムコールを実行する前に、自分自身の状態を保存しうる。そのようなプロキシ実行については、OS可視シーケンサー770上での実行は、OS隔離シーケンサー760上でのフォールトを引き起こした命令において再開される。その際、シュレッドの状態が保存され、制御はフォールトしたOS隔離シーケンサー760に返され、それによりそのシュレッドの実行を続けることができる。少なくとも一つの他の実施例については、特権命令に対するプロキシ実行はユーザーによって明示的に制御されうる。そのような実施形態については、ユーザーは明示的に、特権命令を含んでいるシュレッドがOS可視シーケンサー770上で実行されるべきであることを示しうる。そのような指示は、シュレッド生成プリミティブのパラメータまたは変形として表現されうる。待ち行列選好パラメータを含めること、あるいは特化したシュレッド生成プリミティブを使用することは、ここではいずれもまとめてスケジューリングヒントと称される。シュレッド生成プリミティブたとえばshredcreateのようなプリミティブはライブラリ関数を呼び出しうる。その関数は、新たなシュレッド記述子の生成を引き起こし、さらにその記述子の、作業待ち行列システム702の待ち行列内への配置を引き起こす。標準的なshredcreateプリミティブの任意的なパラメータは、ユーザーがその記述子についての待ち行列型を指定することを許容しうる。あるいはまた、ここではshredcreateaffinityと称される任意的な関数コールが、ユーザーがその特定のシュレッドについての待ち行列選好preferenceを表現するために利用されうる。たとえば、シュレッドが多数のシステムコールを含んでいる場合、ユーザーはリング0動作を実行できるシーケンサー型に関連付けられた作業待ち行列を指定しうる。当業者は、同様のパラメータおよび/または代替パラメータのアプローチが譲歩プリミティブayieldprimitiveとともに利用されてもよいことを認識するであろう。図7に示したシステムは、システムコールの扱いに関係した追加的な安全措置を含みうる。たとえば、OSコールのまわりのシリアル化を提供するためにミューテックスが利用されうる。ミューテックスは、あるスレッドと一つまたは複数のその関連付けられたシュレッドとがスレッド同期のためにオペレーティングシステムによって提供される同じロックを取得しようと試みる場合に生じうるデッドロックを最小化するために利用されうる。ブロック710で実行されるいかなるシュレッドまたはシュレッド部分についても、シーケンサー770は、そのシュレッドの実行を、終了exitまたは譲歩yieldプリミティブが実行されるまで継続しうる。現在のシュレッドにおいて終了プリミティブに遭遇した場合、現在のシュレッドの実行は完了し、スケジューラ750は、待ち行列システム702の適切な待ち行列をつついて、シーケンサー770上での実行のために別の命令シーケンスをスケジュールさせうる。少なくとも一つの実施例については、終了命令はこのようにシュレッドを完了であるとしてマークし、制御はスケジューラ750に戻る。現在のシュレッドにおいて譲歩プリミティブに遭遇した場合には、その呼び出しプロセスについてのシュレッド記述子が待ち行列システムに戻されることができ、制御はスケジューラ750に戻されることができる。したがって、譲歩プリミティブの実行に際しては、現在のシュレッドについての残りのシュレッド命令についてのシュレッド記述子が作業待ち行列システム702内に入れられうる。終了または譲歩のいずれの場合についても、現在のシュレッドの実行がブロック710で完了したのち、処理はブロック712で終わりになりうる。あるいはまた、新たなスレッドまたはシュレッドが実行のためにスケジューリングされてもよい。したがって、ブロック710からブロック710に戻るループをなす破線は、シーケンサー770によって追加的なスレッドまたはシュレッドが実行されうることを示している。分散されたスケジューラ750によってスケジューリングされたすべてのスレッドおよび/またはシュレッドもしくはシュレッド部分の実行が完了したのち、処理はブロック712で終わりうる。ブロック710の実行後に追加的なシュレッドをスケジューリングすることに関し、譲歩または終了命令が実行されたあと、現在のシーケンサー770上の分散スケジューラ750によって新たなシュレッドが実行のためにスケジューリングされうる。少なくとも一つの実施例については、そのような動作は、スケジューラ750が、自分とは異なるシーケンサー型に関連付けられた作業待ち行列から作業を得る結果として生起する。あるいはまた、追加的なOS可視命令がブロック710のあとに実行されうる。そのような作業は、シーケンサー770自身のシーケンサー型に関連付けられた作業待ち行列からスケジューリングされうる。上述したように、少なくとも一つの実施例については、シーケンサー770のスケジューラ750は、自分の待ち行列が空である場合、もともとOS隔離シーケンサー上で実行されるよう指定されているシュレッドしかスケジューリングしない。図8は、OS独立なシュレッドのスケジューリングのための制御フローの少なくとも一つの実施形態を示すタイミング図である。解説の目的のため、図8のタイミング図は、図7に示された方法実施形態700の特定の例についての制御フローを示している。したがって、以下では図8は図7を参照しつつ論じる。図7に示したように、図8に示される方法800は第一のOS可視シーケンサー870と第二の隔離されたシーケンサー860によって実行されうる。図8は、第一の型の第一のシーケンサー870上の初期化704図7参照の少なくとも一つの実施形態についてのさらなる詳細を示している。少なくとも一つの実施例については、シーケンサー870は、機能上の基準に関して第二のシーケンサー860と区別される。すなわち、第一のシーケンサー870はOS可視である一方、第二のシーケンサー860は隔離されている。図8は、少なくとも二つのユーザー生成命令の実行を含みうる。ここでシュレッドモニタSEMONITOR命令と称される第一の命令は、OS可視シーケンサーとOS隔離シーケンサーとの間の通信のためのチャネルの確立のために使われる。第二の初期化命令は制御移行命令であり、ここではシュレッド移行SXFR命令と称される。当業者は、ここに記載されている方法700、800およびシステムはシュレッド制御命令についてのいかなる特定の命名体系にも命令セットアーキテクチャにも限定される必要がないことを認識するであろう。当業者はまた、SEMONITOR型命令およびSXFR型命令が、先に論じたshredcreate、shredcreateaffinity、shredyieldおよびshredexitといったプリミティブについてのコンパイラ、アセンブラまたはライブラリ関数の結果として生成されうることも認識するであろう。この意味で、最終的なultimate命令は、より上のレベルのユーザー構築物に反応して生成されたのではあっても、やはりここではユーザー生成されたと称される。上記のシュレッドプリミティブの部分的なリストは、限定するものと解釈すべきではない。当業者はまた、付属の請求項が、最終的なシュレッド制御命令が必ずしもハードウェアにサポートされた命令ではない実施形態をも包含することを認識するはずである。そうではなく、少なくとも一つの実施例については、プリミティブに反応して生成される命令は、アーキテクチャ上の命令の代わりに、ハードウェア信号であってもよい。割り込みまたはその他のシーケンサー制御信号のような信号は、SEMONITOR型およびSXFR型の機能性を実装するためにユーザー生成されたプリミティブに反応してソフトウェアまたはファームウェア層によって生成されうる。代わりに、方法700、800は一般的に、シーケンサー870、860がシュレッドを生成および制御するためのアーキテクチャ上のユーザーレベルの命令をサポートすること、ならびに伝統的なマルチスレッドAPIが正準的なシュレッド命令セットを使って完全に実装されうることを想定する。正準的なシュレッド命令のセットの一つの見本のさらなる議論については、複数の命令シーケンサー上での、命令セットに基づくスレッド実行のための機構AMechanismForInstructionSetBasedThreadExecutiononaPluralityofInstructionSequencersと題する、同時係属中の米国特許出願、代理人整理番号42390P19770を参照されたい。少なくとも一つの実施例については、シーケンサー870、860は少なくとも、SEMONITORおよびSXFRに沿った命令を含む正準的なシュレッド命令のセットをサポートすることが想定される。複数シーケンサーの動作を制御し、特に制御のシーケンサー間での移行を実施するためにユーザーがこの型の命令を利用する機能は、ここではシーケンサー算術sequencerarithmeticと称される。シーケンサー算術を提供するシュレッド命令は、少しばかり例を挙げれば分岐fork、結合join、譲歩yield、終了exit、ロックlock、待機waitおよびロック解除unlockといったより高いレベルのシュレッドプリミティブを構築するための構成要素として利用されうる。これらのプリミティブは、OSレベルのスケジューリングなしに実行される同時並行の共有メモリのシュレッドのユーザーレベルでの管理を許容するために利用されうる。このようにして、正準的なシュレッド命令は、アーキテクチャ上のシュレッド命令とアプリケーションソフトウェアとの間の抽象化の層を築くために利用されうる。よって正準的なシュレッド命令は、レガシーアプリケーションプログラムインターフェースをサポートする抽象化の層を築くために利用されうるのである。一般に、SXFR型の命令は、第一のシーケンサーによって実行されるとき、該第一のシーケンサーからある第二のシーケンサーに信号を送る。従って、SXFR型の命令は、サービスのためのシュレッド間信号伝達を実行する機構を提供する。SXFR型の命令の作用は同期的である。これは、ユーザーが、SXFR型命令をコード中に巧妙に位置させることによって、シュレッド命令ストリームにおける他の命令の実行に対するSXFR命令の実行のタイミングを制御できるという意味においてである。これに対し、SEMONITOR型の命令は、非同期的なシーケンサー算術を提供する。SEMONITOR型命令はプログラマによって、第一のシーケンサーからの信号をモニタリングするようある第二のシーケンサーを構成設定するために使用されうる。図8は、第一の初期化命令、SEMONITOR命令が、指定された目標シーケンサー上に、特定のイベント型へのハンドラルーチンをマッピングすることを示している。すなわち、図8に示されるSEMONITOR命令の実施形態は、特定のルーチンのための開始命令ポインタアドレスここでは、分散スケジューラルーチンSchedulerの開始を、指定されたシーケンサーid、1についてのあるイベント型initにマッピングする。第一のシーケンサー上でSEMONITOR命令を実行したときの、目標シーケンサーに対する結果は、前記目標シーケンサーが指示されたイベントインジケータをモニタリングし、指定されたアドレスで前記目標シーケンサーに対する制御のフローを開始するということである。イベント型は、少なくとも一つの実施例については、インジケータとして実装されうる。たとえば、指定されたイベントが第一のシーケンサーによって指示されるときにアクティブになる信号線である。第一のシーケンサーSID0870上でのSEMONITOR命令の実行の結果として、SEMONITOR命令のシーケンサー識別子パラメータ1によって識別される目標シーケンサーSID1860は、ポーリングその他によりinitイベントインジケータをモニタリングする。initインジケータがアクティブになったとき、SID1860は指定されたアドレスにつまり、スケジューラルーチンの先頭にジャンプし、スケジューラコードの実行を開始する。図8ではSchedulerルーチンは単に一例として使われているのであって、当業者は、いかなる適切なイベントハンドラコードが利用されてもよいことを認識するであろう。こうして、SEMONITOR命令の実行は指定されたシーケンサー上における非同期的な制御移行を設定しうる。図8に示されているSEMONITOR初期化は図8に示されている例に固有であり、限定するものと解釈すべきではない。代替的な実施形態については、一連のイベント型を特定のハンドラルーチンにマッピングするために、図8に示されたSEMONITOR命令と同様のいくつかの初期化命令の組が実行されうる。図8に示されたSEMONITOR命令の実行後、イベント型initが分散スケジューラと関連付けられる。次いで第二の初期化命令、SXFR命令が第一のシーケンサー870によって実行される。SXFR命令の実行は、OS隔離されたシーケンサーSID1上での実行の別個のスレッドを初期化するためのイベントを送る。802では、OS隔離されたシーケンサーSID1がInitシナリオを含んだ信号を検出するとき、OS隔離されたシーケンサーSID1はスレッドSを開始し、分散スケジューラたとえば図7の450参照に対応する命令ストリームの実行を開始する。図8が示す実施形態のSXFR命令は、以下のパラメータを含む:シーケンサー識別子、イベント型および任意的な同期フラグ。シーケンサー識別子sequenceridentifierSIDは、SXFR命令の実行の結果として制御が移行される先のシーケンサーを指定する。図8に示した例では、シーケンサー870についてのシーケンサー識別子はSID0であり、シーケンサー860についてのシーケンサー識別子はSID1である。図8に示されるSXFR命令についてのイベント型パラメータは、initイベント型を指示する。図に示したSEMONITOR命令の以前の実行の結果として、initイベント型は、SXFR命令が実行される時点には分散スケジューラ図7、450に関連付けられている。したがって、イベント型パラメータは事実上、移行先シーケンサーすなわち、SID1860に対して、シーケンサー860が実行を開始するときには分散スケジューラについてのIPアドレスにおいて実行を開始すべきであることを指示する。図8に示された見本SXFR命令の最後のパラメータは、任意的な待機/不待機フラグである。不待機nowaitを指定することにより、この命令は本質的に同時並行的なマルチスレッド状況を開始する――第一のシーケンサー870は、移行先のシーケンサー860からの同期インジケータを待つ必要がなく、SXFR命令の実行を完了したらすぐ自分の命令ストリームの実行を続けることができるのである。ここで、SXFR命令はシュレッド生成および制御移行命令である。図8は、第一のシーケンサーによるSXFR命令の実行の結果として、シュレッドSが第二のシーケンサー860上で分散ハンドラルーチンの実行を開始することを示している。したがって、SXFR命令の実行後、スレッドTおよびシュレッドSは同時並行して実行されうる。SID0870上でのスレッドTの実行は、不待機フラグのため、704でSXFR命令を実行したあと実行を継続しうる。したがって、スレッドTは先に進んで、mainシュレッドプログラムのためのシュレッド記述子を生成706し、そのような記述子を作業待ち行列システム702に入れる。図7との関連で先に論じたように、mainシュレッド記述子は、待ち行列が隔離されたシーケンサーSID1860に関連付けられているところで作業待ち行列システム702図2に入れられうる。次いでスレッドTはそのOS可視スケジューラ750を呼び出し、そのスケジューラ750によって指令されるように命令の実行710に進む。図7との関係で先に議論したように、スレッドTは任意的に、シュレッド記述子を探してもよく709、したがって710ではシュレッド命令を実行してもよい。これは少なくとも、aOS可視スケジューラがOS隔離されたシーケンサー待ち行列から作業を引き出すことを許すような実施形態か、および/または、bOS可視シーケンサー870上でのシュレッド命令のプロキシ実行をサポートするような実施形態についていえる。命令実行710の一回または複数回の反復を実行したのち、スレッドTの処理は712で終わりうる。隔離シーケンサー860に関しては、図8は、シュレッドSについて実行されるべき動作の系列の少なくとも一つの実施形態を示している。先に論じたように、OS可視シーケンサーSID870上で実行されるOS可視スレッドTによって実行される初期化処理704の結果として、シーケンサー860上でスケジューリングループすなわち、分散スケジューラ450の実行が開始されうる。804で、SID1860上で走っているスケジューラルーチン450は、シーケンサー860による実行のために入手可能な何らかのシュレッド記述子があるかどうかを判別すべく、作業待ち行列システム702に問い合わせをする。図8に示されている見本系列については、シーケンサーSID1860は、ブロック706前述がすでにSID0870によって実行されていれば、ブロック806でmainシュレッド記述子に遭遇しうる。記述子がみつかった場合、シーケンサー860は、その記述子によって指示されるシュレッドを実行806する。シュレッドは、a完了まで、あるいはb譲歩命令に遭遇するまで実行される。シュレッドの命令が追加的なシュレッド生成命令を含みうることに注意しておくべきである。すなわち、少なくとも一つの実施例については、シュレッドは、それ自身、少なくとも二つの型のシュレッド動作を実行しうる:シュレッド制御動作シュレッドの生成および終止に関すると同期動作譲歩動作のようなである。少なくとも一つの実施例については、そのような動作は、シュレッド命令ストリームにおいてユーザーが業界標準準拠のプリミティブを使うことによって呼び出されうる。一つのそのような業界標準はたとえばPOSIXPortableOperatingSystemInterfaceである。図8において、806から作業待ち行列システム702への破線は、シュレッドの実行806の間に追加的なシュレッド記述子単数または複数が生成されうること、および該追加的な記述子単数または複数が作業待ち行列システム702に入れられうることを示している。たとえば、譲歩プリミティブは、ユーザーによって、シュレッド命令ストリーム中に入れられうる。そのような譲歩プリミティブは、シーケンサーに、シュレッドの制御を譲らせる。そうする際、シーケンサー860は、シュレッド命令の残りのための記述子を、シュレッド実行を終止する前に作業待ち行列システム702に戻しておくことができる。譲歩プリミティブは、制御移行を実行する前にスタックをスワップする関数を呼び出してもよい。現在のスレッドコンテキストがシーケンサーのスケジューラに制御を返す前に保存されるようにするのである。図8は、SID1860上でのシュレッドSの実行が、終止termination命令終了、譲歩などが実行されるときに終止またはサスペンドされることを示している。そのような時点では、分散スケジューラ450が任意的に、別のシュレッド記述子がないかどうか作業待ち行列システム702を調べてもよい。シーケンサーSID1860によって実行されうる作業を同定するためである。作業待ち行列システム702のそのような任意的な反復的調査は、図8では、806から804への破線矢印によって示されている。図8に示した例については、SID0870上で走っているスケジューラルーチン450が作業待ち行列システム702を調べる前に、SID1860上で走っているスケジューラルーチン450が、mainシュレッドルーチンのためのシュレッド記述子を見出しそうでありうることも可能であることを注意しておくべきである。そのような場合、シーケンサー860、870のいずれもmainシュレッドルーチンを実行する機能があるとすると、mainシュレッドルーチンは、たとえその記述子がSID0870によって生成されたとしても、SID1860によって実行されうる。以上の図8の議論から、少なくとも一つの実施例については、二つの例示されたシーケンサー860、870はいずれもmainシュレッドルーチンを実行する機能があることは明らかであろう。したがって、少なくとも一つの実施例については、シーケンサー860、870は対称的であると想定されうる。しかし、少なくとも一つの他の実施例については、シーケンサー860、870は完全に対称的ではないが、それでいて各シーケンサー860、870はmainシュレッドルーチンを実行するために十分な機能をもつ。そのような実施形態は、たとえば、mainシュレッドルーチンがリング3の機能しか要求せず、シーケンサーSID1860がリング3機能を有しており、SID0870がリング3とリング0の両方の機能を有しているような場合に存しうる。そのような実施形態については、図6に示されるように、作業待ち行列システム702は第一の待ち行列たとえばSID0870によってしか実行できない記述子についてのおよびSID0870またはSID1860のいずれによっても実行できる記述子についての第二の待ち行列を含みうる。分散スケジューラ450および作業待ち行列システム702に関し、少なくとも一つの実施例については、作業待ち行列システム702は、クリティカルセクションによって保護されうる。先に論じたように、各隔離シーケンサー860は、事実上、分散スケジューラルーチン450の一部分について独自のコピーを実行しており、その対応するシーケンサーを走らせるために次の準備ができた命令を処理するため、タスク待ち行列システム702の待ち行列の先頭へのアクセスを競ることを試みることができる。シーケンサー上の一つのタスクがミューテックス、条件変数conditionalvariableまたはセマフォのような同期化変数を待つようなことがあれば、対応するクリティカルセクションにはいったのち、そのタスクはスケジュールから外されて、タスク待ち行列の末尾に付けられてもよい。図8に示した例が与えられているもとでは、本発明の諸実施形態は、OSを使うことなく、OSから隔離されているシーケンサー上での実行の諸スレッドをスケジューリングできることが見て取れる。こうして、ここに開示される技術のおかげで、OSがサポートできるよりも多くのシーケンサーをもつマルチシーケンサーシステムを築き、OSによってサポートされていないマルチシーケンサーシステムのシーケンサー上でスレッドのユーザーレベルのスケジューリングを許容することが可能である。上記の機構、システムおよび方法の少なくともいくつかの実施例については、分散スケジューラ450はイベント駆動の自己スケジューラとして動作する。そこでは、API様のスレッド制御shredcreate、shredcreateaffinityなどまたはスレッド同期shredyieldなどプリミティブの結果として生成される、待ち行列に入れられたスケジューリングイベントに反応して、シュレッドが生成される。スケジューラおよび諸プリミティブは、POSIX準拠APIのような伝統的な業界標準APIと、マルチシーケンサーシステムのハードウェアとの間の中間的な抽象化層を生成するランタイムライブラリの一部として実装されうる。マルチシーケンサーシステムのシーケンサーは、少なくとも、ユーザーレベルのシーケンサー算術を実装する正準的なシュレッド命令のセットをサポートする。ライブラリは、上で論じた分散スケジューラ450の実施例のようなスケジューラを含みうる。ランタイムライブラリが中間的な抽象化レベルのはたらきをしうるので、プログラマは伝統的なスレッドAPIたとえばPthreadsAPIまたはWin32ThreadsAPIのようなをシュレッドをサポートするハードウェアで利用できる。ライブラリは、正準的なシュレッド命令を、ユーザーがプログラムするプリミティブに基づいて透明に呼び出す関数を提供しうる。ここで議論されたスケジューリング機構および技術は、単一コアSMTシステムたとえば図3の310参照およびマルチコアシステムたとえば図3の350参照を含め、いかなるマルチシーケンサーシステム上でも実装されうる。そのようなシステムのさらなる議論について、図9との関連で以下に論じる。図9は、開示されている諸技法を実行する機能のあるコンピューティングシステム900の少なくとも一つの見本実施形態を示している。コンピューティングシステム900は少なくとも一つのプロセッサコア904およびメモリシステム940を含む。メモリシステム940はより大きな、比較的より遅いメモリ記憶902とともに、命令キャッシュ944および/もしくはデータキャッシュ942のような一つもしくは複数のより小さな比較的高速のキャッシュを含みうる。メモリ記憶902は、プロセッサ904の動作を制御するための命令910およびデータ912を保存しうる。命令910は分散されたスケジューラルーチン450の一つまたは複数のコピーを含みうる。メモリシステム940はメモリの一般化された表現として意図されており、ハードドライブ、CDROM、ランダムアクセスメモリRAM、動的ランダムアクセスメモリDRAM、静的ランダムアクセスメモリSRAM、フラッシュメモリおよび関係した回路といった多様な形のメモリを含みうる。メモリシステム940は、プロセッサ904によって実行されうるデータ信号によって表現される命令910および/またはデータ912を保存しうる。命令910および/またはデータ912は、ここに議論された技術のいずれかまたは全部を実行するためのコードおよび/またはデータを含みうる。たとえば、データ912は、上で論じたシュレッド記述子を保存できる待ち行列システム702を形成する一つまたは複数の待ち行列を含みうる。あるいはまた、命令910が、シュレッド記述子を記憶するための待ち行列システム702を生成するための命令を含んでいてもよい。プロセッサ904は、実行コア930に命令情報を供給するフロントエンド920を含みうる。フェッチされた命令情報は、実行コア930による実行を待つべく、キャッシュ225にバッファリングされうる。フロントエンド920は、その命令情報をプログラム順に実行コア930に供給しうる。少なくとも一つの実施例については、フロントエンド920は、実行されるべき次の命令を決めるフェッチ/デコードユニット322を含む。システム900の少なくとも一つの実施例については、フェッチ/デコードユニット322は、単一の次命令ポインタおよびフェッチ論理320を含みうる。しかしながら、各プロセッサ904が複数スレッドコンテキストをサポートする実施形態では、フェッチ/デコードユニット322は、サポートされるスレッドコンテキストそれぞれについて相異なる次命令ポインタおよびフェッチ論理320を実装する。マルチプロセッサ環境における追加的な次命令ポインタおよびフェッチ論理320が任意的であるという性質は、図9で点線によって表されている。ここに記載される諸方法の実施形態は、ハードウェア、ハードウェアエミュレーションソフトウェアもしくはその他のソフトウェア、ファームウェアまたはそのような実装手法の組み合わせにおいて実装されうる。本発明の実施形態は、少なくとも一つのプロセッサ、データ記憶システム揮発性および不揮発性のメモリおよび/または記憶要素を含む、少なくとも一つの入力装置ならびに少なくとも一つの出力装置を有するプログラム可能システムのために実装されうる。本出願の目的のためには、処理システムは、たとえばデジタル信号プロセッサDSP、マイクロコントローラ、特定用途向け集積回路ASICまたはマイクロプロセッサといったプロセッサをもつ任意のシステムを含む。プログラムは、汎用または特殊目的プログラム可能処理システムによって読み取り可能な記憶媒体またはデバイスたとえばハードディスクドライブ、フロッピー登録商標ディスクドライブ、読み出し専用メモリROM、CDROMデバイス、フラッシュメモリデバイス、デジタル多用途ディスクDVDまたはその他の記憶デバイス上に記憶されうる。処理システム中のプロセッサにとってアクセス可能な命令が、該処理システムによって前記記憶媒体またはデバイスが読まれたときに、ここに記載される手順を実行するために、該処理システムを構成設定し、動作させることを提供する。本発明の実施形態は、処理システムとともに使用するよう構成された機械可読記憶媒体として実装されると考えられてもよい。ここで、そのように構成された記憶媒体は、処理システムをして、ここに記載される機能を実行するために特定かつ所定の仕方で動作させる。見本システム900は、インテル社から入手可能なペンティアム登録商標、ペンティアム登録商標プロ、ペンティアム登録商標II、ペンティアム登録商標III、ペンティアム登録商標4およびアイテニアム登録商標およびアイテニアム登録商標2といったマイクロプロセッサに基づいた処理システムを表す。ただし、その他のシステム他のマイクロプロセッサをもつパーソナルコンピュータPC、エンジニアリングワークステーション、携帯情報端末およびその他のハンドヘルド装置、セットトップボックスなどを含むを使ってもよい。ある実施例については、見本システムはマイクロソフト社から入手可能なウィンドウズ登録商標オペレーティングシステムのあるバージョンを実行してもよい。ただし、他のオペレーティングシステムおよびグラフィカルユーザーインターフェースなどを使用してもよい。本発明の具体的な実施形態について図示し、記載してきたが、付属の請求項の範囲から外れることなく変更および修正をなすことができることは当業者には明らかであろう。たとえば、作業待ち行列システム702は、複数のシーケンサー型によって競られる単一の待ち行列を含んでいてもよい。そのような実施形態については、各シュレッド記述子に資源要求が明示的に含められる。分散されたスケジューラの各シーケンサーの部分は、シュレッドの記述子がシーケンサーによる実行のために作業待ち行列から取り出される前に、そのシーケンサーがそのシュレッドを実行する機能があるかどうかを確かめるための検査を行う。もう一つの代替的な実施形態については、作業待ち行列システム702においてハイブリッドアプローチが実装されうる。そのようなハイブリッドアプローチについては、作業待ち行列システム702は複数の待ち行列を含む。それでも、該複数の待ち行列のうち一つまたは複数は複数のシーケンサー型に対応する。そのようなハイブリッド実施形態のためには、二つ以上のシーケンサー型に関連付けられたいかなる待ち行列についても、各シュレッド記述子に明示的な資源指示が含められる。上で論じた分散されたスケジューラルーチンは、ラウンドロビンスケジューリングのアプローチを使ってシュレッド記述子の実行をスケジューリングしうる。しかし、少なくとも一つの代替的な実施形態については、上で論じた分散スケジューラおよび作業待ち行列システムは、優先度に基づいたスケジューリング方式をサポートしうる。また、少なくとも一つの代替的な実施形態については、好まれるシーケンサーによってタスクが実行されるよう、複数待ち行列の待ち行列システム実施形態のための待ち行列選好がユーザーによって、あるいはランタイムライブラリによって設定されることができる。たとえば、ある特定のシーケンサーによって譲歩動作前に実行されるシュレッドが、そのシュレッドの残りの命令が実行されるときにその同じ特定のシーケンサーに送り返されることができる。作業待ち行列システムへのシュレッド記述子の発送に関し、先に図7との関連で、シュレッド記述子の割り当ては、シュレッドが生成される時点でどの待ち行列に割り当てられるべきかを定義するためにユーザーが特定のパラメータまたは特定の親和affinityプリミティブを使用することによって静的に明示的に制御されうることを述べた。少なくとも一つの代替的な実施形態では、そのような静的な割り当て手法の代わりに、あるいは追加として、動的な割り当てを利用しうる。動的な割り当ては、ミューテックスのようなユーザーレベルの同期オブジェクトを通じて実装されうる。そのようなミューテックスは、シュレッドが、自ら動的に、新生シュレッドspawneeshredを作業待ち行列システムの特定の待ち行列にスケジューリングすることを許容しうる。あるいはまた、動的な割り当ては、分散スケジューラが待ち行列の挙動を観察し、どの待ち行列が記述子を受け取るべきかを動的に選択するよう実装されてもよい。さらにまた、動的な割り当ては、プログラマが、ロックおよびロック解除プリミティブといった同期プリミティブを使うことを通じて実行されてもよい。そのようなプリミティブはOSのミューテックス構造体を利用しうる。ロックプリミティブの実際に際し、現在のシーケンサーは、譲歩動作を実行し、現在のシュレッドの記述子をそのミューテックスに対応する待ち行列に入れることができる。このように、当業者はより広い諸側面における本発明から外れることなく、変更および修正がなし得ることを認識するであろう。付属の請求項の範囲内には、本発明の真の範囲内にはいるそのようなすべての変更および修正が包含される。可能な態様のいくつかを記載しておく。態様1同時並行シュレッドのユーザーレベルのスケジューリングのための方法であって:ユーザー生成されたスレッドプリミティブを実行する段階であって、スレッド制御命令を生成するライブラリ関数を呼び出すことをさらに含む段階と;前記スレッドプリミティブに応じて、スレッドを記述する作業記述子を生成する段階と;前記作業記述子を待ち行列システム内に記憶させる段階と;オペレーティングシステムの介入なしに、前記スレッドのOS隔離シーケンサー上での実行をスケジューリングする段階、とを有する方法。態様2ユーザーレベルの同時並行マルチスレッド利用を実行するよう前記シーケンサーを初期化する段階をさらに有する、態様1記載の方法。態様3前記初期化する段階がさらに、ユーザーレベルの分散されたスケジューラの、前記シーケンサー上での実行をトリガーする段階を有する、態様2記載の方法。態様4前記待ち行列システムが、第一のシーケンサー型に関連付けられた第一の待ち行列と、第二のシーケンサー型に関連付けられた第二の待ち行列とを含む、態様1記載の方法。態様5前記第一および第二のシーケンサーが、コンピューティング上の少なくとも一つの基準に関して非対称的である、態様4記載の方法。態様6前記コンピューティング上の基準が機能上の基準である、態様5記載の方法。態様7前記コンピューティング上の基準が電力消費基準である、態様5記載の方法。態様8前記機能上の基準が、リング0動作を実行する能力である、態様6記載の方法。態様9前記記憶させる段階が、前記作業記述子を、ユーザーが提供したヒントに基づいて前記第一の待ち行列に記憶させることをさらに含む;態様4記載の方法。態様10前記スレッドプリミティブが、シュレッド生成プリミティブである、態様1記載の方法。態様11前記スレッドプリミティブが、シュレッド同期プリミティブである、態様1記載の方法。態様12前記スレッドプリミティブが、業界標準準拠のアプリケーションプログラマインターフェースの一部である、態様1記載の方法。態様13分散されたオペレーティングシステム独立なスケジューラルーチンの第一の部分を含む第一のスレッド実行ユニットと;分散されたオペレーティングシステム独立なスケジューラルーチンの第二の部分を含む第二のスレッド実行ユニットとを有する装置であって;前記第一および第二のスレッド実行ユニットが同時並行のマルチスレッドを利用した実行の機能をもち;前記第一および第二の部分がさらに、スレッドを記述する作業記述子を求めて競るために作業待ち行列に問い合わせし;前記分散されたスケジューラルーチンが、前記競りに基づいて、オペレーティングシステムの介入なしに、前記スレッドを、前記スレッド実行ユニットのうちの選択されたものでの実行のためにスケジューリングする、装置。態様14前記スレッド実行ユニットの少なくとも一つはオペレーティングシステムに可視であり、前記スレッド実行ユニットの少なくとも別の一つはオペレーティングシステムに可視ではない、態様13記載の装置。態様15当該装置が単一コアのプロセッサであり;前記第一および第二の実行ユニットが論理的なプロセッサである、態様13記載の装置。態様16当該装置がマルチコアのプロセッサであり;前記第一および第二の実行ユニットがプロセッサコアである、態様13記載の装置。態様17前記実行ユニットが機能的に対称的である、態様13記載の装置。態様18前記待ち行列システムが、前記実行ユニットの全部に適用可能な作業記述子を保持するための単一の待ち行列を含む、態様17記載の装置。態様19前記実行ユニットの少なくとも一つが、他の実行ユニットの一つまたは複数とコンピューティング面で非対称的である、態様13記載の装置。態様20前記待ち行列システムが、前記少なくとも一つの非対称的である実行ユニットのための作業記述子を保持するための第一の待ち行列を含み、前記一つまたは複数の他の実行ユニットのための記述子を保持するための第二の待ち行列をも含む、態様19記載の装置。態様21メモリシステムと;第一のシーケンサー型の第一のシーケンサーと;第二のシーケンサー型の第二のシーケンサーと;前記メモリシステムに保存されているソフトウェアライブラリであって、作業待ち行列を生成するための一つまたは複数の命令を含むライブラリ、とを有するマルチシーケンサーマルチスレッドシステムであって:前記ライブラリがさらに、前記作業待ち行列からの作業をシーケンサー上での実行のために、ユーザー指令によりスケジューリングすることを実行する分散されたスケジューラを含む、システム。態様22前記分散されたスケジューラが、前記第一および第二のシーケンサーのためのスケジューリングループを実行する、態様21記載のシステム。態様23前記作業待ち行列が、ペンディングのソフトウェアスレッドを記述する一つまたは複数のレコードを保持する、態様21記載のシステム。態様24前記一つまたは複数のレコードが、それぞれ対応するペンディングのソフトウェアスレッドの開始アドレスを含む、態様23記載のシステム。態様25前記一つまたは複数のレコードが、それぞれ対応するペンディングのソフトウェアスレッドについてのスタックポインタを含む、態様23記載のシステム。態様26前記分散されたスケジューラがさらに、前記作業待ち行列からの作業をシーケンサー上での実行のために、ユーザー指令によりスケジューリングすることを、前記シーケンサーが同時並行してその関連付けられた作業を実行するように実行する、態様23記載のシステム。態様27前記ライブラリがさらに、それぞれ関連付けられたユーザー生成されたプリミティブに応じてシュレッド命令を生成する一つまたは複数の関数を含んでおり、前記プリミティブは一般的に知られたアプリケーションプログラマインターフェース規格に準拠するものである、態様23記載の方法。態様28マルチスレッドプロセッサにおいて、複数のシーケンサーの間でソフトウェアシュレッドの実行をスケジューリングする方法であって:ユーザー生成されたスレッド命令に応じて、スレッドを記述するスレッド記述子を生成する段階と;前記スレッド記述子を待ち行列に入れる段階と;それぞれが相異なるシーケンサーに関連付けられた複数のスケジューラルーチンを実行する段階であって、前記複数のシーケンサーがオペレーティングシステムに基づくスレッドスケジューラに従属せず、前記スケジューラルーチンのそれぞれが前記待ち行列内の前記記述子を求めて競るものである、段階と;前記スレッドを、前記シーケンサーの一つの上での実行のためにスケジューリングする段階、とを有する方法。態様29前記ユーザー生成されたスレッド命令が、アプリケーションプログラマインターフェースに含まれているプリミティブである、態様28記載の方法。態様30前記アプリケーションプログラマインターフェースが業界標準に準拠している、態様28記載の方法。態様31複数の機械アクセス可能命令を有する機械アクセス可能媒体を有する物品であって、前記命令はプロセッサによって実行され、前記命令は:ユーザー生成されたスレッドプリミティブを実行する動作であって、スレッド制御命令を生成するライブラリ関数を呼び出すことをさらに含む動作と;前記スレッドプリミティブに応じて、スレッドを記述する作業記述子を生成する動作と;前記作業記述子を待ち行列システム内に記憶させる動作と;オペレーティングシステムの介入なしに、前記スレッドのシーケンサー上での実行をスケジューリングする動作、とを提供する物品。態様32プロセッサによって実行されたときに:ユーザーレベルの同時並行マルチスレッド利用を実行するよう前記シーケンサーを初期化する動作、を提供する機械アクセス可能命令をさらに有する、態様31記載の物品。態様33前記初期化する動作を提供する命令がさらに、プロセッサによって実行されたときに、ユーザーレベルの分散されたスケジューラの、前記シーケンサー上での実行をトリガーする動作を提供する命令をさらに有する、態様32記載の物品。態様34前記待ち行列システムが、第一のシーケンサー型に関連付けられた第一の待ち行列と、第二のシーケンサー型に関連付けられた第二の待ち行列とを含む、態様31記載の物品。態様35前記第一および第二のシーケンサーが、コンピューティング上の少なくとも一つの基準に関して非対称的である、態様34記載の物品。態様36前記コンピューティング上の基準が機能上の基準である、態様35記載の物品。態様37前記コンピューティング上の基準が電力消費基準である、態様35記載の物品。態様38前記機能上の基準が、リング0動作を実行する能力である、態様36記載の物品。態様39前記記憶させる動作を提供する命令が、プロセッサによって実行されたときに、前記作業記述子を、ユーザーが提供したヒントに基づいて前記第一の待ち行列に記憶させる命令をさらに有する;態様34記載の物品。態様40前記スレッドプリミティブが、シュレッド生成プリミティブである、態様31記載の物品。態様41前記スレッドプリミティブが、シュレッド同期プリミティブである、態様31記載の物品。態様42前記スレッドプリミティブが、業界標準準拠のアプリケーションプログラマインターフェースの一部である、態様31記載の物品。