(57)【要約】【課題】  自動車の制御のように常時変化する環境条件の下で、緊急性のある事象に対してリアルタイムに的確なタスク制御を行う。【解決手段】  割込要求ＩＲＱにより、割込制御回路３６から割込要因値ＶＡＬが優先度決定回路４０に与えられ、その処理を行うタスク番号と固定の優先度及び状況に応じた可変の横取り優先度が入力タスクレジスタ１５に格納され、巡回レジスタ１１，１２に書込まれる。巡回レジスタ１１，１２の内容は、巡回レジスタ制御回路３５によって順次読出され、処理待ちのタスク番号毎に優先度と横取り優先度が加算器１６で加算され、実効優先度が算出される。一方、実行中のタスクの優先度と横取り優先度は、実行タスクレジスタ３１から読出され、同様に実効優先度が算出される。そして、実効優先度の一番高いタスクが実行タスクとして選択される。【選択図】      図１
2005078450.tif 000002
【特許請求の範囲】
【請求項１】
特定の事象が発生したときに該事象に対応するタスクに対して、その処理内容に応じて予め決められている固定の第１優先度を設定すると共に、該事象の発生したときの状態に応じて可変の第２優先度の初期値を設定する第１の処理と、
前記事象が発生したときに実行待ちのタスクの前記第２優先度を該事象に応じて再設定する第２の処理と、
実行中及び実行待ちのタスクのそれぞれに設定された第１優先度と第２優先度に基づいて各タスク毎の実効優先度を算出する第３の処理と、
前記各タスクの中で前記実効優先度が一番高いタスクに制御を優先的に与える第４の処理とを、
行うことを特徴とするタスク制御方法。
【請求項２】
前記第１の処理における前記特定の事象とは、新たな外部割込の発生であり、前記事象の発生したときの状態とは、その外部割込の種別と環境パラメータであり、前記第３の処理では、各タスク毎に第１優先度と第２優先度を加算して実効優先度を算出することを特徴とする請求項１記載のタスク制御方法。
【請求項３】
外部割込入力における割込要因値に基づいて対応するタスクを特定し、該特定されたタスクに予め割当てられている第１優先度を決定する第１の処理と、
前記外部割込入力が発生したときの環境パラメータに従って前記タスクに対する第２優先度を設定する第２の処理と、
前記タスクと実行中及び実行待ちの各タスク毎に、前記第１優先度と第２優先度に従って実効優先度を算出する第３の処理と、
前記複数のタスクの中で前記実効優先度が一番高いタスクに制御を優先的に与える第４の処理とを、
行うことを特徴とするタスク制御方法。
【請求項４】
外部割込入力における割込要因値に基づいて対応するタスクを特定し、該特定されたタスクに予め割当てられている第１優先度を決定する第１の処理と、
前記外部割込入力が発生したときの環境パラメータに従って前記タスクに対する第２優先度を設定する第２の処理と、
前記タスクと実行中及び実行待ちの各タスク毎に、前記第１優先度と第２優先度に従って実効優先度を算出する第３の処理と、
前記複数のタスクの中で前記実効優先度の一番高いタスクが前記第１の処理で特定されたタスクである場合には、前記実行中のタスクを待機させて該特定されたタスクに制御を与え、該実効優先度の一番高いタスクが該実行中のタスクである場合には、該特定されたタスクを待機させる第４の処理とを、
行うことを特徴とするタスク制御方法。
【請求項５】
前記第４の処理で実効優先度の一番高い実行中のタスクが終了したときに、実行待ちのタスクの実効優先度と前記待機させられた特定されたタスクの実効優先度を比較する第５の処理と、
前記特定されたタスクの実効優先度が実行待ちのタスクの実効優先度よりも高いときには該特定されたタスクを実行し、該実行待ちのタスクの実効優先度が該特定されたタスクの実効優先度よりも高いときには該特定されたタスクを待機させて該実行待ちのタスクを実行する第６の処理とを、
行うことを特徴とする請求項４記載のタスク制御方法。
【請求項６】
実行待ちの各タスクの処理内容に応じて予め決められている固定の第１優先度と該各タスクの発生状態に応じて設定された可変の第２優先度を保持する第１のレジスタと、
現在実行中のタスクの第１優先度と第２優先度を保持する第２のレジスタと、
前記実行待ちの各タスク毎に前記第１のレジスタから読出される第１優先度と第２優先度を加算して実効優先度を算出する第１の加算器と、
前記実行中のタスクの第１優先度と第２優先度を加算して実効優先度を算出する第２の加算器と、
前記第１及び第２の加算器の加算結果を比較する比較器と、
前記実行待ちのタスクの実効優先度が前記実行中のタスクの実効優先度よりも高いときに、該実行待ちのタスクの第１優先度と第２優先度を前記第２のレジスタに格納して中央制御装置に対する割込信号をセットし、該実行待ちタスクの実効優先度が該実行中のタスクの実効優先度よりも高くないときには、引き続き該実行中のタスクを動作させるレジスタ制御回路とを、
備えたことを特徴とするタスク切替装置。
【請求項７】
特定のイベントの発生毎に前記実行待ちのタスクの第２優先度を再設定する優先度変更回路を設けたことを特徴とする請求項６記載のタスク切替装置。
【請求項８】
前記第１のレジスタを、前記レジスタ制御回路からの制御に従って記憶内容をシフトして順次出力すると共に与えられるデータを書込む巡回レジスタで構成し、前記第１のレジスタから出力される前記第２優先度を再設定して該第１のレジスタに与える優先度変更回路を設けたことを特徴とする請求項６記載のタスク切替装置。
【請求項９】
割込入力で特定された割込要因値から実行すべきタスクとその第１優先度を特定し、該割込入力時の環境パラメータに基づいてその第２優先度を決定する優先度決定回路を設けたことを特徴とする請求項６記載のタスク切替装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、リアルタイムＯＳ（オペレーティング・システム）の下で制御される複数のタスクをその優先度に応じてハードウエアで切替える方法と装置に関するものである。
【背景技術】
【０００２】
【特許文献１】特開２００１−７５８２０号公報
【０００３】
上記特許文献１には、複数のタスクの優先度とその順位を示す情報を記憶した記憶回路と、この記憶回路から最も高い優先度を読出してその優先度と現在実行中のタスクの優先度を比較し、読出した優先度が実行中のタスクの優先度よりも高いときにプロセッサに対してタスク切替えの割込み信号を出力する割込信号出力回路と、前記記憶回路から読出したタスクの優先度と該記憶回路に記憶された該当する優先度のタスクの内から順位の高いタスクの順位を受け入れてタスク切替え用のスタックポインタ・アドレスを生成するスタックポインタアドレス生成回路を備えたリアルタイムＯＳ装置が記載され、これにより、「ハードウエアによって複数のタスクをその優先度に応じてスケジューリングするようにしているので、プロセッサに負担をかけずに高速処理を行うＯＳが実現する」という効果が挙げられている。
【０００４】
しかし、このリアルタイムＯＳ装置では、「複数のタスクの優先度とその順位を示す情報を記憶した記憶回路」と記載されているように、予め初期設定で割当てた優先度を基準にしているため、後から緊急かつ短時間に実行しなければならないタスクが発生した場合に、このタスクに対処できないおそれがある。
【０００５】
そもそも、優先度とは予め固定されたものではなく、時々刻々変化するものと考えられる。例えば自動車の場合、夜間にヘッドライトが故障するのは重大事故に直結するおそれがあるが、昼間にヘッドライトが故障した場合にはその危険度は低い。また、エンジントラブルの場合でも、時速４０ｋｍでの走行中と時速１０ｋｍでの徐行中とでは、その危険度は大きく異なる。従って、タスク間で競合している場合に、状況に応じて優先度を動的に変更することができれば、装置のより円滑かつ適切な動作が可能になる。
【０００６】
ところで、最近の自動車における電子制御の高度化に見られるように、各種の装置にシステムＬＳＩ（大規模集積回路）を組込んで、プログラム制御を行うことが一般化している。このようなプログラム制御には、ハードウエアとしてＲＩＳＣ（縮小命令セット・コンピュータ）を組込んだシステムＬＳＩを用い、リアルタイムＯＳの下で複数のタスクを、実際の現象の進行に対応して動作させる方式が採用されることが多い。
【０００７】
システムＬＳＩ用のＲＩＳＣ構成のＣＰＵ（中央処理装置）として、例えば、ＡＲＭ７ＤＴＭＩ（英国ＡＲＭ社の登録商標）が良く知られている。このＡＲＭ７ＤＴＭＩでは、割込信号をＦＩＱ（Fast Interrupt Request）とＩＲＱ（Interrupt Request)とに分け、ＦＩＱはＩＲＱよりも優先度が高く、ＦＩＱで処理中はＩＲＱはマスクされるようになっている。そこで、通常の割込みにはＩＲＱを用い、緊急の割込みにＦＩＱを用いるというように、割込信号を使い分けている。また、ＩＲＱに対して割込制御回路で６４レベルの優先度を設ける構成を採用し、ユーザーには各レベルに対して８レベルの「横取り優先度」を設けることを許容している。横取り優先度とは、実行中の優先度の低いタスクを強制終了させて、優先度の高いタスクを動作させるものであり、リアルタイムＯＳの下で制御される複数のタスクを、その緊急度に応じてハードウエアで切替える方式で用いられる概念である。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、前記ＡＲＭ７ＤＴＭＩでは横取り優先度を設けることが可能であるが、その具体的な方法についての詳細は規定されておらず、このＡＲＭ７ＤＴＭＩを組込むシステムＬＳＩの設計者の考えに委ねられている。従って、例えば自動車技術の分野のように、多数のタスクを取扱い、かつ緊急なタスクの処理もこなさなければならない場合、その要求に確実に応えるタスク切替えシステムが、未だ確立していないということが問題となっている。本発明は、自動車の制御のように常時変化する環境条件の下で、緊急性のある事象に対してリアルタイムに的確なタスク制御を行うことができる制御方法を確立することを目的としている。
【課題を解決するための手段】
【０００９】
本発明は、特定の事象が発生したときに該事象に対応するタスクに対して、その処理内容に応じて予め決められている固定の第１優先度を設定すると共に、該事象の発生したときの状態に応じて可変の第２優先度の初期値を設定する第１の処理と、前記事象が発生したときに実行待ちのタスクの前記第２優先度を該事象に応じて再設定する第２の処理と、実行中及び実行待ちのタスクのそれぞれに設定された第１優先度と第２優先度に基づいて各タスク毎の実効優先度を算出する第３の処理と、前記各タスクの中で前記実効優先度が一番高いタスクに制御を優先的に与える第４の処理とを行うことを特徴としている。
【発明の効果】
【００１０】
本発明では、特定の事象の発生したときに、対応するタスクの処理内容に応じて固定の第１優先度を設定すると共に、その時の状態に応じて可変の第２優先度を設定し、これらの第１優先度と第２優先度に基づいて実効優先度を算出し、この実効優先度に従ってタスク制御を行うようにしている。これにより、例えば、自動車の制御のように常時変化する環境条件の下で、緊急性のある事象に対してリアルタイムに的確なタスク制御を行うことが可能になるという効果がある。
【発明を実施するための最良の形態】
【００１１】
割込要因が発生したとき、その処理を行うタスク番号とこのタスク番号に対応して予め設定されている固定の優先度（第１優先度）を決定すると共に、その割込要因が発生したときの状況に応じて可変の横取り優先度（第２優先度）を設定する。更に、このタスクの固定の優先度と横取り優先度を加算して実効優先度を求め、現在実行中のタスクの実効優先度と比較する。そして、新たに発生したタスクの実効優先度が高ければ、実行中のタスクを待機させて新たに発生したタスクを実行させる。また、実行中のタスクが終了したときは、実行待ちのタスクの横取り優先度を再設定した後、実効優先度の一番高いタスクを選択して実行させる。
【００１２】
この発明の前記並びにその他の目的と新規な特徴は、次の、好ましい実施例の説明を添付図面と照らし合わせて読むと、より完全に明らかになるであろう。但し、図面は、もっぱら解説のためのものであって、この発明の範囲を限定するものではない。
【実施例１】
【００１３】
図１は、本発明の実施例を示すタスク切替装置の構成図である。
このタスク切替装置は、タスク番号／優先度巡回レジスタ１１（以下、単に「巡回レジスタ１１」という）と横取り優先度巡回レジスタ１２（以下、単に「巡回レジスタ１２」という）を備えている。これらの巡回レジスタ１１，１２は、タスクの実行待ち行列としての性格を有している。巡回レジスタ１１は、実行待ちのタスクを特定するタスク番号と、このタスクに対して予め割当てられた固定の優先度を保持するものである。また、巡回レジスタ１２は、このタスクに対して随時状況に応じて変更される横取り優先度を保持するものである。なお、巡回レジスタ１１，１２は、同時に起動される可能性のある最大タスク数分だけ用意されているが、使用されていないタスク番号は値０が割当てられ、優先度や横取り優先度には無効を示す値０が書込まれるようになっている。
【００１４】
これらの巡回レジスタ１１，１２の記憶内容は、クロック信号ＣＫに従って先頭から順番に読出されると共に、巡回して後尾に保持されるようになっている。即ち、巡回レジスタ１１の出力側（先頭）は、そのままセレクタ１３を介してその入力側（後尾）に接続され、巡回レジスタ１２の出力側は、横取り優先度変更回路２０とセレクタ１４を介してその入力側に接続されている。セレクタ１３，１４は、巡回されたタスク番号、優先度及び横取り優先度と、入力タスクレジスタ１５に保持されたタスク番号、優先度及び横取り優先度のいずれか一方を、選択信号ＳＥＬ１に従って選択出力するものである。横取り優先度変更回路２０は、後述するように、巡回レジスタ１２から読出されたタスクの横取り優先度を、所定の演算によって変更したり、与えられた制御信号ＣＯＮ１に基づいて変更するものである。
【００１５】
巡回レジスタ１１から読出された優先度と、巡回レジスタ１２から読出された横取り優先度は、加算器１６の入力側と、セレクタ１７，１８の一方の入力側に与えられるようになっている。加算器１５は、巡回レジスタ１１，１２から読出された優先度と横取り優先度を加算し、読出されたタスクの実効優先度を算出するものである。セレクタ１７，１８は、巡回レジスタ１１，１２から読出された優先度及び横取り優先度と、データバス１９を介して与えられる優先度及び横取り優先度のいずれかを、選択信号ＳＥＬ２に従って選択出力するものである。
【００１６】
セレクタ１７，１８の出力側には、実行タスクレジスタ３１が接続されている。実行タスクレジスタ３１は、現在実行中の現タスク番号と、その優先度及び横取り優先度を保持したレジスタである。実行タスクレジスタ３１の出力側は、加算器３２に接続されている。加算器３２は、実行タスクレジスタ３１に保持された現在実行中のタスクの優先度と横取り優先度を加算して、その実効優先度を算出するものである。
【００１７】
加算器１６，３２の加算結果は、比較器３３に与えられて２つのタスクの実効優先度が比較されるようになっている。比較器３３は、加算器１６で計算された実行待ちタスクの実効優先度が、加算器３２で計算された現在実行中のタスクの実効優先度よりも大きい時に、タスクを切替えるために論理値“１”を出力し、そうでない時には現在のタスクを引続き実行するために論理値“０”を出力するものである。比較器３３の出力側は、割込フラグレジスタ３４と巡回レジスタ制御回路３５に接続されている。割込フラグレジスタ３４は、比較器３３から出力された信号を、書込制御信号ＷＲ３に従って保持し、割込信号ＩＮＴとして図示しないＣＰＵへ出力するものである。
【００１８】
巡回レジスタ制御回路３５は、巡回レジスタ１１，１２等を制御するもので、これらの巡回レジスタ１１，１２に対するクロック信号ＣＫを与えると共に、セレクタ１３，１４，１７，１８に対する選択信号ＳＥＬ１，ＳＥＬ２と、入力タスクレジスタ１５、実行タスクレジスタ３１及び割込フラグレジスタ３４に対する書込制御信号ＷＲ１〜ＷＲ３を生成して出力するものである。更に、この巡回レジスタ制御回路３５は、横取り優先度変更回路２０及びタスク番号／優先度／横取り優先度決定回路４０（以下、単に「優先度決定回路４０」という）に対する制御信号ＣＯＮ１，ＣＯＮ２を生成して出力する機能を有している。
【００１９】
更に、このタスク切替装置は、割込制御回路３６を有している。割込制御回路３６は、図示しない外部回路からの割込入力ＩＲＱを受付け、その割込要因を判定して対応する割込要因値ＶＡＬを、優先度決定回路４０に与えるものである。優先度決定回路４０は、後述するように、割込制御回路３６から与えられる割込要因値ＶＡＬに基づいて、予め設計で割当てられているタスク番号と固定の優先度の値を出力すると共に、その時点での環境パラメータＥＮＶに基づいて、そのタスクの横取り優先度の初期値を算出するものである。
【００２０】
図２（ａ）〜（ｃ）は、図１中の横取り優先度変更回路２０の例を示す構成図である。  図２（ａ）は、後発タスクを優先させる方式の回路構成である。即ち、この横取り優先度変更回路２０ａは、例えば、１ビット右シフタによる１／２回路２１で構成され、巡回レジスタ１２から読出された先発の実行待ちタスクの横取り優先度が、この１／２回路２１に入力されるようになっている。そして、横取り優先度変更回路２０ａから、横取り優先度の値が半減されて出力され、セレクタ１４を介して巡回レジスタ１２へ巡回して保持されるようになっている。これにより、後発タスクの横取り優先度は初期値を保ち、先発の実行待ちタスクの横取り優先度が１／２となるので、後発タスクが優先されることになる。
【００２１】
図２（ｂ）は、緊急性の低い実行待ちタスクの横取り優先度を０にする後発タスク優先方式の回路構成である。この横取り優先度変更回路２０ｂは、巡回レジスタ１２から読出された先発の実行待ちタスクの横取り優先度を示す各ビット毎に設けられた２入力のＡＮＤ（論理積ゲート）２２１〜２２ｎと、この横取り優先度と入力タスクレジスタ１５から与えられる後発タスクの横取り優先度を比較する比較器２３を有している。比較器２３は、実行待ちタスクの横取り優先度が後発タスクの横取り優先度よりも低いときに、“０”を出力し、そうでない場合には“１”を出力するものである。比較器２３の出力側は、ＡＮＤ２２１〜２２ｎの第２の入力側に接続されている。
【００２２】
これにより、実行待ちタスクの横取り優先度が後発タスクの横取り優先度よりも低いと、比較器２３から“０”が出力され、ＡＮＤ２２１〜２２ｎの出力信号がすべて“０”となる。また、実行待ちタスクの横取り優先度が後発タスクの横取り優先度以上であれば、比較器２３から“１”が出力され、ＡＮＤ２２１〜２２ｎの出力信号は、巡回レジスタ１２から読出された横取り優先度と同じである。従って、横取り優先度が後発タスクよりも低い実行待ちタスクは、その横取り優先度の値が０に変更される。
【００２３】
図２（ｃ）は、実行待ちタスクの横取り優先度を１／２にするか否かを選択する方式の回路構成である。この横取り優先度変更回路２０ｃは、巡回レジスタ１２から読出された先発の実行待ちタスクの横取り優先度と、１／２回路２１で半減された横取り優先度のいずれか一方を、巡回レジスタ制御回路３５から与えられる制御信号ＣＯＮ１に従って選択するセレクタ２４を有している。
【００２４】
これは、図２（ａ）の回路では、現実行タスクが終了した後、そのまま次の実行タスク選択のために巡回を行うと、実行待ちタスクの横取り優先度が半減し、必要以上に実行待ちタスクの横取り優先度が低くなってしまうことを防止するものである。即ち、現実行タスクが終了した後の巡回は、これを割込制御回路３６から巡回レジスタ制御回路３５への通知に基づいて検知し、この巡回レジスタ制御回路３５からの制御信号ＣＯＮ１で先発の実行待ちタスクの横取り優先度を選択し、半減せずにそのままの値で巡回させるようにしたものである。なお、実行タスクレジスタ３１に保持された現在実行中のタスクの横取り優先度は、これらの横取り優先度変更回路２０ａ〜２０ｃによって変更されることはない。
【００２５】
図３は、図１中のタスク番号／優先度／横取り優先度決定回路４０の一例を示す構成図である。
【００２６】
この優先度決定回路４０は、割込制御回路３６から与えられる割込要因値ＶＡＬに基づいて、予め割当てられているタスク番号と固定の優先度の値を設定するためのタスク番号／優先度対応表４１を有している。タスク番号／優先度対応表４１は、例えばＥＰＲＯＭ（電気的に書込み可能な不揮発性メモリ）で構成され、割込要因値ＶＡＬをアドレス信号として与え、このアドレスに予め記憶されているデータを、タスク番号と例えば５ビット（３２レベル）の優先度として、入力タスクレジスタ１５に出力するものである。
【００２７】
更に、この優先度決定回路４０は、環境パラメータＥＮＶとして、例えば自動車の速度センサから走行速度Ｓが与えられ、その走行速度Ｓに対応した横取り優先度を設定するための微分部４２、２乗部４３、及び整数化部４４を有している。
【００２８】
微分部４２は、走行速度Ｓの単位時間当たりの変化量δＳ（即ち、加速度）を算出するものである。加速度センサから加速度のデータが得られる場合には、この微分部４２は不要である。微分部４２の出力側は、２乗部４３に接続されている。２乗部４３は、例えば乗算器の２つの入力端子に、微分部４２の出力信号を与えることで実現できる。更に、２乗部４３の出力側は、整数化部４４に接続されている。整数化部４４は、２乗部４３の計算結果を、例えば３２レベルに区分して５ビットの横取り優先度として、入力タスクレジスタ１５に出力するものである。
【００２９】
この優先度決定回路４０では、横取り優先度を走行速度Ｓの変化量δＳの２乗に比例するものとしている。これは、自動車の場合、加速の場合でも減速の場合でも、走行速度Ｓの変化量δＳが大きいほど危険度が倍加し、かつ、緊急性も高くなると考えたからである。なお、環境パラメータＥＮＶとしては、走行速度の他、気温、車内温度、気圧、風速、明るさ、湿度等、多種多様である。適用条件に応じて、最適な環境パラメータＥＮＶの組合わせを選択する必要があることはいうまでもない。
【００３０】
図４は、図１のタスク切替装置の概略の動作を示すフローチャートである。以下、この図４を参照しつつ図１の動作を説明する。
【００３１】
動作開始により、ステップＳ１において、割込制御回路３６によって、割込入力ＩＲＱの有無が検出される。割込入力ＩＲＱが有ればステップＳ２へ進み、無ければステップＳ６へ進む。
【００３２】
ステップＳ２において、割込制御回路３６によって割込入力ＩＲＱの要因が分析され、この割込制御回路３６から優先度決定回路４０に対して、割込要因値ＶＡＬが出力される。ステップＳ２の後、ステップＳ３へ進む。
【００３３】
ステップＳ３において、優先度決定回路４０によって割込要因値ＶＡＬに基づいてタスク番号と優先度が読出されると共に、その時点での環境パラメータＥＮＶに従って横取り優先度が設定される。ステップＳ３の後、ステップＳ４へ進む。
【００３４】
ステップＳ４において、巡回レジスタ制御回路３５から入力タスクレジスタ１５に、書込制御信号ＷＲ１が出力され、優先度決定回路４０で設定されたタスク番号と優先度及び横取り優先度が、この入力タスクレジスタ１５へ書込まれる。ステップＳ４の後、ステップＳ５へ進む。
【００３５】
ステップＳ５において、巡回レジスタ制御回路３５から出力される選択信号ＳＥＬ１によって、セレクタ１３，１４が入力タスクレジスタ１５側に切替えられ、この入力タスクレジスタ１５に書込まれたタスク番号と優先度及び横取り優先度が、クロック信号ＣＫに従って、巡回レジスタ１１，１２の後尾に書込まれる。ステップＳ５の後、ステップＳ８へ進む。
【００３６】
一方、ステップＳ１で割込入力ＩＲＱが検出されずにステップＳ６へ進んだ場合、このステップＳ６において、現タスクが終了したか否かが判定される。終了していなければ、ステップＳ１へ戻り、ステップＳ１，Ｓ６のループによるイベント発生待ち状態となる。ステップＳ６において、現タスクが終了していれば、ステップＳ７へ進む。
【００３７】
ステップＳ７において、終了したタスクが割込タスクとして実行されていた場合には、割込まれたタスクに実行権を戻すための処理（例えば、割込まれたタスク番号等を実行タスクレジスタ３１に書戻す等の処理）が行われる。割込みのネスティングが無い場合には、実行タスクレジスタ３１がリセットされ、この実行タスクレジスタ３１に値０が書込まれる。ステップＳ７の後、ステップＳ８へ進む。
【００３８】
ステップＳ８において、巡回レジスタ制御回路３５の制御に従って、巡回レジスタ１１，１２の巡回が開始される。まず、変数Ｋ，Ｍに、それぞれ初期値として１，０が書込まれる。これは、最後に実行タスクレジスタ３１に書込んだ巡回レジスタ１１，１２の位置を確定するための処理である。ステップＳ８の後、ステップＳ９〜Ｓ１４のループによる巡回処理が行われる。
【００３９】
ステップＳ９において、巡回レジスタ１１，１２の先頭タスクの実効優先度が加算器１６で算出され、実行タスクレジスタ３１に保持された実行タスクの現実効優先度が加算器３２で算出される。これらの実効優先度と現実効優先度は、比較器３３で比較される。
【００４０】
ステップＳ１０において、実効優先度と現実効優先度の比較の判定が行われ、巡回レジスタ１１，１２の先頭タスクの実効優先度の方が高い場合には、ステップＳ１１へ進み、そうでない場合には、ステップＳ１２へ進む。
【００４１】
ステップＳ１１において、巡回レジスタ制御回路３５から与えられる書込制御信号ＷＲ２に従って、巡回レジスタ１１，１２の先頭タスクのタスク番号、優先度及び横取り優先度が、実行タスクレジスタ３１に書込まれる。更に、最後の書込みを行った実行待ちタスクの特定のために、変数Ｍに変数Ｋの値が記憶される。
【００４２】
ステップＳ１２において、巡回レジスタ１１，１２の後尾に、横取り優先度変更回路２０によって変更された横取り優先度のデータ等が書込まれる。
【００４３】
ステップＳ１３において、巡回レジスタ１１，１２に対する巡回が終了したか否かが調べられる。終了していなければ、ステップＳ１４において、変数Ｋの値が１だけ増加され、ステップＳ９へ戻る。巡回が終了していれば、ステップＳ１５へ進む。
【００４４】
ステップＳ１５において、ステップＳ１１における書込みがあったか否かが調べられる。これは、書込みがあればステップＳ１１で変数Ｍに変数Ｋの値が記憶されるので、この変数Ｍが０であるか否かを調べることによって判別することができる。もしも書込みがあればステップＳ１６へ進み、書込みがなければ処理は終了する。
【００４５】
ステップＳ１６において、巡回レジスタ制御回路３５によって巡回レジスタ１１，１２のＭ番目以降のレジスタが、１レジスタ分ずつ順にシフトさせられる。この結果、レジスタの値は重ね書きされ、その最も大きな実効優先度を持つタスクのデータは、巡回レジスタ１１，１２内から消失する。そして、後尾レジスタに値０が書込まれ、そのレジスタはリセットされる。これにより、新たな入力タスクの受付の準備ができる。最後に、巡回レジスタ制御回路３５から与えられる書込制御信号ＷＲ３に従って、割込フラグレジスタ３４への書込みが行われる。ここで、ＣＰＵに対する割込信号ＩＮＴが生成されたとき（即ち、ＩＮＴ＝“１”）には、ＣＰＵによるタスクの切替えが行われる。また、割込信号ＩＮＴが生成されない（即ち、ＩＮＴ＝“０”）場合は、一連の動作が終了する。
【００４６】
以上が、図１のタスク切替装置の全体の動作の概要であるが、次に、このタスク切替装置の主要な構成要素である巡回レジスタ１１，１２等の巡回動作を、具体例を挙げて詳細に説明する。
【００４７】
図５Ａ〜図５Ｃは、図１中の巡回レジスタ１１，１２等の状態変化を示す説明図であり、現行タスクＴａの実行中に割込入力ＩＲＱによって新たなタスクＴｂが生成された場合で、図２（ａ）に例示した横取り優先度変更回路２０ａを用いた場合を示している。
【００４８】
図５Ａは、緊急性の高いタスクＴｂが生成された場合である。このタスクＴｂの現在の優先度の値は４であり、横取り優先度の値は１５であるから、その実効優先度の値は１９となる。巡回の直前、タスクＴｂのデータは入力タスクレジスタ１５に書込まれており、かつ、巡回レジスタ１１，１２の後尾にも書込みが済んでいる。一方、現在実行中のタスクＴａのデータは、実行タスクレジスタ３１に書込まれ、実行待ちタスクＴ０，Ｔ１，Ｔ２，Ｔ３のデータは、巡回レジスタ１１，１２の先頭部のレジスタに書込まれている。なお、巡回レジスタ１１，１２でタスク番号が００となっているレジスタは、使用されていないことを示している。
【００４９】
次に巡回が始まると、実効優先度が最も高いタスクが実行タスクレジスタ３１に書込まれ、かつ残存し、その後割込フラグレジスタ３４に書込まれてＣＰＵに対する割込信号ＩＮＴが生成され、次の実行タスクとなる。ここで、タスクＴａの実効優先度の値は１７である。また、タスクＴｂの横取り優先度は半減されずに、そのままの値に保たれるので、その実効優先度の値は１９である。その結果、次の実行タスクはタスクＴｂに決定される。ここでは、前回の巡回に伴い、他のタスクの横取り優先度は既に半減されている。また、タスクＴｂが実行タスクに決定されたので、その順番を記憶していた巡回レジスタ制御回路３５によって、巡回後直ちに巡回レジスタ１１，１２中のタスクＴｂはリセット（０に消去）される。
【００５０】
最後に、巡回レジスタ制御回路３５は、記憶していた巡回レジスタ１１，１２内の最初の無効なタスクを有するレジスタ番号を用いて、そのレジスタ以降のすべてのレジスタをシフトさせ、巡回レジスタ１１，１２の後尾をリセットする。このように、巡回後の各実行待ちタスクＴ０〜Ｔ３の横取り優先度は、巡回前の１／２になっている。
【００５１】
図５Ｂは、緊急性の低いタスクＴｂが生成された場合である。このタスクＴｂの現在の優先度の値は４、横取り優先度の値は６であるから、その実効優先度の値は１０となる。一方、現在実行中のタスクＴａの実効優先度の値は１７で、実行待ちタスクＴ０，Ｔ１，Ｔ２，Ｔ３の実効優先度の値はすべてこれより小さい。
【００５２】
従って、巡回によって実行タスクレジスタ３１への書込みは行われず、タスクＴａの実行が阻止されることはない。また、タスクＴｂが実行タスクに決定されることはなく、巡回レジスタ１１，１２中のタスクＴｂのデータがリセットされることもない。但し、タスクＴｂの前に無効なタスクが存在しているため、後尾のレジスタをリセットする際に、１レジスタ分だけ上位にシフトされる。
【００５３】
図５Ｃは、緊急性の低いタスクＴｂが生成され、その後現在の実行タスクＴａが終了した場合である。このタスクＴｂの現在の実効優先度の値は１０であり、これは実行待ちのタスクＴ２と同じ値である。そこで、巡回レジスタ１１，１２内で先に位置するタスクＴ２が、次の実行タスクになる。タスクＴｂは、その前にタスクＴ２のレジスタをリセットしたために生じた無効なタスクが存在するため、後尾のレジスタをリセットする際に、１レジスタ分だけ上位にシフトされる。また、この巡回により実行待ちタスクの横取り優先度は更に半減する。従って、後発タスクの有利さが過度に増加する傾向にある。なお、これを是正するために、図２（ｃ）のような横取り優先度変更回路２０ｃの回路構成を採用することもできる。
【００５４】
このように、本実施例のタスク切替装置は、イベントの発生した時点で対応するタスクの横取り優先度をその環境条件に応じて設定する優先度決定回路４０と、実行待ちタスクの横取り優先度を変更する横取り優先度変更回路２０と、各タスク毎の本来の優先度と横取り優先度に基づいて実効優先度を計算し、この実効優先度が一番高いタスクに実行権を移すため巡回レジスタ制御回路３５等を有している。これにより、本実施例のタスク切替装置は、自動車の制御のように常時変化する環境条件の下で、緊急性のある事象に対してリアルタイムに的確なタスク制御を行うことができるという利点がある。
【００５５】
なお、以上説明した実施例は、あくまでも、この発明の技術内容を明らかにするためのものである。この発明は、上記実施例にのみ限定して狭義に解釈されるものではなく、この発明の特許請求の範囲に述べる範囲内で、種々変更して実施することができる。その変形例としては、例えば、次のようなものがある。
【００５６】
（ａ）  横取り優先度変更回路２０の構成及び機能は、図２（ａ）〜（ｃ）に示したものに限定されない。例えば、図３に示した優先度決定回路４０のように、環境パラメータＥＮＶを用いて、巡回時に横取り優先度を再計算して変更するようにしても良い。
【００５７】
（ｂ）  優先度決定回路４０は、図３に例示したものに限定されない。適用するシステムに応じて、最適な環境パラメータＥＮＶに基づいて適切な横取り優先度を算出する必要がある。
【００５８】
（ｃ）  優先度と横取り優先度を単純加算して実効優先度を算出しているが、実効優先度の算出方法は単純加算に限定されない。例えば、加重加算やその他の関数を用いて算出するようにしても良い。
【産業上の利用可能性】
【００５９】
本発明の活用例として、自動車制御の他、電車や飛行機その他の各種の交通機関や、発電所、化学プラント等、コンピュータ制御を行うあらゆる産業に利用することができる。
【図面の簡単な説明】
【００６０】
【図１】本発明の実施例を示すタスク切替装置の構成図である。
【図２】図１中の横取り優先度変更回路２０の例を示す構成図である。
【図３】図１中のタスク番号／優先度／横取り優先度決定回路４０の一例を示す構成図である。
【図４】図１のタスク切替装置の概略の動作を示すフローチャートである。
【図５Ａ】図１中の巡回レジスタ１１，１２等の状態変化を示す説明図である。
【図５Ｂ】図１中の巡回レジスタ１１，１２等の状態変化を示す説明図である。
【図５Ｃ】図１中の巡回レジスタ１１，１２等の状態変化を示す説明図である。
【符号の説明】
【００６１】
１１    タスク番号／優先度／巡回レジスタ（巡回レジスタ）
１２    横取り優先度巡回レジスタ（巡回レジスタ）
１３，１４，１７，１８    セレクタ
１５    入力タスクレジスタ
１６，３２    加算器
１９    データバス
２０    横取り優先度変更回路
３１    実行タスクレジスタ
３３    比較器
３４    割込フラグレジスタ
３５    巡回レジスタ制御回路
３６    割込制御回路
４０    タスク番号／優先度／横取り優先度決定回路（優先度決定回路）
【図１】
2005078450.tif 000003
【図２】
2005078450.tif 000004
【図３】
2005078450.tif 000005
【図４】
2005078450.tif 000006
【図５Ａ】
2005078450.tif 000007
【図５Ｂ】
2005078450.tif 000008
【図５Ｃ】
2005078450.tif 000009