KR20050035833A - 가상 기계에서 합성 명령어를 사용하는 시스템 및 방법 - Google Patents

가상 기계에서 합성 명령어를 사용하는 시스템 및 방법 Download PDF

Info

Publication number
KR20050035833A
KR20050035833A KR1020040067241A KR20040067241A KR20050035833A KR 20050035833 A KR20050035833 A KR 20050035833A KR 1020040067241 A KR1020040067241 A KR 1020040067241A KR 20040067241 A KR20040067241 A KR 20040067241A KR 20050035833 A KR20050035833 A KR 20050035833A
Authority
KR
South Korea
Prior art keywords
instruction
instructions
synthetic
processor
operating system
Prior art date
Application number
KR1020040067241A
Other languages
English (en)
Inventor
트로트에릭
Original Assignee
마이크로소프트 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 코포레이션 filed Critical 마이크로소프트 코포레이션
Publication of KR20050035833A publication Critical patent/KR20050035833A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45554Instruction set architectures of guest OS and hypervisor or native processor differ, e.g. Bochs or VirtualPC on PowerPC MacOS
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45566Nested virtual machines

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Stored Programmes (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

본 발명은 트랩을 발생시키는 "합성 명령어(synthetic instructions)" 세트를 제공하여 x86 프로세서 아키텍처의 단점을 보완함으로써 가상 기계(virtual machine, VM)가 안전하게 명령어를 처리할 수 있는 기회를 제공한다. x86 아키텍처에는 "위법"이지만 그럼에도 불구하고 가상 기계가 이해할 수 있는 명령어를 사용함으로써, 종래의 명령어로 x86 프로세서를 수행하면 문제가 있는 가상 기계에서 잘 정의된 액션을 수행하는 이 합성 명령어를 사용하는 방법은 x86 프로세서 시스템을 위한 훨씬 향상된 프로세서 가상화(processor virtualization)를 제공한다.

Description

가상 기계에서 합성 명령어를 사용하는 시스템 및 방법{SYSTEMS AND METHODS FOR USING SYNTHETIC INSTRICTIONS IN A VIRTUAL MACHINE}
본 발명은 일반적으로 운영 체제 분야에 관한 것으로, 보다 구체적으로는, 가상 기계(또는 프로세서 가상화)에 의해서는 이해가능하나 미리 정의된 프로세서 아키텍처(예를 들어, x86 아키텍처)에 의해서는 "위법(illegal)"으로 정의되는 명령어의 사용에 관한 것으로, 가상 기계 환경내에서 실행될 때, 본 발명은 이 명령을 활용하여 잘 정의된 합법적인 액션을 수행한다. 어느 정도까지, 본 발명은 "합성(synthetic)" 명령어를 기존의 명령어 세트에 추가한다.
가상 기계(Virtual Machines)
컴퓨터는 특정 시스템 명령어 세트를 실행하도록 설계된 범용 중앙 처리 장치(central processing unit, CPUs)를 포함한다. 유사한 아키텍처 또는 설계 사양을 지닌 프로세서 그룹은 동일한 프로세서 계열의 일원으로 간주될 수 있다. 현재 프로세서 계열의 실례로는 아리조나 피닉스의 모토롤라 사에서 제조된 모토롤라 680X0 프로세서 계열; 캘리포니아 서니베일의 인텔 사에서 제조된 인텔 80X86 프로세서 계열; 및 캘리포니아 쿠퍼티노의 애플 사에서 제조된 컴퓨터에서 사용되고 모토롤라 사에서 제조된 PowerPC 프로세서 계열이 있다. 유사한 아키텍처 및 설계 사항으로 인해 프로세서 그룹이 동일한 계열에 속할 수 있지만, 프로세서는 클락 속도(clock speed) 및 다른 성능 매개변수에 따라 계열내에서도 매우 다양하다.
마이크로프로세서 각 계열은 그 프로세서 계열에 고유한 명령어를 실행한다. 프로세서 또는 프로세서 계열이 실행할 수 있는 명령어를 종합한 세트는 프로세서의 명령어 세트로 알려져 있다. 실례로서, 인텔 80X86 프로세서 계열에서 사용되도록 설정된 명령어는 PowerPC 프로세서 계열에서 사용되도록 설정된 명령어와 호환되지 않는다. 인텔 80X86 명령어 세트는 복잡 명령어 세트 컴퓨터(complex instruction set computer, CISC) 포맷에 기반한다. 모토롤라 PowerPC 명령어 세트는 축소 명령어 세트 컴퓨터(reduced instruction set computer, RISC) 포맷에 기반한다. CISC 프로세서는 많은 수의 명령어를 사용하고, 그 중 일부는 다소 복잡한 기능을 수행할 수 있지만, 일반적으로 실행하는 데에 많은 클록 사이클을 필요로 한다. RISC 프로세서는 더 적은 수의 사용가능한 명령어를 사용하여 훨씬 높은 효율로 실행되는 간단한 명령어 세트를 수행한다.
컴퓨터 시스템간의 프로세서 계열이 고유하여 또한 일반적으로 컴퓨터 시스템 하드웨어 아키텍처의 다른 엘리먼트들은 서로 호환하지 않는다. 인텔 80X86 프로세서 계열의 프로세서로 제조된 컴퓨터 시스템은 PowerPC 프로세서 계열의 프로세서로 제조된 컴퓨터 시스템의 하드웨어 아키텍처와 다른 하드웨어 아키텍처를 지닐 것이다. 프로세서 명령어 세트 및 컴퓨터 시스템 하드웨어 아키텍처의 고유성 으로 인해, 애플리케이션 소프트웨어 프로그램은 일반적으로 특정 운영 체제를 수행하는 특정 컴퓨터 시스템상에서 수행되도록 작성된다.
컴퓨터 제조업자는 컴퓨터 제조업자의 생산 라인과 관련된 마이크로프로세서 계열상에서 수행되는 애플리케이션을 더 많게 하여 시장 점유율을 최대화하고자 한다. 컴퓨터 시스템상에서 수행될 수 있는 운영 체제 및 애플리케이션 프로그램의 수를 늘이기 위해, 기술 일선에서는 호스트라 불리는 한 유형의 CPU를 지니는 소정의 컴퓨터가, 관련되지 않은 유형의 CPU, 즉 게스트의 명령어를 에뮬레이트할 수 있도록 하는 에뮬레이션 프로그램을 포함하는 것을 개발해오고 있다. 그러므로, 호스트 컴퓨터는 소정의 게스트 명령어에 대한 응답으로 호출될 하나 이상의 호스트 명령어를 발생시키는 애플리케이션을 실행할 것이다. 그러므로, 호스트 컴퓨터는 자기 자신의 하드웨어 아키텍처를 위해 설계된 소프트웨어 및 관련되지 않은 하드웨어 아키텍처를 지니는 컴퓨터를 위해 작성된 소프트웨어 둘 다를 수행할 수 있다. 더 구체적인 실례로서, 애플 컴퓨터에 의해 제조된 컴퓨터 시스템은, 예를 들어, PC 기반 컴퓨터 시스템을 위해 작성된 운영 체제 및 프로그램을 수행할 수 있다. 또한 단일 CPU상에서 다수의 호환되지 않는 운영 체제를 동시에 동작시키는 에뮬레이션 프로그램을 사용하는 것도 가능하다. 이러한 배치에서, 각 운영 체제는 서로 호환되지 않지만, 에뮬레이션 프로그램은 두 운영 체제 중 하나를 호스트할 수 있고, 그렇지 않을 경우 호환하지 않는 운영 체제들이 동일한 컴퓨터 시스템상에서 동시에 수행될 수 있도록 한다.
게스트 컴퓨터 시스템이 호스트 컴퓨터 시스템상에서 에뮬레이트될 때, 게스트 컴퓨터 시스템이 가상 기계가 되는데, 그 이유는 호스트 컴퓨터 시스템은 게스트 컴퓨터 시스템의 하드웨어 아키텍처의 동작을 나타내는 소프트웨어로서 단지 존재하기 때문이다. 에뮬레이터(emulator) 및 가상 기계(virtual machine)라는 용어는 때때로 호환성있게 사용되어 전체 컴퓨터 시스템의 하드웨어 아키텍처를 흉내내거나 에뮬레이트하는 기능을 말한다. 실례로서, 캘리포니아, 산마테오의 코네틱스 사에 의해 생성된 가상 PC 소프트웨어는 인텔 80X86 펜티엄 프로세서 및 각종 마더보드 컴포넌트 및 카드를 포함하는 컴퓨터 전체를 에뮬레이트한다. 이러한 컴포넌트의 동작은 호스트 컴퓨터상에서 수행되는 가상 기계에서 에뮬레이트된다. PowerPC 프로세서를 지니는 컴퓨터 시스템과 같이, 호스트 컴퓨터의 운영 체제 소프트웨어 및 하드웨어 아키텍처상에서 실행된는 에뮬레이터 프로그램은 게스트 컴퓨터 시스템 전체의 동작을 흉내낸다. 에뮬레이터 프로그램은 호스트 기계의 하드웨어 아키텍처와 에뮬레이트된 환경내에서 수행되는 소프트웨어에 의해 전송된 명령어간의 교환으로서 동작한다.
x86 아키텍처
"x86"은 x86 명령어 세트 아키텍처(instructions set architecture, ISA)를 사용하는 모든 마이크로프로세서 계열 시리즈에 대한 일반적인 이름이다. IA32는 x86 ISA를 사용하는 인텔에 의해 개발된 특정 프로세서 아키텍처이다. x86은 인텔의 8086 마이크로프로세서로 시작된다. x86 프로세서는 인텔의 8086, 286, 386, 486, 펜티엄, MMX가 있는 펜티엄, 펜티엄 프로, 펜티엄 II, 펜티엄 III, 및 펜티엄 4 프로세서 계열뿐만 아니라 향상된 Micro Device의(AMD의) K5, K6, K6-2, K6-3, Athlon, 향상된 Athlon(즉, "선더버드(thunderbird)"), Athlon 4, 및 Athlon MP, Athlon 64, Opteron 등을 포함하지만 이에 제한되지 않는다.
가상 기계 모니터(VMM)는 하드웨어 바로 위에서 수행되는 소프트웨어층이고, VMM은 자신이 가상화하는 하드웨어와 동일한 인터페이스를 노출시킴으로써 기계의 모든 리소스를 가상화한다(이것은 VMM이 VMM상에서 수행되는 운영 체제층에 의해 통지되지 않도록 함). 그러나, IA32 아키텍처 등을 포함한 x86 아키텍처는, VMM 구현에 대한 많은 도전을 나타내는 많은 가상화 결점을 포함한다. 우선, x86 아키텍처는 모든 프로세서 상태를 특권 상태 또는 사용자 상태 둘 중 하나로 나누지 않고, 그 중에서도 특히, 특권 상태는 현재의 특권 레벨을 나타내는 임의의 제어 또는 상태 필드 뿐만 아니라 기초가 되는 운영 체제(또는 "감독자층(supervisor layer)")의 제어 아래에 있을 필요가 있는 다른 리소스들을 포함하여 사용자 레벨 애플리케이션 인스턴스간에 리소스 제어 및 보호 장벽을 구현해야 한다. 두번째로, x86 아키텍처는 특권 상태로의 액세스(판독이든 기입이든)가 사용자 레벨에서 시도되는 모든 경우에서 트랩을 발생시키지 않는다. 세번째로, x86 아키텍처는 사용자 레벨 코드가 가상화되어야 하는 비특권 상태(예를 들어, 타이머 값, 성능 계수, 프로세서 특징 레지스터)로의 액세스를 시도할 때 트랩을 발생시킬 수단이 없다. 네번째로, 모든 메모리내 구조가 현재 어드레스 공간 외부에 저장되거나 또는 VM내의 잘못된 또는 부당한 메모리 액세스로부터 보호될 수 있어야 하지만, x86 아키텍처는 이를 허용하지 않는다. 다섯번째이자 마지막으로, x86 아키텍처는 끼어들기(interrupt) 또는 트랩(trap) 발생시 끼어들기 또는 트랩이 처리된 후에는 모든 프로세서 상태를 트랩 이전의 상태로 복구할 수 없다.
x86 아키텍처의 전술된 많은 단점 및 제한은 원할 때 트랩을 발생시키지 못하는 명령어로부터 기인한다. 다시 말해, 이들 명령어가 대신 트랩을 발생시키면, 가상 기계 모니터(VMM)는 올바르게 이 명령어들을 가상화할 수 있다.
본 발명은 트랩을 발생시키는 "합성 명령어(synthetic instructions)"를 소개함으로써 x86 아키텍처의 단점을 보완하고, 가상 기계(VM)가 명령어를 안전하게 처리할 수 있는 기회를 제공한다. x86 아키텍처에는 "위법(illegal)"이지만 그럼에도 불구하고 가상 기계가 이해할 수 있는 명령어를 사용함으로써, 본 방법은 그렇지 않으면 x86 프로세서상에서 실행되는 종래의 명령어에 의해 수행될 때 문제가 있는 가상 기계에서 합성 명령어를 사용하여 잘 정의된 액션을 수행하고, 따라서 x86 프로세서 시스템에 대해 훨씬 향상된 프로세서 가상화를 제공한다.
이하의 바람직한 실시예의 상세한 설명 및 전술한 요약은 첨부된 도면과 함께 해석될 때 더 잘 이해된다. 본 발명을 도시하기 위해, 본 발명의 예시적인 구성이 도면에 도시되어 있다; 그러나, 본 발명은 개시된 특정 방법 및 수단에 제한되지 않는다.
본 발명의 내용은 법에 의한 요구사항을 만족시키는 전문성을 가지고 설명된다. 그러나, 설명 그 자체는 본 특허의 범위를 제한하고자 하는 것이 아니다. 오히려, 발명자는 청구된 내용이 또한 다른 방식으로 구현될 수 있고, 다른 단계 또는 본 명세서에 설명된 것과 유사한 단계의 조합을 포함하고, 다른 종래 또는 미래의 기술과 함께 구현될 수 있다는 것을 고려한다. 게다가, 본 명세서에서 사용되는 "단계(step)"라는 용어는 적용된 방법의 다른 엘리먼트를 의미하지만, 각 단계의 순서가 명시적으로 기술되어 있는 경우를 제외하고는, 그 용어가 본 명세서에 개시된 각종 단계들간 또는 단계들의 임의의 특정 순서를 의미하는 것으로 해석되어져서는 안 된다. 마지막으로, 본 명세서 이하의 설명이 때때로 IA32 아키텍처 및/또는 x86 프로세서 계열에 초점을 두겠지만, 본 명세서 그 어느 곳에서도 이들 서브그룹에 제한되고자 하는 것이 아니며, 이로써 이러한 임의의 설명은 본 발명의 각종 실시예가 적용되고/되거나 활용될 수 있는 모든 적용가능한 프로세서 아키텍처를 명백히 포함하고, 이 프로세서 아키텍처는 모든 x86 프로세서 아키텍처 및 그의 동등물을 포함하되 이에 제한되지 않고, 또한 명백히 IA32 및 IA64 아키텍처 및 그들의 동등물, 확장물 또는 파생물 등을 포함한다.
컴퓨터 마이크로프로세서(computer microprocessor)
마이크로프로세서는 마이크로칩상의 컴퓨터 프로세서이다. 이것은 레지스터라 불리는, 번호가 매겨진(number-holding) 작은 영역을 이용하여 산술 및 논리 연산을 수행하도록 설계된다. 일반적인 마이크로프로세서의 연산은 더하기, 빼기, 두 숫자 비교하기 및 한 영역에서 다른 영역으로 숫자 인출하기(fetch)등을 포함한다. 이러한 연산들은 마이크로프로세서 설계의 일부인 명령어 세트의 결과이다.
명령어란 컴퓨터 프로그램에 의해 컴퓨터 프로세서에게 주어진 순서이다. 가장 낮은 레벨에서 각 명령어는, 컴퓨터가 수행하고자 하는 ("더하기"와 같은)물리적 연산을 나타내는 0과 1들의 시퀀스이고, 특정 명령어 유형에 따라, 명령어를 수행하는데 사용되는 데이터 또는 데이터의 컴퓨터 메모리상의 위치를 포함할 수 있는 레지스터라 불리는 특별 스토리지 영역의 사양이다.
레지스터는 컴퓨터 프로세서의 일부로서 데이터를 보유하는 장소의 작은 세트 중 하나이다. 레지스터는 컴퓨터 명령어, 스토리지 주소, 또는 (비트 시퀀스 또는 개별적인 문자와 같은)임의의 데이터를 보유할 수 있다. 일부 명령어는 레지스터를 명령어의 일부로 지정한다. 예를 들어, 명령어는 2개의 정의된 레지스터의 내용을 함께 합쳐 특정 레지스터에 두도록 지정할 수 있다. 레지스터는 예를 들어, 32-비트 명령어 컴퓨터에서 레지스터의 길이가 32 비트이어야 하는 것처럼 명령어를 보유할 수 있을 만큼 충분히 커야 한다. 일부 컴퓨터 설계에서는, 짧은 명령어를 위해 예를 들어 반쪽 레지스터(half-register)와 같이 작은 레지스터도 있다. 프로세서 설계 및 언어 규칙에 따라, 레지스터는 번호가 매겨지거나 임의의 이름을 부여받을 수 있다. 그러나, 본 명세서에서 전문성을 지니고 설명되는 특정 레지스터, 특정 명령어 및 다른 기술 엘리먼트는 x86 아키텍처에 기초하고 있고, 당업자들에게 널리 알려져 있고 당업자들이 잘 알고 있다.
가상 기계 아키텍처(virtual machine architecture)
도 1은 하드웨어(102) 바로 위에서 수행되는 가상 기계 모니터(VMM) 소프트웨어 층(104)을 포함하는 가상화된 컴퓨팅 시스템을 도시하며, VMM(104)은 자신이 가상화하는 하드웨어(이 하드웨어는 VMM으로 하여금 그 위에서 수행하는 운영 체제층에 의해 통보되지 않도록 함)와 동일한 인터페이스를 노출시킴으로써 기계의 모든 리소스를 가상화한다. VMM(104)상에는 2개의 가상 기계 구현이 있는데, 즉 가상화된 인텔 386 프로세서인 VM A(108)와 모토롤라 680X0 프로세서 계열 중 하나 이상의 버전이 가상화된 VM B(110)이다. VM(108) 및 VM(110)상에는 각각 게스트 운영 체제 A(112) 및 B(114)가 있다. 게스트 OS A(112)상에는 2개의 애플리케이션, 즉 애플리케이션 A1(116) 및 애플리케이션 A2(118)가 수행되고 있고, 게스트 OS B(114)상에는 애플리케이션 B1(120)이 수행되고 있다.
도 2는 동일하게 가상화된 컴퓨팅 시스템 환경을 도시하지만, 컴퓨터 하드웨어(102)와 직접 인터페이스하는 호스트(내재된) 운영 체제 X(122)를 지니고, 내재된 OS X(122)상에는 애플리케이션 X(124)가 수행되고 있다.
도 3은 컴퓨터 시스템(310)의 에뮬레이트된 운영 환경에 대한 하드웨어 및 소프트웨어 아키텍처의 논리층을 도시하고 있다. 에뮬레이션 프로그램(314)은 호스트 운영 체제 및/또는 하드웨어 아키텍처(312)상에서 수행된다. 에뮬레이션 프로그램(314)은 게스트 하드웨어 아키텍처(316) 및 게스트 운영 체제(318)를 에뮬레이트한다. 이어서 소프트웨어 애플리케이션(320)은 게스트 운영 체제(318)상에서 수행된다. 도 3의 에뮬레이트된 운영 환경에서, 에뮬레이션 프로그램(314)의 동작으로 인해, 소프트웨어 애플리케이션(320)은 일반적으로 호스트 운영 체제 및 하드웨어 아키텍처(312)에 호환되지 않는 운영 체제상에서 수행되도록 설계되었음에도 불구하고, 컴퓨터 시스템(310)상에서 수행될 수 있다.
프로세서 가상화(processor virtualization)
가상 기계(VM)에서 프로세서 가상화를 제공하는 방법에는 에뮬레이션(emulation) 및 직접 실행(direct execution)의 2가지가 있다. 가상 기계는 프로세서 가상화를 제공하기 위해 둘 중 한가지 방법 또는 둘 다("혼성(hybrid)")를 사용할 수 있다.
에뮬레이션은 해석기(interpreter) 또는 이진 번역 메커니즘 둘 중 하나를 사용하는 것이고, 또한 게스트 및 호스트 프로세서가 상이하게 다른 시스템에서 VM을 구현할 때 유일한 가능한 선택이다. 예를 들어, 매킨토시를 위한 마이크로소프트 가상 PC는 PowerPC-기반 매킨토시 시스템상에서 x86-기반 VM(x86 프로세서 아키텍처를 에뮬레이팅함)을 구현한다. 또한 게스트와 호스트 프로세서는 동일하지만 프로세서가 가상화를 충분히 지원하지 못하는 상황에서도 에뮬레이션이 필요하다. x86 아키텍처의 일부 운영 모드가 이 범주에 속한다.
그러나, 에뮬레이션이 가장 유연하고 호환성이 높은 가상화 메커니즘이긴 하나, 일반적으로 가장 빠른 것은 아니다. 해석 또는 이진 번역 둘 중 하나에 의한 에뮬레이션은 런타임 오버헤드(runtime overhead)를 유발한다. 해석의 경우, 이것은 상대적으로 구현하기 쉽지만, 종종 90-95% 정도의 오버헤드가 발생한다(즉, 그 결과, "내재된" 성능의 단 5-10%만이 가능하다). 이진 번역 메커니즘은 반대로 해석기보다 더 복잡하고 따라서 구현하기 더 어렵지만, 이 메커니즘은 성능 손실이 적고 단지 25-80%의 오버헤드가 발생한다(즉, 그 결과, "내재된" 성능의 20-75%가 가능하다).
일반적으로, 직접 실행은 어떤 접근방법을 사용하든 에뮬레이션보다 더 빠르고 더 효율적이다. 좋은 직접 실행 구현은, 단지 몇몇 % 차이는 있지만, 내재된 성능과 거의 동등한 성능을 달성할 수 있다. 그러나, 당업자들이 이해하고 있고 알고 있듯이, 직접 실행은 일반적으로 가상화된 코드가 시스템을 떠맡는 것을 방지하는 프로세서 보호 기능(processor protection facility)에 의존한다. 보다 구체적으로, 직접 실행은 사용자 레벨 동작과 특권 레벨 동작을 구별하는 프로세서(즉, 특권 레벨 프로세서 리소스 대 사용자 레벨 리소스를 액세스하는 소프트웨어)에 의존한다.
특권 모드에서 수행되는 소프트웨어(즉, 신뢰되는 소프트웨어)는 레지스터, 모드, 설정, 메모리내의 데이터 구조등의 특권 프로세서 리소스에 액세스할 수 있다. 반대로, 사용자 모드는 현대의 시스템에서 계산 작업 대부분을 수행하는 신뢰되지 않는 소프트웨어를 의미한다. 많은 프로세서(전부 다는 아님)는 사용자 레벨 상태와 (각 모드에 대응하는)특권 레벨 상태를 엄격히 구분하고, 프로세서가 사용자 모드에서 동작하고 있을 때는 특권 레벨 상태로의 액세스가 허용되지 않는다. 이러한 구분 덕분에, 호스트 운영 체제(혹은 그 동등물)는 주요 리소스를 보호할 수 있고, 사용자 레벨 소프트웨어의 버그 또는 부당한 조각이 전체 시스템의 기능을 멈추게 하는 것을 방지할 수 있다.
사용자 레벨 코드의 직접 실행에 대해, VMM은 모든 특권 위반을 발견하여 게스트의 예외 핸들러(exception handler)로 전달한다. 그러나, 특권 레벨 코드의 직접 실행은, 특권 레벨 코드가 프로세서의 모든 특권 상태 엘리먼트에 완전히 액세스할 수 있다는 가정 아래 작성된다는 사실에도 불구하고, 사용자 레벨에서 특권 레벨 코드를 수행하는 것을 포함한다. 이러한 불일관성을 해소하기 위해, VM은 모든 특권 명령어(즉, 직접적으로 또는 간접적으로 특권 상태에 액세스하는 명령어)에 대해 트랩을 발생시키는 프로세서에 의존한다. 특권 위반 트랩은 VMM내에서 트랩 핸들러를 호출한다. 그리고 나서 VMM의 트랩 핸들러는 특권 명령어의 암시적인 상태 변경을 에뮬레이트하고 다음 명령어로 제어를 다시 리턴한다. 이 특권 명령어 에뮬레이션은 특정 VM 인스턴스 전용인 새도우 상태 사용을 종종 포함한다.
예를 들어, 프로세서 아키텍처가 특권 모드에서만 액세스될 수 있는 특권 모드 레지스터(privileged mode register, PMR)를 포함한다면, 사용자 레벨 모드에서 PMR을 판독하려 하거나 PMR에 기입하려고 하는 모든 시도는 트랩을 발생시킬 수 있다. VMM의 트랩 핸들러는 트랩의 발생을 결정하고, 관련 VM 인스턴스 전용인 PMR 새도우 값을 참조할 것이다(이 PMR 값은 호스트 프로세서 PMR에 현재 있는 값과 다를 수 있음).
트래핑 명령어 빈도 및 트랩을 처리하는 데 드는 비용에 따라, 이 기술은 상대적으로는 작지만 성능이 두드러지게 떨어질 수 있다. 예를 들어, IBM 및 Amdahl에 의해 개발된 일부 VMM들은 내재된 속도의 80-98%에서 수행되는데, 따라서 이 트래핑 오버헤드로 인해 순 2-15%의 성능 손실이 있다.
x86/IA32의 한계(limitation of x86/IA32)
가상화를 위해 이상적인 프로세서는 완전히 가상화가능해야 한다고 한다 - 즉, 완전히 가상화가능한 프로세서는 이하의 요구사항을 만족시키는 직접 실행 가상화 메커니즘의 구현을 가능하게 한다.
(a)VMM은 반드시 프로세서 및 시스템 리소스에 대해 통제할 수 있어야 한다.
(b)VM(사용자 레벨 또는 특권 레벨에서든)내에서 수행되는 소프트웨어는 그것이 가상 기계에서 수행되고 있다고 말할 수 있어서는 안 된다.
이 요구사항을 만족시키기 위해, 완전히 가상화가능한 프로세서는 이하의 속성을 나타낸다.
- 메모리 관리 유닛(memory management unit, MMU) 또는 유사한 어드레스 번역 메커니즘을 포함함
- 둘 이상의 특권 레벨을 제공함
- 모든 프로세서 상태를 특권 또는 사용자 상태 둘 중 하나로 나눔; 특권 상태는 현재 특권 레벨을 표시하는 임의의 제어 또는 상태 필드들을 포함해야 함
- 사용자 레벨에서 특권 상태(판독 또는 기입이든)로의 임의의 액세스가 시도되면 트랩을 발생시킴
- 사용자 레벨 코드가 가상화되어야 하는 비특권 상태(예를 들어, 타이머 값, 성능 계수, 프로세서 특징 레지스터)로 액세스하고자 할 때 선택적으로 트랩을 발생시킬 수 있는 수단을 지님
- 모든 메모리 내장 프로세서 구조는 현재 어드레스 공간의 외부에 저장되거나 또는 VM내의 잘못되거나 부당한 메모리 액세스로부터 보호될 수 있음
- 끼어들기(interrupt) 또는 트랩 발생 시 임의의 프로세서 상태는 끼어들기 또는 트랩이 처리된 후 트랩 상태 이전으로 복구될 수 있음
일부를 지명하면, PowerPC, DEC Alpha 등을 포함하는 몇몇의 현대 프로세서들은 이 요구사항을 만족시킨다. 그러나, IA32는 그렇지 않고, 처음 2개의 요구사항만을 만족시킨다. 그러므로 IA32 아키텍처는 VMM 구현에 대해 많은 도전을 나타내는 많은 가상화 결점을 포함한다.
먼저, IA32 아키텍처는 여러 인스턴스에서 사용자/특권 상태 분리 요구사항을 위반하는데, 이들 중 가장 중요한 것은 도 4에 도시된 대로 사용자 및 특권 상태 둘 다를 포함하는 EFLAGS 레지스터이다. 이하의 EFLAGS 필드, VIP, VIF, VM, IOPL 및 IF는 특권 상태로 간주되어야 한다(다른 모든 필드들은 사용자 상태를 나타내며, 특권 상태일 필요가 없다). 그러나, IA32에 대해, EFLAGS 레지스터의 특권 필드를 판독하고 그에 기입하는 명령어들(PUSHF/PUSHFD, POPF/POPFD 및 IRET를 포함함)은 사용자 모드로 실행될 때 트랩되지 않으며, IA32에서 이 명령어를 강제로 트랩시키는 수단은 없다.
게다가, IA32에서 PUSHF 및 POPF 명령어는 종종 게스트 커널(링 0) 코드내에서 사용되어 IF(끼어들기 허용 플래그)의 상태를 저장하고 복구한다. 가상 기계내에서, 이 커널 코드는 더 높은 링 레벨(예를 들어, 링 1)에서 실행되고, IOPL은 설정되어 IN/OUT 명령어가 트랩한다. VM내에서 수행되는 운영 체제가 호스트 프로세서상의 끼어들기를 불가하도록 허용되어서는 안되기 때문에, 가상 기계 코드가 실행되는 동안, 가상 IF의 상태에도 불구하고 실제 IF 값은 1로 설정된다. 그 결과, PUSHF 명령어는 항상 IF=1로 EFLAGS 값을 넣고, POPF 명령어는 꺼내어진 EFLAGS 값의 IF 필드를 항상 무시한다.
EFLAGS 레지스터외에, 특권 및 사용자 상태가 혼합된 2개의 추가 영역은 CS 및 SS 레지스터이다. 이들 레지스터의 하위 2비트는 특권 상태에 있는 현재의 특권 레벨(current privilege level, CPL)을 포함하는 반면, 이들 레지스터의 상위 14비트는 특권이 아닌 세그먼트 인덱스 및 설명자 테이블 선택자(descriptor table selector)를 포함한다. 명시적으로 또는 암시적으로 CS 또는 SS 선택자에 액세스하는 명령어(CALLF, SS로부터의 MOV 및 SS로부터의 PUSH를 포함함)는 사용자 모드에서 실행될 때 트랩하지 않는다. 여기서 주의할 것은 다른 명령어들이 CS 또는 SS가 스택(예를 들어, INT, INTO, 콜 게이트(call gate)를 통해 JMPF, 콜 게이트를 통해 CALLF)으로 넣어지도록 하지만, 이들 명령어들은 트랩될 수 있고, VMM으로 하여금 넣어진 CPL 값을 가상화하도록 한다.
사용자 레벨 코드가 특권 프로세서 상태를 직접 액세스할 수 있도록 허용하는 x86/IA32 보호 모델의 추가적인 결함은 SGDT, SIDT, SLDT, SMSW 및 STR 명령어를 포함한다. 각종 이유로 인해, 올바른 가상화를 위해 GDT, LDT, IDT 및 TR의 새도우가 필요하고, 이것은 TR, GDTR 및 IDTR이 게스트 운영 체제에 의해 지정되는 테이블이 아닌 VMM의 새도우 테이블을 가리킬 것이라는 것을 의미한다. 그러나, 비특권 코드가 이들 레지스터를 판독할 수 있기 때문에, 이들 내용을 제대로 가상화하는 것은 불가능하다. 게다가, GDT 및 LDT내의 설명자를 액세스하는 몇몇 명령어들은 LAR, LSL, VERR, 및 VERW를 포함한 비특권 상태에서 실행될 때 트랩하지 않는다. GDT/LDT 새도잉이 필요하기 때문에, 이들 4개의 명령어는 VM내에서 올바르지 않게 실행될 수 있다. 게다가, CPUID 명령어는 트랩하지 않는다. 새 프로세서 특징을 시뮬레이트하거나 가상 기계내의 프로세서 특징을 불가하게 하기 위해서는, 비특권 모드에서 실행될 때 CPUID상에서 트랩할 수 있는 것이 중요하다.
게다가, VM 환경에서의 컨텍스트 스위칭(context switching)은 프로세서의 전체 상태를 저장하고 복구하는 기능에 좌우되지만, IA32 아키텍처는 이를 허용하지 않는다. 보다 구체적으로, 6개의 세그먼트(DS, ES, CS, SS, FS, GS) 각각에 대해 캐쉬된 세그먼트 설명자 상태가 세그먼트가 다시 로드될 때 프로세서 내부에 저장되고, 그 어떠한 구조적으로 정의된 메커니즘도 이 정보를 액세스할 수 없다. 그 결과, 이것은 가상화를 올바르게 하는 데에 중요한 장애이다. 예를 들어, 코드 조각이 세그먼트를 로드하고 그 세그먼트에 대응하는 메모리 내의 설명자를 수정할 경우, 이어지는 컨텍스트 스위치는 최초 세그먼트 설명자 정보를 올바르게 복구할 수 없을 것이다. 마찬가지로, 프로세서가 실제 모드에서 동작하다가 보호 모드로 전환하면, 세그먼트는 보호 모드 GDT/LDT내의 설명자에 대응하지 않는 선택자를 포함할 것이고, 이 시점에서 컨텍스트 스위치는 실제 모드내에서 최초로 로드되었던 캐쉬된 설명자를 올바르게 복구할 수 없을 것이다.
마찬가지로, PAUSE 명령어(스핀 락 실행에 대해 하이퍼스레드된 프로세서를 제공하기 위해 최근에 추가되었던 NOP의 미리 정해진 형태)는 다중 프로세서(multi processor) VM상에서 스핀 락과 사용될 때 문제를 초래한다. 예를 들어, 하나의 가상 프로세서가 제 2의 가상 프로세서에 의해 보유된 락(lock)에서 회전할 수 있고, 제 2의 가상 프로세서가 현재 실행중인 아닌 스래드상에서 수행되고 있을 경우, 제 1의 가상 프로세서는 오래동안 회전하여 그 결과 프로세서 사이클을 낭비할 수 있다. 가상 기계 모니터가 VM이 회전중이라는 것을 통보받을 경우 유용하겠지만, VMM으로 하여금 다른 VM을 수행하도록 스케줄을 짜거나 또는 제 2의 가상 프로세서 스레드가 스케줄되도록 신호를 보낼 수 있도록 하기 위해, 현재 가능한 이러한 통지 방법은 없다.
일부 VM 환경은 몇몇 다른 기술을 이용하여 이러한 단점을 해결하고, 일반적으로 혼성 방식으로 에뮬레이션 및 직접 실행 둘 다를 적용한다. 프로세서 모드 및 OS 자체로부터 도출된 다른 정보를 기반으로 특정 기술이 선택된다. 이러한 시스템에 대해, 도 5에 도시된 바와 같이, 일반적으로 VMM이 인식할 수 있는 4가지 개별적인 프로세서 모드 구분이 있다. 링 0 모드(오늘날의 OS 커널 레벨 코드 대부분에 대해 사용됨)일 경우 디폴트 행동(default behavior)을 오버라이드(overrride)하는 것이 가능하고 바람직하다. 이하의 설명 대부분에서 직접 실행 메커니즘을 통해 안전하게 모든 링 0 코드를 수행하기 위한 요구사항에 대해 설명할 것이다.
많은 VM 환경은 "링 압축(ring compression)"(VAX 아키텍처를 가상화하기 위해 DEC 기술자에 의해 맨 처음 사용되었음)이라 불리는 기술을 이용한다. 링 압축은 VMM이 가상화된 리소스를 액세스하는 일부 특권 레벨 명령어에서 트랩할 수 있도록 하기 위해 특권이 덜한 링(예를 들어, 링 1)내에서 링 0 코드를 실행하는 것을 포함한다. 예를 들어, IA32 페이지 테이블 베이스 포인터(IA32 page table base pointer)는 CR3 레지스터내에 저장된다. CR3를 판독하는 명령어는 링 0 내에서만 실행가능하다. 링 1에서 실행되면, 이 명령어는 프로세서로 하여금 트랩(특히, 유형 6의 "위법 동작(illegal operation)" 예외)을 발생시키도록 한다. 트랩 발생 시, VMM은 제어를 얻고 명령어를 에뮬레이트하여, VMM(호스트 프로세서의) CR3가 아니라 가상화된(게스트 프로세서의) CR3로 리턴한다.
대부분의 경우, VMM은 링 0에서 수행되어야 하는 코드가 실제로는 다른 링 레벨에서 실행되고 있다는 사실을 숨길 수 있다. 전술의 예에서, CR3를 액세스했던 코드는 트랩이 발생했다는 사실을 알지 못하는데, 그 이유는 명령어와 관련된 모든 중요한 상태 변경이 에뮬레이트되었기 때문이다. 그러나, IA32 가상화의 이러한 단점은 링 압축이 완전히 불투명한 것을 방지한다. 도 6에 도시된 명령어들은 링 0 코드가 더 높은 링 레벨에서 수행되고 있다는 사실을 드러내며, 이 명령어들을 사용하는 코드는 문제가 있고, 일반적으로 직접 실행 환경내에서 수행되기에 안전하지 못하다.
또한, IA32 아키텍처는 글로벌 및 로컬 설명자 테이블(global and local descriptor table)(각각 GDT 및 LDT) 둘 다를 포함한다. 이들 테이블은 링간의 변환을 제어하는 게이트 뿐만 아니라 코드 및 데이터 세그먼트를 포함한다. 게스트 OS는 자신의 GDT 및 LDT를 설정하여 링 3과 링 0간의 변환을 허용한다. 그러나, VMM은 링 0로의 직접 변환을 허용하지 않는데, 그 이유는 게스트 OS에게 호스트 프로세서에 대한 직접 제어를 넘겨주기 때문이다. 대신, VMM은 링 0로의 모든 변환에 관여해야만 하므로, 더 낮은 특권 링 레벨로 실행을 적절히 다시 보낸다. 이것은 VMM이 게스트의 GDT 및 LDT를 직접 사용할 수 없다는 것을 의미한다. 오히려, VMM은 게스트의 GDT 및 LDT의 내용을 전용 테이블로 새도우해야 하는데, 임의의 링 0 로의 직접 변환을 방지하기 위해 필요한 만큼 조정한다. 이러한 조정은 DPL(descriptor privilege level) 필드 및 설명자 유형 필드의 코드 비트에 제한된다. 이러한 사소한 수정으로 인해, 새도우된 설명자 테이블은 게스트 설명자 테이블과 약간 다를 수 있다.
대부분의 경우, 이러한 차이는 소프트웨어에 보이지 않는다: 그러나, 도 7에 도시된 것처럼, IA32 아키텍처에서 그 차이를 드러내는 몇몇 명령어들이 있다. 예를 들어, VMM 기입은 게스트 GDT 및 LDT를 오버랩하는 페이지를 보호하기 때문에 이들 테이블을 수정하려 하는 모든 시도는 VMM내에서 기입 보호 위반(write-protection fault)을 발생시킨다. 그 결과, VMM은 게스트 GDT 또는 LDT에 대한 변경이 내부 새도우 테이블에도 반영되었다는 것을 보증한다. 그러나, 현재 로드된 선택자에 대응하는 GDT 및 LDT 엔트리가 수정되었을 경우, 대응하는 메모리내의 설명자에 대한 수정은 취소할 수 없는데, 그 이유는 IA32 아키텍처에서는 현재 로드된 세그먼트 설명자를 판독하는 방법이 없기 때문이다. 이러한 상황에서, VMM은 메모리내의 설명자가 수정되도록 허용하기 전에 반드시 에뮬레이터에 의존해야 한다.
IA32 가상화에서 한가지 특별히 문제가 되는 측면은 EFLAGS 레지스터내의 IF(interrupt mask flag)이고, 이 상태는 명백히 특권 상태이어야 하지만, 이것은 비특권 코드에 의해 쉽게 판독가능하다. 게다가, 비특권 코드내에서 IF를 수정하고자 하는 시도는 트랩을 발생시키는 대신 단순히 무시될 수 있다 - 다시 말해, IF를 조작하는 일부 명령어들(STI 및 CLI를 포함하여)을 트랩하는 것은 가능하지만, IF를 액세스하는 다른 명령어들은 트래핑하지 않는다. 트래핑하지 않는 다른 명령어(그러나 가상 측면으로부터이어야 함)들이 또한 도 8에 도시되어 있다.
불행히도, 코드가 가상 기계내에서 실행되는 동안, 가상화된 IF에서 실제 IF를 미러(mirror)하는 것은 가능하지 않은데, 그 이유는 게스트 OS로 하여금 무기한으로 끼어들기를 꺼버리도록 하는 것, 즉, 버기 게스트 OS(buggy guest OS)가 호스트 시스템 전체에 장애를 일으킬 수 있기 때문이다. 이러한 이유로 인해, 게스트 코드가 실행될 때, 가상(게스트) IF가 해제되었을 때 조차, 호스트 IF는 항상 가능한 상태로 유지된다(즉, 끼어들기가 마스크되지 않음).
마찬가지로, STI/CLI 명령어에서의 트랩핑은 EFLAGS의 IOPL 필드의 조정을 필요로 하는데, 이 IOPL은 IF와 관련된 것과 유사한 단점을 지닌 비특권 코드에 쉽게 드러나는 특권 필드의 또 다른 예이다. IF 및 IOPL 필드와 관련하여 문제가 있는 명령어들이 도 9에 도시되어 있다.
IA32 아키텍처는 또한 TSS, GDT, LDT 및 IDT를 포함하여 프로세서에 의해 사용되는 일부 데이터 구조를 정의하며, 이들 데이터 구조는 페이지 테이블에 의해 정의되는 논리적 어드레스 공간내에 위치한다. 게스트 OS가 가상 기계내에서 수행되고 있을 때, 그 페이지 테이블은 메모리, 프레임 버퍼, 메모리 맵핑된 레지스터 등을 매핑하는 데 어드레스 공간의 어느 영역을 사용할 것인지를 정의한다. 거의 항상, 어드레스 영역의 일부 부분은 사용되지 않은 채 유지된다. 게스트 OS가 자기 자신의 TSS, GDT, LDT 및 IDT를 보유하는 반면, VMM은 이러한 데이터 구조의 자기 고유의 전용 버전을 제공한다. 그러나, 이러한 구조는 게스트 OS에 의해 제어되는 어드레스 공간내의 어딘가에 매핑되어야만 한다. VMM의 코드 및 내부 데이터 구조는 또한 동일한 어드레스 공간내에 매핑되어야 한다. 그 결과, VMM은 게스트 OS에 의해 현재 사용되지 않는 어드레스 공간의 일부(상대적으로 작은) 부분을 찾을 필요가 있다. 이 영역은 "VMM 작업 영역(VMM working area)"라고 불린다. VMM은 적극적으로 게스트 OS 페이지 테이블을 모니터하여, 게스트 OS가 페이지를 VMM 작업 영역에 의해 현재 점유된 영역으로 매핑을 시도하고 있는지 여부를 결정한다. 만약 그럴 경우, VMM은 사용되지 않은 다른 어드레스 공간 부분을 찾고 자신을 다시 위치시킨다.
이 기술은 폭넓은 게스트 OS 호환성을 가능하게 하지만, 게스트 어드레스 공간 전체가 물리적 메모리의 많은 양이 가상 기계에 할당될 때 발생할 수 있는 것에 사용될 때 문제가 있다. 이 이유에 대해, VMM은 게스트 OS가 VMM 작업 영역을 위해 특별히 어드레스 공간 일부를 예약하는 메커니즘을 제공한다. 일단 이 공간이 지정되면, VMM은 자신을 이 공간에 다시 위치시키고 (게스트 OS가 더 이상 예약 영역을 사용하지 않는다는 약속을 할 것이라는 가정 아래) 페이지 테이블에 대한 변경을 추적하는 것을 적극적으로 그만둔다.
트랩핑 명령어에는 찬성이 혼합되어 있다. 한편으로, 명령어가 트랩하면 제대로 가상화될 수 있다. 다른 한편으로, 트래핑은 아주 큰 성능 오버헤드를 초래한다. 예를 들어, STI 명령어는 정상적으로는 수행할 때 한 사이클을 필요로 하지만, STI가 VM 환경내에서 수행될 때는 VMM에 의해 처리되는 트랩을 발생시키고, VMM은 펜티엄 4 프로세서에서 종종 수행할 때 500 사이클 이상을 필요로 한다. 일부 VM은 높은 빈도 트래핑 명령어를 추적하고, 가능한 곳에서 가상화된 환경내에서 최초 명령어의 의미를 보존하는 동등한 비트랩핑 코드로 트래핑 명령어를 패치함으로써 이러한 오버헤드를 완화하려고 시도해 왔다. 이것은 게스트 OS 커널 공간내에 할당된 페이지 불가능한 "패치 버퍼(patch buffer)"의 사용을 통해 행해진다.
그러나, 동작 시, 패치가능한 트래핑 명령어는 긴 JMP 명령어를 허용하기 위해 최소 5바이트의 길이를 필요로 한다 - 이 필수의 5바이트가 없다면, 패치될 명령어의 길이가 5바이트보다 작으므로 트래핑 명령어에 이은 명령어 또는 명령어들을 오버라이트(overwrite)할 필요가 있을 것이다.
향상된 가상화(improved virtualization)(예를 들어, IA32)
IA32 아키텍처의 전술한 많은 단점 및 제한은 원할 때 트랩을 발생시킬 수 없는 명령어로부터 기인한다. 다시 말해, 이들 명령어들이 대신 트랩을 발생시킨다면, VMM은 이들 명령어를 올바르게 에뮬레이트 할 것이다. 본 발명은 이 문제가 있는 명령어를 위해 효율적으로 트랩을 생성하는 각종 실시예를 제공한다. 본 발명의 각종 실시예는 OS 코드를 최적화하고 "합성 명령어"(이후에 자세히 설명됨)를 이용함으로써 IA32 아키텍처에서의 가상화를 향상시키는 것을 다룬다. 본 발명의 몇몇 실시예는 다음과 같이 게스트 OS를 최적화 하기 위해 도 10에 도시된 대로 일련의 단계들을 포함한다:
- 게스트 OS에서, 링 0 코드내의 PUSH CS, PUSH SS, SS로부터의 MOV 또는 CALLF의 임의의 사용을 찾고, 제거하고/제거하거나 대체한다. 상술된 대로, 이들 명령어는 가상 기계내에서 수행되는 링 0 코드가 실제로는 더 낮은 특권 링 레벨에서 수행되고 있다는 사실을 드러낸다. 그러나, 이들 명령어는 대부분의 운영 체제에서 매우 드물고, 일반적으로 모두 제거되거나 또는 다른 기존의 명령어 또는 기존 명령어 그룹으로 대체될 수 있다.
- 게스트 OS에서, VERR, VERW 또는 LAR의 임의의 사용을 찾고, 이 사용이 DPL 또는 설명자 유형의 코드 비트에 좌우되지 않는다는 것을 검증한다. 다시 한번, 이들 명령어는 대부분의 운영 체제에서 사용되지 않는다.
- 게스트 OS에서, SGDT, SLDT, SIDT 또는 STR의 임의의 사용을 찾고, 이들 명령어를 제거하거나 또는 이들을 대응하는 VM 합성 명령어로 대체한다. 이 단계를 구현하기 위해, 게스트 운영 체제의 설명자 테이블 엔트리가 설명자 테이블 엔트리를 갱신하는 합성 명령어(예를 들어, VMWRDESC)로 대체되고, 새도우 설명자 테이블을 보유하는 것과 관련된 오버헤드를 피한다.
- 게스트 OS에서, CPUID의 임의의 사용을 찾고 - 즉, 시스템의 모든 부분이 CPUID 정보를 액세스하기 위해 사용하는 공용의 서브루틴에 의해 OS에서 액세스되는 곳 - CPUID를 판독하는 공용 서브루틴을 수정하여 CPUID를 직접 판독하는 대신 가상화된 CPUID 정보를 액세스하기 위해 합성 명령어를 사용한다. 호스트 프로세서에 의해 리턴된 특정 CPUID 정보가 게스트 특징과 충돌하지 않는 한 CPUID 가상화가 필요하지 않은 반면, 새 프로세서가 VMM이 지원을 제공하지 않았던 특징을 구현하고자 할 경우, 가상화된 CPUID 값은 그 특징이 존재하지 않는다는 것을 나타내는 반면 비가상화된 CPUID 값은 그렇다는 것을 나타낼 것이다.
- 게스트 OS에서, 임의의 MP 스핀 락을 찾고, 그것을 수정하여 VMSPLAF(스핀 락 획득 실패) 합성 명령어를 사용한다.
- 게스트 OS에서, PUSHF(D) 및 POPF(D)의 임의의 인스턴스를 찾고, 이들 명령어의 사용이 넣어지거나 꺼내어진 IF의 값에 좌우된다면, 그들을 대응하는 합성 명령어로 대체한다. 이 단계는 일반적으로 OS "VM 클린(VM clean)"을 만드는 것과 관련된 작업의 대부분을 나타낸다.
- 게스트 OS에서, GDT 또는 LDT 엔트리가 수정된 위치를 식별하고 최소 수정 수로 감소시킨 다음, 나머지 수정을 VMWRDESC 합성 명령어로 대체한다(현재 로드된 선택자가 수정되는 상황을 피하도록 특별히 신중해야 함).
- 게스트 OS에서, GDT 및 LDT가 데이터 구조만을 포함하는 페이지상에 위치하도록 하고, 그렇지 않을 경우 그렇게 하도록 한다.
- 게스트 OS에서, 링 0 코드내의 STI 및 CLI의 인스턴스를 찾고, 그들을 길이가 5바이트인 대응하는 합성 명령어로 대체한다. 합성 형태를 사용함으로써, VMM은 코드를 더 잘 패치할 수 있을 것이고 따라서 트랩의 필요가 감소하는데, 각각의 길이가 5바이트보다 작은 STI 및 CLI 명령어를 직접 패치하는 것은 일반적인 패치가능한 트래핑 명령어가 긴 JMP 명령어를 허용하기 위해 적어도 5바이트의 길이를 필요로 한다는 사실 때문에 트래핑 명령어에 이어지는 명령어 또는 명령어들을 VMM이 오버라이트 하는 것을 필요로 하기 때문이다.
- 이하 기술된 대로 VMSETINFO 합성 명령어를 활용한다. 전술한 9개의 명령어는 "VM 클리닝(VM cleaning)"을 완료했으므로 이 합성 명령어는 링 0 내에서 직접 실행을 가능하게 할 수 있다.
- "VM 안전하지 못함(VM unsafe)"로 남아있는 큰 링 0 코드 블록 이후에 동적으로 직접 실행을 불가하게 하고 또 그것을 다시 가능하게 한다. 게스트 운영 체제가 동적으로 직접 실행을 불가하게 하고(예를 들어, VMDXDSBL) 다시 가능하게 할 수 있는(예를 들어, VMDXENBL) 합성 명령어를 제공함으로써, 게스트 운영 체제는 "VM 안전하지 못함(VM unsafe)" 링 0 코드의 큰 블록을 피할 수 있다.
- VMM이 "패치 버퍼(patch buffer)"를 사용할 수 있는지 여부를 확인하고, 만약 그럴 경우, 최고의 성능을 위해 패치 버퍼를 커널 공간내에 할당한다. 이 패치 버퍼는 페이징가능해서는 안 되며, 링 0 코드가 실행되는 모든 어드레스 공간 콘텍스트로 매핑되며, 그 크기는 VMGETINFO 합성 명령어에 의해 표시된다. 패치 버퍼의 위치 및 크기는 이하에 기술된 대로 VMSETINFO 명령어를 사용하여 설정될 수 있다. 패치 버퍼는 각 가상 프로세서에 대해서가 아니라, 시스템 전체에 대해 한번만 할당되어야 한다.
- VMM이 "VMM 작업 영역(VMM working area)"을 필요로 하는지 여부를 결정하고, 만약 그럴 경우, 게스트 OS내에 표시된 크기 및 배열(alighment)에 따라 어드레스 공간을 할당하고 예약한다. 이하에 기술된 대로 VMSETINFO 명령어를 사용하여 이 예약 영역의 기준을 설정한다.
VM "합성 명령어"는 VM에 특별한 의미를 지니는 위법의 프로세서 명령어이다. 이와 같이, 합성 명령어를 지원하지 않는 VM내에서 또는 비 VM 환경에서 합성 명령어가 실행될 때, 이들은 유형-6(위법 동작) 예외를 발생시키므로 합성 명령어를 사용하기 전에 OS가 합성 명령어 지원을 점검하는 것이 중요하다. VM 합성 명령어 지원을 점검하기 위해, OS는 VMCPUID 명령어를 실행하고, 이 명령어가 위법 명령어 장애를 발생시킬 경우, OS는 합성 명령어가 지원되지 않는다고 판단한다(주의할 것은 VMCPUID는 모든 특권 레벨에서 실행될 수 있으므로, 사용자 레벨 코드에서 사용하는 것은 안전하다는 것이다). VM 환경내에서 실행 중인지 여부를 결정하기 위해 이와 동일한 테스트를 사용하며, 만약 그럴 경우, 그에 따라 가상 기계가 기초가 되는 VMM의 특징 및 행동을 액세스하거나 수정하는 것이 허용된다. 이하는 시도/예외 메커니즘 및 이러한 테스트를 수행하기 위한 구조화된 예외 처리를 사용하는 예제 코드이다.
합성 명령어를 사용하여, x86 프로세서에서 가상화에 반대로 영향을 끼치는 x86 ISA 명령어는 x86 프로세서에서 예외를 발생시키는 합성 명령어에 의해 대체되거나 명령어에 의해 보완되고, 상기 가상 기계에 의해 처리되기 위해 상기 x86 프로세서에서 수행되는 가상 기계가 트랩된다. 마찬가지로, 반복 가상화에 대해, 제 1 가상 기계가 제 2 가상 기계상에서 수행되고 있다면, x86 프로세서에서 예외를 발생시키는 합성 명령어에 의해 대체되거나 보완된 명령어는 제 2 가상 기계로 전달되어 처리를 위해 제 1 가상 기계에 의해 트랩될 수 있다.
본 발명의 몇몇 실시예에 대해, 합성 명령어는 모두 길이가 5바이트이고, 이것은 합성 명령어들이 JMP 명령어로 패치되는 것을 허용하여 트래핑 오버헤드를 감소시킨다(다른 실시예에서, 합성 명령어의 길이는 더 짧거나 더 길 수 있다). 합성 명령어의 16진수 암호화는 다음의 포맷을 사용한다: 0F C7 C8 XX XX(여기서 "XX"는 특정 합성 명령어를 나타내는 2 디지트(digit)의 16진수 변수이다). 이 명령어는 CMPXCHG8B 명령어로 복호화되지만, 지정된 목적 연산수가 레지스터(그래서 트랩을 발생시킴)이기 때문에 이것은 "위법"으로 간주된다. 그러나, 본 발명의 몇몇 실시예에서, 합성 명령어는 명령어 접두어의 그 어느 형태(예를 들어, LOCK, REP, 세그먼트 오버라이드, 연산수 크기 오버라이드, 어드레스 크기 오버라이드)도 지원하지 않기 때문에, 이러한 실시예에서 접두어를 사용하려는 시도는 결과적으로 위법 명령어 예외(UD#)를 발생시킬 것이다.
합성 명령어
본 발명의 각종 실시예에 대한 합성 명령어의 서브세트가 이하에 자세히 설명된다. 여기에 리스트되지 않은 추가의 합성 명령어들은 또한 본 명세서에서 이전에 설명되었다. 또한, 본 명세서에서 명시적으로 설명되지 않은 추가의 합성 명령어들은 그럼에도 불구하고 본 발명의 각종 실시예에 의해 예상될 수 있으며, 본 명세서에서 그 어떤 것도 명시적으로 정의된 특정 합성 명령어에 본 발명을 제한해서는 안 된다.
VMGETINFO - VM 정보 얻기
VMGETINFO는 VM 정보의 특정 조각을 인출해 그것을 EDX:EAX에 둔다. 리턴된 정보는 ECX의 인덱스에 좌우된다. 지정된 인덱스가 가상 프로세서에 의해 지원되지 않는 정보의 조각을 참조할 경우, GP(0)가 생성된다. 인덱스가 지원되는 정보 조각을 참조할 경우, EDX:EAX는 정보 값으로 설정된다(주의할 것은 이 명령어에 대해 사용되었던 레지스터 관례가 RDMSR 명령어와 유사하다는 것이다). 이 명령어는 이것이 전체 시스템의 상태에 영향을 끼친다는 점에서 대부분의 프로세서 명령어와 다르다. 다수의 프로세서가 있는 시스템에서, VMGETINFO로 액세스된 상태는 "글로벌"로 간주된다. 예를 들어, 한 프로세서에서 VMSETINFO를 사용하여 VMM 작업 영역 기준을 설정하면 동일한 값이 제 2 프로세서에서 VMGETINFO를 사용하여 다시 판독된다.
VMSETINFO - VM 정보 설정
VMSETINFO는 EDX:EAX에 지정된 대로 VM 정보의 특정 조각을 설정한다. 설정될 정보는 ECX의 인덱스에 좌우된다. 지정된 인텍스가 가상 프로세서에 의해 지원되지 않거나 기입되지 않는 정보 조각을 참조한다면, GP(0)가 생성된다(여기서 주의할 것은 이 명령어에 대해 사용되었던 레지스터 관례가 WRMSR 명령어와 유사하다는 것이다). 이 명령어는 이것이 전체 시스템의 상태에 영향을 끼친다는 점에서 대부분의 프로세서 명령어와 다르다. 다수의 프로세서가 있는 세스템에서, VMSETINFO로 설정된 상태는 "글로벌"로 간주된다. 예를 들어, 한 프로세서에서 VMSETINFO를 사용하여 VMM 작업 영역 기준을 설정하면 그 데이터는 제 2 프로세서에서 VMGETINFO를 사용하여 다시 판독된다.
VMDXDSBL - 직접 실행 불가하게 하기
VMDXDSBL은 VMDXENBL의 사용을 통해 다음번의 직접 실행이 가능하게 될 때까지 직접 실행을 불가하게 한다. 이 명령어는 링 0 코드내에서만이 실행 가능하며, 직접 실행이 오랫동안 불가하게 되는 것을 방지하기 위해 끼어들기(interrupt)(또는 임의 형식의 선취방식)가 불가하게 되었을 때만이 실행될 수 있다. 이것은 "VM 안전함"이 아닌 작은 코드 블록을 보호하기 위해 사용될 수 있다(즉, VM 환경내에서 직접 실행이 수행될 때 많은 수의 부서지고 가상화가능하지 않은 명령어 또는 가정을 포함함). 이 명령어는 자신이 실행되고 있는 그 프로세서에만 영향을 끼친다. 이것은 가상 기계의 다른 가상 프로세서에는 영향을 끼치지 않는다. 직접 실행이 이미 불가하게 된 경우, 이 명령어는 아무 것도 하지 않는다.
VMDXENBL - 직접 실행 가능하게 하기
VMDXENBL은 가능한 곳에서 직접 실행을 가능하게 한다. 이 명령어는 링 0 코드내에서만이 실행 가능하며, 끼어들기(또는 임의 형식의 선취방식)가 불가하게 되었을 때만이 실행될 수 있다. 이것은 VMDXDSBL 명령어와 함께 사용되어 "VM 안전함"이 아닌 작은 코드 블록을 보호하기 위해 사용될 수 있다(즉, VM 환경내에서 직접 실행이 수행될 때 많은 수의 부서지고 가상화가능하지 않은 명령어 또는 가정을 포함함). 이 명령어는 자신이 실행되고 있는 그 프로세서에만 영향을 끼친다. 이것은 가상 기계의 다른 가상 프로세서에는 영향을 끼치지 않는다. 직접 실행이 이미 가능하게 된 경우, 이 명령어는 아무 것도 하지 않는다.
VMCPUID - 가상화된 CPU 정보
VMCPUID는 새도우된 CPU 정보를 리턴한다는 것을 제외하고는 실제 CPUID 명령어와 유사하다.
VMHLT - 정지(halt)
VMHLT는 이것이 링 3 및 v86 모드를 포함하여 임의의 프로세서 모드에서 실행될 수 있다는 것을 제외하고는 정상적인 HLT 명령어와 유사하다. 이것은 임의의 "유휴 루프(idle loop)"로 삽입되어 가상 기계내의 프로세서 효율을 감소시킨다. 일부 실시예에서, 프로세서를 정지시키는 이 합성 명령어(예를 들어 VMHALT)는 사용자 레벨 게스트 코드로서 실행될 수 있다.
VMSPLAF - 스핀 락 획득 실패(spin lock acquisition failed)
스핀 락은 대칭 다중처리(symmetric multiprocessing)를 지원하는 운영 체제에서 자주 사용된다. 이 락은 일반적으로 프로세서간에 공유되는 중요한 리소스를 보호한다. 이것은 다른 기타 프로세서에 의해 상대적으로 적은 사이클동안 락이 유지될 것이라는 사실에 의존한다. 다중 프로세서 VM 시스템내에서, 다른 가상 프로세서들이 일시 정지된 프로세서에 의해 점유된 리소스를 기다리는 동안 스핀 락을 보유하는 가상 프로세서가 일시적으로 선취되고 실행중이 아닌 경우, 일반적인 스핀 락 행동은 나쁜 성능 및 높은 CPU 효율을 가져올 수 있다. 이러한 상황을 피하기 위해, VMSPLAF 명령어를 사용하여, VMM에게 OS가 스핀 락에서 기다리고 있으며 획득에 실패했다는 것을 통지할 수 있다. 그 결과, VMM은 다른 가상 프로세서가 수행되도록 스케줄하거나 또는 현재 가상 프로세서를 일시 중지시켜서, 리소스가 점유에서 풀렸을 때 나중에 실행되도록 스케줄한다.
VMPUSHFD - 가상화된 플래그 레지스터 넣기
VMPUSHFD는 "VM 안전함"을 제외하고는 정상적인 PUSHFD 명령어와 유사하다. 이것은 32 비트 연산수(operand) 크기 및 32 비트 스택 포인터(stack pointer) 둘 다를 가정한다. CS 및 SS가 현재 32 비트가 아니라면, 그 행동은 정의되지 않는다. 이것은 또한 진짜 PUSHFD 명령어가 하는 것과 동일한 방식으로 세그먼트 경계를 수행하거나 점검을 기입하도록 보장되지 않는다. 스택에 넣어진 EFLAGS 레지스터의 값은 새도우된 IF 값을 포함할 것이다. 그러나, IOPL 필드의 값은 옳지 않을 수 있다. IOPL 판독을 필요로 하는 코드는 INT 명령, 외부 끼어들기 또는 예외에 응답하여 스택에 넣어진 EFLAGS의 값을 사용해야 한다. 이 명령어는 링 0 코드내에서만 사용될 수 있다.
VMPOPFD - 가상화된 플래그 레지스터 꺼내기
VMPOPFD는 "VM 안전함"을 제외하고는 정상적인 POPFD 명령어와 유사하다. 이것은 32 비트 연산수(operand) 크기 및 32 비트 스택 포인터(stack pointer) 둘 다를 가정한다. CS 및 SS가 현재 32 비트가 아니라면, 그 행동은 정의되지 않는다. 이것은 또한 진짜 POPFD 명령어가 하는 것과 동일한 방식으로 세그먼트 경계를 수행하거나 점검을 기입하도록 보장되지 않는다. 꺼내어진 EFLAGS내의 IF 필드값은 지켜질 것이다. 그러나, IOPL 필드의 값은 무시될 수 있다. IOPL의 조정을 필요로 하는 코드는 IRETD 또는 VMIRETD 명령어를 사용해야 한다. 이 명령어는 링 0 코드내에서만 사용될 수 있다.
VMCLI - 끼어들기 플래그 해제
VMCLI는 그 길이가 5바이트이며 VMM으로의 트래핑을 피하기 위해 패치(patch)될 수 있다는 것을 제외하고는 정상적인 CLI 명령어와 유사하다. 이 명령어는 링 0 코드내에서만 사용될 수 있다.
VMSTI - 끼어들기 플래그 설정
VMSTI는 그 길이가 5바이트이며 VMM으로의 트래핑을 피하기 위해 패치될 수 있다는 것을 제외하고는 정상적인 STI 명령어와 유사하다. 이것은 또한 다음 명령어가 완료되기 전에 끼어들기가 발생하는 것을 막을 수 없다는 점에서 정상적인 STI와 다르다. 이 규칙에 대한 유일한 예외는 VMSTI 다음에 SYSEXIT 명령어가 이어지는 경우이고, 이 명령어는 자동적으로 VMSTI와 함께 실행된다. 이 명령어는 링 0 코드내에서만 사용될 수 있다.
VMIRETD - 끼어들기에서 리턴
VMIRETD는 "VM 안전함"을 제외하고는 정상적인 IRETD 명령어와 유사하다. 정상적인 IRETD 명령어와는 달리, 이것은 항상 32 비트 연산수 크기 및 32 비트 스택 포인터를 가정한다. CS 및 SS의 현재 크기가 32 비트가 아닐 경우에 그 행동은 정의되지 않는다. 이 명령어는 링 0 코드내에서만 사용될 수 있다. v86 모드로 리턴하기 위해 IRETD 명령어를 잠재적으로 사용해야 하는 곳에서는 어디서든지 이것을 사용해야 한다. VMIRETD를 사용함으로써 CPL > 0 으로부터 v86 모드로 리턴할 때 IA32 프로세서의 예상치 못한 행동을 피할 수 있다(주의할 것은 링 압축이 특권이 덜한 링 레벨에서 VM 환경내에서 링 0 코드가 수행되는 것을 초래할 수 있다는 것이다).
VMSGDT - 글로벌 설명자 테이블 저장
VMSGDT는 이것이 새도우된 GDT 기준 및 길이를 저장한다는 것을 제외하고는 진짜 SGDT 명령어와 유사하다. 이것은 메모리 연산수에 대한 어드레싱 모드가 DS:[EAX]이고, DS가 널리 개방된 기입가능한 세그먼트라는 것을 가정한다. DS가 널리 개방된 기입가능한 세그먼트가 아니라면, 그 행동은 정의되지 않는다.
VMSIDT - 끼어들기 설명자 테이블 저장
VMSIDT는 이것이 새도우된 IDT 기준 및 길이를 저장한다는 것을 제외하고는 진짜 SIDT 명령어와 유사하다. 이것은 메모리 연산수에 대한 어드레싱 모드가 DS:[EAX]이고, DS가 널리 개방된 기입가능한 세그먼트라는 것을 가정한다. DS가 널리 개방된 기입가능한 세그먼트가 아니라면, 그 행동은 정의되지 않는다.
VMSLDT - 로컬 설명자 테이블 저장
VMSLDT는 이것이 새도우된 LDT 선택자를 저장한다는 것을 제외하고는 진짜 SLDT 명령어와 유사하다. 이것은 목적 연산수가 EAX 레지스터라고 가정한다.
VMSTR - 태스크 레지스터 저장
VMSTR는 이것이 새도우된 LDT 선택자를 저장한다는 것을 제외하고는 진짜 STR 명령어와 유사하다. 이것은 목적 연산수가 EAX 레지스터라고 가정한다.
VMSDTE - 설명자 테이블 엔트리로 저장
VMSDTE는 GDT 또는 LDT내의 설명자 엔트리를 갱신하는 데 사용된다. 사용하기 위해, 선택자를 ECX로 로드한다. ECX의 상위 16 비트 및 하위 2비트(비트 0 및 1)는 무시된다. ECX의 비트 2는 선택자가 글로벌 또는 로컬 설명자 테이블을 참조하는지 여부를 나타낸다. 나머지 부분(비트 3 내지 비트 15)은 선택자 즉 설명자 테이블의 오프셋을 암호화한다. EDX:EAX는 지정된 설명자 테이블 엔트리에 기입하는 값으로 로드되어야 한다. 이 명령어는 설명자 테이블을 직접 수정하는 대신 사용되어 VMM의 새도우 설명자 테이블이 동시에 갱신될 수 있도록 해야 한다. 현재 로드된 세그먼트 선택자에 대응하는 설명자 엔트리를 수정해서는 안 된다. 이것은 정의되지 않은 행동을 초래한다. VMM에 의해 권고되지 않을 경우(VMGETINFO 명령어에 의해 리턴된 VMM 정보 비트 4에 표시되어 있듯이) 이 명령어를 사용해서는 안 된다. 권고되지 않을 때 이 명령어를 사용하는 것은 미래의 VMM 구현상에서 수행할 때 나쁜 성능을 초래할 수 있다. 이 명령은 링 0 코드내에서만 사용될 수 있다.
결론
본 명세서에 설명된 각종 시스템, 방법, 및 기술은 하드웨어 또는 소프트웨어 또는 적절하다면 이 둘의 조합으로 구현될 수 있다. 그러므로, 본 발명 또는 본 발명의 부분 또는 일부 측면의 방법 및 장치는, 플로피 디스크, CD-ROM, 하드 드라이브, 또는 임의의 기타 기계 판독가능 스토리지 매체와 같은 확실한 매체에 구현된 프로그램 코드(즉, 명령어)의 형태를 취할 수 있으며, 프로그램 코드가 컴퓨터와 같은 기계로 로드되고 기계에 의해 실행될 때, 기계는 본 발명을 실행하는 장치가 된다. 프로그램가능한 컴퓨터에서 프로그램을 실행하는 경우, 컴퓨터는 일반적으로 프로세서, 프로세서에 의해 판독가능한 스토리지 매체(휘발성 및 비휘발성 메모리 및/또는 스토리지 엘리먼트를 포함함), 적어도 하나의 입력 장치 및 적어도 하나의 출력 장치를 포함한다. 하나 이상의 프로그램은 하이 레벨 프로시져 또는 객체 지향 프로그래밍 언어로 바람직하게 구현되어 컴퓨터 시스템과 통신한다. 그러나, 프로그램은 원한다면 어셈블리 또는 기계어로도 구현될 수 있다. 어느 경우든지, 언어는 컴파일 또는 번역된 언어가 되고, 하드웨어 구현과 결합된다.
본 발명의 방법 및 장치는 또한 전자선 또는 케이블을 통해, 광섬유를 통해 또는 임의의 다른 전송 형태를 통하는 것처럼 일부 전송 매체를 통해 전송되는 프로그램 코드의 형태로 구현될 수 있는데, 프로그램 코드가 EPROM, 게이트 배열, 프로그램가능한 로직 장치(programmable logic device, PLD), 클라이언트 컴퓨터, 비디오 리코더 등과 같은 기계에 의해 수신되고 로드되고 실행될 때, 기계는 본 발명을 수행하는 장치가 된다. 범용 프로세서상에서 구현될 때, 프로그램 코드는 프로세서와 결합하여 본 발명의 인덱싱 기능을 수행하도록 동작하는 고유의 장치를 제공한다.
본 발명이 각종 도면의 바람직한 실시예와 관련하여 설명되었지만, 다른 유사한 실시예가 사용되거나 또는 이것으로부터 위배되지 않고 본 발명의 동일한 기능을 수행하도록 설명된 실시예에 수정 또는 추가가 있을 수 있다는 것을 이해할 것이다. 예를 들어, 본 발명의 예시적인 실시예가 퍼스널 컴퓨터의 기능을 에뮬레이트하는 디지털 장치의 문맥에서 설명된 반면, 당업자는 본 발명이 이러한 디지털 장치에 제한되지 않고, 본 발명에서 설명되었듯이, 게임 콘솔, 핸드헬드 컴퓨터, 이동형 컴퓨터 등 무선 또는 유선 등과 같은 모든 기존 또는 새로운 컴퓨팅 장치 또는 환경에 적용될 수 있고, 통신 네트워크를 통해 연결되고 네트워크를 통해 상호작용하는 임의의 컴퓨팅 장치에 적용될 수 있다는 것을 인지할 것이다. 또한, 특히 무선 네트워크된 장치가 기하 급수적으로 계속 증가함에 따라, 핸드헬드 장치 운영 체제 및 기타 애플리케이션 고유의 하드웨어/소프트웨어 인터페이스 시스템을 포함하여 각종 컴퓨터 플랫폼이 본 명세서에 고려되었다는 것을 강조해야 한다. 그러므로, 본 발명은 임의의 단일 실시예에 제한되어서는 안 되며, 첨부된 청구항에 따라 그 폭과 범위가 해석되어져야 한다.
마지막으로, 본 명세서에 설명된 개시된 실시예는 다른 프로세서 아키텍처, 컴퓨터 기반 시스템 또는 시스템 가상화에서 사용되도록 적용될 수 있고, 이러한 실시예는 본 명세서의 개시로 명백히 예상되며, 본 발명은 설명된 특정 실시예에 제한되어서는 안되며, 대신 아주 광범위하게 해석되어야 한다. 마찬가지로, 프로세서 가상화 외의 목적에 대해 합성 명령어의 사용 또한 본 명세서의 개시로 예상되며, 프로세서 가상화 이외의 정황에서의 이러한 임의의 합성 명령어 사용은 본 명세서의 개시로 광범위하게 이해되어야 한다.
트랩을 발생시키는 "합성 명령어(synthetic instructions)"를 이용하여 x86 아키텍처의 단점을 보완하고, 가상 기계가 명령어를 안전하게 처리할 수 있는 기회를 제공한다. x86 아키텍처에는 "위법(illegal)"이지만 가상 기계가 이해할 수 있는 명령어를 사용함으로써, 본 방법은 가상 기계에서 합성 명령어를 사용하여 잘 정의된 액션을 수행하고, 따라서 x86 프로세서 시스템을 위해 훨씬 향상된 프로세서 가상화를 제공한다.
도 1은 본 발명이 구현되는 측면에서 컴퓨터 시스템을 나타내는 블록도.
도 2는 본 발명이 구현되는 측면에서 네트워크를 나타내는 개략도.
도 3은 호스트 컴퓨터 시스템에서 수행되는 에뮬레이트된 컴퓨터 시스템 엘리먼트의 논리적 관계도.
도 4는 (특히 IA32 아키텍처) x86 프로세서의 EFLAGS 레지스터를 도시하는 도면.
도 5는 가상 기계 모니터(virtual machine monitor, VMM)에 의해 일반적으로 인지되는 4가지 별개의 프로세서 모드 분류(four distinct processor mode categorization)를 도시한 도면.
도 6은 링 0 코드(ring 0 code)이어야 하는 것이 사실은 더 높은 링 레벨에서 수행되고 있다는 사실을 드러내는 x86 명령어의 테이블로서, 종래의 x86 프로세서 가상화가 지닌 문제가 접근하고 있는 도면.
도 7은 가상 기계가 게스트 운영 체제에 대해 일부 x86 레지스터 정보를 새도잉(shadowing)한다는 사실을 드러내는 명령어의 테이블.
도 8은 x86 아키텍처에서 가상화의 목적을 위해 트랩해야 하지만, 그러지 않는 명령어의 테이블.
도 9는 x86 아키텍처의 IF 및 IOPL 필드와 관련이 있는 문제가 있는 명령어의 테이블.
도 10은 OS 코드를 최적화하고 "합성 명령어"를 사용함으로써 IA32 아키텍처에서의 가상화를 향상시키는 방법의 한 실시예를 도시하는 흐름도.
〈도면의 주요 부분에 대한 부호의 설명〉
102 : 컴퓨터 하드웨어
104 : 가상 기계 모니터
106 : 호스트 운영 체제
108 : 가상 기계 A(인텔 386)
112 : 게스트 OS A
116 : 애플리케이션 A1
118 : 애플리케이션 A2

Claims (66)

  1. x86 프로세서 아키텍처 및 IA32 아키텍처를 포함하되 이에 제한되지 않는 그 동등물의 프로세서 가상화를 향상시키는 방법에 있어서, x86 프로세서에서 동작하는 가상 기계에 대해 가상화에 악영향을 끼치는 게스트 운영 체제의 하나 이상의 미리 정의된 명령어들을 제거하고, 대체하고 또는 보완하는 단계를 포함하는 방법.
  2. 제1항에 있어서, 상기 하나 이상의 명령어는 PUSH CS, PUSH SS, SS로부터의 MOV, CALLF, VERR, VERW 및 LAR 명령어 그룹의 멤버를 포함하는 방법.
  3. 제1항에 있어서, x86 프로세서에서 가상화에 악영향을 끼치는 상기 명령어는 x86 프로세서에서 예외를 발생시키는 합성 명령어에 의해 대체되거나 보완되며, 상기 가상 기계에 의한 처리를 위해 상기 x86 프로세서에서 수행되는 가상 기계에 의해 트랩되는 방법.
  4. 제3항에 있어서, 제 2 가상 기계에서 수행되는 제 1 가상 기계에 대해, 상기 x86 프로세서에서 예외를 발생시키는 합성 명령어에 의해 대체되거나 보완되는 명령어는, 상기 제 2 가상 기계를 효과적으로 우회함으로써 상기 가상 기계에 의한 처리를 위해 상기 x86 프로세서에서 수행되는 상기 제 1 가상 기계에 의해 트랩되는 방법.
  5. 제3항에 있어서, 상기 합성 명령어는 사용자 모드 및 특권 모드 둘 다에서 사용가능한 방법.
  6. 제3항에 있어서, 상기 합성 명령어는 기존의 x86 명령어에 대해 자연적인 결과를 갖지 않는 방법.
  7. 제3항에 있어서, 상기 합성 명령어는 직접 실행을 불가하게 하는 명령어(예를 들어, VMDXDSBL)인 방법.
  8. 제3항에 있어서, 상기 합성 명령어는 직접 실행을 가능하게(또는 다시 가능하게) 하는 명령어(예를 들어, VMDXENBL)인 방법.
  9. 제3항에 있어서, 합성 명령어로 대체된 명령어에 대해, 상기 합성 명령어는 대체된 상기 명령어와 의미론적으로 동일한 방법.
  10. 제9항에 있어서, 길이가 5바이트보다 작은 명령어는 (패칭(patching)을 용이하게 하기 위해) 길이가 적어도 5바이트인 합성 명령어로 대체되는 방법.
  11. 제10항에 있어서, STI 명령어는 길이가 적어도 5바이트인 합성 명령어(예를 들어, VMSTI)로 대체되는 방법.
  12. 제10항에 있어서, CLI 명령어는 길이가 적어도 5바이트인 합성 명령어(예를 들어, VMCLI)로 대체되는 방법.
  13. 제3항에 있어서, 게스트 운영 체제의 CPUID 명령어는 가상화된 CPUID 정보를 판독하는 합성 명령어(예를 들어, VMCPUID)로 대체되는 방법.
  14. 제3항에 있어서, 게스트 운영 체제의 적어도 하나의 멀티 프로세서 스핀 락 명령어(multi-processor spin lock instruction)는 언제 스핀 락 획득이 실패했는지를 판단하는 합성 명령어(예를 들어, VMSPLAF)로 대체되는 방법.
  15. 제3항에 있어서, 게스트 운영 체제의 PUSHF(D) 명령어는 IF를 스택으로 넣는 합성 명령어(예를 들어, VMPUSHFD)로 대체되는 방법.
  16. 제3항에 있어서, 게스트 운영 체제의 POPF(D) 명령어는 IF를 스택에서 꺼내는 합성 명령어(예를 들어, VMPOPFD)로 대체되는 방법.
  17. 제3항에 있어서, 게스트 운영 체제의 설명자 테이블 엔트리(descriptor table entry)를 수정하는 명령어는 상기 설명자 테이블 엔트리를 갱신하는 합성 명령어(예를 들어, VMWRDESC)로 대체되어, 새도우 설명자 테이블을 유지하는 것과 관련된 오버헤드를 피하는 방법.
  18. 제3항에 있어서, 게스트 운영 체제의 SGDT 명령어는 현재의 GDT 기준 및 길이를 EAX에 저장하는 합성 명령어(예를 들어, VMSGDT)로 대체되는 방법.
  19. 제3항에 있어서, 게스트 운영 체제의 SLDT 명령어는 현재의 LDT 선택자를 EAX에 저장하는 합성 명령어(예를 들어, VMSLDT)로 대체되는 방법.
  20. 제3항에 있어서, 게스트 운영 체제의 SIDT 명령어는 현재의 IDT 기준 및 길이를 EAX에 저장하는 합성 명령어(예를 들어, VMSIDT)로 대체되는 방법.
  21. 제3항에 있어서, 게스트 운영 체제의 STR 명령어는 현재의 TR 선택자를 EAX에 저장하는 합성 명령어(예를 들어, VMSTR)로 대체되는 방법.
  22. 제3항에 있어서, 게스트 운영 체제의 CLI 명령어는 가상화된 IF를 해제(clear)하는 합성 명령어(예를 들어, VMCLI)로 대체되는 방법.
  23. 제3항에 있어서, 게스트 운영 체제의 STI 명령어는 가상화된 IF를 설정하는 합성 명령어(예를 들어, VMSTI)로 대체되는 방법.
  24. 제3항에 있어서, 프로세서를 멈추게 하는(halting) 합성 명령어(예를 들어, VMHALT)는 사용자 레벨 게스트 코드로서 실행될 수 있는 방법.
  25. 운영 체제가 그것이 가상화된 프로세서에서 수행되고 있는지 또는 x86 프로세서에서 직접 수행되고 있는지 여부를 판단하는 방법에 있어서,
    중앙 처리 장치에 대한 아이덴티티(identity)를 나타내는 값을 리턴하는 합성 명령어(예를 들어, VMCPUID)를 실행하는 단계;
    값이 리턴될 경우, 상기 운영 체제는 가상화된 프로세서에서 수행되고 있으므로, 합성 명령어를 활용하기로 결정하는 단계; 및
    예외가 발생할 경우, 상기 운영 체제는 x86 프로세서에서 직접 수행되고 있으므로 합성 명령어를 활용하지 않기로 결정하는 단계
    를 포함하는 방법.
  26. 제25항에 있어서, 값이 리턴될 경우, 기초가 되는 상기 가상 기계 모니터의 특징 및 행동을 액세스하거나 수정하는 단계를 더 포함하는 방법.
  27. 제25항에 있어서, 상기 합성 명령어의 16진수 동작 코드(operation code)는 0F C7 C8 01 00인 방법.
  28. 긴 JMP 명령어를 이용하여 트랩가능한 명령어를 효율적으로 패칭하는 운영 체제 코드를 향상시키는 방법에 있어서, 게스트 운영 체제에서, 길이가 5바이트보다 작은 트랩가능한 명령어(예를 들어, 링 0 코드내에서 수행되는 STI 및 CLI 명령어)의 인스턴스를 찾고, 이 트랩가능한 명령어를 적어도 길이가 5바이트인 대응하는 합성 명령어(각각 VMSTI 및 VMCLI)로 대체하는 단계를 포함하는 방법.
  29. x86 프로세서 아키텍처 및 IA32 아키텍처를 포함하되 이에 제한되지 않는 그 동등물에서 합성 명령어를 처리하는 시스템에 있어서,
    상기 합성 명령어가 x86 프로세서에서 예외를 발생시킨 후 게스트 운영 체제에 의해 생성된 상기 합성 명령어를 트랩하는 서브시스템; 및
    상기 게스트 운영 체제에 대해 상기 합성 명령어를 처리하는 서브시스템
    을 포함하는 시스템.
  30. 제29항에 있어서, 스핀 락 획득이 언제 실패했는지를 판단하는 합성 명령어가 트랩되고 처리되는 서브시스템을 더 포함하는 시스템.
  31. 제29항에 있어서, IF를 스택으로 넣는 합성 명령어(예를 들어, VMPUSHFD)를 처리하는 서브시스템을 더 포함하는 시스템.
  32. 제29항에 있어서, IF를 스택에서 꺼내는 합성 명령어(예를 들어, VMPOPFD)를 처리하는 서브시스템을 더 포함하는 시스템.
  33. 제29항에 있어서, 상기 설명자 테이블 엔트리(descriptor table entry)를 갱신하고, 새도우 설명자 테이블을 유지하는 것과 관련된 오버헤드를 피하는 합성 명령어(예를 들어, VMWRDESC)를 처리하는 서브시스템을 더 포함하는 시스템.
  34. 제29항에 있어서, 현재의 GDT 기준 및 길이를 EAX에 저장하는 합성 명령어(예를 들어, VMSGDT)를 처리하는 서브시스템을 더 포함하는 시스템.
  35. 제29항에 있어서, 현재의 LDT 선택자를 EAX에 저장하는 합성 명령어(예를 들어, VMSLDT)를 처리하는 서브시스템을 더 포함하는 시스템.
  36. 제29항에 있어서, 현재의 IDT 기준 및 길이를 EAX에 저장하는 합성 명령어(예를 들어, VMSIDT)를 처리하는 서브시스템을 더 포함하는 시스템.
  37. 제29항에 있어서, 현재의 TR 선택자를 EAX에 저장하는 합성 명령어(예를 들어, VMSTR)를 처리하는 서브시스템을 더 포함하는 시스템.
  38. 제29항에 있어서, 가상화된 IF를 해제하는 합성 명령어(예를 들어, VMCLI)를 처리하는 서브시스템을 더 포함하는 시스템.
  39. 제29항에 있어서, 가상화된 IF를 설정하는 합성 명령어(예를 들어, VMSTI)를 처리하는 서브시스템을 더 포함하는 시스템.
  40. 제29항에 있어서, 상기 프로세서를 멈추게 하기 위해 사용자 레벨 게스트 코드로서 실행될 수 있는 합성 명령어(예를 들어, VMHALT)를 처리하는 서브시스템을 더 포함하는 시스템.
  41. 제29항에 있어서, 상기 시스템이 가상화된 프로세서에서 수행되고 있는지 또는 x86 프로세서에서 직접 수행되고 있는지 여부를 판단하는 서브시스템을 더 포함하고, 상기 서브시스템은,
    CPU에 의해 지원되는 특징에 대해 아이텐티티를 나타내는 값을 리턴하는 합성 명령어(예를 들어, VMCPUID)를 실행하는 서브시스템; 및
    값의 리턴 여부를 판단하고, (a)값이 리턴될 경우, 상기 운영 체제는 가상화된 프로세서에서 수행되고 있으므로, 합성 명령어를 활용하기로 결정하고, (b)그렇지 않을 경우, 상기 운영 체제는 x86 프로세서에서 직접 수행되고 있으므로, 합성 명령어를 활용하지 않기로 결정하는 서브시스템
    을 포함하는 시스템.
  42. 제41항에 있어서, 값이 리턴될 경우, 기초가 되는 상기 가상 기계 모니터의 특징 및 행동을 액세스하거나 수정하는 서브시스템을 더 포함하는 시스템.
  43. 제41항에 있어서, 상기 합성 명령어의 16진수 동작 코드는 0F C7 C8 01 00인 시스템.
  44. 제29항에 있어서, 상기 합성 명령어는 직접 실행을 불가하게 하는 합성 명령어(예를 들어, VMDXDSBL)를 포함하는 시스템.
  45. 제29항에 있어서, 상기 합성 명령어는 직접 실행을 가능하게(또는 다시 가능하게) 하는 합성 명령어(예를 들어, VMDXENBL)를 포함하는 시스템.
  46. 제29항에 있어서, 상기 합성 명령어는,
    IF를 스택으로 넣는 합성 명령어(예를 들어, VMPUSHFD); 및
    IF를 스택에서 꺼내는 합성 명령어(예를 들어, VMPOPFD)를 포함하는 시스템.
  47. 제46항에 있어서, 상기 합성 명령어는,
    현재의 GDT 기준 및 길이를 EAX에 저장하는 합성 명령어(예를 들어, VMSGDT);
    현재의 LDT 선택자를 EAX에 저장하는 합성 명령어(예를 들어, VMSLDT);
    현재의 IDT 기준 및 길이를 EAX에 저장하는 합성 명령어(예를 들어, VMSIDT); 및
    현재의 TR 선택자를 EAX에 저장하는 합성 명령어(예를 들어, VMSTR)
    를 더 포함하는 시스템.
  48. 제46항에 있어서, 상기 합성 명령어는,
    가상화된 IF를 해제하는 합성 명령어(예를 들어, VMCLI); 및
    가상화된 IF를 설정하는 합성 명령어(예를 들어, VMSTI)를 더 포함하는 시스템.
  49. 제46항에 있어서, 상기 합성 명령어는 스핀 락 획득이 언제 실패했는지를 판단하는 합성 명령어가 트랩되고 처리되는 것을 더 포함하는 시스템.
  50. 제46항에 있어서, 상기 합성 명령어는 CPU에 대한 아이덴티티를 나타내는 값을 리턴하는 합성 명령어(예를 들어, VMCPUID)를 더 포함하는 시스템.
  51. 제50항에 있어서, 상기 합성 명령어에 대한 16진수 동작 코드는 0F C7 C8 01 00인 시스템.
  52. x86 프로세서 아키텍처 및 IA32 아키텍처를 포함하되 이에 제한되지 않는 그 동등물의 프로세서 가상화를 향상시키는 컴퓨터 판독가능 명령어를 포함하는 컴퓨터 판독가능 매체에 있어서, 상기 컴퓨터 판독가능 명령어는,
    상기 x86 프로세서에서 예외를 발생시켜 가상 기계 모니터에 의해 처리될 수 있도록 상기 x86 프로세서에서 수행되는 상기 가상 기계 모니터에 의해 트랩되는 합성 명령어를 포함하는 컴퓨터 판독가능 매체.
  53. 제52항에 있어서, 게스트 운영 체제의 적어도 하나의 멀티 프로세서 스핀 락 명령어는 언제 스핀 락 획득이 실패했는지를 판단하는 합성 명령어(예를 들어, VMSPLAF)로 대체되는 컴퓨터 판독가능 매체.
  54. 제52항에 있어서, CPU에 대한 아이덴티티를 나타내는 값을 리턴하는 합성 명령어(예를 들어, VMCPUID)를 더 포함하는 컴퓨터 판독가능 매체.
  55. 제52항에 있어서, IF를 스택으로 넣는 합성 명령어(예를 들어, VMPUSHFD)를 더 포함하는 컴퓨터 판독가능 매체.
  56. 제52항에 있어서, IF를 스택에서 꺼내는 합성 명령어(예를 들어, VMPOPFD)를 더 포함하는 컴퓨터 판독가능 매체.
  57. 제52항에 있어서, 현재의 GDT 기준 및 길이를 EAX에 저장하는 합성 명령어(예를 들어, VMSGDT)를 더 포함하는 컴퓨터 판독가능 매체.
  58. 제52항에 있어서, 현재의 LDT 선택자를 EAX에 저장하는 합성 명령어(예를 들어, VMSLDT)를 더 포함하는 컴퓨터 판독가능 매체.
  59. 제52항에 있어서, 현재의 IDT 기준 및 길이를 EAX에 저장하는 합성 명령어(예를 들어, VMSIDT)를 더 포함하는 컴퓨터 판독가능 매체.
  60. 제52항에 있어서, 현재의 TR 선택자를 EAX에 저장하는 합성 명령어(예를 들어, VMSTR)를 더 포함하는 컴퓨터 판독가능 매체.
  61. 제52항에 있어서, 가상화된 IF를 해제하는 합성 명령어(예를 들어, VMCLI)를 더 포함하는 컴퓨터 판독가능 매체.
  62. 제52항에 있어서, 가상화된 IF를 설정하는 합성 명령어(예를 들어, VMSTI)를 더 포함하는 컴퓨터 판독가능 매체.
  63. 제52항에 있어서, 상기 명령어가 가상화된 프로세서에서 수행되고 있는지 또는 x86 프로세서에서 직접 수행되고 있는지 여부를 판단하는 명령어를 더 포함하고, 상기 명령어는,
    CPU에 대한 아이덴티티를 나타내는 값을 리턴하는 합성 명령어를 실행하는 명령어; 및
    상기 CPU의 아이덴티티에 대응하는 값의 리턴 여부를 판단하고, (a)값이 리턴될 경우, 합성 명령어를 활용하고, (b)그렇지 않을 경우, 합성 명령어의 사용을 일시적으로 중지하는 명령어
    를 포함하는 컴퓨터 판독가능 매체.
  64. 제63항에 있어서, 상기 합성 명령어의 16진수 동작 코드는 0F C7 C8 01 00인 컴퓨터 판독가능 매체.
  65. x86 프로세서 아키텍처 및 IA32 아키텍처를 포함하되 이에 제한되지 않는 그 동등물에서 실행될 때 합성 명령어를 처리하는 방법에 있어서, 상기 게스트 운영 체제에서 PUSH CS, PUSH SS, SS로부터의 MOV, CALLF, VERR, VERW 및 LAR와 같이 미리 정의된 명령어 중 하나 이상의 인스턴스를 제거하고, 대체하고 또는 보완하는 단계를 포함하는 방법.
  66. x86 프로세서 아키텍처 및 IA32 아키텍처를 포함하되 이에 제한되지 않는 그 동등물에서 실행될 때 게스트 운영 체제를 최적화하여 프로세서 가상화를 향상시키는 방법에 있어서,
    PUSH CS, PUSH SS, SS로부터의 MOV, CALLF, VERR, VERW 및 LAR와 같이 상기 게스트 운영 체제에서 미리 정의된 명령어 중 하나 이상의 인스턴스를 제거하고, 대체하고 또는 보완하는 단계;
    상기 게스트 운영 체제의 CPUID 명령어를 가상화된 CPUID 정보를 판독하는 합성 명령어(예를 들어, VMCPUID)로 대체하는 단계;
    상기 게스트 운영 체제의 스핀 락 명령어를 언제 스핀 락 획득이 실패했는지를 판단하는 합성 명령어(예를 들어, VMSPLAF)로 보완하는 단계;
    상기 게스트 운영 체제의 PUSHF(D) 명령어를 IF를 스택으로 넣는 합성 명령어(예를 들어, VMPUSHFD)로 대체하는 단계;
    상기 상기 게스트 운영 체제의 POPF(D) 명령어를 IF를 스택에서 꺼내는 합성 명령어(예를 들어, VMPOPFD)로 대체하는 단계;
    상기 게스트 운영 체제의 SGDT 명령어를 현재의 GDT 기준 및 길이를 EAX에 저장하는 합성 명령어(예를 들어, VMSGDT)로 대체하는 단계;
    상기 게스트 운영 체제의 SLDT 명령어를 현재의 LDT 선택자를 EAX에 저장하는 합성 명령어(예를 들어, VMSLDT)로 대체하는 단계;
    상기 게스트 운영 체제의 SIDT 명령어를 현재의 IDT 기준 및 길이를 EAX에 저장하는 합성 명령어(예를 들어, VMSIDT)로 대체하는 단계;
    상기 게스트 운영 체제의 STR 명령어를 현재의 TR 선택자를 EAX에 저장하는 합성 명령어(예를 들어, VMSTR)로 대체하는 단계;
    상기 게스트 운영 체제의 CLI 명령어를 가상화된 IF를 해제하는 합성 명령어(예를 들어, VMCLI)로 대체하는 단계;
    상기 게스트 운영 체제의 STI 명령어를 가상화된 IF를 설정하는 합성 명령어(예를 들어, VMSTI)로 대체하는 단계;
    를 포함하는 방법.
KR1020040067241A 2003-10-14 2004-08-25 가상 기계에서 합성 명령어를 사용하는 시스템 및 방법 KR20050035833A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/685,051 2003-10-14
US10/685,051 US7552426B2 (en) 2003-10-14 2003-10-14 Systems and methods for using synthetic instructions in a virtual machine

Publications (1)

Publication Number Publication Date
KR20050035833A true KR20050035833A (ko) 2005-04-19

Family

ID=34377613

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020040067241A KR20050035833A (ko) 2003-10-14 2004-08-25 가상 기계에서 합성 명령어를 사용하는 시스템 및 방법

Country Status (12)

Country Link
US (2) US7552426B2 (ko)
EP (1) EP1524596B1 (ko)
JP (1) JP2005122711A (ko)
KR (1) KR20050035833A (ko)
CN (1) CN1607503B (ko)
AU (1) AU2004212540A1 (ko)
BR (1) BRPI0406029A (ko)
CA (1) CA2482008A1 (ko)
MX (1) MXPA04010030A (ko)
RU (1) RU2374675C2 (ko)
TW (1) TW200519753A (ko)
ZA (1) ZA200407584B (ko)

Families Citing this family (95)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040186876A1 (en) * 2003-03-18 2004-09-23 Hob Electronic Gmbh & Co. Kg Processor system operable in a supervisor mode and a user mode
US7552426B2 (en) * 2003-10-14 2009-06-23 Microsoft Corporation Systems and methods for using synthetic instructions in a virtual machine
US7356735B2 (en) * 2004-03-30 2008-04-08 Intel Corporation Providing support for single stepping a virtual machine in a virtual machine environment
US7770169B2 (en) * 2004-05-17 2010-08-03 Oracle America, Inc. Thread rendezvous for read-only code in an object-oriented computing environment
WO2006011994A2 (en) * 2004-06-26 2006-02-02 Transvirtual Systems, Llc System for emulating wang vs programs
US7500244B2 (en) * 2004-06-30 2009-03-03 Intel Corporation Adaptive algorithm for selecting a virtualization algorithm in virtual machine environments
US20060005190A1 (en) * 2004-06-30 2006-01-05 Microsoft Corporation Systems and methods for implementing an operating system in a virtual machine environment
US7827558B2 (en) * 2004-06-30 2010-11-02 Devicevm, Inc. Mechanism for enabling a program to be executed while the execution of an operating system is suspended
US7886293B2 (en) * 2004-07-07 2011-02-08 Intel Corporation Optimizing system behavior in a virtual machine environment
US7886126B2 (en) * 2005-01-14 2011-02-08 Intel Corporation Extended paging tables to map guest physical memory addresses from virtual memory page tables to host physical memory addresses in a virtual machine system
US7647589B1 (en) * 2005-02-07 2010-01-12 Parallels Software International, Inc. Methods and systems for safe execution of guest code in virtual machine context
JP4357442B2 (ja) * 2005-03-23 2009-11-04 株式会社東芝 プラン実行装置、プラン実行方法およびプログラム
US7707629B2 (en) * 2005-03-31 2010-04-27 Intel Corporation Platform configuration register virtualization apparatus, systems, and methods
US7363463B2 (en) * 2005-05-13 2008-04-22 Microsoft Corporation Method and system for caching address translations from multiple address spaces in virtual machines
US7904903B2 (en) * 2005-06-30 2011-03-08 Intel Corporation Selective register save and restore upon context switch using trap
US7953980B2 (en) * 2005-06-30 2011-05-31 Intel Corporation Signed manifest for run-time verification of software program identity and integrity
US8839450B2 (en) 2007-08-02 2014-09-16 Intel Corporation Secure vault service for software components within an execution environment
US9785485B2 (en) * 2005-07-27 2017-10-10 Intel Corporation Virtualization event processing in a layered virtualization architecture
US7555592B1 (en) * 2005-08-23 2009-06-30 Parallels Software International, Inc. Kernel acceleration technology for virtual machine optimization
US8327353B2 (en) * 2005-08-30 2012-12-04 Microsoft Corporation Hierarchical virtualization with a multi-level virtualization mechanism
US8154385B2 (en) * 2005-08-31 2012-04-10 Impinj, Inc. Local processing of received RFID tag responses
US8001543B2 (en) * 2005-10-08 2011-08-16 International Business Machines Corporation Direct-memory access between input/output device and physical memory within virtual machine environment
US8909946B2 (en) * 2005-11-15 2014-12-09 Microsoft Corporation Efficient power management of a system with virtual machines
US8099730B2 (en) 2006-03-30 2012-01-17 Intel Corporation Heterogeneous virtualization of host and guest OS having different register sizes using translation layer to extract device port numbers for host OS system memory addresses
US7845009B2 (en) * 2006-05-16 2010-11-30 Intel Corporation Method and apparatus to detect kernel mode rootkit events through virtualization traps
US8607228B2 (en) * 2006-08-08 2013-12-10 Intel Corporation Virtualizing performance counters
US7555628B2 (en) * 2006-08-15 2009-06-30 Intel Corporation Synchronizing a translation lookaside buffer to an extended paging table
US20080088636A1 (en) * 2006-10-13 2008-04-17 Nee Shen Ho System and method for the display and control of virtual environments in a single pipe graphics memory controller hub using picture-in-picture
US8694712B2 (en) * 2006-12-05 2014-04-08 Microsoft Corporation Reduction of operational costs of virtual TLBs
US8055951B2 (en) * 2007-04-10 2011-11-08 International Business Machines Corporation System, method and computer program product for evaluating a virtual machine
US8561060B2 (en) * 2007-04-26 2013-10-15 Advanced Micro Devices, Inc. Processor and method configured to determine an exit mechanism using an intercept configuration for a virtual machine
US8561061B2 (en) 2007-05-14 2013-10-15 Vmware, Inc. Adaptive dynamic selection and application of multiple virtualization techniques
US8479195B2 (en) 2007-05-16 2013-07-02 Vmware, Inc. Dynamic selection and application of multiple virtualization techniques
JP4864817B2 (ja) * 2007-06-22 2012-02-01 株式会社日立製作所 仮想化プログラム及び仮想計算機システム
US8307358B1 (en) * 2007-07-10 2012-11-06 Parallels IP Holdings GmbH Method and system for unattended installation of guest operating system
US8261284B2 (en) * 2007-09-13 2012-09-04 Microsoft Corporation Fast context switching using virtual cpus
CN101216778B (zh) * 2008-01-21 2011-04-13 中国科学院计算技术研究所 一种risc处理器装置及其指令地址转换查找方法
US8078792B2 (en) * 2008-01-22 2011-12-13 Advanced Micro Devices, Inc. Separate page table base address for minivisor
US8245236B2 (en) * 2008-02-27 2012-08-14 International Business Machines Corporation Lock based moving of threads in a shared processor partitioning environment
JP4530182B2 (ja) 2008-02-27 2010-08-25 日本電気株式会社 プロセッサ、メモリ装置、処理装置及び命令の処理方法
CN100555225C (zh) 2008-03-17 2009-10-28 中国科学院计算技术研究所 一种支持x86虚拟机的risc处理器装置及方法
US8074045B2 (en) 2008-05-30 2011-12-06 Vmware, Inc. Virtualization with fortuitously sized shadow page tables
US20090322768A1 (en) * 2008-06-25 2009-12-31 Lalonde Paul A Compile-time type-safe composable state objects
US9201673B2 (en) * 2008-07-30 2015-12-01 Microsoft Technology Licensing, Llc Efficient detection and response to spin waits in multi-processor virtual machines
US8281296B2 (en) * 2008-08-12 2012-10-02 Oracle America, Inc. Cross-ISA inlining in a system virtual machine
US8387031B2 (en) * 2009-01-23 2013-02-26 International Business Machines Corporation Providing code improvements for nested virtual machines
CN101620547B (zh) * 2009-07-03 2012-05-30 中国人民解放军国防科学技术大学 X86计算机虚拟化的物理中断处理方法
US9086922B2 (en) * 2009-10-26 2015-07-21 Microsoft Technology Licensing, Llc Opportunistically scheduling and adjusting time slices
CN102141928A (zh) 2010-01-29 2011-08-03 国际商业机器公司 虚拟环境下的数据处理方法、系统以及系统的部署方法
EA019399B1 (ru) * 2010-03-19 2014-03-31 Закрытое Акционерное Общество "Ес-Лизинг" Способ реализации доверенных вычислений
US10521231B2 (en) * 2010-06-24 2019-12-31 International Business Machines Corporation Function virtualization facility for blocking instruction function of a multi-function instruction of a virtual processor
US9396000B2 (en) * 2010-06-25 2016-07-19 Intel Corporation Methods and systems to permit multiple virtual machines to separately configure and access a physical device
US8464104B2 (en) 2010-09-10 2013-06-11 International Business Machines Corporation Mobility of versioned workload partitions
US8789042B2 (en) * 2010-09-27 2014-07-22 Mips Technologies, Inc. Microprocessor system for virtual machine execution
US8490090B2 (en) 2011-02-17 2013-07-16 International Business Machines Corporation Multilevel support in a nested virtualization environment
US8826440B2 (en) * 2011-10-19 2014-09-02 Google Inc. Defensive techniques to increase computer security
RU2472215C1 (ru) 2011-12-28 2013-01-10 Закрытое акционерное общество "Лаборатория Касперского" Способ выявления неизвестных программ с использованием эмуляции процесса загрузки
US9292316B2 (en) * 2012-03-01 2016-03-22 International Business Machines Corporation Cloud of virtual clouds for increasing isolation among execution domains
US9524263B2 (en) * 2012-06-29 2016-12-20 Intel Corporation Method and apparatus for bus lock assistance
US9477505B2 (en) 2012-08-14 2016-10-25 Oracle International Corporation Method for reducing the overhead associated with a virtual machine exit when handling instructions related to descriptor tables
CN103677770B (zh) * 2012-09-06 2016-12-21 中天安泰(北京)信息技术有限公司 指令重组方法及装置
CN103677746B (zh) * 2012-09-06 2016-06-29 中天安泰(北京)信息技术有限公司 指令重组方法及装置
CN103677769B (zh) * 2012-09-06 2016-09-14 中天安泰(北京)信息技术有限公司 指令重组方法及装置
US9286131B2 (en) 2012-11-14 2016-03-15 Red Hat Israel, Ltd. Processor unplug in virtualized computer system
US9778943B2 (en) * 2013-05-28 2017-10-03 Red Hat Israel, Ltd. Timer based virtual processor scheduling and suspension on physical processor for use of physical processor by other processing
US9513924B2 (en) 2013-06-28 2016-12-06 Globalfoundries Inc. Predictor data structure for use in pipelined processing
US9619230B2 (en) 2013-06-28 2017-04-11 International Business Machines Corporation Predictive fetching and decoding for selected instructions
US9361144B2 (en) 2013-06-28 2016-06-07 Globalfoundries Inc. Predictive fetching and decoding for selected return instructions
US9582295B2 (en) 2014-03-18 2017-02-28 International Business Machines Corporation Architectural mode configuration
US9916185B2 (en) * 2014-03-18 2018-03-13 International Business Machines Corporation Managing processing associated with selected architectural facilities
US9256467B1 (en) 2014-11-11 2016-02-09 Amazon Technologies, Inc. System for managing and scheduling containers
US9703703B2 (en) * 2014-12-23 2017-07-11 Intel Corporation Control of entry into protected memory views
US9286105B1 (en) 2015-03-16 2016-03-15 AO Kaspersky Lab System and method for facilitating joint operation of multiple hypervisors in a computer system
US9870275B2 (en) 2015-05-12 2018-01-16 International Business Machines Corporation Processor thread management
CN105389197B (zh) * 2015-10-13 2019-02-26 北京百度网讯科技有限公司 用于基于容器的虚拟化系统的操作捕获方法和装置
US9984231B2 (en) * 2015-11-11 2018-05-29 Qualcomm Incorporated Detecting program evasion of virtual machines or emulators
US10261782B2 (en) 2015-12-18 2019-04-16 Amazon Technologies, Inc. Software container registry service
US10963280B2 (en) 2016-02-03 2021-03-30 Advanced Micro Devices, Inc. Hypervisor post-write notification of control and debug register updates
US10135837B2 (en) 2016-05-17 2018-11-20 Amazon Technologies, Inc. Versatile autoscaling for containers
US10338135B2 (en) * 2016-09-28 2019-07-02 Amazon Technologies, Inc. Extracting debug information from FPGAs in multi-tenant environments
US11099894B2 (en) 2016-09-28 2021-08-24 Amazon Technologies, Inc. Intermediate host integrated circuit between virtual machine instance and customer programmable logic
US10162921B2 (en) 2016-09-29 2018-12-25 Amazon Technologies, Inc. Logic repository service
US10282330B2 (en) 2016-09-29 2019-05-07 Amazon Technologies, Inc. Configurable logic platform with multiple reconfigurable regions
US10250572B2 (en) 2016-09-29 2019-04-02 Amazon Technologies, Inc. Logic repository service using encrypted configuration data
US10642492B2 (en) 2016-09-30 2020-05-05 Amazon Technologies, Inc. Controlling access to previously-stored logic in a reconfigurable logic device
US11115293B2 (en) 2016-11-17 2021-09-07 Amazon Technologies, Inc. Networked programmable logic service provider
US10409642B1 (en) 2016-11-22 2019-09-10 Amazon Technologies, Inc. Customer resource monitoring for versatile scaling service scaling policy recommendations
US10635479B2 (en) 2016-12-19 2020-04-28 Bitdefender IPR Management Ltd. Event filtering for virtual machine security applications
US10706143B2 (en) * 2017-05-19 2020-07-07 Intel Corporation Techniques for secure-chip memory for trusted execution environments
CN107479943B (zh) * 2017-07-03 2020-02-21 北京东土科技股份有限公司 基于工业互联网操作系统的多操作系统运行方法及装置
RU2675045C1 (ru) * 2017-09-18 2018-12-14 Юрий Анатольевич Ткаченко Архитектура микропроцессора с функцией автоматического программирования микроконтроллеров
US11281495B2 (en) 2017-10-26 2022-03-22 Advanced Micro Devices, Inc. Trusted memory zone
US11086631B2 (en) 2018-11-30 2021-08-10 Western Digital Technologies, Inc. Illegal instruction exception handling
US11669365B1 (en) 2019-08-26 2023-06-06 Amazon Technologies, Inc. Task pool for managed compute instances
LU101621B1 (en) * 2020-01-30 2021-07-30 Microsoft Technology Licensing Llc Efficiently providing a guest context access to file content at a host content

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5539911A (en) * 1991-07-08 1996-07-23 Seiko Epson Corporation High-performance, superscalar-based computer system with out-of-order instruction execution
KR100280460B1 (ko) * 1998-04-08 2001-02-01 김영환 데이터 처리 장치 및 이의 복수의 스레드 처리 방법
US6397242B1 (en) * 1998-05-15 2002-05-28 Vmware, Inc. Virtualization system including a virtual machine monitor for a computer with a segmented architecture
GB9825102D0 (en) * 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
US6658657B1 (en) * 2000-03-31 2003-12-02 Intel Corporation Method and apparatus for reducing the overhead of virtual method invocations
JP2004519027A (ja) 2001-01-30 2004-06-24 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 主プロセッサと命令経路コプロセッサとの同期化
US7191440B2 (en) * 2001-08-15 2007-03-13 Intel Corporation Tracking operating system process and thread execution and virtual machine execution in hardware or in a virtual machine monitor
US7003778B2 (en) 2001-10-24 2006-02-21 Sun Microsystems, Inc. Exception handling in java computing environments
US7127548B2 (en) * 2002-04-16 2006-10-24 Intel Corporation Control register access virtualization performance improvement in the virtual-machine architecture
US7210144B2 (en) * 2002-08-02 2007-04-24 Microsoft Corporation Method for monitoring and emulating privileged instructions of programs in a virtual machine
US20050076186A1 (en) * 2003-10-03 2005-04-07 Microsoft Corporation Systems and methods for improving the x86 architecture for processor virtualization, and software systems and methods for utilizing the improvements
US7552426B2 (en) * 2003-10-14 2009-06-23 Microsoft Corporation Systems and methods for using synthetic instructions in a virtual machine

Also Published As

Publication number Publication date
JP2005122711A (ja) 2005-05-12
EP1524596A2 (en) 2005-04-20
CN1607503B (zh) 2011-06-15
TW200519753A (en) 2005-06-16
US20050080753A1 (en) 2005-04-14
RU2374675C2 (ru) 2009-11-27
CA2482008A1 (en) 2005-04-14
US20050081199A1 (en) 2005-04-14
BRPI0406029A (pt) 2005-08-02
EP1524596A3 (en) 2007-11-21
EP1524596B1 (en) 2020-02-12
US7552426B2 (en) 2009-06-23
ZA200407584B (en) 2005-05-25
RU2004129720A (ru) 2006-03-20
CN1607503A (zh) 2005-04-20
US8504703B2 (en) 2013-08-06
AU2004212540A1 (en) 2005-04-28
MXPA04010030A (es) 2005-04-19

Similar Documents

Publication Publication Date Title
US7552426B2 (en) Systems and methods for using synthetic instructions in a virtual machine
US11200080B1 (en) Late load technique for deploying a virtualization layer underneath a running operating system
KR102116571B1 (ko) 가상 머신을 나가자 마자 현재 프로세서 명령의 결과를 노출하기 위한 시스템 및 방법
US10204220B1 (en) Thin hypervisor for native execution of unsafe code
RU2265880C2 (ru) Новый режим процессора для ограничения функционирования гостевого программного обеспечения, выполняющегося на виртуальной машине, поддерживаемой монитором виртуальной машины
US8739160B1 (en) Methods and systems for safe execution of guest code in virtual machine context
EP1939754B1 (en) Providing protected access to critical memory regions
US9529614B2 (en) Automatically bridging the semantic gap in machine introspection
US7434224B2 (en) Plural operating systems having interrupts for all operating systems processed by the highest priority operating system
US7421689B2 (en) Processor-architecture for facilitating a virtual machine monitor
US20050076186A1 (en) Systems and methods for improving the x86 architecture for processor virtualization, and software systems and methods for utilizing the improvements
CA2577493A1 (en) Operating systems
NL2030804B1 (en) Flexible return and event delivery
US11550609B2 (en) Unified hypercall interface across processors in virtualized computing systems
US20210157601A1 (en) Exception interception
US20230281016A1 (en) Software-controlled flag to require a stack switch during execution
Bungale et al. Supervisor-Mode Virtualization for x86 in VDebug
Bugnion et al. The Popek/Goldberg Theorem
CN114090273A (zh) 一种进程间通信的方法、装置及计算机存储介质
CN113127936A (zh) 具有对保护环之间的特权资源和异常的可配置分配的处理器
Wang et al. MTX in 32-bit Protected Mode
Steil et al. Inside VMware

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid