운영체제

문맥 교환(Context Switching)

웜블 2022. 1. 28. 23:38

정의

하나의 사용자 프로세스로부터 다른 사용자 프로세스로 CPU 제어권이 이양되는 과정

절차

  1. 인터럽트/시스템 콜: 운영체제에서 프로세스 스케줄러에 의해 발생
  2. 커널 모드 전환: 프로세스가 실행되는 사용자 모드에서 전환
  3. 현재 프로세스 상태 PCB 저장: 기존 실행되던 프로세스 정보 저장
  4. 다음 실행 프로세스 로드: PCB에 있는 다음 실행 프로세스 상태 정보 적재
  5. 사용자 모드 전환: 커널 모드에서 전환하여 프로세스 실행

발생하는 상황

  1. scheduler dispatch: CPU 할당받아 실행 상태로 전이
  2. timer interrupt: 프로세스에 할당된 시간 종료 = time slice 만료
  3. I/O 요청 시스템 콜: 입출력 요청 후 대기 필요. cpu 사용 못함

즉, 프로세스 상태가 다음과 같이 변경될 때 발생

  • ready → running
  • running → ready
  • running→ waiting 

문맥 교환 아닌 경우

  • 프로세스가 실행 상태일 때, 시스템 콜/인터럽트가 발생하면 CPU 제어권이 운영체제로 넘어와 원래 실행 중이던 프로세스 작업을 멈추고 운영체제 커널 코드가 실행된다. 이 경우 프로세스 문맥 중 일부를 PCB에 저장하게 된다. 하지만, 이 과정을 문맥 교환이라고 부르지 않음.
  • 사용자 모드에서 실행되다가 커널 모드로 실행 모드만 바뀌는 것일 뿐, CPU 점유하는 프로세스가 다른 사용자 프로세스로 전환되는 과정이 아니기 때문이다. 즉, 타이머 인터럽트나 I/O 요청 시스템 콜 외 시스템 콜이나 인터럽트 시에는 문맥 교환이 일어나지 않고 실행 모드만 변경되는 것이다.
  • 이 경우, 캐시 메모리를 다 비우고 다시 적재하는 과정이 없기 때문에 오버헤드가 문맥 교환에 비해 훨씬 적다.

 

오버헤드

사전적 정의

  • 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 · 메모리 등

즉, 문맥 교환 오버헤드는 문맥 교환에 걸린 시간과 메모리를 뜻한다.

PCB에서 프로세스 상태 및 PC, CPU 레지스터 등의 정보를 읽어와 다시 적재하는 과정이 필요하다. 또한 캐시 메모리의 내용을 모두 비우고, 다시 적재해야하기 때문에 오버헤드가 상당하다.

 

 

프로세스 vs 스레드

  • 스레드 컨텍스트 스위칭이 더 빠르다.
  • 프로세스 컨텍스트 스위칭의 경우, 프로세스 간 공유하는 데이터가 없기 때문에 캐시 메모리에 지금껏 쌓아온 데이터를 초기화하고 새로 데이터를 쌓아야 한다.
  • 반면, 스레드는 공유하는 데이터가 많기 때문에 쓰레드가 바뀌어도 기존 캐시 데이터가 유의미하기 때문에 초기화 할 필요가 없다.