가상 머신
가상 머신(Virtual Machine, VM)은 실제 하드웨어나 실행 환경의 기능을 추상화하여 프로그램 또는 운영체제가 하나의 독립된 컴퓨터처럼 실행하도록 제공하는 환경이다. 시스템 가상 머신은 가상 CPU·메모리·디스크·네트워크를 제공해 Windows·Linux 같은 운영체제를 실행...
| 영어 명칭 | Virtual Machine |
|---|---|
| 분류 | 프로그램·운영체제 실행을 위한 추상 컴퓨터 |
| 주요 종류 | 시스템 가상 머신·프로세스 가상 머신 |
| 예시 | JVM, CLR, Hyper-V, QEMU 등 |
| 시스템 VM | 게스트 OS·가상 CPU·메모리·장치 |
| 프로세스 VM | 바이트코드·런타임·추상 ISA |
| 실행 방식 | 인터프리트·JIT·AOT·하드웨어 가상화 |
| 관련 개념 | 가상화, 하이퍼바이저, 에뮬레이터 |
| 공식 예시 | JVM Specification |
| 하이퍼바이저 | Hyper-V architecture |
가상 머신(Virtual Machine, VM)은 실제 하드웨어나 실행 환경의 기능을 추상화하여 프로그램 또는 운영체제가 하나의 독립된 컴퓨터처럼 실행하도록 제공하는 환경이다. 시스템 가상 머신은 가상 CPU·메모리·디스크·네트워크를 제공해 Windows·Linux 같은 운영체제를 실행하고, 프로세스 가상 머신은 JVM·CLR처럼 특정 언어의 바이트코드와 런타임 명령을 처리한다. 두 유형은 목적·경계와 실행 모델이 달라 같은 가상 머신이라는 명칭만으로 구분을 없애서는 안 된다.
시스템 VM에서는 하이퍼바이저가 물리 자원을 분리하고 게스트의 CPU·메모리 사용과 장치 접근을 관리한다. Hyper-V나 KVM은 하드웨어 가상화 기능을 이용하고, QEMU는 구성에 따라 전체 시스템 에뮬레이션이나 가상화 가속을 활용할 수 있다. VM마다 고립된 게스트 OS를 설치·부팅할 수 있으나 실제 격리 수준은 호스트·하이퍼바이저의 구현과 장치 공유 설정에 달려 있다.[1]
프로세스 VM의 예인 JVM은 클래스 파일과 명령어 형식, 로딩·검증 및 실행 모델을 정의한다. JVM은 구체적인 CPU나 메모리 배치를 강제하지 않으며 구현은 인터프리터와 JIT 컴파일러·가비지 컬렉터를 사용할 수 있다. 따라서 JVM 바이트코드가 x86 기계어와 같지 않고, Java라는 언어와 JVM이라는 실행 환경도 별개의 개념이다.[2]
VM은 테스트·개발·서버 통합과 오래된 시스템의 보존에 유용하다. 스냅샷·가상 네트워크·가상 디스크를 사용하면 게스트 환경을 반복해서 구성할 수 있지만 호스트 자원 부족·네트워크 노출과 장치 에뮬레이션 정확성에 따른 문제가 발생할 수 있다. 가상 머신이 존재한다는 사실만으로 보안 격리가 무조건 완벽하거나 게스트가 실제 하드웨어와 동일한 성능을 낸다고 보장하지 않는다.