문맥 교환
IT 위키
더 많은 작업
- Context Switching; 문맥 전환, 컨텍스트 스위칭
- 실행 중인 프로세스의 상태 정보를 저장해 두고 다른 프로세스의 저장된 상태를 복구하여 CPU 의 실행 대상을 바꾸는 작업
- 다중 프로그래밍 환경에서 CPU 는 하나인데 실행할 프로세스는 여럿이므로, 운영체제가 CPU 를
번갈아 나누어 준다. 그 교대가 일어날 때마다 문맥 교환이 필요하다.
- 문맥(context) 이란 그 프로세스를 나중에 중단된 지점부터 다시 이어 실행하는 데 필요한
모든 정보다. 프로그램 카운터, 레지스터 값, 스택 포인터, 메모리 관리 정보 등이 들어간다.
- 저장 장소는 프로세스 제어 블록(PCB) 이다. 나가는 프로세스의 문맥을
PCB 에 쓰고, 들어오는 프로세스의 PCB 에서 문맥을 읽어 레지스터에 채운다.
- 제어권은 운영체제의 인터럽트 처리 루틴(ISR)으로 넘어가며, 그 안에서 스케줄러가
다음에 실행할 프로세스를 고른다.
- 시간 할당량(time quantum) 이 끝났을 때
- 입출력 요청 등으로 프로세스가 대기 상태로 바뀔 때
- 인터럽트 나 시스템 호출이 발생했을 때
- 더 높은 우선순위의 프로세스가 준비 상태가 되어 현재 프로세스를 선점할 때
- 인터럽트나 시스템 호출로 커널 모드에 진입한다
- 현재 프로세스의 레지스터·프로그램 카운터를 그 프로세스의 PCB 에 저장한다
- 현재 프로세스의 상태를 준비(ready) 또는 대기(waiting)로 바꾼다
- 스케줄러가 준비 큐에서 다음 프로세스를 선택한다
- 선택된 프로세스의 PCB 에서 문맥을 읽어 레지스터에 복구한다
- 메모리 관리 정보를 갱신하고 사용자 모드로 돌아가 실행을 재개한다
- 문맥 교환 자체는 유용한 작업을 하지 않는 순수한 오버헤드다. 교환이 잦을수록
CPU 가 실제 작업에 쓰는 시간이 줄어든다.
- 캐시와 TLB 에 들어 있던 이전 프로세스의 내용이 쓸모없어져 교환 직후 적중률이 떨어진다.
이 간접 비용이 저장·복구 자체보다 큰 경우가 많다.
- 시간 할당량이 너무 짧으면 문맥 교환 횟수가 늘어 처리율이 떨어지고, 너무 길면 응답 시간이
나빠진다. 할당량 결정은 이 둘의 절충이다.
- 스레드 사이의 교환은 같은 주소 공간을 쓰므로 메모리 관리 정보를 바꿀 필요가 없어
프로세스 사이의 교환보다 가볍다.