JP2004070944A - アプリケーション向けにオペレーティングシステム機能を拡張するシステムおよび方法 - Google Patents
アプリケーション向けにオペレーティングシステム機能を拡張するシステムおよび方法 Download PDFInfo
- Publication number
- JP2004070944A JP2004070944A JP2003274597A JP2003274597A JP2004070944A JP 2004070944 A JP2004070944 A JP 2004070944A JP 2003274597 A JP2003274597 A JP 2003274597A JP 2003274597 A JP2003274597 A JP 2003274597A JP 2004070944 A JP2004070944 A JP 2004070944A
- Authority
- JP
- Japan
- Prior art keywords
- application
- code
- operating system
- deli
- function
- 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.)
- Withdrawn
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
Abstract
【課題】 アプリケーション向けにオペレーティングシステム機能を拡張する。
【解決手段】 本発明に係る方法は、アプリケーションから1つまたは複数の2進命令を受け取るステップと、1つまたは複数の2進命令が、特定のオペレーティングシステム機能を実行する、オペレーティングシステムへのコールに対応するかどうかを判定するステップと、特定のオペレーティングシステム機能をアプリケーション向けに変更すべきかどうかを判定するステップと、特定のオペレーティングシステム機能をアプリケーション向けに変更すべき場合、変更された機能を実施するコードを実行するステップとを含む。
【選択図】図4
【解決手段】 本発明に係る方法は、アプリケーションから1つまたは複数の2進命令を受け取るステップと、1つまたは複数の2進命令が、特定のオペレーティングシステム機能を実行する、オペレーティングシステムへのコールに対応するかどうかを判定するステップと、特定のオペレーティングシステム機能をアプリケーション向けに変更すべきかどうかを判定するステップと、特定のオペレーティングシステム機能をアプリケーション向けに変更すべき場合、変更された機能を実施するコードを実行するステップとを含む。
【選択図】図4
Description
本発明は、オペレーティングシステムの機能拡張に関する。
コンピュータユーザは、オペレーティングシステム機能(たとえば、新しいプロトコルのサポート、新しい使用パターンへの適合、アプリケーションによるシステム資源使用の監視または制限、アプリケーションのサンドボックス化(sandboxing)等)を、アプリケーションが利用できるように拡張したいと常に望んでいる。
オペレーティングシステム機能を拡張する現行システムは通常、2つの主な手法のうちのいずれか一方である。
オペレーティングシステム機能を拡張する現行システムは通常、2つの主な手法のうちのいずれか一方である。
第1の手法は、新しい拡張可能オペレーティングシステムを設計するというものである。
この単純な手法では、所望の機能を組み込むようにオペレーティングシステムを変更する必要がある。
この場合、新しいオペレーティングシステムを所望の機能毎に構成する必要があるため、この手法の適用範囲はかなり制限される。
第2の手法は、既存のオペレーティングシステムに拡張性を追加するというものである。
この単純な手法では、所望の機能を組み込むようにオペレーティングシステムを変更する必要がある。
この場合、新しいオペレーティングシステムを所望の機能毎に構成する必要があるため、この手法の適用範囲はかなり制限される。
第2の手法は、既存のオペレーティングシステムに拡張性を追加するというものである。
既存のオペレーティングシステムに拡張性を追加するには、様々な手法がある。
1つの既存の手法は、オペレーティングシステム自体を変更するのではなく、所望の機能を実施する新しいデバイスドライバに変更するというものである。
別の既存の手法は、すでに存在する標準インタフェースを通して追加サービスを提供するネットワークサーバを設置するというものである。
1つの既存の手法は、オペレーティングシステム自体を変更するのではなく、所望の機能を実施する新しいデバイスドライバに変更するというものである。
別の既存の手法は、すでに存在する標準インタフェースを通して追加サービスを提供するネットワークサーバを設置するというものである。
これら手法はそれぞれ、必要とされるユーザ介入の度合いが高いため限定的である可能性がある。
さらに、新しい機能は、デバイスドライバまたはオペレーティングシステムプラグインの文脈において容易に実施することができない場合がある。
これは、こういった拡張が予め定義されている前提のセットによって制限されるためである。
さらに、新しい機能は、デバイスドライバまたはオペレーティングシステムプラグインの文脈において容易に実施することができない場合がある。
これは、こういった拡張が予め定義されている前提のセットによって制限されるためである。
さらに、こういった手法は、オペレーティングシステムへの変更が各ユーザによって認識されるため、システムの各ユーザに影響を及ぼす。
たとえば、新規にインストールしたソフトウェアにバグまたはセキュリティホールがある場合には、システム全体の保全性が脅かされる恐れがある。
たとえば、新規にインストールしたソフトウェアにバグまたはセキュリティホールがある場合には、システム全体の保全性が脅かされる恐れがある。
オペレーティングシステム機能を拡張する別の一般的な手法は、仲介エージェントを使用してシステムコールをインタセプトするというものである。
図1は既存のコンピュータ環境を示す代表的なシステム100のブロック図である。
このコンピュータ環境では、アプリケーション102がオペレーティングシステム104を呼び出して、指定されたオペレーティングシステム機能をハードウェア106で実行することができる。
図1は既存のコンピュータ環境を示す代表的なシステム100のブロック図である。
このコンピュータ環境では、アプリケーション102がオペレーティングシステム104を呼び出して、指定されたオペレーティングシステム機能をハードウェア106で実行することができる。
図1に示すように、アプリケーション102とオペレーティングシステム104との間には、様々なタイプのインタフェース(たとえば、システムコール、ライブラリ関数等)が一般に見られる。
当分野において既知であり、かつ上述したように、アプリケーション102(たとえば、実行可能プログラム等)は一般に、特定のアクションを実行する機能を利用する。
関数は、特定のアクションを実行する、かつ/または値を返す宣言および/またはステートメントの集まりを含むことができる。
関数はユーザによって定義されるか、または予め定義されたものがユーザに提供される場合がある。
当分野において既知であり、かつ上述したように、アプリケーション102(たとえば、実行可能プログラム等)は一般に、特定のアクションを実行する機能を利用する。
関数は、特定のアクションを実行する、かつ/または値を返す宣言および/またはステートメントの集まりを含むことができる。
関数はユーザによって定義されるか、または予め定義されたものがユーザに提供される場合がある。
関連機能(たとえば、数学またはグラフィックスルーチン等)を有する予め定義された関数は、たとえばオブジェクトの形態でライブラリまたはアーカイブファイルに格納することができる。
オブジェクトコードフォーマットは、実行可能プログラムが生成される際に中間ステップとして生成される特定のファイルフォーマットである。
ライブラリファイルに格納された関数は、ライブラリ関数またはランタイムライブラリルーチンと呼ばれることが多い。
オブジェクトコードフォーマットは、実行可能プログラムが生成される際に中間ステップとして生成される特定のファイルフォーマットである。
ライブラリファイルに格納された関数は、ライブラリ関数またはランタイムライブラリルーチンと呼ばれることが多い。
プログラムが使用する、予め定義されているいくつかの関数は、オペレーティングシステム104への実際のシステムコールである。
ライブラリ関数のフォーマットは似ているが、システムコールは、アプリケーション102に関連するプロセスを呼び出す代わりに、オペレーティングシステム104があるジョブを直接実行するように要求する。
ライブラリ関数のフォーマットは似ているが、システムコールは、アプリケーション102に関連するプロセスを呼び出す代わりに、オペレーティングシステム104があるジョブを直接実行するように要求する。
オペレーティングシステム104によって実行されるコードは、たとえば、オペレーティングシステム104のカーネル(すなわち、中央制御プログラム)内に常駐する。
システムコールは、このコードへの高水準/中間水準言語インタフェースとして機能する。
カーネルの保全性を守るため、システムコールを実行するプロセスは、ユーザモード(ユーザ特権およびアクセス許可)からシステムモード(システム/ルート特権およびアクセス許可)に一時的に切り換えなければならない。
システムコールは、このコードへの高水準/中間水準言語インタフェースとして機能する。
カーネルの保全性を守るため、システムコールを実行するプロセスは、ユーザモード(ユーザ特権およびアクセス許可)からシステムモード(システム/ルート特権およびアクセス許可)に一時的に切り換えなければならない。
文脈においてこの切り換えには、特定量のオーバヘッドが伴い、場合によっては、システムコールの効率を同じタスクを実行するライブラリ関数よりも悪化させてしまうことがある。
多くのライブラリ関数(たとえば、入出力に関連するライブラリ関数)は完全にバッファリングされるため、これにより、システムが特定のタスクを実際に実行するときをある程度制御することが可能になる。
図1に示すように、実行可能プログラムは、特定の関数を実行するようオペレーティングシステム104に直接要求するシステムコールを利用するか、または代わってシステムコールを実行することが可能なライブラリ関数を呼び出すことができる。
多くのライブラリ関数(たとえば、入出力に関連するライブラリ関数)は完全にバッファリングされるため、これにより、システムが特定のタスクを実際に実行するときをある程度制御することが可能になる。
図1に示すように、実行可能プログラムは、特定の関数を実行するようオペレーティングシステム104に直接要求するシステムコールを利用するか、または代わってシステムコールを実行することが可能なライブラリ関数を呼び出すことができる。
この手法の各種使用例については、非特許文献1に記載されるとともに、参考文献が載せられており、この文献全体を参照により本明細書に援用する。
図2は、この手法を用いてオペレーティングシステム104の機能を拡張する既存のシステム200の例を示すブロック図である。
図2に示すように、オペレーティングシステム104の機能を拡張するために、システム200は、アプリケーション102とオペレーティングシステム104との間に挿入されたシステムコール仲介エージェント(たとえば、オペレーティングシステム拡張システム202)を備える。
図2は、この手法を用いてオペレーティングシステム104の機能を拡張する既存のシステム200の例を示すブロック図である。
図2に示すように、オペレーティングシステム104の機能を拡張するために、システム200は、アプリケーション102とオペレーティングシステム104との間に挿入されたシステムコール仲介エージェント(たとえば、オペレーティングシステム拡張システム202)を備える。
典型的なオペレーティングシステム拡張システム202は、インタセプトモジュール204およびオペレーティングシステム拡張モジュール206からなる。
インタセプトモジュール204は通常、アプリケーション102に添付され、アプリケーション204によって発行されたシステムコールのうち、選択されたシステムコールをインタセプトする。
動作にあたり、インタセプトモジュール204はユーザプロセスに接続され、オペレーティングシステム104にいずれのシステムコールをインタセプトすべきかを伝える。
インタセプトモジュール204は通常、アプリケーション102に添付され、アプリケーション204によって発行されたシステムコールのうち、選択されたシステムコールをインタセプトする。
動作にあたり、インタセプトモジュール204はユーザプロセスに接続され、オペレーティングシステム104にいずれのシステムコールをインタセプトすべきかを伝える。
たとえば、注目するシステムコール(すなわち、インタセプトモジュール202がインタセプトし、O/S拡張モジュール206が実行すべきシステムコール)が開始されると常に、インタセプトモジュール204がオペレーティングシステム104にシステムコールのインタセプトを通知し、オペレーティングシステム104が対象となるプロセスを停止させる。
次に、オペレーティングシステム104はO/S拡張モジュール206とやりとりし、適切な拡張関数を呼び出す。
次に、オペレーティングシステム104はO/S拡張モジュール206とやりとりし、適切な拡張関数を呼び出す。
この手法もまたかなり限定的である可能性がある。
たとえば、既存のシステムに使用されるシステムコール仲介エージェントは通常、土台をなすオペレーティングシステムによって提供される機能を使用して実施される。
例として、Alexandrov等が記載するシステムは、トレース機能(たとえば、Unix(登録商標)オペレーティングシステムにより提供される/procファイルシステム、ならびにptraceプロセス制御よびデバッグインタフェース)を使用することにより、選択されたシステムコールをユーザレベルでインタセプトする。
たとえば、既存のシステムに使用されるシステムコール仲介エージェントは通常、土台をなすオペレーティングシステムによって提供される機能を使用して実施される。
例として、Alexandrov等が記載するシステムは、トレース機能(たとえば、Unix(登録商標)オペレーティングシステムにより提供される/procファイルシステム、ならびにptraceプロセス制御よびデバッグインタフェース)を使用することにより、選択されたシステムコールをユーザレベルでインタセプトする。
オペレーティングシステム104によって提供されるトレース機能を用いて、プロセスに、別のプロセスが選択されたシステムコールに入るとき、または出るときを通知することができる。
この機能の当初の目的はシステムコールのデバッグおよびトレースであったため、既存のシステムはこの機能を実施してプロセスの振る舞いを変更し、それによってオペレーティングシステム104の機能を拡張する。
この機能の当初の目的はシステムコールのデバッグおよびトレースであったため、既存のシステムはこの機能を実施してプロセスの振る舞いを変更し、それによってオペレーティングシステム104の機能を拡張する。
したがって、こういったシステムでは既存のオペレーティングシステム機能が求められるため、使用されている特定のオペレーティングシステム104に依存する。
この手法は、かかる機能を提供しない、または同様の機能を別の互換性のない形態で提供する特定のオペレーティングシステム(たとえば、Windows(登録商標)ベースのオペレーティングシステム)では不可能な場合がある。
この手法は、かかる機能を提供しない、または同様の機能を別の互換性のない形態で提供する特定のオペレーティングシステム(たとえば、Windows(登録商標)ベースのオペレーティングシステム)では不可能な場合がある。
さらに、この手法は、複数のアプリケーション102、複数のオペレーティングシステム104、複数のオペレーティングシステム拡張等に実施することのできる移植性のある方策を提供しない。
たとえば、図2に特徴付けるシステムは、実施されている特定のシステムのある特定の詳細およびオーバロードする必要があるインタフェースの詳細に基づく。
たとえば、図2に特徴付けるシステムは、実施されている特定のシステムのある特定の詳細およびオーバロードする必要があるインタフェースの詳細に基づく。
一例として、上で引用した参考文献において、Alexandrov等は、オペレーティングシステムが提供する/procファイルシステム機能を使用してシステムコールをインタセプトすることにより、標準Unix(登録商標)オペレーティングシステムを個人化された大域的ファイルシステムを実施するように拡張するシステムについて記載している。
さらに、こういったシステムは、一点制御であることから元のシステム中のかなり異なる場所で実施され得る複数の異なる機能のインタセプトが容易な、柔軟な手法を提供しない。
さらに、こういったシステムは、一点制御であることから元のシステム中のかなり異なる場所で実施され得る複数の異なる機能のインタセプトが容易な、柔軟な手法を提供しない。
たとえば、インタセプト/オーバロードに求められる機能が動的リンクライブラリ(DLL)にあり、別の機能がオペレーティングシステム自体にある場合、場当たり的な(アドホック)方策は必然的に場合毎に異なるであろう。
さらに、こういったシステムでは、アプリケーション毎にシステムコール仲介機構の振る舞いに違いを持たせること、および/またはアプリケーション実行中に随意に除去かつ/または再挿入すること、が困難な場合がある。
さらに、こういったシステムでは、アプリケーション毎にシステムコール仲介機構の振る舞いに違いを持たせること、および/またはアプリケーション実行中に随意に除去かつ/または再挿入すること、が困難な場合がある。
また、こういった手法は通常、オペレーティングシステム機能の拡張に関連する大きなオーバヘッドにより非常に遅い傾向がある。
たとえば、オペレーティングシステム拡張を呼び出すアプリケーションの実行速度は通常、オーバヘッドが大きいため、望ましい速度よりもはるかに低速である。
Alexandrov、Ibel、Schauser、およびScheiman著「UFO:A Personal Global File System Based on User-Level Extensions to the Operating System」(ACM Transactions on Computer Systems, Vol.16, No.3, August 1998, pp. 207-233)
たとえば、オペレーティングシステム拡張を呼び出すアプリケーションの実行速度は通常、オーバヘッドが大きいため、望ましい速度よりもはるかに低速である。
Alexandrov、Ibel、Schauser、およびScheiman著「UFO:A Personal Global File System Based on User-Level Extensions to the Operating System」(ACM Transactions on Computer Systems, Vol.16, No.3, August 1998, pp. 207-233)
本発明の目的は、アプリケーション向けにオペレーティングシステム機能を拡張する方法を提供することである。
手短に述べれば、1つのかかる方法は、アプリケーションから1つまたは複数の2進命令を受け取るステップと、1つまたは複数の2進命令が、特定のオペレーティングシステム機能を実行する、オペレーティングシステムへのコールに対応するかどうかを判定するステップと、特定のオペレーティングシステム機能をアプリケーション向けに変更すべきかどうかを判定するステップと、特定のオペレーティングシステム機能をアプリケーション向けに変更すべき場合、変更された機能を実施するコードを実行するステップと、を含む。
本発明の別の実施形態は、アプリケーション向けにオペレーティングシステム機能を拡張するシステムを包含することができる。
手短に述べれば、1つのかかるシステムは、アプリケーションから1つまたは複数の2進命令を受け取る手段と、特定のオペレーティングシステム機能を実行する、オペレーティングシステムへのコールを特定する手段と、特定のオペレーティングシステム機能をアプリケーション向けに変更すべきかどうかを判定する手段と、変更された機能を実施する手段と、を備える。
手短に述べれば、1つのかかるシステムは、アプリケーションから1つまたは複数の2進命令を受け取る手段と、特定のオペレーティングシステム機能を実行する、オペレーティングシステムへのコールを特定する手段と、特定のオペレーティングシステム機能をアプリケーション向けに変更すべきかどうかを判定する手段と、変更された機能を実施する手段と、を備える。
本発明の別の実施形態は、システムコールインタセプト機能およびコアを備えるアプリケーション向けにオペレーティングシステム機能を拡張するシステムを包含することができる。
システムコールインタセプト機能は、以下を行うように構成することができる:アプリケーションから2進命令を受け取り、1つまたは複数の2進命令が、特定のオペレーティングシステム機能を実行する、オペレーティングシステムへのコールに対応するかどうかを判定し、特定のオペレーティングシステム機能をアプリケーション向けに変更すべきであるかどうかを判定する。
コアは、変更された機能を実施するように適合されたコードを実行しキャッシュするように構成することができる。
システムコールインタセプト機能は、以下を行うように構成することができる:アプリケーションから2進命令を受け取り、1つまたは複数の2進命令が、特定のオペレーティングシステム機能を実行する、オペレーティングシステムへのコールに対応するかどうかを判定し、特定のオペレーティングシステム機能をアプリケーション向けに変更すべきであるかどうかを判定する。
コアは、変更された機能を実施するように適合されたコードを実行しキャッシュするように構成することができる。
本発明の別の実施形態では、アプリケーションとハードウェアの間にアプリケーション向けにオペレーティングシステム機能を拡張するためのインタフェースを備えることができる。
手短に述べれば、コンピュータ可読媒体で具現される1つのかかるインタフェースは、アプリケーションから1つまたは複数の2進命令を受け取るように構成されたロジックと、1つまたは複数の2進命令が、特定のオペレーティングシステム機能を実行する、オペレーティングシステムへのコールに対応するかどうかを判定するように構成されたロジックと、特定のオペレーティングシステム機能をアプリケーション向けに変更すべきかどうかを判定するように構成されたロジックと、特定のオペレーティングシステム機能をアプリケーション向けに変更すべき場合、変更された機能を実施するコードを実行するように構成されたロジックと、を備える。
手短に述べれば、コンピュータ可読媒体で具現される1つのかかるインタフェースは、アプリケーションから1つまたは複数の2進命令を受け取るように構成されたロジックと、1つまたは複数の2進命令が、特定のオペレーティングシステム機能を実行する、オペレーティングシステムへのコールに対応するかどうかを判定するように構成されたロジックと、特定のオペレーティングシステム機能をアプリケーション向けに変更すべきかどうかを判定するように構成されたロジックと、特定のオペレーティングシステム機能をアプリケーション向けに変更すべき場合、変更された機能を実施するコードを実行するように構成されたロジックと、を備える。
本発明によれば、アプリケーション向けにオペレーティングシステム機能を拡張する方法を提供することができる。
概して、アプリケーション向けにオペレーティングシステム機能を拡張かつ/または変更する各種システムおよび方法について述べる。
詳細に後述するように、アプリケーションは、動的実行レイヤインタフェース(DELI)を介してオペレーティングシステム機能の拡張および/または変更の呼び出しが可能になる。
他のシステム例は、2001年8月8日付けで出願された「Dynamic Execution Layer Interface for Explicitly or Transparently Executing Application or System Binaries」と題する米国特許出願第09/924,260号(代理人整理番号10011525−1)に記載されている。
システム例について説明した後、システムの動作例を提示して、プログラムバイナリの実行用へのオペレーティングシステム機能の拡張および/または変更を行うことのできる様式について説明する。
詳細に後述するように、アプリケーションは、動的実行レイヤインタフェース(DELI)を介してオペレーティングシステム機能の拡張および/または変更の呼び出しが可能になる。
他のシステム例は、2001年8月8日付けで出願された「Dynamic Execution Layer Interface for Explicitly or Transparently Executing Application or System Binaries」と題する米国特許出願第09/924,260号(代理人整理番号10011525−1)に記載されている。
システム例について説明した後、システムの動作例を提示して、プログラムバイナリの実行用へのオペレーティングシステム機能の拡張および/または変更を行うことのできる様式について説明する。
図3は、アプリケーション102向けにオペレーティングシステム機能を拡張かつ/または変更するシステム300の実施形態を示すブロック図である。
図3に示すように、システム300は、1つまたは複数のアプリケーション102とハードウェア106との間に常駐する動的実行レイヤインタフェース(DELI)302を備える。
当業者は、以下の説明を参照することにより、システム300がDELI302を利用して1つまたは複数のオペレーティングシステム104に関連する機能を拡張かつ/または変更することを認めよう。
図3に示すように、システム300は、1つまたは複数のアプリケーション102とハードウェア106との間に常駐する動的実行レイヤインタフェース(DELI)302を備える。
当業者は、以下の説明を参照することにより、システム300がDELI302を利用して1つまたは複数のオペレーティングシステム104に関連する機能を拡張かつ/または変更することを認めよう。
図3にさらに示すように、アプリケーション102は、インタフェース308を介してDELI302と通信することができる。
DELI312は、インタフェース312を介してハードウェア106と通信することができる。
DELI302は、O/Sインタセプトモジュール304と、1つまたは複数のコードキャッシュ306とを備えることができる。
DELI312は、インタフェース312を介してハードウェア106と通信することができる。
DELI302は、O/Sインタセプトモジュール304と、1つまたは複数のコードキャッシュ306とを備えることができる。
一般に、O/Sインタセプトモジュール304は、アプリケーション102と土台をなすオペレーティングシステムまたは動的ロードライブラリ(DLL)との間のあらゆるインタフェース(たとえば、インタフェース310)をインタセプトかつ/またはオーバロードするように構成される。
O/Sインタセプトモジュール304は、必ずしもDELI302内に組み込む必要はない。
O/Sインタセプトモジュール304は、必ずしもDELI302内に組み込む必要はない。
たとえば、他の実施形態では、O/Sインタセプトモジュール304は、DELI302の外部に配置してもよい。
オペレーティングシステム機能をより効率的に拡張かつ/または変更するために、DELI302は、(オーバロード/インタセプトされたインタフェースに関連するオペレーティングシステム機能の代わりに)変更されたオペレーティングシステム機能を実施するコードをコードキャッシュ306に格納することができる。
オペレーティングシステム機能をより効率的に拡張かつ/または変更するために、DELI302は、(オーバロード/インタセプトされたインタフェースに関連するオペレーティングシステム機能の代わりに)変更されたオペレーティングシステム機能を実施するコードをコードキャッシュ306に格納することができる。
システム300の各種実施形態のアーキテクチャ、動作、および機能について、以下に詳細に述べる。
しかし、序章として、システム300の全体的なアーキテクチャ、動作、および機能について図4を参照して概説する。
ブロック402において、DELI302は、アプリケーション102に対応する2進命令を受け取る。
しかし、序章として、システム300の全体的なアーキテクチャ、動作、および機能について図4を参照して概説する。
ブロック402において、DELI302は、アプリケーション102に対応する2進命令を受け取る。
より詳細に後述するように、DELI302は、透過モード、非透過モード、またはこれら2つを組み合わせたモードで動作することができる。
したがって、DELI302は、DELI302を呼び出すアプリケーション102に対応する2進命令の受け取り、2進命令のフェッチ、あるいは2進命令へのアクセス権取得を行うことができる。
ブロック404において、オペレーティングシステムインタセプトモジュール304が、2進命令によって呼び出されたオペレーティングシステム104へのコールをインタセプトする。
当業者は、オペレーティングシステムインタセプトモジュール304が、アプリケーション102とオペレーティングシステム104との間の任意所望のインタフェース(たとえば、システムコール、ライブラリ関数等)をインタセプトするように構成し得ることを認めよう。
当業者は、オペレーティングシステムインタセプトモジュール304の機能をDELI302内で具現し得るが、そうする必要はないことをさらに認めよう。
したがって、DELI302は、DELI302を呼び出すアプリケーション102に対応する2進命令の受け取り、2進命令のフェッチ、あるいは2進命令へのアクセス権取得を行うことができる。
ブロック404において、オペレーティングシステムインタセプトモジュール304が、2進命令によって呼び出されたオペレーティングシステム104へのコールをインタセプトする。
当業者は、オペレーティングシステムインタセプトモジュール304が、アプリケーション102とオペレーティングシステム104との間の任意所望のインタフェース(たとえば、システムコール、ライブラリ関数等)をインタセプトするように構成し得ることを認めよう。
当業者は、オペレーティングシステムインタセプトモジュール304の機能をDELI302内で具現し得るが、そうする必要はないことをさらに認めよう。
判定ブロック406において、システム300は、オペレーティングシステム104へのコールによって呼び出されている(ブロック404)特定のオペレーティングシステム機能を拡張あるいは変更すべきであるかどうかを判定する。
オペレーティングシステム機能を拡張あるいは変更すべきではない場合、フローはブロック404に戻り、オペレーティングシステム104へのコールがインタセプトされることができる。
一方、2進命令によって呼び出されているオペレーティングシステム機能を拡張あるいは変更すべき場合、システム300は、オペレーティングシステム機能の代わりに変更されたオペレーティングシステム機能(たとえば、オペレーティングシステム拡張関数等)に関連するコードを実行する。
オペレーティングシステム機能を拡張あるいは変更すべきではない場合、フローはブロック404に戻り、オペレーティングシステム104へのコールがインタセプトされることができる。
一方、2進命令によって呼び出されているオペレーティングシステム機能を拡張あるいは変更すべき場合、システム300は、オペレーティングシステム機能の代わりに変更されたオペレーティングシステム機能(たとえば、オペレーティングシステム拡張関数等)に関連するコードを実行する。
図5は、アプリケーション102向けにオペレーティングシステム機能を拡張かつ/または変更する本発明によるプロセスの別の実施形態を示すフローチャートであり、この実施形態をシステム300で実施することができる。
再び図3を参照すると、DELI302は1つまたは複数のコードキャッシュ306を備えることができる。
当業者は、コードキャッシュ306を使用して、オペレーティングシステム機能を拡張あるいは変更するプロセスに関連するオーバヘッドを最小化し得ることを認めよう。
再び図3を参照すると、DELI302は1つまたは複数のコードキャッシュ306を備えることができる。
当業者は、コードキャッシュ306を使用して、オペレーティングシステム機能を拡張あるいは変更するプロセスに関連するオーバヘッドを最小化し得ることを認めよう。
たとえば、システム300の動作では、アプリケーション102に対応する2進命令が、オペレーティングシステム104への特定のコールを頻繁に呼び出すことがある。
上述したように、システム300は、特定のシステムコールをインタセプトし、変更されたオペレーティングシステム機能(たとえば、オペレーティングシステム拡張関数等)に関連するコードを実行するように構成され得る。
この場合、DELI302は、たとえば、頻繁に実行されるオペレーティングシステム拡張関数(または他の関連コード)をキャッシュし、拡張関数を呼び出す元のアプリケーションコードを永久的に変換(コードキャッシュ内で)するように構成されることにより、オーバヘッドを低減することができる。
上述したように、システム300は、特定のシステムコールをインタセプトし、変更されたオペレーティングシステム機能(たとえば、オペレーティングシステム拡張関数等)に関連するコードを実行するように構成され得る。
この場合、DELI302は、たとえば、頻繁に実行されるオペレーティングシステム拡張関数(または他の関連コード)をキャッシュし、拡張関数を呼び出す元のアプリケーションコードを永久的に変換(コードキャッシュ内で)するように構成されることにより、オーバヘッドを低減することができる。
再び図5を参照すると、ブロック502において、システム300は、アプリケーション102に対応する2進命令をフェッチする。
ブロック504において、システム300は、2進命令によって呼び出されたオペレーティングシステム104へのコールをインタセプトする。
上述したように、オペレーティングシステムインタセプトモジュール304は、アプリケーション102とオペレーティングシステム104の間の任意所望のインタフェース(たとえば、システムコール、ライブラリ関数等)をインタセプトするように構成され得る。
ブロック504において、システム300は、2進命令によって呼び出されたオペレーティングシステム104へのコールをインタセプトする。
上述したように、オペレーティングシステムインタセプトモジュール304は、アプリケーション102とオペレーティングシステム104の間の任意所望のインタフェース(たとえば、システムコール、ライブラリ関数等)をインタセプトするように構成され得る。
インタセプト機構は、オペレーティングシステムインタフェースの特定の詳細により様々な方法で実施することができる。
たとえば、syscallインタフェース(たとえば、Microsoft Windows(登録商標)オペレーティングシステムに使用されるINT2A/INT2Bx86命令)の実施に使用される特定の命令パターンに整合するようにインタセプトモジュールに命令することができる。
当業者は、オペレーティングシステムインタセプトモジュール304の機能をDELI302内で具現し得るが、そうする必要はないことをさらに理解しよう。
たとえば、syscallインタフェース(たとえば、Microsoft Windows(登録商標)オペレーティングシステムに使用されるINT2A/INT2Bx86命令)の実施に使用される特定の命令パターンに整合するようにインタセプトモジュールに命令することができる。
当業者は、オペレーティングシステムインタセプトモジュール304の機能をDELI302内で具現し得るが、そうする必要はないことをさらに理解しよう。
判定ブロック506において、システム300は、オペレーティングシステム104へのコールによって呼び出されている(ブロック504)特定のオペレーティングシステム機能を拡張あるいは変更すべきであるかどうかを判定する。
オペレーティングシステム機能を拡張あるいは変更すべきではない場合、フローはブロック502に戻る。
オペレーティングシステム機能を拡張あるいは変更すべきではない場合、フローはブロック502に戻る。
一方、2進命令によって呼び出されているオペレーティングシステム機能を拡張あるいは変更すべき場合、判定ブロック508において、システム300は、変更されたオペレーティングシステム機能(たとえば、オペレーティングシステム拡張関数等)に関連するコードをキャッシュするかどうかを判定する。
コードキャッシュ306にコードがキャッシュされている場合、ブロック510において、システム300がコードキャッシュ306からのコードを実行し、フローはブロック502に続く。
コードキャッシュ306にコードがキャッシュされている場合、ブロック510において、システム300がコードキャッシュ306からのコードを実行し、フローはブロック502に続く。
変更されたオペレーティングシステム機能に関連するコードがキャッシュされていない場合、システム300はコードを実行し(ブロック512)、コードキャッシュ306に格納することができる(ブロック514)。
変更されたオペレーティングシステム機能に関連するコードを実行し格納した後、フローはブロック502に続くことができる。
変更されたオペレーティングシステム機能に関連するコードを実行し格納した後、フローはブロック502に続くことができる。
再び図3を参照すると、DELI302は、高水準または低水準言語で書かれた汎用ソフトウェアレイヤを備える。
DELI302は、オペレーティングシステム(O/S)104を含むかまたは含まないアプリケーション102とハードウェア106との間に常駐して、アプリケーションバイナリコードをハードウェア106から切り離す。
DELI302は、オペレーティングシステム(O/S)104を含むかまたは含まないアプリケーション102とハードウェア106との間に常駐して、アプリケーションバイナリコードをハードウェア106から切り離す。
この構成を通して、DELI302は、エミュレーション、動的変換および最適化、透過的リモートコード実行、仮想ハードウェア環境プログラムのためのコンピュータシステム機能の再マッピング、コード伸張、コード解読等、多種多様な異なるアプリケーションで使用することのできる動的コンピュータプログラムコード変換、キャッシング、およびリンキングサービスを提供することができる。
以下にさらに詳細に考察するように、DELI302は、透過モード、非透過モード、またはこれら2つを組み合わせたモードで動作しながらサービスを提供することができる。
以下にさらに詳細に考察するように、DELI302は、透過モード、非透過モード、またはこれら2つを組み合わせたモードで動作しながらサービスを提供することができる。
透過モードでは、DELI302は、実行中のプログラムが、コンピュータハードウェア上で直接実行されていないことに気付かないようにプログラムの実行を自動的に制御する。
非透過モードでは、DELI302は、アプリケーションプログラミングインタフェース(API)を通してサービスをアプリケーションにエクスポートして、DELI302が特定のシステムイベントに対してどのように反応するかをアプリケーションが制御できるようにする。
非透過モードでは、DELI302は、アプリケーションプログラミングインタフェース(API)を通してサービスをアプリケーションにエクスポートして、DELI302が特定のシステムイベントに対してどのように反応するかをアプリケーションが制御できるようにする。
図3に示すように、DELI302は、少なくとも1つのアプリケーション102とコンピュータハードウェア106との間に常駐する。
特定の構成によっては、アプリケーション102は、DELIの存在を知らない1つまたは複数のユーザアプリケーションおよび/またはDELI302の存在を知りDELIのサービスを利用するように構成されたクライアント(たとえばエミュレータ)を有することができる。
特定の構成によっては、アプリケーション102は、DELIの存在を知らない1つまたは複数のユーザアプリケーションおよび/またはDELI302の存在を知りDELIのサービスを利用するように構成されたクライアント(たとえばエミュレータ)を有することができる。
しかしながら、より一般的には、アプリケーション102は、コンピュータプロセッサによって実行される命令を含むあらゆるタイプのプログラムコードを含む。
O/Sが使用される場合、DELI302は、提供されるサービスの性質によって、O/Sの上位かまたは下位のいずれに常駐してもよい。
たとえば、DELI302がO/Sの上位で動作する場合、DELI302が制御可能なのはアプリケーションの実行のみである。
O/Sが使用される場合、DELI302は、提供されるサービスの性質によって、O/Sの上位かまたは下位のいずれに常駐してもよい。
たとえば、DELI302がO/Sの上位で動作する場合、DELI302が制御可能なのはアプリケーションの実行のみである。
一方、DELI302は、O/Sの下位で動作する場合、O/S104およびアプリケーション102の両方からのシステムコードおよびユーザコードの混合を含むことができる命令ストリームにアクセスすることができる。
ハードウェア106は、あらゆる異なるコンピュータシステムコンポーネントを備えることができるが、通常少なくともコンピュータプロセッサを備える。
ハードウェア106は、あらゆる異なるコンピュータシステムコンポーネントを備えることができるが、通常少なくともコンピュータプロセッサを備える。
図6を参照すると、DELI302は、コア606と、アプリケーションプログラミングインタフェース(API)608と、透過モードレイヤ610と、システム制御・構成レイヤ612と、を含む4つの主なコンポーネントを含むことができる。
上述したように、実施形態によっては、DELI302はO/Sインタセプトモジュール304を備えることができる。
上述したように、実施形態によっては、DELI302はO/Sインタセプトモジュール304を備えることができる。
概して、コア606は、2つの主なサービスをAPI608および透過モードレイヤ610の両方にエクスポートする。
これらサービスのうちの第1のサービスは、ハードウェア106の命令セットに対応するネイティブコードフラグメントまたはコードフラグメントのキャッシングおよびリンキングに関連する。
これらサービスのうちの第1のサービスは、ハードウェア106の命令セットに対応するネイティブコードフラグメントまたはコードフラグメントのキャッシングおよびリンキングに関連する。
第2のサービスは、先にキャッシュされたコードフラグメントを実行することに関連する。
API608は、アプリケーション102から、動作の非透過モードでコア606のキャッシングおよびリンキングサービスへのアクセスを提供する機能をエクスポートする。
透過モードレイヤ610によって、コア606は、動作の透過モードでのコード実行に対する制御を透過的に取得するとともにキャッシュされるコードフラグメントをフェッチすることができる。
API608は、アプリケーション102から、動作の非透過モードでコア606のキャッシングおよびリンキングサービスへのアクセスを提供する機能をエクスポートする。
透過モードレイヤ610によって、コア606は、動作の透過モードでのコード実行に対する制御を透過的に取得するとともにキャッシュされるコードフラグメントをフェッチすることができる。
最後に、システム制御・構成レイヤ612は、たとえばコードのキャッシング、リンキングおよび最適化のためのポリシーを含む、コア606の動作に対するポリシーを提供することによって、DELI302の構成を可能にする。
これらポリシーは、たとえば、アプリケーション102からAPI608を介してレイヤ612に提供することができる。
システム制御・構成レイヤ612はまた、DELI302の透過モードをイネーブルにするか否かを制御し、それによってコア606が入力をAPI608から受け取るか、透過モードレイヤ610から受け取るか、それとも両方から受け取るかが決まる。
これらポリシーは、たとえば、アプリケーション102からAPI608を介してレイヤ612に提供することができる。
システム制御・構成レイヤ612はまた、DELI302の透過モードをイネーブルにするか否かを制御し、それによってコア606が入力をAPI608から受け取るか、透過モードレイヤ610から受け取るか、それとも両方から受け取るかが決まる。
システム300はバイパスパスを備えることができる。
アプリケーション102は、所望の場合バイパスパスを使用してDELI302をバイパスすることができ、したがって、アプリケーションをハードウェア106上で直接実行することができる。
なお、かかる動作は、DELI302が利用されてもされなくてもよい任意の実行レイヤであるため、可能とすることができることを留意されたい。
アプリケーション102は、所望の場合バイパスパスを使用してDELI302をバイパスすることができ、したがって、アプリケーションをハードウェア106上で直接実行することができる。
なお、かかる動作は、DELI302が利用されてもされなくてもよい任意の実行レイヤであるため、可能とすることができることを留意されたい。
図6に示すように、コア606は、コアコントローラ616と、キャッシュマネージャ618と、フラグメントマネージャ620と、最適化マネージャ622と、を備える。
コアコントローラ616は、タスクを、それらタスクを完了する責任を有するコア606の他のコンポーネントに割り当てるディスパッチャとして機能する。
キャッシュマネージャ618は、フラグメントマネージャ620および最適化マネージャ622と共に、システム制御・構成レイヤ612によって指定されるポリシーに従って、1つまたは複数のコードキャッシュ306(たとえば、キャッシュ1〜n)内のコードフラグメントのキャッシングを制御する機構(たとえば、アルゴリズムセット)を備える。
コアコントローラ616は、タスクを、それらタスクを完了する責任を有するコア606の他のコンポーネントに割り当てるディスパッチャとして機能する。
キャッシュマネージャ618は、フラグメントマネージャ620および最適化マネージャ622と共に、システム制御・構成レイヤ612によって指定されるポリシーに従って、1つまたは複数のコードキャッシュ306(たとえば、キャッシュ1〜n)内のコードフラグメントのキャッシングを制御する機構(たとえば、アルゴリズムセット)を備える。
コア606の1つまたは複数のコードキャッシュ306は、たとえば、ハードウェア106の1つまたは複数のプロセッサのハードウェアキャッシュに配置することができ、あるいは、ハードウェアのメインローカルメモリにおいて生成することができる。
コードキャッシュ306が、プロセッサ上のハードウェアキャッシュにマッピングされる場合、命令キャッシュリフィルオーバヘッドの低減、メモリ帯域幅の増大等により、パフォーマンスを大幅に増大することができる。
コードキャッシュ306が、プロセッサ上のハードウェアキャッシュにマッピングされる場合、命令キャッシュリフィルオーバヘッドの低減、メモリ帯域幅の増大等により、パフォーマンスを大幅に増大することができる。
フラグメントマネージャ620は、コードキャッシュ306内のコードフラグメントの構成とフラグメントに対して行う変換のタイプとを指定する。
最後に、最適化マネージャ622は、コードフラグメントに対しそれらの実行を最適化するために適用することができる最適化のセットを含む。
最後に、最適化マネージャ622は、コードフラグメントに対しそれらの実行を最適化するために適用することができる最適化のセットを含む。
上述したように、API608は、アプリケーション102から、DELIサービスへのアクセスを提供する機能をエクスポートする。
より詳細には、API608は、通常DELIの存在を知るクライアントを構成するアプリケーション120に対して、コア606のキャッシングおよびリンキングサービスをエクスポートする。
API608によってエクスポートされるこれらサービスにより、アプリケーション102は、(i)キャッシングのためにコードフラグメントをコア606に明示的に放出することによりおよび/または(ii)DELI302に対しそのコードキャッシュ306からの特定のコードフラグメントを実行するように命令することにより、非透過モードでのDELI302の動作を制御することができる。
より詳細には、API608は、通常DELIの存在を知るクライアントを構成するアプリケーション120に対して、コア606のキャッシングおよびリンキングサービスをエクスポートする。
API608によってエクスポートされるこれらサービスにより、アプリケーション102は、(i)キャッシングのためにコードフラグメントをコア606に明示的に放出することによりおよび/または(ii)DELI302に対しそのコードキャッシュ306からの特定のコードフラグメントを実行するように命令することにより、非透過モードでのDELI302の動作を制御することができる。
さらに、API608はまた、DELI302の動作を開始および中断する関数もエクスポートすることができる。
たとえば、API608は、DELI302の透過的な動作を開始することができ、さらにDELIがかかる動作をいつ終了するかを指示することができる。
たとえば、API608は、DELI302の透過的な動作を開始することができ、さらにDELIがかかる動作をいつ終了するかを指示することができる。
API608はまた、上述したように、アプリケーション102によって指定されるポリシーをコア606に(たとえば、フラグメントマネージャ602および/または最適化マネージャ622に)引渡すことにより、DELI302の構成を容易にする。
非透過モードでの動作を容易にする際のAPI608の使用法については、図9に関連して以下に述べる。
非透過モードでの動作を容易にする際のAPI608の使用法については、図9に関連して以下に述べる。
図6をさらに参照すると、透過モードレイヤ610は通常、実行中のアプリケーション102に対する制御を透過的に取得するために使用されるインジェクタ(injector)626を有する。
DELI302が完全透過モードで動作する時(すなわち、アプリケーションがDELIの存在を知らない場合)、インジェクタ626を使用して、アプリケーションが実行を開始する前にDELIをアプリケーション102に投入し(inject)、それによってアプリケーションがDELIの制御下で動作できるようにする。
かかる環境では、DELI302は、アプリケーション102の実行可能イメージの変更を避けて、例外処理の妨害を避ける。
DELI302が完全透過モードで動作する時(すなわち、アプリケーションがDELIの存在を知らない場合)、インジェクタ626を使用して、アプリケーションが実行を開始する前にDELIをアプリケーション102に投入し(inject)、それによってアプリケーションがDELIの制御下で動作できるようにする。
かかる環境では、DELI302は、アプリケーション102の実行可能イメージの変更を避けて、例外処理の妨害を避ける。
制御は、インジェクタ626によりいくつかの異なる方法で取得することができ、こういった各方法では、アプリケーションバイナリを、バイナリがロードされる仮想アドレスを変更することなくロードする。
例として、O/Sカーネルローダを変更することができ、それによってDELI302(たとえば、共有ライブラリとしてコンパイルされる)が、カーネルローダによりアプリケーションの実行可能イメージをロードする時に自動的にロードされる。
代替的に、ユーザレベルローダを使用して、カーネルローダを変更することなく利用してアプリケーション102をサスペンドモードでメモリにロードし、後にアプリケーションに(たとえば、アプリケーションスタックに)命令を投入することができ、アプリケーションが再開される時に、DELI302共有ライブラリをロードする。
例として、O/Sカーネルローダを変更することができ、それによってDELI302(たとえば、共有ライブラリとしてコンパイルされる)が、カーネルローダによりアプリケーションの実行可能イメージをロードする時に自動的にロードされる。
代替的に、ユーザレベルローダを使用して、カーネルローダを変更することなく利用してアプリケーション102をサスペンドモードでメモリにロードし、後にアプリケーションに(たとえば、アプリケーションスタックに)命令を投入することができ、アプリケーションが再開される時に、DELI302共有ライブラリをロードする。
他の代替例では、アプリケーション102にDELI302を添付するためにptraceを使用することができる。
当技術分野において既知であるように、ptraceは、あるプロセスが別のプロセスを制御可能にする、デバッガによって使用されることが多い機構である。
当技術分野において既知であるように、ptraceは、あるプロセスが別のプロセスを制御可能にする、デバッガによって使用されることが多い機構である。
DELI302は、ptraceを介してアプリケーション102に添付する別個のプロセスとして構成することができ、アプリケーションのバイナリイメージの最上部の実行スタートアップコード(たとえば、crt0)がアプリケーションのエントリポイントを呼び出そうとする時点まで、アプリケーションを実行する。
その後、アプリケーション102の実行を中断することができ、DELI302を使用してアプリケーション命令をフェッチしアプリケーション102に代わってそのアプリケーション命令を実行することができる。
その後、アプリケーション102の実行を中断することができ、DELI302を使用してアプリケーション命令をフェッチしアプリケーション102に代わってそのアプリケーション命令を実行することができる。
さらに別の代替例では、アプリケーションのテキストセグメントを、実行可能ファイルの別個のコピーに展開することができる。
特に、アプリケーションのバイナリイメージを一時的な場所にコピーすることができ、DELIテキストセグメントを最後に追加することによりアプリケーションのテキストセグメントを拡張することができ、開始シンボル(すなわち、crt0と呼ばれるエントリポイント)をDELIエントリポイントに変更することができる。
特に、アプリケーションのバイナリイメージを一時的な場所にコピーすることができ、DELIテキストセグメントを最後に追加することによりアプリケーションのテキストセグメントを拡張することができ、開始シンボル(すなわち、crt0と呼ばれるエントリポイント)をDELIエントリポイントに変更することができる。
そして、その結果である実行可能ファイルを、execを使用して実行することができる。
オリジナルアプリケーションのテキストセグメントは依然として、それが通常有するものと同じ仮想アドレスにロードされているが、DELI302は、実際のアプリケーション102が開始する前に制御を取得する。
オリジナルアプリケーションのテキストセグメントは依然として、それが通常有するものと同じ仮想アドレスにロードされているが、DELI302は、実際のアプリケーション102が開始する前に制御を取得する。
別の例では、DELI302は、crt0の特別なバージョンを使用してアプリケーション102に対する制御を取得することができる。
当分野において既知のように、crt0コードは、コマンドライン引数のピックアップ、初期スタックおよびデータセグメントのセットアップ、次に開始シンボル(通常、アプリケーション102のmain( )関数)の値のコール実行の責任を負う。
当分野において既知のように、crt0コードは、コマンドライン引数のピックアップ、初期スタックおよびデータセグメントのセットアップ、次に開始シンボル(通常、アプリケーション102のmain( )関数)の値のコール実行の責任を負う。
アプリケーション102のエントリポイントを呼び出す前に、crt0は、動的リンクローダdldをマッピングし、次に、動的リンクローダdldが、アプリケーション102によって参照されるあらゆる動的リンクライブラリ(DLL)をロードする。
crt0のカスタムバージョンを使用して、さらにDELIコード(それ自体DLLとしてコンパイルされる)をマッピングし、開始シンボルによって定義されるエントリポイントの代わりにDELIのエントリポイントを呼び出すことができる。
crt0のカスタムバージョンを使用して、さらにDELIコード(それ自体DLLとしてコンパイルされる)をマッピングし、開始シンボルによって定義されるエントリポイントの代わりにDELIのエントリポイントを呼び出すことができる。
アプリケーション102に対する制御が取得される方法に関りなく、その後命令フェッチコントローラ628を使用して、アプリケーションバイナリコードのフラグメント(たとえば、トレース)のコピーを抽出し(すなわち、フェッチし)、それらをキャッシュするためにDELIコア606に渡し、コア606に対してそのコードキャッシュ306から適当なキャッシュ済みコピーを実行するよう命令することができる。
かかる動作を容易にするための透過モードレイヤ610の使用については、図10に関連して以下に説明する。
かかる動作を容易にするための透過モードレイヤ610の使用については、図10に関連して以下に説明する。
本明細書では、DELI302を、透過モードレイヤ610を有するように図示し説明したが、当業者は、本開示全体を見ることにより、DELIの動作がAPI608を介してアプリケーション102(すなわち、クライアント)によってのみ制御される場合、このレイヤを完全に省略してよいことを認めるであろうことが留意される。
上述したように、システム制御・構成レイヤ612は、コードのキャッシングおよびリンキングのポリシーを提供することによりDELI302の構成を可能にする。
DELI302はいかなる特定のタイプのポリシーまたはポリシー内容にも限定されないが、ポリシーは通常、DELIがいかに挙動するかを決める。
たとえば、レイヤ612は、コードのフラグメントがアプリケーション102からいかに抽出されるか、オリジナルコードからいかにフラグメントが生成されるか、より大きいコードフラグメントを形成するためにいかに複数のコードフラグメントを互いにリンクすることができるか等に関するポリシーを提供してよい。
DELI302はいかなる特定のタイプのポリシーまたはポリシー内容にも限定されないが、ポリシーは通常、DELIがいかに挙動するかを決める。
たとえば、レイヤ612は、コードのフラグメントがアプリケーション102からいかに抽出されるか、オリジナルコードからいかにフラグメントが生成されるか、より大きいコードフラグメントを形成するためにいかに複数のコードフラグメントを互いにリンクすることができるか等に関するポリシーを提供してよい。
レイヤのポリシーは、静的とも動的ともすることができる。
前者の場合、構築時に構成を固定することにより、ポリシーをDELI302にハードコード化することができる。
後者の場合、ポリシーを、アプリケーション102によりAPI608における関数呼び出しを介して動的に提供することができる。
前者の場合、構築時に構成を固定することにより、ポリシーをDELI302にハードコード化することができる。
後者の場合、ポリシーを、アプリケーション102によりAPI608における関数呼び出しを介して動的に提供することができる。
ポリシーの実施は、DELI302が特定のシステムおよび/またはハードウェアイベント(たとえば、例外および割込み)に反応する様式を制御する。
上述したポリシーに加えて、システム制御・構成レイヤ612は、コードキャッシュ306のサイズ、ログファイルが生成されるか否か、コードフラグメントが最適化されるべきか否か、等を指定することができる。
上述したポリシーに加えて、システム制御・構成レイヤ612は、コードキャッシュ306のサイズ、ログファイルが生成されるか否か、コードフラグメントが最適化されるべきか否か、等を指定することができる。
システム制御・構成レイヤ612は、さらに、システムおよびハードウェア機能に向けられたアプリケーションバイナリコードの命令をインタセプトすることにより、システムおよびハードウェア機能の抽象化をサポートする。
そして、これら命令は、フラグメントマネージャ620により、システム制御・構成レイヤ612の命令下でフラグメント形成プロセスの一部として置き換えられる。
システム制御・構成レイヤ612は、欠損したまたは欠陥のあるハードウェアに向けられた命令を識別し、フラグメントマネージャ620に対してそれらを、同様であるが異なるハードウェア106に向けられた対応する命令か、あるいはオリジナルハードウェアのソフトウェアシミュレーションと置き換えさせる。
そして、これら命令は、フラグメントマネージャ620により、システム制御・構成レイヤ612の命令下でフラグメント形成プロセスの一部として置き換えられる。
システム制御・構成レイヤ612は、欠損したまたは欠陥のあるハードウェアに向けられた命令を識別し、フラグメントマネージャ620に対してそれらを、同様であるが異なるハードウェア106に向けられた対応する命令か、あるいはオリジナルハードウェアのソフトウェアシミュレーションと置き換えさせる。
上述したように、DELI302は、O/Sインタセプトモジュール302、O/Sインタセプトモジュール304を備えることができる。
当業者は、オペレーティングシステムインタセプトモジュール304が、アプリケーション102とオペレーティングシステム104との間の任意所望のインタフェース(たとえば、システムコール、ライブラリ関数等)をインタセプトするように構成してよいことを認めよう。
当業者は、オペレーティングシステムインタセプトモジュール304が、アプリケーション102とオペレーティングシステム104との間の任意所望のインタフェース(たとえば、システムコール、ライブラリ関数等)をインタセプトするように構成してよいことを認めよう。
図7は、コア606の構成例および動作を示す。
この図に示すように、コア606は、API608または透過モードレイヤ610から2つのタイプの要求を受け入れる。
第1に、関数インタフェースを介してコードフラグメントをキャッシュしリンクする要求700を受け入れることができる。
この図に示すように、コア606は、API608または透過モードレイヤ610から2つのタイプの要求を受け入れる。
第1に、関数インタフェースを介してコードフラグメントをキャッシュしリンクする要求700を受け入れることができる。
かかる要求は、たとえば「DELI_emit_fragment(tag,fragbuf)」という形態の関数を含むことができる。
この関数は、コードフラグメントを、DELIキャッシュ306に格納するためのパラメータおよび識別子(たとえば、タグ)として受け取る。
さらに、コア606は、キャッシュ306に格納され実行するためにハードウェア106に渡されるコードフラグメントを識別する、「DELI_execute_fragment(tag)」等の関数インタフェースを介して、特定のコードフラグメントタグにおいて実行を開始する要求を受け入れる。
この関数は、コードフラグメントを、DELIキャッシュ306に格納するためのパラメータおよび識別子(たとえば、タグ)として受け取る。
さらに、コア606は、キャッシュ306に格納され実行するためにハードウェア106に渡されるコードフラグメントを識別する、「DELI_execute_fragment(tag)」等の関数インタフェースを介して、特定のコードフラグメントタグにおいて実行を開始する要求を受け入れる。
コアコントローラ616はこれら要求を処理して適当なコアモジュールにディスパッチする。
そして、所与の識別子を有するコードフラグメントの放出に対する要求702を、フラグメントマネージャ620に渡すことができる。
フラグメントマネージャ620は、フラグメント形成ポリシー704に従ってコードフラグメントを変換し、ことによると、そのインスツルメンテーション(instrumentation)ポリシー706に従ってコードフラグメントをインスツルメント(instrument)し、そのコードフラグメントをそのフラグメントリンキングポリシー708に従って先にキャッシュされたフラグメントとリンクする。
そして、所与の識別子を有するコードフラグメントの放出に対する要求702を、フラグメントマネージャ620に渡すことができる。
フラグメントマネージャ620は、フラグメント形成ポリシー704に従ってコードフラグメントを変換し、ことによると、そのインスツルメンテーション(instrumentation)ポリシー706に従ってコードフラグメントをインスツルメント(instrument)し、そのコードフラグメントをそのフラグメントリンキングポリシー708に従って先にキャッシュされたフラグメントとリンクする。
たとえば、フラグメントマネージャ620は、キャッシュ306内で複数のコードフラグメントをリンクしてよく、それによって実行がコードフラグメントの実行の最後に別のコードフラグメントにジャンプするようになり、そのためキャッシュからの実行の長さが増大する。
これを達成するために、フラグメントマネージャ620は、キャッシュマネージャ618に対してフラグメント割付命令710を発行する。
そして、フラグメントマネージャ620は、キャッシュマネージャ618に対し、コードキャッシュ306の処理済みコードフラグメントを割付ける要求を送信する。
これを達成するために、フラグメントマネージャ620は、キャッシュマネージャ618に対してフラグメント割付命令710を発行する。
そして、フラグメントマネージャ620は、キャッシュマネージャ618に対し、コードキャッシュ306の処理済みコードフラグメントを割付ける要求を送信する。
キャッシュマネージャ618は、コードフラグメントの割付を制御するものであり、通常はキャッシュ空間を管理するそれ自体のキャッシュポリシー712を備えている。
しかしながら、フラグメントマネージャ620はまた、キャッシュマネージャ618に対して特定のフラグメント割付解除命令714も発行してもよい。
しかしながら、フラグメントマネージャ620はまた、キャッシュマネージャ618に対して特定のフラグメント割付解除命令714も発行してもよい。
たとえば、フラグメントマネージャ620は、現フラグメントを先に割付けたフラグメントと統合するよう決定してよく、その場合、先のフラグメントは割付解除される必要がある場合がある。
構成によっては、キャッシュマネージャ618とフラグメントマネージャ620とは、コードキャッシュ306およびコードフラグメントを、2001年5月22日に発行され、「A Preemptive Replacement Strategy for a Caching Dynamic Translator Based on Changes in the Translation Rate」と題された米国特許第6,237,065号に図示され記載される方法で管理することができる。
代替的に、コードキャッシュ306およびコードフラグメントは、2001年1月5日に出願され、「A Partitioned Code Cache Organization to Exploit Program Locality」と題された米国特許出願第09/755,389号に図示され記載される方法で実行されてもよい。
構成によっては、キャッシュマネージャ618とフラグメントマネージャ620とは、コードキャッシュ306およびコードフラグメントを、2001年5月22日に発行され、「A Preemptive Replacement Strategy for a Caching Dynamic Translator Based on Changes in the Translation Rate」と題された米国特許第6,237,065号に図示され記載される方法で管理することができる。
代替的に、コードキャッシュ306およびコードフラグメントは、2001年1月5日に出願され、「A Partitioned Code Cache Organization to Exploit Program Locality」と題された米国特許出願第09/755,389号に図示され記載される方法で実行されてもよい。
フラグメントマネージャ620は、フラグメントをキャッシュマネージャ618に渡す前に、フラグメントを最適化マネージャ622に渡すことにより(716)、その最適化ポリシー718に従ってコードフラグメントの品質を向上させてよい。
構成によっては、最適化マネージャ622は、コードフラグメントを、2001年1月5日に出願され、「A Fast Runtime Scheme for Removing Dead Code Across Linked Fragments」と題された米国特許出願第09/755,381号に図示され記載されている方法で最適化してよい。
構成によっては、最適化マネージャ622は、コードフラグメントを、2001年1月5日に出願され、「A Fast Runtime Scheme for Removing Dead Code Across Linked Fragments」と題された米国特許出願第09/755,381号に図示され記載されている方法で最適化してよい。
代替として、最適化マネージャ622は、2001年1月5日に出願され、「A Memory Disambiguation Scheme for Partially Redundant Load Removal」と題された米国特許出願第09/755,774号に図示し記載される方法でコードフラグメントを最適化してよい。
特に、最適化マネージャ622はまた、冗長計算の削除、冗長メモリアクセスの削除、プロシージャコール/リターンオーバヘッドを除去するインライン化関数等、以前からあるコンパイラ最適化技法を使用して、コードフラグメントを最適化してもよい。
特に、最適化マネージャ622はまた、冗長計算の削除、冗長メモリアクセスの削除、プロシージャコール/リターンオーバヘッドを除去するインライン化関数等、以前からあるコンパイラ最適化技法を使用して、コードフラグメントを最適化してもよい。
上述したように、フラグメントマネージャ620は、そのフラグメント形成ポリシー704に従ってコードフラグメントを変換する。
フラグメントマネージャ620によって実行される変換は、たとえば、相対アドレス、分岐アドレス等を変更することによりメモリアドレス参照を変化させることによる、コード再配置を含むことができる。
フラグメントマネージャ620によって実行される変換は、たとえば、相対アドレス、分岐アドレス等を変更することによりメモリアドレス参照を変化させることによる、コード再配置を含むことができる。
コードフラグメントのレイアウトはまた、コードの物理レイアウトをその機能(すなわち、セマンティック)を変化させることなく変化させて、変更してもよい。
これら変換は、フラグメントマネージャ620により、API608を通しておよび命令フェッチコントローラ628から受け取られるフラグメントに対して実行される。
これら変換は、フラグメントマネージャ620により、API608を通しておよび命令フェッチコントローラ628から受け取られるフラグメントに対して実行される。
コードインスツルメンテーションを実行するために、フラグメントマネージャ620は、コードフラグメントの実行の頻度、メモリアドレスがアクセスされる頻度等に関するデータ等、コードプロファイリングのためのインスツルメンテーションポリシー706に従ってデータを収集する。
フラグメント形成または割付解除を容易にするために、プログラムカウンタを使用してこれら統計値を収集することができる。
フラグメント形成または割付解除を容易にするために、プログラムカウンタを使用してこれら統計値を収集することができる。
これらポリシーは、API608を介して送信されるかまたはDELI構築時に確立されるポリシー命令を受け取る、システム制御・構成レイヤ612によって構成される。
ポリシーは、フラグメントを生成し、インスツルメントし、最適化し、リンクするために、異なる方法に対するオプションを含んでよく、あるいは、ポリシーは、単に、これらタスクを実行するためのDELI302内のハードコード化アルゴリズムであってよい。
ポリシーは、フラグメントを生成し、インスツルメントし、最適化し、リンクするために、異なる方法に対するオプションを含んでよく、あるいは、ポリシーは、単に、これらタスクを実行するためのDELI302内のハードコード化アルゴリズムであってよい。
DELIコア606によって受け入れられる第2のタイプの要求は、所与の識別子(たとえば、タグ)によって識別されるフラグメントを実行する要求720である。
かかる場合、コアコントローラ616は、フラグメントマネージャ620に対してルックアップ要求722を発行し、フラグメントマネージャ620は、フラグメントがキャッシュ306に目下存在しアクティブである場合、対応するコードキャッシュアドレス724を返す。
例として、フラグメントマネージャ620は、コードフラグメントの位置を識別するためにタグを使用することができる、存在しアクティブなコードフラグメントのルックアップテーブルを維持することができる。
かかる場合、コアコントローラ616は、フラグメントマネージャ620に対してルックアップ要求722を発行し、フラグメントマネージャ620は、フラグメントがキャッシュ306に目下存在しアクティブである場合、対応するコードキャッシュアドレス724を返す。
例として、フラグメントマネージャ620は、コードフラグメントの位置を識別するためにタグを使用することができる、存在しアクティブなコードフラグメントのルックアップテーブルを維持することができる。
代替的に、フラグメントマネージャ620またはキャッシュマネージャ618は、コードフラグメントが存在しアクティブであるか否かを追跡する他のいかなる適当な技法も使用することができる。
フラグメントがキャッシュ306に目下存在せずアクティブでない場合、フラグメントマネージャ620は、コアコントローラ616に対してエラーコードを返し、コアコントローラ616は、最初の要求側にフラグメントタグをキャッシュミスアドレスとして返す(726)。
一方、フラグメントが目下存在しアクティブである場合、コアコントローラ616は、キャッシュマネージャ618に対し最初の要求をそのキャッシュアドレスとともにパッチする(728)。
フラグメントがキャッシュ306に目下存在せずアクティブでない場合、フラグメントマネージャ620は、コアコントローラ616に対してエラーコードを返し、コアコントローラ616は、最初の要求側にフラグメントタグをキャッシュミスアドレスとして返す(726)。
一方、フラグメントが目下存在しアクティブである場合、コアコントローラ616は、キャッシュマネージャ618に対し最初の要求をそのキャッシュアドレスとともにパッチする(728)。
それによって、キャッシュマネージャ618は、そのコードキャッシュ306におけるアドレス指定されたコードフラグメントに制御を引渡すことによって、アドレス指定されたコードフラグメントを実行する。
そして、キャッシュミスが発生するまで、すなわち実行される次のアプリケーションアドレスに対するコピーがキャッシュに目下存在しなくなるまで、実行はコードキャッシュ306に注目し続ける。
そして、キャッシュミスが発生するまで、すなわち実行される次のアプリケーションアドレスに対するコピーがキャッシュに目下存在しなくなるまで、実行はコードキャッシュ306に注目し続ける。
上記状態は、たとえば実行中のコードがコードキャッシュ306から退避しようとすることによって検出することができる。
キャッシュミスは、キャッシュマネージャ618からコアコントローラ616に報告され(730)、その後最初の要求側に報告される(726)。
キャッシュミスは、キャッシュマネージャ618からコアコントローラ616に報告され(730)、その後最初の要求側に報告される(726)。
図8は、システム300(図3)を実行することのできるコンピュータシステム800のアーキテクチャ例を示す略図である。
概して、コンピュータシステム800は、デスクトップコンピュータ、ポータブルコンピュータ、専用サーバコンピュータ、マルチプロセッサコンピューティング装置、携帯電話、個人情報端末(PDA)、ハンドヘルドまたはペンベースコンピュータ等、多種多様な有線および/または無線コンピューティング装置のうちの任意の1つを構成することができる。
コンピュータシステム800は、その特定の構成に関らず、たとえば、処理装置802、メモリ804、1つまたは複数のユーザインタフェース装置806、ディスプレイ808、1つまたは複数の入出力(I/O)装置810および1つまたは複数のネットワーキング装置812を備えることができ、これらはそれぞれ、ローカルインタフェース814に接続される。
概して、コンピュータシステム800は、デスクトップコンピュータ、ポータブルコンピュータ、専用サーバコンピュータ、マルチプロセッサコンピューティング装置、携帯電話、個人情報端末(PDA)、ハンドヘルドまたはペンベースコンピュータ等、多種多様な有線および/または無線コンピューティング装置のうちの任意の1つを構成することができる。
コンピュータシステム800は、その特定の構成に関らず、たとえば、処理装置802、メモリ804、1つまたは複数のユーザインタフェース装置806、ディスプレイ808、1つまたは複数の入出力(I/O)装置810および1つまたは複数のネットワーキング装置812を備えることができ、これらはそれぞれ、ローカルインタフェース814に接続される。
処理装置802は、カスタムメイドもしくは市販のプロセッサと、コンピュータシステム800と関連するいくつかのプロセッサ中の中央処理装置(CPU)もしくは補助プロセッサと、半導体ベースのマイクロプロセッサ(マイクロチップの形態)と、マイクロプロセッサと、1つまたは複数の特定用途向け集積回路(ASIC)と、複数の適当に構成されたデジタル論理ゲートと、個別にかつあらゆる組合せでコンピューティングシステムの動作全体を調整するための個別要素を備えた、他の既知の電気的構成と、を含むことができる。
メモリ804は、揮発性メモリ素子(たとえば、ランダムアクセスメモリ(DRAM、SRAM等のRAM))と不揮発性メモリ素子(たとえば、ROM、ハードドライブ、テープ、CDROM等)との組合せのうちの任意の1つを含むことができる。
通常、メモリ804は、O/S104と、1つまたは複数のアプリケーション102(たとえば、ユーザアプリケーションおよび/またはクライアント)と、すでに詳細に説明したDELI302と、を含む。
当業者は、メモリ804が簡潔にする目的のために省略した他のコンポーネントを含むことができる(通常は含む)ことを認めよう。
通常、メモリ804は、O/S104と、1つまたは複数のアプリケーション102(たとえば、ユーザアプリケーションおよび/またはクライアント)と、すでに詳細に説明したDELI302と、を含む。
当業者は、メモリ804が簡潔にする目的のために省略した他のコンポーネントを含むことができる(通常は含む)ことを認めよう。
1つまたは複数のユーザインタフェース装置806は、ユーザがコンピューティングシステム800と対話することができるコンポーネントを備える。
たとえば、コンピューティングシステム800がパーソナルコンピュータ(PC)を構成する場合、これらコンポーネントはキーボードとマウスを含むことができる。
たとえば、コンピューティングシステム800がパーソナルコンピュータ(PC)を構成する場合、これらコンポーネントはキーボードとマウスを含むことができる。
コンピューティングシステム800がハンドヘルド装置(たとえば、PDA、携帯電話)を構成する場合、これらコンポーネントは、ファンクションキーまたはボタン、タッチセンシティブスクリーン、スタイラス等を含むことができる。
ディスプレイ808は、PCの場合はコンピュータモニタまたはプラズマスクリーン、またはハンドヘルド装置の場合は液晶ディスプレイ(LCD)を含むことができる。
ディスプレイ808は、PCの場合はコンピュータモニタまたはプラズマスクリーン、またはハンドヘルド装置の場合は液晶ディスプレイ(LCD)を含むことができる。
図8をさらに参照すると、1つまたは複数のI/O装置810は、コンピューティングシステム800の別のシステムおよび/または装置への接続を容易にするように適合されているため、1つまたは複数のシリアル、パラレル、小型コンピュータシステムインタフェース(SCSI)、ユニバーサルシリアルバス(USB)、IEEE1394(たとえば、Firewire(登録商標))および/またはパーソナルエリアネットワーク(PAN)コンポーネントを含んでよい。
ネットワークインタフェース装置812は、ネットワークを介してデータを送信および/または受信するために使用されるあらゆるコンポーネントを備える。
例として、ネットワークインタフェース装置812は、入力と出力とをともに通信することができる装置、たとえば変調器/復調器(たとえば、モデム)、無線(たとえば、無線周波数(RF))送受信機、電話インタフェース、ブリッジ、ルータ、ネットワークカード等を含む。
ネットワークインタフェース装置812は、ネットワークを介してデータを送信および/または受信するために使用されるあらゆるコンポーネントを備える。
例として、ネットワークインタフェース装置812は、入力と出力とをともに通信することができる装置、たとえば変調器/復調器(たとえば、モデム)、無線(たとえば、無線周波数(RF))送受信機、電話インタフェース、ブリッジ、ルータ、ネットワークカード等を含む。
本明細書では、あらゆるソフトウェアおよび/またはファームウェアを説明した。
このソフトウェアおよび/またはファームウェアを、任意のコンピュータ関連システムまたは方法によるかまたはそれと関連して使用するために、任意のコンピュータ可読媒体に格納することができることが理解されなければならない。
この文書の文脈において、コンピュータ可読媒体は、コンピュータ関連システムまたは方法によるかまたはそれと関連して使用されるコンピュータプログラムを内蔵するかまたは格納することができる、電子、磁気、光あるいは他の物理装置または手段を示す。
このソフトウェアおよび/またはファームウェアを、任意のコンピュータ関連システムまたは方法によるかまたはそれと関連して使用するために、任意のコンピュータ可読媒体に格納することができることが理解されなければならない。
この文書の文脈において、コンピュータ可読媒体は、コンピュータ関連システムまたは方法によるかまたはそれと関連して使用されるコンピュータプログラムを内蔵するかまたは格納することができる、電子、磁気、光あるいは他の物理装置または手段を示す。
これらプログラムは、コンピュータベースシステム、プロセッサ内蔵システム、あるいは命令実行システム、機器または装置からの命令をフェッチしそれら命令を実行することができる他のシステム等の、命令実行システム、機器または装置によるかまたはそれと関連して使用されるために、任意のコンピュータ可読媒体において具体化することができる。
本文書の文脈において、「コンピュータ可読媒体」は、命令実行システム、機器または装置によるかまたはそれに関連して使用されるプログラムを格納し、通信し、伝播し、または移送することができるいかなる手段ともすることができる。
本文書の文脈において、「コンピュータ可読媒体」は、命令実行システム、機器または装置によるかまたはそれに関連して使用されるプログラムを格納し、通信し、伝播し、または移送することができるいかなる手段ともすることができる。
たとえば、コンピュータ可読媒体は、限定されないが、電子、磁気、光、電磁気、赤外線または半導体のシステム、機器、装置または伝播媒体とすることができる。
コンピュータ可読媒体のより特定の例(非網羅的リスト)には、1つまたは複数のワイヤを有する電気的接続、ポータブルコンピュータディスケット、ランダムアクセスメモリ(RAM)、リードオンリメモリ(ROM)、消去可能プログラム可能リードオンリメモリ(EPROM、EEPROMまたはフラッシュメモリ)、光ファイバおよびポータブルコンパクトディスクリードオンリメモリ(CDROM)が含まれる。
コンピュータ可読媒体のより特定の例(非網羅的リスト)には、1つまたは複数のワイヤを有する電気的接続、ポータブルコンピュータディスケット、ランダムアクセスメモリ(RAM)、リードオンリメモリ(ROM)、消去可能プログラム可能リードオンリメモリ(EPROM、EEPROMまたはフラッシュメモリ)、光ファイバおよびポータブルコンパクトディスクリードオンリメモリ(CDROM)が含まれる。
なお、コンピュータ可読媒体は、プログラムが印刷された用紙または他の適当な媒体とすることもできる。
それは、プログラムを、たとえば用紙または他の媒体の光学的走査により電子的に取込み、その後、コンパイルし、解釈しまたは必要であれば他の適当な方法で処理した後、コンピュータメモリに格納することができるためである。
それは、プログラムを、たとえば用紙または他の媒体の光学的走査により電子的に取込み、その後、コンパイルし、解釈しまたは必要であれば他の適当な方法で処理した後、コンピュータメモリに格納することができるためである。
DELI302の一般的な性質について上で説明したが、これより図9および図10を参照してDELIの動作の実施例について説明する。
上述したように、DELI302は、2つの一般的な動作モード、すなわち透過モードおよび非透過モードで、またそれらを組合せたモードで動作する。
これらモードでの動作を説明するためにフローチャートを提供する。
上述したように、DELI302は、2つの一般的な動作モード、すなわち透過モードおよび非透過モードで、またそれらを組合せたモードで動作する。
これらモードでの動作を説明するためにフローチャートを提供する。
フローチャートにおけるいずれのプロセスステップまたはブロックも、プロセスにおける特定の論理関数またはステップを実施するための1つまたは複数の実行可能命令を含む、モジュール、セグメントまたはコードの一部を表すことは理解されなければならない。
特定のプロセスステップ例を示すが、代替の実施形態も可能であることが認められよう。
さらに、ステップは、関係する機能により、実質的に同時かまたは逆の順序を含む、示しまたは説明する順序ではない順序で実行されてもよい。
特定のプロセスステップ例を示すが、代替の実施形態も可能であることが認められよう。
さらに、ステップは、関係する機能により、実質的に同時かまたは逆の順序を含む、示しまたは説明する順序ではない順序で実行されてもよい。
概して、DELI302が透過的にかまたは非透過的にアプリケーション102の実行に対する制御を取得したか否かに関らず、アプリケーションは、ハードウェア106に対して直接には実行しない。
むしろ、アプリケーションコードは、コードキャッシュ306に保持されてよいコードフラグメントの形態でDELI302を通して実行する。
むしろ、アプリケーションコードは、コードキャッシュ306に保持されてよいコードフラグメントの形態でDELI302を通して実行する。
図9は、透過モードでのDELI動作の単純な実施例を示す。
より詳細には、図9は、アプリケーション102がDELIの存在を知らない完全透過モードでのDELIの動作を示す。
ブロック902から始まり、DELI302がまず開始される。
透過モードで動作している場合、この開始は、アプリケーション102が開始されると開始されることができる。
より詳細には、図9は、アプリケーション102がDELIの存在を知らない完全透過モードでのDELIの動作を示す。
ブロック902から始まり、DELI302がまず開始される。
透過モードで動作している場合、この開始は、アプリケーション102が開始されると開始されることができる。
その開始時、DELI302は、ブロック904に示すように、透過モードレイヤ610のインジェクタ626によってアプリケーション102に投入され、それによってDELIはアプリケーションとその実行とに対する制御を取得する。
上述したように、この制御を取得することができる方法には様々ある。
上述したように、この制御を取得することができる方法には様々ある。
DELI302がアプリケーション102に対する制御を取得すると、DELIを使用して、上述したもの等のいくつかの異なるサービスのうちの任意の1つを提供することができる。
たとえば、DELI302は、ハードウェアおよび/またはソフトウェアエミュレーション、動的変換および最適化、透過的リモートコード実行、仮想ハードウェア環境プログラムのためのコンピュータシステム機能の再マッピング、コード伸張、コード解読等を容易にすることができる。
たとえば、DELI302は、ハードウェアおよび/またはソフトウェアエミュレーション、動的変換および最適化、透過的リモートコード実行、仮想ハードウェア環境プログラムのためのコンピュータシステム機能の再マッピング、コード伸張、コード解読等を容易にすることができる。
これら異なるサービスは、それぞれコードキャッシュ306内のプログラムコードフラグメントのキャッシングおよびリンキングを含む。
アプリケーションバイナリからコピーされるコードのいくつかのフラグメントをキャッシュし、それらを何らかの方法で変換することにより、後にコードキャッシュ306からの変換済みコードを実行することによって所望のサービスを提供することができる。
アプリケーションバイナリからコピーされるコードのいくつかのフラグメントをキャッシュし、それらを何らかの方法で変換することにより、後にコードキャッシュ306からの変換済みコードを実行することによって所望のサービスを提供することができる。
DELI302は、コードをキャッシュする前に、コードのいずれの特定のフラグメントをキャッシュするかを確定しなければならない。
完全透過モードで動作している場合、アプリケーション102はDELI302を知らないことから、DELIは、いずれのコードフラグメントをキャッシュするかに関しアプリケーションから指示を受け取らない。
完全透過モードで動作している場合、アプリケーション102はDELI302を知らないことから、DELIは、いずれのコードフラグメントをキャッシュするかに関しアプリケーションから指示を受け取らない。
コードのキャッシングを、DELI構築時に生成されたポリシーを通して指示することができるが、より好ましくは、DELI302は、少なくとも部分的にこれらの確定を単独で行う能力を有する。
DELI302は、これを、ブロック906に示すように、アプリケーション102によるコードの実行を監視することによって行うことができる。
そのように行う際に、DELI302は、たとえばいずれのフラグメントが最も頻繁に使用されるかを判定することにより、たとえばいずれのコードフラグメントがアプリケーション102に対して最も有用であるかに関する情報を収集することができる。
DELI302は、これを、ブロック906に示すように、アプリケーション102によるコードの実行を監視することによって行うことができる。
そのように行う際に、DELI302は、たとえばいずれのフラグメントが最も頻繁に使用されるかを判定することにより、たとえばいずれのコードフラグメントがアプリケーション102に対して最も有用であるかに関する情報を収集することができる。
DELI302の制御下でアプリケーション102によりあらゆるコードフラグメントが実行される際に、DELIは、実行されるコードの各部を「見る(sees)」。
したがって、DELI302は、監視プロセスを通して、いずれのコードフラグメントが最も頻繁に使用されるかを判定することができる。
そして、DELI302は、コードのいずれの部分が「ホット(hot)」である、すなわち、システム制御・構成レイヤ612によって提供されるポリシーに関してアプリケーション実行に最も重要であるかの判定を行うことができる。
したがって、DELI302は、監視プロセスを通して、いずれのコードフラグメントが最も頻繁に使用されるかを判定することができる。
そして、DELI302は、コードのいずれの部分が「ホット(hot)」である、すなわち、システム制御・構成レイヤ612によって提供されるポリシーに関してアプリケーション実行に最も重要であるかの判定を行うことができる。
上述したように、この判定は、実行インスタンスを追跡するプログラムカウンタを使用して行うことができる。
当業者は、コードのいずれの部分がホットであるかを判定するためにあらゆる他の方法を使用することができることを認めよう。
この判定を行うことができる方法の例は、1998年11月5日に出願され、「Method for Selecting Active Code Traces for Translation in a Caching Dynamic Translator」と題された、米国特許出願第09/186,945号と、1999年5月14日に出願され、「Low Overhead Speculative Selection of Hot Traces in a Caching Dynamic Translator」と題された米国特許出願第09/312,296号と、に記載されている。
当業者は、コードのいずれの部分がホットであるかを判定するためにあらゆる他の方法を使用することができることを認めよう。
この判定を行うことができる方法の例は、1998年11月5日に出願され、「Method for Selecting Active Code Traces for Translation in a Caching Dynamic Translator」と題された、米国特許出願第09/186,945号と、1999年5月14日に出願され、「Low Overhead Speculative Selection of Hot Traces in a Caching Dynamic Translator」と題された米国特許出願第09/312,296号と、に記載されている。
図9をさらに参照すると、各コードフラグメントが実行される際に、DELI302は、判定要素908に示すように、関連するコードフラグメントが先にキャッシュされているか否かを判定することができる。
キャッシュされている場合、DELI302は、キャッシュ済み(かつ通常は変換済み)コードを含むコードキャッシュ306にジャンプし、ブロック910に示すように、このコードが、オリジナルアプリケーションコードの代りにハードウェア106によって実行される。
コードがキャッシュされているか否かの判定は、上述したように、ネイティブアプリケーションコードとコードキャッシュ306内でキャッシュされた類似物との関連を識別する識別子(たとえば、タグ)を参照して行うことができる。
キャッシュされている場合、DELI302は、キャッシュ済み(かつ通常は変換済み)コードを含むコードキャッシュ306にジャンプし、ブロック910に示すように、このコードが、オリジナルアプリケーションコードの代りにハードウェア106によって実行される。
コードがキャッシュされているか否かの判定は、上述したように、ネイティブアプリケーションコードとコードキャッシュ306内でキャッシュされた類似物との関連を識別する識別子(たとえば、タグ)を参照して行うことができる。
そして、キャッシュされていなかった(すなわち、キャッシュミス)コードに対して参照するまで、コードキャッシュ306に存在するコードのリンクされたフラグメントの実行を含む、キャッシュ済みコードの実行が継続する。
判定要素410を参照すると、未キャッシュコードに対する参照がある場合、DELI302はアプリケーションコードにジャンプして戻り、ブロック912に示すようにそのコードの実行が再開される。
この時、DELI302は、この実行の監視を再開することができる(ブロック906)。
判定要素410を参照すると、未キャッシュコードに対する参照がある場合、DELI302はアプリケーションコードにジャンプして戻り、ブロック912に示すようにそのコードの実行が再開される。
この時、DELI302は、この実行の監視を再開することができる(ブロック906)。
判定要素908に戻り、DELI302が、関連するコードフラグメントがコードキャッシュ306に存在していないと判定した場合、フローは判定要素914に進み、所定のポリシーに関してコードフラグメントがホットであるか否かが判定される。
コードがホットでない場合、フローはブロック404に戻り、アプリケーションコード実行の監視を継続する。
一方、コードがホットである場合、ブロック416に示すように、透過モードレイヤ610の命令フェッチコントローラ628を使用してフラグメントをフェッチすることにより、コードフラグメントがコピーされる。
コードがホットでない場合、フローはブロック404に戻り、アプリケーションコード実行の監視を継続する。
一方、コードがホットである場合、ブロック416に示すように、透過モードレイヤ610の命令フェッチコントローラ628を使用してフラグメントをフェッチすることにより、コードフラグメントがコピーされる。
この時点で、ブロック916に示すように、コードフラグメントを何らかの方法で変換することができる。
さらに、キャッシュ306内のコードフラグメントを、コードリンキングのために確立されたポリシーに従ってリンクすることができる。
コード変換の性質は、DELI302が提供すべきサービスのタイプによって決まる。
さらに、キャッシュ306内のコードフラグメントを、コードリンキングのために確立されたポリシーに従ってリンクすることができる。
コード変換の性質は、DELI302が提供すべきサービスのタイプによって決まる。
たとえば、DELI302が単にアプリケーション実行を最適化するものである場合、この変換は、パフォーマンスを向上させるためにコードを再配置および/または再構成することを含むことができる。
行われる変換の性質に関らず、コード構造は、土台をなすセマンティックを変更することなくある程度変更される。
コードフラグメントが変換されると、ブロック918に示すように、変換済みコードをコードキャッシュ306にキャッシュすることができ、フローが上述したブロック910に進むことによって、DELI302内で実行することができる。
行われる変換の性質に関らず、コード構造は、土台をなすセマンティックを変更することなくある程度変更される。
コードフラグメントが変換されると、ブロック918に示すように、変換済みコードをコードキャッシュ306にキャッシュすることができ、フローが上述したブロック910に進むことによって、DELI302内で実行することができる。
上述したように、DELI302は、非透過モードでは別様に動作する。
概して、DELI302は、非透過モードで動作している場合、たとえば、アプリケーション102がアクセスすることができるAPI608の関数をエクスポートするDLLまたは静的リンクモジュール(statically linked module)として動作してよい。
非透過モードでは、アプリケーション102(すなわち、クライアント)は、DELI302を知っており、DELIのサービスを利用するように構成される。
概して、DELI302は、非透過モードで動作している場合、たとえば、アプリケーション102がアクセスすることができるAPI608の関数をエクスポートするDLLまたは静的リンクモジュール(statically linked module)として動作してよい。
非透過モードでは、アプリケーション102(すなわち、クライアント)は、DELI302を知っており、DELIのサービスを利用するように構成される。
最も単純な場合、クライアント(たとえば、エミュレータ)は、API608を介してDELI動作のすべての態様を制御する。
かかる場合、DELI302を利用して、API608を介してクライアントによって提供される明示的な命令に従ってコードをキャッシュし、リンクし、最適化することができる。
たとえば、DELI302に対し、アプリケーション実行中に最も頻繁に使用されると考えられるいくつかのコードフラグメントをキャッシュするように命令することができる。
かかる場合、DELI302を利用して、API608を介してクライアントによって提供される明示的な命令に従ってコードをキャッシュし、リンクし、最適化することができる。
たとえば、DELI302に対し、アプリケーション実行中に最も頻繁に使用されると考えられるいくつかのコードフラグメントをキャッシュするように命令することができる。
これは、たとえば、タグを識別することによりDELI302にコードの位置を提供することによって達成することができる。
かかる場合、DELI302は、API608によって命令されるようにコードフラグメントを監視するのではなく記録する。
さらに、クライアントは、DELIに対して適用可能なタグを識別することにより、API608を介していずれのキャッシュ済みフラグメントを実行すべきかに関し、DELI302に対して命令することができる。
かかる場合、DELI302は、API608によって命令されるようにコードフラグメントを監視するのではなく記録する。
さらに、クライアントは、DELIに対して適用可能なタグを識別することにより、API608を介していずれのキャッシュ済みフラグメントを実行すべきかに関し、DELI302に対して命令することができる。
しかしながら、より一般的なシナリオでは、クライアントはDELI302に対しそのサービスを透過的に提供するように要求する。
かかる場合、クライアントは、DELI302の動作を呼び出すと共に、DELIがいつその動作を停止するかに関する命令を提供する。
図10に、このような動作の実施例を提供する。
かかる場合、クライアントは、DELI302の動作を呼び出すと共に、DELIがいつその動作を停止するかに関する命令を提供する。
図10に、このような動作の実施例を提供する。
ブロック1002から開始され、DELI302が開始される。
非透過モードでは、この開始は、「DELI_START」等の開始コマンドが、DELI302を呼出すAPI608によって引渡される時に発生する。
開始されると、ブロック1004に示すように、透過モードレイヤ610を起動することができ、フローは、図10に関して上述した透過モードと同様に継続することができる。
非透過モードでは、この開始は、「DELI_START」等の開始コマンドが、DELI302を呼出すAPI608によって引渡される時に発生する。
開始されると、ブロック1004に示すように、透過モードレイヤ610を起動することができ、フローは、図10に関して上述した透過モードと同様に継続することができる。
したがって、DELI302は、アプリケーション(クライアント)によるコードの実行を監視し(1006)、コードフラグメントが先にキャッシュされているか否かを判定し(1008)、適用可能である場合はキャッシュ済みコードを実行し(1010)、ホットなコードフラグメントをコピーし(516)、コピー済みコードフラグメントを変換し(518)、変換済みコードフラグメントをキャッシュする(1018)ことができる。
DELI302の動作は、このように、クライアントの要求に従ってDELIに動作を停止させる状況になるまで継続する。
例として、この割込みは、API608を介してDELI302に送信される関数呼び出しの最後に配置された「DELI_STOP」コマンドによって達成することができる。
DELI302の動作は、このように、クライアントの要求に従ってDELIに動作を停止させる状況になるまで継続する。
例として、この割込みは、API608を介してDELI302に送信される関数呼び出しの最後に配置された「DELI_STOP」コマンドによって達成することができる。
上述したように、DELI302を使用してプログラムバイナリの復号化を容易にすることができる。
たとえば、DELI302を使用して、圧縮プログラムコードを伸張および実行することができる。
上述したように、現行の伸張/実行ソリューションには、たとえばシステムパフォーマンスの低下、および相対的に大容量のメモリの必要性を含む、いくつかの問題がある。
たとえば、DELI302を使用して、圧縮プログラムコードを伸張および実行することができる。
上述したように、現行の伸張/実行ソリューションには、たとえばシステムパフォーマンスの低下、および相対的に大容量のメモリの必要性を含む、いくつかの問題がある。
しかしながら、こういった問題は、DELI302を使用することにより回避することができる。
これは、DELIが、コードフラグメントおよび個々の命令等、コードのごくわずかな部分を制御するためである。
これは、DELIが、コードフラグメントおよび個々の命令等、コードのごくわずかな部分を制御するためである。
動作時、DELI302を使用して、コードフラグメントを伸張すると共に、最も頻繁に使用されるコードフラグメントをコードキャッシュ306内に伸張された形態でキャッシュすることができる。
かかる動作により、伸張されるアプリケーションコードの部分が小さくなり、そのため伸張オーバヘッドが低減し必要な利用可能システムメモリが低減する。
さらに、最も頻繁に使用されるコードフラグメントが伸張された形態でキャッシュされるため、必要な動的伸張が著しく小さくなり、それによってパフォーマンスが向上する。
かかる動作により、伸張されるアプリケーションコードの部分が小さくなり、そのため伸張オーバヘッドが低減し必要な利用可能システムメモリが低減する。
さらに、最も頻繁に使用されるコードフラグメントが伸張された形態でキャッシュされるため、必要な動的伸張が著しく小さくなり、それによってパフォーマンスが向上する。
アプリケーションバイナリの復号化および実行を行う際のDELI302の動作の一実施例を図6に示す。
この例では、復号化サービスは、透過動作モードで提供される。
復号化について伸張に関して説明するが、当業者は、プログラムコード解読等、他の形式の復号化を行うことができることを認めるであろう。
この例では、復号化サービスは、透過動作モードで提供される。
復号化について伸張に関して説明するが、当業者は、プログラムコード解読等、他の形式の復号化を行うことができることを認めるであろう。
ブロック600から開始され、DELI302が開始され、ブロック602に示すように、その実行に対する制御を取得するように開始する前にアプリケーション102に投入される。
この制御により、DELI302は、ブロック604に示すように、最終的に実行されるあらゆる圧縮されたアプリケーション命令をインタセプトすることができる。
この制御により、DELI302は、ブロック604に示すように、最終的に実行されるあらゆる圧縮されたアプリケーション命令をインタセプトすることができる。
図9に関して説明した動作モードと同様に、DELI302は、コードの実行を監視し、それによっていずれのコードフラグメントをキャッシュするかを判定することができる。
したがって上述したように、DELI302は、判定要素606に示すように、関連するコードフラグメントが先に伸張されキャッシュされているか否かを判定することができる。
したがって上述したように、DELI302は、判定要素606に示すように、関連するコードフラグメントが先に伸張されキャッシュされているか否かを判定することができる。
伸張されキャッシュされている場合、DELI302は、伸張コードを含むコードキャッシュ306にジャンプし、ブロック608に示すように、このコードがハードウェア106によりオリジナルアプリケーションコードの代りに実行される。
この場合もまた、未キャッシュコードが参照されるまで、キャッシュ済みコードの実行が継続(610)し、かかるコードが参照された時点で、DELI302はアプリケーションコードおよびブロック604に戻るようジャンプする。
この場合もまた、未キャッシュコードが参照されるまで、キャッシュ済みコードの実行が継続(610)し、かかるコードが参照された時点で、DELI302はアプリケーションコードおよびブロック604に戻るようジャンプする。
再び判定要素606を参照すると、コードキャッシュ306に関連するコードフラグメントが存在しない場合、フローはブロック612に進み、命令がDELI302によって伸張され(すなわち復号化され)、それによって命令を評価することができる。
例として、この伸張を、復号化マネージャ130によって行うことができる。
この伸張(すなわち復号化)を、DELI302の復号化マネージャ130によって実行されるものとして説明するが、当業者は、この関数を、代替的に、クライアントアプリケーションのソフトウェアコンポーネントかまたは土台をなすコンピューティングシステムのハードウェアコンポーネント等の別のコンポーネントによって実行することができることを認めるであろう。
例として、この伸張を、復号化マネージャ130によって行うことができる。
この伸張(すなわち復号化)を、DELI302の復号化マネージャ130によって実行されるものとして説明するが、当業者は、この関数を、代替的に、クライアントアプリケーションのソフトウェアコンポーネントかまたは土台をなすコンピューティングシステムのハードウェアコンポーネント等の別のコンポーネントによって実行することができることを認めるであろう。
命令が伸張されると、ブロック614に示すように、DELI302は、たとえば1つまたは複数の命令バッファに対し命令のコピーを生成する。
次いで、判定要素616を参照すると、DELI302は、アプリケーション命令が所定ポリシーに関してホットであるか否かを判定する。
命令がホットでない場合、フローはブロック618に進み、コピーされた伸張済み命令が実行される。
しかし命令がホットである場合、伸張済み命令は所望に応じて変換され(620)、次に特定機能が必要とされる時の実行のために利用可能となるように、伸張された形態でキャッシュされる(622)。
次いで、判定要素616を参照すると、DELI302は、アプリケーション命令が所定ポリシーに関してホットであるか否かを判定する。
命令がホットでない場合、フローはブロック618に進み、コピーされた伸張済み命令が実行される。
しかし命令がホットである場合、伸張済み命令は所望に応じて変換され(620)、次に特定機能が必要とされる時の実行のために利用可能となるように、伸張された形態でキャッシュされる(622)。
かかる伸張および実行サービスもまた、DELI302によって非透過モードで動作中に提供することができる。
たとえば、アプリケーション102(すなわち、クライアント)かまたは別のコンポーネント(図示せず)を、アプリケーションコードを伸張し、最も頻繁に使用される伸張済みコードをキャッシュするためにDELI302を呼び出すように構成することができる。
かかるシナリオでは、アプリケーション102によって実行されるコードが先に圧縮されたコードであることを除いて、フローは図10に示すものと類似する。
たとえば、アプリケーション102(すなわち、クライアント)かまたは別のコンポーネント(図示せず)を、アプリケーションコードを伸張し、最も頻繁に使用される伸張済みコードをキャッシュするためにDELI302を呼び出すように構成することができる。
かかるシナリオでは、アプリケーション102によって実行されるコードが先に圧縮されたコードであることを除いて、フローは図10に示すものと類似する。
復号化サービスが、DELI302によって透過モードで提供されるか非透過モードで提供されるかに関らず、システムパフォーマンスとメモリ利用とに関して、従来の方策と比較していくつかの利点を達成することができる。
たとえば、伸張/実行サービスが提供される場合に観察することのできる伸張ペナルティは、コードの多くの部分が伸張されなければならないソフトウェアソリューションで発生するペナルティが50%程度であるのに比して、およそ10%である。
メモリに関しては、アプリケーションコードの大部分が圧縮された形態のままであるため、現行のソフトウェアソリューションと比較して実行中に必要なメモリが著しく少なくなる。
たとえば、伸張/実行サービスが提供される場合に観察することのできる伸張ペナルティは、コードの多くの部分が伸張されなければならないソフトウェアソリューションで発生するペナルティが50%程度であるのに比して、およそ10%である。
メモリに関しては、アプリケーションコードの大部分が圧縮された形態のままであるため、現行のソフトウェアソリューションと比較して実行中に必要なメモリが著しく少なくなる。
本発明の特定の実施形態を、例示の目的のために上記説明および図面において詳細に開示したが、当業者には、その変形および変更を、併記の特許請求項に示すような本発明の範囲から逸脱することなく行うことができることが理解されよう。
たとえば、DELIについて復号化および実行サービスを提供するのみとして上に説明したが、あらゆる他のサービスをDELIによって同時に提供することができることに留意されたい。
たとえば、DELIによって提供される復号化および実行サービスを、たとえばクライアントによって促進されるハードウェアまたはソフトウェアエミュレーションを含む他のタスクを実行する時に利用することができる。
本開示はかかる応用を含むものであることが意図される。
たとえば、DELIについて復号化および実行サービスを提供するのみとして上に説明したが、あらゆる他のサービスをDELIによって同時に提供することができることに留意されたい。
たとえば、DELIによって提供される復号化および実行サービスを、たとえばクライアントによって促進されるハードウェアまたはソフトウェアエミュレーションを含む他のタスクを実行する時に利用することができる。
本開示はかかる応用を含むものであることが意図される。
本発明は、コンピュータのオペレーティングシステムに利用可能である。
102・・・アプリケーション、
104・・・オペレーティングシステム、
106・・・ハードウェア、
302・・・動的実行レイヤインタフェース、
304・・・O/Sインタセプトモジュール、
306・・・コードキャッシュ、
606・・・コア、
610・・・透過モードレイヤ、
612・・・システム制御・構成レイヤ、
616・・・コアコントローラ、
618・・・キャッシュマネージャ、
620・・・フラグメントマネージャ、
622・・・最適化マネージャ、
626・・・インジェクタ、
628・・・命令フェッチコントローラ、
704・・・フラグメント形成ポリシー、
706・・・インスツルメンテーションポリシー、
708・・・フラグメントリンキングポリシー、
712・・・キャッシュポリシー、
718・・・最適化ポリシー、
802・・・処理装置、
804・・・メモリ、
806・・・ユーザインタフェース装置、
808・・・ディスプレイ、
810・・・I/O装置、
812・・・ネットワークインタフェース装置、
814・・・ローカルインタフェース、
104・・・オペレーティングシステム、
106・・・ハードウェア、
302・・・動的実行レイヤインタフェース、
304・・・O/Sインタセプトモジュール、
306・・・コードキャッシュ、
606・・・コア、
610・・・透過モードレイヤ、
612・・・システム制御・構成レイヤ、
616・・・コアコントローラ、
618・・・キャッシュマネージャ、
620・・・フラグメントマネージャ、
622・・・最適化マネージャ、
626・・・インジェクタ、
628・・・命令フェッチコントローラ、
704・・・フラグメント形成ポリシー、
706・・・インスツルメンテーションポリシー、
708・・・フラグメントリンキングポリシー、
712・・・キャッシュポリシー、
718・・・最適化ポリシー、
802・・・処理装置、
804・・・メモリ、
806・・・ユーザインタフェース装置、
808・・・ディスプレイ、
810・・・I/O装置、
812・・・ネットワークインタフェース装置、
814・・・ローカルインタフェース、
Claims (10)
- アプリケーション(102)向けにオペレーティングシステム機能を拡張する方法であって、
前記アプリケーション(102)から1つまたは複数の2進命令を受け取るステップと、
前記1つまたは複数の2進命令が、特定のオペレーティングシステム機能を実行する、オペレーティングシステム(104)へのコール(call)に対応するかどうかを判定するステップと、
前記特定のオペレーティングシステム機能を前記アプリケーション(102)向けに変更すべきかどうかを判定するステップと、
前記特定のオペレーティングシステム機能を前記アプリケーション(102)向けに変更すべき場合、前記変更された機能を実施するコードを実行するステップと
を含む方法。 - 前記1つまたは複数の2進命令がオペレーティングシステム(104)へのコールに対応するかどうかを判定するステップは、システムコールをインタセプトするステップを含む
請求項1記載の方法。 - 前記アプリケーション(102)に対応する2進命令を受け取るステップは、アプリケーションプログラムインタフェース(608)を介して2進命令を受け取ることを含む
請求項1記載の方法。 - 前記アプリケーション(102)に対応する2進命令を受け取るステップは、動的実行レイヤインタフェース(302)を前記アプリケーション(102)に投入することにより、前記2進命令の実行に対する制御を取得するステップを含む
請求項1記載の方法。 - 前記変更された機能を実施するコードをコードキャッシュ(306)に格納するステップをさらに含む
請求項1記載の方法。 - 前記変更された機能を実施するコードがコードキャッシュ(306)に格納されているかどうかを判定するステップと、
前記変更された機能を実施するコードを前記コードキャッシュ(306)から実行するステップと
をさらに含む請求項1記載の方法。 - アプリケーション(102)向けにオペレーティングシステム機能を拡張するシステムであって、
アプリケーション(102)から2進命令を受け取る手段と、
特定のオペレーティングシステム機能を実行する、オペレーティングシステム(104)へのコールを特定する手段と、
前記特定のオペレーティングシステム機能を前記アプリケーション(102)向けに変更すべきかどうかを判定する手段と、
前記変更された機能を実施する手段と
を備えるシステム。 - アプリケーション(102)向けのオペレーティングシステム機能を拡張するように構成されたコンピュータ(800)であって、
メモリ(804)に常駐するオペレーティングシステム(104)および少なくとも1つのアプリケーション(102)と、
システムコールインタセプト機能(304)であって、
前記アプリケーション(102)から2進命令を受け取り、
前記1つまたは複数の2進命令が、特定のオペレーティングシステム機能を実行する、前記オペレーティングシステム(104)へのコールに対応するかどうかを判定し、
前記特定のオペレーティングシステム機能を前記アプリケーション(102)向けに変更すべきであるかどうかを判定する
ように構成されたシステムコールインタセプト機能(304)と、
前記変更された機能を実施するように適合されたコードを実行し、キャッシュするように構成されたコア(606)と、
該コンピュータ(800)に関連するロジックを処理するように構成されたハードウェア(106)と
を備えるコンピュータ。 - 前記アプリケーション(102)に前記コア(606)のキャッシュ機能および実行機能へのアクセスを提供するように構成されたアプリケーションプログラミングインタフェース(608)をさらに備える
請求項8記載のコンピュータ。 - 前記コア(606)の動作にポリシーを提供するように適合されたシステム制御・構成レイヤ(612)をさらに備える
請求項8記載のコンピュータ。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/212,275 US20040025165A1 (en) | 2002-08-05 | 2002-08-05 | Systems and methods for extending operating system functionality for an application |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004070944A true JP2004070944A (ja) | 2004-03-04 |
Family
ID=31187736
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003274597A Withdrawn JP2004070944A (ja) | 2002-08-05 | 2003-07-15 | アプリケーション向けにオペレーティングシステム機能を拡張するシステムおよび方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20040025165A1 (ja) |
EP (1) | EP1398697A3 (ja) |
JP (1) | JP2004070944A (ja) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006293673A (ja) * | 2005-04-11 | 2006-10-26 | Toshiba Corp | マイクロプロセッサおよびその制御方法 |
JP2007109219A (ja) * | 2005-09-16 | 2007-04-26 | Ricoh Co Ltd | 画像形成装置、情報処理方法、情報処理プログラム、及び記録媒体 |
JP2008516323A (ja) * | 2004-10-12 | 2008-05-15 | ピクセル(リサーチ)リミテッド | プラットホーム独立の動的リンキング |
JP2008516324A (ja) * | 2004-10-12 | 2008-05-15 | ピクセル(リサーチ)リミテッド | ランタイム動的リンキング |
US9141374B2 (en) | 2005-09-16 | 2015-09-22 | Ricoh Company, Ltd. | Image forming device, information processing method, information processing program, and recording medium |
Families Citing this family (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6920550B2 (en) * | 2001-11-15 | 2005-07-19 | Hewlett-Packard Development Company, L.P. | System and method for decoding and executing program binaries |
US7051340B2 (en) * | 2001-11-29 | 2006-05-23 | Hewlett-Packard Development Company, L.P. | System and method for isolating applications from each other |
US6915513B2 (en) * | 2001-11-29 | 2005-07-05 | Hewlett-Packard Development Company, L.P. | System and method for dynamically replacing code |
US6928536B2 (en) * | 2001-11-29 | 2005-08-09 | Hewlett-Packard Development Company, L.P. | Dynamic execution layer interface for replacing instructions requiring unavailable hardware functionality with patch code and caching |
US6907519B2 (en) | 2001-11-29 | 2005-06-14 | Hewlett-Packard Development Company, L.P. | Systems and methods for integrating emulated and native code |
US20030182653A1 (en) * | 2002-03-22 | 2003-09-25 | Giuseppe Desoli | Systems and methods for verifying correct execution of emulated code via dynamic state verification |
US20030192035A1 (en) * | 2002-04-09 | 2003-10-09 | Duesterwald Ald Evelyn | Systems and methods for implementing efficient execution transfers between successive translations of stack-based program code in a virtual machine environment |
US7784058B2 (en) * | 2003-09-22 | 2010-08-24 | Trigence Corp. | Computing system having user mode critical system elements as shared libraries |
US7739689B1 (en) * | 2004-02-27 | 2010-06-15 | Symantec Operating Corporation | Internal monitoring of applications in a distributed management framework |
US20060074809A1 (en) * | 2004-09-24 | 2006-04-06 | Meyer Barry D | Usage data collection system and method |
US7587722B2 (en) * | 2004-12-03 | 2009-09-08 | Microsoft Corporation | Extending operating system subsystems |
US7721298B2 (en) * | 2004-12-03 | 2010-05-18 | Microsoft Corporation | Operating system performance |
US8843725B2 (en) * | 2005-09-19 | 2014-09-23 | Spectra Logic Corporation | Virtual interchangeable storage device |
US7735136B2 (en) * | 2005-04-18 | 2010-06-08 | Vmware, Inc. | 0-touch and 1-touch techniques for improving the availability of computer programs under protection without compromising security |
US7945958B2 (en) * | 2005-06-07 | 2011-05-17 | Vmware, Inc. | Constraint injection system for immunizing software programs against vulnerabilities and attacks |
US7523289B2 (en) * | 2005-09-30 | 2009-04-21 | Spectra Logic Corporation | Random access storage system capable of performing storage operations intended for alternative storage devices |
EP1864219A1 (en) | 2006-02-28 | 2007-12-12 | Mentor Graphics Corporation | Monitoring physical parameters in an emulation environment |
US20080052691A1 (en) * | 2006-06-29 | 2008-02-28 | Naveen Neelakantam | Communicating with and recovering state information from a dynamic translator |
US7574566B2 (en) * | 2006-09-21 | 2009-08-11 | Sun Microsystems, Inc. | System and method for efficient software cache coherence |
US7720671B2 (en) * | 2006-11-30 | 2010-05-18 | Oracle America, Inc. | Method and system for child-parent mechanism emulation via a general interface |
US20080148277A1 (en) * | 2006-12-18 | 2008-06-19 | Nokia Corporation | Optimizing calls from a managed runtime environment to microkernel extended functionality |
US7983893B2 (en) | 2008-01-08 | 2011-07-19 | Mentor Graphics Corporation | Fault support in an emulation environment |
US8214195B2 (en) * | 2008-03-21 | 2012-07-03 | Mentor Graphics Corporation | Testing in a hardware emulation environment |
US20090248390A1 (en) * | 2008-03-31 | 2009-10-01 | Eric Durand | Trace debugging in a hardware emulation environment |
US8423628B2 (en) * | 2008-06-25 | 2013-04-16 | Xerox Corporation | Method and apparatus for extending functionality of networked devices |
US8607344B1 (en) * | 2008-07-24 | 2013-12-10 | Mcafee, Inc. | System, method, and computer program product for initiating a security action at an intermediate layer coupled between a library and an application |
US8407316B2 (en) * | 2008-10-30 | 2013-03-26 | Xerox Corporation | System and method for managing a print job in a printing system |
US8842313B2 (en) * | 2008-10-30 | 2014-09-23 | Xerox Corporation | System and method for managing a print job in a printing system |
US10235216B1 (en) * | 2009-10-15 | 2019-03-19 | Ivanti, Inc. | Modifying system-defined user interface control functionality on a computing device |
US8593671B2 (en) * | 2009-10-16 | 2013-11-26 | Xerox Corporation | System and method for controlling usage of printer resources |
EP2378417A1 (en) * | 2010-04-16 | 2011-10-19 | Accenture Global Services Limited | Extending the functionality of an embedded system |
US8966463B2 (en) * | 2011-11-29 | 2015-02-24 | Microsoft Technology Licensing, Llc | Eliminating redundant function calls |
US8725124B2 (en) | 2012-03-05 | 2014-05-13 | Enterproid Hk Ltd | Enhanced deployment of applications |
US20130260730A1 (en) * | 2012-03-28 | 2013-10-03 | Enterproid Hk Ltd | Custom application container for mobile operating systems and/or devices |
US10268514B1 (en) * | 2016-03-22 | 2019-04-23 | Amazon Technologies, Inc. | Performance analysis of stateless compute functions using function call intercept |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5379432A (en) * | 1993-07-19 | 1995-01-03 | Taligent, Inc. | Object-oriented interface for a procedural operating system |
US5455951A (en) * | 1993-07-19 | 1995-10-03 | Taligent, Inc. | Method and apparatus for running an object-oriented program on a host computer with a procedural operating system |
US5768593A (en) * | 1996-03-22 | 1998-06-16 | Connectix Corporation | Dynamic cross-compilation system and method |
US5974549A (en) * | 1997-03-27 | 1999-10-26 | Soliton Ltd. | Security monitor |
US6275938B1 (en) * | 1997-08-28 | 2001-08-14 | Microsoft Corporation | Security enhancement for untrusted executable code |
US6397242B1 (en) * | 1998-05-15 | 2002-05-28 | Vmware, Inc. | Virtualization system including a virtual machine monitor for a computer with a segmented architecture |
US6704925B1 (en) * | 1998-09-10 | 2004-03-09 | Vmware, Inc. | Dynamic binary translator with a system and method for updating and maintaining coherency of a translation cache |
IL132916A (en) * | 1999-11-14 | 2004-02-08 | Mcafee Inc | Method and system for intercepting an application program interface |
US6920550B2 (en) * | 2001-11-15 | 2005-07-19 | Hewlett-Packard Development Company, L.P. | System and method for decoding and executing program binaries |
US6915513B2 (en) * | 2001-11-29 | 2005-07-05 | Hewlett-Packard Development Company, L.P. | System and method for dynamically replacing code |
US20030101439A1 (en) * | 2001-11-29 | 2003-05-29 | Giuseppe Desoli | System and method for supporting emulation of a computer system through dynamic code caching and transformation |
US20030101381A1 (en) * | 2001-11-29 | 2003-05-29 | Nikolay Mateev | System and method for virus checking software |
US6907519B2 (en) * | 2001-11-29 | 2005-06-14 | Hewlett-Packard Development Company, L.P. | Systems and methods for integrating emulated and native code |
US7051340B2 (en) * | 2001-11-29 | 2006-05-23 | Hewlett-Packard Development Company, L.P. | System and method for isolating applications from each other |
US6928536B2 (en) * | 2001-11-29 | 2005-08-09 | Hewlett-Packard Development Company, L.P. | Dynamic execution layer interface for replacing instructions requiring unavailable hardware functionality with patch code and caching |
US20030182653A1 (en) * | 2002-03-22 | 2003-09-25 | Giuseppe Desoli | Systems and methods for verifying correct execution of emulated code via dynamic state verification |
US20030192035A1 (en) * | 2002-04-09 | 2003-10-09 | Duesterwald Ald Evelyn | Systems and methods for implementing efficient execution transfers between successive translations of stack-based program code in a virtual machine environment |
-
2002
- 2002-08-05 US US10/212,275 patent/US20040025165A1/en not_active Abandoned
-
2003
- 2003-07-04 EP EP03254255A patent/EP1398697A3/en not_active Withdrawn
- 2003-07-15 JP JP2003274597A patent/JP2004070944A/ja not_active Withdrawn
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008516323A (ja) * | 2004-10-12 | 2008-05-15 | ピクセル(リサーチ)リミテッド | プラットホーム独立の動的リンキング |
JP2008516324A (ja) * | 2004-10-12 | 2008-05-15 | ピクセル(リサーチ)リミテッド | ランタイム動的リンキング |
JP2006293673A (ja) * | 2005-04-11 | 2006-10-26 | Toshiba Corp | マイクロプロセッサおよびその制御方法 |
JP2007109219A (ja) * | 2005-09-16 | 2007-04-26 | Ricoh Co Ltd | 画像形成装置、情報処理方法、情報処理プログラム、及び記録媒体 |
US9141374B2 (en) | 2005-09-16 | 2015-09-22 | Ricoh Company, Ltd. | Image forming device, information processing method, information processing program, and recording medium |
Also Published As
Publication number | Publication date |
---|---|
EP1398697A2 (en) | 2004-03-17 |
US20040025165A1 (en) | 2004-02-05 |
EP1398697A3 (en) | 2006-08-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2004070944A (ja) | アプリケーション向けにオペレーティングシステム機能を拡張するシステムおよび方法 | |
US6928536B2 (en) | Dynamic execution layer interface for replacing instructions requiring unavailable hardware functionality with patch code and caching | |
US7051340B2 (en) | System and method for isolating applications from each other | |
US6920550B2 (en) | System and method for decoding and executing program binaries | |
US6907519B2 (en) | Systems and methods for integrating emulated and native code | |
US6915513B2 (en) | System and method for dynamically replacing code | |
US7194732B2 (en) | System and method for facilitating profiling an application | |
US7203941B2 (en) | Associating a native resource with an application | |
US8924922B2 (en) | Pre-compiling hosted managed code | |
KR102084816B1 (ko) | Bpram을 사용한 소프트웨어 애플리케이션들의 레이아웃 및 실행 | |
US7934208B2 (en) | Method for transparent on-line dynamic binary optimization | |
JP2003196108A (ja) | 動的コードキャッシングおよび変形を通してコンピュータシステムのエミュレーションをサポートするシステムおよび方法 | |
JP6259459B2 (ja) | Bpramを使用したオペレーティング・システムのレイアウトおよび実行 | |
JP2006134321A (ja) | システムパフォーマンスを改善するための外部メモリデバイスの使用 | |
US20030033593A1 (en) | Dynamic execution layer interface for explicitly or transparently executing application or system binaries | |
JP2000194668A (ja) | 計算機システム及び同システムに適用される中間コ―ド実行装置並びに中間コ―ド実行方法 | |
KR20050039452A (ko) | 임베디드 시스템의 메모리 구조 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20060713 |
|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20061010 |