에뮬레이터

Emulator
DOSBox는 DOS의 명령줄 인터페이스를 에뮬레이트합니다.
Apple iOS에서 실행되는 1983년 프로그램 가능한 계산기 HP-41CX용 에뮬레이션 앱입니다.또, 이 계산기 라인의 이력 서멀 프린터의 출력을 표시할 수 있다.

컴퓨팅에서 에뮬레이터는 하나의 컴퓨터 시스템(호스트라고 함)이 다른 컴퓨터 시스템(게스트라고 함)처럼 동작할 수 있도록 하는 하드웨어 또는 소프트웨어입니다.일반적으로 에뮬레이터를 사용하면 호스트 시스템에서 소프트웨어를 실행하거나 게스트 시스템용으로 설계된 주변 장치를 사용할 수 있습니다.에뮬레이션은 다른 프로그램이나 장치를 에뮬레이션(또는 모방)하는 전자 장치의 컴퓨터 프로그램의 능력을 말합니다.

예를 들어 많은 프린터는 HP LaserJet 프린터를 에뮬레이트하도록 설계되어 있습니다.이는 HP 프린터용으로 많은 소프트웨어가 작성되기 때문입니다.HP 이외의 프린터가 HP 프린터를 에뮬레이트 하는 경우, 실제 HP 프린터용으로 작성된 소프트웨어도 HP 이외의 프린터 에뮬레이션으로 실행되어 동등한 인쇄가 됩니다.적어도 1990년대 이후, 많은 비디오 게임 애호가들과 취미가들은 에뮬레이터를 사용하여 1980년대 게임들의 원래의 1980년대 기계 코드와 데이터를 사용하여 고전적인 아케이드 게임을 플레이하고 오래된 비디오 게임 콘솔을 모방하기 위해 사용해 왔다.

하드웨어 에뮬레이터는 하드웨어 디바이스의 형태를 취하는 에뮬레이터입니다.를 들어 Centris 610이나 Performa 630과 같은 일부 1990년대 Macintosh 컴퓨터에 설치된 DOS 호환 카드를 예로 들 수 있습니다.이 카드는 PC 소프트웨어 프로그램 및 필드 프로그래머블 게이트 어레이 기반 하드웨어 에뮬레이터를 실행할 수 있습니다.Church-Turing 논문은 이론적으로 메모리 제한이 무시된다고 가정할 때 어떤 운영 환경도 다른 환경 내에서 에뮬레이트할 수 있음을 시사합니다.그러나 실제로는 특히 에뮬레이트되는 시스템의 정확한 동작이 문서화되지 않고 역공학을 통해 추론되어야 하는 경우에는 상당히 어려울 수 있습니다.또, 타이밍의 제약에 대해서는 설명하지 않습니다.에뮬레이터가 원래의 하드웨어를 사용할 때와 같이 고속으로 동작하지 않는 경우, 에뮬레이션내의 소프트웨어가 훨씬 더 느리게 동작할 수 있습니다(타이머 인터럽트를 트리거 해 동작을 변경할 가능성이 있습니다).

"Commodore 64가 MS-DOS를 에뮬레이트할 수 있습니까?" 예, [Commodore] 64가 IBM PC(MS-DOS를 사용하는 경우)를 에뮬레이트할 수 있습니다. 는 티스푼으로 미시간 호수를 구제할 수 있는 것과 같습니다.

--

종류들

Windows XP는 Acon Archimedes 에뮬레이터를 실행하고 있으며, Sinclair ZX Spectrum 에뮬레이터를 실행하고 있습니다.
AmigaOSWzonka-Lad 게임보이 에뮬레이터에서 실행되는 테트리스, 현대 Fedora Linux 시스템의 E-UAE에서 실행되는 테트리스.

대부분의 에뮬레이터는 하드웨어 아키텍처를 에뮬레이트할 뿐입니다.필요한 소프트웨어에 운영체제 펌웨어 또는 소프트웨어가 필요한 경우 에뮬레이트할 수도 있습니다.OS와 소프트웨어 모두 네이티브 하드웨어가 아닌 에뮬레이터에 의해 해석됩니다.이 에뮬레이트된 바이너리 머신의 언어용 인터프리터 외에 일부 다른 하드웨어(입출력 디바이스 등)도 가상 형식으로 제공해야 합니다.예를 들어 특정 메모리 위치에 쓰기가 화면에 표시되는 내용에 영향을 줄 경우 이 기능을 에뮬레이트해야 합니다.에뮬레이션이 극단적으로 진행되면 가상 전원으로부터의 실제 회로의 시뮬레이션을 바탕으로 원자 수준까지 내려갈 수 있지만 이는 매우 이례적인 솔루션입니다.에뮬레이터는 일반적으로 문서화된 하드웨어 사양 및 디지털 로직 시뮬레이션에서 정지합니다.일부 하드웨어 플랫폼을 충분히 에뮬레이션하려면 개개의 클럭사이클, 문서화되어 있지 않은 기능, 예측할 수 없는 아날로그 요소 및 구현 버그 수준까지 고도의 정밀도가 필요합니다.이것은 특히 코모도어 64와 같은 고전적인 가정용 컴퓨터의 경우로, 그 소프트웨어는 종종 게임 프로그래머와 "데모신"에 의해 발명된 매우 정교한 저수준 프로그래밍 기술에 의존합니다.

반면 PlayStation [2]4용 에뮬레이터와 같은 일부 다른 플랫폼에서는 직접적인 하드웨어 어드레싱이 거의 사용되지 않았습니다.이 경우 단순한 호환성 계층으로 충분할 수 있습니다.이것에 의해, 외부 시스템의 콜이 호스트 시스템의 콜로 변환됩니다.예를 들면, *BSD 로 사용되는 Linux 호환성 레이어는 FreeBSDNetBSD [3]로 클로즈드 소스 Linux 네이티브 소프트웨어를 실행하기 위해서 사용됩니다.예를 들어 닌텐도 64 그래픽 프로세서가 완전히 프로그램 가능했던 반면, 대부분의 게임들은 거의 자급자족하고 FIFO를 통해 게임과 통신하는 몇 안 되는 미리 만들어진 프로그램 중 하나를 사용했다. 따라서 많은 에뮬레이터들은 그래픽 프로세서를 전혀 에뮬레이트하지 않고 CPU로부터 받은 명령어를 단순히 원래의 프로그램으로 해석한다.임베디드 시스템이나 비디오 게임 콘솔용 소프트웨어 개발자들은 실제 하드웨어에서 시도하기 전에 시뮬레이터라고 불리는 정확한 에뮬레이터로 소프트웨어를 설계하는 경우가 많다.이는 최종 하드웨어가 대량으로 존재하기 전에 소프트웨어를 제작하고 테스트할 수 있도록 함으로써 디버깅할 프로그램을 낮은 수준에서 복사하는 데 시간을 들이지 않고 디버거의 부작용을 도입하지 않고 테스트할 수 있도록 하기 위함이다.대부분의 경우 시뮬레이터는 실제로 하드웨어를 제공하는 회사에서 생산하기 때문에 이론적으로 정확도가 높아집니다.연산 코프로세서 에뮬레이터를 사용하면 연산 명령으로 컴파일된 프로그램을 코프로세서가 설치되어 있지 않은 머신에서 실행할 수 있지만 CPU에 의한 추가 작업으로 인해 시스템이 느려질 수 있습니다.CPU에 산술 코프로세서가 설치되어 있지 않거나 존재하지 않는 경우 CPU가 코프로세서 명령을 실행하면 결정된 인터럽트(코프로세서를 사용할 수 없음)가 발생하고 산술 에뮬레이터 루틴이 호출됩니다.명령이 성공적으로 에뮬레이트되면 프로그램은 계속 실행됩니다.

논리 시뮬레이터

논리 시뮬레이션은 [4]프로세서와 같은 디지털 회로의 작동을 시뮬레이션하기 위해 컴퓨터 프로그램을 사용하는 것입니다.이것은 디지털 회선이 논리 방정식으로 설계된 후에 행해지지만, 회로가 하드웨어로 제작되기 전에 행해집니다.

기능 에뮬레이터

기능 시뮬레이션은 이진수 기계 코드가 아닌 기호 어셈블리 언어 또는 컴파일러 언어로 작성된 두 번째 컴퓨터 프로그램의 실행을 시뮬레이션하기 위해 컴퓨터 프로그램을 사용하는 것입니다.기능 시뮬레이터를 사용함으로써 프로그래머는 바이너리 코드를 생성하지 않고 소스 코드의 선택된 섹션을 실행하고 추적하여 프로그래밍 오류(버그)를 검색할 수 있다.이는 소프트웨어 에뮬레이션인 바이너리 코드의 실행을 시뮬레이션하는 것과는 다릅니다.최초의 기능 시뮬레이터는 군사용 컴퓨터 D-17B에서 나중에 실행하기 위한 어셈블리 언어 프로그램을 테스트하기 위해 1960년경 Autonetics에 의해 작성되었습니다.이를 통해 D-17B 컴퓨터 하드웨어가 구축되기 전에 비행 프로그램을 작성, 실행 및 테스트할 수 있었다.오토네틱스는 또한 군사용 컴퓨터 D-37C에서 향후 실행을 위해 비행 프로그램을 테스트하기 위한 기능 시뮬레이터를 프로그래밍했다.

비디오 게임 콘솔 에뮬레이터

비디오 게임 콘솔 에뮬레이터는 PC 또는 비디오 게임 콘솔이 다른 비디오 게임 콘솔을 에뮬레이트할 수 있도록 하는 프로그램입니다.그것들은 현대의 개인용 컴퓨터와 더 현대적인 비디오 게임 콘솔에서 1980년대에서 2000년대까지의 오래된 비디오 게임을 플레이하는 데 가장 많이 사용된다.또한 게임을 다른 언어로 번역하거나 기존 게임을 수정하거나 "홈브루" DIY 데모 개발 과정 및 오래된 시스템을 위한 새로운 게임을 만드는 과정에서도 사용됩니다.인터넷 덕분에 콘솔 에뮬레이터가 확산되었습니다.전부는 아니더라도 대부분 소매점에서 판매할 수 없기 때문입니다.지난 수십 년간 출시된 콘솔 에뮬레이터의 예로는 RPCS3, Dolphin, Cemu, PCSX2, PPSPP, ZSNES, Citra, ePSXe, Project64, Visual Boy Advanced, NestopiaYuzu 등이 있습니다.

에뮬레이터의 인기로 인해 에뮬레이터는 악성코드에 의해 가장되어 왔습니다.이러한 에뮬레이터의 대부분은 Xbox 360, Xbox One, 닌텐도 3DS 등과 같은 비디오 게임기용이다.일반적으로 이러한 에뮬레이터는 하나의 프로그램으로 Xbox One과 Xbox 360 게임을 [5]실행할 수 있는 것과 같은 현재 불가능한 주장을 한다.

법적 문제

컴퓨터와 글로벌 컴퓨터 네트워크가 계속 발전하고 에뮬레이터 개발자들이 그들의 작업에 더 능숙해짐에 따라 콘솔의 상용 출시와 성공적인 에뮬레이션 사이의 시간은 줄어들기 시작했습니다.닌텐도 64, 플레이스테이션같은 5세대 콘솔과 게임보이 어드밴스 같은 6세대 핸드헬드는 제작 과정에서 에뮬레이션에 상당한 진전을 보였다.이로 인해 콘솔 제조업체는 비공식 에뮬레이션을 중단하려고 노력했지만 Sega v와 같은 지속적인 장애를 초래했습니다. 표창 F.2d 1510 (1992년 제9회 서기관), Sony Computer Entertainment, Inc. v. Connectix Corporation 203 F.3d 596 (2000년), Sony Computer Entertainment America v. Bleem 214 F.3d 1022 (2000년)[6]는 반대의 결과를 낳았다.모든 법적 판례에 따르면 미국 내에서 에뮬레이션은 합법입니다.그러나 베른 협약에 [7][better source needed]따른 국가별 저작권법과 국제 저작권법에 따르면 저작권으로 보호된 코드의 무단 배포는 여전히 불법이다.미국법에서는 사용자가 합법적으로 구입한 머신의 복사본을 입수하는 한, 판결인 Lewis Galoob Toys, Inc. v. America, Inc., 964 F.2d 965(1992년 제9회 연방법원)에 따라 원래의 머신의 BIOS를 입수하는 것은 합법적입니다.그러나 이를 완화하기 위해 Game Boy Advance와 같은 플랫폼용 에뮬레이터는 BIOS 파일 없이 실행할 수 있으며, 높은 수준의 에뮬레이션을 사용하여 약간의 에뮬레이션 [citation needed]정확도로 BIOS 서브루틴을 시뮬레이트할 수 있습니다.

터미널

터미널 에뮬레이터는 메인프레임 컴퓨터 운영 체제 또는 HP-UX 또는 OpenVMS와 같은 다른 호스트 시스템에서 실행되는 응용 프로그램에 대한 최신 컴퓨터 및 장치 인터랙티브 액세스를 제공하는 소프트웨어 프로그램입니다. IBM 3270이나 VT100 의 단말기는 더 이상 물리적 장치로 생산되지 않습니다.대신 최신 운영 체제에서 실행되는 소프트웨어는 "덤" 터미널을 시뮬레이션하고 적절한 터미널 프로토콜을 사용하여 호스트 애플리케이션의 그래픽 및 텍스트 요소를 렌더링하고 키 스트로크를 전송하며 명령을 처리할 수 있습니다.일부 터미널 에뮬레이션 애플리케이션에는 Attachmate Reflection, IBM Personal Communications 및 Micro Focus Rumba가 있습니다.

기타 타입

기타 유형의 에뮬레이터는 다음과 같습니다.

  • 부동 소수점 에뮬레이터:일부 부동소수점 하드웨어는 덧셈, 뺄셈 및 곱셈과 같은 가장 간단한 연산만 지원합니다.부동소수점 하드웨어가 없는 시스템에서는 CPU는 정수 연산 로직 유닛에서 실행되는 일련의 간단한 고정소수점 산술 연산을 사용하여 에뮬레이트합니다.
  • 고급 프로그래밍 언어의 명령 집합 시뮬레이터:명령을 읽고 프로세서의 레지스터를 나타내는 내부 변수를 유지함으로써 메인프레임 또는 마이크로프로세서의 동작을 모방합니다.
  • 네트워크 에뮬레이션: 가상 네트워크를 통해 실제 애플리케이션의 성능을 테스트하는 기술입니다.이는 트래픽, 네트워크 모델, 채널 및 프로토콜의 가상 모델이 적용되는 네트워크 시뮬레이션과는 다릅니다.
  • 서버 에뮬레이터:멀티플레이어 비디오게임은 온라인 게임 서버에 의존하는 경우가 많습니다.온라인 게임 서버는 사내 설치 시 이용 가능하거나 이용 불가능할 수 있습니다.서버 에뮬레이터는 내부 작업은 다를 수 있지만 공식 온라인 서버의 동작을 모방하는 비공식 온프레미스 서버입니다.
  • 시뮬레이션: 시뮬레이터를 통해 에뮬레이션을 제어하는 프로세스

구조 및 조직

일반적으로 에뮬레이터는 에뮬레이션된 컴퓨터의 서브시스템에 대략 대응하는 모듈로 나뉩니다.대부분의 경우 에뮬레이터는 다음 모듈로 구성됩니다.

  • CPU 에뮬레이터 또는 CPU 시뮬레이터(이 경우 두 용어는 대부분 교환 가능)입니다.단, 에뮬레이트 대상의 CPU 아키텍처가 호스트와 동일하지 않으면 가상 머신 레이어가 대신 사용될 수 있습니다.
  • 메모리 서브시스템 모듈
  • 각종 입출력(I/O) 디바이스 에뮬레이터

버스의 에뮬레이션은 퍼포먼스나 심플함을 이유로 하지 않는 경우가 많아 가상 주변기기는 CPU 또는 메모리 서브시스템과 직접 통신합니다.

메모리 서브시스템

메모리 서브시스템 에뮬레이션은 단순히 에뮬레이트된 단어와 같은 크기의 요소 배열로 축소될 수 있습니다.단, 컴퓨터의 논리 메모리 중 어느 곳이 물리 메모리와 일치하지 않으면 이 모델은 매우 빠르게 실패합니다.이는 에뮬레이트된 하드웨어가 고도의 메모리 관리를 가능하게 하는 경우( 경우 MMU 로직을 메모리 에뮬레이터에 내장하거나 자체 모듈을 만들거나 CPU 시뮬레이터에 내장할 수 있습니다).단, 에뮬레이트된 컴퓨터가 MMU를 지원하지 않더라도 논리 메모리와 물리 메모리의 동등성을 깨는 다른 요소가 있습니다.많은 아키텍처(대부분은 아니더라도)는 메모리 매핑 I/O를 제공합니다.또한 논리 메모리 블록이 ROM에 매핑되지 않은 아키텍처에서도 메모리 어레이 모듈을 폐기해야 합니다.d ROM의 읽기 전용 특성을 에뮬레이트하는 경우.뱅크 스위칭이나 세그먼트화등기능도, 메모리 에뮬레이션을 복잡하게 할 가능성이 있습니다.그 결과, 대부분의 에뮬레이터는 논리 메모리에의 기입과 읽기를 위한 적어도 2개의 순서를 실장하고 있으며, 모든 액세스를 올바른 오브젝트의 올바른 위치에 매핑하는 것이 이들 절차의 의무이다.

주소 0 에서 주소 ROMSIZE-1 에의 메모리가 읽기 전용 메모리이고, 나머지가 RAM 인 베이스 제한 어드레싱 시스템에서는, 다음의 순서를 따르는 것이 일반적입니다.

무효 기입 메모리(단어 주소., 단어 가치) {     단어 리얼 어드레스;     리얼 어드레스 = 주소. + 베이스 레지스터;     한다면 ((리얼 어드레스 < > 제한 레지스터) & &         (리얼 어드레스 > ROM 사이즈)) {         기억[리얼 어드레스] = 가치;     } 또 다른 {         레이즈 인터럽트(INT_SEG 장애);     } } 
단어 읽기 메모리(단어 주소.) {     단어 리얼 어드레스;     리얼 어드레스=주소.+베이스 레지스터;     한다면 (리얼 어드레스 < > 제한 레지스터) {         돌아가다 기억[리얼 어드레스];     } 또 다른 {         레이즈 인터럽트(INT_SEG 장애);         돌아가다 특수한 순서;     } } 

CPU 시뮬레이터

CPU 시뮬레이터는 대부분의 경우 에뮬레이터에서 가장 복잡한 부분입니다.많은 에뮬레이터는 특정 머신의 적절하고 효율적인 에뮬레이션에 집중하기 위해 "사전 패키지" CPU 시뮬레이터를 사용하여 작성됩니다.CPU 시뮬레이터의 가장 단순한 형태는 인터프리터입니다.인터프리터는 에뮬레이트된 프로그램 코드의 실행 흐름을 추종하는 컴퓨터 프로그램이며, 마주치는 모든 기계 코드 명령에 대해 원래 명령과 의미적으로 동등한 호스트 프로세서에 대한 연산을 실행합니다.이는 시뮬레이트된 CPU의 각 레지스터와 플래그에 변수를 할당함으로써 가능합니다.시뮬레이트된 CPU의 로직은 소프트웨어 알고리즘으로 직접 변환되어 기본적으로 원래 하드웨어 구현을 반영하는 소프트웨어 재실장을 작성할 수 있습니다.

다음으로 인터프리터에 의해 CPU 시뮬레이션을 실행하는 예를 나타냅니다.이 경우, 이 동작은 성능상의 이유로 실제 에뮬레이터에서는 드물지만 인터럽트 작업을 하기 전에 인터럽트가 체크됩니다(일반적으로 서브루틴을 사용하는 것이 더 빠릅니다).

무효 실행(무효) {     한다면 (방해하다 != INT_NONE) {         슈퍼 유저 = 진실의;         기입 메모리(++스택 포인터, 프로그램 카운터);         프로그램 카운터 = 인터럽트 포인터;     }     전환하다 (읽기 메모리(프로그램 카운터++)) {         /* * 모든 유효한 지시사항의 취급 * 여기로... */         체납:         방해하다 = INT_ILLAGAL;     } } 

인터프리터는 시간 효율이 뛰어난 대체 솔루션보다 구현이 훨씬 간단하며, 그 속도는 최신 기계에서 약 10년 전의 컴퓨터를 에뮬레이트하기에 충분하기 때문에 컴퓨터 시뮬레이터로 매우 인기가 있습니다.다만, 프로세서 속도가[dubious ] 호스트 머신과 같은 크기인 컴퓨터를 에뮬레이트 하는 경우는, 해석에 고유의 속도 패널티가 문제가 되는 일이 있습니다.몇 년 전까지만 해도, 그러한 상황에서의 에뮬레이션은 많은 사람들에게[dubious ] 완전히 비현실적인 것으로 여겨졌다.

이러한 제약을 타개할 수 있었던 것은 동적 재컴파일 기술의[dubious ] 진보였습니다.에뮬레이트된 프로그램코드를 호스트 아키텍처에서 실행할 수 있는 코드로 간단하게 변환하는 것은 일반적으로 다음과 같은 이유로 불가능합니다.

  • 코드를 로드할 때(예를 들어 디스크에서) 에뮬레이트된 운영체제에 의해서만 수정되는 경우에도 RAM에 있는 동안 코드가 수정될 수 있습니다.
  • 데이터(변환되지 않음)와 실행 가능 코드를 확실하게 구분할 있는 방법이 없을 수 있습니다.

널리 사용되는 JIT(Just In Time) 컴파일러) 기술을 포함한 다양한 형태의 동적 재컴파일은 프로세서 제어 플로우가 변환되지 않은 코드를 포함하는 위치에 들어갈 때까지 기다렸다가 코드 블록을 실행할 수 있는 호스트 코드로 변환함으로써 이러한 문제를 회피하려고 합니다.변환된 코드는 코드[dubious ] 캐시에 보관되며 원래 코드는 손실되거나 영향을 받지 않습니다.이렇게 하면 데이터 세그먼트조차 재컴파일러에 의해 (의미 없이) 번역될 수 있기 때문에 번역 시간 낭비가 발생하지 않습니다.일부 오래된 게임은 더 빠른 컴퓨터의 속도를 염두에 두고 설계되지 않았기 때문에 속도가 바람직하지 않을 수 있습니다.레벨 타이머가 300초인 30MHz PC용으로 설계된 게임은 플레이어에게 300MHz PC에서 30초밖에 주지 않을 수 있습니다.일부 DOS 프로그램과 같은 다른 프로그램은 더 빠른 컴퓨터에서도 실행되지 않을 수 있습니다.특히 시스템 코어의 변경이 일반적이지 않은 '클로즈드 박스'였던 컴퓨터를 에뮬레이트할 때 소프트웨어는 실행한 컴퓨터의 특정 특성(예를 들어 CPU 속도)에 따라 달라지는 기술을 사용할 수 있습니다.따라서 이러한 애플리케이션을 적절히 에뮬레이션하기 위해서는 에뮬레이션 속도의 정확한 제어가 중요합니다.d.

입출력(I/O)

대부분의 에뮬레이터는 앞에서 설명한 바와 같이 메인 시스템버스를 에뮬레이트하지 않습니다.따라서 각 I/O 디바이스는 특수한 케이스로 취급되며 가상 주변기기에 일관된 인터페이스가 제공되지 않습니다.이는 각 I/O 모듈을 에뮬레이트된 디바이스의 특성에 맞게 조정할 수 있기 때문에 성능상의 이점을 가져올 수 있지만 표준 유니파이드 I/O API를 기반으로 한 설계는 충분히 고려되었다 하더라도 이러한 단순한 모델에 필적할 수 있으며 타사 v-in 서비스를 "자동"으로 제공한다는 추가적인 이점이 있습니다.에뮬레이터 내에서 임시 장치를 사용할 수 있습니다.통합 I/O API는 실제 하드웨어 버스의 구조를 반영할 필요는 없습니다.버스 설계는 몇 가지 전기적 제약과 소프트웨어 구현에서 대부분 무시할 수 있는 하드웨어 동시성 관리의 필요성에 의해 제한됩니다.

각 디바이스를 특수한 케이스로 취급하는 에뮬레이터에서도, 통상은 다음의 기본적인 인프라스트럭처가 있습니다.

  • 인터럽트가 발생할 때마다 CPU 시뮬레이터가 읽을 수 있는 플래그를 설정하는 절차를 통해 인터럽트를 관리함으로써 가상 CPU가 "(가상) 인터럽트에 대해 폴링"할 수 있도록 합니다.
  • 논리 메모리에 관한 것과 유사한 두 가지 절차를 통해 물리적 메모리에 쓰고 읽는다(비록 후자와는 달리 전자는 종종 생략될 수 있으며 대신 메모리 배열에 대한 직접 참조가 사용된다).

적용들

보존중

에뮬레이션은 디지털 보존과 진부화 퇴치위한 하나의 전략이다.에뮬레이션은 원래 컴퓨터 환경을 재현하는 데 중점을 두고 있습니다.이 환경은 시간이 많이 걸리고 실현이 어려울 수 있지만 디지털 객체, 운영체제, 심지어 [8]게임 플랫폼의 진위여부와 보다 긴밀한 연결을 유지할 수 있기 때문에 가치가 있습니다.에뮬레이션은 디지털 객체의 원래 하드웨어 및 소프트웨어 환경을 해결하고 현재 [9]머신에 이를 재생성합니다.이 에뮬레이터를 사용하면 사용자는 현재 플랫폼의 모든 종류의 애플리케이션 또는 운영체제에 액세스할 수 있으며 소프트웨어[10]원래 환경에서와 동일하게 실행됩니다.제퍼리는 로덴 버그는, 흉내의 디지털 보존 전략 국가로 조기 지지자인"이상적인 접근 방식과 문서와 모든 종류의 미디아(예를 들, 모든 재생 주기로)조직한 공시에서 한번으로, 한결같이 이행되고 자동으로 설계되어야 할 수 있는 단일 확장성, 장기적인 솔루션을 제공할 수 있".[11]그는 또한 이는 구식 시스템에만 적용되는 것이 아니라 미래의 미지의 [12]시스템으로 상향 이동해야 한다고 말합니다.실제로 특정 애플리케이션이 새로운 버전으로 출시될 때 이전 버전에서 작성된 모든 디지털 객체에 대한 호환성 문제 및 마이그레이션에 대처하는 것이 아니라 해당 애플리케이션에 대한 에뮬레이터를 생성하여 해당 모든 디지털 객체에 액세스할 수 있도록 할 수 있습니다.

뉴미디어 아트

디지털 형식을 주로 사용하기 때문에 뉴 미디어 아트는 보존 전략으로서 에뮬레이션에 크게 의존하고 있습니다.Cory Arcangel과 같은 예술가들은 예술작품의 구식 기술을 부활시키는 것을 전문으로 하며 디지털 문화 보존을 위한 분산적이고 제도화된 프로세스의 중요성을 인식하고 있습니다.많은 경우 뉴미디어아트에서 에뮬레이션의 목적은 디지털 매체를 보존하여 무기한 저장 및 오류 없이 재생할 수 있도록 함으로써 노후화되고 구식이 되는 하드웨어에 의존하지 않도록 하는 것입니다.역설은 에뮬레이션과 에뮬레이터가 미래의 [13]컴퓨터에서 작동하도록 만들어져야 한다는 것입니다.

장래의 시스템 설계

에뮬레이션 기술은 새로운 시스템의 설계 및 개발 중에 일반적으로 사용됩니다.시스템이 실제로 [14]구축되기 전부터 설계의 결함을 검출, 재현 및 복구할 수 있는 기능을 제공함으로써 개발 프로세스를 간소화합니다.가상 [15]하드웨어에 의해 제공되는 제어된 환경이 없으면 동시성 오류를 검출하고 수정하기가 매우 어려운 멀티 코어 시스템 설계에서 특히 유용합니다.이를 통해 하드웨어가 [16]준비되기 전에 소프트웨어 개발을 수행할 수 있으므로 설계 결정을 검증하고 제어력을 높일 수 있습니다.

시뮬레이션과의 비교

"에뮬레이터"라는 단어는 1963년 IBM에서[17] "소프트웨어, 마이크로코드[18]하드웨어새로운 조합"을 사용하여 NPL(IBM System/360) 제품 라인을 개발하는 과정에서 만들어졌습니다.그들은 표준 명령어만을 사용한 소프트웨어 시뮬레이션 대신 마이크로코드 및 하드웨어로 구현된 추가 명령을 사용한 시뮬레이션이 이전 IBM 컴퓨터용으로 작성된 프로그램을 실행함으로써 시뮬레이션 속도를 크게 향상시켰다는 것을 발견했습니다.앞서 IBM은 705[19]650을 위한 시뮬레이터를 제공했습니다.시뮬레이터 외에도 IBM은 IBM 709 [20]7090에 호환성 기능을 가지고 있으며, IBM 709 컴퓨터에 IBM 704용으로 작성된 기존 프로그램을 실행할 수 있는 프로그램을 제공했습니다.이 프로그램에서는 호환성 기능에[21] 의해 추가된 명령을 사용하여 특수한 취급이 필요한 명령을 트랩했습니다.기타 704 명령어는 모두 7090에서 동일하게 실행되었습니다.1410[22] 호환성 기능에서는 콘솔 전환 스위치 설정만 필요하며 지원 프로그램은 필요하지 않습니다.

1963년, 이 시뮬레이션 프로세스의 속도를 높이기 위해 마이크로 코드가 처음 사용되었을 때, IBM 엔지니어들은 개념을 설명하기 위해 "에뮬레이터"라는 용어를 만들었습니다.2000년대 들어 소프트웨어의 맥락에서 "에뮬레이트"라는 단어를 사용하는 것이 보편화되었습니다.그러나 1980년 이전에 "에뮬레이션"은 하드웨어 또는 마이크로코드 어시스트를 사용한 에뮬레이션만을 의미한 반면, "시뮬레이션"은 순수한 소프트웨어 [23]에뮬레이션을 의미했습니다.예를 들어, 다른 아키텍처용으로 설계된 프로그램을 실행하기 위해 특별히 제작된 컴퓨터는 에뮬레이터입니다.반면 시뮬레이터는 PC에서 실행되는 프로그램이므로 오래된 아타리 게임을 시뮬레이션할 수 있습니다.순수주의자들은 계속해서 이 구별을 주장하지만, 현재 "에뮬레이션"이라는 용어는 종종 이진 코드를 실행하는 기계의 완전한 모방을 의미하는 반면, "시뮬레이션"은 종종 추상 모델을 시뮬레이션하기 위해 컴퓨터 프로그램을 사용하는 컴퓨터 시뮬레이션을 의미합니다.컴퓨터 시뮬레이션은 거의 모든 과학 및 엔지니어링 영역에서 사용되며, 컴퓨터 과학도 예외는 아닙니다.네트워크 시뮬레이션과 같은 컴퓨터 시스템의 추상적 모델을 시뮬레이션하는 프로젝트도 여러 개 있습니다.이러한 프로젝트는 네트워크 [24]에뮬레이션과 실질적으로 의미적으로 모두 다릅니다.

하드웨어 가상화와의 비교

하드웨어 가상화는 컴퓨터를 완전한 하드웨어 플랫폼, 컴포넌트의 특정 논리 추상화 또는 다양한 운영체제 실행에 필요한 기능만으로 가상화하는 입니다.가상화는 컴퓨팅 플랫폼의 물리적 특성을 사용자에게 숨기고 추상 컴퓨팅 플랫폼을 [25][26]제시합니다.원래 가상화를 제어하는 소프트웨어는 "컨트롤 프로그램"이라고 불렀지만 시간이 [27]지남에 따라 "하이퍼바이저" 또는 "가상 머신 모니터"라는 용어가 선호되었습니다.각 하이퍼바이저는 여러 가상 시스템을 관리하거나 실행할 수 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ Warick, Mike (April 1988). "MS-DOS Emulation For The 64". Compute!. p. 43. Retrieved 10 November 2013.
  2. ^ GuideStorm. "PlayStation 4 Emulators". Retrieved 2019-08-04.
  3. ^ Linux 에뮬레이션이 버전 6.0의 OpenBSD에서 삭제되었습니다.https://www.openbsd.org/60.html
  4. ^ Electronic design automation : synthesis, verification, and test. Laung-Terng Wang, Yao-Wen Chang, Kwang-Ting Cheng. Amsterdam: Morgan Kaufmann/Elsevier. 2009. ISBN 978-0-08-092200-3. OCLC 433173319.{{cite book}}: CS1 유지보수: 기타 (링크)
  5. ^ "The Emulation Imitation". Malwarebytes Labs. 17 October 2014. Retrieved 2016-05-30.
  6. ^ 미드웨이 매뉴팩처링(Midway Manufacturing Co. v. Artic International, Inc., 574 F 참조).부록 999, aff'd, 704 F.2d 1009 (1982년 제9회 Cir) (게임을 할 때마다 게임이 변경되더라도 Pac Man의 컴퓨터 ROM이 저작권법의 목적을 위해 충분히 고정되도록 유지) 및 베른 협약 제2조)
  7. ^ "What is emulation?". Koninklijke Bibliotheek. Retrieved 2007-12-11.
  8. ^ 반 데 호벤, 제프리, 브람 로만, 렘코 베르데젬.「실천에서의 디지털 보존 에뮬레이션:결과"국제 디지털 큐레이션 저널 2.2 (2007) : 123-132.
  9. ^ 무이라, 그레고리「전통적인 유산 정책의 경계:멀티미디어 컨텐츠에의 장기적인 액세스를 유지하는 것」IFLA 저널 33 (2007) : 323-326.
  10. ^ Rothenberg, Jeffrey (1998). ""Criteria for an Ideal Solution." Avoiding Technological Quicksand: Finding a Viable Technical Foundation for Digital Preservation". Council on Library and Information Resources. Washington, DC. Retrieved 2008-03-08.
  11. ^ 로덴버그, 제프리"에뮬레이션 솔루션"기술적 유사성 회피: 디지털 보존을 위한 실행 가능한 기술적 기반 찾기.워싱턴 DC: 도서관과 정보자원 협의회, 1998.도서관 및 정보 자원 협의회.2008년 3월 28일 http://www.clir.org/pubs/reports/rothenberg/contents.html
  12. ^ "Echoes of Art: Emulation as preservation strategy". Archived from the original on 2007-10-27. Retrieved 2007-12-11.
  13. ^ Peter Magnusson (2004). "Full System Simulation: Software Development's Missing Link".
  14. ^ "Debugging and Full System Simulation".
  15. ^ Vania Joloboff (2009). "Full System Simulation of Embedded Systems" (PDF). Archived from the original (PDF) on 2014-02-09. Retrieved 2012-04-22.
  16. ^ Pugh, Emerson W. (1995). Building IBM: Shaping an Industry and Its Technology. MIT. p. 274. ISBN 0-262-16147-8.
  17. ^ Pugh, Emerson W.; et al. (1991). IBM's 360 and Early 370 Systems. MIT. ISBN 0-262-16123-0. 160-160 페이지
  18. ^ IBM 705에서 IBM 650 시뮬레이션
  19. ^ "IBM Archives: 7090 Data Processing System (continued)". www-03.ibm.com. 23 January 2003.
  20. ^ "System Compatibility Operations". Reference Manual IBM 7090 Data Processing System (PDF). March 1962. pp. 65–66. A22-6528-4.
  21. ^ "System Compatibility Operations". IBM 1410 Principles of Operation (PDF). March 1962. pp. 56–57, 98–100. A22-0526-3.
  22. ^ Tucker, S. G (1965). "Emulation of large systems". Communications of the ACM. 8 (12): 753–61. doi:10.1145/365691.365931. S2CID 15375675.
  23. ^ "Network simulation or emulation?". Network World. Network World. 22 September 2017. Retrieved 22 September 2017.
  24. ^ Turban, E; King, D.; Lee, J.; Viehland, D. (2008). "19". Electronic Commerce A Managerial Perspective (PDF) (5th ed.). Prentice-Hall. p. 27.
  25. ^ "Virtualization in education" (PDF). IBM. October 2007. Retrieved 6 July 2010.
  26. ^ Creasy, R.J. (1981). "The Origin of the VM/370 Time-sharing System" (PDF). IBM. Retrieved 26 February 2013.

외부 링크