JP2010157105A - モデル検査用プログラム作成装置 - Google Patents
モデル検査用プログラム作成装置 Download PDFInfo
- Publication number
- JP2010157105A JP2010157105A JP2008335128A JP2008335128A JP2010157105A JP 2010157105 A JP2010157105 A JP 2010157105A JP 2008335128 A JP2008335128 A JP 2008335128A JP 2008335128 A JP2008335128 A JP 2008335128A JP 2010157105 A JP2010157105 A JP 2010157105A
- Authority
- JP
- Japan
- Prior art keywords
- task
- time
- remaining
- sleep
- function
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
【課題】モデル検査において時間スケジューリングを想定したモデルを扱うことを可能とし、また必要に応じてCPU負荷率・タスクの最大周期差を検証する事を可能とする。
【解決手段】並行して実行される複数のタスクについて、各タスクの優先度、処理時間、及びスリープ時間を含む情報であるタスク情報を記憶する時間処理情報記憶部と、タスク情報に記述された各タスクについてタスクの定義を記述し、各タスクの定義内に時間消費関数を呼び出す記述を加えるとともに、スリープ時間設定消費関数を呼び出す記述を加えるプログラム生成部と、時間消費関数の定義及びスリープ時間設定消費関数の定義を記憶する時間処理ライブラリ記憶部とを有するモデル検査用プログラム作成装置。
【選択図】図14
【解決手段】並行して実行される複数のタスクについて、各タスクの優先度、処理時間、及びスリープ時間を含む情報であるタスク情報を記憶する時間処理情報記憶部と、タスク情報に記述された各タスクについてタスクの定義を記述し、各タスクの定義内に時間消費関数を呼び出す記述を加えるとともに、スリープ時間設定消費関数を呼び出す記述を加えるプログラム生成部と、時間消費関数の定義及びスリープ時間設定消費関数の定義を記憶する時間処理ライブラリ記憶部とを有するモデル検査用プログラム作成装置。
【選択図】図14
Description
本発明は、モデル検査用プログラム作成装置に関し、より詳しくは、時間によるスケジューリングを考慮したモデル検査用プログラムを自動生成できる、検査用プログラム作成装置に関する。
ソフトウェアが複雑化してきたことでこれまで以上に誤りが混入しやすくなり、さらに人の手では仕様を網羅した検証が困難になってきている。また、システムの設計段階で誤りが混入すると、経験や知識にない誤りは発見しづらい上に、後工程で発見されたものは取り除くために膨大なコストがかかる。そのため、仕様の誤りの早期発見及び仕様を網羅的に検証できる取り組みが必要不可欠になってきている。
このような問題を解決する手段として、組み込みシステムなど装置制御を主な目的とするソフトウェアを対象に、上流工程で不具合を早期発見する方法として、形式的手法の一つであるモデル検査が着目されている。モデル検査とはシステムの仕様を状態遷移モデルで表現し、システムが満たすべき性質(検証条件)を論理式で記述し、状態遷移モデルが論理式を満たすかどうかを検証することで仕様の正しさを証明する手法である。設計者が状態遷移モデルの作成を行い、必要な検証条件を洗い出した上でモデル検査を実行するとモデル検査器が網羅的にかつ自動的に検証し、検証条件を満たしているかどうかを検証する。もし、状態遷移モデルが検証条件を満たしていなければ、モデル検査器は、その状態に至る状態遷移系列を反例として出力する。この反例を解析し、モデルが検証条件を満たさない原因を突き止めることで仕様の不備を発見することが可能である。
ところで、組込みシステムにおいては、周期タスクの仕様充足性を保証することが重要である。たとえば、CPU負荷率、タスクの周期差、優先度逆転現象の検査が挙げられる。このような仕様充足性検査技術の1つとして、モデル検査技術が挙げられる。ところが、仕様充足性検査の前提となる、優先度の設定や時間によるスケジューリングの両方を扱えるモデル検査技術はない。そのため、時間を前提としたモデル検査ができるような技術を提供する必要があった。
上記のような必要性に応える技術として、スケジューリング解析装置、スケジューリング解析方法及びスケジューリング解析用プログラムを記録した媒体が提案されている(特許文献1)。
この技術は、周期タスクと非周期タスクの情報を設定すると、その設定値でスケジューリングが可能かどうかを計算式により解析する。周期タスクの情報として、優先度、周期、処理時間、デッドライン時間を入力する。非周期タスクの情報として、実行時間、処理頻度相対比を入力する。上記の入力に基づいて、周期タスクのシミュレーションを行い、周期タスクのシミュレーション結果をもとに、デッドラインブレークが起こらないよう最適な非周期タスクの実行時間を計算する。
特開2000-47884号公開公報
上記従来技術では、与えられた時間設定によるスケジューリングが可能かどうかを検査できるが、スケジューリングを組み合わせたモデル検査上で、条件式の検証と組み合わせた網羅的な検査は行うことができなかった。
本発明の目的は、モデル検査において時間スケジューリングを想定したモデルを扱うことを可能とし、また必要に応じてCPU負荷率・タスクの最大周期差を検証する事を可能とする技術を提供することにある。
上記課題を解決するための手段として、本発明は以下の特徴を有する。
請求項1に記載の発明は、並行して実行される複数のタスクについて、各タスクの優先度、処理時間、及びスリープ時間を含む情報であるタスク情報を記憶する第1の記憶手段と、
前記タスク情報に記述された各タスクについてタスクの定義を記述し、各タスクの定義内に時間消費関数を呼び出す記述を加えるとともに、スリープ時間設定消費関数を呼び出す記述を加えるプログラム生成手段と、
前記時間消費関数の定義及びスリープ時間設定消費関数の定義を記憶する第2の記憶手段と
を有し、
前記時間消費関数は、自タスクの残りの処理時間が0であるか否かの判定をおこない、残りの処理時間が0であると判定した場合、時間消費関数の処理をそのまま終了し、一方、残りの処理時間が0でないと判定した場合、自タスクの残り処理時間を所定の値減算し、つぎに、他タスクの残りスリープ時間を所定の値減算し、他タスクの残りスリープ時間が0であるか否かの判定を行い、残りの処理時間が0であると判定した場合、当該他タスクを起動させ、一方、残りのスリープ時間が0でないと判定した場合、再び自タスクの残りの処理時間が0であるか否かの判定に戻る処理を行う関数であり、
前記スリープ時間設定関数は、指定されたスリープ時間を、残りスリープ時間保持変数に設定し、次に、自タスクをスリープ状態にする関数である
ことを特徴とする、モデル検査用プログラム作成装置である
請求項1に記載の発明は、並行して実行される複数のタスクについて、各タスクの優先度、処理時間、及びスリープ時間を含む情報であるタスク情報を記憶する第1の記憶手段と、
前記タスク情報に記述された各タスクについてタスクの定義を記述し、各タスクの定義内に時間消費関数を呼び出す記述を加えるとともに、スリープ時間設定消費関数を呼び出す記述を加えるプログラム生成手段と、
前記時間消費関数の定義及びスリープ時間設定消費関数の定義を記憶する第2の記憶手段と
を有し、
前記時間消費関数は、自タスクの残りの処理時間が0であるか否かの判定をおこない、残りの処理時間が0であると判定した場合、時間消費関数の処理をそのまま終了し、一方、残りの処理時間が0でないと判定した場合、自タスクの残り処理時間を所定の値減算し、つぎに、他タスクの残りスリープ時間を所定の値減算し、他タスクの残りスリープ時間が0であるか否かの判定を行い、残りの処理時間が0であると判定した場合、当該他タスクを起動させ、一方、残りのスリープ時間が0でないと判定した場合、再び自タスクの残りの処理時間が0であるか否かの判定に戻る処理を行う関数であり、
前記スリープ時間設定関数は、指定されたスリープ時間を、残りスリープ時間保持変数に設定し、次に、自タスクをスリープ状態にする関数である
ことを特徴とする、モデル検査用プログラム作成装置である
請求項2に記載の発明は、並行して実行される複数のタスクについて、各タスクの優先度、処理時間、及びスリープ時間を含む情報であるタスク情報と、CPU負荷率を求める時間幅を記憶する第1の記憶手段と、
前記タスク情報に記述された各タスクについてタスクの定義を記述し、各タスクの定義内にCPU負荷率出力付時間消費関数を呼び出す記述を加えるとともに、スリープ時間設定消費関数を呼び出す記述を加えるプログラム生成手段と、
前記時間消費関数の定義及びスリープ時間設定消費関数の定義を記憶する第2の記憶手段と
を有し、
前記CPU負荷率出力付時間消費関数は、
自タスクの残りの処理時間が0であるか否かの判定をおこない、残りの処理時間が0であると判定した場合、時間消費関数の処理をそのまま終了し、一方、残りの処理時間が0でないと判定した場合、自タスクの残り処理時間を所定の値減算し、他タスクの残りスリープ時間を所定の値減算し、
次に、タスクが一つ以上起動中であるか否かを判定し、タスクが一つ以上起動中であると判定した場合、合計処理時間の値を1だけ増加させ、
次に残り時間幅時間が0であるか否かを判定し、残り時間幅時間が0であると判定した場合、CPU負荷率を計算し、
次に、他タスクの残りスリープ時間が0であるか否かの判定を行い、残りの処理時間が0であると判定した場合、当該他タスクを起動させ、一方、残りのスリープ時間が0でないと判定した場合、再び自タスクの残りの処理時間が0であるか否かの判定に戻る処理を行う関数であり、
前記スリープ時間設定関数は、指定されたスリープ時間を、残りスリープ時間保持変数に設定し、次に、自タスクをスリープ状態にする関数である
ことを特徴とする、モデル検査用プログラム作成装置である。
前記タスク情報に記述された各タスクについてタスクの定義を記述し、各タスクの定義内にCPU負荷率出力付時間消費関数を呼び出す記述を加えるとともに、スリープ時間設定消費関数を呼び出す記述を加えるプログラム生成手段と、
前記時間消費関数の定義及びスリープ時間設定消費関数の定義を記憶する第2の記憶手段と
を有し、
前記CPU負荷率出力付時間消費関数は、
自タスクの残りの処理時間が0であるか否かの判定をおこない、残りの処理時間が0であると判定した場合、時間消費関数の処理をそのまま終了し、一方、残りの処理時間が0でないと判定した場合、自タスクの残り処理時間を所定の値減算し、他タスクの残りスリープ時間を所定の値減算し、
次に、タスクが一つ以上起動中であるか否かを判定し、タスクが一つ以上起動中であると判定した場合、合計処理時間の値を1だけ増加させ、
次に残り時間幅時間が0であるか否かを判定し、残り時間幅時間が0であると判定した場合、CPU負荷率を計算し、
次に、他タスクの残りスリープ時間が0であるか否かの判定を行い、残りの処理時間が0であると判定した場合、当該他タスクを起動させ、一方、残りのスリープ時間が0でないと判定した場合、再び自タスクの残りの処理時間が0であるか否かの判定に戻る処理を行う関数であり、
前記スリープ時間設定関数は、指定されたスリープ時間を、残りスリープ時間保持変数に設定し、次に、自タスクをスリープ状態にする関数である
ことを特徴とする、モデル検査用プログラム作成装置である。
本発明によれば、モデル検査において時間スケジューリングを想定したモデルを扱うことが可能となり、また必要に応じてCPU負荷率・タスクの最大周期差を検証する事が可能となる。
以下、図面を参照しながら本発明の実施の形態について説明する。
[1.用語の定義]
まずはじめに、本明細書における用語の定義について述べる。
[1.用語の定義]
まずはじめに、本明細書における用語の定義について述べる。
(1)モデル検査技術
「モデル検査技術」とは、状態遷移を専用言語で記述し、特性を検証式として与えるとき、その検証式を満たしているか網羅的に検査する技術をいう。「モデル検査技術」によれば、タスクの切り替わるタイミングによって生じる不具合を検出できる。
「モデル検査技術」とは、状態遷移を専用言語で記述し、特性を検証式として与えるとき、その検証式を満たしているか網羅的に検査する技術をいう。「モデル検査技術」によれば、タスクの切り替わるタイミングによって生じる不具合を検出できる。
(2)周期タスク
「周期タスク」とは、周期的に実行されるタスクをいう。特に、本明細書において、「周期タスク」は、処理時間とスリープ時間が定められており、タスク1周において、決められた時間をかけて処理が実行されたあと、定められた時間の間スリープ状態になり、そのあと実行可能状態になるタスクを指すものとする。なお、「タスク」とは、OS(Operating System)から見た処理の実行単位をいう。
「周期タスク」とは、周期的に実行されるタスクをいう。特に、本明細書において、「周期タスク」は、処理時間とスリープ時間が定められており、タスク1周において、決められた時間をかけて処理が実行されたあと、定められた時間の間スリープ状態になり、そのあと実行可能状態になるタスクを指すものとする。なお、「タスク」とは、OS(Operating System)から見た処理の実行単位をいう。
(3)CPU負荷率
「CPU負荷率」とは、CPUが使用されている時間的な割合をいう。「CPU負荷率」は下記の式により決定される。
「CPU負荷率」とは、CPUが使用されている時間的な割合をいう。「CPU負荷率」は下記の式により決定される。
CPU負荷率(CPUPer[%])=100 × TotalDoingTime ÷ 任意の時間幅
上記式に置いて、「TotalDoingTime」とは、いずれかのタスクが処理を行っている時間の和を表す。
上記式に置いて、「TotalDoingTime」とは、いずれかのタスクが処理を行っている時間の和を表す。
[例]:時間幅を100msとする。1つの時間幅において、タスクAが処理を行う時間が30ms、タスクBが処理を行う時間が10msの場合、"TotalDoingTime"=40[ms]となり、下記式より
CPUPer[%]=100×40[ms]÷100[ms]=40[%]
この場合のCPU負荷率は40%となる。
CPUPer[%]=100×40[ms]÷100[ms]=40[%]
この場合のCPU負荷率は40%となる。
[2.構成例]
[2.1.モデル検査システム]
次に、本実施の形態にかかる装置及びシステムの構成例を説明する。図1は、本実施の形態にかかるモデル検査システムの構成例を示すブロック図である。モデル検査システム1は、モデル検査用プログラム作成装置10と、モデル検査器20とで構成される。
[2.1.モデル検査システム]
次に、本実施の形態にかかる装置及びシステムの構成例を説明する。図1は、本実施の形態にかかるモデル検査システムの構成例を示すブロック図である。モデル検査システム1は、モデル検査用プログラム作成装置10と、モデル検査器20とで構成される。
[2.1.1.検査用プログラム作成装置]
モデル検査用プログラム作成装置10は、例えばコンピュータ、ワークステーションなどの情報処理装置によって実現される装置である。この情報処理装置は、演算処理装置(CPU)、主メモリ(RAM)、読出し専用メモリ(ROM)、入出力装置(I/O)、及び必要な場合にはハードディスク装置等の外部記憶装置を具備している装置である。
モデル検査用プログラム作成装置10は、例えばコンピュータ、ワークステーションなどの情報処理装置によって実現される装置である。この情報処理装置は、演算処理装置(CPU)、主メモリ(RAM)、読出し専用メモリ(ROM)、入出力装置(I/O)、及び必要な場合にはハードディスク装置等の外部記憶装置を具備している装置である。
モデル検査用プログラム作成装置10は、タスク情報110,検査対象組み合わせ記録情報120、時間幅130を入力データとして受け取り、その処理結果として、時間処理付きモデル検査用プログラム(以下、単に「検査用プログラム」という)200を出力する。検査用プログラム200は、後述するモデル検査器20の入力として使用される。
図2は、タスク情報110,検査対象組み合わせ記録情報120、時間幅130のデータ構成例を示した図である。
図2(A)はタスク情報110のデータ構成の一例である。タスク情報110は、タスクごとに一つのレコード111を有し、各レコード111は、タスクを識別する情報(例えば、タスク名、タスクIDなど)を格納するタスク名フィールド112と、そのタスクの優先度を格納する優先度フィールド113と、そのタスクの処理時間を格納する処理時間フィールド114と、そのタスクのスリープ時間を格納するスリープ時間フィールド115とを有している。
図2(B)は、検査対象組み合わせ記録情報120のデータ構成の一例である。検査対象組み合わせ記録情報120は、周期差を測定する検査対象である2つのタスクを指定するフィールド121と、守られるべき周期差を指定するフィールド122とを有する。
図2(C)は、時間幅130のデータ構成例を示す。時間幅130は、CPU負荷率を測定する単位である時間幅の値を格納するフィールド131を有している。
図2(A)はタスク情報110のデータ構成の一例である。タスク情報110は、タスクごとに一つのレコード111を有し、各レコード111は、タスクを識別する情報(例えば、タスク名、タスクIDなど)を格納するタスク名フィールド112と、そのタスクの優先度を格納する優先度フィールド113と、そのタスクの処理時間を格納する処理時間フィールド114と、そのタスクのスリープ時間を格納するスリープ時間フィールド115とを有している。
図2(B)は、検査対象組み合わせ記録情報120のデータ構成の一例である。検査対象組み合わせ記録情報120は、周期差を測定する検査対象である2つのタスクを指定するフィールド121と、守られるべき周期差を指定するフィールド122とを有する。
図2(C)は、時間幅130のデータ構成例を示す。時間幅130は、CPU負荷率を測定する単位である時間幅の値を格納するフィールド131を有している。
[2.1.2.モデル検査器]
モデル検査器20(モデル検査ツールとも呼ばれる)は、例えばコンピュータ、ワークステーションなどの情報処理装置によって実現される装置である。この情報処理装置は、演算処理装置(CPU)、主メモリ(RAM)、読出し専用メモリ(ROM)、入出力装置(I/O)、及び必要な場合にはハードディスク装置等の外部記憶装置を具備している装置である。
モデル検査器20(モデル検査ツールとも呼ばれる)は、例えばコンピュータ、ワークステーションなどの情報処理装置によって実現される装置である。この情報処理装置は、演算処理装置(CPU)、主メモリ(RAM)、読出し専用メモリ(ROM)、入出力装置(I/O)、及び必要な場合にはハードディスク装置等の外部記憶装置を具備している装置である。
モデル検査器20は、例えば、タスクに設定された優先度に基づくタスク管理を行え(例えば、μIPRONなど)、且つ実時間を直接には扱わないモデル検査ツール(例えば、SPIN)を搭載したコンピュータで構成される。
モデル検査器20は、検証用モデルであるモデル検査用プログラム200と、システムとして望ましい振る舞いや発生しては困る性質を表現する検証用性質340を入力として受け付ける。モデル検査器20は、検証用モデル(モデル検査用プログラム200)が検証条件(検証用性質340)を満たしていなければ、その状態に至る状態遷移系列を反例330として出力する。また、モデル検査用プログラム200を検証した結果から得られる各時間幅におけるCPU負荷率検証データ310と、タスクの最大周期差検証データ320とを出力する。
図3はモデル検査器20が出力するCPU負荷率検証データ310及びタスクの最大周期差検証データ320のデータ構成例を示した図である。
図3(A)はCPU負荷率検証データ310のデータ構成例である。CPU負荷率検証データ310は、時間幅130により指定された時間幅の区間(スロット、又はウインドウ)ごとに一つのレコード311を有し、各レコード313は、検証の結果得られたその区間におけるCPU負荷率を格納するフィールド312を有している。
図3(A)はCPU負荷率検証データ310のデータ構成例である。CPU負荷率検証データ310は、時間幅130により指定された時間幅の区間(スロット、又はウインドウ)ごとに一つのレコード311を有し、各レコード313は、検証の結果得られたその区間におけるCPU負荷率を格納するフィールド312を有している。
図3(B)はタスクの最大周期差検証データ320のデータ構成例である。タスクの最大周期差検証データ320は、周期差を測定する検査対象である2つのタスクを指定するフィールド321と、守られるべき周期差を指定するフィールド322と、フィールド322で指定された周期差が守られたか否かの結果を示すフィールド323とを有している。
なお、図1に示した構成例では、図示の都合上、モデル検査用プログラム作成装置10とモデル検査器20とは別の装置であるように示したが、本発明がかかる構成に限定される趣旨ではなく、同一のコンピュータをモデル検査用プログラム作成装置10兼モデル検査器20として動作させる構成でも良いし、三台以上の複数のコンピュータを分散コンピュータとしてモデル検査用プログラム作成装置10兼モデル検査器20として動作させる構成でも良い。
[2.1.3.検査用プログラム作成装置]
次に、前述したモデル検査用プログラム作成装置10の、さらに具体的な構成例について述べる。図4に、モデル検査用プログラム作成装置10の構成例を示した機能ブロック図を掲げる。
次に、前述したモデル検査用プログラム作成装置10の、さらに具体的な構成例について述べる。図4に、モデル検査用プログラム作成装置10の構成例を示した機能ブロック図を掲げる。
モデル検査用プログラム作成装置10は、時間処理情報入力部410と、時間処理情報入力部410に接続された時間処理情報記録部420と、時間処理情報記録部420に接続されたプログラム生成部430と、プログラム生成部430に接続された時間処理ライブラリ記憶部440とを有している。時間処理情報記録部420は本発明の第1の記憶手段に相当し、プログラム生成部430は本発明のプログラム生成手段に相当し、時間処理ライブラリ記憶部440は本発明の第2の記憶手段に相当する。なお、本明細書中において、各機能や各処理に対応する「…部」、「…手段」等の仮想的回路ブロックを用いて実施の形態を説明している。また、「接続する」とは、情報若しくはデータの受け渡しが可能である状態を示しており、必ずしも物理的に接続されていることに限定されない。また、説明中に用いられる各部、各手段は、一対一に対応するハードウエア要素やソフトエウア要素によって構成される必要は必ずしもなく、複数のハードウエア要素やソフトエウア要素が協働して各部、各手段として機能する場合も本発明の技術的範囲内である。
[2.3.1.1.時間処理情報入力部]
時間情報入力部410は、本検査システム1の利用者、オペレータなどが時間処理を考慮した検査を行う際に必要となるタスク情報110,検査対象組み合わせ記録情報120、時間幅130の入力を促し、入力されたこれらタスク情報110,検査対象組み合わせ記録情報120、時間幅130を時間処理情報記録部420にデータとして渡す機能を有する。時間情報入力部410は、例えば、タスク情報110,検査対象組み合わせ記録情報120、時間幅130を利用者に入力させるためのGUI(グラフィカル・ユーザ・インターフェイス)である。
時間情報入力部410は、本検査システム1の利用者、オペレータなどが時間処理を考慮した検査を行う際に必要となるタスク情報110,検査対象組み合わせ記録情報120、時間幅130の入力を促し、入力されたこれらタスク情報110,検査対象組み合わせ記録情報120、時間幅130を時間処理情報記録部420にデータとして渡す機能を有する。時間情報入力部410は、例えば、タスク情報110,検査対象組み合わせ記録情報120、時間幅130を利用者に入力させるためのGUI(グラフィカル・ユーザ・インターフェイス)である。
[2.3.1.2.時間処理情報記録部]
時間処理情報記録部420は、時間情報入力部410から取得したタスク情報110,検査対象組み合わせ記録情報120、時間幅130を記録する機能を有する。時間処理情報記録部420は、より具体的には、タスク情報110を記憶保持するタスク情報記録部421,検査対象組み合わせ記録情報120を記憶保持する検査対象組み合わせ記録情報記録部422、時間幅130を記憶する時間幅記録部423を有している。
なお、タスク情報記録部421,検査対象組み合わせ記録情報記録部422、時間幅記録部423は必ずしも常に同時に必要ではない。
時間処理情報記録部420は、時間情報入力部410から取得したタスク情報110,検査対象組み合わせ記録情報120、時間幅130を記録する機能を有する。時間処理情報記録部420は、より具体的には、タスク情報110を記憶保持するタスク情報記録部421,検査対象組み合わせ記録情報120を記憶保持する検査対象組み合わせ記録情報記録部422、時間幅130を記憶する時間幅記録部423を有している。
なお、タスク情報記録部421,検査対象組み合わせ記録情報記録部422、時間幅記録部423は必ずしも常に同時に必要ではない。
[2.3.1.3.プログラム生成部]
プログラム生成部430は、タスク情報記録部421,検査対象組み合わせ記録情報記録部422、時間幅記録部423に記録されている情報に基づいて、時間処理ライブラリ記憶部440から必要な関数、若しくはタスクを抽出し、モデル検査用プログラム200に記述、追加する機能を有する。
プログラム生成部430は、タスク情報記録部421,検査対象組み合わせ記録情報記録部422、時間幅記録部423に記録されている情報に基づいて、時間処理ライブラリ記憶部440から必要な関数、若しくはタスクを抽出し、モデル検査用プログラム200に記述、追加する機能を有する。
[2.3.1.4.時間処理ライブラリ記憶部]
時間処理ライブラリ記憶部440は、時間消費関数441,時間消費タスク442,スリープ時間設定関数443,CPU負荷率出力付時間消費関数444それぞれの定義を記憶する。
時間処理ライブラリ記憶部440は、時間消費関数441,時間消費タスク442,スリープ時間設定関数443,CPU負荷率出力付時間消費関数444それぞれの定義を記憶する。
[2.3.1.4.1.時間消費関数]
時間消費関数441は、引数により指定された時間分の処理を行う関数であって、プログラム生成部430によりモデル検査用プログラム200内に記述される関数である。図5に、モデル検査用プログラム200が実行された場合の時間消費関数441の処理例を示したフローチャートを掲げる。ここでは、ある検証用プログラムのタスクAにおいて時間消費関数441が呼ばれた場合として、時間消費関数441の処理例を説明する。
時間消費関数441は、引数により指定された時間分の処理を行う関数であって、プログラム生成部430によりモデル検査用プログラム200内に記述される関数である。図5に、モデル検査用プログラム200が実行された場合の時間消費関数441の処理例を示したフローチャートを掲げる。ここでは、ある検証用プログラムのタスクAにおいて時間消費関数441が呼ばれた場合として、時間消費関数441の処理例を説明する。
時間消費関数441が呼び出されると、タスクAの残りの処理時間が0であるか否かの判定が行われる(ステップS10、以下単に「S」と標記する)。残りの処理時間が0であると判定された場合(S10,Yes)は、時間消費関数441の処理はそのまま終了する。
一方、残りの処理時間が0でないと判定された場合(S10,No)は、自タスク(この例ではタスクA)の残り処理時間を1だけ減算する(S20)。つぎに、他タスク(この例ではタスクA以外のタスクであって検証対象に含まれる各タスク(以下、タスクXと呼ぶ)の残りスリープ時間を1だけ減算する(S30)。
続いて、タスクXの残りスリープ時間が0であるか否かの判定が行われる(ステップS40)。残りの処理時間が0であると判定された場合(S40,Yes)、タスクXをWakeupする(S50)。なお、WakeupしたタスクXが自タスク(タスクA)より優先度が高い場合、タスクAの処理は停止する。後にタスクAに実行権が戻った際に、停止した位置の続きから実行される。
一方、S40の判定において残りのスリープ時間が0でないと判定された場合(S50,No)、再びS10の処理に戻る。以上で時間消費関数の説明を終了する。
一方、S40の判定において残りのスリープ時間が0でないと判定された場合(S50,No)、再びS10の処理に戻る。以上で時間消費関数の説明を終了する。
[2.3.1.4.2.時間消費タスク]
次に、時間消費タスク442について説明する。時間消費タスク442は、検査対象に含まれる全タスクがスリープ状態になったとき、実行権限を与えられ、時間を消費する(時間を指定された単位進める)ことのみ実行するタスクである。図6は、検査用プログラム200に記述された時間消費タスク442のコード例を示す図である。図7に、時間消費タスク442の具体的な一例を示したフローチャートを掲げる。
次に、時間消費タスク442について説明する。時間消費タスク442は、検査対象に含まれる全タスクがスリープ状態になったとき、実行権限を与えられ、時間を消費する(時間を指定された単位進める)ことのみ実行するタスクである。図6は、検査用プログラム200に記述された時間消費タスク442のコード例を示す図である。図7に、時間消費タスク442の具体的な一例を示したフローチャートを掲げる。
時間消費タスク442では、時間消費タスク442に実行権が渡されると(S110,Yes)、関数”do_something(1)を実行する、すなわち単位1の時間が消費される処理が行われる(S120)。その後ステップS110に戻る。一方、時間消費タスク442に実行権が渡されていない場合(S110,No)、時間消費は実行されずに時間消費タスク442は終了する。なお、時間消費タスク442の実行条件が満たされているか否か、すなわち時間消費タスク442の実行権を渡すか否かの判定は、タスクの優先度を管理するツール、例えばμIPRON等によって行われればよい。
[2.3.1.4.3.スリープ時間設定関数443]
次に、スリープ時間設定関数443について説明する。スリープ時間設定関数443は、引数により指定された時間の長さだけ、該当するタスクをスリープ状態にする機能を有する。図8に、スリープ時間設定関数443の動作例を示したフローチャートを掲げる。図8に示す動作例によれば、スリープ時間設定関数443が実行されると、まず引数により指定されたスリープ時間を、残りスリープ時間保持変数に設定する(S210)。次に、自タスクをスリープ状態にする(S220)。以上で、スリープ時間設定関数443の処理は終了する。
次に、スリープ時間設定関数443について説明する。スリープ時間設定関数443は、引数により指定された時間の長さだけ、該当するタスクをスリープ状態にする機能を有する。図8に、スリープ時間設定関数443の動作例を示したフローチャートを掲げる。図8に示す動作例によれば、スリープ時間設定関数443が実行されると、まず引数により指定されたスリープ時間を、残りスリープ時間保持変数に設定する(S210)。次に、自タスクをスリープ状態にする(S220)。以上で、スリープ時間設定関数443の処理は終了する。
[2.3.1.4.4.CPU負荷率出力付時間消費関数]
次に、CPU負荷率出力付時間消費関数444について説明する。CPU負荷率出力付時間消費関数444は、時間幅130により指定された時間幅ごとにCPU負荷率を求めて出力しながら、時間の消費を行う機能を有する。図9は、検査用プログラム200が実行された場合のCPU負荷率出力付時間消費関数444の動作例を示すフローチャートである。図9に示す例においては、ある検証用プログラム200に含まれるタスクAにおいてCPU負荷率出力付時間消費関数444が呼ばれた場合として、CPU負荷率出力付時間消費関数444の処理例を説明する。
次に、CPU負荷率出力付時間消費関数444について説明する。CPU負荷率出力付時間消費関数444は、時間幅130により指定された時間幅ごとにCPU負荷率を求めて出力しながら、時間の消費を行う機能を有する。図9は、検査用プログラム200が実行された場合のCPU負荷率出力付時間消費関数444の動作例を示すフローチャートである。図9に示す例においては、ある検証用プログラム200に含まれるタスクAにおいてCPU負荷率出力付時間消費関数444が呼ばれた場合として、CPU負荷率出力付時間消費関数444の処理例を説明する。
CPU負荷率出力付時間消費関数444が呼び出されると、タスクAの残りの処理時間が0であるか否かの判定が行われる(ステップS310)。ここで、「残りの処理時間」とは、そのタスクの処理時間114の初期値から消費された時間分を減算したものをいう。残りの処理時間が0であると判定された場合(S310,Yes)は、CPU負荷率出力付時間消費関数444の処理はそのまま終了する。
一方、残りの処理時間が0でないと判定された場合(S310,No)は、自タスク(この例ではタスクA)の残り処理時間を1だけ減算する(S320)。つぎに、他タスク(この例ではタスクA以外のタスクであって検証対象に含まれる各タスク(以下、タスクXと呼ぶ)の残りスリープ時間を1だけ減算する(S330)。ここで、「残りスリープ時間」とは、そのタスクのスリープ時間115の初期値から消費された時間分を減算した値をいう。
次に、タスクが一つ以上起動中であるか否かが判定される(S340)。タスクが一つ以上起動中であると判定された場合(S340,Yes)、合計処理時間の値を1だけ増加させる(S350)。ここで、「合計処理時間」とは、ある時間幅内における少なくとも一つ以上のタスクが起動状態である時間の合計をいう。すなわち、いずれかのタスクが処理を行っている時間の和である。その後後述するステップS360に進む。一方、タスクがいずれも起動中でないと判定された場合(S340,No)、そのまま後述するステップS360に進む。
続いて、残り時間幅時間が0であるか否かが判定される(S360)。「残り時間幅時間」とは、時間幅131からCPU負荷率測定開始時から現在までの経過時間を引いた時間をいう。残り時間幅時間が0であると判定された場合(S360、Yes)、CPU負荷率を計算し、出力する(S380)。さらに、残り時間幅時間、合計処理時間を初期化する(S390)。その後後述するステップS400に進む。
続いて、他タスクであるタスクX(複数である場合あり)の残りスリープ時間が0であるか否かの判定が行われる(ステップS400)。残りスリープ時間が0であると判定された場合(S400,Yes)、そのタスクXをWakeup(起動)し(S410)、前述のステップS310に戻る。なお、WakeupしたタスクXが自タスク(タスクA)より優先度が高い場合、タスクAの処理は停止させられる。後にタスクAに実行権が戻った際に、停止した位置の続きから実行される。
一方、S400の判定において、タスクXの残りのスリープ時間が0でないと判定された場合(S400,No)、そのままS310の処理に戻る。
以上でCPU負荷率出力付時間消費関数444、並びに時間処理ライブラリ記憶部440の説明を終了する。また、図1を参照した検証用プログラム作成装置10の構成例の説明も終了する。
[3.動作例]
次に、モデル検査システム1,より詳しくはモデル検査用プログラム作成装置10の動作例について説明する。図10は、モデル検査用プログラム作成装置10の動作例を示したフローチャート、図11はモデル検査用プログラム作成装置10が出力したモデル検査用プログラム200のコード例を示した図、図12はモデル検査用プログラム200において宣言されたグローバル変数の内容の変化の例を表した図である。以下、図10から図12を参照しながら、モデル検査用プログラム作成装置10の動作例を説明する。
次に、モデル検査システム1,より詳しくはモデル検査用プログラム作成装置10の動作例について説明する。図10は、モデル検査用プログラム作成装置10の動作例を示したフローチャート、図11はモデル検査用プログラム作成装置10が出力したモデル検査用プログラム200のコード例を示した図、図12はモデル検査用プログラム200において宣言されたグローバル変数の内容の変化の例を表した図である。以下、図10から図12を参照しながら、モデル検査用プログラム作成装置10の動作例を説明する。
まず、モデル検査用プログラム作成装置10の利用者、若しくはオペレータなどは、時間処理情報入力部410を用いてタスク情報110,検査対象組み合わせ記録情報120、時間幅130の入力を行っておく必要がある。以下の説明はこれら情報の入力が完了している事を前提として進める。
モデル検査用プログラム作成装置10、より詳しくはプログラム生成部430は検査対象に含まれる全タスクのスリープ時間を保持する変数配列をグローバル変数として、検査用プログラム200内に定義する(S510、図11,コード箇所1103)。なお、ここでの説明では、検査対象に含まれるタスクはタスクA,タスクB、タスク3の3つであるものとする。
生成される変数配列及びその記憶内容の例を図12に示す。この図に示した例では、変数配列1200は、タスクA,タスクB、タスクCそれぞれの残りスリープ時間の値を格納する要素値格納域1201A,1201B,1201Cを有している。図12(A)は、ステップS510の段階における変数配列1200であって、要素値格納域1201A,1201B,1201Cにはスリープ時間の値はいずれも格納されていない。図12(B)から図12(H)は、検査用プログラム200が実行された際の要素値格納域1201A,1201B,1201C内の値の変化を説明するための図である。これらについては後述する。
図10に戻り、モデル検査用プログラム作成装置10、より詳しくはプログラム生成部430の動作例の説明を続ける。
前記ステップS510に続いて、モデル検査用プログラム作成装置10、より詳しくはプログラム生成部430は時間消費関数441の定義を検査用プログラム200内に記述する(S520)。次に、モデル検査用プログラム作成装置10、より詳しくはプログラム生成部430はスリープ時間設定関数443の定義を検査用プログラム200内に記述する(S530)。次に、モデル検査用プログラム作成装置10、より詳しくはプログラム生成部430は時間消費タスク442の定義を検査用プログラム200内に記述する(S540)。なお、ステップS520からS540の順序は入れ替え可能であり、ここに述べる例に限られるものではない。
前記ステップS510に続いて、モデル検査用プログラム作成装置10、より詳しくはプログラム生成部430は時間消費関数441の定義を検査用プログラム200内に記述する(S520)。次に、モデル検査用プログラム作成装置10、より詳しくはプログラム生成部430はスリープ時間設定関数443の定義を検査用プログラム200内に記述する(S530)。次に、モデル検査用プログラム作成装置10、より詳しくはプログラム生成部430は時間消費タスク442の定義を検査用プログラム200内に記述する(S540)。なお、ステップS520からS540の順序は入れ替え可能であり、ここに述べる例に限られるものではない。
次に、モデル検査用プログラム作成装置10、より詳しくはプログラム生成部430は個々のタスクについて、タスクの定義の記述を開始する(S550)。なお、図10においては「タスクX」と標記しているが、「X」はA,B、Cのいずれかを表す変数を示している。
次に、モデル検査用プログラム作成装置10、より詳しくはプログラム生成部430はS550で開始したタスクXの定義に、消費関数を呼び出す記述を加える(S560)。次に、モデル検査用プログラム作成装置10、より詳しくはプログラム生成部430は、タスクXの定義にスリープ時間設定消費関数443を呼び出す記述を加える(S570)。次に、検査用プログラム作成装置10、より詳しくはプログラム生成部430は、タスクXの定義を終了する記述を加える(S580)。
次に、モデル検査用プログラム作成装置10、より詳しくはプログラム生成部430は全てのタスクの定義の記述が終了したか否かを判定する(S590)。終了したと判定された場合(S590,Yes)には、検査用プログラムの作成を終了する。作成された検査用プログラム200はオペレータの指示に応じて、または自動的に出力される。一方、終了していないと判定された場合(S590,No)には、ステップS550に戻り、まだ定義の記述がされていない別のタスクについてステップS550からS580を実行する。
図11は、モデル検査用プログラム作成装置10から出力される検査用プログラム200のコード例を示した図である。検査用プログラム200のコード1100には、配列変数の定義1101が含まれる。定義1101に続いて、3つのタスクA,B.Cそれぞれに対応するタスクの定義1102A,1102B,1102Cが含まれる。タスクの定義1102A,1102B,1102Cのそれぞれには、時間消費関数441を呼び出す記述1110及びスリープ時間設定関数443を呼び出す記述1120が含まれている。なお、時間消費関数441の引数としてそれぞれのタスクに与えられた処理時間(図2,処理時間114参照)の値が設定される。また、スリープ時間設定関数443の引数としてそれぞれのタスクに与えられたスリープ時間(図2,スリープ時間115参照)の値が設定される。タスクの定義1102Cに続いて、時間消費タスク442の定義1103が含まれる。
図12は、図11に示した検査用プログラム200のコード1100を実行した際の変数配列1200における残りスリープ時間の推移を示した図である。なお、この検査用プログラム200に含まれるタスクは、タスク1,タスク2,タスク3の3つであり、それぞれの処理時間、スリープ時間は図12に示すとおり、7と80,55と100,32と120であるものとする。
図12(A)は、変数配列にいまだスリープ時間の値が格納されていない状態を示している。
図12(B)は、タスク1が実行されて時間消費関数441による時間消費が行われた(この例では時間が7消費され、残り処理時間が0となり、スリープ時間設定関数が起動した)後、タスク1内のスリープ時間設定関数443が起動した時点の変数配列1200の内容を示している。このときタスク1内のスリープ時間設定関数443はタスク1のスリープ時間(図2、スリープ時間115参照)の値を要素値格納域1201Aに格納する。この例ではスリープ時間の値は「80」である。
図12(B)は、タスク1が実行されて時間消費関数441による時間消費が行われた(この例では時間が7消費され、残り処理時間が0となり、スリープ時間設定関数が起動した)後、タスク1内のスリープ時間設定関数443が起動した時点の変数配列1200の内容を示している。このときタスク1内のスリープ時間設定関数443はタスク1のスリープ時間(図2、スリープ時間115参照)の値を要素値格納域1201Aに格納する。この例ではスリープ時間の値は「80」である。
次に、タスク2の実行に移る。タスク2の実行に移ると、タスク2に含まれる時間消費関数が時間を1ずつ消費していく。図12(C)は、図12(B)の状態から1だけ時間が消費されたときの時点の変数配列1200の内容を示している。要素値格納域1201Aに格納されたスリープ時間の値は「80」から「79」に減らされる。
なお、タスク2に含まれる時間消費関数441の引数はこの例では「55」である。タスクBに含まれる時間消費関数441が起動した後、時間が55消費される(。図12(D)にこのときの変数配列1200の内容を示す)と、タスク2に含まれるスリープ時間設定関数443が起動するタスク2に含まれるスリープ時間設定関数443は、タスク2のスリープ時間の値「100」を要素値格納域1201Bに格納する。図12(E)はタスク2に含まれるスリープ時間設定関数443が起動した時点での変数配列1200の内容を示している。要素値格納域1201Aに格納されたスリープ時間の値は「80」から55だけ時間が経過して「25」まで減じられており、また要素値格納域1201Bには新たにタスクBのスリープ時間の値「100」が格納されている。
次に、タスク3の実行に移る。タスク3の実行に移ると、タスク3に含まれる時間消費関数が時間を1ずつ消費していく。図12(F)は、図12(E)の状態から1だけ時間が消費されたときの時点の変数配列1200の内容を示している。要素値格納域1201Aに格納されたスリープ時間の値は「25」から「24」に減らされ、要素値格納域1201Bに格納されたスリープ時間の値は「100」から「99」に減らされている。
なお、タスク3に含まれる時間消費関数の引数はこの例では「32」である。
なお、タスク3に含まれる時間消費関数の引数はこの例では「32」である。
さて、その後図12(F)の状態から24だけ時間が消費されたものとする。この時点の変数配列1200の内容図12(G)に示す。要素値格納域1201Aに格納されたスリープ時間の値は「0」となる、要素値格納域1201Bに格納されたスリープ時間の値は「75」となる。
ここで、タスク1の残りスリープ時間が「0」となったため、タスク3の残り実行時間は「7」残っているが、より優先度の高いタスク1に実行権が移ることとなる。
この後タスク1の時間消費関数、スリープ時間設定関数が前述のように動作する。
なお、上記の説明では、時間消費関数が検査用プログラム200に適用されるものとして説明したが、時間消費関数441に代えてCPU負荷率出力付時間消費関数443を使用する構成も成立し、そのような構成を有するモデル検査システム1,より詳しくはモデル検査用プログラム作成装置10も本発明の技術的範囲に含まれる。
この後タスク1の時間消費関数、スリープ時間設定関数が前述のように動作する。
なお、上記の説明では、時間消費関数が検査用プログラム200に適用されるものとして説明したが、時間消費関数441に代えてCPU負荷率出力付時間消費関数443を使用する構成も成立し、そのような構成を有するモデル検査システム1,より詳しくはモデル検査用プログラム作成装置10も本発明の技術的範囲に含まれる。
[4.実施例]
本発明は後述する実施例としても成立する。ここでは3つの実施例を上げる。単純な処理とスリープの模倣を行う場合を実施例1、CPU負荷率を測定する場合を実施例3、実施例1又は実施例3に加えてタスクの最大周期差を測定する場合を実施例2とする。図13は、各実施例と時間処理ライブラリ記憶部440に記憶されている時間消費関数441,時間消費タスク442,スリープ時間設定関数443,CPU負荷率出力付時間消費関数444の対応関係を示す図である。以下、図13を参照しながら各実施例と必要とする時間処理ライブラリ記憶部440に記憶されている要素との関係を説明する。
本発明は後述する実施例としても成立する。ここでは3つの実施例を上げる。単純な処理とスリープの模倣を行う場合を実施例1、CPU負荷率を測定する場合を実施例3、実施例1又は実施例3に加えてタスクの最大周期差を測定する場合を実施例2とする。図13は、各実施例と時間処理ライブラリ記憶部440に記憶されている時間消費関数441,時間消費タスク442,スリープ時間設定関数443,CPU負荷率出力付時間消費関数444の対応関係を示す図である。以下、図13を参照しながら各実施例と必要とする時間処理ライブラリ記憶部440に記憶されている要素との関係を説明する。
まず、各実施例に共通に必要な処理が用意される。共通に必要な処理はスリープ時間設定関数443及び時間消費タスク442となる。
次に、CPU負荷率を測定したいか否かで実施例1と実施例3に分かれる。CPU負荷率を測定する必要がない場合は、実施例1に該当する。実施例1ではさらに時間消費関数441が必要になる。一方、CPU負荷率を測定する必要がある場合は、実施例3に該当する。実施例3は共通する処理に加えてCPU負荷率出力付時間消費関数444が必要となる。
さらに、CPU負荷率を測定したい場合、CPU負荷率測定が必要ない場合のいずれにおいても2つのタスクの周期差を測定する必要がある場合には、実施例2に該当する。
次に、CPU負荷率を測定したいか否かで実施例1と実施例3に分かれる。CPU負荷率を測定する必要がない場合は、実施例1に該当する。実施例1ではさらに時間消費関数441が必要になる。一方、CPU負荷率を測定する必要がある場合は、実施例3に該当する。実施例3は共通する処理に加えてCPU負荷率出力付時間消費関数444が必要となる。
さらに、CPU負荷率を測定したい場合、CPU負荷率測定が必要ない場合のいずれにおいても2つのタスクの周期差を測定する必要がある場合には、実施例2に該当する。
以下に、上記の各実施例について詳述する。
[4.1.実施例1]
図14に、実施例1におけるモデル検査用プログラム作成装置10Aの構成例の機能ブロック図を掲げる。実施例1において、先に述べた実施の形態におけるモデル検査用プログラム作成装置10のうち、検査対象組み合わせ記録部422、時間幅記録部423は使用しない。また、CPU負荷率出力付時間消費関数444も使用しないので、これらは具備していなくともよい。その他の構成要素については、同一の構成要素には同一の参照符号を付し、それらの詳細な説明は省略する。
[4.1.実施例1]
図14に、実施例1におけるモデル検査用プログラム作成装置10Aの構成例の機能ブロック図を掲げる。実施例1において、先に述べた実施の形態におけるモデル検査用プログラム作成装置10のうち、検査対象組み合わせ記録部422、時間幅記録部423は使用しない。また、CPU負荷率出力付時間消費関数444も使用しないので、これらは具備していなくともよい。その他の構成要素については、同一の構成要素には同一の参照符号を付し、それらの詳細な説明は省略する。
次に、モデル検査用プログラム作成装置10Aの動作例について説明する。図15は、モデル検査用プログラム作成装置10A、より詳しくはそのプログラム生成部430の動作例を示したフローチャートである。以下、図15を参照しながらモデル検査用プログラム作成装置10Aの動作例を説明する。
実施例1において、時間処理情報入力部410から入力されたタスク情報110Aは、タスク情報記録部421に記録される。この例の場合のタスク情報110Aのデータ構成例を図16に示す。
次に、モデル検査用プログラム作成装置10A、より詳しくはプログラム生成部430は、タスク情報記録部421に記憶されたタスク情報110Aから、タスク数を取得し、各タスクの残りスリープ時間を保持する配列変数を作成する(S610)。この処理の結果としてプログラム内に記述されるコード例を以下に示す。
<コード例>:”Unsigned int remainSleep[3];”
次に、モデル検査用プログラム作成装置10A、より詳しくはプログラム生成部430は、タスク情報110Aに記述された全てのタスクについて定義したか否かを判定する(S620)。全てのタスクについて定義を終了した場合(S620,Yes)は、処理を終了する。
<コード例>:”Unsigned int remainSleep[3];”
次に、モデル検査用プログラム作成装置10A、より詳しくはプログラム生成部430は、タスク情報110Aに記述された全てのタスクについて定義したか否かを判定する(S620)。全てのタスクについて定義を終了した場合(S620,Yes)は、処理を終了する。
一方、全てのタスクについて定義していないと判定した場合(S620、No)は、該当タスク(全てのタスクの内、定義がされていないタスクであって、以降の処理の対象として選択されたタスクをいう)のタスク優先度をタスク情報110Aから取得し(S630)、これに基づいて該当タスクのタスク生成関数を検査用プログラム200に追加する(S640)。この例では、まず始めにタスク1が該当タスクに選択され、これについてタスク生成関数を記述するものとしよう。具体的には、タスク1のタスク優先度「1」をタスク情報110Aから取得し、これに対応するタスク生成関数を検査用プログラム200に追加する。この処理のコード例を以下に示す。
<コード例>:”cre_tsk(1, 1);”
次に、モデル検査用プログラム作成装置10A、より詳しくはプログラム生成部430は、該当タスクの定義を開始する。次に、モデル検査用プログラム作成装置10A、より詳しくはプログラム生成部430は、タスク情報110Aから該当タスクの処理時間を取得し、且つ時間消費関数を取り出して、検査用プログラム200に追加する(S650)。この処理のコード例を以下に示す。
<コード例>:”do_something(20);”
次に、モデル検査用プログラム作成装置10A、より詳しくはプログラム生成部430は、タスク情報110Aから該当タスクのスリープ時間を取得し、スリープ時間設定関数を取り出して、検査用プログラム200に追加する。この処理のコード例を以下に示す。
<コード例>:”sleep(50);”
次に、モデル検査用プログラム作成装置10A、より詳しくはプログラム生成部430は、該当タスクの定義を終了する。その後ステップS620に戻る。タスク情報110Aに記述された全てのタスクについて、前述のステップS630からS660を行い、それが終了するとモデル検査用プログラム作成装置10A、より詳しくはプログラム生成部430は、検査用プログラム200の生成を終了し、生成した検査用プログラム200を出力する。生成が終了した検査用プログラム200のコード例を図17に示す。
<コード例>:”cre_tsk(1, 1);”
次に、モデル検査用プログラム作成装置10A、より詳しくはプログラム生成部430は、該当タスクの定義を開始する。次に、モデル検査用プログラム作成装置10A、より詳しくはプログラム生成部430は、タスク情報110Aから該当タスクの処理時間を取得し、且つ時間消費関数を取り出して、検査用プログラム200に追加する(S650)。この処理のコード例を以下に示す。
<コード例>:”do_something(20);”
次に、モデル検査用プログラム作成装置10A、より詳しくはプログラム生成部430は、タスク情報110Aから該当タスクのスリープ時間を取得し、スリープ時間設定関数を取り出して、検査用プログラム200に追加する。この処理のコード例を以下に示す。
<コード例>:”sleep(50);”
次に、モデル検査用プログラム作成装置10A、より詳しくはプログラム生成部430は、該当タスクの定義を終了する。その後ステップS620に戻る。タスク情報110Aに記述された全てのタスクについて、前述のステップS630からS660を行い、それが終了するとモデル検査用プログラム作成装置10A、より詳しくはプログラム生成部430は、検査用プログラム200の生成を終了し、生成した検査用プログラム200を出力する。生成が終了した検査用プログラム200のコード例を図17に示す。
[4.1.1.実施例1の効果]
実施例1は以下の効果を有する。
(1)時間によるスケジューリングを実現したモデル検査用プログラムを自動生成できる。
(2)時間によるスケジューリングを前提とする検査が可能となる。
実施例1は以下の効果を有する。
(1)時間によるスケジューリングを実現したモデル検査用プログラムを自動生成できる。
(2)時間によるスケジューリングを前提とする検査が可能となる。
[4.2.実施例2]
次に、実施例2について説明する。図18に、実施例2にかかるモデル検査用プログラム作成装置10Bの構成例の機能ブロック図を掲げる。実施例2のモデル検査用プログラム作成装置10Bの構成は、実施例1のモデル検査用プログラム作成装置10Aの構成に、検査対象組み合わせ記録部422を追加したものである。その他については同一の構成要素には同一の参照符号を付し、それらの詳細な説明は省略する。
次に、実施例2について説明する。図18に、実施例2にかかるモデル検査用プログラム作成装置10Bの構成例の機能ブロック図を掲げる。実施例2のモデル検査用プログラム作成装置10Bの構成は、実施例1のモデル検査用プログラム作成装置10Aの構成に、検査対象組み合わせ記録部422を追加したものである。その他については同一の構成要素には同一の参照符号を付し、それらの詳細な説明は省略する。
次に、モデル検査用プログラム作成装置10Bの動作例について説明する。図19は、モデル検査用プログラム作成装置10Aの動作例の一部を示したフローチャートである。以下、図19を参照しながらモデル検査用プログラム作成装置10Bの動作例を説明する。
まず、モデル検査用プログラム作成装置10B、より詳しくはプログラム生成部430は時間処理情報入力部410から入力されたタスク情報110を、タスク情報記録部421に記録させる。
次に、モデル検査用プログラム作成装置10B、より詳しくはプログラム生成部430は時間処理情報入力部410から入力された検査対象組み合わせ情報120Bを、検査対象組み合わせ情報記録部422に記録する。検査対象組み合わせ情報120Bのデータ構成例を図20に示す。
次に、モデル検査用プログラム作成装置10B、より詳しくはプログラム生成部430は、タスク情報記録部421からタスク情報110を取り出し、時間処理ライブラリ記憶部440から関数を取り出して、検査用プログラム200に記述する。より詳しく述べると、以下の処理を行う。
モデル検査用プログラム作成装置10B、より詳しくはプログラム生成部430は、タスク情報記録部421に記憶されたタスク情報110から、タスク数を取得し、各タスクの残りスリープ時間を保持する配列変数を作成し、かつ各タスクの周期回数保持変数配列を作成し、それらの記述を検査用プログラム200に加える(S710)。この処理の結果であるコード例を以下に示す。
<コード例>:
”Unsigned int remainSleep[3];”
“int loopCounter[3];“
次に、モデル検査用プログラム作成装置10B、より詳しくはプログラム生成部430は、制約とする最大周期差の値を検査対象組み合わせ情報記録部422から取得し、その定義の記述を検査用プログラム200に加える(S720)。この処理の結果として加えられるコード例を以下に示す。
<コード例>:” #define CounterDiff 5”
次に、モデル検査用プログラム作成装置10B、より詳しくはプログラム生成部430は、検査対象組み合わせ記録部422から、周期差を測る検査対象とするタスクの組み合わせを取得する(S730)。
<コード例>:
”Unsigned int remainSleep[3];”
“int loopCounter[3];“
次に、モデル検査用プログラム作成装置10B、より詳しくはプログラム生成部430は、制約とする最大周期差の値を検査対象組み合わせ情報記録部422から取得し、その定義の記述を検査用プログラム200に加える(S720)。この処理の結果として加えられるコード例を以下に示す。
<コード例>:” #define CounterDiff 5”
次に、モデル検査用プログラム作成装置10B、より詳しくはプログラム生成部430は、検査対象組み合わせ記録部422から、周期差を測る検査対象とするタスクの組み合わせを取得する(S730)。
次に、モデル検査用プログラム作成装置10B、より詳しくはプログラム生成部430は、タスク情報110Aに記述された全てのタスクについて定義したか否かを判定する(S740)。全てのタスクについて定義を終了した場合(S740,Yes)は、プログラム生成処理を終了する。
一方、全てのタスクについて定義していないと判定した場合(S740、No)、モデル検査用プログラム作成装置10B、より詳しくはプログラム生成部430は、該当タスク(全タスクの内未だ定義がプログラム内に記述されていないタスクであって、以下の処理を行う対象として選択されたタスクをいう)の定義を開始する。モデル検査用プログラム作成装置10B、より詳しくはプログラム生成部430は、該当タスクが周期差の検査対象のタスクである場合、周期回数差を測る相手タスクの前回参照時の周期回数を保持する変数を追加する(S750)。この処理により付加されるコード例を以下に示す。
<コード例>:”int lastCounter = 1;”
次に、モデル検査用プログラム作成装置10B、より詳しくはプログラム生成部430は、該当タスクの周期回数カウント処理を追加する(S760)。
<コード例>:” loopCounter[1]++;”
次に、モデル検査用プログラム作成装置10B、より詳しくはプログラム生成部430は、タスク情報110から該当タスクの処理時間を取得し、且つ時間消費関数を取り出して、検査用プログラム200に追加する(S770)。
<コード例>:”int lastCounter = 1;”
次に、モデル検査用プログラム作成装置10B、より詳しくはプログラム生成部430は、該当タスクの周期回数カウント処理を追加する(S760)。
<コード例>:” loopCounter[1]++;”
次に、モデル検査用プログラム作成装置10B、より詳しくはプログラム生成部430は、タスク情報110から該当タスクの処理時間を取得し、且つ時間消費関数を取り出して、検査用プログラム200に追加する(S770)。
次に、モデル検査用プログラム作成装置10B、より詳しくはプログラム生成部430は、該当タスクが検査対象タスク(周期差の測定対象であるタスクをいう)である場合、周期差を監視する処理を追加する(S770)。この処理により付加されるコード例を以下に示す。
<コード例>:”assert( loopCounter[2] - lastCounter > counterDiff);“
次に、モデル検査用プログラム作成装置10B、より詳しくはプログラム生成部430は、該当タスクが検査対象タスクである場合、周期差を測る相手タスクの周期回数保持変数の値を更新する処理を追加する(S790)。この処理により付加されるコード例を以下に示す。
<コード例>” lastCounter = loopCounter[2];“
次に、モデル検査用プログラム作成装置10B、より詳しくはプログラム生成部430は、タスク情報110から該当タスクのスリープ時間を取得し、スリープ時間設定関数を取り出して、検査用プログラム200に追加する(S800)。
<コード例>:”assert( loopCounter[2] - lastCounter > counterDiff);“
次に、モデル検査用プログラム作成装置10B、より詳しくはプログラム生成部430は、該当タスクが検査対象タスクである場合、周期差を測る相手タスクの周期回数保持変数の値を更新する処理を追加する(S790)。この処理により付加されるコード例を以下に示す。
<コード例>” lastCounter = loopCounter[2];“
次に、モデル検査用プログラム作成装置10B、より詳しくはプログラム生成部430は、タスク情報110から該当タスクのスリープ時間を取得し、スリープ時間設定関数を取り出して、検査用プログラム200に追加する(S800)。
以上でモデル検査用プログラム作成装置10B、より詳しくはプログラム生成部430は、当該タスクの定義を終了する。その後ステップS740に戻る。タスク情報110に記述された全タスクのそれぞれについて、前述のステップS750からS800を行い、それが終了するとモデル検査用プログラム作成装置10B、より詳しくはプログラム生成部430は、検査用プログラム200の生成を終了し、生成した検査用プログラム200を出力する。生成が終了した検査用プログラム200のコード例を図21に示す。
[4.2.1.実施例2の効果]
この実施例2によれば、タスクの最大周期差が指定した制約を守れるかを検査できる検査プログラムを自動生成することが可能となる。
この実施例2によれば、タスクの最大周期差が指定した制約を守れるかを検査できる検査プログラムを自動生成することが可能となる。
[4.3.実施例3]
次に、実施例3について説明する。図22に、実施例3にかかるモデル検査用プログラム作成装置10Cの構成例の機能ブロック図を掲げる。実施例2のモデル検査用プログラム作成装置10Bの構成は、実施例1のモデル検査用プログラム作成装置10Aの構成に、時間幅記録部123を加え、時間消費関数441の代わりにCPU負荷出力付消費関数444を備えたものである。その他については同一の構成要素には同一の参照符号を付し、それらの詳細な説明は省略する。
次に、実施例3について説明する。図22に、実施例3にかかるモデル検査用プログラム作成装置10Cの構成例の機能ブロック図を掲げる。実施例2のモデル検査用プログラム作成装置10Bの構成は、実施例1のモデル検査用プログラム作成装置10Aの構成に、時間幅記録部123を加え、時間消費関数441の代わりにCPU負荷出力付消費関数444を備えたものである。その他については同一の構成要素には同一の参照符号を付し、それらの詳細な説明は省略する。
次に、モデル検査用プログラム作成装置10Cの動作例について説明する。図23は、モデル検査用プログラム作成装置10C、より詳しくはそのプログラム生成部430の動作例を示したフローチャートである。以下、図23を参照しながらモデル検査用プログラム作成装置10Cの動作例を説明する。
実施例3において、時間処理情報入力部410から入力されたタスク情報110は、タスク情報記録部421に記録される。また、時間処理情報入力部410から入力された時間幅130は時間幅記録部423に記録される。
モデル検査用プログラム作成装置10C、より詳しくはプログラム生成部430は、タスク情報記録部421に記憶されたタスク情報110から、タスク数を取得し、各タスクの残りスリープ時間を保持する配列変数を作成する(S810)。この処理の結果としてプログラム内に記述されるコード例を以下に示す。
<コード例>:”Unsigned int remainSleep[3];”
次に、モデル検査用プログラム作成装置10C、より詳しくはプログラム生成部430は、時間幅記録部423から、CPU負荷率を求めるための時間幅130を取得し、その時間幅を生成プログラムに追加する(S820)。この処理の結果としてプログラム内に記述されるコード例を以下に示す。
<コード例>:”#define WIDTH 500”
次に、モデル検査用プログラム作成装置10C、より詳しくはプログラム生成部430は、タスク情報110に記述された全てのタスクについて定義したか否かを判定する(S830)。全てのタスクについて定義を終了した場合(S830,Yes)は、処理を終了する。
<コード例>:”Unsigned int remainSleep[3];”
次に、モデル検査用プログラム作成装置10C、より詳しくはプログラム生成部430は、時間幅記録部423から、CPU負荷率を求めるための時間幅130を取得し、その時間幅を生成プログラムに追加する(S820)。この処理の結果としてプログラム内に記述されるコード例を以下に示す。
<コード例>:”#define WIDTH 500”
次に、モデル検査用プログラム作成装置10C、より詳しくはプログラム生成部430は、タスク情報110に記述された全てのタスクについて定義したか否かを判定する(S830)。全てのタスクについて定義を終了した場合(S830,Yes)は、処理を終了する。
一方、全てのタスクについて定義していないと判定した場合(S830、No)は、タスクのタスク優先度をタスク情報110から取得し、これに基づいてタスク生成関数を検査用プログラム200に追加する(S640)。この例では、まず始めにタスク1についてタスク生成関数を記述するものとしよう。具体的には、タスク1のタスク優先度「1」をタスク情報110から取得し、これに対応するタスク生成関数を検査用プログラム200に追加する(S840)。この処理のコード例を以下に示す。
<コード例>:”cre_tsk(1 , 1);”
<コード例>:”cre_tsk(1 , 1);”
次に、モデル検査用プログラム作成装置10C、より詳しくはプログラム生成部430は、そのタスクの定義を開始する。次に、モデル検査用プログラム作成装置10A、より詳しくはプログラム生成部430は、タスク情報110から当該タスクの処理時間を取得し、且つCPU負荷出力付時間消費関数444を取り出して、検査用プログラム200に追加する(S850)。この処理のコード例を以下に示す。
<コード例>:”do_checkingCPUrate(20);”
<コード例>:”do_checkingCPUrate(20);”
次に、モデル検査用プログラム作成装置10C、より詳しくはプログラム生成部430は、タスク情報110から当該タスクのスリープ時間を取得し、スリープ時間設定関数443を取り出して、検査用プログラム200に追加する(S860)。この処理のコード例を以下に示す。
<コード例>:”sleep(50);”
<コード例>:”sleep(50);”
次に、モデル検査用プログラム作成装置10A、より詳しくはプログラム生成部430は、当該タスクの定義を終了する。その後ステップS620に戻る。タスク情報110Aに記述された全てのタスクについて、前述のステップS630からS660を行い、それが終了するとモデル検査用プログラム作成装置10C、より詳しくはプログラム生成部430は、検査用プログラム200の生成を終了し、生成した検査用プログラム200を出力する。生成が終了した検査用プログラム200のコード例を図24に示す。
[4.3.1.実施例3の効果]
実施例3によれば、 CPU負荷率を出力する検査プログラムを自動生成することが可能となる。
実施例3によれば、 CPU負荷率を出力する検査プログラムを自動生成することが可能となる。
1 … モデル検査システム
10 … モデル検査用プログラム作成装置
20 … モデル検査器
200 … モデル検査用プログラム
410 … 時間処理情報入力部
420 … 時間処理情報記憶部
430 … プログラム生成部
440 … 時間処理ライブラリ記憶部
10 … モデル検査用プログラム作成装置
20 … モデル検査器
200 … モデル検査用プログラム
410 … 時間処理情報入力部
420 … 時間処理情報記憶部
430 … プログラム生成部
440 … 時間処理ライブラリ記憶部
Claims (3)
- 並行して実行される複数のタスクについて、各タスクの優先度、処理時間、及びスリープ時間を含む情報であるタスク情報を記憶する第1の記憶手段と、
前記タスク情報に記述された各タスクについてタスクの定義を記述し、各タスクの定義内に時間消費関数を呼び出す記述を加えるとともに、スリープ時間設定消費関数を呼び出す記述を加えるプログラム生成手段と、
前記時間消費関数の定義及びスリープ時間設定消費関数の定義を記憶する第2の記憶手段と
を有し、
前記時間消費関数は、自タスクの残りの処理時間が0であるか否かの判定をおこない、残りの処理時間が0であると判定した場合、時間消費関数の処理をそのまま終了し、一方、残りの処理時間が0でないと判定した場合、自タスクの残り処理時間を所定の値減算し、つぎに、他タスクの残りスリープ時間を所定の値減算し、他タスクの残りスリープ時間が0であるか否かの判定を行い、残りの処理時間が0であると判定した場合、当該他タスクを起動させ、一方、残りのスリープ時間が0でないと判定した場合、再び自タスクの残りの処理時間が0であるか否かの判定に戻る処理を行う関数であり、
前記スリープ時間設定関数は、指定されたスリープ時間を、残りスリープ時間保持変数に設定し、次に、自タスクをスリープ状態にする関数である
事を特徴とする、モデル検査用プログラム作成装置。 - 並行して実行される複数のタスクについて、各タスクの優先度、処理時間、及びスリープ時間を含む情報であるタスク情報と、CPU負荷率を求める時間幅を記憶する第1の記憶手段と、
前記タスク情報に記述された各タスクについてタスクの定義を記述し、各タスクの定義内にCPU負荷率出力付時間消費関数を呼び出す記述を加えるとともに、スリープ時間設定消費関数を呼び出す記述を加えるプログラム生成手段と、
前記時間消費関数の定義及びスリープ時間設定消費関数の定義を記憶する第2の記憶手段と
を有し、
前記CPU負荷率出力付時間消費関数は、
自タスクの残りの処理時間が0であるか否かの判定をおこない、残りの処理時間が0であると判定した場合、時間消費関数の処理をそのまま終了し、一方、残りの処理時間が0でないと判定した場合、自タスクの残り処理時間を所定の値減算し、他タスクの残りスリープ時間を所定の値減算し、
次に、タスクが一つ以上起動中であるか否かを判定し、タスクが一つ以上起動中であると判定した場合、合計処理時間の値を1だけ増加させ、
次に残り時間幅時間が0であるか否かを判定し、残り時間幅時間が0であると判定した場合、CPU負荷率を計算し、
次に、他タスクの残りスリープ時間が0であるか否かの判定を行い、残りの処理時間が0であると判定した場合、当該他タスクを起動させ、一方、残りのスリープ時間が0でないと判定した場合、再び自タスクの残りの処理時間が0であるか否かの判定に戻る処理を行う関数であり、
前記スリープ時間設定関数は、指定されたスリープ時間を、残りスリープ時間保持変数に設定し、次に、自タスクをスリープ状態にする関数である
事を特徴とする、モデル検査用プログラム作成装置。 - 第1の記憶手段はさらに周期差を測定する検査対象であるタスクを指定する情報と守られるべき最大周期差の値を含む情報である検査対象組み合わせ記録情報とを記憶し、
前記プログラム生成手段は、
前記タスク情報から、タスク数を取得し、各タスクの残りスリープ時間を保持する配列変数を作成し、かつ各タスクの周期回数保持変数配列を作成し、
最大周期差の値を検査対象組み合わせ情報記録部から取得し、その定義を記述し、
前記検査対象組み合わせ記録情報から、周期差を測る検査対象とするタスクの組み合わせを取得し、
各タスクのタスクの定義内に、該当タスクが周期差の検査対象のタスクである場合、周期回数差を測る相手タスクの前回参照時の周期回数を保持する変数を追加し、該当タスクの周期回数カウント処理を追加し、周期差を監視する処理を追加し、周期差を測る相手タスクの周期回数保持変数の値を更新する処理を追加する
事を特徴とする請求項1又は2に記載のモデル検査用プログラム作成装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008335128A JP2010157105A (ja) | 2008-12-26 | 2008-12-26 | モデル検査用プログラム作成装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008335128A JP2010157105A (ja) | 2008-12-26 | 2008-12-26 | モデル検査用プログラム作成装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2010157105A true JP2010157105A (ja) | 2010-07-15 |
Family
ID=42574999
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008335128A Withdrawn JP2010157105A (ja) | 2008-12-26 | 2008-12-26 | モデル検査用プログラム作成装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2010157105A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2014118979A1 (ja) * | 2013-02-01 | 2014-08-07 | 株式会社日立製作所 | 性能モデル検査装置、および、性能モデル検査方法 |
CN109920417A (zh) * | 2019-02-18 | 2019-06-21 | 广州视源电子科技股份有限公司 | 一种语音处理方法、装置、设备和存储介质 |
CN112530043A (zh) * | 2020-10-28 | 2021-03-19 | 国网宁夏电力有限公司吴忠供电公司 | 一种用于电力设备的基于智能传感器的巡检系统 |
-
2008
- 2008-12-26 JP JP2008335128A patent/JP2010157105A/ja not_active Withdrawn
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2014118979A1 (ja) * | 2013-02-01 | 2014-08-07 | 株式会社日立製作所 | 性能モデル検査装置、および、性能モデル検査方法 |
CN109920417A (zh) * | 2019-02-18 | 2019-06-21 | 广州视源电子科技股份有限公司 | 一种语音处理方法、装置、设备和存储介质 |
CN109920417B (zh) * | 2019-02-18 | 2021-05-18 | 广州视源电子科技股份有限公司 | 一种语音处理方法、装置、设备和存储介质 |
CN112530043A (zh) * | 2020-10-28 | 2021-03-19 | 国网宁夏电力有限公司吴忠供电公司 | 一种用于电力设备的基于智能传感器的巡检系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Rosenfeld et al. | DRAMSim2: A cycle accurate memory system simulator | |
US20130326202A1 (en) | Load test capacity planning | |
Yin et al. | Decentralized fault prognosis of discrete event systems with guaranteed performance bound | |
US8386851B2 (en) | Functional coverage using combinatorial test design | |
US9329968B2 (en) | Testing application performance using virtual machines created from the same image on different hardware platforms | |
US8458663B2 (en) | Static code analysis | |
US10698805B1 (en) | Method and system for profiling performance of a system on chip | |
US9792402B1 (en) | Method and system for debugging a system on chip under test | |
US10592703B1 (en) | Method and system for processing verification tests for testing a design under test | |
Bonakdarpour et al. | Time-triggered runtime verification | |
KR101423030B1 (ko) | 컴퓨터 실행 가능한 어플리케이션 객체 분석 방법, 이를 수행하는 어플리케이션 객체 분석 서버 및 이를 저장하는 기록매체 | |
US8086455B2 (en) | Model development authoring, generation and execution based on data and processor dependencies | |
JP5109143B2 (ja) | 検証装置および検証方法 | |
Cao et al. | Optimal selection and release problem in software testing process: a continuous time stochastic control approach | |
JP2010157105A (ja) | モデル検査用プログラム作成装置 | |
US11514219B1 (en) | System and method for assertion-based formal verification using cached metadata | |
Roshandel et al. | Estimating software component reliability by leveraging architectural models | |
Brebner | Automatic performance modelling from application performance management (APM) data: an experience report | |
JP6878707B2 (ja) | 試験装置、試験方法および試験プログラム | |
US10579761B1 (en) | Method and system for reconstructing a graph presentation of a previously executed verification test | |
Emberson et al. | Stressing search with scenarios for flexible solutions to real-time task allocation problems | |
Walworth et al. | Estimating project performance through a system dynamics learning model | |
Sedaghatbaf et al. | A method for dependability evaluation of software architectures | |
US20110087922A1 (en) | Test method and tool for master-slave systems on multicore processors | |
Beydeda et al. | Testing Commercial-off-the-shelf Components and Systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Withdrawal of application because of no request for examination |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20120306 |