가상 머신(VM, Virtual Machine)

2025. 8. 27. 17:13·Development/개발 공부

가상 머신(Virtual Machine)

가상 머신은 소프트웨어로 구현한 물리적인 컴퓨팅 환경을 의미한다.

여러 가상 머신을 구동하면, 단일 컴퓨터에서도 여러 대의 컴퓨터가 병렬(parallel)로 작동하는 환경을 구성할 수 있다.

단일 컴퓨터는 "호스트 머신", 띄울 수 있는 가상 머신은 "게스트 머신"이라 불린다!

(이후 본문에서는 물리적 단일 컴퓨터를 편의상 '호스트 머신'이라 지칭하겠다.)

 

❓가상 머신을 사용하는 이유?

  • 호스트 머신에서 여러 운영체제를 동시에 구동할 수 있다.
          예시) Windows 환경 위에서 Linux 및 macOS 환경의 가상머신을 구동시킬 수 있다.
  • 게스트 내부에서 보안 문제가 발생하여도, 호스트 머신은 직접적으로 영향을 받지 않는다.

 


 

가상 머신의 분류

가상 머신은 시스템 가상 머신과 프로세스(애플리케이션) 가상 머신으로 분류할 수 있다.

 

시스템 가상 머신

시스템 가상 머신은 여러 가상 머신에게 각각 독립된 실행 환경을 제공한다.

가상 머신 내부에 OS를 설치한 후 → 설치한 OS 위에서 1개 이상의 애플리케이션을 실행할 수 있다.

이때, 각 가상 머신은 호스트 머신의 물리적 리소스(CPU, 메모리 등)를 할당받아 사용하게 된다.

 

프로세스(애플리케이션) 가상 머신

프로세스 가상 머신은 특정 애플리케이션(단일 프로세스)을 실행하기 위한 환경을 제공한다.

예를 들어, JVM은 자바 애플리케이션 하나를 실행하기 위한 프로세스 가상 머신이다.

이때는 호스트 머신의 OS 위에서 단일 프로세스가 실행되기 때문에, 가상 머신의 OS는 별도로 필요하지 않다.

 

 


 

가상 머신의 작동 원리

가상 머신의 실행 과정은 컴파일 타임에 생성된 중간 코드(바이트코드)를 읽어 명령을 수행하는 과정이다.

즉, 바이트코드 파일을 가상 머신이 읽고 내부 구조를 활용해 연산을 수행한다.

 

이때 가상 머신의 연산 수행 방식 또한 스택 기반 방식과 레지스터 기반 방식 두 가지로 분류된다.

 

스택 기반 방식

스택 기반 방식은 연산을 수행할 때 스택을 사용한다.

연산자와 피연산자를 스택에서 꺼내(pop) 연산을 수행한 후, 연산 결과를 다시 스택에 넣는(push) 과정을 반복한다.

 

스택 기반 방식을 사용하는 JVM의 동작 예시를 살펴보자.

 

먼저 자바의 소스 코드가 있다.

다음 명령어를 수행하여 test 파일을 직접 컴파일하고, 바이트 코드를 확인해보자.

 

javac test.java
javap -c test.class

 

 

바이트코드가 상당히 길기 때문에..

주요 명령어들만 살펴보자.

iload_1    // 지역 변수 1 값을 스택에 push
iload_2   // 지역 변수 2 값을 스택에 push
iadd        // 스택에서 2개 값 pop → 더하기 → 결과 push
istore_3   // 스택 top 값을 지역 변수 3에 저장

 

이처럼 스택을 사용하여 연산을 수행하는 방식을 스택 기반 방식이라고 한다.

 

레지스터 기반 방식

레지스터 기반 방식은 연산을 수행할 때 레지스터에서 피연산자 값을 가져와 연산하고,

그 결과를 다시 레지스터에 저장하는 방식이다.

대표적으로 DVM은 레지스터 기반 방식을 사용한다.

 

스택 기반 방식은 연산을 위해 스택의 top의 값을 두 번 pop해야 하므로 명령어 수가 많다.

반면, 레지스터 기반 방식은 "명령어가 지정한 레지스터 수" 만큼 피연산자를 연산에 활용할 수 있다.

따라서 레지스터 기반 방식은 명령어 수는 적지만, 명령어 자체의 크기가 커지는 장단점을 동시에 가진다.

 


 

가상 머신의 유형

실제 사용되는 가상 머신으로는

  • VMWare: 호스트 위에서 Windows, Linux 등의 여러 OS를 독립적으로 실행할 수 있는 상용 가상 머신
  • Virtual Box: Oracle에서 제공하는 무료 오픈소스 시스템 가상 머신
  • Hyper-V: Microsoft에서 제공하는 Windows용 가상화 플랫폼
  • WSL: Windows OS에서 Linux 환경을 실행할 수 있게 해주는 가상화 계층
  • Parallel Desktop: Mac OS에서 Windows, Linux 등의 OS를 실행할 수 있는 상용 가상 머신

등이 있다.

 

:)

 

참고
https://www.korecmblog.com/blog/jvm-stack-and-register

https://s2choco.tistory.com/13

'Development > 개발 공부' 카테고리의 다른 글

[Test] Stub을 이용한 단위 테스트(with JUnit)  (0) 2025.09.30
[Test] 단위 테스트(Unit Test)  (0) 2025.09.27
WEB / WAS(Web Application Server)  (0) 2025.09.17
컴파일 타임(Compile Time) / 런타임(Runtime)  (0) 2025.08.26
쿠키(Cookie)/세션(Session)/토큰(Token)(+JWT)  (0) 2025.08.23
'Development/개발 공부' 카테고리의 다른 글
  • [Test] 단위 테스트(Unit Test)
  • WEB / WAS(Web Application Server)
  • 컴파일 타임(Compile Time) / 런타임(Runtime)
  • 쿠키(Cookie)/세션(Session)/토큰(Token)(+JWT)
jjangsudiary
jjangsudiary
jjangsudiary 님의 블로그 입니다.
  • jjangsudiary
    jjangsudiary 님의 블로그
    jjangsudiary
  • 전체
    오늘
    어제
    • 분류 전체보기 (81) N
      • 이모저모 (0)
        • 회고 (0)
      • Development (17) N
        • 개발 공부 (14) N
        • 프로젝트 (2)
      • Android (10)
        • Compose (1)
      • AI (15)
      • Computer Science (25)
        • 네트워크 (8)
        • 데이터베이스 (10)
        • 운영체제 (6)
        • 자료구조 (0)
        • 컴퓨터구조 (1)
      • Java (9)
        • 디자인패턴 (2)
      • Spring (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    백준
    baekjoon
    android
    딥러닝
    머신러닝
    TensorFlow
    안드로이드
    CS
    db
    java
    Ai
    파이썬
    자바
    운영체제
    프로그래머스
    코딩 테스트
    database
    인공지능
    os
    Python
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
jjangsudiary
가상 머신(VM, Virtual Machine)
상단으로

티스토리툴바