가상화(假像化, virtualization)는 컴퓨터에서 컴퓨터 리소스의 추상화를 일컫는 광범위한 용어이다. "물리적인 컴퓨터 리소스의 특징을 다른 시스템, 응용 프로그램, 최종 사용자들이 리소스와 상호 작용하는 방식으로부터 감추는 기술"로 정의할 수 있다.
서버 가상화
OS-Level 가상화
데스크톱 가상화
애플리케이션 가상화
네트워크 가상화
하이퍼바이저(영어: hypervisor)는 호스트 컴퓨터에서 다수의 운영 체제(operating system)를 동시에 실행하기 위한 논리적 플랫폼(platform)을 말한다. 가상화 머신 모니터 또는 가상화 머신 매니저(: virtual machine monitor 또는 virtual machine manager, 줄여서 VMM)라고도 부른다.
Type 1(Native)
Native 또는 Baremetal HyperVisor라고도 불리며, Host의 Hardware에서 직접 HyperVisor가 구동되어 게스트 운영체제를 관리한다. 대표적인 Type 1 HyperVisor의 종류로는 KVM, VMWare ESXi, Windows Hyper-V가 대표적이다.
Type 2(hosted)
hosted HyperVisor라고 불리며, 기존의 Host Machine의 운영체제에서 소프트웨어 Layer 또는 어플리케이션으로써, 구동된다. Host OS는 Guest OS를 추상화하는 방식으로 작동하며, VM 리소스는 호스트 OS에 따라 예약된 후 하드웨어에 대해 실행된다. 대표적인 Type 2 HyperVisor의 종류로는 VMWare Workstation, Oracle VirtualBox, qemu가 대표적이다.
호스트 CPU의 가상화 기술을 이용하여, 하드웨어를 완전히 가상화하는 기술
전 가상화에서의 단점(가상화 오버헤드)을 보완하고자 등장하였으며, HyperCall을 이용하여, Host의 하드웨어에 접근하는 기술
초기 x86 아키텍처를 가진 운영체제는 물리적으로 존재하는 하드웨어에 직접 접근할 수 있도록 설계되었다. 아래 그림과 같이 가상화를 하지 않았을 경우의 Protection Ring 구조에서는 OS는 커널과 같은 Level인 Ring 0, 사용자의 어플리케이션들은 Ring 3에 존재하여, 직접적으로 호스트의 하드웨어를 접근할 수 있었다.
가상화를 하기 위해서는 Ring 3인 User Apps로 Guest OS를 올려야 하며, 이러한 Guest OS들은 메모리 및 물리적인 하드웨어에 Privileged Instruction을 수행하기 위해, Ring 0의 권한에 접근할 수 있어야 하였다. 이에 운영체제 아래에 가상화 계층을 생성하고, 이 가상화 계층을 이용하여, 가상 시스템을 생성하고 관리하여야 했다.
초기, 전 가상화를 하게 되면, root모드와 non-root모드가 생겨(DualMode-Operation) Guest OS는 Ring 3(non-root모드)에 배치되게 되는데, 이러한 구조에서 만약 Guest OS가 Privileged Instruction을 처리해야 되는 상황이 온다면, HyperVisor는 Trap & Emulate 방식으로 처리를 하였다.
Non-root모드에서 Guest OS에서 Privileged Instruction이 발생한다면, 해당 OS는 Trap상태로 바뀌게 되고, Trap Handler는 제어권을 하이퍼바이저로 넘기게 된다. 이후 하이퍼바이저는 해당 명령을 처리(Emulate)하고, 제어권을 다시 OS로 넘겨주게 된다.
Trap & Emulate는 호환성을 확실하게 보장할 수 있지만, Trap이라는 이벤트 발생으로 인하여, Guest OS의 실행이 중단되는 그 자체만으로 System Overhead가 크다. 따라서, Trap & Emulate 방식만으로 하이퍼바이저를 구현하는 것은 어렵다고 한다.
※ Trap이 발생한다는 것은 시스템 입장에서는 무조건 Interrupt가 발생하는 사항임
위와 같은 문제점으로 인하여, VMware에서는 1998년도에 Binary Translation 이라는 기술을 개발하였고, 이를 발표하였다.
Binary Translation 기법은, 각 Guest OS에서 Privileged Instruction을 수행하려 할때, VMM(하이퍼바이저)가 Binary Translation을 통해 하드웨어가 인식할 수 있는 명령으로 변환하여 전달하는 기법이다. Guest OS는 가상화 계층에 의해 하드웨어로부터 완전하게 추상화되기 때문에 자신이 가상화 중이라고 인식하지 못하여, 별도로 커널 코드나 하드웨어 등을 수정할 필요가 없다.
반 가상화는 오픈소스인 Xen 프로젝트에서 전 가상화의 문제점을 해결하기 위해 고안된 가상화 기술이다. 이 경우 Guest OS는 스스로 가상화된 환경임을 인지하고 있으며, 하드웨어 명령을 호스트로 요청하기 위해서는 별도의 드라이버를 필요로 한다. 즉, 반 가상화를 하기 위해서는 코드가 수정된 커널과 별도의 장치 드라이버를 필요로 하여, 이식성과 호환성이 좋지 않다. 반 가상화의 특징으로는, Guest OS의 커널을 수정하여 Privileged Instruction이 발생할 경우 HyperCall을 호출하여 하이퍼바이저가 실행되게 한다.
전 가상화와 반 가상화의 가장 큰 차이점은 Privileged Instruction을 어디로 보내냐, 커널코드의 수정 여부 이다.
2006년도에 하드웨어 벤더사들은 빠르게 가상화를 수용하고, 가상화 기술을 쉽게 접할 수 있도록 새로운 기능을 개발하고 이를 출시하였다. 1세대 하드웨어의 향상된 기능으로 대표적으로 Intel VT-x와 AMD-V가 있다. 위 그림과 같이 VMM을 Ring 0 아래의 새로운 Root-mode에서 실행할 수 있는 CPU 실행모드 기능을 통해 Privileged Instruction 또는 민감한 명령을 자동으로 VMM에 Trap되도록 하여, 별도로 Binary Translation이나 Para-Virtualization을 진행할 필요가 없다. 또한, Guest OS의 상태는 Virtual Machine Control Structures(VT-x) 또는 Virtual Machine Control Blocks(AMD-V)에 저장된다.
운영체제 보호기법으로 권한을 User Mode와 Kernal Mode로 나눈다. User Mode에서 실행되던 Application이 시스템에 직접적인 영향을 줄 수 있는 명령어를 실행시 Kernal Mode로 Trap되는 과정을 말한다.
Kernal Mode Instruction은 User Mode Instruction을 포함한다. 하지만, User Mode에서 시스템에 영향을 줄 수 있는 특정 명령어들은 Kernal Mode에만 존재하는 명령어를 요청하게 되는데, 이를 특권 명령(Privileged Instruction) 이라고 한다.
https://ko.wikipedia.org/wiki/가상화
https://mangkyu.tistory.com/87
https://velog.io/@skynet/가상화-입문-에뮬레이션-가상머신-컨테이너
https://www.educative.io/answers/what-is-virtualization-and-describe-its-overhead
https://ko.wikipedia.org/wiki/하이퍼바이저