JP2001060158A - モジュールごとのベリファイ処理 - Google Patents

モジュールごとのベリファイ処理

Info

Publication number
JP2001060158A
JP2001060158A JP2000152854A JP2000152854A JP2001060158A JP 2001060158 A JP2001060158 A JP 2001060158A JP 2000152854 A JP2000152854 A JP 2000152854A JP 2000152854 A JP2000152854 A JP 2000152854A JP 2001060158 A JP2001060158 A JP 2001060158A
Authority
JP
Japan
Prior art keywords
module
verification
class
constrained
constraints
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
JP2000152854A
Other languages
English (en)
Inventor
Gilad Bracha
ブラーチャ ギラッド
Sheng Liang
リャン シェン
Timothy G Lindholm
ジー.リンドルム ティモシー
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 JP2001060158A publication Critical patent/JP2001060158A/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/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • 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/44589Program code verification, e.g. Java bytecode verification, proof-carrying code
    • 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

Abstract

(57)【要約】 (修正有) 【課題】完全要求駆動型ロードを防止することなくリン
ク中にベリファイ処理を実行する。 【解決手段】コンピュータ・プログラムのモジュール内
の命令について1回1モジュール・ベリファイ処理す
る。ロードされている最初のモジュール内の命令をチェ
ックして、その最初のモジュールとは異なる参照モジュ
ール内の情報が要求されているかどうかをまず決定す
る。もし、その情報が要求されていれば、その参照モジ
ュールのための制約が、その参照モジュールをアクセス
することなく、書き込まれる。リンク中に、ロードされ
ている最初のモジュールが、ベリファイ前処理に合格し
たかどうかが決定され、制約付きモジュールに課せられ
るベリファイ前処理制約が読み込まれる。その制約付き
モジュールが既にロードされていれば、ベリファイ前処
理制約が実施される。

Description

【発明の詳細な説明】
【0001】本特許出願は、1995年12月20日出
願の、YellinとGoslingによる、米国特許
出願第575291号(P1000)「BYTECOD
EPROGRAM INTERPRETER APPA
RATUS AND METHOD WITH PRE
−VERIFICATION OF DATA TYP
E RESTRICTIONS AND OBJECT
INITIALIZATION」(現在、米国特許第
5740441号)、および、1998年8月14日出
願の、BrachaとLiangによる、米国特許出願
第09/134477号(P3135)「METHOD
S AND APPARATUS FOR TYPE
SAFE,LAZY,USER−DEFINED CL
ASSLOADING」に関連する。それらの米国特許
出願は、本明細書において、参照されている。
【0002】また、本特許出願は、1999年5月27
日出願の、米国特許出願第09/321223号(50
253−228)(P3564)「FULLY LAZ
YLINKING」、1999年5月27日出願、米国
特許出願第09/321226(50253−230)
(P3566)「FULLY LAZY LINKIN
G WITH MODULE−BY−MODULE V
ERIFICATION」、1999年5月27日出願
の、米国特許出願第09/320581(50253−
235)(P3810)「CACHING UNTRU
STED MODULE FOR MODULE−BY
−MODULE VERIFICATION」、およ
び、1999年5月27日出願の、米国特許出願第09
/321228号(50253−236)(P380
9)「DATAFLOW ALGORITHM FOR
SYMBOLIC COMPUTATION OF
LOWEST UPPER BOUND TYPE」に
も関連する。
【0003】(技術分野)一般に、本発明は、コンピュ
ータ・プログラミング言語に関し、詳細には、要求駆動
型(lazy)ロードをサポートしながら、命令をベリ
ファイ処理する動的リンクを伴うコンピュータ・プログ
ラミングに関する。
【0004】(背景技術)一般に、コンピュータ・プロ
グラムは、ソース・コード・ステートメントとして、人
間にとって理解しやすい高級言語で書かれている。コン
ピュータ・プログラムが実際に実行されるとき、コンピ
ュータは、中央演算処理装置(CPU)の操作を直接制
御するバイナリ信号を含む命令から成るマシン・コード
に反応する。ソース・コードを読むコンパイラと呼ぶ特
定のプログラムを使用して、そのステートメントを特定
のCPUのマシン・コードの命令に変換することは、当
業者によく知られている。このようにして生成されたマ
シン・コードの命令は、プラットホーム依存である。す
なわち、異なるコンピュータ装置は異なるマシン・コー
ドによって示される異なる命令セットを有する異なるC
PUを有する。
【0005】また、より簡単ないくつかのプログラムを
組み合わせて、より強力なプログラムを製作すること
は、当業者によく知られている。コンパイルする前のソ
ース・コードのセグメントを一緒にコピーして、そし
て、組み合わされたソースをコンパイルすることによっ
て、プログラムが組み合わされる。ソース・コード・ス
テートメントのセグメントが変更なしで頻繁に使用され
るとき、一度に自身でコンパイルして、1つのモジュー
ルを作成し、実際にその機能が必要であるとき、そのモ
ジュールと他のモジュールとを組み合わせることはしば
しば好ましいものである。コンパイルの後のモジュール
の組み合わせをリンクと呼ぶ。どのモジュールを組み合
わせるかは、実行条件に左右され、そのモジュールの組
み合わせを実行中、実行直前に行えば、そのリンクは、
動的なリンクと呼ばれる。
【0006】リンクする利点は、プログラムを一度に、
1つのモジュールとして開発することができ、異なる開
発者が、おそらく異なる場所で、別々のモジュールを使
って同時に作業するとき、生産性を高めることができる
ことである。
【0007】実行時に実行されるリンク、すなわち、動
的なリンクの利点は、プログラムを実行するとき、実行
時に使用されないモジュールをリンクする必要がないこ
とであって、行わなければならない操作の数を減少させ
て、同様におそらく、実行コードのサイズも減少させ
る。一般に、リンク前に、特定され、メモリに持ち込ま
れるモジュールをロードしなければならない。モジュー
ルが要求されるまでモジュールのリンクを遅延させるこ
とによって、モジュールのロードを遅延させる。これ
を、要求駆動型ロードと呼ぶ。
【0008】独立に書き込みを行うことのできるいくつ
かのモジュールをアセンブルするときに、各モジュール
が、モジュール自体の中で適切に作動するかどうかをチ
ェックすること、すなわち、内部モジュール・チェック
と、モジュールが他のモジュールと協調して適切に作動
するかどうかをチェックする、すなわち、相互モジュー
ルチェックとを行うことは、賢明なことである。JAV
A(登録商標)プログラミング言語の設計者が使用して
いる用語の類似性によって、そのポスト・コンパイル・
モジュール・チェックを、ベリファイ処理と呼ぶことが
できる。
【0009】動的リンクを有効に利用するコンピュータ
・アーキテクチャの例として、ハードウエア、またはソ
フトウエアに実装できる抽象コンピュータ・アーキテク
チャであるSun Microsystems, In
c.のJAVA(登録商標)(JVM)などの仮想マシ
ン(VM)がある。ハードウエア、およびソフトウエア
に実装される両ケースのVMについて以下に記載する。
【0010】仮想マシン(VM)は、以下の方法で、プ
ラットホーム独立とすることができる。JAVA(登録
商標)プログラミング言語などの高いレベルのコンピュ
ータ言語で表現されたステートメントを、システム独立
であるVM命令にコンパイルする。マシン・コードが中
央演算処理装置(CPU)に対応するように、VM命令
が、VMに対応する。したがって、VM命令を1つのマ
シンから他のマシンに転送できる。異なる計算装置に
は、それぞれの計算装置に対応するVMを実装する必要
がある。VMは、VM命令、1度に1つまたは複数の命
令を翻訳(translate)、または、通訳(in
terprete)してVM命令を実行する。VMの実
装は、多くの場合、特定のコンピュータのCPU上でプ
ログラムを実行することであるが、VM命令を特定のプ
ロセッサまたは装置の固有の命令セットとして使用する
こともできる。後者の場合、VMは、「現実の」マシン
である。他の操作を動的リンクおよびベリファイ操作を
含むVMによって実行することもできる。
【0011】そのようなVMを使用してプログラムを作
る過程には、VMに関連し、2つの時間区分がある。
「コンパイル時間」と「実行時間」であって、「コンパ
イル時間」は高級言語をVM命令に変換するステップを
示す。そして、「実行時間」はステップを示す。JAV
A(登録商標)VM環境では、モジュールを実行するた
めに命令を解釈するステップを示す。コンパイル時間と
実行時間の間、ステートメントからコンパイルされる命
令のモジュールは、長期の任意の期間休止状態でいるこ
とができる、または、ネットワーク全体に転送される場
合を含んで、1つの記憶装置から別の記憶装置に転送さ
れることができる。
【0012】要求駆動型ロードのあるなしにかかわら
ず、ベリファイ処理を伴う動的なリンクを実現しようと
する際の問題をJAVA(登録商標)仮想マシンを例に
して説明できる。JVMは、オブジェクト指向のJAV
A(登録商標)ハイレベル・プログラミング言語に適し
た特定のVM(仮想マシン)であって、動的リンク、ベ
リファイ処理、および要求駆動型ロードを実行するよう
に設計されている。そのことは、従来のJVMを説明す
る、T.LindholmとFrank Yellin
(Addison−Wesley,Menlo Par
k,California)による、「JAVATM
irtual Machine Specificat
ion」、1997に記載されている。
【0013】JAVA(登録商標)プラットホームで使
用されるようなオブジェクト指向プログラミング技法は
広く使用されている。オブジェクト指向プログラムの基
本ユニットは、メソッド(手順)と、本明細書では、メ
ンバーと呼ばれるフィールド(データ)を有するオブジ
ェクトである。メンバーを共有するオブジェクトがクラ
スに分類される。クラスは、クラス内のオブジェクトの
共有されたメンバーを定義する。そして、各オブジェク
トは、オブジェクトが属するクラスの特定のインスタン
スである。実際には、クラスは、同様の特徴を有するマ
ルチプル・オブジェクト(マルチプル・インスタンス)
を生成するテンプレートとしてしばしば使用される。
【0014】クラスの1つの特性は、クラス内に実際に
メンバーが実装されていることが、インタフェースに曝
される場合を除いて、外部のユーザと、他のクラスから
は隠す特徴を有するカプセル化である。したがって、ク
ラスが、分散開発に適したものとなって、たとえば、異
なる開発者が、ネットワーク上の異なる場所で開発する
分散開発に適している。完全なプログラムは、必要とさ
れるクラスを集めて、それらをリンクして、結果として
得られたプログラムを実行することによって形成される
ことができる。
【0015】クラスには、継承という特徴がある。それ
は、1つのクラスが他のクラスのメンバーのすべてを継
承できるメカニズムである。他のクラスから継承される
クラスは、サブ・クラスと呼ばれる。属性を提供するク
ラスは、スーパー・クラスである。記号表現としては、
subclass<=superclass、または、
superclass=>subclassと表現でき
る。サブ・クラスは、メンバーを追加してスーパー・ク
ラスの能力を広げることができる。サブ・クラスは、同
じ名前とタイプを有する代わりのメンバーを提供するこ
とによって、スーパー・クラスの属性を無効にすること
ができる。
【0016】JVMは、コンパイルされたクラス特定の
バイナリ・フォーマット、つまりクラス・ファイル・フ
ォ−マット上で作動する。クラス・ファイルは、JVM
命令と、記号テーブルと、他の付属の情報を含む。セキ
ュリティ上、JVMは、クラス・ファイル内の命令に、
フォーマット上、構造上強い制約を課す。特定の例で
は、JVM命令は、タイプ仕様であって、以下で説明さ
れるように、所定のタイプであるオペランド上で作動す
るよう意図されている。いかなるVMでも同様の制約を
課してきた。JVMは、有効なクラス・ファイルで表現
できる機能を有する言語であれば、どのような言語も支
持する。クラス・ファイルは、JAVA(登録商標)プ
ログラム言語で表現されるプログラムを表すことができ
るオブジェクト指向構造を扱うことことができる様デザ
インされているが、また、いくつかの他のプログラミン
グ言語もサポートできる。
【0017】クラス・ファイル内では、変数は記憶位置
であって、時々、プリミティブ・タイプ、または参照タ
イプのいずれかであるコンパイル−時間タイプと呼ばれ
る、タイプを連想してきた。参照タイプは、オブジェク
トへのポインタ、または、参照するオブジェクトがない
特別なヌル参照である。サブ・クラスのタイプは、その
スーパー・クラスのサブ・タイプであると言われてい
る。JVMのためのプリミティブ・タイプは、bool
ean(真理値、真または偽をとる)、char(Un
icodeキャラクタ用のコード)、byte(0、ま
たは1の符号付き8ビット)、short(符号付き短
整数)、int(符号付き整数)、long(符号付き
長整数)、float(単精度浮動小数点数)、また
は、double(2倍精度浮動小数点数)である。
【0018】クラス・タイプのメンバー、フィールドと
メソッドであって、スーパー・クラスから継承されたメ
ンバーを含む。また、クラス・ファイルは、スーパー・
クラスを指定する。メンバーは、パブリックであり、い
かなるクラスのメンバーもアクセスできることを意味す
る。プライベート・メンバーは、宣言を含んだクラスの
メンバーのみがアクセスできる。プロテクテッド・メン
バーには、宣言クラスのメンバー、または宣言されてい
るパッケージのどこからもアクセスできる。JAVA
(登録商標)プログラミング言語で、クラスを分類する
ことができて、グループを指定することができる。指定
されたグループのクラスは、パッケージである。
【0019】JVMのための実際の命令は、クラス・フ
ァイルによってコード化されるクラスのメソッドの中に
含まれる。
【0020】JAVA(登録商標)言語プログラムが操
作の制約に違反すると、JVMは、無効の状態を検出し
て、例外として、プログラムにエラー信号を送る。例外
は、例外が起きて、コントロールが転送されると言われ
ているポイントにおいてキャッチされると言われてい
る。すべての例外は、クラスThrowableのイン
スタンス、またはそのサブ・クラスによって表される。
そのようなオブジェクトを使用して、情報を例外が起き
ているポイントから、プログラムの一部、キャッチして
処理する例外ハンドラに運ぶことができる。
【0021】JVMは、ある特定のクラスであるメソッ
ド「メイン」を呼び出して、実行を開始し、そのメソッ
ドにストリング・アレイである単一引数を渡す。したが
って、特定のクラスがロードされ、リンクされ、初期化
されることになる。
【0022】ロードは、通常、前にソース・コードから
コンパイルされたバイナリ表記を検索することによっ
て、特定の名前を有するクラス、またはパッケージのバ
イナリ・フォームを見出すプロセスを示す。JVMで
は、ロード・ステップによって、必要なクラスを代表す
るクラス・ファイルを検索する。ロード・プロセスは、
ブート・ストラップ・クラス・ローダまたは、ユーザ定
義のクラス・ローダによって実現される。ユーザ定義の
クラス・ローダは、クラスによって定義される。クラス
・ローダは、指定されたクラスを代表しているクラス・
ファイルを見い出すために、特定の位置系列を示すこと
ができる。クラス・ローダは、期待された使用法に基づ
いてプリ・フェッチしているクラスのバイナリ表記をキ
ャッシュする、または、関連するクラスのグループを一
緒にロードすることができる。プリ・フェッチされる
か、または、まとめてロードされるクラスが多いほど、
ローダは、より「非要求駆動型(eager)」であ
る。「要求駆動型(lazy)」ローダでは、できるだ
け少ないクラスがプリ・フェッチ、またはまとめてロー
ドされる。従来のJVM仕様では、非要求駆動型と、概
要求駆動型との間のロード状況を幅広いスペクトルで可
能にしている。
【0023】VMがクラス・ローダを呼んで、現在処理
されているクラスの命令を実行するのに、そのクラスが
初めて必要である時のみにクラスをロードするならば、
VMは完全要求駆動型である。実現できれば、完全要求
駆動型ロードは、実行のときに必ずしも厳密には必要と
しないクラスをロードしてシステム・メモリや実行時間
などの実行時リソースを無駄遣いすることはしない。
【0024】JVMにおけるリンクは、メモリ内のでバ
イナリ形式のクラスをキャッチして、そのクラスを実行
状態のVMに組み合わせて、実行させるプロセスであ
る。クラスは、リンクされる前にロードされなければな
らない。JVM仕様によるリンクには、3つの異なる行
動様式がある。記号参照物のベリファイ処理、準備およ
び分割の3つである。
【0025】ベリファイ処理の間、クラス・ファイル・
フォーマットのバイナリ・クラスに課せられる必要な制
約がチェックされる。そうすることが、JVMのセキュ
リティ条項にとって基本的なことである。ベリファイ処
理によって、無意味な結果につながる、または、オペレ
ーティング・システム、ファイル・システム、またはJ
VM自身の保全性を危険にさらす不法な操作が、JVM
によって試みられることは確実にない。しかしながら、
それらの制約をチェックするには、他のクラスの間のサ
ブ・タイプ関係に関する知識が必要になることが時々あ
る。したがって、ベリファイ処理に成功するしないは、
通常、ベリファイ処理されるクラスが参照する他のクラ
スの特性による。その結果、ベリファイ文脈のための現
在のJVM設計仕様が脆弱なものになる。
【0026】JVMのバイナリ・クラスは、基本的に
は、一般的なプログラム・モジュールの手本であって、
コンパイルされたソース・ステートメントから生成され
る命令を含む。妥当性チェックの文脈の脆弱性は、それ
らのチェックが、1つ以上のモジュールにわたって広が
る情報に依存していることを意味する。すなわち、本明
細書では、それらのチェックは、相互モジュール(cr
oss−module、または、inter−modu
le)・チェックと呼ばれる。他のモジュールから情報
を必要としない妥当性チェックは、本明細書では、内部
モジュール(intra−module)・チェックと
呼ばれる。
【0027】文脈に敏感なオブジェクトのベリファイ処
理には、いくつかの欠点がある。たとえば、JAVA
(登録商標)プラットホームのようなオブジェクト指向
プログラミングシステムでは、ベリファイアが、まだロ
ードされていないクラスの間のサブ・タイプ関係をチェ
ックする必要があるとき、ベリファイアは、クラス・ロ
ードを開始することになる。他のクラスを参照するコー
ドが実行されなくても、そのようなロードが起こること
がある。すなわち、文脈に敏感なベリファイ処理は、完
全要求駆動型ロードの妨げとなることがある。したがっ
て、実際に実行されている命令によって参照されるので
なければ、ロードはメモリを消費し、クラスをロードし
ないプロセスと比較すると、実行時間が長くなる。
【0028】ベリファイ処理が文脈に敏感であると、実
行前の、1回1クラス、またはモジュールのベリファイ
処理に対応できない。あらかじめ、例えば、実行前に、
クラスをベリファイ処理できないので、上記は、欠点で
あって、ベリファイ処理は、実行コストを被らなければ
ならない。したがって、実行前に、1回1モジュール・
ベリファイ処理とも呼ばれる、モジュールごとのベリフ
ァイ処理を行う必要がある。そのようなベリファイ処理
は、本明細書では、ベリファイ前処理と呼ばれる。呼び
方を変える理由は、実行中の、JVMによるリンク中に
起こるベリファイ処理と、技術的に異なっているからで
ある。
【0029】また、べリファイ処理は実行時に実行され
るので、一度実行されてベリファイ処理に合格したクラ
スは、そのクラスをロードするたびに改めてベリファイ
処理される。たとえ、そのクラスが、同じホストコンピ
ュータ上で同じアプリケーションで使用されていて、新
しいベリファイ問題は起こりそうにない、または、ベリ
ファイ処理に悪影響があるような変更がないように構成
できる場合でも、改めてベリファイ処理される。したが
って、必要のないベリファイ処理が行われることに通
じ、その結果、必要とするメモリが増大し、実行時間
も、必要以上に長くなる。つまり、実行時に、さらなる
ベリファイ処理がない、または最小のベリファイ処理で
すむ、ベリファイ前処理されたモジュールを使用できる
オプションが必要となる。
【0030】ベリファイ前処理と、完全要求駆動型ロー
ドとに対する必要性は、それぞれ別物である。また、完
全要求駆動型ロードと共に、モジュールごとのベリファ
イ前処理をサポートする必要性もある。
【0031】実行時ベリファイ処理の減少を含む、ベリ
ファイ前処理に対する必要性は、不適格または、危険を
及ぼす操作を防止するために、仮想マシンに供給される
すべてのモジュール、または、いかなる計算構造も、実
行時にチェックされることを要求するセキュリティに関
連する目標と衝突することがある。たとえば、インター
ネットからのモジュールのダウンロードや、インターネ
ットからのベリファイ前処理出力などの信頼性のない状
況では、アタッカーによって、ベリファイ前処理出力が
スプーフィングされる可能性がある(おそらく悪性のク
ラスを良性のクラスに見せかけることがある)。したが
って、インターネット全体にわたって、モジュールをダ
ウンロードするような信頼性のない状況で使用可能なベ
リファイ前処理に対する必要性がある。
【0032】完全要求駆動型ロード、またはモジュール
ごとのベリファイ前処理に対する必要性によって、タイ
プ格子の代わりになる表現の必要性が生じる。タイプ格
子は、タイプの間のサブ・タイプ関係を表現する数学的
な構造である。タイプ格子の表現は、実行時における、
クラスのタイプとサブ・タイプを示すためにJVMによ
って組み込まれている。JVMは、また、リンクされて
いるクラスのすべての属性の参照とタイプを維持してい
る。同様の実行時構造が、いかなる動的なリンク・プロ
セスにも役に立つことが期待される。クラスごとのベリ
ファイ前処理、または完全要求駆動型ロードを支持する
ために、タイプ格子に関する十分な知識なしに、タイプ
・チェックを実行しなければならない。通常、タイプ格
子に関しては、そうでなければまだロードされる必要が
ない他のモジュールにおいて、大部分が定義されてい
る。特に、JVMは、通常、ベリファイ処理中に、タイ
プ格子内のLUB(最小上界)タイプを見つける必要が
ある。したがって、タイプ格子が利用できないときにさ
えLUBに依存する機能を実行する必要がある。
【0033】(発明の開示)本発明の上記のおよび他の
特徴と、態様と、利点は、添付の図面を参照して行われ
る、本発明の以下の詳細な記載によってより明らかにな
るであろう。
【0034】本発明の目的は、完全要求駆動型ロードを
防止することなく、リンク中にベリファイ処理を実行す
ることである。命令(たとえば、メソッドについて)を
実行中に、特定の定められたポイントで、参照モジュー
ル(たとえば、クラス)の分割すべてを、要求駆動型で
行うよう要求することは、動的なリンク、特に、JVM
にとって有利である。その利点は、 ・ 一度書き込めば、いつでも実行できる(Write
once,runanytime(WORA))特性
が改善される。リンケージ・エラーに関するプログラム
の挙動は、すべてのプラットホームと実行について同じ
である。 ・ 試験性が大いに改善される。たとえば、クラスまた
はメソッドを見つけることができない場合、クラス、ま
たはメソッドをリンクすることのできるすべての場合を
想定して、それらのすべての場合の例外処理に対応しよ
うとする必要がない。 ・ ユーザは、確実で簡単な方法で、モジュールの存在
を決定することができる。たとえば、ユーザは、異なる
バージョンが利用可能でなければ、実行されないプログ
ラム・ブランチを参照することによって、異なるバージ
ョンの実行環境において欠けているモジュールを呼び出
すことにより生じるリンケージ・エラーを避けることが
できる。従来のJVM仕様のロード状況では、上記の利
点は生かせない。
【0035】本発明の別の目的は、1回1モジュール・
ベリファイ前処理を提供することである。また、本発明
のさらなる目的は、実行時ベリファイ処理を抑えるため
に、ベリファイ前処理命令を利用することである。JA
VA(登録商標)プラットホームのユーザのなかには、
文脈不感性の、または文脈独立性のベリファイ・チェッ
クを数クラスについて実行することを望んでいるユーザ
もいるだろう。コンパイル中、またはコンパイル後、お
よび実行前に実行できる、文脈独立性のチェックには多
くの利点がある。その利点は、 ・ 実行前に、ベリファイ・エラーを検出することがで
きる。 ・ まだ必要なら、実行時のリンク・コンポーネント
(ソフトウエア部品)は、含まれるベリファイ・コード
の量が減少するので、たとえ要求されたとしても、より
小さく、かつより簡単である。そして、 ・ ユーザは、モジュールを(安全な倉庫、たとえば、
RDBMS(relational database
management system)に)アプリケ
ーションごと(application by app
lication)ベースではなく、モジュールごと
(module−by−module)ベースで記憶さ
せることが可能で、実行前も、できるだけ多くの仕事を
することができる。したがって、必要のないベリファイ
処理を取り除いて、ベリファイ処理の実行コストを減少
させる、または取り除く。
【0036】本発明の別の目的は、同時に両者の利点を
生かすために、1回1モジュール・ベリファイ前処理
と、完全要求駆動型ロードを可能にする実行時ベリファ
イ処理とを組み合わせることを可能にすることである。
【0037】本発明のもう1つ目的は、信頼性のないソ
ースからのクラスをベリファイ前処理できるようにし
て、ベリファイ前処理の利点を生かせる状況を拡大する
ことである。
【0038】本発明のさらなる目的は、相互モジュール
の妥当性チェックを簡素化するため、タイプ格子に関す
る知識に欠けているとき、LUBの代替を利用すること
である。
【0039】本発明の上記の、および他の目的と、利点
が、リンク前に、コンピュータ・プログラムのモジュー
ル内の命令を1回1モジュール・ベリファイ処理するメ
ソッド、コンピュータ・プログラム、信号伝送装置によ
って得られる。本発明の本態様では、ロードされている
最初のモジュール内の命令をチェックして、その最初の
モジュールと異なる参照モジュール内の情報が要求され
るかどうかを決定するステップを含む。もしその情報が
要求されれば、その参照モジュールをロードすることな
くその参照モジュールの制約を書き込む。
【0040】本発明の他の態様によれば、コンピュータ
・プログラムのベリファイ前処理されたモジュールの命
令をリンク中にベリファイ処理する。メソッド、コンピ
ュータ・プログラム生成物、伝送信号および装置は、ロ
ードされた最初のモジュールがリンク前に1回1モジュ
ール・ベリファイ処理に合格したどうかを決定するステ
ップを含む。もし、その最初のモジュールがそのような
ベリファイ処理に合格していれば、もしあれば、制約付
きモジュールに課せられるベリファイ前処理制約を読み
込む。ベリファイ前処理制約が読み込まれていれば、そ
の制約付きモジュールがロードされているかどうかを決
定する。その制約付きモジュールがロードされていれ
ば、そのベリファイ前処理制約を実施する。
【0041】本発明のさらに他の態様によれば、ベリフ
ァイ前処理システムは、ネットワークと、コンピュータ
・プログラムのモジュールを記憶するための、ネットワ
ークに接続された、コンピュータが読み込みできる記憶
媒体を含む。モジュールをロードできるメモリもまたネ
ットワークに接続されている。ネットワークに接続され
たプロセッサは、ロードされている最初のモジュール内
の命令をチェックして、その最初のモジュールと異なる
参照モジュール内の情報が必要となるかどうかをリンク
前に決定し、そして、その情報が要求されるならば、そ
の参照モジュールをロードすることなく、その参照モジ
ュールのための制約を書き込むよう構成されている。そ
の結果、1回1モジュール・ベリファイ前処理がリンク
前に実行される。同じ、または異なる1つのプロセッサ
がネットワークに接続されて、ロードされた最初のモジ
ュールが、リンク前に1回1モジュール・ベリファイ処
理に合格したかどうかをリンク中に決定するよう構成さ
れている。その最初のモジュールがベリファイ処理に合
格していれば、もしあれば、制約付きモジュールに課せ
られるベリファイ前処理制約を読み込む。ベリファイ前
処理制約が読み込まれていて、その制約付きモジュール
が既にロードされていれば、そのベリファイ処理制約が
実施される。その結果、リンク前に1回1モジュール・
ベリファイ処理を実行し、リンク中はベリファイ処理を
抑えるシステムが得られる。
【0042】表記法および標準名称 以下の詳細な記載を、コンピュータ、または、コンピュ
ータ・ネットワーク上で実行されるプログラム・プロシ
ージャで提示することができる。それらのプロシージャ
による記載と表現は、成果物の内容を最も効率的に表現
するのに、当業者が使用する方法である。
【0043】本明細書におけるプロシージャは、一般
に、望ましい結果に通じる自己矛盾のないステップの系
列であると考えられている。それらのステップは、物理
量を物理的に操作することを必要とする。通常、必ずし
も必須というわけではないが、それらの量は、記憶さ
れ、転送され、結合され、比較され、または、他の方法
で操作されることができる電気信号、または磁気信号の
形式で表現される。それらの信号を、ビット、バリュ
ー、要素、記号、キャラクタ、用語、数などで表現する
と、主に共通に使用されるという理由から、時には便利
であると判る。しかしながら、それらの、また同様の用
語のすべてを、適切な物理量と関連づけられなければな
らないことと、それらは、それらの量に適用された単に
便利なラベルにすぎないことに注意されたい。
【0044】さらに、実行される操作は、通常、人間の
オペレータによって実行される精神的な操作と関連づけ
られる、加算や比較などの用語で表現されることが多
い。人間のオペレータのそのような能力は、本発明の一
部分を形成している本明細書に記載された操作において
必要なく、あるいは大部分において望まれているもので
もない。操作はマシン操作である。本発明の操作を実行
するために役に立つマシンは、汎用のデジタル・コンピ
ュータ、または同様の装置を含む。
【0045】また、本発明は、それらの操作を実行する
ための装置に関連する。特に、その装置は、目的を果た
すために特別に組み立てることもできる。または、コン
ピュータに記憶されたコンピュータ・プログラムによっ
て、選択的に作動させられる、または再構成される汎用
計算機を含むこともできる。本明細書において提示され
たプロシージャは、必ずしも、本質的に、特定のコンピ
ュータ、または他の装置に関連しているわけではない。
本明細書の技法によって書かれているプログラムを使っ
て、様々な汎用マシンを使用できる。または、必要なメ
ソッド・ステップを実行するより専門化した装置を組み
立てると便利であることが判るであろう。様々なそれら
のマシンに要求される構造は、以下の記載から明らかに
されるだろう。
【0046】図1Aは、本発明の実行に適したタイプの
コンピュータを示す。図1Aに外観図が示されたコンピ
ュータ・システムは、ディスク・ドライブ装置110A
と110Bを有する中央演算処理装置100を備える。
ディスク・ドライブ装置110Aと110Bは、コンピ
ュータ・システムが装備可能な複数のディスク・ドライ
ブ装置を記号で表しているにすぎない。通常、それらの
ディスク・ドライブ装置は、110Aなどのフロッピー
(登録商標)・ディスク・ドライブ装置と、ハード・デ
ィスク・ドライブ装置(図示されない)と、スロット1
10Bによって示されるCD−ROMドライブ装置また
はDVDドライブ装置を含むであろう。通常、ドライブ
装置の数とタイプは、コンピュータ構成によって異な
る。コンピュータは、情報が表示される表示装置120
を有する。通常、キーボード130とマウス140も入
力装置として利用可能である。図1Aに示されるコンピ
ュータを、SunMicrosystems社のSPA
RCワークステーションとすることができる。
【0047】図1Bには、図1Aのコンピュータの内部
のハードウェアのブロック構成図が示されている。バス
150は、コンピュータの他のコンポーネントを内部接
続する主要情報ハイウエイとして機能する。CPU15
5は、システムの中央演算処理装置であって、プログラ
ムを実行するのに必要な計算と論理演算を実行する。読
出し専用記憶装置(160)とランダム・アクセス・メ
モリ(165)は、コンピュータの主記憶装置を構成す
る。ディスク制御装置170は、システム・バス150
に1つまたは複数のディスク・ドライブ装置を接続す
る。それらのディスク・ドライブ装置は、173などの
フロッピー・ディスク・ドライブ装置、172などの内
部または外部ハード・ディスク・ドライブ装置、171
などのCDーROMドライブ 装置、またはDVDドラ
イブ装置(Digital Video Disks)
とすることができる。表示装置インタフェース125が
表示装置120に接続され、バスからの情報を表示装置
上で見ることができる。外部装置との通信は、通信ポー
ト175を通じて可能である。
【0048】図1Cは、図1Bの173、または図1A
の110Aなどのドライブ装置とともに使用できる記憶
媒体の例を示す。通常、フロッピー・ディスク、CD−
ROM、またはDVD(Digital Video
Disk)などの記憶媒体は、本発明に従ってコンピュ
ータが機能を実行可能にするようコンピュータを制御す
るプログラム情報を含む。
【0049】図1Dは、本発明のいくつかの態様による
データとプログラムを備えるのに適したネットワーク・
アーキテクチャのブロック構成図である。ネットワーク
190は、プログラムとデータのダウンロードのための
サーバ195などの1つまたは複数のサーバとクライア
ント・コンピュータ100とを接続する機能を有する。
また、クライアント100’を、ISP180などのネ
ットワーク・サービス・プロバイダを通して、ネットワ
ーク190に接続することができる。仮想マシン(V
M)、またはハードウェアまたはソフトウェアのいずれ
かに実装されている他の計算アーキテクチャに関連する
要素を、以下に記載するように、ネットワーク全体に分
配することができる。
【0050】図1Eは、仮想マシンに関連するコンポー
ネントを有するよう構成された単一のコンピュータを示
す。コンポーネントには、コンピュータ内の記憶媒体の
1つまたは複数の論理ブロックの中のソース・コード・
ステートメント162と、また、ソース・コード162
をコンパイルしてVM命令などの命令を含む1つまたは
複数のモジュール165、166を作成するコンパイラ
164と、さらに、1つまたは複数のモジュール16
5、166を入力要素として、それらのモジュールが作
成するプログラムを実行する仮想マシン(VM)167
などのプロセッサとが含まれる。図1Eに1つのコンピ
ュータ内に示されているが、モジュール165と、プロ
セッサ、たとえばVM167とが、少なくとも一時的に
も同じコンピュータ内に存在する必要があることを理解
されたい。コンパイラを作動させてソース・コードから
モジュールを作成する異なったコンピュータからモジュ
ールを送ることができる。たとえば、図1Dでは、サー
バ195のコンパイラ194とソース・コード192を
示し、また、クライアント・コンピュータ100、10
0’それぞれに実装された2つの異なる仮想マシン15
0、151を示す。ソース・コード192(および図1
Eの162)は、いかなる言語でもよいが、好ましく
は、JAVA(登録商標)言語プログラミング言語であ
る。また、人間であるプログラマが書くことも可能であ
り、さらに別のプログラムが出力することもできる。サ
ーバ195のコンパイラ194が作成するモジュール1
96をネットワーク190全体に伝送でき、モジュール
として、たとえば156として、クライアント・コンピ
ュータ、たとえば100内に記憶できる。その場合、実
装されたプラットホーム特定のVM、たとえば150
は、モジュール156内の命令を実行することができ
る。
【0051】明らかに、本発明は、JVMを使用して記
述されているが、JVMに限定されているわけではな
い。本発明は、実行時に様々なソースからプログラム・
モジュールをリンクし、それらのプログラム・モジュー
ルを実行する前にそれらのプログラム・モジュールをベ
リファイ処理するいかなるプロセスにも適用できる。
【0052】本発明によって解決されるべき問題を生じ
る状態を示すクラスを代表するプログラム・モジュール
のための疑似ソース・コードの例として、図2は、JA
VA(登録商標)プログラミング言語に類似のプログラ
ミング言語で書かれた疑似ソース・コードを示す。第1
行はクラスが「BAR」であることを示し、第1の省略
符号は、クラスBARの定義に貢献する他のステートメ
ントを表すが、ここでは論じない。次の行から本図例の
終わりまでは、クラスBAR(BAR.FOOとも表示
される)においてFOOと呼ばれるメソッドを定義す
る。タイプ「void」は、メソッドFOOの呼び出し
終了時に、いかなる値も戻されないことを示す。次の行
は、実行時に2つのブランチを有する「if els
e」コンストラクタを導入する。「arg」と呼ぶメソ
ッド引数が真ならば、次の省略符号セットが表す、1つ
のブランチを実行する。処理ステートメントは、クラス
・タイプがAの「var」と呼ばれる変数をクラスBの
新しいインスタンス(instance)とすることを
表している。したがって、そのブランチでは、2つの他
のクラス、クラスAとクラスBが、 参照クラスとして
参照される。次の行、if elseコンストラクタの
elseは、そのメソッドの別の1つのブランチ、ar
gが偽のときのブランチの始まりを示している。その別
の1つのブランチを、次のブレースとの間に置き、別の
省略符号セットで表して、そのブランチでは、クラスA
も、クラスBも参照されないことを示す。そのブランチ
は、変数Zの値に元の値を2乗した値が代入されるステ
ートメントにおいて再び1つになる。
【0053】例示のクラスBARとそのメソッドFOO
を使用して、非要求駆動型ローディングと、概要求駆動
型ローディングと、完全要求駆動型ローディングとの
差、および本発明の利点が、JVMなどの仮想マシンに
よって説明される。もちろん、JVMは、図2にリスト
されているJAVA(登録商標)のようなプログラミン
グ言語上では作動しないが、しかし、通常、図2にリス
トされているような高級プログラミング言語コード上で
作動するコンパイラによって生成された命令を含むモジ
ュール上では作動する。
【0054】図3は、JVMによる例示のクラスBAR
の完全非要求駆動型ローディングを表している。ステッ
プ310において、クラスBARにおいて定義されたメ
ソッドFOOを呼び出すときに、クラスBARが必ずし
もロードされているとは限らないと仮定して、JVMで
は、BARのためのクラス・ローダ、たとえば、ローダ
L1 を使用していずれかの記憶装置からクラスBAR
がメモリにロードされる。現在のクラスは、クラスBA
Rである。現在のクラスのBARは、クラスAとクラス
Bを参照するので、ステップ320において、両クラス
のためのローダがまだロードされていなければ、同様
に、両クラスのためのローダをコールする。図3では、
クラスAとクラスBのためのクラス・ローダは、それぞ
れL2およびL3として示される。しかし、L1、L
2、およびL3は、すべて同じビルトイン、またはユー
ザが定めたクラス・ローダであることもあり、または、
いずれか2つが同じであってもよく、または、いずれも
異なっていてもよい。
【0055】ステップ335のリンク中に、JVMがベ
リファイ処理を遂行する。ベリファイ処理中に用いられ
る手順についての詳細は、上記で参照された米国特許第
5740441号に記載されている。その特許に記載さ
れているように、 ベリファイ処理には、不正タイプの
データ、または仮想マシンのオペランド・スタックのア
ンダー・フロー、またはオーバー・フローを引き起こす
いかなる命令をも処理しようとするメソッドにおけるい
かなる命令列をも特定することを含む。JVMでの命令
は、タイプ指定型であって、命令によって作動するオペ
ランドは、命令が定義するタイプに適合しなければなら
ない。オペランド・スタックのオーバーフローは、クラ
ス・ファイルにおいて定義されたスタックの最大サイズ
を超える、すなわち、スタックが既にフルであるオペラ
ンド・スタックに、基本値やオブジェクト参照などのア
イテムを置こうとする試みである。命令が、オペランド
・スタックからアイテムを取り去ろうとするときに、ス
タックに有効なアイテムがないとき、すなわち、スタッ
クが既に空であるとき、オペランド・スタック・アンダ
ー・フローが起こる。モジュール内の命令を実行する前
に実行できる妥当性チェックすべてをベリファイ処理に
含むことができると予想される。
【0056】モジュールのベリファイ処理に合格しない
と、仮想マシンは、エラーを特定して、そのモジュール
内にある命令を実行しないようにすべきである。JVM
の場合、JVMは、クラス例外処理ハンドラが洗練され
た方法で処理できる、リンクまたはベリファイ・エラー
・メッセージ(図示せず)を発する。
【0057】モジュールのベリファイ処理が成功して、
リンクが成立すると、実行開始可能となる。本図例の場
合では、JVMが各命令を翻訳して該命令を実行すると
きに、ステップ340において、現在のクラスBARを
初期化でき、ステップ350において、現在のクラスで
あるメソッドFOO.BARを実行する。翻訳プログラ
ムは、リンク・ステップ335の間に実行されるベリフ
ァイ処理によって既に終了しているので、タイプ、また
は、オペランド・スタックのオーバーフローまたはアン
ダーフローをチェックする必要はない。
【0058】上述の動的なリンクを伴うプロセスの2つ
の利点は、他の人々が開発しコンパイルしたクラスを安
全に使用できることと、リンクが成立した後の実行がよ
り速いということである。リンク成立中に実行する前
に、無効で、または危険となり得る操作を防止するよ
う、ベリファイ処理されているので、他の人々がコンパ
イルしたクラスを使用できる。タイプ・チェックと、オ
ペランド・スタック・オーバーフローおよびアンダーフ
ローの各処理をベリファイ処理中に実行終了するので、
実行時間を短縮される。同様に、ベリファイ処理中に実
行された他の妥当性チェックも、実行時に省略しても安
全である。
【0059】要求駆動型ローディングでは、図4Aに示
すように、実行時に必要となるまで、クラスはロードさ
れない。その利点を、図2に例示したサンプル・クラス
BARを使用して説明できる。argが偽ならば、「i
f」ブランチにおいて、クラスAとクラスBを参照する
よう処理することは決してなく、またクラスAも、クラ
スBもロードする、またはリンクする必要がなくなる。
したがって、要求駆動型ローディングを使用すると、実
行処理時間が短縮される。
【0060】たとえば、図4Aに示すように、ステップ
410において、クラス・ローダL1を使用してクラス
BARをロードした後すぐ、BARが参照するクラスA
とクラスBを、ロードすることはしない。代わりに、ス
テップ435においてリンク中に、クラスBARをベリ
ファイ処理する。そして、クラスBARがベリファイ処
理とリンク処理に成功すると、JVMは、次のステップ
440において、クラスBARを初期化する。他方で
は、クラスBARのリンク処理とベリファイ処理に成功
しなければ、エラーメッセージを発し(図示されな
い)、実行処理を行わない。(図示されない)。クラス
BARをステップ440において初期化した後、ステッ
プ450において、クラスBARの主要メソッドを実行
して、その結果メソッドFOOを呼び出す。変数arg
が偽ならば、メソッドFOOにおいて、「else」ブ
ランチを選択して、クラスAもクラスBも使用されな
い。上記は、現在の命令が、クラスBへの参照を分割す
ることを要求しているかどうか決定する図4Aの判断ス
テップ460によって表されている。クラスBが必要と
されないならば、現在の命令を実行して、ベリファイ処
理すべき命令がなくなるまで、ステップ460にループ
処理する(繰り返し戻る)次の命令を使用して、プログ
ラムの実行が続行される。他方では、変数argが真な
らば、「if」ブランチを実行する。そのブランチに
は、タイプがクラスAの変数varをクラスBの新しい
インスタンスにセットする処理が含まれる。クラスBを
参照する最初の命令を処理するとき、クラスBのメソッ
ドを呼び出さなければならない(クラスBのコンストラ
クタ)。そして、クラスBへの参照を分割しなければな
らない。その命令によってクラスBを分割しなければな
らないかどうか質問するステップ460によって表され
るテストでは、肯定的に回答する。次に、ステップ47
0では、クラスBがロードされていなければ、クラス・
ローダL3を使用して、クラスBをロードする。
【0061】従来のJVMでは、図4Aのポスト・ロー
ドのステップ475が示されている部分では、ステップ
475を経ず、処理が連続して直接ステップ480に移
動する。クラスBの新しいインスタンスが作成されてい
るので、クラスBをまずリンクして、初期化しなければ
ならない。つまり、次のステップでは、クラスBがまだ
リンクされていなければ、ステップ480でクラスBを
リンクする。ステップ480において、クラスBのリン
ケージ(ベリファイ処理を含む)に成功すれば、次のス
テップ490において、クラスBを初期化する。次に、
ステップ498において処理が続行し、現在の命令によ
って新たに分割されたクラスBを使用できる。
【0062】この流れは、実行中に、参照を分割するよ
う要求されるまで、クラスをロードしない点で完全要求
駆動型であるように見える。しかしながら、以下に示さ
れるように、従来のJVM仕様によれば、リンク・ステ
ップ435においてベリファイ処理ステップがクラスB
のロードを要求するであろう。そのような場合では、完
全要求駆動型プロセスと考えることはできず、概要求駆
動型ロードと呼ばれる。
【0063】図4Aで示される概要求駆動型ロード中の
1つの問題は、クラス名があいまいであることである。
いくつかのクラスを一緒にコンパイルするとき、コンパ
イラは、中にユニークなクラス名を有する名前スペース
を作成する。しかしながら、いくつかのクラスを、異な
る時間に異なるコンパイラによってコンパイルすると、
クラスの名前のユニークさを保証することはできない。
実行時には、クラス・ローダは、複数の(multip
le)名前スペースを導入することができる。その結
果、実行中のクラス・タイプを、そのクラス名だけでは
なく、クラス名と、定められているクラス・ローダとの
組み合わせによって、たとえば、<BARL1>によっ
て定義する。ベリファイ処理ステップにおいてタイプを
分割するのに必要であるすべての参照クラスをロードす
る、従来のシステムにおいてさえ、上記方法によってベ
リファイアを分割できる。ベリファイ処理を含むリンク
・ステップ435においては、参照クラス、たとえば、
クラスBのタイプは、現在のクラス・ローダ、たとえ
ば、L1によって与えられると仮定して、すなわち、ク
ラスBの「タイプ」は、<B、L1>であると仮定され
る。その仮定が真でないならば、アクセス権の問題が起
こり得る。たとえば、クラスBのクラス・ローダL3が
BARのクラス・ローダL1と異なり、<B、L3>
が、プライベート変数であり、<B、L1>がパブリッ
ク変数であると表されていれば、VMは、クラスBの外
部からプライベート変数へのアクセスを許可でき、プロ
グラム・セキュリティをあいまいにする可能性がある。
【0064】1999年4月にリリースした第2版の、
JVM仕様の最新版においては、前に参照した別の関連
する出願、BrachおよびLiangによる米国特許
出願第09/134477号「METHODS AND
APPARATUS FOR TYPE SAFE,
LAZY,USER−DEFINED CLASSLO
ADING」において記載されているように、上記の問
題は避けられている。図4Bは、JVM仕様書第2版で
利用した解決策を説明するフロー・チャートを示す。そ
の解決策を利用して、別のステップを、ポスト・ロード
のステップ475に含む。ステップ473では、実際に
はL3を使用してロードされたクラスBがその名前とB
ARのローダL1に基づいて仮定されたタイプを作成す
るかどうかが決定される。すなわち、ステップ473で
は、<B、L3>と、<B、L1>が等しいかどうかを決定
する。クラスBをロードして、仮定されたタイプと異な
ったタイプを実際に作成すると、名前/タイプ制約に合
格せず、ステップ474においてエラー・メッセージが
発せられる。または、ステップ479で実行処理が続行
される。直前に引用した米国特許出願に記載された上記
プロセスによって、ステップ435のリンクによって、
以下に記載されるように、クラスBARによって、クラ
スAおよび/またはクラスBの使用のためにサブ・タイ
プをチェックするよう、参照クラスAおよび/またはク
ラスBをロードすることが要求されることに変わりはな
い。つまり、引用された特許出願は、完全要求駆動型ロ
ードと干渉するという問題を必ずしも解決してはいな
い。
【0065】図4Aのリンク・ステップ435内のベリ
ファイ処理ステップを、図5A、5Bないし5Cの例を
使用して、説明する。図5Aは、ステップ435のリン
ク・クラスBARが、現在のクラスのBAR510のメ
ソッドFOOがベリファイ処理を実行するステップ53
0が後に続く現在のクラスのBARのベリファイ処理を
開始することを含むことを示すフロー・チャートであ
る。次に、ステップ435内のクラスBARのベリファ
イ処理をステップ590で終了する。図5Bでは、クラ
スBARのメソッドFOOをベリファイ処理するステッ
プ530であって、従来の実施形態であるステップ53
0aに使用される手順を示す。そのメソッドは、ステッ
プ532で始まる。そのメソッドがクラスAやクラスB
などの他のクラスを参照し、まだロードされていなけれ
ば、ベリファイ処理プロセスでは、クラスAおよび/ま
たはクラスBをロードするよう要求されることがある。
ステップ555において、最初の判断を行う。参照クラ
スBを必要とするならば、次に、クラスBが既にロード
されているかどうかを、ステップ540で判断する。必
要とされ、ロードされていなければ、 参照クラスをス
テップ550でロードする。したがって、要求駆動型ロ
ードが必要とされても、メソッドのベリファイ処理にお
いては、他のクラスが実行時に実際に必要とされる前
に、他のクラスをロードすることがある。ステップ53
7で表されるように、クラスAとクラスBとの間に不正
確なサブ・タイプの関係があること、および、他のベリ
ファイ問題がベリファイ処理作業中に見つけられると、
ステップ539において、ベリファイ・エラーを発す
る。現在の命令がベリファイ処理に合格すると、ベリフ
ァイ処理プロセスを続行し、ステップ582内のメソッ
ドを終了して、ベリファイ処理すべき命令がなくなるま
でステップ555にループ処理する。すなわち、メソッ
ドの実行が始まることができるように、十分な数の命令
をベリファイ処理する。
【0066】図5Cは、たとえば、JVMで実行され、
米国特許第5740441号と図4Bに記載されたよう
にステップ537において実行できるベリファイ処理の
詳細例を示す。その詳細例では、各命令ごとにタイプの
スナップショット(内容の記録)が行われる。タイプの
スナップショットは、ローカル変数のリストと、オペラ
ンド・スタック上の各位置のためのタイプを保持する構
成である。命令をベリファイ処理する必要があるとき
は、ステップ533において、そのスナップショットが
ロードされる。ステップ534では、スナップショット
内のタイプに対する命令の実行を決定する。命令が、2
つのブランチ操作が1つになるときのように(図2の例
のメソッドBAR.FOOにおける「Z」にかかわるス
テートメントのように)、他の複数の命令の後続の命令
であれば、命令に対するタイプのスナップショットと、
それぞれのブランチに関する、他のマルチプル命令の先
行する命令のスナップショットとをマージさせなければ
ならない。上記の実行時には、ステップ535におい
て、現在の命令の後続の命令を決定し、ステップ536
において、現在の命令のスナップショットと、後続の各
命令のスナップショットとをマージさせて、命令をベリ
ファイ処理する。スナップショットにおける同じ位置の
プリミティブ・タイプが一致しないとき、上記のマージ
によって、ベリファイ処理に合格しないことを検出でき
る。また、そのマージによって、マージ中のスナップシ
ョットにおける同じ位置の参照物と、結果として得られ
るマージされたスナップショット内の特定のコモン・ス
ーパー・タイプ(また、最小上界、LUB(lowes
t upper bound)、または、よりコモンで
ないスーパータイプLCS(least common
superype)とも呼ばれる)とを置き換える。
そして、上記を実行しなければ、ベリファイ処理はでき
ない。
【0067】図5Bに示されるように、ベリファイアが
参照クラスをロードしなければならないことがあるの
で、他のクラスを参照するメソッドをベリファイ処理し
て、完全要求駆動型ロードを防止することができる。参
照クラスのロードは保証されてはいない。理由は、その
ロードは参照される文脈によるからである。本例では、
クラスAは、処理ステートメントが適格である、クラス
Bのスーパー・クラスでなければならない。クラスBを
ロードして、上記サブ・タイプの関係をチェックするこ
とができる。クラスAがクラスBのスーパー・クラスで
あれば、クラスBをロードするときに、クラスAは、ク
ラスBとは独立にロードされる。クラスBをロードした
後に、クラスAがロードされていないならば、クラスA
は、クラスBのスーパークラスではない。クラスAがロ
ードされていれば、上記関係が維持されているかどうか
直接チェックすることができる。
【0068】完全要求駆動型ロードを伴うベリファイ処
本発明によるベリファイ処理を伴う完全要求駆動型ロー
ドを実行するためには、従来の方法によるロードをトリ
ガする、モジュールの相互関係のチェックを遅延させる
ことが可能でなければならない。
【0069】本例のクラスBARのベリファイ処理中
に、クラスBが既にロードされていれば、サブ・タイプ
の関係が維持されているかどうかを直ちに決定すること
ができる。クラスBをロードするときに、スーパー・タ
イプがロードされていたか、さもなければ、スーパー・
タイプは、Bのスーパ・タイプではあり得ない。クラス
Bがまだロードされていないならば、本発明によれば、
クラスBがロードされた後チェックされる、または実施
される、クラスBに対する制約が加わる、または制約が
課せられることがある。本発明の実施形態の1つを、図
6Aないし図6Cに示す。
【0070】図6Aは、図5Aに示すメソッド・ベリフ
ァイ・ステップ530を実行するステップ530bのフ
ロー・チャートであって、従来のJVM仕様である図5
Bに示すバージョン530aに代わるものである。本発
明の本実施形態によれば、メソッドのベリファイ処理
は、ステップ632で始まり、従来のようにロードをト
リガしたタイプの参照クラスBに関する情報が必要かど
うかをステップ655で決定する。参照クラスBが従来
のようにロードをトリガすると、次の手順としては、参
照クラスBが既にロードされているかどうかを、ステッ
プ640において、チェックする。クラスBが既にロー
ドされていれば、従来のJVMと同じように、処理が続
行され、ステップ637において、サブ・タイプがチェ
ックされ、他の妥当性チェックが行われる。そして、命
令がベリファイ処理に合格しないと、ステップ639に
おいて、エラー・メッセージが発せられる。その命令に
関する、モジュールの相互チェックを含む妥当性チェッ
クに合格すると、ステップ682において、ベリファイ
処理されるべき命令がなくなって実行が始まるまで、十
分な数の命令をループ処理して、メソッドFOOのベリ
ファイ処理が続行される。実行を開始すべき命令がベリ
ファイ処理に合格しないと、モジュールの実行は開始さ
れない。
【0071】しかしながら、ステップ640において、
クラスBがまだロードされていないことが決定される
と、今度は、クラスBのクラス・ローダを呼び出して、
クラスBをロードすることはない。代わりに、ステップ
650において、クラスBARがクラスBを使用するた
めのベリファイ制約が書き込まれる。次に、サブ・タイ
プ・チェックなどの、クラスBに関するモジュール相互
チェックに合格したと仮定して、メソッドFOOのベリ
ファイ処理が、ステップ682において、前と同様、続
行される。ステップ650において、制約を書き込むこ
とになる情況、およびそれらの制約の形式については、
複数の実施形態に基づいて、より詳細に以下で記載され
る。本発明の本実施形態によれば、リンク中のベリファ
イ処理ステップ530bが、望まれるように、モジュー
ルの完全要求駆動型ロードの妨げとなることはない。
【0072】LUBの記号演算を伴うベリファイ処理 参照モジュール、またはクラスがまだロードされていな
いならば、完全要求駆動型リンクの間中、モジュールま
たはクラスは、ロードされないままである。したがっ
て、JVMでは、図5Cで説明されたように、ステップ
538で挿入されたLUBが既知ではないかもしれない
ので、マージするスナップショット処理結果に影響がで
る。別の表現をすれば、JVMによるタイプ格子の表現
は、参照される複数の異なるタイプのために、LUBを
決定するほど十分には存在しないかもしれない。図6B
では、本発明の1つの実施形態によって、スナップショ
ットのマージがどのように機能するかを示す。ステップ
633、ステップ634、ステップ635、およびステ
ップ636は、それぞれ、対応するステップ533、ス
テップ534、ステップ535、およびステップ536
に類似している。しかしながら、ステップ638では、
LUBが既知でなければ、そのタイプをマージされたス
ナップショットの適切な位置に挿入することはできな
い。その代わりとして、先行する命令のスナップショッ
トの適切な固定位置にある参照タイプのリストを、マー
ジされたスナップショットの固定位置に挿入するか、ま
たは、挿入しないのであれば、固定位置に関連づけられ
る。すなわち、必要に応じて、クラス、またはモジュー
ルをロードして、タイプ格子を構成することによって、
スナップショットのその位置にあるLUBを特定して、
参照する代わりに、LUBを必要とさせる、異なるタイ
プ、たとえば、クラス・タイプ、X1、X2、...、X
nへのいくつかの参照が記号によってリストされる、お
そらくはa^などのサインまたは記号によって分離され
る。その記号は、タイプがLUBを有するその関係を共
有しなければならないことを示している。
【0073】制約の実施 参照クラスBを実際にロードするとき、またはロードす
るならば、ステップ650においてVMが使用するため
に書き込まれた、または、記録された制約が、実施され
る、たとえばチェックされる。その結果、ロードした直
後、図4Aのステップ475によって表されるポスト・
ロード処理中に制約が実施される。図6Cは、本発明の
実施形態の1つによって参照クラスBに、ベリファイ制
約を実施する例を示す。本発明の本実施形態によれば、
図4Bに示したステップ475aを含むことができる新
しい処理ステップ475bが表わされている。ベリファ
イ制約を実施するには、ステップ671から始まる。本
図例では、クラスBの実際のスーパー・タイプが使用さ
れて、前もって書き込まれたサブ・タイプのべリファイ
制約に、クラスBが合格するかどうかを決定する。上記
のチェックは、ステップ673において行われる。参照
クラスBが該制約に合格しなければ、エラー・メッセー
ジがステップ674において発せられる。次に、そのエ
ラー・メッセージを扱うハンドラは、実行を終了させる
か、または実行を続行させることができる。または、エ
ラー・メッセージを発することなく実行を終了すること
ができる。参照クラスBが書き込まれた制約に合格すれ
ば、ステップ679においてポスト・ロード処理を終了
する。
【0074】そのような変形例では、VMは、ベリファ
イ処理を伴う完全要求駆動型ロードを実行することがで
きる。完全要求駆動型ロードの利点は、 ・ リンケージ・エラーに関するプログラムの挙動は、
いかなるプラットホームであっても、いかなる実行時で
あっても同じである。 ・ クラス、またはメソッドをリンクすることのできる
すべての場合を想定して、それらのすべての場合の例外
処理に対応しようとする必要性はない。 ・ ユーザは、確実で簡単な方法で、有効なクラス、ま
たは他のモジュールを決定することができる。
【0075】本発明の利点の1つは、プログラマが、確
実で簡単な方法で、プラットホームのクラスの有効性を
テストできることである。たとえば、プログラマが、よ
り新しいリリース版のモジュールを使用することを望
み、それらのより新しいモジュールが利用できるときの
みそれらのモジュールを使用したいと希望するとき、要
求駆動型リンクによってその処理がより簡単になる。そ
の場合、プログラマが作成したコードのどこかに、新し
いリリース版の新しいモジュールを参照するブランチが
ある。現在のバージョンのプラットホームが、そのブラ
ンチで参照されるモジュールをサポートしていないなら
ば、そのブランチが実行されないようにプログラマが設
計することができる。新しいモジュールがそのプラット
ホーム上で利用可能ではなく、ベリファイ処理されるモ
ジュールが新しいモジュールを参照するとき、完全要求
駆動型ではない仮想マシンは、欠けている新しいモジュ
ールをロードしようとするベリファイアを必要とするこ
とがある。しかし、そのロードは必ず失敗して、ベリフ
ァイ処理のステップも当然失敗する。したがって、実行
されることのないブランチにおいて、欠けているモジュ
ールは参照されるだけてあるが、そのモジュールが欠け
ているためにベリファイ処理は失敗となる。必要な完全
要求駆動型ロードがある場合、実際には実行されない命
令によってモジュールが参照されるので、ベリファイ処
理が失敗することはない。上記のように、クラスなどの
モジュールの最新版をチェック中に、ベリファイ処理に
合格することができるので、仮想マシンに必須のものと
して、本発明によってサポートされる完全要求駆動型ロ
ードを採用しようとする重要な動機となっている。
【0076】必要な要求駆動型ロードであっても、適格
で、定義されたポイントにおいてのみ何らかの失敗が現
れるのであれば、異なるVMを実装して、できるだけ早
く、ロード、およびリンクすることも可能であろう。欠
陥のあるタイプであるクラスを分割しなければならない
ポイントまでそのコードを実行することができなければ
ならない。たとえば、ジャスト・イン・タイム(JI
T)方式のコード・ジェネレータは、クラス、またはメ
ソッドをコンパイルするときに、クラス、またはメソッ
ドを予めリンクすることもできる。しかしながら、リン
クのいずれかが失敗すると、直ちに失敗に終わるのでは
なく、JITは、別の状況であれば、要求駆動型ロード
が例外処理を行ったであろうポイントにおいて、適切な
例外処理を可能にするコードを生成しなければならな
い。(可能ではあるが、実際には、リンク・タイム・テ
ストを必要とはしない)。別の例では、独占リンク中に
無効のクラス参照によって、静的なコンパイラが失敗す
ることがある。それにもかかわらず、コンパイラが完全
にリンクできなくとも、コードをコンパイルすることが
選択されれば、そのコードがJITによってコンパイル
されたであろう同じポイントにおいて、そのコードを実
行すると、必然的に失敗する。最後の例では、クラスを
動的にロードする(たとえば、クラス・ローダを通じ
て)と、実装プログラムによって、全体的に、または部
分的にそのクラスを予めリンクされることができる。し
かしながら、なんらかの失敗があれば、そのコードは、
再び、無効な参照ポイントまで実行することができなけ
ればならない。
【0077】モジュールごとのベリファイ処理 本発明の別の態様では、参照モジュールがロードされて
も、参照モジュールのベリファイ処理を実行しない。1
回1モジュール・ベリファイ処理とも呼ばれる、そのモ
ジュールごとのベリファイ処理が望ましいが、それには
多くの理由がある。実行前に、ベリファイ処理を行う
と、結果的に有利である。時間面およびスペース面での
ベリファイ処理の実行時のコストを減少させる、または
除去できる。余分な、または、実行時ごとのベリファイ
処理を取り止めることができる。JAVA(登録商標)
実行環境は、より小規模であり、より簡単であるのは、
その実行環境が含むベリファイ処理を実行するコードの
量を減少できるからである。クラスごとのベリファイ処
理と同じように、JAVA(登録商標)プラットホーム
の延長部として実行される、その1回1モジュール・ベ
リファイ処理は、従来のJVM仕様によっても、上記に
提案された完全要求駆動型ロードによってでも自動的に
は行われない。前者の場合では、ロードする以外に選択
の余地がない場合、ベリファイアは、自動的に参照クラ
スをロードする。後者の場合では、参照クラスがロード
されて、ベリファイ処理を行わなければならない状況
で、ベリファイ処理を実行するのであれば、参照クラス
のベリファイ処理が行われる。したがって、クラスごと
のベリファイ処理には、2つの実施形態が予想される。
1つは、従来のJVM設計の場合に使用でき、1つは、
新しい完全要求駆動型ロードの場合に使用することがで
きる。
【0078】本発明の1つの実施形態によれば、通常、
ベリファイ処理中に実行されるチェック処理は、実行時
の前に実行することができる。実行時の前のチェック
は、技術的には、リンクの一部ではなく、またその結
果、リンクのベリファイ処理段階の一部ではないので、
それらのチェックは、本明細書では、ベリファイ前処理
と呼ばれ、実行前の妥当性チェックを指す。
【0079】本実施形態では、コンパイラがバイナリ・
クラスを生成した後なら、いつでも、プログラマは、バ
イナリ・クラスによってベリファイ前処理を実行するこ
とができ、そのクラスにおいて参照されるであろう他の
いかなるクラスからも独立している。その結果、参照ク
ラス、または参照モジュールへアクセスする必要はな
い。本発明によるクラスごとのベリファイ前処理が図7
Aに示されている。たとえば、 そのメソッドは、記憶
媒体から、クラスBARをメモリにロードするステップ
710から始まる。次に、従来は、ベリファイ処理中に
行われていた、タイプ・チェックや、オペランド・スタ
ック・オーバーフロー/アンダーフロー・チェックなど
の妥当性チェックを、ステップ712において実行す
る。そのようなチェック処理中は、クラスBARから参
照されているクラスAとクラスBとの間のサブ・タイプ
関係などの他のモジュールを参照する命令のベリファイ
処理に必要とした相互モジュール情報は、いずれも楽観
的には、命令が有効であるよう想定される。しかしなが
ら、想定された情報、または関係によって、仮想マシン
が記憶すべき参照モジュールに制約が課せられる。その
ような参照モジュールを最終的にロードするならば、そ
のような制約をチェックしなければならない。それらの
想定にもかかわらず、クラスBARなどのモジュール
が、実行されるチェックに合格しなければ、ステップ7
13において、エラー・メッセージが発せられる。その
ようなエラーは、必ずしも実行時エラーではないので、
エラー・メッセージは、実行時にハンドラに発せられる
ことがないことがあり得る。その代わりに、そのような
エラーは、たとえば、プリンタや表示装置のスクリーン
などの出力装置に表示されるエラー・メッセージを使用
して、プログラマに伝えられなければならないであろ
う。モジュールがすべてのチェックに合格すると、次
に、ステップ716において、再び呼び出されるべきベ
リファイ前処理制約すべてが、実行時の後々の使用のた
めに書き込まれる。続いて、ベリファイ前処理が終了す
ると、ステップ719においてプロセスが終了する。そ
して、別のクラス、またはモジュールのベリファイ前処
理を、図7Aに示されるステップに従って、実行でき
る。モジュール内のすべての命令をベリファイ前処理し
なければならないというわけではない。ベリファイ前処
理しなければならないのは、モジュールの特定の用途に
必要である命令のみである。たとえば、メソッドFOO
内の命令のベリファイ処理は必要であるが、クラスBA
R内の他のメソッド内の命令のベリファイ処理は必要で
はない。
【0080】場合によっては、ファイルにベリファイ前
処理制約を書き込むことができる、または、書き込まな
い場合、実行時の後々のチェックのためにそのモジュー
ルと関連づけられる。JVMとともに使用するとすれ
ば、記憶媒体の上でバイナリ・クラス形式でクラスと関
連づけられるデータとしてそれらの制約を記録すること
ができるであろう。クラスがメモリにロードされると、
必要になったとき、たとえば、参照クラスBをロードし
た後、JVMがチェックのために、それらの制約を内蔵
させることができるであろう。
【0081】しかしながら、本発明によれば、別の選択
肢として、ベリファイ前処理制約が、記憶されていて
も、またはモジュール自体であっても、または、両者で
あっても、該制約に、デジタル署名などの信号を添付す
ることができる。そのような信号は、モジュール、また
は制約のソースを確実に特定し、サイン済みのものから
改ざんされてしまっているかいないかを示すのに使用で
きる。
【0082】このように、従来ベリファイ処理の間に行
われた内部モジュール・ベリファイ妥当性チェックと等
価であって、クラスA、およびクラスBなどの参照モジ
ュールに関する相互モジュール情報を必要としない相互
モジュール・ベリファイ妥当性チェックを実行前に実施
することができる。すなわち、内部モジュール・チェッ
クのために、実質的に完全なモジュールごとのベリファ
イ前処理を実行することができる。相互モジュール・チ
ェックをベリファイ前処理制約に変える。
【0083】図7Bは、例としている図7Aのステップ
716の詳細を示す。プロセスは、ステップ732にお
ける、ロードされたクラスBARのメソッドのベリファ
イ前処理から始まる。次に、ステップ755において、
命令の妥当性チェックのために、メソッドにおける次の
命令が情報を必要とするかどうかを、参照クラスBから
決定する。次に、必要としないのであれば、ステップ7
37において、必要とされる内部クラスの妥当性チェッ
クすべてをその命令に関して行う。その命令が、その相
互クラス・チェックに合格しなければ、エラー・メッセ
ージを出力装置に書き込む。そして、プログラマは、上
記問題を処理できる。他方では、その命令を完全にベリ
ファイ処理するために、参照クラスをロードしなければ
ならない。ステップ750において、後々の再呼び出し
のために、ベリファイ前処理制約を書き込むか、また
は、書き込まないのであれば、記録する。そして、命令
が要求するサブ・タイプ関係が、有効であると想定す
る。また、命令は、内部クラス・チェックを要求できる
ので、ステップ737に進んで、それらの内部チェック
を実行する。命令が内部クラス・チェックを必要としな
いならば、ステップ737において、その命令は、それ
らの内部クラス・チェックに自動的に「合格」する。相
互クラス・チェックの後、その命令が見つかると、およ
び/または、ベリファイ前処理制約を書き込んだ後、そ
の命令が有効であると仮定されると、フロー制御は、ロ
ードされたクラスBARのメソッドFOO内に命令がな
くなり、メソッドFOOのベリファイ前処理を終了する
まで、ステップ755にループ処理するステップ782
に移動する。参照クラスをロードしているかどうかを決
定しない、つまり、内部モジュール・チェックがなされ
ることも、ベリファイ前処理制約が書き込まれることも
ないことに注意されたい。既にロードされているモジュ
ールについて、相互モジュール・チェックを行うことは
ない。
【0084】実行前に、1回1モジュール・ベリファイ
処理されたモジュールが、たとえば、クラスBARが、
実行時のリンク中に行われるベリファイ処理によってど
のように扱われるかを図7Cに示す。従来のJVMによ
るステップ530a、または完全要求駆動型ロードのた
めの変更されたステップ530bのいずれかに代わっ
て、従来のJVMによる概要求駆動型ロードに従い、ク
ラスごとのベリファイ前処理を組み込む代替のステップ
530cが図7Cに示されている。ステップ792にお
いて、クラスBARのメソッドFOOなどのモジュール
の命令をベリファイ処理するステップを開始した後、そ
のモジュールが、ステップ780において、ベリファイ
前処理に合格したかどうかを決定する。合格していなけ
れば、図5Bのステップ555で開始される従来のJV
Mの流れに従う。さもなければ、場合によっては、ベリ
ファイ前処理されたモジュールが、ステップ783にお
いて、信頼性があるとすべきかどうかをチェックした
後、以下でさらに記載するが、ステップ784に進む。
ファイルが、信頼性があるとされているかどうかをテス
トする方法が多くあることは、当業者に知られている。
たとえばデジタル署名を使用する方法がある。ベリファ
イ前処理されたモジュールの信頼性に関心がなければ、
ステップ783をスキップすることができる。ステップ
784では、メソッド内の各命令に従っていく代わり
に、実行ベリファイアは、BARのクラスごとのベリフ
ァイ処理中に、記録された/書き込まれたベリファイ前
処理制約を読み込む。書き込まれたベリファイ前処理制
約がなければ、BAR.FOOのベリファイ処理を終了
して、ステップ778に進み、そのプロセスを終了させ
る。
【0085】ベリファイ前処理制約が、参照モジュー
ル、たとえば、クラスAまたはクラスBが書き込まれて
いれば、ステップ786において、実行ベリファイア
が、制約内の参照モジュールが既にロードされているか
どうか決定する。ロードされていれば、ステップ788
において、ベリファイ前処理制約が実施される。参照モ
ジュールが制約に合格しなければ、ステップ762にお
いて、エラー・ハンドラが、例外処理のためにエラー・
メッセージを発する。さもなければ、ステップ778に
移動して、処理の必要がなくなるまで、ベリファイ前処
理制約処理がループ処理される。ステップ786におい
て、参照クラスなどの参照モジュールがロードされてい
ないと決定すれば、ステップ789において、クラスな
どの参照モジュールがロードされて、ステップ788に
おいて、その制約処理が実施される。
【0086】そのクラスがベリファイ前処理されている
(場合によっては、信頼性チェックに合格している)限
り、ベリファイ前処理制約が参照クラスに書き込まれて
いてもいなくとも、相互クラス・チェックを実行する必
要はない。理由は、それらの相互クラス・チェックは、
実行前の、クラスごとのベリファイ前処理の間に既に行
われてしまっているからである。本発明によれば、モジ
ュールが、1回1モジュール・ベリファイ前処理に合格
した後、実行ベリファイアは内部モジュール・チェック
を実行せず、相互モジュール制約を実施するだけであ
る。
【0087】上記のように本例では、モジュールのコン
パイルが終了するとすぐに、他のモジュールをロードす
ることなく、ベリファイ前処理される。したがって、実
行前に、ベリファイ処理の多くを処理することが可能に
なって、毎回繰り返されなくて、 モジュールをロード
し、リンクするたびに、ベリファイ処理を繰り返すこと
がなくなり、その結果、貴重な時間とスペースに関する
リソース(たとえば、仮想マシンを作動させるプロセッ
サの時間とスペース)が節約される。
【0088】完全要求駆動型ロードを伴うモジュールご
とのベリファイ前処理 図8は、実行時に完全要求駆動型ロード中にベリファイ
前処理の結果を組み込むフロー・チャートを示す。図8
が、実行前に1回1モジュール・ベリファイ処理を行っ
たモジュールが、本例のクラスBARのための完全要求
駆動型ロードをサポートするリンク中に実行されるベリ
ファイ処理によって、いかに扱われるかを示す。従来の
JVMによるステップ530a、または、完全要求駆動
型ロードのための変更されたステップ530b、1回1
モジュール・ベリファイ処理を伴う概要求駆動型ロード
のためのベリファイ処理を行うステップ530cのいず
れかに代わって、図8は、JVMの新しい実施形態によ
る完全要求駆動型ロードに従う代替ステップ530dを
示し、クラスごとのベリファイ前処理を組み込む。図8
のステップ892、ステップ880、ステップ883、
ステップ884、ステップ878、ステップ886、お
よびステップ862は、それぞれ、図7Cの対応する7
00番台のステップ792、ステップ780、ステップ
783、ステップ784、ステップ778、ステップ7
86、およびステップ762に類似している。ステップ
892において、クラスBARのメソッドFOOなどの
モジュールの命令のためにベリファイ処理ステップを開
始した後、ステップ880において、そのモジュールが
ベリファイ前処理に合格したかどうかを決定する。合格
していなければ、図6Aのステップ655で始まるJV
Mによる完全要求駆動型ロードのフローに従う。場合に
よっては、ステップ883において、ベリファイ前処理
されたモジュールが上記したように、信頼性があるとす
べきかどうかをチェックした後、ステップ884に移動
する。ステップ884において、メソッド内の各命令に
従っていく代わりに、実行ベリファイアは、BARのク
ラスごとのベリファイ処理中に、書込まれたベリファイ
前処理制約を読み込む。書き込みされたベリファイ前処
理制約がなければ、BAR.FOOのベリファイ処理を
終了して、ステップ878に進み、プロセスを終了させ
る。
【0089】たとえば、クラスA、または、クラスBで
ある、参照モジュールのために、ベリファイ前処理制約
を読み込むと、ステップ886において、実行ベリファ
イアが、その制約内の参照モジュールが既にロードされ
ているかどうかを決定する。ロードされていれば、ステ
ップ888において、ベリファイ前処理制約処理が実施
される。参照モジュールがその制約に合格しなければ、
ステップ862において、エラー・ハンドラによる例外
処理のためにエラー・メッセージが発せられる。参照モ
ジュールが適格ではない制約に合格すると、処理をする
必要がなくなるまでベリファイ前処理制約処理をループ
処理するステップ878に進む。
【0090】完全要求駆動型ロードのための図8に残っ
ているステップは、概要求駆動型ロードのための対応部
と実質的に異なっている。ステップ886において、参
照クラスなどの参照モジュールがロードされていないと
決定すれば、参照モジュールはロードされない。代わり
に、クラスなどのまだロードされていないモジュールが
ロードされることがあるとしたら、そのときのために、
ステップ889において、ベリファイ前処理制約は、メ
モリ、または記憶媒体にコピーされる、または、コピー
されるのでなければ、保持される。
【0091】図8では、ステップ888は、3つの進む
先を持つことができる。条件なしで、合格する場合と、
合格しない場合のほかに、1つ、または複数の他のまだ
ロードされていないモジュールのコンテンツが既知であ
るときのみ、既にロードされている参照モジュールが合
格できる場合があり得る。上記結果は、いくつかの参照
モジュールに課せられるベリファイ前処理制約を、1つ
または複数のまだロードされていない参照モジュールに
課せられるベリファイ制約として、書き直すべきである
という「条件付き合格」と考えることができる。ステッ
プ885において、クラスなどのまだロードされていな
い参照モジュールにのみ課せられるベリファイ制約とし
て、ベリファイ前処理制約を書き直す。書き直した後
に、必要ならば、ステップ878に進む。
【0092】信頼性のないクラスのモジュールごとのベ
リファイ処理 上記のように、本発明によるべリファイ処理は、参照モ
ジュールが満足しなければならない制約を有するモジュ
ールをコンストラクト(construct)し、アノ
テート(annotate)する能力による。不幸にし
て、その手順は、アタッカーが、そのようなアノテーシ
ョンをスプーフィングする−おそらく、悪性のクラスを
良性に見せかけることを必ずしも防止しない。したがっ
て、本発明の1つの実施形態によれば、選択自由の信頼
性チェックが、図7Cのステップ783と、図8のステ
ップ883に含まれている。それらのチェックがなくて
も、たとえば、クラスをベリファイ前処理して、実行前
に、信頼性のある(改ざんのない)データベースにロー
ドすることができる場合、信頼性のある状況でベリファ
イ前処理できる。
【0093】しかしながら、信頼性のない状況では、よ
り多くの保護対策が必要である。本発明の1つの実施形
態によれば、図9に示されるように、キャッシュ920
は、信頼性のあるクラスおよび/または、ベリファイ前
処理制約、たとえば、965aなどの信頼性のあるモジ
ュールを含むことができるであろう。信頼性のないソー
ス、たとえば、インターネット上のソースから仮想マシ
ンに入力されたモジュールおよび/制約を、キャッシ
ュ、たとえば965の外側に置くことができるであろ
う。信頼性のないソース、たとえば965からのクラス
に伴うベリファイ前処理制約はいかなるものも無視され
るであろう。代わりに、そのようなモジュールが初めて
ロードされたとき、図7Aで示された方法によって、ベ
リファイ前処理ベリファイア910において非要求駆動
型ベリファイ前処理される。モジュールがベリファイ前
処理に合格しなければ、そのモジュールは直ちに拒絶さ
れるであろう。モジュールがベリファイ前処理に合格す
れば、必要に応じて、新しいベリファイ前処理制約が生
成され、そして、新しい制約とアノテート、または関連
付けられたモジュール、たとえば、965aが、信頼性
のあるモジュール・キャッシュ920に記憶される。続
いて、信頼性のないソースからモジュールをロードしよ
うとすると、モジュール・キャッシュ920がサーチさ
れるであろう。キャッシュされ、ベリファイ前処理され
たモジュール965aが見つかると、そのモジュール9
65aを、ベリファイ前処理されたものとして、安全に
使用できる。上記変形例では、図7Bに示されたよう
に、クラスごとのベリファイ前処理制約のチェックが正
しく行われるであろう。実際、図7Cのステップ780
では、モジュール・キャッシュをチェックすることによ
ってベリファイ前処理が実行されたかどうかという質問
に答えが与えられる。上記の変形例では、図7Aのステ
ップ718のベリファイ前処理制約のデジタル・サイン
は必要とされない。同様に、上記変形例では、図7Cの
ステップ783と、図8のステップ883に示された、
ベリファイ前処理出力が信頼性のあるものかどうかにつ
いてのチェックは必要とされない。そして、ステップ7
80、またはステップ880から、それぞれステップ7
84、またはステップ884に直接進む。
【0094】制約の形式 図6A、6C、7A、7Bおよび8のフロー・チャート
で示した方法は、すべて、できるだけ遅く参照クラスを
チェックする要素を提供している。書き込まれた制約の
形式、および、それらの制約が続いてチェックされる方
法は、以下の通りである。制約は、たとえば、図6Aの
ステップ650、図7Bのステップ750、および図8
のステップ885と、ステップ889において書き込む
ことができる。図6Cのステップ673、図7Cのステ
ップ788、および図8のステップ888において、制
約処理を実施することができる。
【0095】制約の生成と制約のチェックを、例を使用
して、より詳細に記載する。図2を参照して、処理ステ
ートメントは、クラスBの新しいインスタンスを、クラ
スタイプAの変数varに記憶すると宣言している。オ
ブジェクト指向言語では、上記の処理は、B<=Aと表
現されるように、クラスBがクラスAのサブ・タイプで
あることを要求している。クラスBがそのときロードさ
れていなければ、BARのベリファイ処理の間、上記の
ことは既知ではない。また、クラスBがロードされ、ク
ラスBがクラスAのサブ・クラスならば、Aは、またロ
ードされていなければならない(Bをロードするため
に、Aがロードされていなければならないので)。した
がって、その対置が真である、すなわち、クラスBがロ
ードされていて、クラスAがロードされていないなら
ば、クラスBは、クラスAのサブ・クラスではない。そ
の処理ステートメントによって、クラスBARがベリフ
ァイ処理に合格しなくなるサブ・タイプ・ミスマッチを
引き起こす。図3の非要求駆動型ロードのように、クラ
スAとクラスBの両方がロードされていれば、クラスA
が、ほぼクラスBのスーパー・クラスであるかどうかを
調べるために、クラスBのためのスーパー・クラスのイ
ンジケータをトレースできる。そうであれば、クラスB
は、クラスAのサブ・クラスであって、上記処理は、ベ
リファイ処理に合格する。その階層上でスーパー・クラ
ス・インジケータを追跡しても、クラスAが見つからな
ければ、クラスBは、クラスAのサブ・クラスではな
い。つまり、処理ステートメントによって、サブ・タイ
プ・ミスマッチが起こって、クラスBARがベリファイ
処理に合格しない。
【0096】従来のJVM仕様を使用して、クラスBが
まだロードされていなかったならば、ベリファイアは、
クラスBをロードして、そのタイプ、より詳しくは、ク
ラスBがクラスAのサブ・タイプであるかどうかをチェ
ックする。
【0097】本発明によれば、完全要求駆動型ロード、
または、クラスごとのベリファイ処理、または両者を実
現するために、クラスBをロードしないことが望まれ
る。したがって、本発明の本実施形態によれば、クラス
Bはロードされない。代わりに、制約B<=Aが書き込
まれる。制約を書き込むための上記のステップであれば
どのステップにおいても、上記の制約を書き込むことが
できる。(たとえば、ステップ650、ステップ75
0、ステップ889、ステップ885)BAR.FOO
を実行した後、その処理ステートメントを有する上記の
ブランチが実行されず、そして、クラスBが、必ずしも
同様に、実行されるいかなる他の命令からも参照されな
いならば、クラスBは決してロードされない。しかし、
上記処理ステートメントを含むブランチが実行され、ク
ラスBがまだロードされないならば、そのときには、ク
ラスBはロードされる。そして、そのとき、クラスBが
ロードされた後、クラスBが制約B<=Aを満足させる
かどうかのチェックが行われるであろう。上記のチェッ
クを、たとえば、制約をチェックするための上記ステッ
プ(たとえば、673、788、888)において実行
することができる。上記の実行が簡単なのは、もし、ク
ラスBが本当にクラスAのサブ・クラスであり、クラス
Aからその属性を引き継いでいれば、クラスAは、既に
ロードされていなければならなかっただろうからであ
る。したがって、上記のタイプの制約は、完全要求駆動
型ロード、または、クラスごとのベリファイ前処理、ま
たは両者を可能にする。
【0098】クラスごとのベリファイ前処理では、本発
明による完全要求駆動型ロード実行時の取り扱い方法と
は異なる方法で取り扱うことのできる、ノン・ローカル
・クラスのクラス・タイプには、別のチェックが課せら
れる。上記は、プロテクテッドメンバーのためのレシー
バ・アクセス・チェックである。
【0099】JAVA(登録商標)の仮想マシンでは、
プロテクテッドメンバーRに、1つのクラス、またはイ
ンタフェースDによってアクセスできるのは、下記の条
件、または下記の条件のときのみである。 1. Dが、R OR BOTHであると宣言したクラ
スCと同じ実行パッケージの中にある。 2. Dが、Cのサブ・クラスであって、R,ANDで
あると宣言したクラスである。 3. Rがインスタンス・メンバーであれば、アクセス
されるインスタンスRのスタチック・タイプであるT
は、Dのサブ・タイプである。条件3は、レシーバ・チ
ェックとして知られている。
【0100】従来のJAVA(登録商標)仮想マシンで
は、最初の2つの条件は、DからRへの参照が、Dのリ
ンク中に分割されるときチェックされる。3番目の条件
は、Dのベリファイ処理の間にチェックされる。ベリフ
ァイ処理の間、Rを宣言するクラスCのロードは、まだ
終了していないであろう。上記の場合、CがDのスーパ
ー・クラスではないことは明らかである。(そうでなけ
れば、クラスをロードすることは、そのすべてのスーパ
ー・クラスをロードすることを意味するから、Cは強制
的にロードされていただろう。)その場合、CとDが同
じ実行パッケージの中にあるときのみ、そのアクセスは
適格である。ベリファイアは、上記条件が成立すると、
楽観的に仮定することができる。参照が分割されている
とき、その条件がチェックされるだろう。したがって、
Cが既にロードされていれば、ベリファイアは、プロテ
クテッドレシーバ・チェックを実行する必要があるだけ
である。上記状況において、Rがいったいプロテクテッ
ドメンバーであるかどうかを決定することができる。R
がプロテクトされていないならば、いかなるプロテクテ
ッドレシーバ・チェックも必要ない。Rがプロテクトさ
れているならば、ベリファイアは、Dが、Cと同じ実行
パッケージ内にあるかどうかを調べるテストを行うこと
ができる。上記が事実ならば、そのアクセスは適格であ
って、再び、いかなるプロテクテッドレシーバ・チェッ
クも必要ない。DとCが同じ実行パッケージの中にない
ならば、ベリファイアは、DがCのサブ・クラスである
かどうかと、Tが、アクセスされているインスタンスの
スタチック・タイプであって、Dのサブ・タイプである
かどうかをチェックすることができる。もし、否定され
れば、エラー・メッセージが発せられる。Tがまだロー
ドされていなければ、チェックT<=Dが、Tのロード
を要求することができることに注意されたい。
【0101】完全要求駆動型ロードを伴うベリファイ処
理では、Dをベリファイ処理するとき、Dのスーパー・
クラスが、ロードされていたと仮定される。1つの例外
処理を除いて、非要求駆動型の場合と同じように処理さ
れる。T<=Dかどうかのチェックが必要とされて、T
がロードされていないことが決定されれば、ロードする
ことを避けなければならない。代わりに、制約T<=D
がTに課せられる。
【0102】クラスごとのベリファイ処理では、状況は
異なる。Dのスーパー・クラスも、Rを宣言したクラス
Cもいずれもロードされていない。したがって、プロテ
クテッドレシーバ・チェックを実行することはできな
い。CがDのスーパー・クラスならば、Cがロードされ
ているに違いないと仮定することはできない。したがっ
て、Rの宣言を調べることはできない。Rがプロテクト
されているかどうかを決定することさえできないという
ことになる。代わりに、後でプログラムが実行されると
きに、チェックされるであろう適切な制約を生成しなけ
ればならない。上記の問題は、下記の条件付きの制約を
生成させることによって解決することができる。 invoke o,X.m の形式の全命令に対して、 If(D<=X)then{if(X.m prote
cted) then {T<=D} else {t
rue}}else{true} ここで、oのタイプは、Tである。同様の戦略がフィー
ルド参照に適用される。上記の制約は、Dの初期化の前
に調べられる。そのポイントでは、D<=Xを決定でき
る。(Dとそのすべてのスーパー・クラスが既にロード
されているので)。D<=Xが真でなければ、さらなる
行動は必要ではない。DがXのサブ・クラスでないなら
ば、おそらくDは、Cのサブ・クラス、mを宣言したク
ラスではない。その理由は、Cが必ずXのスーパー・ク
ラスでなければならないからである。mもプロテクトさ
れず、CがDと同じ実行パッケージの中にあるならば、
X.mへの参照が適格であるにすぎないということにな
る。X.mへの参照が分割されるとき、上記がチェック
される。D<=Xが真ならば、X.mがプロテクトされ
ているかどうかをチェックすることができる。X.mが
プロテクトされないならば、プロテクテッド・レシーバ
・チェックを実行する必要はない。さもなければ、T<
=Dのテストを行うことができ、上記のように、Tがロ
ードされることになる。
【0103】完全要求駆動型ベリファイ処理と、クラス
ごとのベリファイ処理を組みあわせると、下記を除き、
クラスごとのベリファイ処理のための手順に従うことに
なる。以下の条件付きの制約を評価するとき、 if(D<=X)then{if(X.m prote
cted)then{T<=D}else{tru
e}}else{true} T<=Dを評価しなければならず、そして、Tがロード
されていないならば、要求駆動型の場合と同じように、
Tに、ロード制約T<=Dを課さなければならない。
【0104】ベリファイ処理によって、いくつかの前に
実行されたステートメントの後続ステートメントである
ステートメントの、すなわち2つ以上のブランチが一点
に集まるところで、オペランド・スタックの状態を調べ
るとき、別の制約も適切である。ここで、現在、ベリフ
ァイ処理は、オペランド・スタックのスナップショット
と、現在の命令が後続である、先行の命令からのローカ
ル変数とをマージさせるよう設計される。まだロードさ
れていないクラスにおいて定義されるタイプが参照され
るならば、クラスごとのベリファイ処理では常時事実で
あり、完全要求駆動型ロードでの場合事実であることが
あるが、そのタイプ格子は、利用可能ではなく、LUB
は既知ではない。図6Bのステップ638において記載
されたLUBの記号表示に従うと、「LUB<=クラス
T」などの制約を、下記のように記号で表示されたリス
トにある制約に置き替えることができる。 X1^X2^...Xn<=T 上記は、以下のように、個々のクラスX1の一連の制約
に分解できる。 X1<=T、X2<=T、...Xn<=T
【0105】ロードされたクラスの現在のメソッドが実
行されて、クラスX2の分割を必要とするブランチに進
む場合、たとえば、クラスX2は、ロードされて、その
とき、制約X2<=Tをチェックすることができる。代
わりに、X2がロードされているとき、X2がそのチェッ
クに合格するならば、リストから、X2を落として、リ
ストにおける制約を書き直すことができる。
【0106】上記のように、いくつかのステップの内の
いずれかのステップ(たとえば、ステップ650、ステ
ップ750、ステップ889、ステップ885)におい
て、その制約を書き込み、次に、いくつかのチェック・
ステップの内のいずれかのステップ(たとえば、ステッ
プ673、ステップ788、ステップ888)において
その制約をチェックする。
【0107】LUBの上記記号表示によって、収束する
実際の計算時間が長くなることがある。しかしながら、
JVMの固定プールのクラス・ファイルは有限なので、
上記プロセスは確実に収束する。したがって、1つのメ
ソッドは、直接的に、または間接的に、有限の数のタイ
プしか参照することはできない。その結果、LUBの記
号表示は、クラス名、X1^...^Xnの有限系列でな
ければならない。また、上記によって、タイプ推論アル
ゴリズムによる繰り返しの数は、JVMに対して、有限
であることになる。その理由は、新しいタイプが、LU
Bに追加できるまで繰り返しが続くからである。
【0108】本発明は詳細に記載され、図示されたが、
説明と実施形態としてのみ行なわれたもので、何ら制限
を加えるためのものではなく、添付の請求項目によって
のみ本発明の趣旨と範囲が制限されることは明らかであ
る。
【図面の簡単な説明】
【図1A】本発明の実行のための使用に適したコンピュ
ータ・システムの例を示す。
【図1B】図1Aのコンピュータのハードウェア構成の
例を示すブロック構成図である。
【図1C】本発明による、プログラムとデータ情報を記
憶するするのに適した記憶媒体の例を示す図である。
【図1D】本発明による、データとプログラムを伝送す
るのに適したネットワーク・アーキテクチャのブロック
構成図である。
【図1E】本発明による構成をもつコンピュータのブロ
ック構成図である。
【図2】JAVA(登録商標)プログラミング言語に類
似の疑似言語で書かれたメソッドFOOと参照クラスA
とBを有するクラスBARの1つの例である。
【図3】図2の例のクラスBARの完全要求駆動型ロー
ドを示すフロー・チャートである。
【図4A】図2の例のクラスBARの概要求駆動型ロー
ドを示すフロー・チャートである。
【図4B】図4Aに示した概要求駆動型ロードのステッ
プ475のために最新版のJVMに使用されているアク
セス−タイプのチェック法を示すフロー・チャートであ
る。
【図5A】図2の例のクラスBARのための図4Aのリ
ンク・ステップ435でのベリファイ処理を示すフロー
・チャートである。
【図5B】図2の例のクラスBARのために、図5Aの
ステップ530の1つの実施形態におけるメソッドのベ
リファイ処理を示すフロー・チャートである。
【図5C】図5Bのベリファイ処理ステップ537にお
ける命令ベリファイ処理を示すフロー・チャートであ
る。
【図6A】完全要求駆動型ロードが可能な図2の例のク
ラスBARのための図5Aのステップ530における本
発明の実施形態によるメソッド・ベリファイ処理を示す
フロー・チャートである。
【図6B】本発明の実施形態による、図6Aの命令ベリ
ファイ処理ステップ637における命令ベリファイ処理
を示すフロー・チャートである。
【図6C】本発明の実施形態による、図2の例のクラス
BARのための図4Aのステップ475におけるベリフ
ァイ制約チェックを示すフロー・チャートである。
【図7A】例のクラス「BAR」のために図2から一度
にクラスプレベリファイについて表現するフロー・チャ
ートである。
【図7B】図7Aのステップ716におけるメソッドの
ベリファイ前処理を示すフロー・チャートである。
【図7C】本発明の1つの実施形態による図2の例のク
ラスBARの実行時のベリファイ処理中における図5A
のステップ530のクラスごとのベリファイ前処理の利
用を示すフロー・チャートである。
【図8】図2の例のクラスBARのクラスごとのベリフ
ァイ前処理による完全要求駆動型ロードを可能にする、
本発明の別の実施形態による、図5Aのステップ530
におけるクラスごとのベリファイ前処理の利用を示すフ
ロー・チャートである。
【図9】本発明の別の実施形態による、信頼性のあるク
ラスと、ベリファイ制約のために、キャッシュを有し
て、ベリファイ前処理を行うよう構成されたコンピュー
タのブロック構成図である。
【符号の説明】
110A、110B ディスク・ドライブ装置 100 中央演算処理装置 120 表示装置 125 表示装置インタフェース 130 キーボード 140 マウス 150 バス 150、151、167 仮想マシン (VM) 155 CPU 160 読出し専用記憶装置 162 ソース・コード・ステートメント 164 コンパイラ 165 ランダム・アクセス・メモリ 167 仮想マシン(VM) 170 ディスク制御装置 171 CDーROMドライブ 装置、DVDドライブ
装置 172 ハード・ディスク・ドライブ装置 173 フロッピー・ディスク・ドライブ装置 125 表示装置インタフェース 175 通信ポート 190 ネットワーク 310、320、335、410、440 ステップ L1、L2、L3 クラス・ローダ
───────────────────────────────────────────────────── フロントページの続き (72)発明者 ギラッド ブラーチャ アメリカ合衆国 カリフォルニア州 94024,ロスアルトス ファーンドンアベ ニュー 2042 (72)発明者 シェン リャン アメリカ合衆国 カリフォルニア州 94041,マウンテンビュー #23,カルデ ロンアベニュー 210 (72)発明者 ティモシー ジー.リンドルム アメリカ合衆国 カリフォルニア州 94301,パロアルト ミドルフィールドロ ード 623

Claims (33)

    【特許請求の範囲】
  1. 【請求項1】 コンピュータ・プログラムのモジュール
    内の命令を1回1モジュール・ベリファイ処理する方法
    であって、 最初のモジュール内の命令をチェックして、その最初の
    モジュールとは異なる参照モジュール内の情報が要求さ
    れるかどうかを決定するステップと、 もしその情報が要求されれば、その参照モジュールにア
    クセスすることを要求することなく、その参照モジュー
    ルのための制約を書き込むステップと、を含む方法。
  2. 【請求項2】 その命令に要求される内部モジュール・
    チェックを実行するステップと、 その最初のモジュール内の命令をチェックして、その参
    照モジュール内の情報が要求されるかどうかの決定を、
    その最初のモジュール内の必要とされる命令が前記決定
    にかかるまで行うステップに戻るステップと、をさらに
    含む、請求項1に記載の方法。
  3. 【請求項3】 もし、その命令が内部モジュール・チェ
    ックに合格できないとき、前記内部モジュール・チェッ
    クの実行が、エラー・メッセージを送るステップをさら
    に含む、請求項2に記載の方法。
  4. 【請求項4】 リンク中に、コンピュータ・プログラム
    のモジュールの命令をベリファイ処理する方法であっ
    て、 ロードされた最初のモジュールが1回1モジュール・ベ
    リファイ前処理に合格したかどうかを決定するステップ
    と、 もし、その最初のモジュールがベリファイ前処理に合格
    していれば、もしあれば、制約付きモジュールに課せら
    れるベリファイ前処理制約を読み込むステップと、 もし、ベリファイ前処理制約が読み込まれていれば、そ
    の制約付きモジュールがロードされているかどうかを決
    定するステップと、 もし、その制約付きモジュールがロードされていれば、
    そのベリファイ前処理制約を実施するステップと、を含
    む方法。
  5. 【請求項5】 もし、その制約付きモジュールがベリフ
    ァイ前処理制約に合格できないとき、ベリファイ前処理
    制約を実施する前記ステップが、エラー・メッセージを
    送るステップをさらに含む、請求項4に記載の方法。
  6. 【請求項6】 もし、その制約付きモジュールがロード
    されていなければ、その制約付きモジュールをロードす
    るステップと、その前記ベリファイ前処理制約を実施す
    るステップをさらに含む、請求項4に記載の方法。
  7. 【請求項7】 もし、その制約付きモジュールが、前記
    実施中に、その前記ベリファイ前処理制約に合格すれ
    ば、ベリファイ前処理制約すべてが読み込まれるまで
    は、制約付きモジュールに課せられるベリファイ前処理
    制約を読み込むステップに戻るステップをさらに含む、
    請求項4に記載の方法。
  8. 【請求項8】 もし、その制約付きモジュールが、前記
    実施中に、その前記ベリファイ前処理制約に合格すれ
    ば、ベリファイ前処理制約すべてが読み込まれるまで
    は、制約付きモジュールに課せられるベリファイ前処理
    制約を読み込むステップに戻るステップをさらに含み、
    その結果、その最初のモジュールがベリファイ処理され
    る、請求項6に記載の方法。
  9. 【請求項9】 コンピュータ・プログラムのモジュール
    内の命令を1回1モジュール・ベリファイ処理するコン
    ピュータ・プログラム生成物であって、 コンピュータが読み込みできる記憶媒体と、 コンピュータが読み込みできる記憶媒体に記憶されたコ
    ンピュータ制御コマンドであって、最初のモジュール内
    の命令をチェックして、その最初のモジュールとは異な
    る参照モジュール内の情報が要求されるどうかを決定
    し、そして、もしその情報が要求されれば、その参照モ
    ジュールにアクセスすることを要求することなく、その
    参照モジュールのための制約を書き込むコンピュータ制
    御コマンドと、を含むコンピュータ・プログラム生成
    物。
  10. 【請求項10】 そのコンピュータが読み込みできる記
    憶媒体に記憶されて、その命令に要求される内部チェッ
    クを行い、その最初のモジュール内の命令をチェックし
    て、その参照モジュール内の情報が要求されるかどうか
    の決定を、その最初のモジュール内の必要とされる命令
    が前記決定にかかるまで行うステップに戻る、コンピュ
    ータ制御コマンドをさらに含む、請求項9に記載のコン
    ピュータ・プログラム生成物。
  11. 【請求項11】 そのコンピュータが読み込みできる記
    憶媒体に記憶されて、もし、その命令が内部モジュール
    ・チェックを満足することができなければ、エラー・メ
    ッセージを送るコンピュータ制御コマンドをさらに含
    む、請求項10に記載のコンピュータ・プログラム生成
    物。
  12. 【請求項12】 リンク中に、コンピュータ・プログラ
    ムのモジュールの命令をベリファイ処理するコンピュー
    タ・プログラム生成物であって、 コンピュータが読み込みできる記憶媒体と、 コンピュータが読み込みできる記憶媒体に記憶されて、
    ロードされている最初のモジュールが1回1モジュール
    ・ベリファイ前処理に合格したかどうかを決定し、も
    し、その最初のモジュールがベリファイ処理に合格して
    いれば、もしあれば、制約付きのモジュールに課せられ
    るベリファイ前処理制約を読み込み、ベリファイ前処理
    制約が読み込まれていれば、その制約付きモジュールが
    ロードされているかどうかを決定し、そして、その制約
    付きモジュールがロードされていれば、そのベリファイ
    前処理制約を実施するコンピュータ制御コマンドと、を
    含むコンピュータ・プログラム生成物。
  13. 【請求項13】 コンピュータが読み込みできる記憶媒
    体に記憶されて、そのベリファイ前処理制約を実施中
    に、その制約付きモジュールがベリファイ前処理制約を
    満足することができなければ、エラー・メッセージを送
    るコンピュータ制御コマンドをさらに含む、請求項12
    に記載のコンピュータ・プログラム生成物。
  14. 【請求項14】 コンピュータが読み込みできる記憶媒
    体に記憶されて、もし、その制約付きモジュールがロー
    ドされていなければ、その制約付きモジュールをロード
    して、そのベリファイ前処理制約を実施するコンピュー
    タ制御コンドをさらに含む、請求項12に記載のコンピ
    ュータ・プログラム生成物。
  15. 【請求項15】 コンピュータが読み込みできるその記
    憶媒体に記憶されて、もし、前記実施中に、制約付きモ
    ジュールがベリファイ前処理制約に合格するなら、すべ
    てのベリファイ前処理制約を読み込むまで、制約付きモ
    ジュールに課せられるベリファイ前処理制約を読み込む
    ステップに戻るコンピュータ制御コマンドをさらに含
    む、請求項12に記載のコンピュータ・プログラム生成
    物。
  16. 【請求項16】 コンピュータが読み込みできるその記
    憶媒体に記憶されて、もし、前記実施中に、制約付きモ
    ジュールがベリファイ前処理制約に合格するなら、すべ
    てのベリファイ前処理制約を読み込むまで、制約付きモ
    ジュールに課せられるベリファイ前処理制約を読み込む
    ステップに戻るコンピュータ制御コマンドをさらに含
    み、その結果、その最初のモジュールをベリファイ処理
    する、請求項14に記載のコンピュータ・プログラム生
    成物。
  17. 【請求項17】 モジュールを1回1モジュール・ベリ
    ファイ処理するベリファイ前処理装置であって、 コンピュータ・プログラムのモジュールと制約を記憶す
    る、コンピュータが読み込みできる記憶媒体と、 最初のモジュール内の命令をチェックして、その最初の
    モジュールと異なる参照モジュール内の情報が必要とさ
    れるかどうかを決定し、そして、もし、その情報が要求
    されれば、その参照モジュールにアクセスすることを要
    求することなく、その参照モジュールのための制約を書
    き込むよう構成されたプロセッサと、を含む装置。
  18. 【請求項18】 プロセッサが、その命令に要求される
    内部モジュール・チェックを実行し、その最初のモジュ
    ール内にある命令をチェックして、その参照モジュール
    内の情報が要求されるかどうかの決定を、その最初のモ
    ジュール内の必要とされる命令が前記決定にかかるまで
    行うステップに戻るようさらに構成されている、請求項
    17のベリファイ前処理装置。
  19. 【請求項19】 プロセッサは、命令が内部モジュール
    ・チェックを満足することができなければ、エラー・メ
    ッセージを送るようさらに構成されている、請求項18
    のベリファイ前処理装置。
  20. 【請求項20】 リンク中に、モジュールをベリファイ
    処理するベリファイ処理装置であって、 コンピュータ・プログラムのモジュールを記憶するコン
    ピュータが読み込みできる記憶媒体と、 モジュールをロードするメモリと、 ロードした最初のモジュールが1回1モジュールベリフ
    ァイ前処理に合格したかどうかを決定し、もし、その最
    初のモジュールがベリファイ処理に合格していれば、も
    しあれば、制約付きのモジュールに課せられるベリファ
    イ前処理制約を読み込み、もし、ベリファイ前処理規約
    が読み込まれていれば、その制約付きモジュールがロー
    ドされているかどうかを決定し、そして、その制約付き
    モジュールがロードされていれば、ベリファイ前処理制
    約を実施するよう構成されたプロセッサと、を含む装
    置。
  21. 【請求項21】 プロセッサは、もし、その制約付きモ
    ジュールが、前記実施中に、ベリファイ前処理を満足す
    ることができなければ、エラー・メッセージを送るよう
    さらに構成されている、請求項20に記載のベリファイ
    処理装置。
  22. 【請求項22】 プロセッサは、その制約付きモジュー
    ルをロードし、もし、その制約付きモジュールがまだロ
    ードされていなければ、そのベリファイ前処理制約を実
    施するようさらに構成されている、請求項20に記載の
    ベリファイ処理装置。
  23. 【請求項23】 プロセッサが、もし、前記実施中に、
    制約付きモジュールがベリファイ前処理制約に合格する
    なら、すべてのベリファイ前処理制約を読み込むまで、
    制約付きモジュールに課せられるベリファイ前処理制約
    を読み込むステップに戻るようさらに構成されている、
    請求項20に記載のベリファイ処理装置。
  24. 【請求項24】 プロセッサは、もし、前記実施中に、
    制約付きモジュールがベリファイ前処理制約に合格する
    なら、すべてのベリファイ前処理制約を読み込むまで、
    制約付きモジュールに課せられるベリファイ前処理制約
    を読み込むステップに戻るようさらに構成され、その結
    果、その最初のモジュールがベリファイ処理される、請
    求項22に記載のベリファイ処理装置。
  25. 【請求項25】 通信線路上の搬送波と、 その搬送波を使用して伝送される、コンピュータ制御コ
    マンドを示す信号であって、コンピュータ・プログラム
    の最初のモジュール内の命令をチェックして、その最初
    のモジュールとは異なる参照モジュール内の情報が要求
    されているかどうかを決定し、そして、もし、その情報
    が要求されていれば、その参照モジュールにアクセスす
    ることを要求することなく、その参照モジュールのため
    の制約を書き込む信号とを含む、信号伝送装置。
  26. 【請求項26】 その搬送波を使用して伝送されて、命
    令に要求される内部モジュール・チェックを行なって、
    その最初のモジュール内の命令をチェックして、その参
    照モジュール内の情報が要求されているかどうかの決定
    を、その最初のモジュール内の必要とされる命令が前記
    決定にかかるまで行うステップに戻るコンピュータ制御
    コマンドをさらに含む、請求項25に記載の信号伝送装
    置。
  27. 【請求項27】 その搬送波を使用して伝送されて、そ
    の命令が内部モジュール・チェックを満足することがで
    きなければ、エラー・メッセージを送るコンピュータ制
    御コマンドをさらに含む、請求項26に記載の信号伝送
    装置。
  28. 【請求項28】 通信線路上の搬送波と、 その搬送波を使用して伝送される、コンピュータ制御コ
    マンドを示す信号であって、ロードされている最初のモ
    ジュールが1回1モジュール・ベリファイ前処理に合格
    したかどうかを決定し、もし、その最初のモジュールが
    ベリファイ前処理に合格していれば、もしあれば、制約
    付きモジュールに課せられるベリファイ前処理制約を読
    み込み、もし、ベリファイ前処理制約が読み込まれてい
    れば、その制約付きモジュールをロードするかどうかを
    決定し、そして、その制約付きモジュールがロードされ
    ていれば、そのベリファイ前処理制約を実施する信号
    と、を含む信号伝送装置。
  29. 【請求項29】 その搬送波を使用して伝送されて、そ
    のベリファイ前処理制約を実施中に、その制約付きモジ
    ュールがそのベリファイ前処理制約を満足できなけれ
    ば、エラー・メッセージを送るコンピュータ制御コマン
    ドをさらに含む、請求項28に記載の信号伝送装置。
  30. 【請求項30】 その搬送波を使用して伝送されて、そ
    の制約付きモジュールをロードし、もし、その制約付き
    モジュールがまだロードされていなければ、そのベリフ
    ァイ前処理制約を実施するコンピュータ制御コマンドを
    さらに含む、請求項28に記載の信号伝送装置。
  31. 【請求項31】 その搬送波を使用して伝送されて、前
    記実施中に、その制約付きモジュールがそのベリファイ
    前処理制約に合格するならば、すべてのベリファイ前処
    理制約を読み込むまで、制約付きモジュールに課せられ
    るベリファイ前処理制約を読み込むステップに戻るコン
    ピュータ制御コマンドをさらに含む、請求項28に記載
    の信号伝送装置。
  32. 【請求項32】 その搬送波を使用して伝送されて、前
    記実施中に、その制約付きモジュールがそのベリファイ
    前処理制約に合格すれば、すべてのベリファイ前処理制
    約を読み込むまで、制約付きモジュールに課せられるベ
    リファイ前処理制約を読み込むステップに戻るコンピュ
    ータ制御コマンドをさらに含み、その結果、その最初の
    モジュールがベリファイ処理される、請求項30に記載
    の信号伝送装置。
  33. 【請求項33】 ネットワークと、 コンピュータ・プログラムのモジュールを記憶するため
    の、ネットワークに接続されて、コンピュータが読み込
    みできる記憶媒体と、 モジュールをロードする、ネットワークに接続されたメ
    モリと、 最初のモジュール内の命令をチェックして、最初のモジ
    ュールと異なる参照モジュール内の情報が必要となるか
    どうかを決定し、そして、情報が要求されるならば、そ
    の参照モジュールにアクセスすることを要求することな
    く、その参照モジュールのための制約を書き込むよう構
    成されて、その結果、1回1モジュール・ベリファイ前
    処理が実行される、ネットワークに接続されたプロセッ
    サと、そして、 ロードされた最初のモジュールが、リンク前に1回1モ
    ジュール・ベリファイ前処理に合格したかどうかをリン
    ク中に決定し、その最初のモジュールがベリファイ前処
    理に合格していれば、もしあるとすれば、制約付きモジ
    ュールに課せられるベリファイ前処理制約を読み込み、
    ベリファイ前処理制約が読み込まれていれば、制約付き
    モジュールをロードするかどうか決定し、そして、制約
    付きモジュールが既にロードされていれば、ベリファイ
    処理制約を実施するよう構成される、ネットワークに接
    続されたプロセッサと、を含み、その結果リンク前に1
    回1モジュール・ベリファイ処理を実行し、リンク中は
    ベリファイ処理を抑える、ベリファイ前処理システム。
JP2000152854A 1999-05-27 2000-05-24 モジュールごとのベリファイ処理 Pending JP2001060158A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/320574 1999-05-27
US09/320,574 US6618769B1 (en) 1999-05-27 1999-05-27 Module-by-module verification

Publications (1)

Publication Number Publication Date
JP2001060158A true JP2001060158A (ja) 2001-03-06

Family

ID=23247007

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000152854A Pending JP2001060158A (ja) 1999-05-27 2000-05-24 モジュールごとのベリファイ処理

Country Status (6)

Country Link
US (2) US6618769B1 (ja)
EP (1) EP1056003B1 (ja)
JP (1) JP2001060158A (ja)
CN (1) CN1224903C (ja)
AU (1) AU771028B2 (ja)
CA (1) CA2309769A1 (ja)

Families Citing this family (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6430569B1 (en) 1998-08-14 2002-08-06 Sun Microsystems, Inc. Methods and apparatus for type safe, lazy, user-defined class loading
US6618769B1 (en) * 1999-05-27 2003-09-09 Sun Microsystems, Inc. Module-by-module verification
US6601114B1 (en) * 1999-05-27 2003-07-29 Sun Microsystems, Inc. Fully lazy linking with module-by-module verification
US6766521B1 (en) * 1999-05-27 2004-07-20 Sun Microsystems, Inc. Dataflow algorithm for symbolic computation of lowest upper bound type
EP1085396A1 (en) 1999-09-17 2001-03-21 Hewlett-Packard Company Operation of trusted state in computing platform
GB0020441D0 (en) 2000-08-18 2000-10-04 Hewlett Packard Co Performance of a service on a computing platform
GB2376763B (en) * 2001-06-19 2004-12-15 Hewlett Packard Co Demonstrating integrity of a compartment of a compartmented operating system
US6851111B2 (en) * 2000-12-15 2005-02-01 International Business Machines Corporation System and method for class loader constraint checking
GB0102516D0 (en) * 2001-01-31 2001-03-21 Hewlett Packard Co Trusted gateway system
GB2372345A (en) * 2001-02-17 2002-08-21 Hewlett Packard Co Secure email handling using a compartmented operating system
GB2372592B (en) 2001-02-23 2005-03-30 Hewlett Packard Co Information system
GB2372595A (en) * 2001-02-23 2002-08-28 Hewlett Packard Co Method of and apparatus for ascertaining the status of a data processing environment.
US6993751B2 (en) * 2001-05-14 2006-01-31 Microsoft Corporation Placing exception throwing instructions in compiled code
CN100337198C (zh) * 2001-05-30 2007-09-12 捷讯研究有限公司 一种移动通信设备应用程序处理系统
US7036111B2 (en) * 2001-06-01 2006-04-25 Hewlett-Packard Development Company, L.P. Code verification system and method
GB2376765B (en) 2001-06-19 2004-12-29 Hewlett Packard Co Multiple trusted computing environments with verifiable environment identities
GB2376761A (en) * 2001-06-19 2002-12-24 Hewlett Packard Co An arrangement in which a process is run on a host operating system but may be switched to a guest system if it poses a security risk
GB2376764B (en) * 2001-06-19 2004-12-29 Hewlett Packard Co Multiple trusted computing environments
GB2381090B (en) * 2001-10-17 2005-02-02 Bitarts Ltd Software loading
GB2382419B (en) * 2001-11-22 2005-12-14 Hewlett Packard Co Apparatus and method for creating a trusted environment
US7103779B2 (en) * 2003-09-18 2006-09-05 Apple Computer, Inc. Method and apparatus for incremental code signing
US7287243B2 (en) * 2004-01-06 2007-10-23 Hewlett-Packard Development Company, L.P. Code verification system and method
EP1795030B1 (en) * 2004-09-07 2009-07-22 Research In Motion Limited Apparatus, system and methods for testing a device with constrained resources
EP2194476B1 (en) 2005-03-22 2014-12-03 Hewlett-Packard Development Company, L.P. Method and apparatus for creating a record of a software-verification attestation
US20070048724A1 (en) * 2005-09-01 2007-03-01 Microsoft Corporation Extensible context-enabled software
ATE550725T1 (de) * 2005-12-13 2012-04-15 Gemalto Sa Verfahren zur sicherung der ausführung eines vermittelnden sprachsoftwarecodes bei einer tragbaren anwendung
US7987451B1 (en) * 2006-11-20 2011-07-26 Mcafee, Inc. System, method and computer program product for verifying invocations of interfaces
CN101226569A (zh) * 2007-01-19 2008-07-23 国际商业机器公司 在虚拟机中验证代码模块的方法及装置
US9477497B2 (en) * 2008-09-26 2016-10-25 Juniper Networks, Inc. Methods for determining resource dependency and systems thereof
US8826238B2 (en) * 2009-01-22 2014-09-02 Microsoft Corporation Per group verification
US9081893B2 (en) * 2011-02-18 2015-07-14 Microsoft Technology Licensing, Llc Dynamic lazy type system
WO2015130675A2 (en) * 2014-02-26 2015-09-03 Western Michigan University Research Foundation Apparatus and method for testing computer program implementation against a design model
US10055208B2 (en) * 2015-08-09 2018-08-21 Oracle International Corporation Extending a virtual machine instruction set architecture
US11150915B2 (en) * 2019-09-13 2021-10-19 International Business Machines Corporation Deferred bytecode class verification in managed runtime environments
US11403075B2 (en) 2019-11-25 2022-08-02 International Business Machines Corporation Bytecode verification using class relationship caching

Family Cites Families (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0573190B1 (en) * 1992-06-03 2001-09-05 Sun Microsystems, Inc. Dynamically configurable kernel
CA2102883A1 (en) * 1993-02-26 1994-08-27 James W. Arendt System and method for lazy loading of shared libraries
US5369766A (en) * 1993-03-25 1994-11-29 Taligent, Inc. Object-oriented loader system with support for different load formats
JPH0822393A (ja) 1994-07-07 1996-01-23 Nec Corp 動的ローディング制御装置
US5668999A (en) * 1994-12-20 1997-09-16 Sun Microsystems, Inc. System and method for pre-verification of stack usage in bytecode program loops
US5748964A (en) * 1994-12-20 1998-05-05 Sun Microsystems, Inc. Bytecode program interpreter apparatus and method with pre-verification of data type restrictions
US5504568A (en) 1995-04-21 1996-04-02 Xerox Corporation Print sequence scheduling system for duplex printing apparatus
US5781710A (en) 1995-06-07 1998-07-14 Xerox Corporation Generic method for scheduling print engines using print engine capabilities
US5835688A (en) 1995-06-07 1998-11-10 Xerox Corporation Generic method for automatically generating finite-state machines for schedudling from print engine capabilities
US5696893A (en) 1995-06-07 1997-12-09 Xerox Corporation System for generically describing and scheduling operation of modular printing machine
US5771339A (en) 1995-06-07 1998-06-23 Xerox Corporation Method for automatically deriving print engine capabilities for incremental scheduling from compositional print engine models
US5694529A (en) 1995-06-07 1997-12-02 Xerox Corporation System for automatically configuring print engine software from print engine module capabilities
US5668942A (en) 1995-06-07 1997-09-16 Xerox Corporation Generic system for describing and using resources for print engine scheduling
US5805899A (en) 1995-07-06 1998-09-08 Sun Microsystems, Inc. Method and apparatus for internal versioning of objects using a mapfile
US5701557A (en) 1995-11-28 1997-12-23 Xerox Corporation Machine graphs and capabilities to represent document output terminals composed of arbitrary configurations
US5617214A (en) 1995-11-28 1997-04-01 Xerox Corporation Commitment groups to generalize the scheduling of interdependent document output terminal capabilities
US5631740A (en) 1995-11-28 1997-05-20 Xerox Corporation Transducers with constraints model for print scheduling
US6067575A (en) 1995-12-08 2000-05-23 Sun Microsystems, Inc. System and method for generating trusted, architecture specific, compiled versions of architecture neutral programs
US5815718A (en) * 1996-05-30 1998-09-29 Sun Microsystems, Inc. Method and system for loading classes in read-only memory
US5729790A (en) 1997-01-21 1998-03-17 Xerox Corporation Operation scheduling system for a digital printing apparatus using a tree of possible schedules
US5812273A (en) 1997-01-21 1998-09-22 Xerox Corporation Operation scheduling system for a digital printing apparatus, using a table of executed operations to revise a schedule in real time
US5935249A (en) * 1997-02-26 1999-08-10 Sun Microsystems, Inc. Mechanism for embedding network based control systems in a local network interface device
US6092147A (en) * 1997-04-15 2000-07-18 Sun Microsystems, Inc. Virtual machine with securely distributed bytecode verification
US5983348A (en) * 1997-09-10 1999-11-09 Trend Micro Incorporated Computer network malicious code scanner
US6061721A (en) * 1997-10-06 2000-05-09 Sun Microsystems, Inc. Bean-based management system
US5966702A (en) * 1997-10-31 1999-10-12 Sun Microsystems, Inc. Method and apparatus for pre-processing and packaging class files
US6219787B1 (en) * 1997-12-22 2001-04-17 Texas Instruments Incorporated Method and apparatus for extending security model to native code
US6178504B1 (en) * 1998-03-12 2001-01-23 Cheyenne Property Trust C/O Data Securities International, Inc. Host system elements for an international cryptography framework
US6092202A (en) * 1998-05-22 2000-07-18 N*Able Technologies, Inc. Method and system for secure transactions in a computer system
US6237135B1 (en) * 1998-06-18 2001-05-22 Borland Software Corporation Development system with visual design tools for creating and maintaining Java Beans components
US6430569B1 (en) * 1998-08-14 2002-08-06 Sun Microsystems, Inc. Methods and apparatus for type safe, lazy, user-defined class loading
US6314566B1 (en) * 1998-09-29 2001-11-06 Apple Computer, Inc. Method and apparatus for “Just-in-Time” dynamic loading and unloading of computer software libraries
US6321333B1 (en) * 1998-10-14 2001-11-20 Wave Systems Corporation Efficient digital certificate processing in a data processing system
US6601114B1 (en) * 1999-05-27 2003-07-29 Sun Microsystems, Inc. Fully lazy linking with module-by-module verification
US6618769B1 (en) * 1999-05-27 2003-09-09 Sun Microsystems, Inc. Module-by-module verification
US6618855B1 (en) * 1999-05-27 2003-09-09 Sun Microsystems, Inc. Caching untrusted modules for module-by-module verification
US6708276B1 (en) * 1999-08-03 2004-03-16 International Business Machines Corporation Architecture for denied permissions in Java

Also Published As

Publication number Publication date
US7051343B2 (en) 2006-05-23
CN1292527A (zh) 2001-04-25
EP1056003B1 (en) 2013-08-21
AU3643500A (en) 2000-11-30
CA2309769A1 (en) 2000-11-27
AU771028B2 (en) 2004-03-11
US20040045019A1 (en) 2004-03-04
CN1224903C (zh) 2005-10-26
US6618769B1 (en) 2003-09-09
EP1056003A3 (en) 2001-12-12
EP1056003A2 (en) 2000-11-29

Similar Documents

Publication Publication Date Title
AU771028B2 (en) Module-by-module verification
US6601114B1 (en) Fully lazy linking with module-by-module verification
US6618855B1 (en) Caching untrusted modules for module-by-module verification
US7231635B2 (en) Remote incremental program verification using API definitions
US6986132B1 (en) Remote incremental program binary compatibility verification using API definitions
US7614044B2 (en) Attempting runtime retranslation of unresolvable code
EP1417571A2 (en) Method for remote incremental program verification and installation on resource-constrained devices
US6763397B1 (en) Fully lazy linking
US6766521B1 (en) Dataflow algorithm for symbolic computation of lowest upper bound type
WO2002025428A2 (en) Method for remote incremental program verification and installation on resource-constrained devices
AU2004200283B2 (en) Module-by-module verification
Tozawa et al. Formalization and analysis of class loading in Java
AU2001289078B2 (en) Method for remote incremental program verification and installation on resource-constrained devices
Ferreira THE JEWEL VIRTUAL MACHINE
AU2001289078A1 (en) Method for remote incremental program verification and installation on resource-constrained devices

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050426

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20050722

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20050727

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20051024

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20051124

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20060223

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20060301

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060322

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20060614