🏓 컨텍스트 스위칭
Context: 프로세스의 상태와 관련된 레지스터의 집합
Context switching: 레지스터의 값을 교체하는 것
- 싱글코어 CPU는 한번에 하나의 프로세스만 처리할 수 있음
- 그 프로세스가 동작하는 동안 레지스터의 값들은 모두 현재 실행중인 프로세스와 연관있음 > 다른 프로세스를 사용하게 되면 현재 레지스터의 값들을 모두 바꿔야 함
- 현재 실행중인 프로세스가 다른 프로세스로 교체되는데 현재 프로세스의 작업이 끝나지 않았다면 지금까지 실행한 작업을 모두 저장해야 함
- 기존의 Context를 저장 & 새로운 프로세스를 맞이할 준비 > Context Switching
🏓 프로세스와 스레드의 컨텍스트 스위칭
캐쉬:
- CPU와 메인 메모리 사이에 위치
- CPU에서 한번 이상 읽어들인 메모리의 데이터를 저장하고 있다가 CPU가 다시 그 메모리에 저장된 데이터를 요구할 때 메인메모리를 통하지 않고 데이터를 전달해줌
프로세스 컨텍스트 스위칭
- 공유하는 데이터가 없음 > 캐쉬가 지금껏 쌓아놓은 데이터가 무너지고 새로 캐쉬정보를 쌓아야함
스레드 컨텍스트 스위칭:
- 스레드는 공유하는 영역(Stack 영역 제외 모두)이 많아 컨텍스트 스위칭이 빠름
- 저장된 캐쉬 데이터는 스레드가 바뀌어도 공유하는 데이터가 있으므로 의미있음
🏓 컨텍스트 스위칭 발생 시 기존의 프로세스 정보가 거치는 과정
테스크 A 현재 실행중, 테스트 B로 전환 과정
- 현재 실행중인 테스크 A가 테스크 B로 context switch하기 위해서는 유저 영역에서 실행중이던 테스크 A가 커널로 진입해야 함
- 커널 진입: 현재 유저영역에서 진행중이던 상태를 저장
- 테스크 A의 커널 영역 스택에 저장됨
- 저장하는 정보: stack pointer, IP(instruction pointer), 레지스터, 플래그 등
- 유저모에서 커널모드로 상태 전환 (시스템 콜)
- 테스크 B가 종료되고 테스크 A로 리턴 (스케쥴링) > 커널 스택에 저장해뒀던 유저 영역의 실행 정보를 다시 복구하여 기존의 유저 영역에서 실행되던 테스크 A를 이어서 시행
🏓 컨텍스트 스위칭 발생 시기
즉, 언제 기존 프로세스가 인터럽트되는가?
- 멀티태스킹: 멀티태스킹 환경에서 프로세스 전환 과정에서 문맥 교환이 일어남
- 선점형 시스템) 스케쥴러가 프로세스를 전환할 수 있음
- 인터럽트 처리: 인터럽트가 발생할 때
- 사용자 및 커널 모드 전환: 운영체제에서 사용자 모드와 커널 모드 사이의 전환이 필요할 때
참고: