트랩 앤 에뮬레이트 (Trap-and-Emulate)
Jan 28, 2026
핵심 개념
섹션 제목: “핵심 개념”Trap-and-Emulate는 게스트 OS가 특권 명령어를 실행하려 할 때 트랩이 발생하고, VMM이 이를 가로채 에뮬레이션하여 가상화를 구현하는 기법이다. 게스트 OS는 자신이 커널 모드에서 실행된다고 믿지만, 실제로는 사용자 모드에서 실행된다.
비유하면, 학교에서 학생(게스트)이 “교실 조명 끄기”(특권 명령)를 시도하면, 선생님(VMM)이 대신 조명을 끄고 학생에게 돌아가라고 하는 것이다.
동작 원리
섹션 제목: “동작 원리”실행 흐름
섹션 제목: “실행 흐름”Guest OS 구조 (물리적으로는 사용자 모드)
User Processes 가상 사용자 모드
Guest Kernel 가상 커널 모드 — 특권 명령어 실행 시 TRAP
Trap-and-Emulate 흐름
1 Guest OS 실행
물리적 사용자 모드 2 특권 명령어 시도
게스트 커널이 실행 3 TRAP 발생
CPU가 VMM으로 제어 전달 4 VMM 에뮬레이션
VCPU 상태 업데이트 5 게스트로 리턴
제어권 반환 반복
VCPU (Virtual CPU)
섹션 제목: “VCPU (Virtual CPU)”VMM이 유지하는 각 게스트의 CPU 상태 데이터 구조:
- 가상 레지스터 값
- 가상 모드 (가상 사용자/커널 모드)
- 가상 인터럽트 플래그
성능 특성
섹션 제목: “성능 특성”| 명령어 유형 | 실행 방식 | 성능 |
|---|---|---|
| 비특권 명령어 | 네이티브 속도로 직접 실행 | 빠름 |
| 특권 명령어 | 트랩 + 에뮬레이션 오버헤드 | 느림 |
I/O 관련 명령어가 주로 특권이므로 I/O가 병목이 된다.
x86의 한계
섹션 제목: “x86의 한계”일부 명령어가 사용자 모드에서도 트랩 없이 실행되는 문제:
- 예:
popf— 커널 모드에서는 모든 플래그 변경, 사용자 모드에서는 일부만 변경하고 트랩 없음 - 이런 “special instructions” 때문에 순수 trap-and-emulate 불가능
- 해결책: 바이너리 변환(Binary Translation) 또는 하드웨어 가상화 지원(VT-x/AMD-V)
게스트 OS가 인터럽트를 비활성화하려 할 때:
CLI 명령어 에뮬레이션
1 Guest OS: CLI
인터럽트 비활성화 시도 2 TRAP 발생
사용자 모드에서 특권 명령어 3 VMM 처리
VCPU의 가상 인터럽트 플래그 비활성화 4 게스트로 리턴
인터럽트 비활성화됐다고 인식 관련 개념
섹션 제목: “관련 개념”- 바이너리 변환 (Binary Translation) - x86의 special instructions 문제를 해결하기 위한 소프트웨어 기반 기법
- 하드웨어 가상화 지원 (VT-x/AMD-V) - trap-and-emulate를 하드웨어로 효율적으로 구현한 기술
- 가상화 (Virtualization) - 가상화의 전체 개념과 VCPU 등 핵심 구성 요소
- 준가상화 (Paravirtualization) - 트랩 대신 hypercall을 사용하는 대안 가상화 기법
- 하이퍼바이저 유형 (Type 0/1/2 Hypervisor) - trap-and-emulate를 활용하는 하이퍼바이저의 유형