비순서 실행(Out-of-Order Execution, OoOE)은 CPU가 명령어를 프로그램 순서가 아닌 데이터 의존성과 실행 유닛 가용성에 따라 재배열해 실행하는 기법이다. 파이프라인 스톨을 줄여 IPC를 향상시킨다.
핵심 구조:
1. 명령어 큐 → 발행 단계
2. 예약 스테이션 (Reservation Station): 피연산자가 준비된 명령어 대기
3. 공통 데이터 버스 (CDB): 결과 방송
4. 재정렬 버퍼 (ROB): 프로그램 순서로 커밋
실행 순서:
원본: LOAD R1←[M]; ADD R2,R1,1; MUL R3,R4,R5
OoO: MUL 먼저 실행 (R1 대기 없이) → ADD R1 준비되면 실행
레지스터 르네이밍
WAW 위험 제거:
프로그램: R1 = A
R1 = B (WAW)
르네이밍: p1 = A
p2 = B (물리 레지스터 분리)
보안 취약점
Spectre / Meltdown:
예측 실행 중 캐시에 비밀 정보 로드
→ 캐시 타이밍 측정으로 유출
→ 마이크로코드 패치 + 컴파일러 보호
관련 개념