맨위로가기

가상 도스 머신

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

가상 도스 머신(VDM)은 인텔 80386 프로세서의 가상 8086 모드나 소프트웨어 에뮬레이션을 사용하여, 운영 체제 환경에서 도스 소프트웨어를 실행할 수 있도록 하는 기술이다. 윈도우 3.x, 9x, NT 계열 등 다양한 운영 체제에서 사용되었으며, 특히 윈도우 NT 계열에서는 ntvdm.exe를 통해 16비트 윈도우 및 DOS 프로그램을 실행했다. 그러나 64비트 운영 체제에서는 더 이상 지원되지 않는다. VDM은 하드웨어 에뮬레이션을 통해 주변 장치에 접근하며, 윈도우 XP는 사운드 블라스터 에뮬레이션을 제공하기도 한다. 2010년에는 VDM 구현에서 보안 취약점이 발견되어 패치가 배포되기도 했다.

더 읽어볼만한 페이지

  • 도스 에뮬레이터 - DOSEMU
    DOSEMU는 x86 기반 시스템에서 DOS 운영 체제를 에뮬레이션하는 소프트웨어로, 다양한 운영 체제를 지원하며 주변 장치 에뮬레이션을 시도하지만 하드웨어 지원은 완벽하지 않을 수 있다.
  • 도스 에뮬레이터 - E/OS
    E/OS는 SEAL GUI 기반으로 개발되어 다양한 플랫폼 지원을 목표로 하는 운영체제로, 라이브 CD 제공 및 가상 머신 환경 지원을 통해 접근성을 높여 현재 베타 버전으로 제공되고 있다.
  • 도스 기술 - EXE
    EXE 파일 형식은 운영 체제에 따라 다양한 종류가 있는 실행 파일의 한 형태로, DOS MZ 실행 파일에서 PE, PE32+까지 발전해 왔으며, 코드, 데이터, 스택을 별도 관리하고 재배치 항목을 통해 실행 환경에 유연하게 대응하는 특징을 가진다.
  • 도스 기술 - COM 파일
    COM 파일은 CP/M 및 MS-DOS 운영체제에서 사용된 실행 파일 형식으로, 메타데이터 없이 코드와 데이터로 구성되어 64KB 크기 제한을 가지며, 단순한 구조로 극소의 실행 파일을 만들 수 있지만 보안 취약점도 존재한다.
  • 가상화 소프트웨어 - X86 가상화
    X86 가상화는 x86 아키텍처 기반 시스템에서 가상 머신을 구현하는 기술로, 소프트웨어 기반 가상화와 하드웨어 지원 가상화로 나뉘며, CPU 제조사의 가상화 확장 기술을 활용하여 가상 머신의 성능을 향상시킨다.
  • 가상화 소프트웨어 - VM웨어 v스피어
    VM웨어 v스피어는 VM웨어에서 개발한 서버 가상화 플랫폼으로, 다양한 운영체제 지원, 가상 시스템 확장, vMotion 개선, 스토리지 관리 효율성 향상 등의 특징을 가지며 클라우드 환경 지원 강화 및 관리 효율성 증대에 초점을 맞추어 지속적으로 업데이트되고 있다.
가상 도스 머신
가상 도스 머신 (VDM)
유형에뮬레이터
개발사마이크로소프트
운영 체제윈도우 NT 제품군
OS/2
최신 버전해당 사항 없음
라이선스사유 소프트웨어
세부 사항
설명32비트 윈도우에서 16비트 도스 및 윈도우 프로그램을 실행하기 위한 서브시스템
관련NTVDM

2. 역사

인텔 80386 프로세서의 가상 8086 방식은 리얼 모드 8086 소프트웨어가 일반 운영 체제 환경에서 하드웨어 접근을 포함한 모든 기능을 수행할 수 있도록 한다. 운영 체제는 에뮬레이션을 통해 도스 소프트웨어를 실행한다. 가상 도스 머신은 16 비트 및 32 비트 보호 모드 소프트웨어, 즉 DPMI 인터페이스를 따르는 도스 확장자(DOS4GW, DOS32A, 또는 PMODE/W)를 지원한다.

윈도우/386 2.1에 처음 등장했으며, 현재는 모든 32비트 버전의 윈도우에 존재한다. 윈도우 NT 계열에서 단일 DOS를 처리하는 프로세스는 ntvdm.exe이다. OS/2 2.0 이후 버전에서도 사용되었다.[7]

윈도우 XP 프로페셔널 x64 에디션 (x86-64), 윈도우 XP 64비트 에디션 (IA-64), 윈도우 서버 2003 (x64), 그리고 윈도우 비스타 (x64)와 같은 64비트 CPU를 지원하는 최신 NT 계열 운영 체제들은 더 이상 NTVDM을 포함하고 있지 않으며, MS-DOS용 또는 16비트 윈도우용 응용 프로그램들을 실행할 수 없다. 32비트 윈도우 NT 계열의 NTVDM은 보통 전체 화면을 지원하지만, 32비트 계열의 윈도우 비스타부터는 전체 화면을 허용하지 않아 전체 화면으로 동작해야 하는 옛 프로그램들은 윈도우 비스타에서 구동할 수 없다. 16비트 윈도우용 응용 프로그램들은 WOWEXEC를 통해 구현되며, 이때에도 ntvdm.exe를 사용한다.

와인 또한 VDM을 포함하고 있으며, Win16과 도스 응용 프로그램들을 실행하는 데 이용된다.[8] 와인의 VDM은 32비트, 64비트 운영 체제와 호환된다. 그러나 롱 모드의 이용으로 인해 16비트 응용 프로그램들은 64비트 리눅스 커널에서 실행되지 않는다.

오래된 DOS 프로그램들은 컴퓨터에서 만족스럽게 실행되지 않을 수 있다. 윈도우 XP사운드 블라스터와 같은 멀티미디어 장치들에 대해 가상 구현을 제공하지만[6], VDM의 에뮬레이션은 가장 기본적인 주변기기만을 위해 제공된다. 지원되는 주변기기의 가상 구현은 완전하지 않다. 윈도우 NT 계열의 윈도우 버전들은 도스 프로그램이 화면에 기록하고자 할 때 실제 화면을 1초에 몇 번만 업데이트한다. 또한, 더 높은 해상도그래픽 모드는 가상으로 구현되지 않는다. 소프트웨어가 가상 구현을 거치지 않고 그대로 실행되기 때문에 모든 타이밍은 끝없이 되풀이되기만 한다. 응답에 많은 시간을 기다려야 하므로, 게임이 너무 빨라지거나 소프트웨어가 "가상 구현되는 하드웨어 기기들"을 감지하지 못할 수도 있다. 이러한 문제들에 대한 해결책은 보통 도스박스와 같은 완전한 CPU 에뮬레이터를 사용하는 것이다. 이러한 에뮬레이터는 호환성은 높지만 호스트 운영 체제와 달리 완전 통합을 이루지는 못하며 속도가 상대적으로 느릴 수 있다.

2. 1. 초기 개발

1985년 1월 디지털 리서치인텔과 함께 Concurrent DOS 286 1.0을 미리 공개했다. 이는 Concurrent DOS의 한 버전으로, 80286의 보호 모드에서 실제 모드 DOS 프로그램을 실행할 수 있게 하였다. 하지만 B-1 스테핑 프로세서 칩에서 개발된 이 방식은 1985년 5월 C-1 및 그 이후 프로세서 스테핑에서 작동을 멈췄는데, 이는 디지털 리서치가 제품 출시를 앞둔 시점이었다. 비록 E-1 스테핑에서 인텔이 1985년 8월에 이 문제를 해결하기 시작하여 디지털 리서치의 "8086 에뮬레이션 모드"가 문서화되지 않은 LOADALL 프로세서 명령어를 사용하여 다시 작동하게 되었지만, 실용적으로 사용하기에는 너무 느렸다. 이후 E-2 스테핑에 대한 마이크로코드 변경으로 속도가 다시 개선되었다. 이 초기 구현은 실제 가상 DOS 머신의 전신으로 볼 수 있다.

결국, Concurrent DOS 286은 1986년에 잠재적인 데스크톱 운영 체제에서 산업용 FlexOS 286으로 재작업되었다. 또한 1986년에는 IBM에서 자사의 4680 OS에 대한 라이선스를 받았다.

인텔의 80386이 가상 8086 모드를 갖추고 출시되자(1985년 10월부터 샘플로, 1986년 6월부터 대량으로), 디지털 리서치는 이를 사용하여 Concurrent DOS 386 1.0(1987년 2월) 및 FlexOS 386 1.0(1987년 6월)에서 보호 모드에서 가상 DOS 머신에서 실제 모드 DOS 프로그램을 실행하도록 전환했다. 그러나 이러한 다중 사용자, 다중 작업 보호 모드 운영 체제의 아키텍처는 그 자체로 DOS 기반은 아니었다.

2. 2. DOS 기반 VDM

DOS 기반 VDM은 1987년 9월 마이크로소프트의 윈도우/386 2.01에서 처음 등장했다. DOS 기반 가상 도스 머신은 386 확장 모드에서 실행되는 윈도우 3.0, 3.1x, 윈도우 for Workgroups 3.1x, 윈도우 95, 98, 98 SE, ME에도 있었다. DOS 상에서 실행되는 이러한 솔루션의 특징 중 하나는 가상 도스 머신 내부에 표시되는 메모리 레이아웃이 멀티태스커가 로드되기 전에 실행되는 DOS 시스템 및 DOS 드라이버 구성의 가상 인스턴스이며, 보호 모드에서 처리할 수 없는 요청이 기본 DOS 시스템에서 실행되도록 시스템 도메인으로 전달된다는 것이다.

아키텍처 면에서 윈도우 3.x 386 확장 모드와 유사하게, 노벨 DOS 7의 EMM386 3.xx, Caldera OpenDOS 7.01, DR-DOS 7.02(및 이후 버전)도 EMM386 /MULTI 옵션을 사용할 때 여러 DOS 응용 프로그램의 선점형 멀티태스킹을 지원하기 위해 DOS 기반 VDM을 사용한다. 이 구성 요소는 1991년부터 디지털 리서치/노벨에서 코드명 "Vladivar"(원래 EMM386의 모듈 대신 별도의 장치 드라이버 KRNL386.SYS)로 개발되었다.

Windows 9x에는 "시스템 가상 머신"과 "가상 DOS 머신"이라고 불리는 두 가지 유형의 가상 머신이 존재한다. 시스템 가상 머신은 하나만 생성되며, OS와 모든 Win16 앱 및 Win32 앱은 시스템 가상 머신 상에서 동작한다.[3] [4] Windows 9x 계열에서 DOS 프롬프트를 실행하면 DOS 프롬프트마다 독립된 가상 DOS 머신이 생성되어 command.com이 실행된다. 이 가상 DOS 머신 환경에서 MS-DOS의 기능을 사용할 수 있다.

2. 3. OS/2 MVDM

1992년부터 OS/2 2.0 이상 버전에서 여러 개의 가상 도스 머신(MVDM)이 사용되었다. OS/2 MVDM은 NTVDM보다 훨씬 강력했는데, 예를 들어 블록 장치가 지원되며 다양한 DOS 버전을 OS/2 MVDM으로 부팅할 수 있었다. OS/2 1.x DOS 박스는 DOS 3.0을 기반으로 했지만, OS/2 2.x MVDM은 DOS 5.0을 에뮬레이션했다.

OS/2 버전 2.0 이후에서는 가상 도스 머신이 가상 86 모드를 사용해, 동시에 여러 DOS 응용 프로그램을 실행할 수 있었다. 이를 MVDM(멀티 가상 DOS 머신)이라고 불렀다. OS/2 1.x에서 DOS 호환성이 크게 향상되었기 때문에, IBM은 MVDM을 "A Better DOS Than DOS"라고 불렀다. OS/2 2.x의 MVDM은 INT 21h/AH=30(Get DOS VERSION)에서 20.x를 반환한다.[5]

2. 4. Windows NTVDM

인텔 80386 프로세서의 가상 8086 방식에 의존하여 리얼 모드 8086 소프트웨어가 일반 운영 체제 환경에서 하드웨어 접근을 동반한 모든 기능이 돌아갈 수 있도록 허용한다. 운영 체제는 에뮬레이션을 수행하면서 도스 소프트웨어를 실행할 수 있다. 가상 도스 머신은 일반적으로 16 비트 및 32 비트 보호 모드 소프트웨어, 곧 DPMI 인터페이스를 따르는 도스 확장자(DOS4GW, DOS32A, 또는 PMODE/W)를 지원한다.

윈도우/386 2.1에 처음 선을 보였고 현재는 모든 32비트 버전의 윈도우에 존재한다. 윈도우 NT 계열에서 단일 DOS를 다루는 프로세스는 ntvdm.exe이다. OS/2의 2.0 이후에서도 쓰였다.[7]

NTVDM은 1993년 윈도우 NT 3.1 출시 이후 모든 IA-32 에디션의 윈도우 NT 제품군의 시스템 구성 요소이다. 이를 통해 16비트 윈도우 및 16비트/32비트 DOS 응용 프로그램을 실행할 수 있다. 단일 DOS (또는 윈도우 3.x) 환경의 기반을 형성하는 윈도우 NT 32비트 사용자 모드 실행 파일은 ntvdm.exe이다.

DOS 프로그램을 실행하기 위해 NTVDM은 NTIO.SYS를 로드하고, 이어서 NTDOS.SYS를 로드하여 NTVDM에 명령줄 인수로 전달된 응용 프로그램을 실행하기 위해 수정된 COMMAND.COM을 실행한다. 16비트 리얼 모드 시스템 파일은 FAT 파일 시스템에 대한 모든 하드 와이어된 가정을 제거하고 잘못된 연산 코드 0xC4 0xC4를 사용하여 요청을 처리하기 위해 32비트 NTVDM으로 bop하는 MS-DOS 5.0의 파생물인 IO.SYS, MSDOS.SYSCOMMAND.COM과 같다. 원래 NTDOS는 프로그램에 DOS 버전 30.00을 보고했다. 그러나 곧 INT 21h/AH=30h에서 버전 5.00을 보고하고 INT 21h/AX=3306h에서 버전 5.50을 보고하도록 변경하여 더 많은 프로그램이 수정 없이 실행될 수 있도록 했다. 이는 최신 윈도우 릴리스에서도 마찬가지이다. MS-DOS 6.x 버전과 윈도우 9x에서 도입된 많은 추가 MS-DOS 기능과 명령이 누락되었다.

16비트 윈도우 응용 프로그램은 기본적으로 모두 단일 NTVDM 프로세스 내에서 자체 스레드로 실행된다. NTVDM 자체는 32비트 프로세스이며 시스템의 나머지 부분과 관련하여 선점형 멀티태스킹되지만, 그 안의 16비트 응용 프로그램은 서로 협력적 멀티태스킹된다. "별도의 메모리 공간에서 실행" 옵션이 ''실행'' 상자 또는 응용 프로그램의 바로 가기 파일에서 선택되면 각 16비트 윈도우 응용 프로그램은 자체 NTVDM 프로세스를 얻으므로 다른 16비트 윈도우 응용 프로그램을 포함한 다른 프로세스와 관련하여 선점형 멀티태스킹된다. NTVDM은 BIOS 호출 및 테이블뿐만 아니라 윈도우 3.1 커널 및 16비트 API 스텁을 에뮬레이션한다. 32비트 WoW 변환 레이어는 16비트 API 루틴을 변환(thunk)한다.

DPMI 및 32비트 메모리 액세스를 위해 32비트 DOS 에뮬레이션이 존재한다. 이 레이어는 DOS 기능에 필요한 확장 및 확장 메모리 호출을 윈도우 NT 메모리 호출로 변환한다. wowexec.exe는 16비트 윈도우를 에뮬레이션하는 에뮬레이션 레이어이다. 윈도우 2000윈도우 XP사운드 블라스터 2.0 에뮬레이션을 추가했다. 16비트 가상 장치 드라이버 및 DOS 블록 장치 드라이버 (예: RAM 디스크)는 지원되지 않는다. 다른 하위 시스템과의 프로세스 간 통신은 OLE, DDE 및 named pipe를 통해 수행할 수 있다.

x86-64 CPU에서 가상 8086 모드는 레거시 모드(16비트 및 32비트 운영 체제 실행용)에서만 하위 모드로 사용할 수 있으며, 네이티브 64비트 롱 모드에서는 사용할 수 없다. NTVDM은 DOS 프로그램을 포함하여 Windows의 x86-64 에디션에서는 지원되지 않는데, NTVDM이 주소 지정을 위해 필요한 16비트 세그먼트를 활성화하기 위해 로컬 디스크립터 테이블 대신 VM86 CPU 모드를 사용하기 때문이다.

COMMAND.COM윈도우 10의 NTVDM에서 실행되고 있는 모습

3. 기술적 특징

가상 도스 머신(VDM)은 주로 소프트웨어 에뮬레이션 방식이나 인텔 80386 프로세서의 가상 8086 모드를 사용한다. 가상 8086 모드는 리얼 모드 8086 소프트웨어가 하드웨어 접근을 하는 모든 작업을 포착하여 일반 운영 체제로 전달함으로써 제어된 환경에서 실행되도록 한다. VDM은 16비트32비트 보호 모드 소프트웨어(DOS 확장자)의 실행을 지원하며, DPMI를 준수한다.

VDM 내에서 실행되는 DOS 프로그램이 주변 장치에 접근해야 할 경우, 윈도우는 가상 장치 드라이버(VDD)를 통해 하드웨어를 에뮬레이션한다. VDM은 인텔 8259A 인터럽트 컨트롤러, 8254 타이머 칩, 8237 DMA 컨트롤러 등에 대한 에뮬레이션을 갖추고 있다.

4. 한계 및 보안 문제

VDM은 오늘날의 컴퓨터에서 대부분의 구형 DOS 게임을 제대로 실행하지 못하는 경우가 많다. 에뮬레이션은 가장 기본적인 주변기기에 대해서만 제공되며, 종종 불완전하게 구현된다. 예를 들어, NTVDM의 사운드 에뮬레이션은 매우 제한적이다.[6] 윈도우 NT 계열 버전은 도스 프로그램이 화면에 쓸 때 초당 몇 번만 실제 화면을 업데이트하며, 더 높은 해상도그래픽 모드를 에뮬레이션하지 않는다. 소프트웨어는 대부분 호스트 CPU의 속도로 기본적으로 실행되므로 모든 ''타이밍 루프''가 조기에 만료된다. 이는 게임이 너무 빨리 실행되거나, 소프트웨어가 에뮬레이션된 하드웨어 주변 장치를 인식하지 못하게 하여 응답을 충분히 기다리지 않게 한다.

2010년 1월, 구글의 보안 연구원 타비스 오만디는 1993년 이후 모든 x86 버전의 윈도우 NT 커널 보안에 적용될 수 있는, Windows NT의 VDM 구현에서 심각한 보안 결함을 발견했다. 이 취약점은 권한이 없는 사용자가 SYSTEM 수준으로 권한을 상승시키는 것을 허용했다. 여기에는 윈도우 NT, 2000, XP, Server 2003, Vista, Server 2008Windows 7의 모든 32비트 버전이 포함되었다. 오만디는 이 취약점에 대한 개념 증명 익스플로잇을 공개했다. 마이크로소프트의 보안 패치 출시 전까지 이 문제에 대한 해결책은 16비트 응용 프로그램 지원을 끄는 것이었고, 이를 통해 구형 프로그램(DOS 및 Windows 3.1용으로 작성된 프로그램)의 실행을 막았다. 64비트 버전의 Windows는 NTVDM 서브시스템이 포함되어 있지 않으므로 영향을 받지 않는다. 마이크로소프트 보안 패치가 영향을 받는 운영 체제에 적용되면 VDM을 안전하게 다시 활성화할 수 있었다.

참조

[1] 웹사이트 NTVDMx64 by Leecher1337 http://www.columbia.[...] 2023-03-25
[2] 웹사이트 Otya128/Winevdm https://github.com/o[...]
[3] 웹사이트 https://www.atmarkit[...]
[4] 웹사이트 https://www.informit[...]
[5] 웹사이트 GET DOS VERSION http://www.ctyme.com[...]
[6] 웹인용 How do I troubleshoot MS-DOS programs running on Windows XP? https://web.archive.[...] 2012-08-08
[7] 웹인용 OS/2 Workplace Shell Configuration Techniques https://web.archive.[...] IBM redbook 2011-07-05
[8] 간행물 8.8.2. Win16 processes support http://www.winehq.or[...] Wine Developer's Guide



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com