(57)【特許請求の範囲】
【請求項１】
コンピュータ・システムにおけるエラーを訂正するシステムであって、
基準システムと、
前記基準システム上で実行されるプログラムの命令を仮想機械コードとしてネーティブ機械コードへ動的にコンパイルしながら実行する、エラーを訂正すべき検査システムと、
前記基準システムおよび前記検査システム上でプログラムを実行させるための制御機構と、
から成り、
前記制御機構が、
前記基準システムおよび前記検査システムの各々に対して、前記プログラムの同じ命令シーケンスを表わす命令シーケンスを供給する手段と、
前記基準システムおよび前記検査システムにおいて、前記プログラムの同じ命令シーケンスを表わす命令シーケンスを実行する手段と、
前記プログラムの実行中に前記仮想機械コードとネーティブ機械コードの中にある比較可能点において、前記基準システムおよび前記検査システムの状態を代理を用いて検出し記録する手段と、
前記命令シーケンスの終点を含む、前記命令シーケンスにおける選択可能な比較可能点において、前記基準システムおよび前記検査システムの前記検出された状態を比較する手段と、
を含むことを特徴とするシステム。
【請求項２】
請求項１記載のシステムであって、更に、前記システム間で比較した状態において差異が検出された場合、前記基準システムおよび前記検査システムの各々において、前記命令シーケンスの選択可能な比較可能点の間の部分の実行をやり直す手段を備えることを特徴とするシステム。
【請求項３】
請求項２記載のシステムにおいて、前記システム間で比較した状態において差異が検出された場合、前記基準システムおよび前記検査システムの各々において、前記命令シーケンスの選択可能な比較可能点の間の部分の実行をやり直す前記手段が、比較した状態における差異の検出に応答して、やり直すべき前記命令シーケンスの部分を再セットすることを特徴とするシステム。
【請求項４】
請求項３記載のシステムにおいて、前記システム間で比較した状態において差異が検出された場合、前記基準システムおよび前記検査システムの各々において、前記命令シーケンスの選択可能な比較可能点の間の部分の実行をやり直す前記手段が、前記検査システムおよび前記基準システムにおいて状態が正しく比較された最後の比較可能点と、比較した状態において差異が検出された比較可能点との間で、探索を実行することを特徴とするシステム。
【請求項５】
請求項４記載のシステムにおいて、前記実行する探索が二分探索であることを特徴とするシステム。
【請求項６】
請求項１記載のシステムにおいて、
前記制御機構が、更に、外部イベントを前記基準システムに供給する手段を備え、
該手段が、更に、外部イベントを前記基準システムに供給する前記手段によって供給される外部イベントを記録する手段を備え、
前記制御機構が、前記基準システムの記録された外部イベントを、命令シーケンスの実行中における前記検査システムに対する外部イベントとして利用する手段を備えることを特徴とするシステム。
【請求項７】
請求項６記載のシステムにおいて、前記制御機構が、外部イベント、および外部イベントが供給された前記比較可能点を変化させる手段を備えることを特徴とするシステム。
【請求項８】
請求項２記載のシステムにおいて、
前記制御機構が、更に、外部イベントを前記基準システムに供給する手段を備え、
該手段が、更に、外部イベントを前記基準システムに供給する前記手段によって供給される外部イベントを記録する手段を備え、
前記制御機構が、前記基準システムの記録された外部イベントを、命令シーケンスの実行をやり直す際に、前記基準システムおよび前記検査システムに対する外部イベントとして利用する手段を備えることを特徴とするシステム。
【請求項９】
請求項６記載のシステムにおいて、前記制御機構が、外部イベントの供給を変化させる間、前記基準システムおよび前記検査システムの各々における前記命令シーケンスの選択可能な比較可能点間の部分の実行をやり直す手段を備えることを特徴とするシステム。
【請求項１０】
請求項１記載のシステムにおいて、前記命令シーケンスの終点を含む、前記命令シーケンスにおける選択可能な比較可能点において、前記基準システムおよび前記検査システムの前記検出された状態を比較する前記手段が、異なる状態を選択可能であることを特徴とするシステム。
【請求項１１】
コンピュータ・システムにおいてエラーを検出するための方法であって、
基準システムおよび、前記基準システム上で実行されるプログラムの命令を仮想機械コードとしてネーティブ機械コードへ動的にコンパイルしながら実行する、エラーを訂正すべき検査システムの各々に対して、正しく実行されれば前記２つのシステムの各々において同じ結果をもたらす、一連の命令シーケンスを供給するステップと、
前記基準システムおよび検査システムの各々において、前記命令シーケンスを実行するステップと、
前記プログラムの実行における前記仮想機械コードとネーティブ機械コードの中にある比較可能点において、前記基準システムおよび前記検査システムの状態を代理を用いて検出し記録するステップと、
前記命令シーケンスの終点を含む、前記命令シーケンスにおける選択可能な比較可能点において、前記基準システムおよび前記検査システムの前記検出された状態を比較するステップと、
を含むことを特徴とする方法。
【請求項１２】
請求項11記載の方法であって、更に、前記システム間で比較した状態において差異が検出された場合、前記基準システムおよび前記検査システムの各々において、前記命令シーケンスの選択可能な比較可能点の間の部分の実行をやり直すステップを備えることを特徴とする方法。
【請求項１３】
請求項12記載の方法において、前記システム間で比較した状態において差異が検出された場合、前記基準システムおよび前記検査システムの各々において、前記命令シーケンスの選択可能な比較可能点の間の部分の実行をやり直す前記ステップが、比較した状態における差異の検出に応答して行われることを特徴とする方法。
【請求項１４】
請求項12記載の方法において、前記システム間で比較した状態において差異が検出された場合、前記基準システムおよび前記検査システムの各々において、前記命令シーケンスの選択可能な比較可能点の間の部分の実行をやり直す前記ステップが、前記検査システムおよび前記基準システムにおいて状態が正しく比較された最後の比較可能点と、比較した状態において差異が検出された比較可能点との間で、探索を実行するステップを含むことを特徴とする方法。
【請求項１５】
請求項12記載の方法において、前記システム間で比較した状態において差異が検出された場合、前記基準システムおよび前記検査システムの各々において、前記命令シーケンスの選択可能な比較可能点の間の部分の実行をやり直す前記ステップが、前記検査システムおよび前記基準システムにおいて状態が正しく比較された最後の比較可能点と、比較した状態において差異が検出された比較可能点との間で二分探索を実行するステップを含むことを特徴とする方法。
【請求項１６】
請求項12記載の方法において、前記システム間で比較した状態において差異が検出された場合、前記基準システムおよび前記検査システムの各々において、前記命令シーケンスの選択可能な比較可能点の間の部分の実行をやり直す前記ステップが、前記検査システムおよび前記基準システムにおいて状態が正しく比較された最後の比較可能点と、比較した状態において差異が検出された比較可能点との間で二分探索を実行するステップを含み、前記探索技法が、探索速度を高めるように選択されることを特徴とする方法。
【請求項１７】
請求項11記載の方法であって、更に、
外部イベントを前記基準システムに供給するステップと、
外部イベントを前記基準システムに供給する前記手段によって供給される外部イベントを記録するステップと、
前記基準システムの記録された外部イベントを、命令シーケンスの実行中における前記検査システムに対する外部イベントとして利用するステップと、
を含むことを特徴とする方法。
【請求項１８】
請求項17記載の方法であって、更に、外部イベント、および外部イベントが供給された前記比較可能点を変化させるステップを含むことを特徴とする方法。
【請求項１９】
請求項12記載の方法であって、更に、
外部イベントを前記基準システムに供給するステップと、
前記基準システムに供給された外部イベントを記録するステップと、
命令シーケンスの実行をやり直す際に、前記基準システムの記録された外部イベントを、前記基準システムおよび前記検査システムに対する外部イベントとして利用するステップと、
を含むことを特徴とする方法。
【請求項２０】
請求項19記載の方法において、前記基準システムおよび前記検査システムの各々において、前記命令シーケンスの選択可能な比較可能点の間の部分の前記シーケンスの実行をやり直す前記ステップが、外部イベントの供給を変化させるステップを含むことを特徴とする方法。
【請求項２１】
請求項11記載の方法において、前記命令シーケンスの終点を含む、前記命令シーケンスにおける選択可能な比較可能点において、前記基準システムおよび前記検査システムの前記検出された状態を比較する前記ステップが、比較する状態を選択するステップを含むことを特徴とする方法。
【発明の詳細な説明】
発明の背景
発明の分野
本発明は、コンピュータ・システムに関し、更に特定すれば、コンピュータ・システムのデバッグを迅速にかつ精度高く行うシステムに関するものである。
従来技術の歴史
コンピュータ・プロセスまたはコンピュータ・システムでは、多くの場合エラーを検出することが望ましい。これを行うためには、通常、正しく機能することがわかっているシステム（「基準システム」）のモデルに対して、設計対象のシステム（「検査システム」）の挙動を検査する。検査システムおよび基準システムの挙動が一致すれば、検査システムは正確に動作していると思われる。これらのシステムの挙動が異なる場合、エラーが検出されたことになる。
２つのシステムの挙動を比較する方法は多数ある。その１つは、各システムに、プロシージャ・コール、状態遷移またはバス信号のような、内部または外部イベントのストリームを発生させ、２つのストリームを比較することである。しかしながら、イベント・ストリームによっては、捕獲するのが難しく、イベント・ストリームの比較を実施できない場合もある。他のイベント・ストリームには、捕獲するのが不経済なものもある。更に他のイベント・ストリームでは、粒が粗すぎて有用なエラーの突き止めができない場合もある。また、イベント・ストリームの中には、当該イベントが、システムの実現手段に対する依存度が高すぎるために、比較できないものもある。
別の比較技法として、双方のシステムを走らせ、走っている最中のシステムの状態を記録し、このシステムの状態を比較することが挙げられる。状態比較は、イベント・ストリームの比較と同じ種類の問題を生ずる可能性がある。ある状態はアクセスするのが不経済であったりあるいは不可能な場合があり、また２つのシステムの実現手段の詳細に対する依存度が高過ぎる場合もある。
状態またはイベントのいずれかの比較を行うために、異なる方法を用いることも可能である。従来より、基準システムが非公式（informal）または実行不可能な場合、その方法は、基準が生成する状態またはイベントとの一貫性がない種々の検査状態またはイベントに対する場当たり的な探索であった。この方法は、勿論、検査システム内に潜み得る重要な問題を見落とす虞れが非常に大きい。
基準が実行可能な仕様である場合、単純に２つのシステムを同時に走らせ、任意の時点における状態を比較して差異を検出できることが望ましい。先に列記した問題は、これを一層難しくする。
各ステップ後のシステム状態の正確な比較は、一般に不可能である。まず、検査システムおよび基準システムは必然的には何らかの相違があるので（機能、実現手段、または性能）、システムの総合的な状態を常時比較することは不可能である。システムによっては、総合的な状態は全く比較不可能な場合もある。例えば、第１オペレーティング・システムを走らせる一方の種類のプロセッサから、第２オペレーティング・システムを走らせる別の種類のプロセッサに、あるアプリケーション・プログラムを移植する場合のように、大きく異なる検査システムの状態を基準システムのそれと比較することが望ましい場合が多い。必要とされているのは、検査システムが基準システムと同じ最終結果を生み出すことである。プロセッサおよびオペレーティング・システムが異なるので、２つのシステムを走らせている際のいずれの時点においても実行されている動作（したがって、状態）は恐らく異なるであろう。
第２に、各システムによる各動作後に、状態を繰り返し比較するのは、法外に負担が大きい可能性がある。２つのシステムの状態を比較するためには、２つのシステムのメモリの全て（第２レベルの記憶装置も含む場合がある）、およびレジスタの全てを比較し、これらが同一か否かについて調べなければならない。状態比較の範囲が大きいため、これは非常に負担がかかる。
最後に、状態情報によっては、利用できないものもあり得る。例えば、読み取り不可能なプロセッサ・レジスタにおける状態や、システムの一方において暗示的に表現される状態である。したがって、比較は多くの場合選択的とならざるを得ない。
実行中のあらゆる時点における状態の比較は困難であるが、検査システムおよび基準システムの結果が同一となるべき時点を選択することは可能である。これらの時点において、状態の比較を行えばよい。しかしながら、これまで、システムを自動的にまたは迅速に比較する方法は考案されていない。
検査システムにおいて迅速にエラーを検出するための方法および装置を提供することが望ましい。
更に特定すれば、コンピュータ・プロセスまたはコンピュータ・システムにおいてエラーを検出する方法およびシステムを提供することが望ましい。
発明の概要
本発明は、コンピュータ・システムにおいてエラーを検出するためのコンピュータ実装プロセスによって実現される。このプロセスは、基準システムおよび検査システムの各々において、ソフトウエア・プログラムの命令シーケンスを実行するステップと、プログラムの実行における比較可能点において、基準システムおよび検査システムの状態を検出し記録するステップと、命令シーケンスの終点を含む、命令シーケンスにおける選択可能な比較可能点において、基準システムおよび検査システムの検出された状態を比較するステップとを含む。
特定の実施形態では、比較したシステムの状態において差異が検出された場合、基準システムおよび検査システムの各々において、選択可能な比較可能点間の命令シーケンスの部分の実行を自動的にやり直す。
本発明のこれらおよびその他の特徴は、以下に続く詳細な説明を、図面と共に参照することによってより良く理解されよう。尚、図面においては、同様の構成要素は、種々の図にわたって同様の参照符号で引用することとする。
【図面の簡単な説明】
図１は、本発明にしたがって設計したシステムのブロック図である。
図２は、本発明にしたがって設計したシステムの一実施形態のブロック図である。
第３図は、本発明によるプロセスを示す図である。
詳細な説明
ここで図１を参照すると、本発明にしたがって構成した装置のブロック図が示されている。本発明は、検査システム15上で実行したいプログラム12からの命令を受け取る制御機構10と、入出力デバイスまたはモデル18を利用する１つ以上の基準システム16とを利用する。プログラム12は、ハードウエアまたはソフトウエア・プログラムまたはプロセス、あるいはこれらの変形とすることができる。検査システム15および基準システム16は、各々、ハードウエア、ソフトウエア、またはそれぞれの何らかの組み合わせとすることができる。制御機構10は、検査システム15および基準システム16双方によるプログラム12の実行を制御する。プログラム12は、図では別個のエンティティとして示すが、これらのシステム内に埋め込んだり、あるいはシステム外部から供給することも可能である。プログラム12は、これらシステムの各々に対して異なる表現を有することができるが、あるレベルでは、同じ結果を計算しなければならない。制御機構10は、プログラム12を徐々に実行し、２つのシステムの状態を徐々に読み取るかあるいは検証する手段を備えるものであれば、いずれの制御手段でもよい。
原理上、単一ステップずつプログラムを実行し、各ステップにおいてシステムの状態を比較することによって、プログラム12を実行することは可能であろう。しかしながら、ステップ毎に大量の状態をチェックすることは、多くの場合法外な負担がかかる。加えて、単純なステップ動作は不可能な場合もある。例えば、一方のシステムではある順序でいくつかの結果を計算し、別のシステムでは異なる順序でこれを計算する場合がある。代わりに、本発明は、制御機構10を用いて、検査システムおよび基準システムにおいて数個のまたは多くのステップを実行する。したがって、制御機構は、検査システム15上で、プログラム12の内わかっている数、しばしば多数のステップを実行する。次いで、制御機構は、基準システム16上でこれらのステップの実行を繰り返す。次に、状態の比較を行えばよい。比較の前に多数のステップを実行することにより、比較のコストは数ステップ全体で償却され、更に本発明は、各ステップにおいて同一の計算を行わないシステムにおいてエラーを発見することができる。
制御機構10は、真または偽のいずれであるかを評価する比較述語（comparison predicate）（評価すべき式）を実行する。比較述語は、制御機構10に埋め込む必要はなく、検査対象システム、分析対象のエラーの種類、およびエラー位置検出処理能力および精度間のトレードオフに応じて様々に変更することができる。加えて、比較述語は、実行中に変更することもできる。例えば、基準システムおよび検査システムが双方ともプロセッサである場合、比較述語は双方のプロセッサのユーザ可視レジスタ（user−visible register）の素早いチェックを頻繁に行うことができ、更に一層負担がかかるが一層総合的な、隠れたレジスタおよびメモリのチェックを周期的に行うことも可能である。
検査システムおよび基準システムの各々が有する状態には、比較には決して用いられず、したがって比較では無視され得るものがあることを注記しておく。同様に、各システムは、ある状態を異なる方法で表現することがあり、比較述語またはその代理（surrogate）は比較を行うために、何らかの状態変換を行わなければならない。「状態」の概念は、イベント・ストリームのデバッグを利用するためには、イベント・ログの状態を含むように拡大してもよい。例えば、述語は、タイム・スタンプを付した入力／出力ログにおいてエレメントを比較し、双方のシステムの外部挙動が同一であることを保証することができる。最後に、述語は、値の全てを明示的に比較する代わりに、例えば、１組の値のチェックサムや巡回冗長チェック（CRC）といった近似情報を計算してもよい。
制御プログラム10は、多数の前提に基づいて実行を制御する。最初に、２つのシステムによって同じプログラム12が正確に実行されている場合、２つのシステムによって実行された個々の命令は異なる場合があるが、検査システムおよび基準システムが各々正しく機能し同じ結果を与える場合、２つのシステムの状態の特定部分には同等であるべき時点があることは認められよう。これらの時点のことを、本明細書では、「仮想時間における比較可能点（comparable points in virtual time）」または単に「比較可能点（comparable point）」と呼ぶことにする。例えば、基準システムが、シミュレータと結合され、複雑なプロセッサ（CISCプロセッサのような）をエミュレートするために用いられる単純なプロセッサ（RISCプロセッサのような）であり、一方検査システムがこのような複雑なプロセッサである場合が考えられる。基準システムは、典型的に、いくつかの命令を実行し、検査システムにおける単一命令の挙動を模擬する。その結果、基準システムの状態は、検査システムにおいて実行される命令全体に対応する時点においてのみ比較可能となる。
また、本発明は、あるレベルにおいて、正しく機能するコンピュータ・システムの動作が決定論的であるという認識にも基づくものである。したがって、命令シーケンスをプロセッサ上で実行し始めると、これらの命令の結果は、割り込みや入出力動作のような命令シーケンスの外部イベントを除いて、最初の機械状態によって決定される。これら外部動作のみが、プログラムがシステム上で実行する態様において変動の原因となり得る。かかる変動をなくすために、ある実施形態では、基準システムおよび検査システムによって１組のデバイス・モデルを共用する。これによって、状態比較に関する多様性の問題の簡素化を図る。追加の利点として、１組のデバイスによるデバッグは、双方のシステムに別個のデバイスを用いる場合よりも格段に速いことが挙げられる。本発明は、デバイス・モデル18から外部イベントを取り込み、これらを検査システムおよび基準システム間で共用する。制御機構10は、仮想時間における同じ比較可能点において検査システムおよび基準システムに外部イベントが提示され、外部イベントが同じ効果を有することを保証する。その結果、２つのシステム15および16は、理論的に、同じ外部イベントを用いて、同じ結果を生成するプログラムを実行していることになる。しかしながら、外部イベントが発生するいずれの２つの比較可能点間にも、多数の比較可能点が存在し得ることを認識すべきであろう。コンピュータ・システムが正しく機能しており、一旦命令シーケンスがプロセッサ上で実行し始め、これらの命令の結果が、命令シーケンスの外部のイベントを除いて決定され、非同期の外部イベントが排除されるということの認識により、２つのシステムによるプログラムの実行中の仮想時間における比較可能点において、比較が可能となる。制御機構10は、基準システムおよび検査システムの状態のある部分を周期的に比較する。これらシステムの状態の一部がいずれかの比較可能点において変化した（そして、比較述語によれば矛盾する）場合、エラー（逸脱（divergence）と呼ぶ）が発見されたことになる。逸脱は、最後の状態比較以降のいずれかの時点で発生したと考えられる。システム・エラーを検出するために十分な状態が正当に利用可能な比較可能点を利用して逸脱を検出することにより、従来技術のエラー検出システムに対して、大きな進展がもたらされる。
また、本発明は、同一状態を示した最後の状態比較以降に仮想時間において探索を行うことによって、エラーの範囲を自動的に狭めることも可能である。これを行うために、状態のずれが検出された最も早い比較可能点において、プログラムの実行を停止する。実行およびやり直し（replay）の間共用可能な外部イベントを記録および再実行することができる結果として、「以前の比較可能点に戻り」、次いで再び順方向に実行し同一の結果を得ることができる。これによって、既に実行され、エラーが発生したプログラムの部分を「やり直す」ことが可能となる。やり直しに対応するために、制御機構10は検査システムおよび基準システムによるプログラムの実行中の、予め選択した比較可能点において、これらシステムの状態に対して周期的にチェックポイントを設定し記録する。こうすると、ずれが検出された古いチェックポイントにシステムの動作を戻し、次いでプログラム12を順方向に所望の比較可能点まで実行することができる。
チェックポイントは、システム状態全てを捕獲する必要はないが、実行を再開するために十分な状態を与えなければならない。状態に設定するチェックポイントを多くする程、デバッグの精度は向上する傾向がある。チェックポイントの設定は、無しから各ステップ毎まで、いずれの周期でも可能であり、チェックポイントの間隔を変更すると、順方向の実行およびやり直し双方のパフォーマンスに影響がある。また、やり直しは、外部イベントのログをも頼りにする。やり直しのために実行を再開する場合、ログから外部イベントを取り込み、やり直しにおける決定論的挙動を確保する。
多くの探索技法が可能である。最良の選択は、順方向の実行およびやり直しの相対速度、状態比較等によって異なる場合がある。更に、エラーが検出された場合、制御機構10は、より総合的なまたは精度が高い状態比較述語を用いることに切り替えることができる。一実施形態では、制御機構10は、以下のように、仮想時間において二分探索を実行することができる。制御機構10は、以前の比較可能点の内、状態比較が成功した時点、恐らく最も厳しいレベルでの最後の比較の時点に、やり直しの開始をセットすることができる。外部イベントが発生したいずれかの２つの比較可能点間に存在する多数の比較可能点によって、ずれの検出後、比較的粒の細かい（fine grained）エラーの分離が可能となる。制御機構10は、状態比較が失敗した比較可能点にやり直しの終了をセットし、次いで、先頭および終了の間の中間にある比較可能点までプログラムのやり直しを実行する。次に、この中間点において、システムの状態を再び比較する。この中間点において状態比較が失敗した場合、やり直しの終了を、この中間の比較可能点にセットし、やり直しを同じ開始点から開始して探索を続行し、開始点および新たな終了点の間の、第２の比較可能点まで継続する。次に、この中間点においてシステムの状態を再び比較する。状態比較が成功した場合、先頭をその比較可能点にセットし、探索を続行する。このようにして、エラーの探索は迅速に挟められる。
探索を終了することができる状況は、多様である。例えば、制御機構10は、探索範囲が小さくなり、これ以上範囲の縮小が不可能となったときに、逸脱探索を終了することができる。その時点において、逸脱が「発見された」と見なす。最小の範囲は、検査システムおよび基準システム、ならびに実行中のプログラムによって異なる。エラーは、ユーザに報告することができる。
制御機構10が同一の外部イベントを検査システムおよび基準システムの各々に提示することにより、非同期の外部イベントから検査システムおよび基準システムを分離する方法は、一貫性を保証しプログラム12のやり直し実行を可能にすることに加えて、多数の利点を提供する。例えば、プログラム12の実行の任意のセグメントにわたって、制御機構10は、外部イベントの速度および分配を、プログラム12の実行の任意のセグメント毎に選択的に変化させることができる。これによって、制御機構は、外部イベントの異常に高い到達速度のような検査状況を発生することが可能となる。
また、制御機構10は、状態比較を行って成功した実行のセグメントを繰り返すことによって、「摂動分析（perturbation analysis）」を行うことも可能である。実行を繰り返す毎に、外部イベントの初期状態または送り出し（delivery）を変えることができるが、実行の最終的な結果が変化しないようにする必要がある。実行毎に最終状態が変化する場合、エラーが検出される。前述のエラー分離技法を用いて、基準システムと比較することにより、エラーの時間的な位置を狭めることができる。例えば、プログラム12の重要な部分を数回走らせて、その度に制御機構10がシーケンス内の異なる命令において割り込みを送り出すか、あるいは検査システムまたは基準システムにおけるキャッシュの初期内容を変更することができる。
本発明は、異なるレベルの複雑度のシステムと共に機能するように適合化されている。例えば、検査システムは、レジスタの名称変更または同様の技法を利用して性能を高めることができる。あるデータは、一方のシステムではハードウエアまたはソフトウエアのキャッシュに入れ、他方のシステムでは主メモリに入れたり、あるいは一方のシステムにおいて暗示的に表すことができる（状態比較を行うためには、問題のデータの再構築が必要となる）。状態を比較する際、位置ではなく名称によって状態の比較を行うために、基準システムおよび検査システムにおいて比較述語が代理を呼び出す。
本発明の実施形態は数多くある。一実施形態では、基準システム16は、単純なデコードおよび発行インタプリタ（decode−and−dispatch interpreter）であり、一方検査システムは、仮想機械コードのネーティブ機械コードへの動的コンパイルを用いて、同じ入力プログラムを実行する。仮想時間における比較可能点を維持するために、基準システムは、フェッチする各命令毎に仮想時間を増分し、一方検査システムは、動的にコンパイルした各ブロック毎に挿入した計装コード（instrumentation code）を用いて、仮想時間を増分する。比較述語は、各システムが実行中の仮想機械に対する状態のみを比較する。
図２に示す本発明の特に有用な実施形態の１つは、デバッガ・プログラム14を介して、２つの異なるシステム上で実行したいプログラム12から命令を受け取る、ソフトウエア制御プログラム20を利用する。デバッガ・プログラム14は、プログラム12を徐々に走らせることができ、更に当該プログラムを走らせるシステムの状態を、所望の増分幅で検査可能にする手段を備えるように適合化されたいずれかの有用なプログラムとして選択することができる。制御プログラム20は、プログラム12を実行する際に、基準システム16および検査システム15双方の動作を制御する。
本発明のこの実施形態では、検査システム15は、プログラム12の命令を、プロセッサが実行可能な命令シーケンスに動的に変換する変換プログラム13を実行するプロセッサをシミュレートし、プログラム12の命令の結果を得る。デバッガ14を用いてプログラム12を実行する際、制御プログラム20は、プログラム12内のわかっている数、多くの場合多数の、元の命令を、システム16に実行させ、次いでシステム15を用いてこれらの命令の実行を繰り返す。
制御プログラム20は、２つのシステム15および16による実行全体を制御する。本発明を実現する装置を示す図２において、デバッガ・ソフトウエア14は、プログラム12から命令シーケンスを受け取る。プログラム12は、Intel社のX86マイクロプロセッサを利用するコンピュータのような、特定のコンピュータ・システム上で走ることがわかっているものとする。本発明にしたがって設計された制御プログラム20は、デバッガ・ソフトウエア14に対する典型的なコンピュータ・システム・インターフェースを備え、検査システム15および基準システム16への命令の適用を制御する。制御プログラム20は、システム15および16が制御プログラム20に対して行うのと同じインターフェースを、デバッガ・ソフトウエア14に提示する。また、制御プログラム20は、それ自体をシステム15および16とそれらのデバイス18との間に介入させ、外部イベントのロギングおよびやり直しを行う。
仮想時間における比較可能点を維持する方法は多くある。一実施形態では、変換プログラム13によって、プログラム12を、検査システム15上で実行する命令セットに対する命令に変換する。この変換プログラム13と組み合わせたマイクロプロセッサを含む検査システム15は、基準システム16が定義するマイクロプロセッサ上で元々実行するように設計された命令セットのプログラムを実行するように設計されている。元のプログラム12の状態と、変換プログラム13によって変換された命令が同一である、仮想時間における比較可能点の決定を可能にするために、変換プログラム13は、プログラム12の各命令の終了と一致し、したがって２つのシミュレーション・モデル15および16を比較する際に使用可能な比較可能点を指示する、変換中の時点をマップする。制御プログラム20は、システム15および16上で命令シーケンスの実行開始および停止をいつどこで行うかについて決定する際に、これらの比較可能点を探す。
この時間ドメイン・マッピングを用いることに加えて、制御プログラム20は、２つのシステム15および16によるプログラム12の実行中の比較可能点において、２つのシミュレーション・モデル15および16のアドレス空間のマッピングを検出する手段を備える。例えば、システムの一方または他方は、レジスタの名称変更または同様の技法を利用して、処理を加速することができる。２つのシステム15および16を用いて状態の一貫性を検査するために、同一であるべきデータを実際に保持するレジスタを決定しなければならない。同様に、メモリ・データは、一方のシステムではプロセッサ・キャッシュに格納されているが未だメモリに格納されておらず、他方のシステムでは同じデータが主メモリに格納されている場合がある。この場合も、有用な結果を得るためには、正しくメモリ比較を行わなければならない。一実施形態では、制御プログラム20は、その制御の下で、抽象レジスタ（abstract register）またはメモリ名に関して、システムに質問する。検査システムおよび基準システムにおける代理は、抽象名から格納位置への専用マッピング（private mapping）を用いて、所望のデータを与える。
一旦これら２つのマッピングを用意したなら、プログラム12から選択した命令シーケンスは、デバッガ・ソフトウエア14によって、制御システム20に供給され実行される。典型的に、デバッガ・ソフトウエア14は、ユーザが決定した順序でプログラムを実行し、選択した時点における実行モデルの状態を判定する機能を備えるが、一方のシステムまたは他方のシステム上におけるプログラムの間で実行の比較を行う機能はない。デバッガ・ソフトウエア14は、命令シーケンスを制御プログラム20に供給する。制御プログラム20は、この命令シーケンスを基準システム16に供給し、基準システム16は命令シーケンスを走らせる。制御プログラム20は、システム16上でシーケンスの実行を開始する前に、シーケンスの開始時のシステム16の状態を記録する。命令シーケンスがシステム上で実行されるに連れて、制御システム20は、各外部イベントを記録し、タイム・スタンプを付けていく。こうして、制御プログラム20は、コマンド、アドレス、およびあらゆるシミュレートされた入出力デバイス18に転送されるデータを含む各入出力動作、ならびにシミュレートされたデバイス18からシステム16に返される応答を記録する。また、制御プログラム20は、システム16がシーケンスの間に応答する各例外も記録する。
次に、制御プログラム20は、同じ命令シーケンスを検査システム15上で、シーケンスが終了する比較可能点まで実行する。命令シーケンスの実行において、基準システム16に対して記録された外部動作（入出力または例外）が、システム16によるシーケンスの実行から得られた結果のログから利用される。したがって、システム16が入出力動作を発生させた場合、その動作から外部で発生したリターンがシステム15に供給される。このように、リターン値は、基準システム16に供給されるものと同一であるので、検査システム15内における結果は、システム16内における結果と同一のはずである。同様に、システム16が割り込みを受け取った場合、この割り込みは制御プログラム20によって記録され、その後検査システム15に供給されるので、その応答は、検査システム15が正しいのであれば、基準システム16の応答と同一のはずである。システム16によるプログラム12の実行中に記録された外部イベントを用いることによって、第２モデルと正確に機能するデバイスをシミュレートする作業が不要となり、シミュレーションに影響を及ぼす外部イベントが同一であることを保証し、こうして非同期の外部イベントのためにプログラムの実行が変動する可能性を排除する。
このようにして、シーケンスはシステム15上で完了する。次に、２つのシステムの状態を比較する。２つのシステムの状態が、シーケンスの終了時に同一である場合、プログラム12からの第２の命令シーケンスがデバッガ14に供給され、２つのシステム15および16上で実行される。
プログラム12からのいずれかの命令シーケンスの実行によって、比較可能点において検査システムおよび基準システムに異なる状態が生成した場合、実行中において、以前にチェックポイントを設定した比較可能点の内、比較で同一状態が得られたところからプログラム12をやり直す。ここに記載する具体的な実施形態では、プロセスは、先に説明したように、二分探索モードで再度実行する。以前の命令シーケンスの実行をやり直す際、基準システムによる実行の間に以前に記録した外部イベントのログを利用し、双方のシステム上における実行に対する外部イベントのあらゆる変動を除去することが有用である。シーケンスの前半が、中間の比較可能点において同一状態を生じた場合、検査システムおよび基準システムのために命令シーケンスの後半の前半分をやり直す。このシーケンスの部分の二分検査は、２つのシミュレーションの逸脱点を素早く分離するように続けられる。
以上の説明からわかるように、この命令シーケンスの実行におけるエラーの二分検査は、エラー点を非常に迅速に分離する。エラーを分離する探索は、二分探索である必要はない。例えば、状態に一貫性があった最近の比較可能点を発見する際に、プログラムを実行する方が、プログラムを逆に辿るよりも、時間的に負担が少ないのであれば、プログラムの少ない方の部分をやり直し、これによって、エラーを分離するためにプログラムを逆に辿らなければならない回数を減少させる方が速い場合もある。いずれの場合でも、オペレータまたは制御プログラムの制御の下で長さが変動し得る長い命令シーケンスによって、本質的に並列に２つのモデルを走らせることができるので、従来技術で必要な厄介なステップ毎の段階的プロセスを必要とせずに、スレーブ・シミュレーション・モデル（slave simulation model）の非常に迅速かつ高精度のデバッグが可能となる。
以上、好適な実施形態に関して本発明を説明したが、本発明の精神および範囲から逸脱することなく、種々の変更や変形も当業者には可能であることは認められよう。したがって、本発明は以下に続く請求の範囲に関して解釈するものとする。
【図１】
0003654910.tif 000002
【図２】
0003654910.tif 000003
【図３】
0003654910.tif 000004