(57)【要約】【課題】モデル検査において時間スケジューリングを想定したモデルを扱うことを可能とし、また必要に応じてＣＰＵ負荷率・タスクの最大周期差を検証する事を可能とする。【解決手段】並行して実行される複数のタスクについて、各タスクの優先度、処理時間、及びスリープ時間を含む情報であるタスク情報を記憶する時間処理情報記憶部と、タスク情報に記述された各タスクについてタスクの定義を記述し、各タスクの定義内に時間消費関数を呼び出す記述を加えるとともに、スリープ時間設定消費関数を呼び出す記述を加えるプログラム生成部と、時間消費関数の定義及びスリープ時間設定消費関数の定義を記憶する時間処理ライブラリ記憶部とを有するモデル検査用プログラム作成装置。【選択図】図１４
2010157105.tif 000002
【特許請求の範囲】
【請求項１】
並行して実行される複数のタスクについて、各タスクの優先度、処理時間、及びスリープ時間を含む情報であるタスク情報を記憶する第１の記憶手段と、
前記タスク情報に記述された各タスクについてタスクの定義を記述し、各タスクの定義内に時間消費関数を呼び出す記述を加えるとともに、スリープ時間設定消費関数を呼び出す記述を加えるプログラム生成手段と、
前記時間消費関数の定義及びスリープ時間設定消費関数の定義を記憶する第２の記憶手段と
を有し、
前記時間消費関数は、自タスクの残りの処理時間が０であるか否かの判定をおこない、残りの処理時間が０であると判定した場合、時間消費関数の処理をそのまま終了し、一方、残りの処理時間が０でないと判定した場合、自タスクの残り処理時間を所定の値減算し、つぎに、他タスクの残りスリープ時間を所定の値減算し、他タスクの残りスリープ時間が０であるか否かの判定を行い、残りの処理時間が０であると判定した場合、当該他タスクを起動させ、一方、残りのスリープ時間が０でないと判定した場合、再び自タスクの残りの処理時間が０であるか否かの判定に戻る処理を行う関数であり、
前記スリープ時間設定関数は、指定されたスリープ時間を、残りスリープ時間保持変数に設定し、次に、自タスクをスリープ状態にする関数である
事を特徴とする、モデル検査用プログラム作成装置。
【請求項２】
並行して実行される複数のタスクについて、各タスクの優先度、処理時間、及びスリープ時間を含む情報であるタスク情報と、ＣＰＵ負荷率を求める時間幅を記憶する第１の記憶手段と、
前記タスク情報に記述された各タスクについてタスクの定義を記述し、各タスクの定義内にＣＰＵ負荷率出力付時間消費関数を呼び出す記述を加えるとともに、スリープ時間設定消費関数を呼び出す記述を加えるプログラム生成手段と、
前記時間消費関数の定義及びスリープ時間設定消費関数の定義を記憶する第２の記憶手段と
を有し、
前記ＣＰＵ負荷率出力付時間消費関数は、
自タスクの残りの処理時間が０であるか否かの判定をおこない、残りの処理時間が０であると判定した場合、時間消費関数の処理をそのまま終了し、一方、残りの処理時間が０でないと判定した場合、自タスクの残り処理時間を所定の値減算し、他タスクの残りスリープ時間を所定の値減算し、
次に、タスクが一つ以上起動中であるか否かを判定し、タスクが一つ以上起動中であると判定した場合、合計処理時間の値を１だけ増加させ、
次に残り時間幅時間が０であるか否かを判定し、残り時間幅時間が０であると判定した場合、ＣＰＵ負荷率を計算し、
次に、他タスクの残りスリープ時間が０であるか否かの判定を行い、残りの処理時間が０であると判定した場合、当該他タスクを起動させ、一方、残りのスリープ時間が０でないと判定した場合、再び自タスクの残りの処理時間が０であるか否かの判定に戻る処理を行う関数であり、
前記スリープ時間設定関数は、指定されたスリープ時間を、残りスリープ時間保持変数に設定し、次に、自タスクをスリープ状態にする関数である
事を特徴とする、モデル検査用プログラム作成装置。
【請求項３】
第１の記憶手段はさらに周期差を測定する検査対象であるタスクを指定する情報と守られるべき最大周期差の値を含む情報である検査対象組み合わせ記録情報とを記憶し、
前記プログラム生成手段は、
前記タスク情報から、タスク数を取得し、各タスクの残りスリープ時間を保持する配列変数を作成し、かつ各タスクの周期回数保持変数配列を作成し、
最大周期差の値を検査対象組み合わせ情報記録部から取得し、その定義を記述し、
前記検査対象組み合わせ記録情報から、周期差を測る検査対象とするタスクの組み合わせを取得し、
各タスクのタスクの定義内に、該当タスクが周期差の検査対象のタスクである場合、周期回数差を測る相手タスクの前回参照時の周期回数を保持する変数を追加し、該当タスクの周期回数カウント処理を追加し、周期差を監視する処理を追加し、周期差を測る相手タスクの周期回数保持変数の値を更新する処理を追加する
事を特徴とする請求項１又は２に記載のモデル検査用プログラム作成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、モデル検査用プログラム作成装置に関し、より詳しくは、時間によるスケジューリングを考慮したモデル検査用プログラムを自動生成できる、検査用プログラム作成装置に関する。
【背景技術】
【０００２】
ソフトウェアが複雑化してきたことでこれまで以上に誤りが混入しやすくなり、さらに人の手では仕様を網羅した検証が困難になってきている。また、システムの設計段階で誤りが混入すると、経験や知識にない誤りは発見しづらい上に、後工程で発見されたものは取り除くために膨大なコストがかかる。そのため、仕様の誤りの早期発見及び仕様を網羅的に検証できる取り組みが必要不可欠になってきている。
【０００３】
このような問題を解決する手段として、組み込みシステムなど装置制御を主な目的とするソフトウェアを対象に、上流工程で不具合を早期発見する方法として、形式的手法の一つであるモデル検査が着目されている。モデル検査とはシステムの仕様を状態遷移モデルで表現し、システムが満たすべき性質（検証条件）を論理式で記述し、状態遷移モデルが論理式を満たすかどうかを検証することで仕様の正しさを証明する手法である。設計者が状態遷移モデルの作成を行い、必要な検証条件を洗い出した上でモデル検査を実行するとモデル検査器が網羅的にかつ自動的に検証し、検証条件を満たしているかどうかを検証する。もし、状態遷移モデルが検証条件を満たしていなければ、モデル検査器は、その状態に至る状態遷移系列を反例として出力する。この反例を解析し、モデルが検証条件を満たさない原因を突き止めることで仕様の不備を発見することが可能である。
【０００４】
ところで、組込みシステムにおいては、周期タスクの仕様充足性を保証することが重要である。たとえば、ＣＰＵ負荷率、タスクの周期差、優先度逆転現象の検査が挙げられる。このような仕様充足性検査技術の1つとして、モデル検査技術が挙げられる。ところが、仕様充足性検査の前提となる、優先度の設定や時間によるスケジューリングの両方を扱えるモデル検査技術はない。そのため、時間を前提としたモデル検査ができるような技術を提供する必要があった。
【０００５】
上記のような必要性に応える技術として、スケジューリング解析装置、スケジューリング解析方法及びスケジューリング解析用プログラムを記録した媒体が提案されている（特許文献１）。
【０００６】
この技術は、周期タスクと非周期タスクの情報を設定すると、その設定値でスケジューリングが可能かどうかを計算式により解析する。周期タスクの情報として、優先度、周期、処理時間、デッドライン時間を入力する。非周期タスクの情報として、実行時間、処理頻度相対比を入力する。上記の入力に基づいて、周期タスクのシミュレーションを行い、周期タスクのシミュレーション結果をもとに、デッドラインブレークが起こらないよう最適な非周期タスクの実行時間を計算する。
【特許文献１】特開2000-47884号公開公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
上記従来技術では、与えられた時間設定によるスケジューリングが可能かどうかを検査できるが、スケジューリングを組み合わせたモデル検査上で、条件式の検証と組み合わせた網羅的な検査は行うことができなかった。
【０００８】
本発明の目的は、モデル検査において時間スケジューリングを想定したモデルを扱うことを可能とし、また必要に応じてＣＰＵ負荷率・タスクの最大周期差を検証する事を可能とする技術を提供することにある。
【課題を解決するための手段】
【０００９】
上記課題を解決するための手段として、本発明は以下の特徴を有する。
請求項１に記載の発明は、並行して実行される複数のタスクについて、各タスクの優先度、処理時間、及びスリープ時間を含む情報であるタスク情報を記憶する第１の記憶手段と、
前記タスク情報に記述された各タスクについてタスクの定義を記述し、各タスクの定義内に時間消費関数を呼び出す記述を加えるとともに、スリープ時間設定消費関数を呼び出す記述を加えるプログラム生成手段と、
前記時間消費関数の定義及びスリープ時間設定消費関数の定義を記憶する第２の記憶手段と
を有し、
前記時間消費関数は、自タスクの残りの処理時間が０であるか否かの判定をおこない、残りの処理時間が０であると判定した場合、時間消費関数の処理をそのまま終了し、一方、残りの処理時間が０でないと判定した場合、自タスクの残り処理時間を所定の値減算し、つぎに、他タスクの残りスリープ時間を所定の値減算し、他タスクの残りスリープ時間が０であるか否かの判定を行い、残りの処理時間が０であると判定した場合、当該他タスクを起動させ、一方、残りのスリープ時間が０でないと判定した場合、再び自タスクの残りの処理時間が０であるか否かの判定に戻る処理を行う関数であり、
前記スリープ時間設定関数は、指定されたスリープ時間を、残りスリープ時間保持変数に設定し、次に、自タスクをスリープ状態にする関数である
ことを特徴とする、モデル検査用プログラム作成装置である
【００１０】
請求項２に記載の発明は、並行して実行される複数のタスクについて、各タスクの優先度、処理時間、及びスリープ時間を含む情報であるタスク情報と、ＣＰＵ負荷率を求める時間幅を記憶する第１の記憶手段と、
前記タスク情報に記述された各タスクについてタスクの定義を記述し、各タスクの定義内にＣＰＵ負荷率出力付時間消費関数を呼び出す記述を加えるとともに、スリープ時間設定消費関数を呼び出す記述を加えるプログラム生成手段と、
前記時間消費関数の定義及びスリープ時間設定消費関数の定義を記憶する第２の記憶手段と
を有し、
前記ＣＰＵ負荷率出力付時間消費関数は、
自タスクの残りの処理時間が０であるか否かの判定をおこない、残りの処理時間が０であると判定した場合、時間消費関数の処理をそのまま終了し、一方、残りの処理時間が０でないと判定した場合、自タスクの残り処理時間を所定の値減算し、他タスクの残りスリープ時間を所定の値減算し、
次に、タスクが一つ以上起動中であるか否かを判定し、タスクが一つ以上起動中であると判定した場合、合計処理時間の値を１だけ増加させ、
次に残り時間幅時間が０であるか否かを判定し、残り時間幅時間が０であると判定した場合、ＣＰＵ負荷率を計算し、
次に、他タスクの残りスリープ時間が０であるか否かの判定を行い、残りの処理時間が０であると判定した場合、当該他タスクを起動させ、一方、残りのスリープ時間が０でないと判定した場合、再び自タスクの残りの処理時間が０であるか否かの判定に戻る処理を行う関数であり、
前記スリープ時間設定関数は、指定されたスリープ時間を、残りスリープ時間保持変数に設定し、次に、自タスクをスリープ状態にする関数である
ことを特徴とする、モデル検査用プログラム作成装置である。
【発明の効果】
【００１１】
本発明によれば、モデル検査において時間スケジューリングを想定したモデルを扱うことが可能となり、また必要に応じてＣＰＵ負荷率・タスクの最大周期差を検証する事が可能となる。
【発明を実施するための最良の形態】
【００１２】
以下、図面を参照しながら本発明の実施の形態について説明する。  
［１．用語の定義］
まずはじめに、本明細書における用語の定義について述べる。
【００１３】
（１）モデル検査技術
「モデル検査技術」とは、状態遷移を専用言語で記述し、特性を検証式として与えるとき、その検証式を満たしているか網羅的に検査する技術をいう。「モデル検査技術」によれば、タスクの切り替わるタイミングによって生じる不具合を検出できる。
【００１４】
（２）周期タスク
「周期タスク」とは、周期的に実行されるタスクをいう。特に、本明細書において、「周期タスク」は、処理時間とスリープ時間が定められており、タスク1周において、決められた時間をかけて処理が実行されたあと、定められた時間の間スリープ状態になり、そのあと実行可能状態になるタスクを指すものとする。なお、「タスク」とは、ＯＳ(Operating System)から見た処理の実行単位をいう。
【００１５】
（３）ＣＰＵ負荷率
「ＣＰＵ負荷率」とは、ＣＰＵが使用されている時間的な割合をいう。「ＣＰＵ負荷率」は下記の式により決定される。
【００１６】
ＣＰＵ負荷率（ＣＰＵPer[%]）＝100 × TotalDoingTime ÷ 任意の時間幅
上記式に置いて、「TotalDoingTime」とは、いずれかのタスクが処理を行っている時間の和を表す。
【００１７】
[例]：時間幅を100msとする。1つの時間幅において、タスクAが処理を行う時間が30ms、タスクBが処理を行う時間が10msの場合、"TotalDoingTime"=40[ms]となり、下記式より
ＣＰＵPer[%]＝１００×４０[ms]÷１００[ms]=４０[%]
この場合のＣＰＵ負荷率は40%となる。
【００１８】
［２．構成例］
［２．１．モデル検査システム］
次に、本実施の形態にかかる装置及びシステムの構成例を説明する。図１は、本実施の形態にかかるモデル検査システムの構成例を示すブロック図である。モデル検査システム１は、モデル検査用プログラム作成装置１０と、モデル検査器２０とで構成される。
【００１９】
［２．１．１．検査用プログラム作成装置］
モデル検査用プログラム作成装置１０は、例えばコンピュータ、ワークステーションなどの情報処理装置によって実現される装置である。この情報処理装置は、演算処理装置（ＣＰＵ）、主メモリ（ＲＡＭ）、読出し専用メモリ（ＲＯＭ）、入出力装置（Ｉ／Ｏ）、及び必要な場合にはハードディスク装置等の外部記憶装置を具備している装置である。
【００２０】
モデル検査用プログラム作成装置１０は、タスク情報１１０，検査対象組み合わせ記録情報１２０、時間幅１３０を入力データとして受け取り、その処理結果として、時間処理付きモデル検査用プログラム（以下、単に「検査用プログラム」という）２００を出力する。検査用プログラム２００は、後述するモデル検査器２０の入力として使用される。
【００２１】
図２は、タスク情報１１０，検査対象組み合わせ記録情報１２０、時間幅１３０のデータ構成例を示した図である。
図２（Ａ）はタスク情報１１０のデータ構成の一例である。タスク情報１１０は、タスクごとに一つのレコード１１１を有し、各レコード１１１は、タスクを識別する情報（例えば、タスク名、タスクＩＤなど）を格納するタスク名フィールド１１２と、そのタスクの優先度を格納する優先度フィールド１１３と、そのタスクの処理時間を格納する処理時間フィールド１１４と、そのタスクのスリープ時間を格納するスリープ時間フィールド１１５とを有している。
図２（Ｂ）は、検査対象組み合わせ記録情報１２０のデータ構成の一例である。検査対象組み合わせ記録情報１２０は、周期差を測定する検査対象である２つのタスクを指定するフィールド１２１と、守られるべき周期差を指定するフィールド１２２とを有する。
図２（Ｃ）は、時間幅１３０のデータ構成例を示す。時間幅１３０は、ＣＰＵ負荷率を測定する単位である時間幅の値を格納するフィールド１３１を有している。
【００２２】
［２．１．２．モデル検査器］
モデル検査器２０（モデル検査ツールとも呼ばれる）は、例えばコンピュータ、ワークステーションなどの情報処理装置によって実現される装置である。この情報処理装置は、演算処理装置（ＣＰＵ）、主メモリ（ＲＡＭ）、読出し専用メモリ（ＲＯＭ）、入出力装置（Ｉ／Ｏ）、及び必要な場合にはハードディスク装置等の外部記憶装置を具備している装置である。
【００２３】
モデル検査器２０は、例えば、タスクに設定された優先度に基づくタスク管理を行え（例えば、μＩＰＲＯＮなど）、且つ実時間を直接には扱わないモデル検査ツール（例えば、ＳＰＩＮ）を搭載したコンピュータで構成される。
【００２４】
モデル検査器２０は、検証用モデルであるモデル検査用プログラム２００と、システムとして望ましい振る舞いや発生しては困る性質を表現する検証用性質３４０を入力として受け付ける。モデル検査器２０は、検証用モデル（モデル検査用プログラム２００）が検証条件（検証用性質３４０）を満たしていなければ、その状態に至る状態遷移系列を反例３３０として出力する。また、モデル検査用プログラム２００を検証した結果から得られる各時間幅におけるＣＰＵ負荷率検証データ３１０と、タスクの最大周期差検証データ３２０とを出力する。
【００２５】
図３はモデル検査器２０が出力するＣＰＵ負荷率検証データ３１０及びタスクの最大周期差検証データ３２０のデータ構成例を示した図である。
図３（Ａ）はＣＰＵ負荷率検証データ３１０のデータ構成例である。ＣＰＵ負荷率検証データ３１０は、時間幅１３０により指定された時間幅の区間（スロット、又はウインドウ）ごとに一つのレコード３１１を有し、各レコード３１３は、検証の結果得られたその区間におけるＣＰＵ負荷率を格納するフィールド３１２を有している。
【００２６】
図３（Ｂ）はタスクの最大周期差検証データ３２０のデータ構成例である。タスクの最大周期差検証データ３２０は、周期差を測定する検査対象である２つのタスクを指定するフィールド３２１と、守られるべき周期差を指定するフィールド３２２と、フィールド３２２で指定された周期差が守られたか否かの結果を示すフィールド３２３とを有している。
【００２７】
なお、図１に示した構成例では、図示の都合上、モデル検査用プログラム作成装置１０とモデル検査器２０とは別の装置であるように示したが、本発明がかかる構成に限定される趣旨ではなく、同一のコンピュータをモデル検査用プログラム作成装置１０兼モデル検査器２０として動作させる構成でも良いし、三台以上の複数のコンピュータを分散コンピュータとしてモデル検査用プログラム作成装置１０兼モデル検査器２０として動作させる構成でも良い。
【００２８】
［２．１．３．検査用プログラム作成装置］
次に、前述したモデル検査用プログラム作成装置１０の、さらに具体的な構成例について述べる。図４に、モデル検査用プログラム作成装置１０の構成例を示した機能ブロック図を掲げる。
【００２９】
モデル検査用プログラム作成装置１０は、時間処理情報入力部４１０と、時間処理情報入力部４１０に接続された時間処理情報記録部４２０と、時間処理情報記録部４２０に接続されたプログラム生成部４３０と、プログラム生成部４３０に接続された時間処理ライブラリ記憶部４４０とを有している。時間処理情報記録部４２０は本発明の第１の記憶手段に相当し、プログラム生成部４３０は本発明のプログラム生成手段に相当し、時間処理ライブラリ記憶部４４０は本発明の第２の記憶手段に相当する。なお、本明細書中において、各機能や各処理に対応する「…部」、「…手段」等の仮想的回路ブロックを用いて実施の形態を説明している。また、「接続する」とは、情報若しくはデータの受け渡しが可能である状態を示しており、必ずしも物理的に接続されていることに限定されない。また、説明中に用いられる各部、各手段は、一対一に対応するハードウエア要素やソフトエウア要素によって構成される必要は必ずしもなく、複数のハードウエア要素やソフトエウア要素が協働して各部、各手段として機能する場合も本発明の技術的範囲内である。
【００３０】
［２．３．１．１．時間処理情報入力部］
時間情報入力部４１０は、本検査システム１の利用者、オペレータなどが時間処理を考慮した検査を行う際に必要となるタスク情報１１０，検査対象組み合わせ記録情報１２０、時間幅１３０の入力を促し、入力されたこれらタスク情報１１０，検査対象組み合わせ記録情報１２０、時間幅１３０を時間処理情報記録部４２０にデータとして渡す機能を有する。時間情報入力部４１０は、例えば、タスク情報１１０，検査対象組み合わせ記録情報１２０、時間幅１３０を利用者に入力させるためのＧＵＩ（グラフィカル・ユーザ・インターフェイス）である。
【００３１】
［２．３．１．２．時間処理情報記録部］
時間処理情報記録部４２０は、時間情報入力部４１０から取得したタスク情報１１０，検査対象組み合わせ記録情報１２０、時間幅１３０を記録する機能を有する。時間処理情報記録部４２０は、より具体的には、タスク情報１１０を記憶保持するタスク情報記録部４２１，検査対象組み合わせ記録情報１２０を記憶保持する検査対象組み合わせ記録情報記録部４２２、時間幅１３０を記憶する時間幅記録部４２３を有している。
なお、タスク情報記録部４２１，検査対象組み合わせ記録情報記録部４２２、時間幅記録部４２３は必ずしも常に同時に必要ではない。
【００３２】
［２．３．１．３．プログラム生成部］
プログラム生成部４３０は、タスク情報記録部４２１，検査対象組み合わせ記録情報記録部４２２、時間幅記録部４２３に記録されている情報に基づいて、時間処理ライブラリ記憶部４４０から必要な関数、若しくはタスクを抽出し、モデル検査用プログラム２００に記述、追加する機能を有する。
【００３３】
［２．３．１．４．時間処理ライブラリ記憶部］
時間処理ライブラリ記憶部４４０は、時間消費関数４４１，時間消費タスク４４２，スリープ時間設定関数４４３，ＣＰＵ負荷率出力付時間消費関数４４４それぞれの定義を記憶する。
【００３４】
［２．３．１．４．１．時間消費関数］
時間消費関数４４１は、引数により指定された時間分の処理を行う関数であって、プログラム生成部４３０によりモデル検査用プログラム２００内に記述される関数である。図５に、モデル検査用プログラム２００が実行された場合の時間消費関数４４１の処理例を示したフローチャートを掲げる。ここでは、ある検証用プログラムのタスクＡにおいて時間消費関数４４１が呼ばれた場合として、時間消費関数４４１の処理例を説明する。
【００３５】
時間消費関数４４１が呼び出されると、タスクＡの残りの処理時間が０であるか否かの判定が行われる（ステップＳ１０、以下単に「Ｓ」と標記する）。残りの処理時間が０であると判定された場合（Ｓ１０，Ｙｅｓ）は、時間消費関数４４１の処理はそのまま終了する。
【００３６】
一方、残りの処理時間が０でないと判定された場合（Ｓ１０，Ｎｏ）は、自タスク（この例ではタスクＡ）の残り処理時間を１だけ減算する（Ｓ２０）。つぎに、他タスク（この例ではタスクＡ以外のタスクであって検証対象に含まれる各タスク（以下、タスクＸと呼ぶ）の残りスリープ時間を１だけ減算する（Ｓ３０）。
【００３７】
続いて、タスクＸの残りスリープ時間が０であるか否かの判定が行われる（ステップＳ４０）。残りの処理時間が０であると判定された場合（Ｓ４０，Ｙｅｓ）、タスクＸをＷａｋｅｕｐする（Ｓ５０）。なお、ＷａｋｅｕｐしたタスクＸが自タスク（タスクＡ）より優先度が高い場合、タスクＡの処理は停止する。後にタスクＡに実行権が戻った際に、停止した位置の続きから実行される。
一方、Ｓ４０の判定において残りのスリープ時間が０でないと判定された場合（Ｓ５０，Ｎｏ）、再びＳ１０の処理に戻る。以上で時間消費関数の説明を終了する。
【００３８】
［２．３．１．４．２．時間消費タスク］
次に、時間消費タスク４４２について説明する。時間消費タスク４４２は、検査対象に含まれる全タスクがスリープ状態になったとき、実行権限を与えられ、時間を消費する（時間を指定された単位進める）ことのみ実行するタスクである。図６は、検査用プログラム２００に記述された時間消費タスク４４２のコード例を示す図である。図７に、時間消費タスク４４２の具体的な一例を示したフローチャートを掲げる。
【００３９】
時間消費タスク４４２では、時間消費タスク４４２に実行権が渡されると（Ｓ１１０，Ｙｅｓ）、関数”do_something（１）を実行する、すなわち単位１の時間が消費される処理が行われる（Ｓ１２０）。その後ステップＳ１１０に戻る。一方、時間消費タスク４４２に実行権が渡されていない場合（Ｓ１１０，Ｎｏ）、時間消費は実行されずに時間消費タスク４４２は終了する。なお、時間消費タスク４４２の実行条件が満たされているか否か、すなわち時間消費タスク４４２の実行権を渡すか否かの判定は、タスクの優先度を管理するツール、例えばμＩＰＲＯＮ等によって行われればよい。
【００４０】
［２．３．１．４．３．スリープ時間設定関数４４３］
次に、スリープ時間設定関数４４３について説明する。スリープ時間設定関数４４３は、引数により指定された時間の長さだけ、該当するタスクをスリープ状態にする機能を有する。図８に、スリープ時間設定関数４４３の動作例を示したフローチャートを掲げる。図８に示す動作例によれば、スリープ時間設定関数４４３が実行されると、まず引数により指定されたスリープ時間を、残りスリープ時間保持変数に設定する（Ｓ２１０）。次に、自タスクをスリープ状態にする（Ｓ２２０）。以上で、スリープ時間設定関数４４３の処理は終了する。
【００４１】
［２．３．１．４．４．ＣＰＵ負荷率出力付時間消費関数］
次に、ＣＰＵ負荷率出力付時間消費関数４４４について説明する。ＣＰＵ負荷率出力付時間消費関数４４４は、時間幅１３０により指定された時間幅ごとにＣＰＵ負荷率を求めて出力しながら、時間の消費を行う機能を有する。図９は、検査用プログラム２００が実行された場合のＣＰＵ負荷率出力付時間消費関数４４４の動作例を示すフローチャートである。図９に示す例においては、ある検証用プログラム２００に含まれるタスクＡにおいてＣＰＵ負荷率出力付時間消費関数４４４が呼ばれた場合として、ＣＰＵ負荷率出力付時間消費関数４４４の処理例を説明する。
【００４２】
ＣＰＵ負荷率出力付時間消費関数４４４が呼び出されると、タスクＡの残りの処理時間が０であるか否かの判定が行われる（ステップＳ３１０）。ここで、「残りの処理時間」とは、そのタスクの処理時間１１４の初期値から消費された時間分を減算したものをいう。残りの処理時間が０であると判定された場合（Ｓ３１０，Ｙｅｓ）は、ＣＰＵ負荷率出力付時間消費関数４４４の処理はそのまま終了する。
【００４３】
一方、残りの処理時間が０でないと判定された場合（Ｓ３１０，Ｎｏ）は、自タスク（この例ではタスクＡ）の残り処理時間を１だけ減算する（Ｓ３２０）。つぎに、他タスク（この例ではタスクＡ以外のタスクであって検証対象に含まれる各タスク（以下、タスクＸと呼ぶ）の残りスリープ時間を１だけ減算する（Ｓ３３０）。ここで、「残りスリープ時間」とは、そのタスクのスリープ時間１１５の初期値から消費された時間分を減算した値をいう。
【００４４】
次に、タスクが一つ以上起動中であるか否かが判定される（Ｓ３４０）。タスクが一つ以上起動中であると判定された場合（Ｓ３４０，Ｙｅｓ）、合計処理時間の値を１だけ増加させる（Ｓ３５０）。ここで、「合計処理時間」とは、ある時間幅内における少なくとも一つ以上のタスクが起動状態である時間の合計をいう。すなわち、いずれかのタスクが処理を行っている時間の和である。その後後述するステップＳ３６０に進む。一方、タスクがいずれも起動中でないと判定された場合（Ｓ３４０，Ｎｏ）、そのまま後述するステップＳ３６０に進む。
【００４５】
続いて、残り時間幅時間が０であるか否かが判定される（Ｓ３６０）。「残り時間幅時間」とは、時間幅１３１からＣＰＵ負荷率測定開始時から現在までの経過時間を引いた時間をいう。残り時間幅時間が０であると判定された場合（Ｓ３６０、Ｙｅｓ）、ＣＰＵ負荷率を計算し、出力する（Ｓ３８０）。さらに、残り時間幅時間、合計処理時間を初期化する（Ｓ３９０）。その後後述するステップＳ４００に進む。
【００４６】
続いて、他タスクであるタスクＸ（複数である場合あり）の残りスリープ時間が０であるか否かの判定が行われる（ステップＳ４００）。残りスリープ時間が０であると判定された場合（Ｓ４００，Ｙｅｓ）、そのタスクＸをＷａｋｅｕｐ（起動）し（Ｓ４１０）、前述のステップＳ３１０に戻る。なお、ＷａｋｅｕｐしたタスクＸが自タスク（タスクＡ）より優先度が高い場合、タスクＡの処理は停止させられる。後にタスクＡに実行権が戻った際に、停止した位置の続きから実行される。
【００４７】
一方、Ｓ４００の判定において、タスクＸの残りのスリープ時間が０でないと判定された場合（Ｓ４００，Ｎｏ）、そのままＳ３１０の処理に戻る。
【００４８】
以上でＣＰＵ負荷率出力付時間消費関数４４４、並びに時間処理ライブラリ記憶部４４０の説明を終了する。また、図１を参照した検証用プログラム作成装置１０の構成例の説明も終了する。
【００４９】
［３．動作例］
次に、モデル検査システム１，より詳しくはモデル検査用プログラム作成装置１０の動作例について説明する。図１０は、モデル検査用プログラム作成装置１０の動作例を示したフローチャート、図１１はモデル検査用プログラム作成装置１０が出力したモデル検査用プログラム２００のコード例を示した図、図１２はモデル検査用プログラム２００において宣言されたグローバル変数の内容の変化の例を表した図である。以下、図１０から図１２を参照しながら、モデル検査用プログラム作成装置１０の動作例を説明する。
【００５０】
まず、モデル検査用プログラム作成装置１０の利用者、若しくはオペレータなどは、時間処理情報入力部４１０を用いてタスク情報１１０，検査対象組み合わせ記録情報１２０、時間幅１３０の入力を行っておく必要がある。以下の説明はこれら情報の入力が完了している事を前提として進める。
【００５１】
モデル検査用プログラム作成装置１０、より詳しくはプログラム生成部４３０は検査対象に含まれる全タスクのスリープ時間を保持する変数配列をグローバル変数として、検査用プログラム２００内に定義する（Ｓ５１０、図１１，コード箇所１１０３）。なお、ここでの説明では、検査対象に含まれるタスクはタスクＡ，タスクＢ、タスク３の３つであるものとする。
【００５２】
生成される変数配列及びその記憶内容の例を図１２に示す。この図に示した例では、変数配列１２００は、タスクＡ，タスクＢ、タスクＣそれぞれの残りスリープ時間の値を格納する要素値格納域１２０１Ａ，１２０１Ｂ，１２０１Ｃを有している。図１２（Ａ）は、ステップＳ５１０の段階における変数配列１２００であって、要素値格納域１２０１Ａ，１２０１Ｂ，１２０１Ｃにはスリープ時間の値はいずれも格納されていない。図１２（Ｂ）から図１２（Ｈ）は、検査用プログラム２００が実行された際の要素値格納域１２０１Ａ，１２０１Ｂ，１２０１Ｃ内の値の変化を説明するための図である。これらについては後述する。
【００５３】
図１０に戻り、モデル検査用プログラム作成装置１０、より詳しくはプログラム生成部４３０の動作例の説明を続ける。
前記ステップＳ５１０に続いて、モデル検査用プログラム作成装置１０、より詳しくはプログラム生成部４３０は時間消費関数４４１の定義を検査用プログラム２００内に記述する（Ｓ５２０）。次に、モデル検査用プログラム作成装置１０、より詳しくはプログラム生成部４３０はスリープ時間設定関数４４３の定義を検査用プログラム２００内に記述する（Ｓ５３０）。次に、モデル検査用プログラム作成装置１０、より詳しくはプログラム生成部４３０は時間消費タスク４４２の定義を検査用プログラム２００内に記述する（Ｓ５４０）。なお、ステップＳ５２０からＳ５４０の順序は入れ替え可能であり、ここに述べる例に限られるものではない。
【００５４】
次に、モデル検査用プログラム作成装置１０、より詳しくはプログラム生成部４３０は個々のタスクについて、タスクの定義の記述を開始する（Ｓ５５０）。なお、図１０においては「タスクＸ」と標記しているが、「Ｘ」はＡ，Ｂ、Ｃのいずれかを表す変数を示している。
【００５５】
次に、モデル検査用プログラム作成装置１０、より詳しくはプログラム生成部４３０はＳ５５０で開始したタスクＸの定義に、消費関数を呼び出す記述を加える（Ｓ５６０）。次に、モデル検査用プログラム作成装置１０、より詳しくはプログラム生成部４３０は、タスクＸの定義にスリープ時間設定消費関数４４３を呼び出す記述を加える（Ｓ５７０）。次に、検査用プログラム作成装置１０、より詳しくはプログラム生成部４３０は、タスクＸの定義を終了する記述を加える（Ｓ５８０）。
【００５６】
次に、モデル検査用プログラム作成装置１０、より詳しくはプログラム生成部４３０は全てのタスクの定義の記述が終了したか否かを判定する（Ｓ５９０）。終了したと判定された場合（Ｓ５９０，Ｙｅｓ）には、検査用プログラムの作成を終了する。作成された検査用プログラム２００はオペレータの指示に応じて、または自動的に出力される。一方、終了していないと判定された場合（Ｓ５９０，Ｎｏ）には、ステップＳ５５０に戻り、まだ定義の記述がされていない別のタスクについてステップＳ５５０からＳ５８０を実行する。
【００５７】
図１１は、モデル検査用プログラム作成装置１０から出力される検査用プログラム２００のコード例を示した図である。検査用プログラム２００のコード１１００には、配列変数の定義１１０１が含まれる。定義１１０１に続いて、３つのタスクＡ，Ｂ．Ｃそれぞれに対応するタスクの定義１１０２Ａ，１１０２Ｂ，１１０２Ｃが含まれる。タスクの定義１１０２Ａ，１１０２Ｂ，１１０２Ｃのそれぞれには、時間消費関数４４１を呼び出す記述１１１０及びスリープ時間設定関数４４３を呼び出す記述１１２０が含まれている。なお、時間消費関数４４１の引数としてそれぞれのタスクに与えられた処理時間（図２，処理時間１１４参照）の値が設定される。また、スリープ時間設定関数４４３の引数としてそれぞれのタスクに与えられたスリープ時間（図２，スリープ時間１１５参照）の値が設定される。タスクの定義１１０２Ｃに続いて、時間消費タスク４４２の定義１１０３が含まれる。
【００５８】
図１２は、図１１に示した検査用プログラム２００のコード１１００を実行した際の変数配列１２００における残りスリープ時間の推移を示した図である。なお、この検査用プログラム２００に含まれるタスクは、タスク１，タスク２，タスク３の３つであり、それぞれの処理時間、スリープ時間は図１２に示すとおり、７と８０，５５と１００，３２と１２０であるものとする。
【００５９】
図１２（Ａ）は、変数配列にいまだスリープ時間の値が格納されていない状態を示している。
図１２（Ｂ）は、タスク１が実行されて時間消費関数４４１による時間消費が行われた（この例では時間が７消費され、残り処理時間が０となり、スリープ時間設定関数が起動した）後、タスク１内のスリープ時間設定関数４４３が起動した時点の変数配列１２００の内容を示している。このときタスク１内のスリープ時間設定関数４４３はタスク１のスリープ時間（図２、スリープ時間１１５参照）の値を要素値格納域１２０１Ａに格納する。この例ではスリープ時間の値は「８０」である。
【００６０】
次に、タスク２の実行に移る。タスク２の実行に移ると、タスク２に含まれる時間消費関数が時間を１ずつ消費していく。図１２（Ｃ）は、図１２（Ｂ）の状態から１だけ時間が消費されたときの時点の変数配列１２００の内容を示している。要素値格納域１２０１Ａに格納されたスリープ時間の値は「８０」から「７９」に減らされる。
【００６１】
なお、タスク２に含まれる時間消費関数４４１の引数はこの例では「５５」である。タスクＢに含まれる時間消費関数４４１が起動した後、時間が５５消費される（。図１２（Ｄ）にこのときの変数配列１２００の内容を示す）と、タスク２に含まれるスリープ時間設定関数４４３が起動するタスク２に含まれるスリープ時間設定関数４４３は、タスク２のスリープ時間の値「１００」を要素値格納域１２０１Ｂに格納する。図１２（Ｅ）はタスク２に含まれるスリープ時間設定関数４４３が起動した時点での変数配列１２００の内容を示している。要素値格納域１２０１Ａに格納されたスリープ時間の値は「８０」から５５だけ時間が経過して「２５」まで減じられており、また要素値格納域１２０１Ｂには新たにタスクＢのスリープ時間の値「１００」が格納されている。
【００６２】
次に、タスク３の実行に移る。タスク３の実行に移ると、タスク３に含まれる時間消費関数が時間を１ずつ消費していく。図１２（Ｆ）は、図１２（Ｅ）の状態から１だけ時間が消費されたときの時点の変数配列１２００の内容を示している。要素値格納域１２０１Ａに格納されたスリープ時間の値は「２５」から「２４」に減らされ、要素値格納域１２０１Ｂに格納されたスリープ時間の値は「１００」から「９９」に減らされている。
なお、タスク３に含まれる時間消費関数の引数はこの例では「３２」である。
【００６３】
さて、その後図１２（Ｆ）の状態から２４だけ時間が消費されたものとする。この時点の変数配列１２００の内容図１２（Ｇ）に示す。要素値格納域１２０１Ａに格納されたスリープ時間の値は「０」となる、要素値格納域１２０１Ｂに格納されたスリープ時間の値は「７５」となる。
【００６４】
ここで、タスク１の残りスリープ時間が「０」となったため、タスク３の残り実行時間は「７」残っているが、より優先度の高いタスク１に実行権が移ることとなる。
この後タスク１の時間消費関数、スリープ時間設定関数が前述のように動作する。
なお、上記の説明では、時間消費関数が検査用プログラム２００に適用されるものとして説明したが、時間消費関数４４１に代えてＣＰＵ負荷率出力付時間消費関数４４３を使用する構成も成立し、そのような構成を有するモデル検査システム１，より詳しくはモデル検査用プログラム作成装置１０も本発明の技術的範囲に含まれる。
【００６５】
［４．実施例］
本発明は後述する実施例としても成立する。ここでは３つの実施例を上げる。単純な処理とスリープの模倣を行う場合を実施例1、ＣＰＵ負荷率を測定する場合を実施例３、実施例1又は実施例３に加えてタスクの最大周期差を測定する場合を実施例２とする。図１３は、各実施例と時間処理ライブラリ記憶部４４０に記憶されている時間消費関数４４１，時間消費タスク４４２，スリープ時間設定関数４４３，ＣＰＵ負荷率出力付時間消費関数４４４の対応関係を示す図である。以下、図１３を参照しながら各実施例と必要とする時間処理ライブラリ記憶部４４０に記憶されている要素との関係を説明する。
【００６６】
まず、各実施例に共通に必要な処理が用意される。共通に必要な処理はスリープ時間設定関数４４３及び時間消費タスク４４２となる。
次に、ＣＰＵ負荷率を測定したいか否かで実施例１と実施例３に分かれる。ＣＰＵ負荷率を測定する必要がない場合は、実施例1に該当する。実施例1ではさらに時間消費関数４４１が必要になる。一方、ＣＰＵ負荷率を測定する必要がある場合は、実施例3に該当する。実施例３は共通する処理に加えてＣＰＵ負荷率出力付時間消費関数４４４が必要となる。
さらに、ＣＰＵ負荷率を測定したい場合、ＣＰＵ負荷率測定が必要ない場合のいずれにおいても2つのタスクの周期差を測定する必要がある場合には、実施例２に該当する。
【００６７】
以下に、上記の各実施例について詳述する。
[４．１．実施例1]
図１４に、実施例１におけるモデル検査用プログラム作成装置１０Ａの構成例の機能ブロック図を掲げる。実施例１において、先に述べた実施の形態におけるモデル検査用プログラム作成装置１０のうち、検査対象組み合わせ記録部４２２、時間幅記録部４２３は使用しない。また、ＣＰＵ負荷率出力付時間消費関数４４４も使用しないので、これらは具備していなくともよい。その他の構成要素については、同一の構成要素には同一の参照符号を付し、それらの詳細な説明は省略する。
【００６８】
次に、モデル検査用プログラム作成装置１０Ａの動作例について説明する。図１５は、モデル検査用プログラム作成装置１０Ａ、より詳しくはそのプログラム生成部４３０の動作例を示したフローチャートである。以下、図１５を参照しながらモデル検査用プログラム作成装置１０Ａの動作例を説明する。
【００６９】
実施例１において、時間処理情報入力部４１０から入力されたタスク情報１１０Ａは、タスク情報記録部４２１に記録される。この例の場合のタスク情報１１０Ａのデータ構成例を図１６に示す。
【００７０】
次に、モデル検査用プログラム作成装置１０Ａ、より詳しくはプログラム生成部４３０は、タスク情報記録部４２１に記憶されたタスク情報１１０Ａから、タスク数を取得し、各タスクの残りスリープ時間を保持する配列変数を作成する（Ｓ６１０）。この処理の結果としてプログラム内に記述されるコード例を以下に示す。
＜コード例＞：”Unsigned int remainSleep[3];”
次に、モデル検査用プログラム作成装置１０Ａ、より詳しくはプログラム生成部４３０は、タスク情報１１０Ａに記述された全てのタスクについて定義したか否かを判定する（Ｓ６２０）。全てのタスクについて定義を終了した場合（Ｓ６２０，Ｙｅｓ）は、処理を終了する。
【００７１】
一方、全てのタスクについて定義していないと判定した場合（Ｓ６２０、Ｎｏ）は、該当タスク（全てのタスクの内、定義がされていないタスクであって、以降の処理の対象として選択されたタスクをいう）のタスク優先度をタスク情報１１０Ａから取得し（Ｓ６３０）、これに基づいて該当タスクのタスク生成関数を検査用プログラム２００に追加する（Ｓ６４０）。この例では、まず始めにタスク１が該当タスクに選択され、これについてタスク生成関数を記述するものとしよう。具体的には、タスク１のタスク優先度「１」をタスク情報１１０Ａから取得し、これに対応するタスク生成関数を検査用プログラム２００に追加する。この処理のコード例を以下に示す。
＜コード例＞：”cre_tsk(1, 1);”
次に、モデル検査用プログラム作成装置１０Ａ、より詳しくはプログラム生成部４３０は、該当タスクの定義を開始する。次に、モデル検査用プログラム作成装置１０Ａ、より詳しくはプログラム生成部４３０は、タスク情報１１０Ａから該当タスクの処理時間を取得し、且つ時間消費関数を取り出して、検査用プログラム２００に追加する（Ｓ６５０）。この処理のコード例を以下に示す。
＜コード例＞：”do_something(20);”
次に、モデル検査用プログラム作成装置１０Ａ、より詳しくはプログラム生成部４３０は、タスク情報１１０Ａから該当タスクのスリープ時間を取得し、スリープ時間設定関数を取り出して、検査用プログラム２００に追加する。この処理のコード例を以下に示す。
＜コード例＞：”sleep(50);”
次に、モデル検査用プログラム作成装置１０Ａ、より詳しくはプログラム生成部４３０は、該当タスクの定義を終了する。その後ステップＳ６２０に戻る。タスク情報１１０Ａに記述された全てのタスクについて、前述のステップＳ６３０からＳ６６０を行い、それが終了するとモデル検査用プログラム作成装置１０Ａ、より詳しくはプログラム生成部４３０は、検査用プログラム２００の生成を終了し、生成した検査用プログラム２００を出力する。生成が終了した検査用プログラム２００のコード例を図１７に示す。
【００７２】
［４．１．１．実施例１の効果］
実施例１は以下の効果を有する。
（１）時間によるスケジューリングを実現したモデル検査用プログラムを自動生成できる。
（２）時間によるスケジューリングを前提とする検査が可能となる。
【００７３】
［４．２．実施例２］
次に、実施例２について説明する。図１８に、実施例２にかかるモデル検査用プログラム作成装置１０Ｂの構成例の機能ブロック図を掲げる。実施例２のモデル検査用プログラム作成装置１０Ｂの構成は、実施例１のモデル検査用プログラム作成装置１０Ａの構成に、検査対象組み合わせ記録部４２２を追加したものである。その他については同一の構成要素には同一の参照符号を付し、それらの詳細な説明は省略する。
【００７４】
次に、モデル検査用プログラム作成装置１０Ｂの動作例について説明する。図１９は、モデル検査用プログラム作成装置１０Ａの動作例の一部を示したフローチャートである。以下、図１９を参照しながらモデル検査用プログラム作成装置１０Ｂの動作例を説明する。
【００７５】
まず、モデル検査用プログラム作成装置１０Ｂ、より詳しくはプログラム生成部４３０は時間処理情報入力部４１０から入力されたタスク情報１１０を、タスク情報記録部４２１に記録させる。
【００７６】
次に、モデル検査用プログラム作成装置１０Ｂ、より詳しくはプログラム生成部４３０は時間処理情報入力部４１０から入力された検査対象組み合わせ情報１２０Ｂを、検査対象組み合わせ情報記録部４２２に記録する。検査対象組み合わせ情報１２０Ｂのデータ構成例を図２０に示す。
【００７７】
次に、モデル検査用プログラム作成装置１０Ｂ、より詳しくはプログラム生成部４３０は、タスク情報記録部４２１からタスク情報１１０を取り出し、時間処理ライブラリ記憶部４４０から関数を取り出して、検査用プログラム２００に記述する。より詳しく述べると、以下の処理を行う。
【００７８】
モデル検査用プログラム作成装置１０Ｂ、より詳しくはプログラム生成部４３０は、タスク情報記録部４２１に記憶されたタスク情報１１０から、タスク数を取得し、各タスクの残りスリープ時間を保持する配列変数を作成し、かつ各タスクの周期回数保持変数配列を作成し、それらの記述を検査用プログラム２００に加える（Ｓ７１０）。この処理の結果であるコード例を以下に示す。
＜コード例＞：
”Unsigned int remainSleep[3];”
“int  loopCounter[3];“
次に、モデル検査用プログラム作成装置１０Ｂ、より詳しくはプログラム生成部４３０は、制約とする最大周期差の値を検査対象組み合わせ情報記録部４２２から取得し、その定義の記述を検査用プログラム２００に加える（Ｓ７２０）。この処理の結果として加えられるコード例を以下に示す。
＜コード例＞：” #define  CounterDiff   5” 
次に、モデル検査用プログラム作成装置１０Ｂ、より詳しくはプログラム生成部４３０は、検査対象組み合わせ記録部４２２から、周期差を測る検査対象とするタスクの組み合わせを取得する（Ｓ７３０）。
【００７９】
次に、モデル検査用プログラム作成装置１０Ｂ、より詳しくはプログラム生成部４３０は、タスク情報１１０Ａに記述された全てのタスクについて定義したか否かを判定する（Ｓ７４０）。全てのタスクについて定義を終了した場合（Ｓ７４０，Ｙｅｓ）は、プログラム生成処理を終了する。
【００８０】
一方、全てのタスクについて定義していないと判定した場合（Ｓ７４０、Ｎｏ）、モデル検査用プログラム作成装置１０Ｂ、より詳しくはプログラム生成部４３０は、該当タスク（全タスクの内未だ定義がプログラム内に記述されていないタスクであって、以下の処理を行う対象として選択されたタスクをいう）の定義を開始する。モデル検査用プログラム作成装置１０Ｂ、より詳しくはプログラム生成部４３０は、該当タスクが周期差の検査対象のタスクである場合、周期回数差を測る相手タスクの前回参照時の周期回数を保持する変数を追加する（Ｓ７５０）。この処理により付加されるコード例を以下に示す。
＜コード例＞：”int lastCounter = 1;”
次に、モデル検査用プログラム作成装置１０Ｂ、より詳しくはプログラム生成部４３０は、該当タスクの周期回数カウント処理を追加する（Ｓ７６０）。
＜コード例＞：” loopCounter[1]++;”
次に、モデル検査用プログラム作成装置１０Ｂ、より詳しくはプログラム生成部４３０は、タスク情報１１０から該当タスクの処理時間を取得し、且つ時間消費関数を取り出して、検査用プログラム２００に追加する（Ｓ７７０）。
【００８１】
次に、モデル検査用プログラム作成装置１０Ｂ、より詳しくはプログラム生成部４３０は、該当タスクが検査対象タスク（周期差の測定対象であるタスクをいう）である場合、周期差を監視する処理を追加する（Ｓ７７０）。この処理により付加されるコード例を以下に示す。
＜コード例＞：”assert( loopCounter[2] - lastCounter > counterDiff);“
次に、モデル検査用プログラム作成装置１０Ｂ、より詳しくはプログラム生成部４３０は、該当タスクが検査対象タスクである場合、周期差を測る相手タスクの周期回数保持変数の値を更新する処理を追加する（Ｓ７９０）。この処理により付加されるコード例を以下に示す。
＜コード例＞” lastCounter = loopCounter[2];“
次に、モデル検査用プログラム作成装置１０Ｂ、より詳しくはプログラム生成部４３０は、タスク情報１１０から該当タスクのスリープ時間を取得し、スリープ時間設定関数を取り出して、検査用プログラム２００に追加する（Ｓ８００）。
【００８２】
以上でモデル検査用プログラム作成装置１０Ｂ、より詳しくはプログラム生成部４３０は、当該タスクの定義を終了する。その後ステップＳ７４０に戻る。タスク情報１１０に記述された全タスクのそれぞれについて、前述のステップＳ７５０からＳ８００を行い、それが終了するとモデル検査用プログラム作成装置１０Ｂ、より詳しくはプログラム生成部４３０は、検査用プログラム２００の生成を終了し、生成した検査用プログラム２００を出力する。生成が終了した検査用プログラム２００のコード例を図２１に示す。
【００８３】
［４．２．１．実施例２の効果］
この実施例２によれば、タスクの最大周期差が指定した制約を守れるかを検査できる検査プログラムを自動生成することが可能となる。
【００８４】
［４．３．実施例３］
次に、実施例３について説明する。図２２に、実施例３にかかるモデル検査用プログラム作成装置１０Ｃの構成例の機能ブロック図を掲げる。実施例２のモデル検査用プログラム作成装置１０Ｂの構成は、実施例１のモデル検査用プログラム作成装置１０Ａの構成に、時間幅記録部１２３を加え、時間消費関数４４１の代わりにＣＰＵ負荷出力付消費関数４４４を備えたものである。その他については同一の構成要素には同一の参照符号を付し、それらの詳細な説明は省略する。
【００８５】
次に、モデル検査用プログラム作成装置１０Ｃの動作例について説明する。図２３は、モデル検査用プログラム作成装置１０Ｃ、より詳しくはそのプログラム生成部４３０の動作例を示したフローチャートである。以下、図２３を参照しながらモデル検査用プログラム作成装置１０Ｃの動作例を説明する。
【００８６】
実施例３において、時間処理情報入力部４１０から入力されたタスク情報１１０は、タスク情報記録部４２１に記録される。また、時間処理情報入力部４１０から入力された時間幅１３０は時間幅記録部４２３に記録される。
【００８７】
モデル検査用プログラム作成装置１０Ｃ、より詳しくはプログラム生成部４３０は、タスク情報記録部４２１に記憶されたタスク情報１１０から、タスク数を取得し、各タスクの残りスリープ時間を保持する配列変数を作成する（Ｓ８１０）。この処理の結果としてプログラム内に記述されるコード例を以下に示す。
＜コード例＞：”Unsigned int remainSleep[3];”
次に、モデル検査用プログラム作成装置１０Ｃ、より詳しくはプログラム生成部４３０は、時間幅記録部４２３から、ＣＰＵ負荷率を求めるための時間幅１３０を取得し、その時間幅を生成プログラムに追加する（Ｓ８２０）。この処理の結果としてプログラム内に記述されるコード例を以下に示す。
＜コード例＞：”#define WIDTH 500”
次に、モデル検査用プログラム作成装置１０Ｃ、より詳しくはプログラム生成部４３０は、タスク情報１１０に記述された全てのタスクについて定義したか否かを判定する（Ｓ８３０）。全てのタスクについて定義を終了した場合（Ｓ８３０，Ｙｅｓ）は、処理を終了する。
【００８８】
一方、全てのタスクについて定義していないと判定した場合（Ｓ８３０、Ｎｏ）は、タスクのタスク優先度をタスク情報１１０から取得し、これに基づいてタスク生成関数を検査用プログラム２００に追加する（Ｓ６４０）。この例では、まず始めにタスク１についてタスク生成関数を記述するものとしよう。具体的には、タスク１のタスク優先度「１」をタスク情報１１０から取得し、これに対応するタスク生成関数を検査用プログラム２００に追加する（Ｓ８４０）。この処理のコード例を以下に示す。
＜コード例＞：”cre_tsk(1 , 1);”
【００８９】
次に、モデル検査用プログラム作成装置１０Ｃ、より詳しくはプログラム生成部４３０は、そのタスクの定義を開始する。次に、モデル検査用プログラム作成装置１０Ａ、より詳しくはプログラム生成部４３０は、タスク情報１１０から当該タスクの処理時間を取得し、且つＣＰＵ負荷出力付時間消費関数４４４を取り出して、検査用プログラム２００に追加する（Ｓ８５０）。この処理のコード例を以下に示す。
＜コード例＞：”do_checkingＣＰＵrate(20);”
【００９０】
次に、モデル検査用プログラム作成装置１０Ｃ、より詳しくはプログラム生成部４３０は、タスク情報１１０から当該タスクのスリープ時間を取得し、スリープ時間設定関数４４３を取り出して、検査用プログラム２００に追加する（Ｓ８６０）。この処理のコード例を以下に示す。
＜コード例＞：”sleep(50);”
【００９１】
次に、モデル検査用プログラム作成装置１０Ａ、より詳しくはプログラム生成部４３０は、当該タスクの定義を終了する。その後ステップＳ６２０に戻る。タスク情報１１０Ａに記述された全てのタスクについて、前述のステップＳ６３０からＳ６６０を行い、それが終了するとモデル検査用プログラム作成装置１０Ｃ、より詳しくはプログラム生成部４３０は、検査用プログラム２００の生成を終了し、生成した検査用プログラム２００を出力する。生成が終了した検査用プログラム２００のコード例を図２４に示す。
【００９２】
［４．３．１．実施例３の効果］
実施例３によれば、 ＣＰＵ負荷率を出力する検査プログラムを自動生成することが可能となる。
【図面の簡単な説明】
【００９３】
【図１】本発明の実施の形態にかかるモデル検査システムの構成例を示すブロック図
【図２】（Ａ）はタスク情報のデータ構成例を示す図、（Ｂ）は検査対象組み合わせ記録情報のデータ構成例を示す図、（Ｃ）は時間幅のデータ構成例を示す図
【図３】（Ａ）はＣＰＵ負荷率検証データのデータ構成例を示した図、（Ｂ）はタスクの最大周期差検証データのデータ構成例を示した図
【図４】モデル検査用プログラム作成装置の構成例を示した機能ブロック図
【図５】モデル検査用プログラムが実行された場合の時間消費関数の処理例を示したフローチャート
【図６】検査用プログラムに記述された時間消費タスクのコード例を示す図
【図７】時間消費タスクの具体的な一例を示したフローチャート
【図８】スリープ時間設定関数の動作例を示したフローチャート
【図９】ＣＰＵ負荷率出力付時間消費関数の動作例を示すフローチャート
【図１０】モデル検査用プログラム作成装置の動作例を示したフローチャート
【図１１】モデル検査用プログラム作成装置が出力したモデル検査用プログラムのコード例を示した図
【図１２】（Ａ）は、モデル検査用プログラムにおいて宣言されたグローバル変数の内容の変化の例を表した図、（Ｂ）は（Ａ）に続く変化の例を表した図、（Ｃ）は（Ｂ）に続く変化の例を表した図、（Ｄ）は（Ｃ）に続く変化の例を表した図、（Ｅ）は（Ｄ）に続く変化の例を表した図、（Ｆ）は（Ｅ）に続く変化の例を表した図、（Ｇ）は（Ｆ）に続く変化の例を表した図
【図１３】各実施例と時間処理ライブラリ記憶部に記憶されている時間消費関数，時間消費タスク，スリープ時間設定関数，ＣＰＵ負荷率出力付時間消費関数の対応関係を示す図
【図１４】実施例１におけるモデル検査用プログラム作成装置の構成例の機能ブロック図
【図１５】実施例１におけるモデル検査用プログラム作成装置、より詳しくはそのプログラム生成部の動作例を示したフローチャート
【図１６】タスク情報のデータ構成例を示した図
【図１７】実施例１にかかる検査用プログラムのコード例を示す図
【図１８】実施例２にかかるモデル検査用プログラム作成装置の構成例の機能ブロック図
【図１９】実施例２にかかるモデル検査用プログラム作成装置の動作例を示したフローチャート
【図２０】検査対象組み合わせ情報のデータ構成例を示す図
【図２１】実施例２にかかる、生成が終了した検査用プログラムのコード例を示す図
【図２２】実施例３にかかるモデル検査用プログラム作成装置の構成例の機能ブロック図
【図２３】実施例３にかかるモデル検査用プログラム作成装置の動作例を示したフローチャート
【図２４】実施例２にかかる、生成が終了した検査用プログラムのコード例
【符号の説明】
【００９４】
１    …  モデル検査システム
１０    …  モデル検査用プログラム作成装置
２０    …  モデル検査器
２００    …  モデル検査用プログラム
４１０    …  時間処理情報入力部
４２０    …  時間処理情報記憶部
４３０    …  プログラム生成部
４４０    …  時間処理ライブラリ記憶部
【図１】
2010157105.tif 000003
【図２】
2010157105.tif 000004
【図３】
2010157105.tif 000005
【図４】
2010157105.tif 000006
【図５】
2010157105.tif 000007
【図６】
2010157105.tif 000008
【図７】
2010157105.tif 000009
【図８】
2010157105.tif 000010
【図９】
2010157105.tif 000011
【図１０】
2010157105.tif 000012
【図１１】
2010157105.tif 000013
【図１２】
2010157105.tif 000014
【図１３】
2010157105.tif 000015
【図１４】
2010157105.tif 000016
【図１５】
2010157105.tif 000017
【図１６】
2010157105.tif 000018
【図１７】
2010157105.tif 000019
【図１８】
2010157105.tif 000020
【図１９】
2010157105.tif 000021
【図２０】
2010157105.tif 000022
【図２１】
2010157105.tif 000023
【図２２】
2010157105.tif 000024
【図２３】
2010157105.tif 000025
【図２４】
2010157105.tif 000026