(57)【要約】    【課題】  タスクの起床遅延に起因する障害原因を究明するために必要となる繁雑な作業を削減するとともに、当該障害原因を特定するために必要となる時間を短縮することが可能となるリアルタイムＯＳを提供する。    【解決手段】  ハード制御タスクが実行を再開したときに、そのハード制御タスクに遅延許容時間が設定されているかどうかを、対象セマフォの構造体メンバpertimが“０”かどうかで判断する（ステップＳ１１）。その結果、遅延許容時間が設定されている（pertim!=0）場合には、現在時刻を取得し、その値と対象セマフォの構造体メンバocrtimの値から遅延時間を計算（現在時刻−ocrtim）する（ステップＳ１３）。そして、遅延時間が遅延許容時間（対象セマフォの構造体メンバpertimの値）を超えているかどうかを判断する（ステップＳ１４）。その結果、遅延時間が遅延許容時間を超えていた場合には、システムを異常停止状態として、遅延許容時間を超える遅延が発生したことをユーザに報告する（ステップＳ１６）。【選択図】    図３
2006350653.tif 000002
【特許請求の範囲】
【請求項１】
プリエンプティブな優先度ベース・スケジューリングでマルチタスキングを実現しているリアルタイムＯＳにおいて、
所定の同期用カーネルオブジェクトに対して、予め遅延許容時間を設定する設定手順と、
前記遅延許容時間が設定されたタスクに対して起床が指示された時刻である事象発生時刻を記録する記録手順と、
前記起床が指示されたタスクが処理を終了し、ユーザプログラムにリターンした時刻と前記記録された事象発生時刻から遅延時間を算出する算出手順と、
該算出された遅延時間が前記設定された遅延許容時間を超えているか否かを判定する判定手順と、
該判定の結果、前記遅延時間が前記遅延許容時間を超えていたときには、その旨をユーザに報知する報知手順と
を有することを特徴とするリアルタイムＯＳ。
【請求項２】
前記報知手順では、遅延許容時間を超える遅延が発生したこと、および、発生した遅延時間のうち、少なくとも一方を表示するための信号を出力することを特徴とする請求項１に記載のリアルタイムＯＳ。
【請求項３】
前記報知手順では、当該リアルタイムＯＳが組み込まれているシステムが備えている記憶手段上にエラーログ領域を確保し、該エラーログ領域に、遅延許容時間を超える遅延が発生したこと、および、発生した遅延時間のうち、少なくとも一方を示す情報を記録することを特徴とする請求項１に記載のリアルタイムＯＳ。
【請求項４】
当該リアルタイムＯＳが組み込まれているシステムを異常停止状態にする停止信号を出力する出力手順をさらに有することを特徴とする請求項１〜３のいずれかに記載のリアルタイムＯＳ。
【請求項５】
請求項１〜４のいずれかに記載のリアルタイムＯＳを格納した、コンピュータ読み取り可能な記憶媒体。
【請求項６】
請求項１〜４のいずれかに記載のリアルタイムＯＳを組み込んだ組み込みシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、リアルタイムＯＳに関し、特に、タスクの起床遅延を容易に把握できるようにしたリアルタイムＯＳに関する。
【背景技術】
【０００２】
リアルタイムＯＳ（Operating System）において、割り込み駆動のハードウェアを制御するプログラムを作成する場合、一般的には、以下のような構成のプログラムを作成することが多い。
【０００３】
すなわち、予め対象ハードウェアの割り込み処理ルーチンを登録し、またそのハードウェアを制御するタスク（以下、「ハード制御タスク」という）を起動しておく。起動されたハード制御タスクは、セマフォやイベントフラグなどの同期用ＯＳ機能を使って待機状態となる。例えばμITRON仕様ＯＳであれば、wai_sem()，wai_flg()などを利用する（例えば、特許文献１参照）。
【０００４】
割り込みが発生すると、まず登録してあった割り込み処理ルーチンが実行を開始し、最低限の処理を行なった後、ハード制御タスクを起床するために、セマフォやイベントフラグなどの同期用ＯＳ機能を使って、セマフォポストやイベントセットを実行する。例えばμITRON仕様ＯＳであれば、isig_sem()，iset_flg()などを利用する。
【０００５】
そして、次に割り込み処理ルーチンにより起床され、実行を再開したハード制御タスクが、発生した割り込みに対応したハードウェアの制御を行なう。
【０００６】
このような構成のプログラムを作成した場合、以下に示すような問題が起こる場合がある。
【０００７】
すなわち、タスクは、ハード制御タスク以外にも複数存在し、それらのタスクがハード制御タスクよりも優先度が高く、かつ実行可能状態（レディ状態）となっていることもある。そういった場合、割り込み処理ルーチンでセマフォポストやイベントセットを行なっても、すぐにハード制御タスクがディスパッチされない場合が起こり得る。これは、リアルタイムＯＳが通常、プリエンプティブな優先度ベース・スケジューリング（priority-based preemptive scheduling）を採用しているためである。こうして発生する遅延は、対象ハードウェアの仕様によりある程度は許容できても、ある閾値を越えると、対象ハードウェアが正しく動作しなくなるケースがほとんどである。プログラム全体を設計する段階で、こうした遅延の許容範囲を考慮して各処理タスクの優先度を決定するのであるが、見積りを誤り、実際の動作テストの段階で実は許容範囲を越えてしまうといった問題が発生することがある。こうした問題が発生すると、実際に起こる障害の症状から、問題の原因が上記遅延であることを特定することが困難な場合も多い。
【０００８】
従来、このような問題が発生すると、まず上記遅延が原因ではないかと推測し、次にその推測を基に、遅延が許容時間を超えることがあるかどうかを測定するルーチンを埋め込んだり、またはそうした測定を行なうデバッグツールを利用していた。
【特許文献１】特開２００２−２２９８０５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、障害の原因を特定するためわざわざ測定ルーチンを埋め込んだり、また測定用にデバッグツールを利用するといった作業は繁雑なものである。また、上記のように問題の原因が遅延であると推測するまでにも多くの試行錯誤が必要となりデバッグに時間のかかるケースも多い。
【００１０】
本発明は、この点に着目してなされたものであり、タスクの起床遅延に起因する障害原因を究明するために必要となる繁雑な作業を削減するとともに、当該障害原因を特定するために必要となる時間を短縮することが可能となるリアルタイムＯＳを提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記目的を達成するため、請求項１に記載のリアルタイムＯＳは、プリエンプティブな優先度ベース・スケジューリングでマルチタスキングを実現しているリアルタイムＯＳにおいて、所定の同期用カーネルオブジェクトに対して、予め遅延許容時間を設定する設定手順と、前記遅延許容時間が設定されたタスクに対して起床が指示された時刻である事象発生時刻を記録する記録手順と、前記起床が指示されたタスクが処理を終了し、ユーザプログラムにリターンした時刻と前記記録された事象発生時刻から遅延時間を算出する算出手順と、該算出された遅延時間が前記設定された遅延許容時間を超えているか否かを判定する判定手順と、該判定の結果、前記遅延時間が前記遅延許容時間を超えていたときには、その旨をユーザに報知する報知手順とを有することを特徴とする。
【発明の効果】
【００１２】
本発明によれば、所定のタスクを起床したものの、実際にそのタスクの実行が再開されるまでの遅延時間が、予め設定しておいた遅延許容時間を超えてしまった場合に、ユーザはその異常状況をすぐに把握できるので、その障害原因を究明するための煩雑な作業が必要なくなるとともに、その障害原因を特定する時間が短縮される。
【発明を実施するための最良の形態】
【００１３】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。
【００１４】
図１は、本発明の一実施の形態に係るリアルタイムＯＳが組み込まれた組み込み機器１の概略構成を示すブロック図である。
【００１５】
同図に示すように、組み込み機器１は、機器１全体の制御を行うＣＰＵ１１と、各種時間を計時するタイマ１２と、読み書き可能なメモリ（ＲＡＭ）１３と、読み出し専用メモリ（ＲＯＭ）１４と、ハードウェア的な操作を行うためのハードウェアキー（ＫＥＹ）１５と，液晶表示装置（ＬＣＤ）１６と、メモリカードやハードディスクなどの外部メモリ１７と、外部機器と接続するためのＩ／Ｏ１８と、各デバイス１１〜１８間の情報の伝送を行うバス１９とによって構成されている。
【００１６】
本実施の形態のリアルタイムＯＳは、ＲＯＭ１４に格納されている。なお、本実施の形態のリアルタイムＯＳは、μITRON4.0仕様ＯＳの機能を拡張したものである。
【００１７】
まず、割り込み処理の同期で利用する、ＯＳの同期オブジェクト、例えばセマフォやイベントフラグに、予め遅延許容時間を設定可能にしておく必要がある。セマフォやイベントフラグなどのオブジェクト、つまり、リアルタイムＯＳのカーネルで管理されるオブジェクト（カーネルオブジェクト）はそれぞれ、カーネル内部で、以下のような構造体の形式で管理される。
【００１８】
struct sem_cb {
UINT  isemcnt;          /* セマフォの資源数の初期値 */
UINT  maxsem;           /* セマフォの最大資源数 */
UINT  semcnt;           /* セマフォの現在資源値 */
．．．
RELTIM      pertim;           /* 遅延許容時間 */      /* <- 追加 */
SYSTIM      ocrtim;           /* 事象発生時刻 */      /* <- 追加 */
};
そして、各カーネルオブジェクト構造体に、遅延許容時間を設定するためのメンバpertimと、待機タスクを起床する事象が発生した時刻を記録するためのメンバocrtimを追加する。μITRON4.0仕様では、時間を表すデータ型は、相対時間が“RELTIM”、システム時刻が“SYSTIM”となっているので、pertimのデータ型を“RELTIM”、ocrtimのデータ型を“SYSTIM”としている。ただし、時間単位が、システム標準のものでは粒度が粗すぎるという場合には、時間単位をもっと細かい単位とし、さらにデータ型も独自のものを用いても構わない。
【００１９】
次に、上記遅延許容時間を設定する方法について説明する。
【００２０】
設定方法としては、以下のように、いくつかの方法が考えられる。
【００２１】
［１］プログラムの記述で行なう
（１.１） オブジェクト生成時に設定する
オブジェクト生成インタフェースcre_sem()，cre_flg()などのパラメータに遅延許容時間を追加する。そして、遅延許容時間を設定する場合には、その時間値をパラメータに設定する一方、遅延許容時間を設定しない場合には、無制限値（“０”など）をパラメータに設定する。
【００２２】
（１.２） 事象待機時に設定する
事象の発生を待つ際のインタフェースwai_sem()，wai_flg()などの代わりに、遅延許容時間をパラメータとして設定可能なインタフェースhwai_sem()，hwai_flg()などを追加する。そして、遅延許容時間を設定する場合には、その時間値をパラメータに設定して、hwai_sem()，hwai_flg()などを利用する一方、遅延許容時間を設定しない場合には、従来のインタフェースwai_sem()，wai_flg()などを利用する。
【００２３】
［２］プログラムとは独立した別ツールで行なう
カーネル内部で管理される各カーネルオブジェクト構造体のメンバpertimの値を設定する別ツールを用意し、ユーザはプログラム起動前にツールを利用して対象となるカーネルオブジェクトと遅延許容時間の値を指定することで設定する。
【００２４】
前記方法［１］は、ユーザが記述するプログラムに多少の変更を必要とするが、リアルタイムＯＳとユーザプログラム以外特に何も必要としない。それに対して方法［２］は、ユーザプログラムは従来の記述をまったく変更する必要がないものの、リアルタイムＯＳ以外に遅延許容時間設定用の別ツールが必要となる。遅延許容時間設定用ツールは、リアルタイムＯＳのシンボル情報から前記各カーネルオブジェクトのメモリ配置を把握し、指定されたカーネルオブジェクトの構造体メンバpertimの値を、指定された遅延許容時間に設定できるように実現すればよい。
【００２５】
上記方法のいずれを採用したとしても、ハード制御タスクが事象の発生を待つために待機状態になる際には、そのカーネルオブジェクト構造体のメンバpertimには適切な値が設定されていることになる。つまり、遅延許容時間が設定されている場合には、その時間値がメンバpertimに設定され、遅延許容時間が設定さていない場合には、無制限値がメンバpertimに設定されていることになる。なお、無制限値として、本実施の形態では“０”を採るようにしている。
【００２６】
次に、割り込み処理ルーチンとハード制御タスクが、その同期用にセマフォを用いた場合を例に挙げ、フローチャートを用いて、本実施の形態リアルタイムＯＳが実行する制御の処理の流れを説明する。なお、予め、割り込み処理ルーチンは対象割り込みで実行を開始するように登録され、同期用セマフォは初期値を“０”として生成され、ハード制御タスクは生成・起動されて、wai_sem()またはhwai_sem()により待機状態になっているものとする。なお、wai_sem()，hwai_sem()により待機状態となるまでの処理の流れは、従来のμITRON4.0仕様ＯＳでなされる処理の流れと異ならないので、その説明を省略する。ただし、待機状態から解放され、wai_sem()，hwai_sem()を呼び出したユーザプログラムに戻るまでに、後述する後処理が追加されることになる。
【００２７】
まず、対象割り込みの発生により処理を開始した割り込み処理ルーチンがハード制御タスクを起床するためにisig_sem()を呼び出した際の処理の流れを図１のフローチャートを用いて説明する。
【００２８】
同図において、まずステップＳ１では、指定されたセマフォに対して資源獲得を待っているタスクがあるかどうかを検査する。検査の結果、当該タスクがあった場合には、ステップＳ２からステップＳ３に進む一方、当該タスクがなかった場合には、ステップＳ２からステップＳ７に進む。本実施の形態では、ハード制御タスクがすでに待機状態になっているので、処理は、ステップＳ２からステップＳ３に進むことになる。
【００２９】
ステップＳ３では、遅延許容時間が設定されているかどうかを対象セマフォの構造体メンバpertimが“０”かどうかで判断する。そして、遅延許容時間が設定されている（pertim!=0）場合には、ステップＳ４からステップＳ５に進む一方、遅延許容時間が設定されていない（pertim==0）場合には、ステップＳ４からステップＳ６に進む。
【００３０】
ステップＳ５では、現在時刻を取得し、この取得した現在時刻を対象セマフォの構造体メンバocrtimに設定する。
【００３１】
続くステップＳ６では、待ち行列の先頭のタスクの待ち状態を解除し、レディキューに入れる。本実施の形態では、すでにハード制御タスクが待機状態になっているので、ハード制御タスクの待ち状態が解除され、レディ状態に遷移することになる。
【００３２】
一方、資源獲得を待っているタスクがないために、ステップＳ２からステップＳ７に進んだ場合には、対象セマフォの資源数を“１”加算する。
【００３３】
なお、前記ステップＳ６で、ハード制御タスクがレディ状態となっても、すぐにディスパッチされ実行が再開されるとは限らない。これは、レディ状態のより優先度の高いタスクが存在していたり、また同じ優先度であっても先にレディ状態になっているタスクがあったとすると、それらのタスクがレディ状態でなくなるまで、実行再開が遅延されるからである。
【００３４】
次に、このようなレディ状態の他のタスクがなくなり、ハード制御タスクが実行を再開したときの処理の流れを、図２のフローチャートを用いて説明する。
【００３５】
同図において、まずステップＳ１１では、遅延許容時間が設定されているかどうかを対象セマフォの構造体メンバpertimが“０”かどうかで判断する。そして、遅延許容時間が設定されている（pertim!=0）場合には、ステップＳ１２からステップＳ１３に進む一方、設定されていない（pertim==0）場合には、終了となって、wai_sem()，hwai_sem()を呼び出したユーザプログラムにリターンする。
【００３６】
ステップＳ１３では、現在時刻を取得し、その値と対象セマフォの構造体メンバocrtimの値から遅延時間を計算（現在時刻−ocrtim）する。
【００３７】
続くステップＳ１４では、遅延時間が遅延許容時間（対象セマフォの構造体メンバpertimの値）を超えているかどうかを判断する。そして、遅延時間が遅延許容時間を超えていた場合には、ステップＳ１５からステップＳ１６に進む一方、遅延時間が遅延許容時間以下だった場合には、終了となり、ユーザプログラムにリターンする。
【００３８】
ステップＳ１６では、システムを異常停止状態として、遅延許容時間を超える遅延が発生したことをユーザに報告する。
【００３９】
ステップＳ１６の処理に関しては、システムを異常停止される前に、前記ＬＣＤ１６に、遅延許容時間を超える遅延の発生を知らせるメッセージや遅延時間情報を表示し、あるいは、前記ＲＡＭ１３や外部メモリ１７上にエラーログ領域を確保して、そこに遅延許容時間を超える遅延の発生を知らせる情報や遅延時間情報を記録し、その後、異常停止させてるようにしてもよい。また、デバッガを利用してプログラムを実行させているような場合には、異常停止の代わりに、プログラムを一時停止し、デバッガに制御を戻すことで、遅延許容時間を超える遅延が発生したことをデバッガ操作中のユーザに知らせるようにすればよい。
【００４０】
また、遅延許容時間を超える遅延が発生した場合にシステムを停止させずに、異常状態であってもユーザプログラムを継続実行したい場合も考えられる。このような場合には、ステップＳ１６で異常停止させずに、エラー状態であることを示すエラーコードをリターン値としてwai_sem()，hwai_sem()を呼び出しユーザプログラムにリターンすればよい。この場合、wai_sem()，hwai_sem()を呼び出すハード制御タスクのプログラムにおいて、リターン値が上記エラー状態であったかどうかを検査するコードおよびエラー状態であった場合のエラー処理コードを記述しておく必要がある。また、このときエラー情報として遅延時間の値を知りたいという場合には、hwai_sem()のパラメータに遅延時間を返すリターンパラメータを追加し、ステップＳ１６で遅延時間を設定するようにしてもよい。
【００４１】
このように、本実施の形態では、リアルタイムＯＳが提供するセマフォやイベントフラグなどの同期機構に、遅延時間を計測する機能を組み込むことで、予め設定した遅延許容時間を越える遅延が発生した際に、その異常状況をユーザまたはユーザプログラムに即座に知らせることが可能となる。
【００４２】
なお、上述した実施の形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システムまたは装置に供給し、そのシステムまたは装置のコンピュータ（またはＣＰＵやＭＰＵ）が記憶媒体に格納されたプログラムコードを読出し実行することによっても、本発明の目的が達成されることは言うまでもない。
【００４３】
この場合、記憶媒体から読出されたプログラムコード自体が本発明の新規な機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
【００４４】
プログラムコードを供給するための記憶媒体としては、たとえば、フレキシブルディスク、ハードディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＤＶＤ−ＲＷ、ＤＶＤ＋ＲＷ、磁気テープ、不揮発性のメモリカード、ＲＯＭなどを用いることができる。また、通信ネットワークを介してサーバコンピュータからプログラムコードが供給されるようにしてもよい。
【００４５】
また、コンピュータが読出したプログラムコードを実行することにより、上述した実施の形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているＯＳなどが実際の処理の一部または全部を行い、その処理によって上述した実施の形態の機能が実現される場合も含まれることは言うまでもない。
【００４６】
さらに、記憶媒体から読出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行い、その処理によって上述した実施の形態の機能が実現される場合も含まれることは言うまでもない。
【図面の簡単な説明】
【００４７】
【図１】本発明の一実施の形態に係るリアルタイムＯＳが組み込まれた組み込み機器の概略構成を示すブロック図である。
【図２】対象割り込みの発生により処理を開始した割り込み処理ルーチンがハード制御タスクを起床するためにisig_sem()を呼び出した際の処理の流れを示したフローチャートである。
【図３】他の優先度の高いレディ状態のタスクがなくなり起床されたハード制御タスクの実行を再開しユーザプログラムにリターンするときの処理の流れを示したフローチャートである。
【符号の説明】
【００４８】
１  組み込み機器
１１  ＣＰＵ
１２  タイマ
１３  ＲＡＭ
１４  ＲＯＭ
１５  ハードウェアキー
１６  液晶表示装置
１７  外部メモリ
１８  Ｉ／Ｏ
１９  バス
【図１】
2006350653.tif 000003
【図２】
2006350653.tif 000004
【図３】
2006350653.tif 000005