1. CPU (Central Processing Unit) 개요
CPU는 컴퓨터 시스템의 두뇌 역할을 하는 핵심적인 전자 회로이며, 프로그램의 명령어를 해석하고 실행하여 데이터를 처리하는 장치다. CPU의 성능은 컴퓨터의 전반적인 성능을 결정하는 가장 중요한 요소 중 하나이며, 주로 클럭 속도(Clock Speed), 코어(Core) 수, 캐시(Cache) 메모리 크기 등으로 평가된다.
CPU는 기본적으로 명령어 사이클(Instruction Cycle)을 반복하여 동작한다. 이 사이클은 메모리에서 명령어를 가져오고(Fetch), 해석하며(Decode), 실행하고(Execute), 결과를 저장(Store)하는 단계로 이루어진다.
2. CPU의 핵심 구성요소
CPU는 크게 산술 논리 장치(ALU), 제어 장치(Control Unit), 그리고 레지스터(Register) 세 부분으로 구성된다. 이들은 내부 버스를 통해 상호 연결되어 데이터를 교환한다.
2.1. 산술 논리 장치 (ALU, Arithmetic Logic Unit)
ALU는 CPU 내부에서 실제 연산을 담당하는 핵심적인 디지털 회로다.
2.1.1. 기능
- 산술 연산: 덧셈, 뺄셈, 곱셈, 나눗셈과 같은 기본적인 수학적 연산을 수행한다.
- 논리 연산: AND, OR, NOT, XOR과 같은 불리언 논리 연산을 수행한다.
- 비트 연산: Shift, Rotate 등 비트 단위의 조작을 수행한다.
2.1.2. 내부 구조 및 구현 방식
ALU는 여러 논리 게이트(Logic Gates)의 조합으로 만들어진다.
- 반가산기(Half Adder): 두 개의 입력 비트를 받아 합(Sum)과 자리올림(Carry)을 출력한다.
- 전가산기(Full Adder): 두 개의 입력 비트와 아랫자리에서 올라온 자리올림수(Carry-in)를 포함하여 총 세 개의 비트를 입력받아 합과 자리올림(Carry-out)을 출력한다.
- 가산기/감산기: 전가산기를 여러 개 연결하여 N비트의 덧셈을 수행하는 회로를 구성할 수 있다. 뺄셈은 보수(Complement)를 이용한 덧셈으로 구현된다. 예를 들어,
A - B는A + (-B)와 같으며, -B는 B의 2의 보수(2's Complement)를 취해 얻는다. - 논리 회로: AND, OR, NOT, XOR 게이트를 직접 구현하여 각 논리 연산을 수행한다.
- 멀티플렉서(Multiplexer): 제어 장치로부터 오는 제어 신호(Control Signal)에 따라 여러 연산 중 어떤 연산의 결과를 출력으로 내보낼지 선택한다. 예를 들어, 제어 신호가 '00'이면 덧셈, '01'이면 뺄셈, '10'이면 AND 연산의 결과를 선택하는 방식이다.
이러한 구성 요소들이 결합되어 ALU는 제어 장치가 요청하는 다양한 연산을 효율적으로 처리할 수 있다.
2.2. 제어 장치 (CU, Control Unit)
제어 장치는 CPU의 모든 동작을 통제하고 지시하는 감독 역할을 한다. 프로그램의 명령어를 순서대로 해석하고, 각 장치에 필요한 제어 신호를 보내 CPU가 정해진 절차대로 작동하도록 조율한다.
2.1.1. 기능
- 명령어 인출(Fetch): 프로그램 카운터(PC)가 가리키는 메모리 주소에서 명령어를 가져온다.
- 명령어 해독(Decode): 가져온 명령어가 어떤 작업(Operation)을 수행해야 하는지 해석한다. 이 과정에서 명령어 레지스터(IR)에 저장된 명령어를 해독한다.
- 데이터 처리 지시: 명령어 해독 결과에 따라 데이터의 흐름을 제어하고, ALU나 레지스터 등 필요한 장치에 제어 신호를 보내 연산을 지시한다.
- 결과 저장 제어: 연산 결과를 레지스터나 메모리 중 어디에 저장할지 결정하고 제어 신호를 보낸다.
2.1.2. 구현 방식
제어 장치의 구현 방식은 크게 하드와이어드(Hardwired) 방식과 마이크로프로그램(Micro-programmed) 방식으로 나뉜다.
| 구분 | 하드와이어드 제어 장치 | 마이크로프로그램 제어 장치 |
|---|---|---|
| 구현 | 상태 머신(State Machine)을 기반으로 한 논리 회로(게이트)로 직접 구현 | 제어 메모리(ROM/RAM)에 저장된 마이크로코드(Microcode)로 구현 |
| 속도 | 매우 빠름 (하드웨어적으로 즉시 신호 생성) | 상대적으로 느림 (메모리에서 마이크로코드를 읽어와야 함) |
| 유연성/수정 | 낮음 (회로를 물리적으로 변경해야 함) | 높음 (제어 메모리의 마이크로코드만 수정하면 됨) |
| 복잡도 | 명령어 집합이 복잡해질수록 회로 설계가 매우 어려워짐 | 복잡한 명령어 집합도 마이크로코드로 쉽게 구현 가능 |
| 주 사용처 | RISC (Reduced Instruction Set Computer) 아키텍처 (e.g., ARM, MIPS) | CISC (Complex Instruction Set Computer) 아키텍처 (e.g., x86) |
- RISC vs CISC:
- RISC: 명령어의 종류가 적고, 길이가 고정되어 있으며, 1클럭에 1명령어를 처리하는 것을 목표로 한다. 파이프라이닝(Pipelining)에 유리하여 하드와이어드 방식으로 구현하기 적합하다.
- CISC: 복잡하고 다양한 길이의 명령어를 가지며, 하나의 명령어가 여러 하위 동작(Micro-operation)으로 구성된다. 이러한 복잡성 때문에 마이크로프로그램 방식으로 구현하는 것이 효율적이다.
2.3. 레지스터 (Registers)
레지스터는 CPU 내부에 존재하는 매우 빠른 소규모의 임시 저장 공간이다. 메모리(RAM)에서 데이터를 가져와 연산하고 다시 메모리로 내보내는 과정은 시간이 많이 걸리므로, CPU는 자주 사용하는 데이터를 레지스터에 저장하여 속도를 향상시킨다.
2.3.1. 주요 레지스터 종류
레지스터는 크게 범용 레지스터와 특수 목적 레지스터로 나뉜다.
- 범용 레지스터 (General-Purpose Registers): 이름 그대로 다양한 용도로 사용될 수 있는 레지스터다. 주로 산술 연산의 피연산자나 결과, 주소 계산 등에 사용된다. (e.g., x86의 EAX, EBX, ECX, EDX)
- 특수 목적 레지스터 (Special-Purpose Registers): 특정 기능이 정해져 있는 레지스터다.
- 프로그램 카운터 (PC, Program Counter): 다음에 실행할 명령어가 저장된 메모리 주소를 가리킨다. 명령어가 인출되면 PC는 자동으로 다음 명령어를 가리키도록 증가한다. (x86에서는 IP, Instruction Pointer라고 부름)
- 명령어 레지스터 (IR, Instruction Register): 현재 실행 중인 명령어를 보관한다. 제어 장치는 IR에 있는 명령어를 해독하여 필요한 제어 신호를 생성한다.
- 메모리 주소 레지스터 (MAR, Memory Address Register): CPU가 접근하려는 메모리의 주소를 저장한다. CPU가 메모리에서 데이터를 읽거나 쓸 때, MAR에 해당 주소를 먼저 실어 보낸다.
- 메모리 버퍼 레지스터 (MBR, Memory Buffer Register): 메모리에서 읽어온 데이터나 메모리에 쓸 데이터를 임시로 저장한다. MAR을 통해 지정된 주소와 MBR을 통해 데이터를 주고받는다. (MDR, Memory Data Register라고도 함)
- 상태 레지스터 (Status Register / Flags Register): 연산 결과의 상태(e.g., 자리올림 발생, 0 여부, 음수 여부 등)나 CPU의 현재 상태를 나타내는 플래그(Flag)들을 저장한다.
3. CPU의 동작 계층 구조 (Fetch-Decode-Execute Cycle)
CPU의 기본 동작은 사용자 프로그램 실행부터 하드웨어 제어까지 여러 계층에 걸쳐 이루어진다.
- 사용자 영역 (User Space):
- 사용자가 C++, Python 등 고급 언어로 작성된 프로그램을 실행한다. (
result = a + b;)
- 사용자가 C++, Python 등 고급 언어로 작성된 프로그램을 실행한다. (
- 컴파일러/인터프리터:
- 고급 언어 코드는 컴파일러에 의해 어셈블리 코드로 변환되고, 최종적으로 CPU가 이해할 수 있는 기계어(Machine Code)로 번역된다. 이 기계어 명령어들의 집합이 실행 파일이 된다.
- 운영체제 (OS, Kernel Space):
- 사용자가 프로그램을 실행하면, 운영체제는 해당 실행 파일을 메모리(RAM)에 적재(Loading)하고 프로세스를 생성한다.
- OS의 CPU 스케줄러는 이 프로세스에 CPU 사용 시간을 할당한다.
- CPU 하드웨어 계층:
- CPU는 자신에게 할당된 프로세스의 기계어 명령어를 하나씩 실행한다. 이 과정이 바로 명령어 사이클(Instruction Cycle)이다.
- ① 인출 단계 (Fetch):
- 제어 장치는 프로그램 카운터(PC)가 가리키는 메모리 주소를 메모리 주소 레지스터(MAR)로 보낸다.
- 메모리는 해당 주소의 명령어를 데이터 버스를 통해 메모리 버퍼 레지스터(MBR)로 전송한다.
- MBR에 있는 명령어는 명령어 레지스터(IR)로 옮겨진다.
- PC는 다음 명령어를 가리키도록 값이 증가된다.
- ② 해독 단계 (Decode):
- 제어 장치는 IR에 저장된 명령어의 연산 코드(Opcode)를 해독한다.
- 필요한 데이터(피연산자, Operand)가 있다면 해당 데이터의 위치(레지스터 또는 메모리 주소)를 파악한다.
- ③ 실행 단계 (Execute):
- 제어 장치는 해독된 명령어에 따라 적절한 장치에 제어 신호를 보낸다.
- 예를 들어, 덧셈 명령어라면 ALU에 덧셈 연산을 수행하라는 신호를 보낸다. 이때 필요한 데이터는 레지스터나 메모리에서 가져와 ALU에 입력으로 제공된다.
- 연산 결과는 특정 레지스터(e.g., 누산기)에 임시로 저장된다.
- ④ 저장 단계 (Store):
- 실행 결과를 최종적으로 레지스터나 메모리에 저장하며 명령어 사이클이 완료된다.
이러한 사이클이 클럭(Clock) 펄스가 발생할 때마다 동기화되어 수십억 번 반복되면서 프로그램이 실행된다.
4. 요약
CPU는 컴퓨터의 두뇌와 같은 역할을 하며, 크게 세 가지 핵심 요소로 구성됩니다. 첫째는 덧셈, 뺄셈 같은 산술 연산과 AND, OR 같은 논리 연산을 실제로 수행하는 산술 논리 장치(ALU)입니다. 둘째는 명령어의 흐름을 통제하고 각 장치에 작업 신호를 보내는 감독관 역할의 제어 장치(Control Unit)입니다. 셋째는 CPU가 작업하는 동안 필요한 데이터나 명령어, 연산 결과 등을 임시로 저장하는 고속 저장 공간인 레지스터(Register)입니다.
CPU의 동작은 기본적으로 '인출-해독-실행' 사이클을 반복하는 것입니다. 먼저 제어 장치가 메모리에서 다음에 실행할 명령어를 가져와(인출) 명령어 레지스터에 저장합니다. 그다음, 이 명령어가 어떤 작업인지 해석하고(해독), 해석된 내용에 따라 ALU나 다른 장치에 신호를 보내 명령을 처리하도록 합니다(실행). 이 모든 과정은 CPU 내부의 클럭 신호에 맞춰 매우 빠르게 반복되며, 이를 통해 프로그램이 실행됩니다.
특히 제어 장치를 구현하는 방식에는 하드웨어 논리 회로로 직접 만드는 '하드와이어드' 방식과, 제어 메모리에 저장된 '마이크로코드'를 이용하는 방식이 있습니다. 속도가 빠른 RISC 프로세서는 주로 하드와이어드 방식을, 복잡한 명령어를 처리하는 CISC 프로세서는 유연성이 높은 마이크로프로그램 방식을 주로 사용합니다.
'Computer Science' 카테고리의 다른 글
| CPU 스케줄링 CPU Scheduling (0) | 2025.11.19 |
|---|---|
| 캐시 메모리 Cache Memory (0) | 2025.11.19 |
| 가상 메모리 Virtual Memory (0) | 2025.11.17 |
| 메모리 구조 (0) | 2025.11.17 |
| 깊은 복사와 얕은 복사 (0) | 2025.11.14 |
