1. 컨텍스트 스위칭(Context switch)
- 하나의 프로세스가 CPU를 사용 중인 상태에서 다른 프로세스가 CPU를 사용하도록 하기 위해, 이전 프로세스의 상태(Context)를 보관하고, 새로운 프로세스의 상태를 적재하는 작업
- 한 프로세스의 상태는 그 프로세스의 PCB에 기록되어 있다.
- 프로세스 P0와 P1이 있다고 하자.
- P0가 먼저 CPU를 점유중(executing)이고 P1이 대기중(idle)인 상태였다가, 얼마 후에는 P1이 점유중이고, P0가 대기중인 상태가 된다.
- 이때 P0가 점유중에서 대기중으로 변할 때는 지금까지 작업 내용을 어딘가(PCB)에 저장해두어야 한다.
→ 즉 P0는 PCB에 저장해두어야 하고, P1이 가지고 있던 데이터는 PCB에서 가져와야 한다.
- P0와 P1이 서로 대기 ↔ 점유를 번갈아가며 실행되는 것을 컨텍스트 스위칭 이라고 한다.
2. PCB(Process Control Block)
- 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 운영 체제 커널의 자료 구조
PCB에 포함되는 정보
- Pointer : 프로세스의 현재 위치 저장
- Process state : 프로세스의 각 상태(Create, Ready, Running, Waiting, Terminated) 저장
- Process number : 모든 프로세스에는 프로세스 식별자를 저장하는 고유한 ID인 PID가 할당된다.
- Program counter(PC) : 다음에 실행될 명령어의 주소 저장
- Registers : 누산기 및 범용 레지스터
- Memory limits : 운영체제에서 사용하는 메모리 관리 시스템에 대한 정보 저장
- List of open files : 프로세스에 할당된 열린 파일 목록 저장
3. 컨텍스트 스위칭의 오버헤드
- 위의 그림에서 P0가 점유중에서 대기중으로 변경될 때 P1이 바로 점유되지 않는다.
→ P0의 상태를 PCB에 저장하고, P1의 상태를 PCB에서 가져와야 하기 때문
→ 이때 CPU는 아무런 일을 하지 못한다.
- 따라서 컨텍스트 스위칭이 너무 잦으면 오버헤드(사용된 시간과 메모리의 양)가 발생하여 성능이 떨어진다.
4. 오버헤드 해결 방안
1. 프로그램 다중화 수준 낮춤
- 다중 프로그래밍 수준을 낮춰 컨텍스트 스위칭 발생 빈도 줄이기
2. 스레드 이용
- 스레드를 이용하여 컨텍스트 스위칭 부하 최소화
- 스레드의 text, data, heap 영역은 프로세스의 것이기 때문에 자신의 PCB에는 스택 및 간단한 정보만 저장한다.
- 따라서 프로세스 컨텍스트 스위칭보다 빠르다.
3. 스택 포인터 활용
- 스택 포인터를 이용하여 컨텍스트 스위칭 부하 최소화
5. 면접 예상 질문
- 컨텍스트 스위칭이란 무엇인지 설명해주세요.
- 컨텍스트 스위칭의 오버헤드 해결 방안을 설명해주세요.
참고 URL