프로세스보다 쓰레드의 컨텍스트 스위칭이 빠른 이유
Context Switching
컨텍스트 스위칭은 CPU나 코어에서 실행중이던 프로세스나 쓰레드가 다른 프로세스나 쓰레드로 교체되는 과정이다. 이는 멀티태스킹 시스템에서 여러 작업을 효율적으로 관리하기 위해 필수적인 메커니즘이다.
Context
컨텍스트는 프로세스나 쓰레드의 현재 상태를 의미한다. 여기에는 CPU의 레지스터 상태(프로그램 카운터, 스택 포인터 등)와 메모리 상태가 포함된다. 컨텍스트는 프로세스나 쓰레드가 실행을 중단하고 나중에 다시 시작할 때 필요한 모든 정보를 담고있다.
Context Switching이 필요한 이유
멀티태스킹 시스템에서는 여러 프로세스나 쓰레드가 동시에 실행되는 것처럼 보이도록 CPU가 짧은 시간 단위로 작업을 전환하며 여러 작업을 처리한다. 이를 통해 사용자에게는 여러 작업이 동시에 진행되는 것처럼 인식되며, 시스템 자원을 효율적으로 활용할 수 있다.
Context Switching이 발생하는 시점
-
- Time Slice(Quantum)를 다 사용했을 때
- 각 프로세스나 쓰레드에 할당된 CPU시간이 다 소진되면 스위칭 발생
-
- I/O 작업이 필요할 때
- 프로세스나 쓰레드가 I/O 작업을 수행해야 할 경우, CPU는 다른 작업을 처리하기 위해 현재 작업을 중단하고 스위칭을 수행
-
- 우선순위 변경
- 더 높은 우선순위의 작업이 발생하면 현재 작업을 중단하고 우선순위가 높은 작업으로 전환할 수 있다.
Context Switching을 수행하는 주체
컨텍스트 스위칭은 운영체제의 커널(kernel)에 의해 수행된다. 커널은 시스템 자원을 관리하고 프로세스 및 쓰레드의 상태를 조정하여 효율적인 작업 처리를 담당한다.
Context Switching의 구체적인 과정
Process Context Switching (다른 프로세스에 속한 쓰레드 간의 컨텍스
- 현재 프로세스의 상태 저장 : 실행중인 프로세스의 레지스터 상태와 메모리 정보 저장
- 다음 프로세스의 상태 로드 : 스케줄러가 선택한 다음 실행할 프로세스의 저장된 상태를 로드
- 프로세스 전환 : CPU는 새로운 프로세스의 실행 시작
- 추가 메모리 처리 : 새로운 프로세스의 가상 메모리 주소체계를 설정하고, MMU(Memory Management Unit)와 TLB(Translation Lookaside Buffer)를 업데이트
Thread Context Switching (같은 프로세스에 속한 스레드 간의 컨텍스트 스위칭)
- 현재 프로세스의 상태 저장 : 실행중인 쓰레드의 레지스터 상태를 저장
- 다음 프로세스의 상태 로드 : 동일한 프로세스 내에서 실행할 다음 쓰레스 상태 로드
- 프로세스 전환 : CPU는 새로운 쓰레드의 실행 시작
- 추가 메모리 처리 : 동일한 프로세스 내 쓰레드간 전환이므로 메모리 관련 추가 처리가 필요없음
Process와 Thread Context Switching의 공통점
- 커널모드에서 실행 : 컨텍스트 스위칭은 항상 운영체제의 커널 모드에서 수행된다
- CPU 레지스터 상태 교체 : 현재 실행중인 작업의 레지스터 상태를 저장하고, 다음 작업의 레지스터 상태를 복원
Process와 Thread Context Switching의 차이점
같은 프로세스에 속한 쓰레드들 간의 컨텍스트 스위칭은 같은 프로세스에 속하기 때문에 메모리 영역을 공유한다. 그래서 스위칭이 발생해도 메모리와 관련한 추가 작업이 발생하지 않는다.
하지만 다른 프로세스에 속한 쓰레드 간 컨텍스트 스위칭은 메모리 프로세스간 메모리 주소체계가 다르기 때문에 메모리 주소 관련 처리를 추가적으로 수행해야 한다.
그래서 MMU(Memory Manage Unit) 또한 새로운 프로세스의 주소체계를 바로보도록 수정해줘야하고, TLB(Translation Lookaside Buffer)라는 가상 메모리 주소와 실제 메모리 주소의 매핑 정보를 들고있는 캐시도 비워줘야한다. 만약 TLB 캐시를 비워주지 않는 경우 이전에 작업했던 프로세스의 주소에 접근할 가능성이 있기 때문에 반드시 수행해야한다.
Thread Context Switching이 Process보다 빠른 이유
Thread Context Switching(쓰레드 컨텍스트 스위칭)의 경우 Process Context Switching(프로세스 컨텍스트 스위칭)과 달리 MMU가 새로운 주소 체계 바로보도록 수정하고, TLB 가상 메모리 <-> 실제 메모리 매핑정보 저장된 캐시를 비우는 등의 메모리 주소 관련 작업을 하지 않고, CPU의 상태 정보만 바꿔주면 되기 떄문이다.