コンピュータサイエンスでシミュレーションおよびエミュレーションをよく見ます。これらの2つの用語は同義に見えます。 シミュレーションとエミュレーションの間に違いはありますか?
はい、概念は異なります。
simulation
は、他の動作に似ているが、まったく異なる方法で実装されているシステムです。これは、システムの基本的な動作を提供しますが、シミュレーションされるシステムのすべてのルールに必ずしも準拠しているとは限りません。何かがどのように機能するかについてのアイデアを与えるためにあります。
例
例としてフライトシミュレータを考えます。飛行機を操縦しているように見えますが、飛行機を操縦する現実から完全に切り離されており、必要に応じてこれらのルールを曲げたり破ったりすることができます。たとえば、エアバスA380を壊さずにロンドンとシドニーの間で逆さまに飛行します。
emulation
は、他の何かのように正確に動作するシステムであり、エミュレートされるシステムのすべてのルールに従います。これは事実上、エミュレートされたシステムの入力と出力とバイナリ互換性があるまで、別のシステムの完全な複製ですが、元のエミュレートされたシステムの環境とは異なる環境で動作します。ルールは固定されており、変更できないか、システムが失敗します。
例
M.A.M.E。 システムは、この前提に基づいて構築されています。長い間忘れられていた、ほぼ完全にハードウェアに実装された、またはハードウェアシステムのファームウェアに実装された古いアーケードシステムは、可能な限り最高のスコアに達したときに発生する元のバグやクラッシュにまでエミュレートできます。
A シミュレーションは、他のもので構成されたモデルであり、その機能の一部を再現し、他は除外します-クエリに関連する機能を保持し、無関係な機能は除外したいことは明らかです。
たとえば、早朝の通勤交通量のシミュレーションでは、通勤者の名前は除外され、場合によってはそのID(実際のCommuter
オブジェクトのセットではなくカウンター変数を使用)も除外されますが、到着率は無視できません。 。
エミュレーションは、ソフトウェア自体を変更せずに、プラットフォームBでプラットフォームA用に作成されたソフトウェアXの実行です。これには、B上で実行されるAのモデルを構築する必要があり、明らかに、コード実行を含むAに関するすべてをモデル化する必要があります。 (理論的には、この特定のソフトウェアが使用しないことを知っているオペコードのサポートを省略できますが、それはまれです-エミュレータを実行することは大変な作業であり、徹底的な作業を行い、再利用可能なものを用意するよりもはるかに価値がありますこれはSでのみ機能します。)
どちらも何か他の仕事をしていることを意味します。
違いは、「シミュレーション」は意識的レベル(ユーザーに関して)で発生し、通常は現実そのものに触れることなく現実の結果を予測するために確定されます。
「エミュレーション」は無意識レベルで発生し、基になるコンポーネントを、ユーザーに関しては古いコンポーネントとして機能する別の別のコンポーネントに置き換える目的があります。
つまり、シミュレーションは「並列世界」で発生し、エミュレーションは「置換された世界」で発生します。
技術的には、どちらも同じように動作します。つまり、本物であるかのように動作する環境で何かを実行します。
ただし、概念的には重要な違いがあります。
シミュレーションは、現実世界からある程度切り離されているはずです。シミュレーションの出力は、シミュレーションするものに直接接続されていません。たとえば、航空機のシミュレータは実際には飛行せず、パイロットは実際に実際の航空管制官と通信していません。
simulationには通常、安全な環境で実際のプロセスをテストまたは予測するgoalがあります。シミュレーションが現実の世界から切り離されているため、実際に悪いことは起こりません(墜落した航空機シミュレーターは、実際の人を殺すことはありません)。
対照的にエミュレーションは、本物に代わる目標を持っています。たとえば、より洗練されたプログラマブルCPUを使用して単純なマイクロコントローラーをエミュレートする場合、そのCPUをオリジナルのマイクロコントローラー;あるマシンに物理的に接続され、実際にはマイクロコントローラーと同じようにそのマシンを制御します。
エミュレーションのgoal(== --- ==)エミュレーションは、元のモジュールが利用できない場合にハードウェアまたはソフトウェアコンポーネントを同等の機能で置き換えることです(または維持するだけでは高額になります)。エミュレーションは、ハードウェアをより柔軟に使用するという目的にも役立ちます。同じプログラマブルマイクロコントローラーは、必要に応じてエミュレーションモードを切り替えて、いくつかの単純なコントローラー用に2倍にすることができます。
語源は厳密には正確ではありませんが、「感じなければならないものを想像できる」同情と「感じていることを知っている」共感の違いについて考えてください。シミュレーションには問題の視覚的な表現が含まれる場合がありますが、含まれない場合があります。たとえば、何かのために並んでいる人の数、総収益、または平均速度を表す数字の列を出力するだけかもしれません。現実と一致する特性とそうでない特性があります。
あるプラットフォームのふりをして別のプラットフォームのコンテキストでよく使用されるエミュレーションは、はるかに完全です。そのため、Windows Phone開発者は、エミュレーターのWindowsマシンで電話アプリを実行またはデバッグできます。エミュレーターは、電話のように見え、同じように動作します。古いCommodore 64ゲームをエミュレーターで実行することもできます。
言葉は正確ではありません。私の意見では、ほとんどのフライトシミュレータはエミュレータに似ていますが、その名前は、それほど没入型ではなかった頃から付いています。一部の人々は、クロスプラットフォームのケースのためにWordエミュレーターを予約し、それ以外のもののためにそれを拒否します。話すときに同じことをしたとしても、決して間違っているとは思われないでしょうが、一部の人々は2つの単語の境界を少し異なるように配置し、誰かが「これはエミュレーションである」と言ったときに本当に正確で完全なシミュレーション。
どちらの用語も概念がよく似ています-模倣。
シミュレーションまたはシミュレータは、ソフトウェアを利用して、基礎となるコア機能(特に基本的な方法論)に関してターゲットモデルと非常に類似した複製システムを生成します。
一方、エミュレータは、ターゲットシステムと比較して、外部の類似性により重点を置いています。機能がどのように模倣されるかについての懸念は最小限です。エミュレーターは、通常、元のシステムとは完全に異なる環境(たとえば、異なるオペレーティングシステム)で作業するときに使用されます。