안녕하세요~


이번글은 Multi-Core, Thread, Context switching이라는 개념을 설명을 드리고 CPU 스펙을 평가하기 위한 기본 이론지식을 마무리하도록 할거에요~






<1.Clock>


CPU는 메모리에서 명령어를 처리하는 역할을 한다고 했죠? 그렇다면 CPU가 명령어를 처리하는 속도는 어디서 기인할까요?


바로... Clock 입니다!


Clock이라는 건 초당 0,1이 얼마나 반복될 수 있는지를 보여주는 CPU의 성능지표에요. 즉, Clock이 빠를 수록 더 많은 0,1을 처리할 수 있게되기 때문에 더 빠르게 명령어들을 처리할 수 있게 되는거죠. 예를들어, 1Hz라고 한다면 1초당 0과1이 한 번 반복하는것이고, 1MHz라고 한다면 초당 0,1이 백만번 반복하게 되는거에요.


<사진1>



그래서 2004년까지는 CPU의 성능을 높이기 위해 Clock 속도를 높였는데요. Clock 속도를 높이자 CPU의 발열문제가 발생하기 시작했어요. 그래서 이때부터 Single core가 아닌 core를 두 개로 늘리는 전략을 구성하기 시작한것이죠. 생각해보면 process들이 서로 종속되지 않은 경우가 많기 때문에 하나의 core에서만 동작할 이유는 없었던거죠.


Core의 수가 더 많이지면 서로간의 발열문제가 더 심해질 수 있어서 single core에서 1.8Hz를 사용했다면 dual core에서는 각각 1.3Hz 정도로 낮춰서 사용하게 됩니다.



제가 사용하고 있는 "Intel Core i5-9600K processor"를 인터넷에 검색해보니 6개의 core를 사용하고 있다고 되어있네요. "윈도우키->작업 관리자->CPU->성능 탭"을 보니 정확히 6개의 코어가 작동되는걸 볼 수 있어요.


그런데 core밑에 thread라고 되어 있는데, thread는 무엇일까요?

바로 알아보도록 할게요!









<2. Thread>


Single Core에서 Dual Core로 기술이 발전하면서 CPU의 성능은 좀 더 좋아지기 시작했어요. 

CPU 설계자들은 더 좋은 CPU를 개발하려고 하다 문뜩 "하나의 Core에서 하나의 process만 동작하는데 이 process를 병렬로 구현시키면 어떨까?"라는 생각을 하게 됐어요.


Code를 작성해서 program을 만들때,  각각의 코드들이 고유의 영역을 갖는다는 사실 기억하시죠? (기억이 안나신다면 --> 링크)


<사진2>



<사진3>



Stack 영역 같은 경우는 해당 함수가 실행되고 나면 바로 메모리에서 소멸되기 때문에 굳이 process 내의 모든 요소들이 stack을 공유할 필요는 없어요. 예를들어, 지역함수가 실행된다고 해서 다른 code, data, heap에 있는 요소들이 stack의 정보를 필요로 하는건 아니니까요. 하지만 반대로 Code, Data, Heap 같은 영역의 데이터들은 stack이 공유해야 할 필요가 있어요. 단순한 예를들면, 지역함수가 실행되도 전역함수를 사용할 수 있기 때문이죠.


그래서 사람들은 process에서 code, data, heap 영역은 공유자원으로 하고 stack 같은 건 따로 병렬적으로 처리해도 되겠다라고 판단한거에요. 그래서 이러한 stack을 처리하기위해 thread라는 개념이 탄생하게 된거죠.


<사진4>


각각의 Thread는 process의 code, data, heap영역을 공유하고 stack을 별도로 처리하게 됩니다. 그렇다면 Thread도 자신들의 자료구조가 있겠죠? (Process의 PCB처럼요!)


우리는 Thread의 자료구조를 TCB(Thread Control Block)이라고 부른답니다. 대부분의 PCB와 비슷하지만 아무래도 process의 일부 영역을 공유하고 있기 때문에 TCP는 PCB보다 더 단순하답니다 (굳이 TCB에 중복되는(공유하고있는) PCB 정보를 추가해줄 필요는 없잖아요?)


<사진5>



일반적으로 하나의 core에 하나의 thread를 두고 있지만, 하나의 core에 두 개의 thread를 동작시키게 하면 위에서 언급한것 처럼 stack을 병렬로 처리할 수 있기 때문에 CPU의 속도가 더 빠르다고 느껴질거에요. 이렇게 하나의 core에 두 개의 thread를 두는 기술을 Hyper Threading이라고 한답니다 (2002년도에 hyper threading 기술이 나온걸 보면 Single core -> Thread -> Dual Core 순서로 발전된거 같아요).



<사진6>




<사진7>



Core와 Thread는 다음과 같이 구분할 수 도 있어요.

Core: CPU 안에서 물리적 연산을 담당하는 곳

Thread: 운영체제(OS)에서 인식하고 작동하는 작업 단위


그렇기 때문에 간혹 "작업 관리자"를 보면 single core를 사용하고 있음에도 CPU를 2개로 인식하는 경우가 있는데 이게 운영체제가 2개의 thread를 2개의 core로 착각하고 있기 때문이에요.


<사진8>



Hyper threading 기술은 인텔에서 붙인 이름이고 AMD는 위와 같은 기술을 SMT라고 부른답니다~








지금까지 살펴본 개념을 봐도 CPU의 스펙을 살펴볼때 어렵지않게 보실 수 있으실거에요. 

그럼 다음시간부터는 CPU 제조사들에 대해 알아보고 해당 모델들을 살펴보도록 할게요~








[글 래퍼런스]

https://www.youtube.com/watch?v=_dhLLWJNhwY


[사진 래퍼런스]

사진1

https://documentation.help/NI-TClk-Synchronization/niTClk_overview.html

사진2

https://sfixer.tistory.com/entry/%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%81%EC%97%ADcode-data-stack-heap

사진3

https://aerocode.net/199

사진4

https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html

사진5

https://www.geeksforgeeks.org/thread-control-block-in-operating-system/

사진6

https://www.youtube.com/watch?v=BYvuF3ziPHc&t=4s

사진7

https://www.youtube.com/watch?v=_dhLLWJNhwY

사진8

https://www.youtube.com/watch?v=_dhLLWJNhwY&t=2s



+ Recent posts