(57)【特許請求の範囲】
【請求項１】
第１のページ・サイズの第１のメモリを有する対象実行環境における実行を目的としたバイナリ・コンピュータ・コードの少なくとも１つの第１のブロックを、前記第１のページ・サイズとは異なる第２のページ・サイズの第２のメモリを有する第２の実行環境における実行のための少なくとも１つの第２のブロックへと変換するための動的バイナリ・トランスレータ装置であって、
前記第１のメモリのメモリ・ページ特性に応じて、前記第１のメモリの少なくとも１つのアドレスを前記第２のメモリのアドレスにマッピングするためのリダイレクト・ページ・マッパと、
前記第２のブロックの実行中にメモリ障害を検出し、障害カウントをトリガしきい値まで累算することを実行するように動作可能なメモリ障害挙動検出器と、
前記障害カウントが前記トリガしきい値に達したことに応じて、前記第２のブロックを廃棄し、ページ・テーブル・ウォークにより再マッピングされたメモリ参照を用いて前記第１のブロックを再変換済みブロックへと再変換することを実行するように動作可能な再生成コンポーネントと、
を備える、装置。
【請求項２】
前記第１のメモリの前記メモリ・ページ特性がページ保護特性を備える、請求項１に記載の装置。
【請求項３】
前記第１のメモリの前記メモリ・ページ特性がファイル裏付けメモリ特性を備える、請求項１または２に記載の装置。
【請求項４】
さらに前記再生成コンポーネントが、前記第１のメモリの少なくとも１つのアドレスの前記第２のメモリのアドレスへの前記マッピングが同じアドレスを戻す場合に、前記ページ・テーブル・ウォークをバイパスするように動作可能である、請求項１から３のいずれか一項に記載の装置。
【請求項５】
さらに前記再生成コンポーネントが、メモリ・アクセスが再マッピングを必要としないタイプのメモリへのメモリ・アクセスとして識別される場合に、前記ページ・テーブル・ウォークをバイパスするように動作可能である、請求項１から４のいずれか一項に記載の装置。
【請求項６】
第１のページ・サイズの第１のメモリを有する対象実行環境における実行を目的としたバイナリ・コンピュータ・コードの少なくとも１つの第１のブロックを、前記第１のページ・サイズとは異なる第２のページ・サイズの第２のメモリを有する第２の実行環境における実行のための少なくとも１つの第２のブロックへと変換するための動的バイナリ・トランスレータを操作する方法であって、
リダイレクト・ページ・マッパが、前記第１のメモリのメモリ・ページ特性に応じて、前記第１のメモリの少なくとも１つのアドレスを前記第２のメモリのアドレスにマッピングするステップと、
メモリ障害挙動検出器が、前記第２のブロックの実行中にメモリ障害を検出し、障害カウントをトリガしきい値まで累算するステップと、
再生成コンポーネントが、前記障害カウントが当該トリガしきい値に達したことに応じて、前記第２のブロックを廃棄し、ページ・テーブル・ウォークにより再マッピングされたメモリ参照を用いて前記第１のブロックを再変換済みブロックへと再変換するステップと、
を含む、方法。
【請求項７】
前記第１のメモリのメモリ・ページ特性がページ保護特性を備える、請求項６に記載の方法。
【請求項８】
前記第１のメモリのメモリ・ページ特性がファイル裏付けメモリ特性特徴を備える、請求項６または７に記載の方法。
【請求項９】
さらに前記再生成コンポーネントが、前記第１のメモリの少なくとも１つのアドレスの前記第２のメモリのアドレスへの前記マッピングが同じアドレスを戻す場合に、前記ページ・テーブル・ウォークをバイパスするように動作可能である、請求項６から８のいずれか一項に記載の方法。
【請求項１０】
さらに前記再生成コンポーネントが、メモリ・アクセスが再マッピングを必要としないタイプのメモリへのメモリ・アクセスとして識別される場合に、前記ページ・テーブル・ウォークをバイパスするように動作可能である、請求項６から９のいずれか一項に記載の方法。
【請求項１１】
請求項６から１０のいずれか一項に記載の方法のステップをコンピュータに実行させる、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動的バイナリ・トランスレータの分野に関し、より具体的には、動的バイナリ・トランスレータにおけるメモリ管理に関する。
【背景技術】
【０００２】
動的バイナリ・トランスレータは、コンピューティングの技術分野で良く知られている。動的バイナリ・トランスレータは、通常は命令の基本ブロックの形の入力命令を受け入れ、それらをあるコンピューティング環境での実行に好適な対象プログラム・コード（subject program code）から、異なるコンピューティング環境での実行に好適な目標プログラム・コード（target program code）に変換するように動作する。この変換が最初の実行時に対象プログラム・コード上で実行されるため「動的」という用語が使用され、実行に先立って実施され、静的再コンパイルの形として特徴付けることができる静的変換と区別される。多くの動的バイナリ・トランスレータでは、最初の実行時に変換されたコードの基本ブロックが、その後の再実行時に使用するために保存される。
【０００３】
あるコンピュータ・アーキテクチャおよびオペレーティング・システム（対象アーキテクチャ／対象ＯＳ）からのアプリケーション・コード（対象プログラム）を、第２の互換性のないコンピュータ・アーキテクチャおよびオペレーティング・システム（目標アーキテクチャ／目標ＯＳ）上で実行するために必要な動的バイナリ・トランスレータに関して直面する可能性のある問題の１つが、２つのプラットフォームによってメモリ管理に使用されるページ・サイズの相違である。これは特に、目標ＯＳが、対象ＯＳによって使用されるよりも大きなページ・サイズのみをサポートしている場合に問題となる。例示的なシナリオは、ｘ８６  Ｌｉｎｕｘ（Ｒ）プラットフォームがＰｏｗｅｒ  Ｌｉｎｕｘ上でエミュレートされている場合である。ここでは、対象ＯＳは４ｋページを提供するが、目標ＯＳは一般に６４ｋページを提供するように構成されている。（Ｌｉｎｕｘは米国、他の諸外国、またはその両方における、Ｌｉｎｕｓ  Ｔｏｒｖａｌｄｓの登録商標である。）
【０００４】
この状況では、次の２つの明確な問題が発生する。
【０００５】
１）対象プログラムの動作（semantic）に適合させるために十分なほど小さい粒度でページ保護をすることが容易にできない。図１に示されるように、たとえば対象プログラムがメモリの隣接する３ページに異なる保護を割り振ろうとする場合、例示的な対象メモリ・マップ１００は４ｋのページ・サイズを有し、例示的な目標メモリ・マップ１０２は６４ｋのページ・サイズを有するため、目標ＯＳは要求された割り振りを提供できない可能性がある。
【０００６】
対象プログラムが、アドレス０および０ｘ２０００のページには書込み保護を適用するが、他のページには適用しない場合、動的バイナリ・トランスレータは（目標オペレーティング・システムを介して）０から０ｘ１００００までの領域のみを書込み保護することができ、書き込み可能ページおよび書き込み不可ページの両方に必要な保護制約を満たすことはできない。
【０００７】
２）単一の目標ページ・サイズ領域内で異なるタイプのメモリを混合することができない。たとえばオペレーティング・システムは、匿名メモリ（anonymous memory）およびファイル裏付けメモリ（file-backed memory）のマッピングをサポートすることができる。ここで、匿名メモリは、それをマッピングする対象プログラムに対してのみ可視である。他方、ファイル裏付けメモリへの変更はストレージ内のファイルへ再コミットされるため、そのファイルの他のユーザも観察することができる。目標オペレーティング・システムは、それ独自のページ・サイズの倍数でのみマッピングを提供するため、トランスレータは単一のページ内で２つの異なるマッピングをサポートすることができない。
【０００８】
図２に示される例では、対象プログラムはアドレス０および０ｘ２０００でファイルの２ページをマッピングしている。目標ＯＳは、目標ページ・サイズ領域のみをマッピングできるため、ここではファイルの６４ｋページ内でのマッピングを選択している。しかし、次に（対象が匿名メモリを要求した）０ｘ１０００でのメモリへの何らかの書き込みがファイルに再コミットされることになり、結果として不正な挙動が発生する。同様の問題が、２つのプロセスが匿名メモリの単一領域を共有する共有匿名マップ、および、オペレーティング・システムが異なるプロセス間で共有され任意の場所でプロセスのアドレス・スペースに接続可能なメモリ領域を割り振る従来の共有メモリなどの、他の種類のメモリ・マッピングにも当てはまる。
【０００９】
この問題に緊密に関係するのが、ファイルのマッピング部分である。オペレーティング・システムは、一般に、ファイル全体ではなくファイルの特定部分をマッピングするための手段を提供し、ここではマッピングされる部分が、通常、ファイルへのページ位置合わせオフセットで開始および終了する。たとえば長さ０ｘ４００００のファイルの場合、アプリケーションは、開始＋０ｘ３０００から開始＋０ｘｂ０００までの領域のみをマッピングするように選択してよい。目標オペレーティング・システムがページ・サイズ・オフセットのみをサポートする場合、マッピングに使用可能な最も小さい部分は、開始から開始＋０ｘ１００００までとなり、これは対象プログラムの要求に十分緊密に対応するものではない。この問題は、マップ・タイプの混合と同じ手段で対処可能であるため、本開示の目的では２つの問題は同様であるとみなされるものとする。
【００１０】
次に、ページ保護エミュレーションの基本的な問題に対する知られた手法について論じる。３つの既存の手法が知られている。第１の手法は、基礎となるハードウェアがサポートできる場合に、より低い粒度での保護を可能にするように目標オペレーティング・システムを修正することである。こうすることにより、大幅なランタイム・オーバヘッドなしに必要な保護が提供できるが、オペレーティング・システムの修正が必要であり、さらにハードウェアがより低い粒度でサポートできる必要があるため、必ずしも実行可能であるとは限らない。
【００１１】
第２の手法は、動的バイナリ・トランスレータについて、対象アドレスと目標アドレスとの間に非線形マッピングを提供することである。その結果として、必要な領域よりも大きな領域をマッピングし、どの目標アドレスがあらゆる所与の対象アドレスに対するマッピングを含むかを記述したページ・テーブルを提供することにより、任意の必要なマッピングがサポート可能となる。この技法では、目標ページは任意のアドレスでトランスレータによってマッピング可能である。その結果として、必要な保護が提供可能となり、ランタイム時に対象アドレスが対応する目標マップに変換される。変換は、Ｉｎｔｅｌ  ＩＡ−３２アーキテクチャ・マニュアル、ボリューム３Ａに記載されているように、従来のページ・テーブルで実行することができる。こうしたページ・テーブルはソフトウェアで容易に実装可能であるが、各アドレスについてアドレス変換を実行するコストは高く、受容可能な性能を達成するのは困難な可能性がある。この技法に従った例示的なマッピングが図３に示されている。
【００１２】
第３の手法は、対象アドレスと目標アドレスとの間に線形マッピングを提供するが、保護のみをエミュレートするためのソフトウェアを使用する。こうした技法については、米国特許出願公開第２０１０／００３０９７５Ａ１号に詳細に記載されている。この技法の場合、すべてのページは読み取り可能および書き込み可能の両方としてマッピングされる。対象プログラムに代わって各メモリ・アクセス動作が実行される前に、テーブルから保護情報を抽出し、この情報をアクセスされる予定のアドレスに挿入する高速ルックアップが実行される。結果として対象プログラムによって要求された保護に従い、許可されるべきでないアクセスは失敗となる。これにより、何らかのランタイム・オーバヘッドがもたらされるが、各アクセスに対する全ページ・テーブル・ルックアップほどのコストはかからない。
【００１３】
前述の第２の問題についても３つの既存の手法が知られており、これらはページ保護エミュレーションについて前述した手法と類似するものと考えることができる。
【００１４】
第１の手法は、対象プログラムのマッピング要求を追加のエミュレーションなしに直接サポートできるようにするのに十分な低い粒度のマッピングをサポートするように目標オペレーティング・システムを修正することである。こうすることにより、最も小さなランタイム・オーバヘッドが実現されるが、実際には、オペレーティング・システムが全体にわたって異なるページ・サイズを認識していなければならないため、単により低い粒度のページ保護を与えるよりも困難であることが分かる。また、オペレーティング・システムが動的バイナリ・トランスレータ開発者の完全な制御の下にない場合、このオプションは非実用的であることが十分に分かる。
【００１５】
ページ保護問題について説明した第２の手法は、単一の目標ページ内での異なるマップの混合の問題も解決する。対象アドレスから目標アドレスへの非線形変換を提供することによって、マップの任意の組み合わせが提供される。結果として対象プログラムは、実際にはたとえどこか他の場所にマッピングされている場合であっても、要求された場所に存在するように見える。しかし前述のように、この手法はかなりのランタイム・オーバヘッドをもたらすため、全体の性能が許容できないものとなる可能性がある。
【００１６】
第３の手法は、対象プログラムによってアクセスできないように、（任意の使用可能な手段によって）要求された場所で直接マッピングできない領域を保護する。本手法は、米国特許出願公開第２０１０／００３０９７５Ａ１号でも説明がなされている。その後、要求されたマッピングはアドレス・スペース内のどこか他の場所で実行される。結果として対象プログラムは直接アクセスすることができない。対象プログラムがこれらの領域にアクセスした場合、障害が発生し、信号が動的バイナリ・トランスレータに送達される。動的バイナリ・トランスレータによるプログラム状態の検査によって、どのアドレスにアクセスされているかが決定され、この時点で信号ハンドラは要求されたアドレスを決定するためにアドレス変換を実行することができる。次に信号ハンドラ内でアクセスがエミュレートされ、動作が完了した対象プログラムに制御が戻される。図４は、アドレス０ｘ４０００でどのようにマップが保護されるか、および、信号ハンドラによって０ｘＦ００００００００のマップの一部１０４へどのようにアクセスがリダイレクトできるのかを示す。
【００１７】
この方法は、多くの場合良好な性能を提供するが、直接アクセスできない領域が非常に頻繁に使用される場合、多くの障害を処理するコストが非常に高くなる。
【先行技術文献】
【特許文献】
【００１８】
【特許文献１】米国特許出願公開第２０１０／００３０９７５Ａ１号
【非特許文献】
【００１９】
【非特許文献１】Ｉｎｔｅｌ  ＩＡ−３２アーキテクチャ・マニュアル、ボリューム３Ａ、インテル・コーポレーション
【発明の概要】
【発明が解決しようとする課題】
【００２０】
したがって、対象コンピューティング環境と目標コンピューティング環境との間でのメモリ管理における相違によって動的バイナリ・トランスレータに課せられる制約を克服する、改良された方法を有することが望ましい。
【課題を解決するための手段】
【００２１】
したがって本発明は、第１の態様において、第１のページ・サイズの第１のメモリを有する対象実行環境における実行を目的としたバイナリ・コンピュータ・コードの少なくとも１つの第１のブロックを、第１のページ・サイズとは異なる第２のページ・サイズの第２のメモリを有する第２の実行環境における実行のための少なくとも１つの第２のブロックへと変換するための、動的バイナリ・トランスレータ装置を提供する。装置は、第１のメモリのメモリ・ページ特性に応じて、第１のメモリの少なくとも１つのアドレスを第２のメモリのアドレスにマッピングするためのリダイレクト・ページ・マッパと、第２のブロックの実行中にメモリ障害を検出し、障害カウントのトリガしきい値までの累算を実行するように動作可能なメモリ障害挙動検出器と、障害カウントがトリガしきい値に達したことに応じて当該第２のブロックを廃棄し、ページ・テーブル・ウォークにより再マッピングされたメモリ参照を用いて当該第１のブロックを再変換済みブロックへと再変換することを実行するように動作可能な再生成コンポーネントを備える。
【００２２】
好ましくは、第１のメモリのメモリ・ページ特性はページ保護特性を備える。好ましくは、第１のメモリのメモリ・ページ特性はファイル裏付けメモリ特性を備える。好ましくは、さらに再生成コンポーネントは、第１のメモリの少なくとも１つのアドレスの第２のメモリのアドレスへの当該マッピングが、同じアドレスを戻す場合に、ページ・テーブル・ウォークをバイパスするように動作可能である。好ましくは、さらに再生成コンポーネントは、メモリ・アクセスが、再マッピングを必要としないタイプのメモリへのメモリ・アクセスとして識別される場合に、ページ・テーブル・ウォークをバイパスするように動作可能である。
【００２３】
第２の態様では、第１のページ・サイズの第１のメモリを有する対象実行環境における実行を目的としたバイナリ・コンピュータ・コードの少なくとも１つの第１のブロックを、第２のページ・サイズの第２のメモリを有する第２の実行環境における実行のための少なくとも１つの第２のブロックへと変換するための動的バイナリ・トランスレータを操作する方法が提供される。第２のページ・サイズは第１のページ・サイズとは異なるものである。方法は、第１のメモリのメモリ・ページ特性に応じて、リダイレクト・ページ・マッパが、第１のメモリの少なくとも１つのアドレスを第２のメモリのアドレスにマッピングするステップと、メモリ障害挙動検出器が、第２のブロックの実行中にメモリ障害を検出し、障害カウントをトリガしきい値まで累算するステップと、障害カウントがトリガしきい値に達したことに応じて、再生成コンポーネントが、第２のブロックを廃棄し、ページ・テーブル・ウォークにより再マッピングされたメモリ参照を用いて当該第１のブロックを再変換済みブロックへと再変換するステップを含む。
【００２４】
好ましくは、第１のメモリのメモリ・ページ特性はページ保護特性を備える。好ましくは、第１のメモリのメモリ・ページ特性はファイル裏付けメモリ特性を備える。好ましくは、さらに再生成コンポーネントは、当該第１のメモリの少なくとも１つのアドレスの当該第２のメモリのアドレスへの当該マッピングが、同じアドレスを戻す場合に、当該ページ・テーブル・ウォークをバイパスするように動作可能である。好ましくは、さらに再生成コンポーネントは、メモリ・アクセスが、再マッピングを必要としないタイプのメモリへのメモリ・アクセスとして識別される場合に、当該ページ・テーブル・ウォークをバイパスするように動作可能である。
【００２５】
第３の態様では、コンピュータ・システムにロードされ、そこで実行された場合、第２の態様に従った方法の諸ステップを当該コンピュータ・システムに実行させるコンピュータ・プログラムが提供される。
【００２６】
したがって、本発明の好ましい諸実施形態は、有利なことに、対象コンピューティング環境と目標コンピューティング環境との間でのメモリ管理における相違によって動的バイナリ・トランスレータに課せられる制約を克服する、改良された方法を提供する。
【００２７】
次に、本発明の好ましい実施形態について、添付の図面を参照しながら単なる例示として説明する。
【図面の簡単な説明】
【００２８】
【図１】従来技術に従った書き込み保護を有する対象メモリおよび目標メモリの配置構成を、簡略化された形で示す概略図である。
【図２】従来技術に従ったファイル裏付けおよび匿名メモリを有する対象メモリおよび目標メモリの配置構成を、簡略化された形で示す概略図である。
【図３】従来技術に従った書き込み保護を有する対象メモリおよび目標メモリの改良された配置構成を、簡略化された形で示す概略図である。
【図４】従来技術に従ったファイル裏付けおよび匿名メモリを有する対象メモリおよび目標メモリの改良された配置構成を、簡略化された形で示す概略図である。
【図５】本発明の好ましい実施形態に従った物理コンポーネントまたは論理コンポーネントの装置または配置構成を、簡略化された形で示す概略図である。
【図６】本発明の好ましい実施形態に従ったシステムの操作方法を示す、流れ図である。
【図７】本発明の好ましい実施形態の実装に好適な対象メモリおよび目標メモリの配置構成を、簡略化された形で示す概略図である。
【図８】本発明の好ましい実施形態に従った対象メモリおよび目標メモリの配置構成を、簡略化された形で示す概略図である。
【図９】本発明の好ましい実施形態に従った例示的ページ・マップ構造を、簡略化された形で示す概略図である。
【図１０】本発明の好ましい実施形態に従った他の例示的ページ・マップ構造を、簡略化された形で示す概略図である。
【発明を実施するための形態】
【００２９】
図５には、本発明の好ましい実施形態に従った物理コンポーネントまたは論理コンポーネントの装置または配置構成が簡略化された概略図の形で示されている。図５では、第１のページ・サイズの第１のメモリ５０６を有する対象実行環境５０４における実行を目的としたバイナリ・コンピュータ・コードの少なくとも１つの第１のブロック５０２を、第２のページ・サイズの第２のメモリ５１２を有する第２の実行環境５１０における実行のための少なくとも１つの第２のブロック５０８へと変換するための、動的バイナリ・トランスレータ装置５００が示されている。第２のページ・サイズは第１のページ・サイズとは異なるものである。動的バイナリ・トランスレータ装置５００は、第１のメモリ５０６のメモリ・ページ特性に応答して、第１のメモリ５０６の少なくとも１つのアドレスを第２のメモリ５１２のアドレスにマッピングするためのリダイレクト・ページ・マッパ５１４を備える。加えて、動的バイナリ・トランスレータ装置５００は、第２のブロック５０８の実行中にメモリ障害を検出し、障害カウントをトリガしきい値まで累算することを実行するように動作可能なメモリ障害挙動検出器５１６と、障害カウントがトリガしきい値に達したことに応じて、第２のブロック５０８を廃棄し、ページ・テーブル・ウォークにより再マッピングされたメモリ参照を用いて第１のブロック５０２を第２のブロック５０８の再変換済みバージョンへと再変換することを実行するように動作可能な再生成コンポーネント５１８を備える。
【００３０】
本発明の好ましい実施形態に従うシステムに関して見てきたが、次に、本発明の好ましい実施形態に従った動的バイナリ・トランスレータの操作方法をフローチャートの形式で示した図６に目を向けてみる。
【００３１】
図６では、第１のページ・サイズの第１のメモリを有する対象実行環境における実行を目的としたバイナリ・コンピュータ・コードの少なくとも１つの第１のブロックを、第２のページ・サイズの第２のメモリを有する第２の実行環境における実行のための少なくとも１つの第２のブロックへと変換するための動的バイナリ・トランスレータ装置を操作する方法の諸ステップが示されている。第２のページ・サイズは当該第１のページ・サイズとは異なるものである。開始ステップ６００で開始され、第１のメモリのメモリ・ページ特性を決定するステップ６０２と、リダイレクト・ページ・マッパによって、当該第１のメモリの少なくとも１つのアドレスを当該第２のメモリのアドレスにマッピングするステップ６０４とを含む。ステップ６０６では、メモリ障害挙動検出器が、第２のブロックの実行中にメモリ障害を検出し、障害カウントをトリガしきい値まで累算する。ステップ６０８では、障害カウントがトリガしきい値に達したことに応答して、動的バイナリ・トランスレータの再生成コンポーネントが第２のブロックを廃棄し、ページ・テーブル・ウォークにより再マッピングされたメモリ参照を用いて第１のブロックを第２のブロックの再変換済みバージョンへと再変換する。このプロセスは終了ステップ６１０で終了する。
【００３２】
したがって提案された機構は、ハードウェア、ソフトウェア、またはハードウェアおよびソフトウェアの組み合わせのいずれで具体化されるかに関わらず、追加のオペレーティング・システムの修正を必要とすることなく、幅広い領域のアプリケーションの動作について良好な性能特性を提供する単一の目標ページ・サイズ領域内でのマップ・タイプの混合をサポートするための手段を提供する。
【００３３】
対象プログラム・マッピング要求は、可能であれば要求された場所において提供される。すなわち、単一のマップ・タイプのみが要求され、満たされていない可能性のあるファイル・オフセット制約がない場合、マップは対象アクセス可能メモリ内に直接配置され、いかなる追加のアドレス変換も不要である。こうした直接マッピングが不可能な場合、マップは、動的バイナリ・トランスレータによってアクセス可能であるが対象プログラムによっては直接アクセス不可能なメモリの好適な領域内に配置される。次に、対象可視アドレス・スペースの対応部分がアクセス不可としてマーク付けされる。結果としてアクセスは障害（fault）となる。かかる領域へのアクセスが実行された場合、障害が処理されて正しいアクセスが信号ハンドラによって実行される。
【００３４】
第１の好ましい実施形態では、観察されたアプリケーションの動作に基づく、障害処理からページ・テーブル・ルックアップへのモード切換え手段が提供される。短期間に多数の障害が見られた場合、トランスレータは自ら生成したすべての実行可能コードを破棄し、各アクセスについてページ・テーブル・ウォークを実行するコードの生成を開始する。これによって目標仮想アドレス・スペース内の適切な位置へとアドレスを変換することになる。障害処理機構は、必要であれば依然として有効であることに留意されたい。ページ・テーブルは、対象アドレスから適切な目標アドレスへのマッピングを提供するトランスレータによって生成される。
【００３５】
他の好ましい実施形態では、ルックアップ・オーバヘッドを減らすために、ほぼ線形の対象アドレスから目標アドレスへのマッピングを用いた部分的なページ・テーブル・ウォークを使用するための手段が提供可能である。最適化の例として、ページ・テーブルは変換が必要なページについてのみ記入され、ページ・テーブル内の他のエントリはｅｍｐｔｙとしてマーク付けされる。このようなエントリに遭遇した場合、ルックアップは早期に停止し、オリジナルの未変換アドレスが使用される。ページ・テーブル自体の使用は当技術分野で知られているが、ほとんどのアドレスが変換なしに直接マッピングし、ショートカット・パスが使用可能なページ・テーブルの使用は、既知の技術分野における有利な改良である。
【００３６】
他の最適化として、アクセス・タイプの静的変換時評価に基づいた、ページ・ルックアップ・オーバヘッドからのアクセス除外のための手段が提供される。この最適化では、アドレス変換が必要な可能性が低いとみなされるアクセスは、ページ・テーブル・ルックアップなしに実行可能であり、たとえばスタックへのアクセスはコード変換時に容易に検出可能であり、ファイル裏付けマップまたは共有メモリへのアクセスが必要な可能性は低い。
【００３７】
一代替実施形態では、アクセス・モードをアクセスごとに切り換えるための手段を提供する。この最適化では、すべてのコードはページ・テーブル・ルックアップなしに生成可能であり、コードの個々のブロックは、それらのアドレスで障害が観察された場合にルックアップを含めるように再生成することができる。
【００３８】
他の代替実施形態は、アドレス・ルックアップが必要な時点を決定するために、低コスト・ランタイム・フィルタとしてのマスクされたアドレスの比較を提供する。この代替手法では、可変ビット・マスクを使用し、各アドレスにマスクを適用し、既知の値と比較して、ルックアップが必要であることがわかっている領域内にそのアドレスが存在するかどうかを決定することによって、アドレス変換が必要となるアクセスをフィルタリングすることが可能である。
【００３９】
本発明の細部は、以下で詳細に説明するような、本明細書の図７および図８に示された作業例に最も良く表されている。説明のために、対象ページ・サイズは４ｋ、目標ページ・サイズは６４ｋであるものと仮定されている。ページ保護は、Ｐｏｗｅｒ  Ｌｉｎｕｘ上に提供されるｓｕｂｐａｇｅ＿ｐｒｏｔシステムコールなどの機能を使用して、４ｋ粒度で適用可能であることが想定されている。しかしこうした機能が使用できなかった場合、前述のような保護のソフトウェア実装を代わりに使用することができる。当業者であれば、本発明の諸実施形態による同様に有利な方法で、多くの他のページ・サイズ特性が取扱い可能であることは明らかであろう。
【００４０】
図７を見ると、例示的な対象ページ・マップ１００および例示的な目標ページ・マップ１０２が示されている。まず初めに、対象プログラムのバイナリ７００、動的リンカ７０２、スタック７０４、およびヒープ７０６がマッピングされる。動的バイナリ・トランスレータによってプログラムが実行されると、１つまたは複数のランタイム・ライブラリ７０８もマッピングされる。この例では、これらのマッピングはすべて直接実行可能であり、本発明の好ましい諸実施形態が提供する特別な機構は不要である。
【００４１】
対象プログラムで遭遇する各命令に対して、トランスレータは目標アーキテクチャ上で実行可能な等価命令を生成し、ロードおよび格納のために特別なアドレス操作は一切実行されず、メモリには直接アクセスされる。次に、対象プログラムは０ｘ１０００００００で匿名メモリのページにマッピングし、アドレス０ｘ１０００１０００のファイル裏付けメモリのページが後に続く。目標オペレーティング・システムはこのマッピングをサポートできないため、トランスレータはファイル裏付けメモリをアドレス・スペースの異なる部分に配置し、０ｘ１０００１０００のページをアクセス不可としてマーク付けしなければならない。この状況が図８に示されている。
【００４２】
アドレス０ｘ１０００１０００のページにアクセスしようとすると障害が受信され、トランスレータはこれを受け取って、０ｘＦ００００００００でのマッピング１０４内にアクセスするための正しいアドレスを計算し、そのアドレスでのアクセスを実行する。
【００４３】
したがって第１の好ましい実施形態では、観察されたアプリケーションの動作に基づく、障害処理からページ・テーブル・ルックアップへの動的モード切り換えのための方法および装置が提供される。０ｘ１０００１０００のこのファイル裏付けマップに対して多くのアクセスが実行された場合、障害ハンドラにおけるこれらの障害の処理および適切なアドレス変換実行のコストが、アプリケーションの性能を支配することになる。このようにアクセスを実行するコストは、障害処理のコストを含め、メモリに直接アクセスするよりも２倍から３倍となる可能性があることに留意されたい。各障害を受信した時点で、トランスレータは障害の合計数を記録し、かなり多くの数が受信された場合、または所与の期間内にかなり高い率で障害が観察された場合、トランスレータは、障害のコストを避けるためにアドレス変換が各アクセスについてランタイム時に実行される、異なる動作モードに切り換えることができる。トランスレータは、対象アドレスを目標アドレスにマッピングするページ・テーブルを生成する。ほとんどのアドレスでは、ほとんどのマップが依然として等価の場所にマッピングされるように、ページ・テーブルは実際に対象アドレスを同じ目標アドレスへと再マッピングすることになる。しかし、問題のファイル・アクセスの場合、ページ・テーブルは０ｘＦ００００００００に相対的な目標アドレスへとアドレスをマッピングすることになる。ページ・テーブルは、前述のマニュアルで説明されているような、Ｉｎｔｅｌ  ＩＡ−３２アーキテクチャによって使用されるページ・テーブルと同様に構築可能である。しかし、ページ保護は依然としてオペレーティング・システムの既存の機能を使用して処理できるため、このページ・テーブルはマップの保護に関する情報を記録する必要がない。アクセスされることになるアドレスが０ｘ１０００１０１Ｃの場合、ページ・テーブルの関連部分は図９に示されるようになる。
【００４４】
ここではすべての生成されたコードが廃棄され、再生成されるが、各対象のロードまたは格納のための単純なロードまたは格納命令を生成する代わりに、正しいアドレスを計算するためのページ・テーブル・ルックアップが生成される。コードの例示的実施形態では、対象命令については以下のようなものとなる。
ｌｏａｄｂ  ｒ１，ｒ２（ｒ３）      ＃アドレス（ｒ２＋ｒ３）からバイトをロードし、結果をｒ１内に配置する
そして結果として、以下のような目標命令シーケンスが生じる。
ａｄｄ  ｒ１２，ｒ２，ｒ３      ＃２つのアドレス・レジスタを追加することによって対象アドレスを計算する
ｓｒ  ｒ１３，ｒ１２，２２      ＃アドレスの上位１０ビットを取得する
ｓｌ  ｒ１３，ｒ１２，３      ＃８倍することによってインデックスを第１レベルのテーブルに入れる（各エントリは８バイト・アドレスである）
ｌｄ  ｒ１３，ｒ１３（ｒ３０）      ＃第１レベルのページ・テーブルからアドレスをロードする（ｒ３０はここでは第１レベルのテーブルのアドレスを含む）
ｓｒ  ｒ１４，ｒ１２，１２      アドレスの上位２０ビットを取得する
ａｎｄ  ｒ１４，ｒ１４，０ｘ３ｆｆ      ＃アドレスの次の１０ビットを取得し、インデックスを第２レベルのテーブルに入れる
ｓｌ  ｒ１４，ｒ１４，３      ＃８倍することによってインデックスを第２レベルのテーブルに入れる
ｌｄ  ｒ１５，ｒ１３，ｒ１４      ＃第２レベルのテーブルからページ・アドレスをロードする
ａｎｄ  ｒ１６，ｒ１３，０ｘｆｆｆ      ＃対象アドレスからオフセットをページに入れる
ｌｂ  ｒ１，ｒ１５，ｒ１６      ＃新規ページ・アドレスからロードする＋ページのオフセット
【００４５】
必要な追加のチェック回数を減らすため、マッピングされていないページがあれば、それらのページ・テーブル・エントリをメモリの既知のマッピングされていない領域に向けて送ることが可能である。その結果として適切な障害が生成されることになる。ページ境界をまたがっているアドレスを処理するために、このシーケンスでは何らかの追加の命令が必要となる場合がある。
【００４６】
一実施形態では、ルックアップ・オーバヘッドを減らすために、対象アドレスから目標アドレスへのほぼ線形のマッピングを利用した、部分的なページ・テーブル・ウォークが実装可能である。もちろん、対象から目標への完全なマッピングが提供される場合、前述のスキームを利用して目標マップを任意の位置に配置することが可能である。しかし、ほとんどの場合、要求された対象アドレスと同一の目標アドレスにアドレスをマッピングすることが可能であるものと考えると、ほとんどの場合、ルックアップは単に同じアドレスを戻すことになる。これにより、第１レベルのテーブルのみの即時チェックを優先して、全体ルックアップをバイパスできるようにする最適化が使用可能である。このスキームでは、第１レベルのページ・テーブル内の単一エントリによってカバーされているアドレスの全領域（前述のスキームでは４ＭＢの領域）が、いかなる特別な処理も必要としない場合、第１レベルのテーブル内のエントリは、次のテーブルを示すポインタではなく特別なマーカ値を含むことができる。第１レベルのテーブルからのアドレスがロードされると、この値が見つかった場合、残りのルックアップは打ち切られ、代わりにオリジナル・アドレスが使用される。これに関する例示的なコード・シーケンスが以下に示される。
【００４７】
例示的なコード例では、対象命令について以下のようなものとなる。
ｌｏａｄｂ  ｒ１，ｒ２（ｒ３）      ＃アドレス（ｒ２＋ｒ３）からバイトをロードし、結果をｒ１内に配置する
そして結果として、以下のような目標命令シーケンスが生じる。
ａｄｄ  ｒ１２，ｒ２，ｒ３      ＃２つのアドレス・レジスタを追加することによって対象アドレスを計算する
ｓｒ  ｒ１３，ｒ１２，２２      ＃アドレスの上位１０ビットを取得する
ｓｌ  ｒ１３，ｒ１２，３      ＃８倍することによってインデックスを第１レベルのテーブルに入れる（各エントリは８バイト・アドレスである）
ｌｄ  ｒ１３，ｒ１３（ｒ３０）      ＃第１レベルのページ・テーブルからアドレスをロードする（ｒ３０はここでは第１レベルのテーブルのアドレスを含む）
ｃｍｐ  ｒ１３，０      ＃ゼロと比較する（ゼロはここでは「ｅｍｐｔｙ」マーカ値として使用される）
ｂｅｑ  ｎｏｒｍａｌ      ＃等しい場合、標準ロードへと分岐する
ｓｒ  ｒ１４，ｒ１２，１２      アドレスの上位２０ビットを取得する
ａｎｄ  ｒ１４，ｒ１４，０ｘ３ｆｆ      ＃アドレスの次の１０ビットを取得し、インデックスを第２レベルのテーブルに入れる
ｓｌ  ｒ１４，ｒ１４，３      ＃８倍することによってインデックスを第２レベルのテーブルに入れる
ｌｄ  ｒ１５，ｒ１３，ｒ１４      ＃第２レベルのテーブルからページ・アドレスをロードする
ａｎｄ  ｒ１６，ｒ１３，０ｘｆｆｆ      ＃対象アドレスからオフセットをページに入れる
ｌｂ  ｒ１，ｒ１５，ｒ１６      ＃新規ページ・アドレスからロードする＋ページのオフセット
ｂ  ｅｎｄ      ＃標準ロードを過ぎて分岐する
ｎｏｒｍａｌ：
ｌｂ  ｒ１，ｒ２（ｒ３）      ＃アドレス（ｒ２＋ｒ３）からバイトをロードし、結果をｒ１内に配置する
ｅｎｄ：
【００４８】
共通パスで使用される命令には下線が付けられている。また、この最適化によって回避されるものはイタリック体で示されている。ここでは共通のケースでいくつかの命令が省略され、結果として大多数のアクセスがアドレス変換を必要としない場合、全体の性能が向上することになる。
【００４９】
図１０は、システムがアドレス０ｘｃ０１１００４０にアクセスしている場合、ページ・テーブルがこの状況でどのようなものと見えるかの一例を示している。
【００５０】
他の拡張機能では、アクセス・タイプの静的変換時評価に基づいた、ページ・ルックアップ・オーバヘッドからの一定のアクセス除外のための手段が提供可能である。
【００５１】
いくつかの対象アーキテクチャでは、アーキテクチャ上の機能または共通の規則により、命令の静的検査に基づいて、メモリ・アクセスの予期される特性を識別することが可能となる。たとえばＩＡ−３２命令セットでは、プッシュ命令およびポップ命令を使用してスタックにアクセスすることができる。加えて、ＥＳＰレジスタは現行のスタック・ポインタとしてほぼ独占的に維持されるが、ＥＢＰはしばしば現行のスタック・フレームのトップを指示するために使用される。いくつかのオペレーティング・システムおよび環境では、これらのような特性を使用して、アドレス変換を必要とする可能性が低いとみなされるアクセスからアドレス変換を除去することができる。ＩＡ−３２アプリケーションの変換の場合、スタックはファイルが裏付けされるかまたは他のプロセスと共用される可能性が低いため、さらにはスタックの正確な位置およびサイズはしばしばトランスレータ自体の制御下にあるため、スタック・アクセスがアドレス変換を必要とする可能性が非常に低い旨をアサートできる可能性がある。したがって、ＥＳＰまたはＥＢＰに基づくアクセスに関してページ・テーブル・ルックアップを据え付けないことを選択することで、アドレス変換オーバヘッドの大幅な節減が達成可能である。他のアーキテクチャについても同様の規則が存在する。
【００５２】
フェイルセーフとしてオリジナルの信号処理コードが保持され、ルックアップが生成されないいずれのアクセスも障害となり、ともかく正しく処理されることになる。
【００５３】
いずれかのルックアップが据え付けられる前に障害となったトランスレータに各対象命令のアドレスを記録させることによって、他の改良を使用することができる。ルックアップが必要であることが決定された場合、障害となったことがわかっているアドレスに対してのみルックアップを据え付けることができる。実行が継続される場合、必要に応じて特定の命令シーケンスに対してコードを再生成することにより、障害が見られる命令にルックアップが追加される。これによって最小限のルックアップが生成されることが保証され、要求された位置にマッピングされていないメモリには決してアクセスしないコードについて高性能が保証される。アプリケーションの挙動は経時的に変化しやすいため、すべてのルックアップ・コードを定期的に除去し、プロファイリングを再始動することも有用な可能性があり、それによってもはやルックアップを必要としないコードが性能を犠牲にし続けることのないように保証される。
【００５４】
代替のフィルタリング機構として、変換が必要な通常アクセスされるアドレスの範囲が狭く、隣接している場合、マスクおよび比較動作を使用することができる。前述の例では、単一のページのみがアドレス変換を要求した。こうした状況が存在する場合は必ず、単にアドレスをマスキングし、特定のビット値と比較することによって、より最適なアドレス・フィルタリング手法を採用することができる。現在使用されているマスクおよび値は、追加のロード命令の生成を避けるためにレジスタ内に維持することができる。この最適化に関する例示的なコード・シーケンスが、対象命令について以下のように示される。
ｌｏａｄｂ  ｒ１，ｒ２（ｒ３）      ＃アドレス（ｒ２＋ｒ３）からバイトをロードし、結果をｒ１内に配置する
そして結果として、以下のような目標命令シーケンスが生じる。
ａｄｄ  ｒ１２，ｒ２，ｒ３      ＃２つのアドレス・レジスタを追加することによって対象アドレスを計算する
ａｎｄ  ｒ１３，ｒ１２，ｒ２９      ＃アドレスをｒ２９の値（現在のアドレス・マスク値）でマスキングする
ｃｍｐ  ｒ１３，ｒ２８      ＃この結果をｒ２８の値（現在んアドレス比較値）と比較する
ｂｎｅ  ｎｏｒｍａｌ      ＃値が一致しない場合、変換は不要であるものと仮定する
ｓｒ  ｒ１３，ｒ１２，２２      ＃アドレスの上位１０ビットを取得する
ｓｌ  ｒ１３，ｒ１２，３      ＃８倍することによってインデックスを第１レベルのテーブルに入れる（各エントリは８バイト・アドレスである）
ｌｄ  ｒ１３，ｒ１３（ｒ３０）      ＃第１レベルのページ・テーブルからアドレスをロードする（ｒ３０はここでは第１レベルのテーブルのアドレスを含む）
ｓｒ  ｒ１４，ｒ１２，１２      アドレスの上位２０ビットを取得する
ａｎｄ  ｒ１４，ｒ１４，０ｘ３ｆｆ      ＃アドレスの次の１０ビットを取得し、インデックスを第２レベルのテーブルに入れる
ｓｌ  ｒ１４，ｒ１４，３      ＃８倍することによってインデックスを第２レベルのテーブルに入れる
ｌｄ  ｒ１５，ｒ１３，ｒ１４      ＃第２レベルのテーブルからページ・アドレスをロードする
ａｎｄ  ｒ１６，ｒ１３，０ｘｆｆｆ      ＃対象アドレスからオフセットをページに入れる
ｌｂ  ｒ１，ｒ１５，ｒ１６      ＃新規ページ・アドレスからロードする＋ページのオフセット
ｂ  ｅｎｄ      ＃標準ロードを過ぎて分岐する
ｎｏｒｍａｌ：
ｌｂ  ｒ１，ｒ２（ｒ３）      ＃アドレス（ｒ２＋ｒ３）からバイトをロードし、結果をｒ１内に配置する
ｅｎｄ：
【００５５】
共通パスで使用される命令には下線が付けられている。また、この最適化によって回避されるものはイタリック体で示されている。ここでは共通のケースでいくつかの命令が省略され、結果として大多数のアクセスがアドレス変換を必要としない場合、全体の性能が向上することになる。
【００５６】
実行が進行し、メモリ・マップが変更された場合、それに応じて現在のマスクおよびアドレス比較値も更新することができる。
【００５７】
当業者であれば、本発明の好ましい諸実施形態の方法のすべてまたは一部が、方法の諸ステップを実行するように配置構成された論理要素を備える１つの論理装置または複数の論理装置内で好適かつ有用に具体化可能であること、および、こうした論理要素がハードウェア・コンポーネント、ファームウェア・コンポーネント、またはそれらの組み合わせを備えることが可能であることが明らかとなろう。
【００５８】
当業者であれば、本発明の好ましい諸実施形態に従った論理配置構成のすべてまたは一部が、方法の諸ステップを実行するための論理要素を備える論理装置内で好適に具体化可能であること、および、こうした論理要素が、たとえばプログラム可能論理アレイまたは特定用途向け集積回路内の論理ゲートなどのコンポーネントを備えることが可能であることが、等しく明らかとなろう。さらにこうした論理配置構成は、たとえば固定または伝送可能なキャリア媒体を使用して格納および伝送可能な仮想ハードウェア記述子言語を使用するアレイまたは回路内などに、一時的または永続的に論理構造を確立するための実行可能要素内で具体化することができる。
【００５９】
前述の方法および配置構成が、１つまたは複数のプロセッサ（図示せず）上で実行中のソフトウェア内で完全または部分的に好適に実施可能であること、および、ソフトウェアが、磁気または光ディスクなどの任意の好適なデータ・キャリア（同じく図示せず）上で搬送される１つまたは複数のコンピュータ・プログラム要素の形で提供可能であることを理解されよう。データ伝送のためのチャネルは、同様に、すべての記述のストレージ媒体ならびに有線または無線の信号搬送媒体などの信号搬送媒体を備えることができる。
【００６０】
一般に、方法は、所望の結果を導く首尾一貫したステップ・シーケンスであるものと考えられる。これらのステップは、物理量の物理操作を必要とする。通常、これらの量は、格納、転送、結合、比較、およびその他の操作が実行されることが可能な電気信号または磁気信号の形を取るが、その限りではない。時には、主として一般的な用法の理由で、これらの信号をビット、値、パラメータ、アイテム、要素、オブジェクト、シンボル、文字、項、数などと言い表すことが便利である。しかし、これらのすべての用語および同様の用語は適切な物理量に関連付けられるものであり、これらの量に適用される単なる便利なラベルであることに留意されたい。
【００６１】
さらに本発明は、コンピュータ・システムと共に使用するためのコンピュータ・プログラム製品としても好適に具体化することができる。こうした実装は、たとえばディスケット、ＣＤ−ＲＯＭ、ＲＯＭ、またはハード・ディスクのようなコンピュータ読み取り可能媒体などの有形媒体上に固定されるか、あるいは、光またはアナログの通信回線を含むがこれらに限定されない有形媒体を介して、または、マイクロ波、赤外線、または他の伝送技法を含むがこれらに限定されない無線技法を使用して無形に、モデムまたは他のインターフェース・デバイスを通じてコンピュータ・システムに伝送可能である、一連のコンピュータ読み取り可能命令を備えることができる。一連のコンピュータ読み取り可能命令は、本明細書で前述した機能のすべてまたは一部を具体化する。
【００６２】
当業者であれば、こうしたコンピュータ読み取り可能命令が、多くのコンピュータ・アーキテクチャまたはオペレーティング・システムと共に使用するためのいくつかのプログラミング言語で作成可能であることを理解されよう。さらに、こうした命令は、半導体、磁気、または光を含むがこれらに限定されない、現行または将来の任意のメモリ技術を使用して格納すること、あるいは、光、赤外線、またはマイクロ波を含むがこれらに限定されない、現行または将来の任意の通信技術を使用して伝送することが、可能である。こうしたコンピュータ・プログラム製品は、たとえばパッケージ・ソフトウェアなどの印刷文書または電子文書が添付された取り外し可能媒体として配布されること、コンピュータ・システムのたとえばシステムＲＯＭまたは固定ディスク上に事前ロードされること、あるいは、たとえばインターネットまたはワールド・ワイド・ウェブなどのネットワークを介してサーバまたは電子掲示板から配布されることが、可能であることが企図される。
【００６３】
他の代替実施形態では、本発明の好ましい実施形態は機能データをその上に有するデータ・キャリアの形で実現可能であり、当該機能データは、コンピュータ・システムにロードされ、コンピュータ・システムによって動作された場合、当該コンピュータ・システムが方法のすべてのステップを実行可能とするための機能コンピュータ・データ構造を備える。
【００６４】
当業者であれば、本発明の範囲を逸脱することなく、前述の例示的実施形態に対する多くの改良および修正が実行可能であることが明らかとなろう。
【符号の説明】
【００６５】
５００    動的バイナリ・トランスレータ
５０２    対象ブロック
５０４    対象環境
５０６    対象メモリ
５０８    目標ブロック
５１０    目標環境
５１２    目標メモリ
５１４    ページ・マッパ
５１６    障害検出器
５１８    再生成器
【図１】
0005792577.tif 000002
【図２】
0005792577.tif 000003
【図３】
0005792577.tif 000004
【図４】
0005792577.tif 000005
【図５】
0005792577.tif 000006
【図６】
0005792577.tif 000007
【図７】
0005792577.tif 000008
【図８】
0005792577.tif 000009
【図９】
0005792577.tif 000010
【図１０】
0005792577.tif 000011