맨위로가기

가상 86모드

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

1. 개요

가상 86 모드는 80386 프로세서부터 도입된 x86 아키텍처의 기능으로, 보호 모드 환경에서 8086 코드를 실행할 수 있게 해준다. 이 모드는 가상 86 모니터와 가상 86 태스크로 구성되며, 세그먼트 레지스터를 사용하여 8086과 동일하게 주소를 계산하고 특권 레벨 제한으로 시스템 관련 명령에 제약을 둔다. 제한된 명령은 트랩되어 가상 86 모니터에서 처리되며, VME(가상 모드 확장)를 통해 인터럽트 처리 효율을 높인다. 가상 86 모드는 메모리 어드레싱 문제, 인터럽트 처리, I/O 처리를 거치며, 도스 프로그램을 실행하는 데 활용되며, 64비트 환경에서는 VT-x, AMD-V 등의 가상화 기술로 대체된다.

더 읽어볼만한 페이지

  • 가상화 소프트웨어 - X86 가상화
    X86 가상화는 x86 아키텍처 기반 시스템에서 가상 머신을 구현하는 기술로, 소프트웨어 기반 가상화와 하드웨어 지원 가상화로 나뉘며, CPU 제조사의 가상화 확장 기술을 활용하여 가상 머신의 성능을 향상시킨다.
  • 가상화 소프트웨어 - VM웨어 v스피어
    VM웨어 v스피어는 VM웨어에서 개발한 서버 가상화 플랫폼으로, 다양한 운영체제 지원, 가상 시스템 확장, vMotion 개선, 스토리지 관리 효율성 향상 등의 특징을 가지며 클라우드 환경 지원 강화 및 관리 효율성 증대에 초점을 맞추어 지속적으로 업데이트되고 있다.
  • 마이크로프로세서 - 중앙 처리 장치
    중앙 처리 장치(CPU)는 컴퓨터 시스템의 핵심 부품으로, 프로그램 명령어를 해석하고 실행하여 데이터를 처리하는 장치이다.
  • 마이크로프로세서 - ARM 아키텍처
    ARM 아키텍처는 저전력 설계로 모바일 기기에서 널리 쓰이는 RISC 기반 프로세서 아키텍처로서, IP 코어 라이선스 모델과 ARM Flexible Access를 통해 다양한 분야로 확장되고 있다.
  • 컴퓨터에 관한 - 고속 패킷 접속
    고속 패킷 접속(HSPA)은 3세대 이동통신(3G)의 데이터 전송 속도를 높이는 기술 집합체로, 고속 하향/상향 패킷 접속(HSDPA/HSUPA)을 통해 속도를 개선하고 다중 안테나, 고차 변조, 다중 주파수 대역 활용 등의 기술로 진화했으나, LTE 및 5G 기술 발전으로 현재는 상용 서비스가 중단되었다.
  • 컴퓨터에 관한 - 데이터베이스
    데이터베이스는 여러 사용자가 공유하고 사용하는 정보의 집합으로, 데이터베이스 관리 시스템을 통해 접근하며, 검색 및 갱신 효율을 높이기 위해 고도로 구조화되어 있고, 관계형, NoSQL, NewSQL 등 다양한 모델로 발전해왔다.
가상 86모드

2. 역사 및 배경

가상 86모드는 인텔 80386 프로세서에서 도입된 기능으로, 이전의 8086 프로세서용으로 작성된 소프트웨어(주로 DOS 프로그램)를 보호 모드 환경에서 실행할 수 있게 해준다. 이 기능은 레거시 응용 프로그램의 멀티태스킹을 가능하게 한다.

가상 86 모드를 사용하려면 운영 체제는 실제 모드 프로그램을 관리하고 시스템 리소스 접근을 에뮬레이션하거나 필터링하는 "가상 8086 모니터"를 설정해야 한다. 이 모니터는 권한 레벨 0에서 보호 모드로 실행되며, 8086 프로그램은 권한 레벨 3으로 VM86 모드에서 실행된다. 실제 모드 프로그램이 하드웨어 장치나 메모리 영역에 접근하려 할 때 CPU는 이벤트를 트랩하고 V86 모니터를 호출한다. V86 모니터는 요청된 작업을 검사하여 하드웨어와 인터페이스하거나, 기능을 에뮬레이션하거나, 프로그램을 종료할 수 있다.

V86 모니터는 요청된 작업의 실패를 에뮬레이션하여 권한을 부드럽게 거부할 수도 있다. 예를 들어, 디스크 드라이브가 준비되지 않은 것처럼 보이게 할 수 있다. 또한, 메모리 페이지 매핑, 호출 및 인터럽트 가로채기 등을 통해 실제 모드 프로그램이 멀티태스킹될 수 있도록 한다. 여러 프로그램이 동일한 하드웨어를 공유할 수 있도록 하는 것이다.

가상 86 모드의 실행 환경은 "가상 86 모니터"와 "가상 86 태스크"로 구성된다. 가상 86 태스크에서는 세그먼트 레지스터에 의한 주소 계산이 8086과 동일하게 수행되지만, 특권 레벨이 3으로 고정되어 시스템 관련 명령에는 제한이 있다.

제한된 명령은 기본적으로 트랩되어 가상 86 모니터에서 처리된다. 입출력 명령의 경우, 태스크 상태 세그먼트의 허가 비트맵에 의해 각 포트에 대한 접근을 제어할 수 있다. 펜티엄 이후 프로세서에서는 "가상 모드 확장"(VME)을 통해 소프트웨어 인터럽트 처리나 플래그 레지스터 접근을 효율적으로 수행할 수 있다.

2. 1. 가상 8086 모드의 도입

가상 8086 모드는 보호 모드 태스크를 위한 모드이다. 프로세서는 VM86 및 비 VM86 태스크 간에 전환할 수 있으며, 레거시(DOS) 응용 프로그램의 멀티태스킹을 가능하게 한다.

가상 8086 모드를 사용하기 위해 운영 체제는 실제 모드 프로그램을 관리하고 시스템 하드웨어 및 소프트웨어 리소스에 대한 접근을 에뮬레이션하거나 필터링하는 프로그램인 가상 8086 모니터를 설정한다. 모니터는 권한 레벨 0에서 보호 모드로 실행되어야 한다. 8086 프로그램만 VM86 모드에서 권한 레벨 3으로 실행된다. 실제 모드 프로그램이 하드웨어 장치를 사용하기 위해 특정 I/O 포트에 접근하거나 메모리 공간의 특정 영역에 접근하는 등의 작업을 시도하면, CPU는 이러한 이벤트를 트랩하고 V86 모니터를 호출한다. V86 모니터는 실제 모드 프로그램이 수행하려는 작업을 검사하고 하드웨어와 인터페이스하는 프록시 역할을 하거나, 실제 모드 프로그램이 접근하려는 의도된 기능을 에뮬레이션하거나, 허용하거나 적절하게 지원할 수 없는 작업을 시도하는 경우(예: 컴퓨터 재부팅, 하드웨어에서 지원되지 않고 에뮬레이션되지 않는 모드로 비디오 디스플레이 설정 또는 운영 체제 코드 덮어쓰기) 실제 모드 프로그램을 종료한다.

V86 모니터는 요청된 작업의 실패를 에뮬레이션하여 권한을 부드럽게 거부할 수도 있다. 예를 들어, 드라이브를 확인하지 않았지만 실제 모드 프로그램이 접근하지 못하도록 할 경우 디스크 드라이브가 항상 준비되지 않은 것처럼 보이게 할 수 있다. 또한 V86 모니터는 메모리 페이지 매핑, 호출 및 인터럽트 가로채기, 실제 모드 프로그램 선점과 같은 작업을 수행하여 실제 모드 프로그램이 보호 모드 프로그램처럼 멀티태스킹될 수 있도록 한다. 실제 모드 프로그램의 하드웨어 및 소프트웨어 I/O를 가로채고 V86 프로그램이 예상하는 상태를 추적함으로써 여러 프로그램이 서로 간섭하지 않고 동일한 하드웨어를 공유할 수 있도록 한다. 따라서 V86 모드는 단일 태스킹 환경(예: DOS)용으로 설계된 실제 모드 프로그램이 멀티태스킹 환경에서 동시에 실행될 수 있는 방법을 제공한다.

가상 86 모드의 실행 환경은 프로텍트 모드로 동작하는 '''가상 86 모니터'''와 가상 86 모드로 동작하는 '''가상 86 태스크'''라는 두 가지 요소로 구성되어 있다.

가상 86 태스크에서는 세그먼트 레지스터에 의한 주소 계산이 8086과 동일하게 수행된다. 예를 들어, 세그먼트:오프셋 방식으로 주소가 계산되며, 명령어의 대부분은 16비트로 해석된다. 다만, 가상 86 모드에서는 특권 레벨이 3으로 고정되어 있으므로, CPU 제어 명령이나 소프트웨어 인터럽트 명령, 입출력 명령, 플래그 레지스터에 대한 접근 등 시스템 관련 명령에는 제한이 걸린다.

제한이 걸린 명령은 기본적으로 트랩되어, 가상 86 모니터에서 처리된다. 입출력 명령에 관해서는, 가상 86 태스크의 태스크 상태 세그먼트에 있는 허가 비트맵에 의해, 각 포트에 대한 접근을 직접 허가할지, 트랩을 발생시켜 가상 86 모니터로 처리를 넘길지를 선택할 수 있다. 또한, 펜티엄 이후의 프로세서에서는 '''가상 모드 확장''' (VME)에 의해, 소프트웨어 인터럽트의 처리를 태스크 내에서 수행할지 여부를 인터럽트 종류별로 제어하거나, 플래그 레지스터에 대한 접근을 트랩하지 않고 수행함으로써, 효율적으로 가상 86 모드를 실행할 수 있게 되었다.

3. 구성 요소

가상 86 모드는 '''가상 86 모니터'''와 '''가상 86 태스크'''라는 두 가지 요소로 구성된다.


  • 가상 86 모니터: 권한 레벨 0에서 보호 모드로 실행되며, 실제 모드 프로그램을 관리하고 시스템 하드웨어 및 소프트웨어 리소스 접근을 에뮬레이션하거나 필터링한다.
  • 가상 86 태스크: 특권 레벨이 3으로 고정되어 실행되며, 세그먼트 레지스터에 의한 주소 계산은 8086과 동일하게 수행된다. CPU 제어 명령, 소프트웨어 인터럽트 명령, 입출력 명령, 플래그 레지스터 접근 등 시스템 관련 명령에는 제한이 걸리며, 이는 기본적으로 트랩되어 가상 86 모니터에서 처리된다.

3. 1. 가상 8086 모니터

가상 8086 모드를 사용하기 위해 운영 체제는 실제 모드 프로그램을 관리하고 시스템 하드웨어 및 소프트웨어 리소스에 대한 접근을 에뮬레이션하거나 필터링하는 프로그램인 가상 8086 모니터를 설정한다. 모니터는 권한 레벨 0에서 보호 모드로 실행되어야 한다. 8086 프로그램만 VM86 모드에서 권한 레벨 3으로 실행된다. 실제 모드 프로그램이 하드웨어 장치를 사용하기 위해 특정 I/O 포트에 접근하거나 메모리 공간의 특정 영역에 접근하는 등의 작업을 시도하면, CPU는 이러한 이벤트를 트랩하고 V86 모니터를 호출한다. V86 모니터는 실제 모드 프로그램이 수행하려는 작업을 검사하고 하드웨어와 인터페이스하는 프록시 역할을 하거나, 실제 모드 프로그램이 접근하려는 의도된 기능을 에뮬레이션하거나, 허용하거나 적절하게 지원할 수 없는 작업을 시도하는 경우(예: 컴퓨터 재부팅, 하드웨어에서 지원되지 않고 에뮬레이션되지 않는 모드로 비디오 디스플레이 설정 또는 운영 체제 코드 덮어쓰기) 실제 모드 프로그램을 종료한다.

V86 모니터는 요청된 작업의 실패를 에뮬레이션하여 권한을 부드럽게 거부할 수도 있다. 예를 들어, 드라이브를 확인하지 않았지만 실제 모드 프로그램이 접근하지 못하도록 할 경우 디스크 드라이브가 항상 준비되지 않은 것처럼 보이게 할 수 있다. 또한 V86 모니터는 메모리 페이지 매핑, 호출 및 인터럽트 가로채기, 실제 모드 프로그램 선점과 같은 작업을 수행하여 실제 모드 프로그램이 보호 모드 프로그램처럼 멀티태스킹될 수 있도록 한다. 실제 모드 프로그램의 하드웨어 및 소프트웨어 I/O를 가로채고 V86 프로그램이 예상하는 상태를 추적함으로써 여러 프로그램이 서로 간섭하지 않고 동일한 하드웨어를 공유할 수 있도록 한다. 따라서 V86 모드는 단일 태스킹 환경(예: DOS)용으로 설계된 실제 모드 프로그램이 멀티태스킹 환경에서 동시에 실행될 수 있는 방법을 제공한다.

가상 86 모드의 실행 환경은 프로텍트 모드로 동작하는 '''가상 86 모니터'''와 가상 86 모드로 동작하는 '''가상 86 태스크'''라는 두 가지 요소로 구성되어 있다.

가상 86 태스크에서는 세그먼트 레지스터에 의한 주소 계산이 8086과 동일하게 수행된다. 예를 들어, 세그먼트:오프셋 방식으로 주소가 계산되며, 명령어의 대부분은 16비트로 해석된다. 다만, 가상 86 모드에서는 특권 레벨이 3으로 고정되어 있으므로, CPU 제어 명령이나 소프트웨어 인터럽트 명령, 입출력 명령, 플래그 레지스터에 대한 접근 등 시스템 관련 명령에는 제한이 걸린다.

제한이 걸린 명령은 기본적으로 트랩되어, 가상 86 모니터에서 처리된다. 입출력 명령에 관해서는, 가상 86 태스크의 태스크 상태 세그먼트에 있는 허가 비트맵에 의해, 각 포트에 대한 접근을 직접 허가할지, 트랩을 발생시켜 가상 86 모니터로 처리를 넘길지를 선택할 수 있다. 또한, Pentium 이후의 프로세서에서는 '''가상 모드 확장''' (VME)에 의해, 소프트웨어 인터럽트의 처리를 태스크 내에서 수행할지 여부를 인터럽트 종류별로 제어하거나, 플래그 레지스터에 대한 접근을 트랩하지 않고 수행함으로써, 효율적으로 가상 86 모드를 실행할 수 있게 되었다.

3. 2. 가상 8086 태스크

가상 8086 모드는 보호 모드 태스크를 위한 모드이다. 프로세서는 VM86 및 비 VM86 태스크 간에 전환할 수 있으며, 레거시(DOS) 응용 프로그램의 멀티태스킹을 활성화한다.

가상 8086 모드를 사용하기 위해 운영 체제는 실제 모드 프로그램을 관리하고 시스템 하드웨어 및 소프트웨어 리소스에 대한 접근을 에뮬레이션하거나 필터링하는 프로그램인 가상 8086 모니터를 설정한다. 모니터는 권한 레벨 0에서 보호 모드로 실행되어야 한다. 8086 프로그램만 VM86 모드에서 권한 레벨 3으로 실행된다. 실제 모드 프로그램이 하드웨어 장치를 사용하기 위해 특정 I/O 포트에 접근하거나 메모리 공간의 특정 영역에 접근하는 등의 작업을 시도하면, CPU는 이러한 이벤트를 트랩하고 V86 모니터를 호출한다. V86 모니터는 실제 모드 프로그램이 수행하려는 작업을 검사하고 하드웨어와 인터페이스하는 프록시 역할을 하거나, 실제 모드 프로그램이 접근하려는 의도된 기능을 에뮬레이션하거나, 허용하거나 적절하게 지원할 수 없는 작업을 시도하는 경우 실제 모드 프로그램을 종료한다.

V86 모니터는 요청된 작업의 실패를 에뮬레이션하여 권한을 부드럽게 거부할 수도 있다. 또한 V86 모니터는 메모리 페이지 매핑, 호출 및 인터럽트 가로채기, 실제 모드 프로그램 선점과 같은 작업을 수행하여 실제 모드 프로그램이 보호 모드 프로그램처럼 멀티태스킹될 수 있도록 한다. 따라서 V86 모드는 단일 태스킹 환경(예: DOS)용으로 설계된 실제 모드 프로그램이 멀티태스킹 환경에서 동시에 실행될 수 있는 방법을 제공한다.

가상 86 모드의 실행 환경은 프로텍트 모드로 동작하는 '''가상 86 모니터'''와 가상 86 모드로 동작하는 '''가상 86 태스크'''라는 두 가지 요소로 구성되어 있다.

가상 86 태스크에서는 세그먼트 레지스터에 의한 주소 계산이 8086과 동일하게 수행된다. 예를 들어, 세그먼트:오프셋 방식으로 주소가 계산되며, 명령어의 대부분은 16비트로 해석된다. 다만, 가상 86 모드에서는 특권 레벨이 3으로 고정되어 있으므로, CPU 제어 명령이나 소프트웨어 인터럽트 명령, 입출력 명령, 플래그 레지스터에 대한 접근 등 시스템 관련 명령에는 제한이 걸린다.

제한이 걸린 명령은 기본적으로 트랩되어, 가상 86 모니터에서 처리된다. 입출력 명령에 관해서는, 가상 86 태스크의 태스크 상태 세그먼트에 있는 허가 비트맵에 의해, 각 포트에 대한 접근을 직접 허가할지, 트랩을 발생시켜 가상 86 모니터로 처리를 넘길지를 선택할 수 있다. 또한, Pentium 이후의 프로세서에서는 '''가상 모드 확장''' (VME)에 의해, 소프트웨어 인터럽트의 처리를 태스크 내에서 수행할지 여부를 인터럽트 종류별로 제어하거나, 플래그 레지스터에 대한 접근을 트랩하지 않고 수행함으로써, 효율적으로 가상 86 모드를 실행할 수 있게 되었다.

4. 작동 방식

가상 86 모드는 보호 모드 태스크를 위한 모드로, 프로세서가 VM86 및 비 VM86 태스크 간에 전환할 수 있게 하여 레거시(DOS) 응용 프로그램의 멀티태스킹을 가능하게 한다.

가상 86 모드를 사용하려면 운영 체제는 실제 모드 프로그램을 관리하고 시스템 하드웨어 및 소프트웨어 리소스에 대한 접근을 에뮬레이션하거나 필터링하는 프로그램인 가상 86 모니터를 설정해야 한다. 이 모니터는 권한 레벨 0에서 보호 모드로 실행되어야 하며, 8086 프로그램만 VM86 모드에서 권한 레벨 3으로 실행된다.

실제 모드 프로그램이 하드웨어 장치를 사용하기 위해 특정 I/O 포트에 접근하거나 메모리 공간의 특정 영역에 접근하는 등의 작업을 시도하면, CPU는 이러한 이벤트를 트랩하고 V86 모니터를 호출한다. V86 모니터는 실제 모드 프로그램이 수행하려는 작업을 검사하여 다음과 같은 역할을 수행한다.


  • 하드웨어와 인터페이스하는 프록시 역할
  • 실제 모드 프로그램이 접근하려는 의도된 기능 에뮬레이션
  • 허용하거나 적절하게 지원할 수 없는 작업(예: 컴퓨터 재부팅, 하드웨어에서 지원되지 않고 에뮬레이션되지 않는 모드로 비디오 디스플레이 설정, 운영 체제 코드 덮어쓰기) 시도 시 실제 모드 프로그램 종료


V86 모니터는 요청된 작업의 실패를 에뮬레이션하여 권한을 부드럽게 거부할 수도 있다. 예를 들어, 드라이브를 확인하지 않았지만 실제 모드 프로그램이 접근하지 못하도록 할 경우 디스크 드라이브가 항상 준비되지 않은 것처럼 보이게 할 수 있다.

또한 V86 모니터는 메모리 페이지 매핑, 호출 및 인터럽트 가로채기, 실제 모드 프로그램 선점과 같은 작업을 수행하여 실제 모드 프로그램이 보호 모드 프로그램처럼 멀티태스킹될 수 있도록 한다. 실제 모드 프로그램의 하드웨어 및 소프트웨어 I/O를 가로채고 V86 프로그램이 예상하는 상태를 추적함으로써 여러 프로그램이 서로 간섭하지 않고 동일한 하드웨어를 공유할 수 있도록 한다. 따라서 V86 모드는 단일 태스킹 환경(예: DOS)용으로 설계된 실제 모드 프로그램이 멀티태스킹 환경에서 동시에 실행될 수 있는 방법을 제공한다.

가상 86 모드의 실행 환경은 프로텍트 모드로 동작하는 '''가상 86 모니터'''와 가상 86 모드로 동작하는 '''가상 86 태스크'''라는 두 가지 요소로 구성되어 있다.

가상 86 태스크에서는 세그먼트 레지스터에 의한 주소 계산이 8086과 동일하게 수행된다. 예를 들어, 세그먼트:오프셋 방식으로 주소가 계산되며, 명령어의 대부분은 16비트로 해석된다. 다만, 가상 86 모드에서는 특권 레벨이 3으로 고정되어 있으므로 시스템 관련 명령에는 제한이 걸린다.

CPU 제어 명령, 소프트웨어 인터럽트 명령, 입출력 명령, 플래그 레지스터에 대한 액세스 등 제한이 걸린 명령은 기본적으로 트랩되어, 가상 86 모니터에서 처리된다. 입출력 명령에 관해서는, 가상 86 태스크의 태스크 상태 세그먼트에 있는 허가 비트맵에 의해, 각 포트에 대한 액세스를 직접 허가할지, 트랩을 발생시켜 가상 86 모니터로 처리를 넘길지를 선택할 수 있다.

Pentium 이후의 프로세서에서는 '''가상 모드 확장''' (VME)에 의해, 소프트웨어 인터럽트의 처리를 태스크 내에서 수행할지 여부를 인터럽트 종류별로 제어하거나, 플래그 레지스터에 대한 액세스를 트랩하지 않고 수행함으로써, 효율적으로 가상 86 모드를 실행할 수 있게 되었다.

4. 1. 메모리 관리

가상 86 모드에서 8086 코드를 실행할 때 가장 흔한 문제는 메모리 어드레싱인데, 이는 보호 모드와 실 모드 간에 완전히 다르다.[1] VM86 모드에서 작동하면 세그먼테이션 메커니즘이 실 모드에서와 같이 작동하도록 재구성되지만, 페이징 메커니즘은 여전히 활성화되어 실 모드 코드에 투명하게 적용된다.[1] 따라서 메모리 보호가 여전히 적용 가능하며, 주소 공간의 격리도 마찬가지이다.[1]

가상 86 모드의 실행 환경은 프로텍트 모드로 동작하는 '''가상 86 모니터'''와 가상 86 모드로 동작하는 '''가상 86 태스크'''라는 두 가지 요소로 구성되어 있다.[2]

가상 86 태스크에서는 세그먼트 레지스터에 의한 주소 계산이 8086과 동일하게 수행된다.[2] 예를 들어, 세그먼트:오프셋 방식으로 주소가 계산되며, 명령어의 대부분은 16비트로 해석된다.[2] 다만, 가상 86 모드에서는 특권 레벨이 3으로 고정되어 있으므로, CPU 제어 명령이나 소프트웨어 인터럽트 명령, 입출력 명령, 플래그 레지스터에 대한 액세스 등 시스템 관련 명령에는 제한이 걸린다.[2]

제한이 걸린 명령은 기본적으로 트랩되어, 가상 86 모니터에서 처리된다.[2] 입출력 명령에 관해서는, 가상 86 태스크의 태스크 상태 세그먼트에 있는 허가 비트맵에 의해, 각 포트에 대한 액세스를 직접 허가할지, 트랩을 발생시켜 가상 86 모니터로 처리를 넘길지를 선택할 수 있다.[2] 또한, Pentium 이후의 프로세서에서는 '''가상 모드 확장'''(VME)에 의해, 소프트웨어 인터럽트의 처리를 태스크 내에서 수행할지 여부를 인터럽트 종류별로 제어하거나, 플래그 레지스터에 대한 액세스를 트랩하지 않고 수행함으로써, 효율적으로 가상 86 모드를 실행할 수 있게 되었다.[2]

4. 2. 인터럽트 처리

가상 86 모드에서 인터럽트(하드웨어, 소프트웨어 및 `int` 명령)가 발생하면, 프로세서는 VM86 모드를 끄고 보호 모드로 전환하여 인터럽트를 처리한다. 인터럽트 처리 전에 DS, ES, FS 및 GS 레지스터가 새 스택에 푸시되고 0으로 설정된다.[1]

가상 86 태스크에서는 세그먼트 레지스터에 의한 주소 계산이 8086과 동일하게 수행된다. 예를 들어 세그먼트:오프셋 방식으로 주소가 계산되며, 명령어의 대부분은 16비트로 해석된다. 가상 86 모드에서는 특권 레벨이 3으로 고정되어 있으므로, CPU 제어 명령, 소프트웨어 인터럽트 명령, 입출력 명령, 플래그 레지스터 접근 등 시스템 관련 명령에는 제한이 걸린다.[1]

제한이 걸린 명령은 기본적으로 트랩되어 가상 86 모니터에서 처리된다. 입출력 명령의 경우, 가상 86 태스크의 태스크 상태 세그먼트에 있는 허가 비트맵에 의해 각 포트에 대한 접근을 직접 허가할지, 트랩을 발생시켜 가상 86 모니터로 처리를 넘길지를 선택할 수 있다. Pentium 이후 프로세서에서는 '''가상 모드 확장'''(VME)을 통해 소프트웨어 인터럽트 처리를 태스크 내에서 수행할지 여부를 인터럽트 종류별로 제어하거나, 플래그 레지스터 접근을 트랩하지 않고 수행함으로써 가상 86 모드를 효율적으로 실행할 수 있다.[1]

4. 3. 입출력(I/O) 처리

가상 86 모드에서는 특권 레벨이 3으로 고정되어 있어, CPU 제어 명령, 소프트웨어 인터럽트 명령, 입출력 명령, 플래그 레지스터에 대한 접근 등 시스템 관련 명령에 제한이 걸린다. 이러한 제한이 걸린 명령은 기본적으로 트랩되어 가상 86 모니터에서 처리된다.

입출력 명령의 경우, 가상 86 태스크의 태스크 상태 세그먼트에 있는 허가 비트맵을 통해 각 포트에 대한 접근을 직접 허가할지, 아니면 트랩을 발생시켜 가상 86 모니터로 처리를 넘길지를 선택할 수 있다.

펜티엄 이후 프로세서에서는 가상 모드 확장(VME)을 통해 소프트웨어 인터럽트 처리를 태스크 내에서 수행할지 여부를 인터럽트 종류별로 제어하거나, 플래그 레지스터 접근을 트랩하지 않고 수행하여 가상 86 모드를 효율적으로 실행할 수 있게 되었다.

5. VME (가상 모드 확장)

펜티엄 이후 프로세서에서는 가상 모드 확장(VME)을 통해 효율적인 가상 86 모드 실행이 가능해졌다. VME는 소프트웨어 인터럽트 처리를 태스크 내에서 수행할지 여부를 인터럽트 종류별로 제어하거나, 플래그 레지스터에 대한 액세스를 트랩 없이 수행할 수 있게 해준다.[6]

가상 86 모드의 실행 환경은 프로텍트 모드로 동작하는 가상 86 모니터와 가상 86 모드로 동작하는 가상 86 태스크 두 가지 요소로 구성된다.

가상 86 태스크에서는 8086과 동일하게 세그먼트 레지스터를 이용해 주소를 계산한다. (예: 세그먼트:오프셋 방식) 명령어 대부분은 16비트로 해석된다. 다만, 가상 86 모드에서는 특권 레벨이 3으로 고정되어 CPU 제어 명령, 소프트웨어 인터럽트 명령, 입출력 명령, 플래그 레지스터 액세스 등 시스템 관련 명령에 제한이 걸린다.

제한이 걸린 명령은 기본적으로 트랩되어 가상 86 모니터에서 처리된다. 입출력 명령의 경우, 가상 86 태스크의 태스크 상태 세그먼트에 있는 허가 비트맵을 통해 각 포트 액세스를 직접 허가할지, 트랩을 발생시켜 가상 86 모니터로 처리를 넘길지 선택할 수 있다.

5. 1. VME 활성화

펜티엄 아키텍처는 가상 8086 모드에 여러 가지 향상된 기능을 추가했다. 그러나 이는 후속 P6 (마이크로아키텍처)부터 인텔에 의해 문서화되었으며,[6] 최근 공식 명칭은 VME(Virtual-8086 Mode Extensions)이다.[7] (구 문서에서는 VME 약어를 "Virtual 8086 mode enhancements"로 확장하여 사용할 수 있다).[6] 일부 후기 인텔 486 칩도 이를 지원한다.[8][9] 이러한 향상 기능은 주로 (가상) 인터럽트에 중점을 두고 8086 가상화 오버헤드를 해결한다.[6][10] P6 문서에 확장 기능이 공개적으로 문서화되기 전에는 공식 문서에서 유명한 부록 H를 언급했는데, 이는 공개 문서에서 생략되었고 NDA에 따라 선택된 파트너와만 공유되었다.

VME를 활성화하려면 CR4의 비트 번호 0 (값 0x1)을 설정한다. VME 인터럽트 속도 향상 기능이 비 VM86 보호 작업에도 유용하다는 것이 밝혀짐에 따라, 비트 번호 1 (값 0x2)만 설정하여 이를 별도로 활성화할 수도 있는데, 이를 PVI (Protected Mode Virtual Interrupts)라고 한다.[6][9] 프로세서가 VME (PVI 포함)를 지원하는지 감지하려면 CPUID 명령을 사용하여, 초기 EAX 값을 0x1로 설정하고, EDX 레지스터의 두 번째 비트(비트 번호 1, 값 0x2) 값을 검사한다. 프로세서가 VME를 지원하면 이 비트가 설정된다.[11][6] 리눅스에서 이 마지막 비트는 /proc/cpuinfo 파일의 "flags" 섹션에서 vme 플래그로 보고된다.

가상 8086 모드에서 기본 아이디어는 IOPL이 3보다 작을 때 PUSHF/POPF/STI/CLI/INT/IRET 명령어가 실제 32비트 EFLAGS 레지스터의 VIF 값을 시뮬레이션된 16비트 FLAGS 레지스터의 IF 값으로 처리한다는 것이다(32비트 PUSHFD/POPFD는 계속 GP 오류 발생). VIP는 시뮬레이션된 IF 설정 시 GP 오류를 발생시켜 OS가 보류 중인 모든 인터럽트를 처리하도록 지시한다. PVI는 동일한 아이디어를 따르지만 CLI/STI 명령어에만 영향을 미친다.

1세대 AMD Ryzen CPU는 고장난 VME 구현을 특징으로 하는 것으로 밝혀졌다.[12] 2세대 Ryzen (2000 시리즈)은 이 문제를 해결했다.[13]

5. 2. PVI (Protected Mode Virtual Interrupts)

CR4의 비트 번호 1 (값 0x2)을 설정하여 VME 인터럽트 속도 향상 기능을 비 VM86 보호 작업에도 별도로 활성화할 수 있는데, 이를 PVI (Protected Mode Virtual Interrupts)라고 한다.[6][9] 프로세서가 VME (PVI 포함)를 지원하는지 확인하려면 CPUID 명령을 사용하여, 초기 EAX 값을 0x1로 설정하고, EDX 레지스터의 두 번째 비트(비트 번호 1, 값 0x2) 값을 검사한다. 프로세서가 VME를 지원하면 이 비트가 설정된다.[11][6] 리눅스에서 이 마지막 비트는 `/proc/cpuinfo` 파일의 "flags" 섹션에서 `vme` 플래그로 보고된다.

가상 8086 모드에서 기본 개념은 IOPL이 3보다 작을 때 PUSHF/POPF/STI/CLI/INT/IRET 명령어가 실제 32비트 EFLAGS 레지스터의 VIF 값을 시뮬레이션된 16비트 FLAGS 레지스터의 IF 값으로 처리한다는 것이다(32비트 PUSHFD/POPFD는 계속 GP 오류 발생). VIP는 시뮬레이션된 IF 설정 시 GP 오류를 발생시켜 OS가 보류 중인 모든 인터럽트를 처리하도록 지시한다. PVI는 동일한 개념을 따르지만 CLI/STI 명령어에만 영향을 미친다.

6. 활용 사례

가상 86 모드는 일반적인 보호 모드 환경에서 오래된 리얼 모드 애플리케이션을 실행하기 위해 사용된다. 대표적인 사용 예시로, 윈도우 환경에서 MS-DOS 애플리케이션을 실행하는 가상 DOS 머신(VDM)이 있다. 또한, 32비트 OS에서 그래픽 카드의 ROM에 접근하여 초기화할 때에도 가상 86 모드가 활용된다.

MS-DOS장치 드라이버로서, 가상 86 모니터를 포함하고 페이징 방식을 사용하여 확장 메모리 사양을 제공하는 가상 86EMS에서는, 실제 주소 공간의 일부를 가상화할 수 있다. 더 나아가, DOS 확장기에서는 보호 모드에서 애플리케이션이 작동하면서, 시스템 콜이나 BIOS 호출을 리얼 모드와 동일하게 처리하기 위해 이 모드를 이용하고 있다.

하지만, x64 (Intel 64 및 AMD64)의 64비트 모드 (long mode|롱 모드영어)에서는 가상 86 모드를 사용할 수 없으므로[19], 가상화나 에뮬레이션 등의 다른 기술이 필요하게 되었다.

6. 1. 운영 체제

가상 8086 모드는 보호 모드 태스크를 위한 모드이다. 이를 통해 프로세서는 VM86 및 비 VM86 태스크 간에 전환할 수 있으며, 레거시(DOS) 응용 프로그램의 멀티태스킹을 지원한다.

가상 8086 모드를 사용하려면 운영 체제는 실제 모드 프로그램을 관리하고 시스템 하드웨어 및 소프트웨어 리소스에 대한 접근을 에뮬레이션하거나 필터링하는 프로그램인 가상 8086 모니터를 설정해야 한다. 이 모니터는 권한 레벨 0에서 보호 모드로 실행되어야 하며, 8086 프로그램만 VM86 모드에서 권한 레벨 3으로 실행된다. 실제 모드 프로그램이 하드웨어 장치를 사용하기 위해 특정 I/O 포트에 접근하거나 메모리 공간의 특정 영역에 접근하는 등의 작업을 시도하면, CPU는 이러한 이벤트를 트랩하고 V86 모니터를 호출한다.

V86 모니터는 실제 모드 프로그램이 수행하려는 작업을 검사하고, 하드웨어와 인터페이스하는 프록시 역할을 하거나, 실제 모드 프로그램이 접근하려는 기능을 에뮬레이션하거나, 허용하거나 지원할 수 없는 작업을 시도하는 경우 실제 모드 프로그램을 종료한다. V86 모니터는 요청된 작업의 실패를 에뮬레이션하여 권한을 부드럽게 거부할 수도 있다.

또한, V86 모니터는 메모리 페이지 매핑, 호출 및 인터럽트 가로채기, 실제 모드 프로그램 선점과 같은 작업을 수행하여 실제 모드 프로그램이 보호 모드 프로그램처럼 멀티태스킹될 수 있도록 한다. 이를 통해 여러 프로그램이 서로 간섭하지 않고 동일한 하드웨어를 공유할 수 있다.

가상 86 모드는 다음과 같은 운영 체제에서 특정 도스 프로그램을 실행하는 데 사용된다.

운영 체제출시 연도
FlexOS 3861987년
Concurrent DOS 3861987년
Windows/386 2.101987년
DESQview 3861988년
Windows 3.x1990년
Multiuser DOS1991년
Windows for Workgroups 3.1x1992년
OS/2 2.x1992년
4690 OS1993년
REAL/321995년



386 향상 모드에서 실행되는 프로그램, 그리고 가상 도스 머신을 통해 Windows 95, 98, 98 SE 및 ME에서도 사용된다. 또한, Merge를 통해 SCO UNIX에서도, DOSEMU를 통해 리눅스에서도 사용할 수 있다. x86 Windows NT 기반 운영 체제의 NTVDM 또한 VM86 모드를 사용하지만,[3] 매우 제한적인 직접 하드웨어 접근만 가능하다. 일부 부트 로더(예: GRUB)는 보호 모드를 사용하며, 가상 8086 모드에서 BIOS 인터럽트 호출을 실행한다.[4][5]

일반적인 프로텍트 모드 환경에서 오래된 리얼 모드 애플리케이션을 실행하기 위해 사용되는 가상 86 모드의 대표적인 사용 예시로, 윈도우 환경에서 MS-DOS 애플리케이션을 실행하는 가상 DOS 머신(VDM)이 있다. 또한, 32비트 OS에서 그래픽 카드의 ROM에 접근하여 초기화할 때에도 가상 86 모드가 활용된다.

하지만, x64 (Intel 64 및 AMD64)의 64비트 모드 (long mode|롱 모드영어)에서는 가상 86 모드를 사용할 수 없으므로[19], 가상화나 에뮬레이션 등의 다른 기술이 필요하게 되었다.

6. 2. 기타

가상 86 모드는 일반적인 보호 모드 환경에서 오래된 리얼 모드 애플리케이션을 실행하기 위해 사용된다. 대표적인 예시로, 윈도우 환경에서 MS-DOS 애플리케이션을 실행하는 가상 DOS 머신(VDM)이 있다. 또한, 32비트 OS에서 그래픽 카드의 ROM에 접근하여 초기화할 때에도 가상 86 모드가 활용된다.

MS-DOS장치 드라이버로서, 가상 86 모니터를 포함하고 페이징 방식을 사용하여 확장 메모리 사양을 제공하는 가상 86EMS에서는, 실제 주소 공간의 일부를 가상화할 수 있다. 더 나아가, DOS 확장기에서는 보호 모드에서 애플리케이션이 작동하면서, 시스템 콜이나 BIOS 호출을 리얼 모드 상당으로 처리하기 위해, 이 모드를 이용하고 있다.

하지만, x64 (Intel 64 및 AMD64)의 64비트 모드 (롱 모드영어)에서는 가상 86 모드를 사용할 수 없으므로[19], 가상화나 에뮬레이션 등의 다른 기술이 필요하게 되었다.

다음은 가상 86 모드를 사용하는 프로그램 및 운영 체제 목록이다.

프로그램/운영 체제출시 연도
FlexOS 3861987년
Concurrent DOS 3861987년
Windows/386 2.101987년
DESQview 3861988년
Windows 3.x1990년
Multiuser DOS1991년
Windows for Workgroups 3.1x1992년
OS/2 2.x1992년
4690 OS1993년
REAL/321995년
386 향상 모드에서 실행되는 프로그램, 가상 도스 머신을 통해 Windows 95, 98, 98 SE 및 ME
Merge를 통해 SCO UNIX
DOSEMU를 통해 리눅스
x86 Windows NT 기반 운영 체제의 NTVDM [3]
일부 부트 로더(예: GRUB) [4][5]


7. 한계

x64 (Intel 64 및 AMD64)의 64비트 모드 (롱 모드|롱 모드영어)에서는 가상 86 모드를 사용할 수 없으므로[19], 가상화나 에뮬레이션 등의 다른 기술이 필요하다.

8. 64비트 환경에서의 대안

x86-64 롱 모드에서는 가상 8086 모드를 사용할 수 없지만, 레거시 모드에서 실행되는 x86-64 지원 프로세서에서는 여전히 존재한다.[19] 이 문제를 해결하기 위해 가상화나 에뮬레이션 등의 다른 기술이 필요하게 되었다.

8. 1. 인텔 VT-x

인텔 VT-x는 x86-64 롱 모드에서 가상 8086 모드를 실행하는 기능을 다시 가져오지만, (물리적) 프로세서를 VMX 루트 모드로 전환하고 가상 8086 모드에서 실행되는 논리적 (가상) 프로세스를 시작해야 한다.[14]

웨스트미어 및 이후 인텔 프로세서는 일반적으로[15] "무제한 게스트" 기능을 사용하여 가상 프로세스를 직접 리얼 모드로 시작할 수 있다 (이는 자체적으로 확장 페이지 테이블을 필요로 한다). 이 방법을 사용하면 부팅을 위해 레거시 BIOS를 실행하기 위해 중첩된 가상 8086 모드에 의존할 필요가 없다.[16][17]

8. 2. AMD-V

AMD-V는 게스트에서 가상 8086 모드를 사용할 수 있지만, CR0.PE=0, CR0.PG=1 (즉, 보호 모드는 비활성화되었지만 페이징은 활성화됨)인 SVM (Secure Virtual Machine) 모드 게스트를 생성하여 게스트를 "페이징된 리얼 모드"로 실행할 수도 있다. 이것은 일반적으로 불가능하지만, 호스트가 페이지 폴트를 가로채는 경우 SVM 게스트에 허용된다.[18]

참조

[1] 웹사이트 Sending software to do hardware's job http://www.infoworld[...] InfoWorld 2014-01-27
[2] 간행물 "Behind The Scenes: The Making of the 386" Intel Corporation 1985-11
[3] 웹사이트 Windows NT 4.0 Workstation Architecture http://www.microsoft[...]
[4] 논문 Grub2 Booting Process https://www.slidesha[...] 2016-06-21
[5] 웹사이트 Virtual 8086 Mode - OSDev Wiki https://wiki.osdev.o[...] 2020-12-10
[6] 서적 Pentium Pro and Pentium II System Architecture https://books.google[...] Addison-Wesley
[7] 서적 Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 3 (3A, 3B, 3C & 3D): System Programming Guide https://software.int[...] Intel 2020-05
[8] 웹사이트 Mailing List Archive: Re: 2.6.14: CR4 not needed to be inspected on the 486 anymore? http://www.gossamer-[...] Gossamer-threads.com 2014-02-20
[9] 웹사이트 Pentium Protected Mode Virtual Interrupts (PVI) http://www.rcollins.[...] Rcollins.org 2014-02-20
[10] 웹사이트 Virtual Mode Extensions on the Pentium Processor http://www.rcollins.[...] Rcollins.org 2014-02-20
[11] 서적 Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 2 (2A, 2B, 2C & 2D): Instruction Set Reference, A-Z https://software.int[...] Intel 2020-05
[12] 웹사이트 VME Broken on AMD Ryzen http://www.os2museum[...] 2017-05-12
[13] 웹사이트 Revision Guide for AMD Family 17h Models 00h-0Fh Processors https://support.amd.[...] 2018-06
[14] 서적 Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 3B: System Programming Guide, Part 2 http://www.intel.com[...] Intel 2009-09
[15] 웹사이트 Intel Virtualization Technology List http://ark.intel.com[...] Ark.intel.com 2014-02-20
[16] 문서 "Intel added unrestricted guest mode on Westmere micro-architecture and later Intel CPUs, it uses EPT to translate guest physical address access to host physical address. With this mode, VMEnter without enable paging is allowed." http://2013.asiabsdc[...]
[17] 문서 "If the “unrestricted guest” VM-execution control is 1, the “enable EPT” VM-execution control must also be 1" http://download.inte[...]
[18] 서적 AMD64 Architecture Programmer's Manual, Volume 2: System Programming https://www.amd.com/[...] Advanced Micro Devices 2021-11
[19] 웹사이트 インテル® エクステンデッド・メモリ64 テクノロジ・ソフトウェア・デベロッパーズ・ガイド第 1 巻(全 2 巻)リビジョン 1.1 https://www.intel.co[...] 2024-09-14
[20] 웹인용 보관된 사본 http://www.microsoft[...] 2010-11-20



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

문의하기 : help@durumis.com