콘텐츠로 이동

트랩 앤 에뮬레이트 (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 게스트로 리턴
제어권 반환
반복

VMM이 유지하는 각 게스트의 CPU 상태 데이터 구조:

  • 가상 레지스터 값
  • 가상 모드 (가상 사용자/커널 모드)
  • 가상 인터럽트 플래그
명령어 유형실행 방식성능
비특권 명령어네이티브 속도로 직접 실행빠름
특권 명령어트랩 + 에뮬레이션 오버헤드느림

I/O 관련 명령어가 주로 특권이므로 I/O가 병목이 된다.

일부 명령어가 사용자 모드에서도 트랩 없이 실행되는 문제:

  • 예: popf — 커널 모드에서는 모든 플래그 변경, 사용자 모드에서는 일부만 변경하고 트랩 없음
  • 이런 “special instructions” 때문에 순수 trap-and-emulate 불가능
  • 해결책: 바이너리 변환(Binary Translation) 또는 하드웨어 가상화 지원(VT-x/AMD-V)

게스트 OS가 인터럽트를 비활성화하려 할 때:

CLI 명령어 에뮬레이션
1 Guest OS: CLI
인터럽트 비활성화 시도
2 TRAP 발생
사용자 모드에서 특권 명령어
3 VMM 처리
VCPU의 가상 인터럽트 플래그 비활성화
4 게스트로 리턴
인터럽트 비활성화됐다고 인식