ホスト機械語コードを展開、実行、監視・制御するプログラム、方法およびシステム
【課題】アプリケーション型プログラム(JAVAプログラム)の配信の仕組みを使って書庫ファイルに含まれるホスト機械語コードを展開、実行、監視・制御することが可能なプログラム、方法およびシステムを提供する。
【解決手段】本発明に係るコンピュータシステムは、JAVA仮想マシン(JAVA VM)10、JAVAフレームワーク20、JAVAアプリケーション30、ホスト機械語コード40,40’、JAVAアプリケーション30とホスト機械語コード40を含むJARファイル50、および、ラッパーライブラリ60の各機能ブロックで構成され、各機能ブロックを構成するプログラムによりホスト機械語コードを展開、実行、監視・制御する。なおホスト機械語コード40はJAVAアプリケーション30により展開されてホスト機械語コード40’となる。
【解決手段】本発明に係るコンピュータシステムは、JAVA仮想マシン(JAVA VM)10、JAVAフレームワーク20、JAVAアプリケーション30、ホスト機械語コード40,40’、JAVAアプリケーション30とホスト機械語コード40を含むJARファイル50、および、ラッパーライブラリ60の各機能ブロックで構成され、各機能ブロックを構成するプログラムによりホスト機械語コードを展開、実行、監視・制御する。なおホスト機械語コード40はJAVAアプリケーション30により展開されてホスト機械語コード40’となる。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、JARファイル(JAVA(登録商標)プログラム用書庫ファイル)に含まれるホスト機械語コードをJAVA言語で書かれたプログラムを用いて展開、実行、監視・制御するプログラム、方法およびシステムに関わる。なお、JAVAは、サン・マイクロシステムズ・インコーポレーテッドの登録商標である。
【背景技術】
【0002】
JARファイル(Java ARchiver)は、普及しているZIPファイル形式に基づくファイル形式であり、多数のファイルを1つにまとめるために使用されるものである。そしてJARファイルは、基本的にはオプションのMETA-INFディレクトリを格納するZIPファイルとして認識されているものである。なお詳しくは、下記のURLを参照されたい。
「JSR 200: Network Transfer Format for JavaTM Archives」
http://jcp.org/en/jsr/detail?id=200(閲覧確認2006.02.09)
【0003】
またホスト機械語コードの実行について、下記に示す特許文献1を関連する技術文献として挙げることができる。特許文献1は、JAVAアプリケーションをコンピュータ・システムにインストールする方法およびシステムについて記している。
【特許文献1】特開平10−222349号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
JAVA言語は周知のように実行環境がホストに依存しないという利点から普及しており、特にネットワークを介したアプリケーションに利用されている。JAVA実行環境は、JAVAプログラムの書庫ファイルであるJARファイルを、HTTP(Hypertext Transfer Protocol)などのプロトコルを用いて、ネットワーク越しにダウンロードし、ホストマシン上のJAVA仮想マシン(JAVA VMとも称す)で実行する機能がある。
【0005】
このようなJAVAプログラムのネットワーク配信技術にはOSGi(http://www.osgi.org/参照)のような業界団体で標準化されているものもある。一方、すでにC言語などで書かれたプログラムがあって、労力、資金の面でJAVA言語に移植するのが困難であり、JAVA実行環境のサポートしないホストマシン固有の機能を使いたいという要請があり、またホスト機械語コードはパフォーマンスが良い、などの理由でホスト機械語コードを使いたいという要求もある。
【0006】
しかしホスト機械語コードのネットワーク配信技術は、JAVAプログラムのネットワーク配信技術と比較して標準化や普及が遅れている。また、一つのホストマシンにJAVAプログラム用とホスト機械語コード用の配信システムを備えることは冗長で不経済にもなる。
【0007】
ところで現状では配信されたホスト機械語コードを実行する際には、セキュリティの問題がある。すなわち配信されたJAVAプログラムがJAVAのセキュリティマネージャの存在のもとで実行される場合、ホストのリソースなどへのアクセス制限をかけることができるが、ホスト機械語コードの実行においてJAVAのセキュリティマネージャに相当するしくみは無いという問題点がある。
【0008】
本発明の目的は、アプリケーション型プログラム(JAVAプログラム)の配信の仕組みを使って書庫ファイルに含まれるホスト機械語コードを展開、実行、監視・制御することが可能なプログラム、方法およびシステムを提供することである。また、ホスト機械語コードの実行中の動作を監視してセキュリティを確保することが可能なプログラム、方法およびシステムを提供することである。
【課題を解決するための手段】
【0009】
本発明のプログラムは、ホスト機械語コードおよび該ホスト機械語コードを展開し実行するアプリケーション型プログラムを書庫ファイルに含み、コンピュータに、仮想マシンを自プラットフォーム上に生成し動作させる機能、前記仮想マシン上で動作し前記書庫ファイル中の前記アプリケーション型プログラムを読み込んで実行制御する機能、実行制御された前記アプリケーション型プログラムと前記ホスト機械語コードのプロセスとの間で通信を行う機能、および、実行制御された前記アプリケーション型プログラムが前記ホスト機械語コードを監視・制御する機能、を実現させることを特徴とする。
【0010】
また本発明のプログラムは、ホスト機械語コードおよび該ホスト機械語コードを展開し実行するアプリケーション型プログラムを書庫ファイルに含み、コンピュータに、仮想マシンを自プラットフォーム上に生成し動作させる機能、前記仮想マシン上で動作し前記書庫ファイル中の前記アプリケーション型プログラムを読み込んで実行制御する機能、実行制御された前記アプリケーション型プログラムと前記ホスト機械語コードのプロセスとの間で通信を行う機能、実行制御された前記アプリケーション型プログラムが前記ホスト機械語コードを監視・制御する機能、前記ホスト機械語コードにホストのリソースに直接アクセスする標準ライブラリ関数をラップするラッパーライブラリを強制的にリンクさせる機能、および、前記ホスト機械語コードのプロセスからのセキュリティ問い合わせに対し前記仮想マシンのセキュリティポリシーに従って許可/不許可を返す機能、を実現させることを特徴とする。
【0011】
また本発明のプログラムは、ホスト機械語コード、および、前記書庫ファイルのデジタル署名が証明されたとき及びホスト環境と前記ホスト機械語コードとが適合したとき若しくはいくつかのホスト環境に適合する前記ホスト機械語コードの中からそのホストの環境に適合するホスト機械語コードを選択できたとき、前記ホスト機械語コードを展開し実行するアプリケーション型プログラムを書庫ファイルに含み、コンピュータに、仮想マシンを自プラットフォーム上に生成し動作させる機能、前記仮想マシン上で動作し前記書庫ファイル中の前記アプリケーション型プログラムを読み込んで実行制御する機能、実行制御された前記アプリケーション型プログラムと前記ホスト機械語コードのプロセスとの間で通信を行う機能、実行制御された前記アプリケーション型プログラムが前記ホスト機械語コードを監視・制御する機能、前記ホスト機械語コードにホストのリソースに直接アクセスする標準ライブラリ関数をラップするラッパーライブラリを強制的にリンクさせる機能、および、前記ホスト機械語コードのプロセスからのセキュリティ問い合わせに対し前記仮想マシンのセキュリティポリシーに従って許可/不許可を返す機能、を実現させることを特徴とする。
【発明の効果】
【0012】
本発明によれば、アプリケーション型プログラム(JAVAプログラム)の配信機能を利用して書庫ファイル(JARファイル)に含まれるホスト機械語コードの配信、展開、実行ができる。また、アプリケーション型プログラム(JAVAプログラム)からホスト機械語コードの実行中の制御、および、実行中の動作を監視することができる。さらに、書庫ファイル(JARファイル)のデジタル署名が証明されたとき及びホスト環境とホスト機械語コードとが適合したとき若しくはいくつかのホスト環境に適合するホスト機械語コードの中からそのホストの環境に適合するホスト機械語コードを選択できたとき、ホスト機械語コードを展開し実行することができる。
【発明を実施するための最良の形態】
【0013】
以下、本発明の実施の形態を、図面を参照しながら説明する。
[第1の実施形態]
図1は本発明の第1の実施形態に係るコンピュータシステム全体の構成を示す図である。図1の全体構成図において本発明の第1の実施形態に係るコンピュータシステムは、JAVA仮想マシン(JAVA VM)10、JAVAフレームワーク20、JAVAアプリケーション30、ホスト機械語コード40,40’、JAVAアプリケーション30とホスト機械語コード40を含むJARファイル50、および、ラッパーライブラリ60の各機能ブロックで構成され、各機能ブロックを構成するプログラムによりホスト機械語コードを展開、実行、監視・制御する。なおホスト機械語コード40はJAVAアプリケーション30により展開されてホスト機械語コード40’となる。またラッパーライブラリ60は、JAVA VM10がインストールされている自プラットフォームに一緒にインストールされていても良いし、またはJARファイル50の中に持っていても良い。またJAVAは、サン・マイクロシステムズ・インコーポレーテッドの登録商標である。
【0014】
JAVAフレームワーク20は、JAVA VM10上で動作するJAVAプログラムであり、JAVAフレームワーク20上でさらに1個以上のJAVAアプリケーションを動作させることができる。JAVAフレームワーク20には、たとえばOSGiサービスプラットフォームに準拠したOSGiフレームワークなどがある。
【0015】
ホスト機械語コード40は初期状態では圧縮されてJARファイル50に格納されており、JAVAアプリケーション30により展開される。
JAVAアプリケーション30はJAVAフレームワーク20により制御される。JAVAフレームワーク20としてOSGiフレームワークを使用する場合、バンドルと呼ばれるJAVAアプリケーションは当該フレームワークによりインストール、アンインストール、スタート、ストップ、アップデートを行うことができる。
【0016】
展開されたホスト機械語コード40’は、JAVAアプリケーション30から別プロセスとして起動される。起動されるとき、JAVAアプリケーション30との間に相互の通信経路を作る。例えば、JAVAクラスライブラリのjava.lang.Runtime#exec()により起動されると、java.lang.Processオブジェクトがホスト機械語コード40’のハンドルとして返される。このハンドルによって通信経路を作ることができる。JAVAアプリケーション30がホスト機械語コード40’を制御するのに、この通信経路を通じて行う。
【0017】
ラッパーライブラリ60は、ホスト機械語コード40’が起動される時に強制的にホスト機械語コード40’にリンクさせられ、Cの標準ライブラリをラップする。ホスト機械語コード40’がラップされたライブラリ関数を呼び出すと、最初にラッパーライブラリ60の関数が呼び出される。ラッパー関数はその呼び出しが許可されるかどうか、通信経路およびJAVAフレームワーク20を通じてJAVA VM10に問い合わせる。JAVA VM10は指定されたセキュリティポリシに従って許可または不許可をJAVAフレームワーク20および通信経路を通じてラッパー関数に返す。許可の場合ラッパー関数は、標準ライブラリ関数を呼び出し、結果をホスト機械語コード40’に返す。このようにしてホスト機械語コード40’の動作を監視する(これについては図5の説明で再説する)。
【0018】
図2は、本発明の第1の実施形態に係るJARファイルのデータ構造を示す図である。図2に示すJARファイルには、マニフェストファイル51、デジタル署名52、JAVAアプリケーション30、ホスト機械語コード40が含まれている。そして図2に示すホスト機械語コード40としては、メインのプログラム(bin/musicplayer)41と、メインのプログラム41が動的にリンクするプラグイン(lib/libmpg.so)42、プラグイン(lib/libwav.so)43及びプラグイン(lib/libmidi.so)44とが含まれている。
【0019】
図3は本発明の第1の実施形態に係るコンピュータシステムの動作を説明するフローおよびシーケンスの動作図である。図3においてまず、JAVAフレームワーク20はユーザの操作などに応じてJARファイル50を読み込む(ステップ21)。例えばネットワークからダウンロードしたり、ローカルファイルシステムから読み込んだりする。
【0020】
次にJAVAフレームワーク20はJARファイル50の読み込みが終了するとJARファイル50中の、マニフェストファイル51で指定されたJAVAアプリケーション30の動作を開始する(ステップ22、T1)。JAVAアプリケーション30はまずホスト機械語コード40の展開を行う(ステップ31)。展開にあたりJAVAフレームワーク20はファイルハンドルをJAVAアプリケーション30に与える(ステップ23、T2)。
【0021】
図4は本発明の第1の実施形態に係るホスト機械語コード40の展開の動作をさらに詳しく示したフローチャートである。図4においてJAVAアプリケーション30は、まずデジタル署名の真正性を証明し(ステップ1)、証明されたら次にホスト環境(OS、アーキテクチャ)にホスト機械語コードが適合するかどうか調べ(ステップ2)、適合する場合は展開を行う(ステップ3)。そして展開ができたら正常終了する(ステップ4)。上記ステップ1において証明されないときは異常終了する(ステップ5)。また上記ステップ2で適合しない場合は同じく異常終了する(ステップ5)。
【0022】
上記ステップ2におけるOSとアーキテクチャの適合検査の例を具体的に説明する。例えば、JAVAフレームワーク20としてOSGiフレームワークを使う場合で、JARファイル50に含まれるホスト機械語コードlib/libmpg.soが、OSがLinux、アーキテクチャがx86に適合する場合には、図2のマニフェストファイル51にこれらを
Bundle-NativeCode:/lib/libmpg.so;
osname=linux;
processor=x86
と記述しておくと、JAVAアプリケーション30はこれらの値をプロパティorg.osgi.framework.os.name, org.osgi.framework.processorで参照できる。またJAVA VM10の動作している環境のOSとアーキテクチャはJAVA VM10のプロパティのos.nameとos.archから参照できる。これらのプロパティを比較し、OSとアーキテクチャが一致したならば適合性ありと判定する(図4のステップ2)。
【0023】
OSGiフレームワークをJAVAフレームワーク20として使った場合、JAVAアプリケーション30はosg.osgi.framework.Bundle#getResource()およびjava.net.URL#openStream()を用いて、ホスト機械語コードを読み込むためのハンドル(java.io.InputStreamのオブジェクト)を取得する。また、org.osgi.framework.BundleContext#getDataFile()より書き込むためのハンドル(java.io.Fileのオブジェクト)を取得する。これらから読み込み書き出しを行うことで、ホスト機械語コード40の展開を行う(図3のステップ32)。
【0024】
上記ではホスト機械語コード40がJAVAアプリケーション30からのみ使用される場合の展開方法について述べた。上記例では書き込みはJAVAフレームワーク20が与えたディレクトリに対して行われ、それは相対パスで与えられる。一方、OSにインストールされるホスト機械語コードの場合、JAVAアプリケーション30は上記getDataFile()ではなく、絶対パスを伴ったjava.io.Fileのコンストラクタによって書き込みハンドルを取得する。
【0025】
図3に戻る。次にJAVAアプリケーション30はjava.lang.Runtime#exec()を用いてホスト機械語コード40’を実行する(ステップ33、T3)。この時、実行されたホスト機械語コード40’がラッパーライブラリ60を最初にロードするように指定する(ステップ41)。OSがLinuxの場合、環境変数LD_PRELOADを与えると、指定されたライブラリがすべてのライブラリに先立ってロードされる。そこでLD_PRELOADにラッパーライブラリ60を指定する。java.lang.Runtime#exec()の戻り値はjava.lang.Processのオブジェクトだが、これは実行されたホスト機械語コード40’のプロセスへのハンドルとなる。
【0026】
次にJAVAアプリケーション30はホスト機械語コード40’の制御・監視を行う(ステップ34)。そのために通信経路を作る。
例として、通信経路をUnix(登録商標)のパイプで実現する例を述べる。
InputStream is = process.getInputStream();
OutputStream os = process.getOutputStream();
【0027】
ここでprocessは前述の実行されたホスト機械語コードプロセスへのハンドルである。InputStreamとOutputStreamはそれぞれ読み出し、書き込みハンドルである。これらはホスト機械語コードのプロセスの標準入出力とつながる。すなわちJAVAアプリケーション30からOutputStreamを通じて書き出したデータはホスト機械語コード40’の標準入力から読み込むことができ、またホスト機械語コード40’の標準出力へ書き出したデータはJAVAアプリケーション30のInputStreamから読むことができる。これを使ってJAVAアプリケーション30とホスト機械語コード40’が相互に通信する。
【0028】
図5は本発明の第1の実施形態に係るホスト機械語コードの監視の動作をさらに詳しく説明するタイムチャートである。具体的には、図3に示したJAVAアプリケーション30における「ホスト機械語コードの監視」(ステップ34)に係る動作を詳しく説明するものである。図5においてまず、ホスト機械語コード40’がラップされたライブラリ関数を呼び出す(T11)と、最初にラッパーライブラリ60の関数が呼び出される。例えばファイルをオープンする関数であるfopen()がラップされているとすると、最初にラッパーライブラリ60のfopen()が呼び出される。fopen()は引数にオープンするファイルの名前とモード(読み込みか、書き込みか、読み書きかなど)をとる。
【0029】
次にラッパーライブラリ60のfopen()はこのファイルがこのモードでオープン可能かどうか、上述した通信経路を通じてJAVAアプリケーション30に、さらにそこからJAVAフレームワーク20を通じてJAVA VM10に問い合わせる(T12)。JAVA VM10はパーミションチェックを行って許可または不許可をJAVAフレームワーク20を介してJAVAアプリケーション30に(T13)、さらに上述した通信経路を通じてラッパーライブラリ60のfopen()に返す(T14)。なお、図5では、JAVAアプリケーション30でパーミションチェックを行うように見えるが、実際のところは図5には示されていないJAVAフレームワーク20を介してJAVA VM10に問い合わせることに注意を要する。そしてパーミション許可の場合、ラッパーライブラリ60のfopen()はさらに標準ライブラリのfopen()を呼び出し、結果をホスト機械語コード40’に返す(T15)。またパーミション不許可の場合(T16)、ラッパーライブラリ60のfopen()はホスト機械語コード40’に失敗を返す(T17)。
【0030】
以上の動作を図3に戻って説明すると、ホスト機械語コード40が実行される(ステップ42)と、最初にラッパーライブラリ60のfopen()が呼び出され、次いでラッパーライブラリ60のfopen()は、オープン可能かどうか、通信経路を介してJAVAアプリケーション30にさらにJAVAフレームワーク20を通じてJAVA VM10に問い合わせる(T4)。JAVA VM10はセキュリティポリシーによるパーミションチェックを行って許可または不許可をJAVAフレームワーク20に返し、JAVAフレームワーク20はセキュリティポリシーに基づく許可または不許可をJAVAアプリケーション30に与える(ステップ24、T5)。JAVAアプリケーション30は通信経路を介してラッパーライブラリ60のfopen()に返す(T4)。これによりJAVAアプリケーション30はホスト機械語コードの制御・監視を行う(ステップ34)。
【0031】
図6は本発明の第1の実施形態に係るラッパーライブラリのfopenの動作を説明するフローチャートである。fopenは呼び出し時にファイル名と読み出しモード“r”を指定して開始する(ステップ61)。fopenはファイル操作なので、パーミションクラス名にjava.io.FilePermissionを指定し、fopen呼び出し時に与えられたファイル名とモードを指定して、JAVAアプリケーション30に問い合せを行い(ステップ62)、JAVAアプリケーション30から結果を取得する(ステップ63)。問い合せと結果取得は上述の通信経路を介して行う。パーミションの結果がOKならば(ステップ64)、標準ライブラリをオープンし、標準ライブラリのfopenを呼び出し(ステップ65)、ホスト機械語コード40’にその結果を返す(ステップ66)。パーミションの結果がOKでなければfopenの失敗を示すNULLをホスト機械語コード40’に返す。パーミションの結果は、例えば整数の0をOKであると決めておく。
【0032】
図7は本発明の第1の実施形態に係るJAVAアプリケーションとホスト機械語コードプロセスとの通信ループにおける動作を説明するためのフローチャートである。図7に示す通信ループでの動作フローでは、上述のInputStreamより一行入力されるのを待ち受け、次いで入力された行を語に分割する(ステップ71)。そして最初の語がパーミションクラス名でなければ(ステップ72)、ステップ71の一行入力待ちに戻り、パーミションクラス名であれば(ステップ72)、それに続く語をターゲットとアクションのパラメータとしてパーミションオブジェクトを作る(ステップ73)。文字列からオブジェクトを作るにはJAVAのリフレクション機能を使う。
【0033】
次に、できたパーミションオブジェクトに対してパーミションチェックを行う。パーミションチェックには例えばjava.security.AccessController#checkPermission()を使う。もし指定のターゲットに対して指定のアクションの許可が出ていなかったら例外が発生し、許可が出ていたら例外が発生しない(ステップ74)。次に、上述のOutputStreamにパーミションチェックの結果を書き込む(ステップ75,76)。例えば、もし整数の0をOKであると決めておけば、例外が出なければ0、出たら0以外を書き込む。最後に再び一行入力待ちに戻る(ステップ71)。ステップ71でもしホスト機械語コード40’のプロセスが終了したなどの原因で一行読み込みが失敗した時にはループを抜ける、すなわち終了する。
【0034】
図8は本発明の第1の実施形態に係るホスト機械語コードの制御の動作をさらに詳しく説明するタイムチャートである。具体的には図3に示したJAVAアプリケーション30における「ホスト機械語コードの制御」(ステップ34)および「ホスト機械語コードの終了の検知」(ステップ35)に係る動作を詳しく説明するものである。図8に示す例は、JAVAフレームワーク20がJAVAアプリケーション30を停止しようとした時、JAVAアプリケーション30が子プロセスであるホスト機械語コード40’を停止するものである。
【0035】
JAVAフレームワーク20がJAVAアプリケーション30を停止したい場合、OSGiフレームワークならばorg.osgi.framework.Bundle#stop()を呼び出す(T21)。するとJAVAアプリケーション30がホスト機械語コード40’のプロセスを停止させる(T22)。これには上述の通信経路のOutputStreamに、あらかじめホスト機械語コード40’との間で決められた形式のデータを書き込む。例えば、終了コマンドを”stop”という文字列と決め、”stop”という文字列を送ればホスト機械語コード40’のプロセスが停止するように構成する。
【0036】
JAVAアプリケーション30によるホスト機械語コード40’のプロセス停止の検知はjava.lang.Process#waitFor()を使えばよい。このメソッドはホスト機械語コード40’のプロセスが実行している間はブロックされ、ホスト機械語コード40’のプロセスが終了すると復帰する。ホスト機械語コード40’のプロセス停止の検知がなされると(T23)、JAVAアプリケーション30は停止し、JAVAアプリケーション30の停止はJAVAフレームワーク20によって検知される(T24)。
【0037】
[第2の実施形態]
本発明の第2の実施形態に係るコンピュータシステム全体の構成は、図1に示した本発明の第1の実施形態に係るコンピュータシステム全体の構成と同じなので割愛する。しかし本発明の第2の実施形態は、第1の実施形態のJAVAアプリケーション30の動作に、さらにいくつかのホスト機械語コードの中からホスト環境(OS、アーキテクチャ)に適合するものを選んで展開、実行する動作が追加されたものである。
【0038】
図9は本発明の第2の実施形態に係るJARファイル構造を示す図である。図9に示すJAR(Java ARchiver)ファイルは、マニフェストファイル51、デジタル署名52、JAVAアプリケーション30にさらに、ホスト機械語コード(x86-Linux用)45とホスト機械語コード(SH-ITRON用)46の二種類のホスト機械語コードを含む。
【0039】
図10(A)は本発明の第2の実施形態におけるホスト機械語コードの展開における動作を説明するためのフローチャートを示す図であり、また図10(B)は本発明の第2の実施形態におけるホスト環境(OS、アーキテクチャ)とホスト機械語コードの対応を示す表である。
【0040】
図10(A)において、JAVAアプリケーション30は、まずデジタル署名の真正性を証明し(ステップ81)、証明されたら次にホスト環境(OS、アーキテクチャ)とホスト機械語コードの対応表に基づいてホスト環境のOSがLinuxでアーキテクチャがx86かを調べ(ステップ82)、ホスト環境のOSがLinuxでアーキテクチャがx86であれば、ステップ83においてa-x86-linuxを展開し、展開ができたら正常終了する(ステップ84)。
【0041】
一方、ステップ82でホスト環境のOSがLinuxでアーキテクチャがx86ではなく、ホスト環境(OS、アーキテクチャ)とホスト機械語コードの対応表に基づいてホスト環境のOSがITRONでアーキテクチャがSHであれば、ステップ86においてa-sh-itronを展開する。そして展開ができたら正常終了する(ステップ84)。上記ステップ81において証明されないときは異常終了する(ステップ87)。また上記ステップ85でホスト環境のOSがITRONでアーキテクチャがSHでなければ異常終了する(ステップ87)。
【図面の簡単な説明】
【0042】
【図1】本発明の第1の実施形態に係るコンピュータシステム全体の構成を示す図である。
【図2】本発明の第1の実施形態に係るJARファイルのデータ構造を示す図である。
【図3】本発明の第1の実施形態に係るコンピュータシステムの動作を説明するフローおよびシーケンスの動作図である。
【図4】本発明の第1の実施形態に係るホスト機械語コードの展開の動作をさらに詳しく説明するフローチャートである。
【図5】本発明の第1の実施形態に係るホスト機械語コードの監視の動作をさらに詳しく説明するタイムチャートである。
【図6】本発明の第1の実施形態に係るラッパーライブラリのfopenの動作を説明するフローチャートである。
【図7】本発明の第1の実施形態に係るJAVAアプリケーションとホスト機械語コードプロセスとの通信ループにおける動作を説明するためのフローチャートである。
【図8】本発明の第1の実施形態に係るホスト機械語コードの制御の動作をさらに詳しく説明するタイムチャートである。
【図9】本発明の第2の実施形態に係るJARファイルのデータ構造を示す図である。
【図10A】本発明の第2の実施形態におけるホスト機械語コードの展開における動作を説明するためのフローチャートを示す図である。
【図10B】本発明の第2の実施形態におけるホスト環境(OS、アーキテクチャ)とホスト機械語コードの対応を示す表である。
【符号の説明】
【0043】
10 JAVA VM(JAVA仮想マシン)
20 JAVAフレームワーク
30 JAVAアプリケーション
40 ホスト機械語コード(展開前)
41 メインプログラム
42〜44 プラグイン
45 ホスト機械語コード(x86-Linux用)
46 ホスト機械語コード(SH-ITRON用)
40’ ホスト機械語コード(展開後)
50 JARファイル
51 マニフェストファイル
52 デジタル署名
60 ラッパーライブラリ
【技術分野】
【0001】
本発明は、JARファイル(JAVA(登録商標)プログラム用書庫ファイル)に含まれるホスト機械語コードをJAVA言語で書かれたプログラムを用いて展開、実行、監視・制御するプログラム、方法およびシステムに関わる。なお、JAVAは、サン・マイクロシステムズ・インコーポレーテッドの登録商標である。
【背景技術】
【0002】
JARファイル(Java ARchiver)は、普及しているZIPファイル形式に基づくファイル形式であり、多数のファイルを1つにまとめるために使用されるものである。そしてJARファイルは、基本的にはオプションのMETA-INFディレクトリを格納するZIPファイルとして認識されているものである。なお詳しくは、下記のURLを参照されたい。
「JSR 200: Network Transfer Format for JavaTM Archives」
http://jcp.org/en/jsr/detail?id=200(閲覧確認2006.02.09)
【0003】
またホスト機械語コードの実行について、下記に示す特許文献1を関連する技術文献として挙げることができる。特許文献1は、JAVAアプリケーションをコンピュータ・システムにインストールする方法およびシステムについて記している。
【特許文献1】特開平10−222349号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
JAVA言語は周知のように実行環境がホストに依存しないという利点から普及しており、特にネットワークを介したアプリケーションに利用されている。JAVA実行環境は、JAVAプログラムの書庫ファイルであるJARファイルを、HTTP(Hypertext Transfer Protocol)などのプロトコルを用いて、ネットワーク越しにダウンロードし、ホストマシン上のJAVA仮想マシン(JAVA VMとも称す)で実行する機能がある。
【0005】
このようなJAVAプログラムのネットワーク配信技術にはOSGi(http://www.osgi.org/参照)のような業界団体で標準化されているものもある。一方、すでにC言語などで書かれたプログラムがあって、労力、資金の面でJAVA言語に移植するのが困難であり、JAVA実行環境のサポートしないホストマシン固有の機能を使いたいという要請があり、またホスト機械語コードはパフォーマンスが良い、などの理由でホスト機械語コードを使いたいという要求もある。
【0006】
しかしホスト機械語コードのネットワーク配信技術は、JAVAプログラムのネットワーク配信技術と比較して標準化や普及が遅れている。また、一つのホストマシンにJAVAプログラム用とホスト機械語コード用の配信システムを備えることは冗長で不経済にもなる。
【0007】
ところで現状では配信されたホスト機械語コードを実行する際には、セキュリティの問題がある。すなわち配信されたJAVAプログラムがJAVAのセキュリティマネージャの存在のもとで実行される場合、ホストのリソースなどへのアクセス制限をかけることができるが、ホスト機械語コードの実行においてJAVAのセキュリティマネージャに相当するしくみは無いという問題点がある。
【0008】
本発明の目的は、アプリケーション型プログラム(JAVAプログラム)の配信の仕組みを使って書庫ファイルに含まれるホスト機械語コードを展開、実行、監視・制御することが可能なプログラム、方法およびシステムを提供することである。また、ホスト機械語コードの実行中の動作を監視してセキュリティを確保することが可能なプログラム、方法およびシステムを提供することである。
【課題を解決するための手段】
【0009】
本発明のプログラムは、ホスト機械語コードおよび該ホスト機械語コードを展開し実行するアプリケーション型プログラムを書庫ファイルに含み、コンピュータに、仮想マシンを自プラットフォーム上に生成し動作させる機能、前記仮想マシン上で動作し前記書庫ファイル中の前記アプリケーション型プログラムを読み込んで実行制御する機能、実行制御された前記アプリケーション型プログラムと前記ホスト機械語コードのプロセスとの間で通信を行う機能、および、実行制御された前記アプリケーション型プログラムが前記ホスト機械語コードを監視・制御する機能、を実現させることを特徴とする。
【0010】
また本発明のプログラムは、ホスト機械語コードおよび該ホスト機械語コードを展開し実行するアプリケーション型プログラムを書庫ファイルに含み、コンピュータに、仮想マシンを自プラットフォーム上に生成し動作させる機能、前記仮想マシン上で動作し前記書庫ファイル中の前記アプリケーション型プログラムを読み込んで実行制御する機能、実行制御された前記アプリケーション型プログラムと前記ホスト機械語コードのプロセスとの間で通信を行う機能、実行制御された前記アプリケーション型プログラムが前記ホスト機械語コードを監視・制御する機能、前記ホスト機械語コードにホストのリソースに直接アクセスする標準ライブラリ関数をラップするラッパーライブラリを強制的にリンクさせる機能、および、前記ホスト機械語コードのプロセスからのセキュリティ問い合わせに対し前記仮想マシンのセキュリティポリシーに従って許可/不許可を返す機能、を実現させることを特徴とする。
【0011】
また本発明のプログラムは、ホスト機械語コード、および、前記書庫ファイルのデジタル署名が証明されたとき及びホスト環境と前記ホスト機械語コードとが適合したとき若しくはいくつかのホスト環境に適合する前記ホスト機械語コードの中からそのホストの環境に適合するホスト機械語コードを選択できたとき、前記ホスト機械語コードを展開し実行するアプリケーション型プログラムを書庫ファイルに含み、コンピュータに、仮想マシンを自プラットフォーム上に生成し動作させる機能、前記仮想マシン上で動作し前記書庫ファイル中の前記アプリケーション型プログラムを読み込んで実行制御する機能、実行制御された前記アプリケーション型プログラムと前記ホスト機械語コードのプロセスとの間で通信を行う機能、実行制御された前記アプリケーション型プログラムが前記ホスト機械語コードを監視・制御する機能、前記ホスト機械語コードにホストのリソースに直接アクセスする標準ライブラリ関数をラップするラッパーライブラリを強制的にリンクさせる機能、および、前記ホスト機械語コードのプロセスからのセキュリティ問い合わせに対し前記仮想マシンのセキュリティポリシーに従って許可/不許可を返す機能、を実現させることを特徴とする。
【発明の効果】
【0012】
本発明によれば、アプリケーション型プログラム(JAVAプログラム)の配信機能を利用して書庫ファイル(JARファイル)に含まれるホスト機械語コードの配信、展開、実行ができる。また、アプリケーション型プログラム(JAVAプログラム)からホスト機械語コードの実行中の制御、および、実行中の動作を監視することができる。さらに、書庫ファイル(JARファイル)のデジタル署名が証明されたとき及びホスト環境とホスト機械語コードとが適合したとき若しくはいくつかのホスト環境に適合するホスト機械語コードの中からそのホストの環境に適合するホスト機械語コードを選択できたとき、ホスト機械語コードを展開し実行することができる。
【発明を実施するための最良の形態】
【0013】
以下、本発明の実施の形態を、図面を参照しながら説明する。
[第1の実施形態]
図1は本発明の第1の実施形態に係るコンピュータシステム全体の構成を示す図である。図1の全体構成図において本発明の第1の実施形態に係るコンピュータシステムは、JAVA仮想マシン(JAVA VM)10、JAVAフレームワーク20、JAVAアプリケーション30、ホスト機械語コード40,40’、JAVAアプリケーション30とホスト機械語コード40を含むJARファイル50、および、ラッパーライブラリ60の各機能ブロックで構成され、各機能ブロックを構成するプログラムによりホスト機械語コードを展開、実行、監視・制御する。なおホスト機械語コード40はJAVAアプリケーション30により展開されてホスト機械語コード40’となる。またラッパーライブラリ60は、JAVA VM10がインストールされている自プラットフォームに一緒にインストールされていても良いし、またはJARファイル50の中に持っていても良い。またJAVAは、サン・マイクロシステムズ・インコーポレーテッドの登録商標である。
【0014】
JAVAフレームワーク20は、JAVA VM10上で動作するJAVAプログラムであり、JAVAフレームワーク20上でさらに1個以上のJAVAアプリケーションを動作させることができる。JAVAフレームワーク20には、たとえばOSGiサービスプラットフォームに準拠したOSGiフレームワークなどがある。
【0015】
ホスト機械語コード40は初期状態では圧縮されてJARファイル50に格納されており、JAVAアプリケーション30により展開される。
JAVAアプリケーション30はJAVAフレームワーク20により制御される。JAVAフレームワーク20としてOSGiフレームワークを使用する場合、バンドルと呼ばれるJAVAアプリケーションは当該フレームワークによりインストール、アンインストール、スタート、ストップ、アップデートを行うことができる。
【0016】
展開されたホスト機械語コード40’は、JAVAアプリケーション30から別プロセスとして起動される。起動されるとき、JAVAアプリケーション30との間に相互の通信経路を作る。例えば、JAVAクラスライブラリのjava.lang.Runtime#exec()により起動されると、java.lang.Processオブジェクトがホスト機械語コード40’のハンドルとして返される。このハンドルによって通信経路を作ることができる。JAVAアプリケーション30がホスト機械語コード40’を制御するのに、この通信経路を通じて行う。
【0017】
ラッパーライブラリ60は、ホスト機械語コード40’が起動される時に強制的にホスト機械語コード40’にリンクさせられ、Cの標準ライブラリをラップする。ホスト機械語コード40’がラップされたライブラリ関数を呼び出すと、最初にラッパーライブラリ60の関数が呼び出される。ラッパー関数はその呼び出しが許可されるかどうか、通信経路およびJAVAフレームワーク20を通じてJAVA VM10に問い合わせる。JAVA VM10は指定されたセキュリティポリシに従って許可または不許可をJAVAフレームワーク20および通信経路を通じてラッパー関数に返す。許可の場合ラッパー関数は、標準ライブラリ関数を呼び出し、結果をホスト機械語コード40’に返す。このようにしてホスト機械語コード40’の動作を監視する(これについては図5の説明で再説する)。
【0018】
図2は、本発明の第1の実施形態に係るJARファイルのデータ構造を示す図である。図2に示すJARファイルには、マニフェストファイル51、デジタル署名52、JAVAアプリケーション30、ホスト機械語コード40が含まれている。そして図2に示すホスト機械語コード40としては、メインのプログラム(bin/musicplayer)41と、メインのプログラム41が動的にリンクするプラグイン(lib/libmpg.so)42、プラグイン(lib/libwav.so)43及びプラグイン(lib/libmidi.so)44とが含まれている。
【0019】
図3は本発明の第1の実施形態に係るコンピュータシステムの動作を説明するフローおよびシーケンスの動作図である。図3においてまず、JAVAフレームワーク20はユーザの操作などに応じてJARファイル50を読み込む(ステップ21)。例えばネットワークからダウンロードしたり、ローカルファイルシステムから読み込んだりする。
【0020】
次にJAVAフレームワーク20はJARファイル50の読み込みが終了するとJARファイル50中の、マニフェストファイル51で指定されたJAVAアプリケーション30の動作を開始する(ステップ22、T1)。JAVAアプリケーション30はまずホスト機械語コード40の展開を行う(ステップ31)。展開にあたりJAVAフレームワーク20はファイルハンドルをJAVAアプリケーション30に与える(ステップ23、T2)。
【0021】
図4は本発明の第1の実施形態に係るホスト機械語コード40の展開の動作をさらに詳しく示したフローチャートである。図4においてJAVAアプリケーション30は、まずデジタル署名の真正性を証明し(ステップ1)、証明されたら次にホスト環境(OS、アーキテクチャ)にホスト機械語コードが適合するかどうか調べ(ステップ2)、適合する場合は展開を行う(ステップ3)。そして展開ができたら正常終了する(ステップ4)。上記ステップ1において証明されないときは異常終了する(ステップ5)。また上記ステップ2で適合しない場合は同じく異常終了する(ステップ5)。
【0022】
上記ステップ2におけるOSとアーキテクチャの適合検査の例を具体的に説明する。例えば、JAVAフレームワーク20としてOSGiフレームワークを使う場合で、JARファイル50に含まれるホスト機械語コードlib/libmpg.soが、OSがLinux、アーキテクチャがx86に適合する場合には、図2のマニフェストファイル51にこれらを
Bundle-NativeCode:/lib/libmpg.so;
osname=linux;
processor=x86
と記述しておくと、JAVAアプリケーション30はこれらの値をプロパティorg.osgi.framework.os.name, org.osgi.framework.processorで参照できる。またJAVA VM10の動作している環境のOSとアーキテクチャはJAVA VM10のプロパティのos.nameとos.archから参照できる。これらのプロパティを比較し、OSとアーキテクチャが一致したならば適合性ありと判定する(図4のステップ2)。
【0023】
OSGiフレームワークをJAVAフレームワーク20として使った場合、JAVAアプリケーション30はosg.osgi.framework.Bundle#getResource()およびjava.net.URL#openStream()を用いて、ホスト機械語コードを読み込むためのハンドル(java.io.InputStreamのオブジェクト)を取得する。また、org.osgi.framework.BundleContext#getDataFile()より書き込むためのハンドル(java.io.Fileのオブジェクト)を取得する。これらから読み込み書き出しを行うことで、ホスト機械語コード40の展開を行う(図3のステップ32)。
【0024】
上記ではホスト機械語コード40がJAVAアプリケーション30からのみ使用される場合の展開方法について述べた。上記例では書き込みはJAVAフレームワーク20が与えたディレクトリに対して行われ、それは相対パスで与えられる。一方、OSにインストールされるホスト機械語コードの場合、JAVAアプリケーション30は上記getDataFile()ではなく、絶対パスを伴ったjava.io.Fileのコンストラクタによって書き込みハンドルを取得する。
【0025】
図3に戻る。次にJAVAアプリケーション30はjava.lang.Runtime#exec()を用いてホスト機械語コード40’を実行する(ステップ33、T3)。この時、実行されたホスト機械語コード40’がラッパーライブラリ60を最初にロードするように指定する(ステップ41)。OSがLinuxの場合、環境変数LD_PRELOADを与えると、指定されたライブラリがすべてのライブラリに先立ってロードされる。そこでLD_PRELOADにラッパーライブラリ60を指定する。java.lang.Runtime#exec()の戻り値はjava.lang.Processのオブジェクトだが、これは実行されたホスト機械語コード40’のプロセスへのハンドルとなる。
【0026】
次にJAVAアプリケーション30はホスト機械語コード40’の制御・監視を行う(ステップ34)。そのために通信経路を作る。
例として、通信経路をUnix(登録商標)のパイプで実現する例を述べる。
InputStream is = process.getInputStream();
OutputStream os = process.getOutputStream();
【0027】
ここでprocessは前述の実行されたホスト機械語コードプロセスへのハンドルである。InputStreamとOutputStreamはそれぞれ読み出し、書き込みハンドルである。これらはホスト機械語コードのプロセスの標準入出力とつながる。すなわちJAVAアプリケーション30からOutputStreamを通じて書き出したデータはホスト機械語コード40’の標準入力から読み込むことができ、またホスト機械語コード40’の標準出力へ書き出したデータはJAVAアプリケーション30のInputStreamから読むことができる。これを使ってJAVAアプリケーション30とホスト機械語コード40’が相互に通信する。
【0028】
図5は本発明の第1の実施形態に係るホスト機械語コードの監視の動作をさらに詳しく説明するタイムチャートである。具体的には、図3に示したJAVAアプリケーション30における「ホスト機械語コードの監視」(ステップ34)に係る動作を詳しく説明するものである。図5においてまず、ホスト機械語コード40’がラップされたライブラリ関数を呼び出す(T11)と、最初にラッパーライブラリ60の関数が呼び出される。例えばファイルをオープンする関数であるfopen()がラップされているとすると、最初にラッパーライブラリ60のfopen()が呼び出される。fopen()は引数にオープンするファイルの名前とモード(読み込みか、書き込みか、読み書きかなど)をとる。
【0029】
次にラッパーライブラリ60のfopen()はこのファイルがこのモードでオープン可能かどうか、上述した通信経路を通じてJAVAアプリケーション30に、さらにそこからJAVAフレームワーク20を通じてJAVA VM10に問い合わせる(T12)。JAVA VM10はパーミションチェックを行って許可または不許可をJAVAフレームワーク20を介してJAVAアプリケーション30に(T13)、さらに上述した通信経路を通じてラッパーライブラリ60のfopen()に返す(T14)。なお、図5では、JAVAアプリケーション30でパーミションチェックを行うように見えるが、実際のところは図5には示されていないJAVAフレームワーク20を介してJAVA VM10に問い合わせることに注意を要する。そしてパーミション許可の場合、ラッパーライブラリ60のfopen()はさらに標準ライブラリのfopen()を呼び出し、結果をホスト機械語コード40’に返す(T15)。またパーミション不許可の場合(T16)、ラッパーライブラリ60のfopen()はホスト機械語コード40’に失敗を返す(T17)。
【0030】
以上の動作を図3に戻って説明すると、ホスト機械語コード40が実行される(ステップ42)と、最初にラッパーライブラリ60のfopen()が呼び出され、次いでラッパーライブラリ60のfopen()は、オープン可能かどうか、通信経路を介してJAVAアプリケーション30にさらにJAVAフレームワーク20を通じてJAVA VM10に問い合わせる(T4)。JAVA VM10はセキュリティポリシーによるパーミションチェックを行って許可または不許可をJAVAフレームワーク20に返し、JAVAフレームワーク20はセキュリティポリシーに基づく許可または不許可をJAVAアプリケーション30に与える(ステップ24、T5)。JAVAアプリケーション30は通信経路を介してラッパーライブラリ60のfopen()に返す(T4)。これによりJAVAアプリケーション30はホスト機械語コードの制御・監視を行う(ステップ34)。
【0031】
図6は本発明の第1の実施形態に係るラッパーライブラリのfopenの動作を説明するフローチャートである。fopenは呼び出し時にファイル名と読み出しモード“r”を指定して開始する(ステップ61)。fopenはファイル操作なので、パーミションクラス名にjava.io.FilePermissionを指定し、fopen呼び出し時に与えられたファイル名とモードを指定して、JAVAアプリケーション30に問い合せを行い(ステップ62)、JAVAアプリケーション30から結果を取得する(ステップ63)。問い合せと結果取得は上述の通信経路を介して行う。パーミションの結果がOKならば(ステップ64)、標準ライブラリをオープンし、標準ライブラリのfopenを呼び出し(ステップ65)、ホスト機械語コード40’にその結果を返す(ステップ66)。パーミションの結果がOKでなければfopenの失敗を示すNULLをホスト機械語コード40’に返す。パーミションの結果は、例えば整数の0をOKであると決めておく。
【0032】
図7は本発明の第1の実施形態に係るJAVAアプリケーションとホスト機械語コードプロセスとの通信ループにおける動作を説明するためのフローチャートである。図7に示す通信ループでの動作フローでは、上述のInputStreamより一行入力されるのを待ち受け、次いで入力された行を語に分割する(ステップ71)。そして最初の語がパーミションクラス名でなければ(ステップ72)、ステップ71の一行入力待ちに戻り、パーミションクラス名であれば(ステップ72)、それに続く語をターゲットとアクションのパラメータとしてパーミションオブジェクトを作る(ステップ73)。文字列からオブジェクトを作るにはJAVAのリフレクション機能を使う。
【0033】
次に、できたパーミションオブジェクトに対してパーミションチェックを行う。パーミションチェックには例えばjava.security.AccessController#checkPermission()を使う。もし指定のターゲットに対して指定のアクションの許可が出ていなかったら例外が発生し、許可が出ていたら例外が発生しない(ステップ74)。次に、上述のOutputStreamにパーミションチェックの結果を書き込む(ステップ75,76)。例えば、もし整数の0をOKであると決めておけば、例外が出なければ0、出たら0以外を書き込む。最後に再び一行入力待ちに戻る(ステップ71)。ステップ71でもしホスト機械語コード40’のプロセスが終了したなどの原因で一行読み込みが失敗した時にはループを抜ける、すなわち終了する。
【0034】
図8は本発明の第1の実施形態に係るホスト機械語コードの制御の動作をさらに詳しく説明するタイムチャートである。具体的には図3に示したJAVAアプリケーション30における「ホスト機械語コードの制御」(ステップ34)および「ホスト機械語コードの終了の検知」(ステップ35)に係る動作を詳しく説明するものである。図8に示す例は、JAVAフレームワーク20がJAVAアプリケーション30を停止しようとした時、JAVAアプリケーション30が子プロセスであるホスト機械語コード40’を停止するものである。
【0035】
JAVAフレームワーク20がJAVAアプリケーション30を停止したい場合、OSGiフレームワークならばorg.osgi.framework.Bundle#stop()を呼び出す(T21)。するとJAVAアプリケーション30がホスト機械語コード40’のプロセスを停止させる(T22)。これには上述の通信経路のOutputStreamに、あらかじめホスト機械語コード40’との間で決められた形式のデータを書き込む。例えば、終了コマンドを”stop”という文字列と決め、”stop”という文字列を送ればホスト機械語コード40’のプロセスが停止するように構成する。
【0036】
JAVAアプリケーション30によるホスト機械語コード40’のプロセス停止の検知はjava.lang.Process#waitFor()を使えばよい。このメソッドはホスト機械語コード40’のプロセスが実行している間はブロックされ、ホスト機械語コード40’のプロセスが終了すると復帰する。ホスト機械語コード40’のプロセス停止の検知がなされると(T23)、JAVAアプリケーション30は停止し、JAVAアプリケーション30の停止はJAVAフレームワーク20によって検知される(T24)。
【0037】
[第2の実施形態]
本発明の第2の実施形態に係るコンピュータシステム全体の構成は、図1に示した本発明の第1の実施形態に係るコンピュータシステム全体の構成と同じなので割愛する。しかし本発明の第2の実施形態は、第1の実施形態のJAVAアプリケーション30の動作に、さらにいくつかのホスト機械語コードの中からホスト環境(OS、アーキテクチャ)に適合するものを選んで展開、実行する動作が追加されたものである。
【0038】
図9は本発明の第2の実施形態に係るJARファイル構造を示す図である。図9に示すJAR(Java ARchiver)ファイルは、マニフェストファイル51、デジタル署名52、JAVAアプリケーション30にさらに、ホスト機械語コード(x86-Linux用)45とホスト機械語コード(SH-ITRON用)46の二種類のホスト機械語コードを含む。
【0039】
図10(A)は本発明の第2の実施形態におけるホスト機械語コードの展開における動作を説明するためのフローチャートを示す図であり、また図10(B)は本発明の第2の実施形態におけるホスト環境(OS、アーキテクチャ)とホスト機械語コードの対応を示す表である。
【0040】
図10(A)において、JAVAアプリケーション30は、まずデジタル署名の真正性を証明し(ステップ81)、証明されたら次にホスト環境(OS、アーキテクチャ)とホスト機械語コードの対応表に基づいてホスト環境のOSがLinuxでアーキテクチャがx86かを調べ(ステップ82)、ホスト環境のOSがLinuxでアーキテクチャがx86であれば、ステップ83においてa-x86-linuxを展開し、展開ができたら正常終了する(ステップ84)。
【0041】
一方、ステップ82でホスト環境のOSがLinuxでアーキテクチャがx86ではなく、ホスト環境(OS、アーキテクチャ)とホスト機械語コードの対応表に基づいてホスト環境のOSがITRONでアーキテクチャがSHであれば、ステップ86においてa-sh-itronを展開する。そして展開ができたら正常終了する(ステップ84)。上記ステップ81において証明されないときは異常終了する(ステップ87)。また上記ステップ85でホスト環境のOSがITRONでアーキテクチャがSHでなければ異常終了する(ステップ87)。
【図面の簡単な説明】
【0042】
【図1】本発明の第1の実施形態に係るコンピュータシステム全体の構成を示す図である。
【図2】本発明の第1の実施形態に係るJARファイルのデータ構造を示す図である。
【図3】本発明の第1の実施形態に係るコンピュータシステムの動作を説明するフローおよびシーケンスの動作図である。
【図4】本発明の第1の実施形態に係るホスト機械語コードの展開の動作をさらに詳しく説明するフローチャートである。
【図5】本発明の第1の実施形態に係るホスト機械語コードの監視の動作をさらに詳しく説明するタイムチャートである。
【図6】本発明の第1の実施形態に係るラッパーライブラリのfopenの動作を説明するフローチャートである。
【図7】本発明の第1の実施形態に係るJAVAアプリケーションとホスト機械語コードプロセスとの通信ループにおける動作を説明するためのフローチャートである。
【図8】本発明の第1の実施形態に係るホスト機械語コードの制御の動作をさらに詳しく説明するタイムチャートである。
【図9】本発明の第2の実施形態に係るJARファイルのデータ構造を示す図である。
【図10A】本発明の第2の実施形態におけるホスト機械語コードの展開における動作を説明するためのフローチャートを示す図である。
【図10B】本発明の第2の実施形態におけるホスト環境(OS、アーキテクチャ)とホスト機械語コードの対応を示す表である。
【符号の説明】
【0043】
10 JAVA VM(JAVA仮想マシン)
20 JAVAフレームワーク
30 JAVAアプリケーション
40 ホスト機械語コード(展開前)
41 メインプログラム
42〜44 プラグイン
45 ホスト機械語コード(x86-Linux用)
46 ホスト機械語コード(SH-ITRON用)
40’ ホスト機械語コード(展開後)
50 JARファイル
51 マニフェストファイル
52 デジタル署名
60 ラッパーライブラリ
【特許請求の範囲】
【請求項1】
ホスト機械語コードおよび該ホスト機械語コードを展開し実行するアプリケーション型プログラムを書庫ファイルに含み、コンピュータに、仮想マシンを自プラットフォーム上に生成し動作させる機能、前記仮想マシン上で動作し前記書庫ファイル中の前記アプリケーション型プログラムを読み込んで実行制御する機能、実行制御された前記アプリケーション型プログラムと前記ホスト機械語コードのプロセスとの間で通信を行う機能、および、実行制御された前記アプリケーション型プログラムが前記ホスト機械語コードを監視・制御する機能、を実現させるためのプログラム。
【請求項2】
ホスト機械語コードおよび該ホスト機械語コードを展開し実行するアプリケーション型プログラムを書庫ファイルに含み、コンピュータに、仮想マシンを自プラットフォーム上に生成し動作させる機能、前記仮想マシン上で動作し前記書庫ファイル中の前記アプリケーション型プログラムを読み込んで実行制御する機能、実行制御された前記アプリケーション型プログラムと前記ホスト機械語コードのプロセスとの間で通信を行う機能、実行制御された前記アプリケーション型プログラムが前記ホスト機械語コードを監視・制御する機能、前記ホスト機械語コードにホストのリソースに直接アクセスする標準ライブラリ関数をラップするラッパーライブラリを強制的にリンクさせる機能、および、前記ホスト機械語コードのプロセスからのセキュリティ問い合わせに対し前記仮想マシンのセキュリティポリシーに従って許可/不許可を返す機能、を実現させるためプログラム。
【請求項3】
ホスト機械語コード、および、前記書庫ファイルのデジタル署名が証明されたとき及びホスト環境と前記ホスト機械語コードとが適合したとき若しくはいくつかのホスト環境に適合する前記ホスト機械語コードの中からそのホストの環境に適合するホスト機械語コードを選択できたとき、前記ホスト機械語コードを展開し実行するアプリケーション型プログラムを書庫ファイルに含み、コンピュータに、仮想マシンを自プラットフォーム上に生成し動作させる機能、前記仮想マシン上で動作し前記書庫ファイル中の前記アプリケーション型プログラムを読み込んで実行制御する機能、実行制御された前記アプリケーション型プログラムと前記ホスト機械語コードのプロセスとの間で通信を行う機能、実行制御された前記アプリケーション型プログラムが前記ホスト機械語コードを監視・制御する機能、前記ホスト機械語コードにホストのリソースに直接アクセスする標準ライブラリ関数をラップするラッパーライブラリを強制的にリンクさせる機能、および、前記ホスト機械語コードのプロセスからのセキュリティ問い合わせに対し前記仮想マシンのセキュリティポリシーに従って許可/不許可を返す機能、を実現させるためプログラム。
【請求項4】
ホスト機械語コードおよび該ホスト機械語コードを展開し実行するアプリケーション型プログラムを書庫ファイルに含み、仮想マシンを自プラットフォーム上に生成し動作させるステップと、前記仮想マシン上で動作し前記書庫ファイル中の前記アプリケーション型プログラムを読み込んで実行制御するステップと、実行制御された前記アプリケーション型プログラムと前記ホスト機械語コードのプロセスとの間で通信を行うステップと、実行制御された前記アプリケーション型プログラムが前記ホスト機械語コードを監視・制御するステップと、前記ホスト機械語コードにホストのリソースに直接アクセスする標準ライブラリ関数をラップするラッパーライブラリを強制的にリンクさせるステップと、前記ホスト機械語コードのプロセスからのセキュリティ問い合わせに対し前記仮想マシンのセキュリティポリシーに従って許可/不許可を返すステップを含んでなるホスト機械語コードを展開、実行、監視・制御する方法。
【請求項5】
ホスト機械語コードおよび該ホスト機械語コードを展開し実行するアプリケーション型プログラムを含む書庫ファイルと、自プラットフォーム上に生成され動作可能にされる仮想マシンと、該仮想マシン上で前記書庫ファイル中の前記アプリケーション型プログラムを読み込んで前記アプリケーション型プログラムを実行制御する制御手段を備え、さらに、
前記制御手段により実行制御される前記アプリケーション型プログラムと該アプリケーション型プログラムにより展開され実行された前記ホスト機械語コードのプロセスとの間で通信を可能とする手段と、
前記制御手段により実行制御される前記アプリケーション型プログラムが展開し実行した前記ホスト機械語コードを監視・制御する手段と、
前記ホスト機械語コードにホストのリソースに直接アクセスする標準ライブラリ関数をラップするラッパーライブラリを強制的にリンクさせる手段と、
前記ホスト機械語コードのプロセスからのセキュリティ問い合わせに対し前記仮想マシンのセキュリティポリシーに従って許可/不許可を返す手段と、
を備えることを特徴とするホスト機械語コードを展開、実行、監視・制御するシステム。
【請求項1】
ホスト機械語コードおよび該ホスト機械語コードを展開し実行するアプリケーション型プログラムを書庫ファイルに含み、コンピュータに、仮想マシンを自プラットフォーム上に生成し動作させる機能、前記仮想マシン上で動作し前記書庫ファイル中の前記アプリケーション型プログラムを読み込んで実行制御する機能、実行制御された前記アプリケーション型プログラムと前記ホスト機械語コードのプロセスとの間で通信を行う機能、および、実行制御された前記アプリケーション型プログラムが前記ホスト機械語コードを監視・制御する機能、を実現させるためのプログラム。
【請求項2】
ホスト機械語コードおよび該ホスト機械語コードを展開し実行するアプリケーション型プログラムを書庫ファイルに含み、コンピュータに、仮想マシンを自プラットフォーム上に生成し動作させる機能、前記仮想マシン上で動作し前記書庫ファイル中の前記アプリケーション型プログラムを読み込んで実行制御する機能、実行制御された前記アプリケーション型プログラムと前記ホスト機械語コードのプロセスとの間で通信を行う機能、実行制御された前記アプリケーション型プログラムが前記ホスト機械語コードを監視・制御する機能、前記ホスト機械語コードにホストのリソースに直接アクセスする標準ライブラリ関数をラップするラッパーライブラリを強制的にリンクさせる機能、および、前記ホスト機械語コードのプロセスからのセキュリティ問い合わせに対し前記仮想マシンのセキュリティポリシーに従って許可/不許可を返す機能、を実現させるためプログラム。
【請求項3】
ホスト機械語コード、および、前記書庫ファイルのデジタル署名が証明されたとき及びホスト環境と前記ホスト機械語コードとが適合したとき若しくはいくつかのホスト環境に適合する前記ホスト機械語コードの中からそのホストの環境に適合するホスト機械語コードを選択できたとき、前記ホスト機械語コードを展開し実行するアプリケーション型プログラムを書庫ファイルに含み、コンピュータに、仮想マシンを自プラットフォーム上に生成し動作させる機能、前記仮想マシン上で動作し前記書庫ファイル中の前記アプリケーション型プログラムを読み込んで実行制御する機能、実行制御された前記アプリケーション型プログラムと前記ホスト機械語コードのプロセスとの間で通信を行う機能、実行制御された前記アプリケーション型プログラムが前記ホスト機械語コードを監視・制御する機能、前記ホスト機械語コードにホストのリソースに直接アクセスする標準ライブラリ関数をラップするラッパーライブラリを強制的にリンクさせる機能、および、前記ホスト機械語コードのプロセスからのセキュリティ問い合わせに対し前記仮想マシンのセキュリティポリシーに従って許可/不許可を返す機能、を実現させるためプログラム。
【請求項4】
ホスト機械語コードおよび該ホスト機械語コードを展開し実行するアプリケーション型プログラムを書庫ファイルに含み、仮想マシンを自プラットフォーム上に生成し動作させるステップと、前記仮想マシン上で動作し前記書庫ファイル中の前記アプリケーション型プログラムを読み込んで実行制御するステップと、実行制御された前記アプリケーション型プログラムと前記ホスト機械語コードのプロセスとの間で通信を行うステップと、実行制御された前記アプリケーション型プログラムが前記ホスト機械語コードを監視・制御するステップと、前記ホスト機械語コードにホストのリソースに直接アクセスする標準ライブラリ関数をラップするラッパーライブラリを強制的にリンクさせるステップと、前記ホスト機械語コードのプロセスからのセキュリティ問い合わせに対し前記仮想マシンのセキュリティポリシーに従って許可/不許可を返すステップを含んでなるホスト機械語コードを展開、実行、監視・制御する方法。
【請求項5】
ホスト機械語コードおよび該ホスト機械語コードを展開し実行するアプリケーション型プログラムを含む書庫ファイルと、自プラットフォーム上に生成され動作可能にされる仮想マシンと、該仮想マシン上で前記書庫ファイル中の前記アプリケーション型プログラムを読み込んで前記アプリケーション型プログラムを実行制御する制御手段を備え、さらに、
前記制御手段により実行制御される前記アプリケーション型プログラムと該アプリケーション型プログラムにより展開され実行された前記ホスト機械語コードのプロセスとの間で通信を可能とする手段と、
前記制御手段により実行制御される前記アプリケーション型プログラムが展開し実行した前記ホスト機械語コードを監視・制御する手段と、
前記ホスト機械語コードにホストのリソースに直接アクセスする標準ライブラリ関数をラップするラッパーライブラリを強制的にリンクさせる手段と、
前記ホスト機械語コードのプロセスからのセキュリティ問い合わせに対し前記仮想マシンのセキュリティポリシーに従って許可/不許可を返す手段と、
を備えることを特徴とするホスト機械語コードを展開、実行、監視・制御するシステム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10A】
【図10B】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10A】
【図10B】
【公開番号】特開2007−213349(P2007−213349A)
【公開日】平成19年8月23日(2007.8.23)
【国際特許分類】
【出願番号】特願2006−32976(P2006−32976)
【出願日】平成18年2月9日(2006.2.9)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.Linux
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
【公開日】平成19年8月23日(2007.8.23)
【国際特許分類】
【出願日】平成18年2月9日(2006.2.9)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.Linux
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
[ Back to top ]