에뮬레이터란?
에뮬레이터(영어: emulator)는 어떤 하드웨어나 소프트웨어의 동작을 에뮬레이트(emulate, 모방)하는 소프트웨어나 하드웨어를 말합니다.
에뮬레이터의 사용 용도
일반적으로 많이 사용되는 에뮬레이터의 예로는 윈도우 OS의 PC에서 스마트폰의 안드로이드 OS 앱을 실행할 때 필요한 소프트웨어 에뮬레이터를 들 수 있습니다.
하드웨어 에뮬레이터로는 예를 들어 마이크로컴퓨터 탑재 기기의 프로그램 개발 디버깅에 사용되는 에뮬레이터가 있습니다.
에뮬레이터의 원리
컴퓨터의 하드웨어와 소프트웨어는 별개의 것으로 보이지만, 실제로는 같은 내용을 하드웨어로 실행하느냐 소프트웨어로 실행하느냐의 차이일 뿐입니다.
비주얼 프로그래밍 언어나 고급 언어로 만들어진 프로그램도 하드웨어에서 실행하기 때문에 결국 0과 1로 표현되는 기계어로 변환됩니다. 반면 0과 1만을 다룰 수 있는 하드웨어의 내부 회로는 모두 드 모르간의 법칙을 실현하는 논리연산 회로로 구성되어 있으며, 수치 연산도 모두 같은 회로로 처리됩니다.
즉, 소프트웨어와 하드웨어 모두 0과 1의 논리 연산을 조합한 처리를 서로 다른 구현 방식으로 수행한다는 뜻입니다. 이는 컴퓨터에 연결된 주변기기들도 마찬가지이며, 모든 디지털 기술의 근간을 이루고 있습니다.
에뮬레이터의 종류
1. 소프트웨어 에뮬레이터
Windows OS에서 Android OS의 앱을 실행하고 싶은 경우, 두 OS에서 모두 동작할 수 있는 고급 언어로 개발된 소프트웨어는 양쪽에서 모두 실행할 수 있습니다. 하지만 어느 한 쪽의 앱 개발 환경 위에서 개발된 경우 다른 쪽 OS에서 제대로 동작하지 않을 수 있습니다.
이런 경우, 예를 들어 안드로이드 OS의 앱과 윈도우 OS의 앱 사이를 에뮬레이터 소프트웨어로 보완하면 정상 동작이 가능하지만, 에뮬레이터를 통해 실행하기 때문에 동작 속도는 느려집니다.
또 다른 예로는 같은 OS에서도 서로 다른 브라우저 간을 연결하는 에뮬레이터 소프트웨어도 있습니다. 예를 들어 인터넷 익스플로러용으로 만들어진 페이지를 엣지(Edge)로 열람하는 경우에 사용된다. 이 경우에도 에뮬레이터의 프로그램 처리를 거치기 때문에 동작 속도가 느려집니다.
2. 하드웨어 에뮬레이터
마이컴 탑재 기기용 소프트웨어 개발에 사용되는 하드웨어 에뮬레이터 중 하나로 ICE(영문: In Circuit Emulator)가 있는데, ICE는 미국 인텔사의 등록상표이지만 타사 제품도 ICE로 불리기도 합니다.
소프트웨어 디버깅 시에는 마이크로컴퓨터나 주변기기 내부 상태를 확인하면서 진행해야 하는데, 일반적인 마이크로컴퓨터의 내부 상태는 외부 단자에서는 거의 알 수 없tmqslek. 그래서 마이컴과 동일한 동작을 하면서 내부 상태를 외부로 출력하는 단자를 가진 에뮬레이션 칩을 만들어 마이컴을 대체한 하드웨어가 바로 ICE입니다.
ICE에서는 마이컴 내부 메모리를 추적하는 외부 메모리를 연결하거나, 프로그램 실행을 임의의 지점에서 정지(브레이크)시켜 내부 상태를 확인하는 브레이크 포인트를 설정하는 등의 작업을 할 수 있습니다.
3. 기타 하드웨어 에뮬레이터
하드웨어 에뮬레이터는 임베디드 소프트웨어의 디버깅 외에도 고장 등으로 사용할 수 없게 된 컴퓨터에서 동작하는 소프트웨어를 실행하고 싶을 때 사용할 수 있는 에뮬레이터도 있습니다.
에뮬레이터의 기타 정보
1. ICE 사용 시 포인트
ICE의 기능을 사용하기 위해서는 하드웨어를 단계별로 직접적으로 움직일 수 있는 프로그램이 필요하기 때문에 마이컴 제어용 소프트웨어 개발 현장에서는 C언어가 주로 사용됩니다
고급 언어일수록 프로그램 개발이 쉽고 프로그램 길이도 짧지만, 실제 마이크로컴퓨터 ROM에 기록될 때는 C 언어로 작성된 프로그램이 코드 크기가 더 작아집니다.
이는 C 언어가 어셈블러에 가까운 수준으로 작성할 수 있기 때문이며, 이를 통해 ROM 용량을 줄이고, 단계가 줄어들어 실시간성이 향상되며, 주변 하드웨어를 정밀하게 제어할 수 있습니다.
2. 하드/소프트 혼재형 에뮬레이터
에뮬레이터의 원리를 따르면, 하드웨어와 소프트웨어가 혼합된 하이브리드 에뮬레이터의 구현도 가능합니다. 예를 들어, 컴퓨터 전체를 모방한 하이브리드 에뮬레이터에서 신규 개발 중인 OS를 실행하여 디버깅할 수 있습니다.