🥲 서론
최근 면접에서 프로세스와 스레드의 차이점에 대한 질문을 받았고, 컨텍스트 스위칭에 관한 추가적인 질문을 받게 되었습니다.
어느정도 알고 있다고 생각했지만, 막상 면접 질문으로 받으니 자세히 모르고 있었던 것 같아서 공부한 내용을 바탕으로 정리를 해봅니다.
😇 본론
컴퓨터 구조
현재의 컴퓨터 구조를 만든 폰노이만의 아키텍처 입니다.
실제로 우리가 컴퓨터를 할 때 아래와 같이 다양한 프로그램들이 실행하게 됩니다.
이 프로그램들은 메모리(RAM)에 각각 올라가게 되고 (이를 프로세스라고 부릅니다.)
메모리에 적재된 프로세스를 CPU(혹은 프로세서)에서 실행을 하게 됩니다.
우리는 10개도 넘는 프로그램을 한 번에 실행도 할 수 있고, 20개도!! 넘는 프로그램들을 한 번에 실행할 수도 있습니다.
그렇다면 CPU는 이 많은 프로그램들을 다 병행으로 실행을 하고 있을까요??
CPU Core와 Thread
중앙 처리 장치 (CPU: Central Processing Unit)
컴퓨터에서 기억, 해석, 연산, 제어라는 4대 주요 기능을 관할하는 장치를 말한다.
- 나무위키
흔한 인텔의 CPU 스펙입니다.
저희가 여기서 살펴볼 부분은 CORE와 THREADS 입니다.
Core
CPU의 부품 중 하나 입니다.
물리적으로 CPU가 일하는 공간입니다.
요즘은 CPU마다 코어가 2개 이상인 멀티 코어를 통해 CPU의 성능을 높입니다.
듀얼코어(2코어), 쿼드코어(4코어), 헥사코어(6코어), 옥타코어(8코어) ...
50% 성능을 내는 싱글코어와 100%의 성능을 내는 멀티코어.
두 개의 CPU가 있습니다.
그리고,
A 프로그램은 코어의 30%를 사용합니다.
B 프로그램은 코어의 80%를 사용합니다.
이때 A프로그램은 싱글코어와 듀얼코어 모두 순조롭게 사용할 수 있습니다.
B프로그램은 싱글코어에서는 제대로 돌리기 힘들고, 듀얼코어에서는 돌릴 수 있어보입니다.
하지만, B프로그램이 싱글코어에 맞게 개발이 되었다면, 멀티코어에서 제대로 효율을 내지 못하게 됩니다.
결국 B프로그램 자체도 멀티코어에서 제대로된 성능을 내기 위해 개발이 되어야 합니다.
이러한 방식이 멀티스레드 방식이 됩니다.
Thread
위에서 Core는 물리적으로 구별이 되었다면, Thread는 논리적으로 구별이 되었다고 보면 됩니다.
제가 가장 헷갈렸던 부분이 이 파트입니다.
우리가 잘 알던 소프트웨어의 thread와 하드웨어의 thread를 분리해서 바라보아야 합니다.
위 Core에서 설명했던 멀티코어는 '하드웨어 관점'에서의 물리적인 구성 단위입니다.
우리가 프로그래밍할 때 보통 부르는 멀티스레드/멀리스레딩은 '소프트웨어 관점'에서의 논리적 작업처리 단위입니다.
이 파트에서 설명하는 Thread는 '소프트웨어 관점'이 아닌 '하드웨어 관점'의 Thread에 대해서 설명을 합니다.
Core와 Thread
이전에는 코어 하나 당 스레드가 하나였습니다.
4개의 코어가 있다면 4개의 스레드가 있었던거죠.
하지만 동시 멀티스레딩 (SMT: Simultaneous Multi Threading)이라는 기술을 통해
하나의 코어에서 둘 이상의 작업(둘 이상의 스레드)을 동시에 진행할 수 있게 되었습니다.
AMD에서는 SMT라고 부르고, 인텔에서는 하이퍼쓰레딩(HT: Hyper Threading)이라고 부릅니다.
이 기술을 통해서 물리적인 코어1개를 논리적인 2개 이상의 스레드로 실행단위를 나눌 수 있게 되었습니다.
정리해보면 하드웨어의 스레드는 물리적인 코어의 논리적인 실행단위를 의미하고 있습니다.
🧐 1코어에서 하나의 프로세서가 실행된다면 어떻게 20개의 프로그램이 동시에 실행이 되는거지?
위 인텔 스펙에서 보면 6코어의 12스레드를 탑재하고 있습니다.
결국, 많아봐야 12개의 스레드에서 병렬 작업이 가능하단 소리죠.
하지만, 저희는 20개의 프로그램들을 동시에 켜놓고 작업을 진행하곤 할 수 있습니다.
이때 Context Switch(Context Switching) 기법이 나오게 됩니다.
다음 파트에서 컨텍스트 스위칭과 멀티 프로세스, 멀티 스레드의 장단점에 대해서 알아보도록 하겠습니다.
😁 결론
CPU: 컴퓨터의 뇌
Core: 작업하는 물리적 위치
Thread: 작업하는 논리적 개념
참고
'OS' 카테고리의 다른 글
[OS] 스레드 종류 알아보기 - 하드웨어, OS, 커널, 유저, 그린 ... (0) | 2022.08.29 |
---|