(57)【特許請求の範囲】
【請求項１】
プロセッサにおいてタイムスロットを切り換えることによりタイムスロットに割り当てられたタスクの実行を切り換えるタスク切換装置であって、
一周期内の複数のタイムスロットに対して、割当時間の指定を有する第１タイプの複数のタスクのそれぞれを１タスク対１タイムスロットで１つのタイムスロットに割り当て、第１タイプとは異なり優先度を有する第２タイプの複数のタスクを多タスク対１タイムスロットで前記第１タイプのタスクが割り当てられていない１つの特定のタイムスロットに割り当てる割当手段と、
前記特定のタイムスロット以外のタイムスロットに切り換えられた場合に、当該タイムスロットに割り当てられたタスクを選択し、前記特定のタイムスロットに切り換えられた場合に、第２タイプの複数のタスクから前記優先度に基づいて１つのタスクを選択するタスク選択手段と
を備えることを特徴とするタスク切換装置。
【請求項２】
前記第２タイプのタスクは優先度を有し、
前記タスク選択手段は、第２タイプの複数のタスクのうち優先度に従って１つのタスクを選択する
ことを特徴とする請求項１記載のタスク切換装置。
【請求項３】
前記割当手段は、予め定められた一周期の時間から第１タイプのタスクが割り当てられたタイムスロットの合計時間を引いた残り時間を前記特定のタイムスロットの時間とする
ことを特徴とする請求項１又は２記載のタスク切換装置。
【請求項４】
前記割当手段は、第１タイプの新たなタスクをタイムスロットに割り当てる毎に、前記残り時間を再計算して前記特定のタイムスロットの時間とする
ことを特徴とする請求項３記載のタスク切換装置。
【請求項５】
前記第１タイプのタスクは割当時間の指定を有するタスクであり、
前記割当手段は、第１タイプの新たなタスクを追加しようとする場合、既に割当済のタスクの割当時間の合計と新たなタスクの割当時間との総和が一周期の時間を超えていれば、当該新たなタスクのタイムスロット割り当てを拒否する
ことを特徴とする請求項１記載のタスク切換装置。
【請求項６】
前記タスク切換装置は、さらに、
タスクによりアクセス可能な資源について、何れかのタスクからのアクセスによって資源がロック状態にあるか否かを示すロック情報を記憶する記憶手段と、
実行中のタスクがロック状態の資源をアクセスしようとしたとき、当該タスクを実行可能状態から待ち状態に変更し、当該資源のロック状態が解除されたとき待ち状態のタスクを実行可能状態に変更する変更手段と
を備え、
前記タスク選択手段は、待ち状態にあるタスクを選択対象から除外する
ことを特徴とする請求項１記載のタスク切換装置。
【請求項７】
前記タスク切換装置は、さらに、
第１タイプ及び第２タイプのタスクのうち実行可能状態のタスクが１つも存在しない場合に、前記プロセッサを省電力状態に移行させる移行手段を備える
ことを特徴とする請求項６記載のタスク切換装置。
【請求項８】
前記プロセッサは、タスクのコンテキストを保持するためのレジスタセットを少なくとも２つ備え、
前記タスク切換装置は、さらに、
レジスタセットの１つを実行中のタスクの使用に供し、他の１つのレジスタセットに対して次に実行すべきタスクのコンテキストをバックグラウンド処理により復帰させ、タイムスロットの切換時にレジスタセットを切り換える切換手段を備える
こと特徴とする請求項１から７の何れかに記載のタスク切換装置。
【請求項９】
タスクが割り当てられたタイムスロットを切り換えることによりプロセッサにおいて実行すべきタスクを切り換えるタスク切換装置であって、
一周期内のタイムスロットに対して、割当時間の指定を有する第１タイプのタスクに対して１タスク対１タイムスロットで１つのタスクに１つのタイムスロットを割り当て、当該タイムスロット毎に対応するタスクの割当時間を含むタイムスロット情報を生成する第１生成手段と、
優先度を有する第２タイプのタスクに対して複数のタスクを多タスク対１タイムスロットで前記周期内の前記第１タイプのタスクが割り当てられていない特定の１つのタイムスロットに割り当て、特定のタイムスロットの割当時間を含む１つのタイムスロット情報を生成する第２生成手段と、
タイムスロットに割り当てられたタスク毎にタスクのアドレスを含むタスク管理情報を生成する第３生成手段と、
生成されたタイムスロット情報とタスク管理情報とを対応させて記憶する記憶手段と、
記憶手段に記憶されたタイムスロット情報を一周期内で少なくとも１つずつ選択する選択手段と、
第１タイプのタスクが割り当てられているタイムスロット情報が選択された場合に、当該タイムスロット情報に対応するタスク管理情報が示すタスクを実行させ、第２タイプのタスクが割り当てられているタイムスロット情報が選択された場合に、当該タイムスロット情報に対応する複数のタスク管理情報から優先度に従って１つを選択して、選択したタスク管理情報が示すタスクを実行させる制御手段と
を備えることを特徴とするタスク切換装置。
【請求項１０】
前記記憶手段は、第２タイプのタスクのタスク管理情報を優先度の順に並べたキューとして記憶し、
前記制御手段は、キューの先頭のタスク管理情報に対応するタスクを選択する
ことを特徴とする請求項９記載のタスク切換装置。
【請求項１１】
前記第２生成手段は、前記周期と、第１タイプの全タスクの割当時間の合計との差分を、特定のタイムスロットの割当時間として前記特定のタイムスロットに対応するタイムスロット情報に設定する
ことを特徴とする請求項１０記載のタスク切換装置。
【請求項１２】
前記第２生成手段は、第１生成手段によって第１タイプの新たなタスクにタイムスロットが割り当てられる毎に、前記差分である残り時間を再計算して前記特定のタイムスロットの割当時間とする
ことを特徴とする請求項１１記載のタスク切換装置。
【請求項１３】
前記記憶手段は、さらに、タスクによりアクセス可能な資源について、何れかのタスクからのアクセスによるロック状態であるか否かを示すロック情報を記憶し、
前記タスク切換装置は、さらに、
実行中のタスクがロック状態の資源をアクセスしようとしたとき、記憶手段に記憶された当該タスクのタスク管理情報とタイムスロット情報との対応関係を切り離し、当該タスク管理情報を待ちキューとして記憶させ、当該資源がロック状態を解除されたとき待ちキュー内のタスク管理情報をタイムスロット情報に対応させて記憶させるキュー管理手段を有する
ことを特徴とする請求項１２記載のタスク切換装置。
【請求項１４】
前記プロセッサは、タスクのコンテキストを保持するためのレジスタセットを少なくとも２つ備え、
前記タスク切換装置は、さらに、
レジスタセットの１つを実行中のタスクの使用に供し、他の１つのレジスタセットに対して次に実行すべきタスクのコンテキストをバックグラウンド処理により復帰させ、タイムスロットの切換時にレジスタセットを切り換えるレジスタセット切換手段を備える
こと特徴とする請求項１３記載のタスク切換装置。
【請求項１５】
プロセッサにおいてタイムスロットを切り換えることによりタイムスロットに割り当てられたタスクの実行を切り換えるタスク切換方法であって、
一周期内のタイムスロットに対して、割当時間の指定を有する第１タイプの複数のタスクのそれぞれを１タスク対１タイムスロットで１つのタイムスロットに割り当て、第１タイプとは異なり優先度を有する第２タイプの複数のタスクを多タスク対１タイムスロットで前記第１タイプのタスクが割り当てられていない１つの特定のタイムスロットに割り当てる割当ステップと、
前記特定のタイムスロット以外のタイムスロットに切り換えられた場合に、当該タイムスロットに割り当てられたタスクを選択し、前記特定のタイムスロットに切り換えられた場合に、第２タイプの複数のタスクから前記優先度に基づいて１つのタスクを選択するタスク選択ステップと
を有することを特徴とするタスク切換方法。
【請求項１６】
プロセッサにおいてタイムスロットを切り換えることによりタイムスロットに割り当てられたタスクの実行を切り換えるためのプログラムであって、
前記プログラムは、
一周期内のタイムスロットに対して、割当時間の指定を有する第１タイプの複数のタスクのそれぞれを１タスク対１タイムスロットで１つのタイムスロットに割り当て、第１タイプとは異なり優先度を有する第２タイプの複数のタスクを多タスク対１タイムスロットで前記第１タイプのタスクが割り当てられていない１つの特定のタイムスロットに割り当てる割当ステップと、
切り換え後のタイムスロットが前記特定のタイムスロットでない場合、当該タイムスロットに割り当てられたタスクを選択し、切り換え後のタイムスロットが前記特定のタイムスロットである場合、第２タイプの複数のタスクから前記優先度に基づいて１つのタスクを選択して実行させるタスク選択ステップと
を前記プロセッサに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、オペレーティングシステムにおけるタスク切換に関し、特にタスクが割り当てられたタイムスロットを切り換えることによりプロセッサにおいて実行すべきタスクを切り換えるタスク切換装置に関する。
【０００２】
【従来の技術】
オペレーティングシステムの主な機能は、ハードウェア管理、タスク管理、データ管理及び入出力管理である。なかでもタスク管理はタスクの実行順序を管理するものであり、ＣＰＵやメモリ、入出力装置等を効率良く動作させるための重要な機能である。
【０００３】
タスクとは、プログラムの起動とその実行、終了などの流れを一括管理する制御単位のことである。 オペレーティングシステムの管理下で動作するプログラムはタスクとして扱われ、プログラムの実行に関するオペレーティングシステムの操作はすべてタスクを単位として行われる。
【０００４】
タスクの実行順序を決定するアルゴリズムの一つとして、時分割スケジューリング法や優先度による切換方法がある。時分割スケジューリング法は、タスクにある実行時間を割り当て、割り当てられた時間の間はプロセッサの実行権がタスクに与えられ、割り当てられた時間が過ぎると別のタスクに実行権を移す方法である。これによりすべてのタスクに平等かつ決められた時間で実行権が割り当てられる。
【０００５】
また、優先度による切換方法に関して、特許文献１及び２はいずれもタスクの優先度に従ってタスクを切り換えるスケジューリング装置を開示している。
【０００６】
【特許文献１】
特開２０００−２０３２３号公報
【０００７】
【特許文献２】
特開平４−１０１２３３号公報
【０００８】
【発明が解決しようとする課題】
しかしながら、上記従来技術によれば、各タスクの必要性能を確保するためにはプログラマが個々のタスク優先度を指定する点でプログラム設計が難しく、また一度設計してしまうと変更の柔軟性が乏しいという問題がある。
【０００９】
本発明では、上記問題を解決するために、各タスクの必要性能を満たすための優先度を指定するプログラム設計を容易にし、プログラム設計の柔軟性を有するタスク切換装置を提供することを目的とする。
【００１０】
【課題を解決するための手段】
上記の目的を達成するために、本発明のタスク切換装置は、プロセッサにおいてタイムスロットを切り換えることによりタイムスロットに割り当てられたタスクの実行を切り換えるタスク切換装置であって、一周期内のタイムスロットに対して、割当時間の指定を有する第１タイプの複数のタスクのそれぞれを１タスク対１タイムスロットで１つのタイムスロットに割り当て、第１タイプとは異なり優先度を有する第２タイプの複数のタスクを多タスク対１タイムスロットで前記第１タイプのタスクが割り当てられていない１つの特定のタイムスロットに割り当てる割当手段と、切り換え後のタイムスロットが前記特定のタイムスロットでない場合、当該タイムスロットに割り当てられたタスクを選択し、切り換え後のタイムスロットが前記特定のタイムスロットでない場合、当該タイムスロットに割り当てられたタスクを選択し、切り換え後のタイムスロットが前記特定のタイムスロットである場合、第２タイプの複数のタスクから前記優先度に基づいて１つのタスクを選択して実行させるタスク選択手段とを備える。
【００１１】
この構成によれば、第１タイプのタスクは１対１でタイムスロットを割り当てられる結果、第１タイプのタスクについては全てのタイムスロットを含む一周期内で少なくとも１回は選択実行されるので、継続した処理性能が保証される。他方、第２タイプのタスクは多対１で１つのタイムスロットを割り当てられる結果、継続して処理性能が保証されない。その結果、プログラマは、継続して処理性能を満たす必要のあるタスクに対しては優先度を考慮する必要もなく第１タイプに分類するだけでよい。また、プログラマは、処理性能を要求しないタスクに対しては第２タイプに分類すればよい。これにより、全てのタスクに対して個別に優先度を付与する必要がなくなり、処理性能を確保するためのプログラム設計を容易にすることができ、プログラム設計の柔軟性を確保することができる。
【００１２】
ここで、前記第２タイプのタスクは優先度を有し、前記タスク選択手段は第２タイプの複数のタスクのうち優先度に従って１つのタスクを選択する構成としてもよい。
【００１３】
この構成によれば、第２タイプのタスクは優先度の高いものから実行されるので、プログラマは、第１タイプのタスクに対して優先度を考慮する必要がなく、継続した処理性能を要求しないタスクを第２タイプに分類して優先度を付与すればよいので、プログラム設計及び変更を容易にすることができる。
【００１４】
また、前記割当手段は、予め定められた一周期の時間から第１タイプのタスクが割り当てられたタイムスロットの合計時間を引いた残り時間を前記特定のタイムスロットの時間とするように構成してもよい。
【００１５】
この構成によれば、第２タイプのタスクは上記の残り時間に実行されるので、第２タイプのタスクの実行により第１タイプの個々のタスクの処理性能に影響を及ぼすことを極力排除することができる。
【００１６】
さらに、前記割当手段は、第１タイプの新たなタスクをタイムスロットに割り当てる毎に、前記残り時間を再計算して前記特定のタイムスロットの時間とする構成としてもよい。
【００１７】
この構成によれば、第１タイプの個々のタスクの処理性能を保証した上で、第２タイプのタスクに対して最大限の残り時間を動的に割り当てることができる。
また、前記第１タイプのタスクは割当時間の指定を有するタスクであり、前記割当手段は、第１タイプの新たなタスクを追加しようとする場合、既に割当済のタスクの割当時間の合計と新たなタスクの割当時間との総和が一周期の時間を超えていれば、当該新たなタスクのタイムスロット割り当てを拒否する構成としてもよい。
【００１８】
この構成によれば、第１タイプの新たなタスクの追加を排除してまで既存の第１タイプのタスクの処理性能を保証することができる。
さらに、前記タスク切換装置は、タスクによりアクセス可能な資源について、何れかのタスクからのアクセスによって資源がロック状態にあるか否かを示すロック情報を記憶する記憶手段と、実行中のタスクがロック状態の資源をアクセスしようとしたとき、当該タスクを実行可能状態から待ち状態に変更し、当該資源のロック状態が解除されたとき待ち状態のタスクを実行可能状態に変更する変更手段とを備え、前記タスク選択手段は、待ち状態にあるタスクを選択対象から除外する構成としてもよい。
【００１９】
また、前記タスク切換装置は、さらに、第１タイプ及び第２タイプのタスクのうち実行可能状態のタスクが１つも存在しない場合に、前記プロセッサを省電力状態に移行させる移行手段を備える構成としてもよい。
【００２０】
ここで、前記プロセッサは、タスクのコンテキストを保持するためのレジスタセットを少なくとも２つ備え、前記タスク切換装置は、さらに、レジスタセットの１つを実行中のタスクの使用に供し、他の１つのレジスタセットに対して次に実行すべきタスクのコンテキストをバックグラウンド処理により復帰させ、タイムスロットの切換時にレジスタセットを切り換える切換手段を備える構成としてもよい。
【００２１】
この構成によれば、コンテキストの退避及び復帰をプログラム的に実行する代わりにレジスタセットの切換を行えばよいので、タスク切換を高速化することができる。また、次に実行すべきタスクのコンテキストをバックグラウンド処理により復帰させるので、プロセッサ時間のアイドル処理などを効率よく利用してタスク切換えの高速化を図ることができる。
【００２２】
また、本発明のタスク切換方法およびそのプログラムについても、上記と同様の構成であり、同様の作用及び効果を有している。
【００２３】
【発明の実施の形態】
〔全体構成〕
図１は本発明の実施の形態におけるタスク切換を行うプログラム実行装置の主要部の構成を示すブロック図である。同図は、プロセッサにおいてオペレーティングシステムの一部の機能としてタスク切換を行うソフトウェアを実行することにより実現される機能を模式的に表している。プロセッサのハードウェア構成は、一般的なものでよい。
【００２４】
このプログラム実行装置は、割当時間の指定を有するタスクと優先度を有するタスクの２種類のタスクを１つのプロセッサ内で扱い、前者のタスクの必要性能を確保し、後者のタスクを優先度に従って選択実行するよう構成されている。
【００２５】
同図のようにプログラム実行装置は、タスクスケジューリング部１０、プログラム記憶部２０、タイマ制御部３０及び実行制御部４０より構成される。
タスクスケジューリング部１０は、２種類のタスクのスケジューリングを行う。すなわち、前者のタスクに対して、タスクスケジューリング部１０は、割当時間の指定を有するタスクのそれぞれに１つのタイムスロットを割り当て、予め定められた周期内において各タスクを少なくとも１回選択する時分割スケジューリングを行う。後者のタスクに対して、タスクスケジューリング部１０は、一周期内における上記のタイムスロットの合計時間の残り時間において、優先度を有する複数タスクのうち１つのタスクを選択するスケジューリングを行う。ここで、タイムスロットとは、プロセッサにおけるプログラムを実行する時間を周期内において割当時間ごとに区切ったものである。
【００２６】
プログラム記憶部２０は、タスクスケジューリング部１０によるスケジューリング対象となるタスクの本体であるプログラムとプログラムに関する情報とを記憶する。
【００２７】
タイマ制御部３０は、タスクスケジューリング部１０から割当時間を設定される毎に、時間のカウントを開始し当該割当時間に達したときにタイムアウトを出力する。このタイムアウトは、タイムスロットの切り換えタイミングを知らせるために、タスクスケジューリング部１０に通知される。
【００２８】
実行制御部４０は、タスクスケジューリング部１０に選択されたタスクを実行する。実行制御部４０はプロセッサのタスクを実行するハードウェアに相当する。
【００２９】
〔タスクスケジューリング部１０の構成〕
タスクスケジューリング部１０は、タスク受付部１１、タイムスロット記憶部１２、タスク記憶部１３、タイムスロット切換部１４、タスク選択部１５、mutex記憶部１６及びmutex制御部１７から構成される。
【００３０】
＜１．タスク受付部１１＞
タスク受付部１１は、ユーザ操作やユーザプログラム等からの指示に従ってタスクの追加要求を受け付け、プログラム記憶部２０から当該タスクに関する情報として、「タスク情報」、「優先度」及び「割当時間」を読み出して、当該タスクがスケジューリングの対象となるようにタイムスロット情報やタスク管理ブロックを生成し、タイムスロット記憶部１２、タスク記憶部１３に設定する。
【００３１】
ここで、「タスク情報」は、プログラム開始アドレスとスタックポインタからなる。プログラム開始アドレスは、タスクが書き込まれた先頭のアドレスである。スタックポインタは、タスクの切換が生じた際にタスクの状態を一時的に退避する格納場所を示す位置情報である。
【００３２】
「優先度」は、割当時間の指定を有するタスクか優先度を有するタスクかを区別する基準であり、且つ後者の場合の優先度を示すという２つの意味を持つ。
すなわち、優先度０のタスクは割当時間を有するタスク（以下種別Ａのタスクと呼ぶ）、優先度が０でないタスクは優先度を有するタスク（以下種別Ｂのタスクと呼ぶ）であり、以下の意味を持つ。
【００３３】
種別Ａのタスクは、割当時間の指定を有するタスクであり、タスクスケジューリング部１０において、タイムスロットに１対１で対応して割り当てられ、当該タイムスロットの割当時間の間は確実に実行される。実行時間の長さで処理性能が定まるので、いわゆるタイムドリブン型と呼ばれるタスクを種別Ａとすべきである。例えば、動画データのデコード／エンコード処理、音声データのデコード／エンコード処理など継続して一定の処理性能を必要とするタスクを種別Ａとすることが望ましい。
【００３４】
種別Ｂのタスクは、他の種別Ｂのタスクと共に１つのタイムスロットに割り当てられ、当該タイムスロットが保持する割当時間の間、優先度の高いタスクが実行される。ここでは、優先度は、高い方から順に１、２、３、・・・という値をとるものとする。いわゆるイベントドリブン型と呼ばれるタスクを種別Ｂとすべきである。例えば、ユーザ操作をイベントとして文字や静止画からなるメニュー表示を行う処理など継続して一定の処理性能を必要としないが不定期に随時発生するタスクを種別Ｂとすることが望ましい。この場合、優先度は例えば厳しい応答速度を要求されるイベントを処理するタスクほど高くすればよい。
【００３５】
「割当時間」は、タスクが種別Ａのときにのみ有効で、タスクに対応するタイムスロットの割当時間を指定する値である。この割当時間と優先度とは、プログラムによって指定されたものとする。
【００３６】
また、タスク受付部１１は、ユーザ操作やユーザプログラム等からの指示があった場合や、タスクの実行が終了した場合に、タイムスロット記憶部１２、タスク記憶部１３に記憶されている当該タスクのタイムスロット情報やタスク管理ブロックを削除する。
【００３７】
＜２．タイムスロット記憶部１２＞
タイムスロット記憶部１２は、タスクの切り換えの基準となるタイムスロットを生成するためのタイムスロット情報を記憶する。
【００３８】
図２は、タイムスロット記憶部１２内のタイムスロット情報と、タスク記憶部１３内のタスク管理ブロックの具体例を示す図である。同図のように、タイムスロット記憶部１２は、複数のタイムスロット情報１００、１１０、１２０、・・・を記憶する。タイムスロット情報１００は、種別Ｂの複数のタスクが割り当てられたタイムスロットを示す。このタイムスロット情報１００は、種別Ｂのタスクが存在しなくても予め生成しておいてもよい。これ以外のタイムスロット情報１１０、１２０、・・・は、種別Ａのタスクが割り当てられたタイムスロットを示す。
【００３９】
タイムスロット情報１００は、タイムスロットの１つに対応し、割当時間１００ａ、フラグ１００ｂ及びポインタ１００ｃからなる。他のタイムスロット情報も同様である。
【００４０】
割当時間は、当該タイムスロットに対応するタスクが実行することができる時間を示す。タスクが実際に実行された時間が割当時間に達すると次のタイムスロットに切り換られる。種別Ａのタスクに対応する割当時間１１０ａ、１２０ａは、タイムスロット情報の生成と同時に設定される。種別Ｂの複数タスクに対応する割当時間１００ａは、周期レジスタ１８に保持された一周期の時間から、他のタイムスロットの割当時間１１０ａ、１２０ａ・・・の合計時間を引いた残り時間としている。この残り時間はタスクの追加、削除がある毎に変化する。
【００４１】
実行フラグは、当該タイムスロットが有効か無効かを示す。タイムスロット情報の生成時には有効と設定され、タスク実行中にアクセス先の資源がロック状態にあって待ち状態になった時に無効と設定され、その後待ち状態から実行可能状態に戻った時に有効と設定される。実行フラグが無効を示す場合は、タイムスロット切換部１４によってタイムスロット情報が存在しないものとみなされる。
【００４２】
ポインタは、当該タイムスロットに対応するタスク管理ブロックを示している。
これらのタイムスロット情報１００、１１０、１２０…は配列を構成し、その順序はタイムスロットの生成順を表すものとする。
【００４３】
＜３．タスク記憶部１３＞
タスク記憶部１３は、タイムスロットに割り当てられたタスクに対応するタスク管理ブロック２００、２０１、・・・を記憶する。タスク管理ブロック２００、２０１、・・・は、それぞれ１つのタスクに対応し、当該タスクを管理するための情報である。
【００４４】
タスク管理ブロック２００は、タスク情報２００ａ、優先度２００ｂ、リンクアドレス２００ｃからなる。
タスク情報２００ａは、プログラム開始アドレス（又はプログラムを再開すべきアドレス）及びスタックポインタを含む。タスク管理ブロックの生成時には、タスク受付部によって入力された前記タスク情報を保持する。タスク切換時には、中断されたタスクの実行アドレス及び当該時点でのスタックポインタの値を示す。
【００４５】
優先度２００ｂは、当該タスクの優先度を示す。
リンクアドレス２００ｃは、当該タスクが要素として実行キュー又は待ちキューに接続された場合に、実行キュー又は待ちキューにおける次の要素であるタスク管理ブロックへのポインタを保持する。
【００４６】
具体的には、種別Ａのタスクに対応するタスク管理ブロックでは、リンクアドレス（２１０ｃ等）は、当該タスクが実行可能状態である場合はnull（無効）であり、当該タスクが待ち状態である場合は待ちキューの次の要素を指すポインタである。種別Ｂのタスクに対応するタスク管理ブロックでは、リンクアドレス２００ｃは、当該タスクが実行可能状態である場合は実行キューを形成する次の要素を指すポインタであり、当該タスクが待ち状態である場合は待ちキューを形成する次の要素を指すポインタである。
【００４７】
＜４． タイムスロット切換部１４＞
タイムスロット切換部１４は、現在のタイムスロットにおいてタスクの実行時間が割当時間に達したときに、タイムスロットの切換を行う。割当時間に達したかどうかはタイマ制御部３０によるタイムアウトによって通知される。通知を受けたタイムスロット切換部１４は、次のタイムスロット情報を選択する。本実施例では、次に選択されるタイムスロット情報は、その配列順による。タイムスロット切換部１４は、選択したタイムスロット情報から割当時間を取得してタイマ制御部３０に設定する。これにより次のタイムスロットの割当時間のカウントが開始される。
【００４８】
＜５． タスク選択部１５＞
タスク選択部１５は、前記タイムスロット切換部１４のタイムスロット切り換え時に、及び実行中のプログラムからの指示があった時に、現在実行中のタスクの実行アドレス、スタックポインタ等を当該タスクのタスク管理ブロックにタスク情報として退避し、次に実行すべきタスクのタスク管理ブロックからタスク情報を取り出して、実行制御部４０へ出力する。これと同時に、実行中のタスクのコンテキスト（レジスタデータ等）の退避と、次に実行すべきタスクのコンテキストの復帰もなされる。これにより次に実行すべきタスクが実行状態になる。
【００４９】
図４は、タイムスロット切換部１４及びタスク選択部１５によるタスク切換の様子を示す説明図である。同図において、Ｔは周期レジスタ１８に保持された周期、ｔ０は種別Ｂのタスクに対応するタイムスロット情報１００に対応するタイムスロットであり、その長さは割当時間を示す。ｔ１〜ｔｎはそれぞれ種別Ａのｎ個のタスクに対応するｎ個のタイムスロット情報１１０、１２０・・・に対応するタイムスロットであり、その長さは割当時間を示す。Ｓは、タイムスロット切換部１４及びタスク選択部１５によってタスク切換を行うスケジューリング処理を示す。同図のように、タイムスロットｔ０を開始時のスケジューリング処理では、種別Ｂの複数のタスクＢ１、Ｂ２、Ｂ３のうち優先度の最も高いタスクＢ１が選択され実行される。タイムスロットｔ１の開始時のスケジューリング処理では、タイムスロット情報１１０に対応するタスクＡ１が実行される。タイムスロットｔ２〜ｔｎについても同様である。このように種別Ａのタスクは１つの周期Ｔの間に１回は必ず実行される。
【００５０】
また、図５は、タイムスロットｔ０において実行中のタスクが終了した場合のタスク切換の様子を示す説明図である。同図においてタスクＢ１は、自身の処理を完了し場合、タスク選択部１５にその旨を通知する。この通知によって、タスクＢ１の削除処理（図中のＥ）と、タスクの切換処理（同Ｓ１）とがなされる。削除処理Ｅでは、タスクＢ１が終了したので、タスクＢ１のタスク管理ブロックが削除される。切換処理Ｓ１では、タスクＢ１のタスク管理ブロック削除後に最も優先度の高いタスクＢ２がタスク選択部１５によって選択され、実行される。このように、種別Ｂの複数のタスクが割り当てられたタイムスロットｔ０では、優先度の高いタスクから順に実行される。
【００５１】
＜６． mutex記憶部１６＞
mutex（mutual exclusion：相互排除）は、２つ以上のタスクが１つの資源を競合してアクセスする場合に調停を行う機構をいい、mutex制御部１７に含まれる機能であり、資源のロック状態及びロック解除状態を管理するオブジェクト（プログラム）によって実現される。この機構は、２つ以上のタスクからのアクセスが競合する可能性のある資源毎に設けられる。あるタスクがmutexのロック操作に成功すると、mutexは（又は資源は）ロック状態になり他のタスクがロック操作を行ってもロック解除状態になるまで待たされることになる。これによりロック操作に成功しタスクは対応する資源を専有することができる。ロック操作を行ったタスクがロック解除操作を行うと、他のタスクがロック操作を行うことができるようになる。実行中のタスクは、資源をアクセスする場合、当該資源に対応するmutexをロック操作に成功した場合のみ資源をアクセスすることができる。既にロック状態になっている場合には、ロック解除状態になるまで待たされることになる。
【００５２】
図３は、mutex記憶部１６に記憶されるmutex管理ブロック３００、３０１・・・と、タスク記憶部１３に記憶される待ちキューとを示す図である。
同図においてmutex管理ブロック３００、３０１・・・は、２つ以上のタスクからのアクセスが競合する可能性のある個々の資源に対応して設けられる。
【００５３】
mutex管理ブロック３００はロック変数３００ａ及びポインタ３００ｂを含む。
ロック変数３００ａは、２つの状態（１:ロック状態、０:ロック解除状態）の何れかを示す。初期値は０であり、ロック解除状態からロック状態にするにはタスクがロック操作を行う必要がある。ロック状態からロック解除状態にするには、ロック操作を行ったタスクのみが操作を許される。
【００５４】
ポインタ３００ｂは、ロック状態においてロック操作を行ったタスク（ロック操作に失敗したタスク）を示す待ちキューの先頭のタスク管理ブロックを指す。待ちキューに接続されたタスク管理ブロック２００’、２０１’・・・は、ロック操作に失敗したタスクに対応し、それぞれリンクアドレス２００’ｃ、２０１’ｃ・・・によって順に接続された待ちキューを形成する。
【００５５】
＜７． mutex制御部１７＞
mutex制御部１７は、mutexのロック操作及びロック解除操作が行われるときに、ロック変数の操作を行うとともに、タスク選択部１５へのタスク管理ブロックの操作要求やタイムスロット切換部１４への通知及び実行フラグの操作要求を行う。
【００５６】
図６は、種別Ｂのタスクがロック操作に失敗した場合の様子を示す説明図である。同図では、タイムスロットｔ０において実行中のタスクＢ１がアクセスしようとする資源に対応するmutexに対してロック操作（図中のＬ：ロック処理）を行って、失敗した場合を示している。当該mutexが既にロック状態である場合にタスクＢ１はロック操作に失敗することから、同図のようにロック処理Ｌによってタスク記憶部１３の実行キューから待ちキューに移動させられ、さらに、タスク切換処理Ｓ１により、タスクＢ２に切り換えられる。タスクＢ１は、当該mutexがロック状態からロック解除状態になるまで、実行キューから除外されるので、スケジューリングの対象から除外される。
【００５７】
このように種別Ｂのタスクに対応するタイムスロットｔ０では、実行中のタスクが待ち状態になった場合に、次順位のタスクに切り換えられる。
また、タスクＢ１がロック処理においてロック操作に成功した場合は、タスクＢ２に切り換えられることなく、タイムスロットｔ０の間、実行を続ける（資源にアクセスする）ことになる。
【００５８】
図７は、種別Ａのタスクがロック操作に失敗した場合の様子を示す説明図である。同図では種別ＡのタスクＡ２がロック操作に失敗して待ちキューに移動させられ場合、タイムスロットｔ２の割当時間に達していなくても、スケジューリング処理（同図Ｓ）によりタイムスロットが切り換えられる。種別Ａのタスクに対応するタイムスロットにはタスクが１つしか割り当てられていないから、タイムスロットの残り時間があってもタイムスロットを切り換えている。
【００５９】
また、タスクＡ２がロック操作に成功した場合には、タイムスロットｔ２の割当時間に達した時に次のタイムスロットに切り換えられる。
図８は、タスクがロック解除する場合の様子を示す説明図である。同図に示すように実行中のタスクＡ１がロック状態にあるmutexをロック解除した場合、ロック解除処理Ｒによって当該mutexに対応する待ちキューＲのタスクＢ１は実行キューＢに戻される。これによりタスクＢ１は、それ以後に対応するタイムスロットｔ０が選択された場合に実行されることになる。
【００６０】
図９は、タスクがロック解除する場合の様子を示す他の説明図である。同図では実行中のタスクＡ２がロック状態にあるmutexをロック解除した場合、ロック解除処理Ｒによって当該mutexに対応する待ちキューＳのタスクＢ２は実行キューＢに戻される。図８とは異なり、タスクＢ２は、タスクＢ１とＢ３の間に戻されている。これは、優先度の順に並ぶように実行キューに戻しているからである。このケースは、タスクＢ２が待ちキューにある間に、それよりも優先度の高いタスクＢ１が生成された場合などにあたる。これ以降にタイムスロットｔ０が選択された場合、優先度の最も高いタスクＢ１が選択されて実行されることになる。
【００６１】
〔処理の詳細〕
以下、本発明のプログラム実行装置における処理の詳細として、スケジューリング処理（図４〜図９中のＳ）、mutexロック処理（図６、図７中のＬ）及びmutexロック解除処理（図８、９中のＲ）、タスク切換処理（図５、図６中のＳ１）、タスク追加処理、タスク終了処理（図５中のＥ）について詳細に説明する。
【００６２】
＜１． スケジューリング処理＞
図１０は、スケジューリング処理の詳細を示すフローチャートである。同図のスケジューリング処理は、タイマ制御部３０がタイムアウトをタイムスロット切換部１４に通知したとき、及び、実行中のタスクがロック操作に失敗したとき（図７参照）に呼び出されて開始する。図中、ｉは実行フラグが無効になっているタイムスロット情報をカウントするための変数、（ｎ＋１）は存在するタイムスロット情報の数を表す。
【００６３】
まず、タイムスロット切換部１４は、カウンタとして用いる変数ｉを０に初期化し（Ｓ４０１）、現在実行しているタスクの状態をタスク管理ブロックに退避する（Ｓ４０２）。
【００６４】
次に、タスク選択部１５は、変数ｉに１を加算し（Ｓ４０３）、タイムスロット情報の配列における次順のタイムスロット情報を選択し、次の要素がない場合は、タイムスロット情報配列の先頭の要素を選択し、選択したタイムスロット情報を取得する（Ｓ４０４）。さらに、タイムスロット切換部１４は、選択したタイムスロット情報に含まれる割当時間を取り出し、タイマ制御部３０に設定する（Ｓ４０５）。これにより、タイマ制御部３０はカウントを開始し、割当時間に達しタイムアウトするまでカウントする。
【００６５】
さらに、タイムスロット切換部１４は、取得したタイムスロット情報がタイムスロット情報１００であるか否かを判定する。つまり次に実行すべきタスクが種別Ｂであるか種別Ａであるかを判定する（Ｓ４０６）。
【００６６】
判定の結果が種別Ａである場合には、当該タイムスロット情報中のポインタが指すタスク管理ブロックを取得し（Ｓ４０７）、タイムスロット情報中の実行フラグが１（有効）であれば（Ｓ４０８）、タスク管理ブロック中のタスク情報に従って、当該タスクの状態を復帰させる（Ｓ４１１）。これにより種別Ａのタスクに切り換えられる。
【００６７】
また、判定の結果が種別Ｂである場合には、タイムスロット切換部１４は、タイムスロット情報１００中のポインタにタスク管理ブロックの実行キューが接続されているが否か（ポインタが有効か無効か）を判定する（Ｓ４１２）。実行キューが接続されていると判定された場合には、優先度が最も高い先頭のタスク管理ブロックを取得し（Ｓ４１３）、当該タスク管理ブロック中のタスク情報に従って、当該タスクの状態を復帰させる（Ｓ４１１）。これにより種別Ｂのタスクのうち最も高い優先度のタスクに切り換えられる。また、実行キューが接続されていないと判定された場合は、実行可能な種別Ｂのタスクが存在しない。この場合、次のタイムスロット情報を選択するためにＳ４０３へ戻る。
【００６８】
上記Ｓ４０８において実行フラグが無効であれば（Ｓ４０８：no）、タイムスロット切換部１４は再度Ｓ４０３、Ｓ４０４に戻って（Ｓ４０９：no）次のタイムスロットを選択する。さらに、この繰り返しによりｎ＋１個のタスク管理情報が無効であった場合（S４０９：yes）、つまり、実行可能なタスクが１つも存在しない場合には、プログラム実行装置を省電力状態に移行させる（Ｓ４１０）。
【００６９】
このように、タスクスケジューリング部１０によるスケジューリング処理では、種別Ａのタスクと種別Ｂのタスクとでは異なるスケジューリングをしている。すなわち、タスクスケジューリング部１０は、種別Ａのタイムスロット（タイムスロット情報１、２、・・に対応するタイムスロット）が選択された場合、当該タイムスロットに１つだけ割り当てられた種別Ａのタスクに切り換える。また、タスクスケジューリング部１０は、種別Ｂのタスクが割り当てられているタイムスロット（タイムスロット情報１００に対応するタイムスロット）が選択された場合、種別Ｂの複数のタスクのうち優先度の最も高いタスクに切り換える。
【００７０】
また、図５及び図６に示した切換処理Ｓ１は、図１０のスケジューリング処理とほぼ同様とすればよい。例えば、切換処理Ｓ１では図１０スケジューリング処理におけるＳ４１２から開始するようにしてもよい。
【００７１】
＜２． タスク追加処理＞
図１１は、タスクスケジューリング部１０におけるタスク追加処理の詳細を示すフローチャートである。このタスク追加処理はユーザ操作やユーザプログラム等からのタスク追加要求が発生した時点で開始される。
【００７２】
タスク追加の要求を受けて、タスク受付部１１は、追加すべきタスクのタスク情報、優先度及び割当時間を取得し（Ｓ５０１）、追加すべきタスクの種別が種別Ａであるか種別Ｂであるか（当該優先度が０であるか０でないか）を判定する（Ｓ５０２）。
【００７３】
追加すべきタスクが種別Ａであると判定された場合、タスク受付部１１は、タイムスロットの追加が可能かどうかを検査する。すなわち、タスク受付部１１は、タイムスロット記憶部１２から種別Ａのタスクに対応するタイムスロット情報１１０、１２０、・・・、内の割当時間を読み出して、その合計を算出し、当該合計に追加すべきタスクの割当時間を加えた総和が、周期レジスタ１８に保持された周期値を超えていなければ、当該タスクに対応するタイムスロットの追加が可能であると判定する（Ｓ５０３）。当該周期値を超えている場合は、追加要求に対するエラーを返す（Ｓ５０４）。
【００７４】
追加可能と判定されたならば、タスク受付部１１は、割当時間と実行フラグ（この時点では０）とを設定したタイムスロット情報を生成して（Ｓ５０５）、タスク情報と優先度とを含むタスク管理ブロックを生成する（Ｓ５０６）。
【００７５】
タイムスロット情報とタスク管理ブロックが生成した後、タスク受付部１１は、その対応関係を示すためにタスク管理ブロックの格納位置をタイムスロット情報のポインタにセットする（Ｓ５０７）。最後に当該タイムスロットの実行フラグを有効にする（Ｓ５０８）。
【００７６】
上記Ｓ５０２において追加すべきタスクが種別Ｂであると判定された場合、タスク受付部１１は、追加すべきタスクのタスク管理ブロックを生成し（Ｓ５０９）、タイムスロット情報１００に対応する実行キューに追加する。実行キューへの追加は、実行キューの先頭から優先度の高い順に並ぶように、追加すべき位置を探索して当該タスク管理ブロックを追加する（Ｓ５１０）。また、タイムスロット情報１００内の実行フラグに１をセットする（Ｓ５０８）。
【００７７】
このように、追加処理では、既に存在するタイムスロット情報及びタスク管理ブロック（図２参照）に対して、追加すべきタスクが種別Ａである場合は新たなタイムスロット情報と新たなタスク管理ブロックを追加し、追加すべきタスクが種別Ｂである場合は実行キューの優先度に応じた位置に新たなタスク管理ブロックを追加する。
【００７８】
また、図５に示したタスク削除処理Ｅは、削除すべきタスクが種別Ａである場合は、当該タスクに対応するタイムスロット情報とタスク管理ブロックを削除し、削除すべきタスクが種別Ｂである場合は、当該タスクに対応するタスク管理ブロック実行キューから削除する。
【００７９】
＜３．mutexロック処理＞
図１２は、mutex制御部１７によるロック処理の詳細を示すフローチャートである。このロック処理は、図６及び図７のロック処理Ｌであり、実行中のタスクが資源の１つをアクセスする直前に当該資源に対応するmutexをロックするために、実行中のタスクによって呼び出される処理である。
【００８０】
実行中のタスクに呼び出されるとmutex制御部１７は、資源に対応するmutex管理ブロックに対してロック変数の読み出しと有効値”１”の書き込みを行う（Ｓ６０１）。この読み出しと書き込みとの間に、他のタスクが同じ処理を行うことによって値に矛盾が生じることを防ぐために、読み出しと書き込みを一命令で行っている。これは、プロセッサに実装されている read-modify-write 命令により実現可能である。
【００８１】
読み出されたロック変数が０（ロック解除状態）ならば（Ｓ６０２:yes）、ロック操作の成功であり、上記書き込みにより”１”をセット済であるのでロック処理を終了する。これにより、ロック処理を呼び出したタスクに実行制御が復帰し、当該タスクはmutexに対応する資源を専有してアクセスすることが可能になる。
【００８２】
読み出されたロック変数が１（ロック状態）ならば（Ｓ６０２：no）、すでに他のタスクにより資源が専有されているため、呼び出し元のタスクはロック解除状態になるまで、当該資源をアクセスすることができない。この場合、mutex制御部１７は、呼び出し元のタスクが種別Ａであるか種別Ｂであるかを判定する。
【００８３】
判定結果が種別Ａ（優先度が０）ならば（Ｓ６０３：yes）、対応するタイムスロット情報の実行フラグを無効にする（Ｓ６０４）。これにより当該タイムスロット情報はスケジューリング対象から除外される。加えて、mutex制御部１７は呼び出し元のタスクのタスク管理ブロックを実行キューから外して、当該mutex管理ブロックの待ちキューにつなぐ（Ｓ６０５）。待ちキューにつなぐのは、どのmutexのロック解除待ち（どの資源の専有状態解除待ち）になっているかを示すためである。さらに、mutex制御部１７は、スケジューリング処理Ｓを呼び出す（Ｓ６０６）。これにより当該タイムスロットは割当時間の途中でも強制的に次のタイムスロットに切り換わる（図７参照）。
【００８４】
なお、Ｓ６０４において実行フラグを無効にする代わりに、タイムスロット情報のポインタが、種別Ｂのタスクの実行キューの先頭を指すように変更してもよい。これにより、種別Ｂのタスクが当該タイムスロットでも実行されることになる。
【００８５】
判定結果が種別Ｂ（優先度が０でない）ならば（Ｓ６０３：no）、mutex制御部１７は、呼び出し元のタスクのタスク管理ブロックを実行キューから外す（Ｓ６０７）。これにより当該タスクはスケジューリング対象から除外される。さらに、どの資源の専有状態が解除されるのを待っていることを示すために、前記タスク管理ブロックを mutex 管理ブロックの待ちキューに追加する（Ｓ６０８）。さらに、タスクの切換処理Ｓ１を呼び出すことにより次順位のタスクに切り換える（Ｓ６０９）。これによりタイムスロットの割当時間の残り時間において次順位のタスクが実行される（図６参照）。
【００８６】
＜４．mutexロック解除処理＞
図１３は、mutex制御部１７によるmutexロック解除処理の詳細を示すフローチャートである。この処理は、図８及び図９に示したロック解除処理Ｒであり、実行中のタスクが１つ資源のアクセスを終えたときに、当該実行中のタスクによって呼び出される処理である。
【００８７】
呼び出されると、mutex制御部１７は、当該資源に対応するmutex管理ブロックの待ちキューから先頭のタスク管理ブロックを取り出し（Ｓ７０１）、取り出したタスク管理ブロック内の優先度から待ち状態にあったタスクの種別を判定する（Ｓ７０２）。mutex制御部１７は、優先度が０（種別Ａ）ならば、取り出したタスク管理ブロックに対応するタイムスロット情報中の実行フラグを１（有効）にする（Ｓ７０３）。取り出したタスク管理ブロックに対応するタイムスロット情報は、例えば、実行フラグが０になっているタイムスロット情報に接続されているタスク管理ブロックのうち、取り出したタスク管理情報と同じタスク情報をもつタスク管理ブロックを検索することにより特定すればよい。さらに、mutex制御部１７は、当該mutex管理ブロック内のロック変数に０を書き込む（ロック解除状態にする）（Ｓ７０５）。
【００８８】
また、待ちキューから取り出したタスク管理ブロックの優先度が０でない（種別Ｂ）ならば、mutex制御部１７は、当該タスク管理ブロックを種別Ｂのタスクの実行キューに追加する。実行キューへの追加は、先頭から優先度の高い順に並ぶ位置に追加し（Ｓ７０４）、当該mutex管理ブロック内のロック変数に０を書き込む。
【００８９】
このように、待ち状態になっていたタスクは、実行可能状態に戻るので、スケジューリングの対象となり、次に実行状態になったとき再度資源のロック操作を行うことができる。
【００９０】
以上説明してきたように本実施の形態におけるプログラム実行装置によれば、種別Ａのタスクは１対１でタイムスロットを割り当てられる結果、一周期内で必ず選択実行されるので継続して処理性能を保証することができる。他方、種別Ｂのタスクは多対１で１つのタイムスロットを割り当てられる結果、継続して処理性能が保証されないが、優先度の高いものから実行されることになる。その結果、プログラマは、継続して処理性能を満たす必要のあるタスクに対しては優先度を考慮する必要もなく種別Ａに分類するだけでよく、処理性能を要求しないタスクに対しては種別Ｂに分類すればよい。これにより、全てのタスクに対して個別に優先度を付与する必要がなくなり、処理性能を確保するためのプログラム設計を容易にすることができ、プログラム設計の柔軟性を確保することができる。
【００９１】
なお、上記実施の形態では割当時間の指定はタスク情報に含まれている例を説明したが、タスク受付部１１が外部から割当時間の指定を受ける構成としてもよい。また、割当時間の指定ない場合は既定の割当時間としてもよい。
【００９２】
また、種別Ａのタスクには１つのタスクに１つのタイムスロットが割り当てられているが、１つのタスクに２つ以上のタイムスロットを割り当てる構成としてもよい。
【００９３】
さらに、種別Ｂのタスクに対して、複数のタスクに１つのタイムスロットが割り当てられているが、固定された２つ以上のタイムスロットの何れかに割り当てるようにしてもよい。例えば、優先度が奇数のタスクをタイムスロットＡに、偶数のタスクをタイムスロットＢに割り当てる構成としてもよい。
【００９４】
また、mutex管理ブロック内にロックしたタスク名を記録する所有タスク欄を設け、ロック解除されたとき、所有タスク欄を待ちキューから取り出したタスク名に書き換えて、ロック変数を有効なままにしてもよい。この場合、所有タスク欄に記憶されたタスクはロック操作を行わなくてもよく、確実に資源を使用することができるようになる。
【００９５】
最後に、プログラム実行装置の変形例を図１４に示す。図１に示したプログラム実行装置の構成と比較して、タイムスロット切換と同時に切換可能な８つのレジスタセットＲＳ０〜ＲＳ７を追加した点が異なっている。
【００９６】
１つのレジスタセットは１つのタイムスロットに対応させて、タスクのコンテキストを保持する。
種別Ｂの複数のタスクは１つのレジスタセットに対応するので、種別Ａのタスクのタイムスロットに切り換える際に、タスクスケジューリング部１０は、上記実施の形態と同様にレジスタセットＲＳ０に対する退避及び復帰を行う。
【００９７】
種別Ａのタスクは１つのレジスタセットに対応するので、種別Ａのタスクのタイムスロットに切り換える際に、タスクスケジューリング部１０は、コンテキストの退避及び復帰の代わりにレジスタセットの切換を行う。この場合、コンテキストの退避及び復帰が不要となるので、タスク切換を高速化することができる。このことから、周期レジスタ１８の周期及びタイムスロットの割当時間を極端に短くすることができる。例えば、種別Ａのタイムスロット時間を退避及び復帰に要していた時間程度まで短くすることができ、一周期を短縮することができる。
【００９８】
なお、図１４におけるレジスタセットの数は任意の個数でよく、タイムスロットの数がレジスタセットの数よりも多い場合は、例えば、レジスタセットの何れかを複数のタイムスロットが兼用し、当該レジスタセットに対しては、タイムスロット切り換え時にコンテキストの退避及び復帰を行う構成とすればよい。
【００９９】
また、図１４においてレジスタセットの数を２としてもよい。その場合、レジスタセットの１つを実行中のタスクが使用する表レジスタセットとし、他の１つを次に実行されるタスクのコンテキストをバックグラウンド処理により復帰させておくための裏レジスタセットとしてもよい。この構成によれば、アイドル状態を利用してバックグラウンド処理によりコンテキストの復帰をすることができ、裏と表の２つのレジスタセットを効率よく切り換えることによる高速化を図ることができる。
【０１００】
さらに、レジスタセットの数が２のとき、ロック解除によって待ち状態から実行可能状態に復帰したタスクが存在し 当該タスクが次に実行されるタスクである場合には、裏レジスタセットに復帰したコンテキストが次に実行されるタスクのコンテキストと食い違う可能性がある。これに対しては以下の構成とすればよい。すなわち、ロック解除処理（図１３参照）においてＳ７０５の直前に、待ち状態から実行可能状態に復帰したタスクが存在することを知らせる通知フラグを当該タスクのタスク管理ブロック内に設定するステップを追加し、スケジューリング処理（図１０参照）において、Ｓ４１１の直前に、通知フラグが待ち状態から復帰したタスクであることを示していれば、当該タスクのコンテキストを裏レジスタセットに復帰してから、レジスタセットの裏と表とを切り換えるステップを追加した構成とすればよい。
【０１０１】
【発明の効果】
以上説明してきたように本発明のタスク切換装置によれば、プログラマは、継続して処理性能を満たす必要のあるタスクに対しては優先度を考慮する必要もなく第１タイプに分類するだけでよく、処理性能を要求しないタスクに対しては第２タイプに分類すればよい。これにより、全てのタスクに対して個別に優先度を付与する必要がなくなり、処理性能を確保するためのプログラム設計を容易にすることができ、プログラム設計の柔軟性を確保することができるという効果がある。
【０１０２】
また、第２タイプのタスクは優先度の高いものから実行されるので、プログラマは、第１タイプのタスクに対して優先度を考慮する必要がなく、継続した処理性能を要求しないタスクを第２タイプに分類して優先度を付与すればよく、プログラム設計及び変更を容易にすることができる。
【図面の簡単な説明】
【図１】本発明の実施の形態におけるタスク切換を行うプログラム実行装置の主要部の構成を示すブロック図である。
【図２】タイムスロット記憶部内のタイムスロット情報と、タスク記憶部内のタスク管理ブロックの具体例を示す図である。
【図３】  mutex記憶部に記憶されるmutex管理ブロックと、タスク記憶部に記憶される待ちキューとを示す図である。
【図４】タイムスロット切換部及びタスク選択部によるタスク切換の様子を示す説明図である。
【図５】種別Ｂのタスクが終了した場合のタスク切換の様子を示す説明図である。
【図６】種別Ｂのタスクがロック操作に失敗した場合の様子を示す説明図である。
【図７】種別Ａのタスクがロック操作に失敗した場合の様子を示す説明図である。
【図８】タスクがロック解除する場合の様子を示す説明図である。
【図９】タスクがロック解除する場合の様子を示す他の説明図である。
【図１０】スケジューリング処理の詳細を示すフローチャートである。
【図１１】タスク追加処理の詳細を示すフローチャートである。
【図１２】  mutex制御部によるロック処理の詳細を示すフローチャートである。
【図１３】  mutex制御部によるmutexロック解除処理の詳細を示すフローチャートである。
【図１４】プログラム実行装置の変形例の構成を示す図である。
【符号の説明】
１０    タスクスケジューリング部
１１    タスク受付部
１２    タイムスロット記憶部
１３    タスク記憶部
１４    タイムスロット切換部
１５    タスク選択部
１６    mutex記憶部
１７    mutex制御部
１８    周期レジスタ
２０    プログラム記憶部
３０    タイマ制御部
４０    実行制御部
１００、１１０、１２０    タイムスロット情報
１００ａ、１１０ａ、１２０ａ  割当時間
１００ｂ、１１０ｂ、１２０ｂ  実行フラグ
１００ｃ、１１０ｃ、１２０ｃ  ポインタ
２００、２０１、２０２、２１０、２２０    タスク管理ブロック
２００ａ、２０１ａ、２０２ａ、２１０ａ、２２０ａ  タスク情報
２００ｂ、２０１ｂ、２０２ｂ、２１０ｂ、２２０ｂ  優先度
２００ｃ、２０１ｃ、２０２ｃ、２１０ｃ、２２０ｃ  リンクアドレス
３００、３０１    mutex管理ブロック
３００ａ、３０１ａ  ロック変数
３００ｂ、３０１ｂ  ポインタ
【図１】
0004750350.tif 000002
【図２】
0004750350.tif 000003
【図３】
0004750350.tif 000004
【図４】
0004750350.tif 000005
【図５】
0004750350.tif 000006
【図６】
0004750350.tif 000007
【図７】
0004750350.tif 000008
【図８】
0004750350.tif 000009
【図９】
0004750350.tif 000010
【図１０】
0004750350.tif 000011
【図１１】
0004750350.tif 000012
【図１２】
0004750350.tif 000013
【図１３】
0004750350.tif 000014
【図１４】
0004750350.tif 000015