(例として最初のリンクを使用)
古いHP計算機の動作を複製するには、2つのオプションがあります。
電卓のディスプレイとキーを描画する新しいプログラムを作成します。ユーザーがキーをクリックすると、プログラムは古い電卓の機能を実行します。これはシミュレータです
電卓のファームウェアのダンプを取得してから、電卓のマイクロプロセッサが行ったのと同じ方法でファームウェアをロードして解釈するプログラムを作成します。これはエミュレータです
シミュレータは、デバイスの動作の複製を試みます。
エミュレータは、デバイスの内部動作を複製しようとします。
用語と誤用または混同されることが多いため、これは明確に答えるのが難しい質問です。
多くの場合、エミュレーターは特定のデバイスまたはプラットフォームの完全な再実装です。エミュレーターは、実際のデバイスとまったく同じように動作します。たとえば、NESエミュレーターはCPU、サウンドチップ、ビデオ出力、コントローラー信号などを実装します。NESキャストリッジからの変更されていないコードをダンプして、結果のイメージをエミュレーターにロードして再生できます。
シミュレーターは、デバイス/プラットフォームの部分的な実装であり、独自の目的のために十分に機能します。たとえば、iPhoneシミュレーターは、実際のデバイスのARM CPUおよびCocoa Touch APIではなく、x86とCocoa APIをターゲットとするように特別にコンパイルされた「iPhoneアプリ」を実行します。ただし、シミュレータで実行するバイナリは、実際のデバイスでは機能しません。
どちらも、入力を制御し、出力を観察する何らかの手段を備えたオブジェクトのモデルです。エミュレーターでは、エミュレートしているオブジェクトが生成するものとまったく同じ出力を出力する必要があります。シミュレーターでは、出力の特定のプロパティをオブジェクトが生成するものと同様にする必要があります。
例を挙げましょう。システムに新しいセンサー(温度計など)を追加すると、システムにどのような影響があるかを確認するために、いくつかのシステムテストを行いたいとします。あなたは、温度計がその測定値を含むメッセージを毎秒8回送信することを知っています。
シミュレーション-温度計をまだ持っていないが、このメッセージレートによってシステムが過負荷にならないことをテストしたい場合は、1秒間に8回乱数を送信するユニットを接続してセンサーをシミュレートできます。センサーが送信する実際の値に依存しないテストを実行できます。
エミュレーション-0.001 Cまで測定する非常に高価な温度計があり、最も近い0.5 Cまでしか測定しない安価な温度計でうまくいくかどうかを確認したいとします。高価な温度計を使用して、安価な温度計をエミュレートできます。測定値を最も近い0.5 Cに丸め、温度値に依存するテストを実行します。
これが一般的な意見であるかどうかはわかりませんが、使用目的によって常にこの2つを区別しています。エミュレートされたマシンを出力に実際に使用する場合は、エミュレーターが使用されます。一方、シミュレータは、シミュレートされたマシンを調査したり、その動作をテストしたりする場合に使用します。
たとえば、アプリケーション(汎用CPUで実行されている)でステートマシンロジックを記述したい場合、小さなステートマシンエミュレータを作成します。特定の問題に対するステートマシンの効率または実行可能性を調査する場合は、シミュレーターを作成します。
ソフトウェアおよびシステムエンジニアリングの経験に基づいて、次のように違いを要約します。
シミュレーション:私にとって、これは常にソフトウェア内にあります-実際のシステムのあらゆる側面は、いくつかのコードや数学によってのみモデル化されます。シミュレーションは、実際のシステムの動作を正確に再現(または予測)しようとしますが、近似するだけです。
エミュレーション:シミュレーションとは異なり、実際のシステムの動作を近似するのではなく、実際のシステムの動作をコピーします。エミュレータにはハードウェアが含まれる場合があります。ただし、完全にソフトウェアである場合もあります。例えば。 Sega Genesisのような古いゲーム機用のこれらのソフトウェアエミュレーターを入手できます。それがエミュレーターであるのは、エミュレーターで元のジェネシスコードを実行できるように、実際のジェネシス機能を多くコピーするためです。ジェネシスシミュレーターは元のコードを実行できず、その動作を近似するだけで、元のシステムのモデルがどれだけ優れているかに応じて、同様の結果を生成します。
システムコンポーネントのエミュレータは、エミュレートしているコンポーネントを完全に置き換えて、より大きなシステムに含めることができます-シミュレータは、元のコンポーネントの動作を十分に正確に表現していないためできませんでした。
"エミュレータ"は、ソフトウェアベースのハードウェアシミュレータの用語ですが、一般に2つは同義語です。
ハードウェア開発の世界から来ています。 。 。
シミュレーションは機能をテストします。 2 + 2 = 4など
エミュレーションは、特定の環境(64ビット、16ビット、指とつま先)で機能をテストします。
食品の例を次に示します。
パン2枚、ナイフ1本、ピーナッツバター、ゼリーがあり、それらを幼稚園児に渡します。サンドイッチの作り方を説明します。
シミュレーションでは、プロセスを実行し、瓶を開けたふりをし、ピーナッツバターを広げたふりをします。
指示の最後にピーナッツバターではなくゼリーだけが残っている場合、シミュレーションに失敗したため、指示を修正する必要があります。一方、完全な「サンドイッチ」がある場合、指示は有効である必要があります
エミュレーションでは、実際のパーツ(同じパン、ナイフピーナッツバターなど)の厳密な表現を使用します。幼稚園児に安価なプラスチックナイフと本当に厚いピーナッツバターを与えたらどうなりますか?ナイフはエミュレーションで破損し、この問題に対応するために指示を明確にするか修正する必要があります。この場合、電子レンジでピーナッツバターを温めることをお勧めします。
実際には、プログラミングを行う64ビットシステムと、実際にコードを実行する32ビットシステムを検討してください。 2つの非常に大きな数値を追加して、結果を出力します。シミュレーションではすべてが機能します(2つの数値を追加するコードを正しく取得できました)エミュレーションでは、間違った答えが得られることがわかります。どうした? 32ビットシステムのエミュレーションでは、多数を処理できませんでした。これは正しい機能(例:シミュレーション)の例ですが、ランタイム環境(エミュレーション)の適切なサポートではありません
次に例を示します。最近開発されたシステムのリモート伝送応答時間を測定するシミュレーションモデルを最近開発しました。エミュレーション分析では帯域幅容量をアップグレードするための時間内に答えが得られなかったため、シミュレーションが私たちのアプローチでした。帯域幅のニーズを判断することに主に関心があったため、システムの処理ではなく、主にトランザクションのサイズとボリュームに関心がありました。シミュレーションモデルは、離散イベントプロセスをモデル化するために設計されたスタンドアロンソフトウェア上にありました。質問に答えて要約すると、エミュレーションは一種のシミュレーションです。ただし、この場合、シミュレーションは新しいシステムを完全には表さず、トランザクションのサイズとボリュームのみを表すため、シミュレーションはエミュレーションではありませんでした。
2つのプロセスの間で混乱しました。エミュレータとシミュレータの違いについてこの簡単な説明を見つけました
シミュレーター:
アセンブリプログラムをファイルに記述し、対応するexeファイルの準備ができているとします。シミュレーターは、exeから命令を読み取り、プロセッサーの動作を「最小化」するpcソフトウェアです。
エミュレータ:
エミュレーターは(PCソフトウェア+プロセッサー)です。開発したソフトウェアをリアルタイムでテストして実行時のバグを確認する場合は、プロセッサをターゲットボードに接続できます。使用しないときは、プラグを抜くことができます。プロセッサには、exeファイルをダウンロードして実行するためのPCとのパラレルまたはJTAGインターフェイスがあります。
したがって、シミュレーターの実行が遅いのに対して、エミュレーターは開発されたコードのリアルタイム検証を行うことができます。通常、開発したコードを最初にシミュレータでテストし、次にエミュレータで確認します。
私が間違っているなら許してください。そして、私はこれらの2つの用語に関する調査を行っていないことを前もって認めなければなりません。とにかく...
エミュレーションは、実際の内部動作が何であれ、詳細な既知の結果を持つものを模倣することです。私たちは物事を成し遂げようとするだけで、内部で何が起こるかについてはあまり気にしません。
一方、シミュレーションは、いくつかの既知の動作で何かを模倣して、まだ知られていないものを研究することです。
私の2セント