CS

[CS] 컨텍스트 스위칭

programmer-faust 2025. 8. 28. 02:59
  • 순서
    1. 컨텍스트란?
    2. 컨텍스트 스위칭이란?
    3. 컨텍스트 스위칭의 과정
    4. 컨텍스트 스위칭 주의점
    5. 컨텍스트 스위칭의 비용
    6. 프로세스 vs 스레드에서의 컨텍스트 스위칭 차이
    7. C++/UE 관점
    8. 레이스 컨디션
  • 컨텍스트란?
    1. 프로세스나 스레드가 실행되던 상태를 말함
      • 레지스터 값
      • 프로세스 메모리 상태
      • CPU 상태
      • 커널에서 관리하는 PCB 정보
    2. 위 정보들을 저장해뒀다가 나중에 다시 불러오면 마치 중단된 지점에서 다시 이어서 실행되는 것 처럼 보이게 됨.
  • 컨텍스트 스위칭이란?
    1. CPU가 실행 중인 프로세스나 스레드의 상태를 저장하고, 다른 프로세스나 스레드의 상태로 교체하는 과정
    2. 운영체제가 멀티태스킹을 지원하기 위해 필수적으로 수행하는 작업
    3. 즉, 하나의 CPU에서 여러 프로그램 또는 스레드가 동시에 실행되는 것처럼 보이게 하는 핵심 기술
  • 컨텍스트 스위칭 과정
    1. 실행 중인 프로세스/스레드의 상태를 PCB에 저장
    2. 실행할 다른 프로세스/스레드의 PCB를 읽어 상태 복원
    3. CPU가 새로운 작업을 실행 시작
  • 컨텍스트 스위칭 주의점
    1. 성능 비용(오버헤드, 캐시 무효화)
    2. 동기화 문제(레이스 컨디션 ,데드락)
    3. 스케줄링 문제(기아상태, 응답 지연)
    4. 실시간성(지연 허용 불가한 환경에서 위험)
    5. 보안/안전성(주소 공간 전환 시 메모리 침범에 대한 보호 필요)
  • 컨텍스트 스위칭의 비용
    1. 저장/복원 오버헤드: 레지스터 값 등 저장.로드 필요함
    2. 캐시 미스 증가: CPU 캐시가 다른 프로세스로 바뀌며 무효화됨
    3. TLP 제한: 너무 자주 바뀌면 오히려 성능이 저하됨
    4. 즉 스레드 개수를 무조건 많이 늘린다고 성능이 좋아지지 않음
  • 프로세스 vs 스레드에서의 컨텍스트 스위칭 차이
    1. 프로세스 컨텍스트 스위칭
      • 주소 공간까지 바뀌므로 페이지 테이블 교체가 필요함
      • 비용이 큼
    2. 스레드 컨텍스트 스위칭
      • 같은 프로세스 안에서 실행되므로 주소 공간을 공유함
      • 메모리 맵핑은 유지, 레지스터/스택만 교체함 => 비용이 상대적으로 적음
  • C++/UE 관점
    1. C++에서 thread 여러 개를 만들면 OS 스레드 위에서 동작함 => 운영체제가 스레드 스케줄링하며 컨텍스트 스위칭이 발생
    2. 언리얼 엔진에서도 게임 쓰레드, 렌더 쓰레드, 작업 쓰레드 등 여러 스레드가 존재함.
    3. 컨텍스트 스위칭이 많으면 프레임 드롭  발생 가능
  • 레이스 컨디션
    1. 레이스 컨디션이란 두 개 이상의 프로세스나 스레드가 공유된 자원에 접근하고, 그 결과 접근 순서나 타이밍에 따라 달라질 수 있는 상황을 의미하는데, 이로 인해 결과값이 달라지거나, 데이터가 손상될 수 있음
  • 레이스 컨디션이 발생하는 이유
    1. 데이터 접근 타이밍: 만약 중단 시점에 해당 프로세스가 공유된 자원을 사용하던 중이었다면, 컨텍스트 스위칭 후 다른 프로세스가 해당 자원에 접근하게 됨.
    2. 동기화 부족: 공유 자원에 대한 접근을 제어하는 동기화 메커니즘이 적절히 사용되지 않았을 때
  • 레이스 컨디션 해결 방법
    1. 공유 자원에 하나의 스레드만 접근할 수 있도록 상호배제를 구현하는 것이 중요함. 이를 위해 세마포어나 뮤텍스를 사용하여 해결할 수 있음.
      • 하지만 데드락의 조건 중 하나인 상호배제를 충족하므로 잘못 구현시 컨텍스트 스위칭과 맞물리며 데드락이 발생할 수 있음

'CS' 카테고리의 다른 글

[CS]busy-waiting  (3) 2025.08.28
[CS]임계영역과 데드락  (0) 2025.08.28
[CS] 캐시의 지역성  (0) 2025.08.28
[CS] 프로세스와 스레드  (2) 2025.08.28
[CS]메모리 단편화  (1) 2025.08.28