JPH10269082A - アーキテクチャ独立バイナリープログラムを直接実行するシステム、方法及び装置 - Google Patents

アーキテクチャ独立バイナリープログラムを直接実行するシステム、方法及び装置

Info

Publication number
JPH10269082A
JPH10269082A JP9349905A JP34990597A JPH10269082A JP H10269082 A JPH10269082 A JP H10269082A JP 9349905 A JP9349905 A JP 9349905A JP 34990597 A JP34990597 A JP 34990597A JP H10269082 A JPH10269082 A JP H10269082A
Authority
JP
Japan
Prior art keywords
file
code
class
java
object file
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP9349905A
Other languages
English (en)
Inventor
Timothy Marsland
ティモシー・マースランド
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of JPH10269082A publication Critical patent/JPH10269082A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45508Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
    • G06F9/45512Command shells
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

(57)【要約】 【課題】 コンピューター上でアーキテクチャ独立バイ
ナリープログラムを実行するためのシステム、方法及び
装置を提供する。 【解決手段】 オブジェクトファイルが読み出され、ア
ーキテクチャ独立オブジェクトコードがオブジェクトフ
ァイルから抽出される。動的依存情報もオブジェクトフ
ァイルから抽出される。依存情報は解釈プログラムに与
えられ、それはオブジェクトコードを実行するために呼
び出される。オブジェクトファイルは好ましくはアーキ
テクチャ中立形式であり、好ましくはUNIX System V In
terface Definishonに従う作業システム上のアプリケー
ションプログラムによって使用される標準バイナリーイ
ンターフェイスとして定義されるELF形式である。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明はコンピューター上で
アーキテクチャ独立バイナリープログラムを直接実行す
るためのシステム、方法及び装置に関する。特に本発明
はアーキテクチャ独立プログラムを解釈するために使用
された解釈プログラムを識別することなしに及びランタ
イムプログラム呼び出しを決定する必要のあるライブラ
リを指定することなしにアーキテクチャ独立バイナリー
プログラムを呼び出すことをユーザに許可するシステ
ム、方法及び装置に関する。
【0002】
【従来の技術および発明が解決しようとする課題】一般
に、コンピュータープログラムは2つの形のうちの1つ
に記憶されている。第1の形では、プログラムは情報交
換用米国標準コード(ASCII )又は拡張二進化十進コード
(EBCDIC)などのキャラクタコードの文字、数字及び他の
印刷可能なキャラクタの符号化を使用する人間可読ステ
ートメントからなるテキストファイル(原始コード)と
して記憶される。その様なプログラムはコンピューター
によって直接実行されるのではなく、実行されるために
はプログラムが書かれた言語を理解するために書かれた
特別な目的のプログラム(解釈プログラムと呼ばれる)
によって解釈されなければならない。代表的な例とし
て、BASIC(Beginner's All-purpose Symbolic Ins
truction Code)で書かれたプログラムがある。BASI
Cプログラムは代表的には原始形式の解釈プログラムに
提示され、1行ずつ解釈される。
【0003】第2の形では、原始コードファイルはオブ
ジェクトファイルを生産するためにコンパイラによって
処理される。オブジェクトファイルは特定のコンピュー
ターアーキテクチャにだけ意味のある一連のバイナリー
データ(オブジェクトコード)を含み、その場合データ
はその特定のアーキテクチャのための一連の命令を表
す。オブジェクトファイルはコンピューターの記憶装置
にロードされてもよく、命令は(解釈プログラムの必要
なしに)プログラムがロードされるロケーションから命
令を取り出し実行するためにコンピューターに命令する
ことによりコンピューターによって直接実行されてもよ
い。その代わりに、オブジェクトファイルはいくつかの
そのようなオブジェクトファイルから実行可能なプログ
ラムコードを含むファイルを作成するための入力として
のリンカによって使用されてもよい。BASICの例を
使用して、BASIC原始ファイルはターゲットコンピ
ューター上で直接実行可能なオブジェクトファイルを生
産するためにコンパイルされてもよい。
【0004】このアプローチの欠点は、そのようなプロ
グラムが移植性のあるものではないことである。バイナ
リーコードが機械仕様であるので、プログラムは異なっ
たアーキテクチャのコンピューターシステムへ簡単に移
植できない。これは異質環境において単にバイナリーコ
ードの使用を魅力のないものにしてしまう。
【0005】1つのアプローチはバイナリー形式よりも
人間可読テキスト形式のコンピュータープログラムを提
供することであった。解釈プログラムは(バイナリープ
ログラムと区別するために“スクリプト”と呼ばれるこ
とのある)テキストプログラムを読み出すため及びプロ
グラム(そのプログラムはそれ自身内のステートメント
を1つずつ実行する)内のステートメントを解釈するた
めに呼び出される。これは解釈されたBASICプログ
ラムの使用の効果的な第1のアプローチである。このア
プローチの欠点は、テキストステートメントの解釈にお
いてかなりのオーバヘッドがあることである。例えば、
解釈プログラムは各ステートメントが構文上正しく、実
行可能な演算であることを保証するために、各ステート
メントの語彙スキャン及び妥当性検査にかなりの計算資
源を提供しなければならない。この資源の多さはスクリ
プトの使用を魅力のないものにする。
【0006】SunTM MicrosystemsはJavaTMとして知られ
る解決策を生み出した。JavaTMは異質のネットワーク分
散環境のコンテキスト内のアプリケーション開発の課題
に合うように設計された。この課題には最小のシステム
資源を消費し、どんなハードウエア及びソフトウエアプ
ラットフォーム上でも実行でき、かつ動的に拡張できる
アプリケーションの安全な引き渡しが含まれる。異質ネ
ットワーク内の複数のプラットフォーム上で動作するた
めの必要条件は、バイナリー分布、解放、アップグレー
ド、パッチなどの従来の方式を無効にする。その代わ
り、JavaTMシステムはアーキテクチャ中立の、移植性の
ある、動的に適応できる擬似機械コードバイナリー形式
を与える。
【0007】しかしながら、この形式に伴う残りの困難
な点は、ユーザが自分の実行したいプログラムがJavaTM
で書かれてあるか又は自分の計算プラットフォームに適
切な固有バイナリープログラムとして符号化されている
かを知る必要があるということである。もし固有形式で
符号化されているならば、プログラムは直接実行可能で
ある。もしJavaTMクラスファイルとして符号化されてい
るならば、ユーザはファイル内のバイトコードを解釈す
るためにJavaTM解釈プログラムを呼び出さなければなら
ない。
【0008】従って、プログラムが実行されることにな
っている計算プラットフォームと一致する形式でJavaTM
クラスファイルを符号化する方法を提供することが望ま
れる。更に、工業規格形式及び多種の計算プラットフォ
ーム上でのインプリメンテーションに従順な形式にファ
イルを符号化し、これによりファイルがそのようなプラ
ットフォームにまたがって移植可能であることを保証す
ることが望まれる。更に、実行されたファイルの外部に
あるプログラムファイルのロケーションを識別するため
の形式でサポートを提供し、ランタイムでそれらの外部
ファイルの動的な解決を可能にすることが望まれる。
【0009】
【課題を解決するための手段】コンピューター上でアー
キテクチャ独立バイナリープログラムを実行するための
システム、方法及び装置が開示される。オブジェクトフ
ァイルが読み出され、オブジェクトコードがオブジェク
トファイルから抽出される。オブジェクトコードのフィ
ールドはオブジェクトコードが解釈を必要とするアーキ
テクチャ独立オブジェクトコードであるかを決定するた
めに問い合わされる。もしそうであれば、解釈プログラ
ムがアーキテクチャ独立オブジェクトコードを解釈する
ために呼び出される。動的依存情報もまたオブジェクト
ファイルから抽出され、解釈プログラムへ与えられる。
オブジェクトファイルは好ましくはアーキテクチャ中立
形式であり、好ましくはUNIX System V Interface Defi
nitionに従う動作システム上のアプリケーションプログ
ラムによって使用される標準バイナリーインターフェイ
スとして定義されるELF形式である。
【0010】本発明の追加特徴は以下の記述を読んで、
特に添付の図面への参照によって明らかになるだろう。
【0011】前述及び他の目的、側面及び利点は、後述
の図面を参照した本発明の好適な実施例の詳細な記述か
らよく理解されるだろう。
【0012】
【発明の実施の形態】本発明のシステムの好適な実施例
は、SunTM SparcstationTM、UNIXベースのワークス
テーションなどのコンピューター又はIBM PS/
2、アップルマッキントッシュコンピューターなどのパ
ーソナルコンピューターのコンテキストで好ましく実行
される。代表的なハードウエア環境は、図1に示され、
それはマイクロプロセッサなどの中央処理装置(CP
U)10、及びシステムバス12を介して相互に連結さ
れた多数の他のユニットを有する好適な実施例によるワ
ークステーションの典型的なハードウエア構成を図示し
ている。図1に示されるワークステーションはランダム
アクセスメモリ(RAM)14、読み出し専用記憶素子
(ROM)16、ディスク記憶ユニット20などの周辺
装置をバス12と接続するためのI/Oアダプタ18、
キーボード24、マウス26、スピーカー28、マイク
32及び/又はタッチスクリーン(図示せず)などの他
のユーザインターフェース装置をバス12と接続するた
めのユーザインターフェースアダプタ22、ワークステ
ーションを通信ネットワーク(例えばデータ処理ネット
ワーク)と接続するための通信アダプタ34及びバス1
2を表示装置38と接続するための表示アダプタ36を
含む。ワークステーションは典型的にはSunTM Microsys
temsのSolarisTM 又は他のUNIXベースのオペレーテ
ィングシステムなどのオペレーティングシステム、又は
Microsoft Windows Operating System(OS)、IBM
OS/2オペレーティングシステム、アップルコンピ
ューターMACOSなどの他のオペレーティングシステ
ムをそれ自身の上に常駐する。本発明が前述のもの以外
のプラットフォーム及びオペレーティングシステム上で
も実現されることを当業者は理解するであろう。
【0013】JavaTM計算言語及び環境は異質ネットワー
ク環境内で展開されるアプリケーションをサポートする
ように設計されている。そのような環境において、アプ
リケーションは多種のハードウエアアーキテクチャを実
行することが可能でなければならない。この多種のハー
ドウエアプラットフォーム内で、アプリケーションは多
種のオペレーティングシステム上で実行しなければなら
ず、複数プログラミング言語インターフェースと相互運
用しなければならない。多種のオペレーティング環境を
含むために、JavaTMコンパイラはバイトコード、複数の
ハードウエア及びソフトウエアプラットフォームへ効率
よくコードを運ぶように設計されたアーキテクチャ中立
中間形式を含むクラスファイルを生成する。JavaTMの解
釈された性質はバイナリー分布問題及びバージョン問題
の両方を解決する;同じJavaTM言語バイトコードはどん
なプラットフォーム上でも実行する。
【0014】JavaTMは基本言語の仕様に厳密なデータタ
イプの定義を与える。JavaTM仕様は基本データタイプの
大きさ及び算術演算の動きを特定する。その結果、プロ
グラムはどのプラットフォーム上でも同じである。つま
り、ハードウエア及びソフトウエアアーキテクチャにま
たがって互換性のないデータはない。
【0015】JavaTMのアーキテクチャ中立の、移植性の
ある言語環境はJavaTM Virtual Machine(JavaTM仮想計
算機)として公知である。JavaTM Virtual MachineはJa
vaTM言語コンパイラがコードを生成することができる抽
象機械の仕様である。特定のハードウエア及びソフトウ
エアプラットフォームのためのJavaTM Virtual Machine
の特定のインプリメンテーションは、仮想計算機の具体
的な実現を与える。JavaTM Virtual MachineはPOSI
Xインターフェイス仕様(移植性のあるシステムインタ
ーフェイスの工業規格定義)に主として基づく。新しい
アーキテクチャ上でJavaTM Virtual Machineを実現する
ことは、ターゲットプラットフォームがマルチスレッデ
ィングのためのサポートのような基本的な必要条件に合
う限り、比較的簡単な仕事である。
【0016】図2はJavaTMで書かれたサンプルプログラ
ム201を表示している。プログラムはコメント210
を構成する一連の行で始まる。コメントは機能を全く実
行しないステートメント及びファイルを処理するコンパ
イラによって無視されるステートメントである;その目
的はプログラムに関して人間可読文書を与えることであ
る。
【0017】次の2行はクラスステートメント220を
構成する。クラスステートメントはクラスと呼ばれるプ
ログラム構成要素の属性に関する情報を与える。これら
の属性はクラス名(ここでは、“HelloWorldApp ”)、
記憶属性(ここでは、public, static, void及びmai
n)、及びクラスによって受諾されるパラメタの名前、
数及びタイプ(ここでは1つのパラメタをデータタイプ
“String[]”の“args”と名付ける)を含む。
【0018】次の行230は外部プログラムの呼び出し
を示す。ここでは、JavaTMプログラム201は“Syste
m.out.println”と名付けられた他のプログラム(“met
hod”と呼ばれる)を呼び出し、ストリング“Hello, Wo
rld! ”へそれを渡す。System.out.printlnは方法であ
り、その機能はそれに渡されたテキスト行を表示するこ
とである。HelloWorldApp クラスが実行される時、テキ
スト“Hello, World! ”がユーザのスクリーン上に表示
される。
【0019】最後の行240はコメントステートメント
の他の形である。ここで示される例は例示目的のためだ
けにある。JavaTM言語はJoy & Steele Goslingの“The
JavaTM Language Specification(1996) ”(ここに参照
として組み入れる)に完全に記述されている。
【0020】図3はJavaTMコンパイルプロセスを図示す
る。このコンパイルは、代表的にはユーザがJavaTMコン
パイラ名(代表的には、“javac ”)に続いてコンパイ
ルされるクラス名(例えば“javac HelloWorldApp ”)
をタイプする時に生じる。JavaTMプログラム201など
のJavaTM資源コードを含む資源ファイル310はJavaTM
コンパイラ320に与えられる。JavaTMコンパイラ32
0は資源コードを分析し、クラスファイル330を生産
する。JavaTMコンパイラは固有のハードウエア命令の意
味での“機械コード”を生成しない。その代わり、一連
のバイトコード:JavaTM解釈プログラム及びランタイム
システムによって実現される仮説機械のためのハイレベ
ルの機械独立コードを生成する。バイトコードアプロー
チの初期例の1つがUCSD P-System である。これは19
70年代中頃から1980年代初期にかけて多種の8ビ
ットアーキテクチャへ移植され、その間に広い人気を得
た。最近では、現在のアーキテクチャは分散処理された
ソフトウエアのためのバイトコードアプローチをサポー
トする力を有する。JavaTMバイトコードはどんな機械に
おいても解釈することが簡単であるように又はもし性能
需要によって要求されれば、固有の機械コードへ動的に
翻訳することが簡単であるように設計されている。
【0021】JavaTMクラス(CLASS) 形式 図4はJavaTMクラス形式で符号化されているクラスファ
イル330の形式を図示する。JavaTMクラス形式は高度
に構造化された形式であり、SunTM Microsystemsの“Ja
vaTM Virtual Machine Specification, Release 1.0 Be
ta DRAFT”(1995年8月21日)(ここに参照とし
て組み入れる)に記述されている。
【0022】各クラスファイルはJavaTMクラス又はJava
TMインターフェースのどちらかのコンパイルされたバー
ジョンを含む。JavaTMプログラムを実行するように設計
された解釈プログラム又は“仮想計算機(virtual machi
ne )”はこの形式に準拠する全てのクラスファイルをサ
ポートする。
【0023】JavaTMクラスファイルは8ビットのバイト
のストリームを含む。全ての16ビット及び32ビット
の量はそれぞれ2つの又は4つの8ビットのバイトで読
み出すことによって構成される。バイトは、高いバイト
が最初に来るネットワーク(ビッグ・エンディアン)順
序で一緒に結合される。この形式はJavaTMのjava.io.Da
taInput 及びjava.io.DataOutputinterfaces、及びjav
a.io.DataInputStream及びjava.io.DataOutputStreamな
どのクラスによってサポートされる。
【0024】クラスファイル形式はここでは構造表記法
を使用して記述される。構造の逐次的ファイルは埋め込
み及び整列なしの外部表記で表れる。しばしば可変サイ
ズの要素の可変サイズ配列はテーブルと呼ばれ、これら
の構造において普通である。タイプu1、u2、及びu4はそ
れぞれ符号なしの1、2又は4バイトの量を意味する。
これらはjava.io.DataInputinterfaceのreadUnsignedBy
te、redUnsignedShort及びreadInt などの方法によって
読み出される。
【0025】クラスファイル330は次のように構造化
される: ClassFile{ u4 magic; u2 minor_version; u2 major_version; u2 constant_pool_count; cp_info constant_pool[constant_pool_count- 1]; u2 access_flags; u2 this_class; u2 super_class; u2 interfaces_count; u2 interfaces[interfaces_count]; u2 fields_count; field_info fields[fields_count]; u2 methods_count; method_info methods[methods_count]; u2 attributes_count; attribute_info attributes[attributes_count]; }
【0026】magic この“magic ”フィールド412は長さ4バイトでJava
TMクラス形式ファイルとしてファイルを識別するために
使用される。magic フィールドは値0xCAFEBABEを有す
る。
【0027】minor_version 及びmajor_version minor_version フィールド414及びmajor_version フ
ィールド416はこのクラスファイルを生産したJavaTM
コンパイラのバージョン番号を含む。2つのフィールド
の組み合わせは、コンパイルされたクラスを実行するこ
とができるかを決定するために仮想計算機によって問い
合わされてもよい。仮想計算機のインプリメンテーショ
ンは、特定の大きいバージョン番号のうち小さいバージ
ョン番号0−nのある範囲を通常サポートする。もし小
さいバージョン番号が増やされるならば、新しいコード
は古い仮想計算機上で実行しないが、バージョン番号n
+1までのバージョンアップを実行できる新しい仮想計
算機を作ることは可能である。大きいバージョン番号の
変更は大きな共存できない変化を示し、どんな方法でも
古い大きいバージョンをサポートすることができないか
もしれない別の仮想計算機を必要とする。
【0028】constant_pool_count constant_pool_count フィールド422はクラスファイ
ルの定数プール(constant pool) 425の入力数を示
す。
【0029】constant_pool 定数プール425は値のテーブルである。定数プール4
25の値は様々なストリング定数、クラス名、フィール
ド名、及びクラス内で実行可能なコードによって又はク
ラス構造によって参照されるその他のものを含む。第1
定数プール入力(constant_pool[0]と表示される)は、
常にコンパイラによって使用されず、あらゆる目的のた
めのインプリメンテーションによって使用されてもよ
い。
【0030】constant_pool_count-1 を通る各constant
_pool 入力1は可変長入力である。その形式は次のテー
ブルによる第1“tag ”バイトで示される:
【0031】 定数タイプ 意味 1 CONSTANT_Utf8 utf-8 形式ストリング 2 CONSTANT_Unicode ユニコード形式ストリング 3 CONSTANT_Integer 整数 4 CONSTANT_Float 浮動(float) 点 5 CONSTANT_Long ロング(long)整数 6 CONSTANT_Double ダブル浮動点 7 CONSTANT_Class クラス 8 CONSTANT_String ストリング 9 CONSTANT_Fieldref フィールド参照 10 CONSTANT_Methodref 方法参照 11 CONSTANT_InterfaceMethodref インターフェース方法参照 12 CONSTANT_NameAndType 名前及びタイプ
【0032】utf-8 形式ストリング定数プール入力は一
定の文字ストリング値を表す。ヌルでない(non-null)AS
CII 文字だけを含むストリングを、1文字あたり1バイ
トだけを使用して表すことができる(しかし16ビット
までの文字を表すことができる)ようにutf-8 ストリン
グは符号化される。
【0033】範囲0x0001〜0x007Fの全ての文字は、1バ
イトで表される。その場合、ビット0は2進法(バイナ
リー)‘0’に設定され、ビット1〜7はそれぞれASCI
I コード0x0001〜0x007Fを表す。ヌル文字0x0000及び範
囲0x0080〜0x07FFの文字は1組の2バイト又は16ビッ
ト(ここでビット1〜15と表示される)によって表さ
れる。ビット0〜2は2進法‘110’に設定され、ビ
ット8〜9は2進法‘10’に設定される。残りの11
ビットの3〜7及び10〜15は符号化される文字の低
い順序の11ビットそれぞれに相当する。
【0034】範囲0x0800〜0xFFFFの文字は3バイト、又
は24ビット(ここではビット0〜23と表示される)
によって表される。ビット0〜3、8〜9及び16〜1
7はそれぞれ2進法値‘1110’、‘10’及び‘1
0’に設定される。残りの8ビットの4〜7、10〜1
5及び18〜23は符号化される文字の8ビットに相当
する。
【0035】ヌル文字0x00は、1バイトよりもむしろ2
バイト形式で符号化され、結果として符号化されたスト
リングは埋め込み型ヌルを決して持たない。1バイト、
2バイト及び3バイト形式だけが使用される;長いutf-
8 形式は認識されない。
【0036】utf-8 ストリングは次のように構造化され
る:
【0037】tag フィールドはutf-8 符号化ストリング
を示す定数値0x0001を有する。lengthフィールドはスト
リングの長さを示す2バイトのフィールドである。byte
s フィールドは符号化されたストリングである。
【0038】ユニコード(Unicode )ストリング定数プー
ル入力は一定の符号化されてない文字ストリング値を表
す。ユニコードストリングは次のように構造化される:
【0039】tag フィールドはユニコード形式ストリン
グを示す定数値0x0002を有する。lengthフィールドはス
トリングの長さを示す2バイトのフィールドである。by
tesフィールドはストリング値である。
【0040】整数定数プール入力は4バイトの整数を表
す。定数プール入力は次のように構造化される:
【0041】tag フィールドは整数を示す定数値0x0003
を有する。bytes フィールドは整数値である。
【0042】浮動定数プール入力は4バイトの浮動点数
(floating-point number )を表す。定数プール入力は次
のように構造化される:
【0043】tag フィールドは浮動点数を示す定数値0x
0004を有する。bytes フィールドは浮動点値である。
【0044】ロング定数プール入力は8バイトの整数を
表す。定数プール入力は次のように構造化される:
【0045】tag フィールドはロング整数を示す定数値
0x0005を有する。high_bytes及びlow_bytes フィールド
は一緒に整数値を作る。ロング整数定数プール入力は定
数プール425の2つのスポットをとる。もし、これが
定数プール425のn番目の入力であるならば、次の入
力はn+2番目の番号で区別される。
【0046】ダブル浮動定数プール入力は8バイトの浮
動点数を表す。定数プール入力は次のように構造化され
る:
【0047】tag フィールドはダブル浮動点数を示す定
数値0x0006を有する。high_bytes及びlow_bytes フィー
ルドは一緒に浮動点値を作る。ダブル浮動定数プール入
力は定数プール425の2つのポイントをとる。もし、
これが定数プール425のn番目の入力であるならば、
次の入力はn+2番目の番号で区別される。
【0048】クラス定数プール入力はJavaTMクラス又は
インターフェースを表す。定数プール入力は次のように
構造化される:
【0049】tag フィールドはクラスを示す定数値0x00
07を有する。name_indexフィールドは、クラスのストリ
ング名を与えるutf-8 形式ストリング定数への、定数プ
ール425にかかわる添字である。
【0050】ストリング定数プール入力は、組み込みJa
vaTMタイプ“String”のJavaTMオブジェクトを表す。定
数プール入力は次のように構造化される:
【0051】tag フィールドはストリングを示す定数値
0x0008を有する。string_indexフィールドは、Stringタ
イプのオブジェクトが初期化される値を与えるutf-8 形
式ストリング定数への、定数プール425にかかわる添
字である。
【0052】フィールド定数プール入力、方法参照定数
プール入力、及びインターフェース方法参照定数プール
入力はそれぞれJavaTMフィールド、方法、及びインター
フェース方法への参照を表す。定数プール入力は次のよ
うに構造化される:
【0053】tag フィールドはフィールド参照、方法参
照、又はインターフェース方法参照をそれぞれ示す定数
値0x0009、0x000A、又は0x000Bを有する。class_index
フィールドは、フィールド又は方法を含むクラス又はイ
ンターフェースの名前を識別するために使用されるクラ
ス定数への、定数プール425にかかわる添字である。
name_and_type_index フィールドは、フィールド又は方
法の名前及び署名を識別するために使用されるNameAndT
ype (名前&タイプ)定数への、定数プール425にか
かわる添字である。
【0054】NameAndType 定数プール入力は、名前又は
フィールドが場合によって所属するクラスを示さずにフ
ィールド又は方法を表す。定数プール入力は次のように
構造化される:
【0055】tag フィールドはNameAndType 入力を示す
定数値0x000Cを有する。name_indexフィールドは、フィ
ールド又は方法の名前を与えるutf-8 形式ストリング定
数への、定数プール425にかかわる添字である。sign
ature_index フィールドは、フィールド又は方法の署名
を与えるutf-8 形式ストリング定数への、定数プール4
25にかかわる添字である。本文において、署名は方
法、フィールド又は配列のタイプを表すストリングを参
照する。フィールド署名は機能又は変数の値への仮数(a
rgument)の値を表す。リターンタイプ署名は方法からの
リターン値を表す。仮数署名は方法に受け渡した仮数を
表す。方法署名は1以上の仮数署名及びリターン署名
(その結果、方法によって期待される仮数を表す)、及
び方法署名をリターンする値を含む。
【0056】セルプールの構造及び自己参照性は、クラ
スファイルに符号化されたデータのインプリメンテーシ
ョンにおける多大な柔軟性をそれによって与える。
【0057】access_flags access_flagsフィールド432はクラス、方法、及びフ
ィールド定義とともに使用された16個までの変更子の
マスクを含む。同じ符号化は以下に記述されるように、
field_info及びmethod_info の同様のフィールドで使用
される。access_flagsフィールドは次のように符号化さ
れる:
【0058】 フラグ名 意味 使用主 ACC_PUBLIC 0x0001 皆を見ることが可能 クラス、方法、 変数 ACC_PRIVATE 0x0002 定義するクラスだけを見るこ 方法、変数 とが可能 ACC_PROTECTED 0x0004 サブクラスを見ることが可能 方法、変数 ACC_STATIC 0x0008 変数又は方法が静的 方法、変数 ACC_FINAL 0x0010 初期化後の更なるサブクラッ クラス、方法、 シング、置き換え、又は割り 変数 当てなし ACC_SYNCHRONIZED 0x0020 モニタロックの折り返し使用 方法 ACC_VOLATILE 0x0040 キャッシュできない 変数 ACC_TRANSIENT 0x0080 持続性オブジェクトマネージ 変数 ャによって書かれたり、読み 出されたりしない ACC_NATIVE 0x0100 JavaTM以外の言語で実現され 方法 る ACC_INTERFACE 0x0200 インターフェースである クラス ACC_ABSTRACT 0x0400 本体が提供されない クラス、方法
【0059】this_class this_classフィールド434は定数プール425にかか
わる索引である;constant_pool[this_class] はCONSTA
NT_classのタイプでなければならない。
【0060】super_class super_class フィールド436は定数プール425にか
かわる索引である。もしsuper_class フィールド436
の値がゼロでないならば、constant_pool[super_class]
はクラスでなければならず、定数プール425におい
て、このクラスのスーパークラス(即ち、現在のクラス
を派生するクラスである)の索引を与える。もしsuper_
class フィールド436の値がゼロであるならば、定義
されたクラスはjava.lang.Objectでなければならず、そ
れはスーパークラスを全く有しない。
【0061】interface_count interface_count フィールド438はこのクラスが実現
するインターフェースの数を与える。
【0062】インターフェーステーブル(interface tab
le) インターフェーステーブル440の各値は、定数プール
425にかかわる索引である。もしテーブル値がゼロで
ない(interface[i]!=0 、式中、0 <=i <interfaces
_count)ならば、constant_pool[interfaces[i]]はこの
クラスが実現するインターフェースでなければならな
い。
【0063】fields_count fields_countフィールド450は、このクラスフィール
ドによって定義される、静的及び動的の両方のインスタ
ンス変数の数を与える。フィールドテーブル455はこ
のクラスによって明示的に定義されたそれらの変数のみ
を含む。それはこのクラスからアクセス可能であるがス
ーパークラスから継承されるそれらのインスタンス変数
を含まない。
【0064】フィールドテーブル(fields table) フィールドテーブル450の各値はクラスのフィールド
のより完全な記述である。各フィールドは可変長field_
info構造によって記述される。この構造の形式は次のよ
うである: field_info{ u2 access_flags; u2 name_index; u2 signature_index; u2 attributes_count; attribute_info attributes[attribute_count]; }
【0065】access_flagsフィールドは、様々な特性及
びそれらが他のクラスの方法によってどのぐらいアクセ
スされうるかを記述するためのクラス、方法及びフィー
ルドによって使用された16個1組みのフラグである。
このフィールドは、既に開示されたaccess_flagsフィー
ルド432と同じ名前、値及び意味を有する。
【0066】フィールドのために設定できる可能なフラ
グはACC_PUBLIC、ACC_PRIVATE 、ACC_PROTECTED 、ACC_
STATIC、ACC_FINAL 、ACC_VOLATILE及びACC_TRANSIENT
である。多くてもACC_PUBLIC、ACC_PROTECTED 及びACC_
PRIVATE のうちの1つをどんな方法のためにも設定する
ことができる。
【0067】name_indexフィールドは、フィールド名で
あるCONSTANT_Utf8ストリングを示す定数プール425
にかかわる索引として使用された添字である。
【0068】signature_index フィールドは、フィール
ドの署名であるCONSTANT_Utf8ストリングを示す定数プ
ール425にかかわる索引として使用された添字であ
る。
【0069】attributes_countフィールドは、このフィ
ールドについての追加属性の数を示す。
【0070】属性フィールドは、field_info構造によっ
て表される特有のフィールドの属性を表す。フィールド
はそれと対応付けられたどんな数の任意の属性をも有す
ることができる。例えば、このフィールドが静的数字定
数であることを示す“定数値(ConstantValue) ”属性は
そのフィールドの定数値を示す。
【0071】method_count method_countフィールド460は、このクラスによって
定義された静的及び動的の両方の方法の数を示す。この
テーブルはこのクラスによって明示的に定義されたこれ
らの方法のみを含む。それは継承された方法を含まな
い。
【0072】方法テーブル(methods table) 方法テーブル465の各値はクラスの方法のより完全な
記述である。各方法は可変長method_info 構造によって
記述される。この構造の形式は次のようである: method_info{ u2 access_flags; u2 name_index; u2 signature_index; u2 attributes_count; attribute_info attributes[attribute_count]; }
【0073】access_flagsフィールドは、様々な特性及
びそれらが他のクラスの方法によってどのぐらいアクセ
スされうるかを記述するためのクラス、方法及びフィー
ルドによって使用された16個1組みのフラグである。
このフィールドは、既に開示されたaccess_flagsフィー
ルド432と同じ名前、値及び意味を有する。方法のた
めに設定できる可能なフィールドはACC_PUBLIC、ACC_PR
IVATE 、ACC_PROTECTED 、ACC_STATIC、ACC_FINAL 、AC
C_SYNCHRONIZED、ACC_NATIVE及びACC_ABSTRACTである。
多くてもACC_PUBLIC、ACC_PROTECTED 及びACC_PRIVATE
のうちの1つをどんな方法のためにも設定することがで
きる。
【0074】name_indexフィールドは、方法の名前であ
るCONSTANT_Utf8ストリングを示す定数プール425に
かかわる索引として使用された添字である。
【0075】signature_index フィールドは、方法の署
名であるCONSTANT_Utf8ストリングを示す定数プール4
25にかかわる索引として使用された添字である。
【0076】attributes_countフィールドは、このフィ
ールドについての追加属性の数を示す。
【0077】属性フィールドは、method_info 構造によ
って表される特有の方法の属性を表す。方法はそれと対
応付けられたどんな数の任意の属性をも有することがで
きる。各属性は名前、及び他の追加情報を有する。例え
ば、“コード(Code)”属性(下記参照)はこの方法を行
うために実行されるバイトコードを記述し、“例外(Exc
eptions)”属性はこの方法の実行から生じるために宣言
されたJavaTM Exceptions を記述する。
【0078】attributes_count attributes_countフィールド470は、このクラスにつ
いての追加属性の数を示す。
【0079】属性 属性テーブル475はこのクラスと対応付けられた属性
を定義する。クラスはそれと対応付けられた追加属性を
いくつでも有することができる。例えば、“資源ファイ
ル(SourceFile)”属性はこのクラスファイルをコンパイ
ルする資源ファイル名を示す。
【0080】コード属性 コード属性は次の形式を有する: Code_attribute{ u2 attribute_name_index; u4 attribute_length; u2 max_stack; u2 max_locals; u4 code_length; u1 code[code_length]; u2 exception_table_length; { u2 start_pc; u2 end_pc; u2 handler_pc; u2 catch_type; } exception_table[exception_table_length]; u2 attributes_count; attribute_info attributes[attribute_count]; }
【0081】attribute_name_indexフィールドは、“Co
de”を含むCONSTANT_Utf8ストリングを示す定数プール
425にかかわる索引として使用された添字である。
【0082】attribute_lengthフィールドは、最初の6
バイトを除き、“Code”属性の全長を示す。
【0083】max_stack フィールドは、この方法の実行
中に使用されるオペランドスタック上の入力の最大数を
定義する。
【0084】max_localsフィールドは、この方法によっ
て使用されたローカル変数スロットの数を定義する。
【0085】code_length フィールドはこの方法のため
の仮想計算機コードにおけるバイトの数を定義する。
【0086】codeフィールドは方法を実現する仮想計算
機コードの実際のバイトを含む。
【0087】exception_table_lengthフィールドは次の
例外テーブルexception_table における入力の数を定義
する。このテーブルは方法がどのExceptionsを投げるこ
とを宣言するかを示すコンパイラによって使用される。
例外テーブルにおける各入力はコードにおける1つの例
外ハンドラを記述する。2つのフィールドstart_pc及び
end_pcは例外ハンドラが活動中のコードの範囲を示す。
両フィールドの値はコードの開始からのオフセットであ
る。start_pcフィールドは包含的であり、end_pcフィー
ルドは排他的である。handler_pcフィールドは例外ハン
ドラの開始アドレスを示す。フィールドの値はコードの
開始からのオフセットである。
【0088】もしcatch_typeフィールドがゼロでないな
らば、constant_pool[catch_type]はこの例外ハンドラ
が捕まえるために指名された例外のクラスである。この
例外ハンドラは、もし投げられた例外が与えられたクラ
スのインスタンスである場合にのみ、呼び出されなけれ
ばならない。もしcatch_typeがゼロであるならば、この
例外ハンドラは全ての例外のために呼び出されなければ
ならない。
【0089】attributes_countフィールドはコードにつ
いての追加属性の数を示す。Code属性はそれ自身が属性
を有することができ、それはattributes[attribute_cou
nt]フィールドを使用して指名される。Code属性はそれ
と関連付けられたどんな数の任意の属性をも有すること
ができる。各属性は名前及び他の追加情報を有する。最
近では、定義されたコード属性だけが“LineNumberTabl
e (行数テーブル)”及び“LocalVariableTable (ロ
ーカル変数テーブル)”であり、両者はデバッギング(d
ebugging )情報を含む。
【0090】バイトコードは、仮説8バイトスタックに
基づいた環境において実行されるように設計された一連
の機械独立命令(例えばオブジェクトコード)を表す。
JavaTM Virtual Machineの動作は頻繁にスタックからそ
れらのオペランドを取り、スタックにそれらの結果を返
す。
【0091】例えば、命令“iload vindex”は2つの8
ビットのバイトによって表される。Ox15の値(十進法2
1)を有する第1のバイトはiload 命令を示す。第2の
バイトはローカル変数の現在のJavaTMフレームにかかわ
る索引を与える。ローカル変数の値はオペランドスタッ
クに押し入れられる。
【0092】例えば、例のHelloWorldApp クラスを実行
するためのバイトコード列は9バイトのストリング0xB2
00081201B60007B1から構成されてもよい。この列は次の
ように解釈される: B2 0008 getstatic 0008; 12 fconst_1; 01 aconst_null; B6 0007 invokevirtual 0007; B1 return;
【0093】getstatic 0008命令は定数プールにかかわ
る索引を構築するために値0008を使用する。これはフィ
ールド参照を静的フィールドへ指し示す。この例におい
て、これは他のクラス(ここでは値“Hello, World! ”
を有するストリング)に渡されるパラメタを示すために
使用されてもよい。fconst_1命令は単精度浮遊点数
“1”をスタックに押し入れる。aconst_null 命令はヌ
ルオブジェクト参照をスタックに押し入れる。fconst_1
及びaconst_null 命令はスタックされたパラメタを解釈
するために使用されることができるデータを与える。
【0094】invokevirtual 0007命令はスタックされた
パラメタを使用して実行されるべきである仮想方法を呼
び出すために使用される。オペランド0007は定数プール
にかかわる索引を構築するために使用される。定数プー
ルのその索引にある項目は呼び出されることが望まれる
方法のための完全な方法署名を含む。この例において、
これは呼び出されることが望まれる方法(ここでは名前
“System.out.println”を有する方法)を示すために使
用されてもよい。
【0095】return命令はHelloWorldApp クラスの実行
を終了するために使用される。
【0096】図5はコンパイルされたJavaTMクラスの実
行を図示したものである。この実行は、代表的にはユー
ザがJavaTM解釈プログラムの名前(代表的には、“Jav
a”)に続いて実行されるクラス名(例えば“java Hell
oWorldApp”)をタイプする時に生じる。解釈プログラ
ム510は入力としてクラスファイル330を受け取
る。解釈プログラムは“JAVA_HOME ”と名付けられた環
境変数530を問い合わせる。JAVA_HOME 環境変数の値
はJavaTMランタイムシステムのためのホームディレクト
リ535の名前である。それはJavaTM解釈プログラム及
びサポートプログラムを含み、クラスの実行において使
用されたシステムルーチンをロードするために使用され
る。“CLASSPATH ”環境変数520は、ランタイムで呼
び出されることのある追加クラスを含む様々なシステム
クラスライブラリ525及びユーザクラスライブラリ5
27の名前を含む。
【0097】注目されたように、図5に図示された実行
プロセスの欠点の1つは、実行されるプログラムがプラ
ットフォーム固有プログラムファイルよりもむしろJava
TMクラスであること及びそのためユーザがJavaTM解釈プ
ログラムを明示的に呼び出さなければならないことをユ
ーザが気づく必要があることである。即ち、ユーザは簡
潔に“HelloWorldApp ”とタイプするよりもむしろ“ja
va HelloWorldApp”とタイプしなければならない。図6
はプラットフォーム固有プログラムファイルを呼び出す
ために使用され、その機能性をコンパイルされたJavaTM
クラスファイルへ拡張する標準システムexec()処理への
拡張を図示する。図6の拡張は、ユーザが解釈されなけ
ればならないということを特定せずに、コンパイルされ
たJavaTMクラスファイルディレクトリーの名前(例え
ば、“Java HelloWorldApp”よりもむしろ“HelloWorld
App ”)を示す時に呼び出される。
【0098】実行は工程610で始まる。工程620に
おいて、拡張はクラスファイルを読み出す。工程630
において、拡張はmagic フィールド412のコンテンツ
が予め決定された値0xCAFEBABEを含むかを確認するため
にmagic フィールド412のコンテンツを確認する。も
しmagic フィールド412が0xCAFEBABEを含まないなら
ば、拡張は工程635においてENOEXEC 復帰コードと共
に出る。ENOEXEC 復帰コードはターゲットが実行可能で
ないことを示す標準exec()復帰コードである。もし試験
が成功すれば、制御は工程640へ進む。工程640に
おいて、拡張は解釈プログラムのロケーション(例え
ば、“/usr/bin/java ”)を得る。工程650におい
て、拡張は示された名前を伴うファイルが示されたロケ
ーションにあるかを見るために確認する。もしそうでな
ければ、工程655において拡張はエラー状態と共に出
る。さもなくば、拡張は工程670において名付けられ
たファイルを呼び出し、ターゲットクラスファイル名を
実行のために解釈プログラムへ渡す。解釈プログラムに
よって名付けられたクラスファイルの実行に従って、拡
張は工程690で出る。
【0099】図6に図示されたプロセスはユーザがファ
イルをクラスファイルだと知ることを必要とせずにJava
TM解釈プログラムの直接暗黙呼び出しを許可する。しか
しながら、それには障害がないわけではない。図5に示
されるように、JavaTM解釈プログラムはランタイムで呼
び出されるルーチン及び方法のために探索されるライブ
ラリを決定するためにCLASSPATH 及びJAVA_HOME 環境変
数を使用する。多数の別々のコンパイルされたクラスフ
ァイルを含む複合システムにおいて、ユーザはJavaTM
釈プログラムにクラスファイルのロケーションを与える
ためのCLASSPATH 変数を設定することが必要である。従
って、図6に図示されるアプローチのもとでも、JavaTM
の使用は自分のプログラムを正確に実行するための追加
工程を取る必要のあるユーザにとって明瞭ではない。
【0100】第2の解決法は環境変数を設定するために
及びJavaTMと名付けられたクラスファイルを使用するJa
vaTM解釈プログラムを呼び出すために使用することがで
きる実行可能なスクリプトを生産するための自動手段を
提供することにある。そのようなプログラムはプログラ
ム“ld”のような標準リンカと同種である。例えば“ja
vald”と名付けられたJavaTM擬似リンカは次のように呼
び出される:javald -C /opt/acme/lib -C lib -o foo
progname
【0101】この構文はプログラムjavaldが呼び出され
ることを意味する。これは(コマンド“foo ”として呼
び出された時に)JavaTMクラスファイル“progname.cla
ss”を解釈する“foo ”と名付けられた出力ファイルを
作成する。CLASSPATH 環境変数は“/opt/acme/lib ”及
び“lib ”と名付けられた2つのライブラリを含むよう
に設定されるべきである。参照/opt/acme/lib はルート
ディレクトリ“/ ”と相対的に定義される点で絶対参照
である。ルートディレクトリは“opt ”と名付けられた
ディレクトリを含み、“acme”と名付けられたディレク
トリを順に含み、特定されたディレクトリである“lib
”と名付けられたディレクトリを順に含む。参照“lib
”は相対参照であり、ファイルfoo を含むディレクト
リと相対的に位置する“lib ”と名付けられたディレク
トリを参照する。
【0102】図7は要求された変数を設定するための及
び解釈プログラムを呼び出すためのスクリプトファイル
を作成するためのプログラムjavaldの工程を図示したも
のである。図7は図8を参照すると最も良く理解され
る。図8は図7のプログラムによって生産されたスクリ
プトファイル801の例を図示したものである。実行は
工程710で始まる。工程720において、プログラム
は常に含まれる必要のあるコードを含む標準プロログコ
ードセグメント(prolog code segment )810を書く。
工程730において、javaldはJAVA_HOME 変数を設定す
るためにコードの行を書く。工程740において、java
ldはCLASSPATH 環境変数に含まれるように第1のライブ
ラリ名を選択する。これらの名前は、javaldが呼び出さ
れた時、-Cフラグを使用するために特定される。工程7
50において、javaldは絶対又は相対参照としてライブ
ラリ名が特定されたかを決定する。もし絶対であれば、
工程760は絶対参照を生成する。もし相対であれば、
工程765は実行可能なシェルスクリプト801のロケ
ーションと相対的なランタイムで特定されたライブラリ
のロケーションを決定する機能呼び出しを生成する。工
程770において、javaldはいかなるライブラリが処理
されるために残っているかを確認する。もしそうであれ
ば、制御は工程740へ復帰する;そうでなければ、制
御は工程780へ進む。工程780において、javaldは
コロンによって分けられた、示されたライブラリ名を含
むストリングにCLASSPATH 変数を設定するコードの行8
30及びJavaTM解釈プログラムを呼び出すコードの行8
40を書く。
【0103】上述したように、図8はランタイムでJava
TM解釈プログラムを呼び出し、必要な環境変数を設定す
るためのスクリプトファイル801を図示したものであ
る。一行ごとの記述は次のようである。
【0104】第1行は下記のストリングを含む: #!/bin/ksh
【0105】もし存在すれば、“#!”ストリングはスク
リプトを実行するために使用されるスクリプト解釈プロ
グラムの名前を与えるための標準UNIX構造物の使用
である。ファイル/bin/kshは公知のスクリプト解釈プロ
グラムであるKシェルプログラムのための標準名であ
る。スクリプト801はKシェル言語で書かれている。
【0106】次の行は下記のストリングを含む: _D=$(cd `/usr/bin/dirname$0` && print-n $PWD)
【0107】この行はスクリプトファイルが存在するデ
ィレクトリの完全修飾されたパスネームに変数_Dを設定
させる。これは次のように作用する。スクリプトが実行
を始める時、ksh はコマンド行において実行された名前
プログラムに変数$0を設定する。それは現在のディレク
トリ(例えば“bin/progname”)と相対的なスクリプト
ファイルだけ(例えば“progname”)又は絶対パスとし
てのスクリプトファイル(例えば“/usr/bin/test/prog
name”)のいずれかの名前である。シェルはリバースシ
ングルクォート(reverse single quote)[通常“バック
ティック(backtick)”と呼ばれる“` ”]で閉じられた
コマンド行(この場合、“/usr/bin/dirname$0”)を実
行する。dirname コマンドはファイル名からの非ディレ
クトリ接尾部(non-directory suffix ) を削除する標準
UNIXコマンドである。例えば、“dirname prognam
e”は現在のディレクトリを示す“. ”を出力として生
産する。“dirname bin/progname”は“./bin ”を生産
し、“dirname /usr/bin/test/progname”は“/usr/bin
/test ”を生産する。バックティックされた(backticke
d ) コマンドが標準cd (“ディレクトリ変更(change di
rectory)”) コマンドに従うので、ksh は示されたディ
レクトリ上でcdコマンドを実行しようとする。もし成功
すれば、“&&”に続くコマンド“print-n $PWD”は実行
され、通常の復帰改行文字(newline character )を抑制
するとともに現在のディレクトリ$PWDの完全修飾された
パスネームを出力として生産する。もしcdコマンドが成
功しなければ、エラーが復帰される。即ち、結果はシェ
ルスクリプトが存在するディレクトリの完全修飾された
パスネーム(もしそのようなディレクトリが存在するな
らば)、もしくはエラー状態(もしそのようなディレク
トリが存在しないならば)である。Kシェル構造$() は
_Dに位置された値を復帰する。このディレクトリは“タ
ーゲットディレクトリ”として参照されるであろう。
【0108】機能定義“_ ”は下記のCLASSPATH 構造物
まで呼び出されない。
【0109】次の行は下記のストリングを含む: export JAVA_HOME=${JAVA_HOME:-/usr/java}
【0110】もしJAVA_HOME 環境変数がまだ設定されて
なければ、これはJAVA_HOME 環境変数を“/usr/java ”
に設定するためのKシェル構文である。exportコマンド
の使用は変数を次々に引き起こされるプロセスに対して
利用できるようにする。
【0111】次の行は下記のストリングを含む: export CLASSPATH=$(/opt/acme/lib:_lib)
【0112】これはCLASSPATH 環境変数をコロンによっ
て分けられた絶対参照/opt/acme/lib と相対参照lib の
結合に設定する。exportコマンドの使用は変数を次々に
引き起こされるプロセスに対して利用できるようにす
る。絶対参照/opt/acme/lib は直定数(literal )として
表され、説明を必要としない。第2の参照は“_ ”機能
の呼び出しである。“_ ”機能は下記のように定義され
る:
【0113】ステートメント“function_ ”は“_ ”と
名付けられ、括弧{}で囲まれた機能を定義する。機能は
受渡された相対ディレクトリ名の値(例えば“lib ”,
“../ lib ”など)上で動作する。式[[$1=${1##/}]]は
先行するスラッシュ文字(“/ ”)でディレクトリ名が
始まるかを評価する。もしディレクトリ名が先行するス
ラッシュで始まれば、ディレクトリ名は絶対参照であ
る。もしディレクトリ名が先行するスラッシュで始まら
なければ、ディレクトリ名はターゲットディレクトリに
相対的であるが、ターゲットディレクトリに直接的であ
る必要はない。例えば、参照“lib ”はターゲットディ
レクトリにおいてディレクトリ“lib ”を参照し、一方
参照“../lib”は(ターゲットディレクトリに相対的で
あるが)ターゲットディレクトリの親ディレクトリにお
いてディレクトリを参照する。もしディレクトリ参照が
相対参照であれば、“print-n${_D}/ ”ステートメント
はターゲットディレクトリへの絶対参照を伴う相対参照
を表し(prepends)、結果として生じる構造物はスラッシ
ュを伴って追加される。これは相対参照を絶対参照に変
化させる効果を有する。次の行(“print-n$1 ”)は特
定されたディレクトリ参照を生成する。
【0114】例えば、もしターゲットディレクトリが
“/usr/bin/test ”と名付けられるならば、この機能は
“lib ”の入力パラメタのために値“/usr/bin/test/li
b ”を復帰し、“../lib”の入力パラメタのために値
“/usr/bin/test/../lib”を復帰する。従って、この機
能の結果は示された相対的に参照されたライブラリへの
完全パスネームであり、それは次いでCLASSNAME ストリ
ングに追加される。
【0115】最後の行はJavaTM解釈プログラム呼び出し
である:
【外1】
【0116】
【外2】
【0117】図9は図7及び8に示された方法を使用す
るJavaTMクラスの実行を図示したものである。ユーザは
Kシェルスクリプトファイル801の名前をタイプす
る。このファイルはスクリプトファイルを読み出し解釈
するKシェル920を呼び出しストリング#!/bin/kshを
見るUNIX核910によって読み出される。Kシェル
920はCLASSPATH 環境変数520及びJAVA_HOME 環境
変数530を設定し、クラスファイル330の名前を特
定するJavaTM解釈プログラム510を呼び出す。この時
点より前から、実行は図5を参照して記載されるように
続く。即ち、JavaTM解釈プログラム510はクラスファ
イル330を入力として受け取る。解釈プログラムは
“JAVA_HOME ”と名付けられた環境変数530を問い合
わせ、それによってJavaTMランタイムシステムのために
ホームディレクトリ535の名前を決定する。JavaTM
釈プログラムも“CLASSPATH ”環境変数520を問い合
わせ、それによってランタイムで呼び出されうる追加ク
ラスを含む様々なシステムクラスライブラリ525及び
ユーザクラスライブラリ527の名前を決定する。
【0118】図7のプロセスがJavaTMクラスファイルの
呼び出しを許可するために使用されうるスクリプトファ
イルをスクリプトの手段を通じて生産するにもかかわら
ず、このアプローチの1つの欠点はスクリプトファイル
801及び実行されたクラスファイル330が同じディ
レクトリ構造内に維持されなければならないことであ
る。これは多くのシステムにおいて通常大きな負担にな
るわけではない。なぜならそのようなシステムは通常ユ
ーザクラスファイル527が実質的使用を作り、実行さ
れたクラスファイル330及びユーザクラスライブラリ
527のディレクトリ関係がいかなる事象においても維
持されなければならないからである。しかしながら、図
7のプロセスはそのようなファイル関係維持が通常要求
されない小さなシステム(例の“HelloWorldApp ”アプ
リケーションなど)上で追加の維持義務(maintenance d
uty)を紹介する。このアプローチの更なる欠点はJavaTM
オブジェクトコードだけでなくシェルスクリプトの解釈
も必要とすることである。この余計な解釈は追加のシス
テム資源を消費する。この維持を取り除くため及びシェ
ルを呼び出すために必要な資源を減らすためには、シェ
ルスクリプト801などの実行可能なファイルを作るこ
とができるが、生じたファイルが別のファイルを呼び出
すことよりもむしろ実行可能なJavaTMコードを含む手段
を与えることが望ましい。
【0119】ELF形式 図11はアーキテクチャ独立バイナリー実行可能コード
をサポートするために適応されたELF形式のバイナリ
ーファイル1101の形式を図示したものである。最大
の移植性を与えるため、ファイルはUNIX System V Inte
rface Definitionに従う動作システム上のアプリケーシ
ョンプログラムによって使用される標準バイナリーイン
ターフェイスとして定義されたELF(Executable and
LinkingFormat )形式に従ってフォーマットされる。E
LF形式は“System V Application Binary Interface
”第3版(1993年)(“the ABI ”)(ここに参
照として組み入れる)に記述されている。
【0120】バイナリーファイル1101のセクション
の形式はここでは構造表記法を使用して記述される。構
造の逐次的ファイルは埋め込み及び整列なしの外部表記
で表れる。しばしば可変サイズの要素の可変サイズ配列
はテーブルと呼ばれ、これらの構造において一般的であ
る。タイプElf32_Addrは4バイトのサイズを有し4バイ
ト境界に合わされた符号なしのプログラムアドレスを参
照する。タイプElf32_Halfは2バイトのサイズを有し2
バイト境界に合わされた符号なしの媒体整数を参照す
る。タイプElf32_Off は4バイトのサイズを有し4バイ
ト境界に合わされた符号なしのファイルオフセットを参
照する。タイプElf32_Sword は4バイトのサイズを有し
4バイト境界に合わされた符号ありの大きな整数を参照
する。タイプElf32_Wordは2バイトのサイズを有し2バ
イト境界に合わされた符号ありの大きな整数を参照す
る。タイプunsigned char は1バイトのサイズを有し1
バイト境界に合わされた符号なしの小さな整数を参照す
る。
【0121】本発明のELFファイル1101はELF
ヘッダー(ELF Header)1110、プログラムヘッダーテ
ーブル(PHT)(Program Header Table)1120、ク
ラスセクション(Class Section )1130、動的セクシ
ョン(Dynamic Section )1140、動的ストリングテー
ブル(Dynamic String Table)1150及びセクションヘ
ッダーテーブル(SHT)(Section Header Table)11
60を含む。図11は特有の順序でバイナリーファイル
1101の構成部分を示すが、実際のファイルのレイア
ウトは異なってもよい。ファイルの始まりに固定位置を
有するELFヘッダー1101から離れて、ELFヘッ
ダー以外の様々なセクション及びセグメントは特定の順
序を全く有しない。
【0122】ELFヘッダー ELFヘッダー1110はファイル1101の始まりに
存在し、ファイルの組織を記述するロードマップを保持
する。ELFヘッダー1110は次の形式を有する:
【0123】e_ident フィールドはファイルのコンテン
ツを解読及び解釈するアーキテクチャ独立データを与
え、オブジェクトファイルとしてファイルに印を付ける
最初のバイト(バイト0〜15)を含む。バイト0〜3
(EI_MAG0, EI_MAG1, EI_MAG2,EI_MAG3によって示され
る)はファイルを確認するための定数である。バイト0
(EI_MAG0 )は値0x7Fを含む。バイト1〜3(EI_MAG1,
EI_MAG2, EI_MAG3 )はそれぞれ値‘E ’、‘L ’、
‘F ’を含む。バイト4(EI_CLASS)はファイルのアー
キテクチャのタイプを識別する。1(ELFCLASS32)の値
は32ビットのアーキテクチャを示し、一方、2(ELFC
LASS64)の値は64ビットのアーキテクチャを示す。ゼ
ロ(ELFCLASSNONE)の値は無効アーキテクチャタイプを
示す。本発明の典型的な例において、EI_CLASSは値ELFC
LASS32を有する。
【0124】バイト5(EI_DATA )はファイルにおいて
データのデータ符号化を特定する。1(ELFDATA2LSB )
の値はリトル・エンディアン(little-endian )符号化を
示し、2(ELFDATA2MSB )の値はビッグ・エンディアン
(big-endian)符号化を示し、0の値は無効符号化を示
す。本発明において、EI_DATA は値ELFDATA2MSB を有す
る。バイト6(EI_VERSION)はヘッダーが作られるバー
ジョンのELFヘッダーバージョン番号を特定する。e_
ident の余剰部分(reminder)は使用されない。
【0125】e_typeフィールドはオブジェクトファイル
タイプを識別する。このフィールドは実行可能なファイ
ルを示すために2(ET_EXEC )に設定される。
【0126】e_machine フィールドは機械タイプ(例え
ばSunTM Microsystems のSPARCTMアーキテクチャのた
めに1、Intel の80386 アーキテクチャのために3、I
BMのRS6000アーキテクチャのために21など)を識別
する。このフィールドは任意に設定されるが、ファイル
に含まれる実行可能なコードと互換性のあるアーキテク
チャを有する機械のタイプを示す予め決定された割り当
てられた数に設定される。現在では、値22から655
35が割り当てられておらず、これらの値のうちの1つ
(例えば22)はJavaTM Virtual Machine仮説アーキテ
クチャを表すために割り当てられるだろう。
【0127】e_version フィールドはオブジェクトファ
イルバージョンを表す。
【0128】e_entry フィールドはシステムが初めに制
御を移す(即ちプロセスを開始する)仮想アドレスを与
える。本発明のために、この数はゼロを有する。
【0129】e_phoff フィールドはプログラムヘッダー
テーブルのファイルオフセットをバイトで保持する。
【0130】e_shoff フィールドはセクションヘッダー
テーブルのファイルオフセットをバイトで保持する。
【0131】e_flags フィールドはファイルと関連付け
られた処理装置特定フラグを保持する。
【0132】e_ehsizeフィールドはELFヘッダーのサ
イズをバイトで保持する。
【0133】e_phentsize フィールドはファイルのプロ
グラムヘッダーテーブル(PHT)1120において1
つの入力のサイズをバイトで保持する。全てのPHT入
力は同じサイズである。
【0134】e_phnum フィールドはプログラムヘッダー
テーブルにおいて入力の数を保持する。即ち、e_phents
ize 及びe_phnum の生産物はバイトでテーブルのサイズ
を与える。
【0135】e_shentsize フィールドはセクションヘッ
ダーのサイズをバイトで保持する。セクションヘッダー
はセクションヘッダーテーブル(SHT)1160の1
つの入力である;全ての入力は同じサイズである。
【0136】e_shnum フィールドはセクションヘッダー
テーブル1160において入力の数を保持する。即ち、
e_shentsize 及びe_shnum の生産物はセクションヘッダ
ーテーブルのサイズをバイトで与える。
【0137】e_shstrndxフィールドはセクション名スト
リングテーブル1150と関連付けられた入力のセクシ
ョンヘッダーテーブル索引を保持する。
【0138】プログラムヘッダーテーブル プログラムヘッダーテーブル(PHT)1120は構造
物の配列であり、それぞれはシステムが実行のためのプ
ログラムを準備する必要があるセグメント又は他の情報
を記述する。ファイルはELFヘッダー1110におい
てe_phentsize及びe_phnum フィールドを伴うそれ自身
のプログラムヘッダーサイズを特定する。
【0139】PHT1120は次の形式を有する:
【0140】p_typeフィールドはこの配列要素がどの種
のセグメントを記述するか又は配列要素の情報をどのよ
うの解釈するかを伝える。最近ABIに記述されたよう
に、値0〜6は有効であり、p_typeのための値を定義す
る。値7〜0x6FFFFFFFは使用されず、範囲0x70000000
(PT_LOPROC )〜0x7FFFFFFF(PT_HIPROC )の値は処理
装置特定構文のために確保される。
【0141】本発明のために、少なくとも2つの値が使
用される。使用される第1の値は2(PT_DYNAMIC)であ
る。PT_DYNAMICは動的リンキング(linking )情報を含む
動的セクション1140を示す。使用される第2の値は
負荷可能(loadable)コード(これはJavaTMクラスファイ
ルの同等物を含む)のJavaTMクラスセクション1130
を示すために(例えば、範囲7〜0x6FFFFFFFにおいて)
まだ割り当てられてない予め決定された値(PT_CLASS)
である。
【0142】p_offsetフィールドはセグメントの最初の
バイトが存在するファイルの始まりからオフセットを与
える。
【0143】p_vaddr フィールドはセグメントの最初の
バイトがメモリにおいて存在する仮想アドレスを与え
る。p_paddr フィールドは本発明において使用されな
い。
【0144】p_fileszフィールドはセグメントのファイ
ルイメージにおいてバイトの数を与える;それはゼロで
あってもよい。
【0145】p_memsz フィールドはセグメントのメモリ
イメージにおいてバイトの数を与える;それはゼロであ
ってもよい。
【0146】p_flags フィールドはセグメントが許可を
実行する、書く又は読み出すかを示す許可フラグを保持
する。
【0147】p_align フィールドは本発明において使用
されない。
【0148】クラスセクション クラスセクション1130はクラスファイル330に含
まれるものと同じバイナリーイメージを含む。このデー
タは実行中にバイナリーファイル1101から読み出さ
れ、JavaTM解釈プログラム510に与えられる。クラス
セクション1130はPHT1120において対応する
入力に設定されるフラグPT_CLASSによって示される。
【0149】動的セクション 動的セクション1140(ELF形式で“.dynamic”と
名付けられた)は構造物の整列であり、それぞれはシス
テムクラスライブラリ525及びユーザクラスライブラ
リ527を識別するポインター及び他の情報を与える。
動的セクション1140はセクションヘッダーテーブル
1160におけるタイプSHT_DYNAMIC の入力によって及
びプログラムヘッダーテーブル1120におけるタイプ
PT_DYNAMICの入力によって示される。
【0150】動的セクション1140は次の構造を有す
る:
【0151】union d_unフィールドはd_tag の値次第で
word d_val又はアドレス(addr) d_ptrのどちらかに解釈
されるか、又は無視される。
【0152】ELFファイル構造はd_tag のために様々
な値をサポートする。ABIに最近記述されたように、
値0〜23は有効であり、d_tag のための値として定義
される。値24〜0x6FFFFFFFは使用されず、範囲0x7000
0000(DT_LOPROC )〜0x7FFFFFFF(DT_HIPROC )の値は
処理装置特定構文のために確保される。本発明はd_tag
のために2つの既存値及び3つの新しい値を使用する。
2つの既存値はDT_NULL とDT_STRTAB である。3つの新
しい値はDT_JAVA_CLASSNAME 、DT_JAVA_NEEDED_CLASSDI
R 、DT_JAVA_NEEDED_LIBDIR である。
【0153】もしd_tag が0(DT_NULL )の値を有する
ならば、その入力は配列の終わりをマークする。もしd_
tag が5(DT_STRTAB )の値を有するならば、d_unはア
ドレスd_ptr として解釈され、ストリングテーブル11
50のアドレスを保持する。
【0154】値DT_JAVA_CLASSNAME 、DT_JAVA_NEEDED_C
LASSDIR 、DT_JAVA_NEEDED_LIBDIRはABIによってま
だ割り当てられてない予め決定された値(例えば、範囲
24〜0x6FFFFFFFの3つの値)である。例示目的だけの
ために、記号値(symbolic value)DT_JAVA_CLASSNAME 、
DT_JAVA_NEEDED_CLASSDIR 、DT_JAVA_NEEDED_LIBDIRは
それぞれ数値24、25、26に相当すると仮定しても
よい。あらゆる3つの割り当てられてない値が24、2
5、26の代わりに使用できることは明らかである。
【0155】もしd_tag が値DT_JAVA_CLASSNAME (例え
ば24)を有するならば、d_unはword d_valとして解釈
され、ヌル終端(null-terminated )ストリングのストリ
ングテーブル1150にかかわるオフセットを保持す
る。ヌル終端ストリングはクラスセクション1130の
コンテンツによって表されるクラス名を与える。オフセ
ットはDT_STRTAB 入力に記録されたテーブルにかかわる
索引である。
【0156】もしd_tag が値DT_JAVA_NEEDED_CLASSDIR
(例えば25)を有するならば、d_unはword d_valとし
て解釈され、ヌル終端ストリングのストリングテーブル
1150にかかわるオフセットを保持する。ヌル終端ス
トリングはランタイムで呼び出されうる追加クラスを含
むユーザクラスライブラリ527として探索されるため
のディレクトリ名を与える。オフセットはDT_STRTAB 入
力に記録されたテーブルにかかわる索引である。動的配
列はこのタイプの複数入力を含んでもよい。これらの入
力の相対副指令には重要な意味があるが、他のタイプの
入力の相対副指令には重要な意味がない。
【0157】もしd_tag が値DT_JAVA_NEEDED_LIBDIR
(例えば26)を有するならば、d_unはword d_valとし
て解釈され、ヌル終端ストリングのストリングテーブル
1150にかかわるオフセットを保持する。ヌル終端ス
トリングはランタイムで呼び出されうる追加クラスを含
むシステムクラスライブラリ525として探索されるた
めのディレクトリ名を与える。オフセットはDT_STRTAB
入力に記録されたテーブルにかかわる索引である。動的
配列はこのタイプの複数入力を含んでもよい。これらの
入力の相対副指令には重要な意味があるが、他のタイプ
の入力の相対副指令には重要な意味がない。
【0158】動的ストリングテーブル 動的ストリングテーブル1150(ELF形式で“.dyn
str ”と名付けられた)は一般にストリングと呼ばれる
ヌル終端文字列を保持する。オブジェクトファイルは記
号及びセクション名を表すためにこれらのストリングを
使用する。これはストリングテーブルセクションにかか
わる索引としてストリングを参照する。最初のバイト
(索引ゼロ)はヌル文字を保持するために定義される。
同様にストリングテーブルの最後のバイトは全てのスト
リングのためのヌル終端を保証するヌル文字を保持する
ために定義される。索引がゼロであるストリングはコン
テキスト次第で名前なし又はヌル名(null name )を特定
する。空きストリングテーブルセクションは許可され
る;そのセクションヘッダーのsh_size 要素はゼロを含
む。ゼロでない索引は空きストリングテーブルのために
無効である。セクションヘッダーのsh_name 要素は、E
LFヘッダーのe_shstrndx要素によって指定されるよう
に、セクションヘッダーストリングテーブルセクション
にかかわる索引を保持する。
【0159】セクションヘッダーテーブル セクションヘッダーテーブル1160は次の形式のElf
32_Shdr 構造の列である:
【0160】sh_name フィールドはセクション名を特定
する。その値はヌル終端ストリングのロケーションを与
えるセクションヘッダーストリングテーブルセクション
にかかわる索引である。
【0161】sh_type フィールドはセクションのコンテ
ンツ及び構文を類別する。本発明においてsh_type:SHT_
STRTABとSHT_DYNAMIC のために2つの値が使用される。
もしsh_type が3(SHT_STRTAB)の値を有するならば、
SHT入力は動的ストリングテーブル1150を保持す
るセクションを記述する。もしsh_type が6(SHT_DYNA
MIC )の値を有するならば、SHT入力はクラスセクシ
ョン1120を記述する。更に、0(SHT_NULL)の値は
どのセクションにも対応しない非活動(inactive)の入力
を示す。
【0162】sh_flagsフィールドは雑属性を記述する1
ビットのフラグを供給する。
【0163】sh_addr フィールドは本発明において使用
されない。
【0164】sh_offset フィールドはセクションのファ
イルの始めから最初のバイトまでのバイトオフセットを
与える。
【0165】sh_size フィールドはセクションのサイズ
をバイトで与える。
【0166】sh_link 及びsh_info フィールドは本発明
において使用されない。
【0167】sh_addralignフィールドはセクションのた
めの整列必要条件を示すために使用される。
【0168】sh_entsizeフィールドは記号テーブルなど
の固定サイズ入力のテーブルを保持するセクションのた
めに使用される。そのようなセクションのために、この
フィールドは各入力のサイズをバイトで与える。もしセ
クションが固定サイズ入力のテーブルを保持しないなら
ば、フィールドは0を含む。このフィールドは本発明に
おいて使用されない。
【0169】図10はJavaTMクラスファイルコンテンツ
と動的ライブラリロケーション情報の両方を含む1つの
実行可能なファイルを作成するための手順を図示したも
のである。これによって、ファイル関係相関のための配
慮なしに直接JavaTMクラス実行が許可される。図10の
手順は図7の手順と同じ方式及び構文で呼び出される。
例えば: javald -C /opt/acme/lib -C lib -o foo progname
【0170】実行は工程1010において始まる。工程
1020において、プログラムはELFヘッダー111
0を初期化する。工程1030において、プログラムは
PHT1120を初期化する。工程1040において、
プログラムは動的ストリングテーブル1150を作成す
る。このテーブルはシステムクラスライブラリ525及
びユーザクラスライブラリ527を識別する必要なスト
リング定数で満たされている。工程1050においてプ
ログラムは動的セクション1140を作成し、動的スト
リングテーブル1150内のストリングテーブル入力へ
のポインターでそれを満たす。工程1060において、
プログラムはクラスファイル330において読み出し、
それをクラスセクション1130へコピーする。工程1
070において、プログラムはセクションヘッダーテー
ブル1160を作成し、動的セクション1140及びク
ラスセクション1130を記述するセクションヘッダー
テーブル入力を初期化する。実行は工程1090におい
て終了する。この時点において、ELF形式のバイナリ
ーファイルはクラスファイル330のコンテンツ及びク
ラスライブラリ525及び527を特定するのに必要な
データの両方を含むものを作成したことになる。
【0171】図12は図11のバイナリーELFファイ
ル11の実行を図示したものである。ユーザはバイナリ
ーファイル1101の名前をタイプする。このファイル
はUNIX核910によって読み出される。そしてそれ
は図11に関して記述されるように、ファイルのコンテ
ンツを調べ解釈する。核910はストリングテーブル1
150に記憶され、動的セクション1140によって指
定される値にしたがってCLASSPATH 520及びJAVA_HOM
E 530を設定する。核910はデータセクション11
30のコンテンツをJavaTM解釈プログラム510へ渡
す。コンテンツは例えばUNIXパイプを通る方法を含
むいくつかの方法によって渡されてもよい。他の方法は
バイナリーファイル1101内のクラスセクション11
30のオフセットを指定するファイル記述子をJavaTM
釈プログラム510へ渡すこと、又はメモリ内にクラス
セクション1130をマップし、JavaTM解釈プログラム
にマップされたメモリロケーションの基底アドレスを渡
すことを含む。JavaTM解釈プログラム510は入力クラ
スファイル330を参照せず、その代わり核910によ
って提供されたEFLファイル1101からJavaTMクラ
ス情報を得る。解釈プログラムは“JAVA_HOME ”と名付
けられた環境変数530を問い合わせ、それによりJava
TMランタイムシステムのためのホームディレクトリ53
5の名前を決定する。JavaTM解釈プログラムは“CLASSP
ATH ”環境変数520も問い合わせ、それにより様々な
ユーザクラスライブラリ527及びシステムクラスライ
ブラリ525の名前を決定する。それらはランタイムで
呼び出されうる追加クラスを含む。その外に、もしJava
TM解釈プログラムがそれをファイル記述子又はマップさ
れたメモリロケーションの基底アドレスへ渡すことによ
って呼び出されるならば、JavaTM解釈プログラムはEL
Fファイルから直接に依存情報を得てもよい。
【0172】この第3のアプローチはJavaTMクラスファ
イル330及びスクリプトファイルのロケーションを調
整する義務を負うことなしにCLASSNAME の動的解決を可
能にすることにおいて特に魅力がある。スクリプトファ
イルは全く存在せず、事実、JavaTMクラスファイルはja
vald動作に従って消去されてもよい。なぜならクラスフ
ァイルはjavaldプロセスにおいてしか使用されず、実行
中に決して参照されないからである。
【0173】好適な例の様々な例が上述されたが、それ
らが例としてだけ表され、制限しないことは理解される
であろう。即ち、好適な例の幅及び広さは上述された例
によって制限されるべきではないが、請求項及びそれら
の均等物に従ってのみ定義されるべきである。
【図面の簡単な説明】
【図1】図1は好適な実施例に従った代表的なハードウ
エア環境のブロックダイアクラムである。
【図2】図2はJavaで書かれたサンプルプログラムを表
示したものである。
【図3】図3はJavaTMコンパイルプロセスを図示したも
のである。
【図4】図4はJavaTMクラスファイルの形式を図示した
ものである。
【図5】図5はコンパイルされたJavaTMクラスの実行を
図示したものである。
【図6】図6はコンパイルされたJavaTMクラスファイル
をサポートするために拡張された標準システムexec()処
理への拡張を図示したものである。
【図7】図7は要求された環境変数を設定し、解釈プロ
グラムを呼び出すためのスクリプトファイルを作成する
ためにプログラムjavaldの工程を図示したものである。
【図8】図8は図7のプログラムファイルによって生産
されたスクリプトファイルの例を表示したものである。
【図9】図9は図8に表示されたようなスクリプトを通
じてコンパイルされたJavaTMクラスの実行を図示したも
のである。
【図10】図10はJavaTMクラスファイルコンテンツ及
び動的ライブラリロケーション情報の両方を含んだ単一
実行可能ファイルの作成のための手順を図示したもので
ある。
【図11】図11はアーキテクチャ独立バイナリー実行
可能コードをサポートするために適用されたELF形式
のバイナリーファイルの形式を図示したものである。
【図12】図12は図11のバイナリーELFファイル
の実行を図示したものである。

Claims (21)

    【特許請求の範囲】
  1. 【請求項1】 次の工程を含む、コンピューター上でア
    ーキテクチャ独立バイナリープログラムを実行する方
    法: a)オブジェクトファイルを読み出す; b)アーキテクチャ独立オブジェクトコードを含むオブ
    ジェクトファイルの予め決定されたコード部分を選択す
    る; c)オブジェクトコードが解釈を必要とするかを決定す
    るためにコード部分内の予め決定されたフィールドのコ
    ンテンツと予め決定された値を比較する;及び d)もしオブジェクトコードが解釈を必要とするなら
    ば、オブジェクトコードを解釈するために解釈プログラ
    ムを呼び出す。
  2. 【請求項2】 次の工程を更に含む請求項1の方法: e)オブジェクトファイルから動的依存情報を抽出す
    る;及び f)動的依存情報を解釈プログラムに与える。
  3. 【請求項3】 オブジェクトファイルが工業規格形式に
    基づいて構造化される請求項1の方法。
  4. 【請求項4】 オブジェクトファイルがELFファイル
    形式に基づいて構造化される請求項3の方法。
  5. 【請求項5】 オブジェクトファイルがデータセクショ
    ン及び動的セクションを含み、前記動的セクションが解
    釈プログラムによって実行される追加オブジェクトファ
    イルを与えるために構成された少なくとも1つのライブ
    ラリを識別する請求項2の方法。
  6. 【請求項6】 オブジェクトファイルがJavaクラスファ
    イルを含む請求項1の方法。
  7. 【請求項7】 オブジェクトファイルがストリングテー
    ブルを更に含み、前記ストリングテーブルが1以上のス
    トリングを含み、前記ストリングのそれぞれがライブラ
    リを識別する請求項5の方法。
  8. 【請求項8】 下記のものを含む、コンピューター上で
    アーキテクチャ独立バイナリープログラムを実行するた
    めの装置: a)少なくとも1つの処理装置; b)様々な機能を行うための処理装置によって利用され
    る複数のコードセグメントを記憶した、下記のものを含
    む記憶装置: i)オブジェクトファイルを読み出す第1コードセグメ
    ント; ii)アーキテクチャ独立オブジェクトコードを含むオブ
    ジェクトファイルの予め決定されたコード部分を選択す
    る第2コードセグメント; iii )コード部分内の予め決定されたフィールドのコン
    テンツと予め決定された値を比較し、オブジェクトコー
    ドが解釈を必要とするかを決定する第3コードセグメン
    ト;及び iv)もしオブジェクトコードが解釈を必要とするなら
    ば、オブジェクトコードを解釈する第4コードセグメン
    ト。
  9. 【請求項9】 下記のものを更に含む請求項8の装置: v)オブジェクトファイルから動的依存情報を抽出する
    ための処理装置によって利用される第5コードセグメン
    ト;及び vi)解釈プログラムに動的依存情報を与えるための処理
    装置によって利用される第6コードセグメント。
  10. 【請求項10】 オブジェクトファイルが工業規格形式
    に準拠する請求項8の装置。
  11. 【請求項11】 オブジェクトファイルがELFファイ
    ル形式に準拠する請求項10の装置。
  12. 【請求項12】 オブジェクトファイルがデータセクシ
    ョン及び動的セクションを含み、前記動的セクションが
    解釈プログラムによって実行される追加オブジェクトフ
    ァイルを与えるために構成された少なくとも1つのライ
    ブラリを識別する請求項9の装置。
  13. 【請求項13】 オブジェクトファイルがJavaクラスフ
    ァイルを含む請求項8の装置。
  14. 【請求項14】 オブジェクトファイルがストリングテ
    ーブルを更に含み、前記ストリングテーブルが1以上の
    ストリングを含み、前記ストリングのそれぞれがライブ
    ラリを識別する請求項12の装置。
  15. 【請求項15】 コンピューター上でアーキテクチャ独
    立バイナリープログラムを実行させるために具体化され
    たコンピューター読み出し可能コードを有するコンピュ
    ーター使用可能媒体を含むコンピュータープログラム製
    品であって、下記のものを含むコンピュータープログラ
    ム製品: a)オブジェクトファイルを読み出す第1ソフトウエ
    ア; b)アーキテクチャ独立オブジェクトコードを含むオブ
    ジェクトファイルの予め決定されたコード部分を選択す
    る第2ソフトウエア; c)オブジェクトコードが解釈を必要とするかを決定す
    るためにコード部分内の予め決定されたフィールドのコ
    ンテンツと予め決定された値を比較する第3ソフトウエ
    ア;及び d)もしオブジェクトコードが解釈を必要とするなら
    ば、オブジェクトコードを解釈するために解釈プログラ
    ムを呼び出す第4ソフトウエア。
  16. 【請求項16】 下記のものを更に含む請求項15のコ
    ンピュータープログラム製品: e)オブジェクトファイルから動的依存情報を抽出する
    第5ソフトウエア;及び d)動的依存情報を解釈プログラムに与える第6ソフト
    ウエア。
  17. 【請求項17】 オブジェクトファイルが工業規格形式
    に準拠する請求項15のコンピュータープログラム製
    品。
  18. 【請求項18】 オブジェクトファイルがELFファイ
    ル形式に準拠する請求項17のコンピュータープログラ
    ム製品。
  19. 【請求項19】 オブジェクトファイルがデータセクシ
    ョン及び動的セクションを含み、前記動的セクションが
    解釈プログラムによって実行される追加オブジェクトフ
    ァイルを与えるために構成された少なくとも1つのライ
    ブラリを識別する請求16のコンピュータープログラム
    製品。
  20. 【請求項20】 オブジェクトファイルがJavaクラスフ
    ァイルを含む請求項15のコンピュータープログラム製
    品。
  21. 【請求項21】 オブジェクトファイルがストリングテ
    ーブルを更に含み、前記ストリングテーブルが1以上の
    ストリングを含み、前記ストリングのそれぞれがライブ
    ラリを識別する請求項19のコンピュータープログラム
    製品。
JP9349905A 1996-11-13 1997-11-12 アーキテクチャ独立バイナリープログラムを直接実行するシステム、方法及び装置 Pending JPH10269082A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/748933 1996-11-13
US08/748,933 US5923878A (en) 1996-11-13 1996-11-13 System, method and apparatus of directly executing an architecture-independent binary program

Publications (1)

Publication Number Publication Date
JPH10269082A true JPH10269082A (ja) 1998-10-09

Family

ID=25011529

Family Applications (1)

Application Number Title Priority Date Filing Date
JP9349905A Pending JPH10269082A (ja) 1996-11-13 1997-11-12 アーキテクチャ独立バイナリープログラムを直接実行するシステム、方法及び装置

Country Status (4)

Country Link
US (1) US5923878A (ja)
EP (1) EP0848325B1 (ja)
JP (1) JPH10269082A (ja)
DE (1) DE69735343T2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170123337A (ko) * 2015-12-25 2017-11-07 바이두 온라인 네트웍 테크놀러지 (베이징) 캄파니 리미티드 애플리케이션 로딩 방법 및 장치

Families Citing this family (84)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6960133B1 (en) 2000-08-28 2005-11-01 Igt Slot machine game having a plurality of ways for a user to obtain payouts based on selection of one or more symbols (power pays)
US6321323B1 (en) * 1997-06-27 2001-11-20 Sun Microsystems, Inc. System and method for executing platform-independent code on a co-processor
US6252591B1 (en) * 1997-10-10 2001-06-26 International Business Machines Corp. Method for mapping a text-oriented user interface to a graphics user interface by means of a class library
US6006235A (en) * 1997-11-26 1999-12-21 International Business Machines Corporation Method and apparatus for invoking a stored procedure or a user defined interpreted language function in a database management system
US6226783B1 (en) * 1998-03-16 2001-05-01 Acuity Imaging, Llc Object oriented method of structuring a software step program
US6161216A (en) * 1998-04-29 2000-12-12 Emc Corporation Source code debugging tool
US7076765B1 (en) * 1998-06-24 2006-07-11 Kabushiki Kaisha Toshiba System for hiding runtime environment dependent part
KR20010072477A (ko) * 1998-08-13 2001-07-31 썬 마이크로시스템즈, 인코포레이티드 가상 머신 환경에서 네이티브 코드를 변환하고 실행하는방법 및 장치
US6205578B1 (en) * 1998-08-14 2001-03-20 Ati International Srl Interpreter for stack-based languages
US6446084B1 (en) 1998-09-22 2002-09-03 Sun Microsystems, Inc. Optimizing symbol table lookups in platform-independent virtual machines
US6742175B1 (en) 1998-10-13 2004-05-25 Codagen Technologies Corp. Component-based source code generator
CA2255042C (en) * 1998-11-30 2004-04-13 Leonard W. Theivendra Class loader
US7283991B1 (en) * 1999-03-11 2007-10-16 Microsoft Corporation Caching system for path search optimization
US6460178B1 (en) * 1999-06-30 2002-10-01 Microsoft Corporation Shared library optimization for heterogeneous programs
US6769985B1 (en) 2000-05-31 2004-08-03 Igt Gaming device and method for enhancing the issuance or transfer of an award
US7695363B2 (en) 2000-06-23 2010-04-13 Igt Gaming device having multiple display interfaces
US7699699B2 (en) 2000-06-23 2010-04-20 Igt Gaming device having multiple selectable display interfaces based on player's wagers
US6938039B1 (en) * 2000-06-30 2005-08-30 Emc Corporation Concurrent file across at a target file server during migration of file systems between file servers using a network file system access protocol
GB2364852A (en) * 2000-07-14 2002-02-06 Nokia Mobile Phones Ltd Alert signal generation
US6935955B1 (en) 2000-09-07 2005-08-30 Igt Gaming device with award and deduction proximity-based sound effect feature
US6739973B1 (en) 2000-10-11 2004-05-25 Igt Gaming device having changed or generated player stimuli
GB0026363D0 (en) 2000-10-27 2000-12-13 Sgs Thomson Microelectronics Bi-endian libraries
US7040983B2 (en) 2001-03-21 2006-05-09 Igt Gaming device having a multi-round, multi-characteristic matching game
US7047525B2 (en) * 2001-04-02 2006-05-16 American Express Travel Related Services Company, Inc. System and method for an interoperability framework
US6996824B2 (en) * 2001-05-09 2006-02-07 Sun Microsystems, Inc. Frameworks for efficient representation of string objects in Java programming environments
US6986148B2 (en) * 2001-07-17 2006-01-10 Appforge, Inc. Methods and systems for providing platform-independent shared software components for mobile devices
GB0120611D0 (en) * 2001-08-24 2001-10-17 Igt Uk Ltd Video display systems
US7901291B2 (en) 2001-09-28 2011-03-08 Igt Gaming device operable with platform independent code and method
US7666098B2 (en) * 2001-10-15 2010-02-23 Igt Gaming device having modified reel spin sounds to highlight and enhance positive player outcomes
US7708642B2 (en) * 2001-10-15 2010-05-04 Igt Gaming device having pitch-shifted sound and music
US6848996B2 (en) * 2001-10-15 2005-02-01 Igt Gaming device with sound recording changes associated with player inputs
US7747758B2 (en) * 2001-10-29 2010-06-29 International Business Machines Corporation Dynamic port assignment
EP1308838A3 (en) * 2001-10-31 2007-12-19 Aplix Corporation Intermediate code preprocessing apparatus, intermediate code execution apparatus, intermediate code execution system, and computer program product for preprocessing or executing intermediate code
EP1313011B1 (en) * 2001-10-31 2007-12-12 Aplix Corporation Intermediate code execution system, intermediate code execution method, and computer program product for executing intermediate code
KR100462876B1 (ko) * 2002-03-14 2004-12-17 삼성전자주식회사 네트워크 기술군 표준 플랫폼을 사용하는 방법
US6701320B1 (en) * 2002-04-24 2004-03-02 Bmc Software, Inc. System and method for determining a character encoding scheme
US7546364B2 (en) * 2002-05-16 2009-06-09 Emc Corporation Replication of remote copy data for internet protocol (IP) transmission
US6934822B2 (en) * 2002-08-06 2005-08-23 Emc Corporation Organization of multiple snapshot copies in a data storage system
US6792518B2 (en) 2002-08-06 2004-09-14 Emc Corporation Data storage system having mata bit maps for indicating whether data blocks are invalid in snapshot copies
US6957362B2 (en) * 2002-08-06 2005-10-18 Emc Corporation Instantaneous restoration of a production copy from a snapshot copy in a data storage system
US7178139B2 (en) * 2002-08-27 2007-02-13 Delphi Technologies, Inc. Executable file system for an embedded computer
US7080356B2 (en) * 2002-09-18 2006-07-18 Sun Microsystems, Inc. Certification test suite
US7789748B2 (en) * 2003-09-04 2010-09-07 Igt Gaming device having player-selectable music
US7105736B2 (en) * 2003-09-09 2006-09-12 Igt Gaming device having a system for dynamically aligning background music with play session events
US7500226B2 (en) * 2004-03-02 2009-03-03 Microsoft Corporation Efficient checking of state-dependent constraints
WO2005099340A2 (en) * 2004-04-19 2005-10-27 Securewave S.A. On-line centralized and local authorization of executable files
EP2267624B1 (en) * 2004-04-19 2017-07-12 Lumension Security S.A. A generic framework for runtime interception and execution control of interpreted languages
US7853742B2 (en) * 2004-04-26 2010-12-14 Intel Corporation System and method to conditionally shrink an executable module
US7585219B2 (en) 2004-09-30 2009-09-08 Igt Gaming device having a matching symbol game
US8043155B2 (en) 2004-10-18 2011-10-25 Igt Gaming device having a plurality of wildcard symbol patterns
US8020141B2 (en) * 2004-12-06 2011-09-13 Microsoft Corporation Operating-system process construction
US7546431B2 (en) * 2005-03-21 2009-06-09 Emc Corporation Distributed open writable snapshot copy facility using file migration policies
US8055724B2 (en) * 2005-03-21 2011-11-08 Emc Corporation Selection of migration methods including partial read restore in distributed storage management
US8521752B2 (en) * 2005-06-03 2013-08-27 Osr Open Systems Resources, Inc. Systems and methods for arbitrary data transformations
US8849968B2 (en) * 2005-06-20 2014-09-30 Microsoft Corporation Secure and stable hosting of third-party extensions to web services
US8074231B2 (en) * 2005-10-26 2011-12-06 Microsoft Corporation Configuration of isolated extensions and device drivers
US20070094495A1 (en) * 2005-10-26 2007-04-26 Microsoft Corporation Statically Verifiable Inter-Process-Communicative Isolated Processes
US8042103B2 (en) * 2005-11-29 2011-10-18 International Business Machines Corporation Pre-translated files used in a virtual machine
US8032898B2 (en) * 2006-06-30 2011-10-04 Microsoft Corporation Kernel interface with categorized kernel objects
US7512748B1 (en) 2006-08-17 2009-03-31 Osr Open Systems Resources, Inc. Managing lock rankings
US8539228B1 (en) 2006-08-24 2013-09-17 Osr Open Systems Resources, Inc. Managing access to a resource
US8491392B2 (en) 2006-10-24 2013-07-23 Igt Gaming system and method having promotions based on player selected gaming environment preferences
US20080189627A1 (en) * 2007-02-07 2008-08-07 Microsoft Corporation Execution of application based on task selection
US8789063B2 (en) * 2007-03-30 2014-07-22 Microsoft Corporation Master and subordinate operating system kernels for heterogeneous multiprocessor systems
US20080244507A1 (en) * 2007-03-30 2008-10-02 Microsoft Corporation Homogeneous Programming For Heterogeneous Multiprocessor Systems
US8024433B2 (en) * 2007-04-24 2011-09-20 Osr Open Systems Resources, Inc. Managing application resources
US7949693B1 (en) 2007-08-23 2011-05-24 Osr Open Systems Resources, Inc. Log-structured host data storage
CN101520733B (zh) * 2008-02-27 2014-04-16 国际商业机器公司 装载类的方法和装置及重组类存档文件方法
US8359459B2 (en) * 2008-05-27 2013-01-22 Oracle America, Inc. Using hardware support to reduce synchronization costs in multithreaded applications
US8591308B2 (en) 2008-09-10 2013-11-26 Igt Gaming system and method providing indication of notable symbols including audible indication
US9235458B2 (en) 2011-01-06 2016-01-12 International Business Machines Corporation Methods and systems for delegating work objects across a mixed computer environment
US9052968B2 (en) * 2011-01-17 2015-06-09 International Business Machines Corporation Methods and systems for linking objects across a mixed computer environment
US8903874B2 (en) 2011-11-03 2014-12-02 Osr Open Systems Resources, Inc. File system directory attribute correction
US8460090B1 (en) 2012-01-20 2013-06-11 Igt Gaming system, gaming device, and method providing an estimated emotional state of a player based on the occurrence of one or more designated events
US9760380B2 (en) * 2012-03-14 2017-09-12 Microsoft Technology Licensing, Llc Using grammar to serialize and de-serialize objects
US8740689B2 (en) 2012-07-06 2014-06-03 Igt Gaming system and method configured to operate a game associated with a reflector symbol
US9245407B2 (en) 2012-07-06 2016-01-26 Igt Gaming system and method that determines awards based on quantities of symbols included in one or more strings of related symbols displayed along one or more paylines
US9192857B2 (en) 2013-07-23 2015-11-24 Igt Beat synchronization in a game
US9830329B2 (en) 2014-01-15 2017-11-28 W. Anthony Mason Methods and systems for data storage
US9772828B2 (en) * 2014-04-22 2017-09-26 Oracle International Corporation Structural identification of dynamically generated, pattern-instantiation, generated classes
CN105160241A (zh) * 2014-09-03 2015-12-16 上海广升信息技术有限公司 一种防止安卓手机刷机的方法
US9947170B2 (en) 2015-09-28 2018-04-17 Igt Time synchronization of gaming machines
US10338907B2 (en) * 2016-12-04 2019-07-02 Sap Se Cloud service framework for toolkit deployment
CN110007923B (zh) * 2019-03-28 2022-12-06 深圳市创联时代科技有限公司 一种shell的实现方法

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE59005294D1 (de) * 1989-11-29 1994-05-11 Siemens Ag Verfahren zur dynamischen bindung von definierbaren programmelementen eines interaktiven datenverarbeitungssystems.
US5193180A (en) * 1991-06-21 1993-03-09 Pure Software Inc. System for modifying relocatable object code files to monitor accesses to dynamically allocated memory
US5367685A (en) * 1992-12-22 1994-11-22 Firstperson, Inc. Method and apparatus for resolving data references in generated code
US5675801A (en) * 1994-09-30 1997-10-07 International Business Machines Corporation Object oriented system and method for generating target language code
US5590331A (en) * 1994-12-23 1996-12-31 Sun Microsystems, Inc. Method and apparatus for generating platform-standard object files containing machine-independent code
US5761513A (en) * 1996-07-01 1998-06-02 Sun Microsystems, Inc. System and method for exception handling in dynamically linked programs
US5787431A (en) * 1996-12-16 1998-07-28 Borland International, Inc. Database development system with methods for java-string reference lookups of column names

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170123337A (ko) * 2015-12-25 2017-11-07 바이두 온라인 네트웍 테크놀러지 (베이징) 캄파니 리미티드 애플리케이션 로딩 방법 및 장치

Also Published As

Publication number Publication date
US5923878A (en) 1999-07-13
EP0848325A3 (en) 2001-12-12
EP0848325A2 (en) 1998-06-17
EP0848325B1 (en) 2006-03-01
DE69735343T2 (de) 2006-08-03
DE69735343D1 (de) 2006-04-27

Similar Documents

Publication Publication Date Title
JPH10269082A (ja) アーキテクチャ独立バイナリープログラムを直接実行するシステム、方法及び装置
US6260187B1 (en) System for modifying object oriented code
US5978585A (en) Development system with improved methods for recompiling dependent code modules
JP4841118B2 (ja) ソフトウェア開発インフラストラクチャ
US7155381B2 (en) Module for developing wireless device applications using an integrated emulator
US7380242B2 (en) Compiler and software product for compiling intermediate language bytecodes into Java bytecodes
US6151703A (en) Development system with methods for just-in-time compilation of programs
US7631301B2 (en) Customizing binary content files
CN107924326B (zh) 对经更新的类型的迁移方法进行覆盖
US20120151437A1 (en) Method for translating a cobol source program into readable and maintainable program code in an object oriented second programming language
US7162626B2 (en) Use of common language infrastructure for sharing drivers and executable content across execution environments
US6412108B1 (en) Method and apparatus for speeding up java methods prior to a first execution
US20030236657A1 (en) Method of developing wireless device applications using an integrated emulator and an IDE
JP2000347871A (ja) スタブ/アダプタ自動生成器
US7694289B2 (en) Method for embedding object codes in source codes
US20040083467A1 (en) System and method for executing intermediate code
AU2019372246A1 (en) Selective substitution of legacy load module programs with classes for execution in a java virtual machine
WO2001057654A2 (en) Preprocessing of interfaces to allow fast call of native elements
JP2002182926A (ja) コンパイル方法及びコンピュータ読み取り可能な記録媒体
US6792600B1 (en) Method and apparatus for just in time compilation of instructions
Puder et al. Towards an XML-based bytecode level transformation framework
Cockshott Glasgow Pascal Compiler with vector extensions
Dewar et al. Micro Spitbol
Gschwind et al. Reengineering a server ecosystem for enhanced portability and performance
Puder Byte code transformations using XSL stylesheets