CPU는 컴퓨터의 실행 기관이다
앞 장에서 본 논리회로는 0과 1을 계산하고 저장할 수 있었다. CPU는 이런 회로들을 모아 "명령을 읽고, 판단하고, 실행하는 장치"로 만든 것이다. 프로그램은 결국 많은 명령어의 묶음이다. CPU는 이 명령어를 하나씩 처리하면서 덧셈을 하고, 값을 비교하고, 메모리에서 데이터를 가져오고, 결과를 다시 저장한다.
CPU 안에는 크게 세 가지 핵심 요소가 있다. 제어장치, 산술논리장치, 레지스터다.

제어장치, ALU, 레지스터
제어장치는 CPU의 지휘자다. 지금 어떤 명령어를 실행해야 하는지 확인하고, CPU 내부의 여러 회로에 "이 값을 읽어라", "이 연산을 하라", "결과를 저장하라" 같은 신호를 보낸다.
산술논리장치(ALU)는 실제 계산을 맡는다. 덧셈과 뺄셈 같은 산술 연산을 하고, 두 값이 같은지, 어느 쪽이 큰지 같은 논리 판단도 한다. 프로그램에서 a + b를 계산하거나 x > 10을 검사할 때 그 중심에는 ALU가 있다.
레지스터는 CPU 안에 있는 아주 작고 빠른 임시 저장 공간이다. 메모리보다 훨씬 빠르지만 개수와 용량은 작다. CPU는 계산할 값을 레지스터에 올려 두고 ALU로 보내며, 계산 결과도 먼저 레지스터에 담는다. 책상 위에 지금 당장 필요한 종이만 올려 두는 것과 비슷하다.
명령어 사이클: 인출, 해독, 실행, 저장
CPU가 명령어를 처리하는 내부 방식은 CPU 설계에 따라 다를 수 있다. 그래도 큰 흐름은 보통 인출, 해독, 실행, 저장이라는 단계로 이해할 수 있다.
첫째, 인출이다. CPU는 메모리에서 다음에 실행할 명령어를 가져온다. 프로그램도 데이터처럼 0과 1로 메모리에 저장되어 있으므로, CPU는 정해진 주소로 가서 명령어 비트를 읽는다.
둘째, 해독이다. 가져온 비트가 무슨 뜻인지 제어장치가 해석한다. 예를 들어 이 명령이 "두 레지스터 값을 더하라"인지, "메모리에서 값을 가져오라"인지, "다른 위치로 이동하라"인지를 판단한다.
셋째, 실행이다. 해석한 명령에 따라 ALU가 계산하거나, 레지스터 사이에 값이 이동하거나, 메모리 접근이 일어난다.
넷째, 저장이다. 실행 결과를 레지스터나 메모리에 기록한다. 이렇게 한 명령어가 끝나면 CPU는 다시 다음 명령어를 가져온다. 이 반복이 프로그램 실행의 기본 흐름이다.
프로그램 카운터는 다음 주소를 기억한다
CPU가 명령어를 차례대로 실행하려면 "다음 명령어가 어디에 있는지" 알아야 한다. 이 역할을 하는 레지스터가 프로그램 카운터다. 프로그램 카운터는 다음에 가져올 명령어의 메모리 주소를 담고 있다.
명령어 하나를 인출하면 프로그램 카운터는 보통 다음 주소로 증가한다. 그래서 CPU는 프로그램을 위에서 아래로 읽듯이 순서대로 실행한다. 하지만 조건문이나 반복문에서는 흐름이 바뀐다. 예를 들어 어떤 값이 0이면 다른 위치의 명령어로 이동하라는 명령이 있을 수 있다. 이때 CPU는 프로그램 카운터의 값을 새 주소로 바꾼다. 우리가 코드에서 if, while, for를 사용할 수 있는 이유도 결국 프로그램 카운터의 주소가 조건에 따라 바뀌기 때문이다.
클럭은 CPU의 박자를 만든다
CPU 내부의 회로들은 아무 때나 제멋대로 움직이지 않는다. 클럭 신호라는 일정한 전기적 박자에 맞춰 동작한다. 클럭이 한 번 뛸 때마다 CPU 내부에서는 값이 이동하거나, 연산의 한 단계가 진행된다.
클럭 속도가 높다는 것은 1초에 더 많은 박자를 만들 수 있다는 뜻이다. 그래서 일반적으로 클럭이 빠르면 더 많은 일을 처리할 가능성이 크다. 그러나 성능이 클럭만으로 결정되지는 않는다. 한 명령어를 처리하는 데 필요한 단계 수, 한 번에 처리할 수 있는 명령어 수, 메모리에서 데이터를 기다리는 시간도 중요하다. 빠른 박자만으로는 좋은 연주가 완성되지 않는 것과 같다.
파이프라이닝: 여러 명령을 겹쳐 처리하기
명령어 사이클을 그대로 하나씩 끝내고 다음 명령을 시작하면 CPU의 일부 회로는 자주 놀게 된다. 예를 들어 한 명령어가 실행 단계에 있을 때, 인출 장치는 쉬고 있을 수 있다. 이를 줄이기 위해 CPU는 파이프라이닝을 사용한다.
파이프라이닝은 여러 명령어를 서로 다른 단계에서 동시에 처리하는 방식이다. 첫 번째 명령어가 실행 단계로 넘어가면, 두 번째 명령어는 해독되고, 세 번째 명령어는 인출될 수 있다. 공장에서 여러 제품이 한 줄로 이동하며 각 작업대를 차례로 지나는 모습과 비슷하다.
이 방식은 CPU가 더 쉬지 않고 일하게 해 속도를 높인다. 다만 항상 완벽하게 흐르지는 않는다. 앞 명령어의 결과가 나와야 다음 명령어를 실행할 수 있거나, 조건문 때문에 다음에 갈 주소가 바뀌면 파이프라인이 잠시 멈추거나 비워질 수 있다.
명령이 모여 프로그램이 된다
CPU는 사람처럼 프로그램의 의미를 이해하지 않는다. 그저 프로그램 카운터가 가리키는 주소에서 명령어를 가져오고, 제어장치가 해독하고, ALU와 레지스터가 실행하고, 결과를 저장한다. 이 단순한 과정이 매우 빠르게 반복되면서 화면이 바뀌고, 파일이 열리고, 게임 속 캐릭터가 움직인다.
프로그램 실행은 결국 명령어 사이클의 반복이다. CPU의 원리를 이해하면 코드가 추상적인 문장이 아니라, 실제 회로 안에서 0과 1이 이동하고 계산되는 과정임을 볼 수 있다.
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.
