Bochs 및 QEMU와 같은 에뮬레이터의 작동 방식을 연구 중이며 질문이 있습니다. x86 호스트에서 x86 게스트 운영 체제를 에뮬레이트하고 게스트가 레지스터 (예 : mov eax 3)를 할당하는 일부 명령을 실행하면, 에뮬레이터가 실행하는 코드에서 실제 하드웨어의 eax 레지스터에 실제로 값이 할당된다는 보장이 있습니까?QEMU는 x86 에뮬레이션 용 게스트 레지스터와 동일한 호스트 레지스터를 사용합니까?
QEMU 프로세스는 자체 프로세스이므로 (일반 용도의 레지스터를 다른 프로세스와 공유 할 필요가 없으므로) 그리고 호스트와 게스트 아키텍처는 동일하므로 동일한 범용 레지스터를 사용합니다.
또한, 나는 두 개의 명령어가 그 QEMU에서 프로그램을 실행 인 경우 : 그것은 이렇게하면 변경하지 않을 것이라고 판단 할 수 있다면
mov eax 3
add eax 2
그것은 단지 하나의 mov eax, 5
명령으로 두 가지를 결합 할 것인가를 프로그램의 각 명령 대신에 명령 블록을 개별적으로 실행하여 프로그램을 실행하기 때문에?
여기서는 하드웨어 가상화가 아닌 순수한 에뮬레이션 (Bochs 또는 non-KVM QEMU)을 언급합니다.
을 86 또는 64에 86를 모방의 특정 경우, 예, 그것은 가능성이 높다. 프로세서에는 자체 프로세서를 구현하는 것보다 쉽게 구현할 수있는 기능이 내장되어 있습니다. 작업 상태 전환. 그러나 두 번째 부분은 에뮬레이션보다 코드 최적화에 더 중점을 둡니다. 아닙니다. 에뮬레이터는 절대로 스왑을 선택하지 않습니다. 잠재적으로 모든 종류의 것들을 망칠 수 있습니다. –
non-kvm'qemu-x86_64-static'은 x86 에뮬레이션에서 특별한 경우가 아니라면 전혀 다른 코드를 생성합니다. 놀랍게도'mov '+'add' 조합을 최적화하는 것이 현명합니다. 'qemu-x86_64-static -d in_asm, out_asm test.elf'를 사용하여 실행할 수 있으며 직접 확인하십시오. – Jester
BOCHS는 디스패치 루프가 있고 동적 재 컴파일이없는 순수한 인터프리터 에뮬레이터입니다. "Bochs가 어떻게 작동하는지 보는 방법"링크 (사이트의 첫 페이지에 있음) (http://bochs.sourceforge.net/). 적어도 에뮬레이션 방법에 대해서는 최대한 빨리 실행하는 멋진 트릭을 사용합니다 . –