컨텍스트 스위칭 상세 설명
컨텍스트 스위칭은 운영 체제가 한 프로세스 또는 스레드에서 다른 프로세스 또는 스레드로 CPU 제어권을 전환하는 과정이다. 이 과정은 시스템의 멀티태스킹을 가능하게 하며, 프로세스와 스레드 간에 일어나는 컨텍스트 스위칭에는 몇 가지 차이점이 있다.
프로세스와 스레드의 컨텍스트 스위칭 차이
프로세스 컨텍스트 스위칭
- 프로세스 간 컨텍스트 스위칭은 보다 많은 정보를 저장하고 복원해야 한다. 프로세스마다 독립된 메모리 공간을 가지기 때문이다.
- 저장해야 할 정보에는 CPU 레지스터 상태, 프로그램 카운터, 사용자 및 커널 모드 스택 포인터, 메모리 관리 정보 등이 포함된다.
- 프로세스 간 전환은 시스템 자원을 많이 소모하며 상대적으로 느리다.
스레드 컨텍스트 스위칭
- 스레드 간 컨텍스트 스위칭은 동일한 프로세스 내에서 이루어지기 때문에 더 가볍다. 스레드는 메모리 공간을 공유한다.
- 스레드별로 저장 및 복원해야 할 정보에는 CPU 레지스터 상태, 프로그램 카운터, 스택 포인터 등이 있다.
- 메모리 주소 공간의 변경이 없으므로, 프로세스 간 전환보다 빠르다.
컨텍스트 스위칭 시 정보 저장 형식
- 컨텍스트 스위칭 시 기존 프로세스 또는 스레드의 정보는 PCB(Process Control Block)에 저장된다.
- PCB는 프로세스 식별자(PID), 프로세스 상태, 프로그램 카운터, CPU 레지스터 값, CPU 스케줄링 정보, 메모리 관리 정보, I/O 상태 정보 등을 포함한다.
컨텍스트 스위칭 발생 시기
컨텍스트 스위칭은 다음과 같은 상황에서 발생할 수 있다:
- 멀티태스킹: 운영 체제의 스케줄러가 공정한 CPU 시간 분배를 위해 프로세스 또는 스레드 간 전환을 수행한다.
- I/O 요청 처리: 프로세스가 I/O 작업을 요청하고 그 작업이 완료될 때까지 기다리는 동안, 다른 프로세스로 전환한다.
- 인터럽트 처리: 하드웨어 인터럽트 또는 소프트웨어 인터럽트가 발생했을 때, 해당 인터럽트를 처리하기 위해 현재 실행 중인 프로세스에서 다른 프로세스로 전환한다.
- 멀티프로세싱: 멀티코어 프로세서 환경에서 각 코어가 동시에 다른 프로세스를 실행하기 위해 컨텍스트 스위칭을 수행한다.
컨텍스트 스위칭은 시스템의 멀티태스킹과 공정한 자원 분배를 가능하게 하는 핵심 메커니즘이지만, 오버헤드가 발생하기 때문에 효율적인 스케줄링이 필요하다.