본문 바로가기
Computer Sience/Operating System

스레드 컨텍스트 스위칭 vs 프로세스 컨텍스트 스위칭

by 제우제우 2024. 5. 18.
 

목차

  • 목표
  • 컨텍스트 스위칭(context switching)
  • 프로세스를 제어하기 위한 정보 모음 (PCB Process Control Block)
  • 프로세스, 스레드 구조
  • 스레드 컨텍스트 스위칭
  • 프로세스 컨텍스트 스위칭
  • 스레드 컨텍스트 스위칭이 더 빠른 이유
  • 컨텍스트 스위칭이 미치는 간접적인 영향?
  • 유저 관점에서 컨텍스트 스위칭이란?

목표

  • 컨텍스트 스위칭은 무엇인가
  • 왜 스레드 컨텍스트 스위칭이 프로세스 컨텍스트 스위칭 보다 더 빠른지 이해

컨텍스트 스위칭(context switching)

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

오늘날 프로세스는 무조건 1개 이상의 스레드를 가진다.

CPU 기본 실행 단위 = 스레드

그래서 프로세스가 다른 프로세스로 교체된다는 말은 프로세스(스레드)에서 다른 프로세스(스레드)로 교체된다는 말과 똑같다.

컨텍스트(Context)?

  • 프로세스/스레드의 상태
  • (CPU, 메모리….)에서의 상태

컨텍스트 스위칭은 왜 필요한가?

→ 여러 프로세스/스레드를 동시에 실행시키기 위해서 (멀티태스킹)

컨텍스트 스위칭은 언제 발생하는가?

  • 주어진 time slice(quantum)를 다 사용
  • IO 작업을 수행해야함
  • 다른 리소스를 기다려야함

멀티 태스킹 시스템에서 컨텍스트 스위칭

컨텍스트 스위칭은 누구에 의해 실행되는가?

OS 커널(kernel)

  • 각종 리소스를 관리/감독하는 역할
  • 컨텍스트 스위칭은 kernel이 통제권을 가지고 집행한다.
  • OS의 핵심

컨텍스트 스위칭은 구체적으로 어떤 과정으로 일어나는가?

  • 다른 프로세스끼리 스위칭 → 프로세스 컨텍스트 스위칭
  • 같은 프로세스의 스레드끼리 스위칭 → 스레드 컨텍스트 스위칭

프로세스 컨텍스트 스위칭과 스레드 컨텍스트 스위칭의 공통점?

커널 모드 실행

프로세스가 컴퓨터의 리소스에 접근을 하려면 프로세스가 직접 접근을 하는게 아니라

운영체제를 통해서 접근을 하는데 이때 운영체제의 커널을 통해서 접근을 한다.

이때 커널에게 통제권이 넘어가고 커널에서 실행되는 구간을 커널 모드라고 표현 한다.

레지스터 상태 교체

CPU에는 여러가지 레지스터가 있다. 이 레지스터들은 각종 명령어를 수행하기 위해 여러 데이터들을 저장하는 존재이다.

프로세스1이 CPU에서 실행되고 있다가 프로세스2를 실행 하려고 하면 즉 프로세스2로 컨텍스트 스위칭이 일어나면 프로세스1의 레지스터 상태를 어딘가에 저장을 한다. (어딘가 → RAM)

이때 저장을 하는 이유는 프로세스2가 실행이 끝나면 다시 프로세스1을 실행하기 위해서이다.

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

프로세스 컨텍스트 스위칭은 서로 다른 프로세스들은 각자의 메모리 주소 체계를 가지기 때문에

가상(virtual) 메모리 주소 관련 처리를 추가로 수행한다.


프로세스를 제어하기 위한 정보 모음 (PCB Process Control Block)

PCB 구성

  • 프로세스 식별자(Process ID)
  • 프로세스 상태
  • 다음에 실행할 명령어 주소
  • 이전에 작업하던 작업 내용(레지스터)
  • CPU 스케줄링 정보(우선순위, 최종 실행시각, CPU 점유시간…)
  • 프로세스 주소 공간

프로세스(스레드)를 스위칭 하면서 이런 정보(PCB, TCB)를 로딩하는 시간이 필요한데

그 순간을 바로 컨텍스트 스위칭 이라고 한다.


프로세스, 스레드 구조

Code : Program Counter가 있다. 스레드 개수와 동일한 Program Counter가 있다.


스레드 컨텍스트 스위칭

현재 스레드1이 실행중

스레드2로 스레드 컨텍스트 스위칭 (오류 : PCB → TCB )


프로세스 컨텍스트 스위칭

프로세스1 실행중

프로세스2로 프로세스 컨텍스트 스위칭

MMU(MemoryMangementUnit)이 프로세스2의 메모리 영역을 바라보게 바꾼다.

가상 주소와 실제 물리적 주소를 가지고 있는 TLB(Cache)를 비운다.

→ 이렇게 해야지 프로세스2의 T2 스레드가 로딩 되었을 때 자신의 메모리 영역을 볼 수 있게 한다. 하지 않으면 전 프로세스의 메모리 영역을 볼 수도 있다.


스레드 컨텍스트 스위칭이 더 빠른 이유

메모리 주소 관련 처리는 하지 않기 때문

 

프로세스 컨텍스트 스위칭의 추가 작업

  • MMU, TLB
  • MMU가 프로세스 2의 메모리 영역(Heap, Code, Data) 공통 부분을 보게 바꾼다.
  • TLB(Cache)를 비운다.

+ PCB 교체 비용 > TCB 교체 비용  


컨텍스트 스위칭이 미치는 간접적인 영향?

캐시(cache) 오염(pollution)

→ 스레드 컨텍스트 스위칭은 그나마 덜하다.

→ 프로세스 컨텍스트 스위칭은 프로세스끼리 공유되는 데이터가 아예 없다.

 

그래서 컨텍스트 스위칭이 일어나면 cache에 있는 데이터들은 이미 이전 프로세스(스레드)의 데이터가 있어서 결국 CPU가 Memory까지 가야 한다. (성능에 안 좋다!)


유저 관점에서 컨텍스트 스위칭이란?

→ 순수한(pure) 오버헤드 (overhead)


참고 자료

쉬운 코드 : https://www.youtube.com/watch?v=Xh9Nt7y07FE&list=PLcXyemr8ZeoT-_8yBc_p_lVwRRqUaN8ET&index=7