컨텍스트 스위칭(Context Switching)이란
공부한 내용을 복기하기 위해 짧게 정리해둔 요약본입니다 :)
컨텍스트 스위칭이란
cpu에서 실행중이던 프로세스/스레드가 다른 프로세스/스레드로 교체되는것
- 커널 모드에서 발생하며, cpu의 레지스터 상태를 교체한다
- 프로세스 생성시에 메모리에 해당 프로세스의 PCB(Process Control Block)가 생성되고 종료시 삭제된다
- 프로세스가 CPU에서 실행 될 때 레지스터에 있는 특정 값들 변경됨 -> 다른 프로세스가 실행되면 실행되고 있던 프로세스의 레지스터 상태를 PCB에 저장한다
레지스터: CPU에서 여러 명령어들을 수행하기 위해 필요한 여러 데이터들을 저장하는 곳이다 (ex. PC(Program Counter), Stack Pointer)
필요한 이유
- 여러 프로세스/스레드 동시에 실행되는 것 처럼 실행시키기 위해
- 여러 프로세스/스레드가 공정하게 cpu 시간을 갖게 하기 위해
- 높은 우선순위의 작업을 빠르게 먼저 처리할 수 있게 하기 위해
발생 이유
- cpu 사용 시간 만료
- I/O작업 필요시
- 다른 리소스를 기다릴 때
- 인터럽트 처리 기다릴 때
프로세스와 스레드의 컨텍스트 스위칭 차이점
프로세스
- 프로세스의 경우 공유 데이터가 없으므로 새로 캐시 정보를 쌓아야 하기 때문에 프로세스 컨텍스트 스위칭에 부담이 될 수 있다
스레드
- 스레드의 경우 Code, Data, Heap은 부모 프로세스 영역에서 공유하고 있기 때문에 컨텍스트 스위칭이 빠르다
- 스택만 각 스레드에 독립적으로 할당해준다