IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ルネサスエレクトロニクス株式会社の特許一覧

特開2024-72010プログラム、命令実行制御装置、及び命令実行制御方法
<>
  • 特開-プログラム、命令実行制御装置、及び命令実行制御方法 図1
  • 特開-プログラム、命令実行制御装置、及び命令実行制御方法 図2
  • 特開-プログラム、命令実行制御装置、及び命令実行制御方法 図3
  • 特開-プログラム、命令実行制御装置、及び命令実行制御方法 図4
  • 特開-プログラム、命令実行制御装置、及び命令実行制御方法 図5
  • 特開-プログラム、命令実行制御装置、及び命令実行制御方法 図6
  • 特開-プログラム、命令実行制御装置、及び命令実行制御方法 図7
  • 特開-プログラム、命令実行制御装置、及び命令実行制御方法 図8
  • 特開-プログラム、命令実行制御装置、及び命令実行制御方法 図9
  • 特開-プログラム、命令実行制御装置、及び命令実行制御方法 図10
  • 特開-プログラム、命令実行制御装置、及び命令実行制御方法 図11
  • 特開-プログラム、命令実行制御装置、及び命令実行制御方法 図12
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024072010
(43)【公開日】2024-05-27
(54)【発明の名称】プログラム、命令実行制御装置、及び命令実行制御方法
(51)【国際特許分類】
   G06F 9/455 20180101AFI20240520BHJP
   G06F 8/41 20180101ALI20240520BHJP
【FI】
G06F9/455
G06F9/455 100
G06F8/41 170
【審査請求】未請求
【請求項の数】15
【出願形態】OL
(21)【出願番号】P 2022182578
(22)【出願日】2022-11-15
(71)【出願人】
【識別番号】302062931
【氏名又は名称】ルネサスエレクトロニクス株式会社
(74)【代理人】
【識別番号】100103894
【弁理士】
【氏名又は名称】家入 健
(72)【発明者】
【氏名】濱尾 仁志
(72)【発明者】
【氏名】佐藤 光一
【テーマコード(参考)】
5B081
【Fターム(参考)】
5B081CC24
(57)【要約】
【課題】或る命令セットに含まれる命令で記述されているプログラムを、その命令セットとは異なる命令セットに対応するプロセッサに実行させる新たな技術を提供する。
【解決手段】
命令実行制御装置2000は、対応情報60を取得する。対応情報60は、非共通命令と共通命令を対応づける。非共通命令は、第1プロセッサ10では実行できないものの、第2プロセッサ20では実行できる命令である。共通命令は、第1プロセッサ10と第2プロセッサ20の双方で実行できる命令である。命令実行制御装置2000は、第1プロセッサ10において非共通命令が検出されたことに応じて、対応情報60を用いて、その非共通命令に対応する共通命令を特定する。命令実行制御装置2000は、特定した共通命令を第1プロセッサ10に実行させる。
【選択図】図1
【特許請求の範囲】
【請求項1】
第1のプロセッサでは実行できないものの第2のプロセッサでは実行できる命令である非共通命令に対して、前記第1のプロセッサと前記第2のプロセッサの双方で実行できる共通命令が対応づけられている対応情報を取得する取得ステップと、
前記第1のプロセッサにおいて前記非共通命令が検出された場合に、前記対応情報においてその非共通命令に対応づけられている前記共通命令を特定し、前記特定した共通命令を前記第1のプロセッサに実行させる第1制御ステップと、をコンピュータに実行させるプログラム。
【請求項2】
前記第1制御ステップにおいて、前記第1のプロセッサで前記非共通命令が検出されたことに応じて実行される例外ハンドラの中で、前記対応情報においてその非共通命令に対応づけられている前記共通命令を前記第1のプロセッサに実行させる、請求項1に記載のプログラム。
【請求項3】
前記例外ハンドラの中において、その例外ハンドラが実行される原因となった命令の次に実行される次命令が前記非共通命令であるか否かを判定し、前記次命令が前記非共通命令である場合、前記対応情報において前記次命令に対応づけられている前記共通命令を前記第1のプロセッサに実行させる第2制御ステップを、前記コンピュータにさらに実行させる請求項2に記載のプログラム。
【請求項4】
前記非共通命令の出現頻度を算出する頻度算出ステップと、
前記非共通命令の出現頻度が閾値以上である場合に、前記対応情報を用いて、命令列を前記第1のプロセッサに実行させる前に、その命令列を、前記非共通命令が含まれない命令列に変換する変換ステップと、を前記コンピュータにさらに実行させ、
前記第1制御ステップは、前記非共通命令の出現頻度が前記閾値未満である場合に実行される、請求項1に記載のプログラム。
【請求項5】
前記頻度算出ステップにおいて、
所定の時間長の期間に前記非共通命令が検出された回数と、前記所定の時間長とに基づいて、前記非共通命令の出現頻度を算出するか、
前記期間に実行された命令の総数と、前記期間に前記非共通命令が検出された回数とに基づいて、前記非共通命令の出現頻度を算出するか、又は、
前記期間におけるプログラムカウンタの値の増加量と、前記期間に前記非共通命令が検出された回数とに基づいて、前記非共通命令の出現頻度を算出する、請求項4に記載のプログラム。
【請求項6】
第1のプロセッサでは実行できないものの第2のプロセッサでは実行できる命令である非共通命令に対して、前記第1のプロセッサと前記第2のプロセッサの双方で実行できる共通命令が対応づけられている対応情報を取得する取得部と、
前記第1のプロセッサにおいて前記非共通命令が検出された場合に、前記対応情報においてその非共通命令に対応づけられている前記共通命令を特定し、前記特定した共通命令を前記第1のプロセッサに実行させる第1制御部と、を有する命令実行制御装置。
【請求項7】
前記第1制御部は、前記第1のプロセッサにおいて前記非共通命令が検出されたことに応じて実行される例外ハンドラの中において、前記対応情報においてその非共通命令に対応づけられている前記共通命令を前記第1のプロセッサに実行させる、請求項6に記載の命令実行制御装置。
【請求項8】
前記例外ハンドラの中において、その例外ハンドラが実行される原因となった命令の次に実行される次命令が前記非共通命令であるか否かを判定し、前記次命令が前記非共通命令である場合、前記対応情報において前記次命令に対応づけられている前記共通命令を前記第1のプロセッサに実行させる第2制御部を有する、請求項7に記載の命令実行制御装置。
【請求項9】
前記非共通命令の出現頻度を算出する頻度算出部と、
前記非共通命令の出現頻度が閾値以上である場合に、前記対応情報を用いて、プログラムの命令列を前記第1のプロセッサに実行させる前に、その命令列を、前記非共通命令が含まれない命令列に変換する変換部と、を有し、
前記第1制御部は、前記非共通命令の出現頻度が前記閾値未満である場合に動作する、請求項6に記載の命令実行制御装置。
【請求項10】
前記頻度算出部は、
所定の時間長の期間に前記非共通命令が検出された回数と、前記所定の時間長とに基づいて、前記非共通命令の出現頻度を算出するか、
前記期間に実行された命令の総数と、前記期間に前記非共通命令が検出された回数とに基づいて、前記非共通命令の出現頻度を算出するか、又は、
前記期間におけるプログラムカウンタの値の増加量と、前記期間に前記非共通命令が検出された回数とに基づいて、前記非共通命令の出現頻度を算出する、請求項9に記載の命令実行制御装置。
【請求項11】
第1のプロセッサでは実行できないものの第2のプロセッサでは実行できる命令である非共通命令に対して、前記第1のプロセッサと前記第2のプロセッサの双方で実行できる共通命令が対応づけられている対応情報を取得する取得ステップと、
前記第1のプロセッサにおいて前記非共通命令が検出された場合に、前記対応情報においてその非共通命令に対応づけられている前記共通命令を特定し、前記特定した共通命令を前記第1のプロセッサに実行させる第1制御ステップと、を有する、コンピュータによって実行される命令実行制御方法。
【請求項12】
前記第1制御ステップにおいて、前記第1のプロセッサで前記非共通命令が検出されたことに応じて実行される例外ハンドラの中において、前記対応情報においてその非共通命令に対応づけられている前記共通命令を前記第1のプロセッサに実行させる、請求項11に記載の命令実行制御方法。
【請求項13】
前記例外ハンドラの中において、その例外ハンドラが実行される原因となった命令の次に実行される次命令が前記非共通命令であるか否かを判定し、前記次命令が前記非共通命令である場合、前記対応情報において前記次命令に対応づけられている前記共通命令を前記第1のプロセッサに実行させる第2制御ステップを有する、請求項12に記載の命令実行制御方法。
【請求項14】
前記非共通命令の出現頻度を算出する頻度算出ステップと、
前記非共通命令の出現頻度が閾値以上である場合に、前記対応情報を用いて、プログラムの命令列を前記第1のプロセッサに実行させる前に、その命令列を、前記非共通命令が含まれない命令列に変換する変換ステップと、を有し、
前記第1制御ステップは、前記非共通命令の出現頻度が前記閾値未満である場合に実行される、請求項11に記載の命令実行制御方法。
【請求項15】
前記頻度算出ステップにおいて、
所定の時間長の期間に前記非共通命令が検出された回数と、前記所定の時間長とに基づいて、前記非共通命令の出現頻度を算出するか、
前記期間に実行された命令の総数と、前記期間に前記非共通命令が検出された回数とに基づいて、前記非共通命令の出現頻度を算出するか、又は、
前記期間におけるプログラムカウンタの値の増加量と、前記期間に前記非共通命令が検出された回数とに基づいて、前記非共通命令の出現頻度を算出する、請求項14に記載の命令実行制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、プロセッサによる命令の実行を制御する技術に関する。
【背景技術】
【0002】
或る命令セットに含まれる命令で記述されているプログラムを、その命令セットとは異なる命令セットに対応するプロセッサに実行させる技術が開発されている。ここで、命令セットとは、特定の種類のプロセッサによって実行可能な命令の集合である。例えば特許文献1は、高精度モードと高速度モードという2つのモードを持つプロセッサシミュレータを開示する。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】米国特許出願公開第2021/0357549号明細書
【発明の概要】
【発明が解決しようとする課題】
【0004】
特許文献1は、シミュレーション対象のプログラムに含まれる各命令を、ホストプロセッサで実行可能な命令に置換する具体的な方法について、言及していない。
【0005】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【0006】
一実施形態に係るプログラムは、第1のプロセッサでは実行できないものの第2のプロセッサでは実行できる命令である非共通命令と、第1のプロセッサと第2のプロセッサの双方で実行できる命令である共通命令とを対応づける対応情報を取得する。そして、当該プログラムは、非共通命令が第1のプロセッサにおいて検出されたことに応じて、その非共通命令に対応する共通命令を、第1のプロセッサに実行させる。
【発明の効果】
【0007】
本開示によれば、或る命令セットに含まれる命令で記述されているプログラムを、その命令セットとは異なる命令セットに対応するプロセッサに実行させる新たな技術が提供される。
【図面の簡単な説明】
【0008】
図1図1は、実施形態1の命令実行制御装置の概要を例示する図である。
図2図2は、第1プロセッサと第2プロセッサの関係を例示する図である。
図3図3は、実施形態1の命令実行制御装置の機能構成を例示するブロック図である。
図4図4は、命令実行制御装置を実現するコンピュータのハードウエア構成を例示するブロック図である。
図5図5は、実施形態1の命令実行制御装置2000によって実行される処理の流れを例示するフローチャートである。
図6図6は、命令実行制御装置の具体的な実現形態を例示する第1の図である。
図7図7は、命令実行制御装置の具体的な実現形態を例示する第2の図である。
図8図8は、実施形態2の命令実行制御装置の機能構成を例示するブロック図である。
図9図9は、実施形態2の命令実行制御装置によって実行される処理の流れを例示するフローチャートである。
図10図10は、実施形態3の命令実行制御装置の機能構成を例示するブロック図である。
図11図11は、第1処理と第2処理のいずれかを選択する処理の流れを例示するフローチャートである。
図12図12は、変換部によって実行される処理の流れを例示するフローチャートである。
【発明を実施するための形態】
【0009】
以下では、本開示の実施形態について、図面を参照しながら詳細に説明する。各図面において、同一又は対応する要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略される。また、特に説明しない限り、所定値や閾値などといった予め定められている値は、その値を利用する装置からアクセス可能な記憶装置などに予め格納されている。さらに、特に説明しない限り、記憶部は、1つ以上の任意の数の記憶装置によって構成される。
【0010】
[実施形態1]
<概要>
以下、図1及び図2を用いて、実施形態1の命令実行制御装置2000の概要を説明する。図1は、実施形態1の命令実行制御装置2000の概要を例示する図である。図2は、後述する第1プロセッサと第2プロセッサの関係を例示する図である。ここで、図1は、命令実行制御装置2000の概要の理解を容易にするための図であり、命令実行制御装置2000の動作は、図1に示したものに限定されない。
【0011】
命令実行制御装置2000は、第1プロセッサ10による対象プログラム50の実行を制御する。対象プログラム50は、第2命令セット40に含まれる命令で構成される。第2命令セット40は、第1プロセッサ10とは異なる第2プロセッサ20によって実行可能な命令の集合である。なお、第1プロセッサ10によって実行可能な命令の集合を第1命令セット30と呼ぶ。
【0012】
第2命令セット40は、第1命令セット30にも含まれる命令である共通命令と、第1命令セット30には含まれない命令である非共通命令の双方を含む。非共通命令は、第2プロセッサ20において実行できるものの、第1プロセッサ10においては実行できない命令である。一方、共通命令は、第1プロセッサ10と第2プロセッサ20の双方で実行できる命令である。
【0013】
図2において、第1命令セット30には共通命令のみが含まれる一方、第2命令セット40には共通命令と非共通命令の双方が含まれる。このような命令セットで構成される第2プロセッサ20は、例えば、第1プロセッサ10に基づいて新たに開発されたプロセッサである。なお、第1命令セット30は、第1プロセッサ10において実行できるものの、第2プロセッサ20においては実行できない命令を含んでもよい。
【0014】
対象プログラム50は、第2命令セット40に含まれる命令で構成されるため、第1プロセッサ10では実行できない非共通命令を含みうる。そのため、対象プログラム50の全てをそのまま第1プロセッサ10に実行させることはできない。
【0015】
命令実行制御装置2000は、対象プログラム50の中に非共通命令が含まれる場合であっても、第1プロセッサ10を利用して対象プログラム50を実行できるようにする。以下、本開示における前提についてさらに説明した後に、命令実行制御装置2000の動作の概要を説明する。
【0016】
共通命令は、第1命令セット30と第2命令セット40とで互いに同一の識別子(命令コード)が割り当てられている命令である。また、或る共通命令を第1プロセッサ10で実行することによって得られる効果と、その共通命令を第2プロセッサ20で実行することで得られる効果とは、互いに同等である。
【0017】
例えば、第1命令セット30と第2命令セット40の双方に、識別子が x1 である命令 x1 が含まれているとする。この場合、命令 x1 は、第1プロセッサ10と第2プロセッサ20の双方で実行可能な共通命令である。そして、命令 x1 を第1プロセッサ10に実行させることによって得られる効果と、命令 x1 を第2プロセッサ20に実行させることで得られる効果とは、互いに同等である。
【0018】
一方で、非共通命令の識別子と同じ識別子を持つ命令は、第1命令セット30に含まれない。例えば第2命令セット40が非共通命令 y1 を含むとする。この場合、識別子が y1 である命令は、第1命令セット30には含まれない。そのため、識別子が y1 である命令は、第2プロセッサ20では実行できるものの、第1プロセッサ10では実行できない。
【0019】
例えば図2において、第1命令セット30と第2命令セット40は共に、識別子がそれぞれ x1 から xn であるn個の共通命令を含む。さらに、第2命令セット40は、識別子がそれぞれ y1 から ym であるm個の非共通命令を含む。
【0020】
非共通命令は、1つ以上の共通命令から成る命令列で置き換え可能である。ここで、「或る命令 a が、命令列 {b1,...,bn} に置き換え可能である」とは、命令 a を実行することによって得られる効果と同等の効果が、命令 b1,...,bn をこの順に実行することによって得られることを意味する。
【0021】
非共通命令と共通命令との間の対応関係は、図1に例示されている対応情報60によって示されている。対応情報60は、非共通命令と、その非共通命令に対応する共通命令の命令列とを対応づける情報である。ここで、「非共通命令に対応する共通命令の命令列」とは、その非共通命令と置き換え可能な、共通命令の命令列である。
【0022】
対応情報60の各行は、非共通命令62に1つの非共通命令を示し、共通命令64にその非共通命令と置換可能な共通命令の命令列を示す。例えば図1において、対応情報60の1行目は、非共通命令 y1 が、共通命令の命令列 {x3,x5} と置き換え可能であることを表す。そのため、命令 y1 を第2プロセッサ20に実行させることで得られる効果と同等の効果が、命令 x3 と x5 をこの順で第1プロセッサ10に実行させることでも得られる。
【0023】
なお、対応情報60は、必要に応じて、各命令で扱われるオペランドに関する情報も含む。例えば前述したように、非共通命令 y1 が、共通命令の命令列 {x3,x5} で置き換え可能であるとする。非共通命令 y1 が1つ以上のオペランドを取る場合、対応情報60は、非共通命令 y1 のオペランドと、共通命令 x3 や x5 のオペランドとの対応関係を示す。また、共通命令 x5 は、その前に共通命令 x3 が実行されることでレジスタやメモリに格納されたデータを利用しうる。そこで、共通命令64は、1つの命令列に含まれる複数の共通命令について、それらの実行結果やオペランドの関係も示す。
【0024】
以上の前提の下で、命令実行制御装置2000は、第1プロセッサ10による対象プログラム50の実行を制御する。前述したように、対象プログラム50は第2命令セット40に含まれる命令で構成されるため、対象プログラム50には非共通命令が含まれうる。そこで命令実行制御装置2000は、第1プロセッサ10において非共通命令が検出されたことに応じて、対応情報60を用いて、その非共通命令に対応する共通命令を特定する。そして命令実行制御装置2000は、特定した共通命令を第1プロセッサ10に実行させる。こうすることで、非共通命令を実行することで得られる効果と同等の効果を、その非共通命令に対応する共通命令の実行によって得ることができる。
【0025】
なお、共通命令は、第2プロセッサ20でも実行可能である。そのため、第2プロセッサ20による共通命令の実行は、命令実行制御装置2000による制御を介さずに可能である。
【0026】
<作用効果の例>
特定のプロセッサを利用して、そのプロセッサでは実行できない命令が含まれるプログラムを実行する方法として、バイナリトランスレーションを利用する方法がある。バイナリトランスレーションでは、対象のプログラムに含まれる命令列が、その命令列をプロセッサに実行させる前に、プロセッサで実行可能な命令列に置換される。この方法では、命令列に含まれる全ての命令それぞれについて置換の要否を判定する必要がある。そのため、置換の要否の判定によるオーバーヘッドが大きくなりうる。
【0027】
これに対し、本実施形態の命令実行制御装置2000では、第1プロセッサ10において非共通命令が検出されたことに応じて、非共通命令に対応する共通命令を第1プロセッサ10に実行させる。この方法によれば、対象プログラム50に含まれる各共通命令については、命令の置換の要否を判定する必要がない。そのため、対象プログラム50を第1プロセッサ10に実行させる際に発生するオーバーヘッドを小さくすることができる。
【0028】
以下、本実施形態の命令実行制御装置2000について、より詳細に説明する。
【0029】
<機能構成の例>
図3は、実施形態1の命令実行制御装置2000の機能構成を例示するブロック図である。命令実行制御装置2000は、取得部2020及び第1制御部2040を有する。取得部2020は対応情報60を取得する。第1制御部2040は、対応情報60を用いて、第1プロセッサ10において検出された非共通命令に対応する共通命令を特定する。第1制御部2040は、特定した共通命令を第1プロセッサ10に実行させる。
【0030】
<ハードウエア構成の例>
命令実行制御装置2000の各機能構成部は、各機能構成部を実現するハードウエア(例:ハードワイヤードされた電子回路など)で実現されてもよいし、ハードウエアとソフトウエアとの組み合わせ(例:電子回路とそれを制御するプログラムの組み合わせなど)で実現されてもよい。以下、命令実行制御装置2000の各機能構成部がハードウエアとソフトウエアとの組み合わせで実現される場合について、さらに説明する。
【0031】
図4は、命令実行制御装置2000を実現するコンピュータ1000のハードウエア構成を例示するブロック図である。コンピュータ1000は、任意のコンピュータである。例えばコンピュータ1000は、PC(Personal Computer)やサーバマシンなどといった、据え置き型のコンピュータである。その他にも例えば、コンピュータ1000は、スマートフォンやタブレット端末などといった可搬型のコンピュータである。その他にも例えば、コンピュータ1000は、SoC(System on Chip)などの集積回路である。コンピュータ1000は、命令実行制御装置2000を実現するために設計された専用のコンピュータであってもよいし、汎用のコンピュータであってもよい。
【0032】
例えば、コンピュータ1000に対して所定のアプリケーションをインストールすることにより、コンピュータ1000で、命令実行制御装置2000の各機能が実現される。上記アプリケーションは、命令実行制御装置2000の各機能構成部を実現するためのプログラムで構成される。なお、上記プログラムの取得方法は任意である。例えば、当該プログラムが格納されている記憶媒体(DVD(Digital Versatile Disc)や USB メモリなど)から、当該プログラムを取得することができる。その他にも例えば、当該プログラムが格納されている記憶装置を管理しているサーバ装置から、当該プログラムをダウンロードすることにより、当該プログラムを取得することができる。
【0033】
コンピュータ1000は、バス1020、プロセッサ1040、メモリ1060、ストレージデバイス1080、入出力インタフェース1100、及びネットワークインタフェース1120を有する。バス1020は、プロセッサ1040、メモリ1060、ストレージデバイス1080、入出力インタフェース1100、及びネットワークインタフェース1120が、相互にデータを送受信するためのデータ伝送路である。ただし、プロセッサ1040などを互いに接続する方法は、バス接続に限定されない。
【0034】
プロセッサ1040は、CPU(Central Processing Unit)、GPU(Graphics Processing Unit)、FPGA(Field-Programmable Gate Array)、DSP(Digital Signal Processor)などの種々のプロセッサである。ここで、プロセッサ1040は、前述した第1プロセッサ10である。なお、コンピュータ1000にプロセッサ1040が複数含まれる場合、それらの全てがいずれも第1プロセッサ10であってもよいし、それらの一部(例えば1つ)が第1プロセッサ10であってもよい。
【0035】
メモリ1060は、RAM(Random Access Memory)などを用いて実現される主記憶装置である。ストレージデバイス1080は、ハードディスク、SSD(Solid State Drive)、メモリカード、RAM、フラッシュメモリ、又は ROM(Read Only Memory)などを用いて実現される補助記憶装置である。
【0036】
入出力インタフェース1100は、コンピュータ1000と入出力デバイスとを接続するためのインタフェースである。例えば入出力インタフェース1100には、キーボードなどの入力装置や、ディスプレイ装置などの出力装置が接続される。
【0037】
ネットワークインタフェース1120は、コンピュータ1000をネットワークに接続するためのインタフェースである。このネットワークは、LAN(Local Area Network)であってもよいし、WAN(Wide Area Network)であってもよい。
【0038】
ストレージデバイス1080は、命令実行制御装置2000の各機能構成部を実現するプログラム(前述したアプリケーションを実現するプログラム)を記憶している。プロセッサ1040は、このプログラムをメモリ1060に読み出して実行することで、命令実行制御装置2000の各機能構成部を実現する。
【0039】
命令実行制御装置2000は、1つのコンピュータ1000で実現されてもよいし、複数のコンピュータ1000で実現されてもよい。後者の場合において、各コンピュータ1000の構成は同一である必要はなく、それぞれ異なるものとすることができる。
【0040】
<処理の流れ>
図5は、実施形態1の命令実行制御装置2000によって実行される処理の流れを例示するフローチャートである。取得部2020は、対応情報60を取得する(S102)。第1制御部2040は、対応情報60を用いて、第1プロセッサ10において検出された非共通命令に対応する共通命令を特定する(S104)。第1制御部2040は、特定した共通命令を第1プロセッサ10に実行させる(S106)。
【0041】
命令実行制御装置2000によって実行される処理の流れは、図5に示されている流れに限定されない。例えば後述するように、対応情報60の内容の全てが、命令実行制御装置2000の起動時などに取得されてもよい。この場合、命令実行制御装置2000は、第1プロセッサ10において非共通命令が検出される度に対応情報60を取得する必要はない。
【0042】
<対応情報60の取得:S102>
第1制御部2040は、対応情報60を取得する(S102)。ここで、対応情報60の取得は、第1プロセッサ10において非共通命令が検出される前に予め行われてもよいし、第1プロセッサ10において非共通命令が検出されたことに応じて行われてもよい。前者の場合、例えば命令実行制御装置2000は、命令実行制御装置2000の起動時や、対象プログラム50の実行が開始された時点などにおいて、対応情報60を取得する。この場合、対応情報60の内容を全て取得しておくことが好適である。
【0043】
一方、第1プロセッサ10において非共通命令が検出されたことに応じて対応情報60が取得される場合、例えば命令実行制御装置2000は、対応情報60に含まれる情報のうち、検出された非共通命令に対応する共通命令を表す情報のみを取得する。その他にも例えば、命令実行制御装置2000は、命令実行制御装置2000の起動後、第1プロセッサ10において非共通命令の検出が最初に行われた時に、対応情報60の内容を全て取得するようにしてもよい。
【0044】
命令実行制御装置2000が対応情報60を取得する方法は任意である。例えば対応情報60は、命令実行制御装置2000からアクセス可能な記憶部に予め格納されている。この場合、命令実行制御装置2000は、この記憶部から対応情報60を読み出すことにより、対応情報60を取得する。その他にも例えば、命令実行制御装置2000は、他の装置から送信された対応情報60を受信することにより、対応情報60を取得してもよい。当該他の装置は、例えば、命令実行制御装置2000のユーザによって操作される任意の端末である。
【0045】
<非共通命令に対応する共通命令の特定:S104>
第1制御部2040は、対応情報60を用いて、第1プロセッサ10において検出された非共通命令に対応する共通命令を特定する(S104)。例えば第1制御部2040は、対応情報60の中から、第1プロセッサ10において検出された非共通命令の識別情報が非共通命令62に示されるレコードを特定する。そして、第1制御部2040は、特定したレコードの共通命令64に示されている共通命令を、第1プロセッサ10において検出された非共通命令に対応する共通命令として特定する。
【0046】
上述した処理の前提として、第1制御部2040は、第1プロセッサ10において非共通命令が検出されたことを把握する。ここで、非共通命令は第1プロセッサ10では実行できない命令であるため、第1プロセッサ10が非共通命令を実行しようとすると、不正な命令として検出される。より具体的な例としては、第1プロセッサ10の命令デコーダが非共通命令をデコードしようとすると、不正な命令が実行されようとしたことを表す(該当する命令が存在しないことを表す)例外が発生する。なお、例外は「割り込み」とも表現できる。
【0047】
そこで例えば、第1プロセッサ10において不正な命令が実行されようとした場合に発生する例外に対応する例外ハンドラの一部として、第1制御部2040が実現される。言い換えれば、第1制御部2040によって行われる処理は、当該例外ハンドラの処理として実現される。これにより、第1制御部2040は、第1プロセッサ10において非共通命令が検出されたことに応じて動作することができる。以下、第1プロセッサ10において不正な命令が実行されようとした場合に発生する例外を「不正命令例外」と呼び、不正命令例外に対応する例外ハンドラのことを「不正命令ハンドラ」と呼ぶ。
【0048】
第1制御部2040は、不正命令例外の発生原因となった命令(以下、対象命令)が非共通命令であるか否かを判定する。そのために不正命令ハンドラは、不正命令例外の発生原因となった命令の識別情報(すなわち、対象命令の識別情報)を取得する。さらに第1制御部2040は、対象命令の識別情報と一致する識別情報を持つ非共通命令が存在するか否かを判定する。各非共通命令の識別情報は、例えば、対応情報60から取得することができる。ただし、対応情報60とは別に、各非共通命令の識別情報を示す情報が用意されてもよい。
【0049】
対象命令の識別情報と一致する識別情報を持つ非共通命令が存在する場合、対象命令は非共通命令である。そこで第1制御部2040は、対象命令(すなわち、非共通命令)に対応する共通命令を特定する。
【0050】
一方、対象命令の識別情報と一致する識別情報を持つ非共通命令が存在しない場合、対象命令は、非共通命令以外の不正な命令である。このように対象命令が非共通命令以外の不正な命令である場合において、第1制御部2040が実行する処理は任意である。例えば第1制御部2040は、対象プログラム50を強制終了する処理を行う。この際、不正な命令が実行されたことを表すエラー通知が任意の方法で出力されてもよい。
【0051】
<非共通命令に対応する共通命令の実行:S106>
第1制御部2040は、対象命令に対応する共通命令を第1プロセッサ10に実行させる(S104)。なお、プロセッサに対して特定の命令を実行させる手法には、既存の種々の手法を利用することができる。
【0052】
ここで、不正命令例外の発生によって中断されている対象プログラム50の実行コンテキストにおいて、現在の命令は、非共通命令として検出された対象命令である。そこで第1制御部2040は、対象プログラム50の実行が再開される前に、再開された対象プログラム50において最初に実行される命令を、現在設定されている対象命令から、その1つ先の命令(以下、次命令)に変更する処理を行う。このようにすることで、第1制御部2040は、非共通命令に対応する共通命令を第1プロセッサ10に実行させた上で、当該非共通命令そのものは第1プロセッサ10によって実行されないようにする。よって、第1プロセッサ10において実行できない当該非共通命令の代わりに、その非共通命令に対応する共通命令が第1プロセッサ10において実行される。
【0053】
ここで、再開された対象プログラム50において最初に実行される命令を変更する方法には、種々の方法を採用することができる。例えば第1制御部2040は、対象プログラム50の実行コンテキストの中身を変更する。ここで、不正命令ハンドラが呼び出される際に、対象プログラム50の実行コンテキストは、メモリ上に待避される。この実行コンテキストに含まれるプログラムカウンタの値は、不正命令例外の発生原因となった非共通命令を指している。そこで第1制御部2040は、メモリ上に待避されている対象プログラム50の実行コンテキストについて、その中に含まれるプログラムカウンタの値を、次命令を指す値に変更する。これにより、再開された対象プログラム50において最初に実行される命令を変更することができる。
【0054】
なお前述したように、第1制御部2040は、不正命令ハンドラの一部として実現される。そして、対象プログラム50の実行は、不正命令ハンドラの実行が終了した後に再開される。そのため第1制御部2040は、対象プログラム50の実行が再開される前に、再開された対象プログラム50において最初に実行される命令を変更することができる。
【0055】
<命令実行制御装置2000の実現形態の例>
命令実行制御装置2000に関する理解をより容易にするために、命令実行制御装置2000のより具体的な実現形態の例をいくつか例示する。以下の実現形態は、命令実行制御装置2000の理解を容易にするための例示にすぎず、命令実行制御装置2000の実現形態は以下で示す例に限定されない。
【0056】
図6は、命令実行制御装置2000の具体的な実現形態を例示する第1の図である。図6の命令実行制御装置2000では、第1プロセッサ10が含まれるハードウエア70の上で、OS(Operating system)80が動作する。ハードウエア70は、図4で例示したコンピュータ1000を構成するハードウエアに相当する。
【0057】
OS80は、不正命令ハンドラ90を含む。第1制御部2040は、不正命令ハンドラ90の一部として実現される。取得部2020は、不正命令ハンドラ90の一部として実現されてもよいし、OS80の他の部分として実現されてもよい。後者の場合、例えば取得部2020は、OS80の起動時に実行される処理の一部として実現される。
【0058】
OS80の上では、ユーザアプリケーション100が動作する。図6の例において、ユーザアプリケーション100は対象プログラム50に相当する。なお、複数のユーザアプリケーション100が動作している場合、各ユーザアプリケーション100が対象プログラム50として扱われる。ただし命令実行制御装置2000は、ユーザアプリケーション100を対象プログラム50として扱うべきか否か(言い換えれば、対象プログラム50を命令実行制御装置2000による制御の対象とすべきか否か)の選択を、ユーザアプリケーション100の起動時等に受け付けてもよい。
【0059】
対象プログラム50の実行が開始されると、対象プログラム50を構成する各命令が第1プロセッサ10によって実行される。ここで、非共通命令が実行されると、不正命令例外が発生するため、対象プログラム50の実行コンテキストがメモリ上に待避された上で、不正命令ハンドラ90が呼び出させる。
【0060】
不正命令ハンドラ90は、非共通命令に対応する共通命令を特定し、特定した共通命令を第1プロセッサ10に実行させる。不正命令ハンドラ90の実行が終了すると、対象プログラム50の実行が再開される。
【0061】
図7は、命令実行制御装置2000の具体的な実現形態を例示する第2の図である。図7の命令実行制御装置2000では、第1プロセッサ10が含まれるハードウエア70の上で、ハイパーバイザ110が動作している。ハイパーバイザ110は、不正命令ハンドラ120を含む。第1制御部2040は、不正命令ハンドラ120の一部として実現される。取得部2020は、不正命令ハンドラ120の一部として実現されてもよいし、ハイパーバイザ110の他の部分として実現されてもよい。
【0062】
ハイパーバイザ110の上では、仮想マシン130が動作する。図7の例において、仮想マシン130は対象プログラム50に相当する。そのため、仮想マシン130上で動作するゲスト OS や、当該ゲスト OS 上で動作するユーザアプリケーションが、まとめて1つの対象プログラム50として扱われる。複数の仮想マシン130が動作している場合、各仮想マシン130が対象プログラム50として扱われうる。
【0063】
対象プログラム50の実行が開始されると、対象プログラム50を構成する各命令が第1プロセッサ10によって実行される。ここで、非共通命令が実行されると、不正命令例外が発生するため、対象プログラム50の実行コンテキストがメモリ上に待避された上で、不正命令ハンドラ120が呼び出される。
【0064】
不正命令ハンドラ120は、非共通命令に対応する共通命令を特定し、特定した共通命令を第1プロセッサ10に実行させる。不正命令ハンドラ120の実行が終了すると、対象プログラム50の実行が再開される。
【0065】
[実施形態2]
対象プログラム50において、非共通命令が連続していることがありうる。例えば対象プログラム50において、非共通命令 y1 の次に、非共通命令 y2 が実行されるとする。この場合、第1プロセッサ10において非共通命令 y1 が検出されたことに応じて不正命令ハンドラが呼び出される。不正命令ハンドラは、非共通命令 y1 に対応する共通命令を第1プロセッサ10に実行させる。その後、不正命令ハンドラによる処理を終了して対象プログラム50の実行が再開されるとする。すると、次に実行される命令が非共通命令 y2 であるため、第1プロセッサ10において再度非共通命令が検出される。その結果、不正命令ハンドラが再度呼び出される。
【0066】
ここで、例外ハンドラの呼び出しは、コンテキストスイッチなどによるオーバーヘッドの発生を伴う。そのため、例外ハンドラの出現頻度を少なくすることにより、オーバーヘッドを減らすことができる。
【0067】
そこで、実施形態2の命令実行制御装置は、非共通命令に対応する共通命令を第1プロセッサ10に実行させるだけでなく、対象プログラム50においてその非共通命令の次に含まれる次命令についても、共通命令への置き換えを試みる。具体的には、命令実行制御装置は、次命令が非共通命令であるか否かを判定する。そして、次命令が非共通命令である場合、命令実行制御装置は、次命令に対応する共通命令を特定し、特定した共通命令を第1プロセッサ10に実行させる。
【0068】
例えば前述したように、対象プログラム50において、非共通命令 y1 の次に、非共通命令 y2 が実行されるとする。この場合、第1プロセッサ10において非共通命令 y1 が検出されたことに応じて呼び出される不正命令ハンドラにおいて、1)非共通命令 y1 に対応する共通命令を第1プロセッサ10に実行させる処理に加え、2)次命令である y2 に対応する共通命令を第1プロセッサ10に実行させる処理が行われる。
【0069】
より具体的には、不正命令ハンドラは、次命令である命令 y2 が非共通命令であるか否かを判定する。命令 y2 は非共通命令であるため、不正命令ハンドラは、命令 y2 に対応する共通命令を特定し、特定した共通命令を第1プロセッサ10に実行させる。その後、再開された対象プログラム50において実行される命令が、命令 y2 の次の命令に設定された後、不正命令ハンドラの処理が終了する。
【0070】
ここで、対象プログラム50において、非共通命令が3つ以上連続することも考えられる。そこで命令実行制御装置は、第1プロセッサ10において検出された非共通命令の次の命令だけでなく、2つ先や3つ先の命令についても、同様の処理を行ってもよい。例えば、第1プロセッサ10において非共通命令が検出されたことに応じて呼び出される不正命令ハンドラが、当該非共通命令に続く対象プログラム50の各命令について順に、その命令が非共通命令である間、対応する共通命令を第1プロセッサ10に実行させる処理を行う。
【0071】
例えば対象プログラム50が、非共通命令 y1、非共通命令 y2、非共通命令 y3、及び共通命令 x1 をこの順に含むとする。この場合、第1プロセッサ10において非共通命令 y1 が検出されたことに応じて不正命令ハンドラが呼び出される。不正命令ハンドラは、非共通命令 y1 に対応する共通命令、非共通命令 y2 に対応する共通命令、及び非共通命令 y3 に対応する共通命令を、第1プロセッサ10に実行させる。非共通命令 y3 の次の命令は共通命令 x1 であるため、不正命令ハンドラは、再開される対象プログラム50において最初に実行される命令を x1 に設定する。その結果、不正命令ハンドラの終了後に、命令 x1 から、対象プログラム50の実行が再開される。
【0072】
<作用効果の例>
本実施形態の命令実行制御装置によれば、不正命令ハンドラの一回の呼び出しにおいて、複数の非共通命令それぞれについて、その非共通命令に対応する共通命令を実行することができる。そのため、不正命令ハンドラの一回の呼び出しにおいて、共通命令に置き換えられる非共通命令が一つだけであるケースと比較し、非共通命令を共通命令に置き換える処理を、より小さいオーバーヘッドで行うことができる。
【0073】
以下、本実施形態の命令実行制御装置について、より詳細に説明する。
【0074】
<機能構成の例>
図8は、実施形態2の命令実行制御装置3000の機能構成を例示するブロック図である。実施形態2の命令実行制御装置3000は、取得部3020、第1制御部3040、及び第2制御部3060を有する。取得部3020及び第1制御部3040の機能はそれぞれ、実施形態1の命令実行制御装置2000が有する取得部2020及び第1制御部2040の機能と同じである。第2制御部3060は、第1プロセッサ10において非共通命令が検出された場合に、対象プログラム50においてその非共通命令の次に含まれる次命令が、非共通命令であるか否かを判定する。次命令が非共通命令である場合、第2制御部3060は、対応情報60を用いて、次命令に対応する共通命令を特定する。そして、第2制御部3060は、特定した共通命令を第1プロセッサ10に実行させる。
【0075】
<ハードウエア構成の例>
実施形態2の命令実行制御装置3000は、実施形態1の命令実行制御装置2000と同様に、例えば図4で例示されるコンピュータ1000によって実現される。ただし、実施形態2のストレージデバイス1080には、実施形態2の命令実行制御装置3000の各機能構成部を実現するプログラムが格納されている。
【0076】
<処理の流れ>
図9は、実施形態2の命令実行制御装置3000によって実行される処理の流れを例示するフローチャートである。取得部3020は、対応情報60を取得する(S202)。第1制御部3040は、対応情報60を用いて、第1プロセッサ10において検出された非共通命令に対応する共通命令を特定する(S204)。第1制御部3040は、特定した共通命令を第1プロセッサ10に実行させる(S206)。
【0077】
第2制御部3060は、次命令が非共通命令であるか否かを判定する(S208)。次命令が非共通命令でない場合(S208:NO)、図9の処理は終了する。
【0078】
一方、次命令が非共通命令である場合(S208:YES)、第2制御部3060は、次命令に対応する共通命令を特定する(S210)。第2制御部3060は、特定した共通命令を第1プロセッサ10に実行させる(S212)。
【0079】
[実施形態3]
<概要>
実施形態3の命令実行制御装置は、第1プロセッサ10による対象プログラム50の実行を制御する処理として、第1処理と第2処理のいずれか一方を選択する。第1処理は、実施形態1で説明した処理である。すなわち、第1処理は、第1プロセッサ10による非共通命令の検出に応じて、その非共通命令に対応する共通命令を第1プロセッサ10に実行させる処理である。また、第1処理には、実施形態2で説明したように、次命令が非共通命令である場合に、次命令に対応する共通命令を第1プロセッサ10に実行させる処理が含まれてもよい。
【0080】
一方、第2処理は、対象プログラム50に対してダイナミックバイナリトランスレーション(DBT: Dynamic Binary Translation)を行う処理である。具体的には、第2処理は、対象プログラム50に含まれる命令列(例えば基本ブロック)について、その命令列に含まれる各命令列が非共通命令であるか否かを判定し、対応情報60を用いて非共通命令を共通命令に置換する。これにより、共通命令のみで構成される命令列が得られる。そして第2処理は、置換後の命令列を記憶部に格納する。より具体的には、第2処理は、メモリに格納されていた元の命令列を、置換後の命令列に置き換える。これにより、共通命令のみで構成される置換後の命令列が、第1プロセッサ10によって実行される。
【0081】
このように第1処理と第2処理とでは、非共通命令を共通命令に置換するタイミングが異なる。第1処理では、非共通命令が含まれうる対象プログラム50をそのまま第1プロセッサ10に実行させた後、第1プロセッサ10によって非共通命令が検出されたタイミングで、非共通命令から共通命令への置換が行われる。一方で、第2処理では、対象プログラム50に含まれる命令列を第1プロセッサ10に実行させる前に、その命令列に含まれる非共通命令が共通命令に置換される。
【0082】
命令実行制御装置は、第1処理と第2処理のどちらを実行するのかを、対象プログラム50における非共通命令の出現頻度に基づいて決定する。非共通命令の出現頻度が閾値未満である場合、命令実行制御装置は、第1処理により、第1プロセッサ10による対象プログラム50の実行を制御する。一方、非共通命令の出現頻度が閾値以上である場合、命令実行制御装置は、第2処理により、第1プロセッサ10による対象プログラム50の実行を制御する。
【0083】
以下、第1処理によって第1プロセッサ10の実行を制御する状態にある命令実行制御装置を、「第1モードの命令実行制御装置」と呼ぶ。一方、第2処理によって第1プロセッサ10の実行を制御する状態にある命令実行制御装置を、「第2モードの命令実行制御装置」と呼ぶ。これらの用語を用いると、「非共通命令の出現頻度が閾値未満である場合、命令実行制御装置は第1モードで動作する」と表現できる。また、「非共通命令の出現頻度が閾値以上である場合、命令実行制御装置は第2モードで動作する」と表現できる。
【0084】
<作用効果の例>
命令実行制御装置が第1モードで動作している場合、非共通命令から共通命令への置換は、第1プロセッサ10において非共通命令が検出されたことに応じて行われる。そのため、第1プロセッサ10は、対象プログラム50に元から含まれる共通命令を、命令実行制御装置による制御を介することなく実行することができる。一方で、非共通命令から共通命令への置換が例外処理の中で行われるため、当該置換の際に、例外処理に伴うオーバーヘッドが発生する。
【0085】
これに対し、第2モードの命令実行制御装置は、対象プログラム50の命令列を、共通命令のみで構成される命令列に変換した後に、当該命令列を第1プロセッサ10に実行させる。このことから、非共通命令が第1プロセッサ10によって検出されることはないため、当該検出に伴うオーバーヘッドは発生しない。一方で、命令実行制御装置が第2モードで動作している場合、対象プログラム50に含まれる共通命令についても、非共通命令であるか否かの判定が行われる。そのため、当該判定処理に伴うオーバーヘッドが発生する。
【0086】
以上のことから、対象プログラム50の実行において、非共通命令の出現頻度が比較的高い場合、第2モードの命令実行制御装置を利用して対象プログラム50を実行する方が、第1モードの命令実行制御装置を利用して対象プログラム50を実行する場合よりも、オーバーヘッドを小さくすることができる。一方、対象プログラム50の実行において、非共通命令の出現頻度が比較的低い場合、第1モードの命令実行制御装置を利用して対象プログラム50を実行する方が、第2モードの命令実行制御装置を利用して対象プログラム50を実行する場合よりも、オーバーヘッドを小さくすることができる。
【0087】
そこで実施形態3の命令実行制御装置は、非共通命令が閾値未満である場合には、自身を第1モードで動作させる。一方、非共通命令の出現頻度が閾値以上である場合、実施形態3の命令実行制御装置は、自身を第2モードで動作させる。これにより、非共通命令の出現頻度に応じて、よりオーバーヘッドが小さい方法で、第1プロセッサ10による対象プログラム50の実行を制御することができる。
【0088】
以下、本実施形態の命令実行制御装置について、より詳細に説明する。
【0089】
<機能構成の例>
図10は、実施形態3の命令実行制御装置4000の機能構成を例示するブロック図である。実施形態3の命令実行制御装置4000は、取得部4020、第1制御部4040、頻度算出部4080、及び変換部4100を有する。取得部4020が持つ機能は、実施形態1の取得部2020が持つ機能と同じである。頻度算出部2080は、非共通命令の出現頻度を算出する。変換部2100は、非共通命令の出現頻度が閾値以上である場合、対応情報60を用いて、対象プログラム50の命令列に含まれる非共通命令を共通命令に変換する。
【0090】
第1制御部4040は、非共通命令の出現頻度が閾値未満である場合に、対応情報60を用いて、第1プロセッサ10において検出された非共通命令に対応する共通命令を特定し、当該共通命令を第1プロセッサ10に実行させる。その他の点を除き、第1制御部3040が持つ機能は、実施形態1の第1制御部2040が持つ機能と同じである。
【0091】
なお、実施形態3の命令実行制御装置4000が、実施形態2の命令実行制御装置3000と同様の機能を有する場合、実施形態3の命令実行制御装置4000は、第2制御部4060(図示せず)をさらに有する。第2制御部4060が持つ機能は、実施形態2の第2制御部3060が持つ機能と同じである。
【0092】
<ハードウエア構成の例>
実施形態3の命令実行制御装置4000は、実施形態1の命令実行制御装置4000と同様に、例えば図4で例示されるコンピュータ1000によって実現される。ただし、実施形態3のストレージデバイス1080には、実施形態3の命令実行制御装置4000の各機能構成部を実現するプログラムが格納されている。
【0093】
<処理の流れ>
図11は、第1処理と第2処理のいずれかを選択する処理の流れを例示するフローチャートである。この処理は、「命令実行制御装置4000の動作モードとして、第1モードと第2モードのいずれかを選択する処理」とも表現できる。
【0094】
頻度算出部4080は、非共通命令の出現頻度を算出する(S302)。非共通命令の出現頻度が閾値未満である場合、命令実行制御装置4000は、第1プロセッサ10による対象プログラム50の実行を制御するための処理として、第1処理を選択する(S304)。一方、非共通命令の出現頻度が閾値以上である場合、命令実行制御装置4000は、第1プロセッサ10による対象プログラム50の実行を制御するための処理として、第2モードを選択する(S306)。
【0095】
ここで、第1処理と第2処理の選択結果を命令実行制御装置4000の動作に反映する具体的な方法は任意である。例えば不正命令ハンドラにおいて、第1処理が選択されている状態であるか否か(言い換えれば、命令実行制御装置4000が第1モードであるか否か)の判定が行われる。第1処理が選択されている場合、不正命令ハンドラにおいて、第1制御部4040や第2制御部4060の処理が行われるようにする。一方、第1処理が選択されていない場合、不正命令ハンドラにおいて、第1制御部4040や第2制御部4060の処理が行われないようにする。
【0096】
また、第2処理が選択された場合、命令実行制御装置4000の状態を、変換部4100が動作する状態に設定する。ここで、変換部4100が動作する状態に設定する具体的な手法には、システムの状態をダイナミックトランスレーションが実行される状態に設定する既存の手法を利用できる。
【0097】
図12は、変換部4100によって実行される処理の流れを例示するフローチャートである。変換部4100は、変換対象の命令列を対象プログラム50から取得する(S402)。変換対象の命令列を取得する具体的な手法には、ダイナミックバイナリトランスレーションの対象とする基本ブロックを取得する手法などを利用することができる。
【0098】
S404からS410は、変換対象の命令列に含まれる各命令について実行されるループ処理L1である。S404において、変換部4100は、変換対象の命令列に含まれる全ての命令について、既にループ処理L1が実行されたか否かを判定する。変換対象の命令列に含まれる全ての命令について、既にループ処理L1が実行された場合、図12の処理はS412に進む。
【0099】
一方、まだループ処理L1の対象とされていない命令が、変換対象の命令列に含まれる場合、変換部4100は、まだループ処理L1の対象とされていない命令のうち、先頭に位置する命令を選択する。ここで選択される命令を「命令i」と表記する。
【0100】
変換部4100は、命令iが非共通命令であるか否かを判定する(S406)。命令iが非共通命令である場合(S406:YES)、変換部4100は、対応情報60を用いて、命令iを、命令iに対応する共通命令に置換する(S408)。一方、命令iが非共通命令でない場合(S406:NO)、命令の置換は行われない。S410はループ処理L1の終端であるため、再度S404が実行される。
【0101】
ループ処理L1の実行が完了した後、変換部4100は、第1プロセッサ10によって実行される命令列を、変換後の命令列に置き換える(S412)。当該置き換えの具体的な手法には、ダイナミックバイナリトランスレーションで採用されている既存の手法を利用することができる。
【0102】
ここで、図12のフローチャートでは、対象プログラム50に含まれる命令のうち、非共通命令のみが置換されている。しかしながら、ダイナミックトランスレーションが行われる場合、共通命令の中にも置換すべきものが存在しうる。そこで変換部4100は、対象プログラム50に含まれる命令のうち、共通命令についても、必要に応じて置換してよい。
【0103】
<非共通命令の出現頻度の算出:S302>
頻度算出部4080は、対象プログラム50における非共通命令の出現頻度を算出する
(S302)。具体的には、頻度算出部4080は、特定の期間(以下、頻度算出期間)の中で、第1プロセッサ10において非共通命令が検出された回数に基づいて、非共通命令の出現頻度を算出する。
【0104】
例えば頻度算出部4080は、頻度算出期間の時間長で、頻度算出期間における非共通命令の検出回数を割ることにより得られる値を、非共通命令の出現頻度として算出する。頻度算出期間の時間長を t、頻度算出期間における非共通命令の検出回数を c とおくと、非共通命令の出現頻度は c/t となる。
【0105】
なお、非共通命令の出現頻度が定期的に算出される場合(言い換えれば、頻度算出期間の長さが一定である場合)、頻度算出期間における非共通命令の検出回数 c を、非共通命令の出現頻度として扱ってもよい。
【0106】
その他にも例えば、頻度算出部4080は、頻度算出期間の中で第1プロセッサ10によって実行された命令の総数で、頻度算出期間における非共通命令の検出回数を割ることにより得られる値を、非共通命令の出現頻度として算出してもよい。頻度算出期間の中で第1プロセッサ10によって実行された命令の総数 Na、頻度算出期間における非共通命令の検出回数を c とおくと、非共通命令の出現頻度は c/Na となる。
【0107】
なお、第1プロセッサ10によって実行された命令の回数は、例えば、実行された命令の回数をカウントするカウンタを第1プロセッサ10に設けることにより、把握することができる。
【0108】
その他にも例えば、頻度算出部4080は、頻度算出期間における第1プロセッサ10のプログラムカウンタの値の増加量で、頻度算出期間における非共通命令の検出回数を割ることにより得られる値を、共通命令の出現頻度として算出してもよい。頻度算出期間におけるプログラムカウンタの値の増加量を d、頻度算出期間における非共通命令の検出回数を c とおくと、非共通命令の出現頻度は c/d となる。
【0109】
非共通命令の出現頻度を算出するタイミングは任意である。例えば非共通命令の出現頻度は、定期的なタイミングで算出される。その他にも例えば、非共通命令の出現頻度は、所定の条件が満たされたことに応じて算出される。所定の条件は、例えば、「所定のユーザ入力が行われた」などといった条件である。
【0110】
ここで、対象プログラム50の実行が開始されてから、非共通命令の出現頻度が最初に算出されるまでの間について、第1処理と第2処理のどちらが行われるようにするのかは、任意である。例えば、命令実行制御装置4000の管理者によって、第1処理と第2処理のいずれかが選択される。
【0111】
その他にも例えば、対象プログラム50が過去に命令実行制御装置4000によって実行されたプログラムである場合、対象プログラム50の過去の実行時の情報に基づいて、第1処理と第2処理のどちらかが選択されてもよい。具体的には、命令実行制御装置4000は、対象プログラム50を第1プロセッサ10に実行させた際に、第1処理が選択された回数(非共通命令の出現頻度が閾値未満であった回数)と第2処理が選択された回数(非共通命令の出現頻度が閾値以上であった回数)の双方を、対象プログラム50の識別情報に対応づけて格納しておく。そして命令実行制御装置4000は、非共通命令の出現頻度が最初に算出されるまでの間、第1処理と第2処理のうち、過去の実行時における選択回数が多い処理を利用する。
【0112】
以上、本発明者によってなされた発明を実施形態に基づき具体的に説明したが、本発明は前記実施形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【0113】
なお、上述の例において、プログラムは、コンピュータに読み込まれた場合に、実施形態で説明された1又はそれ以上の機能をコンピュータに行わせるための命令群(又はソフトウェアコード)を含む。プログラムは、非一時的なコンピュータ可読媒体又は実体のある記憶媒体に格納されてもよい。限定ではなく例として、コンピュータ可読媒体又は実体のある記憶媒体は、RAM、ROM、フラッシュメモリ、SSD 又はその他のメモリ技術、CD-ROM、digital versatile disc(DVD)、Blu-ray(登録商標)ディスク又はその他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ又はその他の磁気ストレージデバイスを含む。プログラムは、一時的なコンピュータ可読媒体又は通信媒体上で送信されてもよい。限定ではなく例として、一時的なコンピュータ可読媒体又は通信媒体は、電気的、光学的、音響的、またはその他の形式の伝搬信号を含む。
【符号の説明】
【0114】
10 第1プロセッサ
20 第2プロセッサ
30 第1命令セット
40 第2命令セット
50 対象プログラム
60 対応情報
62 非共通命令
64 共通命令
70 ハードウエア
80 OS
90 不正命令ハンドラ
100 ユーザアプリケーション
110 ハイパーバイザ
120 不正命令ハンドラ
130 仮想マシン
1000 コンピュータ
1020 バス
1040 プロセッサ
1060 メモリ
1080 ストレージデバイス
1100 入出力インタフェース
1120 ネットワークインタフェース
2000 命令実行制御装置
2020 取得部
2040 第1制御部
2060 第2制御部
3000 命令実行制御装置
3020 取得部
3040 第1制御部
3060 第2制御部
4000 命令実行制御装置
4020 取得部
4040 第1制御部
4080 頻度算出部
4100 変換部
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12