(57)【要約】本発明は、プログラム・ルーチンのタスクが、種々の優先度の少なくとも二つのメモリ・スタック機構（６２、６４）に、割り当てられた優先度に基づいて選択的に格納される、プロセッサ装置、タスク・スケジューリング方法およびコンピュータ・プログラム・プロダクトに関する。少なくとも二つのプロセッサ手段（２０、３０）で実行されるタスクの切り換えは、プログラム・ルーチンに挿入された同期命令への応答として前記少なくとも二つのメモリ・スタック機構（６２、６４）にアクセスすることによって制御される。それにより、優先度を付けられたタスク間の、効率的な0サイクルのタスク切り換えが達成できる。
2008522277.tif 000002
【特許請求の範囲】
【請求項１】
ａ）プログラム・ルーチンのタスクを該タスクに割り当てられた優先度に基づいて処理するための、独自のメモリ・アクセスをもつ少なくとも二つのプロセッサ手段と、
ｂ）タスクをその割り当てられた優先度に基づいて選択的に格納するための、異なる優先度の少なくとも二つのメモリ・スタック機構と、
ｃ）前記少なくとも二つのプロセッサ手段で実行されるタスクの切り換えの制御を、前記プログラム・ルーチンに挿入された同期命令に応じて前記少なくとも二つのメモリ・スタックにアクセスすることによって行う、タスク切り換え手段、
とを有するプロセッサ装置。
【請求項２】
前記少なくとも二つのメモリ・スタック機構をモニタリングし、優先度が最も高い空でないメモリ・スタック機構の一番上へのアクセスを提供するためのランタイム取扱手段をさらに有する、請求項１記載の装置。
【請求項３】
前記同期命令が、前記プロセッサ手段の一つの、プログラム・カウンタを、所与のタスク・アドレスに設定し、前記プロセッサ手段の別の一つの、現在タスクを、前記少なくとも二つのメモリ・スタック機構のうち高優先度のものからポップさせる開始命令を含む、請求項１または２記載の装置。
【請求項４】
前記同期命令が、所与のタスクを前記少なくとも二つのメモリ・スタック機構の高優先度のものにプッシュし、前記少なくとも二つのメモリ・スタック機構の低優先度のものの一番上を、前記プロセッサ手段の一つの次のタスク・アドレスで置き換える停止命令を含む、請求項１または２記載の装置。
【請求項５】
前記同期命令が、前記少なくとも二つのメモリ・スタック機構の高優先度のものから現在のタスクをポップさせ、所与のタスク・アドレスを格納する保持命令を含む、請求項１または２記載の装置。
【請求項６】
前記タスク切り換え手段が、前記所与のタスク・アドレスを前記命令から導出するよう適応されている、請求項３ないし５記載の装置。
【請求項７】
前記同期命令が、前記プログラム・ルーチンの命令に追加的ビットとして添付されている、請求項１ないし６記載の装置。
【請求項８】
独自のメモリ・アクセスをもつ少なくとも二つのプロセッサ手段を有するプロセッサ装置においてタスク・スケジューリングを実行する方法であって：
ａ）プログラム・ルーチンのタスクを、割り当てられた優先度に基づいて、異なる優先度の少なくとも二つのメモリ・スタック機構に選択的に格納する段階と；
ｂ）前記プログラム・ルーチンに同期命令を挿入する段階と；
ｃ）前記少なくとも二つのプロセッサ手段で実行されるタスクの切り換えを、前記同期命令に応じて前記少なくとも二つのメモリ・スタックにアクセスすることによって制御する段階、
とを有する方法。
【請求項９】
前記プログラム・ルーチンの諸タスクの依存性を解析する段階と、該解析する段階の結果に基づいて前記プログラム・ルーチンのアセンブリ・コードに前記同期命令を挿入する段階とをさらに有する、請求項８記載の方法。
【請求項１０】
前記同期命令が、前記プロセッサ手段の一つにおいてタスクを開始するための開始命令、前記プロセッサ手段の一つにおいてタスクを停止させるための停止命令および前記プロセッサ手段の一つにおいてタスクを保持するための保持命令を含む、請求項８または９記載の方法。
【請求項１１】
低優先度タスクと高優先度タスクとの間の切り換えを、前記プログラム・ルーチンの通常の命令と同時的に呼び出す段階をさらに有する、請求項８ないし１０のうちいずれか一項記載の方法。
【請求項１２】
前記プロセッサ装置のメモリにロードされたときに、プロセッサ装置を、請求項８ないし１０のうちいずれか一項記載の前記諸段階を実行するよう制御するコード手段を有する、コンピュータ・プログラム・プロダクト。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、優先度の付けられた（prioritized）タスク間の効率的な切り換えを提供するためにタスク・スケジューリングを実行するためのプロセッサ装置、方法およびコンピュータ・プログラム・プロダクトに関する。
【背景技術】
【０００２】
伝統的な現状最新技術のコンピュータでは、タスク切り換え命令シーケンスは、タスク間で切り換えをするために費やされる時間の膨大な消費につながる。タスクとタスクの間で費やされる時間は、タスク変更処理のオーバーヘッドと呼ばれる。それは、レジスタを保存および復元するために使われる時間であり、タスク優先度（task  priorities）およびタスク実行正当化（task  execution  justification）を判別するのに使われる時間のようなその他の遅延も含む。こうして、これらの時間期間は、有用な処理のために利用できなくなる。多くの現代のコンピュータまたはプロセッサ・システムにおいて、そのような中断およびタスク変更処理のオーバーヘッドは何十ないし何百サイクルにもなる。
【０００３】
たとえば消費者用途では、一部の周辺データはリアルタイムで処理される必要がある一方、他のタスクは最善努力の仕方で処理できる。したがって、プログラムは高優先度のタスクと低優先度のタスクを含んでおり、タスク間の時間依存性を導出するために依存性解析が実行される。主プロセッサは通例、一般的なタスクを実行するために設けられる。一方、コプロセッサは、専用タスクを時間／パワー効率のよい仕方で実行するために使われ、主プロセッサ上で走っているタスクによって前もって構成設定される必要がある。目標は、当該プログラムの最短遅延の実行を見出すことである。
【０００４】
図２（ａ）は、プログラムおよびその最も並列的な実行の例を示している。初期プログラムは、Ｃのような逐次手続き型言語で書き下される。プログラムは、高優先度の（high-priority）タスクHPi、低優先度の（low-priority）タスクLPiおよび独立したコプロセッサ（co-processor）で走ることのできるタスクCPiを含む。コンパイル時の依存性解析によって、図２（ｂ）の例に示されるように諸タスクの部分的な順序が決定される。図２（ｂ）によれば、低優先度のタスクLP1はすぐ開始でき、他のタスクに何らの依存性ももたない。一方、低優先度のタスクLP7は高優先度タスクHP4の実行に依存している。高優先度タスクHP2、HP4、HP6、HP8、HP10およびコプロセッサ・タスクCP3、CP5、CP9、CP11の依存性は図２（ｂ）における時間順序から読み取れる。ここで、図の、より下の各タスクはより上のタスクに依存しており、よって該より上のタスクの完了前に実行することはできない。
【０００５】
図２（ｃ）は、このプログラムの所望の実行フローを示している。一般すなわち主プロセッサ上での実行のために何らかの高優先度タスクが利用可能であれば、それはすぐ開始されるべきである。実行すべき利用可能な高優先度タスクがなくなったら、主プロセッサは低優先度タスクを実行するためにその時間を使うことができる。そのようなスケジューリングは、プリエンプティブ・スケジューリングとして知られ、たとえばJ.  L.  Peterson  et  al,  ‘Operating  System  Concepts’,  Addison  Wesley,  1986に記載されている。
【０００６】
依存性解析は、高優先度タスクとコプロセッサ・タスクとがCプログラムの順序に配列され、その配列の可能な限り早いところに低優先度タスクが並列化される解析に単純化できる。
【０００７】
しかしながら、一般にはタスクの遅延はコンパイル時にはわからないので、実行トレースは、単一スレッドのアセンブリ・プログラムでは効率的にエンコードできない。
【０００８】
図３は、二つの異なる実行トレースの例を示している。こらの実行トレースは同じプログラムおよびその依存性解析から帰結するものだが、コプロセッサ・タスクCP3およびCP5の異なるランタイム遅延によって生じている。具体的には、図３（ａ）に示す第一の実行トレースでは、コプロセッサ・タスクCP3およびCP5は短いランタイム遅延で実行され、よって高優先度タスクがより早い段階で実行できる。それに対し、図３（ｂ）に示す第二の実行トレースでは、コプロセッサ・タスクCP3およびCP5はより多くのサイクルを要しており、よって主プロセッサが低優先度タスクLP1の実行を待つ時間がより長く、高優先度タスクHP6、HP8およびHP10はより遅い段階に実行される。
【０００９】
したがって、実行トレースを事前に決定することはできず、タスク切り換えはランタイムの活動となる。どのようなタスクがあるかに依存して、オペレーティング・システムは、諸タスクを、その優先度に基づいてプロセッサに割り当てる。これを達成するため、タスクおよびその優先度を保存するためにヒープまたは優先度待ち行列が一般に使用される。これはたとえば、T.  H.  Cormen  et  al.,  ‘Introduction  to  algorithms’,  MIT  Press,  1990に記載されている。この提案の欠点は、そのような構造でのタスクの格納／取り出しは多数の処理サイクルを要するということである。これは、タスク切り換えの適用可能性を、タスクの数に比べて多くのサイクルをもつ、粒度の大きなタスクに限定する。そうでなければ、タスク切り換えのオーバーヘッドが有意になり、プログラムの逐次的な実行に比べてサイクルを損することにさえなりかねない。
【００１０】
しかしながら、タスクの粒度が細かい分野または用途では、このアプローチは有用ではなく、好ましくは0のサイクルでのタスク切り換えが望まれる。
【発明の開示】
【発明が解決しようとする課題】
【００１１】
したがって、本発明の一つの目的は、並列タスク切り換えが格納および取り出しのコストの不利益なく実行できる、改良されたタスク・スケジューリングのアプローチを提供することである。
【課題を解決するための手段】
【００１２】
この目的は、請求項１記載のプロセッサ装置、請求項８記載のスケジューリング方法および請求項１２記載のコンピュータ・プログラム・プロダクトによって達成される。
【００１３】
それによると、タスク切り換えは、プログラム・ルーチンに挿入された同期命令（synchronization  instructions）への応答として少なくとも二つのメモリ・スタックにアクセスすることによって実行される。タスクの初期プッシュは１サイクルを要し、一方、同期命令は通常のプログラム命令と同時に呼び出すことができ、オーバーヘッドなしでのタスク切り換えを許容する。こうして、優先度を付けられたタスク間での効率的な切り換えが達成できる。
【００１４】
前記少なくとも二つのメモリ・スタックをモニタリングし、優先度が最も高い空でないメモリ・スタックの一番上へのアクセスを提供するためのランタイム取扱手段が設けられる。それにより、メモリ・スタックにアクセスする際、高優先度のタスクが低優先度のタスクよりも優先されることが保証される。
【００１５】
同期命令は、プロセッサ手段の一つのプログラム・カウンタを所与のタスク・アドレスに設定し、前記プロセッサ手段の別の一つの現在タスクを、前記少なくとも二つのメモリ・スタックのうち高優先度のものからポップさせる開始命令（start  instruction）を有しうる。この命令は、プロセッサ手段の高優先度のタスク間での効率的な切り換えを提供する。
【００１６】
さらに、同期命令は、所与のタスクを前記少なくとも二つのメモリ・スタックの高優先度のものにプッシュし、前記少なくとも二つのメモリ・スタックの低優先度のものの一番上を、前記プロセッサ手段の一つの次のタスク・アドレスで置き換える停止命令（stop  instruction）を有しうる。この命令は、他のプロセッサ手段における従属タスクの実行後の効率的な戻し切り換えを提供する。
【００１７】
最後に、同期命令は、前記少なくとも二つのメモリ・スタックの高優先度のものから現在のタスクをポップさせ、所与のタスク・アドレスを格納する保持命令（hold  instruction）を有しうる。この任意的な保持命令は、プリエンプティブな高優先度タスクとの関連で有利に使うことができる。
【００１８】
タスク切り換え手段は、命令自身から前記所与のタスク・アドレスを導出するよう適応されていてもよい。前記所与のタスク・アドレスはすでに同期命令に含まれているので、アドレス取得のための追加的なタスク切り換えサイクルは必要とされない。
【００１９】
同期命令をプログラム・ルーチンのアセンブリ・コードに挿入することは、該プログラム・ルーチンの諸タスクの依存性の解析ステップに基づいていてもよい。それにより、アセンブリ・コードの自動修正が、外部相互作用を何ら必要とすることなく達成できる。
【００２０】
低優先度タスクと高優先度タスクとの間の切り換えは、プログラム・ルーチンの通常または従来式の命令と同時に呼び出せる。この施策により、タスク切り換えのための追加的な処理サイクルは防止できる。
【００２１】
本発明についてこれから、付属の図面を参照しつつ好ましい実施形態に基づいて説明する。
【発明を実施するための最良の形態】
【００２２】
これから記載する好ましい実施形態は、主プロセッサ２０およびコプロセッサ３０を有するプロセッサ装置についてのものである。該プロセッサ装置は、サポート機能をもつ両側スタック６０に基づいて２レベルの優先度タスクの切り換えを実行するためのものである。
【００２３】
図１は、提案されるアーキテクチャのブロック概略図を示している。該アーキテクチャは、主プロセッサ２０および専用タスクのためのコプロセッサ３０を有しており、これらはいずれも、プログラム・コードもしくはルーチンおよび処理データが保存されているメモリ・システム１０への独自のアクセスを有する。メモリ・システム１０は単一のメモリ回路もしくはデバイスを有していても、複数のメモリ回路もしくはデバイスを有していてもよいが、該メモリ・システム１０の少なくとも一部分は両方のプロセッサによって共有されうる。これは、両方のプロセッサが同じ共有メモリ位置にアクセスしうるということを意味している。主プロセッサ２０は、システム・メモリ管理、システム・タスク管理およびシステム上で走るその他のネイティブなタスクを含むさまざまな機能を実行するオペレーティング・システムをホストしうる。
【００２４】
さらに、主プロセッサ２０とコプロセッサ３０との間のタスクの切り換えを制御するために、タスク・スケジューリング機能またはユニット５０が設けられる。好ましい実施形態によれば、優先度を付けられたタスクが、スタック・メモリ６０のそれぞれの優先度依存スタックに格納されている。スタック・メモリ６０には、タスク切り換えユニット５０は、該スタック・メモリ６０へのアクセスを管理するランタイム取扱機能またはユニット４０を介してアクセスできる。タスク・スケジューリング・ユニット５０およびランタイム取扱ユニット４０は別個のソフトウェアもしくはハードウェア機能として実装されてもよいし、あるいは主プロセッサ２０上で走っているオペレーティング・システムの一部として設けられてもよいことを注意しておく。しかしながら、ソフトウェア実装は当然ながら効率に関してはトレードオフに導くことを注意しておく。
【００２５】
図４（ａ）は、両側スタックとして構成されたスタック・メモリ６０の第一の例を示している。ここで、ランタイム取扱ユニット４０がタスク切り換えのサポートを提供する。今の例では、タスク切り換えは２レベルの優先度のタスクに制限される。これは、対応するデジタル信号処理の背景では、高優先度タスクと低優先度タスクについて使用されうる場合である。この目的のため、スタック・メモリ６０は低優先度スタック６４および高優先度スタック６２を有する。低優先度スタックと高優先度スタックは、空のスタックもしくはスタックフィールドによって、あるいは所定のビットパターンもしくは情報パターンによって分離されうる（図４（ａ）の斜線部で示すように）。
【００２６】
しかしながら、本発明は両側スタックや二つの別個のスタック・メモリに制限されるものではない。本発明は、種々の優先度レベルのための、たとえば高優先度、中優先度、低優先度もしくはさらに多くの優先度レベルのための、別個のスタックを使用するよう拡張できる。
【００２７】
図４（ｂ）は、スタック・メモリ６０の第二の例を示している。ここでは、それぞれが専用の優先度レベルを表す別個のスタック・メモリが設けられている。一番下のスタック・フィールド（斜線部で示される）は空であるか、またはスタックの終わりを示す所定の情報を含んでいる。
【００２８】
一般に、上記のスタック・メモリは、いかなる種類のメモリ・デバイスもしくは回路においていかなるスタック機構に基づいて実装されてもよい。
【００２９】
図１を参照すると、タスク・スケジューリング・ユニット５０は主プロセッサ２０およびコプロセッサ３０の両方にアクセスできる。さらに、タスク・スケジューリング・ユニット５０はメモリ・システム１０にアクセスできる。タスク・スケジューリング・ユニット５０は、ランタイム取扱ユニット４０およびスタック・メモリ６０と関連して、ランタイムにて同期命令を取り扱うことによってタスク切り換えをサポートする。命令は、オペレーティング・システムによって実行されうる依存性解析の結果に基づいて、メモリ・システム１０内に格納されているプログラムまたはルーチンのアセンブリ・コードに挿入される。タスク・メモリ６０へのタスクの初期プッシュは１サイクルを要する一方、コプロセッサ・タスクの開始、コプロセッサ・タスクの終了および低優先度タスクと高優先度タスクとの間の切り換えといった同期命令は通常命令と同時に呼び出される。追加的な同期命令の組み込みは、通常の命令に、単に余剰ビットを加えることによって達成されうる。それにより、オーバーヘッドなしでのタスク切り換えが許容される。
【００３０】
図５は、オーバーヘッドのない同期命令実行を示す概略的な流れ図である。同期命令は通常命令に添付されている。図５の例では、開始命令Start_cp(CP_address,HP_address)は高優先度タスクHP2の終わりに挿入される。それによりコプロセッサのプログラム・カウンタを所与のアドレスCP_addressに設定し、高優先度タスクの次のアドレスHP_addressを渡す。さらに、この開始命令は、スタック・メモリ６０の高優先度スタック６２から、コプロセッサ３０をコールしている高優先度タスクをポップさせるポップ動作につながる。コプロセッサ・タスクCP3の終わりに、停止命令Stop(HP_address)が組み込まれる。これは、低優先度スタック６４の一番上を、低優先度タスクの次のアドレスLP_addressで置き換え、高優先度タスクの次のアドレスHP_addressを低優先度スタック６４にプッシュする。
【００３１】
ランタイム取扱ユニット４０は、高優先度スタック６２および低優先度スタック６４を観察し、高優先度スタック６２上の諸タスクを実行し、高優先度スタック６２にタスクが残っていなければ、低優先度スタック６４上のタスクを実行する。
【００３２】
こうして、アセンブリ・コードに、タスク切り換えを制御するための同期命令が挿入または組み込まれる。スタック・メモリ６０は、ランタイム取扱ユニット４０およびタスク切り換えユニット５０とともに、ランタイムにてこれらの同期命令を取り扱うことによってタスク切り換えをサポートする。プリエンプティブでない高優先度タスクという上記の場合では、開始命令および停止命令が使用されうる。
【００３３】
代替または修正として、プリエンプティブな高優先度タスクのために追加的な保持命令を設けうる。それについて以下で説明する。
【００３４】
図６は、決定的な依存性での（at  critical  dependencies）高優先度タスクのプリエンプションを許容する、オーバーヘッドなしで実行される対応する同期命令の概略的な流れ図である。この解決策は、より詳細な依存性解析が実行され、高優先度タスクが実際にコプロセッサ・タスクからの情報を必要とする点までその実行を進めることが許容される場合に使える。
【００３５】
図６によれば、高優先度タスクHP2の実行の間に、開始命令Start_cp(CP_address)が挿入される。この開始命令は、コプロセッサのプログラム・カウンタを所与のアドレスCP_addressに設定する。さらに、保持命令Hold_task(HP_address)が挿入される。この保持命令は、高優先度スタック６２から現在の高優先度タスクをポップさせ、その高優先度タスクの次のアドレスHP_addressを保存する。コプロセッサ・タスクCP3の実行後に、停止命令Stop(HP_address)が加えられる。これは、高優先度タスクが保持されている場合、低優先度スタック６４に、低優先度タスクの次のアドレスLP_addressを保存し、高優先度タスクの次のアドレスを高優先度スタック６２にプッシュする。
【００３６】
以下では、図７および図８を参照しつつ処理例を説明する。この例は、図５の非プリエンプティブ同期命令に基づいている。
【００３７】
具体的には、図７（ａ）は、オペレーティング・システムの依存性解析の結果を示し、図７（ｂ）はスタック・メモリ６０の内容を示し、図７（ｃ）は主プロセッサ２０で走っているプログラムを示している。高優先度タスクが現れると、それはタスク・スケジューリング・ユニット５０によってランタイム取扱ユニット４０を介して高優先度スタック６２上にプッシュされる。それにより主プロセッサ２０のプログラム・カウンタは、メモリ・システム１０の、この高優先度タスクHP2が位置しているメモリ・アドレスに切り換わる。同様に、第一の低優先度タスクLP1は、対応するプッシュ動作によって低優先度スタック６４の一番上にプッシュされる。
【００３８】
図８は、第一の高優先度タスクHP2が終了し、切り換え命令を発するときの状況を示している。高優先度スタック６２が次の高優先度タスクHP4を含んでいる場合、ランタイム取扱ユニット４０によるスタック・メモリ６０へのアクセスの制御は、その高優先度タスクが同時に走っているコプロセッサ・タスクCP3への依存性を有するとの判断がタスク・スケジューリング・ユニット５０によってされない限り、その高優先度タスクが実行されるように行われる。高優先度スタック６２が空であるか、高優先度スタック６２上の次の高優先度タスクが同時に走っているコプロセッサ・タスクCP3への依存性を有する（これは、図８（ａ）に示すように、高優先度タスクHP4がコプロセッサ３０が完了するまで待たなければならないことを意味する）場合には、プログラム・カウンタは、低優先度スタック６４上の第一の低優先度タスクLP1にジャンプし、コプロセッサ３０からの割り込みが受領されるまでこのタスクを実行する。この割り込みは、低優先度タスクLP1の中断を引き起こし、プログラム・カウンタを、高優先度スタック６２の列または待ち行列における次の高優先度タスクHP4に変更する。
【００３９】
好ましい実施形態によれば、同期命令によってトリガーされる機能呼び出しが高優先度タスクまたはコプロセッサ・タスクへのコールまたはジャンプとして扱われる限り、手続き型言語のサポートは維持される。対応する機能は高優先度スタック６２上にプッシュされるか、コプロセッサ・タスクとして呼び出される。
【００４０】
図９は、タスク・スケジューリング・ユニット５０によって実行される制御手順の概略的な流れ図を示している。ステップＳ１００では、次の命令コード（アセンブリコード）がメモリ・システム１０から取り出され、ステップＳ１０１において、もしあれば、同期命令が抽出される。次いで、ステップＳ１０２で同期命令がデコードされて、タスク・スケジューリングのための同期命令の種類が判別される。好ましい実施形態によれば、デコード・ステップＳ１０２は、コプロセッサ３０のための開始命令を判別しうる。それにより手続きはステップＳ１０３に分岐し、そこでコプロセッサ３０のプログラム・カウンタPC2が所与のコプロセッサ・アドレスに設定され、高優先度タスクの次のアドレスが渡される。他方、デコード・ステップＳ１０２でコプロセッサ３０のための停止命令が検出される場合、手続きはステップＳ１０４に分岐し、そこでタスク・スケジューリング・ユニット５０は、低優先度スタック６４の一番上を低優先度タスクの次のアドレスで置き換え、高優先度タスクの次のアドレスを高優先度スタック６２上にプッシュするはたらきをする。プリエンプティブな高優先度タスクが許容または実装される任意的な場合では、ステップＳ１０２で保持命令がデコードされることもあり、その場合、手続きはステップＳ１０５に分岐して、タスク・スケジューリング・ユニット５０は、高優先度スタック６２から現在のタスクをポップさせ、高優先度タスクの次のアドレスを格納するはたらきをする。それにより、優先度を付けられたタスク間での高効率のタスク切り換えが、粒度の細かいタスクのための0サイクルのタスク切り換えとして達成できる。
【００４１】
まとめると、タスク・スケジューリング方式が提案される。プログラム・ルーチンのタスクは、種々の優先度の少なくとも二つのメモリ・スタック機構に、割り当てられた優先度に基づいて選択的に格納される。少なくとも二つのプロセッサ手段で実行されるタスクの切り換えは、プログラム・ルーチンに挿入された同期命令への応答として前記少なくとも二つのメモリ・スタック機構にアクセスすることによって制御される。それにより、優先度を付けられたタスク間の、効率的な0サイクルのタスク切り換えが達成できる。
【００４２】
上記の好ましい実施形態に基づく提案される解決策は、共有されるレジスタの場合にコンテキスト切り換えまたは状態保存のために最終的な余剰サイクルのための留保がある、いかなる主プロセッサ／コプロセッサの筋書きにおいても導入できることを注意しておく。特に、本発明は、高優先度のタスクが実行されていないときに空の処理スロットをタスクが埋めることのできるいかなる領域においても適用可能である。そのような領域の例は、イメージ・ビジョン、ユーザー対話および背景場面のあるゲーム用途、危険な状況および危険でない状況をもつセキュリティ用途、危険な状況および危険でない状況をもつ衝突検出用途、誤方向処理および経路追跡処理をもつGPS（全地球測位システム）用途、ストリーミング処理およびユーザー・インターフェース処理をもつリアルタイム信号処理、通話処理およびゲーム処理をもつ携帯電話用となどである。
【００４３】
さらに、スタック・メモリ６０の構造は、上記の両側メモリ・スタックに制限されず、他の型のメモリにおけるいかなる種類のスタック・メモリまたはスタック・メモリ機構をも使用できることを注意しておく。さらに、本発明は、二つ以上のプロセッサ装置間でタスクを切り換えるために使用できる。もちろん、スタック・メモリ６０との関連でタスク切り換えを制御するために、他の表記法を用いた他の同期命令を使うこともできる。それらは、いかなる方法またはいかなる長さで従来式または通常のプログラム命令に組み込まれ、また追加えられてもよい。よって、好ましい実施形態は、付属の特許請求の範囲内においてさまざまでありうる。
【００４４】
上記の実施形態は本発明を限定するのではなく解説するものであり、当業者は付属の請求項で定義される本発明の範囲から外れることなく多くの代替的な実施形態を設計できるであろうことは注意しておくべきである。請求項において、括弧内に参照符号があったとしてもその請求項を限定するものと解釈してはならない。動詞「有する」などは請求項や明細書全体において挙げられているもの以外の要素またはステップの存在を排除しない。要素の単数形の言及はそのような要素の複数の存在を排除しない。逆もまたしかり。ある種の施策が互いに異なる従属請求項において言及されていたとしても、それらの施策の組み合わせが有利に使用できないことを示すものではない。
【図面の簡単な説明】
【００４５】
【図１】好ましい実施形態に基づくプロセッサ装置のブロック概略図である。
【図２ａ】タスク切り換えでの並列化された実行フローの例を示すための概略図である。
【図２ｂ】タスク切り換えでの並列化された実行フローの例を示すための概略図である。
【図２ｃ】タスク切り換えでの並列化された実行フローの例を示すための概略図である。
【図３ａ】ランタイム遅延に依存する異なる実行トレースの概略的な表現の一つを示す図である。
【図３ｂ】ランタイム遅延に依存する異なる実行トレースの概略的な表現の一つを示す図である。
【図４ａ】好ましい実施形態に基づく両側スタック・メモリを示す図である。
【図４ｂ】好ましい実施形態に基づく種々の優先度レベルのための別個のスタック・メモリを示す図である。
【図５】オーバーヘッドのない同期命令実行の概略的な流れ図である。
【図６】好ましい実施形態に基づく、高優先度タスクのプリエンプションを許容する同期命令の実行の概略的な流れ図である。
【図７ａ】好ましい実施形態に基づく、同期命令の実行の第一の例を示す概略的な流れ図の一部である。
【図７ｂ】好ましい実施形態に基づく、同期命令の実行の第一の例を示す概略的な流れ図の一部である。
【図７ｃ】好ましい実施形態に基づく、同期命令の実行の第一の例を示す概略的な流れ図の一部である。
【図８ａ】好ましい実施形態に基づく、同期命令の実行の第二の例を示す概略的な流れ図の一部である。
【図８ｂ】好ましい実施形態に基づく、同期命令の実行の第二の例を示す概略的な流れ図の一部である。
【図８ｃ】好ましい実施形態に基づく、同期命令の実行の第二の例を示す概略的な流れ図の一部である。
【図９】好ましい実施形態に基づく、同期命令の処理の概略的な流れ図である。
【符号の説明】
【００４６】
Ｓ１００  命令コードを取り出し
Ｓ１０１  挿入されている同期命令を抽出
Ｓ１０２  デコード命令
Ｓ１０３  コプロセッサのプログラム・カウンタを所与のCPアドレスに設定し、HPタスクの次のアドレスを渡す
Ｓ１０４  LPスタックの一番上を、LPタスクの次のアドレスで置き換え、HPタスクの次のアドレスをHPスタックにプッシュする
Ｓ１０５  HPスタックから現在のタスクをポップさせ、HPタスクの次のアドレスを保存
【図１】
2008522277.tif 000003
2008522277.tif 000004
【図２ａ】
2008522277.tif 000005
【図２ｂ】
2008522277.tif 000006
【図２ｃ】
2008522277.tif 000007
【図３ａ】
2008522277.tif 000008
【図３ｂ】
2008522277.tif 000009
【図４ａ】
2008522277.tif 000010
【図４ｂ】
2008522277.tif 000011
【図５】
2008522277.tif 000012
【図６】
2008522277.tif 000013
【図７ａ】
2008522277.tif 000014
【図７ｂ】
2008522277.tif 000015
【図７ｃ】
2008522277.tif 000016
【図８ａ】
2008522277.tif 000017
【図８ｂ】
2008522277.tif 000018
【図８ｃ】
2008522277.tif 000019
2008522277.tif 000020
【国際調査報告】
2008522277.tif 000021
2008522277.tif 000022
2008522277.tif 000023