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에 저장됨

      • 프로세스가 생성되면 메모리에 해당 프로세스의 PCB가 함께 생성되고, 종료 시 삭제됨

  • Context Saving : 현재 프로세스의 register context를 저장하는 작업

  • Context restoring : register context를 프로세스로 복구하는 작업

  • Context Switching

    • 실행 중인 프로세스의 Context를 저장하고, 앞으로 실행할 프로세스의 Context를 복구하는 일

    • 커널의 개입으로 이루어짐

발생 원인

  1. Interrupt handling: 커널 함수를 통해 프로그램 실행 도중에 중단되어 인터럽리 처리를 기다리는 경우

  2. Multitasking: 단일 CPU에서 동시에 작업이 실행되는 것처럼 보이도록 하는 경우(동시성은 컨텍스트 스위칭을 통해 달성됨)

    1. Time Quato Expiry: 주어진 quantum(time slice)의 시간이 끝난 경우(CPU의 사용 시간이 만료되었을 때)

    2. Preemption: 더 우선순위가 높은 일을 해야하는 경우

등등

컨텍스트 스위칭 과정

기본 작업

  • 커널 모드로 전환

    • 프로세스에서 통제권이 넘어가 커널에서 실행됨

    • 하드웨어와 밀접한 일이나 컴퓨터의 리소스를 사용해야 하는 일

  • 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

Last updated