이 글은 혼자 공부하는 컴퓨터 구조 + 운영체제 (저자 : 강민철)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글이라는 것을 알립니다!!.
1. 클럭
- 클럭은
1초당 몇번의 클럭 신호가 동작하는가에 대한 수치입니다. - 클럭은 헤르츠(Hz) 단위로 측정합니다.
2. 멀티코어와 쓰레드 개요

이 개요는 책의 내용이 아닌 글쓴이가 따로 조사한 내용입니다.
전체적으로 클럭의 성능 상향이 어느정도 이뤄졌는지 보여주는 그래프입니다. 많은 CPU 아키텍처들이 2000년대에 들어 클럭수 성능 상향에 큰 벽에 마주치게 됩니다.
특히 클럭 수를 억지로 늘려서 사용했을 경우, 발열을 잡지 못했습니다.
그래서 CPU 설계하는 사람들은 고민에 빠지게 됐고 CPU의 성능 상향을 위해서 클럭을 억지로 늘리는 것이 아니라 쓰레드와 멀티 코어를 늘리는 방향으로 발전하게 됐습니다.
3. 코어와 멀티코어
- 코어 : CPU 내에서 명령어를 실행하는 부품으로 여러개가 존재할 수 있습니다.
- 멀티코어: 코어를
여러개 가지고 있는 CPU를 말합니다.멀티코어 프로세서라고 부르기도 합니다.
3.1 멀티코어에 대한 오해
코어가 2배, 3배, 4배로 늘어난다고 연산 처리 속도가 2배, 3배, 4배 늘어나진 않습니다. 만약 10명의 요리사가 요리를 한다고 가정해봅시다. 5인분의 요리를 만든다고 했을 경우와 5명이 요리를 했을 경우 10명이 만든 요리가 특별이 더 빠르게 나온다고 말할 수 없습니다.코어마다 명령어들을 얼마나 적절하게 분배하여 사용하는가에 따라서 연산 속도가 크게 달라지게 됩니다.
4. 스레드와 멀티스레드
- 스레드는
'실행 흐름의 단위'를 말합니다. - 스레드는
하드웨어적 스레드와소프트웨어적 스레드가 있습니다.
4.1 하드웨어적 스레드
하나의 코어가 동시에 처리하는 명령어 단위를 말합니다.
- 전통적인 1코어 1스레드방식

한 번에 하나의 명령어를 실행하는 CPU 입니다.
- 멀티스레드 프로세서 또는 멀티스레드 CPU

해당 이미지는 2코어 4스레드 입니다. 한 번에 4개의 명령어를 처리할 수 있습니다.
인텔 CPU의 멀티스레드 기술을 하이퍼스레딩라고 말하기도 합니다.

2코어 4스레드인 CPU는 하나의 코어에 두개의 레지스터 세트에 저장된 명령어를 해석합니다. ALU와 제어장치가 두개의 레지스터 세트의 명령어를 해석하여 실행하면 하나의 코어에서 두개의 명령어가 동시에 실행합니다.
마치 1코어 1 스레드의 CPU가 4개 있는 것 처럼 보입니다. 그래서 논리 프로세서라고 하기도 합니다.
4.2 소프트웨어적 스레드
하나의 프로그램에서 독립적으로 실행되는 단위를 말합니다.하나의 하드웨어적 스레드로여러개의 소프트웨어적 스레드를 실행할 수 있습니다.
자세하게 알아보고 싶다면 C, Python, Java 등등의 언어로 thread 프로그래밍을 직접 해보시는걸 추천합니다~.
5. 명령어 병렬 처리 기법
5.1 명령어 파이프 라인
명령어 파이프 라인의 순서는 다음과 같습니다.
- 명령어 인출
- 명령어 해석
- 명령어 실행
- 결과 저장
이 단계 외도 어떤 책에서는 명령어 인출, 명령어 해석, 명령어 실행, 메모리 접근, 결과 저장으로 나뉘기도 합니다.

- CPU는 같은 단계가 겹치지 않는다면 각 단계를 동시에 실행할 수 있습니다.
- 이러한 기법을
명령어 파이프라이닝라고 말합니다.
5.2 명령어 파이프라인 위험
명령어 파이프라이닝은 높은 성능을 가지고 오지만, 성능 향상에 실패하는 경우를 위험이라고 부릅니다.
5.2.1 데이터 위험
- 명령어 간 '데이터 의존성'에 의해 발생합니다.
명령어 1 : R1 ⬅️ R2 + R3
명령어 2: R4 ⬅️ R1 + R5
라고 가정했을 때, 명령어 2는 R1의 값을 알아야 하므로 명령어 1에 의존적 입니다. 혹여나 동시에 실행하게 된다면 제대로 작동하지 않습니다. 이를 데이터 위험이라고 합니다.
5.2.2 제어 위험
- 프로그램 카운터의 갑작스러운 변화에 의해 발생합니다.
- 이를 위해 사용하는 기술 중 하나가 분기 예측입니다. 분기 예측은 프로그램이 어디로 분기할지 미리 예측하고 그 주소를 인출합니다.
5.2.3 구조적 위험
- 명령어들이 겹쳐 실행하는 과정에서 서로 다른 명령어가 동시에 ALU, 레지스터 등과 같은 CPU 부품을 사용하려고 할 때, 발생합니다. 다른 이름으로 자원 위험이라고 부르기도 합니다.
5.3 슈퍼스칼라
- 단일 파이프라인으로 구현 되는 것이 아니라 여러개의 명령어 파이프 라인을 포함한 것을 슈퍼스칼라라고 합니다.
- 슈퍼 스칼라 구조로 명령어 처리가 가능한 CPU를
슈퍼스칼라 프로세서또는슈퍼스칼라 CPU라고 부릅니다.
5.4 비순차적 명령어 처리
- OoOE(Out-of-order execution)라고 줄여 부르기도 합니다.
- 순차적으로 실행하지 않고 합법적으로 중간에 끼어드는 방식입니다.
- 파이프라인의 중단을 방지하기 위해 명령어를 순차적으로 처리하지 않는 명령어 병렬 처리 기법입니다.
만약, 이런식으로 처리하는 코드가 있다고 가정해봅시다.
M(N) ⬅️ M
메모리 N번지에 M 을 저장하라.라고 생각하시면 됩니다.
- M(100) ⬅️ 1
- M(101) ⬅️ 2
- M(102) ⬅️ M(100) + M(101)
- M(200) ⬅️ 1
- M(201) ⬅️ 2
순차적으로 동작한다고 가정했을 경우에 3번의 명령어가 실행 이전에 1, 2번을 기다립니다. 2번 명령어가 실행되기 이전에 3, 4, 5 의 명령어가 모두 기다리게 됩니다.
비순차적으로 처리한다고 가정해보겠습니다.
- M(100) ⬅️ 1
- M(101) ⬅️ 2
- M(200) ⬅️ 1
- M(201) ⬅️ 2
- M(102) ⬅️ M(100) + M(101)
의존성이 있는 처리를 뒤로 밀고 의존성이 없는 처리를 먼저 수행할 수 있습니다. 순서를 바꿔도 무방한 명령어를 먼저 실행하여 파이프라인이 멈추는 것을 최소화하는 기법이라고 볼 수 있습니다.
6. CISC와 RISC
6.1 ISA
- ISA(Instruction Set Architecture)는
명령어 집합또는명령어 집합 구조라고 합니다. - CPU 마다 ISA가 다를 수 있습니다
- ISA는 CPU의 언어이자 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속입니다.

위의 그림처럼 CPU마다 읽을 수 있는 명령어가 달라 어셈블리도 다른 것을 알 수 있습니다.
6.2 CISC
- CISC(Complex Instruction Set Computer)는 복잡한 명령어 집합을 활용하는 컴퓨터를 의미합니다.
- 명령어의 형태와 크기가 다양한 가변 길이 명령어를 활용합니다.
- 특별한 주소 지정 방식들도 존재합니다.
- 메모리를 아끼며 개발해야 했던 시절에 인기가 많던 방법입니다.
- 치명적인 단점으로는 명령어의 크기가 모두 다르기 때문에, 실행되기 까지의 시간이 일정하지 않으며, 하나의 명령어를 실행하는데에 여러 클럭 주기를 필요로 합니다.

- 명령어의 길이가 모두 다르기 때문에 파이프 라인이 효율적으로 명령어를 처리할 수 없습니다. 현대 CPU에서는 파이프 라인의 높은 성능을 내기 위해 핵심 기술 중 하나입니다. 이것은
치명적인 약점입니다. - 복잡한 명령어의 사용 빈도가 적다고 합니다. 74년도 CISC 명령어 집합 중 20%가 전체 명령어의 80%를 차지한다고 했습니다. 이 말은 즉, 자주 쓰는 명령어만 자주 사용한다는 이야기입니다.
6.3 RISC
- RISC(Reduced Instruction Set Computer) 는 CISC의 한계를 해결하기 위해서 나온 방법을 말합니다. 위에서 이야기 했던 파이프 라이닝을 활용하기 위해서
명령어를 규격화하고 자주 사용하는 명령어를더 작고 빠르게 만드는 것을 기반으로 만들어졌습니다. load-store 구조라고 부르기도 합니다. 메모리에 직접 접근하는 명령어를load, store 두 개로 제한하여 메모리 접근을 단순화하고 최소화했기 때문입니다.- 1클럭 내외로 실행되는 명령어를 지향합니다.
- 고정 길이 명령어를 가지고 있습니다.
- 파이프 라이닝에 최적화되어 있습니다.
6.4 RISC와 CISC의 차이점 정리
| CISC | RISC |
|---|---|
| 복잡하고 다양한 명령어 | 단순하고 적은 명령어 |
| 가변 길이 명령어 | 고정 길이 명령어 |
| 다양한 주소 지정 방식 | 적은 주소 지정 방식 |
| 프로그램을 이루는 명령어의 수가 적음 | 프로그램을 이루는 명령어의 수가 많음 |
| 여러 클럭에 걸쳐 명령어 수행 | 1클럭 내외로 명령어 수행 |
| 파이프라이닝 하기 어려움 | 파이프라이닝하기 쉬움 |
긴글 읽어주셔서 감사합니다.
'ComputerScience > 컴퓨터 구조' 카테고리의 다른 글
| [컴퓨터 구조] 보조기억장치 (0) | 2024.09.02 |
|---|---|
| [컴퓨터 구조] 메모리와 캐시 메모리 (4) | 2024.08.30 |
| [컴퓨터 구조] CPU의 작동 원리 (1) | 2024.08.28 |
| [컴퓨터구조] 명령어에 대해서 알아보자. (0) | 2024.08.21 |
| [컴퓨터 구조] 0과 1로 표현하는 데이터 (0) | 2024.04.21 |
