JP5115332B2 - エミュレーションプログラム、エミュレーション装置およびエミュレーション方法 - Google Patents

エミュレーションプログラム、エミュレーション装置およびエミュレーション方法 Download PDF

Info

Publication number
JP5115332B2
JP5115332B2 JP2008134527A JP2008134527A JP5115332B2 JP 5115332 B2 JP5115332 B2 JP 5115332B2 JP 2008134527 A JP2008134527 A JP 2008134527A JP 2008134527 A JP2008134527 A JP 2008134527A JP 5115332 B2 JP5115332 B2 JP 5115332B2
Authority
JP
Japan
Prior art keywords
write
instruction
memory map
emulation
program
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.)
Active
Application number
JP2008134527A
Other languages
English (en)
Other versions
JP2009282774A (ja
Inventor
宗則 前田
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 JP2008134527A priority Critical patent/JP5115332B2/ja
Priority to US12/409,136 priority patent/US8543371B2/en
Publication of JP2009282774A publication Critical patent/JP2009282774A/ja
Application granted granted Critical
Publication of JP5115332B2 publication Critical patent/JP5115332B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/145Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being virtual, e.g. for virtual blocks or segments before a translation mechanism
    • 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

Description

本発明は、対象プログラムの実行環境を仮想的に提供するエミュレーションプログラム、エミュレーション装置およびエミュレーション方法に関する。
エミュレーションプログラムやエミュレーション装置は、対象プログラムが出力する命令列であるターゲット命令を、仮想計算機で実行するものである(例えば特許文献1参照。)。以降の説明では、エミュレーション装置、およびエミュレーションプログラムの実行によってエミュレーション装置として機能するコンピュータをホストマシンと称する。同様に、エミュレーションによって提供される仮想的な計算機と、計算機上で動作する対象プログラム(ターゲットプログラム)のセットをターゲットマシンと称する。
エミュレーションプログラムやエミュレーション装置では、ターゲット命令列を解釈実行する命令インタプリタと、ホストマシンの命令列であるホスト命令に実行時に変換する機構である命令変換機構から構成されることが一般的になっている(例えば特許文献2,3参照。)。
命令変換機構は、ターゲット命令列をホスト命令列に変換する点で従来のコンパイラと同様な機能を持つが、変換処理が動的、すなわちエミュレーションのターゲットプログラムの実行時に行なわれ、変換処理の実行時に収集可能なターゲットプログラムの情報を利用することが可能である点が異なる。以下、命令変換機構がターゲット命令列から動的に生成したホスト命令列を変換コード(コードレット)と称する。
コードレットは、エミュレーション対象のメモリとは別のメモリ領域に置かれ、実行の正当性が保証される限りにおいて、命令変換機構なり仮想プロセッサの操作によって自由に変更可能である。これは、コードレットの位置づけが命令キャッシュ内の不可視なマイクロコードと同様に位置づけられるためである。
一方、ターゲットマシンの実メモリ空間及び仮想メモリ空間上のデータあるいは命令は、コードレットと異なり、エミュレーションプログラムが勝手に書き換えることは一般には許されない。これは書き換えられたメモリを参照しているターゲットマシン上のプロセスやユーティリティへの影響を判断できないためである。
ターゲットマシン上の仮想メモリをホストマシンで効率よくアクセス可能とするために、ホストマシンのアドレス変換機構(TLB:Translation Lookaside Buffer)を使い、ターゲットマシンの仮想アドレス(または実アドレス)をホストマシンの仮想アドレスに直接変換する技術が現在多くのエミュレーションソフトウェアに備わっている。
ターゲットマシンの仮想メモリのアクセスは、ターゲットマシン上の動的アドレス変換をソフトウェアで極力行うことなく(TLBミス例外やページ例外の発生時を例外的に除く)、ホストマシンのTLBで実現される。
ページ書き込み保護法は、ターゲットメモリのページ属性を、対応するホストメモリ上で書き込み不可に設定しておくことで、ターゲットメモリへの書き込みが生じると、当該アドレスに対応するホストアドレスに対するホストマシン上のTLBの属性をチェックし、検出し、例外ハンドラで適切な保護を実施するものである。
特表2002−543490号公報 特表2002−536712号公報 特表2006−524382号公報
しかしながら、ページ書き込み保護方法を取ると、保護される領域のみならず、本来保護される領域以外への書き込みにも著しいオーバーヘッドが生じる場合がある。
たとえば、一部のコンピュータで採用されているローアドレスプロテクション機構では、0番地から511番地の範囲への書き込みに書き込み保護が働く。ページサイズは2Kバイト以上(近年は4Kバイト以上)のものが利用されており、512番地以降の同一ページ内への書き込みは、他のページと同程度存在する可能性がある。
ローアドレスプロテクションに対応したターゲットマシンを、ローアドレスプロテクションに対応しておらず、ページ書込み保護を用いるホストマシンでエミュレートすると、ローアドレスプロテクションを再現するために、512番地以降の同一ページについても書込み保護を行なう必要が発生する。そのため、ターゲットマシン本来の実行環境に比して書込み保護違反が多くなるという問題が生ずる。
また、命令の一貫性確保の問題もある。コードレットとターゲット命令の一貫性の保証方法はいくつか知られている。その保証方法の一つが、ページ書き込み保護方法に基づくライトプロテクション法である。
ページ書き込み保護方法に基づくライトプロテクション法は、ターゲット命令列を含むメモリページを書き込み保護属性に設定し、保護属性に設定したページの書き込みが行われるとターゲット命令に対するコードレットが無効になるというものである。保護はページ単位で行われるため、同一ページ内のターゲット命令列に含まれない番地(データアドレス)への書き込みにおいても書き込み保護機構が働く。
書き込み保護違反がホストマシンで検出されると、ホストOS(Operating System)カーネルやエミュレーションプログラムの例外ハンドラが起動される。例外ハンドラは、本来保護される領域への書き込みかどうかをチェックし、書き込み保護されない領域の場合は、ホストプロセッサのTLBを操作して書き込み保護を無効にし、メモリに書き込む。その後、再びホストプロセッサのTLBを操作して書き込み保護を有効にする。
例外ハンドラの実行や特権命令であるホストTLBの操作は、もともとの書き込み命令に比較して、著しいオーバーヘッドがあるため極めて低速である。ただし、オーバーヘッドが生じるのは保護違反の生じたストア命令についてのみである。
また、ホストマシンのページ書き込み保護機能を使わずに、命令インタプリタで書き込み保護を行なうことも考えられる。しかし、命令インタプリタでの書き込み保護は、ターゲット命令列に含まれる全てのストア命令について、書き込みアドレスが保護領域内であるか否かのチェックが必要になる。これは保護違反の有無に関わらず、ほぼ全てのストア命令にオーバーヘッドが生じ、ストア命令の実行回数に比例して全体性能が低下することを意味する。
すなわち、従来の技術では、対象プログラムに対して仮想的な実行環境を提供する場合に、メモリの保護と高速アクセスとを両立することができないという問題点があった。
本発明は、上述した従来技術にかかる問題点を解消し、課題を解決するためになされたものであり、メモリの保護と高速アクセスとを両立するエミュレーションプログラム、エミュレーション装置およびエミュレーション方法を提供することを目的とする。
上述した課題を解決し、目的を達成するために、開示のプログラム、装置、方法は、対象プログラムの実行環境を仮想的に提供する際に、対象プログラムが使用するメモリ領域に対し、エミュレータの実行環境に基づく書込み保護を施した第1メモリマップと、対象プログラムの実行環境および/または対象プログラムの命令の内容に基づく書込み保護を施した第2メモリマップと、を作成する。そして、対象プログラムの命令を変換して実行した結果、第1メモリマップに対する書込み保護違反を生じた場合に、第2メモリマップに対する書き込み命令に書き換える。
開示のプログラム、装置、方法によれば、エミュレータの実行環境が提供するメモリ保護機構のメモリ保護単位よりも小さな単位でメモリ保護を実行することができるので、メモリアクセスを効率化し、メモリの保護と高速アクセスとを両立するエミュレーションプログラム、エミュレーション装置およびエミュレーション方法を得ることができるという効果を奏する。
以下に、本発明にかかるエミュレーションプログラム、エミュレーション装置およびエミュレーション方法の実施例を図面に基づいて詳細に説明する。
図1は、本実施例に係るエミュレーションプログラムの概要構成を説明する説明図である。図1に示したエミュレーションプログラム20は、ホストマシン30のハードウェアを用いて動作し、ターゲットプログラム10に対して仮想的な実行環境を提供する。そのため、ターゲットプログラム10からは、エミュレーションプログラム20は本来の実行環境を備えた計算機として認識される。
ターゲットプログラム10は、エミュレーションプログラム20が提供する仮想計算機上で演算処理部11による演算処理を実行し、演算結果の読み書きにメモリ12を用いるように動作する。
実際には、演算処理部11が出力するターゲット命令は、エミュレーションプログラム20によって処理される。また、メモリ12はエミュレーションプログラム20が管理するメモリの写像である。
エミュレーションプログラム20は、その内部に命令解釈部21、命令変換部22、演算処理部23、メモリマップ作成部24、実メモリ25、仮想メモリマップ26,27、例外ハンドラ28を有する。
命令解釈部21は、ターゲットプログラム10が出力したターゲット命令を解釈する命令インタプリタである。また、命令変換部22は、ターゲットプログラム10が出力したターゲット命令をホスト命令に実行時に変換する機構である。
命令解釈部21が解釈した命令や命令変換部22によって作成されたホスト命令は、演算処理部23によって実行される。演算処理部23は、演算結果をメモリマップ作成部24、仮想メモリマップ26,仮想メモリマップ27を介して実メモリ25に書き込み、また、実メモリ25の内容をメモリマップ作成部24、仮想メモリマップ26,仮想メモリマップ27を介して取得して演算に使用する。
メモリマップ作成部24は、演算処理部23による実メモリ25へのアクセスに介在し、実メモリ25に対するメモリマップとして仮想メモリマップ26と仮想メモリマップ27を作成する。
仮想メモリマップ26は、ターゲットプログラム10におけるメモリ12に対応し、エミュレーションプログラム20の実行環境、すなわちホストマシン30の機能に基づく書込み保護を施されたメモリマップである。具体的には、仮想メモリマップ26は、ページ単位で書込み保護される。
仮想メモリマップ27は、ターゲットプログラム10の本来の実行環境や、ターゲットプログラムの命令の内容に基づく書込み保護を施したメモリマップである。具体的には、仮想メモリマップ27は、仮想メモリマップ26と同一内容で、アドレスが所定量ずれたメモリマップである。仮想メモリマップ27に対する書込み保護は、ソフトウェア的に実施されるので、ホストマシン30の実行環境による制約を受けず、ターゲットプログラム10の動作、具体的にはローアドレスプロテクションや命令間の一貫性確保の観点から保護アドレスが決定される。
例外ハンドラ28は、演算処理部23による演算の結果、メモリに対する書込み保護違反が発生した場合に呼び出される処理部であり、判別部28a、命令書き換え部28b、および例外処理部28cを有する。
エミュレーションプログラム20では、メモリに対する書き込みを行なうストア命令を複数有している。判別部28aは、書き込み違反を生じたストア命令の種類を判別し、判別結果に基づいて命令書き換え部28bと例外処理部28cのいずれかに送る。
例外処理部28cは、通常の例外処理を行なう処理部であり、例外処理を行なった後は演算処理部23に処理を戻す。一方、命令書き換え部28bでは、ストア命令を書き換えた上で、演算処理部23に処理を戻す。この命令書き換え部28bによる処理の詳細については、後述する。
図2は、エミュレーションの動作について説明する説明図である。ターゲットマシンにおいて演算を実行するターゲットプロセッサがメモリアクセスやストア命令を実行し、実行結果がターゲットメモリに反映される。
実際には、ターゲットプロセッサの動作とメモリの管理は、ホストマシン30とエミュレーションプログラム20によって実行される。すなわち、ターゲットプロセッサの命令は、命令解釈部21によって解釈されてインタプリタコードになるか、もしくは命令変換部22によってコードレットに変換される。
インタプリタコードとコードレットは、ホストマシンのプロセッサによって実行され、ホストマシンのメモリに格納される。メモリの格納時には、ターゲットマシン上の仮想メモリをホストマシンで効率よくアクセス可能とするために、ホストメモリにターゲットメモリのメモリ領域を写像して格納する。
具体的には、ターゲットマシンの仮想アドレス(または実アドレス)をホストマシンの仮想アドレスにホストマシンのTLBを使って直接変換する。ターゲットマシンの仮想メモリへのアクセスは、ターゲットマシン上の動的アドレス変換をソフトウェアで極力行うことなく、ホストマシンのTLBで実現することができる。
ターゲットメモリにおけるメモリ保護は、ホストマシンの実行環境を考慮しない。例えば、ターゲットマシンがローアドレスプロテクションを実行する場合、ターゲットマシンは図3に示すように、メモリの0番地から511番地の範囲を読み込み専用として書き込み保護する。ターゲットマシンの本来の実行環境では、メモリの0番地から511番地の範囲を保護したまま、同一ページの512番地以降にアクセス可能である。
しかし、ホストマシンがローアドレスプロテクションに対応していなければ、ホストマシンがローアドレスプロテクションをエミュレートし、メモリの0番地から511番地の範囲を保護するためにはページ全体を書込み保護する必要がある。そのため、ホストマシンが同一ページの512番地以降にアクセスしようとすると書込み保護違反が発生する。
また、図4に示したように、ページ書き込み保護法では、ターゲット命令列を含むメモリページを書き込み保護属性に設定し、ターゲット命令列を含むメモリページに書き込みが行われた場合に、ページ内のターゲット命令に対するコードレットが無効にすることで、コードレットとターゲット命令の一貫性を保証している。
ページ書き込み保護法は、ページ単位で書込み保護を行なうので、同一ページ内のターゲット命令列に含まれない番地(データアドレス)への書き込みにおいても書き込み保護機構が働いて書込み保護違反が発生する。
そこで、エミュレーションプログラム20では、仮想アドレス空間の複製と、ストア命令の書き換えによってホストマシンの実行環境に依存しない書込み保護を実現する。
図5は、エミュレーションプログラム20における書込み保護の概要について説明する説明図である。まず、事前準備について説明する。書き込み保護が必要なページUに対して、書き込み保護されていないページVを用意する。書込み保護が必要なページUは、仮想メモリマップ26によって提供され、書込み保護されていないページVは仮想メモリマップ27によって提供される。
また、ページUからページVを直ちに決定できるように、例えば、ページUのアドレスとページVのアドレスの差分を定数Cとしてもよい。この時、ページVのアドレスは、V=(U+C)によって求められる。
あるいは、ページUのアドレスをベースレジスタXからの相対としてもよい。この時、ページUのアドレスは、V=(U+C+X)によって求められる。また、ハッシュテーブルを用い、V=hash(U)によって求めることとしてもよい。
ページUとページVは仮想ページであり、同一の実ページをメモリマップするものである。すなわち、ページVは、ページUとアクセス制限属性のみ異なり、内容はまったく同じものになり、ページUの代替ページとして機能する。
次に、書込み保護違反が発生した場合の命令書き換えについて説明する。まず、コードレットPの書き込み命令(ホスト命令)であるWRITE(ADDR,VAL)を実行する。ここで、ADDRはページUの中のアドレス、VALは書き込み値を示す。
WRITE(ADDR,VAL)が書き込み違反を発生すると、例外ハンドラ28内の命令書き換え部28bは、コードレットPの書き込み違反を発生したストア操作をコード置換(プログラム書き換え)し、CHECK_WRITE(ADDR,VAL)操作に置き換える。
CHECK_WRITE(ADDR,VAL)を実行すると、アドレスADDR、すなわちページU内のアドレスから、対応する代替ページVのアドレスを決定する。そして、求めたアドレスを指定するストア命令(WRITEコマンド)を作成する。ページVのアドレスは、既に述べたようにV=(U+C),V=(U+C+X)などによって求められるので、図5では求めたページVのアドレスをOFFSET+ADDRとしている。
このWRITE((OFFSET+ADDR),VAL)は、ページ保護されていない仮想アドレス空間を指しているので、書き込み可能である。なお、実際の書込み保護の必要性に基づいてソフトウェアによる書込み保護を行なった範囲には書き込みを行なわないようにする。
図6は、CHECK_WRITE(ADDR,VAL)の具体的な定義例である。WRITEの引数ADDRに対して、書き込み保護されない代替ページUが用意されていて、かつ、条件NOT PROTECTED_RANGE(ADDR)が満たされる場合には、WRITE((OFFSET+ADDR),VAL)に置換する。
一方、書き込み保護されない代替ページUが用意されているが、条件NOT PROTECTED_RANGE(ADDR)が満たされない場合には、WRITEX(ADDR,VAL)に置換する。WRITEXコマンドは、ストア命令としては同等な機能を持つが、書き換え対象とならない点がWRITEコマンドと異なる。すなわち、WRITEXの実行で書き込み保護違反が発生した場合、WRITEのような命令書換えは行わない。これによって、例外発生時の挙動はオリジナル(従来の例外処理)と同じものになる。WRITEとWRITEXの識別については後述する。
9行目は、書き込み保護対象と判明しているU以外のページをアクセスするケースである。どこのページをアクセスするかわからないため、12行目にあるように、そのまま、WRITE(ADDR,VAL)が置かれている。そのまま出力されたWRITE(ADDR,VAL)は、TLB入れ替えなど、通常の(従来と同様の)保護領域ごとのポリシーに従うものであり、再帰的な書き換えの対象となる。再帰的書き換えの対象としない場合にはWRITEX(ADDR,VAL)に置換すればよい。
以上の置換操作は論理的なものであり、書き換え命令長を配慮して、CHECK_WRITEが関数呼出しになるか、その場に直にインライン展開されるか、トランポリンコードを挟んで別の場所に展開されるかといった実装がありうる。また、実装上、命令キャッシュのコヒーレンシ(一貫性)を考慮した置換操作を行なう。
なお、書き込み保護違反したWRITE(ADDR,VAL)が見つかったとき、例外ハンドラ28の中で直ちにCHECK_WRITE(ADDR,VAL)に書き換えてもよいし、その最初の回は見逃し、次に実行されるまでの間に書き換えてもよい。直ちに書き換える場合は、行2:のところから実行を再開することになる。
書き込み保護されたページUの存在は、そこにアクセスしてアクセス保護違反が発生した結果把握される。CHECK_WRITEの埋め込みは、こうしたアクセス保護違反後に行われるため、Uは定数として扱っている(行1:)。一方、ホスト命令のWRITE(ADDR,VAL)においては、ADDRは実行時に決まる変数であり、実行するたびに変わる可能性がある。また、PAGE()は関数ではなくビット演算等のマクロで実現することが好適である。
つぎに、図7,8を参照して再帰的書換えの発生について説明する。ローアドレスプロテクション機能の実現では、静的に[0、511]番地範囲が決まっており、この範囲外であるWRITEについては、再帰的に命令書き換えの必要性がない。しかしながら、1つのストア命令が、異なるコンテキストで複数のページに対して書換え保護違反を生じる可能性があり、この場合には再帰的な命令書き換えが発生する。図7,8は、元のWRITE(ADDR,VAL)のある場所に再帰的書き換えをインライン展開していく場合の具体例を説明する説明図である。
元のWRITE(ADDR,VAL)が書き込み保護されたページU1、U2、U3にアクセスする場合、まず、U1の次にU2へアクセスすると、図6に示したコードの12行目に記述したWRITE(ADDR,VAL)がU2で書き込み保護違反を引き起こし、図7の8行目から16行目のように展開される。
次に、図7の15行目に示したWRITE(ADDR,VAL)が、U3をアクセスする場合に書き込み保護違反を引き起こし、図8の15行目から23行目のように展開される。
こように、WRITE(U,VAL)が再帰的に置換対象になると、コードサイズが線形に増加する場合がある。これを回避するため、単純なアドレス範囲比較演算ではなく、(PAGE(ADDR)==U)とPROTECTED_RANGE(ADDR)の条件を判定する関数呼び出しにし、関数のボディ部を拡張することが好ましい。
図8に示した例では、1行目と2行目、8行目と9行目、15行目と16行目で、「PAGE(ADDR,Ux)…PROTECTED_RANGE(ADDR)」という表現があるが、PROTECTED_RANGEの実際の処理は、2行目、9行目、16行目で全て違う。なぜなら、PROTECTED_RANGEの処理は、ページUx毎に保護するべきメモリ範囲が異なるためである。
また、「PAGE(ADDR,Ux)…PROTECTED_RANGE(ADDR)」の判定を変更すれば、コードが増加しないように保つこともできる。この場合のCHECK_WRITEの定義を図9に示す。
図9に示した例では、1行目で関数などを利用して、ADDRが保護ページであるか否かをチェックし、保護ページであればWRITE(ADDR,VAL)で処理を抜けるようにしている。これにより、実行速度が下がるが、一般性が高くコードの増加を回避したCHECK_WRITEを得ることができる。
つぎに、WRITEとWRITEXの区別について説明する。WRITEとWRITEXを区別する方法は、ホストマシン命令セットと実装によって任意の方法を取ることができる。
例えば、ホストマシンに異なる種類のストア命令が用意されていれば、WRITEとWRITEXにそれぞれ異なるストア命令を割り当てることで区別が可能である。
また、各コードレットにWRITEとWRITEXの出現位置を記した表を用意し、CHECK_WRITEの先頭で例外を起こしたストア命令がどちらか判断してもよい。
さらに、ストア命令の直下に異なる種類のNOP(No Operation)命令(例えばWRITE用のNOPa命令、WRITEX用のNOPb命令)を配置し、そのNOP命令の種類で判断してもよい。
図1に示した判別部28aは、上述のいずれか、もしくは他の任意の方法によってWRITEとWRITEXを判別し、WRITEは命令書き換え部28bに、WRITEXは例外処理部28cへ送る。
つぎに、図10を参照し、エミュレーションプログラム20におけるコードレットの処理について説明する。エミュレーションプログラム20内部の命令変換部22は、まず、ターゲットプログラム10が出力したターゲット命令をコードレットに変換する(ステップS101)。
演算処理部23は、コードレットを実行し(ステップS102)、実行によって書込み保護違反が発生しなければ(ステップS103,No)、通常の処理を行なって(ステップS104)、処理を終了する。
一方、書込み保護違反が発生した場合(ステップS103,Yes)、例外ハンドラ28が起動され、例外ハンドラ28内部の判別部28aは、書込み保護違反を引き起こした命令がWRITEXであるかWRITEであるかを判定する(ステップS105)。
書込み保護違反を引き起こした命令がWRITEXである場合(ステップS105,Yes)、通常の処理(ステップS104)、すなわち、例外処理部28cによる例外処理を行なって、処理を終了する。
一方、書込み保護違反を引き起こした命令がWRITEである場合(ステップS105,No)、命令書き換え部28bがWRITEをCHECK_WRITEに書き換える(ステップS106)。
そして、演算処理部23は、CHECK_WRITE処理を実行した(ステップS107)後、命令実行(ステップS102)に戻る。
続いて図11を参照し、CHECK_WRITE処理の詳細について説明する。図11に示したように、CHECK_WRITE処理は、まずアクセス先(ADDR)のページに代替ページが存在するか否かを判定する(ステップS201)。その結果、代替ページが存在しない場合には(ステップS201,No)、CHECK_WRITE処理は、WRITE(ADDR,VAL)を出力して(ステップS204)、処理を終了する。
一方、代替ページが存在する場合には(ステップS201,Yes)、CHECK_WRITE処理は、書込み保護領域への書き込みではないかを判定する(ステップS202)。その結果、書込み保護領域への書き込みである場合(ステップS202,No)、CHECK_WRITE処理は、WRITEX(ADDR,VAL)を出力して(ステップS205)、処理を終了する。
書込み保護領域への書き込みでない場合(ステップS202,Yes)、CHECK_WRITE処理は、WRITE(OFFSET+ADDR,VAL)を出力して(ステップS203)、処理を終了する。
ここまでの説明では、命令変換部22がコードレットに変換したストア命令を対象に説明を行なった。つぎに命令解釈部21(インタプリタ)で解釈されたストア命令に対する処理について説明する。
命令解釈部21によって解釈されたストア命令は、書き込み保護領域に書き込むたびに例外を生じるため、性能劣化が問題になる可能性がある。ただし、一般的にエミュレーションソフトウェアでは、実行回数がある閾値を超えたターゲット命令列は、コードレットに自動的にコンパイルされるため、閾値以下の実行回数を持つターゲット命令列中のストア命令の存在が問題となる。
一般に、コードレットとなるターゲット命令列は、ベーシックブロックを単位とするものである。あるストア命令がメモリ保護違反を起こすものであったとき、最低限、そのストア命令を含むベーシックブロックを1つ決定しなければならない。ベーシックブロックは制御の入り口であり、例外を引き起こした当該ストア命令からさかのぼって制御の入り口を決定することは一般には困難である。
そこで、エミュレーションプログラム20では、現在のベーシックブロックの入り口となる命令アドレスを起点情報として保持するレジスタ等を命令解釈部21に持たせる。そして、解釈して実行したストア命令がメモリ保護違反を起こした場合に、命令解釈部21の起点情報を参照し、違反を起こしたストア命令を含むベーシックブロックを強制的にコードレットにコンパイルする。
具体的には、命令解釈部21は、分岐命令等、命令アドレスレジスタを明示的に変更する命令において、分岐先命令アドレスを起点情報に設定する。そして、命令解釈部21で解釈したストア命令がローアドレスプロテクション等に関連したページの書き込み保護違反を起こした場合に、本来書き込み可能であるべき場所ならば、起点情報から当該ストア命令を含むベーシックブロックを命令変換部22でコンパイルし、生成されたコードレットを登録する。なお、コードレットの登録、実行時の検索、実行、破棄等の手続きは、通常のコードレットに対するものと同様である。
図12は、エミュレーションプログラム20において解釈されたストア命令の処理について説明するフローチャートである。エミュレーションプログラム20内部の命令解釈部21は、まず、ターゲットプログラム10が出力したターゲット命令について、ベーシックブロック開始位置を起点情報として保持する(ステップS301)。
つぎに、命令解釈部21は、ターゲット命令を解釈し(ステップS302)、解釈した命令を実行する(ステップS303)。命令実行によって書込み保護違反が発生しなければ(ステップS304,No)、通常の処理を行なって(ステップS305)、処理を終了する。
一方、書込み保護違反が発生した場合(ステップS304,Yes)、命令変換部22が、ベーシックブロック開始位置からの命令列をコードレットに変換して(ステップS306)、処理を終了する。
以上説明してきたように、本実施例に係るエミュレーションプログラム20は、ホストマシン30のメモリ書換え保護の下で、コードレット上の動的命令書き換えを実施する。そのため、ホストハードウェアの持つページ単位のメモリ保護機能を用いて、1ページ長より小さいメモリ領域の保護を実現しつつ、ページ内の保護不要なメモリ領域への書き込みは実用的な性能で実施できる。
すなわち、必要なメモリ保護を確保しながらメモリ保護違反の発生数を抑制する効率的なメモリアクセスを実現できるので、メモリの保護と高速アクセスとを両立することができる。
また、保護ページ内の保護領域が動的に変更される場合でも、コードレットに対する動的命令書き換えによって対応することが可能である。
さらに、ターゲットマシン上のメモリに対する変更(命令書き換え)を行わないため、ターゲットマシン上のアプリケーション、ターゲットOSからは観測されず、影響を与えることがない。
また、コードレットの命令書き換えは、当該コードレットの実行でメモリ書き換え保護違反が生じたときのみ行われる。そのため、実行されないコードレット上の潜在的にメモリ書き換え保護違反を生じる箇所はコードレット書き換えの対象とならない。
さらに、稀ではないが命令変換部でコンパイルされるほど頻繁に実行されるわけではない、または、コンパイルされるまでのレイテンシが問題になるような処理における、メモリ保護例外を生じるインタプリタ実行されるストア命令について、それを含むターゲット命令列を強制的にコードレットに変換し、メモリ保護と効率的メモリ書換えを両立することができる。
以上の実施例を含む実施形態に関し、更に以下の付記を開示する。
(付記1)対象プログラムの実行環境をソフトウェアで提供するエミュレーションプログラムであって、
前記対象プログラムが出力した命令を自プログラムの実行環境で処理可能な命令に変換する変換手順と、
前記対象プログラムが使用するメモリ領域に対し、前記自プログラムの実行環境に基づく書込み保護を施した第1メモリマップと、前記対象プログラムの実行環境および/または前記対象プログラムの命令の内容に基づく書込み保護を施した第2メモリマップと、を作成するメモリマップ作成手順と、
前記変換手順が出力した書き込み命令が前記第1メモリマップに対する書込み保護違反を生じた場合に、前記第2メモリマップに対する書き込み命令に書き換える命令書き換え手順と、
をコンピュータに実行させることを特徴とするエミュレーションプログラム。
(付記2)前記第2メモリマップは、前記第1メモリマップと同一内容で、アドレスが所定量ずれたメモリマップであることを特徴とする付記1に記載のエミュレーションプログラム。
(付記3)前記第1メモリマップは、ページ単位で書込み保護を施したメモリマップであることを特徴とする付記1または2に記載のエミュレーションプログラム。
(付記4)前記命令書き換え手順は、前記第2メモリマップにおける書き込み先が書込み保護されている場合に、書き込み違反時に例外処理に移行する書き込み命令に書き換えることを特徴とする付記1〜3のいずれか一つに記載のエミュレーションプログラム。
(付記5)前記命令書き換え手順は、前記変換手順が出力した書き込み命令が前記第1メモリマップに対する書込み保護違反を生じ、かつ当該書き込み命令の書き込み先に対応する前記第2メモリマップが存在しない場合に、当該書き込み命令をそのまま出力することを特徴とする付記1〜4のいずれか一つに記載のエミュレーションプログラム。
(付記6)前記対象プログラムが出力した命令を解釈する命令解釈手順をさらにコンピュータに実行させ、前記変換手順は、前記命令解釈手順が解釈した書き込み命令が書込み保護違反を生じた場合に、当該命令を含む命令列を変換することを特徴とする付記1〜5のいずれか一つに記載のエミュレーションプログラム。
(付記7)前記命令解釈手順は、前記対象プログラムが出力した命令を解釈する場合に、前記変換手順による変換対象範囲の起点を示す起点情報を作成することを特徴とする付記6に記載のエミュレーションプログラム。
(付記8)対象プログラムの実行環境を仮想的に提供するエミュレーション装置であって、
前記対象プログラムが出力した命令を自装置が処理可能な命令に変換する変換手段と、
前記対象プログラムが使用するメモリ領域に対し、前記自装置の動作環境に基づく書込み保護を施した第1メモリマップと、
前記対象プログラムの実行環境および/または前記対象プログラムの命令の内容に基づく書込み保護を施した第2メモリマップと、
前記変換手段が出力した書き込み命令が前記第1メモリマップに対する書込み保護違反を生じた場合に、前記第2メモリマップに対する書き込み命令に書き換える命令書き換え手段と、
を備えたことを特徴とするエミュレーション装置。
(付記9)対象プログラムの実行環境を仮想的に提供するエミュレーション方法であって、
前記対象プログラムが出力した命令を実際の実行環境で処理可能な命令に変換する変換ステップと、
前記対象プログラムが使用するメモリ領域に対し、前記実際の実行環境に基づく書込み保護を施した第1メモリマップと、前記対象プログラムの実行環境および/または前記対象プログラムの命令の内容に基づく書込み保護を施した第2メモリマップと、を作成するメモリマップ作成ステップと、
前記変換ステップが出力した書き込み命令が前記第1メモリマップに対する書込み保護違反を生じた場合に、前記第2メモリマップに対する書き込み命令に書き換える命令書き換えステップと、
を含んだことを特徴とするエミュレーション方法。
本実施例に係るエミュレーションプログラムの概要構成を説明する説明図である。 エミュレーションの動作について説明する説明図である。 ローアドレスプロテクションについて説明する説明図である。 コードレットとターゲット命令の一貫性の保証について説明する説明図である。 エミュレーションプログラム20における書込み保護の概要について説明する説明図である。 CHECK_WRITE(ADDR,VAL)の定義例について説明する説明図である。 CHECK_WRITEの再帰的書き換えについて説明する説明図である。(その1) CHECK_WRITEの再帰的書き換えについて説明する説明図である。(その2) 再帰的な書き換えを回避したCHECK_WRITEの定義例について説明する説明図である。 コードレットの処理について説明するフローチャートである。 CHECK_WRITE処理の詳細について説明するフローチャートである。 ストア命令の処理について説明するフローチャートである。
符号の説明
10 ターゲットプログラム
11 演算処理部
12 メモリ
20 エミュレーションプログラム
21 命令解釈部
22 命令変換部
23 演算処理部
24 メモリマップ作成部
25 実メモリ
26,27 仮想メモリマップ
28 例外ハンドラ
28a 判別部
28b 命令書き換え部
28c 例外処理部

Claims (7)

  1. 対象プログラムの実行環境をソフトウェアで提供するエミュレーションプログラムであって、
    前記対象プログラムが出力した命令を自プログラムの実行環境で処理可能な命令に変換する変換手順と、
    前記対象プログラムが使用するメモリ領域に対し、前記自プログラムの実行環境に基づく書込み保護を施した第1メモリマップと、前記対象プログラムの実行環境および/または前記対象プログラムの命令の内容に基づく書込み保護を施した第2メモリマップと、を作成するメモリマップ作成手順と、
    前記変換手順が出力した書き込み命令が前記第1メモリマップに対する書込み保護違反を生じた場合に、前記第2メモリマップに対する書き込み命令に書き換える命令書き換え手順と、
    をコンピュータに実行させることを特徴とするエミュレーションプログラム。
  2. 前記第2メモリマップは、前記第1メモリマップと同一内容で、アドレスが所定量ずれたメモリマップであることを特徴とする請求項1に記載のエミュレーションプログラム。
  3. 前記命令書き換え手順は、前記第2メモリマップにおける書き込み先が書込み保護されている場合に、書き込み違反時に例外処理に移行する書き込み命令に書き換えることを特徴とする請求項1または2に記載のエミュレーションプログラム。
  4. 前記対象プログラムが出力した命令を解釈する命令解釈手順をさらにコンピュータに実行させ、前記変換手順は、前記命令解釈手順が解釈した書き込み命令が書込み保護違反を生じた場合に、当該命令を含む命令列を変換することを特徴とする請求項1〜3のいずれか一つに記載のエミュレーションプログラム。
  5. 前記命令解釈手順は、前記対象プログラムが出力した命令を解釈する場合に、前記変換手順による変換対象範囲の起点を示す起点情報を作成することを特徴とする請求項4に記載のエミュレーションプログラム。
  6. 対象プログラムの実行環境を仮想的に提供するエミュレーション装置であって、
    前記対象プログラムが出力した命令を自装置が処理可能な命令に変換する変換手段と、
    前記対象プログラムが使用するメモリ領域に対し、前記自装置の動作環境に基づく書込み保護を施した第1メモリマップと、
    前記対象プログラムの実行環境および/または前記対象プログラムの命令の内容に基づく書込み保護を施した第2メモリマップと、
    前記変換手段が出力した書き込み命令が前記第1メモリマップに対する書込み保護違反を生じた場合に、前記第2メモリマップに対する書き込み命令に書き換える命令書き換え手段と、
    を備えたことを特徴とするエミュレーション装置。
  7. 対象プログラムの実行環境を仮想的に提供するエミュレーション方法であって、
    前記対象プログラムが出力した命令を実際の実行環境で処理可能な命令に変換する変換ステップと、
    前記対象プログラムが使用するメモリ領域に対し、前記実際の実行環境に基づく書込み保護を施した第1メモリマップと、前記対象プログラムの実行環境および/または前記対象プログラムの命令の内容に基づく書込み保護を施した第2メモリマップと、を作成するメモリマップ作成ステップと、
    前記変換ステップが出力した書き込み命令が前記第1メモリマップに対する書込み保護違反を生じた場合に、前記第2メモリマップに対する書き込み命令に書き換える命令書き換えステップと、
    を含んだことを特徴とするエミュレーション方法。
JP2008134527A 2008-05-22 2008-05-22 エミュレーションプログラム、エミュレーション装置およびエミュレーション方法 Active JP5115332B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2008134527A JP5115332B2 (ja) 2008-05-22 2008-05-22 エミュレーションプログラム、エミュレーション装置およびエミュレーション方法
US12/409,136 US8543371B2 (en) 2008-05-22 2009-03-23 Write-protected storage medium, write-protected apparatus, and write-protected environment

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008134527A JP5115332B2 (ja) 2008-05-22 2008-05-22 エミュレーションプログラム、エミュレーション装置およびエミュレーション方法

Publications (2)

Publication Number Publication Date
JP2009282774A JP2009282774A (ja) 2009-12-03
JP5115332B2 true JP5115332B2 (ja) 2013-01-09

Family

ID=41342729

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008134527A Active JP5115332B2 (ja) 2008-05-22 2008-05-22 エミュレーションプログラム、エミュレーション装置およびエミュレーション方法

Country Status (2)

Country Link
US (1) US8543371B2 (ja)
JP (1) JP5115332B2 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9396104B1 (en) * 2010-03-22 2016-07-19 Seagate Technology, Llc Accessing compressed data of varying-sized quanta in non-volatile memory
JP5792577B2 (ja) * 2010-11-10 2015-10-14 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 動的バイナリ・トランスレータに関するメモリ管理のための装置、方法、およびコンピュータ・プログラム
JP5565340B2 (ja) * 2011-02-24 2014-08-06 富士通株式会社 試験方法,試験プログラム,及び試験装置
KR101252188B1 (ko) * 2011-05-31 2013-04-05 주식회사 잉카인터넷 가상 메모리 데이터 접근 제어방법
JP5862408B2 (ja) * 2012-03-27 2016-02-16 富士通株式会社 エミュレーション装置、及びエミュレーションプログラム
US9275223B2 (en) * 2012-10-19 2016-03-01 Mcafee, Inc. Real-time module protection
US9806954B2 (en) * 2014-06-03 2017-10-31 Equinix, Inc. Transformation engine for datacenter colocation and network interconnection products
US9710401B2 (en) 2015-06-26 2017-07-18 Intel Corporation Processors, methods, systems, and instructions to support live migration of protected containers

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08147173A (ja) * 1994-11-18 1996-06-07 Seiko Epson Corp エミュレーション装置
AU2743600A (en) * 1999-01-28 2000-08-18 Ati International S.R.L. Executing programs for a first computer architecture on a computer of a second architecture
US8127121B2 (en) * 1999-01-28 2012-02-28 Ati Technologies Ulc Apparatus for executing programs for a first computer architechture on a computer of a second architechture
AU4580300A (en) 1999-04-27 2000-11-10 Transitive Technologies Limited Exception handling method and apparatus for use in program code conversion
US7953588B2 (en) * 2002-09-17 2011-05-31 International Business Machines Corporation Method and system for efficient emulation of multiprocessor address translation on a multiprocessor host
US7594111B2 (en) * 2002-12-19 2009-09-22 Massachusetts Institute Of Technology Secure execution of a computer program
JP4155052B2 (ja) * 2003-02-18 2008-09-24 日本電気株式会社 エミュレータ、エミュレーション方法およびプログラム
US7536682B2 (en) 2003-04-22 2009-05-19 International Business Machines Corporation Method and apparatus for performing interpreter optimizations during program code conversion
GB0309056D0 (en) * 2003-04-22 2003-05-28 Transitive Technologies Ltd Block translation optimizations for program code conversion
GB0623276D0 (en) * 2006-11-22 2007-01-03 Transitive Ltd Memory consistency protection in a multiprocessor computing system

Also Published As

Publication number Publication date
JP2009282774A (ja) 2009-12-03
US8543371B2 (en) 2013-09-24
US20090292522A1 (en) 2009-11-26

Similar Documents

Publication Publication Date Title
JP5115332B2 (ja) エミュレーションプログラム、エミュレーション装置およびエミュレーション方法
JP3944504B2 (ja) 変換索引バッファのレイジー・フラッシング
US7673345B2 (en) Providing extended memory protection
US9201653B2 (en) Binary translator with precise exception synchronization mechanism
US7886293B2 (en) Optimizing system behavior in a virtual machine environment
US8799879B2 (en) Method and apparatus for protecting translated code in a virtual machine
US8479174B2 (en) Method, computer program and computer for analyzing an executable computer file
US20020046305A1 (en) Method for effective binary translation between different instruction sets using emulated supervisor flag and multiple page tables
JP7291149B2 (ja) メモリ・アクセスにおける保護タグ・チェックの制御
KR20220045211A (ko) 캐패빌리티 기입 어드레스 추적
TWI812798B (zh) 用於控制記憶體存取的裝置及方法
JP2011128787A (ja) アドレス変換を高速化する方法及びシステム
TW202132975A (zh) 位址計算指令
TWI787451B (zh) 用於資料處理的方法、設備、電腦程式、與儲存器媒體
KR20230101826A (ko) 캐퍼빌리티들을 사용하여 메모리에 대한 액세스를 제약하기 위한 기술
KR20230017832A (ko) Tag 체킹 장치 및 방법
US10909045B2 (en) System, method and apparatus for fine granularity access protection
De et al. HeapSafe: Securing Unprotected Heaps in RISC-V
TW202403562A (zh) 用於記憶體位址空間之頁面的「讀值只有x」性質
TW202340955A (zh) 使用能力約束記憶體存取之技術
Cashin Automated control of hardware and software-based fault isolation

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110118

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120827

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: 20120918

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121001

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 5115332

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151026

Year of fee payment: 3