기술면접 예상 질문지에서 프로세스와 스레드에 관한 질문들은 자주 등장합니다. 운영체제 강의에서 프로세스와 스레드를 공부하였지만, 컴퓨터 구조 강의를 듣지 않은 저에게는 소프트웨어 적으로 동작하는 프로세스와 스레드를 추상적으로 이해하였고, 실질적으로 CPU에서 어떻게 동작하는지 알지 못했습니다. 이번 기회에 프로세스와 스레드를 바라보는 하드웨어의 관점을 이해하고 멀티 프로세스와 멀티 스레드에 관해 간단하게 정리해보려고 합니다.
컴퓨터 CPU의 성능 스펙을 보시면 자주 등장하는 단어들이 존재합니다. 대표적인 단어가 클럭
과 코어
입니다. 두 지표가 높으면 CPU 성능이 좋은 것을 알고는 있지만 왜 CPU 성능이 높아지는 이해하지 못하고 있었습니다. 두 지표는 무엇을 의미하는지 알아보려고 합니다.
클럭
은 CPU가 명령어를 처리하는 명령어 사이클의 흐름을 결정하는 수치입니다. 컴퓨터 부품들은 이러한 클럭 신호에 맞추어 동작하게 되며, 빠른 박자로 동작하게 될수록 CPU는 명령어 사이클을 빠른 속도로 반복하고, 다른 부품들도 더 빠르게 동작하게 됩니다. 클럭 속도
의 단위인 Hz
는 1초에 반복되는 클럭의 수를 의미합니다. 1초에 1번 반복되는 명령어 사이클은 1Hz가 되는 것입니다. 클럭
에 비례하여 CPU의 성능이 증가하는 것은 아니지만, 일반적으로 클럭
이 높을수록 CPU의 성능이 좋습니다.
CPU의 성능을 높이는 다른 방법으로는 CPU의 코어와 스레드 수를 늘이는 방법이 있습니다. 지금까지 CPU의 정의를 명령어를 실행하는 부품
으로 알고있었지만, 기술적인 발전으로 오늘날의 CPU에는 명령어를 실행하는 부품
을 여러개 넣을 수 있게 되었습니다.
명령어를 실행하기 위해서는 ALU
, 제어장치
, 레지스터
와 같은 부품들이 필요합니다. 하나의 코어에는 이러한 부품들이 포함되며, 여러개의 코어를 지닌 CPU는 여러 명령어를 다른 코어에서 실행할 수 있게되어 성능이 향상하게 됩니다. 이처럼 여러개의 코어를 포함하는 CPU를 멀티코어 CPU
또는 멀티코어 프로세서
라고 부릅니다.
스레드
는 운영체제를 공부하며 많이 접한 용어입니다. 하지만 소프트웨어 관점에서 바라보는 스레드와 하드웨어 관점에서 바라보는 스레드에는 약간의 차이가 존재합니다. 하드웨어에서 바라보는 스레드
의 정의는 하나의 코어가 동시에 처리하는 명령어 단위
입니다. 소프트웨어에서 흔하게 말하는 하나의 프로그램에서 독립적으로 실행되는 단위
의 스레드
와는 중점으로 두는 곳이 다릅니다.
위에서 명령어를 실행하기 위한 부품을 코어라고 하였습니다. 따라서 멀티스레드를 지원하는 CPU는 하나의 코어에서 여러개의 명령어를 동시에 실행할 수 있으며, 하나의 코어로 여러 명령어를 동시에 처리하는 CPU를 멀티스레드 프로세서
혹은 멀티스레드 CPU
라고 합니다.
1코어 1스레드 CPU에서 소프트웨어적 관점의 멀티 스레딩은 동시성을 통해 구현할 수 있습니다. 하지만 하드웨어적 관점에서 1코어 1스레드 CPU는 동시에 하나의 명령어만 실행할 수 있기 때문에 멀티 스레딩을 구현하는 것을 어렵습니다. 따라서 관점에 따른 스레드의 개념은 구분하여 기억하는 것이 좋습니다.
명령어를 실행하기 위해서는 프로그램 카운터, 스택 포인터, 데이터 버퍼 레지스터, 데이터 주소 레지스터 등 다양한 레지스터가 필요하게 됩니다. 멀티스레드 프로세서
를 설계하는 것에서 가장 큰 핵심 또한 이러한 레지스터입니다. 동시에 여러 명령어들을 처리하기 위해서는 이러한 레지스터 세트들도 여러개