Virtual machine control data structures

Ahn9807 (토론 | 기여)님의 2023년 3월 16일 (목) 01:47 판 (새 문서: 분류: x86 가상화 == 개요 == Virtual machine control data structures (VMCS)는 VMX시에 x86 CPU가 사용하는 구조체이다. 이 구조체는 가상머신이 어떻게 동작할 것인지 세부적인 동작 방법을 저장하고 있다. 이 구조체에 접근하기 위해서는 VMCLEAR, VMPTRLD, VMREAD 그리고 VMWRITE을 통해서 접근하게 된다. Virtual machine monitor는 각각의 가상머신 마다 다르게 설정된 VMCS를 부여함으...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)


개요

Virtual machine control data structures (VMCS)는 VMX시에 x86 CPU가 사용하는 구조체이다. 이 구조체는 가상머신이 어떻게 동작할 것인지 세부적인 동작 방법을 저장하고 있다. 이 구조체에 접근하기 위해서는 VMCLEAR, VMPTRLD, VMREAD 그리고 VMWRITE을 통해서 접근하게 된다.

Virtual machine monitor는 각각의 가상머신 마다 다르게 설정된 VMCS를 부여함으로서, 다른 기능을 제어할 수 있게 된다. VMCS는 각각의 virtual process마다 하나씩 배분된다. 예를 들어서, 가상 4코어를 사용하는 가상머신의 경우 4개의 VMCS를 통해서 각각의 코어의 기능을 제어하게 된다.

논리 프로세서 (실제 프로세서)는 여러개의 Active한 VMCS를 가지고서 현재 프로세서가 작동한 current VMCS를 결정하게 된다. current VMCS가 위에서 설명한 VMCLEAR..와 같은 연산자의 대상이 된다.

  • VMPTRLD: VMCS의 메모리를 로드하고 그 메모리를 current VMCS로 바꾼다.
  • VMCLEAR: 지정된 VMCS의 메모리를 current와 active에서 삭제한다.
  • VMLAUNCH: 지정된 VMCS의 상태가 clear이고, Active이면 그 VMCS가 현재 논리 프로세서의 Launched된 상태로 만든다.
States of VMCS

[1]

VMCS 포맷

  • 0 ~ 4 byte: 30:0 비트는 VMCS revision identifier이며, 31비트는 Shadow VMCS indicator이다. (즉 VMCS버전 정보) 이 revision 정보는 하이퍼버이저가 작성해야 하며, MSR IA32_VMX_BASIC에서 가져올 수 있다.
  • 4 ~ 8 byte: VMX-abort indicator, 초기화는 0이며, VM이 abort나면 프로세서가 해당하는 abort정보를 여기다 적어준다.
  • 8 ~ : VMCS data. Writeback cacheable 메모리를 가르키는 주소여야 하며, CPU가 VMCS구조체를 관리할 때 사용할 메모리 주소가 된다.

VMCS Data의 종류

  • Guest-state area: VM exit이나 load가 발생하면 Guest-state area에서 프로세서의 상태를 가져온다
  • Host-state area: VM exit이 나면 여기서 host의 정보를 가져와 로드한다.
  • Vm-execution control fields: VMX non-root operation에 대한 설정을 저장한다.
  • Vm-exit control fields: VM exit상황에서 어떻게 할 것인지 설정한다.
  • Vm-entry control fields: VM entry상황에서 어떻게 할 것인지 설정한다.
  • Vm-exit information fields: VM exit상황에서 어떤 이유때문에 VM exit이 났는지 여기다가 저장한다.

자세한 내용은 인텔 메뉴얼을 참조


참고 문헌

  1. Intel 64 and Ia-32 Software Developer's Manual