JP2014010661A - 分岐アドレス管理プログラム、方法、及び装置 - Google Patents

分岐アドレス管理プログラム、方法、及び装置 Download PDF

Info

Publication number
JP2014010661A
JP2014010661A JP2012147262A JP2012147262A JP2014010661A JP 2014010661 A JP2014010661 A JP 2014010661A JP 2012147262 A JP2012147262 A JP 2012147262A JP 2012147262 A JP2012147262 A JP 2012147262A JP 2014010661 A JP2014010661 A JP 2014010661A
Authority
JP
Japan
Prior art keywords
instruction
branch
routine
branch destination
destination
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.)
Granted
Application number
JP2012147262A
Other languages
English (en)
Other versions
JP5987501B2 (ja
Inventor
Masafumi Hashiguchi
雅史 橋口
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2012147262A priority Critical patent/JP5987501B2/ja
Priority to US13/909,462 priority patent/US9417872B2/en
Publication of JP2014010661A publication Critical patent/JP2014010661A/ja
Application granted granted Critical
Publication of JP5987501B2 publication Critical patent/JP5987501B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional branch instructions
    • 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/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • G06F9/4486Formation of subprogram jump address

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)
  • Executing Machine-Instructions (AREA)

Abstract

【課題】計算機ソフトウエアの分岐アドレスを管理し、メモリ領域の有効利用を図る。
【解決手段】相対アドレスが用いられる命令セットアーキテクチャを採用するルーチン1060が、メモリ空間上を移動した場合に、分岐命令の分岐先ルーチンを特定する情報と、新たなジャンプ命令であって、前記新たなジャンプ命令のジャンプ先として前記分岐先ルーチンへの相対アドレスが設定される、新たなジャンプ命令とを、対応付けてメモリ上の分岐先管理エントリ1053に生成し、前記分岐命令の分岐先相対アドレスとして、前記分岐命令の分岐先ルーチンを特定する情報に対応する前記新たなジャンプ命令の位置への相対アドレスを設定し、前記分岐先ルーチンが移動した場合、前記分岐先管理エントリを参照して、前記分岐先ルーチンを特定する情報に対応する前記新たなジャンプ命令のジャンプ先を、前記分岐先ルーチンの移動後の位置への相対アドレスに修正する。
【選択図】図10

Description

本発明は、計算機ソフトウエアの分岐アドレスを管理するプログラム、方法、及び装置に関する。
計算機システムにおけるプログラムは、機械語で記述されたルーチンをプロセッサが処理することで動作する(本明細書では、機械語で記述された1つ以上のコードのことを「ルーチン」と記す)。
ルーチンに含まれる命令は、プロセッサによって1つずつ順に処理される。しかし、ほとんどのプログラムのルーチンは、次に処理する命令を、条件に応じて直後の命令以外に変更したり、あるいは別のルーチンの命令に変更したりする命令を含む。このような次に処理する命令のアドレスを変更する命令のことを、一般的に「分岐命令」と呼ぶ。
分岐命令によって処理の順序が変わる例を図1に示す。分岐命令の名称や命令のコードはプロセッサによって様々である。一般的なプロセッサの命令セットには、分岐命令としてジャンプ命令とコール・リターン命令が存在する(コール・リターン命令は、コール命令とリターン命令に分けられる)。本明細書において、分岐命令とは、ジャンプ命令、コール/リターン命令等を総称する用語として用いる。
図1に示すように、命令A2がジャンプ命令である場合、命令A2の後に処理される命令を、直後の命令A3ではなく、命令A4とすることができる。また、命令A4が、ルーチンBをコールするコール命令である場合には、命令A4の実行後に、処理はルーチンBの命令B1に移る。その後、ルーチンBの命令B2ないしB4が順に処理される。そして、命令B5がリターン命令である場合には、ルーチンAの命令A4の直後の命令A5に処理が戻る。コール命令はリターン命令と対で用いられる。リターン命令を実行した際に、戻るアドレスを保持しておくために、スタックポインタの操作などが伴う。一般的には、同じルーチン内で分岐する目的にはジャンプ命令、別のルーチン内の命令に分岐する目的にはコール・リターン命令が用いられることが多い。
ルーチンに含まれる個々の命令は、主に命令の種類を示す「オペコード」と命令の演算対象となる値を示す「オペランド」で構成される。ジャンプ命令とコール命令のオペランドには、分岐先の命令の存在するアドレスが格納される。多くの場合、そのアドレスは分岐元の命令からの相対アドレスで表現される。
なお、本明細書で用いるアドレスは、仮想アドレスであっても、実アドレスであってもよい。また、本明細書では、Java(登録商標)を例として用いる場合があるが、本発明の対象がJavaに限定されるものではない点に留意すべきである。
Javaで書かれたプログラムは、バイトコードに変換される。バイトコードはJavaVM(Java仮想マシン)で実行される。そのため、Javaで書かれたプログラムは、JavaVMをサポートしているコンピュータならばCPUを問わず動作する。したがって、Javaは、マルチプラットフォームで動作する利点を持つ。一般的なJava VMは、「バイトコード」をプロセッサ固有の機械語に逐次変換して、プロセッサにその機械語を処理させる。しかし、バイトコードの逐次変換は、その処理コストが高くなる場合が多い。
そこで、プログラム実行中にバイトコードをメソッド単位で機械語のルーチンに変換する技術が存在する。そのような技術は、一般的に「JIT(Just in time)コンパイラ」と呼ばれる。
図2は、一般的なJITコンパイラの処理を示している。ステップ202において、JITコンパイラは、コンパイル対象のメソッドのバイトコードを、ホストマシンに依存しない中間コードに変換する。ステップ204において、JITコンパイラは、中間コードをホストマシンの機械語ルーチンに変換する。ステップ206において、機械語ルーチンを、メモリ上の機械語ルーチン領域に書き込む。その結果、コンパイルされたメソッドはすべてプロセッサ固有の機械語ルーチンで表現されるため、プロセッサが直接その機械語ルーチンを処理できるようになる。以降の説明では、JITコンパイラが生成する機械語ルーチンを格納するメモリ領域を「ルーチン領域」と記す。
プログラムの処理が進むと、ルーチンが不要になることがあるため、ルーチン領域の内容は時間とともに変化する。すなわち、ルーチンの数やメモリの使用量は常に変動する。不要になったルーチンは、ガーベジコレクションを実行することにより、他のルーチンのために開放される。しかしながら、単純にガーベジコレクションを実行した場合に特に問題となるのが、フラグメントの発生である。
図3は、メモリ上のフラグメントの発生を示している。それぞれのメソッドのルーチンは、ほとんどの場合、分岐命令を含んでいる。その分岐先を示すオペランドが相対アドレスの場合、分岐命令を含むルーチンを単純に移動すると分岐先を誤ることになる。また、分岐先が移動した場合も同様である。そのため、不要になったルーチンが増えてルーチン領域に空きができても、ルーチンを移動してメモリ領域を寄せ集めることができないこととなる。このため、フラグメントが存在したままとなる。
仮想メモリが利用されている場合であっても、ルーチン領域の大きさには制限がある。なぜなら、仮想メモリ領域も無限ではないからである。したがって、フラグメントは、仮想メモリ空間であっても仮想メモリ資源を圧迫し得る。
なお、メモリ領域のフラグメントを解消する技術としては、空きメモリ領域を寄せ集めるコンパクション型のガーベジコレクションなどが存在する。しかし、上述のように、相対アドレスを使って分岐するルーチンは移動できない。そのため、ルーチン領域に対してコンパクション型のガーベジコレクションを有効に適用できない。
JITコンパイルの最小単位は、メソッドと呼ばれるサブルーチンである。フラグメントが発生すると、すべての空きメモリを足せば余裕があるような状況でも、個々の空きメモリのサイズが小さいために、例えばJITコンパイラでコンパイルされたルーチンのためのメモリを割り当てられないことがある。ルーチン領域にメモリを割り当てられないときは、アプリケーションが停止することがある。これを避けるために、このときJITコンパイラは、そのメソッドをコンパイルしないという選択肢が取られることもある。あるいはJITコンパイラの最適化レベルを低くしてよりメモリを消費しないコンパイルに切り替えるという選択肢がとられることもある。
従来、ユーザプログラムがI/O処理等によってブロッキングしている間にガーベジコレクションが起動され、そのガーベジコレクションの終了前に、I/Oブロッキングが終了し、ユーザプログラムが再開されるというように、メモリコンパクション中に不正なメモリアクセスを行うことを避ける技術が存在する(例えば、特許文献1参照)。
また、従来、JITコンパイルされるメソッドが、フレーム(ローカル変数を格納する領域)を作らないで実行できるかどうかを判別し、そのようなメソッドに対してはフレームを作らないで実行するネイティブコードを生成し、メソッドの呼び出しを効率化する技術が存在する(例えば、特許文献2参照)。
特開2000−181723号公報 特開2005−284729号公報
1つの側面では、本発明は、計算機ソフトウエアの分岐アドレスを管理し、メモリ領域の有効利用を図ることを目的とする。
一態様のプログラムは、相対アドレスが用いられる命令セットアーキテクチャを採用するルーチンが、メモリ空間上を移動した場合に、アドレスの管理をコンピュータに実行させるプログラムであって、分岐命令の分岐先ルーチンを特定する情報と、新たなジャンプ命令であって、前記新たなジャンプ命令のジャンプ先として前記分岐先ルーチンへの相対アドレスが設定される、新たなジャンプ命令とを、対応付けてメモリ上の分岐先管理エントリに生成し、前記分岐命令の分岐先相対アドレスとして、前記分岐命令の分岐先ルーチンを特定する情報に対応する前記新たなジャンプ命令の位置への相対アドレスを設定し、前記分岐先ルーチンが移動した場合、前記分岐先管理エントリを参照して、前記分岐先ルーチンを特定する情報に対応する前記新たなジャンプ命令のジャンプ先を、前記分岐先ルーチンの移動後の位置への相対アドレスに修正する、処理をコンピュータに実行させる。
一態様によれば、計算機ソフトウエアの分岐アドレスを管理し、メモリ領域の有効利用を図ることができる。
分岐命令による処理を示す図である。 一般的なJITコンパイラの処理を示す図である。 メモリ上のフラグメントの発生を示す図である。 一実施形態のJITコンパイルの処理を示す図である。 一実施形態の分岐先管理テーブル内に格納された分岐先管理エントリを用いた分岐を示す図である。 一実施形態に従った、ルーチンを移動させる処理の概要を示すフローチャートである。 一実施形態に従った、ルーチンを移動させる処理の詳細を示すフローチャートである。 一実施形態に従った、ルーチン移動管理テーブルを示す図である。 一実施形態に従った、リターン命令の戻りアドレス調整処理のフローチャートを示す図である。 一実施形態の機能ブロック図である。 一実施形態のハードウェアの構成例を示す図である。
以下に、図面を用いて本発明の実施形態を詳細に説明する。なお、以下の実施形態は、発明を理解するためのものであり、本発明の範囲を限定するためのものではない点に留意すべきである。また、以下の複数の実施形態は、相互に排他的なものではない。したがって、矛盾が生じない限り、実施形態の各要素を組み合わせることも意図されていることに留意すべきである。また、請求項に記載された方法やプログラムに係る発明は、矛盾のない限り処理の順番を入れ替えてもよく、あるいは、複数の処理を同時に実施してもよい。そして、これらの実施形態も、請求項に記載された発明の技術的範囲に包含されることは言うまでもない。
また、コンピュータが読み出したプログラムコードを実行することにより、後述の実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているOSなどの他のプログラムが実際の処理の一部または全部を行ない、その処理によって実施形態の機能が実現される場合も、本発明に含まれることは言うまでもない。
なお、本明細書では、JITコンパイルがメソッド単位で行われることとして説明を行う。また、メソッドをJITコンパイルした機械語の集合をルーチンと呼ぶ。なお、本発明は、これに限定されるものではない。
図4は、一実施形態のJITコンパイルの処理を示す図である。なお、JITコンパイル処理のうち、本発明に関連の薄い他の処理については、理解を容易にするために省略している点に留意すべきである。
なお、図4に示す処理は、JITコンパイル内での処理であるとして説明するが、JITコンパイルが終了し、機械語ルーチンが生成された後に、この処理の一部又は全部を実行してもよい。この処理が、JITコンパイル内で行われるか否かは問わない。
ステップ402において、コンパイルする命令コードが分岐命令か否かがチェックされる。分岐命令でない場合には、処理はステップ440に移る。分岐命令である場合には、処理はステップ404に移る。
ステップ440においては、機械語のオペランド及びオペコードが指定されて、機械語の命令が出力される。
ステップ404においては、分岐命令の種類の判定が行われる。分岐命令がジャンプ命令であれば、ステップ406に移る。分岐命令がコール命令であれば、ステップ408に移る。
ステップ406においては、生成する機械語のオペコードをジャンプ命令とする。
ステップ408においては、生成する機械語のオペコードをコール命令とする。
ステップ410においては、分岐先のアドレスが、固定であるか否か、又は分岐先が自己のメソッド内か否かが判断される。分岐先のルーチンが、例えばC言語などでコーディングされ、静的にコンパイルされた機械語である場合(分岐先のルーチンが移動しない場合)には、後述する「分岐先管理エントリ」を生成しなくてもよい。また、分岐先が自己のメソッド内である場合には、後述する「分岐先管理エントリ」を生成しなくてもよい。この判断が「はい」である場合には、ステップ430に移る。この判断が「いいえ」である場合、すなわち、分岐先アドレスが、固定アドレスではなく、かつ自己のメソッド外への分岐である場合には、処理はステップ420に移る。
ステップ430においては、分岐命令のオペランドを分岐先の命令への相対アドレスとする。すなわち、オペランドには、分岐先の命令の位置するアドレスと、分岐命令の位置するアドレスとの差が格納されてもよい。
ステップ420においては、分岐先管理エントリが既に存在しているか否かがチェックされる。分岐先管理エントリには、分岐先を特定する情報と、新たに生成されたジャンプ命令とが含まれる。分岐先を特定する情報としては、例えば、分岐先のメソッド名などが用いられてもよい。あるいは、分岐先のアドレスが用いられてもよい。新たに生成されたジャンプ命令は、分岐先のルーチンがメモリ上を移動した場合に、分岐先のルーチンの移動に従って、ジャンプ先が置換されてもよい。これによって、生成されたジャンプ命令は、移動した分岐先にジャンプすることができる。既に分岐先管理エントリが存在している場合には、処理は、ステップ428に移る。分岐先管理エントリが、未だ生成されていない場合には、ステップ422に移る。なお、分岐先エントリが既に存在するか否かの判断は、分岐先を特定する情報と新たに生成されたジャンプ命令との双方のペアが既に存在しているか否かをチェックしてもよい。或いは、分岐先を特定する情報だけで、分岐先管理エントリが一意に特定できる場合には、分岐先を特定する情報だけをチェックしてもよい。例えば、1つのルーチンに複数のジャンプ先が存在し得る場合であって、分岐先を特定する情報が、ルーチンの名前である場合には、分岐先を特定する情報(ルーチンの名前)と、ジャンプ命令のオペランド内の分岐先相対アドレスとの双方をチェックすることが望ましい。或いは、分岐先を特定する情報として、分岐先の絶対アドレスを用いる場合には、分岐先を特定する情報(分岐先の絶対アドレス)だけをチェックしてもよい。なお、分岐先を特定する情報として、分岐先の絶対アドレスを用いた場合には、その分岐先の移動に従って、分岐先管理エントリの分岐先を特定する情報(分岐先の絶対アドレス)を書き換える。
ステップ422において、新たな分岐先管理エントリが生成される。上述のように分岐先管理エントリには、「分岐先のメソッドを示す情報」及び「ジャンプ命令」が含まれる。
ステップ424において、分岐先管理エントリの「ジャンプ命令」のオペランドに、分岐先への相対アドレスを設定する。この設定によって、生成された「ジャンプ命令」は、分岐先にジャンプすることができる。
ステップ426において、分岐先管理エントリの「分岐先のメソッドを示す情報」に分岐先メソッドの名前が設定される。なお、「分岐先のメソッドを示す情報」に格納される情報は、分岐先メソッドの名前に限られるものではない。分岐先メソッドを特定できる情報であれば、他の情報であってもよい。例えば、分岐先メソッドがコンパイルされたルーチンの分岐先の絶対アドレスであってもよい。
ステップ428において、分岐命令の機械語のオペランドを、生成された「ジャンプ命令」への相対アドレスとする。この処理によって、分岐命令は、生成された「ジャンプ命令」にジャンプすることができる。この処理を行うことによって、分岐命令は、生成された「ジャンプ命令」を経由して、目的の分岐先の命令に処理を移すことができる。
なお、この生成された「ジャンプ命令」にはスタックポインタの変更などの作用がないため、分岐元の命令がコール命令であっても、分岐先のメソッドがリターン命令を実行すれば分岐元のメソッドに処理を戻すことができる。
ステップ440において、オペコードとオペランドを指定して、機械語の命令を出力する。
図5は、一実施形態の分岐先管理テーブル内に格納された分岐先管理エントリを用いた分岐を示す図である。
メソッドA(510)における、callメソッドB(512)の命令は、メソッドBをコールする命令である。この命令は、直接メソッドBをコールしなくてもよい。すなわち、分岐先管理テーブル550内の分岐先管理エントリB(551)に存在するジャンプ命令553に処理が移る。ジャンプ命令553を経由して、メソッドB(520)の命令1(522)をコールする。そして、リターン命令RETURN(524)により、メソッドA(510)の命令3(514)に戻る。
図5において、メソッドA(510)のジャンプ命令JUMPメソッドC(516)が実行されると、分岐先管理テーブル550内の分岐先管理エントリC555に存在するジャンプ命令557を経由して、メソッドC(530)の命令1(532)にジャンプすることができる。
このように、コール命令及びジャンプ命令は、分岐先管理テーブル550内の分岐先管理エントリに存在するジャンプ命令を介して、分岐先に処理を移す。
更に図5を参照すると、分岐先管理エントリBには、分岐先であるメソッドBを示す情報552が存在する。また、分岐先管理エントリCには、分岐先であるメソッドCを示す情報556が存在する。これらの情報は、分岐先が移動した場合に利用される情報である。分岐先が移動した場合の処理の詳細については後述する。
図6は、一実施形態に従った、ルーチンを移動させる処理の概要を示すフローチャートである。ここでの処理は、1つ以上のルーチンを移動させ、連続した空きメモリ領域を拡大させる処理の例を示している。
ステップ602において、全てのスレッドを停止させる。スレッドが動いている場合には、メモリ領域に動的に新たなルーチンが生成される場合がある。したがって、この処理を行う場合には、全てのスレッドを停止させることが望ましい。
ステップ604において、ルーチン領域に含まれる先頭のルーチンを「対象ルーチン」とする。この処理は、1つ以上のルーチンに対して、先頭から順番に処理するために、現在注目しているルーチンを最初に特定するために行う処理である。
ステップ606において、「対象ルーチン」が存在するか否かがチェックされる。判断結果が「いいえ」であれば、処理はステップ616に移る。判断結果が「はい」であれば、ステップ608に移る。
ステップ608において、ルーチン領域に、「対象ルーチン」よりもアドレス上小さい部分に空きが存在するか否かがチェックされる。判断結果が「いいえ」であれば、処理はステップ612に移る。判断結果が「はい」であれば、ステップ610に移る。この判断が「はい」であれば、アドレス上小さい部分に空きが存在することになるため、対象ルーチンをアドレス上小さい方向に移動させれば、この空きを無くすことができる。
ステップ610において、ルーチンの移動が実行される。この処理については、ルーチンを移動させる処理の詳細フローチャート(図7)を参照しながら後述する。
ステップ612において、ルーチン領域に、「対象ルーチン」よりもアドレス上大きい部分にルーチンが存在するか否かが判断される。判断結果が「いいえ」であれば、処理はステップ616に移る。判断結果が「はい」であれば、処理は、ステップ614に移る。
ステップ614において、アドレス上の位置が「対象ルーチン」の次に大きいルーチンを「対象ルーチン」とする。この処理によって、次に移動させるルーチンを注目ルーチンとして特定する。そして、処理は、ステップ608に戻る。
ステップ616において、コール命令に対応するリターン命令が実行された場合であって、リターン命令が実行される前に、全スレッドが停止した場合に対する処理が行われる。すなわち、この一連の処理によって、リターン命令の戻り先が移動してしまう場合が想定される。この場合には、リターンが正しく行われるように、リターン命令の戻りアドレスを調整する処理を行う。この処理の詳細は、リターン命令の戻りアドレス調整処理のフローチャート(図9)を用いて後述する。
ステップ618において、停止していた全てのスレッドを動かす。以上の処理によって、1つ以上のルーチンが移動し、連続した空きメモリ領域が拡大し、メモリのフラグメンテーションを解消することができる。
図7は、一実施形態に従った、ルーチンを移動させる処理の詳細を示すフローチャートである。
ステップ702において、移動対象のルーチンの移動先アドレスを計算する。この計算は、アドレス上小さい部分に存在した空き領域の大きさだけ移動するよう、移動先のアドレスを決定してもよい。
ステップ704において、移動対象の「ルーチンの移動前アドレス」「サイズ」「移動先アドレスから移動前アドレスを引いた値」をそれぞれ「移動前のアドレス」「ルーチンのサイズ」「オフセット」とするルーチン移動管理エントリを、ルーチン移動管理テーブルに作成することが望ましい。ここで作成される情報は、コール命令が実行された場合であって、リターン命令が実行される前に、ステップ602において全スレッドが停止した場合であって、戻り先のルーチンの移動により、戻りアドレスが移動した場合、戻りアドレスの調整を行う際に利用する情報を保存するためのものである。この情報を用いた処理の詳細については、後述する。
ステップ706において、移動対象のルーチンに対応する分岐先管理エントリが存在するか否かが判断される。判断結果が「いいえ」であれば、処理は、ステップ710に移る。判断結果が「はい」であれば、処理はステップ708に移る。
ステップ708において、分岐先管理エントリのジャンプ命令のジャンプ先相対アドレスが移動先アドレスとなるよう修正する。分岐先管理エントリが存在しているということは、移動するルーチンは、他のルーチンからジャンプ命令又はコール命令によって分岐対象となっているルーチンである。したがって、分岐先管理エントリに存在するジャンプ命令のジャンプ先を、ルーチンの移動に従って調整する。
ステップ710において、移動対象のルーチンの先頭の命令を「確認対象命令」とする。この処理によって、ルーチン内の注目する命令として、まずルーチンの先頭の命令が特定される。
ステップ712において、「確認対象命令」が移動対象のルーチン外への分岐命令であるか否かが判断される。この判断が「いいえ」であれば、処理はステップ716に移る(「確認対象命令」が移動対象のルーチンの中のアドレスへの分岐命令である場合には、分岐命令のオペランド内のアドレス情報の修正は不要である)。この判断が「はい」であれば、処理はステップ714に移る。
ステップ714において、移動対象のルーチンの移動後のアドレスから移動前のアドレスを引き、その計算結果を「確認対象命令」のオペランドから引く処理が行われる。この処理は、「確認対象命令」のオペランドが、分岐先管理エントリのジャンプ命令になるよう、オペランドに格納されている相対アドレスを調整する処理である。
ステップ716において、「確認対象命令」の次に命令が存在するか否かが判断される。判断が「いいえ」であれば、処理は、ステップ718に移る。判断が「はい」であれば、処理はステップ712に戻る。
以上の処理によって、分岐先管理エントリが存在する場合には、対応するジャンプ命令のジャンプ先が、移動対象ルーチンの移動先のアドレスとなるよう、正しく調整される。加えて、移動対象ルーチン内に存在する全ての分岐命令のオペランドの内容も、分岐先管理エントリのジャンプ命令の存在するアドレスとなるよう、正しく調整される。
ステップ718において、移動対象のルーチンの内容を移動先にコピーする処理が実行される。
図8は、一実施形態に従った、ルーチン移動管理テーブルを示す図である。ルーチン移動管理テーブル800には、ルーチン移動管理エントリ810が含まれる。ルーチン移動管理エントリ810内には、ルーチンの移動前のアドレス812、ルーチンのサイズ814、ルーチンのアドレス移動量であるオフセット816が含まれる。なお、ルーチンの移動前のアドレス812は、例えば、ルーチンの先頭アドレスであってもよい。ルーチンの移動前のアドレス812と、サイズ814によって、そのルーチンが移動前に占めていたアドレスの範囲を知ることができる。このアドレスの範囲に、リターン命令の戻りアドレスが入る場合には、戻りアドレスを、オフセット値に基づいて調整する。戻り先のルーチンが移動しても、この戻りアドレスの調整によって、リターン命令が適切に実行されることを担保する。
図9は、一実施形態に従った、リターン命令の戻りアドレス調整処理のフローチャートを示す図である。
ステップ902において、処理していないスレッドが存在しているか否かが判断される。全てのスレッドを停止した際に、処理途中のスレッドにおいては、コール命令が実行された後、リターン命令が実行されていない場合があり得る。この判断が「いいえ」であれば、処理は、ステップ910に移る。この判断が「はい」であれば、処理はステップ904に移る。
ステップ904において、処理していないフレームが存在するか否かが判断される。Javaにおいては、コール・リターン命令は、スレッド単位にスタックで管理され、スタックの情報は、フレームを単位として扱われる。したがって、フレームが存在する場合には、リターン命令が実行されていない状態であることが分かる。この判断が「いいえ」であれば、処理は、ステップ902に戻り、他のスレッドについての調査が行われる。この判断が「はい」であれば、処理はステップ906に移る。
ステップ906において、フレームに記録されている戻りアドレスが、「ルーチン移動管理テーブル」に存在する「ルーチン移動管理エントリ」のうち、いずれかの範囲に含まれるか否かが判断される。すなわち、戻りアドレスが、移動前のルーチンが存在したアドレス範囲内にあるか否かが判断される。この判断が「いいえ」であれば、戻りアドレスを調整しなくてもよい。このため、処理はステップ904に戻り、他のフレームについての調査が行われる。この判断が「はい」であれば、処理はステップ908に移る。
ステップ908において、フレームに記録されている戻りアドレスに、該当する「ルーチン移動管理エントリ」の「オフセット」を加算する。この処理によって、戻りアドレスが移動後のルーチンのアドレスに修正されるため、戻りアドレスが適切に調整される。
ステップ910において、「ルーチン移動管理テーブル」に含まれるすべての「ルーチン移動管理エントリ」を削除する。この処理を行う理由は、全ての戻りアドレスの調整が終わったため、「ルーチン移動管理テーブル」に含まれる全ての「ルーチン移動管理エントリ」の情報が不要となるためである。そして、新たなルーチンの移動のための処理を適切に行うために、これらの情報をクリアすることが望ましい。
図10は、一実施形態の機能ブロック図である。
図10に示す実施形態は、JITコンパイラ1010、移動制御部1050、及び1つ以上のルーチン1060を含む。JITコンパイラ1010は、分岐先管理エントリ生成部1012と、分岐命令設定部1014とを含む。分岐先管理エントリ生成部1012は、例えば、分岐先管理エントリ551を生成してもよい。なお、既に分岐先管理エントリ551が存在する場合には、同じエントリを重複して作成しなくてもよい。なぜなら、分岐先管理エントリが一つ存在すれば、同一の分岐先を示す複数の分岐命令は、1つの分岐先管理エントリを共用することができるからである。
分岐命令設定部1014は、JITコンパイルする分岐命令のオペランドに、ジャンプ命令553の存在するアドレスを格納する。これによって、JITコンパイルされる分岐命令は、例えば、図5の分岐先管理エントリB(551)内のジャンプ命令553を経由して、メソッドB(520)に分岐することができる。
図10において、移動制御部1050は、ジャンプ先修正部1052、分岐命令修正部1054、ルーチン移動管理エントリ生成部、戻り相対アドレス修正部1058、戻り相対アドレス判断部1059を有する。
ジャンプ先修正部1052は、分岐先のルーチンが移動した場合に、分岐先管理エントリ551にあるジャンプ命令のオペランドを修正する。
分岐命令修正部1054は、分岐命令が移動した場合に、その分岐命令のオペランドを修正する。
ルーチン移動管理エントリ生成部1056は、ルーチン移動管理エントリ810を生成する。
戻り相対アドレス判断部1059は、ルーチン移動管理エントリ810の内容を参照して、リターン命令の戻りアドレスが、移動前のルーチンのアドレス範囲にあるか否かを判断する。この判断が肯定的であれば、リターン命令が移動後のルーチンに戻るよう、戻り相対アドレス修正部1058が、戻りアドレスを修正する。
ルーチン1060、分岐先管理エントリ551、及びルーチン移動管理エントリ810は、メモリに存在してもよい。
図11は、一実施形態のハードウェアの構成例を示す図である。ハードウェアは、プロセッサ1102、メモリ1104、表示制御部1106、表示装置1108、入出力装置1110、通信制御部1112、ドライブ装置1114、ハードディスク1118が含まれる。そして、それぞれの機器は、バス1120によって接続されている。また、ドライブ装置1114は、可搬記録媒体1116を読み書きすることができる。そして通信制御部1112には、ネットワーク(不図示)が接続されてもよい。
一実施形態におけるJavaVMや、JavaVM上で動作するJITコンパイラは、メモリ1104、ハードディスク1118等に格納され、プロセッサ1102によって、動作する。コンパイルされた機械語ルーチンは、仮想メモリアーキテクチャを介してメモリ1104上に配置されてもよい。
なお、本実施形態の全部又は一部はプログラムによってインプリメントされ得る。このプログラムは、可搬記録媒体1116に格納することができる。可搬記録媒体1116とは、構造(structure)を有する1つ以上の非一時的(non−transitory)な、有形(tangible)な、記憶媒体を言う。例示として、可搬記録媒体1116としては、磁気記録媒体、光ディスク、光磁気記録媒体、不揮発性メモリなどがある。磁気記録媒体には、HDD、フレキシブルディスク(FD)、磁気テープ(MT)などがある。光ディスクには、DVD(Digital Versatile Disc)、DVD−RAM、CD−ROM(Compact Disc−Read Only Memory)、CD−R(Recordable)/RW(ReWritable)などがある。また、光磁気記録媒体には、MO(Magneto−Optical disk)などがある。可搬型記録媒体に格納されたプログラムが読み込まれ、プロセッサによって実行されることにより、本発明の実施形態の全部又は一部が実施され得る。
なお、本明細書では、相対アドレスを用いる分岐命令を用いた実施形態を説明したが、分岐命令に絶対アドレスが用いられる場合にも、実施形態の思想は応用できるものである。具体的には、分岐先(リターン命令の戻り先を含む)が、メモリ上を移動した場合には、分岐先(リターン命令の戻り先を含む)の絶対アドレスが変動するため、この側面に関する限り本実施形態に従った処理を行うことが望ましい。しかしながら、分岐元(リターン命令を含む)がメモリ上を移動しても、分岐先(リターン命令の戻り先を含む)の絶対アドレスは変動しないため、この側面に関する限り本実施例に従った処理は行わなくてもよいこととなる。なお、メモリ上をルーチンが移動する場合には、そのルーチンは、分岐元でありかつ分岐先である可能性があるため、上記2つの側面が同時に発生することがある点に留意すべきである。
以上の実施形態に関し、以下の付記を開示する。
(付記1)
相対アドレスが用いられる命令セットアーキテクチャを採用するルーチンが、メモリ空間上を移動した場合に、アドレスの管理をコンピュータに実行させるプログラムであって、
分岐命令の分岐先ルーチンを特定する情報と、新たなジャンプ命令であって、前記新たなジャンプ命令のジャンプ先として前記分岐先ルーチンへの相対アドレスが設定される、新たなジャンプ命令とを、対応付けてメモリ上の分岐先管理エントリに生成し、
前記分岐命令の分岐先相対アドレスとして、前記分岐命令の分岐先ルーチンを特定する情報に対応する前記新たなジャンプ命令の位置への相対アドレスを設定し、
前記分岐先ルーチンが移動した場合、前記分岐先管理エントリを参照して、前記分岐先ルーチンを特定する情報に対応する前記新たなジャンプ命令のジャンプ先を、前記分岐先ルーチンの移動後の位置への相対アドレスに修正する、
処理をコンピュータに実行させるプログラム。
(付記2)
前記分岐命令が移動した場合、前記分岐命令の分岐先相対アドレスを、前記分岐命令の分岐先ルーチンを特定する情報に対応する前記新たなジャンプ命令の位置への相対アドレスに修正する、
処理を更にコンピュータに実行させる付記1記載のプログラム。
(付記3)
前記分岐先管理エントリに、前記分岐先ルーチンを特定する情報が既に存在する場合、
前記生成する処理を実行しない、
付記1又は2に記載のプログラム。
(付記4)
前記分岐命令が、コール命令である場合であって、前記コール命令が実行された後に、前記コール命令に対応するリターン命令が実行される前に、前記リターン命令の戻り相対アドレスに位置する命令が、所定のオフセットだけ移動した場合、前記所定のオフセットに基づいて、前記リターン命令の戻り相対アドレスを修正する、
処理を更にコンピュータに実行させる、付記1ないし3のうちいずれか1項に記載のプログラム。
(付記5)
前記ルーチンの移動前のアドレスの範囲をメモリに記憶する処理を更にコンピュータに実行させ、
前記戻り相対アドレスを修正する処理は、
記憶された前記ルーチンの移動前のアドレスの範囲に、修正前の前記戻り相対アドレスが入ることを判断する、処理を含む、
付記4記載のプログラム。
(付記6)
相対アドレスが用いられる命令セットアーキテクチャを採用するルーチンが、メモリ空間上を移動した場合に、アドレスの管理をコンピュータが実行する方法であって、
分岐命令の分岐先ルーチンを特定する情報と、新たなジャンプ命令であって、前記新たなジャンプ命令のジャンプ先として前記分岐先ルーチンへの相対アドレスが設定される、新たなジャンプ命令とを、対応付けてメモリの分岐先管理エントリに生成し、
前記分岐命令の分岐先相対アドレスとして、前記分岐命令の分岐先ルーチンを特定する情報に対応する前記新たなジャンプ命令の位置への相対アドレスを設定し、
前記分岐先ルーチンが移動した場合、前記分岐先管理エントリを参照して、前記分岐先ルーチンを特定する情報に対応する前記新たなジャンプ命令のジャンプ先を、前記分岐先ルーチンの移動後の位置への相対アドレスに修正する、
処理を有する方法。
(付記7)
前記分岐命令が移動した場合、前記分岐命令の分岐先相対アドレスを、前記分岐命令の分岐先ルーチンを特定する情報に対応する前記新たなジャンプ命令の位置への相対アドレスに修正する、
処理を更に有する付記6記載の方法。
(付記8)
前記分岐先管理エントリに、前記分岐先ルーチンを特定する情報が既に存在する場合、
前記生成する処理を実行しない、
付記6又は7に記載の方法。
(付記9)
前記分岐命令が、コール命令である場合であって、前記コール命令が実行された後に、前記コール命令に対応するリターン命令が実行される前に、前記リターン命令の戻り相対アドレスに位置する命令が、所定のオフセットだけ移動した場合、前記所定のオフセットに基づいて、前記リターン命令の戻り相対アドレスを修正する、
処理を更に有する、付記6ないし8のうちいずれか1項に記載の方法。
(付記10)
前記ルーチンの移動前のアドレスの範囲をメモリに記憶する処理を更に有し、
前記戻り相対アドレスを修正する処理は、
記憶された前記ルーチンの移動前のアドレスの範囲に、修正前の前記戻り相対アドレスが入ることを判断する、処理を含む、
付記9記載の方法。
(付記11)
相対アドレスが用いられる命令セットアーキテクチャを採用するルーチンが、メモリ空間上を移動した場合に、アドレスの管理を行う装置であって、
分岐命令の分岐先ルーチンを特定する情報と、新たなジャンプ命令であって、前記新たなジャンプ命令のジャンプ先として前記分岐先ルーチンへの相対アドレスが設定される、新たなジャンプ命令とを、対応付けてメモリの分岐先管理エントリに生成する、分岐先管理エントリ生成部と、
前記分岐命令の分岐先相対アドレスとして、前記分岐命令の分岐先ルーチンを特定する情報に対応する前記新たなジャンプ命令の位置への相対アドレスを設定する、分岐命令設定部と、
前記分岐先ルーチンが移動した場合、前記分岐先管理エントリを参照して、前記分岐先ルーチンを特定する情報に対応する前記新たなジャンプ命令のジャンプ先を、前記分岐先ルーチンの移動後の位置への相対アドレスに修正する、ジャンプ先修正部と、
を有する装置。
(付記12)
前記分岐命令が移動した場合、前記分岐命令の分岐先相対アドレスを、前記分岐命令の分岐先ルーチンを特定する情報に対応する前記新たなジャンプ命令の位置への相対アドレスに修正する、分岐命令修正部、
処理を更に有する付記6記載の装置。
(付記13)
前記分岐先管理エントリに、前記分岐先ルーチンを特定する情報が既に存在する場合、
前記分岐先管理エントリ生成部を実行しない、
付記11又は12に記載の装置。
(付記14)
前記分岐命令が、コール命令である場合であって、前記コール命令が実行された後に、前記コール命令に対応するリターン命令が実行される前に、前記リターン命令の戻り相対アドレスに位置する命令が、所定のオフセットだけ移動した場合、前記所定のオフセットに基づいて、前記リターン命令の戻り相対アドレスを修正する、戻り相対アドレス修正部、
を更に有する、付記11ないし13のうちいずれか1項に記載の装置。
(付記15)
前記ルーチンの移動前のアドレスの範囲を含むルーチン移動管理エントリをメモリに記憶する、ルーチン移動管理エントリ生成部、を更に有し、
前記戻り相対アドレス修正部は、
前記ルーチン移動管理エントリに基づいて、記憶された前記ルーチンの移動前のアドレスの範囲に、修正前の前記戻り相対アドレスが入ることを判断する、戻り相対アドレス判断部を含む、
付記14記載の装置。
1010 JITコンパイラ
1012 分岐先管理エントリ生成部
1014 分岐命令設定部
1050 移動制御部
1052 ジャンプ先修正部
1054 分岐命令修正部
1056 ルーチン移動管理エントリ生成部
1058 戻り相対アドレス修正部
1059 戻り相対アドレス判断部
1060 ルーチン

Claims (7)

  1. 相対アドレスが用いられる命令セットアーキテクチャを採用するルーチンが、メモリ空間上を移動した場合に、アドレスの管理をコンピュータに実行させるプログラムであって、
    分岐命令の分岐先ルーチンを特定する情報と、新たなジャンプ命令であって、前記新たなジャンプ命令のジャンプ先として前記分岐先ルーチンへの相対アドレスが設定される、新たなジャンプ命令とを、対応付けてメモリ上の分岐先管理エントリに生成し、
    前記分岐命令の分岐先相対アドレスとして、前記分岐命令の分岐先ルーチンを特定する情報に対応する前記新たなジャンプ命令の位置への相対アドレスを設定し、
    前記分岐先ルーチンが移動した場合、前記分岐先管理エントリを参照して、前記分岐先ルーチンを特定する情報に対応する前記新たなジャンプ命令のジャンプ先を、前記分岐先ルーチンの移動後の位置への相対アドレスに修正する、
    処理をコンピュータに実行させるプログラム。
  2. 前記分岐命令が移動した場合、前記分岐命令の分岐先相対アドレスを、前記分岐命令の分岐先ルーチンを特定する情報に対応する前記新たなジャンプ命令の位置への相対アドレスに修正する、
    処理を更にコンピュータに実行させる請求項1記載のプログラム。
  3. 前記分岐先管理エントリに、前記分岐先ルーチンを特定する情報が既に存在する場合、
    前記生成する処理を実行しない、
    請求項1又は2に記載のプログラム。
  4. 前記分岐命令が、コール命令である場合であって、前記コール命令が実行された後に、前記コール命令に対応するリターン命令が実行される前に、前記リターン命令の戻り相対アドレスに位置する命令が、所定のオフセットだけ移動した場合、前記所定のオフセットに基づいて、前記リターン命令の戻り相対アドレスを修正する、
    処理を更にコンピュータに実行させる、請求項1ないし3のうちいずれか1項に記載のプログラム。
  5. 前記ルーチンの移動前のアドレスの範囲をメモリに記憶する処理を更にコンピュータに実行させ、
    前記戻り相対アドレスを修正する処理は、
    記憶された前記ルーチンの移動前のアドレスの範囲に、修正前の前記戻り相対アドレスが入ることを判断する、処理を含む、
    請求項4記載のプログラム。
  6. 相対アドレスが用いられる命令セットアーキテクチャを採用するルーチンが、メモリ空間上を移動した場合に、アドレスの管理をコンピュータが実行する方法であって、
    分岐命令の分岐先ルーチンを特定する情報と、新たなジャンプ命令であって、前記新たなジャンプ命令のジャンプ先として前記分岐先ルーチンへの相対アドレスが設定される、新たなジャンプ命令とを、対応付けてメモリの分岐先管理エントリに生成し、
    前記分岐命令の分岐先相対アドレスとして、前記分岐命令の分岐先ルーチンを特定する情報に対応する前記新たなジャンプ命令の位置への相対アドレスを設定し、
    前記分岐先ルーチンが移動した場合、前記分岐先管理エントリを参照して、前記分岐先ルーチンを特定する情報に対応する前記新たなジャンプ命令のジャンプ先を、前記分岐先ルーチンの移動後の位置への相対アドレスに修正する、
    処理を有する方法。
  7. 相対アドレスが用いられる命令セットアーキテクチャを採用するルーチンが、メモリ空間上を移動した場合に、アドレスの管理を行う装置であって、
    分岐命令の分岐先ルーチンを特定する情報と、新たなジャンプ命令であって、前記新たなジャンプ命令のジャンプ先として前記分岐先ルーチンへの相対アドレスが設定される、新たなジャンプ命令とを、対応付けてメモリの分岐先管理エントリに生成する、分岐先管理エントリ生成部と、
    前記分岐命令の分岐先相対アドレスとして、前記分岐命令の分岐先ルーチンを特定する情報に対応する前記新たなジャンプ命令の位置への相対アドレスを設定する、分岐命令設定部と、
    前記分岐先ルーチンが移動した場合、前記分岐先管理エントリを参照して、前記分岐先ルーチンを特定する情報に対応する前記新たなジャンプ命令のジャンプ先を、前記分岐先ルーチンの移動後の位置への相対アドレスに修正する、ジャンプ先修正部と、
    を有する装置。
JP2012147262A 2012-06-29 2012-06-29 分岐アドレス管理プログラム、方法、及び装置 Active JP5987501B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2012147262A JP5987501B2 (ja) 2012-06-29 2012-06-29 分岐アドレス管理プログラム、方法、及び装置
US13/909,462 US9417872B2 (en) 2012-06-29 2013-06-04 Recording medium storing address management program, address management method, and apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012147262A JP5987501B2 (ja) 2012-06-29 2012-06-29 分岐アドレス管理プログラム、方法、及び装置

Publications (2)

Publication Number Publication Date
JP2014010661A true JP2014010661A (ja) 2014-01-20
JP5987501B2 JP5987501B2 (ja) 2016-09-07

Family

ID=49779478

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012147262A Active JP5987501B2 (ja) 2012-06-29 2012-06-29 分岐アドレス管理プログラム、方法、及び装置

Country Status (2)

Country Link
US (1) US9417872B2 (ja)
JP (1) JP5987501B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10514942B2 (en) * 2014-02-24 2019-12-24 Red Hat Israel, Ltd. Using linker scripts for loading system configuration tables
US10339592B2 (en) * 2015-06-17 2019-07-02 Facebook, Inc. Configuring a virtual store based on information associated with a user by an online system

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5854449A (ja) * 1981-09-28 1983-03-31 Fujitsu Ltd 分岐命令短縮化処理方式
JPS6362053A (ja) * 1986-09-03 1988-03-18 Fujitsu Ltd ガ−ベジコレクシヨン処理方式
JPS63168725A (ja) * 1987-01-06 1988-07-12 Toshiba Corp プログラム呼出方式
JPH02206838A (ja) * 1989-02-06 1990-08-16 Hitachi Ltd 共通サブル―チンリンク方法
JPH0561673A (ja) * 1991-09-03 1993-03-12 Kobe Nippon Denki Software Kk オブジエクトプログラムの動的リンク方式
US6079015A (en) * 1998-04-20 2000-06-20 Motorola, Inc. Data processing system having selectable exception table relocation and method therefor
JP2005322232A (ja) * 2004-05-03 2005-11-17 Sony Computer Entertainment Inc タスクの移動に関するシステムおよび方法
JP2006521597A (ja) * 2003-02-25 2006-09-21 インテル コーポレイション 優先度に基づくコードキャッシュ管理

Family Cites Families (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2629278B2 (ja) * 1988-06-30 1997-07-09 株式会社日立製作所 仮想計算機システム
US5507030A (en) * 1991-03-07 1996-04-09 Digitial Equipment Corporation Successive translation, execution and interpretation of computer program having code at unknown locations due to execution transfer instructions having computed destination addresses
US5428786A (en) * 1991-03-07 1995-06-27 Digital Equipment Corporation Branch resolution via backward symbolic execution
CA2158848A1 (en) * 1993-03-23 1994-09-29 Erik L. Eidt Apparatus and method for a relocatable file format
US5835743A (en) * 1994-06-30 1998-11-10 Sun Microsystems, Inc. Application binary interface and method of interfacing binary application program to digital computer
JP3047771B2 (ja) * 1995-03-05 2000-06-05 日本電気株式会社 分岐命令処理方法及び装置
US6091897A (en) * 1996-01-29 2000-07-18 Digital Equipment Corporation Fast translation and execution of a computer program on a non-native architecture by use of background translator
JPH11296381A (ja) * 1998-04-08 1999-10-29 Matsushita Electric Ind Co Ltd 仮想マシン及びコンパイラ
EP0953898A3 (en) * 1998-04-28 2003-03-26 Matsushita Electric Industrial Co., Ltd. A processor for executing Instructions from memory according to a program counter, and a compiler, an assembler, a linker and a debugger for such a processor
JP2000181723A (ja) 1998-12-21 2000-06-30 Canon Inc インタプリタおよびその制御方法、情報処理装置、コンピュータ可読メモリ
US6662354B1 (en) * 1999-01-29 2003-12-09 Unisys Corporation Determining destinations of a dynamic branch
US6286088B1 (en) * 1999-06-28 2001-09-04 Hewlett-Packard Company Memory management system and method for relocating memory
US6609248B1 (en) * 1999-06-30 2003-08-19 Microsoft Corporation Cross module representation of heterogeneous programs
US7254806B1 (en) * 1999-08-30 2007-08-07 Ati International Srl Detecting reordered side-effects
US6560774B1 (en) * 1999-09-01 2003-05-06 Microsoft Corporation Verifier to check intermediate language
US6763327B1 (en) * 2000-02-17 2004-07-13 Tensilica, Inc. Abstraction of configurable processor functionality for operating systems portability
US7036116B2 (en) * 2001-03-23 2006-04-25 International Business Machines Corporation Percolating hot function store/restores to colder calling functions
US6851110B2 (en) * 2001-06-07 2005-02-01 Hewlett-Packard Development Company, L.P. Optimizing an executable computer program having address-bridging code segments
US8074201B2 (en) * 2002-07-10 2011-12-06 National Instruments Corporation Deployment and execution of a program on an embedded device
JP2005196286A (ja) * 2003-12-26 2005-07-21 Okuma Corp リアルタイムアプリケーションプログラムを動作可能なオペレーティングシステム及びその制御方法、共有ライブラリをロードする方法
US7493483B2 (en) * 2004-02-19 2009-02-17 International Business Machines Corporation Method to prevent vulnerability to virus and worm attacks through instruction remapping
JP2005284729A (ja) 2004-03-30 2005-10-13 Fujitsu Ltd バイトコードをネイティブコードにコンパイルする仮想マシン
US7996833B2 (en) * 2004-07-31 2011-08-09 Hewlett-Packard Development Company, L.P. Method and system for replacing instructions and instruction blocks in computer code
US8499293B1 (en) * 2005-09-28 2013-07-30 Oracle America, Inc. Symbolic renaming optimization of a trace
US8132002B2 (en) * 2006-08-17 2012-03-06 Shi-Wu Lo Fast system call method
US7975109B2 (en) * 2007-05-30 2011-07-05 Schooner Information Technology, Inc. System including a fine-grained memory and a less-fine-grained memory
US7979685B1 (en) * 2007-11-27 2011-07-12 Oracle America, Inc. Multiple instruction execution mode resource-constrained device
US8327101B2 (en) * 2008-02-01 2012-12-04 International Business Machines Corporation Cache management during asynchronous memory move operations
US7966474B2 (en) * 2008-02-25 2011-06-21 International Business Machines Corporation System, method and computer program product for translating storage elements
US20120265946A1 (en) * 2011-04-12 2012-10-18 Appsense, Limited Bypassing user mode redirection
US9015027B2 (en) * 2011-04-21 2015-04-21 International Business Machines Corporation Fast emulation of virtually addressed control flow
US9519466B2 (en) * 2013-12-20 2016-12-13 Oracle International Corporation Executable code for constrained computing environments

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5854449A (ja) * 1981-09-28 1983-03-31 Fujitsu Ltd 分岐命令短縮化処理方式
JPS6362053A (ja) * 1986-09-03 1988-03-18 Fujitsu Ltd ガ−ベジコレクシヨン処理方式
JPS63168725A (ja) * 1987-01-06 1988-07-12 Toshiba Corp プログラム呼出方式
JPH02206838A (ja) * 1989-02-06 1990-08-16 Hitachi Ltd 共通サブル―チンリンク方法
JPH0561673A (ja) * 1991-09-03 1993-03-12 Kobe Nippon Denki Software Kk オブジエクトプログラムの動的リンク方式
US6079015A (en) * 1998-04-20 2000-06-20 Motorola, Inc. Data processing system having selectable exception table relocation and method therefor
JP2006521597A (ja) * 2003-02-25 2006-09-21 インテル コーポレイション 優先度に基づくコードキャッシュ管理
JP2005322232A (ja) * 2004-05-03 2005-11-17 Sony Computer Entertainment Inc タスクの移動に関するシステムおよび方法

Also Published As

Publication number Publication date
US9417872B2 (en) 2016-08-16
US20140006759A1 (en) 2014-01-02
JP5987501B2 (ja) 2016-09-07

Similar Documents

Publication Publication Date Title
KR101381274B1 (ko) 효율적인 동적 이진 변환을 위한 레지스터 매핑 방법, 시스템 및 컴퓨터 판독가능 저장 매체
RU2550558C2 (ru) Сравнение и замена позиции таблицы динамической трансляции адреса
US8832672B2 (en) Ensuring register availability for dynamic binary optimization
US20140053143A1 (en) Context-specific optimized code
KR101244104B1 (ko) 컴퓨터 시스템 및 레지스터 윈도우 아키텍쳐를 지원하도록 컴퓨터 시스템을 구현하는 방법
US9223553B2 (en) Methods and apparatus to validate translated guest code in a dynamic binary translator
US9558096B2 (en) Method and apparatus for supporting performance analysis
US20120198428A1 (en) Using Aliasing Information for Dynamic Binary Optimization
US8959502B2 (en) Processing table of content access overflow in an application
CN102289380A (zh) firefox启动加速方法
CN103714288A (zh) 一种数据流跟踪方法
CN111625279A (zh) 基于动态链接库的动静融合二进制翻译方法及系统
JP5987501B2 (ja) 分岐アドレス管理プログラム、方法、及び装置
JP2009271606A (ja) 情報処理装置およびコンパイル方法
JP5536593B2 (ja) 最適化装置、最適化方法およびコンパイラ・プログラム
JP5489884B2 (ja) 命令実行装置、命令実行方法、及び命令実行プログラム
US8341606B2 (en) Method of invoking inlined method and java virtual machine using the method
CN105373414A (zh) 支持MIPS平台的Java虚拟机实现方法及装置
KR20060035077A (ko) 데이터 처리 장치 및 이를 이용한 레지스터 할당 방법
JP6245028B2 (ja) 実行制御方法、実行制御プログラムおよび実行制御装置
JP2010198398A (ja) 計算機装置および制御方法
JP6295914B2 (ja) プログラマブルコントローラシステム、その支援装置、プログラマブルコントローラ
CN100573452C (zh) 一种嵌入式设备中调用外部存储介质中应用程序的方法
JP6691884B2 (ja) 計算機及びアプリケーション管理方法
US9928045B2 (en) Information processing apparatus, compile method and non-transitory recording medium storing compile program

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150319

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20151125

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20151222

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160222

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160712

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160725

R150 Certificate of patent or registration of utility model

Ref document number: 5987501

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150