본문 바로가기
개발자 준비/운영체제

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

by osul_world 2022. 3. 16.
728x90

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


 

컨택스트 스위칭이란?

CPU는 한 번에 하나의 스레드나 프로세스만 실행 가능하다.

때문에 하드웨어적으로 코어를 늘리는 멀티코어가 등장했다.

 

 

그래서 동시에 여러 스레드나 프로세스를 단일 CPU에서 실행하기 위해서는 서로 번갈아 가면서 실행이 돼야 하고

이때 CPU에서 실행 중이던 프로세스나 스레드에서 다른 프로세스나 스레드로 교체되는 것을 컨텍스트 스위칭이라 한다.

 

컨택스트 스위칭이 발생하는 경우

멀티태스킹 시스템에서는 프로세스나 스레드가 주어진 time slice(quantum)를 다 사용했을 때 발생하기도 하고,

time slice는 프로세스가 cpu를 점유할수있는 시간이다.

 

 

IO 작업을 하러 가야 해서 CPU를 더 이상 점유할 필요가 없거나,

다른 프로세스나 스레드가 쓰고 있는 리소스를 기다려야 하거나,

인터럽트가 발생하거나 등등

 

 

컨텍스트란?

  • 실행 중인 프로세스와 스레드의 CPU와 메모리에서의 상태를 의미

"CPU에는 여러 가지 레지스터가 있습니다.

연산에 필요한 데이터를 저장하거나, 다음번에 실행할 명령어가 있는 메모리 주소를 저장하는 등, 목적에 따라 여러 종류의 레지스터가 존재합니다.

메모리 상태는 자신에게 할당된 메모리 영역에 대한 상태일 거고요."

 

 

컨텍스트 스위칭은 왜 필요할까?

하나의 CPU나 코어(core)에서 여러 프로세스나 스레드를 동시에 실행시키기 위해서 필요하다.

 

 

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

컨텍스트 스위칭의 전 과정을 관장하는 존재는 OS(운영체제)의 커널(kernel)이다.

커널은 OS 그 자체로 불릴정도로 OS의 핵심적인 존재이다.

컴퓨터의 리소스관리, 하드웨어와 어플리케이션간 접근 등 많은 것을 관리감독한다.

이 커널이 하는 일 중에 하나가 바로 컨텍스트 스위칭이다.

 

 

CPU에서 실행되던 프로세스나 스레드를 다른 프로세스나 스레드로 교체하는 일은, CPU와 그 외 관련 하드웨어를 조작해야 하는 일이기 때문에 커널이 직접 이 일을 담당하게 됩니다.

 

 

 

컨텍스트 스위칭의 종류

  • 프로세스 컨텍스트 스위칭: 서로다른 프로세스의 스레드로 바뀌는것
  • 스레드 컨텍스트 스위칭: 같은 프로세스의 스레드로 바뀌는것

 

프로세스 컨텍스트 스위칭

프로세스는 한개의 단일 스레드를 기본으로 갖는다고 했었다.

멀티 스래딩 환경이 아니라면 프로세스는 한개의 스레드라고 볼수있다.

 

프로세스 컨텍스트 스위칭은 다른 프로세스에 소속된 스레드로 교체 하는것이다.

 

스레드 컨텍스트 스위칭

스레드 컨텍스트 스위칭은 같은 프로세스에 속한 스레드로 교체 하는것하는 것이다.

 

 

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

두 컨텍스트 스위칭은 공통점이 있다.

  • 커널이 담당해서 실행
  • 스위칭 할때 CPU의 레지스터 상태를 교체

레지스터는 기존 작업 세이브와 다음 작업 로딩 등 작업을 한다고 생각하자.

 

하지만 프로세스 컨텍스트 스위칭은 추가로 가상(virtual) 메모리 주소 관련 처리를 해줘야 한다.

프로세스 컨텍스트 스위칭이 일어나면 MMU라는 존재가, 교체돼서 실행될 프로세스 메모리 영역을 바라보도록 해야 하고, TLB라는 가상의 메모리 주소와 물리적인 메모리 주소의 매핑 정보를 저장하는 캐시도 비워줘야 한다.

 

 

왜냐하면 서로 다른 프로세스는 서로 다른 메모리 영역을 가지고 있기 때문이다.

 

그래서 스레드 컨텍스트 스위칭이 더 빠른 이유는 , 프로세스 컨텍스트 스위칭에 비해 메모리 관련해서는 따로 처리해 줄 것이 없기 때문이다.

스래드는 한 프로세스 내에서 존재하기 때문에 힙같은 일부 메모리를 공유한다.

 

 

 

정리

어플리케이션 입장에서 컨텍스트 스위칭은 오버헤드를 의미한다.

따라서 불필요한 컨텍스트 스위칭은 최대한 일어나지 않도록 하는게 좋은것이다.

컨텍스트 스위칭이 너무 자주 일어난다면 이는 그만큼 프로그램이 실행되어야 할 시간을 뺏긴 것이기 때문에 성능 상으로도 그렇게 좋은 것이 아니라고 볼 수 있다.

 

 

Reference


(9) 컨텍스트 스위칭 뽀개기! 의미와 종류와 왜 스레드 컨텍스트 스위칭이 더 빠르다고 하는지까지..! 이 모든 것을 시원~~하게 설명합니다!! - YouTube

스레드 컨텍스트 스위칭, 프로세스 컨텍스트 스.. : 네이버블로그 (naver.com)

 

728x90