코어: 명령어를 실행할 수 있는 '하드웨어 부품'
스레드: '명령어를 실행하는 단위'
멀티코어 프로세서: 명령어를 실행할 수 있는 하드웨어 부품이 CPU안에 두개 이상 있는 CPU
멀티스레드 프로세서: 하나의 코어로 명령어를 동시에 수행할 수 있는 CPU
[클럭]
- 컴퓨터 부품들은 클럭 신호에 맞춰서 일사불란하게 움직인다.
- CPU는 '명령어 사이클' 이라는 정해진 흐름에 맞춰 명령어들을 실행한다.
- 클럭 속도: 헤르츠(Hz) 단위로 측정한다. 클럭이 1초에 반복되는 회수를 말하는데 클럭이 1초에 한번 반복하면 1Hz 이고 1초에 100번 반복되면 100Hz
- 클럭 신호는 CPU에 의해서 속도를 조절한다. 일정한 것이 아니다.
- 클럭 신호가 마냥 높다고 CPU의 속도가 꼭 빨라지는것은 아니다. 필요 이상으로 클럭을 높이면 발열이 심해진다.
(하드웨어에 무리가 장시간으로 가는 프로그램을 실행할 경우 발열이 발생함)
* 그렇다면 클럭 속도를 늘리는 방법? :
1. 코어 수를 늘리기 - 듀얼 코어, 멀티 코어
2. 스레드 수를 늘릴 수 있다. - 멀티 스레
[코어& 멀티코어]
코어란?
CPU란 용어를 재해석 해야한다. 단순히 명령어를 실행하는 부품이라 생각하는 CPU는 전통적으로 하나만 존재했을 때를 얘기한다. 오늘날의 CPU는 '명령어를 인출하고 해석하는 실행하는 부품'이 여러개가 존재하게됐다. 그리고 CPU안에 이러한 '명령어를 실행하는 각각의 부품'을 코어라고 칭하게 됐다.
프로세스 안에 여러개가 있을 수 있게되었다.
단일적으로 움직이는 코어는 싱글 코어라고 한다.
그 외 2개 이상, 여러개의 코어는 멀티 코어라고 한다.
멀티 코어 프로세서란 여러 개의 코를 포함하고 있는 CPU를 말한다.
코어수 | 프로세스 명청 |
1 | 싱글코어 |
2 | 듀얼코어 |
3 | 트리플코어 |
4 | 쿼드코어 |
6 | 헥사코어 |
8 | 옥타코어 |
10 | 데카코어 |
12 | 도데카코어 |
코어를 두, 세개 이상 늘리면 연산 속도도 그에 비례해서 빨라지는가?
정답은 NO.
코어 마다 처리하는 연산이 적절히 분배되지 않는다면 코어 수에 비례하여 증가하지 않는다.
성능에는 크게 영향이 없다.
여러개의 코어를 두는 설계 방식은 명령어들을 각각의 코어에 적절하게 분배하는 것에 따라 달라진다.
[스레드& 멀티 스레드]
스레드란?
'실행 흐름의 단위' 으로 하드웨어 스레드와 소프트웨어 스레드가 있다.
하드웨어 스레드:
하나의 코어가 동시에 처리하는 명령어 단위이다.
하나의 명령어를 받아들여서 처리하는 것을 1코어 1스레드 CPU이다.
CPU내부 명령어를 가져와서 처리 실행하는 코어가 2개가 있고 각각의 코어가 2개씩의 명령어를 각각 실행할 수 있을 때
한번에 처리할 수 있는 명령어는 4개이다. (2코어 4스레드 CPU)
이렇게 하나의 코어가 여러개의 명령어를 동시에 실행 할 수 있는 프로세서를 멀티 스레드 프로세서, 멀티 스레드 CPU라고 한다.
현재 이미지에서 Core는 8, Thread는 16이다.
(1초에 클럭이 기본적으로 25억번(2.5Hz x 4 109) / 순간적 최대 49억(4.9Hz x 109) 번 반복)
명령어를 실행하고 처리하는 부품이 8개가 있고 각각의 코어가 동시에 실행할 수 있는 명령어 2개씩 처리할 수 있기에 결과적으로는 16개의 명령어를 동시에 실행할 수 있다는 의미가 된다.
소프트웨어 스레드: 하나의 프로그램에서 독립적으로 실행되는 단위를 말한다.
하나의 프로그램에서 순차적으로 스레드가 실행 되는 구조 싱글 스레드
두개 이상의 스레드가 사용되고 있다면 멀티 스레드.
ex)
1. 사용자로부터 입력받은 내용을 화면에 보여주는 기능
2. 사용자가 입력한 내용이 맞는지 검사하는 기능
3. 사용자가 입력한 내용을 수시로 저장하는 기능
1번 ~ 3번이 순차적으로 진행되는 것이 아닌 하나 하나 독립적으로 실행되는 스레드를 3개를 만들어 동시에 실행하면
(각각의 명령어가 한번에 동시에 처리) 하나의 프로그램을 실행할 수 있다.
이러한 양상이 소프트웨어적인 스레드이다.
하드웨어적 스레드는 하나의 코어가 동시에 처리하는 명령어 단위라 했지만 1코어 1스레드 CPU도 여러 소프트웨어적 스레드를 만들 수 있다.
즉 하드웨어적인 스레드가 하나 일지라도 소프트웨적 스레드를 여러개 만들 수 있기에 단순히 스레드가 실행 흐름의 단위가 생각말고 유연하게 소프트웨어적, 하드웨어적 스레드로 이해하는 것이 좋다.
하드웨어 스레드는 하나의 코어가 동시에 처리하는 단위
하드웨어를 여러개 갖고 있는 멀티 스레드 프로세스 설계를 한다면
레지스터가 가장 큰 핵심임
잠시 하드웨어적인 스레드..
멀티스테드 프로레서를 실제로 설계하는 일은 매우 복잡하지만, 가장 큰 핵심은 레지스터이다.
레지스터 세트 순서
1. 프로그램 카운터: 메모리에서 가져올 명령어 주소를 저장
2. 명령어 레지스터: 해석할 명령어 (방금 메모리에서 읽어들인 명령어)
3. 메모리 주소 레지스터: 메모리 주소 (CPU가 읽고 들이고자 하는 주소를 주소 버스로 보낼 때 거치는 레지스터)
4. 메모리 버퍼 레지스터: 메모리와 주고받을 값 (데이터와 명령어) / CPU가 정보를 데이터 버스로 주고 받을 때 거치는 레지스터
5. 플래그 레지스터: 연산 결과 또는 CPU 상태에 대한 부가적인 정보
6. 범용 레지스터: 다양하고 일반적인 상황에서 자유롭게 사용 (주소, 명령어, 데이터 등 보통 여러개 있다.)
7. 스택 포인터: 스택의 꼭대기 , 주소 지정에 사용
8. 베이스 레지스터: 주소 지정에 사용
레지스터 세트가 하나의 코어에 여러개가 있다면 하나의 코어가 여러개 명령어를 동시 처리할 수 있는 멀티 코어 프로세서를 설계할 수 있다. (가장 큰 핵심은 레지스터)
ex) 하나의 코어가 프로그램 카운터를 2개 가지고 있을 경우 ( 프로그램 카운터: 다음으로 인출 할 메모리 주소 저장 )
2개가 있을 경우 다음으로 실행할 주소 2개 지정할 수 있는 상태가 된다.
또한 하드웨어 스레드는 논리 프로세서 라고도 부른다.
메모리 내에 있는 프로그램의 수로 메모리는 해당 CPU의 코어와 스레드를 알 수 없다.
단지 메모리에서 실행되는 명령어의 작업 흐름의 개수 실행으로 판단하여 코어와 스레드를 짐작 할 수 있게 된다.
(위 그림 예시)
실제 프로세스의 개수는 아니지만, 메모리에서 저장되고 실행되는 개수로 메모리는 하드웨어 개수를 짐작한다.
그래서 하드웨어 스레드는 논리적으로 CPU개수를 의미하기에 논리 프로세서라고도 부른다.
윈도우 작업관리에자에서 확인하게 된다면 논리 프로레서의 수로 하드웨어 스레드의 개수를 알 수 있다.
'CS > 컴퓨터구조와운영체제' 카테고리의 다른 글
장치 컨트롤러와 장치 드라이버 (0) | 2023.07.01 |
---|---|
RAM의 특성과 종류 (0) | 2023.06.06 |
CPU 내부 구성 (0) | 2023.05.17 |
컴퓨터구조_소스 코드와 명령어 (0) | 2023.05.14 |
컴퓨터 구조 (0) | 2023.05.13 |
댓글