(57)【要約】【課題】  メモリの使用量が低減できるステートマシンによる状態管理の仕組みが求められている。【解決手段】  そこで本発明は、複数の状態が定義されるセグメントを複数接続することで表現される状態遷移表を利用するステートマシンが実行する方法であって、前記状態遷移表に含まれる一部のセグメントの定義を取得し、該取得されたセグメントの定義に従い作成されたセグメントをメモリに記憶し、該記憶されたセグメントにおける最後の状態への遷移に応じて、前記メモリから該セグメントを削除した上で、次に実行すべきセグメントの定義を取得してそのセグメントを作成することを特徴とする。【選択図】  図３
2018014037.tif 000002
【特許請求の範囲】
【請求項１】
複数の状態と、各状態のアクティビティと、各状態からの遷移条件と、各状態からの遷移先とが定義されるセグメントを複数接続することで表現される状態遷移表を利用する情報処理装置における制御方法であって、
前記状態遷移表に含まれる一部のセグメントの定義と、セグメントの接続情報とを取得する工程と、
前記取得されたセグメントの接続情報を情報処理装置のメモリに記憶する工程と、
前記取得されたセグメントの定義に従い、セグメントを作成する工程と、
前記作成されたセグメントを前記メモリに記憶する工程と、
前記メモリに記憶されたセグメントの各状態について、アクティビティ、遷移条件及び遷移先に従う状態遷移を実行する工程と、
前記メモリに記憶されたセグメントにおける最後の状態への遷移に応じて、前記メモリから該セグメントを削除する工程と、
前記最後の状態への遷移に応じて、前記セグメントの接続情報を参照し、前記メモリに記憶されていたセグメントの次に実行すべきセグメントが特定された場合に、当該次に実行すべきセグメントの定義を取得する工程と、
前記次に実行すべきセグメントの定義に従い、セグメントを作成する工程と、を有することを特徴とする制御方法。
【請求項２】
前記セグメントの接続情報を参照し、前記メモリに記憶されていたセグメントの次に実行すべきセグメントが特定できなかった場合には、前記メモリから前記セグメントの接続情報を削除する工程をさらに有することを特徴とする請求項１に記載の制御方法。
【請求項３】
前記セグメントの定義を取得する際には、該セグメントに対応する指定時間も取得され、
前記指定時間に従い、前記取得されたセグメントの定義に従い作成され前記メモリに記憶されたセグメントの次に実行すべきセグメントの定義の取得のタイミングが制御されることを特徴とする請求項１または２に記載の制御方法。
【請求項４】
前記メモリに記憶されたセグメントにおける最初の状態に到達したタイミングから、該セグメントにおける処理時間のカウントを開始する工程と、
前記カウントされた処理時間が前記指定時間を超過した場合に、前記メモリに記憶されたセグメントにおいて最後の状態への遷移を実行し、前記メモリから該セグメントを削除する工程と、をさらに有することを特徴とする請求項３に記載の制御方法。
【請求項５】
前記メモリに記憶されたセグメントにおける最初の状態に到達したタイミングから、該セグメントにおける処理時間のカウントを開始する工程を、さらに有し、
前記メモリに記憶されたセグメントにおける最後の状態への遷移に応じて前記メモリから該セグメントを削除された後に、前記カウントされた処理時間が前記指定時間を超過したことに応じて、前記セグメントの接続情報を参照し、前記メモリに記憶されていたセグメントの次に実行すべきセグメントが特定された場合に、当該次に実行すべきセグメントの定義が取得されることを特徴とする請求項３に記載の制御方法。
【請求項６】
複数の状態と、各状態のアクティビティと、各状態からの遷移条件と、各状態からの遷移先とが定義されるセグメントを複数接続することで表現される状態遷移表で状態を管理するステートマシンが動作する情報処理装置であって、
前記状態遷移表に含まれる一部のセグメントの定義と、セグメントの接続情報とを取得する手段と、
前記取得されたセグメントの接続情報を情報処理装置のメモリに記憶する手段と、
前記取得されたセグメントの定義に従い、セグメントを作成する手段と、
前記作成されたセグメントを前記メモリに記憶する手段と、
前記メモリに記憶されたセグメントの各状態について、アクティビティ、遷移条件及び遷移先に従う状態遷移を実行する手段と、
前記メモリに記憶されたセグメントにおける最後の状態への遷移に応じて、前記メモリから該セグメントを削除する手段と、
前記最後の状態への遷移に応じて、前記セグメントの接続情報を参照し、前記メモリに記憶されていたセグメントの次に実行すべきセグメントが特定された場合に、当該次に実行すべきセグメントの定義を取得する手段と、
前記次に実行すべきセグメントの定義に従い、セグメントを作成する手段と、を前記ステートマシンの機能として有することを特徴とする情報処理装置。
【請求項７】
請求項１乃至５のいずれか１項に記載の各工程をコンピューターに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ステートマシンに従う制御方法などに関する。
【背景技術】
【０００２】
イベント駆動型プログラミングやオブジェクト指向プログラミングでよく用いられる仕組みとしてステートマシンがある。ステートマシンはイベントに応じてオブジェクトやシステムの状態を遷移させる仕組みであり、それらの一連の状態遷移を実行する。状態遷移は各種イベントや状態の組み合わせとして記述された状態遷移表に基づいて実行される。
【０００３】
大規模なシステムやメモリ制約のある環境で動作するシステムでは、システムが使用するメモリ量を削減し、稼働中にメモリ不足に陥らないよう注意を払う必要がある。システムのメモリ使用量を削減するためには、ステートマシンの各状態に関する情報を保持するのに必要なメモリ量を削減することも検討する必要がある。
【０００４】
例えば、特許文献１では、状態数を少なくすることで有限状態オートマトンを記憶するためのメモリ使用量を削減する手法が開示されている。この従来技術では有限状態オートマトンから部分的に等価な箇所を抽出し、それらをまとめて記述することで状態数の総和を最小化している。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００２−２９７６８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来技術は、状態遷移表の中から部分的に等価な箇所を抽出することで状態の数を削減している。しかしステートマシンを持つ一般的なシステムで、状態遷移表の中に等価な部分があることは稀である。そこで、従来技術では削減することができない、部分的に等価な箇所がない状態遷移表についてもメモリの使用量が低減できるような仕組みが求められている。
【課題を解決するための手段】
【０００７】
そこで本発明は、複数の状態と、各状態のアクティビティと、各状態からの遷移条件と、各状態からの遷移先とが定義されるセグメントを複数接続することで表現される状態遷移表を利用する情報処理装置における制御方法であって、
前記状態遷移表に含まれる一部のセグメントの定義と、セグメントの接続情報とを取得する工程と、前記取得されたセグメントの接続情報を情報処理装置のメモリに記憶する工程と、前記取得されたセグメントの定義に従い、セグメントを作成する工程と、前記作成されたセグメントを前記メモリに記憶する工程と、前記メモリに記憶されたセグメントの各状態について、アクティビティ、遷移条件及び遷移先に従う状態遷移を実行する工程と、前記メモリに記憶されたセグメントにおける最後の状態への遷移に応じて、前記メモリから該セグメントを削除する工程と、前記最後の状態への遷移に応じて、前記セグメントの接続情報を参照し、前記メモリに記憶されていたセグメントの次に実行すべきセグメントが特定された場合に、当該次に実行すべきセグメントの定義を取得する工程と、前記次に実行すべきセグメントの定義に従い、セグメントを作成する工程と、を有することを特徴とする。
【発明の効果】
【０００８】
本発明よれば、ステートマシンの状態遷移表と各状態に関する情報を保持するメモリの稼働中の使用量を低減することができる。
【図面の簡単な説明】
【０００９】
【図１】情報処理装置のハードウエアの構成例を示す図。
【図２】状態遷移図の例を示す図。
【図３】ステートマシンでの処理の概要を説明するためのフローチャート。
【図４】実施例１のステートマシンの機能構成の例を示すブロック図。
【図５】ステートマシンを利用する情報処理システムの機能構成例などを表す模式図。
【図６】セグメントと、セグメント接続表の例を示す模式図。
【図７】実施例１のステートマシンの処理を説明するためのフローチャート。
【図８】実施例１のステートマシンのセグメントに関する処理を説明するためのフローチャート。
【図９】実施例２のステートマシンでの処理の概要を説明するためのフローチャート。
【図１０】実施例２のステートマシンの機能構成の例を示すブロック図。
【図１１】実施例２のステートマシンのセグメントに関する処理を説明するためのフローチャート。
【発明を実施するための形態】
【００１０】
以下、ステートマシンは、状態遷移表に記述された内容に基づいて状態遷移を実行する仕組みであるとする。ステートマシンは、ステートマシンを利用する情報処理システムから状態遷移表の定義を与えられ、その定義に基づいて作成した状態遷移表をもとに、情報処理システムの状態を遷移させる役割を担う。状態遷移表には、情報処理システムの現在の状態、状態遷移のトリガーとなるイベント、遷移先の状態、遷移先の状態で実行する処理（以下、アクティビティと呼ぶ）など、状態遷移を実行するために必要な情報が記述されている。
【００１１】
本発明であるステートマシンは、コンピュータプログラムで実現することができ、パーソナルコンピュータ、タブレット端末、スマートフォンなどの情報処理装置で動作する情報処理システムに利用される。
【００１２】
図１は、情報処理装置のハードウエアの構成例を示す図である。
【００１３】
情報処理装置において、情報処理システムはコンピュータプログラムとしてＨＤＤ（１００２）あるいはＲＯＭ（１００３）に格納されている。ＣＰＵ（１００５）がＯＳ（オペレーティングシステム）とコンピュータプログラムをＨＤＤ（１００２）あるいはＲＯＭ（１００３）から読み出してＲＡＭ（１００４）にロードし実行する。処理結果はファイルとしてＨＤＤ（１００２）に格納、あるいはデータとしてＲＡＭ（１００４）に記憶することができる。情報処理システムは必要に応じて入力装置（１００７）からユーザーの入力、各種センサの読み取り値を取得できる。また出力装置（１００６）に対しては情報を出力し、処理結果を表示することが可能である。これらのハードウエアはバス（１００１）で互いに接続されていている。
【００１４】
本発明は、情報処理システムが持つステートマシンの実行時（システム稼働中）のメモリ使用量を低減することを目的とする。以下「メモリ」とはＲＡＭ（１００４）のことを意味する。
【００１５】
図２は、状態遷移表を説明するための図である。
【００１６】
図２（ａ）は、ステートマシンを持つ情報処理システムにおける、全体の一連の処理フローが記述された状態遷移表の例を示す。図中の円形のノードは状態を示し、矢印は状態遷移の方向を示す。一方で、図２（ｂ）は、本発明で利用する状態遷移表の例を示す。情報処理システムが稼動している間、この状態遷移表と各状態に関する情報はメモリに展開され、展開先のメモリ領域を占有する。
【００１７】
図２（ａ）で示す状態遷移表に記述された状態の中には、特定の状態への遷移以降、自身に遷移することがないと判断できるものが存在する。このような状態は、特定の状態に遷移した直後にメモリから削除しても、情報処理システムの動作に影響を与えることはないと考えられる。例えば、図２（ａ）では、状態１に遷移すると、状態１より前の状態と、状態２以降の状態に遷移することがない。
【００１８】
また、図２（ａ）で示す状態遷移表に記述された状態の中には、特定の状態に遷移するまで自身に遷移することがない状態も存在する。このような状態に関する情報は特定の状態に遷移するまでメモリに展開しておかなくてもよい。図２（ａ）の例では、状態１の後ろに続く状態３には、状態１以外の状態から状態遷移することがない。そのため、状態３以降の状態に関する情報は、状態１に到達するまでメモリに展開しなくてもよい。
【００１９】
そこで、本発明では、図２（ｂ）で示すように状態遷移表を複数の状態遷移表に分割した上で、必要に応じてメモリに展開する仕組みを実現する。
【００２０】
図２（ｂ）は、図２（ａ）の状態遷移表を、本発明を適用するために、複数の状態遷移表に分割したものを表したものである。分割された一つひとつの状態遷移表をセグメントと呼ぶ。図２（ｂ）は、図２（ａ）で示す状態遷移表を、Ａ〜Ｅの５つのセグメントに分割した様子を表している。
【００２１】
なお、一般的な情報処理システムでは、図２に示すように大規模な状態遷移表をセグメントに分割することが可能であり、各セグメントを定義する役割は情報処理システムの状態遷移表を定義する開発者に委ねられることになる。
【００２２】
セグメントには、次のような特徴がある。セグメントは、「ソース」と「シンク」と呼ばれる特別な状態を持つ。
【００２３】
「ソース」とは、他のセグメントから遷移することのできる状態で、各セグメントに一つだけ存在する。「シンク」とは、他のセグメントのソースに遷移することができるが、セグメント内の他の状態に遷移することのない状態のことを差す。ひとつのシンクから遷移可能な他のセグメントは一つだけだが、セグメントは複数のシンクを持つことができる。シンク以外の状態は、セグメント内の状態への遷移のみ可能である。
【００２４】
本発明におけるステートマシンは、１つ以上のセグメントを、情報処理システムで定義された順に一つずつ実行していく。本発明は各セグメントを実行直前に作成してメモリに展開し、情報処理システムの状態をソースに遷移させる。
【００２５】
各セグメントにおける状態遷移でシンクに到達したら、該シンクを持つセグメントについてメモリから解放する。該シンクから他セグメントのソースに遷移する予定がある場合は、次のセグメントを作成してメモリに展開し、情報処理システムの状態を、該シンクから、次にメモリに展開されたセグメントのソースの状態に遷移させる。
【００２６】
図２（ｂ）の例では、ステートマシンは、まずセグメントＡを作成してメモリに展開し、セグメントＡのソースから状態遷移を実行する。セグメントＡはシンクを２つ持つが、ステートマシンはどちらかのシンクに到達した時点でセグメントＡをメモリから削除する。ステートマシンは、セグメントＡのシンク１に到達した場合、セグメントＢを作成してセグメントＢのソースに遷移する。セグメントＡのシンク２に到達した場合は、セグメントＣを作成し、セグメントＣのソースに遷移する。同様に、セグメントＢのシンクに到達したときは、メモリからセグメントＢを削除し、セグメントＤを作成して実行する。セグメントＣのシンクに到達したときは、メモリからセグメントＣを削除し、セグメントＥを作成して実行する。
【００２７】
このように、本発明はセグメントの作成・セグメント内での状態遷移・セグメントの削除を繰り返すことで、１つ以上のセグメントを接続しながら順番に実行する。情報処理システムの一連の状態遷移表をセグメントに分割し、実行すべきセグメント（のデータ）のみをメモリに展開することで、情報処理システムの稼働中のメモリの使用量を低減することが可能となる。
【００２８】
特に、図２（ｂ）に示す例では、セグメントＡからセグメントＢに遷移した場合、セグメントＣとＥを作成する必要がない分、効果的にメモリを低減することが可能である。
【００２９】
図３は、本発明に係る情報処理装置上で実行される情報処理システムが利用するステートマシンでの処理の概要を説明するためのフローチャートを示す。
【００３０】
ステートマシンは、情報処理システムから、セグメントの定義と他のセグメントとの接続情報を受け取る。セグメントの接続情報には、あるセグメント実行後に実行すべきセグメントのために必要な情報が含まれる。例えば複数のセグメントの接続順を指定する情報や、次に実行すべきセグメントの定義を取得するための情報などが含まれる。
【００３１】
Ｓ１０１で、ステートマシンは、セグメントの定義とセグメントの接続情報に基づいてセグメントを１つ作成し、作成したセグメントとセグメントの接続情報をメモリに記憶（展開）する。続いて、Ｓ１０２で、ステートマシンは、セグメントに基づき、イベント発生などに応じた状態遷移を実行する。
【００３２】
Ｓ１０３で、ステートマシンは、状態遷移により、シンクに到達したかを判定する。シンクに到達していない場合は、Ｓ１０２に戻りセグメント内での状態遷移が継続される。Ｓ１０３で、シンクに到達したと判定された場合にはＳ１０４に処理を進める。
【００３３】
Ｓ１０４で、ステートマシンは、現在メモリに展開されているシンクに到達したセグメントのデータをメモリから削除する。Ｓ１０５で、ステートマシンはセグメントの接続情報を参照し、他のセグメントへの接続予定の有無を確認する。ここで他のセグメントへの接続予定がない、つまり現在実行中のセグメントが最後に実行するセグメントである場合に本処理が終了する。Ｓ１０５で他のセグメントへの接続予定がある場合、Ｓ１０６で、ステートマシンは、情報処理システムから接続先のセグメントの定義を取得し、それをもとにセグメントを作成し、作成したセグメントのデータをメモリに記憶する。その後、Ｓ１０２で新たに作成されたセグメントに基づく状態遷移が実行されることになる。
【００３４】
なお、セグメントを削除する処理（Ｓ１０４）は、他のセグメントへの接続予定の有無を確認する処理（Ｓ１０５）の後に実行してもかまわない。その場合は、他のセグメントへの接続予定の有無を確認する処理（Ｓ１０５）の結果に関わらずセグメントを削除することになる。
【００３５】
［実施例１］
図４は、本実施形態のステートマシン（１００）の構成を示す。
【００３６】
ステートマシン（１００）は少なくとも遷移表作成部（１１０）、遷移表格納部（１２０）、遷移実行部（１３０）から成る。
【００３７】
遷移表作成部（１１０）は、ステートマシン（１００）を利用する情報処理システムからセグメントの定義を受け取り、それをもとにセグメントを作成する。セグメントの定義には、セグメントの名前、情報処理システムの現在の状態、状態遷移のトリガーとなるイベント（遷移条件に合致するイベント）、遷移先の状態、そして遷移先で実行するアクティビティなどセグメントを作成するために必要な情報が記されている。遷移表格納部（１２０）は、遷移表作成部（１１０）で作成されたセグメントなど遷移に関する情報をメモリに展開（記憶）する。遷移実行部（１３０）は、遷移表格納部（１２０）によりメモリに展開されたセグメントと、現在の状態、発生したイベントから、遷移先の状態とその状態で実行するアクティビティを特定する。遷移実行部（１３０）は、現在の状態を遷移先の状態に変化させ、遷移先の状態のアクティビティを実行することで状態遷移を実現する。
【００３８】
図５は、情報処理装置における情報処理システム（２００）の構成例などを示す模式図である。
【００３９】
情報処理システム（２００）は、ステートマシン（１００）、遷移表管理部（２４０）といった機能モジュールで構成される。遷移表管理部（２４０）は、ＨＤＤ（１００２）などの記憶装置上でセグメント接続表（２１０）、各セグメントの定義（２２０、２３０）を管理し、ステートマシン（１００）に提供する機能を実現する。セグメントの定義（２２０、２３０）は、図２（ｂ）で例示したようなそれぞれ異なるセグメントを定義したものである。セグメント接続表（２１０）は、セグメントの定義（２２０、２３０）を基に作成されるセグメントの、実行順などセグメント間の接続情報を定義したものである。
【００４０】
情報処理システム（２００）は、セグメント接続表（２１０）とセグメントの定義（２２０、２３０）をステートマシン（１００）に渡すことで、ステートマシン（１００）に状態遷移の実行を依頼する。
【００４１】
図６で、セグメント（２０００）とセグメント接続表（２１０）の具体例を説明する。
【００４２】
セグメント（２０００）は、状態遷移表であり、状態遷移を実行するために必要な情報が記載されている。図６（ａ）の例では、セグメント（２０００）には「現在の状態」と「遷移情報」が記載されている。遷移情報には、遷移のトリガーとなる「イベント」、「遷移先の状態」、遷移先の状態で実行する処理が記述された「遷移先アクティビティ」が含まれる。「現在の状態」に関するこれらの情報はセグメント（２０００）が取り得る状態の数だけ存在する。また、各「現在の状態」に対する「遷移情報」は一つ以上存在する。
【００４３】
図６（ｂ）のセグメント接続表（２１０）は、セグメント同士を接続するための情報が記載されている。セグメント接続表（２１０）は、図２（ｂ）の状態遷移図に対応した内容を示す。セグメント接続表（２１０）には、現在のセグメントの名前、現在のセグメントのシンク、接続先のセグメントＩＤが格納されている。
【００４４】
現在のセグメントの名前は、セグメントを一意に特定できる情報である。セグメントのシンクは、現在のセグメントに存在するシンクを示す。接続先のセグメントＩＤは、接続先のセグメントの定義を一意に識別できる識別情報である。例えば、接続先のセグメントＩＤとしては、セグメントの定義の格納場所など、セグメントの定義を特定できて且つ軽量な情報が良い。
【００４５】
図６（ｂ）では、セグメントＡが先頭のセグメントを示し、現在のセグメントの名前をデフォルトの値（図中「ｄｅｆａｕｌｔ」）とし、そのときの接続先のセグメントとして指定する。セグメントＡは、シンクを２つ持ち、それぞれ異なるセグメントに遷移する。図６（ｂ）では、現在のセグメントの名前が「Ａ」、つまりセグメントＡ、であり、かつシンクが「ＳＴ＿ｓｉｎｋ１」のときは、次にセグメントＢへ遷移し、セグメントＡの「ＳＴ＿ｓｉｎｋ２」からはセグメントＣに遷移することが指定されている。
【００４６】
図７、８で示すフローチャートを用いて、本実施例におけるステートマシン（１００）が実行する処理の詳細を説明する。
【００４７】
図７のフローチャートは、ステートマシン（１００）における処理全体を示す。
【００４８】
Ｓ２０１で、ステートマシン（１００）の遷移表格納部（１２０）は、情報処理システム（２００）からセグメント接続表（２１０）を受け取り、メモリに記憶（展開）する。Ｓ２０２で、遷移実行部（１３０）は、セグメント接続表（２１０）を参照し、次に実行するセグメントを特定する。本実施例では図６（ｂ）のセグメント接続表（２１０）より、最初に実行するのはセグメントＡであることがわかる。Ｓ２０３で、遷移実行部（１３０）が次に実行するセグメントを特定した場合には、Ｓ３００のセグメントに関する処理に進む。この処理の詳細については、図８を用いて後述する。
【００４９】
Ｓ３００でのセグメントに関する処理を終えると、Ｓ２０２に処理が戻り、遷移実行部（１３０）は、再び遷移表格納部（１２０）に格納されたセグメント接続表（２１０）を参照し、次に実行すべきセグメントを特定する。例えば、Ｓ３００での処理でセグメントＡのシンクＳＴ＿ｓｉｎｋ１に到達したとすると、図６（ｂ）のセグメント接続表（２１０）から、セグメントＡに続くセグメントＢを実行すべきセグメントとして特定できる。
【００５０】
Ｓ２０３で、遷移実行部（１３０）が、次に実行するセグメントが特定できなかった場合には、Ｓ２０４に進む。例えば、図６（ｂ）のセグメント接続表（２１０）によれば、セグメントＤの状態遷移を終えた後は、次に実行するセグメントを特定することができない。Ｓ２０４で、遷移実行部（１３０）は、この時メモリに展開されているセグメント（セグメントＤ）と、セグメント接続表（２１０）を削除し、処理を終える。
【００５１】
図８で示すフローチャートを用いて、セグメントに関する処理（Ｓ３００）の詳細について説明する。
【００５２】
Ｓ３０１で、ステートマシン（１００）の遷移表作成部（１１０）は、Ｓ２０３で特定された次に実行するセグメントの定義を、情報処理システムから取得する。この例では、遷移表作成部（１１０）は、情報処理システム（２００）からセグメントＡの定義（２２０）を受け取る。Ｓ３０２で、遷移表作成部（１１０）は、取得したセグメントの定義を基にセグメントを作成する。さらに、遷移表格納部（１２０）は、作成されたセグメントをメモリに記憶（展開）する。
【００５３】
Ｓ３０３で、遷移実行部（１３０）は、メモリに展開されたセグメントに従い、ソースから最終状態であるシンクに到達するまで状態遷移を実行する。遷移実行部（１３０）は、イベント発生などに応じて遷移した状態のそれぞれにおいて、アクティビティを実行する。Ｓ３０４で、遷移実行部（１３０）は、セグメントのシンクに到達したか否かを判定する。シンクに到達していた場合、Ｓ３０５で遷移実行部（１３０）は、シンクのアクティビティを実行し、メモリに展開されていたセグメントを削除する。
【００５４】
Ｓ３０５で、シンクでセグメントを削除できるのは、セグメントのシンクからセグメント内の他の状態に遷移することがないためである。また、上述したようにセグメントは「現在の状態」と「遷移情報」を含むが、特に「遷移先アクティビティ」は実行するのに必要な処理命令やデータなどの情報を含むため、セグメントを削除することでこれらの情報もメモリから削除することができる。実行済みのセグメントを削除することがメモリの使用量の低減につながるのはこのためである。
【００５５】
［実施例２］
情報システムによっては、要件によりセグメントのソースに遷移した時点から次のセグメントのソースへ遷移するまでの時間が指定されている場合がある。このような指定時間を、以降「セグメント滞在時間」と呼ぶ。
【００５６】
例えば、セグメント滞在時間が１時間である場合、あるセグメントのソースからシンクまでの処理を１時間以内に終える必要があり、１時間以内にシンクに到達しなかった場合は強制的に別のセグメントへ遷移する。また、セグメントのソースからシンクまでの処理が１時間以内に完了した場合は、同セグメントのソースに遷移してから１時間が経過するまで、次の別のセグメントのソースに遷移することができない。
【００５７】
本実施形態では、このような時間制約のあるシステムを想定したステートマシンの処理について説明する。
【００５８】
図９で示すフローチャートは、実施例２におけるステートマシン（１００）が実行する処理の概要を示す。
【００５９】
Ｓ１００１で、ステートマシンは、情報処理システム（２００）からセグメントに関する情報（セグメントの定義、セグメントの接続情報、セグメント滞在時間）を受け取り、セグメントを作成してメモリに展開する。Ｓ１００２で、ステートマシンは、セグメント滞在時間が経過したタイミングで次のセグメントのソースへ遷移できるよう、セグメントでの処理時間のカウント（時間管理）を開始する。この処理により、メモリに展開されたセグメントのソースに到達した段階で処理時間のカウントが開始されることになる。Ｓ１００３で、ステートマシンはセグメントのシンクに到達するまで、展開したセグメントをもとに状態遷移を実行する。ここでは、イベント発生などに応じて遷移した状態のそれぞれにおいて、アクティビティが実行されることになる。
【００６０】
Ｓ１００４で、ステートマシンは、シンクに到達する前に展開中のセグメントでの処理時間が、セグメント滞在時間を超過したか否かを判定する。セグメント滞在時間を超過してない場合には、Ｓ１００５でステートマシンは、シンクに到達したか否かを判定する。シンクに到達していた場合にはＳ１００６に進み、到達していないと判定された場合にはＳ１００３に戻る。
【００６１】
Ｓ１００４で、セグメント滞在時間を超過したと判定された場合、Ｓ１００８でステートマシンは、実行中のセグメントの状態をシンクへと強制的に遷移させる。Ｓ１００９で、ステートマシンは、展開されているセグメントをメモリから削除する。
【００６２】
Ｓ１００６で、ステートマシンは、展開されているセグメントをメモリから削除する。さらに、Ｓ１００７で、Ｓ１００６で削除されたセグメントのソースに遷移してからの処理時間が、セグメント滞在時間を超過するまで待機する。セグメント滞在時間を超過した場合にはＳ１０１０に進む。
【００６３】
Ｓ１０１０、Ｓ１０１１は、実施例１の処理Ｓ１０５、Ｓ１０６と同様である。
【００６４】
本処理に依れば、ステートマシンは、Ｓ１００７でセグメント滞在時間が経過するまで待機している間、セグメントをメモリに保持しない。これはセグメント滞在時間が経過するのを待つ間はセグメント内外への状態遷移がなく、状態遷移に関する情報を保持する必要がないため、セグメントを削除することが可能であるためである。このように、セグメント滞在時間が経過するのを待つ必要がある場合、実行済みのセグメントをメモリから早々に削除することで、待機中のステートマシンのメモリ使用量を低減することができる。
【００６５】
なお、待機中の状態は、削除したセグメントのシンクのまま、あるいはアクティビティや遷移先を持たない状態でよいが、メモリ使用量の少ない待機用セグメントを別途用意することも可能である。その場合には、ステートマシンは、Ｓ１００７で該待機用セグメントを作成してそのソースに遷移し、その待機用セグメント内で、その直前に削除したセグメントのセグメント滞在時間に対する残り時間の経過を待機してもよい。ただし、待機用セグメントはメモリ削減のため、Ｓ１００６で削除されるセグメントよりもメモリ使用量が少ないセグメント（例えば、アクティビティがないソースとシンクの２状態のみのセグメント）である必要がある。
【００６６】
図１０は、実施例２におけるステートマシン（１００）の機能構成の例を示す。実施例１と同様の構成については説明を省略する。
【００６７】
本実施形態のステートマシン（１００）は、時間管理部（１５０）を持つ。時間管理部（１５０）はセグメント滞在時間が指定されたセグメントにおける処理時間を管理する。具体的には、セグメントのソースに遷移したタイミングから処理時間をカウントして、その処理時間とセグメント滞在時間との比較を行う。
【００６８】
実施例２における情報処理システム（２００）は、実施例１に加えて、各セグメントのセグメント滞在時間の情報を、対応するセグメントの定義と結び付けて保持している。なお、一部のセグメントについては、セグメント滞在時間を定義しないことも可能である。そのようなセグメントに関しては、ステートマシン（１００）は、後述の図１１で説明する処理ではなく、前述の図８で説明した処理を実行することになる。つまり、実行しようとするセグメントに対応するセグメント滞在時間の有無に応じて、ステートマシンによる処理が切り替わることになる。
【００６９】
図１１で示すフローチャートを用いて、実施例２におけるステートマシン（１００）のセグメント滞在時間に従う処理について説明する。本処理は、実施例１の図７で説明したＳ３００のセグメントに関する処理において、図８で説明した処理に代わって実行される処理である。なお、セグメントとセグメント接続表の内容は、図６に示したものと同様である。
【００７０】
Ｓ３００１で、ステートマシン（１００）の遷移表作成部（１１０）は、図７のＳ２０３で特定された次に実行するセグメントの定義と、セグメント滞在時間と、を情報処理システム（２００）から取得する。Ｓ３００２で、遷移表作成部（１１０）は、取得したセグメントの定義をもとにセグメントを作成する。さらに、遷移表格納部（１２０）は、作成されたセグメントをメモリに記憶（展開）する。Ｓ３００３で、時間管理部（１５０）は、展開されたセグメントのソースに遷移するタイミングからセグメントでの処理時間のカウント（時間管理）を開始する。本実施形態では、セグメント滞在時間経過後にイベントを発生させるアラーム機能を用いるが、時間管理の手法はこれ以外であってもよい。
【００７１】
Ｓ３００４で、遷移実行部（１３０）は、メモリに展開されたセグメントに従い、ソースから最終状態であるシンクに到達するまで状態遷移を実行する。遷移実行部（１３０）は、イベント発生などに応じて遷移した状態のそれぞれにおいて、アクティビティを実行する。Ｓ３００５で、時間管理部（１５０）は、シンクに到達する前に展開中のセグメントでの処理時間が、セグメント滞在時間を超過したか否かを判定する。セグメント滞在時間を超過したと判定された場合にはＳ３００９に進む。ここで、セグメント滞在時間を超過してない場合は、Ｓ３００６でステートマシンは、シンクに到達したか否かを判定する。Ｓ３００６で、シンクに到達していたと判定された場合にはＳ３００７に進み、到達していないと判定された場合にはＳ３００４に戻る。
【００７２】
Ｓ３００７で、遷移実行部（１３０）は、セグメントをメモリから削除する。その後、Ｓ３００８で、遷移実行部（１３０）は、時間管理部（１５０）によるセグメント滞在時間の超過を示すイベントの発生まで待機する。遷移実行部（１３０）は、該イベントの発生に応答して、図７のＳ２０２に処理を戻す。
【００７３】
Ｓ３００５でセグメント滞在時間を超過したと判定された場合に、時間管理部（１５０）は、遷移実行部（１３０）に対しての該超過を示すイベントを発生させる。Ｓ３００９で、遷移実行部（１３０）は、時間管理部（１５０）のイベントに応答して、セグメントの状態をシンクに強制的に遷移させる。そして、Ｓ３０１０で、遷移実行部（１３０）は、メモリからセグメントを削除する。
【００７４】
（応用例１）
なお、本発明では、メモリに展開するセグメントは１つとして説明した。しかしながら、複数のセグメントをメモリに展開することも可能である。あるセグメントから次のセグメントへの接続に際して発生するセグメント作成（例えば、Ｓ１０６）の時間だけ、処理時間を短できる可能性がある。ただし、本発明はステートマシン（１００）によるメモリの使用量を低減することが目的なので、複数のセグメントから表現される状態遷移表において、それら複数のセグメントの中から一部のセグメントのみメモリに展開することになる。具体的には、図２（ｂ）で示す状態遷移表においては、１以上４以下のセグメントを一度にメモリに展開することになる。
【００７５】
（応用例２）
なお、実施例２について、セグメント滞在時間の定義をより柔軟に指定することも可能である。具体的には、図１１で示すＳ３００５、Ｓ３００９、Ｓ３０１０の処理は実行するが、Ｓ３００８の待機処理を省略するようにセグメント滞在時間の定義を行うことが可能である。その場合には、シンクに到達したセグメントがＳ３００７でメモリから削除されたあと、セグメント滞在時間を待たずに、すぐに次に実行すべきセグメントがメモリに展開されることになる。
【００７６】
（他の実施例）
本発明は、上述した実施形態を適宜組み合わせることにより構成された装置あるいはシステムやその方法も含まれるものとする。
【００７７】
ここで、本発明は、上述した実施形態の機能を実現する１以上のソフトウェア（プログラム）を実行する主体となる装置あるいはシステムである。また、その装置あるいはシステムで実行される上述した実施形態を実現するための方法も本発明の一つである。また、そのプログラムは、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給され、そのシステム或いは装置の１以上のコンピューター（ＣＰＵやＭＰＵ等）によりそのプログラムが読み出され、実行される。つまり、本発明の一つとして、さらにそのプログラム自体、あるいは該プログラムを格納したコンピュータにより読み取り可能な各種記憶媒体も含むものとする。また、上述した実施形態の機能を実現する回路（例えば、ＡＳＩＣ）によっても、本発明は実現可能である。
【符号の説明】
【００７８】
１００  ステートマシン
１１０  遷移表作成部
１２０  遷移表格納部
１３０  遷移実行部
【図１】
2018014037.tif 000003
【図２】
2018014037.tif 000004
【図３】
2018014037.tif 000005
【図４】
2018014037.tif 000006
【図５】
2018014037.tif 000007
【図６】
2018014037.tif 000008
【図７】
2018014037.tif 000009
【図８】
2018014037.tif 000010
【図９】
2018014037.tif 000011
【図１０】
2018014037.tif 000012
【図１１】
2018014037.tif 000013