SungJin Kang

SungJin Kang

hour30000@gmail.com

© 2024

Dark Mode

Process Context Switching vs Thread Context Switching

프로세스는 쉽게 말하면 현재 실행 중인 프로그램을 말한다. 이 프로세스는 스택, 힙, 데이터, 코드 영역의 데이터들을 메모리에 가지고 있다.

반면 쓰레드는 프로세스 내의 여러 흐름들로 각각의 쓰레드들은 힙, 데이터, 코드 영역은 공유를 하지만 스택 영역은 각 스레드마다 각자 따로 관리한다.


프로세스 컨테스트 스위칭은 쓰레드 컨테스트 스위칭에 비해 비용이 매우 크다.
하나 하나 살펴보자.

우선 쓰레드 컨테스트 스위칭은 가상 메모리 공간을 유지한다. 당연하다 쓰레드는 하나의 프로그램 내의 여러 흐름으로 그 프로그램의 가상 메모리 공간을 유지하는 것은 당연하다.

반면 프로세스 컨테스트 스위칭은 당연히도 프로그램간 가상 메모리 공간이 다르기 때문캐시의 데이터들도 완전히 교체되어야하고, 가상 메모리 공간이 바뀌었기 때문에 물리적 메모리와 논리적 메모리 주소 공간의 매핑 관계에 대한 캐시인 TLB도 다 날라가기(flush) 때문에 프로세스 컨테스트 스위칭 후 한동안은 가상 메모리 주소의 물리적 메모리 주소로의 매핑이 느려진다.

쓰레드 컨테스트 스위칭프로그램 카운터 ( PC ) ( 스택 영역이 다르기 때문에 당연 ), 스택 포인터 ( 스택 영역이 다르기 때문에 당연 ) 등의 레지스터의 데이터들만 교체해주기 떄문에 컨테스트 스위칭 비용이 싸다.

반면 프로세스 컨테스트 스위칭은 페이지 테이블 ( 프로세스 마다 존재, 정확히는 MMU에서 가리키는 페이지 테이블의 주소 ), 커널 자원, 캐시, 레지스터 등등 여러 자원들이 교체가 되어 상대적으로 쓰레드 컨테스트 스위칭에 비해 비싸다.
현재 프로세스의 상태는 PCB에 임시로 저장해두었다 다시 해당 프로세스가 CPU를 점유했을 때 복구한다.
이 PCB에는 프로세스 상태 ( New, Ready, Running, Waiting… ), 프로그램 카운트 ( 다음 실행할 메모리 주소 ), CPU 레지스터 값, CPU 스케줄링 정보, 메모리 관리 정보, Accounting 정보, IO 상태 정보 등을 저장한다.


여담으로 멀티 프로세싱에 비해 멀티 스레딩이 왜 더 널리 사용되는지 알아보자.
우선 멀티 스레딩은 스레드들이 같은 가상 메모리 공간을 공유하기 때문에 병렬 연산에 스레드간 데이터 공유도 매우 간단하다.
반면 멀티 프로세싱은 프로세스간 데이터를 공유하려할 때 매우 복작하고 느리다. ( 참고 )

또한 멀티 스레딩의 경우 스레드의 생성 비용이 적은데 쓰레드 생성을 할 때 단순히 해당 쓰레드를 관리하는 자료구조 ( 스레드 상태에 대한 )만 Kernel에 추가하면 된다. 프로그램의 코드와 데이터 영역 데이터들은 이미 메모리에 올라와있으니 추가적인 리소스 복사가 필요없는 것이다.
반면 멀티 프로세싱의 경우에는 프로세스를 생성하는데 해당 프로그램에 대한 코드, 데이터 영역을 메모리에 올려야하니 시간이 오래걸린다.


references : https://hoony-gunputer.tistory.com/entry/Thread-Context-Switching-vs-Process-Context-Switching