가상화

JIWON·2025년 6월 10일

Cloud

목록 보기
4/6
post-thumbnail

1. 가상화(Virtualization)

1) 가상화의 기본 개념

💠 가상화

컴퓨터에서 컴퓨터 리소스의 추상화를 일컫는 광범위한 용어

  • 물리적인 컴퓨터 리소스의 특징을 다른 시스템, 응용 프로그램, 최종 사용자들이 리소스와 상호작용하는 방식으로부터 감추는 기술

  • 가상화의 핵심은 실제 존재하지 않는 하드웨어 플랫폼, 운영체제, 스토리지나 네트워크 리소스들을 가상적으로 제공한다는 것

  • 가상 시스템에서 일어나는 동작을 호스트 시스템으로 매핑시켜주는 함수

💠 핵심 개념

개념설명
호스트(Host)가상화를 실행하는 실제 물리 서버
게스트(Guest)호스트에서 실행되는 가상 머신(운영체제)
하이퍼바이저(Hypervisor)호스트와 게스트 사이에서 가상화를 관리하는 소프트웨어

💠 가상화 대상 시스템

  • 게스트 시스템을 호스트 시스템으로 매핑시켜주는 함수를 구현하는 방식에 따라 다양한 형태의 가상화를 정의할 수 있다
  • ABI(Application Binary Interface)와 ISA(Instruction Set Architecture) 로 구분

ABI 레벨 가상화

  • ABI 레벨 가상화는 소프트웨어 애플리케이션 관점에서 시스템이 가상화된 것으로 이를 프로세스 가상머신이라고 부르는데 이 형태로 만들어진 유명한 가상머신이 JVM(Java Virtual Machine)
    • 자바 애플리케이션은 JVM 만 있으면 시스템이 무엇이든 간에 동작할 수 있다
    • 특히 이런 형태의 가상화를 Runtime 이라고도 한다
    • JVM 대신 JRE(Java Runtime Environment)라는 표현을 사용하는 경우가 많음
    • 운영체제 위에 가상화 소프트웨어가 배치되는 구조

ISA 레벨 가상화

  • ISA 레벨 가상화는 명령어 집합에 대해 가상화를 한 것으로 시스템 가상 머신이라고 한다
    • 시스템 가상머신은 하드웨어 시스템과 일반적인 소프트웨어 사이에 놓이게 된다

💠 프로세스가상머신

Multiprogramed System

  • 단일 프로세스가 마치 전체 시스템을 독점하여 쓰고 있는 것처럼 보이게 하는 방식

Emulator

  • 프로세스 가상 머신에서의 Emulator 는 USER ISA

  • 인터프리터 방식바이너리 트랜스레이터 방식으로 구분

    • 인터프리터 방식 : 바이너리 인스트럭션을 하나하나 해석해서 수행하고 바이너리 트랜스레이터 방식은 소스 인스트럭션을 블록 단위로 타깃 인스트럭션으로 변환해서 수행시간을 단축시키는 방법
      • 스크립트 언어 실행하는 것과 유사한 방식으로 스타트업 시간에 대한 오버헤드는 없지만 전체적인 속도면에서 느리다
    • 바이너리 트랜스레이터 방식: C/C++ 언어로 만들어진 애플리케이션처럼 스타트업에 대한 오버헤드는 존재하지만 시스템 전체적으로 시간을 단축시킬 수 있는 방식

Same ISA Binary Optimizer

  • 바이너리 트랜스레이터가 게스트와 호스트가 동일한 ISA 를 사용하는 경우 최적화하여 사용하는 형태

High Level Language Virtual Machine

  • 하드웨어와 운영체제와의 의존 관계를 최소한 하는 방식으로 JVM이 대표적

💠 Hypervisor

가상화 소프트웨어로 가상머신 모니터라고 한다.

  • 호스트머신으로 불리는 물리적인 컴퓨터에 설치되어 가상머신을 생성하고 관리할 수 있다.
  • 하이퍼바이저는 타입 1타입 2 로 구분
    • 차이점은 중간에 운영체제가 있느냐 없느냐는 차이.
    • 하이퍼바이저가 물리시스템에 직접 설치되느냐 물리시스템의 운영체제 위에 설치되느냐 하는 차이

📌 Type 1 Hypervisor

  • 물리시스템 하드웨어에 직접 설치되는 가상머신

  • 베어메탈 하이퍼바이저 라고도 한다

  • KVM , Xen

  • 대규모의 클라우드 컴퓨팅 서비스를 도입할 때 사용

  • 클라우드 서비스를 제공하는 데이터 센터에서 구축되는 시스템에 도입

  • 클라우드 서비스를 제공하는 곳에서는 신속한 확장과 축소가 가능해야 하기 때문에 확장성이 충분히 기술적으로 보장되어야 한다

  • 불필요한 오버헤드를 최소화해서 가상머신에서 동작하는 애플리케이션의 실행 속도가 호스트머신에 직접 설치되어 운영되는 성능과 근접한 결과를 만들어낸다.

  • 물리 시스템이 하드웨어적으로 가상화를 지원해야 한다.

    • 윈도우즈에서는 CTRL + SHIFT + ESC를 눌러서 작업관리자를 열고 CPU 탭에서 가상화 사용 여부 확인 가능

    • 리눅스에서는 lscpu | grep Virtualization 명령어

    📌 Type 2 Hypervisor

  • 호스트머신의 운영체제 위에 마치 애플리케이션처럼 설치

  • 가상머신을 단일 물리시스템에 설치하고 운영하는데 있어 편리성을 제공

  • 중간에 호스트머신의 운영체제가 동작하고 있기 때문에 호스트머신의 하드웨어를 직접 접근할 수 없음

  • 간편한 하이퍼바이저이기는 하지만 타입 1 하이퍼바이저에 비해서 오버헤드가 더 많이 발생

  • VMWare Workstation, VMWare Player, Virtual Box, Parallels Desktop for MAC, QEMU, KVM, UTM 등이 있다

  • KVM은 타입 1이면 타입 2인데 KVM은 리눅스 커널의 모듈로 동작하기 때문에 운영체제가 설치되고 사용응 해야 하기 때문에 타입 2인데 KVM이 설치된 리눅스 운영체제가 타입 1 하이퍼바이저가 된다고 할 수 있음

대표적인 하이퍼바이저

  • KVM
  • Xen

2) 가상화의 장점

  • 적은 컴퓨팅 리소스 하드웨어 구매로 비용 절감
  • 쉬운 백업과 복구
  • 중단없는 비즈니스
  • 효율적인 IT 운영

3) 가상화의 단점

  • 가상화 소프트웨어 및 가상화 지원 하드웨어 구매로 초기 투자 비용 발생
  • 소프트웨어 라이선스 비용 발생
  • 초기 교육 필요

4) 가상화 방식

💠 전가상화

  • 게스트 운영체제를 수정하지 않는 애뮬레이터 방식

  • 하드웨어적 지원을 받는 전가상화소프트웨어로만 구분되는 전가상화 2가지로 구분


📌 소프트웨어적 전가상화

  • 바이너리 트랜스레이션 이진 변환 기법을 통해 소프트웨어적으로 명령어를 처리하는 방식

  • 호스티드 방식만 가능

  • 전가상화에서는 게스트 OS가 요청을 하면 이에 맞는 바이너리 트랜스레이션을 수행해야 한다

  • 구조

    사용자애플리케이션
    게스트운영체제
    VMM(운영체제 요청 바이너리 트랜스레이션)
    하드웨어

호스트운영체제가 일을하고 있는 경우 사용자 애플리케이션에 작업이 발생하면 아래 3가지 방법으로 일을 처리한다.

1. 트랩 방식:

  • 사용자 프로그램에서 printf("%s\n",str) 명령을 내리면 운영체제의 쓰기 함수를 호출하고 표준 출력인 모니터로 출력을 하게된다
  • printf는 하드웨어인 모니터에게 직접 쓸 수 없기 때문에 Trap Handler를 호출한다
  • 사용자 모드에서 커널모드로 전환이 되고 이 때 운영체제의 쓰기 함수를 호출해서 문자열을 출력하고 커널 모드에서 사용자 모드로 전환

2. 인터럽트 방식:

  • 하드웨어에서 발생하는 이벤트로 USB를 시스템에 꽂을 때 NIC를 통해 패킷을 받아들일 때 또는 키보드를 이용해서 문자를 입력할 때 등의 경우에 하드웨어 장치가 인터럽트를 발생 시킴
  • Interrupt Handler 가 처리
  • 인터럽트는 우선순위가 있음

3. 예외(Exception) 방식

  • cpu에서 자동으로 발생하는 이벤트로 처리할 수 없는 명령을 만났을 때 발생하는 것으로 다시 fault와 abort로 구분하는데 fault는 복구 가능한 에러이고 abort는 복구 불가능한 에러

소프트웨어적인 전가상화 방식은 VMWare가 개발한 방법인데 중간에 위치한 하이퍼바이저가 CPU가 인식할 수 있는 명령으로 변경해서 처리하기 때문에 오버헤드가 발생하고 구현이 까다로움

Xen이 단점을 극복하고자 Guest OS를 수정한 Hyper Call 방식을 제안하게 됨


📌 하드웨어 지원 기반 전가상화

  • 네이티브 방식호스티드 방식 둘 다 가능

  • 하이퍼바이저가 소프트웨어적으로 Guest OS가 요청한 명령을 현재 CPU에 수행할 수 있는 명령으로 변환해야 해서 오버헤드가 불가피하고 성능에 대한 문제가 발생할 수 밖에 없음

  • CPU 벤더들은 가상화를 지원하기 위한 새로운 기능이 탑재된 하드웨어를 출시

  • 처음부터 CPU에 가상화 기술을 탑재해서 하드웨어가 직접 수행하도록 해주는 것

  • Intel 의 VT -x 기술 또는 AMD 의 AMD-V 기술이 탑재된 CPU에서만 가능

  • 사용자 프로그램이 하드웨어의 가상화 기술을 통해 직접 요청이 가능한 방식

  • 게스트 OS가 트랩을 발생시킬 때 하이퍼바이저는 바이너리 트랜스레이션 없이 가상화 기술을 통해 하드웨어를 직접 제어 가능


💠 반가상화(Paravirtualization)

  • 소프트웨어적 전가상화의 단점을 보완하고자 등장
  • 반가상화 OS는 게스트 OS가 자신이 가상화 환경에서 동작하고 있다는 것을 인지
  • 게스트 OS가 하이퍼 바이저와 직접 통신을 수행해서 명령을 전달
  • 이 경우에는 게스트 OS의 소스코드를 수정해서 하이퍼바이저와 통신이 가능하도록 만들어 주어야 한다
  • 이 방식은 오픈 소스운영체제에서만 가능
  • 소프트웨어적 전가상화보다는 성능이 우수하고 특정 API(I/O나 메모리 집약형 작업 등)에 한해서는 하드웨어적 전가상화보다 성능이 우수

💠 하이브리드 가상화

  • 반가상화와 하드웨어 기반 가상화를 조합한 방식
  • 하드웨어 기반의 가상화는 하이퍼바이저를 단순하게 하고 운영체제의 수정이 필요하지 않는 전가상화로 성능을 향상시키는데 하드웨어 기반의 가상화는 반가상화보다 성능이 안좋은 경우가 있는데 I/O 작업이나 메모리 집약형 작업을 처리할 때
  • 대규모 데이터 분석을 처리하는 대형 데이터 센터 환경에서는 하드웨어 기반의 전가상화를 사용하기가 어려움
  • 하드웨어 기반의 가상화 환경에 반가상화의 네트워크와 디스크 드라이버를 사용하게 함으로써 I/O 작업이나 메모리 집약형 작업은 반가상화가 처리하도록 해서 성능을 향상 시킴

💠 운영체제 가상화

  • 컨테이너화
  • 물리 시스템에 설치된 운영체제 위에 컨테이너를 구동할 수 있는 컨테이너 엔진을 설치해서 컨테이너를 가상머신처럼 관리하는 방식
  • 하이퍼바이저에서는 가상머신의 운영체제는 서로 다를 수 있지만 컨테이너 기반의 가상화에서는 물리시스템에서 동작하는 운영체제를 모든 컨테이너가 공유하는 방식
  • 컨테이너가 서로 다른 운영체제를 사용하면 동작할 수 없음

📌 가상머신 vs 컨테이너 구조

┌────────────┐
│   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 없음 → 모두 같은 커널 공유 (≠ 불가)

0개의 댓글