(57)【要約】【課題】仮想マシン仕様による汎用性を備えていると共に、特定のアーキテクチャに対する適用性を有するソフトウェアを管理するコンピュータシステムを提供することにある。【解決手段】仮想マシン仕様のコンピュータシステム１において、特定のアーキテクチャに特化して作成したアセンブラコード１０を仮想マシンコードに変換して、当該仮想マシンコードと仮想マシン定義情報とをパッケージ化したソフトウェア５４として管理及び運用するシステムが開示されている。【選択図】      図１
2005078178.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータのプラットフォームから独立した第１のソフトウェアを実行するための仮想マシンのアーキテクチャを定義した仮想マシン定義情報を格納する第１の記憶手段と、
前記第１のソフトウェアから仮想マシンコードを生成する生成手段と、
前記仮想マシンコードに前記仮想マシン定義情報を付加した第２のソフトウェアを格納する第２の記憶手段と、
前記第１のソフトウェアを実行するために、前記第２のソフトウェアを前記第２の記憶手段から取り出す管理手段と
を具備したことを特徴とするコンピュータシステム。
【請求項２】
前記仮想マシンはソフトウェアであることを特徴とする請求項１に記載のコンピュータシステム。
【請求項３】
前記生成手段は、前記ソフトウェア仕様として特定のマイクロプロセッサのアーキテクチャを定義したターゲットマシン定義情報を使用して仮想マシンコードを生成するように構成されたことを特徴とする請求項１に記載のコンピュータシステム。
【請求項４】
前記生成手段は、前記ソフトウェア仕様として特定のマイクロプロセッサのアーキテクチャに基づいて作成されたアセンブラコードから、逆コンパイル処理を実行して前記仮想マシンコードを生成する逆コンパイラを含むことを特徴とする請求項１又は請求項２のいずれか１項に記載のコンピュータシステム。
【請求項５】
前記管理手段は、指定のコンパイラにより特定のマイクロプロセッサの実行形式のマシンコードに変換可能な前記プログラムを管理することを特徴とする請求項１に記載のコンピュータシステム。
【請求項６】
前記第１の記憶手段は、異なる仮想化レベルに応じた仮想マシンに対応する仮想マシン定義情報を格納することを特徴とする請求項１に記載のコンピュータシステム。
【請求項７】
特定のマイクロプロセッサのアーキテクチャに基づいて生成された仮想マシンコードを取得する手段と、
異なる仮想レベルの仮想マシンのアーキテクチャを定義した仮想マシン定義情報と、前記仮想マシンコードとを組み合わせたパッケージソフトウェアを生成する手段と、
指定の仮想レベルの仮想マシンを有するシステムに対して、当該仮想レベルに対応する前記パッケージソフトウェアを提供する手段と
を具備したことを特徴とするコンピュータシステム。
【請求項８】
前記パッケージソフトウェアを、指定のコンパイラにより特定のマイクロプロセッサのアーキテクチャに対応するマシンコードに変換する手段を含むことを特徴とする請求項７に記載のコンピュータシステム。
【請求項９】
仮想マシン仕様のソフトウェアを管理するコンピュータシステムに適用するソフトウェア管理方法であって、
指定のソフトウェア仕様に基づいて仮想マシンコードを生成し、
前記仮想マシンコードに対して、仮想マシンのアーキテクチャを定義した仮想マシン定義情報を付加したプログラムを記憶手段に格納することを特徴とするソフトウェア管理方法。
【請求項１０】
前記ソフトウェア仕様として特定のマイクロプロセッサのアーキテクチャを定義したターゲットマシン定義情報を使用して、前記仮想マシンコードを生成することを特徴とする請求項９に記載のソフトウェア管理方法。
【請求項１１】
前記ソフトウェア仕様として特定のマイクロプロセッサのアーキテクチャに基づいて作成されたアセンブラコードから、逆コンパイル処理を実行して前記仮想マシンコードを生成することを特徴とする請求項９又は請求項１０のいずれか１項に記載のソフトウェア管理方法。
【請求項１２】
前記プログラムは、指定のコンパイラにより特定のマイクロプロセッサのアーキテクチャに対応するマシンコードに変換可能な形式で格納されることを特徴とする請求項９に記載のソフトウェア管理方法。
【請求項１３】
仮想マシン仕様のソフトウェアを管理するコンピュータシステムに適用するソフトウェア管理方法であって、
特定のマイクロプロセッサのアーキテクチャに基づいて生成された仮想マシンコードを取得し、
異なる仮想レベルの仮想マシンのアーキテクチャを定義した仮想マシン定義情報と、前記仮想マシンコードとを組み合わせたパッケージソフトウェアを生成し、
指定の仮想レベルの仮想マシンを有するシステムに対して、当該仮想レベルに対応する前記パッケージソフトウェアを提供することを特徴とするソフトウェア管理方法。
【請求項１４】
前記パッケージソフトウェアは、指定のコンパイラにより特定のマイクロプロセッサのアーキテクチャに対応するマシンコードに変換可能であることを特徴とする請求項１３に記載のソフトウェア管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的には仮想マシンを利用するコンピュータシステムに関し、特に仮想マシンコードでのソフトウェアを管理する技術に関する。
【背景技術】
【０００２】
従来、コンピュータのハードウェアやＯＳ（operating system）等のプラットフォームに依存しないソフトウェア（例えばJavaプログラム、Javaは登録商標）を実行するコンピュータシステムが各種の電子機器に使用されている。
【０００３】
このようなソフトウェアは、複数の異なる命令セットアーキテクチャ上で動作するコンピュータプログラムであり、仮想マシン（virtual machine:ＶＭ）と呼ばれるソフトウェアを搭載したコンピュータシステムにより実行される。仮想マシンは、仮想的な命令セットアーキテクチャを定義し、高級言語（例えばJava言語）で記述したプログラムをコンパイルした仮想的な命令列（仮想マシンコード）を実行する。
【０００４】
例えばJava仮想マシン仕様のシステムは、コンパイラにより、Java言語で記述されたソースコードを、仮想マシンの実行形式プログラムである仮想マシンコード（Javaバイトコード）に変換する。ソフトウェア特にパッケージソフトウェアは仮想マシンコードによって管理され、仮想マシンによって仮想マシンコードが解釈実行される。また、JIT（just-in-time）コンパイラにより、実行時に、当該仮想マシンコードを、実行する特定マシン（マイクロプロセッサ：ＣＰＵ）の実行形式コードであるマシンコードに変換するシステムもある。
【０００５】
このような仮想化された命令セットからなる仮想マシンは、汎用的に各種のタイプのアーキテクチャに対応できるようにするために、抽象度の高いものが多い。このため、特にコンピュータの究極の性能を追及するために、特定のＣＰＵのアーキテクチャに特化して開発されたアセンブラコードで記述されたソフトウェアと比較すると、仮想マシン仕様のソフトウェアは実行効率が低下する。従って、特に、ハードウェアに特化した高性能を要求するプログラムの場合は、汎用性を犠牲にしてアセンブラコードで記述されることが多い。
【０００６】
ところで、仮想マシンの汎用性を得るために、アセンブラコードで記述されたプログラムを、実行時に他のアーキテクチャのプログラムに翻訳して実行したり、１命令づつ解釈実行するシステムも開発されている（例えば、特許文献１及び特許文献２を参照）。
【特許文献１】米国特許第６，０２１，２７２（２０００年）
【特許文献２】米国特許第５，３０７，４９２（１９９４年）
【発明の開示】
【発明が解決しようとする課題】
【０００７】
先行技術文献などに記載されている方法では、例えばＳＩＭＤ（single instruction multiple data）命令や、特殊なメモリ階層のアーキテクチャに特化したプログラムを、単に他のアーキテクチャに対応するプログラムに変換しても、その特殊性の利点を継承することができない。また一方で、アーキテクチャをバージョンアップするような場合には、逆に特殊性により、古いバージョンのプログラムを新しいバージョンで高速に動作させることを困難にする側面もある。
【０００８】
そこで、本発明の目的は、仮想マシン仕様による汎用性を備えていると共に、特定のアーキテクチャに対する適用性を有するソフトウェアを管理するコンピュータシステムを提供することにある。
【課題を解決するための手段】
【０００９】
本発明の観点は、仮想マシンが想定するアーキテクチャを定義した仮想マシン定義情報を付加した仮想マシンコードからなるパッケージソフトウェアを管理するコンピュータシステムに関する。
【００１０】
本発明の観点に従ったコンピュータシステムは、コンピュータのプラットフォームから独立した第１のソフトウェアを実行するための仮想マシンのアーキテクチャを定義した仮想マシン定義情報を格納する第１の記憶手段と、前記第１のソフトウェアから仮想マシンコードを生成する生成手段と、前記仮想マシンコードに前記仮想マシン定義情報を付加した第２のソフトウェアを格納する第２の記憶手段と、前記第１のソフトウェアを実行するために、前記第２のソフトウェアを前記第２の記憶手段から取り出す管理手段とを備えたものである。
【発明の効果】
【００１１】
例えばアセンブラコードで記述したプログラムから仮想マシンコードを生成し、当該仮想マシンコードと仮想マシン定義情報とをパッケージ化して管理することにより、仮想マシン仕様による汎用性と共に、特定のアーキテクチャへの適用性を向上させることが可能となる。
【発明を実施するための最良の形態】
【００１２】
以下図面を参照して、本発明の実施形態を説明する。
【００１３】
（システムの原理的構成）
図１は、本実施形態に関するコンピュータシステム１において、仮想マシン仕様でのソフトウェア管理方法の原理的構成を示すブロック図である。
【００１４】
本システム１は、例えばプログラム開発により、特定のアーキテクチャを有するマイクロプロセッサ（ＣＰＵ）であるターゲットマシンに特化して設計されたアセンブラコード１０を、仮想マシンコード（ＶＭＣ）３０に変換する逆コンパイラ２０を有する。
【００１５】
仮想マシンコード（ＶＭＣ）３０は、例えばJava仮想マシン仕様のJavaバイトコードに相当し、仮想マシンの実行形式プログラムである。ターゲットマシン（ＣＰＵ）は、実行時には、当該仮想マシンコード（ＶＭＣ）３０をマシンコードに変換して実行する。
【００１６】
さらに、本システム１は、ソフトウェアを管理するための記憶装置５０を有する。記憶装置５０は、例えばハードディスクドライブなどのファイル装置である。記憶装置５０には、逆コンパイラ２０による逆コンパイル処理に必要な仮想化レベル情報５１、ターゲットマシン定義情報（target machine description:ＴＭＤ）５２、仮想マシン定義情報（virtual machine description:ＶＭＤ）５３、及び後述するパッケージプログラム５４を格納する。
【００１７】
ここで、本システム１は、インターネット２に接続して、他のコンピュータシステムからの要求に応じて管理しているパッケージプログラム５４を提供するような運用も実行する。
【００１８】
ＴＭＤ５２及びＶＭＤ５３は、具体的には、図２に示すように、実マシン及び仮想マシンの命令セットアーキテクチャなどのアーキテクチャを記述した情報である。仮想化レベル情報５１は、指定のターゲットマシンのハードウェアに依存しているアセンブラコード１０を、当該ハードウェア依存部を抽象化して仮想マシンコードに変換する場合に、その抽象化度の程度（仮想化階層）を示す情報である。
【００１９】
逆コンパイラ２０は、仮想レベル情報５１による仮想レベルに応じて、ＴＭＤ５２を使用してアセンブラコード１０を仮想マシンコード３０に変換する逆コンパイル処理を実行する。逆コンパイラ２０は、図３のフローチャートに示すように、通常の逆コンパイル処理と同様の処理を実行する。なお、ＴＭＤ５２の使用方法については、例えば前述の特許文献１に記載されている逆アセンブラ（disassembler）の処理でのマシン定義情報（machine description）の使用方法と同様である。
【００２０】
即ち、逆コンパイラ２０は、図３に示すように、命令コードの解析処理（Ｓ１）、基本ブロック分割処理（Ｓ２）、制御フロー解析処理（Ｓ３）、データフロー解析処理（Ｓ４）、最適化処理（Ｓ５）、及び命令コードの生成処理（Ｓ６）を順次実行する。逆コンパイラ２０は、命令コードの解析処理（Ｓ１）、最適化処理（Ｓ５）及び命令コードの生成処理（Ｓ６）のそれぞれにおいて、命令セットアーキテクチャ定義情報３００としてＴＭＤ５２を使用する。
【００２１】
さらに、逆コンパイラ２０は、指定された仮想レベル情報５１に基づいて指定された仮想レベルに応じて、仮想化階層をさかのぼって変換処理を繰り返してもよい。また、逆コンパイラ２０は、アセンブラコード１０の命令間のデータ依存をチェックして、パイプラインハザード（pipeline hazard）情報やその他の最適化のヒントを通知することも可能である。このような仕組みを実装すれば、アセンブラコードの開発者は、当該ヒントに従って、アセンブラコードの修正及び効率的なチューニング処理を行なうことが可能となる。
【００２２】
さらに、本システム１は、逆コンパイラ２０により生成された仮想マシンコード（ＶＭＣ）３０に対して、記憶装置５０に格納された指定の仮想マシン定義情報（ＶＭＤ）５３を付加したプログラム４０を、パッケージプログラム５４として記憶装置５０に格納する。
【００２３】
以上のように本実施形態のコンピュータシステム１は、特定のアーキテクチャを有するターゲットマシン（ＣＰＵ）に特化して設計されたアセンブラコード１０を、仮想マシンコード（ＶＭＣ）３０に変換し、当該ＶＭＣ３０と仮想マシン定義情報（ＶＭＤ）５３とをパッケージしたプログラム４０を単位とするソフトウェアを管理及び運用する。
【００２４】
本システム１は、ソフトウェアの実行時には、図４に示すように、ＪＩＴコンパイラ２００により、ＶＭＣ３０とＶＭＤ５３とをパッケージしたプログラム４０から、ＶＭＤ５３を使用してＶＭＣ３０を、ターゲットマシン（ＣＰＵ１００）のマシンコード１１０に変換する。ＣＰＵ１００は、演算ユニット１２０などにより、当該マシンコード１１０を実行する。
【００２５】
従って、本実施形態のコンピュータシステム１であれば、プログラムの開発時には、特定のＣＰＵのアーキテクチャに特化して設計したアセンブラコード１０を、抽象度の高い（汎用性の高い）仮想マシンコード３０に変換する。即ち、仮想的なアーキテクチャを想定する仮想マシンコード３０は、各種のタイプのアーキテクチャに対応可能である。
【００２６】
さらに、本実施形態のコンピュータシステム１は、仮想マシンコード３０と、仮想マシン定義情報（ＶＭＤ）５３とをパッケージしたプログラム４０を単位とするソフトウェアを管理する。即ち、各種の仮想アーキテクチャを定義したＶＭＤ５３を付加することにより、アセンブラコード１０で記述されたソフトウェアに含まれる特殊なアーキテクチャ（例えばＳＩＭＤ命令や特殊なメモリ階層など）を反映させたソフトウェアを管理及び運用することができる。
【００２７】
具体的には、仮想マシンコード３０を、プログラム開発時とは異なるアーキテクチャのターゲットマシンのマシンコードに変換する場合に、ＶＭＤ５３により開発時の特殊なアーキテクチャを反映させたマシンコードに変換できる。また、プログラム開発時のアーキテクチャがバージョンアップされた場合でも、当該バージョンアップされた内容をＶＭＤ５３に含ませることにより、古いバージョンのプログラムを新しいバージョンで高速に動作させることが可能となる。
【００２８】
要するに本実施形態のソフトウェア管理方法であれば、特定のアーキテクチャに特化したアセンブラコードを、逆コンパイルによって抽象化した仮想マシンコード（ＶＭＣ）の形式で管理及び運用する。また、当該ＶＭＣと、仮想マシン定義情報（ＶＭＤ）と、ターゲットマシン定義情報（ＴＭＤ）をそれぞれ別々に管理（保存）する。従って、アセンブラコードで記述したプログラムの実行性能を損うことなく、その他のターゲットマシンや、バージョンアップされたアーキテクチャへの適用性を向上させることが可能となる。結果として、ソフトウェアの管理及び運用コストを削減することが可能となる。
【００２９】
なお、仮想マシン定義情報（ＶＭＤ）５３については、パッケージ毎に全ての情報のコピーを付加させるのは管理上の効率が悪いので、ＶＭＤ５３を識別するＩＤ情報をＶＭＣ３０に付加して管理する方法でもよい。
【００３０】
さらに、プログラム開発者または使用者は、必要に応じて、プログラムを動作させる環境としてのリソース予約、アロケーション、ネットワーク上のトポロジー、連携動作環境などの情報を、ＶＭＤ５３の拡張として付加させてもよい。
【００３１】
また、本実施形態のコンピュータシステム１は、ＣＰＵの性能を重視して開発されたアセンブラコードの場合には、命令順序やレジスタ割り当てなどを維持するように、逆コンパイラ２０に指示することで、プログラム実行時に、仮想マシンコードから元のアセンブラコードに戻るような可逆変換を実行するような仕組みを備えてもよい。
【００３２】
（他の実施形態）
図５及び図６は、ソフトウェア管理方法の他の実施形態を説明するためのブロック図及びフローチャートである。
【００３３】
本実施形態は、図５に示すように、インターネット２に接続されたホームサーバ５００及び複数の電子機器６００，７００からなるホームネットワーク（ＬＡＮ）を想定する。ホームサーバ５００は、アーキテクチャ（Ａ）のＣＰＵ５２０を有し、ＬＡＮにより複数の電子機器６００，７００と接続してデータ交換を実行する。各電子機器６００，７００はそれぞれ、異なるアーキテクチャ（Ｂ），（Ｃ）のＣＰＵ６２０，７２０を有する。
【００３４】
以下、図５と共に図６のフローチャートも参照して、本実施形態の構成を説明する。
【００３５】
ホームサーバ５００は、インターネット２から、所望のアプリケーションプログラムである仮想マシンコード（仮想化レベルＸのＶＭＣ）をダウンロードする（ステップＳ１１）。
【００３６】
ホームサーバ５００は、アーキテクチャ（Ａ）のＴＭＤを使用して、ダウンロードした仮想化レベルＸのＶＭＣを、相対的に抽象度の低い仮想レベルＡのＶＭＣに変換して保存する（ステップＳ１２）。
【００３７】
ホームサーバ５００は、当該アプリケーションプログラム実行時には、仮想レベルＡの仮想マシン（ＶＭ−Ａ）５１０により仮想レベルＡのＶＭＣを実行する。これにより、ＣＰＵ５２０は、仮想レベルＡのＶＭＣから変換されたマシンコードを実行して、当該アプリケーションプログラムを実行する。
【００３８】
一方、例えば電子機器６００は、ホームサーバ５００から仮想レベルＡのＶＭＣを転送されると、さらに抽象度の低い仮想レベルＢのＶＭＣに変換して保存する（ステップＳ１３）。このとき、電子機器６００は、仮想レベルＢに対応する仮想マシン定義情報（ＶＭＤ）及びアーキテクチャ（Ａ）のＴＭＤを使用して、仮想レベルＢのＶＭＣに変換する。
【００３９】
そして、電子機器６００は、当該アプリケーションプログラム実行時には、仮想レベルＢの仮想マシン（ＶＭ−Ｂ）６１０により仮想レベルＢのＶＭＣを実行する。これにより、ＣＰＵ６２０は、仮想レベルＢのＶＭＣから変換されたマシンコードを実行して、当該アプリケーションプログラムを実行する（ステップＳ１４，Ｓ１５）。
【００４０】
なお、電子機器７００の場合にも同様であり、当該アプリケーションプログラム実行時には、仮想レベルＣの仮想マシン（ＶＭ−Ｃ）７１０により仮想レベルＣのＶＭＣを実行する。これにより、ＣＰＵ７２０は、仮想レベルＣのＶＭＣから変換されたマシンコードを実行して、当該アプリケーションプログラムを実行する。
【００４１】
以上本実施形態によれば、仮想マシンコードを直ぐに実マシンのマシンコードに変換するのではなく、相対的に抽象度の高い仮想レベルの仮想マシンコードから、相対的に抽象度の低い仮想マシンコードに変換する仕組みを提供する。これにより、ホームネットワークを構成する上位のホームサーバ５００は、相対的に高い抽象度の高い仮想レベルの仮想マシンコードを保存し、このアプリケーションプログラムの実行時にマシンコードに変換する。従って、アプリケーションプログラムが実際に動作する段階で、どのリソースに割り当てられたかによって、最終的なマシンレベルのコードに変換することにより、相対的に緻密な最適化を実現することができる。
【００４２】
要するに、仮想化レベルとして、各種の仮想レベルを定義可能とし、アプリケーションプログラムのネットワークを通した流通や配布、メモりへのロード、実行、一次保存などに適した仮想レベルでアプリケーションプログラムを保持することができる。これにより、アプリケーションプログラムの最適化を柔軟に適用するとともに、プログラムの変換コストを削減することが可能となる。
【００４３】
また、ホームサーバ５００や各電子機器６００，７００は、プログラムの実行時に、プロファイル情報などに基づいてオリジナルや中間レベルの仮想マシンコードを書き換える仕組みを備えてもよい。
【００４４】
さらに、プログラムを動作させる環境としてのリソース予約、アロケーション、ネットワーク上のトポロジー、連携動作環境などの情報を抽象化して、仮想マシンコードと一緒にパッケージすることによって、制約の多いリアルタイム処理や分散処理を行うプログラムを流通可能とすることができる。
【００４５】
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【図面の簡単な説明】
【００４６】
【図１】本発明の実施形態に関するソフトウェア管理方法の原理的構成を示すブロック図。
【図２】本実施形態に関するターゲットマシン及び仮想マシンの各定義情報の一例を示す図。
【図３】本実施形態に関する逆コンパイラの処理手順を説明するためのフローチャート。
【図４】本実施形態に関するプログラム実行時の手順を説明するためのフローチャート。
【図５】他の実施形態を説明するためのブロック図。
【図６】他の実施形態を説明するためのフローチャート。
【符号の説明】
【００４７】
１…コンピュータシステム、２…インターネット、１０…アセンブラコード、
２０…逆コンパイラ、３０…仮想マシンコード（ＶＭＣ）、５０…記憶装置、
５２…ターゲットマシン定義情報（ＴＭＤ）、５３…仮想マシン定義情報（ＶＭＤ）、
５４…パッケージプログラム。
【図１】
2005078178.tif 000003
【図２】
2005078178.tif 000004
【図３】
2005078178.tif 000005
【図４】
2005078178.tif 000006
【図５】
2005078178.tif 000007
【図６】
2005078178.tif 000008