HvCallFlushVirtualAddressSpace 하이퍼콜은 지정된 주소 공간에 속하는 모든 가상 TLB 항목을 무효화합니다.
인터페이스
HV_STATUS
HvCallFlushVirtualAddressSpace(
_In_ HV_ADDRESS_SPACE_ID AddressSpace,
_In_ HV_FLUSH_FLAGS Flags,
_In_ UINT64 ProcessorMask
);
가상 TLB 무효화 작업은 하나 이상의 프로세서에서 작동합니다.
게스트가 플러시해야 할 수 있는 프로세서에 대한 지식이 있는 경우 프로세서 마스크를 지정할 수 있습니다. 마스크의 각 비트는 가상 프로세서 인덱스에 해당합니다. 예를 들어 0x0000000000000051 마스크는 하이퍼바이저가 가상 프로세서 0, 4 및 6의 TLB만 플러시해야 임을 나타냅니다. 가상 프로세서는 HvRegisterVpIndex 가상 레지스터( HvCallGetVpRegisters를 통해) 또는 HV_X64_MSR_VP_INDEX MSR의 x64에서 인덱스를 확인할 수 있습니다.
다음 플래그를 사용하여 플러시 동작을 수정할 수 있습니다.
- HV_FLUSH_ALL_PROCESSORS 작업이 파티션 내의 모든 가상 프로세서에 적용되어야 임을 나타냅니다. 이 플래그를 설정하면 ProcessorMask 매개 변수가 무시됩니다.
- HV_FLUSH_ALL_VIRTUAL_ADDRESS_SPACES 작업이 모든 가상 주소 공간에 적용되어야 임을 나타냅니다. 이 플래그를 설정하면 AddressSpace 매개 변수가 무시됩니다.
- HV_FLUSH_NON_GLOBAL_MAPPINGS_ONLY 하이퍼바이저가 "global"(x64, 페이지 테이블 항목의 "G" 비트, ARM64, nG 비트)으로 매핑되지 않은 페이지 매핑을 플러시하는 데만 필요했음을 나타냅니다. 전역 항목은 하이퍼바이저에 의해 흐리지 않은 상태로 남아 있을 수 있지만 필요하지는 않습니다.
다른 모든 플래그는 예약되어 있으며 0으로 설정해야 합니다.
이 호출은 시간 컨트롤이 호출자에게 다시 반환될 때 지정된 가상 프로세서에 대한 모든 플러시에서 관찰 가능한 효과가 발생했음을 보장합니다.
대상 가상 프로세서의 TLB에 플러시가 필요하고 가상 프로세서의 TLB가 현재 "잠겨 있는" 경우 호출자의 가상 프로세서가 일시 중단됩니다. 호출자의 가상 프로세서가 "unsuspended"이면 하이퍼콜이 재발행됩니다.
호출 코드
0x0002 (단순)
입력 매개 변수
| 이름 | 상쇄 | Size | 제공된 정보 |
|---|---|---|---|
AddressSpace |
0 | 8 | 주소 공간 ID를 지정합니다(x64의 CR3, ARM64의 번역 테이블 기반). |
Flags |
8 | 8 | 플러시 작업을 수정하는 플래그 비트 집합입니다. |
ProcessorMask |
16 | 8 | 플러시 작업의 영향을 받는 프로세서를 나타내는 프로세서 마스크입니다. |