게임 중에 시뮬레이션 게임들이 있죠.
그 시뮬레이션 게임들은 실제 상황을 시뮬레이션 해서 만드는 것입니다.
즉, 실제와 완전히 똑같을 필요까지는 없고 시뮬레이션하는 대상이 지니는 주요 특성만을 
재현해주면 되는 것입니다.
비행 시뮬레이션 이라면 하늘을 나는 것처럼 3D표현으로 화면에 보여주고
하늘을 나는 것처럼 조작할 수 있게 해주면 되는 것이죠.
물론 실험용 시뮬레이션이라면 바람이나 기후에 의한 영향이라던지
기체의 상태에 의한 영향 같이 더 자세한 특성들을 재현해줘야 하는 것이지만
그렇다고 해서 모든 것(화면 모습의 텍스쳐를 실제 현실처럼 자세하게 해줘야 한다거나 하는...)을
재현할 필요까지는 없습니다. 
심지어는 어떠한 시뮬레이션의 경우는 단순히 그 상황에 대한 관측 수치만 제공하는 경우도 있습니다.

그에 반해 에뮬레이터는 재현고자 하는 대상을 완벽하게 재현하는 것이 목표입니다.
어떠한 PDA를 에뮬레이션 하려고 한다면 PDA에 사용된 cpu가 처리할 수 있는 명령어들을
그대로 처리할 수 있는 가상의 cpu를 구현해야 하고 PDA에 사용된 디스플레이와 같은
해상도에서 PDA와 동일한 성능으로 PDA에서 돌아가는 프로그램을 사용할 수 있어야 합니다.
간단히 말하자면 에뮬레이터는 어떠한 하드웨어를 소프트웨어 적으로 재구현하는 것이죠.
(유사하게 하드웨어 -> 하드웨어는 짝퉁(카피) (중국의 짝퉁 자동차나 짝퉁 mp3같은... ) 
소프트웨어 -> 소프트웨어는 클론( 네이트온을 대신하는 Jateon 같은... )
소프트웨어 -> 하드웨어는 생각이 안나는군요. (이러는 경우가 있기는 하던가요;;)
이라고 할 수 있겠습니다. )

그리고 그 설명에서는

"시뮬레이터는 하드웨어도 포함할 수도 있지만
에뮬레이터는 소프트웨어적으로만 구현하는 것을 의미한다."

라고 이해하시면 될거 같습니다.
저 차이는 두가지를 완벽하게 구분하는데 사용하기는 힘든 특성이죠.

즉, 시뮬레이션은 소프트웨어적, 하드웨어적, 혹은 소프트웨어+하드웨어 등을 동시에 사용하여
어떠한 상황에 대한 자세한 데이터를 수집하거나 보여주는 것이 목적이고,

에뮬레이션은 어떠한 하드웨어를 소프트웨어적으로 구현하여 대상 하드웨어를 사용하는 것과
동일하게 사용하는 것이 목적이라고 할 수 있겠습니다.

============================================================

에뮬레이션은 진실값으로 대체 하는 거고, 시뮬레이션은 모델링 한 적절한 값으로 대체 하는 겁니다.
어떤 시스템을 모델링 한다는 것은 그 시스템과 100% 일치되지는 않지만 주요 특징을 살리는 결과물을 
만들어 내는 것입니다.따라서 "xxx 를 시뮬레이션 해보자" 하는 것은 xxx 의 주요 특징을 모델링 하고 (주로 수식으로)
거기에 입력을 가한 후 출력을 보는 것입니다.
에뮬레이션은 100% 동일해야 합니다. 현실에서 어려운 경우가 많죠.

과거에는 프로그래밍 할 때 에뮬레이터나 시뮬레이터를 사용했습니다.
가령 8086 이나 Z80 을 개발한다면 해당 에뮬레이터를 구입해서 (노트북 만하게 생겼습니다.)
개발중인 보드의 cpu 대신에 에뮬레이터 소켓을 꼽습니다.
그러면 이제 부터 에뮬레이터가 해당 cpu 를 대신 합니다.
에뮬레이터를 작업 pc 에 연결해서 작업합니다.
cpu 내부 실행되는 상황파악은 물론, 각 핀들을 물리적으로 컨트롤합니다. cpu 와 완전 동일한 거죠.

에뮬레이터가 비싸서 어려움이 있다면 시뮬레이터를 구입합니다. 이것은 소프트웨어의 일종입니다.
작업 pc 에서 소프트웨어를 구동하고 target cpu 를 프로그램적으로 하나 만들어 내서 
내가 작성한 코드를 실행해 주죠. 물리적인(전기적인) 동작은 할 수 없고,
프로그램의 논리관계만 검증합니다.

지금 주류가 된 ARM mcu 도 초기에는(2000년대 초반 ???) arm 에서 판매하는 500만원짜리 에뮬레이터를 
가지고 작업했습니다. 지금은 그거 없어도 무관한 것 같은데요....ㅎㅎㅎ.

Posted by cyj4369
,