(57)【要約】      （修正有）【課題】サブタスクによってタスクを実行するためのシステム、デバイス、および方法を提供する。【解決手段】複数のサブタスクが実行用に選択され（４１０）、実行順序が決定される（４１５）。先行するサブタスクのプロローグ（４３５）と後続のタスクのエピローグ（４３０）とが実行される。同じプロローグおよびエピローグが複数のサブタスクの対に用いられてもよい。このプロローグおよびエピローグの実行によって、サブタスクの連続的な実行が可能となる。【選択図】図４
2010218546.tif 000002
【特許請求の範囲】
【請求項１】
計算装置によってサブタスクを実行するための方法であって、
コントローラによって実行されるサブタスクを、呼出関数によって、実行時に選択するサブタスク選択工程と、
前記サブタスクの実行順序を、前記呼出関数によって、実行時に決定する実行順序決定工程と、
前記実行順序に従って前記サブタスクを実行するサブタスク実行工程と、サブタスク実行工程は、連続するサブタスクの間のエピローグおよびプロローグを実行し、サブタスクの順次実行を可能とすることを含むことと、を含む方法。
【請求項２】
前記エピローグおよびプロローグは第１のサブタスクによって実行されることと、前記呼出関数は第２の連続するサブタスクを実行することには関与しないことと、を含む請求項１に記載の方法。
【請求項３】
前記エピローグと前記プロローグとは同時に実行される、請求項１に記載の方法。
【請求項４】
サブタスク実行工程の前に、前記呼出関数は前記サブタスクのうちの１つ以上に関連した実行可能コード部分の少なくとも一部を上書きする、請求項１に記載の方法。
【請求項５】
前記実行可能コード部分の上書きによって、第１のサブタスクと第２のサブタスクとが連続的に実行される、請求項４に記載の方法。
【請求項６】
サブタスク実行工程は、連続する２つのサブタスクと切替コードとを関連付けることを含み、前記切替コードは、前記連続するサブタスクのうちの第１のサブタスクに関連したエピローグと、同連続するサブタスクのうちの続くサブタスクに関連したプロローグとを実行することが可能である、請求項１に記載の方法。
【請求項７】
前記切替コードの関連付けは実行時に行われる、請求項６に記載の方法。
【請求項８】
実行可能なエピローグ、実行可能なプロローグ、実行可能な呼出関数、および複数の実行可能なサブタスクを記憶するメモリと、
呼出関数、エピローグおよびプロローグ、ならびにサブタスクを実行することの可能なコントローラと、を備えるシステムであって、
前記実行することは、
前記コントローラによって実行されるサブタスクを、前記呼出関数によって、実行時に選択するサブタスク選択工程と、
選択した前記サブタスクの実行順序を、前記呼出関数によって、実行時に決定する実行順序決定工程と、
前記実行順序に従って前記サブタスクを実行するサブタスク実行工程と、を含み、
サブタスク実行工程は、連続するサブタスクの間のエピローグおよびプロローグを実行し、サブタスクの順次実行を可能とすることを含む、システム。
【請求項９】
前記エピローグおよび前記プロローグは１つのサブタスクによって実行される、請求項８に記載のシステム。
【請求項１０】
前記エピローグおよび前記プロローグは同時に実行される、請求項８に記載のシステム。
【請求項１１】
サブタスク実行工程の前に、前記呼出関数は前記サブタスクのうちの１つ以上に関連し
た実行可能コード部分の少なくとも一部を上書きする、請求項８に記載のシステム。
【請求項１２】
前記実行可能コード部分の上書きによって、第１のサブタスクおよび第２のサブタスクが連続的に実行される、請求項１１に記載のシステム。
【請求項１３】
サブタスク実行工程は、連続する２つのサブタスクと切替コードとを関連付けることを含み、前記切替コードは、前記連続するサブタスクのうちの第１のサブタスクに関連したエピローグと、同連続するサブタスクのうちの続くサブタスクに関連したプロローグとを実行することが可能である、請求項８に記載のシステム。
【請求項１４】
前記切替コードとサブタスクとの関連付けは実行時に行われる、請求項１３に記載のシステム。
【請求項１５】
コンピュータ上で実行されたとき、コンピュータに、
コントローラによって実行されるサブタスクを、呼出関数によって、実行時に選択するサブタスク選択工程と、
前記サブタスクの実行順序を、前記呼出関数によって、実行時に決定する実行順序決定工程と、
前記実行順序に従って前記サブタスクを実行するサブタスク実行工程と、
を実行させる命令の記憶されているコンピュータ可読記憶媒体を含む物品であって、
サブタスク実行工程は、連続するサブタスクの間のエピローグおよびプロローグを実行し、サブタスクの順次実行を可能とすることを含む、物品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、サブタスクによって複雑なタスクを実行するためのシステムおよび方法に関する。
【背景技術】
【０００２】
リソースの限られた計算装置（例えば、携帯電話機、携帯情報端末（ＰＤＡ）、その他のデバイス）の設計者は、相反する問題に常に直面している。新たな機能およびより良い性能に対する要求が常に存在する一方、寸法の減少および価格の低減に対する要求が存在する。そうした問題は、そうしたデバイスのメモリ必要量を減少させるとともに、プロセッサまたはコントローラの効率を上昇させることによって対処される。
【０００３】
一部の実装例では、複雑なタスクを複数のサブタスクへ分け、それらのサブタスクから複数の関数を生成することによって、プロセッサ効率を増加させている。例えば、メインのタスクは、サブタスクＡ、サブタスクＢ、およびサブタスクＣに分けられる。２つの関数、すなわち、サブタスクＡ→サブタスクＣ→サブタスクＢの実行順序を含む関数Ｘと、サブタスクＣ→サブタスクＡ→サブタスクＢの実行順序である関数Ｙとが定義される。関数Ｘ，Ｙは、実時間のコンテキスト、条件、入力パラメータ、フロー、その他の環境に従って実行され得る。そのような解決法は、必要なコードのみが実行され、サブタスクの呼出数が小さいので、プロセッサのサイクルの点では効率的であるかも知れない。しかしながら、そのような解決法は、サブタスクコードまたは命令が重複するためにコードサイズが大きくなる場合があるので、メモリ消費の点では非効率的である。例えば、上記の例では、関数Ｘ，ＹにおいてサブタスクＡ，Ｂ，Ｃのコードが重複している。
【０００４】
他の実装例では、入力パラメータ、コンテキスト、条件、その他の環境を解析し、実行されるサブタスクを選択する。そのような解決法は、メモリに保持されることが必要なのは各サブタスクについて１つのコピーなので、メモリ消費の点では効率的であるかも知れない。しかしながら、そのような解決法は、サブタスクを呼び出して呼出関数に戻ることに余分なプロセッササイクルが必要となるため、プロセッササイクルの点では非効率的な場合がある。
【図面の簡単な説明】
【０００５】
【図１】本発明の実施形態による計算装置の論理ブロック図。
【図２Ａ】従来技術によるサブタスク実行の実装例を示す図。
【図２Ｂ】従来技術によるサブタスク実行の実装例を示す図。
【図２Ｃ】本発明の実施形態による代表的なサブタスク実行を示す図。
【図３Ａ】本発明の実施形態による代表的なサブタスク実行を示す図。
【図３Ｂ】本発明の実施形態による代表的なサブタスク実行を示す図。
【図３Ｃ】本発明の実施形態による代表的なサブタスク実行を示す図。
【図３Ｄ】本発明の実施形態による代表的なサブタスク実行を示す図。
【図３Ｅ】本発明の実施形態による代表的なサブタスク実行を示す図。
【図４】本発明の実施形態による代表的なフローチャート。
【発明を実施するための形態】
【０００６】
本発明の実施形態では、複雑なタスクを実行するために複数のサブタスクを選択する。サブタスクは所定のインタフェースまたは実行スキームに準拠してよい。現在のサブタスクは、所定のエピローグと所定のプロローグとを含む、所定の実行可能なコード部分を実行することができる。複数のサブタスクは、実行時に決定され得る順序に従って第１のサ
ブタスクから第２のサブタスクへとコントローラの制御の実行および転送を行うように、スケジューリングされてよい。
【０００７】
本発明の実施形態について、添付の図面の図によって限定ではなく例として示す。図面では、似た参照符号は、対応する、類似の、または同様の要素を示す。
図示を簡単かつ明瞭なものとするため、図に示す要素は必ずしも縮尺通りに描かれてはいないことが認められる。例えば、一部の要素の寸法が明瞭さのため他の要素に対して誇張されている場合がある。
【０００８】
以下の詳細な説明では、本発明についての充分な理解を提供するために多くの具体的な詳細について述べる。しかしながら、本発明がそれらの特定の詳細なしで実施されてよいことが当業者には理解される。他の例では、本発明を不明瞭にしないように、周知の方法、手続、構成要素、モジュール、ユニット、および／または回線については詳細に記載していない。
【０００９】
本発明の実施形態ではこの点に関して限定していないが、例えば、「処理」、「計算」、「算出」「決定／判定」、「確立」、「解析」、「チェック」などの用語は、コンピュータのレジスタおよび／またはメモリ内の物理的な（例えば、電子的な）量として表現されるデータを操作する、および／またはそうしたデータを同様にコンピュータのレジスタおよび／またはメモリまたは演算および／または処理を実行する命令を記憶できる他の情報記憶媒体内の物理的な量として表現される他のデータへと変換する、コンピュータ、計算プラットフォーム、コンピュータシステム、または他の電子計算装置の演算および／または処理を指す場合がある。
【００１０】
本発明の実施形態ではこの点に関して限定していないが、本明細書において用いられる用語「複数」には、例えば、「多」または「２つ以上」が含まれる。用語「複数」は、明細書の全体を通じて２つ以上の構成要素、デバイス、要素、ユニット、パラメータなどを記載するために用いられる。例えば、「複数の局」には２つ以上の局が含まれる。
【００１１】
明示的に述べていない限り、本明細書に記載の方法の実施形態は、特定の順番またはシーケンスに拘束されない。これに加えて、記載の方法の実施形態のうちの幾つかまたはその要素は、同じ時点または重なる時点にて発生してもよい、または実行されてもよい。当技術分野において知られているように、関数、タスク、サブタスク、またはプログラムなどの実行可能コード部分の実行は、関数、プログラム、または他の構成要素の実行を指す場合がある。以下において用いるようなサブタスク、関数、または実行可能コードの実行は、コントローラ、中央処理装置（ＣＰＵ）、または当技術分野において知られている任意の他の適用可能な計算要素による、サブタスク、関数、または実行可能コードの実行として理解または解釈される。したがって、「サブタスクＸの実行」などのフレーズは、例えば、「コントローラまたはプロセッサによるサブタスクＸの実行」を意味し、「呼出関数Ｙが実行する」などのフレーズは、例えば、「コントローラまたはプロセッサによる呼出関数Ｙの実行」として解釈されると理解される。
【００１２】
計算装置１００を示す図１を参照する。本発明の実施形態では、計算装置１００は、メモリ１０４、中央処理装置（ＣＰＵ）すなわちコントローラ１０１、記憶装置１４０、オペレーティングシステム（ＯＳ）１０２、入力装置１０５、および出力装置１０６を備えることができる。本発明の実施形態では、記憶装置１４０は、任意の適切な記憶装置（例えば、ハードディスク、フラッシュメモリデバイス、ユニバーサルシリアルバス（ＵＳＢ）デバイス）であってよい。入力装置１０５は、マウス、キーボード、タッチスクリーンまたは任意の適切な入力装置を含み、出力装置１０６は、１つ以上のディスプレイ、スピーカ、および／または任意の他の適切な出力装置を含む。入力装置１０５および／または
出力装置１０６は、ネットワークインタフェースカード（ＮＩＣ）、無線通信サブシステム、または任意の他のＩ／Ｏデバイスなど、任意の適用可能な入力／出力（Ｉ／Ｏ）デバイスを含む。
【００１３】
本発明の実施形態では、代表的なアプリケーション１３０は、例えば記憶装置１４０から、メモリ１０４へとロードされることができ、オペレーティングシステム１０２に従って動作するコントローラ１０１によって実行されることができる。例えば、アプリケーション１３０は、通常、携帯電話機、ＰＤＡ、その他の計算装置におけるコントローラによって実行される、任意のソフトウェアツール、プログラム、またはアプリケーションであってよい。メモリ１０４へとロードされるアプリケーション１３０は、記憶装置１４０からロードされてもよく、任意の他の記憶装置からロードされてもよく、有線または無線のネットワークを通じてロードされてもよい。他のオブジェクトがメモリ２０４へとロードされ、アプリケーション１３０などのアプリケーションによって用いられることもできる。サブタスクＡ，Ｂ，Ｃも、コントローラ１０１によって、例えば記憶装置１４０から、メモリ１０４へとロードされてよい。これに代えてまたはこれに加えて、メモリ１０４は、計算装置１００の電源が切られるときにもアプリケーション１３０およびサブタスクＡ〜Ｃを記憶することの可能な不揮発性メモリであることができる。記憶装置１４０は、サブタスク１４１など追加のオブジェクトを、またはメモリ１０４へとロードされ、コントローラ１０４、計算装置１００上で動作しているアプリケーションまたはプログラムによって実行または使用される追加のアプリケーション、プログラム、デジタル構造、もしくはオブジェクト（図示せず）を記憶することもできる。
【００１４】
従来技術による実装例を示す図２Ａおよび図２Ｂと、本発明の実施形態に従って代表的な一実装例を示す図２Ｃとを参照する。サブタスク１，２，３，４は、コントローラによってタスクを実行するために、呼出関数２１０によって用いられる。図２Ａにおける１５の列２２０Ａによって示すように、４つのサブタスク１，２，３，４から、予め、１５の異なる組み合わせが用意される。そのような１５の異なる組み合わせはメモリ（例えば、装置１００のメモリ１０４）に記憶されることができ、コンテキスト、環境、または必要に従って、適切な組み合わせが呼出関数２１０によって呼び出される。例えば、第１の状況では、２２１によって示すように、コントローラによってサブタスク１のみが実行される。第２の状況すなわちシナリオでは、サブタスク１およびサブタスク４の組み合わせが必要とされ、それに従って、２２２によって示すように、コントローラによって実行される。また、第３の状況では、２２３によって示すように、コントローラによるサブタスク１，３，４の実行が必要とされる。この実装例では、４つのサブタスクの幾つかのまたは全ての可能な組み合わせが、予めメモリに記憶され、必要に応じて、適切な組み合わせが呼出関数によって呼び出される。しかしながら、２２０Ａによって示す全ての組み合わせを記憶することは、メモリ消費の点から非効率的であることが分かる。
【００１５】
図２Ｂによって示すように、別の実装例は、２２０Ｂによって示すサブタスク１，２，３，４を呼出関数２１０が特定的に呼び出すことを含む。そのような実装例では、呼出関数２１０は、必要される任意の回数、任意の順序で、サブタスク２２０Ｂのうちのの任意の１つを呼び出すことができる。そのような一実装例では、図２Ａに記載した実装例よりも少ないメモリしか必要としない。しかしながら、当技術分野において知られているように、サブタスクを呼び出し、呼び出したサブタスク（例えば、サブタスク１）から呼出関数（例えば、呼出関数２１０）へ実行および／または制御を戻すには、そのサブタスクおよび呼出関数を実行するコントローラに余分な処理サイクルが必要となる場合がある。そのような余分な処理サイクルは、例えば、ポインタ、スタック、および／またはレジスタのリストア、メモリ割当の取り扱いなどに必要となる。
【００１６】
図２Ｃに示すような本発明の実施形態による代表的な一実装例では、各サブタスクにつ
いて１つのコピーしかメモリへロードされなくてよいので、低いメモリ消費を示し、また、呼出関数へ戻ることその他、呼出関数の関与を必要とすることなく、コントローラによって複数のサブタスクが実行されるので、処理サイクルの減少により高い実行効率を示す。本発明の実施形態では、呼出関数２１０は、サブタスク２２０Ｃのうちの任意の１つを呼び出すことができる。呼び出されたサブタスクは別のサブタスクを呼び出すことができ、任意数のサブタスクがそのようにして連鎖することができ、最後のサブタスクは、呼出関数の呼出、実行を行うこと、その他呼出関数に制御および／または実行を戻すことができる。例えば、図２Ｃに示すように、呼出関数２１０はサブタスク１を呼び出し、サブタスク１はサブタスク３を呼び出し、このサブタスク３が続いてサブタスク２を呼び出し、サブタスク２は呼出関数を呼び出し、このようにして複数のサブタスクからなるシーケンスの実行が完了する。したがって、サブタスクはコントローラによって連続的に実行されることができる。２３１によって示すように、一部の場合には、１つのサブタスクから別のサブタスクへ（例えば、示すようにサブタスク３からサブタスク４へ）実行を移すために、小さな（場合によっては予め定義され、予めコンパイルされた）切替コードが必要となる。切替コードおよび他の態様に関するさらなる詳細について、以下に記載する。図２Ｃによって示す（また図２Ａによって示す実装例とは異なる）本発明の実施形態では、各サブタスクについて１つのコピーしかメモリへとロードされない（すなわち、メモリに記憶されない）。したがって、メモリ必要量を劇的に減少させることができる。これに加えて、図２Ｂによって示す実装例とは対照的に、本発明の一実施形態による実行フローには、各サブタスクの実行（例えばコントローラによる）の終了時、呼出関数に戻ることは含まれない。むしろ、呼出関数へ「戻る」こと、その他呼出関数に関与することなく、サブタスクが順々に、連続的におよび／または続けて実行される。なお、本発明の一部の実施形態では、２つ以上のサブタスクが同時に実行されてよい。例えば、呼出関数は、本明細書に記載のように、呼出関数に関与することなく複数のサブタスクが実行され（コントローラによって）、またさらに、サブタスクのうちの幾つかが同じ時間に、同時に実行される（コントローラによって）ように、サブタスクのパラメータ、環境を設定してもよく、例えば、サブタスクのコードを操作してもよい。第１のサブタスクが実行を完了し、第２のサブタスクが実行を開始する前に、呼出関数へ「戻る」必要を取り除くことによって（本明細書においてさらに詳細に記載する）、呼出関数およびサブタスクを実行するコントローラまたはＣＰＵのサイクル数を、実行されるサブタスク数に比例して減少させることができる。
【００１７】
本発明の実施形態によるサブタスクに関連した実行順序を示す、図３Ａを参照する。示すように、サブタスク３１２の実行（コントローラによる）には、実際のサブタスク３１２を実行する前にプロローグ３１０を実行することと、サブタスク３１２の実行の完了時にエピローグ３１５を実行すること（コントローラによって）とが含まれる。当技術分野において知られているように、プロローグ３１０などのプロローグは、サブタスクが、例えば、メモリの割り当て、ポインタの設定、コントローラレジスタの設定、メモリ、コントローラレジスタ、または任意の他の適用可能な構成要素における変数の初期化、および／またはメモリ、コントローラレジスタ、または任意の他の適用可能な構成要素へのデータのロードを実行する前に実行される必要のある、任意の関数またはタスクを含み得る。当技術分野において知られているように、エピローグ３１５などのエピローグは、サブタスクの実行の完了時に必要とされる任意の関数またはタスク、例えば、メモリのクリーニング、コントローラレジスタのリストア、ポインタの設定または解除、コントローラレジスタの設定または解除、メモリ、コントローラレジスタ、または任意の他の適用可能な構成要素の変数の初期化またはリストアし、および／またはメモリ、コントローラレジスタ、または任意の他の適用可能な構成要素へのデータのロード、を含み得る。
【００１８】
本発明の実施形態では、プロローグおよび／またはエピローグは実行可能なコード部分であってよい。そのような実行可能コードは、プログラマによって作成されコンパイルさ
れてよく、サブタスクと様々に関連付けられてよい。例えば、エピローグおよび／またはプロローグ実行可能コードは、各サブタスクの実行可能コードに付属させられるので、効果的にサブタスクの実行可能コードの一部分となることができる。これに代えて、プロローグおよび／またはエピローグ実行可能コードの１つのコピーがメモリに記憶されてもよく、必要なときにサブタスクによってさらに呼び出されてもよい。例えば、呼出関数はメモリへプロローグおよび／またはエピローグ実行可能コードをロードし、そのような実行可能コードに対するポインタをサブタスクに提供することができる。これに代えて、呼出関数は、サブタスクの実行可能コード（例えば、アセンブリコード）を操作して、以前にメモリに記憶したプロローグおよび／またはエピローグ実行可能コードをそれらのサブタスクに実行させてもよい。そのようなサブタスクコードの操作には、プロローグまたはエピローグ実行可能コードをサブタスクに実行させるために必要な、「ジャンプ」、「分岐」、その他の適切な命令などの命令を挿入することが含まれてよい。一部の実施形態では、サブタスクは、一部のサブタスクにまたは全部のサブタスクにも同じプロローグおよび／またはエピローグが適切であるように、設計および実装されることができる。したがって、エピローグおよび／またはプロローグ実行可能コードの１つのコピーがメモリへロードされ、任意数のサブタスクによって使用されることができる。
【００１９】
本発明の実施形態による複数のサブタスクの実行に関連した実行順序を示す、図３Ｂを参照する。ブロック３２０によって示すプロローグ−１のプロセッサによる実行は、呼出関数その他、サブタスク−１を呼び出す（その他サブタスク−１の実行を行う）エンティティによって、開始される。続いて、ブロック３２２によって示すサブタスク−１が実行される。ブロック３２４によって示すように、エピローグ−１は、サブタスク−１の特定の関数の実行の完了時に、例えばサブタスク−１によって、実行される。次に、ブロック３２６によって示すように、サブタスク−２の実行の用意をするプロローグ−２が、例えばサブタスク−１によって、実行され、続いて、ブロック３２８によって示すようにサブタスク−２が実行される。同様に、ブロック３３０によって示すエピローグ−２とブロック３３２によって示すプロローグ−３とが、サブタスク−３（図示せず）の実行前に、サブタスク−２によって実行される。例示的なサブタスクの数しか示していないが、本発明の実施形態では、本明細書に記載し図３Ｂ，３Ｃ，３Ｄに示すフローに従って、任意数のタスクまたはサブタスクが実行されてよい。なお、本明細書に記載の複数のサブタスクの実行には、呼出関数が限定的に関与してもよく、呼出関数が全く関与しなくてもよい。
【００２０】
本発明の実施形態による複数のサブタスクの実行に関連した実行順序を示す、図３Ｃを参照する。図３Ｃには、複数のサブタスクの間における、プロローグ、エピローグ、および特定のサブタスク関数の実行の分散を示す。ブロック３４０，３５０，３６０は、本発明の実施形態による３つの代表的なサブタスクの実行を概念的に表している。記載のサブタスクによって他の関数またはタスクが実行される場合があるが、特定のサブタスクの関数、エピローグ、およびプロローグなど、代表的な関連する関数のみを記載および図示する。
【００２１】
ブロック３４１によって示すように、サブタスク−１は、サブタスク−１の特定の関数を実行することができる。サブタスク−１は、ブロック３４２によって示すエピローグ−１およびブロック３４３によって示すプロローグ−２をさらに実行することができ、ここで、プロローグ−２はブロック３５０によって示すサブタスク−２の実行の前に必要な任意の用意を含み、エピローグ−１は、サブタスク−１が実行を完了した後に実行されるのに必要な任意のタスクを含む。同様に、ブロック３５０によって示すサブタスク−２は、ブロック３５１によって示すその特定の関数と、ブロック３５２のエピローグ−２によって示すそのエピローグと、ブロック３５３によって示すプロローグ−３とを実行することができ、ここで、プロローグ−３はブロック３６０によって示すサブタスク−３の実行のための環境、コンテキスト、および／または他のパラメータの用意または設定を行い、エ
ピローグ−２は、サブタスク−２の実行の完了時に必要な任意の関数、演算、または処理を含む。同様に、ブロック３６０によって示すサブタスク−３は、特定のサブタスク関数（３６１）、エピローグ−３（３６２）、およびプロローグ−４（３６３）の実行を含む。
【００２２】
示してはいないが、サブタスク−２にサブタスク−３が続くのと同様にして、ブロック３６０によって示すサブタスク−３に任意数のサブタスクが続いてよい。例えば、サブタスク−３の実行にサブタスク−４（図示せず）の実行が続いてよく、したがって、プロローグ−４がサブタスク−３によって実行されてよい。これに代えて、プロセッサまたはコントローラの実行および／または制御は、サブタスク−３から、サブタスク−１の呼出または開始を行った呼出関数または呼出エンティティへ戻ってもよい。
【００２３】
本発明の実施形態では、エピローグまたは他の関数の実行は、プロローグの実行と並列に実行されてよい。例えば、図３Ｃのサブタスク−２は、エピローグ−２（３５２）およびプロローグ−３（３５３）を同時に実行することができる。当技術分野において知られているように、コントローラまたはプロセッサは、１つのサイクルで複数の演算を実行し得る。したがって、コントローラ（例えば、図１のコントローラ１０１）は、エピローグ−２（３５２）およびプロローグ−３（３５３）を同時に実行してもよく、それらの実行が重なっていてもよい。そのような並列な、同時の、または部分的に同時の実行は、図３Ｃで左から右へ向かう仮想の時間線に沿ってエピローグ−２およびプロローグ−３、またはエピローグ−３およびプロローグ−４が並列に示されていることによって強調される。
【００２４】
本発明の実施形態では、複数の異なるサブタスクが、共通もしくは標準的な方式、プロトコル、またはインタフェースを共有するように、設計および実装されてよい。そのような場合、現在のサブタスクのプロローグと、次のまたは後続のサブタスクのエピローグとを実行する同じモジュールまたは実行可能コードは、同じプロローグおよびエピローグが複数のサブタスク対に適切な場合があるので、複数のサブタスクの実行を連鎖させる、すなわちリンクするために用いられることができる。
【００２５】
例えば、複数のサブタスクは、それらが共通のプロローグおよび共通のエピローグを共有するように設計および実装されてよい。したがって、第１のサブタスクはその特定の関数を実行し、次いで、共通のモジュールまたは共通の実行可能コード部分を実行する。ここで、そのような共通のまたは予め定義した実行可能コードは、共通のエピローグおよび共通のプロローグコードを実行する。共通のエピローグおよびプロローグの実行に続いて、第２のサブタスクが実行を行うことができ、例えば、第１のタスクは、その「戻り」アドレスを適切に修正することによって、第２のタスクに実行を移すことができる（例えば、呼出関数に「戻る」代わりに、サブタスクが別のサブタスクに「戻る」こともできる）。このように、共通の実行可能部分によって実行される共通のエピローグ／プロローグ対によって、任意数のサブタスクを連鎖させることができる。そのように実行の連鎖した、リンクした、その他関連したサブタスクは、呼出関数が監督、管理その他、実行フローに関与する必要なく、所定の順序で（例えば、順々に、一部を逐次的にかつ一部を並列に、または同時に）実行されてよい。
【００２６】
エピローグおよび／またはプロローグの実行は、上記の例の第１のサブタスクまたは上記の例の第２のサブタスクによって、すなわちそれらのサブタスクのコンテキストにおいて、行われてよい。例えば、上記の例の第１および第２のサブタスクを実行させる呼出関数は、上記の例の第１、第２、または第１および第２のサブタスクの実行可能コードを、例えば、第１のサブタスクがその特定のタスクの実行完了時にエピローグおよびプロローグを含む予め定義されたコード部分の実行を開始し、エピローグおよびプロローグが実行された後、さらに第２のサブタスクを実行させるように、操作することができる。
【００２７】
本発明の実施形態は、任意の信号処理分野（例えば、音、画像、生物学的分野（例えば、心電図）、レーダ技術に関係する信号の解析、解釈、操作）に適用可能である。本発明の実施形態は、そのような例示的な信号のフィルタリング（例えば、ノイズ分離）、記憶、圧縮および／または復元など態様において利用できる。本明細書に記載の方法は、次に限定されないが、コントローラ、チップ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）またはコンピュータの中央処理装置（ＣＰＵ）など、任意の適用可能または適切な計算装置上に実装されることができる。
【００２８】
実装の一例は、信号処理の分野におけるものである。例えば、画像または映像処理（例えば、当技術分野において知られているビデオデブロッキング（ｖｉｄｅｏ  ｄｅｂｌｏｃｋｉｎｇ））がある。当技術分野において知られているように、ビデオデブロッキングは、低品質ビデオおよび／または高圧縮ビデオからブロック様アーチファクトを除去するために用いることができる。デブロッキングによって、全体的な映像品質は大きく向上させることができる。デブロッキングは、２つの隣接したブロック間のエッジのフィルタリングを行うことを含む場合がある。各エッジに対し、何種類かのフィルタを用いることもできる。例えば、リアルビデオ９（ｒｅａｌ  ｖｉｄｅｏ  ９）コーデックでは、上および左のエッジには、「強（ｓｔｒｏｎｇ）」、「通常（ｎｏｒｍａｌ）」、または「弱（ｗｅａｋ）」フィルタ関数のうちの１つによってフィルタリングが行われ、下のエッジには、「通常」および「弱」フィルタ関数のうちの１つによってフィルタリングが行われる。したがって、各ブロックについて、選択され得るフィルタ関数の実行順序の組み合わせは、３×３×２＝１８通りである。加えて、フィルタは２回以上実行される場合もある。例えば、１つ以上のフィルタ関数が出力品質を改良するために２回以上実行される場合があるため、上記において述べた可能な組み合わせの数は、実際には、さらに大きくなり得る。
【００２９】
本発明の実施形態では、個々のフィルタ関数は、一度符号化されたら、サブタスクとして記憶されてよい。呼出関数は、必要な一連のフィルタ関数（サブタスク）のシーケンスを決定し、さらに必要なパラメータを設定し（例えば、ポインタを提供する、「戻る」アドレスを操作など）、場合によってはそれ以上に呼出関数を介入させることなく、一連のフィルタ関数を順々に実行させることができる。そのような実行は、従来技術において知られているように呼出関数によって１つのフィルタ関数の後に別のフィルタ関数を実行すること（呼出関数は、実行の終了時にその呼出関数へ「戻る」各々の必要なフィルタ関数を特定的に「呼び出す」必要がある）と比較して優れている。
【００３０】
本発明の別の実施形態は、映像処理（例えば、圧縮およびイントラ予測）の分野におけるものである。イントラ予測は、１つの映像ブロックのコンテンツまたは関連情報を同じ画像の近隣のピクセルまたはブロックを用いて予測する技術である。ビデオデコーダにおけるイントラ予測処理には複数の予測モードが含まれ、各予測モードには複数の異なる補間モードが用いられ得る。さらに、各映像ブロックが異なる予測モードを必要とする場合がある。
【００３１】
本発明の実施形態では、各補間モードはサブタスクとして実装されることができる。したがって、呼出関数は、本明細書に記載の方法に従って、必要なまたは所望の補間モード（および関連するサブタスク）を選択し、サブタスクの必要な実行順序を決定し、任意の必要なパラメータを設定して第１のサブタスクを呼び出し、第１のサブタスクは、その実行の終了時に次のサブタスクを呼び出す、などとなる。
【００３２】
本発明の実施形態では、複数のサブタスクは共通のまたは同じプロローグおよび／またはエピローグを共有することができる。そのような場合、そうしたサブタスク全てによっ
て、あるエピローグおよび／またはプロローグについて同じコードが実行される。本発明の実施形態による複数のサブタスクの実行に関連した実行順序を示す、図３Ｄを参照する。示すように、ブロック３４０によって示すサブタスク−１は、その特定の関数３４１の実行を終了するとき、ブロック３７２によって示すエピローグおよびプロローグを実行する。ブロック３７２は、その実行の完了したサブタスクのエピローグと、続くサブタスクのプロローグとの両方を実行するモジュールを表している。そのような実行は並列化されてもよく、すなわち、エピローグおよびプロローグが同時にまたは同じ時間に実行されてもよい。本発明の実施形態では、サブタスク−１、サブタスク−２、およびサブタスク−３におけるブロック３７２によって示すように、ブロック３７２によって表される同じコードが、１つのサブタスクから別のサブタスクへ実行を移すために、任意数のサブタスクによって実行されてよい。現在のサブタスクのエピローグと、次のまたは続くサブタスクのプロローグとを実行するために同じモジュール（エピローグ／プロローグモジュール）を用いることは、予め定義したインタフェース、方式、またはプロトコルに従って複数のサブタスクを設計および実装することによって可能となる。
【００３３】
したがって、サブタスク−１に続いて実行されるサブタスク−２（ブロック３５０によって示す）は、その特定の関数の実行を完了するとき、ブロック３７２によって示す同様の、同じ、または同一のエピローグおよびプロローグコードを実行することができる。任意数のサブタスクがこのように連鎖してよいこと、すなわち、任意数のサブタスクが順次（例えば、逐次的に）実行できることや、先のタスクのエピローグと次のタスクのプロローグとを実行するのと同じコード（例えば、ブロック３７２によって示すように）が複数のサブタスクの実行の間に実行されてよいことが認識される。本明細書に記載するように、エピローグまたは他の関数の実行は、プロローグの実行と並列に実行されてよい。したがって、ブロック３７２におけるエピローグおよびプロローグの実行は並列に行われてよく、例えば、本明細書に記載するようにブロック３７２におけるエピローグおよびプロローグのコードは同時に実行されてよい。
【００３４】
本発明の実施形態では、また、同じエピローグおよびプロローグがサブタスク全てに適切であるとは限らない場合には、小さな（場合によっては予め定義された）切替コードが導入されてもよい。切替コードは実行可能コードの部分または区分であってよく、２つのサブタスクに特定的なエピローグおよびプロローグ実行可能コードを含んでよい。切替コードはメモリに記憶されてもよく、プロローグおよびエピローグ実行可能コードに関して本明細書に記載したのと同様にして、関連するサブタスクのコードに付属させられてもよい。代表的なサブタスク実行フローを示す図３Ｅを参照する。図３Ｅに示す例では、ブロック３６０によって示すサブタスク−３は、ブロック３７２によって示すエピローグおよびプロローグが正しくサブタスク−３を扱うようには実装不可能である。そのような場合、ブロック３７２によって示すような標準的なエピローグおよびプロローグモジュールの代わりに、切替コード３９０を実行することができる。切替コード３９０には、現在のサブタスクのエピローグおよび続くまたは次のサブタスクのプロローグの実行が含まれてよい。したがって、ブロック３７２によって示すものなど標準的なエピローグ／プロローグモジュールが用いられることを可能とする標準的な方式、プロトコル、またはインタフェースに準拠しないサブタスク対には、切替コードが必要な場合がある。
【００３５】
本発明の実施形態では、複数のサブタスクは、例えばコンパイル時に、ブロック３７２によって示すものなど標準的なまたは同じエピローグおよび／またはプロローグを含むことができる。そのようなサブタスクは、ライブラリその他の形態により保持され、呼出関数によって本明細書に記載したような実行のため、自由に呼び出され、連鎖されてよい。呼出関数は、実行時に、または実時間で、そのような標準的な、同様の、または同一のエピローグおよび／またはプロローグ方式によってコンパイルされた、またはそのような方式をサポートする任意数のサブタスクを連鎖させることができる。そのようなエピローグ
および／またはプロローグによって、呼出関数または他のエンティティの介入なしで、そのようなタスクが１つのサブタスクから別のサブタスクへ制御および／または実行を移すことが可能となるので、そのようなサブタスクの連鎖または関連付けが本発明の実施形態によって可能となる。これに代えて、標準的なエピローグプロローグモジュールによってコンパイルされていないサブタスクその他、そのようなコードを含んでいないサブタスクは、実行時にそのようなコードを提供することによって、依然として本明細書に記載のように実行されることができる。例えば、ブロック３７２を参照して記載されるような実行可能コードがメモリへロードされ、本明細書に記載のような標準的なエピローグ／プロローグ方式をサポートするサブタスクは、そのようなコードを参照して提供され、適切なときにそのようなコードを実行することができる。これに代えて、選択されたサブタスクの実行可能コードは、適切な時にサブタスクからエピローグ／プロローグコードへ、さらに続くサブタスクへ実行が移されるように、例えば呼出関数によって、上書きされてよい。サブタスクの実行可能コードを上書きすることによって、このようにサブタスクが連続的におよび／または引き続き、すなわち、呼出関数または他のエンティティの介入なしで、実行することができる。
【００３６】
本発明の実施形態では、呼出関数またはエンティティは、複数のサブタスクに最小限の情報しか提供せずに、例えば、さらなる介入、管理、または制御なしで、それら複数のサブタスクを自由に実行させることができる。例えば、呼出関数は、続いて実行されるサブタスクに対するポインタ、アドレス、または任意の適用可能なパラメータもしくは参照を、サブタスクに提供してよい。例えば、呼出関数は、図３Ｄのブロック３７０によって示すサブタスク−１に、サブタスク−２のコードに対するポインタまたはサブタスク−２のコードのアドレスを提供することによって、サブタスク−１にその関連する関数（例えば、ブロック３７２により示すような、記載のエピローグおよびプロローグ）を実行させ、次いで、提供されるアドレスへのアセンブリ「分岐」、「ジャンプ」、または「戻る」コマンドを実行することによって、サブタスク−２を実行させることを可能とする。
【００３７】
本発明の実施形態では、複数のサブタスクを横断して実行させることは、通常の呼出手続のオーバライドが必要な場合があるので、それらのそれぞれの実行可能コード（例えば、アセンブリコード）のオーバライドを行うことによって実行され得る。例えば、例えば「Ｃ」プログラミング言語によって元々作成され、続いてアセンブリコードへとコンパイルされたサブタスクは、通常、その呼出関数またはプログラムへと戻る。したがって、実行時におよび／または実時間で、本発明の実施形態では、そのようなサブタスクのランダイムまたは実行可能コード（例えば、そのアセンブリコード）は、その呼出元または開始元に「戻る」のではなく、例えば、続くサブタスクまたは他のサブタスクへ「ジャンプ」する、「分岐」する、または「戻る」ことその他、関連するコントローラまたはプロセッサの実行および／または制御を移すようにオーバライドが行われる。
【００３８】
他の実装例では、サブタスクに対し、任意の必要な情報もしくはパラメータが見出されるメモリ位置へのポインタ、アドレス、または任意の適用可能な参照が提供される。例えば、サブタスクの（固定または関連の）アドレスは、そのようなメモリ位置に記憶されてよく、サブタスクによる使用のために読み出されてよい。例えば、サブタスクは、そのようなメモリ位置から続くサブタスクのアドレスを読み出すことができる。そのような共通のまたは他のメモリ位置における追加の情報は、実行可能コードであってよい。例えば、特定のエピローグ、プロローグ、または切替コードを実行するコードは、そのようなメモリ位置に記憶されてよく、サブタスクによって「ジャンプ」されてよい。したがって、サブタスクの独立した実行フローを可能とするために同じエピローグおよび／またはプロローグを用いることができない場合であっても、そのようなフローは、既知のメモリ位置からサブタスクに情報を読み出させ、そのような情報を用いて続くサブタスクに実行および／または制御を移すことによって（場合によっては、間にある実行可能コード（例えば、
切替コード）の部分を介して）依然として達成することができる。そのような場合、切替コードはサブタスクを呼び出すことによって変更されてよい。例えば、サブタスクは、例えば、実行完了時に続くサブタスクへ「戻らせる」ことによって、切替コードの戻るポイントを変更することができる。複数の独立なサブタスクを管理および監督なしで実行することを可能とするために、サブタスク、エピローグ、プロローグ、または切替ランタイムもしくは実行可能コードについてのランタイムまたは実行可能コードの任意の適用可能な修正が、呼出関数またはサブタスクによって実行されてよい。
【００３９】
本発明の実施形態では、呼出関数によって実行され得る本明細書に記載の任意の演算は、実時間でおよび／または実行時に実行されてよい。そのような実時間もしくは実行時の演算または関数は、例えば、ライブラリその他サブタスクのプールから、例えば、環境、呼出関数に利用可能な入力パラメータ、シナリオ、またはイベントに従って、実行する複数のサブタスクを選択することができる。これに加えて、選択されたサブタスクの実行順序を実行時にまたは実時間で決定することは、本発明の実施形態（例えば、図２Ｃの呼出関数２１０）によって実行されてよい。例えば、第１のシナリオは、呼出関数にサブタスク−１、サブタスク−３、サブタスク−２の実行順序を決定させ、別のシナリオ、他の環境、呼出関数に提供される入力パラメータ、様々な条件または任意の適用可能な態様は、呼出関数にサブタスク−４、サブタスク−１、サブタスク−２、サブタスク−３の実行順序を決定させる。
【００４０】
例えば、複数のサブタスクのフローまたはシーケンス実行を制御することなどのために、実時間でおよび／または実行時に実行され得る他の演算は、選択されたサブタスクの独立な実行に必要とされ得るメモリ位置の初期化であり、ポインタまたは他の情報をサブタスクに提供し、サブタスクの実行可能コード部分のオーバライドを行う。本発明の他の実施形態では、上記のタスクのうちの一部は実行フェーズより前に実行されてよい。例えば、エピローグおよびプロローグコードがサブタスクコードへとコンパイルされることによって、互換性のあるサブタスクのプール（すなわち、呼出または他のエンティティの最小限の介入で任意の順序により順々に実行され得るサブタスクのプール）を呼出関数またはエンティティに提供することができる。
【００４１】
本発明の実施形態では、複雑なタスク、プログラム、または関数は、複数のサブタスクへ分解されてよい。したがって、複雑なタスクによって実行され得る機能を実行するために、その複雑なタスクの機能を実行可能な複数のサブタスクが選択され、実行されてよい。選択されたサブタスクの実行順序は、呼出関数によって予め、例えば、実行時にまたは実時間で決定されてよい。本明細書に記載のように、呼出関数は第１のサブタスクのみを呼び出してよく（例えば、第１のサブタスクを実行させてよく）、本明細書に記載のように選択される他のサブタスクは、先に実行されたサブタスクによって呼び出されてよい。
【００４２】
例えば、呼出関数またはエンティティは、ポインタを提供してもよく、サブタスクの実行可能コードを操作してもよく、処理その他のエンティティを呼び出す呼出関数、プログラムまたはアプリケーションの介入を必要とすることなく実行フローに複数のタスクまたはサブタスクを横断させるための、または所定の順序の実行を続けるための当技術分野において知られている任意の他の方法、技術、または手段を用いてもよい。第１のサブタスクに関連したプロローグと第２のまたは続くサブタスクに関連したエピローグとを含む実行可能コード部分は、そのような実行を可能とするために実行されてよい。そのような実行可能コード部分は、続くサブタスクの実行より前に第１のサブタスクによって実行されてもよく、先のまたは第１のサブタスクが実行を完了した後に、続くまたは第２のサブタスクによって実行されてもよい。したがって、第１および第２のサブタスクが連続的に実行してもよく、コントローラによって連続的に実行されてもよい。
【００４３】
本発明の実施形態では、呼出関数は、任意の制御その他の管理や監督エンティティの介入なしで、連続的に、引き続き、その他中断されずに、複数のサブタスクを実行させる。例えば、呼出関数は第１のサブタスクを呼び出し、今度は第１のサブタスクが第２のサブタスクを呼び出すかその他実行させ、第２のサブタスクは同様に動作する第３のサブタスクを起動させる、などとして、そのようなサブタスクの連鎖、連続、またはシーケンスにおける最後のサブタスクは、呼出関数に制御または実行を戻す。例えば、呼出関数は、実行時に、実行される複数のサブタスクを選択してもよく、呼出関数は、選択したサブタスクが実行されるシーケンスまたは順序を、実行時に、さらに決定してもよく、そのような実行順序を強制するように、ポインタ、アドレスまたは他のパラメータ（例えば、サブタスクのアセンブリコード）を操作してもよい。呼出関数が次いで呼び出しその他、第１のサブタスクを実行させ、選択されたサブタスクが、その呼出関数によって設定されるような所定の順序に従うシーケンスによって、次いで、自動的に連続的に実行する。
本発明の実施形態による１つのフローチャートを示す、図４を参照する。ブロック４１０によって示すように、コントローラによって実行されるサブタスクが選択される。例えば、図２Ｃに示す呼出関数２１０は、複数の入力パラメータを受け取り、そのような入力パラメータに基づき行動計画を決定してもよく、そのような行動方針に基づき、呼出関数２１０によって複数のサブタスクが選択されてもよい。例えば、第１のサブタスクはディスプレイ上の情報のレンダリングに関連し、第２のサブタスクはユーザに警告を与えることに関連し、第３のサブタスクは情報の記憶に関連してよい。サブタスクの他の例は、画像中の黄色のピクセルをすべて発見する、ノイズを除去する、またはデジタル画像の輝度を変更するなど、特定の処理タスクまたは関数を実行するサブタスクである。したがって、呼出関数２１０に対し提供される入力パラメータは、ディスプレイ上の情報のレンダリングは情報の記憶と同じく必要であるが、ユーザに警告を与えることは必要ではない、と指図してよい。したがって、上記の第１および第３の代表的なサブタスクは実行のために呼出関数２１０によって選択される。本発明の実施形態は、本明細書に記載のように選択可能および実行可能なサブタスクの粒度によって限定されない。本発明の実施形態では、任意の処理、フロー、演算、またはタスクをサブタスクへと分けることができる。例えば、入力装置からの入力を取扱うことなどの単純な演算がサブタスクに分けられるほか、ユーザを検証することなどの複雑な演算または処理もサブタスクに分けられる。本発明の実施形態では、タスクの分割は再帰的であってもよく、すなわち、サブタスク自体もサブタスクに分けられる。
【００４４】
呼出関数によって利用可能または取得可能な任意のデータ、パラメータ、コンテキスト情報、その他の適用可能な情報が、ブロック４１０によって示す、実行されるサブタスクの集合を選択する処理において用いられてよく、そのような情報には、例えば、システムの状態もしくはステータス、コンテキスト、環境、または任意の適用可能なパラメータもしくは態様が含まれる。サブタスクは、サブタスクのプール（例えば、図１に示す計算装置１００のメモリ１０４へとロードされたサブタスク１２０，１２１，１２２の集合、またはデバイス１００に接続された記憶装置１４０に記憶されたサブタスク１４１）から選択されてよく、さらには必要な場合にネットワークを通じてダウンロードされる場合があるサブタスクのプールから選択されてもよい。ブロック４１５によって示すように、選択したサブタスクの実行される実行順序、順番、またはフローが決定される。例えば、図２Ｃの呼出関数２１０は、選択したサブタスクの実行される実行順序または順番を決定する。実行順序または順番は、呼出関数によって利用可能もしくは取得可能な任意のデータ、パラメータ、必要性、コンテキスト、または情報に従って決定されてよい。複数のサブタスクの実行順序は、選択したサブタスクの２つ以上の集合が同じ時間に同時に、すなわち、並列に実行されるようなものであってよい。例えば、アプリケーション１３０の呼出関数は、「サブタスク−Ｃ、次いでサブタスク−Ａ、次いでサブタスク−Ｂ」のシーケンスと、「サブタスク−Ａ、次いでサブタスク−Ｂ」のシーケンスとの両方を同時に、すなわち、並列に実行すると決定してもよい。
【００４５】
本発明の実施形態では、ブロック４２０によって示すように、実行パラメータが設定される。例えば、サブタスクのコードまたは命令は、それらに所定のフローまたは実行の順番を保持または遵守させるために、本明細書に記載のように上書きされてよい。これに加えて、ポインタが初期化され、および／またはサブタスクに対し提供されてもよく、必要な情報によってメモリ位置が初期化されてもよい。例えば、全サブタスクがアクセス可能な共通のメモリ位置が、サブタスクのアドレス、エピローグ／プロローグ実行可能コードの位置などの情報を含むように設定されてもよい。
【００４６】
ブロック４２５によって示すように、本明細書に記載のようにコントローラによってサブタスクが実行される。ブロック４３０，４３５によって示すように、本明細書に記載のようにエピローグおよびプロローグが実行される。本明細書に図示および説明するように、エピローグおよびプロローグの実行は、ほぼ同じ時間または全く同じ時間であってよい。ブロック４４０によって示すように、実行されるサブタスクがさらに存在するかが判定される。本発明の実施形態では、ブロック４４０によって示すような、実行されるサブタスクがさらに存在するかの判定は、実行中のサブタスクのコードにより指定された位置へ実行を単純に移すことによって行われてよい。例えば、指定された位置がサブタスクの開始ポイントである場合、別のサブタスクが実行され、そうでない場合、指定された位置は、通常、呼出関数の実行可能コード中のアドレスである。別のサブタスクが実行すると判定される場合、ブロック４４０と４２５とを接続する矢印を辿ってループが反復され、そうでない場合、ブロック４４５によって示すように実行は呼出関数に戻る。
【００４７】
本発明の実施形態には、例えば、命令（例えば、プロセッサまたはコントローラによる実行時に本明細書に開示の方法を実行するコンピュータ実行可能命令）のエンコード、インクルード、または記憶を行う、メモリ、ディスクドライブ、ＵＳＢフラッシュメモリなど、コンピュータもしくはプロセッサ可読媒体、またはコンピュータもしくはプロセッサ記憶媒体などの物品が含まれる。本明細書において本発明の特定の特徴について図示および説明したが、多くの修正、置換、変更、および均等物が当業者には想到される。したがって、添付の特許請求の範囲は、本発明の真の精神内にあるそうした修正および変更すべてを含むことを意図したものであることが理解される。
【００４８】
本発明の実施形態には、例えば、命令（例えば、プロセッサまたはコントローラによる実行時に本明細書に開示の方法を実行するコンピュータ実行可能命令）のエンコード、インクルード、または記憶を行う、メモリ、ディスクドライブ、ＵＳＢフラッシュメモリなど、コンピュータもしくはプロセッサ可読媒体、またはコンピュータもしくはプロセッサ記憶媒体などの物品が含まれる。
【図１】
2010218546.tif 000003
【図２Ａ】
2010218546.tif 000004
【図２Ｂ】
2010218546.tif 000005
【図２Ｃ】
2010218546.tif 000006
【図３Ａ】
2010218546.tif 000007
【図３Ｂ】
2010218546.tif 000008
【図３Ｃ】
2010218546.tif 000009
【図３Ｄ】
2010218546.tif 000010
【図３Ｅ】
2010218546.tif 000011
【図４】
2010218546.tif 000012
【外国語明細書】
2010218546000001.pdf