次に本発明の実施の形態について図面を参照して詳細に説明する。
図1は、本発明の実施の形態におけるプログラム実行制御装置の一構成例を示す図である。このプログラム実行制御装置は、ユーザとのやりとりを行うユーザインターフェース310と、外部からの要求に応じてイベントの送出を行うイベントディスパッチャ320と、所望のシステムを実現するアプリケーションプログラム群330と、アプリケーションプログラム群330により利用されるハードウェア資源340と、アプリケーションプログラム群330からの要求に応じて制約条件を判断するアスペクト350と、制約条件を保持する制約条件マトリックス360と、アプリケーションプログラム群330の各アプリケーションプログラムの有限状態機械オブジェクトに対するイベントを保持するイベントキュー370と、再度送出すべきイベントを保持するイベントメモリ380とを備える。
ユーザインターフェース310は、ユーザからの入力を受けて、これに対応するイベントをイベントディスパッチャ320に送出する。また、ユーザインターフェース310は、イベントディスパッチャ320からのイベントを受けて、必要に応じてユーザに対する出力を行う。
イベントディスパッチャ320は、発生したイベントに対して必要なメソッドを呼び出すモジュールである。例えば、イベントディスパッチャ320は、有限状態機械のオブジェクトXをオン状態にするイベントを受けると、そのオブジェクトXに対してオン状態にするイベントを送出する。また、イベントディスパッチャ320にはイベントキュー370が接続される。このイベントキュー370は、各オブジェクトに対して送出されたイベントをそれぞれ待ち行列(キュー)として保持する。
アプリケーションプログラム群330は、所望のシステムを実現するアプリケーションプログラムの集合である。各アプリケーションプログラムには、アプリケーションプログラム間の制約関係を制御するために内部状態が割り当てられる。この内部状態は有限状態機械のオブジェクトとして表現される。これにより、アプリケーションプログラムの内部状態は、イベントディスパッチャ320からのイベントに応じて遷移することになる。
各アプリケーションプログラムは、ハードウェア資源340を操作対象とする。ここで、ハードウェア資源340とは、アプリケーションプログラム間で制約関係を生じさせるものであり、例えばビデオカードのように物理的に独立した物であってもよく、また、ハードウェアやソフトウェアにより実現される所定の機能であってもよい。また、このハードウェア資源340は、例えばタイマーのように、イベントディスパッチャ320に対して何らかのイベントを送出する可能性がある。
アスペクト350は、アプリケーションプログラムにおける内部状態の遷移に先立って、アプリケーションプログラム間の制約関係においてその遷移が許されるか否かを判断する。そのような制約関係を満たす条件を制約条件という。各アプリケーションプログラムは、内部状態を遷移させる際、アスペクト350に制約条件を満たすか否かを問い合わせる。アスペクト350には制約条件マトリックス360が接続される。この制約条件マトリックス360には、各アプリケーションプログラムにおける内部状態の遷移に関する制約条件が保持されている。アスペクト350は、この制約条件マトリックス360を参照して制約条件を満たすか否かを判断して、その結果を問い合わせ元のアプリケーションプログラムに報告する。
また、アスペクト350にはイベントメモリ380が接続される。このイベントメモリ380には、制約条件を満たすか否かを問い合わせたアプリケーションプログラムのオブジェクト識別子およびそのアプリケーションプログラムのオブジェクトに送出されたイベントを保持する。これらの情報はイベントキュー370に保持されており、アスペクト350は、イベントディスパッチャ320に問い合わせることによりそれらの情報を取得してイベントメモリ380に保持させる。
図2は、本発明の実施の形態におけるアプリケーションプログラムの内部状態を表現する有限状態機械モデルを示す図である。この有限状態機械モデルでは、オフ状態(STATE_OFF)551またはオン状態(STATE_ON)552の何れかの状態をとる。図中、黒丸559は初期状態を表す。すなわち、初期状態はオフ状態551となる。
この有限状態機械モデルのオブジェクトは、オフ状態551においてイベントEVENT_ONを受けると、オン状態552に移行しようとする。その際、ガード条件GUARD_0を満たすか否かが判断される。このガード条件とは、状態遷移に必要な条件であり、特にそのような条件がない場合にはこのガード条件に真値(true)を設定しておくことができる。このガード条件が満たされていれば所定の動作ACTION_0が実行され、オン状態552に移行する。
また、この有限状態機械モデルのオブジェクトは、オン状態552においてイベントEVENT_OFFを受けると、オフ状態551に移行しようとする。その際、ガード条件GUARD_1を満たすか否かが判断される。このガード条件が満たされていれば所定の動作ACTION_1が実行され、オフ状態551に移行する。
さらに、この図2の有限状態機械モデルでは、オフ状態551に入る際には所定の動作ACTION_2が実行され、オフ状態551から離れる際には所定の動作ACTION_3が実行される。同様に、オン状態552に入る際には所定の動作ACTION_4が実行され、オン状態552から離れる際には所定の動作ACTION_5が実行される。
このような有限状態機械モデルにおいて、オン状態552のときにハードウェア資源X(341)を占有すると仮定すれば、アプリケーションプログラムの内部状態としてこの有限状態機械モデルを利用して複雑な排他制御を実現することができる。
なお、以下では、有限状態機械モデルのオブジェクトの状態(すなわち、アプリケーションプログラムの内部状態)について、現在の状態をアクティブ状態といい、遷移しようとする状態をターゲット状態という。
図3は、本発明の実施の形態におけるアプリケーションプログラムの内部状態を表現する有限状態機械クラスの構造を示す図である。有限状態機械クラスのClassA520は、ClassFsm510を基底クラスとして、その派生から作成される。すなわち、ClassFsm510はスーパクラスであり、ClassA520はそのサブクラスになる。オブジェクトAはClassA520のオブジェクトとして作成される。他のオブジェクトBを作成するためには、同様にClassFsm510から派生したClassBを作成して、そのオブジェクトを作成することになる。
ClassFsm510には、クラス名511と、属性512と、操作513とが表されている。クラス名511はそのクラスの名称であり、ここでは有限状態機械クラスの名称として「ClassFsm」が記されている。属性512はそのクラスが有する固有の属性であり、ここでは「ID」、「activeState」、「aspect」の3つが記されている。「ID」はそのクラスのオブジェクトを識別するための識別子である。「activeState」はそのクラスのオブジェクトの現在の状態を表すものである。また、「aspect」はアスペクト350に対するポインタであり、これによりアスペクト350のメソッドを呼び出すことが可能となる。
操作513はそのクラスに定義されたメソッドであり、ここでは「VReceive」、「VAction」、「VGuard」の3つのメソッドが記されている。VReceiveメソッドは所定のイベントを受信するためのメソッドであり、外部からそのクラスにイベントを送信する際に用いられる。VActionメソッドは所定の動作を行うためのメソッドである。また、VGuardメソッドは所定のガード条件を判断するためのメソッドである。
ClassA520には、クラス名521および操作523が表されている。属性については、スーパクラスであるClassFsm510の属性512を承継するため、特に記されていない。また、メソッドについては、ClassFsm510において操作513が抽象関数として定義されているため、ClassA520の操作523において定義のやり直しをしている。
図4は、本発明の実施の形態において図2の有限状態機械モデルを適用した場合の動作例を示すシーケンス図である。ユーザインターフェース310は、例えば、アプリケーションプログラムの内部状態を表す有限状態機械のオブジェクトAをオン状態にするためのボタンがユーザにより押下されると、割込み処理メソッド810を介してオブジェクトAをオン状態にするイベントを送出する。そのために、ユーザインターフェース310は、イベントディスパッチャ320のSendEventメソッド811を呼び出す。このSendEventメソッド811のパラメータとしては、オブジェクトAに割り振られた識別子およびそのオブジェクトAをオン状態にするイベントEVENT_ONが用いられる。
ユーザインターフェース310からSendEventメソッド811を呼び出されたイベントディスパッチャ320は、パラメータに基づいてオブジェクトAを識別し、そのオブジェクトA(331)に対してオン状態にするイベントを送出する。そのために、イベントディスパッチャ320は、SendEventメソッドのパラメータとして受けた識別子に基づいてオブジェクトA(331)を選択し、そのオブジェクトA(331)の受信メソッドVReceive812を呼び出す。このVReceiveメソッド812のパラメータとしては、そのオブジェクトA(331)をオン状態にするイベントEVENT_ONが用いられる。
イベントディスパッチャ320からVReceiveメソッド812を呼び出されたオブジェクトA(331)は、内部関数の発火メソッドFire813を呼び出す。このFireメソッド813のパラメータとしては、図2のようにガード条件GUARD_0と、動作ACTION_0と、ターゲット状態STATE_ONとが用いられる。
Fireメソッド813は、まず、他のアプリケーションプログラムとの間の制約条件を満たすか否かを調べるために、アスペクト350のVGuardメソッド814を呼び出す。このVGuardメソッド814のパラメータとしては、オブジェクトAに割り振られた識別子および遷移しようとする状態STATE_ONが用いられる。アスペクト350は、後述する制約条件マトリックス360を参照して制約条件を満たすか否かを判断して、その結果を問い合わせ元のオブジェクトAに返す。この結果、制約条件を満たすものであれば、オブジェクトAはさらに自身のVGuardメソッド815を呼び出す。このVGuardメソッド815のパラメータとしては、ガード条件GUARD_0が用いられる。この結果、ガード条件を満たすものであればさらに以下の処理を行う。
すなわち、オブジェクトAはオフ状態551から離れるために自身のVExitメソッド816を呼び出す。このVExitメソッド816のパラメータとしては、動作ACTION_3が用いられる。また、オブジェクトAは状態遷移に伴う動作行うために自身のVActionメソッド817を呼び出す。このVActionメソッド817のパラメータとしては、動作ACTION_0が用いられる。新たな現在の状態として、状態STATE_ONが設定される。さらに、オブジェクトAはオン状態552に入るために自身のVEntryメソッド818を呼び出す。このVEntryメソッド818のパラメータとしては、動作ACTION_4が用いられる。
そして、これらの処理が完了すると、オブジェクトAは状態遷移をアスペクト350に報告するためにアスペクト350のVEntryメソッド819を呼び出す。このVEntryメソッド819のパラメータとしては、オブジェクトAに割り振られた識別子および遷移した状態STATE_ONが用いられる。
図5は、本発明の実施の形態における受信メソッドVReceiveの処理手順を示す図である。アプリケーションプログラムのオブジェクトのアクティブ状態がオフ状態のときに(ステップS921)、オン状態にするためのイベントを受信すると(ステップS922)、ターゲット状態をオン状態として発火メソッドを呼び出す(ステップS923)。一方、アプリケーションプログラムのオブジェクトのアクティブ状態がオン状態のときに(ステップS921)、オフ状態にするためのイベントを受信すると(ステップS922)、ターゲット状態をオフ状態として発火メソッドを呼び出す(ステップS923)。これ以外の場合は、アクティブ状態とターゲット状態とが一致し、発火メソッドを呼び出す必要はないため、そのまま処理を終了する。
図6は、本発明の実施の形態における発火メソッドFireの処理手順を示す図である。まず、パラメータにおいてターゲット状態として「状態不変」が指定されているときには(ステップS931)、パラメータで指定された(有限状態機械クラスの)ガード条件をチェックし(ステップS932)、ガード条件が満たされていればパラメータで指定されたアクション動作を行って(ステップS933)、処理が成功した旨を関数値として返す(ステップS934、S949)。一方、ステップS932においてガード条件が満たされていないと判断されれば、処理が失敗した旨を関数値として返す(ステップS935、S949)。
また、パラメータにおいてターゲット状態としてオン状態またはオフ状態が指定されているときには(ステップS931)、アスペクト350へのポインタが有効に存在するかを判断する(ステップS936)。アスペクト350が存在すれば、制約条件を満たすか否かをアスペクト350に問い合わせるとともに、パラメータで指定された(有限状態機械クラスの)ガード条件をチェックする(ステップS937)。一方、ステップS936においてアスペクト350が存在しないと判断された場合には、アスペクト350への問い合わせは行わず、パラメータで指定された(有限状態機械クラスの)ガード条件をチェックする(ステップS944)。
ステップS937においてアスペクト350による制約条件およびパラメータで指定されたガード条件の何れも満たしていると判断された場合には、パラメータで指定されたアクション動作を行って(ステップS938)、パラメータで指定されたターゲット状態への遷移を行うとともに(ステップS939)、アスペクト350への状態遷移報告を行う(ステップS941)。そして、処理が成功した旨を関数値として返す(ステップS942、S949)。一方、ステップS937において制約条件またはガード条件の何れかが満たされていないと判断されれば、処理が失敗した旨を関数値として返す(ステップS943、S949)。
ステップS944においてパラメータで指定されたガード条件を満たしていると判断された場合には、パラメータで指定されたアクション動作を行って(ステップS945)、パラメータで指定されたターゲット状態への遷移を行うとともに(ステップS946)、処理が成功した旨を関数値として返す(ステップS947、S949)。一方、ステップS944においてガード条件が満たされていないと判断されれば、処理が失敗した旨を関数値として返す(ステップS948、S949)。
図7は、本発明の実施の形態におけるイベントキュー370の構成例を示す図である。このイベントキュー370は、各オブジェクト毎に、オブジェクト識別子371と、オブジェクトへのオブジェクトポインタ372と、イベントの待ち行列374と、イベントの待ち行列374へのイベントポインタ373とを保持する。
オブジェクト識別子371はオブジェクトを識別するための識別子であり、例えば、上述の有限状態機械のオブジェクトA等を識別する。オブジェクトポインタ372は対応するオブジェクトを指し示すポインタである。このオブジェクトポインタ372を辿ることによりアプリケーションプログラム330の内部状態を表現する有限状態機械クラスのオブジェクトにアクセスすることができる。図3により説明したように、各オブジェクトは属性として「ID」、「activeState」、「aspect」の3つを備えており、各オブジェクトの現在の状態を把握することや、アスペクト350のメソッドを呼び出すことができるようになっている。なお、この図7の例では、オブジェクトAおよびBについては制約条件があると想定してアスペクト350へのポインタを有効にしているが、オブジェクトCについては制約条件がないものと想定してアスペクト350へのポインタを無効にしている。
イベントの待ち行列374には各オブジェクトに対して送出されたイベントが時系列に並べられる。最も新しく送出されたイベントはその待ち行列374の先頭に位置する。その先頭アドレスを指し示すのがイベントポインタ373である。
これにより、イベントディスパッチャ320は各オブジェクトについてそのオブジェクトに対して送出されたイベントを取得することができる。アスペクト350はイベントディスパッチャ320に問い合わせることにより、制約条件を満たすか否かを問い合わせたアプリケーションプログラムのオブジェクトに送出されたイベントを取得して、オブジェクト識別子とともにイベントメモリ380に保持させることができる。
図8は、本発明の実施の形態における制約条件マトリックス360の表示例を示す図である。図8(a)は3つのアプリケーションプログラム(その内部状態をそれぞれオブジェクトA、BおよびCで表す)を有するシステムにおける制約条件マトリックス3601の一例であり、横方向にターゲット状態の項目、そして縦方向にアクティブ状態の項目がそれぞれ対称に列挙されている。これら各項目において、2つのコロンで区切られた前の部分がオブジェクト名で、後ろの部分が状態を表す。また、それら項目の横に付されている数字はその項目を識別するための項目識別子である。項目の内容が同じものには同一の項目識別子が付されている。
ターゲット状態とアクティブ状態との交点にはその状態遷移に関する制約条件が記されている。例えば、オブジェクトAをオン状態に遷移させる際には、ターゲット状態が「A::ON」の列を参照する。この図8(a)の例では、アクティブ状態「B::ON」について「×」が、アクティブ状態「C::ON」について「○」がそれぞれ記されている。ここで、「×」は状態遷移が禁止されていることを意味し、「○」は状態遷移が禁止されていないことを意味する。従って、この例では、オブジェクトBがオン状態である限りはオブジェクトAをオン状態に遷移させることはできないことがわかる。
なお、この制約条件マトリックスにおいては、オブジェクトが同じもの同士の組合せは制約条件として意味がないため、特に定義されない。この図8(a)の例では、同一の項目同士には「\」が、それ以外でオブジェクトが同じもの同士には「・」がそれぞれ記されている。また、他のオブジェクトに影響されない独立したオブジェクトについては、この制約条件マトリックスに記す必要はない。
図8(b)は図8(a)のシステムにさらに1つのアプリケーションプログラム(その内部状態をオブジェクトDで表す)が加わった場合の制約条件マトリックスの一例である。この場合、図8(a)で用いられた制約条件マトリックス3601に対してオブジェクトDに関する部分的な制約条件マトリックス3602を加えたものが、新たな制約条件マトリックスとなる。
すなわち、システムに新たなアプリケーションプログラムを追加する際に、他のアプリケーションプログラムとの間で制約関係が生じる場合であっても、新たなアプリケーションプログラムを追加するとともに制約条件マトリックスの差分のみを追加するだけでよい。その際、他のアプリケーションプログラムを書き換える必要はなく、また、アスペクト350も変更する必要はない。
図9は、本発明の実施の形態における制約条件マトリックス360の構成例を示す図である。この制約条件マトリックス360は、各オブジェクトに関するターゲット状態およびアクティブ状態の項目のそれぞれについて、項目識別子361と、オブジェクト識別子362と、状態363と、先頭アドレス364とを有している。項目識別子361はオブジェクト識別子362および状態363の対により構成される項目を識別するものであり、ここではターゲット状態の項目を表す。オブジェクト識別子362および状態363はその項目のオブジェクト識別子および状態を表す。また、先頭アドレス364は、各ターゲット状態に対応する制約条件の内容を保持する領域の先頭アドレスを表す。
制約条件の内容を保持する領域は、ターゲット状態毎に、項目識別子365と、記号366と、イベントα367と、イベントβ368とをそれぞれ保持する。項目識別子365は項目識別子361と同様のものであり、ここではアクティブ状態の項目を表す。そして、記号366は、ターゲット状態の項目識別子361とアクティブ状態の項目識別子365との交点に相当する制約条件を表す。なお、この記号366は、説明上、「○」「×」等で表しているが、実際には所定幅のビット値として保持される。
このような制約条件マトリックス360において、例えば、状態「B::ON」をターゲット状態として、状態「A::ON」をアクティブ状態とする場合には、項目識別子361が「1」で項目識別子365が「0」である記号366を参照し、「×」を取得することができる。
なお、記号366には上述のように「○」や「×」などの制約条件が記されるが、「○」や「×」に限られず、後述のように幾つかのイベントを伴う様々な制約条件を記すことができる。そのようなイベントを記述できるよう、イベントα367およびβ368を指定できるようになっている。但し、これらイベントα367およびβ368は、記号366が「○」や「×」などの場合には特に指定する必要はない。イベントα367またはβ368を指定しない場合には「−1」などの表示がなされる。
図10は、本発明の実施の形態における制約条件マトリックス360の他の表示例を示す図である。図10(a)は制約条件マトリックスのマクロ記述の例であり、ターゲット状態「A::ON」に関するアクティブ状態「B::ON」にはマクロ「F0」が、アクティブ状態「C::ON」にはマクロ「F1」がそれぞれ表されている。すなわち、このマクロ記述によって、制約条件がシステムの関数として表現されることになる。このようなマクロ記述を行う場合には、システム毎にマクロの内容を表したマクロテーブル369を別途用意しておく必要がある。
図10(b)はマクロテーブル369の構成例である。このマクロテーブル369では、各マクロについて、システム毎の解釈が示されている。また、システムが不明な場合に使用すべき解釈が「省略時」として記されている。これにより、システム毎に異なる制約条件を有する場合であっても、制約条件マトリックス360を別々に設ける必要がなくなり、制約条件マトリックス360を動的に切り替えることが可能となる。
次に本発明の実施の形態における制約条件の具体例について説明する。図4で説明した有限状態機械モデルのシーケンスにおけるアスペクト350のVGuardメソッドおよびVEntryメソッドを利用することにより、次のような高度な制御を実現することができる。
図11は、本発明の実施の形態における制約条件の例として後優先条件を指定する場合の表示例を示す図である。この図において、ターゲット状態「A::ON」に関するアクティブ状態「B::ON」には後優先条件「●」が指定されている。この場合、オブジェクトAとBとは排他関係にあり、オブジェクトAの状態をオン状態にする際にオブジェクトBの状態がオン状態である場合には、下段に記されたイベントをオブジェクトBに送出する。この下段に記されたイベントは、オブジェクトBの状態をオフ状態にするものであり、結果として後から状態遷移をしようとするオブジェクトAが優先し、その状態がオン状態に遷移することになる。
図12は、本発明の実施の形態における制約条件の例として後優先条件が指定された場合の動作を示すシーケンス図である。なお、この図においては、簡略化のために、ユーザインターフェース310およびイベントディスパッチャ320は省略されている。また、各メソッドのパラメータも一部を除き省略されている。
オブジェクトA(331)がオフ状態で、オブジェクトB(332)がオン状態の場合に、オブジェクトA(331)をオン状態に遷移させるイベントBUTTON_ONが送出されると、オブジェクトA(331)はそのイベントをVReceive820により受信する。オブジェクトA(331)はFireメソッド821を呼び出し、ターゲット状態をオン状態としてアスペクト350のVGuardメソッド822を呼び出す。その結果、制約条件マトリックス360における制約条件に後優先条件が指定されているため、アスペクト350は制約条件を満たさない旨をオブジェクトA(331)に一旦報告する。そして、アスペクト350は後優先条件の下段に記されたイベントEVENT_OFFをオブジェクトB(332)に送出する。また、アスペクト350はイベントディスパッチャ320に問い合わせることによりオブジェクトA(331)に送出されたイベントBUTTON_ONを取得して、オブジェクトA(331)のオブジェクト識別子とともにイベントメモリ380に保持させる。
一方、オブジェクトB(332)はそのイベントをVReceive823により受信する。オブジェクトB(332)はFireメソッド824を呼び出し、ターゲット状態をオフ状態としてアスペクト350のVGuardメソッド825を呼び出す。その結果、制約条件マトリックス360における制約条件に定義されていないため、アスペクト350は制約条件を満たす旨をオブジェクトB(332)に報告する。これにより、オブジェクトB(332)はアクティブ状態をオフ状態に遷移させて、その状態遷移をアスペクト350に報告する。その際、アスペクト350のVEntryメソッド826が呼び出される。
アスペクト350は、VEntryメソッド826によりオブジェクトB(332)から状態遷移の報告を受けると、制約条件マトリックス360を参照して、後優先条件が指定されていることを知ると、イベントメモリ380に保持されていたイベントBUTTON_ONをオブジェクトA(331)に送出する。そして、アスペクト350は、イベントメモリ380からそのイベントBUTTON_ONに関する情報を削除する。オブジェクトA(331)はそのイベントBUTTON_ONをVReceive827により受信する。オブジェクトA(331)はFireメソッド828を呼び出し、ターゲット状態をオン状態として再びアスペクト350のVGuardメソッド829を呼び出す。その結果、オブジェクトB(332)がオフ状態に遷移しているため、アスペクト350は制約条件を満たす旨をオブジェクトA(331)に報告する。これにより、オブジェクトA(331)はアクティブ状態をオン状態に遷移させて、その状態遷移をアスペクト350に報告する。その際、アスペクト350のVEntryメソッド830が呼び出される。
このように、制約条件として後優先条件を指定することにより、後から状態遷移をしようとするオブジェクトを優先させることができる。
図13は、本発明の実施の形態における制約条件の例として保留条件を指定する場合の表示例を示す図である。この図において、ターゲット状態「A::ON」に関するアクティブ状態「B::ON」には保留条件「◇」が指定されている。この場合、オブジェクトAとBとは排他関係にあり、オブジェクトAの状態をオン状態にする際にオブジェクトBの状態がオン状態である場合には、下段に記されたイベントをオブジェクトBに送出し、さらにオブジェクトAがオン状態からオフ状態に戻った場合には上段に記されたイベントをオブジェクトBに送出する。
ここで、下段に記されたイベントはオブジェクトBの状態をオフ状態にするものであり、上段に記されたイベントはオブジェクトBの状態をオン状態に復帰させるものである。結果として後から状態遷移をしようとするオブジェクトAが優先し、オブジェクトBの状態が保留され、オブジェクトAの状態が戻った際にオブジェクトBの状態が復帰することになる。
本発明の実施の形態における制約条件の例として保留条件が指定された場合、最初の動作は図12の後優先条件の場合と同様になる。すなわち、オブジェクトA(331)がオフ状態で、オブジェクトB(332)がオン状態の場合に、オブジェクトA(331)をオン状態に遷移させるイベントBUTTON_ONが送出されると、オブジェクトB(332)がオフ状態に遷移し、オブジェクトA(331)がオン状態に遷移する。そして、その後、オブジェクトA(331)をオフ状態に遷移させるイベントBUTTON_OFFが送出されると、次のような動作を行う。
図14は、本発明の実施の形態における制約条件の例として保留条件が指定された場合の動作の後半を示すシーケンス図である。なお、この図においては、図12と同様に、ユーザインターフェース310およびイベントディスパッチャ320は省略されている。また、各メソッドのパラメータも一部を除き省略されている。
オブジェクトA(331)がオン状態で、オブジェクトB(332)がオフ状態の場合に、オブジェクトA(331)をオフ状態に遷移させるイベントBUTTON_OFFが送出されると、オブジェクトA(331)はそのイベントをVReceive831により受信する。オブジェクトA(331)はFireメソッド832を呼び出し、ターゲット状態をオフ状態としてアスペクト350のVGuardメソッド833を呼び出す。その結果、制約条件マトリックス360における制約条件に定義されていないため、アスペクト350は制約条件を満たす旨をオブジェクトA(331)に報告する。これにより、オブジェクトA(331)はアクティブ状態をオフ状態に遷移させて、その状態遷移をアスペクト350に報告する。その際、アスペクト350のVEntryメソッド834が呼び出される。
アスペクト350は、VEntryメソッド834によりオブジェクトA(331)から状態遷移の報告を受けると、制約条件マトリックス360を参照して、保留条件が指定されていることを知ると、その保留条件の上段に記されたイベントEVENT_OFFをオブジェクトB(332)に送出する。オブジェクトB(332)はそのイベントEVENT_OFFをVReceive835により受信する。オブジェクトB(332)はFireメソッド836を呼び出し、ターゲット状態をオン状態としてアスペクト350のVGuardメソッド837を呼び出す。その結果、制約条件マトリックス360における制約条件に定義されていないため、アスペクト350は制約条件を満たす旨をオブジェクトB(332)に報告する。これにより、オブジェクトB(332)はアクティブ状態をオン状態に遷移させて、その状態遷移をアスペクト350に報告する。その際、アスペクト350のVEntryメソッド838が呼び出される。
このように、制約条件として保留条件を指定することにより、後から状態遷移をしようとするオブジェクトを優先させ、他のオブジェクトを保留させることができる。
図15は、本発明の実施の形態における制約条件の例として予約条件を指定する場合の表示例を示す図である。この図において、ターゲット状態「A::ON」に関するアクティブ状態「B::ON」には予約条件「☆」が指定されている。この場合、オブジェクトAとBとは排他関係にあり、オブジェクトAの状態をオン状態にする際にオブジェクトBの状態がオン状態である場合には、オブジェクトBの状態がオフ状態に遷移するまでオブジェクトAの状態遷移が行われず、オブジェクトBの状態がオン状態から離れてオフ状態に遷移した後でオブジェクトAの状態がオン状態に遷移する。
図16は、本発明の実施の形態における制約条件の例として予約条件が指定された場合の動作を示すシーケンス図である。なお、この図においては、図12と同様に、ユーザインターフェース310およびイベントディスパッチャ320は省略されている。また、各メソッドのパラメータも一部を除き省略されている。
オブジェクトA(331)がオフ状態で、オブジェクトB(332)がオン状態の場合に、オブジェクトA(331)をオン状態に遷移させるイベントBUTTON_ONが送出されると、オブジェクトA(331)はそのイベントをVReceive840により受信する。オブジェクトA(331)はFireメソッド841を呼び出し、ターゲット状態をオン状態としてアスペクト350のVGuardメソッド842を呼び出す。その結果、制約条件マトリックス360における制約条件に予約条件が指定されているため、アスペクト350は制約条件を満たさない旨をオブジェクトA(331)に一旦報告する。そして、アスペクト350はイベントディスパッチャ320に問い合わせることによりオブジェクトA(331)に送出されたイベントBUTTON_ONを取得して、オブジェクトA(331)のオブジェクト識別子とともにイベントメモリ380に保持させる。
その後、オブジェクトB(332)をオフ状態に遷移させるイベントBUTTON_OFFが送出されると、オブジェクトB(332)はそのイベントをVReceive843により受信する。オブジェクトB(332)はFireメソッド844を呼び出し、ターゲット状態をオフ状態としてアスペクト350のVGuardメソッド845を呼び出す。その結果、制約条件マトリックス360における制約条件に定義されていないため、アスペクト350は制約条件を満たす旨をオブジェクトB(332)に報告する。これにより、オブジェクトB(332)はアクティブ状態をオフ状態に遷移させて、その状態遷移をアスペクト350に報告する。その際、アスペクト350のVEntryメソッド846が呼び出される。
アスペクト350は、VEntryメソッド846によりオブジェクトB(332)から状態遷移の報告を受けると、制約条件マトリックス360を参照して、予約条件が指定されていることを知ると、イベントメモリ380に保持されていたイベントBUTTON_ONをオブジェクトA(331)に送出する。そして、アスペクト350は、イベントメモリ380からそのイベントBUTTON_ONに関する情報を削除する。オブジェクトA(331)はそのイベントBUTTON_ONをVReceive847により受信する。オブジェクトA(331)はFireメソッド848を呼び出し、ターゲット状態をオン状態として再びアスペクト350のVGuardメソッド849を呼び出す。その結果、オブジェクトB(332)がオフ状態に遷移しているため、アスペクト350は制約条件を満たす旨をオブジェクトA(331)に報告する。これにより、オブジェクトA(331)はアクティブ状態をオン状態に遷移させて、その状態遷移をアスペクト350に報告する。その際、アスペクト350のVEntryメソッド850が呼び出される。
このように、制約条件として予約条件を指定することにより、他方のオブジェクトの状態遷移を待って状態遷移を行うことができる。
図17は、本発明の実施の形態における制約条件の例として同期条件を指定する場合の表示例を示す図である。この図において、ターゲット状態「A::ON」に関するアクティブ状態「B::ON」には同期条件「←」が指定されている。この場合、オブジェクトAとBとは厳密な排他関係にあるわけではなく、オブジェクトAの状態遷移は行われる。但し、オブジェクトAの状態遷移が完了すると、下段に記されたイベントがオブジェクトBに送出される。この下段に記されたイベントは、オブジェクトBの状態をオフ状態にするものであり、結果としてオブジェクトAの状態遷移が発生すると、オブジェクトBの状態遷移が促されることになる。これは、アプリケーションプログラム間で同期をとる際に用いることができる。
図18は、本発明の実施の形態における制約条件の例として同期条件が指定された場合の動作を示すシーケンス図である。なお、この図においては、図12と同様に、ユーザインターフェース310およびイベントディスパッチャ320は省略されている。また、各メソッドのパラメータも一部を除き省略されている。
オブジェクトA(331)がオフ状態で、オブジェクトB(332)がオン状態の場合に、オブジェクトA(331)をオン状態に遷移させるイベントBUTTON_ONが送出されると、オブジェクトA(331)はそのイベントをVReceive860により受信する。オブジェクトA(331)はFireメソッド861を呼び出し、ターゲット状態をオン状態としてアスペクト350のVGuardメソッド842を呼び出す。その結果、制約条件マトリックス360における制約条件に同期条件が指定されているため、アスペクト350は制約条件を満たす旨をオブジェクトA(331)に報告する。これにより、オブジェクトA(331)はアクティブ状態をオン状態に遷移させて、その状態遷移をアスペクト350に報告する。その際、アスペクト350のVEntryメソッド863が呼び出される。
アスペクト350は、VEntryメソッド863によりオブジェクトA(331)から状態遷移の報告を受けると、制約条件マトリックス360を参照して、同期条件が指定されていることを知ると、その同期条件の下段に記されたイベントEVENT_OFFをオブジェクトB(332)に送出する。オブジェクトB(332)はそのイベントEVENT_OFFをVReceive864により受信する。オブジェクトB(332)はFireメソッド865を呼び出し、ターゲット状態をオフ状態としてアスペクト350のVGuardメソッド866を呼び出す。その結果、制約条件マトリックス360における制約条件に定義されていないため、アスペクト350は制約条件を満たす旨をオブジェクトB(332)に報告する。これにより、オブジェクトB(332)はアクティブ状態をオフ状態に遷移させて、その状態遷移をアスペクト350に報告する。その際、アスペクト350のVEntryメソッド867が呼び出される。
このように、制約条件として同期条件を指定することにより、オブジェクトの状態遷移が完了した際に他のオブジェクトに所定のイベントを送出して、同期を実現することができる。
ここで説明した本発明の実施の形態は、複数のアプリケーションプログラム間でハードウェア資源を使用するシステムに広く適用可能である。上述のように、ハードウェア資源は、アプリケーションプログラム間で制約関係を生じさせるものであり、例えばビデオカードのように物理的に独立した物であってもよく、また、ハードウェアやソフトウェアにより実現される所定の機能であってもよい。ここでは、一例として、映像記録装置への適用例を説明する。
図19は、本発明の実施の形態の適用例としての映像記録装置100の構成を示す図である。この映像記録装置100は、カメラ部10と、記録再生処理部20と、制御部30とを備えている。
カメラ部10は、光学ブロック11と、カメラ制御部12と、信号変換器13と、撮像信号処理部14と、音声入力部15と、音声信号処理部16とを備える。光学ブロック11は、内部に、被写体を撮像するためのレンズ群、絞り調整機構、フォーカス調整機構、ズーム機構、シャッター機構、フラッシュ機構、および、手ぶれ補正機構などを備える。カメラ制御部12は、制御部30から制御信号を受けて、光学ブロック11に供給する制御信号を生成する。そして、生成した制御信号を光学ブロック11に供給して、ズーム制御、シャッター制御、および、露出制御などの制御を行なう。
信号変換器13は、例えばCCD(Charge Coupled Device)などの撮像素子により構成され、その結像面に、光学ブロック11を通じた像が結像される。この信号変換器13は、シャッター操作に応じて制御部30から供給される画像取り込みタイミング信号を受けて、結像面に結像されている被写体像を撮像信号に変換し、撮像信号処理部14に供給する。
撮像信号処理部14は、制御部30からの制御信号に基づいて、撮像信号についてのガンマ補正やAGC(Auto Gain Control)などの処理を行なうとともに、撮像信号をデジタル信号としての画像信号に変換する処理も行なう。音声入力部15は、撮影時の被写体周辺の音声を収集する。この音声入力部15からの音声信号は音声信号処理部16に供給される。音声信号処理部16は、制御部30からの制御信号に基づいて、音声信号についての補正やAGCなどの処理を行なうとともに、音声信号をデジタル信号に変換する処理も行なう。
記録再生処理部20は、符号化/復号回路21と、ディスクインターフェース23と、出力処理部24と、バッファメモリ25とを備える。
符号化/復号回路21は、カメラ部10からの画像信号および音声信号や追加記録情報を符号化し多重化して圧縮データに変換する符号化機能を有する。一方、符号化/復号回路21は、圧縮データから画像信号および音声信号や追加記録情報を分離して復号する復号機能を有する。また、符号化/復号回路21は、制御部30からの制御信号に基づき、撮像信号処理部14からの画像信号に対して、自動ホワイトバランス制御、露出補正制御、デジタルズーム倍率に応じた拡大制御などをさらに行なう。
ディスクインターフェース23は、符号化/復号回路21から圧縮データを受けてディスク49に書き込む。また、ディスクインターフェース23は、ディスク49から圧縮データを読み出して符号化/復号回路21に供給する。出力処理部24は、制御部30からの制御により、符号化/復号回路21からの圧縮データを制御部30や出力端子27乃至29に供給する。バッファメモリ25は、例えばSDRAMなどにより構成され、符号化/復号回路21における符号化または復号のための作業領域として利用される。
制御部30は、処理装置31と、ROM(Read Only Memory)33と、RAM(Random Access Memory)34と、操作入力部41を接続するための操作入力インターフェース35と、表示部42を接続するための表示制御部36と、メモリカード43を装填するためのメモリカードインターフェース37と、手ぶれ補正のために角速度を検出する角速度検出器38と、撮影時刻を記録するための時計回路39とがシステムバス32を介して接続されることにより構成される。
処理装置31は制御部30全体の処理を司るものであり、作業領域としてRAM34を使用する。ROM33には、カメラ部10を制御するためのプログラムや、画像信号や音声信号の記録制御および再生制御などを実行するためのプログラムが書き込まれている。
操作入力インターフェース35に接続される操作入力部41には、撮影モードと再生モードなどの他のモードとを切り換えるモード切り換えキー、ズーム調整キー、露出調整のためのキー、シャッターキー、動画撮影用キー、表示部42における表示調整キーなどの複数のキーが設けられている。操作入力インターフェース35は、操作入力部41からの操作信号を処理装置31に伝える。処理装置31は、操作入力部41においていずれのキーが操作されたかを判別し、その判別結果に応じた制御処理を行なう。
表示制御部36に接続される表示部42は、例えばLCD(Liquid Crystal Display)などにより構成され、処理装置31の制御の下に、カメラ部10からの画像信号や、ディスク49から読み出された画像信号を表示する。
メモリカードインターフェース37は、符号化/復号回路21からの圧縮データをメモリカード43に書き込む。また、メモリカードインターフェース37は、メモリカード43から圧縮データを読み出して符号化/復号回路21に供給する。時計回路39は、年、月、日、時間、分、秒などを表わす時間情報を生成する。
角速度検出器38は、映像記録装置100に対して外部から加わる角速度を検出するジャイロスコープである。この角速度検出器38からの角速度情報は、所定間隔毎に処理装置31に報告されて、手ぶれ補正に利用される。
このような映像記録装置100において、各部の制御は処理装置31上で動作するアプリケーションプログラムにより行われる。また、映像記録装置100は、一部の機能を変えていくつかのモデルが用意されるのが通例である。例えば、信号変換器13のCCDのサイズや表示部42のLCDのサイズを選択できるようにしたり、露出補正制御の機能に差異を設けるようにすることがある。このように異なる機能を有するモデルについて、モデル毎に別々にアプリケーションプログラムを開発するのは効率が良くない。一方、アプリケーションプログラムを共通化しようとすると、各機能を実現するアプリケーションプログラム間の制約関係を調整するためにプログラムの構造が複雑になるという問題がある。本発明の実施の形態によれば、制約関係に起因する状態遷移の際の制約条件を制約条件マトリックス360に保持し、アプリケーションプログラム群330から独立したアスペクト350により制約条件を管理することにより、異なるモデル間でアプリケーションプログラムを容易に流用することができる。
映像記録装置100における具体例として、例えば、静止画機能を有効にしてしまうと手振れ補正機能を有効にできなくなる場合がある。記録画素数を所定数以上に高く設定してしまうと、補正のための余裕がなくなってしまい手振れ補正が行えなくなるからである。但し、モデルによっては記録画素数を抑えることにより両者を同時に有効にすることも可能である。このように、静止画機能と手振れ補正機能との間で、モデル(システム)によって排他関係を生じる場合と生じない場合が存在する。このような場合、本発明の実施の形態のように制約条件マトリックス360のみを変更することによりアプリケーションプログラムを別個に開発する必要はなくなる。また、この場合、図10により説明したように、マクロテーブル369を利用することも可能である。
また、映像記録装置100における他の具体例として、例えば、明るさ調整の制御について、シャッタースピードを切り替えながら明るさを調整するプログラムAE(programmed automatic exposure)機能と、夜間に明るさを一定にする夜間用機能は、共に明るさ調整を制御するものであるため同時に有効にすることができない。この場合、プログラムAEモードの状態から夜間用モードに遷移した後、その夜間用モードが解除されたときには、再びプログラムAEモードに遷移させる方法や、プログラムAEモードに遷移させずに明るさ調整に関連するモードを全て解除させる方法などが考えられる。また、プログラムAEモードの状態から夜間用モードへの遷移を一切許さないという方法もある。何れの方法を採用するかは製品の性質などにより随意に決定されるべきものである。本発明の実施の形態によれば、制約条件マトリックス360の設定を変更することにより、複雑な制御についても柔軟に対応することができる。
このように、本発明の実施の形態によれば、制約関係に起因する状態遷移の際の制約条件を制約条件マトリックス360に保持し、アプリケーションプログラム群330から独立したアスペクト350により制約条件を管理することにより、複数のアプリケーションプログラムを組み合わせたシステムの構築が容易になり、また、既存のシステムに新たなアプリケーションプログラムを追加実装することが容易になる。
なお、本発明の実施の形態は本発明を具現化するための一例を示したものであり、以下に示すように特許請求の範囲における発明特定事項とそれぞれ対応関係を有するが、これに限定されるものではなく本発明の要旨を逸脱しない範囲において種々の変形を施すことができる。
すなわち、請求項1において、複数のプログラムは例えばアプリケーションプログラム群330に対応する。また、イベント送出手段は例えばイベントディスパッチャ320に対応する。また、制約条件保持手段は例えば制約条件マトリックスに対応する。また、状態制御手段は例えばアスペクト350に対応する。また、プログラムの内部状態は例えば有限状態機械のオブジェクトに対応する。
また、請求項3において、制約条件に応じて所定のイベントを他のプログラムに送出する点は例えばアスペクト350におけるVEntryメソッドの動作に対応する。
また、請求項4において、システムの関数は例えばマクロ記述に対応する。
また、請求項6において、イベントメモリは例えばイベントメモリ380に対応する。
また、請求項10において、複数のプログラムの何れかに対して内部状態を遷移させるイベントが送出されると当該プログラムにおける制約条件を満たすか否かを当該プログラムから状態制御手段に問い合せる手順は例えばステップS937に対応する。また、制約条件を満たすか否かを状態制御手段が判断する手順は例えばアスペクト350におけるVGuardメソッドに対応する。また、状態制御手段が判断の結果をプログラムに報告するとともに制約条件に応じて所定のイベントを他のプログラムに送出する手順は例えばアスペクト350におけるVGuardメソッドおよびVEntryメソッドの動作に対応する。また、制約条件を満たす場合にはプログラムがその内部状態を遷移させるとともに状態制御手段にその遷移が行われた旨を報告する手順は例えばステップS941に対応する。
また、請求項11において、複数のアプリケーションプログラムの何れかに対して内部状態を遷移させるイベントが送出されると当該アプリケーションプログラムにおける制約条件を満たすか否かを当該アプリケーションプログラムが状態制御プログラムに問い合わせる手順は例えばステップS937に対応する。また、制約条件を満たすか否かを状態制御プログラムが判断する手順は例えばアスペクト350におけるVGuardメソッドに対応する。また、状態制御プログラムが前記判断の結果を前記アプリケーションプログラムに報告するとともに前記制約条件に応じて所定のイベントを前記他のアプリケーションプログラムに送出する手順は例えばアスペクト350におけるVGuardメソッドおよびVEntryメソッドの動作に対応する。また、制約条件を満たす場合にはアプリケーションプログラムがその内部状態を遷移させるとともに状態制御プログラムにその遷移が行われた旨を報告する手順は例えばステップS941に対応する。
なお、本発明の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよく、また、これら一連の手順をコンピュータに実行させるためのプログラム乃至そのプログラムを記憶する記録媒体として捉えてもよい。