[CS] 컨텍스트 스위칭

말하는 감자·2025년 2월 17일

CS

목록 보기
31/33
post-thumbnail

Context Switching

정의

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

컨텍스트?

프로세스나 스레드의 현재 상태를 의미
운영체제나 여러 프로세스나 스레드를 효율적으로 관리하기 위한 정보들이며, 다음과 같은 요소들이 포함
1. CPU 레지스터 상태: 현재 실행중인 프로세스의 레지스터에 저장된 값
2. 프로세스 상태: 프로세스가 실행중인지, 대기중인지, 중단되었는지
3. 프로그램 카운터: 다음에 실행할 명령어의 주소를 저장
4. 메모리 관리 정보: 페이지 테이블이나 세그먼트 테이블과 같은, 프로세스의 메모리 사용 정보 포함
5. 입출력 상태 정보: 파일 디스크립터 등 프로세스와 관련된 입출력 자원에 대한 정보

왜?

  • 여러 프로세스와 스레드를 동시에 실행시키기 위해(그렇게 보이려고)
  • 여러 프로세스와 스레드들이 공정하게 CPU 시간을 나눠 갖기 위해
  • 높은 우선순위의 작업을 빠르게 처리하기 위해

언제

  • 주어진 Time Slice를 다 사용
  • 스케줄링에 따라
  • 다른 리소스를 기다려야 함
  • 인터럽트 발생 시
  • 입출력 작업

과정


프로세스 1,2가 번갈아가면서 실행되고 있는데, 매우 짧은 시간동안 번갈아 실행되면서 동시에 실행되는 것 처럼 보이게 된다.
이러한 컨텍스트 스위칭은 OS의 커널(Kernel)에 의해서 수행되며, 다른 프로세스끼리의 스위칭인지 같은 프로세스의 스레드들끼리의 스위칭인지로 구분된다.

  • 커널: 하드웨어와 소프트웨어 간의 중개 역할(프로세스 관리, 메모리 관리, 장치 관리, 파일 시스템 관리)

공통점

  1. 커널 모드에서 실행

    커널모드?: 어느 프로세스가 실행되다가 하드웨어와 밀접한 일들 혹은 컴퓨터의 여러 리소스들을 다뤄야하는 상황이 발생하면 프로세스가 직접 컴퓨터 리소스에 접근하는 것이 아니라 운영체제(커널)을 통해서 접근하게 된다. 이때, 프로세스에서 커널로 통제권이 넘어가서 커널에 의해서 실행되는 상태

  2. CPU의 레지스터 상태를 교체
    다른 프로세스(B)가 실행되면 실행되고 있던 프로세스(A)의 레지스터 상태들을 어딘가에 저장하고 다른 프로세스가 실행된다.
    다시 A프로세스 실행시, 그때 상태 정보들을 가져와서 실행

차이점

  1. 다른 프로세스끼리의 스위칭은 가상 메모리 주소 관련 처리를 추가로 수행한다.
    같은 프로세스에 속한 스레드간에는 공유하는 메모리 지역(코드 영역, 데이터 영역, 힙 영역)이 존재한다
    그렇기 때문에 같은 스레드간의 스위칭은 메모리 관련하여 추가작업이 필요 없지만, 프로세스간의 스위칭이 발생시 메모리 주소 체계가 다르기 때문에 메모리 주소 관련 처리를 추가로 수행해야 한다.

영향

  • 캐시오염
    컨텍스트 스위칭이 일어나면, 캐시에 저장한 데이터나 값이 의미없는 정보가 되어버린다.
    컨텍스트 스위칭 직후 캐시를 보면, 이전에 프로세스에서 실행되었던 정보들을 저장하고 있을 가능성이 매우 높다.
  • 오버헤드
    어플리케이션 관점에서, 컨텍스트 스위칭은 순수한 오버헤드다.
    즉, 내가 실행한 프로그램의 동작과는 아무 상관 없는 순수한 CPU 작업을 필요로 하는 간접 비용이다.
profile
주니어개발자(?)

0개의 댓글