私はBochsやQEMUのようなエミュレータがどのように動作し、問題があるかを研究しています。つまり、x86ホスト上でx86ゲストOSをエミュレートして、ゲストがレジスタを割り当てる命令(例えばmov eax 3)エミュレータが実行するコードで実際のハードウェアのeaxレジスタに値が実際に割り当てられることは保証されているのでしょうか?QEMUは、x86〜x86エミュレーションのゲストレジスタと同じホストレジスタを使用しますか?
QEMUプロセスは独自のプロセスであるため(他のプロセスと汎用レジスタを共有する必要がないため)、またホストとゲストアーキテクチャは同じであり、したがって同じ汎用レジスタを有する。私は2つの命令があるQEMUでプログラムを実行することだった場合
また、:
mov eax 3
add eax 2
を、それはそうすることが、プログラムの変更しないだろうと判断することができれば、それは1つだけmov eax, 5
命令に2を組み合わせただろう個々の命令の代わりに命令のブロックを実行することによってプログラムを実行するので、実行は不要ですか?
ここでは、ハードウェア仮想化ではなく、純粋なエミュレーション(Bochsまたは非KVM QEMU)を指しています。
をx86またはx64上のx86をエミュレートするの特定の場合には、はい、それは可能性が高いです。プロセッサには、独自のプロセッサを実装するよりも簡単な機能が組み込まれています。タスク状態の切り替え、1つ。しかし、2番目の部分は、エミュレーションよりもコードの最適化に向いています。エミュレータはそのスワップを決して選択しません。潜在的にあらゆる種類の事柄を破る可能性があります。 –
non-kvm 'qemu-x86_64-static'は、x86エミュレーションでx86を特別な場合はありませんが、まったく別のコードを生成します。意外なことに、 'mov' +' add'の組み合わせを最適化するのに賢明です。あなたは 'qemu-x86_64-static -d in_asm、out_asm test.elf'を使ってそれを走らせることができます。 – Jester
BOCHSはディスパッチ・ループを持つ純粋なインタプリタ・エミュレータであり、動的再コンパイルはありません。 Bochsがどのようにボンネットの下で動作するのかを見てください。[サイトのトップページ](http://bochs.sourceforge.net/)。少なくともエミュレーション方法については、できるだけ早く実行するためのクールなトリックを使用します。 –