가상 머신이란 운영체제를 가지고 있는 실제 컴퓨터 시스템처럼 동작하는 것을 의미한다. 가상 머신은 자기만의 CPU, 메모리, OS를 가진 것처럼 보여져서 그 자체로 실제 컴퓨터시스템 인것처럼 보이지만 실제로는 컴퓨터 시스템이 아니다.
즉 하나의 컴퓨터 시스템 안에는 CPU와 메모리가 하나씩 있는데, 가상 머신을 여러개 만들어서 여러개의 가상머신마다 각각의 CPU와 메모리들이 있는 것처럼 보이게 하는 것이다.
가상머신에서 실행되는 소프트웨어(어플리케이션)은 실제 물리적으로 존재하는 하드웨어 자원(CPU, 메모리)와 분리되어 있다. 가상머신 내 소프트웨어는 가상머신의 CPU, 메모리를 사용하는 것처럼 보이지만 그것은 실제의 물리적 CPU, 메모리와는 분리된 것이다.
서로 다른 가상환경은 자기만의 private computer을 가지는 것과 같은 환상을 보여준다.
*Host OS와 Hypervisor/VMM은 엄밀히 말하면 다른 개념
Host OS는 실제 하드웨어들을 관리하고, Guest OS는 가상의 하드웨어들을 관리한다. 가상의 하드웨어는 실제 존재하는 것이 아니기 때문에, Guest OS가 가상의 하드웨어에 접근하기 위해서는 요청을 Virtualization Layer로 전달하고, Layer가 실제 하드웨어를 할당시켜 준다.
가상 머신들의 요청들은 전부 Virtualization Layer로 전달되므로, Virtualization Layer가 실제 하드웨어를 관리하면서 가상 머신에게 할당해 주는 역할을 수행한다.
가상 머신에서 어플리케이션이 커널에 시스템 콜을 통해 서비스 요청을 하면, 가상의 OS는 실제 하드웨어를 건드릴수 없기 때문에 Hypervisor의 도움을 받아야 한다.
따라서 원래 OS에서 하드웨어를 직접 건드리던 소스 코드들을, Hypervisor를 호출하는 소스 코드로 변경하는 방법이다.
Guest OS를 수정하지 않고 원래 OS처럼 소스코드를 유지하되, Guest OS는 하드웨어를 건드릴 수 없는데 건드리려고 하니 권한을 넘어서는 시도이므로 'Exception'을 발생하게 만들고, 이 Exception을 처리하는 과정에서 명령을 Hypervisor 호출로 전환시켜주는 방법이다.
따라서 Mac OS, Linux, Windows 등 여러 운영체제들의 소스 코드를 그대로 가져다 쓰되 발생하는 Exception을 전환, redirection 시켜주는 방법이다.
성능 면에서는 반 가상화 기술이 훨씬 빠르다. 왜냐하면 전가상화는 계속 Exception Handling이 필요하기 때문이다.
그러나 전가상화 기술은 기존의 OS를 수정하지 않고 그대로 가져다 쓸 수 있기 때문에 장점이 있다.
최소한으로 반가상화 기술을 사용하되 전 가상화기술을 대부분 사용하는, 두 기술을 섞어 사용하는 기법
Physical Hardware 위에 Hypervisor가 오고, 그 위에 각각의 가상 머신들이 있는 구조
Hypervisor가 하드웨어 관리 기능을 모두 해야 한다.
하드웨어 위에 Hypervisor를 올리기 전에, Host OS를 따로 두고, 그 위에 Hypervisor를 올리는 것이다.
즉, Host OS와 Hypervisor는 엄밀히 다른 개념이다. 기존의 리눅스 체제와 같은 운영체제를 Host OS로 사용하고, 그 위 Hypervisor,그 위 가상머신이다.
기존의 운영체제가 하드웨어 관리기능을 모두 가지고 있는데 Hypervisor를 또 새로 만들어서 기능을 모두 implement할 필요가 없다고 생각해서 나온 구조.
기존 OS가 하드웨어를 관리하는 기능을 하는 것이다.
Type 2에서 너무 계층이 많으니, 실제 Host OS 안에다가 Hypervisor를 넣은 것(임베드시킨 것)이다. 따라서 Hypervisor의 기능을 Host OS 안에 넣은 구조로서, Type 1과 2의 구조를 섞은듯 해보여 하이브리드 구조라고 부른다.
A, B, C 세개의 서버가 필요하면 예전에는 서로 다른 하드웨어 3대를 이용했어야 했는데, 가상화 기술을 사용하면 하드웨어 하나를 두고 그 위에 가상머신/컨테이너를 여러개 두는 구조이기 때문에, 하드웨어 하나로 A, B, C 서버를 독립된 환경에서 돌아가도록 만들 수 있다. 3개의 서버를 하나의 물리적 하드웨어에 통합시킨 것이다. 하나의 하드웨어당 하나의 서버를 할 경우 하드웨어가 낭비되는 경우도 있을 텐데, 가상화 기술을 사용하면 하드웨어의 활용도가 더 높아질 것이다.
개인적 입장에서는 개인 노트북에 가상화 엔진(Hypervisor)를 깔고 MS Windows, Linux 두개의 운영체제를 깔고 번갈아 이용할 수 있다. 이 경우 하나의 pc를 가지면서 윈도우와 리눅스 두 개의 pc를 가진 것과 같은 효과를 낼 수 있다.
데이터센터와 같은 곳에선 성능과 자원의 활용 문제로 가상화 기술을 사용할 수 있다.
세 개의 서버에 대해 하드웨어 3개를 사용하는 것보다는, 하드웨어 한개만 관리하면 되니까 더 관리가 단순하다.
서버 A, B, C가 각각 독립적 머신에서 돌 때에는, 서버 C가 고장나면 다른 하드웨어를 찾아야 하기 때문에 시간이 소요된다. 그러나 가상머신에서 서버 A, B, C가 돌아가면 C가 고장나도 새로운 가상 머신을 만들어서 하면 되기 때문에, 가용성과 신뢰성이 더 높아진다.
가상화 기술에서의 단점은 하드웨어가 고장나면 서버 3개가 모두 돌아가지 못한다느 점인데 대부분 이런 경우 신뢰도가 높고 성능이 매우 좋은 하드웨어를 사용하기 때문에 하드웨어가 고장나는 경우는 별로 없다.
운영체제 커널을 개선하고 수정하는 업무를 할 때, 이것을 하나의 물리적 머신에서 하게 되면 커널이 오류가 발생하게 되면 기기 전체를 사용할 수 없게 된다. 그러나 가상머신에서 수정하면, guest os를 수정하면서 하는 것이기 때문에 guest os가 잘못되어 다운되어도 실제 머신은 잘 작동하기 때문에 문제가 없다.