JPH09237191A - プログラミング支援装置、プログラミング支援方法、及びプログラミング支援プログラムを記録した媒体 - Google Patents
プログラミング支援装置、プログラミング支援方法、及びプログラミング支援プログラムを記録した媒体Info
- Publication number
- JPH09237191A JPH09237191A JP8347053A JP34705396A JPH09237191A JP H09237191 A JPH09237191 A JP H09237191A JP 8347053 A JP8347053 A JP 8347053A JP 34705396 A JP34705396 A JP 34705396A JP H09237191 A JPH09237191 A JP H09237191A
- Authority
- JP
- Japan
- Prior art keywords
- program
- sections
- execution
- execution path
- branch
- 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.)
- Granted
Links
Landscapes
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
い並行プログラムを容易に開発する。 【解決手段】 エディタ1でプログラムを作成する。区
分手段2が、プログラムのプロセスを実行制御可能なセ
クションに区分する。検出手段3がプログラム中のセク
ション間の依存関係を検出する。生成手段4が、各プロ
セスの各セクションのありうる挙動順序をシナリオで表
す。選択手段6によって、依存関係に係るシナリオ中の
各分岐について、先に実行すべきセクションのエッジが
選択されると、意図する実行順序の組み合わせのみから
なるシナリオが生成される。このようなシナリオに基づ
いて、変換手段9が、第1のプログラムを、実行タイミ
ング制御の命令の挿入によって第2のプログラムに変換
すると、第2のプログラムには悪い非決定性が存在しな
い。
Description
支援するプログラミング支援装置及びプログラミング支
援方法の改良に関するもので、特に、信頼性の高い並行
プログラムを容易に開発するものに係る。
り、複雑なプロセッサ及び大容量のメモリが小型かつ低
価格で実現できるようになり、多数のプロセッサからな
る並行処理システムや分散処理システムが実用化されて
いる。このようなハードウエアに対しては、専用のプロ
グラム、すなわち並列プログラムや分散処理プログラム
等(以下「並行プログラム(Concurrent Program=CP) 」
という)を用いなければならない。
同時並行的に動作するプログラムであって、その一類型
は、複数のCPUを有する並列計算機上で、複数のプロ
グラムが物理的に並行に動くプログラムである。また、
単一のCPU上で物理的には逐次的に動作する場合で
も、マルチタスクシステムのように複数のプロセスが論
理的に並行に動作するプログラムは、並行プログラムに
含まれる。なお、このように物理的または論理的な並行
性を持つシステムを並行システムと呼び、並行システム
では一般に並行プログラムが動作する。このような並行
プログラムをいかに効率よく開発するかは、優れたアル
ゴリズムを検討する場合と同様に重要な課題となってい
る。
ログラム中のバグを見付け修正すること(すなわち、テ
スト・デバッグ)と呼ばれる開発工程がプログラム開発
の効率に大きく影響する。しかし、並行プログラムの開
発においては、逐次プログラムの開発においては遭遇す
ることのない、並行プログラム特有の問題を考慮する必
要がある。この並行プログラム特有の問題とは、並行プ
ログラムを構成する各プロセスは、各プロセス間におけ
る相互作用のタイミングによる様々な振る舞いをする可
能性があるため、並行プログラム全体が正しく動作しな
いという問題である。この問題は、並行プログラムの性
質に基づく問題であり、一般に「非決定性(nondetermi
nism)」と呼ばれる。
性、無害の非決定性に分けられる。このうち、よい非決
定性は、(プログラムの)設計者の実現したい非決定性
であり、この非決定性により、外部(環境)からの非決
定的な刺激に適切に反応でき、プロセスの柔軟性、再利
用性、拡張性を実現できる。
し期待しない非決定性であり、しばしばプログラムの機
能不全を生じさせる。すなわち、人間の一般的思考形態
は逐次であり、設計者が逐次的に思考した場面が、並行
プログラムの複数のプロセス間で実際に生じ得る場面の
すべてを網羅することは困難である。このため、設計時
には予想しなかったケースが、実際の並行プログラムの
実行では多々発生する。
択が、実行効率には影響があっても、最終的に得られる
結果には悪影響を与えない場合の非決定性である。
えば、図33に示す並行プログラムを考慮する。図33
(a)において、プロセスP1は、共有メモリMの初期
設定(init)を行うプロセス、プロセスP2は、共
有メモリMから読み出し(read)を行うプロセス、
プロセスP3は、共有メモリMに書込み(write)
を行うプロセスを示す。これらのプロセスをそれぞれ異
なるプロセッサで実行するような並行処理システム等で
動作させた場合、図33(b)に示すように、全部で6
通りの動作の組み合わせがあることになる。通常、シス
テムは初期設定で処理を開始するため、今、プロセスP
1(init)→P2(read)→P3(writ
e)又はP1(init)→P3(write)→P2
(read)の順番でプログラムが動作する場合に正し
い結果が得られるものとすれば、残りの4通り(例えば
P2→P3→P1)は、初期化が最初に行われないた
め、明らかに正しい結果が得られないことがわかる。
非決定性は、並行プログラムを動作させる毎に、その時
点におけるシステムの状況等によって結果が異なったも
のになる。従って、この非決定性に関する問題を解決し
ない限り、その並行プログラムは、テストにおいてたと
え正常に動作することがあっても、常に正常に動作する
という保証はない。
逐次プログラムにおけるバグを見付ける場合よりも困難
である。なぜなら、逐次プログラムにおいては、テスト
・デバッグ時にプログラム中の全てのパスを実行するこ
とによって動作を確認することができるのに対し、並行
プログラムにおいては、全ての組合せ的なパス(すなわ
わち、各プロセス中の全てのパスのみならず、プロセス
相互間の振る舞い)を考慮してパスを実行しなければな
らないからである。上記の例のようにプロセスの数が少
ない場合にあっては、各プロセス相互間の振る舞いを全
て列挙することは比較的容易であるが、実際のプログラ
ム開発では、その数は膨大になり、その組合わせも膨大
なものとなるため、全ての振る舞いを把握することはも
はや不可能なものとなる。
ログラミングには、従来からプログラミング支援装置及
びこのプログラミング支援装置上で実行されるプログラ
ミング支援方法が用いられている。プログラミング支援
装置及びプログラミング支援方法は、開発ツールと俗称
され、一般的にエディタ、デバッガ、プリプロセッサ、
オプティマイザ、解析ツール、シミュレータ、コンパイ
ラ、リンカなどを含む。
ラミング支援方法におけるプログラミングの手順の典型
例は、あり得る入出力をテストケースとして表し、テス
トケースによってプログラムをテスト実行し、バグを発
見するとテストの結果を参照しながらソースコードの修
正を行うことであった。また、従来技術では、解析ツー
ルによってソースコードやデータの構造を解析し、コン
パイラが、この解析結果を利用しながら実行効率やメモ
リ効率の優れた実行コードを生成するなども可能であっ
た。
ラムを構成する複数のプロセスの実行のタイミングによ
って挙動が非決定的に変化するので、まず、あり得るテ
ストケースの数が組合せ的な爆発を示すことが一般的で
ある。また、タイミングに係わるバグには再現性が無
く、テストケース自体の作成も困難であった。
びプログラミング支援方法では、解析やテスト実行の結
果をプログラムに反映させるにあたって、このような並
行プログラムの特徴は考慮されていなかった。このた
め、従来のプログラミング支援装置やプログラミング支
援方法では、信頼性の高い並行プログラムを開発するこ
とが困難であった。
ラミング)を改良したものとして、超逐次プログラミン
グ(Hyper Sequential Programming)が知られている(参
考文献:特開平8−16429号)。超逐次プログラミ
ングは、並行プログラムを一旦逐次化して超逐次プログ
ラムを生成し、この超逐次プログラムに対してプログラ
ミング、テスト・デバッグを行う。これは、従来の逐次
プログラミングと同じレベルの困難さであり、通常の並
行プログラミングの困難さよりはるかに少ない。そし
て、テスト・デバッグが完了した時点で、テスト・デバ
ッグ情報を用いて上記超逐次プログラムを並行性し、並
行プログラムを復元する。
い非決定性をもたらす要素間に、逐次実行を実現する制
御を与えて悪い非決定性を抑制する一方で、無害の非決
定性やよい非決定性を残し、並行プログラムの柔軟性と
いう利点を享受することができる。
て一旦超逐次プログラムを生成し、それから再び並行プ
ログラムを復元するという作業が必要であり、信頼性の
高い並行プログラムを容易に作成することができなかっ
た。また、無害の非決定性についての設計者の処理を省
略すること等によってプログラミングを効率化したり、
無害の非決定性を容易に取り込むこと等により、プログ
ラミングの信頼性とプログラミングの効率とを向上させ
ることは容易ではなかった。
を解決するためのもので、その目的は、プロセスの各セ
クションのあり得る実行順序を表す実行経路に基づいて
プログラムを生成することにより、信頼性の高い並行プ
ログラムを容易に開発するプログラミング支援装置及び
プログラミング支援方法を提供することである。また、
本発明の他の目的は、設計者の処理を省略したり、無害
の非決定性を容易に取り込むことにより、プログラミン
グの効率を向上させるプログラミング支援装置及びプロ
グラミング支援方法を提供することである。更に、本発
明の他の目的は、実行経路に基づいて並行性を復元する
ことにより効率よく並行プログラムを生成することがで
きるプログラミング支援装置及びプログラミング支援方
法を提供することである。
ミングにおいて並行プログラムを逐次化する部分、及び
並行プログラムを復元する部分のアルゴリズムを改善し
たものである。
め、請求項1記載の発明によるプログラミング支援装置
は、第1のプログラムのプロセスを複数のセクションで
表し、前記複数のセクションのあり得る実行順序を前記
セクション間の分岐を用いて表す実行経路に対し、前記
実行経路の前記分岐について前記セクションを選択する
ための選択手段と、前記第1のプログラムを、前記選択
手段による選択がなされた前記実行経路に基づいて、前
記選択に基づく順序で一連の前記各セクションを実行す
る第2のプログラムに変換する変換手段とを具備するこ
とを特徴としている。
実行制御可能なセクションに区分され、各セクションの
ありうる実行順序が実行経路(シナリオ)で表される。
シナリオは、例えばネットワーク構造の状態遷移図で表
すことができ、ある状態を表すノードからは、この状態
に後続して実行可能な各セクションが、分岐エッジとし
て次の状態のノードに伸びる。このようなシナリオ上に
は、各セクションのあり得る実行順序に対応して、順序
と同数の経路が存在する。このシナリオの各分岐につい
て、先に実行すべきセクションのエッジを選択していく
ことにより、意図する実行順序の組み合わせからなるシ
ナリオが生成される。このシナリオに基づいて、第1の
プログラムを変換して生成された第2のプログラムは、
悪い非決定性が存在しない。このように、請求項1記載
の発明によれば、シナリオ上で実行順序を指定するだけ
で指定通りの挙動を示すプログラムを得ることができる
ため、信頼性の高いプログラムを容易に作成することが
できる。
支援装置は、複数のプロセスを含む第1のプログラムの
前記各プロセスを複数のセクションで表し、前記複数の
セクションのあり得る実行順序を前記セクション間の分
岐を用いて表す実行経路に対し、前記実行経路の前記分
岐について前記セクションを選択するための選択手段
と、前記第1のプログラムを、前記選択手段による選択
がなされた前記実行経路に基づいて、前記選択に基づく
順序で一連の前記各セクションを実行する第2のプログ
ラムに変換する変換手段とを具備することを特徴として
いる。
ラミング支援方法は、請求項2記載の発明を方法の観点
から把握したものであって、複数のプロセスを含む第1
のプログラムの前記各プロセスを複数のセクションで表
し、前記複数のセクションのあり得る実行順序を前記セ
クション間の分岐を用いて表す実行経路に対し、前記実
行経路の前記分岐について前記セクションを選択するた
めの選択処理と、前記第1のプログラムを、前記選択処
理における選択がなされた前記実行経路に基づいて、前
記選択に基づく順序で一連の前記各セクションを実行す
る第2のプログラムに変換する変換処理とを具備するこ
とを特徴としている。
ロセスの各セクションのあり得る実行順序が実行経路
(シナリオ)で表される。シナリオは、請求項1記載の
発明と同様に、例えばネットワーク構造の状態遷移図で
表すことができる。このようなシナリオ上には、各プロ
セスの各セクションのあり得る実行順序に対応して、順
序と同数の経路が存在する。このシナリオの各分岐につ
いて、先に実行すべきセクションのエッジを選択してい
くことにより、意図する実行順序の組み合わせからなる
シナリオが生成される。このシナリオに基づいて生成さ
れる第2のプログラムには、悪い非決定性が存在しな
い。このように、請求項2、15記載の発明によれば、
シナリオ上で実行順序を指定するだけで指定通りの挙動
を示すプログラムが得られるため、複数のプロセスが同
時並行的に動作する並行プログラムを容易に作成するこ
とができる。また、信頼性の高い並行プログラムを容易
に作成することができる。
支援装置は、複数のプロセスを含む第1のプログラムの
前記各プロセスを、実行制御可能なセクションに区分す
る区分手段と、前記各プロセスの前記各セクションのあ
り得る実行順序を、前記セクション間の分岐を用いて表
す実行経路を生成する生成手段と、前記生成手段によっ
て生成される前記実行経路の前記分岐について、前記セ
クションを選択するための選択手段と、前記第1のプロ
グラムを、前記選択手段による選択がなされた前記実行
経路に基づいて、前記選択に基づく順序で一連の前記各
セクションを実行する第2のプログラムに変換する変換
手段とを具備することを特徴としている。
グ支援方法は、請求項3記載の発明を方法の観点から把
握したものであって、複数のプロセスを含む第1のプロ
グラムの前記各プロセスを、実行制御可能なセクション
に区分する区分処理と、前記各プロセスの前記各セクシ
ョンのあり得る実行順序を、前記セクション間の分岐を
用いて表す実行経路を生成する生成処理と、前記生成処
理において生成される前記実行経路の前記分岐につい
て、前記セクションを選択するための選択処理と、前記
第1のプログラムを、前記選択処理における選択がなさ
れた前記実行経路に基づいて、前記選択に基づく順序で
一連の前記各セクションを実行する第2のプログラムに
変換する変換処理とを具備することを特徴としている。
ロセスが実行制御可能なセクションに区分され、各プロ
セスの各セクションのあり得る実行順序が、セクション
の分岐を用いて表す実行経路(シナリオ)で表される。
このシナリオの分岐について、セクションが選択される
ことにより、意図する実行順序の組み合わせのみからな
るシナリオが生成される。このシナリオに基づいて生成
される第2のプログラムには、悪い非決定性が存在しな
い。このように、シナリオ上で実行順序を指定するのみ
で指定通りの挙動を示すプルグラムが得られるので、信
頼性の高い並行プログラムを容易に作成することができ
る。
支援装置は、請求項3記載の発明において、前記生成手
段は、前記各プロセスの前記各セクションの実行順序
を、前記選択の結果が前記第2のプログラムによる実行
結果に影響を与えるセクション同士の分岐に限定して表
す実行経路を生成するように構成されたことを特徴とし
ている。
が第2のプログラムによる実行結果に影響を与えない、
すなわち、悪い非決定性を生じないセクション同士の分
岐が実行経路(シナリオ)に含まれないため、シナリオ
が単純化され理解容易となり、プログラミングが効率化
される。
支援装置は、請求項4記載の発明において、前記選択手
段による選択がなされた前記実行経路を、前記選択の結
果が前記第2のプログラムによる実行結果に影響を与え
ないセクション同士の分岐を付加することによって拡張
する拡張手段を具備することを特徴としている。
が第2のプログラムによる実行結果に影響を与えない分
岐、すなわち、無害な非決定性を生じる分岐が付加され
るため、変換後の第2のプログラムの非決定性が増大
し、プログラムの並列性が高まり性能と柔軟性が向上す
る。
支援装置は、複数のプロセスを含む第1のプログラムの
前記各プロセスを、実行制御可能なセクションに区分す
る区分手段と、前記各セクション間の依存関係を検出す
る検出手段と、前記各プロセスの前記各セクションのあ
りうる実行順序を、セクション間の分岐を用いて表す実
行経路を生成する生成手段と、前記実行経路の前記分岐
のうち、前記依存関係を有する分岐について前記セクシ
ョンを選択するための選択手段と、前記第1のプログラ
ムを、前記選択手段による選択がなされた前記実行経路
に基づいて、前記選択に基づく順序で一連の前記各セク
ションを実行する第2のプログラムに変換する変換手段
とを具備することを特徴としている。
グ支援方法は、請求項6記載の発明を方法の観点から把
握したものであって、複数のプロセスを含む第1のプロ
グラムの前記各プロセスを、実行制御可能なセクション
に区分する区分処理と、前記各セクション間の依存関係
を検出する検出処理と、前記各プロセスの前記各セクシ
ョンのありうる実行順序を、セクション間の分岐を用い
て表す実行経路を生成する生成処理と、前記実行経路の
前記分岐のうち、前記依存関係を有する分岐について前
記セクションを選択するための選択処理と、前記第1の
プログラムを、前記選択処理における選択がなされた前
記実行経路に基づいて、前記選択に基づく順序で一連の
前記各セクションを実行する第2のプログラムに変換す
る変換処理とを具備することを特徴としている。
セスが実行制御可能なセクションに区分され、各プロセ
スの各セクションのあり得る実行順序が実行経路(シナ
リオ)で表される。このシナリオの各分岐のうち、依存
関係を有する分岐においてセクションが選択されること
により、例えば先に実行すべきセクションが選択されて
いく。これにより、意図する実行順序の組み合わせのみ
からなるシナリオが生成され得る。このシナリオに基づ
いて、第1のプログラムに実行タイミング制御の命令等
を挿入して第2のプログラムとすることにより、悪い非
決定性が存在しない第2のプログラムが生成され得る。
このように、請求項6、17記載の発明では、シナリオ
上でセクションを選択することにより実行順序を指定す
るだけで、指定通りの挙動を示すプログラムが得られ
る。そのため、信頼性の高い並行プログラムを容易に作
成することができる。
支援装置は、請求項6記載の発明において、前記生成手
段は、前記各プロセスの前記各セクションの実行順序
を、前記依存関係を有するセクション同士の分岐に限定
して表す実行経路を生成するように構成されたことを特
徴としている。
有しないセクション同士の分岐が実行経路(シナリオ)
に含まれないため、シナリオが単純化され理解容易とな
り、プログラミングが効率化される。この場合、依存関
係を有しないセクション同士の実行順序は悪い非決定性
を生じないため、シナリオに含まれない場合でもプログ
ラムの信頼性は低下しない。
支援装置は、請求項7記載の発明において、前記選択手
段による選択がなされた前記実行経路を、前記依存関係
を有しないセクション同士の分岐を付加することによっ
て拡張する拡張手段を有することを特徴としている。
有しないセクション同士の分岐が実行経路(シナリオ)
に付加されるが、このような分岐は無害な非決定性を生
じる。このため、変換後の第2のプログラムの非決定性
が増大し、プログラムの並列性が高まり性能と柔軟性が
向上する。
支援装置は、請求項1、2、3、又は6記載の発明にお
いて、前記第1のプログラムを、前記選択手段による選
択がなされた前記実行経路上のセクション間の実行順序
に基づいて模擬実行する実行手段を具備することを特徴
としている。
(シナリオ)上でセクションを選択する作業が行われる
度に、その時点でのシナリオ通りに第1のプログラムを
模擬実行することができる。このため、実行結果によっ
て選択内容の妥当性を確認したり、プログラム中のバグ
を発見することによって、プログラムの信頼性とプログ
ラミングの効率が向上する。
グ支援装置は、請求項1、2、3、又は6記載の発明に
おいて、前記変換手段が、前記依存関係において実行が
先とされた前記セクションの後に、プロセス間の同期を
実現するための第1の命令を挿入し、当該依存関係にお
いて実行が後とされた前記セクションの前に、前記第1
の命令に対応する第2の命令を挿入することによって、
前記変換を行うように構成されたことを特徴としてい
る。
ン間の指定された先行制御が、プロセス間の同期信号に
よって容易かつ確実に実現される。
グ支援装置は、請求項1、2、3、又は6記載の発明に
おいて、前記拡張手段が、前記実行経路を前記各プロセ
スに対応させて分解し前記プロセス毎の実行経路を生成
する分解手段と、前記プロセス毎の実行経路について、
冗長な部分を削除する削除手段とを有し、前記変換手段
が、前記冗長な部分が削除された各実行経路に基づい
て、前記第2のプログラムを生成するように構成された
ことを特徴としている。
(シナリオ)が各プロセスに対応して分解され、プロセ
ス毎のシナリオが生成される。このプロセス毎のシナリ
オについて、冗長な部分が削除されることにより最適化
され、最適化された各シナリオに基づいて第2のプログ
ラムが生成される。このように、プロセス毎にシナリオ
を最適化することにより無害な非決定性を導入すること
ができ、容易に並行プログラムである第2のプログラム
を生成することができる。
グ支援装置は、請求項1、2、3、又は6記載の発明に
おいて、前記拡張手段が、前記実行経路を前記各プロセ
スに対応させて分解し前記プロセス毎の実行経路を生成
する分解手段と、前記プロセス毎の実行経路について、
冗長な部分を削除する削除手段とを有し、前記変換手段
が、前記冗長な部分が削除された各実行経路に基づい
て、前記第2のプログラムを生成するように構成され、
前記分解手段が、前記実行経路を分解する際に、前記各
実行経路に対し該実行経路間の同期をとるための同期制
約を付加するように構成され、前記削除手段が、前記同
期制約のうち冗長な同期制約を除去するように構成され
たことを特徴としている。
(シナリオ)が各プロセスに対応して分解され、プロセ
ス毎のシナリオが生成される。このとき、分解された個
々のシナリオの集合から最初のシナリオが再現できるよ
うに、各シナリオに対しシナリオ間の同期をとるための
同期制約が付加される。また、このプロセス毎のシナリ
オについて、冗長な部分、すなわち冗長な同期制約が除
去されることにより、最適化される。この最適化によ
り、無害な非決定性が導入される。このように、プロセ
ス毎にシナリオを最適化することにより無害な非決定性
を導入することができ、容易に並行プログラムである第
2のプログラムを生成することができる。
グ支援装置は、複数のプロセスを含む第1のプログラム
の前記各プロセスを複数のセクションで表し、前記複数
のセクションのあり得る実行順序を前記セクション間の
分岐を用いて表す実行経路を生成する生成手段と、前記
第1のプログラムを、前記生成手段によって生成された
実行経路に基づいて、一連の前記セクションを実行する
第2のプログラムに変換する変換手段とを具備し、前記
拡張手段が、前記実行経路を前記各プロセスに対応させ
て分解し前記プロセス毎の実行経路を生成する分解手段
と、前記プロセス毎の実行経路について、冗長な部分を
削除する削除手段とを有し、前記変換手段が、前記冗長
な部分が削除された各実行経路に基づいて、前記第2の
プログラムを生成するように構成されたことを特徴とし
ている。
グ支援方法は、請求項13記載の発明を方法の観点から
把握したものであって、複数のプロセスを含む第1のプ
ログラムの前記各プロセスを複数のセクションで表し、
前記複数のセクションのあり得る実行順序を前記セクシ
ョン間の分岐を用いて表す実行経路を生成する生成処理
と、前記第1のプログラムを、前記生成処理において生
成された実行経路に基づいて、一連の前記セクションを
実行する第2のプログラムに変換する変換処理とを具備
し、前記拡張処理は、前記実行経路を前記各プロセスに
対応させて分解し前記プロセス毎の実行経路を生成する
分解処理と、前記プロセス毎の実行経路について、冗長
な部分を削除する削除処理とを有し、前記変換処理は、
前記冗長な部分が削除された各実行経路に基づいて、前
記第2のプログラムを生成することを特徴としている。
ロセスが複数のセクションで表され、これら複数のセク
ションのあり得る実行順序がセクション間の分岐を用い
て表された実行経路(シナリオ)が生成される。そし
て、このシナリオが各プロセスに対応して分解され、プ
ロセス毎のシナリオが生成される。このプロセス毎のシ
ナリオについて、冗長な部分が削除されることにより最
適化され、最適化された各シナリオに基づいて第2のプ
ログラムが生成される。このように、プロセス毎にシナ
リオを最適化することにより無害な非決定性を導入する
ことができ、容易に並行プログラムである第2のプログ
ラムを生成することができる。
グ支援装置は、請求項13記載の発明において、前記分
解手段が、前記実行経路を分解する際に、前記各実行経
路に対し該実行経路間の同期をとるための同期制約を付
加するように構成され、前記削除手段が、前記同期制約
のうち冗長な同期制約を除去するように構成されたこと
を特徴としている。
(シナリオ)が各プロセスに対応して分解され、プロセ
ス毎のシナリオが生成される。このとき、分解された個
々のシナリオの集合から最初のシナリオが再現できるよ
うに、各シナリオに対しシナリオ間の同期をとるための
同期制約が付加される。また、このプロセス毎のシナリ
オについて、冗長な部分、すなわち冗長な同期制約が除
去されることにより、最適化される。この最適化によ
り、無害な非決定性が導入される。このように、プロセ
ス毎にシナリオを最適化することにより無害な非決定性
を導入することができ、容易に並行プログラムである第
2のプログラムを生成することができる。
ついて図面にしたがって具体的に説明する。なお、実施
の形態の各機能は、所定のソフトウェアがコンピュータ
及び周辺機器を制御することで実現される。すなわち、
本明細書では、発明及び実施の形態を、各機能や各処理
に対応する仮想的回路ブロック(「〜手段」や「〜部」
など)を想定して説明している。このため、各ブロック
に対して、各ハードウェア要素やソフトウェア要素は1
対1には対応しない。
ログラムの開発にあたり、並行プログラムを実行するた
めのいわゆるターゲットマシンを、並行プログラムを開
発するためのいわゆるホストマシンとして用いるものと
する。
いわゆるマルチCPUシステムを用い、各プロセスは共
有メモリにアクセスするものとする。図1は、本発明の
実施の形態に用いるコンピュータの概念図を示す。すな
わち、このコンピュータでは、各プロセッサC1,C2
はそれぞれ、プログラムを構成するプロセスP1とP2
を同時並行的に実行し、各プロセッサC1,C2は、プ
ロセスP1,P2の内容に応じて、バス及び入出力制御
回路Bを経由して、共有メモリMの他、入力装置I、出
力装置O、外部記憶装置Sなどの周辺装置にアクセスす
る。
入力装置Iはキーボードやマウスなどであり、各種コマ
ンドやデータの入力を行う手段である。外部記憶装置S
は、ハードディスク装置、磁気ディスク又は光磁気ディ
スクなどからなり、ソースプログラムやデバッグ状況に
関する情報を書込み又は読み出すことができるようにな
っている。出力装置Oは、CRT表示装置やプリンタ印
字装置などであり、ソースプログラムやデバッグ状況に
関する情報等をテキスト又はグラフィック表示等するこ
とによりユーザに提供する。ユーザは、これら入力装置
I及び出力装置Oを用いて、対話的にコンピュータを操
作することができる。但し、コンピュータの規模・構成
やCPUの数・形式は自由で、例えば、コンピュータネ
ットワーク、分散処理など各種の構成を自由に用い得
る。
をターゲットマシンとして実行するコンピュータは、い
わゆる並列計算機でもよく、この場合共有メモリの有無
は問わない。また、分散ネットワーク計算機システムや
単一のCPUにおけるマルチタスクシステムでもよい。
なお、単一のCPUにおけるマルチタスクシステムの場
合は、1つのCPUに複数のプロセスが存在しうる。
ーゲットマシンと異なってもよく(クロス開発環境)、
プログラムのシミュレータを有すれば、単一のCPUの
みを有するコンピュータでもよい。
グ支援装置、請求項15〜18に記載のプログラミング
支援方法、及び請求項19〜22に記載のプログラミン
グ支援プログラムを記録した媒体に対応するものであ
る。
タ上で実現されるが、態様の一例は、プロセッサC1又
はC2上で、本実施の形態の各機能を実現するための単
一のプロセスからなるプログラムを実行することであ
る。
ブロック図である。この図に示すように、本装置は、エ
ディタ1、区分手段2、検出手段3、生成手段4、表示
手段5、選択手段6、実行手段7、拡張手段8、及び変
換手段9を有する。
る複数のプロセスを含む第1のプログラムを作成・編集
するための手段である。区分手段2は、第1のプログラ
ムの各プロセスを実行制御可能なセクションに区分す
る。この区分は、例えば、第1のプログラムを構成する
各プロセスに、割り込み可能なポイント(以下、「シナ
リオポイント」という)を設定することによって行う。
て、各セクション間の依存関係(先行制約)を検出す
る。検出は、例えば以下のように行う。すなわち、ある
プロセスにある対象を変更する命令が検出された場合、
他の全てのプロセスにおいて、上記命令と同一の対象の
状態によって結果が影響される全ての命令を検出する。
そして、上記変更する命令について、影響される全ての
命令との間に、依存関係が存在するとみなす。
有メモリの書き込み命令と読み出し命令である。依存関
係の他の例は、プロセス間で共有されるフラグを変更す
る命令と、このフラグに応じて条件判断を行う命令であ
る。逆に、メモリの読み出し命令相互間には依存関係は
存在しない場合が一般的と考えられる。また、プロセッ
サ固有のローカルなメモリのみを処理対象とするサブル
ーチンは、依存関係検出の対象から除外してよい。
のありうる実行順序を、セクション間の分岐を用いて表
す実行経路(シナリオ)を生成する。シナリオは、並行
プログラムについて無限に存在するテストケースの中
で、設計者が期待する挙動を表現した本質的なものであ
り、また、外部との入出力だけでなく、内部の挙動も表
現している点で従来技術のテストケースと異なる。すな
わち、並行プログラムにおいては、各命令の実行の先後
関係に基づいて極めて多数の経路が存在する。そして、
すべてのケースのテストは現実的に困難である一方、本
質的に意味のある経路は全経路のごく一部である。な
お、このシナリオの表現方法は、例えば文献“Structur
al Testing of Concurrent Programs ”(Richard N. Ta
ylor et al,IEEE TRANSACTIONS ON SOFTWARE ENGINEERI
NG, VOL. 18, NO.3, MARCH 1992) に示されているよう
な周知の方法が採用される。
ク構造の状態遷移図で表すことができる。状態遷移図で
は、ある状態を表すノードからは、この状態に後続し得
るプロセスの各セクションが、分岐エッジとして次の状
態のノードに伸びる。
るが、同じいくつかの命令が異なった順序で実行された
後の経路は合流させても、命令の組み合わせからなる経
路の数は減少しない。例えば、ツリー構造において、命
令a,b,cにつき、a→b→cという順序で実行する
枝とb→a→cという順序で実行する枝とに分れている
場合に、それらを実行した後の経路を合流させたとして
も、全体の経路の数は変わらない。このため、シナリオ
としては、ネットワーク構造の方が理解が容易である。
すなわち、これらシナリオ上には、各プロセスの各セク
ションのあり得る実行順序に対応して、順序と同数の経
路が存在するためである。
リオ等の各種データを表示する。すなわち、生成手段4
によって生成されたシナリオがこの表示手段5に表示さ
れる。なお、各種情報を、プリンタなど所望の出力装置
から必要に応じて出力するようにしてもよい。
れたシナリオの各分岐のうち、上述した依存関係を有す
る分岐について上記セクションを選択するための手段で
ある。すなわち、シナリオが上記表示装置5に表示され
ると、設計者が選択手段6を通じて上記分岐についてセ
クションを選択するようになっている。
れたセクション間の実行順序に基づいて、第1のプログ
ラムを模擬実行する。この模擬実行の結果は、上記表示
手段5に表示されるようになっている。
上記シナリオと等価な挙動を導出し、それらの挙動が可
能となるようにシナリオを拡張する。具体的には、上記
シナリオについて、上記依存関係を有しないセクション
同士の分岐を付加することによって拡張を行う。これら
依存関係のない分岐の付加は、プログラムに、無害な非
決定性をもたらす。
れた上記シナリオに基づき第1のプログラムを変換して
第2のプログラムを生成する。すなわち、拡張された上
記シナリオに基づいて、選択された順序で一連の各セク
ションを実行する第2のプログラムに変換する。この変
換では、上記シナリオ以外の挙動をしないように抑制す
る。具体的には、ソースコードに同期命令を埋め込むこ
とにより、挙動の抑制を行う。
な構成例について示す。図3は、上記拡張手段8の具体
的な構成及び拡張手段8と変換手段9との関係を概念的
に示す機能ブロック図である。拡張手段8は、シナリオ
分解手段11と、シナリオ最適化手段12とを有してい
る。シナリオ分解手段11は、上記シナリオを第1のプ
ログラムに対応させて分解し、プロセス毎のシナリオを
生成する。また、シナリオ分解手段11は、単純にシナ
リオを分解するのではなく、分解した個々のシナリオの
集合から最初のシナリオが再現できるように、シナリオ
間の同期をとるための情報(同期命令)を付加する。
いる場合のシナリオ分解手段11による分解について説
明する。まず、図4及び図5に、シナリオ分解手段11
による同期命令を挿入する手順を示す。これらの図にお
いて、各プロセスにおける命令の実行を矢印のエッジで
表し、命令前後の状態を円形のノードで表している。ま
た、図4は、プロセス間に共有して使用される変数であ
る共有変数がない場合を示し、図5は、プロセス間に共
有変数がある場合を示す。
セスが共有変数をアクセスしない動作であるものとする
と、同図(b)に示すように、有向グラフの全ての分岐
に同期命令を挿入する。すなわち、この図に示すシナリ
オでは、2つ目のノードで分岐しているため、その分岐
の後に同期命令s1,s2を挿入する。次に、図5
(a)において、共有変数をアクセスする命令r,wを
それぞれ含むものとする。この場合、同図(b)に示す
ように、上記各命令r,wの前(または後)に同期命令
s0,s3を、分岐の後に同期命令s1,s2を挿入す
る。
に対して、シナリオ分解手段11は、各プロセス毎にプ
ロセスがもとからもっていた命令と同期命令のみからな
るグラフとして、プロセス毎のシナリオを生成する。
ラムを解析し、プロセス毎のシナリオに冗長な部分があ
ればそれらを除去し、最適化されたシナリオ(最適化シ
ナリオ)を生成する。すなわち、例えば上記同期命令の
冗長なものを削除し、必要な同期命令のみを残す。この
同期命令の削除は、グラフ縮約ルールを適用することに
よって行われる。図6及び図7に、このグラフ縮約ルー
ルの一例を示す。図6は、プロセス間に共有変数がない
場合を示し、図7は、プロセス間に共有変数がある場合
を示す。なお、以下に示すルールを直接プログラムとし
て表すようにしてもよい。
数がない場合について示す。同図(a)に示すように、
命令a1の後に分岐した同期命令s1,s2が挿入され
ており、その行き先が同じであり、同期命令s1,s2
以外に同期命令がない場合、同期命令s1,s2は削除
される(rule1)。また、同図(b)に示すよう
に、分岐がない状態で命令a1と命令a2の間に同期命
令s1が挿入されており、この同期命令s1以外に同期
命令がない場合、この同期命令は削除される(rule
2)。更に、同図(c)に示すように、命令a1の後に
分岐したループ状の同期命令s1が挿入されており、こ
の同期命令s1以外に同期命令がない場合、この同期命
令s1は削除される(rule3)。また、同期をとっ
ている他のプロセス側の同期命令がすべて削除された場
合は、対応する同期命令も削除される(rule4)。
数がある場合について示す。同図(a)に示すように、
命令a1の後に分岐した同期命令s1,s2が挿入され
ており、その行き先が同じであり、同期命令s1,s2
以外に同期命令がなく、かつ、命令a2が共有変数をア
クセスする命令ではない場合、同期命令s1,s2は削
除される(rule1)。また、同図(b)に示すよう
に、分岐がない状態で、命令a1と命令a2の間に同期
命令s1,s2が挿入されており、これら同期命令s
1,s2以外に同期命令がない場合、同期命令s1のみ
が削除され同期命令s2のみが残される(rule
2)。更に、同図(c)に示すように、命令a1の後に
分岐したループ状の同期命令s1が挿入されており、こ
の同期命令s1以外に同期命令がない場合、この同期命
令s1は削除される(rule3)。また、同期をとっ
ている他のプロセス側の同期命令が削除された場合は、
対応する同期命令も削除される(rule4)。
シナリオと、そのシナリオから拡張される挙動とのみを
再現する第2のプログラムを生成する。具体的には、例
えば上記のようにして残した同期命令を第2のプログラ
ムを示すソースプログラムに付加することによって行
う。
ラミングは、以下のような手順で行われる。ここで、図
8は、本実施の形態におけるプログラミングの手順を示
すフローチャートである。
は、エディタ1を用いて第1のプログラムを作成・入力
する(ステップ801)。プログラムの作成は、例え
ば、対象の並行システムに対し、並行性を用いた自然な
モデル化を行い、モデルを構成する各プロセスの構造と
挙動とをコーディングすることによって行うことができ
る。この時点では、この第1のプログラムには、エラー
が潜在的に存在する可能性がある。
て用いる並行プログラムを構成するプロセスP1,P2
のソースコードの例である。
制御関係が存在しないので、各プロセスの各命令の実行
順序は予測不能な悪い非決定性を帯びている。また、図
9は、この時点でのプロセスP1,P2が各プロセッサ
C1,C2に対応する状態を示す概念図である。
ラムが作成されると、区分手段2が、第1のプログラム
の前記各プロセスP1,P2を、実行制御可能なセクシ
ョンに区分する(ステップ802)。すなわち、区分手
段2は、第1のプログラムの各プロセスP1,P2に上
述したシナリオポイントを設定することにより区分を行
う。
に、割り込み可能なポイントを表すポイント(以下「シ
ナリオポイント」という)を設定することによって行う
ことができる。シナリオポイントは、例えば各命令の前
後に設定すればよく、また、プロセス内部のみでのロー
カルな一連の処理が存在するときは、その処理の途中で
はなく処理の前後にシナリオポイントを設定してもよ
い。
区間は割り込み禁止区間であるから、区間の途中で割り
込むことはできず、したがって同期信号などによって実
行制御を行うことができない。この結果、シナリオポイ
ントで区切られた区間がセクションとなる。ここでは、
各命令が1つのセクションを形成するようにシナリオポ
イントを指定するものとし、以下の説明では命令語その
ものをセクション名として用いる。なお、プロセス中の
同期命令は割り込みを明示的に発生させるので、自動的
にシナリオポイントとなる。
が、プロセスの各セクション間の依存関係を検出する
(ステップ803)。検出された依存関係は所定のメモ
リ領域に保存する。すなわち、検出手段3は、あるプロ
セスにある対象を変更する命令を検出すると、他の全て
のプロセスにおいて、その対象が変更されることによっ
て結果に影響を受ける全ての命令を検出する。そして、
その変更する命令と、上記影響を受ける全ての命令との
間に、依存関係が存在するとみなす。
書き込む書き込み命令を検出した場合、他の全てのプロ
セスにおいて、そのデータを読み出す読み出し命令を検
出する。そして、上記書き込み命令とその読み出し命令
との間に依存関係が存在するとみなす。
4が、上述したシナリオを生成する(ステップ80
4)。図10はシナリオの一例であり、表1に例示した
プログラムについてあり得る全ての経路を状態遷移図で
表現したシナリオの例である。シナリオを表すこのよう
な状態遷移図をシナリオグラフと呼ぶ。この図では、各
命令の実行を矢印のエッジで表し、命令前後の各状態を
円形のノードで表している。なお、図10に示すシナリ
オグラフは、遷移可能な経路を全て表した場合の図であ
り、そのような経路が10通り存在することを示してい
る。
成では、各プロセスの各セクションの挙動順序を、依存
関係を有するセクション同士の分岐に限定して表す。こ
のようなシナリオの生成では、依存関係を有しないセク
ション同士の分岐については、いずれかのセクションを
生成しない。例えば、図10のノードn12におけるr
ead1とread2の分岐は、read1とread
2に依存関係が無いため、いずれが先でも結果は同じで
ある。そのため、例えば、セクションread2のエッ
ジは生成せず、read1のエッジのみ生成する。
成されたシナリオが、表示手段5によって表示される
(ステップ805)。このとき、依存関係を有しないセ
クションについては、上記のようにいずれかの分岐のみ
が表示されるが、依存関係を有するセクション同士の分
岐については、設計者が選択手段6を通じてセクション
を選択する(ステップ806)。
ては、init1とread2との間に依存関係があ
る。その場合、図11に示すように、選択に係るノード
n11とセクションinit1,read2のエッジが
太線で強調表示されると共に、画面に選択のためのウイ
ンドウが表示される。
表すアイコンが表示されており、設計者はマウスのポイ
ンタでいずれかのアイコンをポイントし、マウスのボタ
ンをクリックすることによって所望のセクションを選択
することができる。ここでは、init1を先に実行す
るセクションとして選択し、read2を後に実行する
セクションとして選択したものとする。すなわち、in
it1よりread2を先に実行すると初期化の前に読
み込むことになり、バグとなるので選択しない。そし
て、選択されなかったエッジは削除される。図12は、
ノードn11からのセクションread2が削除された
後のシナリオグラフの状態を示す図である。
れたエッジのみを入力とするノードも遷移の可能性がな
くなるため生成されない。すなわち、ノードn11にお
いてセクションread2が選択された場合に生成され
るはずであったノードn21,n31,n22,n32
は生成されない。n12においては、read1とre
ad2に依存関係がないので、そのような場合は、ノー
ドn12における分岐においてread2は省略されr
ead1のエッジのみが生成される。
存在しない場合や、セクションのいずれが先になる場合
もそれぞれ意味のある動作を行う場合は、双方を選択し
てもよい。図11のウインドウ中のアイコン「双方あ
り」は、このような選択を入力するためのものである。
ここで、図13は、ノードn13についてwrite1
とread2から分岐を選択する場合の画面の表示例を
示した図である。この状態で「双方あり」のアイコンを
選択した場合は、エッジは削除されず、図13に示すよ
うな状態のままとなる。
選択を行った結果に基づき、設計者は、実行手段7を用
いて第1のプログラムを模擬実行する(ステップ80
7)。すなわち、設計者は、セクションの選択を行う
と、逐次第1のプログラムを模擬実行する。そして、そ
の実行結果は、表示手段7に表示される(ステップ80
8)。その表示された実行結果により、設計者は第1の
プログラム中にバグが存在するか否かを判断し(ステッ
プ809)、バグが存在せず、結果が意図した通りであ
って、かつ、シナリオの生成処理が終了していない場合
は(ステップ810)、設計者はシナリオの生成の処理
を続行する(ステップ804)。一方、バグが存在し、
結果が意図した通りでない場合は、設計者はエディタ1
によって第1のプログラムのバグを修正する(ステップ
801)。
処理(ステップ806)において、ノード13のセクシ
ョンwrite1,read2の双方が選択されている
場合、この時点でシナリオグラフに残っているシナリオ
は、次の2通りの経路のシナリオsn1,sn2を含
む。
ナリオsn1,sn2に従って模擬実行を行う。この結
果、バグが存在せず、結果が意図した通りである場合、
シナリオの生成処理(ステップ804)において、図1
5に示すようなシナリオが生成される。ここでは、図1
0に示すノードn23において、セクションwrite
1とwrite2に依存関係があり、n11の場合と同
様に、セクションwrite1のエッジが選択された場
合を示す。
とき、シナリオグラフに表現されているシナリオは、次
の2通りの経路のシナリオsn1,sn2を含む。
ついて無限に存在するテストケースの中で、設計者が期
待する挙動を表現した本質的なものである。
が、上記シナリオについて、依存関係を有しないセクシ
ョン同士の分岐を付加することによって拡張する(ステ
ップ811)。すなわち、拡張手段8は、検出手段3が
検出した依存関係に基づき、依存関係を有していないた
めに生成手段4によって生成されなかったエッジと、そ
のエッジの遷移先のノードをシナリオグラフ中に復元す
る。
張した後の状態を図16に示す。この図において、設計
者の選択に基づいて残された挙動のエッジを細い実践の
矢印で示し、拡張された挙動のエッジを太い実線の矢印
で示し、シナリオグラフから削除された結果抑制される
挙動のエッジを破線の矢印で示す。すなわち、ノードn
12から分岐しているセクションread2と、ノード
n22と、そのノードn22から分岐しているセクショ
ンread1とが復元される。
たエッジ及びノードは、上記のように検出手段3が検出
した依存関係に基づいて復元してもよいが、生成手段4
がシナリオの原形の生成時にそれらのエッジ及びノード
を記録しておき、この記録に基づいて復元するようにし
てもよい。すなわち、図17に示すように、生成手段4
が所定のメモリ領域に上記エッジを記憶させておき、拡
張手段8は、その情報のみを用いて拡張を行う。
れたエッジ及び削除されたエッジのみが経由するノード
は参考に示したもので、実際にはこれらに関するデータ
はメモリ上から消去してかまわない。
により、プログラムに無害な非決定性がもたらされる。
このため、変換後の第2のプログラムの非決定性が増大
し、プログラムの並列性が向上する。
9が、このように得られたシナリオに基づいて、第1の
プログラムを、前記選択に基づく順序で一連の前記各セ
クションを実行する第2のプログラムに変換する(ステ
ップ812)。
ョン間で、全てのシナリオで実行が先とされたセクショ
ンの後に、プロセス間の同期信号の発信命令(送信セマ
フォア)を挿入し、全てのシナリオで実行が後とされた
セクションの前に、上記同期信号の待ち受け命令(受信
セマフォア)を挿入することによって行うことができ
る。これによって、セクション間の指定された先後関係
が、プロセス間の同期信号によって容易かつ確実に実現
される。
のプログラムを次に示す。
グラムの各プロセスが、同期命令によるタイミングに基
づいて実行される状態を示す概念図である。この図にお
いて、プロセスP2のread2は必ずプロセスP1の
init1の後で実行されるが、これは、図16のノー
ドn11においてinit1が先、read2が後とし
て選択されたことに対応する。
rite2は必ずプロセスP1のwrite1の後で実
行されるが、これは、図16のノードn23においてw
rite1が先、write2が後として選択されたこ
とに対応する。
ead2について、プロセスP1の各セクションrea
d1,write1のいずれとの間においても、先後関
係が非決定的であるが、これは、図16において、re
ad1,write1の前後の各ノードn12,n1
3,n14のうち、いずれのノードからもread2の
エッジが存在することに対応する。これによって、並行
プログラムのよい非決定性を含む無害な非決定性が維持
される。
的な処理について説明する。ここでは、図8におけるス
テップ801〜810において、図19に示すような第
1のプログラムが生成されたものとする。すなわち、図
19は、その第1のプログラムを構成するプロセスP
1,P2のソースコードを示したものである。
図20に示すようなシナリオグラフが生成されたものと
する。ここで、命令w0,w1,rは、共有変数をアク
セスする命令であるものとする。更に、図21は、拡張
手段8及び変換手段9が第2のプログラムを生成する手
順を示すフローチャートである。
たシナリオに同期命令を挿入する(ステップ210
1)。すなわち、図22に示すように、共有変数をアク
セスする命令w0,w1,rの前とすべての分岐の後と
に同期命令s0〜s3を挿入する。次に、シナリオ分解
手段11は、同期命令の挿入されたシナリオを、プロセ
スP1とP2とに分解する(ステップ2102)。この
とき、すべての状態で2つのプロセスP1,P2が同期
を取るという強い同期制約の基にシナリオの分解を行
う。図23に、分解したシナリオを示す。同図(a)は
プロセスP1のシナリオを示し、同図(b)はプロセス
P2のシナリオを示す。これら2つのプロセスP1,P
2は、同じ名前の同期命令s0〜s3が与えられること
により、同期をとるようになる。
ナリオを最適化する(ステップ2103)。すなわち、
第1のプログラムを解析し、冗長な同期命令を削除す
る。具体的には、図23に示す同期命令s0〜s3には
冗長性があるため、必要な同期命令のみ残して冗長な同
期命令を除去する。このとき、上述した図6及び図7に
示すグラフ縮約ルールを適用する。すなわち、図23
(b)に示すプロセスP2のシナリオにおいて、図7
(c)に示すrule2と図7(c)に示すrule3
とに基づいて同期命令s2,s3が削除される。また、
図7(b)に示すrule2に基づいて、同期命令s0
が削除される。これに対応して、rule4に基づい
て、プロセスP1のシナリオにおいて同期命令s0,s
2,s3が削除される。
ラフの例を、図24に示す。同図において、(a)はプ
ロセスP1の最適化されたシナリオグラフであり、
(b)はプロセスP2の最適化されたシナリオグラフで
ある。この場合、同期命令s1のみ残して他の同期命令
はすべて削除されている。このような最適化は、すなわ
ち、無害な非決定性の導入を行っていることに対応す
る。
ラムである第2のプログラムを生成する(ステップ21
04)。このとき、上記シナリオの最適化において残さ
れた同期命令を、ソースコードに同期命令sync(<
ID>)として埋め込む。すなわち、図24に示す上記
同期命令s1を、同期命令sync(s1)として挿入
する。図25は、第2のプログラムを示すソースコード
である。
によって妥当性を確認したシナリオおよびそれと等価な
挙動しか示さないように、並行プログラムが抑制される
ので、シナリオで与えた以外の非決定性は排除される。
プロセスが実行制御可能なセクションに区分され、各プ
ロセスの各セクションのありうる挙動順序がシナリオで
表される。このシナリオの各分岐について、先に実行す
べきセクションのエッジを残し、他方のセクションの可
能性を削除してゆくと、意図する実行順序の組み合わせ
のみがシナリオ上に残る。このようなシナリオに基づい
て、第1のプログラムは、実行タイミング制御の命令の
挿入によって第2のプログラムに変換され、第2のプロ
グラムには悪い非決定性が存在しない。
行順序を指定するだけで指定通りのプログラムが得られ
るので、信頼性の高い並行プログラムを容易に作成する
ことができる。
しないために選択が不要な分岐については最初からシナ
リオに含まれないので、シナリオが単純化され理解容易
となり、設計者が行う選択の回数も減少するので、プロ
グラミングが効率化される。この場合、依存関係を有し
ないセクション同士の実行順序は悪い非決定性を生じな
いので、シナリオに含まれない場合でもプログラムの信
頼性は低下しない。
しつつシナリオ通りに第1のプログラムを模擬実行する
ことができる。このため、実行結果によって選択内容の
妥当性を確認したり、プログラム中のバグを発見するこ
とによって、プログラムの信頼性とプログラミングの効
率が向上する。
なく、実施態様の変更は自由であるから、次に例示する
ような他の実施の形態をも包含するものである。例え
ば、プロセス(タスク)やCPUの数は2つには限定さ
れず、自由に定めることができる。
を有しないセクションについては自動的に一方のみが選
択されるようにし、依存関係を有するセクションについ
てのみ設計者が逐次選択するようにしたが、これに限ら
ない。例えば、依存関係を有しないセクションについて
も、同様に設計者が選択するようにしてもよい。すなわ
ち、ノード毎に設計者が選択を行うようにしてもよい。
この場合、分岐の選択の後の拡張処理を不要とすること
もできる。
リオを生成してから、依存関係を有しないセクション同
士の分岐について、いずれかのセクションを自動的に削
除するようにしてもよい。例えば、上述したように、図
10に示すノードn12におけるセクションread1
とread2の分岐のように各セクションに依存関係が
ない場合、図26に示すように、生成手段4は一方のセ
クション(例えばread2)を削除する。
例えば図27に示すように、表示手段5が表示画面にシ
ナリオグラフを表示し、設計者がセクションの選択を行
う。この場合、選択は、依存関係に係る各セクションに
対応するエッジが分岐しているノードを指摘し、いずれ
かのセクションに係るエッジを設計者が選択することに
よって行うことができる。図27では、選択に係るノー
ドn11とエッジinit1,read2が太線で強調
表示されると共に、画面に選択のためのウインドウが現
れている。図28は、ノードn11からのセクションr
ead2が削除された後のシナリオグラフの状態を示す
図である。この後、削除されたセクションread2の
エッジのみを入力とするノードn21,n31,n2
2,n32が順次削除される。図29は、これらが順次
削除された後のシナリオグラフの状態を示す図である。
ウ中のアイコン「双方あり」を選択した場合は、エッジ
は削除されない。図30は、ノードn13についてwr
ite1とread2からの分岐を選択する場合の画面
の表示例を示した図である。この状態で「双方あり」の
アイコンを選択した場合は、エッジは削除されず、図3
0の状態のままとなる。更に、設計者がノード23につ
いてwrite2を後として選択し、図31のように削
除すると、ノード33もこれにともなって削除される。
このようにして、図15に示すようなシナリオグラフの
状態となる。
者がその時点でシナリオグラフに残っている各経路につ
いて、エッジの登場順に、エッジに対応するプログラム
のセクションの命令をインタプリタ形式で実行すること
によって実現できる。また、シナリオ上にいくつかの経
路が存在するときは、マウスクリックによって模擬実行
すべき経路上のエッジを選択するようにしてもよい。
定されず、ルーチンや関数など他の単位をセクションと
してもよい。また、シナリオにおいて一つのノードから
発する分岐の数は2つには限定されず3つ以上でもよ
い。また、情報の表示や入力のための画面の表示形式も
実施の形態に示したものには限定されず自由に定めるこ
とができる。
どを行うための画面の他の表示例を示す図である。同図
に示す表示画面において、「タスク1」及び「タスク
2」のウインドウでは、プログラム中に「snp
(1)」等のシナリオポイントが設定されている。ま
た、「グローバル状態グラフ」では、生成されたシナリ
オのシナリオグラフが表示されている。ここでは、sn
p4においてsnp5とsnp6との分岐の選択が必要
となっており、「分岐選択」のウインドウが表示されて
いる。更に、複数のプロセス間における共通のデータは
「共有データ」として表示されている。
ス間の実行順序を定める手法は、同期信号の発信命令や
待ち受け命令には限定されず、特定の処理を実行するた
めのトークンの授受など、他の手法によって実現しても
よい。
信頼な並行プログラムを容易に開発することができる。
構成を示す機能ブロック図。
ク図。
成を示す機能ブロック図。
よる同期命令の挿入を説明する図。
よる同期命令の挿入を説明する図。
する図。
する図。
示すフローチャート。
P2が各プロセッサC1,C2に対応する状態を示す概
念図。
グラムについてあり得る全ての経路を状態遷移図で表現
したシナリオの例。
てinit1とread2から分岐を選択する場合の画
面の表示例を示す図。
てinit1を先として選択したシナリオグラフの状態
を示す図。
てwrite1とread2から分岐を選択する場合の
画面の表示例を示す図。
てwrite1とread2の双方を選択した場合のシ
ナリオグラフの状態を示す図。
動を表現したシナリオを示す図。
ラフを拡張した後の状態を示す図。
を記憶させておく例を示す図。
プログラムの各プロセスが、同期命令によるタイミング
に基づいて実行される状態を示す概念図。
例を示すソースコード。
プログラムに基づいて生成されたシナリオグラフの例を
示す図。
段9の動作を説明するフローチャート。
たシナリオグラフの例。
グラフの例。
オグラフの例。
を示すソースコード。
依存関係がない分岐のうち、一方のread2を削除し
た状態のシナリオグラフを示す図。
グラフを表示し、セクションの選択を行う場合の画面の
表示例を示す図。
セクションread2が削除された後のシナリオグラフ
の状態を示す図。
1,n22,n32が順次削除された後のシナリオグラ
フの状態を示す図。
てwrite1とread2から分岐を選択する場合の
画面の表示例を示した図。
てwrite2を後として選択し削除したシナリオグラ
フの状態を示す図。
岐の選択などを行うための画面の他の表示例を示す図。
Claims (22)
- 【請求項1】 第1のプログラムのプロセスを複数のセ
クションで表し、前記複数のセクションのあり得る実行
順序を前記セクション間の分岐を用いて表す実行経路に
対し、前記実行経路の前記分岐について前記セクション
を選択するための選択手段と、 前記第1のプログラムを、前記選択手段による選択がな
された前記実行経路に基づいて、前記選択に基づく順序
で一連の前記各セクションを実行する第2のプログラム
に変換する変換手段とを具備することを特徴とするプロ
グラミング支援装置。 - 【請求項2】 複数のプロセスを含む第1のプログラム
の前記各プロセスを複数のセクションで表し、前記複数
のセクションのあり得る実行順序を前記セクション間の
分岐を用いて表す実行経路に対し、前記実行経路の前記
分岐について前記セクションを選択するための選択手段
と、 前記第1のプログラムを、前記選択手段による選択がな
された前記実行経路に基づいて、前記選択に基づく順序
で一連の前記各セクションを実行する第2のプログラム
に変換する変換手段とを具備することを特徴とするプロ
グラミング支援装置。 - 【請求項3】 複数のプロセスを含む第1のプログラム
の前記各プロセスを、実行制御可能なセクションに区分
する区分手段と、 前記各プロセスの前記各セクションのあり得る実行順序
を、前記セクション間の分岐を用いて表す実行経路を生
成する生成手段と、 前記生成手段によって生成される前記実行経路の前記分
岐について、前記セクションを選択するための選択手段
と、 前記第1のプログラムを、前記選択手段による選択がな
された前記実行経路に基づいて、前記選択に基づく順序
で一連の前記各セクションを実行する第2のプログラム
に変換する変換手段とを具備することを特徴とするプロ
グラミング支援装置。 - 【請求項4】 前記生成手段は、前記各プロセスの前記
各セクションの実行順序を、前記選択の結果が前記第2
のプログラムによる実行結果に影響を与えるセクション
同士の分岐に限定して表す実行経路を生成するように構
成されたことを特徴とする請求項3記載のプログラミン
グ支援装置。 - 【請求項5】 前記選択手段による選択がなされた前記
実行経路を、前記選択の結果が前記第2のプログラムに
よる実行結果に影響を与えないセクション同士の分岐を
付加することによって拡張する拡張手段を具備すること
を特徴とする請求項4記載のプログラミング支援装置。 - 【請求項6】 複数のプロセスを含む第1のプログラム
の前記各プロセスを、実行制御可能なセクションに区分
する区分手段と、 前記各セクション間の依存関係を検出する検出手段と、 前記各プロセスの前記各セクションのありうる実行順序
を、セクション間の分岐を用いて表す実行経路を生成す
る生成手段と、 前記実行経路の前記分岐のうち、前記依存関係を有する
分岐について前記セクションを選択するための選択手段
と、 前記第1のプログラムを、前記選択手段による選択がな
された前記実行経路に基づいて、前記選択に基づく順序
で一連の前記各セクションを実行する第2のプログラム
に変換する変換手段とを具備することを特徴とするプロ
グラミング支援装置。 - 【請求項7】 前記生成手段は、前記各プロセスの前記
各セクションの実行順序を、前記依存関係を有するセク
ション同士の分岐に限定して表す実行経路を生成するよ
うに構成されたことを特徴とする請求項6記載のプログ
ラミング支援装置。 - 【請求項8】 前記選択手段による選択がなされた前記
実行経路を、前記依存関係を有しないセクション同士の
分岐を付加することによって拡張する拡張手段を有する
ことを特徴とする請求項7記載のプログラミング支援装
置。 - 【請求項9】 前記第1のプログラムを、前記選択手段
による選択がなされた前記実行経路上のセクション間の
実行順序に基づいて模擬実行する実行手段を具備するこ
とを特徴とする請求項1、2、3、又は6記載のプログ
ラミング支援装置。 - 【請求項10】 前記変換手段は、 前記依存関係において実行が先とされた前記セクション
の後に、プロセス間の同期を実現するための第1の命令
を挿入し、当該依存関係において実行が後とされた前記
セクションの前に、前記第1の命令に対応する第2の命
令を挿入することによって、前記変換を行うように構成
されたことを特徴とする請求項1、2、3、又は6記載
のプログラミング支援装置。 - 【請求項11】 前記拡張手段は、 前記実行経路を前記各プロセスに対応させて分解し前記
プロセス毎の実行経路を生成する分解手段と、 前記プロセス毎の実行経路について、冗長な部分を削除
する削除手段とを有し、 前記変換手段は、 前記冗長な部分が削除された各実行経路に基づいて、前
記第2のプログラムを生成するように構成されたことを
特徴とする請求項1、2、3、及び6記載のプログラミ
ング支援装置。 - 【請求項12】 前記拡張手段は、 前記実行経路を前記各プロセスに対応させて分解し前記
プロセス毎の実行経路を生成する分解手段と、 前記プロセス毎の実行経路について、冗長な部分を削除
する削除手段とを有し、 前記変換手段は、 前記冗長な部分が削除された各実行経路に基づいて、前
記第2のプログラムを生成するように構成され、 前記分解手段は、前記実行経路を分解する際に、前記各
実行経路に対し該実行経路間の同期をとるための同期制
約を付加するように構成され、 前記削除手段は、前記同期制約のうち冗長な同期制約を
除去するように構成されたことを特徴とする請求項1、
2、3、及び6記載のプログラミング支援装置。 - 【請求項13】 複数のプロセスを含む第1のプログラ
ムの前記各プロセスを複数のセクションで表し、前記複
数のセクションのあり得る実行順序を前記セクション間
の分岐を用いて表す実行経路を生成する生成手段と、 前記第1のプログラムを、前記生成手段によって生成さ
れた実行経路に基づいて、一連の前記セクションを実行
する第2のプログラムに変換する変換手段とを具備し、 前記拡張手段は、 前記実行経路を前記各プロセスに対応させて分解し前記
プロセス毎の実行経路を生成する分解手段と、 前記プロセス毎の実行経路について、冗長な部分を削除
する削除手段とを有し、 前記変換手段は、 前記冗長な部分が削除された各実行経路に基づいて、前
記第2のプログラムを生成するように構成されたことを
特徴とするプログラミング支援装置。 - 【請求項14】 前記分解手段は、前記実行経路を分解
する際に、前記各実行経路に対し該実行経路間の同期を
とるための同期制約を付加するように構成され、 前記削除手段は、前記同期制約のうち冗長な同期制約を
除去するように構成されたことを特徴とする請求項13
記載のプログラミング支援装置。 - 【請求項15】 複数のプロセスを含む第1のプログラ
ムの前記各プロセスを複数のセクションで表し、前記複
数のセクションのあり得る実行順序を前記セクション間
の分岐を用いて表す実行経路に対し、前記実行経路の前
記分岐について前記セクションを選択するための選択処
理と、 前記第1のプログラムを、前記選択処理における選択が
なされた前記実行経路に基づいて、前記選択に基づく順
序で一連の前記各セクションを実行する第2のプログラ
ムに変換する変換処理とを具備することを特徴とするプ
ログラミング支援方法。 - 【請求項16】 複数のプロセスを含む第1のプログラ
ムの前記各プロセスを、実行制御可能なセクションに区
分する区分処理と、 前記各プロセスの前記各セクションのあり得る実行順序
を、前記セクション間の分岐を用いて表す実行経路を生
成する生成処理と、 前記生成処理において生成される前記実行経路の前記分
岐について、前記セクションを選択するための選択処理
と、 前記第1のプログラムを、前記選択処理における選択が
なされた前記実行経路に基づいて、前記選択に基づく順
序で一連の前記各セクションを実行する第2のプログラ
ムに変換する変換処理とを具備することを特徴とするプ
ログラミング支援方法。 - 【請求項17】 複数のプロセスを含む第1のプログラ
ムの前記各プロセスを、実行制御可能なセクションに区
分する区分処理と、 前記各セクション間の依存関係を検出する検出処理と、 前記各プロセスの前記各セクションのあり得る実行順序
を、セクション間の分岐を用いて表す実行経路を生成す
る生成処理と、 前記実行経路の前記分岐のうち、前記依存関係を有する
分岐について前記セクションを選択するための選択処理
と、 前記第1のプログラムを、前記選択処理における選択が
なされた前記実行経路に基づいて、前記選択に基づく順
序で一連の前記各セクションを実行する第2のプログラ
ムに変換する変換処理とを具備することを特徴とするプ
ログラミング支援方法。 - 【請求項18】 複数のプロセスを含む第1のプログラ
ムの前記各プロセスを複数のセクションで表し、前記複
数のセクションのあり得る実行順序を前記セクション間
の分岐を用いて表す実行経路を生成する生成処理と、 前記第1のプログラムを、前記生成処理において生成さ
れた実行経路に基づいて、一連の前記セクションを実行
する第2のプログラムに変換する変換処理とを具備し、 前記拡張処理は、 前記実行経路を前記各プロセスに対応させて分解し前記
プロセス毎の実行経路を生成する分解処理と、 前記プロセス毎の実行経路について、冗長な部分を削除
する削除処理とを有し、 前記変換処理は、 前記冗長な部分が削除された各実行経路に基づいて、前
記第2のプログラムを生成することを特徴とするプログ
ラミング支援方法。 - 【請求項19】 複数のプロセスを含む第1のプログラ
ムの前記各プロセスを複数のセクションで表し、前記複
数のセクションのあり得る実行順序を前記セクション間
の分岐を用いて表す実行経路に対し、前記実行経路の前
記分岐について前記セクションを選択するための選択処
理と、 前記第1のプログラムを、前記選択処理における選択が
なされた前記実行経路に基づいて、前記選択に基づく順
序で一連の前記各セクションを実行する第2のプログラ
ムに変換する変換処理とを具備することを特徴とするプ
ログラミング支援方法を実行させるためのプログラム支
援プログラムを記録した媒体。 - 【請求項20】 複数のプロセスを含む第1のプログラ
ムの前記各プロセスを、実行制御可能なセクションに区
分する区分処理と、 前記各プロセスの前記各セクションのあり得る実行順序
を、前記セクション間の分岐を用いて表す実行経路を生
成する生成処理と、 前記生成処理において生成される前記実行経路の前記分
岐について、前記セクションを選択するための選択処理
と、 前記第1のプログラムを、前記選択処理における選択が
なされた前記実行経路に基づいて、前記選択に基づく順
序で一連の前記各セクションを実行する第2のプログラ
ムに変換する変換処理とを具備することを特徴とするプ
ログラミング支援方法を実行させるためのプログラム支
援プログラムを記録した媒体。 - 【請求項21】 複数のプロセスを含む第1のプログラ
ムの前記各プロセスを、実行制御可能なセクションに区
分する区分処理と、 前記各セクション間の依存関係を検出する検出処理と、 前記各プロセスの前記各セクションのありうる実行順序
を、セクション間の分岐を用いて表す実行経路を生成す
る生成処理と、 前記実行経路の前記分岐のうち、前記依存関係を有する
分岐について前記セクションを選択するための選択処理
と、 前記第1のプログラムを、前記選択処理における選択が
なされた前記実行経路に基づいて、前記選択に基づく順
序で一連の前記各セクションを実行する第2のプログラ
ムに変換する変換処理とを具備することを特徴とするプ
ログラミング支援方法を実行させるためのプログラム支
援プログラムを記録した媒体。 - 【請求項22】 複数のプロセスを含む第1のプログラ
ムの前記各プロセスを複数のセクションで表し、前記複
数のセクションのあり得る実行順序を前記セクション間
の分岐を用いて表す実行経路を生成する生成処理と、 前記第1のプログラムを、前記生成処理において生成さ
れた実行経路に基づいて、一連の前記セクションを実行
する第2のプログラムに変換する変換処理とを具備し、 前記拡張処理は、 前記実行経路を前記各プロセスに対応させて分解し前記
プロセス毎の実行経路を生成する分解処理と、 前記プロセス毎の実行経路について、冗長な部分を削除
する削除処理とを有し、 前記変換処理は、 前記冗長な部分が削除された各実行経路に基づいて、前
記第2のプログラムを生成することを特徴とするプログ
ラミング支援方法を実行させるためのプログラム支援プ
ログラムを記録した媒体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP34705396A JP3641090B2 (ja) | 1995-12-26 | 1996-12-26 | プログラミング支援装置とその方法 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP33878395 | 1995-12-26 | ||
JP7-338783 | 1995-12-26 | ||
JP34705396A JP3641090B2 (ja) | 1995-12-26 | 1996-12-26 | プログラミング支援装置とその方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH09237191A true JPH09237191A (ja) | 1997-09-09 |
JP3641090B2 JP3641090B2 (ja) | 2005-04-20 |
Family
ID=26576208
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP34705396A Expired - Fee Related JP3641090B2 (ja) | 1995-12-26 | 1996-12-26 | プログラミング支援装置とその方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3641090B2 (ja) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH11134307A (ja) * | 1997-10-31 | 1999-05-21 | Toshiba Corp | プログラム開発支援装置及び方法並びにプログラム開発支援用ソフトウェアを記録した記録媒体 |
JPH11175369A (ja) * | 1997-12-10 | 1999-07-02 | Toshiba Corp | プログラム開発支援装置、プログラム開発支援方法及びプログラム開発支援プログラムを記録した媒体 |
US6675207B1 (en) | 1999-02-15 | 2004-01-06 | International Business Machines Corporation | Possibility of execution evaluating apparatus and method therefor |
JP2009087356A (ja) * | 2007-10-02 | 2009-04-23 | Nec Lab America Inc | 保護された独立関係を用いた部分的命令低減 |
US7844953B2 (en) | 2005-06-30 | 2010-11-30 | Fujitsu Limited | Program, apparatus and method for verifying program |
-
1996
- 1996-12-26 JP JP34705396A patent/JP3641090B2/ja not_active Expired - Fee Related
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH11134307A (ja) * | 1997-10-31 | 1999-05-21 | Toshiba Corp | プログラム開発支援装置及び方法並びにプログラム開発支援用ソフトウェアを記録した記録媒体 |
JPH11175369A (ja) * | 1997-12-10 | 1999-07-02 | Toshiba Corp | プログラム開発支援装置、プログラム開発支援方法及びプログラム開発支援プログラムを記録した媒体 |
US6675207B1 (en) | 1999-02-15 | 2004-01-06 | International Business Machines Corporation | Possibility of execution evaluating apparatus and method therefor |
US7844953B2 (en) | 2005-06-30 | 2010-11-30 | Fujitsu Limited | Program, apparatus and method for verifying program |
JP2009087356A (ja) * | 2007-10-02 | 2009-04-23 | Nec Lab America Inc | 保護された独立関係を用いた部分的命令低減 |
Also Published As
Publication number | Publication date |
---|---|
JP3641090B2 (ja) | 2005-04-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6067415A (en) | System for assisting a programmer find errors in concurrent programs | |
JP2795244B2 (ja) | プログラムデバッグシステム | |
Ben-Ari | Principles of concurrent and distributed programming | |
JP4629768B2 (ja) | 並列化処理方法、システム、及びプログラム | |
US7055065B2 (en) | Method, system, and computer program product for automated test generation for non-deterministic software using state transition rules | |
US5809283A (en) | Simulator for simulating systems including mixed triggers | |
US6598222B2 (en) | Programming method for concurrent programs and program supporting apparatus thereof | |
US20050204344A1 (en) | Program analysis device, analysis method and program of same | |
US5960182A (en) | Hardware-software co-simulation system, hardware-software co-simulation method, and computer-readable memory containing a hardware-software co-simulation program | |
EP0453394A2 (en) | Dynamic process for the generation of biased pseudo-random test patterns for the functional verification of hardware designs | |
US5784593A (en) | Simulator including process levelization | |
JP4806529B2 (ja) | 複製されたロジックを使用するデバッグの方法とシステム | |
US8701084B1 (en) | Preview of auto-fix changes to software code | |
JP2008544337A (ja) | 複製ロジック及びトリガロジックを用いたデバッグのための方法及びシステム | |
JP4050339B2 (ja) | 並行プログラム作成支援装置及び並行プログラム作成方法並びに並行プログラム実行装置 | |
US7266791B2 (en) | High level synthesis device, method for generating a model for verifying hardware, method for verifying hardware, control program, and readable recording medium | |
JP3641090B2 (ja) | プログラミング支援装置とその方法 | |
US7228513B2 (en) | Circuit operation verification device and method | |
JP3675623B2 (ja) | プログラム開発支援装置及び方法並びにプログラム開発支援用ソフトウェアを記録した記録媒体 | |
US6581029B1 (en) | Method and system for optimizing execution of a collection of related module sequences by eliminating redundant modules | |
US5956511A (en) | Program development support apparatus, program development support method, and storage medium therefor | |
Melikov et al. | System of designing test programs and modeling of the memory microcircuits | |
JP3278588B2 (ja) | プログラム開発支援装置及びプログラム開発支援方法 | |
US6789234B2 (en) | Method and system for a timing based logic entry | |
JP5067705B2 (ja) | 異常系テスト支援装置、異常系テスト支援方法、及びプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040921 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20041122 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20050118 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20050120 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080128 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090128 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100128 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110128 Year of fee payment: 6 |
|
LAPS | Cancellation because of no payment of annual fees |