(57)【特許請求の範囲】
【請求項１】
複数のタスクを巡回的に、そのタスクに割当てられた時間ずつ実行するプロセッサであって、
複数のタスク各々の実行制御用情報を記憶する記憶手段と、
複数のレジスタ群と、
順次、レジスタ群の1つを使用し、その使用するレジスタ群に保持されている実行制御用情報に基づいて、タスクを実行する実行手段と、
次に実行するタスクを選択する選択手段と、
前記実行手段でタスクが割当てられた時間実行されている間に、前記選択手段で選択されたタスクの実行制御用情報を、前記記憶手段から、現在使用しているレジスタ群以外のレジスタ群に読み込む復帰を行なう復帰手段と、
前記実行手段で実行しているタスクを中断する必要がある中断事由を検出する検出手段と、
前記復帰手段による復帰が開始される前に、前記検出手段により中断事由が検出された場合は、前記実行手段にタスクの実行を止めさせると共に、前記タスクの実行に使用していたレジスタ群以外のレジスタ群に保持されている実行制御用情報に基づいてタスクを次に実行させるように前記実行手段の制御を行ない、前記次に実行させるタスクの実行制御情報が保持されているレジスタ群と前記復帰を開始しようとしていたレジスタ群とが同じレジスタ群である場合には、前記復帰を取り止めさせる制御手段を備えること
を特徴とするプロセッサ。
【請求項２】
前記記憶手段は、更に、前記タスク各々の実行中に発生し得る中断事由ごとの解消に要する時間情報を記憶し、
前記制御手段は、前記復帰手段による復帰が終了する前に前記検出手段により中断事由が検出され、該当の時間情報に基づいて、前記復帰が終了する時より前記中断事由が解消される時が遅いと判断した場合に限り、前記実行手段に実行を止めさせると共に、前記タスクの実行に使用していたレジスタ群以外のレジスタ群に保持されている実行制御用情報に基づいてタスクを次に実行させるように前記実行手段の制御を行なう
ことを特徴とする請求項１記載のプロセッサ。
【請求項３】
前記記憶手段は、更に、前記タスク各々の実行中に発生し得る中断事由に関する情報を記憶し、
前記検出手段は、複数種類の中断事由を検出することができ、
前記制御手段が、前記検出手段が検出した中断事由に基づき、前記実行手段に実行を止めさせた場合、前記選択手段は、前記記憶手段に記憶されている中断事由に関する情報に基づき、前記検出された中断事由と同じ種類の中断事由が生じ得ないタスクを選択する
ことを特徴とする請求項１記載のプロセッサ。
【請求項４】
前記プロセッサは、更に、前記実行手段が実行しているタスクを止める原因となった中断事由が解消されたことを検出する解消検出手段を備え、
前記検出手段は、複数種類の中断事由を検出することができ、
前記制御手段は、前記検出手段が検出した中断事由に基づいて前記実行手段にタスクの実行を止めさせた後の別タスク実行中であって、前記解消検出手段が前記タスクの中断事由が解消されたことを検出するまでに、前記検出手段が前記中断事由と同じ種類の中断事由を検出した場合には、前記解消検出手段が前記検出をするまでの間、実行中のタスクの実行を止めさせ、他のタスクの実行も行なわせない
ことを特徴とする請求項１記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチタスクプロセッサに関し、特に、効率的にタスクを実行するための技術に関する。
【背景技術】
【０００２】
マルチタスクとは、１つのコンピュータシステムで、複数のタスク、つまり複数のプログラムによって実現される複数の処理を同時に実行することをいう。しかし、１つのプログラム実行機構しか有しないコンピュータシステムでは、ある瞬間には1つの仕事しか出来ないので、ＯＳ（Operating System）等の他の制御機構が、複数のタスクを非常に短い間隔で交互にプログラム実行機構に処理させることで、人の感覚からすれば同時進行しているかのように見せている。
【０００３】
従来、このマルチタスクを実現するための方法として、各タスクを一定時間ずつ順番に実行していくタイプのラウンドロビン方式がある。与えられたプログラム実行機構の時間（以下、「タイムスライス」という。）を使い果たしたタスクは、一旦中断されて、再度スケジューリングされ、再び自分の番が来たら、中断されていたタスクはその続きを再開する。
【０００４】
これらの各タスクは、その実行を一旦中断するときに、実行に必要な様々なレジスタ（以下、「レジスタ群」という。）に保持されている制御情報（以下、「コンテキスト」という。）をメモリに保存して、実行を再開するときに、メモリに保存してあるコンテキストをレジスタ群に格納し、中断時点から実行を再開する。  
このマルチタスクに関して、複数のレジスタ群を切り替えて用いることにより、プログラム実行機構の無駄を省き、効率的に複数のタスクを実行することが出来る技術が公開されている（特許文献１参照）。この技術では、複数のレジスタ群のうちの１レジスタ群を用いてタスクが実行されている間に、次に実行するタスクのコンテキストを他のレジスタ群に予め格納する処理を行っておき、１レジスタ群を用いて実行しているタスクの持ち時間が終了した時点で、すぐに他のレジスタ群を用いて実行を行うことで効率化を図っている。
【特許文献１】特開２００３−２７１３９９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし、タスクの実行中においては、タスクが持ち時間いっぱい実行できない場合、すなわち持ち時間の途中で、キャッシュミス等のタスクの実行を中断しなければならない場合が生じ得る。このような場合は、残りの時間は何も行わないか、ラウンドロビン方式等でのスケジューリングに沿って、次に実行する予定のタスクを行うことになる。
残りの時間に何も行わないのは、プログラム実行機構が遊んでしまうことになるし、次のタスクを行うためには、そのタスクのコンテキストをレジスタ群に格納する処理を行ってから、そのタスクを実行しなければならない場合が生ずることになるため、どちらにしてもプログラム実行機構の効率的な利用がなされているとは言い難い。
【０００６】
そこで、本発明は、タスクの中断に係る上記問題点に鑑みてなされたものであり、1つのプログラム実行機構で擬似並列的に複数のタスクを実行する場合に、より効率的にタスクの実行が可能なプロセッサの提供を目的とする。
【課題を解決するための手段】
【０００７】
上記課題を解決する為に、本発明のプロセッサは、複数のタスクを巡回的に、そのタスクに割当てられた時間ずつ実行するプロセッサであって、複数のタスク各々の実行制御用情報を記憶する記憶手段と、複数のレジスタ群と、順次、レジスタ群の1つを使用し、その使用するレジスタ群に保持されている実行制御用情報に基づいて、タスクを実行する実行手段と、次に実行するタスクを選択する選択手段と、前記実行手段でタスクが割当てられた時間実行されている間に、前記選択手段で選択されたタスクの実行制御用情報を、前記記憶手段から、現在使用しているレジスタ群以外のレジスタ群に読み込む復帰を行なう復帰手段と、前記実行手段で実行しているタスクを中断する必要がある中断事由を検出する検出手段と、前記復帰手段による復帰が開始される前に、前記検出手段により中断事由が検出された場合は、前記実行手段にタスクの実行を止めさせると共に、前記タスクの実行に使用していたレジスタ群以外のレジスタ群を次に使用させる制御を行ない、前記次に使用するレジスタ群と前記復帰を開始しようとしていたレジスタ群とが同じレジスタ群である場合には、前記復帰を取り止めさせる制御手段を備えることを特徴とする。
【発明の効果】
【０００８】
本発明に係るプロセッサは、上述の構成を備えることにより、実行中のタスクを中断せざる負えなくなっても、他のレジスタ群に残っている直前に実行していたタスクの情報を基に、レジスタ群を切り替えるだけでタスクを実行することが可能になるので、プログラム実行機構を無駄なく使用することができるようになる。
また、前記記憶手段は、更に、前記タスク各々の実行中に発生し得る中断事由ごとの解消に要する時間情報を記憶し、前記制御手段は、前記復帰手段による復帰が終了する前に前記検出手段により中断事由が検出され、該当の時間情報に基づいて、前記復帰が終了する時より前記中断事由が解消される時が遅いと判断した場合に限り、前記実行手段に実行を止めさせると共に、前記タスクの実行に使用していたレジスタ群以外のレジスタ群を次に使用させる制御を行なうこととしてもよい。
【０００９】
これにより、実行中のタスクに発生した中断事由が解消する方が、レジスタ群を切り替えて実行するよりも早い場合には、中断事由の解消を待つことができるので、無条件にレジスタ群を切り替えてタスクを実行するよりも、より効率的にプログラム実行機構を使用することができるようになる。
また、前記記憶手段は、更に、前記タスク各々の実行中に発生し得る中断事由に関する情報を記憶し、前記検出手段は、複数種類の中断事由を検出することができ、前記制御手段が、前記検出手段が検出した中断事由に基づき、前記実行手段に実行を止めさせた場合、前記選択手段は、前記記憶手段に記憶されている中断事由に関する情報に基づき、前記検出された中断事由と同じ種類の中断事由が生じ得ないタスクを選択することとしてもよい。
【００１０】
これにより、実行中のタスクに発生した中断事由が解消する前に、同じ中断事由が発生しないタスクを選択して実行することができるので、その中断事由の処理能力を超えることなくタスクを実行することができ、より効率的にプログラム実行機構を使用することができるようになる。
また、前記プロセッサは、更に、前記実行手段が実行しているタスクを止める原因となった中断事由が解消されたことを検出する解消検出手段を備え、前記検出手段は、複数種類の中断事由を検出することができ、前記制御手段は、前記検出手段が検出した中断事由に基づいて前記実行手段にタスクの実行を止めさせた後の別タスク実行中であって、前記解消検出手段が前記タスクの中断事由が解消されたことを検出するまでに、前記検出手段が前記中断事由と同じ種類の中断事由を検出した場合には、前記解消検出手段が前記検出をするまでの間、実行中のタスクの実行を止めさせ、他のタスクの実行も行なわせないこととしてもよい。
【００１１】
これにより、実行中のタスクに発生した中断事由が解消する前に、同じ中断事由が発生した場合には、前の中断事由が解消するまでタスクの実行を行わないので、中断事由が連続発生することを防止することができる。
すなわち、タスクの実行を止めている間は、プログラム実行機構を使用しない時間が生ずるが、中断事由の連続発生によって処理能力を超えることを防止することができる。
【００１２】
従って、結果的に、より効率的にプログラム実行機構を使用することができるようになる。
また、さらに、タスクの実行を止めている間のプログラム実行機構を使用しない時間は、クロックを供給しないことで消費電力を低減できるという利点もある。
【発明を実施するための最良の形態】
【００１３】
＜実施形態＞
＜本プロセッサの動作原理＞
本発明に係るプロセッサは、２つのレジスタ群をもち、複数のタスクを擬似並列的に実行するものである。その動きを、図１（Ａ）を用いて説明する。
図１（Ａ）は、本プロセッサでのマルチタスクの実行例を表すタイムチャートである。
【００１４】
本プロセッサは、２つのレジスタ群を切り替えることができ、どちらのレジスタ群を使用しても同じように実行できるものである。
カレントレジスタは、現在実行に使用しているレジスタを示しており、ＲＥＧ１とＲＥＧ２は、本プロセッサの保有しているレジスタ群を表す。例では、ＲＥＧ１とＲＥＧ２を交互に切り替えながら実行している。
【００１５】
また、実行タスクは、カレントレジスタで実行しているタスクを表している。例では、タスクＡ、タスクＢ、タスクＣの順番で、順々に実行している。
ＲＥＧ１とＲＥＧ２は、それぞれのレジスタ群に保持しているコンテキストがどのタスクのものかを表している。
例えば、プログラム実行機構の割り当て時間帯であるタイムスライス１０１で示すカレントレジスタでは、ＲＥＧ２が使用されてタスクＢが実行されている。ＲＥＧ２には、タスクＢのコンテキストが、時間ｔ１０から時間ｔ１１の間に、書き込まれている（以下、「復帰」という。）。
【００１６】
この復帰の処理は、タイムスライス１００で行われている。すなわち、ＲＥＧ１を使用してタスクＡを実行している間に、使っていない他のレジスタであって、次に使用される予定のレジスタ（以下、「スタンバイレジスタ」という。）ＲＥＧ２に、実行中のタスクＡの次に実行するタスクＢのコンテキストを復帰しておくのである。
このように、次に実行するタスクのコンテキストを前倒しで復帰しておくことにより、レジスタを切り替えるのみで複数のタスクを効率よく実行できることになる。すなわち、プログラム実行機構が遊ぶことなく、実行できることになる。
【００１７】
尚、時間ｔ１０から時間ｔ１１の間に行う処理は、復帰の処理のみならず、レジスタに保持されているコンテキストのメモリへの退避、次に実行するタスクの選択も行われる。
次に、図１（Ｂ）を用いて、実行中のタスクに中断事由が発生し、タスクの実行が止められた場合について説明する。
図１（Ｂ）は、従来のプロセッサでの実行中のタスクが中断した例を表すタイムチャートである。
【００１８】
タイムスライス１２０で示すカレントレジスタでは、タスクＢが実行されており、時間ｔ１２で中断事由（矢印）が発生し、タスクＢの実行が止められたとする。
この場合の処理としては、２つ考えられる。1つは、タイムスライス１２０の残り時間は何も行わず、時間が来たらスタンバイレジスタであるＲＥＧ１に切り替えてタスクＣの実行を開始する方法である。
【００１９】
もう1つは、次に実行予定のタスクＣを、時間を待たずに実行する方法である。
中断事由の発生時間である時間ｔ１２が時間ｔ１４よりも後に発生した場合は、スタンバイレジスタであるＲＥＧ１に既にタスクＣのコンテキストが復帰しているため、すぐにレジスタの切り替えを行い、タスクＣの実行を開始する。
また、時間ｔ１２が時間ｔ１４より前に発生した場合は、すぐにスタンバイレジスタであるＲＥＧ１にタスクＣのコンテキストを復帰し、レジスタの切り替えを行い、タスクＣの実行を開始する。時間ｔ１２が時間ｔ１４と時間ｔ１４の間に発生した場合は、タスクＣのコンテキストの復帰完了を待って、タスクＣの実行を開始する。
【００２０】
後者の方法が、前者の方法よりも、効率よくタスクの実行ができるが、時間ｔ１２が時間ｔ１３より前に発生した場合は、復帰の処理の時間分、プログラム実行機構が遊んでしまうことになる。
本プロセッサは、このような場合であっても、すなわち、実行しているタスクに中断事由が発生し、かつ、まだスタンバイレジスタに次に実行するタスクのコンテキストが復帰されていない場合でも、できるだけプログラム実行機構を遊ばせることなく動作させることができるものである。
【００２１】
図２を用いて、本プロセッサの動作の概要を説明する。
図２は、本プロセッサでの実行中のタスクが中断した例を表すタイムチャートである。
タイムスライス１３１のカレントレジスタ（ＲＥＧ２）でタスクＢを実行中に、時間ｔ２２に中断事由（矢印）が発生した場合は、スタンバイレジスタ（ＲＥＧ１）に切り替えて、ＲＥＧ１をカレントレジスタとして、再度タスクＡを実行する。すなわち、スタンバイレジスタ（ＲＥＧ１）に残っていたコンテキストを利用するのである。
【００２２】
このように切り替えを行えば、タイムスライス１３１のタスクＢとタイムスライス１３２のタスクＡが連続するため、プログラム実行機構が遊ばなくなる。
但し、時間ｔ２２は、スタンバイレジスタ（ＲＥＧ１）に次に実行するタスクの復帰を開始する予定の時間ｔ２３より前である必要がある。復帰の処理を開始する前であれば、現在実行中のタスクＢの前に実行したタスクＡのコンテキストがまだ残っているからである。
【００２３】
このような、スタンバイレジスタに次のタスクの復帰が開始される前に、中断事由が発生するケースは、全体から見れば多い。
その理由は、次に実行するタスクを選んで復帰する処理は、タスクの切り替え直前が最も望ましいからである。
というのは、タスクには、そのタスクで実行するプログラムが割り当てられているが、そのプログラムは、常に実行可能な状態ではなく、時間的に後になればなるほど実行可能である確率が上がるからである。すなわち、プログラムが実行できない場合とは、データ待ちや、資源待ちで止まっている場合が多いことから、時間的に後に判断すればするほど、待ちが解消して実行可能な確率が上がることになるからである。
【００２４】
つまり、タイムスライスの中で次のタスクの復帰が開始される前の時間が最も長いことになるため、中断事由の発生する確率も高くなる。
ここで、問題となるのは、タスクを順々に実行していく周期が崩れることであり、この例の場合、タスクＡが他のタスクよりも結果的に優先的に実行されてしまう場合が生じ得ることである。
【００２５】
通常、タスクには、そのタスクで実行すべきプログラムが割り当てられ、その割り当てには、そのタスクのタイムスライスの長さを考慮する。すなわち、そのプログラムを速く実行したい場合や、実行時間を保障しなければいけない場合には、タイムスライスの長いタスクに割り当てるなどである。
したがって、周期が崩れないことが、プログラムをタスクに割り当てる際の前提条件となる。
【００２６】
本プロセッサは、一時的には、周期は乱れるものの、すぐにその乱れを調整して、一定の時間幅でみればつじつまが合うようにしている。
例では、タイムスライス１３０からタイムスライス１３５の範囲でみれば、タスクＡ、タスクＢ、タスクＣはそれぞれ２回ずつ実行されていることになる。このタイムスライス１３０からタイムスライス１３５の時間幅は、プログラム全体の実行時間に比べれば、非常に小さいものであり、プログラムの実行になんら影響を与えるものではない。
【００２７】
以下、本発明に係るプロセッサ及びマルチタスクの実行方法について説明する。
＜構成＞
図３は、実施形態におけるプロセッサ１０００の構成を示す機能ブロック図である。
プロセッサ１０００は、スケジューリング制御部１１００、プログラム実行制御部１２００、コンテキスト記憶部１３００、第１レジスタ群１４００、第２レジスタ群１５００、レジスタ切替部１６００、プログラム実行部１７００、タスク管理情報記憶部１８００及びプログラム情報記憶部１９００から構成される。
【００２８】
このプロセッサ１０００は、複数の集積回路により構成されている。
本ブロック図では、プロセッサが通常有している機能である通信機能、割込み機能などは図示していない。
まず、スケジューリング制御部１１００は、タスクの実行順序を制御する機能を有する。具体的には、後述する記憶部に記憶しているタスクに関する情報を基に、次に実行するタスクを選択する。また、時間を管理し、各タスクの割り当て時間が終了する前に、レジスタにコンテキストを復帰する処理を行う。
【００２９】
プログラム実行制御部１２００は、プログラムの実行を制御する機能を有する。具体的には、実行中のプログラムから、外部メモリ３０００へのアクセス依頼や、外部プロセッサ２０００への処理依頼があった場合に、それぞれの外部機器とのデータのやり取り等を行う。同時に、プログラムからの中断事由を検出する役割を有することになる。また、レジスタ群の切替の指示をレジスタ切替部１６００に出す機能等を有する。
【００３０】
コンテキスト記憶部１３００は、タスクの実行に関する制御情報であるコンテキストを保存しておく機能を有する。複数のタスクが同時に実行されている場合に、それぞれのタスクのコンテキストを保存する。このコンテキストは、原則として、そのタスクのタイムスロットが終了し、タスクを一旦中断する場合に、カレントレジスタから書き込まれ、そのタスクが再開される場合に、スタンバイレジスタに読み出される。
【００３１】
第１レジスタ群１４００及び第２レジスタ群１５００は、プログラム実行部１７００が処理を実行するために、一時的にデータを格納する場所であり、命令、アドレス、演算するデータ、演算実行後の結果などを格納する。また、本レジスタは、本プロセッサが実行に必要とする全てのレジスタ、例えば、スタックレジスタやプログラムカウンタなどの機能が限定されているものや、機能が限定されていない汎用レジスタを含むものとする。
【００３２】
第１レジスタ群１４００と第２レジスタ群１５００とは、基本的に同じものであり、レジスタ切替部１６００によって、一方のレジスタ群が選択され、選択されたレジスタ群を使用してタスクが実行される。この、選択されて現在タスクが実行されている方のレジスタをカレントレジスタと呼ぶ。一方、現在選択されていない方のレジスタ群、すなわち次に選択される予定のレジスタ群をスタンバイレジスタと呼ぶ。
【００３３】
プログラム実行部１７００は、カレントレジスタを使用しながら、プログラムを実行する機能を有する。このプログラム実行部１７００は、いわゆるプログラム実行機構であり、同時に１つのプログラムのみを実行できるものである。
次に、タスク管理情報記憶部１８００は、同時に実行している複数のタスクの状態を記憶する機能を有する。
【００３４】
また、プログラム情報記憶部１９００は、タスクに割り当てられているプログラムの状態を示す情報を記憶する機能を有する。
このタスク管理情報記憶部１８００とプログラム情報記憶部１９００は、本実施形態においては、動作が極めて高速な記憶素子であるとする。
＜データ＞
以下、本プロセッサで用いる主なデータについて、図４から図８を用いて説明する。
【００３５】
図４（Ａ）は、タスク制御テーブル１８１０の構成及び内容例を示し、図４（Ｂ）は、タスク情報１８２０の構成及び内容例を示す。
タスク制御テーブル１８１０及びタスク情報１８２０は、タスク管理情報記憶部１８００に記憶されている。
図４（Ａ）のタスク制御テーブル１８１０は、現在実行中のタスク、次に実行予定のタスク及び直前に実行したタスクを示す情報を保持している。
【００３６】
プレビアスタスクは、直前に実行したタスクを示す。カレントタスクは、現在実行中のタスクを示し、ネクストタスクは、次に実行予定のタスクを示している。
具体的には、タスク情報１８２０の該当するタスクを示す情報、例えば、インデックス値、アドレス等を記憶している。
このテーブルのタスクは、タイムスライスが１つ終了する毎にスケジューリング制御部１１００が、書き換える。その書き換えは、基本的に、次の通りである。
【００３７】
実行しているカレントタスクの実行が終了すると、カレントタスクを新プレビアスタスクとし、ネクストタスクを新カレントタスクとする。新カレントタスクの次のタスクを新ネクストタスクとする。
次に、図４（Ｂ）のタスク情報１８２０は、タスクＩＤ１８２１、実行履歴情報１８２２とプログラム履歴１８２４で構成される。
【００３８】
タスクＩＤ１８２１は、タスクの識別子であり、タスク固有のものである。例では、「Ｔ０」等としている。
また、このタスク情報１８２０のインデックス順に、タスクは実行されるものとする。例でいえば、タスクＩＤ「Ｔ０」のタスクが実行され、次に、タスクＩＤ「Ｔ１」のタスク、「Ｔ２」のタスク、「Ｔ０」のタスク、と順に実行されることになる。
【００３９】
実行履歴情報１８２２は、タスクのタイムスライスが何度実行されたかを示す履歴を表している。
本情報は、３ビットで構成される。初期値は、「０００」であり、タイムスライスが一回実行されるたびに、１加算され「００１」、「０１０」と増えて行き、「１００」の次は、「０００」となる。
【００４０】
この情報は、タスクに割り当てられているプログラムの性質や、実行の状態などを基に、スケジューリング制御部１１００が設定する。従って、常に同じではない。また、この例では、便宜上、タスクは４つ記載しているが、４つに限られないことはもちろんである。
プログラム履歴１８２４は、タスクに割り当てられているプログラムを示している。例えば、タスクＩＤ「Ｔ０」で表されるタスクに割り当てられているプログラムは、「Ｐ０」である。本実施形態では、タスクとプログラムは、１対１に割り当てられているものとして説明するが、タスクに割り当てられるプログラムとして、複数のプログラムが候補として存在し、状況に応じて最適なプログラムを候補の中から選択して割り当てることとしてもよい。
【００４１】
図５は、タスク制御テーブル１８１０とタスク情報１８２０の関係の例を示す図である。
この例では、タスク制御テーブル１８１０のプレビアスタスクが、タスク情報１８２０のタスクＩＤ１８２１が「Ｔ２」のタスクを指している。同様にカレントタスクがタスク「Ｔ０」を、ネクストタスクがタスク「Ｔ１」を指している。  
【００４２】
このことは、現在実行中のタスクがタスク「Ｔ０」であり、タスク「Ｔ０］の直前に実行されていたタスクが「Ｔ２」で、実行中のタスク「Ｔ０」の次に実行されるのがタスク「Ｔ１」であることを表している。このポイント関係は、次に実行するタスクを選択する為にスケジューリング制御部１１００が参照し、実行するタスクが変わるたびに、スケジューリング制御部１１００が書き換える。
【００４３】
次に、図６は、プログラム情報１９１０の構成及び内容例を示す図である。
プログラム情報１９１０は、プログラム情報記憶部１９００に記憶されている。
プログラム情報１９１０は、プログラムＩＤ１９１１、中断事由情報１９１２、解消時間情報１９１３及びプログラム状態情報１９１４とで構成される。
プログラムＩＤ１９１１は、プログラムの識別情報である。このプログラムＩＤ１９１１は、タスク情報１８２０のプログラム履歴１８２４で示されるものである。
【００４４】
中断事由情報１９１２は、プログラムＩＤ１９１１で示されるプログラムの実行中に起こり得る中断事由を表したものである。
この中断事由とは、この事由が発生した場合には、実行しているタスクの実行を中断せざるを得ないような事由をいう。本実施形態では、「キャッシュミス」、「ＤＭＡ待ち」、「外部処理待ち」の３つの事由を中断事由としている。
【００４５】
「キャッシュミス」とは、キャッシュにアクセスしたが、要求されたデータが見つからないことをいい、ハードディスク等からデータを読み出すための時間を要する。
「ＤＭＡ待ち」とは、各種装置とメモリ間でデータをやりとりする時間が発生することをいう。尚、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）とは、プログラム実行機構であるプログラム実行部１７００を介さずに各装置とメモリ間でデータのやりとりを行う方式をいう。
【００４６】
「外部処理待ち」とは、プログラム実行中に、外部プロセッサが処理すべきデータが発生し、外部プロセッサにその処理を依頼し、その処理待ちの場合や、処理を依頼した外部プロセッサの処理完了が遅くデータが滞り、データ待ちの状態になった場合などである。
次に、解消時間情報１９１３は、中断事由が解消するのに要する予想時間である。中断事由情報１９１２で、「あり」とされた中断事由が解消するのに要する時間を示している。この解消時間情報は、予め設定されているものとする。
【００４７】
例えば、プログラムＩＤ１９１１が「Ｐ１」で示されるプログラムは、実行中に「キャッシュミス」の中断事由が発生する可能性があり、それは、「１００」クロックで解消されると予想される。
プログラム状態情報１９１４は、プログラムが実行可能であるか否かなどの、プログラムの状態を表す。本実施形態では、「実行中」、「実行待ち」、「中断中」の３状態があるとする。
【００４８】
「実行中」は、プログラムが、現在実行中であることを表す。「実行待ち」
は、実行する準備が出来ており、実行の順番が回ってくるのを待っている状態をいう。また、「中断中」は、いまだ実行の準備が出来ていない状態をいう。
図７は、コンテキスト情報１９３０の構成及び内容例を示す図である。
コンテキスト情報１９３０は、プログラム情報記憶部１９００に記憶されている。
【００４９】
コンテキストは、プログラム毎にコンテキストの保存領域を確保しており、対応する領域に保存してある。プログラムが中断される場合に、カレントレジスタ群の内容をそのプログラムのコンテキスト領域に上書きする。また、再実行する場合に、実行するプログラムの領域に保存してあるコンテキストを読み出し、スタンバイレジスタに書き込む。これらの処理は、スケジューリング制御部１１００によって行われる。
【００５０】
＜動作＞
以下、上述したプロセッサ１０００の動作について図８〜図１６を用いて説明する。
ここでは、実行するタスクを入れ替える処理、言い換えれば、次に実行するタスクを選択する処理について説明する。タスクを実行するための他の処理に関しては、通常のプロセッサと同様である（特許文献１参照）。
【００５１】
このタスク入替処理のフローチャートは、カレントレジスタを使用して実行中に、実行中のタスクに中断事由が発生した場合と、予定通りにタスクが実行されている場合との、２場面で行われる処理を示している。
本実施形態では、タスク入替処理の方法として、２つの方法について説明する。
２つの方法ともに、タスク情報１８２０の実行履歴情報１８２２（図４（Ｂ）参照）を使用して行う。
【００５２】
まず、１つ目の方法から説明する。
＜その１＞
１つ目の方法は、タスク情報１８２０の実行履歴情報１８２２を、実行したタイムスライスのカウンタとして使用する方法である。
図８は、タスク入替処理（その１）を表すフローチャートである。
【００５３】
図８の説明に際し、図１０を参照する。図１０は、タスク実行中の実行履歴情報１８２２の遷移を表した図である。図１０では、３つのタスクが実行される例を示している。
図１０（Ａ）は、実行中のタスクに中断事由が発生しない例を表す図である。
タスクは、「Ｔ０」、「Ｔ１」、「Ｔ２」の順で実行されるものとする。例えば、最初、それぞれのタスクの実行履歴情報１８２２は、「０００」である。タイムスライス２００でタスク「Ｔ０」、すなわちプログラム「Ｐ０」が実行されると、タスク「Ｔ０」の実行履歴情報が１加算されて「００１」となる。図では、便宜上、実行履歴情報が変化したときのみを記載している。
【００５４】
その後、それぞれのタスクが順に実行されていく毎に、そのタスクの実行履歴情報が１ずつ加算されていくことになる。
図１０（Ｂ）は、実行中のタスクに中断事由が発生した例を表す図である。
この図１０（Ｂ）を使用しながら、動作を説明する。また、タスクに割り当てられたプログラムは、実行待ちの状態であるとする。
【００５５】
まず、タイムスライス２１０において、カレントレジスタ（第１レジスタ群１４００とする。）を使用してタスク「Ｔ１」に割り当てられているプログラム「Ｐ１」を、プログラム実行部１７００が実行している。
プログラム「Ｐ１」は、プログラム実行制御部１２００を通じて、外部メモリ３０００にデータを読みに行く処理を行うが、中断事由である「キャッシュミス」を起し、その旨をプログラム実行制御部１２００に通知される。
【００５６】
中断事由を通知されたプログラム実行制御部１２００は、タスク入替処理をスケジューリング制御部１１００に依頼する。
タスクの入替処理の依頼を受けたスケジューリング制御部１１００は、この依頼が中断事由が発生した場合の依頼であることを判断し（ステップＳ１０：ＹＥＳ）、スタンバイレジスタ「第２レジスタ群」に、次のタスク「Ｔ２」のコンテキストが既に復帰されているかを判断する（ステップＳ１１）。
【００５７】
スケジューリング制御部１１００が、タスク入替処理の依頼が中断事由が発生した場合の依頼であると判断できるのは、スケジューリング制御部１１００が時間管理を行っているからである。実行中のタイムスライスの終了時間より前にこの依頼があれば、中断事由による依頼であると判断する。また、復帰の処理は、スケジューリング制御部１１００自身が行うため、復帰中であるか否かは判断できる。
【００５８】
尚、このタイムスライス２１０のタスク「Ｔ１」実行中に発生した中断事由のタイミングは、まだ次のタスクの復帰処理が開始されていない時とする（以下、特に説明が無い場合は、同様とする。）。
従って、スケジューリング制御部１１００は、スタンバイレジスタ「第２レジスタ群」に、次のタスク「Ｔ２」のコンテキストが復帰されておらず（ステップＳ１１：ＮＯ）、復帰の処理を開始する前である場合（ステップＳ１２：ＹＥＳ）であると判断し、スタンバイレジスタ「第２レジスタ群」に残っているコンテキスト、すなわちタスク「Ｔ０」を実行するための処理に移る。
【００５９】
スケジューリング制御部１１００は、スタンバイレジスタに用意されているタスク「Ｔ０」に割り当てられているプログラム「Ｐ０」の実行履歴情報１８２２に１加算して、「０１１」とする（ステップＳ１４）。その後、プログラム実行制御部１２００に、タスクの入替処理が完了した旨を通知する。
タスクの入替処理が完了した旨の通知を受けたプログラム実行制御部１２００は、スタンバイレジスタ「第２レジスタ群」を使用して実行するために、スタンバイレジスタ「第２レジスタ群」をカレントレジスタに切り替える旨をレジスタ切替部１６００に通知する。その後、実行の開始をプログラム実行部に通知し、タスク「Ｔ０」の実行が開始される（ステップＳ１５）。
【００６０】
これで、タイムスライス２１１で、タスク「Ｔ０」が実行されることになる。
尚、スタンバイレジスタ「第２レジスタ群」に、次のタスク「Ｔ２」のコンテキストが既に復帰されている場合（ステップＳ１１：ＹＥＳ）には、スタンバイレジスタ「第２レジスタ群」に復帰済みのコンテキスト、すなわち次のタスク「Ｔ２」を実行するための処理に移る。
【００６１】
また、スタンバイレジスタ「第２レジスタ群」に、次のタスク「Ｔ２」のコンテキストが復帰されておらず（ステップＳ１１：ＮＯ）、復帰している最中である場合（ステップＳ１２：ＮＯ）には、次のタスク「Ｔ２」のコンテキストの復帰が完了するのを待って（ステップＳ１３）、スタンバイレジスタ「第２レジスタ群」に復帰が完了したコンテキスト、すなわち次のタスク「Ｔ２」を実行するための処理に移る。
【００６２】
次に、タイムスライス２１２に実行するタスクを選択する方法について説明する。
タイムスライス２１１の時間が終了する所定時間前に、スケジューリング制御部１１００は、タスクの入替処理を行う。
スケジューリング制御部１１００は、タスクの入替処理がタイムスライスを使い果たす場合の入替処理であることから（ステップＳ１０：ＮＯ）、次に実行するタスク選択処理を行う（ステップＳ１６）。
【００６３】
この選択処理の詳細は、図９を用いて説明する。
図９は、次に実行するタスク選択処理（その１）を表すフローチャートである。
スケジューリング制御部１１００は、次に実行するタスクを選択する場合に、タスク情報１８２０の実行履歴情報１８２２を検索し、実行履歴情報１８２２の値が最も小さいものを選び出す（ステップＳ２０）。
【００６４】
検索結果が、１つである場合（ステップＳ２１：ＮＯ）は、その該当タスクを次に実行するタスクとする（ステップＳ２３）。
また、検索結果が複数ある場合（ステップＳ２１：ＹＥＳ）は、その中で、実行順序の最も早いタスクを次に実行するタスクとする（ステップＳ２２）。
例では、タイムスライス２１１の段階で、タイムスライス２１２で実行するタスクを選択する。従って、ステップＳ２０では、タスク「Ｔ２」が検索される。
【００６５】
また、検索されたタスクは１つであることから、次に実行するタスクはタスク「Ｔ２」となる。
次に実行するタスク「Ｔ２」を選択したスケジューリング制御部１１００は、スタンバイレジスタ「第１レジスタ群」のコンテキスト、すなわちタスク「Ｔ０」で実行したプログラム「Ｐ０」のコンテキストをタスク管理情報記憶部１８００に保存しているコンテキスト情報１９３０のプログラム「Ｐ０」の部分に上書きし、退避する。その後、次に実行するタスク「Ｔ２」で実行するプログラム「Ｐ２」のコンテキストをコンテキスト情報１９３０からスタンバイレジスタ「第１レジスタ群」に読み込み、復帰する（ステップＳ１７）。
【００６６】
その後、スタンバイレジスタ「第１ジスタ群」のコンテキストを使用して、タスク「Ｔ２」を実行するための処理（ステップＳ１４，ステップＳ１５）を行う。
これで、タイムスライス２１２で、タスク「Ｔ２」が実行される。
それ以降、中断処理が発生しなければ、タイムスライス２１３においてタスク「Ｔ０」を実行した段階で、タイムスライス２１１でタスク「Ｔ０」を前倒しで実行した分が解消され、タスク間の実行時間が保障されることになる。
【００６７】
＜その２＞
次に、タスク入替処理の２つ目の方法について、説明する。
１つ目の方法は、タスク情報１８２０の実行履歴情報１８２２を、実行したタイムスライスのカウンタとして使用していたが、これから説明する２つ目の方法は、実行履歴情報１８２２を、予定外に前倒しで実行したタイムスライスのカウンタとして使用する方法である。
【００６８】
図１１は、タスク入替処理（その２）を表すフローチャートである。
図１１の説明に際し、図１３を参照する。図１３は、タスク実行中の実行履歴情報１８２２の遷移を表した図である。図１３（Ａ）は、１回中断事由が発生した例を示す図であり、図１３（Ｂ）は、連続して中断事由が発生した例を示す図である。図１３（Ｂ）では、説明の便宜上、４つのタスクで説明する。
【００６９】
図１１のタスク入替処理（その２）については、図８のタスク入替処理（その１）との差を中心に説明する。
ステップ１０からステップ１２の処理は、図８と同じである。
タイムスライス３００においてタスク「Ｔ１」を実行中に中断事由が発生したことを検知したプログラム実行制御部１２００は、タスクの入替処理をスケジューリング制御部１１００に依頼する。
【００７０】
タスクの入替処理の依頼を受けたスケジューリング制御部１１００は、この依頼が中断事由が発生した場合の依頼であることを判断し（ステップＳ１０：ＹＥＳ）、スタンバイレジスタ「第２レジスタ群」に残っている、前に実行したタスク「Ｔ０」のコンテキストを使用して、タスクを実行するための処理に移る（ステップ１１：ＹＥＳ、ステップ１２：ＹＥＳ）。
【００７１】
ステップ４３に関しては、特殊ケースであるため、図１５及び図１６を用いて後で説明する。通常は、ＮＯのルートを通る。
スケジューリング制御部１１００は、スタンバイレジスタに用意されているタスク「Ｔ０」に割り当てられているプログラム「Ｐ０」の実行履歴情報１８２２に１加算して、「０１」とする（ステップＳ４１）（図１３（Ａ）参照）。その後、プログラム実行制御部１２００に、タスクの入替処理が完了した旨を通知する。
【００７２】
タスクの入替処理が完了した旨の通知を受けたプログラム実行制御部１２００は、実行レジスタを切り替えて、プログラムを実行する（ステップＳ１５）。
タスク入替処理（その２）では、図９のタスク入替処理（その１）と異なり、スタンバイレジスタに残っている、直前に実行したタスクのコンテキストを使用してタスクを実行する場合にのみ、実行履歴情報１８２２を加算する。
【００７３】
この違いに伴い、通常のタイムスライスが終了した場合の、次のタスクを選択する処理も異なる（ステップＳ４２）。
次に実行するタスクを選択する処理（その２）については、図１２、図１３及び図１４を用いて説明する。
まず、図１２について図１３を参照しながら説明する。
【００７４】
図１２は、次に実行するタスク選択処理（その２）を表すフローチャートである。図１３は、タスク入れ替処理（その２）を行う場合の実行履歴情報１８２２の遷移を表す図である。
スケジューリング制御部１１００は、次に実行するタスクを選択する場合に、タスク制御テーブル１８１０のネクストタスクが示すタスクの実行履歴情報１８２２を検索し、実行履歴情報１８２２の値がゼロ（０ｘ００）である場合、すなわち、一度も前倒しで実行してない場合（ステップＳ５０：ＮＯ）は、そのネクストタスクを次に実行するタスクとする（ステップＳ５３）。
【００７５】
実行履歴情報１８２２の値がゼロ（０ｘ００）より上である場合、すなわち、一度でも前倒しで実行している場合（ステップＳ５０：ＹＥＳ）は、その該当タスクの実行履歴情報１８２２から１減算する（ステップＳ５１）。すなわち、一回飛ばすため、余分に前倒しで行っている回数を１減らす処理を行う。
その後、タスク制御テーブル１８１０の内容を、ネクストタスクを実行したとして、張り替える。すなわち、現ネクストタスクの次のタスクをカレントタスクとし、このカレントタスクの次のタスクをネクストタスクとし、現カレントタスクをプレビアスタスクとする（ステップＳ５２）。
【００７６】
そして、ステップ５０からステップ５２の処理を繰り返し、実行履歴情報１８２２の値がゼロのタスクが出てきたら、そのタスクを次に実行するタスクとする（ステップＳ５３）。
例の場合、タイムスライス３０２で実行中のタスク「Ｔ２」の次に実行予定のタスクはタスク「Ｔ０」であるが、タスク「Ｔ０」の実行履歴情報が「０１」であるので、−１して「００」とし、今回の実行を飛ばしている。よって、タイムスライス３０３では、タスク「Ｔ０」ではなく、タスク「Ｔ１」が実行されている。
【００７７】
このタスク入替処理（その２）を行う場合の実行履歴情報１８２２及びタスク制御テーブル１８１０の遷移を、図１３及び図１４を用いて説明する。図１４は、タスク入替処理（その２）を行う場合のタスク制御テーブル１８１０の例を表す図である。
図１３（Ａ）は、タイムスライス３００で実行中のタスク「Ｔ１」が中断され、タイムスライス３０１で直前に実行していたタスク「Ｔ０」が実行されている。
【００７８】
図１４（１）は、タスク「Ｔ１」が実行されているときの図である。その後タスク「Ｔ１」が中断されタスク「Ｔ０」が実行される場合、プレビアスタスクとカレントタスクを入れ替えて、図１４（２）となる。
この時点で、タスク「Ｔ０」の実行履歴情報１８２２は、１加算され「０１」となる。
その後、タイムスライス３０２で、ネクストタスク「Ｔ２」がカレントタスクとなって実行される。この時のタスク制御テーブル１８１０は図１４（３）の通りである。
【００７９】
このタスク「Ｔ２」が終了すると、本来ならば次のタスクとなるべきネクストタスク「Ｔ０」の実行履歴情報１８２２がゼロではないため（図１２ステップ５０参照）、飛ばす処理、すなわち、実行履歴情報１８２２を１減算し、カレントタスクをタスク「Ｔ０」の次のタスクであるタスク「Ｔ１」にする。この時のタスク制御テーブル１８１０は図１４（４）の通りである。
【００８０】
タイムスライス３０３で、タスク「Ｔ１」が実行され、タスク「Ｔ０」の実行履歴情報１８２２が「００」となっている。
図１３（Ｂ）は、複数回、中断があった場合の例を示す図である。この場合は、便宜上、並列に実行するタスクは4つであるとする。
タイムスライス３１０で実行中のタスク「Ｔ１」の中断により、タスク「Ｔ０」が前倒しで実行されて、実行履歴情報１８２２は「０１」となる。さらに、タイムスライス３１１で実行中のタスク「Ｔ２」の中断により、タスク「Ｔ０」が再度前倒しで実行されて、実行履歴情報１８２２は「１０」になる。
【００８１】
その後、タスクが実行されていくに従い、タスク「Ｔ０」の実行履歴情報１８２２は「００」に戻っていく。すなわち「００」になった時点で、実行するタイムスライスの数が予定通りに戻ったことになる。
次に、図１１のステップＳ４３の説明を、図１５及び図１６を用いて行う。
このステップＳ４３は、２回連続して中断処理が行われた場合、すなわち、プレビアスタスクが２度連続して実行される場合の処理を示す。図１３（Ｂ）も同様ではあるが、違いは、図１５は、並列実行するタスクの個数が３つであることである。ここでは、並列実行するタスクの数と中断処理の回数等により生じうる場合の特殊ケースの対処法を示す。
【００８２】
図１５は、タスク入れ替処理（その２）を行う場合の実行履歴情報１８２２の遷移を表す図である。また、図１６は、タスク入替処理（その２）を行う場合のタスク制御テーブル１８１０の例を表す図である。
図１５では、タイムスライス４００で実行中のタスク「Ｔ１」が中断され、タイムスライス４０１で直前に実行していたタスク「Ｔ０」が実行されている。
【００８３】
図１６（１）は、タスク「Ｔ１」が実行されているときの図である。その後タスク「Ｔ１」が中断されタスク「Ｔ０」が実行される場合、プレビアスタスクとカレントタスクを入れ替えて、図１６（２）となる。
この時点で、タスク「Ｔ０」の実行履歴情報１８２２は、１加算され「０１」となる。
その後、タイムスライス４０２で、ネクストタスク「Ｔ２」がカレントタスクとなって実行される。この時のタスク制御テーブル１８１０は図１６（３）の通りである。
【００８４】
このタスク「Ｔ２」の実行中に中断事由が発生する。本来ならばプレビアスタスク「Ｔ０」をカレントタスクとして実行する処理に移る。しかし、この時、タスク「Ｔ２」に中断事由が生じなかったとした場合に、タスク「Ｔ２」の次に実行するタスクすなわちネクストタスクもタスク「Ｔ０」である。すなわち、中断事由が生じたことで実行しようとしているタスクと、通常の順番からいくと次に実行するタスクとが同じタスクであることになる。
【００８５】
したがって、この場合は、実行履歴情報に手を加えずに、通常の処理と同様の処理を行うこととしている。この判定処理が、図１１のステップＳ４３である。中断事由が生じたことで実行しようとしているタスク、すなわち、スタンバイレジスタのタスクと通常順序のタスクが同じタスクである場合（ステップＳ４３：ＹＥＳ）は、スタンバイレジスタの実行処理に移る。
【００８６】
タイムスライス４０３でタスク「Ｔ０」が実行されているが、タスク「Ｔ０」の実行履歴情報は「０１」のままである。この時のタスク制御情報は、図１６（４）のとおりである。
＜変形例１＞
＜概要＞
本変形例では、中断事由が発生した場合に、スタンバイレジスタに残っているコンテキストを使用してタスクを実行しようとする場合に、生じている中断事由と同じ中断事由が重ねて生じないようなするものである。中断事由の解消能力には一定の限界がある為、同じ中断事由が連続して生じた場合には、中断事由解消に必要以上の時間がかかる場合が生じうるからである。
【００８７】
＜動作＞
中断事由が連続して生じないタスクを選択する例を、図１７の遷移図及び図６のプログラム情報１９１０を用いて説明する。
図１７は、タスク実行中に中断事由が発生した場合の、実行タスク及び実行履歴情報の遷移を表す図である。
【００８８】
本変形例では、中断事由が発生した場合、スケジューリング制御部１１００は、タスクに割り当てられ実行されているプログラムのプログラム状態情報１９１４を「中断中」と書き換える。また、中断事由を内部メモリ（図示していない。）に保存し、最新の中断事由のみを保存する。中断事由が解消すれば、プログラム状態情報１９１４を「実行待ち」とする。
【００８９】
また、スケジューリング制御部１１００は、次に実行するタスクを選ぶ際、タスクに割り当てられているプログラムのプログラム情報１９１０を参照し、プログラム状態情報１９１４が「実行待ち」で、中断事由情報１９１２に保存している中断事由と同じ中断事由がないものを次に実行するプログラムとして選ぶことで、中断事由が連続して発生するのを防ぐ。
【００９０】
具体例を説明する。
タイムスライス６００でタスク「Ｔ０」が実行されているときに中断事由が発生し、実行が中断される。プログラム「Ｐ０」のプログラム状態情報１９１４は「中断中」となり、中断事由が保存される。この例の場合の中断事由は、「キャッシュミス」とする。
その後、タイムスライス６０１でタスク「Ｔ１」が実行され、中断事由が発生する。中断事由は、「キャッシュミス」とする。
【００９１】
ここで、スケジューリング制御部１１００は、直前に実行したタスク「Ｔ０」を選択しようとするが、プログラムＩＤ１９１１「Ｐ０」のプログラム状態情報１９１４が、「中断中」の為、次のタスク「Ｔ２」を選択しようとする。
スケジューリング制御部１１００は、タスク「Ｔ２」に割り当てられているプログラム「Ｐ２」のプログラム状態情報１９１４が「実行待ち」であるが、中断事由情報１９１２の「キャッシュミス」が「あり」であることから、選択せず、タスク「Ｔ３」を選択しようとする。
【００９２】
タスク「Ｔ３」は、プログラム「Ｐ３」のプログラム状態情報１９１４が「実行待ち」であり、保存している中断事由と同じ中断事由情報１９１２の「キャッシュミス」が「なし」であることから、スケジューリング制御部１１００は、次のタスクとして「Ｔ３」を選択する。
タイムスライス６０２で、タスク「Ｔ３」が前倒しで実行される。この時、実行しようとしているプログラムに同じ中断事由が発生しないかを判断することで、いくらかの性能劣化６９０が生じるが、同じ中断事由が発生しないことが保証されることになる。すなわち、ここで、タスク「Ｔ３」が実行されることにより、タスク「Ｔ２」を実行していたならばタスク「Ｔ１」の中断と重ねて発生していた中断が回避されたことになる。
【００９３】
次に、タイムスライス６０２において実行されているタスク「Ｔ３」の持ち時間が終了し、タイムスライス６０３でタスク「Ｔ２」が実行される。実行中のタスク「Ｔ２」に中断事由が発生し中断する。この後のタイムスライス６０４で、直前に実行していたタスク「Ｔ３」が実行されることになる。
＜変形例２＞
＜概要＞
本変形例では、中断事由が発生した場合に、その中断事由が解消するまでの時間によって、タスクを入れ替えるか否かを判断するものである。
【００９４】
本例では、２つ説明する。
1つ目は、中断事由の解消する時が、次のタスクの実行を開始する時よりも早い場合は、中断事由の解消を待つものである。
２つ目は、中断事由の解消に時間が係ると予想される場合に、同じ中断事由が重なって発生したら、最初の中断事由が解消するまで、クロックを供給しないで消費電力を抑えようとするものである。
【００９５】
２つに共通する点は、タスク実行中に中断事由が発生した場合には、無条件に、直前に実行していたタスクを実行するという実行方法を取らないで、一定の条件が満たされた場合には、実行を中断するという選択肢を持つことである。
＜動作＞
中断事由が発生した場合にその解消を待つ例を、図１８の遷移図及び図６のプログラム情報１９１０を用いて説明する。
【００９６】
図１８は、タスク実行中に中断事由が発生した場合の、実行タスクの遷移を表す図である。
まず、１つ目を説明する。
タイムスライス７００で実行中のタスク「Ｔ１」に中断事由が発生した場合、スケジューリング制御部１１００は、タスク「Ｔ１」に割り当てられているプログラム「Ｐ１」の解消時間情報１９１３を参照する。この例の場合、中断事由は「キャッシュミス」であるとする。とすると、解消時間は、「１００」となる。
【００９７】
スケジューリング制御部１１００は、レジスタを切り替えて、次のタスクの実行を開始する時よりも、発生している中断事由が解消する時、すなわち、中断事由が発生した時から解消時間が経過した時の方が早いと判断した場合には、その間、実行を中断する。
タイムスライス７００で実行中に発生した中断事由は、解消する時のほうが早いと判断され、実行が止まっている図である。
【００９８】
２つ目を説明する。
タイムスライス７０１で実行中のタスク「Ｔ２」に１つ目の中断事由「キャッシュミス」が発生する。このとき、スケジューリング制御部１１００は、タイムスライス７０１で直前に実施していたタスク「Ｔ１」を、次に実行する。
また、スケジューリング制御部１１００は、プログラム情報１９１０の解消時間情報１９１３を参照し、中断事由解消に要する時間を得、この時間が所定時間以上であれば、同じ中断事由での中断、すなわち２つ目の「キャッシュミス」を処理しないようにマスクをかける。すなわち、同じ中断事由が発生したことをプログラム実行制御部１２００から受付はするが、スタンバイレジスタに残っている直前に実行していたタスクを実行することは行わないようにする。
【００９９】
タイムスライス７０２でタスク「Ｔ１」実行され、タイムスライス７０３でタスク「Ｔ０」が実行される。このタスク「Ｔ０」の実行中に、２つ目の「キャッシュミス」が発生した場合、スケジューリング制御部１１００は、マスクがかかっているため、前の「キャッシュミス」が解消するまで、スケジューリング制御部１１００以外の部分へのクロックの供給を止める。
【０１００】
その後、１つ目の「キャッシュミス」が解消したら、クロックの供給を開始し、２つ目の「キャッシュミス」によるタスク入替処理を行う。この入替処理において、タスク「Ｔ１」の実行履歴情報が「００」となる。
次のタイムスライス７０４で、タスク入替処理で選択されたタスク「Ｔ２」の実行を再開する。このときには、まだ２つ目の「キャッシュミス」が解消されていないので、再度「キャッシュミス」が発生したとしても処理しないようにマスクがかかっている。
【０１０１】
但し、１つ目の「キャッシュミス」の解消が予定の解消時間情報１９１３を過ぎても解消しない場合は、解消時間情報１９１３の時間経過後にタスクの入替処理が行われる。この入替処理において、タスク「Ｔ１」の実行履歴情報が「１０」となる。
次のタイムスライス７０４で、タスク入替処理で選択されたタスク「Ｔ２」の実行を再開する。このときには、まだ２つ目の「キャッシュミス」が解消されていないので、再度「キャッシュミス」が発生したとしても処理しないようにマスクがかかっている。
【０１０２】
これらの変形例１または変形例２の処理は、次に実行するタスク選択処理（図９、図１２）で、追加的に行われることになる。
＜補足＞
以上、本発明に係るプロセッサについて実施形態に基づいて説明したが、このプロセッサを部分的に変形することもでき、本発明は上述の実施形態に限られないことは勿論である。即ち、
（１）実施形態では、擬似並列的に実行するタスクの数を３または４としているが、それ以上の数であってもよい。
（２）実施形態では、クロックの供給を止めるのは、スケジューリング制御部１１００以外の部分としているが、それ以外の部分でもよい。例えば、スケジューリング制御部の中のクロックを制御する部分以外に、クロックの供給を止めることとしてもよい。
（３）実施形態では、２つのレジスタ群を使用しているが、３つ以上のレジスタ群を使用することとしてもよい。
【０１０３】
この場合、実行中のタスクを中断した場合には、実行を中断したタスクが使用しているレジスタ群以外のレジスタ群に残っているコンテキストを利用して、タスクを実行する。すなわち、実施形態では、次に使用されるレジスタ群であるスタンバイレジスタに前に実行したタスクのコンテキストが残っている場合には、この残っているコンテキスト使用してタスクを実行するが、複数レジスタ群を使用する場合は、以前に使用したレジスタ群にコンテキストが残っている場合には、これらの１つを使用してタスクを実行することになる（図８等参照）。
【０１０４】
具体例を、図２を用いて説明する。この例では、レジスタ群は、ＲＥＧ１とＲＥＧ２の２つであるが、３つめのＲＥＧ３があるとして、説明する。
まず、タイムスライス１３１で、ＲＥＧ２でタスクＢを実行中に、ＲＥＧ１ではなくてＲＥＧ３にタスクＣを復帰して、タスクＢの次にタスクＣを実行する準備をしているとする。ＲＥＧ１には、タスクＡは残ったままである。
【０１０５】
この場合、タスクＢの実行中で、Ｃの復帰開始前のｔ２２に中断事由が発生し、Ｂを中断した場合には、ＲＥＧ１に残るタスクＡを実行すればよい。ＲＥＧ３にはタスクＣを復帰する処理を予定通り行う。
但し、タスクＣの復帰をＲＥＧ３にではなく、ＲＥＧ１に行おうとしている場合には、その復帰処理を行わずに、ＲＥＧ１に残っているタスクＡを実行する。
【産業上の利用可能性】
【０１０６】
複数のレジスタを使用して1つのプログラム実行機構で複数のタスクを順番に実行するプロセッサの場合に、実行中のタスクが予定外に中断したときに処理を続行するときに、特に有用である。
【図面の簡単な説明】
【０１０７】
【図１】図１（Ａ）は、本プロセッサでのマルチタスクの実行例を表すタイムチャートであり、図１（Ｂ）は、従来のプロセッサでの実行中のタスクが中断した例を表すタイムチャートである。
【図２】本プロセッサでの実行中のタスクが中断した例を表すタイムチャートである。
【図３】実施形態におけるプロセッサ１０００の構成を示す機能ブロック図である。
【図４】図４（Ａ）は、タスク制御テーブル１８１０の構成及び内容例を示す図であり、図４（Ｂ）は、タスク情報１８２０の構成及び内容例を示す図である。
【図５】タスク制御テーブル１８１０とタスク情報１８２０の関係の例を示す図である。
【図６】プログラム情報１９１０の構成及び内容例を示す図である。
【図７】コンテキスト情報１９３０の構成及び内容例を示す図である。
【図８】タスク入替処理（その１）を表すフローチャートである。
【図９】次に実行するタスク選択処理（その１）を表すフローチャートである。
【図１０】タスク実行中の実行履歴情報１８２２の遷移を表した図である。図１０（Ａ）は、実行中のタスクに中断事由が発生しない例を表す図であり、図１０（Ｂ）は、実行中のタスクに中断事由が発生した例を表す図である。
【図１１】タスク入替処理（その２）を表すフローチャートである。
【図１２】次に実行するタスク選択処理（その２）を表すフローチャートである。
【図１３】タスク入れ替処理（その２）を行う場合の実行履歴情報１８２２の遷移を表す図である。図１３（Ａ）は、１回中断事由が発生した場合の図であり、図１３（Ｂ）は、２回中断事由が発生した場合の図である。
【図１４】タスク入替処理（その２）を行う場合のタスク制御テーブル１８１０の例を表す図である。
【図１５】タスク入れ替処理（その２）を行う場合の特殊ケースの実行履歴情報１８２２の遷移を表す図である。
【図１６】タスク入替処理（その２）を行う場合の特殊ケースのタスク制御テーブル１８１０の例を表す図である。
【図１７】同じ中断事由が発生するタスクを選択しない場合の、実行タスク及び実行履歴情報の遷移を表す図である。
【図１８】タスク実行中に同じ中断事由が発生した場合の、実行タスクの遷移を表す図である。
【符号の説明】
【０１０８】
１０００  １０１０    携帯通信端末
１１００    スケジューリング制御部
１２００    プログラム実行制御部
１３００    コンテキスト記憶部
１４００  １５００    レジスタ群
１６００    レジスタ切替部
１７００    プログラム実行部
１８００    タスク管理情報記憶部
１８１０    タスク制御テーブル
１８２０    タスク情報
１９００    プログラム情報記憶部
１９１０    プログラム情報
１９３０    コンテキスト情報
２０００    外部プロセッサ
３０００    外部メモリ
【図１】
0004170364.tif 000002
【図２】
0004170364.tif 000003
【図３】
0004170364.tif 000004
【図４】
0004170364.tif 000005
【図５】
0004170364.tif 000006
【図６】
0004170364.tif 000007
【図７】
0004170364.tif 000008
【図８】
0004170364.tif 000009
【図９】
0004170364.tif 000010
【図１０】
0004170364.tif 000011
【図１１】
0004170364.tif 000012
【図１２】
0004170364.tif 000013
【図１３】
0004170364.tif 000014
【図１４】
0004170364.tif 000015
【図１５】
0004170364.tif 000016
【図１６】
0004170364.tif 000017
【図１７】
0004170364.tif 000018
【図１８】
0004170364.tif 000019