[운영체제] 컨텍스트 스위칭

지니🧸·2023년 4월 7일
0

CS 저장소

목록 보기
6/48

🏓 컨텍스트 스위칭

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를 이어서 시행

🏓 컨텍스트 스위칭 발생 시기

즉, 언제 기존 프로세스가 인터럽트되는가?

  1. 멀티태스킹: 멀티태스킹 환경에서 프로세스 전환 과정에서 문맥 교환이 일어남
  • 선점형 시스템) 스케쥴러가 프로세스를 전환할 수 있음
  1. 인터럽트 처리: 인터럽트가 발생할 때
  2. 사용자 및 커널 모드 전환: 운영체제에서 사용자 모드와 커널 모드 사이의 전환이 필요할 때

참고:

profile
우당탕탕

0개의 댓글