[0x00] Concept
메뉴얼 순서 상 드디어 마지막 챕터입니다. 물론 구현을 하면서 더 상세한 내용이 필요할 것 입니다.
해당 챕터에서는 VMX Operation
을 위한 주소 변환을 지원하는 VPID(Virtual-Processor Identifier)
와 EPT(Extended Page-Table
의 메커니즘에 대해 설명합니다.
VPID
는 선형 주소 변환을 관리하기 위한 메커니즘이며, EPT
는 선형 주소 변환을 확장시키는 주소 변환 계층을 정의합니다.(augment
의 의미를 확장으로 해석하였습니다.)
해당 내용에 명확한 이해를 위해서는 Intel SDM Vol.3A Chapter 4 Paging
을 어느정도 숙지해야 합니다. 이는 별도의 내용으로 정리 예정입니다.
게스트 물리 주소
와 같이 앞에 게스트가 붙지 않는 이상 호스트의 물리 주소를 의미합니다.[0x01] Virtual Processor Identifiers(VPIDs)
VMX Operation
을 위한 기존의 아키텍처에서는 TLB
및 Paging-Structure Cache
를 플러시하기 위해 VMX Transition
이 필요했습니다.
이를 통해 이전의 선형 주소 공간에 대해 캐시된 변환이 전환 후 사용되지 않도록 보장했습니다.
VPID(Virtual Processor Identifier)
는 논리 프로세서가 여러 선형 주소 공간에 대한 정보를 캐시할 수 있는 기능을 VMX Operation
에 제공합니다.
VPID
를 사용하면 VMX Transition
은 캐시된 정보를 유지할 수 있고 논리 프로세서가 다른 선형 주소 공간으로 전환될 수 있습니다.
해당 포스트 내 Caching Translation Information
에서 여러 선형 주소 공간에 대해 캐시 된 정보를 관리하는 메커니즘을 자세히 설명합니다.
논리 프로세서는 16 bit VPID
로 캐시된 일부 정보에 태그를 지정할 수 있습니다.
- 현재
VPID
는 아래의 상황에서0000h
입니다.VMX Operation
이 아닌 경우VMX root operation
에 있는 경우Second_enable VPID
제어가 0일 때VMX non-root operation
에 있는 경우
- 논리 프로세서가
VMX non-root operation
에 있고Second_enable VPID
제어가 1인 경우 현재VPID
는VMCS
의VM-execution control field
내VPID
의 값입니다.(VM Entry
는 이 값이0000h
가 아님을 보장합니다.)
VPID
는 PCID(Process-Context Identifier)
와 동시에 사용할 수 있습니다. 동시에 사용하게 되면 프로세서는 캐시된 정보를 현재 VPID
와 PCID
를 연결합니다. 이러한 정보는 현재 VPID
, PCID
가 모두 캐시된 정보와 관련된 정보와 일치하는 경우에만 사용됩니다.
[0x02] Hypervisor-Managed Linear-Address Translation(HLAT)
HLAT(Hypervisor-Managed Linear-Address Translation)
은 VMX non-root operation
에서 선형 주소가 변환되는 방식을 변경하는 기능입니다.
일반적인 Paging
대신 HLAT Paging
이라는 변경된 프로세스를 사용합니다.
HLAT Paging
은 Tertiary_enable HLAT
제어가 1로 설정된 경우에만 사용됩니다. HLAT Paging
은 4-Level, 5-Level Paging
에서만 사용됩니다.
HLAT Paging
은 일반적인 Paging
을 변경한 것 이기 때문에 4-Level, 5-Level Paging
의 동작을 설명의 경우 별도의 페이징 관련 챕터를 통해 확인할 수 있습니다.
[0x03] The Extended Page Table Mechanism(EPT)
EPT(Extended Page-Table Mechanism)
은 물리 메모리의 가상화를 지원하는 데 사용할 수 있는 기능입니다.
EPT
가 사용 중일 때 일반적으로 물리 주소로 처리되고 메모리에 액세스하는 데 사용되는 특정 주소는 게스트의 물리 주소로 처리됩니다.
게스트 물리 주소는 메모리에 액세스하는 데 사용되는 물리 주소를 생성하기 위해 EPT Paging-Structure
집합을 통해 변환됩니다.
[-] EPT Overview
EPT
는 Second_enable EPT
제어가 1일 때 사용됩니다. VMX non-root operation
에서 사용되고 이벤트 주입(Event Injection
)을 위해 VM Entry
에서 사용되는 게스트 물리 주소를 변환합니다.
게스트 물리 주소에서 물리 주소로의 변환은 EPT Paging-Structure
(EPT 페이징 구조) 에 의해 결정됩니다. EPT Paging-Structure
는 프로세서가 IA-32e mode
에 있는 동안 선형 주소를 변환하는 데 사용되는 구조와 유사합니다.
계속해서 언급 될 EPT Paging-Structure
아래와 같은 구조입니다.
CR0.PG = 1
이면 선형 주소는 CR3
를 통해 참조되는 페이징 구조를 통해 변환됩니다. Second_enable EPT
제어가 1로 설정되어 있는 동안 이러한 페이징 구조를 Guest Paging-Structure
(게스트 페이징 구조)라고 합니다.
CR0.PG = 0
이면 게스트 페이징 구조가 없습니다.
Second_enable EPT
제어가 1일 때 게스트 물리 주소의 식별(ID
)은 CR0.PG
의 값에 따라 달라집니다.
CR0.PG = 0
인 경우 선형 주소는 게스트 물리 주소로 처리됩니다.CR0.PG = 1
인 경우 게스트 물리 주소는CR3
와 게스트 페이징 구조의 내용에서 파생된 주소입니다.
CR0.PG = 1
인 경우에 선형 주소를 물리 주소로 변환하려면 EPT
를 사용하여 게스트 물리 주소를 여러 번 변환해야 합니다.
예를 들어 CR4.PAE, PSE = 0
인 경우를 가정해보겠습니다. 32 bit의 선형 주소 변환은 아래와 같이 동작합니다.
- 선형 주소의 bits 31:22 는
CR3
의 게스트 물리 주소에 위치한 게스트PDE(Page-Directory Entry)
를 선택합니다. 게스트PDE
의 게스트 물리 주소는EPT
를 통해 변환되어 게스트PDE
의 물리 주소를 결정합니다. - 선형 주소의 bits 21:12 는 게스트
PDE
의 게스트 물리 주소에 위치한 게스트 페이지 테이블 내의 엔트리(PTE
)를 선택합니다. 게스트PTE
의 게스트 물리 주소는EPT
를 통해 변환되어 게스트PTE
의 물리 주소를 결정합니다. - 선형 주소의 bits 11:0 은 게스트
PTE
의 게스트 물리 주소에 위치한페이지 프레임
내의 오프셋입니다. 이 오프셋에 의해 결정된 게스트 물리 주소는EPT
를 통해 변환되어 원래 선형 주소가 변환되는 물리 주소를 결정합니다.
추가적으로 EPT
는 게스트 물리 주소를 물리 주소로 변환하는 것 외에도 주소에 액세스 할 때 VMM
이 허용하는 권한을 지정합니다. 허용되지 않는 액세스 시도를 EPT Violation
이라고 하며 VM Exit
의 원인이 됩니다.
해당 내용은 매우 중요하며 본인이 구현할 내용에서 주된 기능이 됩니다. 이를 이용하여 특정 주소에 액세스할 때 VM Exit
를 발생시켜 내가 원하는 동작을 하도록 할 수 있습니다.
프로세서는 게스트 물리 주소가 메모리에 액세스하는 데 사용될 때만 EPT
를 사용하여 게스트 물리 주소를 물리 주소로 변환합니다.
이 내용은 다음을 의미합니다.
MOV to CR3
명령은 게스트 물리 주소를CR3
에 로드합니다. 해당 주소가EPT
를 통해 변환되는지 여부는PAE Paging
사용 여부에 따라 달라집니다.PAE Paging
을 사용하지 않는 경우, 해당 명령은 메모리에 액세스할 때 해당 주소를 사용하지 않으며EPT
를 통해 변환되지 않습니다.(CR0.PG = 1
인 경우 주소는 선형 주소를 사용하여 메모리에 액세스한 다음EPT
를 통해 변환됩니다.)PAE Paging
을 사용하는 경우, 해당 주소에서 4개의PDPTE
를 로드하고EPT
를 통해 주소를 변환합니다.
PDPTE
에는 게스트 물리 주소가 포함되어 있습니다.PDPTE
를 로드하는 명령(위의 내용)은 이러한 게스트 물리 주소를 사용하여 메모리에 액세스하지 않으며EPT
를 통해 변환되지 않습니다.PDPTE
의 주소는 해당PDPTE
를 사용하는 선형 주소를 사용하여 액세스한 다음EPT
를 통해 변환됩니다.
[-] EPT Translation Mechanism
EPT
변환 메커니즘은 각 게스트 물리 주소의 bits 47:0 만 사용합니다. Page-Walk Length
의 값은 4를 사용하게 되는데, 이는 게스트 물리 주소를 변환하기 위해 최대 4개의 EPT Paging-Structure Entry
에 액세스한다는 것을 의미합니다.
이러한 48 bits(변환 메커니즘에 사용되는 게스트 물리 주소)는 EPT Paging-Structure
를 트레버스하기 위해 논리 프로세서에 의해 분할됩니다.
아래에서 설명되는 EPT Paging-Structure
와 Paging-Structure
는 다른 구조입니다.
어떠한 오브젝트가 크기에 맞춰 정렬되는 경우를 의미합니다. 8 byte 크기의 데이터는 8의 배수인 주소에 정렬되었을 때 자연스럽게 정렬된 주소로 이해할 수 있습니다. (address % size = 0
)
- 4-Kbyte 로 자연스럽게 정렬된(
Naturally aligned
)EPT PML4 table
은Extended-Page-Table Pointer(EPTP)
의 bits 51:12에 지정된 물리 주소에 위치합니다.EPT PML4 Table
은 512개의 64bits 로 이루어진 엔트리(EPT PML4E
)로 구성됩니다.EPT PML4E
는 다음과 같이 정의된 물리 주소를 사용하여 선택됩니다.- (참고 : 링크)
- bits 63:52 는 모두 0입니다.
- bits 51:12 는
EPTP
에서 가져온 값 입니다. - bits 11:3 은 게스트 물리 주소의 bits 47:39 입니다.
- bits 2:0 은 모두 0입니다.
EPT PML4E
는 게스트 물리 주소의 bits 47:39를 사용하여 식별되므로 게스트 물리 주소 공간의 512-Gbyte 영역에 대한 액세스를 제어합니다. 아래는EPT PML4E
에 대한 포맷입니다. - 4-Kbyte 로 자연스럽게 정렬된
EPTP Table
은EPT PML4E
의 bits 51:12에 지정된 물리 주소에 위치합니다.EPTP Table
은 512개의 64bits 로 이루어진 엔트리(EPT PDPTE
)로 구성됩니다.EPT PDPTE
는 다음과 같이 정의된 물리 주소를 사용하여 선택됩니다.- bits 63:52 는 모두 0입니다.
- bits 51:12 는
EPT PML4E
에서 가져온 값 입니다. - bits 11:3은 게스트 물리 주소의 bits 38:30 입니다.
- bits 2:0 은 모두 0입니다.
EPT PDPTE
는 게스트 물리 주소의 bits 47:30 을 사용하여 식별되므로 게스트 물리 주소 공간의 1-GByte 영역에 대한 액세스를 제어합니다. EPT PDPTE
의 사용은 해당 엔트리에서 bit 7의 값에 의존합니다.
EPT PDPTE
의 bit 7이 1인 경우,EPT PDPTE
는1-GByte Page
를 매핑합니다. 최종적으로 물리 주소는 아래와 같이 계산됩니다.- bits 63:52 는 모두 0입니다.
- bits 51:30 은
EPT PDPTE
에서 가져온 값 입니다. - bits 29:0 은 원래 게스트 물리 주소에서 가져온 값입니다.
1-Gbyte 페이지를 매핑하는
EPT PDPTE
의 포맷은 아래와 같습니다.-
EPT PDPTE
의 bit 7이 0인 경우, 4-Kbyte 로 자연스럽게 정렬된EPT Page-Directory
는EPT PDPTE
의 bits 51:12 에 지정된 물리 주소에 위치합니다.EPT Page-Directory
를 참조하는EPT PDPTE
의 포맷은 아래와 같습니다.EPT Page-Directory
는 512개의 64bits 로 이루어진 엔트리(PDE
)로 구성됩니다.EPT PDE
는 다음과 같이 정의된 물리 주소를 사용하여 선택됩니다.- bits 63:52 는 모두 0입니다.
- bits 51:12 는
EPT PDPTE
에서 가져온 값 입니다. - bits 11:3 은 게스트 물리 주소의 bits 29:21 입니다.
- bits 2:0 은 모두 0입니다.
EPT PDE
는 게스트 물리 주소의 bits 47:21 을 사용하여 식별되기 때문에 게스트 물리 주소 공간의 2-Mbyte 영역에 대한 액세스를 제어합니다. EPT PDE
의 사용은 해당 엔트리에서 bit 7에 의존합니다.
EPT PDE
의 bit 7이 1이면EPT PDE
는 2-Mbyte 페이지를 매핑합니다. 최정적으로 물리 주소는 다음과 같이 계산됩니다.- bits 63:52 는 모두 0입니다.
- bits 51:21 은
EPT PDE
에서 가져온 값 입니다. - bits 20:0은 원래 게스트 물리 주소의 비트 입니다.
2-Mbyte 페이지를 매핑하는
EPT PDE
의 형식은 아래와 같습니다.-
EPT PDE
의 bit 7이 0인 경우, 4-Kbyte 로 자연스럽게 정렬된EPT Page Table
은EPT PDE
의 bits 51:12 에 지정된 물리 주소에 위치합니다.EPT Page Table
을 참조하는EPT PDE
의 형식은 아래와 같습니다.EPT Page Table
은 512개의 64bits로 이루어진 엔트리(PTE
)로 구성됩니다.EPT PTE
는 아래와 같이 정의된 물리 주소를 사용하여 선택됩니다.- bits 63:52 는 모두 0입니다.
- bits 51:12 는
EPT PDE
에서 가져온 값 입니다. - bits 11:3 은 게스트 물리 주소의 bits 20:12 입니다.
- bits 2:0 은 모두 0입니다.
EPT PTE
는 게스트 물리 주소의 bits 47:12 를 사용하여 식별되므로 모든EPT PTE
는 4-Kbyte 페이지로 매핑됩니다. 최종적으로 물리 주소는 다음과 같이 계산됩니다.- bits 63:52 는 모두 0입니다.
- bits 51:12 는
EPT PTE
에서 가져온 값 입니다. - bits 11:0 은 원래 게스트 물리 주소의 비트입니다.
EPT PTE
의 형식은 아래와 같습니다.
EPT Paging-Structure Entry
는 bits 2:0 중 하나가 1인 경우 존재(Present
)합니다. 그렇지 않으면 해당 엔트리는 존재하지 않습니다(Not Present
). 프로세서는 bits 62:3 을 무시하고 엔트리를 사용하여 다른 EPT Paging-Structure Entry
를 참조하거나 물리 주소를 생성하지 않습니다. EPT Paging-Structure
가 존재하지 않는 변환이 발생하는 게스트 물리 주소를 사용하는 참조는 EPT Violation
을 발생시킵니다.
위의 설명에서는 EPT Paging-Structure
가 서로를 참조하는 방법과 게스트 물리 주소를 변환할 때 논리 프로세서가 이러한 구조를 트레버스 하는 방법에 대해 설명했습니다.
변환 과정의 모든 세부 사항을 다루진 않았습니다. 추가 세부 정보는 아래와 같이 제공됩니다.
- 변환 프로세스가
VM Exit
로 이루어질 수 있는 상황 EPT
변환 메커니즘과 메모리 타이핑 간의 상호 작용
[-] EPT-Induced VM Exits
게스트 물리 주소를 사용하여 액세스하면 EPT Misconfiguration
, EPT Violation
, Page-Modification Log-Full Event
로 인해 VM Exit
가 발생할 수 있습니다.
EPT Misconfiguration
은 게스트 물리 주소를 변환하는 과정에서 논리 프로세서가 지원되지 않는 값을 포함하는EPT Paging-Structure Entry
를 발견하게 됐을 때 발생합니다.EPT Violation
은EPT
의 잘못된 구성은 없지만EPT Paging-Structure Entry
가 게스트 물리 주소를 사용한 액세스를 허용하지 않을 때 발생합니다.Page-Modification Log-Full Event
는 논리 프로세서가Page-Modification Log Entry
를 생성해야 함을 판단했으나 현재 로그가 가득 찼을 때 발생합니다.
위와 같은 이벤트는 게스트 물리 주소를 사용하여 메모리에 액세스하려는 시도로 인해 발생합니다. MOV to CR3
명령을 사용하여 게스트 물리 주소를 CR3
에 로드하면 해당 주소가 페이징 구조에 액세스하는 데 사용될 때 까지 EPT Violation
이나 EPT Misconfiguration
이 발생하지 않을 수 있습니다.
Second_EPT-violation #VE
제어가 1인 경우 특정 EPT Violation
으로 인해 VM Exit
대신 가상화된 예외가 발생할 수 있습니다.
[+] EPT Misconfigurations
게스트 물리 주소의 변환에서 다음 조건 중 하나를 충족하는 EPT Paging-Structure Entry
가 발생하면 EPT
의 구성이 잘못된 것 입니다.
- 엔트리의 bit 0이 지워진 경우와 다음 중 하나로 유지됩니다.
- bit 1 이 설정된 경우(데이터 쓰기가 허용됨을 나타냄)
- 프로세서는 실행
execute-only
변환을 지원하지 않으며 다음 중 하나가 유지됩니다.(VMM
은IA32_VMX_EPT_VPID_CAP
을 읽고execute-only
변환이 지원되는지에 대한 여부를 확인해야 합니다.)- bit 2 가 설정된 경우(명령어 페칭이 허용됨을 나타냄, 실행의 허용)
Second_mode-based execute control for EPT
제어가 1이고 bit 10이 1로 설정된 경우(유저모드 선형 주소에서의 실행이 허용됨을 나타냄)
Tertiary_EPT paging-write control
제어가 1이고 엔트리는 페이지를 매핑하며 bit 58이 1로 설정된 경우(페이징 쓰기가 허용됨을 나타냄)
- 엔트리가 존재하고 다음 중 하나로 유지됩니다.
- 예약된 비트가 1로 설정되었습니다. 여기에는 논리 프로세서의 물리 주소 너비를 벗어나는 bits 51:12 범위의 비트 설정이 포함됩니다.
- 해당 엔트리는 게스트 물리 주소(bit 7이 1으로 설정된
EPT PDE
또는EPT PTE
)를 변환하는 데 사용되는 마지막 엔트리이며 bits 5:3(EPT memory type
)의 값이 예약된 값 2, 3, 7 중 하나로 설정되었습니다.
[+] EPT Violation
EPT Violation
은 변환에서 EPT Misconfiguration
이 발생하지 않은 게스트 물리 주소를 사용하여 액세스하는 동안 발생할 수 있습니다.
아래의 설명에서 실행 방지의 경우, 명령어를 가져오지 못하는 경우를 의미합니다. 즉 명령어 페칭이 불가하기 때문에 실행이 불가하다는 의미로 이해하였습니다.
EPT Violation
은 아래의 경우에 발생합니다.
- 게스트 물리 주소의 변환에서 존재하지 않는
EPT Paging-Structure Entry
를 발견한 경우. EPT Paging-Structure Entry
에서 bit 0(read access
) 이 0으로 설정되어 있을 때Read
행위의 액세스가 발생한 경우.-
EPT Paging-Structure Entry
에서 bit 1(write access
) 이 0으로 설정되었 있을 때Write
행위의 액세스가 발생한 경우. 액세스 및Dirty Flag
를 업데이트하기 위한 쓰기 역시 데이터 쓰기로 간주됩니다.EPTP
의 bit 6(EPT
에 대한 액세스 및dirty flags
활성화 여부)이 1인 경우 게스트 페이징 엔트리에 대한 프로세서 액세스는EPT Violation
과 관련된 데이터 쓰기로 처리됩니다. 따라서 게스트Paging-Structure Entry
의 게스트 물리 주소를 변환하는 데 사용되는EPT Paging-Structure Entry
중 하나에서 bit 1 이 0으로 설정되면 해당 엔트리를 통해 선형 주소를 변환할 때EPT Violation
이 발생합니다.액세스 및
dirty flag
를 업데이트하기 위해 게스트 페이징 구조에 대한 프로세서 쓰기를paging write
라고 합니다.Tertiary_EPT paging-write control
제어가 1인 경우 페이지를 매핑하는EPT Paging-Structure Entry
에서write access
비트를 지우더라도 해당 항목의 bit 58(paging-write access
)가 1이면paging write
를 방지하지 않습니다.Second_sub-page write permission for EPT
제어가 1이면EPT Violation
을 유발할 수 있는 위와 같은 내용들의 경우에도 발생하지 않습니다. 게스트 물리 주소가 4-Kbyte 페이지를 사용하여 매핑되고 페이지 매핑에 사용되는EPT PTE
의 bit 61(sub-page write permissions
)이 1인 경우, 특정 128-bytesub-page
에 쓰기가 허용될 수 있습니다. EPT Paging-Structure Entry
에서 실행에 대한 액세스를 방지합니다. 이는Second_mode-based execute control for EPT
제어의 설정에 따라 다릅니다.- 해당 제어가 0이고,
EPT Paging-Structure Entry
에서 bit 2(execute access
)가 0일 때Execute
행위의 실행이 발생한 경우EPT Violation
이 발생합니다. - 해당 제어가 1인 경우 다음 중 아래의 경우 실행이 방지됩니다.
-
Paging
은 대상 바이트의 선형 주소를Supervisor-mode address
로 매핑하고EPT Paging-Structure Entry
의 bit 2(execute access for supervisor-mode linear addresses
)가 0인 경우선형 주소 변환을 제어하는
Paging-Structure Entry
중 하나에서 bit 2(U/S flag
)가 0이면 페이징은 선형 주소를Supervisor-mode address
로 매핑합니다. -
Paging
은 대상 바이트의 선형 주소를User-mode address
로 매핑하고EPT Paging-Structure Entry
의 bit 10(execute access for user-mode linear addresses
) 가 0인 경우선형 주소 변환을 제어하는
Paging-Structure Entry
에서 bit 2(U/S flag
)가 1이면 페이징은User-mode address
로 매핑합니다. 페이징이 비활성화되면(CR0.PG = 0
) 모든 선형 주소는User-mode address
입니다.
-
- 해당 제어가 0이고,
EPTP
의 bit 7(enable supervisor shadow-stack control
)이 1로 설정된 경우, 액세스는Supervisor Shadow-Stack Access
입니다. 아래 내용에 해당하는 경우EPT Paging-Structue Entry
에서 해당 액세스가 허용되지 않습니다.- bit 0(
read access
)가 0인 경우 - bit 1(
write access
)이 0인 경우 - bit 60(
supervisor-shadow stack access
)가 0인 경우
EPT Paging-Structure Entry
의 bit 60(supervisor-shadow stack access
)와EPTP
의 bit 7(enable supervisor shadow-stack control
)은 다른 액세스에는 영향을 주지 않습니다.- bit 0(
-
Tertiary_guest-paging verification
,Tertiary_EPT paging-write control
제어가 모두 1인 경우, 선형 주소 변환과 관련된 특정 액세스에 대해 게스트 페이징에 대한 검증이 수행됩니다.특히, 게스트 페이징 검증은 선형 주소에 대한 페이지를 매핑하는 게스트
Paging-Structure Entry
에 게스트 물리 주소를 사용하는 특정 액세스에 적용될 수 있습니다. 해당 게스트 물리 주소에 대한 페이지를 매핑하는EPT Paging-Structure Entry
의 bit 57(verify guest paging
)이 1으로 설정된 경우 적용됩니다.게스트 페이징 검증이 발생할 때 원래 선형 주소를 변환하는 중 사용된 게스트
Paging-Structure Entry
의EPT Paging-Structure Entry
내 bit 58(paging-write access
)가 0으로 설정된 경우EPT Violation
이 발생합니다.
[+] Prioritization of EPT Misconfiguration and EPT Violations
선형 주소를 물리 주소로 변환하려면 EPT
를 사용하여 게스트 물리 주소를 하나 이상 변환해야 합니다.
이 섹션에서는 선형 주소를 사용하여 메모리에 액세스할 때 발생할 수 있는 여러가지 이벤트에 대해 EPT
로 인한 VM Exit
가 발생하는 것의 상대적 우선 순위가 지정되는 내용에 대해 설명합니다.
게스트 물리 주소에 액세스하는 경우, EPT Misconfiguration
또는 EPT Violation
이 발생하는지 여부는 아래와 같은 반복 프로세스(Iterative Process
)를 기반으로 결정됩니다.
EPT Translation Mechanism
을 단순화 한 내용입니다. 1단계, 2단계 실행의 경우 해당 엔트리에서 최종 물리 주소가 결정나는지에 대한 단계입니다.EPT Paging-Structure Entry
를 읽습니다.(최초EPT PML4E
)- 엔트리가 존재하지 않으면
EPT Violation
이 발생합니다. - 엔트리가 존재하지만 내용이 제대로 구성되지 않은 경우
EPT Misconfiguration
이 발생합니다. - 엔트리가 존재하고 적절하게 구성된 경우, 엔트리는 다른
EPT Paging Structure
를 참조하는지에 대한 여부(bit 7이 1로 설정된EPT PDE
인지 또는EPT PTE
인지)에 따라 달라집니다.- 엔트리가 다른
EPT Paging Structure
를 참조하는 경우 해당 구조의 엔트리에 액세스합니다. 해당 엔트리에 대해 1단계가 실행됩니다. - 아닌 경우 최종 물리 주소(기존의 게스트 물리 주소 변환)를 생성하는 데 사용됩니다. 2단계가 실행됩니다.
- 엔트리가 다른
- 엔트리가 존재하지 않으면
- 최종 물리 주소가 결정되면
EPT Paging-Structure Entry
에 의해 결정된 권한이 평가됩니다.- 게스트 물리 주소에 대한 액세스가 허용되지 않은 경우
EPT Violation
이 발생합니다. - 게스트 물리 주소에 대한 액세스가 허용되는 경우 최종 물리 주소를 이용하여 메모리에 액세스합니다.
- 게스트 물리 주소에 대한 액세스가 허용되지 않은 경우
CR0.PG = 1
인 경우, 선형 주소 변환도 반복 프로세스입니다. 각 게스트의 물리 주소는 자체적으로 EPT
를 사용하여 변환되며 EPT
로 인해 VM Exit
가 발생할 수 있습니다.(EPT-induced VM Exit
)
다음 내용에서는 이러한 반복 프로세스 중에 Page-Fault
및 EPT-induced VM Exit
를 인식하는 방법에 대해 자세히 설명합니다.
- 게스트 물리 주소(최초
CR3
의 주소)를 이용하여 게스트Paging-Structure Entry
에 액세스하려고 시도합니다.EPT Misconfiguration
또는EPT Violation
이 발생하여 액세스가 실패하면EPT-induced VM Exit
가 발생합니다.- 액세스로 인해
EPT-induced VM Exit
가 발생하지 않으면 변환이 계속됩니다. 게스트 페이징 검증(guest-paging verification
)이 활성화된 경우 프로세서는EPT Paging-Structure Entry
이 게스트 물리 주소에 대한 페이지를 매핑하는데 bit 58(paging write
)가 설정되었는지에 대한 여부를 기록합니다. 그런 다음 게스트Paging-Structure Entry
의 bit 0(the present flag
)을 참조합니다.- bit 0(
the present flag
)가 0이거나 예약된 비트가 설정된 경우Page Fault
가 발생합니다. - bit 0이 1이면 예약된 비트가 설정되지 않고 엔트리가 다른 게스트
Paging-Structure
를 참조하는지 여부(PS = 1
인 게스트PDE
또는 게스트PTE
)에 따라 달라집니다.- 엔트리가 다른 게스트
Paging-Structure
를 참조하는 경우 해당 구조의 엔트리에 액세스합니다. 해당 엔트리에 대해 1단계가 실행됩니다. - 그렇지 않으면 엔트리는 최종 게스트 물리 주소(기존 선형 주소의 변환)을 생성하는 데 사용합니다. 2단계가 실행됩니다.
- 엔트리가 다른 게스트
- bit 0(
- 최종 게스트 물리 주소가 결정되면 게스트
Paging-Structure Entry
에 의해 결정된 권한이 평가됩니다.- 해당 권한으로 인해 선형 주소에 대해 액세스가 허용되지 않는 경우
Page Fault
가 발생합니다. - 선형 주소에 대해 액세스가 허용되면 최종 게스트 물리 주소에서 메모리에 액세스를 시도합니다.
EPT Misconfiguration
또는EPT Violation
으로 인해 액세스가 실패하면EPT-induced VM Exit
가 발생합니다. 이 시점에 위의 1.b에 작성된paging-wrtie
비트를 이용하여 게스트 페이징 검증이 발생합니다.- 오류가 발생하지 않으면 최종 물리 주소(
EPT
를 사용하여 최종 게스트 물리 주소로 변환 된)를 사용하여 메모리에 액세스합니다.
- 해당 권한으로 인해 선형 주소에 대해 액세스가 허용되지 않는 경우
CR0.PG = 0
인 경우 선형 주소는 게스트 물리 주소로 처리되고 EPT
를 사용하여 변환됩니다. 이 프로세스가 EPT Violation
이나 EPT Misconfiguration
이 발생하지 않으면 물리 주소를 생성하고 EPT Paging-Structure Entry
가 허용하는 권한을 결정합니다.
이러한 권한이 물리 주소에 대한 액세스를 허용하지 않으면 EPT Violation
이 발생하고, 그렇지 않으면 물리 주소를 이용하여 메모리에 액세스하게 됩니다.
[-] Sub-Page Write Permissions
위에서 EPT
가 EPT Violation
을 이용하여 게스트 물리 주소에 대한 액세스 권한을 적용하는 방법에 대해 설명했습니다.
이러한 액세스 권한은 게스트 물리 주소를 변환하는 데 사용되는 EPT Paging-Structure Entry
를 이용하여 결정되기 때문에 세부 수준은 페이지를 매핑하는 데 사용되는 것으로 제한됩니다.(1-GByte, 2-MByte, 4-KByte)
Sub-Page Write Permission
기능을 사용하면 게스트 물리 주소에 대한 Write
액세스를 좀 더 세밀하게 제어할 수 있습니다. 또한 자연스럽게 정렬된 128 바이트 단위의 Sub-Page
로 Write
액세스를 제어할 수 있습니다.
특히 이 기능을 사용하면 Write
가 불가능한 4-KByte의 Selected Sub-Page
에 쓰기가 가능합니다.
Second_sub-page write permissions for EPT
제어가 1인 경우 Sub-Page Write Permission
이 활성화됩니다.
[+] Write Accesses That Are Eligible for Sub-Page Write Permissions
게스트 물리 주소는 EPT Paging-Structure Entry
내 bit 1(write access
)이 0으로 설정되어 write
액세스가 허용되지 않는 경우 sub-page write permission
에 적합(Eligible
)합니다.
위의 내용과 다른 이유로 허용되지 않는 경우(ex. 변환 중 존재하지 않는 EPT Paging-Structure Entry
를 발견), sub-page write permission
에 부적합 합니다.
또한 게스트 물리 주소는 4-Kbyte 페이지를 사용하여 매핑되고 페이지 매핑에 사용되는 EPT PTE
의 bit 61(sub-page write permissions
)이 1인 경우에만 사용할 수 있습니다.(더 큰 페이지에 매핑된 게스트 물리 주소는 적합하지 않습니다.)
일부 메모리 액세스의 경우 프로세서는 EPT PTE
의 bit 61의 설정 여부와 관계없이 sub-page write permission
을 적용하지 않습니다. 이러한 경우는 아래와 같습니다.
- 트랜잭션 영역 내에서 수행되는
write
액세스 Enclave
의ELRANGE
내의 주소에 대한write
액세스Intel SGX
명령어에 의한EPC(Enclave Page Cache)
에 대한write
액세스accessed flag
또는dirty flag
를 업데이트하는 게스트Paging-Structure Entry
에 대한write
액세스- 액세스 시 게스트
Paging-Structure Entry
에 대한 프로세서 액세스 및EPT
에 대한dirty flag
가 활성화 된 경우 - 두 개의 4-KByte 페이지를 가로지르는
write
액세스, 이 경우 둘 다 적용되지 않거나 하나의 페이지에만 적용될 수 있습니다.(가로지른다는 표현은 연속되는 페이지를 의미하는 것인지 동시성을 의미하는지 의문입니다.) - 다중
write
액세스를 수행하는 명령에 의한 쓰기(sub-page write permission
은 주로AND, MOV, OR, TEST, XCHG, XOR
와 같은 기본 명령을 위한 것 입니다.)
게스트 물리 주소가 Sub-Page Write Permission
에 적합한 경우 아래에서 설명하게 될 프로세스를 통해 주소에 대한 write
를 허용할지 여부를 결정합니다.
[+] Determining and Access’s Sub-Page Write Permission
Sub-Page Write Permission
은 4-KByte 의 128-Byte Sub-Page
(이하 “하위 페이지”) 32개에 대해 각각 write
액세스를 개별적으로 제어합니다. 게스트 물리 주소의 bits 11:7 은 하위 페이지를 식별합니다.
sub-page write permission
에 적합한 각 게스트 물리 주소에는 64bit의 Sub-Page Permission Vector(SPP Vector)
가 있습니다. 4-KByte 페이지의 모든 주소는 동일한 SPP Vector
를 사용합니다.
주소의 하위 페이지 번호(bits 11:7)가 S인 경우, Sub-Page Write Permission
의 비트 2S가 1로 설정된 경우에만 쓰기가 허용됩니다.(SPP
에서 홀수 위치에 있는 비트는 사용되지 않으며 0이어야 합니다.)
각 페이지의 SPP Vector
는 메모리에 위치합니다. Sub-Page Write Permission
에 적합한 게스트 물리 주소에 대해 write
액세스인 경우 프로세서는 다음 프로세스를 통해 주소의 SPP Vector
를 찾습니다.
VM-execution control field
내SPPTP(Sub-Page-Permission-Table-Pointer)
는 4-KByte 의SPP Table(SPPL4 table)
의 물리 주소를 포함합니다. 게스트 물리 주소의 bits 47:39는SPPL4E
라고 하는 해당 테이블의 64bit 크기의 엔트리를 식별합니다.- 4-KByte
SPPL3 table
은 선택한SPPL4E
의 물리 주소에 위치합니다. 게스트 물리 주소의 bits 38:30 은SPPL3E
라고 하는 해당 테이블의 64bit 크기의 엔트리를 식별합니다. - 4-KByte
SPPL2 table
은 선택한SPPL3E
의 물리 주소에 위치합니다. 게스트 물리 주소의 bits 29:21은SPPL2E
라고 하는 해당 테이블의 64bit 크기의 엔트리를 식별합니다. - 4-KByte
SPP-vector table, SPPL1 table
은 선택한SPPL2E
의 물리 주소에 위치합니다. 게스트 물리 주소의 bits 20:12는 64 bit 크기의SPP Vector
를 식별합니다. 벡터의 bit 2S는 주소가 기록될 수 있는지 여부를 결정합니다.
단일 4-KByte 페이지의 여러 128-Byte 하위 페이지에 대한 write
액세스는 각 하위 페이지의 SPP Vector
가 표시된 비트가 1로 설정된 경우에만 허용됩니다.
다음 내용은 2개의 4-KByte 페이지에 쓰는 경우에 적용됩니다.
- 두 페이지 모두
write
가 허용되지 않을 경우, 해당 페이지의 게스트 물리 주소가Sub-Page Write Permission
에 적합하더라도 액세스가 허용되지 않을 수 있습니다.
각 엔트리(SPPL4E, SPPL3E, SPPL2E
)의 bit 0 은 Valid
를 의미합니다. 위의 프로세스에서 bit 0인 엔트리에 액세스하면 중지되고 논리 프로세서에서 SPP Miss
가 발생합니다.
각 엔트리(SPPL4E, SPPL3E, SPPL2E
)의 bits 11:1, bits 63:N 은 예약된 비트입니다. 위의 프로세스에서 bit 0(Valid
)가 1이고 일부 예약 비트가 설정된 엔트리에 액세스하면 프로세스가 중지되고 논리 프로세서에서 SPP Misconfiguration
이 발생합니다.
이렇게 발생한 SPP Miss
, SPP Misconfiguration
은 SPP-related events
라고 부르며, VM Exit
가 발생합니다.
[-] Accessed and Dirty Flags for EPT
Intel 64
아키텍처는 일반적인 Paging-Structure Entry
에서 Accessed
, Dirty flag
를 지원합니다. 일부 프로세서는 EPT Paging-Structure Entry
에서 동일한 플래그가 지원됩니다. VMM
은 프로세서가 이 기능을 지원하는지에 대한 여부를 결정하기 위해 MSR IA32_VMX_EPT_VPID_CAP
을 읽어 참조해야 합니다.
VMM
은 VM-exeucution control field
내 EPTP(Extended-Page-Table-Pointer)
의 bit 6을 이용하여 EPT
에 대한 accessed
, dirty flag
를 활성화할 수 있습니다. 이 비트가 1이면 프로세서는 아래 설명된대로 EPT
에 대한 accessed and dirty flag
를 설정합니다.
또한 이 플래그를 설정하면 게스트 Paging-Structure Entry
에 대한 프로세서 액세스가 write
로 처리됩니다.
게스트 물리 주소 변환 중에 사용되는 모든 EPT Paging-Structure Entry
의 경우 bit 8이 Accessed Flag
입니다. 페이지를 매핑하는 EPT Paging-Structure Entry
의 경우(구조를 참조하는 것 외에) bit 9는 Dirty Flag
입니다.
프로세서는 게스트 물리 주소 변환의 일부로 EPT Paging-Structure Entry
를 사용할 때 마다 해당 엔트리에 accessed flag
를 설정합니다.(설정되지 않은 경우)
게스트 물리 주소에 write
가 발생할 때 마다 프로세서는 게스트 물리 주소에 대한 최종 물리 주소(EPT PTE
또는 bit 7이 1인 EPT Paging-Structure Entry
)를 식별하는 EPT Paging-Structure Entry
에 Dirty Flag
를 설정합니다.(설정되지 않은 경우)
EPT
에 대한 Accessed, Dirty Flag
가 활성화된 경우 게스트 Paging-Structure Entry
에 대한 프로세서 액세스가 쓰기로 처리됩니다. 따라서 이러한 액세스는 프로세서가 게스트 Paging-Structure Entry
의 최종 물리 주소를 식별하는 EPT Paging-Structure Entry
의 Dirty Flag
를 설정하게 합니다.
이러한 플래그는 고정(”Sticky”)되어 있으며, 이는 일단 설정되면 프로세서가 플래그를 지우지 않음을 의미합니다. VMM
만이 이를 지울 수 있습니다.
프로세서는 EPT Paging-Structure Entry
의 정보를 TLB
및 Paging-Structure Cache
에 캐시할 수 있습니다. 이 의미는 VMM
이 Accessed
또는 Dirty flag
를 1에서 0으로 변경할 경우 프로세서가 영향을 받는 게스트 물리 주소를 사용하여 후속 액세스에서 메모리에 해당 비트를 설정하지 않을 수 있음을 의미합니다.
[-] Page-Modification Logging
참고 : 링크
EPT
에 대한 Accessed, Dirty Flag
가 활성화되면 VMM
은 Page-Modification Logging, PML
이라는 기능을 이용하여 게스트 물리 주소에 대한 Write
를 추적할 수 있습니다.
VMM
은 VM-execution control
내 enable PML
제어를 1으로 설정함으로써 page-modification logging
을 활성화할 수 있습니다. 활성화되면 프로세서는 아래에 설명된 대로 page-modificaiton log
에 엔트리를 추가합니다.
page-modification log
는 VM-execution control field
내 PML address
의 물리 주소에 위치한 4-KByte 메모리 영역입니다.
Page-Modificaiton Log
는 64bit 로 이루어진 엔트리 512개로 구성되어 있습니다. VM-execution control field
내 PML index
는 사용할 다음 엔트리를 나타냅니다.
게스트 물리 액세스를 허용하기 전에 프로세서는 EPT
에 대한 accessed, dirty flag
를 설정해야 하는지 결정할 수 있습니다. 이 경우 프로세서는 PML Index
를 검사합니다.
PML Index
가 0-511 범위에 있지 않으면 Page-Modification Log-Full Event
가 발생하고 VM Exit
가 발생합니다.
범위 안에 있는 경우 프로세서는 EPT
에 대한 accessed, dirty flag
를 업데이트 합니다. 프로세서가 EPT
에 대해 dirty flag
를 업데이트 한 경우(0→1) 다음과 같이 동작합니다.
- 액세스 게스트 물리 주소는
page-modification log
에 기록됩니다. 구체적으로 게스트 물리 주소는PML Address
에PML Index
의 8배를 추가하여 결정된 물리 주소에 기록됩니다. 기록된 값의 bits 11:0은 항상 0 입니다. PML Index
는 1씩 감소합니다. 이로 인해 값이 0에서 FFFFh 로 전환될 수 있습니다.
만일 감소하다 FFFFh가 되는 경우 프로세서는 PML Index
값이 0-511 범위에 있지 않다고 판단하여 Page-Modification Log-Full Event
를 생성하며 이 시점에서 더 이상의 로깅은 발생하지 않습니다.
[-] EPT and Memory Typing
논리 프로세서에서 EPT
가 사용되는 동안 메모리 액세스에 대한 메모리 유형 사용을 결정하는 방법을 설명합니다.
[+] Memory Type Used for Accessing EPT Paging Structures
EPT Paging-Structure
에 대한 액세스를 위해 메모리 유형이 어떻게 결정되는지 설명합니다. 결정은 먼저 CR0
의 bit 30(cache disable-CD
) 값을 기반으로 합니다.
CR0.CD = 0
인 경우 이러한 참조에 사용되는 메모리 유형은VM-execution control field
내EPTP
의 bits 2:0 에 의해 지정됩니다. 값이 0이면uncacheable type(UC)
이고 6이면write-back type(WB)
를 나타냅니다.CR0.CD = 1
인 경우 이러한 참조에 사용되는 메모리 유형은uncacheable type(UC)
입니다.
[+] Memory Type Used for Translated Guest-Physical Addresses
게스트 물리 주소를 이용하는 메모리 액세스의 Effective Memory Type
(EPT
를 이용하여 변환된 액세스)은 메모리에 액세스하는 데 사용되는 메모리 유형입니다.(이하 “유효 메모리 유형”)
유효 메모리 유형은 CR0.CD
의 값 또는 게스트 물리 주소를 변환하는 데 사용되는 마지막 EPT Paging-Structure Entry
및 PAT
메모리 유형을 기반으로 합니다.
PAT Memory Type
은CR0.PG
값에 따라 다릅니다.CR0.PG = 0
이면PAT Memory Type
은WB
입니다.CR0.PG = 1
이면PAT Memory Type
은IA32_PAT MSR
에 의해 선택된 메모리 유형입니다.
EPT Memory Type
은 마지막EPT Paging-Structure Entry
의 bits 5:3 에 지정됩니다.- 0 = UC, 1= WC, 4 = WT, 5 = WP, 6 = WB 를 의미하며 다른 값은 예약되어 있으며 설정되는 경우
EPT Misconfiguration
이 발생합니다.
- 0 = UC, 1= WC, 4 = WT, 5 = WP, 6 = WB 를 의미하며 다른 값은 예약되어 있으며 설정되는 경우
CR0.CD = 0
이면 유효 메모리 유형은 마지막EPT Paging-Structure Entry
의 bit 6에 따라 다릅니다.-
값이 0이면 유효 메모리 유형은
MTRR Memory Type
대신EPT Memory Type
을 이용하여 지정된EPT Memory Type
과PAT Memory Type
의 조합입니다. -
값이 1이면 유효 메모리 유형은
EPT Memory Type
입니다.PAT Memory Type
은 무시됩니다.
-
CR0.CD = 1
인 경우 유효 메모리 유형은uncacheable(UC)
입니다.
MTRR
은 게스트 물리 주소에 액세스하는 데 사용되는 메모리 유형에 영향을 주지 않습니다.
[0x04] Caching Translation Information
메모리 구조의 프로세서 데이터를 캐싱하여 주소 변환 프로세스를 가속화할 수 있습니다. 이러한 캐싱은 추후에 설명하게 될 기본적인 페이징에 대한 내용을 다룰 때 상세하게 다룰 예정입니다.
현재 파트에서는 이 캐싱이 VMX
아키텍처와 상호작용하는 방식을 설명합니다.
VMX Operation
을 위한 아키텍처의 VPID, EPT
기능은 이 캐싱 아키텍처를 확장합니다. EPT
는 게스트 물리 주소 공간을 정의하고 선형 주소 공간과 물리 주소 공간으로의 변환을 정의합니다.
두 기능 모두 논리 프로세서가 페이징 구조에 캐시된 정보를 만들고 사용할 수 있는 방법을 제어합니다.
[-] Information That May Be Cached
추후에 게시 될 페이징과 관련된 내용 중 Caching Translation Information
은 논리 프로세서에 의해 캐싱될 수 있는 두 종류의 변환 관련 정보를 식별합니다.
Linear Page Number
에서 Physical Page Frame
으로 매핑하는 Translation
과 Linear Page Number
의 상위 비트를 해당 상위 비트와 일치하는 선형 주소를 변환하는 데 사용되는 Paging-Structure Entry
에 매핑하는 Paging-Structure Cache
입니다.
VPID
및 EPT
가 사용 중일 때 동일한 종류의 정보가 캐시될 수 있습니다. 논리 프로세서는 기능에 따라 이러한 정보를 캐싱하고 사용할 수 있습니다. 기능이 다른 정보는 아래와 같이 식별됩니다.
Linear Mapggins
의 경우 두 종류가 있습니다.Linear Translation
, 이들 각각은 액세스 권한 및 메모리 유형에 대한 정보와 함께Linear Page Number
에서 변환되는Physical Page Frame
으로의 매핑입니다.Linear Paging-Structure-Cache Entries
, 이들 각각은 액세스 권한에 대한 정보와 함께 선형 주소의 해당 영역을 변환하는 데 사용되는 페이징 구조의 물리 주소에 대해 선형 주소의 상위 부분에서 매핑됩니다. 예를 들어 선형 주소의 bits 47:39 는 관련Page-Directory-Pointer Table
주소에 매핑됩니다.
선형 매핑에는
EPT Paging-Structure
의 정보가 포함되어 있지 않습니다.Guest-Physical Mapping
의 경우 두 종류가 있습니다.Guest-Physical Translation
, 이들 각각은 액세스 권한 및 메모리 유형에 대한 정보와 함께Guest-Physical Page Number
에서 변환되는Physical Page Frame
으로의 매핑입니다.Guest-Physical Paging-Structure-Cache Entries
, 이들 각각은 액세스 권한에 대한 정보와 함께Guest-Physical Address
의 해당 영역을 변환하는 데 사용되는EPT Paging-Structure
의 물리 주소로의 매핑입니다.
액세스 권한 및 메모리 유형에 대한 게스트 물리 매핑 정보는
EPT Paging-Structure
에서 파생됩니다.Combined Mappings
의 경우 두 가지 종류가 있습니다.Combined Translation
, 이들 각각은 액세스 권한 및 메모리 유형에 대한 정보와 함께Linear Page Number
에서 변환되는Physical Page Frame
으로의 매핑입니다.Combined Paging-Structure Cache Entries
, 이들 각각은 액세스 권한에 대한 정보와 함께 선형 주소의 해당 영역을 변환하는 데 사용되는 페이징 구조의 물리 주소에 대해 선형 주소의 상위 부분에서 매핑됩니다.
액세스 권한 및 메모리 유형에 대한 결합(
combined
)된 매핑의 정보는 게스트 페이징 구조와EPT
페이징 구조 모두에서 파생됩니다.
[-] Creating And Using Cached Translation Information
- 아래 내용은
EPT
가 사용되지 않는 동안 매핑 생성에 대한 설명입니다.(VMX non-root operation
제외 포함)Linear Mapping
을 생성할 수 있습니다.CR3
의 현재 값에 의해 참조되는(직,간접적으로) 페이징 구조에서 파생되며 현재VPID
및 현재PCID
와 연결됩니다.- 존재하지 않거나(bit 0 = 0) 예약된 비트를 설정하는
Paging-Structure Entry
에서 파생된 정보는Linear Mapping
이 생성되지 않습니다. 예를 들어PTE
가 없으면 변환에서 해당PTE
를 사용하는 모든Linear Page Number
에 대해Linear Mapping
이 생성되지 않습니다. EPT
를 사용하지 않는 동안에는Guest-Physical Mapping
,Combined Mapping
이 생성되지 않습니다.
- 아래 내용은
EPT
를 사용하는 동안 매핑 생성에 대한 설명입니다.-
Guest-Physical Mapping
을 생성할 수 있습니다. 현재EPTP
의 bits 51:12 에 의해 참조되는(직,간접적으로)EPT
페이징 구조에서 파생됩니다. 이 40 bits 에는EPT-PML4-Table
이 포함됩니다.(EP4TA
는 해당 40 비트를 나타냄)새로 생성된
Guest-Physical Mapping
은 현재EP4TA
와 연결됩니다. Combined Mapping
을 생성할 수 있습니다. 현재EP4TA
에 의해 참조되는(직접적으로)EPT
페이징 구조에서 파생됩니다.CR0.PG = 1
이면CR3
의 현재 값에 의해 참조되는(직,간접적으로) 페이징 구조에서도 파생됩니다. 현재VPID
, 현재PCID
, 현재EP4TA
와 연결됩니다.CR0.PG = 0
인 경우Combined Paging-Structure Cache Enries
가 생성되지 않습니다.- 존재하지 않거나 잘못 구성된
EPT Paging-Structure Entry
에서 파생된 정보로Guest-Physical Mapping
또는Combined Mapping
이 생성되지 않습니다. - 존재하지 않거나 예약된 비트를 설정하는 게스트
Paging-Structure Entry
에서 파생된 정보로Combined Mapping
이 생성되지 않습니다. EPT
를 사용하는 동안Linear Mapping
은 생성되지 않습니다.
-
다음 내용은 다양한 매핑의 사용에 대해 자세히 설명합니다.
EPT
가 사용되지 않는 경우(ex.VMX non-root operation
이 아닌 경우) 논리 프로세서는 다음과 같이 캐시된 매핑을 사용할 수 있습니다.- 선형 주소를 사용하는 액세스의 경우 현재
VPID
, 현재PCID
와 연관된Linear Mapping
을 사용할 수 있습니다. 또한 현재VPID, PCID
와 연관된 전역TLB Entry
를 사용할 수 있습니다. EPT
가 사용되지 않는 동안Guest-Physical, Combined Mapping
은 사용할 수 없습니다.
- 선형 주소를 사용하는 액세스의 경우 현재
EPT
가 사용되는 경우 다음과 같이 캐시된 매핑을 사용할 수 있습니다.- 선형 주소를 사용하는 액세스의 경우 현재
VPID, PCID, EP4TA
와 연관된Combined Mapping
을 사용할 수 있습니다. 또한 현재VPID, EP4TA
와 모든PCID
와 연관된 전역TLB Entry
를 사용할 수 있습니다. - 게스트 물리 주소를 사용하는 액세스의 경우 현재
EP4TA
와 연결된Guest-Physical Mapping
을 사용할 수 있습니다. EPT
가 사용되는 동안Linear Mapping
은 사용할 수 없습니다.
- 선형 주소를 사용하는 액세스의 경우 현재
[-] Invalidating Cached Translation Information
페이징 구조(EPT Paging-Structure
, SPP Vector
를 찾는 데 사용되는 데이터 구조 포함)의 수정으로 인한 해당 구조와 논리 프로세서에 의해 캐시된 매핑 간 불일치가 발생할 수 있습니다.
특정 작업은 논리 프로세서에 의해 캐시된 정보를 무효화하고 이러한 불일치를 제거하는 데 사용할 수 있습니다.
[+] Operations that Invalidate Cached Mappings
아래와 같은 행위가 발생하는 경우 캐시된 매핑을 무효화합니다.
-
VMX Operation
과 독립적TLB
또는Paging-Structure Cache
를 구조적으로 무효화하는 작업(ex.INVLPG, INVPCID
명령)은LInear Mapping
및Combined Mapping
을 무효화합니다.현재
VPID
에 대해서만 수행해야 합니다.(단,Combined Mapping
의 경우 모든EP4TA
에 대해 수행) 현재VPID
에 대한Linear Mapping
은EPT
가 사용 중인 경우에도 무효화됩니다.EPT
를 사용하지 않는 경우에도 현재VPID
에 대한Combined Mapping
이 무효화 됩니다. EPT Violation
은 발생시킨 게스트 물리 주소를 변환하는 데 사용되는 모든Guest-Physical Mapping
(현재EP4TA
와 연관된)을 무효화합니다. 해당 게스트 물리 주소가 선형 주소의 변환인 경우EPT Violation
은 현재PCID, VPID, EP4TA
와 연결된 해당 선형 주소에 대한Combined Mapping
도 무효화 합니다.VM-execution control
내enable VPID
제어가 0인 경우,VM Entry
,VM Exit
는VPID = 0000h
(모든PCID
)와 관련된Linear Mapping
,Combined Mapping
을 무효화 합니다.VPID 0000h
에 대한Combined Mapping
은 모든EP4TA
에 대해 무효화 합니다.INVVPID
명령을 실행하면Linear Mapping
,Combined Mapping
이 무효화 됩니다. 무효화는INVVPID Type, Descriptor
라고 하는 명령어의 피연산자를 기반으로 합니다. 4개의INVVPID Type
이 현재 정의되어 있습니다.Individual-Address
:INVVPID Type
이 0인 경우 논리 프로세서는INVVPID Descriptor
에 지정된VPID
와 연관되고 선형 주소를 변환하는 데 사용되는Linear Mapping
,Combined Mapping
을 무효화합니다.Single-Context
:INVVPID Type
이 1인 경우 논리 프로세서는INVVPID Descriptor
에 지정된VPID
와 연관된 모든Linear, Combined Mapping
을 무효화합니다.All-Context
:INVVPID Type
이 2인 경우 논리 프로세서는VPID 0000h
, 모든PCID
를 제외하고 모든VPID
와 연관된Linear, Combined Mapping
을 무효화합니다.Single-Context-Retaining-Globals
:INVVPID Type
이 3인 경우 논리 프로세서는INVVPID Descriptor
에 지정된VPID
와 연관된Linear, Combined Mapping
을 무효화 합니다.
INVEPT
명령을 실행하면Guest-Physical, Combined Mapping
이 무효화 됩니다. 무효화는INVEPT Type, Descriptor
라고 하는 명령어의 피연산자를 기반으로 합니다. 두 가지의 유형이 정의되어 있습니다.Single-Context
:INVEPT Type
이 1이면 논리 프로세서는INVEPT Descriptor
에 지정된EP4TA
와 연관된 모든Guest-Physical, Combined Mapping
을 무효화 합니다.All-Context
:INVEPT Type
이 2이면 논리 프로세서는INVEPT Descriptor
에 지정된 모든EP4TA
와 연관된Guest-Physical, Combined Mapping
을 무효화합니다.
[+] Operations that Need Not Invalidate Cached Mappings
다음 항목에서는 캐시된 특정 매핑을 무효화하는데 필요하지 않은 작업에 대해 설명합니다.
VMX Operation
과 무관하게TLB
또는Paging-Structure Cache Entries
를 구조적으로 무효화하는 작업은Guest-Physical Mapping
을 무효화하는 데 필요하지 않습니다.INVVPID
명령은Guest-Physical Mapping
을 무효화하는 데 필요하지 않습니다.INVEPT
명령은Linear Mapping
을 무효화하는 데 필요하지 않습니다.Guest-Physical Mapping
을 무효화하기 위해VMX Transition
이 필요하지 않습니다.VM-execution control
내enable VPID
제어가 1이면Linear, Combined Mapping
을 무효화하기 위해VMX Transition
이 필요하지 않습니다.Linear, Guest-Physical, Combined Mapping
을 무효화하는 데VMXON, VMXOFF
명령이 필요하지 않습니다.
논리 프로세서는 언제든지 캐시된 매핑을 무효화할 수 있습니다. 이러한 이유로 위에서 식별된 작업은 반드시 필요하지 않음에도 지정된 매핑을 무효화할 수 있습니다.
[+] Guidelines for Use of the INVVPID Instruction
VMM
이 INVVPID
명령어를 사용해야 하는지 여부는 해당 VMM
이 메모리를 가상화하는 방법에 따라 다릅니다.
EPT
를 사용하지 않는 경우 VMM
이 게스트 페이징 구조를 가상화 중일 수 있습니다. 이러한 VMM
은 TLB
및 Paging-Structure Cache Entries
를 무효화하는 모든 작업 또는 일부 작업이 VM Exit
를 발생하도록 VMCS
를 구성할 수 있습니다.
VMM
이 이러한 작업을 에뮬레이트하는 경우 INVVPID
명령을 사용하여 논리 프로세서의 TLB
및 Paging-Structure Cache
가 적절하게 무효화되었는지 확인해야 할 수 있습니다.
VMM
이 INVVPID
명령을 사용해야 하는 경우에 대한 요구 사항은 Page-Table Virtualization
에 사용되는 특정 알고리즘에 따라 다릅니다.
INVLPG
명령어를 에뮬레이션하려면 다음과 같이INVVPID
명령을 실행해야 할 수 있습니다.INVVPID Type
은 0이어야 합니다.(Individual-Address
)INVVPID Descriptor
의VPID
는 실행이 에뮬레이트되는 가상 프로세서에 할당된 것이어야 합니다.INVVPID Descriptor
의 선형 주소는 에뮬레이트되는INVLPG
명령의 피연산자 주소입니다.
- 일부 명령은 전역 변환을 제외하고
TLB
및Paging-Structure Cache
의 모든 엔트리를 무효화합니다.MOV to CR3
를 예로 들 수 있습니다.INVVPID Type
은 3이어야 합니다.(Single-Context-Retaining-Globals
)INVVPID Decriptor
의VPID
는 실행이 에뮬레이트되는 가상 프로세서에 할당된 것이어야 합니다.
- 일부 명령은 전역 변환을 포함하여
TLB
및Paging-Structure Cache
의 모든 엔트리를 무효화합니다.CR4.PGE
의 값을 변경하게 하는MOV to CR4
가 이러한 예시 입니다.INVVPID Type
은 1이어야 합니다.(Single-Context
)INVVPID Descriptor
의VPID
는 실행이 에뮬레이트되는 가상 프로세서에 할당된 것이어야 합니다.
EPT
를 사용하지 않는 경우 논리 프로세서는 생성하는 모든 매핑을 현재 VPID
와 연결하고 이러한 매핑을 사용하여 선형 주소를 변환합니다. 따라서 VMM
은 다른 페이지 테이블을 사용하는 다른 non-EPT
게스트에 대해 동일한 VPID
를 사용하면 안됩니다. 이렇게 되면 한 게스트가 다른 게스트와 연관된 변환을 사용하게 될 수 있습니다.
EPT
가 사용 중인 경우 위에 열거된 지침으로 인해 VM Exit
발생하지 않도록 VMCS
를 구성할 수 있으며, VMM
이를 에뮬레이트하지 않을 수 있습니다. 이 경우 게스트 소프트웨어에 의한 명령 실행은 TLB
및 Paging-Structure Cache
의 필수 항목을 적절하게 무효화합니다. INVVPID
명령이 필요하지 않습니다.
EPT
가 사용 중인 경우 논리 프로세서는 생성하는 모든 매핑을 현재 EPTP
의 bits 51:12 값과 연결합니다. VMM
이 게스트 마다 다른 EPTP
를 사용하는 경우 동일한 VPID
를 사용할 수 있습니다.
[+] Guidelines for Use of the INVEPT Instruction
아래에서는 INVEPT
명령을 이용하여 EPT
페이징 구조에서 캐시된 정보를 무효화하기 위한 지침을 제공합니다.
VMM
은EPT Paging-Structure Entry
를 다음과 같이 변경한 후INVEPT Type
을Single-Context
로 하여INVEPT
명령을 사용해야 합니다.(INVEPT Descriptor
에는 수정된EPT Paging-Structure
를 직접 또는 간접적으로 참조하는EPTP
값이 포함되어야 합니다.)Privilege
bits 2:0 을 1에서 0으로 변경- 물리 주소의 bits 51:12 를 변경
Accessed, Dirty Flag
가 활성화 된 경우 bit 8(accessed flag
) 를 지워야함EPT PDPTE
또는EPT PDE
의 경우 bit 7 변경(엔트리가 페이지를 매핑하는지 여부를 결정하는 비트)- 게스트 물리 주소(bit 7이 1로 설정된
EPT PDPTE, PDE, PTE
)를 변환하는 데 사용되는 마지막EPT Paging-Structure Entry
의 경우 bits 5:3 또는 bit 6을 변경합니다. - 게스트 물리 주소(위와 동일)를 변환하는 데 사용되는 마지막
EPT Paging-Structure Entry
의 경우 bit 9(dirty flag
)가 활성화되어 있으면 지워야 합니다.
[0x05] Conclusion
드디어 Intel SDM
에 있는 VMM
과 연관된 목표한 부분을 끝냈습니다.
다만 EPT
에서 페이징과 관련하여 아직 익숙치 않은 부분이 많습니다.
Paging-Structure
라는 하나의 거대한 구조는 페이징이라는 프로세스에서 필요한 구조들의 집합이란 것은 확실히 이해했습니다.
이에 따라 매핑되느냐(bit 7 = 1) 참조되느냐(bit 7 = 0)에 따라 다른 구조를 사용한다는 것으로 이해했습니다.
매핑이 되는 경우 해당 엔트리가 최종 계산이며, 참조의 경우 또 다른 테이블을 참조하여 엔트리를 찾아갑니다.
어쨋든 어설픈 번역과 이해이기 때문에 해당 문서들은 추가적으로 더 보강할 것 입니다.
※ 페이징과 관련된 내용이 정리되었으며, 아래 링크에서 확인할 수 있습니다.
[0x06] Reference
- Intel 64 and IA-32 Architectures Software Developer’s Manual