개념정리
✅ Chapter 10 – 가상화 개념 정리 (1부)
📌 1. 가상화(Virtualization)의 개요
-
가상화는 컴퓨터 자원의 논리적 추상화이다.
-
사용자나 응용 프로그램이 실제 자원(HW, OS 등)의 세부를 모르게 하는 기술이다.
-
Wikipedia 정의: "Virtualization is the act of creating a virtual (rather than actual) version of something..."
📌 2. 가상화 상태의 수학적 표현
-
시스템 상태 전이: Si → Sj
-
가상화된 상태 전이: S'i → S'j
-
전환 함수 V가 Si를 S'i로 매핑함.
-
이 전환은 ABI 또는 ISA 수준에서 적용될 수 있다.
📌 3. 가상화 계층 종류
1) ABI 레벨 (프로세스 가상 머신)
-
사용자 응용 관점의 가상화.
-
예시: Java Virtual Machine (JVM)
2) ISA 레벨 (시스템 가상 머신)
-
HW 명령어 수준에서의 가상화.
-
Guest OS가 하이퍼바이저 위에서 동작함.
📌 4. 프로세스 VM 유형
| 유형 | 설명 | 예시 |
|---|---|---|
| Multiprogrammed System | 단일 프로세스가 마치 전체 시스템(CPU, 메모리, 디스크 등)을 독점하는 것 같게함. | 없음 |
| Emulator | 서로 다른 ISA 변환 User ISA만 에뮬레이션 인터프리터 방식 - 인스트럭션을 하나씩 해석하여 수행 - 스타트업 시간에 대한 오버헤드가 없으나 느림 바이너리 트랜슬레이터 방식 - 소스 인스트럭션을 블럭단위로 변환하여 수행 - 스타트업 오버헤드 존재하나 빠름 - Dynamic Binary Translator라고 부르기도 함. |
QEMU |
| Same ISA Binary Optimizer | 게스트와 호스트가 동일한 ISA를 가자는 경우 최적화하여 사용 | Dynamo |
| High-Level Language VM | 언어 독립 실행환경 3개의 다른 프로세스 가상머신과 유사 하드웨어와 운영체제의 의존 관계 최소화가 중점 |
JVM, CLR |
프로세스 가상머신 그룹핑
동일한 ISA
- Multiprogrammed System
- Same ISA Binary Optimizer
다른 ISA
- Emulator(Dynamic Translator)
- High-Level Language VM
📌 5. 하이퍼바이저
하이퍼바이저 용어
하이퍼바이저(hypervisor)
- 가상화 소프트웨어(virtualization software) = 가상머신 모니터(virtual machine monitor)
호스트 머신(host machine)
- 하이퍼바이저가 설치되는 물리시스템
게스트 머신(guest machine)
- 하이퍼바이저가 관리하는 가상머신
하이퍼바이저 타입
- 물리시스템에 직접설치 여부로 결정
- Type 1, Type2
Type 1(=bare metal)(=native) 하이퍼바이저
- 물리시스템 하드웨어에 직접 설치되어 가상머신 관리
- ex) KVM, Xen, Hyper-V
- 물리시스템의 운영체제 역할을 수행
- 대규모 클라우드 컴퓨팅 서비스를 위해 도입
- 클라우드 서비스의 신속한 확장과 축소가 가능하도록 확장성(Scalability)을 보장
- 가상머신과 호스트머신간 빠른 통신 가능
- 물리시스템의 하드웨어적 가상화 지원
- Intel
- VT-x
- vmx flag, virtual machine extensions
- AMD
- AMD-V
- svm flag, secure virtual machine
- Intel
Type 2(=hosted) 하이퍼바이저
- 호스트머신의 운영체제 위에서 마치 어플리케이션처럼 설치
- 가상머신을 단일 물리시스템에 설치하고 운영하는데 편리함
- 호스트머신의 하드웨어에 직접접근이 어려움
- Type1 대비 오버헤드 발생
KVM
- Type1 이자 Type2 하이퍼바이저
- KVM은 리눅스 커널 모듈로 작동, 리눅스 운영체제가 설치된 후 KVM이 동작 -> Type 2에 가까움
- KVM 모듈이 설치된 리눅스 운영체제 자체가 Type1 하이퍼바이저
- FreeGSD의 bhybe도 마찬가지인듯
Xen
- 케임브리지 대학의 연구 프로젝트
- 반가상화 하이퍼바이저로 시작
- 전가상화 + Type1(하드웨어 지원)
- 도메인 개념 도입(특권레벨)
- 특권 도메인(Dom 0): 물리시스템의 장치에 접근이 가능한 가상머신
- 게스트 도메인(Dom U): 일반 가상머신
- CPU, 메모리, 인터럽트는 직접처리
- 디바이스에 대한 처리는 특권 도메인이 처리(하이퍼콜을 통해 장치에 접근)
하이퍼바이저의 라이프 사이클
VMX
- CPU에서 하드웨어 기반의 전가상화를 가능하게 하는 명령어 집합
인텔 VT-x 기준 VMM 라이프 사이클
- vmx 플래그 활성화(/proc/cpuinfo)
- VMM은 프로세서 자원, 물리메모리, 인터럽트 관리, I/O 제어
- VMM은 vmx의 루트모드(root)에서 동작
- 가상머신은 비루트(non-root) 모드에서 실행
- 루트모드와 비루트 모드 사이의 전환 빈번하게 발생
- VMM 트랜지션(transition)
- VM Entries(VMRESUEM, VMLAUNCH): 루트 -> 비루트 모드 전환, 가상머신 실행?
- VM Exit: 루트모드로 전환
VMCS(Virtual Machine Control Structure)
- 여러 가상머신에 대한 상태 저장
- 메모리상에 존재, 가상머신별로 존재
- 컨텍스트 스위칭 시 VMCS에 정보저장
- 6개의 논리적 그룹
- Guest State Area: VM Exit, VM Entires 때 프로세서의 상태 저장
- Host State Area: VM Exit 때 프로세서의 상태를 로드
- VM Execution Control Fields: vmx의 비특권 모드에서 실행되는 프로세서의 명령에 대해 컨트롤 하는 필드
- VM Exit Control Fields: VM Exit을 제어하는 필드
- VM Entry Control Fields: VM Entries를 제어하는 필드
- VM Exit Information Fields: VM Exits의 원인에 대한 정보를 저장
하이퍼바이저의 라이프 사이클

- VMXON: VMX 명령을 실행할 수 있는 단계로 진입
- VM Entries: VMM은 한 번에 하나씩 가상머신을 실행
- VM Exit: VMX의 비특권 모드에서 특권 모드로 전환
- VM Exit가 수행되면 제어권을 갖고 VM Entries 명령을 통해 종료된 가상머신을 재실행
- VMXOFF: VMM 종료
가상화
가상화 개념
- 실체적인 컴퓨터 시스템의 가상 버전을 만드는 행위
- 컴퓨터 시스템의 가상버전 = 하드웨어, 스토리지 장치, 네트워크 등
- 컴퓨터의 가상 버전인 가상머신을 하이퍼바이저를 통해 생성
클라우드 서비스에서의 가상화
장점
- 적은 컴퓨팅 리소스 하드웨어 구매로 비용 절감
- 쉬운 백업과 재해복구
- 중단 없는 비즈니스
- 효율적인 IT 운영
단점
- 가상화 소프트웨어 및 가상화 지원 하드웨어 구매로 초기 투자비용발생
- 소프트웨어 라이선스 비용 발생
- 초기 교육 필요
논리적 시스템 생성 관점에서 가상화 타입 4가지
| 가상화 방식 | 특징 | 장점 | 단점 |
|---|---|---|---|
| 전가상화 (Full Virtualization) | 게스트 OS 수정 없음 가상화 환경에서 동작하는 인지 못함 하드웨어 관련 명령어 직접 요청-> 하이퍼바이저가 가로채서 처리해야함 -> 오버헤드 발생 SW 기반 전가상화와 HW 지원 기반 전가상화로 구분 |
기존 OS 사용 가능 | 트랩 및 에뮬레이션에 따른 성능 저하 |
| 반가상화 (Paravirtualization) | Guest OS가 Hypervisor와 직접 통신. 하이퍼콜 사용 | 성능 향상 | OS 수정 필요 |
| 하이브리드 가상화 | HW 지원 전가상화 + 반가상화 드라이버 | 성능과 호환성 절충 | 복잡한 구현 |
| OS 레벨 가상화 (컨테이너) | 단일 커널을 여러 컨테이너가 공유 | 경량, 빠름 | OS 종속성 있음 (이기종 OS 불가) |
가상화 타입 특징 요약

물리시스템에서 CPU가 동작하는 방식

- Ring 0 - Ring 3 특권레벨
- 하이퍼바이저는 가상머신에 설치된 OS보다 더 높은 특권레벨 필요
전가상화
-
게스트 OS 수정 없음
-
가상화 환경에서 동작하는 인지 못함
-
하드웨어 관련 명령어 직접 요청-> 하이퍼바이저가 가로채서 처리해야함 -> 오버헤드 발생
-
SW 기반 전가상화와 HW 지원 기반 전가상화로 구분
SW 기반 전가상화
기본개념
- 게스트 OS로부터 요청이 오면 하이퍼바이저가 소프트웨어적으로 처리
- 바이너리 트랜슬레이션이라고 함
동작방식

- 게스트 OS가 Ring1으로 이동
- Ring 0에 하이퍼바이저 위치
- 게스트 OS가 가상화가 불가능한 명령 -> 새로운 명령셋으로 바이너리 트랜슬레이션
- 게스트 OS에서 특권 명령을 수행할 때 트랩 발생 -> 하이퍼바이저로 제어가 넘어감
- 하이퍼바이저가 CPU가 인식할 수 있는 명령으로 변경하여 하드웨어에 전달
특권 명령 실행을 위한 3가지 이벤트
트랩(trap)
- printf(“%s\n”, str); 호출 → 운영체제의 쓰기 함수(write function) 시스템 콜(system call) → 표준 출력(standard output) 모니터로 출력
- 사용자 프로그램은 모니터에 직접 쓸 수 없기 때문에 printf() 함수가 호출될 때 트랩이 발생 → 트랩 핸들러(trap handler)가 호출됨
- 사용자 모드(user mode) → 커널 모드(kernel mode)로 전환
- 운영체제가 쓰기 함수를 호출하여 모니터에 해당 문자열 출력
- 커널 모드 → 사용자 모드로 제어 이동
인터럽트(interrupt)
- 하드웨어에서 발생(트랩은 사용자 프로그램에서 발생)
- USB를 시스템에 연결할 때, NIC를 통해 패킷을 받아 들일 때
- 키보드를 통해 문자를 입력할 때
- 인터럽트는 비동기적하게 발생
- 인터럽트 핸들러를 통해 처리
익셉션(exception)
- CPU에서 발생
- ex) divide by zero
- 익셉션은 폴트(fault)와 어보트(abort)로 구분
- 폴트: 복구가 가능한 에러
- 어보트: 복구가 불가능한 에러
반가상화 등장 배경
- 바이너리 트랜슬레이션은 VMWare에서 개발
- 하이퍼바이저가 CPU가 인식할 수 있는 명령으로 변경해야함 -> 오버헤드 발생 + 구현 까다로움
- Xen이 위 단점을 보완하기 위해 OS를 수정한 하이퍼콜 방식을 제안(반가상화)
하드웨어기반 전가상화
CPU에 가상화 기능 탑재
- VT-x(Intel), AMD-V(AMD)
- 바이너리 트랜슬레이션을 제거하고 가상화 기술이 구현된 하드웨어가 직접 수행
동작방식

- 게스트 OS가 트랩을 발생시킬 때 바이너리 트랜슬레이션 없이 가상화 기술을 통해 하드웨어를 직접 제어
- 비루트 모드: 게스트 OS가 Ring 0에서 동작
- 루트 모드: 하이퍼바이저가 Ring 0보다 높은 권한으로 실행
- 민감한 요청이 게스트 OS로부터 발생하면 하이퍼바이저로 트랩 발생
반가상화
Paravirtualization
- Para: 그리스 어원으롤 beside, with, alongside
- Alongside virtualization
특징
- 소프트웨어적 전가상화의 단점을 보완하기 위해 Xen에서 고안
- 게스트 OS는 자신이 가상화 환경에서 실행됨을 인지
- 게스트 OS를 수정하여 하이퍼바이저와 통신할 수 있는 API 추가
- 게스트 OS를 수정하기 위해서는 운영체제가 오픈소스여야함(리눅스)
전가상화 트랩 vs 반가상화 트랩

- SW적으로 구현한 반가상화
- 반가상화는 가상화를 지원하는 하드웨어에서도 동작 가능
- 하드웨어 지원 가상화가 반드시 전가상화만을 의미하지 않음
- 가상화를 전가상화, 반가상화, 하드웨어지원 가상화로 구분하기도 함
반가상화 장점
- 반가상화가 하드웨어 기반 전가상화보다 성능이 좋은 예
- 가상머신에서는 가상시간(virtual time) 뿐만 아니라 시스템의 리얼타임 (real time) 정보가 필요
- 운영체제에서는 타이머 인터럽트를 통해 최신 시간정보를 관리
- 운영체제가 유휴상태(idle) 상태에서도 타이머 인터럽트를 처리
- 만약 가상머신에서 타이머 인터럽트를 받지 못할 경우 시간관리에 장애
- 전가상화의 경우
- 하이퍼바이저가 타이머 인터럽트를 주기적으로 가상머신 발생시켜주거나,
- 가상머신이 아이들 상태에서 러닝(running) 상태로 변경될 때 인터럽트 발생
- 많은 오버헤드를 발생, 불안정성, 가상화의 확장성 제약
- 반가상의 경우
- 게스트 OS를 수정 → 아이들 코드 블록에 하이퍼바이저에게 특정시간 후에 타이머 인터럽트를 생성하도록 요청하는 코드 추가
반가상화 단점
- 가상 CPU 핸들링의 어려움
가상 CPU는 물리 CPU와 동작방식이 다를 수 있음
– 하이퍼바이저에서 정의 하는 방식에 따라 달라짐
– 가상 CPU까지 리눅스 커널 내에서 핸들링하는 것은 어려움
– 물리 CPU에서는 정상적으로 동작하는 커널이라 하더라도 가상 CPU에
서는 다르게 동작할 수 있음
– 모든 사항을 고려하여 커널을 개발하는 것은 비효율적
– 예: x86 아키텍처 CPUID CPU 명령
• 프로세서에 대한 정보를 얻기 위해 사용
• 사용자 공간에서(user space)에서도 CPU 정보를 얻기 위해 호출
• CPUID 명령을 사용하는 사용자 프로그램은 가상화 환경과 비가상화 환경에
서 동작하는 방식이 같아야 하고 결과가 동일해야 함
• CPUID를 처리하는 방식이 물리 CPU와 가상 CPU가 다르다면 문제가 발생
하이브리드 가상화
- 하이퍼바이저를 단순화하고 운영체제 변경 불필요
- 운영체제의 수정이 필요치 않는 전가상화 환경에서 성능 향상
- 소프트웨어 기반 반가상화보다 성능이 떨어지는 상황 존재
- I/O나 메모리 집약형 작업 (memory intensive workload) 처리 시
- 엔터프라이즈급 환경에서 메모리/IO 집약형 작업 성능 이슈
반가상화와 하드웨어 가상화의 조합 방식
- I/O 집약형 작업:
하드웨어 기반 가상화 환경에 반가상화의 네트워크 및 디스크 드라이버 사용 → 성능 차이 해소 - 메모리 집약형 작업:
작업 중인 프로세서에 대한 MMU를 하드웨어가 지원하지 못하는 경우 → 소프트웨어적으로 가상화
(2007년도 기준)
결론
- 하드웨어 기반 가상화 성능에 제약이 있는 환경에서 반가상화를 적용하여 성능 개선
- 하드웨어 지원 가상화를 기본으로 사용
- I/O, 메모리 집약형 작업에 반가상화 디바이스 드라이버를 이용
📌 10. OS 레벨 가상화의 특징
-
커널을 공유하여 오버헤드가 거의 없음.
-
컨테이너 기반 가상화 (LXC, Docker 등)
-
이기종 OS 불가, 동일 커널 기반에서만 가능.
-
리눅스에서 namespace, cgroups로 구현됨.
✅ Chapter 11 – CPU 가상화
📌 1. CPU 가상화 개념
-
목적: 게스트 OS가 실제 HW를 사용하는 것처럼 속이되, 하이퍼바이저가 제어하는 방식.
-
하이퍼바이저는 guest 명령을 가로채어 처리하거나 변환한다.
📌 2. x86 특권 수준과 실행 모드
| 구분 | 설명 |
|---|---|
| Ring 0 | 커널 모드 (특권 명령 실행 가능) |
| Ring 3 | 사용자 모드 (애플리케이션 실행) |
| Guest OS는 Ring 0에서 실행되기를 기대하지만, 실제로는 Ring 1 이하로 격하됨. |
📌 3. 문제: 트랩이 발생하지 않는 명령어
-
일부 **비트 조작 명령어(예: POPF)**는 트랩이 발생하지 않음.
-
예: Interrupt Flag 변경 시 무시 → 하이퍼바이저가 상태 변화를 인식하지 못함 → 예측 불가능한 결과
📌 4. CPU 가상화 기법 요약
| 기법 | 특징 | 대표 기술 |
|---|---|---|
| 에뮬레이션 | ISA 변환. 느림. | QEMU |
| Binary Translation (BT) | 트랩 안 걸리는 명령을 안전한 명령으로 변환 | VMware |
| Hypercall (반가상화) | OS가 하이퍼바이저에 직접 요청 | Xen |
| HW 지원 가상화 | VT-x(Intel), AMD-V를 활용하여 Root/Non-root 모드 분리 | KVM 등 |
📌 5. Intel VT-x 구조
-
CPU 상태 전환:
- VMXON → VM Entry → VM Exit → VMXOFF
-
VMCS(Virtual Machine Control Structure):
- 게스트/호스트 상태, 제어, 입출력 정보 등을 저장
| 구성 영역 | 설명 |
|---|---|
| Guest State Area | VM Entry 시 게스트 상태 |
| Host State Area | VM Exit 시 호스트로 복귀할 상태 |
| Control Fields | 입출력 권한, 예외 발생 조건 등 제어 |
| Exit Info Fields | Exit 사유, 명령어 위치 등 기록 |
📌 6. 실행 흐름
text
복사편집
1. VMXON → VMM 활성화 2. VMLAUNCH or VMRESUME → 게스트 진입 3. VMEXIT → 하이퍼바이저로 제어 이동 4. VMXOFF → VMM 종료
📌 7. 라이프사이클 예시
| 단계 | 설명 |
|---|---|
| VMXON | 가상화 모드 진입 |
| VM Entry | 게스트 실행 |
| VM Exit | 호스트 복귀 (예외/인터럽트/IO 발생 시) |
| VMXOFF | 종료 및 상태 복구 |
✅ Chapter 11 – 메모리 가상화
📌 1. 기본 개념
-
CPU는 **가상 주소(VA)**를 사용해 메모리를 접근하며, MMU가 이를 **물리 주소(PA)**로 변환한다.
-
가상화 환경에서는 **추가로 가상물리주소(GPA) → 머신주소(HPA)**로 변환 필요
📌 2. 변환 계층
css
복사편집
Guest Virtual Address (GVA) → Guest Physical Address (GPA) → Host Physical Address (HPA)
📌 3. 구현 방식 비교
| 방식 | 설명 | 장점 | 단점 |
|---|---|---|---|
| TLB 에뮬레이션 | 하이퍼바이저가 TLB를 직접 에뮬 | 간단 | 성능 저하 (TLB miss 등) |
| Shadow Page Table | VMM이 게스트와 별도 page table 관리 | 호환성 ↑ | 유지 비용 큼 |
| Direct PT Access (반가상화) | 게스트가 머신주소 사용 | 성능 ↑ | OS 수정 필요 |
| HW 지원 (Nested Page Table) | EPT(Intel), NPT(AMD)로 2단계 주소 변환 | 고성능, OS 수정 불필요 | 메모리 접근이 최대 5번 필요할 수 있음 |
📌 4. Nested Page Table 단점과 보완
-
최대 5단계 접근 오버헤드
- GVA → GPA → HPA → Memory
-
보완 방법
-
TLB 캐시 활용
-
Large Pages (HugeTLB)
-
**ASID (Address Space ID)**로 VM 간 TLB 공유 가능
-
✅ Chapter 14 – 컨테이너 기본 개념
📌 1. 컨테이너란?
-
정의: 애플리케이션과 그 실행 환경(라이브러리, 설정 등)을 격리된 공간에 패키징한 실행 단위
-
동작 원리: 호스트 OS의 커널을 공유하며, 각 컨테이너는 namespace, cgroup 등을 통해 격리
📌 2. 컨테이너의 장점
| 분류 | 장점 |
|---|---|
| 개발 및 배포 | 환경 통일성 확보, 빠른 배포 및 스케일링 |
| 운영 관리 | 리소스 경량화, 빠른 시작, 빠른 복구 |
| 보안 | 애플리케이션 수준 격리 (sandbox) |
| 이식성 | 어느 플랫폼에서도 동일하게 실행 가능 |
📌 3. VM vs 컨테이너 비교
| 항목 | VM | 컨테이너 |
|---|---|---|
| OS 실행 | Guest OS 실행 | 호스트 OS 커널 공유 |
| 부팅 시간 | 수 분 이상 | 수 초 내외 |
| 리소스 | 무겁고 개별 할당 | 경량, 공유 자원 |
| 활용 예 | 다양한 OS 실행 | 마이크로서비스, DevOps, CI/CD 파이프라인 |
📌 4. 컨테이너 기술의 역사
| 연도 | 기술 | 설명 |
|---|---|---|
| 1979 | chroot | 파일 시스템 격리 시작 |
| 2000 | FreeBSD Jail | OS-level 가상화 구현 |
| 2006 | Google cgroups | 리소스 제어 기능 |
| 2008 | LXC (Linux Container) | 컨테이너 초기 형태 |
| 2013 | Docker | 컨테이너 표준화 및 대중화 |
| 2015 | Kubernetes | 오케스트레이션 프레임워크 |
| 2017 | OCI, CRI-O | 컨테이너 표준 런타임 API 정립 |
📌 5. 컨테이너 구성 기술 핵심
| 기술 | 설명 |
|---|---|
| Namespace | 프로세스, 네트워크, 사용자, 파일 시스템 등 격리 |
| cgroup | CPU, 메모리 등 리소스 사용량 제한 |
| UnionFS | 계층형 파일 시스템. 이미지 + 컨테이너 상태 분리 |
📌 6. 컨테이너가 적합한 경우
-
Dev → Prod 동일한 환경이 필요할 때
-
빠른 배포 및 복구가 중요한 경우
-
마이크로서비스 구조
-
애플리케이션 수명이 짧고 반복 배포가 필요한 경우