(57)【特許請求の範囲】
【請求項１】
コントローラがＯＳとアプリケーションとを実行するようにした計算機システムであって、
前記アプリケーションは複数のプログラムを備え、
前記ＯＳは、
プログラムの実行優先度、プログラムの安全に関連する属性、そして、プログラムの種類に基づいて、前記複数のプログラムの中から実行権を与えるべきプログラムを設定し、
前記複数のプログラムのうち前記実行優先度が高いプログラムに前記実行権を与え、
前記プログラムの実行優先度が同等である場合には、前記安全に関連する属性を有するプログラムに前記実行権を与え、
前記安全に関連する属性が同等である場合には、特定の種類のプログラムに前記実行権を与える
計算機システム。
【請求項２】
前記アプリケーションは複数のプログラムとして、タイムイベントハンドラとタスクとを備え、
前記ＯＳは、前記安全に関連する属性が同等である場合には、前記タスクより前記タイムイベントハンドラを優先して前記実行権を与える
請求項１記載の計算機システム。
【請求項３】
前記アプリケーションは複数のプログラムとして、タイムイベントハンドラとタスクとを備え、
前記ＯＳは、さらに、
前記タイムイベントハンドラとタスクとの実行優先度が同等であり、前記タスクが前記タイムイベントハンドラよりも前記安全に関連する属性を有している場合には、前記タイムイベントハンドラよりも前記タスクを優先して前記実行権を与える
請求項１記載の計算機システム。
【請求項４】
前記アプリケーションは、複数のドメインを備え、
前記複数のプログラムの夫々は、前記複数のドメインの何れかに属し、
前記複数のプログラムは、少なくとも、タイムイベントハンドラを備え、
前記複数のドメインは、第１のドメインと第２のドメインとを備え、
前記第１のドメインは、安全基準に関連する属性を備えるタイムイベントハンドラを備え、
前記第２のドメインは、第１のドメインに属するタイムイベントハンドラ以外のタイムイベントハンドラを備える
請求項１記載の計算機システム。
【請求項５】
コントローラがＯＳを実行して複数のプログラムを備えるアプリケーションを制御する計算機システムの制御方法であって、
前記ＯＳは、プログラムの実行優先度、プログラムの安全に関連する属性、そして、プログラムの種類に基づいて、前記複数のプログラムの中から実行権を与えるべきプログラムを設定し、
前記複数のプログラムのうち前記実行優先度が高いプログラムに前記実行権を与え、
前記プログラムの実行優先度が同等である場合には、前記安全に関連する属性を有するプログラムに前記実行権を与え、
前記安全に関連する属性が同等である場合には、特定の種類のプログラムに前記実行権を与える
計算機システムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は計算機システム及び計算機システムの制御方法に係り、詳しくは、リアルタイムＯＳによって動作し、組み込みシステムとして適用される計算機システム、及び、計算機システムの制御方法に関する。
【背景技術】
【０００２】
組み込みシステムのＯＳとしてリアルタイムＯＳが知られている。リアルタイムＯＳは、タスクを並行に実行するために、タスクに優先度を設定し、優先度に基づいて複数のタスクを実行する順序を制御している（スケジューリング）。リアルタイムＯＳには、リアルタイム性が必要な処理を実行するための機能の１つとして、設定時間が経過するとハンドラを起動する機能が知られている。このハンドラは、「タイムイベントハンドラ」と呼ばれ、タイムイベントハンドラは予め定められた処理を実行する。リアルタイムＯＳは、リアルタイム性を確保するため、起動した全てのタイムイベントハンドラの実行が終了するまで、次のタスクの実行を遅延させる。
【０００３】
タイムイベントハンドラを実行させるリアルタイムＯＳを備える計算機システムとして、特許文献１に記載されたものが存在する。特許文献１は、時間管理ハンドラの処理効率を向上させ、リアルタイム処理の性能を向上させた情報処理装置を提供するために、時間管理ハンドラ定義情報テーブルに定義された時間管理ハンドラが起動されて起動アドレスがハンドラ起動バッファに転送され、この起動アドレスに対応した時間管理ハンドラの優先度をハンドラ優先度テーブルにより判別し、優先度の高い時間管理ハンドラから順次実行する情報処理装置を開示している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００１−５６７７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
近年、組み込みシステムの分野において、機能安全規格が重要視されているものの、従来のＯＳでは、リアルタイム処理によって機能安全が損なわれるという課題がある。そこで、本発明は、ＯＳのリアルタイム処理を確保しつつ、機能安全のための処理の遅延を防止可能な計算機システム、及び、計算機システムの制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
前記目的を達成するために、本発明は、コントローラがＯＳとアプリケーションとを実行するようにした計算機システムであって、前記アプリケーションは複数のプログラムを備え、前記ＯＳは、プログラムの実行優先度、プログラムの機能安全に関連する属性、そして、プログラムの種類に基づいて、前記複数のプログラムの中から実行権を与えるべきプログラムを設定することを特徴とする。
【発明の効果】
【０００７】
本発明によれば、ＯＳがアプリケーションプログラムのスケジューリングの際に、プログラムの安全基準に関連する属性を参照するために、ＯＳのリアルタイム処理を確保しつつ、機能安全のための処理の遅延を防止することができる。
【図面の簡単な説明】
【０００８】
【図１】本発明の一実施形態に係る計算機システムのソフトウェアモジュールを示す機能ブロック図である。
【図２】前記計算機システムのハードウェアブロック図である。
【図３】図１に示すソフトウェアモジュールのレディキュー操作モジュールを示す機能ブロック図である。
【図４】図１に示すソフトウェアモジュールのスケジューリング処理モジュールを示す機能ブロック図である。
【図５】図１に示すソフトウェアモジュールのドメインカーネルオブジェクトコントロールブロックのデータ構造を示すテーブルである。
【図６】図１に示すソフトウェアモジュールのタスクカーネルオブジェクトコントロールブロックのデータ構造を示すテーブルである。
【図７】図１に示すソフトウェアモジュールのタイムイベントハンドラカーネルオブジェクトコントロールブロックのデータ構造を示すテーブルである。
【図８】タイムイベントハンドラの起動処理の一例を示すフローチャートである。
【図９】レディキューへのプログラム追加処理の一例を示すフローチャートである。
【図１０】レディキューからのプログラム削除処理の一例を示すフローチャートである。
【図１１】レディキューの回転処理の一例を示すフローチャートである。
【図１２】スケジューリング処理の一例を示すフローチャートである。
【図１３】ディスパッチ処理の一例を示すフローチャートである。
【発明を実施するための形態】
【０００９】
以下、本発明に係る計算機システムの実施形態について説明する。図１に、本発明に係る計算機システムのソフトウェアモジュール（機能ブロック）を示す。計算機システムのソフトウェアモジュールは、アプリケーション１００とＯＳ１１０とに大別される。アプリケーション１００は、複数のドメインを備える。複数のドメイン夫々は、例えば、第１の種類のドメイン、又は、第２の種類のドメインのように区分けされている。ＯＳは、組み込みシステム用のリアルタイムＯＳ、具体的には、ＩＴＲＯＮ、ＴＲＯＮ Ｓａｆｅ Ｋｅｒｎｅｌ(商標)等であってよい。
【００１０】
アプリケーション１００は、第１の種類のドメインを、機能安全を目的として設計されたプログラムが帰属するドメインとし、第２の種類のドメインをそれ以外のプログラムが帰属するドメインとしている。便宜上、以後の説明において、前者の属性を持ったドメインを安全ドメインと呼び、後者のドメインを通常ドメインという。夫々のドメインは、タスク、タイムイベントハンドラ等のプログラムを含む。「安全」、特に、機能安全とは、人間、財産、環境などに危害を及ぼすリスクを、機能や装置の働きにより、許容可能なまでに低減するための手段である。
【００１１】
「安全」は、機能安全のように、規格によって定められるものに限定されない。機能安全のための規格として、例えば、自動車向けの安全規格(ISO 26262)があり、これは電気/電子（E/E）システム向けの汎用機能安全規格であるIEC 61508から派生したものとして知られている。ASIL（Automotive Safety Integrity Level）は、ISO 26262コンプライアンスの主要構成要素であり、安全要求にA、B、C、DのASILを割り当てている。アプリケーションの好適な形態は、機能安全規格の安全レベルによって認証を受けたものであるとし、このアプリケーションは、機能安全を目的とした安全プログラムと、それ以外の通常プログラムとを含んでいる。プログラムは、機能安全を目的とし、機能安全に関連する属性と、機能安全を目的としない属性に大別される。プログラムとして、タスクと、タイムイベントハンドラがある。タスクには安全処理を目的とした安全タスクと、通常処理を目的とした通常タスクがあり、タイムイベントハンドラにも同様に安全タイムイベントハンドラと通常タイムイベントハンドラとがある。なお、「安全」と「通常」の区別は相対的であってもよく、「通常」は機能安全のレベルが「安全」よりも低い機能安全レベルを含むようにしてもよい。
【００１２】
アプリケーション１００は１個以上の安全ドメイン１０１と、０個又は１個以上の通常ドメイン１０２を持つ。安全ドメイン１０１は少なくとも１つの安全タスク１０３を持ち、０個、或いは、１個以上の安全タイムイベントハンドラ１０５を持つ。通常ドメイン１０２は少なくとも１つの通常タスク１０４を持ち、０個、或いは、１個以上の通常タイムイベントハンドラ１０６を持つ。
【００１３】
ＯＳ１１０は、安全ドメイン用に安全ＡＰＩを処理する安全ＡＰＩモジュール１１１と、通常ドメイン用に通常ＡＰＩを処理する通常ＡＰＩモジュール１１２とを備える。安全ドメイン１０１と安全タスク１０３と安全タイムイベントハンドラ１０５は、安全ＡＰＩの呼び出し１０７によって、ＯＳ１１０の機能にアクセスして安全処理を行う。通常ドメイン１０２と通常タスク１０４と通常タイムイベントハンドラ１０６は、通常ＡＰＩの呼び出し１０８によってＯＳ１１０の機能を呼び出し、通常処理を行う。ＯＳ１１０は、タイムイベントハンドラの優先度に、各ドメインに設定された最高実行優先度を設定する。ドメインの最高実行優先度は、ドメイン内のプログラムが取りうる最高の実行優先度である。
【００１４】
ＯＳ１１０は、さらに、ユーザ定義基本処理モジュール１１３と基本処理モジュール１１４と、を備え、基本処理モジュール１１４は、次実行プログラム１１５と、実行中プログラム１１６と、タイムイベントキュー１１７を処理する。
【００１５】
基本処理モジュール１１４は、ハードウェアやコントロールブロック１３０から得られるデータを処理する。ユーザ定義基本処理モジュール１１３はＯＳ１１０のユーザが定義したＯＳの追加機能を処理する。基本処理モジュール１１４やユーザ定義基本処理モジュール１１３がこれらの処理以外の処理を行うことも可能である。
【００１６】
次実行プログラム１１５は、ＯＳ１１０によって、実行中プログラム１１６の次に実行権を与えられるプログラムである。実行権とは、ＣＰＵの使用時間が割り当てられ、決められた処理を実行できる権利を意味する。タイムイベントキュー１１７は、指定された時間後に起動するタイムイベントハンドラが起動時間順に並んだキューである。ＯＳ１１０は、カウントダウンを開始したタイムイベントハンドラをタイムイベントキュー１１７に挿入して管理する。起動時間が同じ安全タイムイベントハンドラ１０５と通常タイムイベントハンドラ１０６がある場合、安全タイムイベントハンドラ１０５の後ろに通常タイムイベントハンドラ１０６を追加する。起動時間が同じ安全タイムイベントハンドラ１０５が複数ある場合、カウントダウンを開始した順にキューに並ぶ。起動時間が同じ通常タイムイベントハンドラ１０６が複数ある場合、カウントダウンを開始した順にキューに追加される。
【００１７】
基本処理モジュール１１４はタイムイベント確認モジュール１１８とレディキュー操作モジュール１１９とスケジューリング処理モジュール１２０とディスパッチ処理モジュール１２１とカーネルオブジェクト操作モジュール１２２を備える。タイムイベント確認モジュール１１８は、タイムイベントキュー１１７を確認し、起動時間に到達したタイムイベントハンドラの状態を実行可能状態に変更する。レディキュー操作モジュール１１９は、各プログラムをレディキューに追加する等レディキューを操作する。レディキューとはそもそも、実行可能状態のプログラムが順番に繋がれたキューである。
【００１８】
スケジューリング処理モジュール１２０は、実行可能状態のプログラムの中から、次実行プログラム１１５を選択、決定、特定、或いは、指定するための処理を行う。ディスパッチ処理モジュール１２１は、スケジューリング処理モジュール１２０が選択した次実行プログラム１１５と実行中プログラム１１６が異なる場合、実行中プログラム１１６のコンテキストを保存し、次実行プログラム１１５のコンテキストをハードウェア、及び、ＯＳ１１０に設定し、実行中プログラム１１６を次実行プログラム１１５に変更し、プログラムの実行を開始する。コンテキストとは、プロセッサやレジスタなどのハードウェアの設定、及び、ＯＳの変数の設定のためのデータのことである。
【００１９】
カーネルオブジェクト操作モジュール１２２は、カーネルオブジェクトコントロールブロックを操作する。カーネルオブジェクトとは、ＯＳのカーネルで管理され、ＯＳが取り扱うプログラムの実行時の単位、即ち、ドメイン、タスク、タイムイベントハンドラを含んでいる。既述のとおり、カーネルオブジェクトは、安全モジュールと通常モジュールのどちらかに分類されている。ＯＳ１１０は、カーネルオブジェクトをカーネルオブジェクトコントロールブロックによって管理している。カーネルオブジェクトコントロールブロックには、ＯＳ１１０が取り扱うカーネルオブジェクトの管理情報が記録されている。
【００２０】
コントロールブロック１３０は、１個以上のドメインカーネルオブジェクトコントロールブロック１３１と、１個以上のタスクカーネルオブジェクトコントロールブロック１３２と、０個又は１個以上のタイムイベントハンドラカーネルオブジェクトコントロールブロック１３３を備える。
【００２１】
ドメインカーネルオブジェクトコントロールブロック１３１は、ドメインのカーネルオブジェクトコントロールブロックである。タスクカーネルオブジェクトコントロールブロック１３２は、タスクのカーネルオブジェクトコントロールブロックである。タイムイベントハンドラカーネルオブジェクトコントロールブロック１３３は、タイムイベントハンドラのカーネルオブジェクトコントロールブロックである。
【００２２】
図２に、計算機システムのハードウェアブロック構成の一例を示す図である。処理装置２００は、１個以上のＲＡＭ２１０と、１個以上のＲＯＭ２２０と、１個以上のＣＰＵ２３０と、１個以上の割込みコントローラ２４０と、１個以上のＩ／Ｏ２５０と、外部記憶装置２６０と、１個以上のタイマ２７０とを備えている。割込みコントローラ２４０は、周辺機器からの割り込み処理要求を受信してＣＰＵ２３０に割り込み信号を発生させ、ＯＳ１１０を実行するコントローラとしてのＣＰＵ２３０は、これによってタイムイベントハンドラを実行するようにしてもよい。
【００２３】
アプリケーションプログラム２２１は、アプリケーション１００のプログラムである。ＯＳプログラム２２２はＯＳ１１０のプログラムである。アプリケーションプログラム２２１とＯＳプログラム２２２は、起動時にＲＡＭ２１０に展開される。アプリケーションプログラム２２１とＯＳプログラム２２２は、ＣＰＵ２３０によって実行される。各機能を実現するプログラム等の情報は、メモリや、ハードディスク、ＳＳＤ（Solid State Drive）等の記録装置、又は、ＩＣ（Integrated Circuit）カード、ＳＤ（Secure Digital）カード、ＤＶＤ（Digital Versatile Disc）等の記録媒体に格納されてもよい。
【００２４】
図３に、レディキュー操作モジュール１１９の機能ブロックを示す。レディキュー操作モジュール１１９は、プログラム追加操作モジュール３００と、プログラム削除操作モジュール３１０と、レディキュー回転操作モジュール３２０を備えている。プログラム追加操作モジュール３００は、実行可能状態に遷移したプログラムをレディキューに追加する。タスクは、実行中プログラム（タスク）１１６がタスクの処理の開始のためにＡＰＩを呼ぶことと、ハードウェア資源をタスクが利用できるようになることによって、実行可能状態に遷移する。タイムイベントハンドラは、カウントダウン後起動時刻になった時点で実行可能状態に遷移する。
【００２５】
プログラム追加操作モジュール３００は、追加プログラム種別判定モジュール３０１と、タイムイベントハンドラ優先度セットモジュール３０２と、レディキュー追加モジュール３０３と、優先度比較モジュール３０４と、ドメイン内最高優先度プログラム種別判定モジュール３０５と、ドメイン内最高優先度プログラムセットモジュール３０６とを備えている。
【００２６】
追加プログラム種別判定モジュール３０１は、レディキューに追加するプログラムがタイムイベントハンドラであるかタスクであるかを判別する。タイムイベントハンドラ優先度セットモジュール３０２は、追加するタイムイベントハンドラの優先度に所属ドメインの最高優先度を設定する。レディキュー追加モジュール３０３は、追加プログラムをレディキューに追加する。優先度比較モジュール３０４は、レディキューに追加されたプログラムの優先度を、所属ドメインのドメイン内最高優先度プログラムの優先度と比較する。ドメイン内最高優先度プログラム種別判定モジュール３０５は、ドメイン内最高優先度プログラムのプログラム種別を判定する。ドメイン内最高優先度プログラムセットモジュール３０６はドメイン内最高優先度プログラムをレディキューに追加されたプログラムに変更する。
【００２７】
プログラム削除操作モジュール３１０は、レディキューからプログラムを削除する。プログラムの削除が必要な例は、プログラムが実行可能状態から待ち状態に遷移することと、プログラムが処理を終了することである。プログラム削除操作モジュール３１０は、プログラム削除モジュール３１１と、ドメイン内最高優先度プログラム判定モジュール３１２と、プログラム種別確認モジュール３１３と、レディキュー確認モジュール３１４から構成される。プログラム削除モジュール３１１は、削除するプログラムをレディキューから外す。ドメイン内最高優先度プログラム判定モジュール３１２は、削除するプログラムとドメイン内最高優先度プログラムが同一であるかを判定する。プログラム種別確認モジュール３１３は、削除するプログラムがタイムイベントハンドラであるかどうかを判定する。レディキュー確認モジュール３１４は、レディキューを確認し、ドメイン内最高優先度プログラム５１０（図５）を設定する。
【００２８】
レディキュー回転操作モジュール３２０は、レディキューの一番先頭のプログラムをレディキューから外し、レディキューの一番後ろにつなぐこと（レディキューの回転）によって、同一優先度の別のプログラムに実行権を移動させている。レディキュー回転操作モジュール３２０は、レディキュー回転モジュール３２１と、レディキュー確認モジュール３２２を備える。レディキュー回転モジュール３２１は、レディキューの回転を実行し、レディキュー確認モジュール３２２は、レディキューを確認し、ドメイン内最高優先度プログラム５１０をカーネルコントロールブロックに設定する。
【００２９】
図４は、スケジューリング処理モジュール１２０の機能ブロックの一例を示す。スケジューリング処理モジュール１２０は、各ドメインのドメイン内最高優先度プログラムと、現在の次実行プログラム１１５とを比較し、次に実行権を与えるプログラムを決定する。スケジューリング処理モジュール１２０は、ドメイン内最高優先度プログラム確認モジュール４０１と、優先度比較モジュール４０２と、安全比較モジュール４０３と、プログラム種別比較モジュール４０４とを備える。
【００３０】
ドメイン内最高優先度プログラム確認モジュール４０１は、ドメインに最高優先度プログラムがあるか否かを確認する。優先度比較モジュール４０２は、ドメインの最高優先度プログラムの優先度と次実行プログラム１１５の優先度を比較し、ドメインの最高優先度プログラムの優先度が高い場合には、次実行プログラム１１５をドメインの最高優先度プログラムに変更し、スケジューリング処理を終了する。
【００３１】
優先度比較モジュール４０２は、ドメインの最高優先度プログラムの優先度が次実行プログラム１１５の優先度より低い場合には、スケジューリング処理を終了する。優先度比較モジュール４０２は、ドメインの最高優先度プログラムの優先度が次実行プログラム１１５と同じ、又は、実質的に同じ（同等）の場合には安全比較モジュール４０３に処理を移行する。安全比較モジュール４０３は、ドメインの最高優先度プログラムの安全種別（プログラムが安全プログラムか、通常プログラムかの区別）と次実行プログラム１１５の安全種別を比較し、ドメインの最高優先度プログラムが安全プログラムであり、次実行プログラム１１５が通常プログラムある場合、次実行プログラム１１５をドメインの最高優先度プログラムに変更し、スケジューリング処理を終了する。即ち、プログラムがタスクかタイムイベントハンドラかに拘わらず、スケジューリングにおいては、安全プログラムが通常プログラムより優先される。ドメインの最高優先度プログラムと次実行プログラム１１５が共に安全プログラムであるか、又は、共に通常プログラムの場合には、安全比較モジュール４０３は、プログラム種別比較モジュール４０４に処理を移行する。
【００３２】
プログラム種別比較モジュール４０４は、ドメインの最高優先度プログラムのプログラム種別と次実行プログラム１１５のプログラム種別を比較し、ドメインの最高優先度プログラムがタイムイベントハンドラで次実行プログラム１１５がタスクの場合には、次実行プログラム１１５をドメインの最高優先度プログラムに変更する。ドメインの最高優先度プログラムがタスクで次実行プログラム１１５がタイムイベントハンドラの場合には、プログラム種別比較モジュール４０４は、次実行プログラム１１５をドメインの最高優先度プログラムに変更しない。即ち、タスクよりもタイムイベントハンドラが優先される。
【００３３】
プログラム種別比較モジュール４０４は、ドメインの最高優先度プログラムのプログラム種別と次実行プログラム１１５のプログラム種別が共にタスク、又は、タイムイベントハンドラである場合には、最初に実行可能になったプログラムの方に実行権を与えるようにしてもよい。
【００３４】
図５に、安全ドメイン１０１および通常ドメイン１０２のドメインカーネルオブジェクトコントロールブロック１３１の一例を示す。ドメインカーネルオブジェクトコントロールブロック１３１は、ドメインを一意に識別するためのドメインＩＤ５０１を備える。ドメイン状態５０２は、ドメインに実行可能状態（READY）にあること、ドメインが停止状態になることなど、ドメインの状態を示す。
【００３５】
安全フラグ５０３は、ドメインが安全ドメイン１０１か通常ドメイン１０２かを表す。安全フラグ５０３を確認することで、ＯＳ１１０は、タスクおよびタイムイベントハンドラが安全か通常かが（プログラムの属性：安全種別）判定できる。最高実行優先度５０４は、ドメインに所属するプログラムが取りうる最高の実行優先度を表す。数が小さい程実行優先権が高いことを示している。ＯＳ１１０はドメインに属するタイムイベントハンドラの実行優先度に、ドメインの最高実行優先度５０４を設定する。これによって、タイムイベントハンドラの処理のリアルタイム性が維持される。
【００３６】
通常ドメイン１０２の最高実行優先度５０４は、安全ドメイン１０１の最高実行優先度５０４より低い優先度でなければならない。最低実行優先度５０５は、ドメインに所属するプログラムが取りうる最低の実行優先度を表す。ユーザが、所属ドメインの最高実行優先度５０４より高い優先度をタスクの優先度に設定しようとすると、ＯＳ１１０はユーザにエラーを返し、タスクの優先度を変更しない。ユーザが、所属ドメインの最低実行優先度５０５より低い優先度をタスクの優先度に設定しようとした場合も、ＯＳ１１０はエラーを返し、優先度を変更しない。
【００３７】
タイムイベントハンドラレディキュー５０６は、実行可能状態のタイムイベントハンドラが起動順に並んだキューである。最高実行優先度タスクレディキュー５０７は、最高実行優先度５０４のタスクが実行可能状態に遷移した順に並んだキューである。第二実行優先度タスクレディキュー５０８は、最高実行優先度５０４の次に高い優先度の実行可能状態のタスクが実行可能状態に遷移した順に並んだキューである。最低実行優先度タスクレディキュー５０９は、最低実行優先度５０５のタスクが実行可能状態に遷移した順に並んだキューである。このようにタスクのレディキューは、タスクの優先度毎に存在する。
【００３８】
ＯＳ１１０は、ドメイン内最高優先度プログラム５１０に、ドメインに所属する実行可能状態のプログラムのうち、最も高い実行優先度を持つプログラムを設定する。最も高い実行優先度のプログラムは、タイムイベントハンドラレディキュー５０６が空でなければ、タイムイベントハンドラレディキュー５０６の先頭のタイムイベントハンドラになる。タイムイベントハンドラレディキュー５０６が空ならば、ドメイン内で最も高い実行優先度のタスクレディキュー(５０７〜５０９)の先頭のタスクになる。
【００３９】
図６に、安全タスク１０３、及び、通常タスク１０４のタスクカーネルオブジェクトコントロールブロック１３２の一例を示す。タスクカーネルオブジェクトコントロールブロック１３２、タスクを一意に識別するためのタスクＩＤ６０１を備える。所属ドメインＩＤ６０２は、タスクが所属しているドメインのドメインＩＤ５０１を表す。タスクが安全タスクか通常タスクかは、所属ドメインの安全フラグ５０３によって識別される。
【００４０】
タスク状態６０３は、タスクの状態を表す。タスクの状態は、実行可能状態（READY）と実行状態を含む。起動時優先度６０４は、タスクの生成時に指定される優先度である。タスクが起動された時、ＯＳ１１０は、タスクの実行優先度に起動時優先度６０４を設定する。ベース優先度６０５は、タスクの基本となる優先度を表す。ＯＳ１１０は、タスクの起動時に、ベース優先度６０５に起動時優先度６０４を設定する。ＯＳ１１０はタスクの実行時、ベース優先度６０５に基づいて、タスクの現在の優先度を一時的に変更することができる。ユーザは、ＯＳ１１０のＡＰＩによって、ベース優先度６０５を変更することができる。
【００４１】
現在優先度６０６は、タスクの現在の実行優先度を表す。通常、ＯＳ１１０は、タスクの現在優先度６０６にベース優先度６０５を設定する。ＯＳ１１０はタスクがハードウェア資源を操作している間、現在優先度６０６を一時的に変更することができる。ユーザが、起動時優先度６０４とベース優先度６０５と現在優先度６０６に、所属ドメインの最高実行優先度５０４より高い優先度を設定しようとすると、ＯＳ１１０はエラーを返し、優先度の値を変更しない。起動時優先度６０４とベース優先度６０５と現在優先度６０６に、所属ドメインの最低実行優先度５０５より低い優先度を設定しようとしても、ＯＳ１１０はエラーを返し、優先度の値を変更しない。
【００４２】
最大連続実行時間６０７は、タスクが連続実行できる最大の時間を表す。合計実行時間６０８は、タスクが起動してからの合計実行時間を表す。スタック６０９は、タスクが使用するメモリのスタックを表す。ディスパッチ処理で実行中プログラム１１６を切り替える際等、ＯＳ１１０は、スタック６０９にプログラムのコンテキストを保存する。
【００４３】
図７は、安全タイムイベントハンドラ１０５、及び、通常タイムイベントハンドラ１０６の、タイムイベントハンドラカーネルオブジェクトコントロールブロック１３３の一例を示す。タイムイベントハンドラカーネルオブジェクトコントロールブロック１３３は、タイムイベントハンドラを一意に識別するためのタイムイベントハンドラＩＤ７０１を備える。タイムイベントハンドラ属性７０３は、タイムイベントハンドラの属性を表す。タイムイベントハンドラ状態７０４は、タイムイベントハンドラの状態を表す。タイムイベントハンドラの状態は、実行可能状態（READY）と実行状態を含む。起動時刻７０５は、タイムイベントハンドラの起動時刻を表す。タイムイベントハンドラは、カウントダウン後システム時刻が起動時刻に到達することによって実行可能状態に移行する。タイムイベントハンドラ起動アドレス７０６は、タイムイベントハンドラが実行を開始するアドレスを表す。最大連続実行時間７０７は、タイムイベントハンドラが連続実行できる最大の時間を表す。現在優先度６０６は、タイムイベントハンドラの現在の実行優先度を表す。ＯＳ１１０は、タイムイベントハンドラの現在優先度６０６に、所属ドメインの最高実行優先度５０４を設定する。
【００４４】
図８は、タイムイベント確認モジュール１１８のタイムイベントハンドラの起動処理の一例を示すフローチャートである。ＯＳ１１０は、タイマ２７０の割込みを契機に、タイムイベント確認モジュール１１８を実行し、タイムイベントハンドラの起動処理を行う。  先ず、タイムイベントキュー１１７にタイムイベントハンドラが接続されているか否かを確認する(Ｓ８０１)。
【００４５】
次に、タイムイベント確認モジュール１１８は、タイムイベントキュー１１７の先頭のタイムイベントハンドラの起動時刻が現在のシステム稼働時間を経過しているか否かを確認し(Ｓ８０２)、これを否定するとフローチャートを終了する。タイムイベント確認モジュール１１８はＳ８０２を肯定すると、タイムイベントハンドラのハンドラ状態７０４を起動待ち状態から実行可能状態に変更する(Ｓ８０３)。そして、タイムイベント確認モジュール１１８はタイムイベントハンドラを所属ドメインのタイムイベントハンドラレディキュー５０６に追加されるようにする(Ｓ８０４)。その後、タイムイベント確認モジュール１１８は、タイムイベントハンドラをタイムイベントキュー１１７から外し(Ｓ８０５)、Ｓ８０１に移行する。ＯＳ１１０は、図８のフローチャートを所定時間毎に繰り返し実行する。図９以降のフローチャートでも同様である。
【００４６】
図９は、レディキュー操作モジュール１１９のレディキュー操作（プログラム追加）の一例を示すフローチャートである。レディキュー操作モジュール１１９は、次実行プログラム１１５を決定、或いは、選択するために、実行可能になったプログラムをレディキュー(５０６〜５０９)に追加する。ＯＳ１１０は、レディキュー操作モジュール１１９を実行し、プログムをレディキューに追加し、ドメイン内最高優先度プログラム５１０の更新が必要かを判定し、必要な場合にはこれを更新する。
【００４７】
先ず、追加プログラム種別判定モジュール３０１がレディキューに追加すべきプログラム（追加プログラム）がタイムイベントハンドラか否かを識別する(Ｓ９０１)。レディキュー追加モジュール３０３は、プログラムがタイムイベントハンドラでない場合、プログラム（タスク）の現在優先度６０６に基づいて、プログラムを所属ドメインの対応する優先度のレディキュー(５０７〜５０９)に追加する(Ｓ９０２)。
【００４８】
次に、優先度比較モジュール３０４は、追加プログラム（タスク）の現在優先度６０６がドメイン内最高優先度プログラム５１０より小さいかどうかを判定し(Ｓ９０３)、これが等しいか、或いは、大きい場合は処理を終了する。追加プログラム（タスク）の現在優先度６０６がドメイン内最高優先度のプログラム５１０の現在優先度６０６より小さい場合、ドメイン内最高優先度プログラムセットモジュール３０６は、ドメイン内最高優先度プログラム５１０を追加プログラムに変更し(Ｓ９０４)、処理を終了する。
【００４９】
追加プログラム種別判定モジュール３０１がＳ９０１で、追加プログラムがタイムイベントハンドラであると判定した場合、タイムイベントハンドラ優先度セットモジュール３０２は、追加プログラム（タイムイベントハンドラ）の現在優先度６０６に、所属ドメインの最高実行優先度５０４を設定する(Ｓ９０５)。その後、レディキュー追加モジュール３０３は、追加プログラムを所属ドメインのタイムイベントハンドラレディキュー５０６の最後尾に追加する(Ｓ９０６)。ドメイン内最高優先度プログラム種別判定モジュール３０５は、ドメイン内最高優先度プログラム５１０がタイムイベントハンドラであるかを判定し(Ｓ９０７)、タイムイベントハンドラである場合には、フローチャート処理を終了し、タイムイベントハンドラでない場合には、Ｓ９０４に移行する。
【００５０】
図１０は、レディキュー操作モジュール１１９における、レディキュー操作のさらに他の例（プログラム削除）を示すフローチャートである。ＯＳ１１０は、プログラム削除操作モジュール３１０を実行し、プログラムが所属するドメインのレディキューから、当該プログラムを削除する処理を行う。プログラム削除モジュール３１１は、レディキューから削除すべきプログラム（削除プログラム）を、プログラムが属するドメインのレディキュー(５０６〜５０９)から外す(Ｓ１００１)。図１０のフローチャートは、レディキューからプログラムを削除する際に、ドメイン内最高優先度プログラム（次実行プログラム１１５の候補）を変更する必要があるか否かを判断する。
【００５１】
ドメイン内最高優先度プログラム判定モジュール３１２は、削除プログラムがドメイン内最高優先度プログラム５１０と等しいか確認し(Ｓ１００２)、等しくない場合処理を終了し、等しい場合には、プログラム種別確認モジュール３１３は、削除プログラムがタイムイベントハンドラかどうかを判定する(Ｓ１００３)。削除プログラムがタイムイベントハンドラである場合、レディキュー確認モジュール３１４は、削除プログラムが所属するドメインのタイムイベントハンドラレディキュー５０６が空であるかどうかを確認する(Ｓ１００４)。空でない場合、ドメイン内最高優先度プログラムセットモジュール３０６は、ドメイン内最高優先度のプログラム５１０にタイムイベントハンドラレディキュー５０６の先頭のプログラムを設定し(Ｓ１００５)、処理を終了する。
【００５２】
Ｓ１００３において、削除プログラムがタイムイベントハンドラでないと判定された場合、又は、Ｓ１００４でタイムイベントハンドラレディキュー５０６が空であると判定された場合、レディキュー確認モジュール３１４は、変数Ｎに削除プログラム（タスク）の現在優先度６０６を代入する(Ｓ１００６)。変数名は一例であり、どのような名称でもかまわない。レディキュー確認モジュール３１４は、削除プログラムの所属ドメインの現在優先度がＮであるレディキュー(５０７〜５０９)が、空かどうかを判定し(Ｓ１００７)、空である場合は、Ｎに１を足す(Ｓ１００８)。
【００５３】
レディキュー確認モジュール３１４は、その後、Ｎがドメインの最低実行優先度５０５に１を足した値と等しいかを判定し(Ｓ１００９)、等しくない場合にはＳ１００７に移行する。これが等しい場合には、ドメイン内最高優先度プログラムセットモジュール３０６は、ドメイン内最高優先度プログラム５１０を空にする(Ｓ１０１０)。Ｓ１００７で削除プログラムの所属ドメインの現在優先度がＮであるレディキュー(５０７〜５０８)が空でない場合には、ドメイン内最高優先度プログラムセットモジュール３０６は、ドメイン内最高優先度プログラム５１０に優先度Ｎのレディキュー(５０７〜５０９)の先頭のプログラムを設定し(Ｓ１０１１)、処理を終了する。
【００５４】
図１１は、レディキュー操作モジュール１１９における、レディキュー操作のさらに他の例（レディキュー回転）を示すフローチャートである。ＯＳ１１０は、ドメインと優先度を指定し、レディキュー回転操作モジュール３２０を実行し、レディキューを回転する処理を実行する。レディキュー回転モジュール３２１は、指定されたドメインの指定された優先度のレディキュー(５０６〜５０９)の先頭プログラムを外す(Ｓ１１０１)。その後、レディキュー回転モジュール３２１は指定された優先度のレディキュー(５０６〜５０９)の最後尾に外したプログラムを追加する(Ｓ１１０２)。レディキュー確認モジュール３２２は、ドメイン内最高優先度プログラム５１０と指定された優先度が等しいかを判定し(Ｓ１１０３)、等しくない場合には処理を終了し、ドメイン内最高優先度プログラムセットモジュール３０６は、ドメイン内最高優先度プログラム５１０に指定された優先度のレディキュー(５０６〜５０９)の先頭プログラムをセットする(Ｓ１１０４)。
【００５５】
図１２は、スケジューリング処理モジュール１２０のスケジューリング処理の一例を示すフローチャートである。ＯＳ１１０は、スケジューリング処理モジュール１２０を実行し、スケジューリング処理を行う。スケジューリング処理は、次実行プログラム１１５と各ドメインのドメイン内最高優先度プログラム５１０を比較する等して、次実行プログラム１１５に最高優先度を持ったプログラムを設定する。
【００５６】
スケジューリング処理モジュール１２０は、全てのドメインについて、順番に、Ｓ１２０２〜Ｓ１２０８の処理を繰り返し実行する(Ｓ１２０１，Ｓ１２１０)。先ず、ドメイン内最高優先度プログラム確認モジュール４０１は、スケジューリング処理の対象となっているドメイン（対象ドメイン）のドメイン内最高優先度プログラムを確認すると共に、次実行プログラム１１５にプログラムが設定されているかを確認する(Ｓ１２０２)。これが設定されていない場合には、スケジューリング処理モジュール１２０の対象としているドメイン（対象ドメイン）のドメイン内最高優先度プログラム５１０を次実行プログラムに設定し(Ｓ１２０６)、Ｓ１２１０に移行する。
【００５７】
ドメイン内最高優先度プログラム確認モジュール４０１が、Ｓ１２０２において、次実行プログラム１１５が設定されていることを判定すると、優先度比較モジュール４０２は、対象ドメインのドメイン内最高優先度プログラム５１０の現在優先度６０６が次実行プログラム１１５の現在優先度６０６より小さいかを判定し(Ｓ１２０３)、これを肯定判定するとＳ１２０６に移行し、ドメイン内最高優先度プログラム５１０を次実行プログラム１１５より優先させて、次実行プログラム１１５にドメイン内最高優先度プログラム５１０をセットする。
【００５８】
優先度比較モジュール４０２は、Ｓ１２０３を否定判定するとＳ１２０４に移行し、対象ドメインのドメイン内最高優先度プログラム５１０の現在優先度が次実行プログラム１１５の現在優先度６０６と等しいか否かを判定する。優先度比較モジュール４０２は、Ｓ１２０４を否定判定、即ち、対象ドメインのドメイン内最高優先度プログラム５１０の現在優先度が次実行プログラム１１５の現在優先度６０６よりも大きい場合には、次実行プログラム１１５よりドメイン内最高優先度プログラム５１０を優先させる必要が無いか、必要が少ないとして、スケジューリング処理モジュール１２０は次のドメインの処理に移行する（Ｓ１２１０）。
【００５９】
優先度比較モジュール４０２は、Ｓ１２０４を肯定判定すると、次実行プログラム１１５にドメイン内最高優先度プログラム５１０との優劣を決定、或いは、設定するために、Ｓ１２０５に移行する。安全比較モジュール４０３は、Ｓ１２０５において、次実行プログラム１１５の所属ドメインの安全フラグ５０３と、ドメイン内最高優先度プログラム５１０の所属ドメインの安全フラグ５０３とを確認し、次実行プログラム１１５が通常モジュールのプログラムであり、かつ、ドメイン内最高優先度プログラム５１０が安全プログラムであることを判定すると、安全プログラムを通常プログラムよりも優先させるために、Ｓ１２０６に移行して、次実行プログラム１１５に設定されているプログラムをドメイン内最高優先度プログラム５１０に置き換える。
【００６０】
安全比較モジュール４０３はＳ１２０５を否定判定するとＳ１２０７に移行し、次実行プログラムとドメイン内最高優先度プログラムが共に安全プログラム又は通常プログラムであるかを判定する。安全比較モジュール４０３は、Ｓ１２０７を否定判定、即ち、次実行プログラム１１５が安全プログラムであり、ドメイン内最高優先度プログラム５１０が通常プログラムであることを判定すると、次実行プログラム１１５よりドメイン内最高優先度プログラム５１０を優先させる必要が無いか、必要が少ないとして、Ｓ１２１０に移行する。
【００６１】
安全比較モジュール４０３がＳ１２０５を肯定判定するとＳ１２０８に移行し、プログラム種別比較モジュール４０４は、次実行プログラム１１５がタスクであり、かつ、ドメイン内最高優先度プログラム５１０がタイムイベントハンドラであるかを判定する。プログラム種別比較モジュール４０４はＳ１２０８を肯定判定すると、ドメイン内最高優先度プログラム５１０を次実行プログラム１１５よりも優先させる必要性があるとしてＳ１２０６に移行し、これを否定判定、即ち、次実行プログラム１１５、及び、ドメイン内最高優先度プログラムが共にタイムイベントハンドラ又はタスクである、或いは、次実行プログラム５１０がタイムイベントハンドラであり、 かつ、ドメイン内最高優先度プログラム５１０がタスクである場合には、ドメイン内最高優先度プログラム５１０を次実行プログラム１１５より優先させる必要性がないとして、Ｓ１２１０に移行する。
【００６２】
図１３は、ディスパッチ処理モジュール１２１における、ディスパッチ処理の一例を示すフローチャートである。ＯＳ１１０は次実行プログラム１１５を実行する際、ディスパッチ処理モジュール１２１を実行し、ディスパッチ処理を実行する。ディスパッチ処理では、スケジューリング処理モジュール１２０が選択した次実行プログラム１１５と実行中プログラム１１６のコンテキストを入れ替え、次実行プログラム１１５の実行を開始する。
【００６３】
ディスパッチ処理モジュール１２１は、先ず、次実行プログラム１１５と実行中プログラム１１６が異なるかどうかを確認する(Ｓ１３０１)。これが等しいことを判定すると、処理を終了する。これが異なることを判定すると、実行中プログラム１１６の合計実行時間６０８を記録し(Ｓ１３０２)、実行中プログラム１１６のコンテキストを実行中プログラム１１６のスタック６０９に保存する(Ｓ１３０３)。その後、ディスパッチ処理モジュール１２１は、次実行プログラム１１５のコンテキストを次実行プログラム１１５のスタック６０９から読み出し、ハードウェアとＯＳ１１０に設定する(Ｓ１３０４)。ディスパッチ処理モジュール１２１は、実行中プログラム１１６に次実行プログラム１１５を設定し、次実行プログラム１１５を開始する(Ｓ１３０５)。
【００６４】
従来のリアルタイムＯＳでは、タイムイベントハンドラの安全種別や実行中のタスクの安全種別に考慮を払っていなため、通常処理を目的とした、優先度の低いタイムイベントハンドラが安全タスクを時間的に阻害するおそれがあった。例えば、通常処理を実施するタイムイベントハンドラによってディスパッチが遅延され、タイムイベントハンドラが終了するまで、安全タスクは実行されない。これは、安全処理が通常処理によって妨害されることを示している。タイムイベントハンドラの実行順を制御するだけでは、タイムイベントハンドラ安全種別とタスク安全種別によって、プログラムのスケジューリングを調整することは変更するのは難しい。
【００６５】
既述の計算機システムによれば、優先度の高いプログラムに実行権を与え、優先度が同じ場合には安全プログラムに実行権を与え、優先度が同じかつ安全種別が同じ場合にはタイムイベントハンドラに実行権を与えるスケジューリング処理が実行される。したがって、優先度とプログラム種別と安全種別に応じたスケジューリング処理が可能となり、ＯＳのリアルタイム性、即ち、タイムイベントハンドラのリアルタイム性を確保しつつ、タイムイベントハンドラの実行による安全タスクの実行遅延を防ぐことができる。
【００６６】
なお、本発明は上記した実施形態に限定されるものではなく、様々な変形例を包含する。例えば、図１のソフトウェアモジュールの構成、図２のハードウェア構成を適宜変更してもよい。例えば、ドメインを安全ドメインと通常ドメインに分けたが、機能安全のレベルに応じて、安全ドメインを複数の安全レベルのドメインに分けてもよい。
【符号の説明】
【００６７】
１０５…安全タイムイベントハンドラ、１０６…通常タイムイベントハンドラ、１１５…次実行プログラム、１１６…実行中プログラム、１１７…タイムイベントキュー、１１８…タイムイベント確認モジュール、１１９…レディキュー操作モジュール、１２０…スケジューリング処理モジュール、１２１…ディスパッチ処理モジュール、５１０…ドメイン内最高優先度プログラム
【図１】
0006792963.tif 000002
【図２】
0006792963.tif 000003
【図３】
0006792963.tif 000004
【図４】
0006792963.tif 000005
【図５】
0006792963.tif 000006
【図６】
0006792963.tif 000007
【図７】
0006792963.tif 000008
【図８】
0006792963.tif 000009
【図９】
0006792963.tif 000010
【図１０】
0006792963.tif 000011
【図１１】
0006792963.tif 000012
【図１２】
0006792963.tif 000013
【図１３】
0006792963.tif 000014