(57)【要約】      （修正有）【課題】ランタイム環境においてジャストインタイム（ＪＩＴ）でコンパイルしたコードを安全に実行する。【解決手段】方法は、コードセグメントをランタイムにおいてコンパイルする要求をＪＩＴ実行プロセスから受信する（１０２）ことと、実行可能なコードセグメントを生成するためにコードセグメントをコンパイルするＪＩＴコンパイルプロセスを開始する（１０６）ことと、共有メモリに実行可能なコードセグメントを格納する（１０８）ことと、共有メモリ内の実行可能なコードセグメントに対するポインタをＪＩＴ実行プロセスに提供する（１１０）こととのために少なくとも１つのプロセッサを使用することを含む。ここでは、ＪＩＴ実行プロセスが共有メモリへの読取り実行アクセス権を有し、ＪＩＴ実行プロセスと前記ＪＩＴコンパイルプロセスとは異なるプロセスである。【選択図】図１
2018152061.tif 000002
【特許請求の範囲】
【請求項１】
ランタイム環境においてジャストインタイム（ＪＩＴ）でコンパイルしたコードを安全に実行するコンピュータ実装方法であって、
コードセグメントをランタイムにおいてコンパイルする要求をＪＩＴ実行プロセスから受信することと、
実行可能なコードセグメントを生成するために前記コードセグメントをコンパイルするＪＩＴコンパイルプロセスを開始することと、
共有メモリに前記実行可能なコードセグメントを格納することと、
前記共有メモリ内の前記実行可能なコードセグメントに対するポインタを前記ＪＩＴ実行プロセスに提供することであり、前記ＪＩＴ実行プロセスが前記共有メモリへの読取り実行アクセス権を有する、ポインタを前記ＪＩＴ実行プロセスに提供することと、
のために少なくとも１つのプロセッサを使用すること、
を含み、
前記ＪＩＴ実行プロセスと前記ＪＩＴコンパイルプロセスとは、異なるプロセスである、方法。
【請求項２】
前記ＪＩＴコンパイルプロセスが、前記少なくとも１つのプロセッサのアーキテクチャに従って前記実行可能なコードセグメントを生成することに適応したＪＩＴコンパイラを利用する、
請求項１に記載のコンピュータ実装方法。
【請求項３】
前記ＪＩＴ実行プロセスが、コード生成特権を与えられない、
請求項１に記載のコンピュータ実装方法。
【請求項４】
前記ＪＩＴ実行プロセスが、前記共有メモリへの書込みアクセス権を与えられない、
請求項１に記載のコンピュータ実装方法。
【請求項５】
前記ＪＩＴコンパイルプロセスが、前記格納することを許可するために前記共有メモリへの読取り−書込みアクセス権を認可される、
請求項１に記載のコンピュータ実装方法。
【請求項６】
前記ＪＩＴコンパイルプロセスが、前記共有メモリからの実行アクセス権を与えられない、
請求項１に記載のコンピュータ実装方法。
【請求項７】
前記コードセグメントにより開始された少なくとも１つの潜在的に悪意のある動作を識別するために前記実行可能なコードセグメントを生成する前に前記コードセグメントを解析する、すなわち、前記コードセグメントの有効性を検証するためにコンパイルの前に前記コードセグメントを解析することをさらに含む、
請求項１に記載のコンピュータ実装方法。
【請求項８】
前記コードセグメントにより開始された少なくとも１つの潜在的に悪意のある動作を識別するために、生成した後で前記実行可能なコードセグメントを解析することをさらに含む、
請求項１に記載のコンピュータ実装方法。
【請求項９】
ランタイム環境においてジャストインタイム（ＪＩＴ）でコンパイルしたコードを安全に実行するためのシステムであって、
コードを実行することに適応した少なくとも１つのプロセッサであり、前記コードが、
コードセグメントをランタイムにおいてコンパイルする要求をＪＩＴ実行プロセスから受信するためのコード命令と、
実行可能なコードセグメントを生成するために前記コードセグメントをコンパイルするＪＩＴコンパイルプロセスを開始するためのコード命令と、
共有メモリに前記実行可能なコードセグメントを格納するためのコード命令と、
前記共有メモリ内の前記実行可能なコードセグメントに対するポインタを前記ＪＩＴ実行プロセスに提供するためのコード命令であり、前記ＪＩＴ実行プロセスが前記共有メモリへの読取り実行アクセス権を有する、コード命令と、
を含み、
前記ＪＩＴ実行プロセスと前記ＪＩＴコンパイルプロセスとは、異なるプロセスである、
少なくとも１つのプロセッサ、
を備えるシステム。
【請求項１０】
ランタイム環境においてジャストインタイム（ＪＩＴ）でコンパイルしたコードを安全に実行するためのシステムであって、
コードを実行することに適応した少なくとも１つのプロセッサであり、前記コードが、
少なくとも１つの未コンパイルのコードセグメント含むＪＩＴ実行プロセスを開始するためのコード命令と、
少なくとも１つの対応する実行可能なコードセグメントを生成するために、前記少なくとも１つのコードセグメントをコンパイルするＪＩＴコンパイルプロセスを実行するためのコード命令と、
を含み、
前記少なくとも１つのコードセグメントをコンパイルするために前記ＪＩＴ実行プロセスからの要求に応じて、前記ＪＩＴコンパイルプロセスが、前記対応する実行可能なコードセグメントを生成するために前記少なくとも１つのコードセグメントをコンパイルし、かつ前記実行プロセスが読取り実行アクセス権を有する共有メモリに前記対応する実行可能なコードセグメントを格納する、
少なくとも１つのプロセッサ、
を備えるシステム。
【請求項１１】
前記ＪＩＴ実行プロセスと前記ＪＩＴコンパイルプロセスとは、異なるプロセスである、
請求項１０に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、そのいくつかの実施形態において、ランタイム環境においてジャストインタイム（ＪＩＴ）でコンパイルしたコードを実行することに関し、とりわけ、しかし排他的ではなく、安全なＪＩＴコンパイラを使用してランタイム環境においてＪＩＴでコンパイルしたコードを安全に実行することに関する。
【背景技術】
【０００２】
動作ソフトウェア製品、例えば、アプリケーション、プログラム、ツール、プロセス、等を含むほとんどのソフトウェアコードは、例えば、ファイル、ライブラリ、等から供給される１つまたは複数の実行可能なコードセグメントからロードされる。
【０００３】
従来、コードは、実行可能なコードセグメントを生成するためにあらかじめコンパイルされ、これを、次いで、ハードウェアプラットフォームの１つまたは複数のプロセッサ、例えば、コンピューティングデバイス、処理ノード、等により実行することができる。
【０００４】
成長し続ける多様で複雑なソフトウェア製品と組み合わせたハードウェアプラットフォームの多様性は、ＪＩＴ処理、すなわち、ＪＩＴコンパイルおよびＪＩＴ実行の早い進化および採用をもたらしている。今日の処理環境において必要不可欠になってきているＪＩＴ処理は、複数のコンピュータプログラム命令、例えば、ソースコード、例えばバイトコードなどのポータブルコードを含む未コンパイルの高レベルコードセグメントの送達を可能にしている。典型的には、高レベルコードセグメントは、Ｊａｖａ、．ＮＥＴ、ＪａｖａＳｃｒｉｐｔ、等のプラットフォームに依存しないものである。ソフトウェア製品を実行するプロセッサの特定のプロセッサアーキテクチャに適応したＪＩＴコンパイラは、実行可能なコードセグメントを生成するためにプラットフォームに依存しない高レベルコードセグメントをコンパイルすることができ、上記の実行可能なコードセグメントを次いで特定のプロセッサにより実行することができる。
【発明の概要】
【０００５】
本発明の第１の態様によれば、ランタイム環境においてジャストインタイム（ＪＩＴ）でコンパイルしたコードを安全に実行するコンピュータ実装方法であって、
−  コードセグメントをランタイムにおいてコンパイルする要求をＪＩＴ実行プロセスから受信することと、
−  実行可能なコードセグメントを生成するためにコードセグメントをコンパイルするＪＩＴコンパイルプロセスを開始することと、
−  共有メモリに実行可能なコードセグメントを格納することと、
−  共有メモリ内の実行可能なコードセグメントに対するポインタをＪＩＴ実行プロセスに提供することであり、ＪＩＴ実行プロセスが共有メモリへの読取り実行アクセス権を有する、ポインタをＪＩＴ実行プロセスに提供することと
のために少なくとも１つのプロセッサを使用することを含み、ＪＩＴでコンパイルしたコードを安全に実行するコンピュータ実装方法が提供される。
【０００６】
ここでは、ＪＩＴ実行プロセスとＪＩＴコンパイルプロセスとは、異なるプロセスである。
【０００７】
ＪＩＴコンパイルをＪＩＴ実行プロセスから分離することは、ＪＩＴコンパイルおよび新しいコード生成を高められた安全性で行うことができるので、ＪＩＴ実行プロセスよりも改善された制御を可能にすることができる。ＪＩＴコンパイラがＪＩＴ実行プロセスとは別でありかつ無関係であるＪＩＴコンパイルプロセスのコンテキストにおいて開始され実行されるので、コード生成特権が、ＪＩＴ実行プロセスから与えられないことがある。コード生成特権を持たないと、ＪＩＴ実行プロセスを使用して、処理環境内で悪意のあるコードを不当に利用し生成する攻撃者の能力が、著しく低下することがある。
【０００８】
本発明の第２の態様によれば、コードを実行することに適応した１つまたは複数のプロセッサを備えている、ランタイム環境においてジャストインタイム（ＪＩＴ）でコンパイルしたコードを安全に実行するためのシステムが提供される。コードは、
−  コードセグメントをランタイムにおいてコンパイルする要求をＪＩＴ実行プロセスから受信するためのコード命令と、
−  実行可能なコードセグメントを生成するためにコードセグメントをコンパイルするＪＩＴコンパイルプロセスを開始するためのコード命令と、
−  共有メモリに実行可能なコードセグメントを格納するためのコード命令と、
−  共有メモリ内の実行可能なコードセグメントに対するポインタをＪＩＴ実行プロセスに提供するためのコード命令であって、ＪＩＴ実行プロセスが共有メモリへの読取り実行アクセス権を有する、コード命令と、
を含む。
【０００９】
ここでは、ＪＩＴ実行プロセスとＪＩＴコンパイルプロセスとは、異なるプロセスである。
【００１０】
本発明の第３の態様によれば、コードを実行することに適応した１つまたは複数のプロセッサを備えている、ランタイム環境においてジャストインタイム（ＪＩＴ）でコンパイルしたコードを安全に実行するためのシステムが提供される。コードは、
−  １つまたは複数の未コンパイルのコードセグメント含むＪＩＴ実行プロセスを開始するためのコード命令と、
−  １つまたは複数の対応する実行可能なコードセグメントを生成するために１つまたは複数のコードセグメントをコンパイルするＪＩＴコンパイルプロセスを実行するためのコード命令と、
を含む。
【００１１】
ここでは、１つまたは複数のコードセグメントをコンパイルするためにＪＩＴ実行プロセスからの要求に応じて、ＪＩＴコンパイルプロセスが、対応する実行可能なコードセグメントを生成するために１つまたは複数のコードセグメントをコンパイルし、かつＪＩＴ実行プロセスが読取り実行アクセス権を有する共有メモリに対応する実行可能なコードセグメントを格納する。ここでは、ＪＩＴ実行プロセスとＪＩＴコンパイルプロセスとは、異なるプロセスである。
【００１２】
発明の第１、第２および／または第３の態様を参照して、第１の実装形態によれば、ＪＩＴコンパイルプロセスは、１つまたは複数のプロセッサのアーキテクチャに従って実行可能なコードセグメントを生成することに適応したＪＩＴコンパイラを利用する。ＪＩＴコンパイラを使用するランタイムコンパイルは、汎用プラットフォーム（ハードウェア）に依存しないコードが、プラットフォームに依存しないコードをコンパイルし、プラットフォームに特有でありかつ実行可能なコードを生成するために特有なハードウェアプラットフォームに対して好適なＪＩＴコンパイラを使用することにより様々なハードウェアプラットフォーム上で実行されることを可能にする。
【００１３】
発明の第１、第２および／もしくは第３の態様ならびに／または第１の実装形態を参照して、第２の実装形態によれば、ＪＩＴ実行プロセスは、コード生成特権を与えられない。これは、プロセッサのメモリ領域内のコードを変える、操作するおよび／または管理する悪意のあるＪＩＴ実行プロセスの能力を著しく低下させることができる。
【００１４】
発明の第１、第２および／もしくは第３の態様ならびに／または先の実装形態のいずれかを参照して、第３の実装形態によれば、ＪＩＴ実行プロセスは、共有メモリへの書込みアクセス権を与えられない。特に共有メモリへの、および、一般にプロセッサのメモリ領域への限定的なアクセス権のみを認可することにより、例えば、読取り実行アクセス権を認可し一方で書込みアクセス権を与えないことにより、メモリ領域内のコンテンツを変える、操作する、破壊する、損傷を与える等の悪意のあるＪＩＴ実行プロセスの能力を著しく低下させることができる。
【００１５】
発明の第１、第２および／もしくは第３の態様ならびに／または先の実装形態のいずれかを参照して、第４の実装形態によれば、ＪＩＴコンパイルプロセスは、格納することを許可するために共有メモリへの読取り−書込みアクセス権を認可される。これは、ＪＩＴコンパイルプロセスが共有メモリに実行可能なコードセグメントを格納することを可能にする。
【００１６】
発明の第１、第２および／もしくは第３の態様ならびに／または先の実装形態のいずれかを参照して、第５の実装形態によれば、ＪＩＴコンパイルプロセスは、共有メモリからの実行アクセス権を与えられない。共有メモリへのコード実行アクセス権を持たないと、ＪＩＴコンパイルプロセスは、生成した実行可能なコードセグメントを実行することができない。これは、悪意のあるコードを含むことがある、生成した実行可能なコードセグメントがＪＩＴコンパイルプロセスにより実行されなくてもよいので、ＪＩＴコンパイルプロセスの潜在的なバグおよび／または脆弱性を利用する潜在的な攻撃者の能力を著しく低下させることができる。
【００１７】
任意選択で、発明の第１、第２および／もしくは第３の態様ならびに／または先の実装形態のいずれかを参照して、第６の実装形態によれば、コードセグメントは、コードセグメントにより開始される１つまたは複数の潜在的に悪意のある動作を識別するために、実行可能なコードセグメントを生成する前に解析される。悪意のあるコードセグメントを検出するためにコードセグメントをコンパイルすることに先立ってコードセグメントを解析することは、プロセッサ実行環境の安全性、完全性、堅固さ、等を著しく増加させることができる。高レベルであるコードセグメントを解析することは、高レベルで、すなわち、実行可能なコードに変換することに先立って、検出可能であり得る攻撃ベクトルおよび／または方法を検出することを可能にすることができる。
【００１８】
任意選択で、発明の第１、第２および／もしくは第３の態様ならびに／または先の実装形態のいずれかを参照して、第７の実装形態によれば、実行可能なコードセグメントは、コードセグメントにより開始される１つまたは複数の潜在的に悪意のある動作を識別するために、生成された後で解析される。悪意のあるコードセグメントを検出するために実行に先立って実行可能なコードセグメントを解析することは、プロセッサ実行環境の安全性、完全性、堅固さ、等を著しく増加させることができる。１つまたは複数のツール、例えば、ウィルス駆除を使用して実行可能なコードセグメントを解析することは、実行可能なコードを実行することに先立って攻撃パターンベクトルを検出すること、したがって悪意のある実行可能なコードが強要することがある悪意のある行為を防止することを可能にすることができる。
【００１９】
特に定義されない限り、本明細書で使用される技術用語および／または科学用語はすべて本発明が属する技術分野の当業者によって一般に理解されるのと同じ意味を有する。本明細書で説明する方法および材料と同様のまたは同等の方法および材料を本発明の実施形態の実施または試験で使用することができるが、例示的な方法および／または材料を以下で説明する。矛盾する場合、定義を含む特許明細書が統制することになる。加えて、材料、方法および例は、例示にすぎず、必ずしも限定することを意図していない。
【００２０】
発明の実施形態の方法および／またはシステムの実装形態は、手動で、自動で、またはこれらの組合せで選択したタスクを実行することまたは完了することを包含することができる。その上、発明の方法および／またはシステムの実施形態の実際の器具および機器によれば、いくつかの選択したタスクは、オペレーティングシステムを使用してハードウェアにより、ソフトウェアにより、もしくはファームウェアにより、またはこれらの組合せにより実装されることがある。
【００２１】
例えば、発明の実施形態による、選択したタスクを実行するためのハードウェアは、チップまたは回路として実装されることがある。ソフトウェアとして、発明の実施形態に従って選択されたタスクは、任意の適切なオペレーティングシステムを使用してコンピュータにより実行される複数のソフトウェア命令として実装されることがある。発明の例示的な実施形態では、本明細書において説明するような方法および／またはシステムの例示的な実施形態による１つまたは複数のタスクは、複数の命令を実行するためのコンピューティングプラットフォームなどのデータプロセッサにより実行される。任意選択で、データプロセッサは、命令および／もしくはデータを格納するための揮発性メモリ、ならびに／または命令および／もしくはデータを格納するための不揮発性記憶装置、例えば、磁気ハードディスクおよび／もしくはリムーバブルメディアを含む。任意選択で、ネットワーク接続が、同様に提供される。ディスプレイおよび／またはキーボードもしくはマウスなどのユーザ入力デバイスが、同様に任意選択で提供される。
【００２２】
本発明のいくつかの実施形態が、添付図面を参照しながら、単なる例として、本明細書で説明される。次に図面を詳細に具体的に参照すると、図示の詳細は、例としてのものであり、本発明の実施形態の例示的な議論のためのものであることが強調される。この点に関して、図面とともに行われる説明は、本発明の実施形態をどのように実践できるかを当業者に明らかにする。
【図面の簡単な説明】
【００２３】
【図１】本発明のいくつかの実施形態による、ランタイム環境においてＪＩＴでコンパイルしたコードを安全に実行する例示的なプロセスのフローチャートの図である。
【図２】本発明のいくつかの実施形態による、ランタイム環境においてＪＩＴでコンパイルしたコードを安全に実行するための例示的なシステムの概略図である。
【図３】本発明のいくつかの実施形態による、ランタイム環境においてＪＩＴでコンパイルしたコードを安全に実行する例示的なシーケンスの概略図である。
【発明を実施するための形態】
【００２４】
本発明は、そのいくつかの実施形態では、ランタイム環境においてジャストインタイム（ＪＩＴ）でコンパイルしたコードを実行することに関し、とりわけ、しかし排他的ではなく、安全なＪＩＴコンパイラを使用してランタイム環境においてＪＩＴでコンパイルしたコードを安全に実行することに関する。
【００２５】
本発明のいくつかの実施形態によれば、１つまたは複数のプロセッサによってランタイム処理環境において実行されるＪＩＴ実行プロセスの実行フローからＪＩＴコンパイルを分離することによりＪＩＴで生成した実行可能なコードセグメントを安全に実行するための方法、システムおよびコンピュータプログラム製品を提供する。ＪＩＴ実行プロセス、例えば、アプリケーション、プログラム、ツール、プロセス、スクリプト、等は、複数のコンピュータプログラム命令、例えば、ソースコード、ポータブルコード、バイトコード、等を含む１つまたは複数の未コンパイルの高レベルコードセグメントを含むことができる。これらを実行するために、高レベルコードセグメントは、初めにランタイムにおいてコンパイルされることが必要である。ＪＩＴ実行プロセスは、それゆえに、高レベルコードセグメントをコンパイルするための要求を発行することができる。
【００２６】
要求に応じて、別のＪＩＴコンパイルプロセスが、１つまたは複数のＪＩＴコンパイラ、例えば、Ｊａｖａコンパイラ、ＪａｖａＳｃｒｉｐｔエンジン、．ＮＥＴコンパイラ、等を使用してランタイムにおいて高レベルコードセグメントをコンパイルするために、開始される、起動されるおよび／または実行されることがある。ＪＩＴコンパイラは、ＪＩＴ実行プロセスを動作しているプロセッサのプロセッサアーキテクチャに対応する１つまたは複数の実行可能なコードセグメントを生成するために、コードセグメントをコンパイルする。ＪＩＴコンパイルプロセスは、ＪＩＴ実行プロセスをアクセス可能な共有メモリに実行可能なコードセグメントを格納することができる。ＪＩＴコンパイルプロセスが共有メモリへの読取り／書込みアクセス権を有することができる一方で、ＪＩＴコンパイルプロセスは、共有メモリへの実行アクセス権を与えられないことがある。他方でＪＩＴ実行プロセスは、共有メモリへの、特にＪＩＴコンパイルプロセスが実行可能なコードセグメントを格納した共有メモリ位置（例えば、ページ、セクタ、等）への書込みアクセス権を与えられないとしても、共有メモリへの読取り実行アクセス権だけを持つことがある。
【００２７】
任意選択で、ＪＩＴコンパイルプロセスは、コードセグメントを検証するために、すなわち、悪意のある行為および／または動作がコードセグメントにより開始されないかもしれないことを識別するために、コードセグメントをコンパイルする前にコードセグメントを解析するための１つまたは複数のコード解析ツールを使用する。そのようなコード解析ツールは、典型的にはＪＩＴコンパイラに統合されることがある。ＪＩＴコンパイルプロセスは、生成した実行可能なコードセグメントを検証するための１つまたは複数の実行可能コード解析ツール、例えば、ウィルス駆除ツールをさらに使用することができる。
【００２８】
実行可能なコードセグメントが生成され、共有メモリに格納された後で、ＪＩＴコンパイルプロセスは、共有メモリ内の実行可能なコードセグメントに対するポインタをＪＩＴ実行プロセスに提供することができる。ＪＩＴ実行プロセスは、次いで、共有メモリからの実行可能なコードセグメントを実行することができる。
【００２９】
ＪＩＴ実行プロセスとは別であるおよび／または無関係であるＪＩＴコンパイルプロセスにおける高レベルコードセグメントのＪＩＴコンパイルは、既存のＪＩＴコンパイル法と比較して有意な利点を提示することができる。既存のＪＩＴコンパイル法では、典型的にはＪＩＴ実行プロセスは、高レベルコードセグメントをコンパイルしかつ実行可能なコードセグメントを生成するためのＪＩＴコンパイラを開始することができる。ＪＩＴコンパイラがＪＩＴ実行プロセスのコンテキスト（範囲）において開始されるので、ＪＩＴ実行プロセスは、典型的にはコード生成特権を認可されることがある。そのようなコード生成特権は、潜在的に悪意のあるＪＩＴ実行プロセス、潜在的な攻撃者、等によって容易に不当に利用されることがあり、これらは処理環境において１つまたは複数の悪意のある行為および／または動作を開始することができる悪意のあるコードを生成する、書き込むおよび／または開始するためにバグおよび／またはシステム脆弱性を活用することがある。その上、実行可能なコードセグメントを生成するために、ＪＩＴコンパイラは、プロセッサの１つまたは複数のメモリ領域、例えば、システムメモリ、格納スペース、ネットワークリソース、等をアクセスする必要があり得る。それゆえ、既存のＪＩＴコンパイル法において行われたようにＪＩＴ実行プロセスのコンテキスト（範囲）内でＪＩＴコンパイラをサポートするために、ＪＩＴ実行プロセスは、メモリ領域への修正（書込み）アクセス権を認可されることがある。ＪＩＴ実行プロセスがメモリ領域を変更すること、操作することおよび／または管理することを認めることは、処理環境においてメモリリソースに格納したコンテンツに損傷を与えることがある潜在的に悪意のある実行プロセス、潜在的な攻撃者、等に処理環境をさらに曝すことがある。
【００３０】
他方でＪＩＴコンパイルをＪＩＴ実行プロセスから分離することは、ＪＩＴコンパイルおよび新しいコード生成が著しくより安全に行われることがあるので、ＪＩＴ実行プロセスに対して著しくより優れた制御を可能にすることができる。ＪＩＴコンパイラがＪＩＴ実行プロセスとは別でありかつ無関係であるＪＩＴコンパイルプロセスのコンテキストにおいて開始され、実行されるので、コード生成特権は、ＪＩＴ実行プロセスから与えられないことがある。コード生成特権を持たないと、処理環境内で悪意のあるコードを不当に利用しかつ生成する攻撃者の能力は、著しく低下することがある。その上、ＪＩＴコンパイルがＪＩＴコンパイルプロセスにより行われ、共有メモリに格納されているので、ＪＩＴ実行プロセスは、読取り実行アクセス権を認可されることがある一方で、共有メモリへの、特に一般にプロセッサのメモリ領域への書込みアクセス権を与えられないことがある。これは、ＪＩＴ実行プロセスのメモリ領域のコードを変更する、操作するおよび／または管理する能力を著しく低下させることがある。これは、ＪＩＴ実行プロセスのメモリ領域に格納されたコンテンツを変更する、破壊する、損傷を与える、等の能力をさらに著しく低下させることができる。
【００３１】
その上、共有メモリへのコード実行アクセス権を持たないと、ＪＩＴコンパイルプロセスは、生成した実行可能なコードセグメントを実行することができない、すなわち、新しく生成した実行可能なコードセグメントは、ＪＩＴコンパイルプロセスのコンテキスト（範囲）においては実行されないことがある。これは、悪意のあるコードを含むことができる生成した実行可能なコードセグメントがＪＩＴコンパイルプロセスによって実行されないことがあるので、ＪＩＴコンパイルプロセスにおける潜在的なバグおよび／または脆弱性を利用する潜在的な攻撃者の能力を著しく低下させることができる。
【００３２】
共有メモリアーキテクチャのために、非常にわずかな通信しかＪＩＴ実行プロセスとＪＩＴコンパイルプロセスとの間で交換されないので、ＪＩＴコンパイルプロセスを使用してコードセグメントをコンパイルする性能影響は、取るに足りないことがある。主な時間コンシューマであり得るＪＩＴコンパイラ自体は、既存の方法で行われ、それゆえ性能ペナルティがＪＩＴコンパイラ動作に含まれていないので、ＪＩＴコンパイラがＪＩＴ実行プロセスにより典型的に使用されるようにＪＩＴコンパイルプロセスにより使用される。
【００３３】
さらにその上、コードセグメントおよび／または生成した実行可能なコードセグメントを解析することおよび検証することにより、１つまたは複数の悪意のあるコードセグメントが、識別されることがあり、コードセグメントは、実行することを妨げられることがある。これは、処理環境における脆弱性を不当に利用する悪意のあるプロセスからの潜在的な脅威を著しく減少させることができる。
【００３４】
本発明の少なくとも１つの実施形態を詳細に説明する前に、本発明は、その適用において、以下の説明に記載され、および／または図面および／または実施例に示される構成要素および／または方法の構築および配列の詳細に必ずしも限定されないことを理解されたい。本発明は、他の実施形態が可能であり、または様々な方法で実践もしくは実行することが可能である。
【００３５】
本発明は、システム、方法、および／またはコンピュータプログラム製品とすることができる。コンピュータプログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を有する１つのコンピュータ可読記憶媒体（または複数の媒体）を含むことができる。
【００３６】
コンピュータ可読記憶媒体は、命令実行デバイスによる使用のための命令を保持し格納することができる有形デバイスとすることができる。コンピュータ可読記憶媒体は、例えば、限定はしないが、電子記憶デバイス、磁気記憶デバイス、光学記憶デバイス、磁気記憶デバイス、半導体記憶デバイス、または前述のものの任意の好適な組合せとすることができる。コンピュータ可読記憶媒体のより具体的な例の包括的でないリストは、以下のものを含む：ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、消去可能プログラマブル読取り専用メモリ（ＥＰＲＯＭまたはフラッシュメモリ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ポータブルコンパクトディスク読取り専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、メモリスティック、フロッピーディスク、パンチカードまたは命令を記録した溝の凹凸構造などの機械的にエンコードしたデバイス、および前述のものの任意の好適な組合せ。本明細書で使用するコンピュータ可読記憶媒体は、電波または他の自由に伝播する電磁波、導波路または他の伝送媒体を通って伝搬する電磁波（例えば、光ファイバケーブルを通過する光パルス）、またはワイヤを通して伝送される電気信号などの一時的な信号自体であると解釈されるべきでない。
【００３７】
本明細書で説明するコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング／処理デバイスに、またはネットワーク、例えば、インターネット、ローカルエリアネットワーク、ワイドエリアネットワーク、および／またはワイヤレスネットワークを介して外部コンピュータもしくは外部記憶デバイスにダウンロードすることができる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータ、および／またはエッジサーバを含むことができる。各コンピューティング／処理デバイスのネットワークアダプタカードまたはネットワークインターフェースは、ネットワークからコンピュータ可読プログラム命令を受け取り、それぞれのコンピューティング／処理デバイス内のコンピュータ可読記憶媒体に格納するためにコンピュータ可読プログラム命令を転送する。
【００３８】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ（ＩＳＡ）命令、機械語命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、またはＳｍａｌｌｔａｌｋ、Ｃ＋＋などのようなオブジェクト指向プログラミング言語および「Ｃ」プログラミング言語もしくは類似したプログラミング言語などの従来の手続き型プログラミング言語を含む１つまたは複数のプログラミング言語の任意の組合せで書かれたソースコードもしくはオブジェクトコードのいずれかとすることができる。
【００３９】
コンピュータ可読プログラム命令は、ユーザコンピュータで全面的に、ユーザコンピュータで部分的に、スタンドアロンソフトウェアパッケージとして、ユーザコンピュータで部分的におよびリモートコンピュータで部分的に、またはリモートコンピュータもしくはサーバで全面的に実行することができる。後者のシナリオでは、リモートコンピュータは、ローカルエリアネットワーク（ＬＡＮ）またはワイドエリアネットワーク（ＷＡＮ）を含む任意のタイプのネットワークによってユーザコンピュータに接続されてもよく、または外部コンピュータへの接続がなされてもよい（例えばインターネットサービスプロバイダーを使用するインターネットを通して）。いくつかの実施形態では、例えば、プログラマブル論理回路、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、またはプログラマブル論理アレイ（ＰＬＡ）を含む電子回路は、本発明の態様を実行するために、コンピュータ可読プログラム命令の状態情報を利用することによってコンピュータ可読プログラム命令を実行して、電子回路を個人専用にすることができる。
【００４０】
本発明の態様は、本発明の実施形態による方法、装置（システム）、およびコンピュータプログラム製品のフローチャート図および／またはブロック図を参照して本明細書で説明される。フローチャート図および／またはブロック図の各ブロック、およびフローチャート図および／またはブロック図のブロックの組合せは、コンピュータ可読プログラム命令によって実装できることを理解されよう。
【００４１】
図のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータプログラム製品のあり得る実施態様のアーキテクチャ、機能、および動作を示す。この点に関して、フローチャートまたはブロック図の各ブロックは、特定の論理機能を実装するための１つまたは複数の実行可能命令を含む命令のモジュール、セグメント、または一部分を表すことができる。いくつかの代替実施態様では、ブロックに記された機能は、図に記された順序から外れて行われることがある。例えば、連続して示された２つのブロックは、関係する機能に応じて、実際には実質的に同時に実行されることがあり、またはブロックは時には逆の順序で実行されることがある。ブロック図および／またはフローチャート図の各ブロック、およびブロック図および／またはフローチャート図のブロックの組合せは、特定の機能もしくは動作を実行するかまたは専用ハードウェアとコンピュータ命令との組合せを実行する専用ハードウェアベースシステムによって実装されてもよいことにも留意されたい。
【００４２】
ここで図面を参照して、図１は、本発明のいくつかの実施形態による、ランタイム環境においてＪＩＴでコンパイルしたコードを安全に実行する例示的なプロセスのフローチャートを図示する。プロセス１００は、１つまたは複数のプロセッサによりランタイム処理環境において実行されるＪＩＴ実行プロセスの実行フローからＪＩＴコンパイルを分離するために実行されることがある。ＪＩＴ実行プロセスは、１つまたは複数の未コンパイルの高レベルコードセグメントを含むことができ、これらのコードセグメントは、実行される前にランタイムにおいてコンパイルされることが必要である。ＪＩＴ実行プロセスは、高レベルコードセグメントをコンパイルするための要求を発行することができる。高レベルコードセグメントをコンパイルするために、別のＪＩＴコンパイルプロセスが、１つまたは複数のＪＩＴコンパイラを使用してランタイムにおいて高レベルコードセグメントをコンパイルし、かつＪＩＴ実行プロセスを実行しているプロセッサのプロセッサアーキテクチャに対応している１つまたは複数の実行可能なコードセグメントを生成するために開始される、起動されるおよび／または実行されることがある。ＪＩＴコンパイルプロセスは、読取り実行（書込みがない）アクセス権を有するＪＩＴ実行プロセスをアクセス可能な共有メモリに実行可能なコードセグメントを格納することができる。ＪＩＴ実行プロセスは、次いで、ＪＩＴコンパイルプロセスにより提供されるポインタを使用して共有メモリからの実行可能なコードセグメントを実行することができる。
【００４３】
本発明のいくつかの実施形態による、ランタイム環境においてＪＩＴでコンパイルしたコードを安全に実行するための例示的なシステムの概略図である図２をやはり参照する。プロセス１００などのプロセスを実行するためのシステム２００は、コンピューティングデバイス２０１、例えば、コンピュータ、処理ノード、サーバ、モバイルデバイス、スマートフォン、タブレット、等を含む。実際のところ、コンピューティングデバイス２０１は、ソフトウェアコード命令を実行することができる１つまたは複数のプロセッサを備える任意のデバイスであってもよい。コンピューティングデバイス２０１は、プロセッサ２０２および記憶装置２０４を備える。プロセッサ２０２は、１つまたは複数の（同種または異種の）プロセッサを含み、クラスタとしておよび／または１つもしくは複数の分散型コア処理ユニットとして並列処理のために配置されてもよい。プロセッサ２０２は、１つまたは複数のソフトウェアモジュールを実行することができ、ここではソフトウェアモジュールは、記憶装置２０４などの記憶媒体に格納されかつプロセッサ２０２により実行される複数のプログラム命令を呼ぶ。記憶装置２０４は、１つまたは複数の非一時的な記憶デバイス、例えば、ハードドライブ、フラッシュアレイ、付加された記憶媒体、等を含むことができる。記憶装置２０４は、１つまたは複数の揮発性記憶デバイス、例えば、１つまたは複数のソフトウェアモジュールが非一時的な記憶デバイスのうちの１つもしくは複数からおよび／または１つもしくは複数のネットワークを通して１つもしくは複数の遠隔地からロードされることがあるランダムアクセスメモリ（ＲＡＭ）をさらに含むことができる。
【００４４】
典型的には、コンピューティングデバイス２０１は、１つまたは複数のネットワーク、例えば、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、セルラネットワーク、インターネット、等に接続するための１つまたは複数のネットワークインターフェースをさらに含むことができる。
【００４５】
プロセッサ２０２は、１つまたは複数のソフトウェアモジュールを実行することができ、ここではソフトウェアモジュールは、例えば、プログラム記憶装置２０４などの非一時的な媒体に格納され、かつプロセッサ２０２などの１つまたは複数のプロセッサにより実行される複数のプログラム命令を各々が含んでいるプロセス、アプリケーション、エージェント、ユーティリティ、サービス、プラグイン、スクリプト、アドオンソフトウェア、等であってもよい。典型的には、コンピューティングデバイス２０１は、プロセッサ２０２により実行されるソフトウェアモジュールのために、ランタイム処理環境、サービス、インフラストラクチャ、等を提供するＯＳ、例えば、Ｗｉｎｄｏｗｓ、Ｌｉｎｕｘ、ＵＮＩＸ、ｉＯＳ、Ａｎｄｒｏｉｄ、等をホストする。
【００４６】
プロセッサ２０２は、例えば、実行プロセス２１０、特に、複数のコンピュータプログラム命令、例えば、ソースコード、ポータブルコード、バイトコード、等を含んでいる１つまたは複数の未コンパイルの高レベルコードセグメント２２０を含むＪＩＴ実行プロセスを実行することができる。コードセグメント２２０は、ハードウェアプラットフォームに依存しないコードセグメント、例えば、Ｊａｖａ、．ＮＥＴ、ＪａｖａＳｃｒｉｐｔ、等であってもよい。ＪＩＴ実行プロセス２１０がコードセグメント２２０を実行するために、コードセグメント２２０は、最初にコンパイルされる必要があり、１つまたは複数の対応する実行可能なコードセグメント２２０が生成される必要がある。しかしながら、ＪＩＴ実行プロセス２１０は、例えば、特に、ＪＩＴ実行プロセス２１０がランタイムにおいて実行可能なコードを生成することを防止するためのＯＳによって構成されてもよい。例えば、Ｗｉｎｄｏｗｓでは、設定プロセスダイナミックコードポリシ（ＰｒｏｃｅｓｓＤｙｎａｍｉｃＣｏｄｅＰｏｌｉｃｙ）設定が、ＪＩＴ実行プロセス２１０およびコンパイルプロセスに対して有効にされることがあり、このようにＪＩＴ実行プロセス２１０が実行可能なコードを生成することを禁止している。
【００４７】
プロセッサ２０２は、実行可能なコードセグメント２２２を生成するためにコードセグメント２２０のうちの１つまたは複数をコンパイルするＪＩＴコンパイルプロセス２１２をさらに実行することができる。ＪＩＴコンパイルプロセス２１２がＪＩＴ実行プロセス２１０とは別のプロセスであることが強調される。
【００４８】
いくつかの実施形態では、ＪＩＴコンパイルプロセス２１２は、プロセッサ２０２により実行されるＯＳのＯＳレベルで実行されることがある。ＯＳがコードセグメント２２０をコンパイルするためにＪＩＴ実行プロセス２１０からの要求を検出すると、ＯＳは、実行可能なコードセグメント２２２を生成するためにコードセグメント２２０をコンパイルするＪＩＴコンパイルプロセス２１２を開始することができる。
【００４９】
いくつかの実施形態では、ＪＩＴコンパイルプロセス２１２は、プロセッサ２０２により実行されたもののうちアプリケーションレベルで実行されることがある。例えば、ＪＩＴ実行プロセス２１０が、例えば、Ｃｈｒｏｍｅ、Ｆｉｒｅｆｏｘ、Ｉｎｔｅｒｎｅｔ  Ｅｘｐｌｏｒｅｒ、Ｅｄｇｅ、Ｏｐｅｒａなどのウェブブラウザアプリケーションのコンテキスト（範囲）において実行される場合には、ウェブブラウザアプリケーションは、コードセグメント２２０をコンパイルするためにＪＩＴ実行プロセス２１０からの要求を検出することができる。要求に応じて、ウェブブラウザアプリケーションは、実行可能なコードセグメント２２２を生成するためにコードセグメント２２０をコンパイルするＪＩＴコンパイルプロセス２１２を開始することができる。別の例では、アプリケーションは、例えば、リモートウェブサーバ、リモートコンピューティングノード、リモートコンピューティングクラスタ、クラウドサービス、等により提供されるリモートサービス、例えば、ＹｏｕＴｕｂｅ、Ｆａｃｅｂｏｏｋ、等を提供するためにプロセッサ２０２により実行されるもののローカルエージェントである。ＪＩＴ実行プロセス２１０とは別のプロセスとしてのＪＩＴコンパイルプロセス２１２の管理は、例えば、プラグイン、スクリプト、等としてアプリケーションに追加されることがある。任意選択で、ＪＩＴコンパイルプロセス２１２の管理は、アプリケーションに組み込まれることがある。
【００５０】
共有メモリ２０４−１などの１つまたは複数の共有メモリ領域が、記憶装置２０４内に画定される、構築される、初期化される、等があり得る。例えば、共有メモリ２０４−１は、記憶装置２０４内の１つまたは複数のメモリページ、セクタ、等を利用することができる。共有メモリ２０４−１は、実行可能なコードセグメント２２２を格納するために使用されることがある。共有メモリ２０４−１は、異なるアクセス権を用いてプロセス２１０および２１２の各々にマッピングされることがある。例えば、ＪＩＴ実行プロセス２１０は、共有メモリ２０４−１への読取り実行アクセス権を認可されることがあり、一方で書込みアクセス権を与えられないことがある。ＪＩＴコンパイルプロセス２１２はしかしながら、共有メモリ２０４−１に対する読取り／書込みアクセス権を認可されることがあり、一方で共有メモリからの実行アクセス権を与えられないことがある。典型的には、共有メモリ２０４−１ならびにアクセス権認可の管理は、プロセッサ２０２により実行されるＯＳにより行われる。共有メモリの初期化は、実行プロセスおよびコンパイルプロセスの両方の初期化において行われることがある。
【００５１】
当然に、システム２００は、複数のＪＩＴコンパイルプロセスを使用して複数の実行プロセス２１０に対する複数のコードセグメント２２０をコンパイルしかつ実行するためにプロセス１００を適用することができる、しかしながら、簡潔のために、システム２００ならびにプロセス１００は、１つのＪＩＴコンパイルプロセス２１２によりコンパイルされた１つのコードセグメント２２０を含んでいる１つのＪＩＴ実行プロセス２１０について説明される。
【００５２】
１０２に示したように、要求が、コードセグメント２２０をコンパイルするために、実行プロセス２１０、特にＪＩＴ実行プロセス２１０から、例えば、ＯＳにより受信される。ＪＩＴ実行プロセス２１０は、ＯＳにより提供される１つまたは複数のサービス、例えば、システムコール、機能コール、イベントハンドラ、メッセージ、パイプ、等を使用して要求を発行することができる。
【００５３】
１０４に示したように、コードセグメント２２０をコンパイルするための要求に応じて、ＪＩＴコンパイルプロセス２１２が開始される。ＪＩＴコンパイルプロセス２１２は、ＪＩＴ実行プロセス２１０とは別でありかつ無関係であるプロセスである。ＪＩＴコンパイルプロセス２１２の開始は、例えば、コンパイル要求に応じてＪＩＴコンパイルプロセス２１２を起動することを含むことができる。任意選択で、ＪＩＴコンパイルプロセス２１２は、前もって、例えば、コンピューティングデバイス２０１の電源投入時に起動されてもよく、その結果、ＪＩＴコンパイルプロセス２１２が、既に実行されている（動作されている）ことがあり、コンパイル要求を待機することができる。例えば、ＪＩＴコンパイルプロセス２１２は、アイドルモードで、スリープモードで、等で実行されることがある。コンパイル要求に応じて、ＪＩＴコンパイルプロセス２１２が、開始される、例えば、動作モードへと移行されることがある。
【００５４】
ＪＩＴコンパイルプロセス２１２は、ＯＳにより提供される複数のサービスのうちの１つまたは複数、例えば、メッセージ、パイプ、等を使用してＪＩＴ実行プロセス２１０からコードセグメント２２０を取得する、例えば、受信する、抽出する、および／または収集することができる。追加でおよび／または代替で、ＪＩＴコンパイルプロセス２１２は、ＪＩＴ実行プロセス２１０がコードセグメント２２０を格納した記憶装置２０４内の共有メモリ位置からコードセグメント２２０を取り出すことができる。
【００５５】
１０６に示したように、ＪＩＴコンパイルプロセス２１２は、プロセッサ２０２のアーキテクチャに対応するコードを生成することに適応した１つまたは複数のＪＩＴコンパイラ、例えば、Ｊａｖａコンパイラ、ＪａｖａＳｃｒｉｐｔエンジン、．ＮＥＴコンパイラ、等を使用してコードセグメント２２０をコンパイルすることができる。
【００５６】
任意選択で、ＪＩＴコンパイルプロセス２１２は、コードセグメント２２０をコンパイルする前にコードセグメント２２０を解析するために１つまたは複数のコード解析ツールおよび／または検証ツール、例えば、静的コード解析、等を適用する。コード解析ツールを使用して、ＪＩＴコンパイルプロセス２１２は、コードセグメント２２０が計算デバイス２０１の処理環境を危うくすることがある悪意のある／変形した／権限を与えられていない行為および／または動作を含むかを識別することによりコードセグメント２２０を検証する。コード解析ツールを使用して、ＪＩＴコンパイルプロセス２１２は、コードセグメント２２０が許可されたコード構築協定に従って造られ、構築され、および／または配置されていることを検証するために、コードセグメント２２０内の禁止コード構築実装形態をさらに検出することができる。コードセグメント２２０が潜在的に悪意があると疑われ得るとＪＩＴコンパイルプロセス２１２が決定する場合には、ＪＩＴコンパイルプロセス２１２は、１つまたは複数の措置、例えば、通知の発行、コードセグメント２２０の隔離、等を行うことができる。
【００５７】
任意選択で、ＪＩＴコンパイルプロセス２１２は、生成した実行可能なコードセグメント２２２を検証するために１つまたは複数の解析ツール、例えば、ウィルス駆除ツールを適用することができる。実行可能なコードセグメント２２２が潜在的に悪意があると疑われ得るとＪＩＴコンパイルプロセス２１２が決定する場合には、ＪＩＴコンパイルプロセス２１２は、１つまたは複数の措置、例えば、通知の発行、実行可能なコードセグメント２２２の隔離、等を行うことができる。
【００５８】
１０８に示したように、ＪＩＴコンパイルプロセス２１２は、共有メモリ２０４−１に実行可能なコードセグメント２２２を格納する。ＪＩＴコンパイルプロセス２１２が共有メモリ２０４−１への読取り／書込みアクセス権を認可されているので、これは可能である。共有メモリ２０４−１に実行可能なコードセグメント２２２を格納できる一方で、共有メモリ２０４−１に対する実行権を持たないＪＩＴコンパイルプロセス２１２は、実行可能なコードセグメント２２２を実行しないことがある。
【００５９】
しかしながら、コードセグメント２２０および／または実行可能なコードセグメント２２２を有効にしている間の場合には、ＪＩＴコンパイルプロセス２１２は、コードセグメント２２０および／または実行可能なコードセグメント２２２が計算デバイス２０１の処理環境へのある脅威を表すことができることを決定し、ＪＩＴコンパイルプロセス２１２は、ＪＩＴ実行プロセス２１０が疑わしい実行可能なコードセグメント２２２を実行することを防止するために共有メモリ２０４−１に実行可能なコードセグメント２２２を格納することを回避することができる。
【００６０】
１１０に示したように、ＪＩＴコンパイルプロセス２１２は、共有メモリ２０４−１内の実行可能なコードセグメント２２２の位置に対するポインタをＪＩＴ実行プロセス２１０に提供する。ＪＩＴコンパイルプロセス２１２は、ＪＩＴ実行プロセス２１０へポインタを転送するためにＯＳにより提供される１つまたは複数のサービス、例えば、システムコール、機能コール、イベントハンドラ、メッセージ、パイプ、等を使用することができる。
【００６１】
１１２に示したように、提供されたポインタを使用して、ＪＩＴ実行プロセス２１０は、共有メモリ２０４−１からの実行可能なコードセグメント２２２を実行することができる。ＪＩＴ実行プロセス２１０が共有メモリ２０４−１への読取り実行アクセス権を認可されているので、ＪＩＴ実行プロセス２１０は、共有メモリ２０４−１からの実行可能なコードセグメント２２２を実行することができる。しかしながら、ＪＩＴ実行プロセス２１０が共有メモリ２０４−１への書込みアクセス権を認可されないので、ＪＩＴ実行プロセス２１０は、特に新しい実行可能なコードセグメントを生成するために共有メモリ２０４−１を操作しないことがある。
【００６２】
次に、本発明のいくつかの実施形態による、ランタイム環境においてＪＩＴでコンパイルしたコードを安全に実行する例示的なシーケンスの概略図である図３を参照する。シーケンス３００は、システム２００などのシステム内のコンピューティングデバイス２０１などのコンピューティングデバイスにより実行されるプロセス１００などのプロセスによって行われることがある。ＪＩＴ実行プロセス２１０などの実行プロセスは、プロセッサ２０２などのプロセッサのランタイム処理環境において実行される。ＪＩＴ実行プロセス２１０は、コードプログラム命令およびコードセグメント２２０などの１つまたは複数の未コンパイルのコードセグメントを実行するための実行モジュール３０２を含む。（１）に示したように、コード生成特権を認可されていなくてもよいＪＩＴ実行プロセス２１０は、コードセグメント２２０をコンパイルする要求を発行する。要求に応じて、ＪＩＴコンパイルプロセス２１２などのＪＩＴコンパイルプロセスが起動される。ＪＩＴコンパイルプロセス２１２は、１つまたは複数のＪＩＴコンパイラモジュール３０４、例えば、Ｊａｖａコンパイラ、ＪａｖａＳｃｒｉｐｔエンジン、．ＮＥＴコンパイラ、等を含むことができる。
【００６３】
ＪＩＴ実行プロセス２１０は、ＯＳサービスのうちの１つまたは複数、例えば、メッセージ、パイプライン、共有メモリ、等を使用してＪＩＴコンパイルプロセス２１２にコードセグメント２２０を提供することができる。（２）に示したように、ＪＩＴコンパイルプロセス２１２がコードセグメント２２０を取得した後で、ＪＩＴコンパイルプロセス２１２は、実行可能なコードセグメント２２２などの実行可能なコードセグメントを生成するために、コードセグメント２２０をコンパイルするＪＩＴコンパイラモジュール３０４を開始する。ＪＩＴコンパイルプロセス２１２は、次いで、ＪＩＴコンパイルプロセス２１２のために読取り／書込みメモリとしてマッピングされる共有メモリ２０４−１などの共有メモリに実行可能なコードセグメント２２２を格納することができる。（３）に示したように、ＯＳサービスのうちの１つまたは複数を使用するＪＩＴコンパイルプロセス２１２は、共有メモリ２０４−１内の実行可能なコードセグメント２２２の位置を指し示すポインタを提供する。（４）に示したように、読取り実行アクセスのためにマッピングされた共有メモリ２０４−１を有する実行モジュール３０２は、共有メモリ２０４−１から実行可能なコードセグメント２２２を実行することができる。
【００６４】
本出願から成熟する特許権の存続期間中に、多くの関連技術および／または方法が開発されることが予想され、計算デバイスおよびＪＩＴコンパイラという用語の範囲は、そのような新技術をすべて先験的に含むように意図される。
【００６５】
本明細書で使用する「約」という用語は±１０％を指す。
【００６６】
「備える」、「備えている」、「含む」、「含んでいる」、「有している」、という用語およびそれらの活用形は、「限定はしないが、含む」を意味する。
【００６７】
「からなる」という用語は、「含みかつ限定すること」を意味する。
【００６８】
本明細書で使用する単数形「ａ」、「ａｎ」、および「ｔｈｅ」は、文脈上別段明確に示されない限り複数の指示内容を含む。例えば、「化合物」または「少なくとも１つの化合物」という用語は、それらの混合物を含む複数の化合物を含むことができる。
【００６９】
本出願の全体を通して、本発明の様々な実施形態は、範囲の形式で提示されることがある。範囲の形式での説明は、単に便宜および簡潔のためであり、本発明の範囲に対する柔軟性がない限定と解釈されるべきでないことを理解されたい。したがって、範囲の説明は、すべての可能な部分範囲ならびにその範囲内の個々の数値を具体的に開示したものと考えるべきである。例えば、１から６までなどの範囲の説明は、１から３まで、１から４まで、１から５まで、２から４まで、２から６まで、３から６まで等のような部分範囲、ならびにその範囲内の個々の数、例えば、１、２、３、４、５、および６を具体的に開示したものと考えるべきである。これは、範囲の広さに関係なく適用される。
【００７０】
数の範囲が本明細書で示されるときは常に、数の範囲は、示された範囲内の任意の引用される数字（小数または整数）を含むように意図される。第１の表示数と第２の表示数との「間に及んでいる／及ぶ」、ならびに第１の表示数「から」第２の表示数「まで」「及んでいる／及ぶ」という語句は、本明細書では交換可能に使用され、第１および第２の表示された数、ならびにそれらの数の間のすべての小数および整数を含むことを意味する。
【００７１】
明確にするために別々の実施形態の文脈で説明されている本発明の特定の特徴は、単一の実施形態において組み合わせて提供されることも可能であることが理解される。逆に、簡潔にするために単一の実施形態の文脈で説明されている本発明の様々な特徴は、本発明の任意の他の説明されている実施形態において、別々に、または任意の適切な部分的組合せで、または好適であるように提供されることも可能である。様々な実施形態の文脈で説明したいくつかの特徴は、それらの要素なしでは実施形態が動作不能である場合を除いて、それらの実施形態の必須の特徴と考えるべきではない。
【図１】
2018152061.tif 000003
【図２】
2018152061.tif 000004
【図３】
2018152061.tif 000005
【外国語明細書】
2018152061000001.pdf