Context Switch

wjd15sheep·2025년 3월 31일

CS

목록 보기
9/9

코테와 CS를 준비하면서 부족한 부분과 아직 잘 모르는 부분을 공부하여 이를 이번 포스트에서 정리합니다. 이번 포스트에서 다룰 주제는 Context Switch입니다.

Context Switch란?

Context Switch란, 쉽게 말해
👉 현재 작업 중인 프로세스의 상태(Context)를 저장하고, 다음 프로세스의 상태로 바꾸어 작업하는 것입니다.

조금 더 디테일하게 들어가 보면, 멀티프로세스 환경에서 CPU 코어가 하나의 프로세스를 실행하고 있을 때
외부에서 인터럽트 요청이 들어오면 현재 작업 중인 프로세스의 정보인 Program Counter (PC), 레지스터 값 등을 PCB(Process Control Block)에 저장합니다.

그 후, 인터럽트 요청 처리 프로세스나 우선순위가 더 높은 프로세스를 CPU 코어에 할당하여 실행하게 됩니다.

처리가 끝난 뒤에는, PCB에 저장된 이전 프로세스의 상태 정보를 다시 불러와 작업을 이어서 실행합니다.

즉, Context Switch는 프로세스 실행 흐름을 끊었다가 다시 이어주는 작업이며,
이 과정에서 프로세스의 실행 상태를 저장하고 복원하는 비용이 발생합니다.

용어 정리

  • Program Counter(PC): 프로그램 카운터는 이 프로세스가 다음에 실행할 명령어의 주소를 가리킵니다.
  • 레지스터(Register): CPU 내부의 매우 빠른 저장장치로, 연산에 필요한 데이터나 주소를 임시로 저장합니다. (예: 연산 결과, 변수 값, 스택 포인터 등)
  • 인터럽트(Interrupt): 현재 실행 중인 프로세스의 흐름을 일시적으로 멈추고, 외부 요청이나 이벤트를 처리하기 위해 CPU의 제어권을 운영체제로 넘기는 신호입니다.
    → 예시: 키보드 입력, 마우스 클릭, I/O 완료 신호 등

Context Switch가 발생하는 경우

Context Switch는 다음과 같은 상황에서 발생합니다.

  1. Time Slice가 끝난 경우 (타임퀀텀 종료)
    운영체제는 프로세스에게 CPU 사용 시간을 공평하게 나눠주기 위해 일정 시간만 실행하도록 제한합니다.
    주어진 시간이 끝나면 다른 프로세스에게 CPU를 넘기기 위해 Context Switch가 발생합니다.

  2. I/O 요청으로 인한 대기
    실행 중인 프로세스가 파일 읽기, 네트워크 통신 등 I/O 작업을 요청하면, CPU는 더 이상 그 프로세스를 실행할 수 없습니다.
    이때 프로세스 상태를 저장하고, 다른 프로세스에게 CPU를 할당합니다.

  3. 우선순위가 더 높은 프로세스가 Ready 상태가 된 경우 (Preemption)
    새로운 프로세스가 Ready 상태로 들어오고, 현재 실행 중인 프로세스보다 우선순위가 높다면,
    현재 작업을 멈추고 새로운 프로세스로 교체됩니다.

  4. 프로세스 종료 또는 대기 상태 전환
    현재 실행 중인 프로세스가 종료되거나, 자원을 기다리기 위해 Waiting 상태로 전환되면
    다음 Ready 상태 프로세스로 교체됩니다.

  5. 시스템 콜 또는 인터럽트 발생
    시스템 콜 처리나, 하드웨어 인터럽트가 발생했을 때도
    현재 프로세스의 상태를 저장하고, 커널 모드 작업이나 인터럽트 처리로 넘어갑니다.

🎯 Context Switch의 과정


Context Switch는 다음과 같은 단계로 진행됩니다.

  1. 현재 프로세스(P0)의 상태 저장

    • 실행 중인 프로세스(P0)의 Program Counter, 레지스터 값, 스택 포인터 등을
      PCB(P0)에 저장합니다.
  2. 스케줄러가 다음 프로세스(P1) 선택

    • Ready Queue에서 우선순위나 스케줄링 정책에 따라 다음 실행할 프로세스(P1)를 선택합니다.
  3. 선택된 프로세스(P1)의 상태 복원

    • PCB(P1)에 저장되어 있던 상태 정보를 CPU에 불러옵니다.
    • 레지스터, Program Counter 등의 값을 복원합니다.
  4. 프로세스(P1) 실행 시작

    • 복원된 정보를 바탕으로 프로세스(P1)의 작업을 이어서 실행합니다.
  • Ready Queue: 실행 준비가 완료된 프로세스들의 목록(큐)
    CPU가 사용 가능해질 때까지 대기 중인 프로세스들의 PCB(Process Control Block)가 저장되어 있는 공간입니다.
    프로세스가 Waiting 상태(I/O 대기 등)에서 벗어나거나, 새롭게 생성되면 Ready Queue에 들어갑니다. 스케줄러는 Ready Queue에서 프로세스를 선택해 CPU에 할당합니다.

⚠️ Context Switch의 비용

Context Switch는 멀티태스킹을 가능하게 해주는 중요한 기능이지만, 다음과 같은 비용과 단점이 있습니다.

  1. 시간 오버헤드

    • 프로세스의 상태를 저장하고 복원하는 데 시간이 소요됩니다.
      특히 프로세스 간 전환은 스레드 간 전환보다 비용이 큽니다.
  2. CPU 캐시 무효화

    • Context Switch가 발생하면, CPU 내부의 L1, L2 캐시에 저장되어 있던 데이터가 무효화됩니다. 다시 데이터를 가져와야 하므로 성능 저하 발생
  3. 파이프라인 플러시

    • 현대 CPU는 파이프라인 구조로 연산을 병렬 처리하는데, 프로세스가 바뀌면 파이프라인도 초기화되어 성능 손실
  4. 메모리 접근 비용

    • PCB와 프로세스 상태 정보를 메모리에서 불러오고 저장하는 비용이 발생

✅ 정리
Context Switch는 멀티프로세스 환경의 핵심 기능이며, 다중 작업을 가능하게 하지만, 너무 자주 발생하면 시스템 성능이 급격히 떨어질 수 있습니다. 그래서 운영체제는 스케줄링 알고리즘을 통해 Context Switch 빈도와 비용을 잘 조절해야 합니다.


[참고]

profile
성장 위해 노력하는 웹 개발자 주니어

0개의 댓글