컨텍스트 스위칭이란 무엇인가?
컨텍스트 스위칭은 운영 체제가 CPU를 사용 중인 프로세스 또는 스레드에서 다른 프로세스 또는 스레드로 전환하는 과정이다. 이 과정은 멀티태스킹을 가능하게 하며, 시스템의 반응성과 공유 자원의 효율적 사용을 개선한다.
컨텍스트 스위칭 과정
-
상태 저장: 현재 실행 중인 프로세스의 상태(레지스터 값, 프로그램 카운터 등)를 저장한다. 이 정보는 프로세스의 PCB(Process Control Block)에 저장된다.
-
상태 복원: 다음 실행할 프로세스의 상태를 PCB에서 가져와 CPU에 복원한다. 이를 통해 새 프로세스가 이전에 중단된 지점부터 실행을 재개할 수 있다.
프로세스와 스레드의 컨텍스트 스위칭 차이
- 프로세스 컨텍스트 스위칭: 독립적인 메모리 주소 공간을 갖기 때문에 많은 시간과 자원을 소모한다. 메모리 맵, 레지스터 세트 등의 전체 상태를 교체해야 한다.
- 스레드 컨텍스트 스위칭: 같은 프로세스 내의 스레드 간 전환은 더 빠르고 효율적이다. 스레드는 메모리와 자원을 공유하기 때문에 상대적으로 적은 데이터만 교체한다.
컨텍스트 스위칭 저장 형식
- 커널 스택: 프로세스의 컨텍스트 정보는 각 프로세스의 커널 스택에 저장된다. 이 스택에는 시스템 호출 정보, 레지스터 상태, 프로세스 상태 등이 포함된다.
컨텍스트 스위칭 발생 시점
컨텍스트 스위칭은 다음과 같은 경우에 발생한다:
- 멀티태스킹: CPU 스케줄러가 실행 중인 태스크를 다른 태스크로 전환한다.
- 인터럽트 처리: 하드웨어 인터럽트 또는 소프트웨어 인터럽트가 발생했을 때, 해당 인터럽트를 처리하기 위해 현재 프로세스에서 인터럽트 핸들러로 전환한다.
- 시스템 호출: 사용자 프로세스가 시스템 호출을 사용할 때, 사용자 모드에서 커널 모드로 전환한다.
예시: 시스템 호출을 통한 컨텍스트 스위칭
예를 들어, 프로세스가 파일을 읽기 위해 read() 시스템 호출을 한다고 가정해보자. 이 때, 다음과 같은 과정이 진행된다:
- 사용자 모드에서 커널 모드로 전환: read() 함수를 호출하면, 프로세스는 사용자 모드에서 커널 모드로 전환된다.
- 컨텍스트 저장: 프로세스의 현재 상태가 PCB에 저장된다.
- 커널 모드 작업 수행: 파일 읽기와 같은 커널 작업이 수행된다.
- 컨텍스트 복원 및 사용자 모드로 복귀: 작업이 완료되면, PCB에 저장된 상태를 복원하고 사용자 모드로 복귀한다.
이처럼 컨텍스트 스위칭은 시스템의 효율적인 운영을 위해 필수적인 과정이며, 프로세스와 스레드의 관리에 있어 중요한 역할을 한다.