(57)【特許請求の範囲】
【請求項１】
単一プロセッサにおいて複数のタスクの排他制御を実行し、複数のタスクのリアルタイム処理を実現するマルチタスク処理装置であって、
複数タスクを実行するための単一プロセッサであって、当該単一プロセッサ内に複数の仮想プロセッサを設定する単一プロセッサと、
前記複数の仮想プロセッサのそれぞれにおいて前記複数のタスクを処理する際に用いられ、前記複数のタスクが共有するデータである仮想プロセッサ内共有データを格納するメモリと、を有し、
前記単一のプロセッサは、前記メモリ内に、前記仮想プロセッサ内共有データを格納する仮想プロセッサ内共有データ格納部をコピーすることにより前記仮想プロセッサの個数分設定し、
前記複数の仮想プロセッサのそれぞれは、
自身の仮想プロセッサに割り当てられた複数のタスクを処理するタスク処理部と、
前記割り当てられた複数のタスクからの前記仮想プロセッサ内共有データ格納部に対するアクセスを排他制御する唯一のミューテックスロック部と、を有し、
前記複数の仮想プロセッサのそれぞれには、前記設定された仮想プロセッサの個数分の前記仮想プロセッサ内共有データ格納部の１つが割当てられ、
前記単一のプロセッサは、前記複数の仮想プロセッサ内のそれぞれの前記タスク処理部が、前記複数の仮想プロセッサ内のそれぞれの前記仮想プロセッサ内共有データ格納部のデータをタスク処理に用いることができるように、前記タスク処理部のアクセス先を前記割当てられた仮想プロセッサ内共有データ格納部とすることを特徴とするマルチタスク処理装置。
【請求項２】
前記仮想プロセッサのそれぞれには、タスク実行中に当該タスクとは別のタスクへの割当てが変更可能なプロセッサ番号変更可能期間と、前記別のタスクへの割当てが禁止されるプロセッサ番号変更禁止期間が存在し、
前記単一のプロセッサは、前記割り当てられたタスクのうち実行中のタスクの状態が、当該タスクを実行する仮想プロセッサとは別の仮想プロセッサに変更して実行することが可能であるか否かを、前記仮想プロセッサのそれぞれが前記プロセッサ番号変更禁止期間にあるかをチェックすることにより判定するタスク状態判定処理を、実行中のタスクから別のタスクへ実行対象のタスクを切り換える前に実行し、
前記単一のプロセッサは、前記実行中のタスクから別のタスクに実行対象のタスクを切り換えた後に、前記タスク状態判定処理の結果に基づいて、前記別のタスクを前記設定された複数の仮想プロセッサの１つに割り当てることを特徴とする請求項１に記載のマルチタスク処理装置。
【請求項３】
前記単一のプロセッサは、
前記タスク状態判定処理に加えて、前記実行中のタスクに割り当てるべき仮想プロセッサが予め指定されている否かを判断し、
前記タスク状態判定処理の結果、前記実行中のタスクが前記別の仮想プロセッサでも実行可能であると判断し、かつ前記実行中のタスクに割り当てるべき仮想プロセッサが予め指定されていないと判断した場合に、前記別のタスクを前記実行中のタスクに割り当てられていた仮想プロセッサに割り当てることを特徴とする請求項２に記載のマルチタスク処理装置。
【請求項４】
前記単一のプロセッサは、
前記タスク状態判定処理の結果、前記実行中のタスクが前記別の仮想プロセッサでも実行可能であると判断した場合、かつ、前記実行中のタスクに割り当てるべき仮想プロセッサが予め指定されていると判断した場合には、前記別の仮想プロセッサには切り換えずに前記実行中のタスクに対する仮想プロセッサの割り当てを維持し、前記別のタスクに対しては前記実行中のタスクに割り当てられた仮想プロセッサとは別の仮想プロセッサを割り当てることを特徴とする請求項３に記載のマルチタスク処理装置。
【請求項５】
前記単一のプロセッサは、前記別のタスクに割り当てるべき仮想プロセッサが決まっている場合には、前記別のタスクに前記決められた仮想プロセッサを割り当てることを特徴とする請求項２乃至４の何れか１項に記載のマルチタスク処理装置。
【請求項６】
前記単一のプロセッサは、前記複数の仮想プロセッサの全てにタスクが割り当てられている場合には、前記別のタスクに対しては、前記複数の仮想プロセッサのうち前記ミューテックスロック部が排他制御を実行している以外の仮想プロセッサを割り当てることを特徴とする請求項２乃至５の何れか１項に記載のマルチタスク処理装置。
【請求項７】
前記単一のプロセッサは、前記複数の仮想プロセッサの全てにタスクが割り当てられており、かつ前記複数の仮想プロセッサのうち全てのミューテックスロック部が排他制御を実行している場合には、前記別のタスクに対して、予め定められた仮想プロセッサを割り当てることを特徴とする請求項２乃至５の何れか１項に記載のマルチタスク処理装置。
【請求項８】
単一プロセッサにおいて複数のタスクの排他制御を実行し、複数のタスクのリアルタイム処理を実現するマルチタスク処理方法であって、
前記単一プロセッサが、前記単一プロセッサ内に複数の仮想プロセッサを設定する仮想プロセッサ設定工程と、
前記単一プロセッサが、前記複数の仮想プロセッサのそれぞれにおいて前記複数のタスクを処理する際に用いられ、前記複数のタスクが共有するデータである仮想プロセッサ内共有データを格納するメモリ内に、前記仮想プロセッサ内共有データを格納する仮想プロセッサ内共有データ格納部をコピーすることにより前記仮想プロセッサの個数分設定する仮想プロセッサ内共有データ設定工程と、を備え、
前記複数の仮想プロセッサのそれぞれは、
自身の仮想プロセッサに割り当てられた複数のタスクを処理するタスク処理部と、
前記割り当てられた複数のタスクからの前記仮想プロセッサ内共有データ格納部に対するアクセスを排他制御する唯一のミューテックスロック部と、を有し、
前記複数の仮想プロセッサのそれぞれには、前記設定された仮想プロセッサの個数分の前記仮想プロセッサ内共有データ格納部の１つが割当てられ、
前記方法は、さらに、
前記単一のプロセッサが、前記複数の仮想プロセッサ内のそれぞれの前記タスク処理部が、前記複数の仮想プロセッサ内のそれぞれの前記仮想プロセッサ内共有データ格納部のデータをタスク処理に用いることができるように、前記タスク処理部のアクセス先を前記割当てられた仮想プロセッサ内共有データ格納部とする工程を備えることを特徴とするマルチタスク処理方法。
【請求項９】
前記仮想プロセッサのそれぞれには、タスク実行中に当該タスクとは別のタスクへの割当てが変更可能なプロセッサ番号変更可能期間と、前記別のタスクへの割当てが禁止されるプロセッサ番号変更禁止期間が存在し、
前記方法は、さらに、
前記単一プロセッサが、前記割り当てられたタスクのうち実行中のタスクの状態が、当該タスクを実行する仮想プロセッサとは別の仮想プロセッサに変更して実行することが可能であるか否かを、前記仮想プロセッサのそれぞれが前記プロセッサ番号変更禁止期間にあるかをチェックすることにより判定するタスク状態判定処理を、実行中のタスクから別のタスクへ実行対象のタスクを切り換える前に実行するタスクスイッチ前処理工程と、
前記単一のプロセッサが、前記実行中のタスクから別のタスクに実行対象のタスクを切り換えた後に、前記タスク状態判定処理の結果に基づいて、前記別のタスクを前記設定された複数の仮想プロセッサの１つに割り当てるタスクスイッチ後処理工程と、
を備えることを特徴とする請求項８に記載のマルチタスク処理方法。
【請求項１０】
前記タスクスイッチ前処理工程では、前記単一のプロセッサは、前記タスク状態判定処理に加えて、前記実行中のタスクに割り当てるべき仮想プロセッサが予め指定されている否かを判断し、
前記タスクスイッチ後処理工程では、前記単一のプロセッサは、前記タスク状態判定処理の結果、前記実行中のタスクが前記別の仮想プロセッサでも実行可能であると判断し、かつ前記実行中のタスクに割り当てるべき仮想プロセッサが予め指定されていないと判断した場合に、前記別のタスクを前記実行中のタスクに割り当てられていた仮想プロセッサに割り当てることを特徴とする請求項９に記載のマルチタスク処理方法。
【請求項１１】
前記タスクスイッチ前処理工程では、前記単一のプロセッサは、前記タスク状態判定処理の結果、前記実行中のタスクが前記別の仮想プロセッサでも実行可能であると判断した場合、かつ、前記実行中のタスクに割り当てるべき仮想プロセッサが予め指定されていると判断した場合に、前記別の仮想プロセッサには切り換えずに前記実行中のタスクに対する仮想プロセッサの割り当てを維持し、前記別のタスクに対しては前記実行中のタスクに割り当てられた仮想プロセッサとは別の仮想プロセッサを割り当てることを特徴とする請求項１０に記載のマルチタスク処理方法。
【請求項１２】
前記タスクスイッチ後処理工程では、前記単一のプロセッサは、前記別のタスクに割り当てるべき仮想プロセッサが決まっている場合に、前記別のタスクに前記決められた仮想プロセッサを割り当てることを特徴とする請求項９乃至１１の何れか１項に記載のマルチタスク処理方法。
【請求項１３】
前記タスクスイッチ後処理工程では、前記単一のプロセッサは、前記複数の仮想プロセッサの全てにタスクが割り当てられている場合に、前記別のタスクに対しては、前記複数の仮想プロセッサのうち前記ミューテックスロック部が排他制御を実行している以外の仮想プロセッサを割り当てることを特徴とする請求項９乃至１２の何れか１項に記載のマルチタスク処理方法。
【請求項１４】
前記タスクスイッチ後処理工程では、前記単一のプロセッサは、前記複数の仮想プロセッサの全てにタスクが割り当てられており、かつ前記複数の仮想プロセッサのうち全てのミューテックスロック部が排他制御を実行している場合には、前記別のタスクに対して、予め定められた仮想プロセッサを割り当てることを特徴とする請求項９乃至１２の何れか１項に記載のマルチタスク処理方法。
【請求項１５】
コンピュータに含まれる単一プロセッサにおいて複数のタスクの排他制御を実行し、複数のタスクのリアルタイム処理を実現するマルチタスク処理を実現するためのプログラムであって、
前記単一プロセッサに、
前記単一プロセッサ内に複数の仮想プロセッサを設定し、当該複数の仮想プロセッサのそれぞれが、自身の仮想プロセッサに割り当てられた複数のタスクを処理するタスク処理部と、前記割り当てられた複数のタスクからの前記仮想プロセッサ内共有データ格納部に対するアクセスを排他制御する唯一のミューテックスロック部と、を有するようにする、仮想プロセッサ設定処理と、
前記複数の仮想プロセッサのそれぞれにおいて前記複数のタスクを処理する際に用いられ、前記複数のタスクが共有するデータである仮想プロセッサ内共有データを格納するメモリ内に、前記仮想プロセッサ内共有データを格納する仮想プロセッサ内共有データ格納部をコピーすることにより前記仮想プロセッサの個数分設定する仮想プロセッサ内共有データ設定処理と、
前記複数の仮想プロセッサのそれぞれに、前記設定された仮想プロセッサの個数分の前記仮想プロセッサ内共有データ格納部の１つを割当てる処理と、
前記複数の仮想プロセッサ内のそれぞれの前記タスク処理部が、前記複数の仮想プロセッサ内のそれぞれの前記仮想プロセッサ内共有データ格納部のデータをタスク処理に用いることができるように、前記タスク処理部のアクセス先を前記割当てられた仮想プロセッサ内共有データ格納部とする処理と、を実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチタスク処理装置、及びマルチタスク処理方法、並びにプログラムに関し、例えば、複数のタスクのリアルタイム処理を実現するための制御に関するものである。
【背景技術】
【０００２】
従来からマルチタスク処理の効率化に関しては、非特許文献１及び２に示されるように、ＳＭＰ（対称型マルチプロセッサ）の割り込み禁止及びスピンロック処理やユニ（単一）プロセッサのプリエンプティブ型処理が知られている。以下、非特許文献１及び２に記載された内容を織り交ぜながら背景技術及びその問題点について述べる。
【０００３】
マルチタスクオペレーティングシステムカーネルの最も低レベルな排他制御機構は、割込禁止とスピンロックである。図１に示されるように、あるタスクがあるプロセッサ上でクリティカルセクションを処理中のとき、割込禁止は、同じプロセッサ上のタスクや割込ハンドラが共有データにアクセスすることを禁止する処理を意味する。そして、スピンロックは別のプロセッサからのアクセスを禁止する処理（図示せず）である。
【０００４】
ＳＭＰカーネルでは、全てのタスクと割込ハンドラがどのプロセッサ上でも実行されるため、排他制御ではほとんどの場合、（ｉ）割込禁止とスピンロックのロックの両方が実行される。ただし、ＳＭＰにおける所定のプロセッサ上で実行されているときにだけアクセスされる共有データを保護する場合には、（ｉｉ）割込禁止のみが実行される。
【０００５】
ＡＲＴ−Ｌｉｎｕｘ２．４では、ＳＭＰの処理を、ユニプロセッサの処理に写像してマルチタスクを実現しようとしており、ＳＭＰにおけるスピンロックのロックはミューテックスロックのロックに置換して実現されている。ところが、図２に示すユニプロセッサにおけるプリエンプティブ型処理では、割込禁止に関しては何も実行されない。このため、プリエンプティブ型処理において、上記（ｉ）の場合には、割込ハンドラがタスク上で実行され、ミューテックスロックがロックされているので排他制御できる一方、上記（ｉｉ）の場合には排他制御できない。
【０００６】
このため、従来は、ソースコード中から（ｉｉ）の場合を発見し、割込を禁止することによって排他制御を行っている。
【０００７】
ところが、膨大なカーネルソースコードから、（ｉｉ）の場合を全て発見できているという保証は無く、不安定性の原因となっていた。また、（ｉｉ）の場合でも自動的に排他制御を実現する機構が必要となってくる。
【０００８】
そこで、図３で示されるように、ミューテックスロックを１つ用意する（１つのプロセッサに対して１つのミューテックスロック）ことにより、割込禁止をこのミューテックスロックのロックに置換する手法が考えられ、排他制御することができる。
【０００９】
【非特許文献１】「純国産リアルタイムＬｉｎｕｘの最新情報  ＡＲＴ−Ｌｉｎｕｘ」（石綿陽一著  ＣＱ出版ＴＥＣＨ  Ｉシリーズ  Ｖｏｌ．１３  第９章  ２００２年６月１５日）
【非特許文献２】「ＳＭＰカーネルに基づくＡＲＴ−Ｌｉｎｕｘの安定化と実時間処理性能の測定」（石綿陽一  ＳＩＣＥ  ＳＩ２００２論文  ２００２年１２月１９日）
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかしながら、１つのミューテックスロックを頻繁にロックすることになってしまうため、タスクがブロックされる頻度が高くなり、リアルタイム処理性能と効率が悪化してしまう。
【００１１】
本発明はこのような状況に鑑みてなされたものであり、リアルタイム処理性能と処理効率の良いタスク処理を実現するものである。
【課題を解決するための手段】
【００１２】
上記課題を解決するために、本発明によるマルチタスク処理装置は、単一プロセッサ内に複数の仮想プロセッサを設定し、各仮想プロセッサにミューテックスロック部を設けている。各ミューテックスロック部のロック動作は、他の仮想プロセッサの処理には影響を与えない。
【００１３】
即ち、本発明によるマルチタスク装置は、単一プロセッサにおいて複数タスクの排他制御を実行し、複数タスクのリアルタイム処理を実現するマルチタスク処理装置であって、単一プロセッサ内に複数の仮想プロセッサを設定する仮想プロセッサ設定手段と、プロセッサ内共有データを格納するプロセッサ内共有データ格納部とプロセッサ間共有データを格納するプロセッサ間共有データ格納部とを含むメモリと、メモリ内に、プロセッサ内共有データ格納部を仮想プロセッサの個数分設定するプロセッサ内共有データ設定手段と、を備えている。そして、各仮想プロセッサは、割り当てられたタスクを処理するタスク処理部と、割り当てられたタスク以外のタスクの割り当てをロックするミューテックスロック部と、を有する。また、各タスク処理部は、プロセッサ内共有データ格納部のデータをタスク処理に用いることができるように関連付けられている。
【００１４】
マルチタスク処理装置は、さらに、仮想プロセッサが割り当てられて実行中の切替前タスクの状態を把握する処理をタスクスイッチ前に実行するタスクスイッチ前処理手段と、実行中の切替前タスクから別のタスクに切り換えるタスクスイッチ処理後に、タスクスイッチ前処理手段の結果に基づいて、別の切替後タスクを設定された複数の仮想プロセッサの１つに割り当てるタスクスイッチ後処理手段と、を備えている。
【００１５】
タスクスイッチ前処理手段は、実行中の切替前タスクの実行に関して割り当てられた仮想プロセッサ変更禁止期間に該当するか否か、及び実行中の切替前タスクに割り当てるべき仮想プロセッサが指定されている否かを判断する。また、タスクスイッチ後処理手段は、仮想プロセッサ変更禁止期間に該当せず、実行中の切替後タスクに割り当てるべき仮想プロセッサが指定されていない場合に、実行中の切替後タスクに仮想プロセッサを割り当てる。
【００１６】
タスクスイッチ前処理手段は、仮想プロセッサ変更禁止期間に該当する場合、或いは、実行中のタスクに割り当てるべき仮想プロセッサが指定されている場合に、実行中のタスクに対する仮想プロセッサの割り当てを維持し、別のタスクに対しては可能な限り別の仮想プロセッサを割り当てる。
【００１７】
また、タスクスイッチ後処理手段は、切替後タスクに割り当てるべき仮想プロセッサが決まっている場合には、切替後タスクに決められた仮想プロセッサを割り当てる。
【００１８】
さらに、タスクスイッチ後処理手段は、複数の仮想プロセッサの全てにタスクが割り当てられている場合には、切替後タスクに対しては、複数の仮想プロセッサのうちミューテックスロック部のロック期間から外れている仮想プロセッサを割り当てる。また、タスクスイッチ後処理手段は、複数の仮想プロセッサの全てにタスクが割り当てられており、かつ複数の仮想プロセッサのうち全てのミューテックスロック部がロック期間にある場合には、切替後タスクに対して、予め定められた仮想プロセッサを割り当てる。
【００１９】
本発明は、上述のマルチタスク処理装置に対応するマルチタスク処理方法、及び、コンピュータを上述のマルチタスク処理装置として機能させるためのプログラムをも提供する。
【００２０】
さらなる本発明の特徴は、以下本発明を実施するための最良の形態および添付図面によって明らかになるものである。
【発明の効果】
【００２１】
本発明のタスク処理によれば、リアルタイム処理性能及び処理効率良くマルチタスクを実現することができるようになる。
【発明を実施するための最良の形態】
【００２２】
本発明は、ユニプロセッサにおいて、複数の仮想プロセッサと各仮想プロセッサに割り込み制御用ミューテックスロックを設定するという概念を導入し、実行中のタスクを適宜仮想プロセッサに割り当てることにより、タスクがブロックされる状態がなるべく発生しないような制御をしている。
【００２３】
以下、添付図面を参照して本発明の実施形態について説明する。ただし、本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。また、各図において共通の構成については同一の参照番号が付されている。
【００２４】
＜タスク処理装置の構成＞
図４は、本発明の実施形態に係るタスク処理装置の概略構成を示す図である。
【００２５】
タスク処理装置１は、ＣＰＵやＭＰＵ等のプロセッサ（制御処理部を含む）１０と、各種データを格納するためのＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１１と、キーボード、マウス等のポインティングデバイスやその他の入力デバイス等で構成され、ユーザが各種データを入力するための入力部１２と、モニタやプリンタ等、処理結果を出力するための出力部１３と、本実施形態に係るタスク処理プログラムや固定パラメータ等を格納するＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｍｅｍｏｒｙ）１４と、を備えている。
【００２６】
プロセッサ１０は、ＲＯＭ１４に格納されたタスク処理プログラムに従って、任意の個数（Ｎ個）の仮想プロセッサ＃０乃至＃Ｎ−１を設定し、ＲＡＭ１１内に設けられたプロセッサ内共有データをコピーしてＲＡＭ１１内にＮ個のプロセッサ内共有データ＃０ないしＮ−１を設定する。ここで、Ｎはユーザによって適宜設定された値である。
【００２７】
仮想プロセッサ＃０乃至＃Ｎ−１のそれぞれは、タスク処理部＃０乃至Ｎ−１（１０１乃至１０４）のうち１つと、ミューテックスロック部＃０乃至＃Ｎ−１（１０５乃至１０８）のうち１つと、プロセッサ内共有データ＃０乃至＃Ｎ−１（１１１乃至１１４）のうち１つと、によって構成される。なお、プロセッサ１０は単一プロセッサ（ユニプロセッサ）なので、各仮想プロセッサ＃０乃至＃Ｎ−１は、いずれか１つしか動作することはできない。この点はＳＭＰとは異なるものとなっている。また、実際の処理はＲＡＭ１１内部の作業領域において実行されるが、タスク処理部＃０乃至＃Ｎ−１やミューテックスロック部＃０乃至＃Ｎ−１は、ＲＡＭ１１の作業領域に対して処理の指示を出すので、便宜上プロセッサ１０内にあるように、図１では示されている。
【００２８】
＜仮想プロセッサの処理の概略＞
図５は、本実施形態によるタスク処理（ＳＭＰにおいける割込禁止処理に相当する処理）の概略を説明するための図である。
【００２９】
図３に示されるように、１つのプロセッサに１つのミューテックスロック部を設けて、このミューテックスロックにＳＭＰの割り込み禁止を置換した場合、排他的制御は可能である。
【００３０】
しかし、１つのタスクが実行中の場合、１つのミューテックスロックによって割り込み禁止を実現しようとすると、ロック（ブロック）する必要の無いタスクまでロックする状態が起こり、リアルタイム処理の効率が悪くなってしまう。
【００３１】
そこで、仮想プロセッサという概念を導入し、各仮想プロセッサにそれぞれミューテックスロック部を設けることにより（図５参照）、タスクを不必要にロックする状態が発生しないように制御している。
【００３２】
例えば、図５に示すように、仮想プロセッサ＃０において、タスク＃０がミューテックスロック部＃０をロック中に、タスク＃１がプロセッサ内共有データ＃０にアクセスしようとしてもミューテックスロック部＃０によってロック（ブロック）される。図３の場合には、他の全てのタスクの全てのプロセッサ内共有データへのアクセスはブロックされてしまうが、図５の場合は、仮想プロセッサ＃１においては、タスク＃２のプロセッサ内共有データ＃１へのアクセスが可能となっている。従って、後は様々な条件によって、仮想プロセッサ＃０におけるタスク＃０の処理と仮想プロセッサ＃１におけるタスク＃２の処理のどちらを実行すべきかの制御になるのである。ＳＭＰとは異なり、図５は単一プロセッサなので、各仮想プロセッサのタスクは１つずつ実行されるからである。
【００３３】
このように、あるタスクがプロセッサに割り当てられていても他のタスクを割り当てることができるので、リアルタイム処理を効率よく実行することができるようになる。
【００３４】
＜タスク処理装置の動作＞
図６乃至９は、本実施形態によるタスク処理装置１の特徴的動作を説明するためのフローチャートである。図６は、各仮想プロセッサに設けられたミューテックスロック部の初期化処理を示している。図７は、ＳＭＰにおける割り込み禁止及び割り込み許可の処理がミューテックスロック部の処理に対応することを示している。図８は、タスクスイッチ処理を実行する前に実行される前処理を示している。図９は、タスクスイッチ処理を実行した後に実行される後処理を示している。さらに、図１０及び１１は、特徴的動作の具体的概念を示している。なお、各フローチャートにおいては、特に断らない限り、各ステップの処理動作主体はプロセッサ１０の処理制御部である。
【００３５】
（１）ミューテックスロック部初期化処理
予め決められた個数に、或いは、ユーザによって所定の個数に、仮想プロセッサの数が設定されると、その仮想プロセッサの個数分のミューテックスロック部が用意される。すると、順次ミューテックスロック部の初期化処理が実行される。
つまり、図６では、まずステップＳ６０１において、変数ｉ＝０、ｎ＝設定仮想プロセッサ数（Ｎ）−１（＝最大仮想プロセッサ番号）として、カウンタがリセットされる。そして、ステップＳ６０２からＳ６０４において、ミューテックスロック部＃０乃至＃Ｎ−１のＮ個のミューテックスロック部＃０乃至＃Ｎ−１が初期化される。
【００３６】
（２）割り込み禁止及び割り込み許可に対応する処理
ＳＭＰを単一のプロセッサに置き換えた場合、ＳＭＰの割り込み禁止処理及び割り込み許可処理はそれぞれ、図７Ａ及びＢの処理に置き換えられる。
【００３７】
図７Ａは割り込み禁止処理との対応を示している。ステップＳ７０１において、実行中のタスクのプロセッサ番号が＃ｉに設定される。そして、別のタスクが仮想プロセッサ＃ｉのプロセッサ内共有データ＃ｉにアクセスしようすると、仮想プロセッサ＃ｉ内に設けられたミューテックスロック部＃ｉが当該別のタスクをブロックする。この一連の処理がＳＭＰの割り込み禁止処理に対応するものである。
【００３８】
図７Ｂは割り込み許可処理との対応を示している。ステップＳ７０３において、実行中のタスクのプロセッサ番号が＃ｉに設定される。そして、別のタスクによる仮想プロセッサ＃ｉに対するアクセスを許可する場合には、仮想プロセッサ＃ｉ内に設けられたミューテックスロック部＃ｉがアンロック動作によって当該別のタスクによるプロセッサ内共有データ#ｉへのアクセスをブロックせずに許可する。この一連の処理がＳＭＰの割り込み許可処理に対応するものである。
【００３９】
（３）タスクスイッチ前処理
タスクスイッチ前処理とは、実行中のタスク（例えば、タスク＃０）の処理から別のタスク（例えば、タスク＃１）の処理に切り換える場合に、その切り換え処理の前に行われる処理である。
【００４０】
ステップＳ８０１では、実行中タスク（タスク＃０）に関して、仮想プロセッサのプロセッサ番号を変更してはいけない期間であるプロセッサ番号変更禁止期間か否かが判断される。タスクを実行中であっても、仮想プロセッサを変更しての良い期間と変更してはいけない期間がある。後者がプロセッサ番号変更禁止期間であって、例えば、別の仮想プロセッサに変更されてしまうと変更までに実行した処理が無駄になる場合や、別の仮想プロセッサだと同じ処理ができないような場合が該当する。ステップＳ８０１でプロセッサ番号変更禁止期間であると判断された場合には、当該タスク前処理は終了する。この場合、実行中タスク（タスク＃０）中のプロセッサ番号指定領域にはそれまでと同じ仮想プロセッサのプロセッサ番号が付与される。ステップＳ８０１でプロセッサ番号変更禁止期間ではないと判断された場合には、処理はステップＳ８０２に移行する。
【００４１】
ステップＳ８０２では、実行中タスク（タスク＃０）について用いるべき仮想プロセッサが予め指定されているか否かが判断される。用いるべき仮想プロセッサが指定されている場合には、プロセッサ番号を指定されたもの以外に変更することができないのでタスクスイッチ前処理は終了する。この場合、タスク中のプロセッサ番号指定領域にはその指定された仮想プロセッサの番号が付与される。ステップＳ８０２で仮想プロセッサが指定されていないと判断された場合には、処理はステップＳ８０３に移行する。
【００４２】
ステップＳ８０３では、実行中タスク（タスク＃０）のプロセッサ番号がＮＵＬＬに指定される。ここでＮＵＬＬとは、当該タスクに仮想プロセッサが割り当てられていない状態を意味し、この場合、タスク＃０に関してそれまで用いてきた仮想プロセッサが放棄されている状態であることを意味する。つまり、他タスクに当該プロセッサ番号が割り当てられていなければ、別のタスクにタスク＃０を処理していた仮想プロセッサを割り当てても、対応するミューテックスロック部によってブロックされない状態にあるということである。  
【００４３】
（４）タスクスイッチ後処理
タスクスイッチ処理においては、実行中タスク（タスク＃０）から別のタスク（タスク＃１）に処理が切り換えられる。従って、タスクスイッチ後処理においては、タスク＃１が実行中タスクとなる。そのため、実際に当該別のタスク（タスク＃１）に適当な仮想プロセッサを割り当てなければならない。このプロセッサの割り当て処理が主にタスクスイッチ後処理において実行される。
【００４４】
ステップＳ９０１では、実行中タスク（タスク＃１）におけるプロセッサ番号指定領域のプロセッサ番号がＮＵＬＬか否か判断される。つまり、タスク＃１に仮想プロセッサが既に割り当てられているか判断される。プロセッサ番号がＮＵＬＬではないと判断された場合、タスクスイッチ後処理は終了する。タスク＃１には仮想プロセッサが既に割り当てられているからである。このような場合には、例えば、タスク＃１を実行すべき仮想プロセッサが予め指定されている場合が該当する。プロセッサ番号がＮＵＬＬであると判断された場合には、処理はステップＳ９０２に移行する。
【００４５】
ステップＳ９０２では、割り当て対象の仮想プロセッサの範囲が設定される。具体的には、変数ｉ＝０、ｎ＝設定仮想プロセッサ数（Ｎ）−１としてカウンタがリセットされる。
【００４６】
ステップＳ９０３では、他タスクのプロセッサ番号に＃ｉが既に使用されているか（つまり、仮想プロセッサ＃ｉに他のタスクが既に割り当てられているか）が判断される。他タスクのプロセッサ番号に＃ｉが既に使用されていないと判断された場合（仮想プロセッサ＃ｉがまだ割り当てられていない場合）、処理はステップＳ９１１に移行する。そして、実行中タスク（タスク＃１）のプロセッサ番号指定領域に＃ｉが付与される。ステップＳ９０３で他タスクのプロセッサ番号に＃ｉが既に使用されていると判断された場合（仮想プロセッサ＃ｉが既に割り当てられている場合）、処理はステップＳ９０４に移行する。
【００４７】
ステップＳ９０４では、変数ｉがｎに達しているか判断される。達していなければ（ｉ＜ｎであれば）、処理はステップＳ９０５に移行し、カウンタを１つインクリメントして（ｉ＝ｉ＋１）、再度ステップＳ９０３の処理が実行される。一方、変数ｉがｎに達していれば、処理はステップＳ９０６に移行する。この場合は、全ての仮想プロセッサにタスクが既に割り当てられている状態を意味する。
【００４８】
ステップＳ９０６では、再度、割り当て対象の仮想プロセッサの範囲が設定される。具体的には、変数ｉ＝０、ｎ＝設定仮想プロセッサ数（Ｎ）−１としてカウンタがリセットされる。ステップＳ９０７以降では、既にタスク割り当てがなされた仮想プロセッサであっても、ミューテックスロックによるロック期間（割り込みに対してロックが作用する期間）中ではない仮想プロセッサにはタスクを割り当ててもブロックされないため、そのようなプロセッサが無いか探してみて存在する場合にはそれを割り当てるという処理が実行される。
【００４９】
ステップＳ９０７では、仮想プロセッサ＃ｉにおけるミューテックスロック部＃ｉがロック期間中であるか否かが判断される。ロック期間中ではないと判断されれば、処理はステップＳ９１１に移行し、実行中タスク（タスク＃１）のプロセッサ番号指定領域のプロセッサ番号に＃ｉが付与される。つまり、仮想プロセッサ＃ｉが実行中タスク（タスク＃１）に割り当てられる。ステップＳ９０７でミューテックスロック部＃ｉがロック期間中であれば、処理はステップＳ９０８に移行する。
【００５０】
ステップＳ９０８では、変数ｉがｎに達しているか判断される。達していなければ（ｉ＜ｎであれば）、処理はステップＳ９０９に移行し、カウンタを１つインクリメントして（ｉ＝ｉ＋１）、再度ステップＳ９０７の処理が実行される。一方、変数ｉがｎに達していれば、処理はステップＳ９１０に移行する。この場合は、全ての仮想プロセッサのミューテックスロック部はロック期間中であるので、当該実行中タスク（タスク＃１）を割り当てるとブロックされることがあり得る状態を意味する。
【００５１】
ステップＳ９１０では、全ての仮想プロセッサのミューテックスロック部はロック期間中であるので、デフォルトの仮想プロセッサを割り当てるべく、そのプロセッサ番号をｉに設定する。
【００５２】
そしてステップＳ９１１で、仮想プロセッサ＃ｉが実行中タスク（タスク＃１）に割り当てられる。
【００５３】
（５）具体的処理例
（イ）図１０は、タスクスイッチ前・後処理の一場面について具体例を示す図である。
図１０では、タスク＃０が仮想プロセッサ＃０に割り当てられて実行されている（タスク＃０のプロセッサ指定領域にプロセッサ番号＃０が付与されている）。そして、タスク＃０についてプロセッサ番号変更禁止期間にあるときに、仮想プロセッサ＃１にタスク＃１が割り当てられたとする。仮想プロセッサは単一プロセッサに仮想的に設定されたものであるので、択一的にしか動作しない。よって、仮想プロセッサ＃０と仮想プロセッサ＃１は同時には動作しえず、どちらか一方が動作する。
【００５４】
図１０の例において、タスク＃１をタスク＃０よりも先に実行しなければならいケースであるとした場合、タスク＃１に仮想プロセッサ＃１が割り当てられると、タスク＃１が実行される。タスク＃１の実行中は、タスク＃０の処理は中断してタスク＃１の処理終了まで、仮想プロセッサ＃０は処理を待機する。そして、タスク＃１の処理が終了すると、タスク＃０の処理が再開される。
【００５５】
図１０の例を図８及び９のフローチャートに照らして考えると次のようになる。つまり、タスクスイッチ前処理のステップＳ８０１でプロセッサ番号変更禁止期間と判断されたため、タスク＃０が仮想プロセッサ＃０に割り当てられる。そして、その状態のまま、タスクスイッチ後処理のステップＳ９０１、Ｓ９０２、Ｓ９０３及びＳ９１１によって、タスク＃１に仮想プロセッサ＃１が割り当てられる場合に、図１０の例は相当する。
【００５６】
（ロ）図１１は、タスクスイッチ前・後処理の一場面であってミューテックスロック部によるロックが掛かる場合の具体例を示している。
より詳細には、図１１は、仮想プロセッサの設定数Ｎ＝４であって、既に各仮想プロセッサにはタスク＃０〜タスク＃３が既に割り当てられているときに、タスク＃４の割り当てがなされるケースを示している。
【００５７】
全ての仮想プロセッサにタスクが割り当てられているので、仮想プロセッサ＃０にタスク＃４を割り当てた場合には、仮想プロセッサ＃０のミューテックスロック部＃０は、ロック期間中であれば、タスク＃４のプロセッサ内共有メモリ＃０へのアクセスをブロックする。そして、他の仮想プロセッサ＃１〜＃３にタスク＃４を割り当てた場合には、ミューテックスロック部＃１〜＃３も、ロック期間中であれば、タスク＃４のプロセッサ内共有メモリ♯１〜＃３へのアクセスをブロックする。このとき、デフォルトの仮想プロセッサが仮想プロセッサ＃０に設定されていれば、タスク＃４は仮想プロセッサ＃０に割り当てられる。ただし、プロセッサ共有メモリ＃０へのアクセスが発生した場合ブロックされ、ロック期間が終了するまではタスク＃４はブロックされたままである。
【００５８】
図１１の例は、タスクスイッチ前処理のステップＳ８０１でプロセッサ番号変更禁止期間と判断されたため、タスク＃０が仮想プロセッサ＃０に割り当てられたまま、タスク＃１〜タスク＃３が逐次仮想プロセッサ＃１〜＃３に割り当てられ、その後、タスク＃４に関して、タスクスイッチ後処理のステップＳ９０１〜Ｓ９０４、Ｓ９０６〜Ｓ９０８、Ｓ９１０及びＳ９１１によって、タスク＃４が仮想プロセッサ＃０に割り当てられ、ミューテックスロック部＃０がロック期間中で、タスク＃４のプロセッサ内共有メモリ＃０へのアクセスがブロックされた場合に相当する。
【００５９】
＜まとめ＞
コンピュータを内蔵する組込機器では、リアルタイム処理が必要になる場合が多い。一方、組込機器の高機能化が求められ、内蔵されるコンピュータが大規模化され、その上で動作するソフトウェアの複雑化が進んでいる。
【００６０】
そして、組込用オペレーティングシステムには、リアルタイム処理機能に加えてファイルシステム、ネットワーク、グラフィック・ユーザ・インターフェース等の汎用機能が必要になる。また、リアルタイム処理機能と汎用機能を併せ持つオペレーティングシステムの開発では、ＵＮＩＸやＷｉｎｄｏｗｓ等の汎用オペレーティングシステムにリアルタイム処理機能を付加する手法の効率が良い。
【００６１】
そこで、本発明によれば効率よくマルチタスクをリアルタイム処理することが可能となるため、本発明は、汎用オペレーティングシステムのリアルタイム化において有益となるものである。
【００６２】
本発明の実施形態では、単一プロセッサ内に複数の仮想プロセッサを設定し、各仮想プロセッサにミューテックスロック部を設けている。各ミューテックスロック部のロック動作は、他の仮想プロセッサの処理には影響を与えない。このようにすることにより、単一のミューテックスロック部しかない従来の制御に比べてタスクの処理がブロックされる頻度を劇的に減少させることができ、効率良く、マルチタスクをリアルタイム処理することができるようになる。
【００６３】
さらに、仮想プロセッサが割り当てられて実行中のタスクの状態を把握する処理をタスクスイッチ前に実行するタスクスイッチ前処理と、実行中のタスクから別のタスクに切り換えるタスクスイッチ処理後に、タスクスイッチ前処理の結果に基づいて、別の切替後タスクを設定された複数の仮想プロセッサの１つに割り当てるタスクスイッチ後処理を実行するようにしている。このように、前処理によって実行中のタスクの状態を把握してから、別の切替後タスクの仮想プロセッサ割り当て処理を行っているので、実行中のタスクの状況に応じて柔軟なプロセッサ割り当て処理を実現することができる。
【００６４】
具体的には、タスクスイッチ前処理では、実行中のタスクの実行に関して割り当てられた仮想プロセッサ変更禁止期間に該当するか否か、及び実行中のタスクに割り当てるべき仮想プロセッサが指定されている否かを判断する。そして、タスクスイッチ後処理では、仮想プロセッサ変更禁止期間に該当せず、実行中のタスクに割り当てるべき仮想プロセッサが指定されていない場合に、別の切替後タスクを切替前のタスクに割り当てられていた仮想プロセッサに割り当てる。
【００６５】
また、タスクスイッチ前処理において、仮想プロセッサ変更禁止期間に該当する、或いは、実行中のタスクに割り当てるべき仮想プロセッサが指定されていると判断された場合に、タスクスイッチ後処理では、切替前タスクに対する仮想プロセッサの割り当てを維持し、別の切替後タスクに対しては別の仮想プロセッサを割り当てる。
【００６６】
また、タスクスイッチ後処理では、別のタスクに割り当てるべき仮想プロセッサが決まっている場合には、別のタスクに決められた仮想プロセッサが割り当てられる。
【００６７】
さらに、タスクスイッチ後処理において、複数の仮想プロセッサの全てにタスクが割り当てられている場合には、別の切替後タスクに対しては、複数の仮想プロセッサのうちミューテックスロック部のロック期間から外れている仮想プロセッサを割り当てる。また、タスクスイッチ後処理手段は、複数の仮想プロセッサの全てにタスクが割り当てられており、かつ複数の仮想プロセッサのうち全てのミューテックスロック部がロック期間にある場合には、別の切替後タスクに対して、予め定められた仮想プロセッサを割り当てる。
【００６８】
以上のようにして、マルチタスクのリアルタイム処理の効率化が図られている。
【００６９】
なお、本発明は、実施形態の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をシステム或は装置に提供し、そのシステム或は装置のコンピュータ（又はＣＰＵやＭＰＵ）が記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フロッピィ（登録商標）ディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭなどが用いられる。
【００７０】
また、プログラムコードの指示に基づき、コンピュータ上で稼動しているＯＳ（オペレーティングシステム）などが実際の処理の一部又は全部を行い、その処理によって前述した実施形態の機能が実現されるようにしてもよい。さらに、記憶媒体から読み出されたプログラムコードが、コンピュータ上のメモリに書きこまれた後、そのプログラムコードの指示に基づき、コンピュータのＣＰＵなどが実際の処理の一部又は全部を行い、その処理によって前述した実施の形態の機能が実現されるようにしてもよい。
【００７１】
また、上述の実施形態の機能を、実現するソフトウェアのプログラムコードがネットワークを介して配信されることにより、システム又は装置のハードディスクやメモリ等の記憶手段又はＣＤ-ＲＷ、ＣＤ-Ｒ等の記憶媒体に格納され、そのシステム又は装置のコンピュータ(又はＣＰＵやＭＰＵ)が当該記憶手段や当該記憶媒体に格納されたプログラムコードを読み出して実行することによって達成するようにしてもよい。
【図面の簡単な説明】
【００７２】
【図１】ＳＭＰにおけるタスクの割り込み禁止処理の概念を示す図である。
【図２】単一プロセッサにおけるプリエンプティブ型処理の概念を示す図である。
【図３】単一プロセッサにおけるミューテックスロック部の動作概念を示す図である。
【図４】本発明の実施形態によるタスク処理装置の概略構成を示す図である。
【図５】本発明の実施形態によるタスク処理装置の動作概念を示す図である。
【図６】ミューテックスロック部の初期化処理を説明するためのフローチャートである。
【図７】ＳＭＰにおける割り込み禁止／許可処理と、ミューテックスロック部の処理との対応関係を説明するためのフローチャートである。
【図８】タスクスイッチ前処理の動作を説明するためのフローチャートである。
【図９】タスクスイッチ後処理の動作を説明するためのフローチャートである。
【図１０】本実施形態によるタスク処理装置の具体的動作例（１）を示す図である。
【図１１】本実施形態によるタスク処理装置の具体的動作例（２）を示す図である。
【符号の説明】
【００７３】
１…タスク処理装置
１０…プロセッサ
１１…ＲＡＭ
１２…入力部
１３…出力部
１４…ＲＯＭ
１０１〜１０４…タスク処理部
１０５〜１０８…ミューテックスロック部
１１１〜１１４…プロセッサ内共有データ
【図１】
0005146954.tif 000002
【図２】
0005146954.tif 000003
【図３】
0005146954.tif 000004
【図４】
0005146954.tif 000005
【図５】
0005146954.tif 000006
【図６】
0005146954.tif 000007
【図７】
0005146954.tif 000008
【図８】
0005146954.tif 000009
【図９】
0005146954.tif 000010
【図１０】
0005146954.tif 000011
【図１１】
0005146954.tif 000012