컨텍스트 스위칭
CPU가 현재 실행 중인 프로세스나 스레드를 중단하고, 다른 프로세스나 스레드를 실행하는 과정. 멀티 태스킹 환경에서 하나의 CPU가 여러 작업을 번갈아 가며 처리할 수 있게 만들어 준다.
언제 발생하나?
- CPU 스케줄러가 다른 작업을 선택했을 때(그러면 다른 프로세스를 써야하니까)
- 실행 중인 작업이 블로킹 되었을때 (I/ O같은게 들어왔다거나 할 때)
과정
- 현재 작업(프로세스, 스레드)의 컨텍스트를 저장한다.
- 다음에 실행할 작업의 컨텍스트를 복원한다.
- CPU가 새로운 작업을 실행한다.
코스트
컨텍스트 스위칭을 할 때, 상태를 저장하고 로드하는 과정에서 메모리 접근, 레지스터 저장, 복원과 같은 작업 때문에 시간과 자원을 사용하게 된다.
따라서 컨텍스트 스위칭이 자주 발생하면 시스템 성능 오버헤드가 생긴다.
프로세스 스위칭과 스레드 스위칭
컨텍스트 스위칭은 프로세스를 전환할 때뿐 아니라 스레드를 전환할 때도 발생한다.
프로세스 스위칭은 서로 다른 프로세스의 주소 공간을 전환해야 하므로 비용이 비교적 크다.
반면 같은 프로세스 내부에서 발생하는 스레드 스위칭은 주소 공간을 그대로 공유한다. 따라서 스택이나 레지스터같은 스레드별 실행 상태만 저장하고 복원하면 되므로 비용이 비교적 작다.
PCB와 TCB
컨텍스트 스위칭에서는 현재 실행 중인 작업의 컨텍스트를 저장하는데, 프로세스는 PCB, 스레드는 TCB에 저장된다.
PCB
PCB(Process Control Block)는 운영체제가 프로세스를 관리하기 위해 사용하는 자료구조이다.
프로세스가 생성되면 운영체제는 PCB를 함께 생성하며, 프로세스의 실행 상태와 관리에 필요한 정보를 저장한다.
PCB의 구조
- 프로세스 상태(Process State): 실행, 준비, 대기 등의 현재 상태
- 프로세스 ID(PID): 프로세스를 식별하는 고유한 번호
- 프로그램 카운터(PC): 다음에 실행할 명령어의 주소
- CPU 레지스터: 프로세스 실행에 필요한 레지스터 값
- 메모리 관리 정보: 페이지 테이블, 주소 공간 등
- CPU 스케줄링 정보: 우선순위, 스케줄링 정보 등
TCB
TCB(Thread Control Block)는 운영체제가 스레드를 관리하기 위해 사용하는 자료구조이다.
스레드가 생성되면 운영체제는 TCB를 생성하며, 스레드의 실행 상태를 저장한다.
같은 프로세스에 속한 스레드들은 코드, 데이터, 힙 영역은 공유하지만 실행 흐름은 각각 독립적이다. 따라서 스레드마다 별도의 TCB를 가진다.
TCB의 구조
- 스레드 상태(Thread State): 실행, 준비, 대기 등의 현재 상태
- 스레드 ID(TID): 스레드를 식별하는 고유한 번호
- 프로그램 카운터(PC): 다음에 실행할 명령어의 주소
- CPU 레지스터: 스레드 실행에 필요한 레지스터 값
- 스택 포인터(SP): 현재 스레드의 스택 위치