컴퓨터에서 컴퓨터 리소스의 추상화를 일컫는 광범위한 용어
물리적인 컴퓨터 리소스의 특징을 다른 시스템, 응용 프로그램, 최종 사용자들이 리소스와 상호작용하는 방식으로부터 감추는 기술
가상화의 핵심은 실제 존재하지 않는 하드웨어 플랫폼, 운영체제, 스토리지나 네트워크 리소스들을 가상적으로 제공한다는 것
가상 시스템에서 일어나는 동작을 호스트 시스템으로 매핑시켜주는 함수
| 개념 | 설명 |
|---|---|
| 호스트(Host) | 가상화를 실행하는 실제 물리 서버 |
| 게스트(Guest) | 호스트에서 실행되는 가상 머신(운영체제) |
| 하이퍼바이저(Hypervisor) | 호스트와 게스트 사이에서 가상화를 관리하는 소프트웨어 |
ABI 레벨 가상화
ISA 레벨 가상화
Multiprogramed System
Emulator
프로세스 가상 머신에서의 Emulator 는 USER ISA
인터프리터 방식과 바이너리 트랜스레이터 방식으로 구분
Same ISA Binary Optimizer
High Level Language Virtual Machine
가상화 소프트웨어로 가상머신 모니터라고 한다.
타입 1 과 타입 2 로 구분물리시스템 하드웨어에 직접 설치되는 가상머신
베어메탈 하이퍼바이저 라고도 한다
KVM , Xen
대규모의 클라우드 컴퓨팅 서비스를 도입할 때 사용
클라우드 서비스를 제공하는 데이터 센터에서 구축되는 시스템에 도입
클라우드 서비스를 제공하는 곳에서는 신속한 확장과 축소가 가능해야 하기 때문에 확장성이 충분히 기술적으로 보장되어야 한다
불필요한 오버헤드를 최소화해서 가상머신에서 동작하는 애플리케이션의 실행 속도가 호스트머신에 직접 설치되어 운영되는 성능과 근접한 결과를 만들어낸다.
물리 시스템이 하드웨어적으로 가상화를 지원해야 한다.
윈도우즈에서는 CTRL + SHIFT + ESC를 눌러서 작업관리자를 열고 CPU 탭에서 가상화 사용 여부 확인 가능

리눅스에서는 lscpu | grep Virtualization 명령어
호스트머신의 운영체제 위에 마치 애플리케이션처럼 설치
가상머신을 단일 물리시스템에 설치하고 운영하는데 있어 편리성을 제공
중간에 호스트머신의 운영체제가 동작하고 있기 때문에 호스트머신의 하드웨어를 직접 접근할 수 없음
간편한 하이퍼바이저이기는 하지만 타입 1 하이퍼바이저에 비해서 오버헤드가 더 많이 발생
VMWare Workstation, VMWare Player, Virtual Box, Parallels Desktop for MAC, QEMU, KVM, UTM 등이 있다
KVM은 타입 1이면 타입 2인데 KVM은 리눅스 커널의 모듈로 동작하기 때문에 운영체제가 설치되고 사용응 해야 하기 때문에 타입 2인데 KVM이 설치된 리눅스 운영체제가 타입 1 하이퍼바이저가 된다고 할 수 있음
게스트 운영체제를 수정하지 않는 애뮬레이터 방식
하드웨어적 지원을 받는 전가상화와 소프트웨어로만 구분되는 전가상화 2가지로 구분
📌 소프트웨어적 전가상화
바이너리 트랜스레이션 이진 변환 기법을 통해 소프트웨어적으로 명령어를 처리하는 방식
호스티드 방식만 가능
전가상화에서는 게스트 OS가 요청을 하면 이에 맞는 바이너리 트랜스레이션을 수행해야 한다
구조
| 사용자애플리케이션 |
|---|
| 게스트운영체제 |
| VMM(운영체제 요청 바이너리 트랜스레이션) |
| 하드웨어 |
호스트운영체제가 일을하고 있는 경우 사용자 애플리케이션에 작업이 발생하면 아래 3가지 방법으로 일을 처리한다.
1. 트랩 방식:
printf("%s\n",str) 명령을 내리면 운영체제의 쓰기 함수를 호출하고 표준 출력인 모니터로 출력을 하게된다사용자 모드에서 커널모드로 전환이 되고 이 때 운영체제의 쓰기 함수를 호출해서 문자열을 출력하고 커널 모드에서 사용자 모드로 전환2. 인터럽트 방식:
3. 예외(Exception) 방식
소프트웨어적인 전가상화 방식은 VMWare가 개발한 방법인데 중간에 위치한 하이퍼바이저가 CPU가 인식할 수 있는 명령으로 변경해서 처리하기 때문에 오버헤드가 발생하고 구현이 까다로움
Xen이 단점을 극복하고자 Guest OS를 수정한 Hyper Call 방식을 제안하게 됨
📌 하드웨어 지원 기반 전가상화
네이티브 방식과 호스티드 방식 둘 다 가능
하이퍼바이저가 소프트웨어적으로 Guest OS가 요청한 명령을 현재 CPU에 수행할 수 있는 명령으로 변환해야 해서 오버헤드가 불가피하고 성능에 대한 문제가 발생할 수 밖에 없음
CPU 벤더들은 가상화를 지원하기 위한 새로운 기능이 탑재된 하드웨어를 출시
처음부터 CPU에 가상화 기술을 탑재해서 하드웨어가 직접 수행하도록 해주는 것
Intel 의 VT -x 기술 또는 AMD 의 AMD-V 기술이 탑재된 CPU에서만 가능
사용자 프로그램이 하드웨어의 가상화 기술을 통해 직접 요청이 가능한 방식
게스트 OS가 트랩을 발생시킬 때 하이퍼바이저는 바이너리 트랜스레이션 없이 가상화 기술을 통해 하드웨어를 직접 제어 가능
┌────────────┐
│ App │
├────────────┤
│ Binary │
├────────────┤ ┌────────────┐ ┌────────────┐
│ Guest OS1 │ │ Guest OS2 │ │ Guest OS3 │
├──────────────────────────────────────────┤
│ Hypervisor │ ← (Host OS 위에 설치되거나, Bare-metal)
├──────────────────────────────────────────┤
│ Infra structure │ ← Physical Hardware
└──────────────────────────────────────────┘
※ 각 VM은 서로 다른 Guest OS 사용 가능 (≠)
┌────────────┐
│ App │
├────────────┤
│ Binary │
├────────────────────────────┤
│ 컨테이너 엔진 │ ← Docker, container.d
├────────────────────────────┤
│ Host OS │ ← 컨테이너가 공유하는 커널
├────────────────────────────┤
│ Infrastructure │ ← Physical Hardware
└────────────────────────────┘
※ 게스트 OS 없음 → 모두 같은 커널 공유 (≠ 불가)