JPH08305554A - 階層化状態遷移決定表に基づくプログラム実行方法および装置 - Google Patents

階層化状態遷移決定表に基づくプログラム実行方法および装置

Info

Publication number
JPH08305554A
JPH08305554A JP12713095A JP12713095A JPH08305554A JP H08305554 A JPH08305554 A JP H08305554A JP 12713095 A JP12713095 A JP 12713095A JP 12713095 A JP12713095 A JP 12713095A JP H08305554 A JPH08305554 A JP H08305554A
Authority
JP
Japan
Prior art keywords
state
transition
event
node
value
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.)
Pending
Application number
JP12713095A
Other languages
English (en)
Inventor
Ayako Ono
綾子 小野
Tomohiro Murata
智洋 村田
Hiroharu Arai
弘治 荒井
Takashi Kaga
隆志 加賀
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP12713095A priority Critical patent/JPH08305554A/ja
Publication of JPH08305554A publication Critical patent/JPH08305554A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

(57)【要約】 (修正有) 【目的】並行動作する複数のコンポーネントの状態遷移
の組み合わせを階層木構造で定義し、動作をそれぞれ決
定表で表現し、下位の決定表の内容を合成して上位の決
定表の内容を作るというボトムアップな階層化を行うだ
けで、コンポーネントの動作を容易に管理し、実行制御
する。 【構成】並行動作する複数のコンポーネントが互いにイ
ンタラクションを取りながら非決定的に状態遷移をして
いるような対象システムの階層木構造を入力し、階層木
構造の各ノードにおける状態決定表を定義する。そし
て、任意の状態ノードにイベントが入力したときは、状
態決定表に基づいてその状態ノードにおける状態遷移を
生起するとともに、状態遷移の生起を内部イベントとし
て、状態遷移の影響が及ぶ上位の状態ノードに送る。内
部イベントを入力した上位の状態ノードは、同様にして
状態遷移を起こしさらに上位に内部イベントを送る。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、階層構造を備えた複数
の構成要素が互いにインタラクションをとりながら動作
し、各構成要素の状態が組み合わされて全体のシステム
状態を定義するような複雑なシステムにおいて、状態遷
移、およびそれに対応して遷移する上位レイヤの状態遷
移、並びにそれらに付随するプログラムの実行を制御す
る方法および装置に関する。
【0002】
【従来の技術】従来より、状態遷移グラフや状態遷移表
は、プログラムチェックなどのテストで利用されること
が多い。例えば、「野木、中所著:プログラミングツー
ル、ソフトウェア講座27、pp.156-157, 昭晃堂(198
9)」では、設計開発したシステムの機能テストを自動化
するツールとして状態遷移図を用いる方法が記載されて
いる。
【0003】また、従来より提案されている状態モデル
の記述方法で、最も一般的なものに状態遷移表(デシジ
ョンテーブル、イベントステートマトリクスともいう)
がある。これは、「ある状態で、あるイベントが入力さ
れると、ある状態に状態が遷移する。」という概念に基
づいて、システムの動作仕様を図的に記述するものであ
る。この記述方法は、ハードウェア論理設計や通信ソフ
トウェア設計の分野を中心に有効に用いられていること
が、「田畑著:OSI−明日へのコンピュータネットワ
ーク、pp.63-66, 日本規格協会( 1987 )」に記載されて
いる。
【0004】しかしながら、状態遷移表による状態モデ
ルの記述方法では、状態遷移の記述がフラットであるた
め、状態数が増えると状態遷移記述が組み合わせ的に複
雑になり、仕様記述が困難となる可能性がある。また、
そのように組み合わせ的に複雑になった1枚の状態遷移
表に基づいてプログラミングをしようとすると、プログ
ラムも大きくなり構造が複雑になるため大変である。
【0005】これらの問題に対し、特開平3−2949
24号および「渡辺著、電子開発学園編:リアルタイム
制御CASE(ZIP Cによる事例)、pp.33-54、電
子開発学園出版局(1993)」では、一枚の状態決定表が
大きくなり過ぎる場合には、状態決定表を階層化して複
数枚にわける方法を提案している。この場合の階層化と
は、不必要な詳細レベルを隠すことによってシステムを
理解しやすくするためのもので、マクロな上位階層から
状態決定表を生成し、「ある状態で、あるイベントが入
力された結果」の状態を詳細化することの繰返しのこと
である。
【0006】また、従来から、複数のデシジョンテーブ
ルを用いたテーブルドリブンのプログラム実行方法とい
うのがある。これは、複数のデシジョンテーブルの間
で、あるテーブルの状態遷移が起こると、イベントが他
のテーブルに伝搬して他のテーブルにおける状態遷移も
起こる、というようにプログラムを実行していく方法で
ある。
【0007】さらには、先に述べた従来技術の特開平3
−294924号および「ZIPCによる事例」で提案
された方法においても、上記テーブルドリブンの方法
で、階層化した複数個の状態決定表(デシジョンテーブ
ル)の間で上位階層から下位階層へメッセージをやりと
りして、プログラムを実行するようにしている。
【0008】この特開平3−294924号および「Z
IP Cによる事例」で提案された方法では、一枚の状
態決定表をトップダウンで階層化する。上位レベルの状
態決定表で詳細情報を隠蔽するために、下位レベルの状
態決定表にイベントを継承させて、詳細情報は下位レベ
ルの状態決定表において表現するようにする。上位の状
態決定表においては、ある遷移が起こったとき、その結
果が1個の状態に確定するのではなく、下位の状態決定
表に移り、その中で遷移する。下位レベルの決定表から
上位の決定表に戻る場合は「インメイル」という記述方
法を使う。1個の状態決定表の下位レベルは、最大、そ
の状態決定表のマトリクスの数であり、レベルの深さに
制限はないので、状態決定表をツリー構造に基づいて関
係付けている。
【0009】また、特開平3−294924号および
「ZIP Cによる事例」で状態遷移を実行する際に、
カレント状態をトークンで表すと、階層化された複数個
の状態決定表の中に、トークンは常に1個である。そし
て、初期状態においては、必ず、トークンは最上位の状
態決定表にあり、そこから、下位レベルに降りていく。
従って、ツリー構造の上下をつなぐ枝をたどる一系列の
状態遷移しか実行できない。
【0010】特開平5−128201号には、階層化表
現可能な状態遷移表を用いて、上位階層で記述された条
件を下位階層へ自動的に盛り込み、記述量を増さずに上
位レベルの記述をする論理設計方式が開示されている。
これは、上位の状態遷移表における1つの状態に対し、
その状態内部での遷移を下位の状態遷移表を用いて行な
うものであり、要するに1個の取り得る状態を細分化す
る階層化を行なうものである。
【0011】
【発明が解決しようとする課題】従来の一般的なテーブ
ルドリブンの方法では、複数のテーブルの関係がお互い
フラットで、テーブル数が増えると組み合わせ的に複雑
になってしまう。
【0012】また、特開平3−294924号あるいは
ZIP Cのテーブルドリブン方式は、もともと一つの
状態決定表に表現される状態遷移の内容を階層化したも
のであって、本来、1本道のシーケンシャルな状態遷移
しか実行できない。
【0013】もしも、並行動作する複数のコンポーネン
トが互いにインタラクションを取りながら非決定的に状
態遷移をしているようなシステムの動作仕様を、上述の
ZIP Cの方式で表現しようとすると、まず、そのす
べてのコンポーネントの状態遷移を1つのシーケンシャ
ルな決定表にまとめて、それを階層化して階層的な状態
決定表を作らなければならない。
【0014】しかしながら、並行動作する複数のコンポ
ーネントの状態の組み合わせで定義されるすべての状態
を洗い出し、その間の動作を定義する作業は、コンポー
ネントの数が増えると*(直積)組み合わせ的に複雑に
なってしまう。すなわち、並行動作するコンポーネント
を、まず、1個にまとめてから階層化するというのは、
困難なことである。
【0015】本発明の目的は、並行動作する複数のコン
ポーネントの状態遷移の組み合わせを階層木構造で定義
し、個々のコンポーネントの動作を、それぞれ決定表
(デシジョンテーブル)で表現し、下位の決定表の内容
を合成して上位の決定表の内容を作るというボトムアッ
プな階層化を行うだけで、並行に状態遷移するコンポー
ネントの動作を容易に管理し、実行制御する方法、およ
びそれらの装置を提供することにある。
【0016】
【課題を解決するための手段】本発明に係る階層化状態
遷移決定表に基づくプログラム実行方法および装置は、
プログラムを実行する対象システムの階層木構造を入力
して記憶し、該階層木構造の各ノード(状態ノードと呼
ぶ)ごとに、(i)最下位の状態ノードについては、当該
状態ノードが取り得る状態値、当該状態ノードに直接入
力される外部イベント、および遷移前後の状態値を入力
し状態遷移決定表として記憶し、(ii)下位に状態ノード
が存在する状態ノードについては、当該状態ノードが取
り得る状態値(下位状態ノードの取り得る状態値を合成
した合成状態値からなる)、当該状態ノードに直接入力
される外部イベントと下位状態ノードにおいて生じた状
態遷移で表わされる内部イベント、および遷移前後の状
態値を入力し状態遷移決定表として記憶しておき、各状
態ノードの現在の状態値を記憶するためのカレント状態
記憶領域と、発生した外部イベントおよび内部イベント
を記憶するためのイベント記憶領域とを確保しておき、
最下位の状態ノードの現在の状態値をカレント状態記憶
領域に初期設定するとともに、最下位以外の状態ノード
についても、下位状態ノードの現在の状態値を合成して
合成状態値を求めることにより、当該状態ノードの現在
の状態値をカレント状態記憶領域に初期設定し、上記イ
ベント記憶領域からイベントを読み出し、(i)読み出し
たイベントが外部イベントである場合には、該外部イベ
ントが入力した状態ノードの状態遷移決定表を参照し
て、現在の状態値に対して発生する遷移後の状態値を検
索し、現在の状態値を遷移後状態値に置き換え、該状態
ノードについての{ノードID、遷移後の状態値}の組
み合わせを内部イベントとして、上記イベント記憶領域
に格納し、(ii)読み出したイベントが内部イベントであ
る場合には、上記階層木構造をたどって、該内部イベン
トが通知されるべき上位状態ノードを検索し、該上位状
態ノードに対応する状態遷移決定表に記載されているイ
ベントの中から、読み出した内部イベントと一致するも
のを検索し、検索された状態ノードにおいて現在の状態
から当該内部イベントが入力されて生起する遷移後の状
態値を検出し、現在の状態値を該遷移後状態値に置き換
え、さらに該状態ノードにおいてそのような遷移が発生
したことを内部イベントとして上位状態ノードへ通知す
るために上記イベント記憶領域に格納するようにイベン
ト処理を行ない、上記外部イベントまたは内部イベント
による遷移によって引き起こされる付随プログラムがあ
れば、その付随プログラムを起動し、このような処理
を、上記イベント記憶領域に格納したすべての外部イベ
ントおよび内部イベントについて、さらに最終的に上記
階層木構造におけるすべての状態ノードについて、繰り
返すことにより、各状態ノードにおける状態遷移の制御
および該状態遷移に付随するプログラムの実行制御を行
なうことを特徴とする。
【0017】また、内部イベントを上位の状態ノードに
送って状態遷移を発火させる代わりに、遷移発生フラグ
によって状態遷移が起こっていることを上位に伝えるよ
うにしてもよい。さらに、あらかじめ、最下位以外のす
べての状態ノードに対し、その状態ノードにおけるすべ
ての遷移前後の状態値の組み合わせを入力して記憶して
おき、この組み合わせを用いて状態遷移を実行するよう
にしてもよい。
【0018】また、階層木構造の状態ノードをグループ
分けして、グループごとにイベント記憶領域を用意して
おき、グループ単位に処理を進めるようにしてもよい。
【0019】
【作用】並行動作する複数のコンポーネントが互いにイ
ンタラクションを取りながら非決定的に状態遷移をして
いるようなシステムを対象とする場合でも、そのシステ
ムの階層木構造を入力し、該階層木構造の各ノードにお
ける状態決定表を定義してやれば、入力されたイベント
に基づく状態遷移およびそれに対応して遷移する階層木
構造の上位の状態遷移、並びにそれらの遷移に付随する
プログラムの実行を容易に制御することができる。
【0020】
【実施例】以下、図面を用いて本発明の実施例を説明す
る。
【0021】図1は、本発明の一実施例に係る階層化状
態遷移決定表に基づくプログラム実行方法の手順を示す
処理フローチャートである。図2は、本実施例を実現す
るための機能ブロック図である。
【0022】図2を参照して、本実施例における処理の
概略を説明する。図2において、四角形215,22
5,235は処理を表し、下辺が波形の図形205,2
10,220,230はデータを表す。実線の矢印はデ
ータのやり取りを示し、破線の矢印は処理の起動の指示
を表す。
【0023】210は実行対象システムの階層木構造を
示す。図3に実行対象システムの階層木構造の具体例を
示し、図4にその階層木構造210の格納形式を示す。
220は実行対象システムの個々のコンポーネント(実
行対象システムを構成する構成要素)の動作を表すデシ
ジョンテーブルを示す。図5および図6に、デシジョン
テーブル220の格納形式を示す。205は実行対象シ
ステムの個々のコンポーネントの現在の状態を表すカレ
ント状態値を示す。図8に、カレント状態値205の格
納形式を示す。230は発生したイベントをスタックす
るためのイベントスタックを示す。図9に、イベントス
タック230におけるイベントの格納形式を示す。
【0024】遷移ドライバ215は、イベントハンドラ
225により入力されるイベントに応じて、図1のフロ
ー100の手順で、階層木構造210とデシジョンテー
ブル220の情報から、遷移を起こし、カレント状態値
205を更新し、イベントスタック230にイベントを
積む。イベントが上位階層に伝搬する場合、遷移ドライ
バ215は、イベントハンドラ225からイベントを受
け取って、状態遷移の処理を繰り返す。付随動作プログ
ラム235は、遷移に付随して起動されるプログラムで
あり、遷移ドライバ215によって起動が指示される。
【0025】具体例を挙げて、図1の処理手順の各ステ
ップを詳しく説明する。
【0026】まず初めに、各テーブルやファイルの構成
について詳しく説明する。あるシステム状態遷移を、図
1の手順に従って実行する例について、使用するテーブ
ルの構成について詳しく説明する。
【0027】図3は、本実施例で用いる具体例であり本
発明の適用対象システムであるキャッシュユニットの階
層木構造300を示す。ドライバへのデータの読み書き
に利用するキャッシュは、信頼性を上げるために、デー
タを格納するハードウェアをキャッシュと共有メモリに
2重化し、それらを合わせて論理的なキャッシュ面とみ
なす。さらに信頼性を上げるために、論理的なキャッシ
ュもA面とB面とに2重化している。
【0028】図3の階層木の要素の四角形を状態ノード
と呼ぶ。第1層(図中、一番下の層)の4個の状態ノー
ド{キャッシュA,共有メモリA,キャッシュB,共有
メモリB}は、このシステムを構成するハードウェアで
ある。キャッシュAと共有メモリAとで、論理的なキャ
ッシュA面が構成される。同様に、キャッシュBと共有
メモリBとで、論理的なキャッシュB面が構成される。
また、最上層のキャッシュユニットは、第2層の論理的
なキャッシュA面と論理的なキャッシュB面とから構成
される。一番下の第1層の階層#(ナンバ)を「1」、
その上の第2層の階層#を「2」、最上位の第3層の階
層#を「3」とする。このように、階層#は、最下位層
を「1」とし、上位に向かって順に数えていくものとす
る。
【0029】図4は、図3に示す階層木構造300の例
を格納するテーブル400(図1の階層木構造210)
の形式である。階層木構造を構成する状態ノードの情報
を、それぞれテーブルの1行を用いて格納する形式であ
る。各状態ノードに対して、その状態ノードが属する階
層#(405)、その状態ノードの名称(410)、上
位の状態ノードの名称(415)、下位1状態ノードの
名称(420)、および下位2状態ノードの名称(42
5)を保持している。保持する名称は、ID(識別子)
でよい。
【0030】例えば、階層#(405)が「1」の状態
ノード(410)「キャッシュA」は、その上位の状態
ノードが「論理的なキャッシュA面」であるので、対応
するフィールド415には「論理的なキャッシュA面」
と記入されている。また、「キャッシュA」の下位に
は、状態ノードがないので「Null」と記入されてい
る。階層#(405)が「2」の状態ノード(410)
「論理的なキャッシュA面」は、その上位の状態ノード
が「キャッシュユニット」であるので、対応するフィー
ルド415には「キャッシュユニット」と記入されてい
る。また、「論理的なキャッシュA面」の下位には「キ
ャッシュA」と「共有メモリA」との2つの状態ノード
があるので、対応するフィールド420には「キャッシ
ュA」と記入され、対応するフィールド425には「共
有メモリA」と記入されている。
【0031】本実施例においては、図3から分かるよう
に1個の状態ノードに対する子ノードは2個であるが、
3個以上の場合には、図4で点線で記述しているように
(430)、下位3状態ノード、下位4状態ノード、…
の情報を増やせばよい。また、下位の子ノードや上位の
親ノードを持たないときは、該当するフィールドには
「Null」を記入するものとする。
【0032】図5は、図3の階層木構造上の「キャッシ
ュA(305)」の状態遷移を示すデシジョンテーブル
500(図2の220)である。図5のデシジョンテー
ブル500には、キャッシュAの取りうる状態値と、キ
ャッシュAへの外部イベントおよび内部イベントと、イ
ベント発火の結果が記されている。
【0033】なお、内部イベントとは、下位の状態ノー
ドの状態変化が上位に伝搬する際のイベントを言う。例
えば図3の階層木構造において、論理的なキャッシュA
面は、キャッシュAと共有メモリAとから構成されてい
るので、「キャッシュAが所定の状態になった」という
ことを内部イベントとして受け取り、その内部イベント
に応じて状態遷移していく。外部イベントは、内部イベ
ント以外のイベント、すなわち状態ノードに直接入力し
てくるイベントを言う。階層木構造上で最下層の状態ノ
ードにおいては、下位に状態ノードがないので、下位か
らの内部イベントはない。外部イベントについては、最
下層の状態ノードに入力するものだけでなく、途中の階
層の状態ノードに直接入力する外部イベントもある。た
だし、本実施例では、最下層の状態ノードに直接入力す
る外部イベントのみを取り上げている。
【0034】図5のデシジョンテーブル500の記述方
法は、マトリクスの横軸505に取りうる状態:「正常
(510)」と「閉塞(515)」とを並べ、マトリク
スの縦軸520に外部イベント:「キャッシュA障害発
生(525)」と「キャッシュA復旧(530)」を並
べて記入してある。キャッシュAは、最下位層に属し、
下位からの内部イベントはないので、内部イベントに該
当する欄(540)は空欄になっている。
【0035】この状態ノード「キャッシュA(30
5)」の遷移仕様は、 キャッシュAが「正常」状態にあるとき、「キャッシ
ュA障害発生」というイベントが発生すると、これによ
りキャッシュAの状態は「閉塞」になる。 キャッシュAが「閉塞」状態にあるとき、「キャッシ
ュA復旧」というイベントが発生すると、これによりキ
ャッシュAの状態は「正常」になる。ということであ
る。
【0036】図6は、図3の階層木構造上の「論理的な
キャッシュA面(310)」の状態遷移を示すデシジョ
ンテーブル600(図2の220)である。図6のデシ
ジョンテーブル600の記述方法は、上述した図5のキ
ャッシュAのデシジョンテーブル500と同様である。
【0037】すなわち、マトリクスの横軸620に、論
理的なキャッシュA面の取りうる状態値:「正常」、
「縮退」、「閉塞」を並べている。マトリクスの縦軸6
05にはイベントを並べている。外部イベント(61
0)の欄が空欄なのは、この例では、該当する外部イベ
ントがないからである。内部イベント(615)は、状
態ノード(625)と状態値(630)とを合わせたも
のである。下方の階層で起こった状態遷移の結果である
遷移後の状態値が、内部イベントになる。このことを示
すのが、デシジョンテーブル600の縦軸である。
【0038】図6のデシジョンテーブル600の遷移仕
様は、論理的なキャッシュA面が「正常(635)」の
状態であるとき、下位のキャッシュA(640)が「閉
塞(645)」になるという内部イベントが発生する
と、論理的なキャッシュA面は「閉塞(650)」に遷
移する、という例のように記述してある。
【0039】状態の遷移を契機として実行すべき付随動
作プログラム(図1の235)があるときは、スラッシ
ュ「/」とともに記載してある。例えば、「閉塞報告」
655は付随動作プログラムを示している。すなわち、
論理的なキャッシュA面が「正常(635)」の状態で
あるとき、下位の共有メモリA(615)が「閉塞」に
なるという内部イベントが発生すると、論理的なキャッ
シュA面の状態は「縮退」に遷移するとともに、付随動
作プログラムとして閉塞報告(655)を実行する、と
いう意味である。
【0040】図7は、図3の階層木構造の第2層以上の
状態ノードに関する状態値の上下関係の対応格納テーブ
ル700の例である。このテーブル700は、上位の状
態ノードの状態が下位の構成要素のどのような状態の組
み合わせから構成されるかを示したものである。
【0041】例えば、行705は、『論理的なキャッシ
ュA面の「正常」を構成するのは、キャッシュAの「正
常」と共有メモリAの「正常」の組み合わせである』と
いうことを示している。逆にいえば、キャッシュAが
「正常」で、かつ共有メモリAが「正常」であるとき、
論理的なキャッシュA面は「正常」である。このよう
に、ある状態ノードの状態が下位の状態ノードのどのよ
うな状態の組み合わせから構成されるかをすべて明らか
にしたのが、テーブル700である。なお、このテーブ
ル700における、「下位1の状態ノード」および「下
位2の状態ノード」は、図4のそれらと対応している。
【0042】以上説明した図4〜図7のテーブルは、初
期設定のときに設定される。設定内容はユーザがあらか
じめ決定しておく。すなわち、ユーザは、対象となるシ
ステムに関する階層木構造を図3のように決めておき、
図4の形式で本システムに入力する。同様に、ユーザ
は、決定した階層木構造の各ノードに関して、当該ノー
ドの動作を示すデシジョンテーブルを図5や図6のよう
に決定して入力する。さらに、階層木構造における上位
の状態ノードの状態値と下位の状態ノードの状態値の組
み合わせを図7のように決定して入力する。なお、他の
形式で入力しておき、初期設定のときに図4〜図7の形
式に変換してもよい。
【0043】図8は、図3の階層木構造300の各状態
ノードの現在の状態を格納するためのカレント状態格納
テーブル800(図2の205)の形式を示す。特に図
8は、階層木構造300のすべての状態ノードのカレン
ト状態が「正常」であるときのカレント状態格納テーブ
ル800を示している。カレント状態格納テーブル80
0は、本システムが動作開始する際に初期設定され、種
々のイベントの発生により各状態ノードの状態が変化し
ていく際にそれら各状態ノードの現在の状態を格納する
ワーク用のテーブルである。
【0044】図9は、発生したイベントをスタックする
ためのイベントスタック900(図1の230)の形式
を示す。イベントスタック900は、「状態ノード」の
欄と「遷移後の状態値」の欄とからなる。
【0045】内部イベントは、ある状態ノードが状態遷
移してある状態になったということを上位の状態ノード
に伝搬させていくためのイベントであるから、内部イベ
ントは「状態ノード」とその状態ノードの「遷移後の状
態値」とからなる。そこで、内部イベントをイベントス
タック900にスタックするときは、内部イベントの
「状態ノード」および「遷移後の状態値」を、イベント
スタック900の「状態ノード」および「遷移後の状態
値」の欄に、それぞれ格納する。外部イベントをイベン
トスタック900にスタックするときは、イベント名を
「遷移後の状態値」の欄に格納する。
【0046】イベントスタック900は、図9の形式の
ものを2個用意してある。そして、一方のイベントスタ
ックに処理を行う状態ノードに対する外部イベントおよ
び内部イベントが格納されているときは、その外部イベ
ントおよび内部イベントを順に入力し、使ったイベント
は消去する。入力されたイベントの発火によって起こる
遷移の遷移後状態値を新たな内部イベントとして他方の
(空いている方の)イベントスタックに貯めていく。こ
の処理を、2個のイベントスタックを交互に使って行
う。
【0047】次に、図1のフローにしたがって、本実施
例のシステムの各ステップの動作を詳細に説明する。
【0048】まず、ステップ110で、初期設定をす
る。具体的には、動作させる対象であるシステムの階層
木構造を、図3のように決定し、図4のテーブル400
の形式で格納する。また、その階層木構造の各状態ノー
ドにおける状態遷移仕様を、図5および図6で例示した
デシジョンテーブルの形式で格納する。さらに、図4の
形式で格納した階層木構造の第2層以上の状態ノードに
関する状態値の上下関係の対応格納テーブルを、図7の
形式で格納する。
【0049】次に、ステップ120で、各状態ノードの
カレント状態を初期設定する。この処理については、以
下に、図10のフローを用いて、詳細に説明する。
【0050】まず、ステップ1010で、最下位層の状
態ノードの初期状態を設定する。本実施例では、図3の
階層木構造の最下位層の4個の状態ノードそれぞれに
「正常」という状態を初期設定する。これは、図8のカ
レント状態格納テーブル800のうち、805、81
0、815、820の4個の欄に「正常」が設定された
ことを意味する。
【0051】次にステップ1015で、処理する階層を
数えるための変数nを1とする。そして、ステップ10
20で、第(n+1)層が存在するかどうか判断する。
この判断は、上位階層が存在する間、以下のステップ1
025〜1040の処理を繰り返すために、上位の第
(n+1)層が存在するかどうかを判断するためのもの
である。もしも、上位の階層がない場合には処理を終了
し、フロー100に戻る。本具体例では第2層が存在す
るので、次のステップ1025に進む。
【0052】ステップ1025で、第n層の合成状態値
を生成し、図11の形式でワークエリアに格納する。図
11のテーブル1100は、第1層の状態ノードのカレ
ント状態値から得られる合成状態値(第1層の状態ノー
ドのカレント状態値の組み合わせ)が第2層のどの状態
ノードに対応するか、を格納した合成状態値格納テーブ
ルの例である。
【0053】いま、第1層の状態ノードのカレント状態
値として、キャッシュAが「正常」で共有メモリAが
「正常」と初期設定されている。図3の階層構造を表す
図4のテーブル400から、キャッシュAと共有メモリ
Aによって、論理的なキャッシュA面が構成されている
ことがわかる。そこで、ステップ1025では、合成状
態値:{キャッシュA/正常、共有メモリA/正常}と
第2層の論理的なキャッシュAとを対応させて、図11
の行1105のように格納する。同様に、合成状態値:
{キャッシュB/正常、共有メモリB/正常}と第2層
の論理的なキャッシュBとを対応させて、図11の行1
110のように格納する。
【0054】次にステップ1030で、ステップ102
5で生成した第n層の合成状態値が第(n+1)層のど
の状態値に対応するかを、図7のテーブル700から検
索する。
【0055】まず、この具体例では、図11の合成状態
値格納テーブル1100の行1105の{キャッシュA
/正常、共有メモリA/正常}の組み合わせを、図7の
上下の状態値の対応格納テーブル700から検索する。
ここでは、図7の「論理的なキャッシュA面/正常」7
05が検索される。同様に、図11の行1110につい
ては、図7の「論理的なキャッシュB面/正常」715
が検索される。
【0056】次に、ステップ1035で、第(n+1)
層のカレント状態値をカレント状態格納テーブル800
に設定する。この具体例では、ステップ1030で検索
された、第2層についての、図7の「論理的なキャッシ
ュA面/正常」705および「論理的なキャッシュB面
/正常」715を、図8のカレント状態格納テーブル8
00の欄825と830に格納する。
【0057】次に、ステップ1040で、n=n+1と
して、ステップ1020に戻る。例では、n=2とし
て、ステップ1020に戻る。n=2のときのステップ
1025〜1040の処理の説明は省略するが、要する
に、合成状態値{論理的なキャッシュA面/正常、論理
的なキャッシュB面/正常}に対応する第3層の状態ノ
ード「キャッシュユニット」を検索し、その状態ノード
「キャッシュユニット」に「正常」を格納する。第3層
の上位に第4層はないので、図1のフロー100の処理
に戻る。
【0058】次に、フロー100に戻って、ステップ1
30で、最下位層の状態ノードに外部イベントを入力す
る。外部イベントは、すべての状態ノードに入力される
ものであるが、本実施例では、最下位層のキャッシュA
に外部イベント「キャッシュA障害発生」が入力された
場合を説明する。この外部イベントは、2つあるイベン
トスタックのうちの一方に図9のように格納される。
【0059】次に、ステップ135で、2つあるイベン
トスタックのうちの何れかに未処理のイベントが残って
いるか否か判定する。この具体例では、一方のイベント
スタックに図9のように「キャッシュA障害発生」がス
タックされているので、ステップ140に進む。
【0060】ステップ140では、イベントスタックか
らイベントを取り出し、各状態ノードに対して状態遷移
を実行する。状態遷移とともに実行すべき付随動作プロ
グラムがある場合は、その付随動作プログラムを起動す
る。このステップ140の処理については、図12のフ
ローに基づいて、以下に詳細に説明する。
【0061】まず、ステップ1205で、2個のイベン
トスタックのどちらかに、少なくとも1個のイベントが
あるかどうかを判断する。もしも両方のイベントスタッ
クが空だったならば、フロー140の処理を終了する。
本具体例では、図9のように、イベントスタックにイベ
ントが入っているので、ステップ1210に進む。
【0062】次に、ステップ1210で、処理するイベ
ントスタックを決める。どちらか一方にしか、イベント
が入っていない場合には、そのイベントスタックに決定
する。両方にイベントが入っている場合には、一方のイ
ベントスタックに決めて、その中のイベントが無くなる
まで同じイベントスタックに対して処理を行うようにす
る。
【0063】次に、ステップ1215で、イベントスタ
ックからイベントを1個取り出す。取り出したイベント
はイベントスタックから消去される。この具体例では、
図9のイベントスタックから外部イベント「キャッシュ
A障害発生」910を取り出す。もしスタックされてい
るイベントが内部イベントである場合には、{状態ノー
ド、状態値}の組み合わせを取り出す。
【0064】次に、ステップ1220で、取り出したイ
ベントの影響する状態ノードを検索する。取り出したイ
ベントが内部イベントである場合には、取り出した内部
イベントに含まれている状態ノードの階層木構造上の上
位に位置する状態ノードが、検索すべき状態ノードであ
る。取り出したイベントが外部イベントである場合に
は、すべてのデシジョンテーブルを検索して、当該外部
イベントと等しいイベントが存在する状態ノードを検索
する。本具体例では、外部イベント「キャッシュA障害
発生」910が状態ノード「キャッシュA」のデシジョ
ンテーブル500(図5)のイベントの欄520に存在
するから、結果として「キャッシュA」が検索される。
【0065】次に、ステップ1225で、先にステップ
1220で検索した状態ノードに関するデシジョンテー
ブルにおいて、イベントスタックから取り出したイベン
トを含む遷移を検索する。本具体例では、図5のデシジ
ョンテーブル500において「キャッシュA障害発生」
をイベントにもつ遷移は、「正常→閉塞」の1個であ
る。
【0066】次に、ステップ1230で、先にステップ
1225で検索した遷移の中で、遷移前の状態値が、遷
移の属する状態ノードのカレント状態値と等しい遷移を
検索する。本具体例では、ステップ1225で検索した
1個の遷移の遷移前状態値「正常」は、図8に示すカレ
ント状態値格納テーブル800から、キャッシュAのカ
レント状態値であるから、「正常→閉塞」が検索すべき
遷移である。
【0067】次に、ステップ1235で、先にステップ
1230で検索した遷移の属する状態ノードと遷移後の
状態値との組み合わせを、先にステップ1215でイベ
ントを取り出したイベントスタックとは別のイベントス
タックに内部イベントとして格納する。本具体例で格納
するのは、{キャッシュA、閉塞}の組み合わせからな
る内部イベントである。
【0068】次に、ステップ1240で、ステップ12
30で検索した遷移に付随動作プログラムがついている
かどうか判断する。ついていない場合には、ステップ1
250に進む。本具体例では、付随動作プログラムがつ
いていないのでステップ1250に進む。付随動作プロ
グラムがついている場合には、ステップ1245に進
み、付随動作プログラムの起動をかけた後、ステップ1
250に進む。
【0069】ステップ1250では、この状態ノードの
カレント状態値を、ステップ1230で検索した遷移後
の状態値に変更する。本具体例では、図8のカレント状
態格納テーブル800中のキャッシュAのカレント状態
値805を「正常」から「閉塞」に変更する。
【0070】ステップ1250の後、ステップ1205
に戻って、どちらかのイベントスタックにまだイベント
があるならステップ1210以降の処理を繰り返す。本
具体例では、外部イベント「キャッシュA障害発生」が
入っていたイベントスタックは空になったが、先にステ
ップ1235で格納した内部イベントが他方のイベント
スタックに入っているので、この内部イベントについて
もう一度処理を繰り返す。繰返しの処理の説明は省略す
る。
【0071】図12のフロー140の処理が終了した
ら、図1に戻ってステップ140からステップ135に
戻る。図12のフロー140の処理を行なっている最中
に入力された外部イベントがあれば、それらはイベント
スタックにスタックされるので、それらのイベントに対
してステップ140(図12のフロー140)の処理を
繰り返し、未処理の外部イベントがなくなるまでこの処
理を繰り返す。
【0072】上記説明では、具体例としてキャッシュユ
ニットを取り上げて説明したが、対象システムの構成要
素のすべてに対し同様に取り扱うことができる。これに
より、対象システムのコンポーネント(構成要素)の階
層木構造をそのまま図4の形式で入力し、各状態ノード
のデシジョンテーブル(状態遷移決定表)を図5,6の
ように入力し、さらに状態間の関係を図7のように入力
するだけで、入力したデシジョンテーブルに基づく所望
の動作を行なうようにすることができる。入力する階層
木構造は、対象システムの構造に合せているので、設定
は容易である。また、フラットで大きな1枚のデシジョ
ンテーブルを用いるより、階層化された状態ノードごと
にデシジョンテーブルを定義するので、使用するメモリ
容量を減らすことができる。さらに、複数のテーブルを
適当につないだテーブルドリブン方式に比べ、階層構造
で上下の関係を決定しているので、実行のスピードが速
い。また、イベントの伝搬が決まっているので、デバッ
クがしやすく、トラブルシーケンスも容易である。
【0073】また、従来技術の欄で説明した特開平3−
294924号あるいは「ZIPCによる事例」で提案
された技術では、状態遷移決定表をトップダウンで階層
化するが、これは状態遷移決定表の1つのコンテント
(状態遷移の内容)を下位の状態遷移決定表で表すよう
にする階層化である。これに対し、上記実施例の階層化
は、1個1個の状態の階層化ではなく、上位層の状態遷
移表上の動作内容(状態遷移の内容)が、関係付けられ
た下位層の複数の状態遷移表上の動作内容のすべてと、
まとまりとして階層関係を持っている、ということであ
る。すなわち、階層化は状態ノードに対するものであ
り、状態遷移に対するものではない。したがって、上記
実施例では、階層木構造は対象システムの構造に沿った
図3のようなものであり、図4の形式で入力され、また
個々のデシジョンテーブルには階層の情報はない。
【0074】さらに、特開平3−294924号あるい
は「ZIP Cによる事例」では、シーケンシャルな1
本道で表現できる状態遷移の内容を、階層化して1枚が
複雑になりすぎないように記述している。1本道とは、
状態遷移表を実行する際に、カレント状態(現時点での
状態)が1個しかない、という意味である。これに対し
て、上記実施例では、すべての状態遷移表ごとにカレン
ト状態が存在し、その何れに対して外部あるいは内部か
らイベントが発火した場合でも、状態遷移が発生し、そ
れが影響を及ぼすイベントを伝搬させる。すなわち、並
行動作する複数のコンポーネントの動作を、容易に表現
することができる。
【0075】次に、本発明の第2の実施例を説明する。
この第2の実施例は、主に図1のフロー100のステッ
プ140の処理方法を変形した例である。なお、第2の
実施例を説明するにあたっては、上述の第1の実施例で
用いたのと同じ具体例で説明していくものとする。
【0076】まず初めに、第2の実施例で用いるテーブ
ルの形式について説明する。ただし、上述の第1の実施
例で用いたテーブル形式と同じものについては、説明を
省略する。特に、図4の対象システムの階層木構造を格
納するテーブル400、図5および図6の各状態ノード
のデシジョンテーブル500,600、図7の状態値の
上下関係の対応格納テーブル700、並びに図8のカレ
ント状態格納テーブル800は、第1の実施例と同じ形
式のものを用いるものとする。なお、本実施例では内部
イベントにより生起する遷移は(後述する図13のテー
ブルを用いて行なうので)デシジョンテーブル中に内部
イベントにより生起する遷移を登録しておく必要はな
く、外部イベントにより生起する遷移のみを含むデシジ
ョンテーブルとしておけばよい。また、第1の実施例で
は、イベントスタックとして図9の形式のものを用いた
が、第2の実施例では、下記で説明する図14の形式の
イベントスタックを用いる。
【0077】図13は、第2の実施例で用いるテーブル
であり、各状態ノード(第2層以上)におけるすべての
遷移前後の状態値の組み合わせ格納テーブル1300の
例である。図13は、論理的なキャッシュA面について
の、遷移前後の状態値の組み合わせ格納テーブルの例で
ある。論理的なキャッシュA面については、図6のデシ
ジョンテーブル600により遷移仕様が決定されている
が、そのデシジョンテーブル600においてすべての遷
移前後の状態値の組み合わせ(内部イベントにより生起
する遷移も含む)を取り出して図13のように格納して
ある。他の状態ノードについても、図3の階層木構造の
第2層以上の階層の状態ノードについて、状態ノードご
とに、すべての遷移前後の状態値の組み合わせをこの形
式で格納する。なお、内部イベントによる遷移も含む形
で図6のデシジョンテーブルを作成し、そのデシジョン
テーブルのすべての遷移前後の状態値の組み合わせを取
り出して図13のテーブルを作成するのが分かり易く便
宜であるが、後述する本実施例の動作では、外部イベン
トが入力したときのみデシジョンテーブルを参照し、内
部イベントによる遷移はデシジョンテーブルを用いず図
13のテーブルを用いて実行する。そこで、図6のデシ
ジョンテーブルは外部イベントによって生起する遷移の
みを登録しておき、図13のテーブルは別に入力してき
おくするようにしてもよい。
【0078】図14は、第2の実施例で用いるテーブル
であり、外部イベントを格納する外部イベントスタック
1400を示す例である。図14の外部イベントスタッ
クでは、外部イベントが1個格納されている。
【0079】図15は、第2の実施例で用いるテーブル
であり、遷移発生フラグ格納テーブル1500である。
これは、各階層の各状態ノードについて、当該状態ノー
ドに遷移が発生したか否かを示すフラグを保持するテー
ブルである。遷移が発生した状態ノードにフラグ「1」
を立てる。フラグが「0」のとき、その状態ノードに遷
移は発生していないことを示す。図15の例では、フラ
グ1505が「1」であるので、キャッシュAに遷移が
発生したことがわかる。
【0080】次に、本実施例の処理手順について説明す
る。図1のフロー100のステップ110の初期設定に
おいては、まず第1の実施例と同様に、対象システムの
階層木構造を格納するテーブル400(図4)、各状態
ノードのデシジョンテーブル500,600(図5、図
6)、および状態値の上下関係の対応格納テーブル70
0(図7)を初期設定する。さらに、本第2の実施例で
は、図13に例示したように、各状態ノード(第2層以
上)ごとに、すべての状態遷移の遷移前後の状態値の組
み合わせをも入力する。また、図15の遷移発生フラグ
格納テーブル1500のフラグはすべて「0」に初期化
しておく。
【0081】次のステップ120,130に関しては、
上述の第1の実施例と同じなので、説明は省略する。た
だし、ステップ130では、入力した外部イベントを図
14の外部イベントスタック1400に格納するものと
する。いま、図14のように外部イベント「キャッシュ
A障害発生」がスタックされたとする。
【0082】次に、図1のフロー100のステップ14
0について、図16のフロー140をステップごとに説
明する。
【0083】まず、ステップ1610で、図14に示し
た外部イベントスタック1400から、外部イベントを
1個取り出す。この具体例では、「キャッシュA障害発
生」を取り出す。取り出した外部イベントは、外部イベ
ントスタック1400から消去される。
【0084】次に、ステップ1615で、先に取り出し
た外部イベントが影響をおよぼす状態ノードを検索す
る。この検索は、すべてのデシジョンテーブルをたどっ
て、取り出した外部イベントと等しい外部イベントをも
つ状態ノードを見つけることにより行なう。そして、検
索した状態ノードの遷移発生フラグ(図15)を立て
る。本具体例では、状態ノード「キャッシュA」のデシ
ジョンテーブル500(図5)中に外部イベント「キャ
ッシュA障害発生」があるので、検索の結果「キャッシ
ュA」の遷移発生フラグ(図15参照)を立てる。
【0085】次に、ステップ1620で、イベントの影
響する状態ノードの、階層木構造上の階層数をnとす
る。この具体例では、イベントの影響する状態ノード
「キャッシュA」は最下位層なので、n=1となる。
【0086】次にステップ1625で、遷移発生フラグ
の立った状態ノードについて、先にステップ1610で
取り出した外部イベントによって起こる状態遷移の遷移
後の状態値を検索し、ワークエリアに格納する。具体的
には、ステップ1615で検索したデシジョンテーブル
を用いて、当該状態ノードのカレント状態値がステップ
1610で取り出した外部イベントによってどのように
状態遷移するかを検索し、遷移後の状態値を得る。本具
体例では、外部イベント「キャッシュA障害発生」によ
ってキャッシュAが「正常」から「閉塞」に状態遷移す
るから、遷移後の状態「閉塞」がワークエリアに格納さ
れる。
【0087】次に、ステップ1630で、前記ワークエ
リアに格納された遷移後の状態値に基づいて、最下位レ
イヤの状態遷移の起こった状態ノードのカレント状態を
更新する。本具体例では、「キャッシュA/閉塞」に更
新する。なお、本実施例では最下層の状態ノードに直接
入力する外部イベントのみを取り上げているので、本ス
テップ1630では最下層の状態ノードのカレント状態
を更新することになるが、最下層でなく途中の階層の状
態ノードに直接入力する外部イベントの場合は、当該状
態ノード(第n層)のカレント状態を更新することにな
る。
【0088】次に、ステップ1635で、未処理の状態
ノードが存在するか、具体的に言うと第n+1層が存在
するか否か判断する。これは、最上位層に達するまで処
理を繰り返すための判断である。もしも、上位層が存在
しなければ処理を終了する。しかし、本実施例において
は、第2層および第3層が存在するので、ステップ16
40に進む。
【0089】次に、ステップ1640で、nを1増や
す。本具体例では、この時点で、n=2となる。このこ
とは、第2層に処理を施すことを示している。
【0090】次に、ステップ1645で、1つ下位(第
n−1層)に位置する状態ノードの遷移発生フラグが少
なくとも1個立っているかどうか、図15の遷移発生フ
ラグ格納テーブル1500を参照して判断する。もし
も、フラグが立っていなければ、ステップ1665に進
み、エラーを返して本フローを終了する。本具体例で
は、先のステップ1615で遷移発生フラグ格納テーブ
ル1500(図15参照)のキャッシュAのフラグ15
05を立てているので、次のステップ1650に進む。
【0091】ステップ1650では、第(n−1)層の
すべての状態ノードのカレント状態を集めて、図3の階
層木構造に従って、第n層に関する合成状態値を生成
し、ワークエリアに図17の形式で格納する。本具体例
では、いまn=2であり、最下位層の各状態ノードのカ
レント状態は、キャッシュAが「閉塞」でそれ以外のノ
ードが「正常」である。そこで、これら最下位層の各状
態ノードのカレント状態から、第2層に関する合成状態
値を生成する。この合成状態値の生成方法は、図1のス
テップ120で、最下位のカレント状態値を組み合わせ
て、第2層の状態値を生成した方法(図10)と同じで
ある。本具体例では、図3の階層木構造から、キャッシ
ュAと共有メモリAによって論理的なキャッシュA面が
構成されていることがわかるので、キャッシュAのカレ
ント状態「閉塞」と共有メモリAのカレント状態「正
常」とを組み合わせて、論理的なキャッシュA面に対応
する合成状態値ができる。残りの状態ノードに対しても
同じ処理を繰返す。その結果出来上がった第2層に関す
る合成状態値格納テーブルが、図17に示すテーブル1
700である。
【0092】次に、ステップ1655で、第n層に関し
て、「遷移前状態値=カレント状態、かつ、遷移後の状
態値=格納した合成状態値のどれか」に当てはまる組み
合わせの状態遷移を検出する。
【0093】図18に、このステップ1655の処理を
詳細化したフローを示す。図18を用いて、ステップ1
655の処理を詳細に説明する。
【0094】まず初めに、ステップ1805で、第n層
の状態ノードのすべてに関して処理を施したかどうかを
判断する。第n層のすべての状態ノードの処理が終われ
ばこのフローの処理は終了する。いまn=2であり、第
2層の何れの状態ノードも処理していないので、ステッ
プ1810に進む。
【0095】次に、ステップ1810で、検索処理を施
す状態ノードを決める。ここでは、論理的なキャッシュ
A面に対し処理を施すものとする。
【0096】次に、ステップ1815で、図17の合成
状態値格納テーブル1700の上位の状態ノードが、ス
テップ1810で決めた処理対象の状態ノードであるよ
うな、テーブル1700の行を検索する。いま合成状態
値格納テーブル1700には図17に示すように第2層
の状態ノードの合成状態値が格納されており、ステップ
1810で処理対象とした状態ノードは論理的なキャッ
シュA面であるので、図17の1行目の合成状態値17
05が検索される。
【0097】次に、ステップ1820で、上記ステップ
1815の検索で合成状態値が見つかったか否かを判別
する。見つからなかった場合には、ステップ1805に
戻って処理を繰り返す。いま説明している具体例では、
図17の1行目の合成状態値1705が検索されたの
で、ステップ1825に進む。
【0098】次に、ステップ1825で、図7の状態値
の上下関係の対応格納テーブル700を参照し、テーブ
ル700の下位1および下位2の状態値が、ステップ1
815で検索した合成状態値の下位1および下位2と等
しい行を検索する。この具体例では、ステップ1815
で図17の合成状態値1705が検索されており、合成
状態値1705の下位1の状態ノードのカレント状態値
は「閉塞」で下位2の状態ノードのカレント状態値は
「正常」である。また、図7のテーブル700では、行
710が下位1が「閉塞」で下位2が「正常」であるか
ら、この行710が検索される。
【0099】次に、ステップ1830で、上記ステップ
1825の検索でテーブル700中に該当する行が見つ
かったか否かを判別する。見つからなかった場合には、
ステップ1850でエラーを返して、フロー1655の
処理を終了する。この具体例では、図7の行710が検
出されたので、ステップ1835に進む。
【0100】次に、ステップ1835で、ステップ18
25で検索した行(図7の状態値の上下関係の対応格納
テーブル700から検索された行)の上位の状態値を遷
移後状態値として持つ遷移を、検索対象の状態ノードに
関する遷移前後の状態値の組み合わせ格納テーブル(図
13)からすべて検索する。いま、ステップ1825で
図7の行710が検索されており、行710の上位の状
態値は「縮退」である。検索対象の状態ノードは論理的
なキャッシュA面であり、図13が論理的なA面に関す
る遷移前後の状態値の組み合わせ格納テーブル1300
である。テーブル1300中で遷移後状態値が「縮退」
であるのは、1行目の組み合わせデータ1305と、4
行目の組み合わせデータ1310であるので、これらの
組み合わせが検索される。
【0101】次に、ステップ1840で、上記ステップ
1835の検索でテーブル1300中に該当する組み合
わせが見つかったか否かを判別する。見つからなかった
場合には、ステップ1830と同様に、ステップ185
0でエラーを返して、フロー1655の処理を終了す
る。この具体例では、テーブル1300の1行目130
5と4行目1310が検出されたので、ステップ184
5に進む。
【0102】次に、ステップ1845で、ステップ18
35で検索した組み合わせの中で、遷移前の状態値が、
検索対象の状態ノードのカレント状態値に等しい遷移を
検出する。この具体例では、検索対象の状態ノードは論
理的なキャッシュA面であり、そのカレント状態値は
「正常」である。ステップ1835で検出したテーブル
1300の1行目の組み合わせデータ1305と4行目
の組み合わせデータ1310のうち、遷移前の状態値が
「正常」であるのは、1行目の組み合わせデータ130
5のほうであるから、このデータ1305が該当する遷
移前後の組み合せとなる。
【0103】ステップ1845が終わったら、ステップ
1805に戻り、すべての状態ノードに対する処理が終
了するまで繰り返す。この具体例では、現在処理を行な
っている第2層の状態ノードで他に状態遷移発生フラグ
が立っているものはないので、繰り返さずに終了とな
る。必要に応じた繰返しが終われば、本フローを終了
し、図16のステップ1655に戻り、ステップ166
0に進む。
【0104】ステップ1660では、上記図18のステ
ップ1845の検索で該当するものが検出されたか否か
判別する。1個も検出されなかった場合には、ステップ
1665でエラーを返して終了する。この具体例では、
図13の遷移前後の状態値の組み合わせ1305が検出
されたので、ステップ1670に進む。
【0105】次に、ステップ1670で、ステップ16
55で検出した遷移前後の状態値の組み合わせが属する
状態ノードの遷移発生フラグを立て、その遷移後の状態
値を該当する状態ノードのカレント状態値とする。この
具体例では、遷移前後の状態値の組み合わせ1305が
属する論理的なキャッシュA面の遷移発生フラグ(図1
5)を立て、検索した組み合わせ1305の遷移後状態
値「縮退」を、論理的なキャッシュA面のカレント状態
値として格納する。
【0106】ステップ1670の後、ステップ1635
に戻って上位の状態ノードが存在するか否か判別し、存
在する場合は、その上位の状態ノードについて同様な処
理を行なう。この具体例では、いま第2層の処理を終え
たところであり、まだ上位に第3層があるので、同じ処
理を繰り返す。最終的に、第3層のキャッシュユニット
の状態遷移を実行し、フロー140の処理を終了し、図
1のフロー100のステップ140に戻る。そして、フ
ロー100を終了する。
【0107】上記第2の実施例によれば、各状態ノード
について遷移前後の状態の組み合わせを備え遷移発生フ
ラグによって上位に状態遷移の発生を伝えるようにして
いるので、下位からの内部イベントを知る必要が無い。
【0108】ところで、上述の第1の実施例では、イベ
ントスタックは2個であった。以下では、第3の実施例
として、図4の階層木構造上の状態ノードをグルーピン
グして、そのグループごとにイベントスタックを持たせ
る方法について説明する。なお、第3の実施例におい
て、第1の実施例と同じ部分は説明を省略する。
【0109】第3の実施例において、図4の対象システ
ムの階層木構造を格納するテーブル400、図5および
図6の各状態ノードのデシジョンテーブル500,60
0、図7の状態値の上下関係の対応格納テーブル70
0、並びに図8のカレント状態格納テーブル800は、
第1の実施例と同じ形式のものを用いるものとする。第
1の実施例では、イベントスタックとして図9の形式の
ものを用いたが、第3の実施例では、下記で説明する図
20の形式のイベントスタックを用いる。
【0110】本実施例の処理手順について説明する。図
1のフロー100のステップ110の初期設定において
は、まず第1の実施例と同様に、対象システムの階層木
構造を格納するテーブル400(図4)、各状態ノード
のデシジョンテーブル500,600(図5、図6)、
および状態値の上下関係の対応格納テーブル700(図
7)を初期設定する。特に本実施例では、ステップ11
0の初期設定で、図19に示すイメージ図のように階層
構造をグループ化して入力する。この例では、図4のテ
ーブル400の形式で格納した階層構造において、階層
#405にしたがって状態ノードをグループ化する。例
えば、図19のグループ1910は階層#が「1」の状
態ノードから構成される。
【0111】ここでは階層ごとにグループを分けたが、
分け方に特に制限はない。ただし、イベントが伝わるま
とまりでグループを分けるのが望ましいので、階層ごと
にグループを分けるのが好適である。階層ごとにグルー
プを分ける場合は、図4のテーブル400において階層
#をグループ#(グループを特定する識別子)に兼用で
きるが、任意のグループ化をした場合には、どの状態ノ
ードがどのグループに属するかを認識できるようにグル
ープ#を記憶するようにする。
【0112】次のステップ120,130に関しては、
上述の第1の実施例と同じなので、説明は省略する。た
だし、ステップ130では、入力したイベントを図20
のイベントスタック2000に格納するものとする。
【0113】図20のイベントスタック2000につい
て説明する。本実施例では、グループごとに図20に示
す形式のイベントスタックを設ける。そして、入力する
外部イベントは、そのイベントが影響を与えるグループ
のイベントスタックに格納する。イベントスタックの形
式は、図9(900)と等しいものである。図20に例
示したのは、図19に階層構造の第1グループ1910
のイベントスタックである。
【0114】いまステップ130で、図20のように第
1グループ1910のイベントスタック2000に、
「キャッシュA障害発生」と「共有メモリB障害発生」
の外部イベントがスタックされたとする。ステップ13
5は、第1の実施例と同様、繰り返しのための判断であ
る。イベントスタック2000に未処理イベントがある
ので、ステップ135からステップ140に進み、各状
態ノードに対して状態遷移を実行する。この処理につい
ては、図21のフローに基づいて、以下に詳細に説明す
る。
【0115】まず、ステップ2105で、各グループに
対するイベントスタックの何れかに少なくとも1個のイ
ベントがあるか否か判別する。すべてのイベントスタッ
クが空ならフロー140の処理を終了する。この例では
図20のようにイベントスタック2000にイベントが
入っているので、ステップ2110に進む。
【0116】次に、ステップ2110で、処理するグル
ープを決める。1つのイベントスタックにのみイベント
が入っている場合はそのイベントスタックのグループに
決定する。複数のイベントスタックにイベントが入って
いる場合は、何れか1つのイベントスタックのグループ
に決定して処理を行ない、その後、すべてのグループに
対するイベントスタックのイベントがなくなるまで処理
を繰り返すようにする。この例では、まず図20のイベ
ントスタックに対応するグループ(図19の第1グルー
プ1910)を最初の処理対象としてステップ2115
に進む。
【0117】ステップ2115では、ステップ2110
で決定したグループのイベントスタックに少なくとも1
個のイベントがあるか否か判別する。そのイベントスタ
ックにイベントがあればステップ2120に進み、イベ
ントがなくなったらステップ2105に戻る。これは、
処理対象のグループのイベントスタックが空になるま
で、ステップ2120〜2150の処理を繰り返すため
の判断である。
【0118】次に、ステップ2120で、処理するグル
ープのイベントスタックからイベントを1個取り出す。
取り出したイベントはイベントスタックから消去され
る。この例では、図20の外部イベント2010「キャ
ッシュA障害発生」を取り出す。もしスタックされてい
るのが内部イベントなら、{状態ノード,状態値}の組
み合わせを取り出す。
【0119】次に、ステップ2125で、処理している
グループに属する状態ノードのデシジョンテーブルを検
索して、ステップ2120で取り出したイベントを検索
する。この例では、第1グループの「キャッシュA」の
デシジョンテーブル(図5の500)より、「キャッシ
ュA障害発生」をイベントに持つ遷移「正常→閉塞」が
1個検索される。
【0120】次に、ステップ2130で、先にステップ
2125で検索した遷移の中で、遷移前の状態値が、遷
移の属する状態ノードのカレント状態値と等しい遷移を
検索する。この例では、ステップ2125で検索した1
個の遷移の遷移前状態値「正常」は、図8に示すカレン
ト状態値格納テーブル800から、キャッシュAのカレ
ント状態値であるから、「正常→閉塞」が検索すべき遷
移である。
【0121】次に、ステップ2135で、先にステップ
2130で検索した遷移の属する状態ノードと遷移後の
状態値との組み合わせを、その影響が及ぶグループのイ
ベントスタックに内部イベントとして格納する。影響が
及ぶイベントスタックの求め方は、遷移が起こった状態
ノードに対して階層構造で直接つながっている上位の状
態ノードの属するグループを影響が及ぶイベントスタッ
クとすればよい。この例では、ステップ2130で検索
された遷移は、キャッシュAの「正常→閉塞」であるか
ら、格納するのは{キャッシュA、閉塞}の組み合わせ
からなる内部イベントである。また、この遷移が起こっ
た状態ノード「キャッシュA」1905は、図19よ
り、上位の「論理的なキャッシュA面」と直接つながっ
ている。「論理的なキャッシュA面」は第2グループに
属するので、ステップ2130で検索された内部イベン
ト({キャッシュA、閉塞}の組み合わせ)は第2グル
ープのイベントスタックに格納する。
【0122】次に、ステップ2140で、ステップ21
30で検索した遷移に付随動作プログラムがついている
かどうか判断する。ついていない場合には、ステップ2
150に進む。本例では、付随動作プログラムがついて
いないのでステップ2150に進む。付随動作プログラ
ムがついている場合には、ステップ2145に進み、付
随動作プログラムの起動をかけた後、ステップ2150
に進む。
【0123】ステップ2150では、この遷移が起こっ
た状態ノードのカレント状態値を、ステップ2130で
検索した遷移後の状態値に変更する。本例では、図8の
カレント状態格納テーブル800中のキャッシュAのカ
レント状態値805を「正常」から「閉塞」に変更す
る。
【0124】ステップ2150の後、ステップ2115
に戻って、処理中のグループのイベントスタックに未だ
イベントが残っているか否か判別する。イベントが無け
ればステップ2150に進み、あればステップ2120
からの処理を再び行なう。本例では、未だ図20のよう
に外部イベント「共有メモリB障害発生」が残っている
ので、これに対して同様にステップ2120〜2145
を繰り返す。その処理が終了して、次にステップ211
5に戻ったときは、第1グループのイベントスタックに
はイベントが残っていないので、ステップ2115から
ステップ2105に戻る。
【0125】ステップ2105で、未だイベントの入っ
たスタックがあるならステップ2110からの処理を繰
り返す。本例では、第1グループのイベントスタックは
空になったが、先にステップ2135で格納した内部イ
ベントが第2グループのイベントスタックに入っている
ので、それに対して処理を行なう。
【0126】ステップ2105で、すべてのイベントス
タックが空になっていたら、図21のフロー140の処
理を終了し、図1のステップ140に戻る。そして、図
1のステップ140からステップ135に戻り、未処理
の外部イベントがなくなるまで同様の処理を繰り返す。
【0127】以上説明した第3の実施例では、内部イベ
ントを生成する際に発火すべきグループのイベントスタ
ックにイベントを格納することによって、内部イベント
が発火する状態ノードの検索のスピードが速くなる。
【0128】グループの分け方が任意の場合には、処理
を施すグループの順序を決めておく。階層木構造に基づ
いたグルーピングの場合には、下位のグループから上位
のグループに処理を進めるのが自然である。
【0129】次に、図22に基づいて、上述の第1〜第
3の実施例を実現するための装置構成について説明す
る。図22の装置構成は、グラフィック機能を持った計
算機2201に、入力装置2202、マウス2205、
記憶装置2203、および出力(ディスプレイ)装置2
204を接続したものである。図では、入力装置220
2として、キーボードおよびマウスを示したが、他の入
力装置を用いてもよいし、それらを組合わせて用いて
も、またどれか1つであってもよい。
【0130】計算機2201は、内部に中央処理装置
(CPU)およびメモリが備えられている。図2で実施
例における処理の概要を説明したが、図2の処理21
5,225,235は図22の計算機2201内のCP
Uで実行される処理であり、データ205,210,2
20,230は図2の計算機2201内のメモリまたは
外部の記憶装置2203に保持されるデータを示す。
【0131】記憶装置2203は、磁気記憶装置に限ら
ず、光ディスクや半導体メモリであってもよい。要は、
プログラムの実行やデータのファイルを格納するために
十分な容量を備えていればよい。本発明を実施する装置
構成は、一般に計算機または計算機システムと呼ばれる
ものであればよい。当然のこととして、本発明を実施す
るために、製作した専用装置であっても、上述のような
周辺機器の機能が充足されていればよい。
【0132】以上、上述の各実施例によれば、複数のコ
ンポーネントがインタラクションを取りながらも独自の
動作仕様を持つようなシステム状態遷移を、異なるコン
ポーネントの関係を局所的に定義し、個々のコンポーネ
ントの動作仕様を定義するだけで、実行することができ
る。
【0133】このことは、複数のコンポーネントを、そ
れを実現するソフトウェア開発におけるレイヤ構造に合
わせて関係付け、コンポーネントごとの動作仕様を定義
し、外部から入力されたイベントをレイヤ構造に従っ
て、伝搬することによって実現できる。
【0134】また、個々のコンポーネントの動作仕様
は、従来から利用されているデシジョンテーブルの形式
を用いるため、従来からの技術者が抵抗なく、本方式を
採用することができる。
【0135】さらに、この方法で実行する、シミュレー
タをつくれば、実機により実行する前にシミュレーショ
ンすることができ、バグの早期発見に効果がある。
【0136】
【発明の効果】本発明によれば、コンポーネントの階層
木構造を実際の対象システムの構成に合わせているの
で、下位の決定表の内容を合成して上位の決定表の内容
を作ればよく、設定がしやすい。また、フラットで大き
な1枚の決定表を用いるより、階層化することで、使用
するメモリ容量を減らすことができる。さらに、複数の
テーブルを適当につないだテーブルドリブン方式に比
べ、階層構造で上下の関係を決定しているので、実行の
スピードが速い。また、イベントの伝搬が決まっている
ので、デバックがしやすく、トラブルシーケンスも容易
である。
【0137】以上のような効果があるので、本発明によ
って、システム状態遷移を定義する複数の状態機械の関
係と、それぞれの動作仕様に基づいて、階層間を伝搬す
るイベントを制御して、制御ソフトウェアを正しく動作
させる方法および装置を提供することができる。
【図面の簡単な説明】
【図1】本発明の一実施例に係るシステム状態遷移の実
行方法の手順を示す処理フローチャート。
【図2】本実施例の方法を実現するためのブロック図。
【図3】階層木構造を表すイメージの説明図。
【図4】階層木構造格納テーブルの例を示す説明図。
【図5】キャッシュAのデシジョンテーブルの例を示す
説明図。
【図6】論理的なキャッシュA面のデシジョンテーブル
の例を示す説明図。
【図7】状態値の上下の対応格納テーブルの例を示す説
明図。
【図8】カレント状態格納テーブルの例を示す説明図。
【図9】イベントスタックの例を示す説明図。
【図10】最下位層に初期状態を設定したときの、各ノ
ードのカレント状態値を求める処理フローチャート。
【図11】第2層に関する、下位層の状態ノードのカレ
ント状態値の組み合わせでできる、合成状態値格納テー
ブルの例を示す説明図。
【図12】図1のフローチャートの「各層の状態遷移の
実行」処理を詳細に説明する処理フローチャート。
【図13】論理的なキャッシュA面の状態遷移前後の状
態値の組み合わせ格納テーブルの例を示す説明図。
【図14】外部イベントを格納するスタックの例を示す
説明図。
【図15】遷移発生フラグ格納テーブルの例を示す説明
図。
【図16】図12のフローとは異なる手順による、図1
のフローチャートの「各層の状態遷移の実行」処理を詳
細に説明する処理フローチャート。
【図17】第2層に関する、イベントが入力された後
の、下位層の状態ノードのカレント状態値の組み合わせ
でできる、合成状態値格納テーブルの例を示す説明図。
【図18】図16の手順における、最下位以外の階層で
の、遷移後状態値の検索手順を示す処理フローチャー
ト。
【図19】本発明の第3の実施例に係る階層木構造のグ
ループ化の説明図。
【図20】第3の実施例におけるイベントスタックの例
を示す説明図。
【図21】第3の実施例における「各層の状態遷移の実
行」処理を詳細に説明する処理フローチャート。
【図22】本発明を実現するための装置構成を示す図。
【符号の説明】
205…カレント状態値、210…実行対象システムの
階層木構造、215…遷移ドライバ、220…デシジョ
ンテーブル、225…イベントハンドラ、230…イベ
ントスタック、235…付随動作プログラム。
フロントページの続き (72)発明者 加賀 隆志 神奈川県小田原市国府津2880番地 株式会 社日立製作所ストレージシステム事業部内

Claims (8)

    【特許請求の範囲】
  1. 【請求項1】少なくとも記憶装置とプログラムを実行す
    る処理装置とを備えた装置において、状態遷移とその遷
    移を生起させるイベントとの組み合わせを記憶してお
    き、入力されたイベントに基づいて、状態遷移および該
    状態遷移に付随するプログラムの実行を制御するプログ
    ラム実行方法であって、 プログラムを実行する対象システムの階層木構造を入力
    して上記記憶装置内に記憶するステップと、 該階層木構造の各ノード(状態ノードと呼ぶ)ごとに、 (i)最下位の状態ノードについては、当該状態ノードが
    取り得る状態値、当該状態ノードに直接入力される外部
    イベント、および遷移前後の状態値を入力し状態遷移決
    定表として上記記憶装置内に記憶し、 (ii)下位に状態ノードが存在する状態ノードについて
    は、当該状態ノードが取り得る状態値(下位状態ノード
    の取り得る状態値を合成した合成状態値からなる)、当
    該状態ノードに直接入力される外部イベントと下位状態
    ノードにおいて生じた状態遷移で表わされる内部イベン
    ト、および遷移前後の状態値を入力し状態遷移決定表と
    して上記記憶装置内に記憶するステップと、 上記記憶装置内に、各状態ノードの現在の状態値を記憶
    するためのカレント状態記憶領域と、発生した外部イベ
    ントおよび内部イベントを記憶するためのイベント記憶
    領域とを確保するステップと、 最下位の状態ノードの現在の状態値をカレント状態記憶
    領域に初期設定するとともに、最下位以外の状態ノード
    についても、下位状態ノードの現在の状態値を合成して
    合成状態値を求めることにより、当該状態ノードの現在
    の状態値をカレント状態記憶領域に初期設定するステッ
    プと、 上記イベント記憶領域からイベントを読み出し、 (i)読み出したイベントが外部イベントである場合に
    は、該外部イベントが入力した状態ノードの状態遷移決
    定表を参照して、現在の状態値に対して発生する遷移後
    の状態値を検索し、現在の状態値を遷移後状態値に置き
    換え、該状態ノードについての{ノードID、遷移後の
    状態値}の組み合わせを内部イベントとして、上記イベ
    ント記憶領域に格納し、 (ii)読み出したイベントが内部イベントである場合に
    は、上記階層木構造をたどって、該内部イベントが通知
    されるべき上位状態ノードを検索し、該上位状態ノード
    に対応する状態遷移決定表に記載されているイベントの
    中から、読み出した内部イベントと一致するものを検索
    し、検索された状態ノードにおいて現在の状態から当該
    内部イベントが入力されて生起する遷移後の状態値を検
    出し、現在の状態値を該遷移後状態値に置き換え、さら
    に該状態ノードにおいてそのような遷移が発生したこと
    を内部イベントとして上位状態ノードへ通知するために
    上記イベント記憶領域に格納するイベント処理ステップ
    と、 上記外部イベントまたは内部イベントによる遷移によっ
    て引き起こされる付随プログラムがあれば、その付随プ
    ログラムを起動する付随プログラム起動ステップとを備
    え、 上記イベント処理ステップおよび付随プログラム起動ス
    テップを、上記イベント記憶領域に格納したすべての外
    部イベントおよび内部イベントについて、さらに最終的
    に上記階層木構造におけるすべての状態ノードについ
    て、繰り返すことにより、各状態ノードにおける状態遷
    移の制御および該状態遷移に付随するプログラムの実行
    制御を行なうことを特徴とする階層化状態遷移決定表に
    基づくプログラム実行方法。
  2. 【請求項2】少なくとも記憶装置とプログラムを実行す
    る処理装置とを備えた装置において、状態遷移とその遷
    移を生起させるイベントとの組み合わせを記憶してお
    き、入力されたイベントに基づいて、状態遷移および該
    状態遷移に付随するプログラムの実行を制御するプログ
    ラム実行方法であって、 プログラムを実行する対象システムの階層木構造を入力
    して上記記憶装置内に記憶するステップと、 該階層木構造の各ノード(状態ノードと呼ぶ)ごとに、 (i)最下位の状態ノードについては、当該状態ノードが
    取り得る状態値、当該状態ノードに直接入力される外部
    イベント、および遷移前後の状態値を入力し状態遷移決
    定表として上記記憶装置内に記憶し、 (ii)下位に状態ノードが存在する状態ノードについて
    は、当該状態ノードが取り得る状態値(下位状態ノード
    の取り得る状態値を合成した合成状態値からなる)、当
    該状態ノードに直接入力される外部イベント、および遷
    移前後の状態値を入力し状態遷移決定表として上記記憶
    装置内に記憶するステップと、 最下位以外のすべての状態ノードに対し、その状態ノー
    ドにおけるすべての遷移前後の状態値の組み合わせを入
    力し上記記憶装置内に記憶するステップと、 上記記憶装置内に、各状態ノードの現在の状態値を記憶
    するためのカレント状態記憶領域と、発生した外部イベ
    ントを記憶するためのイベント記憶領域と、各状態ノー
    ドごとに状態遷移が発生したことを示す遷移発生フラグ
    を記憶する領域とを確保するステップと、 上記各状態ノードごとの遷移発生フラグをすべてオフに
    初期設定するとともに、最下位の状態ノードの現在の状
    態値をカレント状態記憶領域に初期設定し、最下位以外
    の状態ノードについても、下位状態ノードの現在の状態
    値を合成して合成状態値を求めることにより、当該状態
    ノードの現在の状態値をカレント状態記憶領域に初期設
    定するステップと、 上記階層木構造の任意の状態ノードに外部イベントが入
    力されたとき、該外部イベントを上記イベント記憶領域
    から読み出し、該外部イベントが入力した状態ノードの
    状態遷移決定表を参照して、現在の状態値に対して発生
    する遷移後の状態値を検索し、現在の状態値を遷移後状
    態値に置き換えるとともに、該状態ノードで遷移が発生
    したことを示す状態ノードの遷移発生フラグをオンにす
    る外部イベント処理ステップと、 上記遷移発生フラグがオンである状態ノードが少なくと
    も1個存在している場合には、該状態ノードの上位状態
    ノードに関するすべての下位状態ノードの現在の状態値
    を読み出し、それらを合成して該上位状態ノードの状態
    値を生成し、該上位状態ノードにおいて、生成した状態
    値が遷移後の状態値でありかつ該上位状態ノードの現在
    の状態値が遷移前の状態値であるような遷移を該上位状
    態ノードにおける遷移前後の状態値の組み合わせから検
    索し、検索の結果見つかった場合は、該遷移後の状態値
    を該上位状態ノードの現在の状態値として設定し、該上
    位状態ノードの遷移発生フラグをオンにする上位ノード
    状態遷移処理ステップと、 上記遷移によって引き起こされる付随プログラムがあれ
    ば、その付随プログラムを起動する付随プログラム起動
    ステップとを備え、 上記外部イベント処理ステップ、上位ノード状態遷移処
    理ステップ、および付随プログラム起動ステップを、上
    記イベント記憶領域に格納されたイベントがなくなるま
    で、さらに遷移発生フラグがオンである状態ノードがな
    くなるまで、繰り返すことにより、各状態ノードにおけ
    る状態遷移の制御および該状態遷移に付随するプログラ
    ムの実行制御を行なうことを特徴とする階層化状態遷移
    決定表に基づくプログラム実行方法。
  3. 【請求項3】少なくとも記憶装置とプログラムを実行す
    る処理装置とを備えた装置において、状態遷移とその遷
    移を生起させるイベントとの組み合わせを記憶してお
    き、入力されたイベントに基づいて、状態遷移および該
    状態遷移に付随するプログラムの実行を制御するプログ
    ラム実行方法であって、 プログラムを実行する対象システムの階層木構造を入力
    し、該階層木構造の各ノード(状態ノードと呼ぶ)をグ
    ループ分けして、上記記憶装置内に記憶するステップ
    と、 該階層木構造の各状態ノードごとに、 (i)最下位の状態ノードについては、当該状態ノードが
    取り得る状態値、当該状態ノードに直接入力される外部
    イベント、および遷移前後の状態値を入力し状態遷移決
    定表として上記記憶装置内に記憶し、 (ii)下位に状態ノードが存在する状態ノードについて
    は、当該状態ノードが取り得る状態値(下位状態ノード
    の取り得る状態値を合成した合成状態値からなる)、当
    該状態ノードに直接入力される外部イベントと下位状態
    ノードにおいて生じた状態遷移で表わされる内部イベン
    ト、および遷移前後の状態値を入力し状態遷移決定表と
    して上記記憶装置内に記憶するステップと、 上記記憶装置内に、各状態ノードの現在の状態値を記憶
    するためのカレント状態記憶領域と、発生した外部イベ
    ントおよび内部イベントを記憶するためのイベント記憶
    領域であって上記グループごとに設けられるイベント記
    憶領域と、を確保するステップと、 最下位の状態ノードの現在の状態値をカレント状態記憶
    領域に初期設定するとともに、最下位以外の状態ノード
    についても、下位状態ノードの現在の状態値を合成して
    合成状態値を求めることにより、当該状態ノードの現在
    の状態値をカレント状態記憶領域に初期設定するステッ
    プと、 上記グループごとに設けられたイベント記憶領域の何れ
    かにイベントが格納されている場合には、該グループを
    処理対象グループとして決定し、該処理対象グループに
    対応するイベント記憶領域にイベントがなくなるまで、
    該イベント記憶領域からイベントを読み出し、処理対象
    グループに属する状態ノードの状態遷移決定表から該イ
    ベントを持つ状態ノードを検索し、検索された状態ノー
    ドにおいて現在の状態から当該イベントが入力されて生
    起する遷移後の状態値を検出し、現在の状態値を該遷移
    後状態値に置き換え、さらに該状態ノードにおいてその
    ような遷移が発生したことを内部イベントとして、該遷
    移が影響を及ぼす状態ノードが含まれるグループのイベ
    ント記憶領域に格納する処理を行なうグループ内イベン
    ト処理ステップと、 上記遷移によって引き起こされる付随プログラムがあれ
    ば、その付随プログラムを起動する付随プログラム起動
    ステップとを備え、 上記グループ内イベント処理ステップおよび付随プログ
    ラム起動ステップを、上記グループごとに設けられてい
    るすべてのイベント記憶領域にイベントがなくなるまで
    繰り返すことにより、各状態ノードにおける状態遷移の
    制御および該状態遷移に付随するプログラムの実行制御
    を行なうことを特徴とする階層化状態遷移決定表に基づ
    くプログラム実行方法。
  4. 【請求項4】前記階層木構造の各状態ノードのグループ
    分けは、同じ階層に属する状態ノードを1つのグループ
    としてグループ分けする請求項3に記載のプログラム実
    行方法。
  5. 【請求項5】前記グループ内イベント処理ステップを施
    すグループの順序をあらかじめ決めておく請求項3に記
    載のプログラム実行方法。
  6. 【請求項6】状態遷移とその遷移を生起させるイベント
    との組み合わせを記憶しておき、入力されたイベントに
    基づいて、状態遷移および該状態遷移に付随するプログ
    ラムの実行を制御するプログラム実行装置であって、 プログラムを実行する対象システムの階層木構造を記憶
    する階層木構造記憶手段と、 該階層木構造の各ノード(状態ノードと呼ぶ)ごとに、 (i)最下位の状態ノードについては、当該状態ノードが
    取り得る状態値、当該状態ノードに直接入力される外部
    イベント、および遷移前後の状態値を状態遷移決定表と
    して記憶し、 (ii)下位に状態ノードが存在する状態ノードについて
    は、当該状態ノードが取り得る状態値(下位状態ノード
    の取り得る状態値を合成した合成状態値からなる)、当
    該状態ノードに直接入力される外部イベントと下位状態
    ノードにおいて生じた状態遷移で表わされる内部イベン
    ト、および遷移前後の状態値を状態遷移決定表として記
    憶する状態遷移決定表記憶手段と、 各状態ノードの現在の状態値を記憶するためのカレント
    状態記憶手段と、 発生した外部イベントおよび内部イベントを記憶するた
    めのイベント記憶手段と、 最下位の状態ノードの現在の状態値を上記カレント状態
    記憶手段に初期設定するとともに、最下位以外の状態ノ
    ードについても、下位状態ノードの現在の状態値を合成
    して合成状態値を求めることにより、当該状態ノードの
    現在の状態値を上記カレント状態記憶手段に初期設定す
    る手段と、 上記イベント記憶手段からイベントを読み出し、 (i)読み出したイベントが外部イベントである場合に
    は、該外部イベントが入力した状態ノードの状態遷移決
    定表を参照して、現在の状態値に対して発生する遷移後
    の状態値を検索し、現在の状態値を遷移後状態値に置き
    換え、該状態ノードについての{ノードID、遷移後の
    状態値}の組み合わせを内部イベントとして、上記イベ
    ント記憶手段に格納し、 (ii)読み出したイベントが内部イベントである場合に
    は、上記階層木構造をたどって、該内部イベントが通知
    されるべき上位状態ノードを検索し、該上位状態ノード
    に対応する状態遷移決定表に記載されているイベントの
    中から、読み出した内部イベントと一致するものを検索
    し、検索された状態ノードにおいて現在の状態から当該
    内部イベントが入力されて生起する遷移後の状態値を検
    出し、現在の状態値を該遷移後状態値に置き換え、さら
    に該状態ノードにおいてそのような遷移が発生したこと
    を内部イベントとして上位状態ノードへ通知するために
    上記イベント記憶手段に格納するイベント処理手段と、 上記外部イベントまたは内部イベントによる遷移によっ
    て引き起こされる付随プログラムがあれば、その付随プ
    ログラムを起動する付随プログラム起動手段とを備え、 上記イベント処理および付随プログラム起動処理を、上
    記イベント記憶手段に格納したすべての外部イベントお
    よび内部イベントについて、さらに最終的に上記階層木
    構造におけるすべての状態ノードについて、繰り返すこ
    とにより、各状態ノードにおける状態遷移の制御および
    該状態遷移に付随するプログラムの実行制御を行なうこ
    とを特徴とする階層化状態遷移決定表に基づくプログラ
    ム実行装置。
  7. 【請求項7】状態遷移とその遷移を生起させるイベント
    との組み合わせを記憶しておき、入力されたイベントに
    基づいて、状態遷移および該状態遷移に付随するプログ
    ラムの実行を制御するプログラム実行装置であって、 プログラムを実行する対象システムの階層木構造を記憶
    する階層木構造記憶手段と、 該階層木構造の各ノード(状態ノードと呼ぶ)ごとに、 (i)最下位の状態ノードについては、当該状態ノードが
    取り得る状態値、当該状態ノードに直接入力される外部
    イベント、および遷移前後の状態値を状態遷移決定表と
    して記憶し、 (ii)下位に状態ノードが存在する状態ノードについて
    は、当該状態ノードが取り得る状態値(下位状態ノード
    の取り得る状態値を合成した合成状態値からなる)、当
    該状態ノードに直接入力される外部イベント、および遷
    移前後の状態値を状態遷移決定表として記憶する状態遷
    移決定表記憶手段と、 最下位以外のすべての状態ノードに対し、その状態ノー
    ドにおけるすべての遷移前後の状態値の組み合わせを記
    憶する、遷移前後状態値組み合わせ記憶手段と、 各状態ノードの現在の状態値を記憶するためのカレント
    状態記憶手段と、 発生した外部イベントを記憶するためのイベント記憶手
    段と、 各状態ノードごとに状態遷移が発生したことを示す遷移
    発生フラグを記憶する遷移発生フラグ記憶手段と、 上記各状態ノードごとの遷移発生フラグをすべてオフに
    初期設定するとともに、最下位の状態ノードの現在の状
    態値をカレント状態記憶手段に初期設定し、最下位以外
    の状態ノードについても、下位状態ノードの現在の状態
    値を合成して合成状態値を求めることにより、当該状態
    ノードの現在の状態値をカレント状態記憶手段に初期設
    定する手段と、 上記階層木構造の任意の状態ノードに外部イベントが入
    力されたとき、該外部イベントを上記イベント記憶手段
    から読み出し、該外部イベントが入力した状態ノードの
    状態遷移決定表を参照して、現在の状態値に対して発生
    する遷移後の状態値を検索し、現在の状態値を遷移後状
    態値に置き換えるとともに、該状態ノードで遷移が発生
    したことを示す状態ノードの遷移発生フラグをオンにす
    る外部イベント処理手段と、 上記遷移発生フラグがオンである状態ノードが少なくと
    も1個存在している場合には、該状態ノードの上位状態
    ノードに関するすべての下位状態ノードの現在の状態値
    を読み出し、それらを合成して該上位状態ノードの状態
    値を生成し、該上位状態ノードにおいて、生成した状態
    値が遷移後の状態値でありかつ該上位状態ノードの現在
    の状態値が遷移前の状態値であるような遷移を該上位状
    態ノードにおける遷移前後の状態値の組み合わせから検
    索し、検索の結果見つかった場合は、該遷移後の状態値
    を該上位状態ノードの現在の状態値として設定し、該上
    位状態ノードの遷移発生フラグをオンにする上位ノード
    状態遷移処理手段と、 上記遷移によって引き起こされる付随プログラムがあれ
    ば、その付随プログラムを起動する付随プログラム起動
    手段とを備え、 上記外部イベント処理、上位ノード状態遷移処理、およ
    び付随プログラム起動処理を、上記イベント記憶手段に
    格納されたイベントがなくなるまで、さらに遷移発生フ
    ラグがオンである状態ノードがなくなるまで、繰り返す
    ことにより、各状態ノードにおける状態遷移の制御およ
    び該状態遷移に付随するプログラムの実行制御を行なう
    ことを特徴とする階層化状態遷移決定表に基づくプログ
    ラム実行装置。
  8. 【請求項8】状態遷移とその遷移を生起させるイベント
    との組み合わせを記憶しておき、入力されたイベントに
    基づいて、状態遷移および該状態遷移に付随するプログ
    ラムの実行を制御するプログラム実行装置であって、 プログラムを実行する対象システムの階層木構造を、該
    階層木構造の各ノード(状態ノードと呼ぶ)をグループ
    分けして、記憶する階層木構造記憶手段と、 該階層木構造の各状態ノードごとに、 (i)最下位の状態ノードについては、当該状態ノードが
    取り得る状態値、当該状態ノードに直接入力される外部
    イベント、および遷移前後の状態値を状態遷移決定表と
    して記憶し、 (ii)下位に状態ノードが存在する状態ノードについて
    は、当該状態ノードが取り得る状態値(下位状態ノード
    の取り得る状態値を合成した合成状態値からなる)、当
    該状態ノードに直接入力される外部イベントと下位状態
    ノードにおいて生じた状態遷移で表わされる内部イベン
    ト、および遷移前後の状態値を状態遷移決定表として記
    憶する状態遷移決定表記憶手段と、 各状態ノードの現在の状態値を記憶するためのカレント
    状態記憶手段と、 発生した外部イベントおよび内部イベントを記憶するた
    めの、上記グループごとに設けられた、イベント記憶手
    段と、 最下位の状態ノードの現在の状態値をカレント状態記憶
    手段に初期設定するとともに、最下位以外の状態ノード
    についても、下位状態ノードの現在の状態値を合成して
    合成状態値を求めることにより、当該状態ノードの現在
    の状態値をカレント状態記憶手段に初期設定する手段
    と、 上記グループごとに設けられたイベント記憶手段の何れ
    かにイベントが格納されている場合には、該グループを
    処理対象グループとして決定し、該処理対象グループに
    対応するイベント記憶手段にイベントがなくなるまで、
    該イベント記憶手段からイベントを読み出し、処理対象
    グループに属する状態ノードの状態遷移決定表から該イ
    ベントを持つ状態ノードを検索し、検索された状態ノー
    ドにおいて現在の状態から当該イベントが入力されて生
    起する遷移後の状態値を検出し、現在の状態値を該遷移
    後状態値に置き換え、さらに該状態ノードにおいてその
    ような遷移が発生したことを内部イベントとして、該遷
    移が影響を及ぼす状態ノードが含まれるグループのイベ
    ント記憶手段に格納する処理を行なうグループ内イベン
    ト処理手段と、 上記遷移によって引き起こされる付随プログラムがあれ
    ば、その付随プログラムを起動する付随プログラム起動
    手段とを備え、 上記グループ内イベント処理および付随プログラム起動
    処理を、上記グループごとに設けられているすべてのイ
    ベント記憶手段にイベントがなくなるまで繰り返すこと
    により、各状態ノードにおける状態遷移の制御および該
    状態遷移に付随するプログラムの実行制御を行なうこと
    を特徴とする階層化状態遷移決定表に基づくプログラム
    実行装置。
JP12713095A 1995-04-27 1995-04-27 階層化状態遷移決定表に基づくプログラム実行方法および装置 Pending JPH08305554A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP12713095A JPH08305554A (ja) 1995-04-27 1995-04-27 階層化状態遷移決定表に基づくプログラム実行方法および装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP12713095A JPH08305554A (ja) 1995-04-27 1995-04-27 階層化状態遷移決定表に基づくプログラム実行方法および装置

Publications (1)

Publication Number Publication Date
JPH08305554A true JPH08305554A (ja) 1996-11-22

Family

ID=14952362

Family Applications (1)

Application Number Title Priority Date Filing Date
JP12713095A Pending JPH08305554A (ja) 1995-04-27 1995-04-27 階層化状態遷移決定表に基づくプログラム実行方法および装置

Country Status (1)

Country Link
JP (1) JPH08305554A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1126367A1 (en) * 2000-02-15 2001-08-22 Fujitsu Limited Data processing device, system and method using a state transition table
JP2006085668A (ja) * 2004-08-18 2006-03-30 Matsushita Electric Works Ltd ソフトウェア開発支援システム
JP2011524581A (ja) * 2008-06-16 2011-09-01 チャン・ピエール−イヴ 折り枚葉紙の集合に基づく情報検索デバイスおよび対応する方法
US9477446B1 (en) 2015-03-31 2016-10-25 Toyota Jidosha Kabushiki Kaisha Bottom-up approach for integrating models for software components using contracts

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1126367A1 (en) * 2000-02-15 2001-08-22 Fujitsu Limited Data processing device, system and method using a state transition table
US6742107B2 (en) 2000-02-15 2004-05-25 Fujitsu Limited Dynamically configured processing of composite stream input data using next conversion determining state transition table searched by converted input data
JP2006085668A (ja) * 2004-08-18 2006-03-30 Matsushita Electric Works Ltd ソフトウェア開発支援システム
JP2011524581A (ja) * 2008-06-16 2011-09-01 チャン・ピエール−イヴ 折り枚葉紙の集合に基づく情報検索デバイスおよび対応する方法
US9477446B1 (en) 2015-03-31 2016-10-25 Toyota Jidosha Kabushiki Kaisha Bottom-up approach for integrating models for software components using contracts

Similar Documents

Publication Publication Date Title
US8464229B2 (en) Creation of form-based software application in a graphical user interface (GUI) environment
EP2343641B1 (en) Applying rules to data
US8549353B2 (en) Batch processing error handling modes
JP2791243B2 (ja) 階層間同期化システムおよびこれを用いた大規模集積回路
EP2343644A1 (en) Transformation of data between hierarchical data formats
EP2369502A2 (en) SQL generation
US8140894B2 (en) Transaction regions in graphical computer-implemented methods of processing data
JPH07319677A (ja) 自動的に構造化プログラムを生成する、プログラムされた計算機を用いて流れ図を作成する方法と装置
US8732596B2 (en) Transformation of hierarchical data formats using graphical rules
EP2357554A1 (en) Processing collections of data items
EP2343653A2 (en) Generating and monitoring data items
US5793933A (en) Computer-implemented system and method for constructing a system
JPH08305554A (ja) 階層化状態遷移決定表に基づくプログラム実行方法および装置
Denham A Petri-net approach to the control of discrete-event systems
JPS6320529A (ja) 知識獲得方式
Wagner et al. An IEC 61499 interpretation and implementation focused on usability
JPWO2006025472A1 (ja) Lyee方法論に基づく処理経路図作成方法、作成装置、ソフトウェア生成方法、生成装置、ソフトウェア並びにソフトウェア開発支援用ソフトウェア
JP3722854B2 (ja) データ編集装置
JPH07129375A (ja) システム状態遷移のプログラミング方法およびその装置
JPH0454635A (ja) 事務処理方法
JP3047400B2 (ja) データ処理装置
JPH027170A (ja) 階層設計処理方式
JPH03294924A (ja) ステートイベントマトリックスデータ形成方法及びステートイベントマトリックスデータ処理装置
JP2900504B2 (ja) 情報処理装置
JP2004118649A (ja) メニュー選択型試験プログラムツールの生成方法及び装置