(57)【要約】【課題】マイクロコントローラのマルチスレッド性能の特性を向上させ、マイクロコントローラ用ソフトウェアコードの開発に有用な情報を提供するシステムを提供する。【解決手段】マルチスレッド式マイクロコントローラは、本質的にリアルタイムで、例えば１つまたは２、３のクロックサイクルで、いくつかのマルチスレッドシステムコールを実行するように構成されたスレッド制御ハードウェア（論理）を有するスレッド制御ユニットを含む。システムコールは、ミューテックスロック、待機条件、および信号命令とを含むことができる。スレッドコントローラは、マルチスレッドシステムコールの実行に用いられるいくつかのスレッド状態、ミューテックス、および条件変数レジスタを含む。スレッドは、空き、実行、作動可能および待機を含むいくつかの状態間を移行することができる。【選択図】図４
2008522290.tif 000002
【特許請求の範囲】
【請求項１】
複数のスレッドに対応する複数のスレッド状態を記憶するスレッド状態レジスタのセットを含む特殊用途のマルチスレッドレジスタのセットと、
前記マルチスレッドレジスタのセットに接続されたスレッド制御論理であって、前記スレッド状態レジスタのセットに接続され、前記複数のスレッドに対しスレッド状態移行を制御するように構成されたスレッド状態移行論理、および前記スレッド状態レジスタのセットに接続され、マルチスレッドシステムコール機械コード命令のセットを実行するように構成されたスレッド命令実行論理を有するスレッド制御論理と
を備えたことを特徴とするマルチスレッド式マイクロコントローラ。
【請求項２】
前記マルチスレッドレジスタのセットが、複数のスレッドレジスタのセットをさらに含み、
各スレッドレジスタのセットが、前記複数のスレッドうちのスレッドに対応し、
前記各スレッドレジスタのセットが、前記スレッドの優先順位を識別するスレッド優先順位フィールドを有すること
を特徴とする請求項１に記載のマルチスレッド式マイクロコントローラ。
【請求項３】
前記各スレッドレジスタのセットが、前記スレッドによりロックされているミューテックスを識別するミューテックスフィールドを有することを特徴とする請求項２に記載のマルチスレッド式マイクロコントローラ。
【請求項４】
前記各スレッドレジスタのセットが、前記スレッドが待っている条件変数を識別する条件変数フィールドを有することを特徴とする請求項２に記載のマルチスレッド式マイクロコントローラ。
【請求項５】
前記マルチスレッドレジスタのセットが、マイクロコントローラ主要状態レジスタをさらに含み、
このマイクロコントローラ主要状態レジスタが、
前記システムスレッドへのエントリを生じさせた事象のタイプを識別するコールコードフィールドと、
前記システムスレッドへの前記エントリを生じさせる呼出しスレッドを識別する呼出しスレッド識別フィールドと
を有することを特徴とする請求項１に記載のマルチスレッド式マイクロコントローラ。
【請求項６】
前記マイクロコントローラ主要状態レジスタが、前記システムスレッドへの前記エントリを生じさせた前記事象に対するオプコードを識別するトラップコードフィールドをさらに有することを特徴とする請求項５に記載のマルチスレッド式マイクロコントローラ。
【請求項７】
前記マルチスレッドレジスタのセットが、複数のミューテックスに対応する複数のミューテックス状態を記憶する複数のミューテックスレジスタを有することを特徴とする請求項１に記載のマルチスレッド式マイクロコントローラ。
【請求項８】
前記マルチスレッドレジスタのセットが、複数の条件変数に対応する複数の条件変数状態を記憶する複数の条件変数レジスタを有することを特徴とする請求項１に記載のマルチスレッド式マイクロコントローラ。
【請求項９】
前記スレッド命令実行論理が、ミューテックスロック命令のセットを実行するように構成されたミューテックスロック論理を有することを特徴とする請求項１に記載のマルチスレッド式マイクロコントローラ。
【請求項１０】
前記スレッド命令実行論理が、待機条件命令を実行するように構成された待機条件論理を有することを特徴とする請求項１に記載のマルチスレッド式マイクロコントローラ。
【請求項１１】
前記スレッド命令実行論理が、条件信号命令を実行するように構成された条件信号論理を有することを特徴とする請求項１に記載のマルチスレッド式マイクロコントローラ。
【請求項１２】
前記マルチスレッドレジスタのセットに接続され、前記複数のスレッド状態および対応する複数のスレッド優先順位に基づいて実行する前記複数のスレッドのスケジュールをするように構成されたスレッドスケジューリング論理をさらに有することを特徴とする請求項１に記載のマルチスレッド式マイクロコントローラ。
【請求項１３】
前記マルチスレッドレジスタのセットが、前記マルチスレッドシステムコール機械コード命令のセットに対応するスレッドハードウェア実行マスクを記憶するように構成されたスレッドハードウェア実行マスクレジスタをさらに含み、前記スレッドハードウェア実行マスクは、前記スレッド命令実行論理によりハードウェア上で実行されるべきマルチスレッドシステムコール命令のサブセット、およびシステムスレッドによりソフトウェア上で実行されるべきマルチスレッドシステムコール命令のサブセットを識別することを特徴とする請求項１に記載のマルチスレッド式マイクロコントローラ。
【請求項１４】
前記スレッド制御論理に接続され、前記複数のスレッドに対する機械コード命令のセットを受け取るように構成された命令取り込みユニットをさらに有し、前記機械コード命令のセットが、演算および論理命令のセット、ならびに前記マルチスレッドシステムコール命令のセットを含むことを特徴とする請求項１に記載のマルチスレッド式マイクロコントローラ。
【請求項１５】
複数のスレッドに対する機械コード命令のセットを受け取るように構成され、前記命令のセットが演算および論理命令のセット、ならびにマルチスレッドシステムコール命令のセットを含むものである、命令取り込みユニットと、
前記命令取り込みユニットに接続され、前記演算および論理命令のセットを受け取り実行するように構成された演算論理ユニットと、
前記命令取り込みユニットおよび前記演算論理ユニットに接続され、前記マルチスレッドシステムコール命令のセットを受け取り実行するように構成されたハードウェアスレッドコントローラと
を備えたマルチスレッド式マイクロコントローラ。
【請求項１６】
前記マルチスレッドシステムコールのセットがミューテックスロック命令を有し、前記スレッド制御論理が前記ミューテックスロック命令を実行するように構成されたミューテックスロック実行論理を有することを特徴とする請求項１５に記載のマルチスレッド式マイクロコントローラ。
【請求項１７】
前記マルチスレッドシステムコールのセットが待機条件命令を有し、前記スレッド制御論理が前記待機条件命令を実行するように構成された待機条件実行論理を有することを特徴とする請求項１５に記載のマルチスレッド式マイクロコントローラ。
【請求項１８】
前記マルチスレッドシステムコールのセットが条件信号命令を有し、前記スレッド制御論理が前記条件信号命令を実行するように構成された条件信号実行論理を有することを特徴とする請求項１５に記載のマルチスレッド式マイクロコントローラ。
【請求項１９】
複数のスレッドを実行するように構成されたマルチスレッド式命令実行ユニットと、
前記マルチスレッド式命令実行ユニットに接続されたハードウェアスレッドプロファイラとを備え、
前記スレッドプロファイラが、
前記複数のスレッドに対するスレッドプロファイリングデータを収集するように構成され、前記スレッドプロファイリングデータが、スレッド状態移行カウント、およびスレッド状態のセットにおいてスレッドが費やした時間から選択されたデータを少なくとも１つ有するスレッドプロファイリング論理と、
前記スレッドプロファイリング論理に接続され、前記スレッドプロファイリングデータを記憶するスレッドプロファイリングレジスタのセットと
を含むことを特徴とするデータ処理装置。
【請求項２０】
前記スレッドプロファイリングデータが、状態移行カウントのセットを含むことを特徴とする請求項１９に記載のデータ処理装置。
【請求項２１】
前記スレッドプロファイリングデータが、前記スレッド状態のセットにおける前記スレッドが費やした前記時間を含むことを特徴とする請求項１９に記載のデータ処理装置。
【請求項２２】
前記スレッドプロファイリングデータが、スレッド優先順位上昇カウントのセットを含むことを特徴とする請求項１９に記載のデータ処理装置。
【請求項２３】
前記スレッドプロファイリングデータが、待機状態カウントのセットを含むことを特徴とする請求項１９に記載のデータ処理装置。
【請求項２４】
前記スレッドプロファイラが、
前記複数のスレッドに対する実行プロファイリングデータを収集するように構成されたスレッド実行プロファイリングユニットのセットと、
前記複数のスレッドに対する待機プロファイリングデータを収集するように構成されたスレッド待機プロファイリングユニットのセットと
を有することを特徴とする請求項１９に記載のデータ処理装置。
【請求項２５】
対応している複数のスレッドに対し複数のスレッド状態を記憶するスレッド状態レジスタのセットと、対応している複数のミューテックスに対し複数のミューテックス状態を記憶するミューテックス状態レジスタのセットと、対応している複数の条件変数に対し複数の条件変数状態を記憶する条件変数レジスタのセットとを含む特殊用途マルチスレッドレジスタのセットと、
前記マルチスレッドレジスタのセットに接続されたスレッド制御論理であって、前記スレッド状態レジスタのセットに接続され、前記複数のスレッドに対しスレッド状態移行を制御するように構成されたスレッド状態移行論理と、前記スレッド状態移行論理に接続され、マルチスレッドシステムコール機械コード命令のセットを実行するように構成されたスレッド命令実行論理とを有するスレッド制御論理とを備え、
前記スレッド命令実行論理が、
前記ミューテックスレジスタのセットに接続され、前記ミューテックス状態のセットによってミューテックスロック命令のセットを実行するように構成されたミューテックスロック論理と、
前記ミューテックスレジスタのセットに接続され、前記ミューテックス状態のセットおよび前記条件変数状態のセットによって待機条件命令を実行するように構成された待機条件論理と
を有するデータ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般に、データ処理システムおよび方法、特にマルチスレッド式データ処理システムおよび方法に関するものである。
【背景技術】
【０００２】
本出願は、「ハードウェアマルチスレッドシステムおよび方法」と題された、２００４年１１月２４日に出願された米国特許出願番号第１０／９９６，６９１号の優先権を主張するものである。
マルチスレッド式システムでは、アプリケーションまたは処理は、多重スレッドに再分割される。中央演算処理装置（ＣＰＵ）が異なるスレッド間で高速に切り換わることで、スレッドが並行して実行されているという錯覚を引き起こす。各スレッドは一般的にスレッド自体のプログラムカウンタ、スタックおよびスレッド状態を有する。
【０００３】
スレッドは大抵の場合メモリ領域等のリソースを共用する。共用リソースにアクセスする際のスレッド間競合を防ぐために、マルチスレッド式システムは、ミューテックス、つまり相互排除オブジェクトを用いる。ミューテックスは、ロックおよびロック解除が可能な共用リソースである。スレッドはミューテックスをロックし、共用領域のデータにアクセスし、共用領域にアクセスする必要がなくなればミューテックスのロックを解除する。第２スレッドは共用領域にアクセスする前に最初のスレッドがミューテックスのロックを解除するのを待たなければならない。
【０００４】
スレッドはまた大抵の場合相互に通信する必要がある。例えば、あるスレッドは、別のスレッドで作成されたデータを消費するもの（コンシューマ）かもしれない。作成（プロデューサ）スレッドは、データが消費（コンシューマ）スレッドに対して利用可能となった際に消費スレッドに信号を送らなければならないことがある。逆に、消費スレッドが、これ以上のデータを受け取れない場合、作成スレッドに信号を送らなければならないこともある。スレッド間の通信は条件変数を用いて実現できる。条件変数は、別のスレッドに依存する条件が満たされるまで、当該スレッド自体を待機させるために用いられる。例えば作成スレッドが、出力バッファがいっぱいで継続できないと認識すると、待機条件命令を実行し、スレッドの実行を一時停止させる。条件が満たされた場合、例えば、作成スレッドの出力バッファがいっぱいでなくなった場合に、消費スレッド等の別のプロセスが、作成スレッドが待機している条件変数に対する信号命令を実行することにより、作成スレッドの待機を解除させることができる。
【特許文献１】米国特許第６,１４５，０７３号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ミューテックスロック、待機条件および信号等のスレッド管理関数は、マルチスレッドシステムコールである。マルチスレッドシステムコールは通常、比較的複雑な手順である。汎用ＣＰＵ上で実行されている従来のオペレーティングシステムにおいて、高水準言語マルチスレッドシステムコールは、比較的多数（例えば数百または数千）の機械コード命令に変換することができる。
【課題を解決するための手段】
【０００６】
１つの局面によると、本発明は、特殊用途のマルチスレッドレジスタのセットと、前記マルチスレッドレジスタのセットに接続されたスレッド制御論理とを備えたマルチスレッド式マイクロコントローラを提供する。前記マルチスレッドレジスタのセットは、複数のスレッドに対応する複数のスレッド状態を記憶するスレッド状態レジスタのセットを含む。前記スレッド制御論理は、前記スレッド状態レジスタのセットに接続され、前記複数のスレッドに対しスレッド状態移行を制御するように構成されたスレッド状態移行論理と、前記スレッド状態移行論理に接続され、マルチスレッドシステムコール機械コード命令のセットを実行するように構成されたスレッド命令実行論理とを有する。マルチスレッドシステムコール命令は、スレッド間通信およびスレッド管理に用いられる待機条件、信号およびミューテックスロック命令を含む。
【０００７】
別の局面によると、本発明は、命令取り込みユニットと、前記命令取り込みユニットに接続された演算論理ユニットと、前記命令取り込みユニットおよび前記演算論理ユニットに接続されたハードウェアスレッドコントローラとを備えたマルチスレッド式マイクロコントローラを提供する。前記命令取り込みユニットは、複数のスレッドに対する機械コード命令のセットを受け取るように構成されている。前記命令のセットとは、演算および論理命令のセット、およびマルチスレッドシステムコール命令のセットを含む。前記演算論理ユニットは、前記演算および論理命令のセットを受け取り実行するように構成されている。前記ハードウェアスレッドコントローラは、前記マルチスレッドシステムコール命令のセットを受け取り実行するように構成されている。
【０００８】
別の局面によると、本発明は、チップ上に集積された複数の特殊用途のハードウェアコアと、チップ上に集積され前記複数のコアに接続されたマルチスレッド式マイクロコントローラとを備えたデータ処理システムを提供する。前記複数のコアは、少なくとも１つの映像コード化（エンコーディング（符号化）／デコーディング（復号化））コア、および少なくとも１つの音声コード化コアを含む。前記マイクロコントローラは、少なくとも１つの映像コード化スレッドおよび少なくとも１つの音声コード化スレッドを含む複数のスレッドを制御する。前記マルチスレッド式マイクロコントローラは、複数のスレッドに対し複数のスレッド状態を記憶するスレッド状態レジスタのセットと、前記マルチスレッドレジスタのセットに接続されたスレッド制御論理を含む特殊用途のマルチスレッドレジスタのセットとを含む。前記スレッド制御論理は、前記スレッド状態レジスタのセットに接続され、前記複数のスレッドに対しスレッド状態移行を制御するように構成されたスレッド状態移行論理と、前記スレッド状態移行論理に接続され、マルチスレッドシステムコール機械コード命令のセットを実行するように構成されたスレッド命令実行論理とを有する。
【０００９】
別の局面によると本発明は、複数のスレッドを実行するように構成されたマルチスレッド式実行ユニットと、前記マルチスレッド式実行ユニットに接続されたハードウェアスレッドプロファイラとを有するデータ処理装置を提供する。前記スレッドプロファイラは、前記複数のスレッドに対するスレッドプロファイリングデータを収集するように構成されたスレッドプロファイリング論理と、前記スレッドプロファイリングデータを記憶するスレッドプロファイリングレジスタのセットとを有する。前記スレッドプロファイリングデータは、スレッド状態移行カウント、およびスレッド状態のセットにおいてスレッドが費やした時間から選択されたデータを含む。
【００１０】
前述の本発明の観点および効果は、以下の詳細な説明を読み、図面を参照することにより、よりよく理解されるであろう。
【発明を実施するための最良の形態】
【００１１】
以下の説明において、記載された構造間の接続はいずれも直接接続であってもよく、中間構造を介した間接接続であってもよいと理解される。要素のセットは、１つ以上の要素を含む。要素についての記載はいずれも、少なくとも１つの要素に言及するものであると考えられる。「論理」という用語は、特殊用途ハードウェアを意味する。マルチスレッドシステムコール機械コード（語）命令は、その実行が結果としてマルチスレッドシステムコールの機能の実現となる機械コード命令であると考えられる。他に特に要求がない限り、記述された方法ステップはいずれも、必ずしも特に図示された順番で実施されなくてもよい。別段の定めがない限り、「ミューテックスロック命令」という用語は、ミューテックスのロック失敗時にスレッドがその実行を一時停止するミューテックスロック追求命令、ミューテックスのロック失敗時にスレッドがその実行を一時停止しないミューテックス検証命令、およびミューテックスロック解除命令を含む。別段の定めがない限り、「レジスタ」という用語は、レジスタ一式の一部を形成するレジスタフィールドだけでなく独立型（スタンドアロン）のレジスタ一式を含み、記載されたレジスタはいずれも、独立型のレジスタ一式として、またはより大きなレジスタ内のフィールドとして提供することができる。
【００１２】
以下の説明では、本発明の実施形態を一例として示すものであり、必ずしも限定するものではない。
図１は、本発明の実施形態による例示的なデータ処理システム１０を介したデータの流れを示している。図１の構成は、特定のアプリケーションではなく、むしろ総体的原理を図示する目的で示されている。データ処理システム１０によって実現される処理の機能性は、特殊用途ハードウェアコア（モジュール、機能ブロック）のセット１２ａ，１２ｂと、ソフトウェアによってプログラム可能な１つ以上のプロセッサとに分割されている。図１において、このようなプログラム可能なプロセッサが２つ示されている。すなわち、マルチスレッド式マイクロコントローラユニット（ＭＭＵ）２６、およびデジタル信号プロセッサ（ＤＳＰ）１６である。ＭＭＵ２６は、いくつかのスレッド１８ａ〜１８ｃを実現し、１つ以上のソフトウェア処理の一部を形成してもよい。ＤＳＰ１６は、ソフトウェア上で１つ以上の処理（例えば映像処理または音声処理アルゴリズム）を実現する。ハードウェアコア１２ａ，１２ｂは、ハードウェアに所望される機能を実現する。
【００１３】
図１に示す例示的なデータ処理システム１０において、入力データストリームは、コア１２ａ，１２ｂおよびＤＳＰ１６によって受け取られる。ＭＭＵ２６は、コア１２ａおよびＤＳＰ１６から受け取る処理結果に基づいて作動する。コア１２ｂは、ＭＭＵ２６から受け取る処理結果に基づいてさらに作動する。図示された構成において、コア１２ｂ、ＭＭＵ２６およびＤＳＰ１６はそれぞれシステム１０の出力データストリームのうち１つを生成する。いくつかの実施形態において、ＭＭＵ２６は制御パス（制御スレッド）を実現するために用いてもよく、一方コア１２ａ，１２ｂ等の専用ハードウェアブロックが計算集約型データパスを実現するのに用いられる。いくつかの実施形態において、コア１２ａ，１２ｂ、ＭＭＵ２６および／またはＤＳＰ１６は上記特許文献１「データフロー集積回路アーキテクチャ」において記述されるように相互接続されてもよい。
【００１４】
図１に示すハードウェア／ソフトウェア分割は、アプリケーションをいくつかの処理に分割し、各処理をスレッドに分割し、各スレッドをハードウェア（例えばコア１２ａ，１２ｂのいずれか）、またはソフトウェア（例えばＭＭＵ２６またはＤＳＰ１６）上で実現するよう割り当てることによって行うことができる。映像／音声コード化（エンコーディング（符号化）／デコーディング（復号化））アプリケーションにおいて、スレッドの例としては、映像、音声、同期、バッファ制御、システム多重分離、およびアプリケーションのスレッドが含まれる。ＭＭＵ２６によって実行されるスレッドは、以下に詳細に記述するいくつかの機構を用いることで相互に通信することができる。
【００１５】
図２は、本発明のある実施形態による例示的なデータ処理システム２０の構造の概略図を示す。システム２０の構造は、図１で図示するようなデータフローを実現するのに用いることができる。システム２０は、特に、外部（チップ外）メモリに接続された外部メモリインターフェース２２、メモリインターフェース２２に接続された命令キャッシュ（Ｉ‐キャッシュ）２４、Ｉ‐キャッシュ２４に接続されたマルチスレッド式マイクロコントローラユニット（ＭＭＵ）２６、ＭＭＵ２６に接続された汎用レジスタファイル３０、およびＭＭＵ２６に接続されたリアルタイム割り込みユニット３２を含む。ＭＭＵ２６は、さらにデータスイッチ３６を介してシステム２０の多くの他の機能ブロックに接続されている。具体的には、データスイッチ３６はＤＭＡエンジン３８、データキャッシュ（Ｄ‐キャッシュ）４０、ローカルメモリコントローラ４４、および複数の入出力ストリームコントローラ４６に接続されている。各ストリームコントローラ４６は、入力または出力データストリームを制御する。例示的なアプリケーションにおいて、このようなデータストリームは、映像および音声データストリームを含む。ストリームコントローラ４６は、さらに１つ以上の特殊用途ハードウェアコアに接続されている。データスイッチ３６は、１つ以上の特殊用途ハードウェアコアおよび／または他のマルチスレッド式マイクロコントローラユニットにも接続することができる。ＤＭＡエンジン３８およびデータキャッシュ４０は、さらに外部メモリインターフェース２２に接続され、一方、ローカルメモリコントローラ４４はローカルメモリに接続されている。
【００１６】
システム２０などのデータ処理システムは、多重ＭＭＵ２６を含むことができる。このような多重ＭＭＵのセットは、クライアントからは大多数のスレッドをサポートする単一の大域ＭＭＵとしてとらえられ、また総体的にその機能を有することができる。ある実施形態において、多重ＭＭＵは、データスイッチ３６を介して相互接続することができる。他の実施形態において、多重ＭＭＵはメモリを介して、またはデイジーチェーン（継続）方式での連結設計を用いることで相互接続することができる。
【００１７】
汎用レジスタファイル３０は複数のレジスタセットを含み、各レジスタセットはそれぞれ複数のスレッドの１つに対応している。ある実施形態において、各汎用レジスタセットはアキュムレータ、代替アキュムレータ、戻り値レジスタ、引数レジスタ、関数呼出し中に保存されない一時レジスタ、関数呼出し中に保存される保存レジスタ、インデックス付きの読み込みおよび命令の記憶に用いることができるベース（基準）レジスタ、ならびに呼出しに続く命令のアドレスを保存するために呼出し命令によって用いられる戻りアドレスレジスタを含む。ベースレジスタのうちの１つをスタックポインタとして用いることができる。ある実施形態において、以下に記述する多くのマルチスレッドシステムコールは、１つ以上の引数レジスタにおける引数および戻り値を取り出す。
【００１８】
ＭＭＵ２６は、実行パイプライン５０、特殊用途マルチスレッドレジスタのセット５２、およびスレッドコントローラ５４を含む。スレッドコントローラ５４および特殊用途レジスタ５２は、スレッド制御ユニット７２を形成すると考えられ、特殊用途レジスタも、スレッドコントローラ５４の一部を形成すると考えられる。実行パイプライン５０は、Ｉ‐キャッシュ２４、データスイッチ３６、および汎用レジスタファイル３０に接続されている。特殊用途レジスタ５２は、実行パイプライン５０およびスレッドコントローラ５４に接続されている。スレッドコントローラ５４は、実行パイプライン５０、特殊用途レジスタ５２、およびリアルタイム割り込みユニット３２に接続されている。
【００１９】
データ処理システム２０の作動中に、機械コード命令のセットは、メモリインターフェース２２からＩ‐キャッシュ２４へ、そしてそこから実行パイプライン５０へと順次取り込まれる。機械コード命令のセットは、読み込み、記憶および直接メモリアクセス（ＤＭＡ）命令を含むＲＩＳＣ（縮小命令セットコンピュータ）命令セットであってもよい。機械コード命令のセットは、また、以下に詳細に記述するマルチスレッドシステムコール命令のセットを含んでもよい。このようなマルチスレッドシステムコール機械コード命令は、例えばミューテックス（相互排除）および条件変数命令を含む。ミューテックス命令は、共用リソース（ミューテックス）に異なるスレッドがアクセスすることを制御する役割を果たす。条件変数命令は、１つのスレッドの実行に対して他のスレッドの実行を条件とする。
【００２０】
実行パイプライン５０は、図３を参照して以下に記述するように、取り込まれた命令をの大部分を直接実行する。従来の機械コード命令の実行には、外部メモリから汎用レジスタファイル３０へのデータ読み込み、汎用レジスタファイル３０から外部メモリへのデータ記憶、１つ以上の演算論理ユニット（ＡＬＵ）を用いたデータに対する演算および論理操作の実行、およびＤＭＡエンジン３８を介した外部機能ブロックとメモリとの間の直接メモリアクセス（ＤＭＡ）接続の確立を含むことができる。ある実施形態において、あるマルチスレッドシステムコール命令は、以下に記述するシステムスレッドを用いてソフトウェア上で実行させることができ、一方他の命令は、スレッドコントローラ５４を用いてハードウェア上で実行される。スレッドコントローラ５４は、マルチスレッドシステムコール命令を実行し、一般的にスレッド状態およびスレッド状態移行を管理する。スレッドコントローラ５４は、少なくともあるマルチスレッドシステムコール命令を本質的にリアルタイム、すなわち１つまたは２、３のクロックサイクルで、実施するように構成される論理を含んでいる。好ましくは、スレッドコントローラ５４は特権を有するシステムスレッド、および複数の処理（アプリケーション）スレッドに対応する。システムスレッドは、あるシステムコールおよび明らかに他のスレッドに割り当てられていない運用例外、信号、および割り込みを実行するために用いられる。
【００２１】
データスイッチ３６は、データスイッチ３６に接続されている種々の機能ブロック、すなわちＭＭＵ２６、ＤＭＡエンジン３８、データキャッシュ４０、ＬＭＣ４４およびストリームコントローラ４６の間で相互方向にデータ転送をする。具体的には、ＭＭＵ２６はデータスイッチ３６を介して外部メモリインターフェース２２にアクセスする。ある実施形態において、データスイッチ３６は、いくつかのＤＭＡ作動と同時の読み書き作動に対応する。ＤＭＡエンジン３８は、外部メモリＤＭＡコントローラとしての役割を果たし、外部メモリとの間で相互方向のＤＭＡ転送に対応する。ＬＭＣ４４は局部記憶装置（ローカル・ストレージ）として用いられるローカルメモリを制御し、ローカルメモリに対する読み書きおよびＤＭＡ作動に対応する。各ストリームコントローラ４６は、対応する入力または出力データストリームを制御する。ある実施形態において、各ストリームコントローラ４６は、ＭＭＵ２６によって事実上メモリアドレス範囲と見なされる。ある実施形態において、ストリームコントローラ４６に対して、それぞれのコントローラが対応するビットストリームを走査して特定のビットシーケンス（例えばＤＭＡ転送に割り込むシーケンス）を探し、状態情報をＭＭＵ２６に伝えるよう命令を与えることができる。
【００２２】
図３は、本発明のある実施形態による実行パイプラインの概略図を示している。実行パイプライン５０は、順番に接続された複数のステージまたはユニット、すなわち命令取り込みステージ６０、命令デコーディングステージ６２、実行ステージ６４、メモリ書き込みステージ６６およびレジスタライトバック（書き込み）ステージ６８を含む。命令取り込みステージ６０は、Ｉ‐キャッシュ２４から新しい命令を取り込む（図２に示す）。実行ステージ６４は１つ以上の演算論理ユニット（ＡＬＵ）６５を含む。ＡＬＵ６５は、演算、論理、乗算、クリップ、およびビット操作命令、とりわけビット単位での論理積、論理和、加算、減算、乗算および左シフト等の命令を実行することができる。命令の取り込みが失敗した場合、命令取り込みステージ６０はスレッドコントローラ５４にＩ‐キャッシュ失敗信号を伝送する。この命令は、命令デコーディングステージ６２に伝送される（図３に示す）。命令デコーディングステージ６２は命令をデコード（復号）し、デコーディング結果を実行ステージ６４に伝送する。実行ステージ６４は命令自体を実行するか、または、ハードウェア対応のマルチスレッドシステムコール等の命令に対してはスレッドコントローラ５４等の外部機能ブロックによって命令を実行させるよう指示する（図２に示す）。ハードウェア対応マルチスレッドシステムコールは、デコーディングステージ６２からスレッドコントローラ５４に直接送ることもできる。実行ステージ６４は、実行結果をメモリ書き込みステージ６６に伝送し、メモリ書き込みステージはメモリに実行結果を書き込む。メモリへの書き込みが失敗した場合、メモリ書き込みステージ６６はスレッドコントローラ５４にＤ‐キャッシュ失敗信号を伝送する。レジスタライトバックステージ６８は、汎用レジスタファイル３０の内容を更新する（図２に示す）。
【００２３】
図４は、本発明のある実施形態によるスレッドコントローラ５４および特殊用途レジスタ５２で形成される制御ユニット７２の構造の概略図を示す。特殊用途レジスタ５２は、マルチスレッドシステムコールを実行し、スレッドを切り換えるのに必要とされるスレッド状態情報のすべてを含む。スレッドコントローラ５４は、外部メモリでなく、むしろ局所的（ローカル）に、特殊用途レジスタ５２でスレッド切り換えに必要とされるスレッド状態情報にアクセスすることができる。スレッドコントローラ５４は、スレッド命令実行ユニット８６、スレッド占有割り当て制御ユニット８８、スレッド状態移行コントローラ９０、キャッシュスラッシング防止ユニット９２、スレッドスケジューラ９４、およびハードウェアスレッドプロファイラ９６を含む。スレッド命令実行ユニット８６、スレッド状態移行コントローラ９０、およびキャッシュスラッシング防止ユニット９２は、特殊用途レジスタ５２に接続され、特殊用途レジスタ５２との間で相互にスレッド状態データを読み出しかつ／または更新することが可能である。図３に示す実行パイプラインステージは、図４において矢印が示すＩＦ、ＤＥＣ、ＥＸ、ＭＥＭ、およびＷＢにより図示されるように、スレッドコントローラ５４の種々の機能ブロックと通信することが可能である。スレッドプロファイラ９６は、特殊用途レジスタ５２およびスレッドコントローラ５４の他の機能ブロックに接続されている。
【００２４】
スレッド命令実行ユニット８６は、以下に詳細に記述するように、ミューテックスロック命令および条件変数命令等のマルチスレッドシステムコールを受け取り実行するように構成された特殊用途ハードウェア（論理）を含む。ある実施形態において、このようなマルチスレッドシステムコールは、待機割り込み（waitint）、待機条件（waitcond）、信号（signal）、信号同報（signalbc）、およびミューテックスロックおよびロック解除命令（lock、trylockおよびunlock）を含む。マルチスレッドシステムコールは、図３に示すデコーディング（ＤＥＣ）ステージ６２から受け取られる。ある実施形態において、スレッド命令実行ユニット８６は、リアルタイム割り込み（rti）、非同期割り込み（asi）、およびプロファイリングオン／オフ（profon、profoff）命令も実行する。スレッド命令実行ユニット８６は、スレッド状態移行コントローラ９０に対し、スレッド状態移行コントローラ９０が実施するスレッド状態移行を識別する信号を伝送する。スレッド命令実行ユニット８６は、スレッド状態移行コントローラ９０に対し、特定のスレッドが特定のスレッド状態に移行されるように指定する信号を送る。例えば、スレッド＃１２では、以下に記述するThread_Wait_Mutex状態に移行することとなる。命令実行ユニット８６は、スレッド優先順位も割り当て、特殊用途レジスタ５２で保持されるスレッド優先順位データを更新する。
【００２５】
スレッド占有割り当て制御ユニット８８は、スレッド命令実行ユニット８６から現在実行している命令の識別子を受け取り、命令失敗信号、データ失敗信号、およびＤＭＡ信号をそれぞれ命令取り込みステージ６０、メモリ書き込みステージ６４、およびデコーディングステージ６２から受け取る。スレッド占有割り当て制御ユニット８８は、あるスレッドの移行が占有割り当てされるべきことを示すスレッド占有割り当て制御信号を生成し、スレッド状態移行コントローラ９０に伝送するように構成された占有割り当て制御論理を含む。占有割り当てされた場合、処理スレッドはシステムスレッドに、または別の処理スレッドに取って代わられる。ある実施形態において、トラップ命令の実行時に処理スレッドが例外を生じた場合、システムスレッドに割り当てられたリアルタイム割り込みまたは非同期割り込みを受け取った場合、割り当てされていない非同期割り込み、ハードウェアのソフトリセット、もしくはマスク不可能割り込みを受け取った場合、またはデバッグモジュールがブレークポイント信号を送った場合において、処理スレッドはシステムスレッドに取って代わられる。ある実施形態において、Ｉ‐キャッシュまたはメモリ区画の機能停止により一時停止された場合、ＤＭＡ命令実行時、別のスレッドによってロックされたミューテックスに対してミューテックスロック命令を実行した場合、待ち事象が利用可能でない際に待機命令を実行した場合、または優先順位のより高いスレッドが以下に記述するThread_Rdy状態にある場合、処理スレッドは別の処理スレッドに取って代わられる。
【００２６】
キャッシュスラッシング防止ユニット９２は、キャッシュのスラッシングを検出するように構成された論理を含み、キャッシュのスラッシングを検出した場合にはスレッドの優先順位をハイレベルにし、かつ別の（優先順位のより低い）スレッドを抑止する。キャッシュのスラッシングは、キャッシュ失敗率が高くなりすぎ、キャッシュがキャッシュ失敗への対処に望ましくないほど長時間を費やす場合に発生する。キャッシュのスラッシングは、よくアクセスされるデータがキャッシュ内における当該データ用の領域以上を占める場合に起こることがある。例えば、２つ以上のスレッドがキャッシュ内の同位置を用い、その位置に対して頻繁に交互に書き込む場合、システムは頻繁なスレッド占有割り当てまたはデッドロックを生じかねない。
【００２７】
スレッドスケジューラ９４は、特殊用途レジスタ５２に記憶されているスレッド状態および優先順位データにアクセスし、どのスレッドを実行することとなるか（例えばどのスレッドが現在最も優先順位が高いか）を示す信号を実行パイプライン５０に伝送するように構成されたスケジューリング論理を含む。ある実施形態において、スレッドスケジューラ９４によって実施されるスケジューリング処理は、どのスレッドがThread_Rdy状態にあるかを調べること、最も優先順位の高いThread_Rdyスレッド（例えば優先順位番号が最も小さいスレッド）を選択すること、選択されたスレッドの優先順位と現在実行中のスレッド（状態がThread_Runであるスレッド）があればその優先順位とを比較すること、および実行する優先順位が最も高いスレッドを選択することを含む。スレッドスケジューラ９４は、特殊用途レジスタ５２のThStateフィールドおよびCurrThPriフィールド（以下に記述）をモニタし、次にスケジュールするスレッドとともにNextThreadIdレジスタフィールドを保持する。NextThreadIdレジスタは、クロックサイクル毎に１つのスケジューリング作動を実施するのを容易にするキャッシュ機構を提供する。
【００２８】
スレッドプロファイラ９６（図４に示す）は、ＭＭＵ２６の種々の機能ブロックからスレッド監視データを受け取るように構成されているスレッドプロファイリング論理を含む。スレッド監視データは、スレッド移行統計およびソフトウェアの開発中に利用可能な他のマルチスレッド性能特性を含むことができる。スレッドプロファイラ９６は、ＭＭＵ２６上で実行されるソフトウェアを最適化するために有用である。
【００２９】
ある実施形態において、特殊用途レジスタ５２は、大域（グローバル）スレッドレジスタ７４のセット、特定スレッド用レジスタ７６のセット、スレッドプロファイリングレジスタ７８のセット、ミューテックス（相互排除）レジスタ８０のセット、および条件変数レジスタ８２のセットを含む。これらのレジスタは、メモリマップされ、読み込み命令を経て全スレッドに対して利用可能にされる。ある実施形態において、レジスタの内容は、システムスレッドおよびスレッドコントローラ５４によって変更することができるが、処理スレッドでは変更できないようになっている。特殊用途レジスタ５２に対し処理スレッドによって実行される記憶は、結果として例外扱いになる。
【００３０】
表１は、本発明のある実施形態による例示的な３２ビットアーキテクチャに関する、いくつかの特殊用途レジスタ５２用構成パラメータおよび構成パラメータに関連する値の範囲を記載している。表１の構成パラメータは、とりわけスレッド、ミューテックス、および条件変数レジスタに関連する数値を判定する。表１の構成パラメータは、以下の特殊用途レジスタ５２の詳細な記述から、よりよく理解されることができる。
【００３１】
【表１】
2008522290.tif 000003
【００３２】
ある実施形態において、大域スレッドレジスタ７４は、構成レジスタのセット、トラップハードウェア実行（ＴＨＸ）レジスタ、主要状態レジスタ、ミューテックスロックレジスタ、リアルタイム割り込み状態レジスタ、および非同期割り込み状態レジスタを含んでいる。図５‐Ａは、本発明のある実施形態による２つの構成レジスタ７４ａ，７４ａ´の例示的なセットを示す。以下のレジスタ図の上段はビット数（３２ビットレジスタに対し０〜３１）を記載し、一方下段は例示的なレジスタ内容またはフィールド名を記載する。構成レジスタ７４ａ，７４ａ´は、スレッド（ThreadNo）、スレッド優先順位（PriNo）、ミューテックス（MutexNo）、条件変数（CondNo）、リアルタイム割り込み（RTIntNo）、非同期割り込み（AIntNo）、およびＭＡＣ（乗算‐累算）ユニットで対応されるハードウェアスレッド（MACThNo）の最大対応数を含むパラメータを特定するフィールドを含む。ある実施形態において、上述の構成パラメータは、ＭＭＵ２６を設計する際の合成パラメータとして設定される。
【００３３】
別の構成パラメータは、いくつかのトラップ命令のうちのいずれがスレッドコントローラ５４によりハードウェア上で対応されるかを識別するトラップハードウェア実行マスクを含むことができる。トラップハードウェア実行マスクは、以下に記述するスレッドハードウェア実行（ＴＨＸ）レジスタ用のリセット値の役割を果たす。図５‐Ｂは、本発明のある実施形態による例示的なスレッドハードウェア実行（ＴＨＸ）レジスタ７４ｂを示す。ＴＨＸレジスタ７４ｂは、以下に記述するいくつかのトラップ命令のうちのいずれがスレッドコントローラ５４によりハードウェア上で実行され（図２）、いずれがシステムスレッドによりソフトウェア上で実行されるかを設定する。例えば、１に設定されたビットは対応するトラップ命令がスレッドコントローラ５４でハードウェア対応されることを示している。すべてのハードウェア対応トラップ命令がスレッドコントローラ５４によって実行されるように、ＴＨＸレジスタ７４はリセット時にトラップハードウェア実行マスク合成パラメータに初期化される。その後、システムスレッドはソフトウェア上で特定の命令の実行が求められる場合にはＴＨＸビットを１から０に設定し、スレッドコントローラ５４に対し命令の実行を返すためには当該ビットを１にリセットすることができる。
【００３４】
図５‐Ｃは、本発明のある実施形態による例示的なＭＭＵ主要状態レジスタ７４ｃを示している。主要状態レジスタ７４ｃは、エラーフィールドＥ（Err）、分岐遅延フィールドＢ（ＢＤ）、コールコードフィールドCallCd、トラップ／例外コードフィールドTrapEx、コールスレッドＩＤフィールドCallThId、およびプロファイリングフラグＰを含む。エラーフィールドＥは、システムスレッドが例外を生じさせた場合に設定される。コールコードフィールドCallCdは、システムスレッドへのエントリの際に設定されて用いられ、なぜシステムスレッドが起動されたかの理由（例えばソフトリセット、デバッグブレークポイント、例外、トラップタイプまたは割り込みタイプ）を示している。トラップ／例外コードフィールドTrapExは、コールコードフィールドCallCdが書き込まれるたびに更新される。コールコードフィールドがトラップゆえに書き込まれた場合、TrapExフィールドはトラップコードを識別する。コールコードフィールドが例外ゆえに書き込まれた場合、TrapExフィールドは例外のタイプを識別する。分岐遅延フィールドＢも、コールコードフィールドCallCdが書き込まれるたびに更新される。分岐遅延フィールドフラグは、処理（非システム）スレッドが分岐遅延スロットで例外を生じさせた場合、またはブレークポイントが分岐遅延スロット上に信号で送られた場合に設定される。コールスレッドＩＤフィールドCallThIdは、トラップまたは例外を経てシステムスレッドへのエントリを生じさせたスレッドのＩＤである。コールスレッドＩＤフィールドCallThIdは、コールコードフィールドCallCdが書き込まれると更新される。システムスレッドが割り込みのために呼び出された場合、コールスレッドＩＤフィールドCallThIdは、どのスレッドが最新の命令を実行したかを示す。プロファイリングスレッドＰはソフトウェアによって設定されクリアされる。保留（未使用）ビットは、主要状態レジスタ７４ｃに対して実施される読み込みのため無視される（マスクがはずされる）。
【００３５】
図５‐Ｄは、本発明のある実施形態による例示的な大域ミューテックスロックレジスタ７４ｄを示している。ミューテックスロックレジスタ７４ｄは、現在どのミューテックスがロックされているかを識別する。例えば、ミューテックスロックレジスタ７４ｄの各ビットは所与のミューテックスに対応し、そのビットは所存のミューテックスがロックされた場合に所与の値に設定される。図５‐Ｅは、本発明のある実施形態による例示的なリアルタイム割り込み事象レジスタ７４ｅを示している。リアルタイム割り込み事象レジスタ７４ｅは、リアルタイム割り込みがシステムスレッドに割り当てられた場合に、そのリアルタイム割り込みに対応するビットを設定することにより、システムスレッドに割り当てられたリアルタイム割り込み事象のみを記録する。図５‐Ｆは、本発明のある実施形態による例示的な非同期割り込み状態レジスタ７４ｆを示している。非同期割り込み状態レジスタ７４ｆは、非同期割り込みラインの現在の状態を示している。
【００３６】
ある実施形態において、特定スレッド用レジスタ７６は、それぞれスレッドに対応する複数のレジスタ群を含み、各レジスタ群はスレッドステータスレジスタ、スレッド優先順位レジスタ、リアルタイム割り込みマスク、非同期割り込みマスク、プログラムカウンタ、および乗算‐累算コンテキストを含む。
図６‐Ａは、本発明のある実施形態による、それぞれ固有のスレッドに対応する例示的なスレッドステータスレジスタ７６ａのセットを示す。各レジスタ７６ａは、ミューテックス／条件フィールドMutex/Cond、スレッド状態フィールドThState、および図６‐ＡでFlagsと表したフラグフィールドのセットを有する。例示的なフラグは、桁上げ、ネガティブ（負）、オーバーフロー、ゼロ条件、繰り上げ演算、符号付き演算、および固定小数点演算を含む。フラグは実行パイプライン５０（図２）による種々の命令（例えば加算、減算、飛び越し）の実行を調整するのに用いられる。例えば、１６ビットの命令を用い、オペコード数が限られたシステムにおいて、同一のオペコードを符号付き命令および符号なし命令で用いることができ、スレッドステータスレジスタ７６ａの符号付き演算（ＳＡ）フラグが符号付き演算操作と符号なし演算操作とを区別するのに用いられる。フラグは、明示的な命令（例えば繰り上げ演算、符号付き演算、および固定小数点演算のモードフラグ）により設定されクリアされるフラグ、ならびに命令実行中に間接的に設定されるフラグ（例えば繰り上げ、ネガティブ、オーバーフロー、およびゼロ条件フラグ）を含むことができる。
【００３７】
以下に記述するいくつかのマルチスレッドシステムコール命令において重要な２つの特定のフラグは、ゼロ条件フラグＺ、および誘導（演繹）フラグL=SA?(N^V):C（「より少ない」を意味する）であって、ここでＳＡは符号付き演算フラグであり、Ｎは負フラグ、Ｖはオーバーフローフラグ、Ｃは桁上げフラグである。記号「＾」は排他的ＯＲ（ＸＯＲ）演算子を意味し、一方記号「？」および「：」は三項演算子x=a?b:cを意味する。ここでａが真であればｘはｂの値、ａが真でなければｘはｃの値をとる。符号のない演算操作において、誘導フラグＬは繰り上げフラグＣと同一である。符号付き操作において、誘導フラグＬはネガティブフラグＮおよびオーバーフローフラグＶの排他的ＯＲであり、符号付き数値に対し、Ｌフラグは２つの数値のうちどちらがより小さい数値であるかを示している。誘導フラグＬはＳＡ、Ｎ、Ｖおよび／またはＣフラグを適切に設定して間接的に設定されクリアされる。ＣおよびＶフラグをＸに、かつＮフラグを０に設定することによってＬフラグをＸに設定することができる。
【００３８】
ＺおよびＬフラグは以下に記述するいくつかのマルチスレッドシステムコール命令に対する戻り値であり、返された（Ｚ、Ｌ）一組は命令実行のステータス（例えば成功またはエラーのタイプ）を示す。各マルチスレッドシステムコール命令の後に、ＺおよびＬフラグの一方または両方に基づいた引数のセットを有する条件付き飛び越し命令が続き、飛び越し命令はＺおよびＬフラグの一方または両方の数値に基づき実施され、または実施されない。条件付き飛び越し命令は、マルチスレッドシステムコールがＺおよび／またはＬフラグで示される通りにエラーまたは他の条件に直面した場合、エラー処理または他の応答性サブルーチンの実行を始めるのに用いられる。ある実施形態において、条件付き飛び越し命令のセットは、Ｌ（例えばＬ≠０）の場合、引数から導かれアドレスへの飛び越しを生じさせるjump-if-less（jlt）命令、！Ｌ（例えばＬ＝０）の場合飛び越しを生じさせる jump-if-greater-or-equal（jge）命令、（Ｌ｜Ｚ）の場合飛び越しを生じさせるjump-if-less-or-equal（jle）命令、！（Ｌ｜Ｚ）の場合飛び越しを生じさせるjump-if-greater（jgt）命令、Ｚの場合飛び越しを生じさせるjump-if-zero（jz）命令、および！Ｚの場合飛び越しを生じさせるjump-if-non-zero（jnz）命令を含む。
【００３９】
システム状態フィールドThStateは、レジスタに対応するスレッドの現在の状態を反映している。表２は、図９を参照して以下にさらに詳細に説明するいくつかの可能なスレッド状態に対するビット表現の例示的一覧表を示す。
【００４０】
【表２】
2008522290.tif 000004
【００４１】
スレッドの状態がThread_Wait_Mutexの場合、そのスレッドに対するミューテックス／条件フィールドMutex/Condはスレッドが待っているミューテックスを識別する。スレッド状態がThread_Wait_Condの場合、ミューテックス／条件フィールドMutex/Condはスレッドが待っている条件変数を識別する。
図６‐Ｂは、本発明のある実施形態による、それぞれスレッドに対応する例示的なスレッド優先順位レジスタ７６ｂのセットを示している。各スレッド優先順位レジスタ７６ｂは、現在のスレッド優先順位フィールドCurrThPriおよびデフォルトのスレッド優先順位フィールドDefThPriを含む。例えば、記憶された数値が小さければ小さいほど関連スレッドの優先順位は高い。リセット時には、各スレッドは関連づけられたデフォルトの優先順位から始める。場合によって、スレッド命令実行ユニット８６（図４）は、起こり得る優先順位の逆転問題を避けるために、スレッドの優先順位をデフォルトの優先順位の値とは異なる（例えばより高い）現在の優先順位の値に設定する。システムスレッドは、常に最優先順位を有する。上述のように、未使用のビットは確保されており、0に設定することができる。
【００４２】
図６‐Ｃは、本発明のある実施形態による、それぞれスレッドに対応する例示的なリアルタイム割り込みマスク（ＲＴＩＭ）レジスタ７６ｃのセットを示している。ＲＴＩＭレジスタ７６ｃの各ビットは、レジスタの対応するスレッドに割り当てられたリアルタイム割り込みのための割り込み許可ビットである。各ＲＴＩＭレジスタ７６ｃには、（図５‐ＡのRTIntNoフィールドで定義された）リアルタイム割り込みの最大に設定された数値までのいくつかの数のビットだけが書き込み可能である。図６‐Ｄは、本発明のある実施形態による、それぞれスレッドに対応する例示的な非同期割り込みマスク（ＡＩＭ）レジスタ７６ｄのセットを示している。ＡＩＭレジスタ７６ｄの各ビットは、レジスタの対応するスレッドに割り当てられた非同期割り込みのための割り込み許可ビットである。各ＡＩＭレジスタ７６ｄには、（図５‐ＡのAIntNoフィールドで定義された）非同期割り込みの最大に設定された数値までのいくつかの数のビットだけが書き込み可能である。
【００４３】
図６‐Ｅは、本発明のある実施形態による、それぞれスレッドに対応する例示的なスレッドプログラムカウンタ（ＰＣ）レジスタ７６ｅのセットを示している。各ＰＣレジスタ７６ｅは、対応するスレッドに関して取り込まれて次の命令のアドレスを保持している。システムはＰＣレジスタ７６ｅの内容を読み出すことはできるが、修正することはできない。図６‐Ｆは、本発明のある実施形態による、それぞれスレッドに対応する例示的なスレッド乗算‐累算コンテキスト（ＴＭ）レジスタ７６ｆのセットを示している。ＭＭＵ２６が乗算‐累算（ＭＡＣ）ユニットを含む場合、各ＴＭレジスタ７６ｆは乗算‐累算許可フィールドＭおよび乗算‐累算コンテキストMACtxを含む。両フィールドはリセット時に０に初期化される。システムだけがＴＭレジスタ７６ｆに書き込みをする。ＴＭレジスタ７６ｆはＭＡＣコンテキストをスレッドに関連づける役割を果たす。
【００４４】
図７は、本発明のある実施形態による、それぞれミューテックスに対応する例示的なミューテックススレッドロックレジスタ８０のセットを示している。ミューテックスロックレジスタ８０のセットおよび大域ミューテックスロック状態レジスタ７４ｄ（図５‐Ｄ）は、ＭＭＵ２６によって用いられるミューテックスの状態を記憶する。各ミューテックススレッドロックレジスタ８０は、レジスタに対応したミューテックスを現在ロックしているスレッドを識別する。図８は、本発明のある実施形態による、それぞれ条件変数に対応する例示的な条件ミューテックスレジスタ８２のセットを示している。各条件ミューテックスレジスタ８２は、レジスタに対応した条件変数にどのミューテックスが関係づけられているかを示す。
【００４５】
スレッド状態移行コントローラ９０（図４に示す）は、種々のスレッドの状態間移行を制御する。図９は、例示的な処理（非システム）スレッドに対して、スレッド状態移行コントローラ９０により実行される作動を図示するスレッド状態移行図である。システムスレッドは、処理スレッドにより用いられる状態のいくつかを用いることができるが、図９において斜線を付したスレッド状態を用いないことが好ましい。
【００４６】
図９に示すように、当初Thread_Free状態１００である処理スレッドは、状態をThread_Rdy状態１０２に変えるかもしれない。この状態移行はスレッドの作成と見なされる一方、逆方向の状態移行はスレッドの取消しとして見なされる。スレッドが実行されるようスケジュールされている場合、その状態はThread_Run状態１０４へと変更される。逆方向のスレッド状態移行は、スレッド占有割り当て、トラップ、例外、または割り当てされていない非同期割り込み（ＵＡＩＮＴ）が行われると生じる。スレッドはまた、スレッドが自動的に終了するか、システムスレッドによる利用が終了した場合にThread_Run状態１０４から直接Thread_Free状態１００に移行する。スレッドは、以下に記述するいくつかの事象の発生時にThread_Run状態１０４からThread_Wait状態１０６へ移行する。メモリの機能停止または直接メモリアクセス（ＤＭＡ）時に、スレッドは、Thread_Wait状態１０６の下位状態であるThread_Wait_Memory状態１１０へ移行する。スレッドは、Ｉ‐キャッシュ失敗時にＩ‐キャッシュ下位状態１１２へ、ミューテックスロック（lock）命令時にThread_Wait_Mutex下位状態１１４へ、待機条件（waitcond）命令時にThread_Wait_Cond下位状態１１６へ、および、待機割り込み（waitint）命令時にThread_Wait_Aint下位状態１１８へ移行する。スレッドは、待機が完了した場合にThread_Wait状態１０６からThread_Rdy状態１０２に移行し、スレッドが取り消された場合にThread_Free状態１００に移行する。
【００４７】
システムスレッドはThread_Free、Thread_Wait_Mutex、およびThread_Wait_Cond状態（図９において斜線を付した状態）を用いないことが好ましい。システムスレッドは、図９に示す他のスレッド状態を用いることができる。リセット時に、システムスレッドはThread_Run状態１０４で起動する。システムスレッドは、システム戻り（sret）命令の実行時にThread_Rdy状態１０２に戻る。システムスレッドは、以下のいくつかの条件下でThread_Rdy状態１０２からThread_Run状態１０４へ移行する。その条件には、リセット後、ソフトウェア上でのマルチスレッドシステムコールの実行時、割り当てられていない非同期割り込みを受けた場合またはシステムスレッドに割り当てられた割り込みを受けた場合、または現在実行中の処理スレッドが例外を生じさせた場合が含まれる。ある実施形態において、システムスレッドを開始させる他の事象は、ソフトリセットまたはマスク不可能割り込みを受けた場合、およびデバッグ機能が送ったブレークポイント信号を受けた場合を含む。システムスレッドを開始させる事象が発生した場合、システムスレッドのためのプログラムカウンタは、事象のタイプ毎の２つの命令に対して十分な間隔のあるプログラムカウンタ値（トラップベクトル）に設定される。そのような間隔であれば、短い飛び越し（分岐命令）および飛び越し‐遅延‐スロット命令には十分である。
【００４８】
ある実施形態において、システムスレッドは最優先順位で実行され、割り込みは不可能である。システムスレッド実行中のキャッシュ失敗、またはメモリの機能停止の発生は、いずれも待機（機能停止）を生じさせる。システムスレッド命令が例外を生じさせる場合、命令はスキップされ（結果は追求されない）、スレッドコントローラ状態レジスタの誤り（エラー）ビットは例外を反映するように設定され、実行は次の命令へ続く。システムスレッドは、上述されたミューテックスのlock、unlock、trylock、およびwaitcond命令を実行しない。システムスレッドが実行中の間、リアルタイム割り込み、マスク不可能割り込み、およびソフトリセット割り込みが発生すれば、これらの割り込みは、システムスレッドに対して通知される。システムスレッドがシステム戻り（sret）命令を実行しThread_Rdy状態１０２へ移行すると、他のスレッドを開始する前に、スレッドコントローラ５４がこれら保留中の割り込みまたは保留中の非同期割り込みの有無を確認する。システムスレッドは、割り込みに応じた適切なエントリポイントで再開される。
【００４９】
ある実施形態において、システムスレッドは待機割り込み（waitint）命令を実行する。システムスレッドは、次にThread_Wait_Aint状態１１８に移行し、他のスレッドはスケジュールされない。スレッドコントローラ５４は機能停止し、割り込み待機を行う。割り込みが起こると、システムスレッドは待機割り込み命令に続く命令から実行を継続する。
ある実施形態において、ミューテックスロック、待機条件、および条件信号命令等のマルチスレッドシステムコール命令は、スレッドコントローラ５４内の特殊用途ハードウェア（論理）によって実行される（図４）。表３は、本発明のある実施形態による、関連する命令のいくつかの命令名（簡略記号）および簡単な説明を記載する。
【００５０】
【表３】
2008522290.tif 000005
【００５１】
ハードウェアで対応されたシステムコールは、システムスレッドを用いてソフトウェア上でも実施することができる。各システムコールは、trap #TrapOpcodeの形式を有することができる。ここでTrapOpcodeは表３に記載された簡略記号に対応する５ビットの引数である。
ＴＨＸレジスタ７４ｂ（図５‐Ｂ）は、スレッドコントローラ５４によりどのシステムコールがハードウェア上で対応されるか、システムスレッドを呼び出すことでどのシステムコールがソフトウェア上で実行されるかを示している。trap命令がハードウェア上で実行される場合、命令は実行のためスレッドコントローラ５４（図２）に伝えられる。システムスレッドによりシステムコールが実行パイプライン５０で実行される場合、現在のスレッドのスレッド状態レジスタ７６ａのスレッド状態フィールドThState（図６‐Ａ）はThread_Rdyに設定され、ＭＭＵ主要状態レジスタ７４ｃのコールコードフィールドCallCd（図５‐Ｃ）はトラップを示すよう設定され、レジスタ７４ｃのトラップ／例外コードフィールドTrapExはトラップタイプ／オペコードを示すよう設定され、システムスレッドが実行を開始する（その状態は、Thread_Runに設定される）。システムスレッドの一部として実行されたトラップは無視される（nopとして扱う）。
【００５２】
以下の種々の命令についての詳細な説明は、スレッドコントローラ５４を用いてハードウェア上で命令実行が実施される方法に重点を置くものである。システムスレッドを用いた対応する方法は、以下に記述する作動をエミュレートするシステムスレッドトラップハンドラコードを用いて実現することができる。表４‐Ａおよび表４‐Ｂは、スレッドのスレッドステータスレジスタ７６ａ（図６‐Ａ）がいくつかの状況でどのようにtrap命令に影響を受けるかを示している。
【００５３】
【表４−Ａ】
2008522290.tif 000006
【００５４】
【表４−Ｂ】
2008522290.tif 000007
【００５５】
表４‐Ａおよび表４‐Ｂに記載された命令の少なくともいくつかは、汎用レジスタファイル３０からの引数をとることができ（図２）、値を返すためにスレッド状態レジスタ７６ａに記憶されたＺおよびＬフラグを設定またはクリアすることができる。ある実施形態において、表４‐Ａおよび表４‐Ｂに記載された各システムコール命令の直後には、マルチスレッドシステムコールがＺおよび／またはＬフラグで示されるエラーまたは他の条件に遭遇した場合に、適切なエラー処理または他の応答ルーチンへの飛び越しを生じさせる条件付き飛び越し命令が続く。Ｌフラグに依存する少なくともいくつかの命令（例えば、より少なければ飛び越す命令、より多いかまたは等しければ飛び越す命令）の結果は、スレッド状態レジスタ７６ａに記憶されている符号付き演算（ＳＡ）フラグに依存していない。
【００５６】
rti A0、asi A0形式のリアルタイム割り込み（ＲＴＩ）および非同期割り込み（ＡＳＩ）命令は、汎用レジスタＡ０の値をリアルタイム割り込みマクスレジスタ７６ｃおよび非同期割り込みマスクレジスタ７６dにそれぞれ割り当てるのに用いることができる（図６‐Ｃおよび図６‐Ｄ）。ある実施形態において、処理スレッドは、リアルタイム割り込みまたは非同期割り込み命令を介して当該スレッド自体に割り当てた割り込みのみを受け取る。ある実施形態において、非同期割り込み信号または条件信号が、それ以前に受け取られていないときは、リアルタイム割り込み命令は非同期割り込みおよび待機状態命令の直前に挿入され、一定期間が経過した後にリアルタイム割り込みが受け取られるようになる。
【００５７】
図１０‐Ａは、本発明のある実施形態による処理スレッドによって実行される非同期割り込み待ち（waitint）命令の間に、ＭＭＵ２６により実行される一連のステップ３００を示している。waitint命令には引数がなく、別の割り込みが（システムスレッドに対してのみ）起こると、成功時（割り当てられた非同期割り込み）にZ=1 && L=1を返し、タイムアウト時（割り当てられたリアルタイム割り込み）にZ=1 && L=0を返し、エラー時にZ=O && L=0を返す。処理スレッドがwaitint命令を実行する場合、ＭＭＵ２６は現在アサートされている割り当てられた非同期割り込みの有無を調べる（ステップ３０２）。「はい」の場合、実行は継続され、ＺおよびＬフラグが設定される（ステップ３０４）。「いいえ」の場合、スレッドステータスレジスタ７６ａのThStateフィールド（図６‐Ａ）はThread_Wait_Aintに設定され（ステップ３０６）、Ｚフラグは設定され、Ｌフラグはタイムアウトを示すためクリアされ（ステップ３０８）、リアルタイム割り込みタイムアウトカウンタがスレッドのリアルタイム割り込みレジスタ７６ｃ（図６‐Ｃ）に基づいて設定される（ステップ３１０）。タイムアウトカウンタは、ＲＴＣ３２（図２）にアサートされた開始‐タイムアウトビットベクトルである。非同期割り込みが受け取られた場合、またはＲＴＣリアルタイム割り込みがタイムアウトになる場合に、スレッドはもとのThread_Rdy状態に移行する（ステップ３１２）。ＺおよびＬフラグは非同期割り込みが受け取られた際に設定され、リアルタイム割り込みが受け取られた際に保存される。スレッドはそれから、その優先順位に基づいてスケジュールされる（ステップ３１６）。
【００５８】
図１０‐Ｂは、本発明のある実施形態によるシステムスレッドによって実行される非同期割り込み待ち（waitint）命令の間に、ＭＭＵ２６により実行される一連のステップ３２０を示す。システムスレッドは、２つのカテゴリに分類することができる割り込みを受け取る。すなわち、システムスレッドに割り当てられた非同期割り込みおよびシステムスレッドに割り当てられたリアルタイム割り込みを含む第１カテゴリ、ならびに割り当てられていない非同期割り込み、マスク不可能割り込み、およびソフトリセット割り込みを含む第２カテゴリである。ステップ３２２において、ＭＭＵ２６は保留中の第２カテゴリの割り込みがないか調べる。保留中のものがあれば、実行は継続され、ＺおよびＬフラグはエラーを示すためクリアされる（ステップ３２２）。保留中のものがなければ、ＭＭＵ２６はシステムスレッドに割り当てられた非同期割り込みを調べる（ステップ３２４）。割り当てられた非同期割り込みがあれば、システムスレッドは実行を継続し、ＺおよびＬフラグは設定される（ステップ３２８）。割り当てられた非同期割り込みがなければ、システムスレッドは保留中のリアルタイム割り込みを調べる（ステップ３３０）。保留中のリアルタイム割り込みがあれば、システムスレッドは実行を継続し、Ｚフラグが設定され、Ｌフラグはクリアされる（ステップ３３２）。なければ、システムスレッドの状態はThread_Wait_Aintに設定され（ステップ３３４）、リアルタイム割り込みタイムアウトカウンタはスレッドのリアルタイム割り込みレジスタ７６ｃ（図６‐Ｃ）に基づいて設定され（ステップ３３６）、Ｚフラグが設定され、Ｌフラグはタイムアウトを示すためクリアされる（ステップ３３８）。次に、システムスレッドは割り込みを待ち（ＭＭＵ２６は機能停止する）、他のスレッドはスケジュールされない（ステップ３４０）。第１カテゴリまたは第２カテゴリの割り込みのいずれかが受け取られた場合、システムスレッドはもとのThread_Run状態に移行する（ステップ３４２）。受け取られた割り込みが第１カテゴリの割り込みである場合、waitint関数戻り値は処理スレッドに対して上に記載された値である。すなわち成功時（割り当てられた非同期割り込み）にはZ=1 && L=1、タイムアウト時（割り当てられたリアルタイム割り込み）にはZ=1 && L=0である。受け取られた割り込みが第２カテゴリの割り込みである場合、ＺおよびＬフラグはエラーを示すためクリアされる。システムスレッドがソフトリセットを実行する場合、ＭＭＵ２６は最優先順位の割り込みに対応するコールコードCallCd（図５‐Ｃ）によってシステムスレッドに再エントリする。
【００５９】
図１１は、本発明のある実施形態による処理スレッドにより実行される条件待機（waitcond）命令の間に実施される一連のステップ３６０を示している。ある実施形態において、システムスレッドは、waitcond命令を使うことができない。waitcond命令は、２つの引数、すなわちミューテックス識別子（MutexId）および条件識別子（CondId）を有する。これらの引数および以下に説明する他の関数のための引数は、引数データを記憶する汎用レジスタの識別子として提供することができる。この命令は以下のように返す。成功時にはZ=1 && L=1、タイムアウト時（割り当てられたリアルタイム割り込み）にはZ=1 && L=0、条件変数もしくはミューテックスが存在しない場合、または別のスレッドがCondId条件変数を待つ場合（図８に示すCondMutexフィールドが別のスレッドを識別した場合）にはZ=0 && L=1、およびMutexIdミューテックスが現在のスレッドによってロックされていない場合にZ=0 && L=0を返す。
【００６０】
ステップ３６２において、ＭＭＵ２６は、構成レジスタ７４ａのCondNoフィールド（図５‐Ａ）に対するCondId引数を比較し、レジスタ７４ａのMutexNoフィールドに対するMutexId引数を比較することによって、命令引数が存在するか否かを調べる。条件変数またはミューテックスが存在しない場合、ＺフラグはクリアされＬフラグが設定される（ステップ３６４）。処理スレッドは表４‐Ａに記載されたように状態を変更しない。指定された条件変数およびミューテックスが存在する場合、ＭＭＵ２６は他のスレッドが同じ条件を待っている（待機している）か否かを調べる（ステップ３６６）。「はい」の場合、MutexIdミューテックスが現在Condld条件変数に関連しているか否かを調べるため、MutexId引数はCondId条件変数に対応する条件ミューテックスレジスタ８２のCondMutexフィールド（図８）と比較される（ステップ３６８）。MutexId引数がCondMutexフィールドに一致しない場合、ＺフラグはクリアされＬフラグが設定される。MutexId引数がCondMutexフィールドに一致する場合、または他のスレッドはCondId条件変数を待っていない場合、ＭＭＵ２６はMutexIdミューテックスが現在のスレッドによってロックされていないかを判定する（ステップ３７０）。ステップ３７０を実施するため、ＭＭＵ２６はMutexId引数を用いて、MutexIdスレッドがないか大域ミューテックスロック状態レジスタ７４ｄ（図５‐Ｄ）およびミューテックススレッドロックレジスタ８０（図７）を調べる。MutexIdミューテックスが現在のスレッドによってロックされていない場合、ＺおよびＬフラグはクリアされる（ステップ３７２）。
【００６１】
ミューテックスロック解除命令に応じて実施されるステップの説明について以下に記述するように、ステップ３７４において、ＭＭＵ２６はMutexId引数により識別されたミューテックスのロックを解除する。スレッド状態はThread_Wait_Condに設定され（ステップ３７６）、CondId条件変数の識別子を含むようにスレッド状態レジスタ７６ａの条件（ミューテックス／条件）フィールド（図６‐Ａ）が更新される。リアルタイム割り込みタイムアウトカウンタは、スレッドのリアルタイム割り込みレジスタ７６ｃ（図６‐Ｃ）によって設定される（ステップ３８２）。ＭＭＵ２６は、命令のタイムアウト前に条件信号が受け取られた（waitcondは成功する）か否かを判定する（ステップ３８４）。スレッドが条件信号を受けた場合、スレッド状態はThread_Rdyに移行し、ＺおよびＬフラグが設定される（ステップ３８６）。その代わりにwaitcondがタイムアウトになる場合、スレッド状態はThread_Rdyに移行し、ＺおよびＬフラグには変更はない（ステップ３９０）。一旦Thread_Rdy状態になると、スレッドはその優先順位に基づいてスケジュールされる（ステップ３９２）。
【００６２】
図１２は本発明のある実施形態による条件信号（signal、signalbc）命令実行の間に実施される一連のステップ４００を示している。各条件信号命令は、１つの引数、すなわち条件識別子（CondId）を有する。この命令は、成功時にはZ=1 && L=1を、条件変数が存在しない場合にはZ=0 && L=1を返す。条件信号命令が実行されると、ＭＭＵ２６はCondId条件変数が存在するか否かを調べる（ステップ４０２）。条件変数が存在するか否かを判定するため、ＭＭＵ２６はCondId引数を構成レジスタ７４ａのCondNoフィールド（図５‐Ａ）と比較する。CondId条件変数が存在しない場合には、Ｚフラグはクリアされ、Ｌフラグが設定され（ステップ４０４）、変数が存在する場合には、ＺおよびＬフラグともに設定される（ステップ４０６）。条件信号は、次に１つ以上のスレッドに送られるが、単一受信のsignal命令に対しては、最優先順位を有するスレッドに送られ、同報signalbc命令に対しては、すべての全待機スレッドに送られる（ステップ４０８）。条件信号を受け取るスレッドは、Thread_Wait_Cond状態からThread_Rdy状態に移行され（ステップ４１０）、スレッドはその優先順位に基づいてスケジュールされる（ステップ４１２）。
【００６３】
図１３‐Ａは、本発明のある実施形態によるミューテックスロック追求（lock）命令実行の間に実施される一連のステップ４４０を示している。ある実施形態において、ミューテックスロック命令は、処理スレッドだけが実行でき、システムスレッドでは実行できない。この命令は、１つの引数、すなわちミューテックス識別子（MutexId）を有する。この命令は以下のように返す。成功時にはZ=1 && L=1を、タイムアウト時（割り当てられたリアルタイム割り込み）にはZ=1 && L=0を、ミューテックスが存在しない場合にはZ=0 && L=1を、そしてMutexIdミューテックスが現在のスレッドによって既にロックされている場合にはZ=0 && L=0を返す。lock命令が実行された際に、ＭＭＵ２６は、MutexId引数により識別されるミューテックスが存在するか否かを、MutexId引数と構成レジスタ７４ａのMutexNoフィールド（図５‐Ａ）とを比較することによって調べる（ステップ４４２）。MutexIdミューテックスが存在しない場合、Ｚフラグはクリアされ、Ｌフラグが設定される（ステップ４４４）。
【００６４】
ミューテックスが存在する場合、ＭＭＵ２６は、ミューテックスが現在のスレッドによって既にロックされているか否かを、ミューテックスロック状態レジスタ７４d（図５‐Ｄ）および処理スレッドに対応するミューテックススレッドロックレジスタ８０（図７）を調べることによって判定する（ステップ４４６）。「はい」の場合、ＺおよびＬフラグは、クリアされる（ステップ４４８）。ステップ４５０において、ＭＭＵ２６はミューテックスが別のスレッドによって既にロックされているか否かを判定する。ミューテックスのロックが解除されている場合、ミューテックスロック状態レジスタ７４ｄのMutexIdミューテックス（図５‐Ｄ）に対応するビットが設定され（ステップ４５２）、現在のスレッドのＩＤは、ミューテックススレッドロックレジスタ８０のMutexThreadフィールド（図７）に書き込まれ（ステップ４５４）、Ｌフラグが設定される（ステップ４５６）。
【００６５】
ミューテックスが別のスレッドによってロックされている場合、現在のスレッドのスレッドステータスレジスタ７６ａのThStateおよびMutex/Condフィールドは、Thread_Wait_MutexおよびMutexIdにそれぞれ設定され（ステップ４６０）、Ｌフラグはタイムアウトを示すためデフォルト値にクリアされ（ステップ４６２）、リアルタイム割り込みタイムアウトカウンタはスレッドのリアルタイム割り込みレジスタ７６ｃ（図６‐Ｃ）に基づいて設定される（ステップ４６４）。ステップ４６６において、ＭＭＵ２６は現在のスレッドの優先順位がミューテックスロックを維持するスレッドの優先順位より高いか否かを判定する。この２つの優先順位は、２つのスレッドに対応する優先順位レジスタ７６ｂのCurrThPriフィールド（図６‐Ｂ）を調べることによって判定される。現在のスレッドの優先順位が、ロックしているスレッドの優先順位より高い場合、ロックしているスレッドの優先順位は現在のスレッドの優先順位にまで上がる（ステップ４６８）。ロックしているスレッドの優先順位を上げることは、現在のスレッドの優先順位レジスタ７６ｂのCurrThPriフィールドの内容を、ロックしているスレッドの優先順位レジスタ７６ｂのCurrThPriフィールドに書き込むことによって実現される。
【００６６】
ミューテックスが別のスレッドによりロック解除され、現在のスレッドに移行された場合（ステップ４７２）、現在のスレッドはThread_Wait_MutexからThread_Rdy状態に移行し、ＺおよびＬフラグが設定される（ステップ４７４）。現在のスレッドは次に優先順位に基づいてスケジュールされる（ステップ４７６）。ミューテックスロックがタイムアウトになった場合（ミューテックスが現在のスレッドを与えられる前に、現在のスレッドに割り当てられたリアルタイム割り込みが受け取られる）、現在のスレッドはThread_Wait_MutexからThread_Rdy状態に移行し、ＺおよびＬフラグは変更されない（ステップ４７６）。依然ロック状態を維持しているスレッドの現在の優先順位（CurrThPriフィールド）は、そのデフォルトの優先順位（DefThPri）およびロックを待つ他のスレッドが有れば、その最大値に設定される（ステップ４８０）。
【００６７】
図１３‐Ｂは、本発明のある実施形態によるミューテックス検証（locktry）命令実行の間実施される一連のステップ５００を示している。ミューテックス検証命令は、lock命令と同じ引数および戻り値を有している。シーケンス５００は、lock命令について上述したステップ４４２〜４５２を含むが、ステップ４６０およびステップ４６４〜４８０は含んでいない。MutexIdミューテックスが別のスレッドによってロックされている場合、Ｌフラグはクリアされ、スレッドの実行が継続される（ステップ４６２）。
【００６８】
図１３‐Ｃは、本発明のある実施形態によるミューテックスロック解除（unlock）命令実行の間、実施される一連のステップ５２０を示している。ある実施形態において、ミューテックスロック解除命令は、処理スレッドだけが実行でき、システムスレッドでは実行できない。この命令は、１つの引数、すなわちミューテックス識別子（MutexId）を有する。この命令は以下のように返す。成功時にはZ=1 && L=1を、ミューテックスが存在しない場合にはZ=0 && L=1を、そしてMutexIdミューテックスが現在のスレッドによって支配されていない場合にはZ=0 && L=0を返す。unlock命令が実行されると、ＭＭＵ２６はMutexId引数によって識別されるミューテックスが存在するか否かを、MutexId引数を構成レジスタ７４ａのMutexNoフィールド（図５‐Ａ）と比較することにより調べる（ステップ５２２）。MutexIdミューテックスが存在しない場合、Ｚフラグはクリアされ、Ｌフラグが設定される（ステップ５２４）。
【００６９】
MutexIdミューテックスが存在する場合、ＭＭＵ２６はミューテックスが現在のスレッドによってロックされているか否かを判定する（ステップ５２６）。ミューテックスがロックされていない、または別のスレッドによりロックされている場合（現在のスレッドがミューテックスロックを維持していない場合）、ＺおよびＬフラグはクリアされる（ステップ５２８）。一方、現在のスレッドがミューテックスロックを維持している場合、ＺおよびＬフラグは成功を示すように設定される（ステップ５３０）。ロック解除が成功した場合、ＭＭＵ２６はミューテックスを待っている（待機している）スレッドの有無を判定する（ステップ５３２）。待っているスレッドがない場合、ミューテックスロック状態レジスタ７４ｂのMutexIdミューテックス（図５‐Ｄ）に対応するビットは、クリアされる（ステップ５３４）。実行中のスレッドの現在の優先順位（図６‐Ｂに示される優先順位レジスタ７６ｂのCurrThPriフィールド）は、デフォルトの優先順位（DefThPriフィールド）および現在のスレッドがまだ保持しているミューテックスをまだ待っている（待機している）全スレッドの現在のスレッドの優先順位の最大値に設定される（ステップ５４４）。
【００７０】
少なくとも１つのスレッドがミューテックスを待っている場合、ミューテックスを待つ最優先順位のスレッドは、非明示的なミューテックスロックであるミューテックスを与えられる（ステップ５３６）。最優先順位の待機スレッドの状態は、Thread_Wait_MutexからThread_Rdyへ移行し、ＺおよびＬフラグは変更されないままである（ステップ５３８）。その現在のスレッド優先順位（図６‐Ｂに示される優先順位レジスタ７６ｂのCurrThPriフィールド）は、デフォルトの優先順位（DefThPriフィールド）およびミューテックスをまだ待っている全スレッドの現在の優先順位の最大値に設定される（ステップ５４０）。実行中のスレッドの優先順位は、上述したようにステップ５４４で設定される。その後のスケジューリングは、調整された単一のスレッド優先順位または複数の優先順位を用いて実行される（ステップ５４８）。
【００７１】
表３に記載されているように、ある実施形態によるＭＭＵ２６は、いくつかの追加的システムコール命令に対応する。このような命令には、プロファイリング命令prof、ソフトリセット命令sreset、ブレークポイント命令break、スレッド作成命令create、スレッド取り消し命令cancel、およびスレッド優先順位変更命令priorityが含まれる。プロファイリング命令（プロファイリングオン、プロファイリングオフ）は、以下に詳細に記述するように、スレッドプロファイリングを可能または不可能にする。この命令は、ＭＭＵ主要状態レジスタ７４ｃのＰフィールド（図５‐Ｃ）を設定またはクリアする。この命令は引数および戻り値を有していない。ソフトリセット命令は、処理スレッドが再開できるように、システムスレッドが他の全スレッドを取り消し、プロセッサ状態をリセットする結果となる。この命令は、デバッグのため、またはキャッチオール監視関数として用いることができる。この命令は、引数または戻り値を有していない。ブレークポイント命令は、デバッグに用いることができるブレークポイントを作成する。この命令は、引数または戻り値を有していない。
【００７２】
図１４は、本発明のある実施形態によるスレッド作成（create）命令実行の間、実施される一連のステップ６００を示している。ある実施形態において、命令は、システムスレッドにより、ソフトウェア上で実行される。create命令は、４つの引数、すなわち新スレッド開始アドレス、スレッド優先順位、スタックポインタ、およびスレッド引数を有する。引数は、引数データを記憶する呼出しスレッドの４つの汎用レジスタの識別子として提供することができる。この関数は、ThreadIdと、ＺおよびＬフラグに対するいくつかの代替値とを返す。成功時にはZ=1 && L=1を、スレッド優先順位引数が既に利用されているかまたは無効の優先順位を示す場合にはZ=0 && L=1を、そして全スレッドが利用中の場合にはZ=0 && L=0を返す。ステップ６０２において、システムスレッドは、構成レジスタ７４ａのThreadNoフィールド（図５‐Ａ）を調べ、空きスレッド（状態がThread_Free）が見つかるまでスレッド状態レジスタ７６ａのThStateフィールド（図６‐Ａ）を検索することにより、利用可能な空きスレッドの有無を判定する。空きスレッドがない場合、呼出しスレッドのＺおよびＬフラグはクリアされる（ステップ６０４）。
【００７３】
空きスレッドがあれば、システムスレッドは、以前に作成されたスレッドの優先順位レジスタ７６ｂのDefThPriフィールド（図６‐Ｂ）を調べることにより、要求されたスレッドの優先順位が利用できるか否かを判定する（ステップ６０６）。要求されたスレッド優先順位が利用されているかまたは無効の場合、Ｚフラグはクリアされ、Ｌフラグが呼出しスレッドのコンテキストにおいて設定される。または、システムスレッドは呼出しスレッドのＺおよびＬフラグを設定し（ステップ６０８）、呼出しスレッドの引数汎用レジスタにThreadIdを入れることにより呼出しスレッドに新しいThreadId値を返し（ステップ６１０）、以下に記述するいくつかのステップにおいて、新しく作成されたスレッドの状態を設定する。
【００７４】
ステップ６１２において、システムスレッドは、新しいスレッド開始アドレス引数を新しいスレッドのプログラムカウンタ（ＰＣ）レジスタ７６ｅ（図６‐Ｅ）に入れる。新しいスレッドスタックポインタ引数は、新しいスレッドのスタックポインタレジスタに入れられる（ステップ６１４）。呼出しスレッドからの関数引数として受け取られたスレッド引数は、新しいスレッドの汎用引数レジスタに入れられる（ステップ６１６）。新しいスレッドのThreadIdは、新しいスレッドの別の汎用レジスタに入れられる（ステップ６１８）。ステップ６２０において、新しいスレッドの優先順位レジスタ７６ｂのCurrThPriおよびDefThPriフィールド（図６‐Ｂ）には、呼出しスレッドからの命令引数として受け取られた新しいスレッド優先順位が読み込まれる。新しいスレッドのスレッドステータスレジスタ７６ａのThStateフィールド（図６‐Ａ）は、Thread_Rdyに設定される（ステップ６２２）。ステップ６２４において、新しいスレッドのフラグはクリアされる。
【００７５】
図１５は、本発明のある実施形態によるスレッド取り消し（cancel）命令実行の間実施される一連のステップ６４０を示している。cancel命令は、２つの引数、すなわちスレッド識別子（ThreadId）および終了引数を有する。これらの引数は、引数データを記憶する呼出しスレッドの２つの汎用レジスタの識別子として提供することができる。この関数は、成功時にはZ=1を、スレッドが存在しない場合にはZ=0を返す。ステップ６４２において、システムスレッドは、スレッドステータスレジスタ７６ａのThState（図６‐Ａ）においてThreadIdスレッドを調べることにより、ThreadIdスレッドが既に空いている（存在しない）か否かを判定する。スレッドが既に空いている場合、システムスレッドは呼出しスレッドのＺフラグをクリアする（ステップ６４４）。または、システムスレッドは呼出しスレッドのＺフラグを設定し（ステップ６４６）、以下に記述するように指定スレッドを取り消す。システムスレッドは、指定スレッドにより維持される全ミューテックスのロックを解除し（ステップ６４６）、指定スレッドに割り当てられたすべてのリアルタイムおよび非同期割り込みを除去し（ステップ６４８）、指定スレッドのスレッドステータスレジスタ７６ａのThStateフィールド（図６‐Ａ）をThread_Freeに設定する。
【００７６】
図１６は、本発明のある実施形態によるスレッド優先順位変更（priority）命令実行の間実施される一連のステップ６６０を示している。priority命令は、２つの引数、すなわちスレッド識別子（ThreadId）および新しいスレッド優先順位を有する。これらの引数は、引数データを記憶する呼出しスレッドの２つの汎用レジスタの識別子として提供することができる。この関数は、成功時にはZ=1 && L=1を、新しいスレッドの優先順位引数が既に利用されているかまたは無効である新しい優先順位を表している場合にはZ=0 && L=1を、そしてスレッドが存在しない場合にはZ=0 && L=0を返す。ステップ６６２において、システムスレッドは、対応するスレッドステータスレジスタ７６ａのThStateフィールド（図６‐Ａ）を調べることにより、ThreadIdスレッドが空いているか否かを判定する。スレッドが空いている場合、呼出しスレッドのＺおよびＬフラグはクリアされる（ステップ６６４）。このスレッドが存在する場合、システムスレッドは、以前に作成されたスレッドの優先順位レジスタ７６ｂのDefThPriフィールド（図６‐Ｂ）を調べることにより、要求された新しいスレッド優先順位が利用できるか否かを判定する（ステップ６６８）。要求された新しい優先順位が利用できない場合、Ｚフラグはクリアされ、Ｌフラグは呼出しスレッドのコンテキストで設定される（ステップ６７０）。
【００７７】
現在のスレッドが存在し、要求された新しい優先順位が利用可能な場合、システムスレッドは、目標スレッドの優先順位レジスタ７６ｂのDefThPriおよびCurrThPriフィールド（図６‐Ｂ）を以下に記述するように変更する。ステップ６７２において、システムスレッドは他のスレッドが待っている（待機している）ミューテックスに対し、目標スレッドがロックを維持しているか否かを判定する。ロックを維持していない場合、DefThPriおよびCurrThPriは新しい優先順位に設定される（ステップ６７４）。「はい」の場合、CurrThPriは新しい優先順位および古いCurrThPriの最大値に設定され（例えば、スレッドの現在の優先順位は下がらない）（ステップ６７８）、DefThPriは新しい優先順位に設定される（ステップ６８０）。
【００７８】
ステップ６８２において、システムスレッドは、目標スレッドがミューテックスを待っているか否かを、スレッドのステータスレジスタ７６ａのThStateフィールド（図６‐Ａ）がThread_Wait_Mutex状態を表しているか否かを調べることにより判定する。「はい」の場合、ミューテックスロックを維持しているスレッドに関するCurrThPriフィールドは、目標スレッドの新しい優先順位と少なくとも同じ順位に設定される。システムスレッドは、ロックをかけているスレッドの優先順位が新しい優先順位より低いか否かを判定し（ステップ６８４）、低い場合にはロックをかけているスレッドの現在の優先順位を新しい優先順位に設定する（ステップ６８６）。最後に、呼出しスレッドに対するＺおよびフラグがクリアされる（ステップ６９０）。
【００７９】
図１７は、本発明のある実施形態によるハードウェアスレッドプロファイラ９６（図４）の概略図である。スレッドプロファイラ９６は、大域プロファイリングユニット（ＧＰＵ）８００、ＧＰＵ８００に接続された実行プロファイリングユニット（ＲＰＵ）のセット８０２、およびＧＰＵ８００に接続された待機プロファイリングユニット（ＷＰＵ）のセット８０４を含む。ＧＰＵ８００、ＲＰＵ８０２、およびＷＰＵ８０４は、以下に記述するようにＭＭＵ２６の種々の機能ブロックにさらに接続されている。
【００８０】
各プロファイリングユニット８００〜８０４は、少なくともいくつかの特殊用途スレッドプロファイリングレジスタ７８（図４）に接続されている。レジスタ７８は、スレッドプロファイラ９６の一部を形成するとも考えられる。各プロファイリングユニット８００〜８０４は、以下に詳細に記述されるように、対応するプロファイリングレジスタ７８のセットの内容を制御するように構成されたプロファイリング論理を有する。プロファイリングレジスタ７８は、メモリマップされ、読み込み命令を経て全スレッドで利用可能になる。ある実施形態において、システムスレッドだけがプロファイリングレジスタの内容を変更することができる。他のスレッドが記憶させようとすると、例外が生じ、ＤＭＡ作動はこの領域に対して許可されてない。以下に記述するすべてのスレッドプロファイリングカウンタは、プロファイル使用可能（prof on）命令が実行されるとクリアされる。カウンタは、ＭＭＵ主要状態レジスタ７４ｃのプロファイリングフラグＰ（図５‐Ｃ）によりスレッドプロファイリングがアクティブであると示される場合にのみ増やされる。
【００８１】
表５は、本発明のある実施形態によるいくつかのスレッドプロファイリングレジスタ７８に関する説明、システムスレッドによりスレッドプロファイリングレジスタ７８上で実施が可能な許容操作のセットを記載する。表５に示すように、プロファイリングレジスタ７８は、大域プロファイラレジスタのセット、実行プロファイリングレジスタのセット、および待機プロファイリングレジスタのセットを含む。
【００８２】
【表５】
2008522290.tif 000008
【００８３】
表５に示すように、プロファイリングレジスタ７８は、大域プロファイラレジスタのセット、実行プロファイリングレジスタのセット、および待機プロファイリングレジスタのセットを含む。図１８‐Ａは、本発明のある実施形態による大域プロファイリングレジスタ７８Ｇ‐１〜７８Ｇ‐３のセットを示している。大域プロファイリングレジスタ７８Ｇ‐１〜７４Ｇ‐３の内容は、ＧＰＵ８００内のプロファイリング論理（図１７）により更新される。図１８‐Ａに示されるように、第１レジスタ７８Ｇ‐１はいくつかの構成フィールドを含む。すなわち利用可能なＲＰＵ８０２（図１７）の数を表すRunProfNo、利用可能なＷＰＵ８０４（図１７）の数を表すWaitProNo、利用可能な待機カウンタの数を表すWCtNo、プロファイリング状態カウンタのセットの幅を示すStateCtWidth、および移行状態カウンタのセットの幅を示すTransCtWidthを含む。表６は、本発明のある実施形態によるレジスタ７８Ｇ‐１の構成フィールドおよび関連値の範囲を記載している。
【００８４】
【表６】
2008522290.tif 000009
【００８５】
第２レジスタのセット７８Ｇ‐２は、スレッドプロファイリングがアクティブであるサイクルの数を示すフィールドGP_Cyclesを保持する第１レジスタ、およびスレッドプロファイリングがアクティブである間、システムスレッドがThread_Run状態にあるサイクルの数を示すフィールドGP_SysThdCyclesを保持する第２レジスタを含む。第３レジスタ７８Ｇ‐３は、スレッドプロファイリングがアクティブである間の連続占有割り当てを中断させるために、スレッドスケジューラ９４（図４）がThread_Wait_ICacheおよびThread_Wait_Memoryにおけるスレッドのスケジュールを、最優先順位のスレッドだけに制限した回数をカウントするフィールドGP_RMissSchedを保持する。
【００８６】
図１８‐Ｂは、本発明のある実施形態によるＲＰＵ８０２（図１７）に対応する実行プロファイリングレジスタ７８Ｒ‐１〜７８Ｒ３のセットを示している。実行プロファイリングレジスタ７８Ｒ‐１〜７８Ｒ‐３の内容は、レジスタのセットが対応するＲＰＵ８０２内のプロファイリング論理により更新される。実行プロファイリングレジスタ７８Ｒ‐１〜７８Ｒ‐３は、１つのＴＮ（スレッド番号）‐ビットスレッドマスクレジスタ７８Ｒ‐１、３つのSＣＷ‐ビットカウンタ７８Ｒ‐２、および７つのＴＣＷ‐ビットカウンタ７８Ｒ‐３を含む。図１８‐Ｂに示されるように、第１レジスタ７８Ｒ‐１は、対応するＲＰＵ８０２によりプロファイルされるスレッドを選択するのに用いられるビットマスクであるフィールドRPi_ThreadMaskを保持する。レジスタ７８Ｒ‐１の各ビットは、１つのスレッドに対応している。レジスタ７８Ｒ‐２の第２セットは、フィールドRPi_Instrs、RPi_RunCycles、およびRPi_RdyCyclesをそれぞれ保持している３つのレジスタを含む。RPi_Instrsフィールドは、スレッドプロファイリングがアクティブな間に、スレッドプロファイリングのために（RPi_ThreadMaskビットマスクによって示されるように）選択されたスレッドによって完了された命令の数をカウントする。RPi_RunCyclesフィールドは、スレッドプロファイリングがアクティブな間に、プロファイリングのために選択されたスレッドがThread_Run状態にあったサイクルの数をカウントする。RPi_RdyCyclesフィールドは、スレッドプロファイリングがアクティブな間に、プロファイリングのために選択されたスレッドがThread_Rdy状態にあり、かつThread_Run状態にある選択されたスレッドがなかったサイクルの数をカウントする。レジスタ７８Ｒ‐３の第３セットは、いくつかのフィールドを保持するレジスタを含む。すなわち、RPi_Run2WIC、RPi_Run2WMem、RPi_Run2WMtx、RPi_Run2WCond、RPi_Run2WAint、RPi_Run2Rdy、およびRPi_PriRaisesである。RPi_Run2WICフィールドは、スレッドプロファイリングがアクティブな間に、プロファイリングのために選択されたスレッドによるThread_RunからThread_Wait_ICacheへの移行の数をカウントする。RPi_Run2WMemフィールドは、スレッドプロファイリングがアクティブな間に、選択されたスレッドによるThread_RunからThread_Wait_Memoryへの移行の数をカウントする。RPi_Run2WMtxフィールドは、スレッドプロファイリングがアクティブな間に、選択されたスレッドによるThread_RunからThread_Wait_Mutexへの移行の数をカウントする。RPi_Run2WCondフィールドは、スレッドプロファイリングがアクティブな間に、選択されたスレッドによるThread_RunからThread_Wait_Condへの移行の数をカウントする。RPi_Run2WAIntフィールドは、スレッドプロファイリングがアクティブな間に、選択されたスレッドによるThread_RunからThread_Wait_Aintへの移行の数をカウントする。RPi_Run2Rdyフィールドは、スレッドプロファイリングがアクティブな間に、選択されたスレッドによるThread_RunからThread_Rdyへの移行の数をカウントする。RPi_PriRaisesフィールドは、スレッドプロファイリングがアクティブな間に、選択されたスレッドの優先順位が上がった回数をカウントする。
【００８７】
図１８‐Ｃは、本発明のある実施形態によるＷＰＵ８０４（図１７）に対応する待機プロファイリングレジスタ７８Ｗ‐１，７８Ｗ‐２のセットを示している。待機プロファイリングレジスタ７８Ｗ‐１，７８Ｗ‐２の内容は、レジスタセットに対応するＷＰＵ８０４内のプロファイリング論理によって更新される。待機プロファイリングレジスタ７８Ｗ‐１，７８Ｗ‐２は、(log2TN+WCN*5)‐ビットスレッドＩＤおよび待機状態マスクレジスタ７８Ｗ‐１、ならびにＷＣＮ  ＳＣＷ‐ビットカウンタ７８Ｗ‐２を含む。ここでＴＮは総スレッド数(表１）であり、log2TNはスレッド数ＴＮを表すのに必要なビット数のスレッド幅であり、ＷＣＮおよびＳＣＷは表６に記載されたパラメータである。
【００８８】
第１待機プロファイリングレジスタ７８Ｗ‐１は、いくつかの待機プロファイリングフィールド、すなわちWPi_WaitMask０‐４、およびWPi_ThdIdを保持する。第２待機プロファイリングレジスタ７８Ｗ‐２のセットは、ＷＣＮ待機状態カウンタフィールドWPi_WaitCyclejを保持する。ここでｊは０からＷＣＮ‐１までを表している。レジスタ７８Ｗ‐１内のWPi_ThdIdフィールドは、レジスタ７８Ｗ‐１，７８Ｗ‐２に対応し、ＷＰＵ８０４によりプロファイルされるスレッドを選択する。各WPi_WaitMaskjフィールド（ここでｊは０ないし４を表す）は、対応するｊ番目の待機状態カウンタ（WPi_WaitCyclesj）によりプロファイルされる選択されたスレッド（WPi_ThdIdにより示される）の待機状態を選択する。例えば、WPi_WaitMask2フィールドは、待機状態カウンタWPi_WaitCycles2によりプロファイルされ、選択されたスレッドの待機状態を選択する。上記表２は、いくつかの利用できるスレッド状態を記載している。
【００８９】
以上図示したような例示的レジスタタイプを用いるシステムにおいて、スレッドプロファイリングレジスタビットの総数Ｎtotalは、以下の数式で表される。
Ｎｔｏｔａｌ＝Ｎｇｌｏｂａｌ＋Ｎｒｕｎ＋Ｎｗａｉｔ    〔１〕
式中、Nglobal、NrunおよびNwaitはそれぞれＧＰＵ８００、ＲＰＵ８０２、およびＷＰＵ８０４にそれぞれ用いられるレジスタビットの数である。例示的な実施形態において、３つのレジスタビット数は、以下の数式で表される。
【００９０】
Ｎｇｌｏｂａｌ＝２＊ＳＣＷ＋ＴＣＷ    〔２ａ〕
Ｎｒｕｎ＝ＲＰＮ＊（ＴＮ＋３＊ＳＣＷ＋７＊ＴＣＷ）    〔２ｂ〕
Ｎｗａｉｔ＝ＷＰＮ＊（ＴＷ＋ＷＣＮ＊５＋ＷＣＮ＊ＳＣＷ）    〔２ｃ〕
式中、ＴＮはスレッドの総数であり、ＴＷはスレッド数幅log2(TN)であり、他の変数は表６に記載されている。
【００９１】
数式１、および数式２ａないし数式２ｃが示すように、ＲＰＵ８０２および／またはＷＰＵ８０４が多数用いられると、プロファイリングレジスタビットの総数は極めて多くなり得る。スレッドプロファイリングの完全性と要求されるレジスタサイズとの両方を満足させる模範的な妥協策は、それぞれ２つの待機状態カウンタを有する（ＷＣＮ＝２）２つのＲＰＵ８０２（ＲＰＮ＝２）および３つのＷＰＵ８０４（ＷＰＮ＝３）を用いることである。ＭＭＵ２６が約数百ＭＨｚ程度の周波数で動作し、プロファイリングデータを得るために１０分の数秒程度のプロファイリング時間で十分である場合、２４ビットの状態カウンタ（ＳＣＷ＝２４）および１６ビットの移行カウンタ（ＴＣＷ＝１６）を用いれば十分である。スレッドを１２本（ＴＮ＝１２、ＴＷ＝４）を用いるシステムにおいて、数式１、および数式２ａないし数式２ｃにより与えられるプロファイリングレジスタビット数は６４２であり、約１３,０００相当の２入力ＮＡＮＤゲートに換算される。より基本的なスレッドプロファイラでは、ＲＰＮ＝１、ＷＰＮ＝２、ＷＣＮ＝２、ＳＣＷ＝２０、ＴＣＷ＝１２を用いてもよい。１２本のスレッドに対しスレッドプロファイリングレジスタビットの数は３１６であり、約６,５００相当の２入力ＮＡＮＤゲートに換算される。
【００９２】
上述の例示的なスレッド制御システムおよび方法は、比較的速いコンテクストスイッチングおよび効果的なスレッド同期を可能にする。システム性能に著しい影響を及ぼすことなく、比較的頻繁なコンテクストスイッチングを実行することができる。ある実施形態において、マルチスレッドシステムコールは、１つまたは２、３のクロックサイクルで実行することができる。マルチスレッド式マイクロコントローラにおけるコンテクストスイッチングおよびスレッド間通信の有効性を増加させることにより、マルチスレッド式マイクロコントローラの制御下で作動する相対的に効果的な特殊用途ハードウェアコア（ハードウェア加速ブロック）の処理能力をよりよく利用することを可能にする。記述されたスレッドプロファイリングシステムおよび方法は、マイクロコントローラのマルチスレッド性能の特性を向上させ、マイクロコントローラ用ソフトウェアコードの開発に有用な情報を提供することができる。
【００９３】
上記実施形態は発明の範囲を逸脱することなく種々に変更できることは当業者に明らかである。例えば、データ処理システムは１つ以上のマルチスレッド式マイクロコントローラを含んでもよい。単一のビットを用いる実施形態として上述したレジスタフィールドまたはフラグは、いずれも、より多くのビットを用いて実現することができる。記述された種々の方法ステップは、上記に図示した例示的なステップの順序とは異なる順序で実施してもよい。したがって、発明の範囲は添付の特許請求の範囲およびその法的均等物で定められるべきものである。
【図面の簡単な説明】
【００９４】
【図１】本発明のある実施形態によるマルチスレッド式データ処理システムを介した例示的なデータの流れを概略的に示す。
【図２】本発明のある実施形態によるマルチスレッド式マイクロコントローラユニット（ＭＭＵ）を含む例示的なマルチスレッド式データ処理システムの概略図である。
【図３】本発明のある実施形態による図２のＭＭＵの例示的な実行パイプラインを示す。
【図４】本発明のある実施形態による図２のＭＭＵのスレッドコントローラの内部構造を示す。
【図５−Ａ】本発明のある実施形態による例示的な大域スレッドレジスタの図である。
【図５−Ｂ】本発明のある実施形態による例示的な大域スレッドレジスタの図である。
【図５−Ｃ】本発明のある実施形態による例示的な大域スレッドレジスタの図である。
【図５−Ｄ】本発明のある実施形態による例示的な大域スレッドレジスタの図である。
【図５−Ｅ】本発明のある実施形態による例示的な大域スレッドレジスタの図である。
【図５−Ｆ】本発明のある実施形態による例示的な大域スレッドレジスタの図である。
【図６−Ａ】本発明のある実施形態によるいくつかの例示的な特定スレッド用レジスタの図であり、各レジスタはそれぞれスレッドに対応している。
【図６−Ｂ】本発明のある実施形態によるいくつかの例示的な特定スレッド用レジスタの図であり、各レジスタはそれぞれスレッドに対応している。
【図６−Ｃ】本発明のある実施形態によるいくつかの例示的な特定スレッド用レジスタの図であり、各レジスタはそれぞれスレッドに対応している。
【図６−Ｄ】本発明のある実施形態によるいくつかの例示的な特定スレッド用レジスタの図であり、各レジスタはそれぞれスレッドに対応している。
【図６−Ｅ】本発明のある実施形態によるいくつかの例示的な特定スレッド用レジスタの図であり、各レジスタはそれぞれスレッドに対応している。
【図６−Ｆ】本発明のある実施形態によるいくつかの例示的な特定スレッド用レジスタの図であり、各レジスタはそれぞれスレッドに対応している。
【図７】本発明のある実施形態による、例示的なミューテックススレッドロックレジスタのセットを示しており、各レジスタはそれぞれミューテックスに対応している。
【図８】本発明のある実施形態による例示的な条件ミューテックスレジスタのセットを示し、各レジスタはそれぞれ条件変数に対応している。
【図９】本発明のある実施形態による図４のスレッドコントローラの作動を図示しているスレッド状態図を示す。
【図１０−Ａ】本発明のある実施形態による図２のＭＭＵによって処理スレッドによって呼び出された非同期割り込み待機（waitint）命令を実行するため実施される一連のステップを示す。
【図１０−Ｂ】本発明のある実施形態による図２のＭＭＵによってシステムスレッドによって呼び出された非同期割り込み待機（waitint）命令を実行するため実施される一連のステップを示す。
【図１１】本発明のある実施形態による処理スレッドによって条件待機（waitcond）命令が実行される際に実施される一連のステップを示す。
【図１２】本発明のある実施形態による条件信号（signal、signalbc）命令が実行される際に実施される一連のステップを示す。
【図１３−Ａ】本発明のある実施形態によるミューテックスロック追求（lock）命令が実行される際に実施される一連のステップを示す。
【図１３−Ｂ】本発明のある実施形態によるミューテックス検証（locktry）命令が実行される際に実施される一連のステップを示す。
【図１３−Ｃ】本発明のある実施形態によるミューテックス解除（unlock）命令が実行される際に実施される一連のステップを示す。
【図１４】本発明のある実施形態によるスレッド作成（create）命令が実行される際に実施される一連のステップを示す。
【図１５】本発明のある実施形態によるスレッド取り消し（cancel）命令が実行される際に実施される一連のステップを示す。
【図１６】本発明のある実施形態によるスレッド優先順位変更（priority）命令が実行される際に実施される一連のステップ６６０を示す。
【図１７】本発明のある実施形態によるハードウェアスレッドプロファイラの概略図である。
【図１８−Ａ】本発明のある実施形態による大域プロファイリングを示す。
【図１８−Ｂ】本発明のある実施形態による実行プロファイリングを示す。
【図１８−Ｃ】本発明のある実施形態による待機プロファイリングレジスタを示す。
【図１】
2008522290.tif 000010
【図２】
2008522290.tif 000011
【図３】
2008522290.tif 000012
【図４】
2008522290.tif 000013
【図５−Ａ】
2008522290.tif 000014
【図５−Ｂ】
2008522290.tif 000015
【図５−Ｃ】
2008522290.tif 000016
【図５−Ｄ】
2008522290.tif 000017
【図５−Ｅ】
2008522290.tif 000018
【図５−Ｆ】
2008522290.tif 000019
【図６−Ａ】
2008522290.tif 000020
【図６−Ｂ】
2008522290.tif 000021
【図６−Ｃ】
2008522290.tif 000022
【図６−Ｄ】
2008522290.tif 000023
【図６−Ｅ】
2008522290.tif 000024
【図６−Ｆ】
2008522290.tif 000025
【図７】
2008522290.tif 000026
【図８】
2008522290.tif 000027
【図９】
2008522290.tif 000028
【図１０−Ａ】
2008522290.tif 000029
【図１０−Ｂ】
2008522290.tif 000030
【図１１】
2008522290.tif 000031
【図１２】
2008522290.tif 000032
【図１３−Ａ】
2008522290.tif 000033
【図１３−Ｂ】
2008522290.tif 000034
【図１３−Ｃ】
2008522290.tif 000035
【図１４】
2008522290.tif 000036
【図１５】
2008522290.tif 000037
【図１６】
2008522290.tif 000038
【図１７】
2008522290.tif 000039
【図１８−Ａ】
2008522290.tif 000040
【図１８−Ｂ】
2008522290.tif 000041
【図１８−Ｃ】
2008522290.tif 000042
【国際調査報告】
2008522290.tif 000043
2008522290.tif 000044
2008522290.tif 000045
2008522290.tif 000046
2008522290.tif 000047