개요
Kernel-based Virtual Machine (KVM)은 리눅스 커널에 Hypervisor의 기능을 더한 것을 말한다. 이러한 변화는 하드웨어 가상화 기법의 발달과 더불에서 자연스럽게 추가된 기능이다. 하드웨어 가상화 기법은 Gutest operating mode와 그에 따른 가상화된 Priviledge 명령어를 CPU단에서 제공한다. 이러한 기능을 linux커널에서 이용하여 쉽게 Hypervisor로 linux 커널을 활용하여 가상 머신을 돌릴 수 있게 한 기능이 kvm이다. KVM은 Hardware Virtualization을 이용한 Full Virtualization의 일종이다.
기본적인 구조
KVM에서 가상 머신은 device node (/dev/kvm)을 open하는 것으로 생성된다. guest는 생성한 프로세스의 메모리와 독립된 자신만의 메모리를 할당받으며, user process에 mapping된 영역이 또한 존재한다. 이러한 mapping영역은 주로 DMA장치의 Emulation에 이용된다.
/dev/kvm 디바이스노트는 character device의 형태로 주어진다. 이 디바이스는 여러 ioctl을 통해서 userspace프로그램이 이 디바이스를 통해서 가상화된 시스템을 생성할 수 있도록 해준다. 이러한 /dev/kvm에서 제공하는 ioctl에는 다음과 같은 기능들이 포함된다.
- 새로운 가상머신 할당
- 가상머신에 메모리 할당
- 가상 CPU의 레지스터 읽기
- 가상 CPU에 Interrupt 루틴 추가
- 가상 CPU 시작 및 중지
이러한 기능을 통해서 가상머신은 Virtual CPU를 통제하게 된다.
Guest OS의 CPU mode는 Kernel mode, User mode도 아닌 Guest Mode라는 별개의 모드에서 작동한다.