Vol. 3A xxiii
CONTENTS
PAGE
CHAPTER 25
VIRTUAL-MACHINE MONITOR PROGRAMMING CONSIDERATIONS
25.1 VMX SYSTEM PROGRAMMING OVERVIEW. . . . . . . . . . . . . . . . . . . . . . . . . . . . 23-1
25.2 SUPPORTING PROCESSOR OPERATING MODES IN GUEST
ENVIRONMENTS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23-1
25.2.1 Emulating Guest Execution. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23-2
25.3 MANAGING VMCS REGIONS AND POINTERS. . . . . . . . . . . . . . . . . . . . . . . . . . 23-2
25.4 USING VMX INSTRUCTIONS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23-5
25.5 VMM SETUP & TEAR DOWN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23-5
25.6 PREPARATION AND LAUNCHING A VIRTUAL MACHINE . . . . . . . . . . . . . . . . . 23-6
25.7 HANDLING OF VM EXITS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23-7
25.7.1 Handling VMExits Due to Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23-8
25.7.1.1 Reflecting Exceptions to Guest Software . . . . . . . . . . . . . . . . . . . . . . . . . . . 23-8
25.7.1.2 Resuming Guest Software after Handling an Exception. . . . . . . . . . . . . . . 23-10
25.8 MULTI-PROCESSOR CONSIDERATIONS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23-11
25.8.1 Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23-11
25.8.2 Moving a VMCS Between Processors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23-12
25.8.3 Paired Index-Data Registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23-13
25.8.4 External Data Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23-13
25.8.5 CPUID Emulation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23-13
25.9 32-BIT AND 64-BIT GUEST ENVIRONMENTS. . . . . . . . . . . . . . . . . . . . . . . . . . 23-13
25.9.1 Operating Modes of Guest Environments . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23-14
25.9.2 Handling Widths of VMCS Fields. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23-14
25.9.2.1 Natural-Width VMCS Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23-14
25.9.2.2 64-Bit VMCS Fields. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23-15
25.9.3 IA-32e Mode Hosts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23-15
25.9.4 IA-32e Mode Guests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23-16
25.9.5 32-Bit Guests. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23-17
25.10 HANDLING MODEL SPECIFIC REGISTERS . . . . . . . . . . . . . . . . . . . . . . . . . . . 23-17
25.10.1 Using VM-Execution Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23-17
25.10.2 Using VM-Exit Controls for MSRs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23-18
25.10.3 Using VM-Entry Controls for MSRs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23-18
25.10.4 Handling Special-Case MSRs and Instructions. . . . . . . . . . . . . . . . . . . . . . . . 23-18
25.10.4.1 Handling IA32_EFER MSR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23-19
25.10.4.2 Handling the SYSENTER and SYSEXIT Instructions. . . . . . . . . . . . . . . . . 23-19
25.10.4.3 Handling the SYSCALL and SYSRET Instructions. . . . . . . . . . . . . . . . . . . 23-19
25.10.4.4 Handling the SWAPGS Instruction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23-20
25.10.4.5 Implementation Specific Behavior on Writing to Certain MSRs . . . . . . . . . 23-20
25.10.5 Handling Accesses to Reserved MSR Addresses. . . . . . . . . . . . . . . . . . . . . . 23-20
25.11 HANDLING ACCESSES TO CONTROL REGISTERS . . . . . . . . . . . . . . . . . . . . 23-20
25.12 PERFORMANCE CONSIDERATIONS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23-21
CHAPTER 26
VIRTUALIZATION OF SYSTEM RESOURCES
26.1 OVERVIEW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24-1
26.2 VIRTUALIZATION SUPPORT FOR IA-32 DEBUGGING FACILITIES. . . . . . . . . . 24-1
26.3 MEMORY VIRTUALIZATION. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24-2
26.3.1 IA-32 Processor Operating Modes & Memory Virtualization . . . . . . . . . . . . . . . 24-2
26.3.2 Guest & Host Physical Address Spaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24-2
26.3.3 Virtualizing Virtual Memory by Brute Force . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24-3
26.3.4 Alternate Approach to Memory Virtualization . . . . . . . . . . . . . . . . . . . . . . . . . . 24-4
26.3.5 Details of Virtual TLB Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24-5