(57)【特許請求の範囲】
【請求項１】
少なくとも１つのプロセッサにより実行される方法であって、
ソース命令セットアーキテクチャ（ＩＳＡ）を有するアプリケーションをロードするステップと、
第１のソース命令の第１の変換を少なくとも１つのメモリに記憶するステップであり、前記第１の変換は前記ソースＩＳＡからターゲットＩＳＡにである、ステップと、
前記第１の変換を記憶するステップの後、（ａ）前記の記憶された第１の変換を読み出し、前記変換を実行するステップと、（ｂ）第２のソース命令のための第２の変換を発見しようとして不成功に終わり、その後、前記第２の変換を決定し、前記第２の変換を実行するステップと、
を含み、
前記第１のソース命令はカーネル関数（ＫＦ）を含む、
方法。
【請求項２】
前記第１の変換を記憶するステップは、前記少なくとも１つのメモリに記憶された変換についてのインデクスを有する形式で前記第１の変換を記憶するステップを含む、請求項１に記載の方法。
【請求項３】
前記の記憶された第１の変換は、前記第１の変換の前記少なくとも１つのメモリからの除去を回避するようにピン留めされる、請求項１に記載の方法。
【請求項４】
前記第２の変換は、前記アプリケーションについて、ランタイムの間に決定される、請求項１に記載の方法。
【請求項５】
前記第１のソース命令は、決してエミュレートされず、前記第２のソース命令は、前記ターゲットＩＳＡについて、エミュレートされる、請求項１に記載の方法。
【請求項６】
ユーザ選択に応答して、変換のために第１の未定義シンボルを指定するステップと、エミュレーションのために第２の未定義シンボルを指定するステップと、を含む請求項１に記載の方法。
【請求項７】
エミュレーション無しに第１の未定義シンボルを変換するステップと、第２の未定義シンボルをエミュレートするステップと、を含む請求項１に記載の方法。
【請求項８】
前記第１の未定義シンボル及び前記第２の未定義シンボルは、第１の無名グローバル変数及び第２の無名グローバル変数にそれぞれ対応する、請求項７に記載の方法。
【請求項９】
ターゲットＩＳＡライブラリに向けられたゲートを介して前記第２の未定義シンボルをエミュレートするステップ、を含む請求項７に記載の方法。
【請求項１０】
ターゲットＩＳＡライブラリに記憶された名前付きグローバルをソースＩＳＡライブラリと共有するステップ、を含む請求項７に記載の方法。
【請求項１１】
変換を介してエミュレーション無しに第１の未定義シンボルを解決するステップと、エミュレーションを介して第２の未定義シンボルを解決するステップと、を含む請求項１に記載の方法。
【請求項１２】
コンピューティング装置上で実行されたことに応答して、請求項１乃至１１のうちいずれか１項に記載の方法を前記コンピューティング装置に実行させる複数の命令を含むコンピュータプログラム。
【請求項１３】
請求項１乃至１１のうちいずれか１項に記載の方法を実行するように構成された通信装置。
【請求項１４】
請求項１乃至１１のうちいずれか１項を実行する手段を含む装置。
【請求項１５】
少なくとも１つのメモリに記憶された、ソース命令セットアーキテクチャ（ＩＳＡ）を有するアプリケーションと、
ターゲットＩＳＡを有し、前記少なくとも１つのメモリ結合されて、オペレーションを実行する少なくとも１つのプロセッサであり、前記オペレーションは、
前記アプリケーションをロードするステップと、
第１のソース命令の第１の変換を前記少なくとも１つのメモリに記憶するステップであり、前記第１の変換は前記ソースＩＳＡからターゲットＩＳＡにである、ステップと、
前記第１の変換を記憶するステップの後、（ａ）前記の記憶された第１の変換を読み出し、前記変換を実行するステップと、（ｂ）第２のソース命令のための第２の変換を発見しようとして不成功に終わり、その後、前記第２の変換を決定し、前記第２の変換を実行するステップと、
を含む、少なくとも１つのプロセッサと、
を含み、
前記第１のソース命令はカーネル関数（ＫＦ）を含む、
装置。
【請求項１６】
前記第２の変換は、前記アプリケーションについて、ランタイムの間に決定される、請求項１５に記載の装置。
【請求項１７】
前記オペレーションは、エミュレーション無しに第１の未定義シンボルを変換するステップと、第２の未定義シンボルをエミュレートするステップとを含む、請求項１５に記載の装置。
【請求項１８】
請求項１５乃至１７のうちいずれか１項の前記少なくとも１つのプロセッサを含むコンピュータシステムであり、ディスプレイをさらに含むコンピュータシステム。
【請求項１９】
コンピューティング装置上で実行されたことに応答して、請求項１乃至１１のうちいずれか１項に記載の方法を前記コンピューティング装置に実行させる複数の命令を記憶した少なくとも１つの機械読取可能記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションがコンピューティング装置のＩＳＡ以外のＩＳＡ向けに書かれた場合に、このアプリケーションをエミュレートする必要が生じ得ることに関する。
【背景技術】
【０００２】
コンピューティング装置は、その命令セットアーキテクチャ（ＩＳＡ）によって特徴付けることができる。通常、コンピューティング装置は、オペレーティングシステム（ＯＳ）サービスを含み得るものであり、ＯＳサービスには、コンピューティング装置のＩＳＡに関して開発されたランタイムライブラリ（ＬＩＢ）サービスを含み得る。このＬＩＢサービスは、コンピューティング装置上で動作するアプリケーションをアプリケーション開発者が開発するのに役立つ。アプリケーションが、或るコンピューティング装置のＩＳＡ以外のＩＳＡ向けに書かれた場合、このアプリケーションは、エミュレートされる必要が生じ得る。具体的に言うと、エミュレーションは、（第１のＩＳＡ向けに書かれた）アプリケーションが、（第２のＩＳＡを使用する）コンピューティング装置のアーキテクチャ上で実行され、ターゲットプラットフォームのランタイムＬＩＢサービスにアクセスすることを可能にする。さらに、アプリケーションのＩＳＡ依存部分には、コールバック関数を含むことがある（例えば、エミュレートされているアプリケーションに対してＩＳＡ依存ランタイムＬＩＢからコールバックする関数、エミュレートされる必要があるソースＬＩＢサービスに対してコールバックする関数）。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
しかしながら、エミュレーションは、ＩＳＡ間のハードウェア能力の不足に起因して困難に直面する場合がある。例えば、基礎をなすターゲットＩＳＡが提供していないいくつかの機能性を、ソースＩＳＡが実装している可能性がある。こうした機能性には、アトミック操作を含むことがある。アトミック操作は、完全に実行されなければならないか、あるいはまったく実行されてはならないかであるように、分割できず、かつ削減できない（例えば、こうした操作には、プロセッサが同一のバス操作において同時に、或る位置を読み出し、かつ或る位置に書き込むことを含み得る）。
【０００４】
他の例において、ソースＩＳＡ又はターゲットＩＳＡから独立しているカーネル関数（ＫＦ）などのアイテムが採用されることがある。ＫＦは、ＩＳＡが提供する機能性ではないが、代わりに、基礎となるプラットフォームのＯＳが提供する機能性に関連する（例えば、以下でさらに論じられるＬＩＢサービス１２４）。ＫＦのエミュレーションは、上記で論じられたようなハードウェア能力の不足に起因する困難ではなく、代わりに、ソースＬＩＢサービスとターゲットＬＩＢサービスとの間の能力差に起因する困難に直面する可能性がある。ＫＦには、カーネルデータにアクセスし、かつカーネル空間で動作するが、ソースアプリケーションとそのホストエミュレーションマシンとの間でコンテキストスイッチを必要としない関数を含むことができる。したがって、ＫＦを用いることは、カーネルデータへの迅速なアクセスを可能にし、しかしさらに、ゲストとホストエミュレーションマシン又は環境との間のコンテキストスイッチのオーバヘッドを回避する。それでも、ＫＦは、ホストエミュレーションマシンにより誤ってトラップされた場合、コンテキストスイッチのオーバヘッドをなお招くことがある。
【０００５】
エミュレーションは、さらに、エミュレートすべき内容のサイズに起因する困難に直面する可能性がある。例えば、モバイルプラットフォームが、選ばれた関数のみを真にエミュレートする必要があるときに、全ライブラリ（これは非常に大きい可能性がある）をエミュレートするという困難に面する可能性がある。
【課題を解決するための手段】
【０００６】
１つの実施形態が、ＫＦの変換をプレビルドし（pre-builds）、それを変換プールと対応するインデクス付きテーブルとにロードする。したがって、ＫＦは迅速にロードされ、必ずしもＬＩＢエミュレータを介したトラッピング及びエミュレーションを待たない。このことは、ＫＦへのアクセスをより速くする。他の実施形態が、ハイブリッドのエミュレーションを提供する。このハイブリッドのエミュレーションは、ソースＩＳＡライブラリから変換されるアプリケーション関数（例えば、迅速な実行を必要とする関数）もあれば、ターゲットＩＳＡライブラリに対してエミュレーションを介して処理されるアプリケーション関数もあるというものである。こうすることで、特定の関数へのより高速なアクセスが提供される。
【図面の簡単な説明】
【０００７】
本発明の実施形態は、添付図面に示される例示的な実施形態によって説明されるが、限定ではない。図面において、同様の参照が同様の要素を表す。
【図１】本発明の一実施形態におけるＩＳＡブリッジングを含むコンピューティング装置を示す。
【図２】図１のＩＳＡブリッジングレイヤをさらに詳細に示す。
【図３】本発明の実施形態における、ソースＩＳＡのアプリケーションとターゲットＩＳＡのＬＩＢサービスとの間のコール及びコールバックをブリッジするための方法を示す。
【図４】本発明の実施形態における、ソースＩＳＡのアプリケーションとターゲットＩＳＡのＬＩＢサービスとの間のコール及びコールバックをブリッジするための方法を示す。
【図５】効率の良いＫＦ処理のための一実施形態を含む。
【図６】ハイブリッドのエミュレーションのための一実施形態を含む。
【図７】ハイブリッドのエミュレーションのための一実施形態を含む。
【発明を実施するための形態】
【０００８】
種々のオペレーションを、複数の別々のオペレーションとして、順に、例示的な実施形態を理解するのに最も役立つように説明する。しかしながら、記載の順序は、これらのオペレーションが必ず順序依存であることを示すものと見なされるべきではない。具体的に、これらのオペレーションは、提示の順序で実行される必要はない。さらに、別個のオペレーションとしてのオペレーションの説明は、これらオペレーションが必ず独立して実行されること、かつ／あるいは別個のエンティティであることを要求するものと見なされるべきではない。同様にして、別個のモジュールとしてのエンティティ及び／又はモジュールの説明は、これらモジュールが別個であること、かつ／あるいは別個のオペレーションを実行することを要求するものと見なされるべきではない。種々の実施形態において、図示及び／又は説明されるオペレーション、エンティティ、データ及び／又はモジュールを、マージし、さらなるサブパートに分解し、かつ／あるいは省略することができる。「実施形態」というフレーズは、繰り返し使用される。このフレーズは、通常、同一の実施形態を指すものではないが、しかしながら、そうであってもよい。「含む」、「有する」及び「含める」といった用語は、文脈がその他の方法で決定づけない限り、同義である。「Ａ／Ｂ」というフレーズは、「Ａ又はＢ」を意味する。「Ａ及び／又はＢ」というフレーズは、「（Ａ）、（Ｂ）又は（Ａ及びＢ）」を意味する。「Ａ、Ｂ及びＣのうち少なくとも１つ」というフレーズは、「（Ａ）、（Ｂ）、（Ｃ）、（Ａ及びＢ）、（Ａ及びＣ）、（Ｂ及びＣ）又は（Ａ、Ｂ及びＣ）」を意味する。
【０００９】
１つの実施形態が、ＫＦの変換をプレビルドし（pre-builds）、それを変換プールと対応するインデクス付きテーブルとにロードする。したがって、ＫＦは迅速にロードされ、必ずしもＬＩＢエミュレータを介したトラッピング及びエミュレーションを待たない。このことは、ＫＦへのアクセスをより速くする。他の実施形態が、ハイブリッドのエミュレーションを提供する。このハイブリッドのエミュレーションは、ソースＩＳＡライブラリから変換されるアプリケーション関数（例えば、迅速な実行を必要とする関数）もあれば、ターゲットＩＳＡライブラリに対してエミュレーションを介して処理されるアプリケーション関数もあるというものである。こうすることで、特定の関数へのより高速なアクセスが提供される。
【００１０】
図１は、一実施形態における、ＩＳＡブリッジングを（場合により、コールバックと共に）含む一例示的コンピューティング装置を示す。コンピューティング装置１０２は、プロセッサ及びメモリ配置１０４を含み得るものであり、プロセッサ及びメモリ配置１０４は、図示されるとおり互いに（すなわち、直接的又は間接的に）結合された、ＯＳ１２２、ＩＳＡブリッジングレイヤ１２３、アプリケーション１２０、グラフィックスプロセシングユニット（ＧＰＵ）１０６、ディスプレイユニット１０８及びネットワーキングインタフェース１１０を含み、あるいはこれらに結合される。ＯＳ１２２は、ＬＩＢのサービス１２４を含むことができる。コンピューティング装置１０２はさらに、アプリケーション１２０とＯＳ１２２との間にオプションのミドルウェア１２１を含むことができる。以下でより詳細に説明されるとおり、ＩＳＡブリッジングレイヤ１２３は、アプリケーション１２０が全体的に又は部分的に（例えば、ＩＳＡ非依存のミドルウェア１２１がさらに使用されるときに）ソースＩＳＡにおいて実施されることを可能にするように、種々のランタイム機能及びサービスを用いて構成されることができ、一方、ＯＳ１２２（ＬＩＢサービス１２４を含む）は、ソースＩＳＡとは異なるターゲットＩＳＡに実装されることができる。さらに、アプリケーション１２０は、ＬＩＢサービス１２４の種々の要素（例えば、関数）にアプリケーション１２０の種々のコールバック関数１２５を種々の条件下で「コールバック」することを要求するというＬＩＢサービス１２４の使用特性を含むアプリケーション（具体的には、ソースＩＳＡを使用して実装される部分）とすることができる。ＩＳＡブリッジングレイヤ１２３は、本明細書において、プロセス仮想マシン（ＰＶＭ）と呼ぶこともある。
【００１１】
コンピューティング装置１０２は、サーバ、デスクトップコンピュータ、ラップトップコンピュータ、タブレット型コンピュータ、スマートフォン、パーソナルデジタルアシスタント、ゲームコンソール、インターネット家電、モバイルインターネット装置、携帯電話、モバイルネットワーキング装置、モバイルコンピューティングノード又は他のコンピューティング装置とすることができる。プロセッサ及びメモリ配置１０４は、シングルコア又はマルチコアのプロセッサとメモリとを備えた配置を含む広範囲のプロセッサ及びメモリ配置を表し、プロセッサは、種々の実行速度及び電力消費のものであり、メモリは、種々のアーキテクチャ（例えば、１又は複数のレベルのキャッシュを備える）及び種々の種類（例えば、ダイナミックランダムアクセス、ＦＬＡＳＨなど）のものである。種々の実施形態において、ＧＰＵ１０６は、ビデオデコーディング及び／又はグラフィックス処理関数をＯＳ１２２に提供するように構成されることができ、一方、ディスプレイユニット１０８は、マルチメディアコンテンツ（例えば、ＨＤビデオ）をディスプレイユニット１０８上にレンダリングすることが可能となるように構成されることができる。同様にして、ＧＰＵ１０６とディスプレイユニット１０８とは、その分野において知られる広範囲のグラフィックスプロセッサとディスプレイ要素とを表すものである。同じ様に、（１又は複数の）ネットワーク１３４は、広範囲のネットワークを表すものである。（１又は複数の）ネットワーク１３４の例には、インターネットを含め、有線の又は無線の、ローカルの又はワイドエリアの、プライベートの又はパブリックのネットワークを含むことができる。ＯＳ１２２（ＬＩＢサービス１２４を含む）は、ＬＩＢサービス１２４の呼び出しを定義するアプリケーションプログラミングインタフェース（ＡＰＩ）を除き、その分野において知られる広範囲のＯＳ要素を表す。ＯＳ１２２には、メモリリソース、スケジュールタスク実行などを管理するように構成されたカーネルや、種々のデバイスリソースを管理するように構成されたデバイスドライバなどの、従来的なコンポーネントを含むことができる。実施形態において、ＯＳ１２２は、オプションのミドルウェア１２１をサポートする仮想マシンを含むことができる（例えば、Android（商標）アプリケーションフレームワークをサポートするAndroid（商標）仮想マシン）。ＬＩＢサービス１２４の呼び出しを定義することに加えて、アプリケーション１２０のコールバック関数１２５の呼び出しを容易にするために、ＬＩＢサービス１２４のＡＰＩはさらに、アプリケーション１２０のコールバック関数の対応するスタブ及び署名を含むことができる。ＯＳ１２２の例には、Windows（登録商標）オペレーティングシステム、Linux（登録商標）オペレーティングシステム、Android（商標）、iOS（登録商標）及び同様のものを含むことができる。同様にして、オプションのミドルウェア１２１は、広範囲のミドルウェア要素を表すものであり、これには限定されないが、ＩＳＡ非依存のミドルウェアを含む。ミドルウェア１２１の例は、これらに限定されないが、Android（商標）アプリケーションフレームワーク、Java（登録商標）、又は他の���プリケーションフレームワーク若しくはＩＳＡ非依存の実行環境を含むことができる。同じ様に、アプリケーション１２０（コールバック関数１２５を含む）は、パーソナルアシスタント、生産性、ソーシャルネットワーキングアプリケーション、カレンダー、ワープロ、スプレッドシート、Twitter（登録商標）、Facebook（登録商標）、ブラウザ及び同様のものに関するアプリケーションを含む広範囲のアプリケーションを表す。
【００１２】
図２において、ＩＳＡブリッジングレイヤ１２３は、ＩＳＡブリッジングローダ２０２と、ソースＩＳＡエミュレータ２０４と、ターゲットＩＳＡ  ＬＩＢエミュレータ２０６とを含むことができる（動的なバインドサービスを含む種々のランタイム機能及びサービスを提供するように構成される）。ソースＩＳＡエミュレータ２０４は、ソースＩＳＡコンテキスト２１２とバイナリ変換エンジン２１５とを含むことができる。ソースＩＳＡエミュレータ２０４は、ソースＩＳＡコンテキスト２１２に、例えば現在の実行命令ポインタ（ＩＰ）を含むソースＩＳＡアーキテクチャの実行コンテキストを維持することができる。バイナリ変換部エンジン２１５は、ソースＩＳＡ命令をターゲットＩＳＡ命令に変換するように構成されることができる。ＬＩＢエミュレータ２０６は、ターゲットＩＳＡ  ＬＩＢコンテキスト２２２と、ゲート２２４（例えば、プロセッサが特権的関数へのアクセスを制御し、データセグメントを変更し、テーブルを切り替えるなどするために使用するデータ構造）と、ラッパー関数２２６とを含むことができる。ＬＩＢエミュレータ２０６は、ターゲットＩＳＡ  ＬＩＢコンテキスト２２２に、ターゲットＩＳＡ  ＬＩＢ１２４の実行コンテキストを維持することができる。種々の実施形態において、あらゆるＬＩＢサービス１２４（例えば、関数）について、対応するゲート２２４とラッパー関数２２６とのペアが存在することができ、このペアは、ソースＩＳＡアーキテクチャ及びターゲットＩＳＡアーキテクチャにわたって、アプリケーション１２０がＬＩＢサービス１２４をコールすることを容易にするように構成されることができる。同様にして、コールバック関数１２５ごとに１つの対応するゲート２２４とラッパー関数２２６とのペアが存在することができ、このペアは、ソースＩＳＡアーキテクチャ及びターゲットＩＳＡアーキテクチャにわたって、ＬＩＢサービス１２４がコールバック関数１２５をコールバックすることを容易にするように構成されることができる。
【００１３】
ＩＳＡブリッジングローダ２０２は、アプリケーション１２０をメモリにロードするように構成されたユーティリティであり得る。アプリケーション１２０のローディングにおいて、ＩＳＡブリッジングローダ２０２は、ソースアプリケーション１２０に対応するＬＩＢに関連付けられたアプリケーション１２０の任意の未解決シンボル１２６を解決するように構成されることができる。シンボルは、レジスタ、メモリアドレス及び同様のものについての識別子（例えば、テキスト文字列）であり得る。ＩＳＡブリッジングローダ２０２は、シンボルを（コールバック関数１２５に対して）変更し、コールバック関数１２５のシンボルを対応するラッパー関数２２６に関連付けるように構成されることができる。ＩＳＡブリッジングローダ２０２は、ＯＳ１２２又はミドルウェア１２１によりサポートされる場合にバイナリ形式ベースの制御移行又はロード／プレロード変数を使用することを含む多数の既知の方法のうち任意の１つの方法で、ＯＳ１２２（又は、採用されている場合、ミドルウェア１２１）のローダ（図示せず）からローディングの制御を得ることができる。他の実施形態において、ＯＳ１２２（又は、採用されている場合、ミドルウェア１２１）のローダは、代わりに、ＩＳＡブリッジングローダ２０２に対する制御の移行を容易にするように変更されることができる。
【００１４】
ソースＩＳＡエミュレータ２０４は、ターゲットＩＳＡ１２２「の上で」ソースＩＳＡ１２０をエミュレートして、ソースＩＳＡアプリケーション１２０を実行することができる。先に説明されたとおり、ソースＩＳＡエミュレータ２０４は、ソースＩＳＡ実行コンテキスト２１２を維持するように構成されることができる。例えば、ソースＩＳＡエミュレータ２０４は、アプリケーション１２０の実行中、ソースＩＳＡのＩＰを追跡するように構成されることができる。アプリケーション１２０が、ＬＩＢサービス１２４を呼び出そうとするとき、ソースＩＳＡエミュレータ２０４が、ソースＩＳＡ実行を監視することができ、代わりにＬＩＢエミュレータ２０６を呼び出し、さらにＬＩＢエミュレータ２０６に実行制御を移行することができる。種々の実施形態において、ソースＩＳＡエミュレータ２０４は、ＬＩＢサービス１２４の対応するゲート２２４（以下でさらに論じられる）を呼び出し、このゲート２２４に実行制御を移行することができる。
【００１５】
ＬＩＢエミュレータ２０６は、ターゲットＬＩＢ１２４へのマッピングを通じて、ソースＬＩＢ（又は、任意の他のＬＩＢ）をエミュレートすることができる。さらに、ＬＩＢエミュレータ２０６は、ターゲットＩＳＡ  ＬＩＢ（ＬＩＢ）実行コンテキスト２２２を維持するように構成されることができる。ＬＩＢサービス１２４に対応するゲート２２４は、コールを、ＬＩＢサービス１２４とコールを処理及びセットアップする対応するラッパー関数２２６とにそれぞれリダイレクトするように構成されることができる。コールバック関数１２５に対応するゲート２２４は、対応するラッパー関数２２６からソースＩＳＡエミュレータ２０４にコールバックの実行制御をぞれぞれ移行するように構成されることができる。種々の実施形態において、各ゲート２２４は、対応するラッパー関数２２６又はソースＩＳＡエミュレータ２０４へのリダイレクトを達成するように構成された命令を含むことができる。種々の実施形態において、各ゲート２２４の命令は、実行制御リダイレクトを達成するためにバイナリ変換エンジン２１５と協働するように構成されたソースＩＳＡ命令であり得る。種々の実施形態において、各ゲート２２４はさらに、対応するラッパー関数２２６を識別する指標を含むことができる。
【００１６】
種々の実施形態において、対応するＬＩＢサービス１２４へのコールを処理及びセットアップするため、ＬＩＢサービス１２４に対応する各ラッパー関数２２６は、コールの関連するパラメータ値をソースＩＳＡコンテキスト２１２から読み出し、ソースＩＳＡアプリケーションバイナリインタフェース（ＡＢＩ）形式からターゲットＩＳＡ  ＡＢＩ形式にコールを転換し、転換されたコールをパラメータ値と共にＬＩＢコンテキスト２２２に保存するように構成されることができる。コールバック関数１２５をコールバックすると、実行制御が、コールバック関数１２５の対応するラッパー関数２２６に移行されることができる。種々の実施形態において、アプリケーション１２０のコールバック関数１２５へのコールバックを処理及びセットアップするため、コールバック関数１２５に対応する各ラッパー関数２２６は、ターゲットＩＳＡ  ＡＢＩ形式からソースＩＳＡ  ＡＢＩ形式にコールバックを転換し、コールバックの関連するパラメータ値を添付し、転換されたコールバックをパラメータ値と共にソースＩＳＡコンテキスト２１２に保存するように構成されることができる。コールバック関数１２５に対応するゲート２２４は、（ラッパー関数２２５により準備され、かつコールバック関数１２５に対応する）ソースＩＳＡコンテキスト２１２を用いてソースＩＳＡエミュレータ２０４を呼び出して、ソースＩＳＡ形式で提示されたコールバック関数をターゲットＩＳＡ１０４上でエミュレートするように構成されることができる。
【００１７】
図３〜図４は、本発明の実施形態に従う、コールバックを用いた一例示的なＩＳＡブリッジング方法を示す。方法３００は、２つのパートを含み得るものであり、パート３００ａは、（ソースＩＳＡの）アプリケーション１２０から（ターゲットＩＳＡの）ＬＩＢサービス１２４へコールをブリッジすることに関し、パート３００ｂは、（ターゲットＩＳＡの）ＬＩＢサービス１２４から（ソースＩＳＡの）アプリケーション１２０のコールバック関数１２５へコールバックをブリッジすることに関する。パート３００ａ及び３００ｂは、互いに独立して実装されることができる。さらに、種々の実施形態は、ラッパー関数及び／又はコールバック関数を懸念する必要がなく、しかし代わりに本明細書に説明される実施形態の他の面に焦点を当て得る。
【００１８】
図３のブロック３０２において、ＩＳＡブリッジングローダ２０２は、ソースアプリケーション１２０をロードすることができる。アプリケーション１２０のローディングにおいて、ＩＳＡブリッジングローダ２０２は、先に説明されたとおり、ＬＩＢサービス１２４に対するシンボリック名又は参照１２６を解決し、コールバック関数１２５のシンボリック名又は参照を変更することができる。ブロック３０４において、実行の過程で、アプリケーション１２０は、ＬＩＢサービス１２４のうち１つをコールすることができる。種々の実施形態において、アプリケーション１２０は、そのコールバック関数１２５のうち１つをコールバックすることを、コールされたＬＩＢサービス１２４に要求することができる。実施形態において、アプリケーション１２０は、コールされたＬＩＢサービス１２４へのコールの一部に、コールバック関数１２５へのポインタを含めることができる。コールバック関数１２５へのポインタを渡す代わりに、ＬＩＢサービス１２４のラッパー関数２２６は、コールバック関数１２５の対応するラッパー関数２２６を渡すことができる。ブロック３０６において、ソースＩＳＡエミュレータ２０４は、コールを（例えば、ソースＩＳＡ  ＩＰを監視し、ＩＰがターゲットＬＩＢのアドレス範囲内のアドレスを参照していると判定することによって）検出すると、このコールをリダイレクトし、ＬＩＢエミュレータ２０６の中の、ＬＩＢサービス１２４の対応するゲート２２４に実行制御を移行することができる。ブロック３０８において、ゲート２２４のうちの適切なゲートが、さらに、このコールをリダイレクトし、呼び出されたＬＩＢサービス１２４の対応するラッパー関数２２６に実行制御を移行することができる。ブロック３１０において、コールされたＬＩＢサービス１２４のラッパー関数２２６は、先に説明されたとおり、このコールを処理し、コールされたＬＩＢサービス１２４による実行のために、ＬＩＢコンテキスト２２２の中にこのコールをセットアップすることができる。ブロック３１２において、コールされたＬＩＢサービス１２４のゲート２２４は、コールの（１又は複数の）戻り値をＬＩＢコンテキスト２２２から収集し、ソースＩＳＡコンテキスト２１２を更新し、ソースＩＳＡエミュレータ２０２に実行制御を移行することができる。
【００１９】
図４（パート３００ｂ）のブロック４０４において、コールされたＬＩＢサービス１２４の過程で、又はこれを完了すると、ＬＩＢサービス１２４は、アプリケーション１２０のコールバック関数１２５を（例えば、アプリケーション１２０により渡されたコールバックポインタをコールすることによって）コールバックすることができる。ブロック４０６において、実行制御が、変更された参照に従い、コールバック関数１２５の対応するラッパー関数２２６に移行されることができる。ブロック４０８において、ラッパー関数２２６は、先に説明されたとおり、このコールバックを処理し、アプリケーション１２０のコールバック関数１２５による実行のために、ソースＩＳＡコンテキスト２１２の中にこのコールバックをセットアップすることができ、その後、コールバック関数１２５の対応するゲート２２４に実行制御を移行することができる。ブロック４１０において、コールバック関数１２５に対応するゲート２２４は、このコールバックをリダイレクトし、ラッパー関数２２６により準備されたソースＩＳＡコンテキストを共に、ＩＳＡエミュレータに実行制御を移行することができる。ブロック４１２において、ソースＩＳＡエミュレータ２０４は、ソースＩＳＡコンテキスト内のＩＰに従ったコールバック関数のエミュレーションを開始することができる。ブロック４１４において、コールバック関数１２５のゲート２２４は、コールバックの（１又は複数の）戻り値をソースＩＳＡコンテキスト２１２から収集し、ＬＩＢコンテキスト２２２を更新し、ＬＩＢエミュレータ２０４に実行制御を移行してコールバック関数１２５の戻り値をＬＩＢサービス１２４に返すことができる。
【００２０】
本発明の実施形態は、図１〜図４の実施形態のうちいずれかのものなどの、ＫＦを備えたエミュレーション環境を利用して、カーネルデータへの効率の良いアクセスを提供しながらなお、他の関数のエミュレーションを提供することができるものである。
【００２１】
図５は、ＩＳＡエミュレータ５０４を含み、そして、ＩＳＡエミュレータ５０４は、変換部５３０、変換管理部５３５及び実行部５４５を含む。変換部５３０は、ソースＩＳＡ命令１２０をターゲットＩＳＡ命令１２２に変換する。変換部５３０が命令を変換するとき、変換管理部５３５は、これらの変換を変換プール５６０に置き、これら変換は、変換インデクステーブル５５５においてインデクスを付けられる（例えば、変換プール５６０内の各変換が、そのエントリアドレスによってインデクスを付けられる）。動作において、実行部５４５は、所与のＩＰアドレスを用いて変換を読み出し、次いでその変換された命令を実行することによって、アプリケーション１２０の実行フローに従うことができる。図１〜図４に関して種々の実施形態において上記で論じられたとおり、ＯＳサービスは、ＬＩＢエミュレータ５０６を介してエミュレートされることができる。実行部５４５がソースＩＳＡ１２０の中のＬＩＢ  ＡＰＩを呼び出す命令を実行するとき、実行部５４５はＬＩＢエミュレータ５０６に制御を移行し、それからＬＩＢエミュレータ５０６がＯＳサービスをエミュレートする。上記のＯＳサービスに使用されるアプローチと同様のアプローチを、ＫＦに使用することができる。しかしながら、この方法でＫＦを扱うことは、ＫＦが特権的カーネル領域にアクセスしようとするとき、コンテキストスイッチを引き起こす可能性がある。このコンテキストスイッチは、オーバヘッドをもたらす可能性がある。その上、ＫＦがそのＩＰにより認識されるため、変換部５３０は、ＫＦを認識し、さらにコンテキストスイッチを実行するために、すべてのＫＦ  ＩＰを追跡する必要が生じ得る。
【００２２】
しかしながら、一実施形態において、図５はＫＦエミュレータ５４０を含み、ＫＦエミュレータ５４０は、カーネルデータへの効率の良いアクセスを提供しながらなお、他の機能のためのエミュレーションを提供する。ＫＦエミュレータ５４０は、一組のプレビルドされたＫＦ変換５４１と初期化部５４２とを含む。プレビルドされた変換５４１は、カーネル関数のセマンティクスを用いて構造化されることができる。初期化部５４２は、変換管理部５３５と共に動作して、プレビルドされたＫＦ変換５４１が通常の実行フローを介して読み出し可能であることを確保する。
【００２３】
例えば、ランタイムにおいて（変換管理部５３５が、変換インデクステーブル５５５を初期化し、変換プール５６０を初期化した後）、初期化部５４２は、１又は複数のプレビルドされたＫＦ変換５４１（例えば、ＫＦ変換Ａ、Ｂ、Ｃ）を変換プール５６０に挿入し（これらは、後に、必ずしもＫＦ変換ではない変換Ｅ、Ｆ、Ｇ、Ｈ、Ｉと共にロードされ得る）、それに応じて変換インデクステーブル５５５を更新する。それから、実行部５４５が、或るカーネル関数アドレス５４１（例えば、ＫＦ変換Ａ、Ｂ、Ｃのうち任意のものに対応するアドレス）を有する或るＩＰに到達したとき、実行部５４５は、変換管理部５３５に問い合わせ、対応するプレビルドされた変換をテーブル５５５とプール５６０とから取得する。それから、実行部５４５はこの変換を実行し、これによりカーネル関数をエミュレートすることになる。
【００２４】
こうした実施形態において、変換インデクステーブルミスは、生み出されない（例えば、作成されておらず、ゆえにプール５６０／テーブル５５５に存在しないＫＦ変換を探すために時間が費やされることはない。なぜならば、上記のようなＫＦ関数は、事前の初期化部５４２の動作に起因して、プール５６０／テーブル５５５の中にすでに存在するからである）。さらに、こうした実施形態は、変換部５３０がＫＦのＩＰを追跡する必要性を回避する。さらに、実行部／変換部コンテキスト切り替えが回避される。例えば、ＫＦについて、テーブル５５５及びプール５６０の中に位置するＫＦの直接的なコールに起因して、ＬＩＢエミュレータ５０６が回避される。上記利点のいずれもが、時間的制約のあるＫＦのさらなる効率の良さをもたらす。
【００２５】
このようにして、本願実施形態は、複数の欠点に対処する。例えば、ＫＦ以外のコードを扱うとき、変換部は、所与の命令ポインタに端を発し、命令ポインタにより指し示されたメモリから命令を読み出し、命令をデコードし、それからターゲットＩＳＡのための命令を生成する。そして、変換部は、次の命令ポインタに移動し、このプロセスを繰り返す。こうしたアプリケーションが（例えば、図２と共に説明されたエミュレーションシステムを用いて）エミュレートされるとき、このアプリケーションは、カーネルアドレスから読み出さないことになる。代わりに、このアプリケーションは、カーネルＡＰＩを使用してカーネル機能性にアクセスする。しかしながら、いくつかのプラットフォームにおいて、カーネルアドレス範囲の中のいくつかのＫＦは、保護されず、アプリケーションに直接公開される。プラットフォームは、エミュレーション無しに、ターゲットがカーネルアドレスであるコール命令を含むことができる。このことは、ＫＦがカーネルアドレスにアクセスすることを許可されているため、問題を提起するものではない。しかし、完全に異なるソースＩＳＡ及びターゲットＩＳＡを用いるエミュレーションにおいては、問題が発生する可能性がある。例えば、ターゲットプラットフォームが、ソースＩＳＡが予期する方法と同一の方法でアプリケーションにＫＦを公開していない可能性がある。エミュレータ（例えば、ＰＶＭ）内の変換部が、（カーネル関数コールに続いて）命令ポインタを読み出そうと試みる場合、ターゲットプラットフォームが、ソースＩＳＡがなすことになる方法と同様にＫＦを扱っていない（例えば、ＫＦのメモリアドレス位置が変更されている、あるいは、ＫＦがその他の方法で別様に実装されている）ために、変換部が成功しない可能性がある。したがって、ＫＦは、上記で論じられた実施形態（例えば、ＫＦ関数エミュレータ５４０）を適切に用いて扱われることができる特別なインスタンスである。一実施形態において、変換部は、ＫＦアドレスを認識し、通常の非ＫＦ関数とは異なる方法で対応する変換を実行する。例えば、この対応する変換は、上記で論じられたようなプレビルドされた変換を使用することができる。
【００２６】
一実施形態において、変換管理部５３５は、先行変換を後継変換に「連鎖させ」、あるいはその他の方法で関連付けることができ、ゆえに、先行変換の実行は、変換インデクステーブルに問い合わせること無しに、後継変換に移行されることになる。この最適化は、プレビルドされた変換５４１が準備されたときに、生じ得る。さらに、一実施形態において、プレビルドされた変換は変換プール５６０にピン留めされ、ゆえに、ガーベジコレクションがこれら変換を除去することがない。
【００２７】
図１及び図２と上記で論じられた実施形態とを参照すると、アプリケーション１２０がＬＩＢ（例えば、ソースＬＩＢ）をコールするとき、このコールは、以下のとおり、ターゲットＬＩＢ１２４に（例えば、ゲート２２４を介して）「マップされ」、ターゲットＩＳＡ１２２上で実行される。ローダ２０２は、アプリケーションバイナリ１２０をロードし、アプリケーション１２０の中の未定義シンボルを解決する。ＩＳＡエミュレータ２０４は、ターゲットＩＳＡ１２２「の上で」ソースＩＳＡ１２０をエミュレートしてアプリケーション１２０を実行する。ＬＩＢエミュレータ２０６は、ターゲットＬＩＢ１２４へのマッピングを通じて、ソースＬＩＢをエミュレートする。
【００２８】
図６は、ハイブリッドのエミュレーションのための一実施形態を含む。１つの実施形態が、ソースＬＩＢを部分的に変換し、ターゲットＬＩＢに部分的にマップする。例えば、ローダ６０２が、ソースＬＩＢ６３０の中のソースＬＩＢ６３１からアプリケーション１２０関数をロードすることもあれば、ソースＬＩＢ６３１から変換及びマッピング（例えば、上記で図１〜図４と共に説明されたようなもの）を通じてターゲットＬＩＢ６２４に、ゲート２２４を介してアプリケーション１２０関数をエミュレートすることもある。
【００２９】
こうしたハイブリッドの実施形態を使用する試みは、例えば、ターゲットＬＩＢ６３５のいくつかの機能性がエミュレーション目的で利用可能でないとき、あるいはターゲットＬＩＢ６３５がソースＬＩＢ６３０と同一のセマンティクスを含まないとき（これにより、エミュレーションが困難になる）といった状況に対して、有益であり得る。こうしたケースにおいて、ターゲットＬＩＢ６３５を通じたマッピングを回避すること（及び、代わりに直接的に機能性を変換すること）が、有益であり得る。さらに、ハイブリッドのエミュレーションは、ソースＬＩＢ６３０関数を呼び出し（例えば、コールし）、かつこの関数を変換することに掛かる時間が、ターゲットＬＩＢ６３５に対して同一の関数をマップ及びエミュレートすることによってもたらされるオーバヘッドより少ないときのような例において、アプリケーション１２０性能を向上させることができる。
【００３０】
しかしながら、ハイブリッドの実施形態の単純な実装は、困難を引き起こす可能性がある。例えば、ローダ６０２は、上記のようなローディングのため（すなわち、ターゲットＬＩＢ６３５を介したマッピングのためではなく、直接的な変換のため）、開発者によって事前に指定されたソースＬＩＢ６３０に特定のライブラリをロードすることができる。こうしたライブラリには、マッピングオーバヘッド（例えば、ゲート２２４の使用に起因して被る伝送遅延）に起因して、ターゲットＬＩＢ６３５を介してエミュレート及びマップされるよりも直接変換する方が時間が掛からない関数をいくらか含むことができる。しかしながら、ソースＩＳＡ  ＬＩＢ６３１がロードされる（及び、可能性として、ＬＩＢ６３１、６７１、６７２などの中から選択される）とき、上記のようにすることで、同一ＬＩＢの２つのインスタンスが存在する状況を作り出す可能性がある（一方はソースＩＳＡの中にあり、他方はターゲットＩＳＡの中にある）。ソースＩＳＡ  ＬＩＢ６３１のローディングはさらに、グローバルの余分なデータコピーをもたらす。（「グローバル」は、グローバル変数であり、グローバル変数の値は、グローバルに即時に関連する直接の（immediate）ライブラリ又はルーチンの外部にあるプログラムによってアクセスされ、このプログラムの中の状態によって変更されることができる。）これらの余分なグローバルのコピーは、ソースＩＳＡバイナリ６３１のデータ値がターゲットＩＳＡバイナリ６２４の中のオリジナルデータと同期されないため、ソースＩＳＡバイナリ６３１の結果を不正確にする可能性がある。例えば、１つのグローバル（Ｇ）が、２つの関数（Ｆ１及びＦ２）によってアクセスされる。Ｆ１が変換されることになる場合、Ｆ１は、ソースＩＳＡライブラリ６３１の中に位置するＧのコピーを使用することになる。Ｆ２がマップされることになる場合、Ｆ２は、ターゲットＩＳＡライブラリ６２４の中に位置するＧのコピーを使用することになる。それから、Ｆ１がソースＩＳＡライブラリ６３１の中のＧのコピーに書き込む場合、この変更は、（ターゲットＩＳＡライブラリ６２４の中に位置するＧのコピーを使用する）Ｆ２に見えないものとなる。Ｆ２がその個別のＧのコピーに変更を行う場合、同じことが当てはまる（ゆえに、Ｇに対する変更は、Ｆ１に見えないものとなる）。
【００３１】
この潜在的な問題に対処するために、図６は、ソースＩＳＡ  ＬＩＢ６３１とターゲットＩＳＡ  ＬＩＢ６２４との双方を含むハイブリッドの環境（例えば、ソースライブラリから直接変換されるコールもあれば、ターゲットライブラリからエミュレートされるコールもある環境）の一実施形態を提供する。ターゲットＬＩＢ６２４は、グローバル（すなわち、グローバル６３７）の一部又は全部をソースＩＳＡ  ＬＩＢ６３１と共有する（矢印６４１、６４２と、無名グローバル６３４、６３８の間に少しも対応する矢印がないこととを、参照されたい）。より具体的には、グローバルに２つの種類があり、「名前付き」グローバル６３７と「無名（anonymous）」グローバル６３４、６３８とである。（名前付きグローバルは、これら自体に関連付けられたシンボルを有し、ゆえに、これらを、現在のライブラリの外部にあるプログラムモジュールが参照することができる。ライブラリコードは、常に、この対応するシンボルを指定して名前付きグローバルを参照する。）ソースＩＳＡライブラリがロードされるとき、ローダは、ターゲットＩＳＡライブラリのメモリアドレスに対して、名前付きグローバルのシンボルを解決する。しかしながら、無名グローバル６３４、６３８は、関連付けられたシンボルを有していない（例えば、無名グローバルには、Ｃ言語プログラムにおける静的なグローバルを含むことができる）。コードがコンパイルされた後、グローバルは、現在の命令ポイントに対するオフセットの形式を有するアドレスを用いて直接アクセスされる。
【００３２】
図６は、「無変換解析部（NoTrans  Analyzer）」６４０を含む。無変換解析部６４０は、ソースＩＳＡバイナリ１２０を解析し、その内部にあって変換すべきでないすべての無名グローバル６３８を識別するオフラインロジックツールである。アプリケーション１２０からの関数が無名グローバルを使用する場合、この関数は、「無変換関数セット」６４５と見なされる関数セット（すなわち、変換すべきでないが、代わりに、例えばゲート２２４を介してマップされ、エミュレートされることになる関数のセット）に集められる。或る関数が、無変換関数セット６４５の中の関数をコールする場合、この関数自体が、無変換関数セット６４５に集められる。無変換関数セット６４５の中の関数は、変換されることが許されない（しかしながら、代わりにマップされる）。
【００３３】
図７は、図６のローダ６０２に関係する一実施形態を含む。ローダ７０２は、アプリケーション７２０とソースＩＳＡライブラリ７３１とを（関数の直接的な変換のために）リンクし、ＩＳＡゲート７５２の中のゲートを用いてターゲットＩＳＡライブラリ７２４に（関数のマッピング及びエミュレーションのために）間接的にマップする。例えば、ローダ７０２は、テーブル７０３をディスパッチすることに対応し、これにより、各々の未定義シンボルをどのようにリンクするかが決定される。ディスパッチテーブル７０３は、開発者が準備することができる。例えば、開発者は、シンボルＡ、Ｅ、Ｃなどの特定のシンボルを変換する必要があり、したがってこれらのシンボルをソースＩＳＡライブラリ７３１から変換のために指定すると決定することができる。しかしながら、開発者は、シンボルＢ、Ｄ、Ｆ、Ｇ、Ｈ、Ｉなどの他のシンボルはマッピングがより適切であり、それに応じてターゲットＩＳＡライブラリ７２４への間接的なマッピングを指定すると決定することができる。ローダ７０２がソースＩＳＡアプリケーション７２０をロードした後、ローダ７０２は、未定義シンボルを扱い、このシンボルと他のライブラリの定義済みシンボルとを関連付けることを通じて未定義シンボルを解決しようと試みる。各シンボルについて、シンボルの対応するＡＰＩが変換すべきものである場合（シンボルＡ、Ｅ、Ｃなどの、ディスパッチテーブル７０３において「変換すべき」と指定されるもの）、このシンボルは、ソースＩＳＡライブラリ７３１により公開されるシンボルにリンクされる（矢印７９７を参照）。シンボルがマップされるべきものである場合（図６の無変換関数セットに従って、ディスパッチテーブルにおいて「変換すべきでない」と指定されるもの）、このシンボルはＩＳＡゲート７５２にリンクされる（矢印７９８を参照）。ＩＳＡゲート７５２は、ターゲットＩＳＡライブラリ７２４により公開されるシンボル７５３に関連付けられている。ＩＳＡゲート７５２は、ＩＳＡエミュレータ及びＬＩＢエミュレータと一緒に動作し（例えば、図１〜図４において扱われたように）、ソースＩＳＡアプリケーション１２０の中の関数コールをターゲットＬＩＢ７２４の中の関数実装にマップすることができる（矢印７９９を参照）。
【００３４】
理解を容易にするために、種々の実施形態が、１つのソースＩＳＡと１つのターゲットＩＳＡとをブリッジする１つのＩＳＡブリッジングレイヤ１２３を用いて説明されている。しかしながら、本開示は、そのように限定されるものではない。実施形態において、複数のＩＳＡブリッジングレイヤ１２３が、複数のソースＩＳＡと１又は複数のターゲットＩＳＡとをブリッジすることができる。これらの実施形態のうちいくつかにおいて、ブリッジングが要求されていることを検出し、１又は複数の適切なＩＳＡブリッジングレイヤ１２３のインスタンスを生成して要求されたＩＳＡブリッジングを提供するように、ディスパッチャをさらに備えることができる。他の実施形態において、ブリッジングに使用されるリソースのうちいくらか（例えば、ラッパー関数の一部）を、ＩＳＡブリッジングレイヤ１２３がアクセス可能なリモートサーバ上に配置することができる。またさらに、理解を容易にするために、ＩＳＡブリッジングレイヤ１２３は、或るソースＩＳＡを異なるターゲットＩＳＡにブリッジするように構成されるものと説明されている。しかしながら、種々のアプリケーションについて、ＩＳＡブリッジングレイヤ１２３を採用して、ソースＩＳＡと同じものであるターゲットＩＳＡとをブリッジすることができる。こうしたアプリケーションにおいて、説明された要素のうち１又は複数（例えば、バイナリ変換エンジン２１５）は、必要とされない場合がある。こうしたアプリケーションの一例が、改良されたオペレーション上のセキュリティをコンピューティング装置１０２に提供することであり得る。他のアプリケーションが、同じ様に、こうしたブリッジングから恩恵を受けることができる。
【００３５】
実施形態は、コードで実装することができ、命令を記憶した記憶媒体上に記憶することができる。この記憶媒体は、命令を実行するようにシステムをプログラムするために使用することができる。記憶媒体には、これらに限定されないが、フロッピー（登録商標）ディスク、光ディスク、光ディスク、ソリッドステートドライブ（ＳＳＤ）、コンパクトディスク読取専用メモリ（ＣＤ−ＲＯＭ）、書換可能コンパクトディスク（ＣＤ−ＲＷ）及び光磁気ディスクを含む任意の種類のディスク、読取専用メモリ（ＲＯＭ）などの半導体装置、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、消去可能プログラマブル読取専用メモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブル読取専用メモリ（ＥＥＰＲＯＭ）、磁気カード若しくは光カードなどのランダムアクセスメモリ（ＲＡＭ）、又は電子的命令を記憶するのに適切な任意の他の種類の媒体を含むことができる。本発明の実施形態は、命令、関数、プロシージャ、データ構造、アプリケーションプログラム、構成設定、コードなどのデータを参照して本明細書に説明され得るものである。このデータがマシンにアクセスされるとき、マシンは、本明細書においてより詳細に説明されるとおり、タスクを実行すること、抽象データ型を定義すること、低レベルのハードウェアコンテキストを確立すること及び／又は他のオペレーションを実行することによって応答することができる。このデータは、揮発性及び／又は不揮発性のデータ記憶装置に記憶することができる。本開示を目的として、「コード」又は「プログラム」という用語は、アプリケーション、ドライバ、プロセス、ルーチン、メソッド、モジュール及びサブプログラムを含む、広範囲のコンポーネント及び構造をカバーする。したがって、「コード」又は「プログラム」という用語を使用して、処理システムにより実行されると所望の１又は複数のオペレーションを実行する命令の任意の集合を指すことができる。加えて、代替的な実施形態が、開示されるオペレーションすべてよりも少ないオペレーションを使用するプロセスと、追加のオペレーションを使用するプロセスと、同じオペレーションを異なる順序で使用するプロセスと、本明細書に開示される個々のオペレーションが組み合わせられ、さらに分割され、あるいはその他の方法で変えられたプロセスとを含むことができる。１つの実施形態において、制御ロジックという用語の使用には、トランジスタ、レジスタなどのハードウェア、又はプログラマブルロジック装置などの他のハードウェアを含む。しかしながら、別の実施形態において、ロジックはさらに、ソフトウェア又はコードを含む。こうしたロジックは、ファームウェア又はマイクロコードなどのハードウェアと統合することができる。プロセッサ又はコントローラは、その分野において知られる広範囲の制御ロジックのうち任意のものを表すことが意図された制御ロジックを含むことができ、そのようなものとして、マイクロプロセッサ、マイクロコントローラ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）、プログラマブルロジック装置（ＰＬＤ）及び同様のものとして適宜実装されることができる。
【００３６】
図１を参照し、１つの実施形態について、プロセッサ及びメモリ配置１０４の（１又は複数の）プロセッサのうち少なくとも１つを、図３〜図７の方法及び実施形態のオペレーション（又はこれらのサブセット）を実施するように構成されたＩＳＡブリッジングレイヤ１２３の計算ロジック（又はこれらのサブセット）と一緒にパッケージ化することができる。１つの実施形態について、プロセッサ及びメモリ配置１０４の（１又は複数の）プロセッサのうち少なくとも１つを、図３〜図７のオペレーション（又はこれらのサブセット）と実施形態とを実施するように構成されたＩＳＡブリッジングレイヤ１２３の計算ロジック（又はこれらのサブセット）と一緒にパッケージ化して、システム・イン・パッケージ（ＳｉＰ）を形成することができる。１つの実施形態について、プロセッサ及びメモリ配置１０４の（１又は複数の）プロセッサのうち少なくとも１つを、図３〜図７のオペレーション（又はこれらのサブセット）と実施形態とを実施するように構成されたＩＳＡブリッジングレイヤ１２３の計算ロジック（又はこれらのサブセット）と同一のダイ上に統合することができる。１つの実施形態について、プロセッサ及びメモリ配置１０４の（１又は複数の）プロセッサのうち少なくとも１つを、ＩＳＡブリッジングレイヤ１２３の計算ロジック（又はこれらのサブセット）と同一のダイ上に統合してシステム・オン・チップ（ＳｏＣ）を形成することができる。少なくとも１つの実施形態について、ＳｏＣは、デスクトップコンピュータ、ラップトップコンピュータ、スマートフォン、コンピューティングタブレット、インターネット家電、パーソナルデジタルアシスタント（ＰＤＡ）、ポータブルゲームプレイ装置、サーバ又は他のコンピューティング装置において利用することができる。
【００３７】
１つの実施形態が、少なくとも１つのプロセッサにより実行される方法を含み、この方法は、ソース命令セットアーキテクチャ（ＩＳＡ）を有するアプリケーションをロードするステップと、第１のソース命令の第１の変換を少なくとも１つのメモリに記憶するステップであり、第１の変換はソースＩＳＡからターゲットＩＳＡにである、ステップと、第１の変換を記憶するステップの後、（ａ）記憶された第１の変換を読み出し、この変換を実行するステップと、（ｂ）第２のソース命令のための第２の変換を発見しようとして不成功に終わり、その後、第２の変換を決定し、第２の変換を実行するステップと、を含む。第１のソース命令には、カーネル関数（ＫＦ）を含むことができる。第１の変換を記憶するステップには、少なくとも１つのメモリに記憶された変換についてのインデクスを有する形式で第１の変換を記憶するステップを含むことができる。記憶された第１の変換は、第１の変換の、少なくとも１つのメモリからの除去を回避するように、ピン留めされることができる。第２の変換は、アプリケーションについて、ランタイムの間に決定されることができる。一実施形態において、第１のソース命令は決してエミュレートされず、第２のソース命令はターゲットＩＳＡに関してエミュレートされる。ユーザ選択に応答して、方法が、変換のために第１の未定義シンボルを指定するステップと、エミュレーションのために第２の未定義シンボルを指定するステップと、を含むことができる。一実施形態が、第１の未定義のシンボルをエミュレーション無しに変換するステップと、第２の未定義シンボルをエミュレートするステップと、を含む。第１及び第２の未定義シンボルは、第１及び第２の無名グローバル変数にそれぞれ対応する。一実施形態が、ターゲットＩＳＡライブラリに向けられているゲートを介して第２の未定義シンボルをエミュレートするステップを含むことができる。一実施形態が、ターゲットＩＳＡライブラリに記憶された名前付きグローバルをソースＩＳＡライブラリと共有するステップを含むことができる。一実施形態が、変換を介してかつエミュレーション無しに第１の未定義シンボル解決するステップと、エミュレーションを介して第２の未定義シンボルを解決するステップと、を含むことができる。
【００３８】
一実施形態が、ソース命令セットアーキテクチャ（ＩＳＡ）を有し、少なくとも１つのメモリに記憶されたアプリケーションと、ターゲットＩＳＡを有しかつ少なくとも１つのメモリに結合されてオペレーションを実行する少なくとも１つのプロセッサと、を含むことができ、このオペレーションは、アプリケーションをロードするステップと、少なくとも１つのメモリに第１のソース命令の第１の変換を記憶するステップであり、第１の変換はソースＩＳＡからターゲットＩＳＡにである、ステップと、第１の変換を記憶するステップの後、（ａ）記憶された第１の変換を読み出し、この変換を実行するステップと、（ｂ）第２のソース命令のための第２の変換を発見しようとして不成功に終わり、その後、第２の変換を決定し、第２の変換を実行するステップと、を含む。第１のソース命令には、カーネル関数（ＫＦ）を含むことができる。第２の変換は、アプリケーションについて、ランタイムの間に決定されることができる。一実施形態が、第１の未定義シンボルをエミュレーション無しに変換するステップと、第２の未定義シンボルをエミュレートするステップと、を含むことができる。
【００３９】
本開示は、強化されたセキュリティをコンピューティング装置に提供するという技術的問題の解決策であり得ることも十分理解されたい。本開示の利点には、これに限定されないが、分離という堅牢性の提供を含むことができる。
【図１】
0005886450.tif 000002
【図２】
0005886450.tif 000003
【図３】
0005886450.tif 000004
【図４】
0005886450.tif 000005
【図５】
0005886450.tif 000006
【図６】
0005886450.tif 000007
【図７】
0005886450.tif 000008