(57)【要約】【課題】  プログラム実行装置において、オブジェクト指向の考え方に基づいて開発されるプログラムを、最小サイズで実装する。【解決手段】  オブジェクト指向言語を用いず、プログラムを構成する、コンポーネントを、定数属性データＫ１００１〜１００３、変数属性データＶ１００１〜Ｖ１００３および操作メソッドＭ１００１〜Ｍ１００３に分解して実装し、その関係を実行を行うスレッドテーブルＴ１００１，Ｔ１００２で保持する。オブジェクト間の相互呼び出しを廃止し、代わりに制御部（カーネル）を設け、カーネルの仲介によるデータの授受とマルチタスクによる駆動を行う。【選択図】図３
2009064320.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを実行可能なプログラム実行装置であって、
前記プログラムは、変数又は定数からなるデータ、前記データに基づいて所定の処理を実行する複数の処理実行手段、及び、前記データと前記処理実行手段との関係が記述されたテーブルを有して構成されるとともに、前記データ、前記処理実行手段及び前記テーブルに分解された状態で記憶手段に記憶されており、
前記テーブルの記述内容に基づいて、前記処理実行手段を実行させる制御手段を備えたことを特徴とするプログラム実行装置。
【請求項２】
前記テーブルには、前記データと前記処理実行手段との関係が、各行毎に記述されており、
前記制御手段は、複数の処理を同時に実行可能なマルチタスクの機能を有し、前記テーブルの一行毎を実行単位として、現在実行中の処理実行手段の処理が終了してから、次の処理実行手段を実行させることを特徴とする請求項１に記載のプログラム実行装置。
【請求項３】
前記制御手段は、前記テーブルを参照して、実行させるべき処理実行手段が利用するデータを、この処理実行手段に提供することを特徴とする請求項１又は請求項２に記載のプログラム実行装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムを実行可能なプログラム実行装置に関する。
【背景技術】
【０００２】
従来より、コンピュータでは、オブジェクト指向の考え方に基づき開発を行う手法が知られている（例えば、特許文献１参照）。
【特許文献１】特開２０００−１３７６０１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
ところで、オブジェクト指向による開発ではオブジェクト指向言語を用いてプログラムを作成することが多い。しかしながら、オブジェクト指向言語を用いてプログラムを作成する場合には、オブジェクトとして扱うための言語レベルのメカニズムが暗黙で含まれている。しかし、本体のプログラムのサイズが制約を受ける組込み機器では、このメカニズムのサイズの影響も無視できず、車両制御等の組み込みの分野では実用が困難であった。
【０００４】
本発明は、上記点に鑑み、プログラムを実行可能なプログラム実行装置において、オブジェクト指向の考え方に基づいて開発されるプログラムを、最小サイズで実装することを目的とする。
【課題を解決するための手段】
【０００５】
本発明は、上記目的を達成するためになされた請求項１に記載の発明は、プログラムを実行可能なプログラム実行装置であって、プログラムは、変数又は定数からなるデータ、データに基づいて所定の処理を実行する複数の処理実行手段、及び、データと処理実行手段との関係が記述されたテーブルを有して構成されるとともに、データ、処理実行手段及びテーブルに分解された状態で記憶手段に記憶されており、制御手段が、テーブルの記述内容に基づいて、処理実行手段を実行させる。
【０００６】
これによれば、オブジェクトの構成要素（すなわちデータと処理実行手段）をつなげるためのメカニズムをテーブルにて記述することとなるので、オブジェクト指向言語を用いた従来技術に比べて、プログラムのサイズを小さくすることができる。
【０００７】
また、請求項２に記載の発明では、テーブルには、データと処理実行手段との関係が、各行毎に記述されており、制御手段は、複数の処理を同時に実行可能なマルチタスクの機能を有し、テーブルの一行毎を実行単位として、現在実行中の処理実行手段の処理が終了してから、次の処理実行手段を実行させる。
【０００８】
これによれば、現在実行中の処理が途中で切り替わることがなく、かつ処理完了後は必ず制御手段に戻るので、このタイミングでタスク切換えを行うことにより、コンテキスト保存領域を必要とせず、マルチタスクを利用した場合であってもリソースの節約を計ることができる。
【０００９】
上記請求項２を用いれば、マルチタスクを利用してもリソースの消費を押さえることが出来るが、タスク切換えに１処理分の遅れが生じる、そこで、請求項３に記載のように、実行させるべき処理実行手段が参照するデータの所在をテーブルに記載しておき、制御手段を仲介役にしてこの処理実行手段に提供するようにすれば、処理実行手段が参照データを取得するために他の処理実行手段を呼び出す必要がないので、処理実行手段の処理時間を最小にすることができる。
【発明を実施するための最良の形態】
【００１０】
以下に本発明の実施形態を図面と共に説明する。
１．端末装置及び自動販売機の概略構成
図１は、本発明のプログラム実行装置が適用された組込み機器（自動販売機）２０、及び、組込み機器（自動販売機）２０に組み込まれるプログラムを作成するための端末装置１０の構成を表すブロック図である。
【００１１】
１．１．端末装置１０
端末装置１０は、各種情報を表示するための液晶ディスプレイにて構成された表示部１１、情報を記憶する記憶媒体としてのハードディスクドライブ（ＨＤＤ）１２、使用者が操作するためのキーボードやマウス等にて構成された操作部１３、及び、端末装置１０全体を統括制御する制御部１４等を有して構成されている。
【００１２】
端末装置１０には、オブジェクト指向に基づく部品化／再利用により開発されたプログラムを最小実装するプログラム実装支援ソフトが組み込まれている。なお、プログラム実装支援ソフトの説明については後述する。
【００１３】
１．２．組込み機器２０
制御部６０は、組込み機器２０全体を統括制御するためのものであり、ＣＰＵ、ＲＡＭ、ＲＯＭ等にて構成され、複数の処理を同時に実行可能なマルチタスクの機能を有している。
【００１４】
ここで、本実施形態では、端末装置１０の使用者が作成した上記実現方法に基づきプログラムの作成者（以下、プログラマという。）により作成されたプログラムが、組込み機器２０に組み込まれている。
【００１５】
また、制御部６０は、プログラム実行させる機能（カーネル）を有している。
カーネルはマルチタスクカーネルであり、複数の実行要求を優先度にしたがって切り換えながら並行実行することが出来る。
【００１６】
また、カーネルは、各部品（コンポーネント）間でやり取りされるデータの仲介役となる機能を有している。
２．プログラム実装支援ソフト
オブジェクト指向に基づく部品化／再利用により作成された部品（フレームワークおよびコンポーネント）を組み合わせてアプリケーションを作成し、最小の実装コードを生成する。
【００１７】
コンポーネントは実際の処理を行う処理メソッド（処理ロジックを含む）と処理を行う上で必要となる属性データにより構成される。一方、フレームワークはコンポーネント間の関連が記述されたもので、データの流れ（公開元と参照先）およびコントロールの流れ（各コンポーネントの処理メソッドがいつ実行されるかのタイミングとその起点（トリガー）により構成される。
【００１８】
３．プログラムの実装手順
３．１．アプリケーションの組み立て
図２に示すＳ１１９０では、設計者によりプログラム作成支援ソフトで作成されたフレームワークとコンポーネントを使って、システム開発者がアプリケーションを組み立てる。
【００１９】
具体的に説明すると、まず上述フレームワーク及びコンポーネントは、システム開発者およびプログラマによりライブラリ（例えば、ＨＤＤ１２）に登録され、このライブラリには、今回プログラマが登録したコンポーネント及びフレームワーク以外にも、以前プログラマ又は他のプログラマ等により作成された他のフレームワーク及び他のコンポーネントが登録されている。
【００２０】
このため、システム開発者は、まずＨＤＤ１２に登録された複数のフレームワークの中から、システムの機能要求に合うフレームワークを選択する。なお、上述したように、フレームワークは、コンポーネント間の関係を表すものなので、複数の機能要求に応じて複数個重ねることが可能である。
【００２１】
そして、システム開発者は、フレームワークを必要な分だけ、重ねた後、最後に全てのフレームワークのソケット部分へコンポーネントを嵌め込むことで、アプリケーションを組み立てることができる。なお、フレームワークとコンポーネントとは直交するので、複数のフレームワーク上での役割（ソケット部分）を一つのコンポーネントで担うこともある。
【００２２】
また、コンポーネントの嵌め込みは、コンポーネントが登録されたライブラリ（ＨＤＤ１２）から適合するコンポーネントを、システム開発者が選択してインスタンスを生成し、パラメータのカスタマイズ行うことにより実行される。なお、コンポーネントには、このパラメータのカスタマイズのためのインターフェースを装備しておくとよい。
【００２３】
３．２．実装
続いて、図２に示すＳ１２００では、Ｓ１１９０にて組み立てられたアプリケーションがシステム開発者により自販機２０の制御部６０に組み込まれ、図２に示す作業が終了する。
【００２４】
本実施形態では、図３に示すように、コンポーネントＣ１００１は、属性データＫ１００１，Ｋ１００２，Ｖ１００１と、操作メソッドＭ１００１，Ｍ１００２とで構成され、コンポーネントＣ１００２は、属性データＫ１００３，Ｖ１００２，Ｖ１００３と、操作メソッドＭ１００３とで構成される。なお、属性データＫ１００１〜Ｋ１００３は定数であり、属性データＶ１００１〜Ｖ１００３は変数である。
【００２５】
そして、コンポーネントＣ１００１，Ｃ１００２のうち、定数の属性データＫ１００１〜Ｋ１００３が、組込み機器２０の制御部６０のＲＡＭ領域Ａ１００１に配置され、変数の属性データＶ１００１〜Ｖ１００３、及び、操作メソッドＭ１００１〜Ｍ１００３（プログラムコード）が、自販機２０の制御部６０のＲＯＭ領域Ａ１００２に配置される。
【００２６】
但し、単にこのように配置した状態では、定数の属性データＫ１００１〜Ｋ１００３と、変数の属性データＶ１００１〜Ｖ１００３と、操作メソッドＭ１００１〜Ｍ１００３とがバラバラとなり、オブジェクトとしての関係が失われてしまう。
【００２７】
そこで、本実施形態では、実行単位のテーブルであるスレッドテーブルＴ１００１，Ｔ１００２に、コンポーネントＣ１００１，Ｃ１００２の関係（どの属性データとどの操作メソッドとが同じコンポーネントかを表す等の関係）がプログラム実装支援装置により記述され、オブジェクトとして振る舞うようにしている。
【００２８】
スレッドテーブルＴ１００１，Ｔ１００２は、すべてのフレームワーク（Ｆ５０１…）に含まれるタイミング情報を、タイミング毎にまとめて作成される可変長複数行のテーブルであり、ＲＯＭ領域Ａ１００２に配置される。
【００２９】
例えば、一行には、宛先Ｔ１００１ａに該当するコンポーネントＣ１００１の属性データＶ１００１，Ｋ１００１のアドレスと、メッセージＭ１００４に該当するコンポーネントＣ１００１の操作メソッドＭ１００１のアドレスと、参照値Ｒ１００１として該当する属性データのアドレスとが設定される。
【００３０】
このようにすることで、例えば、コンポーネントＣ１００１の操作メソッドＭ１００１が実行される場合には、宛先Ｔ１００１ａとなっているコンポーネントＣ１００１の属性データＫ１００１，Ｖ１００１を引数としてメッセージＭ１００４となっている操作メソッドＭ１００１を呼び出すので、属性データＶ１００１，Ｋ１００１と操作メソッドＭ１００１との関係が保たれる。
【００３１】
なお、上述したコンポーネントの実装において、ＨＤＤ１２（ライブラリ）から選択したコンポーネントは複数の操作メソッドを持っているが、実装設定の際、シナリオから使用している操作メソッドがわかるので、使用していない操作メソッドについては実装しないようにすることで、リソースの制約を図ることができる。
【００３２】
４．実行
以下に本発明により開発されたプログラムの実行の説明を行う。
上述のように、オブジェクトの構成要素は、バラバラに実装され、スレッドテーブルによって関係が保持されている。そこでカーネルは、スレッドテーブルＴ１００１を参照して、メッセージＭ１００４に該当する操作メソッドＭ１００１を呼び出し、その呼び出した操作メソッドＭ１００１に対してコンポーネントの属性データＫ１００１のアドレス，Ｖ１００１のアドレスを渡して処理を行わせる。
【００３３】
４．１．データの公開／参照メカニズム
操作メソッドＭ１００１が処理を行う上で外部のデータを必要とする場合がある。従来の実装では、呼び出し元が参照データを所有していて呼び出し時に渡すか、呼び出された後、メソッド側で参照データを取得するかであるが、前者では、呼び出し元がいつも参照データを所有しているとは限らず、後者では参照データの所有元を、呼ばれた側のオブジェクトが知っていなければならない。そこで本発明では、カーネルが仲介役となって、参照値Ｒ１００１該当する属性データＶ１００３を、カーネルが取得して渡してもよいし（コピー渡し）、テーブル行に記された参照値Ｒ１００１に該当する属性データＶ１００３のアドレスを渡してもよい（リファレンス渡し）。
【００３４】
これにより、操作メソッド（Ｍ１００１…）は、カーネルから呼び出された時点で、必要な参照値（Ｒ１００１…）が全て用意されるので、操作メソッド（Ｍ１００１…）は、参照値（Ｒ１００１…）がどこから提供されたのかを全く意識することなく処理を実行することができ、必要とする参照データを取得するための余計な関数の呼び出しも発生しない。
【００３５】
また、操作メソッド（Ｍ１００１…）による演算結果についても、どこかに戻す必要はなく、それを必要とする処理が呼び出されるときにカーネルが操作メソッド（Ｍ１００２…）に渡してくれるので、自分で保持していればよい。
【００３６】
４．２．マルチスレッド
ほとんどのシステムは様々な状況で振る舞いを変えるように作成されている。言い換えれば、そのプログラムは複数のタイミングで動作しているということである。従来のプログラム実装では、複数のタイミングに対応する処理がそれぞれの機能を実現する処理中に混在してしまっている。そのため部品（コンポーネント）間の結びつきが強く部品化／再利用を阻害している、そこで本発明ではタイミング要素をメソッドから完全に分離して定義し、マルチタスクによって駆動する。
【００３７】
フレームワークに記述されたタイミングは、そのタイミング毎にスレッドテーブル（Ｔ１００１，Ｔ１００２…）にまとめられているので、組込み機器２０の制御部６０（カーネル）は、あるタイミングになったら、該当するスレッドテーブルＴ１００１，Ｔ１００２…を実行する。例えば、図４に示すように、イベント２００が発生すると、組込み機器２０の制御部６０（カーネル）は、空いているタスクコントロールブロック（ＴＣＢ）２１０ａを探し、見つかったＴＣＢ２１０ａを通じて対応するスレッドテーブルＴ１００１を優先度ＱＵＥ２２０ａ〜２２０ｃにつなぐ。
【００３８】
つまり、本実施形態のマルチタスクでは、ＴＣＢ（２１０ａ…）とスレッドテーブル（Ｔ１００１…）とを動的に結合することでタスク数（スレッドテーブルの数）の制限がない。
【００３９】
なお、図４では、作用の説明のために、ＴＣＢ２１０ａのリンクに、スレッドテーブルＴ１００１のアドレスが設定され、このＴＣＢ２１０ａは、ＱＵＥ２２０ｂにつながれているものを例に挙げている。
【００４０】
カーネルは、優先度の高い順に（ＱＵＥ２２０ａから順に）ＴＣＢを探していき、最初に見つけたＴＣＢ（図４では、ＴＣＢ２１０ａ）にリンクされたスレッドテーブルＴ１００１を実行する。
【００４１】
このスレッドテーブルＴ１００１の一行目には、上述したように、宛先Ｔ１００１ａ、メッセージＭ１００４、参照値Ｒ１００１に該当するアドレスが設定されているので、宛先Ｔ１００１ａのアドレスを第一引数として、メッセージＭ１００４のアドレスを呼び出す。換言すれば、オブジェクト（Ｃ００１…）の操作メソッド（Ｍ００１…）が実行されるということである。
【００４２】
ここで、本実施形態のマルチタスクでは、スレッドテーブル（Ｔ１００１…）の一行、つまり操作メソッド（Ｍ１００１…）を一つの実行単位とし、操作メソッド（Ｍ１００１…）の途中ではディスパッチを起こさないようにされている。
【００４３】
そして、操作メソッド（Ｍ１００１…）の実行が完了したら、イベント２００が発生したか否かをチェックし、イベント２００が発生していれば、再度、優先度の高いＱＵＥ２２０ａからＴＣＢを探していく。
【００４４】
例えば、図５に示すように、イベント２００よりも優先度の高いイベント２０２が、イベント２００よりも後に発生した場合には、ＱＵＥ２２０ｂの上位であるＱＵＥ２２０ａにつながれるので、ＴＣＢ２１０ｂが先に見つかる。
【００４５】
ここで、カーネルは、ディスパッチして、現在のスレッドテーブルＴ１００１に代えて、ＴＣＢ２１０ｂにリンクされたスレッドテーブルＴ１００２を実行する。
このディスパッチの時点では、カーネルは何もＣＡＬＬしていないので、スタックには何も積まれていない。つまり、タスクを切り替えても、現在実行中のタスク（この場合、スレッドテーブルＴ１００１）のコンテキストを保存する必要がない。
【００４６】
再開のために、ＴＣＢ２１０ａのリンクに、現在のスレッドテーブル行（この場合、宛先Ｔ１００１ｂのメッセージＭ１００５）のアドレスが記憶され、新しいタスクが実行される。
【００４７】
次に、実行中のスレッドテーブルＴ１００２の最後の行(この場合、宛先Ｔ１００１ｂのメッセージＭ１００５に該当する操作メソッド)を実行したら、ＴＣＢ２１０ｂをＱＵＥ２２０ａから切り離して、タスクを終了する。
【００４８】
タスクが終了したら、再度、ＱＵＥ２２０ａから探していき、最初に見つけたＴＣＢにリンクされたスレッドテーブルを実行する。図５の例では、ＴＣＢ２１０ａが見つかるので、ディスパッチ時に記憶されたスレッドテーブルのＴ１００１の途中行（この場合、宛先Ｔ１００１ｂのメッセージＭ１００５）から再開される。
【００４９】
５．本実施形態に係る組込み機器ソフトウェアの特徴
本実施形態では、オブジェクトオブジェクトの構成要素（すなわちデータと処理実行手段）をつなげるためのメカニズムをテーブルとマルチタスクを利用した駆動メカニズムを用いることで、オブジェクト指向言語を用いた従来技術に比べて、プログラムのサイズを小さくすることができる。
【００５０】
また、テーブルの一行毎を実行単位とすることで、現在実行中の処理が途中で切り替わることがなく、かつ処理完了後は必ず制御手段に戻るので、このタイミングでタスク切換えを行うことにより、コンテキスト保存領域を必要とせず、マルチタスクを利用した場合であってもリソースの節約を計ることができる。
【００５１】
また、実行させるべき処理実行手段が参照するデータの所在をテーブルに記載しておき、制御手段を仲介役にしてこの処理実行手段に提供するようにすれば、処理実行手段が参照データを取得するために他の処理実行手段を呼び出す必要がないので、処理実行手段の処理時間を最小にすることができる。
【００５２】
６．発明特定事項と実施形態との対応関係
本実施形態では、制御部６０のＲＡＭ領域Ａ１００１、及び、ＲＯＭ領域Ａ１００２が、特許請求の範囲に記載された記憶手段に相当し、操作メソッドＭ１００１〜Ｍ１００３が特許請求の範囲に記載された処理実行手段に相当し、制御部６０が特許請求の範囲に記載された制御手段に相当する。
【００５３】
なお、本発明は、特許請求の範囲に記載された発明の趣旨に合致するものであればよく、上述の実施形態に限定されるものではない。
【図面の簡単な説明】
【００５４】
【図１】本発明のプログラム実行装置が適用された自動販売機、及び、端末装置の構成を表すブロック図である。
【図２】同実施形態のプログラムの設計から組み込みまでの手順を説明する説明図である。
【図３】同実施形態の組込み機器にプログラムの実装形態を説明する説明図である。
【図４】同実施形態の駆動メカニズムを説明する説明図である。
【図５】同実施形態の駆動メカニズムを説明する説明図である。
【符号の説明】
【００５５】
１０…端末装置、１１…表示部、１２…ＨＤＤ、１３…操作部、２０…組込み機器、６０…制御部、２００，２０２…イベント、２１０ａ，２１０ｂ…ＴＣＢ、２２０ａ〜２２０ｃ…ＱＵＥ、Ａ１００１…ＲＡＭ領域、Ａ１００２…ＲＯＭ領域、Ｃ１００１，Ｃ１００２…コンポーネント、Ｋ１００１〜Ｋ１００３，Ｖ１００１〜Ｖ１００３…属性データ、Ｍ１００１〜Ｍ１００３…操作メソッド、Ｍ１００４〜Ｍ１００７…メッセージ、Ｔ１００１，Ｔ１００２…スレッドテーブル、Ｔ１００１ａ，Ｔ１００１ｂ，Ｔ１００２ａ、Ｔ１００２ｂ…宛先。
【図１】
2009064320.tif 000003
【図２】
2009064320.tif 000004
【図４】
2009064320.tif 000005
【図５】
2009064320.tif 000006
【図３】
2009064320.tif 000007