Hypervisor

Intro

근처에서 하이퍼바이저라는 말을 자주 들어보았던 것 같아서 정리를 해보려고 합니다.

Hypervisor가 뭐지?

하이퍼바이저는 가상화 기술 중 하나로, 가상머신을 만들고 실행할 수 있는 소프트웨어, 하드웨어, 펌웨어를 모두 포함하는 플랫폼입니다.
하이퍼바이저가 가상머신을 실행하는 호스트를 host 라고 하고, 각각의 가상머신은 guest 라고 합니다.
하이퍼바이저는 가상머신이 가상화된 하드웨어에서 동작하도록 하며, 가상머신 실행을 관리합니다.

예시를 들어서 만약 한 대의 서버 컴퓨터에서 리눅스와 윈도우 서버를 동시에 구동해야 한다고 할 때, Hypervisor를 사용하여 두 OS를 동시에 구동할 수 있습니다.

Hypervisor의 종류

하이퍼바이저는 크게 2가지(nativehosted)로 나눌 수 있습니다.
(이 두 가지 종류는 완벽하게 나눠지지는 않을 수 있습니다.)

1. native

네이티브 하이버바이저는 OS를 거치지 않고 하이퍼바이저가 하드웨어를 직접 다루는 방식입니다.
즉, 일반적인 프로그램 실행에서 프로그램은 가상머신, OS는 하이퍼바이저로 바꾼 모습입니다.
또한 이 native 방식은 bare metal 이라고도 불립니다.

Virtual Machines - Hypervisor - Hardware

네이티브 하이퍼바이저 프로그램은 대표적으로 Xen, VMWare의 ESX Server, 마이크로소프트의 Hyper-v 등이 있습니다.

2. hosted

호스티드 하이퍼바이저는 OS 위에 일반적인 프로그램 형태로 동작합니다. 보통 보안을 공부하다가 설치하라고 하는 VMWare Workstation, VMWare Fusion, VirtualBox, Parallels, QEMU, Virtual PC 등이 이 hosted 방식을 사용합니다.

Virtual Machines - Hypervisor - OS - Hardware

가상화 방식 - 전가상화와 반가상화

x86 시스템 구조상 1개의 OS만이 특권모드(커널모드)에 접근할 수 있는데, 만약 이를 게스트 OS가 가져가게 되면, 호스트는 특권모드를 잃게 됩니다. 이 때문에 나타난 방식이 전가상화와 반가상화입니다.

(특권모드 명령어를 사용하지 않는 일반 유저 어플리케이션은 바로 CPU 에 전달됩니다.)

전가상화

CPU 에서 가상화 기술을 지원한다면, 이를 사용하여 특권모드가 있는 명령어들은 CPU에서 하이퍼바이저로 전달해주면, 하이퍼바이저에서 다른 명령어로 변환한 후에 그 명령어를 실행하는 방법을 사용해서 게스트 OS가 가상화 환경에서 구동되지 않는 것처럼 속이는 방법이 전가상화입니다.

즉, 다음과 같은 흐름을 가지게 됩니다.

게스트 OS -> CPU -> 하이퍼바이저 -> CPU

반가상화

전가상화는 하이퍼바이저를 거쳐서 명령어를 실행하기 때문에 하드웨어적인 손실이 생기게 됩니다. 그리하여 제안된 방식이 반가상화인데, 특권이 있는 명령어 자체를 CPU에 바로 전달하지 않고, 하이퍼바이저를 통해서 CPU에 명령을 내리도록 하는 방식입니다.
하지만 이 방식은 커널이 오픈소스여서 수정을 할 수 있거나, 하이퍼바이저를 지원하는 게스트 OS만 사용이 가능한 방식입니다.

명령어는 다음과 같은 흐름을 가지게 됩니다.

게스트 OS -> 하이퍼바이저 -> CPU

x86 가상화

위와 같이 전가상화와 반가상화에서 있었던 문제점들 때문에 2006년 Intel(VT-x)과 AMD(AMD-V)가 약간의 하드웨어 가상화를 지원한다고 발표를 하였습니다.

SW 기반의 x86 가상화

CPU Ring 개념에서 커널 부분인 Ring 0 보다 더 낮은 영역을 만들어 호스트가 동작하도록 하고, 만약 게스트 OS에서의 Ring 0 권한을 가진 명령을 실행하면 이를 직접 호스트 받아 해당 명령을 Ring 3의 명령으로 바꿔주고 실행하는 역할을 하게 된다.

출처

위키피디아-ko
위키피디아-en
위키피디아-en-x86-가상화

기타

혹시 틀린 사항이 있다면 연락해주시면 감사하겠습니다.

comments powered by Disqus