2009年10月20日

エミュレータとシミュレータ

エミュレータとシミュレータという用語の使い分けについて、私自身もいろいろ混乱していたところがあったので、ここでもう一度考えてみようと思います。



まず辞書的な意味を考えてみると、エミュレータとは模倣、シミュレータとは再現を行う、ハードウェアあるいはソフトウェアのことだと考えられます。模倣や再現の対象は、コンピュータに限らず、一般の機械や物理現象などいろいろなものが考えられますが、ここではひとまずコンピュータのハードウェアに限定します。

ICE (In-Circuit Emulator) と言うように、組み込みなどのハードウェアに近い世界では、一般的にエミュレータと言った場合には、専用ハードウェア(による模倣)のことを差すようです。この意味でのエミュレータは、主に開発目的のために使用されます。

(ただし、CPU の周波数が高くなりすぎた現在では、もはやデバッグ専用チップ (エバチップ) によるCPU のエミュレーションは不可能なので、JTAG などの CPU のデバッグ機能を使用するのが一般的です。そのため、専用ハードウェアによる ICE を「フルICE」と区別して呼んだりするので、またややこしいのですが。)

ここで問題になってくるのは、いわゆるパソコン用語としても「エミュレータ」という用語があることです。こちらは、例えば PC-98 などの古いハードウェアや、現在では入手困難なゲーム機などのソフトウェアを、現在の PC などの上で動かすという目的のために使用されます。開発目的では無いので、ずっと要件は緩く、通常は全てソフトウェアだけでエミュレーションが行われます。

私もどちらかというと、PC 用語のエミュレータ (ソフトウェア) の方に馴染みがあったので、入社したばかりの頃は、先輩たちと用語の使い方が噛みあわなくて苦労した記憶があります。

twitter での takeoka さんの発言がわかりやすいと思われるので引用させていただきます。
シミュレーションを実行するのに特別なハードウェアと組み合わせたものが、エミュレータ。昔は、そう決まっていた。> @oza_x86 線引きをどの辺りに持ってらっしゃるのですか? > エミュレータとシミュレータ
http://twitter.com/takeoka/status/4601788460

なにかの振りをするのはすべてシミュレーション。シミュレーションの方が概念が広い。特殊ハードウェアが必要な場合のみエミュレーション、昔は。 世界中で、一般人に間違った方が広まってしまった。計算機の一般化による弊害。
http://twitter.com/takeoka/status/4602140652

他の参考リンク

http://twitter.com/takeoka/status/4601445853
http://twitter.com/takeoka/status/4602160637
http://twitter.com/takeoka/status/4602213203

(ここでは直接は関係ありませんが、takeokaさんは、VMWareのように、機械のシミュレータやエミュレータを「VM」と呼ぶ最近の用語の使われ方にも強い違和感をもたれているようです。)

私自身は、

- シミュレータは再現さえできれば良いので、速くても遅くても、正確に再現できて使い物になれば良い。(ソフトウェアでも大丈夫な場合が多い。)
- エミュレータは、外部的な振る舞いを模倣しないといけないので、実機と同じ速度で動かないといけない。(ソフトウェアだけで行う場合は、速度差がかなりないと厳しい。)

という実時間性がキーワードかと思っていました。昔は専用ハードが無いとエミュレートできなかったものも、今では PC が速くなって、例えば QEMU のようなバイナリ互換レベルのシステムエミュレーションならば、ソフトウェアだけでも十分実用的な速度で可能な場合が増えてきたので、用語が拡大解釈されるようになってきたのだろうと。

しかし、ホストが早すぎればこんどはターゲットの速度に合わせるのが困難になるわけなので、速ければ再現できるというわけでもないわけです。つまり、本物のエミュレーション (クロックレベル) を行うためには、特殊なハードウェアによるサポートが本来は必要で、現在のエミュレーションという用語はかなり拡大解釈されて使われている、ということなのでしょうか。

トラックバックURL

トラックバック一覧

1. [常識][組み込み]シミュレータとエミュレータ  [ C_memo(5) ]   2009年10月20日 19:27
物事の動作をコンピュータ上で仮想的に実現する技術。 フライトシミュレータなど。 新しいCPUを開発する場合にハードの開発と平行してソフトを開発しなきゃならないが、 このようなときは、実在しないCPUをソフト的に構築して、 コンピュータ上に仮想的に構築された別のコン

コメント一覧

1. Posted by n   2009年10月30日 15:08
ターミナルエミュレータの時代からハードウェアのソフトウェアエミュレータをエミュレータと呼んでたはずですが(1987年にいくつかの本で使われているのを確認)、それより前の話なんでしょうかねぇ>昔は
2. Posted by 若槻   2009年11月02日 09:42
確かにターミナルエミュレータは微妙ですが、VT100 のシミュレーションをしているわけではないので、エミュレータと呼んでいるのかもしれません。機能互換であれば良いという意味で。

コメントする

名前
 
  絵文字
 
 
記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード