j ava
Download
Skip this Video
Download Presentation
J AVA バイトコードにおける データ依存解析手法の提案と実装

Loading in 2 Seconds...

play fullscreen
1 / 35

JAVA - PowerPoint PPT Presentation


  • 72 Views
  • Uploaded on

J AVA バイトコードにおける データ依存解析手法の提案と実装. 誉田 謙二 † 大畑 文明 † 井上 克郎 † ‡ † 大阪大学 大学院基礎工学研究科 ‡ 奈良先端科学技術大学院大学 情報科学研究科. 発表内容. 背景 J AVA バイトコードにおけるデータ依存 データ依存解析手法の提案 提案手法の実現 まとめと今後の課題. 背景(1/2). プログラム文間の依存関係 制御依存関係 条件節~述部(述部の実行が条件節に依存)  データ依存関係 同一変数の定義~参照(データフローによる依存) 依存関係解析の利用 プログラム理解 プログラムデバッグ

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'JAVA ' - chick


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
j ava

JAVAバイトコードにおけるデータ依存解析手法の提案と実装JAVAバイトコードにおけるデータ依存解析手法の提案と実装

誉田 謙二†

大畑 文明†

井上 克郎†‡

†大阪大学 大学院基礎工学研究科

‡奈良先端科学技術大学院大学 情報科学研究科

slide2
発表内容
  • 背景
  • JAVAバイトコードにおけるデータ依存
  • データ依存解析手法の提案
  • 提案手法の実現
  • まとめと今後の課題

ソフトウェア科学会全国大会

slide3
背景(1/2)
  • プログラム文間の依存関係
    • 制御依存関係
      • 条件節~述部(述部の実行が条件節に依存) 
    • データ依存関係
      • 同一変数の定義~参照(データフローによる依存)
  • 依存関係解析の利用
    • プログラム理解
    • プログラムデバッグ
    • プログラム保守

a:=5;

b:=3;

if b>0 then

c:=a

else

d:=b;

ソフトウェア科学会全国大会

slide4
背景(2/2)
  • 既に提案されている依存関係解析手法
    • 高級言語(C, C++, etc…)のソースコード
    • 3番地コード

を対象

  • JAVAバイトコードのような、スタックの存在が前提となる言語に対するデータ依存解析手法は提案されていない

ソフトウェア科学会全国大会

j ava1
JAVAバイトコードにおけるデータ依存
  • クラスファイル
  • JAVAバイトコード
  • JAVAバイトコードにおけるデータ依存関係
    • ローカル変数に関するデータ依存
    • フィールドに関するデータ依存
    • スタックに関するデータ依存

ソフトウェア科学会全国大会

slide6

class A

class A

JAVAコンパイラ

class B

class B

クラスファイル
  • ソースプログラムはJAVAコンパイラにより、クラスファイルに変換される
  • クラスファイル
    • クラス単位に生成
    • JAVAバイトコードによる命令列などにより構成 

ソフトウェア科学会全国大会

j ava2
JAVAバイトコード
  • クラスファイルを構成する命令列
  • JAVAバーチャルマシン(JVM)への入力
  • 約200種類の命令で構成される

ソフトウェア科学会全国大会

j ava3

0

23

1

23

4

スタック

ローカル変数

0

1

23

27

スタック

ローカル変数

JAVAバイトコードの実行例

0

iconst_4

1

23

4

スタック

ローカル変数

iload_1

iadd

ソフトウェア科学会全国大会

j ava4
JAVAバイトコードにおけるデータ依存関係
  • データの格納
    • ローカル変数 / フィールド
    • スタック
      • ある値に対応する記憶領域が命令により変化する(push / pop演算の存在)
        • iconst_n
        • iload_n
        • iadd

etc…

      • 命令に応じてその位置を追跡する必要がある

ソフトウェア科学会全国大会

slide10

0

1

スタックに関するデータ依存
  • スタック上のある値v が参照されるとき、v を定義した命令s から参照する命令t にスタックに関するデータ依存関係が存在する

s : iconst_v , t : istore_1

iconst_v

v

ローカル変数

スタック

istore_1

ソフトウェア科学会全国大会

slide11

0

1

スタックに関するデータ依存
  • スタック上のある値v が参照されるとき、v を定義した命令s から参照する命令t にスタックに関するデータ依存関係が存在する

s : iconst_v , t : istore_1

iconst_v

v

ローカル変数

スタック

istore_1

ソフトウェア科学会全国大会

slide12
スタックに関するデータ依存
  • スタック上のある値v が参照されるとき、v を定義した命令s から参照する命令t にスタックに関するデータ依存関係が存在する

s : iconst_v , t : istore_1

iconst_v

0

1

v

ローカル変数

スタック

istore_1

ソフトウェア科学会全国大会

slide13
ローカル変数に関するデータ依存
  • あるローカル変数x の値v が参照されるとき、v を定義した命令s から参照する命令t にx に関するデータ依存関係が存在する

x : 1, s : istore_1, t : iload_1

v

0

istore_1

1

v

スタック

ローカル変数

0

v

iload_1

1

v

スタック

ローカル変数

ソフトウェア科学会全国大会

slide14

v

x

v

フィールドに関するデータ依存
  • あるフィールドx の値v が参照されるとき、v を定義した命令s から参照する命令t にx に関するデータ依存関係が存在する

s : putfield Point/x I, t : getfield Point/x I

putfield Point/x I

x

v

フィールド

スタック

v

getfield Point/x I

フィールド

スタック

ソフトウェア科学会全国大会

slide15
データ依存解析手法の提案
  • 前提
  • 解析アルゴリズム
    • 制御フローグラフの構築
    • データ依存関係の抽出
      • 解析フレームの準備
      • データ依存関係の抽出

ソフトウェア科学会全国大会

slide16
前提
  • 提案するアルゴリズム
    • 静的解析(存在しうるすべての経路に対して解析)
    • 単一スレッドを対象
  • 入力: JAVAバイトコード
  • 出力: データ依存関係を表すグラフ
    • 節点: JAVAバイトコードの命令
    • 辺: 命令間に起こりうる制御の移動、

命令間に存在するデータ依存関係

ソフトウェア科学会全国大会

slide17
解析アルゴリズム

Step1:制御フローグラフの構築

  • 制御フローグラフ

  (Control Flow Graph,CFG)

    • 節点:JAVAバイトコードの命令
    • 辺:命令間に起こりうる制御の移動

iload_0

iconst_3

if_icmplt L3

L3 iconst_4

iconst_3

goto L5

L5 istore_0

iload_0

ireturn

ソフトウェア科学会全国大会

slide18
解析アルゴリズム

Step1:制御フローグラフの構築

  • 制御フローグラフ

  (Control Flow Graph,CFG)

    • 節点:JAVAバイトコードの命令
    • 辺:命令間に起こりうる制御の移動

iload_0

iconst_3

if_icmplt L3

L3 iconst_4

iconst_3

goto L5

L5 istore_0

Step2:データ依存関係の抽出

  • CFGにデータ依存辺を追加

iload_0

ireturn

ソフトウェア科学会全国大会

step1

iload_0

iconst_3

if_icmplt L3

L3 iconst_4

iconst_3

goto L5

L5 istore_0

iload_0

ireturn

Step1: 制御フローグラフの構築

Phase1:

命令を抽出し、CFG節点を作成

Phase2: 各命令sについて

  • 命令sの次に実行される可能性のある命令tを求める
  • s~t間にCFG辺を引く

ソフトウェア科学会全国大会

step2 1 3
Step2:データ依存関係の抽出 (1/3)

Phase1:解析フレームの準備

  • 解析フレーム
    • メソッド内で各ローカル変数・フィー

ルド・スタック上の値がどの命令で

定義されたかを保持

    • 変数名とその値を最後に定義した

命令の番号の対の集合

ソフトウェア科学会全国大会

step2 2 3
Step2:データ依存関係の抽出 (2/3)
  • 各メソッドの処理に必要なスタックサイズ・ローカル変数の個数はコンパイラにより計算される
  • 解析フレームの例

ソフトウェア科学会全国大会

step2 3 3
Step2:データ依存関係の抽出 (3/3)

Phase2: データ依存関係の抽出

  • CFG辺をたどりながら、各節点を解析
    • 各節点が表す命令に応じて、解析フレームを更新
      • 逐次実行
      • 分岐
    • データ依存関係が抽出された場合、CFGにデータ依存辺を追加
    • 更新された解析フレームを用い、この節点を始点とするすべてのCFG辺をたどり次の節点に移動し、解析を続ける

ソフトウェア科学会全国大会

slide23
逐次実行
  • 解析フレームの更新 / データ依存辺の追加

1: iconst_3

3

ローカル変数

スタック

2: istore_1

ソフトウェア科学会全国大会

slide24
逐次実行
  • 解析フレームの更新 / データ依存辺の追加

1: iconst_3

3

ローカル変数

スタック

2: istore_1

ソフトウェア科学会全国大会

slide25
逐次実行
  • 解析フレームの更新 / データ依存辺の追加

1: iconst_3

3

ローカル変数

スタック

2: istore_1

ソフトウェア科学会全国大会

slide26
逐次実行
  • 解析フレームの更新 / データ依存辺の追加

1: iconst_3

ローカル変数

スタック

2: istore_1

ソフトウェア科学会全国大会

slide27
逐次実行
  • 解析フレームの更新 / データ依存辺の追加

1: iconst_3

ローカル変数

スタック

2: istore_1

ソフトウェア科学会全国大会

slide28
分岐
  • 解析フレームの更新 / データ依存辺の追加

5: iconst_3

6: iload_0

ローカル変数

スタック

7: if_icmplt L4

ソフトウェア科学会全国大会

slide29
分岐
  • 解析フレームの更新 / データ依存辺の追加

5: iconst_3

6: iload_0

ローカル変数

スタック

7: if_icmplt L4

ソフトウェア科学会全国大会

slide30
分岐
  • 解析フレームの更新 / データ依存辺の追加
  • 解析フレームの複製

5: iconst_3

6: iload_0

ローカル変数

スタック

7: if_icmplt L4

ソフトウェア科学会全国大会

slide31
繰り返し(1/2)
  • 繰り返しの存在による解析のループ
    • CFGにループが存在する場合、解析がループに陥る
    • 等価な解析が無限に繰り返され、

解析が終了しない

等価な解析 ⇔

等価な解析フレームによる解析

L1 iconst_2

goto L1

iload_0

istore_0

if_icmplt L3

ineg

L3 iload_0

iload_0

iconst_3

iadd

ireturn

ソフトウェア科学会全国大会

slide32
繰り返し(2/2)
  • 等価な解析フレームによる解析を回避
    • CFGの合流節点に、処理開始時の解析フレームの履歴を保持させる
    • 等価な解析フレームが既に履歴に含まれている場合、解析を停止する

iload_0

・・・

ソフトウェア科学会全国大会

slide33
提案手法の実現 (1/2)
  • JAVAバイトコードをJasmin形式に変換し、解析
  • 構文解析、CFG構築、データ依存関係解析

データ依存解析ツール

JAVAバイトコード

データ依存辺を

追加したCFG

CFG

1000

101101

0010111

1011110

1101001

構文解析、

CFG構築

データ依存

関係解析

Jasmin

Translator

JAVAバイトコード

(Jasmin形式)

ソフトウェア科学会全国大会

slide34
提案手法の実現 (2/2)

L3 iconst_2

L3

L5

iconst_2

iload_0

if_icmple L5

iload_0

ineg

istore_0

goto L3

iload_0

ireturn

goto L3

データ依存

解析ツール

iload_0

istore_0

if_icmplt L5

ineg

L5 iload_0

iload_0

ireturn

ローカル変数に関するデータ依存辺

スタックに関するデータ依存辺

制御依存辺

ソフトウェア科学会全国大会

slide35
まとめと今後の課題
  • まとめ
    • 本研究では、JAVAバイトコードに対するデータ依存関係を定義し、その抽出手法を提案した
    • また、提案手法を採用したツールの試作を行い、その動作を確認した
  • 今後の課題
    • スレッドへの対応
    • 解析の効率化
    • JAVAバイトコードに対するプログラムスライスの抽出

ソフトウェア科学会全国大会

ad