OS · CONTEXT SWITCH

컨텍스트 스위칭 비용 해부

타이머 인터럽트 한 번은 커널 진입, PCB 저장, 스케줄러 선택, 주소 공간 교체, 레지스터 복원, 사용자 모드 재개를 연쇄적으로 일으킵니다.

전환 자체보다 전환 뒤 다시 맞추는 비용이 커진다 A 실행 캐시 적중 trap + PCB 저장 직접 비용 B 복귀 레지스터 복원 캐시/TLB 재학습 프로세스가 바뀌면 주소 공간과 working set이 달라져 점선 구간의 숨은 비용이 커진다.

타이머 선점부터 복귀까지

A → B
1 timer interrupt

CPU가 사용자 모드를 멈추고 커널 모드로 진입합니다.

trap frame 생성
2 save registers

PC, SP, flags, 범용 레지스터를 PCB에 저장합니다.

PCB[<PID>] 갱신
3 scheduler pick

Ready Queue에서 다음 task_struct를 선택합니다.

priority, vruntime
4 page table / TLB

CR3와 주소 공간이 바뀌며 TLB 항목을 다시 맞춥니다.

ASID가 있으면 일부 유지
5 restore registers

B의 PCB에서 저장된 CPU 상태를 레지스터로 복원합니다.

PC가 B의 재개점
6 user mode resume

권한을 낮추고 B가 중단됐던 명령어 근처부터 실행됩니다.

iret/sysret 계열

비용 분해

overhead
직접 오버헤드

커널 진입, 레지스터 저장/복원, 스케줄러 실행 시간입니다.

캐시 오염

B의 working set이 올라오며 A의 캐시 라인이 밀려납니다.

TLB 비용

주소 변환 캐시가 비거나 태그 확인이 늘어 page walk가 생깁니다.

측정 지표

/proc/<PID>/status와 vmstat의 cs 값을 봅니다.

오버헤드가 커지는 지점

hot spots
run queue runnable 프로세스가 많으면 선택과 재선점 빈도가 증가합니다. medium
working set 서로 다른 데이터 집합이 교차 실행되면 캐시 locality가 깨집니다. high
address space 다른 프로세스 전환은 페이지 테이블 기준이 달라 TLB 비용이 큽니다. high

프로세스 전환 vs 스레드 전환

compare
프로세스 간 전환
  • 페이지 테이블 기준이 바뀔 수 있음
  • TLB 재적중과 캐시 재학습 비용이 큼
  • 격리는 강하지만 전환은 무거움
같은 프로세스의 스레드 전환
  • 주소 공간을 공유해 TLB 유지 가능
  • 공유 데이터는 캐시 재사용 가능성이 큼
  • 격리는 약하지만 전환은 가벼움