(57)【要約】パーティショニング方法はトランスレータが利用して対象コード（１７）の空間を、以後パーティションと呼ぶ複数の領域に分割し、この場合、各パーティションは対象コード（１７）及び該当する目的コード（２１）から成る、異なる基本ブロックセットを含む。パーティショニング方法では、対象コード（１７）の変換表現及び対象コード変換を、対象メモリの複数の非重複領域に分割する。このようにして、対象プログラムによって対象コード（１７）を修正する場合、自己修正コードの影響を実際に受けるパーティションのみを廃棄する必要があり、そして影響を受けないパーティションの全ての変換を維持することができる。このパーティショニング方法は、自己修正コードオペレーションに応答して変換し直す必要のある目的コード（２１）の量を少なくするために有効である。別のプロセスでは、パーティショニング方法によって、自己修正コードも含むマルチスレッド対象プログラムは、コード修正をスレッドセーフな方法で実行することができる。
2007531074.tif 000002
【特許請求の範囲】
【請求項１】
対象コード（１７）の変換中における対象コード（１７）を変換済み目的コード（２１）にグループ化して自己修正対象コード（１７）を明確化する方法であって、
対象コード（１７）を変換済みコードに変換している間と、変換済みコードを続いて実行している間において、前記対象コード（１７）の中の自己修正コードイベントを識別すること、
自己修正コードイベントを識別するときに、前記対象コード（１７）を含むメモリ領域を対象アドレス群から成る少なくとも一つの対象命令グループに分割すること、を備え、
各対象命令グループが、該当する自己修正コードイベントの影響を受ける一以上の範囲の対象コードアドレスを前記メモリに含む、方法。
【請求項２】
請求項１記載の方法において、
各対象命令グループは更に、当該対象命令グループに含まれる対象コード（１７）に対応する変換済み目的コード（２１）に関連付けられる、方法。
【請求項３】
請求項１又２記載の方法において、
各前記対象命令グループは、他の対象命令グループによって記述されるメモリ領域には重複しないメモリ領域を表す、方法。
【請求項４】
請求項１又は２記載の方法において、
各前記対象命令グループは、他の対象命令グループに含まれるメモリ領域に重複し得るメモリ領域を表す、方法。
【請求項５】
請求項１乃至４のいずれか一項に記載の方法において、
自己修正コードイベントは対象コードアドレスの該当する範囲を修正し、
当該方法は更に、
前記メモリに含まれる対象命令グループであって、前記自己修正コードイベントの影響を受ける対象コードアドレスを含む対象命令グループを修正すること、
を備える方法。
【請求項６】
請求項５記載の方法において、
前記対象命令グループを修正することは、
自己修正コードイベントに対応する修正済み対象コード（１７）を含む対象コードアドレスを含むように新規の対象命令グループを生成すること、
新規に生成された対象命令グループの対象コードアドレスに重複する複数範囲の対象コードアドレスを有する既存の対象命令グループに関して、前記対象命令グループが重複しないように、前記新規に生成された対象命令グループの対象コードアドレスに重複する前記既存の対象命令グループから前記対象コードアドレスを消去するべく前記既存の対象命令グループを修正すること、
を含む方法。
【請求項７】
請求項６記載の方法において、
各対象命令グループは更に、当該対象命令グループに含まれる対象コード（１７）に対応する変換済み目的コード（２１）に関連付けられ、
当該方法は更に、
前記自己修正コードイベントに応答して修正された対象命令グループに関連する変換済み目的コード（２１）を消去すること、
前記修正済み対象命令グループに含まれる前記対象コード（１７）に関する新規の目的コード（２１）を変換すること、
を備える方法。
【請求項８】
請求項６又は７記載の方法は更に、
対象命令グループに含まれ、かつ変換済み目的コード（２１）に対応する対象コード（１７）が変換されるときに、当該変換済み目的コード（２１）を当該対象命令グループに関連付けること、
を備える方法。
【請求項９】
請求項８記載の方法において、
各対象命令グループが、変換された特定範囲の、または複数の特定範囲の対象コードアドレスを含むことにより、前記変換された複数の特定範囲の対象コードアドレスがアクティブサブグループを対象命令グループ内に含み、
当該方法は更に、
前記新規に生成された対象命令グループの対象コードアドレスが、既存のいずれかの対象命令グループの前記アクティブサブグループのいずれかの対象コードアドレスと重複するかどうかを判断すること、
前記新規に生成された対象命令グループの対象コードアドレスと重複するアクティブサブグループを有する既存の対象命令グループに関して、自己修正コードイベントに応答して修正された対象命令グループに関連する変換済み目的コード（２１）を消去すること、
前記修正済み対象命令グループに含まれる前記対象コード（１７）に関する新規の目的コード（２１）を変換すること、
を備える方法。
【請求項１０】
請求項９記載の方法において、
各対象命令グループは、変換されておらず、かつ対象命令グループ内で非アクティブサブグループと呼ばれる、一つまたは複数の範囲の対象コードアドレスを含み、
当該方法は更に、前記新規に生成された対象命令グループの対象コードアドレスと重複しないアクティブサブグループを有し、かつ前記新規に生成された対象命令グループの対象コードアドレスと重複する非アクティブサブグループを有する既存の対象命令グループに関して、
前記対象命令グループが重複しないように、前記新規に生成された対象命令グループの前記対象コードアドレスと重複する前記既存の対象命令グループの前記非アクティブサブグループから前記対象コードアドレスを消去するべく前記既存の対象命令グループを修正すること、
前記既存のグループのアクティブサブグループに関連する変換済み目的コード（１）を変更せずにそのままとすること、
を備える方法。
【請求項１１】
請求項１乃至１０のいずれか一項に記載の方法は更に、
対象命令グループの結合を可能にする特徴を有するメモリの中において互いに隣接する対象命令グループを識別すること、
前記隣接する対象命令グループを１つの結合対象命令グループに集約させること、
を備える方法。
【請求項１２】
請求項１乃至１１のいずれか一項に記載の方法において、
前記自己修正コードイベントは対象コード（１７）のデコード中に識別され、
当該方法は更に、
前記変換済み目的コード（２１）の制御フローに、識別済み自己修正コードイベントの表現として特殊な変換構造を挿入すること、
を備える方法。
【請求項１３】
請求項１２記載の方法は更に、前記特殊な変換構造が前記変換済み目的コード（２１）の実行中に現れるのに応答する形で、
前記自己修正コードイベントの影響を受ける前記対象コードアドレスの一つまたは複数範囲を識別すること、
前記識別済み範囲の対象コードアドレスを使用して、メモリの中に前記対象命令グループを生成すること、
を備える方法。
【請求項１４】
請求項１乃至１３のいずれか一項に記載の方法は更に、
現在の対象命令グループ外の対象アドレスへの制御の実際の移動、または可能な移動を表す制御フロー命令を当該現在の対象命令グループの中で識別すること、
を備える方法。
【請求項１５】
請求項１４記載の方法において、
前記制御フロー命令は、前記対象コード（１７）のデコード中に識別され、
当該方法は更に、
前記変換済み目的コード（２１）の前記制御フローに、識別済み制御フローイベントの表現として特殊なエグジット変換構造を挿入すること、
を備える方法。
【請求項１６】
請求項１５記載の方法において、
一つの対象命令グループの対象コード（１７）から異なる第２の対象命令グループの対象コード（１７）に渡される制御フローが特殊変換構造ペアを用いて表現され、前記特殊変換構造ペアが前記エグジット構造とともにエントリー構造を含むことにより、各エグジット構造が、次に実行される後続の対象命令グループに関連する相手側のエントリー構造への特定の参照を含む、方法。
【請求項１７】
請求項１６記載の方法は更に、
現在の対象命令グループに関連する目的コード（２１）の実行中にエグジット構造が現れる場合、制御を現在のパーティションから後続のグループに渡す前に、相手側のエントリー構造が後続の対象命令グループの中に含まれていることを確認すること、
を備える方法。
【請求項１８】
請求項１７記載の方法において、
前記確認することは、
現在の対象命令グループに関連する目的コード（２１）の実行中にエグジット構造が現れる場合であって、前記エグジット構造が、後続の対象命令グループの中に含まれている相手側のエントリー構造に関連付けられていない場合には、このようなエントリー構造を生成すること、
そのエントリー構造を、実行対象の前記後続の対象アドレスを含む適切な後続の対象命令グループに関連付けること、
前記新規に生成されたエントリー構造への特定の参照を行なうために、前記エグジット構造を修正すること、
を含む方法。
【請求項１９】
請求項１６乃至１８のいずれか一項に記載の方法は更に、
全てのパーティションに関するエグジット構造及びエントリー構造を含むボーダーガードセットが存在する場合は、対象命令グループが自己修正コードイベントに応答して消去されるときに、前記エグジット構造及びエントリー構造から成るセットを修正すること、
を備える方法。
【請求項２０】
請求項１乃至１９のいずれか一項に記載の方法は更に、
対象コード（１７）によりマルチスレッドプログラムが定義される場合において、他のスレッドが、前記対象命令グループが別のスレッドによって修正されている間に対象命令グループに入ることを防止すること、
を備える方法。
【請求項２１】
請求項１乃至２０のいずれか一項に記載の方法において、
各対象命令グループは更に、当該対象命令グループに含まれる対象アドレスに対応する変換済み目的コード（２１）に関連付けられ、
各パーティションがエントリー構造及びエグジット構造から成り、かつ対象命令グループの間で渡される制御フローを表すセットを含むことにより、各エグジット構造が、次に実行される後続の対象命令グループの相手側のエントリー構造への特定の参照を含み、
当該方法は更に、
前記対象命令グループをミラーする領域を有するメモリ管理サブシステムを設けることであって、前記メモリ管理サブシステムが、目的コード（２１）、及び対象命令グループに関連するエントリー構造及びエグジット構造を当該対象命令グループに対応する目的コード（２１）とともに保存する、前記対象命令グループをミラーする領域を有するメモリ管理サブシステムを設けること、
特定の対象命令グループに対応する前記メモリ管理サブシステムの全領域を、当該特定の対象命令グループが修正される場合に消去すること、
を備える方法。
【請求項２２】
コンピュータ読み取り可能なストレージ媒体であって、
請求項１乃至２１のいずれか一項に記載の方法を実行するための、コンピュータが実行可能なコンピュータ読み取り可能なコードの形で格納された変換ソフトウェアを有する、媒体。
【請求項２３】
目的プロセッサと、
請求項１乃至２１のいずれか一項に記載の方法を実行するための変換コードと、
を組み合わせた構成。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は概して、コンピュータ及びコンピュータソフトウェアの分野に関し、特に、例えばコードトランスレータ、エミュレータ及びアクセラレータに有用なプログラムコード変換方法及び装置に関する。
【背景技術】
【０００２】
エンベッデッドＣＰＵ及びノンエンベッデッドＣＰＵの両方には、優れたインストラクションセットアーキテクチャ（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ａｒｃｈｉｔｅｃｔｕｒｅｓ：ＩＳＡｓ）が含まれており、このアーキテクチャに関しては、性能を「加速させる」、または、より良好なコスト／性能という利点をもたらすことができる無数の高機能プロセッサにおいて、これらのプロセッサが関連ソフトウェアに透過にアクセスすることができるとする場合に、当該プロセッサに「変換する」ことができる非常に多くのソフトウェアが存在する。時間軸でＩＳＡに拘束され、かつ性能面または市場性の面で未だ進化させることができていない、優れたＣＰＵアーキテクチャが存在することも知られている。このようなアーキテクチャは「複合ＣＰＵ（Ｓｙｎｔｈｅｔｉｃ  ＣＰＵ）」共通アーキテクチャの利点を生かすことができる。
【０００３】
プログラムコード変換方法及び装置は、このようなアクセラレーション機能、トランスレーション機能及び共通アーキテクチャ機能を容易にし、例えば「プログラムコード変換」と題する特許文献１（国際特許公開公報ＷＯ  ００／２２５２１）に記載されている。
【０００４】
対象アーキテキチャに関して設計される対象プログラムを、目的アーキテクチャが実行可能な目的プログラムにプログラムコード変換している間、自己修正を行うコードに関して問題が生じる。「自己修正コード（ｓｅｌｆ−ｍｏｄｉｆｙｉｎｇ  ｃｏｄｅ）」とは、意図的にその固有の対象コードを修正する対象プログラムを指す。プログラムが何故その固有のコードを修正することができるのかについては幾つかの理由があり、自己修正コードの幾つかの例を表１に示す。
【０００５】
【表１】
2007531074.tif 000003
【発明の開示】
【発明が解決しようとする課題】
【０００６】
自己修正コードがダイナミックトランスレータにもたらす主要な問題の一つは、修正された対象コードが、既に変換されている目的コードに一致する可能性があるということである。対象コードに対するこのような修正が行なわれる場合、修正済み対象コードに対する全ての変換を識別し、そしてステイル（ｓｔａｌｅ）として廃棄する必要がある。従って、トランスレータは、修正対象の特定の対象コードアドレスに対応する全ての目的コードシーケンス（すなわち変換）を識別する機能を備える必要がある。ダイナミックトランスレータでは、与えられた対象アドレスに対応する目的コードを検出し、そして消去する操作が難しく、時にはこの操作を実行することさえできない。或る状況においては、最適化を変換中に適用すると、変換によって表示される対象アドレスの範囲に正確に関連づけることができない変換が行なわれる。これらの状況においては、或る対象アドレスのプログラム固有のコードが対象プログラムによって修正される場合、トランスレータはどの該当する変換済み目的コードを無効にすべきかについて識別する手段を持たない。
【０００７】
本発明によれば、添付の請求項に示される装置及び方法が提供される。本発明の好適な形態は、従属請求項及び以下の記述により明らかになる。
【発明を実施するための最良の形態】
【０００８】
以下の記述は、本発明による種々の実施形態に従って実現することができる種々の態様及び利点を要約したものである。この記述は、当業者が、以下に続く詳細な構成に関する説明を一層速やかに理解するべく提示されるものであり、添付される請求項の技術範囲を制限せず、かつ制限することを意図しない。
【０００９】
特に、発明者らは多くの最適化手法を開発してきたが、これらの最適化手法は、高速プログラムコード変換を目的とし、特にランタイムトランスレータ（ｒｕｎ−ｔｉｍｅ  ｔｒａｎｓｌａｔｏｒ）と連動させると有用であり、このランタイムトランスレータは、対象プログラムコードの連続基本ブロックを目的コードへ変換する操作を用い、この場合、第１基本ブロックに対応する目的コードは、次の基本ブロックの目的コードを生成する前に実行される。
【００１０】
一つの好適なプロセスでは、トランスレータはパーティショニング方法を用いて対象コード空間を、以後パーティションと表記することとする複数の領域に分割する。この場合、これらのパーティションは、対象コード及び該当する目的コードから成る、異なる一連の基本ブロックを含む。パーティショニングによって、対象コードの変換表現及び対象コード変換を、対象メモリの複数の非重複領域に分割する。このようにして、対象プログラムの自己修正コードが対象コードを修正する場合、自己修正コードの影響を実際に受けるパーティションのみを廃棄する必要があり、影響を受けないパーティションの全ての変換を維持し得る。このパーティショニング方法は、自己修正コードオペレーションに応答して変換し直す必要のある目的コードの量を少なくするのに有効である。別のプロセスでは、パーティショニング方法によって、自己修正コードも含むマルチスレッド対象プログラムは、コード修正をスレッドセーフな方法で実行し得る。
【００１１】
以下に議論する種々の新規の特徴を実現する例示としての装置を図１に示す。図１は、目的レジスタ１５を含む目的プロセッサ１３を、多くのソフトウェアコンポーネント１９，２０，２１を格納するメモリ１８とともに示しており、このようなメモリ１８は更に、基本ブロックキャッシュ２３、グローバルレジスタストア２７、及び変換対象の対象コード１７のワーキングストレージとなる。これらのソフトウェアコンポーネントは、オペレーティングシステム２０、変換コード１９、及び変換済みコード２１を含む。変換コード１９は、例えば一つのＩＳＡの対象コードを別のＩＳＡの変換済みコードに変換するエミュレータとして、または対象コードを同じＩＳＡのコードである変換済みコードに変換するアクセラレータとして機能する。
【００１２】
変換コード１９すなわちトランスレータを用いるソースコードのコンパイル版、及び、変換済みコード２１すなわちトランスレータ１９により生成された対象コード１７の変換版コードは、例えば、通常マイクロプロセッサまたは他の適切なコンピュータである目的プロセッサ１３で動作するＵＮＩＸ（登録商標）のようなオペレーティングシステム２０と連動して動作する。ここで、図１に示す構造は単なる例示に過ぎず、かつ例えば、本発明によるソフトウェア、方法及びプロセスはオペレーティングシステム内部に含まれる、またはオペレーティングシステムの下位レベルに位置するコードの中で実行され得る。対象コード、変換コード、オペレーティングシステム、及びメモリストレージ機構は、当業者には公知の広範囲に渡る種々のタイプの内のいずれかのタイプとすることができる。
【００１３】
図１による装置では、プログラムコード変換は、変換済みコード２１が動作している間の実行時間に動的に行なわれることが好ましい。トランスレータ１９は変換済みコード２１に従って動作する。変換プロセスの実行パスは制御ループであり、この制御ループは、変換コード１９を実行して対象コード１７のブロックを変換済みコード２１に変換するステップと、その変換済みコードのブロックを実行するステップとを含み、変換済みコード２１の各ブロックの終わりは、制御を変換コード１９に返す命令を含む。別の表現をすると、変換するステップと、対象コードを実行するステップとを交互に行なって、対象プログラム１７の一部のみを一度に変換し、そして第１基本ブロックの変換済みコード２１を後続基本ブロック群の変換の前に実行するようにする。トランスレータ１９の基本の変換単位は基本ブロックであり、これは、トランスレータ１９が対象コード１７を一度に一つの基本ブロックの割合で変換することを意味する。基本ブロックは、厳密に一つのエントリーポイント及び厳密に一つのエグジットポイントが設定されたコードセクションとして公式に定義され、このコードセクションによって、ブロックコードを単一の制御パスに制限する。この理由により、基本ブロック群は基本の制御フロー単位である。
【００１４】
変換済みコード２１を生成するプロセスでは、中間表現（ｉｎｔｅｒｍｅｄｉａｔｅ  ｒｅｐｒｅｓｅｎｔａｔｉｏｎ：ＩＲ）ツリーはトランスレータ１９によって対象コード１７の命令シーケンスに基づいて生成される。ＩＲツリーは、対象プログラムが計算する表現及び実行するオペレーションの抽象表現である。後の時点で、変換済みコード２１はＩＲツリーに基づいて生成される。このようなＩＲツリーを生成する方法及び装置については、例えば２００３年５月１６日出願の「プログラムコード変換のブロック変換最適化」と題する、本出願と同時係属中の米国特許出願番号１０／４３９，９６６に記載されており、この出願の開示を参照することにより当該出願が本発明の開示に含まれる。
【００１５】
ＩＲツリーを生成した後、該当する目的コード２１をＩＲに基づいて生成する。目的コード２１をジェネリック（ｇｅｎｅｒｉｃ）ＩＲから生成するプロセスはこの技術分野では良く知られている。目的コード２１を変換済みブロックの最後に挿入して抽象レジスタをグローバルレジスタストア２７にセーブする。目的コード２１を生成した後、このコードを実行する。
【００１６】
トランスレータ１９はまず、変換済みコード２１を第１基本ブロックの対象命令１７に基づいて生成し、次に第１基本ブロックの変換済みコードを実行する。第１基本ブロックの最後では、変換済みコード２１は制御をトランスレータ１９に返し、次にトランスレータは第２基本ブロックを変換する。次に、第２基本ブロックの変換済みコード２１を実行する。第２基本ブロックの実行の最後では、変換済みコードは制御をトランスレータ１９に返し、次にトランスレータは次の基本ブロックを変換し、このような操作が繰り返される。
【００１７】
従って、トランスレータ１９上で動作する対象プログラムは、交互に繰り返す形で実行される２つの異なるタイプのコード、すなわち変換コード１９及び変換済みコード２１を有する。変換コード１９は、実行時間の前にコンパイラによって、トランスレータ１９の高レベルのソースコードに基づいて生成される。変換済みコード２１は、実行時間全体を通じて変換コード１９により、変換対象プログラムの対象コード１７に基づいて生成される。
【００１８】
対象プロセッサステートの表現は同じようにして、トランスレータ１９コンポーネント及び変換済みコード２１コンポーネントに渡って分割される。トランスレータ１９は対象プロセッサステートを、変数及び／又はオブジェクトのような種々の明示的なプログラミング言語要素に格納し、トランスレータをコンパイルするために使用するコンパイラは、ステート及びオペレーションをどのようにして目的コードの中で実行するかについて決定する。これに対して、変換済みコード２１は対象プロセッサステートを暗示的に目的レジスタ及びメモリロケーションに格納し、これらの目的レジスタ及びメモリロケーションは、変換済みコード２１の目的命令によって直接操作される。
【００１９】
例えば、グローバルレジスタストア２７の低レベル表現は単なる割当てメモリ領域である。この表現は、変換済みコード２１がどのように見え、また、変換済みコード２１が、定義メモリ領域と種々の目的レジスタとの間のセーブ及び復元により抽象レジスタとどのように相互作用するのかを示す。しかしながら、トランスレータ１９のソースコードにおいては、グローバルレジスタストア２７は、高いレベルでアクセスし、操作することができるデータアレイまたはオブジェクトである。変換済みコード２１に関しては、高レベル表現は単に無いだけである。
【００２０】
幾つかの場合においては、トランスレータ１９において静的に、または統計的に判断することができる対象プロセッサステートは、動的に計算されるのではなく、変換済みコード２１に直接エンコードされる。例えば、トランスレータ１９は、フラグが影響する最後の命令の命令タイプに特化される変換済みコード２１を生成することができるが、これは、フラグが影響する最後の命令の命令タイプが変化した場合に、トランスレータが異なる目的コードを同じ基本ブロックに関して生成することを意味する。
【００２１】
トランスレータ１９は、拡張基本ブロック、アイソブロック（ｉｓｏｂｌｏｃｋ）、グループブロック、及びキャッシュ変換ステートの最適化、のような変換最適化を容易にするために特に有用であって、各基本ブロック変換に対応するデータ構造を含み、このような変換最適化については米国特許出願番号１０／４３９，９６６に記載され、かつ、先に述べた文献を参照することによりこのような変換最適化が本発明の開示に含まれる。図２はこのような基本ブロックデータ構造３０を示しており、この構造は、対象アドレス３１、目的コードポインタ３３（すなわち、変換済みコードの目的アドレス）、変換ヒント３４、エントリー及びエグジット条件３５、プロファイリングメトリック３７、先行基本ブロック３８及び後続基本ブロック３９のデータ構造への参照、及びエントリーレジスタマップ４０を含む。図２は更に、基本ブロックキャッシュ２３を示しており、この基本ブロックキャッシュは、対象アドレス毎にインデックスの付された基本ブロックデータ構造、例えば３０，４１，４２，４３，４４．．．の集まりである。一実施形態では、特定の変換済み基本ブロックに対応するデータ構造は、Ｃ＋＋オブジェクトに格納することができる。トランスレータ１９は新規の基本ブロックオブジェクトを基本ブロックの変換時に生成する。
【００２２】
基本ブロックの対象アドレス３１は、対象プログラム１７のメモリ空間における当該基本ブロックの開始アドレスであり、対象プログラム１７が対象アーキテクチャで動作していた場合に基本ブロックが位置したと考えられるメモリロケーションを指す。このアドレスは対象開始アドレスとも呼ばれる。各基本ブロックは或る範囲の対象アドレスに対応する（一のアドレスが各対象命令に対応する）が、対象開始アドレスは基本ブロックの第１命令の対象アドレスである。
【００２３】
基本ブロックの目的アドレス３３は、目的プログラムにおける変換済みコード２１のメモリロケーション（開始アドレス）である。目的アドレス３３は、目的コードポインタ又は目的開始アドレスとも呼ばれる。変換済みブロックを実行するために、トランスレータ１９は目的アドレスを関数ポインタとして処理し、この関数ポインタを修飾参照して変換済みコードを呼び出す（変換済みコードに制御を渡す）。
【００２４】
基本ブロックデータ構造３０，４１，４２，４３，．．．は基本ブロックキャッシュ２３に格納され、このキャッシュは対象アドレスによって体系化される基本ブロックオブジェクトの格納場所である。基本ブロックの変換済みコード２１の実行が終了すると、このコードは制御をトランスレータ１９に返し、更に、基本ブロックの宛先（後続）対象アドレス３１の値をトランスレータに返す。後続基本ブロックが既に変換されているかどうかを判断するために、トランスレータ１９は宛先対象アドレス３１を基本ブロックキャッシュ２３における基本ブロック群（すなわち、既に変換されているブロック群）の対象アドレス３１と比較する。未だ変換されていない基本ブロック群を変換し、そして実行する。既に変換されている（かつ、後述する互換エントリー条件を有する）基本ブロック群を単純に実行する。時間が経つと、現れる基本ブロック群の内の多くの基本ブロックが既に変換されてしまっており、これによって変換コストの増分が小さくなる。従って、変換を必要とするブロックが段々少なくなるため、トランスレータ１９は時間が経過するとともに高速になる。
【００２５】
パーティション（Ｐａｒｔｉｔｉｏｎｓ）
好適な実施形態では、トランスレータ１９は、以後対象命令グループ（ｓｕｂｊｅｃｔ  ｉｎｓｔｒｕｃｔｉｏｎ  ｇｒｏｕｐｓ：ＳＩＧｓ）と呼ぶ複数の対象命令セットを選択して、各ＳＩＧが異なる変換データ構造セット（例えば基本ブロックセット）及び変換済み目的コード２１に関連付けられるようにする方法を用いる。ＳＩＧとＳＩＧに関連する変換データ構造及び目的コード２１との組み合わせを以後、パーティションと呼ぶ。一つのＳＩＧは、複数の対象命令を一つ以上の範囲の対象アドレスに含む。一つの対象アドレスまたは複数範囲の対象アドレスに含まれる命令を幾つかの異なるＳＩＧに含ませることができる。変換済みブロックは、一つのＳＩＧによる変換しか含むことができない。
【００２６】
トランスレータ１９が利用するパーティショニング方法では、制御フローに関する変換１９の表現を複数の対象命令グループ（ＳＩＧｓ）に分割し、これらの対象命令グループを一括して修正することができる。或る場合においては、これらのパーティションは対象プログラムを構成する異なるライブラリ及びオブジェクトファイルに対応するので、パーティションは、ライブラリが対象メモリにマッピングされると、生成され、そして置き換えられ、その後廃棄される。パーティショニング方法は、対象プログラム自体の対象コード１７を修正する（以後「自己修正」と呼ぶオペレーションを行なう）構成の対象プログラムを変換する場合、トランスレータ１９にとって特に有用となり得る。対象コード１７及びこのコードに該当する変換済み目的コード２１を複数のパーティションに分割することにより、影響を受けるパーティション又は複数のパーティションに関連する対象コードが、影響を受けないＳＩＧを有する他のパーティションに構築される重要な情報（例えば変換）に影響を及ぼすことなく修正される場合、当該影響を受けるパーティションまたは複数のパーティションを廃棄することができる。このようなパーティションを使用しない場合、全ての既存の変換を、コード修正の影響を受けない変換でも、全てのコード修正に応答して廃棄する必要がある。
【００２７】
好適な実施形態では、トランスレータ１９は分離データ構造を維持して、変換データ構造をＳＩＧの数だけ複数のパーティションにまとめるようにする。この分離によって多くのブロック変換が可能になる（かつ関連データ構造が生成される）が、これらのブロック変換は、変換済みコードの下位表現を巡回して影響を受ける変換を探索し、そしてそれらの変換を一度に消去するのではなく、１個のパーティションの内部に含めて廃棄し、一挙に取り除く。例えば、一実施形態では、トランスレータ１９は各パーティションの個別の基本ブロックキャッシュ２３を維持する。
【００２８】
好適な実施形態では、トランスレータ１９は、一つのＳＩＧの対象アドレス群が一つの連続する範囲のアドレスを形成するように複数のＳＩＧを定義する。
別の好適な実施形態では、トランスレータ１９は、一つのＳＩＧの対象アドレス群が、（１）一括して修正することができる一つの範囲の連続アドレスに、（２）修正することができる確率が相対的に低い別の複数範囲のアドレス、を加えたアドレスから構成されるように複数のＳＩＧを定義する。これにより、一つのブロックを変換して範囲（１）及び範囲（２）に対応する命令を含むことができるため、更に最適な変換を形成することができる。
【００２９】
トランスレータ１９がパーティションを修正するために実行するステップを図３に示す。対象コード１７が他の対象コードを修正する場合、「修正イベント」をステップ１００でトランスレータ１９により検出する。修正イベントを定義することにより、特定の対象アドレス範囲（上書きされる、消去される、または修正の影響を受ける対象コードの範囲）に対応させる。トランスレータ１９はまず、対象コードがいつ、そしてどこで自己修正される（すなわち、どの対象コードが修正を実行し、そしてどの対象コードが修正される）かについて検出する必要がある。修正イベントは、対象コード１７が修正されるイベントであればどのようなイベントであってもよい。自己修正コードは、対象コード１７が対象データを修正する場合を含まない。対象コード１７の自己修正は多くの形態をとることができ、以下に限定されないが、（ｉ）ファイルをメモリにマッピングする（例えば、ｍｍａｐ（）システムコール）、（ｉｉ）ファイルをメモリから取り除く（例えば、ｍｕｎｍａｐ（）システムコール）、及び（ｉｉｉ）メモリ領域を実行可能にする（例えば、メモリ領域のパーミッションをｍｐｒｏｔｅｃｔ（）システムコールを使用して変更する）を含む。
【００３０】
対象コード１７の修正を、ｍｍａｐ（），ｍｕｎｍａｐ（），またはｍｐｒｏｔｅｃｔ（）のような公知のシステムコールを使用して行なう場合においては、トランスレータ１９は、対象コード１７における当該システムコールに対する全てのコールを検出して修正イベントを検出することができる。トランスレータ１９は、対象コード１７の修正を他の機構により検出することもできる。例えば、多くの対象プロセッサでは、修正されているコードを実行する前に、対象プログラムによってまず、プロセッサの命令キャッシュ（Ｉ−ｃａｃｈｅ）をフラッシュする必要がある。特に、ＰｏｗｅｒＰＣアーキテクチャはこの目的のために特殊な命令「ＩＣＢＩ」（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｃａｃｈｅ  Ｂｌｏｃｋ  Ｉｎｖａｌｉｄａｔｅ）を有し、他のアーキテクチャは同じ目的のために特殊なシステムコールを使用することができる。このようなキャッシュフラッシュ要件を伴なうアーキテクチャでは、トランスレータ１９は修正イベントを、特殊な命令（または特殊なシステムコール）のインスタンスを検出することにより検出することができる。
【００３１】
別の好適な実施形態では、トランスレータ１９は目的オペレーティングシステム２０の機能を使用して、対象コードに対応する目的メモリ領域への全ての書き込みをモニターすることで、修正イベントをステップ１００で検出する。或るシステムでは、システムコールｍｐｒｏｔｅｃｔ（）によってトランスレータ１９はメモリの特定領域を「リードオンリー（ｒｅａｄ  ｏｎｌｙ）」として設定することができる。他のシステムは、ｍｐｒｏｔｅｃｔ（）システムコールの機能と等価な機能を利用してメモリの特定領域をリードオンリーとして定義することができる。リードオンリー領域への書き込みを行おうとすると必ず、トランスレータ１９が検出する信号がトリガーされる。その信号によってトランスレータ１９に、対象コード１７の修正が行われていることが通知され、そしてトランスレータ１９はシグナルコンテキストを使用してどの対象アドレスが上書きされているかを判断する。修正イベントを検出し、そして修正の範囲を確認した（すなわち、対象アドレスが影響を受けた）後、トランスレータ１９によって書き込みを正常に行なうことができる。
【００３２】
別の好適な実施形態では、トランスレータ１９は特殊な目的コードシーケンスを、対象コード１７における変換されたメモリへの各書き込み動作に関して生成し、この目的コードシーケンスによって、書き込みアドレスが対象データではなく対象コード１７に対応するかどうかをチェックすることで、修正イベントをステップ１００で検出する。
【００３３】
本発明の種々の実施形態の各々では、修正イベントが検出された後、修正によって新規のパーティションがステップ１０２で生成され、この場合、新規のパーティションのＳＩＧは対象命令を修正済み範囲に含む。更に、既存のパーティションを次にステップ１０４で修正することで、新規に生成されたパーティションを明確にする。既存のパーティションを修正するために、トランスレータ１９は図４に示すステップを実行する。トランスレータ１９が新規のパーティションを検出済み修正イベントの結果として生成すると、まずステップ１１０において、新規に生成されるパーティションのＳＩＧがいずれかの既存のパーティションのＳＩＧと交差するかどうかが判断される。既存のパーティションのＳＩＧとの重複が判明しない場合、既存のパーティションをステップ１１６においてそのまま残す。いずれか既存のパーティションが、修正済み範囲と交差する（重複する）対象アドレス範囲を含んでいたＳＩＧを有する場合、このような交差するパーティションは全てステップ１１２で壊され、そしてステップ１１４で再生成されるが、これらの操作は、以下に記載するような、更に別のパーティション最適化が適用される或る状況においては行われない。各交差パーティションが壊される場合、ステップ１１４において、残りの新規のパーティションが、元のＳＩＧにおける残りの範囲または残りの複数範囲の対象アドレスに関して生成される。その残りの新規のパーティションは、交差パーティションから交差する修正済み範囲を差し引いて構成される元のＳＩＧを含むようになる。パーティションを壊す場合、当該パーティションに関連する全ての既存の目的コード２１の変換を廃棄する。新規に生成される各パーティションからまず、変換済み目的コード２１を全て無くすが、これは、当該パーティションのＳＩＧから連続して現れる全ての対象コード１７に対する変換をスクラッチ（ｓｃｒａｔｃｈ）から行う必要があることを意味する。
【００３４】
図５Ａ及び５Ｂは新規のパーティションを既存のパーティションセット及びそのパーティションの幾つかに重複する修正イベントから生成する例を示している。簡単な例を提示するために、図５Ａ及び５Ｂは複数のＳＩＧを表わしており、これらのＳＩＧでは、各ＳＩＧに関する対象命令セットが一つの連続範囲を形成するが、これは各ＳＩＧが一つの連続範囲を含むための必須の方法ではない。修正の前に、４つのパーティションＡ，Ｂ，Ｃ，及びＤのＳＩＧが図５Ａに示すように対象アドレス空間内に存在する。従って本例における対象コード１７は、メモリ内のポイント５０からポイント５２にまで延びる対象コードアドレス範囲を修正する。修正範囲５４はパーティションＡ及びＣのＳＩＧと交差し、そしてパーティションＢのＳＩＧの全体を含む。図５Ｂは、修正イベントに応答して既存のパーティションに生じる変化を示している。パーティションＭは修正済み範囲５４の全体に渡って生成される。パーティションＡ及びＣが壊され、パーティションＡ’及びＣ’が、修正範囲５４とは交差しないパーティションＡ及びＣの残りの部分に対応するようにそれぞれ生成される。パーティションＢが壊され、パーティションＢのＳＩＧは新規のパーティションＭに完全に包含される。パーティションＤの範囲は修正範囲５４に重複せず、パーティションＤは影響を受けないでそのまま残る。
【００３５】
トランスレータ１９の別の好適な実施形態では、遅延パーティション割り当て最適化をパーティショニング方法に利用してトランスレータ１９の性能を向上させる。メモリを節約するために、一つのパーティションの全データ構造を、パーティションが生成される時点で割り当てるということはしない。その代わりに、パーティションのＳＩＧを予約する非アクティブパーティション（ｉｎａｃｔｉｖｅ  ｐａｒｔｉｔｉｏｎ）をまず生成するが、トランスレータ１９は、最初に下位の変換データ構造及びメモリのいずれかを割り当てるということはしない。このようにして、初期の非アクティブパーティションは基本的に空のスケルトン（ｓｋｅｌｅｔｏｎ）状態のパーティションであり、これらのパーティションによって単に特定のＳＩＧを予約するのみである。修正イベントによって修正されているとトランスレータ１９が識別する対象メモリ空間領域は、或る状況においては、実際に目的コード２１に変換されることはない。これは、対象メモリ領域がデータに対応する、または対象メモリ領域が実行されることのないコードに対応するためと考えることができる。非アクティブパーティションまたはスケルトン状態のパーティションを最初に生成することにより、無駄にメモリリソースを使用することによるオーバヘッドを回避することができる。
【００３６】
一つのパーティションのＳＩＧの内部の対象コード１７が実際に変換されると、非アクティブパーティションはライブ（ｌｉｖｅ）パーティションまたはアクティブ（ａｃｔｉｖｅ）パーティションになり、パーティションデータ構造が初期化される。従って、対象プログラムのデータセグメント（例えば、データとしてｍｍａｐ（）処理され、かつ対象プログラムがコードとして実行しないファイル）に対応する修正イベントによって、新規の非アクティブパーティションが生成されるが、下位の変換データ構造及びメモリ領域が割り当てられることはない。パーティションの全データ構造は、変換がパーティションの対象アドレス範囲の内部で行なわれる場合にのみ実現される。非アクティブパーティションは対象コード変換を含まないので、これらのパーティションは、ライブパーティションに関連するメモリオーバーヘッド及び性能オーバーヘッドを伴うことなく生成し、消去し、またはサイズ変更することができる。
【００３７】
或る状況では、トランスレータ１９は、メモリの大きな領域を新規パーティションに割り当てて目的コード２１の変換を保存することができる。目的コード１７は連続になるように割り当てて不要なフラグメンテーションを回避することが好ましい。トランスレータ１９は、トランスレータが大きなメモリ領域を使用する場合には、目的コード１７をより確実に連続的にさせることができる。誤って検出されるパーティション（すなわち、実行可能な対象コードに対応しない対象メモリ範囲の修正イベント）は時として、有用なメモリリソースを何の目的もなく消費してしまう。一つのパーティション内部の対象コード１７が実際に変換される（そして実行される）場合にのみ変換データ構造及びメモリを割り当てることにより、遅延パーティション割り当ては、パーティショニングに関連する修正イベント検出機構が誤って正しいとすることによるトランスレータ１９への悪影響を回避させる。
【００３８】
別の好適な実施形態では、トランスレータ１９は、対象コード１７を変換するのではなく解釈するインタープリタ機能を有する。これによってトランスレータ１９は対象コード１７の変換を遅らせ、当該対象コード１７に関連するパーティション割り当てを回避することができる。このようなインタープリタ機能を容易にする変換方法及び装置については、２００３年９月４日出願の「インタープリタの最適化をプログラムコード変換中に行なう方法及び装置」と題する、本出願と同時係属中の英国特許出願番号０３  ２０７１６．４に記載されており、この出願の開示を参照することにより当該出願が本発明の開示に含まれる。
【００３９】
別の好適な実施形態では、トランスレータ１９は、縮小可能なパーティションの最適化をパーティショニングプロセスに適用してトランスレータ１９の性能を向上させるが、この場合、修正イベントに応答してパーティションを消去するのではなく、パーティションのＳＩＧを、パーティションにおいて実際に使用されるアドレスセットを含む相対的に小さなＳＩＧに縮小する。縮小済みの小さなＳＩＧは、修正イベントによって定義される範囲を含まない。修正イベントの検出に最初に応答する形で、新規のパーティションが一つのＳＩＧを含むようにして生成され、このＳＩＧは、アドレスの値が修正の範囲によって定義される開始アドレス及び終了アドレスを有する範囲を含む。しかしながら動作状態において、変換される対象アドレスの実際の範囲は、パーティションの定義済み範囲よりも狭くすることができる。実際に変換された、または将来変換するためにフラグが設定されている全ての対象アドレスをパーティション内部に含むＳＩＧは、「アクティブＳＩＧ」またはパーティションの使用済みＳＩＧと呼ばれる。パーティション内における、変換されていない対象アドレスの残りのＳＩＧは、「非アクティブＳＩＧ」と呼ばれる。トランスレータ１９の性能を最適化するために、パーティションのＳＩＧ範囲を、パーティションの初期定義済みアドレスセットから、それよりも小さいセットに狭くすることができる。この小さいセットは、非アクティブＳＩＧと修正範囲との交差点に対応する非アクティブアドレス範囲の少なくとも一部を取り除くことにより、パーティションのアクティブアドレス範囲をアクティブＳＩＧに含むものである。
【００４０】
縮小可能なパーティションに関するコンセプトはあらゆる方法によって実現することができるが、一の好適な実施形態では、トランスレータ１９は、アクティブアドレス範囲または変換済みアドレス範囲を各パーティションのＳＩＧの中に維持する。一つのパーティションが生成されると、パーティションのアクティブＳＩＧは最初は空である。変換の間、各対象命令が変換されると、この命令の対象アドレス（「変換済みアドレス」）を現在のパーティションのアクティブＳＩＧと比較する。変換済みアドレスが現在のアクティブＳＩＧの外側に位置する場合、アクティブＳＩＧを拡大して変換済みアドレスを含むようにする。従って、アクティブＳＩＧは、対象コード変換が進行するにつれて大きくなる。
【００４１】
縮小可能なパーティションの最適化を行なうために、トランスレータ１９は図６に示すステップを実行する。トランスレータ１９が修正イベントをステップ２００で検出すると、ステップ２０２において、新規のパーティションを修正範囲を含むＳＩＧを使用して生成する。次にトランスレータ１９はステップ２０４において、修正範囲が既存のパーティションの初期定義済みＳＩＧと重複するかどうかを判断する。重複がない場合、ステップ２０６では、既に定義されている既存のパーティションをそのまま残す。重複がある場合、トランスレータ１９はステップ２０８で、修正範囲が実際にパーティションのアクティブＳＩＧと重複するかどうかを判断する。修正範囲がアクティブＳＩＧと重複しない場合、ステップ２１０において、トランスレータ１９は、パーティション内の変換データ構造を消去することなく、単純にパーティションの初期定義済みＳＩＧのサイズを変更する。その理由は、初期定義済みパーティションＳＩＧは、パーティションが生成された、先の修正イベントにより定義されるパーティションの可能な範囲を表すが、アクティブＳＩＧは、変換される実際の対象アドレスセットを表すからである。従って、アクティブＳＩＧと重複しない修正は、パーティション内のいずれの変換も無効とはしない。これは、変換済み対象アドレスが修正済み対象アドレスとは異なり、したがって修正済み対象アドレスの影響を受けないことをトランスレータ１９が把握するためである。パーティションのＳＩＧが少なくともアクティブ範囲を含むようにＳＩＧのサイズを変更することにより、パーティション内に保存される変換を当該パーティションに保持することができ、消去する必要がない。他方、修正範囲がパーティションのアクティブＳＩＧと重複する場合、トランスレータ１９はステップ２１２で、上に記載したようにパーティション全体を消去する必要がある。
【００４２】
次に図７Ａ及び７Ｂを参照すると、縮小可能なパーティションの最適化が例示されている。図７Ａ及び７Ｂに示すパーティションは、図５Ａ及び５Ｂに示すものとほぼ同じであるが、パーティションＡ及びＣが対象アドレスアクティブ範囲５６及び５８をそれぞれ含む点が異なる。修正の前に、４つのパーティションＡ，Ｂ，Ｃ，及びＤが図７Ａに示すように存在する。次に対象コードは、メモリのポイント５０からポイント５２にまで延びる対象コードアドレス範囲を修正する。修正範囲５４は、パーティションＡの初期定義済みパーティション範囲と交差するが、修正範囲はパーティションＡのアクティブ範囲５６とは交差しない。図７Ｂは、修正イベントに応答して既存のパーティションに生じる変化を示している。パーティションＭが修正済み範囲５４に関して生成された後、パーティションＡの範囲は、パーティションＡにおける変換に影響を与えることなく狭くすることができる。それとは反対に、本例では、修正範囲５４がパーティションＣのアクティブ範囲５８と交差することが分かる。従って、パーティションＣの範囲は単純には狭くすることができず、かつパーティションＣを壊す必要があり、壊すことにより新規のパーティションＣ’を、修正範囲５４とは交差しないパーティションＣの残りの部分に関して生成する。パーティションＢを壊し、パーティションＢの範囲を完全に新規のパーティションＭに含める。パーティションＤは影響を受けないでそのまま残る。
【００４３】
次に図８Ａ〜８Ｅを参照すると、縮小可能なパーティションの最適化が例示されており、この最適化では、複数のアクティブ範囲及び非アクティブ範囲を含むＳＩＧ３００が存在する。図８Ａは、初期定義済みＳＩＧ３００が対象アドレス空間３０２に現れるときの様子を示している。ＳＩＧ３００は２つの対象コードアドレス範囲３０４及び３０６を含む。図８Ｂに示すように、対象コードアドレス範囲３０４，３０６の各々は、対象コードアドレスアクティブ範囲３０８，３１０をそれぞれ含む。ＳＩＧ３００の残りの対象アドレスは、非アクティブ範囲３１２，３１４，３１６に位置する非アクティブ対象コードアドレスである。修正イベントが生じると、対象コードは図８Ｃに示すように、対象コードアドレス範囲を修正して新規のＳＩＧ３１８を生成する。新規に生成されるＳＩＧ３１８の範囲はＳＩＧ３００の初期定義済み対象コードアドレス範囲３０４と交差し、この範囲３０４では、ＳＩＧ３１８の範囲はＳＩＧ３００のアクティブ範囲３０８と交差しないが、ＳＩＧ３００の非アクティブ範囲３１４と交差する。ＳＩＧ３１８の範囲の領域を決定した後、対象アドレス範囲３１４を図８Ｄに示すように、ＳＩＧ３００のアクティブ範囲３０８における変換に影響を与えることなく狭くすることができる。非アクティブ範囲３１４は、ＳＩＧ３１８との交差範囲３２０の対象アドレスを取り除いて縮小済み非アクティブ範囲３１４’を生成することにより縮小する。図８Ｅは、修正イベントに応答してＳＩＧ３００の初期定義済み対象アドレス範囲３０４，３０６に生じる変化を示している。図から分かるように、初期定義済み対象アドレス範囲３０４は上記のように、アクティブ範囲３０８及び非アクティブ範囲３１２，３１４’を含む対象アドレス範囲３０４’に縮小される。対象アドレス範囲３０６は、新規ＳＩＧ３１８の生成の影響を受けずそのままとなる。
【００４４】
トランスレータ１９はほとんどの修正イベントをデコード時に検出することができるが、修正対象の実際の対象アドレスは変換済みコード２１が実行されるまで認識することができない。従って、トランスレータ１９がデコード中に、対象コード１７の修正、または修正が生じたことを示す通知を検出すると、トランスレータ１９は現在のブロック変換を終了させ、そして現在のブロックの直ぐ後に、トランスレータに修正イベントを通知するための通知を挿入する。
【００４５】
トランスレータ１９の一実施形態では、パーティショニング方法をトランスレータ１９の中で特殊ブロックを援用して実行する。特殊ブロックは、特定の対象アドレスに対応し得るが対象コードの変換を表さないブロックである。これとは異なり、変換ブロックは、特定の開始対象アドレスから始まる特定の対象コードシーケンスの変換を表わす。その代わり、特殊ブロックは、ブロックが実際に実行される前の変換の間に目的コードストリームに挿入されるトランスレータ１９の特殊アクションを含む。実際、特殊ブロックは特殊変換構造であり、この変換構造は軽量の変換アクションを実行し、これらの変換アクションは、目的コード制御フローの特定ポイントに埋め込むことができ、高価なコンテキストスイッチを目的コードから変換ループに戻す必要がない。
【００４６】
特殊ブロックは、正常な目的コードではなく擬似目的コード（ｐｓｅｕｄｏ−ｔａｒｇｅｔ  ｃｏｄｅ）を含む。正常な目的コードは或る対象コードシーケンスの変換を表わす。擬似目的コードは人工の（すなわち変換されない）目的コードシーケンスから成り、人工の目的コードシーケンスは、目的コードで直接書かれる、または高レベルのプログラミング言語（例えばＣ＋＋）で書かれ、かつコンパイルされてトランスレータ１９が生成する目的コードと同じ呼び出し規則を有する。特殊ブロックの例として、本明細書において議論するノティファイブロック（ｎｏｔｉｆｙＢｌｏｃｋｓ）及びボーダーガードブロック（ｂｏｒｄｅｒ  ｇｕａｒｄ  ｂｌｏｃｋｓ）が挙げられる。
【００４７】
好適な実施形態では、トランスレータ１９は「ノティファイブロック」と呼ぶ特殊ブロックを変換済みプログラムの制御フローの内、自己修正対象コードを含むブロックの直ぐ後に続くポイントに挿入する。ノティファイブロックは「特殊な」変換構造である。なぜなら、変換ブロックとは異なり、ノティファイブロックはいずれの特定の対象コードの変換も表すことがなく、修正イベントを表すからである。実際に修正を実行する対象コード１７は現在のブロックの一部として変換される。ノティファイブロックは現在のブロックの後続ブロックとして挿入される。従って、修正を変換済みの現在のブロックにおいて実行した直ぐ後に、後続のノティファイブロックがトランスレータ１９に通知して、当該修正に応答して適切なアクションを実行させる（すなわち、パーティション調整）。修正イベントに続く対象コード１７は、ノティファイブロックの後続ブロックになる新規ブロックにおいて変換される。
【００４８】
実行時の目的コード２１の中でノティファイブロックに達すると、トランスレータ１９には、修正済みコードの対象アドレス範囲が通知される。トランスレータ１９はこの情報を使用して新規パーティションを生成し、この新規パーティションによって、上に記載したように既存のパーティションを変更する、または壊す。
【００４９】
自己修正対象コードを含むブロック（ノティファイブロックの先行ブロック）は、修正イベントの識別後直ぐに終了する。なぜなら、修正によって現在のパーティションが無効になり得るからである。修正済み対象コードは次の対象命令となることができ、次の対象命令では、トランスレータは、旧バージョンの既存の変換を実行するのではなく、新規修正済みバージョンの当該命令を変換し、実行する必要がある。例えば、ＰｏｗｅｒＰＣアーキテクチャでは、ブロックはキャッシュフラッシュ命令の後に終了する必要がある。従って、修正イベントが検出されると、変換の現在ブロックを終了させ、そしてノティファイブロックを後続ブロックとして挿入する。
【００５０】
ノティファイブロックはまた、現在の対象アドレス及び互換性リストのコピーをノティファイブロックの先行ブロックからノティファイブロックの後続ブロックに渡す。通知が行なわれた後、変換が後続ブロックにおいて次の対象命令から再開される。現在のパーティションをオペレーションの結果として壊す場合、ノティファイブロックは、現在のパーティションに置き換わる新規パーティションへの安全な移行を処理するが、この際、コピー済み対象アドレス及び互換性リストを使用して新規パーティションの後続ブロックを初期化する。これによって、新規パーティションへの移行の間に消去され得るデータを参照するという問題を回避することができる。
【００５１】
変換ブロックはパーティション境界で終了する必要があり、パーティションの生成に伴う悪影響が最適化に及び得る場合でも、悪影響が無い状態の最適化がコードの大部分に対して行なわれるようにする。悪影響が無い状態で一括して変換されるコード部分は、パーティションが形成されているので別々のブロックとして変換され、従って最適化の範囲が狭くなり、かつ変換ループへの戻りの回数が増える。例えば、本出願と同時係属中であり、本発明の譲受人と同じ譲受人に譲渡され、この出願の内容を本明細書において参照することにより当該出願が本発明の開示に含まれることになる米国特許出願番号１０／４３９，９６６に記載される拡張ブロック最適化及びグループブロック最適化のような最適化はパーティション境界によって制限される。この理由により、本パーティショニング方法に適用してトランスレータ１９の性能を向上させることができる一つの最適化は、プログラム自体の対象コード１７を修正しないと分かっている複数の対象プログラムに対するものであり、これらの対象プログラムによって、全ての対象メモリを一つのパーティションに集約して全ての対象コード１７が一つのパーティションに含まれるようにする。
【００５２】
対象メモリの集約は、多くの方法により行なうことができる。一つのアプローチでは、正常なオペレーションでは修正されないと分かっているライブラリセットを一つのパーティションに集約する。対象プログラムが必要とし、かつこの不変セットの一部ではない残りのライブラリは別々のパーティションに正常なライブラリとして格納される。これにより、残りの可変のライブラリ及び他の対象コードの対象コード修正に応答する機能を維持しながら、不変パーティション内の変換を更に効率的に行なうことができる。
【００５３】
対象メモリ集約を行なうための別のアプローチでは、正常なオペレーションでは修正されないことが分かっている対象コードセットを包含する対象アドレス領域（１）を全パーティションのＳＩＧに付加するが、これらのパーティションそれぞれが、可変とすることができる他の領域（２）を含むので、パーティションの可変領域の対象コード修正に応答する機能を維持しながら、パーティションの可変とすることができる領域から不変領域に達する制御フローの変換を更に最適に生成することができる。パーティションの領域（２）の全体を包含する対象コード修正が行なわれる場合、パーティションの全体を消去してメモリを節約する。
【００５４】
パーティションの範囲は正しく定義する必要がある。なぜなら、パーティションの範囲はトランスレータ１９の性能に影響するからである。パーティションが小さすぎると、制御フローは頻繁にボーダーガードを通って渡される（以下に記載する）。パーティションが大きすぎると、わずかなコード修正でも不必要に変換済みコードの大きな部分を無効にしてしまう。このような制約の正しいバランスは、パーティションサイズを選択する場合に、このサイズがトランスレータ１９の性能に関わってくるので考慮する必要がある。最適化は、生成される特定のパーティションが性能に悪影響を与えると判断される場合にパーティションに適用することができる。デフォルトとして、パーティションサイズは修正イベント検出機構により決定される。例えば、トランスレータ１９がランタイムライブラリのｍｍａｐ（）を検出すると、ライブラリ全体を包含する新規のパーティションが生成される。
【００５５】
パーティショニングに適用してトランスレータ１９の性能を向上させることができる一つの最適化方法は、パーティションの集約である。例えば、ＰｏｗｅｒＰＣ  ＩＣＢＩキャッシュフラッシュ命令は１ページの実行可能なメモリを無効化する。しかしながら、複数ページの対象コード１７が一度に修正される場合、対象プログラムは、連続ページのメモリを無効化する連続するＩＣＢＩ命令を含み得る。上に記載したパーティショニング機構では、この構成によって複数の連続する、ページ全体に関わるパーティションが生成される。従って、パーティション機構の一の最適化では、連続するキャッシュフラッシュ命令を検出し、そして修正済み範囲を一つの「集約済み」パーティションのＳＩＧに合成させる。
【００５６】
パーティション集約最適化を用いる一つの実施形態では、新規のパーティションが生成されると、トランスレータ１９は、対象コードの新規パーティションのＳＩＧに隣接し、かつ先行するＳＩＧを有する既存のパーティション（すなわち、新規パーティション生成の副産物として生成される残りパーティションではない）が在るかどうかをチェックする。そうである場合は、先行する既存パーティションのＳＩＧの範囲を拡大して新規パーティションのＳＩＧの範囲を含むようにして２つのパーティションを効率的に集約することができる。集約が行なわれた後、新規パーティションは個別の表現を有する必要がない。
【００５７】
ボーダーガード（Ｂｏｒｄｅｒ  Ｇｕａｒｄｓ）
好適な実施形態では、トランスレータ１９は、追加レベルの間接化を、複数のパーティションの間を進む制御フローに挿入する。トランスレータ１９は、本明細書ではボーダーガードと呼ぶ特殊なプレースホルダー（代替物）を、パーティション境界に接するブロック群に対して使用して、先行ブロックが、既に変換されている後続ブロックが未だ在るかどうかをチェックすることができるようにする。このアプローチにより、先行ブロックに対して、これらのブロックの後続ブロックが消去される時間を効率的に通知することができる。トランスレータ１９は、ボーダーガード構造ペアを、対象プログラムの制御フローがパーティション境界を横切る全てのポイント、別名ボーダークロッシング（ｂｏｒｄｅｒ  ｃｒｏｓｓｉｎｇｓ）と呼ぶポイントに挿入する。ボーダーガードペアは、エグジットボーダーガード（ｅｘｉｔ  ｂｏｒｄｅｒ  ｇｕａｒｄ）及びエントリーボーダーガード（ｅｎｔｒｙ  ｂｏｒｄｅｒ  ｇｕａｒｄ）を含む。エグジットボーダーガードは特殊ブロックであり、このブロックは先行ブロックの後に、かつ同じパーティションの中に付加される。エントリーボーダーガードはデータ構造であり、このデータ構造は該当するエグジットボーダーガードブロックを後続ブロックに接続する。同じパーティション内部の変換済みブロックの場合、制御フローは先行ブロックから直接、後続ブロックに渡される。異なるパーティションの内部に位置するブロックの場合（すなわちボーダークロッシングの場合）、制御は先行ブロックからエグジットボーダーガードに向かって進み、次に後続ブロックの位置を特定するためにエントリーボーダーガードを使用して、エグジットボーダーガードが制御を後続ブロックに渡す。
【００５８】
エントリーボーダーガードはトランスレータ１９のプレースホルダーとして機能し、この場合、エントリーボーダーガードは、これらのガードの相手側のエグジットボーダーガードへの参照を保持する。各エグジットボーダーガードのデータ構造も、このガードの相手であるエントリーボーダーガードへの参照を含む。一つのエグジットボーダーガードを実行することにより、既にインスタンス化されている後続ブロックが未だに在ることを確認する。ボーダーガードブロックは、パーティションクロッシング（ｐａｒｔｉｔｉｏｎ  ｃｒｏｓｓｉｎｇｓ）の明示的表現となることによりブックキーピング（ｂｏｏｋｋｅｅｐｉｎｇ：スレッドの生成及び終了のサイクルのつじつま合わせ）機能を提供する。トランスレータ１９が特定のパーティションを消去する場合、トランスレータは当該パーティション内部の全てのエントリーボーダーガードを巡回して該当するエグジットボーダーガードを見付け出す。パーティションが消去されると、このような各エグジットボーダーガードへの相手側（エントリーボーダーガード）による参照はヌルに設定される。或る実施形態では、トランスレータ１９は、所与のパーティションのエントリーボーダーガードの全てを一括して保存して、パーティションが消去される場合にこれらのエントリーボーダーガードを効率的に巡回することができるようにする。例えば、一実施形態では、トランスレータ１９は、各パーティションのエントリーボーダーガードリストを維持して、このようなリストがエントリーボーダーガードが生成される、または消去されるときには必ず更新されるようにする。
【００５９】
従って、エグジットボーダーガードを実行する場合、単に、このガード自体に対する相手側（エントリーボーダーガード）による参照をチェックすることにより、このガードの後続ブロックが未だ存在することを確認することができる。参照が定義されている場合、有効な変換済み後続ブロックが存在し、かつ制御が該当するエントリーボーダーガードを通過して後続ブロックに進む（従って後続パーティションに進む）。参照が定義されていない場合、エグジットボーダーガードは有効な変換済み後続ブロックを認識することがなく、これは有効な変換済み後続ブロックが存在したが消去された、またはこのエグジットボーダーガードが実行されたことがないので、後続ブロックを求めることができなかったことを意味する。相手側による参照が定義されていない場合、新規のエントリーボーダーガード及び後続ブロックは、該当するパーティションの基本ブロックキャッシュをチェックする、または後続ブロックを変換することにより得られる。エグジットボーダーガードの観点からすると、変換されたがその後消去された後続ブロックは、変換されたことのない後続ブロックからは判別することができない。
【００６０】
ボーダーガードペアによって実現するパーティションボーダークロッシングの明示的表現によって、パーティション消去のプロセスが更に効率的になる。パーティションを消去するために、トランスレータ１９は、消去済みブロック（すなわち、消去済みパーティション内の既に変換されているブロック）への全ての参照を識別し、そして無効にする必要がある。ボーダーガードのような或るブックキーピング機構が無い場合には、トランスレータ１９は、非常に多くの変換済みブロックを巡回して、どのブロックが後続ブロックを消去済みパーティション内に有していたかを識別し、これらの廃棄済み後続ブロックへの参照を取り除く必要がある。パーティションを消去するプロセスを更に効率的にする他に、ボーダーガードブロックによって、マルチスレッドプログラムに関して以下に述べるように、スレッドセーフなボーダークロッシングが容易になる。
【００６１】
パーティションをボーダーガードが存在する状態で消去するために、トランスレータ１９は、（ｉ）消去対象のパーティションを指している全てのエグジットガードの相手側へのリンクを無効にし、そして（ｉｉ）消去対象のパーティションの全ての後続パーティションに、これらの後続パーティションの該当するエントリーガードを廃棄することができることを通知し、そして（ｉｉｉ）消去済みパーティションに属する全ての変換構造及び目的コード２１を消去する。第１ステップ（ｉ）では、トランスレータ１９は、パーティション内のエントリーボーダーガードの全てを巡回し、そしてこれらのエントリーボーダーガード外の相手側のエグジットボーダーガードをリセットして、全ての先行パーティションに、消去済みパーティションが無効であることを効果的に通知する。パーティション消去の第２ステップ（ｉｉ）では、パーティション内のエグジットボーダーガードの全てを巡回して、後続パーティションに、これらの後続パーティションの該当するエントリーガードを廃棄することができることを通知する。一実施形態では、第２ステップは、消去済みパーティションの各エグジットボーダーガードを巡回することにより行なわれる。別の実施形態では、パーティション内のエントリーガードの全てに、該当するエグジットガードを含む先行パーティションのインデックスを付ける。この場合においては、消去済みパーティションは、各後続パーティションに通知を１回だけ行なうだけで済み、従って各後続パーティションは消去対象の該当するエントリーポイントを識別することができる。
【００６２】
パーティショニングにおけるマルチスレッドプログラム
マルチスレッド対象プログラムによって、パーティショニングを利用する場合のトランスレータ１９に困難が生じる。すなわちパーティションの消去はスレッドセーフな方法で実行する必要がある。詳細には、所与のパーティションが消去されている間、スレッドが当該パーティションに入ることを防止する必要がある。これによって、制御が必ず有効な変換に進み、かつ消去済み、または無効なブロックには進まないことが保証される。パーティションが消去されてしまい、そして再生成されると、スレッドは（新規に空になった）パーティションに入ることが許可される。
【００６３】
好適な実施形態では、トランスレータ１９は１つのグローバルミューテックス（相互排除）（「グローバルパーティションロック」）を使用して複数の特定のパーティションオペレーションをシリーズ化するが、これらのオペレーションでは、（ｉ）制御フロージャンプが複数のパーティションの間で行なわれ（すなわちボーダークロッシング）、そして（ｉｉ）パーティションの消去、及び適用可能な場合に再生成が行なわれる。従って、エグジットボーダーガードはグローバルパーティションロックを、制御が、このエグジットボーダーガードの該当するエントリーボーダーガードに渡される前に取得する必要がある。同様に、ノティファイブロックはグローバルパーティションロックを、パーティションを壊す前に取得する必要がある。一つ以上のパーティションの消去及びそれに続く再生成を必要とする修正イベントの場合、このような消去及び再生成の全てがグローバルパーティションロックによって保護されながら自動的に行なわれるが、これは、このようなオペレーションの全てが、ロックを解放することなく連続して行なわれることを意味する。トランスレータ１９は各スレッドに関するパーティション識別子を維持し、この識別子は、制御が複数のパーティションの間で渡されるときに変化させる。この変化は、グローバルパーティションロックを保持しながら、ボーダーガードペアによって行なわれる。
【００６４】
別の好適な実施形態では、トランスレータ１９は１つのグローバルミューテックス（「グローバルパーティションロック」）を使用して複数の特定のパーティションオペレーションをシリーズ化するが、これらのオペレーションでは、（ｉ）エントリーボーダーガードを生成し、そして（ｉｉ）パーティションの消去、及び適用可能な場合に再生成を行なう。従って、エグジットボーダーガードはグローバルパーティションロックを、エグジットボーダーガードが、新規のエントリーボーダーガード及び後続ブロックを取得し得る、または既に消去されているエントリーボーダーガード及び後続ブロックを再生成し得る前に、取得する必要がある。パーティション消去が行なわれる場合、ノティファイブロックは、グローバルパーティションロックを消去の前に取得し、次に消去機構がまず、この機構により収集されたエントリーボーダーガードを巡回して、これらのエントリーボーダーガードの相手側による参照を該当するエグジットブロックから取り除くオペレーションを実行する。このオペレーションでは、相手側による個々の参照を、他の実行スレッドが存在する状態で安全に取り除くことができる必要がある。一旦、エントリーボーダーガードの全てにこのオペレーションを適用してしまうと、残りの消去オペレーションを完了させる必要があり、かつこのようにして修正されたエグジットボーダーガードのいずれかが、消去済みパーティションに含まれるＳＩＧの新規の後続ブロックを取得し得る前には必ず、グローバルミューテックスを解放する必要がある。
【００６５】
次に図９Ａ及び９Ｂを参照すると、パーティション境界をまたぐ変換済みプログラムの制御フローが示され、両方の図はパーティション境界をまたぐ場合と、またぐことが無い場合のものである。図９Ａは、パーティショニングが採用されていない場合、または制御フローが１つのパーティションの内部に留まる場合のトランスレータ１９における特定の対象プログラムの制御フローを示している。制御が対象ブロックＡ４０１から対象ブロックＢ４０３に、次に対象ブロックＣ４０５に、更に対象ブロックＤ４０７に渡される。対象プログラムコードの観点からすると、ブロックＢ４０３はブロックＡ４０１の後続ブロックであり、ブロックＣ４０５はブロックＢ４０３の後続ブロックであり、そしてブロックＤ４０７はブロックＣ４０５の後続ブロックである。
【００６６】
パーティション境界４０９が存在していた、または図９Ａの対象ブロックＢと対象ブロックＣとの間に生成されていた状況では、図９Ｂに示すように、パーティション境界４０９を横切る場合に、制御は必ずボーダーガードペアを通過して進むことになる。ブロックＡ４０１及びブロックＢ４０３は共にパーティション４１５の内部に位置し、ブロックＣ４０５及びブロックＤ４０７は共にパーティション４１７の内部に位置する。変換済み対象プログラムでは、制御はブロックＡ４０１から直接ブロックＢ４０３に渡される。なぜなら、ブロックＡ４０１及びブロックＢ４０３は共に同じパーティション４１５の内部に位置するからである。しかしながら、ブロックＢ４０３からブロックＣ４０５への制御の移動は、パーティション境界を横切る。従って、制御はブロックＢ４０３からエグジットボーダーガード４１１に渡される。上に記載したように、エグジットボーダーガード４１１は、このガードの該当するエントリーボーダーガード４１３が消去されていないことをチェックする。マルチスレッドプログラム（以下に述べる）では、エグジットボーダーガードがグローバルパーティションロックも取得して、パーティション境界をスレッドセーフな方法で横切ることができるようにする。次に、制御がエグジットボーダーガードブロック４１１からこのガードの該当するエントリーボーダーガード４１３に渡される。このようにして実行がパーティション４１７に渡される。マルチスレッドプログラム（以下に述べる）では、エントリーボーダーガードは、スレッドがこの時点でパーティション４１７に位置することを表わすために現在のスレッドのパーティション識別子を変更し、そして次にグローバルパーティションロックが解放される。一旦、パーティション４１７に位置してしまうと、制御はエントリーボーダーガード４１３からブロックＣ４０５に渡され、そして次にブロックＣ４０５から直接ブロックＤ４０７に渡される。
【００６７】
メモリ管理
メモリ管理は、ダイナミックバイナリトランスレータ１９の種々の実施形態では重要な事項である。プログラムを変換して一つのアーキテクチャで実行することにより別のアーキテクチャで実行することができるという、メモリに対する要求が高い。メモリに対するこの要求は、本出願と同時係属中の米国特許出願番号１０／４３９，９６６に記載されているアイソブロック、拡張ブロック、及びグループブロックのような最適化を導入する場合に一層高くなる。なぜなら、これらの最適化の各々によって、一つの対象コード１７シーケンスを複数の変換によって表現することができるからである。修正イベントでは、パーティションを消去する、従ってパーティションに含まれる全ての変換データ（すなわちブロック構造及び目的コード）を消去する必要がある。
【００６８】
好適な実施形態では、トランスレータ１９はトランスレータ自体のメモリ管理サブシステムを提供し、このサブシステムは、対象コードパーティションをミラーする。これらのパーティションは、全ての変換データ構造を、それらが対応する対象コード１７領域によってグループ化するように構成される。無効にされる可能性のある対象コード１７の各部分は、一緒になって一つのパーティションを形成する。従って、関連する全ての変換データ構造は明確に定義された同じ目的メモリ領域に含まれる。パーティションが無効にされる場合、当該パーティションに関連する変換データの全て（変換構造及び目的コード）を一括して取り除くことができ、全ての構造を個々に取り除く必要がない。
【００６９】
この特定の実施形態では、トランスレータ１９は全てのメモリ割り当てをメモリソース（ｍｅｍｏｒｙＳｏｕｒｃｅ）オブジェクトを通して行なう。各パーティションは一つの該当するメモリソースを有する。複数のメモリソースはメモリをオペレーティングシステムから、ｍｍａｐ（）システムコールのような従来の手段を通して取得するが、これらのメモリソースは大量のメモリを取得する。他の変換コード（擬似目的コードを含む）はメモリを必要に応じて（すなわち小量のメモリを）取得するが、オペレーティングシステムから直接取得するのではなく、パーティションのメモリソースを経由して取得する。これにより、トランスレータ１９の性能を、下位のメモリ関連システムコールの数及び頻度を減らすことにより向上させることができる。メモリソースはまた、メモリソースの全コンテンツを一度にフラッシュする機能を提供する。メモリソースは、実際に下位のメモリを取り除く、または単純にメモリソースが当該メモリを使用して行なった「割り当て」の全てを廃棄する（すなわち、下位メモリを保持しながら既存のものを全て取り払う）ことによりフラッシュを実行することができる。
【００７０】
トランスレータ１９のメモリサブシステムはまた、パーティションを消去するプロセスを簡単にする。パーティションを消去するために、トランスレータ１９は、（ｉ）後続パーティションの全てのエグジットガードの相手側（エントリーガード）とのリンクを無効にし、（ｉｉ）全ての後続パーティションに、これらのパーティションの該当するエントリーガードを廃棄することができることを通知し、そして（ｉｉｉ）パーティションに属する全ての変換構造及び目的コードを消去する必要がある。メモリサブシステムが無い場合、第３ステップ（ｉｉｉ）では、トランスレータは、パーティションを経由して収集される変換構造及び目的コードを巡回して各構造を個々に取り除く必要がある。メモリサブシステムが在る場合、パーティションの構造の全てを、単にメモリソースをフラッシュすることにより一度に取り除くことができる。
【００７１】
種々の好適な実施形態について示し説明してきたが、当業者であれば、種々の変更及び変形を添付の請求項に定義する本発明の技術範囲から逸脱しない範囲において加え得る。
本出願に関連する本明細書と同時に、または本明細書よりも先に提出され、かつ本明細書を用いて公に調査することができる全ての論文及び文書に関心が向けられることになる。このような論文及び文書の全ての内容は、本明細書を参照することにより本発明の開示に含まれる。
【００７２】
本明細書に開示する特徴の全て（全ての添付の請求項、要約、及び図を含む）、及び／又はこのようにして開示される全ての方法またはプロセスのステップの全ては、このような特徴及び／又はステップの少なくとも或る部分が相容れない組合せを除き、どのような組合せでも組み合わせることができる。
【００７３】
本明細書に開示する各特徴（全ての添付の請求項、要約、及び図を含む）は、特に断らない限り、同じ、等価な、または同様の目的を達成する別の特徴により置き換えることができる。従って、特に断らない限り、開示する各特徴は一般的な一連の等価な、または同様な特徴の一例に過ぎない。
【００７４】
本発明はこれまでの実施形態（複数の実施形態）の詳細に限定されない。本発明は、本明細書に開示する複数の特徴（全ての添付の請求項、要約、及び図を含む）の一つの新規のいずれかの特徴、またはこれらの特徴の新規のいずれかの組合せ、或いはこれまでに開示したいずれかの方法またはプロセスの複数のステップの一つの新規のいずれかのステップ、またはこれらのステップの新規のいずれかの組合せに拡張することができる。
【図面の簡単な説明】
【００７５】
本明細書の一部に組み込まれ、本明細書の一部を構成する添付の図は、現時点において好適と思われる実施形態を示し、次の説明の通りである。
【図１】本発明の実施形態を適用することができる装置のブロック図である。
【図２】本発明の例示としての実施形態による基本ブロックデータ構造及びキャッシュを示す模式図である。
【図３】変換中に用いるパーティショニング方法を示すフロー図である。
【図４】パーティション修正を示すフロー図である。
【図５Ａ】パーティショニング方法におけるパーティションの生成及び修正を示す例の模式図である。
【図５Ｂ】パーティショニング方法におけるパーティションの生成及び修正を示す例の模式図である。
【図６】縮小可能なパーティションの最適化方法を示すフロー図である。
【図７Ａ】縮小可能なパーティションの最適化方法を使用する場合の、パーティションの生成及び修正を示す例の模式図である。
【図７Ｂ】縮小可能なパーティションの最適化方法を使用する場合の、パーティションの生成及び修正を示す例の模式図である。
【図８Ａ】縮小可能なパーティションの最適化方法を使用する場合の、アクティブＳＩＧ範囲及び非アクティブＳＩＧ範囲を有するパーティションの生成及び修正を示す例の模式図である。
【図８Ｂ】縮小可能なパーティションの最適化方法を使用する場合の、アクティブＳＩＧ範囲及び非アクティブＳＩＧ範囲を有するパーティションの生成及び修正を示す例の模式図である。
【図８Ｃ】縮小可能なパーティションの最適化方法を使用する場合の、アクティブＳＩＧ範囲及び非アクティブＳＩＧ範囲を有するパーティションの生成及び修正を示す例の模式図である。
【図８Ｄ】縮小可能なパーティションの最適化方法を使用する場合の、アクティブＳＩＧ範囲及び非アクティブＳＩＧ範囲を有するパーティションの生成及び修正を示す例の模式図である。
【図８Ｅ】縮小可能なパーティションの最適化方法を使用する場合の、アクティブＳＩＧ範囲及び非アクティブＳＩＧ範囲を有するパーティションの生成及び修正を示す例の模式図である。
【図９Ａ】本発明のトランスレータによる複数のパーティションの間の制御フローを示す例の模式図である。
【図９Ｂ】本発明のトランスレータによる複数のパーティションの間の制御フローを示す例の模式図である。
【図１】
2007531074.tif 000004
【図２】
2007531074.tif 000005
【図３】
2007531074.tif 000006
【図４】
2007531074.tif 000007
【図５Ａ】
2007531074.tif 000008
【図５Ｂ】
2007531074.tif 000009
【図６】
2007531074.tif 000010
【図７Ａ】
2007531074.tif 000011
【図７Ｂ】
2007531074.tif 000012
【図８Ａ】
2007531074.tif 000013
【図８Ｂ】
2007531074.tif 000014
【図８Ｃ】
2007531074.tif 000015
【図８Ｄ】
2007531074.tif 000016
【図８Ｅ】
2007531074.tif 000017
【図９Ａ】
2007531074.tif 000018
【図９Ｂ】
2007531074.tif 000019
【国際調査報告】
2007531074.tif 000020
2007531074.tif 000021
2007531074.tif 000022