CPU
중앙처리장치
모든 연산의 중심. 클럭에 맞춰 메모리에서 명령어를 가져오고(Fetch), 해석하고(Decode), 실행한다(Execute).
CPU(중앙처리장치)는 명령어를 인출(fetch)·해석(decode)·실행(execute)하는 폰 노이만 구조의 심장으로, 그 동작은 전적으로 내부 '레지스터(register)'라는 초고속 저장소들 사이의 데이터 이동으로 이루어진다. 페치 단계에서 프로그램 카운터(PC)가 가리키는 주소가 MAR(메모리 주소 레지스터)로 복사되어 주소 버스로 나가고, 해당 명령어가 데이터 버스를 통해 MDR(메모리 데이터 레지스터)로 들어온 뒤 명령어 레지스터(IR)에 적재되며 PC는 다음 명령어를 가리키도록 증가한다. 디코드 단계에서 제어장치(Control Unit)의 명령어 디코더가 IR의 비트필드를 해석해 '어떤 연산을, 어떤 레지스터·피연산자로' 수행할지 제어 신호(control signal)로 변환한다. 실행 단계에서는 ALU(산술논리장치)가 실제 덧셈·비교·논리연산을 수행하고 그 결과는 누산기(Accumulator)나 범용 레지스터에 저장되며, 연산의 부수 결과(제로·캐리·오버플로·부호)는 상태/플래그 레지스터(FLAGS)에 기록되어 조건 분기의 근거가 된다. 이 모든 흐름은 클럭에 맞춰 동기화되고, 자주 쓰는 데이터·명령어는 L1/L2 캐시가 붙잡아 두며, 현대 CPU는 파이프라인으로 여러 명령을 겹쳐 처리해 처리량을 극대화한다.
내부 구성
핵심 포인트
- PC(프로그램 카운터)는 다음에 실행할 명령어의 주소를 보관하고, 명령 인출 후 자동 증가함
- MAR→주소 버스로 주소 송출, MDR←데이터 버스로 명령/데이터 수신 — 메모리와의 유일한 창구
- IR(명령어 레지스터)에 담긴 명령을 제어장치의 디코더가 해석해 제어 신호를 생성
- ALU가 산술·논리 연산을 수행하고 결과는 누산기/범용 레지스터에, 부수 결과는 FLAGS에 기록
- FLAGS(상태 레지스터)의 Zero/Carry/Overflow/Sign 비트가 조건 분기(if, 반복)의 판단 근거
- 레지스터가 메모리 계층의 최상단(1클럭)이며, L1(명령/데이터 분리)·L2 캐시가 그 아래에서 지연을 은폐
- 파이프라인(Fetch/Decode/Execute/Memory/Write-back)으로 명령을 겹쳐 처리해 처리량 향상, 슈퍼스칼라는 병렬 실행
심화
면접에서 '레지스터, 캐시, RAM의 차이'와 '왜 레지스터가 이렇게 많이 필요한가'는 단골 질문이다. 레지스터는 ALU 바로 옆에 있어 1클럭에 접근되는 CPU 내부 저장소로, C 컴파일러가 지역 변수와 중간 계산 결과를 레지스터에 배정(register allocation)해 메모리 왕복을 없애는 것이 최적화의 핵심이다. MAR/MDR을 명시적으로 이해하면 'CPU가 메모리를 어떻게 읽고 쓰는가'라는 질문에 정확히 답할 수 있는데, 주소는 항상 MAR을 거쳐 주소 버스로, 데이터는 항상 MDR을 거쳐 데이터 버스로 오간다는 것이 폰 노이만 병목(von Neumann bottleneck)의 물리적 실체다. 하버드 구조가 명령·데이터 버스를 분리하고, 현대 CPU가 L1을 I-cache와 D-cache로 나누는 것도 이 병목을 완화하려는 설계다. 한 단계 더 들어가면, 현대 x86 CPU는 겉으로 CISC 명령어를 받지만 내부적으로 디코더가 이를 RISC 형태의 마이크로연산(μop)으로 쪼개 파이프라인에 흘려보낸다. 여기에 파이프라인의 '해저드(hazard)'라는 개념이 붙는데, 분기 명령의 결과가 확정되기 전에 다음 명령을 미리 가져와야 하므로 분기 예측(branch prediction)이 필요하고, 예측이 빗나가면 파이프라인을 비우는(flush) 페널티가 발생한다. 또한 슈퍼스칼라(superscalar)와 비순차 실행(out-of-order execution)은 여러 실행 유닛에 명령을 동시에 흘려 IPC(클럭당 명령 수)를 1 이상으로 끌어올린다. FLAGS 레지스터를 조건 분기와 연결해 설명하고, 분기 예측 실패 비용까지 말할 수 있으면 CPU 파트에서 깊이를 인정받는다.
쉽게 말하면 요리사가 레시피(명령어)를 한 줄씩 읽고 → 이해하고 → 조리하는 과정을 초고속으로 반복.