Blog
스터디
CS Study with SON
6주차
컨텍스트 스위칭

Context switching(문맥 교환)


개념

  • 현재 실행되고 있던 프로세스/쓰레드의 상태를 저장하고 CPU를 다른 프로세스/쓰레드에게 넘겨주는 것
    • 이때 CPU가 해당 프로세스를 실행하기 위한 정보들을 컨텍스트(Context)라고 함
  • CPU에 실행할 프로세스를 교체하는 기술
  • 여러 프로세스/스레드를 동시에 실행시키기 위해 필요함

  • Context : 프로세스와 관련된 정보들의 집합으로, 프로세스가 관리하는 정보는 두 곳에 저장됨
    • 실제 CPU는 Main memory의 데이터를 register에 올려서 작업을 하는데, register에 저장된 메모리를 register context라고 함
      • CPU에 저장되는 정보 ➜ CPU register context
      • 메모리에 저장되는 정보 ➜ Code, Data, Stack, PCB
    • 보통 운영체제에서 Context는 CPU가 해당 프로세스를 실행하기 위한 정보들로, 이 Context는 프로세스의 PCB (opens in a new tab)에 저장됨
      • 프로세스가 생성되면 메모리에 해당 프로세스의 PCB가 함께 생성되고, 종료 시 삭제됨
  • Context Saving : 현재 프로세스의 register context를 저장하는 작업
  • Context restoring : register context를 프로세스로 복구하는 작업
  • Context Switching
    • 실행 중인 프로세스의 Context를 저장하고, 앞으로 실행할 프로세스의 Context를 복구하는 일
    • 커널의 개입으로 이루어짐

발생 원인

  1. Interrupt handling (opens in a new tab): 커널 함수를 통해 프로그램 실행 도중에 중단되어 인터럽리 처리를 기다리는 경우
  2. Multitasking (opens in a new tab): 단일 CPU에서 동시에 작업이 실행되는 것처럼 보이도록 하는 경우(동시성은 컨텍스트 스위칭을 통해 달성됨)
    1. Time Quato Expiry: 주어진 quantum(time slice)의 시간이 끝난 경우(CPU의 사용 시간이 만료되었을 때)
    2. Preemption: 더 우선순위가 높은 일을 해야하는 경우
  3. 사용자 및 커널 모드 전환(User and kernel mode switching) (opens in a new tab)

등등


컨텍스트 스위칭 과정

기본 작업

  • 커널 모드로 전환
    • 프로세스에서 통제권이 넘어가 커널에서 실행됨
    • 하드웨어와 밀접한 일이나 컴퓨터의 리소스를 사용해야 하는 일
  • CPU의 register 상태 교체
    • 각종 명령어를 실행하기 위해 필요한 데이터를 저장하는 register의 상태 교체
    • 상태 정보를 기억해서 다른 컨텍스트 스위칭 때 사용할 수 있음

작동 순서

프로세스 A가 running 상태이고, 프로세스 B가 ready 상태일 때

  1. 스케줄러가 프로세스 A의 실행을 중단하고 프로세스 B를 실행할 것을 요청함(인터럽트/시스템 호출)
  2. 프로세스 A의 Stack의 데이터 위치를 가리키고 있는 SP(Stack Pointer)의 값과 다음 실행해야 하는 코드의 주소값을 가지고 있는 PC(Program Counter)의 값을 PCB에 업데이트한 후에 메인 메모리에 저장함
    • SC와 PC는 모두 중앙처리장치 안의 레지스터임
  3. 프로세스 A의 상태는 ready 혹은 block으로 변경되고, CPU에서 프로세스 B를 실행함
    • 이 과정으로 프로세스 B의 상태는 ready에서 running으로 변경됨(Dispatch)
  4. 그리고 다시 프로세스 B에서 프로세스 A로 컨텍스트 스위칭을 하는 경우, 프로세스 B의 SP값과 PC값을 PCB에 저장함
  5. 이후, 실행해야 할 프로세스 A의 PCB 정보들을 메인 메모리에 가져와서 CPU 레지스터에 넣고 실행함

컨텍스트 스위칭의 오버헤드

  • 컨텍스트 스위칭은 ms의 짧은 시간 단위로 밀어나지만, 과도하게 많이 일어나게 되면 오버헤드가 발생함


프로세스 vs 쓰레드 컨텍스트 스위칭

둘의 공통점은 커널 모드에서 실행된다는 점


Thread Context Switching

  • 같은 프로세스 안의 쓰레드끼리 컨텍스트 스위칭이 발생하는 것
    • 프로세스1의 스레드1 → 프로세스1의 스레드2
  • 쓰레드는 스택 영역을 제외한 모든 메모리 영역을 공유하기 때문에 메모리 주소 관련한 정보는 바꿀 필요가 없고, CPU의 상태정보만 바꿔주면 됨
    • 따라서 쓰레드 컨텍스트 스위칭은 공유하는 정보가 많아 기본 작업만 하면 되기 때문에 프로세스 컨텍스트 스위칭보다 더 빠름
  • 작업: 커널 모드 전환 + CPU register 상태 교체

Process Context Switching

  • 현재 실행중인 프로세스의 쓰레드와는 다른 프로세스의 쓰레드와 컨텍스트 스위칭이 발생하는 것
    • 프로세스1의 스레드1 → 프로세스2의 스레드2
  • 캐시 오염(cache pollution) 발생
    • CPU 내부에 캐시를 위한 공간이 존재하는데, 컨텍스트 스위칭이 발생하면 캐시의 데이터가 현재 실행중인 스레드의 데이터와 다를 수 있음
    • 프로세스가 변경되어 새로운 프로세스가 CPU를 사용하지만, 캐시에는 이전 프로세스에서 사용하던 전혀 다른 데이터에 대한 캐시가 남게 되는데 이를 캐시 오염이라고 함
  • 가상 메모리 주소 관련 처리를 추가로 수행해야 함
  • 작업: 커널 모드 전환 + CPU register 상태 교체 + 가상 메모리 주소 처리(MMU 수정 + TLB 캐시 비우기)


Ref