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
를 복구하는 일커널의 개입으로 이루어짐
발생 원인
Interrupt handling: 커널 함수를 통해 프로그램 실행 도중에 중단되어 인터럽리 처리를 기다리는 경우
Multitasking: 단일 CPU에서 동시에 작업이 실행되는 것처럼 보이도록 하는 경우(동시성은 컨텍스트 스위칭을 통해 달성됨)
Time Quato Expiry: 주어진 quantum(time slice)의 시간이 끝난 경우(CPU의 사용 시간이 만료되었을 때)
Preemption: 더 우선순위가 높은 일을 해야하는 경우
등등
컨텍스트 스위칭 과정
기본 작업
커널 모드로 전환
프로세스에서 통제권이 넘어가 커널에서 실행됨
하드웨어와 밀접한 일이나 컴퓨터의 리소스를 사용해야 하는 일
CPU의 register 상태 교체
각종 명령어를 실행하기 위해 필요한 데이터를 저장하는 register의 상태 교체
상태 정보를 기억해서 다른 컨텍스트 스위칭 때 사용할 수 있음
작동 순서
프로세스 A가 running
상태이고, 프로세스 B가 ready
상태일 때
스케줄러가 프로세스 A의 실행을 중단하고 프로세스 B를 실행할 것을 요청함(인터럽트/시스템 호출)
프로세스 A의 Stack의 데이터 위치를 가리키고 있는
SP(Stack Pointer)
의 값과 다음 실행해야 하는 코드의 주소값을 가지고 있는PC(Program Counter)
의 값을PCB
에 업데이트한 후에 메인 메모리에 저장함SC와 PC는 모두 중앙처리장치 안의 레지스터임
프로세스 A의 상태는
ready
혹은block
으로 변경되고, CPU에서 프로세스 B를 실행함이 과정으로 프로세스 B의 상태는
ready
에서running
으로 변경됨(Dispatch)
그리고 다시 프로세스 B에서 프로세스 A로 컨텍스트 스위칭을 하는 경우, 프로세스 B의 SP값과 PC값을 PCB에 저장함
이후, 실행해야 할 프로세스 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를 사용하지만, 캐시에는 이전 프로세스에서 사용하던 전혀 다른 데이터에 대한 캐시가 남게 되는데 이를 캐시 오염이라고 함
가상 메모리 주소 관련 처리를 추가로 수행해야 함
MMU(Memory Management Unit)가 새로운 프로세스의 주소 체계를 바라보도록 수정함
캐시 역할을 하는 TLB(Translation Lookaside Buffer)를 완전히 비워줘야 함
작업:
커널 모드 전환
+CPU register 상태 교체
+가상 메모리 주소 처리(MMU 수정 + TLB 캐시 비우기)
Ref
Last updated