Introduction
VMM 은 Host 머신의 모든 resource 를 접근가능하여, Guest OS에게 virtual platform interfaces를 제공한다.
IA-32 Architecture가 가상화 하기 어렸웠던 문제점들
- IA-32는 2 bit privilege level을 제공함.
- 그 중에서 Ring 0는 OS가 사용하고, Ring 3은 Application이 사용하도록 개발됨
- 하지만 이런상황에서 VMM을 개발하면, VMM이 Ring0에서 동작해야 하며,Guest OS는 VMM 보다 낮은 privilege level을 가져야 한다. (ring deprivileging)
- 따라서 가능한 모델은 VMM/GuestOS/GuestApplication (0/1/3 또는 0/3/3) 모델이 가능하다.
. (0/1/3 모델이 simple한데, ring compression 때문에 64bit mode IA-32 에서는 불가능하다)
Ring Aliasing
- Guest OS가 자신이 알고 있는 privilege level(OS:ring0, App:ring3)로 동작하지 않을 때 발생하는 문제
Address-Space Compression
- VMM은 Guest Virtual Address(GVA)에 일부를 reserve 하거나, 이에 대한 접근이 가능해야 하는데, 이를 Guest가 모르게 해야 함 (Guest가 VMM가 reserve한 곳을 write하면 안됨)
Non-Faulting Access to Privilege State
- Privilege level에 맞지 않지만, fault 가 발생하지 않음
Adverse Impact on Guest System Call
- Guest OS가 SYSENTER, SYSEXIT를 수행하면, Guest OS Kernel이 아닌 VMM 으로 변경될 수 있음
Interrupt Virtualization
- VMM이 Guest interrupt를 제어해 줘야 함
Access to Hidden State
- IA-32 Arch에서 Software가 알지 못하는 hidden descriptor caches 가 존재함
Ring Compression
- 64 bit mode에서는 paging만 제공하는데, paging은 privilege level 0-2를 구분못함. 따라서 guest OS가 ring 3에서 동작해야 함
Frequent Access to Privilege Resources
-