(57)【要約】【課題】  ネイティブコードとは異なる命令を処理する際のスループットをより良くする情報処理装置を提供する。【解決手段】  情報処理装置は、ネイティブコードとは異なる命令を記憶手段から読み出して解釈の上実行する、命令実行手段による、前記記憶手段へのアクセスを検出し、検出したアクセスに基づき前記命令の識別子を検出する検出手段と、検出された識別子により特定される前記命令をコンパイルし、コンパイル後のネイティブコードを前記記憶手段に書き込むコンパイル実行手段と、を備える。前記命令実行手段は、前記命令を実行する場合において、前記命令がコンパイル済みであれば当該命令のコンパイル後のネイティブコードを前記記憶手段から読み出して実行する。【選択図】      図８
2018106590.tif 000002
【特許請求の範囲】
【請求項１】
ネイティブコードとは異なる命令を記憶手段から読み出して解釈の上実行する、命令実行手段による、前記記憶手段へのアクセスを検出し、検出したアクセスに基づき前記命令の識別子を検出する検出手段と、
検出された識別子により特定される前記命令をコンパイルし、コンパイル後のネイティブコードを前記記憶手段に書き込むコンパイル実行手段と、
を備え、
前記命令実行手段は、前記命令を実行する場合において、前記命令がコンパイル済みであれば当該命令のコンパイル後のネイティブコードを前記記憶手段から読み出して実行する、
情報処理装置。
【請求項２】
前記記憶手段は、前記命令がコンパイル済みであるか否かを示す情報を記憶し、
前記命令実行手段は、前記命令を実行する場合において、前記記憶手段にアクセスすることにより当該命令がコンパイル済みであるかを確認する、
請求項１に記載の情報処理装置。
【請求項３】
前記コンパイル実行手段は、前記検出手段により識別子が所定の数検出される毎に、検出された識別子により特定される前記命令であってコンパイル済みでない前記命令をコンパイルする、
請求項１または２に記載の情報処理装置。
【請求項４】
前記コンパイル実行手段は、所定値を超える数の、コンパイル済みでない前記命令の識別子が検出された場合に、当該コンパイル済みでない前記命令をまとめてコンパイルする、
請求項１または２に記載の情報処理装置。
【請求項５】
前記検出手段は、前記命令実行手段が前記記憶手段から前記命令を読み出すためのアクセスに基づき、読み出されている前記命令の識別子を読み出す、
請求項１から４のいずれか一項に記載の情報処理装置。
【請求項６】
前記検出手段は、前記アクセスに基づき特定される識別子が、コンパイル済みでない前記命令の識別子であるかを判定し、コンパイル済みでない前記命令の識別子と判定された識別子を、前記コンパイル実行手段によりコンパイルされる前記命令の識別子として検出する、
請求項１から４のいずれか一項に記載の情報処理装置。
【請求項７】
前記検出手段は、前記識別子を検出した際に前記命令をも読み出し、
前記コンパイル実行手段は、前記検出手段により読み出された前記命令をコンパイルする、
請求項１から６のいずれか一項に記載の情報処理装置。
【請求項８】
前記命令実行手段と、
前記記憶手段と、
をさらに備える請求項１から７のいずれか一項に記載の情報処理装置。
【請求項９】
ネイティブコードとは異なる命令を記憶手段から読み出して解釈の上実行する、命令実行手段による、前記記憶手段へのアクセスを検出し、検出したアクセスに基づき前記命令の識別子を検出し、
検出された識別子により特定される前記命令をコンパイルし、コンパイル後のネイティブコードを前記記憶手段に書き込み、
前記命令実行手段は、前記命令を実行する場合において、前記命令がコンパイル済みであれば当該命令のコンパイル後のネイティブコードを前記記憶手段から読み出して実行する、
情報処理方法。
【請求項１０】
コンピュータに、
ネイティブコードとは異なる命令を記憶手段から読み出して解釈の上実行する、命令実行手段による、前記記憶手段へのアクセスを検出し、検出したアクセスに基づき前記命令の識別子を検出する検出処理と、
検出された識別子により特定される前記命令をコンパイルし、コンパイル後のネイティブコードを前記記憶手段に書き込むコンパイル実行処理と、
を実行させ、
前記命令実行手段は、前記命令を実行する場合において、前記命令がコンパイル済みであれば当該命令のコンパイル後のネイティブコードを前記記憶手段から読み出して実行する、
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、情報処理装置による、命令を実行する処理に関する。
【背景技術】
【０００２】
コンピュータシステムにおいて、プロセッサが処理する命令（「コード」とも称す）は、定義された命令セットアーキテクチャ（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ，ＩＳＡ）に基づく。たとえばコンピュータがエミュレーションを行う場合において、実行対象となるプログラムが、命令を処理するプロセッサのＩＳＡとは異なるＩＳＡに基づく命令で構成される場合、それらのＩＳＡ間に互換性が無ければ、プログラムは正しく実行されない。したがって、プロセッサが、そのプロセッサのＩＳＡとは異なるＩＳＡに基づくプログラムを実行する場合は、そのプログラムの命令を、そのプロセッサのＩＳＡに基づく命令（「ネイティブコード」とも称す）に変換する必要がある。
【０００３】
実行されようとしている命令をネイティブコードに置き換えて命令を実行する方法には、主に２つの種類がある。１つは、命令を１つずつネイティブコードに置き換え、逐次実行する、インタプリタ方式である。もう１つは、複数の命令をまとめてネイティブコード群にコンパイルし、コンパイルの結果生成したネイティブコードを実行する、コンパイル方式である。
【０００４】
コンパイル方式では、命令の前後関係を考慮して、ネイティブコードの最適化ができるため、インタプリタ方式よりも、命令の実行に関するスループットは高い。但し、多くの命令をまとめてコンパイルすると、コンパイルが終了するまでに時間がかかる。コンパイル処理中はネイティブコードの実行が中断されるので、コンパイル処理にかかる時間が長いと、スループットは低下する。
【０００５】
特許文献１および２は、コンパイル処理とインタプリタ処理を併用する技術を開示している。
【０００６】
特許文献１に開示される技術では、命令実行処理部は、あるメソッドを実行する際、そのメソッドがコンパイル済みである場合は、コンパイルされた結果であるネイティブコードを実行する。そのメソッドがコンパイル済みでなかった場合は、命令実行処理部は、そのメソッドのバイトコード列を、命令単位で逐次取り出し、逐次解釈して実行する。その時、命令実行処理部は、コンパイル要求管理部に対し、当該メソッドのコンパイル要求を送信する。コンパイル処理部は、コンパイル要求管理部が受信したコンパイル要求に係る、メソッドのバイトコード列をネイティブコードにコンパイルし、コンパイルによって生成したネイティブコードをネイティブコード記憶部に記憶させる。
【０００７】
特許文献２にも、上記の特徴と同様の特徴を有する２つのＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を有する情報処理装置が開示されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特許第４７１３８２０号公報
【特許文献２】特開２０１３−６１８１０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
特許文献１に開示される技術では、命令実行処理部は、コンパイル済みでないメソッドを実行する度に、コンパイル要求管理部に対しコンパイル要求を送信する必要がある。コンパイル要求を送信するための処理が行われる分、命令実行処理部による、命令の実行に関するスループットは低下する可能性がある。
【００１０】
特許文献２に開示される技術においても、命令を実行するＣＰＵは、コンパイルを実行するＣＰＵに対して、コンパイルの実行を指示する。そのため、特許文献１に開示される技術と同じく、スループットが低下する可能性があるという問題がある。
【００１１】
本発明は、ネイティブコードのＩＳＡと異なるＩＳＡに基づく命令を処理する際のスループットをより良くする情報処理装置を提供することを目的の１つとする。
【課題を解決するための手段】
【００１２】
本発明の一態様に係る情報処理装置は、ネイティブコードとは異なる命令を記憶手段から読み出して解釈の上実行する、命令実行手段による、前記記憶手段へのアクセスを検出し、検出したアクセスに基づき前記命令の識別子を検出する検出手段と、検出された識別子により特定される前記命令をコンパイルし、コンパイル後のネイティブコードを前記記憶手段に書き込むコンパイル実行手段と、を備える。前記命令実行手段は、前記命令を実行する場合において、前記命令がコンパイル済みであれば当該命令のコンパイル後のネイティブコードを前記記憶手段から読み出して実行する。
【００１３】
本発明の一態様に係る情報処理方法は、ネイティブコードとは異なる命令を記憶手段から読み出して解釈の上実行する、命令実行手段による、前記記憶手段へのアクセスを検出し、検出したアクセスに基づき前記命令の識別子を検出し、検出された識別子により特定される前記命令をコンパイルし、コンパイル後のネイティブコードを前記記憶手段に書き込む。前記命令実行手段は、前記命令を実行する場合において、前記命令がコンパイル済みであれば当該命令のコンパイル後のネイティブコードを前記記憶手段から読み出して実行する。
【００１４】
本発明の一態様に係るプログラムは、コンピュータに、ネイティブコードとは異なる命令を記憶手段から読み出して解釈の上実行する、命令実行手段による、前記記憶手段へのアクセスを検出し、検出したアクセスに基づき前記命令の識別子を検出する検出処理と、検出された識別子により特定される前記命令をコンパイルし、コンパイル後のネイティブコードを前記記憶手段に書き込むコンパイル実行処理と、を実行させる。
【発明の効果】
【００１５】
本発明によれば、ネイティブコードのＩＳＡと異なるＩＳＡに基づく命令を処理する際のスループットが向上する。
【図面の簡単な説明】
【００１６】
【図１】本発明の第１の実施形態に係る情報処理装置の構成を示すブロック図である。
【図２】第１の実施形態に係る命令実行プロセッサの処理の流れの例を示すフローチャートである。
【図３】第１の実施形態に係るコンパイルプロセッサの処理の流れの例を示すフローチャートである。
【図４】第１の実施形態に係るコンパイルプロセッサの処理の流れの別の例を示すフローチャートである。
【図５】本発明の第２の実施形態に係る情報処理装置の構成を示すブロック図である。
【図６】本発明の第３の実施形態に係る情報処理装置の構成を示すブロック図である。
【図７】第３の実施形態に係る情報処理装置の構成の別の例を示すブロック図である。
【図８】本発明の一実施形態に係る情報処理装置の構成を示すブロック図である。
【図９】本発明の一実施形態に係る情報処理装置の処理の流れの例を示すフローチャートである。
【図１０】本発明の各実施形態の各部を構成しうるコンピュータの例を示すブロック図である。
【発明を実施するための形態】
【００１７】
以下、図面を参照しながら、本発明の実施形態を詳細に説明する。
【００１８】
＜＜第１の実施形態＞＞
まず、本発明の第１の実施形態について説明する。
【００１９】
第１の実施形態では、命令を実行する命令実行プロセッサと、コンパイルを行うコンパイルプロセッサとを備える情報処理装置１を例として挙げる。しかし、情報処理装置１と同等の機能を実現する構成は、説明例に限られない。たとえば、命令実行プロセッサとコンパイルプロセッサとの両方の機能が、１つのマルチコアプロセッサによって実現されてもよい。
【００２０】
＜構成＞
図１は、第１の実施形態に係る情報処理装置１の構成を示すブロック図である。
【００２１】
情報処理装置１は、コンパイルプロセッサ１０と、命令実行プロセッサ１１と、記憶部１２と、を備える。コンパイルプロセッサ１０、命令実行プロセッサ１１、および記憶部１２は、内部バス５に接続されている。
【００２２】
＝＝＝記憶部１２＝＝＝
記憶部１２は、命令に関するデータを記憶する。記憶部１２の一部または全部は、たとえば記憶回路の集まりである。記憶部１２の一部または全部は、たとえば情報処理装置１の主記憶装置（メモリ）の一部でもよい。記憶部１２は、命令記憶部１２０と、コンパイル済み情報記憶部１２１と、コンパイル済み命令記憶部１２２とを含む。記憶部１２に含まれるそれぞれの構成は、同じコンポーネントによって構成されていてもよいし、別々のコンポーネントによって構成されてもよい。記憶部１２の一部または全部は、命令実行プロセッサ１１に含まれていてもよいし、コンパイルプロセッサ１０に含まれていてもよい。
【００２３】
命令記憶部１２０は、実行対象となる一連の命令を記憶する。本実施形態では、命令記憶部１２０に記憶された、実行対象となる命令を、「ターゲットコード」とも称す。ターゲットコードは、たとえば中間コードやマシンコード（機械語の命令）である。ターゲットコードは、ソースコードで記述されたプログラムが変換されることにより生成したコードであってもよい。ターゲットコードは、命令実行プロセッサ１１のＩＳＡとは異なるＩＳＡに基づく命令である。
【００２４】
なお、本実施形態では、一連のターゲットコードのことを、プログラムとも称す。
【００２５】
ターゲットコードはそれぞれ、命令記憶部１２０の、アドレス（たとえば、メモリアドレス）が割り当てられた記憶領域に、記憶領域ごとに格納されている。すなわち、アドレスを指定することによって、命令記憶部１２０に記憶されているターゲットコードは一意に特定される。以下、ターゲットコードが格納されている記憶領域のアドレスを、単に「ターゲットコードのアドレス」とも称す。
【００２６】
コンパイル済み情報記憶部１２１は、コンパイル済み情報を記憶する。コンパイル済み情報は、ターゲットコードのそれぞれについてコンパイル済みであるか否かを示す情報である。コンパイル済みであるか否かを示す情報は、たとえば、「コンパイル済みである」ことを示す値と「コンパイル済みでない」ことを示す値をとりうる、コンパイル済みフラグによって表されうる。すなわち、コンパイル済み情報記憶部１２１には、たとえば、ターゲットコードを識別する識別子（例として、アドレス）と、コンパイル済みフラグとが、関連付けられて記憶される。
【００２７】
コンパイル済み情報記憶部１２１は、アドレスを受信すると、受信したアドレスのコンパイル済み情報を出力する。たとえば、受信したアドレスにより特定されるコンパイル済みフラグの値が「コンパイル済みである」ことを示す値であれば、コンパイル済み情報記憶部１２１は、受信したアドレスにより特定される命令がコンパイル済みであることを示す情報を出力する。
【００２８】
なお、コンパイル済み情報記憶部１２１は、コンパイル済みの命令のアドレスのみを記憶するよう構成されていてもよい。コンパイル済みの命令のアドレスのみがコンパイル済み情報記憶部１２１に記憶されるのであれば、受信したアドレスがコンパイル済み情報記憶部１２１に記憶されていることが、すなわちその命令がコンパイル済みであることを意味する。この場合も、コンパイル済み情報記憶部１２１はコンパイル済み情報を記憶している、といえる。この場合、コンパイル済み情報記憶部１２１は、アドレスを受信すると、受信したアドレスを受信したアドレスがコンパイル済み情報記憶部１２１に記憶されているか否かをチェックする。受信したアドレスが記憶されている場合、コンパイル済み情報記憶部１２１は、受信したアドレスにより特定される命令がコンパイル済みであることを示す情報を出力する。受信したアドレスが記憶されていない場合、コンパイル済み情報記憶部１２１は、受信したアドレスにより特定される命令がコンパイル済みでないことを示す情報を出力する。
【００２９】
コンパイル済み命令記憶部１２２は、コンパイル済みの命令を記憶する。本実施形態におけるコンパイル済みの命令とは、命令記憶部１２０に含まれる命令が、後述のコンパイル部１０２によってコンパイルされることにより生成するネイティブコードである。コンパイル済み命令記憶部１２２が記憶する命令のそれぞれには、識別子が関連付けられる。識別子は、たとえば、その命令のコンパイル前の命令が格納されている記憶領域のアドレスである。
【００３０】
＝＝＝命令実行プロセッサ１１＝＝＝
命令実行プロセッサ１１は、ターゲットコードを実行するための処理を行う。
【００３１】
図１に示される通り、命令実行プロセッサ１１は、判定部１１０と、取得部１１１と、解釈部１１２と、実行部１１３とを有する。
【００３２】
判定部１１０は、実行されるべき命令がコンパイル済みであるか否かを判定する。具体的には、たとえば、判定部１１０は、実行されるべき命令のアドレスを記憶部１２のコンパイル済み情報記憶部１２１に送る。コンパイル済み情報記憶部１２１は、送られてきたアドレスにより特定される命令のコンパイル済み情報を判定部１１０に送る。これにより、判定部１１０は、読み出された命令がコンパイル済みであるか否かを判定する。
【００３３】
なお、実行されるべき命令とは、プログラムのフローに従って実行部１１３が次に処理することになっているターゲットコードである。
【００３４】
取得部１１１は、実行されるべき命令がコンパイル済みであると判定された場合、その命令のコンパイル後の命令（ネイティブコード）をコンパイル済み命令記憶部１２２から取得する。また、取得部１１１は、実行されるべき命令がコンパイル済みでないと判定された場合、その命令（ターゲットコード）を、命令記憶部１２０から読み出す。この場合、取得部１１１は、たとえば、内部バス５を通じて命令記憶部１２０に対してその命令のアドレスを指定することによって、その命令を読み出す。
【００３５】
解釈部１１２は、コンパイル済みでないと判定されて命令記憶部１２０から読み出された命令を、逐次解釈する。命令を解釈するとは、命令をネイティブコードに変換することである。
【００３６】
実行部１１３は、ネイティブコードを実行する。すなわち、実行部１１３は、取得部１１１および解釈部１１２からネイティブコードを受け取り、そのネイティブコードに従った処理を実行する。
【００３７】
＝＝＝コンパイルプロセッサ１０＝＝＝
コンパイルプロセッサ１０は、ターゲットコードをコンパイルする。図１に示される通り、コンパイルプロセッサ１０は、検出部１００と、アドレス記憶部１０１と、コンパイル部１０２と、を有する。
【００３８】
検出部１００は、命令実行プロセッサ１１による記憶部１２へのアクセスを検出する。そして、検出部１００は、そのアクセスに基づき、命令実行プロセッサ１１が処理している（または処理した）命令のアドレスを検出する。たとえば、検出部１００は、内部バス５を監視する。そして、検出部１００は、たとえば、取得部１１１が命令記憶部１２０から命令を読み出す際に命令記憶部１２０に送るアドレスを、そのアドレスの情報が流れる内部バス５から捕捉する。あるいは、たとえば、検出部１００は、判定部１１０がコンパイル済み情報記憶部１２１に対して送るアドレスを、内部バス５から捕捉する。
【００３９】
アドレス記憶部１０１は、検出された命令のアドレスを記憶する。
【００４０】
コンパイル部１０２は、記憶されたアドレスに基づき、コンパイル済みでない命令（以下、「未コンパイルの命令」とも称す）をコンパイルする。本実施形態において、「コンパイル」とは、ターゲットコードをネイティブコードに変換することである。コンパイル部１０２によるコンパイルは、解釈部１１２による処理と同様にターゲットコード１つずつの変換でもよい。コンパイル部１０２は、複数のターゲットコードをまとめてネイティブコード群に変換してもよい。複数のターゲットコードをまとめて変換する場合については、［変形例３］の項目において説明する。
【００４１】
コンパイル部１０２は、コンパイルによって生成したネイティブコードを、コンパイル前の命令のアドレスを関連付ける形式で、コンパイル済み命令記憶部１２２に記憶させる。
【００４２】
＜動作＞
（命令実行プロセッサ１１の動作）
図２は、命令実行プロセッサ１１の動作の流れを示すフローチャートである。
【００４３】
まず、判定部１１０が、初めに実行されるべき命令のアドレスを特定する（ステップＳ２１）。プログラムの実行開始時であれば、初めに実行されるべき命令のアドレスは、プログラムの１行目のアドレスである。
【００４４】
次に、判定部１１０は、特定された、実行されるべき命令がコンパイル済みであるか否かを判定する（ステップＳ２２）。たとえば、判定部１１０は、実行されるべき命令のアドレスをコンパイル済み情報記憶部１２１に送り、送った結果としてその命令に関連付けられたコンパイル済み情報を取得する。コンパイル済み情報が、コンパイル済みであることを示していれば、判定部１１０は、その命令がコンパイル済みであると判定する。コンパイル済み情報が、コンパイル済みでないことを示していれば、判定部１１０は、その命令がコンパイル済みでないと判定する。
【００４５】
実行されるべき命令がコンパイル済みでない場合（ステップＳ２２においてＮＯ）、取得部１１１が、実行されるべき命令のアドレスに基づき、命令記憶部１２０から実行されるべき命令を読み出す（ステップＳ２３）。そして、解釈部１１２が、読み出された命令を解釈する（ステップＳ２４）。解釈部１１２は、解釈によって生成したネイティブコードを、実行部１１３に送る。これにより、次にステップＳ２６の処理が行われる。
【００４６】
実行されるべき命令がコンパイル済みである命令である場合（ステップＳ２２においてＹＥＳ）、取得部１１１は、実行されるべき命令のアドレスに基づき、コンパイル済み命令記憶部１２２から、実行されるべき命令のコンパイル後の命令を取得する（ステップＳ２５）。取得部１１１は、取得された命令を実行部１１３に送る。これにより、次にステップＳ２６の処理が行われる。
【００４７】
ステップＳ２６においては、実行部１１３が、取得部１１１または解釈部１１２から受け取った命令を実行する。
【００４８】
命令の実行後、プログラムの実行処理を終了させる場合は（ステップＳ２７においてＹＥＳ）、処理は終了する。プログラムの実行処理を続行する場合は（ステップＳ２７においてＮＯ）、判定部１１０が次に実行されるべき命令のアドレスを特定する（ステップＳ２８）。たとえば、最後に実行した命令がジャンプ命令であれば、実行されるべき命令のアドレスは、そのジャンプ命令のジャンプ先のアドレスである。最後に実行した命令がジャンプ命令でなければ、実行されるべき命令のアドレスは、直前に実行した命令のアドレスの次のアドレスである。
【００４９】
特定されたアドレスについて、判定部１１０は再びステップＳ２２の判定を行う。以下同様に、命令実行プロセッサ１１は、実行されるべき命令のアドレスについて、ステップＳ２３からステップＳ２６の処理を、判定に基づいて行う。
【００５０】
（コンパイルプロセッサ１０の動作）
図３は、コンパイルプロセッサ１０の処理の流れを示すフローチャートである。
【００５１】
コンパイルプロセッサ１０は、たとえば、命令実行プロセッサ１１が、命令記憶部１２０に含まれるターゲットコードの実行を開始してから、動作を終了するまで、図３のフローチャートに示される流れの処理を繰り返し行う。
【００５２】
まず、検出部１００は、内部バス５を流れるデータから、命令実行プロセッサ１１が処理しようとしている命令のアドレスを取得する（ステップＳ３１）。たとえば、検出部１００は、内部バス５に流れている、命令実行プロセッサ１１が行う処理内容を監視する。そして、検出部１００は、その処理内容から、命令記憶部１２０に含まれる命令のアドレスを検出する。
【００５３】
検出部１００が監視する処理内容とは、具体的には、たとえば、図２に示されるフローチャートのステップＳ２２の処理（コンパイル済み情報の取得）や、ステップＳ２３の処理（命令記憶部１２０からの命令の読み出し）において送受信されるデータである。検出部１００は、いわば、命令実行プロセッサ１１が送受信するデータに含まれるアドレスを捕捉（ｃａｐｔｕｒｅ）する。
【００５４】
そして、検出部１００は、検出したアドレスを、アドレス記憶部１０１に記憶させる。アドレス記憶部１０１は、検出部１００が検出したアドレスを記憶する（ステップＳ３２）。ただし、アドレス記憶部１０１は、既に記憶されているアドレスと同一のアドレスが検出された場合に、そのアドレスを新たに記憶しなくてもよい。
【００５５】
ステップＳ３３では、コンパイル部１０２が、検出されたアドレスの数が所定の数になったか否かを判定する。この判定のため、コンパイル部１０２は、たとえば、アドレスが検出される度に、カウントを１増やす処理を行ってもよい。そして、コンパイル部１０２は、アドレスが検出される度に、カウントが所定値になったか否かを判定してもよい。なお、カウントを増やす契機は、検出部１００がアドレスを検出する時でもよいし、アドレス記憶部１０１がアドレスを記憶する時でもよい。アドレス記憶部１０１がアドレスを記憶する時に、アドレス記憶部１０１がコンパイル部１０２に対して、記憶されるアドレスを送信してもよい。あるいは、コンパイル部１０２は、アドレス記憶部１０１が記憶するアドレスを、割り込み等を用いて監視することで、アドレス記憶部１０１に記憶されたアドレスの数を把握してもよい。なお、コンパイル部１０２は、相異なるアドレスの数をカウントしてもよい。すなわち、カウントの値が０から現在の値になるまでの間に検出されたアドレスに一致するアドレスが検出されても、コンパイル部１０２は、カウントを増やさなくてもよい。
【００５６】
なお、このステップＳ３３の判定処理は、コンパイル部１０２以外の構成（たとえば、アドレス記憶部１０１や、図示されない他のコンポーネント）により行われてもよい。
【００５７】
検出されたアドレスの数が所定の数になっていない場合（ステップＳ３３においてＮＯ）、コンパイル部１０２は引き続きアドレスがさらに検出されるのを待つ。検出されたアドレスの数が所定の数になった場合（ステップＳ３３においてＹＥＳ）、ステップＳ３４の処理が行われる。なお、ステップＳ３４の処理が行われた場合には、カウントはリセットされてよい。
【００５８】
なお、ステップＳ３３における「所定の数」は、コンパイルプロセッサ１０の設計時に設定されてもよいし、外部からの指示等により設定および変更がされ得る数値でもよい。所定の数は、１以上の任意の数に設定され得る。また、ステップＳ３３における「所定の数になったか」という判定は、「（カウントが）所定値を超えたか」という判定でもよい。このような場合は、所定値は０以上の数である。
【００５９】
ステップＳ３４において、コンパイル部１０２は、検出されたアドレスに、未コンパイルの命令のアドレスが含まれているかを判定する。この説明における「検出されたアドレス」とは、たとえば、カウントが０であった時から所定値に達するまでに検出されたアドレスを指す。たとえば、コンパイル部１０２は、検出されたアドレスにより特定される命令のそれぞれが、コンパイル済みであるか否かをチェックする。
【００６０】
チェックする方法として、コンパイル部１０２は、たとえば、検出されたアドレスをコンパイル済み情報記憶部１２１に送信し、送信した結果として、各々のアドレスのコンパイル済み情報を取得してもよい。あるいは、コンパイルプロセッサ１０は、内部レジスタ等に、コンパイル済み情報を別途保持していてもよい。そうすれば、コンパイル部１０２は、そのコンパイル済み情報を参照することで、各々のアドレスのコンパイル済み情報を取得できる。
【００６１】
検出されたアドレスの中に未コンパイルの命令のアドレスが含まれていない場合（ステップＳ３４においてＮＯ）、処理は終了する。この場合、カウントを０とし、アドレス記憶部１０１に記憶されるアドレスをクリアした上で、再びステップＳ３１の処理が開始されてもよい。アドレス記憶部１０１に記憶されるアドレスはクリアされなくてもよい。その場合は、アドレス記憶部１０１は、カウントの値が０になる前に記憶されるアドレスと、後に記憶されるアドレスとが、区別できるような形態で記憶する。
【００６２】
検出されたアドレスの中に未コンパイルの命令のアドレスが含まれている場合（ステップＳ３４においてＹＥＳ）、コンパイル部１０２は、その未コンパイルの命令をコンパイルする（ステップＳ３５）。コンパイル部１０２は、たとえば、未コンパイルの命令を、その命令のアドレスを基に、命令記憶部１２０から読み出す。そして、コンパイル部１０２は、読み出した命令をネイティブコードにコンパイルする。
【００６３】
コンパイル部１０２は、未コンパイルの命令のみをコンパイルしてもよいし、未コンパイルの命令と、コンパイル済みの命令とをまとめてコンパイルしてもよい。
【００６４】
コンパイルが完了したら、コンパイル部１０２は、コンパイルの結果として生成したネイティブコードを、コンパイル済み命令記憶部１２２に書き込む（ステップＳ３６）。この時、コンパイル部１０２は、それぞれのネイティブコードが、コンパイル前の命令のアドレスから特定可能であるように、アドレスとネイティブコードとを関連付ける形式で、ネイティブコードを書き込む。これにより、取得部１１１が、ステップＳ２５の処理において、アドレスを用いてコンパイル済みのネイティブコードを読み出すことができる。
【００６５】
コンパイル部１０２は、さらに、コンパイル済み情報記憶部１２１に記憶されている、コンパイル済み情報を更新する（ステップＳ３７）。具体的には、例えば、コンパイル部１０２は、コンパイルが完了した命令に関連付けられるコンパイル済み情報を、コンパイル済であることを示す値に書き換える。コンパイル済み情報記憶部１２１がコンパイル済みの命令のアドレスのみを記憶する構成である場合は、コンパイル部１０２は、コンパイルが完了した命令のアドレスをコンパイル済み情報記憶部１２１に書き込むだけでよい。
【００６６】
（コンパイルプロセッサ１０の動作の別の例）
図４は、コンパイルプロセッサ１０の動作の流れの別の例を示すフローチャートである。コンパイルプロセッサ１０は、たとえば、命令実行プロセッサ１１が、命令記憶部１２０に含まれるターゲットコードの実行を開始してから、動作を終了するまで、図４のフローチャートに示される流れの処理を繰り返し行う。
【００６７】
図４に示すフローチャートでは、ステップＳ４１において、検出部１００は、バスを流れるデータから未コンパイルの命令のアドレスを検出する。
【００６８】
検出部１００は、例えば、命令実行プロセッサ１１が図２に示されるフローチャートのステップＳ２３の処理（内部バス経由での命令の読み出し）を捕捉する。そして、命令実行プロセッサ１１が指定するアドレスを検出する。命令実行プロセッサ１１が指定するアドレスは、未コンパイルの命令のアドレスである。
【００６９】
あるいは、検出部１００は、例えば、命令実行プロセッサ１１による図２に示されるフローチャートのステップＳ２２の処理における、内部バス５経由でのコンパイル済み情報の読み出し処理を捕捉してもよい。そして、検出部１００は、命令実行プロセッサ１１がコンパイル済み情報を読み出すために送信しているアドレスを検出してもよい。ただし、このアドレスは、未コンパイルの命令のアドレスとは限らない。検出部１００は、コンパイル済み情報記憶部１２１から提供されるコンパイル済み情報をさらに検出してもよい。コンパイル済み情報がコンパイル済みを示していれば、検出部１００は、検出したアドレスがコンパイル済みの命令のアドレスであると特定してもよい。あるいは、検出部１００は、検出したアドレスが既に検出したことのあるアドレスであるかを調べてもよい。検出したアドレスを、たとえばアドレス記憶部１０１にすべて記憶させておけば、検出部１００は、検出したアドレスが既に検出したことのあるアドレスであるかを特定することができる。
【００７０】
以上のようにして、検出部１００は、未コンパイルの命令のアドレスを検出する。検出部１００は、検出した未コンパイルの命令のアドレスを、アドレス記憶部１０１に記憶させる。
【００７１】
アドレス記憶部１０１は、検出された、未コンパイルの命令のアドレスを記憶する（ステップＳ４２）。ただし、アドレス記憶部１０１は、既に記憶されているアドレスと同一のアドレスが検出された場合に、そのアドレスを新たに記憶しなくてもよい。
【００７２】
コンパイル部１０２は、検出されたアドレスの数が所定値を超えたか否かを判定する（ステップＳ４３）。この判定処理はアドレス記憶部１０１以外の構成により行われてもよい。検出されたアドレスの数が所定値を超えていない場合（ステップＳ４３においてＮＯ）、コンパイル部１０２は引き続き未コンパイルの命令のアドレスが新たに検出されるのを待つ。検出されたアドレスの数が所定値を超えた場合（ステップＳ４３においてＹＥＳ）、ステップＳ４４の処理が行われる。
【００７３】
ステップＳ４４において、コンパイル部１０２は、検出されアドレス記憶部１０１に記憶されたアドレスに基づき、当該アドレスの命令をコンパイルする。具体的には、コンパイル部１０２は、アドレス記憶部１０１に記憶されているアドレスを用いて、命令記憶部１２０から当該命令を読み出す。そして、コンパイル部１０２は、読み出された命令をコンパイルし、その結果としてネイティブコードを生成する。
【００７４】
コンパイル部１０２は、コンパイルにより生成されたネイティブコードを、コンパイル済み命令記憶部１２２に書き込む（ステップＳ４５）。また、コンパイル部１０２は、コンパイルした命令のコンパイル済み情報を更新する（ステップＳ４６）。ステップＳ４５およびステップＳ４６の処理は、それぞれ、ステップＳ３６およびステップＳ３７の処理と同様でよい。
【００７５】
ステップＳ４５およびステップＳ４６の処理が完了したら、一連の処理は終了する。プログラムがまだ実行中であれば、再びステップＳ４１の処理が開始されてよい。
【００７６】
＜効果＞
第１の実施形態に係る情報処理装置１は、命令を実行する効率を改善できるという効果がある。
【００７７】
情報処理装置１の命令実行プロセッサ１１は、実行対象の命令がコンパイル済みであればネイティブコードを取得して実行し、未コンパイルであれば解釈しながら実行する。この時、命令実行プロセッサ１１は、未コンパイルの命令をコンパイルする要求をコンパイルプロセッサ１０に対して行う必要がない。その理由は、コンパイルプロセッサ１０は、命令実行プロセッサ１１の処理内容を監視することで、処理内容に含まれるアドレスを検出するからである。
【００７８】
このように、命令実行プロセッサ１１がコンパイル要求を行う処理が不要であるため、命令実行プロセッサ１１による命令の実行に関するスループットは、特許文献１や２よりも良いことが期待される。
【００７９】
なお、コンパイル部１０２は、ステップＳ３３の処理によれば、アドレスが所定の数検出される毎に、検出されたアドレスの命令であってコンパイル済みでない命令をコンパイルする。「所定の数」が２以上である場合、所定の数が１である場合（すなわち、アドレスが検出される度にコンパイルを行う場合）に比べて、コンパイル部１０２がコンパイルに関する処理を行う頻度は低減される。たとえば、ステップＳ３４の処理の回数は低減される。また、コンパイル部１０２は、ステップＳ３５からステップＳ３７の処理を、複数の命令についてまとめて行うことができるため、逐一行うよりも効率よく処理を行うことができる。
【００８０】
［変形例１］
上記実施形態では、命令、コンパイル後のネイティブコード、およびコンパイル済み情報には、アドレスが関連付けられるとして説明されている。しかし、命令に関する情報を識別および特定するのにあたっては、その情報を一意に識別する識別子であれば、必ずしもアドレスが用いられなくともよい。たとえば、コンパイル後のネイティブコード、およびコンパイル済み情報には、アドレスとは異なる番号が関連付けられてもよい。この場合、判定部１１０によるステップＳ２２、Ｓ２５の処理や、コンパイルプロセッサ１０による各処理においては、アドレスの代わりにその番号が用いられてもよい。
【００８１】
［変形例２］
検出部１００は、命令を検出してもよい。たとえば、検出部１００は、アドレスを検出した場合に、命令記憶部１２０にアクセスし、検出されたアドレスの命令を取得してもよい。あるいは、たとえば、検出部１００は、取得部１１１が命令記憶部１２０からターゲットコードを読み出すためのバスから、読み出された命令を検出してもよい。
【００８２】
そして、検出部１００は、検出した命令をコンパイル部１０２に送ってもよい。
【００８３】
コンパイル部１０２は、検出された命令を保持していてもよい。コンパイル部１０２が命令を保持しておけば、コンパイル部１０２はステップＳ３５の処理において、命令を命令記憶部１２０から読み出す必要はなく、コンパイルの実行における処理が速くなるという効果がある。
【００８４】
［変形例３］
コンパイル部１０２は、複数のターゲットコードをまとめてネイティブコード群に変換してもよい。すなわち、コンパイル部１０２は、複数のターゲットコードを、逐次解釈される場合よりも効率的に処理されるようなネイティブコード群に変換してもよい。
【００８５】
このような場合、コンパイル部１０２は、生成するネイティブコード群を、コンパイル前の複数のターゲットコードのアドレスの群を関連付ける形式で、コンパイル済み命令記憶部１２２に記憶させてもよい。たとえば、コンパイル部１０２は、アドレスが「０００００１００」から「００００１０００」までの命令をまとめてコンパイルした場合、生成したネイティブコード群に対して、「０００００１００から００００１０００」という情報を関連付ける形式で、生成したネイティブコード群を記憶させる。また、コンパイル部１０２は、コンパイル済み情報記憶部１２１に、アドレス「０００００１００」から「００００１０００」の命令群がコンパイル済みであることを示す情報を記憶させる。
【００８６】
この場合に、判定部１１０が、実行されるべき命令のアドレスとして「０００００１００」のコンパイル済み情報を問い合わせた場合、コンパイル済み情報記憶部１２１は、アドレス「０００００１００」から「００００１０００」の命令群がコンパイル済みであることを示す情報を判定部１１０に返す。その場合、取得部１１１は、コンパイル済み命令記憶部１２２から、「０００００１００から００００１０００」という情報が関連付けられたネイティブコード群を取得する。このネイティブコード群が示す処理を行ったあとは、次に実行されるべき命令のアドレスは、「００００１０００」の次のアドレス（「００００１００１」）である。
【００８７】
別の態様として、コンパイル部１０２は、複数のターゲットコードをまとめてコンパイルする場合、生成したターゲットコード群が実行された場合に次に実行されるべき命令のアドレスにジャンプするジャンプ命令を生成して付加してもよい。この場合、コンパイル済み命令記憶部１２０において、ネイティブコード群は、コンパイル前のターゲットコード群の最初のアドレスだけが関連付けられてもよい。たとえば、アドレスが「０００００１００」から「００００１０００」までの命令がまとめてコンパイルされた場合、コンパイル部１０２は、コンパイル後のネイティブコード群の末尾に、アドレス「００００１００１」にジャンプする命令を付加する。すると、アドレス「０００００１００」に基づいて読み出されるネイティブコード群を命令処理部３１が実行した後、実行されるべき命令のアドレスは「００００１００１」と特定される。
【００８８】
以上の処理において、プログラムが正しく実行されるよう、コンパイル部１０２は、コンパイル時に、分岐がない（すなわち、実行される命令の内容および順番が処理内容に依存しない）ターゲットコードのまとまりを、コンパイルする。
【００８９】
このような変形例によれば、より効率的な実行手順を示すネイティブコードがコンパイル部１０２によって生成され、命令を実行する効率がさらに向上する。
【００９０】
＜＜第２の実施形態＞＞
本発明の第２の実施形態について説明する。
【００９１】
図５は、第２の実施形態に係る情報処理装置２の構成を示すブロック図である。情報処理装置２は、切替部１２３を備えるよう構成される。命令実行プロセッサ１１は、判定部１１０を有さなくてもよい。
【００９２】
取得部１１１は、実行されるべき命令のアドレスを、切替部１２３に送る。
【００９３】
切替部１２３は、取得部１１１から送られたアドレスに応じて、命令実行プロセッサ１１の取得部１１１が命令を読み出す経路を切り替える。具体的には、切替部１２３は、受け取ったアドレスがコンパイル済みの命令のアドレスであれば、経路を、取得部１１１がコンパイル済み命令記憶部１２２から命令を読み出す経路に設定する。切替部１２３は、受け取ったアドレスがコンパイル済みでない命令のアドレスであれば、経路を、取得部１１１が命令記憶部１２０から命令を読み出す経路に設定する。切替部１２３は、いわば、受信したアドレスにより特定される命令がコンパイル済みであるか否かに応じて、異なる経路を設定する。
【００９４】
切替部１２３は、上記の機能を実現するため、アドレス毎に特定される命令がコンパイル済みであるか否かを示すコンパイル済み情報を有する。したがって、切替部１２３は、第１の実施形態のコンパイル済み情報記憶部１２１の変形例といえる。
【００９５】
切替部１２３の機能により、取得部１１１は、実行すべき命令がコンパイル済みであった場合はコンパイル済み命令記憶部１２２から命令を取得し、コンパイル済みでない場合は命令記憶部１２０から命令を読み出すことができる。
【００９６】
本実施形態の説明において特に言及されていない構成要素の機能は、第１の実施形態における同一の符号が付された構成要素の機能と同等である。
【００９７】
なお、検出部１００は、たとえば、取得部１１１と切替部１２３とをつなぐバスから、取得部１１１が出力するアドレスを検出する。検出部１００は、たとえば、取得部１１１が命令記憶部１２０またはコンパイル済み命令記憶部１２２から命令を読み出す際に出力する処理内容から、アドレスを検出する。
【００９８】
以上のような構成により、情報処理装置２は、情報処理装置１と同様、スループットの良い命令実行を行うことができる。また、第１の実施形態に比べ、コンパイル済み情報を命令実行プロセッサ１１が受信する処理が不要であるため、命令実行プロセッサ１１の処理の効率が向上するという効果がある。
【００９９】
なお、第１の実施形態で説明された変形例や変更可能な事項は、第２の実施形態においても適用されてよい。
【０１００】
＜＜第３の実施形態＞＞
本発明の第３の実施形態について説明する。
【０１０１】
図６は、本発明の第３の実施形態に係る情報処理装置３の構成を示すブロック図である。情報処理装置３は、コンパイル処理部３０と、命令処理部３１と、記憶部３２とを備える。
【０１０２】
情報処理装置３の各部は、情報処理装置１の各部と異なり、各部が同一のバスで接続されている必要はない。
【０１０３】
記憶部３２は、命令記憶部３２０、コンパイル済み情報記憶部３２１、およびコンパイル済み命令記憶部３２２を有する。
【０１０４】
命令記憶部３２０は、実行の対象であるターゲットコードを記憶する。第３の実施形態における命令記憶部３２０は、第１の実施形態における命令記憶部１２０と同様でよい。
【０１０５】
コンパイル済み情報記憶部３２１は、コンパイル済み情報を記憶する。
【０１０６】
コンパイル済み命令記憶部３２２は、ターゲットコードがコンパイルされた結果であるネイティブコードを記憶する。
【０１０７】
命令処理部３１は、判定部３１０、取得部３１１、解釈部３１２、および実行部３１３を備える。命令処理部３１の各部の機能は、ソフトウェアを実行するプロセッサによって実現されてもよい。命令処理部３１の一部または全部が、回路によって実現されていてもよい。
【０１０８】
判定部３１０は、実行されるべき命令がコンパイル済みの命令であるか否かを判定する。判定部３１０は、判定のため、コンパイル済み情報記憶部３２１のコンパイル済み情報を参照する。
【０１０９】
取得部３１１は、判定部３１０の判定に基づいて、命令記憶部３２０またはコンパイル済み命令記憶部３２２から命令を取得する。具体的には、取得部３１１は、実行されるべき命令がコンパイル済みである場合は、コンパイル済み命令記憶部３２２からその命令のネイティブコードを取得する。実行されるべき命令がコンパイル済みでない場合は、取得部３１１は、命令記憶部３２０からその命令を取得する。
【０１１０】
解釈部３１２は、取得部３１１により命令記憶部３２０から取得された命令を解釈する。解釈部３１２の機能は第１の実施形態の解釈部１１２の機能と同様でよい。
【０１１１】
実行部３１３は、取得部３１１および解釈部３１２からネイティブコードを受け取り、そのネイティブコードが示す処理を実行する。実行部３１３は、プロセッサでもよいし、プロセッサにネイティブコードの実行を指示するシステムでもよい。
【０１１２】
コンパイル処理部３０は、検出部３００、命令情報記憶部３０１、およびコンパイル実行部３０２を有する。
【０１１３】
検出部３００は、命令処理部３１が扱った命令に関する情報（以下、命令情報とも称す）を検出する。命令に関する情報は、たとえば命令が格納されているアドレスである。検出部３００による命令情報を検出する方法としては、たとえば、コンパイル済み情報記憶部３２１から、コンパイル済み情報が参照された命令の情報を取得する方法がある。たとえば、コンパイル済み情報記憶部３２１が、命令処理部３１の判定部３１０からコンパイル済み情報の参照を受ける際に、参照される命令の命令情報をデータとして記憶する。そうすれば、検出部３００は、コンパイル済み情報記憶部３２１が記憶したそのデータを参照することにより、コンパイル済み情報が参照された命令、すなわち命令処理部３１が扱った命令を特定することができる。あるいは、たとえば、コンパイル済み情報記憶部３２１が、判定部３１０によるコンパイル済み情報の参照があった場合に、参照される命令の命令情報を検出部３００に送ってもよい。
【０１１４】
別の方法として、検出部３００は、取得部３１１が命令記憶部３２０から取得した命令の情報を、命令記憶部３２０から取得してもよい。取得された命令の情報を命令記憶部３２０が記憶し、その記憶された情報を検出部３００が読み出してもよい。あるいは、命令記憶部３２０が、命令が読み出される度に、読み出された命令の情報を検出部３００に送ってもよい。
【０１１５】
情報処理装置３は、図７のように、記憶部３２に含まれる構成として、処理履歴記憶部３２３を有していてもよい。すなわち、処理履歴記憶部３２３により、命令処理部３１が扱った命令に関する情報が記憶されてもよい。処理履歴記憶部３２３は、たとえば、コンパイル済み情報記憶部３２１から、コンパイル済み情報が参照された命令の情報を取得してもよいし、命令記憶部３２０から、命令処理部３１により読み出された命令の情報を取得してもよい。あるいは、処理履歴記憶部３２３は、命令処理部３１から直接、実行されるべき命令のアドレスを受信してもよい。そして、検出部３００は、処理履歴記憶部３２３を参照することにより、命令処理部３１が扱った命令の命令情報を検出してもよい。
【０１１６】
命令情報記憶部３０１は、検出部３００が検出した命令情報を記憶する。
【０１１７】
コンパイル実行部３０２は、命令情報記憶部３０１に記憶された命令情報が示す命令をコンパイルする。コンパイル実行部３０２は、たとえば、最後にコンパイルを実行した時から命令情報記憶部３０１に新たに記憶された命令情報の数が、所定の数になる毎に、記憶された命令情報が示す命令をコンパイルしてもよい。コンパイル実行部３０２は、まだコンパイルされていない命令を特定して、特定された命令のみをコンパイルしてもよい。コンパイル実行部３０２の機能は、第１の実施形態のコンパイル部１０２の機能と同様でよい。
【０１１８】
コンパイル実行部３０２は、コンパイルした結果生成するネイティブコードをコンパイル済み命令記憶部３２２に書き込む。
【０１１９】
以上のような構成により、情報処理装置３は、情報処理装置１と同様、より効率的に命令の実行を行うことができる。
【０１２０】
＜＜第４の実施形態＞＞
本発明の一実施形態に係る情報処理装置４について説明する。図８は、情報処理装置４の構成を示すブロック図である。情報処理装置４は、検出部４００と、コンパイル実行部４０２とを含む。
【０１２１】
検出部４００は、命令実行部による記憶部へのアクセスを検出し、検出したアクセスに基づき命令の識別子を検出する。なお、命令実行部は、ネイティブコードとは異なる命令を記憶部から読み出して解釈の上実行する部である。命令実行部および記憶部は、情報処理装置４に備えられていてもよいし、情報処理装置４の外部の構成として存在していてもよい。
【０１２２】
コンパイル実行部４０２は、検出された識別子により特定される命令をコンパイルし、コンパイル後のネイティブコードを記憶部に書き込む。
【０１２３】
図９は、情報処理装置４の処理の流れを示すフローチャートである。まず、検出部４００は、命令実行部による記憶部へのアクセスを検出する（ステップＳ９１）。検出部４００が検出するアクセスは、たとえば、ネイティブコードとは異なる命令を記憶部から読み出すためのアクセスである。あるいは、検出部４００は、既に説明された実施形態のように、実行されるべき命令がコンパイル済みであるか否かを確認するためのアクセスを検出してもよい。そして、検出部４００は、検出したアクセスに基づき、そのアクセスにおいて用いられている（または用いられた）命令の識別子を検出する（ステップＳ９２）。次に、コンパイル実行部４０２は、検出された識別子により特定される命令をコンパイルする（ステップＳ９３）。そして、コンパイル実行部４０２は、コンパイル後のネイティブコードを記憶部に書き込む（ステップＳ９４）。
【０１２４】
情報処理装置４によれば、命令実行部は、記憶部からコンパイル後のネイティブコードを取得することができる。命令実行部による命令の実行に関するスループットは、全ての命令を解釈しながら実行する場合や、コンパイルを要求する場合に比べ、向上する。
【０１２５】
（ハードウェアの構成について）
以上、説明した本発明の各実施形態において、各装置の各構成要素は、機能単位のブロックを示している。
【０１２６】
各装置の各構成要素の一部または全部は、たとえば、汎用または専用の回路によって実現される。各構成要素は、それぞれ単一のチップによって構成されてもよいし、バスを介して接続される複数のチップによって構成されてもよい。
【０１２７】
本発明の技術思想を超えない限りにおいて、各実施形態の一部または全部の構成要素は、たとえば、コンピュータシステムが、プログラムを記憶したコンピュータ読み取り可能な記憶媒体からプログラムを読み出して実行することによって、実現されてもよい。「コンピュータシステム」とは、一例として、以下のような構成を含むコンピュータ９００を含むシステムである。
・ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）９０１
・ＲＯＭ９０２
・ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）９０３
・ＲＡＭ９０３へロードされるプログラム９０４Ａおよび記憶情報９０４Ｂ
・プログラム９０４Ａおよび記憶情報９０４Ｂを記憶する記憶装置９０５
・記憶媒体９０６の読み書きを行うドライブ装置９０７
・通信ネットワーク９０９と接続する通信インタフェース９０８
・データの入出力を行う入出力インタフェース９１０
・各構成要素を接続するバス９１１
たとえば、各実施形態における各装置の各構成要素は、その構成要素の機能を実現するプログラム９０４ＡをＣＰＵ９０１がＲＡＭ９０３にロードして実行することで実現される。各装置の各構成要素の機能を実現するプログラム９０４Ａは、例えば、予め、記憶装置９０５やＲＯＭ９０２に格納される。そして、必要に応じてＣＰＵ９０１がプログラム９０４Ａを読み出す。記憶装置９０５は、たとえば、ハードディスクである。プログラム９０４Ａは、通信ネットワーク９０９を介してＣＰＵ９０１に供給されてもよいし、予め記憶媒体９０６に格納されており、ドライブ装置９０７に読み出され、ＣＰＵ９０１に供給されてもよい。なお、記憶媒体９０６は、たとえば、光ディスク、磁気ディスク、光磁気ディスク、および不揮発性半導体メモリ等の、可搬媒体である。
【０１２８】
上述のＲＯＭ９０２、記憶装置９０５、および記憶媒体９０６は、「コンピュータ読み取り可能な記憶媒体」の一例である。「コンピュータ読み取り可能な記憶媒体」は、この他、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時間の間、動的にプログラムを保持するもの、その場合のサーバやクライアントにあたるコンピュータシステム内部の揮発性メモリのように、プログラムを一時的に保持しているものも含む。また上記プログラムは、前述した機能の一部を実現するためのものであってもよく、更に前述した機能をコンピュータシステムにすでに記憶されているプログラムとの組み合わせで実現できるものであってもよい。
【０１２９】
コンピュータ９００は、求められる機能を実現する限りにおいて、図１０に示される構成の一部（たとえばドライブ装置９０７、通信インタフェース９０８等）を含んでいなくてもよい。
【０１３０】
各装置の実現方法には、様々な変形例がある。例えば、各装置は、構成要素毎にそれぞれ別個のコンピュータ９００とプログラムとの可能な組み合わせにより実現されてもよい。また、各装置が備える複数の構成要素が、一つのコンピュータ９００とプログラムとの可能な組み合わせにより実現されてもよい。
【０１３１】
各装置の各構成要素の一部または全部が複数のコンピュータや回路等により実現される場合には、複数のコンピュータや回路等は、集中配置されてもよいし、分散配置されてもよい。例えば、コンピュータや回路等は、クライアントアンドサーバシステム、クラウドコンピューティングシステム等、各々が通信ネットワークを介して接続される形態として実現されてもよい。
【０１３２】
本願発明は以上に説明した実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【０１３３】
上記実施形態の一部または全部は以下の付記のようにも記載され得るが、以下には限られない。
【０１３４】
＜＜付記＞＞
［付記１］
ネイティブコードとは異なる命令を記憶手段から読み出して解釈の上実行する、命令実行手段による、前記記憶手段へのアクセスを検出し、検出したアクセスに基づき前記命令の識別子を検出する検出手段と、
検出された識別子により特定される前記命令をコンパイルし、コンパイル後のネイティブコードを前記記憶手段に書き込むコンパイル実行手段と、
を備え、
前記命令実行手段は、前記命令を実行する場合において、前記命令がコンパイル済みであれば当該命令のコンパイル後のネイティブコードを前記記憶手段から読み出して実行する、
情報処理装置。
［付記２］
前記記憶手段は、前記命令がコンパイル済みであるか否かを示す情報を記憶し、
前記命令実行手段は、前記命令を実行する場合において、前記記憶手段にアクセスすることにより当該命令がコンパイル済みであるかを確認する、
付記１に記載の情報処理装置。
［付記３］
前記コンパイル実行手段は、前記検出手段により識別子が所定の数検出される毎に、検出された識別子により特定される前記命令であってコンパイル済みでない前記命令をコンパイルする、
付記１または２に記載の情報処理装置。
［付記４］
前記コンパイル実行手段は、所定値を超える数の、コンパイル済みでない前記命令の識別子が検出された場合に、当該コンパイル済みでない前記命令をまとめてコンパイルする、
付記１または２に記載の情報処理装置。
［付記５］
前記検出手段は、前記命令実行手段が前記記憶手段から前記命令を読み出すためのアクセスに基づき、読み出されている前記命令の識別子を読み出す、
付記１から４のいずれか一つに記載の情報処理装置。
［付記６］
前記検出手段は、前記アクセスに基づき特定される識別子が、コンパイル済みでない前記命令の識別子であるかを判定し、コンパイル済みでない前記命令の識別子と判定された識別子を、前記コンパイル実行手段によりコンパイルされる前記命令の識別子として検出する、
付記１から４のいずれか一つに記載の情報処理装置。
［付記７］
前記検出手段は、前記識別子を検出した際に前記命令をも読み出し、
前記コンパイル実行手段は、前記検出手段により読み出された前記命令をコンパイルする、
付記１から６のいずれか一つに記載の情報処理装置。
［付記８］
前記命令実行手段と、
前記記憶手段と、
をさらに備える付記１から７のいずれか一つに記載の情報処理装置。
［付記９］
ネイティブコードとは異なる命令を記憶手段から読み出して解釈の上実行する、命令実行手段による、前記記憶手段へのアクセスを検出し、検出したアクセスに基づき前記命令の識別子を検出し、
検出された識別子により特定される前記命令をコンパイルし、コンパイル後のネイティブコードを前記記憶手段に書き込み、
前記命令実行手段は、前記命令を実行する場合において、前記命令がコンパイル済みであれば当該命令のコンパイル後のネイティブコードを前記記憶手段から読み出して実行する、
情報処理方法。
［付記１０］
前記記憶手段は、前記命令がコンパイル済みであるか否かを示す情報を記憶し、
前記命令実行手段は、前記命令を実行する場合において、前記記憶手段にアクセスすることにより当該命令がコンパイル済みであるかを確認する、
付記９に記載の情報処理方法。
［付記１１］
識別子が所定の数検出される毎に、検出された識別子により特定される前記命令であってコンパイル済みでない前記命令をコンパイルする、
付記９または１０に記載の情報処理方法。
［付記１２］
所定値を超える数の、コンパイル済みでない前記命令の識別子が検出された場合に、当該コンパイル済みでない前記命令をまとめてコンパイルする、
付記９または１０に記載の情報処理方法。
［付記１３］
前記命令実行手段が前記記憶手段から前記命令を読み出すためのアクセスに基づき、読み出されている前記命令の識別子を読み出す、
付記９から１２のいずれか一つに記載の情報処理方法。
［付記１４］
前記アクセスに基づき特定される識別子が、コンパイル済みでない前記命令の識別子であるかを判定し、コンパイル済みでない前記命令の識別子と判定された識別子を、コンパイルされる前記命令の識別子として検出する、
付記９から１２のいずれか一つに記載の情報処理方法。
［付記１５］
前記識別子を検出した際に前記命令をも読み出し、
読み出した前記命令をコンパイルする、
付記９から１４のいずれか一つに記載の情報処理方法。
［付記１６］
コンピュータに、
ネイティブコードとは異なる命令を記憶手段から読み出して解釈の上実行する、命令実行手段による、前記記憶手段へのアクセスを検出し、検出したアクセスに基づき前記命令の識別子を検出する検出処理と、
検出された識別子により特定される前記命令をコンパイルし、コンパイル後のネイティブコードを前記記憶手段に書き込むコンパイル実行処理と、
を実行させ、
前記命令実行手段は、前記命令を実行する場合において、前記命令がコンパイル済みであれば当該命令のコンパイル後のネイティブコードを前記記憶手段から読み出して実行する、
プログラム。
［付記１７］
前記記憶手段は、前記命令がコンパイル済みであるか否かを示す情報を記憶し、
前記命令実行手段は、前記命令を実行する場合において、前記記憶手段にアクセスすることにより当該命令がコンパイル済みであるかを確認する、
付記１６に記載のプログラム。
［付記１８］
前記コンパイル実行処理は、前記検出処理により識別子が所定の数検出される毎に、検出された識別子により特定される前記命令であってコンパイル済みでない前記命令をコンパイルする、
付記１６または１７に記載のプログラム。
［付記１９］
前記コンパイル実行処理は、所定値を超える数の、コンパイル済みでない前記命令の識別子が検出された場合に、当該コンパイル済みでない前記命令をまとめてコンパイルする、
付記１６または１７に記載のプログラム。
［付記２０］
前記検出処理は、前記命令実行手段が前記記憶手段から前記命令を読み出すためのアクセスに基づき、読み出されている前記命令の識別子を読み出す、
付記１６から１９のいずれか一つに記載のプログラム。
［付記２１］
前記検出処理は、前記アクセスに基づき特定される識別子が、コンパイル済みでない前記命令の識別子であるかを判定し、コンパイル済みでない前記命令の識別子と判定された識別子を、前記コンパイル実行処理によりコンパイルされる前記命令の識別子として検出する、
付記１６から１９のいずれか一つに記載のプログラム。
［付記２２］
前記検出処理は、前記識別子を検出した際に前記命令をも読み出し、
前記コンパイル実行処理は、前記検出処理により読み出された前記命令をコンパイルする、
付記１６から２１のいずれか一つに記載のプログラム。
【符号の説明】
【０１３５】
１〜４    情報処理装置
５    内部バス
１０    コンパイルプロセッサ
１００    検出部
１０１    アドレス記憶部
１０２    コンパイル部
１１    命令実行プロセッサ
１１０    判定部
１１１    取得部
１１２    解釈部
１１３    実行部
１２、３２    記憶部
１２０、３２０    命令記憶部
１２１、３２１    コンパイル済み情報記憶部
１２２、３２２    コンパイル済み命令記憶部
１２３    切替部
３０    コンパイル処理部
３００    検出部
３０１    命令情報記憶部
３０２    コンパイル実行部
３１    命令処理部
３１０    判定部
３１１    取得部
３１２    解釈部
３１３    実行部
３２３    処理履歴記憶部
４００    検出部
４０２    コンパイル実行部
９００    コンピュータ
９０１    ＣＰＵ
９０２    ＲＯＭ
９０３    ＲＡＭ
９０４Ａ    プログラム
９０４Ｂ    記憶情報
９０５    記憶装置
９０６    記憶媒体
９０７    ドライブ装置
９０８    通信インタフェース
９０９    通信ネットワーク
９１０    入出力インタフェース
９１１    バス
【図１】
2018106590.tif 000003
【図２】
2018106590.tif 000004
【図３】
2018106590.tif 000005
【図４】
2018106590.tif 000006
【図５】
2018106590.tif 000007
【図６】
2018106590.tif 000008
【図７】
2018106590.tif 000009
【図８】
2018106590.tif 000010
【図９】
2018106590.tif 000011
【図１０】
2018106590.tif 000012
【手続補正書】
【提出日】平成29年12月27日(2017.12.27)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ネイティブコードとは異なる命令を記憶手段から読み出して解釈の上実行する、命令実行手段による、前記記憶手段への前記命令を読み出すためのアクセスを検出し、検出したアクセスに基づき、読み出されている前記命令の識別子を検出する検出手段と、
検出された識別子により特定される前記命令をコンパイルし、コンパイル後のネイティブコードを前記記憶手段に書き込むコンパイル実行手段と、
を備え、
前記命令実行手段は、前記命令を実行する場合において、前記命令がコンパイル済みであれば当該命令のコンパイル後のネイティブコードを前記記憶手段から読み出して実行する、
情報処理装置。
【請求項２】
前記記憶手段は、前記命令がコンパイル済みであるか否かを示す情報を記憶し、
前記命令実行手段は、前記命令を実行する場合において、前記記憶手段にアクセスすることにより当該命令がコンパイル済みであるかを確認する、
請求項１に記載の情報処理装置。
【請求項３】
前記コンパイル実行手段は、前記検出手段により識別子が所定の数検出される毎に、検出された識別子により特定される前記命令であってコンパイル済みでない前記命令をコンパイルする、
請求項１または２に記載の情報処理装置。
【請求項４】
前記コンパイル実行手段は、所定値を超える数の、コンパイル済みでない前記命令の識別子が検出された場合に、当該コンパイル済みでない前記命令をまとめてコンパイルする、
請求項１または２に記載の情報処理装置。
【請求項５】
前記命令実行手段と前記記憶手段とはバスに接続され、
前記検出手段は、前記命令実行手段が前記記憶手段から読み出している前記命令の、前記識別子を、前記バスから捕捉することにより検出する、
請求項１から４のいずれか一項に記載の情報処理装置。
【請求項６】
前記検出手段は、前記アクセスに基づき特定される識別子が、コンパイル済みでない前記命令の識別子であるかを判定し、コンパイル済みでない前記命令の識別子と判定された識別子を、前記コンパイル実行手段によりコンパイルされる前記命令の識別子として検出する、
請求項１から４のいずれか一項に記載の情報処理装置。
【請求項７】
前記検出手段は、前記識別子を検出した際に前記命令をも読み出し、
前記コンパイル実行手段は、前記検出手段により読み出された前記命令をコンパイルする、
請求項１から６のいずれか一項に記載の情報処理装置。
【請求項８】
前記命令実行手段と、
前記記憶手段と、
をさらに備える請求項１から７のいずれか一項に記載の情報処理装置。
【請求項９】
ネイティブコードとは異なる命令を記憶手段から読み出して解釈の上実行する、命令実行手段による、前記記憶手段への前記命令を読み出すためのアクセスを検出し、検出したアクセスに基づき、読み出されている前記命令の識別子を検出し、
検出された識別子により特定される前記命令をコンパイルし、コンパイル後のネイティブコードを前記記憶手段に書き込み、
前記命令実行手段は、前記命令を実行する場合において、前記命令がコンパイル済みであれば当該命令のコンパイル後のネイティブコードを前記記憶手段から読み出して実行する、
情報処理方法。
【請求項１０】
コンピュータに、
ネイティブコードとは異なる命令を記憶手段から読み出して解釈の上実行する、命令実行手段による、前記記憶手段への前記命令を読み出すためのアクセスを検出し、検出したアクセスに基づき、読み出されている前記命令の識別子を検出する検出処理と、
検出された識別子により特定される前記命令をコンパイルし、コンパイル後のネイティブコードを前記記憶手段に書き込むコンパイル実行処理と、
を実行させ、
前記命令実行手段は、前記命令を実行する場合において、前記命令がコンパイル済みであれば当該命令のコンパイル後のネイティブコードを前記記憶手段から読み出して実行する、
プログラム。