unreal 5기

251001 언리얼엔진 본캠프 41일차 프로세스와 스레드(3)

parkjinnam 2025. 10. 1. 11:26

컨텍스트 스위칭(Context Switching)

컨텍스트 스위칭(Context Switching)

은 CPU가 한 프로세스에서 다른 프로세스로 전환할 때 발생하는 일련의 과정 또는 멀티스레드 환경에서 스레드 간의 실행을 전환하는 기술을 말한다. 즉 프로세스 컨텍스트 스위칭이 있고 스레드 컨텍스트 스위칭이 있다. 오늘은 이에 대해서 자세하게 알아보도록 하자

 

병렬성(Parallelism)과 동시성(Concurrency)

컨텍스트 스위칭에 대해서 알기 위해서는 일단 CPU의 작업 처리 과정을 이해할 필요가 있다. 병렬성(Parallelism)은 직관적으로 명령어를 메모리에서 뽑아 해석하고 실행하는 반도체 유닛인 코어에 맞춰 여러 개의 프로세스와 스레드를 병렬로 수행하는 것을 의미한다. 즉 코어가 많을수록 더 많은 작업을 병렬로 실행이 가능한 것이다.

 

동시성(Concurrency)은 둘 이상의 작업이 동시에 실행되는 것을 말하는데 앞서 말한 병렬성과 햇갈리기 쉽지만 의미가 다르다. 예컨대 1개의 코어에서 여러 작업을 진행한다 했을 때 하던 작업을 마치고 다른 작업으로 넘어가는 것이 아닌 여러 개의 작업을 순환하면서 하나의 작업을 잘게 나누어 일정 부분만 작업하고 다음 작업으로 넘어가 동일한 형식으로 반복하여 겉으로 보기에는 동시에 작업하는 것처럼 보이게 하는 것을 의미한다. 이렇게 작업들을 번갈아 바꾸는 것을 컨텍스트 스위칭이라고 한다.

 

프로세스 컨텍스트 스위칭(Process Context Switching)

프로세스 컨텍스트 스위칭은 앞서 설명했듯 하나의 프로세스만 실행할 수 있는 CPU에서 여러 개의 작업을 효율적으로 처리하기 위해 동시성을 적용하여 작업을 하는 과정에서 프로세스의 전환이 일어나고 이러한 과정을 의미한다. 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 보관하고 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업을 하는데 이러한 컨텍스트 스위칭이 일어날 때 다음에 올 프로세스는 스케줄러가 결정하게 된다.

 

PCB(Process Control Block)

PCB(프로세스 제어 블록)은 운영체제에서 프로세스를 관리하기 위해 해당 프로세스의 상태 정보를 담고 있는 자료 구조로서 프로세스를 컨텍스트 스위칭할 때 기존 프로세스의 상태를 어딘가에 저장해 둬야 다음에 똑같은 작업을 이어서 할 수 있고 새로 해야 할 작업의 상태 또한 알아야 어디서부터 작업을 시작할지 결정할 수 있기에 PCB는 프로세스 스케줄링을 위해 프로세스에 관한 모든 정보를 저장하는 임시 저장소의 역할을 한다.

 

Context Switching Overhead

이러한 컨텍스트 스위칭 과정을 통해서 빠른 반응성과 동시성을 제공하여 효율적인 작업이 가능하지만 CPU를 통해 프로세스를 변경하는 과정에서 프로세스의 상태, 레지스터 값 등이 저장되고 불러와지는 과정에서 시스템에 많은 부담을 주게 된다. 또한 프로세스를 저장하고 후임 프로세스를 호출하는 과정에서 CPU가 idle상태에 조금 있다가 호출되는데 이 간극을 컨텍스트 스위칭 오버헤드(Context Switching Overhead)라고 한다.

 

컨텍스트 스위칭 오버헤드는 PCB저장 및 복원비용, CPU 캐시 메모리 무효화에 따른 비용, 프로세스 스케줄링 비용 등을 이유로 발생되는데 컨텍스트 스위칭 과정에서 PCB를 저장하고 복원하는데 비용이 발생하며 프로세스 자체가 교체되는 것이니 기존의 CPU 캐시 메모리에 저장된 데이터가 무효화된다. 이 과정에서 메모리 접근 시간이 늘어나고 성능 저하가 발생할 수 있으며 CPU 스케줄링 알고리즘에 따라 프로세스를 선택하는 데에도 비용이 발생하며 이 비용도 만만치 않다.

 

스레드 컨텍스트 스위칭(Thread Context Switching)

스레드 컨텍스트 스위칭은 멀티 스레딩 환경에서 스레드 간의 실행을 전환하는 기술을 의미하며 프로세스 컨텍스트 스위칭과 다른 점으로는 하나의 프로세스 내의 스레드들을 교환한다는 점이다.

 

TCB(Thread Control Block)

PCB처럼 TCB(스레드 제어 블록)는 각 스레드마다 운영 체제에서 유지하는 스레드에 대한 정보를 담고 있는 자료구조로서 PCB안에 위치한다. 스레드의 상태정보, 스레드 ID, 스레드의 우선순위, 스케줄링 정보 등 다양한 정보를 저장하며 스레드가 생성될 때 같이 생성되어 스레드가 소멸될 때 같이 소멸한다. 이전 시간에 다룬 뮤텍스와 세마포어와 같은 동기화 기법을 사용할 때에도 TCB에서 해당 스레드의 뮤텍스, 세마포어 정보를 관리하게 된다.