(57)【特許請求の範囲】
【請求項１】
検証対象である装置をエミュレートする仮想マシン部を有する処理装置と、時間をカウントするハードウェアタイマーと、を備える情報処理装置であって、
前記仮想マシン部は、
前記検証対象である装置の中央処理装置をエミュレートする処理部と、
時間をカウントするタイマー部と、
前記処理装置の処理能力と前記処理部の処理能力との差を示す環境補正値を算出する環境補正値算出部と、
前記処理装置の負荷を算出し、今回算出した負荷と前回算出した負荷の差を示す負荷補正値を算出する負荷監視部と、
を備え、
前記処理部が第１の値を前記タイマー部に設定した場合、前記タイマー部は前記第１の値に前記環境補正値を乗算した第２の値を算出し、前記第２の値を第３の値で除算した分割値を算出し、前記第３の値に前記負荷補正値を乗算した第４の値を算出し、前記第４の値を前記ハードウェアタイマーに設定することを特徴とする情報処理装置。
【請求項２】
前記タイマー部は、
前記ハードウェアタイマーから前記第４の値のタイマー満了の通知を受信し、
前記第４の値を算出する処理、前記第４の値を前記ハードウェアタイマーに設定する処理、および前記タイマー満了の通知を受信する処理を前記分割値の回数繰り返すことを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記処理装置の処理能力は、前記処理装置において所定の時間に実行可能なプログラムのステップ数であり、前記処理部の処理能力は前記処理部において前記所定の時間に実行可能なプログラムのステップ数であることを特徴とする請求項１または２記載の情報処理装置。
【請求項４】
前記環境補正値算出部は、前記処理装置の処理能力を前記処理部の処理能力で除算することにより前記環境補正値を算出することを特徴とする請求項３記載の情報処理装置。
【請求項５】
前記負荷は、前記処理装置において、所定の時間に実行されたプログラムのステップ数であることを特徴とする請求項１または２記載の情報処理装置。
【請求項６】
前記負荷監視部は、前記前回算出した負荷を前記今回算出した負荷で除算することにより前記負荷補正値を算出することを特徴とする請求項５記載の情報処理装置。
【請求項７】
検証対象である装置をエミュレートする仮想マシン部を有する処理装置と、時間をカウントするハードウェアタイマーと、を備え、前記仮想マシン部は、前記検証対象である装置の中央処理装置をエミュレートする処理部と、時間をカウントするタイマー部と、を備える情報処理装置が実行する時間調整方法であって、
前記処理装置の処理能力と前記処理部の処理能力との差を示す環境補正値を算出し、
前記処理装置の負荷を算出し、今回算出した負荷と前回算出した負荷の差を示す負荷補正値を算出し、
第１の値を前記タイマー部に設定し、
前記第１の値に前記環境補正値を乗算した第２の値を算出し、
前記第２の値を第３の値で除算した分割値を算出し、
前記第３の値に前記負荷補正値を乗算した第４の値を算出し、
前記第４の値を前記ハードウェアタイマーに設定することを特徴とする時間調整方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置および時間調整方法に関する。
【背景技術】
【０００２】
近年、装置のライフが短くなり、自社の一社のみで全ての部品を製造することが減少し、部品を他社から調達して組み立て、ソフトウェアを組み込み、一つの装置として組み立てる事が多い。
【０００３】
大規模な装置には、沢山のソフトウェアが含まれており、その多くは装置が完成してからのデバッグしか出来ず、デバッグに時間がかかる。そのため、試作としての装置を多く作成し、同時にデバッグを行い、デバッグ期間を短期間にする方法などもあるが、試作装置を多く作成するため、コストがかかる。また、修正(改版)などがあった場合、再度、試作装置を作成することになり、工数が増加し、ライフサイクルに合わなくなったり、装置のコストアップにつながったりするという問題がある。
【０００４】
このような問題を回避する方法の一つとして、装置の全体、若しくは、一部をソフトウェアによりエミュレートする方法が行われるようになってきている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００６−２１５９４３号公報
【特許文献２】特開２００１−２８２３２７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
装置をソフトエミュレートする場合、装置内部の各デバイスの動作を疑似する仮想デバイスを有する仮想マシンを作成して処理をさせるが、各々の仮想デバイス毎にスレッドを起こしたりするため、各々の仮想デバイスで速度が異なる。
【０００７】
それにより、仮想マシン上での疑似動作の速度が、実機上より早く動作するデバイス(動作が軽いデバイス)と遅いデバイス(動作が重いデバイス)が存在することとなり、動作速度の違いにより、時間関係で問題が発生する事がある。
【０００８】
例えば、仮想マシンの仮想タイマーは、ハードウェアタイマーを利用して時間を計測しているため、実機と同様に設定された時間でタイムアウト等の処理が発生する。
しかし、仮想マシンの仮想Central Processing Unit（CPU）の処理性能は、実機のＣＰＵより低く、1 秒当たりに実行できるプログラムのステップ数(命令コード数)が実機より少ないため、実機であれば完了している処理が仮想ＣＰＵでは完了出来ずにタイムアウトが発生してしまう場合がある。
【０００９】
そのため、プログラムのタイムアウト時間等の変更を行い、仮想マシン用にプログラムを調整（修正）する必要があった。また、ソフトエミュレートである事により、仮想マシンを実行しているホスト装置(パーソナルコンピュータやワークステーション等)の負荷により、動作速度が一定でなくなり、予期しないエラーが発生するなどの問題が発生していた。このため、ソフトエミュレートによるデバッグでは、実機では存在しないエラーの対処が発生し、その解析と修正に時間を取られる事があった。
【００１０】
１つの側面では、本発明は、仮想環境での処理能力に起因して発生するタイムアウト等のエラーの発生を防ぐことである。
【課題を解決するための手段】
【００１１】
実施の形態の情報素処理装置は、検証対象である装置をエミュレートする仮想マシン部を有する処理装置と、時間をカウントするハードウェアタイマーと、を備える。
前記仮想マシン部は、前記検証対象である装置の中央処理装置をエミュレートする処理部と、時間をカウントするタイマー部と、前記処理装置と前記処理部との処理能力の差を示す環境補正値を算出する環境補正値算出部と、を備える。
【００１２】
前記処理部が第１の値を前記タイマー部に設定した場合、前記タイマー部は前記第１の時間に前記環境補正値を乗算した第２の値を前記ハードウェアタイマーに設定する。
【発明の効果】
【００１３】
実施の形態の情報処理装置によれば、仮想環境での処理能力に起因して発生するタイムアウト等のエラーの発生を防ぐことが出来る。
【図面の簡単な説明】
【００１４】
【図１】実施の形態に係る情報処理装置（コンピュータ）の構成図である。
【図２】実施の形態に係る情報処理装置の機能ブロック図である。
【図３】実施の形態に係る仮想タイマーの構成図である。
【図４】実施の形態に係るエミュレータ起動時の処理のフローチャートである。
【図５】実施の形態に係る環境補正用ベンチマークのフローチャートである。
【図６】割り込み発生時に実行される関数Ａのフローチャートである。
【図７】実施の形態に係る負荷監視スレッド部の処理のフローチャートである。
【図８】実施の形態に係る負荷補正用ベンチマークのフローチャートである。
【図９】割り込み発生時に実行される関数Ｂのフローチャートである
【図１０】実施の形態に係る時間調整方法のフローチャートである。
【発明を実施するための形態】
【００１５】
以下、図面を参照しながら実施の形態について説明する。
図１は、実施の形態に係る情報処理装置（コンピュータ）の構成図である。
情報処理装置１は、例えば、パーソナルコンピュータ（ＰＣ）やワークステーション（ＷＳ）等のコンピュータである。
【００１６】
情報処理装置１は、Central Processing Unit（CPU）２、メモリ３、入力部４、出力部５、記憶部６、記録媒体駆動部７、およびネットワーク接続部８を備え、それらはバス９により互いに接続されている。
【００１７】
メモリ３は、プログラム実行の際に、記憶部６（あるいは可搬記録媒体１０）に記憶されているプログラムあるいはデータを一時的に格納するRead Only Memory(ROM)やRandom Access Memory(RAM)等のメモリである。CPU２は、メモリ３を利用してプログラムを実行することにより、後述する各種処理を実行する。
【００１８】
この場合、可搬記録媒体１０等から読み出されたプログラムコード自体が実施の形態の機能を実現する。
入力部４は、例えば、キーボード、マウス、タッチパネル等である。
【００１９】
出力部５は、例えば、ディスプレイ、プリンタ等である。
記憶部６は、例えば、磁気ディスク装置（ハードディスクドライブ（ＨＤＤ））、光ディスク装置、テープ装置等である。情報処理装置１は、記憶部６に、上述のプログラムとデータを保存しておき、必要に応じて、それらをメモリ３に読み出して使用する。
【００２０】
記録媒体駆動部７は、可搬記録媒体１０を駆動し、その記録内容にアクセスする。可搬記録媒体としては、メモリカード、フレキシブルディスク、Compact Disk Read Only Memory(CD-ROM)、光ディスク、光磁気ディスク等、任意のコンピュータ読み取り可能な記録媒体が用いられる。ユーザは、この可搬記録媒体１０に上述のプログラムとデータを格納しておき、必要に応じて、それらをメモリ３に読み出して使用する。
【００２１】
ネットワーク接続部８は、LAN等の任意の通信ネットワークに接続され、通信に伴うデータ変換を行う。
ハードウェア（ＨＷ）タイマー１１は、ハードウェア時間計測器であり、時間をカウントし、設定された値になった (タイムアウト) 時に割り込み通知を割り込みコントローラ１２に通知する。ハードウェアタイマー１１は、例えば、ウォッチドッグタイマーである。
【００２２】
割り込みコントローラ（ＩＮＴＣ）１２は、ハードウェアタイマー１１からの割り込み通知などを契機として、割り込み処理を行う。
【００２３】
図２は、実施の形態に係る情報処理装置の機能ブロック図である。
情報処理装置１は、基準値生成部１０１および仮想マシン２０１を備える。
基準値生成部１０１および仮想マシン２０１は、ＣＰＵ２に対応する。基準値生成部１０１および仮想マシン２０１は、例えば、ＣＰＵ２が基準値生成部１０１および仮想マシン２０１の処理を行うソフトウェア（プログラム）を読み出し、実行することによって実現される。
【００２４】
基準値生成部１０１は、後述する環境用補正値Ｍの算出に用いられる基準値Ｎを生成し、基準値Ｎを引数として仮想マシン２０１に渡す。
仮想マシン２０１は、検証対象である装置（例えば、ＤＶＤレコーダ、ＨＤＤレコーダ、Network Attached Storage（ＮＡＳ）装置など）をエミュレートする。
【００２５】
仮想マシン２０１は、情報処理装置１上に構築された仮想的な装置である。仮想マシン２０１は、装置をエミュレートするソフトウェア（エミュレータ）により実現される。詳細には、情報処理装置１が有するＣＰＵ２がメモリ３等に格納されたエミュレータを読み出し、実行することによって、仮想マシン２０１は実現される。実施の形態において、エミュレータは、基準値生成部１０１および仮想マシン２０１を実現するものとする。
【００２６】
仮想マシン２０１は、仮想ＣＰＵ２１１、仮想ＲＯＭ２１２、仮想ＲＡＭ２１３、仮想Inter-Integrated Circuit（Ｉ２Ｃ）２１４、仮想タイマー２１５、仮想割り込みコントローラ（ＩＮＴＣ）２１６、仮想Serial Advanced Technology Attachment（ＳＡＴＡ）コントローラ２１７、仮想ギガビット・イーサネット（登録商標）（Ｇｂｅ）コントローラ２１８、仮想ハードディスクドライブ（ＨＤＤ）２１９、および負荷監視スレッド部２２０を備える。
【００２７】
仮想ＣＰＵ２１１は、検証対象である装置が有するＣＰＵをエミュレートし、プログラムの実行などの各種処理を行う処理部である。
仮想ＣＰＵ２１１は、環境補正値生成部２２１を備える。
【００２８】
環境補正値生成部２２１は、環境補正値Ｍを生成し、環境補正値Ｍを格納する。尚、環境補正値の詳細については後述する。
仮想ＲＯＭ２１２は、データを格納する。
【００２９】
仮想ＲＡＭ２１３は、仮想ＣＰＵ２１１で利用されるデータを一時的に格納する。
仮想Ｉ２Ｃ２１４は、仮想マシン２０１とI2C方式で接続する周辺デバイスとの通信を制御する。
【００３０】
仮想タイマー２１５は、時間をカウントし、予め指定した値になった (タイムアウト) 時に割り込み通知を仮想ＩＮＴＣ２１６に行う。
仮想割り込みコントローラ２１６は、仮想タイマー２１５から割り込み通知を受信すると、割り込み処理を行う。
【００３１】
仮想ＳＡＴＡコントローラ２１７は、仮想ＨＤＤ２１９と接続し、仮想ＨＤＤ２１９とのデータ転送を制御する。
仮想Ｇｂｅコントローラ２１８は、ギガビット・イーサネット（登録商標）による通信の制御を行う。
【００３２】
仮想ＨＤＤ２１９は、データを格納する。
負荷監視スレッド部２２０は、負荷補正値mを算出し、負荷補正値mを格納する。尚、負荷監視スレッド部２２０の処理の詳細については、後述する。
【００３３】
図３は、実施の形態に係る仮想タイマーの構成図である。
仮想タイマー２１５は、レジスタ２３１、タイマー処理部２３２、および割り込み通知部２３３を備える。
【００３４】
レジスタ２３１は、仮想ＣＰＵから通知された設定値や処理が完了したか否かを示すステータスを格納する。
タイマー処理部２３２は、環境補正処理部２３４、分割処理部２３５、負荷補正処理部２３６、ＨＷタイマー設定部２３７、およびタイマー完了通知部２３８を備える。
【００３５】
環境補正処理部２３４は、設定値に対して、仮想マシン２０１の処理能力に応じた補正を行う。詳細には、環境補正処理部２３４は、設定値に環境補正値Ｍを乗算した値を算出する。
【００３６】
分割処理部２３５は、環境補正処理部２３４で算出した値を適当な除数で分割する。
負荷補正処理部２３６は、負荷補正値ｍを用いて、ハードウェアタイマー１１に設定する値を算出する。
【００３７】
ＨＷタイマー設定部２３７は、負荷補正処理部２３６で算出した値をハードウェアタイマー１１に設定し、ハードウェアタイマー１１に処理を依頼する。
タイマー完了通知部２３８は、ハードウェアタイマー１１から処理完了通知を受信し、レジスタに格納されたステータスの変更や割り込み通知部２３３へ処理完了を通知する。
【００３８】
割り込み通知部２３３は、仮想割り込みコントローラ２１６に割り込み通知を通知する。また、割り込み通知部２３３は、レジスタに格納されたステータスに応じて、仮想ＣＰＵ２１１に処理完了通知を行う。
【００３９】
図４は、実施の形態に係るエミュレータ起動時の処理のフローチャートである。
先ず、ユーザは、情報処理装置１上でエミュレータを起動する。
ステップＳ５０１において、エミュレータは、エミュレータの起動が初めての起動（初回起動）であるか否か判定する。エミュレータの起動が初回起動である場合、制御はステップＳ５０２に進み、初回起動でない場合、制御はステップＳ５０７に進む。初回起動であるか否かは、例えば、環境用補正値Ｍが環境補正値生成部２２１等に登録されているか否かによって判定される。
【００４０】
ステップＳ５０２において、エミュレータの起動に際して、引数として基準値Ｎが指定されていない場合、制御はステップＳ５０３に進み、基準値Ｎが指定されている場合、制御はステップＳ５０４に進む。
【００４１】
ステップＳ５０３において、基準値生成部１０１は、基準値Ｎを生成する。基準値Ｎは、後述する環境補正用ベンチマークを情報処理装置１（ホスト）の環境(仮想マシン２０１の仮想ＣＰＵ２１１ではなく ホスト側の実CPU２を使用して実施した環境)で実行したときの結果である。すなわち、基準値Ｎは、ＣＰＵ２の処理能力を示す。
【００４２】
基準値Ｎは、環境補正用ベンチマークのプログラムコードを解析することで算出可能である。また、環境補正用ベンチマークをホスト側の実CPU２を使用して実行し、得られた結果を利用しても良い。また、基準値Ｎは、事前に算出しておき、メモリ３や記憶部６に格納し、利用しても良い。
【００４３】
実施の形態においては、基準値Ｎは、メモリ３または記憶部６に予め格納され、基準値生成部１０１は、基準値Ｎを読み出して、仮想マシン２０１に引き渡すものとする。
ステップＳ５０４において、仮想マシン２０１が起動する。
【００４４】
ステップＳ５０５において、環境補正値生成部２２１は、環境補正用ベンチマークを実行する。環境補正用ベンチマークを実行することにより、仮想ＣＰＵ２２１の処理能力を示す値Ｘ（環境用ベンチマーク結果Ｘ）が得られる。尚、環境補正用ベンチマークの処理の詳細については、後述する。
【００４５】
ステップＳ５０６において、環境補正値生成部２２１は、環境用ベンチマーク結果Ｘと基準値Ｎを用いて、仮想タイマー２１５の設定時の倍数（環境用補正値Ｍ）を算出する。
ここでは、ＣＰＵ２および仮想ＣＰＵ２１１の処理能力が高いほど、基準値Ｎおよび環境用ベンチマーク結果Ｘの値は高くなるものとする。例えば、基準値Ｎおよび環境用ベンチマーク結果Ｘは、所定の時間（例えば、１秒）の間に実行可能なループの数、実行可能なステップ数、または実行可能なプログラムコード数である。
【００４６】
環境用補正値Ｍは、基準値Ｎを環境補正用ベンチマーク結果Ｘで割ることにより算出される。すなわち、Ｍ＝Ｎ／Ｘである。
尚、上記ステップＳ５０５およびＳ５０６を環境補正値生成処理と呼ぶ。
【００４７】
ステップＳ５０７において、環境補正値生成部２２１は、算出した環境用補正値Ｍを環境補正値生成部２２１に格納する。尚、環境補正値生成部２２１は、環境用補正値Ｍを仮想ＲＡＭ２１３や仮想ＨＤＤ２１９に格納してもよい。
【００４８】
図５は、実施の形態に係る環境補正用ベンチマークのフローチャートである。
図５に示すフローチャートは、図４のステップＳ５０５に対応する。
ステップＳ５１１において、環境補正値生成部２２１は、ハードウェアタイマー１１の処理完了（タイマー満了）時に発生する割り込み処理として実行される関数のアドレスを情報処理装置（ハードウェア）１の割込みコントローラ１２のVectorレジスタに設定する。
【００４９】
実施の形態において、環境補正値生成部２２１は、割り込み発生時にコールされる関数として、図６に示される関数Ａを割り込みコントローラ１２に設定する。
関数Ａは、変数Ｘに割り込み発生時の変数iの値を代入する（ステップＳ５１７）。
【００５０】
ステップＳ５１２において、環境補正値生成部２２１は、ハードウェアタイマー１１に設定値として、１秒（ｓ）をセットする。尚、設定値は、任意の値で良い。
ステップＳ５１３において、環境補正値生成部２２１は、変数Ｘおよび変数ｉをそれぞれ０に設定する。
【００５１】
ステップＳ５１４において、環境補正値生成部２２１は、ハードウェアタイマー１１に処理を依頼する。依頼を受けたハードウェアタイマー１１は、１ｓをカウントする処理を開始する。
【００５２】
ステップＳ５１５において、環境補正値生成部２２１は、Ｘが０であるか否か判定する。Ｘが０である（Ｘ＝０）場合、制御はステップＳ５１６に進み、Ｘが０でない（Ｘ≠０）場合、Ｘの値を環境補正用ベンチマーク結果とし、環境補正用ベンチマークは終了する。
【００５３】
ステップＳ５１６において、環境補正値生成部２２１は、iに１をインクリメントする（i = i + 1）。そして、制御は、ステップＳ５１５に戻る。
【００５４】
環境補正用ベンチマークを実行すると、ステップＳ５１５とＳ５１６のループを実行中に、ハードウェアタイマー１１の処理開始から１ｓ後に処理完了通知が割り込みコントローラ１２に通知され、割り込み処理により関数Ａが実行される。上述のように、関数Ａは、Ｘにｉを代入する処理を行う。これにより、Ｘは０でなくなり、制御はステップＳ５１５とＳ５１６のループを抜ける。
【００５５】
上述の環境補正用ベンチマークでは、一定時間の間に実行されるループの回数（ステップ数、プログラムコード数）を計測している。
尚、他の実施の形態として、所定のプログラムを実行し、該プログラムの実行完了までに掛かった時間を環境補正用ベンチマーク結果とする方法もある。
【００５６】
ただし、掛かった時間を環境補正用ベンチマーク結果として用いると、ＣＰＵ２および仮想ＣＰＵ２１１の処理能力が高いほど環境補正用ベンチマーク結果は小さくなる。その場合、環境補正値Ｍは、環境補正用ベンチマーク結果Ｘを基準値Ｎで除算することにより算出される。すなわち、環境補正値Ｍ＝環境補正用ベンチマーク結果Ｘ／基準値Ｎとなる。
【００５７】
図７は、実施の形態に係る負荷監視スレッド部の処理のフローチャートである。
ステップＳ５２１において、負荷監視スレッド部２２０は、負荷基準値ｎに負荷監視用ベンチマーク結果ｘを代入する。すなわち、負荷基準値は、前回の負荷監視用ベンチマーク結果となる。
【００５８】
ステップＳ５２２において、負荷監視スレッド部２２０は、負荷監視用ベンチマークを
を実行する。負荷監視用ベンチマークを実行することにより、現在の情報処理装置１の負荷を示す値ｘ（負荷監視用ベンチマーク結果Ｘ）が得られる。尚、負荷監視用ベンチマークの処理の詳細については、後述する。
【００５９】
ステップＳ５２３において、負荷監視スレッド部２２０は、負荷基準値ｎを負荷監視用ベンチマーク結果ｘで割り、負荷補正値ｍを算出する。すなわち、ｍ＝ｎ／ｘである。負荷補正値ｍは、前回と今回の負荷監視用ベンチマーク結果の比であり、ＣＰＵ２の負荷の変化を示している。
【００６０】
ステップＳ５２４において、エミュレータが停止する場合、処理は終了し、エミュレータが稼働している場合、制御はステップＳ５２１に戻る。
【００６１】
図８は、実施の形態に係る負荷補正用ベンチマークのフローチャートである。
図８に示すフローチャートは、図７のステップＳ５２２に対応する。
ステップＳ５３１において、負荷監視スレッド部２２０は、ハードウェアタイマー１１の完了時に発生する割り込み処理として実行される関数のアドレスを情報処理装置（ハードウェア）１の割込みコントローラ１２のVectorレジスタに設定する。
【００６２】
実施の形態において、負荷監視スレッド部２２０は、割り込み発生時にコールされる関数として、図９に示される関数Ｂを割り込みコントローラ１２に設定する。
関数Ｂは、変数ｘに割り込み発生時の変数ｊの値を代入する（ステップＳ５３７）。
【００６３】
ステップＳ５３２において、負荷監視スレッド部２２０は、ハードウェアタイマー１１に設定値として、１μ秒（ｓ）をセットする。尚、設定値は、任意の値で良い。
ステップＳ５３３において、負荷監視スレッド部２２０は、変数ｘおよび変数ｊをそれぞれ０に設定する。
【００６４】
ステップＳ５３４において、負荷監視スレッド部２２０は、ハードウェアタイマー１１に処理を依頼する。依頼を受けたハードウェアタイマー１１は、１μｓをカウントする処理を開始する。
【００６５】
ステップＳ５３５において、負荷監視スレッド部２２０は、ｘが０であるか否か判定する。ｘが０である（ｘ＝０）場合、制御はステップＳ５３６に進み、ｘが０でない（ｘ≠０）場合、ｘの値を負荷補正用ベンチマーク結果とし、環境補正用ベンチマークは終了する。
【００６６】
ステップＳ５３６において、負荷監視スレッド部２２０は、ｊに１をインクリメントする（ｊ = ｊ + 1）。そして、制御は、ステップＳ５３５に戻る。
【００６７】
負荷補正用ベンチマークを実行すると、ステップＳ５３５とＳ５３６のループを実行中に、ハードウェアタイマー１１の処理開始から１μｓ後に処理完了通知が割り込みコントローラ１２に通知され、割り込み処理により関数Ｂが実行される。上述のように、関数Ｂは、ｘにｊを代入する処理を行う。これにより、ｘは０でなくなり、制御はステップＳ５３５とＳ５３６のループを抜ける。
【００６８】
上述の負荷補正用ベンチマークでは、一定時間で実行されるループの回数（ステップ数、プログラムコード数）を計測している。
尚、他の実施の形態として、所定のプログラムを実行し、該プログラムの実行完了までに掛かった時間を負荷補正用ベンチマーク結果とする方法もある。
【００６９】
ただし、掛かった時間を負荷補正用ベンチマーク結果として用いると、ＣＰＵ２の負荷が高いほど環境補正用ベンチマーク結果は小さくなる。その場合、負荷補正値ｍは、負荷補正用ベンチマーク結果ｘを負荷基準値ｎで除算することにより算出される。すなわち、負荷補正値ｎ＝負荷補正用ベンチマーク結果ｘ／負荷基準値ｎとなる
【００７０】
図１０は、実施の形態に係る時間調整方法のフローチャートである。
ここでは、仮想ＣＰＵ２１１があるプログラムを実行しており、該プログラムにおいて、タイマーを設定する命令を実行する場合の処理を示す。
【００７１】
ステップＳ５４１において、仮想ＣＰＵ２１１は、タイマーを設定する。詳細には、仮想ＣＰＵ２１１は、仮想タイマー２１５のレジスタ２３１に設定値を設定する。ここでは、設定値として１ｍ秒（ｓ）を設定するものとする。すなわち、仮想ＣＰＵ２１１が実行しているプログラムに１ｍｓを計測する命令があったものとする。
【００７２】
ステップＳ５４２において、レジスタ２３１は設定値（１ｍｓ）を格納する。
ステップＳ５４３において、環境補正処理部２３４は、環境補正値生成部２２１から環境補正値Ｍを取得（参照）し、設定値に環境補正値Ｍを乗算し、環境補正後設定値（１ｍｓ×Ｍ）を算出する。
【００７３】
ステップＳ５４４において、分割処理部２３５は、環境補正後設定値を予め定められた除数で除算し、分割値ｋを算出する。ここで、除数として１μｓを用いる。すなわち、分割処理部２３５は、ｋ＝（１ｍｓ×Ｍ）／１μｓを計算する。実施の形態では、除数として１μｓを用いているが、これに限定されるものではない。ただし、ここで用いた除数の値は、後述のハードウェアタイマー１１に設定する値の算出に用いられ、大きい値に設定すると誤差が大きくなるため、あまり大きい値でないほうが望ましい。
【００７４】
ステップＳ５４５において、負荷補正処理部２３６は、負荷監視スレッド部２２０から負荷補正値ｍを取得（参照）し、ステップＳ５４４で用いた除数（１μｓ）に負荷補正値ｍを乗算し、調整後設定値ｕを算出する。
【００７５】
ステップＳ５４６において、ＨＷタイマー設定部２３７は、ハードウェアタイマー１１のレジスタにステップＳ５４５で算出した調整後設定値ｕを設定し、処理を依頼する。
ハードウェアタイマー１１は、依頼を受信すると時間のカウントを開始し、ｕ秒後に処理完了通知をタイマー完了通知部２３８に通知する。
【００７６】
ステップＳ５４７において、タイマー完了通知部２３８は、ハードウェアタイマー１１から処理完了通知を受信する。
ステップＳ５４８において、タイマー完了通知部２３８は、分割値ｋを１デクリメントする（k = k - 1）。
【００７７】
ステップＳ５４９において、タイマー完了通知部２３８は、分割値ｋが０であるか否か判定する。分割値ｋが０である場合（ｋ＝０）、処理は完了し、分割値ｋが０でない場合（ｋ≠０）、制御はステップＳ５４５に戻る。
【００７８】
完了後、タイマー完了通知部２３８は、レジスタ２３１に格納されるステータスをタイマー処理完了を示す値に変更し、割り込み通知部２３３にタイマー処理完了を通知する。仮想タイマー２１５は、レジスタ２３１のステータスが変更されると、仮想ＣＰＵ２１１にタイマー処理完了を通知する、または割り込み通知部２３３は、割り込み通知を仮想割り込みコントローラ２１６に通知する。尚、上記の完了後の処理は一例であり、実行されているプログラムにより、処理の内容は変化する。
【００７９】
また、他の実施の形態として、上述の時間調整方法において、負荷補正値を使用せず、環境補正値のみで調整を行っても良い。その場合、ステップＳ５４３で算出される環境補正後設定値をハードウェアタイマー１１に設定し、ハードウェアタイマー１１から処理完了通知を受信して、処理を終了する。
【００８０】
実施の形態の情報処理装置によれば、仮想マシン上でのタイマーの設定において、設定値を該仮想マシンの処理能力や負荷に応じて調節することで、仮想マシンの処理能力に起因するタイムアウト等のエラーの発生を防ぐことが出来る。また、ソフトウェアを仮想マシン上で実行する場合に、該ソフトウェアをエミュレータ用にチューニング（修正）する必要がなくなる。
【００８１】
また、実施の形態の情報処理装置によれば、環境用補正値により装置毎の装置固有の速度差によるプログラム動作のズレを修正することで、他の装置でも同様な実行結果(安定した動作)を得ることが可能となる。
【００８２】
また、実施の形態の情報処理装置によれば、負荷補正値により、動作時固有の時間差を吸収し、ソフトエミュレータとしてのバラツキを抑えることが出来、安定した動作が可能となる。
【００８３】
また、実施の形態の情報処理装置によれば、仮想マシン上での動作においてのみ発生するエラーが無くなり、該エラーの解析や修正に時間を費やす必要がなくなる。
【００８４】
また、従来はデバイスの処理を管理するスケジューラを設け、動作の軽いデバイスと重いデバイスのスケジュールを管理し、常に一定の速度で動作する(重い処理に合わせる)方式が用いられていたが、この方式ではスケジューラ自体の処理が重くなるため、高性能で高価なワークステーション等を使用してエミュレータを動作させる必要があった。実施の形態の情報処理装置によれば、各仮想デバイスの動作速度を調整するスケジューラがないため、ＰＣ等の安価な装置を利用することが出来る。
【符号の説明】
【００８５】
１    情報処理装置
２    CPU
３    メモリ
４    入力部
５    出力部
６    記憶部
７    記録媒体駆動部
８    ネットワーク接続部
９    バス
１０    可搬記録媒体
１１    ハードウェアタイマー
１０１    基準値生成部
２０１    仮想マシン
２１１    仮想ＣＰＵ
２１２    仮想ＲＯＭ
２１３    仮想ＲＡＭ
２１４    仮想Ｉ２Ｃ
２１５    仮想タイマー
２１６    仮想割り込みコントローラ
２１７    仮想ＳＡＴＡコントローラ
２１８    仮想Ｇｂｅコントローラ
２１９    仮想ＨＤＤ
２２０    負荷監視スレッド部
２２１    環境補正値生成部
２３１    レジスタ
２３２    タイマー処理部
２３３    割り込み通知部
２３４    環境補正処理部
２３５    分割処理部
２３６    負荷補正処理部
２３７    ＨＷタイマー設定部
２３８    タイマー完了通知部
【図１】
0005906854.tif 000002
【図２】
0005906854.tif 000003
【図３】
0005906854.tif 000004
【図４】
0005906854.tif 000005
【図５】
0005906854.tif 000006
【図６】
0005906854.tif 000007
【図７】
0005906854.tif 000008
【図８】
0005906854.tif 000009
【図９】
0005906854.tif 000010
【図１０】
0005906854.tif 000011