하이퍼바이저는 파티션 측면에서 격리를 지원합니다. 파티션은 운영 체제가 실행되는 하이퍼바이저에서 지원하는 격리의 논리적 단위입니다.
파티션 권한 플래그
각 파티션에는 하이퍼바이저에서 할당한 권한 집합이 있습니다. 권한은 가상 레지스터 또는 하이퍼콜에 대한 액세스를 제어합니다.
x64 플랫폼에서 파티션은 "하이퍼바이저 기능 식별" CPUID 리프(0x40000003)를 통해 해당 권한을 쿼리할 수 있습니다.
ARM64 플랫폼에서 파티션은 HvCallGetVpRegisters를 사용하여 HvRegisterPrivilegesAndFeaturesInfo 레지스터를 통해 해당 권한을 쿼리할 수 있습니다.
모든 권한에 대한 설명은 HV_PARTITION_PRIVILEGE_MASK 참조하세요.
파티션 충돌 인식
하이퍼바이저는 게스트 파티션에 크래시 인식 기능을 제공합니다. 이 인터페이스를 사용하면 게스트 파티션에서 실행되는 운영 체제에서 크래시 덤프 프로시저의 일부로 하이퍼바이저에 치명적인 OS 조건에 대한 포렌식 정보를 제공하는 옵션을 사용할 수 있습니다. 옵션에는 게스트 크래시 매개 변수 레지스터의 내용 유지 및 크래시 메시지 지정이 포함됩니다. 그런 다음 하이퍼바이저는 이 정보를 루트 파티션에서 로깅에 사용할 수 있도록 합니다. 이 메커니즘을 사용하면 가상화 호스트 관리자가 게스트 파티션에 연결된 영구 스토리지에서 크래시 덤프 또는 크래시 게스트 OS에 의해 저장될 수 있는 코어 덤프 정보를 검사하지 않고도 게스트 OS 크래시 이벤트에 대한 정보를 수집할 수 있습니다.
x64 플랫폼에서 이 메커니즘의 가용성은 GuestCrashMsrsAvailable 플래그를 통해 CPUID.0x40000003.EDX:10표시됩니다. ARM64 플랫폼에서 가용성은 HvRegisterPrivilegesAndFeaturesInfo의 비트 105로 표시됩니다. 자세한 내용은 기능 검색 을 참조하세요.
게스트 크래시 인식 인터페이스
x64 플랫폼에서 게스트 크래시 인식 인터페이스는 아래에 정의된 대로 6개의 가상 MSR을 통해 제공됩니다.
#define HV_X64_MSR_CRASH_P0 0x40000100
#define HV_X64_MSR_CRASH_P1 0x40000101
#define HV_X64_MSR_CRASH_P2 0x40000102
#define HV_X64_MSR_CRASH_P3 0x40000103
#define HV_X64_MSR_CRASH_P4 0x40000104
#define HV_X64_MSR_CRASH_CTL 0x40000105
ARM64 플랫폼에서 게스트 크래시 인식 인터페이스는 HvCallGetVpRegisters 및 HvCallSetVpRegisters를 통해 액세스되는 6개의 가상 레지스터를 통해 제공됩니다.
- HvRegisterGuestCrashP0
- HvRegisterGuestCrashP1
- HvRegisterGuestCrashP2
- HvRegisterGuestCrashP3
- HvRegisterGuestCrashP4
- HvRegisterGuestCrashCtl
게스트 크래시 제어 레지스터
게스트 파티션에서 게스트 크래시 제어 레지스터(x64의 HV_X64_MSR_CRASH_CTL, ARM64의 HvRegisterGuestCrashCtl)를 사용하여 하이퍼바이저의 게스트 충돌 기능을 확인하고 수행할 지정된 작업을 호출할 수 있습니다. HV_CRASH_CTL_REG_CONTENTS 데이터 구조는 레지스터의 내용을 정의합니다.
게스트 크래시 기능 확인
게스트 크래시 기능을 확인하기 위해 게스트 파티션은 게스트 크래시 제어 레지스터를 읽을 수 있습니다. 하이퍼바이저에서 지원하는 지원되는 작업 및 기능 집합이 보고됩니다.
게스트 크래시 기능 호출
지원되는 하이퍼바이저 게스트 크래시 작업을 호출하기 위해 게스트 파티션은 원하는 작업을 지정하여 게스트 크래시 제어 레지스터에 씁니다. 두 가지 변형이 지원됩니다. 그 자체로 CrashNotify와 CrashMessage를 함께 사용합니다. 게스트 크래시가 발생할 때마다 게스트 크래시 제어 레지스터에 대한 최대 하나의 쓰기를 수행하여 두 가지 변형 중 하나를 지정해야 합니다.
| 게스트 충돌 작업 | Description |
|---|---|
| CrashMessage | 이 작업은 CrashNotify와 함께 하이퍼바이저에 크래시 메시지를 지정하는 데 사용됩니다. 이 옵션을 선택하면 P3 및 P4 값이 메시지의 위치 및 크기로 처리됩니다. P3 레지스터에는 메시지의 게스트 실제 주소가 포함되며 P4 레지스터에는 메시지 길이(최대 4096바이트)가 포함됩니다. |
| CrashNotify | 이 작업은 하이퍼바이저에 게스트 파티션이 원하는 데이터를 게스트 크래시 매개 변수 레지스터(즉, P0를 통해 P4)에 쓰기를 완료했음을 나타내며 하이퍼바이저는 이러한 레지스터의 콘텐츠 로깅을 계속 진행해야 합니다. |