(57)【要約】【課題】メモリ領域を効率良く使用すると共に、スタック領域のオーバーフロー等の不都合を防止すること。【解決手段】複数のタスクを所定のスケジュールに従って起床するスケジューラと、前記複数のタスクにより使用され、所定の領域がスタック領域として設定された共有メモリと、タスク毎のスタック使用量及び最大処理時間を記憶した記憶手段と、を備え、スケジューラは、複数のタスクのうち一のタスクを起床しようとする際に、当該タスクの最大処理時間が経過するまでに起床される予定のタスクであって、当該タスクに割り込み可能なタスクを抽出し、抽出したタスクのスタック使用量と当該タスクのスタック使用量を加算したスタック使用量がスタック領域の容量を超える場合には、起床しようとするタスクの起床を中止する情報処理装置。【選択図】図４
2012093832.tif 000002
【特許請求の範囲】
【請求項１】
複数のタスクを実行可能な情報処理装置であって、
前記複数のタスクを所定のスケジュールに従って起床するスケジューラと、
前記複数のタスクにより使用され、所定の領域がスタック領域として設定された共有メモリと、
タスク毎のスタック使用量及び最大処理時間を記憶した記憶手段と、
を備え、
前記スケジューラは、前記複数のタスクのうち一のタスクを起床しようとする際に、前記起床しようとするタスクの最大処理時間が経過するまでに起床される予定のタスクであって、前記起床しようとするタスクに割り込み可能なタスクを抽出し、該抽出したタスクのスタック使用量と前記起床しようとするタスクのスタック使用量を加算したスタック使用量が前記スタック領域の容量を超える場合には、前記起床しようとするタスクの起床を中止することを特徴とする、
情報処理装置。
【請求項２】
グループ分けされた複数のタスクを実行可能な情報処理装置であって、
前記複数のタスクを所定のスケジュールに従って起床するスケジューラと、
前記複数のタスクにより使用され、前記グループ毎に所定の領域がスタック領域として設定された共有メモリと、
タスク毎のスタック使用量及び最大処理時間を記憶した記憶手段と、
を備え、
前記スケジューラは、前記複数のタスクのうち一のタスクを起床しようとする際に、前記起床しようとするタスクの最大処理時間が経過するまでに起床される予定の同一グループに属するタスクであって、前記起床しようとするタスクに割り込み可能なタスクを抽出し、該抽出したタスクのスタック使用量と前記起床しようとするタスクのスタック使用量を加算したスタック使用量が前記起床しようとするタスクの属するグループに設定されている前記スタック領域の容量を超える場合には、前記起床しようとするタスクの起床を中止することを特徴とする、
情報処理装置。
【請求項３】
請求項１又は２に記載の情報処理装置であって、
前記起床が中止されたタスクは、起床予定タスクが並べられたキューの末尾に再登録されることを特徴とする、
情報処理装置。
【請求項４】
グループ分けされた複数のタスクを実行可能な情報処理装置であって、
前記複数のタスクを所定のスケジュールに従って起床するスケジューラと、
前記複数のタスクにより使用され、前記グループ毎に所定の領域がスタック領域として設定された共有メモリと、
タスク毎のスタック使用量及び最大処理時間を記憶した記憶手段と、
を備え、
前記スケジューラは、前記複数のタスクのうち一のタスクを起床しようとする際に、前記起床しようとするタスクの最大処理時間が経過するまでに起床される予定の同一グループに属するタスクであって、前記起床しようとするタスクに割り込み可能なタスクを抽出し、該抽出したタスクのスタック使用量と前記起床しようとするタスクのスタック使用量を加算したスタック使用量が前記起床しようとするタスクの属するグループに設定されている前記スタック領域の容量を超える場合には、他グループに設定されている使用可能なスタック領域を探索することを特徴とする、
情報処理装置。
【請求項５】
請求項１ないし４のいずれか１項に記載の情報処理装置であって、
前記スケジューラはリアルタイムオペレーティングシステムの一機能であり、
前記複数のタスクは、強制終了できないタスクである、
情報処理装置。
【請求項６】
請求項１ないし５のいずれか１項に記載の情報処理装置であって、
前記起床しようとするタスクに割り込み可能なタスクは、前記起床しようとするタスクよりも優先度が高いタスクである、
情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のタスクを実行可能な情報処理装置に関する。
【背景技術】
【０００２】
従来、複数のタスクを実行可能な情報処理装置が知られている。具体的には、一パッケージ内に複数のＣＰＵコア（プロセッサコア）を封入して各ＣＰＵコアが独立して処理を行うマルチコア・プロセッサ、時分割で複数のスレッドが処理を行うソフトウエア・マルチスレッディングやハードウエアの一部をスレッド専用としたハードウエア・マルチスレッディングを行うマルチスレッド処理装置、ＣＰＵ等のプロセッサを複数個備えるマルチプロセッサ処理装置等が実用化されている。
【０００３】
特に、近年の車載制御装置の分野においては、ＣＰＵ等の処理能力向上に伴い、複数のタスク（ある程度の機能的まとまりを有する一群の命令をいう；或いはプロセス）を一の情報処理装置において並行して実行させ、コストや重量、搭載スペースを低減する動きが見られる。
【０００４】
この種の情報処理装置において、タスク間（或いはＣＰＵ間）でデータを共有したり、外部機器との間で入出力されるデータを各タスクが参照できるようにするための一手段として、共有メモリ等に共有データを格納することが行われている。
【０００５】
ＲＡＭ（Random  Access  Memory）等のメモリにおいては、通常のメモリ領域の他、スタックとして使用されるスタック領域が設定される場合がある。スタックとは、最後に入力したデータが先に出力される（Last  In  First  Out）データ構造であり、プログラミング言語によっては頻繁に利用されるデータ構造である。
【０００６】
前述のように複数のタスクを実行可能な情報処理装置では、スタック領域を共有メモリ上に設定するのが通常となっている。係る構成を前提とするスタック割り当て方法についての発明が開示されている（例えば、特許文献１参照）。この方法では、タスクの優先度ごとに１つのスタックを設け、優先度が同じタスクは１つのスタックを共用するようにしている。
【０００７】
ここで、この分野における優先度とは、優先度の高いタスクによる優先度の低いタスクへの割り込みは許容され、その逆は許容されない関係をいう。優先度の高いタスクが起床されると、優先度の低いタスクは処理は保留され、優先度の高いタスクの処理が行われる。そして、優先度の高いタスクの処理が終了すると、優先度が次に高いタスクの処理に移行する。
【０００８】
また、スタック領域をタスク間で共用する情報処理装置についての発明が開示されている（例えば、特許文献２参照）。この装置では、タスクに対応するスタック領域に格納されるタスク・スタック領域のアドレス情報を保管する手段を備え、少なくとも１つのタスク・スタック領域が上積みされている状態の第１のタスク・スタック領域に対応するタスクの終了処理により第１のタスク・スタック領域が解放されて空き領域とされ、つづいて、空き領域上に積まれているタスク・スタック領域のそれぞれに対応するタスクの終了により、空き領域上に積まれているタスク・スタック領域が解放された場合に、保管されたタスク・スタック領域のアドレス情報に基づき、スタック領域のスタックポインタが、解放された第１のタスク・スタック領域に対応する空き領域とその直下の領域との境のアドレスを指すように制御を行っている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開平９−９１１５４号公報
【特許文献２】特開２００６−１４６３２９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、上記特許文献１に記載の方法では、同じ優先度のタスク間でのみスタック領域が共用されるため、メモリの設計に制約が生じ、タスク間のメモリ領域共有によりメモリ領域を効率良く使用することができるという効果を、十分に発揮できない場合がある。
【００１１】
また、上記特許文献２に記載の装置では、あるタスクの起床後に、より優先度の高いタスクが起床する可能性についての考慮がなされていない。このため、スタック領域を異なる優先度のタスク間で共用する場合に、スタック領域のオーバーフロー等の不都合が生じる場合がある。
【００１２】
本発明はこのような課題を解決するためのものであり、メモリ領域を効率良く使用すると共に、スタック領域のオーバーフロー等の不都合を防止することが可能な情報処理装置を提供することを、主たる目的とする。
【課題を解決するための手段】
【００１３】
上記目的を達成するための本発明の第１の態様は、
複数のタスクを実行可能な情報処理装置であって、
前記複数のタスクを所定のスケジュールに従って起床するスケジューラと、
前記複数のタスクにより使用され、所定の領域がスタック領域として設定された共有メモリと、
タスク毎のスタック使用量及び最大処理時間を記憶した記憶手段と、
を備え、
前記スケジューラは、前記複数のタスクのうち一のタスクを起床しようとする際に、前記起床しようとするタスクの最大処理時間が経過するまでに起床される予定のタスクであって、前記起床しようとするタスクに割り込み可能なタスクを抽出し、該抽出したタスクのスタック使用量と前記起床しようとするタスクのスタック使用量を加算したスタック使用量が前記スタック領域の容量を超える場合には、前記起床しようとするタスクの起床を中止することを特徴とする、
情報処理装置ある。
【００１４】
この本発明の第１の態様によれば、メモリ領域を効率良く使用すると共に、スタック領域のオーバーフロー等の不都合を防止することができる。
【００１５】
本発明の第２の態様は、
グループ分けされた複数のタスクを実行可能な情報処理装置であって、
前記複数のタスクを所定のスケジュールに従って起床するスケジューラと、
前記複数のタスクにより使用され、前記グループ毎に所定の領域がスタック領域として設定された共有メモリと、
タスク毎のスタック使用量及び最大処理時間を記憶した記憶手段と、
を備え、
前記スケジューラは、前記複数のタスクのうち一のタスクを起床しようとする際に、前記起床しようとするタスクの最大処理時間が経過するまでに起床される予定の同一グループに属するタスクであって、前記起床しようとするタスクに割り込み可能なタスクを抽出し、該抽出したタスクのスタック使用量と前記起床しようとするタスクのスタック使用量を加算したスタック使用量が前記起床しようとするタスクの属するグループに設定されている前記スタック領域の容量を超える場合には、前記起床しようとするタスクの起床を中止することを特徴とする、
情報処理装置である。
【００１６】
この本発明の第２の態様によれば、メモリ領域を効率良く使用すると共に、スタック領域のオーバーフロー等の不都合を防止することができる。
【００１７】
本発明の第１又は第２の態様において、
前記起床が中止されたタスクは、起床予定タスクが並べられたキューの末尾に再登録されることを特徴とするものとしてもよい。
【００１８】
本発明の第３の態様は、
グループ分けされた複数のタスクを実行可能な情報処理装置であって、
前記複数のタスクを所定のスケジュールに従って起床するスケジューラと、
前記複数のタスクにより使用され、前記グループ毎に所定の領域がスタック領域として設定された共有メモリと、
タスク毎のスタック使用量及び最大処理時間を記憶した記憶手段と、
を備え、
前記スケジューラは、前記複数のタスクのうち一のタスクを起床しようとする際に、前記起床しようとするタスクの最大処理時間が経過するまでに起床される予定の同一グループに属するタスクであって、前記起床しようとするタスクに割り込み可能なタスクを抽出し、該抽出したタスクのスタック使用量と前記起床しようとするタスクのスタック使用量を加算したスタック使用量が前記起床しようとするタスクの属するグループに設定されている前記スタック領域の容量を超える場合には、他グループに設定されている使用可能なスタック領域を探索することを特徴とする、
情報処理装置である。
【００１９】
この本発明の第３の態様によれば、メモリ領域を効率良く使用すると共に、スタック領域のオーバーフロー等の不都合を防止することができる。
【００２０】
本発明の第１ないし第３の態様において、
前記スケジューラはリアルタイムオペレーティングシステムの一機能であり、
前記複数のタスクは、強制終了できないタスクであるものとしてもよい。
【００２１】
本発明の第１ないし第３の態様において、
前記起床しようとするタスクに割り込み可能なタスクは、前記起床しようとするタスクよりも優先度が高いタスクであるものとしてもよい。
【発明の効果】
【００２２】
本発明によれば、メモリ領域を効率良く使用すると共に、スタック領域のオーバーフロー等の不都合を防止することが可能な情報処理装置を提供することができる。
【図面の簡単な説明】
【００２３】
【図１】本発明の第１実施例に係る情報処理装置１のシステム構成例である。
【図２】対象タスクの起床が中止されない場面を模式的に示す図である。
【図３】対象タスクの起床が中止される場面を模式的に示す図である。
【図４】第１実施例のオペレーティングシステム１２により実行される特徴的な処理の流れを示すフローチャートである。
【図５】本発明の第２実施例に係る情報処理装置２、及び本発明の第３実施例に係る情報処理装置３のシステム構成例である。
【図６】第３実施例のオペレーティングシステム１２により実行される特徴的な処理の流れを示すフローチャートである。
【発明を実施するための形態】
【００２４】
以下、本発明を実施するための形態について、添付図面を参照しながら実施例を挙げて説明する。
【実施例】
【００２５】
＜第１実施例＞
［構成］
以下、図面を参照し、本発明の第１実施例に係る情報処理装置１について説明する。図１は、本発明の第１実施例に係る情報処理装置１のシステム構成例である。情報処理装置１は、主要な構成として、ＣＰＵ（Central  Processing  Unit）１０と、メモリ２０と、を備える。
【００２６】
ＣＰＵ１０は、例えば、命令デコーダ、各種レジスタ、演算回路、キャッシュメモリ、フラッシュメモリ、プログラムカウンタ等を有するシングルコアＣＰＵである。ＣＰＵ１０は、図示しないＲＯＭ（Read  Only  Memory）等に格納された命令を実行することによりオペレーティングシステム１２を機能させる。オペレーティングシステム１２は、ＯＳＥＫ  ＯＳその等のリアルタイムオペレーティングシステム（RTOS；Real-time  operating  system）である。オペレーティングシステム１２は、カーネルやスケジューラの機能を備える。スケジューラは、プリエンプティブスケジューリングを実行し、複数のタスクを所定のスケジュールに従って起床させる。また、優先度の高いタスクによる、優先度の低いタスクへの割り込み（タスクの切り替え）を発生させるための制御等を行う。本実施例における優先度は、予めタスクに固有の値として定められている。
【００２７】
また、ＣＰＵ１０は、オペレーティングシステム１２上で、図示しないＥＥＰＲＯＭ（Electrically  Erasable  and  Programmable  Read  Only  Memory）等のプログラムメモリに格納された命令を処理することにより、複数のタスクＡ、Ｂ、Ｃ、Ｄ…を実行する。
【００２８】
ここで、タスクとは、ある程度の機能的まとまりを有する一群の命令をいい、その命令の数や長さ等に特段の制限はない。本発明におけるタスクは、いわゆる制約タスクであり、オペレーティングシステム１２によって強制終了できないように設定されている。
【００２９】
また、ＣＰＵ１０は、レジスタ等の記憶装置上に、最大処理時間テーブル１５と、スタック使用量テーブル１６と、起床予定タスクキュー１７とを保持している。
【００３０】
最大処理時間テーブル１５は、各タスクが起床された際の最大処理時間を規定しており、スタック使用量テーブル１６は、各タスクが使用するスタックの量を規定している。各タスクの最大処理時間は、実験やシミュレーション等によって定められる固定値であってもよいし、情報処理装置１が実際に稼働している間に学習された学習値であってもよい。各タスクが使用するスタックの量は、タスクの内容に応じて予め導出される。
【００３１】
起床予定タスクキュー１７は、タスクの起床スケジュールを表現しており、オペレーティングシステム１２によって随時書き換えられる。
【００３２】
メモリ２０は、例えばＲＡＭ（Random  Access  Memory）である。メモリ２０には、各タスクによって使用される通常領域２０Ａの他、スタックとして使用されるスタック領域２０Ｂが予め設定されている。
【００３３】
ここで、スタックは、最後に入力したデータが先に出力される（Last  In  First  Out）データ構造であり、メモリ２０上に固定の基点と可変のサイズを有している。図示しないレジスタ等には、スタックポインタが設定されており、このスタックポインタは、スタック内で最も後で参照された位置を指している。スタック長がゼロのとき、スタックポインタはスタックの基点を指す。
【００３４】
スタックに対して実施可能な操作は、スタックポインタが指す場所にデータを格納し、データ分スタックポインタをずらす操作と、スタックポインタが指している箇所のデータを取り出し、スタックポインタをデータ分ずらす操作であり、これらの操作はタスクによって実行される。本実施例は、スタックはタスクの終了時に解放され、スタックポインタはスタックの基点に戻される。
【００３５】
［特徴的な処理］
以下、本実施例のオペレーティングシステム１２により実行される特徴的な処理の流れについて説明する。本実施例のオペレーティングシステム１２は、複数のタスクＡ、Ｂ、Ｃ、Ｄ、…を所定のスケジュールに従って起床する。所定のスケジュールに係るアルゴリズムについては特段の制限は存在せず、如何なるものを用いてもよい。
【００３６】
また、オペレーティングシステム１２は、あるタスクを起床しようとする際に、当該起床しようとするタスク（以下、「対象タスク」と称する）の最大処理時間及びスタック使用量を最大処理時間テーブル１５及びスタック使用量テーブル１６から取得し、対象タスクの最大処理時間内に起床する予定の他タスクのうち対象タスクよりも優先度の高いタスクを抽出する。
【００３７】
そして、該抽出した他タスクのスタック使用量と、対象タスクのスタック使用量を加算したスタック使用量がスタック領域２０Ｂの容量を超える場合には、対象タスクの起床を中止する。起床が中止された対象タスクは、例えば起床予定タスクキュー１７の末尾に再登録される。
【００３８】
図２は、対象タスクの起床が中止されない場面を模式的に示す図である。図示するように、対象タスクの最大処理時間内に起床する予定の、対象タスクよりも優先度が高い他タスクのスタック使用量と、対象タスクのスタック使用量を加算したスタック使用量が、スタック領域２０Ｂの容量以下である場合には、対象タスクは起床される。なお、図２に示すように、対象タスクの最大処理時間内に、他タスクが処理時間を重複させずに複数回起床予定である場合、各回における対象タスクと他タスクのスタック使用量の和について、スタック領域２０Ｂの容量と比較する。
【００３９】
図３は、対象タスクの起床が中止される場面を模式的に示す図である。図示するように、対象タスクの最大処理時間内に起床する予定の、対象タスクよりも優先度が高い他タスクのスタック使用量と、対象タスクのスタック使用量を加算したスタック使用量が、スタック領域２０Ｂの容量を超える場合には、対象タスクは起床されない。なお、図３に示すように、対象タスクの最大処理時間内に、他タスクが処理時間を重複させて起床予定である場合、対象タスクと他タスクが重複して起床されている期間におけるスタック使用量の和について、スタック領域２０Ｂの容量と比較する。
【００４０】
この場合、対象タスクは、起床予定タスクキュー１７の末尾に再登録される（キューイング）。そして、再度起床順が回ってきたときに、上記と同様に起床又は起床中止の判断がなされることになる。
【００４１】
図４は、本実施例のオペレーティングシステム１２により実行される特徴的な処理の流れを示すフローチャートである。
【００４２】
まず、オペレーティングシステム１２は、起床予定タスクキュー１７に従って、タスクの起床タイミングが到来するまで待機する（Ｓ１００）。
【００４３】
タスクの起床タイミングが到来すると、最大処理時間テーブル１５を参照し、起床しようとするタスク（対象タスク）の最大処理時間を取得する（Ｓ１０２）。
【００４４】
そして、起床予定タスクキュー１７を参照し、現在から対象タスクの最大処理時間が経過するまでの間に起床する予定のタスクを抽出し（Ｓ１０４）、次いで抽出したタスクから対象タスクよりも優先度の高いタスクを抽出する（Ｓ１０６）。なお、Ｓ１０４とＳ１０６の処理順はいずれが先であっても構わない。
【００４５】
現在から対象タスクの最大処理時間が経過するまでの間に起床する予定の、対象タスクよりも優先度の高いタスクを抽出すると、スタック使用量テーブル１６を参照し、現在から対象タスクの最大処理時間が経過するまでの全時刻において、タスクのスタック使用量の和がスタック領域２０Ｂの容量を超えるか否かを判定する（Ｓ１０８）。
【００４６】
タスクのスタック使用量の和がスタック領域２０Ｂの容量以下である場合は、対象タスクを起床する（Ｓ１１０）。一方、タスクのスタック使用量の和がスタック領域２０Ｂの容量を超える場合は、対象タスクを起床せず、起床予定タスクキュー１７の末尾に再登録する（Ｓ１１２）。
【００４７】
以上説明した本実施例の情報処理装置１によれば、あるタスクを起床しようとする際に、当該起床しようとする対象タスクの最大処理時間内に起床する予定の他タスクのうち優先度の高いタスクを抽出し、抽出した他タスクのスタック使用量と、対象タスクのスタック使用量を加算したスタック使用量がスタック領域２０Ｂの容量以下である場合に対象タスクを起床し、スタック領域２０Ｂの容量を超える場合には、対象タスクの起床を中止するため、メモリ２０をタスク間で適切に共用することができる。
【００４８】
この結果、メモリ２０のメモリ領域を効率良く使用すると共に、スタック領域２０Ｂのオーバーフロー等の不都合を防止することができる。
【００４９】
＜第２実施例＞
［構成］
以下、図面を参照し、本発明の第２実施例に係る情報処理装置２について説明する。図５は、本発明の第２実施例に係る情報処理装置２のシステム構成例である。情報処理装置２は、主要な構成として、ＣＰＵ１０と、メモリ２０と、を備える。以下、第１実施例との重複部分については、適宜説明を省略する。
【００５０】
本実施例に係るＣＰＵ１０は、オペレーティングシステム１２上で図示しないＥＥＰＲＯＭ等のプログラムメモリに格納された命令を処理することにより、グループ化された複数のタスクＡ＃ｎ、Ｂ＃ｎ、Ｃ＃ｎ、Ｄ＃ｎ…（ｎ＝１、２、…）を実行する。以下、「＃」の後の符号はグループ番号を示すものとする。
【００５１】
起床予定タスクキュー１７は、グループ毎にタスクの起床スケジュールを表現しており、オペレーティングシステム１２によって随時書き換えられる。
【００５２】
メモリ２０は、例えばＲＡＭ（Random  Access  Memory）である。メモリ２０には、各タスクによって使用される通常領域２０Ａの他、スタックとして使用されるスタック領域２０Ｂ＃ｎ（ｎ＝１、２、…）が、上記タスクのグループ毎に予め設定されている。なお、通常領域２０Ａについてもグループ毎に設定されてよいが、これについては説明を省略する。
【００５３】
［特徴的な処理］
以下、本実施例のオペレーティングシステム１２により実行される特徴的な処理の流れについて説明する。本実施例のオペレーティングシステム１２は、複数のタスクＡ＃ｎ、Ｂ＃ｎ、Ｃ＃ｎ、Ｄ＃ｎ…（ｎ＝１、２、…）を、グループ毎に定められた所定のスケジュールに従って起床する。
【００５４】
また、オペレーティングシステム１２は、あるタスクを起床しようとする際に、当該起床しようとするタスク（以下、「対象タスク」と称する）の最大処理時間及びスタック使用量を最大処理時間テーブル１５及びスタック使用量テーブル１６から取得し、対象タスクと同一グループに属し、対象タスクの最大処理時間内に起床する予定の他タスクのうち対象タスクよりも優先度の高いタスクを抽出する。
【００５５】
そして、該抽出した他タスクのスタック使用量と、対象タスクのスタック使用量を加算したスタック使用量がスタック領域２０Ｂ＃ｎの容量を超える場合には、対象タスクの起床を中止する。起床が中止された対象タスクは、例えば起床予定タスクキュー１７の末尾に再登録される。
【００５６】
すなわち、本実施例のオペレーティングシステム１２は、タスクの各グループについて、第１実施例において図４のフローチャートに即して説明した処理と同様の処理を行う。処理の詳細については説明を省略する。
【００５７】
以上説明した本実施例の情報処理装置２によれば、あるタスクを起床しようとする際に、当該起床しようとする対象タスクと同一グループに属し、対象タスクの最大処理時間内に起床する予定の他タスクのうち優先度の高いタスクを抽出し、抽出した他タスクのスタック使用量と、対象タスクのスタック使用量を加算したスタック使用量がスタック領域２０Ｂの容量以下である場合に対象タスクを起床し、スタック領域２０Ｂの容量を超える場合には、対象タスクの起床を中止するため、メモリ２０をタスク間で適切に共用することができる。
【００５８】
この結果、メモリ２０のメモリ領域を効率良く使用すると共に、スタック領域２０Ｂのオーバーフロー等の不都合を防止することができる。
【００５９】
＜第３実施例＞
［構成］
以下、図面を参照し、本発明の第３実施例に係る情報処理装置３について説明する。本実施例に係る情報処理装置３は、構成において第２実施例に係る情報処理装置２と共通するため、図５を参照することとして、各構成要素についての説明を省略する。
【００６０】
［特徴的な処理］
以下、本実施例のオペレーティングシステム１２により実行される特徴的な処理の流れについて説明する。本実施例のオペレーティングシステム１２は、複数のタスクＡ＃ｎ、Ｂ＃ｎ、Ｃ＃ｎ、Ｄ＃ｎ…（ｎ＝１、２、…）を、グループ毎に定められた所定のスケジュールに従って起床する。
【００６１】
また、オペレーティングシステム１２は、あるタスクを起床しようとする際に、当該起床しようとするタスク（以下、「対象タスク」と称する）の最大処理時間及びスタック使用量を最大処理時間テーブル１５及びスタック使用量テーブル１６から取得し、対象タスクと同一グループに属し、対象タスクの最大処理時間内に起床する予定の他タスクのうち対象タスクよりも優先度の高いタスクを抽出する。
【００６２】
そして、該抽出した他タスクのスタック使用量と、対象タスクのスタック使用量を加算したスタック使用量がスタック領域２０Ｂ＃ｎの容量よりを超える場合には、他グループのスタック領域２０Ｂ＃ｋ（ｎ≠ｋ）を使用可能かどうか検討する。その結果、他グループのスタック領域２０Ｂを使用可能である場合は、対象タスクの起床を中止せず、他グループのスタック領域２０Ｂを使用して対象タスクを起床する。他グループのスタック領域２０Ｂを使用可能でない場合は、第１又は第２実施例と同様、対象タスクの起床を中止する。起床が中止された対象タスクは、例えば起床予定タスクキュー１７の末尾に再登録される。
【００６３】
図６は、本実施例のオペレーティングシステム１２により実行される特徴的な処理の流れを示すフローチャートである。本フローは、タスクの各グループについてそれぞれ実行される。
【００６４】
まず、オペレーティングシステム１２は、起床予定タスクキュー１７に従って、タスクの起床タイミングが到来するまで待機する（Ｓ２００）。
【００６５】
タスクの起床タイミングが到来すると、最大処理時間テーブル１５を参照し、起床しようとするタスク（対象タスク）の最大処理時間を取得する（Ｓ２０２）。
【００６６】
そして、起床予定タスクキュー１７を参照し、対象タスクと同一グループに属し、現在から対象タスクの最大処理時間が経過するまでの間に起床する予定のタスクを抽出し（Ｓ２０４）、次いで抽出したタスクから対象タスクよりも優先度の高いタスクを抽出する（Ｓ２０６）。なお、Ｓ２０４とＳ２０６の処理順はいずれが先であっても構わない。
【００６７】
対象タスクと同一グループに属し、現在から対象タスクの最大処理時間が経過するまでの間に起床する予定の、対象タスクよりも優先度の高いタスクを抽出すると、スタック使用量テーブル１６を参照し、現在から対象タスクの最大処理時間が経過するまでの全時刻において、タスクのスタック使用量の和がスタック領域２０Ｂの容量を超えるか否かを判定する（Ｓ２０８）。
【００６８】
タスクのスタック使用量の和がスタック領域２０Ｂの容量以下である場合は、対象タスクを起床する（Ｓ２１０）。
【００６９】
一方、タスクのスタック使用量の和がスタック領域２０Ｂの容量を超える場合は、他グループｋを、対象タスクの属するグループｎを避けるようにグループ１から順に選択し（Ｓ２１２、Ｓ２１４、Ｓ２１６、Ｓ２２６、Ｓ２２８）、選択した他グループｋに属するタスクについて、現在から対象タスクの最大処理時間が経過するまでの間に起床する予定のタスクを抽出し（Ｓ２１８）、次いで抽出したタスクから対象タスクよりも優先度の高いタスクを抽出する（Ｓ２２０）。
【００７０】
他グループｋに属し、現在から対象タスクの最大処理時間が経過するまでの間に起床する予定の、対象タスクよりも優先度の高いタスクを抽出すると、スタック使用量テーブル１６を参照し、現在から対象タスクの最大処理時間が経過するまでの全時刻において、タスクのスタック使用量の和がスタック領域２０Ｂの容量を超えるか否かを判定する（Ｓ２２２）。
【００７１】
タスクのスタック使用量の和がスタック領域２０Ｂの容量以下である場合は、Ｓ２１２等において選択した他グループｋのスタック容量２０Ｂ＃ｋを使用して、対象タスクを起床する（Ｓ２２４）。
【００７２】
全ての他グループについても、現在から対象タスクの最大処理時間が経過するまでの全時刻において、タスクのスタック使用量の和がスタック領域２０Ｂの容量を超えると判定された場合は、対象タスクを起床せず、起床予定タスクキュー１７の末尾に再登録する（Ｓ２３０）。
【００７３】
以上説明した本実施例の情報処理装置３によれば、あるタスクを起床しようとする際に、当該起床しようとする対象タスクと同一グループに属し、対象タスクの最大処理時間内に起床する予定の他タスクのうち優先度の高いタスクを抽出し、抽出した他タスクのスタック使用量と、対象タスクのスタック使用量を加算したスタック使用量がスタック領域２０Ｂの容量以下である場合に対象タスクを起床し、スタック領域２０Ｂの容量を超える場合には、他グループに設定されている使用可能なスタック領域を探索するため、メモリ２０をタスク間で更に適切に共用することができる。
【００７４】
この結果、メモリ２０のメモリ領域を効率良く使用すると共に、スタック領域２０Ｂのオーバーフロー等の不都合を防止することができる。
【００７５】
以上、本発明を実施するための最良の形態について実施例を用いて説明したが、本発明はこうした実施例に何等限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変形及び置換を加えることができる。
【符号の説明】
【００７６】
１、２、３  情報処理装置
１０  ＣＰＵ
１２  オペレーティングシステム
１５  最大処理時間テーブル
１６  スタック使用量テーブル
１７  起床予定タスクキュー
２０  メモリ
２０Ａ  通常領域
２０Ｂ、２０＃Ｂｎ  スタック領域
Ａ、Ｂ、Ｃ、Ｄ、Ａ＃ｎ、Ｂ＃ｎ、Ｃ＃ｎ、Ｄ＃ｎ  タスク
【図１】
2012093832.tif 000003
【図２】
2012093832.tif 000004
【図３】
2012093832.tif 000005
【図４】
2012093832.tif 000006
【図５】
2012093832.tif 000007
【図６】
2012093832.tif 000008