컨텍스트 스위칭(Context Switching)이란


공부한 내용을 복기하기 위해 짧게 정리해둔 요약본입니다 :)



컨텍스트 스위칭이란

cpu에서 실행중이던 프로세스/스레드가 다른 프로세스/스레드로 교체되는것

  • 커널 모드에서 발생하며, cpu의 레지스터 상태를 교체한다
  • 프로세스 생성시에 메모리에 해당 프로세스의 PCB(Process Control Block)가 생성되고 종료시 삭제된다
  • 프로세스가 CPU에서 실행 될 때 레지스터에 있는 특정 값들 변경됨 -> 다른 프로세스가 실행되면 실행되고 있던 프로세스의 레지스터 상태를 PCB에 저장한다

    레지스터: CPU에서 여러 명령어들을 수행하기 위해 필요한 여러 데이터들을 저장하는 곳이다 (ex. PC(Program Counter), Stack Pointer)

    스크린샷 2024-05-02 오후 12 07 42


필요한 이유

  • 여러 프로세스/스레드 동시에 실행되는 것 처럼 실행시키기 위해
  • 여러 프로세스/스레드가 공정하게 cpu 시간을 갖게 하기 위해
  • 높은 우선순위의 작업을 빠르게 먼저 처리할 수 있게 하기 위해


발생 이유

  • cpu 사용 시간 만료
  • I/O작업 필요시
  • 다른 리소스를 기다릴 때
  • 인터럽트 처리 기다릴 때


프로세스와 스레드의 컨텍스트 스위칭 차이점

프로세스

  • 프로세스의 경우 공유 데이터가 없으므로 새로 캐시 정보를 쌓아야 하기 때문에 프로세스 컨텍스트 스위칭에 부담이 될 수 있다

스레드

  • 스레드의 경우 Code, Data, Heap은 부모 프로세스 영역에서 공유하고 있기 때문에 컨텍스트 스위칭이 빠르다
    • 스택만 각 스레드에 독립적으로 할당해준다