본문 바로가기
Computer Architecture/Basic

스레드(thread)와 멀티 스레드 CPU

by FastBench 2023. 4. 6.

초안 :  2023.04.05

 

CPU (하드웨어) 에서 사용되는 스레드와 프로그래밍에서 사용되는 스레드는 의미가 다르다.

인터럽트의 주체가 어디냐에 따라 exception(예외)  과 hardware interrupt 로 분리되듯, 스레드도

하드웨어적 스레드, 소프트웨어적 스레드로 나뉜다.

 

하드웨어적 스레드

하나의 코어가 동시에 처리하는 명령어 단위. (= 명령어를 실행하는 단위)
그러니까 지금까지 우리가 게시글에서 다룬 CPU 들은 1코어 1스레드 CPU 인 셈이다.

만약 여러 스레드를 지원하는 CPU 는 하나의 코어로도 여러 개의 명령어를 동시에 실행할 수 있다.
이렇게 하나의 코어로 여러 명령어를 동시에 처리하는 CPU를 멀티스레드 CPU 라고 한다.

하이퍼 스레딩 (Hyper threading) 은 인텔의 멀티스레드 기술을 의미한다.

소프트웨어적 스레드

하나의 프로그램에서 독립적으로 실행되는 단위.
하나의 프로그램이 실행되는 과정에서  한 부분만 실행될 수 있지만, 여러 부분이 동시에 실행될 수도 있다.
예를 들자면 음악 재생도 하면서, 가사도 보여주고, 제목과 아티스트를 스크롤 하면서 보여주는 한 프로그램의 각각의 기능이 스레드의 예시이다. 보통 프로그래밍에서 스레드라고 하면 이를 의미한다.
만약 CPU 가 1코어 1스레드 CPU 이더라도 소프트웨어적으로는 수십개의 소프트웨어적 스레드를 실행할 수 있다. (방법은 여러가지일것이다, 여러개를 끊어서 실행을 한다던지... 이와 같은 스케쥴링 방법은 후에 운영체제 카테고리에서 다룰 예정이다.)

 

보통 스레드라고 하면 소프트웨어적인 스레드를 의미하므로, 하드웨어 적인 스레드를 언급할때는 '하드웨어적 스레드' 라고 지칭한다.

 


멀티스레드 CPU (프로세서) 원리의 핵심은 레지스터이다. (당연히 여기서는 하드웨어적 스레드를 의미하는 것이다.)

하나의 코어로 여러 명령어를 동시에 처리하려면 PC, 스택 포인터, 데이터 버퍼 레지스터, 데이터 주소 레지스터와 같은 필수 레지스터들을 여러개 가지고 있어야 한다.

 

아래 그림과 같이 하나의 코어가 2세트의 레지스터를 가지고 있을 경우 두개의 명령어를 처리하기 위한 정보들을 각각의 레지스터에 저장할 수 있다. 따라서 두 개의 명령어가 동시에 실행될 수 있는 것이다.

 

프로그램의 입장으로 보면 코어는 하나이지만, 명령어를 처리할 수 있는 CPU 는 마치 두개인 것 처럼 보이게 된다.

따라서 하드웨어 스레드는 '논리 프로세서 (Logical processor)' 라고 불리기도 한다.

 

 

Reference

  • 혼자 공부하는 컴퓨터 구조 + 운영체제, 한빛미디어, 강민철

댓글