중앙처리장치(Central Processing Unit, CPU)
컴퓨터의 가장 핵심적인 장치이다.
🔗 CPU 명령어 사이클에 따라 메모리(RAM)에서 명령어를 읽어 들이고, 이를 해석하여 수행하는 작업을 한다.
한 컴퓨터에 2개 이상의 CPU를 장착할 수 있으며, 이를 멀티 프로세서라고 한다.
Clock과 Hz
Clock
CPU 내부에서 시간의 흐름을 측정하고, CPU가 일정한 속도로 동작하기 위해 일정한 간격으로 공급되는 전기적 펄스이다.
Clock 한 번에 한 개의 명령이 처리된다.
Hz
주파수를 측정하는 단위로, 초당 사이클의 수를 나타낸다.
100Hz = 1초에 100회
전기적 신호가 초당 CPU에 공급되는 횟수라는 개념에서 Hz라는 단위로 CPU의 속도를 표현한다.
Hz가 높을수록 CPU는 더 많은 연산을 더 빠르게 수행할 수 있다.
CPU의 구성 요소
1. Core
CPU 역할을 수행하는 블록의 물리적인 단위로, 한 개의 CPU 칩 안에 하나 이상의 코어가 들어간다.
ex) 싱글코어, 듀얼코어, 쿼드코어, 헥사코어 ...
2. Cache Memory
RAM 보다 훨씬 빠른 메모리이다.
자주 사용되는 데이터와 명령어를 저장하고, CPU가 메모리에 접근할 때 캐시에서 데이터를 먼저 검색해 성능을 향상시킨다.
종류
- L1 Cache: 각 코어가 독립적으로 가지며, 가장 빠름
- L2 Cache: L1 Cache 간 공유됨
- L3 Cache: L2 Cache 간 공유됨
용어
- Cache Hit: 캐시 메모리에 찾는 데이터가 존재함
- Cache Miss: 캐시 메모리에 찾는 데이터가 존재하지 않음
- 시간적 지역성: 최근 사용된 데이터가 다시 사용될 가능성이 높음
- 공간적 지역성: 최근 사용된 데이터 근처에 있는 데이터가 사용될 가능성이 높음
용량이 매우 작고 많은 비용이 들기 때문에 CPU가 자주 사용할 만한 데이터를 잘 예측해서 저장해야 한다. -> Cache miss를 줄이고 Hit rate를 늘려야 한다.
시간적, 공간적 지역성을 가진 데이터를 저장하면 캐시의 적중률을 높일 수 있음.
3. Bus Interface
메모리나 다른 하드웨어와의 데이터 전송을 담당하는 경로.
4. Clock Generator
Clock 신호를 생성한다.
코어의 주요 구성 요소
1. ALU(Arithmetic Logic Unit)
다양한 산술 및 논리 연산을 처리한다.
- 산술: 덧셈, 뺄셈, 곱셈, 나눗셈 등
- 논리: AND, OR, NOT 등의 비트 수준 연산
- GR을 통해 피연산자를 입력 받음
- CU으로부터 명령을 전달 받음
- 연산을 수행한 결과를 다시 GR과 Flag register에 저장함
2. 제어 장치(Control Unit, CU)
전기적 제어 신호를 발생시켜서 명령어의 순서 및 수행, 하드웨어 구성 요소들의 동작을 제어한다.
- PC와 MAR에 저장된 주소를 바탕으로 메모리에서 명령어를 가져옴(Fetch)
- 가져온 명령어는 IR에 저장되고, 그 명령어를 해석함(Decode)
- 해석한 명령어에 따라 각 구성 요소에 적절한 제어 신호를 보내어 서로 어떻게 상호작용해야 하는지 지시함
- Clock 신호를 바탕으로 각 구성요소의 타이밍을 맞추고 동기화를 유지함
제어 신호의 역할
- 데이터 흐름 제어: 데이터의 이동 경로 제어
- 연산 제어: ALU가 어떤 연산을 수행할지 지시
- 명령어 순서 제어: 프로그램의 흐름 제어
- Flag register로 분기 명령어의 수행이나 연산의 결과에 따른 플래그를 받아 흐름에 반영함
- 입출력 장치 제어: 입출력 장치와의 상호작용을 관리
3. Register
CPU 내부에 가장 빠른 저장 장치로, 프로그램 속 명령어와 데이터는 실행 전후로 레지스터에 저장된다.
CPU는 연산을 수행하기 위해 데이터를 자주 읽고 써야 하는데 CPU <-> 메모리의 전송 속도가 CPU <-> 레지스터 보다 느리기 때문에 메모리와 직접 데이터를 주고받지 않고 레지스터를 사용한다.
32Bit / 64Bit 컴퓨터라는 용어에서 비트는 레지스터의 비트 수를 말한다. (저장 가능한 공간의 크기)
📍 CPU마다 레지스터의 종류가 매우 다양하기 때문에, 아래는 많은 CPU가 공통적으로 포함하고 있는 레지스터들을 다룬다.
1. PC(Program Counter)
- 메모리에서 읽어 들일 명령어의 주소를 저장하는 레지스터
- CPU가 명령어를 실행할 때마다 PC가 자동적으로 증가하여 다음 명령어의 위치를 가리킴
- 분기 명령어나 함수 호출 같은 명령어가 수행되면 그에 따라 PC가 변경될 수 있음
- CPU가 프로그램을 순차적으로 실행하는데 굉장히 중요한 역할을 함
2. 명령어 레지스터(Instruction Register, IR)
- 현재 CPU가 해석하고있는 명령어를 저장하는 레지스터
- 명령어가 메모리에서 읽히면 먼저 이 레지스터에 저장되고, CPU는 이곳에서 명령어를 읽어 해석하고 실행함
3. 메모리 주소 레지스터(Memory Address Register, MAR)
- 메모리의 주소를 저장하는 레지스터
- 메모리와의 안정적이고 정확한 통신에 사용하기 위한 목적으로 저장함
- CPU가 메모리의 특정 위치에서 데이터를 읽으려고 함
- 메모리가 저장된 주소는 먼저 MAR에 저장됨
- 다시 MAR을 사용하여 해당 위치를 찾음
4. 메모리 버퍼 레지스터(Memory Buffer Register, MBR)
- CPU가 메모리에서 데이터를 읽으려고 함
- 데이터는 먼저 MBR에 저장됨
- CPU는 MBR을 통해 데이터를 가져옴
- 반대로 CPU가 메모리에 데이터를 쓸 때도 이 과정을 거침
5. 일반 목적 레지스터(General Purpose Register, GR)
- 데이터 임시 저장과 연산을 위한 레지스터
- 고전적인 CPU에서 중요한 역할이었던 누산기(Accumulator)의 역할
6. 플래그 레지스터(Flag Register)
- CPU가 최근에 수행한 연산에 대한 정보와 CPU의 현재 상태를 나타내는 플래그를 저장함
- CPU가 복잡한 연산을 수행하거나 프로그램 흐름을 제어하는 데 사용됨
- 연산 결과가 양수 또는 음수인지, 오버플로우가 발생했는지 등
- CPU의 상태를 나타내는 용도로 Status Register가 따로 있을 수 있음
7. 스택 포인터(Stack Pointer)
- 스택의 가장 위를 가리키는 레지스터로, 채워져있는 만큼의 가장 상단을 가리킴
- 스택의 상태를 관리하는 데 필수임
Reference
https://velog.io/@underlier12/컴퓨터구조-09-CPU-내부-구조와-레지스터
https://wikidocs.net/63816
https://hwannny.tistory.com/96