검수요청.png검수요청.png

에뮬레이션

해시넷
이동: 둘러보기, 검색

에뮬레이션(emulation)은 어떤 계산기가 다른 종류의 계산기용으로 작성된 프로그램을 특별한 기구와 프로그래밍 기법을 이용하여 그대로 실행할 수 있도록 하는 것을 이른다.[1]

개요[편집]

에뮬레이션은 컴퓨터 또는 기타 여러 주변 장치의 기능을 다른 컴퓨터에서 구현하는 것을 의미한다. 에뮬레이션을 하는 장치 또는 프로그램을 가리켜 에뮬레이터(emulator)라고 한다. 새로운 정보 기술이 출현할 때마다 이전의 프로그램에 대한 소스 코드를 입수할 수 있거나, 이전의 프로그램을 그대로 재현할 수 있을 만큼 충분히 상세한 문서화가 이루어지거나, 또는 최신 버전과 이전 버전의 호환을 돕는 연계 소프트웨어가 있다는 보장을 전제로 한다. 그러나 이러한 전제들이 현실적이지 않다는 점이 이 선택을 유일한 해결책으로 단정하기 어렵게 하는 제약이다.[2] 에뮬레이션은 서로 다른 기종의 프로그램 호환성을 갖게 하기 위한 수단이다. 대상에 대한 소프트웨어 모델을 만들고, 그것을 계산기로 작동하여 그 상태를 시뮬레이트하는 프로그램 시뮬레이션의 일종이라고도 생각할 수 있지만, 에뮬레이터는 보통 마이크로 프로그래밍 기능 등에 의해 고속화를 꾀하고 있다. 예를 들면 마이크로 컴퓨터를 개발하는 경우 등에 마이크로 컴퓨터(MDS) 개발 시스템의 일부로서 강력한 디버깅 루트를 제공하며, 과대한 진단 장치나 진단 프로그램은 불필요하다.[1]

종류[편집]

소프트웨어 에뮬레이션[편집]

소프트웨어 에뮬레이션은 원래 하드웨어적으로 수행되는 작업을 소프트웨어로 흉내 내어 처리하는 것을 의미한다. 예를 들어 부동 소수점 연산을 처리하기 위해 CPU에 부동소수점 연산회로를 내장하는 대신 마이크로 프로그래밍을 이용하여 소프트웨어적으로 처리하는 경우, 대개 처리 속도는 늦어지나 가격은 그만큼 떨어진다.[3]

하드웨어 에뮬레이션[편집]

하드웨어 에뮬레이션은 원래 하드웨어와 똑같은 성능을 내도록 처리하게 만들어 회로 내에서 디버깅이 용이하게 한다. 개발 작업의 효율성을 극대화시킨다. 예로는 인서킷 에뮬레이터 등이 있다.[3]

터미널 에뮬레이션[편집]

터미널 에뮬레이션이란 스마트 터미널의 일종으로 볼 수 있는 PC를 마치 덤 터미널처럼 동작하게 함으로써, 메인 프레임이나 나름대로 고유의 접속 인터페이스를 가지고 있는 컴퓨터와 상호 작용하는데 사용될 수 있게 하는 능력이다. 터미널 에뮬레이션을 사용하면, PC 사용자들은 메인 프레임에 로그온하여, 메인프레임 운영 체계 하에 있는 프로그램들에 직접 액세스할 수 있다. 터미널 에뮬레이션 기능을 사용하려면, PC나 PC가 접속되어 있는 랜 서버에 특수한 프로그램을 설치해야 한다. 대체로, 메인 프레임 컴퓨터를 사용하는 기업들은 자사의 모든 PC나 랜 서버에 터미널 에뮬레이션 프로그램을 설치한다. 사용자들은 윈도우 운영체계를 이용해 스스로 작업하면서, 또 다른 창을 열어 메인 프레임의 응용프로그램을 실행시킬 수 있다. 터미널 에뮬레이션 프로그램은 다른 응용프로그램들처럼 사용자에게 별도의 창을 제공하는 독립된 프로그램 작업처럼 실행된다. 그러나 일부 특정한 메인 프레임 운영 체계나 애플리케이션 인터페이스를 위한 터미널 에뮬레이션 창은 GUI 콘텐츠 대신에 텍스트만을 표시하는 경우도 있다. 예를 들어, IBM 3270 디스플레이 터미널 또는 AS/400의 5250 디스플레이 터미널 등과 같이, 갖가지의 터미널 에뮬레이션 기능이, 특유한 형태의 터미널들을 위해 필요해진다. 터미널 에뮬레이션을 수행하는 프로그램은 데이터 링크 제어나 세션 제어를 포함한 일부 통신 계층에 있는 메인 프레임으로부터 들어오는 데이터 스트림을 이해해야만 한다. 예를 들어, 원격 다이얼업이나, 전용 회선, 또는 ISDN 등과 같이, 터미널 에뮬레이션 프로그램을 이용하는 PC가 메인프레임에 어떻게 접속되느냐에 따라 특별한 하드웨어가 필요할 수도 있다.[4]

게임 에뮬레이션[편집]

닌텐도 스위치 게임 애플 M1 맥

개발자 Daeken는 닌텐도 스위치(Nintendo Switch) 게임을 애플 M1 맥에서 실행하는 영상을 업로드하였다. 애플의 메탈 그래픽 프레임 워크에 벌컨을 매핑하는 방식으로 에뮬레이션하는 방식이었다. 그는 슈퍼 마리오 오디세이가 맥OS 빅 서(MacOs Big Sur)에서 구동되는 것을 보여 주었다. 아직은 기술적인 한계 때문에 게임 실행 후에는 완벽하게 구동되는 모습은 모습은 아니었지만 그는 젤다의 전설 브레스 오브 더 와일드(Breath of the Wild)도 설치한 모습도 보여 줬다. 덕분에 이 영상은 많은 닌텐도 유저와 애플 M1 유저들에게 관심을 받고 있다. 이처럼 닌텐도 스위치 게임이 애플 M1 맥에서 에뮬레이션 될 수 있는 이유에 대해서 8비트는 '닌텐도 스위치가 ARM 프로세서로 구동되기 때문에 에뮬레이팅이 쉬운 것으로 보인다'라고 설명했다. 그렇지만 닌텐도가 자사 게임의 에뮬레이션을 반대하고 있기 때문에 실제로 닌텐도 스위치 게임을 이러한 에뮬레이션 방식으로 만나기는 쉽지 않을 것 같다. 다만 이러한 사례들을 ARM 아키텍처 기반의 애플 M1의 확장성을 다양하다는 것을 확인할 수 있는 사례라고 할 수 있는데, 이미 아이폰과 아이패드 앱들의 실행가 가능해진 애플 M1을 탑재한 맥들에서 앞으로 어떤 일들이 일어나게 될지 기대가 되는 부분이라고 할 수 있다.[5]

맥OS 빅 서 11.3에서 아이폰/아이패드 앱을 위한 게임 컨트롤러

맥OS 빅 Sur 11.3 베타, 애플(Apple)은 정제 및 방식 개선되었다. 아이패드(ipad)와 아이폰(iphone)에서 실행되는 앱은 M1 맥을, 최신 베타, 애플은 키보드나 게임 컨트롤러와 같은 기능에 키보드와 마우스 콤보를 허용하고, M1 장치에 대한 게임 컨트롤러 에뮬레이션을 추가했다. 새로운 게임 컨트롤러 기능은 맥루머스(MacRumors) 기고자인 스티브 모저(Steve Moser)가 발견했다. ‌아이폰 또는 ‌아이패드 앱을 실행할 때 기본 설정을 열면 터치 기반 ‌아이폰 및 ‌아이패드 앱을 맥 컨트롤로 더 잘 실행하는 데 사용할 수 있는 Touch Alternatives 및 게임 컨트롤 인터페이스가 나타난다. 컨트롤러 에뮬레이션을 켜면 일반 게임 컨트롤러 버튼이 키보드 키와 마우스 버튼에 매핑된다. 예를 들어 X는 Q에 매핑되고 방향 스틱은 WASD에 매핑되고 Y는 E에 매핑된다. L1과 L2는 각각 탭(Tab)과 시프트(Shift) 키를 눌러 액세스할 수 있으며 스페이스 바는 A 버튼이다. 컨트롤러 에뮬레이션을 사용하면 컨트롤러 지원이 내장된 아이폰 및 ‌아이패드 게임을 ‌M1‌ 맥에서 실행할 때 키보드 및 / 또는 마우스로 정확하게 제어할 수 있다. 이 기능은 게임 컨트롤러가 없는 사용자를 위해 설계되었으며, 컨트롤러를 연결하기만 하면 플레이할 수 있다. 맥OS 11.3 빅 서 베타에는 (Tap), 스와이프(Swipe), 드래그(Drag) 및 틸트(Tilt)와 같은 터치 기반 기능을 키보드 키에 매핑하기 위한 터치 대체(Touch Alternative) 패널도 포함되어 있으며 ‌아이폰 및 ‌아이패드 앱 창을 더 크게 만드는 기능이 있다. 컨트롤러 에뮬레이션 및 터치 대안은 서로 독립적으로 작동하며, 이러한 기능 중 하나만 한 번에 활성화할 수 있다. 게임 컨트롤러 지원과 관련하여 소니(Sony) 및 마이크로소프트(Microsoft)의 많은 현재 컨트롤러는 ‌M1‌ 맥과 호환되며, 베타는 최신 플레이스테이션 5엑스박스 원 X 컨트롤러에 대한 지원을 추가한다.[6]

특징[편집]

전자기록 장기보존

디지털 정보를 생산한 시점에서 사용된 하드웨어, 매체, 운영체제, 소프트웨어의 운용을 그대로 흉내 내어 그 내용을 읽어내는 프로그램을 통하여 재현하는 보존 전략이다. 에뮬레이션을 통한 장기보존 전략의 특징으로는 새로운 기술이 출현할 때마다 이전의 프로그램 소스코드를 입수 가능하고, 프로그램 기능 명세 문서만으로 이전 프로그램을 구현해 낼 수 있다. 또한 최신 버전과 이전 버전 프로그램의 호환을 돕는 연계 소프트웨어가 존재한다. 비트 스트림을 그대로 두는 전략이므로 영구기록물관리기관의 경우 장기보존 대상 전자기록의 양은 해마다 증가하는데 컴퓨팅 변화에 따라 주기적으로 포맷 변환을 하는 노력을 없앨 수 있는 장점이 있다. 다만 시간이 흐를수록 에뮬레이터가 복잡해지고 제작이 난해해진다. 새로운 포맷이 지속적으로 추가되고, 이 모든 포맷을 에뮬레이션해야 해야 한다. 그리고 지속적으로 변화하는 컴퓨팅 환경에서 에뮬레이션을 통해 과거의 모습 그대로 재현한다는 보장을 할 수 없다는 한계가 있다.[7]

에뮬레이터[편집]

에뮬레이터는 어떤 하드웨어나 소프트웨어의 기능을 다른 종류의 하드웨어나 소프트웨어로 모방하여 실현시키기 위한 장치나 프로그램이다. 컴퓨터 사용 시의 여러 제약을 극복하고 호환성을 실현하는 방법의 하나로 사용된다. '흉내 내다'(emulate)라는 뜻에서 붙여진 이름인데, 본래의 기능을 흉내 내어 유사한 기능을 할 수 있도록 했다는 뜻에서 사용하게 되었다. 예를 들어 하나의 프로그램을 실행시킬 때 사용 중인 컴퓨터의 입출력 장치 등의 조건이 실행 프로그램과 일치하지 않는다면 프로그램은 절대로 실현되지 않는데, 이러한 상황에서 프로그램이 작동되도록 하는 방법으로 많이 이용된다. PC통신에 접속한 개인용 컴퓨터를 호스트 컴퓨터의 단말기처럼 동작하게 하는 통신 에뮬레이터와 같은 프로그램이 대표적이다.[8]

비교[편집]

시뮬레이션[편집]

시뮬레이션(simulation)과 에뮬레이션은 모두 어떤 시스템의 일부 또는 전체를 흉내 낸다는 공통점이 있지만 시뮬레이션은 몇 가지 특성을 주고, 거기에 대한 결과를 산출해보는 것이고, 에뮬레이션은 완전 똑같은 방법으로 다른 대상을 하드웨어 동작까지도 흉내 내는 것을 말한다.[3] 예를 들어, 게임 중에 시뮬레이션 게임들이 있다. 그 시뮬레이션 게임들은 실제 상황을 시뮬레이션해서 만드는 것이다. 즉, 실제와 완전히 똑같을 필요까지는 없고 시뮬레이션하는 대상이 지니는 주요 특성만을 재현해주면 되는 것이다. 비행 시뮬레이션 이라면 하늘을 나는 것처럼 3D표현으로 화면에 보여주고 하늘을 나는 것처럼 조작할 수 있게 해주면 되는 것이다. 물론 실험용 시뮬레이션이라면 바람이나 기후에 의한 영향이라던지 기체의 상태에 의한 영향 같이 더 자세한 특성들을 재현해 줘야 하는 것이지만 그렇다고 해서 모든 것, 즉 화면 모습의 텍스쳐를 실제 현실처럼 자세하게 재현할 필요까지는 없다. 심지어는 어떠한 시뮬레이션의 경우는 단순히 그 상황에 대한 관측 수치만 제공하는 경우도 있다. 그에 반해 에뮬레이터는 재현하고자 하는 대상을 완벽하게 재현하는 것이 목표이다. 어떠한 PDA를 에뮬레이션하려고 한다면 PDA에 사용된 CPU가 처리할 수 있는 명령어들을 그대로 처리할 수 있는 가상의 CPU를 구현해야 하고 PDA에 사용된 디스플레이와 같은 해상도에서 PDA와 동일한 성능으로 PDA에서 돌아가는 프로그램을 사용할 수 있어야 한다. 간단히 말하자면 에뮬레이터는 어떠한 하드웨어를 소프트웨어적으로 재구현하는 것이다. 그리고 그 설명에서는 '시뮬레이터는 하드웨어도 포함할 수도 있지만, 에뮬레이터는 소프트웨어적으로만 구현하는 것을 의미한다.'라고 이해하면 된다. 저 차이는 두 가지를 완벽하게 구분하는데 사용하기는 힘든 특성이다. 즉, 시뮬레이션은 소프트웨어적, 하드웨어적, 혹은 소프트웨어 + 하드웨어 등을 동시에 사용하여 어떠한 상황에 대한 자세한 데이터를 수집하거나 보여 주는 것이 목적이고, 에뮬레이션은 어떠한 하드웨어를 소프트웨어적으로 구현하여 대상 하드웨어를 사용하는 것과 동일하게 사용하는 것이 목적이라고 할 수 있다.[9]

가상화[편집]

가상화(Virtualization)와 에뮬레이션은 비슷한 점이 많지만 운영 상 차이점도 많다. 새로운 아키텍처에서 기존의 운영체제에 접근하려 한다면 에뮬레이션을 선호할 테지만, 반대로 가상화된 시스템은 기초 하드웨어와 독립적으로 작동한다. 짧게 말해, 에뮬레이션은 하나의 시스템이 다른 시스템을 흉내 내도록 하는 것이다. 예를 들어, 한 소프트웨어가 시스템 A에서는 구동하고 시스템 B에서는 구동하지 않을 때, 시스템 B에서 시스템 A의 동작을 에뮬레이션한다. 그러면 해당 소프트웨어는 시스템 A의 에뮬레이션에서 구동하게 된다. 이때, 가상화에서는 시스템 A를 B와 C 두 개의 서버로 분리한다. 이 가상 서버들은 독립적인 소프트웨어 컨테이너(Container)로써, 자체적으로 CPU, (RAM), 스토리지, 네트워킹소프트웨어 기반 자원에 접근할 수 있으며 독립적으로 재부팅도 가능하다. 이 둘은 정확히 실제 하드웨어처럼 작동하며, 애플리케이션 또는 다른 컴퓨터는 그 차이점을 인지하지 못한다. 이 각각의 기술은 저마다의 용도, 장점, 단점이 있다.[10]

에뮬레이션

에뮬레이션의 예에서 소프트웨어는 하드웨어를 대신해 하드웨어와 같은 방식으로 동작하는 환경을 구성한다. 이때, 에뮬레이션 프로세스에 사이클을 할당함으로써 프로세서에 피해를 주는 대신에 사이클은 실행 연산으로 활용된다. 따라서 CPU 연산 능력의 상당 부분을 이 환경을 구성하는 데 사용하게 되는데, 흥미롭게도 사용자는 에뮬레이션 환경에서 가상 서버를 구동할 수 있다. 이렇게 에뮬레이션의 자원 낭비가 심한데도 불구하고 이를 고려해야 하는 이유는 여러 가지 효율 높은 활용성 때문이다. 또한 에뮬레이션은 여러 시스템을 위한 소프트웨어를 설계할 때 유용하다. 코딩을 단일 머신에서 수행할 수 있으며 애플리케이션은 자체 창에서 동시에 실행되는 복수의 운영체제 에뮬레이션에서 구동할 수 있다.[10]

  • 다른 하드웨어용 운영체제 구동 (PC에서 맥 소프트웨어 구동 또는 컴퓨터에 콘솔 기반 게임 구동)
  • 다른 운영체제용 소프트웨어 구동 (PC에서 맥 전용 소프트웨어 구동 또는 반대의 경우)
  • 호환 하드웨어가 없는 상태에서 레거시(Legacy) 소프트웨어 구동
가상화

가상화의 경우, 물리적인 위치 또는 배치에 상관 없이 컴퓨팅 자원을 효율적이며 기능적인 방식으로 활용한다. 충분한 램과 스토리지를 갖춘 고성능 머신은 가상화로 각각 자원을 보유한 여러 대의 서버로 분리될 수 있다. 가상화를 사용하지 않으면 일반적으로 단일 서버로 배치되는 이런 단일 머신들은 각각 회사의 웹이나 이메일 서버를 호스팅할 수 있다. 따라서 기존에 충분히 활용하지 않던 컴퓨팅 자원을 적극적으로 활용할 수 있다. 이는 비용 절감에 크게 도움이 된다. 에뮬레이션 환경은 하드웨어와 상호 작용하는 소프트웨어 브리지가 필요한 반면에 가상화는 하드웨어에 직접 접근한다. 단, 가상화는 전반적으로 속도가 빠르기는 하지만 이미 기본 하드웨어에서 구동할 수 있는 소프트웨어 구동으로 제한된다. 에뮬레이션과 가상화를 통해 기업은 대부분의 가상 시스템 기능을 수행할 수 있다. 두 서비스가 비슷하게 들리겠지만, 중요한 것은 '소프트웨어를 어떻게 활용하는가'이다. 소프트웨어를 더욱 빨리 실행하고 싶다면 가상화를 통해 게스트 코드를 CPU에서 직접 실행할 수 있다. 반대로, 에뮬레이터는 게스트 코드 자체를 구동하여 CPU를 다른 작업에 활용할 수 있다.[10]

  • 기존 x86 CPU 아키텍처와의 광범위한 호환성
  • 모든 하드웨어와 소프트웨어에 물리적인 장치로 표시
  • 인스턴스가 독립적으로 작동함

각주[편집]

  1. 1.0 1.1 에뮬레이션〉, 《네이버 지식백과》
  2. 에뮬레이션〉, 《네이버 지식백과》
  3. 3.0 3.1 3.2 시리즈, 〈에뮬레이션과 시뮬레이션 차이〉, 《티스토리》, 2014-07-08
  4. terminal emulation ; 터미널 에뮬레이션〉, 《텀즈》
  5. 이퓨, 〈닌텐도 스위치 게임 애플 M1 맥에서 가능? 에뮬레이션 성공적!〉, 《네이버 포스트》, 2020-12-24
  6. 리밋피, 〈macOS Big Sur 11.3에서 아이폰/아이패드 앱을 위한 게임 컨트롤러 에뮬레이션이 지원될 예정.〉, 《네이버 카페》, 2021-03-28
  7. 전자기록의 장기보존〉, 《위키독스》
  8. 에뮬레이터〉, 《네이버 지식백과》
  9. Embedded Lab/linux, x86,〈에뮬레이터와 시뮬레이터의 차이〉, 《티스토리》, 2013-03-24
  10. 10.0 10.1 10.2 Data Scientist cinema4dr12,〈가상화 vs 에뮬레이션, 차이점은 대체 무엇일까?〉, 《티스토리》, 2014-04-27

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 에뮬레이션 문서는 게임에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.