[CS] 컴퓨터 구조: CPU의 동작 원리
2026. 3. 11. 11:15ㆍComputer Science
이전 글: [CS] 게임 개발자를 위한 컴퓨터 구조와 데이터의 이해
1. CPU의 물리적 구조
컴퓨터의 두뇌 역할을 하는 CPU가 물리적으로 어떻게 구성되어 있으며, 외부 부품과 어떻게 연결되는지 나타내는 하드웨어 요소들입니다.
1.1. CPU 내부 핵심 부품
CPU(Central Processing Unit, 중앙처리장치)는 물리적으로 메모리와 거리가 멀기 때문에 정보를 가져와 처리하는 일련의 과정을 거치며, 다음 세 가지 핵심 부품의 상호작용으로 작동합니다.

- 산술논리연산장치 (ALU, Arithmetic Logic Unit)
- 가산기, 보수기, 논리 게이트 등으로 구성된 회로 뭉치로, 컴퓨터 코드의 산술 연산이나 논리 판단을 수행하는 일종의 '계산기'입니다.
- CPU 내에서 유일하게 "값이 실제로 변하는" 장소입니다.
- 메모리까지의 거리가 멀어 CPU 내부에 임시로 둔 레지스터에서 숫자들을 가져와 더하거나 빼고, 크기를 비교합니다.
- 계산이 끝나면 "결과가 0이다" 혹은 "마이너스다" 같은 상태를 플래그(Flag) 레지스터에 기록해 둡니다.
- 제어장치 (CU, Control Unit)
- 전기 신호를 뿌려 CPU의 모든 부품을 깨우고 움직이게 하는 '전기 스위치 관리자'입니다.
- 직접 계산하지는 않으며, 클럭(Clock)이라는 일정한 전기 신호 속도(박자)에 맞춰 부품들이 동시에 움직이게 합니다.
- 명령어 해독기를 통해 메모리에서 가져온 암호(기계어)가 어떤 뜻인지 번역하고, 제어 버스를 통해 ALU나 메모리에 전선 스위치를 ON/OFF 하는 방식으로 명령(예: "ALU야 더하기 해!")을 내립니다.
- 레지스터 (Registers)
- 메모리가 너무 멀어 작업 시간이 오래 걸리기 때문에, CPU가 당장 쓸 숫자나 주소를 자기 품 안에 담아두는 '임시 데이터 바구니(주머니)'입니다.
- PC (Program Counter, 프로그램 카운터): CPU가 다음에 해야 할 일(다음에 읽을 메모리 주소)의 순서가 적혀있는 '다음 요리 대기표'입니다.
- IR (Instruction Register, 명령어 레지스터): 지금 당장 실행 중인 명령어를 담아두는 '지금 보고 있는 레시피'입니다.
- MAR (Memory Address Register): 창고(메모리)에 재료를 가지러 갈 때 목적지 주소를 적어두는 '창고 주소 쪽지'입니다.
- MBR (Memory Buffer Register): 창고에서 꺼내온 재료가 주방으로 들어오기 위해 잠시 머무는 '임시 배차 쟁반'입니다.
- 범용 레지스터: 지금 당장 계산에 쓸 숫자를 담아두는 그릇입니다.
- 플래그 레지스터: 연산 결과의 상태(0인지 음수인지 등)를 나타내는 일종의 표시를 저장합니다.
1.2. 외부 연결 통로: 시스템 버스
CPU와 메모리, 주변 장치들이 서로 물리적으로 전기 신호와 데이터를 주고받기 위해 연결된 하드웨어 통로입니다.
- 주소 버스 (Address Bus): CPU가 어디에 있는 데이터를 쓸 것인지 지목하는 통로입니다. CPU에서 메모리 방향으로만 흐르는 단방향 통로이며, 주소 버스의 폭(선로 수)이 메모리 용량을 결정합니다. 편지 봉투에 주소를 적는 것과 같습니다.
- 데이터 버스 (Data Bus): 실제 내용물(데이터나 명령어)이 오고 가는 통로입니다. 양방향 통로이며, 폭(32비트, 64비트 등)이 한 번에 전송할 수 있는 데이터의 양을 결정합니다. 도로가 넓을수록 한 번에 더 많은 트럭이 지나가는 것에 비유할 수 있습니다.
- 제어 버스 (Control Bus): 명령어와 상태를 전달하는 신호등입니다. 상대방에게 '읽어라', '써라' 같은 제어 명령을 전달하고, 운영체제에서 CPU의 일을 멈춰 세우는 인터럽트(Interrupt) 신호나 버스 승인 신호를 주고받습니다.
- 협력 시나리오 (데이터 가져오기): CPU가 특정 주소(예: 100번지)의 데이터를 읽고 싶을 때, 주소 버스는 "100번지로 가라!"고 위치를 지정하고, 제어 버스는 "지금 당장 읽어라!"고 명령하며, 데이터 버스는 해당 데이터를 CPU로 보냅니다.
2. CPU의 동작 원리와 성능
물리적 부품들이 실제로 어떻게 상호작용하여 명령을 처리하는지(사이클), 그리고 그 처리 속도와 효율을 결정하는 요소는 무엇인지에 대한 내용입니다.
2.1. 명령어 사이클
CPU에 전원이 켜져 있는 동안 무한히 반복하는 작업 흐름입니다. (메모리에 저장된 명령어를 읽어 들이고(Fetch), 해석하고(Decode), 실행(Execute)하는 과정). 게임 엔진의 모든 코드도 1초에 수억 번 이 사이클을 반복한 결과물입니다.
- 인출 (Fetch, 명령어를 가져오다): 메모리에 있는 명령어를 CPU 안으로 들여오는 과정입니다.
- PC에 저장된 주소가 MAR로 전달됩니다.
- 제어장치가 제어 버스로 '메모리 읽기' 신호를 보냅니다.
- 메모리가 해당 주소의 데이터를 데이터 버스에 실어 보냅니다.
- 도착한 데이터가 MBR을 거쳐 IR에 저장됩니다.
- 다음 작업을 위해 PC 값은 1 증가합니다. (비유: 요리사가 다음에 할 일(PC)을 보고, 창고에 가서 레시피 종이를 눈앞의 독서대(IR)에 가져다 놓는 과정입니다.)
- 해독 (Decode, 명령을 이해하다): 가져온 명령어가 무슨 뜻인지 분석하는 단계입니다. 제어장치의 명령어 해독기가 IR에 담긴 암호 같은 기계어를 분석하여 ALU 등 어떤 부품을 어떻게 움직일지 구체적인 실행 계획으로 분해합니다. (비유: 암호로 된 외국어 레시피를 "소금을 넣어라"는 정확한 행동 지침으로 번역하는 것입니다.)
- 실행 (Execute, 명령을 수행하다): 해독된 명령에 따라 물리적 동작을 취합니다. ALU가 산술/논리 연산을 하거나 데이터를 레지스터/메모리로 보냅니다. (비유: 번역된 레시피를 바탕으로 진짜 칼질을 하고 요리를 진행하는 것입니다.)
2.2. 처리 성능을 결정하는 부가 요소
- 클럭 (Clock, 박자): CPU의 심장 박동과 같으며, 클럭 속도(Hz)가 높아진다는 것은 명령어 사이클(인출-해독-실행)을 더 빠르게 반복하여 연산 속도가 높아진다는 뜻입니다. 기본 클럭(Base)과 고사양 작업 시 올리는 최대 클럭(Max), 그리고 강제로 한계를 끌어올리는 오버클러킹(Overclocking)이 있지만, 오버클러킹 시 발열 문제를 해결하지 못하면 부품이 녹아내리는 등 손상을 입습니다. 요리사의 칼질 속도로 비유됩니다.
- 코어 (Core): 요리사 자체의 수를 늘리는 것과 같습니다. 멀티코어 프로세서는 한 CPU 안에 여러 개의 코어를 가져 동시에 여러 일을 처리할 수 있습니다 (듀얼, 쿼드, 헥사, 옥타 코어 등). 단, 코어가 늘어나도 일이 균등하게 분배되지 않으면 성능 향상으로 이어지지 않습니다.
- 스레드 (Thread): 하드웨어 관점에서는 코어가 동시에 처리할 수 있는 명령어의 단위(요리사의 손 개수)입니다. 1코어 2스레드라면 한 명의 요리사가 양손을 사용해 2개의 명령어를 동시 처리하는 효율을 냅니다. (운영체제 단의 소프트웨어 스레드는 요리사가 해야 할 일의 목록을 의미합니다).
3. 소프트웨어와 하드웨어의 상호작용: 언리얼 엔진 Insight
소프트웨어(엔진 코드)가 앞서 설명한 CPU의 물리적인 하드웨어 및 동작 원리 위에서 어떻게 실질적으로 처리되고 최적화되는지를 보여줍니다.
3.1. 실행 흐름과 자원 분배 추상화
- Tick() 함수와 프레임: 엔진에서 매 프레임 호출되는 가장 기본적인 실행 단위인 Tick()은 CPU 하드웨어의 무한 사이클을 엔진 수준에서 추상화한 것입니다. CPU가 클럭(박자)에 맞춰 레시피를 처리한다면, 언리얼 엔진은 이 박자들을 모아 1초에 60번/144번 요리를 완성(Frame)하는 거대한 시스템입니다.
- 언리얼의 멀티 스레드 활용: 엔진은 여러 코어를 최대한 활용하기 위해 주요 작업을 목적별로 나누어 할당합니다. 게임 로직은 Game Thread, 화면 그리는 작업은 Render Thread, 비동기 작업(셰이더 컴파일 등)은 Worker Thread에 분배하여 동시에 처리합니다.
3.2. 연산과 제어의 실제 프로세스
- C++과 블루프린트(VM)의 속도 차이: C++ 코드는 컴파일 시점에 기계어로 변환되어 CPU가 즉시 실행할 수 있는 '요리사가 이미 외운 레시피'입니다. 반면 블루프린트는 CPU가 바로 이해하지 못하는 가상 코드로 작성되어, 가상 머신(VM)이 이를 번역하는 해독(Decode) 과정이 한 번 더 추가되므로 더 느리게 작동합니다 (통역사가 필요한 외국어 레시피).
- 조건문(if)의 처리 방식: if (HP <= 0) 같은 로직은 ALU가 현재 HP 값에서 0을 빼는 연산을 먼저 수행합니다. 결과가 0 이하거나 음수일 경우, 상태를 기록하는 플래그 레지스터(Zero/Sign 플래그)의 값이 1로 바뀝니다. 제어장치는 이 플래그를 확인하고, 조건이 충족되었다면 다음 실행 흐름을 바꾸기 위해 PC 값을 사망 애니메이션 코드가 있는 메모리 주소로 강제 점프(업데이트)시킵니다.
3.3. 메모리 병목과 데이터 접근 최적화
- 데이터 지역성(Data Locality)과 TArray: 메모리에서 CPU 레지스터로 데이터를 가져오는 시스템 버스는 CPU 연산보다 속도가 매우 느립니다(병목 발생). TArray 같은 자료구조를 사용해 관련된 데이터를 메모리상에 순서대로 쪼르륵 묶어서 배치하면, 한 번의 버스 전송으로 임시 쟁반(MBR)에 여러 데이터를 한꺼번에 담아올 수 있습니다(캐시 히트). 이처럼 데이터를 흩어놓지 않고 묶어서 관리하는 것은 최고의 요리사인 CPU가 쉬지 않고 일할 수 있도록 배려하는 행위입니다.
'Computer Science' 카테고리의 다른 글
| [CS] CPU 성능 지표: 클럭, 코어, 스레드 (0) | 2026.03.13 |
|---|---|
| [CS] 게임 개발자를 위한 컴퓨터 구조와 데이터의 이해 (0) | 2026.03.09 |
| [CS] CS의 분야 (0) | 2026.03.09 |