Presentation is loading. Please wait.

Presentation is loading. Please wait.

Integer Java Virtual Machine

Similar presentations


Presentation on theme: "Integer Java Virtual Machine"— Presentation transcript:

1 Integer Java Virtual Machine
エミュレータ試作 作成者:森 考史

2 目次 1.Javaプログラムの実行 2.研究の目的と結果 3.IJVM(Integer Java Virtual Machine)
6.まとめ

3 それぞれのプラットフォームに対応しているJVMさえあれば様々なプラットフォーム上でJavaプログラムは実行できます。
コンパイル Classファイル Java VM Java VM Java VM Java VM Java VM Java VM MacOS Windows Linux Free BSD Solaris Solaris JVM上で実行されます。 それぞれのプラットフォームに対応しているJVMさえあれば様々なプラットフォーム上でJavaプログラムは実行できます。 Java言語のプラットフォーム非依存を実現するのがJVM(Java Virtual Machine)というわけです。  Power PC x86 SPARC

4 JVM (Java Virtual Machine)
・ 命令セットが用意され、命令の実行時に様々な記憶領域の操作が行われる。 Javaプログラム Classファイル JVM Classファイルを 読み込み、 そこで指定された 操作を正しく 実行する。 Class xx { public void xxx { ・・・・    ・・・・ } CA FE BA BE E 2D 0A 00 0D A 1E 0A 00 A 22 0A 00. ・・・・・・・・・・・・ ・Classファイルフォーマットに従ったclassファイルを読み込み、JVMの命令を 解釈し実行する。 ・ 実在する計算機のように、命令セットが用意され、命令の実行時に様々な記憶 領域の操作が行われる。

5 目次 1. Javaプログラムの実行 2.研究の目的と結果 3.IJVM(Integer Java Virtual Machine)
6.まとめ

6 Javaの実行環境であるJVM(Java Virtual Machine)
研究の目的と結果 Javaの実行環境であるJVM(Java Virtual Machine) をコストを少なく効果的に高速化させる ための材料を探すこと 本研究の成果物 JVMのエミュレータを作る足がかりとして、 JVMのサブセットである Integer Java Virtual Machine のエミュレータを作成した。 様々なアプリケーションにおいて 1.JVMの各命令の使用頻度を取り、アプリケーション   の性格によって差異が生まれるかどうかを調査する。 2. JVMの各命令が使用される順序や組み合わせに   規則性がないかを調査する。 JVMの各命令の使用頻度や使用 順序を調べることができるJVMの エミュレータを作る 具体的には次の二つの調査をすることです。 まず一つ目は、・・・もう一つは、・・・ これらの調査を行うことによってJVMの各命令の使用頻度に偏りがあった場合には、 使用頻度の高い命令を高速化すれば少ないコストでのパフォーマンス向上が期待できます。 しかし、これらの調査を行うには、・・・ そして、本研究で私がしたことは、・・・

7 目次 1. Javaプログラムの実行 2.研究の目的と結果 3.IJVM(Integer Java Virtual Machine)
6.まとめ

8 Integer Java Virtual Machine
およびインタープリタから成るもの。 命令 : 20種類 Structured Computer Organization (Tanenbaum, 1998) のセクション4で導入されたJavaバイトコードのサブセットのためのアセンブラおよびインタープリタからなるもの。 Mic1というシミュレータ上で動かすJVM JVMのエミュレータを完成させることができずに中途半端に終わると思ったので 少数であっても使われているものを作ったほうがいいと思いIJVMを作りました。 情報が少なくてijvmの使い方や、ijvmに対応したClassファイルの作り方などわかりませんでした。

9 IJVMの命令セット オペコード ニーモニック 操作内容 0x10 BIPUSH byte_exp
DUP オペランド・スタックの先頭にある値がコピーされ、オペランド・スタックへとプッシュされる 0xA7 GOTO label 無条件分岐を行う 0x60 IADD オペランド・スタックから2つの値をポップして、 それらの合計をプッシュする 0x7E IAND それらの論理積をプッシュする 0x99 IFEQ label 値をオペランド・スタックからポップし、それが 0なら分岐する 0x9B IFLT label 0未満なら分岐する 0x9F IF_ICMPEQ label 2つの値をオペランド・スタックからポップし、 それらが等しいならば分岐する 一つ一つの命令の説明は省略したいと思います。

10 IJVMの命令セット オペコード ニーモニック 操作内容 0x84 IINC varnum_exp, byte_exp
vamum_expで示されたローカル変数に、byte_expをintへ符号拡張したものを加算する 0x15 ILOAD vamum_exp vamum_expで示されたローカル変数を オペランド・スタックへとプッシュする 0xB6 INVOKEVIRTUAL method クラスに基づくディスパッチを行い、 インスタンス・メソッドを起動する 0x80 IOR オペランド・スタックから2つの値をポップして、 それらの論理和をプッシュする 0xAC IRETURN メソッドから int をリターンする 0x36 ISTORE varmum_exp 値をオペランド・スタックからポップし、それをvarmum_expで示すローカル変数にセットする 0x64 ISUB それらの差をプッシュする

11 IJVMの命令セット オペコード ニーモニック 操作内容 0x13 LDC_W constant_exp
NOP 何もしない 0x57 POP オペランド・スタックの先頭にある値をポップする 0x5F SWAP オペランド・スタックの先頭にある2つの値を交換する 0xC4 WIDE 補助バイトを使用したローカル変数インデックスの拡張をする

12 目次 1.Javaプログラムの実行 2.研究の目的と結果 3.IJVM (Integer Java Virtual Machine)
(1)Classファイル 4.JVMについて (2)JVMの命令 5.IJVMエミュレータの概要 JVMについて詳しく説明するために3つの項目にそって話したいと思います。 初めにClassファイルについて話します。 (3)JVMの構造 6.まとめ

13 Classファイル Class ファイル あるプログラムの Classファイルの一部 CA FE BA BE 00 00 00 2E 00
マジックナンバー あるプログラムの Classファイルの一部 マイナーバージョン CA FE BA BE E 00 2D 0A 00 0D C 86 A D C 00 1E 0A C F 0A A C 22 0A C 0A 00 08 A D 63 6F 6E E F 70 6F 6F 6C B 4C 6A 61 F 6C E F 53 E B 3C 69 6E E F 64 F 4C E E メジャーバージョン コンスタントプール アクセスフラグ this_class super_class ClassファイルはClassファイルフォーマットという、ある決まった形式に従ったバイナリファイル。8ビットのバイト・ストリームからなっている。 各Classファイルには、クラスやインターフェースの定義が一つ保持されている。 通常はJava言語で書かれたコードをバイトコードコンパイラで生成する。 しかし、生成方法について決められているわけではない。 本研究の最終目的であるJVMの高速化の可能性の調査では JVMの命令に注目しているのでJVMの命令が記述してあるメソッドの記述部分をピックアップしたいと思います。 インターフェース フィールド メソッド 属性リスト

14 Classファイル中のメソッド情報記述部分
アクセスフラグ(2バイト) メソッド名CPエントリ番号 (2バイト) ディスクプリタCPエント番号 属性リスト メソッド1 メソッドの個数 (2バイト) メソッド1 メソッドn メソッドの属性の種類 ・Code属性 ・Exceptions属性 ・Deprecated属性 ・Synthetic属性 そのクラス中に定義されているメソッドの個数が記述されていて、その後にそれぞれのメソッドの記述が続きます。 今度はある一つのメソッドの記述部分をピックアップします。 まずアクセス許可とメソッド属性を記述するために用いるフラグ メソッド名の記述 型の記述 必要な分だけこのメソッドに関連する属性を記述しています。ここでの属性には4種類あり、 その中のCode属性にだけJVMの命令は記述されています。 JVMの命令が記述されて いるのはCode属性だけ

15 目次 1. Javaプログラムの実行 2.研究の目的と結果 3.IJVM(Integer Java Virtual Machine)
(1)Classファイル (2)JVMの命令 (3)JVMの構造 JVMの命令はClassファイルにはどのように記述されているかを話したいと思います。 5.IJVMエミュレータの概要 6.まとめ

16 JVMの命令 オペコード : 実行する操作を定義したもの(1バイト) オペランド : 操作が用いるデータ(引数) オペコードは約200種類
オペコード : 実行する操作を定義したもの(1バイト) オペランド : 操作が用いるデータ(引数) オペコードは約200種類 オペコード オペコード オペランドを 持たない命令 オペランド1 オペランド を持つ 命令 オペランド2 実行する操作を定義した1バイトのオペコードに続いて、引数、あるいは操作が用いるデータと なるオペランドをゼロ個以上続けたものから構成されている。 ・ オペコードは約200種類 ・ 命令の多くはオペランドを持たず、オペコード  のみで構成されている。 ・・・ Javaバイトコード : JVMの命令の集合によって記述されたもの

17 21 B1 iload 01 return Javaバイトコード の読み込み例 01 21 命令 オペコード オペランド iload 1
あるClassファイルのJavaバイトコード (16進表記) 命令 引数 命令 21 01 B1 iload 01 return do {    { } JavaバイトコードがJVMをどのように読み込むかを例で示したいと思います。 例外を無視した場合、Java仮想マシン・インタプリタの内部ループは実質的に下のdo while文のようになります。 オペコードの取得 ; if (オペランドが必要か?) オペランドの取得 ; while (オペコードが残っているか?) ;

18 目次 1. Javaプログラムの実行 2.研究の目的と結果 3.IJVM(Integer Java Virtual Machine)
(1)Classファイル (2)JVMの命令 (3) JVMの構造 JVMの命令はClassファイルにはどのように記述されているかを話したいと思います。 5.IJVMエミュレータの概要 6.まとめ

19 JVM JVMの構造 メソッドエリア ヒープ Classファイル の取得先 システム クラスローダ ユーザ クラス インスタンス ス レ ッ
CLASSPATH インターネット Javaスタック フレーム オペランド スタック ローカル変数 フレーム オペランド スタック ローカル変数 プログラム カウンタ それぞれクラス毎の構造を格納するえリア クラスインスタンスや配列の割り当てが行われるヒープ Javaスタックは一つのスレッドに対して一つ生成される。ローカル変数や中間的な結果を保持したりするもの。 Javaスタックの要素はフレームと呼ばれるものです。フレームはメソッドが起動されるたびに生成される。 Javaスタックとフレームについては次に詳しく説明したいと思います。 Javaスタック プログラム カウンタ フレーム オペランド スタック ローカル変数 データサーバ

20 スレッドA Javaスタック あるJavaのスレッド(スレッドAとする)がmethod1 というメソッドを実行した場合 フレーム3
フレーム1 フレーム2 method1() { method2(); } method2() { method3(); } 先頭のフレームが作業中のフレーム

21 フレーム (例)method1の 21 01 36 02 iload 1 istore 2 ローカル変数配列 オペランドスタック
バイトコードのある部分 命令 命令 21 01 36 02 iload 1 istore 2 フレーム ローカル変数配列 オペランドスタック method1 a this a b 1 ローカル変数と呼ばれる変数が保持されている。 インデックスによってアドレス付けされている。 JVM命令の操作が扱う引数(オペランド)を積み上げておくもの。 フレームの生成時では空になっている。 JVMには定数、およびローカル変数やフィールドの 値をオペランドスタック上にロードする命令などが 用意されている。 2 a

22 目次 1. Javaプログラムの実行 2.研究の目的と結果 3.IJVM(Integer Java Virtual Machine)
(1)Classファイル (2)JVMの命令 実際に私が作ったIJVMの説明をしたいと思います。 (3) JVMの構造 5.IJVMエミュレータの概要 6.まとめ

23 5.IJVMエミュレータの概要 Classファイルを読み込み様々な情報を格納するプログラム 保存しておく情報 定数 フィールド
インターフェース メソッド 配列に格納 メソッドの情報を受け取りJavaバイトコードを実行するプログラム フレームを可視化するプログラム は最終目的であるJVMの命令の使用頻度および使用順序の調査には関係ないものなのですが、 IJVMの命令が正しく動作しているか分かりやすく見るために作成しました。 フレームを可視化するプログラム

24 目次 1.Javaプログラムの実行 2.研究の目的と結果 3.JVMについて
4.IJVM(Integer Java Virtual Machine) 5.IJVMエミュレータの概要 6.まとめ

25 IJVMには存在しないJVMの命令を作成
6.まとめ この研究で 作成したもの Integer Java Virtual Machine (命令20種類)のエミュレータ IJVMには存在しないJVMの命令を作成 Java Virtual Machine (命令約200種類)のエミュレータを作成 JVMの高速化のために、 様々なアプリケーションの実行時におけるJVMの 各命令の使用頻度及び使用順序の調査を行う。


Download ppt "Integer Java Virtual Machine"

Similar presentations


Ads by Google