시뮬레이션 vs 애뮬레이션

💡가상화 기술에 관해 공부하면서 시뮬레이션과 애뮬레이션의 정확한 차이를 잘 모르겠어서 포스팅을 작성한다.

시뮬레이션

sim.png

먼저 생각난 부분은, 왜 게임들에선 애뮬레이터라는 용어를 쓰지 않고 시뮬레이터라는 용어를 사용할까란 점이었다.

시뮬레이션이란, 어떤 시스템이 구조적으로 완전히 동일하다고 볼 수 없는 다른 시스템의 작동을 흉내내어 같은 일을 하도록 하는 것을 의미한다.

간단하게 예시를 들자면, 만약 유로 트럭 시뮬레이터에서 겉으로 보여지는 부분만 흉내내는게 아니라, 타이어 마찰, 엔진 구동 방식, 유리를 통과하는 빛의 굴절, 흙의 튐을 비롯하여 원자단위의 모든 물리 연산을 진행하는 것과 같이, 실제 지구의 모든 것을 그대로 구현한다면 애뮬레이터라고 부를 수 있을 것 같다.

그러나 시뮬레이터는 그 모든 것을, 프로그램으로 따지면 CPU를 소프트웨어적으로 구현하거나(각종 instruction 및 레지스터 등) 하진 않는다. 겉으로 보여지는 부분만 흉내내기 때문에 그렇게 세부적으로 구현할 필요가 없다.

이처럼 시스템의 기반이 되는 보여지지 않는 모든 부분까지 모방하진 않고, 겉으로 보여지는 부분만 흉내낸것을 시뮬레이션이라고 한다.

애뮬레이션

emu.png

시뮬레이션에서 살펴봤다시피, 시스템의 모든 부분(하위 소프트웨어부터 하드웨어까지)을 다른 시스템에 완전히 동일하게 구현한다면 그것은 애뮬레이터라고 한다.

위 사진은 teensy 보드에서 atari 게임 애뮬레이터로 로보캅 게임을 실행한 것이다. 애뮬레이터는 CPU의 연산과 메모리 참조 등 모든 부분을 그대로 구현해 놓았기 때문에 atari게임기와 호환되는 atari 게임에 해당하는 ROM파일을 그대로 애뮬레이터에서 바로 실행할 수 있다.

결론

Virtual Machine은 애뮬레이터인가? -> 그렇다고 볼 수 있다. 가상머신은 애뮬레이터로 간주될 수 있다. Container는 애뮬레이터인가? -> 아니다. 호스트 OS의 커널을 공유하여 따로 운영체제를 애뮬레이트 하지 않기 때문에 애뮬레이터라고 볼 수 없다.