컨텍스트 스위칭

낚시하는 곰·2025년 4월 1일

krafton jungle

목록 보기
32/52

컨텍스트 스위칭이란?

컨텍스트 스위칭(Context Switching)은 CPU가 실행 중인 프로세스(또는 스레드)를 중단하고, 다른 프로세스로 전환하는 작업.

프로세스가 실행 중인데 다른 프로세스가 선점하면 어떻게 될까?

선점형 스케줄링은 운영체제가 실행 중인 프로세스를 강제로 중단하고, 다른 프로세스를 실행하는 방식입니다. 새로운 프로세스가 높은 우선순위를 가지거나, 현재 실행 중인 프로세스의 타임 슬라이스(Time Slice)가 끝나면 발생함.

컨텍스트 스위칭이 발생되는 과정

  • 현재 실행 중인 프로세스(P1)의 레지스터 값, 프로그램 카운터(PC), 스택 포인터(SP) 등을 저장
  • 새로운 프로세스(P2)의 레지스터 값, 프로그램 카운터(PC), 스택 포인터(SP) 등을 로드
  • CPU가 새로운 프로세스(P2)를 실행
graph TD;
    A[현재 프로세스 실행 중] --> B{스케줄러가 새로운 프로세스 실행 필요?}
    B -->|Yes| C[현재 프로세스의 컨텍스트 저장]
    C --> D[새로운 프로세스의 컨텍스트 복원]
    D --> E[새로운 프로세스 실행]
    E --> F{새로운 프로세스 실행 완료?}
    F -->|Yes| G[프로세스 종료 또는 Ready Queue로 이동]
    F -->|No| B
    B -->|No| A

프로그램 카운터(PC)란?

  • 프로그램 카운터(PC) 는 CPU가 현재 실행 중인 명령어의 메모리 주소 를 가리키는 레지스터입니다.
  • 프로세스가 실행 중일 때, PC 값은 현재 실행 중인 명령어를 가리키며, 실행이 진행됨에 따라 증가 합니다.
  • 컨텍스트 스위칭 시, 현재 프로세스의 PC 값이 저장되고, 새로운 프로세스의 저장된 PC 값이 복원됨

컨텍스트는 어디에 저장될까?

컨텍스트 스위칭 시 운영체제(OS)는 실행 중이던 프로세스의 상태(문맥)를 저장하고, 다음 프로세스가 실행될 때 이전 상태를 복원합니다.

저장 데이터설명저장 위치
프로그램 카운터(PC)실행 중이던 명령어의 위치PCB (커널 메모리)
CPU 레지스터연산 중이던 값들PCB (커널 메모리)
스택 포인터(SP)함수 호출 시 사용되는 위치PCB (커널 메모리)
프로세스 상태실행 중, 대기 중 등의 상태 정보PCB (커널 메모리)
페이지 테이블 정보프로세스의 메모리 매핑 정보PCB (커널 메모리)
  • 이 데이터들은 "RAM(주기억장치)" 또는 "커널 메모리"에 저장되므로, 프로그램이 종료되면 사라짐.
  • 즉, 컨텍스트 스위칭이 프로그램 종료 후에도 데이터를 저장하는 역할을 하는 것은 아님!

프로세서가 많은 요청을 처리하는 방식

(1) Ready Queue(준비 큐)로 대기
새로운 프로세스들이 생성되면 Ready Queue(준비 큐) 에 추가됨
CPU 스케줄러(Scheduler) 가 적절한 알고리즘(예: FCFS, RR, Priority)을 사용해 다음 실행할 프로세스를 선택
준비 큐의 길이가 길어지면 CPU 부하가 증가하고 대기 시간이 길어짐

(2) 선점형 스케줄링 발생 (Preemptive Scheduling)
현재 실행 중인 프로세스가 더 높은 우선순위의 프로세스에게 선점당할 수 있음
운영체제는 우선순위(priority) 또는 타임 슬라이스(time slice) 를 기준으로 실행 순서를 조정
예를 들어, 라운드 로빈(RR) 방식에서는 각 프로세스가 일정 시간(CPU Time Slice)만 사용 후 교체됨

(3) 인터럽트 처리 (Interrupt Handling)
많은 요청이 들어오면 인터럽트(Interrupt)가 발생하여 CPU의 실행 흐름이 변경될 수 있음
하드웨어 인터럽트(예: 키보드 입력, 네트워크 요청) 또는 소프트웨어 인터럽트(예: 시스템 호출)가 발생하면 운영체제가 인터럽트를 우선 처리
인터럽트 서비스 루틴(ISR, Interrupt Service Routine)이 실행되어 요청을 처리하고 다시 프로세스로 복귀

(4) CPU 과부하 및 Context Switching 증가
문맥 교환(Context Switching)이 빈번하게 발생하면 CPU 성능이 저하됨
특히 프로세스가 많아질수록 CPU는 스케줄링 오버헤드가 증가
너무 많은 프로세스가 동시에 실행되면 CPU가 처리하지 못하고 대기 시간이 길어질 수 있음


프로세스 수 증가 시 생길 수 있는 문제

1. 스위칭 비용 증가 (Overhead)

  • 각 프로세스의 상태(레지스터, 스택 포인터, PC 등)를 저장/복원하는 작업은 시간이 듦.
  • 프로세스가 많아지면 스위칭 횟수도 늘어남 → 그만큼 CPU 자원이 스위칭에 낭비됨.

2. 캐시 무효화 (Cache Thrashing)

  • CPU는 L1/L2 캐시에 최근 데이터를 저장함.
  • 프로세스를 바꿀 때 마다 캐시 내용이 무효화됨 → 다시 로딩해야 해서 실행 성능 저하 발생.

3. 스케줄링 지연

  • 프로세스 수가 많을수록, 운영체제의 스케줄러가 다음에 실행할 프로세스를 고르는 데 걸리는 시간도 증가.
  • 특히 우선순위나 정책이 복잡하면 더 느려짐.

4. 메모리 부족 (Thrashing)

  • 너무 많은 프로세스가 있으면 RAM이 부족해지고, 페이지 교체가 자주 발생함.
  • 결국 CPU보다 메모리 I/O가 더 많아지는 비효율 상태에 빠지기도 해.

5. 응답성 저하

  • 사용자 인터랙션 기반 프로그램들은 빠른 응답이 중요한데, 많은 프로세스가 돌고 있으면 응답 대기 시간이 길어질 수 있음.

운영체제의 대응

대응 방법설명
프로세스 수 제한시스템이 감당 가능한 수준까지만 프로세스 허용
스케줄링 최적화Round Robin, Priority Scheduling 등 효율적인 정책 사용
스왑 아웃오래 기다리는 프로세스는 디스크로 이동시켜 RAM 확보
컨텍스트 최소화쓰레드(thread)를 사용해 스위칭 비용을 줄이기도 함 (lightweight process)

profile
취업 준비생 낚곰입니다!! 반갑습니다!!

0개의 댓글