Integer Java Virtual Machine

Slides:



Advertisements
Similar presentations
アルゴリズムとプログラミン グ (Algorithms and Programming) 第6回:クラスとインスタンス クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い 方 クラスの宣言 アクセス修飾子 インスタンスの生成.
Advertisements

1 B10 CPU を作る 1 日目 解説 TA 高田正法
独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
記 憶 管 理(1) オペレーティングシステム 第9回.
JavaによるCAI学習ソフトウェアの開発
Javaのための暗黙的に型定義される構造体
データ構造とアルゴリズム 第10回 mallocとfree
アルゴリズムとデータ構造1 2007年6月12日
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
計算機システムⅡ 命令セットアーキテクチャ
Java2セキュリティ, クラスローダー,ベリファイア
  【事例演習6】  数式インタプリタ      解 説     “インタプリタの基本的な仕組み”.
プログラムはなぜ動くのか.
の まとめ 2007/04/02 (Mon) / d;id:hzkr
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
2016年度 プログラミングⅠ ~ 内部構造と動作の仕組み(1) ~.
アスペクト指向プログラミングを用いたIDSオフロード
Flyingware : バイトコード変換による 安全なエージェントの実行
進捗 Javaバイトコード変換による 細粒度CPU資源管理
実行時のメモリ構造(2) Javaスタック内動作他
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
プログラミング言語入門 手続き型言語としてのJava
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
第9章 例外処理,パッケージ 9.1 例外処理 9.2 ガーベッジコレクション.
暗黙的に型付けされる構造体の Java言語への導入
コンパイラの解析 (3) クラスとインスタンスの初期化.
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」 第1週目 アセンブリ言語講座
プログラミング 4 記憶の割り付け.
シーケンス図を用いて実行履歴を可視化するデバッグ環境の試作
プログラミング言語入門.
Java Bytecode Modification and Applet Security
クラスファイルの構造解析(2) 2003年6月23日 海谷 治彦.
TA 高田正法 B10 CPUを作る 3日目 SPIMの改造 TA 高田正法
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
コードクローンの動作を比較するためのコードクローン周辺コードの解析
Javaバイトコードの 動的依存解析情報を用いた スライシングシステムの実現
バイトコードを単位とするJavaスライスシステムの試作
C言語を用いたマシン非依存な JITコンパイラ作成フレームワーク
new Calc(7,3).divInt()実行前
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
Javaバーチャルマシンを利用した 動的依存関係解析手法の提案
JAVAバイトコードにおける データ依存解析手法の提案と実装
アルゴリズムとプログラミング (Algorithms and Programming)
マイグレーションを支援する分散集合オブジェクト
2017年度 プログラミングⅠ ~ 内部構造と動作の仕組み(1) ~.
同期処理のモジュール化を 可能にする アスペクト指向言語
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
「マイグレーションを支援する分散集合オブジェクト」
サブゼミ第7回 実装編① オブジェクト型とキャスト.
コンパイラ 2012年11月1日
計算機アーキテクチャ1 (計算機構成論(再)) 第二回 命令の種類と形式
アルゴリズムとデータ構造1 2009年6月15日
第5回 プログラミングⅡ 第5回
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
JAVA入門⑥ クラスとインスタンス.
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
コンパイラ 2012年10月11日
アルゴリズムとデータ構造 2010年6月17日
2014年度 プログラミングⅠ ~ 内部構造と動作の仕組み(1) ~.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
データ構造と アルゴリズムI 第三回 知能情報学部 新田直也.
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
6.5 最終コード生成 (1)コードの形式 ①絶対2進コード(AB : absolute binary) 命令後のオペランドが絶対番地指定。
Presentation transcript:

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

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

それぞれのプラットフォームに対応している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

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

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

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

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

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

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つの値をオペランド・スタックからポップし、 それらが等しいならば分岐する 一つ一つの命令の説明は省略したいと思います。

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 それらの差をプッシュする

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

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

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

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

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

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

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 (オペコードが残っているか?) ;

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

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

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

フレーム (例)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

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

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

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

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