プログラム圧縮装置及びプログラム実行装置及びプログラム
【課題】複数の命令列で構成される機械語による命令データのサイズ効率を向上させる。
【解決手段】命令データ圧縮装置103は、命令データに含まれる命令列を解析し、命令列ごとに、よりデータ量が少ないメタ命令に置き換え、メタ命令で置き換えた元の命令列が示されるメタ命令辞書データを生成し、メタ命令に置き換えられた圧縮命令データとメタ命令辞書データを命令データ格納装置106に格納し、圧縮命令データ実行装置104は、圧縮命令データとメタ命令辞書データを命令データ格納装置106から取得し、圧縮命令データの実行中にメタ命令が実行対象となった場合は、メタ命令辞書データに示される命令列を実行する。
【解決手段】命令データ圧縮装置103は、命令データに含まれる命令列を解析し、命令列ごとに、よりデータ量が少ないメタ命令に置き換え、メタ命令で置き換えた元の命令列が示されるメタ命令辞書データを生成し、メタ命令に置き換えられた圧縮命令データとメタ命令辞書データを命令データ格納装置106に格納し、圧縮命令データ実行装置104は、圧縮命令データとメタ命令辞書データを命令データ格納装置106から取得し、圧縮命令データの実行中にメタ命令が実行対象となった場合は、メタ命令辞書データに示される命令列を実行する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明はマイクロコンピュータ、データプロセッサ等のハードウェア的、もしくはソフトウェア的に実現されたデータ処理装置に関するものである。
例えばハードウェア的には中央演算処理装置(Central Processing Unit、以下CPU)、ソフトウェア的には仮想中央演算処理装置(Virtual Machine、以下VM)等が対象として挙げられる。
【背景技術】
【0002】
CPUやVMは実装された環境において、様々なデータ処理を行い、環境の様々な制御を行う装置である。
通常、CPUやVMは具体的にどのようなデータ処理を行うかは同じ環境に実装された記憶装置等に格納されているプログラムに記述されており、そのプログラムを読み込んで、その内容を逐次解釈し、解釈結果に従った処理を実行する。
プログラムは通常命令とそれに付随する0個以上のパラメータの列で構成され、CPUやVMはその処理対象となる命令と付随するパラメータを読み込んで処理を実施する。
CPUやVMは次にどの命令を処理すべきかを示す情報を保持するために、一般的にプログラム・カウンタ(Program Counter、以下PC)と呼ばれるレジスタを利用する。
PCは記憶装置に格納されている処理対象となっているプログラム中の次に処理すべき命令のアドレスを保持しており、CPUやVMはPCの保持するアドレスの命令を処理し、処理完了後にPCを次の命令が格納されているアドレスに移動させる。この一連の処理を繰り返す事によって、プログラムに記述された内容の処理を逐次実行する。
処理に必要なデータはCPUやVMが持つレジスタやスタック等の高速にアクセス可能な記憶装置から取得し処理を行う。
そのレジスタやスタックへのデータのセットを行う命令があり、大容量であるが低速な記憶装置や別のレジスタやスタックからデータを取得してセットする。
【0003】
一方で、近年の情報処理機器の発展に伴い、携帯電話やスマートフォン、カーナビゲーションシステム等、様々な機器でCPUやVMを実装した小型移動情報処理装置が開発され、様々なサービスを実現している。
これらの小型移動情報処理装置は一般的なパーソナル・コンピューターと比較すると小型であるために基板面積が小さく、十分な容量を持つメモリを実装する事が難しい。
また、近年の提供サービスの高度化、複雑化に伴い、ソフトウェアが使用するメモリ量は増加しており、過去に十分な容量であったとしても、全てのサービスを実現するには容量が不足する課題も多々発生している。
また、より少ない容量のメモリでサービスが実現できるようになると原価低減につながり、価格面での競争力を強化できるため、同一サービスであっても如何にして使用するメモリ量を抑制して実現するかは、今もなお重要かつ、緊急の課題となっている。
【0004】
このような課題に対して特許文献1では、命令のオペコード部の語長の長い命令を高頻度で使用する場合、予め予約されているコード長の短いオペコードに置き換え、置き換え前後のオペコードをレジスタに書き込んでおく事によって、プログラムの圧縮を行っている。
【0005】
また、特許文献2は、プログラム中の各関数において使用されている命令に新たなインデックを定義し、そのインデックスを命令のオペコード部として扱い、関数と組でインデックスから命令を解決するテーブルを持つ事でインデックスがオペコードよりサイズを小さく設定する事で、プログラムの圧縮を実現している。
また、特許文献3ではプログラム中の分岐の距離、即値データのサイズ、レジスタの利用頻度等を分析し、各命令コードやレジスタ指定のサイズが小さくなるように新たな命令セットアーキテクチャを再定義し、その命令セットに従って再作成したプログラムの動的ステップ数から論理演算手段の演算能力を判定し、命令セットから実命令セットへのデコード手段を設計する。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開平11−224199号公報
【特許文献2】特開2006−79451号公報
【特許文献3】特開平10−031588号公報
【非特許文献】
【0007】
【非特許文献1】「コンパイラの構成と最適化」、中田育夫、朝倉書店、ISBN 4−254−12139−3 C3041
【発明の概要】
【発明が解決しようとする課題】
【0008】
特許文献1では語長の長いオペコード部を持つ命令が高頻度に使用された場合にのみ、プログラムの圧縮を実現できるが、全ての命令のオペコード部が同一語長の場合や、語長が短いオペコード部を持つ命令が高頻度で使用された場合にプログラムの圧縮が行われないという課題がある。
また、特許文献2は実行時に全てのインデックスをテーブルに従って本来の命令にデコードする必要があり、実行時の処理速度低下を招くという課題がある。
また、特許文献3では個別のプログラムに対応して最適な命令セット、デコード設計を実現するため、処理内容に依存する事になり、任意のプログラムに適用した場合、分析過程からやりなおさなければならないという課題がある。
【0009】
この発明は、上記のような課題を解決することを主な目的の一つとしており、CPUやVMが処理対象とする命令データのサイズ効率を向上させることを主な目的とする。
また、命令データを解釈・実行する際に間接的に必要となる処理を削減することを主な目的とする。
【0010】
本発明に係るプログラム圧縮装置は、
各々のデータ長が固定されていない複数の命令列が含まれる機械語によるプログラムを入力するプログラム入力部と、
前記プログラム入力部により入力されたプログラムの各命令列を解析し、所定の条件を満たす命令列を、当該命令列よりもデータ量が少ないメタ命令に置き換える命令置き換え部と、
前記メタ命令と対応付けて、前記メタ命令に置き換えられた命令列が示されるメタ命令辞書データを生成するメタ命令辞書データ生成部と、
前記命令書き換え部により命令列がメタ命令に置き換えられたプログラムと、前記メタ命令辞書データ生成部により生成されたメタ命令辞書データとを対応付けて出力するプログラム出力部とを有することを特徴とする。
【発明の効果】
【0011】
本発明によれば、命令列ごとに解析を行い、命令列ごとにメタ命令に置き換えてプログラムのデータ量を圧縮する。このため、圧縮されたプログラムを実行する際に、命令列のどこまでが圧縮されているかを判断する必要がなく、プログラム実行時のオーバーヘッドを軽減することができる。
【図面の簡単な説明】
【0012】
【図1】実施の形態1に係る情報処理端末の構成例を示す図。
【図2】実施の形態1に係る情報処理端末の基本アクティビティを示す図。
【図3】実施の形態1に係るソースコード受け付け処理シーケンスを示す図。
【図4】実施の形態1に係る命令データ生成および圧縮要求に対する処理シーケンスを示す図。
【図5】実施の形態1に係る命令データ実行処理シーケンスを示す図。
【図6】実施の形態1に係るソースコードの例を示す図。
【図7】実施の形態1に係る命令列のデータ形式の例を示す図。
【図8】実施の形態1に係る命令識別番号、処理名、パラメータサイズの対応の例を示す図。
【図9】実施の形態1に係る命令名を利用して表現した命令データの例を示す図。
【図10】実施の形態1に係る命令データの例を示す図。
【図11】実施の形態1に係る命令データ圧縮処理の例を示す図。
【図12】実施の形態1に係る同一命令列出現回数カウント処理の例を示す図。
【図13】実施の形態1に係る命令ID別出現回数記録テーブル要素のデータ構造の例を示す図。
【図14】実施の形態1に係るパラメータ別出現回数記録テーブル要素のデータ構造の例を示す図。
【図15】実施の形態1に係る命令ID別出現回数記録テーブルの例を示す図。
【図16】実施の形態1に係る圧縮対象命令列テーブル生成処理の例を示す図。
【図17】実施の形態1に係る圧縮対象命令列テーブルの要素の例を示す図。
【図18】実施の形態1に係る命令データ圧縮変換処理の例を示す図。
【図19】実施の形態1に係る圧縮対象命令列テーブルの例を示す図。
【図20】実施の形態1に係るメタ命令辞書データの例を示す図。
【図21】実施の形態1に係るメタ命令で置換した命令データの例を示す図。
【図22】実施の形態1に係る圧縮命令データ実行装置の構成例を示す図。
【図23】実施の形態1に係る圧縮命令データ実行装置の実行処理手順の例を示す図。
【図24】実施の形態1に係る圧縮命令データ実行装置の状態例を示す図。
【図25】実施の形態1に係る圧縮命令データ実行装置の状態例を示す図。
【図26】実施の形態4に係る類似するソースコードの例を示す図。
【図27】実施の形態4に係る類似するソースコードに対する命令データの例を示す図。
【図28】実施の形態4に係る圧縮命令データ変換処理手順の例を示す図。
【図29】実施の形態4に係る変数識別情報変更前の圧縮命令データの例を示す図。
【図30】実施の形態4に係る変数識別情報変更後の圧縮命令データの例を示す図。
【図31】実施の形態5に係る複数のメタ命令辞書データを生成した場合の圧縮命令データの例を示す図。
【図32】実施の形態5に係る複数のメタ命令辞書データを生成した場合の圧縮命令データの例を示す図。
【図33】実施の形態6に係るジャンプ命令種別判定処理の例を示す図。
【図34】実施の形態6に係るジャンプ命令情報リストの要素のデータ構造の例を示す図。
【図35】実施の形態6に係るジャンプ命令変更処理の例を示す図。
【図36】実施の形態6に係る圧縮命令データ実行装置におけるジャンプ・アウト命令処理の例を示す図。
【図37】実施の形態6に係る圧縮命令データ実行装置におけるジャンプ・イン命令処理の例を示す図。
【図38】実施の形態6に係る圧縮命令データ実行装置における実行処理手順の例を示す図。
【図39】実施の形態1に係る圧縮処理時の処理最小単位の考え方を示す図。
【図40】実施の形態1に係るパラメータが別命令列に分離した場合の問題点を示す図。
【図41】実施の形態1に係る復元処理前のメモリ空間を示す図。
【図42】実施の形態1に係る復元処理後のメモリ空間を示す図。
【図43】実施の形態3に係る型によってサイズが異なる場合のメモリ配置例を示す図。
【図44】実施の形態3に係る型によってサイズが異なる場合のメモリ配置例を示す図。
【図45】実施の形態3に係る型に関係なくサイズが同一の場合のメモリ配置例を示す図。
【図46】実施の形態6に係る状況1〜4を示す図。
【図47】実施の形態6に係るジャンプ・アウト命令とジャンプ先との関係を示す図。
【図48】実施の形態1に係る命令データ圧縮装置の構成例を示す図。
【図49】実施の形態1〜6に係る情報処理端末装置のハードウェア構成例を示す図。
【発明を実施するための形態】
【0013】
実施の形態1.
本実施の形態では、少なくとも命令データ生成装置と、命令データ圧縮装置、圧縮命令データ実行装置の三つからなるシステムを想定している。
命令データ生成装置とは、ソフトウェア開発技術者があるアプリケーションをソフトウェアとして実現するため、開発したソースコードを入力として、圧縮命令データ実行装置が解釈・実行可能な命令で置き換えた命令データ(機械語によるプログラム)を生成し、その命令データを出力とする。
命令データ圧縮装置とは、命令データ生成装置が生成した命令データを入力として、命令データの内部を解析し、入力された命令データよりもサイズが小さくなるように変換を行い、変換した結果である圧縮命令データを生成し、圧縮命令データを出力とする。
命令データ圧縮装置は、プログラム圧縮装置の例である。
圧縮命令データ実行装置は、命令データもしくは圧縮命令データを入力として、それらの中に記述されている命令を解釈し、適切な処理を実行する事でソースコードに記述されていた内容と同一の処理を情報処理装置内で実現する。
ここで圧縮命令データ実行装置は圧縮命令データのみではなく、非圧縮状態の命令データも入力として受け付ける事が可能であり、どちらも処理可能であり、かつ命令データを実行する際には不要であるが圧縮命令データを実行する際に必要となる処理を最小限に抑える。
圧縮命令データ実行装置は、プログラム実行装置の例である。
【0014】
命令データ生成装置、命令データ圧縮装置、圧縮命令データ実行装置の実現方法は特に限定せず、ハードウェアとして実現されても構わないし、ある特定の情報処理端末装置内で実行されるソフトウェアとして実現されても構わない。
以下では説明を簡単にするため、ソフトウェアとして実現された場合のみを取り上げて説明する。
【0015】
また命令データ生成装置、命令データ圧縮装置、圧縮命令データ実行装置が実行される情報処理端末装置は一つに閉じている必要はなく、それぞれを独立した情報処理端末装置で実行する場合や、例えば命令データ生成装置と命令データ圧縮装置は一つの情報処理端末装置で実行し、圧縮命令データ実行装置のみ別の情報処理端末装置で実行すると言ったように、複数を一つの情報処理端末装置で実行する構成としても構わない。
複数の情報処理端末装置で構成する場合には、その情報処理端末装置間をネットワークで接続し、各装置間で通信可能として、自動処理できるようにしても構わないし、情報処理端末装置間のデータ移動は人手を伴った、例えばメモリカードなどにデータを保存し、そのメモリカードを別の情報処理端末装置に挿入し、そこから各装置への入力として利用すると言った方式でも構わない。
以下では説明を簡単にするため、命令データ生成装置、命令データ圧縮装置、圧縮命令データ実行装置が一つの情報処理端末装置で実行されている場合のみを取り上げて説明する。
また、同様に説明を簡単にするため、以下では全ての処理は逐次直列実行を基本とするが、並列実行やストリーミング実行で処理しても問題はない。
【0016】
図1は、本実施に係る情報処理端末装置100の構成を図示したブロック図である。
情報処理端末装置100に対する全ての要求は中央制御装置101が受け付け、その要求内容に従って命令データ生成装置102、命令データ圧縮装置103、圧縮命令データ実行装置104、ソースコード格納装置105に処理を実行させる。
ソースコード格納装置105は情報処理端末装置100において圧縮命令データに変換する対象となるソースコードを格納する記憶装置である。
命令データ格納装置106は命令データ生成装置102および命令データ圧縮装置103が生成する命令データおよび圧縮命令データを格納する記憶装置である。
命令データ生成装置102はソースコード格納装置105に格納されている全てのソースコードから一つ以上の指定されたソースコードを取得し、解析を行い、命令データに変換する処理を実施する処理装置である。
命令データ圧縮装置103は命令データ格納装置106に格納されている全ての命令データから一つ以上の指定された命令データを取得し、解析を行い、指定された命令データの合計サイズよりも合計サイズが小さくなる一つ以上の圧縮命令データに変換する処理を実施する処理装置である。
以下では命令データと言う場合には命令データ生成装置102が生成した命令データおよび命令データ圧縮装置103が生成した圧縮命令データ両方を指す用語とし、厳密に命令データ生成装置102が生成した命令データのみをさす場合には非圧縮命令データと呼ぶ事とする。
圧縮命令データ実行装置104は命令データ格納装置106に格納されている全ての命令データおよび圧縮命令データから指定されたデータを取得し、そのデータに記載されている命令に従い処理を逐次実行する処理装置である。
【0017】
以下で本実施の形態に係る情報処理端末装置100における基本処理シーケンスについて図2、図3、図4、図5を用いて説明を行う。
【0018】
図2は本実施の形態に係る情報処理端末装置100において必要となる処理を示したアクティビティ図である。
本実施の形態に係る情報処理端末装置100は、ソースコードを圧縮命令データに変換し、その変換した圧縮命令データを元にソースコードで記述された内容の処理を実行するシステムである。
そのため、本実施の形態においては少なくとも処理対象となるソースコードをシステムに認識させるための処理対象ソースコード格納処理、格納されたソースコードの全てもしくは一部から、圧縮命令データを生成する命令データ/圧縮命令データ生成処理と、生成された圧縮命令データを元にソースコードに記述された内容の処理を実行する命令データ/圧縮命令データ実行処理の3種類の処理が必要となる。
【0019】
図3は、前記処理対象ソースコード格納処理の具体的な処理シーケンスの一例を図示したものである。
中央制御装置101は上位から処理対象ソースコード登録要求を受けるとソースコード格納処理を開始する。
処理対象ソースコード登録要求には少なくとも登録対象となる一つ以上のソースコードもしくはそのソースコードを一意に識別可能な、例えばソースコードのファイル名や、識別番号などの、情報が含まれており、中央制御装置101はその情報をもとにソースコード格納装置に格納するソースコードを特定し、取得する。
中央制御装置101は取得したソースコードをソースコード格納装置105に対して格納し、その処理結果を示す処理結果IDをソースコード格納装置105から受け取る。
この処理結果IDの内容に応じて、正常終了したのか、エラーが発生したのかを上位に通知し、処理は完了する。
【0020】
図4は、前記命令データ/圧縮命令データ生成処理の具体的な処理シーケンスの一例を図示したものである。
【0021】
中央制御装置101は、上位より命令データ/圧縮命令データ生成要求を受けると命令データ生成処理を開始する。
命令データ生成要求には少なくとも命令データ生成の対象となる一つ以上のソースコード格納装置105に格納されているソースコードを一意に識別可能な情報が含まれており、中央制御装置101はその情報をもとに命令データ生成処理を行うべきソースコードを特定し、命令データ生成処理を実行する。
また、命令データ生成要求は命令データ生成要求を実施するに当たり、必要となるソースコード全ての識別情報を保持している必要はなく、適時必要なソースコードを本処理中でソースコード格納装置105から検索し、取得する事としても構わない。
【0022】
中央制御装置101は命令データ/圧縮命令データ生成要求を受けると、その要求に含まれているソースコード識別情報一式をもとに命令データ生成開始処理を命令データ生成装置102に対して開始させる。
命令データ生成装置102は、ソースコード識別情報一式に対応するソースコードをソースコード格納装置105から取得し、命令データ生成処理を実行する。
この命令データ生成処理の具体的な処理内容は、例えば非特許献1に記載されている様な一般的なコンパイラで適用される字句解析、構文解析、意味解析、最適化等の処理を実施し、その処理結果から実行環境である圧縮命令データ実行装置104が解釈可能な目的コードである命令データを生成する事である。
命令データ生成処理でエラーが発生していない場合には、ソースコードより正しい命令データが生成された事を意味するため、その場合には生成された命令データを命令データ格納装置106に格納し、最後に中央制御装置101に対して命令データ生成処理の処理結果を示す処理結果IDを返す。
命令データ格納装置106に格納された命令データには各々を一意に識別可能な識別情報が付加され格納されるが、ソースコードの識別情報と同一の識別情報で命令データを識別可能として格納されている事が望ましい。
同一ではない場合にはソースコードの識別情報とそのソースコードから生成された命令データの識別情報を紐付けする情報を保持しておく事が望ましい。
逆に、命令データ生成処理においてエラーが発生している場合には、ソースコードより正しい命令データが生成されていない事を意味するため、その場合には命令データ格納装置106への命令データ格納処理は実施せず、発生したエラーを示す処理結果IDを中央制御装置101に返し、命令データ生成処理は終了する。
なお、命令データ生成装置102は命令データ生成処理を開始する際に、最初にソースコード識別情報一式に対応するソースコードに対応する命令データが既に命令データ格納装置106に格納されているか確認を行い、格納されているものがある場合にはそれに対応するソースコードへの命令データ生成処理は実施しないものとしても構わない。
命令データ生成装置102より処理結果IDを受け取った中央制御装置101は、その処理結果IDがエラーを示す場合には、以降の処理を実施せず、上位にエラーが発生した事を通知し、処理は完了する。
逆に、処理結果IDが正常終了を示す場合、中央制御装置101は命令データ圧縮装置103に対して、命令データ圧縮処理を開始させる。
【0023】
命令データ圧縮装置103は、中央制御装置101から命令データ圧縮開始命令を受け、命令データ圧縮処理を開始する。
命令データ圧縮開始命令には圧縮対象となる命令データの識別情報は少なくとも一つ以上含まれており、その識別情報をもとに圧縮対象となる命令データを命令データ格納装置106から取得し、命令データ圧縮処理を実施する。
命令データ圧縮処理の具体的な処理内容については後述する。
【0024】
命令データ圧縮処理でエラーが発生せず、少なくとも圧縮前の命令データのサイズよりも命令データ圧縮処理で生成された圧縮命令データのサイズが小さくなった場合には、その圧縮命令データを命令データ格納装置106に格納する。
この時、圧縮命令データに対しては一意に識別可能な識別情報が付加されて格納され、その識別情報はソースコードの識別情報、または命令データの識別情報と同一の識別情報である事が望ましい。
もし同一の識別情報ではない場合には、ソースコードの識別情報および命令データの識別情報とそれらから生成された圧縮命令データの識別情報を紐付けする情報を保持しておくことが望ましい。
最後に、命令データ圧縮装置103は命令データ圧縮処理の成功を示す処理結果IDを中央制御装置101に返す。
逆に命令データ圧縮処理でエラーが発生した場合、もしくは圧縮前の命令データのサイズと圧縮命令データのサイズが同一である、もしくは圧縮命令データのサイズの方が大きい場合には、命令データの圧縮に失敗しているため、発生したエラーを示す処理結果IDもしくは圧縮命令データのサイズが命令データのサイズ以上となった事を示す処理結果IDを中央制御装置101に返す。
【0025】
命令データ圧縮装置103から処理結果IDを受けた中央制御装置101は、その処理結果IDを上位にエラーが発生した事を通知し、処理は完了する。
【0026】
図5は、前記命令データ/圧縮命令データ実行処理の具体的な処理シーケンスの一例を図示したものである。
【0027】
中央制御装置101は上位より実行要求を受けると、その要求に従い圧縮命令データ実行装置104に対して、命令データ/圧縮命令データ実行の開始命令を行う。上位より受け取る実行要求には実行対象となるソースコード、命令データ、圧縮命令データのうち少なくとも一つに対する識別情報が一つ以上含まれており、その識別情報を元に処理対象となる命令データ、圧縮命令データを特定する。
【0028】
中央制御装置101より命令データ/圧縮命令データ実行の開始命令を受けた圧縮命令データ実行装置104は、実行対象の識別情報から処理対象となる命令データ、圧縮命令データを命令データ格納装置106から取得する。
この時、命令に含まれる識別情報がソースコードに対応するものであった場合には、そのソースコードに対応する命令データもしくは圧縮命令データに対する識別情報をソースコードの識別情報と紐付け情報をもとに取得してから最終的に命令データもしくは圧縮命令データを取得する。
同様に命令に含まれる識別情報が命令データに対応するものであった場合には、その命令データに対応する圧縮命令データが存在するかどうか紐付け情報を利用して確認し、存在する場合には圧縮命令データを命令データ格納装置106から取得し、存在しない場合には命令データを命令データ格納装置106から取得する。
最後に命令に含まれる識別情報が圧縮命令データに対応するものであった場合は、その識別情報をもとに命令データ格納装置106より対象となる圧縮命令データを取得する。
命令データもしくは圧縮命令データを取得後、圧縮命令データ実行装置104は実行前準備を実施し、命令データ/圧縮命令データ実行に必要な情報、状況を構築する。
その後、命令データ/圧縮命令データ実行を開始し、実行終了後に実行のために準備した情報や状況の終了処理を行い、最後に実行結果を中央制御装置101に返し、終了となる。
処理結果を受け取った中央制御装置101はその処理結果を上位に返し、命令データ/圧縮命令データ実行処理は終了となる。
【0029】
以上までで、本実施の形態に係る情報処理端末装置100における基本処理シーケンスについて図2、図3、図4、図5を用いて説明を行ったが、この説明では各処理ブロックを直列で処理する事として説明していたが、必ずしもそのような処理形式で行う必要はない。
例えば、前記命令データ/圧縮命令データ生成処理における命令データ生成開始処理で単一のソースコードのみを処理対象とせずに、複数のソースコードを一括して処理対象として処理を行っても構わないし、複数のソースコードを直列で処理せずに並列処理しても構わない。
【0030】
次に本実施の形態で扱うソースコードに関する具体的な説明を行う。
【0031】
ソースコードとは最終的に生成されるソフトウェアが実行すべき処理内容について人間、もしくは何らかのツールがある言語仕様の構文規則に従い記述したデータの事を指す。
ソースコードは人間がその内容を容易に解読可能である事を目的の一つとしており、通常は従うべき構文規則はソースコードがテキスト形式のデータである事を前提としている。
本実施の形態ではC言語の構文規則に従ったソースコードを扱う事とするが、これは本実施の形態がC言語の構文規則のみに適用可能である事を示すものではなく、C++言語やJava(登録商標)言語などその他任意の言語仕様であっても本実施の形態は適用可能である。
【0032】
図6は、ソースコードの一例である。
このソースコードの一例は前述の通りC言語の構文規則に従ったものである。
一行目は整数型の変数aに対して3を代入する事を意味している。
二行目は整数型の変数bに対して4を代入する事を意味している。
三行目は整数型の変数cに対して変数aと変数aを加算した結果を代入する事を意味している。
変数aは直前までの処理で3が代入されているため、cに代入される値はその加算結果である6となる。
【0033】
次に本実施の形態で扱う命令データに関する具体的な説明を行う。
【0034】
命令データは命令データ生成装置102が中央制御装置101より指定されたソースコードを入力として命令データ生成処理を実施した際に、その処理結果として生成される機械語によるデータの事を指す。
命令データは圧縮命令データ実行装置104が解釈可能なデータ形式で表現されている。
一般的に命令データは、人間が解釈可能である事を必ずしも必要としておらず、圧縮命令データ実行装置104が効率的に解釈できる事が優先される。
そのため、命令データのデータ形式はバイナリ形式となっている事が一般的である。
また、命令データは前記のバイナリ形式のデータと共にソースコードやソースコードの構文解析木などの付加情報を付加しておいても構わない。
【0035】
図7は、命令列のデータ形式の一例を示した図である。
【0036】
この例では命令列は命令ID部とそれに続くパラメータ部の組を最小データ構造としている。
命令ID部には圧縮命令データ実行装置が持つ処理セットに対して一意に振られている命令識別番号を格納する領域である。
本実施の形態では命令ID部は1byteの固定長として説明を行うが、固定長である必要はなく、可変長でもよい。
次に、パラメータ部は対応する命令ID部に格納されている命令識別番号に対応する処理を圧縮命令データ実行装置104が実行する場合に必要な情報を格納する領域である。
本実施の形態では命令ID部に格納されている命令識別番号によってパラメータ部のサイズおよびパラメータ部に格納されるパラメータ数は決定される可変長として説明を行うが、全ての命令において同一サイズのパラメータ部を持つ固定長としてもよい。
【0037】
図8は、命令列における命令識別番号と具体的命令内容およびパラメータ部サイズの対応の一例である。
【0038】
命令ID部は1byteであるため、命令識別番号も0から255までの値をとることが可能である。
各命令識別番号に対応する具体的な処理内容は適時説明を行うため、ここでは詳細は省略し、対応する処理の処理名とその処理で必要となるパラメータ部のサイズの対応が付けられている。
例えば、命令ID部に5が格納されている場合、圧縮命令データ実行装置104は処理名popvに対応する処理を実施しなければならず、またその際に命令識別番号直後に続くパラメータ部のサイズは0byteである事を意味している。
ある命令列を圧縮命令データ実行装置104が解釈する内容は、その命令列を生成する際に処理対象となったソースコードの内容と意味的な変質が生じないようになっており、その同質性は命令データ生成装置102および命令データ圧縮装置103が保証するものである。
ここで「意味的な変質が生じない」とは、ソースコードで記述された内容に従って処理を行った結果と、命令データで記述された内容に従って処理を行った結果が任意の入力に対して、かならず出力が一致する事を意味し、その処理過程が同一である事を求めるものではない。
つまり、ソースコードに記載されていないが圧縮命令データ実行装置104で処理する際に都合のよい命令に置き換えたり、内部的に必要となる処理を追加する事や、非特許文献1などに記載されている最適化を命令データ生成装置102もしくは命令データ圧縮装置103で実施しても構わないことを意味する。
【0039】
図9は、図6に示したソースコードを処理対象として、図8に示す命令識別番号構成(命令セット)に従い、命令データ生成装置102が生成した命令データを、命令名を用いてニーモニック表現した一例である。
【0040】
処理deflocalvarは圧縮命令データ実行装置が保持するローカル変数領域としてパラメータに指定された個数だけ変数領域を新たに確保する処理である。
本実施の形態では単一変数領域のサイズは4byte固定長を前提としており、パラメータ部に記載の内容3は領域を確保すべき変数の個数を示している。
この3変数とは変数a,b,cの事である。
ここで単一変数領域のサイズを固定長としているが、必ずしも固定長である必要はないが、固定長とする事によってより効果的な後述する圧縮命令データの生成を行う事が可能となる。
次に2行目から4行目でソースコードの1行目に対応する処理が記載されている。
処理numberはパラメータ部に記載の整数値を圧縮命令データ実行装置104が保持するスタック領域にプッシュする処理である。
ここでパラメータ部に記載の3とは変数aへの代入値3の事である。
次に、処理setnameはスタック領域の先頭の値をポップした後、パラメータ部に記載のオフセット位置の変数領域に対して代入し、その代入した値をスタック領域にプッシュする処理である。
ここでパラメータ部に記載の0とは宣言されている変数aに対するオフセット値である。
本明細書では特に断りがない限りソースコード中に出現順にオフセット値を割り振り、オフセット値はその変数が宣言される直前までに宣言済みの変数の個数としている。
次に、処理popvはスタックの先頭要素を削除する処理である。
この処理を実施する事で直前のsetnameの最後に行った代入値をスタック領域にプッシュした結果をスタックから開放し、スタックに値が残る事を防止している。
この処理はソースコード中に明記されていないが、圧縮命令データ実行装置104が処理を行うに当たり、必要となる処理である。
以上でソースコードの一行目に対応する命令データの処理が終わる。
【0041】
その直後にソースコードの二行目に対応する命令データが5行目から7行目に記載される。
ソースコードの二行目はソースコードの一行目と同一の構造を持っており、変数名とその変数に代入する値が異なるのみであるため、処理numberおよび処理setnameに対するパラメータ部の値のみが異なっている。
【0042】
最後に8行目から12行目はソースコードの3行目に対応する命令コードが記載されている。
8行目および9行目には処理nameが記載されており、それぞれパラメータ部に記載のオフセット位置の変数領域に格納されている値をスタック領域にプッシュする処理である。
10行目には処理addが記載されており、スタック領域の先頭2要素をポップし、その2要素を加算した結果をスタックにプッシュする処理である。ここまでの命令コードによってソースコードの三行目の一部である「a+a」の処理が記述された事になる。
次に、11行目の処理setnameでスタックの先頭に格納されている「a+a」の結果の値をポップし、変数cに代入し、その代入した値をスタックにプッシュを行い、最後の12行目の命令popvで直前の処理setnameの最後にプッシュした値をスタックからポップして削除し、ソースコードの3行目に対応する記述は完了する。
【0043】
図10は、図9で示したニーモニック表現の命令データを16進数で表現した一例である。
通常命令データをバイナリ形式として扱う場合にはこのような形式で表現される事になる。
【0044】
次に、本実施の形態で扱う圧縮命令データに関する具体的な説明を行う。
【0045】
圧縮命令データとは、命令データ圧縮装置103が指定された一つ以上の命令データを処理対象として処理を行い、その命令データの意味的な同質性は保証してその命令データよりもデータサイズが小さくなるように変換を行った結果の命令データの事である。
図11を用い、図4における命令データ圧縮処理の具体例を一つ挙げ、説明する。
【0046】
命令データから圧縮命令データを生成するためには、命令データにおける重複する命令列を集計する処理(同一命令列出現回数カウント)を実施する。
ここで命令列とは命令ID部とパラメータ部の組が一つ以上連続するデータの事を指す。
つまり、本実施の形態では、命令データを任意のバイナリ形式のデータとしてデータ圧縮処理を実施するのではなく、命令としての意味的な構成を最小単位として命令データの圧縮を実施する。この点の詳細は後述する。
次に集計した命令列の出現回数に関する情報からどの命令列を圧縮対象とするのが効果的かを判断し、圧縮対象となる命令列に関する情報をテーブルデータとして作成する処理(圧縮対象命令列テーブル生成)を実施する。
最後に圧縮対象となった命令列を命令データ中から検索し、メタ命令に置き換えることで命令データの意味的な同質性を保持したままデータサイズを削減し、圧縮命令データを生成する処理(命令データ圧縮変換)を実施し、圧縮命令データ生成処理を完了する。
【0047】
次に、図11に示す処理を実現するため、本実施の形態に係る命令データ圧縮装置103は、例えば図48に示す構成を有する。
ここでは、図48に従って、本実施の形態に係る命令データ圧縮装置103の構成例を説明する。
【0048】
命令データ格納装置アクセス部1031は、命令データ格納装置106から複数の命令列が含まれる機械語による命令データ(プログラム)を入力する。
前述したように、命令列は、命令が示される命令コード(命令ID部)と命令コードの命令の対象となる0バイト以上のパラメータ値(パラメータ部)とが組み合わされている。
また、命令データ格納装置アクセス部1031は、後述の命令解釈・圧縮部1032により命令列がメタ命令に置き換えられた後の圧縮命令データと、後述のメタ命令辞書データ生成部1036により生成されたメタ命令辞書データとを対応付けて命令データ格納装置106に出力する。
命令データ格納装置アクセス部1031は、プログラム入力部及びプログラム出力部の例である。
【0049】
命令解釈・圧縮部1032は、命令データ格納装置アクセス部1031により入力された命令データの各命令列を解析し、所定の条件を満たす命令列を、当該命令列よりもデータ量が少ないメタ命令に置き換える。
命令解釈・圧縮部1032は、命令置き換え部の例である。
命令解釈・圧縮部1032は、同一命令列出現回数カウント部1033、圧縮対象命令テーブル生成部1034、命令データ圧縮変換部1035に区別される。
【0050】
同一命令列出現回数カウント部1033は、命令データ格納装置アクセス部1031により入力された命令データにおいて命令コードとパラメータ値との組み合わせが共通する命令列の個数を計数する。
【0051】
圧縮対象命令テーブル生成部1034は、同一命令列出現回数カウント部1033が計数した命令列の出現回数に関する情報からどの命令列を圧縮対象とするのが効果的かを判断し、圧縮対象となる命令列を示す圧縮対象命令列テーブルを生成する。
つまり、圧縮対象命令テーブル生成部1034は、命令列ごとに、同一命令列出現回数カウント部1033が計数した命令列の個数と命令列1つあたりのデータ量から命令データにおけるデータ総量を算出し、その命令列に対するメタ命令のデータ量とメタ命令辞書データのデータ量との合計を算出し、メタ命令のデータ量とメタ命令辞書データのデータ量の合計がその命令列のデータ総量よりも少ない場合に、その命令列をメタ命令で置き換えると決定し、圧縮対象命令列テーブルに加える。
【0052】
命令データ圧縮変換部1035は、圧縮対象命令テーブル生成部1034により圧縮対象とされた命令列を命令データ中から検索し、メタ命令に置き換えることで命令データの意味的な同質性を保持したままデータサイズを削減し、圧縮命令データを生成する処理(命令データ圧縮変換)を実施し、圧縮命令データ生成処理を完了する。
より具体的には、命令データ圧縮変換部1035は、圧縮対象命令列テーブルに示される命令コードとパラメータ値との組み合わせに一致する命令列を抽出し、抽出した命令列をメタ命令に置き換える。
圧縮対象命令列テーブルに示される命令コードとパラメータ値との組み合わせに一致する命令列が2以上存在する場合は、それら2以上の命令列を共通するメタ命令に置き換える。
【0053】
メタ命令辞書データ生成部1036は、メタ命令辞書データを生成する。
メタ命令辞書データは、メタ命令と対応付けて、メタ命令に置き換えられた命令列が示されるデータである。
【0054】
命令圧縮時情報記憶部1037は、命令解釈・圧縮部1032が圧縮処理中に利用する記憶手段である。
【0055】
以下では、命令データ圧縮装置103の動作例について順に具体例を挙げ説明を行う。
【0056】
図12は、図11における同一命令列出現回数カウント処理の具体的な一例の処理を図示したものである。
同一命令列出現回数カウント処理は、図48に示した同一命令列出現回数カウント部1033により行われる。
なお、前述の通り、出現回数をカウントする対象は命令列であり、1つの命令列に複数の命令ID部が含まれる場合が考えられるが、ここでは命令列には単一の命令ID部のみ含まれているものとして説明する。
【0057】
処理1201では、同一命令列出現回数カウント部1033は、命令毎に出現回数を記録するための記録領域を確保し、その内容を初期化する。
ここで用いられる記録領域は、例えば命令圧縮時情報記憶部1037である。
【0058】
図13は命令ID別出現回数記録テーブルの要素のデータ構造の一例を図示したものである。
命令識別番号領域はその要素で出現回数を集計する命令の命令IDの値を格納する領域である。
この領域は命令ID別出現回数記録テーブルを配列として実装した場合にはその配列のインデックスで代用する事も可能である。
パラメータ別出現回数記録テーブル領域は、その要素で出現回数を集計する命令のその直後に続くパラメータ部の値別で出現回数を集計するためのテーブルデータのアドレスを格納する領域である。
パラメータ部が存在しない命令の場合には、アドレスではなく、直接出現回数を保持しても構わないし、パラメータ部が存在する命令と同様に参照先のパラメータ別出現回数記録テーブルで出現回数を記録しても構わない。
【0059】
図14はパラメータ別出現回数記録テーブルの要素のデータ構造の一例を図示したものである。
パラメータ部には集計対象となる命令列の命令ID部直後のパラメータ部の値を直接、もしくは間接参照で保持するための領域である。
出現回数記録領域には、集計対象となる命令IDおよびパラメータ部の値を組とした命令列が命令データに何回出現しているかを集計した結果を記録するための領域である。
パラメータ別出現回数記録テーブルはパラメータ部の値毎に出現回数を記録しなければならないため、固定長配列で管理するのは効率がよくないため、リスト形式や連想配列形式のテーブル管理を行う事を想定している。
【0060】
処理1201の説明に戻る。
記憶領域の確保および初期化に関しては、同一命令列出現回数カウント部1033は、命令ID別出現回数記録テーブルが例えば固定長配列である場合には命令セットで定義されている命令の個数と同数の要素を持つように記憶領域を確保し、各要素に対してその要素で出現回数を記録する命令の命令IDの値を命令識別番号領域に代入し、パラメータ別出現回数記録テーブルに対しては初期値、例えば0やNULLポインタなどを代入して初期化を行う。
初期化完了後に処理1202に遷移する。
【0061】
処理1202では、同一命令列出現回数カウント部1033は、処理対象となっている一つ以上の命令データのうち、まだ処理を行っていない命令データから一つを選択し、その命令データの先頭を指し示すポインタptを作り出す。
このポインタptは、以降の処理で現在処理対象となっている命令データ中の処理すべき命令ID部の位置を示すために利用する。
pt作成後、処理1203に遷移する。
【0062】
処理1203では、同一命令列出現回数カウント部1033は、現時点でのポインタptが処理対象の命令データの終端に到達しているかを判定する。
もし、終端に到達している場合、現在処理対象となっている命令データ中の全ての命令ID部の処理を完了したことを意味しており、次の命令データの検索処理を実施するため処理1204に遷移する。
逆に終端に到達していない場合には処理対象の命令データ中にptで指し示す位置以降のデータは処理されていない事を意味しているため、それらに対する処理を継続するため処理1205へ遷移する。
【0063】
処理1204では、同一命令列出現回数カウント部1033は、現在処理対象の命令データは全て処理完了したため、次に処理対象とすべき命令データ、つまり処理対象となっていない命令データが存在するか検索する。
その検索の結果、処理対象とすべき命令データが存在しない場合には、ここで処理すべき全ての命令データに対して処理を完了しているため、本処理をもって同一命令列出現回数カウント処理は終了となる。
逆に処理対象とすべき命令データが存在する場合には、その命令データを処理対象として処理1202へ遷移する。
【0064】
処理1205では、同一命令列出現回数カウント部1033は、ptが指し示す命令ID部の値に対応する命令識別番号が命令セットに存在するか確認し、対応する命令の情報を取り出す。
ここで取り出す情報は少なくともパラメータ部のサイズ情報などが考えられる。
情報の取り出し完了後、処理1206へ遷移する。
【0065】
処理1206では、同一命令列出現回数カウント部1033は、ptが指し示す命令ID部の値に対応する命令に関する出現回数を記録するための命令ID別出現回数記録テーブルの要素(以下、countと表記)を取り出す。
この時、countのパラメータ別出現回数記録テーブル領域がNULLである場合には、パラメータ別出現回数記録テーブルを作成し、countのパラメータ別出現回数記録テーブル領域にそのアドレスを代入する。
処理完了後に処理1207に遷移する。
【0066】
処理1207では、同一命令列出現回数カウント部1033は、ptが指し示す命令ID部の直後に続くパラメータ部を検索キーとしてcountのパラメータ別出現回数記録テーブル領域で指し示すパラメータ別出現回数記録テーブルから対応する要素(以下、targetと表記)を検索する。
ここで、パラメータ部が存在しない命令に対する命令識別番号が、ptが指し示す命令ID部に記載されている場合には、検索キーを指定せずにcountのパラメータ別出現回数記録テーブル領域で指し示すパラメータ別出現回数記録テーブルの先頭要素を検索する。
検索処理完了後、処理1208に遷移する。
【0067】
処理1208では、同一命令列出現回数カウント部1033は、処理1207で検索したtargetが見つかっているか否かで条件分岐を行う。
targetが見つかっていない場合には、ptが指し示す命令IDと直後のパラメータ部の組は初めて見つかった事を意味するため、初検索時の処理となる処理1209へ遷移する。
逆にtargetが見つかっている場合には、既にその組み合わせの命令列は見つかっている事を意味し、2回目以降の出現回数記録処理となる処理1213へ遷移する。
【0068】
処理1209では、同一命令列出現回数カウント部1033は、ptで指し示す位置から始まる命令列は初めて見つかったため、count中に対応する要素であるtargetが存在していない。
そのため、対応するパラメータ別出現回数記録要素を新規に作成・初期化し、それをtargetとし処理1210に遷移する。
【0069】
処理1210では、同一命令列出現回数カウント部1033は、targetの出現回数記録領域に1を代入し、処理1211へ遷移する。
【0070】
処理1211では、同一命令列出現回数カウント部1033は、ptで指し示す命令列のパラメータ部の値をキーとしてtargetをcountに登録する。
以上の処理1209から処理1211によって初めて見つかった命令列に対する出現回数記録処理が完了する。
処理1211が終了後、処理1212に遷移する。
【0071】
次に処理1213では、同一命令列出現回数カウント部1033は、ptが指し示す命令列に対応するtargetが見つかっているため、targetの出現回数記録領域の値に1加算した値を、targetの出現回数記録領域に代入し、出現回数を更新する。
代入処理終了後、処理1212へ遷移する。
以上で、ptが指し示す位置から開始される命令列に対する出現回数更新処理は完了する。
そのため、処理1212では、同一命令列出現回数カウント部1033は、次に処理すべき命令列の命令ID部にptをシフトさせる処理を行う。
シフトするサイズに関しては、処理1205で取得したパラメータ部のサイズ情報から算出する。
シフトが完了後、新たなptに対する処理を実施するため処理1203へ遷移する。
【0072】
以上で説明した命令ID別出現回数記録テーブルの作成・初期化処理は命令列に単一の命令ID部のみ含まれていることを前提としているが、命令列は前述の通り複数の命令ID部を含む事が想定されている。
そのため、複数の命令ID部を含む命令列の出現回数の集計を実施する必要があるが、単一の命令ID部のみを前提とした方法を再帰的に繰り返す事で実現可能である。
以降では複数の命令ID部を含む事が可能である事として説明を行う。
【0073】
例えば、複数回出現した命令列に対して、その命令列の直後以降を一つの命令データと見なし、同様の集計方法を実施し、その結果を組み合わせる事で複数の命令ID部を含む命令列の出現回数の集計が実現される。
その際に、複数回出現した命令列が各命令データのどの位置に出現したかを示す情報を格納する、出現位置情報リストを命令ID別出現回数記録テーブルの要素のデータ構造に追加し、その出現位置を記録する処理を処理1213および処理1210に追加し、処理1607で圧縮対象命令テーブルに上記出現位置情報リストも併せて登録する処理を追加する事で、それ以降の処理でもどの命令データ中のどの位置から圧縮対象命令列が記述されているかを把握可能となり、上記再帰処理を同一圧縮対象命令列が開始される位置からの処理に限定が可能となり、処理効率を向上させる事も可能である。
以降の説明では出現位置情報リストが命令ID別出現回数記録テーブルおよび、圧縮対象命令テーブルの要素に含まれるものとして説明を行う。
【0074】
また、以上で説明した出現回数集計方法は一例であり、それ以外の手順で集計したとしても構わない。
【0075】
図16は図11における、圧縮対象命令列テーブル生成処理の具体的な一例である。
圧縮対象命令列テーブル生成処理は、図48に示した圧縮対象命令テーブル生成部1034により行われる。
【0076】
圧縮命令データは処理対象となる一つ以上の命令データ中の全ての命令列の中から、サイズ削減率などを考慮し、一つ以上の命令列を、少なくともその命令列よりもサイズの小さいメタ命令で置き換えることによって全体として命令データよりもサイズを小さくした命令データである。
メタ命令は圧縮命令データ実行装置104で解釈する場合、対応する命令識別番号、もしくは付随するパラメータ部の値等によって、そのメタ命令が存在する位置の本来の命令列を識別し、メタ命令を実行する代わりに本来の命令列を実行する。
そのため、圧縮命令データには前述のメタ命令で置換された命令データと共に、メタ命令に対応する命令識別番号、もしくは付随するパラメータ部の値等をキーとして本来の命令列を知るための、情報が必要となる。その情報として圧縮対象命令列テーブルを生成するのが圧縮対象命令列テーブル生成処理である。
【0077】
処理1601では、圧縮対象命令テーブル生成部1034が、圧縮対象命令列テーブル(以下、tableと表記)の実体を生成する。
このテーブルは、最終的に幾つの命令列が集計されたのか未知の場合には可変長配列やリスト構造などで実現する。
ここではリスト構造を仮定し説明を行う。実体生成完了後に処理1602へ遷移する。
【0078】
図17は圧縮対象命令列テーブルの要素に関するデータ構造の一例を図示している。
【0079】
命令列記憶領域では、登録されている命令列もしくはその命令列に関する情報を記録する領域である。
重要度記録領域は、その命令列をメタ命令に置き換えた場合の圧縮可能なサイズなどから判断し算出する重要度を記録する領域である。
最終的に全ての命令列に対する重要度を算出し、重要度の高い順に圧縮対象とする命令列を決定する。
なお、圧縮対象命令列テーブルは、図48の命令圧縮時情報記憶部1037を用いて作成される。
【0080】
処理1602では、圧縮対象命令テーブル生成部1034は、同一命令列出現回数カウント処理で生成した命令別出現回数記録テーブルからテーブルの先頭要素(以下、countと表記)を取り出す処理を行う。
取り出し完了後、処理1603に遷移する。
【0081】
処理1603では、圧縮対象命令テーブル生成部1034は、countのパラメータ別出現回数記録テーブルから参照可能なパラメータ別出現回数記録テーブルから未処理要素の有無によって条件分岐を行う。
未処理要素が存在しない場合には、countの要素全てを処理完了したため、新たな処理対象を探すため処理1608へ遷移する。
逆に未処理要素が存在する場合にはその未処理要素を処理するため処理1604へ遷移する。
【0082】
処理1604では、圧縮対象命令テーブル生成部1034は、その未処理要素(以下、targetと表記)を取得し、処理1605へ遷移する。
【0083】
処理1605では、圧縮対象命令テーブル生成部1034は、targetが対応する命令列をメタ命令で置き換えた場合に圧縮効果があるか判定を行う。
圧縮効果は、例えば以下の不等号式が成立する場合には圧縮効果があると判定する。
[命令列長]−[メタ命令長]>0
判定処理終了後、処理1606へ遷移する。
【0084】
処理1606では、圧縮対象命令テーブル生成部1034は、処理1605の判定結果をもとに、targetが対応する命令列を圧縮対象命令列テーブルに登録するかどうかを判定し分岐処理を行う。
通常は処理1605で圧縮効果があると判定された場合には、テーブル登録を行うため、処理1607へ遷移し、圧縮効果がないと判定された場合には次の要素を処理するため、処理1603へ遷移する。
【0085】
処理1607では、圧縮対象命令テーブル生成部1034は、targetが対応する命令列に関して圧縮対象命令列テーブルへ情報登録を行う。
この際に、その命令列の重要度を算出し、その結果と共に一つの要素を構成し登録を行う。
ここで重要度は例えば以下の式で算出した値等が考えられる。
ここでメタ命令辞書データ登録情報長とはメタ命令で置き換えた場合、メタ命令から本来の命令列を取り出すための情報源となるメタ命令辞書データにこの命令列を登録した場合のデータ長を意味する。
([命令列長]−[メタ命令長])×[命令列出現回数]−[メタ命令辞書データ登録情報長]
【0086】
処理1608では、圧縮対象命令テーブル生成部1034は、現在のcountに登録されているパラメータ別出現回数記録テーブル要素は全て処理完了しているため、次の処理対象となる未処理要素の有無で分岐処理を行う。
未処理要素が存在する場合には、処理1609へ、存在しない場合には処理1610へ遷移する。
【0087】
処理1609では未処理要素が存在するため、圧縮対象命令テーブル生成部1034は、その要素をcountとして処理1603へ遷移する。
【0088】
処理1610では未処理要素が存在しない、つまり全ての命令列に関して処理が完了したことを意味するため、圧縮対象命令テーブル生成部1034は、tableから最終的な圧縮対象命令列テーブルを生成する。
メタ命令で置換可能な命令列の個数は通常、上限が設けられるため、その上限数をここでNとした場合、table内の全要素を重要度でソートし、上位N以下は圧縮対象から排除して、残ったN個の命令列を最終圧縮対象命令列として確定し、各要素から重要度を削除したtableをメタ命令辞書データとし、処理を完了する。
【0089】
図18は、図11における、命令データ圧縮変換処理の具体的な一例である。
本処理では圧縮対象命令列テーブル生成処理で生成したメタ命令辞書データに登録された命令列を処理対象となっている全ての命令データから検索し、その命令列を適切なメタ命令で置き換える処理を行う。
【0090】
以下ではメタ命令の具体的な例を挙げる。
メタ命令の具体的な例として命令セットの未使用命令識別番号空間を利用する例を挙げる。
本実施の形態では、命令識別番号は1バイトの固定長と仮定しており、命令識別番号は0から255、16進数表記では0x00から0xFFまでの256通りの番号を割り振る事が可能である。
そのうち、例えば0xF0から0xF9までが具体的な通常命令が割り当てられていない未使用命令識別番号であったとすれば、その0xF0から0xF9までをメタ命令用として予約する事でメタ命令を0xF0から0xF9で表現する事が可能である。
この方法であればメタ命令は1バイトで表現可能となる。
その場合、メタ命令辞書データの要素数は最大で10個までとなり、0xF0は先頭要素の命令列に対応し、0xF1は2番目の命令列に対応といった方法でメタ命令と圧縮対象命令列の対応を決定する事が可能となる。
【0091】
未使用命令識別番号空間が連続していない場合でも、同様に未使用命令識別番号にメタ命令を割り振る事も可能である。
その場合の一つの方法として未使用命令識別番号のうち、一つをメタ命令用として定義し、メタ命令にパラメータ部を少なくとも1つ持たせ、そのパラメータにメタ命令辞書データ中の対応する圧縮対象命令列が格納されている要素のインデックス値を保持させて、対応付ける方法が考えられる。
この方法の場合にはメタ命令長は2バイト以上となる。
【0092】
その他に、メタ命令辞書データに圧縮対象命令列と組にして対応するメタ命令の命令識別番号の値を登録し、メタ命令を圧縮命令データ実行装置で処理する際にはメタ命令辞書データから処理対象のメタ命令と同じ値を持つ要素を検索して対応付ける事も可能である。
この方法の場合にはメタ命令長は1バイトとなるが、上記の通り圧縮命令データ実行装置で処理する際の対応する命令列の検索処理が必要となる。
【0093】
次に、メタ命令の具体的な例として命令セットの使用済み命令識別番号空間のうち、処理対象となっている命令データ全てで使用されることがなかった命令識別番号をメタ命令として利用する例を挙げる。
この方法では命令識別番号空間の全てが既に命令が割り振られている場合や、未使用命令識別番号が存在するが、その個数以上に圧縮対象メタ命令が存在する場合に、未使用命令識別番号の個数を超えてメタ命令を定義する場合に有効である。
この方法の場合にはどの命令識別番号をメタ命令に置き換えたのかを示す情報をメタ命令辞書データ等の圧縮命令データ中に記録する必要がある。
【0094】
また、メタ命令辞書データに登録される命令列が決められた長さの命令長に限定できるとは限らない。
そのような登録される命令列の命令長が不定の場合には登録時にその命令の命令長も併せて登録する。
【0095】
図11における、命令データ圧縮変換処理の具体例を、図18を用いて説明する。
なお、命令データ圧縮変換処理は図48に示した命令データ圧縮変換部1035により行われる。
【0096】
処理1801では、命令データ圧縮変換部1035は、処理対象の全ての命令データの中から未処理の命令データを一つ選択し、その命令データの先頭の命令部をポインタptで指し示し、処理1802に遷移する。
【0097】
処理1802では、命令データ圧縮変換部1035は、ptが指し示す内容は命令データの終端であるかどうかを判定し、その結果によって分岐処理を行う。
終端である場合には、その命令データに記述されている命令列全てを処理した事を意味し、処理1803に遷移する。
終端ではない場合には、その命令データには未処理命令列が存在し、その先頭はptが指し示す命令列である事を意味し、処理1804に遷移する。
【0098】
処理1803では、命令データ圧縮変換部1035は、処理対象の全ての命令データの中に未処理の命令データが存在するか判定し、その結果によって分岐処理を行う。
未処理命令データが存在する場合には、その未処理命令データを処理するため、処理1801に遷移する。
一方、未処理命令データが存在しない場合には、全ての処理対象命令データに対する処理を完了したことを意味するため、命令データ圧縮変換処理を終了する。
【0099】
処理1804では、命令データ圧縮変換部1035は、ptが指し示す位置からの命令列がメタ命令辞書データに登録されているか検索する。
検索が完了したら、処理1805に遷移する。
【0100】
処理1805では、命令データ圧縮変換部1035は、処理1804の検索結果によって分岐処理を行う。
検索の結果、一致する命令列が存在した場合には処理1806へ遷移し、一致する命令列が存在しない場合には処理1807に遷移する。
【0101】
処理1806では、命令データ圧縮変換部1035は、一致する命令列がメタ命令辞書データに存在しているため、ptが指し示す位置からの命令列はメタ命令で置換する。
置換終了後に処理1807に遷移する。
【0102】
処理1807では、ptが指し示す位置からの命令列は処理が完了しているため、命令データ圧縮変換部1035は、その命令列長分だけptをシフトさせ、次の命令列の先頭を指し示す様に更新する。
シフト処理完了後に処理1802に遷移する。
【0103】
以上で、処理対象となった全ての命令データをメタ命令辞書データに登録されている命令列をメタ命令で置き換えることで圧縮命令データを生成が完了する。
【0104】
図15は図9で取り上げた命令データに対し、図12で示した同一命令列出現回数カウント処理を適用した場合に最終的に生成される、命令ID別出現回数記録テーブルの一例である。
命令識別番号とパラメータ別出現回数記録テーブルの領域は、図13に示したものである。
そして、パラメータ別出現回数記録テーブルの要素であるパラメータ部と出現回数記録領域は、図14に示したものである。
【0105】
図19は、図15に挙げた命令ID別出現回数記録テーブルに基づき図16で示した圧縮対象命令列テーブル生成処理を実施した場合に生成される、圧縮対象命令列テーブルの一例であり、図20はその圧縮対象命令列テーブルに基づき生成されるメタ命令辞書データの一例である。
【0106】
この例ではメタ命令は連続する未使用命令識別番号空間を利用して定義される前提で、メタ命令長は1として生成している。
圧縮対象命令列テーブルで重要度が0よりも大きくなるのは命令列name(0)のみであり、その他はメタ命令辞書データに命令列を登録する事で増加するデータサイズ増加を考慮すると、サイズ削減効果がない事を意味している。
このメタ命令辞書データには命令列name(0)のみがメタ命令に変換する事で命令データのサイズ削減に寄与できる事を意味する。
【0107】
図21は、図9に示した命令データに対して図20に示したメタ命令辞書データに基づき図18に示した命令データ圧縮変換処理を実施した結果生成される、命令データの一例である。
【0108】
name(0)に対応する「0D00」がメタ命令「F0」に置き換えられることによって命令データとしては3バイトのサイズ削減となり、メタ命令辞書データは2バイトであり、全体として圧縮前の命令データと圧縮命令データを比較すると1バイトのサイズ削減となる。
ただし、メタ命令辞書データに登録される命令列の命令長が不定長である場合には、例えばメタ命令辞書データに命令長として1バイトの整数領域が追加する事があり、その場合にはサイズ削減効果はなくなる。
ただし、今回は説明を簡略化するため、処理対象となる命令データが小さいためであるが、一般的には例示した命令データよりもデータサイズは大きくなるため、出現回数が上がればサイズ削減効果が発生する。
【0109】
例えば、画像データの圧縮であれば、最小単位データサイズ(そのサイズ以下に分割して圧縮処理を行わないサイズ)はRGBの3バイト、単なるバイナリデータであれば1バイトの様に固定されているが、本実施の形態に係る命令データ圧縮装置103では、最小単位データサイズは固定値ではなく可変である。
つまり、命令識別番号とそれに付随する全てのパラメータを最小単位とするため、処理最小単位のサイズは可変(厳密には命令識別番号によってその位置での処理最小単位が決まる)である。
例えば、図39の様に、ある位置の命令識別番号が4バイト分のパラメータを伴う場合、その位置のデータの処理最小単位は5バイト(命令識別番号が1バイト固定を前提)となる。
つまり、先頭3バイトのみが圧縮命令列として登録され、残り2byteが非圧縮命令列に残るような命令列が分割されるような圧縮処理は行わない。
そして、次の位置の命令識別番号がパラメータを伴わない場合、その位置のデータの処理最小単位は1バイトとなる。
このように、本実施の形態に係る命令データ圧縮装置103では、命令列ごとに最小単位データサイズが変化する。
【0110】
このような方式を採用する理由は、後述するように、圧縮命令データ実行装置104での処理を簡略化するためである。
例えば図40の様に、ある命令識別番号と第1のパラメータ(Param1)は非圧縮命令列に含まれているが、その命令に付随する第2のパラメータ(Param2)、第3のパラメータ(Param3)は圧縮命令列に含まれている等の状況が発生すると、圧縮命令データ実行装置104ではプログラムカウンタ(PC)に相当する処理対象命令指示手段の位置情報を退避させるだけではなく、その命令に付随するパラメータのどこからが圧縮命令列に記述されているかを知る手段が新たに必要となる。
しかし、そのような手段を実現した場合には、実行時の処理負荷を増大させる欠点があり、その欠点を回避するため、必ず「ある命令列に記述されている場合、必ずその命令に付随するパラメータは同一の命令列に連続して記述される」事を保証するために上記の処理最小単位の決定方法を採用している。
【0111】
次に、圧縮命令データ実行装置104における命令データおよび圧縮命令データ実行処理の具体的手順を挙げて説明する。
【0112】
従来の圧縮された命令データをもとに処理を遂行するデータ処理装置は、圧縮された命令データから非圧縮状態の命令データを復元し、復元された命令データを用いて処理を遂行する。
しかし、その方法を用いた場合には圧縮状態の命令データと復元された命令データの両方をデータ処理装置内に記憶する必要があり、記憶領域を圧迫する。
また、命令データの圧縮処理が必須であり、命令データの実行処理時間が長くなる問題がある。
以上の問題を解決するため、本実施の形態に係る圧縮命令データ実行装置104は圧縮命令データからの命令データ復元処理を不要とし、処理時間短縮と記憶領域圧迫軽減を実現する。
【0113】
ここで、「圧縮された命令データから非圧縮状態の命令データを復元」することは、「メモリ上に確保されている圧縮命令データに対して何らかの処理を行い、メモリ上に確保した領域に圧縮前の命令データを再現する」行為を意味する。
つまり、従来のデータ処理装置では、「圧縮された命令データから非圧縮状態の命令データを復元」する際に、圧縮前のデータを再現するためのメモリ領域を確保しなければならない。
ただし、メモリに限定する必要はなく、上記記載の「メモリ」を「HDD」に置き換えても同じであり、何らかの上限のある資源を消費する事によって圧縮前のデータを再現する行為が必要となる。
メモリ空間を利用して説明すると、「復元」処理前にメモリ空間が図41の様に、ある領域が確保された状態でその中に圧縮データが存在している。
その状態で、何らかの処理を行う事で非圧縮データが再現され、その再現先として新たなメモリ領域を確保した状態である図42のような状態が復元後の状態となる。
本実施の形態に係る圧縮命令データ実行装置104は、「圧縮命令データを非圧縮状態の命令データに復元せずに圧縮命令データの実行が可能」であるため、図42の状態を作り出すことなく、図41の状態で処理を継続する。
このため、本実施の形態に係る圧縮命令データ実行装置104は、使用メモリ量の削減効果があり、例えば、組込み機器の様なリソース制約の厳しい環境で有効である。
【0114】
本実施の形態では、圧縮命令データ実行装置104を図22の構成とする事で圧縮命令データからの命令データ復元処理を不要とし、処理時間短縮と記憶領域圧迫軽減を実現する。
【0115】
図22において、命令データ格納装置アクセス部1041は、命令データを解釈・実行するために、実行対象となる命令データが格納されている命令データ格納装置106へのアクセスを行う。
つまり、命令データ格納装置アクセス部1041は、命令データ圧縮装置103により命令列がメタ命令に置き換えられている命令データを命令データ格納装置106から入力する。
また、命令データ格納装置アクセス部1041は命令データの入力とともに、命令データ格納装置106からメタ命令辞書データを入力する。
命令データ格納装置アクセス部1041は、プログラム入力部及びメタ命令辞書データ入力部の例である。
【0116】
命令実行時情報記憶部1042は、実行対象となる命令データを実行する際に保持すべき情報を記憶する。
命令実行時情報記憶部1042は、処理対象命令位置記憶部1043、処理対象命令位置退避部1044、メタ命令辞書データ保持部1045に大別される。
【0117】
処理対象命令位置記憶部1043は、処理対象命令位置情報を記憶する。
処理対象命令位置情報は、後述の命令列解釈・実行部1046で実行対象の命令データのどの位置の命令列が現在の処理対象であるかを示すための情報であり、処理対象命令位置情報は前述のプログラマブルカウンタ(PC)に相当する。
つまり、命令実行時情報記憶部1042は、命令データの実行時に、指定する位置を移動させながら実行対象とすべき命令データ内の位置を指定する。
処理対象命令位置記憶部1043は、プログラム位置指定部の例である。
【0118】
処理対象命令位置退避部1044は、処理対象命令位置記憶部1043で記憶している処理対象命令位置情報を一時的に退避(一時的に保存)するための手段である。
より具体的には、処理対象命令位置退避部1044は後述の命令列解釈・実行部1046がメタ命令辞書データ内のメタ命令に対応付けられている命令列を実行している間はメタ命令の直後の位置の情報を保存し、メタ命令辞書データ内のメタ命令に対応付けられている命令列の実行が完了した際に、保存している位置の情報を処理対象命令位置記憶部1043に通知し、通知後に、保存している位置の情報を削除する。
そして、処理対象命令位置記憶部1043は、処理対象命令位置退避部1044から通知された位置を次に命令列解釈・実行部1046が実行対象とすべき命令データ内の位置として指定する。
処理対象命令位置退避部1044は、プログラム位置退避部の例である。
【0119】
メタ命令辞書データ保持部1045は、命令データ格納装置アクセス部1041が入力したメタ命令辞書データを保持する。
【0120】
命令列解釈・実行部1046は、実行対象となる命令データを実際に解釈する。
命令列解釈・実行部1046は、メタ命令解釈・実行部1047を備える。
メタ命令解釈・実行部1047は、通常の命令以外のメタ命令を解釈・実行する。
命令列解釈・実行部1046は、処理対象命令位置記憶部1043の処理対象命令位置情報により指定されている指定位置の内容がメタ命令であるかどうかを判断し、指定位置の内容がメタ命令でない通常の命令列である場合には、そのまま指定位置の命令列を実行する。
一方、指定位置の内容がメタ命令である場合は、命令列解釈・実行部1046は当該メタ命令の直後の位置の情報を処理対象命令位置退避部1044に保存させ、メタ命令辞書データ内の当該メタ命令に対応付けられている命令列をメタ命令解釈・実行部1047が実行する。
なお、命令列解釈・実行部1046は、プログラム実行部の例である。
【0121】
通常、データ処理装置で命令データを実行する場合、ある命令データから別の命令データを呼び出す事が可能であり、呼び出された命令データの実行が完了するまで、呼び出し側の命令データの実行は一次停止する。
この時、呼び出された側と呼び出し側の双方の命令データに対する処理対象命令位置情報を保持しておく必要がある。
そのため、処理対象命令位置記憶部1043は実行対象の命令データ一つに対して処理対象命令位置情報を記憶する領域が一つ必要となり、通常はスタック形式などで管理される。
同様に、本実施の形態に係る処理対象命令位置退避部1044で処理対象位置情報が記憶されている領域の情報を別の記憶領域に退避する場合も命令データ一つに対して退避先領域が一つ必要となり、同様にスタック形式などで管理される。
【0122】
図23は圧縮命令データ実行装置104における命令データおよび圧縮命令データの実行処理の具体的手順を図示したものである。
この処理が開始される前に、圧縮命令データ実行装置104は図5の実行前準備処理によって、実行対象の圧縮命令データ中の命令データの先頭位置を処理対象命令位置情報として処理対象命令位置記憶部1043により、既にその情報を保持した状態となる事を想定して説明を行う。
終端の判定方法は命令データの最後に終端を示す命令識別番号を記録し、その番号をもって判定する方法や、命令データ毎にデータサイズ情報を組みで保持しておき、処理対象命令位置情報の位置から命令データの先頭位置を引いた値が組みとして保持されているデータサイズ−1以上となるかどうかで判定する方法が考えられる。
【0123】
処理2301では、命令列解釈・実行部1046が、現在の処理対象命令位置情報が指し示すデータが終端であるかどうかで分岐処理を行う。
終端である場合には、この命令データに関する処理は全て完了したため本処理は終了する。
終端ではない場合には、現在の処理対象命令位置情報が指し示す命令列を実行するため、処理2302へ遷移する。
【0124】
処理2302では、命令列解釈・実行部1046が、処理対象命令位置情報が指し示す位置から始まる命令列の命令識別番号を取得し、どの命令を実行すべきか判定を行う。
この判定方法は例えばC++言語を用いて実装する場合には命令識別番号の値を条件としてswitch文で各々の命令の具体的処理に分岐させる方法等が考えられる。
この判定処理は処理2303に対応し、従来の命令セットで定義されている通常命令に対応する命令識別番号の場合には処理2305へ遷移し、メタ命令に対応する命令識別番号の場合には処理2304に遷移する。
【0125】
処理2303におけるメタ命令の判定方法に関して、いくつかの具体例を以下に挙げる。
【0126】
メタ命令が未使用命令識別番号空間に割り振る場合には、例えばswitch文のdefaultとして判定された命令識別番号は全てメタ命令として判定する事が考えられる。
また、特定の命令が割り振られているが、命令データ中では使用されていない命令識別番号を利用してメタ命令に再定義する場合には、通常の命令識別番号の判定処理の前に、メタ命令辞書データなどに記録されているメタ命令に置き換えられた命令識別番号情報に一致するか判定し、一致する場合にはメタ命令と判定し処理2304へ遷移し、それ以外の場合には通常の命令識別番号の処理判定に遷移する方法が考えられる。
【0127】
処理2304では、現在の処理対象命令位置情報が指し示す命令はメタ命令であるため、命令列解釈・実行部1046は、対応する圧縮対象命令列の実行準備処理を行う。
具体的には、命令列解釈・実行部1046は、現在の処理対象命令位置情報にメタ命令長分だけシフトさせた位置情報の値を、処理対象命令位置退避部1044内の退避領域に退避させる。
次に、命令列解釈・実行部1046が、メタ命令辞書データから、メタ命令に対応する圧縮対象命令列を検索し、その先頭位置を、処理対象命令位置記憶部1043の処理対象命令位置情報に上書きする。
以上の処理を行う事で処理対象命令位置情報はメタ命令に対応する圧縮対象命令列の先頭を指し示し、処理対象命令位置退避部1044にはメタ命令直後の命令の命令ID部のアドレスが格納される。
【0128】
以上の処理2304を実施する前後の圧縮命令データ実行装置104の具体的な状態例をそれぞれ図24、図25に図示する。
【0129】
処理対象命令位置記憶部1043は、前述のように、処理対象命令位置情報を記憶するための領域である。
処理対象命令位置退避部1044は、前述のように、処理対象命令位置記憶部1043に記憶されている処理対象命令位置情報を退避させるための領域である。
メタ命令辞書データ保持部1045は、前述のように、現在処理中の圧縮命令データに含まれるメタ命令辞書データを保持するための領域である。
【0130】
図24の処理対象命令位置記憶部1043の処理対象命令位置情報が指し示しているのは、処理2304を実行する直前はメタ命令の命令識別番号を持つ命令ID部である。
このメタ命令はメタ命令辞書データ中の圧縮対象命令列2に対応しているものとする。
また、処理対象命令位置退避部1044は、現在はメタ命令辞書データ中の圧縮対象命令列の実行を行っていないため、NULL参照となる。
【0131】
図25は、処理2304を実行した直後の状態を示している。
つまり、命令列解釈・実行部1046は、現在の処理対象命令位置情報にメタ命令長分だけシフトさせた値を処理対象命令位置退避部1044の退避領域に退避させる。
このため、図25では、処理対象命令位置退避部1044は、実行対象のメタ命令の次の命令列を指し示す。
また、命令列解釈・実行部1046が、メタ命令辞書データから、メタ命令に対応する命令列を検索し、その先頭位置を、処理対象命令位置記憶部1043の処理対象命令位置情報に上書きする。
このため、図25では、処理対象命令位置記憶部1043の処理対象命令位置情報は、メタ命令辞書データ内の圧縮対象命令列2を指し示す。
【0132】
処理2304完了後に命令列解釈・実行部1046は処理対象命令位置記憶部1043の処理対象命令位置情報を用いて再度処理2303を実行する事によって、圧縮命令データから非圧縮状態の命令データを復元する事なく、メタ命令辞書データ中の対応する圧縮対象命令列の先頭から処理を開始する事が出来る。
また、メタ命令に対応する圧縮対象命令列を実行している最中かどうかの判定はこの場合には処理対象命令位置退避部1044がNULL参照ではないかどうかで判定する事が可能である。
【0133】
処理2305では、命令列解釈・実行部1046は、処理2303で判定された命令識別番号に対応する具体的な処理を実行する。
処理対象がメタ命令であれば、メタ命令解釈・実行部1047が処理2305を行う。
実行完了後に処理2306に遷移する。
【0134】
処理2306では、処理対象命令位置記憶部1043が、処理2305で処理した命令の次に存在する命令ID部の位置に処理対象命令情報を更新し、次の命令を実行するための準備を実施する。
更新終了後に処理2307に遷移する。
【0135】
処理2307では、現在の処理対象がメタ命令辞書データ中の圧縮対象命令列である場合には、その命令列の実行が終了しているかどうかを判定し、終了している場合には処理2308へ遷移し、終了していない場合および処理対象は圧縮対象命令列ではなく通常の命令データである場合には処理2301に遷移する。
【0136】
圧縮対象命令列を実行しているかどうかは処理対象命令位置退避部1044を用いて判定する方法が考えられる。
例えばNULL終端であれば(処理対象命令位置退避部1044が初期値を保存している場合)、現在、退避されている処理対象命令位置情報が存在しないため圧縮対象命令列を実行中ではないと判断可能である。
圧縮対象命令列の実行終了判定は処理2301と同様に処理対象命令位置情報が終端となっているかどうかで判定する事が可能である。
また、圧縮対象命令列中にメタ命令がある場合には圧縮対象命令列の終端を意味するとして、メタ命令を処理対象命令位置情報領域で指し示している場合には終端であると判定する方法等も考えられる。
更に、実行中の圧縮対象命令列と共にその命令長情報が共にメタ命令辞書データに登録されている場合、その命令長情報と同じだけ圧縮対象命令列を処理した事を終了判定基準とする方法も考えられる。
メタ命令辞書データに登録されている圧縮対象命令列の命令長が固定長もしくは固定数の命令数の場合には、その固定長もしくは固定数の命令数だけ圧縮対象命令列を処理した事を終了判定基準とする方法も考えられる。
特に圧縮対象命令列に含まれる命令数が1に限定されている場合には、処理対象命令位置情報退避領域がNULLでない事を終了判定基準とする方法も考えられる。
このように、処理対象命令位置退避部1044に初期値以外の情報が保存されているか否か、命令データに含まれるメタ命令の連続数分だけメタ命令辞書データに示される命令列が繰り返し実行されたか否かにより、メタ命令に置き換えられた命令列の実行が完了したか否かを判断可能である。
【0137】
処理2308では、現在処理対象の圧縮対象命令列の実行が終了した状態であるため、メタ命令実行を終了し通常の命令列の実行に復帰する処理を行う。
具体的には、処理対象命令位置退避部1044が保存している位置情報を処理対象命令位置記憶部1043に通知し、処理対象命令位置記憶部1043が処理対象命令位置退避部1044から通知された位置を指定する。
また、処理対象命令位置退避部1044はNULL値を記憶する。
復帰処理完了後に処理2301へ遷移する。
【0138】
以上の処理を繰返し実行する事により、命令データ中のメタ命令からメタ命令辞書データ中の対応する圧縮対象命令列への実行を圧縮命令データから非圧縮状態の命令データに復元することなく、実行する事が可能となる。
【0139】
このように、本実施の形態によれば、データ圧縮装置において、命令列のデータサイズに応じて最小単位データサイズを変化させ、命令列ごとにメタ命令に置き換える。
このため、必ず1つの命令に付随するパラメータは同一の命令列に連続して記述され、圧縮命令データ実行装置においてメタ命令に置き換えられている命令列を実行する場合に、圧縮命令データ実行装置はメタ命令から命令と全てのパラメータを取得することができる。
これにより、圧縮命令データ実行装置は、パラメータのどこまでが圧縮されているかを判断する必要がなく、命令データ実行時のオーバーヘッドを軽減することができる。
【0140】
また、圧縮命令データ実行時に圧縮命令データから命令データを復元する処理を不要とし、これにより処理時間を短縮することができ、また、使用メモリ量を削減することができる。
【0141】
なお、以上までで説明した命令データおよび圧縮命令データ実行手順では圧縮対象命令列にメタ命令が含まれない(メタ命令がネストされていない)事を前提としている。
圧縮対象命令列にメタ命令が含まれる事を許容する場合には、処理対象命令位置退避部1044を現在処理対象の命令データに対して可変個数用意可能とするためにスタック構造などとする必要がある。
【0142】
また、処理2304で処理対象命令位置情報を退避する際に、その位置情報をスタック先頭にプッシュすると共に、処理2308で処理対象命令位置情報を復帰する際には、処理対象命令位置退避部1044のスタックの先頭要素をポップし、その位置情報を処理対象命令位置記憶部1043に代入する事となる。
また、処理2307で必要な圧縮対象命令列を実行しているかどうかの判定に関しては処理対象命令位置退避部1044のスタックの要素数が0であるかどうかで判定する事となる。
【0143】
以上、本実施の形態では、
少なくとも以下で説明する命令データ生成装置、命令データ圧縮装置と圧縮命令データ実行装置から構成されるシステムであり、
命令データ生成装置は、
ソースコードを解析し、規定されている命令セットに従って、命令データに変換する命令データ生成手段を備え、
命令データ圧縮装置は、
命令データ生成手段で生成された命令データを、命令データに出現するパラメータを含む命令および命令列の出現頻度に応じて、メタ命令に置き換え、置き換えた命令および命令列はメタ命令辞書データとして命令データの一部とすることによって、表現内容は同質で命令データの長さを短くなるように命令データを変換する命令データ圧縮手段を備え、
圧縮命令データ実行装置は、
命令データ生成装置もしくは命令データ圧縮装置が生成した命令データを格納する記憶手段と、
記憶手段に格納された命令データにおける次に処理すべき位置を示す処理対象命令指示手段と、
処理対象命令指示手段が保持する位置情報を一時的に保存する処理対象命令指示情報退避手段を備え、
メタ命令を処理する際に、処理対象命令指示手段の保持する位置情報を処理対象命令指示情報退避手段に保存し、処理対象命令指示手段にメタ命令に対応する命令もしくは命令列の先頭の位置情報を保存するメタ命令開始手段を備え、
圧縮命令データで表現される処理内容に従い、処理を遂行する命令データ圧縮および実行システムを説明した。
そして、圧縮命令データ実行装置は圧縮命令データを非圧縮状態の命令データに復元せずに圧縮命令データの実行を可能であり、復元処理分の処理負荷軽減および、非圧縮状態の命令データを記憶するためのメモリ使用量を削減する事が出来ることを説明した。
【0144】
また、本実施の形態では、メタ命令は以下のうち少なくとも一つで定義されることを説明した。
命令セットの特定のオペコードを一つ割り振られている。
命令セットにおいて未定義のオペコード空間を全て、もしくはその一部をメタ命令として割り振る。
ソースコードから命令データを生成した際に命令セットとして定義されているが、命令データには出現しなかった命令のオペコード空間の全て、もしくはその一部をメタ命令として割り振る(この場合には、圧縮命令データの一部として命令セットのうちどの命令がメタ命令であるかを示す命令セット・メタ命令対応情報を新たに追加する)。
【0145】
また、本実施の形態では、
圧縮命令データ実行装置は、メタ命令辞書データに格納されている命令もしくは命令データ内の命令を実行しているかを判定するメタ命令実行判定手段を備え、判定方法は処理対象命令指示情報退避手段に指示情報が退避されているか否かで判断する事を説明した。
これにより、メタ命令辞書データに登録されている命令データを実行しているかどうかの判定が最小限の処理で実現できる。
【0146】
また、本実施の形態では、
圧縮命令データ実行装置は、メタ命令辞書データ内命令もしくは命令列の終了を判定するメタ命令実行終了判定手段を備え、メタ命令実行終了判定手段が終了と判定した場合に、処理対象命令指示情報退避手段が保持する位置情報を処理対象命令指示手段に復帰させ、処理対象命令指示情報退避手段の内容を初期化するメタ命令終了手段を備える事を説明した。
つまり、メタ命令辞書データに登録されている命令データの実行から、それまで実行していた命令データへの復帰方法を説明した。
【0147】
また、本実施の形態では、圧縮命令データ実行装置の備えるメタ命令実行終了判定手段では以下の基準のうち少なくとも一つを用いる事を説明した。
処理対象命令指示情報退避手段が保持する情報が初期値でない事、
メタ命令開始手段実行後、特定回数命令実行処理が行われた事、
メタ命令辞書データに、命令もしくは命令列と共に登録されているその命令長情報と同数だけメタ命令開始手段実行後、特定回数命令実行処理が行われた事。
【0148】
実施の形態2.
ここまでで説明した命令データ圧縮装置103および圧縮命令データ実行装置104では、圧縮命令データ実行装置104のアーキテクチャは一般的なCPUであっても適用可能である。
しかし、一般的なCPUアーキテクチャではパラメータ部に与えられる値はレジスタ指定、即値、変位値などが記述され、通常は同じ命令識別番号であったとしても、これらの値が異なる場合、ここまでで説明した方法では異なる命令として扱うため、圧縮する事が出来ない。
【0149】
また、一般的にソースコード上では同じ処理であっても扱うデータの型によって命令識別番号が異なる処理として扱われる。そのため、この場合もここまでで説明した方法では異なる命令として扱うため、圧縮する事が出来ない。
【0150】
本実施の形態では、これらの点に対応する圧縮命令データ実行装置104および命令セットを説明する。
【0151】
前述の通り通常は命令で取り扱うデータの型によって処理する内容が異なってくる関係で、データ型が異なる場合は命令識別番号が異なるものとして定義されるか、命令識別番号はデータ型で共通であるがどのデータ型を扱うのかパラメータとして識別情報を与える。
そのため、ソースコード上は記述が同一だとしても扱うデータ型が異なるため生成される命令データは異なる結果となる場合があり、一致確率が下がり、圧縮率が低くなる。
そこで、本実施の形態に係る命令データ圧縮装置103及び圧縮命令データ実行装置104は取り扱うデータの値と共に、そのデータの型を示す型識別情報を組として一つのデータとして扱う。
これにより、命令識別番号に、もしくは型を示すパラメータを必要とする事なく、処理対象となるデータのデータ型を知る事が可能とする事によって、扱うデータ型によってソースコード上は同一処理であっても命令識別番号を異なるものとして定義する必要性や、データ型を指示するパラメータの必要性を排除する事が可能となる。
このような性質を持つ命令データ圧縮装置103及び圧縮命令データ実行装置104に対する命令セットとして、同一処理内容で扱うデータの型が異なる場合であっても、命令識別番号は全て同一とする命令セットを定義する事が可能となり、結果として命令列の一致確率を上げることが出来る。
【0152】
加算演算に関する命令を例に挙げて具体的に説明する。
この加算演算で取り扱い可能なデータ型が整数型、浮動小数点型、ブール型、文字列型の4種類があるとする。
その場合、通常の圧縮命令データ実行装置では、扱う型毎に加算演算に関する命令識別番号が定義される事になるため、加算演算に関してだけで4種類定義される事になる。
そのため、例えば、同型同士の加算演算が複数の箇所に存在したとしても、それぞれの加算演算で扱うデータ型が異なる場合には、全て異なる命令識別番号となり、同一命令列として扱う事が出来ない。
【0153】
例えば、加算命令Addが整数型に対してはAdd_iと定義され、浮動小数点型に対してはAdd_fと定義され、ブール型に対してはAdd_bと定義され、文字列型に対してはAdd_sと定義される場合を考える。
ここで、ソースコード中に、
a+b
という記述があった場合、変数a,bが共に整数型の場合は、例えば、
Add_i a,b
というバイトコードが出力される。
しかし、変数が浮動小数点型の場合には、
Add_f a,b
というバイトコードが出力され、整数型の場合と異なるバイトコードが出力される事になる。
同様に変数がブール型、文字列型の場合には、
Add_b a,b
Add_s a,b
となり、異なるバイトコードになる。
このように、ソースコード上は「a+b」と言う同一の表現であったとしても、命令が取り扱う種別(型)と依存した形式の命令セットの場合、a,bの型の違いによって生成される命令列は異なる命令列だとして扱われ、上記の型が異なる4種類の「a+b」を同一命令列であるとして圧縮対象とする事は出来ない。
【0154】
一方で、命令が型とは独立で定義されている場合、つまりAdd命令一つで任意の型のオペランドに対する加算命令を定義する場合、変数a,bが整数型、浮動小数点型、ブール型、文字列型どれであったとしても、
Add a,b
と同じバイトコードで表現可能である。
よって、命令が取り扱う種別(型)と独立した形式の命令セットの場合、a,bの型が何であっても、生成されるバイトコードは同一となり、4種類の「a+b」を同一命令列として圧縮対象とする事ができる。
よって、命令が型に依存している場合よりも、独立している場合の方が、命令が同じ命令になりやすいため、命令列の一致確率があがる(上記例のように型が4種類の場合には一致確率が4倍)。
【0155】
本実施の形態に係る命令データ圧縮装置103では、上記のAdd_i、Add_f、Add_b、Add_sのように、相互に命令コードの命令内容は共通するがパラメータ値のデータ型が異なっているため命令コードが異なっている命令列(以下、共通命令異データ型命令列という)を共通のメタ命令に置き換えることにより圧縮効率を向上させる。
本実施の形態に係る命令データ圧縮装置103の構成例は図48に示したものと同様である。
【0156】
命令データ格納装置アクセス部1031は、命令データ格納装置106から、共通命令異データ型命令列が2以上含まれる命令データを入力し、更に、共通命令異データ型命令列ごとにパラメータ値のデータ型が示される型識別情報(データ型情報)を入力する。
また、同一命令列出現回数カウント部1033は、命令ID部の命令内容(Add_i、Add_f、Add_b、Add_sのAdd部分)とパラメータ部との組み合わせが共通する2以上の共通命令異データ型命令列を抽出し、出現回数をカウントする。
圧縮対象命令テーブル生成部1034は、同一命令列出現回数カウント部1033のカウント結果に基づき、実施の形態1と同様に、圧縮対象命令テーブルを生成する。
更に、命令データ圧縮変換部1035は、実施の形態1と同様に、圧縮対象命令テーブルに従って命令列をメタ命令に置き換える。
このとき、命令ID部の命令内容とパラメータ部との組み合わせが共通する共通命令異データ型命令列がメタ命令の対象になっている場合は、これら共通命令異データ型命令列のそれぞれを共通するメタ命令に置き換える。
また、メタ命令辞書データ生成部1036は、実施の形態1と同様に、メタ命令辞書データを生成する。なお、共通命令異データ型命令列については、例えば、Add_i、Add_f、Add_b、Add_sをまとめた命令IDを記述する。
そして、命令データ格納装置アクセス部1031は、共通命令異データ型命令列がメタ命令に置き換えられた命令データと、メタ命令辞書データと、型識別情報(データ型情報)とを対応付けて命令データ格納装置106に出力する。
【0157】
また、本実施の形態に係る圧縮命令データ実行装置104の構成例も図22に示したものと同様である。
【0158】
命令データ格納装置アクセス部1041は、命令データ格納装置106から、共通命令異データ型命令列がメタ命令に置き換えられた命令データと、メタ命令辞書データと、型識別情報(データ型情報)とを入力する。
メタ命令解釈・実行部1047は、処理対象命令位置記憶部1043の処理対象命令位置情報により指定されている指定位置の内容が共通命令異データ型命令列を置き換えたメタ命令である場合に、当該メタ命令で置き換えられている共通命令異データ型命令列のパラメータ値のデータ型を型識別情報を参照して判別する。
そして、メタ命令辞書データ内の当該メタ命令に対応付けられている共通命令異データ型命令列を、判別したパラメータ値のデータ型に対応させて実行する。
【0159】
なお、上記の方式、つまり、命令データ圧縮装置103が命令データ、メタ命令辞書データとともに型識別情報を出力し、圧縮命令データ実行装置104が型識別情報を参照してオペランドの型を判別する方式に代えて、以下の方式を用いるようにしてもよい。
【0160】
命令セットは任意の命令体系でも効果があるが、より圧縮効率を向上させる方法の一つとして、命令で処理する対象となるデータ(以下、オペランド)の型に依存しない命令セット(以下、型自由命令セット)に対してプログラム圧縮装置を適用する方法が考えられる。
以下でオペランドの型に依存する命令セット(以下、型依存命令セット)と型独立命令セットでの一致確率の違いについて説明する。
双方の命令セットで取り扱い可能なデータ型として整数型と浮動小数点型があるとする。また、それらのデータに対して実施可能な処理の一つとして加算処理があるとする。
この時、型依存命令セットの場合、定義される命令は型に依存して定義されるため、
・整数値をオペランドに取る加算処理命令Add_i
・浮動小数点値をオペランドに取る加算処理命令Add_f
の二種類の加算処理命令が定義される事になる。
一方で、型自由命令セットの場合、定義される命令は型に依存しない定義となるため、
・任意の型のオペランドを取る加算命令Add
の一種類の加算処理命令が定義される事になる。
この時プログラムの一部に2変数をオペランドとして扱う加算処理の記述があった場合、型依存命令セットの場合には2変数の型が何であるかによって生成される加算処理命令は異なり、変数の型が整数型の場合にはAdd_iが生成され、浮動小数点型の場合にはAdd_fが生成される。
一方で、型自由命令セットの場合には、変数の型に依存せず必ずAddが生成される。
つまり、型自由命令セットでコード化することによって、生成される命令が異なる確率をその命令で対応可能な型の種類数だけ上昇させる効果がある事を意味している。
よって、プログラムをコード化する際に型自由命令セットに変換する事によって、コード中に出現する命令の一致確率を上昇させる事が可能となり、圧縮率を向上させる事が可能となる。
具体的に上記例の場合であれば処理対象の型が整数型と浮動小数点型の二種類であるため、型依存命令セットに対して型自由命令セットは2倍の命令一致確率になる。
ただし、型依存命令セットを処理対象とするプログラム実行装置と比較して、型自由命令セットを処理対象とするプログラム実行装置は命令自体に取り扱うオペランドの型情報が含まれていない分、命令実行時に処理対象となるオペランドの型を検証し、どの型に対する処理を実行しなければならないのかを逐次判断する処理が必要となる。
【0161】
つまり、本方式では、命令データ圧縮装置103が入力するプログラムには、オペランドが整数型であっても浮動小数点型であっても共通にAddという命令コードが記述されている。
このため、Add_iやAdd_fのように型依存命令セットで命令コードが記述されている場合に比べて、命令コードの一致確率が向上し、命令データ圧縮装置103における圧縮率を向上させることができる。
本方式では、命令データ圧縮装置103は、命令データとメタ命令辞書データのみを出力し、圧縮命令データ実行装置104は、命令データとメタ命令辞書データのみを入力する。
また、圧縮命令データ実行装置104において命令列解釈・実行部1046は、実施の形態1と同様にして、命令データ内のメタ命令に置き換えられている部分はメタ命令辞書データに示されている命令列を実行し、メタ命令に置き換えられてない部分はそのまま命令列を実行する。
なお、命令列の実行の際に(メタ命令に置き換えられている命令列の実行及びメタ命令に置き換えられていない命令列の実行の両者)、命令列解釈・実行部1046は、オペランドのパラメータ値のデータ型を判定し、判定したデータ型に対応させて命令コードの命令を実行する。
つまり、前出の例に従えば、Add命令を実行する際に、命令列解釈・実行部1046は、オペランドのデータ型が整数型なのか浮動小数点型なのかを判定し、整数型であれば整数型に対応させたAdd命令を実行し(Add_iを実行することに相当)、浮動小数点型であれば浮動小数点型に対応させたAdd命令を実行する(Add_fを実行することに相当)。
なお、ここでは、整数型と浮動小数点型という2種類のデータ型を対象にして説明したが、ブール型、文字列型を含めた4種類のデータ型に対して共通に型自由命令セットAddを用い、圧縮命令データ実行装置104においてオペランドが4種類のデータ型のいずれであるかを判定してAdd命令を実行することができる。
【0162】
本実施の形態によれば、例えば、4種類のデータ型に対応する演算処理全てを一つの命令識別番号で表現可能となり、扱うデータ型の違いに関係なく同一命令識別番号による命令列で表現可能となり、加算演算に関する命令列の一致確率は対応するデータ型の個数に対応して4倍に上がる。
【0163】
以上、本実施の形態では、
命令データ生成手段および命令データ圧縮手段において、命令セットとして命令が取り扱うデータの種別とは独立して定義されているセットを利用して命令データを生成する事を説明した。
つまり、整数型、浮動小数点型、文字列型の加算命令は通常Add_i、Add_f、Add_s等に異なる命令として実装されるが、動的型判定処理を圧縮命令データ実行装置に持つ事で加算命令を一つのAddにまとめることが可能となり、一致する確率が上がる事ができる。
【0164】
実施の形態3.
圧縮命令データ実行装置104は、自身が取り扱う全てのデータのサイズを同一固定長で表現可能とする事によって、メモリアドレスを実際のメモリアドレス値から、実行時のメモリ空間を配列として見た時の配列インデックス(オフセット表現)で表現する事が可能となる。
たとえばローカル変数のメモリ配置はそのコンテキスト内での変数出現順に先頭から順に積み上げて配置する方式をとり、データサイズを4バイト固定長とした場合、配列インデックスでメモリアドレスを表現する方法は実際のメモリアドレスで表現する方法と比較し、メモリアドレスの取りうる値の集合は4分の1となる。
とりうる値の集合が4分の1になっているため、これだけの条件だけであるコンテキスト下におけるある変数が別のコンテキスト下のある変数とメモリアドレスが一致する確率は4倍高くなり、パラメータ部の一致確率が上がることを示している。
【0165】
例えばある関数中に変数宣言として、
bool a,b;
int c;
と記述されているとする。
一般的に変数に割り当てるメモリサイズは型によって異なり、bool型の場合には1byte、int型の場合は4byte、short型の場合には2byteなどの様になる。
この場合、ローカル変数の場合にはスタック領域に宣言順に領域が確保され、アライメント等を考慮すると例えば図43の様なメモリ配置になる。なお、図43におけるハッチング部分は、使用されていないアドレスを示す。
変数aのアドレスは0x12340000となり、変数bのアドレスは0x12340001、変数cのアドレスは0x12340004と言った形で各変数の識別子はメモリアドレス(と同等、通常はベースアドレスからのオフセット)の値が利用される。
【0166】
この状況で変数cをスタックにプッシュする命令を生成した場合、
Name 4
となる。
ここで「4」はベースアドレスとなる0x12340000からの変数cのオフセット値となる。
同様の条件下で、
bool a;
int b;
bool c;
と変数宣言された場合には、図44の様なメモリ配置になり、変数a,b,cのアドレスは0x12340000,0x12340004,0x12340008となり、変数の宣言順が同じだとしても、その変数の前に宣言されている変数の型によってアドレス位置は影響を受け、変化してしまう。
そのため、同様に変数cをスタックにプッシュする命令を生成した場合、
Name 8
となり、上記の命令列とは異なるものとして生成される事になる。
よって、同じ宣言順序であったとしても変数の識別情報が異なるため、生成される命令列は同一にならない。
一方で、型に依存せず変数に割り当てるメモリサイズを固定(今回の例では4バイト固定長)とした場合には、上記2種類の変数宣言であったとしても、図45のようになり、各変数のメモリ領域は変数の宣言順によってのみ決める事が可能となる。
よって、変数cをスタックにプッシュする命令を生成した場合、どの変数宣言の場合であっても宣言順序が同じであるため、
Name 2
となり。
ここでパラメータの「2」は変数宣言順序から1引いた値となっている。
このような性質を有する事によって、ローカル変数の識別情報はメモリアドレスの32ビットから、4バイト固定長とした場合には30ビットで表現する事が可能になる。
2ビット分、つまり4分の1の集合で全ての変数を表現できるようになるため、単純に一致比較する集合の要素数が4分の1になるため、一致確率は4倍に上がる。
【0167】
本実施の形態に係る命令データ圧縮装置103は、上記のようにデータ型にかかわらず全てのパラメータ値に同一のメモリサイズが割り当てられている命令データを圧縮する。
本実施の形態に係る命令データ圧縮装置103の構成例は図48に示したものと同様である。
【0168】
本実施の形態では、命令データ格納装置アクセス部1031は、命令データの実行時にパラメータ値が格納されるメモリアドレスを管理するためのアドレス管理命令コード(上記の命令Name)とメモリアドレスがオフセット表現で指定されるアドレス指定パラメータ値(上記の「4」、「8」、「2」等)とが組み合わされているアドレス管理命令列(上記のName 4、 Name 8、 Name 2等)が含まれ、データ型にかかわらず全てのパラメータ値に同一のメモリサイズが割り当てられる命令データを入力する。
また、同一命令列出現回数カウント部1033は、アドレス管理命令コードとアドレス指定パラメータ値との組み合わせが共通する2以上のアドレス管理命令列を抽出し、出現回数をカウントする。
圧縮対象命令テーブル生成部1034は、同一命令列出現回数カウント部1033のカウント結果に基づき、実施の形態1と同様に、圧縮対象命令テーブルを生成する。
更に、命令データ圧縮変換部1035は、実施の形態1と同様に、圧縮対象命令テーブルに従って命令列をメタ命令に置き換える。
このとき、アドレス管理命令コードとアドレス指定パラメータ値との組み合わせが共通するアドレス管理命令列がメタ命令の対象になっている場合は、これらアドレス管理命令列のそれぞれを共通するメタ命令に置き換える。
また、メタ命令辞書データ生成部1036は、実施の形態1と同様に、メタ命令辞書データを生成する。
また、命令データ格納装置アクセス部1031は、アドレス管理命令列がメタ命令に置き換えられた命令データと、メタ命令辞書データとを対応付けて命令データ格納装置106に出力する。
なお、圧縮命令データ実行装置104の動作は、実施の形態1と同様である。
【0169】
以上、本実施の形態では、
命令データ生成手段および命令データ圧縮手段において、命令セットとしてメモリの位置を示すメモリアドレスが抽象化されたオフセット表現で定義されているセットを利用して命令データを生成する事を説明した。
つまり、通常はブール型、整数型、浮動小数点型で消費するメモリサイズが異なるため、メモリの位置指定は番地指定する必要があるが、全ての型を同一サイズとする事で、アドレスではなく配列のインデックスの様な番地よりも密度の低い値で表現可能となる。
そのため、メモリ参照用のパラメータが取りうる値の種類が少なくなり、一致する確率が上がる。
【0170】
実施の形態4.
本実施の形態では、実施の形態3と同様に、データ型にかかわらず全ての変数に対して同一のメモリサイズが割り当てられる場合に、あるコンテキスト下のある二つ以上のローカル変数に対するメモリアドレスを交換することによって、別のコンテキスト下にある変数とのメモリアドレスが一致する確率を上げることができる。
【0171】
本実施の形態に係る方式を図26、図27および図28を利用して説明する。
【0172】
図26は二つの類似するソースコードの一例である。
左側の関数funcAと右側の関数funcBはどちらも台形の面積を求める関数である。
しかし、funcAの場合には引数aおよび引数bが上底、下底で、引数cが高さを表すが、funcBの場合には上底、下底を表すのは引数cおよび引数bで、高さを表すのは引数aとなっている点で異なっている。
これらの関数を命令データに変換した結果の一例が図27である。
左側の命令データ2701が図26における関数funcAに対する命令データであり、右側の命令データ2707が図26における関数funcBに対する命令データである。
前述の通り、ローカル変数のメモリ配置はそのコンテキスト内での変数出現順に先頭から順に積み上げて配置する方式を取っており、変数の識別情報はその変数の出現順序に等しくなる。
そのため、変数a、bおよびcに対する識別情報は、関数funcAではそれぞれ命令データ中のパラメータ2701、パラメータ2702、パラメータ2703の0、1、2となり、関数funcBではそれぞれ命令データ中のパラメータ2704、パラメータ2705、パラメータ2706の2、1、0となる。
そのため、関数の処理内容は同一であっても、変数の出現順序が異なることにより、生成される命令データは完全一致せず、変数の識別情報がパラメータに含まれない命令のみが一致する部分一致にとどまっている。
しかし、この命令データでは変数aおよびcの識別情報がどちらかの命令データにおいて逆に設定される事で、関数funcAと関数funcBの命令データは完全一致させることが可能である。
【0173】
図28は、上記観察をもとに一旦命令データ圧縮装置103が生成した圧縮命令データを処理対象の命令データとして変数識別情報を変更する事によって、圧縮対象命令列のサイズ拡大を行う処理に関する処理手順の一例である。
この処理は例えば、図18の処理1803で処理対象となる命令データがないと判定された後に実施する等、処理対象のソースコードに対する圧縮命令データが全て生成された状況で実施する事を想定としており、必ずしも処理1803の直後で実施しなければならないわけではない。
なお、ここでは、図28の処理は、命令データ圧縮変換部1035が行うものとして説明するが、必ずしも命令データ圧縮変換部1035が行わなければならないわけではなく、例えば、同一命令列出現回数カウント部1033が行ってもよい。
【0174】
処理2801では、命令データ圧縮変換部1035は、処理対象となる全ての圧縮命令データで、少なくとも一つ以上の本処理を実施していない圧縮命令データがあるか否かを判定する処理である。
ここで、未処理の圧縮命令デーが存在しない場合には、処理対象が現状では存在しない事を意味するため、速やかに本処理を終了する。
逆に一つ以上の未処理圧縮命令データが存在する場合には処理2802へ遷移する。
【0175】
処理2802では、命令データ圧縮変換部1035が、処理2801で見つかった未処理の圧縮命令データの中から一つを選択し、処理済フラグを立て、以降の処理ではベースとなる圧縮命令データとして取り扱う準備を実施し、処理2803へ遷移する。
また、説明を簡単にするため、この圧縮命令データをAと表記する。
【0176】
処理2803では、命令データ圧縮変換部1035は、処理対象となる全ての圧縮命令データのうち、A以外でかつAと以降の処理を実施していない圧縮命令データがあるか否かを判定する。
ここで、未処理の圧縮命令データが存在しない場合には、Aに対する以降の処理を全ての圧縮命令データに対して実施済みである事を意味するため、処理2801へ遷移し、他の圧縮命令データをベースとして処理を実施する。
逆に未処理圧縮命令データが存在する場合には処理2804へ遷移する。
【0177】
処理2804では、命令データ圧縮変換部1035は、処理2803で見つかったAに対する未処理の圧縮命令データの中から一つを選択し、Aに対する処理済みフラグを立て、処理2805へ遷移する。
また、説明を簡単にするため、ここで選択した圧縮命令データをBと表記する。
【0178】
処理2805では、命令データ圧縮変換部1035は、処理対象となった圧縮命令データAおよびBに関して、相互に変数識別情報がパラメータ部に記載されている箇所は比較対象外、つまり任意の値であっても一致しているものと仮定して、一致箇所の判定を実施し、判定結果全てを合わせてXと表記する。
この際の一致判定はどのような基準を用いて一致判定を行っても構わないが、通常は命令データ中における一致判定された領域の合計サイズが最大となる基準や、一致判定された領域のうち、個別に最大サイズになるような基準を用いる。
例えば、図27における二つの命令データがAおよびBに対応するものと仮定した場合、パラメータ2701からパラメータ2706までの6個のパラメータ部が変数識別情報であるため、そのパラメータ部は一致していると仮定して命令データ間の一致比較を行う。
そのため、この場合には先頭から最後まで連続して一致しているものとして判定される。
処理終了後に、処理2806へ遷移する。
【0179】
処理2806では、命令データ圧縮変換部1035は、処理2805で一致した領域中の変数識別情報が記載されているパラメータ部で不一致している箇所があるかを判定する。
この処理では例えば、図27における二つの命令データの場合にはパラメータ2701からパラメータ2706までが不一致パラメータ部として判定され、その結果を引き継ぎ、処理2807へ遷移する。
【0180】
処理2807では、命令データ圧縮変換部1035は、処理2806の処理結果を受け、不一致のパラメータ部における変数識別情報の値を変更する事によって、処理2805では判定対象外としたパラメータ部も含めて完全一致する箇所の判定を実施する。
例えば、図27の二つの命令データに対して本処理を適用した場合、パラメータ2701とパラメータ2703の値を入れ替える事によって、双方の命令データが最初から最後まで完全一致する。
処理2807では変数識別情報の値変更と共に、その変更によって、命令データが変更前の処理と矛盾が生じていないか検証を行い、矛盾が生じた場合には他のパターンでの変更を試み、矛盾が発生しない変更パターンが出るまで、もしくは変更パターンがなくなるまで繰返し、変更を行う。
矛盾の発生しない変更パターンが見つかった場合、もしくは変更パターンがなくなった場合には処理2808へ遷移する。
【0181】
処理2808では、命令データ圧縮変換部1035は、処理2807で行った変更の前後の圧縮命令データ間で比較を行い、変更後の圧縮率が向上しているか判定を行う。
圧縮率が向上している場合には処理2810へ遷移し、圧縮率が向上していない、もしくは既に変更パターンがなくなっている場合には処理2809へ遷移する。
【0182】
処理2809では、命令データ圧縮変換部1035は、処理2807で行った変更では圧縮率が向上しなかったため、他の変更パターンで圧縮率が向上するか再実施するため、他の変更パターンが存在するかチェックする。
他の変更パターンが存在する場合には処理2807へ遷移し、他の変更パターンが存在しない場合には処理2803へ遷移する。
【0183】
なお、処理2807、処理2808、処理2809では最初に圧縮率が変更前よりも向上する変更パターンが見つかると処理2810へ遷移しているが、全ての変更パターンに対して処理2807を適用し、最も圧縮率の向上が大きかった変更パターンを持って処理2810へ遷移する方法も考えられる。
【0184】
処理2810では、命令データ圧縮変換部1035は、処理2808で圧縮率が向上したと判定された変更パターンをAとBに適用した場合に、その圧縮対象命令列を用いて他の命令データを圧縮した場合の圧縮命令データの生成および、圧縮率の算出を行う。
圧縮命令データ生成および圧縮率算出が終了後、処理2811へ遷移する。
ここで圧縮率は単純に全体の命令データのサイズ算出だけでも構わない。
【0185】
処理2811では、命令データ圧縮変換部1035は、処理2810で求めた圧縮率をもとに全体での圧縮率向上が達成されているかを判定する。
ここで圧縮率が向上している場合には、処理2812へ遷移し、圧縮率が向上していない場合には処理2803へ遷移する。
【0186】
処理2812では、命令データ圧縮変換部1035は、処理2811で圧縮率が向上していると判定された変更パターンを命令データAおよびBに適用した結果生成される圧縮命令列を用いて、再度全ての命令データを圧縮した結果を現在の圧縮命令データとして採用する。
採用後、処理2803へ遷移し、全ての命令データに対して変数識別情報の変更で圧縮効率が向上するかどうかを検証し、最適な圧縮命令データの生成を完了させる。
【0187】
図27の二つの命令データに対し、図30に図示する本処理を適用した場合の圧縮命令データと、図29に図示する適用しなかった場合の圧縮命令データのサイズ比較を行う。
本処理を適用しない場合の圧縮命令データでは、3行目から4行目までのname 1およびaddが一つ目の圧縮対象命令列となり、6行目から9行目までのmul、number 2、div、returnが二つ目の圧縮対象命令列となり、具体的には図29が一例となる。
データ2901はデータ2701に対応する命令データ、データ2902はデータ2707に対応する命令データであり、本処理ではデータ2701の2行目と4行目の変数識別情報を置換した場合の結果を示している。
データ2093は命令データ圧縮装置によって圧縮対象命令列を登録しているメタ命令辞書データである。
圧縮前はデータ2701およびデータ2707のデータサイズは17バイトであり合計は34バイトとなる。
一方データ2901、データ2902およびデータ2903のデータサイズはそれぞれ10バイト、10バイト、13バイトで合計33バイトとなり、1バイト分のサイズ削減となる。
一方で本処理適用後のデータ3001、データ3002、データ3003のデータサイズはそれぞれ2バイト、2バイト、18バイトの合計20バイトとなり、圧縮前のデータサイズに対して14バイト、本処理適用前の圧縮命令データに対して13バイトの圧縮が実現され、変数識別情報を変更する事によって、一致する命令列の領域を拡大する事によって、圧縮率が向上させる事が可能である事を示している。
【0188】
このように、本実施の形態では、命令データ格納装置アクセス部1031は、命令データの実行時にパラメータ値が格納されるメモリアドレスを管理するためのアドレス管理命令コード(上記の命令name)とメモリアドレスがオフセット表現で指定されるアドレス指定パラメータ値(上記の「0」、「1」、「2」等)とが組み合わされているアドレス管理命令列(上記のname 0、name 1、name 2等)が含まれ、データ型にかかわらず全てのパラメータ値に同一のメモリサイズが割り当てられる命令データを入力する。
命令データ圧縮変換部1035は、特定のコンテキスト(命令列群)に含まれるアドレス管理命令のアドレス指定パラメータ値を、他のコンテキスト(命令列群)に含まれるアドレス管理命令のアドレス指定パラメータ値と一致するように書換え、特定のコンテキストにおける命令列の並びと他のコンテキストにおける命令列の並びを共通にし、特定のコンテキストの命令列と他のコンテキストの命令列を共通のメタ命令で置き換える。
これにより、圧縮率を向上させることができる。
【0189】
以上、本実施の形態では、命令データ圧縮手段において、あるメモリ領域のオフセット値を別のオフセット値で置き換えるメモリオフセット変換手段と、置き換え前と置き換え後で置き換えたメモリオフセットを含む命令もしくは命令列の出現頻度を比較する出現頻度比較手段とを備え、その比較結果に応じて置き換え前と置き換え後のどちらを圧縮命令データとして採用するべきかを判断する採用圧縮命令データ判定手段を備える事を説明した。
例えば異なる複数の関数で「a+b」という記述があった場合に変数のインデックスが違う場合(関数Aではそれぞれが0,1で表現されるが関数Bでは2,3で表現されているなどの場合)はこれに対応する命令データは異なる事になるが、どちらかの変数のインデックスを他方のインデックスに変更して、命令データを一致させる事が可能となる。
データサイズが一致していない場合にはメモリアドレスのアライメントを意識する必要があり、簡単には置き換えることが出来ないが、データサイズが同じならばアライメントを意識する必要が無くなる。
【0190】
実施の形態5.
以上までで説明してきた命令データ生成装置および命令データ圧縮装置は、例えばある一つのアプリケーションの挙動を記述した全てのソースコードに対して一つのメタ命令辞書データが生成される事を前提として説明を行ってきた。
しかし、そのアプリケーションの規模が大きくなるに従い、機能単位による記述内容の偏りなどが発生するなどによって、全てのソースコードに対して一つのメタ命令辞書データで圧縮命令データを生成する事が必ずしも最適な圧縮率を実現するとは限らない。
このため、全てのソースコードを何らかの基準(例えば、固定データサイズごと、機能ごと)を持って、独立した部分集合に分割し、部分集合毎に一つのメタ命令辞書データを生成し、それらを統合して全体での圧縮命令データを生成する事によって、圧縮率の向上が実現する事が可能となる。
【0191】
命令データの部分集合に対して一つのメタ命令辞書データを生成する場合、どの命令データではどのメタ命令辞書データを利用して圧縮命令データ実行装置が実行する必要があるかを示す情報を圧縮命令データに格納する必要がある。
一つの方法としては全てのメタ命令辞書データに対してメタ命令辞書データ識別番号を割り振り、各命令データの内部にその命令データで利用するメタ命令辞書データ識別番号を格納する方法などが考えられる。
【0192】
図31は、複数のメタ命令辞書データを圧縮命令データ生成時に生成した場合のデータ構造の一例を図示している。
【0193】
この圧縮命令データには4種類の命令データ3101、3102、3103、3104と、2種類のメタ命令辞書データ3105、3106が存在する。
メタ命令辞書データ3105のメタ命令辞書データ識別番号は#1、メタ命令辞書データ3106のメタ命令辞書データ識別番号は#2としている。
この例では、各命令データの先頭領域に1バイト分のその命令データに対応するメタ命令辞書データのメタ命令辞書データ識別番号を格納する対応辞書識別番号領域を新たに加え、その直後に命令列が続くデータ構造として表現している。
命令データ3101、3102、3103、3104の対応辞書識別番号はそれぞれ1、1、2、1となっており、これが意味する事は、圧縮命令データ実行装置104は命令データ3101、3102、3104を実行する場合には、メタ命令辞書データ3105を利用し、命令辞書データ3103を実行する場合には、メタ命令辞書データ3106を利用して、メタ命令に対応する圧縮対象命令列を検索する事を意味している。
【0194】
以上の様な複数のメタ命令辞書データを生成する圧縮命令データ生成処理を実行する場合、部分集合を決定するための基準としては、各命令データで出現する命令識別番号や命令列のヒストグラムなどの類似度や偏りを利用して、分布状況が類似する命令データで部分集合を形成するような方法が考えられる。
【0195】
このような部分集合を形成するためには、図4の命令データ圧縮装置103における命令データ圧縮処理の最初に実施し、その後の命令データ圧縮処理は生成された部分集合を一つの単位として処理を行い、全ての部分集合に対して処理完了後に、各命令データの先頭に対応するメタ命令辞書データ識別番号を格納し、関連付けを行うなどの圧縮命令データ生成処理方法が考えられる。
【0196】
図31に示す方式を実現するために、本実施の形態の命令データ圧縮装置103では、命令データ圧縮変換部1035が、命令データを複数個の部分集合に分けるとともに、部分集合単位で命令列をメタ命令に置き換える。
また、メタ命令辞書データ生成部1036は、部分集合ごとにメタ命令辞書データを生成し、対応するメタ命令辞書データの識別子を各部分集合に付加する。
また、本実施の形態の圧縮命令データ実行装置104では、命令データ格納装置アクセス部1041は、複数個の部分集合に分けられ、部分集合ごとに対応するメタ命令辞書データの識別子が示されている命令データを入力し、また、部分集合ごとに生成された複数個のメタ命令辞書データを入力する。
そして、命令列解釈・実行部1046は、命令データの実行の際に、部分集合ごとに、部分集合に示されている識別子に従い、対応するメタ命令辞書データを参照する。
【0197】
以上では、各命令データは1つのメタ命令辞書データのみを使用する例を説明しているが、各命令データが使用するメタ命令辞書データは1つに限らなくてもよい。
例えば、メタ命令のパラメータとして対応辞書識別番号を付加する事によって、一つの命令データ中に出現するメタ命令単位で利用するメタ命令辞書データを変更する事を可能としても構わない。
このような構成にする事は、命令データ全体で特に偏りがなく、一つのメタ命令辞書データに格納可能な圧縮対象命令列数をオーバーして圧縮可能な圧縮対象命令列が発生した場合等に、命令辞書データを複数に分割登録する事が可能となる利点がある。
【0198】
図32は、複数のメタ命令辞書データを圧縮命令データ生成時に生成した場合のデータ構造の更なる一例である。
ここでは、単一の命令データが二つのメタ命令辞書データを利用する例を示している。
圧縮命令データは一つの命令データ3201と二つのメタ命令辞書データ3202および3203で構成されている。
命令データ3201は少なくとも命令データ3101命令列を含み、その中に記載されているメタ命令には少なくとも二種類のパラメータが付随しており、一つは各メタ命令に対応するメタ命令辞書データを示すメタ命令辞書データ識別番号と、その対応するメタ命令辞書データ中のどの圧縮対象命令データが対応する命令列であるかを指定する、命令列識別番号を持つ。
二つのメタ命令辞書データにはそれぞれに唯一割り振られたメタ命令辞書データ識別番号が定義されており、ここではメタ命令辞書データ3202に割り振られたメタ命令辞書データ識別番号は#01、メタ命令辞書データ3203に割り振られたメタ命令辞書データ識別番号は#02としている。
命令データ3131命令列には少なくとも二つのメタ命令3204および3205が記述されている。
メタ命令3204とメタ命令3205は、それぞれ異なる命令列を対象にしているが共通の命令識別番号(例えば0xF0)が割り当てられているメタ命令である。
各メタ命令には前述の通り、パラメータ部にはパラメータが二種類存在し、一番目のパラメータがメタ命令辞書データ識別番号で、二番目のパラメータが命令列識別番号となっている。
メタ命令3204の一番目のパラメータの値は01であるため、このメタ命令に対応するメタ命令辞書データはメタ命令辞書データ識別番号が01であるメタ命令辞書データ3202である事が分かる。
一方で、メタ命令3205の一番目のパラメータの値は02であるため、このメタ命令に対応するメタ命令辞書データはメタ命令辞書データ識別番号が02であるメタ命令辞書データ3203である事が分かる。
圧縮命令データ実行装置104が命令データ3201を処理する際にメタ命令3204および3205を実行する場合、始めに一番目のパラメータを読み込み、その値に対応するメタ命令辞書データを選択する処理が必要となる。
次に二番目のパラメータを読み込み、先ほど選択したメタ命令辞書データから二番目のパラメータの値に対応する命令列識別番号を持つ圧縮対象命令列を取り出す。
それ以降の処理は前述の実行方式と同様に処理可能となる。
【0199】
図32に示す方式を実現するために、本実施の形態の命令データ圧縮装置103では、命令データ圧縮変換部1035が、1つのプログラム内の記述内容が相互に異なっている2以上の命令列にも同じメタ命令を割り当てて命令列をメタ命令に置き換える。
そして、メタ命令辞書データ生成部1036は、同じメタ命令に対して異なる命令列が対応付けられている2以上のメタ命令辞書データを生成し、対応するメタ命令辞書データの識別子を各命令列に付加する。
【0200】
また、図31では、2以上の部分集合において共通の命令列があれば共通のメタ命令に置き換えるようにしているが、図31の方式を2以上の命令データに適用してもよい。
つまり、命令データ圧縮変換部1035は、2以上の命令データにおいて共通の命令列がある場合は、共通の命令列に共通メタ命令を割り当てて、命令列をメタ命令に置き換えるようにしてもよい。
そして、メタ命令辞書データ生成部1036は、命令データ圧縮変換部1035のメタ命令への置き換え結果に基づき、2以上の命令データで共通に利用されるメタ命令辞書データを生成する。
この場合は、2以上の命令データに対して、1つのメタ命令辞書データが用いられる。
【0201】
以上、本実施の形態では、
一つ以上のソースコードから構成されるソースコード集合に対して命令データ圧縮装置を適用した際に、少なくとも二つ以上にソースコードを分類し、分類毎に一つのメタ命令辞書データを生成する事を特徴とする。また、分類を決定するための分類決定手段を備える事を説明した。
より具体的には、分類決定手段は「出現頻度の偏りが大きくなる」、「全体として圧縮命令データのサイズが最小となる」等の基準を利用する。
また個々のメタ命令辞書データを唯一に識別するための識別情報を割り振り、その命令辞書データが有効な命令列に対して、有効なメタ命令辞書データの識別情報を付加する。
複数のソースコードから複数のメタ命令辞書データを生成する事で、一致する命令列がソース毎に偏りがある場合や、一致する命令列が多すぎて一つのメタ命令辞書データに収まらない場合には、メタ命令辞書データを複数に分割する事で、効果的な圧縮命令データを生成できる。
【0202】
また、本実施の形態では、
圧縮命令データ実行装置において、命令列に付加されているメタ命令辞書データの識別情報を元に使用すべきメタ命令辞書データを選択するメタ命令辞書データ選択手段を備える事を説明した。
つまり、複数のメタ命令辞書データとメタ命令のひもづけ方法を説明した。
【0203】
本実施の形態では、
一つ以上のソースコードから構成されるソースコード集合に対して、命令データ圧縮装置を適用した際に、ソースコード全てに対して一つのメタ命令辞書データを生成する事を説明した。
つまりは、一つのソースコードで一つの圧縮命令データを生成するばかりではなく、複数のソースコードで一つの圧縮命令データを生成できることを特徴とする。複数ソースコードを一つの圧縮命令データとする事でより圧縮効率がよくなる。
【0204】
実施の形態6.
次に、本実施の形態では、命令データ圧縮処理の適用制約条件を削減する方式について説明を行う。
【0205】
通常プログラム言語で記述可能な処理シーケンスは直列処理だけではなく、条件分岐処理や繰返し処理といった実行制御処理も記述可能となっている。
条件分岐処理とは処理中に参照もしくは生成された何らかの値の内容によって命令データ中の特定箇所にジャンプする処理の事であり、C言語などではif文やswitch文などがそれに相当する。
また、繰返し処理とは条件分岐処理を応用した制御処理であり、ある値がある基準を満たす場合は特定箇所にジャンプし、ジャンプ先の箇所と基準判定箇所の命令列が基準を満たす間、繰返し実行する処理の事であり、C言語などではfor文やwhile文などがそれに相当する。
上記の様な非連続的な移動を行う命令の命令名をgotoと表記する事とする。また、命令gotoをジャンプ命令列又はジャンプ命令ともいう。
この命令gotoはパラメータ部に少なくとも一つのパラメータを持ち、そのパラメータはgotoからジャンプ先命令までのオフセット値であるジャンプオフセット値を持つとする。
命令gotoを伴った命令データを命令データ圧縮処理で処理すると、命令データの長さが変更される特性上、gotoからジャンプ先の命令までの間で長さが変更になった分を考慮してジャンプオフセット値を更新しないといけない。
そのため、今まで説明してきた圧縮命令データ実行装置および命令セットでは以下の状況に対応する事が出来ず、適切なジャンプ先にジャンプする事が出来ないため、以下の状況が発生した場合にはその状況を含む領域は命令データ圧縮装置103で圧縮しないように制限する必要があり、結果として圧縮効率が低下する。
【0206】
[状況1]
図46(a)に示すように、圧縮対象命令列に命令goto(501)が記述されており、そのジャンプ先(502)がその圧縮対象命令列の範囲外の非圧縮対象命令列に記述されている命令である場合である。
【0207】
[状況2]
図46(b)に示すように、圧縮対象命令列1に命令goto(501)が記述されており、そのジャンプ先(502)がその圧縮対象命令列の範囲外であり、他の圧縮対象命令列2に記載されている命令である場合である。
【0208】
[状況3]
図46(c)に示すように、非圧縮対象命令列に命令goto(501)が記述されており、そのジャンプ先(502)がある圧縮対象命令列に記載の命令である場合である。
【0209】
[状況4]
図46(d)に示すように、命令goto(501)が記載されており、その命令goto(501)とジャンプ先(502)の命令の間に圧縮対象命令列が少なくとも一つ以上存在する場合である。
【0210】
これらの状況は全て、命令goto(501)のパラメータに記載のオフセットをそのままにして圧縮して実行処理を行った場合、命令goto(501)とジャンプ先(502)の間にメタ命令に置換される命令列が存在するため、オフセット値が正しいジャンプ先を示さなくなるという問題が発生する。
本実施の形態では、この問題を解決するために新たにジャンプ処理に対応する命令としてジャンプ・イン命令とジャンプ・アウト命令を設ける。
【0211】
ここで、ジャンプ・イン命令とジャンプ・アウト命令の概要を説明する。
例えば[状況1]において、圧縮対象命令列内の命令goto(501)のジャンプオフセット値が最初20であるとする。
また、命令goto(501)の直後に10バイト分の圧縮対象命令列が存在し、この圧縮対象命令列がメタ命令に置き換えられると、5バイトに圧縮されるとする。
命令goto(501)のジャンプオフセット値である20バイトは、圧縮前の命令列長10バイトを前提にした20バイト先の位置をジャンプ先としている。
10バイトの圧縮対象命令列がメタ命令に置き換えられて5バイトに圧縮されると5バイト分の誤差が生じる。
そして、命令goto(501)のオフセット値を20バイトのままにして圧縮命令データ実行装置104が命令goto(501)を処理すると、次のプログラムカウンタは命令goto(501)の20バイト分先の命令を参照する事になるが、5バイト分の誤差が生じるため、本来のジャンプ先とは異なる不正な領域を参照する事になる。
このような問題を回避するために[状況1]に対応するジャンプ命令があった場合には、命令データ圧縮装置103が、データ圧縮時に命令goto(501)をジャンプ・アウト命令に置き換える。
ジャンプ・アウト命令及びジャンプ・イン命令は、メタ命令への置換によりジャンプオフセット値が正しいジャンプ先を指し示していないことを圧縮命令データ実行装置104に通知する命令である。
圧縮命令データ実行装置104は、ジャンプ・アウト命令を実行しようとするときには、現在の圧縮対象命令列は終了したものとして、非圧縮対象命令列に復帰させた直後に圧縮対象命令列の圧縮分を計算してジャンプオフセット値を調節して正しいジャンプ先の命令を探索する。
上記の具体例であれば、当初のオフセットは20で命令goto(501)直後の命令列は5バイト圧縮されるため(20−5)で15バイトがジャンプ・アウト命令のパラメータ(ジャンプオフセット値)となる。
【0212】
同様の考え方でジャンプ先(502)が圧縮対象命令列に存在する場合にはジャンプ・イン命令に置き換え、圧縮命令データ実行装置104はジャンプ・イン命令の実行の際に、圧縮量を計算しながらジャンプオフセット値を調節して正しいジャンプ先の命令を探索する。
【0213】
[状況4]のみ命令goto(501)はそのままで、パラメータのオフセット値のみを書き換える事で対応可能であるため、対応する新規ジャンプ命令は定義しない。
【0214】
このように、本実施の形態では、上記の[状況1]〜[状況4]に対応する新たな命令(ジャンプ・アウト命令、ジャンプ・イン命令)を命令セットに追加し、その命令(ジャンプ・アウト命令、ジャンプ・イン命令)を生成する事が可能な命令データ生成装置102、命令データ圧縮装置103、およびその命令を実行可能とする圧縮命令データ実行装置104を持つ。
そして、これにより、圧縮範囲を限定せずに全ての処理対象となる命令データに対して圧縮処理を実施する事を可能とする。
【0215】
図33は、命令データ圧縮装置103において、上記[状況1]から[状況4]に合致するジャンプ命令列(命令goto)を判定するためのジャンプ命令種別判定処理手順の一例である。
【0216】
本処理は図18における処理1801から処理1802に遷移する直前に実施する事を想定している。
なお、図33に出現する変数名で図18にも同名の変数名が出現するが、それぞれは独立した異なる変数である。
なお、図33の処理は、命令データ圧縮変換部1035が実行する。
【0217】
処理3301では、命令データ圧縮変換部1035は、処理対象となっている命令データの先頭命令を指すポインタを設定し、そのポインタをptとしている。
ポインタ設定完了後に処理3302へ遷移する。
【0218】
処理3302では、命令データ圧縮変換部1035は、処理対象となっている命令データの中に記述されている全てのジャンプ命令列に関する情報を登録するためのジャンプ命令情報リストを初期化する。
図34は、上記ジャンプ命令情報リストにおけるリスト要素のデータ構造の一例である。
少なくとも、その要素に記述されている情報がどのジャンプ命令列に対応するかを示す場所情報と、そのジャンプ命令列が少なくとも上記[状況1]から[状況4]のどの状況にある命令であるかを示す種別情報を要素に持つ。
処理3302でジャンプ命令情報リストの初期化が完了後に処理3303へ遷移する。
【0219】
処理3303では、命令データ圧縮変換部1035は、ptが命令コードの終端を指しているかどうか判定する。
その判定結果が終端を指している場合には、処理対象の命令データに対するジャンプ命令種別判定処理が完了したことを意味し、ジャンプ命令種別判定処理を終了する。
その時点でジャンプ命令情報リストには処理対象の命令データに記述されているジャンプ命令の情報が登録されている。
逆にその判定結果が終端を指していない場合には処理3304へ遷移し、命令データ中の未処理命令に関する処理を継続する。
【0220】
処理3304では、命令データ圧縮変換部1035は、ptが指し示す命令がジャンプ命令であるか判定する。
その判定結果がジャンプ命令ではない場合、処理3305へ遷移し、逆に判定結果がジャンプ命令である場合には処理3306へ遷移する。
【0221】
処理3305では、命令データ圧縮変換部1035は、ptが指し示す命令はジャンプ命令ではないため、ptが指し示す命令の直後の命令にptをシフトさせ、処理3303へ遷移する。
【0222】
処理3306では、命令データ圧縮変換部1035は、ptが指し示す命令はジャンプ命令であるため、そのジャンプ命令の情報をジャンプ命令情報リストに登録するための要素を生成し、その要素をジャンプ命令情報リストに登録する。
リストへの登録が完了後に処理3307へ遷移する。
【0223】
処理3307以降では現在ptが指し示すジャンプ命令の種別判定を行う。
処理3307では、命令データ圧縮変換部1035は、ジャンプ命令が圧縮対象命令列に含まれているかを判定する。
その判定結果が圧縮対象命令列に含まれている場合には処理3309へ、圧縮対象命令列に含まれていない場合には処理3308へ遷移する。
処理3307におけるジャンプ命令が圧縮対象命令列に含まれているかの具体的な判定方法は、例えば、対象となるジャンプ命令が圧縮対象命令列テーブルに登録されている圧縮対象命令列の一部であるかを判定する事で実現可能である。
この判定処理は、比較対象の圧縮対象命令列の要素に含まれる出現位置情報リスト中の処理対象の命令データに関する位置情報から始まる圧縮対象命令列が、ptが指し示す命令を含むか否かで判定可能である。
【0224】
処理3308では、命令データ圧縮変換部1035は、ptが指し示すジャンプ命令のジャンプ先の命令が圧縮対象命令列の中に含まれる命令かどうかを判定する。
ジャンプ先の命令の特定方法はジャンプ命令のパラメータ部に含まれるオフセット値をptに加算する事でジャンプ先の命令の番地を得る事が可能である。
また、その命令が圧縮対象命令列の中に含まれるかどうかは処理3307でジャンプ命令の圧縮対象命令列に含まれているかを判定した処理と同様の方法を用いる事で実現可能である。
処理3308の判定結果が圧縮対象命令列内の命令である場合には処理3311へ、逆に圧縮対象命令列内の命令ではない場合には処理3310へ遷移する。
【0225】
処理3309では、命令データ圧縮変換部1035は、ptが指し示すジャンプ命令のジャンプ先の命令が同じ圧縮対象命令列の中に含まれる命令がどうかを判定する。
この判定処理は処理3308で説明した判定方法を用いる事で実現可能である。
この判定結果が圧縮対象命令列内の命令である場合には処理3313へ、逆に圧縮対象命令列内の命令ではない場合には処理3312へ遷移する。
【0226】
処理3310では、ptが指し示すジャンプ命令およびそのジャンプ命令のジャンプ先の命令は圧縮対象命令列には含まれていないため、[状況4]もしくは通常状況(ジャンプ命令もジャンプ先も圧縮対象ではない状況)である通常ジャンプ命令種別である事が判明する。
そのため、命令データ圧縮変換部1035は、ジャンプ命令情報の種別情報に通常ジャンプ命令種別を示す値を設定し、処理3314に遷移する。
【0227】
処理3311では、ptが指し示すジャンプ命令は圧縮対象命令列には含まれないが、ジャンプ先の命令は圧縮対象命令列に含まれるため、[状況3]にある事が判明する。
そのため、ジャンプ命令情報の種別情報にメタ命令内ジャンプ命令種別を示す値を設定し、処理3314に遷移する。
【0228】
処理3312では、命令データ圧縮変換部1035は、ptが指し示すジャンプ命令は圧縮対象命令列に含まれるが、ジャンプ先の命令はジャンプ命令が含まれる圧縮対象命令列に含まれないため、[状況1]もしくは[状況2]にある事が分かる。
この二つの状況判定はジャンプ命令変更処理で実施するため、ここではジャンプ命令情報の種別情報に、メタ命令外ジャンプ命令種別を示す値を設定し、処理3314に遷移する。
処理3313では、ptが指し示すジャンプ命令およびそのジャンプ命令のジャンプ先の命令は同一圧縮対象命令列に含まれるため、[状況4]もしくは通常状況にある事が分かる。
この二つの状況判定はジャンプ命令変更処理で実施するため、命令データ圧縮変換部1035は、ここではジャンプ命令情報の種別情報に通常ジャンプ命令種別を示す値を設定し、処理3314に遷移する。
【0229】
処理3314では、命令データ圧縮変換部1035は、現在のジャンプ命令情報の場所情報にptが保持する番地を設定し、処理3305へ遷移し、次の命令に対する処理を繰り返す。
【0230】
以上の処理を行う事で処理対象となっている命令データ中に記述されている全てのジャンプ命令の種別判定が完了する。
【0231】
図35はジャンプ命令種別判定処理で求めたジャンプ命令種別情報をもとにジャンプ命令を書き換えるジャンプ命令変更処理の処理手順の一例である。
本処理は、図18における処理1801から処理1802に遷移する直前にあって、図33のフローの終了後に実施するなどが考えられる。
また、図35の処理は、命令データ圧縮変換部1035が実行する。
【0232】
ジャンプ命令変更処理の具体的内容の説明を行う前に、ジャンプ命令を書き換えるための新たな命令を以下で説明する。
【0233】
[状況1]および[状況2]に該当するジャンプ命令を書き換えるための新たな命令としてジャンプ・アウト命令を命令セットに新たに定義する。
このジャンプ・アウト命令は圧縮対象命令列からのジャンプ処理に対応するジャンプ命令であり、圧縮命令データ実行装置104で処理する際にその状況に特化した処理を実施するために必要となる。
換言すれば、圧縮命令データ実行装置104にジャンプ命令が含まれている圧縮対象命令領域内での圧縮量を計算しながらジャンプ先を探索させる命令である。
【0234】
[状況3]に該当するジャンプ命令を書き換えるための新たな命令としてジャンプ・イン命令を命令セットに新たに定義する。
このジャンプ・イン命令は非圧縮対象命令列から圧縮対象命令列へのジャンプ処理に対応するジャンプ命令であり、圧縮命令データ実行装置104で処理する際にその状況に特化した処理を実施するために必要となる。
換言すれば、圧縮命令データ実行装置104にジャンプ先が含まれる圧縮対象命令領域内の圧縮量を計算しながらジャンプ先を探索させる命令である。
【0235】
それ以外の状況におけるジャンプ命令に対する命令書換えは実施しないが、[状況4]に該当するジャンプ命令全てに関してはジャンプオフセット値となるパラメータ値を更新する。
【0236】
ここで説明した新たな命令セットはあくまでも一例であり、他の命令を定義する事で問題を解決する事も可能であるが、以下の説明ではジャンプ・イン命令およびジャンプ・アウト命令を用いた例を説明する。
【0237】
ジャンプ命令変更処理の具体的内容の説明に戻る。
処理3501では、命令データ圧縮変換部1035は、処理対象命令データのジャンプ命令情報リストから未処理の要素を取得し、以降の処理における処理対象要素とする。
要素取得処理完了後、処理3502へ遷移する。
【0238】
処理3502では、命令データ圧縮変換部1035は、処理3501で取得した未処理要素が存在するかどうかを判定する。
未処理要素が存在しない場合にはジャンプ命令情報リストの全ての要素を処理完了した事を意味するため、ジャンプ命令変更処理は終了する。
逆に未処理要素が存在した場合には、処理3503へ遷移する。
【0239】
処理3503では、命令データ圧縮変換部1035は、処理対象となっている要素の種別情報を読み取り、その内容によって処理分岐を行う。
種別情報が通常ジャンプ命令種別の場合には処理3504へ、メタ命令内ジャンプ命令種別の場合には処理3505へ、メタ命令外ジャンプ命令種別の場合には処理3506へ遷移する。
【0240】
処理3504では、命令データ圧縮変換部1035は、処理対象となる要素に対応するジャンプ命令とそのジャンプ命令でのジャンプ先の命令の間に圧縮対象命令列が存在しているかどうかを判定する。
判定の結果、圧縮対象命令列が存在する場合には処理3507へ遷移する。
逆に圧縮対象命令列が存在しない場合には処理3501へ遷移し、ジャンプ命令情報リストの次の要素への処理を継続する。
【0241】
処理3507では、命令データ圧縮変換部1035は、処理対象のジャンプ命令のパラメータ部に記載されているオフセット値を書き換える処理を行う。
処理3507で対象とするジャンプ命令は、ジャンプ先の命令との間に少なくとも一つ以上の圧縮対象命令列が存在している。
圧縮対象命令列は、命令データ圧縮変換でその箇所は、メタ命令で置き換えられることを意味しており、結果としてジャンプ命令とジャンプ先命令の間に存在する命令データ長が変更される。
よって、ジャンプ命令のパラメータ部に記載されているジャンプオフセット値をそのままにして圧縮命令データ実行装置104が実行した場合、適切な命令へのジャンプ処理が実施できなくなる。
処理3507は上記の問題を解消するために実施されるものであり、命令データ圧縮変換部1035は、処理対象のジャンプ命令のパラメータ部のジャンプオフセット値Offsetを以下の算出式のもと新ジャンプオフセット値NewOffsetを算出し、その結果をパラメータ部の新たなジャンプオフセット値として再設定する。
【0242】
【数1】
【0243】
なお上記算出式でxは処理対象ジャンプ命令からジャンプ先命令の間に存在する圧縮対象命令列を要素とする集合を意味し、length(x)は圧縮対象命令列xの命令列長を意味し、length(metaOP)はメタ命令の命令長を意味している。
つまり、上記算出式は圧縮前に求められたジャンプオフセット値から間に存在する全ての圧縮対象命令列の命令長を引き、置き換えられる個数分のメタ命令の命令長を加算し、圧縮命令データとした場合のジャンプオフセット値を算出している。
処理3507でジャンプオフセット値を更新完了後、処理3501へ遷移する。
【0244】
処理3505では、命令データ圧縮変換部1035は、メタ命令内ジャンプ命令種別に判定されたジャンプ命令に対する処理を実施する。
ここでは処理対象となるジャンプ命令の命令識別番号をジャンプ・イン命令の命令識別番号に書き換える。
書換え完了後に処理3504へ遷移する。
【0245】
処理3506では、命令データ圧縮変換部1035は、メタ命令外ジャンプ命令種別に判定されたジャンプ命令に対する処理を実施する。
ここでは処理対象となるジャンプ命令の命令識別番号をジャンプ・アウト命令の命令識別番号に書き換える。
書換え完了後に処理3504へ遷移する。
【0246】
以上で説明したジャンプ命令変更処理により、命令データ圧縮処理を実施する上で影響のあるジャンプ命令に対する命令を適切に更新する事が可能となる。
【0247】
次に、以上までに説明したジャンプ・イン命令およびジャンプ・アウト命令に書換えを行った圧縮命令データの実行処理方法について説明を行う。
図38はジャンプ・イン命令およびジャンプ・アウト命令を実行する機能を有する圧縮命令データ実行装置104における圧縮命令データ実行処理手順の具体例であり、図23に示した圧縮命令データ実行処理手順に対して処理3801および処理3802を加えた構成となっている。
処理3801および処理3802はそれぞれ処理2303で現在の処理対象命令の命令識別番号からその命令がジャンプ・アウト命令である、ジャンプ・イン命令であると判定された場合に実行される処理となっており、それぞれではジャンプ先の命令を検索する処理を実施する。
図38の処理は、圧縮命令データ実行装置104の命令列解釈・実行部1046が行う。
【0248】
図36は処理3801の具体的な処理手順の一例を示した図である。
図36の処理も、命令列解釈・実行部1046が行う。
図36の処理は、概要を述べると、初めてジャンプ・アウト命令を実行する場合にはジャンプ先命令を検索する処理を行い、そのジャンプ先をキャッシュに保存してからジャンプを行い、同じジャンプ命令を2回以上実行する場合、ジャンプ先は同じであるため、キャッシュからジャンプ先情報を取得してジャンプを行う処理である。
また、ここで、ジャンプ先の検索方法の概要を述べる。
まず、図47に示すように、ジャンプ・アウト命令(501)以降の圧縮対象命令領域の命令列長(Length(R))を求め、ジャンプ・アウト命令(501)のオフセット値(Offset)から命令列長(Length(R))を減算し、当該圧縮対象命令領域以降にある命令列の命令列長(Offset−Length(R))を求める。
そして、所定の命令列長(Length(op))ごとに位置を後ろに移動させ、また、圧縮命令領域ではメタ命令の元の命令列の命令列長を導出し、移動量が命令列長(Offset−Length(R))と一致した位置がジャンプ先となる。
以下、図36の各処理を説明する。
【0249】
処理3601では、命令列解釈・実行部1046は、現在の処理対象命令のジャンプ・アウト命令のジャンプオフセット値Offsetを取得する。
取得完了後に処理3602へ遷移する。
【0250】
処理3602では、命令列解釈・実行部1046は、現在の処理対象命令のジャンプ・アウト命令に関するキャッシュ情報をジャンプ・アウト命令キャッシュ情報リストから検索する。
検索完了後に処理3603へ遷移する。
ここでジャンプ・アウト命令キャッシュ情報リストとは、あるジャンプ・アウト命令を処理した直後の圧縮命令データ実行装置における少なくとも処理対象命令位置記憶手段の記憶情報および処理対象命令位置退避手段の退避情報を情報として、当該ジャンプ・アウト命令の位置情報をキーとして管理するリストである。
これはジャンプ命令がジャンプ処理を実施する場合には必ず同じ命令へジャンプするため、2回目以降はジャンプ先命令を検索する処理を省略するために利用する。
【0251】
処理3603では、命令列解釈・実行部1046は、処理3602で検索したキャッシュ情報が存在するかどうか判定する。
その判定の結果、キャッシュ情報が存在しない場合には処理3605へ遷移し、ジャンプ先命令の検索処理を実施する。
逆に判定の結果、キャッシュ情報が存在する場合には処理3604へ遷移する。
【0252】
処理3604では、命令列解釈・実行部1046は、検索されたキャッシュ情報をもとに処理対象のジャンプ・アウト命令を実施した場合の処理対象命令位置記憶部1043によって記憶される記憶情報および、処理対象命令位置退避部1044によって退避される退避情報を再現させる。
再現完了後にジャンプ・アウト命令実行処理を終了する。
【0253】
処理3605以降ではジャンプ・アウト命令のジャンプ先検索を実施する。
処理3605では、命令列解釈・実行部1046は、現在処理対象となっている圧縮対象命令列の未実行命令列長Length(R)を算出する。
この値は例えば処理対象となっている圧縮対象命令列の終端番地から現在の処理対象命令位置情報の番地を引く事で求める事ができる。
算出終了後、処理3606へ遷移する。
【0254】
処理3606では、命令列解釈・実行部1046は、圧縮命令データ実行装置104で現在処理対象となっている圧縮対象命令列に対するメタ命令実行を終了させる。
これはジャンプ・アウト命令が現在処理対象となっている圧縮対象命令列より先の命令へジャンプするための命令である事から必要となる。
この処理を実施後、処理対象命令位置記憶部1043によって記憶される処理対象命令位置情報は、今まで実行していた圧縮対象命令列を実行するトリガーとなったメタ命令の直後の命令の先頭番地を指し、処理対象命令位置退避部1044によって記憶される処理対象命令位置退避情報は上記メタ命令が実行される直前の状態に戻される。
メタ命令実行終了処理完了後、処理3607へ遷移する。
【0255】
処理3607では、命令列解釈・実行部1046は、ジャンプ先命令を検索するための準備処理を行う。
具体的には、あとジャンプすべきオフセット値である残ジャンプオフセット値を記憶する変数iの初期化である。
iには残るジャンプオフセット値、例えば具体的にはOffsetからLength(R)を引いた値(Offset−Length(R))を代入する。
初期化処理完了後、処理3608へ遷移する。
【0256】
処理3608では、命令列解釈・実行部1046は、残ジャンプオフセット値が残っているか、つまりはiが0より大きい値となっているかを判別する。
その判別の結果残っていない場合には処理3609へ遷移し、逆に残っている場合には処理3610へ遷移する。
【0257】
処理3609では、命令列解釈・実行部1046は、残ジャンプオフセット値が残っていない場合に遷移する処理であり、現在の処理対象命令位置記憶部1043によって記憶されている処理対象命令位置情報および、処理対象命令位置退避部1044によって退避されている処理対象命令位置退避情報で示される命令列における処理対象命令こそがジャンプ・アウト命令によってジャンプすべき命令であると判別した状況である。
よって、この処理対象命令位置情報および、処理対象命令位置退避情報を、今回のジャンプ・アウト命令実行処理のトリガーとなったジャンプ・アウト命令が記述されている番地をキーとしてジャンプ・アウト命令キャッシュ情報リストに登録する。
登録終了後、本ジャンプ・アウト命令実行処理は終了する。
【0258】
処理3610では、命令列解釈・実行部1046は、現在の処理対象命令位置情報が指し示す命令がメタ命令であるか判定する。
判定の結果、メタ命令ではない場合には処理3611へ、逆にメタ命令である場合には処理3614へ遷移する。
【0259】
処理3611では、命令列解釈・実行部1046は、現在の処理対象命令位置情報は通常命令であり、かつジャンプオフセット値は残っている状況である。
そのため、この命令の次へジャンプするための処理対象命令位置情報の指す命令の命令長(Length(op))を取得する。
取得後、処理3612へ遷移する。
【0260】
処理3612では、命令列解釈・実行部1046は、処理3611で取得した命令長(Length(op))を利用して残ジャンプオフセット値を更新する。
具体的には例えば残ジャンプオフセット値から命令長(Length(op))を引く事が考えられる。
更新完了後、処理3613へ遷移する。
【0261】
処理3613では、命令列解釈・実行部1046は、処理対象命令位置情報を次の命令の先頭番地に更新し、処理3608へ遷移する。
【0262】
処理3614では、命令列解釈・実行部1046は、現在の処理対象命令位置情報はメタ命令であり、かつジャンプオフセット値は残っている状況である。
そのため、このメタ命令が指定する圧縮対象命令列内にジャンプ先命令が存在するかどうか判定処理が必要となる。
そこで、処理3614では、命令列解釈・実行部1046は、メタ命令が指定する圧縮対象命令列をメタ命令辞書データから取得する。
取得完了後、処理3615へ遷移する。
【0263】
処理3615では、命令列解釈・実行部1046は、メタ命令が指定する圧縮対象命令列内にジャンプ先命令が存在するかどうか判定処理を行う。
具体的には例えば残ジャンプオフセット値と、メタ命令が指定する圧縮対象命令列の命令列長を比較して、一致するかもしくは残ジャンプオフセット値のほうが小さい場合にはその圧縮対象命令列内にジャンプ先命令が存在すると判定する事が考えられる。
この判定の結果、圧縮対象命令内にジャンプ先が存在する場合には処理3617へ、逆に圧縮対象命令内にジャンプ先が存在しない場合には処理3616へ遷移する。
【0264】
処理3616は、現在の処理対象命令位置情報が指し示すメタ命令に対応する圧縮対象命令列内にはジャンプ先命令は存在せず、そのメタ命令以降にジャンプ先命令が存在する状況で処理される。
そのため、処理3616では、命令列解釈・実行部1046は、残ジャンプオフセット値を更新する。
この更新では例えば、その圧縮対象命令列の命令列長(Length(op))だけ残ジャンプオフセット値から引いた値に更新する事が考えられる。更新終了後、処理3613に遷移する。
【0265】
処理3617は現在の処理対象命令位置情報が指し示すメタ命令に対応する圧縮対象命令列内にジャンプ先命令が存在する状況で処理される。
そこで、命令実行時情報記憶部1042で記憶する情報をそのジャンプ先命令を適切に実行するために必要な情報に書き換える処理を行う。
具体的には例えば、少なくとも処理対象命令位置退避部1044で退避される情報として、現時点での処理対象命令位置記憶部1043によって記憶されている処理対象命令位置情報を退避させた後、処理対象命令位置記憶部1043によって記録される処理対象命令位置情報をその圧縮対象命令列内のジャンプ先命令を指し示す情報に更新するなどが考えられる。
処理完了後に処理3609に遷移する。
【0266】
以上の処理を行う事によって、ジャンプ・アウト命令に対する圧縮命令データ実行装置104における適切な処理が可能となり、あるジャンプ・アウト命令に対して初回実行時にはそのジャンプ・アウト命令でジャンプすべきジャンプ先命令を検索し、そのジャンプ先命令を実行するために必要な命令実行時情報をジャンプ・アウト命令キャッシュ情報リストに登録する。
二回目以降の実行ではジャンプ・アウト命令キャッシュ情報リストに登録されている情報からジャンプ先命令を実行するために必要な命令実行時情報を復元させる事でジャンプ先命令の検索処理を回避している。
【0267】
図37は処理3802の具体的な処理手順の一例を示した図である。
処理3802と処理3801は類似した処理手順を取る事になるが、処理3802ではジャンプ・イン命令に対する処理となっているため、処理3801では必要となるジャンプ先命令を検索するループの手前のメタ命令実行状態からの復帰処理が必要なくなる。
それ以外の処理は処理3802と処理3801では同じとなる。
そのため、処理3801の説明で利用したジャンプ・アウト命令キャッシュ情報リストを処理3802の処理でも同一のものを利用して処理しても構わないが、図37では当該リストの事をジャンプ・イン命令キャッシュ情報リストと呼び、異なるリストとして記述している。
しかし、リストの基本構成および機能に関してはジャンプ・アウト命令キャッシュ情報リストと同一であるとしている。
【0268】
図37の処理も、図36と同様に、初めてジャンプ・イン命令を実行する場合にはジャンプ先命令を検索する処理を行い、そのジャンプ先をキャッシュに保存してからジャンプを行い、同じジャンプ命令を2回以上実行する場合、ジャンプ先は同じであるため、キャッシュからジャンプ先情報を取得してジャンプを行う処理である。
また、図37の場合は、ジャンプ・イン命令は非圧縮命令領域にありジャンプ先が圧縮命令領域にある。
このため、図37では、ジャンプ・イン命令から所定の命令列長(Length(op))ごとに位置を後ろに移動させ、また、圧縮命令領域ではメタ命令の元の命令列の命令列長を導出し、移動量がジャンプ・イン命令のオフセット値と一致した位置がジャンプ先となる。
なお、図37の処理も、命令列解釈・実行部1046が実行する。
以下、図37の各処理を説明する。
【0269】
処理3701では、命令列解釈・実行部1046は、現在の処理対象命令のジャンプ・イン命令のジャンプオフセット値Offsetを取得する。
取得完了後に処理3702へ遷移する。
【0270】
処理3702では、命令列解釈・実行部1046は、現在の処理対象命令のジャンプ・イン命令に関するキャッシュ情報をジャンプ・イン命令キャッシュ情報リストから検索する。
検索完了後に処理3703へ遷移する。
【0271】
処理3703では、命令列解釈・実行部1046は、処理3702で検索したキャッシュ情報が存在するかどうか判定する。
その判定の結果、キャッシュ情報が存在しない場合には処理3704へ遷移し、ジャンプ先命令の検索処理を実施する。
逆に判定の結果、キャッシュ情報が存在する場合には処理3707へ遷移する。
【0272】
処理3707では、命令列解釈・実行部1046は、ジャンプ先命令を検索するための準備処理を行う。
具体的には、あとジャンプすべきオフセット値である残ジャンプオフセット値を記憶する変数iの初期化である。
iには残るジャンプオフセット値、例えば具体的にはOffsetからジャンプ・イン命令の命令長を引いた値を代入する。初期化処理完了後、処理3708へ遷移する。
【0273】
処理3708では、命令列解釈・実行部1046は、残ジャンプオフセット値が残っているか、つまりはiが0より大きい値となっているかを判別する。
その判別の結果残っていない場合には処理3709へ遷移し、逆に残っている場合には処理3710へ遷移する。
【0274】
処理3709では、命令列解釈・実行部1046は、残ジャンプオフセット値が残っていない場合に遷移する処理であり、現在の処理対象命令位置記憶部1043によって記憶されている処理対象命令位置情報および、処理対象命令位置退避部1044によって退避されている処理対象命令位置退避情報で示される命令列における処理対象命令こそがジャンプ・イン命令によってジャンプすべき命令であると判別した状況である。
よって、この処理対象命令位置情報および、処理対象命令位置退避情報を、今回のジャンプ・イン命令実行処理のトリガーとなったジャンプ・イン命令が記述されている番地をキーとしてジャンプ・イン命令キャッシュ情報リストに登録する。
登録終了後、本ジャンプ・イン命令実行処理は終了する。
【0275】
処理3710では、命令列解釈・実行部1046は、現在の処理対象命令位置情報が指し示す命令がメタ命令であるか判定する。
判定の結果、メタ命令ではない場合には処理3711へ、逆にメタ命令である場合には処理3714へ遷移する。
【0276】
処理3711では、命令列解釈・実行部1046は、現在の処理対象命令位置情報は通常命令であり、かつジャンプオフセット値は残っている状況である。
そのため、この命令の次へジャンプするための処理対象命令位置情報の指す命令の命令長(Length(op))を取得する。
取得後、処理3712へ遷移する。
【0277】
処理3712では、命令列解釈・実行部1046は、処理3711で取得した命令長(Length(op))を利用して残ジャンプオフセット値を更新する。
具体的には例えば残ジャンプオフセット値から命令長(Length(op))を引く事が考えられる。更新完了後、処理3713へ遷移する。
【0278】
処理3713では、命令列解釈・実行部1046は、処理対象命令位置情報を次の命令の先頭番地に更新し、処理3708へ遷移する。
【0279】
処理3714では、命令列解釈・実行部1046は、現在の処理対象命令位置情報はメタ命令であり、かつジャンプオフセット値は残っている状況である。
そのため、このメタ命令が指定する圧縮対象命令列内にジャンプ先命令が存在するかどうか判定処理が必要となる。
そこで、処理3714では、メタ命令が指定する圧縮対象命令列をメタ命令辞書データから取得する。
取得完了後、処理3715へ遷移する。
【0280】
処理3715では、命令列解釈・実行部1046は、メタ命令が指定する圧縮対象命令列内にジャンプ先命令が存在するかどうか判定処理を行う。
具体的には例えば残ジャンプオフセット値と、メタ命令が指定する圧縮対象命令列の命令列長を比較して、一致するかもしくは残ジャンプオフセット値のほうが小さい場合にはその圧縮対象命令列内にジャンプ先命令が存在すると判定する事が考えられる。
この判定の結果、圧縮対象命令内にジャンプ先が存在する場合には処理3717へ、逆に圧縮対象命令内にジャンプ先が存在しない場合には処理3716へ遷移する。
【0281】
処理3716は、現在の処理対象命令位置情報が指し示すメタ命令に対応する圧縮対象命令列内にはジャンプ先命令は存在せず、そのメタ命令以降にジャンプ先命令が存在する状況で処理される。
そのため、処理3716では、残ジャンプオフセット値を更新する。この更新では例えば、その圧縮対象命令列の命令列長だけ残ジャンプオフセット値から引いた値に更新する事が考えられる。
更新終了後、処理3713に遷移する。
【0282】
処理3717は現在の処理対象命令位置情報が指し示すメタ命令に対応する圧縮対象命令列内にジャンプ先命令が存在する状況で処理される。
そこで、命令実行時情報記憶部1042で記憶する情報をそのジャンプ先命令を適切に実行するために必要な情報に書き換える処理を行う。
具体的には例えば、命令列解釈・実行部1046は、少なくとも処理対象命令位置退避部1044で退避される情報として、現時点での処理対象命令位置記憶部1043によって記憶されている処理対象命令位置情報を退避させた後、処理対象命令位置記憶部1043によって記録される処理対象命令位置情報をその圧縮対象命令列内のジャンプ先命令を指し示す情報に更新するなどが考えられる。
処理完了後に処理3709に遷移する。
【0283】
以上の処理を行う事によって、ジャンプ・イン命令に対する圧縮命令データ実行装置104における適切な処理が可能となり、あるジャンプ・イン命令に対して初回実行時にはそのジャンプ・イン命令でジャンプすべきジャンプ先命令を検索し、そのジャンプ先命令を実行するために必要な命令実行時情報をジャンプ・イン命令キャッシュ情報リストに登録する。
二回目以降の実行ではジャンプ・イン命令キャッシュ情報リストに登録されている情報からジャンプ先命令を実行するために必要な命令実行時情報を復元させる事でジャンプ先命令の検索処理を回避している。
【0284】
このように、本実施の形態に係る命令データ圧縮装置103では、命令データ格納装置アクセス部1031は、所定のジャンプ先命令列へのジャンプ命令が記述されるジャンプ命令列が含まれる命令データを入力する場合がある。
そして、命令データ圧縮変換部1035は、命令列ごとにメタ命令に置き換えるか否かを判断しメタ命令に置き換える命令列を指定した後であって置き換え対象の命令列をメタ命令に置き換える前に、メタ命令に置き換えられることになる置き換え命令列群とジャンプ命令列とジャンプ先命令列との位置関係を解析し、置き換え命令列群とジャンプ命令列とジャンプ先命令列との位置関係が所定の条件に合致する場合に、ジャンプ命令列に対する補正処理を行い、ジャンプ命令列に対する補正処理の後に、置き換え対象の命令列をメタ命令に置き換える。
命令データ圧縮変換部1035は、ジャンプ命令列が置き換え命令列群に含まれ、ジャンプ先命令列が同じ置き換え命令列群に含まれていない場合([状況1]、[状況2])、
ジャンプ命令列が置き換え命令列群に含まれず、ジャンプ先命令列が置き換え命令列群に含まれる場合([状況3])、
ジャンプ命令列とジャンプ先命令列がともに置き換え命令列群に含まれず、ジャンプ命令列とジャンプ先命令列との間に1つ以上の置き換え命令列群が存在する場合([状況4])において、ジャンプ命令列に対する補正処理を行う。
【0285】
[状況1]、[状況2]の場合に、命令データ圧縮変換部1035は、ジャンプ命令列が置き換え命令列群に含まれ、ジャンプ先命令列が同じ置き換え命令列群に含まれず、置き換え命令列群のメタ命令への置き換えによりジャンプ命令列のジャンプオフセット値がジャンプ先命令列を指し示さない状態になっていることを圧縮命令データ実行装置104に対して通知する命令識別番号(ジャンプアウト通知)をジャンプ命令列に記述してジャンプ・アウト命令とする。
【0286】
[状況3]の場合に、命令データ圧縮変換部1035は、ジャンプ命令列が置き換え命令列群に含まれず、ジャンプ先命令列が置き換え命令列群に含まれ、置き換え命令列群のメタ命令への置き換えによりジャンプ命令列のジャンプオフセット値がジャンプ先命令列を指し示さない状態になっていることを圧縮命令データ実行装置104に対して通知する命令識別番号(ジャンプイン通知)をジャンプ命令列に記述してジャンプ・イン命令とする。
【0287】
また、[状況4]の場合に、命令データ圧縮変換部1035は、ジャンプ命令列とジャンプ先命令列との間に存在する置き換え命令列群のデータ総量と、当該置き換え命令列群を置き換えることになるメタ命令のデータ総量とに基づき、ジャンプ命令列のジャンプオフセット値を変更する。
【0288】
また、上記のように、本実施の形態に係る圧縮命令データ実行装置104では、命令データ格納装置アクセス部1041は、2以上の命令列が含まれる命令列群がメタ命令に置き換えられており、メタ命令に置き換えられた置き換え命令列群に、所定のジャンプ先命令列へのジャンプ命令が記述されているジャンプ命令列が含まれ、ジャンプ命令列にはジャンプ先命令列までのオフセット値がジャンプオフセット値として記述されている命令データを入力する場合がある。
命令列解釈・実行部1046は、ジャンプ命令列の実行時に、ジャンプ命令列がジャンプ・アウト命令列であるかを判断し、ジャンプ・アウト命令列である場合に、ジャンプ・アウト命令列がメタ命令に置き換えられたことによりジャンプオフセット値がジャンプ先命令列を指し示していないと判断し、ジャンプ・アウト命令列以降のデータ内容を解析して、ジャンプ・アウト命令列のジャンプ先命令列を検索し、検索したジャンプ先命令列にジャンプして当該ジャンプ・アウト命令列を実行する。
【0289】
また、命令列解釈・実行部1046は、ジャンプ・アウト命令列である場合である場合に、ジャンプ・アウト命令列のジャンプオフセット値(図47のOffset)と、ジャンプ・アウト命令列から置き換え命令列群の終端までの命令長(図47のLength(R))と、置き換え命令列群のメタ命令以降の命令列の命令長(Offset−Length(R))とに基づく解析を行い、ジャンプ・アウト命令列のジャンプ先命令列を検索する。
【0290】
また、命令データ格納装置アクセス部1041は、2以上の命令列が含まれる命令列群がメタ命令に置き換えられており、所定のジャンプ先命令列へのジャンプ命令が記述されているジャンプ命令列がメタ命令外に含まれ、ジャンプ命令列にはジャンプ先命令列までのオフセット値がジャンプオフセット値として記述されており、ジャンプ命令列のジャンプ先命令列が前記メタ命令に置き換えられた置き換え命令列群に含まれている命令データを入力する場合がある。
命令列解釈・実行部1046は、ジャンプ命令列の実行時に、ジャンプ命令列がジャンプ・イン命令列であるかを判断し、ジャンプ・イン命令列である場合に、ジャンプ・イン命令列のジャンプ先命令列がメタ命令に置き換えられたことによりジャンプオフセット値がジャンプ先命令列を指し示していないと判断し、ジャンプ・イン命令列以降のプログラム内容を解析して、ジャンプ・イン命令列のジャンプ先命令列を検索し、検索したジャンプ先命令列にジャンプして当該ジャンプ・イン命令列を実行する。
【0291】
また、命令列解釈・実行部1046は、ジャンプ・イン命令列である場合である場合に、ジャンプ・イン命令列のジャンプオフセット値と、ジャンプ・イン命令列以降の命令列の命令長とに基づく解析を行い、ジャンプ・イン命令列のジャンプ先命令列を検索する。
【0292】
また、命令列解釈・実行部1046は、置き換え命令列群のメタ命令以降に他のメタ命令が存在する場合に、メタ命令辞書データを参照して、当該他のメタ命令に対応する命令列の命令長を導出する。
【0293】
以上までで説明した圧縮命令データ実行装置104で圧縮命令データを非圧縮の命令データに展開せずに実行するための具体的な方式を説明し、その上でジャンプ命令に対する新たな命令セットの定義および、ジャンプ命令の書換え処理、および書換え後の命令の処理内容について説明を行った。
ただし、ここで説明したジャンプ・イン命令およびジャンプ・アウト命令の構成に限定する趣旨ではなく、少なくともジャンプ命令を別の命令に書き換える事によって、非連続的な命令データである圧縮命令データにおけるジャンプ処理を適切に処理可能とする方法であれば、どのような構成であっても構わない。
例えば、本実施の形態ではジャンプ命令を書き換える命令としてジャンプ・イン命令およびジャンプ・アウト命令の二種類を用意している。
しかし、以上までの説明で分かるとおりこれらの2命令の処理内容は非常に似通っているため、一つの命令に統合して表現し、圧縮命令データ実行装置104によって処理する際に、ジャンプ命令が記述されている命令列が圧縮対象命令データであるか否かで処理を切り替える事で実現する事も可能である。
【0294】
さらに例えば、本実施の形態では書き換えられたジャンプ命令に対するジャンプ先命令は、その命令の初回実行時に検索する方法を取っているが、その検索を命令データ圧縮装置103において実施し、その結果をジャンプ命令が書き換えられる別の命令のパラメータに加える方法をとっても構わない。
この場合、本実施の形態におけるジャンプ・イン命令に対するパラメータはジャンプオフセット値を、
非圧縮命令列におけるジャンプオフセット値
圧縮命令列内におけるジャンプオフセット値
に分割して記述して検索結果を記述する必要があり、パラメータ部のサイズ拡大が必要になる場合がある。
【0295】
また本実施の形態におけるジャンプ・アウト命令に対応する命令は、ジャンプ先が圧縮命令対象命令列内に存在する場合には、ジャンプ先命令が記述されている圧縮対象命令列内に対するオフセット値(圧縮対象命令列内オフセット値)が必要になると共に、ジャンプ命令が記述されている圧縮大正命令列とジャンプ先命令が記述されている圧縮対象命令列の間をつなぐ圧縮対象命令列の命令列長(圧縮対象命令列間オフセット値)もパラメータとして必要となる。
この二種類のパラメータは、ジャンプ命令が記述されている圧縮対象命令列が同じだとしても、それが適用される命令データの内容や位置によって異なる値を持つため、通常はジャンプ命令を書き換える別の命令のパラメータとして入れる事は通常、圧縮率低下を招く。
そのため、ジャンプ命令が記述されている圧縮対象命令列が置き換えられるメタ命令のパラメータとしてその値を記述する必要が発生する。
例えば、メタ命令のパラメータとして内部に存在するジャンプ・アウト命令の個数と、ジャンプ・アウト命令の出現順にそのジャンプ・アウト命令に対する圧縮対象命令列内オフセット値と圧縮対象命令列間オフセット値をパラメータとして持つようにメタ命令の定義を行う必要がある。
一方で、ジャンプ・アウト命令に関しては特にパラメータは必要がなくなる。
【0296】
以上、本実施の形態では、
命令データ圧縮手段においてメタ命令に置き換えられた命令もしくは命令列内の命令にジャンプ命令が存在し、そのジャンプ先がメタ命令辞書データに登録されている命令もしくは命令列の範囲を超過してジャンプし、かつそのジャンプ先の命令がメタ命令に登録されている命令もしくは命令列内の命令ではない場合に、そのジャンプ命令をメタ命令外ジャンプ命令に置き換えるメタ命令外ジャンプ変換手段を備えることを説明した。
【0297】
また、本実施の形態では、
命令データ圧縮手段において、ジャンプ命令に対し、そのジャンプ命令とそのジャンプ先の命令の間に少なくとも一つ以上のメタ命令に置き換えられる命令列が存在する場合、ジャンプ命令のパラメータとなるジャンプオフセット値を書き換える事を説明した。
つまり、メタ命令に書き換えられた箇所の長さが短くなるため、ジャンプオフセット値を書き換えないと正しいジャンプ先にジャンプできない事を解消できる。
【0298】
また、本実施の形態では、
命令データ圧縮手段においてメタ命令に置き換えられた命令もしくは命令内の命令にジャンプ命令が存在し、そのジャンプ先がメタ命令辞書データに登録されている命令もしくは命令列の範囲を超過してジャンプし、かつそのジャンプ先の命令がメタ命令に登録されている場合に、そのジャン命令をメタ命令間ジャンプ命令に置き換えるメタ命令間ジャンプ変換手段を備える事を説明した。
【0299】
また、本実施の形態では、
命令データ圧縮手段においてメタ命令に置き換えられなかった命令もしくは命令列内の命令がジャンプ命令であり、そのジャンプ先がメタ命令辞書データに登録されている命令もしくは命令列内の特定命令である場合、そのジャンプ命令をメタ命令内ジャンプ命令に置き換えるメタ命令内ジャンプ変換手段を備える事を説明した。
【0300】
最後に、実施の形態1〜6に示した情報処理端末装置100のハードウェア構成例について説明する。
図49は、実施の形態1〜6に示す情報処理端末装置100のハードウェア資源の一例を示す図である。
なお、図49の構成は、あくまでも情報処理端末装置100のハードウェア構成の一例を示すものであり、情報処理端末装置100のハードウェア構成は図49に記載の構成に限らず、他の構成であってもよい。
また、ここでは、1つの情報処理端末装置100に、中央制御装置101〜命令データ格納装置106の機能が含まれている例を前提にしているが、中央制御装置101〜命令データ格納装置106の各々が複数の情報処理端末装置により実現される場合は、図49は、少なくとも命令データ圧縮装置103及び圧縮命令データ実行装置104の各々のハードウェア構成例を意味している。
【0301】
図49において、情報処理端末装置100は、プログラムを実行するCPU911(Central Processing Unit、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう)を備えている。
CPU911は、バス912を介して、例えば、ROM(Read Only Memory)913、RAM(Random Access Memory)914、通信ボード915、表示装置901、キーボード902、マウス903、磁気ディスク装置920と接続され、これらのハードウェアデバイスを制御する。
更に、CPU911は、FDD904(Flexible Disk Drive)、コンパクトディスク装置905(CDD)、プリンタ装置906、スキャナ装置907と接続していてもよい。また、磁気ディスク装置920の代わりに、SSD(Solid State Drive)、光ディスク装置、メモリカード(登録商標)読み書き装置などの記憶装置でもよい。
RAM914は、揮発性メモリの一例である。ROM913、FDD904、CDD905、磁気ディスク装置920の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部の一例である。
実施の形態1〜6で説明した「ソースコード格納装置105」「命令データ格納装置106」、「命令圧縮時情報記憶部1037」「命令実行時情報記憶部1042」は、RAM914、磁気ディスク装置920等により実現される。
通信ボード915、キーボード902、マウス903、スキャナ装置907、FDD904などは、入力装置の一例である。
また、通信ボード915、表示装置901、プリンタ装置906などは、出力装置の一例である。
【0302】
通信ボード915は、例えば、LAN(ローカルエリアネットワーク)、インターネット、WAN(ワイドエリアネットワーク)、SAN(ストレージエリアネットワーク)などに接続されている。
【0303】
磁気ディスク装置920には、オペレーティングシステム921(OS)、ウィンドウシステム922、プログラム群923、ファイル群924が記憶されている。
プログラム群923のプログラムは、CPU911がオペレーティングシステム921、ウィンドウシステム922を利用しながら実行する。
【0304】
また、RAM914には、CPU911に実行させるオペレーティングシステム921のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。
また、RAM914には、CPU911による処理に必要な各種データが格納される。
【0305】
また、ROM913には、BIOS(Basic Input Output System)プログラムが格納され、磁気ディスク装置920にはブートプログラムが格納されている。
情報処理端末装置100の起動時には、ROM913のBIOSプログラム及び磁気ディスク装置920のブートプログラムが実行され、BIOSプログラム及びブートプログラムによりオペレーティングシステム921が起動される。
【0306】
上記プログラム群923には、実施の形態1〜6の説明において「〜部」(「命令圧縮時情報記憶部1037」及び「命令実行時情報記憶部1042」以外、以下同様)、「〜手段」として説明している機能を実行するプログラムが記憶されている。プログラムは、CPU911により読み出され実行される。
【0307】
ファイル群924には、実施の形態1〜6の説明において、「〜の判断」、「〜の計算」、「〜の導出」、「〜の算出」、「〜の比較」、「〜の評価」、「〜の更新」、「〜の設定」、「〜のセット」、「〜の登録」、「〜の選択」、「〜の検索」等として説明している処理の結果を示す情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。
「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。
ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してCPU911によりメインメモリやキャッシュメモリに読み出される。
そして、読み出された情報やデータや信号値や変数値やパラメータは、抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示などのCPUの動作に用いられる。
抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示のCPUの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリ、レジスタ、キャッシュメモリ、バッファメモリ等に一時的に記憶される。
また、実施の形態1〜6で説明しているフローチャートの矢印の部分は主としてデータや信号の入出力を示す。
データや信号値は、RAM914のメモリ、FDD904のフレキシブルディスク、CDD905のコンパクトディスク、磁気ディスク装置920の磁気ディスク、その他光ディスク、ミニディスク、DVD等の記録媒体に記録される。
また、データや信号は、バス912や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【0308】
また、実施の形態1〜6の説明において「〜部」、「〜手段」として説明しているものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。
すなわち、実施の形態1〜6で説明したフローチャートに示すステップ、手順、処理により、本発明に係る情報処理端末装置100(命令データ圧縮装置103、圧縮命令データ実行装置104)を方法発明として把握することができる。
また、「〜部」、「〜手段」として説明しているものは、ROM913に記憶されたファームウェアで実現されていても構わない。
或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。
ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、DVD等の記録媒体に記憶される。
プログラムはCPU911により読み出され、CPU911により実行される。
すなわち、プログラムは、実施の形態1〜6の「〜部」、「〜手段」としてコンピュータを機能させるものである。あるいは、実施の形態1〜6の「〜部」、「〜手段」の手順や方法をコンピュータに実行させるものである。
【0309】
このように、実施の形態1〜6に示す情報処理端末装置100は、処理装置たるCPU、記憶装置たるメモリ、磁気ディスク等、入力装置たるキーボード、マウス、通信ボード等、出力装置たる表示装置、通信ボード等を備えるコンピュータである。
そして、上記したように「〜部」、「〜手段」として示された機能をこれら処理装置、記憶装置、入力装置、出力装置を用いて実現するものである。
【符号の説明】
【0310】
100 情報処理端末装置、101 中央制御装置、102 命令データ生成装置、103 命令データ圧縮装置、104 圧縮命令データ実行装置、105 ソースコード格納装置、106 命令データ格納装置、1031 命令データ格納装置アクセス部、1032 命令解釈・圧縮部、1033 同一命令列出現回数カウント部、1034 圧縮対象命令テーブル生成部、1035 命令データ圧縮変換部、1036 メタ命令辞書データ生成部、1037 命令圧縮時情報記憶部、1041 命令データ格納装置アクセス部、1042 命令実行時情報記憶部、1043 処理対象命令位置記憶部、1044 処理対象命令位置退避部、1045 メタ命令辞書データ保持部、1046 命令列解釈・実行部、1047 メタ命令解釈・実行部。
【技術分野】
【0001】
本発明はマイクロコンピュータ、データプロセッサ等のハードウェア的、もしくはソフトウェア的に実現されたデータ処理装置に関するものである。
例えばハードウェア的には中央演算処理装置(Central Processing Unit、以下CPU)、ソフトウェア的には仮想中央演算処理装置(Virtual Machine、以下VM)等が対象として挙げられる。
【背景技術】
【0002】
CPUやVMは実装された環境において、様々なデータ処理を行い、環境の様々な制御を行う装置である。
通常、CPUやVMは具体的にどのようなデータ処理を行うかは同じ環境に実装された記憶装置等に格納されているプログラムに記述されており、そのプログラムを読み込んで、その内容を逐次解釈し、解釈結果に従った処理を実行する。
プログラムは通常命令とそれに付随する0個以上のパラメータの列で構成され、CPUやVMはその処理対象となる命令と付随するパラメータを読み込んで処理を実施する。
CPUやVMは次にどの命令を処理すべきかを示す情報を保持するために、一般的にプログラム・カウンタ(Program Counter、以下PC)と呼ばれるレジスタを利用する。
PCは記憶装置に格納されている処理対象となっているプログラム中の次に処理すべき命令のアドレスを保持しており、CPUやVMはPCの保持するアドレスの命令を処理し、処理完了後にPCを次の命令が格納されているアドレスに移動させる。この一連の処理を繰り返す事によって、プログラムに記述された内容の処理を逐次実行する。
処理に必要なデータはCPUやVMが持つレジスタやスタック等の高速にアクセス可能な記憶装置から取得し処理を行う。
そのレジスタやスタックへのデータのセットを行う命令があり、大容量であるが低速な記憶装置や別のレジスタやスタックからデータを取得してセットする。
【0003】
一方で、近年の情報処理機器の発展に伴い、携帯電話やスマートフォン、カーナビゲーションシステム等、様々な機器でCPUやVMを実装した小型移動情報処理装置が開発され、様々なサービスを実現している。
これらの小型移動情報処理装置は一般的なパーソナル・コンピューターと比較すると小型であるために基板面積が小さく、十分な容量を持つメモリを実装する事が難しい。
また、近年の提供サービスの高度化、複雑化に伴い、ソフトウェアが使用するメモリ量は増加しており、過去に十分な容量であったとしても、全てのサービスを実現するには容量が不足する課題も多々発生している。
また、より少ない容量のメモリでサービスが実現できるようになると原価低減につながり、価格面での競争力を強化できるため、同一サービスであっても如何にして使用するメモリ量を抑制して実現するかは、今もなお重要かつ、緊急の課題となっている。
【0004】
このような課題に対して特許文献1では、命令のオペコード部の語長の長い命令を高頻度で使用する場合、予め予約されているコード長の短いオペコードに置き換え、置き換え前後のオペコードをレジスタに書き込んでおく事によって、プログラムの圧縮を行っている。
【0005】
また、特許文献2は、プログラム中の各関数において使用されている命令に新たなインデックを定義し、そのインデックスを命令のオペコード部として扱い、関数と組でインデックスから命令を解決するテーブルを持つ事でインデックスがオペコードよりサイズを小さく設定する事で、プログラムの圧縮を実現している。
また、特許文献3ではプログラム中の分岐の距離、即値データのサイズ、レジスタの利用頻度等を分析し、各命令コードやレジスタ指定のサイズが小さくなるように新たな命令セットアーキテクチャを再定義し、その命令セットに従って再作成したプログラムの動的ステップ数から論理演算手段の演算能力を判定し、命令セットから実命令セットへのデコード手段を設計する。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開平11−224199号公報
【特許文献2】特開2006−79451号公報
【特許文献3】特開平10−031588号公報
【非特許文献】
【0007】
【非特許文献1】「コンパイラの構成と最適化」、中田育夫、朝倉書店、ISBN 4−254−12139−3 C3041
【発明の概要】
【発明が解決しようとする課題】
【0008】
特許文献1では語長の長いオペコード部を持つ命令が高頻度に使用された場合にのみ、プログラムの圧縮を実現できるが、全ての命令のオペコード部が同一語長の場合や、語長が短いオペコード部を持つ命令が高頻度で使用された場合にプログラムの圧縮が行われないという課題がある。
また、特許文献2は実行時に全てのインデックスをテーブルに従って本来の命令にデコードする必要があり、実行時の処理速度低下を招くという課題がある。
また、特許文献3では個別のプログラムに対応して最適な命令セット、デコード設計を実現するため、処理内容に依存する事になり、任意のプログラムに適用した場合、分析過程からやりなおさなければならないという課題がある。
【0009】
この発明は、上記のような課題を解決することを主な目的の一つとしており、CPUやVMが処理対象とする命令データのサイズ効率を向上させることを主な目的とする。
また、命令データを解釈・実行する際に間接的に必要となる処理を削減することを主な目的とする。
【0010】
本発明に係るプログラム圧縮装置は、
各々のデータ長が固定されていない複数の命令列が含まれる機械語によるプログラムを入力するプログラム入力部と、
前記プログラム入力部により入力されたプログラムの各命令列を解析し、所定の条件を満たす命令列を、当該命令列よりもデータ量が少ないメタ命令に置き換える命令置き換え部と、
前記メタ命令と対応付けて、前記メタ命令に置き換えられた命令列が示されるメタ命令辞書データを生成するメタ命令辞書データ生成部と、
前記命令書き換え部により命令列がメタ命令に置き換えられたプログラムと、前記メタ命令辞書データ生成部により生成されたメタ命令辞書データとを対応付けて出力するプログラム出力部とを有することを特徴とする。
【発明の効果】
【0011】
本発明によれば、命令列ごとに解析を行い、命令列ごとにメタ命令に置き換えてプログラムのデータ量を圧縮する。このため、圧縮されたプログラムを実行する際に、命令列のどこまでが圧縮されているかを判断する必要がなく、プログラム実行時のオーバーヘッドを軽減することができる。
【図面の簡単な説明】
【0012】
【図1】実施の形態1に係る情報処理端末の構成例を示す図。
【図2】実施の形態1に係る情報処理端末の基本アクティビティを示す図。
【図3】実施の形態1に係るソースコード受け付け処理シーケンスを示す図。
【図4】実施の形態1に係る命令データ生成および圧縮要求に対する処理シーケンスを示す図。
【図5】実施の形態1に係る命令データ実行処理シーケンスを示す図。
【図6】実施の形態1に係るソースコードの例を示す図。
【図7】実施の形態1に係る命令列のデータ形式の例を示す図。
【図8】実施の形態1に係る命令識別番号、処理名、パラメータサイズの対応の例を示す図。
【図9】実施の形態1に係る命令名を利用して表現した命令データの例を示す図。
【図10】実施の形態1に係る命令データの例を示す図。
【図11】実施の形態1に係る命令データ圧縮処理の例を示す図。
【図12】実施の形態1に係る同一命令列出現回数カウント処理の例を示す図。
【図13】実施の形態1に係る命令ID別出現回数記録テーブル要素のデータ構造の例を示す図。
【図14】実施の形態1に係るパラメータ別出現回数記録テーブル要素のデータ構造の例を示す図。
【図15】実施の形態1に係る命令ID別出現回数記録テーブルの例を示す図。
【図16】実施の形態1に係る圧縮対象命令列テーブル生成処理の例を示す図。
【図17】実施の形態1に係る圧縮対象命令列テーブルの要素の例を示す図。
【図18】実施の形態1に係る命令データ圧縮変換処理の例を示す図。
【図19】実施の形態1に係る圧縮対象命令列テーブルの例を示す図。
【図20】実施の形態1に係るメタ命令辞書データの例を示す図。
【図21】実施の形態1に係るメタ命令で置換した命令データの例を示す図。
【図22】実施の形態1に係る圧縮命令データ実行装置の構成例を示す図。
【図23】実施の形態1に係る圧縮命令データ実行装置の実行処理手順の例を示す図。
【図24】実施の形態1に係る圧縮命令データ実行装置の状態例を示す図。
【図25】実施の形態1に係る圧縮命令データ実行装置の状態例を示す図。
【図26】実施の形態4に係る類似するソースコードの例を示す図。
【図27】実施の形態4に係る類似するソースコードに対する命令データの例を示す図。
【図28】実施の形態4に係る圧縮命令データ変換処理手順の例を示す図。
【図29】実施の形態4に係る変数識別情報変更前の圧縮命令データの例を示す図。
【図30】実施の形態4に係る変数識別情報変更後の圧縮命令データの例を示す図。
【図31】実施の形態5に係る複数のメタ命令辞書データを生成した場合の圧縮命令データの例を示す図。
【図32】実施の形態5に係る複数のメタ命令辞書データを生成した場合の圧縮命令データの例を示す図。
【図33】実施の形態6に係るジャンプ命令種別判定処理の例を示す図。
【図34】実施の形態6に係るジャンプ命令情報リストの要素のデータ構造の例を示す図。
【図35】実施の形態6に係るジャンプ命令変更処理の例を示す図。
【図36】実施の形態6に係る圧縮命令データ実行装置におけるジャンプ・アウト命令処理の例を示す図。
【図37】実施の形態6に係る圧縮命令データ実行装置におけるジャンプ・イン命令処理の例を示す図。
【図38】実施の形態6に係る圧縮命令データ実行装置における実行処理手順の例を示す図。
【図39】実施の形態1に係る圧縮処理時の処理最小単位の考え方を示す図。
【図40】実施の形態1に係るパラメータが別命令列に分離した場合の問題点を示す図。
【図41】実施の形態1に係る復元処理前のメモリ空間を示す図。
【図42】実施の形態1に係る復元処理後のメモリ空間を示す図。
【図43】実施の形態3に係る型によってサイズが異なる場合のメモリ配置例を示す図。
【図44】実施の形態3に係る型によってサイズが異なる場合のメモリ配置例を示す図。
【図45】実施の形態3に係る型に関係なくサイズが同一の場合のメモリ配置例を示す図。
【図46】実施の形態6に係る状況1〜4を示す図。
【図47】実施の形態6に係るジャンプ・アウト命令とジャンプ先との関係を示す図。
【図48】実施の形態1に係る命令データ圧縮装置の構成例を示す図。
【図49】実施の形態1〜6に係る情報処理端末装置のハードウェア構成例を示す図。
【発明を実施するための形態】
【0013】
実施の形態1.
本実施の形態では、少なくとも命令データ生成装置と、命令データ圧縮装置、圧縮命令データ実行装置の三つからなるシステムを想定している。
命令データ生成装置とは、ソフトウェア開発技術者があるアプリケーションをソフトウェアとして実現するため、開発したソースコードを入力として、圧縮命令データ実行装置が解釈・実行可能な命令で置き換えた命令データ(機械語によるプログラム)を生成し、その命令データを出力とする。
命令データ圧縮装置とは、命令データ生成装置が生成した命令データを入力として、命令データの内部を解析し、入力された命令データよりもサイズが小さくなるように変換を行い、変換した結果である圧縮命令データを生成し、圧縮命令データを出力とする。
命令データ圧縮装置は、プログラム圧縮装置の例である。
圧縮命令データ実行装置は、命令データもしくは圧縮命令データを入力として、それらの中に記述されている命令を解釈し、適切な処理を実行する事でソースコードに記述されていた内容と同一の処理を情報処理装置内で実現する。
ここで圧縮命令データ実行装置は圧縮命令データのみではなく、非圧縮状態の命令データも入力として受け付ける事が可能であり、どちらも処理可能であり、かつ命令データを実行する際には不要であるが圧縮命令データを実行する際に必要となる処理を最小限に抑える。
圧縮命令データ実行装置は、プログラム実行装置の例である。
【0014】
命令データ生成装置、命令データ圧縮装置、圧縮命令データ実行装置の実現方法は特に限定せず、ハードウェアとして実現されても構わないし、ある特定の情報処理端末装置内で実行されるソフトウェアとして実現されても構わない。
以下では説明を簡単にするため、ソフトウェアとして実現された場合のみを取り上げて説明する。
【0015】
また命令データ生成装置、命令データ圧縮装置、圧縮命令データ実行装置が実行される情報処理端末装置は一つに閉じている必要はなく、それぞれを独立した情報処理端末装置で実行する場合や、例えば命令データ生成装置と命令データ圧縮装置は一つの情報処理端末装置で実行し、圧縮命令データ実行装置のみ別の情報処理端末装置で実行すると言ったように、複数を一つの情報処理端末装置で実行する構成としても構わない。
複数の情報処理端末装置で構成する場合には、その情報処理端末装置間をネットワークで接続し、各装置間で通信可能として、自動処理できるようにしても構わないし、情報処理端末装置間のデータ移動は人手を伴った、例えばメモリカードなどにデータを保存し、そのメモリカードを別の情報処理端末装置に挿入し、そこから各装置への入力として利用すると言った方式でも構わない。
以下では説明を簡単にするため、命令データ生成装置、命令データ圧縮装置、圧縮命令データ実行装置が一つの情報処理端末装置で実行されている場合のみを取り上げて説明する。
また、同様に説明を簡単にするため、以下では全ての処理は逐次直列実行を基本とするが、並列実行やストリーミング実行で処理しても問題はない。
【0016】
図1は、本実施に係る情報処理端末装置100の構成を図示したブロック図である。
情報処理端末装置100に対する全ての要求は中央制御装置101が受け付け、その要求内容に従って命令データ生成装置102、命令データ圧縮装置103、圧縮命令データ実行装置104、ソースコード格納装置105に処理を実行させる。
ソースコード格納装置105は情報処理端末装置100において圧縮命令データに変換する対象となるソースコードを格納する記憶装置である。
命令データ格納装置106は命令データ生成装置102および命令データ圧縮装置103が生成する命令データおよび圧縮命令データを格納する記憶装置である。
命令データ生成装置102はソースコード格納装置105に格納されている全てのソースコードから一つ以上の指定されたソースコードを取得し、解析を行い、命令データに変換する処理を実施する処理装置である。
命令データ圧縮装置103は命令データ格納装置106に格納されている全ての命令データから一つ以上の指定された命令データを取得し、解析を行い、指定された命令データの合計サイズよりも合計サイズが小さくなる一つ以上の圧縮命令データに変換する処理を実施する処理装置である。
以下では命令データと言う場合には命令データ生成装置102が生成した命令データおよび命令データ圧縮装置103が生成した圧縮命令データ両方を指す用語とし、厳密に命令データ生成装置102が生成した命令データのみをさす場合には非圧縮命令データと呼ぶ事とする。
圧縮命令データ実行装置104は命令データ格納装置106に格納されている全ての命令データおよび圧縮命令データから指定されたデータを取得し、そのデータに記載されている命令に従い処理を逐次実行する処理装置である。
【0017】
以下で本実施の形態に係る情報処理端末装置100における基本処理シーケンスについて図2、図3、図4、図5を用いて説明を行う。
【0018】
図2は本実施の形態に係る情報処理端末装置100において必要となる処理を示したアクティビティ図である。
本実施の形態に係る情報処理端末装置100は、ソースコードを圧縮命令データに変換し、その変換した圧縮命令データを元にソースコードで記述された内容の処理を実行するシステムである。
そのため、本実施の形態においては少なくとも処理対象となるソースコードをシステムに認識させるための処理対象ソースコード格納処理、格納されたソースコードの全てもしくは一部から、圧縮命令データを生成する命令データ/圧縮命令データ生成処理と、生成された圧縮命令データを元にソースコードに記述された内容の処理を実行する命令データ/圧縮命令データ実行処理の3種類の処理が必要となる。
【0019】
図3は、前記処理対象ソースコード格納処理の具体的な処理シーケンスの一例を図示したものである。
中央制御装置101は上位から処理対象ソースコード登録要求を受けるとソースコード格納処理を開始する。
処理対象ソースコード登録要求には少なくとも登録対象となる一つ以上のソースコードもしくはそのソースコードを一意に識別可能な、例えばソースコードのファイル名や、識別番号などの、情報が含まれており、中央制御装置101はその情報をもとにソースコード格納装置に格納するソースコードを特定し、取得する。
中央制御装置101は取得したソースコードをソースコード格納装置105に対して格納し、その処理結果を示す処理結果IDをソースコード格納装置105から受け取る。
この処理結果IDの内容に応じて、正常終了したのか、エラーが発生したのかを上位に通知し、処理は完了する。
【0020】
図4は、前記命令データ/圧縮命令データ生成処理の具体的な処理シーケンスの一例を図示したものである。
【0021】
中央制御装置101は、上位より命令データ/圧縮命令データ生成要求を受けると命令データ生成処理を開始する。
命令データ生成要求には少なくとも命令データ生成の対象となる一つ以上のソースコード格納装置105に格納されているソースコードを一意に識別可能な情報が含まれており、中央制御装置101はその情報をもとに命令データ生成処理を行うべきソースコードを特定し、命令データ生成処理を実行する。
また、命令データ生成要求は命令データ生成要求を実施するに当たり、必要となるソースコード全ての識別情報を保持している必要はなく、適時必要なソースコードを本処理中でソースコード格納装置105から検索し、取得する事としても構わない。
【0022】
中央制御装置101は命令データ/圧縮命令データ生成要求を受けると、その要求に含まれているソースコード識別情報一式をもとに命令データ生成開始処理を命令データ生成装置102に対して開始させる。
命令データ生成装置102は、ソースコード識別情報一式に対応するソースコードをソースコード格納装置105から取得し、命令データ生成処理を実行する。
この命令データ生成処理の具体的な処理内容は、例えば非特許献1に記載されている様な一般的なコンパイラで適用される字句解析、構文解析、意味解析、最適化等の処理を実施し、その処理結果から実行環境である圧縮命令データ実行装置104が解釈可能な目的コードである命令データを生成する事である。
命令データ生成処理でエラーが発生していない場合には、ソースコードより正しい命令データが生成された事を意味するため、その場合には生成された命令データを命令データ格納装置106に格納し、最後に中央制御装置101に対して命令データ生成処理の処理結果を示す処理結果IDを返す。
命令データ格納装置106に格納された命令データには各々を一意に識別可能な識別情報が付加され格納されるが、ソースコードの識別情報と同一の識別情報で命令データを識別可能として格納されている事が望ましい。
同一ではない場合にはソースコードの識別情報とそのソースコードから生成された命令データの識別情報を紐付けする情報を保持しておく事が望ましい。
逆に、命令データ生成処理においてエラーが発生している場合には、ソースコードより正しい命令データが生成されていない事を意味するため、その場合には命令データ格納装置106への命令データ格納処理は実施せず、発生したエラーを示す処理結果IDを中央制御装置101に返し、命令データ生成処理は終了する。
なお、命令データ生成装置102は命令データ生成処理を開始する際に、最初にソースコード識別情報一式に対応するソースコードに対応する命令データが既に命令データ格納装置106に格納されているか確認を行い、格納されているものがある場合にはそれに対応するソースコードへの命令データ生成処理は実施しないものとしても構わない。
命令データ生成装置102より処理結果IDを受け取った中央制御装置101は、その処理結果IDがエラーを示す場合には、以降の処理を実施せず、上位にエラーが発生した事を通知し、処理は完了する。
逆に、処理結果IDが正常終了を示す場合、中央制御装置101は命令データ圧縮装置103に対して、命令データ圧縮処理を開始させる。
【0023】
命令データ圧縮装置103は、中央制御装置101から命令データ圧縮開始命令を受け、命令データ圧縮処理を開始する。
命令データ圧縮開始命令には圧縮対象となる命令データの識別情報は少なくとも一つ以上含まれており、その識別情報をもとに圧縮対象となる命令データを命令データ格納装置106から取得し、命令データ圧縮処理を実施する。
命令データ圧縮処理の具体的な処理内容については後述する。
【0024】
命令データ圧縮処理でエラーが発生せず、少なくとも圧縮前の命令データのサイズよりも命令データ圧縮処理で生成された圧縮命令データのサイズが小さくなった場合には、その圧縮命令データを命令データ格納装置106に格納する。
この時、圧縮命令データに対しては一意に識別可能な識別情報が付加されて格納され、その識別情報はソースコードの識別情報、または命令データの識別情報と同一の識別情報である事が望ましい。
もし同一の識別情報ではない場合には、ソースコードの識別情報および命令データの識別情報とそれらから生成された圧縮命令データの識別情報を紐付けする情報を保持しておくことが望ましい。
最後に、命令データ圧縮装置103は命令データ圧縮処理の成功を示す処理結果IDを中央制御装置101に返す。
逆に命令データ圧縮処理でエラーが発生した場合、もしくは圧縮前の命令データのサイズと圧縮命令データのサイズが同一である、もしくは圧縮命令データのサイズの方が大きい場合には、命令データの圧縮に失敗しているため、発生したエラーを示す処理結果IDもしくは圧縮命令データのサイズが命令データのサイズ以上となった事を示す処理結果IDを中央制御装置101に返す。
【0025】
命令データ圧縮装置103から処理結果IDを受けた中央制御装置101は、その処理結果IDを上位にエラーが発生した事を通知し、処理は完了する。
【0026】
図5は、前記命令データ/圧縮命令データ実行処理の具体的な処理シーケンスの一例を図示したものである。
【0027】
中央制御装置101は上位より実行要求を受けると、その要求に従い圧縮命令データ実行装置104に対して、命令データ/圧縮命令データ実行の開始命令を行う。上位より受け取る実行要求には実行対象となるソースコード、命令データ、圧縮命令データのうち少なくとも一つに対する識別情報が一つ以上含まれており、その識別情報を元に処理対象となる命令データ、圧縮命令データを特定する。
【0028】
中央制御装置101より命令データ/圧縮命令データ実行の開始命令を受けた圧縮命令データ実行装置104は、実行対象の識別情報から処理対象となる命令データ、圧縮命令データを命令データ格納装置106から取得する。
この時、命令に含まれる識別情報がソースコードに対応するものであった場合には、そのソースコードに対応する命令データもしくは圧縮命令データに対する識別情報をソースコードの識別情報と紐付け情報をもとに取得してから最終的に命令データもしくは圧縮命令データを取得する。
同様に命令に含まれる識別情報が命令データに対応するものであった場合には、その命令データに対応する圧縮命令データが存在するかどうか紐付け情報を利用して確認し、存在する場合には圧縮命令データを命令データ格納装置106から取得し、存在しない場合には命令データを命令データ格納装置106から取得する。
最後に命令に含まれる識別情報が圧縮命令データに対応するものであった場合は、その識別情報をもとに命令データ格納装置106より対象となる圧縮命令データを取得する。
命令データもしくは圧縮命令データを取得後、圧縮命令データ実行装置104は実行前準備を実施し、命令データ/圧縮命令データ実行に必要な情報、状況を構築する。
その後、命令データ/圧縮命令データ実行を開始し、実行終了後に実行のために準備した情報や状況の終了処理を行い、最後に実行結果を中央制御装置101に返し、終了となる。
処理結果を受け取った中央制御装置101はその処理結果を上位に返し、命令データ/圧縮命令データ実行処理は終了となる。
【0029】
以上までで、本実施の形態に係る情報処理端末装置100における基本処理シーケンスについて図2、図3、図4、図5を用いて説明を行ったが、この説明では各処理ブロックを直列で処理する事として説明していたが、必ずしもそのような処理形式で行う必要はない。
例えば、前記命令データ/圧縮命令データ生成処理における命令データ生成開始処理で単一のソースコードのみを処理対象とせずに、複数のソースコードを一括して処理対象として処理を行っても構わないし、複数のソースコードを直列で処理せずに並列処理しても構わない。
【0030】
次に本実施の形態で扱うソースコードに関する具体的な説明を行う。
【0031】
ソースコードとは最終的に生成されるソフトウェアが実行すべき処理内容について人間、もしくは何らかのツールがある言語仕様の構文規則に従い記述したデータの事を指す。
ソースコードは人間がその内容を容易に解読可能である事を目的の一つとしており、通常は従うべき構文規則はソースコードがテキスト形式のデータである事を前提としている。
本実施の形態ではC言語の構文規則に従ったソースコードを扱う事とするが、これは本実施の形態がC言語の構文規則のみに適用可能である事を示すものではなく、C++言語やJava(登録商標)言語などその他任意の言語仕様であっても本実施の形態は適用可能である。
【0032】
図6は、ソースコードの一例である。
このソースコードの一例は前述の通りC言語の構文規則に従ったものである。
一行目は整数型の変数aに対して3を代入する事を意味している。
二行目は整数型の変数bに対して4を代入する事を意味している。
三行目は整数型の変数cに対して変数aと変数aを加算した結果を代入する事を意味している。
変数aは直前までの処理で3が代入されているため、cに代入される値はその加算結果である6となる。
【0033】
次に本実施の形態で扱う命令データに関する具体的な説明を行う。
【0034】
命令データは命令データ生成装置102が中央制御装置101より指定されたソースコードを入力として命令データ生成処理を実施した際に、その処理結果として生成される機械語によるデータの事を指す。
命令データは圧縮命令データ実行装置104が解釈可能なデータ形式で表現されている。
一般的に命令データは、人間が解釈可能である事を必ずしも必要としておらず、圧縮命令データ実行装置104が効率的に解釈できる事が優先される。
そのため、命令データのデータ形式はバイナリ形式となっている事が一般的である。
また、命令データは前記のバイナリ形式のデータと共にソースコードやソースコードの構文解析木などの付加情報を付加しておいても構わない。
【0035】
図7は、命令列のデータ形式の一例を示した図である。
【0036】
この例では命令列は命令ID部とそれに続くパラメータ部の組を最小データ構造としている。
命令ID部には圧縮命令データ実行装置が持つ処理セットに対して一意に振られている命令識別番号を格納する領域である。
本実施の形態では命令ID部は1byteの固定長として説明を行うが、固定長である必要はなく、可変長でもよい。
次に、パラメータ部は対応する命令ID部に格納されている命令識別番号に対応する処理を圧縮命令データ実行装置104が実行する場合に必要な情報を格納する領域である。
本実施の形態では命令ID部に格納されている命令識別番号によってパラメータ部のサイズおよびパラメータ部に格納されるパラメータ数は決定される可変長として説明を行うが、全ての命令において同一サイズのパラメータ部を持つ固定長としてもよい。
【0037】
図8は、命令列における命令識別番号と具体的命令内容およびパラメータ部サイズの対応の一例である。
【0038】
命令ID部は1byteであるため、命令識別番号も0から255までの値をとることが可能である。
各命令識別番号に対応する具体的な処理内容は適時説明を行うため、ここでは詳細は省略し、対応する処理の処理名とその処理で必要となるパラメータ部のサイズの対応が付けられている。
例えば、命令ID部に5が格納されている場合、圧縮命令データ実行装置104は処理名popvに対応する処理を実施しなければならず、またその際に命令識別番号直後に続くパラメータ部のサイズは0byteである事を意味している。
ある命令列を圧縮命令データ実行装置104が解釈する内容は、その命令列を生成する際に処理対象となったソースコードの内容と意味的な変質が生じないようになっており、その同質性は命令データ生成装置102および命令データ圧縮装置103が保証するものである。
ここで「意味的な変質が生じない」とは、ソースコードで記述された内容に従って処理を行った結果と、命令データで記述された内容に従って処理を行った結果が任意の入力に対して、かならず出力が一致する事を意味し、その処理過程が同一である事を求めるものではない。
つまり、ソースコードに記載されていないが圧縮命令データ実行装置104で処理する際に都合のよい命令に置き換えたり、内部的に必要となる処理を追加する事や、非特許文献1などに記載されている最適化を命令データ生成装置102もしくは命令データ圧縮装置103で実施しても構わないことを意味する。
【0039】
図9は、図6に示したソースコードを処理対象として、図8に示す命令識別番号構成(命令セット)に従い、命令データ生成装置102が生成した命令データを、命令名を用いてニーモニック表現した一例である。
【0040】
処理deflocalvarは圧縮命令データ実行装置が保持するローカル変数領域としてパラメータに指定された個数だけ変数領域を新たに確保する処理である。
本実施の形態では単一変数領域のサイズは4byte固定長を前提としており、パラメータ部に記載の内容3は領域を確保すべき変数の個数を示している。
この3変数とは変数a,b,cの事である。
ここで単一変数領域のサイズを固定長としているが、必ずしも固定長である必要はないが、固定長とする事によってより効果的な後述する圧縮命令データの生成を行う事が可能となる。
次に2行目から4行目でソースコードの1行目に対応する処理が記載されている。
処理numberはパラメータ部に記載の整数値を圧縮命令データ実行装置104が保持するスタック領域にプッシュする処理である。
ここでパラメータ部に記載の3とは変数aへの代入値3の事である。
次に、処理setnameはスタック領域の先頭の値をポップした後、パラメータ部に記載のオフセット位置の変数領域に対して代入し、その代入した値をスタック領域にプッシュする処理である。
ここでパラメータ部に記載の0とは宣言されている変数aに対するオフセット値である。
本明細書では特に断りがない限りソースコード中に出現順にオフセット値を割り振り、オフセット値はその変数が宣言される直前までに宣言済みの変数の個数としている。
次に、処理popvはスタックの先頭要素を削除する処理である。
この処理を実施する事で直前のsetnameの最後に行った代入値をスタック領域にプッシュした結果をスタックから開放し、スタックに値が残る事を防止している。
この処理はソースコード中に明記されていないが、圧縮命令データ実行装置104が処理を行うに当たり、必要となる処理である。
以上でソースコードの一行目に対応する命令データの処理が終わる。
【0041】
その直後にソースコードの二行目に対応する命令データが5行目から7行目に記載される。
ソースコードの二行目はソースコードの一行目と同一の構造を持っており、変数名とその変数に代入する値が異なるのみであるため、処理numberおよび処理setnameに対するパラメータ部の値のみが異なっている。
【0042】
最後に8行目から12行目はソースコードの3行目に対応する命令コードが記載されている。
8行目および9行目には処理nameが記載されており、それぞれパラメータ部に記載のオフセット位置の変数領域に格納されている値をスタック領域にプッシュする処理である。
10行目には処理addが記載されており、スタック領域の先頭2要素をポップし、その2要素を加算した結果をスタックにプッシュする処理である。ここまでの命令コードによってソースコードの三行目の一部である「a+a」の処理が記述された事になる。
次に、11行目の処理setnameでスタックの先頭に格納されている「a+a」の結果の値をポップし、変数cに代入し、その代入した値をスタックにプッシュを行い、最後の12行目の命令popvで直前の処理setnameの最後にプッシュした値をスタックからポップして削除し、ソースコードの3行目に対応する記述は完了する。
【0043】
図10は、図9で示したニーモニック表現の命令データを16進数で表現した一例である。
通常命令データをバイナリ形式として扱う場合にはこのような形式で表現される事になる。
【0044】
次に、本実施の形態で扱う圧縮命令データに関する具体的な説明を行う。
【0045】
圧縮命令データとは、命令データ圧縮装置103が指定された一つ以上の命令データを処理対象として処理を行い、その命令データの意味的な同質性は保証してその命令データよりもデータサイズが小さくなるように変換を行った結果の命令データの事である。
図11を用い、図4における命令データ圧縮処理の具体例を一つ挙げ、説明する。
【0046】
命令データから圧縮命令データを生成するためには、命令データにおける重複する命令列を集計する処理(同一命令列出現回数カウント)を実施する。
ここで命令列とは命令ID部とパラメータ部の組が一つ以上連続するデータの事を指す。
つまり、本実施の形態では、命令データを任意のバイナリ形式のデータとしてデータ圧縮処理を実施するのではなく、命令としての意味的な構成を最小単位として命令データの圧縮を実施する。この点の詳細は後述する。
次に集計した命令列の出現回数に関する情報からどの命令列を圧縮対象とするのが効果的かを判断し、圧縮対象となる命令列に関する情報をテーブルデータとして作成する処理(圧縮対象命令列テーブル生成)を実施する。
最後に圧縮対象となった命令列を命令データ中から検索し、メタ命令に置き換えることで命令データの意味的な同質性を保持したままデータサイズを削減し、圧縮命令データを生成する処理(命令データ圧縮変換)を実施し、圧縮命令データ生成処理を完了する。
【0047】
次に、図11に示す処理を実現するため、本実施の形態に係る命令データ圧縮装置103は、例えば図48に示す構成を有する。
ここでは、図48に従って、本実施の形態に係る命令データ圧縮装置103の構成例を説明する。
【0048】
命令データ格納装置アクセス部1031は、命令データ格納装置106から複数の命令列が含まれる機械語による命令データ(プログラム)を入力する。
前述したように、命令列は、命令が示される命令コード(命令ID部)と命令コードの命令の対象となる0バイト以上のパラメータ値(パラメータ部)とが組み合わされている。
また、命令データ格納装置アクセス部1031は、後述の命令解釈・圧縮部1032により命令列がメタ命令に置き換えられた後の圧縮命令データと、後述のメタ命令辞書データ生成部1036により生成されたメタ命令辞書データとを対応付けて命令データ格納装置106に出力する。
命令データ格納装置アクセス部1031は、プログラム入力部及びプログラム出力部の例である。
【0049】
命令解釈・圧縮部1032は、命令データ格納装置アクセス部1031により入力された命令データの各命令列を解析し、所定の条件を満たす命令列を、当該命令列よりもデータ量が少ないメタ命令に置き換える。
命令解釈・圧縮部1032は、命令置き換え部の例である。
命令解釈・圧縮部1032は、同一命令列出現回数カウント部1033、圧縮対象命令テーブル生成部1034、命令データ圧縮変換部1035に区別される。
【0050】
同一命令列出現回数カウント部1033は、命令データ格納装置アクセス部1031により入力された命令データにおいて命令コードとパラメータ値との組み合わせが共通する命令列の個数を計数する。
【0051】
圧縮対象命令テーブル生成部1034は、同一命令列出現回数カウント部1033が計数した命令列の出現回数に関する情報からどの命令列を圧縮対象とするのが効果的かを判断し、圧縮対象となる命令列を示す圧縮対象命令列テーブルを生成する。
つまり、圧縮対象命令テーブル生成部1034は、命令列ごとに、同一命令列出現回数カウント部1033が計数した命令列の個数と命令列1つあたりのデータ量から命令データにおけるデータ総量を算出し、その命令列に対するメタ命令のデータ量とメタ命令辞書データのデータ量との合計を算出し、メタ命令のデータ量とメタ命令辞書データのデータ量の合計がその命令列のデータ総量よりも少ない場合に、その命令列をメタ命令で置き換えると決定し、圧縮対象命令列テーブルに加える。
【0052】
命令データ圧縮変換部1035は、圧縮対象命令テーブル生成部1034により圧縮対象とされた命令列を命令データ中から検索し、メタ命令に置き換えることで命令データの意味的な同質性を保持したままデータサイズを削減し、圧縮命令データを生成する処理(命令データ圧縮変換)を実施し、圧縮命令データ生成処理を完了する。
より具体的には、命令データ圧縮変換部1035は、圧縮対象命令列テーブルに示される命令コードとパラメータ値との組み合わせに一致する命令列を抽出し、抽出した命令列をメタ命令に置き換える。
圧縮対象命令列テーブルに示される命令コードとパラメータ値との組み合わせに一致する命令列が2以上存在する場合は、それら2以上の命令列を共通するメタ命令に置き換える。
【0053】
メタ命令辞書データ生成部1036は、メタ命令辞書データを生成する。
メタ命令辞書データは、メタ命令と対応付けて、メタ命令に置き換えられた命令列が示されるデータである。
【0054】
命令圧縮時情報記憶部1037は、命令解釈・圧縮部1032が圧縮処理中に利用する記憶手段である。
【0055】
以下では、命令データ圧縮装置103の動作例について順に具体例を挙げ説明を行う。
【0056】
図12は、図11における同一命令列出現回数カウント処理の具体的な一例の処理を図示したものである。
同一命令列出現回数カウント処理は、図48に示した同一命令列出現回数カウント部1033により行われる。
なお、前述の通り、出現回数をカウントする対象は命令列であり、1つの命令列に複数の命令ID部が含まれる場合が考えられるが、ここでは命令列には単一の命令ID部のみ含まれているものとして説明する。
【0057】
処理1201では、同一命令列出現回数カウント部1033は、命令毎に出現回数を記録するための記録領域を確保し、その内容を初期化する。
ここで用いられる記録領域は、例えば命令圧縮時情報記憶部1037である。
【0058】
図13は命令ID別出現回数記録テーブルの要素のデータ構造の一例を図示したものである。
命令識別番号領域はその要素で出現回数を集計する命令の命令IDの値を格納する領域である。
この領域は命令ID別出現回数記録テーブルを配列として実装した場合にはその配列のインデックスで代用する事も可能である。
パラメータ別出現回数記録テーブル領域は、その要素で出現回数を集計する命令のその直後に続くパラメータ部の値別で出現回数を集計するためのテーブルデータのアドレスを格納する領域である。
パラメータ部が存在しない命令の場合には、アドレスではなく、直接出現回数を保持しても構わないし、パラメータ部が存在する命令と同様に参照先のパラメータ別出現回数記録テーブルで出現回数を記録しても構わない。
【0059】
図14はパラメータ別出現回数記録テーブルの要素のデータ構造の一例を図示したものである。
パラメータ部には集計対象となる命令列の命令ID部直後のパラメータ部の値を直接、もしくは間接参照で保持するための領域である。
出現回数記録領域には、集計対象となる命令IDおよびパラメータ部の値を組とした命令列が命令データに何回出現しているかを集計した結果を記録するための領域である。
パラメータ別出現回数記録テーブルはパラメータ部の値毎に出現回数を記録しなければならないため、固定長配列で管理するのは効率がよくないため、リスト形式や連想配列形式のテーブル管理を行う事を想定している。
【0060】
処理1201の説明に戻る。
記憶領域の確保および初期化に関しては、同一命令列出現回数カウント部1033は、命令ID別出現回数記録テーブルが例えば固定長配列である場合には命令セットで定義されている命令の個数と同数の要素を持つように記憶領域を確保し、各要素に対してその要素で出現回数を記録する命令の命令IDの値を命令識別番号領域に代入し、パラメータ別出現回数記録テーブルに対しては初期値、例えば0やNULLポインタなどを代入して初期化を行う。
初期化完了後に処理1202に遷移する。
【0061】
処理1202では、同一命令列出現回数カウント部1033は、処理対象となっている一つ以上の命令データのうち、まだ処理を行っていない命令データから一つを選択し、その命令データの先頭を指し示すポインタptを作り出す。
このポインタptは、以降の処理で現在処理対象となっている命令データ中の処理すべき命令ID部の位置を示すために利用する。
pt作成後、処理1203に遷移する。
【0062】
処理1203では、同一命令列出現回数カウント部1033は、現時点でのポインタptが処理対象の命令データの終端に到達しているかを判定する。
もし、終端に到達している場合、現在処理対象となっている命令データ中の全ての命令ID部の処理を完了したことを意味しており、次の命令データの検索処理を実施するため処理1204に遷移する。
逆に終端に到達していない場合には処理対象の命令データ中にptで指し示す位置以降のデータは処理されていない事を意味しているため、それらに対する処理を継続するため処理1205へ遷移する。
【0063】
処理1204では、同一命令列出現回数カウント部1033は、現在処理対象の命令データは全て処理完了したため、次に処理対象とすべき命令データ、つまり処理対象となっていない命令データが存在するか検索する。
その検索の結果、処理対象とすべき命令データが存在しない場合には、ここで処理すべき全ての命令データに対して処理を完了しているため、本処理をもって同一命令列出現回数カウント処理は終了となる。
逆に処理対象とすべき命令データが存在する場合には、その命令データを処理対象として処理1202へ遷移する。
【0064】
処理1205では、同一命令列出現回数カウント部1033は、ptが指し示す命令ID部の値に対応する命令識別番号が命令セットに存在するか確認し、対応する命令の情報を取り出す。
ここで取り出す情報は少なくともパラメータ部のサイズ情報などが考えられる。
情報の取り出し完了後、処理1206へ遷移する。
【0065】
処理1206では、同一命令列出現回数カウント部1033は、ptが指し示す命令ID部の値に対応する命令に関する出現回数を記録するための命令ID別出現回数記録テーブルの要素(以下、countと表記)を取り出す。
この時、countのパラメータ別出現回数記録テーブル領域がNULLである場合には、パラメータ別出現回数記録テーブルを作成し、countのパラメータ別出現回数記録テーブル領域にそのアドレスを代入する。
処理完了後に処理1207に遷移する。
【0066】
処理1207では、同一命令列出現回数カウント部1033は、ptが指し示す命令ID部の直後に続くパラメータ部を検索キーとしてcountのパラメータ別出現回数記録テーブル領域で指し示すパラメータ別出現回数記録テーブルから対応する要素(以下、targetと表記)を検索する。
ここで、パラメータ部が存在しない命令に対する命令識別番号が、ptが指し示す命令ID部に記載されている場合には、検索キーを指定せずにcountのパラメータ別出現回数記録テーブル領域で指し示すパラメータ別出現回数記録テーブルの先頭要素を検索する。
検索処理完了後、処理1208に遷移する。
【0067】
処理1208では、同一命令列出現回数カウント部1033は、処理1207で検索したtargetが見つかっているか否かで条件分岐を行う。
targetが見つかっていない場合には、ptが指し示す命令IDと直後のパラメータ部の組は初めて見つかった事を意味するため、初検索時の処理となる処理1209へ遷移する。
逆にtargetが見つかっている場合には、既にその組み合わせの命令列は見つかっている事を意味し、2回目以降の出現回数記録処理となる処理1213へ遷移する。
【0068】
処理1209では、同一命令列出現回数カウント部1033は、ptで指し示す位置から始まる命令列は初めて見つかったため、count中に対応する要素であるtargetが存在していない。
そのため、対応するパラメータ別出現回数記録要素を新規に作成・初期化し、それをtargetとし処理1210に遷移する。
【0069】
処理1210では、同一命令列出現回数カウント部1033は、targetの出現回数記録領域に1を代入し、処理1211へ遷移する。
【0070】
処理1211では、同一命令列出現回数カウント部1033は、ptで指し示す命令列のパラメータ部の値をキーとしてtargetをcountに登録する。
以上の処理1209から処理1211によって初めて見つかった命令列に対する出現回数記録処理が完了する。
処理1211が終了後、処理1212に遷移する。
【0071】
次に処理1213では、同一命令列出現回数カウント部1033は、ptが指し示す命令列に対応するtargetが見つかっているため、targetの出現回数記録領域の値に1加算した値を、targetの出現回数記録領域に代入し、出現回数を更新する。
代入処理終了後、処理1212へ遷移する。
以上で、ptが指し示す位置から開始される命令列に対する出現回数更新処理は完了する。
そのため、処理1212では、同一命令列出現回数カウント部1033は、次に処理すべき命令列の命令ID部にptをシフトさせる処理を行う。
シフトするサイズに関しては、処理1205で取得したパラメータ部のサイズ情報から算出する。
シフトが完了後、新たなptに対する処理を実施するため処理1203へ遷移する。
【0072】
以上で説明した命令ID別出現回数記録テーブルの作成・初期化処理は命令列に単一の命令ID部のみ含まれていることを前提としているが、命令列は前述の通り複数の命令ID部を含む事が想定されている。
そのため、複数の命令ID部を含む命令列の出現回数の集計を実施する必要があるが、単一の命令ID部のみを前提とした方法を再帰的に繰り返す事で実現可能である。
以降では複数の命令ID部を含む事が可能である事として説明を行う。
【0073】
例えば、複数回出現した命令列に対して、その命令列の直後以降を一つの命令データと見なし、同様の集計方法を実施し、その結果を組み合わせる事で複数の命令ID部を含む命令列の出現回数の集計が実現される。
その際に、複数回出現した命令列が各命令データのどの位置に出現したかを示す情報を格納する、出現位置情報リストを命令ID別出現回数記録テーブルの要素のデータ構造に追加し、その出現位置を記録する処理を処理1213および処理1210に追加し、処理1607で圧縮対象命令テーブルに上記出現位置情報リストも併せて登録する処理を追加する事で、それ以降の処理でもどの命令データ中のどの位置から圧縮対象命令列が記述されているかを把握可能となり、上記再帰処理を同一圧縮対象命令列が開始される位置からの処理に限定が可能となり、処理効率を向上させる事も可能である。
以降の説明では出現位置情報リストが命令ID別出現回数記録テーブルおよび、圧縮対象命令テーブルの要素に含まれるものとして説明を行う。
【0074】
また、以上で説明した出現回数集計方法は一例であり、それ以外の手順で集計したとしても構わない。
【0075】
図16は図11における、圧縮対象命令列テーブル生成処理の具体的な一例である。
圧縮対象命令列テーブル生成処理は、図48に示した圧縮対象命令テーブル生成部1034により行われる。
【0076】
圧縮命令データは処理対象となる一つ以上の命令データ中の全ての命令列の中から、サイズ削減率などを考慮し、一つ以上の命令列を、少なくともその命令列よりもサイズの小さいメタ命令で置き換えることによって全体として命令データよりもサイズを小さくした命令データである。
メタ命令は圧縮命令データ実行装置104で解釈する場合、対応する命令識別番号、もしくは付随するパラメータ部の値等によって、そのメタ命令が存在する位置の本来の命令列を識別し、メタ命令を実行する代わりに本来の命令列を実行する。
そのため、圧縮命令データには前述のメタ命令で置換された命令データと共に、メタ命令に対応する命令識別番号、もしくは付随するパラメータ部の値等をキーとして本来の命令列を知るための、情報が必要となる。その情報として圧縮対象命令列テーブルを生成するのが圧縮対象命令列テーブル生成処理である。
【0077】
処理1601では、圧縮対象命令テーブル生成部1034が、圧縮対象命令列テーブル(以下、tableと表記)の実体を生成する。
このテーブルは、最終的に幾つの命令列が集計されたのか未知の場合には可変長配列やリスト構造などで実現する。
ここではリスト構造を仮定し説明を行う。実体生成完了後に処理1602へ遷移する。
【0078】
図17は圧縮対象命令列テーブルの要素に関するデータ構造の一例を図示している。
【0079】
命令列記憶領域では、登録されている命令列もしくはその命令列に関する情報を記録する領域である。
重要度記録領域は、その命令列をメタ命令に置き換えた場合の圧縮可能なサイズなどから判断し算出する重要度を記録する領域である。
最終的に全ての命令列に対する重要度を算出し、重要度の高い順に圧縮対象とする命令列を決定する。
なお、圧縮対象命令列テーブルは、図48の命令圧縮時情報記憶部1037を用いて作成される。
【0080】
処理1602では、圧縮対象命令テーブル生成部1034は、同一命令列出現回数カウント処理で生成した命令別出現回数記録テーブルからテーブルの先頭要素(以下、countと表記)を取り出す処理を行う。
取り出し完了後、処理1603に遷移する。
【0081】
処理1603では、圧縮対象命令テーブル生成部1034は、countのパラメータ別出現回数記録テーブルから参照可能なパラメータ別出現回数記録テーブルから未処理要素の有無によって条件分岐を行う。
未処理要素が存在しない場合には、countの要素全てを処理完了したため、新たな処理対象を探すため処理1608へ遷移する。
逆に未処理要素が存在する場合にはその未処理要素を処理するため処理1604へ遷移する。
【0082】
処理1604では、圧縮対象命令テーブル生成部1034は、その未処理要素(以下、targetと表記)を取得し、処理1605へ遷移する。
【0083】
処理1605では、圧縮対象命令テーブル生成部1034は、targetが対応する命令列をメタ命令で置き換えた場合に圧縮効果があるか判定を行う。
圧縮効果は、例えば以下の不等号式が成立する場合には圧縮効果があると判定する。
[命令列長]−[メタ命令長]>0
判定処理終了後、処理1606へ遷移する。
【0084】
処理1606では、圧縮対象命令テーブル生成部1034は、処理1605の判定結果をもとに、targetが対応する命令列を圧縮対象命令列テーブルに登録するかどうかを判定し分岐処理を行う。
通常は処理1605で圧縮効果があると判定された場合には、テーブル登録を行うため、処理1607へ遷移し、圧縮効果がないと判定された場合には次の要素を処理するため、処理1603へ遷移する。
【0085】
処理1607では、圧縮対象命令テーブル生成部1034は、targetが対応する命令列に関して圧縮対象命令列テーブルへ情報登録を行う。
この際に、その命令列の重要度を算出し、その結果と共に一つの要素を構成し登録を行う。
ここで重要度は例えば以下の式で算出した値等が考えられる。
ここでメタ命令辞書データ登録情報長とはメタ命令で置き換えた場合、メタ命令から本来の命令列を取り出すための情報源となるメタ命令辞書データにこの命令列を登録した場合のデータ長を意味する。
([命令列長]−[メタ命令長])×[命令列出現回数]−[メタ命令辞書データ登録情報長]
【0086】
処理1608では、圧縮対象命令テーブル生成部1034は、現在のcountに登録されているパラメータ別出現回数記録テーブル要素は全て処理完了しているため、次の処理対象となる未処理要素の有無で分岐処理を行う。
未処理要素が存在する場合には、処理1609へ、存在しない場合には処理1610へ遷移する。
【0087】
処理1609では未処理要素が存在するため、圧縮対象命令テーブル生成部1034は、その要素をcountとして処理1603へ遷移する。
【0088】
処理1610では未処理要素が存在しない、つまり全ての命令列に関して処理が完了したことを意味するため、圧縮対象命令テーブル生成部1034は、tableから最終的な圧縮対象命令列テーブルを生成する。
メタ命令で置換可能な命令列の個数は通常、上限が設けられるため、その上限数をここでNとした場合、table内の全要素を重要度でソートし、上位N以下は圧縮対象から排除して、残ったN個の命令列を最終圧縮対象命令列として確定し、各要素から重要度を削除したtableをメタ命令辞書データとし、処理を完了する。
【0089】
図18は、図11における、命令データ圧縮変換処理の具体的な一例である。
本処理では圧縮対象命令列テーブル生成処理で生成したメタ命令辞書データに登録された命令列を処理対象となっている全ての命令データから検索し、その命令列を適切なメタ命令で置き換える処理を行う。
【0090】
以下ではメタ命令の具体的な例を挙げる。
メタ命令の具体的な例として命令セットの未使用命令識別番号空間を利用する例を挙げる。
本実施の形態では、命令識別番号は1バイトの固定長と仮定しており、命令識別番号は0から255、16進数表記では0x00から0xFFまでの256通りの番号を割り振る事が可能である。
そのうち、例えば0xF0から0xF9までが具体的な通常命令が割り当てられていない未使用命令識別番号であったとすれば、その0xF0から0xF9までをメタ命令用として予約する事でメタ命令を0xF0から0xF9で表現する事が可能である。
この方法であればメタ命令は1バイトで表現可能となる。
その場合、メタ命令辞書データの要素数は最大で10個までとなり、0xF0は先頭要素の命令列に対応し、0xF1は2番目の命令列に対応といった方法でメタ命令と圧縮対象命令列の対応を決定する事が可能となる。
【0091】
未使用命令識別番号空間が連続していない場合でも、同様に未使用命令識別番号にメタ命令を割り振る事も可能である。
その場合の一つの方法として未使用命令識別番号のうち、一つをメタ命令用として定義し、メタ命令にパラメータ部を少なくとも1つ持たせ、そのパラメータにメタ命令辞書データ中の対応する圧縮対象命令列が格納されている要素のインデックス値を保持させて、対応付ける方法が考えられる。
この方法の場合にはメタ命令長は2バイト以上となる。
【0092】
その他に、メタ命令辞書データに圧縮対象命令列と組にして対応するメタ命令の命令識別番号の値を登録し、メタ命令を圧縮命令データ実行装置で処理する際にはメタ命令辞書データから処理対象のメタ命令と同じ値を持つ要素を検索して対応付ける事も可能である。
この方法の場合にはメタ命令長は1バイトとなるが、上記の通り圧縮命令データ実行装置で処理する際の対応する命令列の検索処理が必要となる。
【0093】
次に、メタ命令の具体的な例として命令セットの使用済み命令識別番号空間のうち、処理対象となっている命令データ全てで使用されることがなかった命令識別番号をメタ命令として利用する例を挙げる。
この方法では命令識別番号空間の全てが既に命令が割り振られている場合や、未使用命令識別番号が存在するが、その個数以上に圧縮対象メタ命令が存在する場合に、未使用命令識別番号の個数を超えてメタ命令を定義する場合に有効である。
この方法の場合にはどの命令識別番号をメタ命令に置き換えたのかを示す情報をメタ命令辞書データ等の圧縮命令データ中に記録する必要がある。
【0094】
また、メタ命令辞書データに登録される命令列が決められた長さの命令長に限定できるとは限らない。
そのような登録される命令列の命令長が不定の場合には登録時にその命令の命令長も併せて登録する。
【0095】
図11における、命令データ圧縮変換処理の具体例を、図18を用いて説明する。
なお、命令データ圧縮変換処理は図48に示した命令データ圧縮変換部1035により行われる。
【0096】
処理1801では、命令データ圧縮変換部1035は、処理対象の全ての命令データの中から未処理の命令データを一つ選択し、その命令データの先頭の命令部をポインタptで指し示し、処理1802に遷移する。
【0097】
処理1802では、命令データ圧縮変換部1035は、ptが指し示す内容は命令データの終端であるかどうかを判定し、その結果によって分岐処理を行う。
終端である場合には、その命令データに記述されている命令列全てを処理した事を意味し、処理1803に遷移する。
終端ではない場合には、その命令データには未処理命令列が存在し、その先頭はptが指し示す命令列である事を意味し、処理1804に遷移する。
【0098】
処理1803では、命令データ圧縮変換部1035は、処理対象の全ての命令データの中に未処理の命令データが存在するか判定し、その結果によって分岐処理を行う。
未処理命令データが存在する場合には、その未処理命令データを処理するため、処理1801に遷移する。
一方、未処理命令データが存在しない場合には、全ての処理対象命令データに対する処理を完了したことを意味するため、命令データ圧縮変換処理を終了する。
【0099】
処理1804では、命令データ圧縮変換部1035は、ptが指し示す位置からの命令列がメタ命令辞書データに登録されているか検索する。
検索が完了したら、処理1805に遷移する。
【0100】
処理1805では、命令データ圧縮変換部1035は、処理1804の検索結果によって分岐処理を行う。
検索の結果、一致する命令列が存在した場合には処理1806へ遷移し、一致する命令列が存在しない場合には処理1807に遷移する。
【0101】
処理1806では、命令データ圧縮変換部1035は、一致する命令列がメタ命令辞書データに存在しているため、ptが指し示す位置からの命令列はメタ命令で置換する。
置換終了後に処理1807に遷移する。
【0102】
処理1807では、ptが指し示す位置からの命令列は処理が完了しているため、命令データ圧縮変換部1035は、その命令列長分だけptをシフトさせ、次の命令列の先頭を指し示す様に更新する。
シフト処理完了後に処理1802に遷移する。
【0103】
以上で、処理対象となった全ての命令データをメタ命令辞書データに登録されている命令列をメタ命令で置き換えることで圧縮命令データを生成が完了する。
【0104】
図15は図9で取り上げた命令データに対し、図12で示した同一命令列出現回数カウント処理を適用した場合に最終的に生成される、命令ID別出現回数記録テーブルの一例である。
命令識別番号とパラメータ別出現回数記録テーブルの領域は、図13に示したものである。
そして、パラメータ別出現回数記録テーブルの要素であるパラメータ部と出現回数記録領域は、図14に示したものである。
【0105】
図19は、図15に挙げた命令ID別出現回数記録テーブルに基づき図16で示した圧縮対象命令列テーブル生成処理を実施した場合に生成される、圧縮対象命令列テーブルの一例であり、図20はその圧縮対象命令列テーブルに基づき生成されるメタ命令辞書データの一例である。
【0106】
この例ではメタ命令は連続する未使用命令識別番号空間を利用して定義される前提で、メタ命令長は1として生成している。
圧縮対象命令列テーブルで重要度が0よりも大きくなるのは命令列name(0)のみであり、その他はメタ命令辞書データに命令列を登録する事で増加するデータサイズ増加を考慮すると、サイズ削減効果がない事を意味している。
このメタ命令辞書データには命令列name(0)のみがメタ命令に変換する事で命令データのサイズ削減に寄与できる事を意味する。
【0107】
図21は、図9に示した命令データに対して図20に示したメタ命令辞書データに基づき図18に示した命令データ圧縮変換処理を実施した結果生成される、命令データの一例である。
【0108】
name(0)に対応する「0D00」がメタ命令「F0」に置き換えられることによって命令データとしては3バイトのサイズ削減となり、メタ命令辞書データは2バイトであり、全体として圧縮前の命令データと圧縮命令データを比較すると1バイトのサイズ削減となる。
ただし、メタ命令辞書データに登録される命令列の命令長が不定長である場合には、例えばメタ命令辞書データに命令長として1バイトの整数領域が追加する事があり、その場合にはサイズ削減効果はなくなる。
ただし、今回は説明を簡略化するため、処理対象となる命令データが小さいためであるが、一般的には例示した命令データよりもデータサイズは大きくなるため、出現回数が上がればサイズ削減効果が発生する。
【0109】
例えば、画像データの圧縮であれば、最小単位データサイズ(そのサイズ以下に分割して圧縮処理を行わないサイズ)はRGBの3バイト、単なるバイナリデータであれば1バイトの様に固定されているが、本実施の形態に係る命令データ圧縮装置103では、最小単位データサイズは固定値ではなく可変である。
つまり、命令識別番号とそれに付随する全てのパラメータを最小単位とするため、処理最小単位のサイズは可変(厳密には命令識別番号によってその位置での処理最小単位が決まる)である。
例えば、図39の様に、ある位置の命令識別番号が4バイト分のパラメータを伴う場合、その位置のデータの処理最小単位は5バイト(命令識別番号が1バイト固定を前提)となる。
つまり、先頭3バイトのみが圧縮命令列として登録され、残り2byteが非圧縮命令列に残るような命令列が分割されるような圧縮処理は行わない。
そして、次の位置の命令識別番号がパラメータを伴わない場合、その位置のデータの処理最小単位は1バイトとなる。
このように、本実施の形態に係る命令データ圧縮装置103では、命令列ごとに最小単位データサイズが変化する。
【0110】
このような方式を採用する理由は、後述するように、圧縮命令データ実行装置104での処理を簡略化するためである。
例えば図40の様に、ある命令識別番号と第1のパラメータ(Param1)は非圧縮命令列に含まれているが、その命令に付随する第2のパラメータ(Param2)、第3のパラメータ(Param3)は圧縮命令列に含まれている等の状況が発生すると、圧縮命令データ実行装置104ではプログラムカウンタ(PC)に相当する処理対象命令指示手段の位置情報を退避させるだけではなく、その命令に付随するパラメータのどこからが圧縮命令列に記述されているかを知る手段が新たに必要となる。
しかし、そのような手段を実現した場合には、実行時の処理負荷を増大させる欠点があり、その欠点を回避するため、必ず「ある命令列に記述されている場合、必ずその命令に付随するパラメータは同一の命令列に連続して記述される」事を保証するために上記の処理最小単位の決定方法を採用している。
【0111】
次に、圧縮命令データ実行装置104における命令データおよび圧縮命令データ実行処理の具体的手順を挙げて説明する。
【0112】
従来の圧縮された命令データをもとに処理を遂行するデータ処理装置は、圧縮された命令データから非圧縮状態の命令データを復元し、復元された命令データを用いて処理を遂行する。
しかし、その方法を用いた場合には圧縮状態の命令データと復元された命令データの両方をデータ処理装置内に記憶する必要があり、記憶領域を圧迫する。
また、命令データの圧縮処理が必須であり、命令データの実行処理時間が長くなる問題がある。
以上の問題を解決するため、本実施の形態に係る圧縮命令データ実行装置104は圧縮命令データからの命令データ復元処理を不要とし、処理時間短縮と記憶領域圧迫軽減を実現する。
【0113】
ここで、「圧縮された命令データから非圧縮状態の命令データを復元」することは、「メモリ上に確保されている圧縮命令データに対して何らかの処理を行い、メモリ上に確保した領域に圧縮前の命令データを再現する」行為を意味する。
つまり、従来のデータ処理装置では、「圧縮された命令データから非圧縮状態の命令データを復元」する際に、圧縮前のデータを再現するためのメモリ領域を確保しなければならない。
ただし、メモリに限定する必要はなく、上記記載の「メモリ」を「HDD」に置き換えても同じであり、何らかの上限のある資源を消費する事によって圧縮前のデータを再現する行為が必要となる。
メモリ空間を利用して説明すると、「復元」処理前にメモリ空間が図41の様に、ある領域が確保された状態でその中に圧縮データが存在している。
その状態で、何らかの処理を行う事で非圧縮データが再現され、その再現先として新たなメモリ領域を確保した状態である図42のような状態が復元後の状態となる。
本実施の形態に係る圧縮命令データ実行装置104は、「圧縮命令データを非圧縮状態の命令データに復元せずに圧縮命令データの実行が可能」であるため、図42の状態を作り出すことなく、図41の状態で処理を継続する。
このため、本実施の形態に係る圧縮命令データ実行装置104は、使用メモリ量の削減効果があり、例えば、組込み機器の様なリソース制約の厳しい環境で有効である。
【0114】
本実施の形態では、圧縮命令データ実行装置104を図22の構成とする事で圧縮命令データからの命令データ復元処理を不要とし、処理時間短縮と記憶領域圧迫軽減を実現する。
【0115】
図22において、命令データ格納装置アクセス部1041は、命令データを解釈・実行するために、実行対象となる命令データが格納されている命令データ格納装置106へのアクセスを行う。
つまり、命令データ格納装置アクセス部1041は、命令データ圧縮装置103により命令列がメタ命令に置き換えられている命令データを命令データ格納装置106から入力する。
また、命令データ格納装置アクセス部1041は命令データの入力とともに、命令データ格納装置106からメタ命令辞書データを入力する。
命令データ格納装置アクセス部1041は、プログラム入力部及びメタ命令辞書データ入力部の例である。
【0116】
命令実行時情報記憶部1042は、実行対象となる命令データを実行する際に保持すべき情報を記憶する。
命令実行時情報記憶部1042は、処理対象命令位置記憶部1043、処理対象命令位置退避部1044、メタ命令辞書データ保持部1045に大別される。
【0117】
処理対象命令位置記憶部1043は、処理対象命令位置情報を記憶する。
処理対象命令位置情報は、後述の命令列解釈・実行部1046で実行対象の命令データのどの位置の命令列が現在の処理対象であるかを示すための情報であり、処理対象命令位置情報は前述のプログラマブルカウンタ(PC)に相当する。
つまり、命令実行時情報記憶部1042は、命令データの実行時に、指定する位置を移動させながら実行対象とすべき命令データ内の位置を指定する。
処理対象命令位置記憶部1043は、プログラム位置指定部の例である。
【0118】
処理対象命令位置退避部1044は、処理対象命令位置記憶部1043で記憶している処理対象命令位置情報を一時的に退避(一時的に保存)するための手段である。
より具体的には、処理対象命令位置退避部1044は後述の命令列解釈・実行部1046がメタ命令辞書データ内のメタ命令に対応付けられている命令列を実行している間はメタ命令の直後の位置の情報を保存し、メタ命令辞書データ内のメタ命令に対応付けられている命令列の実行が完了した際に、保存している位置の情報を処理対象命令位置記憶部1043に通知し、通知後に、保存している位置の情報を削除する。
そして、処理対象命令位置記憶部1043は、処理対象命令位置退避部1044から通知された位置を次に命令列解釈・実行部1046が実行対象とすべき命令データ内の位置として指定する。
処理対象命令位置退避部1044は、プログラム位置退避部の例である。
【0119】
メタ命令辞書データ保持部1045は、命令データ格納装置アクセス部1041が入力したメタ命令辞書データを保持する。
【0120】
命令列解釈・実行部1046は、実行対象となる命令データを実際に解釈する。
命令列解釈・実行部1046は、メタ命令解釈・実行部1047を備える。
メタ命令解釈・実行部1047は、通常の命令以外のメタ命令を解釈・実行する。
命令列解釈・実行部1046は、処理対象命令位置記憶部1043の処理対象命令位置情報により指定されている指定位置の内容がメタ命令であるかどうかを判断し、指定位置の内容がメタ命令でない通常の命令列である場合には、そのまま指定位置の命令列を実行する。
一方、指定位置の内容がメタ命令である場合は、命令列解釈・実行部1046は当該メタ命令の直後の位置の情報を処理対象命令位置退避部1044に保存させ、メタ命令辞書データ内の当該メタ命令に対応付けられている命令列をメタ命令解釈・実行部1047が実行する。
なお、命令列解釈・実行部1046は、プログラム実行部の例である。
【0121】
通常、データ処理装置で命令データを実行する場合、ある命令データから別の命令データを呼び出す事が可能であり、呼び出された命令データの実行が完了するまで、呼び出し側の命令データの実行は一次停止する。
この時、呼び出された側と呼び出し側の双方の命令データに対する処理対象命令位置情報を保持しておく必要がある。
そのため、処理対象命令位置記憶部1043は実行対象の命令データ一つに対して処理対象命令位置情報を記憶する領域が一つ必要となり、通常はスタック形式などで管理される。
同様に、本実施の形態に係る処理対象命令位置退避部1044で処理対象位置情報が記憶されている領域の情報を別の記憶領域に退避する場合も命令データ一つに対して退避先領域が一つ必要となり、同様にスタック形式などで管理される。
【0122】
図23は圧縮命令データ実行装置104における命令データおよび圧縮命令データの実行処理の具体的手順を図示したものである。
この処理が開始される前に、圧縮命令データ実行装置104は図5の実行前準備処理によって、実行対象の圧縮命令データ中の命令データの先頭位置を処理対象命令位置情報として処理対象命令位置記憶部1043により、既にその情報を保持した状態となる事を想定して説明を行う。
終端の判定方法は命令データの最後に終端を示す命令識別番号を記録し、その番号をもって判定する方法や、命令データ毎にデータサイズ情報を組みで保持しておき、処理対象命令位置情報の位置から命令データの先頭位置を引いた値が組みとして保持されているデータサイズ−1以上となるかどうかで判定する方法が考えられる。
【0123】
処理2301では、命令列解釈・実行部1046が、現在の処理対象命令位置情報が指し示すデータが終端であるかどうかで分岐処理を行う。
終端である場合には、この命令データに関する処理は全て完了したため本処理は終了する。
終端ではない場合には、現在の処理対象命令位置情報が指し示す命令列を実行するため、処理2302へ遷移する。
【0124】
処理2302では、命令列解釈・実行部1046が、処理対象命令位置情報が指し示す位置から始まる命令列の命令識別番号を取得し、どの命令を実行すべきか判定を行う。
この判定方法は例えばC++言語を用いて実装する場合には命令識別番号の値を条件としてswitch文で各々の命令の具体的処理に分岐させる方法等が考えられる。
この判定処理は処理2303に対応し、従来の命令セットで定義されている通常命令に対応する命令識別番号の場合には処理2305へ遷移し、メタ命令に対応する命令識別番号の場合には処理2304に遷移する。
【0125】
処理2303におけるメタ命令の判定方法に関して、いくつかの具体例を以下に挙げる。
【0126】
メタ命令が未使用命令識別番号空間に割り振る場合には、例えばswitch文のdefaultとして判定された命令識別番号は全てメタ命令として判定する事が考えられる。
また、特定の命令が割り振られているが、命令データ中では使用されていない命令識別番号を利用してメタ命令に再定義する場合には、通常の命令識別番号の判定処理の前に、メタ命令辞書データなどに記録されているメタ命令に置き換えられた命令識別番号情報に一致するか判定し、一致する場合にはメタ命令と判定し処理2304へ遷移し、それ以外の場合には通常の命令識別番号の処理判定に遷移する方法が考えられる。
【0127】
処理2304では、現在の処理対象命令位置情報が指し示す命令はメタ命令であるため、命令列解釈・実行部1046は、対応する圧縮対象命令列の実行準備処理を行う。
具体的には、命令列解釈・実行部1046は、現在の処理対象命令位置情報にメタ命令長分だけシフトさせた位置情報の値を、処理対象命令位置退避部1044内の退避領域に退避させる。
次に、命令列解釈・実行部1046が、メタ命令辞書データから、メタ命令に対応する圧縮対象命令列を検索し、その先頭位置を、処理対象命令位置記憶部1043の処理対象命令位置情報に上書きする。
以上の処理を行う事で処理対象命令位置情報はメタ命令に対応する圧縮対象命令列の先頭を指し示し、処理対象命令位置退避部1044にはメタ命令直後の命令の命令ID部のアドレスが格納される。
【0128】
以上の処理2304を実施する前後の圧縮命令データ実行装置104の具体的な状態例をそれぞれ図24、図25に図示する。
【0129】
処理対象命令位置記憶部1043は、前述のように、処理対象命令位置情報を記憶するための領域である。
処理対象命令位置退避部1044は、前述のように、処理対象命令位置記憶部1043に記憶されている処理対象命令位置情報を退避させるための領域である。
メタ命令辞書データ保持部1045は、前述のように、現在処理中の圧縮命令データに含まれるメタ命令辞書データを保持するための領域である。
【0130】
図24の処理対象命令位置記憶部1043の処理対象命令位置情報が指し示しているのは、処理2304を実行する直前はメタ命令の命令識別番号を持つ命令ID部である。
このメタ命令はメタ命令辞書データ中の圧縮対象命令列2に対応しているものとする。
また、処理対象命令位置退避部1044は、現在はメタ命令辞書データ中の圧縮対象命令列の実行を行っていないため、NULL参照となる。
【0131】
図25は、処理2304を実行した直後の状態を示している。
つまり、命令列解釈・実行部1046は、現在の処理対象命令位置情報にメタ命令長分だけシフトさせた値を処理対象命令位置退避部1044の退避領域に退避させる。
このため、図25では、処理対象命令位置退避部1044は、実行対象のメタ命令の次の命令列を指し示す。
また、命令列解釈・実行部1046が、メタ命令辞書データから、メタ命令に対応する命令列を検索し、その先頭位置を、処理対象命令位置記憶部1043の処理対象命令位置情報に上書きする。
このため、図25では、処理対象命令位置記憶部1043の処理対象命令位置情報は、メタ命令辞書データ内の圧縮対象命令列2を指し示す。
【0132】
処理2304完了後に命令列解釈・実行部1046は処理対象命令位置記憶部1043の処理対象命令位置情報を用いて再度処理2303を実行する事によって、圧縮命令データから非圧縮状態の命令データを復元する事なく、メタ命令辞書データ中の対応する圧縮対象命令列の先頭から処理を開始する事が出来る。
また、メタ命令に対応する圧縮対象命令列を実行している最中かどうかの判定はこの場合には処理対象命令位置退避部1044がNULL参照ではないかどうかで判定する事が可能である。
【0133】
処理2305では、命令列解釈・実行部1046は、処理2303で判定された命令識別番号に対応する具体的な処理を実行する。
処理対象がメタ命令であれば、メタ命令解釈・実行部1047が処理2305を行う。
実行完了後に処理2306に遷移する。
【0134】
処理2306では、処理対象命令位置記憶部1043が、処理2305で処理した命令の次に存在する命令ID部の位置に処理対象命令情報を更新し、次の命令を実行するための準備を実施する。
更新終了後に処理2307に遷移する。
【0135】
処理2307では、現在の処理対象がメタ命令辞書データ中の圧縮対象命令列である場合には、その命令列の実行が終了しているかどうかを判定し、終了している場合には処理2308へ遷移し、終了していない場合および処理対象は圧縮対象命令列ではなく通常の命令データである場合には処理2301に遷移する。
【0136】
圧縮対象命令列を実行しているかどうかは処理対象命令位置退避部1044を用いて判定する方法が考えられる。
例えばNULL終端であれば(処理対象命令位置退避部1044が初期値を保存している場合)、現在、退避されている処理対象命令位置情報が存在しないため圧縮対象命令列を実行中ではないと判断可能である。
圧縮対象命令列の実行終了判定は処理2301と同様に処理対象命令位置情報が終端となっているかどうかで判定する事が可能である。
また、圧縮対象命令列中にメタ命令がある場合には圧縮対象命令列の終端を意味するとして、メタ命令を処理対象命令位置情報領域で指し示している場合には終端であると判定する方法等も考えられる。
更に、実行中の圧縮対象命令列と共にその命令長情報が共にメタ命令辞書データに登録されている場合、その命令長情報と同じだけ圧縮対象命令列を処理した事を終了判定基準とする方法も考えられる。
メタ命令辞書データに登録されている圧縮対象命令列の命令長が固定長もしくは固定数の命令数の場合には、その固定長もしくは固定数の命令数だけ圧縮対象命令列を処理した事を終了判定基準とする方法も考えられる。
特に圧縮対象命令列に含まれる命令数が1に限定されている場合には、処理対象命令位置情報退避領域がNULLでない事を終了判定基準とする方法も考えられる。
このように、処理対象命令位置退避部1044に初期値以外の情報が保存されているか否か、命令データに含まれるメタ命令の連続数分だけメタ命令辞書データに示される命令列が繰り返し実行されたか否かにより、メタ命令に置き換えられた命令列の実行が完了したか否かを判断可能である。
【0137】
処理2308では、現在処理対象の圧縮対象命令列の実行が終了した状態であるため、メタ命令実行を終了し通常の命令列の実行に復帰する処理を行う。
具体的には、処理対象命令位置退避部1044が保存している位置情報を処理対象命令位置記憶部1043に通知し、処理対象命令位置記憶部1043が処理対象命令位置退避部1044から通知された位置を指定する。
また、処理対象命令位置退避部1044はNULL値を記憶する。
復帰処理完了後に処理2301へ遷移する。
【0138】
以上の処理を繰返し実行する事により、命令データ中のメタ命令からメタ命令辞書データ中の対応する圧縮対象命令列への実行を圧縮命令データから非圧縮状態の命令データに復元することなく、実行する事が可能となる。
【0139】
このように、本実施の形態によれば、データ圧縮装置において、命令列のデータサイズに応じて最小単位データサイズを変化させ、命令列ごとにメタ命令に置き換える。
このため、必ず1つの命令に付随するパラメータは同一の命令列に連続して記述され、圧縮命令データ実行装置においてメタ命令に置き換えられている命令列を実行する場合に、圧縮命令データ実行装置はメタ命令から命令と全てのパラメータを取得することができる。
これにより、圧縮命令データ実行装置は、パラメータのどこまでが圧縮されているかを判断する必要がなく、命令データ実行時のオーバーヘッドを軽減することができる。
【0140】
また、圧縮命令データ実行時に圧縮命令データから命令データを復元する処理を不要とし、これにより処理時間を短縮することができ、また、使用メモリ量を削減することができる。
【0141】
なお、以上までで説明した命令データおよび圧縮命令データ実行手順では圧縮対象命令列にメタ命令が含まれない(メタ命令がネストされていない)事を前提としている。
圧縮対象命令列にメタ命令が含まれる事を許容する場合には、処理対象命令位置退避部1044を現在処理対象の命令データに対して可変個数用意可能とするためにスタック構造などとする必要がある。
【0142】
また、処理2304で処理対象命令位置情報を退避する際に、その位置情報をスタック先頭にプッシュすると共に、処理2308で処理対象命令位置情報を復帰する際には、処理対象命令位置退避部1044のスタックの先頭要素をポップし、その位置情報を処理対象命令位置記憶部1043に代入する事となる。
また、処理2307で必要な圧縮対象命令列を実行しているかどうかの判定に関しては処理対象命令位置退避部1044のスタックの要素数が0であるかどうかで判定する事となる。
【0143】
以上、本実施の形態では、
少なくとも以下で説明する命令データ生成装置、命令データ圧縮装置と圧縮命令データ実行装置から構成されるシステムであり、
命令データ生成装置は、
ソースコードを解析し、規定されている命令セットに従って、命令データに変換する命令データ生成手段を備え、
命令データ圧縮装置は、
命令データ生成手段で生成された命令データを、命令データに出現するパラメータを含む命令および命令列の出現頻度に応じて、メタ命令に置き換え、置き換えた命令および命令列はメタ命令辞書データとして命令データの一部とすることによって、表現内容は同質で命令データの長さを短くなるように命令データを変換する命令データ圧縮手段を備え、
圧縮命令データ実行装置は、
命令データ生成装置もしくは命令データ圧縮装置が生成した命令データを格納する記憶手段と、
記憶手段に格納された命令データにおける次に処理すべき位置を示す処理対象命令指示手段と、
処理対象命令指示手段が保持する位置情報を一時的に保存する処理対象命令指示情報退避手段を備え、
メタ命令を処理する際に、処理対象命令指示手段の保持する位置情報を処理対象命令指示情報退避手段に保存し、処理対象命令指示手段にメタ命令に対応する命令もしくは命令列の先頭の位置情報を保存するメタ命令開始手段を備え、
圧縮命令データで表現される処理内容に従い、処理を遂行する命令データ圧縮および実行システムを説明した。
そして、圧縮命令データ実行装置は圧縮命令データを非圧縮状態の命令データに復元せずに圧縮命令データの実行を可能であり、復元処理分の処理負荷軽減および、非圧縮状態の命令データを記憶するためのメモリ使用量を削減する事が出来ることを説明した。
【0144】
また、本実施の形態では、メタ命令は以下のうち少なくとも一つで定義されることを説明した。
命令セットの特定のオペコードを一つ割り振られている。
命令セットにおいて未定義のオペコード空間を全て、もしくはその一部をメタ命令として割り振る。
ソースコードから命令データを生成した際に命令セットとして定義されているが、命令データには出現しなかった命令のオペコード空間の全て、もしくはその一部をメタ命令として割り振る(この場合には、圧縮命令データの一部として命令セットのうちどの命令がメタ命令であるかを示す命令セット・メタ命令対応情報を新たに追加する)。
【0145】
また、本実施の形態では、
圧縮命令データ実行装置は、メタ命令辞書データに格納されている命令もしくは命令データ内の命令を実行しているかを判定するメタ命令実行判定手段を備え、判定方法は処理対象命令指示情報退避手段に指示情報が退避されているか否かで判断する事を説明した。
これにより、メタ命令辞書データに登録されている命令データを実行しているかどうかの判定が最小限の処理で実現できる。
【0146】
また、本実施の形態では、
圧縮命令データ実行装置は、メタ命令辞書データ内命令もしくは命令列の終了を判定するメタ命令実行終了判定手段を備え、メタ命令実行終了判定手段が終了と判定した場合に、処理対象命令指示情報退避手段が保持する位置情報を処理対象命令指示手段に復帰させ、処理対象命令指示情報退避手段の内容を初期化するメタ命令終了手段を備える事を説明した。
つまり、メタ命令辞書データに登録されている命令データの実行から、それまで実行していた命令データへの復帰方法を説明した。
【0147】
また、本実施の形態では、圧縮命令データ実行装置の備えるメタ命令実行終了判定手段では以下の基準のうち少なくとも一つを用いる事を説明した。
処理対象命令指示情報退避手段が保持する情報が初期値でない事、
メタ命令開始手段実行後、特定回数命令実行処理が行われた事、
メタ命令辞書データに、命令もしくは命令列と共に登録されているその命令長情報と同数だけメタ命令開始手段実行後、特定回数命令実行処理が行われた事。
【0148】
実施の形態2.
ここまでで説明した命令データ圧縮装置103および圧縮命令データ実行装置104では、圧縮命令データ実行装置104のアーキテクチャは一般的なCPUであっても適用可能である。
しかし、一般的なCPUアーキテクチャではパラメータ部に与えられる値はレジスタ指定、即値、変位値などが記述され、通常は同じ命令識別番号であったとしても、これらの値が異なる場合、ここまでで説明した方法では異なる命令として扱うため、圧縮する事が出来ない。
【0149】
また、一般的にソースコード上では同じ処理であっても扱うデータの型によって命令識別番号が異なる処理として扱われる。そのため、この場合もここまでで説明した方法では異なる命令として扱うため、圧縮する事が出来ない。
【0150】
本実施の形態では、これらの点に対応する圧縮命令データ実行装置104および命令セットを説明する。
【0151】
前述の通り通常は命令で取り扱うデータの型によって処理する内容が異なってくる関係で、データ型が異なる場合は命令識別番号が異なるものとして定義されるか、命令識別番号はデータ型で共通であるがどのデータ型を扱うのかパラメータとして識別情報を与える。
そのため、ソースコード上は記述が同一だとしても扱うデータ型が異なるため生成される命令データは異なる結果となる場合があり、一致確率が下がり、圧縮率が低くなる。
そこで、本実施の形態に係る命令データ圧縮装置103及び圧縮命令データ実行装置104は取り扱うデータの値と共に、そのデータの型を示す型識別情報を組として一つのデータとして扱う。
これにより、命令識別番号に、もしくは型を示すパラメータを必要とする事なく、処理対象となるデータのデータ型を知る事が可能とする事によって、扱うデータ型によってソースコード上は同一処理であっても命令識別番号を異なるものとして定義する必要性や、データ型を指示するパラメータの必要性を排除する事が可能となる。
このような性質を持つ命令データ圧縮装置103及び圧縮命令データ実行装置104に対する命令セットとして、同一処理内容で扱うデータの型が異なる場合であっても、命令識別番号は全て同一とする命令セットを定義する事が可能となり、結果として命令列の一致確率を上げることが出来る。
【0152】
加算演算に関する命令を例に挙げて具体的に説明する。
この加算演算で取り扱い可能なデータ型が整数型、浮動小数点型、ブール型、文字列型の4種類があるとする。
その場合、通常の圧縮命令データ実行装置では、扱う型毎に加算演算に関する命令識別番号が定義される事になるため、加算演算に関してだけで4種類定義される事になる。
そのため、例えば、同型同士の加算演算が複数の箇所に存在したとしても、それぞれの加算演算で扱うデータ型が異なる場合には、全て異なる命令識別番号となり、同一命令列として扱う事が出来ない。
【0153】
例えば、加算命令Addが整数型に対してはAdd_iと定義され、浮動小数点型に対してはAdd_fと定義され、ブール型に対してはAdd_bと定義され、文字列型に対してはAdd_sと定義される場合を考える。
ここで、ソースコード中に、
a+b
という記述があった場合、変数a,bが共に整数型の場合は、例えば、
Add_i a,b
というバイトコードが出力される。
しかし、変数が浮動小数点型の場合には、
Add_f a,b
というバイトコードが出力され、整数型の場合と異なるバイトコードが出力される事になる。
同様に変数がブール型、文字列型の場合には、
Add_b a,b
Add_s a,b
となり、異なるバイトコードになる。
このように、ソースコード上は「a+b」と言う同一の表現であったとしても、命令が取り扱う種別(型)と依存した形式の命令セットの場合、a,bの型の違いによって生成される命令列は異なる命令列だとして扱われ、上記の型が異なる4種類の「a+b」を同一命令列であるとして圧縮対象とする事は出来ない。
【0154】
一方で、命令が型とは独立で定義されている場合、つまりAdd命令一つで任意の型のオペランドに対する加算命令を定義する場合、変数a,bが整数型、浮動小数点型、ブール型、文字列型どれであったとしても、
Add a,b
と同じバイトコードで表現可能である。
よって、命令が取り扱う種別(型)と独立した形式の命令セットの場合、a,bの型が何であっても、生成されるバイトコードは同一となり、4種類の「a+b」を同一命令列として圧縮対象とする事ができる。
よって、命令が型に依存している場合よりも、独立している場合の方が、命令が同じ命令になりやすいため、命令列の一致確率があがる(上記例のように型が4種類の場合には一致確率が4倍)。
【0155】
本実施の形態に係る命令データ圧縮装置103では、上記のAdd_i、Add_f、Add_b、Add_sのように、相互に命令コードの命令内容は共通するがパラメータ値のデータ型が異なっているため命令コードが異なっている命令列(以下、共通命令異データ型命令列という)を共通のメタ命令に置き換えることにより圧縮効率を向上させる。
本実施の形態に係る命令データ圧縮装置103の構成例は図48に示したものと同様である。
【0156】
命令データ格納装置アクセス部1031は、命令データ格納装置106から、共通命令異データ型命令列が2以上含まれる命令データを入力し、更に、共通命令異データ型命令列ごとにパラメータ値のデータ型が示される型識別情報(データ型情報)を入力する。
また、同一命令列出現回数カウント部1033は、命令ID部の命令内容(Add_i、Add_f、Add_b、Add_sのAdd部分)とパラメータ部との組み合わせが共通する2以上の共通命令異データ型命令列を抽出し、出現回数をカウントする。
圧縮対象命令テーブル生成部1034は、同一命令列出現回数カウント部1033のカウント結果に基づき、実施の形態1と同様に、圧縮対象命令テーブルを生成する。
更に、命令データ圧縮変換部1035は、実施の形態1と同様に、圧縮対象命令テーブルに従って命令列をメタ命令に置き換える。
このとき、命令ID部の命令内容とパラメータ部との組み合わせが共通する共通命令異データ型命令列がメタ命令の対象になっている場合は、これら共通命令異データ型命令列のそれぞれを共通するメタ命令に置き換える。
また、メタ命令辞書データ生成部1036は、実施の形態1と同様に、メタ命令辞書データを生成する。なお、共通命令異データ型命令列については、例えば、Add_i、Add_f、Add_b、Add_sをまとめた命令IDを記述する。
そして、命令データ格納装置アクセス部1031は、共通命令異データ型命令列がメタ命令に置き換えられた命令データと、メタ命令辞書データと、型識別情報(データ型情報)とを対応付けて命令データ格納装置106に出力する。
【0157】
また、本実施の形態に係る圧縮命令データ実行装置104の構成例も図22に示したものと同様である。
【0158】
命令データ格納装置アクセス部1041は、命令データ格納装置106から、共通命令異データ型命令列がメタ命令に置き換えられた命令データと、メタ命令辞書データと、型識別情報(データ型情報)とを入力する。
メタ命令解釈・実行部1047は、処理対象命令位置記憶部1043の処理対象命令位置情報により指定されている指定位置の内容が共通命令異データ型命令列を置き換えたメタ命令である場合に、当該メタ命令で置き換えられている共通命令異データ型命令列のパラメータ値のデータ型を型識別情報を参照して判別する。
そして、メタ命令辞書データ内の当該メタ命令に対応付けられている共通命令異データ型命令列を、判別したパラメータ値のデータ型に対応させて実行する。
【0159】
なお、上記の方式、つまり、命令データ圧縮装置103が命令データ、メタ命令辞書データとともに型識別情報を出力し、圧縮命令データ実行装置104が型識別情報を参照してオペランドの型を判別する方式に代えて、以下の方式を用いるようにしてもよい。
【0160】
命令セットは任意の命令体系でも効果があるが、より圧縮効率を向上させる方法の一つとして、命令で処理する対象となるデータ(以下、オペランド)の型に依存しない命令セット(以下、型自由命令セット)に対してプログラム圧縮装置を適用する方法が考えられる。
以下でオペランドの型に依存する命令セット(以下、型依存命令セット)と型独立命令セットでの一致確率の違いについて説明する。
双方の命令セットで取り扱い可能なデータ型として整数型と浮動小数点型があるとする。また、それらのデータに対して実施可能な処理の一つとして加算処理があるとする。
この時、型依存命令セットの場合、定義される命令は型に依存して定義されるため、
・整数値をオペランドに取る加算処理命令Add_i
・浮動小数点値をオペランドに取る加算処理命令Add_f
の二種類の加算処理命令が定義される事になる。
一方で、型自由命令セットの場合、定義される命令は型に依存しない定義となるため、
・任意の型のオペランドを取る加算命令Add
の一種類の加算処理命令が定義される事になる。
この時プログラムの一部に2変数をオペランドとして扱う加算処理の記述があった場合、型依存命令セットの場合には2変数の型が何であるかによって生成される加算処理命令は異なり、変数の型が整数型の場合にはAdd_iが生成され、浮動小数点型の場合にはAdd_fが生成される。
一方で、型自由命令セットの場合には、変数の型に依存せず必ずAddが生成される。
つまり、型自由命令セットでコード化することによって、生成される命令が異なる確率をその命令で対応可能な型の種類数だけ上昇させる効果がある事を意味している。
よって、プログラムをコード化する際に型自由命令セットに変換する事によって、コード中に出現する命令の一致確率を上昇させる事が可能となり、圧縮率を向上させる事が可能となる。
具体的に上記例の場合であれば処理対象の型が整数型と浮動小数点型の二種類であるため、型依存命令セットに対して型自由命令セットは2倍の命令一致確率になる。
ただし、型依存命令セットを処理対象とするプログラム実行装置と比較して、型自由命令セットを処理対象とするプログラム実行装置は命令自体に取り扱うオペランドの型情報が含まれていない分、命令実行時に処理対象となるオペランドの型を検証し、どの型に対する処理を実行しなければならないのかを逐次判断する処理が必要となる。
【0161】
つまり、本方式では、命令データ圧縮装置103が入力するプログラムには、オペランドが整数型であっても浮動小数点型であっても共通にAddという命令コードが記述されている。
このため、Add_iやAdd_fのように型依存命令セットで命令コードが記述されている場合に比べて、命令コードの一致確率が向上し、命令データ圧縮装置103における圧縮率を向上させることができる。
本方式では、命令データ圧縮装置103は、命令データとメタ命令辞書データのみを出力し、圧縮命令データ実行装置104は、命令データとメタ命令辞書データのみを入力する。
また、圧縮命令データ実行装置104において命令列解釈・実行部1046は、実施の形態1と同様にして、命令データ内のメタ命令に置き換えられている部分はメタ命令辞書データに示されている命令列を実行し、メタ命令に置き換えられてない部分はそのまま命令列を実行する。
なお、命令列の実行の際に(メタ命令に置き換えられている命令列の実行及びメタ命令に置き換えられていない命令列の実行の両者)、命令列解釈・実行部1046は、オペランドのパラメータ値のデータ型を判定し、判定したデータ型に対応させて命令コードの命令を実行する。
つまり、前出の例に従えば、Add命令を実行する際に、命令列解釈・実行部1046は、オペランドのデータ型が整数型なのか浮動小数点型なのかを判定し、整数型であれば整数型に対応させたAdd命令を実行し(Add_iを実行することに相当)、浮動小数点型であれば浮動小数点型に対応させたAdd命令を実行する(Add_fを実行することに相当)。
なお、ここでは、整数型と浮動小数点型という2種類のデータ型を対象にして説明したが、ブール型、文字列型を含めた4種類のデータ型に対して共通に型自由命令セットAddを用い、圧縮命令データ実行装置104においてオペランドが4種類のデータ型のいずれであるかを判定してAdd命令を実行することができる。
【0162】
本実施の形態によれば、例えば、4種類のデータ型に対応する演算処理全てを一つの命令識別番号で表現可能となり、扱うデータ型の違いに関係なく同一命令識別番号による命令列で表現可能となり、加算演算に関する命令列の一致確率は対応するデータ型の個数に対応して4倍に上がる。
【0163】
以上、本実施の形態では、
命令データ生成手段および命令データ圧縮手段において、命令セットとして命令が取り扱うデータの種別とは独立して定義されているセットを利用して命令データを生成する事を説明した。
つまり、整数型、浮動小数点型、文字列型の加算命令は通常Add_i、Add_f、Add_s等に異なる命令として実装されるが、動的型判定処理を圧縮命令データ実行装置に持つ事で加算命令を一つのAddにまとめることが可能となり、一致する確率が上がる事ができる。
【0164】
実施の形態3.
圧縮命令データ実行装置104は、自身が取り扱う全てのデータのサイズを同一固定長で表現可能とする事によって、メモリアドレスを実際のメモリアドレス値から、実行時のメモリ空間を配列として見た時の配列インデックス(オフセット表現)で表現する事が可能となる。
たとえばローカル変数のメモリ配置はそのコンテキスト内での変数出現順に先頭から順に積み上げて配置する方式をとり、データサイズを4バイト固定長とした場合、配列インデックスでメモリアドレスを表現する方法は実際のメモリアドレスで表現する方法と比較し、メモリアドレスの取りうる値の集合は4分の1となる。
とりうる値の集合が4分の1になっているため、これだけの条件だけであるコンテキスト下におけるある変数が別のコンテキスト下のある変数とメモリアドレスが一致する確率は4倍高くなり、パラメータ部の一致確率が上がることを示している。
【0165】
例えばある関数中に変数宣言として、
bool a,b;
int c;
と記述されているとする。
一般的に変数に割り当てるメモリサイズは型によって異なり、bool型の場合には1byte、int型の場合は4byte、short型の場合には2byteなどの様になる。
この場合、ローカル変数の場合にはスタック領域に宣言順に領域が確保され、アライメント等を考慮すると例えば図43の様なメモリ配置になる。なお、図43におけるハッチング部分は、使用されていないアドレスを示す。
変数aのアドレスは0x12340000となり、変数bのアドレスは0x12340001、変数cのアドレスは0x12340004と言った形で各変数の識別子はメモリアドレス(と同等、通常はベースアドレスからのオフセット)の値が利用される。
【0166】
この状況で変数cをスタックにプッシュする命令を生成した場合、
Name 4
となる。
ここで「4」はベースアドレスとなる0x12340000からの変数cのオフセット値となる。
同様の条件下で、
bool a;
int b;
bool c;
と変数宣言された場合には、図44の様なメモリ配置になり、変数a,b,cのアドレスは0x12340000,0x12340004,0x12340008となり、変数の宣言順が同じだとしても、その変数の前に宣言されている変数の型によってアドレス位置は影響を受け、変化してしまう。
そのため、同様に変数cをスタックにプッシュする命令を生成した場合、
Name 8
となり、上記の命令列とは異なるものとして生成される事になる。
よって、同じ宣言順序であったとしても変数の識別情報が異なるため、生成される命令列は同一にならない。
一方で、型に依存せず変数に割り当てるメモリサイズを固定(今回の例では4バイト固定長)とした場合には、上記2種類の変数宣言であったとしても、図45のようになり、各変数のメモリ領域は変数の宣言順によってのみ決める事が可能となる。
よって、変数cをスタックにプッシュする命令を生成した場合、どの変数宣言の場合であっても宣言順序が同じであるため、
Name 2
となり。
ここでパラメータの「2」は変数宣言順序から1引いた値となっている。
このような性質を有する事によって、ローカル変数の識別情報はメモリアドレスの32ビットから、4バイト固定長とした場合には30ビットで表現する事が可能になる。
2ビット分、つまり4分の1の集合で全ての変数を表現できるようになるため、単純に一致比較する集合の要素数が4分の1になるため、一致確率は4倍に上がる。
【0167】
本実施の形態に係る命令データ圧縮装置103は、上記のようにデータ型にかかわらず全てのパラメータ値に同一のメモリサイズが割り当てられている命令データを圧縮する。
本実施の形態に係る命令データ圧縮装置103の構成例は図48に示したものと同様である。
【0168】
本実施の形態では、命令データ格納装置アクセス部1031は、命令データの実行時にパラメータ値が格納されるメモリアドレスを管理するためのアドレス管理命令コード(上記の命令Name)とメモリアドレスがオフセット表現で指定されるアドレス指定パラメータ値(上記の「4」、「8」、「2」等)とが組み合わされているアドレス管理命令列(上記のName 4、 Name 8、 Name 2等)が含まれ、データ型にかかわらず全てのパラメータ値に同一のメモリサイズが割り当てられる命令データを入力する。
また、同一命令列出現回数カウント部1033は、アドレス管理命令コードとアドレス指定パラメータ値との組み合わせが共通する2以上のアドレス管理命令列を抽出し、出現回数をカウントする。
圧縮対象命令テーブル生成部1034は、同一命令列出現回数カウント部1033のカウント結果に基づき、実施の形態1と同様に、圧縮対象命令テーブルを生成する。
更に、命令データ圧縮変換部1035は、実施の形態1と同様に、圧縮対象命令テーブルに従って命令列をメタ命令に置き換える。
このとき、アドレス管理命令コードとアドレス指定パラメータ値との組み合わせが共通するアドレス管理命令列がメタ命令の対象になっている場合は、これらアドレス管理命令列のそれぞれを共通するメタ命令に置き換える。
また、メタ命令辞書データ生成部1036は、実施の形態1と同様に、メタ命令辞書データを生成する。
また、命令データ格納装置アクセス部1031は、アドレス管理命令列がメタ命令に置き換えられた命令データと、メタ命令辞書データとを対応付けて命令データ格納装置106に出力する。
なお、圧縮命令データ実行装置104の動作は、実施の形態1と同様である。
【0169】
以上、本実施の形態では、
命令データ生成手段および命令データ圧縮手段において、命令セットとしてメモリの位置を示すメモリアドレスが抽象化されたオフセット表現で定義されているセットを利用して命令データを生成する事を説明した。
つまり、通常はブール型、整数型、浮動小数点型で消費するメモリサイズが異なるため、メモリの位置指定は番地指定する必要があるが、全ての型を同一サイズとする事で、アドレスではなく配列のインデックスの様な番地よりも密度の低い値で表現可能となる。
そのため、メモリ参照用のパラメータが取りうる値の種類が少なくなり、一致する確率が上がる。
【0170】
実施の形態4.
本実施の形態では、実施の形態3と同様に、データ型にかかわらず全ての変数に対して同一のメモリサイズが割り当てられる場合に、あるコンテキスト下のある二つ以上のローカル変数に対するメモリアドレスを交換することによって、別のコンテキスト下にある変数とのメモリアドレスが一致する確率を上げることができる。
【0171】
本実施の形態に係る方式を図26、図27および図28を利用して説明する。
【0172】
図26は二つの類似するソースコードの一例である。
左側の関数funcAと右側の関数funcBはどちらも台形の面積を求める関数である。
しかし、funcAの場合には引数aおよび引数bが上底、下底で、引数cが高さを表すが、funcBの場合には上底、下底を表すのは引数cおよび引数bで、高さを表すのは引数aとなっている点で異なっている。
これらの関数を命令データに変換した結果の一例が図27である。
左側の命令データ2701が図26における関数funcAに対する命令データであり、右側の命令データ2707が図26における関数funcBに対する命令データである。
前述の通り、ローカル変数のメモリ配置はそのコンテキスト内での変数出現順に先頭から順に積み上げて配置する方式を取っており、変数の識別情報はその変数の出現順序に等しくなる。
そのため、変数a、bおよびcに対する識別情報は、関数funcAではそれぞれ命令データ中のパラメータ2701、パラメータ2702、パラメータ2703の0、1、2となり、関数funcBではそれぞれ命令データ中のパラメータ2704、パラメータ2705、パラメータ2706の2、1、0となる。
そのため、関数の処理内容は同一であっても、変数の出現順序が異なることにより、生成される命令データは完全一致せず、変数の識別情報がパラメータに含まれない命令のみが一致する部分一致にとどまっている。
しかし、この命令データでは変数aおよびcの識別情報がどちらかの命令データにおいて逆に設定される事で、関数funcAと関数funcBの命令データは完全一致させることが可能である。
【0173】
図28は、上記観察をもとに一旦命令データ圧縮装置103が生成した圧縮命令データを処理対象の命令データとして変数識別情報を変更する事によって、圧縮対象命令列のサイズ拡大を行う処理に関する処理手順の一例である。
この処理は例えば、図18の処理1803で処理対象となる命令データがないと判定された後に実施する等、処理対象のソースコードに対する圧縮命令データが全て生成された状況で実施する事を想定としており、必ずしも処理1803の直後で実施しなければならないわけではない。
なお、ここでは、図28の処理は、命令データ圧縮変換部1035が行うものとして説明するが、必ずしも命令データ圧縮変換部1035が行わなければならないわけではなく、例えば、同一命令列出現回数カウント部1033が行ってもよい。
【0174】
処理2801では、命令データ圧縮変換部1035は、処理対象となる全ての圧縮命令データで、少なくとも一つ以上の本処理を実施していない圧縮命令データがあるか否かを判定する処理である。
ここで、未処理の圧縮命令デーが存在しない場合には、処理対象が現状では存在しない事を意味するため、速やかに本処理を終了する。
逆に一つ以上の未処理圧縮命令データが存在する場合には処理2802へ遷移する。
【0175】
処理2802では、命令データ圧縮変換部1035が、処理2801で見つかった未処理の圧縮命令データの中から一つを選択し、処理済フラグを立て、以降の処理ではベースとなる圧縮命令データとして取り扱う準備を実施し、処理2803へ遷移する。
また、説明を簡単にするため、この圧縮命令データをAと表記する。
【0176】
処理2803では、命令データ圧縮変換部1035は、処理対象となる全ての圧縮命令データのうち、A以外でかつAと以降の処理を実施していない圧縮命令データがあるか否かを判定する。
ここで、未処理の圧縮命令データが存在しない場合には、Aに対する以降の処理を全ての圧縮命令データに対して実施済みである事を意味するため、処理2801へ遷移し、他の圧縮命令データをベースとして処理を実施する。
逆に未処理圧縮命令データが存在する場合には処理2804へ遷移する。
【0177】
処理2804では、命令データ圧縮変換部1035は、処理2803で見つかったAに対する未処理の圧縮命令データの中から一つを選択し、Aに対する処理済みフラグを立て、処理2805へ遷移する。
また、説明を簡単にするため、ここで選択した圧縮命令データをBと表記する。
【0178】
処理2805では、命令データ圧縮変換部1035は、処理対象となった圧縮命令データAおよびBに関して、相互に変数識別情報がパラメータ部に記載されている箇所は比較対象外、つまり任意の値であっても一致しているものと仮定して、一致箇所の判定を実施し、判定結果全てを合わせてXと表記する。
この際の一致判定はどのような基準を用いて一致判定を行っても構わないが、通常は命令データ中における一致判定された領域の合計サイズが最大となる基準や、一致判定された領域のうち、個別に最大サイズになるような基準を用いる。
例えば、図27における二つの命令データがAおよびBに対応するものと仮定した場合、パラメータ2701からパラメータ2706までの6個のパラメータ部が変数識別情報であるため、そのパラメータ部は一致していると仮定して命令データ間の一致比較を行う。
そのため、この場合には先頭から最後まで連続して一致しているものとして判定される。
処理終了後に、処理2806へ遷移する。
【0179】
処理2806では、命令データ圧縮変換部1035は、処理2805で一致した領域中の変数識別情報が記載されているパラメータ部で不一致している箇所があるかを判定する。
この処理では例えば、図27における二つの命令データの場合にはパラメータ2701からパラメータ2706までが不一致パラメータ部として判定され、その結果を引き継ぎ、処理2807へ遷移する。
【0180】
処理2807では、命令データ圧縮変換部1035は、処理2806の処理結果を受け、不一致のパラメータ部における変数識別情報の値を変更する事によって、処理2805では判定対象外としたパラメータ部も含めて完全一致する箇所の判定を実施する。
例えば、図27の二つの命令データに対して本処理を適用した場合、パラメータ2701とパラメータ2703の値を入れ替える事によって、双方の命令データが最初から最後まで完全一致する。
処理2807では変数識別情報の値変更と共に、その変更によって、命令データが変更前の処理と矛盾が生じていないか検証を行い、矛盾が生じた場合には他のパターンでの変更を試み、矛盾が発生しない変更パターンが出るまで、もしくは変更パターンがなくなるまで繰返し、変更を行う。
矛盾の発生しない変更パターンが見つかった場合、もしくは変更パターンがなくなった場合には処理2808へ遷移する。
【0181】
処理2808では、命令データ圧縮変換部1035は、処理2807で行った変更の前後の圧縮命令データ間で比較を行い、変更後の圧縮率が向上しているか判定を行う。
圧縮率が向上している場合には処理2810へ遷移し、圧縮率が向上していない、もしくは既に変更パターンがなくなっている場合には処理2809へ遷移する。
【0182】
処理2809では、命令データ圧縮変換部1035は、処理2807で行った変更では圧縮率が向上しなかったため、他の変更パターンで圧縮率が向上するか再実施するため、他の変更パターンが存在するかチェックする。
他の変更パターンが存在する場合には処理2807へ遷移し、他の変更パターンが存在しない場合には処理2803へ遷移する。
【0183】
なお、処理2807、処理2808、処理2809では最初に圧縮率が変更前よりも向上する変更パターンが見つかると処理2810へ遷移しているが、全ての変更パターンに対して処理2807を適用し、最も圧縮率の向上が大きかった変更パターンを持って処理2810へ遷移する方法も考えられる。
【0184】
処理2810では、命令データ圧縮変換部1035は、処理2808で圧縮率が向上したと判定された変更パターンをAとBに適用した場合に、その圧縮対象命令列を用いて他の命令データを圧縮した場合の圧縮命令データの生成および、圧縮率の算出を行う。
圧縮命令データ生成および圧縮率算出が終了後、処理2811へ遷移する。
ここで圧縮率は単純に全体の命令データのサイズ算出だけでも構わない。
【0185】
処理2811では、命令データ圧縮変換部1035は、処理2810で求めた圧縮率をもとに全体での圧縮率向上が達成されているかを判定する。
ここで圧縮率が向上している場合には、処理2812へ遷移し、圧縮率が向上していない場合には処理2803へ遷移する。
【0186】
処理2812では、命令データ圧縮変換部1035は、処理2811で圧縮率が向上していると判定された変更パターンを命令データAおよびBに適用した結果生成される圧縮命令列を用いて、再度全ての命令データを圧縮した結果を現在の圧縮命令データとして採用する。
採用後、処理2803へ遷移し、全ての命令データに対して変数識別情報の変更で圧縮効率が向上するかどうかを検証し、最適な圧縮命令データの生成を完了させる。
【0187】
図27の二つの命令データに対し、図30に図示する本処理を適用した場合の圧縮命令データと、図29に図示する適用しなかった場合の圧縮命令データのサイズ比較を行う。
本処理を適用しない場合の圧縮命令データでは、3行目から4行目までのname 1およびaddが一つ目の圧縮対象命令列となり、6行目から9行目までのmul、number 2、div、returnが二つ目の圧縮対象命令列となり、具体的には図29が一例となる。
データ2901はデータ2701に対応する命令データ、データ2902はデータ2707に対応する命令データであり、本処理ではデータ2701の2行目と4行目の変数識別情報を置換した場合の結果を示している。
データ2093は命令データ圧縮装置によって圧縮対象命令列を登録しているメタ命令辞書データである。
圧縮前はデータ2701およびデータ2707のデータサイズは17バイトであり合計は34バイトとなる。
一方データ2901、データ2902およびデータ2903のデータサイズはそれぞれ10バイト、10バイト、13バイトで合計33バイトとなり、1バイト分のサイズ削減となる。
一方で本処理適用後のデータ3001、データ3002、データ3003のデータサイズはそれぞれ2バイト、2バイト、18バイトの合計20バイトとなり、圧縮前のデータサイズに対して14バイト、本処理適用前の圧縮命令データに対して13バイトの圧縮が実現され、変数識別情報を変更する事によって、一致する命令列の領域を拡大する事によって、圧縮率が向上させる事が可能である事を示している。
【0188】
このように、本実施の形態では、命令データ格納装置アクセス部1031は、命令データの実行時にパラメータ値が格納されるメモリアドレスを管理するためのアドレス管理命令コード(上記の命令name)とメモリアドレスがオフセット表現で指定されるアドレス指定パラメータ値(上記の「0」、「1」、「2」等)とが組み合わされているアドレス管理命令列(上記のname 0、name 1、name 2等)が含まれ、データ型にかかわらず全てのパラメータ値に同一のメモリサイズが割り当てられる命令データを入力する。
命令データ圧縮変換部1035は、特定のコンテキスト(命令列群)に含まれるアドレス管理命令のアドレス指定パラメータ値を、他のコンテキスト(命令列群)に含まれるアドレス管理命令のアドレス指定パラメータ値と一致するように書換え、特定のコンテキストにおける命令列の並びと他のコンテキストにおける命令列の並びを共通にし、特定のコンテキストの命令列と他のコンテキストの命令列を共通のメタ命令で置き換える。
これにより、圧縮率を向上させることができる。
【0189】
以上、本実施の形態では、命令データ圧縮手段において、あるメモリ領域のオフセット値を別のオフセット値で置き換えるメモリオフセット変換手段と、置き換え前と置き換え後で置き換えたメモリオフセットを含む命令もしくは命令列の出現頻度を比較する出現頻度比較手段とを備え、その比較結果に応じて置き換え前と置き換え後のどちらを圧縮命令データとして採用するべきかを判断する採用圧縮命令データ判定手段を備える事を説明した。
例えば異なる複数の関数で「a+b」という記述があった場合に変数のインデックスが違う場合(関数Aではそれぞれが0,1で表現されるが関数Bでは2,3で表現されているなどの場合)はこれに対応する命令データは異なる事になるが、どちらかの変数のインデックスを他方のインデックスに変更して、命令データを一致させる事が可能となる。
データサイズが一致していない場合にはメモリアドレスのアライメントを意識する必要があり、簡単には置き換えることが出来ないが、データサイズが同じならばアライメントを意識する必要が無くなる。
【0190】
実施の形態5.
以上までで説明してきた命令データ生成装置および命令データ圧縮装置は、例えばある一つのアプリケーションの挙動を記述した全てのソースコードに対して一つのメタ命令辞書データが生成される事を前提として説明を行ってきた。
しかし、そのアプリケーションの規模が大きくなるに従い、機能単位による記述内容の偏りなどが発生するなどによって、全てのソースコードに対して一つのメタ命令辞書データで圧縮命令データを生成する事が必ずしも最適な圧縮率を実現するとは限らない。
このため、全てのソースコードを何らかの基準(例えば、固定データサイズごと、機能ごと)を持って、独立した部分集合に分割し、部分集合毎に一つのメタ命令辞書データを生成し、それらを統合して全体での圧縮命令データを生成する事によって、圧縮率の向上が実現する事が可能となる。
【0191】
命令データの部分集合に対して一つのメタ命令辞書データを生成する場合、どの命令データではどのメタ命令辞書データを利用して圧縮命令データ実行装置が実行する必要があるかを示す情報を圧縮命令データに格納する必要がある。
一つの方法としては全てのメタ命令辞書データに対してメタ命令辞書データ識別番号を割り振り、各命令データの内部にその命令データで利用するメタ命令辞書データ識別番号を格納する方法などが考えられる。
【0192】
図31は、複数のメタ命令辞書データを圧縮命令データ生成時に生成した場合のデータ構造の一例を図示している。
【0193】
この圧縮命令データには4種類の命令データ3101、3102、3103、3104と、2種類のメタ命令辞書データ3105、3106が存在する。
メタ命令辞書データ3105のメタ命令辞書データ識別番号は#1、メタ命令辞書データ3106のメタ命令辞書データ識別番号は#2としている。
この例では、各命令データの先頭領域に1バイト分のその命令データに対応するメタ命令辞書データのメタ命令辞書データ識別番号を格納する対応辞書識別番号領域を新たに加え、その直後に命令列が続くデータ構造として表現している。
命令データ3101、3102、3103、3104の対応辞書識別番号はそれぞれ1、1、2、1となっており、これが意味する事は、圧縮命令データ実行装置104は命令データ3101、3102、3104を実行する場合には、メタ命令辞書データ3105を利用し、命令辞書データ3103を実行する場合には、メタ命令辞書データ3106を利用して、メタ命令に対応する圧縮対象命令列を検索する事を意味している。
【0194】
以上の様な複数のメタ命令辞書データを生成する圧縮命令データ生成処理を実行する場合、部分集合を決定するための基準としては、各命令データで出現する命令識別番号や命令列のヒストグラムなどの類似度や偏りを利用して、分布状況が類似する命令データで部分集合を形成するような方法が考えられる。
【0195】
このような部分集合を形成するためには、図4の命令データ圧縮装置103における命令データ圧縮処理の最初に実施し、その後の命令データ圧縮処理は生成された部分集合を一つの単位として処理を行い、全ての部分集合に対して処理完了後に、各命令データの先頭に対応するメタ命令辞書データ識別番号を格納し、関連付けを行うなどの圧縮命令データ生成処理方法が考えられる。
【0196】
図31に示す方式を実現するために、本実施の形態の命令データ圧縮装置103では、命令データ圧縮変換部1035が、命令データを複数個の部分集合に分けるとともに、部分集合単位で命令列をメタ命令に置き換える。
また、メタ命令辞書データ生成部1036は、部分集合ごとにメタ命令辞書データを生成し、対応するメタ命令辞書データの識別子を各部分集合に付加する。
また、本実施の形態の圧縮命令データ実行装置104では、命令データ格納装置アクセス部1041は、複数個の部分集合に分けられ、部分集合ごとに対応するメタ命令辞書データの識別子が示されている命令データを入力し、また、部分集合ごとに生成された複数個のメタ命令辞書データを入力する。
そして、命令列解釈・実行部1046は、命令データの実行の際に、部分集合ごとに、部分集合に示されている識別子に従い、対応するメタ命令辞書データを参照する。
【0197】
以上では、各命令データは1つのメタ命令辞書データのみを使用する例を説明しているが、各命令データが使用するメタ命令辞書データは1つに限らなくてもよい。
例えば、メタ命令のパラメータとして対応辞書識別番号を付加する事によって、一つの命令データ中に出現するメタ命令単位で利用するメタ命令辞書データを変更する事を可能としても構わない。
このような構成にする事は、命令データ全体で特に偏りがなく、一つのメタ命令辞書データに格納可能な圧縮対象命令列数をオーバーして圧縮可能な圧縮対象命令列が発生した場合等に、命令辞書データを複数に分割登録する事が可能となる利点がある。
【0198】
図32は、複数のメタ命令辞書データを圧縮命令データ生成時に生成した場合のデータ構造の更なる一例である。
ここでは、単一の命令データが二つのメタ命令辞書データを利用する例を示している。
圧縮命令データは一つの命令データ3201と二つのメタ命令辞書データ3202および3203で構成されている。
命令データ3201は少なくとも命令データ3101命令列を含み、その中に記載されているメタ命令には少なくとも二種類のパラメータが付随しており、一つは各メタ命令に対応するメタ命令辞書データを示すメタ命令辞書データ識別番号と、その対応するメタ命令辞書データ中のどの圧縮対象命令データが対応する命令列であるかを指定する、命令列識別番号を持つ。
二つのメタ命令辞書データにはそれぞれに唯一割り振られたメタ命令辞書データ識別番号が定義されており、ここではメタ命令辞書データ3202に割り振られたメタ命令辞書データ識別番号は#01、メタ命令辞書データ3203に割り振られたメタ命令辞書データ識別番号は#02としている。
命令データ3131命令列には少なくとも二つのメタ命令3204および3205が記述されている。
メタ命令3204とメタ命令3205は、それぞれ異なる命令列を対象にしているが共通の命令識別番号(例えば0xF0)が割り当てられているメタ命令である。
各メタ命令には前述の通り、パラメータ部にはパラメータが二種類存在し、一番目のパラメータがメタ命令辞書データ識別番号で、二番目のパラメータが命令列識別番号となっている。
メタ命令3204の一番目のパラメータの値は01であるため、このメタ命令に対応するメタ命令辞書データはメタ命令辞書データ識別番号が01であるメタ命令辞書データ3202である事が分かる。
一方で、メタ命令3205の一番目のパラメータの値は02であるため、このメタ命令に対応するメタ命令辞書データはメタ命令辞書データ識別番号が02であるメタ命令辞書データ3203である事が分かる。
圧縮命令データ実行装置104が命令データ3201を処理する際にメタ命令3204および3205を実行する場合、始めに一番目のパラメータを読み込み、その値に対応するメタ命令辞書データを選択する処理が必要となる。
次に二番目のパラメータを読み込み、先ほど選択したメタ命令辞書データから二番目のパラメータの値に対応する命令列識別番号を持つ圧縮対象命令列を取り出す。
それ以降の処理は前述の実行方式と同様に処理可能となる。
【0199】
図32に示す方式を実現するために、本実施の形態の命令データ圧縮装置103では、命令データ圧縮変換部1035が、1つのプログラム内の記述内容が相互に異なっている2以上の命令列にも同じメタ命令を割り当てて命令列をメタ命令に置き換える。
そして、メタ命令辞書データ生成部1036は、同じメタ命令に対して異なる命令列が対応付けられている2以上のメタ命令辞書データを生成し、対応するメタ命令辞書データの識別子を各命令列に付加する。
【0200】
また、図31では、2以上の部分集合において共通の命令列があれば共通のメタ命令に置き換えるようにしているが、図31の方式を2以上の命令データに適用してもよい。
つまり、命令データ圧縮変換部1035は、2以上の命令データにおいて共通の命令列がある場合は、共通の命令列に共通メタ命令を割り当てて、命令列をメタ命令に置き換えるようにしてもよい。
そして、メタ命令辞書データ生成部1036は、命令データ圧縮変換部1035のメタ命令への置き換え結果に基づき、2以上の命令データで共通に利用されるメタ命令辞書データを生成する。
この場合は、2以上の命令データに対して、1つのメタ命令辞書データが用いられる。
【0201】
以上、本実施の形態では、
一つ以上のソースコードから構成されるソースコード集合に対して命令データ圧縮装置を適用した際に、少なくとも二つ以上にソースコードを分類し、分類毎に一つのメタ命令辞書データを生成する事を特徴とする。また、分類を決定するための分類決定手段を備える事を説明した。
より具体的には、分類決定手段は「出現頻度の偏りが大きくなる」、「全体として圧縮命令データのサイズが最小となる」等の基準を利用する。
また個々のメタ命令辞書データを唯一に識別するための識別情報を割り振り、その命令辞書データが有効な命令列に対して、有効なメタ命令辞書データの識別情報を付加する。
複数のソースコードから複数のメタ命令辞書データを生成する事で、一致する命令列がソース毎に偏りがある場合や、一致する命令列が多すぎて一つのメタ命令辞書データに収まらない場合には、メタ命令辞書データを複数に分割する事で、効果的な圧縮命令データを生成できる。
【0202】
また、本実施の形態では、
圧縮命令データ実行装置において、命令列に付加されているメタ命令辞書データの識別情報を元に使用すべきメタ命令辞書データを選択するメタ命令辞書データ選択手段を備える事を説明した。
つまり、複数のメタ命令辞書データとメタ命令のひもづけ方法を説明した。
【0203】
本実施の形態では、
一つ以上のソースコードから構成されるソースコード集合に対して、命令データ圧縮装置を適用した際に、ソースコード全てに対して一つのメタ命令辞書データを生成する事を説明した。
つまりは、一つのソースコードで一つの圧縮命令データを生成するばかりではなく、複数のソースコードで一つの圧縮命令データを生成できることを特徴とする。複数ソースコードを一つの圧縮命令データとする事でより圧縮効率がよくなる。
【0204】
実施の形態6.
次に、本実施の形態では、命令データ圧縮処理の適用制約条件を削減する方式について説明を行う。
【0205】
通常プログラム言語で記述可能な処理シーケンスは直列処理だけではなく、条件分岐処理や繰返し処理といった実行制御処理も記述可能となっている。
条件分岐処理とは処理中に参照もしくは生成された何らかの値の内容によって命令データ中の特定箇所にジャンプする処理の事であり、C言語などではif文やswitch文などがそれに相当する。
また、繰返し処理とは条件分岐処理を応用した制御処理であり、ある値がある基準を満たす場合は特定箇所にジャンプし、ジャンプ先の箇所と基準判定箇所の命令列が基準を満たす間、繰返し実行する処理の事であり、C言語などではfor文やwhile文などがそれに相当する。
上記の様な非連続的な移動を行う命令の命令名をgotoと表記する事とする。また、命令gotoをジャンプ命令列又はジャンプ命令ともいう。
この命令gotoはパラメータ部に少なくとも一つのパラメータを持ち、そのパラメータはgotoからジャンプ先命令までのオフセット値であるジャンプオフセット値を持つとする。
命令gotoを伴った命令データを命令データ圧縮処理で処理すると、命令データの長さが変更される特性上、gotoからジャンプ先の命令までの間で長さが変更になった分を考慮してジャンプオフセット値を更新しないといけない。
そのため、今まで説明してきた圧縮命令データ実行装置および命令セットでは以下の状況に対応する事が出来ず、適切なジャンプ先にジャンプする事が出来ないため、以下の状況が発生した場合にはその状況を含む領域は命令データ圧縮装置103で圧縮しないように制限する必要があり、結果として圧縮効率が低下する。
【0206】
[状況1]
図46(a)に示すように、圧縮対象命令列に命令goto(501)が記述されており、そのジャンプ先(502)がその圧縮対象命令列の範囲外の非圧縮対象命令列に記述されている命令である場合である。
【0207】
[状況2]
図46(b)に示すように、圧縮対象命令列1に命令goto(501)が記述されており、そのジャンプ先(502)がその圧縮対象命令列の範囲外であり、他の圧縮対象命令列2に記載されている命令である場合である。
【0208】
[状況3]
図46(c)に示すように、非圧縮対象命令列に命令goto(501)が記述されており、そのジャンプ先(502)がある圧縮対象命令列に記載の命令である場合である。
【0209】
[状況4]
図46(d)に示すように、命令goto(501)が記載されており、その命令goto(501)とジャンプ先(502)の命令の間に圧縮対象命令列が少なくとも一つ以上存在する場合である。
【0210】
これらの状況は全て、命令goto(501)のパラメータに記載のオフセットをそのままにして圧縮して実行処理を行った場合、命令goto(501)とジャンプ先(502)の間にメタ命令に置換される命令列が存在するため、オフセット値が正しいジャンプ先を示さなくなるという問題が発生する。
本実施の形態では、この問題を解決するために新たにジャンプ処理に対応する命令としてジャンプ・イン命令とジャンプ・アウト命令を設ける。
【0211】
ここで、ジャンプ・イン命令とジャンプ・アウト命令の概要を説明する。
例えば[状況1]において、圧縮対象命令列内の命令goto(501)のジャンプオフセット値が最初20であるとする。
また、命令goto(501)の直後に10バイト分の圧縮対象命令列が存在し、この圧縮対象命令列がメタ命令に置き換えられると、5バイトに圧縮されるとする。
命令goto(501)のジャンプオフセット値である20バイトは、圧縮前の命令列長10バイトを前提にした20バイト先の位置をジャンプ先としている。
10バイトの圧縮対象命令列がメタ命令に置き換えられて5バイトに圧縮されると5バイト分の誤差が生じる。
そして、命令goto(501)のオフセット値を20バイトのままにして圧縮命令データ実行装置104が命令goto(501)を処理すると、次のプログラムカウンタは命令goto(501)の20バイト分先の命令を参照する事になるが、5バイト分の誤差が生じるため、本来のジャンプ先とは異なる不正な領域を参照する事になる。
このような問題を回避するために[状況1]に対応するジャンプ命令があった場合には、命令データ圧縮装置103が、データ圧縮時に命令goto(501)をジャンプ・アウト命令に置き換える。
ジャンプ・アウト命令及びジャンプ・イン命令は、メタ命令への置換によりジャンプオフセット値が正しいジャンプ先を指し示していないことを圧縮命令データ実行装置104に通知する命令である。
圧縮命令データ実行装置104は、ジャンプ・アウト命令を実行しようとするときには、現在の圧縮対象命令列は終了したものとして、非圧縮対象命令列に復帰させた直後に圧縮対象命令列の圧縮分を計算してジャンプオフセット値を調節して正しいジャンプ先の命令を探索する。
上記の具体例であれば、当初のオフセットは20で命令goto(501)直後の命令列は5バイト圧縮されるため(20−5)で15バイトがジャンプ・アウト命令のパラメータ(ジャンプオフセット値)となる。
【0212】
同様の考え方でジャンプ先(502)が圧縮対象命令列に存在する場合にはジャンプ・イン命令に置き換え、圧縮命令データ実行装置104はジャンプ・イン命令の実行の際に、圧縮量を計算しながらジャンプオフセット値を調節して正しいジャンプ先の命令を探索する。
【0213】
[状況4]のみ命令goto(501)はそのままで、パラメータのオフセット値のみを書き換える事で対応可能であるため、対応する新規ジャンプ命令は定義しない。
【0214】
このように、本実施の形態では、上記の[状況1]〜[状況4]に対応する新たな命令(ジャンプ・アウト命令、ジャンプ・イン命令)を命令セットに追加し、その命令(ジャンプ・アウト命令、ジャンプ・イン命令)を生成する事が可能な命令データ生成装置102、命令データ圧縮装置103、およびその命令を実行可能とする圧縮命令データ実行装置104を持つ。
そして、これにより、圧縮範囲を限定せずに全ての処理対象となる命令データに対して圧縮処理を実施する事を可能とする。
【0215】
図33は、命令データ圧縮装置103において、上記[状況1]から[状況4]に合致するジャンプ命令列(命令goto)を判定するためのジャンプ命令種別判定処理手順の一例である。
【0216】
本処理は図18における処理1801から処理1802に遷移する直前に実施する事を想定している。
なお、図33に出現する変数名で図18にも同名の変数名が出現するが、それぞれは独立した異なる変数である。
なお、図33の処理は、命令データ圧縮変換部1035が実行する。
【0217】
処理3301では、命令データ圧縮変換部1035は、処理対象となっている命令データの先頭命令を指すポインタを設定し、そのポインタをptとしている。
ポインタ設定完了後に処理3302へ遷移する。
【0218】
処理3302では、命令データ圧縮変換部1035は、処理対象となっている命令データの中に記述されている全てのジャンプ命令列に関する情報を登録するためのジャンプ命令情報リストを初期化する。
図34は、上記ジャンプ命令情報リストにおけるリスト要素のデータ構造の一例である。
少なくとも、その要素に記述されている情報がどのジャンプ命令列に対応するかを示す場所情報と、そのジャンプ命令列が少なくとも上記[状況1]から[状況4]のどの状況にある命令であるかを示す種別情報を要素に持つ。
処理3302でジャンプ命令情報リストの初期化が完了後に処理3303へ遷移する。
【0219】
処理3303では、命令データ圧縮変換部1035は、ptが命令コードの終端を指しているかどうか判定する。
その判定結果が終端を指している場合には、処理対象の命令データに対するジャンプ命令種別判定処理が完了したことを意味し、ジャンプ命令種別判定処理を終了する。
その時点でジャンプ命令情報リストには処理対象の命令データに記述されているジャンプ命令の情報が登録されている。
逆にその判定結果が終端を指していない場合には処理3304へ遷移し、命令データ中の未処理命令に関する処理を継続する。
【0220】
処理3304では、命令データ圧縮変換部1035は、ptが指し示す命令がジャンプ命令であるか判定する。
その判定結果がジャンプ命令ではない場合、処理3305へ遷移し、逆に判定結果がジャンプ命令である場合には処理3306へ遷移する。
【0221】
処理3305では、命令データ圧縮変換部1035は、ptが指し示す命令はジャンプ命令ではないため、ptが指し示す命令の直後の命令にptをシフトさせ、処理3303へ遷移する。
【0222】
処理3306では、命令データ圧縮変換部1035は、ptが指し示す命令はジャンプ命令であるため、そのジャンプ命令の情報をジャンプ命令情報リストに登録するための要素を生成し、その要素をジャンプ命令情報リストに登録する。
リストへの登録が完了後に処理3307へ遷移する。
【0223】
処理3307以降では現在ptが指し示すジャンプ命令の種別判定を行う。
処理3307では、命令データ圧縮変換部1035は、ジャンプ命令が圧縮対象命令列に含まれているかを判定する。
その判定結果が圧縮対象命令列に含まれている場合には処理3309へ、圧縮対象命令列に含まれていない場合には処理3308へ遷移する。
処理3307におけるジャンプ命令が圧縮対象命令列に含まれているかの具体的な判定方法は、例えば、対象となるジャンプ命令が圧縮対象命令列テーブルに登録されている圧縮対象命令列の一部であるかを判定する事で実現可能である。
この判定処理は、比較対象の圧縮対象命令列の要素に含まれる出現位置情報リスト中の処理対象の命令データに関する位置情報から始まる圧縮対象命令列が、ptが指し示す命令を含むか否かで判定可能である。
【0224】
処理3308では、命令データ圧縮変換部1035は、ptが指し示すジャンプ命令のジャンプ先の命令が圧縮対象命令列の中に含まれる命令かどうかを判定する。
ジャンプ先の命令の特定方法はジャンプ命令のパラメータ部に含まれるオフセット値をptに加算する事でジャンプ先の命令の番地を得る事が可能である。
また、その命令が圧縮対象命令列の中に含まれるかどうかは処理3307でジャンプ命令の圧縮対象命令列に含まれているかを判定した処理と同様の方法を用いる事で実現可能である。
処理3308の判定結果が圧縮対象命令列内の命令である場合には処理3311へ、逆に圧縮対象命令列内の命令ではない場合には処理3310へ遷移する。
【0225】
処理3309では、命令データ圧縮変換部1035は、ptが指し示すジャンプ命令のジャンプ先の命令が同じ圧縮対象命令列の中に含まれる命令がどうかを判定する。
この判定処理は処理3308で説明した判定方法を用いる事で実現可能である。
この判定結果が圧縮対象命令列内の命令である場合には処理3313へ、逆に圧縮対象命令列内の命令ではない場合には処理3312へ遷移する。
【0226】
処理3310では、ptが指し示すジャンプ命令およびそのジャンプ命令のジャンプ先の命令は圧縮対象命令列には含まれていないため、[状況4]もしくは通常状況(ジャンプ命令もジャンプ先も圧縮対象ではない状況)である通常ジャンプ命令種別である事が判明する。
そのため、命令データ圧縮変換部1035は、ジャンプ命令情報の種別情報に通常ジャンプ命令種別を示す値を設定し、処理3314に遷移する。
【0227】
処理3311では、ptが指し示すジャンプ命令は圧縮対象命令列には含まれないが、ジャンプ先の命令は圧縮対象命令列に含まれるため、[状況3]にある事が判明する。
そのため、ジャンプ命令情報の種別情報にメタ命令内ジャンプ命令種別を示す値を設定し、処理3314に遷移する。
【0228】
処理3312では、命令データ圧縮変換部1035は、ptが指し示すジャンプ命令は圧縮対象命令列に含まれるが、ジャンプ先の命令はジャンプ命令が含まれる圧縮対象命令列に含まれないため、[状況1]もしくは[状況2]にある事が分かる。
この二つの状況判定はジャンプ命令変更処理で実施するため、ここではジャンプ命令情報の種別情報に、メタ命令外ジャンプ命令種別を示す値を設定し、処理3314に遷移する。
処理3313では、ptが指し示すジャンプ命令およびそのジャンプ命令のジャンプ先の命令は同一圧縮対象命令列に含まれるため、[状況4]もしくは通常状況にある事が分かる。
この二つの状況判定はジャンプ命令変更処理で実施するため、命令データ圧縮変換部1035は、ここではジャンプ命令情報の種別情報に通常ジャンプ命令種別を示す値を設定し、処理3314に遷移する。
【0229】
処理3314では、命令データ圧縮変換部1035は、現在のジャンプ命令情報の場所情報にptが保持する番地を設定し、処理3305へ遷移し、次の命令に対する処理を繰り返す。
【0230】
以上の処理を行う事で処理対象となっている命令データ中に記述されている全てのジャンプ命令の種別判定が完了する。
【0231】
図35はジャンプ命令種別判定処理で求めたジャンプ命令種別情報をもとにジャンプ命令を書き換えるジャンプ命令変更処理の処理手順の一例である。
本処理は、図18における処理1801から処理1802に遷移する直前にあって、図33のフローの終了後に実施するなどが考えられる。
また、図35の処理は、命令データ圧縮変換部1035が実行する。
【0232】
ジャンプ命令変更処理の具体的内容の説明を行う前に、ジャンプ命令を書き換えるための新たな命令を以下で説明する。
【0233】
[状況1]および[状況2]に該当するジャンプ命令を書き換えるための新たな命令としてジャンプ・アウト命令を命令セットに新たに定義する。
このジャンプ・アウト命令は圧縮対象命令列からのジャンプ処理に対応するジャンプ命令であり、圧縮命令データ実行装置104で処理する際にその状況に特化した処理を実施するために必要となる。
換言すれば、圧縮命令データ実行装置104にジャンプ命令が含まれている圧縮対象命令領域内での圧縮量を計算しながらジャンプ先を探索させる命令である。
【0234】
[状況3]に該当するジャンプ命令を書き換えるための新たな命令としてジャンプ・イン命令を命令セットに新たに定義する。
このジャンプ・イン命令は非圧縮対象命令列から圧縮対象命令列へのジャンプ処理に対応するジャンプ命令であり、圧縮命令データ実行装置104で処理する際にその状況に特化した処理を実施するために必要となる。
換言すれば、圧縮命令データ実行装置104にジャンプ先が含まれる圧縮対象命令領域内の圧縮量を計算しながらジャンプ先を探索させる命令である。
【0235】
それ以外の状況におけるジャンプ命令に対する命令書換えは実施しないが、[状況4]に該当するジャンプ命令全てに関してはジャンプオフセット値となるパラメータ値を更新する。
【0236】
ここで説明した新たな命令セットはあくまでも一例であり、他の命令を定義する事で問題を解決する事も可能であるが、以下の説明ではジャンプ・イン命令およびジャンプ・アウト命令を用いた例を説明する。
【0237】
ジャンプ命令変更処理の具体的内容の説明に戻る。
処理3501では、命令データ圧縮変換部1035は、処理対象命令データのジャンプ命令情報リストから未処理の要素を取得し、以降の処理における処理対象要素とする。
要素取得処理完了後、処理3502へ遷移する。
【0238】
処理3502では、命令データ圧縮変換部1035は、処理3501で取得した未処理要素が存在するかどうかを判定する。
未処理要素が存在しない場合にはジャンプ命令情報リストの全ての要素を処理完了した事を意味するため、ジャンプ命令変更処理は終了する。
逆に未処理要素が存在した場合には、処理3503へ遷移する。
【0239】
処理3503では、命令データ圧縮変換部1035は、処理対象となっている要素の種別情報を読み取り、その内容によって処理分岐を行う。
種別情報が通常ジャンプ命令種別の場合には処理3504へ、メタ命令内ジャンプ命令種別の場合には処理3505へ、メタ命令外ジャンプ命令種別の場合には処理3506へ遷移する。
【0240】
処理3504では、命令データ圧縮変換部1035は、処理対象となる要素に対応するジャンプ命令とそのジャンプ命令でのジャンプ先の命令の間に圧縮対象命令列が存在しているかどうかを判定する。
判定の結果、圧縮対象命令列が存在する場合には処理3507へ遷移する。
逆に圧縮対象命令列が存在しない場合には処理3501へ遷移し、ジャンプ命令情報リストの次の要素への処理を継続する。
【0241】
処理3507では、命令データ圧縮変換部1035は、処理対象のジャンプ命令のパラメータ部に記載されているオフセット値を書き換える処理を行う。
処理3507で対象とするジャンプ命令は、ジャンプ先の命令との間に少なくとも一つ以上の圧縮対象命令列が存在している。
圧縮対象命令列は、命令データ圧縮変換でその箇所は、メタ命令で置き換えられることを意味しており、結果としてジャンプ命令とジャンプ先命令の間に存在する命令データ長が変更される。
よって、ジャンプ命令のパラメータ部に記載されているジャンプオフセット値をそのままにして圧縮命令データ実行装置104が実行した場合、適切な命令へのジャンプ処理が実施できなくなる。
処理3507は上記の問題を解消するために実施されるものであり、命令データ圧縮変換部1035は、処理対象のジャンプ命令のパラメータ部のジャンプオフセット値Offsetを以下の算出式のもと新ジャンプオフセット値NewOffsetを算出し、その結果をパラメータ部の新たなジャンプオフセット値として再設定する。
【0242】
【数1】
【0243】
なお上記算出式でxは処理対象ジャンプ命令からジャンプ先命令の間に存在する圧縮対象命令列を要素とする集合を意味し、length(x)は圧縮対象命令列xの命令列長を意味し、length(metaOP)はメタ命令の命令長を意味している。
つまり、上記算出式は圧縮前に求められたジャンプオフセット値から間に存在する全ての圧縮対象命令列の命令長を引き、置き換えられる個数分のメタ命令の命令長を加算し、圧縮命令データとした場合のジャンプオフセット値を算出している。
処理3507でジャンプオフセット値を更新完了後、処理3501へ遷移する。
【0244】
処理3505では、命令データ圧縮変換部1035は、メタ命令内ジャンプ命令種別に判定されたジャンプ命令に対する処理を実施する。
ここでは処理対象となるジャンプ命令の命令識別番号をジャンプ・イン命令の命令識別番号に書き換える。
書換え完了後に処理3504へ遷移する。
【0245】
処理3506では、命令データ圧縮変換部1035は、メタ命令外ジャンプ命令種別に判定されたジャンプ命令に対する処理を実施する。
ここでは処理対象となるジャンプ命令の命令識別番号をジャンプ・アウト命令の命令識別番号に書き換える。
書換え完了後に処理3504へ遷移する。
【0246】
以上で説明したジャンプ命令変更処理により、命令データ圧縮処理を実施する上で影響のあるジャンプ命令に対する命令を適切に更新する事が可能となる。
【0247】
次に、以上までに説明したジャンプ・イン命令およびジャンプ・アウト命令に書換えを行った圧縮命令データの実行処理方法について説明を行う。
図38はジャンプ・イン命令およびジャンプ・アウト命令を実行する機能を有する圧縮命令データ実行装置104における圧縮命令データ実行処理手順の具体例であり、図23に示した圧縮命令データ実行処理手順に対して処理3801および処理3802を加えた構成となっている。
処理3801および処理3802はそれぞれ処理2303で現在の処理対象命令の命令識別番号からその命令がジャンプ・アウト命令である、ジャンプ・イン命令であると判定された場合に実行される処理となっており、それぞれではジャンプ先の命令を検索する処理を実施する。
図38の処理は、圧縮命令データ実行装置104の命令列解釈・実行部1046が行う。
【0248】
図36は処理3801の具体的な処理手順の一例を示した図である。
図36の処理も、命令列解釈・実行部1046が行う。
図36の処理は、概要を述べると、初めてジャンプ・アウト命令を実行する場合にはジャンプ先命令を検索する処理を行い、そのジャンプ先をキャッシュに保存してからジャンプを行い、同じジャンプ命令を2回以上実行する場合、ジャンプ先は同じであるため、キャッシュからジャンプ先情報を取得してジャンプを行う処理である。
また、ここで、ジャンプ先の検索方法の概要を述べる。
まず、図47に示すように、ジャンプ・アウト命令(501)以降の圧縮対象命令領域の命令列長(Length(R))を求め、ジャンプ・アウト命令(501)のオフセット値(Offset)から命令列長(Length(R))を減算し、当該圧縮対象命令領域以降にある命令列の命令列長(Offset−Length(R))を求める。
そして、所定の命令列長(Length(op))ごとに位置を後ろに移動させ、また、圧縮命令領域ではメタ命令の元の命令列の命令列長を導出し、移動量が命令列長(Offset−Length(R))と一致した位置がジャンプ先となる。
以下、図36の各処理を説明する。
【0249】
処理3601では、命令列解釈・実行部1046は、現在の処理対象命令のジャンプ・アウト命令のジャンプオフセット値Offsetを取得する。
取得完了後に処理3602へ遷移する。
【0250】
処理3602では、命令列解釈・実行部1046は、現在の処理対象命令のジャンプ・アウト命令に関するキャッシュ情報をジャンプ・アウト命令キャッシュ情報リストから検索する。
検索完了後に処理3603へ遷移する。
ここでジャンプ・アウト命令キャッシュ情報リストとは、あるジャンプ・アウト命令を処理した直後の圧縮命令データ実行装置における少なくとも処理対象命令位置記憶手段の記憶情報および処理対象命令位置退避手段の退避情報を情報として、当該ジャンプ・アウト命令の位置情報をキーとして管理するリストである。
これはジャンプ命令がジャンプ処理を実施する場合には必ず同じ命令へジャンプするため、2回目以降はジャンプ先命令を検索する処理を省略するために利用する。
【0251】
処理3603では、命令列解釈・実行部1046は、処理3602で検索したキャッシュ情報が存在するかどうか判定する。
その判定の結果、キャッシュ情報が存在しない場合には処理3605へ遷移し、ジャンプ先命令の検索処理を実施する。
逆に判定の結果、キャッシュ情報が存在する場合には処理3604へ遷移する。
【0252】
処理3604では、命令列解釈・実行部1046は、検索されたキャッシュ情報をもとに処理対象のジャンプ・アウト命令を実施した場合の処理対象命令位置記憶部1043によって記憶される記憶情報および、処理対象命令位置退避部1044によって退避される退避情報を再現させる。
再現完了後にジャンプ・アウト命令実行処理を終了する。
【0253】
処理3605以降ではジャンプ・アウト命令のジャンプ先検索を実施する。
処理3605では、命令列解釈・実行部1046は、現在処理対象となっている圧縮対象命令列の未実行命令列長Length(R)を算出する。
この値は例えば処理対象となっている圧縮対象命令列の終端番地から現在の処理対象命令位置情報の番地を引く事で求める事ができる。
算出終了後、処理3606へ遷移する。
【0254】
処理3606では、命令列解釈・実行部1046は、圧縮命令データ実行装置104で現在処理対象となっている圧縮対象命令列に対するメタ命令実行を終了させる。
これはジャンプ・アウト命令が現在処理対象となっている圧縮対象命令列より先の命令へジャンプするための命令である事から必要となる。
この処理を実施後、処理対象命令位置記憶部1043によって記憶される処理対象命令位置情報は、今まで実行していた圧縮対象命令列を実行するトリガーとなったメタ命令の直後の命令の先頭番地を指し、処理対象命令位置退避部1044によって記憶される処理対象命令位置退避情報は上記メタ命令が実行される直前の状態に戻される。
メタ命令実行終了処理完了後、処理3607へ遷移する。
【0255】
処理3607では、命令列解釈・実行部1046は、ジャンプ先命令を検索するための準備処理を行う。
具体的には、あとジャンプすべきオフセット値である残ジャンプオフセット値を記憶する変数iの初期化である。
iには残るジャンプオフセット値、例えば具体的にはOffsetからLength(R)を引いた値(Offset−Length(R))を代入する。
初期化処理完了後、処理3608へ遷移する。
【0256】
処理3608では、命令列解釈・実行部1046は、残ジャンプオフセット値が残っているか、つまりはiが0より大きい値となっているかを判別する。
その判別の結果残っていない場合には処理3609へ遷移し、逆に残っている場合には処理3610へ遷移する。
【0257】
処理3609では、命令列解釈・実行部1046は、残ジャンプオフセット値が残っていない場合に遷移する処理であり、現在の処理対象命令位置記憶部1043によって記憶されている処理対象命令位置情報および、処理対象命令位置退避部1044によって退避されている処理対象命令位置退避情報で示される命令列における処理対象命令こそがジャンプ・アウト命令によってジャンプすべき命令であると判別した状況である。
よって、この処理対象命令位置情報および、処理対象命令位置退避情報を、今回のジャンプ・アウト命令実行処理のトリガーとなったジャンプ・アウト命令が記述されている番地をキーとしてジャンプ・アウト命令キャッシュ情報リストに登録する。
登録終了後、本ジャンプ・アウト命令実行処理は終了する。
【0258】
処理3610では、命令列解釈・実行部1046は、現在の処理対象命令位置情報が指し示す命令がメタ命令であるか判定する。
判定の結果、メタ命令ではない場合には処理3611へ、逆にメタ命令である場合には処理3614へ遷移する。
【0259】
処理3611では、命令列解釈・実行部1046は、現在の処理対象命令位置情報は通常命令であり、かつジャンプオフセット値は残っている状況である。
そのため、この命令の次へジャンプするための処理対象命令位置情報の指す命令の命令長(Length(op))を取得する。
取得後、処理3612へ遷移する。
【0260】
処理3612では、命令列解釈・実行部1046は、処理3611で取得した命令長(Length(op))を利用して残ジャンプオフセット値を更新する。
具体的には例えば残ジャンプオフセット値から命令長(Length(op))を引く事が考えられる。
更新完了後、処理3613へ遷移する。
【0261】
処理3613では、命令列解釈・実行部1046は、処理対象命令位置情報を次の命令の先頭番地に更新し、処理3608へ遷移する。
【0262】
処理3614では、命令列解釈・実行部1046は、現在の処理対象命令位置情報はメタ命令であり、かつジャンプオフセット値は残っている状況である。
そのため、このメタ命令が指定する圧縮対象命令列内にジャンプ先命令が存在するかどうか判定処理が必要となる。
そこで、処理3614では、命令列解釈・実行部1046は、メタ命令が指定する圧縮対象命令列をメタ命令辞書データから取得する。
取得完了後、処理3615へ遷移する。
【0263】
処理3615では、命令列解釈・実行部1046は、メタ命令が指定する圧縮対象命令列内にジャンプ先命令が存在するかどうか判定処理を行う。
具体的には例えば残ジャンプオフセット値と、メタ命令が指定する圧縮対象命令列の命令列長を比較して、一致するかもしくは残ジャンプオフセット値のほうが小さい場合にはその圧縮対象命令列内にジャンプ先命令が存在すると判定する事が考えられる。
この判定の結果、圧縮対象命令内にジャンプ先が存在する場合には処理3617へ、逆に圧縮対象命令内にジャンプ先が存在しない場合には処理3616へ遷移する。
【0264】
処理3616は、現在の処理対象命令位置情報が指し示すメタ命令に対応する圧縮対象命令列内にはジャンプ先命令は存在せず、そのメタ命令以降にジャンプ先命令が存在する状況で処理される。
そのため、処理3616では、命令列解釈・実行部1046は、残ジャンプオフセット値を更新する。
この更新では例えば、その圧縮対象命令列の命令列長(Length(op))だけ残ジャンプオフセット値から引いた値に更新する事が考えられる。更新終了後、処理3613に遷移する。
【0265】
処理3617は現在の処理対象命令位置情報が指し示すメタ命令に対応する圧縮対象命令列内にジャンプ先命令が存在する状況で処理される。
そこで、命令実行時情報記憶部1042で記憶する情報をそのジャンプ先命令を適切に実行するために必要な情報に書き換える処理を行う。
具体的には例えば、少なくとも処理対象命令位置退避部1044で退避される情報として、現時点での処理対象命令位置記憶部1043によって記憶されている処理対象命令位置情報を退避させた後、処理対象命令位置記憶部1043によって記録される処理対象命令位置情報をその圧縮対象命令列内のジャンプ先命令を指し示す情報に更新するなどが考えられる。
処理完了後に処理3609に遷移する。
【0266】
以上の処理を行う事によって、ジャンプ・アウト命令に対する圧縮命令データ実行装置104における適切な処理が可能となり、あるジャンプ・アウト命令に対して初回実行時にはそのジャンプ・アウト命令でジャンプすべきジャンプ先命令を検索し、そのジャンプ先命令を実行するために必要な命令実行時情報をジャンプ・アウト命令キャッシュ情報リストに登録する。
二回目以降の実行ではジャンプ・アウト命令キャッシュ情報リストに登録されている情報からジャンプ先命令を実行するために必要な命令実行時情報を復元させる事でジャンプ先命令の検索処理を回避している。
【0267】
図37は処理3802の具体的な処理手順の一例を示した図である。
処理3802と処理3801は類似した処理手順を取る事になるが、処理3802ではジャンプ・イン命令に対する処理となっているため、処理3801では必要となるジャンプ先命令を検索するループの手前のメタ命令実行状態からの復帰処理が必要なくなる。
それ以外の処理は処理3802と処理3801では同じとなる。
そのため、処理3801の説明で利用したジャンプ・アウト命令キャッシュ情報リストを処理3802の処理でも同一のものを利用して処理しても構わないが、図37では当該リストの事をジャンプ・イン命令キャッシュ情報リストと呼び、異なるリストとして記述している。
しかし、リストの基本構成および機能に関してはジャンプ・アウト命令キャッシュ情報リストと同一であるとしている。
【0268】
図37の処理も、図36と同様に、初めてジャンプ・イン命令を実行する場合にはジャンプ先命令を検索する処理を行い、そのジャンプ先をキャッシュに保存してからジャンプを行い、同じジャンプ命令を2回以上実行する場合、ジャンプ先は同じであるため、キャッシュからジャンプ先情報を取得してジャンプを行う処理である。
また、図37の場合は、ジャンプ・イン命令は非圧縮命令領域にありジャンプ先が圧縮命令領域にある。
このため、図37では、ジャンプ・イン命令から所定の命令列長(Length(op))ごとに位置を後ろに移動させ、また、圧縮命令領域ではメタ命令の元の命令列の命令列長を導出し、移動量がジャンプ・イン命令のオフセット値と一致した位置がジャンプ先となる。
なお、図37の処理も、命令列解釈・実行部1046が実行する。
以下、図37の各処理を説明する。
【0269】
処理3701では、命令列解釈・実行部1046は、現在の処理対象命令のジャンプ・イン命令のジャンプオフセット値Offsetを取得する。
取得完了後に処理3702へ遷移する。
【0270】
処理3702では、命令列解釈・実行部1046は、現在の処理対象命令のジャンプ・イン命令に関するキャッシュ情報をジャンプ・イン命令キャッシュ情報リストから検索する。
検索完了後に処理3703へ遷移する。
【0271】
処理3703では、命令列解釈・実行部1046は、処理3702で検索したキャッシュ情報が存在するかどうか判定する。
その判定の結果、キャッシュ情報が存在しない場合には処理3704へ遷移し、ジャンプ先命令の検索処理を実施する。
逆に判定の結果、キャッシュ情報が存在する場合には処理3707へ遷移する。
【0272】
処理3707では、命令列解釈・実行部1046は、ジャンプ先命令を検索するための準備処理を行う。
具体的には、あとジャンプすべきオフセット値である残ジャンプオフセット値を記憶する変数iの初期化である。
iには残るジャンプオフセット値、例えば具体的にはOffsetからジャンプ・イン命令の命令長を引いた値を代入する。初期化処理完了後、処理3708へ遷移する。
【0273】
処理3708では、命令列解釈・実行部1046は、残ジャンプオフセット値が残っているか、つまりはiが0より大きい値となっているかを判別する。
その判別の結果残っていない場合には処理3709へ遷移し、逆に残っている場合には処理3710へ遷移する。
【0274】
処理3709では、命令列解釈・実行部1046は、残ジャンプオフセット値が残っていない場合に遷移する処理であり、現在の処理対象命令位置記憶部1043によって記憶されている処理対象命令位置情報および、処理対象命令位置退避部1044によって退避されている処理対象命令位置退避情報で示される命令列における処理対象命令こそがジャンプ・イン命令によってジャンプすべき命令であると判別した状況である。
よって、この処理対象命令位置情報および、処理対象命令位置退避情報を、今回のジャンプ・イン命令実行処理のトリガーとなったジャンプ・イン命令が記述されている番地をキーとしてジャンプ・イン命令キャッシュ情報リストに登録する。
登録終了後、本ジャンプ・イン命令実行処理は終了する。
【0275】
処理3710では、命令列解釈・実行部1046は、現在の処理対象命令位置情報が指し示す命令がメタ命令であるか判定する。
判定の結果、メタ命令ではない場合には処理3711へ、逆にメタ命令である場合には処理3714へ遷移する。
【0276】
処理3711では、命令列解釈・実行部1046は、現在の処理対象命令位置情報は通常命令であり、かつジャンプオフセット値は残っている状況である。
そのため、この命令の次へジャンプするための処理対象命令位置情報の指す命令の命令長(Length(op))を取得する。
取得後、処理3712へ遷移する。
【0277】
処理3712では、命令列解釈・実行部1046は、処理3711で取得した命令長(Length(op))を利用して残ジャンプオフセット値を更新する。
具体的には例えば残ジャンプオフセット値から命令長(Length(op))を引く事が考えられる。更新完了後、処理3713へ遷移する。
【0278】
処理3713では、命令列解釈・実行部1046は、処理対象命令位置情報を次の命令の先頭番地に更新し、処理3708へ遷移する。
【0279】
処理3714では、命令列解釈・実行部1046は、現在の処理対象命令位置情報はメタ命令であり、かつジャンプオフセット値は残っている状況である。
そのため、このメタ命令が指定する圧縮対象命令列内にジャンプ先命令が存在するかどうか判定処理が必要となる。
そこで、処理3714では、メタ命令が指定する圧縮対象命令列をメタ命令辞書データから取得する。
取得完了後、処理3715へ遷移する。
【0280】
処理3715では、命令列解釈・実行部1046は、メタ命令が指定する圧縮対象命令列内にジャンプ先命令が存在するかどうか判定処理を行う。
具体的には例えば残ジャンプオフセット値と、メタ命令が指定する圧縮対象命令列の命令列長を比較して、一致するかもしくは残ジャンプオフセット値のほうが小さい場合にはその圧縮対象命令列内にジャンプ先命令が存在すると判定する事が考えられる。
この判定の結果、圧縮対象命令内にジャンプ先が存在する場合には処理3717へ、逆に圧縮対象命令内にジャンプ先が存在しない場合には処理3716へ遷移する。
【0281】
処理3716は、現在の処理対象命令位置情報が指し示すメタ命令に対応する圧縮対象命令列内にはジャンプ先命令は存在せず、そのメタ命令以降にジャンプ先命令が存在する状況で処理される。
そのため、処理3716では、残ジャンプオフセット値を更新する。この更新では例えば、その圧縮対象命令列の命令列長だけ残ジャンプオフセット値から引いた値に更新する事が考えられる。
更新終了後、処理3713に遷移する。
【0282】
処理3717は現在の処理対象命令位置情報が指し示すメタ命令に対応する圧縮対象命令列内にジャンプ先命令が存在する状況で処理される。
そこで、命令実行時情報記憶部1042で記憶する情報をそのジャンプ先命令を適切に実行するために必要な情報に書き換える処理を行う。
具体的には例えば、命令列解釈・実行部1046は、少なくとも処理対象命令位置退避部1044で退避される情報として、現時点での処理対象命令位置記憶部1043によって記憶されている処理対象命令位置情報を退避させた後、処理対象命令位置記憶部1043によって記録される処理対象命令位置情報をその圧縮対象命令列内のジャンプ先命令を指し示す情報に更新するなどが考えられる。
処理完了後に処理3709に遷移する。
【0283】
以上の処理を行う事によって、ジャンプ・イン命令に対する圧縮命令データ実行装置104における適切な処理が可能となり、あるジャンプ・イン命令に対して初回実行時にはそのジャンプ・イン命令でジャンプすべきジャンプ先命令を検索し、そのジャンプ先命令を実行するために必要な命令実行時情報をジャンプ・イン命令キャッシュ情報リストに登録する。
二回目以降の実行ではジャンプ・イン命令キャッシュ情報リストに登録されている情報からジャンプ先命令を実行するために必要な命令実行時情報を復元させる事でジャンプ先命令の検索処理を回避している。
【0284】
このように、本実施の形態に係る命令データ圧縮装置103では、命令データ格納装置アクセス部1031は、所定のジャンプ先命令列へのジャンプ命令が記述されるジャンプ命令列が含まれる命令データを入力する場合がある。
そして、命令データ圧縮変換部1035は、命令列ごとにメタ命令に置き換えるか否かを判断しメタ命令に置き換える命令列を指定した後であって置き換え対象の命令列をメタ命令に置き換える前に、メタ命令に置き換えられることになる置き換え命令列群とジャンプ命令列とジャンプ先命令列との位置関係を解析し、置き換え命令列群とジャンプ命令列とジャンプ先命令列との位置関係が所定の条件に合致する場合に、ジャンプ命令列に対する補正処理を行い、ジャンプ命令列に対する補正処理の後に、置き換え対象の命令列をメタ命令に置き換える。
命令データ圧縮変換部1035は、ジャンプ命令列が置き換え命令列群に含まれ、ジャンプ先命令列が同じ置き換え命令列群に含まれていない場合([状況1]、[状況2])、
ジャンプ命令列が置き換え命令列群に含まれず、ジャンプ先命令列が置き換え命令列群に含まれる場合([状況3])、
ジャンプ命令列とジャンプ先命令列がともに置き換え命令列群に含まれず、ジャンプ命令列とジャンプ先命令列との間に1つ以上の置き換え命令列群が存在する場合([状況4])において、ジャンプ命令列に対する補正処理を行う。
【0285】
[状況1]、[状況2]の場合に、命令データ圧縮変換部1035は、ジャンプ命令列が置き換え命令列群に含まれ、ジャンプ先命令列が同じ置き換え命令列群に含まれず、置き換え命令列群のメタ命令への置き換えによりジャンプ命令列のジャンプオフセット値がジャンプ先命令列を指し示さない状態になっていることを圧縮命令データ実行装置104に対して通知する命令識別番号(ジャンプアウト通知)をジャンプ命令列に記述してジャンプ・アウト命令とする。
【0286】
[状況3]の場合に、命令データ圧縮変換部1035は、ジャンプ命令列が置き換え命令列群に含まれず、ジャンプ先命令列が置き換え命令列群に含まれ、置き換え命令列群のメタ命令への置き換えによりジャンプ命令列のジャンプオフセット値がジャンプ先命令列を指し示さない状態になっていることを圧縮命令データ実行装置104に対して通知する命令識別番号(ジャンプイン通知)をジャンプ命令列に記述してジャンプ・イン命令とする。
【0287】
また、[状況4]の場合に、命令データ圧縮変換部1035は、ジャンプ命令列とジャンプ先命令列との間に存在する置き換え命令列群のデータ総量と、当該置き換え命令列群を置き換えることになるメタ命令のデータ総量とに基づき、ジャンプ命令列のジャンプオフセット値を変更する。
【0288】
また、上記のように、本実施の形態に係る圧縮命令データ実行装置104では、命令データ格納装置アクセス部1041は、2以上の命令列が含まれる命令列群がメタ命令に置き換えられており、メタ命令に置き換えられた置き換え命令列群に、所定のジャンプ先命令列へのジャンプ命令が記述されているジャンプ命令列が含まれ、ジャンプ命令列にはジャンプ先命令列までのオフセット値がジャンプオフセット値として記述されている命令データを入力する場合がある。
命令列解釈・実行部1046は、ジャンプ命令列の実行時に、ジャンプ命令列がジャンプ・アウト命令列であるかを判断し、ジャンプ・アウト命令列である場合に、ジャンプ・アウト命令列がメタ命令に置き換えられたことによりジャンプオフセット値がジャンプ先命令列を指し示していないと判断し、ジャンプ・アウト命令列以降のデータ内容を解析して、ジャンプ・アウト命令列のジャンプ先命令列を検索し、検索したジャンプ先命令列にジャンプして当該ジャンプ・アウト命令列を実行する。
【0289】
また、命令列解釈・実行部1046は、ジャンプ・アウト命令列である場合である場合に、ジャンプ・アウト命令列のジャンプオフセット値(図47のOffset)と、ジャンプ・アウト命令列から置き換え命令列群の終端までの命令長(図47のLength(R))と、置き換え命令列群のメタ命令以降の命令列の命令長(Offset−Length(R))とに基づく解析を行い、ジャンプ・アウト命令列のジャンプ先命令列を検索する。
【0290】
また、命令データ格納装置アクセス部1041は、2以上の命令列が含まれる命令列群がメタ命令に置き換えられており、所定のジャンプ先命令列へのジャンプ命令が記述されているジャンプ命令列がメタ命令外に含まれ、ジャンプ命令列にはジャンプ先命令列までのオフセット値がジャンプオフセット値として記述されており、ジャンプ命令列のジャンプ先命令列が前記メタ命令に置き換えられた置き換え命令列群に含まれている命令データを入力する場合がある。
命令列解釈・実行部1046は、ジャンプ命令列の実行時に、ジャンプ命令列がジャンプ・イン命令列であるかを判断し、ジャンプ・イン命令列である場合に、ジャンプ・イン命令列のジャンプ先命令列がメタ命令に置き換えられたことによりジャンプオフセット値がジャンプ先命令列を指し示していないと判断し、ジャンプ・イン命令列以降のプログラム内容を解析して、ジャンプ・イン命令列のジャンプ先命令列を検索し、検索したジャンプ先命令列にジャンプして当該ジャンプ・イン命令列を実行する。
【0291】
また、命令列解釈・実行部1046は、ジャンプ・イン命令列である場合である場合に、ジャンプ・イン命令列のジャンプオフセット値と、ジャンプ・イン命令列以降の命令列の命令長とに基づく解析を行い、ジャンプ・イン命令列のジャンプ先命令列を検索する。
【0292】
また、命令列解釈・実行部1046は、置き換え命令列群のメタ命令以降に他のメタ命令が存在する場合に、メタ命令辞書データを参照して、当該他のメタ命令に対応する命令列の命令長を導出する。
【0293】
以上までで説明した圧縮命令データ実行装置104で圧縮命令データを非圧縮の命令データに展開せずに実行するための具体的な方式を説明し、その上でジャンプ命令に対する新たな命令セットの定義および、ジャンプ命令の書換え処理、および書換え後の命令の処理内容について説明を行った。
ただし、ここで説明したジャンプ・イン命令およびジャンプ・アウト命令の構成に限定する趣旨ではなく、少なくともジャンプ命令を別の命令に書き換える事によって、非連続的な命令データである圧縮命令データにおけるジャンプ処理を適切に処理可能とする方法であれば、どのような構成であっても構わない。
例えば、本実施の形態ではジャンプ命令を書き換える命令としてジャンプ・イン命令およびジャンプ・アウト命令の二種類を用意している。
しかし、以上までの説明で分かるとおりこれらの2命令の処理内容は非常に似通っているため、一つの命令に統合して表現し、圧縮命令データ実行装置104によって処理する際に、ジャンプ命令が記述されている命令列が圧縮対象命令データであるか否かで処理を切り替える事で実現する事も可能である。
【0294】
さらに例えば、本実施の形態では書き換えられたジャンプ命令に対するジャンプ先命令は、その命令の初回実行時に検索する方法を取っているが、その検索を命令データ圧縮装置103において実施し、その結果をジャンプ命令が書き換えられる別の命令のパラメータに加える方法をとっても構わない。
この場合、本実施の形態におけるジャンプ・イン命令に対するパラメータはジャンプオフセット値を、
非圧縮命令列におけるジャンプオフセット値
圧縮命令列内におけるジャンプオフセット値
に分割して記述して検索結果を記述する必要があり、パラメータ部のサイズ拡大が必要になる場合がある。
【0295】
また本実施の形態におけるジャンプ・アウト命令に対応する命令は、ジャンプ先が圧縮命令対象命令列内に存在する場合には、ジャンプ先命令が記述されている圧縮対象命令列内に対するオフセット値(圧縮対象命令列内オフセット値)が必要になると共に、ジャンプ命令が記述されている圧縮大正命令列とジャンプ先命令が記述されている圧縮対象命令列の間をつなぐ圧縮対象命令列の命令列長(圧縮対象命令列間オフセット値)もパラメータとして必要となる。
この二種類のパラメータは、ジャンプ命令が記述されている圧縮対象命令列が同じだとしても、それが適用される命令データの内容や位置によって異なる値を持つため、通常はジャンプ命令を書き換える別の命令のパラメータとして入れる事は通常、圧縮率低下を招く。
そのため、ジャンプ命令が記述されている圧縮対象命令列が置き換えられるメタ命令のパラメータとしてその値を記述する必要が発生する。
例えば、メタ命令のパラメータとして内部に存在するジャンプ・アウト命令の個数と、ジャンプ・アウト命令の出現順にそのジャンプ・アウト命令に対する圧縮対象命令列内オフセット値と圧縮対象命令列間オフセット値をパラメータとして持つようにメタ命令の定義を行う必要がある。
一方で、ジャンプ・アウト命令に関しては特にパラメータは必要がなくなる。
【0296】
以上、本実施の形態では、
命令データ圧縮手段においてメタ命令に置き換えられた命令もしくは命令列内の命令にジャンプ命令が存在し、そのジャンプ先がメタ命令辞書データに登録されている命令もしくは命令列の範囲を超過してジャンプし、かつそのジャンプ先の命令がメタ命令に登録されている命令もしくは命令列内の命令ではない場合に、そのジャンプ命令をメタ命令外ジャンプ命令に置き換えるメタ命令外ジャンプ変換手段を備えることを説明した。
【0297】
また、本実施の形態では、
命令データ圧縮手段において、ジャンプ命令に対し、そのジャンプ命令とそのジャンプ先の命令の間に少なくとも一つ以上のメタ命令に置き換えられる命令列が存在する場合、ジャンプ命令のパラメータとなるジャンプオフセット値を書き換える事を説明した。
つまり、メタ命令に書き換えられた箇所の長さが短くなるため、ジャンプオフセット値を書き換えないと正しいジャンプ先にジャンプできない事を解消できる。
【0298】
また、本実施の形態では、
命令データ圧縮手段においてメタ命令に置き換えられた命令もしくは命令内の命令にジャンプ命令が存在し、そのジャンプ先がメタ命令辞書データに登録されている命令もしくは命令列の範囲を超過してジャンプし、かつそのジャンプ先の命令がメタ命令に登録されている場合に、そのジャン命令をメタ命令間ジャンプ命令に置き換えるメタ命令間ジャンプ変換手段を備える事を説明した。
【0299】
また、本実施の形態では、
命令データ圧縮手段においてメタ命令に置き換えられなかった命令もしくは命令列内の命令がジャンプ命令であり、そのジャンプ先がメタ命令辞書データに登録されている命令もしくは命令列内の特定命令である場合、そのジャンプ命令をメタ命令内ジャンプ命令に置き換えるメタ命令内ジャンプ変換手段を備える事を説明した。
【0300】
最後に、実施の形態1〜6に示した情報処理端末装置100のハードウェア構成例について説明する。
図49は、実施の形態1〜6に示す情報処理端末装置100のハードウェア資源の一例を示す図である。
なお、図49の構成は、あくまでも情報処理端末装置100のハードウェア構成の一例を示すものであり、情報処理端末装置100のハードウェア構成は図49に記載の構成に限らず、他の構成であってもよい。
また、ここでは、1つの情報処理端末装置100に、中央制御装置101〜命令データ格納装置106の機能が含まれている例を前提にしているが、中央制御装置101〜命令データ格納装置106の各々が複数の情報処理端末装置により実現される場合は、図49は、少なくとも命令データ圧縮装置103及び圧縮命令データ実行装置104の各々のハードウェア構成例を意味している。
【0301】
図49において、情報処理端末装置100は、プログラムを実行するCPU911(Central Processing Unit、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう)を備えている。
CPU911は、バス912を介して、例えば、ROM(Read Only Memory)913、RAM(Random Access Memory)914、通信ボード915、表示装置901、キーボード902、マウス903、磁気ディスク装置920と接続され、これらのハードウェアデバイスを制御する。
更に、CPU911は、FDD904(Flexible Disk Drive)、コンパクトディスク装置905(CDD)、プリンタ装置906、スキャナ装置907と接続していてもよい。また、磁気ディスク装置920の代わりに、SSD(Solid State Drive)、光ディスク装置、メモリカード(登録商標)読み書き装置などの記憶装置でもよい。
RAM914は、揮発性メモリの一例である。ROM913、FDD904、CDD905、磁気ディスク装置920の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部の一例である。
実施の形態1〜6で説明した「ソースコード格納装置105」「命令データ格納装置106」、「命令圧縮時情報記憶部1037」「命令実行時情報記憶部1042」は、RAM914、磁気ディスク装置920等により実現される。
通信ボード915、キーボード902、マウス903、スキャナ装置907、FDD904などは、入力装置の一例である。
また、通信ボード915、表示装置901、プリンタ装置906などは、出力装置の一例である。
【0302】
通信ボード915は、例えば、LAN(ローカルエリアネットワーク)、インターネット、WAN(ワイドエリアネットワーク)、SAN(ストレージエリアネットワーク)などに接続されている。
【0303】
磁気ディスク装置920には、オペレーティングシステム921(OS)、ウィンドウシステム922、プログラム群923、ファイル群924が記憶されている。
プログラム群923のプログラムは、CPU911がオペレーティングシステム921、ウィンドウシステム922を利用しながら実行する。
【0304】
また、RAM914には、CPU911に実行させるオペレーティングシステム921のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。
また、RAM914には、CPU911による処理に必要な各種データが格納される。
【0305】
また、ROM913には、BIOS(Basic Input Output System)プログラムが格納され、磁気ディスク装置920にはブートプログラムが格納されている。
情報処理端末装置100の起動時には、ROM913のBIOSプログラム及び磁気ディスク装置920のブートプログラムが実行され、BIOSプログラム及びブートプログラムによりオペレーティングシステム921が起動される。
【0306】
上記プログラム群923には、実施の形態1〜6の説明において「〜部」(「命令圧縮時情報記憶部1037」及び「命令実行時情報記憶部1042」以外、以下同様)、「〜手段」として説明している機能を実行するプログラムが記憶されている。プログラムは、CPU911により読み出され実行される。
【0307】
ファイル群924には、実施の形態1〜6の説明において、「〜の判断」、「〜の計算」、「〜の導出」、「〜の算出」、「〜の比較」、「〜の評価」、「〜の更新」、「〜の設定」、「〜のセット」、「〜の登録」、「〜の選択」、「〜の検索」等として説明している処理の結果を示す情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。
「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。
ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してCPU911によりメインメモリやキャッシュメモリに読み出される。
そして、読み出された情報やデータや信号値や変数値やパラメータは、抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示などのCPUの動作に用いられる。
抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示のCPUの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリ、レジスタ、キャッシュメモリ、バッファメモリ等に一時的に記憶される。
また、実施の形態1〜6で説明しているフローチャートの矢印の部分は主としてデータや信号の入出力を示す。
データや信号値は、RAM914のメモリ、FDD904のフレキシブルディスク、CDD905のコンパクトディスク、磁気ディスク装置920の磁気ディスク、その他光ディスク、ミニディスク、DVD等の記録媒体に記録される。
また、データや信号は、バス912や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【0308】
また、実施の形態1〜6の説明において「〜部」、「〜手段」として説明しているものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。
すなわち、実施の形態1〜6で説明したフローチャートに示すステップ、手順、処理により、本発明に係る情報処理端末装置100(命令データ圧縮装置103、圧縮命令データ実行装置104)を方法発明として把握することができる。
また、「〜部」、「〜手段」として説明しているものは、ROM913に記憶されたファームウェアで実現されていても構わない。
或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。
ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、DVD等の記録媒体に記憶される。
プログラムはCPU911により読み出され、CPU911により実行される。
すなわち、プログラムは、実施の形態1〜6の「〜部」、「〜手段」としてコンピュータを機能させるものである。あるいは、実施の形態1〜6の「〜部」、「〜手段」の手順や方法をコンピュータに実行させるものである。
【0309】
このように、実施の形態1〜6に示す情報処理端末装置100は、処理装置たるCPU、記憶装置たるメモリ、磁気ディスク等、入力装置たるキーボード、マウス、通信ボード等、出力装置たる表示装置、通信ボード等を備えるコンピュータである。
そして、上記したように「〜部」、「〜手段」として示された機能をこれら処理装置、記憶装置、入力装置、出力装置を用いて実現するものである。
【符号の説明】
【0310】
100 情報処理端末装置、101 中央制御装置、102 命令データ生成装置、103 命令データ圧縮装置、104 圧縮命令データ実行装置、105 ソースコード格納装置、106 命令データ格納装置、1031 命令データ格納装置アクセス部、1032 命令解釈・圧縮部、1033 同一命令列出現回数カウント部、1034 圧縮対象命令テーブル生成部、1035 命令データ圧縮変換部、1036 メタ命令辞書データ生成部、1037 命令圧縮時情報記憶部、1041 命令データ格納装置アクセス部、1042 命令実行時情報記憶部、1043 処理対象命令位置記憶部、1044 処理対象命令位置退避部、1045 メタ命令辞書データ保持部、1046 命令列解釈・実行部、1047 メタ命令解釈・実行部。
【特許請求の範囲】
【請求項1】
複数の命令列が含まれる機械語によるプログラムであって、命令列ごとにデータ長が異なるプログラムを入力するプログラム入力部と、
前記プログラム入力部により入力されたプログラムの各命令列を解析し、所定の条件を満たす命令列を、当該命令列よりもデータ量が少ないメタ命令に置き換える命令置き換え部と、
前記メタ命令と対応付けて、前記メタ命令に置き換えられた命令列が示されるメタ命令辞書データを生成するメタ命令辞書データ生成部と、
前記命令書き換え部により命令列がメタ命令に置き換えられたプログラムと、前記メタ命令辞書データ生成部により生成されたメタ命令辞書データとを対応付けて出力するプログラム出力部とを有することを特徴とするプログラム圧縮装置。
【請求項2】
前記プログラム入力部は、
命令が示される命令コードと前記命令コードの命令の対象となる0バイト以上のパラメータ値とが組み合わされている命令列が複数含まれるプログラムを入力し、
前記命令置き換え部は、
前記プログラムにおいて命令コードとパラメータ値との組み合わせが共通する2以上の命令列を抽出し、抽出した2以上の命令列のそれぞれを、共通するメタ命令に置き換えることを特徴とする請求項1に記載のプログラム圧縮装置。
【請求項3】
前記命令置き換え部は、
前記プログラムにおいて命令コードとパラメータ値との組み合わせが共通する命令列の個数を計数し、計数した個数と当該命令列のデータ量から前記プログラムでの当該命令列のデータ総量を算出し、当該命令列に対するメタ命令のデータ量とメタ命令辞書データのデータ量との合計を算出し、メタ命令のデータ量とメタ命令辞書データのデータ量の合計が命令列のデータ総量よりも少ない場合に、命令列をメタ命令で置き換えることを特徴とする請求項2に記載のプログラム圧縮装置。
【請求項4】
前記プログラム入力部は、
前記命令コードとして、命令を識別するための命令識別番号が記述されている命令列が含まれるプログラムを入力し、
前記命令置き換え部は、
前記プログラムに含まれている命令列を、前記命令識別番号の番号体系においてメタ命令用に割り当てられている命令識別番号に置き換えることを特徴とする請求項2又は3に記載のプログラム圧縮装置。
【請求項5】
前記プログラム入力部は、
前記命令コードとして、命令を識別するための命令識別番号が記述されている命令列が含まれるプログラムを入力し、
前記命令置き換え部は、
前記プログラムに含まれている命令列を、前記プログラムに含まれている複数の命令列において使用されていない未使用の命令識別番号に置き換えることを特徴とする請求項2〜4のいずれかに記載のプログラム圧縮装置。
【請求項6】
前記プログラム入力部は、
前記複数の命令列の少なくとも一部として、相互に命令コードの命令内容は共通するがパラメータ値のデータ型が異なっているため命令コードが異なっている共通命令異データ型命令列が2以上含まれるプログラムを入力し、更に、共通命令異データ型命令列ごとにパラメータ値のデータ型が示されるデータ型情報を入力し、
前記命令置き換え部は、
前記プログラムにおいて命令コードの命令内容とパラメータ値との組み合わせが共通する2以上の共通命令異データ型命令列を抽出し、抽出した2以上の共通命令異データ型命令列のそれぞれを、共通するメタ命令に置き換え、
前記メタ命令辞書データ生成部は、
前記メタ命令と対応付けて、前記メタ命令に置き換えられた共通命令異データ型命令列が示されるメタ命令辞書データを生成し、
前記プログラム出力部は、
前記命令書き換え部により共通命令異データ型命令列がメタ命令に置き換えられたプログラムと、前記メタ命令辞書データ生成部により生成されたメタ命令辞書データと、前記データ型情報とを対応付けて出力することを特徴とする請求項2〜5のいずれかに記載のプログラム圧縮装置。
【請求項7】
前記プログラム入力部は、
前記複数の命令列の一部として、プログラムの実行時にパラメータ値が格納されるメモリアドレスを管理するためのアドレス管理命令コードとメモリアドレスがオフセット表現で指定されるアドレス指定パラメータ値とが組み合わされているアドレス管理命令列が含まれ、データ型にかかわらず全てのパラメータ値に同一のメモリサイズが割り当てられるプログラムを入力し、
前記命令置き換え部は、
前記プログラムにおいてアドレス管理命令コードとアドレス指定パラメータ値との組み合わせが共通する2以上のアドレス管理命令列を抽出し、抽出した2以上アドレス管理命令列のそれぞれを、共通するメタ命令に置き換え、
前記メタ命令辞書データ生成部は、
前記メタ命令と対応付けて、前記メタ命令に置き換えられたアドレス管理命令列が示されるメタ命令辞書データを生成し、
前記プログラム出力部は、
前記命令書き換え部によりアドレス管理命令列がメタ命令に置き換えられたプログラムと、前記メタ命令辞書データ生成部により生成されたメタ命令辞書データとを対応付けて出力することを特徴とする請求項2〜6のいずれかに記載のプログラム圧縮装置。
【請求項8】
前記プログラム入力部は、
前記複数の命令列の一部として、プログラムの実行時にパラメータ値が格納されるメモリアドレスを管理するためのアドレス管理命令コードとメモリアドレスがオフセット表現で指定されるアドレス指定パラメータ値とが組み合わされているアドレス管理命令列が含まれ、データ型にかかわらず全てのパラメータ値に同一のメモリサイズが割り当てられるプログラムを入力し、
前記命令置き換え部は、
特定の命令列群に含まれるアドレス管理命令のアドレス指定パラメータ値を、他の命令列群に含まれるアドレス管理命令のアドレス指定パラメータ値と一致するように書換え、前記特定の命令列群における命令列の並びと前記他の命令列群における命令列の並びを共通にし、前記特定の命令列群と前記他の命令列群を共通のメタ命令で置き換え、
前記メタ命令辞書データ生成部は、
前記メタ命令と対応付けて、前記メタ命令に置き換えられた命令列群が示されるメタ命令辞書データを生成し、
前記プログラム出力部は、
前記命令書き換え部により命令列群がメタ命令に置き換えられたプログラムと、前記メタ命令辞書データ生成部により生成されたメタ命令辞書データとを対応付けて出力することを特徴とする請求項2〜7のいずれかに記載のプログラム圧縮装置。
【請求項9】
前記命令置き換え部は、
2以上のプログラムに存在する共通の命令列に対しては共通のメタ命令を割り当てて、各プログラムの命令列をメタ命令に置き換え、
前記メタ命令辞書データ生成部は、
前記命令置き換え部のメタ命令への置き換え結果に基づき、2以上のプログラムに共通して用いられる1つのメタ命令辞書データを生成することを特徴とする請求項1〜8のいずれかに記載のプログラム圧縮装置。
【請求項10】
前記命令置き換え部は、
前記プログラムを複数個の部分集合に分けるとともに、部分集合単位で命令列をメタ命令に置き換え、
前記メタ命令辞書データ生成部は、
部分集合ごとにメタ命令辞書データを生成し、対応するメタ命令辞書データの識別子を各部分集合に付加することを特徴とする請求項1〜9のいずれかに記載のプログラム圧縮装置。
【請求項11】
前記命令置き換え部は、
1つのプログラム内の記述内容が相互に異なっている2以上の命令列にも同じメタ命令を割り当てて命令列をメタ命令に置き換え、
前記メタ命令辞書データ生成部は、
同じメタ命令に対して異なる命令列が対応付けられている2以上のメタ命令辞書データを生成し、対応するメタ命令辞書データの識別子を各命令列に付加することを特徴とする請求項1〜10のいずれかに記載のプログラム圧縮装置。
【請求項12】
前記プログラム入力部は、
前記複数の命令列の一部として、所定のジャンプ先命令列へのジャンプ命令が記述されるジャンプ命令列が含まれるプログラムを入力し、
前記命令置き換え部は、
命令列ごとにメタ命令に置き換えるか否かを判断しメタ命令に置き換える命令列を指定した後であって置き換え対象の命令列をメタ命令に置き換える前に、メタ命令に置き換えられることになる置き換え命令列群とジャンプ命令列とジャンプ先命令列との位置関係を解析し、置き換え命令列群とジャンプ命令列とジャンプ先命令列との位置関係が所定の条件に合致する場合に、ジャンプ命令列に対する補正処理を行い、ジャンプ命令列に対する補正処理の後に、置き換え対象の命令列をメタ命令に置き換えることを特徴とする請求項1〜11のいずれかに記載のプログラム圧縮装置。
【請求項13】
前記命令置き換え部は、
解析の結果、
ジャンプ命令列が置き換え命令列群に含まれ、ジャンプ先命令列が同じ置き換え命令列群に含まれていない場合、
ジャンプ命令列が置き換え命令列群に含まれず、ジャンプ先命令列が置き換え命令列群に含まれる場合、
ジャンプ命令列とジャンプ先命令列がともに置き換え命令列群に含まれず、ジャンプ命令列とジャンプ先命令列との間に1つ以上の置き換え命令列群が存在する場合、
ジャンプ命令列が置き換え命令列群に含まれ、ジャンプ先命令列がジャンプ命令列の置き換え命令列群とは別の置き換え命令列群に含まれる場合の少なくともいずれかにおいて、ジャンプ命令列に対する補正処理を行うことを特徴とする請求項12に記載のプログラム圧縮装置。
【請求項14】
前記プログラム入力部は、
ジャンプ先命令列までのオフセット値がジャンプオフセット値として記述されているジャンプ命令列が含まれるプログラムを入力し、
前記命令置き換え部は、
ジャンプ命令列が置き換え命令列群に含まれ、ジャンプ先命令列が同じ置き換え命令列群に含まれていない場合に、
ジャンプ命令列が置き換え命令列群に含まれ、ジャンプ先命令列が同じ置き換え命令列群に含まれず、前記置き換え命令列群のメタ命令への置き換えにより前記ジャンプ命令列のジャンプオフセット値が前記ジャンプ先命令列を指し示さない状態になっていることを前記プログラムの実行装置に対して通知するジャンプアウト通知を前記ジャンプ命令列に記述することを特徴とする請求項13に記載のプログラム圧縮装置。
【請求項15】
前記プログラム入力部は、
ジャンプ先命令列までのオフセット値がジャンプオフセット値として記述されているジャンプ命令列が含まれるプログラムを入力し、
前記命令置き換え部は、
ジャンプ命令列が置き換え命令列群に含まれず、ジャンプ先命令列が置き換え命令列群に含まれる場合に、
ジャンプ命令列が置き換え命令列群に含まれず、ジャンプ先命令列が置き換え命令列群に含まれ、前記置き換え命令列群のメタ命令への置き換えにより前記ジャンプ命令列のジャンプオフセット値が前記ジャンプ先命令列を指し示さない状態になっていることを前記プログラムの実行装置に対して通知するジャンプイン通知を前記ジャンプ命令列に記述することを特徴とする請求項13又は14に記載のプログラム圧縮装置。
【請求項16】
前記プログラム入力部は、
ジャンプ先命令列までのオフセット値がジャンプオフセット値として記述されているジャンプ命令列が含まれるプログラムを入力し、
前記命令置き換え部は、
ジャンプ命令列とジャンプ先命令列がともに置き換え命令列群に含まれず、ジャンプ命令列とジャンプ先命令列との間に1つ以上の置き換え命令列群が存在する場合に、
前記ジャンプ命令列と前記ジャンプ先命令列との間に存在する置き換え命令列群のデータ総量と、当該置き換え命令列群を置き換えることになるメタ命令のデータ総量とに基づき、前記ジャンプ命令列のジャンプオフセット値を変更することを特徴とする請求項13〜15のいずれかに記載のプログラム圧縮装置。
【請求項17】
命令列が、当該命令列よりもデータ量が少ないメタ命令に置き換えられている機械語によるプログラムを入力するプログラム入力部と、
前記メタ命令と対応付けて、前記メタ命令に置き換えられた命令列が示されるメタ命令辞書データを入力するメタ命令辞書データ入力部と、
前記プログラムの実行時に、指定する位置を移動させながら実行対象とすべき前記プログラム内の位置を指定するプログラム位置指定部と、
前記プログラムの実行時に、所定の場合に、前記プログラム内の所定の位置の情報を一時的に保存するプログラム位置退避部と、
前記プログラム位置指定部により指定されている指定位置のプログラム内容がメタ命令であるかどうかを判断し、前記指定位置のプログラム内容がメタ命令でない命令列である場合に前記指定位置の命令列を実行し、前記指定位置のプログラム内容がメタ命令である場合に、当該メタ命令の直後の位置の情報を前記プログラム位置退避部に保存させ、前記メタ命令辞書データ内の当該メタ命令に対応付けられている命令列を実行するプログラム実行部とを有することを特徴とするプログラム実行装置。
【請求項18】
前記プログラム位置退避部は、
前記プログラム実行部が前記メタ命令辞書データ内のメタ命令に対応付けられている命令列を実行している間は前記メタ命令の直後の位置の情報を保存し、前記プログラム実行部により前記メタ命令辞書データ内のメタ命令に対応付けられている命令列の実行が完了した際に、保存している位置の情報を削除することを特徴とする請求項17に記載のプログラム実行装置。
【請求項19】
前記プログラム位置退避部は、
前記プログラム実行部により前記メタ命令辞書データ内のメタ命令に対応付けられている命令列の実行が完了した際に、保存している位置の情報を前記プログラム位置指定部に通知し、
前記プログラム位置指定部は、
前記プログラム位置退避部により通知された位置を次に前記プログラム実行部が実行対象とすべきプログラム内の位置として指定することを特徴とする請求項17又は18に記載のプログラム実行装置。
【請求項20】
前記プログラム実行装置は、
前記プログラム位置退避部に初期値以外の情報が保存されているか否か、前記プログラムに含まれるメタ命令の連続数分前記メタ命令辞書データに示される命令列が繰り返し実行されたか否かの少なくともいずれかにより、メタ命令に置き換えられた命令列の実行が完了したか否かを判断可能であることを特徴とする請求項17〜19のいずれかに記載のプログラム実行装置。
【請求項21】
前記プログラム入力部は、
命令コードの命令内容と命令コードが対象とするパラメータ値が各々で共通するがパラメータ値のデータ型が各々で異なっているため命令コードが異なっている2以上の共通命令異データ型命令列がメタ命令に置き換えられているプログラムを入力するとともに、共通命令異データ型命令列ごとにパラメータ値のデータ型が示されるデータ型情報を入力し、
前記メタ命令辞書データ入力部は、
前記メタ命令と対応付けて、前記メタ命令に置き換えられた共通命令異データ型命令列が示されるメタ命令辞書データを入力し、
前記プログラム実行部は、
前記プログラム位置指定部により指定されている指定位置のプログラム内容が共通命令異データ型命令列を置き換えたメタ命令である場合に、当該メタ命令で置き換えられている共通命令異データ型命令列のパラメータ値のデータ型を前記データ型情報を参照して判別し、前記メタ命令辞書データ内の当該メタ命令に対応付けられている共通命令異データ型命令列を、判別したパラメータ値のデータ型に対応させて実行することを特徴とする請求項17〜20のいずれかに記載のプログラム実行装置。
【請求項22】
前記プログラム入力部は、
複数個の部分集合に分けられ、部分集合ごとに対応するメタ命令辞書データの識別子が示されているプログラムを入力し、
前記メタ命令辞書データ入力部は、
部分集合ごとに生成された複数個のメタ命令辞書データを入力し、
前記プログラム実行部は、
前記プログラムの実行の際に、部分集合ごとに、部分集合に示されている識別子に従い、対応するメタ命令辞書データを参照することを特徴とする請求項17〜21のいずれかに記載のプログラム実行装置。
【請求項23】
前記プログラム入力部は、
2以上の命令列が含まれる命令列群がメタ命令に置き換えられており、メタ命令に置き換えられた置き換え命令列群に、所定のジャンプ先命令列へのジャンプ命令が記述されているジャンプ命令列が含まれ、ジャンプ命令列にはジャンプ先命令列までのオフセット値がジャンプオフセット値として記述されているプログラムを入力し、
前記プログラム実行部は、
前記ジャンプ命令列の実行時に、前記ジャンプ命令列に所定のジャンプアウト通知が記述されているか否かを判断し、前記ジャンプ命令列に前記ジャンプアウト通知が記述されている場合に、前記ジャンプ命令列がメタ命令に置き換えられたことにより前記ジャンプオフセット値がジャンプ先命令列を指し示していないと判断し、前記ジャンプ命令列以降のプログラム内容を解析して、前記ジャンプ命令列のジャンプ先命令列を検索し、検索したジャンプ先命令列にジャンプして当該ジャンプ先命令列を実行することを特徴とする請求項17〜22のいずれかに記載のプログラム実行装置。
【請求項24】
前記プログラム実行部は、
前記ジャンプ命令列に前記ジャンプアウト通知が記述されている場合に、前記ジャンプ命令列のジャンプオフセット値と、前記ジャンプ命令列から前記置き換え命令列群の終端までの命令長と、前記置き換え命令列群のメタ命令以降の命令列の命令長とに基づく解析を行い、前記ジャンプ命令列のジャンプ先命令列を検索することを特徴とする請求項23に記載のプログラム実行装置。
【請求項25】
前記プログラム実行部は、
前記置き換え命令列群のメタ命令以降に他のメタ命令が存在する場合に、前記メタ命令辞書データを参照して、当該他のメタ命令に対応する命令列の命令長を導出することを特徴とする請求項24に記載のプログラム実行装置。
【請求項26】
前記プログラム入力部は、
2以上の命令列が含まれる命令列群がメタ命令に置き換えられており、所定のジャンプ先命令列へのジャンプ命令が記述されているジャンプ命令列がメタ命令外に含まれ、ジャンプ命令列にはジャンプ先命令列までのオフセット値がジャンプオフセット値として記述されており、前記ジャンプ命令列のジャンプ先命令列が前記メタ命令に置き換えられた置き換え命令列群に含まれているプログラムを入力し、
前記プログラム実行部は、
前記ジャンプ命令列の実行時に、前記ジャンプ命令列に所定のジャンプイン通知が記述されているか否かを判断し、前記ジャンプ命令列に前記ジャンプイン通知が記述されている場合に、前記ジャンプ命令列のジャンプ先命令列がメタ命令に置き換えられたことにより前記ジャンプオフセット値がジャンプ先命令列を指し示していないと判断し、前記ジャンプ命令列以降のプログラム内容を解析して、前記ジャンプ命令列のジャンプ先命令列を検索し、検索したジャンプ先命令列にジャンプして当該ジャンプ先命令列を実行することを特徴とする請求項17〜25のいずれかに記載のプログラム実行装置。
【請求項27】
前記プログラム実行部は、
前記ジャンプ命令列に前記ジャンプイン通知が記述されている場合に、前記ジャンプ命令列のジャンプオフセット値と、前記ジャンプ命令列以降の命令列の命令長とに基づく解析を行い、前記ジャンプ命令列のジャンプ先命令列を検索することを特徴とする請求項26に記載のプログラム実行装置。
【請求項28】
前記プログラム実行部は、
前記ジャンプ命令列以降にメタ命令が存在する場合に、前記メタ命令辞書データを参照して、当該メタ命令に対応する命令列の命令長を導出することを特徴とする請求項27に記載のプログラム実行装置。
【請求項29】
前記プログラム入力部は、
命令が示される命令コードと前記命令コードの命令の対象となるパラメータ値とが組み合わされている命令例が、メタ命令に置き換えられて又はメタ命令に置き換えられずに含まれるプログラムを入力し、
プログラム実行部は、
命令列の実行の際に、当該命令列のパラメータ値のデータ型を判定し、判定したパラメータ値のデータ型に対応させて当該命令列の命令コードの命令を実行することを特徴とする請求項17〜28のいずれかに記載のプログラム実行装置。
【請求項30】
複数の命令列が含まれる機械語によるプログラムであって、命令列ごとにデータ長が異なるプログラムを入力するプログラム入力処理と、
前記プログラム入力処理により入力されたプログラムの各命令列を解析し、所定の条件を満たす命令列を、当該命令列よりもデータ量が少ないメタ命令に置き換える命令置き換え処理と、
前記メタ命令と対応付けて、前記メタ命令に置き換えられた命令列が示されるメタ命令辞書データを生成するメタ命令辞書データ生成処理と、
前記命令書き換え処理により命令列がメタ命令に置き換えられたプログラムと、前記メタ命令辞書データ生成処理により生成されたメタ命令辞書データとを対応付けて出力するプログラム出力処理とをコンピュータに実行させることを特徴とするプログラム。
【請求項31】
命令列が、当該命令列よりもデータ量が少ないメタ命令に置き換えられている機械語によるプログラムを入力するプログラム入力処理と、
前記メタ命令と対応付けて、前記メタ命令に置き換えられた命令列が示されるメタ命令辞書データを入力するメタ命令辞書データ入力処理と、
前記プログラムの実行時に、指定する位置を移動させながら実行対象とすべき前記プログラム内の位置を指定するプログラム位置指定処理と、
前記プログラムの実行時に、所定の場合に、前記プログラム内の所定の位置の情報を一時的に保存するプログラム位置退避処理と、
前記プログラム位置指定処理により指定されている指定位置のプログラム内容がメタ命令であるかどうかを判断し、前記指定位置のプログラム内容がメタ命令でない命令列である場合に前記指定位置の命令列を実行し、前記指定位置のプログラム内容がメタ命令である場合に、当該メタ命令の直後の位置の情報を前記プログラム位置退避処理に保存させ、前記メタ命令辞書データ内の当該メタ命令に対応付けられている命令列を実行するプログラム実行処理とをコンピュータに実行させることを特徴とするプログラム。
【請求項1】
複数の命令列が含まれる機械語によるプログラムであって、命令列ごとにデータ長が異なるプログラムを入力するプログラム入力部と、
前記プログラム入力部により入力されたプログラムの各命令列を解析し、所定の条件を満たす命令列を、当該命令列よりもデータ量が少ないメタ命令に置き換える命令置き換え部と、
前記メタ命令と対応付けて、前記メタ命令に置き換えられた命令列が示されるメタ命令辞書データを生成するメタ命令辞書データ生成部と、
前記命令書き換え部により命令列がメタ命令に置き換えられたプログラムと、前記メタ命令辞書データ生成部により生成されたメタ命令辞書データとを対応付けて出力するプログラム出力部とを有することを特徴とするプログラム圧縮装置。
【請求項2】
前記プログラム入力部は、
命令が示される命令コードと前記命令コードの命令の対象となる0バイト以上のパラメータ値とが組み合わされている命令列が複数含まれるプログラムを入力し、
前記命令置き換え部は、
前記プログラムにおいて命令コードとパラメータ値との組み合わせが共通する2以上の命令列を抽出し、抽出した2以上の命令列のそれぞれを、共通するメタ命令に置き換えることを特徴とする請求項1に記載のプログラム圧縮装置。
【請求項3】
前記命令置き換え部は、
前記プログラムにおいて命令コードとパラメータ値との組み合わせが共通する命令列の個数を計数し、計数した個数と当該命令列のデータ量から前記プログラムでの当該命令列のデータ総量を算出し、当該命令列に対するメタ命令のデータ量とメタ命令辞書データのデータ量との合計を算出し、メタ命令のデータ量とメタ命令辞書データのデータ量の合計が命令列のデータ総量よりも少ない場合に、命令列をメタ命令で置き換えることを特徴とする請求項2に記載のプログラム圧縮装置。
【請求項4】
前記プログラム入力部は、
前記命令コードとして、命令を識別するための命令識別番号が記述されている命令列が含まれるプログラムを入力し、
前記命令置き換え部は、
前記プログラムに含まれている命令列を、前記命令識別番号の番号体系においてメタ命令用に割り当てられている命令識別番号に置き換えることを特徴とする請求項2又は3に記載のプログラム圧縮装置。
【請求項5】
前記プログラム入力部は、
前記命令コードとして、命令を識別するための命令識別番号が記述されている命令列が含まれるプログラムを入力し、
前記命令置き換え部は、
前記プログラムに含まれている命令列を、前記プログラムに含まれている複数の命令列において使用されていない未使用の命令識別番号に置き換えることを特徴とする請求項2〜4のいずれかに記載のプログラム圧縮装置。
【請求項6】
前記プログラム入力部は、
前記複数の命令列の少なくとも一部として、相互に命令コードの命令内容は共通するがパラメータ値のデータ型が異なっているため命令コードが異なっている共通命令異データ型命令列が2以上含まれるプログラムを入力し、更に、共通命令異データ型命令列ごとにパラメータ値のデータ型が示されるデータ型情報を入力し、
前記命令置き換え部は、
前記プログラムにおいて命令コードの命令内容とパラメータ値との組み合わせが共通する2以上の共通命令異データ型命令列を抽出し、抽出した2以上の共通命令異データ型命令列のそれぞれを、共通するメタ命令に置き換え、
前記メタ命令辞書データ生成部は、
前記メタ命令と対応付けて、前記メタ命令に置き換えられた共通命令異データ型命令列が示されるメタ命令辞書データを生成し、
前記プログラム出力部は、
前記命令書き換え部により共通命令異データ型命令列がメタ命令に置き換えられたプログラムと、前記メタ命令辞書データ生成部により生成されたメタ命令辞書データと、前記データ型情報とを対応付けて出力することを特徴とする請求項2〜5のいずれかに記載のプログラム圧縮装置。
【請求項7】
前記プログラム入力部は、
前記複数の命令列の一部として、プログラムの実行時にパラメータ値が格納されるメモリアドレスを管理するためのアドレス管理命令コードとメモリアドレスがオフセット表現で指定されるアドレス指定パラメータ値とが組み合わされているアドレス管理命令列が含まれ、データ型にかかわらず全てのパラメータ値に同一のメモリサイズが割り当てられるプログラムを入力し、
前記命令置き換え部は、
前記プログラムにおいてアドレス管理命令コードとアドレス指定パラメータ値との組み合わせが共通する2以上のアドレス管理命令列を抽出し、抽出した2以上アドレス管理命令列のそれぞれを、共通するメタ命令に置き換え、
前記メタ命令辞書データ生成部は、
前記メタ命令と対応付けて、前記メタ命令に置き換えられたアドレス管理命令列が示されるメタ命令辞書データを生成し、
前記プログラム出力部は、
前記命令書き換え部によりアドレス管理命令列がメタ命令に置き換えられたプログラムと、前記メタ命令辞書データ生成部により生成されたメタ命令辞書データとを対応付けて出力することを特徴とする請求項2〜6のいずれかに記載のプログラム圧縮装置。
【請求項8】
前記プログラム入力部は、
前記複数の命令列の一部として、プログラムの実行時にパラメータ値が格納されるメモリアドレスを管理するためのアドレス管理命令コードとメモリアドレスがオフセット表現で指定されるアドレス指定パラメータ値とが組み合わされているアドレス管理命令列が含まれ、データ型にかかわらず全てのパラメータ値に同一のメモリサイズが割り当てられるプログラムを入力し、
前記命令置き換え部は、
特定の命令列群に含まれるアドレス管理命令のアドレス指定パラメータ値を、他の命令列群に含まれるアドレス管理命令のアドレス指定パラメータ値と一致するように書換え、前記特定の命令列群における命令列の並びと前記他の命令列群における命令列の並びを共通にし、前記特定の命令列群と前記他の命令列群を共通のメタ命令で置き換え、
前記メタ命令辞書データ生成部は、
前記メタ命令と対応付けて、前記メタ命令に置き換えられた命令列群が示されるメタ命令辞書データを生成し、
前記プログラム出力部は、
前記命令書き換え部により命令列群がメタ命令に置き換えられたプログラムと、前記メタ命令辞書データ生成部により生成されたメタ命令辞書データとを対応付けて出力することを特徴とする請求項2〜7のいずれかに記載のプログラム圧縮装置。
【請求項9】
前記命令置き換え部は、
2以上のプログラムに存在する共通の命令列に対しては共通のメタ命令を割り当てて、各プログラムの命令列をメタ命令に置き換え、
前記メタ命令辞書データ生成部は、
前記命令置き換え部のメタ命令への置き換え結果に基づき、2以上のプログラムに共通して用いられる1つのメタ命令辞書データを生成することを特徴とする請求項1〜8のいずれかに記載のプログラム圧縮装置。
【請求項10】
前記命令置き換え部は、
前記プログラムを複数個の部分集合に分けるとともに、部分集合単位で命令列をメタ命令に置き換え、
前記メタ命令辞書データ生成部は、
部分集合ごとにメタ命令辞書データを生成し、対応するメタ命令辞書データの識別子を各部分集合に付加することを特徴とする請求項1〜9のいずれかに記載のプログラム圧縮装置。
【請求項11】
前記命令置き換え部は、
1つのプログラム内の記述内容が相互に異なっている2以上の命令列にも同じメタ命令を割り当てて命令列をメタ命令に置き換え、
前記メタ命令辞書データ生成部は、
同じメタ命令に対して異なる命令列が対応付けられている2以上のメタ命令辞書データを生成し、対応するメタ命令辞書データの識別子を各命令列に付加することを特徴とする請求項1〜10のいずれかに記載のプログラム圧縮装置。
【請求項12】
前記プログラム入力部は、
前記複数の命令列の一部として、所定のジャンプ先命令列へのジャンプ命令が記述されるジャンプ命令列が含まれるプログラムを入力し、
前記命令置き換え部は、
命令列ごとにメタ命令に置き換えるか否かを判断しメタ命令に置き換える命令列を指定した後であって置き換え対象の命令列をメタ命令に置き換える前に、メタ命令に置き換えられることになる置き換え命令列群とジャンプ命令列とジャンプ先命令列との位置関係を解析し、置き換え命令列群とジャンプ命令列とジャンプ先命令列との位置関係が所定の条件に合致する場合に、ジャンプ命令列に対する補正処理を行い、ジャンプ命令列に対する補正処理の後に、置き換え対象の命令列をメタ命令に置き換えることを特徴とする請求項1〜11のいずれかに記載のプログラム圧縮装置。
【請求項13】
前記命令置き換え部は、
解析の結果、
ジャンプ命令列が置き換え命令列群に含まれ、ジャンプ先命令列が同じ置き換え命令列群に含まれていない場合、
ジャンプ命令列が置き換え命令列群に含まれず、ジャンプ先命令列が置き換え命令列群に含まれる場合、
ジャンプ命令列とジャンプ先命令列がともに置き換え命令列群に含まれず、ジャンプ命令列とジャンプ先命令列との間に1つ以上の置き換え命令列群が存在する場合、
ジャンプ命令列が置き換え命令列群に含まれ、ジャンプ先命令列がジャンプ命令列の置き換え命令列群とは別の置き換え命令列群に含まれる場合の少なくともいずれかにおいて、ジャンプ命令列に対する補正処理を行うことを特徴とする請求項12に記載のプログラム圧縮装置。
【請求項14】
前記プログラム入力部は、
ジャンプ先命令列までのオフセット値がジャンプオフセット値として記述されているジャンプ命令列が含まれるプログラムを入力し、
前記命令置き換え部は、
ジャンプ命令列が置き換え命令列群に含まれ、ジャンプ先命令列が同じ置き換え命令列群に含まれていない場合に、
ジャンプ命令列が置き換え命令列群に含まれ、ジャンプ先命令列が同じ置き換え命令列群に含まれず、前記置き換え命令列群のメタ命令への置き換えにより前記ジャンプ命令列のジャンプオフセット値が前記ジャンプ先命令列を指し示さない状態になっていることを前記プログラムの実行装置に対して通知するジャンプアウト通知を前記ジャンプ命令列に記述することを特徴とする請求項13に記載のプログラム圧縮装置。
【請求項15】
前記プログラム入力部は、
ジャンプ先命令列までのオフセット値がジャンプオフセット値として記述されているジャンプ命令列が含まれるプログラムを入力し、
前記命令置き換え部は、
ジャンプ命令列が置き換え命令列群に含まれず、ジャンプ先命令列が置き換え命令列群に含まれる場合に、
ジャンプ命令列が置き換え命令列群に含まれず、ジャンプ先命令列が置き換え命令列群に含まれ、前記置き換え命令列群のメタ命令への置き換えにより前記ジャンプ命令列のジャンプオフセット値が前記ジャンプ先命令列を指し示さない状態になっていることを前記プログラムの実行装置に対して通知するジャンプイン通知を前記ジャンプ命令列に記述することを特徴とする請求項13又は14に記載のプログラム圧縮装置。
【請求項16】
前記プログラム入力部は、
ジャンプ先命令列までのオフセット値がジャンプオフセット値として記述されているジャンプ命令列が含まれるプログラムを入力し、
前記命令置き換え部は、
ジャンプ命令列とジャンプ先命令列がともに置き換え命令列群に含まれず、ジャンプ命令列とジャンプ先命令列との間に1つ以上の置き換え命令列群が存在する場合に、
前記ジャンプ命令列と前記ジャンプ先命令列との間に存在する置き換え命令列群のデータ総量と、当該置き換え命令列群を置き換えることになるメタ命令のデータ総量とに基づき、前記ジャンプ命令列のジャンプオフセット値を変更することを特徴とする請求項13〜15のいずれかに記載のプログラム圧縮装置。
【請求項17】
命令列が、当該命令列よりもデータ量が少ないメタ命令に置き換えられている機械語によるプログラムを入力するプログラム入力部と、
前記メタ命令と対応付けて、前記メタ命令に置き換えられた命令列が示されるメタ命令辞書データを入力するメタ命令辞書データ入力部と、
前記プログラムの実行時に、指定する位置を移動させながら実行対象とすべき前記プログラム内の位置を指定するプログラム位置指定部と、
前記プログラムの実行時に、所定の場合に、前記プログラム内の所定の位置の情報を一時的に保存するプログラム位置退避部と、
前記プログラム位置指定部により指定されている指定位置のプログラム内容がメタ命令であるかどうかを判断し、前記指定位置のプログラム内容がメタ命令でない命令列である場合に前記指定位置の命令列を実行し、前記指定位置のプログラム内容がメタ命令である場合に、当該メタ命令の直後の位置の情報を前記プログラム位置退避部に保存させ、前記メタ命令辞書データ内の当該メタ命令に対応付けられている命令列を実行するプログラム実行部とを有することを特徴とするプログラム実行装置。
【請求項18】
前記プログラム位置退避部は、
前記プログラム実行部が前記メタ命令辞書データ内のメタ命令に対応付けられている命令列を実行している間は前記メタ命令の直後の位置の情報を保存し、前記プログラム実行部により前記メタ命令辞書データ内のメタ命令に対応付けられている命令列の実行が完了した際に、保存している位置の情報を削除することを特徴とする請求項17に記載のプログラム実行装置。
【請求項19】
前記プログラム位置退避部は、
前記プログラム実行部により前記メタ命令辞書データ内のメタ命令に対応付けられている命令列の実行が完了した際に、保存している位置の情報を前記プログラム位置指定部に通知し、
前記プログラム位置指定部は、
前記プログラム位置退避部により通知された位置を次に前記プログラム実行部が実行対象とすべきプログラム内の位置として指定することを特徴とする請求項17又は18に記載のプログラム実行装置。
【請求項20】
前記プログラム実行装置は、
前記プログラム位置退避部に初期値以外の情報が保存されているか否か、前記プログラムに含まれるメタ命令の連続数分前記メタ命令辞書データに示される命令列が繰り返し実行されたか否かの少なくともいずれかにより、メタ命令に置き換えられた命令列の実行が完了したか否かを判断可能であることを特徴とする請求項17〜19のいずれかに記載のプログラム実行装置。
【請求項21】
前記プログラム入力部は、
命令コードの命令内容と命令コードが対象とするパラメータ値が各々で共通するがパラメータ値のデータ型が各々で異なっているため命令コードが異なっている2以上の共通命令異データ型命令列がメタ命令に置き換えられているプログラムを入力するとともに、共通命令異データ型命令列ごとにパラメータ値のデータ型が示されるデータ型情報を入力し、
前記メタ命令辞書データ入力部は、
前記メタ命令と対応付けて、前記メタ命令に置き換えられた共通命令異データ型命令列が示されるメタ命令辞書データを入力し、
前記プログラム実行部は、
前記プログラム位置指定部により指定されている指定位置のプログラム内容が共通命令異データ型命令列を置き換えたメタ命令である場合に、当該メタ命令で置き換えられている共通命令異データ型命令列のパラメータ値のデータ型を前記データ型情報を参照して判別し、前記メタ命令辞書データ内の当該メタ命令に対応付けられている共通命令異データ型命令列を、判別したパラメータ値のデータ型に対応させて実行することを特徴とする請求項17〜20のいずれかに記載のプログラム実行装置。
【請求項22】
前記プログラム入力部は、
複数個の部分集合に分けられ、部分集合ごとに対応するメタ命令辞書データの識別子が示されているプログラムを入力し、
前記メタ命令辞書データ入力部は、
部分集合ごとに生成された複数個のメタ命令辞書データを入力し、
前記プログラム実行部は、
前記プログラムの実行の際に、部分集合ごとに、部分集合に示されている識別子に従い、対応するメタ命令辞書データを参照することを特徴とする請求項17〜21のいずれかに記載のプログラム実行装置。
【請求項23】
前記プログラム入力部は、
2以上の命令列が含まれる命令列群がメタ命令に置き換えられており、メタ命令に置き換えられた置き換え命令列群に、所定のジャンプ先命令列へのジャンプ命令が記述されているジャンプ命令列が含まれ、ジャンプ命令列にはジャンプ先命令列までのオフセット値がジャンプオフセット値として記述されているプログラムを入力し、
前記プログラム実行部は、
前記ジャンプ命令列の実行時に、前記ジャンプ命令列に所定のジャンプアウト通知が記述されているか否かを判断し、前記ジャンプ命令列に前記ジャンプアウト通知が記述されている場合に、前記ジャンプ命令列がメタ命令に置き換えられたことにより前記ジャンプオフセット値がジャンプ先命令列を指し示していないと判断し、前記ジャンプ命令列以降のプログラム内容を解析して、前記ジャンプ命令列のジャンプ先命令列を検索し、検索したジャンプ先命令列にジャンプして当該ジャンプ先命令列を実行することを特徴とする請求項17〜22のいずれかに記載のプログラム実行装置。
【請求項24】
前記プログラム実行部は、
前記ジャンプ命令列に前記ジャンプアウト通知が記述されている場合に、前記ジャンプ命令列のジャンプオフセット値と、前記ジャンプ命令列から前記置き換え命令列群の終端までの命令長と、前記置き換え命令列群のメタ命令以降の命令列の命令長とに基づく解析を行い、前記ジャンプ命令列のジャンプ先命令列を検索することを特徴とする請求項23に記載のプログラム実行装置。
【請求項25】
前記プログラム実行部は、
前記置き換え命令列群のメタ命令以降に他のメタ命令が存在する場合に、前記メタ命令辞書データを参照して、当該他のメタ命令に対応する命令列の命令長を導出することを特徴とする請求項24に記載のプログラム実行装置。
【請求項26】
前記プログラム入力部は、
2以上の命令列が含まれる命令列群がメタ命令に置き換えられており、所定のジャンプ先命令列へのジャンプ命令が記述されているジャンプ命令列がメタ命令外に含まれ、ジャンプ命令列にはジャンプ先命令列までのオフセット値がジャンプオフセット値として記述されており、前記ジャンプ命令列のジャンプ先命令列が前記メタ命令に置き換えられた置き換え命令列群に含まれているプログラムを入力し、
前記プログラム実行部は、
前記ジャンプ命令列の実行時に、前記ジャンプ命令列に所定のジャンプイン通知が記述されているか否かを判断し、前記ジャンプ命令列に前記ジャンプイン通知が記述されている場合に、前記ジャンプ命令列のジャンプ先命令列がメタ命令に置き換えられたことにより前記ジャンプオフセット値がジャンプ先命令列を指し示していないと判断し、前記ジャンプ命令列以降のプログラム内容を解析して、前記ジャンプ命令列のジャンプ先命令列を検索し、検索したジャンプ先命令列にジャンプして当該ジャンプ先命令列を実行することを特徴とする請求項17〜25のいずれかに記載のプログラム実行装置。
【請求項27】
前記プログラム実行部は、
前記ジャンプ命令列に前記ジャンプイン通知が記述されている場合に、前記ジャンプ命令列のジャンプオフセット値と、前記ジャンプ命令列以降の命令列の命令長とに基づく解析を行い、前記ジャンプ命令列のジャンプ先命令列を検索することを特徴とする請求項26に記載のプログラム実行装置。
【請求項28】
前記プログラム実行部は、
前記ジャンプ命令列以降にメタ命令が存在する場合に、前記メタ命令辞書データを参照して、当該メタ命令に対応する命令列の命令長を導出することを特徴とする請求項27に記載のプログラム実行装置。
【請求項29】
前記プログラム入力部は、
命令が示される命令コードと前記命令コードの命令の対象となるパラメータ値とが組み合わされている命令例が、メタ命令に置き換えられて又はメタ命令に置き換えられずに含まれるプログラムを入力し、
プログラム実行部は、
命令列の実行の際に、当該命令列のパラメータ値のデータ型を判定し、判定したパラメータ値のデータ型に対応させて当該命令列の命令コードの命令を実行することを特徴とする請求項17〜28のいずれかに記載のプログラム実行装置。
【請求項30】
複数の命令列が含まれる機械語によるプログラムであって、命令列ごとにデータ長が異なるプログラムを入力するプログラム入力処理と、
前記プログラム入力処理により入力されたプログラムの各命令列を解析し、所定の条件を満たす命令列を、当該命令列よりもデータ量が少ないメタ命令に置き換える命令置き換え処理と、
前記メタ命令と対応付けて、前記メタ命令に置き換えられた命令列が示されるメタ命令辞書データを生成するメタ命令辞書データ生成処理と、
前記命令書き換え処理により命令列がメタ命令に置き換えられたプログラムと、前記メタ命令辞書データ生成処理により生成されたメタ命令辞書データとを対応付けて出力するプログラム出力処理とをコンピュータに実行させることを特徴とするプログラム。
【請求項31】
命令列が、当該命令列よりもデータ量が少ないメタ命令に置き換えられている機械語によるプログラムを入力するプログラム入力処理と、
前記メタ命令と対応付けて、前記メタ命令に置き換えられた命令列が示されるメタ命令辞書データを入力するメタ命令辞書データ入力処理と、
前記プログラムの実行時に、指定する位置を移動させながら実行対象とすべき前記プログラム内の位置を指定するプログラム位置指定処理と、
前記プログラムの実行時に、所定の場合に、前記プログラム内の所定の位置の情報を一時的に保存するプログラム位置退避処理と、
前記プログラム位置指定処理により指定されている指定位置のプログラム内容がメタ命令であるかどうかを判断し、前記指定位置のプログラム内容がメタ命令でない命令列である場合に前記指定位置の命令列を実行し、前記指定位置のプログラム内容がメタ命令である場合に、当該メタ命令の直後の位置の情報を前記プログラム位置退避処理に保存させ、前記メタ命令辞書データ内の当該メタ命令に対応付けられている命令列を実行するプログラム実行処理とをコンピュータに実行させることを特徴とするプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図33】
【図34】
【図35】
【図36】
【図37】
【図38】
【図39】
【図40】
【図41】
【図42】
【図43】
【図44】
【図45】
【図46】
【図47】
【図48】
【図49】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図33】
【図34】
【図35】
【図36】
【図37】
【図38】
【図39】
【図40】
【図41】
【図42】
【図43】
【図44】
【図45】
【図46】
【図47】
【図48】
【図49】
【公開番号】特開2011−243134(P2011−243134A)
【公開日】平成23年12月1日(2011.12.1)
【国際特許分類】
【出願番号】特願2010−117006(P2010−117006)
【出願日】平成22年5月21日(2010.5.21)
【出願人】(000006013)三菱電機株式会社 (33,312)
【Fターム(参考)】
【公開日】平成23年12月1日(2011.12.1)
【国際特許分類】
【出願日】平成22年5月21日(2010.5.21)
【出願人】(000006013)三菱電機株式会社 (33,312)
【Fターム(参考)】
[ Back to top ]